@annondeveloper/ui-kit 0.2.0 → 0.2.1

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":["../src/components/button.tsx","../src/components/badge.tsx","../src/components/filter-pill.tsx","../src/components/empty-state.tsx","../src/components/skeleton.tsx","../src/components/truncated-text.tsx","../src/components/confirm-dialog.tsx","../src/components/animated-counter.tsx","../src/components/success-checkmark.tsx","../src/components/status-badge.tsx","../src/components/status-pulse.tsx","../src/components/toast.tsx","../src/components/data-table.tsx","../src/components/tabs.tsx","../src/components/dropdown-menu.tsx","../src/components/sheet.tsx","../src/components/progress.tsx","../src/components/avatar.tsx","../src/components/popover.tsx","../src/components/slider.tsx","../src/components/card.tsx","../src/components/radio-group.tsx","../src/components/tooltip.tsx","../src/components/sparkline.tsx","../src/components/metric-card.tsx","../src/components/utilization-bar.tsx","../src/components/threshold-gauge.tsx","../src/components/severity-timeline.tsx","../src/components/log-viewer.tsx","../src/components/port-status-grid.tsx","../src/components/time-range-selector.tsx","../src/components/pipeline-stage.tsx","../src/components/uptime-tracker.tsx","../src/components/streaming-text.tsx","../src/components/typing-indicator.tsx","../src/components/confidence-bar.tsx","../src/components/live-feed.tsx","../src/components/diff-viewer.tsx","../src/components/heatmap-calendar.tsx","../src/components/notification-stack.tsx","../src/components/kanban-column.tsx","../src/components/smart-table.tsx","../src/components/realtime-value.tsx","../src/components/command-bar.tsx","../src/components/sortable-list.tsx","../src/components/infinite-scroll.tsx","../src/components/color-input.tsx","../src/components/step-wizard.tsx","../src/components/copy-block.tsx"],"names":["jsxs","jsx","Loader2","useRef","useState","useEffect","useReducedMotion","motion","SonnerToaster","AnimatePresence","sizeClasses","useCallback","X","contentVariants","variantClasses","forwardRef","Tooltip","TooltipPrimitive","Search","statusBorder","Check","Copy","getBarColor","ChevronUp","i","j","useMemo","weeks","AlertTriangle","TrendingUp","easeOutCubic","SIZE_CLASSES","ArrowDown","GripVertical","ArrowUp","p","q","slideVariants","Fragment","ChevronRight","ChevronDown"],"mappings":"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","file":"index.js","sourcesContent":["'use client'\n\nimport type React from 'react'\nimport { forwardRef, type ButtonHTMLAttributes } from 'react'\nimport { Loader2 } from 'lucide-react'\nimport { cn } from '../utils'\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'danger' | 'outline' | 'ghost'\nexport type ButtonSize = 'sm' | 'md' | 'lg' | 'icon'\n\nconst variantClasses: Record<ButtonVariant, string> = {\n primary:\n 'bg-[hsl(var(--brand-primary))] text-[hsl(var(--text-on-brand))] hover:bg-[hsl(var(--brand-primary)/0.85)] active:bg-[hsl(var(--brand-primary)/0.75)]',\n secondary:\n 'bg-[hsl(var(--bg-elevated))] text-[hsl(var(--text-primary))] border border-[hsl(var(--border-default))] hover:bg-[hsl(var(--bg-overlay))] active:bg-[hsl(var(--border-subtle))]',\n danger:\n 'bg-[hsl(var(--status-critical))] text-[hsl(var(--text-on-brand))] hover:bg-[hsl(var(--status-critical)/0.85)] active:bg-[hsl(var(--status-critical)/0.75)]',\n outline:\n 'bg-transparent text-[hsl(var(--text-primary))] border border-[hsl(var(--border-default))] hover:bg-[hsl(var(--bg-elevated))] active:bg-[hsl(var(--bg-overlay))]',\n ghost:\n 'bg-transparent text-[hsl(var(--text-secondary))] hover:bg-[hsl(var(--bg-elevated))] hover:text-[hsl(var(--text-primary))] active:bg-[hsl(var(--bg-overlay))]',\n}\n\nconst sizeClasses: Record<ButtonSize, string> = {\n sm: 'h-8 px-3 text-xs gap-1.5 rounded-lg',\n md: 'h-9 px-4 text-sm gap-2 rounded-lg',\n lg: 'h-11 px-6 text-sm gap-2 rounded-xl',\n icon: 'h-9 w-9 rounded-lg',\n}\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Visual variant of the button. */\n variant?: ButtonVariant\n /** Size preset. */\n size?: ButtonSize\n /** Show a loading spinner and disable interaction. */\n loading?: boolean\n}\n\n/**\n * @description A themed button with variant, size, and loading support.\n * Uses CSS custom property tokens for dark/light mode compatibility.\n */\nconst Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>> = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ variant = 'primary', size = 'md', loading, disabled, className, children, ...props }, ref): React.JSX.Element => (\n <button\n ref={ref}\n disabled={disabled || loading}\n className={cn(\n 'inline-flex items-center justify-center font-medium transition-colors duration-150',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[hsl(var(--brand-primary))] focus-visible:ring-offset-2 focus-visible:ring-offset-[hsl(var(--bg-base))]',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'cursor-pointer select-none',\n variantClasses[variant],\n sizeClasses[size],\n className,\n )}\n {...props}\n >\n {loading && <Loader2 className=\"h-4 w-4 animate-spin\" />}\n {children}\n </button>\n ),\n)\n\nButton.displayName = 'Button'\n\nexport { Button }\n","'use client'\n\nimport type React from 'react'\nimport { cn } from '../utils'\nimport type { LucideIcon } from 'lucide-react'\n\n// ── Theme-safe color presets ────────────────────────────────────────────────\n// All colors use CSS custom properties for dark/light mode compliance.\n\nexport type BadgeColor =\n | 'brand' | 'blue' | 'green' | 'yellow' | 'red' | 'orange'\n | 'purple' | 'pink' | 'teal' | 'gray'\n\nconst COLOR_MAP: Record<BadgeColor, string> = {\n brand: 'bg-[hsl(var(--brand-primary))]/10 text-[hsl(var(--brand-primary))]',\n blue: 'bg-[hsl(var(--brand-secondary))]/10 text-[hsl(var(--brand-secondary))]',\n green: 'bg-[hsl(var(--status-ok))]/10 text-[hsl(var(--status-ok))]',\n yellow: 'bg-[hsl(var(--status-warning))]/10 text-[hsl(var(--status-warning))]',\n red: 'bg-[hsl(var(--status-critical))]/10 text-[hsl(var(--status-critical))]',\n orange: 'bg-[hsl(var(--status-warning))]/15 text-[hsl(var(--status-warning))]',\n purple: 'bg-[hsl(270,60%,60%)]/10 text-[hsl(270,60%,65%)]',\n pink: 'bg-[hsl(330,60%,60%)]/10 text-[hsl(330,60%,65%)]',\n teal: 'bg-[hsl(180,60%,40%)]/10 text-[hsl(180,60%,55%)]',\n gray: 'bg-[hsl(var(--bg-overlay))] text-[hsl(var(--text-secondary))]',\n}\n\nexport interface BadgeProps {\n children: React.ReactNode\n /** Color preset for the badge. */\n color?: BadgeColor\n /** Optional icon displayed before the label. */\n icon?: LucideIcon\n /** Size variant. */\n size?: 'xs' | 'sm' | 'md'\n className?: string\n}\n\n/**\n * @description A themed pill badge with color presets and optional icon.\n * Supports xs, sm, and md sizes with dark/light mode via CSS tokens.\n */\nexport function Badge({\n children, color = 'gray', icon: Icon, size = 'sm', className,\n}: BadgeProps): React.JSX.Element {\n return (\n <span className={cn(\n 'inline-flex items-center gap-1 rounded-full font-medium whitespace-nowrap',\n size === 'xs' && 'px-1.5 py-0.5 text-[10px]',\n size === 'sm' && 'px-2 py-0.5 text-xs',\n size === 'md' && 'px-2.5 py-1 text-xs',\n COLOR_MAP[color],\n className,\n )}>\n {Icon && <Icon className={cn(size === 'xs' ? 'size-2.5' : 'size-3')} />}\n {children}\n </span>\n )\n}\n\n// ── Badge variant factory ──────────────────────────────────────────────────\n\nexport interface BadgeVariantConfig<T extends string> {\n /** Map from value to BadgeColor. */\n colorMap: Partial<Record<T, BadgeColor>>\n /** Map from value to display label. Falls back to the value itself. */\n labelMap?: Partial<Record<T, string>>\n /** Default color when value is not found in colorMap. */\n defaultColor?: BadgeColor\n /** Default size for the badge. */\n defaultSize?: 'xs' | 'sm' | 'md'\n}\n\n/**\n * @description Factory function to create domain-specific badge components.\n * Accepts a color map and optional label map, returns a typed Badge component.\n *\n * @example\n * ```tsx\n * const SeverityBadge = createBadgeVariant({\n * colorMap: { critical: 'red', warning: 'yellow', info: 'blue' },\n * labelMap: { critical: 'Critical', warning: 'Warning', info: 'Info' },\n * })\n * // Usage: <SeverityBadge value=\"critical\" />\n * ```\n */\nexport function createBadgeVariant<T extends string>(config: BadgeVariantConfig<T>): (props: { value: T; className?: string }) => React.JSX.Element {\n const { colorMap, labelMap, defaultColor = 'gray', defaultSize = 'xs' } = config\n\n return function VariantBadge({ value, className }: { value: T; className?: string }) {\n const color = colorMap[value] ?? defaultColor\n const label = labelMap?.[value] ?? value.replace(/_/g, ' ')\n return (\n <Badge color={color} size={defaultSize} className={className}>\n {label}\n </Badge>\n )\n }\n}\n","'use client'\n\nimport type React from 'react'\nimport { cn } from '../utils'\n\nexport interface FilterPillProps {\n /** Label text for the pill. */\n label: string\n /** Optional count displayed after the label. */\n count?: number\n /** Whether this pill is currently active/selected. */\n active: boolean\n /** Click handler. */\n onClick: () => void\n className?: string\n}\n\n/**\n * @description A rounded pill-style filter toggle with active state and optional count.\n * Uses CSS custom property tokens for dark/light mode compatibility.\n */\nexport function FilterPill({ label, count, active, onClick, className }: FilterPillProps): React.JSX.Element {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n 'rounded-full px-3 py-1 text-xs transition-colors whitespace-nowrap',\n active\n ? 'bg-[hsl(var(--brand-primary))]/10 text-[hsl(var(--brand-primary))] font-medium'\n : 'bg-[hsl(var(--bg-elevated))] text-[hsl(var(--text-secondary))] hover:bg-[hsl(var(--bg-overlay))]',\n className,\n )}\n >\n {label}\n {count != null && (\n <span className={cn(\n 'ml-1.5 tabular-nums',\n active ? 'text-[hsl(var(--brand-primary))]/70' : 'text-[hsl(var(--text-tertiary))]',\n )}>\n {count}\n </span>\n )}\n </button>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { cn } from '../utils'\nimport type { LucideIcon } from 'lucide-react'\n\nexport interface EmptyStateProps {\n /** Icon component displayed in the center. */\n icon: LucideIcon\n /** Title text. */\n title: string\n /** Description text. */\n description: string\n /** Optional action buttons rendered below the description. */\n actions?: React.ReactNode\n className?: string\n}\n\n/**\n * @description A decorative empty state placeholder with icon, title, description, and optional actions.\n * Features a subtle gradient background and glass-morphism styling.\n */\nexport function EmptyState({ icon: Icon, title, description, actions, className }: EmptyStateProps): React.JSX.Element {\n return (\n <div\n className={cn(\n 'relative overflow-hidden flex flex-col items-center justify-center rounded-2xl border border-dashed border-[hsl(var(--border-default))]',\n 'bg-[hsl(var(--bg-surface)/0.6)] backdrop-blur-xl px-6 py-12 text-center',\n className,\n )}\n >\n {/* Decorative gradient background */}\n <div className=\"pointer-events-none absolute inset-0 bg-gradient-to-b from-[hsl(var(--brand-primary)/0.04)] to-transparent\" />\n <div className=\"pointer-events-none absolute inset-0 bg-[radial-gradient(ellipse_at_50%_0%,hsl(var(--brand-primary)/0.06),transparent_70%)]\" />\n\n <div className=\"relative mb-4 flex size-14 items-center justify-center rounded-2xl bg-[hsl(var(--bg-elevated))] border border-[hsl(var(--border-subtle)/0.6)] shadow-[0_1px_3px_hsl(0_0%_0%/0.12)]\">\n <Icon className=\"size-6 text-[hsl(var(--text-disabled))]\" />\n </div>\n <h3 className=\"relative text-heading-3 text-[hsl(var(--text-primary))] mb-1\">{title}</h3>\n <p className=\"relative text-body text-[hsl(var(--text-secondary))] max-w-sm\">{description}</p>\n {actions && <div className=\"relative mt-6 flex gap-3\">{actions}</div>}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { cn } from '../utils'\n\n/**\n * @description A shimmer skeleton loader block. Requires the `skeleton-shimmer` CSS class\n * from theme.css to animate.\n */\nexport function Skeleton({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element {\n return (\n <div\n className={cn('skeleton-shimmer rounded-md', className)}\n {...props}\n />\n )\n}\n\nexport interface SkeletonTextProps {\n /** Number of text lines to render. */\n lines?: number\n className?: string\n}\n\n/**\n * @description A multi-line skeleton text placeholder. The last line renders shorter\n * for a natural paragraph appearance.\n */\nexport function SkeletonText({ lines = 1, className }: SkeletonTextProps): React.JSX.Element {\n return (\n <div className={cn('space-y-2', className)}>\n {Array.from({ length: lines }).map((_, i) => (\n <Skeleton\n key={i}\n className={cn('h-3', i === lines - 1 && lines > 1 ? 'w-4/5' : 'w-full')}\n />\n ))}\n </div>\n )\n}\n\n/**\n * @description A card-shaped skeleton placeholder with header area and content bars.\n */\nexport function SkeletonCard({ className }: { className?: string }): React.JSX.Element {\n return (\n <div className={cn('rounded-lg border border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-surface))] p-4 space-y-3', className)}>\n <div className=\"flex items-center gap-3\">\n <Skeleton className=\"size-8 rounded-md\" />\n <div className=\"flex-1 space-y-1.5\">\n <Skeleton className=\"h-3.5 w-32\" />\n <Skeleton className=\"h-2.5 w-20\" />\n </div>\n <Skeleton className=\"h-5 w-14 rounded-full\" />\n </div>\n <div className=\"flex gap-3\">\n <Skeleton className=\"h-2.5 flex-1\" />\n <Skeleton className=\"h-2.5 flex-1\" />\n <Skeleton className=\"h-2.5 flex-1\" />\n </div>\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useRef, useState, useEffect } from 'react'\nimport * as Tooltip from '@radix-ui/react-tooltip'\nimport { Copy, Check } from 'lucide-react'\n\nexport interface TruncatedTextProps {\n /** The full text to display (truncated if it overflows). */\n text: string\n /** Max width constraint for truncation. */\n maxWidth?: string | number\n className?: string\n}\n\n/**\n * @description A text element that truncates with ellipsis and shows a tooltip with the\n * full text on hover when truncated. Includes a copy-to-clipboard button in the tooltip.\n */\nexport function TruncatedText({ text, maxWidth = '100%', className = '' }: TruncatedTextProps): React.JSX.Element {\n const ref = useRef<HTMLSpanElement>(null)\n const [isTruncated, setIsTruncated] = useState(false)\n const [copied, setCopied] = useState(false)\n\n useEffect(() => {\n const el = ref.current\n if (el) setIsTruncated(el.scrollWidth > el.clientWidth)\n }, [text])\n\n const handleCopy = async (e: React.MouseEvent) => {\n e.stopPropagation()\n await navigator.clipboard.writeText(text)\n setCopied(true)\n setTimeout(() => setCopied(false), 1500)\n }\n\n const inner = (\n <span\n ref={ref}\n className={`block truncate ${className}`}\n style={{ maxWidth }}\n >\n {text}\n </span>\n )\n\n if (!isTruncated) return inner\n\n return (\n <Tooltip.Provider delayDuration={300}>\n <Tooltip.Root>\n <Tooltip.Trigger asChild>{inner}</Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content\n side=\"top\"\n align=\"start\"\n sideOffset={6}\n className=\"z-50 max-w-[400px] rounded-lg border border-[hsl(var(--border-default))]\n bg-[hsl(var(--bg-elevated))] px-3 py-2 shadow-lg\n animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out\n data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\"\n >\n <p className=\"text-small text-[hsl(var(--text-primary))] break-all\">{text}</p>\n <div className=\"mt-1.5 flex justify-end\">\n <button\n onClick={handleCopy}\n className=\"flex items-center gap-1 rounded px-2 py-0.5\n text-[11px] text-[hsl(var(--brand-primary))]\n hover:bg-[hsl(var(--bg-surface))] transition-colors\"\n >\n {copied ? <Check className=\"h-3 w-3\" /> : <Copy className=\"h-3 w-3\" />}\n {copied ? 'Copied' : 'Copy'}\n </button>\n </div>\n <Tooltip.Arrow className=\"fill-[hsl(var(--bg-elevated))]\" />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n </Tooltip.Provider>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport * as AlertDialog from '@radix-ui/react-alert-dialog'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { AlertTriangle, Loader2 } from 'lucide-react'\nimport { cn } from '../utils'\n\nexport interface ConfirmDialogProps {\n /** Whether the dialog is open. */\n open: boolean\n /** Callback to control open state. */\n onOpenChange: (open: boolean) => void\n /** Dialog title. */\n title: string\n /** Dialog description text. */\n description: string\n /** Label for the confirm button. */\n confirmLabel?: string\n /** Label for the cancel button. */\n cancelLabel?: string\n /** Visual variant affecting the icon and confirm button color. */\n variant?: 'danger' | 'warning' | 'default'\n /** Show a loading spinner on the confirm button. */\n loading?: boolean\n /** Callback when confirmed. */\n onConfirm: () => void\n}\n\nconst variantStyles = {\n danger: {\n icon: 'text-[hsl(var(--status-critical))] bg-[hsl(var(--status-critical))]/10',\n button: 'bg-[hsl(var(--status-critical))] hover:bg-[hsl(var(--status-critical))]/90 text-[hsl(var(--text-on-brand))]',\n },\n warning: {\n icon: 'text-[hsl(var(--status-warning))] bg-[hsl(var(--status-warning))]/10',\n button: 'bg-[hsl(var(--status-warning))] hover:bg-[hsl(var(--status-warning))]/90 text-[hsl(var(--text-on-brand))]',\n },\n default: {\n icon: 'text-[hsl(var(--brand-primary))] bg-[hsl(var(--brand-primary))]/10',\n button: 'bg-[hsl(var(--brand-primary))] hover:bg-[hsl(var(--brand-primary))]/90 text-[hsl(var(--text-on-brand))]',\n },\n}\n\n/**\n * @description A confirmation dialog built on Radix AlertDialog with Framer Motion animations.\n * Supports danger, warning, and default variants with loading state.\n */\nexport function ConfirmDialog({\n open,\n onOpenChange,\n title,\n description,\n confirmLabel = 'Confirm',\n cancelLabel = 'Cancel',\n variant = 'danger',\n loading = false,\n onConfirm,\n}: ConfirmDialogProps): React.JSX.Element {\n const styles = variantStyles[variant]\n\n return (\n <AlertDialog.Root open={open} onOpenChange={onOpenChange}>\n <AnimatePresence>\n {open && (\n <AlertDialog.Portal forceMount>\n <AlertDialog.Overlay asChild>\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.15 }}\n className=\"fixed inset-0 z-50 bg-[hsl(var(--bg-base)/0.7)] backdrop-blur-sm\"\n />\n </AlertDialog.Overlay>\n <AlertDialog.Content asChild>\n <motion.div\n initial={{ opacity: 0, scale: 0.95, y: 8 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.95, y: 8 }}\n transition={{ duration: 0.2, ease: [0.16, 1, 0.3, 1] }}\n className={cn(\n 'fixed left-1/2 top-1/2 z-50 -translate-x-1/2 -translate-y-1/2',\n 'w-full max-w-md p-6 rounded-2xl',\n 'border border-[hsl(var(--border-default))]',\n 'bg-[hsl(var(--bg-elevated))] shadow-2xl',\n 'focus:outline-none',\n )}\n >\n <div className=\"flex gap-4\">\n <div className={cn('flex-shrink-0 p-2.5 rounded-xl h-fit', styles.icon)}>\n <AlertTriangle className=\"w-5 h-5\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <AlertDialog.Title className=\"text-base font-semibold text-[hsl(var(--text-primary))]\">\n {title}\n </AlertDialog.Title>\n <AlertDialog.Description className=\"mt-2 text-sm text-[hsl(var(--text-secondary))] leading-relaxed\">\n {description}\n </AlertDialog.Description>\n </div>\n </div>\n\n <div className=\"flex justify-end gap-3 mt-6\">\n <AlertDialog.Cancel\n className={cn(\n 'px-4 py-2 text-sm font-medium rounded-lg',\n 'border border-[hsl(var(--border-default))]',\n 'text-[hsl(var(--text-primary))]',\n 'hover:bg-[hsl(var(--bg-overlay))] transition-colors',\n 'focus:outline-none focus:ring-2 focus:ring-[hsl(var(--brand-primary))]',\n )}\n >\n {cancelLabel}\n </AlertDialog.Cancel>\n <AlertDialog.Action\n onClick={(e) => {\n e.preventDefault()\n onConfirm()\n }}\n disabled={loading}\n className={cn(\n 'px-4 py-2 text-sm font-medium rounded-lg transition-all',\n 'focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-[hsl(var(--bg-elevated))]',\n styles.button,\n loading && 'opacity-70 cursor-not-allowed',\n )}\n >\n {loading ? (\n <span className=\"flex items-center gap-2\">\n <Loader2 className=\"w-4 h-4 animate-spin\" />\n {confirmLabel}\n </span>\n ) : (\n confirmLabel\n )}\n </AlertDialog.Action>\n </div>\n </motion.div>\n </AlertDialog.Content>\n </AlertDialog.Portal>\n )}\n </AnimatePresence>\n </AlertDialog.Root>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useEffect, useRef, useState } from 'react'\nimport { useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\n\nexport interface AnimatedCounterProps {\n /** The target numeric value to animate to. */\n value: number\n /** Animation duration in milliseconds. */\n duration?: number\n className?: string\n /** Custom formatting function for the displayed number. */\n format?: (n: number) => string\n}\n\nfunction easeOutCubic(t: number): number {\n return 1 - Math.pow(1 - t, 3)\n}\n\n/**\n * @description An animated number counter that transitions smoothly between values\n * using requestAnimationFrame. Respects prefers-reduced-motion.\n */\nexport function AnimatedCounter({\n value,\n duration = 400,\n className,\n format,\n}: AnimatedCounterProps): React.JSX.Element {\n const reduced = useReducedMotion()\n const prevRef = useRef(value)\n const rafRef = useRef<number | null>(null)\n const [displayed, setDisplayed] = useState(value)\n\n useEffect(() => {\n const from = prevRef.current\n const to = value\n prevRef.current = value\n\n if (reduced || from === to) {\n setDisplayed(to)\n return\n }\n\n const start = performance.now()\n\n function tick(now: number) {\n const elapsed = now - start\n const progress = Math.min(elapsed / duration, 1)\n const eased = easeOutCubic(progress)\n const current = from + (to - from) * eased\n\n setDisplayed(current)\n\n if (progress < 1) {\n rafRef.current = requestAnimationFrame(tick)\n } else {\n setDisplayed(to)\n }\n }\n\n rafRef.current = requestAnimationFrame(tick)\n\n return () => {\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current)\n }\n }\n }, [value, duration, reduced])\n\n const formatted = format\n ? format(displayed)\n : Number.isInteger(value)\n ? Math.round(displayed).toString()\n : displayed.toFixed(\n value.toString().split('.')[1]?.length ?? 1\n )\n\n return (\n <span className={cn('tabular-nums', className)}>\n {formatted}\n </span>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { motion, useReducedMotion } from 'framer-motion'\n\nexport interface SuccessCheckmarkProps {\n /** Size of the SVG in pixels. */\n size?: number\n className?: string\n}\n\n/**\n * @description An animated success checkmark SVG with circle and path draw animations.\n * Uses Framer Motion spring physics. Respects prefers-reduced-motion.\n */\nexport function SuccessCheckmark({ size = 20, className }: SuccessCheckmarkProps): React.JSX.Element {\n const reduced = useReducedMotion()\n\n return (\n <motion.svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n className={className}\n initial={reduced ? false : { scale: 0, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n transition={{ type: 'spring', stiffness: 300, damping: 20 }}\n >\n <motion.circle\n cx=\"10\"\n cy=\"10\"\n r=\"9\"\n stroke=\"hsl(var(--status-ok))\"\n strokeWidth=\"1.5\"\n fill=\"none\"\n initial={reduced ? false : { pathLength: 0 }}\n animate={{ pathLength: 1 }}\n transition={{ duration: 0.4, ease: 'easeOut' }}\n />\n <motion.path\n d=\"M6 10l2.5 2.5L14 7.5\"\n stroke=\"hsl(var(--status-ok))\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n fill=\"none\"\n initial={reduced ? false : { pathLength: 0 }}\n animate={{ pathLength: 1 }}\n transition={{ duration: 0.3, delay: 0.2, ease: 'easeOut' }}\n />\n </motion.svg>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { cn } from '../utils'\n\n/** Configuration for a single status entry in a StatusBadge. */\nexport interface StatusConfig {\n /** Display label. */\n label: string\n /** CSS class for the status dot. */\n dot: string\n /** CSS class for the text color. */\n text: string\n /** CSS class for the background color. */\n bg: string\n}\n\n/** A sensible default status map covering common statuses. */\nexport const defaultStatusMap: Record<string, StatusConfig> = {\n ok: { label: 'OK', dot: 'bg-[hsl(var(--status-ok))]', text: 'text-[hsl(var(--status-ok))]', bg: 'bg-[hsl(var(--status-ok))]/10' },\n active: { label: 'Active', dot: 'bg-[hsl(var(--status-ok))]', text: 'text-[hsl(var(--status-ok))]', bg: 'bg-[hsl(var(--status-ok))]/10' },\n warning: { label: 'Warning', dot: 'bg-[hsl(var(--status-warning))]', text: 'text-[hsl(var(--status-warning))]', bg: 'bg-[hsl(var(--status-warning))]/10' },\n critical: { label: 'Critical', dot: 'bg-[hsl(var(--status-critical))]', text: 'text-[hsl(var(--status-critical))]', bg: 'bg-[hsl(var(--status-critical))]/10' },\n unknown: { label: 'Unknown', dot: 'bg-[hsl(var(--status-unknown))]', text: 'text-[hsl(var(--status-unknown))]', bg: 'bg-[hsl(var(--status-unknown))]/10' },\n maintenance: { label: 'Maintenance', dot: 'bg-[hsl(var(--status-maintenance))]', text: 'text-[hsl(var(--status-maintenance))]', bg: 'bg-[hsl(var(--status-maintenance))]/10' },\n stale: { label: 'Stale', dot: 'bg-[hsl(var(--status-warning))]', text: 'text-[hsl(var(--status-warning))]', bg: 'bg-[hsl(var(--status-warning))]/10' },\n inactive: { label: 'Inactive', dot: 'bg-[hsl(var(--text-tertiary))]', text: 'text-[hsl(var(--text-tertiary))]', bg: 'bg-[hsl(var(--text-tertiary))]/10' },\n decommissioned: { label: 'Decommissioned', dot: 'bg-[hsl(var(--text-disabled))]', text: 'text-[hsl(var(--text-disabled))]', bg: 'bg-[hsl(var(--text-disabled))]/10' },\n pending: { label: 'Pending', dot: 'bg-[hsl(var(--status-warning))]', text: 'text-[hsl(var(--status-warning))]', bg: 'bg-[hsl(var(--status-warning))]/10' },\n}\n\nexport interface StatusBadgeProps {\n /** Status key to look up in the status map. */\n status: string\n /** Override display label. */\n label?: string\n /** Size variant. */\n size?: 'sm' | 'md'\n /** Show a CSS pulse animation on the dot. */\n pulse?: boolean\n /** Custom status map. Falls back to defaultStatusMap. */\n statusMap?: Record<string, StatusConfig>\n className?: string\n}\n\n/**\n * @description A status badge with colored dot indicator and label.\n * Accepts a configurable statusMap to define custom status values and their appearance.\n * Falls back to a built-in default map if none is provided.\n */\nexport function StatusBadge({\n status, label, size = 'md', pulse = false, statusMap, className,\n}: StatusBadgeProps): React.JSX.Element {\n const map = statusMap ?? defaultStatusMap\n const fallback = map['unknown'] ?? defaultStatusMap['unknown']!\n const config = map[status] ?? fallback\n\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full font-medium',\n size === 'sm' ? 'px-1.5 py-0.5 text-[0.6875rem]' : 'px-2 py-1 text-[0.75rem]',\n config.text,\n config.bg,\n className,\n )}\n >\n <span className={cn('rounded-full shrink-0', size === 'sm' ? 'size-1.5' : 'size-2', config.dot, pulse && 'animate-pulse')} />\n {label ?? config.label}\n </span>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { motion, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\n\n/** Configuration for a single status in StatusPulse. */\nexport interface PulseConfig {\n /** CSS class for the solid dot. */\n dot: string\n /** CSS class for the pulse ring. */\n ring: string\n /** Whether to show the pulse ring animation. */\n pulse: boolean\n /** Use faster animation (e.g. for degraded states). */\n fast: boolean\n}\n\n/** Default pulse configuration map for common statuses. */\nexport const defaultPulseConfigMap: Record<string, PulseConfig> = {\n online: { dot: 'bg-[hsl(var(--status-ok))]', ring: 'bg-[hsl(var(--status-ok))]', pulse: true, fast: false },\n degraded: { dot: 'bg-[hsl(var(--status-warning))]', ring: 'bg-[hsl(var(--status-warning))]', pulse: true, fast: true },\n offline: { dot: 'bg-[hsl(var(--status-critical))]', ring: 'bg-[hsl(var(--status-critical))]', pulse: false, fast: false },\n unknown: { dot: 'bg-[hsl(var(--text-tertiary))]', ring: 'bg-[hsl(var(--text-tertiary))]', pulse: false, fast: false },\n}\n\nexport interface StatusPulseProps {\n /** Status key to look up in the config map. */\n status: string\n /** Whether to show the status label text. */\n label?: boolean\n /** Custom pulse configuration map. Falls back to defaultPulseConfigMap. */\n configMap?: Record<string, PulseConfig>\n className?: string\n}\n\n/**\n * @description An animated status indicator dot with optional pulse ring and label.\n * Accepts a configurable map to define custom statuses. Respects prefers-reduced-motion.\n */\nexport function StatusPulse({ status, label = true, configMap, className }: StatusPulseProps): React.JSX.Element {\n const reduced = useReducedMotion()\n const map = configMap ?? defaultPulseConfigMap\n const cfg = map[status] ?? map['unknown'] ?? defaultPulseConfigMap['unknown']!\n\n return (\n <div className={cn('flex items-center gap-2', className)}>\n <div className=\"relative flex size-2.5 shrink-0\">\n {/* Pulse ring -- CSS animation only */}\n {cfg.pulse && !reduced && (\n <span\n className={cn(\n 'absolute inline-flex size-full rounded-full opacity-75 animate-pulse-ring',\n cfg.ring,\n cfg.fast && '[animation-duration:1s]',\n )}\n />\n )}\n {/* Solid dot */}\n <motion.span\n className={cn('relative inline-flex size-2.5 rounded-full', cfg.dot)}\n animate={{ scale: 1 }}\n whileHover={{ scale: reduced ? 1 : 1.3 }}\n transition={{ type: 'spring', stiffness: 400, damping: 15 }}\n />\n </div>\n {label && (\n <motion.span\n key={status}\n initial={reduced ? {} : { opacity: 0 }}\n animate={{ opacity: 1 }}\n className=\"text-xs font-medium capitalize text-[hsl(var(--text-secondary))]\"\n >\n {status}\n </motion.span>\n )}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { Toaster as SonnerToaster } from 'sonner'\n\nexport interface ToasterProps {\n /** Theme mode. Controls Sonner's internal theming. */\n theme?: 'dark' | 'light'\n /** Toast position on screen. */\n position?: 'top-left' | 'top-right' | 'top-center' | 'bottom-left' | 'bottom-right' | 'bottom-center'\n /** Auto-dismiss duration in milliseconds. */\n duration?: number\n}\n\n/**\n * @description A pre-themed Sonner toast container. Accepts theme as a prop\n * instead of reading from a hook, making it portable across applications.\n * Import this Toaster once in your app layout, then use `toast()` from sonner anywhere.\n */\nexport function Toaster({ theme = 'dark', position = 'bottom-right', duration = 4000 }: ToasterProps): React.JSX.Element {\n return (\n <SonnerToaster\n theme={theme}\n position={position}\n richColors\n duration={duration}\n gap={8}\n toastOptions={{\n style: {\n background: 'hsl(var(--bg-elevated))',\n color: 'hsl(var(--text-primary))',\n border: '1px solid hsl(var(--border-default))',\n borderRadius: '0.75rem',\n boxShadow: '0 8px 32px hsl(0 0% 0% / 0.25)',\n fontSize: '0.875rem',\n },\n classNames: {\n success: 'toast-success',\n error: 'toast-error',\n warning: 'toast-warning',\n info: 'toast-info',\n },\n }}\n />\n )\n}\n\n// Re-export toast function for convenient imports\nexport { toast } from 'sonner'\n","'use client'\n\nimport type React from 'react'\nimport { useState, useMemo, useCallback, useRef, useEffect } from 'react'\nimport {\n useReactTable, getCoreRowModel, getSortedRowModel,\n getFilteredRowModel, getPaginationRowModel,\n flexRender, type ColumnDef, type SortingState,\n type ColumnFiltersState, type VisibilityState,\n type FilterFn, type Table,\n} from '@tanstack/react-table'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport {\n Search, ChevronUp, ChevronDown, ChevronsUpDown,\n Download, Filter, X, List, AlignJustify, LayoutList,\n Columns3, Eye, EyeOff, GripVertical,\n} from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\nimport { TruncatedText } from './truncated-text'\nimport { EmptyState } from './empty-state'\nimport { Skeleton } from './skeleton'\nimport { cn } from '../utils'\n\n// ---------------------------------------------------------------------------\n// Types & constants\n// ---------------------------------------------------------------------------\n\nexport type Density = 'compact' | 'comfortable' | 'spacious'\n\nconst DENSITY_CLASSES: Record<Density, string> = {\n compact: 'py-1.5 px-3',\n comfortable: 'py-3 px-4',\n spacious: 'py-4 px-5',\n}\n\nconst DENSITY_ICONS: { key: Density; icon: LucideIcon; label: string }[] = [\n { key: 'compact', icon: List, label: 'Compact' },\n { key: 'comfortable', icon: AlignJustify, label: 'Comfortable' },\n { key: 'spacious', icon: LayoutList, label: 'Spacious' },\n]\n\nconst PAGE_SIZES = [10, 25, 50, 100]\nconst STORAGE_KEY = 'ui-kit-table-density'\n\n// ---------------------------------------------------------------------------\n// Global filter\n// ---------------------------------------------------------------------------\n\nconst globalFilterFn: FilterFn<unknown> = (row, _columnId, filterValue) => {\n const search = String(filterValue).toLowerCase()\n return row.getAllCells().some(cell =>\n String(cell.getValue() ?? '').toLowerCase().includes(search)\n )\n}\n\n// ---------------------------------------------------------------------------\n// CSV export\n// ---------------------------------------------------------------------------\n\nfunction exportToCsv<T>(table: Table<T>, filename: string) {\n const headers = table.getAllColumns().filter(c => c.getIsVisible()).map(c => c.id)\n const rows = table.getFilteredRowModel().rows.map(row =>\n headers.map(h => {\n const val = row.getValue(h)\n const str = String(val ?? '')\n return str.includes(',') || str.includes('\"') ? `\"${str.replace(/\"/g, '\"\"')}\"` : str\n }).join(',')\n )\n const csv = [headers.join(','), ...rows].join('\\n')\n const blob = new Blob([csv], { type: 'text/csv' })\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = `${filename}.csv`\n a.click()\n URL.revokeObjectURL(url)\n}\n\n// ---------------------------------------------------------------------------\n// Column filter popover (internal)\n// ---------------------------------------------------------------------------\n\nfunction ColumnFilterPopover<T>({ column, table }: {\n column: ReturnType<Table<T>['getHeaderGroups']>[0]['headers'][0]['column']\n table: Table<T>\n}) {\n const [open, setOpen] = useState(false)\n const ref = useRef<HTMLDivElement>(null)\n const currentFilter = column.getFilterValue()\n const isActive = currentFilter !== undefined && currentFilter !== '' &&\n !(Array.isArray(currentFilter) && currentFilter.length === 0)\n\n useEffect(() => {\n if (!open) return\n const handler = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false)\n }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [open])\n\n const { kind, uniqueValues } = useMemo(() => {\n const rows = table.getPreFilteredRowModel().rows.slice(0, 100)\n const vals = rows.map(r => r.getValue(column.id)).filter(v => v != null)\n const nums = vals.filter(v => typeof v === 'number' || (typeof v === 'string' && v !== '' && !isNaN(Number(v))))\n if (nums.length > vals.length * 0.7 && vals.length > 0) return { kind: 'number' as const, uniqueValues: [] }\n const uniques = [...new Set(vals.map(v => String(v)))]\n if (uniques.length > 0 && uniques.length < 20) return { kind: 'enum' as const, uniqueValues: uniques.sort() }\n return { kind: 'text' as const, uniqueValues: [] }\n }, [table, column.id])\n\n return (\n <div ref={ref} className=\"relative inline-flex\">\n <button\n onClick={(e) => { e.stopPropagation(); setOpen(o => !o) }}\n className=\"relative p-0.5 rounded hover:bg-[hsl(var(--bg-elevated)/0.5)] transition-colors\"\n aria-label={`Filter ${column.id}`}\n >\n <Filter className=\"h-3 w-3 text-[hsl(var(--text-tertiary))]\" />\n {isActive && (\n <span className=\"absolute -top-0.5 -right-0.5 w-1.5 h-1.5 rounded-full bg-[hsl(var(--brand-primary))]\" />\n )}\n </button>\n\n {open && (\n <div\n className=\"absolute top-full left-0 z-50 mt-1 min-w-[200px]\n bg-[hsl(var(--bg-elevated))] border border-[hsl(var(--border-default))] rounded-lg shadow-lg p-3\"\n onClick={e => e.stopPropagation()}\n >\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-[11px] font-medium text-[hsl(var(--text-secondary))] uppercase tracking-wider\">\n Filter\n </span>\n {isActive && (\n <button\n onClick={() => { column.setFilterValue(undefined); setOpen(false) }}\n className=\"text-[11px] text-[hsl(var(--brand-primary))] hover:underline\"\n >\n Clear\n </button>\n )}\n </div>\n\n {kind === 'text' && (\n <input\n type=\"text\"\n value={(currentFilter as string) ?? ''}\n onChange={e => column.setFilterValue(e.target.value || undefined)}\n placeholder=\"Search\\u2026\"\n className=\"w-full rounded-md border border-[hsl(var(--border-subtle))]\n bg-[hsl(var(--bg-surface))] px-2.5 py-1.5 text-small text-[hsl(var(--text-primary))]\n placeholder:text-[hsl(var(--text-tertiary))] outline-none\n focus:border-[hsl(var(--brand-primary))] transition-colors\"\n autoFocus\n />\n )}\n\n {kind === 'number' && (\n <div className=\"flex gap-2\">\n <input\n type=\"number\"\n value={(currentFilter as [number?, number?])?.[0] ?? ''}\n onChange={e => {\n const val = e.target.value === '' ? undefined : Number(e.target.value)\n column.setFilterValue((old: [number?, number?]) => [val, old?.[1]])\n }}\n placeholder=\"Min\"\n className=\"w-full rounded-md border border-[hsl(var(--border-subtle))]\n bg-[hsl(var(--bg-surface))] px-2.5 py-1.5 text-small text-[hsl(var(--text-primary))]\n placeholder:text-[hsl(var(--text-tertiary))] outline-none\n focus:border-[hsl(var(--brand-primary))] transition-colors\"\n />\n <input\n type=\"number\"\n value={(currentFilter as [number?, number?])?.[1] ?? ''}\n onChange={e => {\n const val = e.target.value === '' ? undefined : Number(e.target.value)\n column.setFilterValue((old: [number?, number?]) => [old?.[0], val])\n }}\n placeholder=\"Max\"\n className=\"w-full rounded-md border border-[hsl(var(--border-subtle))]\n bg-[hsl(var(--bg-surface))] px-2.5 py-1.5 text-small text-[hsl(var(--text-primary))]\n placeholder:text-[hsl(var(--text-tertiary))] outline-none\n focus:border-[hsl(var(--brand-primary))] transition-colors\"\n />\n </div>\n )}\n\n {kind === 'enum' && (\n <div className=\"max-h-[200px] overflow-y-auto space-y-1\">\n {uniqueValues.map(val => {\n const selected = Array.isArray(currentFilter) ? (currentFilter as string[]).includes(val) : false\n return (\n <label key={val} className=\"flex items-center gap-2 rounded px-1.5 py-1\n hover:bg-[hsl(var(--bg-surface)/0.5)] cursor-pointer transition-colors\">\n <input\n type=\"checkbox\"\n checked={selected}\n onChange={() => {\n const prev = Array.isArray(currentFilter) ? (currentFilter as string[]) : []\n const next = selected ? prev.filter(v => v !== val) : [...prev, val]\n column.setFilterValue(next.length > 0 ? next : undefined)\n }}\n className=\"rounded border-[hsl(var(--border-default))] accent-[hsl(var(--brand-primary))]\"\n />\n <span className=\"text-small text-[hsl(var(--text-primary))] truncate\">{val}</span>\n </label>\n )\n })}\n </div>\n )}\n </div>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Column picker\n// ---------------------------------------------------------------------------\n\nfunction ColumnPicker<T>({ table, onClose }: { table: Table<T>; onClose: () => void }) {\n const ref = useRef<HTMLDivElement>(null)\n const [dragIdx, setDragIdx] = useState<number | null>(null)\n\n useEffect(() => {\n const handler = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) onClose()\n }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [onClose])\n\n const allColumns = table.getAllLeafColumns()\n\n const handleDragStart = (idx: number) => setDragIdx(idx)\n const handleDragOver = (e: React.DragEvent, idx: number) => {\n e.preventDefault()\n if (dragIdx === null || dragIdx === idx) return\n const order = table.getState().columnOrder.length > 0\n ? [...table.getState().columnOrder]\n : allColumns.map(c => c.id)\n const [moved] = order.splice(dragIdx, 1)\n if (moved !== undefined) order.splice(idx, 0, moved)\n table.setColumnOrder(order)\n setDragIdx(idx)\n }\n\n return (\n <motion.div\n ref={ref}\n initial={{ opacity: 0, y: -4 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -4 }}\n transition={{ duration: 0.12 }}\n className={cn(\n 'absolute right-0 top-full z-50 mt-1 w-56 rounded-xl overflow-hidden',\n 'border border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-elevated))] shadow-xl',\n )}\n >\n <div className=\"px-3 py-2 border-b border-[hsl(var(--border-subtle)/0.5)]\">\n <span className=\"text-[10px] font-semibold uppercase tracking-wider text-[hsl(var(--text-tertiary))]\">\n Columns\n </span>\n </div>\n <div className=\"max-h-72 overflow-y-auto p-1\">\n {allColumns.map((col, idx) => {\n if (!col.getCanHide()) return null\n const visible = col.getIsVisible()\n const header = typeof col.columnDef.header === 'string' ? col.columnDef.header : col.id\n return (\n <div\n key={col.id}\n draggable\n onDragStart={() => handleDragStart(idx)}\n onDragOver={(e) => handleDragOver(e, idx)}\n onDragEnd={() => setDragIdx(null)}\n className={cn(\n 'flex items-center gap-2 rounded-lg px-2 py-1.5 text-small cursor-grab',\n 'hover:bg-[hsl(var(--bg-surface)/0.7)] transition-colors',\n dragIdx === idx && 'bg-[hsl(var(--brand-primary)/0.1)]',\n )}\n >\n <GripVertical className=\"h-3 w-3 text-[hsl(var(--text-disabled))] shrink-0\" />\n <button\n onClick={() => col.toggleVisibility()}\n className=\"flex items-center gap-2 flex-1 text-left\"\n >\n {visible\n ? <Eye className=\"h-3.5 w-3.5 text-[hsl(var(--brand-primary))]\" />\n : <EyeOff className=\"h-3.5 w-3.5 text-[hsl(var(--text-disabled))]\" />}\n <span className={cn(\n 'truncate',\n visible ? 'text-[hsl(var(--text-primary))]' : 'text-[hsl(var(--text-disabled))]',\n )}>\n {header}\n </span>\n </button>\n </div>\n )\n })}\n </div>\n <div className=\"px-3 py-2 border-t border-[hsl(var(--border-subtle)/0.5)]\">\n <button\n onClick={() => {\n table.toggleAllColumnsVisible(true)\n table.setColumnOrder([])\n }}\n className=\"text-[10px] text-[hsl(var(--brand-primary))] hover:text-[hsl(var(--text-primary))] transition-colors\"\n >\n Reset to defaults\n </button>\n </div>\n </motion.div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// DataTable props\n// ---------------------------------------------------------------------------\n\nexport interface DataTableProps<T> {\n /** Column definitions from @tanstack/react-table. */\n columns: ColumnDef<T, unknown>[]\n /** Row data array. */\n data: T[]\n /** Show loading skeleton. */\n isLoading?: boolean\n /** Custom empty state configuration. */\n emptyState?: { icon: LucideIcon; title: string; description: string }\n /** Placeholder text for the search input. */\n searchPlaceholder?: string\n /** Callback when a row is clicked. */\n onRowClick?: (row: T) => void\n /** Default sorting configuration. */\n defaultSort?: { id: string; desc: boolean }\n /** Default number of rows per page. */\n defaultPageSize?: number\n /** Filename for CSV export (enables export button when set). */\n exportFilename?: string\n /** Make the first column sticky on horizontal scroll. */\n stickyFirstColumn?: boolean\n /** Override the density setting. */\n density?: Density\n}\n\n// ---------------------------------------------------------------------------\n// DataTable component\n// ---------------------------------------------------------------------------\n\n/**\n * @description A full-featured data table with search, column filters, sorting, pagination,\n * density control, column visibility/reorder, CSV export, and Framer Motion row animations.\n * Built on @tanstack/react-table v8.\n */\nexport function DataTable<T>({\n columns,\n data,\n isLoading = false,\n emptyState: emptyStateProps,\n searchPlaceholder = 'Search...',\n onRowClick,\n defaultSort,\n defaultPageSize = 25,\n exportFilename,\n stickyFirstColumn = false,\n density: densityProp,\n}: DataTableProps<T>): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n\n const [density, setDensity] = useState<Density>(() => {\n if (densityProp) return densityProp\n if (typeof window !== 'undefined') {\n const stored = localStorage.getItem(STORAGE_KEY)\n if (stored && stored in DENSITY_CLASSES) return stored as Density\n }\n return 'comfortable'\n })\n\n const handleDensity = useCallback((d: Density) => {\n setDensity(d)\n localStorage.setItem(STORAGE_KEY, d)\n }, [])\n\n const [sorting, setSorting] = useState<SortingState>(\n defaultSort ? [{ id: defaultSort.id, desc: defaultSort.desc }] : []\n )\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([])\n const [globalFilter, setGlobalFilter] = useState('')\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>({})\n const [columnOrder, setColumnOrder] = useState<string[]>([])\n const [columnPickerOpen, setColumnPickerOpen] = useState(false)\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const table = useReactTable({\n data: data as any[],\n columns: columns as any,\n state: { sorting, columnFilters, globalFilter, columnVisibility, columnOrder },\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n onGlobalFilterChange: setGlobalFilter,\n onColumnVisibilityChange: setColumnVisibility,\n onColumnOrderChange: setColumnOrder,\n globalFilterFn,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n initialState: { pagination: { pageSize: defaultPageSize } },\n })\n\n const activeFilterCount = columnFilters.length\n const { pageIndex, pageSize } = table.getState().pagination\n const totalRows = table.getFilteredRowModel().rows.length\n const startRow = totalRows === 0 ? 0 : pageIndex * pageSize + 1\n const endRow = Math.min((pageIndex + 1) * pageSize, totalRows)\n const pageCount = table.getPageCount()\n\n const rowVariants = useMemo(() => ({\n hidden: { opacity: 0, y: 4 },\n visible: (i: number) => ({\n opacity: 1,\n y: 0,\n transition: {\n delay: Math.min(i, 20) * 0.02,\n duration: 0.15,\n },\n }),\n }), [])\n\n // Loading skeleton\n if (isLoading) {\n return (\n <div className=\"rounded-xl border border-[hsl(var(--border-subtle)/0.5)]\n bg-[hsl(var(--bg-surface)/0.6)] backdrop-blur-xl overflow-hidden\">\n <div className=\"flex items-center gap-3 p-4 border-b border-[hsl(var(--border-subtle)/0.3)]\">\n <Skeleton className=\"h-9 w-64 rounded-lg\" />\n <div className=\"flex-1\" />\n <Skeleton className=\"h-8 w-24 rounded-lg\" />\n </div>\n <div className=\"divide-y divide-[hsl(var(--border-subtle)/0.3)]\">\n {Array.from({ length: 8 }).map((_, i) => (\n <div key={i} className={cn('flex gap-4', DENSITY_CLASSES.comfortable)}>\n <Skeleton className=\"h-4 w-32\" />\n <Skeleton className=\"h-4 w-48\" />\n <Skeleton className=\"h-4 w-24\" />\n <Skeleton className=\"h-4 flex-1\" />\n </div>\n ))}\n </div>\n </div>\n )\n }\n\n return (\n <div className=\"rounded-xl border border-[hsl(var(--border-subtle)/0.5)]\n bg-[hsl(var(--bg-surface)/0.6)] backdrop-blur-xl overflow-hidden\">\n\n {/* Toolbar */}\n <div className=\"flex flex-wrap items-center gap-3 px-4 py-3\n border-b border-[hsl(var(--border-subtle)/0.3)]\">\n\n {/* Search */}\n <div className=\"relative flex-1 min-w-[200px] max-w-sm\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4\n text-[hsl(var(--text-tertiary))]\" />\n <input\n type=\"text\"\n value={globalFilter}\n onChange={e => setGlobalFilter(e.target.value)}\n placeholder={searchPlaceholder}\n className=\"w-full rounded-lg border border-[hsl(var(--border-subtle))]\n bg-[hsl(var(--bg-surface))] pl-9 pr-3 py-2 text-small\n text-[hsl(var(--text-primary))] placeholder:text-[hsl(var(--text-tertiary))]\n outline-none focus:border-[hsl(var(--brand-primary))] transition-colors\"\n />\n {globalFilter && (\n <button\n onClick={() => setGlobalFilter('')}\n className=\"absolute right-2.5 top-1/2 -translate-y-1/2 p-0.5 rounded\n hover:bg-[hsl(var(--bg-elevated)/0.5)] transition-colors\"\n >\n <X className=\"h-3.5 w-3.5 text-[hsl(var(--text-tertiary))]\" />\n </button>\n )}\n </div>\n\n {/* Active filter count */}\n {activeFilterCount > 0 && (\n <span className=\"inline-flex items-center gap-1 rounded-full\n bg-[hsl(var(--brand-primary)/0.15)] px-2.5 py-1 text-[11px] font-medium\n text-[hsl(var(--brand-primary))]\">\n <Filter className=\"h-3 w-3\" />\n {activeFilterCount} filter{activeFilterCount > 1 ? 's' : ''}\n </span>\n )}\n\n <div className=\"flex-1\" />\n\n {/* Density toggle */}\n <div className=\"flex items-center rounded-lg border border-[hsl(var(--border-subtle))]\n bg-[hsl(var(--bg-surface))] p-0.5\">\n {DENSITY_ICONS.map(({ key, icon: Icon, label }) => (\n <button\n key={key}\n onClick={() => handleDensity(key)}\n title={label}\n className={cn(\n 'p-1.5 rounded-md transition-colors',\n density === key\n ? 'bg-[hsl(var(--brand-primary)/0.2)] text-[hsl(var(--brand-primary))]'\n : 'text-[hsl(var(--text-tertiary))] hover:text-[hsl(var(--text-secondary))]',\n )}\n >\n <Icon className=\"h-3.5 w-3.5\" />\n </button>\n ))}\n </div>\n\n {/* Column visibility picker */}\n <div className=\"relative\">\n <button\n onClick={() => setColumnPickerOpen(o => !o)}\n className={cn(\n 'flex items-center gap-1.5 rounded-lg border border-[hsl(var(--border-subtle))]',\n 'bg-[hsl(var(--bg-surface))] px-3 py-1.5 text-small text-[hsl(var(--text-secondary))]',\n 'hover:bg-[hsl(var(--bg-elevated)/0.5)] hover:text-[hsl(var(--text-primary))] transition-colors',\n )}\n >\n <Columns3 className=\"h-3.5 w-3.5\" />\n Columns\n </button>\n <AnimatePresence>\n {columnPickerOpen && (\n <ColumnPicker table={table} onClose={() => setColumnPickerOpen(false)} />\n )}\n </AnimatePresence>\n </div>\n\n {/* CSV export */}\n {exportFilename && (\n <button\n onClick={() => exportToCsv(table, exportFilename)}\n className=\"flex items-center gap-1.5 rounded-lg border border-[hsl(var(--border-subtle))]\n bg-[hsl(var(--bg-surface))] px-3 py-1.5 text-small text-[hsl(var(--text-secondary))]\n hover:bg-[hsl(var(--bg-elevated)/0.5)] hover:text-[hsl(var(--text-primary))]\n transition-colors\"\n >\n <Download className=\"h-3.5 w-3.5\" />\n Export\n </button>\n )}\n\n {/* Row count */}\n <span className=\"text-[11px] text-[hsl(var(--text-tertiary))] tabular-nums\">\n {totalRows} row{totalRows !== 1 ? 's' : ''}\n </span>\n </div>\n\n {/* Table */}\n <div className={cn('overflow-x-auto', stickyFirstColumn && 'relative')}>\n <table className=\"w-full border-collapse text-small\">\n <thead>\n {table.getHeaderGroups().map(headerGroup => (\n <tr key={headerGroup.id} className=\"bg-[hsl(var(--bg-elevated)/0.3)]\">\n {headerGroup.headers.map((header, colIdx) => {\n const canSort = header.column.getCanSort()\n const sorted = header.column.getIsSorted()\n return (\n <th\n key={header.id}\n className={cn(\n DENSITY_CLASSES[density],\n 'text-left text-[11px] font-semibold uppercase tracking-wider',\n 'text-[hsl(var(--text-tertiary))] select-none whitespace-nowrap',\n 'border-b border-[hsl(var(--border-subtle)/0.3)]',\n stickyFirstColumn && colIdx === 0 &&\n 'sticky left-0 z-10 bg-[hsl(var(--bg-elevated)/0.8)] backdrop-blur-sm',\n )}\n >\n <div className=\"flex items-center gap-1.5\">\n {canSort ? (\n <button\n onClick={header.column.getToggleSortingHandler()}\n className=\"flex items-center gap-1 hover:text-[hsl(var(--text-secondary))] transition-colors\"\n >\n {header.isPlaceholder\n ? null\n : flexRender(header.column.columnDef.header, header.getContext())}\n {sorted === 'asc' ? (\n <ChevronUp className=\"h-3.5 w-3.5 text-[hsl(var(--brand-primary))]\" />\n ) : sorted === 'desc' ? (\n <ChevronDown className=\"h-3.5 w-3.5 text-[hsl(var(--brand-primary))]\" />\n ) : (\n <ChevronsUpDown className=\"h-3 w-3 opacity-40\" />\n )}\n </button>\n ) : (\n header.isPlaceholder\n ? null\n : flexRender(header.column.columnDef.header, header.getContext())\n )}\n {header.column.getCanFilter() && (\n <ColumnFilterPopover column={header.column} table={table} />\n )}\n </div>\n </th>\n )\n })}\n </tr>\n ))}\n </thead>\n <tbody>\n <AnimatePresence mode=\"popLayout\">\n {table.getRowModel().rows.length === 0 ? (\n <tr>\n <td colSpan={columns.length} className=\"p-0\">\n {emptyStateProps ? (\n <EmptyState\n icon={emptyStateProps.icon}\n title={emptyStateProps.title}\n description={emptyStateProps.description}\n className=\"border-0 rounded-none\"\n />\n ) : (\n <EmptyState\n icon={Search}\n title=\"No results\"\n description=\"No rows match your search or filter criteria.\"\n className=\"border-0 rounded-none\"\n />\n )}\n </td>\n </tr>\n ) : (\n table.getRowModel().rows.map((row, i) => (\n <motion.tr\n key={row.id}\n custom={i}\n variants={prefersReducedMotion ? undefined : rowVariants}\n initial={prefersReducedMotion ? undefined : 'hidden'}\n animate={prefersReducedMotion ? undefined : 'visible'}\n exit={prefersReducedMotion ? undefined : { opacity: 0 }}\n onClick={onRowClick ? () => onRowClick(row.original) : undefined}\n className={cn(\n 'border-b border-[hsl(var(--border-subtle)/0.3)]',\n 'transition-colors',\n onRowClick && 'cursor-pointer hover:bg-[hsl(var(--bg-elevated)/0.5)]',\n )}\n >\n {row.getVisibleCells().map((cell, colIdx) => (\n <td\n key={cell.id}\n className={cn(\n DENSITY_CLASSES[density],\n 'text-[hsl(var(--text-primary))]',\n stickyFirstColumn && colIdx === 0 &&\n 'sticky left-0 z-10 bg-[hsl(var(--bg-surface)/0.9)] backdrop-blur-sm',\n )}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </td>\n ))}\n </motion.tr>\n ))\n )}\n </AnimatePresence>\n </tbody>\n </table>\n </div>\n\n {/* Pagination footer */}\n {totalRows > 0 && (\n <div className=\"flex flex-wrap items-center justify-between gap-3 px-4 py-3\n border-t border-[hsl(var(--border-subtle)/0.3)]\">\n <span className=\"text-[12px] text-[hsl(var(--text-tertiary))] tabular-nums\">\n Showing {startRow}&ndash;{endRow} of {totalRows}\n </span>\n\n <div className=\"flex items-center gap-2\">\n <select\n value={pageSize}\n onChange={e => table.setPageSize(Number(e.target.value))}\n className=\"rounded-md border border-[hsl(var(--border-subtle))]\n bg-[hsl(var(--bg-surface))] px-2 py-1 text-[12px]\n text-[hsl(var(--text-secondary))] outline-none\n focus:border-[hsl(var(--brand-primary))] transition-colors\"\n >\n {PAGE_SIZES.map(size => (\n <option key={size} value={size}>{size} / page</option>\n ))}\n </select>\n\n <div className=\"flex items-center gap-1\">\n <PaginationButton\n onClick={() => table.setPageIndex(0)}\n disabled={!table.getCanPreviousPage()}\n >\n First\n </PaginationButton>\n <PaginationButton\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n >\n Prev\n </PaginationButton>\n\n {generatePageNumbers(pageIndex, pageCount).map((p, idx) =>\n p === -1 ? (\n <span key={`ellipsis-${idx}`} className=\"px-1 text-[hsl(var(--text-tertiary))]\">\n ...\n </span>\n ) : (\n <PaginationButton\n key={p}\n onClick={() => table.setPageIndex(p)}\n active={p === pageIndex}\n >\n {p + 1}\n </PaginationButton>\n )\n )}\n\n <PaginationButton\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n >\n Next\n </PaginationButton>\n <PaginationButton\n onClick={() => table.setPageIndex(pageCount - 1)}\n disabled={!table.getCanNextPage()}\n >\n Last\n </PaginationButton>\n </div>\n </div>\n </div>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Pagination button\n// ---------------------------------------------------------------------------\n\nfunction PaginationButton({ children, onClick, disabled, active }: {\n children: React.ReactNode\n onClick: () => void\n disabled?: boolean\n active?: boolean\n}) {\n return (\n <button\n onClick={onClick}\n disabled={disabled}\n className={cn(\n 'rounded-md px-2 py-1 text-[12px] font-medium transition-colors tabular-nums',\n active\n ? 'bg-[hsl(var(--brand-primary)/0.2)] text-[hsl(var(--brand-primary))]'\n : 'text-[hsl(var(--text-secondary))] hover:bg-[hsl(var(--bg-elevated)/0.5)] hover:text-[hsl(var(--text-primary))]',\n disabled && 'opacity-40 pointer-events-none',\n )}\n >\n {children}\n </button>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Page number generation\n// ---------------------------------------------------------------------------\n\nfunction generatePageNumbers(current: number, total: number): number[] {\n if (total <= 7) return Array.from({ length: total }, (_, i) => i)\n const pages: number[] = []\n const addPage = (p: number) => { if (!pages.includes(p)) pages.push(p) }\n addPage(0)\n for (let i = Math.max(1, current - 1); i <= Math.min(total - 2, current + 1); i++) addPage(i)\n addPage(total - 1)\n const result: number[] = []\n for (let i = 0; i < pages.length; i++) {\n if (i > 0 && pages[i]! - pages[i - 1]! > 1) result.push(-1)\n result.push(pages[i]!)\n }\n return result\n}\n\n// Re-export TruncatedText for convenience (used often with DataTable)\nexport { TruncatedText }\n","'use client'\n\nimport type React from 'react'\nimport { useCallback, useRef, type KeyboardEvent } from 'react'\nimport { motion, useReducedMotion } from 'framer-motion'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '../utils'\n\n/** A single tab definition. */\nexport interface Tab {\n /** Unique value for this tab. */\n value: string\n /** Display label. */\n label: string\n /** Optional icon component. */\n icon?: LucideIcon\n /** Whether this tab is disabled. */\n disabled?: boolean\n}\n\nexport interface TabsProps {\n /** Array of tab definitions. */\n tabs: Tab[]\n /** Currently selected tab value. */\n value: string\n /** Callback when a tab is selected. */\n onChange: (value: string) => void\n /** Visual variant. */\n variant?: 'underline' | 'pills' | 'enclosed'\n /** Size preset. */\n size?: 'sm' | 'md'\n /** Additional class name for the root element. */\n className?: string\n}\n\nconst sizeClasses = {\n sm: 'text-xs px-3 py-1.5 gap-1.5',\n md: 'text-sm px-4 py-2 gap-2',\n} as const\n\n/**\n * @description Accessible tabbed interface with three visual variants.\n * Uses Framer Motion layoutId for animated indicator sliding between tabs.\n * Supports keyboard navigation (arrow keys) and ARIA roles.\n */\nexport function Tabs({\n tabs,\n value,\n onChange,\n variant = 'underline',\n size = 'md',\n className,\n}: TabsProps): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n const tabListRef = useRef<HTMLDivElement>(null)\n\n const enabledTabs = tabs.filter((t) => !t.disabled)\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n const currentIdx = enabledTabs.findIndex((t) => t.value === value)\n if (currentIdx === -1) return\n\n let nextIdx: number | null = null\n\n if (e.key === 'ArrowRight' || e.key === 'ArrowDown') {\n e.preventDefault()\n nextIdx = (currentIdx + 1) % enabledTabs.length\n } else if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') {\n e.preventDefault()\n nextIdx = (currentIdx - 1 + enabledTabs.length) % enabledTabs.length\n } else if (e.key === 'Home') {\n e.preventDefault()\n nextIdx = 0\n } else if (e.key === 'End') {\n e.preventDefault()\n nextIdx = enabledTabs.length - 1\n }\n\n if (nextIdx !== null) {\n onChange(enabledTabs[nextIdx].value)\n const buttons = tabListRef.current?.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]:not([disabled])')\n buttons?.[nextIdx]?.focus()\n }\n },\n [enabledTabs, value, onChange],\n )\n\n const listCls = cn(\n 'inline-flex items-center',\n variant === 'underline' && 'border-b border-[hsl(var(--border-subtle))] gap-0',\n variant === 'pills' && 'gap-1 p-1 rounded-xl bg-[hsl(var(--bg-surface))]',\n variant === 'enclosed' && 'gap-0 border-b border-[hsl(var(--border-subtle))]',\n className,\n )\n\n const layoutId = `tabs-indicator-${variant}`\n\n return (\n <div\n ref={tabListRef}\n role=\"tablist\"\n aria-orientation=\"horizontal\"\n onKeyDown={handleKeyDown}\n className={listCls}\n >\n {tabs.map((tab) => {\n const isActive = tab.value === value\n const Icon = tab.icon\n\n const buttonCls = cn(\n 'relative inline-flex items-center justify-center font-medium transition-colors duration-150',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[hsl(var(--brand-primary))] focus-visible:ring-offset-1 focus-visible:ring-offset-[hsl(var(--bg-base))]',\n 'disabled:pointer-events-none disabled:opacity-40',\n 'cursor-pointer select-none whitespace-nowrap',\n sizeClasses[size],\n // variant-specific active/inactive\n variant === 'underline' && [\n isActive\n ? 'text-[hsl(var(--text-primary))]'\n : 'text-[hsl(var(--text-tertiary))] hover:text-[hsl(var(--text-secondary))]',\n ],\n variant === 'pills' && [\n isActive\n ? 'text-[hsl(var(--text-primary))]'\n : 'text-[hsl(var(--text-tertiary))] hover:text-[hsl(var(--text-secondary))] hover:bg-[hsl(var(--bg-elevated)/0.5)]',\n 'rounded-lg',\n ],\n variant === 'enclosed' && [\n isActive\n ? 'text-[hsl(var(--text-primary))] bg-[hsl(var(--bg-elevated))]'\n : 'text-[hsl(var(--text-tertiary))] hover:text-[hsl(var(--text-secondary))]',\n 'rounded-t-lg',\n ],\n )\n\n return (\n <button\n key={tab.value}\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={`tabpanel-${tab.value}`}\n tabIndex={isActive ? 0 : -1}\n disabled={tab.disabled}\n onClick={() => onChange(tab.value)}\n className={buttonCls}\n >\n {Icon && <Icon className={size === 'sm' ? 'h-3.5 w-3.5' : 'h-4 w-4'} />}\n {tab.label}\n\n {/* Animated indicator */}\n {isActive && variant === 'underline' && (\n <motion.div\n layoutId={layoutId}\n className=\"absolute bottom-0 left-0 right-0 h-0.5 bg-[hsl(var(--brand-primary))] rounded-full\"\n transition={prefersReducedMotion ? { duration: 0 } : { type: 'spring', stiffness: 500, damping: 35 }}\n />\n )}\n {isActive && variant === 'pills' && (\n <motion.div\n layoutId={layoutId}\n className=\"absolute inset-0 rounded-lg bg-[hsl(var(--bg-elevated))] -z-10\"\n transition={prefersReducedMotion ? { duration: 0 } : { type: 'spring', stiffness: 500, damping: 35 }}\n />\n )}\n {isActive && variant === 'enclosed' && (\n <motion.div\n layoutId={layoutId}\n className=\"absolute bottom-0 left-0 right-0 h-0.5 bg-[hsl(var(--brand-primary))] rounded-full\"\n transition={prefersReducedMotion ? { duration: 0 } : { type: 'spring', stiffness: 500, damping: 35 }}\n />\n )}\n </button>\n )\n })}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { type ReactNode } from 'react'\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '../utils'\n\n/** A single menu item definition. */\nexport interface MenuItem {\n /** Display label. */\n label: string\n /** Optional icon component. */\n icon?: LucideIcon\n /** Callback when item is clicked. */\n onClick: () => void\n /** Visual variant — danger for destructive actions. */\n variant?: 'default' | 'danger'\n /** Whether this item is disabled. */\n disabled?: boolean\n}\n\nexport interface DropdownMenuProps {\n /** Trigger element that opens the menu. */\n trigger: ReactNode\n /** Array of menu item definitions. */\n items: MenuItem[]\n /** Alignment of the menu relative to the trigger. */\n align?: 'start' | 'center' | 'end'\n /** Additional class name for the content container. */\n className?: string\n}\n\nconst contentVariants = {\n hidden: { opacity: 0, scale: 0.95, y: -4 },\n visible: { opacity: 1, scale: 1, y: 0 },\n exit: { opacity: 0, scale: 0.95, y: -4 },\n}\n\n/**\n * @description A context/action dropdown menu built on Radix DropdownMenu.\n * Features Framer Motion entry/exit animations, keyboard accessibility,\n * and a danger variant for destructive actions.\n */\nexport function DropdownMenu({ trigger, items, align = 'end', className }: DropdownMenuProps): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n\n return (\n <DropdownMenuPrimitive.Root>\n <DropdownMenuPrimitive.Trigger asChild>{trigger}</DropdownMenuPrimitive.Trigger>\n\n <AnimatePresence>\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n align={align}\n sideOffset={6}\n asChild\n >\n <motion.div\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"exit\"\n variants={contentVariants}\n transition={prefersReducedMotion ? { duration: 0 } : { duration: 0.15, ease: [0.16, 1, 0.3, 1] }}\n className={cn(\n 'z-50 min-w-[160px] overflow-hidden rounded-xl p-1',\n 'border border-[hsl(var(--border-default))]',\n 'bg-[hsl(var(--bg-elevated))] shadow-xl',\n 'focus:outline-none',\n className,\n )}\n >\n {items.map((item, i) => {\n const Icon = item.icon\n const isDanger = item.variant === 'danger'\n\n return (\n <DropdownMenuPrimitive.Item\n key={i}\n disabled={item.disabled}\n onSelect={item.onClick}\n className={cn(\n 'relative flex items-center gap-2.5 px-3 py-2 text-sm rounded-lg',\n 'outline-none cursor-pointer select-none transition-colors duration-100',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-40',\n isDanger\n ? 'text-[hsl(var(--status-critical))] data-[highlighted]:bg-[hsl(var(--status-critical)/0.1)]'\n : 'text-[hsl(var(--text-primary))] data-[highlighted]:bg-[hsl(var(--bg-overlay))]',\n )}\n >\n {Icon && (\n <Icon\n className={cn(\n 'h-4 w-4 shrink-0',\n isDanger\n ? 'text-[hsl(var(--status-critical))]'\n : 'text-[hsl(var(--text-secondary))]',\n )}\n />\n )}\n {item.label}\n </DropdownMenuPrimitive.Item>\n )\n })}\n </motion.div>\n </DropdownMenuPrimitive.Content>\n </DropdownMenuPrimitive.Portal>\n </AnimatePresence>\n </DropdownMenuPrimitive.Root>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useEffect, useCallback, useRef, type ReactNode } from 'react'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { X } from 'lucide-react'\nimport { cn } from '../utils'\n\nexport interface SheetProps {\n /** Whether the sheet is open. */\n open: boolean\n /** Callback to close the sheet. */\n onClose: () => void\n /** Edge from which the sheet slides in. */\n side?: 'right' | 'left' | 'top' | 'bottom'\n /** Title displayed in the sheet header. */\n title?: string\n /** Description text below the title. */\n description?: string\n /** Width class for left/right sheets, height class for top/bottom. */\n width?: string\n /** Sheet content. */\n children: ReactNode\n /** Additional class name for the panel. */\n className?: string\n}\n\nconst slideVariants = {\n right: { initial: { x: '100%' }, animate: { x: 0 }, exit: { x: '100%' } },\n left: { initial: { x: '-100%' }, animate: { x: 0 }, exit: { x: '-100%' } },\n top: { initial: { y: '-100%' }, animate: { y: 0 }, exit: { y: '-100%' } },\n bottom: { initial: { y: '100%' }, animate: { y: 0 }, exit: { y: '100%' } },\n}\n\nconst positionClasses = {\n right: 'inset-y-0 right-0',\n left: 'inset-y-0 left-0',\n top: 'inset-x-0 top-0',\n bottom: 'inset-x-0 bottom-0',\n}\n\n/**\n * @description A slide-over panel (drawer) from any edge of the screen.\n * Features backdrop overlay, spring animation, Escape to close, backdrop click to close,\n * and focus trapping within the panel.\n */\nexport function Sheet({\n open,\n onClose,\n side = 'right',\n title,\n description,\n width = 'max-w-md',\n children,\n className,\n}: SheetProps): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n const panelRef = useRef<HTMLDivElement>(null)\n\n // Close on Escape\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose()\n },\n [onClose],\n )\n\n useEffect(() => {\n if (open) {\n document.addEventListener('keydown', handleKeyDown)\n // Prevent body scroll\n const prevOverflow = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n document.body.style.overflow = prevOverflow\n }\n }\n }, [open, handleKeyDown])\n\n // Focus the panel when opened\n useEffect(() => {\n if (open) {\n requestAnimationFrame(() => {\n panelRef.current?.focus()\n })\n }\n }, [open])\n\n const isHorizontal = side === 'left' || side === 'right'\n const variants = slideVariants[side]\n\n return (\n <AnimatePresence>\n {open && (\n <div className=\"fixed inset-0 z-50\">\n {/* Backdrop */}\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={prefersReducedMotion ? { duration: 0 } : { duration: 0.2 }}\n className=\"absolute inset-0 bg-[hsl(var(--bg-base)/0.6)] backdrop-blur-sm\"\n onClick={onClose}\n />\n\n {/* Panel */}\n <motion.div\n ref={panelRef}\n tabIndex={-1}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={title}\n initial={variants.initial}\n animate={variants.animate}\n exit={variants.exit}\n transition={\n prefersReducedMotion\n ? { duration: 0 }\n : { type: 'spring', stiffness: 400, damping: 35 }\n }\n className={cn(\n 'absolute flex flex-col',\n 'bg-[hsl(var(--bg-surface))] border-[hsl(var(--border-default))]',\n 'shadow-2xl focus:outline-none',\n positionClasses[side],\n isHorizontal\n ? cn('w-full h-full', width, side === 'right' ? 'border-l' : 'border-r')\n : cn('h-auto w-full', side === 'top' ? 'border-b' : 'border-t'),\n className,\n )}\n >\n {/* Header */}\n {(title || description) && (\n <div className=\"flex items-start justify-between gap-4 px-6 pt-6 pb-4 border-b border-[hsl(var(--border-subtle))]\">\n <div className=\"min-w-0\">\n {title && (\n <h2 className=\"text-base font-semibold text-[hsl(var(--text-primary))]\">{title}</h2>\n )}\n {description && (\n <p className=\"mt-1 text-sm text-[hsl(var(--text-secondary))]\">{description}</p>\n )}\n </div>\n <button\n onClick={onClose}\n className={cn(\n 'shrink-0 p-1.5 rounded-lg transition-colors',\n 'text-[hsl(var(--text-tertiary))] hover:text-[hsl(var(--text-primary))]',\n 'hover:bg-[hsl(var(--bg-elevated))]',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[hsl(var(--brand-primary))]',\n )}\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n )}\n\n {/* Content */}\n <div className=\"flex-1 overflow-y-auto px-6 py-4\">{children}</div>\n </motion.div>\n </div>\n )}\n </AnimatePresence>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { motion, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\n\nexport interface ProgressProps {\n /** Current progress value (0-100 by default). */\n value: number\n /** Maximum value. */\n max?: number\n /** Optional label displayed above the bar. */\n label?: string\n /** Show the current percentage value. */\n showValue?: boolean\n /** Color variant. */\n variant?: 'default' | 'success' | 'warning' | 'danger'\n /** Height preset. */\n size?: 'sm' | 'md' | 'lg'\n /** Animate the fill width on value changes. */\n animated?: boolean\n /** Show an indeterminate shimmer animation (ignores value). */\n indeterminate?: boolean\n /** Additional class name for the root element. */\n className?: string\n}\n\nconst variantColors: Record<NonNullable<ProgressProps['variant']>, string> = {\n default: 'bg-[hsl(var(--brand-primary))]',\n success: 'bg-[hsl(var(--status-ok))]',\n warning: 'bg-[hsl(var(--status-warning))]',\n danger: 'bg-[hsl(var(--status-critical))]',\n}\n\nconst sizeClasses: Record<NonNullable<ProgressProps['size']>, string> = {\n sm: 'h-1.5',\n md: 'h-2.5',\n lg: 'h-4',\n}\n\n/**\n * @description A progress bar with optional label, animated fill, and indeterminate mode.\n * Supports multiple color variants and size presets.\n */\nexport function Progress({\n value,\n max = 100,\n label,\n showValue = false,\n variant = 'default',\n size = 'md',\n animated = true,\n indeterminate = false,\n className,\n}: ProgressProps): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n const pct = Math.min(100, Math.max(0, (value / max) * 100))\n\n return (\n <div className={cn('w-full', className)}>\n {/* Label + value row */}\n {(label || showValue) && (\n <div className=\"flex items-center justify-between mb-1.5\">\n {label && (\n <span className=\"text-xs font-medium text-[hsl(var(--text-secondary))]\">{label}</span>\n )}\n {showValue && !indeterminate && (\n <span className=\"text-xs font-medium tabular-nums text-[hsl(var(--text-secondary))]\">\n {Math.round(pct)}%\n </span>\n )}\n </div>\n )}\n\n {/* Track */}\n <div\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : pct}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={label}\n className={cn(\n 'w-full overflow-hidden rounded-full bg-[hsl(var(--bg-overlay))]',\n sizeClasses[size],\n )}\n >\n {indeterminate ? (\n <div\n className={cn(\n 'h-full w-1/3 rounded-full',\n variantColors[variant],\n prefersReducedMotion ? '' : 'animate-shimmer',\n )}\n style={\n prefersReducedMotion\n ? { width: '33%' }\n : {\n animation: 'indeterminate-slide 1.5s ease-in-out infinite',\n }\n }\n />\n ) : animated && !prefersReducedMotion ? (\n <motion.div\n className={cn('h-full rounded-full', variantColors[variant])}\n initial={{ width: 0 }}\n animate={{ width: `${pct}%` }}\n transition={{ type: 'spring', stiffness: 100, damping: 20 }}\n />\n ) : (\n <div\n className={cn('h-full rounded-full transition-[width] duration-300', variantColors[variant])}\n style={{ width: `${pct}%` }}\n />\n )}\n </div>\n\n {/* Indeterminate keyframes injected as inline style */}\n {indeterminate && !prefersReducedMotion && (\n <style>{`\n @keyframes indeterminate-slide {\n 0% { transform: translateX(-100%); }\n 50% { transform: translateX(200%); }\n 100% { transform: translateX(-100%); }\n }\n `}</style>\n )}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useState } from 'react'\nimport { cn } from '../utils'\n\nexport interface AvatarProps {\n /** Image source URL. */\n src?: string\n /** Alt text for the image; used for accessibility. */\n alt: string\n /** Initials fallback (e.g. \"JD\"). Derived from alt if not provided. */\n fallback?: string\n /** Size preset. */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n /** Optional status dot overlay. */\n status?: 'online' | 'offline' | 'busy' | 'away'\n /** Additional class name for the root element. */\n className?: string\n}\n\nconst sizeClasses: Record<NonNullable<AvatarProps['size']>, { root: string; text: string; dot: string }> = {\n xs: { root: 'h-6 w-6', text: 'text-[10px]', dot: 'h-2 w-2 -bottom-0 -right-0 ring-1' },\n sm: { root: 'h-8 w-8', text: 'text-xs', dot: 'h-2.5 w-2.5 -bottom-0.5 -right-0.5 ring-[1.5px]' },\n md: { root: 'h-10 w-10', text: 'text-sm', dot: 'h-3 w-3 -bottom-0.5 -right-0.5 ring-2' },\n lg: { root: 'h-12 w-12', text: 'text-base', dot: 'h-3.5 w-3.5 -bottom-0.5 -right-0.5 ring-2' },\n xl: { root: 'h-16 w-16', text: 'text-lg', dot: 'h-4 w-4 -bottom-0.5 -right-0.5 ring-2' },\n}\n\nconst statusColors: Record<NonNullable<AvatarProps['status']>, string> = {\n online: 'bg-[hsl(var(--status-ok))]',\n offline: 'bg-[hsl(var(--text-disabled))]',\n busy: 'bg-[hsl(var(--status-critical))]',\n away: 'bg-[hsl(var(--status-warning))]',\n}\n\n/**\n * Derive initials from a name string (max 2 characters).\n */\nfunction deriveInitials(name: string): string {\n const parts = name.trim().split(/\\s+/)\n if (parts.length >= 2) {\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase()\n }\n return name.slice(0, 2).toUpperCase()\n}\n\n/**\n * @description User/entity avatar with image support and initials fallback.\n * Optional status dot overlay for presence indication.\n */\nexport function Avatar({\n src,\n alt,\n fallback,\n size = 'md',\n status,\n className,\n}: AvatarProps): React.JSX.Element {\n const [imgError, setImgError] = useState(false)\n const s = sizeClasses[size]\n const initials = fallback ?? deriveInitials(alt)\n const showImage = src && !imgError\n\n return (\n <div className={cn('relative inline-flex shrink-0', className)}>\n <div\n className={cn(\n s.root,\n 'rounded-full overflow-hidden',\n 'flex items-center justify-center',\n !showImage && 'bg-[hsl(var(--bg-overlay))]',\n )}\n >\n {showImage ? (\n <img\n src={src}\n alt={alt}\n onError={() => setImgError(true)}\n className=\"h-full w-full object-cover\"\n />\n ) : (\n <span\n className={cn(\n s.text,\n 'font-semibold text-[hsl(var(--text-secondary))] select-none',\n )}\n >\n {initials}\n </span>\n )}\n </div>\n\n {/* Status dot */}\n {status && (\n <span\n className={cn(\n 'absolute rounded-full ring-[hsl(var(--bg-surface))]',\n s.dot,\n statusColors[status],\n )}\n aria-label={status}\n />\n )}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { type ReactNode } from 'react'\nimport * as PopoverPrimitive from '@radix-ui/react-popover'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\n\nexport interface PopoverProps {\n /** Trigger element that opens the popover. */\n trigger: ReactNode\n /** Popover content. */\n children: ReactNode\n /** Side of the trigger to display the popover. */\n side?: 'top' | 'right' | 'bottom' | 'left'\n /** Alignment of the popover relative to the trigger. */\n align?: 'start' | 'center' | 'end'\n /** Additional class name for the content container. */\n className?: string\n}\n\nconst contentVariants = {\n hidden: { opacity: 0, scale: 0.96, y: -2 },\n visible: { opacity: 1, scale: 1, y: 0 },\n exit: { opacity: 0, scale: 0.96, y: -2 },\n}\n\n/**\n * @description A popover wrapper built on Radix Popover with Framer Motion entry animation.\n * Closes on outside click. Includes an arrow pointer.\n */\nexport function Popover({ trigger, children, side = 'bottom', align = 'center', className }: PopoverProps): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n\n return (\n <PopoverPrimitive.Root>\n <PopoverPrimitive.Trigger asChild>{trigger}</PopoverPrimitive.Trigger>\n\n <AnimatePresence>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n side={side}\n align={align}\n sideOffset={8}\n asChild\n >\n <motion.div\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"exit\"\n variants={contentVariants}\n transition={prefersReducedMotion ? { duration: 0 } : { duration: 0.15, ease: [0.16, 1, 0.3, 1] }}\n className={cn(\n 'z-50 rounded-xl p-4',\n 'border border-[hsl(var(--border-default))]',\n 'bg-[hsl(var(--bg-elevated))] shadow-xl',\n 'focus:outline-none',\n className,\n )}\n >\n {children}\n <PopoverPrimitive.Arrow\n className=\"fill-[hsl(var(--bg-elevated))]\"\n width={12}\n height={6}\n />\n </motion.div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </AnimatePresence>\n </PopoverPrimitive.Root>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useCallback, useRef, useState, type KeyboardEvent, type MouseEvent, type TouchEvent } from 'react'\nimport { cn } from '../utils'\n\nexport interface SliderProps {\n /** Current value. */\n value: number\n /** Callback when value changes. */\n onChange: (value: number) => void\n /** Minimum value. */\n min?: number\n /** Maximum value. */\n max?: number\n /** Step increment. */\n step?: number\n /** Optional label displayed above the slider. */\n label?: string\n /** Show the current value. */\n showValue?: boolean\n /** Additional class name for the root element. */\n className?: string\n}\n\n/**\n * @description A custom-styled range slider with keyboard accessibility.\n * Features a styled track, filled portion, and draggable thumb.\n * Shows current value on hover/drag via a tooltip above the thumb.\n */\nexport function Slider({\n value,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n label,\n showValue = false,\n className,\n}: SliderProps): React.JSX.Element {\n const trackRef = useRef<HTMLDivElement>(null)\n const [isDragging, setIsDragging] = useState(false)\n const [isHovering, setIsHovering] = useState(false)\n\n const pct = max === min ? 0 : ((value - min) / (max - min)) * 100\n\n const clampToStep = useCallback(\n (raw: number) => {\n const clamped = Math.min(max, Math.max(min, raw))\n const stepped = Math.round((clamped - min) / step) * step + min\n // Avoid floating point issues\n return Math.min(max, Math.max(min, parseFloat(stepped.toPrecision(10))))\n },\n [min, max, step],\n )\n\n const getValueFromPosition = useCallback(\n (clientX: number) => {\n const track = trackRef.current\n if (!track) return value\n const rect = track.getBoundingClientRect()\n const ratio = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width))\n return clampToStep(min + ratio * (max - min))\n },\n [min, max, value, clampToStep],\n )\n\n const handleMouseDown = useCallback(\n (e: MouseEvent) => {\n e.preventDefault()\n setIsDragging(true)\n onChange(getValueFromPosition(e.clientX))\n\n const handleMouseMove = (ev: globalThis.MouseEvent) => {\n onChange(getValueFromPosition(ev.clientX))\n }\n const handleMouseUp = () => {\n setIsDragging(false)\n document.removeEventListener('mousemove', handleMouseMove)\n document.removeEventListener('mouseup', handleMouseUp)\n }\n document.addEventListener('mousemove', handleMouseMove)\n document.addEventListener('mouseup', handleMouseUp)\n },\n [getValueFromPosition, onChange],\n )\n\n const handleTouchStart = useCallback(\n (e: TouchEvent) => {\n setIsDragging(true)\n if (e.touches[0]) {\n onChange(getValueFromPosition(e.touches[0].clientX))\n }\n\n const handleTouchMove = (ev: globalThis.TouchEvent) => {\n if (ev.touches[0]) {\n onChange(getValueFromPosition(ev.touches[0].clientX))\n }\n }\n const handleTouchEnd = () => {\n setIsDragging(false)\n document.removeEventListener('touchmove', handleTouchMove)\n document.removeEventListener('touchend', handleTouchEnd)\n }\n document.addEventListener('touchmove', handleTouchMove)\n document.addEventListener('touchend', handleTouchEnd)\n },\n [getValueFromPosition, onChange],\n )\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n let newValue = value\n if (e.key === 'ArrowRight' || e.key === 'ArrowUp') {\n e.preventDefault()\n newValue = clampToStep(value + step)\n } else if (e.key === 'ArrowLeft' || e.key === 'ArrowDown') {\n e.preventDefault()\n newValue = clampToStep(value - step)\n } else if (e.key === 'Home') {\n e.preventDefault()\n newValue = min\n } else if (e.key === 'End') {\n e.preventDefault()\n newValue = max\n }\n if (newValue !== value) onChange(newValue)\n },\n [value, min, max, step, clampToStep, onChange],\n )\n\n const showTooltip = isDragging || isHovering\n\n return (\n <div className={cn('w-full', className)}>\n {/* Label + value row */}\n {(label || showValue) && (\n <div className=\"flex items-center justify-between mb-2\">\n {label && (\n <span className=\"text-xs font-medium text-[hsl(var(--text-secondary))]\">{label}</span>\n )}\n {showValue && (\n <span className=\"text-xs font-medium tabular-nums text-[hsl(var(--text-secondary))]\">\n {value}\n </span>\n )}\n </div>\n )}\n\n {/* Track */}\n <div\n ref={trackRef}\n role=\"slider\"\n aria-valuenow={value}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-label={label}\n tabIndex={0}\n onMouseDown={handleMouseDown}\n onTouchStart={handleTouchStart}\n onKeyDown={handleKeyDown}\n onMouseEnter={() => setIsHovering(true)}\n onMouseLeave={() => setIsHovering(false)}\n className={cn(\n 'relative h-6 w-full cursor-pointer select-none',\n 'focus-visible:outline-none',\n 'group',\n )}\n >\n {/* Track background */}\n <div className=\"absolute top-1/2 -translate-y-1/2 w-full h-2 rounded-full bg-[hsl(var(--bg-overlay))]\">\n {/* Filled portion */}\n <div\n className=\"absolute inset-y-0 left-0 rounded-full bg-[hsl(var(--brand-primary))]\"\n style={{ width: `${pct}%` }}\n />\n </div>\n\n {/* Thumb */}\n <div\n className={cn(\n 'absolute top-1/2 -translate-y-1/2 -translate-x-1/2',\n 'h-5 w-5 rounded-full',\n 'bg-[hsl(var(--text-on-brand))] border-2 border-[hsl(var(--brand-primary))]',\n 'shadow-md transition-transform duration-100',\n isDragging && 'scale-110',\n 'group-focus-visible:ring-2 group-focus-visible:ring-[hsl(var(--brand-primary))] group-focus-visible:ring-offset-2 group-focus-visible:ring-offset-[hsl(var(--bg-base))]',\n )}\n style={{ left: `${pct}%` }}\n >\n {/* Value tooltip */}\n {showTooltip && (\n <div\n className={cn(\n 'absolute -top-8 left-1/2 -translate-x-1/2',\n 'px-2 py-0.5 rounded-md text-xs font-medium tabular-nums',\n 'bg-[hsl(var(--bg-elevated))] text-[hsl(var(--text-primary))]',\n 'border border-[hsl(var(--border-subtle))] shadow-sm',\n 'pointer-events-none whitespace-nowrap',\n )}\n >\n {value}\n </div>\n )}\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react'\nimport { cn } from '../utils'\n\n/* ── Variant & padding maps ───────────────────────────────────────────────── */\n\nconst variantClasses = {\n default:\n 'bg-[hsl(var(--bg-surface))] border border-[hsl(var(--border-subtle))] shadow-sm',\n elevated:\n 'bg-[hsl(var(--bg-elevated))] border border-[hsl(var(--border-default))] shadow-lg',\n outlined:\n 'bg-transparent border border-[hsl(var(--border-default))]',\n interactive:\n 'bg-[hsl(var(--bg-surface))] border border-[hsl(var(--border-subtle))] shadow-sm hover:bg-[hsl(var(--bg-elevated))] hover:border-[hsl(var(--border-default))] hover:shadow-md transition-all duration-150 cursor-pointer',\n} as const\n\nconst paddingClasses = {\n none: '',\n sm: 'p-3',\n md: 'p-5',\n lg: 'p-6',\n} as const\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n /** Visual variant. */\n variant?: keyof typeof variantClasses\n /** Padding preset. */\n padding?: keyof typeof paddingClasses\n /** Card content. */\n children: ReactNode\n}\n\n/**\n * @description A styled card container with variant and padding presets.\n * Use with CardHeader, CardTitle, CardDescription, CardContent, and CardFooter\n * subcomponents for semantic structure.\n */\nconst Card: React.ForwardRefExoticComponent<CardProps & React.RefAttributes<HTMLDivElement>> = forwardRef<HTMLDivElement, CardProps>(\n ({ variant = 'default', padding = 'md', className, children, ...props }, ref): React.JSX.Element => (\n <div\n ref={ref}\n className={cn('rounded-2xl', variantClasses[variant], paddingClasses[padding], className)}\n {...props}\n >\n {children}\n </div>\n ),\n)\nCard.displayName = 'Card'\n\n/* ── Subcomponents ────────────────────────────────────────────────────────── */\n\nexport interface CardSubProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode\n}\n\n/** Header section of a Card (flex row for title + actions). */\nconst CardHeader: React.ForwardRefExoticComponent<CardSubProps & React.RefAttributes<HTMLDivElement>> = forwardRef<HTMLDivElement, CardSubProps>(\n ({ className, children, ...props }, ref): React.JSX.Element => (\n <div\n ref={ref}\n className={cn('flex items-start justify-between gap-4', className)}\n {...props}\n >\n {children}\n </div>\n ),\n)\nCardHeader.displayName = 'CardHeader'\n\n/** Title within a CardHeader. */\nconst CardTitle: React.ForwardRefExoticComponent<HTMLAttributes<HTMLHeadingElement> & { children: ReactNode } & React.RefAttributes<HTMLHeadingElement>> = forwardRef<HTMLHeadingElement, HTMLAttributes<HTMLHeadingElement> & { children: ReactNode }>(\n ({ className, children, ...props }, ref): React.JSX.Element => (\n <h3\n ref={ref}\n className={cn('text-base font-semibold text-[hsl(var(--text-primary))]', className)}\n {...props}\n >\n {children}\n </h3>\n ),\n)\nCardTitle.displayName = 'CardTitle'\n\n/** Description text within a CardHeader. */\nconst CardDescription: React.ForwardRefExoticComponent<HTMLAttributes<HTMLParagraphElement> & { children: ReactNode } & React.RefAttributes<HTMLParagraphElement>> = forwardRef<HTMLParagraphElement, HTMLAttributes<HTMLParagraphElement> & { children: ReactNode }>(\n ({ className, children, ...props }, ref): React.JSX.Element => (\n <p\n ref={ref}\n className={cn('text-sm text-[hsl(var(--text-secondary))]', className)}\n {...props}\n >\n {children}\n </p>\n ),\n)\nCardDescription.displayName = 'CardDescription'\n\n/** Main content area of a Card. */\nconst CardContent: React.ForwardRefExoticComponent<CardSubProps & React.RefAttributes<HTMLDivElement>> = forwardRef<HTMLDivElement, CardSubProps>(\n ({ className, children, ...props }, ref): React.JSX.Element => (\n <div ref={ref} className={cn('mt-4', className)} {...props}>\n {children}\n </div>\n ),\n)\nCardContent.displayName = 'CardContent'\n\n/** Footer section of a Card (typically for actions). */\nconst CardFooter: React.ForwardRefExoticComponent<CardSubProps & React.RefAttributes<HTMLDivElement>> = forwardRef<HTMLDivElement, CardSubProps>(\n ({ className, children, ...props }, ref): React.JSX.Element => (\n <div\n ref={ref}\n className={cn(\n 'mt-4 pt-4 flex items-center gap-3 border-t border-[hsl(var(--border-subtle))]',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n ),\n)\nCardFooter.displayName = 'CardFooter'\n\nexport { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter }\n","'use client'\n\nimport type React from 'react'\nimport { useCallback, useRef, type KeyboardEvent } from 'react'\nimport { motion, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\n\n/** A single radio option definition. */\nexport interface RadioOption {\n /** Unique value. */\n value: string\n /** Display label. */\n label: string\n /** Optional description text below the label. */\n description?: string\n /** Whether this option is disabled. */\n disabled?: boolean\n}\n\nexport interface RadioGroupProps {\n /** Array of radio option definitions. */\n options: RadioOption[]\n /** Currently selected value. */\n value: string\n /** Callback when selection changes. */\n onChange: (value: string) => void\n /** Layout direction. */\n orientation?: 'horizontal' | 'vertical'\n /** Additional class name for the root element. */\n className?: string\n}\n\n/**\n * @description A custom-styled radio button group with Framer Motion selection indicator.\n * Supports keyboard navigation (arrow keys, Home, End) and ARIA roles.\n */\nexport function RadioGroup({\n options,\n value,\n onChange,\n orientation = 'vertical',\n className,\n}: RadioGroupProps): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n const groupRef = useRef<HTMLDivElement>(null)\n\n const enabledOptions = options.filter((o) => !o.disabled)\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n const currentIdx = enabledOptions.findIndex((o) => o.value === value)\n if (currentIdx === -1) return\n\n const isVertical = orientation === 'vertical'\n const nextKey = isVertical ? 'ArrowDown' : 'ArrowRight'\n const prevKey = isVertical ? 'ArrowUp' : 'ArrowLeft'\n\n let nextIdx: number | null = null\n\n if (e.key === nextKey) {\n e.preventDefault()\n nextIdx = (currentIdx + 1) % enabledOptions.length\n } else if (e.key === prevKey) {\n e.preventDefault()\n nextIdx = (currentIdx - 1 + enabledOptions.length) % enabledOptions.length\n } else if (e.key === 'Home') {\n e.preventDefault()\n nextIdx = 0\n } else if (e.key === 'End') {\n e.preventDefault()\n nextIdx = enabledOptions.length - 1\n }\n\n if (nextIdx !== null) {\n onChange(enabledOptions[nextIdx].value)\n const radios = groupRef.current?.querySelectorAll<HTMLDivElement>('[role=\"radio\"]:not([aria-disabled=\"true\"])')\n radios?.[nextIdx]?.focus()\n }\n },\n [enabledOptions, value, onChange, orientation],\n )\n\n return (\n <div\n ref={groupRef}\n role=\"radiogroup\"\n aria-orientation={orientation}\n onKeyDown={handleKeyDown}\n className={cn(\n 'flex',\n orientation === 'vertical' ? 'flex-col gap-2' : 'flex-row flex-wrap gap-4',\n className,\n )}\n >\n {options.map((option) => {\n const isSelected = option.value === value\n\n return (\n <div\n key={option.value}\n role=\"radio\"\n aria-checked={isSelected}\n aria-disabled={option.disabled}\n tabIndex={isSelected ? 0 : -1}\n onClick={() => {\n if (!option.disabled) onChange(option.value)\n }}\n className={cn(\n 'flex items-start gap-3 cursor-pointer select-none group',\n 'focus-visible:outline-none',\n option.disabled && 'opacity-40 pointer-events-none',\n )}\n >\n {/* Radio circle */}\n <div\n className={cn(\n 'relative mt-0.5 h-[18px] w-[18px] shrink-0 rounded-full border-2 transition-colors duration-150',\n 'flex items-center justify-center',\n isSelected\n ? 'border-[hsl(var(--brand-primary))]'\n : 'border-[hsl(var(--border-strong))] group-hover:border-[hsl(var(--brand-primary))]',\n 'group-focus-visible:ring-2 group-focus-visible:ring-[hsl(var(--brand-primary))] group-focus-visible:ring-offset-2 group-focus-visible:ring-offset-[hsl(var(--bg-base))]',\n )}\n >\n {isSelected && (\n <motion.div\n layoutId=\"radio-indicator\"\n initial={prefersReducedMotion ? false : { scale: 0 }}\n animate={{ scale: 1 }}\n transition={\n prefersReducedMotion\n ? { duration: 0 }\n : { type: 'spring', stiffness: 500, damping: 30 }\n }\n className=\"h-2.5 w-2.5 rounded-full bg-[hsl(var(--brand-primary))]\"\n />\n )}\n </div>\n\n {/* Label + description */}\n <div className=\"min-w-0\">\n <span\n className={cn(\n 'text-sm font-medium',\n isSelected\n ? 'text-[hsl(var(--text-primary))]'\n : 'text-[hsl(var(--text-secondary))]',\n )}\n >\n {option.label}\n </span>\n {option.description && (\n <p className=\"mt-0.5 text-xs text-[hsl(var(--text-tertiary))]\">\n {option.description}\n </p>\n )}\n </div>\n </div>\n )\n })}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { type ReactNode } from 'react'\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip'\nimport { cn } from '../utils'\n\nexport interface TooltipProps {\n /** Tooltip content (can be text or ReactNode). */\n content: ReactNode\n /** Trigger element. */\n children: ReactNode\n /** Side of the trigger to display the tooltip. */\n side?: 'top' | 'right' | 'bottom' | 'left'\n /** Delay in milliseconds before the tooltip appears. */\n delay?: number\n /** Additional class name for the tooltip content. */\n className?: string\n}\n\n/**\n * @description A simple tooltip wrapper built on Radix Tooltip.\n * Theme-styled content with arrow pointer and configurable delay.\n * Requires a TooltipProvider ancestor (included by default).\n */\nexport function Tooltip({\n content,\n children,\n side = 'top',\n delay = 200,\n className,\n}: TooltipProps): React.JSX.Element {\n return (\n <TooltipPrimitive.Provider delayDuration={delay}>\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>{children}</TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n side={side}\n sideOffset={6}\n className={cn(\n 'z-50 px-3 py-1.5 rounded-lg text-xs font-medium',\n 'bg-[hsl(var(--bg-elevated))] text-[hsl(var(--text-primary))]',\n 'border border-[hsl(var(--border-default))] shadow-lg',\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-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 >\n {content}\n <TooltipPrimitive.Arrow\n className=\"fill-[hsl(var(--bg-elevated))]\"\n width={10}\n height={5}\n />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { cn } from '../utils'\n\nexport interface SparklineProps {\n /** Array of numeric values to plot. */\n data: number[]\n /** SVG width in pixels. */\n width?: number\n /** SVG height in pixels. */\n height?: number\n /** Line color — must use hsl(var(--token)) format. */\n color?: string\n /** Opacity for the gradient fill below the line (0 to disable). */\n fillOpacity?: number\n /** Show dots on first and last data points. */\n showDots?: boolean\n className?: string\n}\n\nfunction buildPoints(data: number[], w: number, h: number, pad: number): string {\n if (data.length < 2) return ''\n const min = Math.min(...data)\n const max = Math.max(...data)\n const range = max - min || 1\n const stepX = (w - pad * 2) / (data.length - 1)\n return data\n .map((v, i) => {\n const x = pad + i * stepX\n const y = pad + (1 - (v - min) / range) * (h - pad * 2)\n return `${x},${y}`\n })\n .join(' ')\n}\n\n/**\n * @description A tiny inline SVG sparkline chart for embedding in tables, cards,\n * and metric tiles. Pure SVG with no external dependencies.\n */\nexport function Sparkline({\n data,\n width = 80,\n height = 24,\n color = 'hsl(var(--brand-primary))',\n fillOpacity = 0.1,\n showDots = false,\n className,\n}: SparklineProps): React.JSX.Element | null {\n if (data.length < 2) return null\n\n const pad = showDots ? 3 : 1\n const points = buildPoints(data, width, height, pad)\n const gradId = `sp-grad-${Math.random().toString(36).slice(2, 8)}`\n\n const min = Math.min(...data)\n const max = Math.max(...data)\n const range = max - min || 1\n const stepX = (width - pad * 2) / (data.length - 1)\n\n const firstX = pad\n const firstY = pad + (1 - (data[0] - min) / range) * (height - pad * 2)\n const lastX = pad + (data.length - 1) * stepX\n const lastY = pad + (1 - (data[data.length - 1] - min) / range) * (height - pad * 2)\n\n const fillPath = fillOpacity > 0\n ? `M ${firstX},${height} L ${points.split(' ').join(' L ')} L ${lastX},${height} Z`\n : undefined\n\n return (\n <svg\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n className={cn('shrink-0', className)}\n aria-hidden=\"true\"\n >\n {fillOpacity > 0 && (\n <defs>\n <linearGradient id={gradId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={color} stopOpacity={fillOpacity} />\n <stop offset=\"100%\" stopColor={color} stopOpacity={0} />\n </linearGradient>\n </defs>\n )}\n {fillPath && (\n <path d={fillPath} fill={`url(#${gradId})`} />\n )}\n <polyline\n points={points}\n fill=\"none\"\n stroke={color}\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n {showDots && (\n <>\n <circle cx={firstX} cy={firstY} r={2} fill={color} />\n <circle cx={lastX} cy={lastY} r={2} fill={color} />\n </>\n )}\n </svg>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { type ElementType } from 'react'\nimport { motion, useReducedMotion } from 'framer-motion'\nimport { TrendingUp, TrendingDown } from 'lucide-react'\nimport { cn } from '../utils'\nimport { AnimatedCounter } from './animated-counter'\nimport { Sparkline } from './sparkline'\n\nexport interface MetricCardProps {\n /** Metric display label. */\n label: string\n /** Current numeric value. */\n value: number\n /** Custom formatter for the displayed value (e.g. fmtBytes, fmtBps). */\n format?: (n: number) => string\n /** Previous value for trend calculation. */\n previousValue?: number\n /** Interpret trend direction for coloring. */\n trendDirection?: 'up-good' | 'up-bad' | 'down-good' | 'down-bad'\n /** Lucide icon component to display. */\n icon?: ElementType\n /** Status determines left border accent color. */\n status?: 'ok' | 'warning' | 'critical'\n /** Recent values to render an inline sparkline. */\n sparklineData?: number[]\n className?: string\n}\n\nconst statusBorder: Record<string, string> = {\n ok: 'border-l-[hsl(var(--status-ok))]',\n warning: 'border-l-[hsl(var(--status-warning))]',\n critical: 'border-l-[hsl(var(--status-critical))]',\n}\n\nconst trendColors: Record<string, string> = {\n good: 'text-[hsl(var(--status-ok))]',\n bad: 'text-[hsl(var(--status-critical))]',\n}\n\n/**\n * @description A dashboard stat tile showing a metric value with animated counter,\n * trend indicator, optional sparkline, and status-colored left border.\n * Designed for monitoring dashboards and overview panels.\n */\nexport function MetricCard({\n label,\n value,\n format,\n previousValue,\n trendDirection,\n icon: Icon,\n status,\n sparklineData,\n className,\n}: MetricCardProps): React.JSX.Element {\n const reduced = useReducedMotion()\n\n // Trend calculation\n let trendPct: number | null = null\n let trendUp = false\n let trendColorKey: 'good' | 'bad' | null = null\n\n if (previousValue != null && previousValue !== 0) {\n trendPct = ((value - previousValue) / Math.abs(previousValue)) * 100\n trendUp = trendPct >= 0\n\n if (trendDirection) {\n const isUp = trendPct >= 0\n if (trendDirection === 'up-good') trendColorKey = isUp ? 'good' : 'bad'\n else if (trendDirection === 'up-bad') trendColorKey = isUp ? 'bad' : 'good'\n else if (trendDirection === 'down-good') trendColorKey = isUp ? 'bad' : 'good'\n else if (trendDirection === 'down-bad') trendColorKey = isUp ? 'good' : 'bad'\n }\n }\n\n return (\n <motion.div\n initial={reduced ? false : { opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.2, ease: 'easeOut' }}\n className={cn(\n 'relative rounded-2xl border border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-surface))]',\n 'p-5 shadow-sm border-l-[3px]',\n status ? statusBorder[status] : 'border-l-[hsl(var(--border-subtle))]',\n className,\n )}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2 mb-1\">\n {Icon && (\n <Icon className=\"size-4 shrink-0 text-[hsl(var(--text-tertiary))]\" />\n )}\n <span className=\"text-[0.75rem] font-medium text-[hsl(var(--text-secondary))] truncate\">\n {label}\n </span>\n </div>\n\n <div className=\"flex items-baseline gap-2\">\n <span className=\"text-2xl font-semibold text-[hsl(var(--text-primary))] tabular-nums\">\n <AnimatedCounter value={value} format={format} />\n </span>\n\n {trendPct != null && (\n <span\n className={cn(\n 'inline-flex items-center gap-0.5 text-[0.6875rem] font-medium tabular-nums',\n trendColorKey ? trendColors[trendColorKey] : 'text-[hsl(var(--text-tertiary))]',\n )}\n >\n {trendUp ? (\n <TrendingUp className=\"size-3\" />\n ) : (\n <TrendingDown className=\"size-3\" />\n )}\n {Math.abs(trendPct).toFixed(1)}%\n </span>\n )}\n </div>\n </div>\n\n {sparklineData && sparklineData.length >= 2 && (\n <Sparkline\n data={sparklineData}\n width={72}\n height={28}\n color={\n status === 'critical'\n ? 'hsl(var(--status-critical))'\n : status === 'warning'\n ? 'hsl(var(--status-warning))'\n : 'hsl(var(--brand-primary))'\n }\n fillOpacity={0.15}\n />\n )}\n </div>\n </motion.div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useEffect, useState } from 'react'\nimport { useReducedMotion } from 'framer-motion'\nimport { cn, clamp } from '../utils'\n\nexport interface UtilizationBarProps {\n /** Utilization value from 0 to 100. */\n value: number\n /** Warning and critical thresholds. */\n thresholds?: { warning: number; critical: number }\n /** Optional label displayed to the left. */\n label?: string\n /** Show percentage value text to the right. */\n showValue?: boolean\n /** Bar height size. */\n size?: 'sm' | 'md' | 'lg'\n /** Animate the fill width on mount. */\n animated?: boolean\n className?: string\n}\n\nconst sizeMap = {\n sm: 'h-1.5',\n md: 'h-2.5',\n lg: 'h-4',\n}\n\nfunction getBarColor(value: number, warning: number, critical: number): string {\n if (value >= critical) return 'hsl(var(--util-high))'\n if (value >= warning) return 'hsl(var(--util-medium))'\n return 'hsl(var(--util-low))'\n}\n\nfunction getTextClass(value: number, warning: number, critical: number): string {\n if (value >= critical) return 'text-[hsl(var(--status-critical))]'\n if (value >= warning) return 'text-[hsl(var(--status-warning))]'\n return 'text-[hsl(var(--text-secondary))]'\n}\n\n/**\n * @description A segmented horizontal bar showing resource utilization with\n * color-coded thresholds (green/yellow/red). Supports animated fill on mount.\n */\nexport function UtilizationBar({\n value: rawValue,\n thresholds,\n label,\n showValue = true,\n size = 'md',\n animated = true,\n className,\n}: UtilizationBarProps): React.JSX.Element {\n const reduced = useReducedMotion()\n const value = clamp(rawValue, 0, 100)\n const warning = thresholds?.warning ?? 70\n const critical = thresholds?.critical ?? 90\n\n const [displayWidth, setDisplayWidth] = useState(animated && !reduced ? 0 : value)\n\n useEffect(() => {\n if (!animated || reduced) {\n setDisplayWidth(value)\n return\n }\n // Trigger the animated width after mount\n const raf = requestAnimationFrame(() => setDisplayWidth(value))\n return () => cancelAnimationFrame(raf)\n }, [value, animated, reduced])\n\n const barColor = getBarColor(value, warning, critical)\n const textClass = getTextClass(value, warning, critical)\n\n return (\n <div className={cn('flex items-center gap-2', className)} title={`${value.toFixed(1)}%`}>\n {label && (\n <span className=\"text-[0.75rem] font-medium text-[hsl(var(--text-secondary))] shrink-0 min-w-[3rem]\">\n {label}\n </span>\n )}\n <div\n className={cn(\n 'flex-1 rounded-full bg-[hsl(var(--bg-elevated))] overflow-hidden',\n sizeMap[size],\n )}\n >\n <div\n className=\"h-full rounded-full\"\n style={{\n width: `${displayWidth}%`,\n backgroundColor: barColor,\n transition: animated && !reduced ? 'width 600ms cubic-bezier(0.4, 0, 0.2, 1)' : 'none',\n }}\n />\n </div>\n {showValue && (\n <span className={cn('text-[0.75rem] font-medium tabular-nums shrink-0 min-w-[2.5rem] text-right', textClass)}>\n {value.toFixed(0)}%\n </span>\n )}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useEffect, useState } from 'react'\nimport { useReducedMotion } from 'framer-motion'\nimport { cn, clamp } from '../utils'\n\nexport interface ThresholdGaugeProps {\n /** Gauge value from 0 to 100. */\n value: number\n /** Label displayed below the gauge. */\n label?: string\n /** Warning and critical thresholds. */\n thresholds?: { warning: number; critical: number }\n /** Gauge diameter in pixels. */\n size?: number\n /** Show the numeric value in the center. */\n showValue?: boolean\n /** Custom formatter for the center value. */\n format?: (n: number) => string\n className?: string\n}\n\nconst ARC_START = 135 // degrees, bottom-left\nconst ARC_SWEEP = 270 // degrees, total arc span\n\nfunction polarToCartesian(cx: number, cy: number, r: number, angleDeg: number) {\n const rad = ((angleDeg - 90) * Math.PI) / 180\n return { x: cx + r * Math.cos(rad), y: cy + r * Math.sin(rad) }\n}\n\nfunction describeArc(cx: number, cy: number, r: number, startAngle: number, endAngle: number): string {\n const start = polarToCartesian(cx, cy, r, endAngle)\n const end = polarToCartesian(cx, cy, r, startAngle)\n const largeArc = endAngle - startAngle > 180 ? 1 : 0\n return `M ${start.x} ${start.y} A ${r} ${r} 0 ${largeArc} 0 ${end.x} ${end.y}`\n}\n\nfunction getArcColor(pct: number, warning: number, critical: number): string {\n if (pct >= critical) return 'hsl(var(--util-high))'\n if (pct >= warning) return 'hsl(var(--util-medium))'\n return 'hsl(var(--util-low))'\n}\n\n/**\n * @description A semicircular SVG gauge with color-coded threshold zones\n * (green/yellow/red). Animates the arc on mount. Displays value in center.\n */\nexport function ThresholdGauge({\n value: rawValue,\n label,\n thresholds,\n size = 120,\n showValue = true,\n format,\n className,\n}: ThresholdGaugeProps): React.JSX.Element {\n const reduced = useReducedMotion()\n const value = clamp(rawValue, 0, 100)\n const warning = thresholds?.warning ?? 70\n const critical = thresholds?.critical ?? 90\n\n const [animatedValue, setAnimatedValue] = useState(reduced ? value : 0)\n\n useEffect(() => {\n if (reduced) {\n setAnimatedValue(value)\n return\n }\n const start = performance.now()\n const from = 0\n const dur = 600\n let raf: number\n\n function tick(now: number) {\n const progress = Math.min((now - start) / dur, 1)\n const eased = 1 - Math.pow(1 - progress, 3) // ease-out cubic\n setAnimatedValue(from + (value - from) * eased)\n if (progress < 1) raf = requestAnimationFrame(tick)\n }\n raf = requestAnimationFrame(tick)\n return () => cancelAnimationFrame(raf)\n }, [value, reduced])\n\n const cx = size / 2\n const cy = size / 2\n const r = (size - 16) / 2\n const strokeWidth = Math.max(6, size * 0.08)\n\n // Background zone arcs\n const warnAngle = ARC_START + (warning / 100) * ARC_SWEEP\n const critAngle = ARC_START + (critical / 100) * ARC_SWEEP\n const endAngle = ARC_START + ARC_SWEEP\n\n const greenArc = describeArc(cx, cy, r, ARC_START, warnAngle)\n const yellowArc = describeArc(cx, cy, r, warnAngle, critAngle)\n const redArc = describeArc(cx, cy, r, critAngle, endAngle)\n\n // Value arc\n const valueAngle = ARC_START + (animatedValue / 100) * ARC_SWEEP\n const valueArc = animatedValue > 0.5\n ? describeArc(cx, cy, r, ARC_START, valueAngle)\n : ''\n\n const displayText = format ? format(value) : `${Math.round(value)}%`\n\n return (\n <div className={cn('inline-flex flex-col items-center', className)}>\n <svg width={size} height={size * 0.75} viewBox={`0 0 ${size} ${size * 0.75}`} aria-hidden=\"true\">\n {/* Background zones */}\n <path d={greenArc} fill=\"none\" stroke=\"hsl(var(--util-low))\" strokeWidth={strokeWidth} strokeLinecap=\"round\" opacity={0.2} />\n <path d={yellowArc} fill=\"none\" stroke=\"hsl(var(--util-medium))\" strokeWidth={strokeWidth} strokeLinecap=\"round\" opacity={0.2} />\n <path d={redArc} fill=\"none\" stroke=\"hsl(var(--util-high))\" strokeWidth={strokeWidth} strokeLinecap=\"round\" opacity={0.2} />\n\n {/* Value arc */}\n {valueArc && (\n <path\n d={valueArc}\n fill=\"none\"\n stroke={getArcColor(animatedValue, warning, critical)}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n />\n )}\n\n {/* Center value */}\n {showValue && (\n <text\n x={cx}\n y={cy - 2}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n fill=\"hsl(var(--text-primary))\"\n fontSize={size * 0.2}\n fontWeight={600}\n fontFamily=\"inherit\"\n className=\"tabular-nums\"\n >\n {displayText}\n </text>\n )}\n </svg>\n {label && (\n <span className=\"text-[0.75rem] font-medium text-[hsl(var(--text-secondary))] mt-1\">\n {label}\n </span>\n )}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useRef } from 'react'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\n\nexport interface TimelineEvent {\n /** ISO 8601 timestamp. */\n time: string\n /** Short event label. */\n label: string\n /** Severity determines dot color. */\n severity: 'critical' | 'warning' | 'info' | 'ok'\n /** Optional detail text shown on click/hover. */\n detail?: string\n}\n\nexport interface SeverityTimelineProps {\n /** Events to display (most recent should be first). */\n events: TimelineEvent[]\n /** Maximum number of visible events. */\n maxVisible?: number\n /** Callback when an event dot/label is clicked. */\n onEventClick?: (event: TimelineEvent) => void\n className?: string\n}\n\nconst severityDot: Record<string, string> = {\n critical: 'bg-[hsl(var(--status-critical))]',\n warning: 'bg-[hsl(var(--status-warning))]',\n info: 'bg-[hsl(var(--brand-primary))]',\n ok: 'bg-[hsl(var(--status-ok))]',\n}\n\nconst severityRing: Record<string, string> = {\n critical: 'ring-[hsl(var(--status-critical))]/30',\n warning: 'ring-[hsl(var(--status-warning))]/30',\n info: 'ring-[hsl(var(--brand-primary))]/30',\n ok: 'ring-[hsl(var(--status-ok))]/30',\n}\n\nfunction formatTime(iso: string): string {\n try {\n const d = new Date(iso)\n return d.toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit' })\n } catch {\n return iso\n }\n}\n\n/**\n * @description A horizontal scrollable timeline showing events with severity-colored\n * dots. Most recent events appear on the left. Click events for detail callbacks.\n * Designed for alert timelines and incident history strips.\n */\nexport function SeverityTimeline({\n events,\n maxVisible = 20,\n onEventClick,\n className,\n}: SeverityTimelineProps): React.JSX.Element | null {\n const reduced = useReducedMotion()\n const scrollRef = useRef<HTMLDivElement>(null)\n const visible = events.slice(0, maxVisible)\n\n if (visible.length === 0) return null\n\n return (\n <div\n ref={scrollRef}\n className={cn(\n 'relative overflow-x-auto scrollbar-thin py-2',\n className,\n )}\n >\n <div className=\"flex items-start gap-0 min-w-max\">\n <AnimatePresence initial={false}>\n {visible.map((ev, i) => (\n <motion.div\n key={`${ev.time}-${i}`}\n initial={reduced ? false : { opacity: 0, scale: 0.8 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.8 }}\n transition={{ duration: 0.15, delay: reduced ? 0 : i * 0.03 }}\n className=\"flex flex-col items-center relative\"\n style={{ minWidth: 64 }}\n >\n {/* Connector line */}\n {i < visible.length - 1 && (\n <div\n className=\"absolute top-[11px] left-1/2 h-px bg-[hsl(var(--border-default))]\"\n style={{ width: 64 }}\n />\n )}\n\n {/* Dot */}\n <button\n type=\"button\"\n onClick={() => onEventClick?.(ev)}\n className={cn(\n 'relative z-10 size-[10px] rounded-full ring-4 shrink-0',\n 'transition-transform hover:scale-125 cursor-pointer',\n severityDot[ev.severity] ?? severityDot.info,\n severityRing[ev.severity] ?? severityRing.info,\n )}\n title={ev.detail ?? ev.label}\n aria-label={`${ev.label} — ${ev.severity}`}\n />\n\n {/* Label */}\n <span className=\"mt-1.5 text-[0.6875rem] font-medium text-[hsl(var(--text-primary))] text-center max-w-[56px] truncate\">\n {ev.label}\n </span>\n\n {/* Timestamp */}\n <span className=\"text-[0.625rem] text-[hsl(var(--text-tertiary))] tabular-nums\">\n {formatTime(ev.time)}\n </span>\n </motion.div>\n ))}\n </AnimatePresence>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { ArrowDown, Search } from 'lucide-react'\nimport { cn } from '../utils'\n\nexport interface LogEntry {\n /** ISO 8601 timestamp. */\n time: string\n /** Log level. */\n level: 'error' | 'warn' | 'info' | 'debug' | 'trace'\n /** Log message content. */\n message: string\n /** Optional source identifier. */\n source?: string\n}\n\nexport interface LogViewerProps {\n /** Log entries to display. */\n entries: LogEntry[]\n /** Maximum container height in pixels. */\n maxHeight?: number\n /** Auto-scroll to bottom on new entries. */\n autoScroll?: boolean\n /** Show timestamps column. */\n showTimestamps?: boolean\n /** Show level badge. */\n showLevel?: boolean\n /** Callback when a log entry is clicked. */\n onEntryClick?: (entry: LogEntry) => void\n className?: string\n}\n\nconst levelBorder: Record<string, string> = {\n error: 'border-l-[hsl(var(--status-critical))]',\n warn: 'border-l-[hsl(var(--status-warning))]',\n info: 'border-l-[hsl(var(--brand-primary))]',\n debug: 'border-l-[hsl(var(--text-tertiary))]',\n trace: 'border-l-[hsl(var(--text-disabled))]',\n}\n\nconst levelText: Record<string, string> = {\n error: 'text-[hsl(var(--status-critical))]',\n warn: 'text-[hsl(var(--status-warning))]',\n info: 'text-[hsl(var(--brand-primary))]',\n debug: 'text-[hsl(var(--text-tertiary))]',\n trace: 'text-[hsl(var(--text-disabled))]',\n}\n\nconst levelLabel: Record<string, string> = {\n error: 'ERR',\n warn: 'WRN',\n info: 'INF',\n debug: 'DBG',\n trace: 'TRC',\n}\n\nfunction formatTs(iso: string): string {\n try {\n const d = new Date(iso)\n return d.toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit', second: '2-digit' })\n } catch {\n return iso\n }\n}\n\n/**\n * @description A log stream viewer with severity-colored borders, auto-scroll,\n * search filtering, and a \"new entries\" indicator when scrolled up.\n * Designed for real-time log tailing in monitoring dashboards.\n */\nexport function LogViewer({\n entries,\n maxHeight = 400,\n autoScroll = true,\n showTimestamps = true,\n showLevel = true,\n onEntryClick,\n className,\n}: LogViewerProps): React.JSX.Element {\n const reduced = useReducedMotion()\n const containerRef = useRef<HTMLDivElement>(null)\n const [isAtBottom, setIsAtBottom] = useState(true)\n const [filter, setFilter] = useState('')\n const [newCount, setNewCount] = useState(0)\n const prevLenRef = useRef(entries.length)\n\n const checkAtBottom = useCallback(() => {\n const el = containerRef.current\n if (!el) return\n const atBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 32\n setIsAtBottom(atBottom)\n if (atBottom) setNewCount(0)\n }, [])\n\n // Auto-scroll on new entries\n useEffect(() => {\n const added = entries.length - prevLenRef.current\n prevLenRef.current = entries.length\n\n if (added > 0 && !isAtBottom) {\n setNewCount(prev => prev + added)\n }\n\n if (autoScroll && isAtBottom && containerRef.current) {\n containerRef.current.scrollTop = containerRef.current.scrollHeight\n }\n }, [entries.length, autoScroll, isAtBottom])\n\n const scrollToBottom = useCallback(() => {\n if (containerRef.current) {\n containerRef.current.scrollTop = containerRef.current.scrollHeight\n setNewCount(0)\n setIsAtBottom(true)\n }\n }, [])\n\n const lowerFilter = filter.toLowerCase()\n const filtered = filter\n ? entries.filter(e =>\n e.message.toLowerCase().includes(lowerFilter) ||\n e.source?.toLowerCase().includes(lowerFilter) ||\n e.level.includes(lowerFilter)\n )\n : entries\n\n return (\n <div className={cn('relative rounded-xl border border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-surface))] overflow-hidden', className)}>\n {/* Search bar */}\n <div className=\"flex items-center gap-2 px-3 py-2 border-b border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-elevated))]\">\n <Search className=\"size-3.5 text-[hsl(var(--text-tertiary))] shrink-0\" />\n <input\n type=\"text\"\n value={filter}\n onChange={e => setFilter(e.target.value)}\n placeholder=\"Filter logs...\"\n className=\"flex-1 bg-transparent text-[0.75rem] text-[hsl(var(--text-primary))] placeholder:text-[hsl(var(--text-disabled))] outline-none font-mono\"\n />\n {filter && (\n <span className=\"text-[0.6875rem] text-[hsl(var(--text-tertiary))] tabular-nums shrink-0\">\n {filtered.length} / {entries.length}\n </span>\n )}\n </div>\n\n {/* Log entries */}\n <div\n ref={containerRef}\n onScroll={checkAtBottom}\n className=\"overflow-y-auto\"\n style={{ maxHeight }}\n >\n {filtered.map((entry, i) => (\n <div\n key={`${entry.time}-${i}`}\n onClick={() => onEntryClick?.(entry)}\n className={cn(\n 'flex items-start gap-2 px-3 py-1 border-l-2 font-mono text-[0.75rem] leading-5',\n 'hover:bg-[hsl(var(--bg-elevated))] transition-colors',\n onEntryClick && 'cursor-pointer',\n levelBorder[entry.level] ?? levelBorder.info,\n )}\n >\n {showTimestamps && (\n <span className=\"text-[hsl(var(--text-tertiary))] tabular-nums shrink-0 select-all\">\n {formatTs(entry.time)}\n </span>\n )}\n {showLevel && (\n <span className={cn('font-semibold shrink-0 w-[2.5ch]', levelText[entry.level] ?? levelText.info)}>\n {levelLabel[entry.level] ?? entry.level.toUpperCase().slice(0, 3)}\n </span>\n )}\n {entry.source && (\n <span className=\"text-[hsl(var(--text-secondary))] shrink-0\">\n [{entry.source}]\n </span>\n )}\n <span className=\"text-[hsl(var(--text-primary))] break-all min-w-0\">\n {entry.message}\n </span>\n </div>\n ))}\n </div>\n\n {/* New entries indicator */}\n <AnimatePresence>\n {newCount > 0 && !isAtBottom && (\n <motion.button\n type=\"button\"\n initial={reduced ? false : { opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: 8 }}\n transition={{ duration: 0.15 }}\n onClick={scrollToBottom}\n className={cn(\n 'absolute bottom-3 left-1/2 -translate-x-1/2 z-10',\n 'inline-flex items-center gap-1.5 px-3 py-1.5 rounded-full',\n 'bg-[hsl(var(--brand-primary))] text-[hsl(var(--text-on-brand))]',\n 'text-[0.6875rem] font-medium shadow-lg cursor-pointer',\n 'hover:opacity-90 transition-opacity',\n )}\n >\n <ArrowDown className=\"size-3\" />\n {newCount} new {newCount === 1 ? 'entry' : 'entries'}\n </motion.button>\n )}\n </AnimatePresence>\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { motion, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\n\nexport interface PortStatus {\n /** Unique port identifier. */\n id: string\n /** Display label (e.g. \"Gi1/0/1\"). */\n label: string\n /** Port operational status. */\n status: 'up' | 'down' | 'disabled' | 'error'\n /** Link speed display string (e.g. \"10G\", \"1G\"). */\n speed?: string\n /** Port utilization 0-100 percentage. */\n utilization?: number\n}\n\nexport interface PortStatusGridProps {\n /** Array of port status objects. */\n ports: PortStatus[]\n /** Number of columns. Defaults to auto-fit. */\n columns?: number\n /** Dot/rectangle size. */\n size?: 'sm' | 'md'\n /** Callback when a port is clicked. */\n onPortClick?: (port: PortStatus) => void\n className?: string\n}\n\nconst statusColor: Record<string, string> = {\n up: 'bg-[hsl(var(--status-ok))]',\n down: 'bg-[hsl(var(--status-critical))]',\n disabled: 'bg-[hsl(var(--text-disabled))]',\n error: 'bg-[hsl(var(--status-warning))]',\n}\n\nconst statusHover: Record<string, string> = {\n up: 'hover:ring-[hsl(var(--status-ok))]/40',\n down: 'hover:ring-[hsl(var(--status-critical))]/40',\n disabled: 'hover:ring-[hsl(var(--text-disabled))]/40',\n error: 'hover:ring-[hsl(var(--status-warning))]/40',\n}\n\nconst sizeClasses = {\n sm: 'size-3 rounded-[2px]',\n md: 'size-5 rounded-[3px]',\n}\n\n/**\n * @description A grid of small colored indicators representing network ports or\n * interfaces. Each port is colored by operational status with hover tooltips showing\n * label, speed, and utilization. Designed for switch/router faceplate visualizations.\n */\nexport function PortStatusGrid({\n ports,\n columns,\n size = 'sm',\n onPortClick,\n className,\n}: PortStatusGridProps): React.JSX.Element {\n const reduced = useReducedMotion()\n\n const gridStyle = columns\n ? { gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))` }\n : { gridTemplateColumns: `repeat(auto-fill, minmax(${size === 'sm' ? '12px' : '20px'}, 1fr))` }\n\n return (\n <div\n className={cn('grid gap-1', className)}\n style={gridStyle}\n role=\"grid\"\n aria-label=\"Port status grid\"\n >\n {ports.map((port, i) => {\n const tooltipParts = [port.label]\n if (port.speed) tooltipParts.push(port.speed)\n if (port.utilization != null) tooltipParts.push(`${port.utilization.toFixed(0)}%`)\n tooltipParts.push(port.status)\n\n return (\n <motion.button\n key={port.id}\n type=\"button\"\n initial={reduced ? false : { opacity: 0, scale: 0.5 }}\n animate={{ opacity: 1, scale: 1 }}\n transition={{ duration: 0.1, delay: reduced ? 0 : Math.min(i * 0.008, 0.4) }}\n onClick={() => onPortClick?.(port)}\n title={tooltipParts.join(' \\u00b7 ')}\n aria-label={`${port.label}: ${port.status}`}\n className={cn(\n 'transition-all cursor-pointer ring-0 hover:ring-2',\n sizeClasses[size],\n statusColor[port.status] ?? statusColor.disabled,\n statusHover[port.status] ?? statusHover.disabled,\n )}\n />\n )\n })}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { motion, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\n\nexport interface TimeRange {\n /** Display label (e.g. \"1h\", \"24h\"). */\n label: string\n /** Unique value identifier. */\n value: string\n /** Duration in seconds represented by this range. */\n seconds: number\n}\n\nexport interface TimeRangeSelectorProps {\n /** Currently selected range value. */\n value: string\n /** Callback when a range is selected. */\n onChange: (value: string, range: TimeRange) => void\n /** Custom range options. Defaults to 1h, 6h, 24h, 7d, 30d. */\n ranges?: TimeRange[]\n className?: string\n}\n\nconst defaultRanges: TimeRange[] = [\n { label: '1h', value: '1h', seconds: 3600 },\n { label: '6h', value: '6h', seconds: 21600 },\n { label: '24h', value: '24h', seconds: 86400 },\n { label: '7d', value: '7d', seconds: 604800 },\n { label: '30d', value: '30d', seconds: 2592000 },\n]\n\n/**\n * @description A compact horizontal pill-group time range selector for dashboards.\n * Active selection is highlighted with a sliding indicator using the brand color.\n * Common in monitoring dashboards for controlling chart time windows.\n */\nexport function TimeRangeSelector({\n value,\n onChange,\n ranges = defaultRanges,\n className,\n}: TimeRangeSelectorProps): React.JSX.Element {\n const reduced = useReducedMotion()\n\n return (\n <div\n className={cn(\n 'inline-flex items-center rounded-lg bg-[hsl(var(--bg-elevated))] p-0.5',\n 'border border-[hsl(var(--border-subtle))]',\n className,\n )}\n role=\"radiogroup\"\n aria-label=\"Time range\"\n >\n {ranges.map(range => {\n const isActive = range.value === value\n return (\n <button\n key={range.value}\n type=\"button\"\n role=\"radio\"\n aria-checked={isActive}\n onClick={() => onChange(range.value, range)}\n className={cn(\n 'relative px-3 py-1 text-[0.75rem] font-medium rounded-md cursor-pointer',\n 'transition-colors duration-150',\n isActive\n ? 'text-[hsl(var(--text-on-brand))]'\n : 'text-[hsl(var(--text-secondary))] hover:text-[hsl(var(--text-primary))]',\n )}\n >\n {isActive && (\n <motion.span\n layoutId=\"time-range-active\"\n className=\"absolute inset-0 rounded-md bg-[hsl(var(--brand-primary))]\"\n transition={reduced ? { duration: 0 } : { type: 'spring', stiffness: 400, damping: 30 }}\n />\n )}\n <span className=\"relative z-10\">{range.label}</span>\n </button>\n )\n })}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { type ElementType } from 'react'\nimport { motion, useReducedMotion } from 'framer-motion'\nimport { ChevronRight } from 'lucide-react'\nimport { cn } from '../utils'\n\nexport interface StageInfo {\n /** Stage display name. */\n name: string\n /** Current stage status. */\n status: 'active' | 'idle' | 'error' | 'disabled'\n /** Optional metric to display inside the stage box. */\n metric?: { label: string; value: string }\n /** Lucide icon component for the stage. */\n icon?: ElementType\n}\n\nexport interface PipelineStageProps {\n /** Ordered array of processing stages. */\n stages: StageInfo[]\n /** Callback when a stage is clicked. */\n onStageClick?: (stage: StageInfo, index: number) => void\n className?: string\n}\n\nconst statusDot: Record<string, string> = {\n active: 'bg-[hsl(var(--status-ok))]',\n idle: 'bg-[hsl(var(--text-tertiary))]',\n error: 'bg-[hsl(var(--status-critical))]',\n disabled: 'bg-[hsl(var(--text-disabled))]',\n}\n\nconst statusBorder: Record<string, string> = {\n active: 'border-[hsl(var(--status-ok))]/30',\n idle: 'border-[hsl(var(--border-default))]',\n error: 'border-[hsl(var(--status-critical))]/30',\n disabled: 'border-[hsl(var(--border-subtle))]',\n}\n\nconst statusBg: Record<string, string> = {\n active: 'bg-[hsl(var(--bg-surface))]',\n idle: 'bg-[hsl(var(--bg-surface))]',\n error: 'bg-[hsl(var(--status-critical))]/5',\n disabled: 'bg-[hsl(var(--bg-elevated))]',\n}\n\n/**\n * @description A horizontal data pipeline visualization showing processing stages\n * connected by animated chevron arrows. Each stage displays name, status dot,\n * optional icon, and optional metric. Designed for data pipeline monitoring views.\n */\nexport function PipelineStage({\n stages,\n onStageClick,\n className,\n}: PipelineStageProps): React.JSX.Element {\n const reduced = useReducedMotion()\n\n return (\n <div className={cn('flex items-center gap-0 overflow-x-auto', className)}>\n {stages.map((stage, i) => {\n const Icon = stage.icon\n const isDisabled = stage.status === 'disabled'\n\n return (\n <div key={`${stage.name}-${i}`} className=\"flex items-center shrink-0\">\n {/* Arrow connector */}\n {i > 0 && (\n <motion.div\n initial={reduced ? false : { opacity: 0, x: -4 }}\n animate={{ opacity: 1, x: 0 }}\n transition={{ duration: 0.15, delay: reduced ? 0 : i * 0.05 }}\n className=\"px-1\"\n >\n <ChevronRight className=\"size-4 text-[hsl(var(--text-tertiary))]\" />\n </motion.div>\n )}\n\n {/* Stage box */}\n <motion.button\n type=\"button\"\n initial={reduced ? false : { opacity: 0, y: 6 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.2, delay: reduced ? 0 : i * 0.06 }}\n onClick={() => onStageClick?.(stage, i)}\n disabled={isDisabled && !onStageClick}\n className={cn(\n 'flex flex-col items-start gap-1.5 px-4 py-3 rounded-xl border',\n 'transition-all min-w-[120px]',\n statusBorder[stage.status],\n statusBg[stage.status],\n onStageClick && !isDisabled && 'cursor-pointer hover:bg-[hsl(var(--bg-elevated))]',\n isDisabled && 'opacity-50',\n )}\n >\n {/* Header row: icon + name + status dot */}\n <div className=\"flex items-center gap-2 w-full\">\n {Icon && (\n <Icon className={cn('size-3.5 shrink-0', isDisabled ? 'text-[hsl(var(--text-disabled))]' : 'text-[hsl(var(--text-secondary))]')} />\n )}\n <span className={cn(\n 'text-[0.8125rem] font-medium truncate',\n isDisabled ? 'text-[hsl(var(--text-disabled))]' : 'text-[hsl(var(--text-primary))]',\n )}>\n {stage.name}\n </span>\n <span\n className={cn(\n 'size-2 rounded-full shrink-0 ml-auto',\n statusDot[stage.status],\n stage.status === 'active' && 'animate-pulse',\n )}\n />\n </div>\n\n {/* Metric */}\n {stage.metric && (\n <div className=\"flex items-baseline gap-1\">\n <span className=\"text-[0.875rem] font-semibold text-[hsl(var(--text-primary))] tabular-nums\">\n {stage.metric.value}\n </span>\n <span className=\"text-[0.625rem] text-[hsl(var(--text-tertiary))]\">\n {stage.metric.label}\n </span>\n </div>\n )}\n </motion.button>\n </div>\n )\n })}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { motion, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\n\nexport interface DayStatus {\n /** Date in YYYY-MM-DD format. */\n date: string\n /** Operational status for that day. */\n status: 'ok' | 'degraded' | 'outage' | 'no-data'\n /** Uptime percentage for that day (0-100). */\n uptime?: number\n}\n\nexport interface UptimeTrackerProps {\n /** Array of day-status entries (oldest first). */\n days: DayStatus[]\n /** Show overall uptime percentage. */\n showPercentage?: boolean\n /** Optional label displayed above the bar. */\n label?: string\n /** Callback when a day bar is clicked. */\n onDayClick?: (day: DayStatus) => void\n className?: string\n}\n\nconst dayColor: Record<string, string> = {\n ok: 'bg-[hsl(var(--status-ok))]',\n degraded: 'bg-[hsl(var(--status-warning))]',\n outage: 'bg-[hsl(var(--status-critical))]',\n 'no-data': 'bg-[hsl(var(--text-disabled))]',\n}\n\nconst dayHover: Record<string, string> = {\n ok: 'hover:bg-[hsl(var(--status-ok))]/80',\n degraded: 'hover:bg-[hsl(var(--status-warning))]/80',\n outage: 'hover:bg-[hsl(var(--status-critical))]/80',\n 'no-data': 'hover:bg-[hsl(var(--text-disabled))]/80',\n}\n\nfunction formatDate(dateStr: string): string {\n try {\n const d = new Date(dateStr + 'T00:00:00')\n return d.toLocaleDateString(undefined, { month: 'short', day: 'numeric' })\n } catch {\n return dateStr\n }\n}\n\n/**\n * @description A row of thin vertical bars representing daily uptime status,\n * inspired by GitHub/Statuspage uptime indicators. Each bar is colored by\n * operational status (ok/degraded/outage/no-data). Hover shows date and uptime\n * percentage. Designed for SLA and availability tracking displays.\n */\nexport function UptimeTracker({\n days,\n showPercentage = true,\n label,\n onDayClick,\n className,\n}: UptimeTrackerProps): React.JSX.Element {\n const reduced = useReducedMotion()\n\n // Calculate overall uptime\n const daysWithUptime = days.filter(d => d.uptime != null)\n const overallUptime = daysWithUptime.length > 0\n ? daysWithUptime.reduce((sum, d) => sum + (d.uptime ?? 0), 0) / daysWithUptime.length\n : null\n\n return (\n <div className={cn('space-y-2', className)}>\n {/* Header */}\n {(label || showPercentage) && (\n <div className=\"flex items-center justify-between\">\n {label && (\n <span className=\"text-[0.8125rem] font-medium text-[hsl(var(--text-primary))]\">\n {label}\n </span>\n )}\n {showPercentage && overallUptime != null && (\n <span className={cn(\n 'text-[0.8125rem] font-semibold tabular-nums',\n overallUptime >= 99.9\n ? 'text-[hsl(var(--status-ok))]'\n : overallUptime >= 99\n ? 'text-[hsl(var(--status-warning))]'\n : 'text-[hsl(var(--status-critical))]',\n )}>\n {overallUptime.toFixed(2)}% uptime\n </span>\n )}\n </div>\n )}\n\n {/* Day bars */}\n <div className=\"flex items-end gap-px h-8\">\n {days.map((day, i) => {\n const tooltip = [\n formatDate(day.date),\n day.uptime != null ? `${day.uptime.toFixed(1)}%` : day.status,\n ].join(' \\u2014 ')\n\n return (\n <motion.button\n key={day.date}\n type=\"button\"\n initial={reduced ? false : { scaleY: 0 }}\n animate={{ scaleY: 1 }}\n transition={{ duration: 0.15, delay: reduced ? 0 : Math.min(i * 0.005, 0.3) }}\n style={{ originY: '100%' }}\n onClick={() => onDayClick?.(day)}\n title={tooltip}\n aria-label={tooltip}\n className={cn(\n 'flex-1 min-w-[2px] h-full rounded-[1px] transition-opacity cursor-pointer',\n dayColor[day.status] ?? dayColor['no-data'],\n dayHover[day.status] ?? dayHover['no-data'],\n )}\n />\n )\n })}\n </div>\n\n {/* Date range labels */}\n {days.length > 0 && (\n <div className=\"flex items-center justify-between\">\n <span className=\"text-[0.625rem] text-[hsl(var(--text-tertiary))]\">\n {formatDate(days[0].date)}\n </span>\n <span className=\"text-[0.625rem] text-[hsl(var(--text-tertiary))]\">\n {formatDate(days[days.length - 1].date)}\n </span>\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\nimport { Copy, Check } from 'lucide-react'\n\nexport interface StreamingTextProps {\n /** The text content — grows as tokens arrive. */\n text: string\n /** Whether tokens are still arriving. */\n isStreaming: boolean\n /** Cursor blink speed in ms. */\n speed?: number\n /** Show a blinking cursor at the end while streaming. */\n showCursor?: boolean\n /** Called when isStreaming transitions from true to false. */\n onComplete?: () => void\n className?: string\n}\n\n/** Simple inline formatter: **bold** and `code` spans. */\nfunction formatSegments(text: string): React.ReactNode[] {\n const segments: React.ReactNode[] = []\n const regex = /(\\*\\*(.+?)\\*\\*|`([^`]+?)`)/g\n let lastIndex = 0\n let match: RegExpExecArray | null\n\n while ((match = regex.exec(text)) !== null) {\n if (match.index > lastIndex) {\n segments.push(text.slice(lastIndex, match.index))\n }\n if (match[2]) {\n segments.push(\n <strong key={match.index} className=\"font-semibold\">\n {match[2]}\n </strong>\n )\n } else if (match[3]) {\n segments.push(\n <code\n key={match.index}\n className=\"rounded px-1 py-0.5 text-[0.875em] bg-[hsl(var(--bg-overlay))] text-[hsl(var(--brand-primary))] font-mono\"\n >\n {match[3]}\n </code>\n )\n }\n lastIndex = match.index + match[0].length\n }\n\n if (lastIndex < text.length) {\n segments.push(text.slice(lastIndex))\n }\n\n return segments\n}\n\n/**\n * @description Displays AI/LLM streaming text responses with a blinking cursor,\n * markdown-like formatting (bold, code), copy button on completion, and auto-scroll.\n */\nexport function StreamingText({\n text,\n isStreaming,\n speed = 500,\n showCursor = true,\n onComplete,\n className,\n}: StreamingTextProps): React.JSX.Element {\n const reduced = useReducedMotion()\n const containerRef = useRef<HTMLDivElement>(null)\n const prevStreamingRef = useRef(isStreaming)\n const [copied, setCopied] = useState(false)\n\n useEffect(() => {\n if (prevStreamingRef.current && !isStreaming) {\n onComplete?.()\n }\n prevStreamingRef.current = isStreaming\n }, [isStreaming, onComplete])\n\n useEffect(() => {\n if (isStreaming && containerRef.current) {\n const el = containerRef.current\n el.scrollTop = el.scrollHeight\n }\n }, [text, isStreaming])\n\n const handleCopy = useCallback(() => {\n void navigator.clipboard.writeText(text).then(() => {\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n })\n }, [text])\n\n const formatted = formatSegments(text)\n\n return (\n <div className={cn('relative', className)}>\n <div\n ref={containerRef}\n className=\"overflow-y-auto text-[hsl(var(--text-primary))] leading-relaxed whitespace-pre-wrap break-words\"\n >\n {formatted}\n {showCursor && isStreaming && (\n <span\n className=\"inline-block w-[2px] h-[1.1em] align-text-bottom ml-0.5 bg-[hsl(var(--brand-primary))]\"\n style={\n reduced\n ? { opacity: 1 }\n : {\n animation: `streaming-cursor-blink ${speed}ms step-end infinite`,\n }\n }\n />\n )}\n <AnimatePresence>\n {showCursor && !isStreaming && text.length > 0 && (\n <motion.span\n className=\"inline-block w-[2px] h-[1.1em] align-text-bottom ml-0.5 bg-[hsl(var(--brand-primary))]\"\n initial={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: reduced ? 0 : 0.4 }}\n />\n )}\n </AnimatePresence>\n </div>\n\n <AnimatePresence>\n {!isStreaming && text.length > 0 && (\n <motion.button\n type=\"button\"\n initial={{ opacity: 0, scale: 0.8 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.8 }}\n transition={{ duration: reduced ? 0 : 0.2 }}\n onClick={handleCopy}\n className={cn(\n 'absolute top-0 right-0 p-1.5 rounded-lg',\n 'text-[hsl(var(--text-tertiary))] hover:text-[hsl(var(--text-primary))]',\n 'bg-[hsl(var(--bg-surface))]/80 hover:bg-[hsl(var(--bg-elevated))]',\n 'transition-colors duration-150 cursor-pointer',\n )}\n aria-label={copied ? 'Copied' : 'Copy to clipboard'}\n >\n {copied ? <Check className=\"size-3.5\" /> : <Copy className=\"size-3.5\" />}\n </motion.button>\n )}\n </AnimatePresence>\n\n {showCursor && isStreaming && !reduced && (\n <style>{`\n @keyframes streaming-cursor-blink {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0; }\n }\n `}</style>\n )}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { motion, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\n\nexport interface TypingIndicatorProps {\n /** Label text, e.g. \"AI is thinking\" or \"3 users typing\". */\n label?: string\n /** Animation variant. */\n variant?: 'dots' | 'pulse' | 'text'\n /** Size preset. */\n size?: 'sm' | 'md'\n className?: string\n}\n\nconst DOT_SIZES = { sm: 'size-1.5', md: 'size-2' } as const\nconst FONT_SIZES = { sm: 'text-xs', md: 'text-sm' } as const\n\n/**\n * @description A \"someone is typing\" indicator with three variants:\n * bouncing dots, pulsing ring, or animated ellipsis text. Respects reduced motion.\n */\nexport function TypingIndicator({\n label,\n variant = 'dots',\n size = 'md',\n className,\n}: TypingIndicatorProps): React.JSX.Element {\n const reduced = useReducedMotion()\n\n return (\n <div\n className={cn(\n 'inline-flex items-center gap-2 text-[hsl(var(--text-secondary))]',\n FONT_SIZES[size],\n className,\n )}\n role=\"status\"\n aria-label={label ?? 'Typing'}\n >\n {variant === 'dots' && <BouncingDots size={size} reduced={!!reduced} />}\n {variant === 'pulse' && <PulseRing size={size} reduced={!!reduced} />}\n {variant === 'text' && <AnimatedEllipsis reduced={!!reduced} />}\n {label && <span>{label}</span>}\n </div>\n )\n}\n\nfunction BouncingDots({ size, reduced }: { size: 'sm' | 'md'; reduced: boolean }): React.JSX.Element {\n const dotClass = cn('rounded-full bg-current', DOT_SIZES[size])\n\n if (reduced) {\n return (\n <span className=\"inline-flex items-center gap-1\">\n <span className={dotClass} />\n <span className={dotClass} />\n <span className={dotClass} />\n </span>\n )\n }\n\n return (\n <span className=\"inline-flex items-center gap-1\">\n {[0, 1, 2].map((i) => (\n <motion.span\n key={i}\n className={dotClass}\n animate={{ y: [0, -4, 0] }}\n transition={{\n duration: 0.6,\n repeat: Infinity,\n delay: i * 0.15,\n ease: 'easeInOut',\n }}\n />\n ))}\n </span>\n )\n}\n\nfunction PulseRing({ size, reduced }: { size: 'sm' | 'md'; reduced: boolean }): React.JSX.Element {\n const ringSize = size === 'sm' ? 'size-4' : 'size-5'\n const dotSize = size === 'sm' ? 'size-2' : 'size-2.5'\n\n return (\n <span className={cn('relative inline-flex items-center justify-center', ringSize)}>\n {!reduced && (\n <motion.span\n className={cn('absolute inset-0 rounded-full border border-current')}\n animate={{ scale: [1, 1.8], opacity: [0.6, 0] }}\n transition={{ duration: 1.2, repeat: Infinity, ease: 'easeOut' }}\n />\n )}\n <span className={cn('rounded-full bg-current', dotSize)} />\n </span>\n )\n}\n\nfunction AnimatedEllipsis({ reduced }: { reduced: boolean }): React.JSX.Element {\n if (reduced) {\n return <span>...</span>\n }\n\n return (\n <span className=\"inline-flex w-[1.2em]\">\n {[0, 1, 2].map((i) => (\n <motion.span\n key={i}\n animate={{ opacity: [0, 1, 0] }}\n transition={{\n duration: 1.2,\n repeat: Infinity,\n delay: i * 0.3,\n ease: 'easeInOut',\n }}\n >\n .\n </motion.span>\n ))}\n </span>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useState } from 'react'\nimport { motion, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\n\nexport interface ConfidenceBarProps {\n /** Confidence value between 0 and 1 (probability). */\n value: number\n /** Optional label displayed before the bar. */\n label?: string\n /** Show percentage text beside the bar. */\n showPercentage?: boolean\n /** Thresholds for color zones. */\n thresholds?: { low: number; medium: number }\n /** Size preset. */\n size?: 'sm' | 'md'\n className?: string\n}\n\nconst SIZE_CLASSES = {\n sm: 'h-1.5',\n md: 'h-2.5',\n} as const\n\nfunction getBarColor(value: number, thresholds: { low: number; medium: number }): string {\n if (value < thresholds.low) return 'bg-[hsl(var(--status-critical))]'\n if (value < thresholds.medium) return 'bg-[hsl(var(--status-warning))]'\n return 'bg-[hsl(var(--status-ok))]'\n}\n\nfunction getTextColor(value: number, thresholds: { low: number; medium: number }): string {\n if (value < thresholds.low) return 'text-[hsl(var(--status-critical))]'\n if (value < thresholds.medium) return 'text-[hsl(var(--status-warning))]'\n return 'text-[hsl(var(--status-ok))]'\n}\n\n/**\n * @description A horizontal confidence/probability bar colored by threshold zones:\n * red (<low), yellow (low-medium), green (>medium). Animates fill on mount.\n */\nexport function ConfidenceBar({\n value,\n label,\n showPercentage = true,\n thresholds = { low: 0.3, medium: 0.7 },\n size = 'md',\n className,\n}: ConfidenceBarProps): React.JSX.Element {\n const reduced = useReducedMotion()\n const [hovered, setHovered] = useState(false)\n const clamped = Math.min(1, Math.max(0, value))\n const pct = clamped * 100\n const barColor = getBarColor(clamped, thresholds)\n const textColor = getTextColor(clamped, thresholds)\n\n return (\n <div\n className={cn('w-full', className)}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n >\n {/* Label + percentage row */}\n {(label || showPercentage) && (\n <div className=\"flex items-center justify-between mb-1\">\n {label && (\n <span className=\"text-xs font-medium text-[hsl(var(--text-secondary))]\">\n {label}\n </span>\n )}\n {showPercentage && (\n <span className={cn('text-xs font-medium tabular-nums', textColor)}>\n {pct.toFixed(1)}%\n </span>\n )}\n </div>\n )}\n\n {/* Track */}\n <div\n className={cn(\n 'relative w-full overflow-hidden rounded-full bg-[hsl(var(--bg-overlay))]',\n SIZE_CLASSES[size],\n )}\n role=\"meter\"\n aria-valuenow={pct}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={label ?? `Confidence: ${pct.toFixed(1)}%`}\n >\n {reduced ? (\n <div\n className={cn('h-full rounded-full', barColor)}\n style={{ width: `${pct}%` }}\n />\n ) : (\n <motion.div\n className={cn('h-full rounded-full', barColor)}\n initial={{ width: 0 }}\n animate={{ width: `${pct}%` }}\n transition={{ type: 'spring', stiffness: 80, damping: 20 }}\n />\n )}\n </div>\n\n {/* Tooltip on hover showing exact value */}\n {hovered && (\n <div className=\"mt-1 text-[10px] text-[hsl(var(--text-tertiary))] tabular-nums\">\n {clamped.toFixed(4)} ({pct.toFixed(2)}%)\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\nimport { Pause, Play, ChevronUp } from 'lucide-react'\n\nexport interface FeedItem {\n id: string\n content: React.ReactNode\n timestamp: string | Date\n type?: 'info' | 'success' | 'warning' | 'error'\n}\n\nexport interface LiveFeedProps {\n /** Array of feed items, newest first. */\n items: FeedItem[]\n /** Maximum visible items before oldest are faded out. */\n maxVisible?: number\n /** Show relative timestamps beside each item. */\n showTimestamps?: boolean\n /** Auto-scroll to newest items. */\n autoScroll?: boolean\n /** Callback when an item is clicked. */\n onItemClick?: (item: FeedItem) => void\n /** Message shown when items array is empty. */\n emptyMessage?: string\n className?: string\n}\n\nconst TYPE_BORDER: Record<string, string> = {\n info: 'border-l-[hsl(var(--brand-secondary))]',\n success: 'border-l-[hsl(var(--status-ok))]',\n warning: 'border-l-[hsl(var(--status-warning))]',\n error: 'border-l-[hsl(var(--status-critical))]',\n}\n\nfunction relativeTime(ts: string | Date): string {\n const diff = (Date.now() - new Date(ts).getTime()) / 1000\n if (diff < 5) return 'now'\n if (diff < 60) return `${Math.floor(diff)}s ago`\n if (diff < 3600) return `${Math.floor(diff / 60)}m ago`\n if (diff < 86400) return `${Math.floor(diff / 3600)}h ago`\n return `${Math.floor(diff / 86400)}d ago`\n}\n\n/**\n * @description A real-time event feed with animated item entry, auto-scroll,\n * pause/resume controls, type-colored borders, and relative timestamps.\n */\nexport function LiveFeed({\n items,\n maxVisible = 50,\n showTimestamps = true,\n autoScroll: autoScrollProp = true,\n onItemClick,\n emptyMessage = 'No events yet',\n className,\n}: LiveFeedProps): React.JSX.Element {\n const reduced = useReducedMotion()\n const scrollRef = useRef<HTMLDivElement>(null)\n const [paused, setPaused] = useState(false)\n const [userScrolled, setUserScrolled] = useState(false)\n const [newCount, setNewCount] = useState(0)\n const prevCountRef = useRef(items.length)\n\n // Track new items arriving while scrolled away\n useEffect(() => {\n const diff = items.length - prevCountRef.current\n if (diff > 0 && (paused || userScrolled)) {\n setNewCount((c) => c + diff)\n }\n prevCountRef.current = items.length\n }, [items.length, paused, userScrolled])\n\n // Auto-scroll\n useEffect(() => {\n if (autoScrollProp && !paused && !userScrolled && scrollRef.current) {\n scrollRef.current.scrollTop = 0\n }\n }, [items, autoScrollProp, paused, userScrolled])\n\n const handleScroll = useCallback(() => {\n if (!scrollRef.current) return\n const { scrollTop } = scrollRef.current\n // scrollTop is 0 at top (newest), positive when scrolled down (older)\n setUserScrolled(scrollTop > 40)\n }, [])\n\n const scrollToTop = useCallback(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollTop = 0\n }\n setUserScrolled(false)\n setNewCount(0)\n }, [])\n\n const togglePause = useCallback(() => {\n setPaused((p) => {\n if (p) {\n setNewCount(0)\n setUserScrolled(false)\n }\n return !p\n })\n }, [])\n\n // Relative timestamp updater\n const [, setTick] = useState(0)\n useEffect(() => {\n if (!showTimestamps) return\n const id = setInterval(() => setTick((t) => t + 1), 10_000)\n return () => clearInterval(id)\n }, [showTimestamps])\n\n const visibleItems = items.slice(0, maxVisible)\n\n return (\n <div className={cn('relative flex flex-col', className)}>\n {/* Controls bar */}\n <div className=\"flex items-center justify-between px-3 py-2 border-b border-[hsl(var(--border-subtle))]\">\n <span className=\"text-xs font-medium text-[hsl(var(--text-secondary))]\">\n {items.length} events\n </span>\n <button\n type=\"button\"\n onClick={togglePause}\n className={cn(\n 'inline-flex items-center gap-1 px-2 py-1 rounded-md text-xs font-medium cursor-pointer',\n 'text-[hsl(var(--text-secondary))] hover:text-[hsl(var(--text-primary))]',\n 'hover:bg-[hsl(var(--bg-overlay))] transition-colors duration-150',\n )}\n aria-label={paused ? 'Resume auto-scroll' : 'Pause auto-scroll'}\n >\n {paused ? <Play className=\"size-3\" /> : <Pause className=\"size-3\" />}\n {paused ? 'Resume' : 'Pause'}\n </button>\n </div>\n\n {/* Feed container */}\n <div\n ref={scrollRef}\n onScroll={handleScroll}\n className=\"flex-1 overflow-y-auto\"\n >\n {visibleItems.length === 0 ? (\n <div className=\"flex items-center justify-center py-12 text-sm text-[hsl(var(--text-tertiary))]\">\n {emptyMessage}\n </div>\n ) : (\n <AnimatePresence initial={false}>\n {visibleItems.map((item) => (\n <motion.div\n key={item.id}\n layout={!reduced}\n initial={reduced ? undefined : { opacity: 0, y: -12, height: 0 }}\n animate={{ opacity: 1, y: 0, height: 'auto' }}\n exit={reduced ? undefined : { opacity: 0, height: 0 }}\n transition={{ duration: reduced ? 0 : 0.2 }}\n >\n <div\n role={onItemClick ? 'button' : undefined}\n tabIndex={onItemClick ? 0 : undefined}\n onClick={onItemClick ? () => onItemClick(item) : undefined}\n onKeyDown={\n onItemClick\n ? (e) => { if (e.key === 'Enter' || e.key === ' ') onItemClick(item) }\n : undefined\n }\n className={cn(\n 'flex items-start gap-3 px-3 py-2.5 border-l-2',\n 'border-b border-b-[hsl(var(--border-subtle))]',\n TYPE_BORDER[item.type ?? 'info'],\n onItemClick && 'cursor-pointer hover:bg-[hsl(var(--bg-surface))] transition-colors duration-100',\n )}\n >\n <div className=\"flex-1 min-w-0 text-sm text-[hsl(var(--text-primary))]\">\n {item.content}\n </div>\n {showTimestamps && (\n <span\n className=\"shrink-0 text-[10px] tabular-nums text-[hsl(var(--text-tertiary))] mt-0.5\"\n title={new Date(item.timestamp).toISOString()}\n >\n {relativeTime(item.timestamp)}\n </span>\n )}\n </div>\n </motion.div>\n ))}\n </AnimatePresence>\n )}\n </div>\n\n {/* \"N new items\" floating badge */}\n <AnimatePresence>\n {newCount > 0 && (userScrolled || paused) && (\n <motion.button\n type=\"button\"\n initial={reduced ? undefined : { opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={reduced ? undefined : { opacity: 0, y: 8 }}\n transition={{ duration: reduced ? 0 : 0.15 }}\n onClick={scrollToTop}\n className={cn(\n 'absolute top-12 left-1/2 -translate-x-1/2 z-10',\n 'inline-flex items-center gap-1 px-3 py-1.5 rounded-full',\n 'bg-[hsl(var(--brand-primary))] text-white text-xs font-medium',\n 'shadow-lg cursor-pointer hover:brightness-110 transition-[filter] duration-100',\n )}\n >\n <ChevronUp className=\"size-3\" />\n {newCount} new {newCount === 1 ? 'item' : 'items'}\n </motion.button>\n )}\n </AnimatePresence>\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useMemo, useState } from 'react'\nimport { cn } from '../utils'\n\nexport interface DiffViewerProps {\n /** The original text. */\n oldValue: string\n /** The modified text. */\n newValue: string\n /** Display mode. */\n mode?: 'inline' | 'side-by-side'\n /** Language hint for potential styling. */\n language?: string\n /** Show line numbers in the gutter. */\n showLineNumbers?: boolean\n className?: string\n}\n\ntype LineType = 'added' | 'removed' | 'unchanged'\n\ninterface DiffLine {\n type: LineType\n content: string\n oldLineNo?: number\n newLineNo?: number\n}\n\n/** Simple line-by-line diff using longest common subsequence. */\nfunction computeDiff(oldLines: string[], newLines: string[]): DiffLine[] {\n // Build LCS table\n const m = oldLines.length\n const n = newLines.length\n const dp: number[][] = Array.from({ length: m + 1 }, () => new Array<number>(n + 1).fill(0))\n\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n if (oldLines[i - 1] === newLines[j - 1]) {\n dp[i][j] = dp[i - 1][j - 1] + 1\n } else {\n dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1])\n }\n }\n }\n\n // Backtrack to produce diff\n const result: DiffLine[] = []\n let i = m\n let j = n\n\n while (i > 0 || j > 0) {\n if (i > 0 && j > 0 && oldLines[i - 1] === newLines[j - 1]) {\n result.push({ type: 'unchanged', content: oldLines[i - 1], oldLineNo: i, newLineNo: j })\n i--\n j--\n } else if (j > 0 && (i === 0 || dp[i][j - 1] >= dp[i - 1][j])) {\n result.push({ type: 'added', content: newLines[j - 1], newLineNo: j })\n j--\n } else {\n result.push({ type: 'removed', content: oldLines[i - 1], oldLineNo: i })\n i--\n }\n }\n\n return result.reverse()\n}\n\nconst TYPE_BG: Record<LineType, string> = {\n added: 'bg-[hsl(var(--status-ok))]/10',\n removed: 'bg-[hsl(var(--status-critical))]/10',\n unchanged: '',\n}\n\nconst TYPE_PREFIX: Record<LineType, string> = {\n added: '+',\n removed: '-',\n unchanged: ' ',\n}\n\nconst TYPE_PREFIX_COLOR: Record<LineType, string> = {\n added: 'text-[hsl(var(--status-ok))]',\n removed: 'text-[hsl(var(--status-critical))]',\n unchanged: 'text-[hsl(var(--text-tertiary))]',\n}\n\n/**\n * @description A diff viewer showing line-by-line differences between two text values.\n * Supports inline and side-by-side modes, collapsible unchanged sections, and line numbers.\n */\nexport function DiffViewer({\n oldValue,\n newValue,\n mode = 'inline',\n language,\n showLineNumbers = true,\n className,\n}: DiffViewerProps): React.JSX.Element {\n const [expandedSections, setExpandedSections] = useState<Set<number>>(new Set())\n\n const diffLines = useMemo(() => {\n const oldLines = oldValue.split('\\n')\n const newLines = newValue.split('\\n')\n return computeDiff(oldLines, newLines)\n }, [oldValue, newValue])\n\n // Group unchanged sections for collapsing\n const sections = useMemo(() => {\n const groups: { type: 'changes' | 'unchanged'; lines: DiffLine[]; startIdx: number }[] = []\n let current: DiffLine[] = []\n let currentType: 'changes' | 'unchanged' | null = null\n let startIdx = 0\n\n for (let i = 0; i < diffLines.length; i++) {\n const lineType = diffLines[i].type === 'unchanged' ? 'unchanged' : 'changes'\n if (lineType !== currentType) {\n if (current.length > 0 && currentType !== null) {\n groups.push({ type: currentType, lines: current, startIdx })\n }\n current = [diffLines[i]]\n currentType = lineType\n startIdx = i\n } else {\n current.push(diffLines[i])\n }\n }\n if (current.length > 0 && currentType !== null) {\n groups.push({ type: currentType, lines: current, startIdx })\n }\n return groups\n }, [diffLines])\n\n const toggleSection = (idx: number) => {\n setExpandedSections((prev) => {\n const next = new Set(prev)\n if (next.has(idx)) {\n next.delete(idx)\n } else {\n next.add(idx)\n }\n return next\n })\n }\n\n if (mode === 'side-by-side') {\n return <SideBySide diffLines={diffLines} showLineNumbers={showLineNumbers} language={language} className={className} />\n }\n\n return (\n <div\n className={cn(\n 'w-full overflow-x-auto rounded-xl border border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-surface))]',\n 'font-mono text-xs leading-5',\n className,\n )}\n data-language={language}\n >\n {sections.map((section, sIdx) => {\n // Collapse unchanged sections longer than 6 lines\n if (section.type === 'unchanged' && section.lines.length > 6 && !expandedSections.has(sIdx)) {\n const topContext = section.lines.slice(0, 3)\n const bottomContext = section.lines.slice(-3)\n const hiddenCount = section.lines.length - 6\n\n return (\n <div key={sIdx}>\n {topContext.map((line, i) => (\n <InlineLine key={`${sIdx}-t-${i}`} line={line} showLineNumbers={showLineNumbers} />\n ))}\n <button\n type=\"button\"\n onClick={() => toggleSection(sIdx)}\n className={cn(\n 'w-full px-3 py-1 text-center text-[10px]',\n 'text-[hsl(var(--text-tertiary))] bg-[hsl(var(--bg-overlay))]/50',\n 'hover:bg-[hsl(var(--bg-overlay))] cursor-pointer transition-colors duration-100',\n )}\n >\n ... {hiddenCount} unchanged {hiddenCount === 1 ? 'line' : 'lines'} ...\n </button>\n {bottomContext.map((line, i) => (\n <InlineLine key={`${sIdx}-b-${i}`} line={line} showLineNumbers={showLineNumbers} />\n ))}\n </div>\n )\n }\n\n return (\n <div key={sIdx}>\n {section.type === 'unchanged' && expandedSections.has(sIdx) && (\n <button\n type=\"button\"\n onClick={() => toggleSection(sIdx)}\n className={cn(\n 'w-full px-3 py-0.5 text-center text-[10px]',\n 'text-[hsl(var(--text-tertiary))] bg-[hsl(var(--bg-overlay))]/30',\n 'hover:bg-[hsl(var(--bg-overlay))] cursor-pointer transition-colors duration-100',\n )}\n >\n collapse {section.lines.length} unchanged lines\n </button>\n )}\n {section.lines.map((line, i) => (\n <InlineLine key={`${sIdx}-${i}`} line={line} showLineNumbers={showLineNumbers} />\n ))}\n </div>\n )\n })}\n </div>\n )\n}\n\nfunction InlineLine({ line, showLineNumbers }: { line: DiffLine; showLineNumbers: boolean }): React.JSX.Element {\n return (\n <div className={cn('flex', TYPE_BG[line.type])}>\n {showLineNumbers && (\n <span className=\"shrink-0 w-9 px-1.5 text-right select-none text-[hsl(var(--text-tertiary))]/50 tabular-nums\">\n {line.oldLineNo ?? ''}\n </span>\n )}\n {showLineNumbers && (\n <span className=\"shrink-0 w-9 px-1.5 text-right select-none text-[hsl(var(--text-tertiary))]/50 tabular-nums\">\n {line.newLineNo ?? ''}\n </span>\n )}\n <span className={cn('shrink-0 w-4 text-center select-none font-bold', TYPE_PREFIX_COLOR[line.type])}>\n {TYPE_PREFIX[line.type]}\n </span>\n <span className=\"flex-1 px-2 whitespace-pre text-[hsl(var(--text-primary))]\">\n {line.content}\n </span>\n </div>\n )\n}\n\nfunction SideBySide({\n diffLines,\n showLineNumbers,\n language,\n className,\n}: {\n diffLines: DiffLine[]\n showLineNumbers: boolean\n language?: string\n className?: string\n}): React.JSX.Element {\n // Build paired rows for side-by-side\n const pairs: { left?: DiffLine; right?: DiffLine }[] = []\n let i = 0\n while (i < diffLines.length) {\n const line = diffLines[i]\n if (line.type === 'unchanged') {\n pairs.push({ left: line, right: line })\n i++\n } else if (line.type === 'removed') {\n // Look for a matching added line\n if (i + 1 < diffLines.length && diffLines[i + 1].type === 'added') {\n pairs.push({ left: line, right: diffLines[i + 1] })\n i += 2\n } else {\n pairs.push({ left: line })\n i++\n }\n } else {\n pairs.push({ right: line })\n i++\n }\n }\n\n return (\n <div\n className={cn(\n 'w-full overflow-x-auto rounded-xl border border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-surface))]',\n 'font-mono text-xs leading-5',\n className,\n )}\n data-language={language}\n >\n <div className=\"grid grid-cols-2 divide-x divide-[hsl(var(--border-subtle))]\">\n {/* Left: old */}\n <div>\n {pairs.map((pair, idx) => (\n <div\n key={`l-${idx}`}\n className={cn('flex', pair.left ? TYPE_BG[pair.left.type] : '')}\n >\n {showLineNumbers && (\n <span className=\"shrink-0 w-9 px-1.5 text-right select-none text-[hsl(var(--text-tertiary))]/50 tabular-nums\">\n {pair.left?.oldLineNo ?? ''}\n </span>\n )}\n <span className=\"flex-1 px-2 whitespace-pre text-[hsl(var(--text-primary))]\">\n {pair.left?.content ?? ''}\n </span>\n </div>\n ))}\n </div>\n {/* Right: new */}\n <div>\n {pairs.map((pair, idx) => (\n <div\n key={`r-${idx}`}\n className={cn('flex', pair.right ? TYPE_BG[pair.right.type] : '')}\n >\n {showLineNumbers && (\n <span className=\"shrink-0 w-9 px-1.5 text-right select-none text-[hsl(var(--text-tertiary))]/50 tabular-nums\">\n {pair.right?.newLineNo ?? ''}\n </span>\n )}\n <span className=\"flex-1 px-2 whitespace-pre text-[hsl(var(--text-primary))]\">\n {pair.right?.content ?? ''}\n </span>\n </div>\n ))}\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useMemo, useState } from 'react'\nimport { cn } from '../utils'\n\nexport interface DayValue {\n /** Date in YYYY-MM-DD format. */\n date: string\n /** Numeric value for this day. */\n value: number\n}\n\nexport interface HeatmapCalendarProps {\n /** Array of day values. */\n data: DayValue[]\n /** Start date (YYYY-MM-DD). Defaults to 365 days ago. */\n startDate?: string\n /** End date (YYYY-MM-DD). Defaults to today. */\n endDate?: string\n /** 5 colors from lightest to darkest. Defaults to green scale. */\n colorScale?: string[]\n /** Callback when a day cell is clicked. */\n onDayClick?: (day: DayValue) => void\n /** Show month labels at top. */\n showMonthLabels?: boolean\n /** Show day-of-week labels (Mon, Wed, Fri) on the left. */\n showDayLabels?: boolean\n /** Custom tooltip format function. */\n tooltipFormat?: (day: DayValue) => string\n className?: string\n}\n\nconst DEFAULT_COLORS = [\n 'bg-[hsl(var(--bg-overlay))]',\n 'bg-[hsl(var(--status-ok))]/20',\n 'bg-[hsl(var(--status-ok))]/40',\n 'bg-[hsl(var(--status-ok))]/65',\n 'bg-[hsl(var(--status-ok))]',\n]\n\nconst MONTH_NAMES = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\nconst DAY_LABELS = ['', 'Mon', '', 'Wed', '', 'Fri', '']\n\nfunction toDateKey(d: Date): string {\n return d.toISOString().slice(0, 10)\n}\n\nfunction parseDate(s: string): Date {\n const [y, m, d] = s.split('-').map(Number)\n return new Date(y, m - 1, d)\n}\n\n/**\n * @description A GitHub-style contribution heatmap calendar with configurable color scale,\n * hover tooltips, month/day labels, and click handlers.\n */\nexport function HeatmapCalendar({\n data,\n startDate,\n endDate,\n colorScale = DEFAULT_COLORS,\n onDayClick,\n showMonthLabels = true,\n showDayLabels = true,\n tooltipFormat,\n className,\n}: HeatmapCalendarProps): React.JSX.Element {\n const [hoveredDay, setHoveredDay] = useState<DayValue | null>(null)\n\n const { weeks, months, maxValue } = useMemo(() => {\n const end = endDate ? parseDate(endDate) : new Date()\n const start = startDate\n ? parseDate(startDate)\n : new Date(end.getFullYear() - 1, end.getMonth(), end.getDate() + 1)\n\n // Build value lookup\n const lookup = new Map<string, number>()\n let maxVal = 0\n for (const d of data) {\n lookup.set(d.date, d.value)\n if (d.value > maxVal) maxVal = d.value\n }\n\n // Generate weeks (columns) starting from the start date's week\n const weeks: (DayValue | null)[][] = []\n const monthChanges: { col: number; label: string }[] = []\n\n // Align start to the beginning of its week (Sunday)\n const cursor = new Date(start)\n cursor.setDate(cursor.getDate() - cursor.getDay())\n\n let prevMonth = -1\n\n while (cursor <= end || weeks.length === 0) {\n const week: (DayValue | null)[] = []\n for (let dow = 0; dow < 7; dow++) {\n const key = toDateKey(cursor)\n if (cursor >= start && cursor <= end) {\n week.push({ date: key, value: lookup.get(key) ?? 0 })\n } else {\n week.push(null)\n }\n\n // Track month boundaries\n if (cursor.getMonth() !== prevMonth && cursor >= start && cursor <= end) {\n if (dow === 0) {\n monthChanges.push({ col: weeks.length, label: MONTH_NAMES[cursor.getMonth()] })\n }\n prevMonth = cursor.getMonth()\n }\n\n cursor.setDate(cursor.getDate() + 1)\n }\n weeks.push(week)\n }\n\n return { weeks, months: monthChanges, maxValue: maxVal }\n }, [data, startDate, endDate])\n\n const getColorClass = (value: number): string => {\n if (value === 0 || maxValue === 0) return colorScale[0]\n const idx = Math.min(\n colorScale.length - 1,\n Math.ceil((value / maxValue) * (colorScale.length - 1))\n )\n return colorScale[idx]\n }\n\n const defaultTooltip = (day: DayValue): string =>\n `${day.date}: ${day.value}`\n\n const formatTooltip = tooltipFormat ?? defaultTooltip\n\n return (\n <div className={cn('overflow-x-auto', className)}>\n <div className=\"inline-flex flex-col gap-0.5\">\n {/* Month labels */}\n {showMonthLabels && (\n <div className=\"flex\" style={{ marginLeft: showDayLabels ? '2rem' : 0 }}>\n {weeks.map((_, col) => {\n const monthEntry = months.find((m) => m.col === col)\n return (\n <div\n key={`m-${col}`}\n className=\"text-[10px] text-[hsl(var(--text-tertiary))]\"\n style={{ width: 13, minWidth: 13 }}\n >\n {monthEntry?.label ?? ''}\n </div>\n )\n })}\n </div>\n )}\n\n {/* Grid rows (7 days) */}\n <div className=\"flex gap-0\">\n {/* Day labels column */}\n {showDayLabels && (\n <div className=\"flex flex-col gap-[2px] mr-1\">\n {DAY_LABELS.map((label, i) => (\n <div\n key={i}\n className=\"text-[10px] text-[hsl(var(--text-tertiary))] h-[11px] flex items-center justify-end pr-1\"\n style={{ width: '1.75rem' }}\n >\n {label}\n </div>\n ))}\n </div>\n )}\n\n {/* Week columns */}\n {weeks.map((week, wIdx) => (\n <div key={wIdx} className=\"flex flex-col gap-[2px]\">\n {week.map((day, dIdx) => (\n <div\n key={dIdx}\n className={cn(\n 'w-[11px] h-[11px] rounded-sm',\n day ? getColorClass(day.value) : 'bg-transparent',\n day && onDayClick && 'cursor-pointer',\n day && 'hover:ring-1 hover:ring-[hsl(var(--text-tertiary))]',\n )}\n onClick={day && onDayClick ? () => onDayClick(day) : undefined}\n onMouseEnter={day ? () => setHoveredDay(day) : undefined}\n onMouseLeave={() => setHoveredDay(null)}\n title={day ? formatTooltip(day) : undefined}\n role={day && onDayClick ? 'button' : undefined}\n tabIndex={day && onDayClick ? 0 : undefined}\n onKeyDown={\n day && onDayClick\n ? (e) => { if (e.key === 'Enter' || e.key === ' ') onDayClick(day) }\n : undefined\n }\n />\n ))}\n </div>\n ))}\n </div>\n\n {/* Legend */}\n <div className=\"flex items-center gap-1 mt-1\" style={{ marginLeft: showDayLabels ? '2rem' : 0 }}>\n <span className=\"text-[10px] text-[hsl(var(--text-tertiary))] mr-1\">Less</span>\n {colorScale.map((color, i) => (\n <div key={i} className={cn('w-[11px] h-[11px] rounded-sm', color)} />\n ))}\n <span className=\"text-[10px] text-[hsl(var(--text-tertiary))] ml-1\">More</span>\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useEffect, useRef, useCallback, useState } from 'react'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\nimport {\n Info, CheckCircle2, AlertTriangle, XCircle, X,\n} from 'lucide-react'\n\nexport interface Notification {\n id: string\n title: string\n message?: string\n type: 'info' | 'success' | 'warning' | 'error'\n action?: { label: string; onClick: () => void }\n /** Whether the notification can be dismissed. */\n dismissible?: boolean\n /** Auto-dismiss after this many ms. 0 = persistent. */\n duration?: number\n timestamp?: Date\n}\n\nexport interface NotificationStackProps {\n notifications: Notification[]\n /** Callback to dismiss a notification by id. */\n onDismiss: (id: string) => void\n /** Screen corner positioning. */\n position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left'\n /** Max visible cards before stacking remainder. */\n maxVisible?: number\n className?: string\n}\n\nconst TYPE_ICON: Record<Notification['type'], React.FC<{ className?: string }>> = {\n info: Info,\n success: CheckCircle2,\n warning: AlertTriangle,\n error: XCircle,\n}\n\nconst TYPE_COLOR: Record<Notification['type'], string> = {\n info: 'border-l-[hsl(var(--brand-secondary))]',\n success: 'border-l-[hsl(var(--status-ok))]',\n warning: 'border-l-[hsl(var(--status-warning))]',\n error: 'border-l-[hsl(var(--status-critical))]',\n}\n\nconst TYPE_ICON_COLOR: Record<Notification['type'], string> = {\n info: 'text-[hsl(var(--brand-secondary))]',\n success: 'text-[hsl(var(--status-ok))]',\n warning: 'text-[hsl(var(--status-warning))]',\n error: 'text-[hsl(var(--status-critical))]',\n}\n\nconst POSITION_CLASSES: Record<NonNullable<NotificationStackProps['position']>, string> = {\n 'top-right': 'top-4 right-4',\n 'top-left': 'top-4 left-4',\n 'bottom-right': 'bottom-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n}\n\nconst SLIDE_FROM: Record<NonNullable<NotificationStackProps['position']>, { x: number }> = {\n 'top-right': { x: 80 },\n 'top-left': { x: -80 },\n 'bottom-right': { x: 80 },\n 'bottom-left': { x: -80 },\n}\n\n/**\n * @description A fixed-position notification stack with auto-dismiss progress bars,\n * type-specific icons and colors, action buttons, and stacking overflow.\n */\nexport function NotificationStack({\n notifications,\n onDismiss,\n position = 'top-right',\n maxVisible = 5,\n className,\n}: NotificationStackProps): React.JSX.Element {\n const reduced = useReducedMotion()\n const visible = notifications.slice(0, maxVisible)\n const overflow = notifications.length - maxVisible\n\n return (\n <div\n className={cn(\n 'fixed z-50 flex flex-col gap-2 w-[360px] max-w-[calc(100vw-2rem)]',\n POSITION_CLASSES[position],\n className,\n )}\n role=\"region\"\n aria-label=\"Notifications\"\n >\n <AnimatePresence initial={false}>\n {visible.map((notification, idx) => (\n <motion.div\n key={notification.id}\n layout={!reduced}\n initial={reduced ? { opacity: 1 } : { opacity: 0, ...SLIDE_FROM[position] }}\n animate={{ opacity: 1, x: 0 }}\n exit={reduced ? { opacity: 0 } : { opacity: 0, ...SLIDE_FROM[position], transition: { duration: 0.15 } }}\n transition={{ type: 'spring', stiffness: 300, damping: 30 }}\n >\n <NotificationCard\n notification={notification}\n onDismiss={onDismiss}\n reduced={!!reduced}\n />\n </motion.div>\n ))}\n </AnimatePresence>\n\n {/* Overflow indicator */}\n {overflow > 0 && (\n <div className=\"text-center text-xs text-[hsl(var(--text-tertiary))] py-1\">\n +{overflow} more {overflow === 1 ? 'notification' : 'notifications'}\n </div>\n )}\n </div>\n )\n}\n\nfunction NotificationCard({\n notification,\n onDismiss,\n reduced,\n}: {\n notification: Notification\n onDismiss: (id: string) => void\n reduced: boolean\n}): React.JSX.Element {\n const { id, title, message, type, action, dismissible = true, duration = 0 } = notification\n const Icon = TYPE_ICON[type]\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const [progress, setProgress] = useState(100)\n const startTimeRef = useRef(Date.now())\n\n // Auto-dismiss timer\n useEffect(() => {\n if (duration <= 0) return\n\n startTimeRef.current = Date.now()\n\n // Progress countdown\n const intervalId = setInterval(() => {\n const elapsed = Date.now() - startTimeRef.current\n const remaining = Math.max(0, 100 - (elapsed / duration) * 100)\n setProgress(remaining)\n if (remaining <= 0) {\n clearInterval(intervalId)\n }\n }, 50)\n\n timerRef.current = setTimeout(() => {\n onDismiss(id)\n }, duration)\n\n return () => {\n clearInterval(intervalId)\n if (timerRef.current) clearTimeout(timerRef.current)\n }\n }, [id, duration, onDismiss])\n\n const handleDismiss = useCallback(() => {\n onDismiss(id)\n }, [id, onDismiss])\n\n return (\n <div\n className={cn(\n 'relative overflow-hidden rounded-xl border-l-[3px] shadow-lg',\n 'bg-[hsl(var(--bg-elevated))] border border-[hsl(var(--border-subtle))]',\n TYPE_COLOR[type],\n )}\n >\n <div className=\"flex items-start gap-3 p-4\">\n <Icon className={cn('size-5 shrink-0 mt-0.5', TYPE_ICON_COLOR[type])} />\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-[hsl(var(--text-primary))]\">{title}</p>\n {message && (\n <p className=\"mt-0.5 text-xs text-[hsl(var(--text-secondary))] line-clamp-2\">\n {message}\n </p>\n )}\n {action && (\n <button\n type=\"button\"\n onClick={action.onClick}\n className={cn(\n 'mt-2 text-xs font-medium cursor-pointer',\n 'text-[hsl(var(--brand-primary))] hover:underline',\n )}\n >\n {action.label}\n </button>\n )}\n </div>\n {dismissible && (\n <button\n type=\"button\"\n onClick={handleDismiss}\n className={cn(\n 'shrink-0 p-0.5 rounded cursor-pointer',\n 'text-[hsl(var(--text-tertiary))] hover:text-[hsl(var(--text-primary))]',\n 'hover:bg-[hsl(var(--bg-overlay))] transition-colors duration-100',\n )}\n aria-label=\"Dismiss notification\"\n >\n <X className=\"size-3.5\" />\n </button>\n )}\n </div>\n\n {/* Auto-dismiss progress bar */}\n {duration > 0 && (\n <div className=\"h-0.5 bg-[hsl(var(--bg-overlay))]\">\n <div\n className={cn('h-full transition-[width] duration-100', TYPE_COLOR[type].replace('border-l-', 'bg-'))}\n style={{ width: `${progress}%` }}\n />\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { motion, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\nimport { Plus } from 'lucide-react'\n\nexport type KanbanBadgeColor =\n | 'brand' | 'blue' | 'green' | 'yellow' | 'red' | 'orange'\n | 'purple' | 'pink' | 'teal' | 'gray'\n\nexport interface KanbanItem {\n id: string\n title: string\n description?: string\n tags?: { label: string; color: KanbanBadgeColor }[]\n assignee?: { name: string; avatar?: string }\n}\n\nexport interface KanbanColumnProps {\n /** Column title. */\n title: string\n /** Items to display in this column. */\n items: KanbanItem[]\n /** Optional override for the count badge. */\n count?: number\n /** Column header accent color (CSS value or token). */\n color?: string\n /** Callback when a card is clicked. */\n onItemClick?: (item: KanbanItem) => void\n /** Callback when the add button is clicked. */\n onAddItem?: () => void\n className?: string\n}\n\nconst TAG_COLOR_MAP: Record<KanbanBadgeColor, string> = {\n brand: 'bg-[hsl(var(--brand-primary))]/15 text-[hsl(var(--brand-primary))]',\n blue: 'bg-[hsl(var(--brand-secondary))]/15 text-[hsl(var(--brand-secondary))]',\n green: 'bg-[hsl(var(--status-ok))]/15 text-[hsl(var(--status-ok))]',\n yellow: 'bg-[hsl(var(--status-warning))]/15 text-[hsl(var(--status-warning))]',\n red: 'bg-[hsl(var(--status-critical))]/15 text-[hsl(var(--status-critical))]',\n orange: 'bg-[hsl(var(--status-warning))]/20 text-[hsl(var(--status-warning))]',\n purple: 'bg-[hsl(270,60%,60%)]/15 text-[hsl(270,60%,65%)]',\n pink: 'bg-[hsl(330,60%,60%)]/15 text-[hsl(330,60%,65%)]',\n teal: 'bg-[hsl(180,60%,40%)]/15 text-[hsl(180,60%,55%)]',\n gray: 'bg-[hsl(var(--bg-overlay))] text-[hsl(var(--text-secondary))]',\n}\n\n/**\n * @description A kanban board column with title, count badge, scrollable card list,\n * hover states, staggered Framer Motion entrance, and empty state.\n */\nexport function KanbanColumn({\n title,\n items,\n count,\n color,\n onItemClick,\n onAddItem,\n className,\n}: KanbanColumnProps): React.JSX.Element {\n const reduced = useReducedMotion()\n const displayCount = count ?? items.length\n\n return (\n <div\n className={cn(\n 'flex flex-col w-72 min-w-[18rem] rounded-2xl',\n 'bg-[hsl(var(--bg-surface))] border border-[hsl(var(--border-subtle))]',\n className,\n )}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-[hsl(var(--border-subtle))]\">\n <div className=\"flex items-center gap-2\">\n {color && (\n <span\n className=\"w-2 h-2 rounded-full shrink-0\"\n style={{ backgroundColor: color }}\n />\n )}\n <span className=\"text-sm font-semibold text-[hsl(var(--text-primary))]\">\n {title}\n </span>\n <span className=\"inline-flex items-center justify-center min-w-[1.25rem] h-5 px-1.5 rounded-full text-[10px] font-medium tabular-nums bg-[hsl(var(--bg-overlay))] text-[hsl(var(--text-secondary))]\">\n {displayCount}\n </span>\n </div>\n {onAddItem && (\n <button\n type=\"button\"\n onClick={onAddItem}\n className={cn(\n 'p-1 rounded-lg cursor-pointer',\n 'text-[hsl(var(--text-tertiary))] hover:text-[hsl(var(--text-primary))]',\n 'hover:bg-[hsl(var(--bg-overlay))] transition-colors duration-150',\n )}\n aria-label={`Add item to ${title}`}\n >\n <Plus className=\"size-4\" />\n </button>\n )}\n </div>\n\n {/* Card list */}\n <div className=\"flex-1 overflow-y-auto p-2 space-y-2\">\n {items.length === 0 ? (\n <div className=\"flex items-center justify-center py-8 text-xs text-[hsl(var(--text-tertiary))]\">\n No items\n </div>\n ) : (\n items.map((item, idx) => (\n <motion.div\n key={item.id}\n initial={reduced ? undefined : { opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n transition={reduced ? { duration: 0 } : { delay: idx * 0.04, duration: 0.2 }}\n >\n <KanbanCard item={item} onClick={onItemClick} />\n </motion.div>\n ))\n )}\n </div>\n </div>\n )\n}\n\nfunction KanbanCard({\n item,\n onClick,\n}: {\n item: KanbanItem\n onClick?: (item: KanbanItem) => void\n}): React.JSX.Element {\n return (\n <div\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n onClick={onClick ? () => onClick(item) : undefined}\n onKeyDown={\n onClick\n ? (e) => { if (e.key === 'Enter' || e.key === ' ') onClick(item) }\n : undefined\n }\n className={cn(\n 'rounded-xl p-3 border border-[hsl(var(--border-subtle))]',\n 'bg-[hsl(var(--bg-base))]',\n onClick && 'cursor-pointer hover:bg-[hsl(var(--bg-elevated))] hover:shadow-sm',\n 'transition-all duration-150',\n )}\n >\n <p className=\"text-sm font-medium text-[hsl(var(--text-primary))] line-clamp-2\">\n {item.title}\n </p>\n {item.description && (\n <p className=\"mt-1 text-xs text-[hsl(var(--text-secondary))] line-clamp-2\">\n {item.description}\n </p>\n )}\n\n {/* Tags + Assignee row */}\n {(item.tags?.length || item.assignee) && (\n <div className=\"flex items-center justify-between mt-2.5 gap-2\">\n {item.tags && item.tags.length > 0 && (\n <div className=\"flex flex-wrap gap-1 min-w-0\">\n {item.tags.map((tag, i) => (\n <span\n key={i}\n className={cn(\n 'inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-medium whitespace-nowrap',\n TAG_COLOR_MAP[tag.color],\n )}\n >\n {tag.label}\n </span>\n ))}\n </div>\n )}\n {item.assignee && (\n <div className=\"shrink-0\" title={item.assignee.name}>\n {item.assignee.avatar ? (\n <img\n src={item.assignee.avatar}\n alt={item.assignee.name}\n className=\"size-6 rounded-full object-cover\"\n />\n ) : (\n <div className=\"size-6 rounded-full bg-[hsl(var(--bg-overlay))] flex items-center justify-center text-[10px] font-semibold text-[hsl(var(--text-secondary))]\">\n {item.assignee.name.slice(0, 2).toUpperCase()}\n </div>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useState, useMemo, useCallback } from 'react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { Sparkles, X, TrendingUp, AlertTriangle, Hash, Regex } from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\nimport { DataTable, type DataTableProps } from './data-table'\nimport { cn } from '../utils'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Describes an auto-detected filter suggestion for a data column. */\nexport interface FilterSuggestion {\n /** Column accessor key. */\n column: string\n /** Type of insight: outlier, top-n, pattern, or threshold. */\n type: 'outlier' | 'top-n' | 'pattern' | 'threshold'\n /** Human-readable label for the suggestion pill. */\n label: string\n /** Apply this filter to the data. */\n filter: () => void\n}\n\n/** Props for the SmartTable component. */\nexport interface SmartTableProps<T> extends DataTableProps<T> {\n /** Callback fired when a filter suggestion is generated or clicked. */\n onFilterSuggestion?: (suggestion: FilterSuggestion) => void\n /** Maximum number of suggestions to show. */\n maxSuggestions?: number\n}\n\n// ---------------------------------------------------------------------------\n// Analysis helpers\n// ---------------------------------------------------------------------------\n\nfunction mean(nums: number[]): number {\n if (nums.length === 0) return 0\n return nums.reduce((a, b) => a + b, 0) / nums.length\n}\n\nfunction stdDev(nums: number[]): number {\n if (nums.length < 2) return 0\n const m = mean(nums)\n const variance = nums.reduce((sum, n) => sum + (n - m) ** 2, 0) / nums.length\n return Math.sqrt(variance)\n}\n\nfunction analyzeColumn<T>(\n columnId: string,\n columnHeader: string,\n data: T[],\n getValue: (row: T) => unknown,\n): FilterSuggestion[] {\n const suggestions: FilterSuggestion[] = []\n const values = data.map(getValue).filter(v => v != null)\n if (values.length === 0) return suggestions\n\n // Check if numeric column\n const numericValues = values\n .map(v => (typeof v === 'number' ? v : typeof v === 'string' && v !== '' && !isNaN(Number(v)) ? Number(v) : null))\n .filter((v): v is number => v !== null)\n\n if (numericValues.length > values.length * 0.7) {\n // Outlier detection (>2 std dev from mean)\n const m = mean(numericValues)\n const sd = stdDev(numericValues)\n if (sd > 0) {\n const outliers = numericValues.filter(v => Math.abs(v - m) > 2 * sd)\n if (outliers.length > 0 && outliers.length < numericValues.length * 0.3) {\n suggestions.push({\n column: columnId,\n type: 'outlier',\n label: `${outliers.length} outlier${outliers.length > 1 ? 's' : ''} in ${columnHeader}`,\n filter: () => {},\n })\n }\n }\n\n // Threshold suggestion — find if >80% of values are above or below median\n const sorted = [...numericValues].sort((a, b) => a - b)\n const median = sorted[Math.floor(sorted.length / 2)] ?? 0\n const aboveMedian = numericValues.filter(v => v > median)\n if (aboveMedian.length > 0 && aboveMedian.length < numericValues.length * 0.2) {\n suggestions.push({\n column: columnId,\n type: 'threshold',\n label: `Top ${aboveMedian.length} high values in ${columnHeader}`,\n filter: () => {},\n })\n }\n } else {\n // String column analysis\n const strValues = values.map(String)\n const freq = new Map<string, number>()\n for (const v of strValues) {\n freq.set(v, (freq.get(v) ?? 0) + 1)\n }\n\n // Pattern detection: if one value is >90% dominant\n for (const [val, count] of freq) {\n if (count / strValues.length >= 0.9 && freq.size > 1) {\n const otherCount = strValues.length - count\n suggestions.push({\n column: columnId,\n type: 'pattern',\n label: `Show non-\"${val.length > 20 ? val.slice(0, 20) + '\\u2026' : val}\" (${otherCount})`,\n filter: () => {},\n })\n }\n }\n\n // Top-N: if there are more than 5 unique values, suggest top 5\n if (freq.size > 5) {\n const topEntries = [...freq.entries()].sort((a, b) => b[1] - a[1]).slice(0, 5)\n const topTotal = topEntries.reduce((s, e) => s + e[1], 0)\n suggestions.push({\n column: columnId,\n type: 'top-n',\n label: `Top 5 ${columnHeader} (${Math.round((topTotal / strValues.length) * 100)}%)`,\n filter: () => {},\n })\n }\n\n // Minority value detection: values that appear in <12% of rows\n const minorityValues = [...freq.entries()].filter(\n ([, count]) => count / strValues.length < 0.12 && count > 0,\n )\n if (minorityValues.length > 0 && minorityValues.length < freq.size) {\n const totalMinority = minorityValues.reduce((s, [, c]) => s + c, 0)\n suggestions.push({\n column: columnId,\n type: 'pattern',\n label: `Rare ${columnHeader} values (${totalMinority} rows)`,\n filter: () => {},\n })\n }\n }\n\n return suggestions\n}\n\n// ---------------------------------------------------------------------------\n// Suggestion icon mapping\n// ---------------------------------------------------------------------------\n\nconst SUGGESTION_ICONS: Record<FilterSuggestion['type'], LucideIcon> = {\n outlier: AlertTriangle,\n 'top-n': TrendingUp,\n pattern: Regex,\n threshold: Hash,\n}\n\nconst SUGGESTION_COLORS: Record<FilterSuggestion['type'], string> = {\n outlier: 'bg-[hsl(var(--status-warning)/0.15)] text-[hsl(var(--status-warning))] border-[hsl(var(--status-warning)/0.3)]',\n 'top-n': 'bg-[hsl(var(--brand-primary)/0.15)] text-[hsl(var(--brand-primary))] border-[hsl(var(--brand-primary)/0.3)]',\n pattern: 'bg-[hsl(var(--brand-secondary)/0.15)] text-[hsl(var(--brand-secondary))] border-[hsl(var(--brand-secondary)/0.3)]',\n threshold: 'bg-[hsl(var(--status-critical)/0.15)] text-[hsl(var(--status-critical))] border-[hsl(var(--status-critical)/0.3)]',\n}\n\n// ---------------------------------------------------------------------------\n// SmartTable\n// ---------------------------------------------------------------------------\n\n/**\n * @description An enhanced DataTable that analyzes column data on mount and auto-generates\n * smart filter suggestions such as outlier detection, top-N values, dominant patterns,\n * and threshold-based highlights. Click a suggestion to apply it as a filter.\n * Wraps the existing DataTable via composition.\n */\nexport function SmartTable<T>({\n columns,\n data,\n onFilterSuggestion,\n maxSuggestions = 6,\n ...tableProps\n}: SmartTableProps<T>): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n const [dismissed, setDismissed] = useState<Set<string>>(new Set())\n const [appliedFilter, setAppliedFilter] = useState<string | null>(null)\n const [filteredData, setFilteredData] = useState<T[] | null>(null)\n\n // Generate suggestions by analyzing each column\n const suggestions = useMemo(() => {\n if (data.length < 3) return []\n\n const allSuggestions: FilterSuggestion[] = []\n\n for (const colDef of columns) {\n const col = colDef as ColumnDef<T, unknown> & { accessorKey?: string; accessorFn?: (row: T) => unknown; header?: string }\n const columnId = col.accessorKey ?? (col as { id?: string }).id ?? ''\n const columnHeader = typeof col.header === 'string' ? col.header : columnId\n\n if (!columnId) continue\n\n const getValue = col.accessorFn\n ? col.accessorFn\n : (row: T) => (row as Record<string, unknown>)[columnId]\n\n const columnSuggestions = analyzeColumn(columnId, columnHeader, data, getValue)\n\n // Wire up actual filter functions\n for (const s of columnSuggestions) {\n s.filter = () => {\n const vals = data.map(getValue).filter(v => v != null)\n let filtered: T[]\n\n switch (s.type) {\n case 'outlier': {\n const nums = vals\n .map(v => (typeof v === 'number' ? v : Number(v)))\n .filter(v => !isNaN(v))\n const m = mean(nums)\n const sd = stdDev(nums)\n filtered = data.filter(row => {\n const v = getValue(row)\n const n = typeof v === 'number' ? v : Number(v)\n return !isNaN(n) && Math.abs(n - m) > 2 * sd\n })\n break\n }\n case 'top-n': {\n const freq = new Map<string, number>()\n for (const v of vals) freq.set(String(v), (freq.get(String(v)) ?? 0) + 1)\n const topKeys = new Set([...freq.entries()].sort((a, b) => b[1] - a[1]).slice(0, 5).map(e => e[0]))\n filtered = data.filter(row => topKeys.has(String(getValue(row))))\n break\n }\n case 'threshold': {\n const nums = vals\n .map(v => (typeof v === 'number' ? v : Number(v)))\n .filter(v => !isNaN(v))\n const sorted = [...nums].sort((a, b) => a - b)\n const median = sorted[Math.floor(sorted.length / 2)] ?? 0\n filtered = data.filter(row => {\n const v = getValue(row)\n const n = typeof v === 'number' ? v : Number(v)\n return !isNaN(n) && n > median\n })\n break\n }\n case 'pattern': {\n const freq = new Map<string, number>()\n for (const v of vals) freq.set(String(v), (freq.get(String(v)) ?? 0) + 1)\n // Find dominant value\n let dominant = ''\n let maxCount = 0\n for (const [k, c] of freq) {\n if (c > maxCount) { dominant = k; maxCount = c }\n }\n if (maxCount / vals.length >= 0.9) {\n // Show non-dominant\n filtered = data.filter(row => String(getValue(row)) !== dominant)\n } else {\n // Rare values\n const rareKeys = new Set(\n [...freq.entries()].filter(([, c]) => c / vals.length < 0.12).map(e => e[0]),\n )\n filtered = data.filter(row => rareKeys.has(String(getValue(row))))\n }\n break\n }\n default:\n filtered = data\n }\n\n setFilteredData(filtered)\n setAppliedFilter(s.label)\n onFilterSuggestion?.(s)\n }\n }\n\n allSuggestions.push(...columnSuggestions)\n }\n\n return allSuggestions.slice(0, maxSuggestions)\n }, [data, columns, maxSuggestions, onFilterSuggestion])\n\n const visibleSuggestions = suggestions.filter(s => !dismissed.has(s.label))\n\n const handleDismiss = useCallback((label: string) => {\n setDismissed(prev => new Set(prev).add(label))\n }, [])\n\n const handleClearFilter = useCallback(() => {\n setFilteredData(null)\n setAppliedFilter(null)\n }, [])\n\n const displayData = filteredData ?? data\n\n return (\n <div>\n {/* Suggestion pills bar */}\n <AnimatePresence>\n {visibleSuggestions.length > 0 && !appliedFilter && (\n <motion.div\n initial={prefersReducedMotion ? undefined : { opacity: 0, y: -8 }}\n animate={prefersReducedMotion ? undefined : { opacity: 1, y: 0 }}\n exit={prefersReducedMotion ? undefined : { opacity: 0, y: -8 }}\n transition={{ duration: 0.2 }}\n className=\"mb-3 flex flex-wrap items-center gap-2\"\n >\n <span className=\"flex items-center gap-1.5 text-[11px] font-medium text-[hsl(var(--text-tertiary))] uppercase tracking-wider\">\n <Sparkles className=\"h-3.5 w-3.5 text-[hsl(var(--brand-primary))]\" />\n Suggested Filters\n </span>\n\n {visibleSuggestions.map(suggestion => {\n const Icon = SUGGESTION_ICONS[suggestion.type]\n return (\n <motion.button\n key={suggestion.label}\n layout={!prefersReducedMotion}\n initial={prefersReducedMotion ? undefined : { opacity: 0, scale: 0.9 }}\n animate={prefersReducedMotion ? undefined : { opacity: 1, scale: 1 }}\n exit={prefersReducedMotion ? undefined : { opacity: 0, scale: 0.9 }}\n transition={{ duration: 0.15 }}\n onClick={suggestion.filter}\n className={cn(\n 'group inline-flex items-center gap-1.5 rounded-full border px-3 py-1 text-[12px] font-medium',\n 'transition-all hover:shadow-sm cursor-pointer',\n SUGGESTION_COLORS[suggestion.type],\n )}\n >\n <Icon className=\"h-3 w-3\" />\n {suggestion.label}\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(e) => { e.stopPropagation(); handleDismiss(suggestion.label) }}\n onKeyDown={(e) => { if (e.key === 'Enter') { e.stopPropagation(); handleDismiss(suggestion.label) } }}\n className=\"ml-0.5 opacity-0 group-hover:opacity-100 transition-opacity rounded-full p-0.5 hover:bg-[hsl(var(--bg-overlay)/0.3)]\"\n >\n <X className=\"h-2.5 w-2.5\" />\n </span>\n </motion.button>\n )\n })}\n </motion.div>\n )}\n </AnimatePresence>\n\n {/* Active filter indicator */}\n <AnimatePresence>\n {appliedFilter && (\n <motion.div\n initial={prefersReducedMotion ? undefined : { opacity: 0, y: -4 }}\n animate={prefersReducedMotion ? undefined : { opacity: 1, y: 0 }}\n exit={prefersReducedMotion ? undefined : { opacity: 0, y: -4 }}\n transition={{ duration: 0.15 }}\n className=\"mb-3 flex items-center gap-2\"\n >\n <span className=\"inline-flex items-center gap-1.5 rounded-full bg-[hsl(var(--brand-primary)/0.15)] border border-[hsl(var(--brand-primary)/0.3)] px-3 py-1 text-[12px] font-medium text-[hsl(var(--brand-primary))]\">\n <Sparkles className=\"h-3 w-3\" />\n {appliedFilter}\n <span className=\"ml-1 tabular-nums text-[11px] opacity-70\">\n ({displayData.length} row{displayData.length !== 1 ? 's' : ''})\n </span>\n </span>\n <button\n onClick={handleClearFilter}\n className=\"inline-flex items-center gap-1 rounded-full px-2 py-1 text-[11px] font-medium text-[hsl(var(--text-secondary))] hover:text-[hsl(var(--text-primary))] hover:bg-[hsl(var(--bg-elevated)/0.5)] transition-colors\"\n >\n <X className=\"h-3 w-3\" />\n Clear\n </button>\n </motion.div>\n )}\n </AnimatePresence>\n\n {/* Wrapped DataTable */}\n <DataTable<T>\n columns={columns}\n data={displayData}\n {...tableProps}\n />\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useState, useEffect, useRef, useMemo } from 'react'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { ArrowUp, ArrowDown, Minus, Wifi, WifiOff, Loader2 } from 'lucide-react'\nimport { cn } from '../utils'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Props for the RealtimeValue component. */\nexport interface RealtimeValueProps {\n /** The current value to display. */\n value: number | string\n /** Optional label displayed above or beside the value. */\n label?: string\n /** Custom formatter for numeric values. */\n format?: (v: number) => string\n /** ISO timestamp or Date of the last data update. */\n lastUpdated?: string | Date\n /** Milliseconds after which the value is considered stale. Default 30000. */\n staleAfterMs?: number\n /** Connection state to the data source. */\n connectionState?: 'connected' | 'reconnecting' | 'disconnected'\n /** Previous numeric value for delta/change display. */\n previousValue?: number\n /** Whether to animate value changes. Default true. */\n animate?: boolean\n /** Display size variant. */\n size?: 'sm' | 'md' | 'lg' | 'xl'\n /** Additional class name for the root element. */\n className?: string\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction easeOutCubic(t: number): number {\n return 1 - Math.pow(1 - t, 3)\n}\n\nfunction formatRelativeSeconds(ms: number): string {\n const secs = Math.floor(ms / 1000)\n if (secs < 1) return 'just now'\n if (secs < 60) return `${secs}s ago`\n if (secs < 3600) return `${Math.floor(secs / 60)}m ago`\n return `${Math.floor(secs / 3600)}h ago`\n}\n\nconst SIZE_CLASSES = {\n sm: { value: 'text-lg', label: 'text-[11px]', delta: 'text-[10px]', dot: 'h-1.5 w-1.5', gap: 'gap-1' },\n md: { value: 'text-2xl', label: 'text-xs', delta: 'text-[11px]', dot: 'h-2 w-2', gap: 'gap-1.5' },\n lg: { value: 'text-3xl', label: 'text-sm', delta: 'text-xs', dot: 'h-2.5 w-2.5', gap: 'gap-2' },\n xl: { value: 'text-4xl', label: 'text-base', delta: 'text-sm', dot: 'h-3 w-3', gap: 'gap-2' },\n} as const\n\n// ---------------------------------------------------------------------------\n// AnimatedNumber (internal)\n// ---------------------------------------------------------------------------\n\nfunction AnimatedNumber({\n value,\n format,\n duration = 400,\n animateEnabled,\n reduced,\n className,\n}: {\n value: number\n format?: (v: number) => string\n duration?: number\n animateEnabled: boolean\n reduced: boolean | null\n className?: string\n}): React.JSX.Element {\n const prevRef = useRef(value)\n const rafRef = useRef<number | null>(null)\n const [displayed, setDisplayed] = useState(value)\n\n useEffect(() => {\n const from = prevRef.current\n const to = value\n prevRef.current = value\n\n if (reduced || !animateEnabled || from === to) {\n setDisplayed(to)\n return\n }\n\n const start = performance.now()\n function tick(now: number) {\n const elapsed = now - start\n const progress = Math.min(elapsed / duration, 1)\n const eased = easeOutCubic(progress)\n setDisplayed(from + (to - from) * eased)\n if (progress < 1) {\n rafRef.current = requestAnimationFrame(tick)\n } else {\n setDisplayed(to)\n }\n }\n\n rafRef.current = requestAnimationFrame(tick)\n return () => {\n if (rafRef.current !== null) cancelAnimationFrame(rafRef.current)\n }\n }, [value, duration, reduced, animateEnabled])\n\n const formatted = format\n ? format(displayed)\n : Number.isInteger(value)\n ? Math.round(displayed).toString()\n : displayed.toFixed(value.toString().split('.')[1]?.length ?? 1)\n\n return <span className={cn('tabular-nums', className)}>{formatted}</span>\n}\n\n// ---------------------------------------------------------------------------\n// RealtimeValue\n// ---------------------------------------------------------------------------\n\n/**\n * @description A live data display component with built-in freshness tracking,\n * connection state indicators, animated value transitions, delta display,\n * and auto-updating relative timestamps. Designed for real-time monitoring dashboards.\n */\nexport function RealtimeValue({\n value,\n label,\n format,\n lastUpdated,\n staleAfterMs = 30000,\n connectionState = 'connected',\n previousValue,\n animate = true,\n size = 'md',\n className,\n}: RealtimeValueProps): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n const sizeClasses = SIZE_CLASSES[size]\n\n // Auto-updating staleness\n const [staleness, setStaleness] = useState(0)\n useEffect(() => {\n if (!lastUpdated) return\n const getMs = () => Date.now() - new Date(lastUpdated).getTime()\n setStaleness(getMs())\n const interval = setInterval(() => setStaleness(getMs()), 1000)\n return () => clearInterval(interval)\n }, [lastUpdated])\n\n const isStale = lastUpdated ? staleness > staleAfterMs : false\n const isVeryStale = lastUpdated ? staleness > staleAfterMs * 2 : false\n\n // Freshness dot color\n const freshnessColor = useMemo(() => {\n if (connectionState === 'disconnected') return 'bg-[hsl(var(--status-critical))]'\n if (isVeryStale) return 'bg-[hsl(var(--status-critical))]'\n if (isStale) return 'bg-[hsl(var(--status-warning))]'\n return 'bg-[hsl(var(--status-ok))]'\n }, [connectionState, isStale, isVeryStale])\n\n // Delta calculation\n const delta = typeof value === 'number' && previousValue !== undefined ? value - previousValue : null\n const deltaSign = delta !== null ? (delta > 0 ? '+' : delta < 0 ? '' : '') : null\n\n const isNumeric = typeof value === 'number'\n\n return (\n <div\n className={cn(\n 'relative inline-flex flex-col',\n sizeClasses.gap,\n isStale && 'opacity-60',\n className,\n )}\n title={\n lastUpdated\n ? `Last updated: ${new Date(lastUpdated).toLocaleString()} (${formatRelativeSeconds(staleness)})`\n : undefined\n }\n >\n {/* Label row */}\n {label && (\n <div className=\"flex items-center gap-1.5\">\n <span className={cn('font-medium text-[hsl(var(--text-secondary))]', sizeClasses.label)}>\n {label}\n </span>\n </div>\n )}\n\n {/* Value row */}\n <div className=\"flex items-center gap-2\">\n {/* Freshness indicator */}\n <div className=\"relative flex items-center justify-center\">\n <span className={cn('rounded-full', sizeClasses.dot, freshnessColor)} />\n {connectionState === 'connected' && !isStale && (\n <span\n className={cn(\n 'absolute rounded-full animate-ping',\n sizeClasses.dot,\n 'bg-[hsl(var(--status-ok)/0.5)]',\n )}\n style={{ animationDuration: '2s' }}\n />\n )}\n </div>\n\n {/* Main value */}\n <div className=\"flex items-baseline gap-1.5\">\n {isNumeric ? (\n <AnimatedNumber\n value={value}\n format={format}\n animateEnabled={animate}\n reduced={prefersReducedMotion}\n className={cn('font-semibold text-[hsl(var(--text-primary))]', sizeClasses.value)}\n />\n ) : (\n <span className={cn('font-semibold text-[hsl(var(--text-primary))] tabular-nums', sizeClasses.value)}>\n {value}\n </span>\n )}\n\n {/* Delta indicator */}\n <AnimatePresence>\n {delta !== null && delta !== 0 && (\n <motion.span\n initial={prefersReducedMotion ? undefined : { opacity: 0, x: -4 }}\n animate={prefersReducedMotion ? undefined : { opacity: 1, x: 0 }}\n exit={prefersReducedMotion ? undefined : { opacity: 0, x: -4 }}\n transition={{ duration: 0.15 }}\n className={cn(\n 'inline-flex items-center gap-0.5 font-medium tabular-nums',\n sizeClasses.delta,\n delta > 0 ? 'text-[hsl(var(--status-ok))]' : 'text-[hsl(var(--status-critical))]',\n )}\n >\n {delta > 0 ? <ArrowUp className=\"h-3 w-3\" /> : <ArrowDown className=\"h-3 w-3\" />}\n {deltaSign}{format ? format(Math.abs(delta)) : Math.abs(delta).toLocaleString()}\n </motion.span>\n )}\n {delta === 0 && (\n <motion.span\n initial={prefersReducedMotion ? undefined : { opacity: 0 }}\n animate={prefersReducedMotion ? undefined : { opacity: 1 }}\n className={cn(\n 'inline-flex items-center gap-0.5 font-medium text-[hsl(var(--text-tertiary))]',\n sizeClasses.delta,\n )}\n >\n <Minus className=\"h-3 w-3\" />\n 0\n </motion.span>\n )}\n </AnimatePresence>\n </div>\n\n {/* Connection state icon */}\n {connectionState !== 'connected' && (\n <span className=\"ml-1\">\n {connectionState === 'reconnecting' && (\n <Loader2 className=\"h-4 w-4 text-[hsl(var(--status-warning))] animate-spin\" />\n )}\n {connectionState === 'disconnected' && (\n <WifiOff className=\"h-4 w-4 text-[hsl(var(--status-critical))]\" />\n )}\n </span>\n )}\n </div>\n\n {/* Relative timestamp */}\n {lastUpdated && (\n <span className={cn('text-[hsl(var(--text-tertiary))] tabular-nums', sizeClasses.delta)}>\n {formatRelativeSeconds(staleness)}\n </span>\n )}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useState, useEffect, useCallback, useRef, useMemo } from 'react'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { Search, Clock, Command, CornerDownLeft } from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '../utils'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** A single command item in the palette. */\nexport interface CommandItem {\n /** Unique identifier. */\n id: string\n /** Display label. */\n label: string\n /** Optional description shown below the label. */\n description?: string\n /** Optional icon component. */\n icon?: LucideIcon\n /** Keyboard shortcut display string (e.g. \"Cmd+K\"). */\n shortcut?: string\n /** Group name for sectioning items. */\n group?: string\n /** Callback when item is selected. */\n onSelect: () => void\n /** Additional search terms that match this item. */\n keywords?: string[]\n}\n\n/** Props for the CommandBar component. */\nexport interface CommandBarProps {\n /** Array of command items to display and search. */\n items: CommandItem[]\n /** Placeholder text for the search input. */\n placeholder?: string\n /** Hotkey letter (combined with Cmd/Ctrl). Default \"k\". */\n hotkey?: string\n /** Async search function for remote results. */\n onSearch?: (query: string) => Promise<CommandItem[]>\n /** localStorage key for persisting recent selections. */\n recentKey?: string\n /** Maximum number of recent items to store. Default 5. */\n maxRecent?: number\n /** Additional class name for the dialog. */\n className?: string\n}\n\n// ---------------------------------------------------------------------------\n// Fuzzy scoring\n// ---------------------------------------------------------------------------\n\nfunction fuzzyScore(query: string, target: string): number {\n const q = query.toLowerCase()\n const t = target.toLowerCase()\n if (t === q) return 100\n if (t.startsWith(q)) return 80\n if (t.includes(q)) return 60\n // Fuzzy subsequence match\n let qi = 0\n let score = 0\n for (let ti = 0; ti < t.length && qi < q.length; ti++) {\n if (t[ti] === q[qi]) {\n score += 10\n qi++\n }\n }\n return qi === q.length ? score : 0\n}\n\nfunction scoreItem(query: string, item: CommandItem): number {\n if (!query) return 0\n let best = fuzzyScore(query, item.label)\n if (item.description) best = Math.max(best, fuzzyScore(query, item.description) * 0.8)\n if (item.keywords) {\n for (const kw of item.keywords) {\n best = Math.max(best, fuzzyScore(query, kw) * 0.9)\n }\n }\n return best\n}\n\n// ---------------------------------------------------------------------------\n// CommandBar\n// ---------------------------------------------------------------------------\n\n/**\n * @description A universal command palette activated by Cmd+K (Mac) or Ctrl+K (Win).\n * Features fuzzy search, grouped items, recent selections (localStorage),\n * async search support, keyboard navigation, and Framer Motion animations.\n * Fully configurable and not hardcoded to any app.\n */\nexport function CommandBar({\n items,\n placeholder = 'Type a command\\u2026',\n hotkey = 'k',\n onSearch,\n recentKey = 'ui-kit-command-recent',\n maxRecent = 5,\n className,\n}: CommandBarProps): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n const [open, setOpen] = useState(false)\n const [query, setQuery] = useState('')\n const [activeIndex, setActiveIndex] = useState(0)\n const [asyncResults, setAsyncResults] = useState<CommandItem[]>([])\n const [isSearching, setIsSearching] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n const listRef = useRef<HTMLDivElement>(null)\n\n // Recent items from localStorage\n const [recentIds, setRecentIds] = useState<string[]>(() => {\n if (typeof window === 'undefined') return []\n try {\n return JSON.parse(localStorage.getItem(recentKey) ?? '[]') as string[]\n } catch {\n return []\n }\n })\n\n const saveRecent = useCallback(\n (id: string) => {\n const updated = [id, ...recentIds.filter(r => r !== id)].slice(0, maxRecent)\n setRecentIds(updated)\n try {\n localStorage.setItem(recentKey, JSON.stringify(updated))\n } catch {\n // localStorage might be full\n }\n },\n [recentIds, recentKey, maxRecent],\n )\n\n // Hotkey listener\n useEffect(() => {\n const handler = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === hotkey) {\n e.preventDefault()\n setOpen(o => !o)\n }\n if (e.key === 'Escape' && open) {\n setOpen(false)\n }\n }\n document.addEventListener('keydown', handler)\n return () => document.removeEventListener('keydown', handler)\n }, [hotkey, open])\n\n // Focus input when opened\n useEffect(() => {\n if (open) {\n setQuery('')\n setActiveIndex(0)\n setAsyncResults([])\n requestAnimationFrame(() => inputRef.current?.focus())\n }\n }, [open])\n\n // Prevent body scroll when open\n useEffect(() => {\n if (open) {\n const prev = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n return () => { document.body.style.overflow = prev }\n }\n }, [open])\n\n // Async search debounce\n useEffect(() => {\n if (!onSearch || !query) {\n setAsyncResults([])\n return\n }\n setIsSearching(true)\n const timer = setTimeout(async () => {\n try {\n const results = await onSearch(query)\n setAsyncResults(results)\n } catch {\n setAsyncResults([])\n } finally {\n setIsSearching(false)\n }\n }, 200)\n return () => clearTimeout(timer)\n }, [query, onSearch])\n\n // Build display list\n const displayItems = useMemo(() => {\n const allItems = [...items, ...asyncResults]\n\n if (!query) {\n // Show recent items first, then all items\n const recentItems = recentIds\n .map(id => allItems.find(i => i.id === id))\n .filter((i): i is CommandItem => i !== undefined)\n const rest = allItems.filter(i => !recentIds.includes(i.id))\n return [\n ...recentItems.map(i => ({ ...i, group: 'Recent' })),\n ...rest,\n ]\n }\n\n // Score and sort\n return allItems\n .map(item => ({ item, score: scoreItem(query, item) }))\n .filter(({ score }) => score > 0)\n .sort((a, b) => b.score - a.score)\n .map(({ item }) => item)\n }, [items, asyncResults, query, recentIds])\n\n // Group items\n const groups = useMemo(() => {\n const grouped = new Map<string, CommandItem[]>()\n for (const item of displayItems) {\n const group = item.group ?? ''\n const arr = grouped.get(group)\n if (arr) arr.push(item)\n else grouped.set(group, [item])\n }\n return grouped\n }, [displayItems])\n\n // Flatten for keyboard nav\n const flatItems = displayItems\n\n // Keep activeIndex in bounds\n useEffect(() => {\n setActiveIndex(0)\n }, [query])\n\n const handleSelect = useCallback(\n (item: CommandItem) => {\n saveRecent(item.id)\n setOpen(false)\n item.onSelect()\n },\n [saveRecent],\n )\n\n // Keyboard navigation\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n setActiveIndex(i => Math.min(i + 1, flatItems.length - 1))\n } else if (e.key === 'ArrowUp') {\n e.preventDefault()\n setActiveIndex(i => Math.max(i - 1, 0))\n } else if (e.key === 'Enter') {\n e.preventDefault()\n const item = flatItems[activeIndex]\n if (item) handleSelect(item)\n }\n },\n [flatItems, activeIndex, handleSelect],\n )\n\n // Scroll active item into view\n useEffect(() => {\n if (!listRef.current) return\n const active = listRef.current.querySelector('[data-active=\"true\"]')\n active?.scrollIntoView({ block: 'nearest' })\n }, [activeIndex])\n\n const isMac = typeof navigator !== 'undefined' && /Mac|iPhone/.test(navigator.userAgent ?? '')\n\n return (\n <AnimatePresence>\n {open && (\n <div className=\"fixed inset-0 z-50\">\n {/* Backdrop */}\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={prefersReducedMotion ? { duration: 0 } : { duration: 0.15 }}\n className=\"absolute inset-0 bg-[hsl(var(--bg-base)/0.6)] backdrop-blur-sm\"\n onClick={() => setOpen(false)}\n />\n\n {/* Dialog */}\n <motion.div\n initial={prefersReducedMotion ? undefined : { opacity: 0, scale: 0.96, y: -20 }}\n animate={prefersReducedMotion ? undefined : { opacity: 1, scale: 1, y: 0 }}\n exit={prefersReducedMotion ? undefined : { opacity: 0, scale: 0.96, y: -20 }}\n transition={prefersReducedMotion ? { duration: 0 } : { duration: 0.2, ease: [0.16, 1, 0.3, 1] }}\n className={cn(\n 'absolute left-1/2 top-[15%] -translate-x-1/2',\n 'w-full max-w-lg rounded-2xl overflow-hidden',\n 'border border-[hsl(var(--border-default))]',\n 'bg-[hsl(var(--bg-elevated))] shadow-2xl',\n 'flex flex-col max-h-[70vh]',\n className,\n )}\n onKeyDown={handleKeyDown}\n >\n {/* Search input */}\n <div className=\"flex items-center gap-3 px-4 py-3 border-b border-[hsl(var(--border-subtle)/0.5)]\">\n <Search className=\"h-5 w-5 text-[hsl(var(--text-tertiary))] shrink-0\" />\n <input\n ref={inputRef}\n type=\"text\"\n value={query}\n onChange={e => setQuery(e.target.value)}\n placeholder={placeholder}\n className=\"flex-1 bg-transparent text-[hsl(var(--text-primary))] text-sm placeholder:text-[hsl(var(--text-tertiary))] outline-none\"\n />\n <kbd className=\"hidden sm:inline-flex items-center gap-1 rounded-md border border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-surface))] px-1.5 py-0.5 text-[10px] text-[hsl(var(--text-tertiary))] font-mono\">\n Esc\n </kbd>\n </div>\n\n {/* Results list */}\n <div ref={listRef} className=\"flex-1 overflow-y-auto py-2\">\n {flatItems.length === 0 && !isSearching && (\n <div className=\"px-4 py-8 text-center text-sm text-[hsl(var(--text-tertiary))]\">\n {query ? 'No results found.' : 'No commands available.'}\n </div>\n )}\n\n {isSearching && flatItems.length === 0 && (\n <div className=\"px-4 py-8 flex items-center justify-center gap-2 text-sm text-[hsl(var(--text-tertiary))]\">\n <div className=\"h-4 w-4 rounded-full border-2 border-[hsl(var(--brand-primary))] border-t-transparent animate-spin\" />\n Searching...\n </div>\n )}\n\n {[...groups.entries()].map(([groupName, groupItems]) => {\n return (\n <div key={groupName || '__ungrouped'}>\n {groupName && (\n <div className=\"px-4 pt-2 pb-1\">\n <span className=\"text-[10px] font-semibold uppercase tracking-wider text-[hsl(var(--text-tertiary))]\">\n {groupName}\n </span>\n </div>\n )}\n {groupItems.map(item => {\n const globalIdx = flatItems.indexOf(item)\n const isActive = globalIdx === activeIndex\n const Icon = item.icon\n const isRecent = item.group === 'Recent'\n return (\n <button\n key={item.id}\n data-active={isActive}\n onClick={() => handleSelect(item)}\n onMouseEnter={() => setActiveIndex(globalIdx)}\n className={cn(\n 'w-full flex items-center gap-3 px-4 py-2.5 text-left transition-colors',\n isActive\n ? 'bg-[hsl(var(--brand-primary)/0.1)]'\n : 'hover:bg-[hsl(var(--bg-surface)/0.5)]',\n )}\n >\n {Icon ? (\n <Icon className={cn(\n 'h-4 w-4 shrink-0',\n isActive ? 'text-[hsl(var(--brand-primary))]' : 'text-[hsl(var(--text-tertiary))]',\n )} />\n ) : isRecent ? (\n <Clock className={cn(\n 'h-4 w-4 shrink-0',\n isActive ? 'text-[hsl(var(--brand-primary))]' : 'text-[hsl(var(--text-tertiary))]',\n )} />\n ) : (\n <div className=\"h-4 w-4 shrink-0\" />\n )}\n\n <div className=\"flex-1 min-w-0\">\n <div className={cn(\n 'text-sm font-medium truncate',\n isActive ? 'text-[hsl(var(--text-primary))]' : 'text-[hsl(var(--text-primary))]',\n )}>\n {item.label}\n </div>\n {item.description && (\n <div className=\"text-[11px] text-[hsl(var(--text-tertiary))] truncate mt-0.5\">\n {item.description}\n </div>\n )}\n </div>\n\n {item.shortcut && (\n <kbd className=\"flex items-center gap-0.5 rounded-md border border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-surface))] px-1.5 py-0.5 text-[10px] text-[hsl(var(--text-tertiary))] font-mono shrink-0\">\n {item.shortcut}\n </kbd>\n )}\n\n {isActive && (\n <CornerDownLeft className=\"h-3.5 w-3.5 text-[hsl(var(--text-tertiary))] shrink-0\" />\n )}\n </button>\n )\n })}\n </div>\n )\n })}\n </div>\n\n {/* Footer */}\n <div className=\"flex items-center gap-4 px-4 py-2 border-t border-[hsl(var(--border-subtle)/0.5)] text-[10px] text-[hsl(var(--text-tertiary))]\">\n <span className=\"inline-flex items-center gap-1\">\n <kbd className=\"rounded border border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-surface))] px-1 py-0.5 font-mono\">&uarr;&darr;</kbd>\n Navigate\n </span>\n <span className=\"inline-flex items-center gap-1\">\n <kbd className=\"rounded border border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-surface))] px-1 py-0.5 font-mono\">&crarr;</kbd>\n Select\n </span>\n <span className=\"inline-flex items-center gap-1\">\n <kbd className=\"rounded border border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-surface))] px-1 py-0.5 font-mono\">Esc</kbd>\n Close\n </span>\n <span className=\"ml-auto inline-flex items-center gap-1\">\n <kbd className=\"rounded border border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-surface))] px-1 py-0.5 font-mono\">\n {isMac ? '\\u2318' : 'Ctrl+'}\n </kbd>\n <kbd className=\"rounded border border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-surface))] px-1 py-0.5 font-mono uppercase\">\n {hotkey}\n </kbd>\n Toggle\n </span>\n </div>\n </motion.div>\n </div>\n )}\n </AnimatePresence>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useState, useCallback, useRef } from 'react'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { GripVertical } from 'lucide-react'\nimport { cn } from '../utils'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** A sortable item must have a string id. */\nexport interface SortableItem {\n id: string\n [key: string]: unknown\n}\n\n/** Props passed to the drag handle in the render function. */\nexport interface DragHandleProps {\n /** Attach to the drag handle element. */\n onPointerDown: (e: React.PointerEvent) => void\n /** Whether this item is currently being dragged. */\n isDragging: boolean\n /** Keyboard handler for accessible reordering. */\n onKeyDown: (e: React.KeyboardEvent) => void\n /** The drag handle should be focusable. */\n tabIndex: number\n /** ARIA role for the drag handle. */\n role: string\n /** ARIA description for keyboard reordering. */\n 'aria-roledescription': string\n}\n\n/** Props for the SortableList component. */\nexport interface SortableListProps<T extends SortableItem> {\n /** Array of items to display. Each must have a unique `id`. */\n items: T[]\n /** Callback when items are reordered. Receives the new array. */\n onReorder: (items: T[]) => void\n /** Render function for each item. Receives the item, its index, and drag handle props. */\n renderItem: (item: T, index: number, dragHandleProps: DragHandleProps) => React.JSX.Element\n /** Layout direction. Default \"vertical\". */\n direction?: 'vertical' | 'horizontal'\n /** Additional class name for the list container. */\n className?: string\n}\n\n// ---------------------------------------------------------------------------\n// SortableList\n// ---------------------------------------------------------------------------\n\n/**\n * @description A drag-and-drop reorderable list with smooth Framer Motion layout animations.\n * Pure React implementation using pointer events (no external DnD library).\n * Supports keyboard reordering (Space to pick up, arrows to move, Enter/Space to drop).\n * Touch-friendly and accessible.\n */\nexport function SortableList<T extends SortableItem>({\n items,\n onReorder,\n renderItem,\n direction = 'vertical',\n className,\n}: SortableListProps<T>): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n const [dragIdx, setDragIdx] = useState<number | null>(null)\n const [overIdx, setOverIdx] = useState<number | null>(null)\n const [kbPickedIdx, setKbPickedIdx] = useState<number | null>(null)\n const containerRef = useRef<HTMLDivElement>(null)\n const startPos = useRef({ x: 0, y: 0 })\n const dragItemId = useRef<string | null>(null)\n\n const handlePointerDown = useCallback(\n (index: number) => (e: React.PointerEvent) => {\n e.preventDefault()\n // Only respond to primary button / touch\n if (e.button !== 0) return\n\n setDragIdx(index)\n setOverIdx(index)\n dragItemId.current = items[index]?.id ?? null\n startPos.current = { x: e.clientX, y: e.clientY }\n\n const handlePointerMove = (ev: PointerEvent) => {\n if (!containerRef.current) return\n const container = containerRef.current\n const children = Array.from(container.children) as HTMLElement[]\n\n // Find which item we're over\n for (let i = 0; i < children.length; i++) {\n const rect = children[i]!.getBoundingClientRect()\n const midX = rect.left + rect.width / 2\n const midY = rect.top + rect.height / 2\n const isOver = direction === 'vertical'\n ? ev.clientY < midY + rect.height / 2 && ev.clientY > midY - rect.height / 2\n : ev.clientX < midX + rect.width / 2 && ev.clientX > midX - rect.width / 2\n\n if (isOver) {\n setOverIdx(i)\n break\n }\n }\n }\n\n const handlePointerUp = () => {\n document.removeEventListener('pointermove', handlePointerMove)\n document.removeEventListener('pointerup', handlePointerUp)\n\n setDragIdx(prev => {\n setOverIdx(over => {\n if (prev !== null && over !== null && prev !== over) {\n const newItems = [...items]\n const [moved] = newItems.splice(prev, 1)\n if (moved) newItems.splice(over, 0, moved)\n // Use setTimeout to avoid state update during render\n setTimeout(() => onReorder(newItems), 0)\n }\n return null\n })\n return null\n })\n }\n\n document.addEventListener('pointermove', handlePointerMove)\n document.addEventListener('pointerup', handlePointerUp)\n },\n [items, onReorder, direction],\n )\n\n // Keyboard reorder\n const handleKeyDown = useCallback(\n (index: number) => (e: React.KeyboardEvent) => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault()\n if (kbPickedIdx === null) {\n // Pick up\n setKbPickedIdx(index)\n } else {\n // Drop\n if (kbPickedIdx !== index) {\n const newItems = [...items]\n const [moved] = newItems.splice(kbPickedIdx, 1)\n if (moved) newItems.splice(index, 0, moved)\n onReorder(newItems)\n }\n setKbPickedIdx(null)\n }\n } else if (e.key === 'Escape') {\n setKbPickedIdx(null)\n } else if (kbPickedIdx !== null) {\n const isUp = direction === 'vertical' ? e.key === 'ArrowUp' : e.key === 'ArrowLeft'\n const isDown = direction === 'vertical' ? e.key === 'ArrowDown' : e.key === 'ArrowRight'\n\n if (isUp && kbPickedIdx > 0) {\n e.preventDefault()\n const newItems = [...items]\n const [moved] = newItems.splice(kbPickedIdx, 1)\n const newIdx = kbPickedIdx - 1\n if (moved) newItems.splice(newIdx, 0, moved)\n onReorder(newItems)\n setKbPickedIdx(newIdx)\n } else if (isDown && kbPickedIdx < items.length - 1) {\n e.preventDefault()\n const newItems = [...items]\n const [moved] = newItems.splice(kbPickedIdx, 1)\n const newIdx = kbPickedIdx + 1\n if (moved) newItems.splice(newIdx, 0, moved)\n onReorder(newItems)\n setKbPickedIdx(newIdx)\n }\n }\n },\n [items, onReorder, kbPickedIdx, direction],\n )\n\n // Compute visual order during drag\n const getVisualItems = useCallback(() => {\n if (dragIdx === null || overIdx === null || dragIdx === overIdx) return items\n const visual = [...items]\n const [moved] = visual.splice(dragIdx, 1)\n if (moved) visual.splice(overIdx, 0, moved)\n return visual\n }, [items, dragIdx, overIdx])\n\n const visualItems = dragIdx !== null ? getVisualItems() : items\n\n return (\n <div\n ref={containerRef}\n className={cn(\n 'flex',\n direction === 'vertical' ? 'flex-col' : 'flex-row flex-wrap',\n className,\n )}\n role=\"listbox\"\n aria-label=\"Sortable list\"\n >\n <AnimatePresence>\n {visualItems.map((item, index) => {\n const isDragging = dragIdx !== null && item.id === dragItemId.current\n const isKbPicked = kbPickedIdx !== null && items[kbPickedIdx]?.id === item.id\n\n const dragHandleProps: DragHandleProps = {\n onPointerDown: handlePointerDown(items.findIndex(i => i.id === item.id)),\n isDragging: isDragging || isKbPicked,\n onKeyDown: handleKeyDown(items.findIndex(i => i.id === item.id)),\n tabIndex: 0,\n role: 'option',\n 'aria-roledescription': 'sortable item',\n }\n\n return (\n <motion.div\n key={item.id}\n layout={!prefersReducedMotion}\n transition={prefersReducedMotion ? { duration: 0 } : { type: 'spring', stiffness: 500, damping: 35, mass: 0.5 }}\n className={cn(\n 'relative',\n isDragging && 'z-10 opacity-80',\n isKbPicked && 'ring-2 ring-[hsl(var(--brand-primary))] rounded-lg',\n )}\n role=\"option\"\n aria-selected={isKbPicked}\n >\n {/* Drop indicator line */}\n {dragIdx !== null && overIdx === index && !isDragging && (\n <div\n className={cn(\n 'absolute z-20 bg-[hsl(var(--brand-primary))] rounded-full',\n direction === 'vertical'\n ? 'left-0 right-0 -top-px h-0.5'\n : 'top-0 bottom-0 -left-px w-0.5',\n )}\n />\n )}\n {renderItem(item, index, dragHandleProps)}\n </motion.div>\n )\n })}\n </AnimatePresence>\n </div>\n )\n}\n\n/**\n * @description Default drag handle component. Renders a GripVertical icon\n * with proper pointer/keyboard event handlers from DragHandleProps.\n */\nexport function DragHandle(props: DragHandleProps): React.JSX.Element {\n return (\n <span\n onPointerDown={props.onPointerDown}\n onKeyDown={props.onKeyDown}\n tabIndex={props.tabIndex}\n role={props.role}\n aria-roledescription={props['aria-roledescription']}\n className={cn(\n 'inline-flex items-center justify-center p-1 rounded cursor-grab touch-none select-none',\n 'text-[hsl(var(--text-disabled))] hover:text-[hsl(var(--text-secondary))] transition-colors',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[hsl(var(--brand-primary))]',\n props.isDragging && 'cursor-grabbing text-[hsl(var(--brand-primary))]',\n )}\n >\n <GripVertical className=\"h-4 w-4\" />\n </span>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useState, useEffect, useRef, useCallback, useMemo } from 'react'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { ArrowUp, Loader2 } from 'lucide-react'\nimport { cn } from '../utils'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Props for the InfiniteScroll component. */\nexport interface InfiniteScrollProps<T> {\n /** Array of loaded items. */\n items: T[]\n /** Render function for each item. */\n renderItem: (item: T, index: number) => React.JSX.Element\n /** Called when more items should be loaded. */\n loadMore: () => void | Promise<void>\n /** Whether more items are available. */\n hasMore: boolean\n /** Whether a load operation is in progress. */\n isLoading?: boolean\n /** Pixels from bottom to trigger loadMore. Default 200. */\n threshold?: number\n /** Fixed item height for virtualization. If omitted, all items render (no virtualization). */\n itemHeight?: number\n /** Content to display when items array is empty. */\n emptyState?: React.ReactNode\n /** Additional class name for the scroll container. */\n className?: string\n}\n\n// ---------------------------------------------------------------------------\n// InfiniteScroll\n// ---------------------------------------------------------------------------\n\n/**\n * @description A virtualized infinite-scroll list using IntersectionObserver.\n * Supports optional height-based virtualization, loading indicators, scroll-to-top,\n * empty states, and skeleton placeholders. No scroll event listeners used.\n */\nexport function InfiniteScroll<T>({\n items,\n renderItem,\n loadMore,\n hasMore,\n isLoading = false,\n threshold = 200,\n itemHeight,\n emptyState,\n className,\n}: InfiniteScrollProps<T>): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n const containerRef = useRef<HTMLDivElement>(null)\n const sentinelRef = useRef<HTMLDivElement>(null)\n const [showScrollTop, setShowScrollTop] = useState(false)\n const loadingRef = useRef(false)\n\n // IntersectionObserver for infinite load trigger\n useEffect(() => {\n const sentinel = sentinelRef.current\n if (!sentinel) return\n\n const observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0]\n if (entry?.isIntersecting && hasMore && !isLoading && !loadingRef.current) {\n loadingRef.current = true\n const result = loadMore()\n if (result && typeof result.then === 'function') {\n result.then(() => { loadingRef.current = false }).catch(() => { loadingRef.current = false })\n } else {\n loadingRef.current = false\n }\n }\n },\n {\n root: containerRef.current,\n rootMargin: `0px 0px ${threshold}px 0px`,\n },\n )\n\n observer.observe(sentinel)\n return () => observer.disconnect()\n }, [hasMore, isLoading, loadMore, threshold])\n\n // Update loadingRef when isLoading changes\n useEffect(() => {\n if (!isLoading) loadingRef.current = false\n }, [isLoading])\n\n // Scroll position tracking for scroll-to-top button\n useEffect(() => {\n const container = containerRef.current\n if (!container) return\n\n const handler = () => {\n setShowScrollTop(container.scrollTop > 400)\n }\n container.addEventListener('scroll', handler, { passive: true })\n return () => container.removeEventListener('scroll', handler)\n }, [])\n\n const scrollToTop = useCallback(() => {\n containerRef.current?.scrollTo({ top: 0, behavior: prefersReducedMotion ? 'instant' : 'smooth' })\n }, [prefersReducedMotion])\n\n // Virtualization\n const [scrollTop, setScrollTop] = useState(0)\n const containerHeight = useRef(0)\n\n useEffect(() => {\n if (!itemHeight) return\n const container = containerRef.current\n if (!container) return\n\n containerHeight.current = container.clientHeight\n const handler = () => {\n setScrollTop(container.scrollTop)\n containerHeight.current = container.clientHeight\n }\n container.addEventListener('scroll', handler, { passive: true })\n return () => container.removeEventListener('scroll', handler)\n }, [itemHeight])\n\n const virtualizedContent = useMemo(() => {\n if (!itemHeight) return null\n\n const visibleHeight = containerHeight.current || 600\n const buffer = 5\n const startIdx = Math.max(0, Math.floor(scrollTop / itemHeight) - buffer)\n const endIdx = Math.min(\n items.length,\n Math.ceil((scrollTop + visibleHeight) / itemHeight) + buffer,\n )\n\n const totalHeight = items.length * itemHeight\n const offsetTop = startIdx * itemHeight\n\n return {\n totalHeight,\n offsetTop,\n visibleItems: items.slice(startIdx, endIdx),\n startIdx,\n }\n }, [items, itemHeight, scrollTop])\n\n // Empty state\n if (items.length === 0 && !isLoading && !hasMore) {\n return (\n <div className={cn('flex items-center justify-center min-h-[200px]', className)}>\n {emptyState ?? (\n <div className=\"text-center py-12\">\n <p className=\"text-sm text-[hsl(var(--text-tertiary))]\">No items to display.</p>\n </div>\n )}\n </div>\n )\n }\n\n return (\n <div\n ref={containerRef}\n className={cn('relative overflow-y-auto', className)}\n >\n {/* Virtualized rendering */}\n {virtualizedContent ? (\n <div style={{ height: virtualizedContent.totalHeight, position: 'relative' }}>\n <div style={{ position: 'absolute', top: virtualizedContent.offsetTop, left: 0, right: 0 }}>\n {virtualizedContent.visibleItems.map((item, i) => (\n <div key={virtualizedContent.startIdx + i} style={{ height: itemHeight }}>\n {renderItem(item, virtualizedContent.startIdx + i)}\n </div>\n ))}\n </div>\n </div>\n ) : (\n /* Non-virtualized rendering */\n items.map((item, index) => (\n <div key={index}>\n {renderItem(item, index)}\n </div>\n ))\n )}\n\n {/* Loading indicator */}\n {isLoading && (\n <div className=\"flex items-center justify-center py-6 gap-2\">\n <Loader2 className=\"h-5 w-5 text-[hsl(var(--brand-primary))] animate-spin\" />\n <span className=\"text-sm text-[hsl(var(--text-tertiary))]\">Loading more...</span>\n </div>\n )}\n\n {/* Skeleton placeholders while loading with no items yet */}\n {isLoading && items.length === 0 && (\n <div className=\"space-y-3 p-4\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"skeleton-shimmer h-16 rounded-xl\" />\n ))}\n </div>\n )}\n\n {/* No more items */}\n {!hasMore && items.length > 0 && (\n <div className=\"py-4 text-center\">\n <span className=\"text-[11px] text-[hsl(var(--text-tertiary))]\">\n All {items.length} item{items.length !== 1 ? 's' : ''} loaded\n </span>\n </div>\n )}\n\n {/* Sentinel for IntersectionObserver */}\n <div ref={sentinelRef} className=\"h-px w-full\" aria-hidden=\"true\" />\n\n {/* Scroll to top button */}\n <AnimatePresence>\n {showScrollTop && (\n <motion.button\n initial={prefersReducedMotion ? undefined : { opacity: 0, scale: 0.8 }}\n animate={prefersReducedMotion ? undefined : { opacity: 1, scale: 1 }}\n exit={prefersReducedMotion ? undefined : { opacity: 0, scale: 0.8 }}\n transition={{ duration: 0.15 }}\n onClick={scrollToTop}\n className={cn(\n 'sticky bottom-4 left-1/2 -translate-x-1/2 z-10',\n 'inline-flex items-center gap-1.5 rounded-full',\n 'px-3 py-2 text-[11px] font-medium',\n 'bg-[hsl(var(--bg-elevated))] border border-[hsl(var(--border-default))]',\n 'text-[hsl(var(--text-secondary))] shadow-lg',\n 'hover:bg-[hsl(var(--bg-overlay))] hover:text-[hsl(var(--text-primary))] transition-colors',\n 'cursor-pointer',\n )}\n >\n <ArrowUp className=\"h-3.5 w-3.5\" />\n Back to top\n </motion.button>\n )}\n </AnimatePresence>\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useState, useEffect, useCallback, useRef, useMemo } from 'react'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { Copy, Check, Pipette } from 'lucide-react'\nimport { cn } from '../utils'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Props for the ColorInput component. */\nexport interface ColorInputProps {\n /** Current color value as hex string (e.g. \"#ff0000\"). */\n value: string\n /** Called when the color changes. */\n onChange: (color: string) => void\n /** Optional label. */\n label?: string\n /** Preset color swatches. */\n presets?: string[]\n /** Show alpha/opacity slider. */\n showAlpha?: boolean\n /** Display format for the text input. Default \"hex\". */\n format?: 'hex' | 'rgb' | 'hsl'\n /** Additional class name. */\n className?: string\n}\n\n// ---------------------------------------------------------------------------\n// Color conversion helpers\n// ---------------------------------------------------------------------------\n\nfunction hexToRgb(hex: string): { r: number; g: number; b: number } {\n const clean = hex.replace('#', '')\n const full = clean.length === 3\n ? clean.split('').map(c => c + c).join('')\n : clean\n const num = parseInt(full, 16)\n return { r: (num >> 16) & 255, g: (num >> 8) & 255, b: num & 255 }\n}\n\nfunction rgbToHex(r: number, g: number, b: number): string {\n return '#' + [r, g, b].map(c => Math.round(c).toString(16).padStart(2, '0')).join('')\n}\n\nfunction rgbToHsl(r: number, g: number, b: number): { h: number; s: number; l: number } {\n const rn = r / 255, gn = g / 255, bn = b / 255\n const max = Math.max(rn, gn, bn), min = Math.min(rn, gn, bn)\n const l = (max + min) / 2\n if (max === min) return { h: 0, s: 0, l }\n const d = max - min\n const s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n let h = 0\n if (max === rn) h = ((gn - bn) / d + (gn < bn ? 6 : 0)) / 6\n else if (max === gn) h = ((bn - rn) / d + 2) / 6\n else h = ((rn - gn) / d + 4) / 6\n return { h, s, l }\n}\n\nfunction hslToRgb(h: number, s: number, l: number): { r: number; g: number; b: number } {\n if (s === 0) {\n const v = Math.round(l * 255)\n return { r: v, g: v, b: v }\n }\n const hue2rgb = (p: number, q: number, t: number) => {\n const tt = t < 0 ? t + 1 : t > 1 ? t - 1 : t\n if (tt < 1 / 6) return p + (q - p) * 6 * tt\n if (tt < 1 / 2) return q\n if (tt < 2 / 3) return p + (q - p) * (2 / 3 - tt) * 6\n return p\n }\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s\n const p = 2 * l - q\n return {\n r: Math.round(hue2rgb(p, q, h + 1 / 3) * 255),\n g: Math.round(hue2rgb(p, q, h) * 255),\n b: Math.round(hue2rgb(p, q, h - 1 / 3) * 255),\n }\n}\n\nfunction formatColor(hex: string, fmt: 'hex' | 'rgb' | 'hsl'): string {\n if (fmt === 'hex') return hex\n const { r, g, b } = hexToRgb(hex)\n if (fmt === 'rgb') return `rgb(${r}, ${g}, ${b})`\n const { h, s, l } = rgbToHsl(r, g, b)\n return `hsl(${Math.round(h * 360)}, ${Math.round(s * 100)}%, ${Math.round(l * 100)}%)`\n}\n\nconst RECENT_COLORS_KEY = 'ui-kit-recent-colors'\nconst MAX_RECENT = 8\n\n// ---------------------------------------------------------------------------\n// ColorInput\n// ---------------------------------------------------------------------------\n\n/**\n * @description A compact color picker input with swatch preview, expandable picker panel\n * featuring hue/saturation area, lightness slider, optional alpha slider, preset swatches,\n * format switching (hex/rgb/hsl), clipboard copy, and recent color history.\n */\nexport function ColorInput({\n value,\n onChange,\n label,\n presets,\n showAlpha = false,\n format = 'hex',\n className,\n}: ColorInputProps): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n const [open, setOpen] = useState(false)\n const [copied, setCopied] = useState(false)\n const [textInput, setTextInput] = useState('')\n const [alpha, setAlpha] = useState(1)\n const panelRef = useRef<HTMLDivElement>(null)\n const satAreaRef = useRef<HTMLDivElement>(null)\n\n // Recent colors\n const [recentColors, setRecentColors] = useState<string[]>(() => {\n if (typeof window === 'undefined') return []\n try {\n return JSON.parse(localStorage.getItem(RECENT_COLORS_KEY) ?? '[]') as string[]\n } catch { return [] }\n })\n\n const addRecent = useCallback((color: string) => {\n setRecentColors(prev => {\n const updated = [color, ...prev.filter(c => c !== color)].slice(0, MAX_RECENT)\n try { localStorage.setItem(RECENT_COLORS_KEY, JSON.stringify(updated)) } catch { /* noop */ }\n return updated\n })\n }, [])\n\n // HSL from current value\n const { r, g, b } = useMemo(() => hexToRgb(value), [value])\n const hsl = useMemo(() => rgbToHsl(r, g, b), [r, g, b])\n\n // Sync text input\n useEffect(() => {\n setTextInput(formatColor(value, format))\n }, [value, format])\n\n // Close on click outside\n useEffect(() => {\n if (!open) return\n const handler = (e: MouseEvent) => {\n if (panelRef.current && !panelRef.current.contains(e.target as Node)) {\n setOpen(false)\n addRecent(value)\n }\n }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [open, value, addRecent])\n\n // Saturation/brightness area interaction\n const handleSatAreaPointer = useCallback(\n (e: React.PointerEvent | PointerEvent) => {\n if (!satAreaRef.current) return\n const rect = satAreaRef.current.getBoundingClientRect()\n const x = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width))\n const y = Math.max(0, Math.min(1, (e.clientY - rect.top) / rect.height))\n // x = saturation, y = 1-lightness (top=light, bottom=dark)\n const s = x\n const l = 1 - y\n const adjustedL = 0.05 + l * 0.9 // Keep within visible range\n const rgb = hslToRgb(hsl.h, s, adjustedL)\n onChange(rgbToHex(rgb.r, rgb.g, rgb.b))\n },\n [hsl.h, onChange],\n )\n\n const handleSatAreaDown = useCallback(\n (e: React.PointerEvent) => {\n e.preventDefault()\n handleSatAreaPointer(e)\n const move = (ev: PointerEvent) => handleSatAreaPointer(ev)\n const up = () => {\n document.removeEventListener('pointermove', move)\n document.removeEventListener('pointerup', up)\n }\n document.addEventListener('pointermove', move)\n document.addEventListener('pointerup', up)\n },\n [handleSatAreaPointer],\n )\n\n // Hue slider\n const handleHueChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const h = Number(e.target.value) / 360\n const rgb = hslToRgb(h, hsl.s || 0.5, hsl.l || 0.5)\n onChange(rgbToHex(rgb.r, rgb.g, rgb.b))\n },\n [hsl.s, hsl.l, onChange],\n )\n\n // Text input commit\n const handleTextCommit = useCallback(() => {\n const v = textInput.trim()\n // Try hex\n if (/^#?[0-9a-f]{3,6}$/i.test(v)) {\n const hex = v.startsWith('#') ? v : '#' + v\n onChange(hex)\n return\n }\n // Try rgb()\n const rgbMatch = v.match(/rgb\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/)\n if (rgbMatch) {\n onChange(rgbToHex(Number(rgbMatch[1]), Number(rgbMatch[2]), Number(rgbMatch[3])))\n return\n }\n // Try hsl()\n const hslMatch = v.match(/hsl\\(\\s*(\\d+)\\s*,\\s*(\\d+)%?\\s*,\\s*(\\d+)%?\\s*\\)/)\n if (hslMatch) {\n const rgb = hslToRgb(Number(hslMatch[1]) / 360, Number(hslMatch[2]) / 100, Number(hslMatch[3]) / 100)\n onChange(rgbToHex(rgb.r, rgb.g, rgb.b))\n return\n }\n // Revert\n setTextInput(formatColor(value, format))\n }, [textInput, value, format, onChange])\n\n const handleCopy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(formatColor(value, format))\n setCopied(true)\n setTimeout(() => setCopied(false), 1500)\n } catch { /* noop */ }\n }, [value, format])\n\n // Position for sat/brightness marker\n const markerX = hsl.s * 100\n const markerY = (1 - (hsl.l - 0.05) / 0.9) * 100\n\n return (\n <div ref={panelRef} className={cn('relative inline-block', className)}>\n {/* Label */}\n {label && (\n <label className=\"block text-xs font-medium text-[hsl(var(--text-secondary))] mb-1.5\">\n {label}\n </label>\n )}\n\n {/* Compact input */}\n <button\n onClick={() => setOpen(o => !o)}\n className={cn(\n 'inline-flex items-center gap-2 rounded-lg border border-[hsl(var(--border-subtle))]',\n 'bg-[hsl(var(--bg-surface))] px-3 py-2 text-sm',\n 'hover:border-[hsl(var(--border-default))] transition-colors',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[hsl(var(--brand-primary))]',\n )}\n >\n <span\n className=\"h-5 w-5 rounded-md border border-[hsl(var(--border-subtle))]\"\n style={{ backgroundColor: value }}\n />\n <span className=\"font-mono text-xs text-[hsl(var(--text-primary))]\">\n {formatColor(value, format)}\n </span>\n </button>\n\n {/* Expanded picker panel */}\n <AnimatePresence>\n {open && (\n <motion.div\n initial={prefersReducedMotion ? undefined : { opacity: 0, scale: 0.96, y: -4 }}\n animate={prefersReducedMotion ? undefined : { opacity: 1, scale: 1, y: 0 }}\n exit={prefersReducedMotion ? undefined : { opacity: 0, scale: 0.96, y: -4 }}\n transition={prefersReducedMotion ? { duration: 0 } : { duration: 0.15 }}\n className={cn(\n 'absolute z-50 mt-2 w-64 rounded-xl overflow-hidden',\n 'border border-[hsl(var(--border-default))]',\n 'bg-[hsl(var(--bg-elevated))] shadow-xl',\n 'p-3',\n )}\n >\n {/* Saturation/Brightness area */}\n <div\n ref={satAreaRef}\n onPointerDown={handleSatAreaDown}\n className=\"relative h-36 w-full rounded-lg cursor-crosshair overflow-hidden mb-3\"\n style={{\n background: `linear-gradient(to top, #000, transparent),\n linear-gradient(to right, #fff, hsl(${Math.round(hsl.h * 360)}, 100%, 50%))`,\n }}\n >\n {/* Marker */}\n <div\n className=\"absolute w-4 h-4 rounded-full border-2 border-white shadow-md -translate-x-1/2 -translate-y-1/2 pointer-events-none\"\n style={{\n left: `${markerX}%`,\n top: `${Math.max(0, Math.min(100, markerY))}%`,\n backgroundColor: value,\n }}\n />\n </div>\n\n {/* Hue slider */}\n <div className=\"mb-3\">\n <input\n type=\"range\"\n min={0}\n max={360}\n value={Math.round(hsl.h * 360)}\n onChange={handleHueChange}\n className=\"w-full h-3 rounded-full appearance-none cursor-pointer\"\n style={{\n background: 'linear-gradient(to right, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00)',\n }}\n />\n </div>\n\n {/* Alpha slider */}\n {showAlpha && (\n <div className=\"mb-3\">\n <input\n type=\"range\"\n min={0}\n max={100}\n value={Math.round(alpha * 100)}\n onChange={e => setAlpha(Number(e.target.value) / 100)}\n className=\"w-full h-3 rounded-full appearance-none cursor-pointer\"\n style={{\n background: `linear-gradient(to right, transparent, ${value})`,\n }}\n />\n </div>\n )}\n\n {/* Text input + copy */}\n <div className=\"flex items-center gap-2 mb-3\">\n <input\n type=\"text\"\n value={textInput}\n onChange={e => setTextInput(e.target.value)}\n onBlur={handleTextCommit}\n onKeyDown={e => { if (e.key === 'Enter') handleTextCommit() }}\n className={cn(\n 'flex-1 rounded-md border border-[hsl(var(--border-subtle))]',\n 'bg-[hsl(var(--bg-surface))] px-2 py-1 text-xs font-mono',\n 'text-[hsl(var(--text-primary))] outline-none',\n 'focus:border-[hsl(var(--brand-primary))] transition-colors',\n )}\n />\n <button\n onClick={handleCopy}\n className={cn(\n 'p-1.5 rounded-md transition-colors',\n 'text-[hsl(var(--text-tertiary))] hover:text-[hsl(var(--text-primary))]',\n 'hover:bg-[hsl(var(--bg-surface))]',\n )}\n title=\"Copy color\"\n >\n {copied ? <Check className=\"h-3.5 w-3.5 text-[hsl(var(--status-ok))]\" /> : <Copy className=\"h-3.5 w-3.5\" />}\n </button>\n </div>\n\n {/* Presets */}\n {presets && presets.length > 0 && (\n <div className=\"mb-2\">\n <span className=\"text-[10px] font-semibold uppercase tracking-wider text-[hsl(var(--text-tertiary))] mb-1.5 block\">\n Presets\n </span>\n <div className=\"flex flex-wrap gap-1.5\">\n {presets.map(color => (\n <button\n key={color}\n onClick={() => { onChange(color); addRecent(color) }}\n className={cn(\n 'h-6 w-6 rounded-md border transition-all',\n value === color\n ? 'border-[hsl(var(--brand-primary))] ring-2 ring-[hsl(var(--brand-primary)/0.3)] scale-110'\n : 'border-[hsl(var(--border-subtle))] hover:scale-110',\n )}\n style={{ backgroundColor: color }}\n title={color}\n />\n ))}\n </div>\n </div>\n )}\n\n {/* Recent colors */}\n {recentColors.length > 0 && (\n <div>\n <span className=\"text-[10px] font-semibold uppercase tracking-wider text-[hsl(var(--text-tertiary))] mb-1.5 block\">\n Recent\n </span>\n <div className=\"flex flex-wrap gap-1.5\">\n {recentColors.map(color => (\n <button\n key={color}\n onClick={() => onChange(color)}\n className={cn(\n 'h-6 w-6 rounded-md border border-[hsl(var(--border-subtle))]',\n 'hover:scale-110 transition-transform',\n )}\n style={{ backgroundColor: color }}\n title={color}\n />\n ))}\n </div>\n </div>\n )}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useState, useCallback, useEffect, useRef, useMemo } from 'react'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { Check, ChevronRight, ChevronLeft } from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '../utils'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Definition of a single wizard step. */\nexport interface WizardStep {\n /** Unique step identifier. */\n id: string\n /** Step title displayed in the step indicator. */\n title: string\n /** Optional description below the title. */\n description?: string\n /** Optional icon for the step indicator. */\n icon?: LucideIcon\n /** Step content to render. */\n content: React.ReactNode\n /** Validation function called before advancing. Return true to allow, false to block. */\n validate?: () => boolean | Promise<boolean>\n}\n\n/** Props for the StepWizard component. */\nexport interface StepWizardProps {\n /** Array of steps in order. */\n steps: WizardStep[]\n /** Called when the final step is completed. */\n onComplete: () => void\n /** Called whenever the active step changes. */\n onStepChange?: (step: number) => void\n /** Step indicator layout. Default \"horizontal\". */\n orientation?: 'horizontal' | 'vertical'\n /** Allow skipping forward to any uncompleted step. Default false. */\n allowSkip?: boolean\n /** Show a summary/completion state after the last step. Default false. */\n showSummary?: boolean\n /** Additional class name for the root container. */\n className?: string\n}\n\nconst SESSION_KEY_PREFIX = 'ui-kit-wizard-'\n\n// ---------------------------------------------------------------------------\n// StepWizard\n// ---------------------------------------------------------------------------\n\n/**\n * @description A multi-step form wizard with animated slide transitions, per-step validation,\n * step indicator bar (horizontal or vertical), keyboard navigation, progress percentage,\n * and auto-save to sessionStorage for resilience to page refresh.\n */\nexport function StepWizard({\n steps,\n onComplete,\n onStepChange,\n orientation = 'horizontal',\n allowSkip = false,\n showSummary = false,\n className,\n}: StepWizardProps): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n const sessionKey = useMemo(() => SESSION_KEY_PREFIX + steps.map(s => s.id).join('-'), [steps])\n\n // Restore state from sessionStorage\n const [currentStep, setCurrentStep] = useState(() => {\n if (typeof window === 'undefined') return 0\n try {\n const saved = sessionStorage.getItem(sessionKey)\n if (saved) {\n const parsed = JSON.parse(saved) as { step: number; completed: number[] }\n return Math.min(parsed.step, steps.length - 1)\n }\n } catch { /* noop */ }\n return 0\n })\n\n const [completed, setCompleted] = useState<Set<number>>(() => {\n if (typeof window === 'undefined') return new Set()\n try {\n const saved = sessionStorage.getItem(sessionKey)\n if (saved) {\n const parsed = JSON.parse(saved) as { step: number; completed: number[] }\n return new Set(parsed.completed)\n }\n } catch { /* noop */ }\n return new Set()\n })\n\n const [isValidating, setIsValidating] = useState(false)\n const [direction, setDirection] = useState(1) // 1=forward, -1=backward\n const [isComplete, setIsComplete] = useState(false)\n const contentRef = useRef<HTMLDivElement>(null)\n\n // Save state to sessionStorage\n useEffect(() => {\n try {\n sessionStorage.setItem(sessionKey, JSON.stringify({\n step: currentStep,\n completed: [...completed],\n }))\n } catch { /* noop */ }\n }, [currentStep, completed, sessionKey])\n\n const totalSteps = steps.length\n const progress = totalSteps === 0 ? 100 : Math.round(((completed.size) / totalSteps) * 100)\n\n const goToStep = useCallback((idx: number) => {\n setDirection(idx > currentStep ? 1 : -1)\n setCurrentStep(idx)\n onStepChange?.(idx)\n }, [currentStep, onStepChange])\n\n const handleNext = useCallback(async () => {\n const step = steps[currentStep]\n if (step?.validate) {\n setIsValidating(true)\n try {\n const valid = await step.validate()\n if (!valid) {\n setIsValidating(false)\n return\n }\n } catch {\n setIsValidating(false)\n return\n }\n setIsValidating(false)\n }\n\n setCompleted(prev => new Set(prev).add(currentStep))\n\n if (currentStep < totalSteps - 1) {\n goToStep(currentStep + 1)\n } else {\n // Final step completed\n if (showSummary) {\n setIsComplete(true)\n }\n onComplete()\n // Clear session storage\n try { sessionStorage.removeItem(sessionKey) } catch { /* noop */ }\n }\n }, [currentStep, steps, totalSteps, goToStep, onComplete, showSummary, sessionKey])\n\n const handleBack = useCallback(() => {\n if (currentStep > 0) {\n goToStep(currentStep - 1)\n }\n }, [currentStep, goToStep])\n\n const handleStepClick = useCallback((idx: number) => {\n // Can click on completed steps or if allowSkip\n if (completed.has(idx) || allowSkip || idx < currentStep) {\n goToStep(idx)\n }\n }, [completed, allowSkip, currentStep, goToStep])\n\n // Keyboard navigation\n useEffect(() => {\n const handler = (e: KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey && !(e.target instanceof HTMLTextAreaElement)) {\n handleNext()\n }\n }\n document.addEventListener('keydown', handler)\n return () => document.removeEventListener('keydown', handler)\n }, [handleNext])\n\n const slideVariants = {\n enter: (dir: number) => ({\n x: prefersReducedMotion ? 0 : dir > 0 ? 40 : -40,\n opacity: prefersReducedMotion ? 1 : 0,\n }),\n center: { x: 0, opacity: 1 },\n exit: (dir: number) => ({\n x: prefersReducedMotion ? 0 : dir > 0 ? -40 : 40,\n opacity: prefersReducedMotion ? 1 : 0,\n }),\n }\n\n const isHorizontal = orientation === 'horizontal'\n\n return (\n <div className={cn('flex flex-col', className)}>\n {/* Step indicator */}\n <div className={cn(\n 'mb-6',\n isHorizontal ? 'flex items-center' : 'flex flex-col gap-1',\n )}>\n {steps.map((step, idx) => {\n const isActive = idx === currentStep\n const isDone = completed.has(idx) || isComplete\n const isClickable = isDone || allowSkip || idx < currentStep\n const Icon = step.icon\n\n return (\n <div\n key={step.id}\n className={cn(\n isHorizontal ? 'flex items-center flex-1' : 'flex items-center gap-3',\n )}\n >\n {/* Step circle + label */}\n <button\n onClick={() => handleStepClick(idx)}\n disabled={!isClickable}\n className={cn(\n 'flex items-center gap-2 group',\n isClickable ? 'cursor-pointer' : 'cursor-default',\n )}\n >\n <div\n className={cn(\n 'flex items-center justify-center rounded-full transition-all',\n 'h-8 w-8 text-xs font-semibold shrink-0',\n isDone\n ? 'bg-[hsl(var(--status-ok))] text-[hsl(var(--text-on-brand))]'\n : isActive\n ? 'bg-[hsl(var(--brand-primary))] text-[hsl(var(--text-on-brand))] ring-4 ring-[hsl(var(--brand-primary)/0.2)]'\n : 'bg-[hsl(var(--bg-overlay))] text-[hsl(var(--text-tertiary))]',\n isClickable && !isActive && !isDone && 'group-hover:bg-[hsl(var(--bg-elevated))]',\n )}\n >\n {isDone ? (\n <Check className=\"h-4 w-4\" />\n ) : Icon ? (\n <Icon className=\"h-4 w-4\" />\n ) : (\n idx + 1\n )}\n </div>\n\n <div className={cn(\n isHorizontal ? 'hidden sm:block' : 'block',\n )}>\n <div className={cn(\n 'text-xs font-medium leading-tight',\n isActive ? 'text-[hsl(var(--text-primary))]' : 'text-[hsl(var(--text-secondary))]',\n )}>\n {step.title}\n </div>\n {step.description && !isHorizontal && (\n <div className=\"text-[10px] text-[hsl(var(--text-tertiary))]\">\n {step.description}\n </div>\n )}\n </div>\n </button>\n\n {/* Connector line */}\n {isHorizontal && idx < totalSteps - 1 && (\n <div className={cn(\n 'flex-1 h-0.5 mx-2 rounded-full transition-colors',\n completed.has(idx) ? 'bg-[hsl(var(--status-ok))]' : 'bg-[hsl(var(--border-subtle))]',\n )} />\n )}\n </div>\n )\n })}\n </div>\n\n {/* Progress bar */}\n <div className=\"w-full h-1 rounded-full bg-[hsl(var(--bg-overlay))] mb-4 overflow-hidden\">\n <motion.div\n className=\"h-full rounded-full bg-[hsl(var(--brand-primary))]\"\n initial={{ width: 0 }}\n animate={{ width: `${progress}%` }}\n transition={prefersReducedMotion ? { duration: 0 } : { type: 'spring', stiffness: 300, damping: 30 }}\n />\n </div>\n\n {/* Step content */}\n <div ref={contentRef} className=\"relative min-h-[200px]\">\n <AnimatePresence mode=\"wait\" custom={direction}>\n {isComplete && showSummary ? (\n <motion.div\n key=\"summary\"\n custom={1}\n variants={slideVariants}\n initial=\"enter\"\n animate=\"center\"\n exit=\"exit\"\n transition={prefersReducedMotion ? { duration: 0 } : { duration: 0.25 }}\n className=\"flex flex-col items-center justify-center py-12 text-center\"\n >\n <div className=\"flex items-center justify-center w-16 h-16 rounded-full bg-[hsl(var(--status-ok)/0.15)] mb-4\">\n <Check className=\"h-8 w-8 text-[hsl(var(--status-ok))]\" />\n </div>\n <h3 className=\"text-lg font-semibold text-[hsl(var(--text-primary))] mb-1\">\n All steps completed\n </h3>\n <p className=\"text-sm text-[hsl(var(--text-secondary))]\">\n All {totalSteps} steps have been successfully completed.\n </p>\n </motion.div>\n ) : (\n <motion.div\n key={currentStep}\n custom={direction}\n variants={slideVariants}\n initial=\"enter\"\n animate=\"center\"\n exit=\"exit\"\n transition={prefersReducedMotion ? { duration: 0 } : { duration: 0.25 }}\n >\n {steps[currentStep]?.content}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n\n {/* Navigation buttons */}\n {!isComplete && (\n <div className=\"flex items-center justify-between mt-6 pt-4 border-t border-[hsl(var(--border-subtle)/0.5)]\">\n <button\n onClick={handleBack}\n disabled={currentStep === 0}\n className={cn(\n 'inline-flex items-center gap-1.5 px-4 py-2 rounded-lg text-sm font-medium transition-colors',\n 'border border-[hsl(var(--border-default))]',\n 'text-[hsl(var(--text-primary))]',\n 'hover:bg-[hsl(var(--bg-overlay))]',\n 'disabled:opacity-40 disabled:pointer-events-none',\n )}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n Back\n </button>\n\n <span className=\"text-[11px] text-[hsl(var(--text-tertiary))] tabular-nums\">\n Step {currentStep + 1} of {totalSteps}\n </span>\n\n <button\n onClick={handleNext}\n disabled={isValidating}\n className={cn(\n 'inline-flex items-center gap-1.5 px-4 py-2 rounded-lg text-sm font-medium transition-colors',\n 'bg-[hsl(var(--brand-primary))] text-[hsl(var(--text-on-brand))]',\n 'hover:bg-[hsl(var(--brand-primary))]/90',\n 'disabled:opacity-70 disabled:cursor-not-allowed',\n )}\n >\n {isValidating ? (\n <>\n <div className=\"h-4 w-4 rounded-full border-2 border-[hsl(var(--text-on-brand))] border-t-transparent animate-spin\" />\n Validating...\n </>\n ) : currentStep === totalSteps - 1 ? (\n <>\n Complete\n <Check className=\"h-4 w-4\" />\n </>\n ) : (\n <>\n Next\n <ChevronRight className=\"h-4 w-4\" />\n </>\n )}\n </button>\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useState, useCallback, useMemo, useRef, useEffect } from 'react'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { Copy, Check, ChevronDown, ChevronUp } from 'lucide-react'\nimport { cn } from '../utils'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Props for the CopyBlock component. */\nexport interface CopyBlockProps {\n /** The text content to display and copy. */\n content: string\n /** Language hint for styling/accessibility (e.g. \"json\", \"bash\", \"sql\"). */\n language?: string\n /** Show line numbers in the gutter. Default false. */\n showLineNumbers?: boolean\n /** Max height in pixels before collapsing with a \"Show more\" toggle. */\n maxHeight?: number\n /** Optional label displayed above the code block. */\n label?: string\n /** Additional class name for the root container. */\n className?: string\n}\n\n// ---------------------------------------------------------------------------\n// CopyBlock\n// ---------------------------------------------------------------------------\n\n/**\n * @description A monospace code/text display block with one-click copy, animated feedback,\n * optional line numbers, collapsible overflow (show more/less), and dark-mode optimized styling.\n * Designed for displaying code snippets, CLI commands, config blocks, and JSON payloads.\n */\nexport function CopyBlock({\n content,\n language,\n showLineNumbers = false,\n maxHeight,\n label,\n className,\n}: CopyBlockProps): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n const [copied, setCopied] = useState(false)\n const [isCollapsed, setIsCollapsed] = useState(true)\n const [needsCollapse, setNeedsCollapse] = useState(false)\n const contentRef = useRef<HTMLPreElement>(null)\n\n // Check if content exceeds maxHeight\n useEffect(() => {\n if (!maxHeight || !contentRef.current) return\n setNeedsCollapse(contentRef.current.scrollHeight > maxHeight)\n }, [content, maxHeight])\n\n const lines = useMemo(() => content.split('\\n'), [content])\n\n const handleCopy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(content)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n } catch {\n // Fallback for older browsers\n const textarea = document.createElement('textarea')\n textarea.value = content\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 setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n }\n }, [content])\n\n const shouldCollapse = maxHeight && needsCollapse && isCollapsed\n\n return (\n <div\n className={cn(\n 'relative group rounded-xl overflow-hidden',\n 'border border-[hsl(var(--border-subtle))]',\n 'bg-[hsl(var(--bg-base))]',\n className,\n )}\n >\n {/* Header bar */}\n {(label || language) && (\n <div className=\"flex items-center justify-between px-4 py-2 border-b border-[hsl(var(--border-subtle)/0.5)] bg-[hsl(var(--bg-surface)/0.3)]\">\n <div className=\"flex items-center gap-2\">\n {label && (\n <span className=\"text-[11px] font-medium text-[hsl(var(--text-secondary))]\">\n {label}\n </span>\n )}\n {language && (\n <span className=\"inline-flex items-center rounded-md bg-[hsl(var(--bg-overlay)/0.5)] px-1.5 py-0.5 text-[10px] font-mono text-[hsl(var(--text-tertiary))]\">\n {language}\n </span>\n )}\n </div>\n\n {/* Copy button (always visible in header) */}\n <button\n onClick={handleCopy}\n className={cn(\n 'inline-flex items-center gap-1 rounded-md px-2 py-1 text-[11px] font-medium transition-all',\n copied\n ? 'text-[hsl(var(--status-ok))] bg-[hsl(var(--status-ok)/0.1)]'\n : 'text-[hsl(var(--text-tertiary))] hover:text-[hsl(var(--text-primary))] hover:bg-[hsl(var(--bg-elevated))]',\n )}\n >\n <AnimatePresence mode=\"wait\">\n {copied ? (\n <motion.span\n key=\"check\"\n initial={prefersReducedMotion ? undefined : { scale: 0.5, opacity: 0 }}\n animate={prefersReducedMotion ? undefined : { scale: 1, opacity: 1 }}\n exit={prefersReducedMotion ? undefined : { scale: 0.5, opacity: 0 }}\n transition={{ duration: 0.15 }}\n className=\"inline-flex items-center gap-1\"\n >\n <Check className=\"h-3.5 w-3.5\" />\n Copied!\n </motion.span>\n ) : (\n <motion.span\n key=\"copy\"\n initial={prefersReducedMotion ? undefined : { scale: 0.5, opacity: 0 }}\n animate={prefersReducedMotion ? undefined : { scale: 1, opacity: 1 }}\n exit={prefersReducedMotion ? undefined : { scale: 0.5, opacity: 0 }}\n transition={{ duration: 0.15 }}\n className=\"inline-flex items-center gap-1\"\n >\n <Copy className=\"h-3.5 w-3.5\" />\n Copy\n </motion.span>\n )}\n </AnimatePresence>\n </button>\n </div>\n )}\n\n {/* Copy button for headerless blocks */}\n {!label && !language && (\n <button\n onClick={handleCopy}\n className={cn(\n 'absolute top-2 right-2 z-10 rounded-md p-1.5 transition-all',\n 'opacity-0 group-hover:opacity-100',\n copied\n ? 'text-[hsl(var(--status-ok))] bg-[hsl(var(--status-ok)/0.1)]'\n : 'text-[hsl(var(--text-tertiary))] hover:text-[hsl(var(--text-primary))] bg-[hsl(var(--bg-elevated)/0.8)] hover:bg-[hsl(var(--bg-elevated))]',\n )}\n title={copied ? 'Copied!' : 'Copy to clipboard'}\n >\n {copied ? <Check className=\"h-4 w-4\" /> : <Copy className=\"h-4 w-4\" />}\n </button>\n )}\n\n {/* Content area */}\n <div\n className=\"overflow-x-auto\"\n style={shouldCollapse ? { maxHeight, overflow: 'hidden' } : undefined}\n >\n <pre\n ref={contentRef}\n className={cn(\n 'p-4 text-[13px] leading-relaxed font-mono',\n 'text-[hsl(var(--text-primary))]',\n 'whitespace-pre overflow-x-auto',\n )}\n >\n {showLineNumbers ? (\n <table className=\"border-collapse w-full\">\n <tbody>\n {lines.map((line, i) => (\n <tr key={i} className=\"hover:bg-[hsl(var(--bg-surface)/0.3)]\">\n <td className=\"select-none text-right pr-4 text-[hsl(var(--text-disabled))] text-[11px] tabular-nums w-8 align-top\">\n {i + 1}\n </td>\n <td className=\"whitespace-pre\">{line}</td>\n </tr>\n ))}\n </tbody>\n </table>\n ) : (\n content\n )}\n </pre>\n </div>\n\n {/* Collapse gradient + toggle */}\n {maxHeight && needsCollapse && (\n <>\n {isCollapsed && (\n <div className=\"absolute bottom-0 left-0 right-0 h-16 bg-gradient-to-t from-[hsl(var(--bg-base))] to-transparent pointer-events-none\" />\n )}\n <div className=\"relative border-t border-[hsl(var(--border-subtle)/0.3)]\">\n <button\n onClick={() => setIsCollapsed(c => !c)}\n className={cn(\n 'w-full flex items-center justify-center gap-1.5 py-2 text-[11px] font-medium',\n 'text-[hsl(var(--text-secondary))] hover:text-[hsl(var(--text-primary))]',\n 'hover:bg-[hsl(var(--bg-surface)/0.3)] transition-colors',\n )}\n >\n {isCollapsed ? (\n <>\n Show more ({lines.length} lines)\n <ChevronDown className=\"h-3.5 w-3.5\" />\n </>\n ) : (\n <>\n Show less\n <ChevronUp className=\"h-3.5 w-3.5\" />\n </>\n )}\n </button>\n </div>\n </>\n )}\n </div>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/components/button.tsx","../src/components/badge.tsx","../src/components/filter-pill.tsx","../src/components/empty-state.tsx","../src/components/skeleton.tsx","../src/components/truncated-text.tsx","../src/components/confirm-dialog.tsx","../src/components/animated-counter.tsx","../src/components/success-checkmark.tsx","../src/components/status-badge.tsx","../src/components/status-pulse.tsx","../src/components/toast.tsx","../src/components/data-table.tsx","../src/components/tabs.tsx","../src/components/dropdown-menu.tsx","../src/components/sheet.tsx","../src/components/progress.tsx","../src/components/avatar.tsx","../src/components/popover.tsx","../src/components/slider.tsx","../src/components/card.tsx","../src/components/radio-group.tsx","../src/components/tooltip.tsx","../src/components/sparkline.tsx","../src/components/metric-card.tsx","../src/components/utilization-bar.tsx","../src/components/threshold-gauge.tsx","../src/components/severity-timeline.tsx","../src/components/log-viewer.tsx","../src/components/port-status-grid.tsx","../src/components/time-range-selector.tsx","../src/components/pipeline-stage.tsx","../src/components/uptime-tracker.tsx","../src/components/streaming-text.tsx","../src/components/typing-indicator.tsx","../src/components/confidence-bar.tsx","../src/components/live-feed.tsx","../src/components/diff-viewer.tsx","../src/components/heatmap-calendar.tsx","../src/components/notification-stack.tsx","../src/components/kanban-column.tsx","../src/components/smart-table.tsx","../src/components/realtime-value.tsx","../src/components/command-bar.tsx","../src/components/sortable-list.tsx","../src/components/infinite-scroll.tsx","../src/components/color-input.tsx","../src/components/step-wizard.tsx","../src/components/copy-block.tsx"],"names":["jsxs","jsx","Loader2","useRef","useState","useEffect","useReducedMotion","motion","SonnerToaster","AnimatePresence","sizeClasses","useCallback","X","contentVariants","variantClasses","forwardRef","Tooltip","TooltipPrimitive","Search","statusBorder","Check","Copy","getBarColor","ChevronUp","result","i","j","useMemo","weeks","AlertTriangle","TrendingUp","easeOutCubic","SIZE_CLASSES","ArrowDown","GripVertical","ArrowUp","p","q","slideVariants","Fragment","ChevronRight","ChevronDown"],"mappings":"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","file":"index.js","sourcesContent":["'use client'\n\nimport type React from 'react'\nimport { forwardRef, type ButtonHTMLAttributes } from 'react'\nimport { Loader2 } from 'lucide-react'\nimport { cn } from '../utils'\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'danger' | 'outline' | 'ghost'\nexport type ButtonSize = 'sm' | 'md' | 'lg' | 'icon'\n\nconst variantClasses: Record<ButtonVariant, string> = {\n primary:\n 'bg-[hsl(var(--brand-primary))] text-[hsl(var(--text-on-brand))] hover:bg-[hsl(var(--brand-primary)/0.85)] active:bg-[hsl(var(--brand-primary)/0.75)]',\n secondary:\n 'bg-[hsl(var(--bg-elevated))] text-[hsl(var(--text-primary))] border border-[hsl(var(--border-default))] hover:bg-[hsl(var(--bg-overlay))] active:bg-[hsl(var(--border-subtle))]',\n danger:\n 'bg-[hsl(var(--status-critical))] text-[hsl(var(--text-on-brand))] hover:bg-[hsl(var(--status-critical)/0.85)] active:bg-[hsl(var(--status-critical)/0.75)]',\n outline:\n 'bg-transparent text-[hsl(var(--text-primary))] border border-[hsl(var(--border-default))] hover:bg-[hsl(var(--bg-elevated))] active:bg-[hsl(var(--bg-overlay))]',\n ghost:\n 'bg-transparent text-[hsl(var(--text-secondary))] hover:bg-[hsl(var(--bg-elevated))] hover:text-[hsl(var(--text-primary))] active:bg-[hsl(var(--bg-overlay))]',\n}\n\nconst sizeClasses: Record<ButtonSize, string> = {\n sm: 'h-8 px-3 text-xs gap-1.5 rounded-lg',\n md: 'h-9 px-4 text-sm gap-2 rounded-lg',\n lg: 'h-11 px-6 text-sm gap-2 rounded-xl',\n icon: 'h-9 w-9 rounded-lg',\n}\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Visual variant of the button. */\n variant?: ButtonVariant\n /** Size preset. */\n size?: ButtonSize\n /** Show a loading spinner and disable interaction. */\n loading?: boolean\n}\n\n/**\n * @description A themed button with variant, size, and loading support.\n * Uses CSS custom property tokens for dark/light mode compatibility.\n */\nconst Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>> = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ variant = 'primary', size = 'md', loading, disabled, className, children, ...props }, ref): React.JSX.Element => (\n <button\n ref={ref}\n disabled={disabled || loading}\n className={cn(\n 'inline-flex items-center justify-center font-medium transition-colors duration-150',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[hsl(var(--brand-primary))] focus-visible:ring-offset-2 focus-visible:ring-offset-[hsl(var(--bg-base))]',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'cursor-pointer select-none',\n variantClasses[variant],\n sizeClasses[size],\n className,\n )}\n {...props}\n >\n {loading && <Loader2 className=\"h-4 w-4 animate-spin\" />}\n {children}\n </button>\n ),\n)\n\nButton.displayName = 'Button'\n\nexport { Button }\n","'use client'\n\nimport type React from 'react'\nimport { cn } from '../utils'\nimport type { LucideIcon } from 'lucide-react'\n\n// ── Theme-safe color presets ────────────────────────────────────────────────\n// All colors use CSS custom properties for dark/light mode compliance.\n\nexport type BadgeColor =\n | 'brand' | 'blue' | 'green' | 'yellow' | 'red' | 'orange'\n | 'purple' | 'pink' | 'teal' | 'gray'\n\nconst COLOR_MAP: Record<BadgeColor, string> = {\n brand: 'bg-[hsl(var(--brand-primary))]/10 text-[hsl(var(--brand-primary))]',\n blue: 'bg-[hsl(var(--brand-secondary))]/10 text-[hsl(var(--brand-secondary))]',\n green: 'bg-[hsl(var(--status-ok))]/10 text-[hsl(var(--status-ok))]',\n yellow: 'bg-[hsl(var(--status-warning))]/10 text-[hsl(var(--status-warning))]',\n red: 'bg-[hsl(var(--status-critical))]/10 text-[hsl(var(--status-critical))]',\n orange: 'bg-[hsl(var(--status-warning))]/15 text-[hsl(var(--status-warning))]',\n purple: 'bg-[hsl(270,60%,60%)]/10 text-[hsl(270,60%,65%)]',\n pink: 'bg-[hsl(330,60%,60%)]/10 text-[hsl(330,60%,65%)]',\n teal: 'bg-[hsl(180,60%,40%)]/10 text-[hsl(180,60%,55%)]',\n gray: 'bg-[hsl(var(--bg-overlay))] text-[hsl(var(--text-secondary))]',\n}\n\nexport interface BadgeProps {\n children: React.ReactNode\n /** Color preset for the badge. */\n color?: BadgeColor\n /** Optional icon displayed before the label. */\n icon?: LucideIcon\n /** Size variant. */\n size?: 'xs' | 'sm' | 'md'\n className?: string\n}\n\n/**\n * @description A themed pill badge with color presets and optional icon.\n * Supports xs, sm, and md sizes with dark/light mode via CSS tokens.\n */\nexport function Badge({\n children, color = 'gray', icon: Icon, size = 'sm', className,\n}: BadgeProps): React.JSX.Element {\n return (\n <span className={cn(\n 'inline-flex items-center gap-1 rounded-full font-medium whitespace-nowrap',\n size === 'xs' && 'px-1.5 py-0.5 text-[10px]',\n size === 'sm' && 'px-2 py-0.5 text-xs',\n size === 'md' && 'px-2.5 py-1 text-xs',\n COLOR_MAP[color],\n className,\n )}>\n {Icon && <Icon className={cn(size === 'xs' ? 'size-2.5' : 'size-3')} />}\n {children}\n </span>\n )\n}\n\n// ── Badge variant factory ──────────────────────────────────────────────────\n\nexport interface BadgeVariantConfig<T extends string> {\n /** Map from value to BadgeColor. */\n colorMap: Partial<Record<T, BadgeColor>>\n /** Map from value to display label. Falls back to the value itself. */\n labelMap?: Partial<Record<T, string>>\n /** Default color when value is not found in colorMap. */\n defaultColor?: BadgeColor\n /** Default size for the badge. */\n defaultSize?: 'xs' | 'sm' | 'md'\n}\n\n/**\n * @description Factory function to create domain-specific badge components.\n * Accepts a color map and optional label map, returns a typed Badge component.\n *\n * @example\n * ```tsx\n * const SeverityBadge = createBadgeVariant({\n * colorMap: { critical: 'red', warning: 'yellow', info: 'blue' },\n * labelMap: { critical: 'Critical', warning: 'Warning', info: 'Info' },\n * })\n * // Usage: <SeverityBadge value=\"critical\" />\n * ```\n */\nexport function createBadgeVariant<T extends string>(config: BadgeVariantConfig<T>): (props: { value: T; className?: string }) => React.JSX.Element {\n const { colorMap, labelMap, defaultColor = 'gray', defaultSize = 'xs' } = config\n\n return function VariantBadge({ value, className }: { value: T; className?: string }) {\n const color = colorMap[value] ?? defaultColor\n const label = labelMap?.[value] ?? value.replace(/_/g, ' ')\n return (\n <Badge color={color} size={defaultSize} className={className}>\n {label}\n </Badge>\n )\n }\n}\n","'use client'\n\nimport type React from 'react'\nimport { cn } from '../utils'\n\nexport interface FilterPillProps {\n /** Label text for the pill. */\n label: string\n /** Optional count displayed after the label. */\n count?: number\n /** Whether this pill is currently active/selected. */\n active: boolean\n /** Click handler. */\n onClick: () => void\n className?: string\n}\n\n/**\n * @description A rounded pill-style filter toggle with active state and optional count.\n * Uses CSS custom property tokens for dark/light mode compatibility.\n */\nexport function FilterPill({ label, count, active, onClick, className }: FilterPillProps): React.JSX.Element {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n 'rounded-full px-3 py-1 text-xs transition-colors whitespace-nowrap',\n active\n ? 'bg-[hsl(var(--brand-primary))]/10 text-[hsl(var(--brand-primary))] font-medium'\n : 'bg-[hsl(var(--bg-elevated))] text-[hsl(var(--text-secondary))] hover:bg-[hsl(var(--bg-overlay))]',\n className,\n )}\n >\n {label}\n {count != null && (\n <span className={cn(\n 'ml-1.5 tabular-nums',\n active ? 'text-[hsl(var(--brand-primary))]/70' : 'text-[hsl(var(--text-tertiary))]',\n )}>\n {count}\n </span>\n )}\n </button>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { cn } from '../utils'\nimport type { LucideIcon } from 'lucide-react'\n\nexport interface EmptyStateProps {\n /** Icon component displayed in the center. */\n icon: LucideIcon\n /** Title text. */\n title: string\n /** Description text. */\n description: string\n /** Optional action buttons rendered below the description. */\n actions?: React.ReactNode\n className?: string\n}\n\n/**\n * @description A decorative empty state placeholder with icon, title, description, and optional actions.\n * Features a subtle gradient background and glass-morphism styling.\n */\nexport function EmptyState({ icon: Icon, title, description, actions, className }: EmptyStateProps): React.JSX.Element {\n return (\n <div\n className={cn(\n 'relative overflow-hidden flex flex-col items-center justify-center rounded-2xl border border-dashed border-[hsl(var(--border-default))]',\n 'bg-[hsl(var(--bg-surface)/0.6)] backdrop-blur-xl px-6 py-12 text-center',\n className,\n )}\n >\n {/* Decorative gradient background */}\n <div className=\"pointer-events-none absolute inset-0 bg-gradient-to-b from-[hsl(var(--brand-primary)/0.04)] to-transparent\" />\n <div className=\"pointer-events-none absolute inset-0 bg-[radial-gradient(ellipse_at_50%_0%,hsl(var(--brand-primary)/0.06),transparent_70%)]\" />\n\n <div className=\"relative mb-4 flex size-14 items-center justify-center rounded-2xl bg-[hsl(var(--bg-elevated))] border border-[hsl(var(--border-subtle)/0.6)] shadow-[0_1px_3px_hsl(0_0%_0%/0.12)]\">\n <Icon className=\"size-6 text-[hsl(var(--text-disabled))]\" />\n </div>\n <h3 className=\"relative text-heading-3 text-[hsl(var(--text-primary))] mb-1\">{title}</h3>\n <p className=\"relative text-body text-[hsl(var(--text-secondary))] max-w-sm\">{description}</p>\n {actions && <div className=\"relative mt-6 flex gap-3\">{actions}</div>}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { cn } from '../utils'\n\n/**\n * @description A shimmer skeleton loader block. Requires the `skeleton-shimmer` CSS class\n * from theme.css to animate.\n */\nexport function Skeleton({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element {\n return (\n <div\n className={cn('skeleton-shimmer rounded-md', className)}\n {...props}\n />\n )\n}\n\nexport interface SkeletonTextProps {\n /** Number of text lines to render. */\n lines?: number\n className?: string\n}\n\n/**\n * @description A multi-line skeleton text placeholder. The last line renders shorter\n * for a natural paragraph appearance.\n */\nexport function SkeletonText({ lines = 1, className }: SkeletonTextProps): React.JSX.Element {\n return (\n <div className={cn('space-y-2', className)}>\n {Array.from({ length: lines }).map((_, i) => (\n <Skeleton\n key={i}\n className={cn('h-3', i === lines - 1 && lines > 1 ? 'w-4/5' : 'w-full')}\n />\n ))}\n </div>\n )\n}\n\n/**\n * @description A card-shaped skeleton placeholder with header area and content bars.\n */\nexport function SkeletonCard({ className }: { className?: string }): React.JSX.Element {\n return (\n <div className={cn('rounded-lg border border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-surface))] p-4 space-y-3', className)}>\n <div className=\"flex items-center gap-3\">\n <Skeleton className=\"size-8 rounded-md\" />\n <div className=\"flex-1 space-y-1.5\">\n <Skeleton className=\"h-3.5 w-32\" />\n <Skeleton className=\"h-2.5 w-20\" />\n </div>\n <Skeleton className=\"h-5 w-14 rounded-full\" />\n </div>\n <div className=\"flex gap-3\">\n <Skeleton className=\"h-2.5 flex-1\" />\n <Skeleton className=\"h-2.5 flex-1\" />\n <Skeleton className=\"h-2.5 flex-1\" />\n </div>\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useRef, useState, useEffect } from 'react'\nimport * as Tooltip from '@radix-ui/react-tooltip'\nimport { Copy, Check } from 'lucide-react'\n\nexport interface TruncatedTextProps {\n /** The full text to display (truncated if it overflows). */\n text: string\n /** Max width constraint for truncation. */\n maxWidth?: string | number\n className?: string\n}\n\n/**\n * @description A text element that truncates with ellipsis and shows a tooltip with the\n * full text on hover when truncated. Includes a copy-to-clipboard button in the tooltip.\n */\nexport function TruncatedText({ text, maxWidth = '100%', className = '' }: TruncatedTextProps): React.JSX.Element {\n const ref = useRef<HTMLSpanElement>(null)\n const [isTruncated, setIsTruncated] = useState(false)\n const [copied, setCopied] = useState(false)\n\n useEffect(() => {\n const el = ref.current\n if (el) setIsTruncated(el.scrollWidth > el.clientWidth)\n }, [text])\n\n const handleCopy = async (e: React.MouseEvent) => {\n e.stopPropagation()\n await navigator.clipboard.writeText(text)\n setCopied(true)\n setTimeout(() => setCopied(false), 1500)\n }\n\n const inner = (\n <span\n ref={ref}\n className={`block truncate ${className}`}\n style={{ maxWidth }}\n >\n {text}\n </span>\n )\n\n if (!isTruncated) return inner\n\n return (\n <Tooltip.Provider delayDuration={300}>\n <Tooltip.Root>\n <Tooltip.Trigger asChild>{inner}</Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content\n side=\"top\"\n align=\"start\"\n sideOffset={6}\n className=\"z-50 max-w-[400px] rounded-lg border border-[hsl(var(--border-default))]\n bg-[hsl(var(--bg-elevated))] px-3 py-2 shadow-lg\n animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out\n data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\"\n >\n <p className=\"text-small text-[hsl(var(--text-primary))] break-all\">{text}</p>\n <div className=\"mt-1.5 flex justify-end\">\n <button\n onClick={handleCopy}\n className=\"flex items-center gap-1 rounded px-2 py-0.5\n text-[11px] text-[hsl(var(--brand-primary))]\n hover:bg-[hsl(var(--bg-surface))] transition-colors\"\n >\n {copied ? <Check className=\"h-3 w-3\" /> : <Copy className=\"h-3 w-3\" />}\n {copied ? 'Copied' : 'Copy'}\n </button>\n </div>\n <Tooltip.Arrow className=\"fill-[hsl(var(--bg-elevated))]\" />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n </Tooltip.Provider>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport * as AlertDialog from '@radix-ui/react-alert-dialog'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { AlertTriangle, Loader2 } from 'lucide-react'\nimport { cn } from '../utils'\n\nexport interface ConfirmDialogProps {\n /** Whether the dialog is open. */\n open: boolean\n /** Callback to control open state. */\n onOpenChange: (open: boolean) => void\n /** Dialog title. */\n title: string\n /** Dialog description text. */\n description: string\n /** Label for the confirm button. */\n confirmLabel?: string\n /** Label for the cancel button. */\n cancelLabel?: string\n /** Visual variant affecting the icon and confirm button color. */\n variant?: 'danger' | 'warning' | 'default'\n /** Show a loading spinner on the confirm button. */\n loading?: boolean\n /** Callback when confirmed. */\n onConfirm: () => void\n}\n\nconst variantStyles = {\n danger: {\n icon: 'text-[hsl(var(--status-critical))] bg-[hsl(var(--status-critical))]/10',\n button: 'bg-[hsl(var(--status-critical))] hover:bg-[hsl(var(--status-critical))]/90 text-[hsl(var(--text-on-brand))]',\n },\n warning: {\n icon: 'text-[hsl(var(--status-warning))] bg-[hsl(var(--status-warning))]/10',\n button: 'bg-[hsl(var(--status-warning))] hover:bg-[hsl(var(--status-warning))]/90 text-[hsl(var(--text-on-brand))]',\n },\n default: {\n icon: 'text-[hsl(var(--brand-primary))] bg-[hsl(var(--brand-primary))]/10',\n button: 'bg-[hsl(var(--brand-primary))] hover:bg-[hsl(var(--brand-primary))]/90 text-[hsl(var(--text-on-brand))]',\n },\n}\n\n/**\n * @description A confirmation dialog built on Radix AlertDialog with Framer Motion animations.\n * Supports danger, warning, and default variants with loading state.\n */\nexport function ConfirmDialog({\n open,\n onOpenChange,\n title,\n description,\n confirmLabel = 'Confirm',\n cancelLabel = 'Cancel',\n variant = 'danger',\n loading = false,\n onConfirm,\n}: ConfirmDialogProps): React.JSX.Element {\n const styles = variantStyles[variant]\n\n return (\n <AlertDialog.Root open={open} onOpenChange={onOpenChange}>\n <AnimatePresence>\n {open && (\n <AlertDialog.Portal forceMount>\n <AlertDialog.Overlay asChild>\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.15 }}\n className=\"fixed inset-0 z-50 bg-[hsl(var(--bg-base)/0.7)] backdrop-blur-sm\"\n />\n </AlertDialog.Overlay>\n <AlertDialog.Content asChild>\n <motion.div\n initial={{ opacity: 0, scale: 0.95, y: 8 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.95, y: 8 }}\n transition={{ duration: 0.2, ease: [0.16, 1, 0.3, 1] }}\n className={cn(\n 'fixed left-1/2 top-1/2 z-50 -translate-x-1/2 -translate-y-1/2',\n 'w-full max-w-md p-6 rounded-2xl',\n 'border border-[hsl(var(--border-default))]',\n 'bg-[hsl(var(--bg-elevated))] shadow-2xl',\n 'focus:outline-none',\n )}\n >\n <div className=\"flex gap-4\">\n <div className={cn('flex-shrink-0 p-2.5 rounded-xl h-fit', styles.icon)}>\n <AlertTriangle className=\"w-5 h-5\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <AlertDialog.Title className=\"text-base font-semibold text-[hsl(var(--text-primary))]\">\n {title}\n </AlertDialog.Title>\n <AlertDialog.Description className=\"mt-2 text-sm text-[hsl(var(--text-secondary))] leading-relaxed\">\n {description}\n </AlertDialog.Description>\n </div>\n </div>\n\n <div className=\"flex justify-end gap-3 mt-6\">\n <AlertDialog.Cancel\n className={cn(\n 'px-4 py-2 text-sm font-medium rounded-lg',\n 'border border-[hsl(var(--border-default))]',\n 'text-[hsl(var(--text-primary))]',\n 'hover:bg-[hsl(var(--bg-overlay))] transition-colors',\n 'focus:outline-none focus:ring-2 focus:ring-[hsl(var(--brand-primary))]',\n )}\n >\n {cancelLabel}\n </AlertDialog.Cancel>\n <AlertDialog.Action\n onClick={(e) => {\n e.preventDefault()\n onConfirm()\n }}\n disabled={loading}\n className={cn(\n 'px-4 py-2 text-sm font-medium rounded-lg transition-all',\n 'focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-[hsl(var(--bg-elevated))]',\n styles.button,\n loading && 'opacity-70 cursor-not-allowed',\n )}\n >\n {loading ? (\n <span className=\"flex items-center gap-2\">\n <Loader2 className=\"w-4 h-4 animate-spin\" />\n {confirmLabel}\n </span>\n ) : (\n confirmLabel\n )}\n </AlertDialog.Action>\n </div>\n </motion.div>\n </AlertDialog.Content>\n </AlertDialog.Portal>\n )}\n </AnimatePresence>\n </AlertDialog.Root>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useEffect, useRef, useState } from 'react'\nimport { useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\n\nexport interface AnimatedCounterProps {\n /** The target numeric value to animate to. */\n value: number\n /** Animation duration in milliseconds. */\n duration?: number\n className?: string\n /** Custom formatting function for the displayed number. */\n format?: (n: number) => string\n}\n\nfunction easeOutCubic(t: number): number {\n return 1 - Math.pow(1 - t, 3)\n}\n\n/**\n * @description An animated number counter that transitions smoothly between values\n * using requestAnimationFrame. Respects prefers-reduced-motion.\n */\nexport function AnimatedCounter({\n value,\n duration = 400,\n className,\n format,\n}: AnimatedCounterProps): React.JSX.Element {\n const reduced = useReducedMotion()\n const prevRef = useRef(value)\n const rafRef = useRef<number | null>(null)\n const [displayed, setDisplayed] = useState(value)\n const decimalPlacesRef = useRef(\n Number.isInteger(value) ? 0 : (value.toString().split('.')[1]?.length ?? 1)\n )\n\n useEffect(() => {\n const from = prevRef.current\n const to = value\n prevRef.current = value\n decimalPlacesRef.current = Number.isInteger(to) ? 0 : (to.toString().split('.')[1]?.length ?? 1)\n\n if (reduced || from === to) {\n setDisplayed(to)\n return\n }\n\n const start = performance.now()\n\n function tick(now: number) {\n const elapsed = now - start\n const progress = Math.min(elapsed / duration, 1)\n const eased = easeOutCubic(progress)\n const current = from + (to - from) * eased\n\n setDisplayed(current)\n\n if (progress < 1) {\n rafRef.current = requestAnimationFrame(tick)\n } else {\n setDisplayed(to)\n }\n }\n\n rafRef.current = requestAnimationFrame(tick)\n\n return () => {\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current)\n }\n }\n }, [value, duration, reduced])\n\n const formatted = format\n ? format(displayed)\n : decimalPlacesRef.current === 0\n ? Math.round(displayed).toString()\n : displayed.toFixed(decimalPlacesRef.current)\n\n return (\n <span className={cn('tabular-nums', className)}>\n {formatted}\n </span>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { motion, useReducedMotion } from 'framer-motion'\n\nexport interface SuccessCheckmarkProps {\n /** Size of the SVG in pixels. */\n size?: number\n className?: string\n}\n\n/**\n * @description An animated success checkmark SVG with circle and path draw animations.\n * Uses Framer Motion spring physics. Respects prefers-reduced-motion.\n */\nexport function SuccessCheckmark({ size = 20, className }: SuccessCheckmarkProps): React.JSX.Element {\n const reduced = useReducedMotion()\n\n return (\n <motion.svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n className={className}\n initial={reduced ? false : { scale: 0, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n transition={{ type: 'spring', stiffness: 300, damping: 20 }}\n >\n <motion.circle\n cx=\"10\"\n cy=\"10\"\n r=\"9\"\n stroke=\"hsl(var(--status-ok))\"\n strokeWidth=\"1.5\"\n fill=\"none\"\n initial={reduced ? false : { pathLength: 0 }}\n animate={{ pathLength: 1 }}\n transition={{ duration: 0.4, ease: 'easeOut' }}\n />\n <motion.path\n d=\"M6 10l2.5 2.5L14 7.5\"\n stroke=\"hsl(var(--status-ok))\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n fill=\"none\"\n initial={reduced ? false : { pathLength: 0 }}\n animate={{ pathLength: 1 }}\n transition={{ duration: 0.3, delay: 0.2, ease: 'easeOut' }}\n />\n </motion.svg>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { cn } from '../utils'\n\n/** Configuration for a single status entry in a StatusBadge. */\nexport interface StatusConfig {\n /** Display label. */\n label: string\n /** CSS class for the status dot. */\n dot: string\n /** CSS class for the text color. */\n text: string\n /** CSS class for the background color. */\n bg: string\n}\n\n/** A sensible default status map covering common statuses. */\nexport const defaultStatusMap: Record<string, StatusConfig> = {\n ok: { label: 'OK', dot: 'bg-[hsl(var(--status-ok))]', text: 'text-[hsl(var(--status-ok))]', bg: 'bg-[hsl(var(--status-ok))]/10' },\n active: { label: 'Active', dot: 'bg-[hsl(var(--status-ok))]', text: 'text-[hsl(var(--status-ok))]', bg: 'bg-[hsl(var(--status-ok))]/10' },\n warning: { label: 'Warning', dot: 'bg-[hsl(var(--status-warning))]', text: 'text-[hsl(var(--status-warning))]', bg: 'bg-[hsl(var(--status-warning))]/10' },\n critical: { label: 'Critical', dot: 'bg-[hsl(var(--status-critical))]', text: 'text-[hsl(var(--status-critical))]', bg: 'bg-[hsl(var(--status-critical))]/10' },\n unknown: { label: 'Unknown', dot: 'bg-[hsl(var(--status-unknown))]', text: 'text-[hsl(var(--status-unknown))]', bg: 'bg-[hsl(var(--status-unknown))]/10' },\n maintenance: { label: 'Maintenance', dot: 'bg-[hsl(var(--status-maintenance))]', text: 'text-[hsl(var(--status-maintenance))]', bg: 'bg-[hsl(var(--status-maintenance))]/10' },\n stale: { label: 'Stale', dot: 'bg-[hsl(var(--status-warning))]', text: 'text-[hsl(var(--status-warning))]', bg: 'bg-[hsl(var(--status-warning))]/10' },\n inactive: { label: 'Inactive', dot: 'bg-[hsl(var(--text-tertiary))]', text: 'text-[hsl(var(--text-tertiary))]', bg: 'bg-[hsl(var(--text-tertiary))]/10' },\n decommissioned: { label: 'Decommissioned', dot: 'bg-[hsl(var(--text-disabled))]', text: 'text-[hsl(var(--text-disabled))]', bg: 'bg-[hsl(var(--text-disabled))]/10' },\n pending: { label: 'Pending', dot: 'bg-[hsl(var(--status-warning))]', text: 'text-[hsl(var(--status-warning))]', bg: 'bg-[hsl(var(--status-warning))]/10' },\n}\n\nexport interface StatusBadgeProps {\n /** Status key to look up in the status map. */\n status: string\n /** Override display label. */\n label?: string\n /** Size variant. */\n size?: 'sm' | 'md'\n /** Show a CSS pulse animation on the dot. */\n pulse?: boolean\n /** Custom status map. Falls back to defaultStatusMap. */\n statusMap?: Record<string, StatusConfig>\n className?: string\n}\n\n/**\n * @description A status badge with colored dot indicator and label.\n * Accepts a configurable statusMap to define custom status values and their appearance.\n * Falls back to a built-in default map if none is provided.\n */\nexport function StatusBadge({\n status, label, size = 'md', pulse = false, statusMap, className,\n}: StatusBadgeProps): React.JSX.Element {\n const map = statusMap ?? defaultStatusMap\n const fallback = map['unknown'] ?? defaultStatusMap['unknown']!\n const config = map[status] ?? fallback\n\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full font-medium',\n size === 'sm' ? 'px-1.5 py-0.5 text-[0.6875rem]' : 'px-2 py-1 text-[0.75rem]',\n config.text,\n config.bg,\n className,\n )}\n >\n <span className={cn('rounded-full shrink-0', size === 'sm' ? 'size-1.5' : 'size-2', config.dot, pulse && 'animate-pulse')} />\n {label ?? config.label}\n </span>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { motion, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\n\n/** Configuration for a single status in StatusPulse. */\nexport interface PulseConfig {\n /** CSS class for the solid dot. */\n dot: string\n /** CSS class for the pulse ring. */\n ring: string\n /** Whether to show the pulse ring animation. */\n pulse: boolean\n /** Use faster animation (e.g. for degraded states). */\n fast: boolean\n}\n\n/** Default pulse configuration map for common statuses. */\nexport const defaultPulseConfigMap: Record<string, PulseConfig> = {\n online: { dot: 'bg-[hsl(var(--status-ok))]', ring: 'bg-[hsl(var(--status-ok))]', pulse: true, fast: false },\n degraded: { dot: 'bg-[hsl(var(--status-warning))]', ring: 'bg-[hsl(var(--status-warning))]', pulse: true, fast: true },\n offline: { dot: 'bg-[hsl(var(--status-critical))]', ring: 'bg-[hsl(var(--status-critical))]', pulse: false, fast: false },\n unknown: { dot: 'bg-[hsl(var(--text-tertiary))]', ring: 'bg-[hsl(var(--text-tertiary))]', pulse: false, fast: false },\n}\n\nexport interface StatusPulseProps {\n /** Status key to look up in the config map. */\n status: string\n /** Whether to show the status label text. */\n label?: boolean\n /** Custom pulse configuration map. Falls back to defaultPulseConfigMap. */\n configMap?: Record<string, PulseConfig>\n className?: string\n}\n\n/**\n * @description An animated status indicator dot with optional pulse ring and label.\n * Accepts a configurable map to define custom statuses. Respects prefers-reduced-motion.\n */\nexport function StatusPulse({ status, label = true, configMap, className }: StatusPulseProps): React.JSX.Element {\n const reduced = useReducedMotion()\n const map = configMap ?? defaultPulseConfigMap\n const cfg = map[status] ?? map['unknown'] ?? defaultPulseConfigMap['unknown']!\n\n return (\n <div className={cn('flex items-center gap-2', className)}>\n <div className=\"relative flex size-2.5 shrink-0\">\n {/* Pulse ring -- CSS animation only */}\n {cfg.pulse && !reduced && (\n <span\n className={cn(\n 'absolute inline-flex size-full rounded-full opacity-75 animate-pulse-ring',\n cfg.ring,\n cfg.fast && '[animation-duration:1s]',\n )}\n />\n )}\n {/* Solid dot */}\n <motion.span\n className={cn('relative inline-flex size-2.5 rounded-full', cfg.dot)}\n animate={{ scale: 1 }}\n whileHover={{ scale: reduced ? 1 : 1.3 }}\n transition={{ type: 'spring', stiffness: 400, damping: 15 }}\n />\n </div>\n {label && (\n <motion.span\n key={status}\n initial={reduced ? {} : { opacity: 0 }}\n animate={{ opacity: 1 }}\n className=\"text-xs font-medium capitalize text-[hsl(var(--text-secondary))]\"\n >\n {status}\n </motion.span>\n )}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { Toaster as SonnerToaster } from 'sonner'\n\nexport interface ToasterProps {\n /** Theme mode. Controls Sonner's internal theming. */\n theme?: 'dark' | 'light'\n /** Toast position on screen. */\n position?: 'top-left' | 'top-right' | 'top-center' | 'bottom-left' | 'bottom-right' | 'bottom-center'\n /** Auto-dismiss duration in milliseconds. */\n duration?: number\n}\n\n/**\n * @description A pre-themed Sonner toast container. Accepts theme as a prop\n * instead of reading from a hook, making it portable across applications.\n * Import this Toaster once in your app layout, then use `toast()` from sonner anywhere.\n */\nexport function Toaster({ theme = 'dark', position = 'bottom-right', duration = 4000 }: ToasterProps): React.JSX.Element {\n return (\n <SonnerToaster\n theme={theme}\n position={position}\n richColors\n duration={duration}\n gap={8}\n toastOptions={{\n style: {\n background: 'hsl(var(--bg-elevated))',\n color: 'hsl(var(--text-primary))',\n border: '1px solid hsl(var(--border-default))',\n borderRadius: '0.75rem',\n boxShadow: '0 8px 32px hsl(0 0% 0% / 0.25)',\n fontSize: '0.875rem',\n },\n classNames: {\n success: 'toast-success',\n error: 'toast-error',\n warning: 'toast-warning',\n info: 'toast-info',\n },\n }}\n />\n )\n}\n\n// Re-export toast function for convenient imports\nexport { toast } from 'sonner'\n","'use client'\n\nimport type React from 'react'\nimport { useState, useMemo, useCallback, useRef, useEffect } from 'react'\nimport {\n useReactTable, getCoreRowModel, getSortedRowModel,\n getFilteredRowModel, getPaginationRowModel,\n flexRender, type ColumnDef, type SortingState,\n type ColumnFiltersState, type VisibilityState,\n type FilterFn, type Table,\n} from '@tanstack/react-table'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport {\n Search, ChevronUp, ChevronDown, ChevronsUpDown,\n Download, Filter, X, List, AlignJustify, LayoutList,\n Columns3, Eye, EyeOff, GripVertical,\n} from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\nimport { TruncatedText } from './truncated-text'\nimport { EmptyState } from './empty-state'\nimport { Skeleton } from './skeleton'\nimport { Select } from './select'\nimport { cn } from '../utils'\n\n// ---------------------------------------------------------------------------\n// Types & constants\n// ---------------------------------------------------------------------------\n\nexport type Density = 'compact' | 'comfortable' | 'spacious'\n\nconst DENSITY_CLASSES: Record<Density, string> = {\n compact: 'py-1.5 px-3',\n comfortable: 'py-3 px-4',\n spacious: 'py-4 px-5',\n}\n\nconst DENSITY_ICONS: { key: Density; icon: LucideIcon; label: string }[] = [\n { key: 'compact', icon: List, label: 'Compact' },\n { key: 'comfortable', icon: AlignJustify, label: 'Comfortable' },\n { key: 'spacious', icon: LayoutList, label: 'Spacious' },\n]\n\nconst PAGE_SIZES = [10, 25, 50, 100]\nconst STORAGE_KEY = 'ui-kit-table-density'\n\n// ---------------------------------------------------------------------------\n// Global filter\n// ---------------------------------------------------------------------------\n\nconst globalFilterFn: FilterFn<unknown> = (row, _columnId, filterValue) => {\n const search = String(filterValue).toLowerCase()\n return row.getAllCells().some(cell =>\n String(cell.getValue() ?? '').toLowerCase().includes(search)\n )\n}\n\n// ---------------------------------------------------------------------------\n// CSV export\n// ---------------------------------------------------------------------------\n\nfunction exportToCsv<T>(table: Table<T>, filename: string) {\n const headers = table.getAllColumns().filter(c => c.getIsVisible()).map(c => c.id)\n const rows = table.getFilteredRowModel().rows.map(row =>\n headers.map(h => {\n const val = row.getValue(h)\n const str = String(val ?? '')\n return str.includes(',') || str.includes('\"') ? `\"${str.replace(/\"/g, '\"\"')}\"` : str\n }).join(',')\n )\n const csv = [headers.join(','), ...rows].join('\\n')\n const blob = new Blob([csv], { type: 'text/csv' })\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = `${filename}.csv`\n a.click()\n URL.revokeObjectURL(url)\n}\n\n// ---------------------------------------------------------------------------\n// Column filter popover (internal)\n// ---------------------------------------------------------------------------\n\nfunction ColumnFilterPopover<T>({ column, table }: {\n column: ReturnType<Table<T>['getHeaderGroups']>[0]['headers'][0]['column']\n table: Table<T>\n}) {\n const [open, setOpen] = useState(false)\n const ref = useRef<HTMLDivElement>(null)\n const currentFilter = column.getFilterValue()\n const isActive = currentFilter !== undefined && currentFilter !== '' &&\n !(Array.isArray(currentFilter) && currentFilter.length === 0)\n\n useEffect(() => {\n if (!open) return\n const handler = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false)\n }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [open])\n\n const { kind, uniqueValues } = useMemo(() => {\n const rows = table.getPreFilteredRowModel().rows.slice(0, 100)\n const vals = rows.map(r => r.getValue(column.id)).filter(v => v != null)\n const nums = vals.filter(v => typeof v === 'number' || (typeof v === 'string' && v !== '' && !isNaN(Number(v))))\n if (nums.length > vals.length * 0.7 && vals.length > 0) return { kind: 'number' as const, uniqueValues: [] }\n const uniques = [...new Set(vals.map(v => String(v)))]\n if (uniques.length > 0 && uniques.length < 20) return { kind: 'enum' as const, uniqueValues: uniques.sort() }\n return { kind: 'text' as const, uniqueValues: [] }\n }, [table, column.id])\n\n return (\n <div ref={ref} className=\"relative inline-flex\">\n <button\n onClick={(e) => { e.stopPropagation(); setOpen(o => !o) }}\n className=\"relative p-0.5 rounded hover:bg-[hsl(var(--bg-elevated)/0.5)] transition-colors\"\n aria-label={`Filter ${column.id}`}\n >\n <Filter className=\"h-3 w-3 text-[hsl(var(--text-tertiary))]\" />\n {isActive && (\n <span className=\"absolute -top-0.5 -right-0.5 w-1.5 h-1.5 rounded-full bg-[hsl(var(--brand-primary))]\" />\n )}\n </button>\n\n {open && (\n <div\n className=\"absolute top-full left-0 z-50 mt-1 min-w-[200px]\n bg-[hsl(var(--bg-elevated))] border border-[hsl(var(--border-default))] rounded-lg shadow-lg p-3\"\n onClick={e => e.stopPropagation()}\n >\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-[11px] font-medium text-[hsl(var(--text-secondary))] uppercase tracking-wider\">\n Filter\n </span>\n {isActive && (\n <button\n onClick={() => { column.setFilterValue(undefined); setOpen(false) }}\n className=\"text-[11px] text-[hsl(var(--brand-primary))] hover:underline\"\n >\n Clear\n </button>\n )}\n </div>\n\n {kind === 'text' && (\n <input\n type=\"text\"\n value={(currentFilter as string) ?? ''}\n onChange={e => column.setFilterValue(e.target.value || undefined)}\n placeholder=\"Search\\u2026\"\n className=\"w-full rounded-md border border-[hsl(var(--border-subtle))]\n bg-[hsl(var(--bg-surface))] px-2.5 py-1.5 text-small text-[hsl(var(--text-primary))]\n placeholder:text-[hsl(var(--text-tertiary))] outline-none\n focus:border-[hsl(var(--brand-primary))] transition-colors\"\n autoFocus\n />\n )}\n\n {kind === 'number' && (\n <div className=\"flex gap-2\">\n <input\n type=\"number\"\n value={(currentFilter as [number?, number?])?.[0] ?? ''}\n onChange={e => {\n const val = e.target.value === '' ? undefined : Number(e.target.value)\n column.setFilterValue((old: [number?, number?]) => [val, old?.[1]])\n }}\n placeholder=\"Min\"\n className=\"w-full rounded-md border border-[hsl(var(--border-subtle))]\n bg-[hsl(var(--bg-surface))] px-2.5 py-1.5 text-small text-[hsl(var(--text-primary))]\n placeholder:text-[hsl(var(--text-tertiary))] outline-none\n focus:border-[hsl(var(--brand-primary))] transition-colors\"\n />\n <input\n type=\"number\"\n value={(currentFilter as [number?, number?])?.[1] ?? ''}\n onChange={e => {\n const val = e.target.value === '' ? undefined : Number(e.target.value)\n column.setFilterValue((old: [number?, number?]) => [old?.[0], val])\n }}\n placeholder=\"Max\"\n className=\"w-full rounded-md border border-[hsl(var(--border-subtle))]\n bg-[hsl(var(--bg-surface))] px-2.5 py-1.5 text-small text-[hsl(var(--text-primary))]\n placeholder:text-[hsl(var(--text-tertiary))] outline-none\n focus:border-[hsl(var(--brand-primary))] transition-colors\"\n />\n </div>\n )}\n\n {kind === 'enum' && (\n <div className=\"max-h-[200px] overflow-y-auto space-y-1\">\n {uniqueValues.map(val => {\n const selected = Array.isArray(currentFilter) ? (currentFilter as string[]).includes(val) : false\n return (\n <label key={val} className=\"flex items-center gap-2 rounded px-1.5 py-1\n hover:bg-[hsl(var(--bg-surface)/0.5)] cursor-pointer transition-colors\">\n <input\n type=\"checkbox\"\n checked={selected}\n onChange={() => {\n const prev = Array.isArray(currentFilter) ? (currentFilter as string[]) : []\n const next = selected ? prev.filter(v => v !== val) : [...prev, val]\n column.setFilterValue(next.length > 0 ? next : undefined)\n }}\n className=\"rounded border-[hsl(var(--border-default))] accent-[hsl(var(--brand-primary))]\"\n />\n <span className=\"text-small text-[hsl(var(--text-primary))] truncate\">{val}</span>\n </label>\n )\n })}\n </div>\n )}\n </div>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Column picker\n// ---------------------------------------------------------------------------\n\nfunction ColumnPicker<T>({ table, onClose }: { table: Table<T>; onClose: () => void }) {\n const ref = useRef<HTMLDivElement>(null)\n const [dragIdx, setDragIdx] = useState<number | null>(null)\n\n useEffect(() => {\n const handler = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) onClose()\n }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [onClose])\n\n const allColumns = table.getAllLeafColumns()\n\n const handleDragStart = (idx: number) => setDragIdx(idx)\n const handleDragOver = (e: React.DragEvent, idx: number) => {\n e.preventDefault()\n if (dragIdx === null || dragIdx === idx) return\n const order = table.getState().columnOrder.length > 0\n ? [...table.getState().columnOrder]\n : allColumns.map(c => c.id)\n const [moved] = order.splice(dragIdx, 1)\n if (moved !== undefined) order.splice(idx, 0, moved)\n table.setColumnOrder(order)\n setDragIdx(idx)\n }\n\n return (\n <motion.div\n ref={ref}\n initial={{ opacity: 0, y: -4 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -4 }}\n transition={{ duration: 0.12 }}\n className={cn(\n 'absolute right-0 top-full z-50 mt-1 w-56 rounded-xl overflow-hidden',\n 'border border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-elevated))] shadow-xl',\n )}\n >\n <div className=\"px-3 py-2 border-b border-[hsl(var(--border-subtle)/0.5)]\">\n <span className=\"text-[10px] font-semibold uppercase tracking-wider text-[hsl(var(--text-tertiary))]\">\n Columns\n </span>\n </div>\n <div className=\"max-h-72 overflow-y-auto p-1\">\n {allColumns.map((col, idx) => {\n if (!col.getCanHide()) return null\n const visible = col.getIsVisible()\n const header = typeof col.columnDef.header === 'string' ? col.columnDef.header : col.id\n return (\n <div\n key={col.id}\n draggable\n onDragStart={() => handleDragStart(idx)}\n onDragOver={(e) => handleDragOver(e, idx)}\n onDragEnd={() => setDragIdx(null)}\n className={cn(\n 'flex items-center gap-2 rounded-lg px-2 py-1.5 text-small cursor-grab',\n 'hover:bg-[hsl(var(--bg-surface)/0.7)] transition-colors',\n dragIdx === idx && 'bg-[hsl(var(--brand-primary)/0.1)]',\n )}\n >\n <GripVertical className=\"h-3 w-3 text-[hsl(var(--text-disabled))] shrink-0\" />\n <button\n onClick={() => col.toggleVisibility()}\n className=\"flex items-center gap-2 flex-1 text-left\"\n >\n {visible\n ? <Eye className=\"h-3.5 w-3.5 text-[hsl(var(--brand-primary))]\" />\n : <EyeOff className=\"h-3.5 w-3.5 text-[hsl(var(--text-disabled))]\" />}\n <span className={cn(\n 'truncate',\n visible ? 'text-[hsl(var(--text-primary))]' : 'text-[hsl(var(--text-disabled))]',\n )}>\n {header}\n </span>\n </button>\n </div>\n )\n })}\n </div>\n <div className=\"px-3 py-2 border-t border-[hsl(var(--border-subtle)/0.5)]\">\n <button\n onClick={() => {\n table.toggleAllColumnsVisible(true)\n table.setColumnOrder([])\n }}\n className=\"text-[10px] text-[hsl(var(--brand-primary))] hover:text-[hsl(var(--text-primary))] transition-colors\"\n >\n Reset to defaults\n </button>\n </div>\n </motion.div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// DataTable props\n// ---------------------------------------------------------------------------\n\nexport interface DataTableProps<T> {\n /** Column definitions from @tanstack/react-table. */\n columns: ColumnDef<T, unknown>[]\n /** Row data array. */\n data: T[]\n /** Show loading skeleton. */\n isLoading?: boolean\n /** Custom empty state configuration. */\n emptyState?: { icon: LucideIcon; title: string; description: string }\n /** Placeholder text for the search input. */\n searchPlaceholder?: string\n /** Callback when a row is clicked. */\n onRowClick?: (row: T) => void\n /** Default sorting configuration. */\n defaultSort?: { id: string; desc: boolean }\n /** Default number of rows per page. */\n defaultPageSize?: number\n /** Filename for CSV export (enables export button when set). */\n exportFilename?: string\n /** Make the first column sticky on horizontal scroll. */\n stickyFirstColumn?: boolean\n /** Override the density setting. */\n density?: Density\n}\n\n// ---------------------------------------------------------------------------\n// DataTable component\n// ---------------------------------------------------------------------------\n\n/**\n * @description A full-featured data table with search, column filters, sorting, pagination,\n * density control, column visibility/reorder, CSV export, and Framer Motion row animations.\n * Built on @tanstack/react-table v8.\n */\nexport function DataTable<T>({\n columns,\n data,\n isLoading = false,\n emptyState: emptyStateProps,\n searchPlaceholder = 'Search...',\n onRowClick,\n defaultSort,\n defaultPageSize = 25,\n exportFilename,\n stickyFirstColumn = false,\n density: densityProp,\n}: DataTableProps<T>): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n\n const [density, setDensity] = useState<Density>(() => {\n if (densityProp) return densityProp\n if (typeof window !== 'undefined') {\n const stored = localStorage.getItem(STORAGE_KEY)\n if (stored && stored in DENSITY_CLASSES) return stored as Density\n }\n return 'comfortable'\n })\n\n const handleDensity = useCallback((d: Density) => {\n setDensity(d)\n localStorage.setItem(STORAGE_KEY, d)\n }, [])\n\n const [sorting, setSorting] = useState<SortingState>(\n defaultSort ? [{ id: defaultSort.id, desc: defaultSort.desc }] : []\n )\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([])\n const [globalFilter, setGlobalFilter] = useState('')\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>({})\n const [columnOrder, setColumnOrder] = useState<string[]>([])\n const [columnPickerOpen, setColumnPickerOpen] = useState(false)\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const table = useReactTable({\n data: data as any[],\n columns: columns as any,\n state: { sorting, columnFilters, globalFilter, columnVisibility, columnOrder },\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n onGlobalFilterChange: setGlobalFilter,\n onColumnVisibilityChange: setColumnVisibility,\n onColumnOrderChange: setColumnOrder,\n globalFilterFn,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n initialState: { pagination: { pageSize: defaultPageSize } },\n })\n\n const activeFilterCount = columnFilters.length\n const { pageIndex, pageSize } = table.getState().pagination\n const totalRows = table.getFilteredRowModel().rows.length\n const startRow = totalRows === 0 ? 0 : pageIndex * pageSize + 1\n const endRow = Math.min((pageIndex + 1) * pageSize, totalRows)\n const pageCount = table.getPageCount()\n\n const rowVariants = useMemo(() => ({\n hidden: { opacity: 0, y: 4 },\n visible: (i: number) => ({\n opacity: 1,\n y: 0,\n transition: {\n delay: Math.min(i, 20) * 0.02,\n duration: 0.15,\n },\n }),\n }), [])\n\n // Loading skeleton\n if (isLoading) {\n return (\n <div className=\"rounded-xl border border-[hsl(var(--border-subtle)/0.5)]\n bg-[hsl(var(--bg-surface)/0.6)] backdrop-blur-xl overflow-hidden\">\n <div className=\"flex items-center gap-3 p-4 border-b border-[hsl(var(--border-subtle)/0.3)]\">\n <Skeleton className=\"h-9 w-64 rounded-lg\" />\n <div className=\"flex-1\" />\n <Skeleton className=\"h-8 w-24 rounded-lg\" />\n </div>\n <div className=\"divide-y divide-[hsl(var(--border-subtle)/0.3)]\">\n {Array.from({ length: 8 }).map((_, i) => (\n <div key={i} className={cn('flex gap-4', DENSITY_CLASSES.comfortable)}>\n <Skeleton className=\"h-4 w-32\" />\n <Skeleton className=\"h-4 w-48\" />\n <Skeleton className=\"h-4 w-24\" />\n <Skeleton className=\"h-4 flex-1\" />\n </div>\n ))}\n </div>\n </div>\n )\n }\n\n return (\n <div className=\"rounded-xl border border-[hsl(var(--border-subtle)/0.5)]\n bg-[hsl(var(--bg-surface)/0.6)] backdrop-blur-xl overflow-hidden\">\n\n {/* Toolbar */}\n <div className=\"flex flex-wrap items-center gap-3 px-4 py-3\n border-b border-[hsl(var(--border-subtle)/0.3)]\">\n\n {/* Search */}\n <div className=\"relative flex-1 min-w-[200px] max-w-sm\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4\n text-[hsl(var(--text-tertiary))]\" />\n <input\n type=\"text\"\n value={globalFilter}\n onChange={e => setGlobalFilter(e.target.value)}\n placeholder={searchPlaceholder}\n className=\"w-full rounded-lg border border-[hsl(var(--border-subtle))]\n bg-[hsl(var(--bg-surface))] pl-9 pr-3 py-2 text-small\n text-[hsl(var(--text-primary))] placeholder:text-[hsl(var(--text-tertiary))]\n outline-none focus:border-[hsl(var(--brand-primary))] transition-colors\"\n />\n {globalFilter && (\n <button\n onClick={() => setGlobalFilter('')}\n className=\"absolute right-2.5 top-1/2 -translate-y-1/2 p-0.5 rounded\n hover:bg-[hsl(var(--bg-elevated)/0.5)] transition-colors\"\n >\n <X className=\"h-3.5 w-3.5 text-[hsl(var(--text-tertiary))]\" />\n </button>\n )}\n </div>\n\n {/* Active filter count */}\n {activeFilterCount > 0 && (\n <span className=\"inline-flex items-center gap-1 rounded-full\n bg-[hsl(var(--brand-primary)/0.15)] px-2.5 py-1 text-[11px] font-medium\n text-[hsl(var(--brand-primary))]\">\n <Filter className=\"h-3 w-3\" />\n {activeFilterCount} filter{activeFilterCount > 1 ? 's' : ''}\n </span>\n )}\n\n <div className=\"flex-1\" />\n\n {/* Density toggle */}\n <div className=\"flex items-center rounded-lg border border-[hsl(var(--border-subtle))]\n bg-[hsl(var(--bg-surface))] p-0.5\">\n {DENSITY_ICONS.map(({ key, icon: Icon, label }) => (\n <button\n key={key}\n onClick={() => handleDensity(key)}\n title={label}\n className={cn(\n 'p-1.5 rounded-md transition-colors',\n density === key\n ? 'bg-[hsl(var(--brand-primary)/0.2)] text-[hsl(var(--brand-primary))]'\n : 'text-[hsl(var(--text-tertiary))] hover:text-[hsl(var(--text-secondary))]',\n )}\n >\n <Icon className=\"h-3.5 w-3.5\" />\n </button>\n ))}\n </div>\n\n {/* Column visibility picker */}\n <div className=\"relative\">\n <button\n onClick={() => setColumnPickerOpen(o => !o)}\n className={cn(\n 'flex items-center gap-1.5 rounded-lg border border-[hsl(var(--border-subtle))]',\n 'bg-[hsl(var(--bg-surface))] px-3 py-1.5 text-small text-[hsl(var(--text-secondary))]',\n 'hover:bg-[hsl(var(--bg-elevated)/0.5)] hover:text-[hsl(var(--text-primary))] transition-colors',\n )}\n >\n <Columns3 className=\"h-3.5 w-3.5\" />\n Columns\n </button>\n <AnimatePresence>\n {columnPickerOpen && (\n <ColumnPicker table={table} onClose={() => setColumnPickerOpen(false)} />\n )}\n </AnimatePresence>\n </div>\n\n {/* CSV export */}\n {exportFilename && (\n <button\n onClick={() => exportToCsv(table, exportFilename)}\n className=\"flex items-center gap-1.5 rounded-lg border border-[hsl(var(--border-subtle))]\n bg-[hsl(var(--bg-surface))] px-3 py-1.5 text-small text-[hsl(var(--text-secondary))]\n hover:bg-[hsl(var(--bg-elevated)/0.5)] hover:text-[hsl(var(--text-primary))]\n transition-colors\"\n >\n <Download className=\"h-3.5 w-3.5\" />\n Export\n </button>\n )}\n\n {/* Row count */}\n <span className=\"text-[11px] text-[hsl(var(--text-tertiary))] tabular-nums\">\n {totalRows} row{totalRows !== 1 ? 's' : ''}\n </span>\n </div>\n\n {/* Table */}\n <div className={cn('overflow-x-auto', stickyFirstColumn && 'relative')}>\n <table className=\"w-full border-collapse text-small\">\n <thead>\n {table.getHeaderGroups().map(headerGroup => (\n <tr key={headerGroup.id} className=\"bg-[hsl(var(--bg-elevated)/0.3)]\">\n {headerGroup.headers.map((header, colIdx) => {\n const canSort = header.column.getCanSort()\n const sorted = header.column.getIsSorted()\n return (\n <th\n key={header.id}\n className={cn(\n DENSITY_CLASSES[density],\n 'text-left text-[11px] font-semibold uppercase tracking-wider',\n 'text-[hsl(var(--text-tertiary))] select-none whitespace-nowrap',\n 'border-b border-[hsl(var(--border-subtle)/0.3)]',\n stickyFirstColumn && colIdx === 0 &&\n 'sticky left-0 z-10 bg-[hsl(var(--bg-elevated)/0.8)] backdrop-blur-sm',\n )}\n >\n <div className=\"flex items-center gap-1.5\">\n {canSort ? (\n <button\n onClick={header.column.getToggleSortingHandler()}\n className=\"flex items-center gap-1 hover:text-[hsl(var(--text-secondary))] transition-colors\"\n >\n {header.isPlaceholder\n ? null\n : flexRender(header.column.columnDef.header, header.getContext())}\n {sorted === 'asc' ? (\n <ChevronUp className=\"h-3.5 w-3.5 text-[hsl(var(--brand-primary))]\" />\n ) : sorted === 'desc' ? (\n <ChevronDown className=\"h-3.5 w-3.5 text-[hsl(var(--brand-primary))]\" />\n ) : (\n <ChevronsUpDown className=\"h-3 w-3 opacity-40\" />\n )}\n </button>\n ) : (\n header.isPlaceholder\n ? null\n : flexRender(header.column.columnDef.header, header.getContext())\n )}\n {header.column.getCanFilter() && (\n <ColumnFilterPopover column={header.column} table={table} />\n )}\n </div>\n </th>\n )\n })}\n </tr>\n ))}\n </thead>\n <tbody>\n <AnimatePresence mode=\"popLayout\">\n {table.getRowModel().rows.length === 0 ? (\n <tr>\n <td colSpan={columns.length} className=\"p-0\">\n {emptyStateProps ? (\n <EmptyState\n icon={emptyStateProps.icon}\n title={emptyStateProps.title}\n description={emptyStateProps.description}\n className=\"border-0 rounded-none\"\n />\n ) : (\n <EmptyState\n icon={Search}\n title=\"No results\"\n description=\"No rows match your search or filter criteria.\"\n className=\"border-0 rounded-none\"\n />\n )}\n </td>\n </tr>\n ) : (\n table.getRowModel().rows.map((row, i) => (\n <motion.tr\n key={row.id}\n custom={i}\n variants={prefersReducedMotion ? undefined : rowVariants}\n initial={prefersReducedMotion ? undefined : 'hidden'}\n animate={prefersReducedMotion ? undefined : 'visible'}\n exit={prefersReducedMotion ? undefined : { opacity: 0 }}\n onClick={onRowClick ? () => onRowClick(row.original) : undefined}\n className={cn(\n 'border-b border-[hsl(var(--border-subtle)/0.3)]',\n 'transition-colors',\n onRowClick && 'cursor-pointer hover:bg-[hsl(var(--bg-elevated)/0.5)]',\n )}\n >\n {row.getVisibleCells().map((cell, colIdx) => (\n <td\n key={cell.id}\n className={cn(\n DENSITY_CLASSES[density],\n 'text-[hsl(var(--text-primary))]',\n stickyFirstColumn && colIdx === 0 &&\n 'sticky left-0 z-10 bg-[hsl(var(--bg-surface)/0.9)] backdrop-blur-sm',\n )}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </td>\n ))}\n </motion.tr>\n ))\n )}\n </AnimatePresence>\n </tbody>\n </table>\n </div>\n\n {/* Pagination footer */}\n {totalRows > 0 && (\n <div className=\"flex flex-wrap items-center justify-between gap-3 px-4 py-3\n border-t border-[hsl(var(--border-subtle)/0.3)]\">\n <span className=\"text-[12px] text-[hsl(var(--text-tertiary))] tabular-nums\">\n Showing {startRow}&ndash;{endRow} of {totalRows}\n </span>\n\n <div className=\"flex items-center gap-2\">\n <Select\n value={String(pageSize)}\n onValueChange={v => table.setPageSize(Number(v))}\n options={PAGE_SIZES.map(size => ({ value: String(size), label: `${size} / page` }))}\n className=\"w-[110px] text-[12px]\"\n />\n\n <div className=\"flex items-center gap-1\">\n <PaginationButton\n onClick={() => table.setPageIndex(0)}\n disabled={!table.getCanPreviousPage()}\n >\n First\n </PaginationButton>\n <PaginationButton\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n >\n Prev\n </PaginationButton>\n\n {generatePageNumbers(pageIndex, pageCount).map((p, idx) =>\n p === -1 ? (\n <span key={`ellipsis-${idx}`} className=\"px-1 text-[hsl(var(--text-tertiary))]\">\n ...\n </span>\n ) : (\n <PaginationButton\n key={p}\n onClick={() => table.setPageIndex(p)}\n active={p === pageIndex}\n >\n {p + 1}\n </PaginationButton>\n )\n )}\n\n <PaginationButton\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n >\n Next\n </PaginationButton>\n <PaginationButton\n onClick={() => table.setPageIndex(pageCount - 1)}\n disabled={!table.getCanNextPage()}\n >\n Last\n </PaginationButton>\n </div>\n </div>\n </div>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Pagination button\n// ---------------------------------------------------------------------------\n\nfunction PaginationButton({ children, onClick, disabled, active }: {\n children: React.ReactNode\n onClick: () => void\n disabled?: boolean\n active?: boolean\n}) {\n return (\n <button\n onClick={onClick}\n disabled={disabled}\n className={cn(\n 'rounded-md px-2 py-1 text-[12px] font-medium transition-colors tabular-nums',\n active\n ? 'bg-[hsl(var(--brand-primary)/0.2)] text-[hsl(var(--brand-primary))]'\n : 'text-[hsl(var(--text-secondary))] hover:bg-[hsl(var(--bg-elevated)/0.5)] hover:text-[hsl(var(--text-primary))]',\n disabled && 'opacity-40 pointer-events-none',\n )}\n >\n {children}\n </button>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Page number generation\n// ---------------------------------------------------------------------------\n\nfunction generatePageNumbers(current: number, total: number): number[] {\n if (total <= 7) return Array.from({ length: total }, (_, i) => i)\n const pages: number[] = []\n const addPage = (p: number) => { if (!pages.includes(p)) pages.push(p) }\n addPage(0)\n for (let i = Math.max(1, current - 1); i <= Math.min(total - 2, current + 1); i++) addPage(i)\n addPage(total - 1)\n const result: number[] = []\n for (let i = 0; i < pages.length; i++) {\n if (i > 0 && pages[i]! - pages[i - 1]! > 1) result.push(-1)\n result.push(pages[i]!)\n }\n return result\n}\n\n// Re-export TruncatedText for convenience (used often with DataTable)\nexport { TruncatedText }\n","'use client'\n\nimport type React from 'react'\nimport { useCallback, useRef, type KeyboardEvent } from 'react'\nimport { motion, useReducedMotion } from 'framer-motion'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '../utils'\n\n/** A single tab definition. */\nexport interface Tab {\n /** Unique value for this tab. */\n value: string\n /** Display label. */\n label: string\n /** Optional icon component. */\n icon?: LucideIcon\n /** Whether this tab is disabled. */\n disabled?: boolean\n}\n\nexport interface TabsProps {\n /** Array of tab definitions. */\n tabs: Tab[]\n /** Currently selected tab value. */\n value: string\n /** Callback when a tab is selected. */\n onChange: (value: string) => void\n /** Visual variant. */\n variant?: 'underline' | 'pills' | 'enclosed'\n /** Size preset. */\n size?: 'sm' | 'md'\n /** Additional class name for the root element. */\n className?: string\n}\n\nconst sizeClasses = {\n sm: 'text-xs px-3 py-1.5 gap-1.5',\n md: 'text-sm px-4 py-2 gap-2',\n} as const\n\n/**\n * @description Accessible tabbed interface with three visual variants.\n * Uses Framer Motion layoutId for animated indicator sliding between tabs.\n * Supports keyboard navigation (arrow keys) and ARIA roles.\n */\nexport function Tabs({\n tabs,\n value,\n onChange,\n variant = 'underline',\n size = 'md',\n className,\n}: TabsProps): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n const tabListRef = useRef<HTMLDivElement>(null)\n\n const enabledTabs = tabs.filter((t) => !t.disabled)\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n const currentIdx = enabledTabs.findIndex((t) => t.value === value)\n if (currentIdx === -1) return\n\n let nextIdx: number | null = null\n\n if (e.key === 'ArrowRight' || e.key === 'ArrowDown') {\n e.preventDefault()\n nextIdx = (currentIdx + 1) % enabledTabs.length\n } else if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') {\n e.preventDefault()\n nextIdx = (currentIdx - 1 + enabledTabs.length) % enabledTabs.length\n } else if (e.key === 'Home') {\n e.preventDefault()\n nextIdx = 0\n } else if (e.key === 'End') {\n e.preventDefault()\n nextIdx = enabledTabs.length - 1\n }\n\n if (nextIdx !== null) {\n onChange(enabledTabs[nextIdx].value)\n const buttons = tabListRef.current?.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]:not([disabled])')\n buttons?.[nextIdx]?.focus()\n }\n },\n [enabledTabs, value, onChange],\n )\n\n const listCls = cn(\n 'inline-flex items-center',\n variant === 'underline' && 'border-b border-[hsl(var(--border-subtle))] gap-0',\n variant === 'pills' && 'gap-1 p-1 rounded-xl bg-[hsl(var(--bg-surface))]',\n variant === 'enclosed' && 'gap-0 border-b border-[hsl(var(--border-subtle))]',\n className,\n )\n\n const layoutId = `tabs-indicator-${variant}`\n\n return (\n <div\n ref={tabListRef}\n role=\"tablist\"\n aria-orientation=\"horizontal\"\n onKeyDown={handleKeyDown}\n className={listCls}\n >\n {tabs.map((tab) => {\n const isActive = tab.value === value\n const Icon = tab.icon\n\n const buttonCls = cn(\n 'relative inline-flex items-center justify-center font-medium transition-colors duration-150',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[hsl(var(--brand-primary))] focus-visible:ring-offset-1 focus-visible:ring-offset-[hsl(var(--bg-base))]',\n 'disabled:pointer-events-none disabled:opacity-40',\n 'cursor-pointer select-none whitespace-nowrap',\n sizeClasses[size],\n // variant-specific active/inactive\n variant === 'underline' && [\n isActive\n ? 'text-[hsl(var(--text-primary))]'\n : 'text-[hsl(var(--text-tertiary))] hover:text-[hsl(var(--text-secondary))]',\n ],\n variant === 'pills' && [\n isActive\n ? 'text-[hsl(var(--text-primary))]'\n : 'text-[hsl(var(--text-tertiary))] hover:text-[hsl(var(--text-secondary))] hover:bg-[hsl(var(--bg-elevated)/0.5)]',\n 'rounded-lg',\n ],\n variant === 'enclosed' && [\n isActive\n ? 'text-[hsl(var(--text-primary))] bg-[hsl(var(--bg-elevated))]'\n : 'text-[hsl(var(--text-tertiary))] hover:text-[hsl(var(--text-secondary))]',\n 'rounded-t-lg',\n ],\n )\n\n return (\n <button\n key={tab.value}\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={`tabpanel-${tab.value}`}\n tabIndex={isActive ? 0 : -1}\n disabled={tab.disabled}\n onClick={() => onChange(tab.value)}\n className={buttonCls}\n >\n {Icon && <Icon className={size === 'sm' ? 'h-3.5 w-3.5' : 'h-4 w-4'} />}\n {tab.label}\n\n {/* Animated indicator */}\n {isActive && variant === 'underline' && (\n <motion.div\n layoutId={layoutId}\n className=\"absolute bottom-0 left-0 right-0 h-0.5 bg-[hsl(var(--brand-primary))] rounded-full\"\n transition={prefersReducedMotion ? { duration: 0 } : { type: 'spring', stiffness: 500, damping: 35 }}\n />\n )}\n {isActive && variant === 'pills' && (\n <motion.div\n layoutId={layoutId}\n className=\"absolute inset-0 rounded-lg bg-[hsl(var(--bg-elevated))] -z-10\"\n transition={prefersReducedMotion ? { duration: 0 } : { type: 'spring', stiffness: 500, damping: 35 }}\n />\n )}\n {isActive && variant === 'enclosed' && (\n <motion.div\n layoutId={layoutId}\n className=\"absolute bottom-0 left-0 right-0 h-0.5 bg-[hsl(var(--brand-primary))] rounded-full\"\n transition={prefersReducedMotion ? { duration: 0 } : { type: 'spring', stiffness: 500, damping: 35 }}\n />\n )}\n </button>\n )\n })}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { type ReactNode } from 'react'\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '../utils'\n\n/** A single menu item definition. */\nexport interface MenuItem {\n /** Display label. */\n label: string\n /** Optional icon component. */\n icon?: LucideIcon\n /** Callback when item is clicked. */\n onClick: () => void\n /** Visual variant — danger for destructive actions. */\n variant?: 'default' | 'danger'\n /** Whether this item is disabled. */\n disabled?: boolean\n}\n\nexport interface DropdownMenuProps {\n /** Trigger element that opens the menu. */\n trigger: ReactNode\n /** Array of menu item definitions. */\n items: MenuItem[]\n /** Alignment of the menu relative to the trigger. */\n align?: 'start' | 'center' | 'end'\n /** Additional class name for the content container. */\n className?: string\n}\n\nconst contentVariants = {\n hidden: { opacity: 0, scale: 0.95, y: -4 },\n visible: { opacity: 1, scale: 1, y: 0 },\n exit: { opacity: 0, scale: 0.95, y: -4 },\n}\n\n/**\n * @description A context/action dropdown menu built on Radix DropdownMenu.\n * Features Framer Motion entry/exit animations, keyboard accessibility,\n * and a danger variant for destructive actions.\n */\nexport function DropdownMenu({ trigger, items, align = 'end', className }: DropdownMenuProps): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n\n return (\n <DropdownMenuPrimitive.Root>\n <DropdownMenuPrimitive.Trigger asChild>{trigger}</DropdownMenuPrimitive.Trigger>\n\n <AnimatePresence>\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n align={align}\n sideOffset={6}\n asChild\n >\n <motion.div\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"exit\"\n variants={contentVariants}\n transition={prefersReducedMotion ? { duration: 0 } : { duration: 0.15, ease: [0.16, 1, 0.3, 1] }}\n className={cn(\n 'z-50 min-w-[160px] overflow-hidden rounded-xl p-1',\n 'border border-[hsl(var(--border-default))]',\n 'bg-[hsl(var(--bg-elevated))] shadow-xl',\n 'focus:outline-none',\n className,\n )}\n >\n {items.map((item, i) => {\n const Icon = item.icon\n const isDanger = item.variant === 'danger'\n\n return (\n <DropdownMenuPrimitive.Item\n key={i}\n disabled={item.disabled}\n onSelect={item.onClick}\n className={cn(\n 'relative flex items-center gap-2.5 px-3 py-2 text-sm rounded-lg',\n 'outline-none cursor-pointer select-none transition-colors duration-100',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-40',\n isDanger\n ? 'text-[hsl(var(--status-critical))] data-[highlighted]:bg-[hsl(var(--status-critical)/0.1)]'\n : 'text-[hsl(var(--text-primary))] data-[highlighted]:bg-[hsl(var(--bg-overlay))]',\n )}\n >\n {Icon && (\n <Icon\n className={cn(\n 'h-4 w-4 shrink-0',\n isDanger\n ? 'text-[hsl(var(--status-critical))]'\n : 'text-[hsl(var(--text-secondary))]',\n )}\n />\n )}\n {item.label}\n </DropdownMenuPrimitive.Item>\n )\n })}\n </motion.div>\n </DropdownMenuPrimitive.Content>\n </DropdownMenuPrimitive.Portal>\n </AnimatePresence>\n </DropdownMenuPrimitive.Root>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useEffect, useCallback, useRef, type ReactNode } from 'react'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { X } from 'lucide-react'\nimport { cn } from '../utils'\n\nexport interface SheetProps {\n /** Whether the sheet is open. */\n open: boolean\n /** Callback to close the sheet. */\n onClose: () => void\n /** Edge from which the sheet slides in. */\n side?: 'right' | 'left' | 'top' | 'bottom'\n /** Title displayed in the sheet header. */\n title?: string\n /** Description text below the title. */\n description?: string\n /** Width class for left/right sheets, height class for top/bottom. */\n width?: string\n /** Sheet content. */\n children: ReactNode\n /** Additional class name for the panel. */\n className?: string\n}\n\nconst slideVariants = {\n right: { initial: { x: '100%' }, animate: { x: 0 }, exit: { x: '100%' } },\n left: { initial: { x: '-100%' }, animate: { x: 0 }, exit: { x: '-100%' } },\n top: { initial: { y: '-100%' }, animate: { y: 0 }, exit: { y: '-100%' } },\n bottom: { initial: { y: '100%' }, animate: { y: 0 }, exit: { y: '100%' } },\n}\n\nconst positionClasses = {\n right: 'inset-y-0 right-0',\n left: 'inset-y-0 left-0',\n top: 'inset-x-0 top-0',\n bottom: 'inset-x-0 bottom-0',\n}\n\n/**\n * @description A slide-over panel (drawer) from any edge of the screen.\n * Features backdrop overlay, spring animation, Escape to close, backdrop click to close,\n * and focus trapping within the panel.\n */\nexport function Sheet({\n open,\n onClose,\n side = 'right',\n title,\n description,\n width = 'max-w-md',\n children,\n className,\n}: SheetProps): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n const panelRef = useRef<HTMLDivElement>(null)\n\n // Close on Escape\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose()\n },\n [onClose],\n )\n\n useEffect(() => {\n if (open) {\n document.addEventListener('keydown', handleKeyDown)\n // Prevent body scroll\n const prevOverflow = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n document.body.style.overflow = prevOverflow\n }\n }\n }, [open, handleKeyDown])\n\n // Focus the panel when opened\n useEffect(() => {\n if (open) {\n requestAnimationFrame(() => {\n panelRef.current?.focus()\n })\n }\n }, [open])\n\n const isHorizontal = side === 'left' || side === 'right'\n const variants = slideVariants[side]\n\n return (\n <AnimatePresence>\n {open && (\n <div className=\"fixed inset-0 z-50\">\n {/* Backdrop */}\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={prefersReducedMotion ? { duration: 0 } : { duration: 0.2 }}\n className=\"absolute inset-0 bg-[hsl(var(--bg-base)/0.6)] backdrop-blur-sm\"\n onClick={onClose}\n />\n\n {/* Panel */}\n <motion.div\n ref={panelRef}\n tabIndex={-1}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={title}\n initial={variants.initial}\n animate={variants.animate}\n exit={variants.exit}\n transition={\n prefersReducedMotion\n ? { duration: 0 }\n : { type: 'spring', stiffness: 400, damping: 35 }\n }\n className={cn(\n 'absolute flex flex-col',\n 'bg-[hsl(var(--bg-surface))] border-[hsl(var(--border-default))]',\n 'shadow-2xl focus:outline-none',\n positionClasses[side],\n isHorizontal\n ? cn('w-full h-full', width, side === 'right' ? 'border-l' : 'border-r')\n : cn('h-auto w-full', side === 'top' ? 'border-b' : 'border-t'),\n className,\n )}\n >\n {/* Header */}\n {(title || description) && (\n <div className=\"flex items-start justify-between gap-4 px-6 pt-6 pb-4 border-b border-[hsl(var(--border-subtle))]\">\n <div className=\"min-w-0\">\n {title && (\n <h2 className=\"text-base font-semibold text-[hsl(var(--text-primary))]\">{title}</h2>\n )}\n {description && (\n <p className=\"mt-1 text-sm text-[hsl(var(--text-secondary))]\">{description}</p>\n )}\n </div>\n <button\n onClick={onClose}\n className={cn(\n 'shrink-0 p-1.5 rounded-lg transition-colors',\n 'text-[hsl(var(--text-tertiary))] hover:text-[hsl(var(--text-primary))]',\n 'hover:bg-[hsl(var(--bg-elevated))]',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[hsl(var(--brand-primary))]',\n )}\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n )}\n\n {/* Content */}\n <div className=\"flex-1 overflow-y-auto px-6 py-4\">{children}</div>\n </motion.div>\n </div>\n )}\n </AnimatePresence>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { motion, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\n\nexport interface ProgressProps {\n /** Current progress value (0-100 by default). */\n value: number\n /** Maximum value. */\n max?: number\n /** Optional label displayed above the bar. */\n label?: string\n /** Show the current percentage value. */\n showValue?: boolean\n /** Color variant. */\n variant?: 'default' | 'success' | 'warning' | 'danger'\n /** Height preset. */\n size?: 'sm' | 'md' | 'lg'\n /** Animate the fill width on value changes. */\n animated?: boolean\n /** Show an indeterminate shimmer animation (ignores value). */\n indeterminate?: boolean\n /** Additional class name for the root element. */\n className?: string\n}\n\nconst variantColors: Record<NonNullable<ProgressProps['variant']>, string> = {\n default: 'bg-[hsl(var(--brand-primary))]',\n success: 'bg-[hsl(var(--status-ok))]',\n warning: 'bg-[hsl(var(--status-warning))]',\n danger: 'bg-[hsl(var(--status-critical))]',\n}\n\nconst sizeClasses: Record<NonNullable<ProgressProps['size']>, string> = {\n sm: 'h-1.5',\n md: 'h-2.5',\n lg: 'h-4',\n}\n\n/**\n * @description A progress bar with optional label, animated fill, and indeterminate mode.\n * Supports multiple color variants and size presets.\n */\nexport function Progress({\n value,\n max = 100,\n label,\n showValue = false,\n variant = 'default',\n size = 'md',\n animated = true,\n indeterminate = false,\n className,\n}: ProgressProps): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n const pct = Math.min(100, Math.max(0, (value / max) * 100))\n\n return (\n <div className={cn('w-full', className)}>\n {/* Label + value row */}\n {(label || showValue) && (\n <div className=\"flex items-center justify-between mb-1.5\">\n {label && (\n <span className=\"text-xs font-medium text-[hsl(var(--text-secondary))]\">{label}</span>\n )}\n {showValue && !indeterminate && (\n <span className=\"text-xs font-medium tabular-nums text-[hsl(var(--text-secondary))]\">\n {Math.round(pct)}%\n </span>\n )}\n </div>\n )}\n\n {/* Track */}\n <div\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : pct}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={label}\n className={cn(\n 'w-full overflow-hidden rounded-full bg-[hsl(var(--bg-overlay))]',\n sizeClasses[size],\n )}\n >\n {indeterminate ? (\n <div\n className={cn(\n 'h-full w-1/3 rounded-full',\n variantColors[variant],\n prefersReducedMotion ? '' : 'animate-shimmer',\n )}\n style={\n prefersReducedMotion\n ? { width: '33%' }\n : {\n animation: 'indeterminate-slide 1.5s ease-in-out infinite',\n }\n }\n />\n ) : animated && !prefersReducedMotion ? (\n <motion.div\n className={cn('h-full rounded-full', variantColors[variant])}\n initial={{ width: 0 }}\n animate={{ width: `${pct}%` }}\n transition={{ type: 'spring', stiffness: 100, damping: 20 }}\n />\n ) : (\n <div\n className={cn('h-full rounded-full transition-[width] duration-300', variantColors[variant])}\n style={{ width: `${pct}%` }}\n />\n )}\n </div>\n\n {/* Indeterminate keyframes injected as inline style */}\n {indeterminate && !prefersReducedMotion && (\n <style>{`\n @keyframes indeterminate-slide {\n 0% { transform: translateX(-100%); }\n 50% { transform: translateX(200%); }\n 100% { transform: translateX(-100%); }\n }\n `}</style>\n )}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useState } from 'react'\nimport { cn } from '../utils'\n\nexport interface AvatarProps {\n /** Image source URL. */\n src?: string\n /** Alt text for the image; used for accessibility. */\n alt: string\n /** Initials fallback (e.g. \"JD\"). Derived from alt if not provided. */\n fallback?: string\n /** Size preset. */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n /** Optional status dot overlay. */\n status?: 'online' | 'offline' | 'busy' | 'away'\n /** Additional class name for the root element. */\n className?: string\n}\n\nconst sizeClasses: Record<NonNullable<AvatarProps['size']>, { root: string; text: string; dot: string }> = {\n xs: { root: 'h-6 w-6', text: 'text-[10px]', dot: 'h-2 w-2 -bottom-0 -right-0 ring-1' },\n sm: { root: 'h-8 w-8', text: 'text-xs', dot: 'h-2.5 w-2.5 -bottom-0.5 -right-0.5 ring-[1.5px]' },\n md: { root: 'h-10 w-10', text: 'text-sm', dot: 'h-3 w-3 -bottom-0.5 -right-0.5 ring-2' },\n lg: { root: 'h-12 w-12', text: 'text-base', dot: 'h-3.5 w-3.5 -bottom-0.5 -right-0.5 ring-2' },\n xl: { root: 'h-16 w-16', text: 'text-lg', dot: 'h-4 w-4 -bottom-0.5 -right-0.5 ring-2' },\n}\n\nconst statusColors: Record<NonNullable<AvatarProps['status']>, string> = {\n online: 'bg-[hsl(var(--status-ok))]',\n offline: 'bg-[hsl(var(--text-disabled))]',\n busy: 'bg-[hsl(var(--status-critical))]',\n away: 'bg-[hsl(var(--status-warning))]',\n}\n\n/**\n * Derive initials from a name string (max 2 characters).\n */\nfunction deriveInitials(name: string): string {\n const parts = name.trim().split(/\\s+/)\n if (parts.length >= 2) {\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase()\n }\n return name.slice(0, 2).toUpperCase()\n}\n\n/**\n * @description User/entity avatar with image support and initials fallback.\n * Optional status dot overlay for presence indication.\n */\nexport function Avatar({\n src,\n alt,\n fallback,\n size = 'md',\n status,\n className,\n}: AvatarProps): React.JSX.Element {\n const [imgError, setImgError] = useState(false)\n const s = sizeClasses[size]\n const initials = fallback ?? deriveInitials(alt)\n const showImage = src && !imgError\n\n return (\n <div className={cn('relative inline-flex shrink-0', className)}>\n <div\n className={cn(\n s.root,\n 'rounded-full overflow-hidden',\n 'flex items-center justify-center',\n !showImage && 'bg-[hsl(var(--bg-overlay))]',\n )}\n >\n {showImage ? (\n <img\n src={src}\n alt={alt}\n onError={() => setImgError(true)}\n className=\"h-full w-full object-cover\"\n />\n ) : (\n <span\n className={cn(\n s.text,\n 'font-semibold text-[hsl(var(--text-secondary))] select-none',\n )}\n >\n {initials}\n </span>\n )}\n </div>\n\n {/* Status dot */}\n {status && (\n <span\n className={cn(\n 'absolute rounded-full ring-[hsl(var(--bg-surface))]',\n s.dot,\n statusColors[status],\n )}\n aria-label={status}\n />\n )}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { type ReactNode } from 'react'\nimport * as PopoverPrimitive from '@radix-ui/react-popover'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\n\nexport interface PopoverProps {\n /** Trigger element that opens the popover. */\n trigger: ReactNode\n /** Popover content. */\n children: ReactNode\n /** Side of the trigger to display the popover. */\n side?: 'top' | 'right' | 'bottom' | 'left'\n /** Alignment of the popover relative to the trigger. */\n align?: 'start' | 'center' | 'end'\n /** Additional class name for the content container. */\n className?: string\n}\n\nconst contentVariants = {\n hidden: { opacity: 0, scale: 0.96, y: -2 },\n visible: { opacity: 1, scale: 1, y: 0 },\n exit: { opacity: 0, scale: 0.96, y: -2 },\n}\n\n/**\n * @description A popover wrapper built on Radix Popover with Framer Motion entry animation.\n * Closes on outside click. Includes an arrow pointer.\n */\nexport function Popover({ trigger, children, side = 'bottom', align = 'center', className }: PopoverProps): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n\n return (\n <PopoverPrimitive.Root>\n <PopoverPrimitive.Trigger asChild>{trigger}</PopoverPrimitive.Trigger>\n\n <AnimatePresence>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n side={side}\n align={align}\n sideOffset={8}\n asChild\n >\n <motion.div\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"exit\"\n variants={contentVariants}\n transition={prefersReducedMotion ? { duration: 0 } : { duration: 0.15, ease: [0.16, 1, 0.3, 1] }}\n className={cn(\n 'z-50 rounded-xl p-4',\n 'border border-[hsl(var(--border-default))]',\n 'bg-[hsl(var(--bg-elevated))] shadow-xl',\n 'focus:outline-none',\n className,\n )}\n >\n {children}\n <PopoverPrimitive.Arrow\n className=\"fill-[hsl(var(--bg-elevated))]\"\n width={12}\n height={6}\n />\n </motion.div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </AnimatePresence>\n </PopoverPrimitive.Root>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useCallback, useRef, useState, type KeyboardEvent, type MouseEvent, type TouchEvent } from 'react'\nimport { cn } from '../utils'\n\nexport interface SliderProps {\n /** Current value. */\n value: number\n /** Callback when value changes. */\n onChange: (value: number) => void\n /** Minimum value. */\n min?: number\n /** Maximum value. */\n max?: number\n /** Step increment. */\n step?: number\n /** Optional label displayed above the slider. */\n label?: string\n /** Show the current value. */\n showValue?: boolean\n /** Additional class name for the root element. */\n className?: string\n}\n\n/**\n * @description A custom-styled range slider with keyboard accessibility.\n * Features a styled track, filled portion, and draggable thumb.\n * Shows current value on hover/drag via a tooltip above the thumb.\n */\nexport function Slider({\n value,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n label,\n showValue = false,\n className,\n}: SliderProps): React.JSX.Element {\n const trackRef = useRef<HTMLDivElement>(null)\n const [isDragging, setIsDragging] = useState(false)\n const [isHovering, setIsHovering] = useState(false)\n\n const pct = max === min ? 0 : ((value - min) / (max - min)) * 100\n\n const clampToStep = useCallback(\n (raw: number) => {\n const clamped = Math.min(max, Math.max(min, raw))\n const stepped = Math.round((clamped - min) / step) * step + min\n // Avoid floating point issues\n return Math.min(max, Math.max(min, parseFloat(stepped.toPrecision(10))))\n },\n [min, max, step],\n )\n\n const getValueFromPosition = useCallback(\n (clientX: number) => {\n const track = trackRef.current\n if (!track) return value\n const rect = track.getBoundingClientRect()\n const ratio = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width))\n return clampToStep(min + ratio * (max - min))\n },\n [min, max, value, clampToStep],\n )\n\n const handleMouseDown = useCallback(\n (e: MouseEvent) => {\n e.preventDefault()\n setIsDragging(true)\n onChange(getValueFromPosition(e.clientX))\n\n const handleMouseMove = (ev: globalThis.MouseEvent) => {\n onChange(getValueFromPosition(ev.clientX))\n }\n const handleMouseUp = () => {\n setIsDragging(false)\n document.removeEventListener('mousemove', handleMouseMove)\n document.removeEventListener('mouseup', handleMouseUp)\n }\n document.addEventListener('mousemove', handleMouseMove)\n document.addEventListener('mouseup', handleMouseUp)\n },\n [getValueFromPosition, onChange],\n )\n\n const handleTouchStart = useCallback(\n (e: TouchEvent) => {\n setIsDragging(true)\n if (e.touches[0]) {\n onChange(getValueFromPosition(e.touches[0].clientX))\n }\n\n const handleTouchMove = (ev: globalThis.TouchEvent) => {\n if (ev.touches[0]) {\n onChange(getValueFromPosition(ev.touches[0].clientX))\n }\n }\n const handleTouchEnd = () => {\n setIsDragging(false)\n document.removeEventListener('touchmove', handleTouchMove)\n document.removeEventListener('touchend', handleTouchEnd)\n }\n document.addEventListener('touchmove', handleTouchMove)\n document.addEventListener('touchend', handleTouchEnd)\n },\n [getValueFromPosition, onChange],\n )\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n let newValue = value\n if (e.key === 'ArrowRight' || e.key === 'ArrowUp') {\n e.preventDefault()\n newValue = clampToStep(value + step)\n } else if (e.key === 'ArrowLeft' || e.key === 'ArrowDown') {\n e.preventDefault()\n newValue = clampToStep(value - step)\n } else if (e.key === 'Home') {\n e.preventDefault()\n newValue = min\n } else if (e.key === 'End') {\n e.preventDefault()\n newValue = max\n }\n if (newValue !== value) onChange(newValue)\n },\n [value, min, max, step, clampToStep, onChange],\n )\n\n const showTooltip = isDragging || isHovering\n\n return (\n <div className={cn('w-full', className)}>\n {/* Label + value row */}\n {(label || showValue) && (\n <div className=\"flex items-center justify-between mb-2\">\n {label && (\n <span className=\"text-xs font-medium text-[hsl(var(--text-secondary))]\">{label}</span>\n )}\n {showValue && (\n <span className=\"text-xs font-medium tabular-nums text-[hsl(var(--text-secondary))]\">\n {value}\n </span>\n )}\n </div>\n )}\n\n {/* Track */}\n <div\n ref={trackRef}\n role=\"slider\"\n aria-valuenow={value}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-label={label}\n tabIndex={0}\n onMouseDown={handleMouseDown}\n onTouchStart={handleTouchStart}\n onKeyDown={handleKeyDown}\n onMouseEnter={() => setIsHovering(true)}\n onMouseLeave={() => setIsHovering(false)}\n className={cn(\n 'relative h-6 w-full cursor-pointer select-none',\n 'focus-visible:outline-none',\n 'group',\n )}\n >\n {/* Track background */}\n <div className=\"absolute top-1/2 -translate-y-1/2 w-full h-2 rounded-full bg-[hsl(var(--bg-overlay))]\">\n {/* Filled portion */}\n <div\n className=\"absolute inset-y-0 left-0 rounded-full bg-[hsl(var(--brand-primary))]\"\n style={{ width: `${pct}%` }}\n />\n </div>\n\n {/* Thumb */}\n <div\n className={cn(\n 'absolute top-1/2 -translate-y-1/2 -translate-x-1/2',\n 'h-5 w-5 rounded-full',\n 'bg-[hsl(var(--text-on-brand))] border-2 border-[hsl(var(--brand-primary))]',\n 'shadow-md transition-transform duration-100',\n isDragging && 'scale-110',\n 'group-focus-visible:ring-2 group-focus-visible:ring-[hsl(var(--brand-primary))] group-focus-visible:ring-offset-2 group-focus-visible:ring-offset-[hsl(var(--bg-base))]',\n )}\n style={{ left: `${pct}%` }}\n >\n {/* Value tooltip */}\n {showTooltip && (\n <div\n className={cn(\n 'absolute -top-8 left-1/2 -translate-x-1/2',\n 'px-2 py-0.5 rounded-md text-xs font-medium tabular-nums',\n 'bg-[hsl(var(--bg-elevated))] text-[hsl(var(--text-primary))]',\n 'border border-[hsl(var(--border-subtle))] shadow-sm',\n 'pointer-events-none whitespace-nowrap',\n )}\n >\n {value}\n </div>\n )}\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react'\nimport { cn } from '../utils'\n\n/* ── Variant & padding maps ───────────────────────────────────────────────── */\n\nconst variantClasses = {\n default:\n 'bg-[hsl(var(--bg-surface))] border border-[hsl(var(--border-subtle))] shadow-sm',\n elevated:\n 'bg-[hsl(var(--bg-elevated))] border border-[hsl(var(--border-default))] shadow-lg',\n outlined:\n 'bg-transparent border border-[hsl(var(--border-default))]',\n interactive:\n 'bg-[hsl(var(--bg-surface))] border border-[hsl(var(--border-subtle))] shadow-sm hover:bg-[hsl(var(--bg-elevated))] hover:border-[hsl(var(--border-default))] hover:shadow-md transition-all duration-150 cursor-pointer',\n} as const\n\nconst paddingClasses = {\n none: '',\n sm: 'p-3',\n md: 'p-5',\n lg: 'p-6',\n} as const\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n /** Visual variant. */\n variant?: keyof typeof variantClasses\n /** Padding preset. */\n padding?: keyof typeof paddingClasses\n /** Card content. */\n children: ReactNode\n}\n\n/**\n * @description A styled card container with variant and padding presets.\n * Use with CardHeader, CardTitle, CardDescription, CardContent, and CardFooter\n * subcomponents for semantic structure.\n */\nconst Card: React.ForwardRefExoticComponent<CardProps & React.RefAttributes<HTMLDivElement>> = forwardRef<HTMLDivElement, CardProps>(\n ({ variant = 'default', padding = 'md', className, children, ...props }, ref): React.JSX.Element => (\n <div\n ref={ref}\n className={cn('rounded-2xl', variantClasses[variant], paddingClasses[padding], className)}\n {...props}\n >\n {children}\n </div>\n ),\n)\nCard.displayName = 'Card'\n\n/* ── Subcomponents ────────────────────────────────────────────────────────── */\n\nexport interface CardSubProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode\n}\n\n/** Header section of a Card (flex row for title + actions). */\nconst CardHeader: React.ForwardRefExoticComponent<CardSubProps & React.RefAttributes<HTMLDivElement>> = forwardRef<HTMLDivElement, CardSubProps>(\n ({ className, children, ...props }, ref): React.JSX.Element => (\n <div\n ref={ref}\n className={cn('flex items-start justify-between gap-4', className)}\n {...props}\n >\n {children}\n </div>\n ),\n)\nCardHeader.displayName = 'CardHeader'\n\n/** Title within a CardHeader. */\nconst CardTitle: React.ForwardRefExoticComponent<HTMLAttributes<HTMLHeadingElement> & { children: ReactNode } & React.RefAttributes<HTMLHeadingElement>> = forwardRef<HTMLHeadingElement, HTMLAttributes<HTMLHeadingElement> & { children: ReactNode }>(\n ({ className, children, ...props }, ref): React.JSX.Element => (\n <h3\n ref={ref}\n className={cn('text-base font-semibold text-[hsl(var(--text-primary))]', className)}\n {...props}\n >\n {children}\n </h3>\n ),\n)\nCardTitle.displayName = 'CardTitle'\n\n/** Description text within a CardHeader. */\nconst CardDescription: React.ForwardRefExoticComponent<HTMLAttributes<HTMLParagraphElement> & { children: ReactNode } & React.RefAttributes<HTMLParagraphElement>> = forwardRef<HTMLParagraphElement, HTMLAttributes<HTMLParagraphElement> & { children: ReactNode }>(\n ({ className, children, ...props }, ref): React.JSX.Element => (\n <p\n ref={ref}\n className={cn('text-sm text-[hsl(var(--text-secondary))]', className)}\n {...props}\n >\n {children}\n </p>\n ),\n)\nCardDescription.displayName = 'CardDescription'\n\n/** Main content area of a Card. */\nconst CardContent: React.ForwardRefExoticComponent<CardSubProps & React.RefAttributes<HTMLDivElement>> = forwardRef<HTMLDivElement, CardSubProps>(\n ({ className, children, ...props }, ref): React.JSX.Element => (\n <div ref={ref} className={cn('mt-4', className)} {...props}>\n {children}\n </div>\n ),\n)\nCardContent.displayName = 'CardContent'\n\n/** Footer section of a Card (typically for actions). */\nconst CardFooter: React.ForwardRefExoticComponent<CardSubProps & React.RefAttributes<HTMLDivElement>> = forwardRef<HTMLDivElement, CardSubProps>(\n ({ className, children, ...props }, ref): React.JSX.Element => (\n <div\n ref={ref}\n className={cn(\n 'mt-4 pt-4 flex items-center gap-3 border-t border-[hsl(var(--border-subtle))]',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n ),\n)\nCardFooter.displayName = 'CardFooter'\n\nexport { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter }\n","'use client'\n\nimport type React from 'react'\nimport { useCallback, useRef, type KeyboardEvent } from 'react'\nimport { motion, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\n\n/** A single radio option definition. */\nexport interface RadioOption {\n /** Unique value. */\n value: string\n /** Display label. */\n label: string\n /** Optional description text below the label. */\n description?: string\n /** Whether this option is disabled. */\n disabled?: boolean\n}\n\nexport interface RadioGroupProps {\n /** Array of radio option definitions. */\n options: RadioOption[]\n /** Currently selected value. */\n value: string\n /** Callback when selection changes. */\n onChange: (value: string) => void\n /** Layout direction. */\n orientation?: 'horizontal' | 'vertical'\n /** Additional class name for the root element. */\n className?: string\n}\n\n/**\n * @description A custom-styled radio button group with Framer Motion selection indicator.\n * Supports keyboard navigation (arrow keys, Home, End) and ARIA roles.\n */\nexport function RadioGroup({\n options,\n value,\n onChange,\n orientation = 'vertical',\n className,\n}: RadioGroupProps): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n const groupRef = useRef<HTMLDivElement>(null)\n\n const enabledOptions = options.filter((o) => !o.disabled)\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n const currentIdx = enabledOptions.findIndex((o) => o.value === value)\n if (currentIdx === -1) return\n\n const isVertical = orientation === 'vertical'\n const nextKey = isVertical ? 'ArrowDown' : 'ArrowRight'\n const prevKey = isVertical ? 'ArrowUp' : 'ArrowLeft'\n\n let nextIdx: number | null = null\n\n if (e.key === nextKey) {\n e.preventDefault()\n nextIdx = (currentIdx + 1) % enabledOptions.length\n } else if (e.key === prevKey) {\n e.preventDefault()\n nextIdx = (currentIdx - 1 + enabledOptions.length) % enabledOptions.length\n } else if (e.key === 'Home') {\n e.preventDefault()\n nextIdx = 0\n } else if (e.key === 'End') {\n e.preventDefault()\n nextIdx = enabledOptions.length - 1\n }\n\n if (nextIdx !== null) {\n onChange(enabledOptions[nextIdx].value)\n const radios = groupRef.current?.querySelectorAll<HTMLDivElement>('[role=\"radio\"]:not([aria-disabled=\"true\"])')\n radios?.[nextIdx]?.focus()\n }\n },\n [enabledOptions, value, onChange, orientation],\n )\n\n return (\n <div\n ref={groupRef}\n role=\"radiogroup\"\n aria-orientation={orientation}\n onKeyDown={handleKeyDown}\n className={cn(\n 'flex',\n orientation === 'vertical' ? 'flex-col gap-2' : 'flex-row flex-wrap gap-4',\n className,\n )}\n >\n {options.map((option) => {\n const isSelected = option.value === value\n\n return (\n <div\n key={option.value}\n role=\"radio\"\n aria-checked={isSelected}\n aria-disabled={option.disabled}\n tabIndex={isSelected ? 0 : -1}\n onClick={() => {\n if (!option.disabled) onChange(option.value)\n }}\n className={cn(\n 'flex items-start gap-3 cursor-pointer select-none group',\n 'focus-visible:outline-none',\n option.disabled && 'opacity-40 pointer-events-none',\n )}\n >\n {/* Radio circle */}\n <div\n className={cn(\n 'relative mt-0.5 h-[18px] w-[18px] shrink-0 rounded-full border-2 transition-colors duration-150',\n 'flex items-center justify-center',\n isSelected\n ? 'border-[hsl(var(--brand-primary))]'\n : 'border-[hsl(var(--border-strong))] group-hover:border-[hsl(var(--brand-primary))]',\n 'group-focus-visible:ring-2 group-focus-visible:ring-[hsl(var(--brand-primary))] group-focus-visible:ring-offset-2 group-focus-visible:ring-offset-[hsl(var(--bg-base))]',\n )}\n >\n {isSelected && (\n <motion.div\n layoutId=\"radio-indicator\"\n initial={prefersReducedMotion ? false : { scale: 0 }}\n animate={{ scale: 1 }}\n transition={\n prefersReducedMotion\n ? { duration: 0 }\n : { type: 'spring', stiffness: 500, damping: 30 }\n }\n className=\"h-2.5 w-2.5 rounded-full bg-[hsl(var(--brand-primary))]\"\n />\n )}\n </div>\n\n {/* Label + description */}\n <div className=\"min-w-0\">\n <span\n className={cn(\n 'text-sm font-medium',\n isSelected\n ? 'text-[hsl(var(--text-primary))]'\n : 'text-[hsl(var(--text-secondary))]',\n )}\n >\n {option.label}\n </span>\n {option.description && (\n <p className=\"mt-0.5 text-xs text-[hsl(var(--text-tertiary))]\">\n {option.description}\n </p>\n )}\n </div>\n </div>\n )\n })}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { type ReactNode } from 'react'\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip'\nimport { cn } from '../utils'\n\nexport interface TooltipProps {\n /** Tooltip content (can be text or ReactNode). */\n content: ReactNode\n /** Trigger element. */\n children: ReactNode\n /** Side of the trigger to display the tooltip. */\n side?: 'top' | 'right' | 'bottom' | 'left'\n /** Delay in milliseconds before the tooltip appears. */\n delay?: number\n /** Additional class name for the tooltip content. */\n className?: string\n}\n\n/**\n * @description A simple tooltip wrapper built on Radix Tooltip.\n * Theme-styled content with arrow pointer and configurable delay.\n * Requires a TooltipProvider ancestor (included by default).\n */\nexport function Tooltip({\n content,\n children,\n side = 'top',\n delay = 200,\n className,\n}: TooltipProps): React.JSX.Element {\n return (\n <TooltipPrimitive.Provider delayDuration={delay}>\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>{children}</TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n side={side}\n sideOffset={6}\n className={cn(\n 'z-50 px-3 py-1.5 rounded-lg text-xs font-medium',\n 'bg-[hsl(var(--bg-elevated))] text-[hsl(var(--text-primary))]',\n 'border border-[hsl(var(--border-default))] shadow-lg',\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-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 >\n {content}\n <TooltipPrimitive.Arrow\n className=\"fill-[hsl(var(--bg-elevated))]\"\n width={10}\n height={5}\n />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { cn } from '../utils'\n\nexport interface SparklineProps {\n /** Array of numeric values to plot. */\n data: number[]\n /** SVG width in pixels. */\n width?: number\n /** SVG height in pixels. */\n height?: number\n /** Line color — must use hsl(var(--token)) format. */\n color?: string\n /** Opacity for the gradient fill below the line (0 to disable). */\n fillOpacity?: number\n /** Show dots on first and last data points. */\n showDots?: boolean\n className?: string\n}\n\nfunction buildPoints(data: number[], w: number, h: number, pad: number): string {\n if (data.length < 2) return ''\n const min = Math.min(...data)\n const max = Math.max(...data)\n const range = max - min || 1\n const stepX = (w - pad * 2) / (data.length - 1)\n return data\n .map((v, i) => {\n const x = pad + i * stepX\n const y = pad + (1 - (v - min) / range) * (h - pad * 2)\n return `${x},${y}`\n })\n .join(' ')\n}\n\n/**\n * @description A tiny inline SVG sparkline chart for embedding in tables, cards,\n * and metric tiles. Pure SVG with no external dependencies.\n */\nexport function Sparkline({\n data,\n width = 80,\n height = 24,\n color = 'hsl(var(--brand-primary))',\n fillOpacity = 0.1,\n showDots = false,\n className,\n}: SparklineProps): React.JSX.Element | null {\n if (data.length < 2) return null\n\n const pad = showDots ? 3 : 1\n const points = buildPoints(data, width, height, pad)\n const gradId = `sp-grad-${Math.random().toString(36).slice(2, 8)}`\n\n const min = Math.min(...data)\n const max = Math.max(...data)\n const range = max - min || 1\n const stepX = (width - pad * 2) / (data.length - 1)\n\n const firstX = pad\n const firstY = pad + (1 - (data[0] - min) / range) * (height - pad * 2)\n const lastX = pad + (data.length - 1) * stepX\n const lastY = pad + (1 - (data[data.length - 1] - min) / range) * (height - pad * 2)\n\n const fillPath = fillOpacity > 0\n ? `M ${firstX},${height} L ${points.split(' ').join(' L ')} L ${lastX},${height} Z`\n : undefined\n\n return (\n <svg\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n className={cn('shrink-0', className)}\n aria-hidden=\"true\"\n >\n {fillOpacity > 0 && (\n <defs>\n <linearGradient id={gradId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={color} stopOpacity={fillOpacity} />\n <stop offset=\"100%\" stopColor={color} stopOpacity={0} />\n </linearGradient>\n </defs>\n )}\n {fillPath && (\n <path d={fillPath} fill={`url(#${gradId})`} />\n )}\n <polyline\n points={points}\n fill=\"none\"\n stroke={color}\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n {showDots && (\n <>\n <circle cx={firstX} cy={firstY} r={2} fill={color} />\n <circle cx={lastX} cy={lastY} r={2} fill={color} />\n </>\n )}\n </svg>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { type ElementType } from 'react'\nimport { motion, useReducedMotion } from 'framer-motion'\nimport { TrendingUp, TrendingDown } from 'lucide-react'\nimport { cn } from '../utils'\nimport { AnimatedCounter } from './animated-counter'\nimport { Sparkline } from './sparkline'\n\nexport interface MetricCardProps {\n /** Metric display label. */\n label: string\n /** Current numeric value. */\n value: number\n /** Custom formatter for the displayed value (e.g. fmtBytes, fmtBps). */\n format?: (n: number) => string\n /** Previous value for trend calculation. */\n previousValue?: number\n /** Interpret trend direction for coloring. */\n trendDirection?: 'up-good' | 'up-bad' | 'down-good' | 'down-bad'\n /** Lucide icon component to display. */\n icon?: ElementType\n /** Status determines left border accent color. */\n status?: 'ok' | 'warning' | 'critical'\n /** Recent values to render an inline sparkline. */\n sparklineData?: number[]\n className?: string\n}\n\nconst statusBorder: Record<string, string> = {\n ok: 'border-l-[hsl(var(--status-ok))]',\n warning: 'border-l-[hsl(var(--status-warning))]',\n critical: 'border-l-[hsl(var(--status-critical))]',\n}\n\nconst trendColors: Record<string, string> = {\n good: 'text-[hsl(var(--status-ok))]',\n bad: 'text-[hsl(var(--status-critical))]',\n}\n\n/**\n * @description A dashboard stat tile showing a metric value with animated counter,\n * trend indicator, optional sparkline, and status-colored left border.\n * Designed for monitoring dashboards and overview panels.\n */\nexport function MetricCard({\n label,\n value,\n format,\n previousValue,\n trendDirection,\n icon: Icon,\n status,\n sparklineData,\n className,\n}: MetricCardProps): React.JSX.Element {\n const reduced = useReducedMotion()\n\n // Trend calculation\n let trendPct: number | null = null\n let trendUp = false\n let trendColorKey: 'good' | 'bad' | null = null\n\n if (previousValue != null && previousValue !== 0) {\n trendPct = ((value - previousValue) / Math.abs(previousValue)) * 100\n trendUp = trendPct >= 0\n\n if (trendDirection) {\n const isUp = trendPct >= 0\n if (trendDirection === 'up-good') trendColorKey = isUp ? 'good' : 'bad'\n else if (trendDirection === 'up-bad') trendColorKey = isUp ? 'bad' : 'good'\n else if (trendDirection === 'down-good') trendColorKey = isUp ? 'bad' : 'good'\n else if (trendDirection === 'down-bad') trendColorKey = isUp ? 'good' : 'bad'\n }\n }\n\n return (\n <motion.div\n initial={reduced ? false : { opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.2, ease: 'easeOut' }}\n className={cn(\n 'relative rounded-2xl border border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-surface))]',\n 'p-5 shadow-sm border-l-[3px]',\n status ? statusBorder[status] : 'border-l-[hsl(var(--border-subtle))]',\n className,\n )}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2 mb-1\">\n {Icon && (\n <Icon className=\"size-4 shrink-0 text-[hsl(var(--text-tertiary))]\" />\n )}\n <span className=\"text-[0.75rem] font-medium text-[hsl(var(--text-secondary))] truncate\">\n {label}\n </span>\n </div>\n\n <div className=\"flex items-baseline gap-2\">\n <span className=\"text-2xl font-semibold text-[hsl(var(--text-primary))] tabular-nums\">\n <AnimatedCounter value={value} format={format} />\n </span>\n\n {trendPct != null && (\n <span\n className={cn(\n 'inline-flex items-center gap-0.5 text-[0.6875rem] font-medium tabular-nums',\n trendColorKey ? trendColors[trendColorKey] : 'text-[hsl(var(--text-tertiary))]',\n )}\n >\n {trendUp ? (\n <TrendingUp className=\"size-3\" />\n ) : (\n <TrendingDown className=\"size-3\" />\n )}\n {Math.abs(trendPct).toFixed(1)}%\n </span>\n )}\n </div>\n </div>\n\n {sparklineData && sparklineData.length >= 2 && (\n <Sparkline\n data={sparklineData}\n width={72}\n height={28}\n color={\n status === 'critical'\n ? 'hsl(var(--status-critical))'\n : status === 'warning'\n ? 'hsl(var(--status-warning))'\n : 'hsl(var(--brand-primary))'\n }\n fillOpacity={0.15}\n />\n )}\n </div>\n </motion.div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useEffect, useState } from 'react'\nimport { useReducedMotion } from 'framer-motion'\nimport { cn, clamp } from '../utils'\n\nexport interface UtilizationBarProps {\n /** Utilization value from 0 to 100. */\n value: number\n /** Warning and critical thresholds. */\n thresholds?: { warning: number; critical: number }\n /** Optional label displayed to the left. */\n label?: string\n /** Show percentage value text to the right. */\n showValue?: boolean\n /** Bar height size. */\n size?: 'sm' | 'md' | 'lg'\n /** Animate the fill width on mount. */\n animated?: boolean\n className?: string\n}\n\nconst sizeMap = {\n sm: 'h-1.5',\n md: 'h-2.5',\n lg: 'h-4',\n}\n\nfunction getBarColor(value: number, warning: number, critical: number): string {\n if (value >= critical) return 'hsl(var(--util-high))'\n if (value >= warning) return 'hsl(var(--util-medium))'\n return 'hsl(var(--util-low))'\n}\n\nfunction getTextClass(value: number, warning: number, critical: number): string {\n if (value >= critical) return 'text-[hsl(var(--status-critical))]'\n if (value >= warning) return 'text-[hsl(var(--status-warning))]'\n return 'text-[hsl(var(--text-secondary))]'\n}\n\n/**\n * @description A segmented horizontal bar showing resource utilization with\n * color-coded thresholds (green/yellow/red). Supports animated fill on mount.\n */\nexport function UtilizationBar({\n value: rawValue,\n thresholds,\n label,\n showValue = true,\n size = 'md',\n animated = true,\n className,\n}: UtilizationBarProps): React.JSX.Element {\n const reduced = useReducedMotion()\n const value = clamp(rawValue, 0, 100)\n const warning = thresholds?.warning ?? 70\n const critical = thresholds?.critical ?? 90\n\n const [displayWidth, setDisplayWidth] = useState(animated && !reduced ? 0 : value)\n\n useEffect(() => {\n if (!animated || reduced) {\n setDisplayWidth(value)\n return\n }\n // Trigger the animated width after mount\n const raf = requestAnimationFrame(() => setDisplayWidth(value))\n return () => cancelAnimationFrame(raf)\n }, [value, animated, reduced])\n\n const barColor = getBarColor(value, warning, critical)\n const textClass = getTextClass(value, warning, critical)\n\n return (\n <div className={cn('flex items-center gap-2', className)} title={`${value.toFixed(1)}%`}>\n {label && (\n <span className=\"text-[0.75rem] font-medium text-[hsl(var(--text-secondary))] shrink-0 min-w-[3rem]\">\n {label}\n </span>\n )}\n <div\n className={cn(\n 'flex-1 rounded-full bg-[hsl(var(--bg-elevated))] overflow-hidden',\n sizeMap[size],\n )}\n >\n <div\n className=\"h-full rounded-full\"\n style={{\n width: `${displayWidth}%`,\n backgroundColor: barColor,\n transition: animated && !reduced ? 'width 600ms cubic-bezier(0.4, 0, 0.2, 1)' : 'none',\n }}\n />\n </div>\n {showValue && (\n <span className={cn('text-[0.75rem] font-medium tabular-nums shrink-0 min-w-[2.5rem] text-right', textClass)}>\n {value.toFixed(0)}%\n </span>\n )}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useEffect, useState } from 'react'\nimport { useReducedMotion } from 'framer-motion'\nimport { cn, clamp } from '../utils'\n\nexport interface ThresholdGaugeProps {\n /** Gauge value from 0 to 100. */\n value: number\n /** Label displayed below the gauge. */\n label?: string\n /** Warning and critical thresholds. */\n thresholds?: { warning: number; critical: number }\n /** Gauge diameter in pixels. */\n size?: number\n /** Show the numeric value in the center. */\n showValue?: boolean\n /** Custom formatter for the center value. */\n format?: (n: number) => string\n className?: string\n}\n\nconst ARC_START = 135 // degrees, bottom-left\nconst ARC_SWEEP = 270 // degrees, total arc span\n\nfunction polarToCartesian(cx: number, cy: number, r: number, angleDeg: number) {\n const rad = ((angleDeg - 90) * Math.PI) / 180\n return { x: cx + r * Math.cos(rad), y: cy + r * Math.sin(rad) }\n}\n\nfunction describeArc(cx: number, cy: number, r: number, startAngle: number, endAngle: number): string {\n const start = polarToCartesian(cx, cy, r, endAngle)\n const end = polarToCartesian(cx, cy, r, startAngle)\n const largeArc = endAngle - startAngle > 180 ? 1 : 0\n return `M ${start.x} ${start.y} A ${r} ${r} 0 ${largeArc} 0 ${end.x} ${end.y}`\n}\n\nfunction getArcColor(pct: number, warning: number, critical: number): string {\n if (pct >= critical) return 'hsl(var(--util-high))'\n if (pct >= warning) return 'hsl(var(--util-medium))'\n return 'hsl(var(--util-low))'\n}\n\n/**\n * @description A semicircular SVG gauge with color-coded threshold zones\n * (green/yellow/red). Animates the arc on mount. Displays value in center.\n */\nexport function ThresholdGauge({\n value: rawValue,\n label,\n thresholds,\n size = 120,\n showValue = true,\n format,\n className,\n}: ThresholdGaugeProps): React.JSX.Element {\n const reduced = useReducedMotion()\n const value = clamp(rawValue, 0, 100)\n const warning = thresholds?.warning ?? 70\n const critical = thresholds?.critical ?? 90\n\n const [animatedValue, setAnimatedValue] = useState(reduced ? value : 0)\n\n useEffect(() => {\n if (reduced) {\n setAnimatedValue(value)\n return\n }\n const start = performance.now()\n const from = 0\n const dur = 600\n let raf: number\n\n function tick(now: number) {\n const progress = Math.min((now - start) / dur, 1)\n const eased = 1 - Math.pow(1 - progress, 3) // ease-out cubic\n setAnimatedValue(from + (value - from) * eased)\n if (progress < 1) raf = requestAnimationFrame(tick)\n }\n raf = requestAnimationFrame(tick)\n return () => cancelAnimationFrame(raf)\n }, [value, reduced])\n\n const cx = size / 2\n const cy = size / 2\n const r = (size - 16) / 2\n const strokeWidth = Math.max(6, size * 0.08)\n\n // Background zone arcs\n const warnAngle = ARC_START + (warning / 100) * ARC_SWEEP\n const critAngle = ARC_START + (critical / 100) * ARC_SWEEP\n const endAngle = ARC_START + ARC_SWEEP\n\n const greenArc = describeArc(cx, cy, r, ARC_START, warnAngle)\n const yellowArc = describeArc(cx, cy, r, warnAngle, critAngle)\n const redArc = describeArc(cx, cy, r, critAngle, endAngle)\n\n // Value arc\n const valueAngle = ARC_START + (animatedValue / 100) * ARC_SWEEP\n const valueArc = animatedValue > 0.5\n ? describeArc(cx, cy, r, ARC_START, valueAngle)\n : ''\n\n const displayText = format ? format(value) : `${Math.round(value)}%`\n\n return (\n <div className={cn('inline-flex flex-col items-center', className)}>\n <svg width={size} height={size * 0.75} viewBox={`0 0 ${size} ${size * 0.75}`} aria-hidden=\"true\">\n {/* Background zones */}\n <path d={greenArc} fill=\"none\" stroke=\"hsl(var(--util-low))\" strokeWidth={strokeWidth} strokeLinecap=\"round\" opacity={0.2} />\n <path d={yellowArc} fill=\"none\" stroke=\"hsl(var(--util-medium))\" strokeWidth={strokeWidth} strokeLinecap=\"round\" opacity={0.2} />\n <path d={redArc} fill=\"none\" stroke=\"hsl(var(--util-high))\" strokeWidth={strokeWidth} strokeLinecap=\"round\" opacity={0.2} />\n\n {/* Value arc */}\n {valueArc && (\n <path\n d={valueArc}\n fill=\"none\"\n stroke={getArcColor(animatedValue, warning, critical)}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n />\n )}\n\n {/* Center value */}\n {showValue && (\n <text\n x={cx}\n y={cy - 2}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n fill=\"hsl(var(--text-primary))\"\n fontSize={size * 0.2}\n fontWeight={600}\n fontFamily=\"inherit\"\n className=\"tabular-nums\"\n >\n {displayText}\n </text>\n )}\n </svg>\n {label && (\n <span className=\"text-[0.75rem] font-medium text-[hsl(var(--text-secondary))] mt-1\">\n {label}\n </span>\n )}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useRef } from 'react'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\n\nexport interface TimelineEvent {\n /** ISO 8601 timestamp. */\n time: string\n /** Short event label. */\n label: string\n /** Severity determines dot color. */\n severity: 'critical' | 'warning' | 'info' | 'ok'\n /** Optional detail text shown on click/hover. */\n detail?: string\n}\n\nexport interface SeverityTimelineProps {\n /** Events to display (most recent should be first). */\n events: TimelineEvent[]\n /** Maximum number of visible events. */\n maxVisible?: number\n /** Callback when an event dot/label is clicked. */\n onEventClick?: (event: TimelineEvent) => void\n className?: string\n}\n\nconst severityDot: Record<string, string> = {\n critical: 'bg-[hsl(var(--status-critical))]',\n warning: 'bg-[hsl(var(--status-warning))]',\n info: 'bg-[hsl(var(--brand-primary))]',\n ok: 'bg-[hsl(var(--status-ok))]',\n}\n\nconst severityRing: Record<string, string> = {\n critical: 'ring-[hsl(var(--status-critical))]/30',\n warning: 'ring-[hsl(var(--status-warning))]/30',\n info: 'ring-[hsl(var(--brand-primary))]/30',\n ok: 'ring-[hsl(var(--status-ok))]/30',\n}\n\nfunction formatTime(iso: string): string {\n try {\n const d = new Date(iso)\n return d.toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit' })\n } catch {\n return iso\n }\n}\n\n/**\n * @description A horizontal scrollable timeline showing events with severity-colored\n * dots. Most recent events appear on the left. Click events for detail callbacks.\n * Designed for alert timelines and incident history strips.\n */\nexport function SeverityTimeline({\n events,\n maxVisible = 20,\n onEventClick,\n className,\n}: SeverityTimelineProps): React.JSX.Element | null {\n const reduced = useReducedMotion()\n const scrollRef = useRef<HTMLDivElement>(null)\n const visible = events.slice(0, maxVisible)\n\n if (visible.length === 0) return null\n\n return (\n <div\n ref={scrollRef}\n className={cn(\n 'relative overflow-x-auto scrollbar-thin py-2',\n className,\n )}\n >\n <div className=\"flex items-start gap-0 min-w-max\">\n <AnimatePresence initial={false}>\n {visible.map((ev, i) => (\n <motion.div\n key={`${ev.time}-${i}`}\n initial={reduced ? false : { opacity: 0, scale: 0.8 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.8 }}\n transition={{ duration: 0.15, delay: reduced ? 0 : i * 0.03 }}\n className=\"flex flex-col items-center relative\"\n style={{ minWidth: 64 }}\n >\n {/* Connector line */}\n {i < visible.length - 1 && (\n <div\n className=\"absolute top-[11px] left-1/2 h-px bg-[hsl(var(--border-default))]\"\n style={{ width: 64 }}\n />\n )}\n\n {/* Dot */}\n <button\n type=\"button\"\n onClick={() => onEventClick?.(ev)}\n className={cn(\n 'relative z-10 size-[10px] rounded-full ring-4 shrink-0',\n 'transition-transform hover:scale-125 cursor-pointer',\n severityDot[ev.severity] ?? severityDot.info,\n severityRing[ev.severity] ?? severityRing.info,\n )}\n title={ev.detail ?? ev.label}\n aria-label={`${ev.label} — ${ev.severity}`}\n />\n\n {/* Label */}\n <span className=\"mt-1.5 text-[0.6875rem] font-medium text-[hsl(var(--text-primary))] text-center max-w-[56px] truncate\">\n {ev.label}\n </span>\n\n {/* Timestamp */}\n <span className=\"text-[0.625rem] text-[hsl(var(--text-tertiary))] tabular-nums\">\n {formatTime(ev.time)}\n </span>\n </motion.div>\n ))}\n </AnimatePresence>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { ArrowDown, Search } from 'lucide-react'\nimport { cn } from '../utils'\n\nexport interface LogEntry {\n /** ISO 8601 timestamp. */\n time: string\n /** Log level. */\n level: 'error' | 'warn' | 'info' | 'debug' | 'trace'\n /** Log message content. */\n message: string\n /** Optional source identifier. */\n source?: string\n}\n\nexport interface LogViewerProps {\n /** Log entries to display. */\n entries: LogEntry[]\n /** Maximum container height in pixels. */\n maxHeight?: number\n /** Auto-scroll to bottom on new entries. */\n autoScroll?: boolean\n /** Show timestamps column. */\n showTimestamps?: boolean\n /** Show level badge. */\n showLevel?: boolean\n /** Callback when a log entry is clicked. */\n onEntryClick?: (entry: LogEntry) => void\n className?: string\n}\n\nconst levelBorder: Record<string, string> = {\n error: 'border-l-[hsl(var(--status-critical))]',\n warn: 'border-l-[hsl(var(--status-warning))]',\n info: 'border-l-[hsl(var(--brand-primary))]',\n debug: 'border-l-[hsl(var(--text-tertiary))]',\n trace: 'border-l-[hsl(var(--text-disabled))]',\n}\n\nconst levelText: Record<string, string> = {\n error: 'text-[hsl(var(--status-critical))]',\n warn: 'text-[hsl(var(--status-warning))]',\n info: 'text-[hsl(var(--brand-primary))]',\n debug: 'text-[hsl(var(--text-tertiary))]',\n trace: 'text-[hsl(var(--text-disabled))]',\n}\n\nconst levelLabel: Record<string, string> = {\n error: 'ERR',\n warn: 'WRN',\n info: 'INF',\n debug: 'DBG',\n trace: 'TRC',\n}\n\nfunction formatTs(iso: string): string {\n try {\n const d = new Date(iso)\n return d.toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit', second: '2-digit' })\n } catch {\n return iso\n }\n}\n\n/**\n * @description A log stream viewer with severity-colored borders, auto-scroll,\n * search filtering, and a \"new entries\" indicator when scrolled up.\n * Designed for real-time log tailing in monitoring dashboards.\n */\nexport function LogViewer({\n entries,\n maxHeight = 400,\n autoScroll = true,\n showTimestamps = true,\n showLevel = true,\n onEntryClick,\n className,\n}: LogViewerProps): React.JSX.Element {\n const reduced = useReducedMotion()\n const containerRef = useRef<HTMLDivElement>(null)\n const [isAtBottom, setIsAtBottom] = useState(true)\n const [filter, setFilter] = useState('')\n const [newCount, setNewCount] = useState(0)\n const prevLenRef = useRef(entries.length)\n\n const checkAtBottom = useCallback(() => {\n const el = containerRef.current\n if (!el) return\n const atBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 32\n setIsAtBottom(atBottom)\n if (atBottom) setNewCount(0)\n }, [])\n\n // Auto-scroll on new entries\n useEffect(() => {\n const added = entries.length - prevLenRef.current\n prevLenRef.current = entries.length\n\n if (added > 0 && !isAtBottom) {\n setNewCount(prev => prev + added)\n }\n\n if (autoScroll && isAtBottom && containerRef.current) {\n containerRef.current.scrollTop = containerRef.current.scrollHeight\n }\n }, [entries.length, autoScroll, isAtBottom])\n\n const scrollToBottom = useCallback(() => {\n if (containerRef.current) {\n containerRef.current.scrollTop = containerRef.current.scrollHeight\n setNewCount(0)\n setIsAtBottom(true)\n }\n }, [])\n\n const lowerFilter = filter.toLowerCase()\n const filtered = filter\n ? entries.filter(e =>\n e.message.toLowerCase().includes(lowerFilter) ||\n e.source?.toLowerCase().includes(lowerFilter) ||\n e.level.includes(lowerFilter)\n )\n : entries\n\n return (\n <div className={cn('relative rounded-xl border border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-surface))] overflow-hidden', className)}>\n {/* Search bar */}\n <div className=\"flex items-center gap-2 px-3 py-2 border-b border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-elevated))]\">\n <Search className=\"size-3.5 text-[hsl(var(--text-tertiary))] shrink-0\" />\n <input\n type=\"text\"\n value={filter}\n onChange={e => setFilter(e.target.value)}\n placeholder=\"Filter logs...\"\n className=\"flex-1 bg-transparent text-[0.75rem] text-[hsl(var(--text-primary))] placeholder:text-[hsl(var(--text-disabled))] outline-none font-mono\"\n />\n {filter && (\n <span className=\"text-[0.6875rem] text-[hsl(var(--text-tertiary))] tabular-nums shrink-0\">\n {filtered.length} / {entries.length}\n </span>\n )}\n </div>\n\n {/* Log entries */}\n <div\n ref={containerRef}\n onScroll={checkAtBottom}\n className=\"overflow-y-auto\"\n style={{ maxHeight }}\n aria-live=\"polite\"\n aria-atomic=\"false\"\n >\n {filtered.map((entry, i) => (\n <div\n key={`${entry.time}-${i}`}\n onClick={() => onEntryClick?.(entry)}\n className={cn(\n 'flex items-start gap-2 px-3 py-1 border-l-2 font-mono text-[0.75rem] leading-5',\n 'hover:bg-[hsl(var(--bg-elevated))] transition-colors',\n onEntryClick && 'cursor-pointer',\n levelBorder[entry.level] ?? levelBorder.info,\n )}\n >\n {showTimestamps && (\n <span className=\"text-[hsl(var(--text-tertiary))] tabular-nums shrink-0 select-all\">\n {formatTs(entry.time)}\n </span>\n )}\n {showLevel && (\n <span className={cn('font-semibold shrink-0 w-[2.5ch]', levelText[entry.level] ?? levelText.info)}>\n {levelLabel[entry.level] ?? entry.level.toUpperCase().slice(0, 3)}\n </span>\n )}\n {entry.source && (\n <span className=\"text-[hsl(var(--text-secondary))] shrink-0\">\n [{entry.source}]\n </span>\n )}\n <span className=\"text-[hsl(var(--text-primary))] break-all min-w-0\">\n {entry.message}\n </span>\n </div>\n ))}\n </div>\n\n {/* New entries indicator */}\n <AnimatePresence>\n {newCount > 0 && !isAtBottom && (\n <motion.button\n type=\"button\"\n initial={reduced ? false : { opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: 8 }}\n transition={{ duration: 0.15 }}\n onClick={scrollToBottom}\n className={cn(\n 'absolute bottom-3 left-1/2 -translate-x-1/2 z-10',\n 'inline-flex items-center gap-1.5 px-3 py-1.5 rounded-full',\n 'bg-[hsl(var(--brand-primary))] text-[hsl(var(--text-on-brand))]',\n 'text-[0.6875rem] font-medium shadow-lg cursor-pointer',\n 'hover:opacity-90 transition-opacity',\n )}\n >\n <ArrowDown className=\"size-3\" />\n {newCount} new {newCount === 1 ? 'entry' : 'entries'}\n </motion.button>\n )}\n </AnimatePresence>\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { motion, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\n\nexport interface PortStatus {\n /** Unique port identifier. */\n id: string\n /** Display label (e.g. \"Gi1/0/1\"). */\n label: string\n /** Port operational status. */\n status: 'up' | 'down' | 'disabled' | 'error'\n /** Link speed display string (e.g. \"10G\", \"1G\"). */\n speed?: string\n /** Port utilization 0-100 percentage. */\n utilization?: number\n}\n\nexport interface PortStatusGridProps {\n /** Array of port status objects. */\n ports: PortStatus[]\n /** Number of columns. Defaults to auto-fit. */\n columns?: number\n /** Dot/rectangle size. */\n size?: 'sm' | 'md'\n /** Callback when a port is clicked. */\n onPortClick?: (port: PortStatus) => void\n className?: string\n}\n\nconst statusColor: Record<string, string> = {\n up: 'bg-[hsl(var(--status-ok))]',\n down: 'bg-[hsl(var(--status-critical))]',\n disabled: 'bg-[hsl(var(--text-disabled))]',\n error: 'bg-[hsl(var(--status-warning))]',\n}\n\nconst statusHover: Record<string, string> = {\n up: 'hover:ring-[hsl(var(--status-ok))]/40',\n down: 'hover:ring-[hsl(var(--status-critical))]/40',\n disabled: 'hover:ring-[hsl(var(--text-disabled))]/40',\n error: 'hover:ring-[hsl(var(--status-warning))]/40',\n}\n\nconst sizeClasses = {\n sm: 'size-3 rounded-[2px]',\n md: 'size-5 rounded-[3px]',\n}\n\n/**\n * @description A grid of small colored indicators representing network ports or\n * interfaces. Each port is colored by operational status with hover tooltips showing\n * label, speed, and utilization. Designed for switch/router faceplate visualizations.\n */\nexport function PortStatusGrid({\n ports,\n columns,\n size = 'sm',\n onPortClick,\n className,\n}: PortStatusGridProps): React.JSX.Element {\n const reduced = useReducedMotion()\n\n const gridStyle = columns\n ? { gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))` }\n : { gridTemplateColumns: `repeat(auto-fill, minmax(${size === 'sm' ? '12px' : '20px'}, 1fr))` }\n\n return (\n <div\n className={cn('grid gap-1', className)}\n style={gridStyle}\n role=\"grid\"\n aria-label=\"Port status grid\"\n >\n {ports.map((port, i) => {\n const tooltipParts = [port.label]\n if (port.speed) tooltipParts.push(port.speed)\n if (port.utilization != null) tooltipParts.push(`${port.utilization.toFixed(0)}%`)\n tooltipParts.push(port.status)\n\n return (\n <motion.button\n key={port.id}\n type=\"button\"\n initial={reduced ? false : { opacity: 0, scale: 0.5 }}\n animate={{ opacity: 1, scale: 1 }}\n transition={{ duration: 0.1, delay: reduced ? 0 : Math.min(i * 0.008, 0.4) }}\n onClick={() => onPortClick?.(port)}\n title={tooltipParts.join(' \\u00b7 ')}\n aria-label={`${port.label}: ${port.status}`}\n className={cn(\n 'transition-all cursor-pointer ring-0 hover:ring-2',\n sizeClasses[size],\n statusColor[port.status] ?? statusColor.disabled,\n statusHover[port.status] ?? statusHover.disabled,\n )}\n />\n )\n })}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { motion, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\n\nexport interface TimeRange {\n /** Display label (e.g. \"1h\", \"24h\"). */\n label: string\n /** Unique value identifier. */\n value: string\n /** Duration in seconds represented by this range. */\n seconds: number\n}\n\nexport interface TimeRangeSelectorProps {\n /** Currently selected range value. */\n value: string\n /** Callback when a range is selected. */\n onChange: (value: string, range: TimeRange) => void\n /** Custom range options. Defaults to 1h, 6h, 24h, 7d, 30d. */\n ranges?: TimeRange[]\n className?: string\n}\n\nconst defaultRanges: TimeRange[] = [\n { label: '1h', value: '1h', seconds: 3600 },\n { label: '6h', value: '6h', seconds: 21600 },\n { label: '24h', value: '24h', seconds: 86400 },\n { label: '7d', value: '7d', seconds: 604800 },\n { label: '30d', value: '30d', seconds: 2592000 },\n]\n\n/**\n * @description A compact horizontal pill-group time range selector for dashboards.\n * Active selection is highlighted with a sliding indicator using the brand color.\n * Common in monitoring dashboards for controlling chart time windows.\n */\nexport function TimeRangeSelector({\n value,\n onChange,\n ranges = defaultRanges,\n className,\n}: TimeRangeSelectorProps): React.JSX.Element {\n const reduced = useReducedMotion()\n\n return (\n <div\n className={cn(\n 'inline-flex items-center rounded-lg bg-[hsl(var(--bg-elevated))] p-0.5',\n 'border border-[hsl(var(--border-subtle))]',\n className,\n )}\n role=\"radiogroup\"\n aria-label=\"Time range\"\n >\n {ranges.map(range => {\n const isActive = range.value === value\n return (\n <button\n key={range.value}\n type=\"button\"\n role=\"radio\"\n aria-checked={isActive}\n onClick={() => onChange(range.value, range)}\n className={cn(\n 'relative px-3 py-1 text-[0.75rem] font-medium rounded-md cursor-pointer',\n 'transition-colors duration-150',\n isActive\n ? 'text-[hsl(var(--text-on-brand))]'\n : 'text-[hsl(var(--text-secondary))] hover:text-[hsl(var(--text-primary))]',\n )}\n >\n {isActive && (\n <motion.span\n layoutId=\"time-range-active\"\n className=\"absolute inset-0 rounded-md bg-[hsl(var(--brand-primary))]\"\n transition={reduced ? { duration: 0 } : { type: 'spring', stiffness: 400, damping: 30 }}\n />\n )}\n <span className=\"relative z-10\">{range.label}</span>\n </button>\n )\n })}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { type ElementType } from 'react'\nimport { motion, useReducedMotion } from 'framer-motion'\nimport { ChevronRight } from 'lucide-react'\nimport { cn } from '../utils'\n\nexport interface StageInfo {\n /** Stage display name. */\n name: string\n /** Current stage status. */\n status: 'active' | 'idle' | 'error' | 'disabled'\n /** Optional metric to display inside the stage box. */\n metric?: { label: string; value: string }\n /** Lucide icon component for the stage. */\n icon?: ElementType\n}\n\nexport interface PipelineStageProps {\n /** Ordered array of processing stages. */\n stages: StageInfo[]\n /** Callback when a stage is clicked. */\n onStageClick?: (stage: StageInfo, index: number) => void\n className?: string\n}\n\nconst statusDot: Record<string, string> = {\n active: 'bg-[hsl(var(--status-ok))]',\n idle: 'bg-[hsl(var(--text-tertiary))]',\n error: 'bg-[hsl(var(--status-critical))]',\n disabled: 'bg-[hsl(var(--text-disabled))]',\n}\n\nconst statusBorder: Record<string, string> = {\n active: 'border-[hsl(var(--status-ok))]/30',\n idle: 'border-[hsl(var(--border-default))]',\n error: 'border-[hsl(var(--status-critical))]/30',\n disabled: 'border-[hsl(var(--border-subtle))]',\n}\n\nconst statusBg: Record<string, string> = {\n active: 'bg-[hsl(var(--bg-surface))]',\n idle: 'bg-[hsl(var(--bg-surface))]',\n error: 'bg-[hsl(var(--status-critical))]/5',\n disabled: 'bg-[hsl(var(--bg-elevated))]',\n}\n\n/**\n * @description A horizontal data pipeline visualization showing processing stages\n * connected by animated chevron arrows. Each stage displays name, status dot,\n * optional icon, and optional metric. Designed for data pipeline monitoring views.\n */\nexport function PipelineStage({\n stages,\n onStageClick,\n className,\n}: PipelineStageProps): React.JSX.Element {\n const reduced = useReducedMotion()\n\n return (\n <div className={cn('flex items-center gap-0 overflow-x-auto', className)}>\n {stages.map((stage, i) => {\n const Icon = stage.icon\n const isDisabled = stage.status === 'disabled'\n\n return (\n <div key={`${stage.name}-${i}`} className=\"flex items-center shrink-0\">\n {/* Arrow connector */}\n {i > 0 && (\n <motion.div\n initial={reduced ? false : { opacity: 0, x: -4 }}\n animate={{ opacity: 1, x: 0 }}\n transition={{ duration: 0.15, delay: reduced ? 0 : i * 0.05 }}\n className=\"px-1\"\n >\n <ChevronRight className=\"size-4 text-[hsl(var(--text-tertiary))]\" />\n </motion.div>\n )}\n\n {/* Stage box */}\n <motion.button\n type=\"button\"\n initial={reduced ? false : { opacity: 0, y: 6 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.2, delay: reduced ? 0 : i * 0.06 }}\n onClick={() => onStageClick?.(stage, i)}\n disabled={isDisabled && !onStageClick}\n className={cn(\n 'flex flex-col items-start gap-1.5 px-4 py-3 rounded-xl border',\n 'transition-all min-w-[120px]',\n statusBorder[stage.status],\n statusBg[stage.status],\n onStageClick && !isDisabled && 'cursor-pointer hover:bg-[hsl(var(--bg-elevated))]',\n isDisabled && 'opacity-50',\n )}\n >\n {/* Header row: icon + name + status dot */}\n <div className=\"flex items-center gap-2 w-full\">\n {Icon && (\n <Icon className={cn('size-3.5 shrink-0', isDisabled ? 'text-[hsl(var(--text-disabled))]' : 'text-[hsl(var(--text-secondary))]')} />\n )}\n <span className={cn(\n 'text-[0.8125rem] font-medium truncate',\n isDisabled ? 'text-[hsl(var(--text-disabled))]' : 'text-[hsl(var(--text-primary))]',\n )}>\n {stage.name}\n </span>\n <span\n className={cn(\n 'size-2 rounded-full shrink-0 ml-auto',\n statusDot[stage.status],\n stage.status === 'active' && 'animate-pulse',\n )}\n />\n </div>\n\n {/* Metric */}\n {stage.metric && (\n <div className=\"flex items-baseline gap-1\">\n <span className=\"text-[0.875rem] font-semibold text-[hsl(var(--text-primary))] tabular-nums\">\n {stage.metric.value}\n </span>\n <span className=\"text-[0.625rem] text-[hsl(var(--text-tertiary))]\">\n {stage.metric.label}\n </span>\n </div>\n )}\n </motion.button>\n </div>\n )\n })}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { motion, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\n\nexport interface DayStatus {\n /** Date in YYYY-MM-DD format. */\n date: string\n /** Operational status for that day. */\n status: 'ok' | 'degraded' | 'outage' | 'no-data'\n /** Uptime percentage for that day (0-100). */\n uptime?: number\n}\n\nexport interface UptimeTrackerProps {\n /** Array of day-status entries (oldest first). */\n days: DayStatus[]\n /** Show overall uptime percentage. */\n showPercentage?: boolean\n /** Optional label displayed above the bar. */\n label?: string\n /** Callback when a day bar is clicked. */\n onDayClick?: (day: DayStatus) => void\n className?: string\n}\n\nconst dayColor: Record<string, string> = {\n ok: 'bg-[hsl(var(--status-ok))]',\n degraded: 'bg-[hsl(var(--status-warning))]',\n outage: 'bg-[hsl(var(--status-critical))]',\n 'no-data': 'bg-[hsl(var(--text-disabled))]',\n}\n\nconst dayHover: Record<string, string> = {\n ok: 'hover:bg-[hsl(var(--status-ok))]/80',\n degraded: 'hover:bg-[hsl(var(--status-warning))]/80',\n outage: 'hover:bg-[hsl(var(--status-critical))]/80',\n 'no-data': 'hover:bg-[hsl(var(--text-disabled))]/80',\n}\n\nfunction formatDate(dateStr: string): string {\n try {\n const d = new Date(dateStr + 'T00:00:00')\n return d.toLocaleDateString(undefined, { month: 'short', day: 'numeric' })\n } catch {\n return dateStr\n }\n}\n\n/**\n * @description A row of thin vertical bars representing daily uptime status,\n * inspired by GitHub/Statuspage uptime indicators. Each bar is colored by\n * operational status (ok/degraded/outage/no-data). Hover shows date and uptime\n * percentage. Designed for SLA and availability tracking displays.\n */\nexport function UptimeTracker({\n days,\n showPercentage = true,\n label,\n onDayClick,\n className,\n}: UptimeTrackerProps): React.JSX.Element {\n const reduced = useReducedMotion()\n\n // Calculate overall uptime\n const daysWithUptime = days.filter(d => d.uptime != null)\n const overallUptime = daysWithUptime.length > 0\n ? daysWithUptime.reduce((sum, d) => sum + (d.uptime ?? 0), 0) / daysWithUptime.length\n : null\n\n return (\n <div className={cn('space-y-2', className)}>\n {/* Header */}\n {(label || showPercentage) && (\n <div className=\"flex items-center justify-between\">\n {label && (\n <span className=\"text-[0.8125rem] font-medium text-[hsl(var(--text-primary))]\">\n {label}\n </span>\n )}\n {showPercentage && overallUptime != null && (\n <span className={cn(\n 'text-[0.8125rem] font-semibold tabular-nums',\n overallUptime >= 99.9\n ? 'text-[hsl(var(--status-ok))]'\n : overallUptime >= 99\n ? 'text-[hsl(var(--status-warning))]'\n : 'text-[hsl(var(--status-critical))]',\n )}>\n {overallUptime.toFixed(2)}% uptime\n </span>\n )}\n </div>\n )}\n\n {/* Day bars */}\n <div className=\"flex items-end gap-px h-8\">\n {days.map((day, i) => {\n const tooltip = [\n formatDate(day.date),\n day.uptime != null ? `${day.uptime.toFixed(1)}%` : day.status,\n ].join(' \\u2014 ')\n\n return (\n <motion.button\n key={day.date}\n type=\"button\"\n initial={reduced ? false : { scaleY: 0 }}\n animate={{ scaleY: 1 }}\n transition={{ duration: 0.15, delay: reduced ? 0 : Math.min(i * 0.005, 0.3) }}\n style={{ originY: '100%' }}\n onClick={() => onDayClick?.(day)}\n title={tooltip}\n aria-label={tooltip}\n className={cn(\n 'flex-1 min-w-[2px] h-full rounded-[1px] transition-opacity cursor-pointer',\n dayColor[day.status] ?? dayColor['no-data'],\n dayHover[day.status] ?? dayHover['no-data'],\n )}\n />\n )\n })}\n </div>\n\n {/* Date range labels */}\n {days.length > 0 && (\n <div className=\"flex items-center justify-between\">\n <span className=\"text-[0.625rem] text-[hsl(var(--text-tertiary))]\">\n {formatDate(days[0].date)}\n </span>\n <span className=\"text-[0.625rem] text-[hsl(var(--text-tertiary))]\">\n {formatDate(days[days.length - 1].date)}\n </span>\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\nimport { Copy, Check } from 'lucide-react'\n\nexport interface StreamingTextProps {\n /** The text content — grows as tokens arrive. */\n text: string\n /** Whether tokens are still arriving. */\n isStreaming: boolean\n /** Cursor blink speed in ms. */\n speed?: number\n /** Show a blinking cursor at the end while streaming. */\n showCursor?: boolean\n /** Called when isStreaming transitions from true to false. */\n onComplete?: () => void\n className?: string\n}\n\n/** Simple inline formatter: **bold** and `code` spans. */\nfunction formatSegments(text: string): React.ReactNode[] {\n const segments: React.ReactNode[] = []\n const regex = /(\\*\\*(.+?)\\*\\*|`([^`]+?)`)/g\n let lastIndex = 0\n let match: RegExpExecArray | null\n\n while ((match = regex.exec(text)) !== null) {\n if (match.index > lastIndex) {\n segments.push(text.slice(lastIndex, match.index))\n }\n if (match[2]) {\n segments.push(\n <strong key={match.index} className=\"font-semibold\">\n {match[2]}\n </strong>\n )\n } else if (match[3]) {\n segments.push(\n <code\n key={match.index}\n className=\"rounded px-1 py-0.5 text-[0.875em] bg-[hsl(var(--bg-overlay))] text-[hsl(var(--brand-primary))] font-mono\"\n >\n {match[3]}\n </code>\n )\n }\n lastIndex = match.index + match[0].length\n }\n\n if (lastIndex < text.length) {\n segments.push(text.slice(lastIndex))\n }\n\n return segments\n}\n\n/**\n * @description Displays AI/LLM streaming text responses with a blinking cursor,\n * markdown-like formatting (bold, code), copy button on completion, and auto-scroll.\n */\nexport function StreamingText({\n text,\n isStreaming,\n speed = 500,\n showCursor = true,\n onComplete,\n className,\n}: StreamingTextProps): React.JSX.Element {\n const reduced = useReducedMotion()\n const containerRef = useRef<HTMLDivElement>(null)\n const prevStreamingRef = useRef(isStreaming)\n const [copied, setCopied] = useState(false)\n const copyTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n useEffect(() => () => { if (copyTimerRef.current) clearTimeout(copyTimerRef.current) }, [])\n\n useEffect(() => {\n if (prevStreamingRef.current && !isStreaming) {\n onComplete?.()\n }\n prevStreamingRef.current = isStreaming\n }, [isStreaming, onComplete])\n\n useEffect(() => {\n if (isStreaming && containerRef.current) {\n const el = containerRef.current\n el.scrollTop = el.scrollHeight\n }\n }, [text, isStreaming])\n\n const handleCopy = useCallback(() => {\n void navigator.clipboard.writeText(text).then(() => {\n setCopied(true)\n if (copyTimerRef.current) clearTimeout(copyTimerRef.current)\n copyTimerRef.current = setTimeout(() => setCopied(false), 2000)\n })\n }, [text])\n\n const formatted = formatSegments(text)\n\n return (\n <div className={cn('relative', className)}>\n <div\n ref={containerRef}\n className=\"overflow-y-auto text-[hsl(var(--text-primary))] leading-relaxed whitespace-pre-wrap break-words\"\n >\n {formatted}\n {showCursor && isStreaming && (\n <span\n className=\"inline-block w-[2px] h-[1.1em] align-text-bottom ml-0.5 bg-[hsl(var(--brand-primary))]\"\n style={\n reduced\n ? { opacity: 1 }\n : {\n animation: `streaming-cursor-blink ${speed}ms step-end infinite`,\n }\n }\n aria-hidden=\"true\"\n />\n )}\n <AnimatePresence>\n {showCursor && !isStreaming && text.length > 0 && (\n <motion.span\n className=\"inline-block w-[2px] h-[1.1em] align-text-bottom ml-0.5 bg-[hsl(var(--brand-primary))]\"\n initial={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: reduced ? 0 : 0.4 }}\n />\n )}\n </AnimatePresence>\n </div>\n\n <AnimatePresence>\n {!isStreaming && text.length > 0 && (\n <motion.button\n type=\"button\"\n initial={{ opacity: 0, scale: 0.8 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.8 }}\n transition={{ duration: reduced ? 0 : 0.2 }}\n onClick={handleCopy}\n className={cn(\n 'absolute top-0 right-0 p-1.5 rounded-lg',\n 'text-[hsl(var(--text-tertiary))] hover:text-[hsl(var(--text-primary))]',\n 'bg-[hsl(var(--bg-surface))]/80 hover:bg-[hsl(var(--bg-elevated))]',\n 'transition-colors duration-150 cursor-pointer',\n )}\n aria-label={copied ? 'Copied' : 'Copy to clipboard'}\n >\n {copied ? <Check className=\"size-3.5\" /> : <Copy className=\"size-3.5\" />}\n </motion.button>\n )}\n </AnimatePresence>\n\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { motion, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\n\nexport interface TypingIndicatorProps {\n /** Label text, e.g. \"AI is thinking\" or \"3 users typing\". */\n label?: string\n /** Animation variant. */\n variant?: 'dots' | 'pulse' | 'text'\n /** Size preset. */\n size?: 'sm' | 'md'\n className?: string\n}\n\nconst DOT_SIZES = { sm: 'size-1.5', md: 'size-2' } as const\nconst FONT_SIZES = { sm: 'text-xs', md: 'text-sm' } as const\n\n/**\n * @description A \"someone is typing\" indicator with three variants:\n * bouncing dots, pulsing ring, or animated ellipsis text. Respects reduced motion.\n */\nexport function TypingIndicator({\n label,\n variant = 'dots',\n size = 'md',\n className,\n}: TypingIndicatorProps): React.JSX.Element {\n const reduced = useReducedMotion()\n\n return (\n <div\n className={cn(\n 'inline-flex items-center gap-2 text-[hsl(var(--text-secondary))]',\n FONT_SIZES[size],\n className,\n )}\n role=\"status\"\n aria-label={label ?? 'Typing'}\n >\n {variant === 'dots' && <BouncingDots size={size} reduced={!!reduced} />}\n {variant === 'pulse' && <PulseRing size={size} reduced={!!reduced} />}\n {variant === 'text' && <AnimatedEllipsis reduced={!!reduced} />}\n {label && <span>{label}</span>}\n </div>\n )\n}\n\nfunction BouncingDots({ size, reduced }: { size: 'sm' | 'md'; reduced: boolean }): React.JSX.Element {\n const dotClass = cn('rounded-full bg-current', DOT_SIZES[size])\n\n if (reduced) {\n return (\n <span className=\"inline-flex items-center gap-1\">\n <span className={dotClass} />\n <span className={dotClass} />\n <span className={dotClass} />\n </span>\n )\n }\n\n return (\n <span className=\"inline-flex items-center gap-1\">\n {[0, 1, 2].map((i) => (\n <motion.span\n key={i}\n className={dotClass}\n animate={{ y: [0, -4, 0] }}\n transition={{\n duration: 0.6,\n repeat: Infinity,\n delay: i * 0.15,\n ease: 'easeInOut',\n }}\n />\n ))}\n </span>\n )\n}\n\nfunction PulseRing({ size, reduced }: { size: 'sm' | 'md'; reduced: boolean }): React.JSX.Element {\n const ringSize = size === 'sm' ? 'size-4' : 'size-5'\n const dotSize = size === 'sm' ? 'size-2' : 'size-2.5'\n\n return (\n <span className={cn('relative inline-flex items-center justify-center', ringSize)}>\n {!reduced && (\n <motion.span\n className={cn('absolute inset-0 rounded-full border border-current')}\n animate={{ scale: [1, 1.8], opacity: [0.6, 0] }}\n transition={{ duration: 1.2, repeat: Infinity, ease: 'easeOut' }}\n />\n )}\n <span className={cn('rounded-full bg-current', dotSize)} />\n </span>\n )\n}\n\nfunction AnimatedEllipsis({ reduced }: { reduced: boolean }): React.JSX.Element {\n if (reduced) {\n return <span>...</span>\n }\n\n return (\n <span className=\"inline-flex w-[1.2em]\">\n {[0, 1, 2].map((i) => (\n <motion.span\n key={i}\n animate={{ opacity: [0, 1, 0] }}\n transition={{\n duration: 1.2,\n repeat: Infinity,\n delay: i * 0.3,\n ease: 'easeInOut',\n }}\n >\n .\n </motion.span>\n ))}\n </span>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useState } from 'react'\nimport { motion, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\n\nexport interface ConfidenceBarProps {\n /** Confidence value between 0 and 1 (probability). */\n value: number\n /** Optional label displayed before the bar. */\n label?: string\n /** Show percentage text beside the bar. */\n showPercentage?: boolean\n /** Thresholds for color zones. */\n thresholds?: { low: number; medium: number }\n /** Size preset. */\n size?: 'sm' | 'md'\n className?: string\n}\n\nconst SIZE_CLASSES = {\n sm: 'h-1.5',\n md: 'h-2.5',\n} as const\n\nfunction getBarColor(value: number, thresholds: { low: number; medium: number }): string {\n if (value < thresholds.low) return 'bg-[hsl(var(--status-critical))]'\n if (value < thresholds.medium) return 'bg-[hsl(var(--status-warning))]'\n return 'bg-[hsl(var(--status-ok))]'\n}\n\nfunction getTextColor(value: number, thresholds: { low: number; medium: number }): string {\n if (value < thresholds.low) return 'text-[hsl(var(--status-critical))]'\n if (value < thresholds.medium) return 'text-[hsl(var(--status-warning))]'\n return 'text-[hsl(var(--status-ok))]'\n}\n\n/**\n * @description A horizontal confidence/probability bar colored by threshold zones:\n * red (<low), yellow (low-medium), green (>medium). Animates fill on mount.\n */\nexport function ConfidenceBar({\n value,\n label,\n showPercentage = true,\n thresholds = { low: 0.3, medium: 0.7 },\n size = 'md',\n className,\n}: ConfidenceBarProps): React.JSX.Element {\n const reduced = useReducedMotion()\n const [hovered, setHovered] = useState(false)\n const clamped = Math.min(1, Math.max(0, value))\n const pct = clamped * 100\n const barColor = getBarColor(clamped, thresholds)\n const textColor = getTextColor(clamped, thresholds)\n\n return (\n <div\n className={cn('w-full', className)}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n >\n {/* Label + percentage row */}\n {(label || showPercentage) && (\n <div className=\"flex items-center justify-between mb-1\">\n {label && (\n <span className=\"text-xs font-medium text-[hsl(var(--text-secondary))]\">\n {label}\n </span>\n )}\n {showPercentage && (\n <span className={cn('text-xs font-medium tabular-nums', textColor)}>\n {pct.toFixed(1)}%\n </span>\n )}\n </div>\n )}\n\n {/* Track */}\n <div\n className={cn(\n 'relative w-full overflow-hidden rounded-full bg-[hsl(var(--bg-overlay))]',\n SIZE_CLASSES[size],\n )}\n role=\"meter\"\n aria-valuenow={pct}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={label ?? `Confidence: ${pct.toFixed(1)}%`}\n >\n {reduced ? (\n <div\n className={cn('h-full rounded-full', barColor)}\n style={{ width: `${pct}%` }}\n />\n ) : (\n <motion.div\n className={cn('h-full rounded-full', barColor)}\n initial={{ width: 0 }}\n animate={{ width: `${pct}%` }}\n transition={{ type: 'spring', stiffness: 80, damping: 20 }}\n />\n )}\n </div>\n\n {/* Tooltip on hover showing exact value */}\n {hovered && (\n <div className=\"mt-1 text-[10px] text-[hsl(var(--text-tertiary))] tabular-nums\">\n {clamped.toFixed(4)} ({pct.toFixed(2)}%)\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\nimport { Pause, Play, ChevronUp } from 'lucide-react'\n\nexport interface FeedItem {\n id: string\n content: React.ReactNode\n timestamp: string | Date\n type?: 'info' | 'success' | 'warning' | 'error'\n}\n\nexport interface LiveFeedProps {\n /** Array of feed items, newest first. */\n items: FeedItem[]\n /** Maximum visible items before oldest are faded out. */\n maxVisible?: number\n /** Show relative timestamps beside each item. */\n showTimestamps?: boolean\n /** Auto-scroll to newest items. */\n autoScroll?: boolean\n /** Callback when an item is clicked. */\n onItemClick?: (item: FeedItem) => void\n /** Message shown when items array is empty. */\n emptyMessage?: string\n className?: string\n}\n\nconst TYPE_BORDER: Record<string, string> = {\n info: 'border-l-[hsl(var(--brand-secondary))]',\n success: 'border-l-[hsl(var(--status-ok))]',\n warning: 'border-l-[hsl(var(--status-warning))]',\n error: 'border-l-[hsl(var(--status-critical))]',\n}\n\nfunction relativeTime(ts: string | Date): string {\n const diff = (Date.now() - new Date(ts).getTime()) / 1000\n if (diff < 5) return 'now'\n if (diff < 60) return `${Math.floor(diff)}s ago`\n if (diff < 3600) return `${Math.floor(diff / 60)}m ago`\n if (diff < 86400) return `${Math.floor(diff / 3600)}h ago`\n return `${Math.floor(diff / 86400)}d ago`\n}\n\n/**\n * @description A real-time event feed with animated item entry, auto-scroll,\n * pause/resume controls, type-colored borders, and relative timestamps.\n */\nexport function LiveFeed({\n items,\n maxVisible = 50,\n showTimestamps = true,\n autoScroll: autoScrollProp = true,\n onItemClick,\n emptyMessage = 'No events yet',\n className,\n}: LiveFeedProps): React.JSX.Element {\n const reduced = useReducedMotion()\n const scrollRef = useRef<HTMLDivElement>(null)\n const [paused, setPaused] = useState(false)\n const [userScrolled, setUserScrolled] = useState(false)\n const [newCount, setNewCount] = useState(0)\n const prevCountRef = useRef(items.length)\n\n // Track new items arriving while scrolled away\n useEffect(() => {\n const diff = items.length - prevCountRef.current\n if (diff > 0 && (paused || userScrolled)) {\n setNewCount((c) => c + diff)\n }\n prevCountRef.current = items.length\n }, [items.length, paused, userScrolled])\n\n // Auto-scroll\n useEffect(() => {\n if (autoScrollProp && !paused && !userScrolled && scrollRef.current) {\n scrollRef.current.scrollTop = 0\n }\n }, [items, autoScrollProp, paused, userScrolled])\n\n const handleScroll = useCallback(() => {\n if (!scrollRef.current) return\n const { scrollTop } = scrollRef.current\n // scrollTop is 0 at top (newest), positive when scrolled down (older)\n setUserScrolled(scrollTop > 40)\n }, [])\n\n const scrollToTop = useCallback(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollTop = 0\n }\n setUserScrolled(false)\n setNewCount(0)\n }, [])\n\n const togglePause = useCallback(() => {\n setPaused((p) => {\n if (p) {\n setNewCount(0)\n setUserScrolled(false)\n }\n return !p\n })\n }, [])\n\n // Relative timestamp updater\n const [, setTick] = useState(0)\n useEffect(() => {\n if (!showTimestamps) return\n const id = setInterval(() => setTick((t) => t + 1), 10_000)\n return () => clearInterval(id)\n }, [showTimestamps])\n\n const visibleItems = items.slice(0, maxVisible)\n\n return (\n <div className={cn('relative flex flex-col', className)}>\n {/* Controls bar */}\n <div className=\"flex items-center justify-between px-3 py-2 border-b border-[hsl(var(--border-subtle))]\">\n <span className=\"text-xs font-medium text-[hsl(var(--text-secondary))]\">\n {items.length} events\n </span>\n <button\n type=\"button\"\n onClick={togglePause}\n className={cn(\n 'inline-flex items-center gap-1 px-2 py-1 rounded-md text-xs font-medium cursor-pointer',\n 'text-[hsl(var(--text-secondary))] hover:text-[hsl(var(--text-primary))]',\n 'hover:bg-[hsl(var(--bg-overlay))] transition-colors duration-150',\n )}\n aria-label={paused ? 'Resume auto-scroll' : 'Pause auto-scroll'}\n >\n {paused ? <Play className=\"size-3\" /> : <Pause className=\"size-3\" />}\n {paused ? 'Resume' : 'Pause'}\n </button>\n </div>\n\n {/* Feed container */}\n <div\n ref={scrollRef}\n onScroll={handleScroll}\n className=\"flex-1 overflow-y-auto\"\n aria-live=\"polite\"\n aria-atomic=\"false\"\n >\n {visibleItems.length === 0 ? (\n <div className=\"flex items-center justify-center py-12 text-sm text-[hsl(var(--text-tertiary))]\">\n {emptyMessage}\n </div>\n ) : (\n <AnimatePresence initial={false}>\n {visibleItems.map((item) => (\n <motion.div\n key={item.id}\n layout={!reduced}\n initial={reduced ? undefined : { opacity: 0, y: -12, height: 0 }}\n animate={{ opacity: 1, y: 0, height: 'auto' }}\n exit={reduced ? undefined : { opacity: 0, height: 0 }}\n transition={{ duration: reduced ? 0 : 0.2 }}\n >\n <div\n role={onItemClick ? 'button' : undefined}\n tabIndex={onItemClick ? 0 : undefined}\n onClick={onItemClick ? () => onItemClick(item) : undefined}\n onKeyDown={\n onItemClick\n ? (e) => { if (e.key === 'Enter' || e.key === ' ') onItemClick(item) }\n : undefined\n }\n className={cn(\n 'flex items-start gap-3 px-3 py-2.5 border-l-2',\n 'border-b border-b-[hsl(var(--border-subtle))]',\n TYPE_BORDER[item.type ?? 'info'],\n onItemClick && 'cursor-pointer hover:bg-[hsl(var(--bg-surface))] transition-colors duration-100',\n )}\n >\n <div className=\"flex-1 min-w-0 text-sm text-[hsl(var(--text-primary))]\">\n {item.content}\n </div>\n {showTimestamps && (\n <span\n className=\"shrink-0 text-[10px] tabular-nums text-[hsl(var(--text-tertiary))] mt-0.5\"\n title={new Date(item.timestamp).toISOString()}\n >\n {relativeTime(item.timestamp)}\n </span>\n )}\n </div>\n </motion.div>\n ))}\n </AnimatePresence>\n )}\n </div>\n\n {/* \"N new items\" floating badge */}\n <AnimatePresence>\n {newCount > 0 && (userScrolled || paused) && (\n <motion.button\n type=\"button\"\n initial={reduced ? undefined : { opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={reduced ? undefined : { opacity: 0, y: 8 }}\n transition={{ duration: reduced ? 0 : 0.15 }}\n onClick={scrollToTop}\n className={cn(\n 'absolute top-12 left-1/2 -translate-x-1/2 z-10',\n 'inline-flex items-center gap-1 px-3 py-1.5 rounded-full',\n 'bg-[hsl(var(--brand-primary))] text-white text-xs font-medium',\n 'shadow-lg cursor-pointer hover:brightness-110 transition-[filter] duration-100',\n )}\n >\n <ChevronUp className=\"size-3\" />\n {newCount} new {newCount === 1 ? 'item' : 'items'}\n </motion.button>\n )}\n </AnimatePresence>\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useMemo, useState } from 'react'\nimport { cn } from '../utils'\n\nexport interface DiffViewerProps {\n /** The original text. */\n oldValue: string\n /** The modified text. */\n newValue: string\n /** Display mode. */\n mode?: 'inline' | 'side-by-side'\n /** Language hint for potential styling. */\n language?: string\n /** Show line numbers in the gutter. */\n showLineNumbers?: boolean\n className?: string\n}\n\ntype LineType = 'added' | 'removed' | 'unchanged'\n\ninterface DiffLine {\n type: LineType\n content: string\n oldLineNo?: number\n newLineNo?: number\n}\n\nconst MAX_LINES = 2000\n\n/** Simple line-by-line diff using longest common subsequence. */\nfunction computeDiff(oldLines: string[], newLines: string[]): DiffLine[] {\n // Fall back to simple line-by-line comparison for large inputs\n if (oldLines.length > MAX_LINES || newLines.length > MAX_LINES) {\n const result: DiffLine[] = oldLines.map((l, i) => ({\n type: (l === (newLines[i] ?? '') ? 'unchanged' : 'removed') as LineType,\n content: l,\n oldLineNo: i + 1,\n newLineNo: i + 1,\n }))\n for (let i = oldLines.length; i < newLines.length; i++) {\n result.push({\n type: 'added' as LineType,\n content: newLines[i],\n oldLineNo: undefined,\n newLineNo: i + 1,\n })\n }\n return result\n }\n\n // Build LCS table\n const m = oldLines.length\n const n = newLines.length\n const dp: number[][] = Array.from({ length: m + 1 }, () => new Array<number>(n + 1).fill(0))\n\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n if (oldLines[i - 1] === newLines[j - 1]) {\n dp[i][j] = dp[i - 1][j - 1] + 1\n } else {\n dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1])\n }\n }\n }\n\n // Backtrack to produce diff\n const result: DiffLine[] = []\n let i = m\n let j = n\n\n while (i > 0 || j > 0) {\n if (i > 0 && j > 0 && oldLines[i - 1] === newLines[j - 1]) {\n result.push({ type: 'unchanged', content: oldLines[i - 1], oldLineNo: i, newLineNo: j })\n i--\n j--\n } else if (j > 0 && (i === 0 || dp[i][j - 1] >= dp[i - 1][j])) {\n result.push({ type: 'added', content: newLines[j - 1], newLineNo: j })\n j--\n } else {\n result.push({ type: 'removed', content: oldLines[i - 1], oldLineNo: i })\n i--\n }\n }\n\n return result.reverse()\n}\n\nconst TYPE_BG: Record<LineType, string> = {\n added: 'bg-[hsl(var(--status-ok))]/10',\n removed: 'bg-[hsl(var(--status-critical))]/10',\n unchanged: '',\n}\n\nconst TYPE_PREFIX: Record<LineType, string> = {\n added: '+',\n removed: '-',\n unchanged: ' ',\n}\n\nconst TYPE_PREFIX_COLOR: Record<LineType, string> = {\n added: 'text-[hsl(var(--status-ok))]',\n removed: 'text-[hsl(var(--status-critical))]',\n unchanged: 'text-[hsl(var(--text-tertiary))]',\n}\n\n/**\n * @description A diff viewer showing line-by-line differences between two text values.\n * Supports inline and side-by-side modes, collapsible unchanged sections, and line numbers.\n */\nexport function DiffViewer({\n oldValue,\n newValue,\n mode = 'inline',\n language,\n showLineNumbers = true,\n className,\n}: DiffViewerProps): React.JSX.Element {\n const [expandedSections, setExpandedSections] = useState<Set<number>>(new Set())\n\n const diffLines = useMemo(() => {\n const oldLines = oldValue.split('\\n')\n const newLines = newValue.split('\\n')\n return computeDiff(oldLines, newLines)\n }, [oldValue, newValue])\n\n // Group unchanged sections for collapsing\n const sections = useMemo(() => {\n const groups: { type: 'changes' | 'unchanged'; lines: DiffLine[]; startIdx: number }[] = []\n let current: DiffLine[] = []\n let currentType: 'changes' | 'unchanged' | null = null\n let startIdx = 0\n\n for (let i = 0; i < diffLines.length; i++) {\n const lineType = diffLines[i].type === 'unchanged' ? 'unchanged' : 'changes'\n if (lineType !== currentType) {\n if (current.length > 0 && currentType !== null) {\n groups.push({ type: currentType, lines: current, startIdx })\n }\n current = [diffLines[i]]\n currentType = lineType\n startIdx = i\n } else {\n current.push(diffLines[i])\n }\n }\n if (current.length > 0 && currentType !== null) {\n groups.push({ type: currentType, lines: current, startIdx })\n }\n return groups\n }, [diffLines])\n\n const toggleSection = (idx: number) => {\n setExpandedSections((prev) => {\n const next = new Set(prev)\n if (next.has(idx)) {\n next.delete(idx)\n } else {\n next.add(idx)\n }\n return next\n })\n }\n\n if (mode === 'side-by-side') {\n return <SideBySide diffLines={diffLines} showLineNumbers={showLineNumbers} language={language} className={className} />\n }\n\n return (\n <div\n className={cn(\n 'w-full overflow-x-auto rounded-xl border border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-surface))]',\n 'font-mono text-xs leading-5',\n className,\n )}\n data-language={language}\n >\n {sections.map((section, sIdx) => {\n // Collapse unchanged sections longer than 6 lines\n if (section.type === 'unchanged' && section.lines.length > 6 && !expandedSections.has(sIdx)) {\n const topContext = section.lines.slice(0, 3)\n const bottomContext = section.lines.slice(-3)\n const hiddenCount = section.lines.length - 6\n\n return (\n <div key={sIdx}>\n {topContext.map((line, i) => (\n <InlineLine key={`${sIdx}-t-${i}`} line={line} showLineNumbers={showLineNumbers} />\n ))}\n <button\n type=\"button\"\n onClick={() => toggleSection(sIdx)}\n className={cn(\n 'w-full px-3 py-1 text-center text-[10px]',\n 'text-[hsl(var(--text-tertiary))] bg-[hsl(var(--bg-overlay))]/50',\n 'hover:bg-[hsl(var(--bg-overlay))] cursor-pointer transition-colors duration-100',\n )}\n >\n ... {hiddenCount} unchanged {hiddenCount === 1 ? 'line' : 'lines'} ...\n </button>\n {bottomContext.map((line, i) => (\n <InlineLine key={`${sIdx}-b-${i}`} line={line} showLineNumbers={showLineNumbers} />\n ))}\n </div>\n )\n }\n\n return (\n <div key={sIdx}>\n {section.type === 'unchanged' && expandedSections.has(sIdx) && (\n <button\n type=\"button\"\n onClick={() => toggleSection(sIdx)}\n className={cn(\n 'w-full px-3 py-0.5 text-center text-[10px]',\n 'text-[hsl(var(--text-tertiary))] bg-[hsl(var(--bg-overlay))]/30',\n 'hover:bg-[hsl(var(--bg-overlay))] cursor-pointer transition-colors duration-100',\n )}\n >\n collapse {section.lines.length} unchanged lines\n </button>\n )}\n {section.lines.map((line, i) => (\n <InlineLine key={`${sIdx}-${i}`} line={line} showLineNumbers={showLineNumbers} />\n ))}\n </div>\n )\n })}\n </div>\n )\n}\n\nfunction InlineLine({ line, showLineNumbers }: { line: DiffLine; showLineNumbers: boolean }): React.JSX.Element {\n return (\n <div className={cn('flex', TYPE_BG[line.type])}>\n {showLineNumbers && (\n <span className=\"shrink-0 w-9 px-1.5 text-right select-none text-[hsl(var(--text-tertiary))]/50 tabular-nums\">\n {line.oldLineNo ?? ''}\n </span>\n )}\n {showLineNumbers && (\n <span className=\"shrink-0 w-9 px-1.5 text-right select-none text-[hsl(var(--text-tertiary))]/50 tabular-nums\">\n {line.newLineNo ?? ''}\n </span>\n )}\n <span className={cn('shrink-0 w-4 text-center select-none font-bold', TYPE_PREFIX_COLOR[line.type])}>\n {TYPE_PREFIX[line.type]}\n </span>\n <span className=\"flex-1 px-2 whitespace-pre text-[hsl(var(--text-primary))]\">\n {line.content}\n </span>\n </div>\n )\n}\n\nfunction SideBySide({\n diffLines,\n showLineNumbers,\n language,\n className,\n}: {\n diffLines: DiffLine[]\n showLineNumbers: boolean\n language?: string\n className?: string\n}): React.JSX.Element {\n // Build paired rows for side-by-side\n const pairs: { left?: DiffLine; right?: DiffLine }[] = []\n let i = 0\n while (i < diffLines.length) {\n const line = diffLines[i]\n if (line.type === 'unchanged') {\n pairs.push({ left: line, right: line })\n i++\n } else if (line.type === 'removed') {\n // Look for a matching added line\n if (i + 1 < diffLines.length && diffLines[i + 1].type === 'added') {\n pairs.push({ left: line, right: diffLines[i + 1] })\n i += 2\n } else {\n pairs.push({ left: line })\n i++\n }\n } else {\n pairs.push({ right: line })\n i++\n }\n }\n\n return (\n <div\n className={cn(\n 'w-full overflow-x-auto rounded-xl border border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-surface))]',\n 'font-mono text-xs leading-5',\n className,\n )}\n data-language={language}\n >\n <div className=\"grid grid-cols-2 divide-x divide-[hsl(var(--border-subtle))]\">\n {/* Left: old */}\n <div>\n {pairs.map((pair, idx) => (\n <div\n key={`l-${idx}`}\n className={cn('flex', pair.left ? TYPE_BG[pair.left.type] : '')}\n >\n {showLineNumbers && (\n <span className=\"shrink-0 w-9 px-1.5 text-right select-none text-[hsl(var(--text-tertiary))]/50 tabular-nums\">\n {pair.left?.oldLineNo ?? ''}\n </span>\n )}\n <span className=\"flex-1 px-2 whitespace-pre text-[hsl(var(--text-primary))]\">\n {pair.left?.content ?? ''}\n </span>\n </div>\n ))}\n </div>\n {/* Right: new */}\n <div>\n {pairs.map((pair, idx) => (\n <div\n key={`r-${idx}`}\n className={cn('flex', pair.right ? TYPE_BG[pair.right.type] : '')}\n >\n {showLineNumbers && (\n <span className=\"shrink-0 w-9 px-1.5 text-right select-none text-[hsl(var(--text-tertiary))]/50 tabular-nums\">\n {pair.right?.newLineNo ?? ''}\n </span>\n )}\n <span className=\"flex-1 px-2 whitespace-pre text-[hsl(var(--text-primary))]\">\n {pair.right?.content ?? ''}\n </span>\n </div>\n ))}\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useMemo, useState } from 'react'\nimport { cn } from '../utils'\n\nexport interface DayValue {\n /** Date in YYYY-MM-DD format. */\n date: string\n /** Numeric value for this day. */\n value: number\n}\n\nexport interface HeatmapCalendarProps {\n /** Array of day values. */\n data: DayValue[]\n /** Start date (YYYY-MM-DD). Defaults to 365 days ago. */\n startDate?: string\n /** End date (YYYY-MM-DD). Defaults to today. */\n endDate?: string\n /** 5 colors from lightest to darkest. Defaults to green scale. */\n colorScale?: string[]\n /** Callback when a day cell is clicked. */\n onDayClick?: (day: DayValue) => void\n /** Show month labels at top. */\n showMonthLabels?: boolean\n /** Show day-of-week labels (Mon, Wed, Fri) on the left. */\n showDayLabels?: boolean\n /** Custom tooltip format function. */\n tooltipFormat?: (day: DayValue) => string\n className?: string\n}\n\nconst DEFAULT_COLORS = [\n 'bg-[hsl(var(--bg-overlay))]',\n 'bg-[hsl(var(--status-ok))]/20',\n 'bg-[hsl(var(--status-ok))]/40',\n 'bg-[hsl(var(--status-ok))]/65',\n 'bg-[hsl(var(--status-ok))]',\n]\n\nconst MONTH_NAMES = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\nconst DAY_LABELS = ['', 'Mon', '', 'Wed', '', 'Fri', '']\n\nfunction toDateKey(d: Date): string {\n return d.toISOString().slice(0, 10)\n}\n\nfunction parseDate(s: string): Date {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(s)) {\n return new Date()\n }\n const [y, m, d] = s.split('-').map(Number)\n const date = new Date(y, m - 1, d)\n if (isNaN(date.getTime())) return new Date()\n return date\n}\n\n/**\n * @description A GitHub-style contribution heatmap calendar with configurable color scale,\n * hover tooltips, month/day labels, and click handlers.\n */\nexport function HeatmapCalendar({\n data,\n startDate,\n endDate,\n colorScale = DEFAULT_COLORS,\n onDayClick,\n showMonthLabels = true,\n showDayLabels = true,\n tooltipFormat,\n className,\n}: HeatmapCalendarProps): React.JSX.Element {\n const [hoveredDay, setHoveredDay] = useState<DayValue | null>(null)\n\n const { weeks, months, maxValue } = useMemo(() => {\n const end = endDate ? parseDate(endDate) : new Date()\n const start = startDate\n ? parseDate(startDate)\n : new Date(end.getFullYear() - 1, end.getMonth(), end.getDate() + 1)\n\n // Build value lookup\n const lookup = new Map<string, number>()\n let maxVal = 0\n for (const d of data) {\n lookup.set(d.date, d.value)\n if (d.value > maxVal) maxVal = d.value\n }\n\n // Generate weeks (columns) starting from the start date's week\n const weeks: (DayValue | null)[][] = []\n const monthChanges: { col: number; label: string }[] = []\n\n // Align start to the beginning of its week (Sunday)\n const cursor = new Date(start)\n cursor.setDate(cursor.getDate() - cursor.getDay())\n\n let prevMonth = -1\n\n while (cursor <= end || weeks.length === 0) {\n const week: (DayValue | null)[] = []\n for (let dow = 0; dow < 7; dow++) {\n const key = toDateKey(cursor)\n if (cursor >= start && cursor <= end) {\n week.push({ date: key, value: lookup.get(key) ?? 0 })\n } else {\n week.push(null)\n }\n\n // Track month boundaries\n if (cursor.getMonth() !== prevMonth && cursor >= start && cursor <= end) {\n if (dow === 0) {\n monthChanges.push({ col: weeks.length, label: MONTH_NAMES[cursor.getMonth()] })\n }\n prevMonth = cursor.getMonth()\n }\n\n cursor.setDate(cursor.getDate() + 1)\n }\n weeks.push(week)\n }\n\n return { weeks, months: monthChanges, maxValue: maxVal }\n }, [data, startDate, endDate])\n\n const getColorClass = (value: number): string => {\n if (value === 0 || maxValue === 0) return colorScale[0]\n const idx = Math.min(\n colorScale.length - 1,\n Math.ceil((value / maxValue) * (colorScale.length - 1))\n )\n return colorScale[idx]\n }\n\n const defaultTooltip = (day: DayValue): string =>\n `${day.date}: ${day.value}`\n\n const formatTooltip = tooltipFormat ?? defaultTooltip\n\n return (\n <div className={cn('overflow-x-auto', className)}>\n <div className=\"inline-flex flex-col gap-0.5\">\n {/* Month labels */}\n {showMonthLabels && (\n <div className=\"flex\" style={{ marginLeft: showDayLabels ? '2rem' : 0 }}>\n {weeks.map((_, col) => {\n const monthEntry = months.find((m) => m.col === col)\n return (\n <div\n key={`m-${col}`}\n className=\"text-[10px] text-[hsl(var(--text-tertiary))]\"\n style={{ width: 13, minWidth: 13 }}\n >\n {monthEntry?.label ?? ''}\n </div>\n )\n })}\n </div>\n )}\n\n {/* Grid rows (7 days) */}\n <div className=\"flex gap-0\">\n {/* Day labels column */}\n {showDayLabels && (\n <div className=\"flex flex-col gap-[2px] mr-1\">\n {DAY_LABELS.map((label, i) => (\n <div\n key={i}\n className=\"text-[10px] text-[hsl(var(--text-tertiary))] h-[11px] flex items-center justify-end pr-1\"\n style={{ width: '1.75rem' }}\n >\n {label}\n </div>\n ))}\n </div>\n )}\n\n {/* Week columns */}\n {weeks.map((week, wIdx) => (\n <div key={wIdx} className=\"flex flex-col gap-[2px]\">\n {week.map((day, dIdx) => (\n <div\n key={dIdx}\n className={cn(\n 'w-[11px] h-[11px] rounded-sm',\n day ? getColorClass(day.value) : 'bg-transparent',\n day && onDayClick && 'cursor-pointer',\n day && 'hover:ring-1 hover:ring-[hsl(var(--text-tertiary))]',\n )}\n onClick={day && onDayClick ? () => onDayClick(day) : undefined}\n onMouseEnter={day ? () => setHoveredDay(day) : undefined}\n onMouseLeave={() => setHoveredDay(null)}\n title={day ? formatTooltip(day) : undefined}\n role={day && onDayClick ? 'button' : undefined}\n tabIndex={day && onDayClick ? 0 : undefined}\n onKeyDown={\n day && onDayClick\n ? (e) => { if (e.key === 'Enter' || e.key === ' ') onDayClick(day) }\n : undefined\n }\n />\n ))}\n </div>\n ))}\n </div>\n\n {/* Legend */}\n <div className=\"flex items-center gap-1 mt-1\" style={{ marginLeft: showDayLabels ? '2rem' : 0 }}>\n <span className=\"text-[10px] text-[hsl(var(--text-tertiary))] mr-1\">Less</span>\n {colorScale.map((color, i) => (\n <div key={i} className={cn('w-[11px] h-[11px] rounded-sm', color)} />\n ))}\n <span className=\"text-[10px] text-[hsl(var(--text-tertiary))] ml-1\">More</span>\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useEffect, useRef, useCallback, useState } from 'react'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\nimport {\n Info, CheckCircle2, AlertTriangle, XCircle, X,\n} from 'lucide-react'\n\nexport interface Notification {\n id: string\n title: string\n message?: string\n type: 'info' | 'success' | 'warning' | 'error'\n action?: { label: string; onClick: () => void }\n /** Whether the notification can be dismissed. */\n dismissible?: boolean\n /** Auto-dismiss after this many ms. 0 = persistent. */\n duration?: number\n timestamp?: Date\n}\n\nexport interface NotificationStackProps {\n notifications: Notification[]\n /** Callback to dismiss a notification by id. */\n onDismiss: (id: string) => void\n /** Screen corner positioning. */\n position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left'\n /** Max visible cards before stacking remainder. */\n maxVisible?: number\n className?: string\n}\n\nconst TYPE_ICON: Record<Notification['type'], React.FC<{ className?: string }>> = {\n info: Info,\n success: CheckCircle2,\n warning: AlertTriangle,\n error: XCircle,\n}\n\nconst TYPE_COLOR: Record<Notification['type'], string> = {\n info: 'border-l-[hsl(var(--brand-secondary))]',\n success: 'border-l-[hsl(var(--status-ok))]',\n warning: 'border-l-[hsl(var(--status-warning))]',\n error: 'border-l-[hsl(var(--status-critical))]',\n}\n\nconst TYPE_ICON_COLOR: Record<Notification['type'], string> = {\n info: 'text-[hsl(var(--brand-secondary))]',\n success: 'text-[hsl(var(--status-ok))]',\n warning: 'text-[hsl(var(--status-warning))]',\n error: 'text-[hsl(var(--status-critical))]',\n}\n\nconst TYPE_PROGRESS_BG: Record<Notification['type'], string> = {\n info: 'bg-[hsl(var(--brand-secondary))]',\n success: 'bg-[hsl(var(--status-ok))]',\n warning: 'bg-[hsl(var(--status-warning))]',\n error: 'bg-[hsl(var(--status-critical))]',\n}\n\nconst POSITION_CLASSES: Record<NonNullable<NotificationStackProps['position']>, string> = {\n 'top-right': 'top-4 right-4',\n 'top-left': 'top-4 left-4',\n 'bottom-right': 'bottom-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n}\n\nconst SLIDE_FROM: Record<NonNullable<NotificationStackProps['position']>, { x: number }> = {\n 'top-right': { x: 80 },\n 'top-left': { x: -80 },\n 'bottom-right': { x: 80 },\n 'bottom-left': { x: -80 },\n}\n\n/**\n * @description A fixed-position notification stack with auto-dismiss progress bars,\n * type-specific icons and colors, action buttons, and stacking overflow.\n */\nexport function NotificationStack({\n notifications,\n onDismiss,\n position = 'top-right',\n maxVisible = 5,\n className,\n}: NotificationStackProps): React.JSX.Element {\n const reduced = useReducedMotion()\n const visible = notifications.slice(0, maxVisible)\n const overflow = notifications.length - maxVisible\n\n return (\n <div\n className={cn(\n 'fixed z-50 flex flex-col gap-2 w-[360px] max-w-[calc(100vw-2rem)]',\n POSITION_CLASSES[position],\n className,\n )}\n role=\"region\"\n aria-label=\"Notifications\"\n >\n <AnimatePresence initial={false}>\n {visible.map((notification, idx) => (\n <motion.div\n key={notification.id}\n layout={!reduced}\n initial={reduced ? { opacity: 1 } : { opacity: 0, ...SLIDE_FROM[position] }}\n animate={{ opacity: 1, x: 0 }}\n exit={reduced ? { opacity: 0 } : { opacity: 0, ...SLIDE_FROM[position], transition: { duration: 0.15 } }}\n transition={{ type: 'spring', stiffness: 300, damping: 30 }}\n >\n <NotificationCard\n notification={notification}\n onDismiss={onDismiss}\n reduced={!!reduced}\n />\n </motion.div>\n ))}\n </AnimatePresence>\n\n {/* Overflow indicator */}\n {overflow > 0 && (\n <div className=\"text-center text-xs text-[hsl(var(--text-tertiary))] py-1\">\n +{overflow} more {overflow === 1 ? 'notification' : 'notifications'}\n </div>\n )}\n </div>\n )\n}\n\nfunction NotificationCard({\n notification,\n onDismiss,\n reduced,\n}: {\n notification: Notification\n onDismiss: (id: string) => void\n reduced: boolean\n}): React.JSX.Element {\n const { id, title, message, type, action, dismissible = true, duration = 0 } = notification\n const Icon = TYPE_ICON[type]\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const [progress, setProgress] = useState(100)\n const startTimeRef = useRef(Date.now())\n\n // Auto-dismiss timer\n useEffect(() => {\n if (duration <= 0) return\n\n startTimeRef.current = Date.now()\n\n // Progress countdown\n const intervalId = setInterval(() => {\n const elapsed = Date.now() - startTimeRef.current\n const remaining = Math.max(0, 100 - (elapsed / duration) * 100)\n setProgress(remaining)\n if (remaining <= 0) {\n clearInterval(intervalId)\n }\n }, 50)\n\n timerRef.current = setTimeout(() => {\n onDismiss(id)\n }, duration)\n\n return () => {\n clearInterval(intervalId)\n if (timerRef.current) clearTimeout(timerRef.current)\n }\n }, [id, duration, onDismiss])\n\n const handleDismiss = useCallback(() => {\n onDismiss(id)\n }, [id, onDismiss])\n\n return (\n <div\n className={cn(\n 'relative overflow-hidden rounded-xl border-l-[3px] shadow-lg',\n 'bg-[hsl(var(--bg-elevated))] border border-[hsl(var(--border-subtle))]',\n TYPE_COLOR[type],\n )}\n >\n <div className=\"flex items-start gap-3 p-4\">\n <Icon className={cn('size-5 shrink-0 mt-0.5', TYPE_ICON_COLOR[type])} />\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-[hsl(var(--text-primary))]\">{title}</p>\n {message && (\n <p className=\"mt-0.5 text-xs text-[hsl(var(--text-secondary))] line-clamp-2\">\n {message}\n </p>\n )}\n {action && (\n <button\n type=\"button\"\n onClick={action.onClick}\n className={cn(\n 'mt-2 text-xs font-medium cursor-pointer',\n 'text-[hsl(var(--brand-primary))] hover:underline',\n )}\n >\n {action.label}\n </button>\n )}\n </div>\n {dismissible && (\n <button\n type=\"button\"\n onClick={handleDismiss}\n className={cn(\n 'shrink-0 p-0.5 rounded cursor-pointer',\n 'text-[hsl(var(--text-tertiary))] hover:text-[hsl(var(--text-primary))]',\n 'hover:bg-[hsl(var(--bg-overlay))] transition-colors duration-100',\n )}\n aria-label=\"Dismiss notification\"\n >\n <X className=\"size-3.5\" />\n </button>\n )}\n </div>\n\n {/* Auto-dismiss progress bar */}\n {duration > 0 && (\n <div className=\"h-0.5 bg-[hsl(var(--bg-overlay))]\">\n <div\n className={cn('h-full transition-[width] duration-100', TYPE_PROGRESS_BG[type])}\n style={{ width: `${progress}%` }}\n />\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { motion, useReducedMotion } from 'framer-motion'\nimport { cn } from '../utils'\nimport { Plus } from 'lucide-react'\n\nexport type KanbanBadgeColor =\n | 'brand' | 'blue' | 'green' | 'yellow' | 'red' | 'orange'\n | 'purple' | 'pink' | 'teal' | 'gray'\n\nexport interface KanbanItem {\n id: string\n title: string\n description?: string\n tags?: { label: string; color: KanbanBadgeColor }[]\n assignee?: { name: string; avatar?: string }\n}\n\nexport interface KanbanColumnProps {\n /** Column title. */\n title: string\n /** Items to display in this column. */\n items: KanbanItem[]\n /** Optional override for the count badge. */\n count?: number\n /** Column header accent color (CSS value or token). */\n color?: string\n /** Callback when a card is clicked. */\n onItemClick?: (item: KanbanItem) => void\n /** Callback when the add button is clicked. */\n onAddItem?: () => void\n className?: string\n}\n\nconst TAG_COLOR_MAP: Record<KanbanBadgeColor, string> = {\n brand: 'bg-[hsl(var(--brand-primary))]/15 text-[hsl(var(--brand-primary))]',\n blue: 'bg-[hsl(var(--brand-secondary))]/15 text-[hsl(var(--brand-secondary))]',\n green: 'bg-[hsl(var(--status-ok))]/15 text-[hsl(var(--status-ok))]',\n yellow: 'bg-[hsl(var(--status-warning))]/15 text-[hsl(var(--status-warning))]',\n red: 'bg-[hsl(var(--status-critical))]/15 text-[hsl(var(--status-critical))]',\n orange: 'bg-[hsl(var(--status-warning))]/20 text-[hsl(var(--status-warning))]',\n purple: 'bg-[hsl(270,60%,60%)]/15 text-[hsl(270,60%,65%)]',\n pink: 'bg-[hsl(330,60%,60%)]/15 text-[hsl(330,60%,65%)]',\n teal: 'bg-[hsl(180,60%,40%)]/15 text-[hsl(180,60%,55%)]',\n gray: 'bg-[hsl(var(--bg-overlay))] text-[hsl(var(--text-secondary))]',\n}\n\n/**\n * @description A kanban board column with title, count badge, scrollable card list,\n * hover states, staggered Framer Motion entrance, and empty state.\n */\nexport function KanbanColumn({\n title,\n items,\n count,\n color,\n onItemClick,\n onAddItem,\n className,\n}: KanbanColumnProps): React.JSX.Element {\n const reduced = useReducedMotion()\n const displayCount = count ?? items.length\n\n return (\n <div\n className={cn(\n 'flex flex-col w-72 min-w-[18rem] rounded-2xl',\n 'bg-[hsl(var(--bg-surface))] border border-[hsl(var(--border-subtle))]',\n className,\n )}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-[hsl(var(--border-subtle))]\">\n <div className=\"flex items-center gap-2\">\n {color && (\n <span\n className=\"w-2 h-2 rounded-full shrink-0\"\n style={{ backgroundColor: color }}\n />\n )}\n <span className=\"text-sm font-semibold text-[hsl(var(--text-primary))]\">\n {title}\n </span>\n <span className=\"inline-flex items-center justify-center min-w-[1.25rem] h-5 px-1.5 rounded-full text-[10px] font-medium tabular-nums bg-[hsl(var(--bg-overlay))] text-[hsl(var(--text-secondary))]\">\n {displayCount}\n </span>\n </div>\n {onAddItem && (\n <button\n type=\"button\"\n onClick={onAddItem}\n className={cn(\n 'p-1 rounded-lg cursor-pointer',\n 'text-[hsl(var(--text-tertiary))] hover:text-[hsl(var(--text-primary))]',\n 'hover:bg-[hsl(var(--bg-overlay))] transition-colors duration-150',\n )}\n aria-label={`Add item to ${title}`}\n >\n <Plus className=\"size-4\" />\n </button>\n )}\n </div>\n\n {/* Card list */}\n <div className=\"flex-1 overflow-y-auto p-2 space-y-2\">\n {items.length === 0 ? (\n <div className=\"flex items-center justify-center py-8 text-xs text-[hsl(var(--text-tertiary))]\">\n No items\n </div>\n ) : (\n items.map((item, idx) => (\n <motion.div\n key={item.id}\n initial={reduced ? undefined : { opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n transition={reduced ? { duration: 0 } : { delay: idx * 0.04, duration: 0.2 }}\n >\n <KanbanCard item={item} onClick={onItemClick} />\n </motion.div>\n ))\n )}\n </div>\n </div>\n )\n}\n\nfunction KanbanCard({\n item,\n onClick,\n}: {\n item: KanbanItem\n onClick?: (item: KanbanItem) => void\n}): React.JSX.Element {\n return (\n <div\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n onClick={onClick ? () => onClick(item) : undefined}\n onKeyDown={\n onClick\n ? (e) => { if (e.key === 'Enter' || e.key === ' ') onClick(item) }\n : undefined\n }\n className={cn(\n 'rounded-xl p-3 border border-[hsl(var(--border-subtle))]',\n 'bg-[hsl(var(--bg-base))]',\n onClick && 'cursor-pointer hover:bg-[hsl(var(--bg-elevated))] hover:shadow-sm',\n 'transition-all duration-150',\n )}\n >\n <p className=\"text-sm font-medium text-[hsl(var(--text-primary))] line-clamp-2\">\n {item.title}\n </p>\n {item.description && (\n <p className=\"mt-1 text-xs text-[hsl(var(--text-secondary))] line-clamp-2\">\n {item.description}\n </p>\n )}\n\n {/* Tags + Assignee row */}\n {(item.tags?.length || item.assignee) && (\n <div className=\"flex items-center justify-between mt-2.5 gap-2\">\n {item.tags && item.tags.length > 0 && (\n <div className=\"flex flex-wrap gap-1 min-w-0\">\n {item.tags.map((tag, i) => (\n <span\n key={i}\n className={cn(\n 'inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-medium whitespace-nowrap',\n TAG_COLOR_MAP[tag.color],\n )}\n >\n {tag.label}\n </span>\n ))}\n </div>\n )}\n {item.assignee && (\n <div className=\"shrink-0\" title={item.assignee.name}>\n {item.assignee.avatar ? (\n <img\n src={item.assignee.avatar}\n alt={item.assignee.name}\n className=\"size-6 rounded-full object-cover\"\n />\n ) : (\n <div className=\"size-6 rounded-full bg-[hsl(var(--bg-overlay))] flex items-center justify-center text-[10px] font-semibold text-[hsl(var(--text-secondary))]\">\n {item.assignee.name.slice(0, 2).toUpperCase()}\n </div>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useState, useMemo, useCallback } from 'react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { Sparkles, X, TrendingUp, AlertTriangle, Hash, Regex } from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\nimport { DataTable, type DataTableProps } from './data-table'\nimport { cn } from '../utils'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Describes an auto-detected filter suggestion for a data column. */\nexport interface FilterSuggestion {\n /** Column accessor key. */\n column: string\n /** Type of insight: outlier, top-n, pattern, or threshold. */\n type: 'outlier' | 'top-n' | 'pattern' | 'threshold'\n /** Human-readable label for the suggestion pill. */\n label: string\n /** Apply this filter to the data. */\n filter: () => void\n}\n\n/** Props for the SmartTable component. */\nexport interface SmartTableProps<T> extends DataTableProps<T> {\n /** Callback fired when a filter suggestion is generated or clicked. */\n onFilterSuggestion?: (suggestion: FilterSuggestion) => void\n /** Maximum number of suggestions to show. */\n maxSuggestions?: number\n}\n\n// ---------------------------------------------------------------------------\n// Analysis helpers\n// ---------------------------------------------------------------------------\n\nfunction mean(nums: number[]): number {\n if (nums.length === 0) return 0\n return nums.reduce((a, b) => a + b, 0) / nums.length\n}\n\nfunction stdDev(nums: number[]): number {\n if (nums.length < 2) return 0\n const m = mean(nums)\n const variance = nums.reduce((sum, n) => sum + (n - m) ** 2, 0) / nums.length\n return Math.sqrt(variance)\n}\n\nfunction analyzeColumn<T>(\n columnId: string,\n columnHeader: string,\n data: T[],\n getValue: (row: T) => unknown,\n): FilterSuggestion[] {\n const suggestions: FilterSuggestion[] = []\n const values = data.map(getValue).filter(v => v != null)\n if (values.length === 0) return suggestions\n\n // Check if numeric column\n const numericValues = values\n .map(v => (typeof v === 'number' ? v : typeof v === 'string' && v !== '' && !isNaN(Number(v)) ? Number(v) : null))\n .filter((v): v is number => v !== null)\n\n if (numericValues.length > values.length * 0.7) {\n // Outlier detection (>2 std dev from mean)\n const m = mean(numericValues)\n const sd = stdDev(numericValues)\n if (sd > 0) {\n const outliers = numericValues.filter(v => Math.abs(v - m) > 2 * sd)\n if (outliers.length > 0 && outliers.length < numericValues.length * 0.3) {\n suggestions.push({\n column: columnId,\n type: 'outlier',\n label: `${outliers.length} outlier${outliers.length > 1 ? 's' : ''} in ${columnHeader}`,\n filter: () => {},\n })\n }\n }\n\n // Threshold suggestion — find if >80% of values are above or below median\n const sorted = [...numericValues].sort((a, b) => a - b)\n const median = sorted[Math.floor(sorted.length / 2)] ?? 0\n const aboveMedian = numericValues.filter(v => v > median)\n if (aboveMedian.length > 0 && aboveMedian.length < numericValues.length * 0.2) {\n suggestions.push({\n column: columnId,\n type: 'threshold',\n label: `Top ${aboveMedian.length} high values in ${columnHeader}`,\n filter: () => {},\n })\n }\n } else {\n // String column analysis\n const strValues = values.map(String)\n const freq = new Map<string, number>()\n for (const v of strValues) {\n freq.set(v, (freq.get(v) ?? 0) + 1)\n }\n\n // Pattern detection: if one value is >90% dominant\n for (const [val, count] of freq) {\n if (count / strValues.length >= 0.9 && freq.size > 1) {\n const otherCount = strValues.length - count\n suggestions.push({\n column: columnId,\n type: 'pattern',\n label: `Show non-\"${val.length > 20 ? val.slice(0, 20) + '\\u2026' : val}\" (${otherCount})`,\n filter: () => {},\n })\n }\n }\n\n // Top-N: if there are more than 5 unique values, suggest top 5\n if (freq.size > 5) {\n const topEntries = [...freq.entries()].sort((a, b) => b[1] - a[1]).slice(0, 5)\n const topTotal = topEntries.reduce((s, e) => s + e[1], 0)\n suggestions.push({\n column: columnId,\n type: 'top-n',\n label: `Top 5 ${columnHeader} (${Math.round((topTotal / strValues.length) * 100)}%)`,\n filter: () => {},\n })\n }\n\n // Minority value detection: values that appear in <12% of rows\n const minorityValues = [...freq.entries()].filter(\n ([, count]) => count / strValues.length < 0.12 && count > 0,\n )\n if (minorityValues.length > 0 && minorityValues.length < freq.size) {\n const totalMinority = minorityValues.reduce((s, [, c]) => s + c, 0)\n suggestions.push({\n column: columnId,\n type: 'pattern',\n label: `Rare ${columnHeader} values (${totalMinority} rows)`,\n filter: () => {},\n })\n }\n }\n\n return suggestions\n}\n\n// ---------------------------------------------------------------------------\n// Suggestion icon mapping\n// ---------------------------------------------------------------------------\n\nconst SUGGESTION_ICONS: Record<FilterSuggestion['type'], LucideIcon> = {\n outlier: AlertTriangle,\n 'top-n': TrendingUp,\n pattern: Regex,\n threshold: Hash,\n}\n\nconst SUGGESTION_COLORS: Record<FilterSuggestion['type'], string> = {\n outlier: 'bg-[hsl(var(--status-warning)/0.15)] text-[hsl(var(--status-warning))] border-[hsl(var(--status-warning)/0.3)]',\n 'top-n': 'bg-[hsl(var(--brand-primary)/0.15)] text-[hsl(var(--brand-primary))] border-[hsl(var(--brand-primary)/0.3)]',\n pattern: 'bg-[hsl(var(--brand-secondary)/0.15)] text-[hsl(var(--brand-secondary))] border-[hsl(var(--brand-secondary)/0.3)]',\n threshold: 'bg-[hsl(var(--status-critical)/0.15)] text-[hsl(var(--status-critical))] border-[hsl(var(--status-critical)/0.3)]',\n}\n\n// ---------------------------------------------------------------------------\n// SmartTable\n// ---------------------------------------------------------------------------\n\n/**\n * @description An enhanced DataTable that analyzes column data on mount and auto-generates\n * smart filter suggestions such as outlier detection, top-N values, dominant patterns,\n * and threshold-based highlights. Click a suggestion to apply it as a filter.\n * Wraps the existing DataTable via composition.\n */\nexport function SmartTable<T>({\n columns,\n data,\n onFilterSuggestion,\n maxSuggestions = 6,\n ...tableProps\n}: SmartTableProps<T>): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n const [dismissed, setDismissed] = useState<Set<string>>(new Set())\n const [appliedFilter, setAppliedFilter] = useState<string | null>(null)\n const [filteredData, setFilteredData] = useState<T[] | null>(null)\n\n // Generate suggestions by analyzing each column\n const suggestions = useMemo(() => {\n if (data.length < 3) return []\n\n const allSuggestions: FilterSuggestion[] = []\n\n for (const colDef of columns) {\n const col = colDef as ColumnDef<T, unknown> & { accessorKey?: string; accessorFn?: (row: T) => unknown; header?: string }\n const columnId = col.accessorKey ?? (col as { id?: string }).id ?? ''\n const columnHeader = typeof col.header === 'string' ? col.header : columnId\n\n if (!columnId) continue\n\n const getValue = col.accessorFn\n ? col.accessorFn\n : (row: T) => (row as Record<string, unknown>)[columnId]\n\n const columnSuggestions = analyzeColumn(columnId, columnHeader, data, getValue)\n\n // Wire up actual filter functions\n for (const s of columnSuggestions) {\n s.filter = () => {\n const vals = data.map(getValue).filter(v => v != null)\n let filtered: T[]\n\n switch (s.type) {\n case 'outlier': {\n const nums = vals\n .map(v => (typeof v === 'number' ? v : Number(v)))\n .filter(v => !isNaN(v))\n const m = mean(nums)\n const sd = stdDev(nums)\n filtered = data.filter(row => {\n const v = getValue(row)\n const n = typeof v === 'number' ? v : Number(v)\n return !isNaN(n) && Math.abs(n - m) > 2 * sd\n })\n break\n }\n case 'top-n': {\n const freq = new Map<string, number>()\n for (const v of vals) freq.set(String(v), (freq.get(String(v)) ?? 0) + 1)\n const topKeys = new Set([...freq.entries()].sort((a, b) => b[1] - a[1]).slice(0, 5).map(e => e[0]))\n filtered = data.filter(row => topKeys.has(String(getValue(row))))\n break\n }\n case 'threshold': {\n const nums = vals\n .map(v => (typeof v === 'number' ? v : Number(v)))\n .filter(v => !isNaN(v))\n const sorted = [...nums].sort((a, b) => a - b)\n const median = sorted[Math.floor(sorted.length / 2)] ?? 0\n filtered = data.filter(row => {\n const v = getValue(row)\n const n = typeof v === 'number' ? v : Number(v)\n return !isNaN(n) && n > median\n })\n break\n }\n case 'pattern': {\n const freq = new Map<string, number>()\n for (const v of vals) freq.set(String(v), (freq.get(String(v)) ?? 0) + 1)\n // Find dominant value\n let dominant = ''\n let maxCount = 0\n for (const [k, c] of freq) {\n if (c > maxCount) { dominant = k; maxCount = c }\n }\n if (maxCount / vals.length >= 0.9) {\n // Show non-dominant\n filtered = data.filter(row => String(getValue(row)) !== dominant)\n } else {\n // Rare values\n const rareKeys = new Set(\n [...freq.entries()].filter(([, c]) => c / vals.length < 0.12).map(e => e[0]),\n )\n filtered = data.filter(row => rareKeys.has(String(getValue(row))))\n }\n break\n }\n default:\n filtered = data\n }\n\n setFilteredData(filtered)\n setAppliedFilter(s.label)\n onFilterSuggestion?.(s)\n }\n }\n\n allSuggestions.push(...columnSuggestions)\n }\n\n return allSuggestions.slice(0, maxSuggestions)\n }, [data, columns, maxSuggestions, onFilterSuggestion])\n\n const visibleSuggestions = suggestions.filter(s => !dismissed.has(s.label))\n\n const handleDismiss = useCallback((label: string) => {\n setDismissed(prev => new Set(prev).add(label))\n }, [])\n\n const handleClearFilter = useCallback(() => {\n setFilteredData(null)\n setAppliedFilter(null)\n }, [])\n\n const displayData = filteredData ?? data\n\n return (\n <div>\n {/* Suggestion pills bar */}\n <AnimatePresence>\n {visibleSuggestions.length > 0 && !appliedFilter && (\n <motion.div\n initial={prefersReducedMotion ? undefined : { opacity: 0, y: -8 }}\n animate={prefersReducedMotion ? undefined : { opacity: 1, y: 0 }}\n exit={prefersReducedMotion ? undefined : { opacity: 0, y: -8 }}\n transition={{ duration: 0.2 }}\n className=\"mb-3 flex flex-wrap items-center gap-2\"\n >\n <span className=\"flex items-center gap-1.5 text-[11px] font-medium text-[hsl(var(--text-tertiary))] uppercase tracking-wider\">\n <Sparkles className=\"h-3.5 w-3.5 text-[hsl(var(--brand-primary))]\" />\n Suggested Filters\n </span>\n\n {visibleSuggestions.map(suggestion => {\n const Icon = SUGGESTION_ICONS[suggestion.type]\n return (\n <motion.button\n key={suggestion.label}\n layout={!prefersReducedMotion}\n initial={prefersReducedMotion ? undefined : { opacity: 0, scale: 0.9 }}\n animate={prefersReducedMotion ? undefined : { opacity: 1, scale: 1 }}\n exit={prefersReducedMotion ? undefined : { opacity: 0, scale: 0.9 }}\n transition={{ duration: 0.15 }}\n onClick={suggestion.filter}\n className={cn(\n 'group inline-flex items-center gap-1.5 rounded-full border px-3 py-1 text-[12px] font-medium',\n 'transition-all hover:shadow-sm cursor-pointer',\n SUGGESTION_COLORS[suggestion.type],\n )}\n >\n <Icon className=\"h-3 w-3\" />\n {suggestion.label}\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(e) => { e.stopPropagation(); handleDismiss(suggestion.label) }}\n onKeyDown={(e) => { if (e.key === 'Enter') { e.stopPropagation(); handleDismiss(suggestion.label) } }}\n className=\"ml-0.5 opacity-0 group-hover:opacity-100 transition-opacity rounded-full p-0.5 hover:bg-[hsl(var(--bg-overlay)/0.3)]\"\n >\n <X className=\"h-2.5 w-2.5\" />\n </span>\n </motion.button>\n )\n })}\n </motion.div>\n )}\n </AnimatePresence>\n\n {/* Active filter indicator */}\n <AnimatePresence>\n {appliedFilter && (\n <motion.div\n initial={prefersReducedMotion ? undefined : { opacity: 0, y: -4 }}\n animate={prefersReducedMotion ? undefined : { opacity: 1, y: 0 }}\n exit={prefersReducedMotion ? undefined : { opacity: 0, y: -4 }}\n transition={{ duration: 0.15 }}\n className=\"mb-3 flex items-center gap-2\"\n >\n <span className=\"inline-flex items-center gap-1.5 rounded-full bg-[hsl(var(--brand-primary)/0.15)] border border-[hsl(var(--brand-primary)/0.3)] px-3 py-1 text-[12px] font-medium text-[hsl(var(--brand-primary))]\">\n <Sparkles className=\"h-3 w-3\" />\n {appliedFilter}\n <span className=\"ml-1 tabular-nums text-[11px] opacity-70\">\n ({displayData.length} row{displayData.length !== 1 ? 's' : ''})\n </span>\n </span>\n <button\n onClick={handleClearFilter}\n className=\"inline-flex items-center gap-1 rounded-full px-2 py-1 text-[11px] font-medium text-[hsl(var(--text-secondary))] hover:text-[hsl(var(--text-primary))] hover:bg-[hsl(var(--bg-elevated)/0.5)] transition-colors\"\n >\n <X className=\"h-3 w-3\" />\n Clear\n </button>\n </motion.div>\n )}\n </AnimatePresence>\n\n {/* Wrapped DataTable */}\n <DataTable<T>\n columns={columns}\n data={displayData}\n {...tableProps}\n />\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useState, useEffect, useRef, useMemo } from 'react'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { ArrowUp, ArrowDown, Minus, Wifi, WifiOff, Loader2 } from 'lucide-react'\nimport { cn } from '../utils'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Props for the RealtimeValue component. */\nexport interface RealtimeValueProps {\n /** The current value to display. */\n value: number | string\n /** Optional label displayed above or beside the value. */\n label?: string\n /** Custom formatter for numeric values. */\n format?: (v: number) => string\n /** ISO timestamp or Date of the last data update. */\n lastUpdated?: string | Date\n /** Milliseconds after which the value is considered stale. Default 30000. */\n staleAfterMs?: number\n /** Connection state to the data source. */\n connectionState?: 'connected' | 'reconnecting' | 'disconnected'\n /** Previous numeric value for delta/change display. */\n previousValue?: number\n /** Whether to animate value changes. Default true. */\n animate?: boolean\n /** Display size variant. */\n size?: 'sm' | 'md' | 'lg' | 'xl'\n /** Additional class name for the root element. */\n className?: string\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction easeOutCubic(t: number): number {\n return 1 - Math.pow(1 - t, 3)\n}\n\nfunction formatRelativeSeconds(ms: number): string {\n const secs = Math.floor(ms / 1000)\n if (secs < 1) return 'just now'\n if (secs < 60) return `${secs}s ago`\n if (secs < 3600) return `${Math.floor(secs / 60)}m ago`\n return `${Math.floor(secs / 3600)}h ago`\n}\n\nconst SIZE_CLASSES = {\n sm: { value: 'text-lg', label: 'text-[11px]', delta: 'text-[10px]', dot: 'h-1.5 w-1.5', gap: 'gap-1' },\n md: { value: 'text-2xl', label: 'text-xs', delta: 'text-[11px]', dot: 'h-2 w-2', gap: 'gap-1.5' },\n lg: { value: 'text-3xl', label: 'text-sm', delta: 'text-xs', dot: 'h-2.5 w-2.5', gap: 'gap-2' },\n xl: { value: 'text-4xl', label: 'text-base', delta: 'text-sm', dot: 'h-3 w-3', gap: 'gap-2' },\n} as const\n\n// ---------------------------------------------------------------------------\n// AnimatedNumber (internal)\n// ---------------------------------------------------------------------------\n\nfunction AnimatedNumber({\n value,\n format,\n duration = 400,\n animateEnabled,\n reduced,\n className,\n}: {\n value: number\n format?: (v: number) => string\n duration?: number\n animateEnabled: boolean\n reduced: boolean | null\n className?: string\n}): React.JSX.Element {\n const prevRef = useRef(value)\n const rafRef = useRef<number | null>(null)\n const [displayed, setDisplayed] = useState(value)\n\n useEffect(() => {\n const from = prevRef.current\n const to = value\n prevRef.current = value\n\n if (reduced || !animateEnabled || from === to) {\n setDisplayed(to)\n return\n }\n\n const start = performance.now()\n function tick(now: number) {\n const elapsed = now - start\n const progress = Math.min(elapsed / duration, 1)\n const eased = easeOutCubic(progress)\n setDisplayed(from + (to - from) * eased)\n if (progress < 1) {\n rafRef.current = requestAnimationFrame(tick)\n } else {\n setDisplayed(to)\n }\n }\n\n rafRef.current = requestAnimationFrame(tick)\n return () => {\n if (rafRef.current !== null) cancelAnimationFrame(rafRef.current)\n }\n }, [value, duration, reduced, animateEnabled])\n\n const formatted = format\n ? format(displayed)\n : Number.isInteger(value)\n ? Math.round(displayed).toString()\n : displayed.toFixed(value.toString().split('.')[1]?.length ?? 1)\n\n return <span className={cn('tabular-nums', className)}>{formatted}</span>\n}\n\n// ---------------------------------------------------------------------------\n// RealtimeValue\n// ---------------------------------------------------------------------------\n\n/**\n * @description A live data display component with built-in freshness tracking,\n * connection state indicators, animated value transitions, delta display,\n * and auto-updating relative timestamps. Designed for real-time monitoring dashboards.\n */\nexport function RealtimeValue({\n value,\n label,\n format,\n lastUpdated,\n staleAfterMs = 30000,\n connectionState = 'connected',\n previousValue,\n animate = true,\n size = 'md',\n className,\n}: RealtimeValueProps): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n const sizeClasses = SIZE_CLASSES[size]\n\n // Auto-updating staleness\n const [staleness, setStaleness] = useState(0)\n useEffect(() => {\n if (!lastUpdated) return\n const getMs = () => Date.now() - new Date(lastUpdated).getTime()\n setStaleness(getMs())\n const interval = setInterval(() => setStaleness(getMs()), 1000)\n return () => clearInterval(interval)\n }, [lastUpdated])\n\n const isStale = lastUpdated ? staleness > staleAfterMs : false\n const isVeryStale = lastUpdated ? staleness > staleAfterMs * 2 : false\n\n // Freshness dot color\n const freshnessColor = useMemo(() => {\n if (connectionState === 'disconnected') return 'bg-[hsl(var(--status-critical))]'\n if (isVeryStale) return 'bg-[hsl(var(--status-critical))]'\n if (isStale) return 'bg-[hsl(var(--status-warning))]'\n return 'bg-[hsl(var(--status-ok))]'\n }, [connectionState, isStale, isVeryStale])\n\n // Delta calculation\n const delta = typeof value === 'number' && previousValue !== undefined ? value - previousValue : null\n const deltaSign = delta !== null ? (delta > 0 ? '+' : delta < 0 ? '' : '') : null\n\n const isNumeric = typeof value === 'number'\n\n return (\n <div\n className={cn(\n 'relative inline-flex flex-col',\n sizeClasses.gap,\n isStale && 'opacity-60',\n className,\n )}\n title={\n lastUpdated\n ? `Last updated: ${new Date(lastUpdated).toLocaleString()} (${formatRelativeSeconds(staleness)})`\n : undefined\n }\n >\n {/* Label row */}\n {label && (\n <div className=\"flex items-center gap-1.5\">\n <span className={cn('font-medium text-[hsl(var(--text-secondary))]', sizeClasses.label)}>\n {label}\n </span>\n </div>\n )}\n\n {/* Value row */}\n <div className=\"flex items-center gap-2\">\n {/* Freshness indicator */}\n <div className=\"relative flex items-center justify-center\">\n <span className={cn('rounded-full', sizeClasses.dot, freshnessColor)} />\n {connectionState === 'connected' && !isStale && (\n <span\n className={cn(\n 'absolute rounded-full animate-ping',\n sizeClasses.dot,\n 'bg-[hsl(var(--status-ok)/0.5)]',\n )}\n style={{ animationDuration: '2s' }}\n />\n )}\n </div>\n\n {/* Main value */}\n <div className=\"flex items-baseline gap-1.5\">\n {isNumeric ? (\n <AnimatedNumber\n value={value}\n format={format}\n animateEnabled={animate}\n reduced={prefersReducedMotion}\n className={cn('font-semibold text-[hsl(var(--text-primary))]', sizeClasses.value)}\n />\n ) : (\n <span className={cn('font-semibold text-[hsl(var(--text-primary))] tabular-nums', sizeClasses.value)}>\n {value}\n </span>\n )}\n\n {/* Delta indicator */}\n <AnimatePresence>\n {delta !== null && delta !== 0 && (\n <motion.span\n initial={prefersReducedMotion ? undefined : { opacity: 0, x: -4 }}\n animate={prefersReducedMotion ? undefined : { opacity: 1, x: 0 }}\n exit={prefersReducedMotion ? undefined : { opacity: 0, x: -4 }}\n transition={{ duration: 0.15 }}\n className={cn(\n 'inline-flex items-center gap-0.5 font-medium tabular-nums',\n sizeClasses.delta,\n delta > 0 ? 'text-[hsl(var(--status-ok))]' : 'text-[hsl(var(--status-critical))]',\n )}\n >\n {delta > 0 ? <ArrowUp className=\"h-3 w-3\" /> : <ArrowDown className=\"h-3 w-3\" />}\n {deltaSign}{format ? format(Math.abs(delta)) : Math.abs(delta).toLocaleString()}\n </motion.span>\n )}\n {delta === 0 && (\n <motion.span\n initial={prefersReducedMotion ? undefined : { opacity: 0 }}\n animate={prefersReducedMotion ? undefined : { opacity: 1 }}\n className={cn(\n 'inline-flex items-center gap-0.5 font-medium text-[hsl(var(--text-tertiary))]',\n sizeClasses.delta,\n )}\n >\n <Minus className=\"h-3 w-3\" />\n 0\n </motion.span>\n )}\n </AnimatePresence>\n </div>\n\n {/* Connection state icon */}\n {connectionState !== 'connected' && (\n <span className=\"ml-1\">\n {connectionState === 'reconnecting' && (\n <Loader2 className=\"h-4 w-4 text-[hsl(var(--status-warning))] animate-spin\" />\n )}\n {connectionState === 'disconnected' && (\n <WifiOff className=\"h-4 w-4 text-[hsl(var(--status-critical))]\" />\n )}\n </span>\n )}\n </div>\n\n {/* Relative timestamp */}\n {lastUpdated && (\n <span className={cn('text-[hsl(var(--text-tertiary))] tabular-nums', sizeClasses.delta)}>\n {formatRelativeSeconds(staleness)}\n </span>\n )}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useState, useEffect, useCallback, useRef, useMemo } from 'react'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { Search, Clock, Command, CornerDownLeft } from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '../utils'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** A single command item in the palette. */\nexport interface CommandItem {\n /** Unique identifier. */\n id: string\n /** Display label. */\n label: string\n /** Optional description shown below the label. */\n description?: string\n /** Optional icon component. */\n icon?: LucideIcon\n /** Keyboard shortcut display string (e.g. \"Cmd+K\"). */\n shortcut?: string\n /** Group name for sectioning items. */\n group?: string\n /** Callback when item is selected. */\n onSelect: () => void\n /** Additional search terms that match this item. */\n keywords?: string[]\n}\n\n/** Props for the CommandBar component. */\nexport interface CommandBarProps {\n /** Array of command items to display and search. */\n items: CommandItem[]\n /** Placeholder text for the search input. */\n placeholder?: string\n /** Hotkey letter (combined with Cmd/Ctrl). Default \"k\". */\n hotkey?: string\n /** Async search function for remote results. */\n onSearch?: (query: string) => Promise<CommandItem[]>\n /** localStorage key for persisting recent selections. */\n recentKey?: string\n /** Maximum number of recent items to store. Default 5. */\n maxRecent?: number\n /** Additional class name for the dialog. */\n className?: string\n}\n\n// ---------------------------------------------------------------------------\n// Fuzzy scoring\n// ---------------------------------------------------------------------------\n\nfunction fuzzyScore(query: string, target: string): number {\n const q = query.toLowerCase()\n const t = target.toLowerCase()\n if (t === q) return 100\n if (t.startsWith(q)) return 80\n if (t.includes(q)) return 60\n // Fuzzy subsequence match\n let qi = 0\n let score = 0\n for (let ti = 0; ti < t.length && qi < q.length; ti++) {\n if (t[ti] === q[qi]) {\n score += 10\n qi++\n }\n }\n return qi === q.length ? score : 0\n}\n\nfunction scoreItem(query: string, item: CommandItem): number {\n if (!query) return 0\n let best = fuzzyScore(query, item.label)\n if (item.description) best = Math.max(best, fuzzyScore(query, item.description) * 0.8)\n if (item.keywords) {\n for (const kw of item.keywords) {\n best = Math.max(best, fuzzyScore(query, kw) * 0.9)\n }\n }\n return best\n}\n\n// ---------------------------------------------------------------------------\n// CommandBar\n// ---------------------------------------------------------------------------\n\n/**\n * @description A universal command palette activated by Cmd+K (Mac) or Ctrl+K (Win).\n * Features fuzzy search, grouped items, recent selections (localStorage),\n * async search support, keyboard navigation, and Framer Motion animations.\n * Fully configurable and not hardcoded to any app.\n */\nexport function CommandBar({\n items,\n placeholder = 'Type a command\\u2026',\n hotkey = 'k',\n onSearch,\n recentKey = 'ui-kit-command-recent',\n maxRecent = 5,\n className,\n}: CommandBarProps): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n const [open, setOpen] = useState(false)\n const [query, setQuery] = useState('')\n const [activeIndex, setActiveIndex] = useState(0)\n const [asyncResults, setAsyncResults] = useState<CommandItem[]>([])\n const [isSearching, setIsSearching] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n const listRef = useRef<HTMLDivElement>(null)\n\n // Recent items from localStorage\n const [recentIds, setRecentIds] = useState<string[]>(() => {\n if (typeof window === 'undefined') return []\n try {\n const raw = JSON.parse(localStorage.getItem(recentKey) ?? '[]')\n return Array.isArray(raw) ? raw.filter((x: unknown) => typeof x === 'string' && x.length < 256).slice(0, maxRecent) : []\n } catch {\n return []\n }\n })\n\n const saveRecent = useCallback(\n (id: string) => {\n const updated = [id, ...recentIds.filter(r => r !== id)].slice(0, maxRecent)\n setRecentIds(updated)\n try {\n localStorage.setItem(recentKey, JSON.stringify(updated))\n } catch {\n // localStorage might be full\n }\n },\n [recentIds, recentKey, maxRecent],\n )\n\n // Hotkey listener\n useEffect(() => {\n const handler = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === hotkey) {\n e.preventDefault()\n setOpen(o => !o)\n }\n if (e.key === 'Escape' && open) {\n setOpen(false)\n }\n }\n document.addEventListener('keydown', handler)\n return () => document.removeEventListener('keydown', handler)\n }, [hotkey, open])\n\n // Focus input when opened\n useEffect(() => {\n if (open) {\n setQuery('')\n setActiveIndex(0)\n setAsyncResults([])\n requestAnimationFrame(() => inputRef.current?.focus())\n }\n }, [open])\n\n // Prevent body scroll when open\n useEffect(() => {\n if (open) {\n const prev = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n return () => { document.body.style.overflow = prev }\n }\n }, [open])\n\n // Async search debounce\n useEffect(() => {\n if (!onSearch || !query) {\n setAsyncResults([])\n return\n }\n setIsSearching(true)\n const timer = setTimeout(async () => {\n try {\n const results = await onSearch(query)\n setAsyncResults(results)\n } catch {\n setAsyncResults([])\n } finally {\n setIsSearching(false)\n }\n }, 200)\n return () => clearTimeout(timer)\n }, [query, onSearch])\n\n // Build display list\n const displayItems = useMemo(() => {\n const allItems = [...items, ...asyncResults]\n\n if (!query) {\n // Show recent items first, then all items\n const recentItems = recentIds\n .map(id => allItems.find(i => i.id === id))\n .filter((i): i is CommandItem => i !== undefined)\n const rest = allItems.filter(i => !recentIds.includes(i.id))\n return [\n ...recentItems.map(i => ({ ...i, group: 'Recent' })),\n ...rest,\n ]\n }\n\n // Score and sort\n return allItems\n .map(item => ({ item, score: scoreItem(query, item) }))\n .filter(({ score }) => score > 0)\n .sort((a, b) => b.score - a.score)\n .map(({ item }) => item)\n }, [items, asyncResults, query, recentIds])\n\n // Group items\n const groups = useMemo(() => {\n const grouped = new Map<string, CommandItem[]>()\n for (const item of displayItems) {\n const group = item.group ?? ''\n const arr = grouped.get(group)\n if (arr) arr.push(item)\n else grouped.set(group, [item])\n }\n return grouped\n }, [displayItems])\n\n // Flatten for keyboard nav\n const flatItems = displayItems\n\n // Keep activeIndex in bounds\n useEffect(() => {\n setActiveIndex(0)\n }, [query])\n\n const handleSelect = useCallback(\n (item: CommandItem) => {\n saveRecent(item.id)\n setOpen(false)\n item.onSelect()\n },\n [saveRecent],\n )\n\n // Keyboard navigation\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n setActiveIndex(i => Math.min(i + 1, flatItems.length - 1))\n } else if (e.key === 'ArrowUp') {\n e.preventDefault()\n setActiveIndex(i => Math.max(i - 1, 0))\n } else if (e.key === 'Enter') {\n e.preventDefault()\n const item = flatItems[activeIndex]\n if (item) handleSelect(item)\n }\n },\n [flatItems, activeIndex, handleSelect],\n )\n\n // Scroll active item into view\n useEffect(() => {\n if (!listRef.current) return\n const active = listRef.current.querySelector('[data-active=\"true\"]')\n active?.scrollIntoView({ block: 'nearest' })\n }, [activeIndex])\n\n const isMac = typeof navigator !== 'undefined' && /Mac|iPhone/.test(navigator.userAgent ?? '')\n\n return (\n <AnimatePresence>\n {open && (\n <div className=\"fixed inset-0 z-50\">\n {/* Backdrop */}\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={prefersReducedMotion ? { duration: 0 } : { duration: 0.15 }}\n className=\"absolute inset-0 bg-[hsl(var(--bg-base)/0.6)] backdrop-blur-sm\"\n onClick={() => setOpen(false)}\n />\n\n {/* Dialog */}\n <motion.div\n initial={prefersReducedMotion ? undefined : { opacity: 0, scale: 0.96, y: -20 }}\n animate={prefersReducedMotion ? undefined : { opacity: 1, scale: 1, y: 0 }}\n exit={prefersReducedMotion ? undefined : { opacity: 0, scale: 0.96, y: -20 }}\n transition={prefersReducedMotion ? { duration: 0 } : { duration: 0.2, ease: [0.16, 1, 0.3, 1] }}\n className={cn(\n 'absolute left-1/2 top-[15%] -translate-x-1/2',\n 'w-full max-w-lg rounded-2xl overflow-hidden',\n 'border border-[hsl(var(--border-default))]',\n 'bg-[hsl(var(--bg-elevated))] shadow-2xl',\n 'flex flex-col max-h-[70vh]',\n className,\n )}\n onKeyDown={handleKeyDown}\n >\n {/* Search input */}\n <div className=\"flex items-center gap-3 px-4 py-3 border-b border-[hsl(var(--border-subtle)/0.5)]\">\n <Search className=\"h-5 w-5 text-[hsl(var(--text-tertiary))] shrink-0\" />\n <input\n ref={inputRef}\n type=\"text\"\n value={query}\n onChange={e => setQuery(e.target.value)}\n placeholder={placeholder}\n className=\"flex-1 bg-transparent text-[hsl(var(--text-primary))] text-sm placeholder:text-[hsl(var(--text-tertiary))] outline-none\"\n />\n <kbd className=\"hidden sm:inline-flex items-center gap-1 rounded-md border border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-surface))] px-1.5 py-0.5 text-[10px] text-[hsl(var(--text-tertiary))] font-mono\">\n Esc\n </kbd>\n </div>\n\n {/* Results list */}\n <div ref={listRef} className=\"flex-1 overflow-y-auto py-2\">\n {flatItems.length === 0 && !isSearching && (\n <div className=\"px-4 py-8 text-center text-sm text-[hsl(var(--text-tertiary))]\">\n {query ? 'No results found.' : 'No commands available.'}\n </div>\n )}\n\n {isSearching && flatItems.length === 0 && (\n <div className=\"px-4 py-8 flex items-center justify-center gap-2 text-sm text-[hsl(var(--text-tertiary))]\">\n <div className=\"h-4 w-4 rounded-full border-2 border-[hsl(var(--brand-primary))] border-t-transparent animate-spin\" />\n Searching...\n </div>\n )}\n\n {[...groups.entries()].map(([groupName, groupItems]) => {\n return (\n <div key={groupName || '__ungrouped'}>\n {groupName && (\n <div className=\"px-4 pt-2 pb-1\">\n <span className=\"text-[10px] font-semibold uppercase tracking-wider text-[hsl(var(--text-tertiary))]\">\n {groupName}\n </span>\n </div>\n )}\n {groupItems.map(item => {\n const globalIdx = flatItems.indexOf(item)\n const isActive = globalIdx === activeIndex\n const Icon = item.icon\n const isRecent = item.group === 'Recent'\n return (\n <button\n key={item.id}\n data-active={isActive}\n onClick={() => handleSelect(item)}\n onMouseEnter={() => setActiveIndex(globalIdx)}\n className={cn(\n 'w-full flex items-center gap-3 px-4 py-2.5 text-left transition-colors',\n isActive\n ? 'bg-[hsl(var(--brand-primary)/0.1)]'\n : 'hover:bg-[hsl(var(--bg-surface)/0.5)]',\n )}\n >\n {Icon ? (\n <Icon className={cn(\n 'h-4 w-4 shrink-0',\n isActive ? 'text-[hsl(var(--brand-primary))]' : 'text-[hsl(var(--text-tertiary))]',\n )} />\n ) : isRecent ? (\n <Clock className={cn(\n 'h-4 w-4 shrink-0',\n isActive ? 'text-[hsl(var(--brand-primary))]' : 'text-[hsl(var(--text-tertiary))]',\n )} />\n ) : (\n <div className=\"h-4 w-4 shrink-0\" />\n )}\n\n <div className=\"flex-1 min-w-0\">\n <div className={cn(\n 'text-sm font-medium truncate',\n isActive ? 'text-[hsl(var(--text-primary))]' : 'text-[hsl(var(--text-primary))]',\n )}>\n {item.label}\n </div>\n {item.description && (\n <div className=\"text-[11px] text-[hsl(var(--text-tertiary))] truncate mt-0.5\">\n {item.description}\n </div>\n )}\n </div>\n\n {item.shortcut && (\n <kbd className=\"flex items-center gap-0.5 rounded-md border border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-surface))] px-1.5 py-0.5 text-[10px] text-[hsl(var(--text-tertiary))] font-mono shrink-0\">\n {item.shortcut}\n </kbd>\n )}\n\n {isActive && (\n <CornerDownLeft className=\"h-3.5 w-3.5 text-[hsl(var(--text-tertiary))] shrink-0\" />\n )}\n </button>\n )\n })}\n </div>\n )\n })}\n </div>\n\n {/* Footer */}\n <div className=\"flex items-center gap-4 px-4 py-2 border-t border-[hsl(var(--border-subtle)/0.5)] text-[10px] text-[hsl(var(--text-tertiary))]\">\n <span className=\"inline-flex items-center gap-1\">\n <kbd className=\"rounded border border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-surface))] px-1 py-0.5 font-mono\">&uarr;&darr;</kbd>\n Navigate\n </span>\n <span className=\"inline-flex items-center gap-1\">\n <kbd className=\"rounded border border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-surface))] px-1 py-0.5 font-mono\">&crarr;</kbd>\n Select\n </span>\n <span className=\"inline-flex items-center gap-1\">\n <kbd className=\"rounded border border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-surface))] px-1 py-0.5 font-mono\">Esc</kbd>\n Close\n </span>\n <span className=\"ml-auto inline-flex items-center gap-1\">\n <kbd className=\"rounded border border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-surface))] px-1 py-0.5 font-mono\">\n {isMac ? '\\u2318' : 'Ctrl+'}\n </kbd>\n <kbd className=\"rounded border border-[hsl(var(--border-subtle))] bg-[hsl(var(--bg-surface))] px-1 py-0.5 font-mono uppercase\">\n {hotkey}\n </kbd>\n Toggle\n </span>\n </div>\n </motion.div>\n </div>\n )}\n </AnimatePresence>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useState, useCallback, useRef } from 'react'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { GripVertical } from 'lucide-react'\nimport { cn } from '../utils'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** A sortable item must have a string id. */\nexport interface SortableItem {\n id: string\n [key: string]: unknown\n}\n\n/** Props passed to the drag handle in the render function. */\nexport interface DragHandleProps {\n /** Attach to the drag handle element. */\n onPointerDown: (e: React.PointerEvent) => void\n /** Whether this item is currently being dragged. */\n isDragging: boolean\n /** Keyboard handler for accessible reordering. */\n onKeyDown: (e: React.KeyboardEvent) => void\n /** The drag handle should be focusable. */\n tabIndex: number\n /** ARIA role for the drag handle. */\n role: string\n /** ARIA description for keyboard reordering. */\n 'aria-roledescription': string\n}\n\n/** Props for the SortableList component. */\nexport interface SortableListProps<T extends SortableItem> {\n /** Array of items to display. Each must have a unique `id`. */\n items: T[]\n /** Callback when items are reordered. Receives the new array. */\n onReorder: (items: T[]) => void\n /** Render function for each item. Receives the item, its index, and drag handle props. */\n renderItem: (item: T, index: number, dragHandleProps: DragHandleProps) => React.JSX.Element\n /** Layout direction. Default \"vertical\". */\n direction?: 'vertical' | 'horizontal'\n /** Additional class name for the list container. */\n className?: string\n}\n\n// ---------------------------------------------------------------------------\n// SortableList\n// ---------------------------------------------------------------------------\n\n/**\n * @description A drag-and-drop reorderable list with smooth Framer Motion layout animations.\n * Pure React implementation using pointer events (no external DnD library).\n * Supports keyboard reordering (Space to pick up, arrows to move, Enter/Space to drop).\n * Touch-friendly and accessible.\n */\nexport function SortableList<T extends SortableItem>({\n items,\n onReorder,\n renderItem,\n direction = 'vertical',\n className,\n}: SortableListProps<T>): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n const [dragIdx, setDragIdx] = useState<number | null>(null)\n const [overIdx, setOverIdx] = useState<number | null>(null)\n const [kbPickedIdx, setKbPickedIdx] = useState<number | null>(null)\n const containerRef = useRef<HTMLDivElement>(null)\n const startPos = useRef({ x: 0, y: 0 })\n const dragItemId = useRef<string | null>(null)\n const dragIdxRef = useRef<number | null>(null)\n const overIdxRef = useRef<number | null>(null)\n\n const handlePointerDown = useCallback(\n (index: number) => (e: React.PointerEvent) => {\n e.preventDefault()\n // Only respond to primary button / touch\n if (e.button !== 0) return\n\n setDragIdx(index)\n setOverIdx(index)\n dragIdxRef.current = index\n overIdxRef.current = index\n dragItemId.current = items[index]?.id ?? null\n startPos.current = { x: e.clientX, y: e.clientY }\n\n const handlePointerMove = (ev: PointerEvent) => {\n if (!containerRef.current) return\n const container = containerRef.current\n const children = Array.from(container.children) as HTMLElement[]\n\n // Find which item we're over\n for (let i = 0; i < children.length; i++) {\n const rect = children[i]!.getBoundingClientRect()\n const midX = rect.left + rect.width / 2\n const midY = rect.top + rect.height / 2\n const isOver = direction === 'vertical'\n ? ev.clientY < midY + rect.height / 2 && ev.clientY > midY - rect.height / 2\n : ev.clientX < midX + rect.width / 2 && ev.clientX > midX - rect.width / 2\n\n if (isOver) {\n overIdxRef.current = i\n setOverIdx(i)\n break\n }\n }\n }\n\n const handlePointerUp = () => {\n document.removeEventListener('pointermove', handlePointerMove)\n document.removeEventListener('pointerup', handlePointerUp)\n\n const prev = dragIdxRef.current\n const over = overIdxRef.current\n if (prev !== null && over !== null && prev !== over) {\n const newItems = [...items]\n const [moved] = newItems.splice(prev, 1)\n if (moved) newItems.splice(over, 0, moved)\n onReorder(newItems)\n }\n dragIdxRef.current = null\n overIdxRef.current = null\n setDragIdx(null)\n setOverIdx(null)\n }\n\n document.addEventListener('pointermove', handlePointerMove)\n document.addEventListener('pointerup', handlePointerUp)\n },\n [items, onReorder, direction],\n )\n\n // Keyboard reorder\n const handleKeyDown = useCallback(\n (index: number) => (e: React.KeyboardEvent) => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault()\n if (kbPickedIdx === null) {\n // Pick up\n setKbPickedIdx(index)\n } else {\n // Drop\n if (kbPickedIdx !== index) {\n const newItems = [...items]\n const [moved] = newItems.splice(kbPickedIdx, 1)\n if (moved) newItems.splice(index, 0, moved)\n onReorder(newItems)\n }\n setKbPickedIdx(null)\n }\n } else if (e.key === 'Escape') {\n setKbPickedIdx(null)\n } else if (kbPickedIdx !== null) {\n const isUp = direction === 'vertical' ? e.key === 'ArrowUp' : e.key === 'ArrowLeft'\n const isDown = direction === 'vertical' ? e.key === 'ArrowDown' : e.key === 'ArrowRight'\n\n if (isUp && kbPickedIdx > 0) {\n e.preventDefault()\n const newItems = [...items]\n const [moved] = newItems.splice(kbPickedIdx, 1)\n const newIdx = kbPickedIdx - 1\n if (moved) newItems.splice(newIdx, 0, moved)\n onReorder(newItems)\n setKbPickedIdx(newIdx)\n } else if (isDown && kbPickedIdx < items.length - 1) {\n e.preventDefault()\n const newItems = [...items]\n const [moved] = newItems.splice(kbPickedIdx, 1)\n const newIdx = kbPickedIdx + 1\n if (moved) newItems.splice(newIdx, 0, moved)\n onReorder(newItems)\n setKbPickedIdx(newIdx)\n }\n }\n },\n [items, onReorder, kbPickedIdx, direction],\n )\n\n // Compute visual order during drag\n const getVisualItems = useCallback(() => {\n if (dragIdx === null || overIdx === null || dragIdx === overIdx) return items\n const visual = [...items]\n const [moved] = visual.splice(dragIdx, 1)\n if (moved) visual.splice(overIdx, 0, moved)\n return visual\n }, [items, dragIdx, overIdx])\n\n const visualItems = dragIdx !== null ? getVisualItems() : items\n\n return (\n <div\n ref={containerRef}\n className={cn(\n 'flex',\n direction === 'vertical' ? 'flex-col' : 'flex-row flex-wrap',\n className,\n )}\n role=\"listbox\"\n aria-label=\"Sortable list\"\n >\n <AnimatePresence>\n {visualItems.map((item, index) => {\n const isDragging = dragIdx !== null && item.id === dragItemId.current\n const isKbPicked = kbPickedIdx !== null && items[kbPickedIdx]?.id === item.id\n\n const dragHandleProps: DragHandleProps = {\n onPointerDown: handlePointerDown(items.findIndex(i => i.id === item.id)),\n isDragging: isDragging || isKbPicked,\n onKeyDown: handleKeyDown(items.findIndex(i => i.id === item.id)),\n tabIndex: 0,\n role: 'option',\n 'aria-roledescription': 'sortable item',\n }\n\n return (\n <motion.div\n key={item.id}\n layout={!prefersReducedMotion}\n transition={prefersReducedMotion ? { duration: 0 } : { type: 'spring', stiffness: 500, damping: 35, mass: 0.5 }}\n className={cn(\n 'relative',\n isDragging && 'z-10 opacity-80',\n isKbPicked && 'ring-2 ring-[hsl(var(--brand-primary))] rounded-lg',\n )}\n role=\"option\"\n aria-selected={isKbPicked}\n >\n {/* Drop indicator line */}\n {dragIdx !== null && overIdx === index && !isDragging && (\n <div\n className={cn(\n 'absolute z-20 bg-[hsl(var(--brand-primary))] rounded-full',\n direction === 'vertical'\n ? 'left-0 right-0 -top-px h-0.5'\n : 'top-0 bottom-0 -left-px w-0.5',\n )}\n />\n )}\n {renderItem(item, index, dragHandleProps)}\n </motion.div>\n )\n })}\n </AnimatePresence>\n </div>\n )\n}\n\n/**\n * @description Default drag handle component. Renders a GripVertical icon\n * with proper pointer/keyboard event handlers from DragHandleProps.\n */\nexport function DragHandle(props: DragHandleProps): React.JSX.Element {\n return (\n <span\n onPointerDown={props.onPointerDown}\n onKeyDown={props.onKeyDown}\n tabIndex={props.tabIndex}\n role={props.role}\n aria-roledescription={props['aria-roledescription']}\n className={cn(\n 'inline-flex items-center justify-center p-1 rounded cursor-grab touch-none select-none',\n 'text-[hsl(var(--text-disabled))] hover:text-[hsl(var(--text-secondary))] transition-colors',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[hsl(var(--brand-primary))]',\n props.isDragging && 'cursor-grabbing text-[hsl(var(--brand-primary))]',\n )}\n >\n <GripVertical className=\"h-4 w-4\" />\n </span>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useState, useEffect, useRef, useCallback, useMemo } from 'react'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { ArrowUp, Loader2 } from 'lucide-react'\nimport { cn } from '../utils'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Props for the InfiniteScroll component. */\nexport interface InfiniteScrollProps<T> {\n /** Array of loaded items. */\n items: T[]\n /** Render function for each item. */\n renderItem: (item: T, index: number) => React.JSX.Element\n /** Called when more items should be loaded. */\n loadMore: () => void | Promise<void>\n /** Whether more items are available. */\n hasMore: boolean\n /** Whether a load operation is in progress. */\n isLoading?: boolean\n /** Pixels from bottom to trigger loadMore. Default 200. */\n threshold?: number\n /** Fixed item height for virtualization. If omitted, all items render (no virtualization). */\n itemHeight?: number\n /** Content to display when items array is empty. */\n emptyState?: React.ReactNode\n /** Function to derive a stable key for each item. Falls back to index. */\n getItemKey?: (item: T, index: number) => string | number\n /** Additional class name for the scroll container. */\n className?: string\n}\n\n// ---------------------------------------------------------------------------\n// InfiniteScroll\n// ---------------------------------------------------------------------------\n\n/**\n * @description A virtualized infinite-scroll list using IntersectionObserver.\n * Supports optional height-based virtualization, loading indicators, scroll-to-top,\n * empty states, and skeleton placeholders. No scroll event listeners used.\n */\nexport function InfiniteScroll<T>({\n items,\n renderItem,\n loadMore,\n hasMore,\n isLoading = false,\n threshold = 200,\n itemHeight,\n getItemKey,\n emptyState,\n className,\n}: InfiniteScrollProps<T>): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n const containerRef = useRef<HTMLDivElement>(null)\n const sentinelRef = useRef<HTMLDivElement>(null)\n const [showScrollTop, setShowScrollTop] = useState(false)\n const loadingRef = useRef(false)\n const loadMoreRef = useRef(loadMore)\n useEffect(() => { loadMoreRef.current = loadMore }, [loadMore])\n\n // IntersectionObserver for infinite load trigger\n useEffect(() => {\n const sentinel = sentinelRef.current\n if (!sentinel) return\n\n const observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0]\n if (entry?.isIntersecting && hasMore && !isLoading && !loadingRef.current) {\n loadingRef.current = true\n const result = loadMoreRef.current()\n if (result && typeof result.then === 'function') {\n result.then(() => { loadingRef.current = false }).catch(() => { loadingRef.current = false })\n } else {\n loadingRef.current = false\n }\n }\n },\n {\n root: containerRef.current,\n rootMargin: `0px 0px ${threshold}px 0px`,\n },\n )\n\n observer.observe(sentinel)\n return () => observer.disconnect()\n }, [hasMore, isLoading, threshold])\n\n // Update loadingRef when isLoading changes\n useEffect(() => {\n if (!isLoading) loadingRef.current = false\n }, [isLoading])\n\n // Scroll position tracking for scroll-to-top button\n useEffect(() => {\n const container = containerRef.current\n if (!container) return\n\n const handler = () => {\n setShowScrollTop(container.scrollTop > 400)\n }\n container.addEventListener('scroll', handler, { passive: true })\n return () => container.removeEventListener('scroll', handler)\n }, [])\n\n const scrollToTop = useCallback(() => {\n containerRef.current?.scrollTo({ top: 0, behavior: prefersReducedMotion ? 'instant' : 'smooth' })\n }, [prefersReducedMotion])\n\n // Virtualization\n const [scrollTop, setScrollTop] = useState(0)\n const containerHeight = useRef(0)\n\n useEffect(() => {\n if (!itemHeight) return\n const container = containerRef.current\n if (!container) return\n\n containerHeight.current = container.clientHeight\n const handler = () => {\n setScrollTop(container.scrollTop)\n containerHeight.current = container.clientHeight\n }\n container.addEventListener('scroll', handler, { passive: true })\n return () => container.removeEventListener('scroll', handler)\n }, [itemHeight])\n\n const virtualizedContent = useMemo(() => {\n if (!itemHeight) return null\n\n const visibleHeight = containerHeight.current || 600\n const buffer = 5\n const startIdx = Math.max(0, Math.floor(scrollTop / itemHeight) - buffer)\n const endIdx = Math.min(\n items.length,\n Math.ceil((scrollTop + visibleHeight) / itemHeight) + buffer,\n )\n\n const totalHeight = items.length * itemHeight\n const offsetTop = startIdx * itemHeight\n\n return {\n totalHeight,\n offsetTop,\n visibleItems: items.slice(startIdx, endIdx),\n startIdx,\n }\n }, [items, itemHeight, scrollTop])\n\n // Empty state\n if (items.length === 0 && !isLoading && !hasMore) {\n return (\n <div className={cn('flex items-center justify-center min-h-[200px]', className)}>\n {emptyState ?? (\n <div className=\"text-center py-12\">\n <p className=\"text-sm text-[hsl(var(--text-tertiary))]\">No items to display.</p>\n </div>\n )}\n </div>\n )\n }\n\n return (\n <div\n ref={containerRef}\n className={cn('relative overflow-y-auto', className)}\n >\n {/* Virtualized rendering */}\n {virtualizedContent ? (\n <div style={{ height: virtualizedContent.totalHeight, position: 'relative' }}>\n <div style={{ position: 'absolute', top: virtualizedContent.offsetTop, left: 0, right: 0 }}>\n {virtualizedContent.visibleItems.map((item, i) => (\n <div key={virtualizedContent.startIdx + i} style={{ height: itemHeight }}>\n {renderItem(item, virtualizedContent.startIdx + i)}\n </div>\n ))}\n </div>\n </div>\n ) : (\n /* Non-virtualized rendering */\n items.map((item, index) => (\n <div key={getItemKey ? getItemKey(item, index) : index}>\n {renderItem(item, index)}\n </div>\n ))\n )}\n\n {/* Loading indicator */}\n {isLoading && (\n <div className=\"flex items-center justify-center py-6 gap-2\">\n <Loader2 className=\"h-5 w-5 text-[hsl(var(--brand-primary))] animate-spin\" />\n <span className=\"text-sm text-[hsl(var(--text-tertiary))]\">Loading more...</span>\n </div>\n )}\n\n {/* Skeleton placeholders while loading with no items yet */}\n {isLoading && items.length === 0 && (\n <div className=\"space-y-3 p-4\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"skeleton-shimmer h-16 rounded-xl\" />\n ))}\n </div>\n )}\n\n {/* No more items */}\n {!hasMore && items.length > 0 && (\n <div className=\"py-4 text-center\">\n <span className=\"text-[11px] text-[hsl(var(--text-tertiary))]\">\n All {items.length} item{items.length !== 1 ? 's' : ''} loaded\n </span>\n </div>\n )}\n\n {/* Sentinel for IntersectionObserver */}\n <div ref={sentinelRef} className=\"h-px w-full\" aria-hidden=\"true\" />\n\n {/* Scroll to top button */}\n <AnimatePresence>\n {showScrollTop && (\n <motion.button\n initial={prefersReducedMotion ? undefined : { opacity: 0, scale: 0.8 }}\n animate={prefersReducedMotion ? undefined : { opacity: 1, scale: 1 }}\n exit={prefersReducedMotion ? undefined : { opacity: 0, scale: 0.8 }}\n transition={{ duration: 0.15 }}\n onClick={scrollToTop}\n className={cn(\n 'sticky bottom-4 left-1/2 -translate-x-1/2 z-10',\n 'inline-flex items-center gap-1.5 rounded-full',\n 'px-3 py-2 text-[11px] font-medium',\n 'bg-[hsl(var(--bg-elevated))] border border-[hsl(var(--border-default))]',\n 'text-[hsl(var(--text-secondary))] shadow-lg',\n 'hover:bg-[hsl(var(--bg-overlay))] hover:text-[hsl(var(--text-primary))] transition-colors',\n 'cursor-pointer',\n )}\n >\n <ArrowUp className=\"h-3.5 w-3.5\" />\n Back to top\n </motion.button>\n )}\n </AnimatePresence>\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useState, useEffect, useCallback, useRef, useMemo } from 'react'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { Copy, Check, Pipette } from 'lucide-react'\nimport { cn } from '../utils'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Props for the ColorInput component. */\nexport interface ColorInputProps {\n /** Current color value as hex string (e.g. \"#ff0000\"). */\n value: string\n /** Called when the color changes. */\n onChange: (color: string) => void\n /** Optional label. */\n label?: string\n /** Preset color swatches. */\n presets?: string[]\n /** Show alpha/opacity slider. */\n showAlpha?: boolean\n /** Display format for the text input. Default \"hex\". */\n format?: 'hex' | 'rgb' | 'hsl'\n /** Additional class name. */\n className?: string\n}\n\n// ---------------------------------------------------------------------------\n// Color conversion helpers\n// ---------------------------------------------------------------------------\n\nfunction hexToRgb(hex: string): { r: number; g: number; b: number } {\n const clean = hex.replace('#', '')\n const full = clean.length === 3\n ? clean.split('').map(c => c + c).join('')\n : clean\n const num = parseInt(full, 16)\n return { r: (num >> 16) & 255, g: (num >> 8) & 255, b: num & 255 }\n}\n\nfunction rgbToHex(r: number, g: number, b: number): string {\n return '#' + [r, g, b].map(c => Math.round(c).toString(16).padStart(2, '0')).join('')\n}\n\nfunction rgbToHsl(r: number, g: number, b: number): { h: number; s: number; l: number } {\n const rn = r / 255, gn = g / 255, bn = b / 255\n const max = Math.max(rn, gn, bn), min = Math.min(rn, gn, bn)\n const l = (max + min) / 2\n if (max === min) return { h: 0, s: 0, l }\n const d = max - min\n const s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n let h = 0\n if (max === rn) h = ((gn - bn) / d + (gn < bn ? 6 : 0)) / 6\n else if (max === gn) h = ((bn - rn) / d + 2) / 6\n else h = ((rn - gn) / d + 4) / 6\n return { h, s, l }\n}\n\nfunction hslToRgb(h: number, s: number, l: number): { r: number; g: number; b: number } {\n if (s === 0) {\n const v = Math.round(l * 255)\n return { r: v, g: v, b: v }\n }\n const hue2rgb = (p: number, q: number, t: number) => {\n const tt = t < 0 ? t + 1 : t > 1 ? t - 1 : t\n if (tt < 1 / 6) return p + (q - p) * 6 * tt\n if (tt < 1 / 2) return q\n if (tt < 2 / 3) return p + (q - p) * (2 / 3 - tt) * 6\n return p\n }\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s\n const p = 2 * l - q\n return {\n r: Math.round(hue2rgb(p, q, h + 1 / 3) * 255),\n g: Math.round(hue2rgb(p, q, h) * 255),\n b: Math.round(hue2rgb(p, q, h - 1 / 3) * 255),\n }\n}\n\nfunction formatColor(hex: string, fmt: 'hex' | 'rgb' | 'hsl'): string {\n if (fmt === 'hex') return hex\n const { r, g, b } = hexToRgb(hex)\n if (fmt === 'rgb') return `rgb(${r}, ${g}, ${b})`\n const { h, s, l } = rgbToHsl(r, g, b)\n return `hsl(${Math.round(h * 360)}, ${Math.round(s * 100)}%, ${Math.round(l * 100)}%)`\n}\n\nfunction isSafeColor(c: string): boolean {\n return /^#[0-9a-f]{3,8}$/i.test(c) ||\n /^rgba?\\(\\s*[\\d.]+/.test(c) ||\n /^hsla?\\(\\s*[\\d.]+/.test(c)\n}\n\nconst RECENT_COLORS_KEY = 'ui-kit-recent-colors'\nconst MAX_RECENT = 8\n\n// ---------------------------------------------------------------------------\n// ColorInput\n// ---------------------------------------------------------------------------\n\n/**\n * @description A compact color picker input with swatch preview, expandable picker panel\n * featuring hue/saturation area, lightness slider, optional alpha slider, preset swatches,\n * format switching (hex/rgb/hsl), clipboard copy, and recent color history.\n */\nexport function ColorInput({\n value,\n onChange,\n label,\n presets,\n showAlpha = false,\n format = 'hex',\n className,\n}: ColorInputProps): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n const isValidHex = /^#[0-9a-f]{3,8}$/i.test(value)\n const safeValue = isValidHex ? value : '#000000'\n const [open, setOpen] = useState(false)\n const [copied, setCopied] = useState(false)\n const [textInput, setTextInput] = useState('')\n const [alpha, setAlpha] = useState(1)\n const panelRef = useRef<HTMLDivElement>(null)\n const satAreaRef = useRef<HTMLDivElement>(null)\n const copyTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n useEffect(() => () => { if (copyTimerRef.current) clearTimeout(copyTimerRef.current) }, [])\n\n // Recent colors\n const [recentColors, setRecentColors] = useState<string[]>(() => {\n if (typeof window === 'undefined') return []\n try {\n const raw = JSON.parse(localStorage.getItem(RECENT_COLORS_KEY) ?? '[]')\n return Array.isArray(raw) ? raw.filter((x: unknown) => typeof x === 'string' && x.length < 256).slice(0, MAX_RECENT) : []\n } catch { return [] }\n })\n\n const addRecent = useCallback((color: string) => {\n setRecentColors(prev => {\n const updated = [color, ...prev.filter(c => c !== color)].slice(0, MAX_RECENT)\n try { localStorage.setItem(RECENT_COLORS_KEY, JSON.stringify(updated)) } catch { /* noop */ }\n return updated\n })\n }, [])\n\n // HSL from current value\n const { r, g, b } = useMemo(() => hexToRgb(safeValue), [safeValue])\n const hsl = useMemo(() => rgbToHsl(r, g, b), [r, g, b])\n\n // Sync text input\n useEffect(() => {\n setTextInput(formatColor(safeValue, format))\n }, [safeValue, format])\n\n // Close on click outside\n useEffect(() => {\n if (!open) return\n const handler = (e: MouseEvent) => {\n if (panelRef.current && !panelRef.current.contains(e.target as Node)) {\n setOpen(false)\n addRecent(value)\n }\n }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [open, value, addRecent])\n\n // Saturation/brightness area interaction\n const handleSatAreaPointer = useCallback(\n (e: React.PointerEvent | PointerEvent) => {\n if (!satAreaRef.current) return\n const rect = satAreaRef.current.getBoundingClientRect()\n const x = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width))\n const y = Math.max(0, Math.min(1, (e.clientY - rect.top) / rect.height))\n // x = saturation, y = 1-lightness (top=light, bottom=dark)\n const s = x\n const l = 1 - y\n const adjustedL = 0.05 + l * 0.9 // Keep within visible range\n const rgb = hslToRgb(hsl.h, s, adjustedL)\n onChange(rgbToHex(rgb.r, rgb.g, rgb.b))\n },\n [hsl.h, onChange],\n )\n\n const handleSatAreaDown = useCallback(\n (e: React.PointerEvent) => {\n e.preventDefault()\n handleSatAreaPointer(e)\n const move = (ev: PointerEvent) => handleSatAreaPointer(ev)\n const up = () => {\n document.removeEventListener('pointermove', move)\n document.removeEventListener('pointerup', up)\n }\n document.addEventListener('pointermove', move)\n document.addEventListener('pointerup', up)\n },\n [handleSatAreaPointer],\n )\n\n // Hue slider\n const handleHueChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const h = Number(e.target.value) / 360\n const rgb = hslToRgb(h, hsl.s || 0.5, hsl.l || 0.5)\n onChange(rgbToHex(rgb.r, rgb.g, rgb.b))\n },\n [hsl.s, hsl.l, onChange],\n )\n\n // Text input commit\n const handleTextCommit = useCallback(() => {\n const v = textInput.trim()\n // Try hex\n if (/^#?[0-9a-f]{3,6}$/i.test(v)) {\n const hex = v.startsWith('#') ? v : '#' + v\n onChange(hex)\n return\n }\n // Try rgb()\n const rgbMatch = v.match(/rgb\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/)\n if (rgbMatch) {\n onChange(rgbToHex(Number(rgbMatch[1]), Number(rgbMatch[2]), Number(rgbMatch[3])))\n return\n }\n // Try hsl()\n const hslMatch = v.match(/hsl\\(\\s*(\\d+)\\s*,\\s*(\\d+)%?\\s*,\\s*(\\d+)%?\\s*\\)/)\n if (hslMatch) {\n const rgb = hslToRgb(Number(hslMatch[1]) / 360, Number(hslMatch[2]) / 100, Number(hslMatch[3]) / 100)\n onChange(rgbToHex(rgb.r, rgb.g, rgb.b))\n return\n }\n // Revert\n setTextInput(formatColor(safeValue, format))\n }, [textInput, safeValue, format, onChange])\n\n const handleCopy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(formatColor(safeValue, format))\n setCopied(true)\n if (copyTimerRef.current) clearTimeout(copyTimerRef.current)\n copyTimerRef.current = setTimeout(() => setCopied(false), 1500)\n } catch { /* noop */ }\n }, [safeValue, format])\n\n // Position for sat/brightness marker\n const markerX = hsl.s * 100\n const markerY = (1 - (hsl.l - 0.05) / 0.9) * 100\n\n return (\n <div ref={panelRef} className={cn('relative inline-block', className)}>\n {/* Label */}\n {label && (\n <label className=\"block text-xs font-medium text-[hsl(var(--text-secondary))] mb-1.5\">\n {label}\n </label>\n )}\n\n {/* Compact input */}\n <button\n onClick={() => setOpen(o => !o)}\n className={cn(\n 'inline-flex items-center gap-2 rounded-lg border border-[hsl(var(--border-subtle))]',\n 'bg-[hsl(var(--bg-surface))] px-3 py-2 text-sm',\n 'hover:border-[hsl(var(--border-default))] transition-colors',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[hsl(var(--brand-primary))]',\n )}\n >\n <span\n className=\"h-5 w-5 rounded-md border border-[hsl(var(--border-subtle))]\"\n style={{ backgroundColor: isSafeColor(safeValue) ? safeValue : undefined }}\n />\n <span className=\"font-mono text-xs text-[hsl(var(--text-primary))]\">\n {formatColor(value, format)}\n </span>\n </button>\n\n {/* Expanded picker panel */}\n <AnimatePresence>\n {open && (\n <motion.div\n initial={prefersReducedMotion ? undefined : { opacity: 0, scale: 0.96, y: -4 }}\n animate={prefersReducedMotion ? undefined : { opacity: 1, scale: 1, y: 0 }}\n exit={prefersReducedMotion ? undefined : { opacity: 0, scale: 0.96, y: -4 }}\n transition={prefersReducedMotion ? { duration: 0 } : { duration: 0.15 }}\n className={cn(\n 'absolute z-50 mt-2 w-64 rounded-xl overflow-hidden',\n 'border border-[hsl(var(--border-default))]',\n 'bg-[hsl(var(--bg-elevated))] shadow-xl',\n 'p-3',\n )}\n >\n {/* Saturation/Brightness area */}\n <div\n ref={satAreaRef}\n onPointerDown={handleSatAreaDown}\n className=\"relative h-36 w-full rounded-lg cursor-crosshair overflow-hidden mb-3\"\n style={{\n background: `linear-gradient(to top, #000, transparent),\n linear-gradient(to right, #fff, hsl(${Math.round(hsl.h * 360)}, 100%, 50%))`,\n }}\n >\n {/* Marker */}\n <div\n className=\"absolute w-4 h-4 rounded-full border-2 border-white shadow-md -translate-x-1/2 -translate-y-1/2 pointer-events-none\"\n style={{\n left: `${markerX}%`,\n top: `${Math.max(0, Math.min(100, markerY))}%`,\n backgroundColor: isSafeColor(safeValue) ? safeValue : undefined,\n }}\n />\n </div>\n\n {/* Hue slider */}\n <div className=\"mb-3\">\n <input\n type=\"range\"\n min={0}\n max={360}\n value={Math.round(hsl.h * 360)}\n onChange={handleHueChange}\n className=\"w-full h-3 rounded-full appearance-none cursor-pointer\"\n style={{\n background: 'linear-gradient(to right, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00)',\n }}\n />\n </div>\n\n {/* Alpha slider */}\n {showAlpha && (\n <div className=\"mb-3\">\n <input\n type=\"range\"\n min={0}\n max={100}\n value={Math.round(alpha * 100)}\n onChange={e => setAlpha(Number(e.target.value) / 100)}\n className=\"w-full h-3 rounded-full appearance-none cursor-pointer\"\n style={{\n background: `linear-gradient(to right, transparent, ${isSafeColor(safeValue) ? safeValue : '#000'})`,\n }}\n />\n </div>\n )}\n\n {/* Text input + copy */}\n <div className=\"flex items-center gap-2 mb-3\">\n <input\n type=\"text\"\n value={textInput}\n onChange={e => setTextInput(e.target.value)}\n onBlur={handleTextCommit}\n onKeyDown={e => { if (e.key === 'Enter') handleTextCommit() }}\n className={cn(\n 'flex-1 rounded-md border border-[hsl(var(--border-subtle))]',\n 'bg-[hsl(var(--bg-surface))] px-2 py-1 text-xs font-mono',\n 'text-[hsl(var(--text-primary))] outline-none',\n 'focus:border-[hsl(var(--brand-primary))] transition-colors',\n )}\n />\n <button\n onClick={handleCopy}\n className={cn(\n 'p-1.5 rounded-md transition-colors',\n 'text-[hsl(var(--text-tertiary))] hover:text-[hsl(var(--text-primary))]',\n 'hover:bg-[hsl(var(--bg-surface))]',\n )}\n title=\"Copy color\"\n >\n {copied ? <Check className=\"h-3.5 w-3.5 text-[hsl(var(--status-ok))]\" /> : <Copy className=\"h-3.5 w-3.5\" />}\n </button>\n </div>\n\n {/* Presets */}\n {presets && presets.length > 0 && (\n <div className=\"mb-2\">\n <span className=\"text-[10px] font-semibold uppercase tracking-wider text-[hsl(var(--text-tertiary))] mb-1.5 block\">\n Presets\n </span>\n <div className=\"flex flex-wrap gap-1.5\">\n {presets.map(color => (\n <button\n key={color}\n onClick={() => { onChange(color); addRecent(color) }}\n className={cn(\n 'h-6 w-6 rounded-md border transition-all',\n value === color\n ? 'border-[hsl(var(--brand-primary))] ring-2 ring-[hsl(var(--brand-primary)/0.3)] scale-110'\n : 'border-[hsl(var(--border-subtle))] hover:scale-110',\n )}\n style={{ backgroundColor: isSafeColor(color) ? color : undefined }}\n title={color}\n />\n ))}\n </div>\n </div>\n )}\n\n {/* Recent colors */}\n {recentColors.length > 0 && (\n <div>\n <span className=\"text-[10px] font-semibold uppercase tracking-wider text-[hsl(var(--text-tertiary))] mb-1.5 block\">\n Recent\n </span>\n <div className=\"flex flex-wrap gap-1.5\">\n {recentColors.map(color => (\n <button\n key={color}\n onClick={() => onChange(color)}\n className={cn(\n 'h-6 w-6 rounded-md border border-[hsl(var(--border-subtle))]',\n 'hover:scale-110 transition-transform',\n )}\n style={{ backgroundColor: isSafeColor(color) ? color : undefined }}\n title={color}\n />\n ))}\n </div>\n </div>\n )}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useState, useCallback, useEffect, useRef, useMemo } from 'react'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { Check, ChevronRight, ChevronLeft } from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '../utils'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Definition of a single wizard step. */\nexport interface WizardStep {\n /** Unique step identifier. */\n id: string\n /** Step title displayed in the step indicator. */\n title: string\n /** Optional description below the title. */\n description?: string\n /** Optional icon for the step indicator. */\n icon?: LucideIcon\n /** Step content to render. */\n content: React.ReactNode\n /** Validation function called before advancing. Return true to allow, false to block. */\n validate?: () => boolean | Promise<boolean>\n}\n\n/** Props for the StepWizard component. */\nexport interface StepWizardProps {\n /** Array of steps in order. */\n steps: WizardStep[]\n /** Called when the final step is completed. */\n onComplete: () => void\n /** Called whenever the active step changes. */\n onStepChange?: (step: number) => void\n /** Step indicator layout. Default \"horizontal\". */\n orientation?: 'horizontal' | 'vertical'\n /** Allow skipping forward to any uncompleted step. Default false. */\n allowSkip?: boolean\n /** Show a summary/completion state after the last step. Default false. */\n showSummary?: boolean\n /** Additional class name for the root container. */\n className?: string\n}\n\nconst SESSION_KEY_PREFIX = 'ui-kit-wizard-'\n\n// ---------------------------------------------------------------------------\n// StepWizard\n// ---------------------------------------------------------------------------\n\n/**\n * @description A multi-step form wizard with animated slide transitions, per-step validation,\n * step indicator bar (horizontal or vertical), keyboard navigation, progress percentage,\n * and auto-save to sessionStorage for resilience to page refresh.\n */\nexport function StepWizard({\n steps,\n onComplete,\n onStepChange,\n orientation = 'horizontal',\n allowSkip = false,\n showSummary = false,\n className,\n}: StepWizardProps): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n const sessionKey = useMemo(() => SESSION_KEY_PREFIX + steps.map(s => s.id).join('-'), [steps])\n\n // Restore state from sessionStorage\n const [currentStep, setCurrentStep] = useState(() => {\n if (typeof window === 'undefined') return 0\n try {\n const saved = sessionStorage.getItem(sessionKey)\n if (saved) {\n const parsed = JSON.parse(saved) as { step: number; completed: number[] }\n return Math.min(parsed.step, steps.length - 1)\n }\n } catch { /* noop */ }\n return 0\n })\n\n const [completed, setCompleted] = useState<Set<number>>(() => {\n if (typeof window === 'undefined') return new Set()\n try {\n const saved = sessionStorage.getItem(sessionKey)\n if (saved) {\n const parsed = JSON.parse(saved) as { step: number; completed: number[] }\n return new Set(parsed.completed)\n }\n } catch { /* noop */ }\n return new Set()\n })\n\n const [isValidating, setIsValidating] = useState(false)\n const [direction, setDirection] = useState(1) // 1=forward, -1=backward\n const [isComplete, setIsComplete] = useState(false)\n const contentRef = useRef<HTMLDivElement>(null)\n const wizardRef = useRef<HTMLDivElement>(null)\n const validatingRef = useRef(false)\n\n // Save state to sessionStorage\n useEffect(() => {\n try {\n sessionStorage.setItem(sessionKey, JSON.stringify({\n step: currentStep,\n completed: [...completed],\n }))\n } catch { /* noop */ }\n }, [currentStep, completed, sessionKey])\n\n const totalSteps = steps.length\n const progress = totalSteps === 0 ? 100 : Math.round(((completed.size) / totalSteps) * 100)\n\n const goToStep = useCallback((idx: number) => {\n setDirection(idx > currentStep ? 1 : -1)\n setCurrentStep(idx)\n onStepChange?.(idx)\n }, [currentStep, onStepChange])\n\n const handleNext = useCallback(async () => {\n if (validatingRef.current) return\n const step = steps[currentStep]\n if (step?.validate) {\n validatingRef.current = true\n setIsValidating(true)\n try {\n const valid = await step.validate()\n if (!valid) {\n setIsValidating(false)\n validatingRef.current = false\n return\n }\n } catch {\n setIsValidating(false)\n validatingRef.current = false\n return\n }\n setIsValidating(false)\n validatingRef.current = false\n }\n\n setCompleted(prev => new Set(prev).add(currentStep))\n\n if (currentStep < totalSteps - 1) {\n goToStep(currentStep + 1)\n } else {\n // Final step completed\n if (showSummary) {\n setIsComplete(true)\n }\n onComplete()\n // Clear session storage\n try { sessionStorage.removeItem(sessionKey) } catch { /* noop */ }\n }\n }, [currentStep, steps, totalSteps, goToStep, onComplete, showSummary, sessionKey])\n\n const handleBack = useCallback(() => {\n if (currentStep > 0) {\n goToStep(currentStep - 1)\n }\n }, [currentStep, goToStep])\n\n const handleStepClick = useCallback((idx: number) => {\n // Can click on completed steps or if allowSkip\n if (completed.has(idx) || allowSkip || idx < currentStep) {\n goToStep(idx)\n }\n }, [completed, allowSkip, currentStep, goToStep])\n\n // Keyboard navigation\n useEffect(() => {\n const handler = (e: KeyboardEvent) => {\n if (!wizardRef.current?.contains(e.target as Node)) return\n if (e.key === 'Enter' && !e.shiftKey && !(e.target instanceof HTMLTextAreaElement)) {\n handleNext()\n }\n }\n document.addEventListener('keydown', handler)\n return () => document.removeEventListener('keydown', handler)\n }, [handleNext])\n\n const slideVariants = {\n enter: (dir: number) => ({\n x: prefersReducedMotion ? 0 : dir > 0 ? 40 : -40,\n opacity: prefersReducedMotion ? 1 : 0,\n }),\n center: { x: 0, opacity: 1 },\n exit: (dir: number) => ({\n x: prefersReducedMotion ? 0 : dir > 0 ? -40 : 40,\n opacity: prefersReducedMotion ? 1 : 0,\n }),\n }\n\n const isHorizontal = orientation === 'horizontal'\n\n return (\n <div ref={wizardRef} className={cn('flex flex-col', className)}>\n {/* Step indicator */}\n <div className={cn(\n 'mb-6',\n isHorizontal ? 'flex items-center' : 'flex flex-col gap-1',\n )}>\n {steps.map((step, idx) => {\n const isActive = idx === currentStep\n const isDone = completed.has(idx) || isComplete\n const isClickable = isDone || allowSkip || idx < currentStep\n const Icon = step.icon\n\n return (\n <div\n key={step.id}\n className={cn(\n isHorizontal ? 'flex items-center flex-1' : 'flex items-center gap-3',\n )}\n >\n {/* Step circle + label */}\n <button\n onClick={() => handleStepClick(idx)}\n disabled={!isClickable}\n className={cn(\n 'flex items-center gap-2 group',\n isClickable ? 'cursor-pointer' : 'cursor-default',\n )}\n >\n <div\n className={cn(\n 'flex items-center justify-center rounded-full transition-all',\n 'h-8 w-8 text-xs font-semibold shrink-0',\n isDone\n ? 'bg-[hsl(var(--status-ok))] text-[hsl(var(--text-on-brand))]'\n : isActive\n ? 'bg-[hsl(var(--brand-primary))] text-[hsl(var(--text-on-brand))] ring-4 ring-[hsl(var(--brand-primary)/0.2)]'\n : 'bg-[hsl(var(--bg-overlay))] text-[hsl(var(--text-tertiary))]',\n isClickable && !isActive && !isDone && 'group-hover:bg-[hsl(var(--bg-elevated))]',\n )}\n >\n {isDone ? (\n <Check className=\"h-4 w-4\" />\n ) : Icon ? (\n <Icon className=\"h-4 w-4\" />\n ) : (\n idx + 1\n )}\n </div>\n\n <div className={cn(\n isHorizontal ? 'hidden sm:block' : 'block',\n )}>\n <div className={cn(\n 'text-xs font-medium leading-tight',\n isActive ? 'text-[hsl(var(--text-primary))]' : 'text-[hsl(var(--text-secondary))]',\n )}>\n {step.title}\n </div>\n {step.description && !isHorizontal && (\n <div className=\"text-[10px] text-[hsl(var(--text-tertiary))]\">\n {step.description}\n </div>\n )}\n </div>\n </button>\n\n {/* Connector line */}\n {isHorizontal && idx < totalSteps - 1 && (\n <div className={cn(\n 'flex-1 h-0.5 mx-2 rounded-full transition-colors',\n completed.has(idx) ? 'bg-[hsl(var(--status-ok))]' : 'bg-[hsl(var(--border-subtle))]',\n )} />\n )}\n </div>\n )\n })}\n </div>\n\n {/* Progress bar */}\n <div className=\"w-full h-1 rounded-full bg-[hsl(var(--bg-overlay))] mb-4 overflow-hidden\">\n <motion.div\n className=\"h-full rounded-full bg-[hsl(var(--brand-primary))]\"\n initial={{ width: 0 }}\n animate={{ width: `${progress}%` }}\n transition={prefersReducedMotion ? { duration: 0 } : { type: 'spring', stiffness: 300, damping: 30 }}\n />\n </div>\n\n {/* Step content */}\n <div ref={contentRef} className=\"relative min-h-[200px]\">\n <AnimatePresence mode=\"wait\" custom={direction}>\n {isComplete && showSummary ? (\n <motion.div\n key=\"summary\"\n custom={1}\n variants={slideVariants}\n initial=\"enter\"\n animate=\"center\"\n exit=\"exit\"\n transition={prefersReducedMotion ? { duration: 0 } : { duration: 0.25 }}\n className=\"flex flex-col items-center justify-center py-12 text-center\"\n >\n <div className=\"flex items-center justify-center w-16 h-16 rounded-full bg-[hsl(var(--status-ok)/0.15)] mb-4\">\n <Check className=\"h-8 w-8 text-[hsl(var(--status-ok))]\" />\n </div>\n <h3 className=\"text-lg font-semibold text-[hsl(var(--text-primary))] mb-1\">\n All steps completed\n </h3>\n <p className=\"text-sm text-[hsl(var(--text-secondary))]\">\n All {totalSteps} steps have been successfully completed.\n </p>\n </motion.div>\n ) : (\n <motion.div\n key={currentStep}\n custom={direction}\n variants={slideVariants}\n initial=\"enter\"\n animate=\"center\"\n exit=\"exit\"\n transition={prefersReducedMotion ? { duration: 0 } : { duration: 0.25 }}\n >\n {steps[currentStep]?.content}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n\n {/* Navigation buttons */}\n {!isComplete && (\n <div className=\"flex items-center justify-between mt-6 pt-4 border-t border-[hsl(var(--border-subtle)/0.5)]\">\n <button\n onClick={handleBack}\n disabled={currentStep === 0}\n className={cn(\n 'inline-flex items-center gap-1.5 px-4 py-2 rounded-lg text-sm font-medium transition-colors',\n 'border border-[hsl(var(--border-default))]',\n 'text-[hsl(var(--text-primary))]',\n 'hover:bg-[hsl(var(--bg-overlay))]',\n 'disabled:opacity-40 disabled:pointer-events-none',\n )}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n Back\n </button>\n\n <span className=\"text-[11px] text-[hsl(var(--text-tertiary))] tabular-nums\">\n Step {currentStep + 1} of {totalSteps}\n </span>\n\n <button\n onClick={handleNext}\n disabled={isValidating}\n className={cn(\n 'inline-flex items-center gap-1.5 px-4 py-2 rounded-lg text-sm font-medium transition-colors',\n 'bg-[hsl(var(--brand-primary))] text-[hsl(var(--text-on-brand))]',\n 'hover:bg-[hsl(var(--brand-primary))]/90',\n 'disabled:opacity-70 disabled:cursor-not-allowed',\n )}\n >\n {isValidating ? (\n <>\n <div className=\"h-4 w-4 rounded-full border-2 border-[hsl(var(--text-on-brand))] border-t-transparent animate-spin\" />\n Validating...\n </>\n ) : currentStep === totalSteps - 1 ? (\n <>\n Complete\n <Check className=\"h-4 w-4\" />\n </>\n ) : (\n <>\n Next\n <ChevronRight className=\"h-4 w-4\" />\n </>\n )}\n </button>\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useState, useCallback, useMemo, useRef, useEffect } from 'react'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { Copy, Check, ChevronDown, ChevronUp } from 'lucide-react'\nimport { cn } from '../utils'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Props for the CopyBlock component. */\nexport interface CopyBlockProps {\n /** The text content to display and copy. */\n content: string\n /** Language hint for styling/accessibility (e.g. \"json\", \"bash\", \"sql\"). */\n language?: string\n /** Show line numbers in the gutter. Default false. */\n showLineNumbers?: boolean\n /** Max height in pixels before collapsing with a \"Show more\" toggle. */\n maxHeight?: number\n /** Optional label displayed above the code block. */\n label?: string\n /** Additional class name for the root container. */\n className?: string\n}\n\n// ---------------------------------------------------------------------------\n// CopyBlock\n// ---------------------------------------------------------------------------\n\n/**\n * @description A monospace code/text display block with one-click copy, animated feedback,\n * optional line numbers, collapsible overflow (show more/less), and dark-mode optimized styling.\n * Designed for displaying code snippets, CLI commands, config blocks, and JSON payloads.\n */\nexport function CopyBlock({\n content,\n language,\n showLineNumbers = false,\n maxHeight,\n label,\n className,\n}: CopyBlockProps): React.JSX.Element {\n const prefersReducedMotion = useReducedMotion()\n const [copied, setCopied] = useState(false)\n const [isCollapsed, setIsCollapsed] = useState(true)\n const [needsCollapse, setNeedsCollapse] = useState(false)\n const contentRef = useRef<HTMLPreElement>(null)\n const copyTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n useEffect(() => () => { if (copyTimerRef.current) clearTimeout(copyTimerRef.current) }, [])\n\n // Check if content exceeds maxHeight\n useEffect(() => {\n if (!maxHeight || !contentRef.current) return\n setNeedsCollapse(contentRef.current.scrollHeight > maxHeight)\n }, [content, maxHeight])\n\n const lines = useMemo(() => content.split('\\n'), [content])\n\n const handleCopy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(content)\n setCopied(true)\n if (copyTimerRef.current) clearTimeout(copyTimerRef.current)\n copyTimerRef.current = setTimeout(() => setCopied(false), 2000)\n } catch {\n // Clipboard API not available\n console.warn('Clipboard API not available')\n }\n }, [content])\n\n const shouldCollapse = maxHeight && needsCollapse && isCollapsed\n\n return (\n <div\n className={cn(\n 'relative group rounded-xl overflow-hidden',\n 'border border-[hsl(var(--border-subtle))]',\n 'bg-[hsl(var(--bg-base))]',\n className,\n )}\n >\n {/* Header bar */}\n {(label || language) && (\n <div className=\"flex items-center justify-between px-4 py-2 border-b border-[hsl(var(--border-subtle)/0.5)] bg-[hsl(var(--bg-surface)/0.3)]\">\n <div className=\"flex items-center gap-2\">\n {label && (\n <span className=\"text-[11px] font-medium text-[hsl(var(--text-secondary))]\">\n {label}\n </span>\n )}\n {language && (\n <span className=\"inline-flex items-center rounded-md bg-[hsl(var(--bg-overlay)/0.5)] px-1.5 py-0.5 text-[10px] font-mono text-[hsl(var(--text-tertiary))]\">\n {language}\n </span>\n )}\n </div>\n\n {/* Copy button (always visible in header) */}\n <button\n onClick={handleCopy}\n className={cn(\n 'inline-flex items-center gap-1 rounded-md px-2 py-1 text-[11px] font-medium transition-all',\n copied\n ? 'text-[hsl(var(--status-ok))] bg-[hsl(var(--status-ok)/0.1)]'\n : 'text-[hsl(var(--text-tertiary))] hover:text-[hsl(var(--text-primary))] hover:bg-[hsl(var(--bg-elevated))]',\n )}\n >\n <AnimatePresence mode=\"wait\">\n {copied ? (\n <motion.span\n key=\"check\"\n initial={prefersReducedMotion ? undefined : { scale: 0.5, opacity: 0 }}\n animate={prefersReducedMotion ? undefined : { scale: 1, opacity: 1 }}\n exit={prefersReducedMotion ? undefined : { scale: 0.5, opacity: 0 }}\n transition={{ duration: 0.15 }}\n className=\"inline-flex items-center gap-1\"\n >\n <Check className=\"h-3.5 w-3.5\" />\n Copied!\n </motion.span>\n ) : (\n <motion.span\n key=\"copy\"\n initial={prefersReducedMotion ? undefined : { scale: 0.5, opacity: 0 }}\n animate={prefersReducedMotion ? undefined : { scale: 1, opacity: 1 }}\n exit={prefersReducedMotion ? undefined : { scale: 0.5, opacity: 0 }}\n transition={{ duration: 0.15 }}\n className=\"inline-flex items-center gap-1\"\n >\n <Copy className=\"h-3.5 w-3.5\" />\n Copy\n </motion.span>\n )}\n </AnimatePresence>\n </button>\n </div>\n )}\n\n {/* Copy button for headerless blocks */}\n {!label && !language && (\n <button\n onClick={handleCopy}\n className={cn(\n 'absolute top-2 right-2 z-10 rounded-md p-1.5 transition-all',\n 'opacity-0 group-hover:opacity-100',\n copied\n ? 'text-[hsl(var(--status-ok))] bg-[hsl(var(--status-ok)/0.1)]'\n : 'text-[hsl(var(--text-tertiary))] hover:text-[hsl(var(--text-primary))] bg-[hsl(var(--bg-elevated)/0.8)] hover:bg-[hsl(var(--bg-elevated))]',\n )}\n title={copied ? 'Copied!' : 'Copy to clipboard'}\n >\n {copied ? <Check className=\"h-4 w-4\" /> : <Copy className=\"h-4 w-4\" />}\n </button>\n )}\n\n {/* Content area */}\n <div\n className=\"overflow-x-auto\"\n style={shouldCollapse ? { maxHeight, overflow: 'hidden' } : undefined}\n >\n <pre\n ref={contentRef}\n className={cn(\n 'p-4 text-[13px] leading-relaxed font-mono',\n 'text-[hsl(var(--text-primary))]',\n 'whitespace-pre overflow-x-auto',\n )}\n >\n {showLineNumbers ? (\n <table className=\"border-collapse w-full\">\n <tbody>\n {lines.map((line, i) => (\n <tr key={i} className=\"hover:bg-[hsl(var(--bg-surface)/0.3)]\">\n <td className=\"select-none text-right pr-4 text-[hsl(var(--text-disabled))] text-[11px] tabular-nums w-8 align-top\">\n {i + 1}\n </td>\n <td className=\"whitespace-pre\">{line}</td>\n </tr>\n ))}\n </tbody>\n </table>\n ) : (\n content\n )}\n </pre>\n </div>\n\n {/* Collapse gradient + toggle */}\n {maxHeight && needsCollapse && (\n <>\n {isCollapsed && (\n <div className=\"absolute bottom-0 left-0 right-0 h-16 bg-gradient-to-t from-[hsl(var(--bg-base))] to-transparent pointer-events-none\" />\n )}\n <div className=\"relative border-t border-[hsl(var(--border-subtle)/0.3)]\">\n <button\n onClick={() => setIsCollapsed(c => !c)}\n className={cn(\n 'w-full flex items-center justify-center gap-1.5 py-2 text-[11px] font-medium',\n 'text-[hsl(var(--text-secondary))] hover:text-[hsl(var(--text-primary))]',\n 'hover:bg-[hsl(var(--bg-surface)/0.3)] transition-colors',\n )}\n >\n {isCollapsed ? (\n <>\n Show more ({lines.length} lines)\n <ChevronDown className=\"h-3.5 w-3.5\" />\n </>\n ) : (\n <>\n Show less\n <ChevronUp className=\"h-3.5 w-3.5\" />\n </>\n )}\n </button>\n </div>\n </>\n )}\n </div>\n )\n}\n"]}