@tollerud/ui 1.0.4 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"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":["forwardRef","jsx","jsxs","useState","useCallback","Fragment","useRef","useMemo","useEffect","useId","React","React3","React4","SonnerToaster","DialogPrimitive2"],"mappings":"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","file":"index.js","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 { cn } from '@/lib/utils'\n\nconst variants = {\n primary: 'bg-tollerud-yellow text-tollerud-black border-tollerud-yellow hover:bg-tollerud-yellow-bright 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(232,213,0,0.25)] bg-transparent before:content-[\"❯_\"] before:opacity-70 hover:border-tollerud-yellow hover:shadow-tollerud-glow hover:bg-[rgba(232,213,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 ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: keyof typeof variants\n size?: keyof typeof sizes\n}\n\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant = 'secondary', size = 'md', ...props }, ref) => {\n return (\n <button\n ref={ref}\n className={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 {...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-bright',\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"],"names":["forwardRef","jsx","jsxs","useState","useCallback","Fragment","useRef","useMemo","useEffect","useId","React","React3","React4","SonnerToaster","DialogPrimitive2"],"mappings":"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","file":"index.js","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 { 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 ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: keyof typeof variants\n size?: keyof typeof sizes\n}\n\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant = 'secondary', size = 'md', ...props }, ref) => {\n return (\n <button\n ref={ref}\n className={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 {...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"]}