@tollerud/ui 1.0.7 → 1.1.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../lib/utils.ts","../components/Button.tsx","../components/Alert.tsx","../components/Card.tsx","../components/Badge.tsx","../components/StatusDot.tsx","../components/Input.tsx","../components/CodeBlock.tsx","../components/StatCard.tsx","../components/Container.tsx","../components/NoirGlowBackground.tsx","../components/Kbd.tsx","../components/ActionRow.tsx","../components/CommandMenu.tsx","../components/ServiceHealthCard.tsx","../components/HostCard.tsx","../components/DockerStackCard.tsx","../components/IncidentCard.tsx","../components/ApprovalCard.tsx","../components/BackupStatusPanel.tsx","../components/Timeline.tsx","../components/AlertInbox.tsx","../components/RollbackPlan.tsx","../components/ActionDiff.tsx","../components/LogViewer.tsx","../components/Textarea.tsx","../components/Select.tsx","../components/Checkbox.tsx","../components/Switch.tsx","../components/RadioGroup.tsx","../components/Footer.tsx","../components/Dialog.tsx","../components/Tooltip.tsx","../components/Tabs.tsx","../components/Skeleton.tsx","../components/Progress.tsx","../components/Toaster.tsx","../components/Empty.tsx","../components/DropdownMenu.tsx","../components/Sheet.tsx","../components/DataTable.tsx","../components/GlowCard.tsx","../components/BentoDashboard.tsx"],"names":["twMerge","clsx","forwardRef","Slot","jsx","jsxs","motion","useState","useCallback","lazy","Fragment","Suspense","useRef","useEffect","useMemo","useId","DialogPrimitive","React","X","TooltipPrimitive","React2","TabsPrimitive","React3","React4","ProgressPrimitive","SonnerToaster","DropdownMenuPrimitive","DialogPrimitive2"],"mappings":"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","file":"index.cjs","sourcesContent":["import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import { type ButtonHTMLAttributes, forwardRef } from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { cn } from '@/lib/utils'\n\nconst variants = {\n primary: 'bg-tollerud-yellow text-tollerud-black border-tollerud-yellow hover:bg-tollerud-yellow hover:shadow-tollerud-glow',\n secondary: 'bg-transparent text-tollerud-text-primary border-tollerud-border hover:border-tollerud-text-secondary hover:bg-tollerud-surface-hover',\n ghost: 'bg-transparent text-tollerud-text-secondary border-transparent hover:text-tollerud-text-primary hover:bg-tollerud-surface-hover',\n destructive: 'bg-tollerud-error text-white border-tollerud-error hover:shadow-[0_0_12px_rgba(239,68,68,0.3)]',\n terminal: 'font-mono text-tollerud-yellow border-[rgba(255,255,0,0.25)] bg-transparent before:content-[\"❯_\"] before:opacity-70 hover:border-tollerud-yellow hover:shadow-tollerud-glow hover:bg-[rgba(255,255,0,0.05)]',\n} as const\n\nconst sizes = {\n sm: 'px-3 py-1 text-sm',\n md: 'px-4 py-2 text-base',\n lg: 'px-6 py-3 text-lg',\n} as const\n\nexport interface ButtonVariantProps {\n variant?: keyof typeof variants\n size?: keyof typeof sizes\n}\n\nexport function buttonVariants({ variant = 'secondary', size = 'md', className }: ButtonVariantProps & { className?: string } = {}) {\n return cn(\n 'inline-flex items-center justify-center gap-2 font-semibold rounded transition-all duration-[150ms] focus-visible:outline-2 focus-visible:outline-tollerud-yellow focus-visible:outline-offset-2',\n 'border cursor-pointer',\n 'disabled:opacity-50 disabled:pointer-events-none',\n variants[variant],\n sizes[size],\n className\n )\n}\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>, ButtonVariantProps {\n /** Render as the single child element (e.g. a `<Link>`) instead of a `<button>`, merging props and styles onto it. */\n asChild?: boolean\n}\n\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant = 'secondary', size = 'md', asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button'\n return (\n <Comp\n ref={ref}\n className={buttonVariants({ variant, size, className })}\n {...props}\n />\n )\n }\n)\nButton.displayName = 'Button'\n\nexport { Button }\n","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\nconst toneStyles = {\n default: { wrapper: 'border-tollerud-border bg-tollerud-surface-raised', icon: 'text-tollerud-text-muted' },\n accent: { wrapper: 'border-tollerud-yellow/30 bg-tollerud-yellow/5', icon: 'text-tollerud-yellow' },\n info: { wrapper: 'border-blue-500/30 bg-blue-500/5', icon: 'text-blue-400' },\n success: { wrapper: 'border-green-500/30 bg-green-500/5', icon: 'text-green-400' },\n error: { wrapper: 'border-red-500/30 bg-red-500/5', icon: 'text-red-400' },\n} as const\n\nexport interface AlertProps extends HTMLAttributes<HTMLDivElement> {\n tone?: keyof typeof toneStyles\n title?: string\n icon?: React.ReactNode\n}\n\nconst Alert = forwardRef<HTMLDivElement, AlertProps>(\n ({ className, tone = 'default', title, icon, children, ...props }, ref) => {\n const styles = toneStyles[tone]\n return (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(\n 'flex gap-3 rounded-md border p-4',\n styles.wrapper,\n className\n )}\n {...props}\n >\n {icon && (\n <span className={cn('mt-0.5 flex-shrink-0 w-[18px] h-[18px]', styles.icon)}>\n {icon}\n </span>\n )}\n <div className=\"min-w-0\">\n {title && (\n <p className=\"text-sm font-semibold text-tollerud-text-primary leading-snug\">\n {title}\n </p>\n )}\n {children && (\n <p className={cn('text-sm text-tollerud-text-secondary leading-relaxed', title && 'mt-1')}>\n {children}\n </p>\n )}\n </div>\n </div>\n )\n }\n)\nAlert.displayName = 'Alert'\n\nexport { Alert }\n","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n accent?: boolean\n density?: 'comfortable' | 'compact'\n}\n\nconst Card = forwardRef<HTMLDivElement, CardProps>(\n ({ className, accent, density, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-density={density ?? undefined}\n className={cn(\n 'rounded-lg border bg-tollerud-surface-raised p-6 transition-[border-color] duration-[150ms]',\n accent ? 'border-tollerud-yellow/25' : 'border-tollerud-border',\n 'hover:border-tollerud-noir-500',\n className\n )}\n {...props}\n />\n )\n }\n)\nCard.displayName = 'Card'\n\nexport { Card }\n","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\nconst badgeVariants = {\n default: 'bg-tollerud-noir-700 text-tollerud-text-secondary',\n accent: 'bg-tollerud-yellow/15 text-tollerud-yellow',\n success: 'bg-tollerud-success/15 text-tollerud-success',\n error: 'bg-tollerud-error/15 text-tollerud-error',\n info: 'bg-tollerud-info/15 text-tollerud-info',\n warning: 'bg-tollerud-yellow/15 text-tollerud-warning',\n} as const\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: keyof typeof badgeVariants\n}\n\nconst Badge = forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant = 'default', ...props }, ref) => {\n return (\n <span\n ref={ref}\n className={cn(\n 'inline-flex items-center px-2 py-0.5 text-xs font-medium rounded',\n 'tracking-wide',\n badgeVariants[variant],\n className\n )}\n {...props}\n />\n )\n }\n)\nBadge.displayName = 'Badge'\n\nexport { Badge }\n","'use client'\n\nimport { type HTMLAttributes, forwardRef } from 'react'\nimport { motion } from 'framer-motion'\nimport { cn } from '@/lib/utils'\n\ntype Status = 'online' | 'offline' | 'warning' | 'idle'\n\nconst statusColors: Record<Status, string> = {\n online: 'bg-tollerud-success',\n offline: 'bg-tollerud-error',\n warning: 'bg-tollerud-yellow',\n idle: 'bg-tollerud-noir-400',\n}\n\nconst pulseColors: Partial<Record<Status, string>> = {\n online: 'rgba(34,197,94,0.5)',\n warning: 'rgba(232,213,0,0.45)',\n offline: 'rgba(239,68,68,0.5)',\n}\n\nconst animationKeyframes = `\n@keyframes tollerud-dot-pulse {\n 0%, 100% { box-shadow: 0 0 0 0 var(--pulse-color, rgba(34,197,94,0.5)); }\n 50% { box-shadow: 0 0 0 5px var(--pulse-color, rgba(34,197,94,0)); }\n}\n`\n\nexport interface StatusDotProps extends HTMLAttributes<HTMLSpanElement> {\n status?: Status\n label?: string\n /** Disable the pulsing animation */\n noPulse?: boolean\n}\n\nconst StatusDot = forwardRef<HTMLSpanElement, StatusDotProps>(\n ({ className, status = 'idle', label, noPulse, ...props }, ref) => {\n const shouldPulse = !noPulse && (status === 'online' || status === 'warning' || status === 'offline')\n const pulseColor = pulseColors[status]\n\n return (\n <span\n ref={ref}\n className={cn('inline-flex items-center gap-1.5 text-xs font-medium', className)}\n {...props}\n >\n <style>{animationKeyframes}</style>\n <motion.span\n layout\n key={status}\n animate={{\n scaleX: [1, 1.6, 1],\n scaleY: [1, 0.6, 1],\n }}\n transition={{\n duration: 0.4,\n ease: 'easeOut',\n times: [0, 0.3, 1],\n }}\n className={cn(\n 'inline-block w-2 h-2 rounded-full',\n statusColors[status],\n shouldPulse && 'animate-tollerud-dot-pulse'\n )}\n style={{\n ...(shouldPulse && pulseColor ? ({ '--pulse-color': pulseColor } as React.CSSProperties) : {}),\n animation: shouldPulse ? 'tollerud-dot-pulse 2s ease-in-out infinite' : undefined,\n } as React.CSSProperties}\n />\n {label && <span>{label}</span>}\n </span>\n )\n }\n)\nStatusDot.displayName = 'StatusDot'\n\nexport { StatusDot }\nexport type { Status }","import { type InputHTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n label?: string\n error?: string\n}\n\nconst Input = forwardRef<HTMLInputElement, InputProps>(\n ({ className, label, error, id, ...props }, ref) => {\n return (\n <div className=\"flex flex-col gap-1\">\n {label && (\n <label htmlFor={id} className=\"text-xs font-medium text-tollerud-text-muted\">\n {label}\n </label>\n )}\n <input\n ref={ref}\n id={id}\n className={cn(\n 'font-sans text-base px-3 py-2 rounded',\n 'bg-tollerud-surface-raised border',\n 'text-tollerud-text-primary',\n 'placeholder:text-tollerud-text-muted',\n 'transition-[border-color] duration-[150ms]',\n 'focus:outline-none focus:border-tollerud-yellow focus:shadow-[0_0_0_1px_#E8D500]',\n error ? 'border-tollerud-error' : 'border-tollerud-border',\n className\n )}\n {...props}\n />\n {error && (\n <p className=\"text-xs text-tollerud-error mt-0.5\">{error}</p>\n )}\n </div>\n )\n }\n)\nInput.displayName = 'Input'\n\nexport { Input }\n","'use client'\n\nimport { type HTMLAttributes, forwardRef, useState, useCallback } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface CodeBlockProps extends HTMLAttributes<HTMLPreElement> {\n /** Optional string content to render inside <code> tags */\n code?: string\n /** When true, prepends a prompt symbol ($) before text content */\n promptPrefix?: boolean\n /** When false, hides the copy-to-clipboard button (default: true) */\n showCopy?: boolean\n}\n\nconst CodeBlock = forwardRef<HTMLPreElement, CodeBlockProps>(\n ({ className, children, code, promptPrefix, showCopy = true, ...props }, ref) => {\n const [copied, setCopied] = useState(false)\n\n const content = code ? (\n <code className=\"text-tollerud-noir-200\">{code}</code>\n ) : (\n children\n )\n\n const handleCopy = useCallback(async () => {\n const text = code ?? (typeof children === 'string' ? children : '')\n if (!text) return\n\n // Try clipboard API first, fallback to execCommand for broader compat\n try {\n await navigator.clipboard.writeText(text)\n } catch {\n const textarea = document.createElement('textarea')\n textarea.value = text\n textarea.style.position = 'fixed'\n textarea.style.opacity = '0'\n document.body.appendChild(textarea)\n textarea.select()\n document.execCommand('copy')\n document.body.removeChild(textarea)\n }\n\n setCopied(true)\n setTimeout(() => setCopied(false), 1500)\n }, [code, children])\n\n return (\n <div className=\"relative group\">\n <pre\n ref={ref}\n className={cn(\n 'font-mono text-sm leading-relaxed overflow-x-auto rounded border p-4',\n 'bg-tollerud-noir-900 border-tollerud-border text-tollerud-noir-200',\n className\n )}\n {...props}\n >\n {content}\n </pre>\n {showCopy && (\n <button\n onClick={handleCopy}\n className={cn(\n 'absolute top-2 right-2 px-2 py-1 rounded text-xs font-medium',\n 'opacity-0 group-hover:opacity-100 transition-all',\n 'bg-tollerud-noir-800 border border-tollerud-border/30 text-tollerud-text-muted',\n 'hover:bg-tollerud-surface-raised hover:text-tollerud-text-primary',\n copied && 'opacity-100 bg-tollerud-success/15 text-tollerud-success border-tollerud-success/40'\n )}\n aria-label={copied ? 'Copied' : 'Copy code'}\n >\n {copied ? '✓ Copied' : 'Copy'}\n </button>\n )}\n </div>\n )\n }\n)\nCodeBlock.displayName = 'CodeBlock'\n\nexport { CodeBlock }\n","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface StatCardProps extends HTMLAttributes<HTMLDivElement> {\n label: string\n value: string | number\n change?: { value: string; direction: 'up' | 'down' }\n accent?: boolean\n}\n\nconst StatCard = forwardRef<HTMLDivElement, StatCardProps>(\n ({ className, label, value, change, accent, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'group relative rounded-lg border p-4',\n 'bg-tollerud-surface-raised',\n 'transition-all duration-200 ease-out',\n 'hover:translate-y-[-1px]',\n accent\n ? 'border-tollerud-yellow/20 hover:border-tollerud-yellow/40 hover:shadow-[0_0_20px_rgba(232,213,0,0.08)]'\n : 'border-tollerud-border hover:border-tollerud-noir-500 hover:shadow-[0_4px_12px_rgba(0,0,0,0.3)]',\n className\n )}\n {...props}\n >\n {/* Accent top bar */}\n {accent && (\n <span className=\"absolute top-0 left-4 right-4 h-px bg-gradient-to-r from-transparent via-tollerud-yellow/60 to-transparent\" />\n )}\n\n <div className=\"flex items-start justify-between gap-2\">\n <p className=\"text-xs font-medium uppercase tracking-wider text-tollerud-text-muted\">\n {label}\n </p>\n {change && (\n <span\n className={cn(\n 'inline-flex items-center gap-0.5 text-[11px] font-semibold whitespace-nowrap',\n change.direction === 'up' ? 'text-tollerud-success' : 'text-tollerud-error'\n )}\n >\n <svg\n className={cn(\n 'w-3 h-3',\n change.direction === 'down' && 'rotate-180'\n )}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M12 5v14M5 12l7 7 7-7\" />\n </svg>\n {change.value}\n </span>\n )}\n </div>\n\n <p\n className={cn(\n 'text-2xl font-bold tracking-tight mt-1',\n accent ? 'text-tollerud-yellow' : 'text-tollerud-text-primary'\n )}\n >\n {value}\n </p>\n </div>\n )\n }\n)\nStatCard.displayName = 'StatCard'\n\nexport { StatCard }","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface ContainerProps extends HTMLAttributes<HTMLDivElement> {\n as?: 'div' | 'section' | 'article' | 'main' | 'header' | 'footer'\n}\n\nconst Container = forwardRef<HTMLDivElement, ContainerProps>(\n ({ className, as: Tag = 'div', ...props }, ref) => {\n return (\n <Tag\n ref={ref}\n className={cn('mx-auto w-full max-w-[1100px] px-6', className)}\n {...props}\n />\n )\n }\n)\nContainer.displayName = 'Container'\n\nexport { Container }\n","\"use client\"\n\nimport { lazy, Suspense, type CSSProperties } from \"react\"\n\nconst GrainGradient = lazy(() =>\n import(\"@paper-design/shaders-react\").then((module) => ({\n default: module.GrainGradient,\n }))\n)\n\ntype ShaderShape = \"corners\" | \"wave\" | \"dots\" | \"truchet\" | \"ripple\" | \"blob\" | \"sphere\"\ntype Intensity = \"subtle\" | \"medium\" | \"loud\"\ntype Speed = \"still\" | \"slow\" | \"medium\" | \"fast\"\ntype Grain = \"none\" | \"soft\" | \"high\"\n\nexport interface NoirGlowBackgroundProps {\n /** Extra class names for the outer positioning wrapper. */\n className?: string\n /** Inline style for the outer positioning wrapper. */\n style?: CSSProperties\n /** Canvas/WebGL shape. `corners` matches Tollerud.no. */\n shape?: ShaderShape\n /** Visual strength of the yellow glow. */\n intensity?: Intensity\n /** Ambient animation speed. */\n speed?: Speed\n /** Shader grain/noise amount. */\n grain?: Grain\n /** Softness/falloff of the glow blooms. */\n softness?: number\n /** Background color behind the glow. */\n colorBack?: string\n /** Glow colors. Defaults to the Tollerud/Tia yellow ramp. */\n colors?: string[]\n /** Whether to render a readable center vignette on top of the shader. */\n preserveCenter?: boolean\n /** Add the grain/noise CSS overlay. */\n noiseOverlay?: boolean\n /** Prefer the CSS fallback even if shaders are available. Useful for docs/static contexts. */\n forceCssFallback?: boolean\n /** Disable pointer events so content above remains clickable. */\n inert?: boolean\n}\n\nconst intensityMap: Record<Intensity, number> = {\n subtle: 0.24,\n medium: 0.45,\n loud: 0.68,\n}\n\nconst speedMap: Record<Speed, number> = {\n still: 0,\n slow: 0.45,\n medium: 1,\n fast: 1.8,\n}\n\nconst grainMap: Record<Grain, number> = {\n none: 0,\n soft: 0.12,\n high: 0.28,\n}\n\nfunction cx(...classes: Array<string | false | null | undefined>) {\n return classes.filter(Boolean).join(\" \")\n}\n\nfunction CssFallback({ preserveCenter = true, noiseOverlay = true }: Pick<NoirGlowBackgroundProps, \"preserveCenter\" | \"noiseOverlay\">) {\n return (\n <>\n <div className=\"tollerud-noir-glow-bg\" aria-hidden=\"true\" />\n {preserveCenter && <div className=\"tollerud-noir-glow-vignette\" aria-hidden=\"true\" />}\n {noiseOverlay && <div className=\"tollerud-noir-noise\" aria-hidden=\"true\" />}\n </>\n )\n}\n\n/**\n * NoirGlowBackground\n *\n * Tia/Tollerud signature background primitive. The defaults replicate\n * MathiasOki/tollerud-landing's `GradientBackground` component.\n *\n * Install dependency in consuming Next.js apps:\n * npm install @paper-design/shaders-react\n *\n * The CSS fallback classes live in `globals.css` and are used during Suspense,\n * reduced-motion contexts, or when `forceCssFallback` is true.\n */\nexport function NoirGlowBackground({\n className,\n style,\n shape = \"corners\",\n intensity = \"medium\",\n speed = \"medium\",\n grain = \"none\",\n softness = 0.76,\n colorBack = \"hsl(0, 0%, 0%)\",\n colors = [\"hsl(54, 85%, 66%)\", \"hsl(56, 100%, 80%)\", \"hsl(56, 100%, 50%)\"],\n preserveCenter = false,\n noiseOverlay = false,\n forceCssFallback = false,\n inert = true,\n}: NoirGlowBackgroundProps) {\n const wrapperClassName = cx(\n \"tollerud-noir-glow-root absolute inset-0 z-0 overflow-hidden\",\n inert && \"pointer-events-none\",\n className\n )\n\n if (forceCssFallback) {\n return (\n <div className={wrapperClassName} style={style} aria-hidden=\"true\">\n <CssFallback preserveCenter={preserveCenter} noiseOverlay={noiseOverlay} />\n </div>\n )\n }\n\n return (\n <div className={wrapperClassName} style={style} aria-hidden=\"true\">\n <Suspense fallback={<CssFallback preserveCenter={preserveCenter} noiseOverlay={noiseOverlay} />}>\n <GrainGradient\n style={{ height: \"100%\", width: \"100%\" }}\n colorBack={colorBack}\n softness={softness}\n intensity={intensityMap[intensity]}\n noise={grainMap[grain]}\n shape={shape}\n offsetX={0}\n offsetY={0}\n scale={1}\n rotation={0}\n speed={speedMap[speed]}\n colors={colors}\n />\n </Suspense>\n {preserveCenter && <div className=\"tollerud-noir-glow-vignette\" aria-hidden=\"true\" />}\n {noiseOverlay && <div className=\"tollerud-noir-noise\" aria-hidden=\"true\" />}\n </div>\n )\n}\n","\"use client\"\n\nimport { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface KbdProps extends HTMLAttributes<HTMLSpanElement> {\n /**\n * The keys to display. Separate by + for chords.\n * @example \"⌘K\", \"⌘⇧S\", \"⌘K\", \"Esc\"\n */\n keys: string | string[]\n /** Small variant for inline use */\n size?: 'sm' | 'md'\n}\n\n/**\n * Keyboard shortcut chip — inspired by Raycast shortcut badges.\n *\n * ```tsx\n * <Kbd keys=\"⌘K\" />\n * <Kbd keys={[\"⌘\", \"⇧\", \"S\"]} />\n * <Kbd keys=\"Esc\" size=\"sm\" />\n * ```\n */\nconst Kbd = forwardRef<HTMLSpanElement, KbdProps>(\n ({ className, keys, size = 'md', ...props }, ref) => {\n const keyArray = typeof keys === 'string' ? [keys] : keys\n\n return (\n <span\n ref={ref}\n className={cn(\n 'tollerud-kbd',\n size === 'sm' && 'tollerud-kbd--sm',\n className\n )}\n {...props}\n >\n {keyArray.map((key, i) => (\n <span key={i} className=\"tollerud-kbd__key\">\n {key}\n </span>\n ))}\n </span>\n )\n }\n)\nKbd.displayName = 'Kbd'\n\nexport { Kbd }","\"use client\"\n\nimport { type ButtonHTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\nimport { Kbd } from './Kbd'\n\nexport interface ActionItem {\n /** Unique ID */\n id: string\n /** Label text */\n label: string\n /** Subtitle / description */\n description?: string\n /** Optional icon element */\n icon?: React.ReactNode\n /** Keyboard shortcut */\n shortcut?: string | string[]\n /** Group this item belongs to */\n group?: string\n /** When true, item is disabled */\n disabled?: boolean\n /** Selection callback */\n onSelect?: () => void\n}\n\nexport interface ActionRowProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onSelect'> {\n /** Action data */\n action: ActionItem\n /** Whether this row is currently highlighted (keyboard navigation) */\n highlighted?: boolean\n /** Whether to show the shortcut */\n showShortcut?: boolean\n}\n\n/**\n * Action row — a single command/action item in a list or command menu.\n * Inspired by Raycast's compact action layout.\n */\nconst ActionRow = forwardRef<HTMLButtonElement, ActionRowProps>(\n (\n {\n action,\n highlighted = false,\n showShortcut = true,\n className,\n disabled,\n onClick,\n ...props\n },\n ref\n ) => {\n return (\n <button\n ref={ref}\n type=\"button\"\n disabled={disabled ?? action.disabled}\n onClick={(e) => {\n onClick?.(e)\n action.onSelect?.()\n }}\n className={cn(\n 'tollerud-action-row',\n highlighted && 'tollerud-action-row--highlighted',\n (disabled ?? action.disabled) && 'tollerud-action-row--disabled',\n className\n )}\n role=\"option\"\n aria-selected={highlighted}\n aria-disabled={disabled ?? action.disabled}\n {...props}\n >\n {action.icon && (\n <span className=\"tollerud-action-row__icon\">{action.icon}</span>\n )}\n\n <span className=\"tollerud-action-row__content\">\n <span className=\"tollerud-action-row__label\">{action.label}</span>\n {action.description && (\n <span className=\"tollerud-action-row__description\">\n {action.description}\n </span>\n )}\n </span>\n\n {showShortcut && action.shortcut && (\n <span className=\"tollerud-action-row__shortcut\">\n <Kbd keys={action.shortcut} size=\"sm\" />\n </span>\n )}\n </button>\n )\n }\n)\nActionRow.displayName = 'ActionRow'\n\nexport { ActionRow }","\"use client\"\n\nimport {\n forwardRef,\n type KeyboardEvent,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react'\nimport { cn } from '@/lib/utils'\nimport { type ActionItem, ActionRow } from './ActionRow'\n\nexport interface CommandGroup {\n /** Group label (e.g. \"Servers\", \"Actions\") */\n label: string\n /** Items in this group */\n items: ActionItem[]\n}\n\nexport interface CommandMenuProps {\n /** Whether the menu is open */\n open: boolean\n /** Called when menu should close */\n onOpenChange: (open: boolean) => void\n /** Command groups to display */\n groups: CommandGroup[]\n /** Placeholder text for the search input */\n placeholder?: string\n /** Empty state message when no results */\n emptyMessage?: string\n /** Custom class for the overlay */\n className?: string\n /** Keyboard shortcut to toggle (default: \"⌘K\") */\n toggleShortcut?: string\n /** Custom search filter override. Return filtered groups. */\n filter?: (query: string, groups: CommandGroup[]) => CommandGroup[]\n /** Callback when an action runs */\n onAction?: (action: ActionItem) => void\n}\n\n/**\n * Command palette — a Raycast-inspired global command menu.\n *\n * ```tsx\n * const [open, setOpen] = useState(false)\n *\n * <CommandMenu\n * open={open}\n * onOpenChange={setOpen}\n * groups={[\n * {\n * label: 'Servers',\n * items: [\n * { id: 'emma', label: 'Emma', icon: <Server />, onSelect: () => {} },\n * ],\n * },\n * ]}\n * />\n * ```\n */\nconst CommandMenu = forwardRef<HTMLDivElement, CommandMenuProps>(\n ({\n open,\n onOpenChange,\n groups,\n placeholder = 'Type a command…',\n emptyMessage = 'No matching commands',\n className,\n filter: customFilter,\n onAction,\n}: CommandMenuProps, ref) => {\n const [query, setQuery] = useState('')\n const [selectedIndex, setSelectedIndex] = useState(0)\n const inputRef = useRef<HTMLInputElement>(null)\n const listRef = useRef<HTMLDivElement>(null)\n\n // Flatten items with their group indices for keyboard navigation\n const flatItems = groups.flatMap((g) => g.items)\n // Auto-close on Escape\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault()\n onOpenChange(false)\n return\n }\n\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n setSelectedIndex((prev) =>\n prev < flatItems.length - 1 ? prev + 1 : 0\n )\n return\n }\n\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n setSelectedIndex((prev) =>\n prev > 0 ? prev - 1 : flatItems.length - 1\n )\n return\n }\n\n if (e.key === 'Enter') {\n e.preventDefault()\n const item = flatItems[selectedIndex]\n if (item && !item.disabled) {\n item.onSelect?.()\n onAction?.(item)\n onOpenChange(false)\n }\n return\n }\n },\n [flatItems, selectedIndex, onOpenChange, onAction]\n )\n\n // Open toggle via ⌘K / Ctrl+K\n useEffect(() => {\n function handleGlobalKey(e: globalThis.KeyboardEvent) {\n if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === 'k') {\n e.preventDefault()\n onOpenChange(!open)\n }\n }\n document.addEventListener('keydown', handleGlobalKey)\n return () => document.removeEventListener('keydown', handleGlobalKey)\n }, [open, onOpenChange])\n\n // Focus input and reset state when opening\n useEffect(() => {\n if (open) {\n setQuery('')\n setSelectedIndex(0)\n // Small delay to let the animation start before focusing\n const timer = setTimeout(() => inputRef.current?.focus(), 50)\n return () => clearTimeout(timer)\n }\n }, [open])\n\n // Lock body scroll when open\n useEffect(() => {\n if (open) {\n document.body.style.overflow = 'hidden'\n } else {\n document.body.style.overflow = ''\n }\n return () => {\n document.body.style.overflow = ''\n }\n }, [open])\n\n // Filter groups based on query\n const filteredGroups = customFilter\n ? customFilter(query, groups)\n : query.trim()\n ? groups\n .map((g) => ({\n ...g,\n items: g.items.filter(\n (item) =>\n item.label.toLowerCase().includes(query.toLowerCase()) ||\n item.description\n ?.toLowerCase()\n .includes(query.toLowerCase()) ||\n item.group?.toLowerCase().includes(query.toLowerCase())\n ),\n }))\n .filter((g) => g.items.length > 0)\n : groups\n\n // Re-index selection when results change\n const currentFlat = filteredGroups.flatMap((g) => g.items)\n useEffect(() => {\n if (selectedIndex >= currentFlat.length) {\n setSelectedIndex(0)\n }\n }, [currentFlat.length, selectedIndex])\n\n if (!open) return null\n\n return (\n <>\n {/* Overlay */}\n <div\n className=\"tollerud-cmd-overlay\"\n onClick={() => onOpenChange(false)}\n aria-hidden=\"true\"\n />\n\n {/* Command Menu */}\n <div\n className={cn('tollerud-cmd', className)}\n role=\"listbox\"\n aria-label=\"Command palette\"\n onKeyDown={handleKeyDown}\n >\n {/* Search Input */}\n <div className=\"tollerud-cmd__header\">\n <span className=\"tollerud-cmd__search-icon\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.35-4.35\" />\n </svg>\n </span>\n <input\n ref={inputRef}\n type=\"text\"\n className=\"tollerud-cmd__input\"\n placeholder={placeholder}\n value={query}\n onChange={(e) => {\n setQuery(e.target.value)\n setSelectedIndex(0)\n }}\n autoComplete=\"off\"\n spellCheck={false}\n />\n </div>\n\n {/* Results */}\n <div ref={listRef} className=\"tollerud-cmd__list\">\n {filteredGroups.length === 0 && (\n <div className=\"tollerud-cmd__empty\">{emptyMessage}</div>\n )}\n\n {filteredGroups.map((group, gi) => {\n // Calculate flat offset for this group\n const flatOffset = filteredGroups\n .slice(0, gi)\n .reduce((acc, g) => acc + g.items.length, 0)\n\n return (\n <div key={group.label} className=\"tollerud-cmd__group\">\n <div className=\"tollerud-cmd__group-label\">{group.label}</div>\n {group.items.map((item, ii) => {\n const flatIndex = flatOffset + ii\n return (\n <ActionRow\n key={item.id}\n action={item}\n highlighted={selectedIndex === flatIndex}\n onClick={() => {\n item.onSelect?.()\n onAction?.(item)\n onOpenChange(false)\n }}\n onMouseEnter={() => setSelectedIndex(flatIndex)}\n />\n )\n })}\n </div>\n )\n })}\n </div>\n\n {/* Footer hints */}\n <div className=\"tollerud-cmd__footer\">\n <span className=\"tollerud-cmd__hint\">\n <span className=\"tollerud-kbd tollerud-kbd--sm\">\n <span className=\"tollerud-kbd__key\">↑</span>\n </span>\n <span className=\"tollerud-kbd tollerud-kbd--sm\">\n <span className=\"tollerud-kbd__key\">↓</span>\n </span>\n <span className=\"tollerud-cmd__hint-text\">navigate</span>\n </span>\n <span className=\"tollerud-cmd__hint\">\n <span className=\"tollerud-kbd tollerud-kbd--sm\">\n <span className=\"tollerud-kbd__key\">↵</span>\n </span>\n <span className=\"tollerud-cmd__hint-text\">select</span>\n </span>\n <span className=\"tollerud-cmd__hint\">\n <span className=\"tollerud-kbd tollerud-kbd--sm\">\n <span className=\"tollerud-kbd__key\">Esc</span>\n </span>\n <span className=\"tollerud-cmd__hint-text\">close</span>\n </span>\n </div>\n </div>\n </>\n )\n}\n)\nCommandMenu.displayName = 'CommandMenu'\n\nexport { CommandMenu }","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\nimport { StatusDot, type Status } from './StatusDot'\n\nexport interface ServiceHealthCardProps extends HTMLAttributes<HTMLDivElement> {\n /** Service name */\n service: string\n /** Health status */\n status?: Status\n /** Uptime string (e.g. '14d 3h') */\n uptime?: string\n /** Response time in ms */\n responseTime?: string\n /** Current version */\n version?: string\n /** Whether the card is in a loading state */\n loading?: boolean\n}\n\nconst ServiceHealthCard = forwardRef<HTMLDivElement, ServiceHealthCardProps>(\n ({ className, service, status = 'online', uptime, responseTime, version, loading, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border bg-tollerud-surface-raised p-4',\n 'transition-[border-color] duration-[150ms]',\n status === 'offline' && 'border-tollerud-error/40',\n status === 'warning' && 'border-tollerud-yellow/30',\n status === 'online' && 'border-tollerud-border hover:border-tollerud-noir-500',\n status === 'idle' && 'border-tollerud-border opacity-60',\n loading && 'animate-pulse',\n className\n )}\n {...props}\n >\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-sm font-semibold text-tollerud-foreground truncate\">\n {service}\n </span>\n <StatusDot status={status} />\n </div>\n <div className=\"flex flex-wrap gap-x-4 gap-y-1 text-xs text-tollerud-text-muted\">\n {uptime && <span>Uptime: <span className=\"text-tollerud-text-secondary\">{uptime}</span></span>}\n {responseTime && <span>Response: <span className=\"text-tollerud-text-secondary\">{responseTime}</span></span>}\n {version && <span>Version: <span className=\"text-tollerud-text-secondary\">{version}</span></span>}\n </div>\n </div>\n )\n }\n)\nServiceHealthCard.displayName = 'ServiceHealthCard'\n\nexport { ServiceHealthCard }\n","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\nimport { StatusDot, type Status } from './StatusDot'\n\nexport interface HostCardProps extends HTMLAttributes<HTMLDivElement> {\n /** Hostname */\n hostname: string\n /** IP address */\n ip?: string\n /** Status */\n status?: Status\n /** CPU load (e.g. '23%') */\n cpu?: string\n /** Memory usage (e.g. '6.2/16 GB') */\n memory?: string\n /** Disk usage (e.g. '45%') */\n disk?: string\n /** Uptime */\n uptime?: string\n /** Number of containers running */\n containers?: number\n /** Whether the card is loading */\n loading?: boolean\n}\n\nconst HostCard = forwardRef<HTMLDivElement, HostCardProps>(\n ({ className, hostname, ip, status = 'online', cpu, memory, disk, uptime, containers, loading, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border bg-tollerud-surface-raised p-4',\n 'transition-[border-color] duration-[150ms]',\n status === 'offline' && 'border-tollerud-error/40',\n status === 'warning' && 'border-tollerud-yellow/30',\n status === 'online' && 'border-tollerud-border hover:border-tollerud-noir-500',\n loading && 'animate-pulse',\n className\n )}\n {...props}\n >\n <div className=\"flex items-center justify-between mb-2\">\n <div className=\"flex items-center gap-2 min-w-0\">\n <StatusDot status={status} />\n <span className=\"font-semibold text-sm text-tollerud-foreground truncate\">\n {hostname}\n </span>\n </div>\n {containers !== undefined && (\n <span className=\"text-[11px] text-tollerud-text-muted whitespace-nowrap ml-2\">\n {containers} container{containers !== 1 ? 's' : ''}\n </span>\n )}\n </div>\n {ip && (\n <div className=\"text-xs text-tollerud-text-muted mb-2 font-mono\">{ip}</div>\n )}\n <div className=\"flex flex-wrap gap-x-4 gap-y-1 text-xs text-tollerud-text-muted\">\n {cpu && <span>CPU: <span className=\"text-tollerud-text-secondary\">{cpu}</span></span>}\n {memory && <span>RAM: <span className=\"text-tollerud-text-secondary\">{memory}</span></span>}\n {disk && <span>Disk: <span className=\"text-tollerud-text-secondary\">{disk}</span></span>}\n {uptime && <span>Up: <span className=\"text-tollerud-text-secondary\">{uptime}</span></span>}\n </div>\n </div>\n )\n }\n)\nHostCard.displayName = 'HostCard'\n\nexport { HostCard }\n","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\nimport { StatusDot, type Status } from './StatusDot'\n\nexport interface StackService {\n name: string\n status: Status\n}\n\nexport interface DockerStackCardProps extends HTMLAttributes<HTMLDivElement> {\n /** Stack name */\n name: string\n /** Services in the stack */\n services: StackService[]\n /** Path to compose file */\n composePath?: string\n /** Whether the card is loading */\n loading?: boolean\n}\n\nconst DockerStackCard = forwardRef<HTMLDivElement, DockerStackCardProps>(\n ({ className, name, services, composePath, loading, ...props }, ref) => {\n const onlineCount = services.filter((s) => s.status === 'online').length\n const degraded = services.some((s) => s.status === 'offline' || s.status === 'warning')\n const status: Status = services.every((s) => s.status === 'online') ? 'online' : degraded ? 'warning' : 'offline'\n\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border bg-tollerud-surface-raised p-4',\n 'transition-[border-color] duration-[150ms]',\n status === 'offline' && 'border-tollerud-error/40',\n status === 'warning' && 'border-tollerud-yellow/30',\n status === 'online' && 'border-tollerud-border hover:border-tollerud-noir-500',\n loading && 'animate-pulse',\n className\n )}\n {...props}\n >\n <div className=\"flex items-center justify-between mb-3\">\n <div className=\"flex items-center gap-2 min-w-0\">\n <StatusDot status={status} />\n <span className=\"font-semibold text-sm text-tollerud-foreground truncate\">\n {name}\n </span>\n </div>\n <span className=\"text-xs text-tollerud-text-muted whitespace-nowrap ml-2\">\n {onlineCount}/{services.length} healthy\n </span>\n </div>\n {composePath && (\n <div className=\"text-[11px] text-tollerud-text-muted font-mono mb-2 truncate\">\n {composePath}\n </div>\n )}\n <div className=\"flex flex-col gap-1\">\n {services.map((svc) => (\n <div key={svc.name} className=\"flex items-center justify-between text-xs\">\n <span className=\"text-tollerud-text-secondary truncate\">{svc.name}</span>\n <StatusDot status={svc.status} />\n </div>\n ))}\n </div>\n </div>\n )\n }\n)\nDockerStackCard.displayName = 'DockerStackCard'\n\nexport { DockerStackCard }\n","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport type IncidentSeverity = 'critical' | 'high' | 'medium' | 'low' | 'info'\n\nexport interface IncidentCardProps extends HTMLAttributes<HTMLDivElement> {\n /** Incident title */\n title: string\n /** Severity level */\n severity: IncidentSeverity\n /** Timestamp string */\n timestamp: string\n /** Description / detail */\n description?: string\n /** Service name affected */\n service?: string\n /** Whether acknowledged */\n acknowledged?: boolean\n /** Whether the card is loading */\n loading?: boolean\n}\n\nconst severityStyles: Record<IncidentSeverity, { border: string; dot: string; label: string }> = {\n critical: { border: 'border-tollerud-error/50', dot: 'bg-tollerud-error shadow-[0_0_8px_rgba(239,68,68,0.6)]', label: 'text-tollerud-error' },\n high: { border: 'border-tollerud-yellow/50', dot: 'bg-tollerud-yellow shadow-[0_0_8px_rgba(232,213,0,0.5)]', label: 'text-tollerud-yellow' },\n medium: { border: 'border-tollerud-amber/40', dot: 'bg-tollerud-amber', label: 'text-tollerud-amber' },\n low: { border: 'border-tollerud-noir-500', dot: 'bg-tollerud-noir-400', label: 'text-tollerud-text-muted' },\n info: { border: 'border-tollerud-info/30', dot: 'bg-tollerud-info', label: 'text-tollerud-info' },\n}\n\nconst IncidentCard = forwardRef<HTMLDivElement, IncidentCardProps>(\n ({ className, title, severity, timestamp, description, service, acknowledged, loading, ...props }, ref) => {\n const style = severityStyles[severity]\n\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border bg-tollerud-surface-raised p-4',\n 'transition-[border-color] duration-[150ms]',\n style.border,\n acknowledged && 'opacity-50',\n loading && 'animate-pulse',\n className\n )}\n {...props}\n >\n <div className=\"flex items-start gap-3\">\n <span className={cn('w-2 h-2 rounded-full mt-1.5 flex-shrink-0', style.dot)} />\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-sm font-semibold text-tollerud-foreground truncate\">{title}</span>\n <span className={cn('text-[11px] font-medium uppercase whitespace-nowrap', style.label)}>\n {severity}\n </span>\n </div>\n <div className=\"flex items-center gap-2 mt-0.5 text-xs text-tollerud-text-muted\">\n <span>{timestamp}</span>\n {service && <><span className=\"text-tollerud-noir-500\">·</span><span>{service}</span></>}\n </div>\n {description && (\n <p className=\"mt-1.5 text-xs text-tollerud-text-secondary leading-relaxed\">{description}</p>\n )}\n </div>\n </div>\n </div>\n )\n }\n)\nIncidentCard.displayName = 'IncidentCard'\n\nexport { IncidentCard }\n","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport type ApprovalState = 'pending' | 'approved' | 'rejected'\n\nexport interface ApprovalCardProps extends HTMLAttributes<HTMLDivElement> {\n /** Action being approved */\n action: string\n /** Description of what will happen */\n description?: string\n /** Source (e.g. 'Emma → backup.sh') */\n source?: string\n /** Current approval state */\n state?: ApprovalState\n /** Timestamp of the request */\n timestamp?: string\n /** Called when user approves */\n onApprove?: () => void\n /** Called when user rejects */\n onReject?: () => void\n /** Whether actions are disabled */\n disabled?: boolean\n /** Whether the card is loading */\n loading?: boolean\n}\n\nconst stateStyles: Record<ApprovalState, string> = {\n pending: 'border-tollerud-yellow/30 hover:border-tollerud-yellow/50',\n approved: 'border-tollerud-success/40 opacity-70',\n rejected: 'border-tollerud-error/40 opacity-70',\n}\n\nconst stateLabels: Record<ApprovalState, { text: string; cls: string }> = {\n pending: { text: 'Awaiting approval', cls: 'text-tollerud-yellow' },\n approved: { text: 'Approved', cls: 'text-tollerud-success' },\n rejected: { text: 'Rejected', cls: 'text-tollerud-error' },\n}\n\nconst ApprovalCard = forwardRef<HTMLDivElement, ApprovalCardProps>(\n ({ className, action, description, source, state = 'pending', timestamp, onApprove, onReject, disabled, loading, ...props }, ref) => {\n const label = stateLabels[state]\n\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border bg-tollerud-surface-raised p-4',\n 'transition-all duration-[150ms]',\n stateStyles[state],\n loading && 'animate-pulse',\n className\n )}\n {...props}\n >\n <div className=\"flex items-center justify-between mb-1.5\">\n <span className=\"text-sm font-semibold text-tollerud-foreground truncate\">{action}</span>\n <span className={cn('text-[11px] font-medium whitespace-nowrap ml-2', label.cls)}>{label.text}</span>\n </div>\n {description && (\n <p className=\"text-xs text-tollerud-text-secondary mb-1.5 leading-relaxed\">{description}</p>\n )}\n <div className=\"flex flex-wrap gap-x-4 gap-y-0.5 text-[11px] text-tollerud-text-muted mb-3\">\n {source && <span className=\"font-mono\">{source}</span>}\n {timestamp && <span>{timestamp}</span>}\n </div>\n {state === 'pending' && (\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n disabled={disabled}\n onClick={onApprove}\n className={cn(\n 'flex-1 rounded-md px-3 py-1.5 text-xs font-semibold transition-all',\n 'bg-tollerud-success text-tollerud-text-inverse',\n 'hover:brightness-110 disabled:opacity-40 disabled:cursor-not-allowed'\n )}\n >\n Approve\n </button>\n <button\n type=\"button\"\n disabled={disabled}\n onClick={onReject}\n className={cn(\n 'flex-1 rounded-md px-3 py-1.5 text-xs font-semibold transition-all',\n 'bg-tollerud-error text-white',\n 'hover:brightness-110 disabled:opacity-40 disabled:cursor-not-allowed'\n )}\n >\n Reject\n </button>\n </div>\n )}\n </div>\n )\n }\n)\nApprovalCard.displayName = 'ApprovalCard'\n\nexport { ApprovalCard }\n","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\nimport { StatusDot, type Status } from './StatusDot'\n\nexport interface BackupJob {\n name: string\n status: Status\n lastRun?: string\n nextRun?: string\n size?: string\n target?: string\n}\n\nexport interface BackupStatusPanelProps extends HTMLAttributes<HTMLDivElement> {\n /** List of backup jobs */\n jobs: BackupJob[]\n /** Total size of all backups */\n totalSize?: string\n /** Last full backup timestamp */\n lastFullBackup?: string\n /** Whether the panel is loading */\n loading?: boolean\n}\n\nconst BackupStatusPanel = forwardRef<HTMLDivElement, BackupStatusPanelProps>(\n ({ className, jobs, totalSize, lastFullBackup, loading, ...props }, ref) => {\n const failed = jobs.filter((j) => j.status === 'offline').length\n\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border border-tollerud-border bg-tollerud-surface-raised',\n loading && 'animate-pulse',\n className\n )}\n {...props}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-tollerud-border\">\n <span className=\"text-sm font-semibold text-tollerud-foreground\">Backups</span>\n <div className=\"flex items-center gap-3 text-[11px] text-tollerud-text-muted\">\n {totalSize && <span>{totalSize}</span>}\n {lastFullBackup && <span>Last full: {lastFullBackup}</span>}\n </div>\n </div>\n\n {/* Job list */}\n <div className=\"p-1\">\n {jobs.length === 0 && (\n <div className=\"px-3 py-6 text-xs text-center text-tollerud-text-muted\">No backup jobs configured</div>\n )}\n {jobs.map((job) => (\n <div\n key={job.name}\n className=\"flex items-center justify-between px-3 py-2 rounded-md hover:bg-tollerud-noir-800/50 transition-colors\"\n >\n <div className=\"flex items-center gap-2 min-w-0 flex-1\">\n <StatusDot status={job.status} />\n <span className=\"text-xs font-medium text-tollerud-foreground truncate\">{job.name}</span>\n </div>\n <div className=\"flex items-center gap-3 text-[11px] text-tollerud-text-muted flex-shrink-0 ml-2\">\n {job.size && <span>{job.size}</span>}\n {job.target && <span className=\"hidden sm:inline font-mono\">{job.target}</span>}\n </div>\n </div>\n ))}\n </div>\n\n {/* Footer — schedule summary */}\n {(failed > 0) && (\n <div className=\"px-4 py-2 border-t border-tollerud-border\">\n <span className=\"text-[11px] text-tollerud-error\">\n {failed} job{failed !== 1 ? 's' : ''} failed — check logs\n </span>\n </div>\n )}\n </div>\n )\n }\n)\nBackupStatusPanel.displayName = 'BackupStatusPanel'\n\nexport { BackupStatusPanel }\n","import { type HTMLAttributes, type ReactNode, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\nimport type { Status } from './StatusDot'\n\nexport interface TimelineItemData {\n id: string\n /** Timestamp label */\n time: string\n /** Title/headline of the event */\n title: string\n /** Description */\n description?: string\n /** Status indicator dot */\n status?: Status\n /** Optional icon to replace dot */\n icon?: ReactNode\n /** Optional metadata badges */\n meta?: string[]\n}\n\nexport interface TimelineProps extends HTMLAttributes<HTMLDivElement> {\n /** Timeline events */\n items: TimelineItemData[]\n /** Whether items are active (show animated dot pulse) */\n active?: boolean\n /** Whether the timeline is loading */\n loading?: boolean\n}\n\nconst Timeline = forwardRef<HTMLDivElement, TimelineProps>(\n ({ className, items, active, loading, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('tollerud-timeline', loading && 'animate-pulse', className)}\n role=\"list\"\n aria-label=\"Activity timeline\"\n {...props}\n >\n {items.map((item, i) => {\n const isLast = i === items.length - 1\n\n return (\n <div key={item.id} className=\"tollerud-timeline__item\" role=\"listitem\">\n {/* Dot column */}\n <div className=\"tollerud-timeline__marker\">\n <div className=\"tollerud-timeline__dot-group\">\n {item.icon ? (\n <span className=\"tollerud-timeline__icon\">{item.icon}</span>\n ) : (\n <span\n className={cn(\n 'tollerud-timeline__dot',\n active && 'tollerud-timeline__dot--active',\n item.status === 'online' && 'bg-tollerud-success shadow-[0_0_6px_rgba(34,197,94,0.5)]',\n item.status === 'offline' && 'bg-tollerud-error',\n item.status === 'warning' && 'bg-tollerud-yellow shadow-[0_0_6px_rgba(232,213,0,0.5)]',\n !item.status && 'bg-tollerud-noir-500'\n )}\n />\n )}\n {!isLast && <div className=\"tollerud-timeline__line\" />}\n </div>\n </div>\n\n {/* Content */}\n <div className=\"tollerud-timeline__content\">\n <div className=\"flex items-start justify-between gap-2\">\n <span className=\"tollerud-timeline__title\">{item.title}</span>\n <span className=\"tollerud-timeline__time\">{item.time}</span>\n </div>\n {item.description && (\n <p className=\"tollerud-timeline__description\">{item.description}</p>\n )}\n {item.meta && item.meta.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5 mt-1\">\n {item.meta.map((m) => (\n <span key={m} className=\"tollerud-timeline__meta\">{m}</span>\n ))}\n </div>\n )}\n </div>\n </div>\n )\n })}\n </div>\n )\n }\n)\nTimeline.displayName = 'Timeline'\n\nexport { Timeline }","import { type HTMLAttributes, forwardRef, useState } from 'react'\nimport { cn } from '@/lib/utils'\nimport { IncidentCard, type IncidentSeverity } from './IncidentCard'\n\nexport interface AlertItem {\n id: string\n title: string\n severity: IncidentSeverity\n timestamp: string\n description?: string\n service?: string\n acknowledged?: boolean\n}\n\nexport interface AlertInboxProps extends HTMLAttributes<HTMLDivElement> {\n alerts: AlertItem[]\n filterSeverity?: IncidentSeverity | ''\n onAcknowledge?: (id: string) => void\n loading?: boolean\n emptyMessage?: string\n}\n\nconst AlertInbox = forwardRef<HTMLDivElement, AlertInboxProps>(\n ({ className, alerts, filterSeverity = '', onAcknowledge, loading, emptyMessage = 'All clear — no incidents', ...props }, ref) => {\n const filtered = filterSeverity\n ? alerts.filter((a) => a.severity === filterSeverity)\n : alerts\n\n const counts = {\n total: alerts.length,\n unacknowledged: alerts.filter((a) => !a.acknowledged).length,\n critical: alerts.filter((a) => a.severity === 'critical' && !a.acknowledged).length,\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border border-tollerud-border bg-tollerud-surface-raised overflow-hidden',\n loading && 'animate-pulse',\n className\n )}\n {...props}\n >\n {/* Header bar */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-tollerud-border\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-semibold text-tollerud-foreground\">Alerts</span>\n {counts.unacknowledged > 0 && (\n <span className=\"inline-flex items-center gap-1 text-[11px] text-tollerud-error font-medium\">\n <span className=\"w-1.5 h-1.5 rounded-full bg-tollerud-error animate-pulse\" />\n {counts.unacknowledged} unread\n </span>\n )}\n {counts.critical > 0 && (\n <span className=\"text-[11px] text-tollerud-error font-bold\">{counts.critical} critical</span>\n )}\n </div>\n <span className=\"text-xs text-tollerud-text-muted\">{filtered.length} of {alerts.length}</span>\n </div>\n\n {/* Alert list */}\n <div className=\"divide-y divide-tollerud-border/50 max-h-[480px] overflow-y-auto\">\n {filtered.length === 0 && (\n <div className=\"px-4 py-8 text-xs text-center text-tollerud-text-muted\">{emptyMessage}</div>\n )}\n {filtered.map((alert) => (\n <div key={alert.id} className=\"relative group\">\n <IncidentCard\n title={alert.title}\n severity={alert.severity}\n timestamp={alert.timestamp}\n description={alert.description}\n service={alert.service}\n acknowledged={alert.acknowledged}\n className=\"border-0 rounded-none bg-transparent hover:bg-tollerud-noir-800/30\"\n />\n {/* Acknowledged indicator */}\n {alert.acknowledged && (\n <span className=\"absolute bottom-2 right-3 text-[10px] font-medium text-tollerud-text-muted/50\">\n Acknowledged\n </span>\n )}\n {/* Acknowledge button */}\n {!alert.acknowledged && onAcknowledge && (\n <button\n type=\"button\"\n onClick={() => onAcknowledge(alert.id)}\n className={cn(\n 'absolute bottom-2 right-3 text-[10px] font-medium px-2 py-0.5 rounded',\n 'text-tollerud-yellow/70 hover:text-tollerud-yellow hover:bg-tollerud-yellow/10',\n 'opacity-0 group-hover:opacity-100 transition-opacity duration-150'\n )}\n >\n Acknowledge\n </button>\n )}\n </div>\n ))}\n </div>\n </div>\n )\n }\n)\nAlertInbox.displayName = 'AlertInbox'\n\nexport { AlertInbox }","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport type RollbackStepStatus = 'pending' | 'running' | 'success' | 'failed' | 'skipped'\n\nexport interface RollbackStep {\n id: string\n label: string\n description?: string\n status: RollbackStepStatus\n}\n\nexport interface RollbackPlanProps extends HTMLAttributes<HTMLDivElement> {\n /** Name/identifier for the plan */\n name: string\n /** Rollback steps */\n steps: RollbackStep[]\n /** Whether the plan is executing */\n executing?: boolean\n /** Whether the plan is loading */\n loading?: boolean\n}\n\nconst stepIcon: Record<RollbackStepStatus, string> = {\n pending: '○',\n running: '◉',\n success: '●',\n failed: '✕',\n skipped: '—',\n}\n\nconst stepStyles: Record<RollbackStepStatus, string> = {\n pending: 'text-tollerud-noir-400',\n running: 'text-tollerud-yellow animate-pulse',\n success: 'text-tollerud-success',\n failed: 'text-tollerud-error',\n skipped: 'text-tollerud-noir-500',\n}\n\nconst RollbackPlan = forwardRef<HTMLDivElement, RollbackPlanProps>(\n ({ className, name, steps, executing, loading, ...props }, ref) => {\n const statusSummary: Record<RollbackStepStatus, number> = {\n pending: steps.filter((s) => s.status === 'pending').length,\n running: steps.filter((s) => s.status === 'running').length,\n success: steps.filter((s) => s.status === 'success').length,\n failed: steps.filter((s) => s.status === 'failed').length,\n skipped: steps.filter((s) => s.status === 'skipped').length,\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border border-tollerud-border bg-tollerud-surface-raised',\n loading && 'animate-pulse',\n className\n )}\n {...props}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-tollerud-border\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-semibold text-tollerud-foreground\">{name}</span>\n {executing && (\n <span className=\"text-[11px] text-tollerud-yellow font-medium animate-pulse\">Executing…</span>\n )}\n </div>\n <div className=\"flex items-center gap-2 text-[11px] text-tollerud-text-muted\">\n {statusSummary.success > 0 && <span className=\"text-tollerud-success\">{statusSummary.success} done</span>}\n {statusSummary.failed > 0 && <span className=\"text-tollerud-error\">{statusSummary.failed} failed</span>}\n {statusSummary.running > 0 && <span className=\"text-tollerud-yellow\">{statusSummary.running} running</span>}\n </div>\n </div>\n\n {/* Steps */}\n <div className=\"p-1\">\n {steps.map((step) => (\n <div\n key={step.id}\n className={cn(\n 'flex items-start gap-3 px-3 py-2 rounded-md',\n 'transition-colors duration-[150ms]',\n step.status === 'failed' && 'bg-tollerud-error/5',\n step.status === 'running' && 'bg-tollerud-yellow/5'\n )}\n >\n <span className={cn('font-mono text-sm mt-0.5 flex-shrink-0', stepStyles[step.status])}>\n {stepIcon[step.status]}\n </span>\n <div className=\"flex-1 min-w-0\">\n <span className={cn(\n 'text-xs font-medium',\n step.status === 'success' ? 'text-tollerud-success' :\n step.status === 'failed' ? 'text-tollerud-error' :\n step.status === 'skipped' ? 'text-tollerud-noir-500' :\n 'text-tollerud-foreground'\n )}>\n {step.label}\n </span>\n {step.description && (\n <p className=\"text-[11px] text-tollerud-text-muted mt-0.5\">{step.description}</p>\n )}\n </div>\n <span className={cn(\n 'text-[10px] uppercase font-semibold flex-shrink-0',\n stepStyles[step.status]\n )}>\n {step.status}\n </span>\n </div>\n ))}\n </div>\n </div>\n )\n }\n)\nRollbackPlan.displayName = 'RollbackPlan'\n\nexport { RollbackPlan }","import { type HTMLAttributes, forwardRef, useMemo, useState } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface DiffLine {\n /** Diff content */\n text: string\n /** Change type */\n type: 'add' | 'remove' | 'context'\n /** Line number in original */\n oldLine?: number\n /** Line number in new */\n newLine?: number\n}\n\nexport interface ActionDiffProps extends HTMLAttributes<HTMLDivElement> {\n /** Diff lines */\n lines: DiffLine[]\n /** File/label name */\n label?: string\n /** View mode */\n view?: 'unified' | 'side-by-side'\n /** Whether the diff is loading */\n loading?: boolean\n}\n\nconst diffStyles = {\n add: 'bg-tollerud-success/[0.06] text-tollerud-success hover:bg-tollerud-success/[0.10]',\n remove: 'bg-tollerud-error/[0.06] text-tollerud-error hover:bg-tollerud-error/[0.10]',\n context: 'text-tollerud-noir-300',\n}\n\nconst diffPrefix = {\n add: '+',\n remove: '-',\n context: ' ',\n}\n\nconst ActionDiff = forwardRef<HTMLDivElement, ActionDiffProps>(\n ({ className, lines, label, view = 'unified', loading, ...props }, ref) => {\n const [showContext, setShowContext] = useState(true)\n\n const stats = useMemo(() => {\n const adds = lines.filter((l) => l.type === 'add').length\n const rems = lines.filter((l) => l.type === 'remove').length\n return { adds, rems }\n }, [lines])\n\n // Filter context lines if collapsed\n const displayLines = showContext ? lines : lines.filter((l) => l.type !== 'context')\n const hasContext = lines.some((l) => l.type === 'context')\n\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border border-tollerud-border bg-[var(--color-tollerud-surface-raised)] overflow-hidden',\n loading && 'animate-pulse',\n className\n )}\n {...props}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-2.5 border-b border-tollerud-border bg-tollerud-noir-900\">\n <div className=\"flex items-center gap-2 min-w-0\">\n {label && (\n <span className=\"text-xs font-medium text-tollerud-foreground font-mono truncate\">{label}</span>\n )}\n </div>\n <div className=\"flex items-center gap-3 text-[11px]\">\n <span className=\"text-tollerud-success\">+{stats.adds}</span>\n <span className=\"text-tollerud-error\">-{stats.rems}</span>\n {hasContext && (\n <button\n type=\"button\"\n onClick={() => setShowContext(!showContext)}\n className=\"text-tollerud-text-muted hover:text-tollerud-foreground transition-colors\"\n >\n {showContext ? 'Hide context' : 'Show context'}\n </button>\n )}\n </div>\n </div>\n\n {/* Diff content */}\n <div className=\"overflow-x-auto font-mono text-xs leading-relaxed\">\n <table className=\"w-full border-collapse\">\n <tbody>\n {displayLines.map((line, i) => (\n <tr\n key={i}\n className={cn(\n 'transition-colors duration-[100ms]',\n diffStyles[line.type]\n )}\n >\n {/* Old line number */}\n <td className={cn(\n 'w-10 text-right px-2 py-px select-none',\n 'text-tollerud-noir-500 border-r border-tollerud-border/30',\n 'text-[10px] align-top'\n )}>\n {line.oldLine ?? ''}\n </td>\n {/* New line number */}\n <td className={cn(\n 'w-10 text-right px-2 py-px select-none',\n 'text-tollerud-noir-500 border-r border-tollerud-border/30',\n 'text-[10px] align-top'\n )}>\n {line.newLine ?? ''}\n </td>\n {/* Prefix + content */}\n <td className=\"px-2 py-px whitespace-pre-wrap\">\n <span className=\"select-none opacity-50 mr-2\">{diffPrefix[line.type]}</span>\n {line.text}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n )\n }\n)\nActionDiff.displayName = 'ActionDiff'\n\nexport { ActionDiff }","import {\n type HTMLAttributes,\n type UIEvent,\n forwardRef,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { cn } from '@/lib/utils'\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'trace'\n\nexport interface LogLine {\n /** Line content */\n text: string\n /** Log level for color coding */\n level?: LogLevel\n /** Timestamp string (optional) */\n timestamp?: string\n /** Source/logger name */\n source?: string\n}\n\nexport interface LogViewerProps extends HTMLAttributes<HTMLDivElement> {\n /** Log lines to display */\n lines: LogLine[]\n /** Maximum visible lines (for performance) */\n maxLines?: number\n /** Show line numbers */\n showLineNumbers?: boolean\n /** Show timestamps */\n showTimestamps?: boolean\n /** Whether to auto-scroll (follow new content) */\n follow?: boolean\n /** Enable search */\n searchable?: boolean\n /** Height of the viewer */\n height?: string\n /** Whether the viewer is loading */\n loading?: boolean\n}\n\nconst levelStyles: Record<LogLevel, string> = {\n debug: 'text-tollerud-noir-400',\n trace: 'text-tollerud-noir-300',\n info: 'text-tollerud-foreground',\n warn: 'text-tollerud-amber',\n error: 'text-tollerud-error',\n}\n\nconst levelLabels: Record<LogLevel, string> = {\n debug: 'DBG',\n trace: 'TRC',\n info: 'INF',\n warn: 'WRN',\n error: 'ERR',\n}\n\nconst LogViewer = forwardRef<HTMLDivElement, LogViewerProps>(\n ({ className, lines, maxLines = 5000, showLineNumbers = true, showTimestamps = true, follow = true, searchable, height = '400px', loading, ...props }, ref) => {\n const [search, setSearch] = useState('')\n const [isFollowing, setIsFollowing] = useState(follow)\n const scrollRef = useRef<HTMLDivElement>(null)\n\n // Truncate for performance\n const displayedLines = useMemo(() => {\n return lines.length > maxLines ? lines.slice(-maxLines) : lines\n }, [lines, maxLines])\n\n // Filter by search\n const filteredLines = useMemo(() => {\n if (!search.trim()) return displayedLines\n return displayedLines.filter((l) =>\n l.text.toLowerCase().includes(search.toLowerCase()) ||\n l.source?.toLowerCase().includes(search.toLowerCase())\n )\n }, [displayedLines, search])\n\n // Auto-scroll\n useEffect(() => {\n if (isFollowing && scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight\n }\n }, [filteredLines.length, isFollowing])\n\n // Detect manual scroll to disable follow\n const handleScroll = (e: UIEvent<HTMLDivElement>) => {\n const el = e.currentTarget\n const atBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 40\n setIsFollowing(atBottom)\n }\n\n const filteredFrom = displayedLines.indexOf(filteredLines[0])\n\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border border-tollerud-border bg-[var(--color-tollerud-surface-raised)] overflow-hidden tollerud-log-viewer',\n loading && 'animate-pulse',\n className\n )}\n {...props}\n >\n {/* Toolbar */}\n <div className=\"flex items-center justify-between px-3 py-2 border-b border-tollerud-border bg-tollerud-noir-900\">\n <div className=\"flex items-center gap-2 text-xs text-tollerud-text-muted\">\n {isFollowing\n ? <span className=\"text-tollerud-yellow font-medium\">● Live</span>\n : <span className=\"text-tollerud-noir-400\">● Paused</span>}\n <span>{filteredLines.length} lines</span>\n {lines.length > maxLines && (\n <span className=\"text-tollerud-amber\">(showing last {maxLines})</span>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n {searchable && (\n <input\n type=\"text\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search logs…\"\n className={cn(\n 'w-40 text-[11px] px-2 py-1 rounded bg-tollerud-noir-800',\n 'border border-tollerud-noir-600 text-tollerud-foreground',\n 'placeholder:text-tollerud-noir-400 outline-none',\n 'focus:border-tollerud-yellow/50 transition-colors'\n )}\n />\n )}\n </div>\n </div>\n\n {/* Log content */}\n <div\n ref={scrollRef}\n onScroll={handleScroll}\n className=\"overflow-y-auto font-mono text-xs leading-relaxed p-3\"\n style={{ height }}\n >\n {filteredLines.length === 0 && (\n <div className=\"flex items-center justify-center h-full text-tollerud-noir-400 text-xs\">\n {search ? 'No matching log lines' : 'No log output'}\n </div>\n )}\n {filteredLines.map((line, i) => {\n const absLineNum = filteredFrom >= 0 ? filteredFrom + i + 1 : i + 1\n const level = line.level ?? 'info'\n return (\n <div\n key={`${absLineNum}-${i}`}\n className={cn(\n 'flex gap-3 hover:bg-[var(--color-tollerud-surface-hover)] px-1 py-px rounded-sm',\n levelStyles[level]\n )}\n >\n {showLineNumbers && (\n <span className=\"text-tollerud-noir-500 text-right select-none w-8 flex-shrink-0\">\n {absLineNum}\n </span>\n )}\n {showTimestamps && line.timestamp && (\n <span className=\"text-tollerud-noir-400 flex-shrink-0 select-none\">\n {line.timestamp}\n </span>\n )}\n <span className=\"flex-shrink-0 w-7 text-center font-bold text-[10px] uppercase opacity-60\">\n {levelLabels[level]}\n </span>\n <span className=\"whitespace-pre-wrap break-all\">{line.text}</span>\n </div>\n )\n })}\n </div>\n </div>\n )\n }\n)\nLogViewer.displayName = 'LogViewer'\n\nexport { LogViewer }","import { type TextareaHTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n label?: string\n error?: string\n}\n\nconst Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, label, error, id, ...props }, ref) => {\n return (\n <div className=\"flex flex-col gap-1\">\n {label && (\n <label htmlFor={id} className=\"text-xs font-medium text-tollerud-text-muted\">\n {label}\n </label>\n )}\n <textarea\n ref={ref}\n id={id}\n className={cn(\n 'font-sans text-base px-3 py-2 rounded min-h-[80px] resize-y',\n 'bg-tollerud-surface-raised border',\n 'text-tollerud-text-primary',\n 'placeholder:text-tollerud-text-muted',\n 'transition-[border-color] duration-[150ms]',\n 'focus:outline-none focus:border-tollerud-yellow focus:shadow-[0_0_0_1px_#E8D500]',\n error ? 'border-tollerud-error' : 'border-tollerud-border',\n className\n )}\n {...props}\n />\n {error && (\n <p className=\"text-xs text-tollerud-error mt-0.5\">{error}</p>\n )}\n </div>\n )\n }\n)\nTextarea.displayName = 'Textarea'\n\nexport { Textarea }","import { type HTMLAttributes, forwardRef, useState, useRef, useEffect, useCallback } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface SelectOption {\n value: string\n label: string\n}\n\nexport interface SelectProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {\n label?: string\n error?: string\n placeholder?: string\n options?: SelectOption[]\n value?: string\n onChange?: (value: string) => void\n}\n\nconst Select = forwardRef<HTMLDivElement, SelectProps>(\n ({ className, label, error, placeholder, options = [], value, onChange, ...props }, ref) => {\n const [open, setOpen] = useState(false)\n const [highlightedIdx, setHighlightedIdx] = useState(0)\n const containerRef = useRef<HTMLDivElement>(null)\n const listRef = useRef<HTMLDivElement>(null)\n\n const selectedOption = options.find((o) => o.value === value)\n\n // Close on click outside\n useEffect(() => {\n if (!open) return\n const handleClick = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setOpen(false)\n }\n }\n document.addEventListener('mousedown', handleClick)\n return () => document.removeEventListener('mousedown', handleClick)\n }, [open])\n\n // Reset highlight when opening\n useEffect(() => {\n if (open) {\n const idx = value ? options.findIndex((o) => o.value === value) : -1\n setHighlightedIdx(idx >= 0 ? idx : 0)\n }\n }, [open, options, value])\n\n // Scroll highlighted option into view\n useEffect(() => {\n if (open && listRef.current) {\n const item = listRef.current.children[highlightedIdx] as HTMLElement | undefined\n item?.scrollIntoView({ block: 'nearest' })\n }\n }, [open, highlightedIdx])\n\n const selectOption = useCallback(\n (opt: SelectOption) => {\n onChange?.(opt.value)\n setOpen(false)\n },\n [onChange]\n )\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (!open) {\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {\n e.preventDefault()\n setOpen(true)\n }\n return\n }\n\n switch (e.key) {\n case 'Escape':\n e.preventDefault()\n setOpen(false)\n break\n case 'ArrowDown':\n e.preventDefault()\n setHighlightedIdx((prev) => Math.min(prev + 1, options.length - 1))\n break\n case 'ArrowUp':\n e.preventDefault()\n setHighlightedIdx((prev) => Math.max(prev - 1, 0))\n break\n case 'Enter':\n e.preventDefault()\n if (options[highlightedIdx]) {\n selectOption(options[highlightedIdx])\n }\n break\n }\n }\n\n return (\n <div className=\"flex flex-col gap-1.5\" ref={ref}>\n {label && (\n <label className=\"text-xs font-medium text-tollerud-text-muted\">\n {label}\n </label>\n )}\n <div ref={containerRef} className=\"relative\">\n {/* Trigger */}\n <button\n type=\"button\"\n onClick={() => setOpen(!open)}\n onKeyDown={handleKeyDown}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n className={cn(\n 'font-sans text-sm w-full flex items-center justify-between px-3 py-2.5 rounded-lg',\n 'bg-tollerud-surface-raised',\n 'text-tollerud-text-primary text-left',\n 'transition-all duration-150 ease-out cursor-pointer',\n error\n ? 'border-tollerud-error/70 focus:border-tollerud-error focus:shadow-[0_0_0_1px_#EF4444]'\n : 'border-tollerud-border focus:border-tollerud-yellow focus:shadow-[0_0_0_1px_#E8D500]',\n 'border hover:border-tollerud-noir-400',\n 'focus:outline-none',\n className\n )}\n >\n <span className={cn(!selectedOption && 'text-tollerud-text-muted')}>\n {selectedOption ? selectedOption.label : placeholder || 'Select…'}\n </span>\n <svg\n className={cn(\n 'h-4 w-4 text-tollerud-text-muted transition-transform duration-150 flex-shrink-0',\n open && 'rotate-180'\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n aria-hidden=\"true\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 9l6 6 6-6\" />\n </svg>\n </button>\n\n {/* Dropdown */}\n {open && (\n <div\n ref={listRef}\n role=\"listbox\"\n className={cn(\n 'absolute z-10 left-0 right-0 mt-1 py-1',\n 'rounded-lg border border-tollerud-border bg-tollerud-surface-overlay',\n 'shadow-[0_8px_24px_rgba(0,0,0,0.4)]',\n 'max-h-60 overflow-y-auto'\n )}\n >\n {options.length === 0 && (\n <div className=\"px-3 py-2 text-xs text-tollerud-text-muted text-center\">\n No options\n </div>\n )}\n {options.map((opt, idx) => (\n <button\n key={opt.value}\n type=\"button\"\n role=\"option\"\n aria-selected={opt.value === value}\n onClick={() => selectOption(opt)}\n onMouseEnter={() => setHighlightedIdx(idx)}\n className={cn(\n 'w-full text-sm text-left px-3 py-2 transition-colors duration-75',\n 'cursor-pointer',\n opt.value === value\n ? 'text-tollerud-yellow'\n : 'text-tollerud-text-primary',\n idx === highlightedIdx && !(opt.value === value)\n ? 'bg-tollerud-noir-700'\n : 'hover:bg-tollerud-noir-700/60',\n opt.value === value && highlightedIdx === idx && 'bg-tollerud-noir-700'\n )}\n >\n {opt.label}\n </button>\n ))}\n </div>\n )}\n </div>\n {error && (\n <p className=\"text-xs text-tollerud-error mt-0.5\">{error}</p>\n )}\n </div>\n )\n }\n)\nSelect.displayName = 'Select'\n\nexport { Select }","import { type InputHTMLAttributes, forwardRef, useId } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: string\n}\n\nconst Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n ({ className, label, id: idProp, checked, ...props }, ref) => {\n const autoId = useId()\n const id = idProp ?? autoId\n\n return (\n <label\n htmlFor={id}\n className={cn(\n 'inline-flex items-center gap-2 cursor-pointer select-none group',\n 'text-sm text-tollerud-text-primary',\n props.disabled && 'opacity-50 pointer-events-none',\n className\n )}\n >\n <span className=\"relative flex items-center justify-center\">\n <input\n ref={ref}\n id={id}\n type=\"checkbox\"\n checked={checked}\n className=\"peer sr-only\"\n {...props}\n />\n {/* Custom box */}\n <span\n className={cn(\n 'h-4 w-4 rounded border transition-all duration-[150ms]',\n 'flex items-center justify-center',\n 'bg-tollerud-surface-raised border-tollerud-border',\n 'peer-focus-visible:outline-2 peer-focus-visible:outline-tollerud-yellow',\n 'peer-checked:bg-tollerud-yellow peer-checked:border-tollerud-yellow',\n 'group-hover:border-tollerud-text-secondary'\n )}\n >\n {/* Checkmark SVG — visible when checked */}\n <svg\n className={cn(\n 'h-3 w-3 text-tollerud-noir-black transition-opacity duration-[150ms]',\n checked ? 'opacity-100' : 'opacity-0'\n )}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M2.5 6l2.5 2.5 4.5-5\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n </span>\n {label && <span>{label}</span>}\n </label>\n )\n }\n)\nCheckbox.displayName = 'Checkbox'\n\nexport { Checkbox }","import { type InputHTMLAttributes, forwardRef, useId } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface SwitchProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: string\n}\n\nconst Switch = forwardRef<HTMLInputElement, SwitchProps>(\n ({ className, label, id: idProp, checked, ...props }, ref) => {\n const autoId = useId()\n const id = idProp ?? autoId\n\n return (\n <label\n htmlFor={id}\n className={cn(\n 'inline-flex items-center gap-2.5 cursor-pointer select-none group',\n 'text-sm text-tollerud-text-primary',\n props.disabled && 'opacity-40 pointer-events-none cursor-not-allowed',\n className\n )}\n >\n {/* Track */}\n <span\n className={cn(\n 'relative inline-flex items-center h-5 w-9 flex-shrink-0 rounded-full',\n 'transition-colors duration-200 ease-out',\n checked ? 'bg-tollerud-yellow' : 'bg-tollerud-noir-600',\n 'group-hover:bg-tollerud-noir-500',\n checked && 'group-hover:bg-tollerud-yellow-warm',\n 'peer-focus-visible:outline-2 peer-focus-visible:outline-tollerud-yellow peer-focus-visible:outline-offset-2'\n )}\n >\n {/* Hidden input (peer) */}\n <input\n ref={ref}\n id={id}\n type=\"checkbox\"\n role=\"switch\"\n checked={checked}\n className=\"peer absolute inset-0 opacity-0 w-full h-full cursor-pointer z-10\"\n {...props}\n />\n {/* Thumb */}\n <span\n className={cn(\n 'block h-3.5 w-3.5 rounded-full shadow-sm',\n 'transition-all duration-200 ease-out',\n checked\n ? 'translate-x-[18px] bg-tollerud-black'\n : 'translate-x-[3px] bg-tollerud-white'\n )}\n />\n </span>\n {label && <span>{label}</span>}\n </label>\n )\n }\n)\nSwitch.displayName = 'Switch'\n\nexport { Switch }","import { type InputHTMLAttributes, forwardRef, useId } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface RadioGroupProps {\n /** Group label */\n label?: string\n /** Error message */\n error?: string\n children?: React.ReactNode\n className?: string\n}\n\nconst RadioGroup = forwardRef<HTMLFieldSetElement, RadioGroupProps>(\n ({ label, error, children, className }, ref) => {\n const autoId = useId()\n return (\n <fieldset ref={ref} className={cn('flex flex-col gap-1', className)}>\n {label && (\n <legend className=\"text-xs font-medium text-tollerud-text-muted mb-1\">\n {label}\n </legend>\n )}\n <div className=\"flex flex-col gap-2\">{children}</div>\n {error && (\n <p className=\"text-xs text-tollerud-error mt-0.5\">{error}</p>\n )}\n </fieldset>\n )\n }\n)\nRadioGroup.displayName = 'RadioGroup'\n\nexport interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: string\n}\n\nconst Radio = forwardRef<HTMLInputElement, RadioProps>(\n ({ className, label, id: idProp, ...props }, ref) => {\n const autoId = useId()\n const id = idProp ?? autoId\n\n return (\n <label\n htmlFor={id}\n className={cn(\n 'inline-flex items-center gap-2 cursor-pointer select-none group',\n 'text-sm text-tollerud-text-primary',\n props.disabled && 'opacity-50 pointer-events-none',\n className\n )}\n >\n <span className=\"relative flex items-center justify-center\">\n <input\n ref={ref}\n id={id}\n type=\"radio\"\n className=\"peer sr-only\"\n {...props}\n />\n {/* Custom radio circle */}\n <span\n className={cn(\n 'h-4 w-4 rounded-full border transition-all duration-[150ms]',\n 'bg-tollerud-surface-raised border-tollerud-border',\n 'peer-focus-visible:outline-2 peer-focus-visible:outline-tollerud-yellow',\n 'peer-checked:border-tollerud-yellow',\n 'group-hover:border-tollerud-text-secondary',\n 'flex items-center justify-center'\n )}\n >\n {/* Inner dot */}\n <span\n className={cn(\n 'h-2 w-2 rounded-full bg-tollerud-yellow transition-opacity duration-[150ms]',\n props.checked ? 'opacity-100' : 'opacity-0'\n )}\n />\n </span>\n </span>\n {label && <span>{label}</span>}\n </label>\n )\n }\n)\nRadio.displayName = 'Radio'\n\nexport { RadioGroup, Radio }","'use client'\n\nimport type { CSSProperties, ReactElement } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport type FooterLabels = {\n /** Text for the tollerud.no link (e.g. \"A Tollerud Project\"). */\n tollerudProject: string\n /**\n * Optional middle segment after the link, before the rights line.\n * Example for Advania: `\"for Advania Norge AS.\"`\n */\n attribution?: string\n allRightsReserved: string\n}\n\nconst defaultLabels: FooterLabels = {\n tollerudProject: 'A Tollerud Project',\n allRightsReserved: 'All rights reserved.',\n}\n\nexport type FooterProps = {\n labels?: Partial<FooterLabels>\n /** Layout behavior: responsive keeps mobile-first stacking, row forces horizontal layout. */\n layout?: 'responsive' | 'row'\n /** Merged onto <footer>. Use for extra layout, padding, etc. */\n className?: string\n /** Merged onto <footer> (wins over conflicting backgroundColor from classes when needed). */\n style?: CSSProperties\n /**\n * When true, skips all default surface styling so className/style fully control the bar\n * (avoids fighting default background/border).\n */\n unstyled?: boolean\n /** When true, uses accent (yellow) surface instead of neutral dark. */\n accent?: boolean\n classNameInner?: string\n classNameLogo?: string\n classNameText?: string\n classNameLink?: string\n}\n\nconst MONOGRAM_PATH =\n 'M82.4839273,140.272626 L95.1738252,140.272626 L95.1738252,143 L34.8114657,143 L34.8114657,140.272626 L47.5013636,140.272626 L47.5013636,28.2924381 C40.1277806,26.4177752 32.9252955,25.2241422 26.4088393,25.2241422 C12.1757856,25.2241422 4.11617359,34.5982703 4.11617359,39.8821508 C4.11617359,40.9049161 4.63028596,41.5867596 5.65932936,41.5867596 C7.20248513,41.5867596 7.37440169,40.3931266 8.06043062,38.8593855 C10.4615319,33.575505 15.6059302,31.5307881 20.4073141,31.5307881 C29.152955,31.5307881 35.1552988,38.5184637 35.1552988,47.2107482 C35.1552988,56.2447681 28.8107592,62.8907084 18.0070315,62.8907084 C7.5454996,62.891522 0,53.6882617 0,43.8023442 C0,30.8497582 11.3178401,21.986606 26.5799372,21.986606 C51.1026062,21.986606 84.1989996,39.2011209 104.948509,39.2011209 C118.495534,39.2011209 126.384048,31.7016558 126.384048,19.4300996 C126.384048,10.3968933 118.667451,4.60203698 115.580321,4.60203698 C114.552096,4.60203698 113.69415,5.1130128 113.69415,6.13577809 C113.69415,7.49946515 114.552096,7.6695192 115.409223,8.01044097 C115.752237,8.18049502 122.268693,10.5669474 122.268693,19.2592319 C122.268693,28.2924381 115.238125,34.0872945 107.177694,34.0872945 C97.7460244,34.0872945 91.0584702,26.4177752 91.0584702,17.8955448 C91.0584702,6.64675391 99.9760277,0 109.749893,0 C122.268693,0 129.642276,9.88510384 129.642276,19.6001536 C129.642276,34.2581622 119.181563,42.4386572 104.947691,42.4386572 C98.0890388,42.4386572 90.5443579,40.9049161 82.4839273,38.6901451 L82.4839273,140.272626 Z'\n\nexport function Footer({\n labels,\n layout = 'responsive',\n className,\n style,\n unstyled = false,\n accent = false,\n classNameInner,\n classNameLogo,\n classNameText,\n classNameLink,\n}: FooterProps): ReactElement {\n const t = { ...defaultLabels, ...labels }\n const attribution = t.attribution?.trim()\n\n const footerSurface = unstyled\n ? ''\n : accent\n ? 'border-t border-tollerud-yellow/20 bg-tollerud-yellow/5'\n : 'border-t border-tollerud-border bg-tollerud-noir-900/80'\n\n const innerLayoutClasses =\n layout === 'row'\n ? 'max-w-7xl mx-auto px-8 flex flex-row items-center justify-between gap-4'\n : 'max-w-7xl mx-auto px-8 flex flex-col md:flex-row items-center justify-center md:justify-between gap-4 md:gap-0'\n\n const logoColor = unstyled\n ? ''\n : accent\n ? 'text-tollerud-yellow'\n : 'text-tollerud-text-muted'\n\n const textWrapperClasses =\n layout === 'row' ? 'flex-1 text-right ml-4' : 'flex-1 text-center md:text-right md:ml-4'\n\n const textLayoutClasses =\n layout === 'row'\n ? 'text-sm text-tollerud-text-secondary inline-flex flex-row items-center justify-end text-right gap-0'\n : 'text-sm text-tollerud-text-secondary flex flex-col md:flex-row md:inline gap-0'\n\n return (\n <footer className={cn('w-full pt-4 pb-4', footerSurface, className)} style={style}>\n <div className={cn(innerLayoutClasses, classNameInner)}>\n <div className=\"flex-shrink-0 md:flex-shrink-0\">\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 130 143\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n className={cn('h-5 w-5', logoColor, classNameLogo)}\n role=\"img\"\n >\n <title>Tollerud Logo</title>\n <g id=\"Page-1\" stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\">\n <g id=\"Tollerud-Monogram\" transform=\"translate(-86.000000, -109.000000)\" fill=\"currentColor\">\n <g id=\"Group-2\" transform=\"translate(32.000000, 55.000000)\">\n <g id=\"Group\" transform=\"translate(54.000000, 54.000000)\">\n <path d={MONOGRAM_PATH} id=\"Monogram\" />\n </g>\n </g>\n </g>\n </g>\n </svg>\n </div>\n\n <div className={textWrapperClasses}>\n <p className={cn(textLayoutClasses, classNameText)}>\n <span>\n <a\n href=\"https://tollerud.no\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cn(\n 'underline decoration-tollerud-yellow decoration-[3px] underline-offset-[4px] hover:opacity-80 transition-opacity',\n classNameLink,\n )}\n style={{\n textDecorationThickness: '3px',\n textUnderlineOffset: '4px',\n }}\n >\n {t.tollerudProject}\n </a>\n {attribution ? (\n <>\n {' '}\n <span>{attribution}</span>\n </>\n ) : null}{' '}\n </span>\n <span className={layout === 'row' ? 'ml-1' : 'md:ml-1'}>{t.allRightsReserved}</span>\n </p>\n </div>\n </div>\n </footer>\n )\n}","'use client'\n\nimport * as React from 'react'\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { X } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\nconst Dialog = DialogPrimitive.Root\nconst DialogTrigger = DialogPrimitive.Trigger\nconst DialogPortal = DialogPrimitive.Portal\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n 'fixed inset-0 z-50 bg-black/60 backdrop-blur-sm',\n className\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = 'DialogOverlay'\n\nconst DialogContent = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'fixed top-1/2 left-1/2 z-50 w-full max-w-lg -translate-x-1/2 -translate-y-1/2',\n 'rounded-lg border border-tollerud-border/30 bg-tollerud-noir-900 p-6 shadow-xl',\n 'data-[state=open]:animate-none data-[state=closed]:animate-none',\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute top-4 right-4 rounded-sm p-1 text-tollerud-text-muted hover:text-tollerud-foreground transition-colors cursor-pointer\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = 'DialogContent'\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn('flex flex-col gap-1.5 mb-4', className)}\n {...props}\n />\n)\nDialogHeader.displayName = 'DialogHeader'\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn('flex flex-col-reverse sm:flex-row sm:justify-end gap-2 mt-6', className)}\n {...props}\n />\n)\nDialogFooter.displayName = 'DialogFooter'\n\nconst DialogTitle = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn('text-base font-semibold text-tollerud-foreground', className)}\n {...props}\n />\n))\nDialogTitle.displayName = 'DialogTitle'\n\nconst DialogDescription = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn('text-sm text-tollerud-text-secondary', className)}\n {...props}\n />\n))\nDialogDescription.displayName = 'DialogDescription'\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}","'use client'\n\nimport * as React from 'react'\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip'\nimport { cn } from '@/lib/utils'\n\nconst TooltipProvider = TooltipPrimitive.Provider\n\n/* ── Mobile-friendly Tooltip ──\n Opens on hover (desktop) AND on click/tap (mobile).\n Uses React context so the Trigger can toggle Root's open state.\n Closes on second click/tap or click outside. */\n\ntype TooltipContextValue = {\n open: boolean\n setOpen: (open: boolean) => void\n}\n\nconst TooltipContext = React.createContext<TooltipContextValue | null>(null)\n\nfunction Tooltip({\n children,\n defaultOpen,\n open: controlledOpen,\n onOpenChange: controlledOnOpenChange,\n ...props\n}: React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Root>) {\n const [internalOpen, setInternalOpen] = React.useState(defaultOpen ?? false)\n const isControlled = controlledOpen !== undefined\n const open = isControlled ? controlledOpen : internalOpen\n const setOpen = isControlled ? (controlledOnOpenChange ?? setInternalOpen) : setInternalOpen\n\n return (\n <TooltipContext.Provider value={{ open, setOpen }}>\n <TooltipPrimitive.Root open={open} onOpenChange={(v: boolean) => setOpen(v)} {...props}>\n {children}\n </TooltipPrimitive.Root>\n </TooltipContext.Provider>\n )\n}\nTooltip.displayName = 'Tooltip'\n\nconst TooltipTrigger = React.forwardRef<\n React.ComponentRef<typeof TooltipPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Trigger>\n>(({ onClick, onTouchStart, children, ...props }, ref) => {\n const ctx = React.useContext(TooltipContext)\n const touchFired = React.useRef(false)\n\n return (\n <TooltipPrimitive.Trigger\n ref={ref}\n onClick={(e) => {\n // Skip click if this was triggered by a touch (already handled)\n if (touchFired.current) {\n touchFired.current = false\n return\n }\n // Toggle tooltip on click — covers mobile where hover doesn't fire\n if (ctx) {\n ctx.setOpen(!ctx.open)\n }\n onClick?.(e)\n }}\n onTouchStart={(e) => {\n touchFired.current = true\n // Open on touch for mobile\n if (ctx && !ctx.open) {\n ctx.setOpen(true)\n }\n onTouchStart?.(e)\n }}\n {...props}\n >\n {children}\n </TooltipPrimitive.Trigger>\n )\n})\nTooltipTrigger.displayName = 'TooltipTrigger'\n\nconst TooltipContent = React.forwardRef<\n React.ComponentRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 overflow-hidden rounded-md border border-tollerud-border/30',\n 'bg-tollerud-noir-800 px-3 py-1.5 text-xs text-tollerud-foreground',\n 'shadow-md',\n 'animate-in fade-in-0 zoom-in-95',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n 'data-[side=bottom]:slide-in-from-top-1',\n 'data-[side=left]:slide-in-from-right-1',\n 'data-[side=right]:slide-in-from-left-1',\n 'data-[side=top]:slide-in-from-bottom-1',\n className\n )}\n {...props}\n />\n))\nTooltipContent.displayName = 'TooltipContent'\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }","'use client'\n\nimport * as React from 'react'\nimport * as TabsPrimitive from '@radix-ui/react-tabs'\nimport { cn } from '@/lib/utils'\n\nconst Tabs = TabsPrimitive.Root\n\nconst TabsList = React.forwardRef<\n React.ComponentRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n 'inline-flex h-9 items-center justify-center rounded-lg',\n 'bg-tollerud-noir-800 p-1 text-tollerud-text-muted',\n className\n )}\n {...props}\n />\n))\nTabsList.displayName = 'TabsList'\n\nconst TabsTrigger = React.forwardRef<\n React.ComponentRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1',\n 'text-xs font-medium transition-all',\n 'text-tollerud-text-muted hover:text-tollerud-foreground',\n 'data-[state=active]:bg-tollerud-surface-raised data-[state=active]:text-tollerud-foreground data-[state=active]:shadow-sm',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-tollerud-yellow/50',\n className\n )}\n {...props}\n />\n))\nTabsTrigger.displayName = 'TabsTrigger'\n\nconst TabsContent = React.forwardRef<\n React.ComponentRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n 'mt-2 ring-offset-tollerud-black focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-tollerud-yellow/50 focus-visible:ring-offset-2',\n className\n )}\n {...props}\n />\n))\nTabsContent.displayName = 'TabsContent'\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }","import { cn } from '@/lib/utils'\n\nfunction Skeleton({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n 'animate-pulse rounded-md bg-tollerud-noir-800',\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Skeleton }","'use client'\n\nimport * as React from 'react'\nimport * as ProgressPrimitive from '@radix-ui/react-progress'\nimport { cn } from '@/lib/utils'\n\nconst Progress = React.forwardRef<\n React.ComponentRef<typeof ProgressPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>\n>(({ className, value, ...props }, ref) => (\n <ProgressPrimitive.Root\n ref={ref}\n className={cn(\n 'relative h-2 w-full overflow-hidden rounded-full bg-tollerud-noir-800',\n className\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className=\"h-full w-full flex-1 rounded-full bg-tollerud-yellow transition-all duration-300 ease-in-out\"\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n))\nProgress.displayName = 'Progress'\n\nexport { Progress }","'use client'\n\nimport { Toaster as SonnerToaster, type ToasterProps } from 'sonner'\nimport { useEffect, useState } from 'react'\n\nexport type TollerudToasterProps = ToasterProps & {\n /** Toast color theme. Wire to your app theme when you have one. */\n theme?: ToasterProps['theme']\n}\n\nconst Toaster = ({ theme = 'dark', ...props }: TollerudToasterProps) => {\n const [mobile, setMobile] = useState(false)\n\n useEffect(() => {\n const check = () => setMobile(window.innerWidth < 640)\n check()\n window.addEventListener('resize', check)\n return () => window.removeEventListener('resize', check)\n }, [])\n\n return (\n <SonnerToaster\n position={mobile ? 'top-center' : 'top-right'}\n theme={theme as ToasterProps['theme']}\n className=\"toaster group\"\n toastOptions={{\n classNames: {\n toast:\n 'group toast group-[.toaster]:bg-tollerud-noir-900 group-[.toaster]:text-tollerud-foreground ' +\n 'group-[.toaster]:border group-[.toaster]:border-tollerud-border/30 ' +\n 'group-[.toaster]:shadow-lg',\n description: 'group-[.toast]:text-tollerud-text-muted text-xs',\n actionButton:\n 'group-[.toast]:bg-tollerud-yellow group-[.toast]:text-tollerud-black group-[.toast]:text-xs ' +\n 'group-[.toast]:font-medium group-[.toast]:px-3 group-[.toast]:py-1 group-[.toast]:rounded',\n cancelButton:\n 'group-[.toast]:bg-tollerud-noir-800 group-[.toast]:text-tollerud-text-muted ' +\n 'group-[.toast]:text-xs group-[.toast]:px-3 group-[.toast]:py-1 group-[.toast]:rounded',\n success: 'group-[.toast]:border-l-tollerud-success group-[.toast]:border-l-2',\n error: 'group-[.toast]:border-l-tollerud-error group-[.toast]:border-l-2',\n warning: 'group-[.toast]:border-l-tollerud-yellow group-[.toast]:border-l-2',\n info: 'group-[.toast]:border-l-tollerud-info group-[.toast]:border-l-2',\n },\n }}\n {...props}\n />\n )\n}\n\nexport { Toaster }","import { forwardRef, type HTMLAttributes } from 'react'\nimport { cn } from '@/lib/utils'\n\n// ── Empty ──\n\nexport interface EmptyProps extends HTMLAttributes<HTMLDivElement> {}\n\nconst Empty = forwardRef<HTMLDivElement, EmptyProps>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex w-full flex-1 flex-col items-center justify-center text-center py-12',\n className\n )}\n {...props}\n />\n )\n }\n)\nEmpty.displayName = 'Empty'\n\n// ── EmptyHeader ──\n\nconst EmptyHeader = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex max-w-sm flex-col items-center gap-2',\n className\n )}\n {...props}\n />\n )\n }\n)\nEmptyHeader.displayName = 'EmptyHeader'\n\n// ── EmptyIcon ──\n\nconst EmptyIcon = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex items-center justify-center w-12 h-12 rounded-full bg-tollerud-noir-800 text-tollerud-text-muted mb-2',\n className\n )}\n {...props}\n />\n )\n }\n)\nEmptyIcon.displayName = 'EmptyIcon'\n\n// ── EmptyTitle ──\n\nconst EmptyTitle = forwardRef<HTMLHeadingElement, HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => {\n return (\n <h3\n ref={ref}\n className={cn(\n 'text-base font-semibold text-tollerud-foreground',\n className\n )}\n {...props}\n />\n )\n }\n)\nEmptyTitle.displayName = 'EmptyTitle'\n\n// ── EmptyDescription ──\n\nconst EmptyDescription = forwardRef<HTMLParagraphElement, HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => {\n return (\n <p\n ref={ref}\n className={cn(\n 'text-sm text-tollerud-text-secondary max-w-sm',\n className\n )}\n {...props}\n />\n )\n }\n)\nEmptyDescription.displayName = 'EmptyDescription'\n\n// ── EmptyContent ──\n\nconst EmptyContent = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex w-full max-w-sm flex-col items-center gap-4 mt-4',\n className\n )}\n {...props}\n />\n )\n }\n)\nEmptyContent.displayName = 'EmptyContent'\n\nexport {\n Empty,\n EmptyHeader,\n EmptyIcon,\n EmptyTitle,\n EmptyDescription,\n EmptyContent,\n}\nexport type { }","'use client'\n\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'\nimport { type HTMLAttributes, forwardRef, type ReactNode } from 'react'\nimport { cn } from '@/lib/utils'\n\n/* ──────────────────── DropdownMenu ──────────────────── */\n\nconst DropdownMenu = DropdownMenuPrimitive.Root\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\n\nconst DropdownMenuContent = forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 min-w-[9rem] overflow-hidden rounded-lg border p-1 shadow-md',\n 'bg-tollerud-noir-850 border-tollerud-border/30 text-tollerud-text-primary',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n 'data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2',\n 'data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n))\nDropdownMenuContent.displayName = 'DropdownMenuContent'\n\nconst DropdownMenuItem = forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-md px-2 py-1.5 text-sm outline-none',\n 'text-tollerud-text-secondary data-[highlighted]:text-tollerud-text-primary',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n 'data-[highlighted]:bg-tollerud-surface-raised',\n inset && 'pl-8',\n className\n )}\n {...props}\n />\n))\nDropdownMenuItem.displayName = 'DropdownMenuItem'\n\nconst DropdownMenuSeparator = forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-tollerud-border/30', className)}\n {...props}\n />\n))\nDropdownMenuSeparator.displayName = 'DropdownMenuSeparator'\n\nconst DropdownMenuLabel = forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn('px-2 py-1.5 text-xs font-semibold text-tollerud-text-muted', inset && 'pl-8', className)}\n {...props}\n />\n))\nDropdownMenuLabel.displayName = 'DropdownMenuLabel'\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuLabel,\n}","'use client'\n\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { type ComponentPropsWithoutRef, type ReactNode, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\n/* ──────────────────── Sheet (slide-in panel) ──────────────────── */\n\nexport type SheetSide = 'left' | 'right'\n\nexport interface SheetProps {\n open?: boolean\n onOpenChange?: (open: boolean) => void\n children: ReactNode\n}\n\nconst Sheet = ({ open, onOpenChange, children }: SheetProps) => (\n <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>\n {children}\n </DialogPrimitive.Root>\n)\n\nconst SheetTrigger = DialogPrimitive.Trigger\n\nconst SheetClose = DialogPrimitive.Close\n\ninterface SheetContentProps extends ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {\n side?: SheetSide\n}\n\nconst SheetOverlay = forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Overlay>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n 'fixed inset-0 z-50 bg-black/60 backdrop-blur-sm',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className\n )}\n {...props}\n />\n))\nSheetOverlay.displayName = 'SheetOverlay'\n\nconst SheetContent = forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Content>,\n SheetContentProps\n>(({ className, children, side = 'right', ...props }, ref) => (\n <SheetOverlay>\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'fixed z-50 gap-4 bg-tollerud-noir-900 border-tollerud-border/30 p-6 shadow-lg',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n side === 'right' && [\n 'inset-y-0 right-0 h-full w-full max-w-md border-l',\n 'data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right',\n ],\n side === 'left' && [\n 'inset-y-0 left-0 h-full w-full max-w-md border-r',\n 'data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left',\n ],\n className\n )}\n {...props}\n >\n {children}\n <SheetClose className=\"absolute right-4 top-4 rounded-sm opacity-70 hover:opacity-100 transition-opacity text-tollerud-text-muted hover:text-tollerud-text-primary\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M18 6 6 18\" /><path d=\"m6 6 12 12\" />\n </svg>\n <span className=\"sr-only\">Close</span>\n </SheetClose>\n </DialogPrimitive.Content>\n </SheetOverlay>\n))\nSheetContent.displayName = 'SheetContent'\n\nconst SheetHeader = ({ className, ...props }: { className?: string; children?: ReactNode }) => (\n <div className={cn('flex flex-col space-y-1.5 text-left', className)} {...props} />\n)\n\nconst SheetTitle = forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Title>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn('text-base font-semibold text-tollerud-text-primary', className)}\n {...props}\n />\n))\nSheetTitle.displayName = 'SheetTitle'\n\nconst SheetDescription = forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Description>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn('text-sm text-tollerud-text-secondary', className)}\n {...props}\n />\n))\nSheetDescription.displayName = 'SheetDescription'\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetTitle,\n SheetDescription,\n}","'use client'\n\nimport { useState, useMemo, forwardRef, type ReactNode } from 'react'\nimport { cn } from '@/lib/utils'\n\n/* ──────────────────── Sortable & Filterable Data Table ──────────────────── */\n\nexport interface Column<T> {\n key: string\n label: string\n sortable?: boolean\n filterable?: boolean\n align?: 'left' | 'center' | 'right'\n width?: string\n render?: (value: unknown, row: T) => ReactNode\n}\n\nexport interface DataTableProps<T extends Record<string, unknown>> {\n columns: Column<T>[]\n data: T[]\n /** Row key extractor — defaults to `row.id` or `row.key` */\n rowKey?: keyof T | ((row: T) => string | number)\n onRowClick?: (row: T) => void\n className?: string\n emptyMessage?: string\n}\n\ninterface DataTableInnerProps<T extends Record<string, unknown>> extends DataTableProps<T> {\n forwardedRef?: React.Ref<HTMLDivElement>\n}\n\nfunction DataTableInner<T extends Record<string, unknown>>({\n columns,\n data,\n rowKey,\n onRowClick,\n className,\n emptyMessage = 'No data',\n forwardedRef,\n}: DataTableInnerProps<T>) {\n const [sortKey, setSortKey] = useState<string | null>(null)\n const [sortDir, setSortDir] = useState<'asc' | 'desc'>('asc')\n const [filters, setFilters] = useState<Record<string, string>>({})\n\n const filtered = useMemo(() => {\n const activeFilters = Object.entries(filters).filter(([, v]) => v.trim() !== '')\n if (activeFilters.length === 0) return data\n\n return data.filter((row) =>\n activeFilters.every(([key, filterValue]) => {\n const cellValue = String(row[key] ?? '').toLowerCase()\n return cellValue.includes(filterValue.toLowerCase())\n })\n )\n }, [data, filters])\n\n const sorted = useMemo(() => {\n if (!sortKey) return filtered\n const col = columns.find((c) => c.key === sortKey)\n if (!col?.sortable) return filtered\n\n return [...filtered].sort((a, b) => {\n const aVal = a[sortKey]\n const bVal = b[sortKey]\n\n // Handle numbers vs strings\n if (typeof aVal === 'number' && typeof bVal === 'number') {\n return sortDir === 'asc' ? aVal - bVal : bVal - aVal\n }\n\n const aStr = String(aVal ?? '')\n const bStr = String(bVal ?? '')\n const cmp = aStr.localeCompare(bStr, 'nb', { numeric: true })\n return sortDir === 'asc' ? cmp : -cmp\n })\n }, [filtered, sortKey, sortDir, columns])\n\n const getRowKey = (row: T, i: number): string | number => {\n if (typeof rowKey === 'function') return rowKey(row)\n if (rowKey) return row[rowKey] as string | number\n return (row.id ?? row.key ?? i) as string | number\n }\n\n const toggleSort = (key: string) => {\n if (sortKey === key) {\n setSortDir((d) => (d === 'asc' ? 'desc' : 'asc'))\n } else {\n setSortKey(key)\n setSortDir('asc')\n }\n }\n\n const updateFilter = (key: string, value: string) => {\n setFilters((prev) => {\n const next = { ...prev }\n if (value.trim() === '') {\n delete next[key]\n } else {\n next[key] = value\n }\n return next\n })\n }\n\n const hasActiveFilters = Object.values(filters).some((v) => v.trim() !== '')\n const filterableColumns = columns.filter((c) => c.filterable)\n\n return (\n <div ref={forwardedRef} className={cn('overflow-x-auto rounded-lg border border-tollerud-border/30', className)}>\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b border-tollerud-border/30 bg-tollerud-noir-900\">\n {columns.map((col) => (\n <th\n key={col.key}\n className={cn(\n 'px-3 py-2.5 text-xs font-semibold text-tollerud-text-muted uppercase tracking-wider',\n col.sortable && 'cursor-pointer select-none hover:text-tollerud-text-primary transition-colors',\n col.align === 'right' && 'text-right',\n col.align === 'center' && 'text-center',\n )}\n style={col.width ? { width: col.width } : undefined}\n onClick={() => col.sortable && toggleSort(col.key)}\n >\n <span className=\"inline-flex items-center gap-1.5\">\n {col.label}\n {col.sortable && sortKey === col.key && (\n <span className=\"text-tollerud-accent\">{sortDir === 'asc' ? '↑' : '↓'}</span>\n )}\n {col.sortable && sortKey !== col.key && (\n <span className=\"text-tollerud-text-muted/30\">↕</span>\n )}\n {col.filterable && (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cn(\n 'opacity-40',\n filters[col.key] && 'opacity-100 text-tollerud-yellow'\n )}\n >\n <path d=\"M4 4h16v2.172a2 2 0 0 1-.586 1.414L15 12v7l-6 2v-8.5L4.52 7.53A2 2 0 0 1 4 6.16V4z\" />\n </svg>\n )}\n </span>\n </th>\n ))}\n </tr>\n {/* Filter row — only if at least one column is filterable */}\n {filterableColumns.length > 0 && (\n <tr className=\"border-b border-tollerud-border/20\">\n {columns.map((col) => (\n <th\n key={`filter-${col.key}`}\n className={cn(\n 'px-1.5 py-1',\n col.align === 'right' && 'text-right',\n col.align === 'center' && 'text-center',\n )}\n >\n {col.filterable ? (\n <input\n type=\"text\"\n placeholder={`Filter ${col.label.toLowerCase()}…`}\n value={filters[col.key] ?? ''}\n onChange={(e) => updateFilter(col.key, e.target.value)}\n className={cn(\n 'w-full px-2 py-1 text-xs rounded border transition-colors outline-none',\n 'bg-tollerud-noir-900/50 border-tollerud-border/20 text-tollerud-text-primary placeholder:text-tollerud-text-muted/40',\n 'focus:border-tollerud-yellow/40 focus:ring-1 focus:ring-tollerud-yellow/20',\n )}\n />\n ) : null}\n </th>\n ))}\n </tr>\n )}\n </thead>\n <tbody>\n {sorted.length === 0 ? (\n <tr>\n <td\n colSpan={columns.length}\n className=\"px-3 py-8 text-center text-sm text-tollerud-text-muted\"\n >\n {hasActiveFilters ? 'No matching rows' : emptyMessage}\n </td>\n </tr>\n ) : (\n sorted.map((row, i) => (\n <tr\n key={getRowKey(row, i)}\n className={cn(\n 'border-b border-tollerud-border/20 transition-colors',\n onRowClick && 'cursor-pointer hover:bg-tollerud-surface-raised/50',\n )}\n onClick={() => onRowClick?.(row)}\n >\n {columns.map((col) => {\n const value = row[col.key]\n return (\n <td\n key={col.key}\n className={cn(\n 'px-3 py-2.5 text-tollerud-text-secondary',\n col.align === 'right' && 'text-right',\n col.align === 'center' && 'text-center',\n 'font-mono text-xs',\n )}\n >\n {col.render ? col.render(value, row) : String(value ?? '—')}\n </td>\n )\n })}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n )\n}\n\nconst DataTable = forwardRef(<T extends Record<string, unknown>>(\n props: DataTableProps<T>,\n ref: React.Ref<HTMLDivElement>\n) => <DataTableInner {...props} forwardedRef={ref} />)\n\nDataTable.displayName = 'DataTable'\n\nexport { DataTable }","'use client'\n\nimport { useRef, useState, type ReactNode } from 'react'\nimport { cn } from '@/lib/utils'\n\n/* ──────────────────── GlowCard (cursor-follow glow wrapper) ──────────────────── */\n\nexport interface GlowCardProps {\n children: ReactNode\n className?: string\n /** Color of the glow. Default: accent yellow */\n glowColor?: string\n /** Glow intensity (0–1). Default: 0.15 */\n intensity?: number\n}\n\nfunction GlowCard({\n children,\n className,\n glowColor = 'var(--tollerud-accent, #FFFF00)',\n intensity = 0.15,\n}: GlowCardProps) {\n const ref = useRef<HTMLDivElement>(null)\n const [pos, setPos] = useState({ x: 0, y: 0 })\n const [isHovered, setIsHovered] = useState(false)\n\n const handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {\n if (!ref.current) return\n const rect = ref.current.getBoundingClientRect()\n setPos({\n x: ((e.clientX - rect.left) / rect.width) * 100,\n y: ((e.clientY - rect.top) / rect.height) * 100,\n })\n }\n\n return (\n <div\n ref={ref}\n className={cn('relative overflow-hidden', className)}\n onMouseMove={handleMouseMove}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {/* Follow-cursor glow */}\n <div\n className=\"pointer-events-none absolute inset-0 transition-opacity duration-300\"\n style={{\n opacity: isHovered ? 1 : 0,\n background: `radial-gradient(600px circle at ${pos.x}% ${pos.y}%, ${glowColor} ${intensity * 100}%, transparent 70%)`,\n }}\n />\n {/* Content */}\n <div className=\"relative z-10\">{children}</div>\n </div>\n )\n}\n\nexport { GlowCard }\nexport default GlowCard","'use client'\n\nimport { type ReactNode } from 'react'\nimport { cn } from '@/lib/utils'\nimport type { HostCardProps } from './HostCard'\nimport type { StatCardProps } from './StatCard'\nimport type { ServiceHealthCardProps } from './ServiceHealthCard'\nimport type { IncidentCardProps, IncidentSeverity } from './IncidentCard'\nimport type { BackupJob } from './BackupStatusPanel'\n\n/* ──────────────────── Bento Grid Dashboard Template ──────────────────── */\n\nexport interface BentoDashboardProps {\n title: string\n hosts?: HostCardProps[]\n metrics?: StatCardProps[]\n services?: ServiceHealthCardProps[]\n incidents?: { title: string; severity: IncidentSeverity; timestamp: string; service: string; description?: string; acknowledged?: boolean }[]\n backupJobs?: BackupJob[]\n className?: string\n /** Render the incident list footer */\n renderIncidentFooter?: () => ReactNode\n}\n\nexport function BentoDashboard({\n title,\n hosts = [],\n metrics = [],\n services = [],\n incidents = [],\n className,\n}: BentoDashboardProps) {\n return (\n <div className={cn('space-y-4', className)}>\n {/* Title bar */}\n <div className=\"flex items-center justify-between\">\n <div>\n <h2 className=\"text-lg font-semibold text-tollerud-text-primary\">{title}</h2>\n <p className=\"text-xs text-tollerud-text-muted\">\n {hosts.length} hosts · {services.length} services\n {incidents.length > 0 && ` · ${incidents.length} active incident${incidents.length > 1 ? 's' : ''}`}\n </p>\n </div>\n </div>\n\n {/* Row 1: Host cards — bento asymmetric */}\n {hosts.length > 0 && (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n {/* First host spans wider */}\n <div className=\"md:col-span-2 lg:col-span-1\">\n <HostCardComponent host={hosts[0]} />\n </div>\n {/* Remaining hosts in the second column area */}\n <div className=\"grid grid-cols-1 gap-3 md:col-span-2 lg:col-span-1\">\n {hosts.slice(1).map((h, i) => (\n <HostCardComponent key={h.hostname ?? i} host={h} />\n ))}\n </div>\n </div>\n )}\n\n {/* Row 2: Metrics + Services — side by side */}\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-3\">\n {/* Metrics grid — 2 columns within */}\n {metrics.length > 0 && (\n <div className=\"lg:col-span-2\">\n <SectionLabel>Metrics</SectionLabel>\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-2\">\n {metrics.map((m, i) => (\n <StatCardComponent key={m.label ?? i} stat={m} />\n ))}\n </div>\n </div>\n )}\n\n {/* Services list */}\n {services.length > 0 && (\n <div>\n <SectionLabel>Services</SectionLabel>\n <div className=\"space-y-2\">\n {services.slice(0, 4).map((s, i) => (\n <div key={s.service ?? i} className=\"rounded-lg border border-tollerud-border/20 bg-tollerud-surface p-3\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm font-medium text-tollerud-text-primary\">{s.service}</span>\n <span className={cn(\n 'text-xs px-1.5 py-0.5 rounded-full font-medium',\n s.status === 'online' && 'text-tollerud-accent bg-tollerud-accent/10',\n s.status === 'warning' && 'text-tollerud-warning bg-tollerud-warning/10',\n s.status === 'offline' && 'text-tollerud-error bg-tollerud-error/10',\n s.status === 'idle' && 'text-tollerud-text-muted bg-tollerud-noir-800',\n )}>\n {s.status}\n </span>\n </div>\n {s.responseTime && (\n <p className=\"text-xs text-tollerud-text-muted mt-1\">{s.responseTime} response</p>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n\n {/* Row 3: Incidents — full width */}\n {incidents.length > 0 && (\n <div>\n <SectionLabel>Recent Incidents</SectionLabel>\n <div className=\"space-y-1.5\">\n {incidents.slice(0, 4).map((inc, i) => (\n <IncidentCardItem key={inc.title + i} incident={inc} />\n ))}\n </div>\n </div>\n )}\n </div>\n )\n}\n\n/* ────────── Internal sub-components for rendering ────────── */\n\nfunction SectionLabel({ children }: { children: ReactNode }) {\n return (\n <p className=\"text-xs font-semibold text-tollerud-text-muted uppercase tracking-wider mb-2\">{children}</p>\n )\n}\n\nfunction HostCardComponent({ host }: { host: HostCardProps }) {\n return (\n <div className={cn(\n 'rounded-xl border p-4',\n host.status === 'online' ? 'border-tollerud-border/30 bg-tollerud-surface' :\n host.status === 'warning' ? 'border-tollerud-warning/30 bg-tollerud-warning/5' :\n 'border-tollerud-border/20 bg-tollerud-surface opacity-70'\n )}>\n <div className=\"flex items-center justify-between mb-3\">\n <div className=\"flex items-center gap-2\">\n <StatusDotComp status={host.status as 'online' | 'offline' | 'warning'} />\n <span className=\"text-sm font-semibold text-tollerud-text-primary\">{host.hostname}</span>\n </div>\n <span className=\"text-xs text-tollerud-text-muted font-mono\">{host.ip}</span>\n </div>\n <div className=\"grid grid-cols-2 gap-2 text-xs\">\n {host.cpu && <MetricBadge label=\"CPU\" value={host.cpu} />}\n {host.memory && <MetricBadge label=\"Mem\" value={host.memory} />}\n {host.disk && <MetricBadge label=\"Disk\" value={host.disk} />}\n {host.uptime && <MetricBadge label=\"Up\" value={host.uptime} />}\n </div>\n </div>\n )\n}\n\nfunction StatCardComponent({ stat }: { stat: StatCardProps }) {\n return (\n <div className=\"rounded-lg border border-tollerud-border/20 bg-tollerud-surface p-3\">\n <p className=\"text-xs text-tollerud-text-muted\">{stat.label}</p>\n <p className=\"text-lg font-semibold text-tollerud-text-primary mt-0.5\">{stat.value}</p>\n {stat.change && (\n <span className={cn(\n 'text-xs font-medium',\n stat.change.direction === 'up' ? 'text-tollerud-accent' : 'text-tollerud-error'\n )}>\n {stat.change.value}\n </span>\n )}\n </div>\n )\n}\n\nfunction IncidentCardItem({ incident }: { incident: { title: string; severity: IncidentSeverity; timestamp: string; service: string; description?: string; acknowledged?: boolean } }) {\n return (\n <div className={cn(\n 'flex items-start gap-3 rounded-lg border p-3',\n incident.acknowledged ? 'border-tollerud-border/10 bg-tollerud-noir-900/50 opacity-60' : 'border-tollerud-border/20 bg-tollerud-surface'\n )}>\n <SeverityDot severity={incident.severity} />\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium text-tollerud-text-primary truncate\">{incident.title}</span>\n {incident.acknowledged && (\n <span className=\"text-xs text-tollerud-text-muted\">(acknowledged)</span>\n )}\n </div>\n <div className=\"flex items-center gap-2 text-xs text-tollerud-text-muted mt-0.5\">\n <span>{incident.service}</span>\n <span>·</span>\n <span>{incident.timestamp}</span>\n </div>\n {incident.description && (\n <p className=\"text-xs text-tollerud-text-secondary mt-1\">{incident.description}</p>\n )}\n </div>\n </div>\n )\n}\n\nfunction StatusDotComp({ status }: { status: 'online' | 'offline' | 'warning' }) {\n return (\n <span className={cn(\n 'inline-block w-2 h-2 rounded-full',\n status === 'online' && 'bg-tollerud-accent shadow-[0_0_4px_var(--tollerud-accent)]',\n status === 'warning' && 'bg-tollerud-warning',\n status === 'offline' && 'bg-tollerud-error',\n )} />\n )\n}\n\nfunction SeverityDot({ severity }: { severity: IncidentSeverity }) {\n return (\n <span className={cn(\n 'inline-block w-2 h-2 rounded-full mt-1 shrink-0',\n severity === 'critical' && 'bg-tollerud-error shadow-[0_0_4px_var(--tollerud-error)]',\n severity === 'high' && 'bg-tollerud-warning',\n severity === 'medium' && 'bg-tollerud-accent',\n severity === 'low' && 'bg-tollerud-text-muted',\n severity === 'info' && 'bg-tollerud-info',\n )} />\n )\n}\n\nfunction MetricBadge({ label, value }: { label: string; value: string }) {\n return (\n <div className=\"rounded bg-tollerud-noir-800 px-2 py-1.5\">\n <span className=\"text-tollerud-text-muted\">{label}</span>\n <span className=\"float-right text-tollerud-text-primary font-mono\">{value}</span>\n </div>\n )\n}\n\nexport default BentoDashboard"]}
1
+ {"version":3,"sources":["../lib/utils.ts","../components/Button.tsx","../components/Alert.tsx","../components/Card.tsx","../components/Badge.tsx","../components/StatusDot.tsx","../components/Input.tsx","../components/CodeBlock.tsx","../components/StatCard.tsx","../components/Container.tsx","../components/NoirGlowBackground.tsx","../components/Kbd.tsx","../components/ActionRow.tsx","../components/CommandMenu.tsx","../components/ServiceHealthCard.tsx","../components/HostCard.tsx","../components/DockerStackCard.tsx","../components/IncidentCard.tsx","../components/ApprovalCard.tsx","../components/BackupStatusPanel.tsx","../components/Timeline.tsx","../components/AlertInbox.tsx","../components/RollbackPlan.tsx","../components/ActionDiff.tsx","../components/LogViewer.tsx","../components/Textarea.tsx","../components/Select.tsx","../components/Checkbox.tsx","../components/Switch.tsx","../components/RadioGroup.tsx","../components/Footer.tsx","../components/Dialog.tsx","../components/Tooltip.tsx","../components/Tabs.tsx","../components/Skeleton.tsx","../components/Progress.tsx","../components/Toaster.tsx","../components/Empty.tsx","../components/DropdownMenu.tsx","../components/Sheet.tsx","../components/DataTable.tsx","../components/GlowCard.tsx","../components/BentoDashboard.tsx","../components/Divider.tsx","../components/Pill.tsx","../components/Avatar.tsx","../components/Breadcrumb.tsx","../components/Pagination.tsx","../components/Segmented.tsx","../components/Stepper.tsx","../components/Panel.tsx","../components/Meter.tsx","../components/FormRow.tsx","../components/PricingCard.tsx","../components/Accordion.tsx","../components/Slider.tsx","../components/PasswordInput.tsx","../components/Combobox.tsx","../components/DatePicker.tsx","../components/FileUpload.tsx","../components/TagInput.tsx"],"names":["twMerge","clsx","forwardRef","Slot","jsx","jsxs","motion","useState","useCallback","lazy","Fragment","Suspense","useRef","useEffect","useMemo","useId","DialogPrimitive","React","X","TooltipPrimitive","React2","TabsPrimitive","React3","React4","ProgressPrimitive","SonnerToaster","DropdownMenuPrimitive","DialogPrimitive2","ChevronRight","ChevronLeft","MoreHorizontal","Check","createContext","useContext","ChevronDown","EyeOff","Eye","CalendarIcon","Upload","FileIcon"],"mappings":"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","file":"index.cjs","sourcesContent":["import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import { type ButtonHTMLAttributes, forwardRef } from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { cn } from '@/lib/utils'\n\nconst variants = {\n primary: 'bg-tollerud-yellow text-tollerud-black border-tollerud-yellow hover:bg-tollerud-yellow hover:shadow-tollerud-glow',\n secondary: 'bg-transparent text-tollerud-text-primary border-tollerud-border hover:border-tollerud-text-secondary hover:bg-tollerud-surface-hover',\n ghost: 'bg-transparent text-tollerud-text-secondary border-transparent hover:text-tollerud-text-primary hover:bg-tollerud-surface-hover',\n destructive: 'bg-tollerud-error text-white border-tollerud-error hover:shadow-[0_0_12px_rgba(239,68,68,0.3)]',\n terminal: 'font-mono text-tollerud-yellow border-[rgba(255,255,0,0.25)] bg-transparent before:content-[\"❯_\"] before:opacity-70 hover:border-tollerud-yellow hover:shadow-tollerud-glow hover:bg-[rgba(255,255,0,0.05)]',\n} as const\n\nconst sizes = {\n sm: 'px-3 py-1 text-sm',\n md: 'px-4 py-2 text-base',\n lg: 'px-6 py-3 text-lg',\n} as const\n\nexport interface ButtonVariantProps {\n variant?: keyof typeof variants\n size?: keyof typeof sizes\n}\n\nexport function buttonVariants({ variant = 'secondary', size = 'md', className }: ButtonVariantProps & { className?: string } = {}) {\n return cn(\n 'inline-flex items-center justify-center gap-2 font-semibold rounded transition-all duration-[150ms] focus-visible:outline-2 focus-visible:outline-tollerud-yellow focus-visible:outline-offset-2',\n 'border cursor-pointer',\n 'disabled:opacity-50 disabled:pointer-events-none',\n variants[variant],\n sizes[size],\n className\n )\n}\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>, ButtonVariantProps {\n /** Render as the single child element (e.g. a `<Link>`) instead of a `<button>`, merging props and styles onto it. */\n asChild?: boolean\n}\n\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant = 'secondary', size = 'md', asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button'\n return (\n <Comp\n ref={ref}\n className={buttonVariants({ variant, size, className })}\n {...props}\n />\n )\n }\n)\nButton.displayName = 'Button'\n\nexport { Button }\n","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\nconst toneStyles = {\n default: { wrapper: 'border-tollerud-border bg-tollerud-surface-raised', icon: 'text-tollerud-text-muted' },\n accent: { wrapper: 'border-tollerud-yellow/30 bg-tollerud-yellow/5', icon: 'text-tollerud-yellow' },\n info: { wrapper: 'border-blue-500/30 bg-blue-500/5', icon: 'text-blue-400' },\n success: { wrapper: 'border-green-500/30 bg-green-500/5', icon: 'text-green-400' },\n error: { wrapper: 'border-red-500/30 bg-red-500/5', icon: 'text-red-400' },\n} as const\n\nexport interface AlertProps extends HTMLAttributes<HTMLDivElement> {\n tone?: keyof typeof toneStyles\n title?: string\n icon?: React.ReactNode\n}\n\nconst Alert = forwardRef<HTMLDivElement, AlertProps>(\n ({ className, tone = 'default', title, icon, children, ...props }, ref) => {\n const styles = toneStyles[tone]\n return (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(\n 'flex gap-3 rounded-md border p-4',\n styles.wrapper,\n className\n )}\n {...props}\n >\n {icon && (\n <span className={cn('mt-0.5 flex-shrink-0 w-[18px] h-[18px]', styles.icon)}>\n {icon}\n </span>\n )}\n <div className=\"min-w-0\">\n {title && (\n <p className=\"text-sm font-semibold text-tollerud-text-primary leading-snug\">\n {title}\n </p>\n )}\n {children && (\n <p className={cn('text-sm text-tollerud-text-secondary leading-relaxed', title && 'mt-1')}>\n {children}\n </p>\n )}\n </div>\n </div>\n )\n }\n)\nAlert.displayName = 'Alert'\n\nexport { Alert }\n","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n accent?: boolean\n density?: 'comfortable' | 'compact'\n}\n\nconst Card = forwardRef<HTMLDivElement, CardProps>(\n ({ className, accent, density, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-density={density ?? undefined}\n className={cn(\n 'rounded-lg border bg-tollerud-surface-raised p-6 transition-[border-color] duration-[150ms]',\n accent ? 'border-tollerud-yellow/25' : 'border-tollerud-border',\n 'hover:border-tollerud-noir-500',\n className\n )}\n {...props}\n />\n )\n }\n)\nCard.displayName = 'Card'\n\nexport { Card }\n","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\nconst badgeVariants = {\n default: 'bg-tollerud-noir-700 text-tollerud-text-secondary',\n accent: 'bg-tollerud-yellow/15 text-tollerud-yellow',\n success: 'bg-tollerud-success/15 text-tollerud-success',\n error: 'bg-tollerud-error/15 text-tollerud-error',\n info: 'bg-tollerud-info/15 text-tollerud-info',\n warning: 'bg-tollerud-yellow/15 text-tollerud-warning',\n} as const\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: keyof typeof badgeVariants\n}\n\nconst Badge = forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant = 'default', ...props }, ref) => {\n return (\n <span\n ref={ref}\n className={cn(\n 'inline-flex items-center px-2 py-0.5 text-xs font-medium rounded',\n 'tracking-wide',\n badgeVariants[variant],\n className\n )}\n {...props}\n />\n )\n }\n)\nBadge.displayName = 'Badge'\n\nexport { Badge }\n","'use client'\n\nimport { type HTMLAttributes, forwardRef } from 'react'\nimport { motion } from 'framer-motion'\nimport { cn } from '@/lib/utils'\n\ntype Status = 'online' | 'offline' | 'warning' | 'idle'\n\nconst statusColors: Record<Status, string> = {\n online: 'bg-tollerud-success',\n offline: 'bg-tollerud-error',\n warning: 'bg-tollerud-yellow',\n idle: 'bg-tollerud-noir-400',\n}\n\nconst pulseColors: Partial<Record<Status, string>> = {\n online: 'rgba(34,197,94,0.5)',\n warning: 'rgba(232,213,0,0.45)',\n offline: 'rgba(239,68,68,0.5)',\n}\n\nconst animationKeyframes = `\n@keyframes tollerud-dot-pulse {\n 0%, 100% { box-shadow: 0 0 0 0 var(--pulse-color, rgba(34,197,94,0.5)); }\n 50% { box-shadow: 0 0 0 5px var(--pulse-color, rgba(34,197,94,0)); }\n}\n`\n\nexport interface StatusDotProps extends HTMLAttributes<HTMLSpanElement> {\n status?: Status\n label?: string\n /** Disable the pulsing animation */\n noPulse?: boolean\n}\n\nconst StatusDot = forwardRef<HTMLSpanElement, StatusDotProps>(\n ({ className, status = 'idle', label, noPulse, ...props }, ref) => {\n const shouldPulse = !noPulse && (status === 'online' || status === 'warning' || status === 'offline')\n const pulseColor = pulseColors[status]\n\n return (\n <span\n ref={ref}\n className={cn('inline-flex items-center gap-1.5 text-xs font-medium', className)}\n {...props}\n >\n <style>{animationKeyframes}</style>\n <motion.span\n layout\n key={status}\n animate={{\n scaleX: [1, 1.6, 1],\n scaleY: [1, 0.6, 1],\n }}\n transition={{\n duration: 0.4,\n ease: 'easeOut',\n times: [0, 0.3, 1],\n }}\n className={cn(\n 'inline-block w-2 h-2 rounded-full',\n statusColors[status],\n shouldPulse && 'animate-tollerud-dot-pulse'\n )}\n style={{\n ...(shouldPulse && pulseColor ? ({ '--pulse-color': pulseColor } as React.CSSProperties) : {}),\n animation: shouldPulse ? 'tollerud-dot-pulse 2s ease-in-out infinite' : undefined,\n } as React.CSSProperties}\n />\n {label && <span>{label}</span>}\n </span>\n )\n }\n)\nStatusDot.displayName = 'StatusDot'\n\nexport { StatusDot }\nexport type { Status }","import { type InputHTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n label?: string\n error?: string\n}\n\nconst Input = forwardRef<HTMLInputElement, InputProps>(\n ({ className, label, error, id, ...props }, ref) => {\n return (\n <div className=\"flex flex-col gap-1\">\n {label && (\n <label htmlFor={id} className=\"text-xs font-medium text-tollerud-text-muted\">\n {label}\n </label>\n )}\n <input\n ref={ref}\n id={id}\n className={cn(\n 'font-sans text-base px-3 py-2 rounded',\n 'bg-tollerud-surface-raised border',\n 'text-tollerud-text-primary',\n 'placeholder:text-tollerud-text-muted',\n 'transition-[border-color] duration-[150ms]',\n 'focus:outline-none focus:border-tollerud-yellow focus:shadow-[0_0_0_1px_#E8D500]',\n error ? 'border-tollerud-error' : 'border-tollerud-border',\n className\n )}\n {...props}\n />\n {error && (\n <p className=\"text-xs text-tollerud-error mt-0.5\">{error}</p>\n )}\n </div>\n )\n }\n)\nInput.displayName = 'Input'\n\nexport { Input }\n","'use client'\n\nimport { type HTMLAttributes, forwardRef, useState, useCallback } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface CodeBlockProps extends HTMLAttributes<HTMLPreElement> {\n /** Optional string content to render inside <code> tags */\n code?: string\n /** When true, prepends a prompt symbol ($) before text content */\n promptPrefix?: boolean\n /** When false, hides the copy-to-clipboard button (default: true) */\n showCopy?: boolean\n}\n\nconst CodeBlock = forwardRef<HTMLPreElement, CodeBlockProps>(\n ({ className, children, code, promptPrefix, showCopy = true, ...props }, ref) => {\n const [copied, setCopied] = useState(false)\n\n const content = code ? (\n <code className=\"text-tollerud-noir-200\">{code}</code>\n ) : (\n children\n )\n\n const handleCopy = useCallback(async () => {\n const text = code ?? (typeof children === 'string' ? children : '')\n if (!text) return\n\n // Try clipboard API first, fallback to execCommand for broader compat\n try {\n await navigator.clipboard.writeText(text)\n } catch {\n const textarea = document.createElement('textarea')\n textarea.value = text\n textarea.style.position = 'fixed'\n textarea.style.opacity = '0'\n document.body.appendChild(textarea)\n textarea.select()\n document.execCommand('copy')\n document.body.removeChild(textarea)\n }\n\n setCopied(true)\n setTimeout(() => setCopied(false), 1500)\n }, [code, children])\n\n return (\n <div className=\"relative group\">\n <pre\n ref={ref}\n className={cn(\n 'font-mono text-sm leading-relaxed overflow-x-auto rounded border p-4',\n 'bg-tollerud-noir-900 border-tollerud-border text-tollerud-noir-200',\n className\n )}\n {...props}\n >\n {content}\n </pre>\n {showCopy && (\n <button\n onClick={handleCopy}\n className={cn(\n 'absolute top-2 right-2 px-2 py-1 rounded text-xs font-medium',\n 'opacity-0 group-hover:opacity-100 transition-all',\n 'bg-tollerud-noir-800 border border-tollerud-border/30 text-tollerud-text-muted',\n 'hover:bg-tollerud-surface-raised hover:text-tollerud-text-primary',\n copied && 'opacity-100 bg-tollerud-success/15 text-tollerud-success border-tollerud-success/40'\n )}\n aria-label={copied ? 'Copied' : 'Copy code'}\n >\n {copied ? '✓ Copied' : 'Copy'}\n </button>\n )}\n </div>\n )\n }\n)\nCodeBlock.displayName = 'CodeBlock'\n\nexport { CodeBlock }\n","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface StatCardProps extends HTMLAttributes<HTMLDivElement> {\n label: string\n value: string | number\n change?: { value: string; direction: 'up' | 'down' }\n accent?: boolean\n}\n\nconst StatCard = forwardRef<HTMLDivElement, StatCardProps>(\n ({ className, label, value, change, accent, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'group relative rounded-lg border p-4',\n 'bg-tollerud-surface-raised',\n 'transition-all duration-200 ease-out',\n 'hover:translate-y-[-1px]',\n accent\n ? 'border-tollerud-yellow/20 hover:border-tollerud-yellow/40 hover:shadow-[0_0_20px_rgba(232,213,0,0.08)]'\n : 'border-tollerud-border hover:border-tollerud-noir-500 hover:shadow-[0_4px_12px_rgba(0,0,0,0.3)]',\n className\n )}\n {...props}\n >\n {/* Accent top bar */}\n {accent && (\n <span className=\"absolute top-0 left-4 right-4 h-px bg-gradient-to-r from-transparent via-tollerud-yellow/60 to-transparent\" />\n )}\n\n <div className=\"flex items-start justify-between gap-2\">\n <p className=\"text-xs font-medium uppercase tracking-wider text-tollerud-text-muted\">\n {label}\n </p>\n {change && (\n <span\n className={cn(\n 'inline-flex items-center gap-0.5 text-[11px] font-semibold whitespace-nowrap',\n change.direction === 'up' ? 'text-tollerud-success' : 'text-tollerud-error'\n )}\n >\n <svg\n className={cn(\n 'w-3 h-3',\n change.direction === 'down' && 'rotate-180'\n )}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M12 5v14M5 12l7 7 7-7\" />\n </svg>\n {change.value}\n </span>\n )}\n </div>\n\n <p\n className={cn(\n 'text-2xl font-bold tracking-tight mt-1',\n accent ? 'text-tollerud-yellow' : 'text-tollerud-text-primary'\n )}\n >\n {value}\n </p>\n </div>\n )\n }\n)\nStatCard.displayName = 'StatCard'\n\nexport { StatCard }","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface ContainerProps extends HTMLAttributes<HTMLDivElement> {\n as?: 'div' | 'section' | 'article' | 'main' | 'header' | 'footer'\n}\n\nconst Container = forwardRef<HTMLDivElement, ContainerProps>(\n ({ className, as: Tag = 'div', ...props }, ref) => {\n return (\n <Tag\n ref={ref}\n className={cn('mx-auto w-full max-w-[1100px] px-6', className)}\n {...props}\n />\n )\n }\n)\nContainer.displayName = 'Container'\n\nexport { Container }\n","\"use client\"\n\nimport { lazy, Suspense, type CSSProperties } from \"react\"\n\nconst GrainGradient = lazy(() =>\n import(\"@paper-design/shaders-react\").then((module) => ({\n default: module.GrainGradient,\n }))\n)\n\ntype ShaderShape = \"corners\" | \"wave\" | \"dots\" | \"truchet\" | \"ripple\" | \"blob\" | \"sphere\"\ntype Intensity = \"subtle\" | \"medium\" | \"loud\"\ntype Speed = \"still\" | \"slow\" | \"medium\" | \"fast\"\ntype Grain = \"none\" | \"soft\" | \"high\"\n\nexport interface NoirGlowBackgroundProps {\n /** Extra class names for the outer positioning wrapper. */\n className?: string\n /** Inline style for the outer positioning wrapper. */\n style?: CSSProperties\n /** Canvas/WebGL shape. `corners` matches Tollerud.no. */\n shape?: ShaderShape\n /** Visual strength of the yellow glow. */\n intensity?: Intensity\n /** Ambient animation speed. */\n speed?: Speed\n /** Shader grain/noise amount. */\n grain?: Grain\n /** Softness/falloff of the glow blooms. */\n softness?: number\n /** Background color behind the glow. */\n colorBack?: string\n /** Glow colors. Defaults to the Tollerud/Tia yellow ramp. */\n colors?: string[]\n /** Whether to render a readable center vignette on top of the shader. */\n preserveCenter?: boolean\n /** Add the grain/noise CSS overlay. */\n noiseOverlay?: boolean\n /** Prefer the CSS fallback even if shaders are available. Useful for docs/static contexts. */\n forceCssFallback?: boolean\n /** Disable pointer events so content above remains clickable. */\n inert?: boolean\n}\n\nconst intensityMap: Record<Intensity, number> = {\n subtle: 0.24,\n medium: 0.45,\n loud: 0.68,\n}\n\nconst speedMap: Record<Speed, number> = {\n still: 0,\n slow: 0.45,\n medium: 1,\n fast: 1.8,\n}\n\nconst grainMap: Record<Grain, number> = {\n none: 0,\n soft: 0.12,\n high: 0.28,\n}\n\nfunction cx(...classes: Array<string | false | null | undefined>) {\n return classes.filter(Boolean).join(\" \")\n}\n\nfunction CssFallback({ preserveCenter = true, noiseOverlay = true }: Pick<NoirGlowBackgroundProps, \"preserveCenter\" | \"noiseOverlay\">) {\n return (\n <>\n <div className=\"tollerud-noir-glow-bg\" aria-hidden=\"true\" />\n {preserveCenter && <div className=\"tollerud-noir-glow-vignette\" aria-hidden=\"true\" />}\n {noiseOverlay && <div className=\"tollerud-noir-noise\" aria-hidden=\"true\" />}\n </>\n )\n}\n\n/**\n * NoirGlowBackground\n *\n * Tia/Tollerud signature background primitive. The defaults replicate\n * MathiasOki/tollerud-landing's `GradientBackground` component.\n *\n * Install dependency in consuming Next.js apps:\n * npm install @paper-design/shaders-react\n *\n * The CSS fallback classes live in `globals.css` and are used during Suspense,\n * reduced-motion contexts, or when `forceCssFallback` is true.\n */\nexport function NoirGlowBackground({\n className,\n style,\n shape = \"corners\",\n intensity = \"medium\",\n speed = \"medium\",\n grain = \"none\",\n softness = 0.76,\n colorBack = \"hsl(0, 0%, 0%)\",\n colors = [\"hsl(54, 85%, 66%)\", \"hsl(56, 100%, 80%)\", \"hsl(56, 100%, 50%)\"],\n preserveCenter = false,\n noiseOverlay = false,\n forceCssFallback = false,\n inert = true,\n}: NoirGlowBackgroundProps) {\n const wrapperClassName = cx(\n \"tollerud-noir-glow-root absolute inset-0 z-0 overflow-hidden\",\n inert && \"pointer-events-none\",\n className\n )\n\n if (forceCssFallback) {\n return (\n <div className={wrapperClassName} style={style} aria-hidden=\"true\">\n <CssFallback preserveCenter={preserveCenter} noiseOverlay={noiseOverlay} />\n </div>\n )\n }\n\n return (\n <div className={wrapperClassName} style={style} aria-hidden=\"true\">\n <Suspense fallback={<CssFallback preserveCenter={preserveCenter} noiseOverlay={noiseOverlay} />}>\n <GrainGradient\n style={{ height: \"100%\", width: \"100%\" }}\n colorBack={colorBack}\n softness={softness}\n intensity={intensityMap[intensity]}\n noise={grainMap[grain]}\n shape={shape}\n offsetX={0}\n offsetY={0}\n scale={1}\n rotation={0}\n speed={speedMap[speed]}\n colors={colors}\n />\n </Suspense>\n {preserveCenter && <div className=\"tollerud-noir-glow-vignette\" aria-hidden=\"true\" />}\n {noiseOverlay && <div className=\"tollerud-noir-noise\" aria-hidden=\"true\" />}\n </div>\n )\n}\n","\"use client\"\n\nimport { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface KbdProps extends HTMLAttributes<HTMLSpanElement> {\n /**\n * The keys to display. Separate by + for chords.\n * @example \"⌘K\", \"⌘⇧S\", \"⌘K\", \"Esc\"\n */\n keys: string | string[]\n /** Small variant for inline use */\n size?: 'sm' | 'md'\n}\n\n/**\n * Keyboard shortcut chip — inspired by Raycast shortcut badges.\n *\n * ```tsx\n * <Kbd keys=\"⌘K\" />\n * <Kbd keys={[\"⌘\", \"⇧\", \"S\"]} />\n * <Kbd keys=\"Esc\" size=\"sm\" />\n * ```\n */\nconst Kbd = forwardRef<HTMLSpanElement, KbdProps>(\n ({ className, keys, size = 'md', ...props }, ref) => {\n const keyArray = typeof keys === 'string' ? [keys] : keys\n\n return (\n <span\n ref={ref}\n className={cn(\n 'tollerud-kbd',\n size === 'sm' && 'tollerud-kbd--sm',\n className\n )}\n {...props}\n >\n {keyArray.map((key, i) => (\n <span key={i} className=\"tollerud-kbd__key\">\n {key}\n </span>\n ))}\n </span>\n )\n }\n)\nKbd.displayName = 'Kbd'\n\nexport { Kbd }","\"use client\"\n\nimport { type ButtonHTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\nimport { Kbd } from './Kbd'\n\nexport interface ActionItem {\n /** Unique ID */\n id: string\n /** Label text */\n label: string\n /** Subtitle / description */\n description?: string\n /** Optional icon element */\n icon?: React.ReactNode\n /** Keyboard shortcut */\n shortcut?: string | string[]\n /** Group this item belongs to */\n group?: string\n /** When true, item is disabled */\n disabled?: boolean\n /** Selection callback */\n onSelect?: () => void\n}\n\nexport interface ActionRowProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onSelect'> {\n /** Action data */\n action: ActionItem\n /** Whether this row is currently highlighted (keyboard navigation) */\n highlighted?: boolean\n /** Whether to show the shortcut */\n showShortcut?: boolean\n}\n\n/**\n * Action row — a single command/action item in a list or command menu.\n * Inspired by Raycast's compact action layout.\n */\nconst ActionRow = forwardRef<HTMLButtonElement, ActionRowProps>(\n (\n {\n action,\n highlighted = false,\n showShortcut = true,\n className,\n disabled,\n onClick,\n ...props\n },\n ref\n ) => {\n return (\n <button\n ref={ref}\n type=\"button\"\n disabled={disabled ?? action.disabled}\n onClick={(e) => {\n onClick?.(e)\n action.onSelect?.()\n }}\n className={cn(\n 'tollerud-action-row',\n highlighted && 'tollerud-action-row--highlighted',\n (disabled ?? action.disabled) && 'tollerud-action-row--disabled',\n className\n )}\n role=\"option\"\n aria-selected={highlighted}\n aria-disabled={disabled ?? action.disabled}\n {...props}\n >\n {action.icon && (\n <span className=\"tollerud-action-row__icon\">{action.icon}</span>\n )}\n\n <span className=\"tollerud-action-row__content\">\n <span className=\"tollerud-action-row__label\">{action.label}</span>\n {action.description && (\n <span className=\"tollerud-action-row__description\">\n {action.description}\n </span>\n )}\n </span>\n\n {showShortcut && action.shortcut && (\n <span className=\"tollerud-action-row__shortcut\">\n <Kbd keys={action.shortcut} size=\"sm\" />\n </span>\n )}\n </button>\n )\n }\n)\nActionRow.displayName = 'ActionRow'\n\nexport { ActionRow }","\"use client\"\n\nimport {\n forwardRef,\n type KeyboardEvent,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react'\nimport { cn } from '@/lib/utils'\nimport { type ActionItem, ActionRow } from './ActionRow'\n\nexport interface CommandGroup {\n /** Group label (e.g. \"Servers\", \"Actions\") */\n label: string\n /** Items in this group */\n items: ActionItem[]\n}\n\nexport interface CommandMenuProps {\n /** Whether the menu is open */\n open: boolean\n /** Called when menu should close */\n onOpenChange: (open: boolean) => void\n /** Command groups to display */\n groups: CommandGroup[]\n /** Placeholder text for the search input */\n placeholder?: string\n /** Empty state message when no results */\n emptyMessage?: string\n /** Custom class for the overlay */\n className?: string\n /** Keyboard shortcut to toggle (default: \"⌘K\") */\n toggleShortcut?: string\n /** Custom search filter override. Return filtered groups. */\n filter?: (query: string, groups: CommandGroup[]) => CommandGroup[]\n /** Callback when an action runs */\n onAction?: (action: ActionItem) => void\n}\n\n/**\n * Command palette — a Raycast-inspired global command menu.\n *\n * ```tsx\n * const [open, setOpen] = useState(false)\n *\n * <CommandMenu\n * open={open}\n * onOpenChange={setOpen}\n * groups={[\n * {\n * label: 'Servers',\n * items: [\n * { id: 'emma', label: 'Emma', icon: <Server />, onSelect: () => {} },\n * ],\n * },\n * ]}\n * />\n * ```\n */\nconst CommandMenu = forwardRef<HTMLDivElement, CommandMenuProps>(\n ({\n open,\n onOpenChange,\n groups,\n placeholder = 'Type a command…',\n emptyMessage = 'No matching commands',\n className,\n filter: customFilter,\n onAction,\n}: CommandMenuProps, ref) => {\n const [query, setQuery] = useState('')\n const [selectedIndex, setSelectedIndex] = useState(0)\n const inputRef = useRef<HTMLInputElement>(null)\n const listRef = useRef<HTMLDivElement>(null)\n\n // Flatten items with their group indices for keyboard navigation\n const flatItems = groups.flatMap((g) => g.items)\n // Auto-close on Escape\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault()\n onOpenChange(false)\n return\n }\n\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n setSelectedIndex((prev) =>\n prev < flatItems.length - 1 ? prev + 1 : 0\n )\n return\n }\n\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n setSelectedIndex((prev) =>\n prev > 0 ? prev - 1 : flatItems.length - 1\n )\n return\n }\n\n if (e.key === 'Enter') {\n e.preventDefault()\n const item = flatItems[selectedIndex]\n if (item && !item.disabled) {\n item.onSelect?.()\n onAction?.(item)\n onOpenChange(false)\n }\n return\n }\n },\n [flatItems, selectedIndex, onOpenChange, onAction]\n )\n\n // Open toggle via ⌘K / Ctrl+K\n useEffect(() => {\n function handleGlobalKey(e: globalThis.KeyboardEvent) {\n if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === 'k') {\n e.preventDefault()\n onOpenChange(!open)\n }\n }\n document.addEventListener('keydown', handleGlobalKey)\n return () => document.removeEventListener('keydown', handleGlobalKey)\n }, [open, onOpenChange])\n\n // Focus input and reset state when opening\n useEffect(() => {\n if (open) {\n setQuery('')\n setSelectedIndex(0)\n // Small delay to let the animation start before focusing\n const timer = setTimeout(() => inputRef.current?.focus(), 50)\n return () => clearTimeout(timer)\n }\n }, [open])\n\n // Lock body scroll when open\n useEffect(() => {\n if (open) {\n document.body.style.overflow = 'hidden'\n } else {\n document.body.style.overflow = ''\n }\n return () => {\n document.body.style.overflow = ''\n }\n }, [open])\n\n // Filter groups based on query\n const filteredGroups = customFilter\n ? customFilter(query, groups)\n : query.trim()\n ? groups\n .map((g) => ({\n ...g,\n items: g.items.filter(\n (item) =>\n item.label.toLowerCase().includes(query.toLowerCase()) ||\n item.description\n ?.toLowerCase()\n .includes(query.toLowerCase()) ||\n item.group?.toLowerCase().includes(query.toLowerCase())\n ),\n }))\n .filter((g) => g.items.length > 0)\n : groups\n\n // Re-index selection when results change\n const currentFlat = filteredGroups.flatMap((g) => g.items)\n useEffect(() => {\n if (selectedIndex >= currentFlat.length) {\n setSelectedIndex(0)\n }\n }, [currentFlat.length, selectedIndex])\n\n if (!open) return null\n\n return (\n <>\n {/* Overlay */}\n <div\n className=\"tollerud-cmd-overlay\"\n onClick={() => onOpenChange(false)}\n aria-hidden=\"true\"\n />\n\n {/* Command Menu */}\n <div\n className={cn('tollerud-cmd', className)}\n role=\"listbox\"\n aria-label=\"Command palette\"\n onKeyDown={handleKeyDown}\n >\n {/* Search Input */}\n <div className=\"tollerud-cmd__header\">\n <span className=\"tollerud-cmd__search-icon\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.35-4.35\" />\n </svg>\n </span>\n <input\n ref={inputRef}\n type=\"text\"\n className=\"tollerud-cmd__input\"\n placeholder={placeholder}\n value={query}\n onChange={(e) => {\n setQuery(e.target.value)\n setSelectedIndex(0)\n }}\n autoComplete=\"off\"\n spellCheck={false}\n />\n </div>\n\n {/* Results */}\n <div ref={listRef} className=\"tollerud-cmd__list\">\n {filteredGroups.length === 0 && (\n <div className=\"tollerud-cmd__empty\">{emptyMessage}</div>\n )}\n\n {filteredGroups.map((group, gi) => {\n // Calculate flat offset for this group\n const flatOffset = filteredGroups\n .slice(0, gi)\n .reduce((acc, g) => acc + g.items.length, 0)\n\n return (\n <div key={group.label} className=\"tollerud-cmd__group\">\n <div className=\"tollerud-cmd__group-label\">{group.label}</div>\n {group.items.map((item, ii) => {\n const flatIndex = flatOffset + ii\n return (\n <ActionRow\n key={item.id}\n action={item}\n highlighted={selectedIndex === flatIndex}\n onClick={() => {\n item.onSelect?.()\n onAction?.(item)\n onOpenChange(false)\n }}\n onMouseEnter={() => setSelectedIndex(flatIndex)}\n />\n )\n })}\n </div>\n )\n })}\n </div>\n\n {/* Footer hints */}\n <div className=\"tollerud-cmd__footer\">\n <span className=\"tollerud-cmd__hint\">\n <span className=\"tollerud-kbd tollerud-kbd--sm\">\n <span className=\"tollerud-kbd__key\">↑</span>\n </span>\n <span className=\"tollerud-kbd tollerud-kbd--sm\">\n <span className=\"tollerud-kbd__key\">↓</span>\n </span>\n <span className=\"tollerud-cmd__hint-text\">navigate</span>\n </span>\n <span className=\"tollerud-cmd__hint\">\n <span className=\"tollerud-kbd tollerud-kbd--sm\">\n <span className=\"tollerud-kbd__key\">↵</span>\n </span>\n <span className=\"tollerud-cmd__hint-text\">select</span>\n </span>\n <span className=\"tollerud-cmd__hint\">\n <span className=\"tollerud-kbd tollerud-kbd--sm\">\n <span className=\"tollerud-kbd__key\">Esc</span>\n </span>\n <span className=\"tollerud-cmd__hint-text\">close</span>\n </span>\n </div>\n </div>\n </>\n )\n}\n)\nCommandMenu.displayName = 'CommandMenu'\n\nexport { CommandMenu }","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\nimport { StatusDot, type Status } from './StatusDot'\n\nexport interface ServiceHealthCardProps extends HTMLAttributes<HTMLDivElement> {\n /** Service name */\n service: string\n /** Health status */\n status?: Status\n /** Uptime string (e.g. '14d 3h') */\n uptime?: string\n /** Response time in ms */\n responseTime?: string\n /** Current version */\n version?: string\n /** Whether the card is in a loading state */\n loading?: boolean\n}\n\nconst ServiceHealthCard = forwardRef<HTMLDivElement, ServiceHealthCardProps>(\n ({ className, service, status = 'online', uptime, responseTime, version, loading, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border bg-tollerud-surface-raised p-4',\n 'transition-[border-color] duration-[150ms]',\n status === 'offline' && 'border-tollerud-error/40',\n status === 'warning' && 'border-tollerud-yellow/30',\n status === 'online' && 'border-tollerud-border hover:border-tollerud-noir-500',\n status === 'idle' && 'border-tollerud-border opacity-60',\n loading && 'animate-pulse',\n className\n )}\n {...props}\n >\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-sm font-semibold text-tollerud-foreground truncate\">\n {service}\n </span>\n <StatusDot status={status} />\n </div>\n <div className=\"flex flex-wrap gap-x-4 gap-y-1 text-xs text-tollerud-text-muted\">\n {uptime && <span>Uptime: <span className=\"text-tollerud-text-secondary\">{uptime}</span></span>}\n {responseTime && <span>Response: <span className=\"text-tollerud-text-secondary\">{responseTime}</span></span>}\n {version && <span>Version: <span className=\"text-tollerud-text-secondary\">{version}</span></span>}\n </div>\n </div>\n )\n }\n)\nServiceHealthCard.displayName = 'ServiceHealthCard'\n\nexport { ServiceHealthCard }\n","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\nimport { StatusDot, type Status } from './StatusDot'\n\nexport interface HostCardProps extends HTMLAttributes<HTMLDivElement> {\n /** Hostname */\n hostname: string\n /** IP address */\n ip?: string\n /** Status */\n status?: Status\n /** CPU load (e.g. '23%') */\n cpu?: string\n /** Memory usage (e.g. '6.2/16 GB') */\n memory?: string\n /** Disk usage (e.g. '45%') */\n disk?: string\n /** Uptime */\n uptime?: string\n /** Number of containers running */\n containers?: number\n /** Whether the card is loading */\n loading?: boolean\n}\n\nconst HostCard = forwardRef<HTMLDivElement, HostCardProps>(\n ({ className, hostname, ip, status = 'online', cpu, memory, disk, uptime, containers, loading, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border bg-tollerud-surface-raised p-4',\n 'transition-[border-color] duration-[150ms]',\n status === 'offline' && 'border-tollerud-error/40',\n status === 'warning' && 'border-tollerud-yellow/30',\n status === 'online' && 'border-tollerud-border hover:border-tollerud-noir-500',\n loading && 'animate-pulse',\n className\n )}\n {...props}\n >\n <div className=\"flex items-center justify-between mb-2\">\n <div className=\"flex items-center gap-2 min-w-0\">\n <StatusDot status={status} />\n <span className=\"font-semibold text-sm text-tollerud-foreground truncate\">\n {hostname}\n </span>\n </div>\n {containers !== undefined && (\n <span className=\"text-[11px] text-tollerud-text-muted whitespace-nowrap ml-2\">\n {containers} container{containers !== 1 ? 's' : ''}\n </span>\n )}\n </div>\n {ip && (\n <div className=\"text-xs text-tollerud-text-muted mb-2 font-mono\">{ip}</div>\n )}\n <div className=\"flex flex-wrap gap-x-4 gap-y-1 text-xs text-tollerud-text-muted\">\n {cpu && <span>CPU: <span className=\"text-tollerud-text-secondary\">{cpu}</span></span>}\n {memory && <span>RAM: <span className=\"text-tollerud-text-secondary\">{memory}</span></span>}\n {disk && <span>Disk: <span className=\"text-tollerud-text-secondary\">{disk}</span></span>}\n {uptime && <span>Up: <span className=\"text-tollerud-text-secondary\">{uptime}</span></span>}\n </div>\n </div>\n )\n }\n)\nHostCard.displayName = 'HostCard'\n\nexport { HostCard }\n","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\nimport { StatusDot, type Status } from './StatusDot'\n\nexport interface StackService {\n name: string\n status: Status\n}\n\nexport interface DockerStackCardProps extends HTMLAttributes<HTMLDivElement> {\n /** Stack name */\n name: string\n /** Services in the stack */\n services: StackService[]\n /** Path to compose file */\n composePath?: string\n /** Whether the card is loading */\n loading?: boolean\n}\n\nconst DockerStackCard = forwardRef<HTMLDivElement, DockerStackCardProps>(\n ({ className, name, services, composePath, loading, ...props }, ref) => {\n const onlineCount = services.filter((s) => s.status === 'online').length\n const degraded = services.some((s) => s.status === 'offline' || s.status === 'warning')\n const status: Status = services.every((s) => s.status === 'online') ? 'online' : degraded ? 'warning' : 'offline'\n\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border bg-tollerud-surface-raised p-4',\n 'transition-[border-color] duration-[150ms]',\n status === 'offline' && 'border-tollerud-error/40',\n status === 'warning' && 'border-tollerud-yellow/30',\n status === 'online' && 'border-tollerud-border hover:border-tollerud-noir-500',\n loading && 'animate-pulse',\n className\n )}\n {...props}\n >\n <div className=\"flex items-center justify-between mb-3\">\n <div className=\"flex items-center gap-2 min-w-0\">\n <StatusDot status={status} />\n <span className=\"font-semibold text-sm text-tollerud-foreground truncate\">\n {name}\n </span>\n </div>\n <span className=\"text-xs text-tollerud-text-muted whitespace-nowrap ml-2\">\n {onlineCount}/{services.length} healthy\n </span>\n </div>\n {composePath && (\n <div className=\"text-[11px] text-tollerud-text-muted font-mono mb-2 truncate\">\n {composePath}\n </div>\n )}\n <div className=\"flex flex-col gap-1\">\n {services.map((svc) => (\n <div key={svc.name} className=\"flex items-center justify-between text-xs\">\n <span className=\"text-tollerud-text-secondary truncate\">{svc.name}</span>\n <StatusDot status={svc.status} />\n </div>\n ))}\n </div>\n </div>\n )\n }\n)\nDockerStackCard.displayName = 'DockerStackCard'\n\nexport { DockerStackCard }\n","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport type IncidentSeverity = 'critical' | 'high' | 'medium' | 'low' | 'info'\n\nexport interface IncidentCardProps extends HTMLAttributes<HTMLDivElement> {\n /** Incident title */\n title: string\n /** Severity level */\n severity: IncidentSeverity\n /** Timestamp string */\n timestamp: string\n /** Description / detail */\n description?: string\n /** Service name affected */\n service?: string\n /** Whether acknowledged */\n acknowledged?: boolean\n /** Whether the card is loading */\n loading?: boolean\n}\n\nconst severityStyles: Record<IncidentSeverity, { border: string; dot: string; label: string }> = {\n critical: { border: 'border-tollerud-error/50', dot: 'bg-tollerud-error shadow-[0_0_8px_rgba(239,68,68,0.6)]', label: 'text-tollerud-error' },\n high: { border: 'border-tollerud-yellow/50', dot: 'bg-tollerud-yellow shadow-[0_0_8px_rgba(232,213,0,0.5)]', label: 'text-tollerud-yellow' },\n medium: { border: 'border-tollerud-amber/40', dot: 'bg-tollerud-amber', label: 'text-tollerud-amber' },\n low: { border: 'border-tollerud-noir-500', dot: 'bg-tollerud-noir-400', label: 'text-tollerud-text-muted' },\n info: { border: 'border-tollerud-info/30', dot: 'bg-tollerud-info', label: 'text-tollerud-info' },\n}\n\nconst IncidentCard = forwardRef<HTMLDivElement, IncidentCardProps>(\n ({ className, title, severity, timestamp, description, service, acknowledged, loading, ...props }, ref) => {\n const style = severityStyles[severity]\n\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border bg-tollerud-surface-raised p-4',\n 'transition-[border-color] duration-[150ms]',\n style.border,\n acknowledged && 'opacity-50',\n loading && 'animate-pulse',\n className\n )}\n {...props}\n >\n <div className=\"flex items-start gap-3\">\n <span className={cn('w-2 h-2 rounded-full mt-1.5 flex-shrink-0', style.dot)} />\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-sm font-semibold text-tollerud-foreground truncate\">{title}</span>\n <span className={cn('text-[11px] font-medium uppercase whitespace-nowrap', style.label)}>\n {severity}\n </span>\n </div>\n <div className=\"flex items-center gap-2 mt-0.5 text-xs text-tollerud-text-muted\">\n <span>{timestamp}</span>\n {service && <><span className=\"text-tollerud-noir-500\">·</span><span>{service}</span></>}\n </div>\n {description && (\n <p className=\"mt-1.5 text-xs text-tollerud-text-secondary leading-relaxed\">{description}</p>\n )}\n </div>\n </div>\n </div>\n )\n }\n)\nIncidentCard.displayName = 'IncidentCard'\n\nexport { IncidentCard }\n","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport type ApprovalState = 'pending' | 'approved' | 'rejected'\n\nexport interface ApprovalCardProps extends HTMLAttributes<HTMLDivElement> {\n /** Action being approved */\n action: string\n /** Description of what will happen */\n description?: string\n /** Source (e.g. 'Emma → backup.sh') */\n source?: string\n /** Current approval state */\n state?: ApprovalState\n /** Timestamp of the request */\n timestamp?: string\n /** Called when user approves */\n onApprove?: () => void\n /** Called when user rejects */\n onReject?: () => void\n /** Whether actions are disabled */\n disabled?: boolean\n /** Whether the card is loading */\n loading?: boolean\n}\n\nconst stateStyles: Record<ApprovalState, string> = {\n pending: 'border-tollerud-yellow/30 hover:border-tollerud-yellow/50',\n approved: 'border-tollerud-success/40 opacity-70',\n rejected: 'border-tollerud-error/40 opacity-70',\n}\n\nconst stateLabels: Record<ApprovalState, { text: string; cls: string }> = {\n pending: { text: 'Awaiting approval', cls: 'text-tollerud-yellow' },\n approved: { text: 'Approved', cls: 'text-tollerud-success' },\n rejected: { text: 'Rejected', cls: 'text-tollerud-error' },\n}\n\nconst ApprovalCard = forwardRef<HTMLDivElement, ApprovalCardProps>(\n ({ className, action, description, source, state = 'pending', timestamp, onApprove, onReject, disabled, loading, ...props }, ref) => {\n const label = stateLabels[state]\n\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border bg-tollerud-surface-raised p-4',\n 'transition-all duration-[150ms]',\n stateStyles[state],\n loading && 'animate-pulse',\n className\n )}\n {...props}\n >\n <div className=\"flex items-center justify-between mb-1.5\">\n <span className=\"text-sm font-semibold text-tollerud-foreground truncate\">{action}</span>\n <span className={cn('text-[11px] font-medium whitespace-nowrap ml-2', label.cls)}>{label.text}</span>\n </div>\n {description && (\n <p className=\"text-xs text-tollerud-text-secondary mb-1.5 leading-relaxed\">{description}</p>\n )}\n <div className=\"flex flex-wrap gap-x-4 gap-y-0.5 text-[11px] text-tollerud-text-muted mb-3\">\n {source && <span className=\"font-mono\">{source}</span>}\n {timestamp && <span>{timestamp}</span>}\n </div>\n {state === 'pending' && (\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n disabled={disabled}\n onClick={onApprove}\n className={cn(\n 'flex-1 rounded-md px-3 py-1.5 text-xs font-semibold transition-all',\n 'bg-tollerud-success text-tollerud-text-inverse',\n 'hover:brightness-110 disabled:opacity-40 disabled:cursor-not-allowed'\n )}\n >\n Approve\n </button>\n <button\n type=\"button\"\n disabled={disabled}\n onClick={onReject}\n className={cn(\n 'flex-1 rounded-md px-3 py-1.5 text-xs font-semibold transition-all',\n 'bg-tollerud-error text-white',\n 'hover:brightness-110 disabled:opacity-40 disabled:cursor-not-allowed'\n )}\n >\n Reject\n </button>\n </div>\n )}\n </div>\n )\n }\n)\nApprovalCard.displayName = 'ApprovalCard'\n\nexport { ApprovalCard }\n","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\nimport { StatusDot, type Status } from './StatusDot'\n\nexport interface BackupJob {\n name: string\n status: Status\n lastRun?: string\n nextRun?: string\n size?: string\n target?: string\n}\n\nexport interface BackupStatusPanelProps extends HTMLAttributes<HTMLDivElement> {\n /** List of backup jobs */\n jobs: BackupJob[]\n /** Total size of all backups */\n totalSize?: string\n /** Last full backup timestamp */\n lastFullBackup?: string\n /** Whether the panel is loading */\n loading?: boolean\n}\n\nconst BackupStatusPanel = forwardRef<HTMLDivElement, BackupStatusPanelProps>(\n ({ className, jobs, totalSize, lastFullBackup, loading, ...props }, ref) => {\n const failed = jobs.filter((j) => j.status === 'offline').length\n\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border border-tollerud-border bg-tollerud-surface-raised',\n loading && 'animate-pulse',\n className\n )}\n {...props}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-tollerud-border\">\n <span className=\"text-sm font-semibold text-tollerud-foreground\">Backups</span>\n <div className=\"flex items-center gap-3 text-[11px] text-tollerud-text-muted\">\n {totalSize && <span>{totalSize}</span>}\n {lastFullBackup && <span>Last full: {lastFullBackup}</span>}\n </div>\n </div>\n\n {/* Job list */}\n <div className=\"p-1\">\n {jobs.length === 0 && (\n <div className=\"px-3 py-6 text-xs text-center text-tollerud-text-muted\">No backup jobs configured</div>\n )}\n {jobs.map((job) => (\n <div\n key={job.name}\n className=\"flex items-center justify-between px-3 py-2 rounded-md hover:bg-tollerud-noir-800/50 transition-colors\"\n >\n <div className=\"flex items-center gap-2 min-w-0 flex-1\">\n <StatusDot status={job.status} />\n <span className=\"text-xs font-medium text-tollerud-foreground truncate\">{job.name}</span>\n </div>\n <div className=\"flex items-center gap-3 text-[11px] text-tollerud-text-muted flex-shrink-0 ml-2\">\n {job.size && <span>{job.size}</span>}\n {job.target && <span className=\"hidden sm:inline font-mono\">{job.target}</span>}\n </div>\n </div>\n ))}\n </div>\n\n {/* Footer — schedule summary */}\n {(failed > 0) && (\n <div className=\"px-4 py-2 border-t border-tollerud-border\">\n <span className=\"text-[11px] text-tollerud-error\">\n {failed} job{failed !== 1 ? 's' : ''} failed — check logs\n </span>\n </div>\n )}\n </div>\n )\n }\n)\nBackupStatusPanel.displayName = 'BackupStatusPanel'\n\nexport { BackupStatusPanel }\n","import { type HTMLAttributes, type ReactNode, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\nimport type { Status } from './StatusDot'\n\nexport interface TimelineItemData {\n id: string\n /** Timestamp label */\n time: string\n /** Title/headline of the event */\n title: string\n /** Description */\n description?: string\n /** Status indicator dot */\n status?: Status\n /** Optional icon to replace dot */\n icon?: ReactNode\n /** Optional metadata badges */\n meta?: string[]\n}\n\nexport interface TimelineProps extends HTMLAttributes<HTMLDivElement> {\n /** Timeline events */\n items: TimelineItemData[]\n /** Whether items are active (show animated dot pulse) */\n active?: boolean\n /** Whether the timeline is loading */\n loading?: boolean\n}\n\nconst Timeline = forwardRef<HTMLDivElement, TimelineProps>(\n ({ className, items, active, loading, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('tollerud-timeline', loading && 'animate-pulse', className)}\n role=\"list\"\n aria-label=\"Activity timeline\"\n {...props}\n >\n {items.map((item, i) => {\n const isLast = i === items.length - 1\n\n return (\n <div key={item.id} className=\"tollerud-timeline__item\" role=\"listitem\">\n {/* Dot column */}\n <div className=\"tollerud-timeline__marker\">\n <div className=\"tollerud-timeline__dot-group\">\n {item.icon ? (\n <span className=\"tollerud-timeline__icon\">{item.icon}</span>\n ) : (\n <span\n className={cn(\n 'tollerud-timeline__dot',\n active && 'tollerud-timeline__dot--active',\n item.status === 'online' && 'bg-tollerud-success shadow-[0_0_6px_rgba(34,197,94,0.5)]',\n item.status === 'offline' && 'bg-tollerud-error',\n item.status === 'warning' && 'bg-tollerud-yellow shadow-[0_0_6px_rgba(232,213,0,0.5)]',\n !item.status && 'bg-tollerud-noir-500'\n )}\n />\n )}\n {!isLast && <div className=\"tollerud-timeline__line\" />}\n </div>\n </div>\n\n {/* Content */}\n <div className=\"tollerud-timeline__content\">\n <div className=\"flex items-start justify-between gap-2\">\n <span className=\"tollerud-timeline__title\">{item.title}</span>\n <span className=\"tollerud-timeline__time\">{item.time}</span>\n </div>\n {item.description && (\n <p className=\"tollerud-timeline__description\">{item.description}</p>\n )}\n {item.meta && item.meta.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5 mt-1\">\n {item.meta.map((m) => (\n <span key={m} className=\"tollerud-timeline__meta\">{m}</span>\n ))}\n </div>\n )}\n </div>\n </div>\n )\n })}\n </div>\n )\n }\n)\nTimeline.displayName = 'Timeline'\n\nexport { Timeline }","'use client'\n\nimport { type HTMLAttributes, forwardRef, useState } from 'react'\nimport { cn } from '@/lib/utils'\nimport { IncidentCard, type IncidentSeverity } from './IncidentCard'\n\nexport interface AlertItem {\n id: string\n title: string\n severity: IncidentSeverity\n timestamp: string\n description?: string\n service?: string\n acknowledged?: boolean\n}\n\nexport interface AlertInboxProps extends HTMLAttributes<HTMLDivElement> {\n alerts: AlertItem[]\n filterSeverity?: IncidentSeverity | ''\n onAcknowledge?: (id: string) => void\n loading?: boolean\n emptyMessage?: string\n}\n\nconst AlertInbox = forwardRef<HTMLDivElement, AlertInboxProps>(\n ({ className, alerts, filterSeverity = '', onAcknowledge, loading, emptyMessage = 'All clear — no incidents', ...props }, ref) => {\n const filtered = filterSeverity\n ? alerts.filter((a) => a.severity === filterSeverity)\n : alerts\n\n const counts = {\n total: alerts.length,\n unacknowledged: alerts.filter((a) => !a.acknowledged).length,\n critical: alerts.filter((a) => a.severity === 'critical' && !a.acknowledged).length,\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border border-tollerud-border bg-tollerud-surface-raised overflow-hidden',\n loading && 'animate-pulse',\n className\n )}\n {...props}\n >\n {/* Header bar */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-tollerud-border\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-semibold text-tollerud-foreground\">Alerts</span>\n {counts.unacknowledged > 0 && (\n <span className=\"inline-flex items-center gap-1 text-[11px] text-tollerud-error font-medium\">\n <span className=\"w-1.5 h-1.5 rounded-full bg-tollerud-error animate-pulse\" />\n {counts.unacknowledged} unread\n </span>\n )}\n {counts.critical > 0 && (\n <span className=\"text-[11px] text-tollerud-error font-bold\">{counts.critical} critical</span>\n )}\n </div>\n <span className=\"text-xs text-tollerud-text-muted\">{filtered.length} of {alerts.length}</span>\n </div>\n\n {/* Alert list */}\n <div className=\"divide-y divide-tollerud-border/50 max-h-[480px] overflow-y-auto\">\n {filtered.length === 0 && (\n <div className=\"px-4 py-8 text-xs text-center text-tollerud-text-muted\">{emptyMessage}</div>\n )}\n {filtered.map((alert) => (\n <div key={alert.id} className=\"relative group\">\n <IncidentCard\n title={alert.title}\n severity={alert.severity}\n timestamp={alert.timestamp}\n description={alert.description}\n service={alert.service}\n acknowledged={alert.acknowledged}\n className=\"border-0 rounded-none bg-transparent hover:bg-tollerud-noir-800/30\"\n />\n {/* Acknowledged indicator */}\n {alert.acknowledged && (\n <span className=\"absolute bottom-2 right-3 text-[10px] font-medium text-tollerud-text-muted/50\">\n Acknowledged\n </span>\n )}\n {/* Acknowledge button */}\n {!alert.acknowledged && onAcknowledge && (\n <button\n type=\"button\"\n onClick={() => onAcknowledge(alert.id)}\n className={cn(\n 'absolute bottom-2 right-3 text-[10px] font-medium px-2 py-0.5 rounded',\n 'text-tollerud-yellow/70 hover:text-tollerud-yellow hover:bg-tollerud-yellow/10',\n 'opacity-0 group-hover:opacity-100 transition-opacity duration-150'\n )}\n >\n Acknowledge\n </button>\n )}\n </div>\n ))}\n </div>\n </div>\n )\n }\n)\nAlertInbox.displayName = 'AlertInbox'\n\nexport { AlertInbox }","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport type RollbackStepStatus = 'pending' | 'running' | 'success' | 'failed' | 'skipped'\n\nexport interface RollbackStep {\n id: string\n label: string\n description?: string\n status: RollbackStepStatus\n}\n\nexport interface RollbackPlanProps extends HTMLAttributes<HTMLDivElement> {\n /** Name/identifier for the plan */\n name: string\n /** Rollback steps */\n steps: RollbackStep[]\n /** Whether the plan is executing */\n executing?: boolean\n /** Whether the plan is loading */\n loading?: boolean\n}\n\nconst stepIcon: Record<RollbackStepStatus, string> = {\n pending: '○',\n running: '◉',\n success: '●',\n failed: '✕',\n skipped: '—',\n}\n\nconst stepStyles: Record<RollbackStepStatus, string> = {\n pending: 'text-tollerud-noir-400',\n running: 'text-tollerud-yellow animate-pulse',\n success: 'text-tollerud-success',\n failed: 'text-tollerud-error',\n skipped: 'text-tollerud-noir-500',\n}\n\nconst RollbackPlan = forwardRef<HTMLDivElement, RollbackPlanProps>(\n ({ className, name, steps, executing, loading, ...props }, ref) => {\n const statusSummary: Record<RollbackStepStatus, number> = {\n pending: steps.filter((s) => s.status === 'pending').length,\n running: steps.filter((s) => s.status === 'running').length,\n success: steps.filter((s) => s.status === 'success').length,\n failed: steps.filter((s) => s.status === 'failed').length,\n skipped: steps.filter((s) => s.status === 'skipped').length,\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border border-tollerud-border bg-tollerud-surface-raised',\n loading && 'animate-pulse',\n className\n )}\n {...props}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-tollerud-border\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-semibold text-tollerud-foreground\">{name}</span>\n {executing && (\n <span className=\"text-[11px] text-tollerud-yellow font-medium animate-pulse\">Executing…</span>\n )}\n </div>\n <div className=\"flex items-center gap-2 text-[11px] text-tollerud-text-muted\">\n {statusSummary.success > 0 && <span className=\"text-tollerud-success\">{statusSummary.success} done</span>}\n {statusSummary.failed > 0 && <span className=\"text-tollerud-error\">{statusSummary.failed} failed</span>}\n {statusSummary.running > 0 && <span className=\"text-tollerud-yellow\">{statusSummary.running} running</span>}\n </div>\n </div>\n\n {/* Steps */}\n <div className=\"p-1\">\n {steps.map((step) => (\n <div\n key={step.id}\n className={cn(\n 'flex items-start gap-3 px-3 py-2 rounded-md',\n 'transition-colors duration-[150ms]',\n step.status === 'failed' && 'bg-tollerud-error/5',\n step.status === 'running' && 'bg-tollerud-yellow/5'\n )}\n >\n <span className={cn('font-mono text-sm mt-0.5 flex-shrink-0', stepStyles[step.status])}>\n {stepIcon[step.status]}\n </span>\n <div className=\"flex-1 min-w-0\">\n <span className={cn(\n 'text-xs font-medium',\n step.status === 'success' ? 'text-tollerud-success' :\n step.status === 'failed' ? 'text-tollerud-error' :\n step.status === 'skipped' ? 'text-tollerud-noir-500' :\n 'text-tollerud-foreground'\n )}>\n {step.label}\n </span>\n {step.description && (\n <p className=\"text-[11px] text-tollerud-text-muted mt-0.5\">{step.description}</p>\n )}\n </div>\n <span className={cn(\n 'text-[10px] uppercase font-semibold flex-shrink-0',\n stepStyles[step.status]\n )}>\n {step.status}\n </span>\n </div>\n ))}\n </div>\n </div>\n )\n }\n)\nRollbackPlan.displayName = 'RollbackPlan'\n\nexport { RollbackPlan }","'use client'\n\nimport { type HTMLAttributes, forwardRef, useMemo, useState } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface DiffLine {\n /** Diff content */\n text: string\n /** Change type */\n type: 'add' | 'remove' | 'context'\n /** Line number in original */\n oldLine?: number\n /** Line number in new */\n newLine?: number\n}\n\nexport interface ActionDiffProps extends HTMLAttributes<HTMLDivElement> {\n /** Diff lines */\n lines: DiffLine[]\n /** File/label name */\n label?: string\n /** View mode */\n view?: 'unified' | 'side-by-side'\n /** Whether the diff is loading */\n loading?: boolean\n}\n\nconst diffStyles = {\n add: 'bg-tollerud-success/[0.06] text-tollerud-success hover:bg-tollerud-success/[0.10]',\n remove: 'bg-tollerud-error/[0.06] text-tollerud-error hover:bg-tollerud-error/[0.10]',\n context: 'text-tollerud-noir-300',\n}\n\nconst diffPrefix = {\n add: '+',\n remove: '-',\n context: ' ',\n}\n\nconst ActionDiff = forwardRef<HTMLDivElement, ActionDiffProps>(\n ({ className, lines, label, view = 'unified', loading, ...props }, ref) => {\n const [showContext, setShowContext] = useState(true)\n\n const stats = useMemo(() => {\n const adds = lines.filter((l) => l.type === 'add').length\n const rems = lines.filter((l) => l.type === 'remove').length\n return { adds, rems }\n }, [lines])\n\n // Filter context lines if collapsed\n const displayLines = showContext ? lines : lines.filter((l) => l.type !== 'context')\n const hasContext = lines.some((l) => l.type === 'context')\n\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border border-tollerud-border bg-[var(--color-tollerud-surface-raised)] overflow-hidden',\n loading && 'animate-pulse',\n className\n )}\n {...props}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-2.5 border-b border-tollerud-border bg-tollerud-noir-900\">\n <div className=\"flex items-center gap-2 min-w-0\">\n {label && (\n <span className=\"text-xs font-medium text-tollerud-foreground font-mono truncate\">{label}</span>\n )}\n </div>\n <div className=\"flex items-center gap-3 text-[11px]\">\n <span className=\"text-tollerud-success\">+{stats.adds}</span>\n <span className=\"text-tollerud-error\">-{stats.rems}</span>\n {hasContext && (\n <button\n type=\"button\"\n onClick={() => setShowContext(!showContext)}\n className=\"text-tollerud-text-muted hover:text-tollerud-foreground transition-colors\"\n >\n {showContext ? 'Hide context' : 'Show context'}\n </button>\n )}\n </div>\n </div>\n\n {/* Diff content */}\n <div className=\"overflow-x-auto font-mono text-xs leading-relaxed\">\n <table className=\"w-full border-collapse\">\n <tbody>\n {displayLines.map((line, i) => (\n <tr\n key={i}\n className={cn(\n 'transition-colors duration-[100ms]',\n diffStyles[line.type]\n )}\n >\n {/* Old line number */}\n <td className={cn(\n 'w-10 text-right px-2 py-px select-none',\n 'text-tollerud-noir-500 border-r border-tollerud-border/30',\n 'text-[10px] align-top'\n )}>\n {line.oldLine ?? ''}\n </td>\n {/* New line number */}\n <td className={cn(\n 'w-10 text-right px-2 py-px select-none',\n 'text-tollerud-noir-500 border-r border-tollerud-border/30',\n 'text-[10px] align-top'\n )}>\n {line.newLine ?? ''}\n </td>\n {/* Prefix + content */}\n <td className=\"px-2 py-px whitespace-pre-wrap\">\n <span className=\"select-none opacity-50 mr-2\">{diffPrefix[line.type]}</span>\n {line.text}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n )\n }\n)\nActionDiff.displayName = 'ActionDiff'\n\nexport { ActionDiff }","'use client'\n\nimport {\n type HTMLAttributes,\n type UIEvent,\n forwardRef,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { cn } from '@/lib/utils'\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'trace'\n\nexport interface LogLine {\n /** Line content */\n text: string\n /** Log level for color coding */\n level?: LogLevel\n /** Timestamp string (optional) */\n timestamp?: string\n /** Source/logger name */\n source?: string\n}\n\nexport interface LogViewerProps extends HTMLAttributes<HTMLDivElement> {\n /** Log lines to display */\n lines: LogLine[]\n /** Maximum visible lines (for performance) */\n maxLines?: number\n /** Show line numbers */\n showLineNumbers?: boolean\n /** Show timestamps */\n showTimestamps?: boolean\n /** Whether to auto-scroll (follow new content) */\n follow?: boolean\n /** Enable search */\n searchable?: boolean\n /** Height of the viewer */\n height?: string\n /** Whether the viewer is loading */\n loading?: boolean\n}\n\nconst levelStyles: Record<LogLevel, string> = {\n debug: 'text-tollerud-noir-400',\n trace: 'text-tollerud-noir-300',\n info: 'text-tollerud-foreground',\n warn: 'text-tollerud-amber',\n error: 'text-tollerud-error',\n}\n\nconst levelLabels: Record<LogLevel, string> = {\n debug: 'DBG',\n trace: 'TRC',\n info: 'INF',\n warn: 'WRN',\n error: 'ERR',\n}\n\nconst LogViewer = forwardRef<HTMLDivElement, LogViewerProps>(\n ({ className, lines, maxLines = 5000, showLineNumbers = true, showTimestamps = true, follow = true, searchable, height = '400px', loading, ...props }, ref) => {\n const [search, setSearch] = useState('')\n const [isFollowing, setIsFollowing] = useState(follow)\n const scrollRef = useRef<HTMLDivElement>(null)\n\n // Truncate for performance\n const displayedLines = useMemo(() => {\n return lines.length > maxLines ? lines.slice(-maxLines) : lines\n }, [lines, maxLines])\n\n // Filter by search\n const filteredLines = useMemo(() => {\n if (!search.trim()) return displayedLines\n return displayedLines.filter((l) =>\n l.text.toLowerCase().includes(search.toLowerCase()) ||\n l.source?.toLowerCase().includes(search.toLowerCase())\n )\n }, [displayedLines, search])\n\n // Auto-scroll\n useEffect(() => {\n if (isFollowing && scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight\n }\n }, [filteredLines.length, isFollowing])\n\n // Detect manual scroll to disable follow\n const handleScroll = (e: UIEvent<HTMLDivElement>) => {\n const el = e.currentTarget\n const atBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 40\n setIsFollowing(atBottom)\n }\n\n const filteredFrom = displayedLines.indexOf(filteredLines[0])\n\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border border-tollerud-border bg-[var(--color-tollerud-surface-raised)] overflow-hidden tollerud-log-viewer',\n loading && 'animate-pulse',\n className\n )}\n {...props}\n >\n {/* Toolbar */}\n <div className=\"flex items-center justify-between px-3 py-2 border-b border-tollerud-border bg-tollerud-noir-900\">\n <div className=\"flex items-center gap-2 text-xs text-tollerud-text-muted\">\n {isFollowing\n ? <span className=\"text-tollerud-yellow font-medium\">● Live</span>\n : <span className=\"text-tollerud-noir-400\">● Paused</span>}\n <span>{filteredLines.length} lines</span>\n {lines.length > maxLines && (\n <span className=\"text-tollerud-amber\">(showing last {maxLines})</span>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n {searchable && (\n <input\n type=\"text\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search logs…\"\n className={cn(\n 'w-40 text-[11px] px-2 py-1 rounded bg-tollerud-noir-800',\n 'border border-tollerud-noir-600 text-tollerud-foreground',\n 'placeholder:text-tollerud-noir-400 outline-none',\n 'focus:border-tollerud-yellow/50 transition-colors'\n )}\n />\n )}\n </div>\n </div>\n\n {/* Log content */}\n <div\n ref={scrollRef}\n onScroll={handleScroll}\n className=\"overflow-y-auto font-mono text-xs leading-relaxed p-3\"\n style={{ height }}\n >\n {filteredLines.length === 0 && (\n <div className=\"flex items-center justify-center h-full text-tollerud-noir-400 text-xs\">\n {search ? 'No matching log lines' : 'No log output'}\n </div>\n )}\n {filteredLines.map((line, i) => {\n const absLineNum = filteredFrom >= 0 ? filteredFrom + i + 1 : i + 1\n const level = line.level ?? 'info'\n return (\n <div\n key={`${absLineNum}-${i}`}\n className={cn(\n 'flex gap-3 hover:bg-[var(--color-tollerud-surface-hover)] px-1 py-px rounded-sm',\n levelStyles[level]\n )}\n >\n {showLineNumbers && (\n <span className=\"text-tollerud-noir-500 text-right select-none w-8 flex-shrink-0\">\n {absLineNum}\n </span>\n )}\n {showTimestamps && line.timestamp && (\n <span className=\"text-tollerud-noir-400 flex-shrink-0 select-none\">\n {line.timestamp}\n </span>\n )}\n <span className=\"flex-shrink-0 w-7 text-center font-bold text-[10px] uppercase opacity-60\">\n {levelLabels[level]}\n </span>\n <span className=\"whitespace-pre-wrap break-all\">{line.text}</span>\n </div>\n )\n })}\n </div>\n </div>\n )\n }\n)\nLogViewer.displayName = 'LogViewer'\n\nexport { LogViewer }","import { type TextareaHTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n label?: string\n error?: string\n}\n\nconst Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, label, error, id, ...props }, ref) => {\n return (\n <div className=\"flex flex-col gap-1\">\n {label && (\n <label htmlFor={id} className=\"text-xs font-medium text-tollerud-text-muted\">\n {label}\n </label>\n )}\n <textarea\n ref={ref}\n id={id}\n className={cn(\n 'font-sans text-base px-3 py-2 rounded min-h-[80px] resize-y',\n 'bg-tollerud-surface-raised border',\n 'text-tollerud-text-primary',\n 'placeholder:text-tollerud-text-muted',\n 'transition-[border-color] duration-[150ms]',\n 'focus:outline-none focus:border-tollerud-yellow focus:shadow-[0_0_0_1px_#E8D500]',\n error ? 'border-tollerud-error' : 'border-tollerud-border',\n className\n )}\n {...props}\n />\n {error && (\n <p className=\"text-xs text-tollerud-error mt-0.5\">{error}</p>\n )}\n </div>\n )\n }\n)\nTextarea.displayName = 'Textarea'\n\nexport { Textarea }","'use client'\n\nimport { type HTMLAttributes, forwardRef, useState, useRef, useEffect, useCallback } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface SelectOption {\n value: string\n label: string\n}\n\nexport interface SelectProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {\n label?: string\n error?: string\n placeholder?: string\n options?: SelectOption[]\n value?: string\n onChange?: (value: string) => void\n}\n\nconst Select = forwardRef<HTMLDivElement, SelectProps>(\n ({ className, label, error, placeholder, options = [], value, onChange, ...props }, ref) => {\n const [open, setOpen] = useState(false)\n const [highlightedIdx, setHighlightedIdx] = useState(0)\n const containerRef = useRef<HTMLDivElement>(null)\n const listRef = useRef<HTMLDivElement>(null)\n\n const selectedOption = options.find((o) => o.value === value)\n\n // Close on click outside\n useEffect(() => {\n if (!open) return\n const handleClick = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setOpen(false)\n }\n }\n document.addEventListener('mousedown', handleClick)\n return () => document.removeEventListener('mousedown', handleClick)\n }, [open])\n\n // Reset highlight when opening\n useEffect(() => {\n if (open) {\n const idx = value ? options.findIndex((o) => o.value === value) : -1\n setHighlightedIdx(idx >= 0 ? idx : 0)\n }\n }, [open, options, value])\n\n // Scroll highlighted option into view\n useEffect(() => {\n if (open && listRef.current) {\n const item = listRef.current.children[highlightedIdx] as HTMLElement | undefined\n item?.scrollIntoView({ block: 'nearest' })\n }\n }, [open, highlightedIdx])\n\n const selectOption = useCallback(\n (opt: SelectOption) => {\n onChange?.(opt.value)\n setOpen(false)\n },\n [onChange]\n )\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (!open) {\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {\n e.preventDefault()\n setOpen(true)\n }\n return\n }\n\n switch (e.key) {\n case 'Escape':\n e.preventDefault()\n setOpen(false)\n break\n case 'ArrowDown':\n e.preventDefault()\n setHighlightedIdx((prev) => Math.min(prev + 1, options.length - 1))\n break\n case 'ArrowUp':\n e.preventDefault()\n setHighlightedIdx((prev) => Math.max(prev - 1, 0))\n break\n case 'Enter':\n e.preventDefault()\n if (options[highlightedIdx]) {\n selectOption(options[highlightedIdx])\n }\n break\n }\n }\n\n return (\n <div className=\"flex flex-col gap-1.5\" ref={ref}>\n {label && (\n <label className=\"text-xs font-medium text-tollerud-text-muted\">\n {label}\n </label>\n )}\n <div ref={containerRef} className=\"relative\">\n {/* Trigger */}\n <button\n type=\"button\"\n onClick={() => setOpen(!open)}\n onKeyDown={handleKeyDown}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n className={cn(\n 'font-sans text-sm w-full flex items-center justify-between px-3 py-2.5 rounded-lg',\n 'bg-tollerud-surface-raised',\n 'text-tollerud-text-primary text-left',\n 'transition-all duration-150 ease-out cursor-pointer',\n error\n ? 'border-tollerud-error/70 focus:border-tollerud-error focus:shadow-[0_0_0_1px_#EF4444]'\n : 'border-tollerud-border focus:border-tollerud-yellow focus:shadow-[0_0_0_1px_#E8D500]',\n 'border hover:border-tollerud-noir-400',\n 'focus:outline-none',\n className\n )}\n >\n <span className={cn(!selectedOption && 'text-tollerud-text-muted')}>\n {selectedOption ? selectedOption.label : placeholder || 'Select…'}\n </span>\n <svg\n className={cn(\n 'h-4 w-4 text-tollerud-text-muted transition-transform duration-150 flex-shrink-0',\n open && 'rotate-180'\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n aria-hidden=\"true\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 9l6 6 6-6\" />\n </svg>\n </button>\n\n {/* Dropdown */}\n {open && (\n <div\n ref={listRef}\n role=\"listbox\"\n className={cn(\n 'absolute z-10 left-0 right-0 mt-1 py-1',\n 'rounded-lg border border-tollerud-border bg-tollerud-surface-overlay',\n 'shadow-[0_8px_24px_rgba(0,0,0,0.4)]',\n 'max-h-60 overflow-y-auto'\n )}\n >\n {options.length === 0 && (\n <div className=\"px-3 py-2 text-xs text-tollerud-text-muted text-center\">\n No options\n </div>\n )}\n {options.map((opt, idx) => (\n <button\n key={opt.value}\n type=\"button\"\n role=\"option\"\n aria-selected={opt.value === value}\n onClick={() => selectOption(opt)}\n onMouseEnter={() => setHighlightedIdx(idx)}\n className={cn(\n 'w-full text-sm text-left px-3 py-2 transition-colors duration-75',\n 'cursor-pointer',\n opt.value === value\n ? 'text-tollerud-yellow'\n : 'text-tollerud-text-primary',\n idx === highlightedIdx && !(opt.value === value)\n ? 'bg-tollerud-noir-700'\n : 'hover:bg-tollerud-noir-700/60',\n opt.value === value && highlightedIdx === idx && 'bg-tollerud-noir-700'\n )}\n >\n {opt.label}\n </button>\n ))}\n </div>\n )}\n </div>\n {error && (\n <p className=\"text-xs text-tollerud-error mt-0.5\">{error}</p>\n )}\n </div>\n )\n }\n)\nSelect.displayName = 'Select'\n\nexport { Select }","import { type InputHTMLAttributes, forwardRef, useId } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: string\n}\n\nconst Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n ({ className, label, id: idProp, checked, ...props }, ref) => {\n const autoId = useId()\n const id = idProp ?? autoId\n\n return (\n <label\n htmlFor={id}\n className={cn(\n 'inline-flex items-center gap-2 cursor-pointer select-none group',\n 'text-sm text-tollerud-text-primary',\n props.disabled && 'opacity-50 pointer-events-none',\n className\n )}\n >\n <span className=\"relative flex items-center justify-center\">\n <input\n ref={ref}\n id={id}\n type=\"checkbox\"\n checked={checked}\n className=\"peer sr-only\"\n {...props}\n />\n {/* Custom box */}\n <span\n className={cn(\n 'h-4 w-4 rounded border transition-all duration-[150ms]',\n 'flex items-center justify-center',\n 'bg-tollerud-surface-raised border-tollerud-border',\n 'peer-focus-visible:outline-2 peer-focus-visible:outline-tollerud-yellow',\n 'peer-checked:bg-tollerud-yellow peer-checked:border-tollerud-yellow',\n 'group-hover:border-tollerud-text-secondary'\n )}\n >\n {/* Checkmark SVG — visible when checked */}\n <svg\n className={cn(\n 'h-3 w-3 text-tollerud-noir-black transition-opacity duration-[150ms]',\n checked ? 'opacity-100' : 'opacity-0'\n )}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M2.5 6l2.5 2.5 4.5-5\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n </span>\n {label && <span>{label}</span>}\n </label>\n )\n }\n)\nCheckbox.displayName = 'Checkbox'\n\nexport { Checkbox }","import { type InputHTMLAttributes, forwardRef, useId } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface SwitchProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: string\n}\n\nconst Switch = forwardRef<HTMLInputElement, SwitchProps>(\n ({ className, label, id: idProp, checked, ...props }, ref) => {\n const autoId = useId()\n const id = idProp ?? autoId\n\n return (\n <label\n htmlFor={id}\n className={cn(\n 'inline-flex items-center gap-2.5 cursor-pointer select-none group',\n 'text-sm text-tollerud-text-primary',\n props.disabled && 'opacity-40 pointer-events-none cursor-not-allowed',\n className\n )}\n >\n {/* Track */}\n <span\n className={cn(\n 'relative inline-flex items-center h-5 w-9 flex-shrink-0 rounded-full',\n 'transition-colors duration-200 ease-out',\n checked ? 'bg-tollerud-yellow' : 'bg-tollerud-noir-600',\n 'group-hover:bg-tollerud-noir-500',\n checked && 'group-hover:bg-tollerud-yellow-warm',\n 'peer-focus-visible:outline-2 peer-focus-visible:outline-tollerud-yellow peer-focus-visible:outline-offset-2'\n )}\n >\n {/* Hidden input (peer) */}\n <input\n ref={ref}\n id={id}\n type=\"checkbox\"\n role=\"switch\"\n checked={checked}\n className=\"peer absolute inset-0 opacity-0 w-full h-full cursor-pointer z-10\"\n {...props}\n />\n {/* Thumb */}\n <span\n className={cn(\n 'block h-3.5 w-3.5 rounded-full shadow-sm',\n 'transition-all duration-200 ease-out',\n checked\n ? 'translate-x-[18px] bg-tollerud-black'\n : 'translate-x-[3px] bg-tollerud-white'\n )}\n />\n </span>\n {label && <span>{label}</span>}\n </label>\n )\n }\n)\nSwitch.displayName = 'Switch'\n\nexport { Switch }","import { type InputHTMLAttributes, forwardRef, useId } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface RadioGroupProps {\n /** Group label */\n label?: string\n /** Error message */\n error?: string\n children?: React.ReactNode\n className?: string\n}\n\nconst RadioGroup = forwardRef<HTMLFieldSetElement, RadioGroupProps>(\n ({ label, error, children, className }, ref) => {\n const autoId = useId()\n return (\n <fieldset ref={ref} className={cn('flex flex-col gap-1', className)}>\n {label && (\n <legend className=\"text-xs font-medium text-tollerud-text-muted mb-1\">\n {label}\n </legend>\n )}\n <div className=\"flex flex-col gap-2\">{children}</div>\n {error && (\n <p className=\"text-xs text-tollerud-error mt-0.5\">{error}</p>\n )}\n </fieldset>\n )\n }\n)\nRadioGroup.displayName = 'RadioGroup'\n\nexport interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: string\n}\n\nconst Radio = forwardRef<HTMLInputElement, RadioProps>(\n ({ className, label, id: idProp, ...props }, ref) => {\n const autoId = useId()\n const id = idProp ?? autoId\n\n return (\n <label\n htmlFor={id}\n className={cn(\n 'inline-flex items-center gap-2 cursor-pointer select-none group',\n 'text-sm text-tollerud-text-primary',\n props.disabled && 'opacity-50 pointer-events-none',\n className\n )}\n >\n <span className=\"relative flex items-center justify-center\">\n <input\n ref={ref}\n id={id}\n type=\"radio\"\n className=\"peer sr-only\"\n {...props}\n />\n {/* Custom radio circle */}\n <span\n className={cn(\n 'h-4 w-4 rounded-full border transition-all duration-[150ms]',\n 'bg-tollerud-surface-raised border-tollerud-border',\n 'peer-focus-visible:outline-2 peer-focus-visible:outline-tollerud-yellow',\n 'peer-checked:border-tollerud-yellow',\n 'group-hover:border-tollerud-text-secondary',\n 'flex items-center justify-center'\n )}\n >\n {/* Inner dot */}\n <span\n className={cn(\n 'h-2 w-2 rounded-full bg-tollerud-yellow transition-opacity duration-[150ms]',\n props.checked ? 'opacity-100' : 'opacity-0'\n )}\n />\n </span>\n </span>\n {label && <span>{label}</span>}\n </label>\n )\n }\n)\nRadio.displayName = 'Radio'\n\nexport { RadioGroup, Radio }","'use client'\n\nimport type { CSSProperties, ReactElement } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport type FooterLabels = {\n /** Text for the tollerud.no link (e.g. \"A Tollerud Project\"). */\n tollerudProject: string\n /**\n * Optional middle segment after the link, before the rights line.\n * Example for Advania: `\"for Advania Norge AS.\"`\n */\n attribution?: string\n allRightsReserved: string\n}\n\nconst defaultLabels: FooterLabels = {\n tollerudProject: 'A Tollerud Project',\n allRightsReserved: 'All rights reserved.',\n}\n\nexport type FooterProps = {\n labels?: Partial<FooterLabels>\n /** Layout behavior: responsive keeps mobile-first stacking, row forces horizontal layout. */\n layout?: 'responsive' | 'row'\n /** Merged onto <footer>. Use for extra layout, padding, etc. */\n className?: string\n /** Merged onto <footer> (wins over conflicting backgroundColor from classes when needed). */\n style?: CSSProperties\n /**\n * When true, skips all default surface styling so className/style fully control the bar\n * (avoids fighting default background/border).\n */\n unstyled?: boolean\n /** When true, uses accent (yellow) surface instead of neutral dark. */\n accent?: boolean\n classNameInner?: string\n classNameLogo?: string\n classNameText?: string\n classNameLink?: string\n}\n\nconst MONOGRAM_PATH =\n 'M82.4839273,140.272626 L95.1738252,140.272626 L95.1738252,143 L34.8114657,143 L34.8114657,140.272626 L47.5013636,140.272626 L47.5013636,28.2924381 C40.1277806,26.4177752 32.9252955,25.2241422 26.4088393,25.2241422 C12.1757856,25.2241422 4.11617359,34.5982703 4.11617359,39.8821508 C4.11617359,40.9049161 4.63028596,41.5867596 5.65932936,41.5867596 C7.20248513,41.5867596 7.37440169,40.3931266 8.06043062,38.8593855 C10.4615319,33.575505 15.6059302,31.5307881 20.4073141,31.5307881 C29.152955,31.5307881 35.1552988,38.5184637 35.1552988,47.2107482 C35.1552988,56.2447681 28.8107592,62.8907084 18.0070315,62.8907084 C7.5454996,62.891522 0,53.6882617 0,43.8023442 C0,30.8497582 11.3178401,21.986606 26.5799372,21.986606 C51.1026062,21.986606 84.1989996,39.2011209 104.948509,39.2011209 C118.495534,39.2011209 126.384048,31.7016558 126.384048,19.4300996 C126.384048,10.3968933 118.667451,4.60203698 115.580321,4.60203698 C114.552096,4.60203698 113.69415,5.1130128 113.69415,6.13577809 C113.69415,7.49946515 114.552096,7.6695192 115.409223,8.01044097 C115.752237,8.18049502 122.268693,10.5669474 122.268693,19.2592319 C122.268693,28.2924381 115.238125,34.0872945 107.177694,34.0872945 C97.7460244,34.0872945 91.0584702,26.4177752 91.0584702,17.8955448 C91.0584702,6.64675391 99.9760277,0 109.749893,0 C122.268693,0 129.642276,9.88510384 129.642276,19.6001536 C129.642276,34.2581622 119.181563,42.4386572 104.947691,42.4386572 C98.0890388,42.4386572 90.5443579,40.9049161 82.4839273,38.6901451 L82.4839273,140.272626 Z'\n\nexport function Footer({\n labels,\n layout = 'responsive',\n className,\n style,\n unstyled = false,\n accent = false,\n classNameInner,\n classNameLogo,\n classNameText,\n classNameLink,\n}: FooterProps): ReactElement {\n const t = { ...defaultLabels, ...labels }\n const attribution = t.attribution?.trim()\n\n const footerSurface = unstyled\n ? ''\n : accent\n ? 'border-t border-tollerud-yellow/20 bg-tollerud-yellow/5'\n : 'border-t border-tollerud-border bg-tollerud-noir-900/80'\n\n const innerLayoutClasses =\n layout === 'row'\n ? 'max-w-7xl mx-auto px-8 flex flex-row items-center justify-between gap-4'\n : 'max-w-7xl mx-auto px-8 flex flex-col md:flex-row items-center justify-center md:justify-between gap-4 md:gap-0'\n\n const logoColor = unstyled\n ? ''\n : accent\n ? 'text-tollerud-yellow'\n : 'text-tollerud-text-muted'\n\n const textWrapperClasses =\n layout === 'row' ? 'flex-1 text-right ml-4' : 'flex-1 text-center md:text-right md:ml-4'\n\n const textLayoutClasses =\n layout === 'row'\n ? 'text-sm text-tollerud-text-secondary inline-flex flex-row items-center justify-end text-right gap-0'\n : 'text-sm text-tollerud-text-secondary flex flex-col md:flex-row md:inline gap-0'\n\n return (\n <footer className={cn('w-full pt-4 pb-4', footerSurface, className)} style={style}>\n <div className={cn(innerLayoutClasses, classNameInner)}>\n <div className=\"flex-shrink-0 md:flex-shrink-0\">\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 130 143\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n className={cn('h-5 w-5', logoColor, classNameLogo)}\n role=\"img\"\n >\n <title>Tollerud Logo</title>\n <g id=\"Page-1\" stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\">\n <g id=\"Tollerud-Monogram\" transform=\"translate(-86.000000, -109.000000)\" fill=\"currentColor\">\n <g id=\"Group-2\" transform=\"translate(32.000000, 55.000000)\">\n <g id=\"Group\" transform=\"translate(54.000000, 54.000000)\">\n <path d={MONOGRAM_PATH} id=\"Monogram\" />\n </g>\n </g>\n </g>\n </g>\n </svg>\n </div>\n\n <div className={textWrapperClasses}>\n <p className={cn(textLayoutClasses, classNameText)}>\n <span>\n <a\n href=\"https://tollerud.no\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cn(\n 'underline decoration-tollerud-yellow decoration-[3px] underline-offset-[4px] hover:opacity-80 transition-opacity',\n classNameLink,\n )}\n style={{\n textDecorationThickness: '3px',\n textUnderlineOffset: '4px',\n }}\n >\n {t.tollerudProject}\n </a>\n {attribution ? (\n <>\n {' '}\n <span>{attribution}</span>\n </>\n ) : null}{' '}\n </span>\n <span className={layout === 'row' ? 'ml-1' : 'md:ml-1'}>{t.allRightsReserved}</span>\n </p>\n </div>\n </div>\n </footer>\n )\n}","'use client'\n\nimport * as React from 'react'\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { X } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\nconst Dialog = DialogPrimitive.Root\nconst DialogTrigger = DialogPrimitive.Trigger\nconst DialogPortal = DialogPrimitive.Portal\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n 'fixed inset-0 z-50 bg-black/60 backdrop-blur-sm',\n className\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = 'DialogOverlay'\n\nconst DialogContent = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'fixed top-1/2 left-1/2 z-50 w-full max-w-lg -translate-x-1/2 -translate-y-1/2',\n 'rounded-lg border border-tollerud-border/30 bg-tollerud-noir-900 p-6 shadow-xl',\n 'data-[state=open]:animate-none data-[state=closed]:animate-none',\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute top-4 right-4 rounded-sm p-1 text-tollerud-text-muted hover:text-tollerud-foreground transition-colors cursor-pointer\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = 'DialogContent'\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn('flex flex-col gap-1.5 mb-4', className)}\n {...props}\n />\n)\nDialogHeader.displayName = 'DialogHeader'\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn('flex flex-col-reverse sm:flex-row sm:justify-end gap-2 mt-6', className)}\n {...props}\n />\n)\nDialogFooter.displayName = 'DialogFooter'\n\nconst DialogTitle = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn('text-base font-semibold text-tollerud-foreground', className)}\n {...props}\n />\n))\nDialogTitle.displayName = 'DialogTitle'\n\nconst DialogDescription = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn('text-sm text-tollerud-text-secondary', className)}\n {...props}\n />\n))\nDialogDescription.displayName = 'DialogDescription'\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}","'use client'\n\nimport * as React from 'react'\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip'\nimport { cn } from '@/lib/utils'\n\nconst TooltipProvider = TooltipPrimitive.Provider\n\n/* ── Mobile-friendly Tooltip ──\n Opens on hover (desktop) AND on click/tap (mobile).\n Uses React context so the Trigger can toggle Root's open state.\n Closes on second click/tap or click outside. */\n\ntype TooltipContextValue = {\n open: boolean\n setOpen: (open: boolean) => void\n}\n\nconst TooltipContext = React.createContext<TooltipContextValue | null>(null)\n\nfunction Tooltip({\n children,\n defaultOpen,\n open: controlledOpen,\n onOpenChange: controlledOnOpenChange,\n ...props\n}: React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Root>) {\n const [internalOpen, setInternalOpen] = React.useState(defaultOpen ?? false)\n const isControlled = controlledOpen !== undefined\n const open = isControlled ? controlledOpen : internalOpen\n const setOpen = isControlled ? (controlledOnOpenChange ?? setInternalOpen) : setInternalOpen\n\n return (\n <TooltipContext.Provider value={{ open, setOpen }}>\n <TooltipPrimitive.Root open={open} onOpenChange={(v: boolean) => setOpen(v)} {...props}>\n {children}\n </TooltipPrimitive.Root>\n </TooltipContext.Provider>\n )\n}\nTooltip.displayName = 'Tooltip'\n\nconst TooltipTrigger = React.forwardRef<\n React.ComponentRef<typeof TooltipPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Trigger>\n>(({ onClick, onTouchStart, children, ...props }, ref) => {\n const ctx = React.useContext(TooltipContext)\n const touchFired = React.useRef(false)\n\n return (\n <TooltipPrimitive.Trigger\n ref={ref}\n onClick={(e) => {\n // Skip click if this was triggered by a touch (already handled)\n if (touchFired.current) {\n touchFired.current = false\n return\n }\n // Toggle tooltip on click — covers mobile where hover doesn't fire\n if (ctx) {\n ctx.setOpen(!ctx.open)\n }\n onClick?.(e)\n }}\n onTouchStart={(e) => {\n touchFired.current = true\n // Open on touch for mobile\n if (ctx && !ctx.open) {\n ctx.setOpen(true)\n }\n onTouchStart?.(e)\n }}\n {...props}\n >\n {children}\n </TooltipPrimitive.Trigger>\n )\n})\nTooltipTrigger.displayName = 'TooltipTrigger'\n\nconst TooltipContent = React.forwardRef<\n React.ComponentRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 overflow-hidden rounded-md border border-tollerud-border/30',\n 'bg-tollerud-noir-800 px-3 py-1.5 text-xs text-tollerud-foreground',\n 'shadow-md',\n 'animate-in fade-in-0 zoom-in-95',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n 'data-[side=bottom]:slide-in-from-top-1',\n 'data-[side=left]:slide-in-from-right-1',\n 'data-[side=right]:slide-in-from-left-1',\n 'data-[side=top]:slide-in-from-bottom-1',\n className\n )}\n {...props}\n />\n))\nTooltipContent.displayName = 'TooltipContent'\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }","'use client'\n\nimport * as React from 'react'\nimport * as TabsPrimitive from '@radix-ui/react-tabs'\nimport { cn } from '@/lib/utils'\n\nconst Tabs = TabsPrimitive.Root\n\nconst TabsList = React.forwardRef<\n React.ComponentRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n 'inline-flex h-9 items-center justify-center rounded-lg',\n 'bg-tollerud-noir-800 p-1 text-tollerud-text-muted',\n className\n )}\n {...props}\n />\n))\nTabsList.displayName = 'TabsList'\n\nconst TabsTrigger = React.forwardRef<\n React.ComponentRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1',\n 'text-xs font-medium transition-all',\n 'text-tollerud-text-muted hover:text-tollerud-foreground',\n 'data-[state=active]:bg-tollerud-surface-raised data-[state=active]:text-tollerud-foreground data-[state=active]:shadow-sm',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-tollerud-yellow/50',\n className\n )}\n {...props}\n />\n))\nTabsTrigger.displayName = 'TabsTrigger'\n\nconst TabsContent = React.forwardRef<\n React.ComponentRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n 'mt-2 ring-offset-tollerud-black focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-tollerud-yellow/50 focus-visible:ring-offset-2',\n className\n )}\n {...props}\n />\n))\nTabsContent.displayName = 'TabsContent'\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }","import { cn } from '@/lib/utils'\n\nfunction Skeleton({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n 'animate-pulse rounded-md bg-tollerud-noir-800',\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Skeleton }","'use client'\n\nimport * as React from 'react'\nimport * as ProgressPrimitive from '@radix-ui/react-progress'\nimport { cn } from '@/lib/utils'\n\nconst Progress = React.forwardRef<\n React.ComponentRef<typeof ProgressPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>\n>(({ className, value, ...props }, ref) => (\n <ProgressPrimitive.Root\n ref={ref}\n className={cn(\n 'relative h-2 w-full overflow-hidden rounded-full bg-tollerud-noir-800',\n className\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className=\"h-full w-full flex-1 rounded-full bg-tollerud-yellow transition-all duration-300 ease-in-out\"\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n))\nProgress.displayName = 'Progress'\n\nexport { Progress }","'use client'\n\nimport { Toaster as SonnerToaster, type ToasterProps } from 'sonner'\nimport { useEffect, useState } from 'react'\n\nexport type TollerudToasterProps = ToasterProps & {\n /** Toast color theme. Wire to your app theme when you have one. */\n theme?: ToasterProps['theme']\n}\n\nconst Toaster = ({ theme = 'dark', ...props }: TollerudToasterProps) => {\n const [mobile, setMobile] = useState(false)\n\n useEffect(() => {\n const check = () => setMobile(window.innerWidth < 640)\n check()\n window.addEventListener('resize', check)\n return () => window.removeEventListener('resize', check)\n }, [])\n\n return (\n <SonnerToaster\n position={mobile ? 'top-center' : 'top-right'}\n theme={theme as ToasterProps['theme']}\n className=\"toaster group\"\n toastOptions={{\n classNames: {\n toast:\n 'group toast group-[.toaster]:bg-tollerud-noir-900 group-[.toaster]:text-tollerud-foreground ' +\n 'group-[.toaster]:border group-[.toaster]:border-tollerud-border/30 ' +\n 'group-[.toaster]:shadow-lg',\n description: 'group-[.toast]:text-tollerud-text-muted text-xs',\n actionButton:\n 'group-[.toast]:bg-tollerud-yellow group-[.toast]:text-tollerud-black group-[.toast]:text-xs ' +\n 'group-[.toast]:font-medium group-[.toast]:px-3 group-[.toast]:py-1 group-[.toast]:rounded',\n cancelButton:\n 'group-[.toast]:bg-tollerud-noir-800 group-[.toast]:text-tollerud-text-muted ' +\n 'group-[.toast]:text-xs group-[.toast]:px-3 group-[.toast]:py-1 group-[.toast]:rounded',\n success: 'group-[.toast]:border-l-tollerud-success group-[.toast]:border-l-2',\n error: 'group-[.toast]:border-l-tollerud-error group-[.toast]:border-l-2',\n warning: 'group-[.toast]:border-l-tollerud-yellow group-[.toast]:border-l-2',\n info: 'group-[.toast]:border-l-tollerud-info group-[.toast]:border-l-2',\n },\n }}\n {...props}\n />\n )\n}\n\nexport { Toaster }","import { forwardRef, type HTMLAttributes } from 'react'\nimport { cn } from '@/lib/utils'\n\n// ── Empty ──\n\nexport interface EmptyProps extends HTMLAttributes<HTMLDivElement> {}\n\nconst Empty = forwardRef<HTMLDivElement, EmptyProps>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex w-full flex-1 flex-col items-center justify-center text-center py-12',\n className\n )}\n {...props}\n />\n )\n }\n)\nEmpty.displayName = 'Empty'\n\n// ── EmptyHeader ──\n\nconst EmptyHeader = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex max-w-sm flex-col items-center gap-2',\n className\n )}\n {...props}\n />\n )\n }\n)\nEmptyHeader.displayName = 'EmptyHeader'\n\n// ── EmptyIcon ──\n\nconst EmptyIcon = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex items-center justify-center w-12 h-12 rounded-full bg-tollerud-noir-800 text-tollerud-text-muted mb-2',\n className\n )}\n {...props}\n />\n )\n }\n)\nEmptyIcon.displayName = 'EmptyIcon'\n\n// ── EmptyTitle ──\n\nconst EmptyTitle = forwardRef<HTMLHeadingElement, HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => {\n return (\n <h3\n ref={ref}\n className={cn(\n 'text-base font-semibold text-tollerud-foreground',\n className\n )}\n {...props}\n />\n )\n }\n)\nEmptyTitle.displayName = 'EmptyTitle'\n\n// ── EmptyDescription ──\n\nconst EmptyDescription = forwardRef<HTMLParagraphElement, HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => {\n return (\n <p\n ref={ref}\n className={cn(\n 'text-sm text-tollerud-text-secondary max-w-sm',\n className\n )}\n {...props}\n />\n )\n }\n)\nEmptyDescription.displayName = 'EmptyDescription'\n\n// ── EmptyContent ──\n\nconst EmptyContent = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex w-full max-w-sm flex-col items-center gap-4 mt-4',\n className\n )}\n {...props}\n />\n )\n }\n)\nEmptyContent.displayName = 'EmptyContent'\n\nexport {\n Empty,\n EmptyHeader,\n EmptyIcon,\n EmptyTitle,\n EmptyDescription,\n EmptyContent,\n}\nexport type { }","'use client'\n\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'\nimport { type HTMLAttributes, forwardRef, type ReactNode } from 'react'\nimport { cn } from '@/lib/utils'\n\n/* ──────────────────── DropdownMenu ──────────────────── */\n\nconst DropdownMenu = DropdownMenuPrimitive.Root\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\n\nconst DropdownMenuContent = forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 min-w-[9rem] overflow-hidden rounded-lg border p-1 shadow-md',\n 'bg-tollerud-noir-850 border-tollerud-border/30 text-tollerud-text-primary',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n 'data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2',\n 'data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n))\nDropdownMenuContent.displayName = 'DropdownMenuContent'\n\nconst DropdownMenuItem = forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-md px-2 py-1.5 text-sm outline-none',\n 'text-tollerud-text-secondary data-[highlighted]:text-tollerud-text-primary',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n 'data-[highlighted]:bg-tollerud-surface-raised',\n inset && 'pl-8',\n className\n )}\n {...props}\n />\n))\nDropdownMenuItem.displayName = 'DropdownMenuItem'\n\nconst DropdownMenuSeparator = forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-tollerud-border/30', className)}\n {...props}\n />\n))\nDropdownMenuSeparator.displayName = 'DropdownMenuSeparator'\n\nconst DropdownMenuLabel = forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn('px-2 py-1.5 text-xs font-semibold text-tollerud-text-muted', inset && 'pl-8', className)}\n {...props}\n />\n))\nDropdownMenuLabel.displayName = 'DropdownMenuLabel'\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuLabel,\n}","'use client'\n\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { type ComponentPropsWithoutRef, type ReactNode, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\n/* ──────────────────── Sheet (slide-in panel) ──────────────────── */\n\nexport type SheetSide = 'left' | 'right'\n\nexport interface SheetProps {\n open?: boolean\n onOpenChange?: (open: boolean) => void\n children: ReactNode\n}\n\nconst Sheet = ({ open, onOpenChange, children }: SheetProps) => (\n <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>\n {children}\n </DialogPrimitive.Root>\n)\n\nconst SheetTrigger = DialogPrimitive.Trigger\n\nconst SheetClose = DialogPrimitive.Close\n\ninterface SheetContentProps extends ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {\n side?: SheetSide\n}\n\nconst SheetOverlay = forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Overlay>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n 'fixed inset-0 z-50 bg-black/60 backdrop-blur-sm',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className\n )}\n {...props}\n />\n))\nSheetOverlay.displayName = 'SheetOverlay'\n\nconst SheetContent = forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Content>,\n SheetContentProps\n>(({ className, children, side = 'right', ...props }, ref) => (\n <SheetOverlay>\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'fixed z-50 gap-4 bg-tollerud-noir-900 border-tollerud-border/30 p-6 shadow-lg',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n side === 'right' && [\n 'inset-y-0 right-0 h-full w-full max-w-md border-l',\n 'data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right',\n ],\n side === 'left' && [\n 'inset-y-0 left-0 h-full w-full max-w-md border-r',\n 'data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left',\n ],\n className\n )}\n {...props}\n >\n {children}\n <SheetClose className=\"absolute right-4 top-4 rounded-sm opacity-70 hover:opacity-100 transition-opacity text-tollerud-text-muted hover:text-tollerud-text-primary\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M18 6 6 18\" /><path d=\"m6 6 12 12\" />\n </svg>\n <span className=\"sr-only\">Close</span>\n </SheetClose>\n </DialogPrimitive.Content>\n </SheetOverlay>\n))\nSheetContent.displayName = 'SheetContent'\n\nconst SheetHeader = ({ className, ...props }: { className?: string; children?: ReactNode }) => (\n <div className={cn('flex flex-col space-y-1.5 text-left', className)} {...props} />\n)\n\nconst SheetTitle = forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Title>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn('text-base font-semibold text-tollerud-text-primary', className)}\n {...props}\n />\n))\nSheetTitle.displayName = 'SheetTitle'\n\nconst SheetDescription = forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Description>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn('text-sm text-tollerud-text-secondary', className)}\n {...props}\n />\n))\nSheetDescription.displayName = 'SheetDescription'\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetTitle,\n SheetDescription,\n}","'use client'\n\nimport { useState, useMemo, forwardRef, type ReactNode } from 'react'\nimport { cn } from '@/lib/utils'\n\n/* ──────────────────── Sortable & Filterable Data Table ──────────────────── */\n\nexport interface Column<T> {\n key: string\n label: string\n sortable?: boolean\n filterable?: boolean\n align?: 'left' | 'center' | 'right'\n width?: string\n render?: (value: unknown, row: T) => ReactNode\n}\n\nexport interface DataTableProps<T extends Record<string, unknown>> {\n columns: Column<T>[]\n data: T[]\n /** Row key extractor — defaults to `row.id` or `row.key` */\n rowKey?: keyof T | ((row: T) => string | number)\n onRowClick?: (row: T) => void\n className?: string\n emptyMessage?: string\n}\n\ninterface DataTableInnerProps<T extends Record<string, unknown>> extends DataTableProps<T> {\n forwardedRef?: React.Ref<HTMLDivElement>\n}\n\nfunction DataTableInner<T extends Record<string, unknown>>({\n columns,\n data,\n rowKey,\n onRowClick,\n className,\n emptyMessage = 'No data',\n forwardedRef,\n}: DataTableInnerProps<T>) {\n const [sortKey, setSortKey] = useState<string | null>(null)\n const [sortDir, setSortDir] = useState<'asc' | 'desc'>('asc')\n const [filters, setFilters] = useState<Record<string, string>>({})\n\n const filtered = useMemo(() => {\n const activeFilters = Object.entries(filters).filter(([, v]) => v.trim() !== '')\n if (activeFilters.length === 0) return data\n\n return data.filter((row) =>\n activeFilters.every(([key, filterValue]) => {\n const cellValue = String(row[key] ?? '').toLowerCase()\n return cellValue.includes(filterValue.toLowerCase())\n })\n )\n }, [data, filters])\n\n const sorted = useMemo(() => {\n if (!sortKey) return filtered\n const col = columns.find((c) => c.key === sortKey)\n if (!col?.sortable) return filtered\n\n return [...filtered].sort((a, b) => {\n const aVal = a[sortKey]\n const bVal = b[sortKey]\n\n // Handle numbers vs strings\n if (typeof aVal === 'number' && typeof bVal === 'number') {\n return sortDir === 'asc' ? aVal - bVal : bVal - aVal\n }\n\n const aStr = String(aVal ?? '')\n const bStr = String(bVal ?? '')\n const cmp = aStr.localeCompare(bStr, 'nb', { numeric: true })\n return sortDir === 'asc' ? cmp : -cmp\n })\n }, [filtered, sortKey, sortDir, columns])\n\n const getRowKey = (row: T, i: number): string | number => {\n if (typeof rowKey === 'function') return rowKey(row)\n if (rowKey) return row[rowKey] as string | number\n return (row.id ?? row.key ?? i) as string | number\n }\n\n const toggleSort = (key: string) => {\n if (sortKey === key) {\n setSortDir((d) => (d === 'asc' ? 'desc' : 'asc'))\n } else {\n setSortKey(key)\n setSortDir('asc')\n }\n }\n\n const updateFilter = (key: string, value: string) => {\n setFilters((prev) => {\n const next = { ...prev }\n if (value.trim() === '') {\n delete next[key]\n } else {\n next[key] = value\n }\n return next\n })\n }\n\n const hasActiveFilters = Object.values(filters).some((v) => v.trim() !== '')\n const filterableColumns = columns.filter((c) => c.filterable)\n\n return (\n <div ref={forwardedRef} className={cn('overflow-x-auto rounded-lg border border-tollerud-border/30', className)}>\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b border-tollerud-border/30 bg-tollerud-noir-900\">\n {columns.map((col) => (\n <th\n key={col.key}\n className={cn(\n 'px-3 py-2.5 text-xs font-semibold text-tollerud-text-muted uppercase tracking-wider',\n col.sortable && 'cursor-pointer select-none hover:text-tollerud-text-primary transition-colors',\n col.align === 'right' && 'text-right',\n col.align === 'center' && 'text-center',\n )}\n style={col.width ? { width: col.width } : undefined}\n onClick={() => col.sortable && toggleSort(col.key)}\n >\n <span className=\"inline-flex items-center gap-1.5\">\n {col.label}\n {col.sortable && sortKey === col.key && (\n <span className=\"text-tollerud-accent\">{sortDir === 'asc' ? '↑' : '↓'}</span>\n )}\n {col.sortable && sortKey !== col.key && (\n <span className=\"text-tollerud-text-muted/30\">↕</span>\n )}\n {col.filterable && (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cn(\n 'opacity-40',\n filters[col.key] && 'opacity-100 text-tollerud-yellow'\n )}\n >\n <path d=\"M4 4h16v2.172a2 2 0 0 1-.586 1.414L15 12v7l-6 2v-8.5L4.52 7.53A2 2 0 0 1 4 6.16V4z\" />\n </svg>\n )}\n </span>\n </th>\n ))}\n </tr>\n {/* Filter row — only if at least one column is filterable */}\n {filterableColumns.length > 0 && (\n <tr className=\"border-b border-tollerud-border/20\">\n {columns.map((col) => (\n <th\n key={`filter-${col.key}`}\n className={cn(\n 'px-1.5 py-1',\n col.align === 'right' && 'text-right',\n col.align === 'center' && 'text-center',\n )}\n >\n {col.filterable ? (\n <input\n type=\"text\"\n placeholder={`Filter ${col.label.toLowerCase()}…`}\n value={filters[col.key] ?? ''}\n onChange={(e) => updateFilter(col.key, e.target.value)}\n className={cn(\n 'w-full px-2 py-1 text-xs rounded border transition-colors outline-none',\n 'bg-tollerud-noir-900/50 border-tollerud-border/20 text-tollerud-text-primary placeholder:text-tollerud-text-muted/40',\n 'focus:border-tollerud-yellow/40 focus:ring-1 focus:ring-tollerud-yellow/20',\n )}\n />\n ) : null}\n </th>\n ))}\n </tr>\n )}\n </thead>\n <tbody>\n {sorted.length === 0 ? (\n <tr>\n <td\n colSpan={columns.length}\n className=\"px-3 py-8 text-center text-sm text-tollerud-text-muted\"\n >\n {hasActiveFilters ? 'No matching rows' : emptyMessage}\n </td>\n </tr>\n ) : (\n sorted.map((row, i) => (\n <tr\n key={getRowKey(row, i)}\n className={cn(\n 'border-b border-tollerud-border/20 transition-colors',\n onRowClick && 'cursor-pointer hover:bg-tollerud-surface-raised/50',\n )}\n onClick={() => onRowClick?.(row)}\n >\n {columns.map((col) => {\n const value = row[col.key]\n return (\n <td\n key={col.key}\n className={cn(\n 'px-3 py-2.5 text-tollerud-text-secondary',\n col.align === 'right' && 'text-right',\n col.align === 'center' && 'text-center',\n 'font-mono text-xs',\n )}\n >\n {col.render ? col.render(value, row) : String(value ?? '—')}\n </td>\n )\n })}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n )\n}\n\nconst DataTable = forwardRef(<T extends Record<string, unknown>>(\n props: DataTableProps<T>,\n ref: React.Ref<HTMLDivElement>\n) => <DataTableInner {...props} forwardedRef={ref} />)\n\nDataTable.displayName = 'DataTable'\n\nexport { DataTable }","'use client'\n\nimport { useRef, useState, type ReactNode } from 'react'\nimport { cn } from '@/lib/utils'\n\n/* ──────────────────── GlowCard (cursor-follow glow wrapper) ──────────────────── */\n\nexport interface GlowCardProps {\n children: ReactNode\n className?: string\n /** Color of the glow. Default: accent yellow */\n glowColor?: string\n /** Glow intensity (0–1). Default: 0.15 */\n intensity?: number\n}\n\nfunction GlowCard({\n children,\n className,\n glowColor = 'var(--tollerud-accent, #FFFF00)',\n intensity = 0.15,\n}: GlowCardProps) {\n const ref = useRef<HTMLDivElement>(null)\n const [pos, setPos] = useState({ x: 0, y: 0 })\n const [isHovered, setIsHovered] = useState(false)\n\n const handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {\n if (!ref.current) return\n const rect = ref.current.getBoundingClientRect()\n setPos({\n x: ((e.clientX - rect.left) / rect.width) * 100,\n y: ((e.clientY - rect.top) / rect.height) * 100,\n })\n }\n\n return (\n <div\n ref={ref}\n className={cn('relative overflow-hidden', className)}\n onMouseMove={handleMouseMove}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {/* Follow-cursor glow */}\n <div\n className=\"pointer-events-none absolute inset-0 transition-opacity duration-300\"\n style={{\n opacity: isHovered ? 1 : 0,\n background: `radial-gradient(600px circle at ${pos.x}% ${pos.y}%, ${glowColor} ${intensity * 100}%, transparent 70%)`,\n }}\n />\n {/* Content */}\n <div className=\"relative z-10\">{children}</div>\n </div>\n )\n}\n\nexport { GlowCard }\nexport default GlowCard","'use client'\n\nimport { type ReactNode } from 'react'\nimport { cn } from '@/lib/utils'\nimport type { HostCardProps } from './HostCard'\nimport type { StatCardProps } from './StatCard'\nimport type { ServiceHealthCardProps } from './ServiceHealthCard'\nimport type { IncidentCardProps, IncidentSeverity } from './IncidentCard'\nimport type { BackupJob } from './BackupStatusPanel'\n\n/* ──────────────────── Bento Grid Dashboard Template ──────────────────── */\n\nexport interface BentoDashboardProps {\n title: string\n hosts?: HostCardProps[]\n metrics?: StatCardProps[]\n services?: ServiceHealthCardProps[]\n incidents?: { title: string; severity: IncidentSeverity; timestamp: string; service: string; description?: string; acknowledged?: boolean }[]\n backupJobs?: BackupJob[]\n className?: string\n /** Render the incident list footer */\n renderIncidentFooter?: () => ReactNode\n}\n\nexport function BentoDashboard({\n title,\n hosts = [],\n metrics = [],\n services = [],\n incidents = [],\n className,\n}: BentoDashboardProps) {\n return (\n <div className={cn('space-y-4', className)}>\n {/* Title bar */}\n <div className=\"flex items-center justify-between\">\n <div>\n <h2 className=\"text-lg font-semibold text-tollerud-text-primary\">{title}</h2>\n <p className=\"text-xs text-tollerud-text-muted\">\n {hosts.length} hosts · {services.length} services\n {incidents.length > 0 && ` · ${incidents.length} active incident${incidents.length > 1 ? 's' : ''}`}\n </p>\n </div>\n </div>\n\n {/* Row 1: Host cards — bento asymmetric */}\n {hosts.length > 0 && (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n {/* First host spans wider */}\n <div className=\"md:col-span-2 lg:col-span-1\">\n <HostCardComponent host={hosts[0]} />\n </div>\n {/* Remaining hosts in the second column area */}\n <div className=\"grid grid-cols-1 gap-3 md:col-span-2 lg:col-span-1\">\n {hosts.slice(1).map((h, i) => (\n <HostCardComponent key={h.hostname ?? i} host={h} />\n ))}\n </div>\n </div>\n )}\n\n {/* Row 2: Metrics + Services — side by side */}\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-3\">\n {/* Metrics grid — 2 columns within */}\n {metrics.length > 0 && (\n <div className=\"lg:col-span-2\">\n <SectionLabel>Metrics</SectionLabel>\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-2\">\n {metrics.map((m, i) => (\n <StatCardComponent key={m.label ?? i} stat={m} />\n ))}\n </div>\n </div>\n )}\n\n {/* Services list */}\n {services.length > 0 && (\n <div>\n <SectionLabel>Services</SectionLabel>\n <div className=\"space-y-2\">\n {services.slice(0, 4).map((s, i) => (\n <div key={s.service ?? i} className=\"rounded-lg border border-tollerud-border/20 bg-tollerud-surface p-3\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm font-medium text-tollerud-text-primary\">{s.service}</span>\n <span className={cn(\n 'text-xs px-1.5 py-0.5 rounded-full font-medium',\n s.status === 'online' && 'text-tollerud-accent bg-tollerud-accent/10',\n s.status === 'warning' && 'text-tollerud-warning bg-tollerud-warning/10',\n s.status === 'offline' && 'text-tollerud-error bg-tollerud-error/10',\n s.status === 'idle' && 'text-tollerud-text-muted bg-tollerud-noir-800',\n )}>\n {s.status}\n </span>\n </div>\n {s.responseTime && (\n <p className=\"text-xs text-tollerud-text-muted mt-1\">{s.responseTime} response</p>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n\n {/* Row 3: Incidents — full width */}\n {incidents.length > 0 && (\n <div>\n <SectionLabel>Recent Incidents</SectionLabel>\n <div className=\"space-y-1.5\">\n {incidents.slice(0, 4).map((inc, i) => (\n <IncidentCardItem key={inc.title + i} incident={inc} />\n ))}\n </div>\n </div>\n )}\n </div>\n )\n}\n\n/* ────────── Internal sub-components for rendering ────────── */\n\nfunction SectionLabel({ children }: { children: ReactNode }) {\n return (\n <p className=\"text-xs font-semibold text-tollerud-text-muted uppercase tracking-wider mb-2\">{children}</p>\n )\n}\n\nfunction HostCardComponent({ host }: { host: HostCardProps }) {\n return (\n <div className={cn(\n 'rounded-xl border p-4',\n host.status === 'online' ? 'border-tollerud-border/30 bg-tollerud-surface' :\n host.status === 'warning' ? 'border-tollerud-warning/30 bg-tollerud-warning/5' :\n 'border-tollerud-border/20 bg-tollerud-surface opacity-70'\n )}>\n <div className=\"flex items-center justify-between mb-3\">\n <div className=\"flex items-center gap-2\">\n <StatusDotComp status={host.status as 'online' | 'offline' | 'warning'} />\n <span className=\"text-sm font-semibold text-tollerud-text-primary\">{host.hostname}</span>\n </div>\n <span className=\"text-xs text-tollerud-text-muted font-mono\">{host.ip}</span>\n </div>\n <div className=\"grid grid-cols-2 gap-2 text-xs\">\n {host.cpu && <MetricBadge label=\"CPU\" value={host.cpu} />}\n {host.memory && <MetricBadge label=\"Mem\" value={host.memory} />}\n {host.disk && <MetricBadge label=\"Disk\" value={host.disk} />}\n {host.uptime && <MetricBadge label=\"Up\" value={host.uptime} />}\n </div>\n </div>\n )\n}\n\nfunction StatCardComponent({ stat }: { stat: StatCardProps }) {\n return (\n <div className=\"rounded-lg border border-tollerud-border/20 bg-tollerud-surface p-3\">\n <p className=\"text-xs text-tollerud-text-muted\">{stat.label}</p>\n <p className=\"text-lg font-semibold text-tollerud-text-primary mt-0.5\">{stat.value}</p>\n {stat.change && (\n <span className={cn(\n 'text-xs font-medium',\n stat.change.direction === 'up' ? 'text-tollerud-accent' : 'text-tollerud-error'\n )}>\n {stat.change.value}\n </span>\n )}\n </div>\n )\n}\n\nfunction IncidentCardItem({ incident }: { incident: { title: string; severity: IncidentSeverity; timestamp: string; service: string; description?: string; acknowledged?: boolean } }) {\n return (\n <div className={cn(\n 'flex items-start gap-3 rounded-lg border p-3',\n incident.acknowledged ? 'border-tollerud-border/10 bg-tollerud-noir-900/50 opacity-60' : 'border-tollerud-border/20 bg-tollerud-surface'\n )}>\n <SeverityDot severity={incident.severity} />\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium text-tollerud-text-primary truncate\">{incident.title}</span>\n {incident.acknowledged && (\n <span className=\"text-xs text-tollerud-text-muted\">(acknowledged)</span>\n )}\n </div>\n <div className=\"flex items-center gap-2 text-xs text-tollerud-text-muted mt-0.5\">\n <span>{incident.service}</span>\n <span>·</span>\n <span>{incident.timestamp}</span>\n </div>\n {incident.description && (\n <p className=\"text-xs text-tollerud-text-secondary mt-1\">{incident.description}</p>\n )}\n </div>\n </div>\n )\n}\n\nfunction StatusDotComp({ status }: { status: 'online' | 'offline' | 'warning' }) {\n return (\n <span className={cn(\n 'inline-block w-2 h-2 rounded-full',\n status === 'online' && 'bg-tollerud-accent shadow-[0_0_4px_var(--tollerud-accent)]',\n status === 'warning' && 'bg-tollerud-warning',\n status === 'offline' && 'bg-tollerud-error',\n )} />\n )\n}\n\nfunction SeverityDot({ severity }: { severity: IncidentSeverity }) {\n return (\n <span className={cn(\n 'inline-block w-2 h-2 rounded-full mt-1 shrink-0',\n severity === 'critical' && 'bg-tollerud-error shadow-[0_0_4px_var(--tollerud-error)]',\n severity === 'high' && 'bg-tollerud-warning',\n severity === 'medium' && 'bg-tollerud-accent',\n severity === 'low' && 'bg-tollerud-text-muted',\n severity === 'info' && 'bg-tollerud-info',\n )} />\n )\n}\n\nfunction MetricBadge({ label, value }: { label: string; value: string }) {\n return (\n <div className=\"rounded bg-tollerud-noir-800 px-2 py-1.5\">\n <span className=\"text-tollerud-text-muted\">{label}</span>\n <span className=\"float-right text-tollerud-text-primary font-mono\">{value}</span>\n </div>\n )\n}\n\nexport default BentoDashboard","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface DividerProps extends HTMLAttributes<HTMLDivElement> {\n /** Layout direction */\n orientation?: 'horizontal' | 'vertical'\n /** Optional label rendered inline (horizontal orientation only) */\n label?: React.ReactNode\n}\n\nconst Divider = forwardRef<HTMLDivElement, DividerProps>(\n ({ className, orientation = 'horizontal', label, ...props }, ref) => {\n if (orientation === 'vertical') {\n return (\n <div\n ref={ref}\n role=\"separator\"\n aria-orientation=\"vertical\"\n className={cn('w-px self-stretch bg-tollerud-border', className)}\n {...props}\n />\n )\n }\n\n if (label) {\n return (\n <div\n ref={ref}\n role=\"separator\"\n aria-orientation=\"horizontal\"\n className={cn('flex items-center gap-3 text-xs text-tollerud-text-muted', className)}\n {...props}\n >\n <span className=\"h-px flex-1 bg-tollerud-border\" />\n <span>{label}</span>\n <span className=\"h-px flex-1 bg-tollerud-border\" />\n </div>\n )\n }\n\n return (\n <div\n ref={ref}\n role=\"separator\"\n aria-orientation=\"horizontal\"\n className={cn('h-px w-full bg-tollerud-border', className)}\n {...props}\n />\n )\n }\n)\nDivider.displayName = 'Divider'\n\nexport { Divider }\n","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\nconst pillVariants = {\n outline: 'bg-transparent border border-tollerud-border text-tollerud-text-secondary',\n solid: 'bg-tollerud-surface-raised text-tollerud-text-primary',\n accent: 'bg-tollerud-yellow/15 border border-tollerud-yellow/30 text-tollerud-yellow',\n} as const\n\nexport interface PillProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: keyof typeof pillVariants\n}\n\nconst Pill = forwardRef<HTMLSpanElement, PillProps>(\n ({ className, variant = 'outline', ...props }, ref) => {\n return (\n <span\n ref={ref}\n className={cn(\n 'inline-flex items-center gap-1 px-2.5 py-1 text-xs font-medium rounded-full leading-none',\n pillVariants[variant],\n className\n )}\n {...props}\n />\n )\n }\n)\nPill.displayName = 'Pill'\n\nexport { Pill }\n","import { type HTMLAttributes, forwardRef, useState } from 'react'\nimport { cn } from '@/lib/utils'\n\nconst avatarSizes = {\n sm: 'h-6 w-6 text-[10px]',\n md: 'h-8 w-8 text-xs',\n lg: 'h-11 w-11 text-sm',\n} as const\n\nfunction initialsFrom(name: string) {\n const parts = name.trim().split(/\\s+/).filter(Boolean)\n if (parts.length === 0) return ''\n if (parts.length === 1) return parts[0]!.slice(0, 2).toUpperCase()\n return (parts[0]![0] + parts[parts.length - 1]![0]).toUpperCase()\n}\n\nexport interface AvatarProps extends HTMLAttributes<HTMLSpanElement> {\n /** Image source */\n src?: string\n /** Accessible name / used to derive initials fallback */\n name?: string\n /** Explicit fallback content (overrides derived initials) */\n fallback?: React.ReactNode\n size?: keyof typeof avatarSizes\n}\n\nconst Avatar = forwardRef<HTMLSpanElement, AvatarProps>(\n ({ className, src, name, fallback, size = 'md', ...props }, ref) => {\n const [errored, setErrored] = useState(false)\n const showImage = !!src && !errored\n\n return (\n <span\n ref={ref}\n className={cn(\n 'relative inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full select-none',\n 'bg-tollerud-surface-raised text-tollerud-text-secondary font-medium',\n 'ring-1 ring-tollerud-border',\n avatarSizes[size],\n className\n )}\n {...props}\n >\n {showImage ? (\n // eslint-disable-next-line @next/next/no-img-element\n <img\n src={src}\n alt={name ?? ''}\n className=\"h-full w-full object-cover\"\n onError={() => setErrored(true)}\n />\n ) : (\n <span aria-hidden={!!name}>{fallback ?? (name ? initialsFrom(name) : null)}</span>\n )}\n </span>\n )\n }\n)\nAvatar.displayName = 'Avatar'\n\nexport interface AvatarGroupProps extends HTMLAttributes<HTMLDivElement> {\n /** Maximum avatars to render before collapsing into a \"+N\" overflow indicator */\n max?: number\n size?: keyof typeof avatarSizes\n children: React.ReactNode\n}\n\nconst AvatarGroup = forwardRef<HTMLDivElement, AvatarGroupProps>(\n ({ className, max, size = 'md', children, ...props }, ref) => {\n const items = Array.isArray(children) ? children : [children]\n const visible = max ? items.slice(0, max) : items\n const overflow = max ? items.length - max : 0\n\n return (\n <div\n ref={ref}\n className={cn('flex items-center -space-x-2', className)}\n {...props}\n >\n {visible.map((child, i) => (\n <span key={i} className=\"ring-2 ring-tollerud-surface rounded-full\">\n {child}\n </span>\n ))}\n {overflow > 0 && (\n <span\n className={cn(\n 'relative inline-flex shrink-0 items-center justify-center rounded-full select-none',\n 'bg-tollerud-surface-raised text-tollerud-text-muted font-medium',\n 'ring-2 ring-tollerud-surface',\n avatarSizes[size]\n )}\n >\n +{overflow}\n </span>\n )}\n </div>\n )\n }\n)\nAvatarGroup.displayName = 'AvatarGroup'\n\nexport { Avatar, AvatarGroup }\n","import { type HTMLAttributes, Fragment, forwardRef } from 'react'\nimport { ChevronRight } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\nexport interface BreadcrumbItem {\n label: React.ReactNode\n href?: string\n onClick?: () => void\n}\n\nexport interface BreadcrumbProps extends Omit<HTMLAttributes<HTMLElement>, 'children'> {\n items: BreadcrumbItem[]\n /** Custom separator (defaults to a chevron) */\n separator?: React.ReactNode\n}\n\nconst Breadcrumb = forwardRef<HTMLElement, BreadcrumbProps>(\n ({ className, items, separator, ...props }, ref) => {\n return (\n <nav ref={ref} aria-label=\"Breadcrumb\" className={cn('text-sm', className)} {...props}>\n <ol className=\"flex items-center gap-1.5 flex-wrap\">\n {items.map((item, i) => {\n const isLast = i === items.length - 1\n const content =\n !isLast && (item.href || item.onClick) ? (\n <a\n href={item.href}\n onClick={item.onClick}\n className=\"text-tollerud-text-secondary hover:text-tollerud-text-primary transition-colors duration-[150ms]\"\n >\n {item.label}\n </a>\n ) : (\n <span\n aria-current={isLast ? 'page' : undefined}\n className={isLast ? 'text-tollerud-text-primary font-medium' : 'text-tollerud-text-secondary'}\n >\n {item.label}\n </span>\n )\n\n return (\n <Fragment key={i}>\n <li className=\"flex items-center gap-1.5\">{content}</li>\n {!isLast && (\n <li aria-hidden=\"true\" className=\"flex items-center text-tollerud-text-muted\">\n {separator ?? <ChevronRight size={14} />}\n </li>\n )}\n </Fragment>\n )\n })}\n </ol>\n </nav>\n )\n }\n)\nBreadcrumb.displayName = 'Breadcrumb'\n\nexport { Breadcrumb }\n","import { type HTMLAttributes, forwardRef } from 'react'\nimport { ChevronLeft, ChevronRight, MoreHorizontal } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\nexport interface PaginationProps extends Omit<HTMLAttributes<HTMLElement>, 'onChange'> {\n /** Current 1-indexed page */\n page: number\n /** Total number of pages */\n pageCount: number\n /** Called with the next page number when the user navigates */\n onChange: (page: number) => void\n /** Number of sibling pages to show on either side of the current page */\n siblingCount?: number\n}\n\nfunction getPageRange(page: number, pageCount: number, siblingCount: number): (number | 'ellipsis')[] {\n const totalVisible = siblingCount * 2 + 5\n if (pageCount <= totalVisible) {\n return Array.from({ length: pageCount }, (_, i) => i + 1)\n }\n\n const left = Math.max(page - siblingCount, 1)\n const right = Math.min(page + siblingCount, pageCount)\n\n const range: (number | 'ellipsis')[] = [1]\n if (left > 2) range.push('ellipsis')\n for (let p = left === 1 ? 2 : left; p <= (right === pageCount ? pageCount - 1 : right); p++) {\n range.push(p)\n }\n if (right < pageCount - 1) range.push('ellipsis')\n if (pageCount > 1) range.push(pageCount)\n return range\n}\n\nconst navButtonClasses =\n 'inline-flex h-8 min-w-8 items-center justify-center rounded px-2 text-sm transition-colors duration-[150ms] disabled:opacity-40 disabled:pointer-events-none'\n\nconst Pagination = forwardRef<HTMLElement, PaginationProps>(\n ({ className, page, pageCount, onChange, siblingCount = 1, ...props }, ref) => {\n const range = getPageRange(page, pageCount, siblingCount)\n\n return (\n <nav ref={ref} aria-label=\"Pagination\" className={cn('flex items-center gap-1', className)} {...props}>\n <button\n type=\"button\"\n aria-label=\"Previous page\"\n disabled={page <= 1}\n onClick={() => onChange(page - 1)}\n className={cn(navButtonClasses, 'text-tollerud-text-secondary hover:bg-tollerud-surface-hover')}\n >\n <ChevronLeft size={16} />\n </button>\n\n {range.map((item, i) =>\n item === 'ellipsis' ? (\n <span key={`e-${i}`} className=\"inline-flex h-8 w-8 items-center justify-center text-tollerud-text-muted\">\n <MoreHorizontal size={16} />\n </span>\n ) : (\n <button\n key={item}\n type=\"button\"\n aria-current={item === page ? 'page' : undefined}\n onClick={() => onChange(item)}\n className={cn(\n navButtonClasses,\n item === page\n ? 'bg-tollerud-yellow text-tollerud-noir-black font-medium'\n : 'text-tollerud-text-secondary hover:bg-tollerud-surface-hover'\n )}\n >\n {item}\n </button>\n )\n )}\n\n <button\n type=\"button\"\n aria-label=\"Next page\"\n disabled={page >= pageCount}\n onClick={() => onChange(page + 1)}\n className={cn(navButtonClasses, 'text-tollerud-text-secondary hover:bg-tollerud-surface-hover')}\n >\n <ChevronRight size={16} />\n </button>\n </nav>\n )\n }\n)\nPagination.displayName = 'Pagination'\n\nexport { Pagination }\n","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface SegmentedOption {\n value: string\n label: React.ReactNode\n disabled?: boolean\n}\n\nexport interface SegmentedProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {\n options: SegmentedOption[]\n value: string\n onChange: (value: string) => void\n size?: 'sm' | 'md'\n}\n\nconst Segmented = forwardRef<HTMLDivElement, SegmentedProps>(\n ({ className, options, value, onChange, size = 'md', ...props }, ref) => {\n return (\n <div\n ref={ref}\n role=\"radiogroup\"\n className={cn(\n 'inline-flex items-center gap-0.5 rounded-lg p-1 bg-tollerud-surface-raised border border-tollerud-border',\n className\n )}\n {...props}\n >\n {options.map((opt) => {\n const active = opt.value === value\n return (\n <button\n key={opt.value}\n type=\"button\"\n role=\"radio\"\n aria-checked={active}\n disabled={opt.disabled}\n onClick={() => !opt.disabled && onChange(opt.value)}\n className={cn(\n 'rounded-md font-medium transition-colors duration-[150ms]',\n size === 'sm' ? 'px-2.5 py-1 text-xs' : 'px-3.5 py-1.5 text-sm',\n active\n ? 'bg-tollerud-yellow text-tollerud-noir-black'\n : 'text-tollerud-text-secondary hover:text-tollerud-text-primary',\n opt.disabled && 'opacity-40 pointer-events-none'\n )}\n >\n {opt.label}\n </button>\n )\n })}\n </div>\n )\n }\n)\nSegmented.displayName = 'Segmented'\n\nexport { Segmented }\n","import { type HTMLAttributes, forwardRef } from 'react'\nimport { Check } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\nexport interface StepperStep {\n label: React.ReactNode\n description?: React.ReactNode\n}\n\nexport interface StepperProps extends HTMLAttributes<HTMLOListElement> {\n steps: StepperStep[]\n /** 0-indexed current step */\n current: number\n orientation?: 'horizontal' | 'vertical'\n}\n\nconst Stepper = forwardRef<HTMLOListElement, StepperProps>(\n ({ className, steps, current, orientation = 'horizontal', ...props }, ref) => {\n const vertical = orientation === 'vertical'\n\n return (\n <ol\n ref={ref}\n className={cn('flex', vertical ? 'flex-col gap-0' : 'items-start gap-0 w-full', className)}\n {...props}\n >\n {steps.map((step, i) => {\n const status = i < current ? 'complete' : i === current ? 'active' : 'upcoming'\n const isLast = i === steps.length - 1\n\n return (\n <li\n key={i}\n className={cn(\n 'flex',\n vertical ? 'flex-row gap-3' : 'flex-col flex-1 gap-2',\n !vertical && !isLast && 'pr-2'\n )}\n >\n <div className={cn('flex items-center', vertical ? 'flex-col' : 'flex-row gap-2 w-full')}>\n <span\n className={cn(\n 'flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-xs font-medium transition-colors duration-[150ms]',\n status === 'complete' && 'bg-tollerud-yellow text-tollerud-noir-black',\n status === 'active' && 'border-2 border-tollerud-yellow text-tollerud-yellow',\n status === 'upcoming' && 'border border-tollerud-border text-tollerud-text-muted'\n )}\n >\n {status === 'complete' ? <Check size={14} /> : i + 1}\n </span>\n {!isLast && (\n <span\n aria-hidden=\"true\"\n className={cn(\n 'bg-tollerud-border',\n vertical ? 'w-px flex-1 my-1' : 'h-px flex-1',\n status === 'complete' && 'bg-tollerud-yellow'\n )}\n />\n )}\n </div>\n <div className={cn('flex flex-col', vertical && 'pb-6')}>\n <span\n className={cn(\n 'text-sm font-medium',\n status === 'upcoming' ? 'text-tollerud-text-muted' : 'text-tollerud-text-primary'\n )}\n >\n {step.label}\n </span>\n {step.description && (\n <span className=\"text-xs text-tollerud-text-muted\">{step.description}</span>\n )}\n </div>\n </li>\n )\n })}\n </ol>\n )\n }\n)\nStepper.displayName = 'Stepper'\n\nexport { Stepper }\n","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface PanelProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n title?: React.ReactNode\n description?: React.ReactNode\n /** Content rendered on the right side of the header (actions, badges, etc.) */\n actions?: React.ReactNode\n}\n\nconst Panel = forwardRef<HTMLDivElement, PanelProps>(\n ({ className, title, description, actions, children, ...props }, ref) => {\n const hasHeader = title || description || actions\n\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border border-tollerud-border bg-tollerud-surface overflow-hidden',\n className\n )}\n {...props}\n >\n {hasHeader && (\n <div className=\"flex items-start justify-between gap-4 px-5 py-4 border-b border-tollerud-border\">\n <div className=\"flex flex-col gap-0.5\">\n {title && <h3 className=\"text-sm font-medium text-tollerud-text-primary\">{title}</h3>}\n {description && <p className=\"text-xs text-tollerud-text-muted\">{description}</p>}\n </div>\n {actions && <div className=\"flex items-center gap-2 shrink-0\">{actions}</div>}\n </div>\n )}\n {children && <div className=\"px-5 py-4\">{children}</div>}\n </div>\n )\n }\n)\nPanel.displayName = 'Panel'\n\nexport { Panel }\n","import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\n\nconst meterTones = {\n default: 'bg-tollerud-yellow',\n success: 'bg-tollerud-success',\n warning: 'bg-tollerud-warning',\n error: 'bg-tollerud-error',\n} as const\n\nexport interface MeterProps extends HTMLAttributes<HTMLDivElement> {\n /** Current value */\n value: number\n /** Maximum value (defaults to 100) */\n max?: number\n /** Optional label rendered above the bar */\n label?: React.ReactNode\n /** Show the numeric value/percentage to the right of the label */\n showValue?: boolean\n tone?: keyof typeof meterTones\n}\n\nconst Meter = forwardRef<HTMLDivElement, MeterProps>(\n ({ className, value, max = 100, label, showValue, tone = 'default', ...props }, ref) => {\n const pct = Math.min(100, Math.max(0, (value / max) * 100))\n\n return (\n <div ref={ref} className={cn('flex flex-col gap-1.5', className)} {...props}>\n {(label || showValue) && (\n <div className=\"flex items-center justify-between text-xs\">\n {label && <span className=\"text-tollerud-text-secondary\">{label}</span>}\n {showValue && <span className=\"text-tollerud-text-muted tabular-nums\">{Math.round(pct)}%</span>}\n </div>\n )}\n <div\n role=\"meter\"\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={max}\n className=\"h-1.5 w-full overflow-hidden rounded-full bg-tollerud-surface-raised\"\n >\n <div\n className={cn('h-full rounded-full transition-[width] duration-300', meterTones[tone])}\n style={{ width: `${pct}%` }}\n />\n </div>\n </div>\n )\n }\n)\nMeter.displayName = 'Meter'\n\nexport { Meter }\n","import { type HTMLAttributes, forwardRef, useId } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface FormRowProps extends HTMLAttributes<HTMLDivElement> {\n label?: React.ReactNode\n /** Hint text rendered below the label */\n description?: React.ReactNode\n error?: React.ReactNode\n required?: boolean\n /** Forwarded to the label's `htmlFor` — should match the control's `id` */\n htmlFor?: string\n}\n\nconst FormRow = forwardRef<HTMLDivElement, FormRowProps>(\n ({ className, label, description, error, required, htmlFor, children, ...props }, ref) => {\n const autoId = useId()\n const descriptionId = description ? `${autoId}-description` : undefined\n const errorId = error ? `${autoId}-error` : undefined\n\n return (\n <div ref={ref} className={cn('flex flex-col gap-1.5', className)} {...props}>\n {label && (\n <label htmlFor={htmlFor} className=\"text-sm font-medium text-tollerud-text-primary\">\n {label}\n {required && <span className=\"ml-0.5 text-tollerud-error\">*</span>}\n </label>\n )}\n {description && (\n <p id={descriptionId} className=\"text-xs text-tollerud-text-muted\">\n {description}\n </p>\n )}\n <div aria-describedby={[descriptionId, errorId].filter(Boolean).join(' ') || undefined}>{children}</div>\n {error && (\n <p id={errorId} className=\"text-xs text-tollerud-error\">\n {error}\n </p>\n )}\n </div>\n )\n }\n)\nFormRow.displayName = 'FormRow'\n\nexport { FormRow }\n","import { type HTMLAttributes, forwardRef } from 'react'\nimport { Check } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Button } from './Button'\n\nexport interface PricingCardProps extends HTMLAttributes<HTMLDivElement> {\n name: React.ReactNode\n price: React.ReactNode\n /** Rendered after the price, e.g. \"/month\" */\n period?: React.ReactNode\n description?: React.ReactNode\n features?: React.ReactNode[]\n ctaLabel?: React.ReactNode\n onCtaClick?: () => void\n /** Visually highlights this plan as the recommended/featured option */\n featured?: boolean\n /** Small label shown above the price when featured, e.g. \"Most popular\" */\n badge?: React.ReactNode\n}\n\nconst PricingCard = forwardRef<HTMLDivElement, PricingCardProps>(\n (\n {\n className,\n name,\n price,\n period,\n description,\n features = [],\n ctaLabel = 'Get started',\n onCtaClick,\n featured,\n badge,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex flex-col gap-5 rounded-xl border p-6',\n featured\n ? 'border-tollerud-yellow bg-tollerud-yellow/[0.04] shadow-[0_0_0_1px_rgba(255,255,0,0.15)]'\n : 'border-tollerud-border bg-tollerud-surface',\n className\n )}\n {...props}\n >\n <div className=\"flex flex-col gap-1\">\n {badge && (\n <span className=\"inline-flex w-fit items-center rounded-full bg-tollerud-yellow/15 px-2.5 py-0.5 text-xs font-medium text-tollerud-yellow\">\n {badge}\n </span>\n )}\n <h3 className=\"text-base font-medium text-tollerud-text-primary\">{name}</h3>\n {description && <p className=\"text-sm text-tollerud-text-muted\">{description}</p>}\n </div>\n\n <div className=\"flex items-baseline gap-1\">\n <span className=\"text-3xl font-semibold tracking-tight text-tollerud-text-primary\">{price}</span>\n {period && <span className=\"text-sm text-tollerud-text-muted\">{period}</span>}\n </div>\n\n {features.length > 0 && (\n <ul className=\"flex flex-col gap-2.5\">\n {features.map((feature, i) => (\n <li key={i} className=\"flex items-start gap-2.5 text-sm text-tollerud-text-secondary\">\n <Check size={16} className=\"mt-0.5 shrink-0 text-tollerud-yellow\" />\n <span>{feature}</span>\n </li>\n ))}\n </ul>\n )}\n\n <Button variant={featured ? 'primary' : 'secondary'} onClick={onCtaClick} className=\"mt-auto w-full\">\n {ctaLabel}\n </Button>\n </div>\n )\n }\n)\nPricingCard.displayName = 'PricingCard'\n\nexport { PricingCard }\n","import { type HTMLAttributes, createContext, forwardRef, useContext, useId, useState } from 'react'\nimport { ChevronDown } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\ninterface AccordionContextValue {\n openItems: Set<string>\n toggle: (value: string) => void\n}\n\nconst AccordionContext = createContext<AccordionContextValue | null>(null)\n\nfunction useAccordionContext(component: string) {\n const ctx = useContext(AccordionContext)\n if (!ctx) throw new Error(`<${component}> must be used within <Accordion>`)\n return ctx\n}\n\nexport interface AccordionProps extends HTMLAttributes<HTMLDivElement> {\n /** Allow multiple items to be open at once */\n multiple?: boolean\n /** Initially open item value(s) */\n defaultOpen?: string | string[]\n}\n\nconst Accordion = forwardRef<HTMLDivElement, AccordionProps>(\n ({ className, multiple = false, defaultOpen, children, ...props }, ref) => {\n const [openItems, setOpenItems] = useState<Set<string>>(() => {\n if (!defaultOpen) return new Set()\n return new Set(Array.isArray(defaultOpen) ? defaultOpen : [defaultOpen])\n })\n\n const toggle = (value: string) => {\n setOpenItems((prev) => {\n const next = multiple ? new Set(prev) : new Set<string>()\n if (prev.has(value)) {\n next.delete(value)\n } else {\n next.add(value)\n }\n return next\n })\n }\n\n return (\n <AccordionContext.Provider value={{ openItems, toggle }}>\n <div ref={ref} className={cn('flex flex-col divide-y divide-tollerud-border rounded-lg border border-tollerud-border', className)} {...props}>\n {children}\n </div>\n </AccordionContext.Provider>\n )\n }\n)\nAccordion.displayName = 'Accordion'\n\ninterface AccordionItemContextValue {\n value: string\n open: boolean\n triggerId: string\n contentId: string\n}\n\nconst AccordionItemContext = createContext<AccordionItemContextValue | null>(null)\n\nexport interface AccordionItemProps extends HTMLAttributes<HTMLDivElement> {\n value: string\n}\n\nconst AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(\n ({ className, value, children, ...props }, ref) => {\n const { openItems } = useAccordionContext('AccordionItem')\n const autoId = useId()\n const open = openItems.has(value)\n\n return (\n <AccordionItemContext.Provider\n value={{ value, open, triggerId: `${autoId}-trigger`, contentId: `${autoId}-content` }}\n >\n <div ref={ref} className={cn('first:rounded-t-lg last:rounded-b-lg', className)} {...props}>\n {children}\n </div>\n </AccordionItemContext.Provider>\n )\n }\n)\nAccordionItem.displayName = 'AccordionItem'\n\nfunction useAccordionItemContext(component: string) {\n const ctx = useContext(AccordionItemContext)\n if (!ctx) throw new Error(`<${component}> must be used within <AccordionItem>`)\n return ctx\n}\n\nexport interface AccordionTriggerProps extends HTMLAttributes<HTMLButtonElement> {}\n\nconst AccordionTrigger = forwardRef<HTMLButtonElement, AccordionTriggerProps>(\n ({ className, children, ...props }, ref) => {\n const { toggle } = useAccordionContext('AccordionTrigger')\n const { value, open, triggerId, contentId } = useAccordionItemContext('AccordionTrigger')\n\n return (\n <button\n ref={ref}\n id={triggerId}\n type=\"button\"\n aria-expanded={open}\n aria-controls={contentId}\n onClick={() => toggle(value)}\n className={cn(\n 'flex w-full items-center justify-between gap-4 px-4 py-3.5 text-left text-sm font-medium',\n 'text-tollerud-text-primary hover:bg-tollerud-surface-hover transition-colors duration-[150ms]',\n className\n )}\n {...props}\n >\n {children}\n <ChevronDown\n size={16}\n className={cn('shrink-0 text-tollerud-text-muted transition-transform duration-[200ms]', open && 'rotate-180')}\n />\n </button>\n )\n }\n)\nAccordionTrigger.displayName = 'AccordionTrigger'\n\nexport interface AccordionContentProps extends HTMLAttributes<HTMLDivElement> {}\n\nconst AccordionContent = forwardRef<HTMLDivElement, AccordionContentProps>(\n ({ className, children, ...props }, ref) => {\n const { open, triggerId, contentId } = useAccordionItemContext('AccordionContent')\n\n return (\n <div\n ref={ref}\n id={contentId}\n role=\"region\"\n aria-labelledby={triggerId}\n hidden={!open}\n className={cn('px-4 pb-4 text-sm text-tollerud-text-secondary', className)}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\nAccordionContent.displayName = 'AccordionContent'\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n","import { type InputHTMLAttributes, forwardRef, useId } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface SliderProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'onChange'> {\n label?: string\n /** Show the current numeric value next to the label */\n showValue?: boolean\n onChange?: (value: number) => void\n}\n\nconst Slider = forwardRef<HTMLInputElement, SliderProps>(\n ({ className, label, showValue, id: idProp, value, defaultValue, min = 0, max = 100, onChange, ...props }, ref) => {\n const autoId = useId()\n const id = idProp ?? autoId\n const current = value ?? defaultValue ?? min\n\n return (\n <div className=\"flex flex-col gap-1.5\">\n {(label || showValue) && (\n <div className=\"flex items-center justify-between text-xs\">\n {label && (\n <label htmlFor={id} className=\"font-medium text-tollerud-text-muted\">\n {label}\n </label>\n )}\n {showValue && <span className=\"text-tollerud-text-secondary tabular-nums\">{current}</span>}\n </div>\n )}\n <input\n ref={ref}\n id={id}\n type=\"range\"\n min={min}\n max={max}\n value={value}\n defaultValue={defaultValue}\n onChange={(e) => onChange?.(Number(e.target.value))}\n className={cn(\n 'h-1.5 w-full cursor-pointer appearance-none rounded-full bg-tollerud-surface-raised accent-tollerud-yellow',\n '[&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:h-4 [&::-webkit-slider-thumb]:w-4',\n '[&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-tollerud-yellow [&::-webkit-slider-thumb]:cursor-pointer',\n '[&::-webkit-slider-thumb]:border-2 [&::-webkit-slider-thumb]:border-tollerud-noir-black',\n '[&::-moz-range-thumb]:h-4 [&::-moz-range-thumb]:w-4 [&::-moz-range-thumb]:rounded-full',\n '[&::-moz-range-thumb]:bg-tollerud-yellow [&::-moz-range-thumb]:border-2 [&::-moz-range-thumb]:border-tollerud-noir-black [&::-moz-range-thumb]:cursor-pointer',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-tollerud-yellow/50',\n 'disabled:opacity-40 disabled:pointer-events-none',\n className\n )}\n {...props}\n />\n </div>\n )\n }\n)\nSlider.displayName = 'Slider'\n\nexport { Slider }\n","import { type InputHTMLAttributes, forwardRef, useState } from 'react'\nimport { Eye, EyeOff } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\nexport interface PasswordInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: string\n error?: string\n}\n\nconst PasswordInput = forwardRef<HTMLInputElement, PasswordInputProps>(\n ({ className, label, error, id, ...props }, ref) => {\n const [visible, setVisible] = useState(false)\n\n return (\n <div className=\"flex flex-col gap-1\">\n {label && (\n <label htmlFor={id} className=\"text-xs font-medium text-tollerud-text-muted\">\n {label}\n </label>\n )}\n <div className=\"relative\">\n <input\n ref={ref}\n id={id}\n type={visible ? 'text' : 'password'}\n className={cn(\n 'w-full font-sans text-base px-3 py-2 pr-10 rounded',\n 'bg-tollerud-surface-raised border',\n 'text-tollerud-text-primary',\n 'placeholder:text-tollerud-text-muted',\n 'transition-[border-color] duration-[150ms]',\n 'focus:outline-none focus:border-tollerud-yellow focus:shadow-[0_0_0_1px_#E8D500]',\n error ? 'border-tollerud-error' : 'border-tollerud-border',\n className\n )}\n {...props}\n />\n <button\n type=\"button\"\n onClick={() => setVisible((v) => !v)}\n aria-label={visible ? 'Hide password' : 'Show password'}\n aria-pressed={visible}\n className=\"absolute right-2.5 top-1/2 -translate-y-1/2 text-tollerud-text-muted hover:text-tollerud-text-secondary transition-colors duration-[150ms]\"\n >\n {visible ? <EyeOff size={16} /> : <Eye size={16} />}\n </button>\n </div>\n {error && <p className=\"text-xs text-tollerud-error mt-0.5\">{error}</p>}\n </div>\n )\n }\n)\nPasswordInput.displayName = 'PasswordInput'\n\nexport { PasswordInput }\n","import { useEffect, useId, useMemo, useRef, useState } from 'react'\nimport { Check, ChevronDown } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\nexport interface ComboboxOption {\n value: string\n label: string\n disabled?: boolean\n}\n\nexport interface ComboboxProps {\n options: ComboboxOption[]\n value?: string\n defaultValue?: string\n onChange?: (value: string) => void\n placeholder?: string\n label?: string\n error?: string\n /** Filter predicate, defaults to a case-insensitive substring match on the label */\n filter?: (option: ComboboxOption, query: string) => boolean\n className?: string\n disabled?: boolean\n}\n\nconst defaultFilter = (option: ComboboxOption, query: string) =>\n option.label.toLowerCase().includes(query.toLowerCase())\n\nfunction Combobox({\n options,\n value: valueProp,\n defaultValue,\n onChange,\n placeholder = 'Search…',\n label,\n error,\n filter = defaultFilter,\n className,\n disabled,\n}: ComboboxProps) {\n const id = useId()\n const rootRef = useRef<HTMLDivElement>(null)\n const isControlled = valueProp !== undefined\n const [internalValue, setInternalValue] = useState(defaultValue)\n const value = isControlled ? valueProp : internalValue\n\n const [open, setOpen] = useState(false)\n const [query, setQuery] = useState('')\n const [activeIndex, setActiveIndex] = useState(0)\n\n const selected = options.find((o) => o.value === value)\n\n const filtered = useMemo(() => {\n if (!query) return options\n return options.filter((o) => filter(o, query))\n }, [options, query, filter])\n\n useEffect(() => {\n if (!open) return\n function onClickOutside(e: MouseEvent) {\n if (rootRef.current && !rootRef.current.contains(e.target as Node)) {\n setOpen(false)\n setQuery('')\n }\n }\n function onResize() {\n setOpen(false)\n setQuery('')\n }\n document.addEventListener('mousedown', onClickOutside)\n window.addEventListener('resize', onResize)\n return () => {\n document.removeEventListener('mousedown', onClickOutside)\n window.removeEventListener('resize', onResize)\n }\n }, [open])\n\n const commit = (option: ComboboxOption) => {\n if (option.disabled) return\n if (!isControlled) setInternalValue(option.value)\n onChange?.(option.value)\n setOpen(false)\n setQuery('')\n }\n\n const onKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n setOpen(true)\n setActiveIndex((i) => Math.min(i + 1, filtered.length - 1))\n } else if (e.key === 'ArrowUp') {\n e.preventDefault()\n setActiveIndex((i) => Math.max(i - 1, 0))\n } else if (e.key === 'Enter') {\n e.preventDefault()\n const opt = filtered[activeIndex]\n if (opt) commit(opt)\n } else if (e.key === 'Escape') {\n setOpen(false)\n setQuery('')\n }\n }\n\n return (\n <div ref={rootRef} className={cn('relative flex flex-col gap-1', className)}>\n {label && (\n <label htmlFor={id} className=\"text-xs font-medium text-tollerud-text-muted\">\n {label}\n </label>\n )}\n <div className=\"relative\">\n <input\n id={id}\n role=\"combobox\"\n aria-expanded={open}\n aria-autocomplete=\"list\"\n aria-controls={`${id}-listbox`}\n disabled={disabled}\n value={open ? query : selected?.label ?? ''}\n placeholder={selected ? selected.label : placeholder}\n onFocus={() => {\n setOpen(true)\n setActiveIndex(0)\n }}\n onChange={(e) => {\n setQuery(e.target.value)\n setActiveIndex(0)\n if (!open) setOpen(true)\n }}\n onKeyDown={onKeyDown}\n className={cn(\n 'w-full font-sans text-base px-3 py-2 pr-9 rounded',\n 'bg-tollerud-surface-raised border',\n 'text-tollerud-text-primary placeholder:text-tollerud-text-muted',\n 'transition-[border-color] duration-[150ms]',\n 'focus:outline-none focus:border-tollerud-yellow focus:shadow-[0_0_0_1px_#E8D500]',\n error ? 'border-tollerud-error' : 'border-tollerud-border',\n disabled && 'opacity-50 pointer-events-none'\n )}\n />\n <ChevronDown\n size={15}\n className={cn(\n 'pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 text-tollerud-text-muted transition-transform duration-[150ms]',\n open && 'rotate-180'\n )}\n />\n </div>\n\n {open && (\n <ul\n id={`${id}-listbox`}\n role=\"listbox\"\n className=\"absolute top-full z-20 mt-1 max-h-64 w-full overflow-auto rounded-lg border border-tollerud-border bg-tollerud-surface-overlay py-1 shadow-lg\"\n >\n {filtered.length === 0 && (\n <li className=\"px-3 py-2 text-sm text-tollerud-text-muted\">No results</li>\n )}\n {filtered.map((option, i) => {\n const isSelected = option.value === value\n return (\n <li\n key={option.value}\n role=\"option\"\n aria-selected={isSelected}\n onMouseDown={(e) => {\n e.preventDefault()\n commit(option)\n }}\n onMouseEnter={() => setActiveIndex(i)}\n className={cn(\n 'flex items-center justify-between gap-2 px-3 py-2 text-sm cursor-pointer',\n i === activeIndex ? 'bg-tollerud-surface-hover text-tollerud-text-primary' : 'text-tollerud-text-secondary',\n option.disabled && 'opacity-40 pointer-events-none'\n )}\n >\n {option.label}\n {isSelected && <Check size={14} className=\"text-tollerud-yellow\" />}\n </li>\n )\n })}\n </ul>\n )}\n\n {error && <p className=\"text-xs text-tollerud-error mt-0.5\">{error}</p>}\n </div>\n )\n}\nCombobox.displayName = 'Combobox'\n\nexport { Combobox }\n","import { useEffect, useId, useMemo, useRef, useState } from 'react'\nimport { ChevronLeft, ChevronRight, Calendar as CalendarIcon } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\nexport interface DatePickerProps {\n value?: Date | null\n defaultValue?: Date | null\n onChange?: (date: Date | null) => void\n label?: string\n error?: string\n placeholder?: string\n /** Format a date for display in the input (defaults to locale short date) */\n formatDate?: (date: Date) => string\n className?: string\n disabled?: boolean\n}\n\nconst defaultFormat = (date: Date) =>\n date.toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' })\n\nfunction isSameDay(a: Date, b: Date) {\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate()\n}\n\nfunction startOfMonth(date: Date) {\n return new Date(date.getFullYear(), date.getMonth(), 1)\n}\n\nfunction buildCalendarGrid(monthDate: Date): (Date | null)[] {\n const first = startOfMonth(monthDate)\n const startWeekday = first.getDay()\n const daysInMonth = new Date(monthDate.getFullYear(), monthDate.getMonth() + 1, 0).getDate()\n\n const cells: (Date | null)[] = []\n for (let i = 0; i < startWeekday; i++) cells.push(null)\n for (let d = 1; d <= daysInMonth; d++) cells.push(new Date(monthDate.getFullYear(), monthDate.getMonth(), d))\n return cells\n}\n\nconst WEEKDAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\n\nfunction DatePicker({\n value: valueProp,\n defaultValue = null,\n onChange,\n label,\n error,\n placeholder = 'Select a date',\n formatDate = defaultFormat,\n className,\n disabled,\n}: DatePickerProps) {\n const id = useId()\n const rootRef = useRef<HTMLDivElement>(null)\n const isControlled = valueProp !== undefined\n const [internalValue, setInternalValue] = useState<Date | null>(defaultValue)\n const value = isControlled ? valueProp ?? null : internalValue\n\n const [open, setOpen] = useState(false)\n const [viewMonth, setViewMonth] = useState(() => startOfMonth(value ?? new Date()))\n\n const cells = useMemo(() => buildCalendarGrid(viewMonth), [viewMonth])\n\n useEffect(() => {\n if (!open) return\n function onClickOutside(e: MouseEvent) {\n if (rootRef.current && !rootRef.current.contains(e.target as Node)) setOpen(false)\n }\n function onResize() { setOpen(false) }\n document.addEventListener('mousedown', onClickOutside)\n window.addEventListener('resize', onResize)\n return () => {\n document.removeEventListener('mousedown', onClickOutside)\n window.removeEventListener('resize', onResize)\n }\n }, [open])\n\n const select = (date: Date) => {\n if (!isControlled) setInternalValue(date)\n onChange?.(date)\n setOpen(false)\n }\n\n return (\n <div ref={rootRef} className={cn('relative flex flex-col gap-1', className)}>\n {label && (\n <label htmlFor={id} className=\"text-xs font-medium text-tollerud-text-muted\">\n {label}\n </label>\n )}\n <button\n id={id}\n type=\"button\"\n disabled={disabled}\n onClick={() => {\n setViewMonth(startOfMonth(value ?? new Date()))\n setOpen((o) => !o)\n }}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n className={cn(\n 'flex w-full items-center justify-between gap-2 rounded px-3 py-2 text-left text-base',\n 'bg-tollerud-surface-raised border',\n 'transition-[border-color] duration-[150ms]',\n 'focus:outline-none focus:border-tollerud-yellow focus:shadow-[0_0_0_1px_#E8D500]',\n error ? 'border-tollerud-error' : 'border-tollerud-border',\n value ? 'text-tollerud-text-primary' : 'text-tollerud-text-muted',\n disabled && 'opacity-50 pointer-events-none'\n )}\n >\n <span>{value ? formatDate(value) : placeholder}</span>\n <CalendarIcon size={15} className=\"text-tollerud-text-muted\" />\n </button>\n\n {open && (\n <div\n role=\"dialog\"\n aria-label=\"Choose date\"\n className=\"absolute top-full z-20 mt-1 w-72 rounded-lg border border-tollerud-border bg-tollerud-surface-overlay p-3 shadow-lg\"\n >\n <div className=\"mb-2 flex items-center justify-between\">\n <button\n type=\"button\"\n aria-label=\"Previous month\"\n onClick={() => setViewMonth((m) => new Date(m.getFullYear(), m.getMonth() - 1, 1))}\n className=\"rounded p-1 text-tollerud-text-secondary hover:bg-tollerud-surface-hover\"\n >\n <ChevronLeft size={16} />\n </button>\n <span className=\"text-sm font-medium text-tollerud-text-primary\">\n {viewMonth.toLocaleDateString(undefined, { month: 'long', year: 'numeric' })}\n </span>\n <button\n type=\"button\"\n aria-label=\"Next month\"\n onClick={() => setViewMonth((m) => new Date(m.getFullYear(), m.getMonth() + 1, 1))}\n className=\"rounded p-1 text-tollerud-text-secondary hover:bg-tollerud-surface-hover\"\n >\n <ChevronRight size={16} />\n </button>\n </div>\n\n <div className=\"grid grid-cols-7 gap-1 text-center\">\n {WEEKDAYS.map((d) => (\n <span key={d} className=\"text-[11px] font-medium text-tollerud-text-muted py-1\">\n {d}\n </span>\n ))}\n {cells.map((date, i) => {\n if (!date) return <span key={i} />\n const selected = value ? isSameDay(date, value) : false\n const today = isSameDay(date, new Date())\n return (\n <button\n key={i}\n type=\"button\"\n onClick={() => select(date)}\n className={cn(\n 'h-8 w-8 rounded-full text-sm transition-colors duration-[150ms]',\n selected\n ? 'bg-tollerud-yellow text-tollerud-noir-black font-medium'\n : 'text-tollerud-text-secondary hover:bg-tollerud-surface-hover',\n !selected && today && 'ring-1 ring-tollerud-yellow/40'\n )}\n >\n {date.getDate()}\n </button>\n )\n })}\n </div>\n </div>\n )}\n\n {error && <p className=\"text-xs text-tollerud-error mt-0.5\">{error}</p>}\n </div>\n )\n}\nDatePicker.displayName = 'DatePicker'\n\nexport { DatePicker }\n","import { type DragEvent, useId, useRef, useState } from 'react'\nimport { Upload, X, File as FileIcon } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\nexport interface FileUploadProps {\n label?: string\n description?: React.ReactNode\n error?: string\n /** Forwarded to the underlying `<input accept>` */\n accept?: string\n multiple?: boolean\n /** Called whenever the selected file list changes */\n onFilesChange?: (files: File[]) => void\n className?: string\n disabled?: boolean\n}\n\nfunction formatBytes(bytes: number) {\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`\n}\n\nfunction FileUpload({\n label,\n description,\n error,\n accept,\n multiple,\n onFilesChange,\n className,\n disabled,\n}: FileUploadProps) {\n const id = useId()\n const inputRef = useRef<HTMLInputElement>(null)\n const [files, setFiles] = useState<File[]>([])\n const [dragging, setDragging] = useState(false)\n\n const setAndNotify = (next: File[]) => {\n setFiles(next)\n onFilesChange?.(next)\n }\n\n const addFiles = (incoming: FileList | null) => {\n if (!incoming || incoming.length === 0) return\n const incomingArr = Array.from(incoming)\n setAndNotify(multiple ? [...files, ...incomingArr] : [incomingArr[0]!])\n }\n\n const removeAt = (index: number) => {\n setAndNotify(files.filter((_, i) => i !== index))\n }\n\n const onDrop = (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n setDragging(false)\n if (disabled) return\n addFiles(e.dataTransfer.files)\n }\n\n return (\n <div className={cn('flex flex-col gap-1.5', className)}>\n {label && (\n <label htmlFor={id} className=\"text-xs font-medium text-tollerud-text-muted\">\n {label}\n </label>\n )}\n\n <div\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled}\n onClick={() => !disabled && inputRef.current?.click()}\n onKeyDown={(e) => {\n if (!disabled && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault()\n inputRef.current?.click()\n }\n }}\n onDragOver={(e) => {\n e.preventDefault()\n if (!disabled) setDragging(true)\n }}\n onDragLeave={() => setDragging(false)}\n onDrop={onDrop}\n className={cn(\n 'flex flex-col items-center justify-center gap-2 rounded-lg border border-dashed px-6 py-8 text-center cursor-pointer transition-colors duration-[150ms]',\n dragging\n ? 'border-tollerud-yellow bg-tollerud-yellow/[0.06]'\n : 'border-tollerud-border bg-tollerud-surface-raised hover:border-tollerud-text-secondary',\n error && 'border-tollerud-error',\n disabled && 'opacity-50 pointer-events-none'\n )}\n >\n <Upload size={20} className=\"text-tollerud-text-muted\" />\n <div className=\"text-sm text-tollerud-text-secondary\">\n <span className=\"font-medium text-tollerud-yellow\">Click to upload</span> or drag and drop\n </div>\n {description && <p className=\"text-xs text-tollerud-text-muted\">{description}</p>}\n <input\n ref={inputRef}\n id={id}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={(e) => addFiles(e.target.files)}\n className=\"sr-only\"\n />\n </div>\n\n {files.length > 0 && (\n <ul className=\"flex flex-col gap-1.5\">\n {files.map((file, i) => (\n <li\n key={`${file.name}-${i}`}\n className=\"flex items-center gap-2.5 rounded-md border border-tollerud-border bg-tollerud-surface-raised px-3 py-2 text-sm\"\n >\n <FileIcon size={15} className=\"shrink-0 text-tollerud-text-muted\" />\n <span className=\"flex-1 truncate text-tollerud-text-primary\">{file.name}</span>\n <span className=\"shrink-0 text-xs text-tollerud-text-muted\">{formatBytes(file.size)}</span>\n <button\n type=\"button\"\n aria-label={`Remove ${file.name}`}\n onClick={() => removeAt(i)}\n className=\"shrink-0 text-tollerud-text-muted hover:text-tollerud-text-primary transition-colors duration-[150ms]\"\n >\n <X size={14} />\n </button>\n </li>\n ))}\n </ul>\n )}\n\n {error && <p className=\"text-xs text-tollerud-error\">{error}</p>}\n </div>\n )\n}\nFileUpload.displayName = 'FileUpload'\n\nexport { FileUpload }\n","import { type KeyboardEvent, useId, useState } from 'react'\nimport { X } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\nexport interface TagInputProps {\n value?: string[]\n defaultValue?: string[]\n onChange?: (tags: string[]) => void\n label?: string\n error?: string\n placeholder?: string\n /** Maximum number of tags allowed */\n max?: number\n className?: string\n disabled?: boolean\n}\n\nfunction TagInput({\n value: valueProp,\n defaultValue = [],\n onChange,\n label,\n error,\n placeholder = 'Add a tag…',\n max,\n className,\n disabled,\n}: TagInputProps) {\n const id = useId()\n const isControlled = valueProp !== undefined\n const [internalTags, setInternalTags] = useState<string[]>(defaultValue)\n const tags = isControlled ? valueProp : internalTags\n const [draft, setDraft] = useState('')\n\n const setAndNotify = (next: string[]) => {\n if (!isControlled) setInternalTags(next)\n onChange?.(next)\n }\n\n const addTag = (raw: string) => {\n const tag = raw.trim()\n if (!tag || tags.includes(tag)) return\n if (max && tags.length >= max) return\n setAndNotify([...tags, tag])\n setDraft('')\n }\n\n const removeTag = (index: number) => {\n setAndNotify(tags.filter((_, i) => i !== index))\n }\n\n const onKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' || e.key === ',') {\n e.preventDefault()\n addTag(draft)\n } else if (e.key === 'Backspace' && draft === '' && tags.length > 0) {\n removeTag(tags.length - 1)\n }\n }\n\n const atMax = max ? tags.length >= max : false\n\n return (\n <div className={cn('flex flex-col gap-1', className)}>\n {label && (\n <label htmlFor={id} className=\"text-xs font-medium text-tollerud-text-muted\">\n {label}\n </label>\n )}\n <div\n className={cn(\n 'flex flex-wrap items-center gap-1.5 rounded px-2.5 py-1.5',\n 'bg-tollerud-surface-raised border',\n 'transition-[border-color] duration-[150ms]',\n 'focus-within:border-tollerud-yellow focus-within:shadow-[0_0_0_1px_#E8D500]',\n error ? 'border-tollerud-error' : 'border-tollerud-border',\n disabled && 'opacity-50 pointer-events-none'\n )}\n >\n {tags.map((tag, i) => (\n <span\n key={`${tag}-${i}`}\n className=\"inline-flex items-center gap-1 rounded-full bg-tollerud-surface-hover px-2.5 py-0.5 text-xs font-medium text-tollerud-text-primary\"\n >\n {tag}\n <button\n type=\"button\"\n aria-label={`Remove ${tag}`}\n onClick={() => removeTag(i)}\n className=\"text-tollerud-text-muted hover:text-tollerud-text-primary transition-colors duration-[150ms]\"\n >\n <X size={12} />\n </button>\n </span>\n ))}\n <input\n id={id}\n value={draft}\n disabled={disabled || atMax}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={onKeyDown}\n onBlur={() => addTag(draft)}\n placeholder={atMax ? '' : placeholder}\n className={cn(\n 'min-w-[6rem] flex-1 bg-transparent py-0.5 text-sm text-tollerud-text-primary',\n 'placeholder:text-tollerud-text-muted focus:outline-none'\n )}\n />\n </div>\n {error && <p className=\"text-xs text-tollerud-error mt-0.5\">{error}</p>}\n </div>\n )\n}\nTagInput.displayName = 'TagInput'\n\nexport { TagInput }\n"]}