@sdvf23rvfa43f/stealth-glass 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-5IRVGRFN.js +237 -0
- package/dist/chunk-5IRVGRFN.js.map +1 -0
- package/dist/chunk-62HIMTUS.js +10343 -0
- package/dist/chunk-62HIMTUS.js.map +1 -0
- package/dist/components/index.d.ts +2032 -0
- package/dist/components/index.js +4 -0
- package/dist/components/index.js.map +1 -0
- package/dist/design-tokens.d.ts +215 -0
- package/dist/design-tokens.js +3 -0
- package/dist/design-tokens.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/stealth-glass-theme.css +494 -0
- package/package.json +132 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../components/GlassTile.tsx","../components/DataLabel.tsx","../components/StatusIndicator.tsx","../components/AmbientBackground.tsx","../components/RevealGroup.tsx","../components/BentoGrid.tsx","../components/PageShell.tsx","../components/StealthSidebar.tsx","../components/StealthHeader.tsx","../components/utils/styles.ts","../components/AppShell.tsx","../components/Button.tsx","../components/Badge.tsx","../components/Divider.tsx","../components/Kbd.tsx","../components/Skeleton.tsx","../components/Toggle.tsx","../components/Input.tsx","../components/Checkbox.tsx","../components/RadioGroup.tsx","../components/Switch.tsx","../components/Select.tsx","../components/Slider.tsx","../components/NumberInput.tsx","../components/TagInput.tsx","../components/Toast.tsx","../components/Dialog.tsx","../components/Popover.tsx","../components/Tooltip.tsx","../components/Drawer.tsx","../components/Tabs.tsx","../components/Breadcrumb.tsx","../components/Pagination.tsx","../components/Accordion.tsx","../components/ScrollArea.tsx","../components/Avatar.tsx","../components/StatCard.tsx","../components/Alert.tsx","../components/Progress.tsx","../components/utils/clipboard.ts","../components/CopyToClipboard.tsx","../components/DescriptionList.tsx","../components/Timeline.tsx","../components/CodeBlock.tsx","../components/LogViewer.tsx","../components/KeyValueEditor.tsx","../components/Chart.tsx","../components/DropdownMenu.tsx","../components/DataTable.tsx","../components/StateTemplates.tsx","../components/CommandPalette.tsx","../components/TimeRangePicker.tsx","../components/PricingCard.tsx","../components/RecommendationCard.tsx","../components/PermissionMatrix.tsx","../components/CronEditor.tsx","../components/StepIndicator.tsx","../components/TrafficSplitter.tsx","../components/RequestBuilder.tsx","../components/TraceWaterfall.tsx","../components/ServiceMap.tsx","../components/AlertRuleEditor.tsx","../components/FileBrowser.tsx","../components/StepWizard.tsx","../components/FormField.tsx","../components/NotificationCenter.tsx","../components/Sparkline.tsx","../components/DiffViewer.tsx","../components/Banner.tsx","../components/Terminal.tsx","../components/DateTimePicker.tsx","../components/Pipeline.tsx","../components/ContextMenu.tsx","../components/FilterBar.tsx","../components/DropZone.tsx","../components/PodHoneycomb.tsx","../components/LatencyRadar.tsx","../components/CostForecast.tsx","../components/ResourceGauge.tsx","../components/LogTerminal.tsx","../components/EnvManager.tsx","../components/GlobeTracker.tsx","../components/DomainManager.tsx","../components/ActivityHeatmap.tsx","../components/DeploymentList.tsx","../components/AutoscaleControl.tsx","../components/CacheManager.tsx"],"names":["GlassTile","jsx","jsxs","Icon","motion","SkeletonBox","Wallet","Fragment","LogOut","useState","React","twMerge","cva","sizeClasses","X","useCallback","useEffect","Check","useRef","Minus","Plus","Loader2","DrawerPrimitive","ChevronRight","ChevronLeft","triggerVariants","ChevronDown","sizeMap","colorMap","Copy","Tooltip","Search","useMemo","displayLabel","RechartsTooltip","RechartsLegend","ChevronUp","AlertOctagon","DialogPrimitive2","Cmdk","CalendarIcon","TrendingDown","DEFAULT_PRESETS","Clock","Trash2","copyText","inputBase","hideChildren","Download","ArrowRight","Info","AlertTriangle","Bell","ResponsiveContainer","i","j","variantStyles","AlertCircle","CheckCircle2","Circle","Play","formatDisplay","statusIcons","File","Upload","StatusIcon","statusColors","TrendingUp","AreaChart","YAxis","Area","Terminal","Pause","Lock","EyeOff","Eye","RefreshCw","Globe","ShieldAlert","statusConfig","SliderPrimitive2"],"mappings":"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","file":"chunk-62HIMTUS.js","sourcesContent":["/* ═══════════════════════════════════════════════════════════════\n GlassTile — The primary bento card surface\n @level L1 — Atom: Glass-effect container surface\n ═══════════════════════════════════════════════════════════════\n \n Usage:\n <GlassTile>Content</GlassTile>\n <GlassTile variant=\"elevated\" padding=\"lg\">Content</GlassTile>\n <GlassTile glow=\"blue\" hover>Interactive content</GlassTile>\n ═══════════════════════════════════════════════════════════════ */\n\nimport { type ReactNode, forwardRef, type HTMLAttributes } from 'react';\n\ntype GlowColor = 'blue' | 'indigo' | 'purple' | 'success' | 'warning' | 'danger' | 'none';\ntype TileVariant = 'default' | 'elevated' | 'inner';\ntype TilePadding = 'none' | 'sm' | 'md' | 'lg';\n\ninterface GlassTileProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n /** Surface depth variant */\n variant?: TileVariant;\n /** Padding size */\n padding?: TilePadding;\n /** Enable hover state */\n hover?: boolean;\n /** Ambient glow color (positioned top-right) */\n glow?: GlowColor;\n /** Additional className */\n className?: string;\n}\n\nconst variantClasses: Record<TileVariant, string> = {\n default: 'bg-background border border-white/5 rounded-[2rem] shadow-sg-tile-inset backdrop-blur-xl',\n elevated: 'bg-sg-elevated border border-white/5 rounded-[2rem] shadow-[inset_0_0_0_1px_rgba(255,255,255,0.03)] backdrop-blur-2xl',\n inner: 'bg-white/[0.02] border border-white/5 rounded-xl',\n};\n\nconst hoverClasses: Record<TileVariant, string> = {\n default: 'hover:border-white/10 hover:shadow-sg-tile-inset-hover hover:bg-sg-elevated',\n elevated: 'hover:border-white/10 hover:shadow-sg-tile-inset-hover hover:bg-sg-highlight',\n inner: 'hover:bg-white/[0.04] hover:border-white/10',\n};\n\nconst paddingClasses: Record<TilePadding, string> = {\n none: '',\n sm: 'p-4',\n md: 'p-5',\n lg: 'p-6',\n};\n\nconst glowColors: Record<GlowColor, string> = {\n blue: 'bg-blue-500/10',\n indigo: 'bg-indigo-500/10',\n purple: 'bg-purple-500/10',\n success: 'bg-emerald-500/10',\n warning: 'bg-amber-500/10',\n danger: 'bg-red-500/10',\n none: '',\n};\n\nexport const GlassTile = forwardRef<HTMLDivElement, GlassTileProps>(function GlassTile(\n { children, variant = 'default', padding = 'lg', hover = false, glow = 'none', className = '', ...rest },\n ref\n) {\n return (\n <div\n ref={ref}\n className={[\n 'relative transition-all duration-300 group',\n variantClasses[variant],\n hover ? hoverClasses[variant] : '',\n paddingClasses[padding],\n className,\n ].join(' ')}\n {...rest}\n >\n {/* Ambient glow blob — clipped independently so main content can flow */}\n {glow !== 'none' && (\n <div className=\"absolute inset-0 overflow-hidden rounded-[inherit] pointer-events-none z-0\">\n <div\n className={`absolute -top-20 -right-20 w-64 h-64 rounded-full blur-[80px] pointer-events-none opacity-50 group-hover:opacity-80 transition-opacity duration-700 ${glowColors[glow]}`}\n />\n </div>\n )}\n {/* Content */}\n <div className=\"relative z-10\">{children}</div>\n </div>\n );\n});","/* ═══════════════════════════════════════════════════════════════\n DataLabel — \"Data Terminal\" typography primitives\n @level L1 — Atom: HUD labels, data values, section dots\n ═══════════════════════════════════════════════════════════════\n \n Usage:\n <HudLabel>STATUS</HudLabel>\n <DataValue>192.168.1.1</DataValue>\n <DataValue size=\"3xl\">€24.99</DataValue>\n <SectionDot />\n ═══════════════════════════════════════════════════════════════ */\n\nimport { type ReactNode, type HTMLAttributes } from 'react';\n\n// ── HUD Label — Uppercase tracking label ──────────────────\n\ninterface HudLabelProps extends HTMLAttributes<HTMLSpanElement> {\n children: ReactNode;\n /** Brightness level */\n brightness?: 'muted' | 'secondary' | 'primary';\n}\n\nconst brightnessClasses = {\n muted: 'text-sg-text-muted',\n secondary: 'text-muted-foreground',\n primary: 'text-foreground',\n};\n\nexport function HudLabel({ children, brightness = 'muted', className = '', ...rest }: HudLabelProps) {\n return (\n <span\n className={`text-[10px] font-bold uppercase tracking-[0.2em] ${brightnessClasses[brightness]} ${className}`}\n {...rest}\n >\n {children}\n </span>\n );\n}\n\n\n// ── Data Value — Monospace numeric display ─────────────────\n\ninterface DataValueProps extends HTMLAttributes<HTMLSpanElement> {\n children: ReactNode;\n /** Text size (Tailwind text-* without the \"text-\" prefix) */\n size?: 'xs' | 'sm' | 'base' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl';\n /** Color override */\n color?: 'primary' | 'secondary' | 'muted' | 'success' | 'warning' | 'danger';\n}\n\nconst sizeClasses = {\n 'xs': 'text-xs',\n 'sm': 'text-sm',\n 'base':'text-base',\n 'lg': 'text-lg',\n 'xl': 'text-xl',\n '2xl': 'text-2xl',\n '3xl': 'text-3xl',\n '4xl': 'text-4xl',\n};\n\nconst colorClasses = {\n primary: 'text-foreground',\n secondary: 'text-muted-foreground',\n muted: 'text-sg-text-muted',\n success: 'text-emerald-400',\n warning: 'text-amber-400',\n danger: 'text-red-400',\n};\n\nexport function DataValue({ \n children, \n size = 'sm', \n color = 'primary', \n className = '', \n ...rest \n}: DataValueProps) {\n return (\n <span\n className={`font-mono font-bold tracking-tight tabular-nums ${sizeClasses[size]} ${colorClasses[color]} ${className}`}\n {...rest}\n >\n {children}\n </span>\n );\n}\n\n\n// ── Section Dot — Small decorative dot before section names ──\n\nexport function SectionDot({ className = '' }: { className?: string }) {\n return (\n <span className={`w-1 h-1 rounded-full bg-sg-text-muted/50 ${className}`} />\n );\n}","/* ═══════════════════════════════════════════════════════════════\n StatusIndicator — Glowing status dots and badges\n @level L1 — Atom: Status display primitives (dot, badge, indicator)\n ═══════════════════════════════════════════════════════════════\n \n Usage:\n <StatusDot status=\"online\" />\n <StatusDot status=\"offline\" size=\"lg\" />\n <StatusBadge status=\"active\">Running</StatusBadge>\n <StatusBadge status=\"warning\">Pending</StatusBadge>\n ═══════════════════════════════════════════════════════════════ */\n\nimport { type ReactNode } from 'react';\n\n// ── Status Dot — Glowing circle indicator ──────────────────\n\ntype StatusType = 'online' | 'offline' | 'warning' | 'processing' | 'neutral';\ntype DotSize = 'sm' | 'md' | 'lg';\n\ninterface StatusDotProps {\n status: StatusType;\n size?: DotSize;\n /** Show pulse animation */\n pulse?: boolean;\n className?: string;\n}\n\nconst dotStatusClasses: Record<StatusType, string> = {\n online: 'bg-emerald-500 shadow-[0_0_8px_rgba(52,211,153,0.6)]',\n offline: 'bg-red-500 shadow-[0_0_8px_rgba(239,68,68,0.4)]',\n warning: 'bg-amber-500 shadow-[0_0_8px_rgba(245,158,11,0.5)]',\n processing: 'bg-blue-500 shadow-[0_0_8px_rgba(59,130,246,0.5)]',\n neutral: 'bg-sg-text-muted',\n};\n\nconst dotSizeClasses: Record<DotSize, string> = {\n sm: 'w-1.5 h-1.5',\n md: 'w-2 h-2',\n lg: 'w-3 h-3',\n};\n\nexport function StatusDot({ status, size = 'md', pulse = true, className = '' }: StatusDotProps) {\n const shouldPulse = pulse && (status === 'online' || status === 'processing' || status === 'warning');\n\n return (\n <span\n className={[\n 'inline-block rounded-full',\n dotSizeClasses[size],\n dotStatusClasses[status],\n shouldPulse ? 'animate-pulse-subtle' : '',\n className,\n ].join(' ')}\n role=\"img\"\n aria-label={`Status: ${status}`}\n />\n );\n}\n\n\n// ── Status Badge — Pill-shaped label with status color ─────\n\ntype BadgeStatus = 'active' | 'inactive' | 'warning' | 'error' | 'processing' | 'neutral' | 'new';\n\ninterface StatusBadgeProps {\n status: BadgeStatus;\n children: ReactNode;\n className?: string;\n}\n\nconst badgeStatusClasses: Record<BadgeStatus, string> = {\n active: 'bg-emerald-500/10 text-emerald-400 border-emerald-500/20',\n inactive: 'bg-red-500/10 text-red-400 border-red-500/20',\n warning: 'bg-amber-500/10 text-amber-400 border-amber-500/20',\n error: 'bg-red-500/10 text-red-400 border-red-500/20',\n processing: 'bg-blue-500/10 text-blue-400 border-blue-500/20',\n neutral: 'bg-white/5 text-muted-foreground border-white/10',\n new: 'bg-indigo-500/10 text-indigo-400 border-indigo-500/20',\n};\n\nexport function StatusBadge({ status, children, className = '' }: StatusBadgeProps) {\n return (\n <span\n className={[\n 'inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-[10px] font-bold uppercase tracking-wider border backdrop-blur-md',\n badgeStatusClasses[status],\n className,\n ].join(' ')}\n >\n <StatusDot \n status={\n status === 'active' ? 'online' : \n status === 'inactive' || status === 'error' ? 'offline' : \n status === 'warning' ? 'warning' : \n status === 'processing' ? 'processing' : 'neutral'\n } \n size=\"sm\" \n />\n {children}\n </span>\n );\n}\n\nexport function StatusIndicator({ status, label }: { status: string, label: string }) {\n const badgeStatus = \n status === 'healthy' ? 'active' :\n status === 'degraded' ? 'warning' :\n status === 'down' ? 'inactive' : 'neutral';\n \n return (\n <StatusBadge status={badgeStatus as BadgeStatus}>\n {label}\n </StatusBadge>\n );\n}","/* ═══════════════════════════════════════════════════════════════\n AmbientBackground — The void with floating glow blobs\n @level L1 — Atom: Full-page ambient background effect\n ═══════════════════════════════════════════════════════════════\n \n Usage (place once in your root layout):\n <AmbientBackground />\n <AmbientBackground colors={['blue', 'purple']} />\n ═══════════════════════════════════════════════════════════════ */\n\ntype GlowPreset = 'blue' | 'indigo' | 'purple' | 'emerald' | 'amber';\n\ninterface AmbientBackgroundProps {\n /** Which glow colors to render. Default: ['blue', 'indigo'] */\n colors?: [GlowPreset, GlowPreset];\n /** Intensity (opacity multiplier). Default: 10 (maps to /10) */\n intensity?: 5 | 10 | 15 | 20;\n}\n\nconst glowColorMap: Record<GlowPreset, string> = {\n blue: 'bg-blue-600',\n indigo: 'bg-indigo-600',\n purple: 'bg-purple-600',\n emerald: 'bg-emerald-600',\n amber: 'bg-amber-600',\n};\n\nconst intensityMap: Record<number, string> = {\n 5: '/5',\n 10: '/10',\n 15: '/15',\n 20: '/20',\n};\n\nexport function AmbientBackground({ \n colors = ['blue', 'indigo'],\n intensity = 10 \n}: AmbientBackgroundProps) {\n const opacitySuffix = intensityMap[intensity] || '/10';\n\n return (\n <div className=\"fixed inset-0 z-0 pointer-events-none motion-reduce:hidden\" aria-hidden=\"true\">\n {/* Top-right glow */}\n <div\n className={`absolute top-[-10%] right-[-10%] w-[50%] h-[50%] ${glowColorMap[colors[0]]}${opacitySuffix} rounded-full blur-[120px]`}\n />\n {/* Bottom-left glow */}\n <div\n className={`absolute bottom-[-10%] left-[-10%] w-[50%] h-[50%] ${glowColorMap[colors[1]]}${opacitySuffix} rounded-full blur-[120px]`}\n />\n </div>\n );\n}","/* ═══════════════════════════════════════════════════════════════\n RevealGroup — Hover-to-Reveal interaction pattern\n @level L1 — Atom: CSS hover-reveal interaction utility\n ═══════════════════════════════════════════════════════════════\n \n Usage:\n <RevealGroup>\n <p>Main content always visible</p>\n <RevealAction>\n <button>Edit</button>\n <button>Delete</button>\n </RevealAction>\n </RevealGroup>\n ═══════════════════════════════════════════════════════════════ */\n\nimport { type ReactNode, type HTMLAttributes } from 'react';\n\n// ── RevealGroup — The parent container ─────────────────────\n\ninterface RevealGroupProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport function RevealGroup({ children, className = '', ...rest }: RevealGroupProps) {\n return (\n <div className={`group relative ${className}`} {...rest}>\n {children}\n </div>\n );\n}\n\n\n// ── RevealAction — Hidden by default, shown on hover ───────\n\ninterface RevealActionProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n /** Animation direction */\n from?: 'right' | 'bottom' | 'left' | 'fade';\n}\n\nconst revealFromClasses: Record<string, string> = {\n right: 'opacity-0 translate-x-2 group-hover:opacity-100 group-hover:translate-x-0',\n bottom: 'opacity-0 translate-y-2 group-hover:opacity-100 group-hover:translate-y-0',\n left: 'opacity-0 -translate-x-2 group-hover:opacity-100 group-hover:translate-x-0',\n fade: 'opacity-0 group-hover:opacity-100',\n};\n\nexport function RevealAction({ children, from = 'fade', className = '', ...rest }: RevealActionProps) {\n return (\n <div\n className={`transition-all duration-300 reveal-touch-visible ${revealFromClasses[from]} ${className}`}\n {...rest}\n >\n {children}\n </div>\n );\n}","/* ═══════════════════════════════════════════════════════════════\n BentoGrid — Responsive grid layout system\n @level L4 — Template: Responsive bento grid layout with glass cells\n ═══════════════════════════════════════════════════════════════\n \n Usage:\n <BentoGrid cols={3}>\n <BentoCell span={2}><Widget /></BentoCell>\n <BentoCell><Widget /></BentoCell>\n <BentoCell span={3}><Widget /></BentoCell>\n </BentoGrid>\n ═══════════════════════════════════════════════════════════════ */\n\nimport { type ReactNode, type HTMLAttributes } from 'react';\nimport { GlassTile } from './GlassTile';\n\n// ── BentoGrid — Grid container ─────────────────────────────\n\nexport interface BentoGridProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n /** Number of columns at desktop (mobile is always 1). Default: 3 */\n cols?: 1 | 2 | 3 | 4;\n /** Max container width. Default: 1600px */\n maxWidth?: string;\n}\n\nconst colClasses: Record<number, string> = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 md:grid-cols-2',\n 3: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-4',\n};\n\nexport function BentoGrid({ children, cols = 3, maxWidth = '1600px', className = '', ...rest }: BentoGridProps) {\n return (\n <div\n className={`grid gap-4 md:gap-6 ${colClasses[cols]} ${className}`}\n style={{ maxWidth, marginLeft: 'auto', marginRight: 'auto' }}\n {...rest}\n >\n {children}\n </div>\n );\n}\n\n\n// ── BentoCell — Grid cell with optional column spanning ────\n\nexport interface BentoCellProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n /** How many columns this cell spans at desktop. Default: 1 */\n span?: 1 | 2 | 3 | 4;\n /** How many rows this cell spans. Default: 1 */\n rowSpan?: 1 | 2 | 3;\n}\n\nconst spanClasses: Record<number, string> = {\n 1: '',\n 2: 'md:col-span-2',\n 3: 'md:col-span-3',\n 4: 'md:col-span-4',\n};\n\nconst rowSpanClasses: Record<number, string> = {\n 1: '',\n 2: 'md:row-span-2',\n 3: 'md:row-span-3',\n};\n\nexport function BentoCell({ children, span = 1, rowSpan = 1, className = '', ...rest }: BentoCellProps) {\n return (\n <div\n className={`${spanClasses[span]} ${rowSpanClasses[rowSpan]} ${className}`}\n {...rest}\n >\n {children}\n </div>\n );\n}\n\n\n// ── BentoCard — High-level card component ──────────────────\n\nexport interface BentoCardProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n /** Columns to span */\n colSpan?: 1 | 2 | 3 | 4;\n /** Rows to span */\n rowSpan?: 1 | 2 | 3;\n /** Optional title */\n title?: string;\n /** Optional icon component */\n icon?: React.ElementType;\n /** Content padding */\n padding?: 'none' | 'sm' | 'md' | 'lg';\n}\n\nexport function BentoCard({ \n children, \n colSpan = 1, \n rowSpan = 1, \n title, \n icon: Icon, \n padding = 'lg',\n className = '', \n ...rest \n}: BentoCardProps) {\n return (\n <BentoCell span={colSpan} rowSpan={rowSpan} className={className} {...rest}>\n <GlassTile className=\"h-full flex flex-col\" padding={padding}>\n {(title || Icon) && (\n <div className=\"flex items-center gap-3 mb-4\">\n {Icon && (\n <div className=\"p-2 rounded-lg bg-white/5 text-foreground\">\n <Icon className=\"w-5 h-5\" />\n </div>\n )}\n {title && <h3 className=\"font-bold text-foreground\">{title}</h3>}\n </div>\n )}\n <div className=\"flex-1 relative\">\n {children}\n </div>\n </GlassTile>\n </BentoCell>\n );\n}","/* ═══════════════════════════════════════════════════════════════\n PageShell — Standard page layout wrapper with entry animation\n @level L4 — Template: Page layout shell with stagger animation\n ═══════════════════════════════════════════════════════════════\n \n Usage:\n <PageShell title=\"Dashboard\" subtitle=\"Overview\">\n <YourContent />\n </PageShell>\n\n <PageShell title=\"Functions\" actions={<Button>Create Function</Button>}>\n <YourContent />\n </PageShell>\n ═══════════════════════════════════════════════════════════════ */\n\nimport { type ReactNode } from 'react';\nimport { motion, useReducedMotion } from 'motion/react';\nimport { motion as motionTokens } from '../design-tokens';\n\ninterface PageShellProps {\n children: ReactNode;\n /** Page title (optional — for header area) */\n title?: string;\n /** Page subtitle */\n subtitle?: string;\n /** Right-aligned actions rendered next to the title */\n actions?: ReactNode;\n /** Additional className for the content area */\n className?: string;\n}\n\nexport function PageShell({ children, title, subtitle, actions, className = '' }: PageShellProps) {\n const prefersReduced = useReducedMotion();\n\n return (\n <motion.div\n className={`space-y-6 ${className}`}\n variants={prefersReduced ? undefined : motionTokens.staggerContainer}\n initial={prefersReduced ? false : 'hidden'}\n animate=\"show\"\n >\n {/* Page Header */}\n {title && (\n <motion.div variants={prefersReduced ? undefined : motionTokens.staggerItem} className={actions ? 'flex items-start justify-between gap-4' : 'space-y-1'}>\n <div className=\"space-y-1 min-w-0\">\n <h1 className=\"text-2xl font-bold text-foreground tracking-tight\">{title}</h1>\n {subtitle && (\n <p className=\"text-sm text-muted-foreground\">{subtitle}</p>\n )}\n </div>\n {actions && (\n <div className=\"flex items-center gap-2 shrink-0\">\n {actions}\n </div>\n )}\n </motion.div>\n )}\n\n {/* Page Content */}\n {children}\n </motion.div>\n );\n}\n\n\n// ── AnimatedSection — Individual section with stagger delay ──\n\ninterface AnimatedSectionProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function AnimatedSection({ children, className = '' }: AnimatedSectionProps) {\n const prefersReduced = useReducedMotion();\n\n return (\n <motion.div variants={prefersReduced ? undefined : motionTokens.staggerItem} className={className}>\n {children}\n </motion.div>\n );\n}","/* ═══════════════════════════════════════════════════════════════\n StealthSidebar — Portable collapsible sidebar for dark dashboards\n @level L4 — Template: Dashboard sidebar navigation shell\n ═══════════════════════════════════════════════════════════════\n \n Usage:\n <StealthSidebar\n logo={{ src: '/logo.png', title: 'MyApp' }}\n navigation={[\n { category: 'Overview', items: [\n { id: 'dashboard', label: 'Dashboard', icon: LayoutDashboard },\n { id: 'servers', label: 'Servers', icon: Server, badge: '5' },\n ]},\n ]}\n currentId=\"dashboard\"\n onNavigate={(id) => router.push(routeMap[id])}\n user={{ name: 'Jane Doe', email: 'jane@acme.io' }}\n wallet={{ balance: 2450, currency: '€', onAddFunds: () => {} }}\n ctaButton={{ label: 'Deploy New', icon: PlusCircle, onClick: () => {} }}\n onSignOut={() => auth.signOut()}\n />\n ═══════════════════════════════════════════════════════════════ */\n\nimport { useState, useEffect, useCallback, type ReactNode } from 'react';\nimport {\n ChevronLeft,\n ChevronRight,\n LogOut,\n Menu,\n X,\n Wallet,\n ArrowRight,\n type LucideIcon,\n} from 'lucide-react';\n\n// ── Types ──────────────────────────────────────────────────\n\nexport interface SidebarNavItem {\n /** Unique identifier for this nav item */\n id: string;\n /** Display label */\n label: string;\n /** Lucide icon component */\n icon: LucideIcon;\n /** Optional badge text (count, \"NEW\", \"SOON\", etc.) */\n badge?: string | null;\n /** Disable this item */\n disabled?: boolean;\n}\n\nexport interface SidebarNavSection {\n /** Section heading */\n category: string;\n /** Navigation items in this section */\n items: SidebarNavItem[];\n}\n\nexport interface SidebarSubmenuConfig {\n /** Parent item ID that triggers the submenu */\n parentId: string;\n /** Parent display label */\n parentLabel: string;\n /** Parent icon */\n parentIcon: LucideIcon;\n /** Submenu items — matched by id prefix (e.g. \"settings-password\") */\n items: SidebarNavItem[];\n}\n\nexport interface SidebarLogo {\n /** Logo image URL */\n src: string;\n /** Alt text */\n alt?: string;\n /** Brand name text shown next to logo */\n title?: string;\n}\n\nexport interface SidebarWallet {\n /** Current balance */\n balance: number;\n /** Currency symbol (default: '€') */\n currency?: string;\n /** Add funds callback */\n onAddFunds?: () => void;\n /** Show loading skeleton */\n isLoading?: boolean;\n}\n\nexport interface SidebarUser {\n /** Display name */\n name: string;\n /** Email address */\n email?: string;\n /** Loading state */\n isLoading?: boolean;\n}\n\nexport interface SidebarCTAButton {\n /** Button label */\n label: string;\n /** Lucide icon */\n icon: LucideIcon;\n /** Click handler */\n onClick: () => void;\n}\n\nexport interface StealthSidebarProps {\n /** Logo and brand config */\n logo: SidebarLogo;\n /** Navigation sections */\n navigation: SidebarNavSection[];\n /** Currently active item ID */\n currentId: string;\n /** Navigate to an item */\n onNavigate: (id: string) => void;\n /** Sign out callback */\n onSignOut: () => void;\n /** Is user authenticated */\n isAuthenticated?: boolean;\n /** User info for profile footer */\n user?: SidebarUser;\n /** Wallet widget config */\n wallet?: SidebarWallet;\n /** Primary CTA button (mobile) */\n ctaButton?: SidebarCTAButton;\n /** Unauthenticated CTA fallback */\n ctaButtonUnauth?: SidebarCTAButton;\n /** Optional submenu (e.g. Settings) */\n submenu?: SidebarSubmenuConfig;\n /** Collapsed state (controlled) */\n isCollapsed?: boolean;\n /** Toggle collapse callback */\n onToggleCollapse?: () => void;\n /** Extra content below nav (slot) */\n footerSlot?: ReactNode;\n}\n\n// ── Skeleton helpers ───────────────────────────────────────\n\nfunction SkeletonBox({ className = '' }: { className?: string }) {\n return <div className={`bg-white/10 rounded animate-pulse ${className}`} />;\n}\n\n// ── Component ──────────────────────────────────────────────\n\nexport function StealthSidebar({\n logo,\n navigation,\n currentId,\n onNavigate,\n onSignOut,\n isAuthenticated = true,\n user,\n wallet,\n ctaButton,\n ctaButtonUnauth,\n submenu,\n isCollapsed = false,\n onToggleCollapse,\n footerSlot,\n}: StealthSidebarProps) {\n const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);\n const [isSubmenuOpen, setIsSubmenuOpen] = useState(false);\n\n const currency = wallet?.currency ?? '€';\n const safeBalance = typeof wallet?.balance === 'number' ? wallet.balance : 0;\n\n const handleNavigate = useCallback(\n (id: string) => {\n onNavigate(id);\n setIsMobileMenuOpen(false);\n // Close submenu if navigating away from submenu parent\n if (submenu && !id.startsWith(submenu.parentId)) {\n setIsSubmenuOpen(false);\n }\n },\n [onNavigate, submenu]\n );\n\n // Close mobile menu on desktop resize\n useEffect(() => {\n const onResize = () => {\n if (window.innerWidth >= 1024) setIsMobileMenuOpen(false);\n };\n window.addEventListener('resize', onResize);\n return () => window.removeEventListener('resize', onResize);\n }, []);\n\n // Auto-expand submenu if active page is within it\n useEffect(() => {\n if (submenu && currentId.startsWith(submenu.parentId) && !isSubmenuOpen && !isCollapsed) {\n setIsSubmenuOpen(true);\n }\n }, [currentId, submenu, isCollapsed]);\n\n // Close submenu when collapsing\n useEffect(() => {\n if (isCollapsed) setIsSubmenuOpen(false);\n }, [isCollapsed]);\n\n const isSubmenuActive = submenu ? currentId.startsWith(submenu.parentId) : false;\n\n // Resolve active CTA\n const activeCta = isAuthenticated ? ctaButton : ctaButtonUnauth;\n\n return (\n <>\n {/* ── Mobile Toggle ── */}\n <button\n onClick={() => setIsMobileMenuOpen(!isMobileMenuOpen)}\n className=\"fixed top-4 left-4 z-[60] lg:hidden w-10 h-10 bg-sg-elevated/80 backdrop-blur-md border border-white/10 rounded-xl shadow-lg flex items-center justify-center text-white hover:bg-sg-highlight transition-all\"\n aria-label=\"Toggle menu\"\n >\n {isMobileMenuOpen ? <X className=\"w-5 h-5\" /> : <Menu className=\"w-5 h-5\" />}\n </button>\n\n {/* ── Mobile Overlay ── */}\n {isMobileMenuOpen && (\n <div\n className=\"fixed inset-0 bg-black/60 backdrop-blur-sm z-40 lg:hidden\"\n onClick={() => setIsMobileMenuOpen(false)}\n />\n )}\n\n {/* ── Sidebar ── */}\n <aside\n className={`fixed left-0 top-0 h-screen bg-background flex flex-col z-50 border-r border-white/5 transition-all duration-300 ease-in-out ${\n isMobileMenuOpen\n ? 'translate-x-0 shadow-2xl w-[280px] sm:w-[300px]'\n : `${isCollapsed ? 'lg:w-24' : 'lg:w-[300px]'} -translate-x-full lg:translate-x-0 w-[280px]`\n }`}\n >\n {/* Collapse Toggle (Desktop) */}\n {onToggleCollapse && (\n <button\n onClick={onToggleCollapse}\n className=\"hidden lg:flex absolute -right-3 top-24 w-6 h-6 bg-sg-highlight border border-white/10 rounded-full items-center justify-center text-muted-foreground hover:text-white transition-colors z-50 shadow-[0_0_10px_rgba(0,0,0,0.5)]\"\n >\n {isCollapsed ? (\n <ChevronRight className=\"w-3.5 h-3.5\" />\n ) : (\n <ChevronLeft className=\"w-3.5 h-3.5\" />\n )}\n </button>\n )}\n\n {/* Inner Scrollable Wrapper */}\n <div className=\"flex-1 overflow-y-auto w-full\">\n {/* ── Logo ── */}\n <div className=\"pt-8 pb-6 flex items-center justify-center relative transition-all duration-300\">\n <div className=\"absolute top-0 left-1/2 -translate-x-1/2 w-32 h-32 bg-blue-600/10 blur-[60px] pointer-events-none rounded-full\" />\n <div\n className={`flex items-center gap-3 relative z-10 cursor-pointer transition-all duration-300 ${\n isCollapsed ? 'scale-90' : 'scale-100'\n }`}\n onClick={() => handleNavigate('dashboard')}\n >\n <div className=\"h-10 w-10 rounded-xl flex items-center justify-center overflow-hidden\">\n <img\n src={logo.src}\n alt={logo.alt ?? logo.title ?? 'Logo'}\n className=\"w-full h-full object-contain\"\n />\n </div>\n {!isCollapsed && logo.title && (\n <span className=\"text-2xl font-bold text-white tracking-tight\">{logo.title}</span>\n )}\n </div>\n </div>\n\n {/* ── Mobile Action Area ── */}\n <div\n className={`pb-6 space-y-5 relative z-20 transition-all duration-300 lg:hidden ${\n isCollapsed ? 'px-2' : 'px-5'\n }`}\n >\n {/* CTA Button */}\n {activeCta && (\n <button\n onClick={activeCta.onClick}\n className=\"w-full h-12 rounded-full bg-gradient-to-r from-blue-600 to-indigo-600 text-white shadow-[0_4px_20px_rgba(37,99,235,0.3)] hover:shadow-[0_6px_25px_rgba(37,99,235,0.4)] active:scale-95 transition-all flex items-center justify-center gap-2 group relative overflow-hidden border border-white/10\"\n >\n <activeCta.icon className=\"w-5 h-5\" />\n <span className=\"font-bold tracking-wide text-sm whitespace-nowrap\">\n {activeCta.label}\n </span>\n </button>\n )}\n\n {/* Wallet Card */}\n {isAuthenticated && wallet && (\n <div className=\"rounded-[2rem] bg-sg-elevated border border-white/5 p-5 relative overflow-hidden shadow-xl\">\n <div className=\"flex items-center justify-between mb-3\">\n <span className=\"text-[10px] uppercase tracking-[0.2em] text-sg-text-muted font-bold flex items-center gap-2\">\n <Wallet className=\"w-3 h-3 text-sg-text-muted\" />\n Balance\n </span>\n <div className=\"flex items-center gap-1.5 bg-[#052e16] px-2 py-1 rounded-full border border-emerald-900/30\">\n <div className=\"w-1.5 h-1.5 rounded-full bg-emerald-500 animate-pulse-subtle\" />\n <span className=\"text-[9px] font-bold text-emerald-500 uppercase tracking-wider\">\n Live\n </span>\n </div>\n </div>\n\n <div className=\"flex items-baseline gap-1 mb-5\">\n <span className=\"text-lg font-bold text-sg-text-muted\">{currency}</span>\n <span className=\"text-4xl font-mono font-bold text-white tracking-tight\">\n {safeBalance.toFixed(2)}\n </span>\n </div>\n\n {wallet.onAddFunds && (\n <button\n onClick={wallet.onAddFunds}\n className=\"w-full py-3 rounded-xl bg-sg-highlight hover:bg-[#232730] text-xs font-bold text-white border border-white/5 hover:border-white/10 transition-all flex items-center justify-center gap-2 group/btn shadow-inner\"\n >\n <span>Add Funds</span>\n <ArrowRight className=\"w-3.5 h-3.5 opacity-50 group-hover/btn:translate-x-1 group-hover/btn:opacity-100 transition-all\" />\n </button>\n )}\n </div>\n )}\n </div>\n\n {/* ── Navigation Sections ── */}\n <div className={`pb-6 space-y-6 ${isCollapsed ? 'px-2' : 'px-5'}`}>\n <nav className=\"space-y-6\">\n {navigation.map((section) => (\n <div\n key={section.category}\n className={\n !isCollapsed\n ? 'relative overflow-hidden rounded-[2rem] bg-background/80 border border-white/5 p-5 backdrop-blur-xl transition-all hover:border-white/10 group'\n : ''\n }\n >\n {/* Hover glow */}\n {!isCollapsed && (\n <div className=\"absolute top-0 right-0 w-32 h-32 bg-blue-500/5 blur-[50px] rounded-full -translate-y-1/2 translate-x-1/2 pointer-events-none opacity-0 group-hover:opacity-100 transition-opacity duration-700\" />\n )}\n\n {/* Section label */}\n {!isCollapsed && (\n <p className=\"relative z-10 px-1 mb-4 text-[10px] text-sg-text-muted uppercase tracking-[0.2em] font-bold select-none flex items-center gap-2\">\n <span className=\"w-1 h-1 rounded-full bg-sg-text-muted/50\" />\n {section.category}\n </p>\n )}\n\n <div className=\"space-y-1 relative z-10\">\n {section.items.map((item) => {\n const Icon = item.icon;\n const isActive = currentId === item.id;\n const isDisabled = item.disabled;\n\n return (\n <button\n key={item.id}\n onClick={() => !isDisabled && handleNavigate(item.id)}\n disabled={isDisabled}\n className={`w-full flex items-center rounded-xl transition-all duration-200 group/item relative ${\n isCollapsed\n ? 'justify-center w-10 h-10 mx-auto rounded-full'\n : 'justify-between px-3 py-3'\n } ${\n isDisabled\n ? 'opacity-40 cursor-not-allowed'\n : isActive\n ? 'bg-blue-500/10 text-white font-bold shadow-[inset_0_0_0_1px_rgba(59,130,246,0.2)]'\n : 'text-muted-foreground hover:text-white hover:bg-white/5 border border-transparent font-medium'\n }`}\n title={isCollapsed ? item.label : undefined}\n >\n <div\n className={`flex items-center z-10 ${\n isCollapsed ? 'justify-center' : 'gap-3'\n }`}\n >\n <Icon\n className={`transition-colors ${\n isCollapsed ? 'w-5 h-5' : 'w-4 h-4'\n } ${\n isDisabled\n ? 'text-sg-text-muted/50'\n : isActive\n ? 'text-blue-400'\n : 'text-sg-text-muted group-hover/item:text-white'\n }`}\n />\n {!isCollapsed && (\n <span className=\"text-sm tracking-tight\">{item.label}</span>\n )}\n </div>\n {!isCollapsed && item.badge && (\n <span\n className={`px-2 py-0.5 rounded-full text-[9px] font-bold font-mono uppercase tracking-wide ${\n isDisabled\n ? 'bg-amber-500/20 text-amber-400 border border-amber-500/30'\n : isActive\n ? 'bg-blue-500/20 text-blue-400'\n : 'bg-sg-highlight text-sg-text-muted'\n }`}\n >\n {item.badge}\n </span>\n )}\n </button>\n );\n })}\n </div>\n </div>\n ))}\n\n {/* ── Optional Submenu (e.g. Settings) ── */}\n {submenu && !isCollapsed && (\n <div className=\"relative overflow-hidden rounded-[2rem] bg-background/80 border border-white/5 p-5 backdrop-blur-xl transition-all hover:border-white/10 group\">\n <button\n onClick={() => setIsSubmenuOpen(!isSubmenuOpen)}\n className={`w-full flex items-center justify-between px-3 py-3 rounded-xl transition-all duration-200 ${\n isSubmenuActive\n ? 'bg-blue-500/10 text-white font-bold shadow-[inset_0_0_0_1px_rgba(59,130,246,0.2)]'\n : 'text-muted-foreground hover:text-white hover:bg-white/5 font-medium'\n }`}\n >\n <div className=\"flex items-center gap-3\">\n <submenu.parentIcon\n className={`w-4 h-4 ${\n isSubmenuActive ? 'text-blue-400' : 'text-sg-text-muted'\n }`}\n />\n <span className=\"text-sm tracking-tight\">{submenu.parentLabel}</span>\n </div>\n <ChevronRight\n className={`w-3.5 h-3.5 text-sg-text-muted transition-transform duration-200 ${\n isSubmenuOpen ? 'rotate-90' : ''\n }`}\n />\n </button>\n\n {isSubmenuOpen && (\n <div className=\"mt-1 ml-4 space-y-1 border-l border-white/5 pl-3\">\n {submenu.items.map((sub) => {\n const SubIcon = sub.icon;\n const isSubActive = currentId === sub.id;\n return (\n <button\n key={sub.id}\n onClick={() => handleNavigate(sub.id)}\n className={`w-full flex items-center gap-3 px-3 py-2.5 rounded-xl transition-all duration-200 text-sm ${\n isSubActive\n ? 'bg-blue-500/10 text-white font-bold'\n : 'text-muted-foreground hover:text-white hover:bg-white/5 font-medium'\n }`}\n >\n <SubIcon\n className={`w-3.5 h-3.5 ${\n isSubActive ? 'text-blue-400' : 'text-sg-text-muted'\n }`}\n />\n <span className=\"tracking-tight\">{sub.label}</span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n )}\n\n {/* Collapsed submenu icon */}\n {submenu && isCollapsed && (\n <button\n onClick={() => handleNavigate(submenu.items[0]?.id ?? submenu.parentId)}\n className={`w-10 h-10 mx-auto rounded-full flex items-center justify-center transition-all duration-200 ${\n isSubmenuActive\n ? 'bg-blue-500/10 text-blue-400'\n : 'text-sg-text-muted hover:text-white hover:bg-white/5'\n }`}\n title={submenu.parentLabel}\n >\n <submenu.parentIcon className=\"w-5 h-5\" />\n </button>\n )}\n </nav>\n </div>\n\n {/* ── Footer Slot ── */}\n {footerSlot}\n\n {/* ── User Profile Footer (Mobile) ── */}\n <div className={`pb-8 lg:hidden ${isCollapsed ? 'px-2' : 'px-5'}`}>\n {isAuthenticated && user ? (\n <div\n className={`group flex items-center gap-4 rounded-[2rem] transition-all bg-sg-elevated border border-white/5 hover:border-white/10 p-4 shadow-xl ${\n isCollapsed ? 'justify-center p-2' : ''\n }`}\n >\n {user.isLoading ? (\n <SkeletonBox className=\"h-10 w-10 rounded-full\" />\n ) : (\n <div className=\"relative\">\n <div className=\"w-10 h-10 rounded-full bg-[#8b5cf6] flex items-center justify-center text-white font-bold text-sm shadow-lg\">\n {user.name\n .split(' ')\n .map((n) => n[0])\n .join('')\n .toUpperCase()\n .slice(0, 2) || '??'}\n </div>\n <div className=\"absolute -bottom-0.5 -right-0.5 w-3.5 h-3.5 bg-[#10b981] border-4 border-sg-elevated rounded-full\" />\n </div>\n )}\n\n {!isCollapsed && (\n <>\n <div className=\"flex-1 min-w-0\">\n {user.isLoading ? (\n <>\n <SkeletonBox className=\"h-4 w-24 mb-1\" />\n <SkeletonBox className=\"h-3 w-32\" />\n </>\n ) : (\n <>\n <p className=\"text-sm text-white font-bold truncate tracking-tight\">\n {user.name}\n </p>\n {user.email && (\n <p className=\"text-[10px] text-muted-foreground truncate font-medium font-mono tracking-wide\">\n {user.email}\n </p>\n )}\n </>\n )}\n </div>\n <button\n onClick={onSignOut}\n className=\"p-2 rounded-full hover:bg-white/5 text-sg-text-muted hover:text-white transition-colors\"\n title=\"Sign Out\"\n >\n <LogOut className=\"w-4 h-4\" />\n </button>\n </>\n )}\n </div>\n ) : (\n <div\n onClick={onSignOut}\n className={`group flex items-center gap-3 rounded-[2rem] transition-all cursor-pointer bg-blue-600 hover:bg-blue-500 p-4 shadow-lg ${\n isCollapsed ? 'justify-center p-2' : ''\n }`}\n >\n <div className=\"w-10 h-10 rounded-full bg-white/20 flex items-center justify-center text-white font-bold\">\n <LogOut className=\"w-5 h-5 rotate-180\" />\n </div>\n {!isCollapsed && (\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm text-white font-bold truncate\">Sign In</p>\n <p className=\"text-[10px] text-blue-200 truncate font-medium\">\n Access your account\n </p>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n </aside>\n </>\n );\n}","/* ═══════════════════════════════════════════════════════════════\n StealthHeader — Portable top header bar for dark dashboards\n @level L4 — Template: Dashboard header bar shell\n ═══════════════════════════════════════════════════════════════\n \n Usage:\n <StealthHeader\n ctaButton={{ label: 'Deploy New', icon: PlusCircle, onClick: () => {} }}\n wallet={{ balance: 2450, currency: '€', onAddFunds: () => {} }}\n user={{ name: 'Jane Doe' }}\n onSignOut={() => auth.signOut()}\n isSidebarCollapsed={false}\n />\n ═══════════════════════════════════════════════════════════════ */\n\nimport { type ReactNode } from 'react';\nimport {\n PlusCircle,\n Wallet,\n Plus,\n LogOut,\n type LucideIcon,\n} from 'lucide-react';\n\n// ── Types ──────────────────────────────────────────────────\n\nexport interface HeaderCTAButton {\n /** Button label */\n label: string;\n /** Lucide icon */\n icon: LucideIcon;\n /** Click handler */\n onClick: () => void;\n}\n\nexport interface HeaderWallet {\n /** Current balance */\n balance: number;\n /** Currency symbol (default: '€') */\n currency?: string;\n /** Add funds callback */\n onAddFunds?: () => void;\n /** Loading state */\n isLoading?: boolean;\n}\n\nexport interface HeaderUser {\n /** Display name */\n name: string;\n /** Loading state */\n isLoading?: boolean;\n}\n\nexport interface StealthHeaderProps {\n /** Primary CTA button */\n ctaButton?: HeaderCTAButton;\n /** Unauthenticated CTA fallback */\n ctaButtonUnauth?: HeaderCTAButton;\n /** Wallet widget */\n wallet?: HeaderWallet;\n /** User profile info */\n user?: HeaderUser;\n /** Sign out callback */\n onSignOut: () => void;\n /** Whether user is authenticated */\n isAuthenticated?: boolean;\n /** Whether sidebar is collapsed (adjusts left offset) */\n isSidebarCollapsed?: boolean;\n /** Custom left slot (e.g. breadcrumbs) */\n leftSlot?: ReactNode;\n /** Custom right slot (extra actions before user) */\n rightSlot?: ReactNode;\n}\n\n// ── Skeleton helpers ───────────────────────────────────────\n\nfunction SkeletonBox({ className = '' }: { className?: string }) {\n return <div className={`bg-white/10 rounded animate-pulse ${className}`} />;\n}\n\n// ── Component ──────────────────────────────────────────────\n\nexport function StealthHeader({\n ctaButton,\n ctaButtonUnauth,\n wallet,\n user,\n onSignOut,\n isAuthenticated = true,\n isSidebarCollapsed = false,\n leftSlot,\n rightSlot,\n}: StealthHeaderProps) {\n const activeCta = isAuthenticated ? ctaButton : ctaButtonUnauth;\n const currency = wallet?.currency ?? '€';\n const safeBalance = typeof wallet?.balance === 'number' ? wallet.balance : 0;\n\n return (\n <header\n className=\"hidden lg:flex fixed top-0 right-0 z-40 h-20 bg-background/95 backdrop-blur-xl border-b border-white/5 shadow-[inset_0_0_0_1px_rgba(255,255,255,0.02)] items-center justify-between px-8 transition-all duration-300 ease-in-out\"\n style={{ left: isSidebarCollapsed ? '5rem' : '18rem' }}\n >\n {/* ── Left Area ── */}\n <div className=\"flex items-center gap-4\">{leftSlot}</div>\n\n {/* ── Right Area ── */}\n <div className=\"flex items-center gap-6\">\n {/* Custom right slot */}\n {rightSlot}\n\n {/* CTA Button */}\n {activeCta && (\n <button\n onClick={activeCta.onClick}\n className=\"rounded-full bg-gradient-to-r from-blue-600 via-blue-500 to-indigo-600 text-white shadow-[0_0_20px_rgba(59,130,246,0.4)] hover:shadow-[0_0_30px_rgba(59,130,246,0.6)] hover:scale-105 transition-all duration-300 flex items-center gap-2.5 px-6 py-3 text-sm font-bold tracking-wide group relative overflow-hidden\"\n title={activeCta.label}\n >\n {/* Shimmer sweep */}\n <div className=\"absolute inset-0 bg-gradient-to-r from-transparent via-white/25 to-transparent translate-x-[-200%] group-hover:translate-x-[200%] transition-transform duration-700 skew-x-12\" />\n <activeCta.icon className=\"w-4 h-4 relative z-10\" />\n <span className=\"relative z-10\">{activeCta.label}</span>\n </button>\n )}\n\n {/* Divider */}\n <div className=\"h-10 w-px bg-gradient-to-b from-transparent via-white/10 to-transparent\" />\n\n {/* Wallet Widget */}\n {isAuthenticated && wallet && (\n <div className=\"flex items-center gap-4\">\n <div className=\"group/wallet flex items-center gap-3 bg-background rounded-full pl-4 pr-2 py-2 border border-white/5 shadow-[inset_0_0_0_1px_rgba(255,255,255,0.02)] hover:border-white/10 hover:bg-sg-elevated transition-all duration-300\">\n <div className=\"flex items-center gap-2\">\n <div className=\"w-7 h-7 rounded-full bg-blue-500/10 flex items-center justify-center group-hover/wallet:bg-blue-500/20 transition-colors\">\n <Wallet className=\"w-3.5 h-3.5 text-blue-400\" />\n </div>\n <div className=\"flex flex-col\">\n <span className=\"text-[9px] uppercase tracking-widest text-sg-text-muted font-bold leading-none mb-1\">\n Balance\n </span>\n <span\n className={`text-sm font-bold text-foreground tracking-tight font-mono leading-none transition-opacity duration-300 ${\n wallet.isLoading ? 'opacity-40' : 'opacity-100'\n }`}\n >\n {currency}\n {safeBalance.toFixed(2)}\n </span>\n </div>\n </div>\n\n {wallet.onAddFunds && (\n <button\n onClick={wallet.onAddFunds}\n className=\"w-8 h-8 rounded-full bg-blue-500/10 hover:bg-blue-500 text-blue-400 hover:text-white flex items-center justify-center transition-all duration-300 hover:scale-110 hover:shadow-[0_0_15px_rgba(59,130,246,0.5)]\"\n title=\"Add Funds\"\n >\n <Plus className=\"w-3.5 h-3.5\" />\n </button>\n )}\n </div>\n </div>\n )}\n\n {/* User Profile */}\n {isAuthenticated && user ? (\n <div className=\"flex items-center gap-3 pl-2 relative transition-all duration-300\">\n <div className=\"text-right hidden xl:block\">\n {user.isLoading ? (\n <div className=\"space-y-1.5\">\n <SkeletonBox className=\"w-24 h-3\" />\n <SkeletonBox className=\"w-16 h-2\" />\n </div>\n ) : (\n <>\n <p\n className={`text-xs font-bold text-foreground leading-none mb-1.5 transition-all duration-300 ${\n user.isLoading ? 'opacity-40' : 'opacity-100'\n }`}\n >\n {user.name}\n </p>\n <button\n onClick={(e) => {\n e.stopPropagation();\n onSignOut();\n }}\n className=\"text-[9px] font-bold text-sg-text-muted hover:text-red-400 transition-colors uppercase tracking-widest flex items-center justify-end gap-1 ml-auto group/signout\"\n >\n <span className=\"group-hover/signout:translate-x-[-2px] transition-transform\">\n Sign Out\n </span>\n <LogOut className=\"w-2.5 h-2.5 group-hover/signout:translate-x-[2px] transition-transform\" />\n </button>\n </>\n )}\n </div>\n <div className=\"relative\">\n {user.isLoading ? (\n <SkeletonBox className=\"w-10 h-10 rounded-2xl\" />\n ) : (\n <div\n className={`w-10 h-10 rounded-2xl bg-gradient-to-br from-blue-500 via-indigo-500 to-purple-600 flex items-center justify-center shadow-lg shadow-blue-500/20 text-white font-bold text-sm border border-white/10 transition-all duration-300 ${\n user.isLoading ? 'opacity-40' : 'opacity-100'\n }`}\n >\n {user.name.substring(0, 2).toUpperCase()}\n </div>\n )}\n <div className=\"absolute -bottom-0.5 -right-0.5 w-3 h-3 bg-emerald-400 border-2 border-background rounded-full shadow-[0_0_8px_rgba(52,211,153,0.6)] animate-pulse-subtle\" />\n </div>\n </div>\n ) : (\n <button\n onClick={onSignOut}\n className=\"flex items-center gap-3 px-4 py-2 rounded-2xl bg-background border border-white/5 hover:border-white/10 hover:bg-sg-elevated transition-all duration-300 group/signin\"\n >\n <span className=\"text-sm font-bold text-muted-foreground group-hover/signin:text-white transition-colors\">\n Sign In\n </span>\n <div className=\"w-9 h-9 rounded-xl bg-white/5 flex items-center justify-center border border-white/10 group-hover/signin:bg-white/10 group-hover/signin:scale-110 transition-all duration-300\">\n <LogOut className=\"w-4 h-4 text-muted-foreground group-hover/signin:text-white rotate-180 transition-colors\" />\n </div>\n </button>\n )}\n </div>\n </header>\n );\n}","/* ═══════════════════════════════════════════════════════════════\n STEALTH GLASS — Shared Style Constants\n ═══════════════════════════════════════════════════════════════\n \n Reusable Tailwind class strings for patterns that repeat\n across multiple components. Import these instead of\n hardcoding the same long class strings everywhere.\n \n import { SG_FOCUS_RING } from './utils/styles';\n ═══════════════════════════════════════════════════════════════ */\n\n\n// ─── Focus Ring ─────────────────────────────────────────────\n// Exact visual match of the ring previously hardcoded as:\n// focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500/50\n// focus-visible:ring-offset-2 focus-visible:ring-offset-[#0B0E14]\n// focus-visible:shadow-[0_0_0_4px_rgba(59,130,246,0.15)]\n//\n// Two options:\n// 1. Use the CSS utility class: className=\"sg-focus-ring\"\n// 2. Use this constant for twMerge composition:\n\nexport const SG_FOCUS_RING =\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500/50 focus-visible:ring-offset-2 focus-visible:ring-offset-background focus-visible:shadow-[var(--sg-focus-shadow)]';\n\n\n// ─── Shadow Class Strings ───────────────────────────────────\n// Use these with Tailwind's shadow-* utility classes.\n// These map to the --shadow-sg-* tokens in @theme.\n\n/** Dropdown / popover — `0 16px 48px rgba(0,0,0,0.4), 0 0 0 1px rgba(255,255,255,0.05)` */\nexport const SG_SHADOW_DROPDOWN = 'shadow-sg-dropdown';\n\n/** Tile inset — `inset 0 0 0 1px rgba(255,255,255,0.02)` */\nexport const SG_SHADOW_TILE_INSET = 'shadow-sg-tile-inset';\n\n/** Tile inset hover — `inset 0 0 0 1px rgba(255,255,255,0.05)` */\nexport const SG_SHADOW_TILE_INSET_HOVER = 'shadow-sg-tile-inset-hover';\n\n/** CTA button glow — `0 4px 20px rgba(37,99,235,0.3)` */\nexport const SG_SHADOW_CTA = 'shadow-sg-cta';\n\n/** CTA button glow hover — `0 6px 25px rgba(37,99,235,0.4)` */\nexport const SG_SHADOW_CTA_HOVER = 'shadow-sg-cta-hover';\n\n/** Blue glow (medium) — `0 0 10px rgba(59,130,246,0.5)` */\nexport const SG_GLOW_BLUE = 'shadow-sg-glow-blue';\n\n/** Success glow (medium) — `0 0 10px rgba(16,185,129,0.5)` */\nexport const SG_GLOW_SUCCESS = 'shadow-sg-glow-success';","/* ═══════════════════════════════════════════════════════════════\n AppShell — Full dashboard layout (Sidebar + Header + Content)\n @level L4 — Template: Complete dashboard shell (sidebar + header + content)\n ═══════════════════════════════════════════════════════════════\n \n A portable, all-in-one layout wrapper that composes the\n StealthSidebar, StealthHeader, and main content area into\n a complete dashboard shell.\n \n Usage (minimal):\n <AppShell\n logo={{ src: '/logo.png', title: 'MyApp' }}\n navigation={navSections}\n currentId=\"dashboard\"\n onNavigate={(id) => navigate(routeMap[id])}\n onSignOut={() => auth.signOut()}\n >\n <YourPageContent />\n </AppShell>\n \n Usage (full):\n <AppShell\n logo={{ src: '/logo.png', title: 'MyApp' }}\n navigation={navSections}\n currentId=\"dashboard\"\n onNavigate={(id) => navigate(routeMap[id])}\n onSignOut={() => auth.signOut()}\n isAuthenticated={true}\n user={{ name: 'Jane', email: 'jane@acme.io' }}\n wallet={{ balance: 2450, currency: '€', onAddFunds: () => {} }}\n ctaButton={{ label: 'Deploy', icon: PlusCircle, onClick: () => {} }}\n submenu={{ parentId: 'settings', parentLabel: 'Settings', parentIcon: Settings, items: [...] }}\n ambientColors={['blue', 'indigo']}\n >\n <YourPageContent />\n </AppShell>\n ═══════════════════════════════════════════════════════════════ */\n\nimport { useState, type ReactNode } from 'react';\nimport { StealthSidebar, type StealthSidebarProps } from './StealthSidebar';\nimport { StealthHeader, type StealthHeaderProps } from './StealthHeader';\nimport { AmbientBackground } from './AmbientBackground';\nimport { twMerge } from 'tailwind-merge';\nimport { SG_FOCUS_RING } from './utils/styles';\n\n// ── Types ──────────────────────────────────────────────────\n\ntype AmbientColor = 'blue' | 'indigo' | 'purple' | 'emerald' | 'amber';\n\nexport interface AppShellProps\n extends Omit<StealthSidebarProps, 'isCollapsed' | 'onToggleCollapse'> {\n /** Page content */\n children: ReactNode;\n /** Ambient background glow colors. Set to null to disable. Default: ['blue', 'indigo'] */\n ambientColors?: [AmbientColor, AmbientColor] | null;\n /** Ambient intensity */\n ambientIntensity?: 5 | 10 | 15 | 20;\n /** Header left slot (e.g. breadcrumbs) */\n headerLeftSlot?: ReactNode;\n /** Header right slot (extra actions) */\n headerRightSlot?: ReactNode;\n /** Loading skeleton for content area */\n loadingFallback?: ReactNode;\n /** Whether to show loading skeleton */\n isLoading?: boolean;\n /** Max content width (default: 1600px) */\n contentMaxWidth?: string;\n}\n\n// ── Loading skeleton ───────────────────────────────────────\n\nfunction DefaultLoadingSkeleton() {\n return (\n <div className=\"space-y-6\">\n <div className=\"h-32 bg-white/5 rounded-[2rem] animate-pulse\" />\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\n <div className=\"h-40 bg-white/5 rounded-[2rem] animate-pulse\" />\n <div className=\"h-40 bg-white/5 rounded-[2rem] animate-pulse\" />\n <div className=\"h-40 bg-white/5 rounded-[2rem] animate-pulse\" />\n </div>\n </div>\n );\n}\n\n// ── Auth loading skeleton (full page) ──────────────────────\n\nfunction AuthLoadingSkeleton() {\n return (\n <div className=\"flex h-screen bg-background\">\n {/* Sidebar skeleton */}\n <div className=\"hidden lg:flex w-64 border-r border-white/5 bg-background/95 backdrop-blur-xl p-4\">\n <div className=\"space-y-4 w-full\">\n <div className=\"h-12 bg-white/5 rounded-xl animate-pulse\" />\n <div className=\"h-8 bg-white/5 rounded-lg animate-pulse\" />\n <div className=\"h-8 bg-white/5 rounded-lg animate-pulse\" />\n <div className=\"h-8 bg-white/5 rounded-lg animate-pulse\" />\n </div>\n </div>\n {/* Main skeleton */}\n <div className=\"flex-1 flex flex-col\">\n <div className=\"h-20 border-b border-white/5 bg-background/95 backdrop-blur-xl px-8 flex items-center justify-between\">\n <div className=\"h-8 w-48 bg-white/5 rounded-lg animate-pulse\" />\n <div className=\"h-10 w-32 bg-white/5 rounded-full animate-pulse\" />\n </div>\n <div className=\"flex-1 overflow-auto p-6 space-y-6\">\n <div className=\"h-32 bg-white/5 rounded-[2rem] animate-pulse\" />\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\n <div className=\"h-40 bg-white/5 rounded-[2rem] animate-pulse\" />\n <div className=\"h-40 bg-white/5 rounded-[2rem] animate-pulse\" />\n <div className=\"h-40 bg-white/5 rounded-[2rem] animate-pulse\" />\n </div>\n </div>\n </div>\n </div>\n );\n}\n\n// ── Component ──────────────────────────────────────────────\n\nexport function AppShell({\n children,\n // Sidebar props\n logo,\n navigation,\n currentId,\n onNavigate,\n onSignOut,\n isAuthenticated = true,\n user,\n wallet,\n ctaButton,\n ctaButtonUnauth,\n submenu,\n footerSlot,\n // Shell props\n ambientColors = ['blue', 'indigo'],\n ambientIntensity = 10,\n headerLeftSlot,\n headerRightSlot,\n loadingFallback,\n isLoading = false,\n contentMaxWidth = '1600px',\n}: AppShellProps) {\n const [isSidebarCollapsed, setIsSidebarCollapsed] = useState(false);\n\n return (\n <div className=\"flex h-screen bg-background relative overflow-hidden text-foreground\">\n {/* Skip link for accessibility */}\n <a\n href=\"#main-content\"\n className={twMerge(\n 'sr-only focus:not-sr-only focus:absolute focus:top-4 focus:left-4 focus:z-[100] focus:px-6 focus:py-3 focus:bg-blue-600 focus:text-white focus:rounded-full focus:font-bold focus:shadow-lg focus:shadow-blue-500/50 focus:outline-none',\n SG_FOCUS_RING,\n )}\n >\n Skip to main content\n </a>\n\n {/* Ambient Background */}\n {ambientColors && (\n <AmbientBackground colors={ambientColors} intensity={ambientIntensity} />\n )}\n\n {/* Sidebar */}\n <StealthSidebar\n logo={logo}\n navigation={navigation}\n currentId={currentId}\n onNavigate={onNavigate}\n onSignOut={onSignOut}\n isAuthenticated={isAuthenticated}\n user={user}\n wallet={wallet}\n ctaButton={ctaButton}\n ctaButtonUnauth={ctaButtonUnauth}\n submenu={submenu}\n isCollapsed={isSidebarCollapsed}\n onToggleCollapse={() => setIsSidebarCollapsed(!isSidebarCollapsed)}\n footerSlot={footerSlot}\n />\n\n {/* Header */}\n <StealthHeader\n ctaButton={ctaButton}\n ctaButtonUnauth={ctaButtonUnauth}\n wallet={wallet}\n user={user}\n onSignOut={onSignOut}\n isAuthenticated={isAuthenticated}\n isSidebarCollapsed={isSidebarCollapsed}\n leftSlot={headerLeftSlot}\n rightSlot={headerRightSlot}\n />\n\n {/* Main Content */}\n <main\n id=\"main-content\"\n className={`flex-1 ${\n isSidebarCollapsed ? 'lg:ml-20' : 'lg:ml-72'\n } relative z-10 w-full min-w-0 h-full overflow-y-auto overflow-x-hidden transition-all duration-300 ease-in-out`}\n >\n <div\n className=\"w-full mx-auto px-4 py-6 md:px-6 md:py-8 lg:pt-28 min-w-0 relative z-0\"\n style={{ maxWidth: contentMaxWidth }}\n >\n <div className=\"animate-in fade-in slide-in-from-bottom-4 duration-500\">\n {isLoading\n ? loadingFallback ?? <DefaultLoadingSkeleton />\n : children}\n </div>\n </div>\n </main>\n </div>\n );\n}\n\n/** Pre-built auth-loading state for the full shell */\nAppShell.AuthSkeleton = AuthLoadingSkeleton;","import React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { twMerge } from 'tailwind-merge';\nimport { Loader2 } from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\n\nimport { SG_FOCUS_RING } from './utils/styles';\n\n/* ═══════════════════════════════════════════════════════════════\n Button — Stealth Glass Design System\n @level L1 — Atom: Primary interactive button with CVA variants\n\n Design language:\n ─ Glass morphism with inset cut-edge shadows\n ─ White-opacity borders that brighten on hover\n ─ Ambient glow effects on primary/destructive/success\n ─ Expo easing for premium motion feel\n\n Shape hierarchy (4 tiers):\n ─ T1 CTA: rounded-full (pill) → Primary\n ─ T2 Consequential: rounded-2xl (super) → Success, Destructive\n ─ T3 Utility: rounded-xl (standard) → Secondary, Outline\n ─ T4 Minimal: rounded-lg (subtle) → Ghost\n ═══════════════════════════════════════════════════════════════ */\n\nconst buttonVariants = cva(\n [\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap',\n 'transition-all duration-200 ease-[cubic-bezier(0.16,1,0.3,1)]',\n 'cursor-pointer select-none',\n SG_FOCUS_RING,\n 'disabled:opacity-40 disabled:pointer-events-none',\n ].join(' '),\n {\n variants: {\n variant: {\n /* ── T1 · Primary CTA ── pill ────────────────────── */\n primary: [\n 'bg-gradient-to-r from-blue-600 to-indigo-600 text-white rounded-full',\n 'border border-white/15',\n 'shadow-[0_4px_20px_rgba(37,99,235,0.3),inset_0_1px_0_rgba(255,255,255,0.1)]',\n 'hover:shadow-[0_6px_30px_rgba(37,99,235,0.45),inset_0_1px_0_rgba(255,255,255,0.15)]',\n 'hover:brightness-110 hover:scale-[1.03]',\n 'active:scale-[0.97] active:shadow-[0_2px_10px_rgba(37,99,235,0.25),inset_0_1px_0_rgba(255,255,255,0.08)]',\n 'tracking-wide',\n 'cta-shimmer relative overflow-hidden',\n ].join(' '),\n\n /* ── T3 · Secondary — Glass panel ── rounded-xl ─── */\n secondary: [\n 'bg-sg-highlight/80 backdrop-blur-sm text-foreground rounded-xl',\n 'border border-white/[0.06]',\n 'shadow-[inset_0_0_0_1px_rgba(255,255,255,0.02),inset_0_1px_0_rgba(255,255,255,0.03)]',\n 'hover:bg-white/[0.08] hover:border-white/[0.12]',\n 'hover:shadow-[inset_0_0_0_1px_rgba(255,255,255,0.05),inset_0_1px_0_rgba(255,255,255,0.06)]',\n 'active:bg-white/[0.05] active:scale-[0.98]',\n ].join(' '),\n\n /* ── T4 · Ghost — Invisible until interaction ── rounded-lg */\n ghost: [\n 'text-muted-foreground rounded-lg bg-transparent',\n 'hover:bg-white/[0.05] hover:text-foreground',\n 'hover:shadow-[inset_0_0_0_1px_rgba(255,255,255,0.03)]',\n 'active:bg-white/[0.03] active:scale-[0.98]',\n ].join(' '),\n\n /* ── T2 · Destructive — Red glow ── rounded-2xl ── */\n destructive: [\n 'bg-red-500/[0.08] text-red-400 rounded-2xl',\n 'border border-red-500/20',\n 'shadow-[inset_0_0_0_1px_rgba(239,68,68,0.06)]',\n 'hover:bg-red-500/[0.12] hover:border-red-500/30 hover:text-red-300',\n 'hover:shadow-[0_0_20px_rgba(239,68,68,0.12),inset_0_0_0_1px_rgba(239,68,68,0.1)]',\n 'active:bg-red-500/[0.08] active:scale-[0.98]',\n ].join(' '),\n\n /* ── T3 · Outline — Glass border ── rounded-xl ─── */\n outline: [\n 'bg-transparent text-foreground rounded-xl',\n 'border border-white/[0.08]',\n 'shadow-[inset_0_0_0_1px_rgba(255,255,255,0.02)]',\n 'hover:bg-white/[0.04] hover:border-white/[0.15]',\n 'hover:shadow-[inset_0_0_0_1px_rgba(255,255,255,0.05),inset_0_1px_0_rgba(255,255,255,0.04)]',\n 'active:bg-white/[0.02] active:scale-[0.98]',\n ].join(' '),\n\n /* ── T2 · Success — Green glow ── rounded-2xl ──── */\n success: [\n 'bg-emerald-500/[0.1] text-emerald-400 rounded-2xl',\n 'border border-emerald-500/20',\n 'shadow-[inset_0_0_0_1px_rgba(16,185,129,0.06)]',\n 'hover:bg-emerald-500/[0.15] hover:border-emerald-500/30 hover:text-emerald-300',\n 'hover:shadow-[0_0_20px_rgba(16,185,129,0.12),inset_0_0_0_1px_rgba(16,185,129,0.1)]',\n 'active:bg-emerald-500/[0.08] active:scale-[0.98]',\n ].join(' '),\n },\n size: {\n sm: 'h-8 px-3 text-xs',\n md: 'h-10 px-4 text-sm',\n lg: 'h-12 px-6 text-base',\n icon: 'h-10 w-10',\n 'icon-sm': 'h-8 w-8',\n 'icon-lg': 'h-12 w-12',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n loading?: boolean;\n leftIcon?: LucideIcon;\n rightIcon?: LucideIcon;\n asChild?: boolean;\n}\n\nconst iconSizeMap: Record<string, string> = {\n sm: 'w-3.5 h-3.5',\n md: 'w-4 h-4',\n lg: 'w-5 h-5',\n icon: 'w-4 h-4',\n 'icon-sm': 'w-3.5 h-3.5',\n 'icon-lg': 'w-5 h-5',\n};\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n loading = false,\n leftIcon: LeftIcon,\n rightIcon: RightIcon,\n asChild = false,\n disabled,\n children,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : 'button';\n const isDisabled = disabled || loading;\n const iconSize = iconSizeMap[size ?? 'md'] ?? 'w-4 h-4';\n const isIconOnly = size === 'icon' || size === 'icon-sm' || size === 'icon-lg';\n\n return (\n <Comp\n ref={ref}\n className={twMerge(buttonVariants({ variant, size }), className)}\n disabled={isDisabled}\n {...props}\n >\n {loading ? (\n <Loader2 className={twMerge(iconSize, 'animate-spin')} />\n ) : LeftIcon ? (\n <LeftIcon className={iconSize} />\n ) : null}\n {!isIconOnly && children}\n {!loading && RightIcon && <RightIcon className={iconSize} />}\n </Comp>\n );\n }\n);\n\nButton.displayName = 'Button';\n\nexport { buttonVariants };","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\n\n/* ═══════════════════════════════════════════════════════════════\n Badge — Stealth Glass Design System\n @level L1 — Atom: Inline status/category label\n ═══════════════════════════════════════════════════════════════ */\n\nconst badgeVariants = {\n default: 'bg-white/5 text-muted-foreground border-white/10',\n brand: 'bg-blue-500/10 text-blue-400 border-blue-500/20',\n success: 'bg-emerald-500/10 text-emerald-400 border-emerald-500/20',\n warning: 'bg-amber-500/10 text-amber-400 border-amber-500/20',\n danger: 'bg-red-500/10 text-red-400 border-red-500/20',\n outline: 'bg-transparent text-muted-foreground border-white/10',\n};\n\nconst badgeDots = {\n default: 'bg-muted-foreground',\n brand: 'bg-blue-400',\n success: 'bg-emerald-400',\n warning: 'bg-amber-400',\n danger: 'bg-red-400',\n outline: 'bg-muted-foreground',\n};\n\nconst badgeSizes = {\n sm: 'px-1.5 py-0.5 text-[9px]',\n md: 'px-2 py-0.5 text-[10px]',\n};\n\nexport interface BadgeProps {\n variant?: keyof typeof badgeVariants;\n size?: 'sm' | 'md';\n dot?: boolean;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function Badge({\n variant = 'default',\n size = 'md',\n dot = false,\n children,\n className,\n}: BadgeProps) {\n return (\n <span\n className={twMerge(\n 'inline-flex items-center gap-1.5 rounded-full border font-bold uppercase tracking-wider',\n badgeVariants[variant],\n badgeSizes[size],\n className\n )}\n >\n {dot && <span className={twMerge('w-1.5 h-1.5 rounded-full', badgeDots[variant])} />}\n {children}\n </span>\n );\n}","import { twMerge } from 'tailwind-merge';\n\n/* ═══════════════════════════════════════════════════════════════\n Divider — Stealth Glass Design System\n @level L1 — Atom: Horizontal/vertical separator line\n ═══════════════════════════════════════════════════════════════ */\n\nexport interface DividerProps {\n orientation?: 'horizontal' | 'vertical';\n label?: string;\n className?: string;\n}\n\nexport function Divider({ orientation = 'horizontal', label, className }: DividerProps) {\n if (orientation === 'vertical') {\n return <div className={twMerge('w-px bg-white/5 self-stretch', className)} />;\n }\n\n if (label) {\n return (\n <div className={twMerge('flex items-center gap-3 w-full', className)}>\n <div className=\"flex-1 h-px bg-white/5\" />\n <span className=\"text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted shrink-0\">\n {label}\n </span>\n <div className=\"flex-1 h-px bg-white/5\" />\n </div>\n );\n }\n\n return <div className={twMerge('h-px bg-white/5 w-full', className)} />;\n}","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\n\n/* ═══════════════════════════════════════════════════════════════\n Kbd — Stealth Glass Design System\n @level L1 — Atom: Keyboard shortcut display\n ═══════════════════════════════════════════════════════════════ */\n\nexport interface KbdProps {\n keys: string | string[];\n className?: string;\n}\n\nexport function Kbd({ keys, className }: KbdProps) {\n const keyList = typeof keys === 'string' ? keys.split('+').map((k) => k.trim()) : keys;\n\n return (\n <span className={twMerge('inline-flex items-center gap-0.5', className)}>\n {keyList.flatMap((key, i) => {\n const elements: React.ReactNode[] = [];\n if (i > 0) {\n elements.push(\n <span key={`sep-${i}`} className=\"text-sg-text-muted/40 text-[9px] mx-0.5\">+</span>\n );\n }\n elements.push(\n <kbd key={`key-${i}`} className=\"px-1.5 py-0.5 rounded bg-white/[0.04] border border-white/10 text-[10px] font-mono text-sg-text-muted\">\n {key}\n </kbd>\n );\n return elements;\n })}\n </span>\n );\n}","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\n\n/* ═══════════════════════════════════════════════════════════════\n Skeleton — Composable loading placeholders\n @level L1 — Atom: Shimmer loading placeholder shapes\n ═══════════════════════════════════════════════════════════════\n \n Usage:\n <Skeleton width=\"200px\" height=\"20px\" />\n <SkeletonText lines={3} />\n <SkeletonCircle size={40} />\n ═══════════════════════════════════════════════════════════════ */\n\nconst roundedMap = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-lg',\n lg: 'rounded-xl',\n full: 'rounded-full',\n};\n\n/* ─── Skeleton ─── */\n\nexport interface SkeletonProps {\n width?: string;\n height?: string;\n rounded?: keyof typeof roundedMap;\n className?: string;\n}\n\nexport function Skeleton({\n width,\n height = '20px',\n rounded = 'md',\n className,\n}: SkeletonProps) {\n return (\n <div\n className={twMerge(\n 'bg-white/[0.04] animate-pulse',\n roundedMap[rounded],\n className\n )}\n style={{ width, height }}\n aria-hidden=\"true\"\n />\n );\n}\n\n/* ─── SkeletonText ─── */\n\nexport interface SkeletonTextProps {\n lines?: number;\n lastLineWidth?: string;\n gap?: string;\n className?: string;\n}\n\nexport function SkeletonText({\n lines = 3,\n lastLineWidth = '60%',\n gap = '0.5rem',\n className,\n}: SkeletonTextProps) {\n return (\n <div className={twMerge('flex flex-col', className)} style={{ gap }} aria-hidden=\"true\">\n {Array.from({ length: lines }).map((_, i) => (\n <div\n key={i}\n className=\"bg-white/[0.04] animate-pulse rounded-lg\"\n style={{\n height: '14px',\n width: i === lines - 1 ? lastLineWidth : '100%',\n }}\n />\n ))}\n </div>\n );\n}\n\n/* ─── SkeletonCircle ─── */\n\nexport interface SkeletonCircleProps {\n size?: number | string;\n className?: string;\n}\n\nexport function SkeletonCircle({\n size = 40,\n className,\n}: SkeletonCircleProps) {\n const dim = typeof size === 'number' ? `${size}px` : size;\n\n return (\n <div\n className={twMerge('bg-white/[0.04] animate-pulse rounded-full shrink-0', className)}\n style={{ width: dim, height: dim }}\n aria-hidden=\"true\"\n />\n );\n}\n","import React from 'react';\nimport * as TogglePrimitive from '@radix-ui/react-toggle';\nimport * as ToggleGroupPrimitive from '@radix-ui/react-toggle-group';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { twMerge } from 'tailwind-merge';\n\n/* ═══════════════════════════════════════════════════════════════\n Toggle + ToggleGroup — Stealth Glass Design System\n @level L1 — Atom: Pressable toggle buttons (Radix)\n ═══════════════════════════════════════════════════════════════\n \n Usage:\n <Toggle pressed={bold} onPressedChange={setBold}>\n <Bold className=\"w-4 h-4\" />\n </Toggle>\n\n <ToggleGroup type=\"single\" value={view} onValueChange={setView}>\n <ToggleGroupItem value=\"grid\"><Grid className=\"w-4 h-4\" /></ToggleGroupItem>\n <ToggleGroupItem value=\"list\"><List className=\"w-4 h-4\" /></ToggleGroupItem>\n </ToggleGroup>\n ═══════════════════════════════════════════════════════════════ */\n\nconst toggleVariants = cva(\n 'inline-flex items-center justify-center gap-2 rounded-lg transition-all duration-200 cursor-pointer disabled:pointer-events-none disabled:opacity-50',\n {\n variants: {\n variant: {\n default: [\n 'bg-transparent text-muted-foreground hover:bg-white/5 hover:text-white',\n 'data-[state=on]:bg-white/[0.08] data-[state=on]:text-white',\n ].join(' '),\n outline: [\n 'border border-white/5 bg-transparent text-muted-foreground hover:bg-white/5 hover:text-white',\n 'data-[state=on]:border-blue-500/30 data-[state=on]:bg-blue-500/10 data-[state=on]:text-blue-400',\n ].join(' '),\n },\n size: {\n sm: 'h-8 px-2.5 text-xs',\n md: 'h-9 px-3 text-sm',\n lg: 'h-10 px-4 text-sm',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n }\n);\n\n/* ─── Toggle ─── */\n\nexport interface ToggleProps\n extends React.ComponentPropsWithoutRef<typeof TogglePrimitive.Root>,\n VariantProps<typeof toggleVariants> {\n className?: string;\n}\n\nexport function Toggle({\n variant,\n size,\n className,\n ...props\n}: ToggleProps) {\n return (\n <TogglePrimitive.Root\n className={twMerge(toggleVariants({ variant, size }), className)}\n {...props}\n />\n );\n}\n\n/* ─── ToggleGroup ─── */\n\nexport type ToggleGroupProps = React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Root> & {\n variant?: 'default' | 'outline';\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n children?: React.ReactNode;\n};\n\nexport function ToggleGroup({\n variant = 'default',\n size = 'md',\n className,\n children,\n ...props\n}: ToggleGroupProps) {\n return (\n <ToggleGroupPrimitive.Root\n className={twMerge(\n 'inline-flex rounded-xl bg-white/[0.02] border border-white/5 p-0.5 gap-0.5',\n className\n )}\n {...(props as any)}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child as React.ReactElement<any>, {\n variant,\n size,\n });\n }\n return child;\n })}\n </ToggleGroupPrimitive.Root>\n );\n}\n\n/* ─── ToggleGroupItem ─── */\n\nexport interface ToggleGroupItemProps\n extends React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Item> {\n variant?: 'default' | 'outline';\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\nexport function ToggleGroupItem({\n variant,\n size,\n className,\n ...props\n}: ToggleGroupItemProps) {\n return (\n <ToggleGroupPrimitive.Item\n className={twMerge(toggleVariants({ variant, size }), 'rounded-lg', className)}\n {...props}\n />\n );\n}","import React, { useState, useRef, useEffect, useCallback } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { Search, X } from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n Input, SearchInput, Textarea — Stealth Glass Design System\n @level L1 — Atom: Text input primitives\n ═══════════════════════════════════════════════════════════════ */\n\nconst inputBase = [\n 'w-full bg-card border border-white/5 text-foreground',\n 'placeholder:text-sg-text-muted/60',\n 'focus:border-blue-500/50 focus:bg-sg-elevated focus:outline-none focus:ring-2 focus:ring-blue-500/20',\n 'transition-all duration-200',\n].join(' ');\n\nconst sizeClasses = {\n sm: 'h-8 px-3 text-xs rounded-lg',\n md: 'h-10 px-3.5 text-sm rounded-xl',\n lg: 'h-12 px-4 text-base rounded-xl',\n xl: 'h-14 px-4 text-base rounded-xl',\n};\n\n/* ─── Label + Helper ─── */\n\nfunction FieldLabel({ children }: { children: React.ReactNode }) {\n return (\n <label className=\"block text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted mb-1.5\">\n {children}\n </label>\n );\n}\n\nfunction FieldHelper({ children, error }: { children: React.ReactNode; error?: boolean }) {\n return (\n <p className={`mt-1 text-[10px] ${error ? 'text-red-400' : 'text-sg-text-muted'}`}>\n {children}\n </p>\n );\n}\n\n/* ─── Input ─── */\n\nexport interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {\n label?: string;\n helperText?: string;\n error?: string;\n leftIcon?: LucideIcon;\n rightIcon?: LucideIcon;\n leftAddon?: string;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n label,\n helperText,\n error,\n leftIcon: LeftIcon,\n rightIcon: RightIcon,\n leftAddon,\n size = 'md',\n ...props\n },\n ref\n ) => {\n const errorStyle = error ? 'border-red-500/30 focus:border-red-500/50 focus:ring-red-500/20' : '';\n const hasLeft = LeftIcon || leftAddon;\n\n return (\n <div className=\"w-full\">\n {label && <FieldLabel>{label}</FieldLabel>}\n <div className=\"relative flex items-center group/input\">\n {leftAddon && (\n <span className=\"absolute left-3 text-xs text-sg-text-muted font-mono pointer-events-none\">\n {leftAddon}\n </span>\n )}\n {LeftIcon && !leftAddon && (\n <div className=\"absolute left-3 w-8 h-8 rounded-lg bg-white/5 flex items-center justify-center pointer-events-none transition-colors group-focus-within/input:bg-blue-500/10\">\n <LeftIcon className=\"w-4 h-4 text-sg-text-muted group-focus-within/input:text-blue-400 transition-colors\" />\n </div>\n )}\n <input\n ref={ref}\n className={twMerge(\n inputBase,\n sizeClasses[size],\n LeftIcon && !leftAddon ? 'pl-14' : hasLeft ? 'pl-9' : '',\n RightIcon ? 'pr-9' : '',\n leftAddon ? 'pl-16' : '',\n errorStyle,\n className\n )}\n {...props}\n />\n {RightIcon && (\n <RightIcon className=\"absolute right-3 w-4 h-4 text-sg-text-muted pointer-events-none\" />\n )}\n </div>\n {error && <FieldHelper error>{error}</FieldHelper>}\n {!error && helperText && <FieldHelper>{helperText}</FieldHelper>}\n </div>\n );\n }\n);\n\nInput.displayName = 'Input';\n\n/* ─── SearchInput ─── */\n\nexport interface SearchInputProps extends Omit<InputProps, 'leftIcon' | 'rightIcon' | 'leftAddon'> {\n onClear?: () => void;\n}\n\nexport const SearchInput = React.forwardRef<HTMLInputElement, SearchInputProps>(\n ({ value, onClear, className, size, ...props }, ref) => {\n const hasValue = value !== undefined && value !== '';\n\n return (\n <div className=\"relative flex items-center w-full\">\n <Search className=\"absolute left-3 w-4 h-4 text-sg-text-muted pointer-events-none\" />\n <input\n ref={ref}\n value={value}\n className={twMerge(\n inputBase,\n sizeClasses[size || 'md'],\n 'pl-9',\n hasValue ? 'pr-9' : '',\n className\n )}\n {...props}\n />\n {hasValue && onClear && (\n <button\n type=\"button\"\n onClick={onClear}\n className=\"absolute right-3 w-4 h-4 text-sg-text-muted hover:text-white transition-colors cursor-pointer\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n );\n }\n);\n\nSearchInput.displayName = 'SearchInput';\n\n/* ─── Textarea ─── */\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n label?: string;\n helperText?: string;\n error?: string;\n maxLength?: number;\n autoResize?: boolean;\n}\n\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, label, helperText, error, maxLength, autoResize = false, rows = 3, ...props }, ref) => {\n const internalRef = useRef<HTMLTextAreaElement | null>(null);\n const [charCount, setCharCount] = useState(0);\n const errorStyle = error ? 'border-red-500/30 focus:border-red-500/50 focus:ring-red-500/20' : '';\n\n const handleRef = useCallback(\n (el: HTMLTextAreaElement | null) => {\n internalRef.current = el;\n if (typeof ref === 'function') ref(el);\n else if (ref) (ref as React.MutableRefObject<HTMLTextAreaElement | null>).current = el;\n },\n [ref]\n );\n\n const handleInput = useCallback(() => {\n if (!internalRef.current) return;\n setCharCount(internalRef.current.value.length);\n if (autoResize) {\n internalRef.current.style.height = 'auto';\n internalRef.current.style.height = internalRef.current.scrollHeight + 'px';\n }\n }, [autoResize]);\n\n useEffect(() => {\n if (internalRef.current) setCharCount(internalRef.current.value.length);\n }, []);\n\n const pct = maxLength ? charCount / maxLength : 0;\n const counterColor = pct >= 1 ? 'text-red-400' : pct >= 0.9 ? 'text-amber-400' : 'text-sg-text-muted';\n\n return (\n <div className=\"w-full\">\n {label && <FieldLabel>{label}</FieldLabel>}\n <textarea\n ref={handleRef}\n rows={rows}\n maxLength={maxLength}\n onInput={handleInput}\n className={twMerge(\n inputBase,\n 'px-3.5 py-2.5 text-sm rounded-xl resize-y',\n autoResize ? 'resize-none overflow-hidden' : '',\n errorStyle,\n className\n )}\n {...props}\n />\n <div className=\"flex justify-between mt-1\">\n <div>\n {error && <FieldHelper error>{error}</FieldHelper>}\n {!error && helperText && <FieldHelper>{helperText}</FieldHelper>}\n </div>\n {maxLength !== undefined && (\n <span className={`text-[10px] ${counterColor}`}>\n {charCount}/{maxLength}\n </span>\n )}\n </div>\n </div>\n );\n }\n);\n\nTextarea.displayName = 'Textarea';","import React from 'react';\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport { twMerge } from 'tailwind-merge';\nimport { Check, Minus } from 'lucide-react';\nimport { SG_FOCUS_RING } from './utils/styles';\n\n/* ═══════════════════════════════════════════════════════════════\n Checkbox — Stealth Glass Design System\n @level L1 — Atom: Checkbox with label/description\n ═══════════════════════════════════════════════════════════════ */\n\nexport interface CheckboxProps {\n checked?: boolean | 'indeterminate';\n onCheckedChange?: (checked: boolean | 'indeterminate') => void;\n label?: string;\n description?: string;\n disabled?: boolean;\n className?: string;\n id?: string;\n}\n\nexport function Checkbox({\n checked,\n onCheckedChange,\n label,\n description,\n disabled = false,\n className,\n id,\n}: CheckboxProps) {\n const checkboxId = id || React.useId();\n\n return (\n <div className={twMerge('flex items-start gap-3', className)}>\n <CheckboxPrimitive.Root\n id={checkboxId}\n checked={checked}\n onCheckedChange={onCheckedChange}\n disabled={disabled}\n className={twMerge(\n 'peer h-[18px] w-[18px] shrink-0 rounded-md border transition-all duration-200 cursor-pointer',\n 'bg-white/[0.03] border-white/10',\n 'data-[state=checked]:bg-blue-600 data-[state=checked]:border-blue-500',\n 'data-[state=indeterminate]:bg-blue-600 data-[state=indeterminate]:border-blue-500',\n 'hover:border-white/20',\n 'disabled:opacity-40 disabled:cursor-not-allowed',\n SG_FOCUS_RING\n )}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center text-white\">\n {checked === 'indeterminate' ? (\n <Minus className=\"w-3 h-3\" />\n ) : (\n <Check className=\"w-3 h-3\" />\n )}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n {(label || description) && (\n <label htmlFor={checkboxId} className={`cursor-pointer ${disabled ? 'opacity-40 cursor-not-allowed' : ''}`}>\n {label && <span className=\"text-sm text-foreground block\">{label}</span>}\n {description && <span className=\"text-[10px] text-sg-text-muted block mt-0.5\">{description}</span>}\n </label>\n )}\n </div>\n );\n}","import React from 'react';\nimport * as RadioGroupPrimitive from '@radix-ui/react-radio-group';\nimport { twMerge } from 'tailwind-merge';\nimport { SG_FOCUS_RING } from './utils/styles';\n\n/* ═══════════════════════════════════════════════════════════════\n RadioGroup + RadioItem — Stealth Glass Design System\n @level L1 — Atom: Radio button group\n ═══════════════════════════════════════════════════════════════ */\n\nexport interface RadioGroupProps {\n value?: string;\n onValueChange?: (value: string) => void;\n orientation?: 'horizontal' | 'vertical';\n children: React.ReactNode;\n className?: string;\n}\n\nexport function RadioGroup({ value, onValueChange, orientation = 'vertical', children, className }: RadioGroupProps) {\n return (\n <RadioGroupPrimitive.Root\n value={value}\n onValueChange={onValueChange}\n orientation={orientation}\n className={twMerge(\n orientation === 'horizontal' ? 'flex items-center gap-4 flex-wrap' : 'space-y-3',\n className\n )}\n >\n {children}\n </RadioGroupPrimitive.Root>\n );\n}\n\nexport interface RadioItemProps {\n value: string;\n label?: string;\n description?: string;\n disabled?: boolean;\n className?: string;\n id?: string;\n}\n\nexport function RadioItem({ value, label, description, disabled = false, className, id }: RadioItemProps) {\n const radioId = id || React.useId();\n\n return (\n <div className={twMerge('flex items-start gap-3', className)}>\n <RadioGroupPrimitive.Item\n id={radioId}\n value={value}\n disabled={disabled}\n className={twMerge(\n 'peer h-[18px] w-[18px] shrink-0 rounded-full border transition-all duration-200 cursor-pointer',\n 'bg-white/[0.03] border-white/10',\n 'data-[state=checked]:border-blue-500',\n 'hover:border-white/20',\n 'disabled:opacity-40 disabled:cursor-not-allowed',\n SG_FOCUS_RING\n )}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <div className=\"w-2 h-2 rounded-full bg-blue-600\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n {(label || description) && (\n <label htmlFor={radioId} className={`cursor-pointer ${disabled ? 'opacity-40 cursor-not-allowed' : ''}`}>\n {label && <span className=\"text-sm text-foreground block\">{label}</span>}\n {description && <span className=\"text-[10px] text-sg-text-muted block mt-0.5\">{description}</span>}\n </label>\n )}\n </div>\n );\n}","import React from 'react';\nimport * as SwitchPrimitive from '@radix-ui/react-switch';\nimport { twMerge } from 'tailwind-merge';\nimport { SG_FOCUS_RING } from './utils/styles';\n\n/* ═══════════════════════════════════════════════════════════════\n Switch — Stealth Glass Design System\n @level L1 — Atom: Toggle switch with label/description\n ═══════════════════════════════════════════════════════════════ */\n\nexport interface SwitchProps {\n checked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n label?: string;\n description?: string;\n disabled?: boolean;\n size?: 'sm' | 'md';\n className?: string;\n id?: string;\n}\n\nexport function Switch({\n checked,\n onCheckedChange,\n label,\n description,\n disabled = false,\n size = 'md',\n className,\n id,\n}: SwitchProps) {\n const switchId = id || React.useId();\n const isSm = size === 'sm';\n\n return (\n <div className={twMerge('flex items-center gap-3', className)}>\n <SwitchPrimitive.Root\n id={switchId}\n checked={checked}\n onCheckedChange={onCheckedChange}\n disabled={disabled}\n className={twMerge(\n 'peer inline-flex shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent',\n 'transition-colors duration-200',\n isSm ? 'h-5 w-9' : 'h-6 w-11',\n 'bg-white/10',\n 'data-[state=checked]:bg-blue-600 data-[state=checked]:shadow-[0_0_12px_rgba(59,130,246,0.3)]',\n 'disabled:opacity-40 disabled:cursor-not-allowed',\n SG_FOCUS_RING\n )}\n >\n <SwitchPrimitive.Thumb\n className={twMerge(\n 'pointer-events-none block rounded-full bg-white shadow-lg',\n 'transition-transform duration-200',\n isSm ? 'h-4 w-4' : 'h-5 w-5',\n isSm\n ? 'data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0'\n : 'data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0'\n )}\n />\n </SwitchPrimitive.Root>\n {(label || description) && (\n <label\n htmlFor={switchId}\n className={`cursor-pointer ${disabled ? 'opacity-40 cursor-not-allowed' : ''}`}\n >\n {label && <span className=\"text-sm text-foreground block\">{label}</span>}\n {description && <span className=\"text-[10px] text-sg-text-muted block mt-0.5\">{description}</span>}\n </label>\n )}\n </div>\n );\n}","import React from 'react';\nimport * as SelectPrimitive from '@radix-ui/react-select';\nimport { twMerge } from 'tailwind-merge';\nimport { Check, ChevronDown, ChevronUp } from 'lucide-react';\nimport { SG_FOCUS_RING } from './utils/styles';\n\n/* ═══════════════════════════════════════════════════════════════\n Select — Stealth Glass Design System\n @level L1 — Atom: Dropdown select (Radix)\n ═══════════════════════════════════════════════════════════════ */\n\nconst triggerSizes = {\n sm: 'h-8 px-3 text-xs rounded-lg',\n md: 'h-10 px-3.5 text-sm rounded-xl',\n lg: 'h-12 px-4 text-base rounded-xl',\n};\n\nexport interface SelectTriggerProps extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> {\n size?: 'sm' | 'md' | 'lg';\n error?: string;\n label?: string;\n}\n\nexport const SelectTrigger = React.forwardRef<HTMLButtonElement, SelectTriggerProps>(\n ({ className, children, size = 'md', error, label, ...props }, ref) => {\n const errorStyle = error ? 'border-red-500/30 focus:border-red-500/50 focus:ring-red-500/20' : '';\n\n return (\n <div className=\"w-full\">\n {label && (\n <label className=\"block text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted mb-1.5\">\n {label}\n </label>\n )}\n <SelectPrimitive.Trigger\n ref={ref}\n className={twMerge(\n 'flex w-full items-center justify-between',\n 'bg-white/[0.03] border border-white/5 text-foreground',\n 'placeholder:text-sg-text-muted/60',\n 'transition-all duration-200 cursor-pointer',\n 'data-[placeholder]:text-sg-text-muted/60',\n triggerSizes[size],\n errorStyle,\n SG_FOCUS_RING,\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"w-4 h-4 text-sg-text-muted shrink-0 ml-2\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n {error && (\n <p className=\"mt-1 text-[10px] text-red-400\">{error}</p>\n )}\n </div>\n );\n }\n);\n\nSelectTrigger.displayName = 'SelectTrigger';\n\n/* ─── Content ─── */\n\nexport const SelectContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = 'popper', ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n position={position}\n className={twMerge(\n 'relative z-50 overflow-hidden',\n 'bg-sg-elevated border border-white/5 rounded-xl backdrop-blur-xl shadow-2xl',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]: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=top]:slide-in-from-bottom-2',\n position === 'popper' && 'max-h-[--radix-select-content-available-height] w-[--radix-select-trigger-width]',\n className\n )}\n {...props}\n >\n <SelectPrimitive.ScrollUpButton className=\"flex items-center justify-center h-6 cursor-default\">\n <ChevronUp className=\"w-4 h-4 text-sg-text-muted\" />\n </SelectPrimitive.ScrollUpButton>\n <SelectPrimitive.Viewport className=\"p-1 max-h-[300px] overflow-y-auto\">\n {children}\n </SelectPrimitive.Viewport>\n <SelectPrimitive.ScrollDownButton className=\"flex items-center justify-center h-6 cursor-default\">\n <ChevronDown className=\"w-4 h-4 text-sg-text-muted\" />\n </SelectPrimitive.ScrollDownButton>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\n\nSelectContent.displayName = 'SelectContent';\n\n/* ─── Item ─── */\n\nexport const SelectItem = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={twMerge(\n 'relative flex w-full items-center select-none',\n 'px-3 py-2 pl-8 rounded-lg text-sm text-muted-foreground cursor-pointer',\n 'hover:bg-white/5 hover:text-white',\n 'focus:bg-white/5 focus:text-white focus:outline-none',\n 'data-[state=checked]:bg-blue-500/10 data-[state=checked]:text-white',\n 'data-[disabled]:opacity-40 data-[disabled]:cursor-not-allowed data-[disabled]:pointer-events-none',\n 'transition-colors duration-150',\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2.5 flex items-center justify-center w-3.5 h-3.5\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"w-3.5 h-3.5 text-blue-400\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\n\nSelectItem.displayName = 'SelectItem';\n\n/* ─── Group + Label + Separator ─── */\n\nexport const SelectGroup = SelectPrimitive.Group;\n\nexport const SelectLabel = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={twMerge(\n 'px-3 py-1.5 text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted',\n className\n )}\n {...props}\n />\n));\n\nSelectLabel.displayName = 'SelectLabel';\n\nexport function SelectSeparator({ className }: { className?: string }) {\n return <SelectPrimitive.Separator className={twMerge('h-px bg-white/5 my-1 -mx-1', className)} />;\n}\n\n/* ─── Re-export Radix primitives used directly by consumers ─── */\n\nexport const Select = SelectPrimitive.Root;\nexport const SelectValue = SelectPrimitive.Value;","import React from 'react';\nimport * as SliderPrimitive from '@radix-ui/react-slider';\nimport { twMerge } from 'tailwind-merge';\n\n/* ═══════════════════════════════════════════════════════════════\n Slider + RangeSlider — Stealth Glass Design System\n @level L1 — Atom: Range slider controls (Radix)\n ═══════════════════════════════════════════════════════════════\n \n Usage:\n <Slider value={256} onValueChange={setMem} min={128} max={2048}\n label=\"Memory\" formatValue={v => `${v} MB`} />\n <RangeSlider value={[10, 90]} onValueChange={setRange}\n label=\"Range\" />\n ═══════════════════════════════════════════════════════════════ */\n\nconst colorMap: Record<string, { range: string; thumb: string; glow: string }> = {\n blue: { range: 'bg-blue-500', thumb: 'border-blue-500', glow: 'shadow-[0_0_8px_rgba(59,130,246,0.3)]' },\n indigo: { range: 'bg-indigo-500', thumb: 'border-indigo-500', glow: 'shadow-[0_0_8px_rgba(99,102,241,0.3)]' },\n success: { range: 'bg-emerald-500', thumb: 'border-emerald-500',glow: 'shadow-[0_0_8px_rgba(16,185,129,0.3)]' },\n warning: { range: 'bg-amber-500', thumb: 'border-amber-500', glow: 'shadow-[0_0_8px_rgba(245,158,11,0.3)]' },\n danger: { range: 'bg-red-500', thumb: 'border-red-500', glow: 'shadow-[0_0_8px_rgba(239,68,68,0.3)]' },\n};\n\nconst trackHeight = {\n sm: 'h-1',\n md: 'h-1.5',\n};\n\nexport interface SliderMark {\n value: number;\n label: string;\n}\n\n/* ─── Slider (single value) ─── */\n\nexport interface SliderProps {\n min?: number;\n max?: number;\n step?: number;\n value: number;\n onValueChange: (value: number) => void;\n label?: string;\n showValue?: boolean;\n formatValue?: (value: number) => string;\n size?: 'sm' | 'md';\n color?: keyof typeof colorMap;\n marks?: SliderMark[];\n disabled?: boolean;\n className?: string;\n}\n\nexport function Slider({\n min = 0,\n max = 100,\n step = 1,\n value,\n onValueChange,\n label,\n showValue = true,\n formatValue,\n size = 'md',\n color = 'blue',\n marks,\n disabled = false,\n className,\n}: SliderProps) {\n const c = colorMap[color];\n const display = formatValue ? formatValue(value) : String(value);\n\n return (\n <div className={twMerge('w-full', className)}>\n {/* Label row */}\n {(label || showValue) && (\n <div className=\"flex items-center justify-between mb-2\">\n {label && (\n <span className=\"text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted\">\n {label}\n </span>\n )}\n {showValue && (\n <span className=\"text-xs text-foreground font-mono\">{display}</span>\n )}\n </div>\n )}\n\n {/* Radix slider */}\n <SliderPrimitive.Root\n min={min}\n max={max}\n step={step}\n value={[value]}\n onValueChange={([v]) => onValueChange(v)}\n disabled={disabled}\n className={twMerge(\n 'relative flex items-center select-none touch-none w-full',\n trackHeight[size] === 'h-1' ? 'h-5' : 'h-5',\n disabled && 'opacity-40 pointer-events-none'\n )}\n >\n <SliderPrimitive.Track\n className={twMerge(\n 'relative w-full rounded-full bg-white/[0.06] grow',\n trackHeight[size]\n )}\n >\n <SliderPrimitive.Range\n className={twMerge('absolute h-full rounded-full', c.range)}\n />\n </SliderPrimitive.Track>\n <SliderPrimitive.Thumb\n className={twMerge(\n 'block w-4 h-4 rounded-full bg-white border-2 transition-transform hover:scale-110',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500/50 focus-visible:shadow-[0_0_0_4px_rgba(59,130,246,0.15)]',\n c.thumb,\n c.glow\n )}\n />\n </SliderPrimitive.Root>\n\n {/* Marks */}\n {marks && marks.length > 0 && (\n <div className=\"relative w-full mt-1\" style={{ height: '16px' }}>\n {marks.map((mark) => {\n const pct = ((mark.value - min) / (max - min)) * 100;\n return (\n <span\n key={mark.value}\n className=\"absolute text-[10px] text-sg-text-muted -translate-x-1/2\"\n style={{ left: `${pct}%` }}\n >\n {mark.label}\n </span>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n\n/* ─── RangeSlider (two thumbs) ─── */\n\nexport interface RangeSliderProps {\n min?: number;\n max?: number;\n step?: number;\n value: [number, number];\n onValueChange: (value: [number, number]) => void;\n label?: string;\n showValue?: boolean;\n formatValue?: (value: number) => string;\n size?: 'sm' | 'md';\n color?: keyof typeof colorMap;\n disabled?: boolean;\n className?: string;\n}\n\nexport function RangeSlider({\n min = 0,\n max = 100,\n step = 1,\n value,\n onValueChange,\n label,\n showValue = true,\n formatValue,\n size = 'md',\n color = 'blue',\n disabled = false,\n className,\n}: RangeSliderProps) {\n const c = colorMap[color];\n const fmt = (v: number) => (formatValue ? formatValue(v) : String(v));\n\n return (\n <div className={twMerge('w-full', className)}>\n {(label || showValue) && (\n <div className=\"flex items-center justify-between mb-2\">\n {label && (\n <span className=\"text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted\">\n {label}\n </span>\n )}\n {showValue && (\n <span className=\"text-xs text-foreground font-mono\">\n {fmt(value[0])} – {fmt(value[1])}\n </span>\n )}\n </div>\n )}\n\n <SliderPrimitive.Root\n min={min}\n max={max}\n step={step}\n value={value}\n onValueChange={(v) => onValueChange(v as [number, number])}\n disabled={disabled}\n className={twMerge(\n 'relative flex items-center select-none touch-none w-full h-5',\n disabled && 'opacity-40 pointer-events-none'\n )}\n >\n <SliderPrimitive.Track\n className={twMerge(\n 'relative w-full rounded-full bg-white/[0.06] grow',\n trackHeight[size]\n )}\n >\n <SliderPrimitive.Range\n className={twMerge('absolute h-full rounded-full', c.range)}\n />\n </SliderPrimitive.Track>\n <SliderPrimitive.Thumb\n className={twMerge(\n 'block w-4 h-4 rounded-full bg-white border-2 transition-transform hover:scale-110',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500/50 focus-visible:shadow-[0_0_0_4px_rgba(59,130,246,0.15)]',\n c.thumb,\n c.glow\n )}\n />\n <SliderPrimitive.Thumb\n className={twMerge(\n 'block w-4 h-4 rounded-full bg-white border-2 transition-transform hover:scale-110',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500/50 focus-visible:shadow-[0_0_0_4px_rgba(59,130,246,0.15)]',\n c.thumb,\n c.glow\n )}\n />\n </SliderPrimitive.Root>\n </div>\n );\n}","import React, { useRef, useCallback, useEffect } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { Minus, Plus } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n NumberInput — Numeric input with +/- stepper buttons\n @level L1 — Atom: Numeric stepper input\n ═══════════════════════════════════════════════════════════════\n \n Usage:\n <NumberInput value={256} onChange={setMem} min={128} max={2048}\n step={128} unit=\"MB\" label=\"Memory\" />\n <NumberInput value={30} onChange={setTimeout} min={1} max={300}\n unit=\"seconds\" size=\"sm\" />\n ═══════════════════════════════════════════════════════════════ */\n\nconst sizeMap = {\n sm: { container: 'h-9', input: 'text-sm w-14', button: 'w-8', icon: 'w-3 h-3' },\n md: { container: 'h-10', input: 'text-sm w-16', button: 'w-9', icon: 'w-3.5 h-3.5' },\n lg: { container: 'h-11', input: 'text-base w-20', button: 'w-10', icon: 'w-4 h-4' },\n};\n\nexport interface NumberInputProps {\n value: number;\n onChange: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n label?: string;\n helperText?: string;\n error?: string;\n unit?: string;\n size?: 'sm' | 'md' | 'lg';\n disabled?: boolean;\n className?: string;\n}\n\nexport function NumberInput({\n value,\n onChange,\n min,\n max,\n step = 1,\n label,\n helperText,\n error,\n unit,\n size = 'md',\n disabled = false,\n className,\n}: NumberInputProps) {\n const s = sizeMap[size];\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const atMin = min !== undefined && value <= min;\n const atMax = max !== undefined && value >= max;\n\n const clamp = useCallback(\n (v: number) => {\n let n = v;\n if (min !== undefined) n = Math.max(min, n);\n if (max !== undefined) n = Math.min(max, n);\n return n;\n },\n [min, max]\n );\n\n const increment = useCallback(() => {\n onChange(clamp(value + step));\n }, [value, step, clamp, onChange]);\n\n const decrement = useCallback(() => {\n onChange(clamp(value - step));\n }, [value, step, clamp, onChange]);\n\n // Long-press acceleration\n const startHold = useCallback(\n (action: () => void) => {\n action();\n timeoutRef.current = setTimeout(() => {\n intervalRef.current = setInterval(action, 80);\n }, 400);\n },\n []\n );\n\n const stopHold = useCallback(() => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n if (intervalRef.current) clearInterval(intervalRef.current);\n timeoutRef.current = null;\n intervalRef.current = null;\n }, []);\n\n // Cleanup on unmount\n useEffect(() => stopHold, [stopHold]);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value;\n if (raw === '' || raw === '-') return;\n const n = parseFloat(raw);\n if (!isNaN(n)) onChange(clamp(n));\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n increment();\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n decrement();\n }\n };\n\n return (\n <div className={twMerge('w-full', className)}>\n {label && (\n <label className=\"block text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted mb-1.5\">\n {label}\n </label>\n )}\n\n <div\n className={twMerge(\n 'inline-flex items-center rounded-xl bg-white/[0.03] border transition-all',\n s.container,\n error ? 'border-red-500/30' : 'border-white/5 focus-within:border-blue-500/50 focus-within:bg-white/[0.05]',\n disabled && 'opacity-40 pointer-events-none'\n )}\n >\n {/* Decrement */}\n <button\n type=\"button\"\n onMouseDown={() => !atMin && startHold(decrement)}\n onMouseUp={stopHold}\n onMouseLeave={stopHold}\n disabled={disabled || atMin}\n className={twMerge(\n 'flex items-center justify-center shrink-0 rounded-l-xl text-sg-text-muted hover:text-white hover:bg-white/5 transition-colors cursor-pointer h-full',\n s.button,\n (atMin || disabled) && 'opacity-30 cursor-not-allowed hover:bg-transparent hover:text-sg-text-muted'\n )}\n aria-label=\"Decrease\"\n >\n <Minus className={s.icon} />\n </button>\n\n {/* Input */}\n <div className=\"flex items-center justify-center gap-1 flex-1\">\n <input\n type=\"text\"\n inputMode=\"numeric\"\n value={value}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n className={twMerge(\n 'bg-transparent text-center font-mono text-foreground focus:outline-none focus:ring-2 focus:ring-blue-500/20 focus:shadow-[0_0_0_4px_rgba(59,130,246,0.15)] rounded-md [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none',\n s.input\n )}\n aria-label={label || 'Number input'}\n />\n {unit && (\n <span className=\"text-xs text-sg-text-muted shrink-0\">{unit}</span>\n )}\n </div>\n\n {/* Increment */}\n <button\n type=\"button\"\n onMouseDown={() => !atMax && startHold(increment)}\n onMouseUp={stopHold}\n onMouseLeave={stopHold}\n disabled={disabled || atMax}\n className={twMerge(\n 'flex items-center justify-center shrink-0 rounded-r-xl text-sg-text-muted hover:text-white hover:bg-white/5 transition-colors cursor-pointer h-full',\n s.button,\n (atMax || disabled) && 'opacity-30 cursor-not-allowed hover:bg-transparent hover:text-sg-text-muted'\n )}\n aria-label=\"Increase\"\n >\n <Plus className={s.icon} />\n </button>\n </div>\n\n {/* Helper / Error */}\n {error && <p className=\"text-xs text-red-400 mt-1\">{error}</p>}\n {!error && helperText && (\n <p className=\"text-xs text-sg-text-muted mt-1\">{helperText}</p>\n )}\n </div>\n );\n}","import React, { useState, useRef, useCallback, useEffect } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { X } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n TagInput + Tag — Multi-value tag input with suggestions\n @level L2 — Molecule: Tag chips + input + suggestion dropdown\n ═══════════════════════════════════════════════════════════════\n \n Usage:\n <TagInput value={tags} onChange={setTags}\n suggestions={['production', 'staging']}\n maxTags={5} label=\"Labels\" />\n <Tag label=\"production\" variant=\"success\" onRemove={...} />\n ═══════════════════════════════════════════════════════════════ */\n\n/* ─── Tag ─── */\n\nconst tagVariants = {\n default: 'bg-white/[0.06] border-white/5 text-foreground',\n brand: 'bg-blue-500/10 border-blue-500/20 text-blue-400',\n success: 'bg-emerald-500/10 border-emerald-500/20 text-emerald-400',\n warning: 'bg-amber-500/10 border-amber-500/20 text-amber-400',\n danger: 'bg-red-500/10 border-red-500/20 text-red-400',\n};\n\nconst tagSizes = {\n sm: 'px-1.5 py-0 text-[10px]',\n md: 'px-2 py-0.5 text-xs',\n};\n\nexport interface TagProps {\n label: string;\n onRemove?: () => void;\n variant?: keyof typeof tagVariants;\n size?: 'sm' | 'md';\n className?: string;\n}\n\nexport function Tag({\n label,\n onRemove,\n variant = 'default',\n size = 'md',\n className,\n}: TagProps) {\n return (\n <span\n className={twMerge(\n 'inline-flex items-center gap-1 rounded-md border',\n tagVariants[variant],\n tagSizes[size],\n className\n )}\n >\n {label}\n {onRemove && (\n <button\n onClick={onRemove}\n className=\"text-sg-text-muted hover:text-white transition-colors cursor-pointer shrink-0\"\n aria-label={`Remove ${label}`}\n >\n <X className=\"w-3 h-3\" />\n </button>\n )}\n </span>\n );\n}\n\n/* ─── TagInput ─── */\n\nexport interface TagInputProps {\n value: string[];\n onChange: (tags: string[]) => void;\n placeholder?: string;\n maxTags?: number;\n suggestions?: string[];\n label?: string;\n error?: string;\n disabled?: boolean;\n allowDuplicates?: boolean;\n validateTag?: (tag: string) => boolean | string;\n className?: string;\n}\n\nexport function TagInput({\n value,\n onChange,\n placeholder = 'Add tag...',\n maxTags,\n suggestions = [],\n label,\n error,\n disabled = false,\n allowDuplicates = false,\n validateTag,\n className,\n}: TagInputProps) {\n const [input, setInput] = useState('');\n const [showSuggestions, setShowSuggestions] = useState(false);\n const [highlightIdx, setHighlightIdx] = useState(-1);\n const inputRef = useRef<HTMLInputElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const atMax = maxTags !== undefined && value.length >= maxTags;\n\n // Filter suggestions\n const filtered = suggestions.filter(\n (s) =>\n s.toLowerCase().includes(input.toLowerCase()) &&\n (allowDuplicates || !value.includes(s))\n );\n\n const addTag = useCallback(\n (tag: string) => {\n const trimmed = tag.trim();\n if (!trimmed) return;\n if (atMax) return;\n if (!allowDuplicates && value.includes(trimmed)) return;\n if (validateTag) {\n const result = validateTag(trimmed);\n if (result === false || typeof result === 'string') return;\n }\n onChange([...value, trimmed]);\n setInput('');\n setShowSuggestions(false);\n setHighlightIdx(-1);\n },\n [value, onChange, atMax, allowDuplicates, validateTag]\n );\n\n const removeTag = useCallback(\n (idx: number) => {\n onChange(value.filter((_, i) => i !== idx));\n },\n [value, onChange]\n );\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ',') {\n e.preventDefault();\n if (showSuggestions && highlightIdx >= 0 && filtered[highlightIdx]) {\n addTag(filtered[highlightIdx]);\n } else {\n addTag(input);\n }\n } else if (e.key === 'Backspace' && !input && value.length > 0) {\n removeTag(value.length - 1);\n } else if (e.key === 'ArrowDown' && showSuggestions) {\n e.preventDefault();\n setHighlightIdx((prev) => Math.min(prev + 1, filtered.length - 1));\n } else if (e.key === 'ArrowUp' && showSuggestions) {\n e.preventDefault();\n setHighlightIdx((prev) => Math.max(prev - 1, 0));\n } else if (e.key === 'Escape') {\n setShowSuggestions(false);\n setHighlightIdx(-1);\n }\n };\n\n // Close suggestions on outside click\n useEffect(() => {\n function handleClick(e: MouseEvent) {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setShowSuggestions(false);\n }\n }\n document.addEventListener('mousedown', handleClick);\n return () => document.removeEventListener('mousedown', handleClick);\n }, []);\n\n return (\n <div className={twMerge('w-full', className)} ref={containerRef}>\n {label && (\n <label className=\"block text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted mb-1.5\">\n {label}\n </label>\n )}\n\n {/* Input container */}\n <div\n className={twMerge(\n 'flex flex-wrap gap-1.5 min-h-[40px] p-2 rounded-xl bg-white/[0.03] border transition-all cursor-text',\n error\n ? 'border-red-500/30'\n : 'border-white/5 focus-within:border-blue-500/50 focus-within:bg-white/[0.05]',\n disabled && 'opacity-40 pointer-events-none'\n )}\n onClick={() => inputRef.current?.focus()}\n >\n {/* Tags */}\n {value.map((tag, i) => (\n <Tag\n key={`${tag}-${i}`}\n label={tag}\n onRemove={disabled ? undefined : () => removeTag(i)}\n />\n ))}\n\n {/* Input */}\n {!atMax && (\n <input\n ref={inputRef}\n type=\"text\"\n value={input}\n onChange={(e) => {\n setInput(e.target.value);\n setShowSuggestions(true);\n setHighlightIdx(-1);\n }}\n onFocus={() => setShowSuggestions(true)}\n onKeyDown={handleKeyDown}\n placeholder={value.length === 0 ? placeholder : ''}\n disabled={disabled}\n className=\"bg-transparent border-none outline-none text-sm text-foreground placeholder:text-sg-text-muted/60 min-w-[80px] flex-1\"\n />\n )}\n </div>\n\n {/* Suggestions dropdown */}\n {showSuggestions && filtered.length > 0 && input.length > 0 && (\n <div className=\"mt-1 rounded-xl bg-sg-elevated border border-white/5 shadow-sg-dropdown backdrop-blur-xl max-h-[200px] overflow-y-auto z-50 relative\">\n {filtered.map((suggestion, i) => (\n <button\n key={suggestion}\n type=\"button\"\n onMouseDown={(e) => {\n e.preventDefault();\n addTag(suggestion);\n }}\n className={twMerge(\n 'w-full text-left px-3 py-2 text-sm text-muted-foreground hover:bg-white/5 hover:text-white rounded-lg cursor-pointer transition-colors',\n i === highlightIdx && 'bg-white/5 text-white'\n )}\n >\n {suggestion}\n </button>\n ))}\n </div>\n )}\n\n {/* Error / Max info */}\n {error && <p className=\"text-xs text-red-400 mt-1\">{error}</p>}\n {maxTags && !error && (\n <p className=\"text-[10px] text-sg-text-muted mt-1\">\n {value.length} / {maxTags} tags\n </p>\n )}\n </div>\n );\n}","import React from 'react';\nimport { Toaster, type ToasterProps } from 'sonner';\n\n/* ═══════════════════════════════════════════════════════════════\n StealthToaster — Stealth Glass Design System\n @level L1 — Atom: Toast notification provider (Sonner)\n \n Usage:\n Place <StealthToaster /> once in your root layout.\n Then call toast(), toast.success(), toast.error(), etc.\n \n import { toast } from 'sonner';\n import { StealthToaster } from '@/theme';\n ═══════════════════════════════════════════════════════════════ */\n\nexport interface StealthToasterProps {\n position?: ToasterProps['position'];\n}\n\nexport function StealthToaster({ position = 'bottom-right' }: StealthToasterProps) {\n return (\n <Toaster\n position={position}\n richColors={false}\n gap={8}\n toastOptions={{\n unstyled: true,\n classNames: {\n toast: [\n 'flex items-start gap-3 w-full p-4 rounded-xl shadow-2xl border',\n 'bg-sg-elevated border-white/5 backdrop-blur-xl',\n 'text-sm text-foreground',\n ].join(' '),\n title: 'text-sm text-foreground',\n description: 'text-[10px] text-muted-foreground mt-0.5',\n actionButton: [\n 'ml-auto shrink-0 px-3 py-1.5 rounded-lg text-xs',\n 'bg-blue-600 text-white hover:bg-blue-500 transition-colors cursor-pointer',\n ].join(' '),\n cancelButton: [\n 'ml-2 shrink-0 px-3 py-1.5 rounded-lg text-xs',\n 'bg-white/[0.03] text-muted-foreground border border-white/10 hover:bg-white/[0.06] transition-colors cursor-pointer',\n ].join(' '),\n closeButton: [\n 'absolute top-2 right-2 p-1 rounded-md',\n 'text-sg-text-muted hover:text-white hover:bg-white/5 transition-colors cursor-pointer',\n ].join(' '),\n success: 'border-emerald-500/20 bg-sg-elevated',\n error: 'border-red-500/20 bg-sg-elevated',\n warning: 'border-amber-500/20 bg-sg-elevated',\n info: 'border-blue-500/20 bg-sg-elevated',\n },\n }}\n />\n );\n}","import React from 'react';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { twMerge } from 'tailwind-merge';\nimport { X, Loader2 } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n Dialog + ConfirmDialog — Stealth Glass Design System\n @level L3 — Organism: Modal dialog system (Radix)\n ═══════════════════════════════════════════════════════════════ */\n\n/* ─── Primitives ─── */\n\nexport const Dialog = DialogPrimitive.Root;\nexport const DialogTrigger = DialogPrimitive.Trigger;\nexport const DialogClose = DialogPrimitive.Close;\nexport const DialogPortal = DialogPrimitive.Portal;\n\n/* ─── Overlay ─── */\n\nexport const DialogOverlay = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={twMerge(\n 'fixed inset-0 z-50 bg-black/60 backdrop-blur-sm',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0',\n className\n )}\n {...props}\n />\n));\n\nDialogOverlay.displayName = 'DialogOverlay';\n\n/* ─── Content ─── */\n\nexport const DialogContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & { hideClose?: boolean }\n>(({ className, children, hideClose = false, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={twMerge(\n 'fixed left-1/2 top-1/2 z-50 -translate-x-1/2 -translate-y-1/2',\n 'w-[calc(100%-2rem)] max-w-lg',\n 'bg-card border border-white/5 shadow-2xl backdrop-blur-xl',\n 'rounded-[2rem] p-6',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%]',\n 'duration-200',\n /* Mobile: full-width bottom sheet */\n 'max-sm:fixed max-sm:left-0 max-sm:right-0 max-sm:bottom-0 max-sm:top-auto',\n 'max-sm:translate-x-0 max-sm:translate-y-0',\n 'max-sm:w-full max-sm:max-w-full max-sm:rounded-b-none max-sm:rounded-t-[2rem]',\n 'max-sm:max-h-[90vh] max-sm:overflow-y-auto',\n className\n )}\n {...props}\n >\n {children}\n {!hideClose && (\n <DialogPrimitive.Close\n className={twMerge(\n 'absolute right-4 top-4 p-1.5 rounded-xl cursor-pointer',\n 'text-sg-text-muted hover:text-white hover:bg-white/5 transition-colors',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500/50 focus-visible:shadow-[0_0_0_4px_rgba(59,130,246,0.15)]'\n )}\n >\n <X className=\"w-4 h-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n));\n\nDialogContent.displayName = 'DialogContent';\n\n/* ─── Header / Title / Description / Footer ─── */\n\nexport function DialogHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={twMerge('space-y-1.5 mb-4', className)} {...props} />;\n}\n\nexport const DialogTitle = React.forwardRef<\n HTMLHeadingElement,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={twMerge('text-lg text-foreground', className)}\n {...props}\n />\n));\n\nDialogTitle.displayName = 'DialogTitle';\n\nexport const DialogDescription = React.forwardRef<\n HTMLParagraphElement,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={twMerge('text-sm text-muted-foreground', className)}\n {...props}\n />\n));\n\nDialogDescription.displayName = 'DialogDescription';\n\nexport function DialogFooter({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={twMerge('flex justify-end gap-3 pt-4 mt-4 border-t border-white/5', className)}\n {...props}\n />\n );\n}\n\n/* ─── ConfirmDialog (convenience wrapper) ─── */\n\nexport interface ConfirmDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: string;\n description?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n variant?: 'default' | 'destructive';\n loading?: boolean;\n onConfirm: () => void | Promise<void>;\n onCancel?: () => void;\n}\n\nexport function ConfirmDialog({\n open,\n onOpenChange,\n title,\n description,\n confirmLabel = 'Confirm',\n cancelLabel = 'Cancel',\n variant = 'default',\n loading = false,\n onConfirm,\n onCancel,\n}: ConfirmDialogProps) {\n const isDestructive = variant === 'destructive';\n\n const handleCancel = () => {\n onCancel?.();\n onOpenChange(false);\n };\n\n const handleConfirm = async () => {\n await onConfirm();\n if (!loading) onOpenChange(false);\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent hideClose>\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n {description && <DialogDescription>{description}</DialogDescription>}\n </DialogHeader>\n <DialogFooter>\n <button\n onClick={handleCancel}\n disabled={loading}\n className={twMerge(\n 'px-4 h-10 rounded-xl text-sm cursor-pointer',\n 'bg-white/[0.03] border border-white/10 text-foreground',\n 'hover:bg-white/[0.08] hover:border-white/20',\n 'disabled:opacity-40 disabled:pointer-events-none',\n 'transition-all duration-200'\n )}\n >\n {cancelLabel}\n </button>\n <button\n onClick={handleConfirm}\n disabled={loading}\n className={twMerge(\n 'inline-flex items-center gap-2 px-4 h-10 rounded-xl text-sm cursor-pointer',\n 'transition-all duration-200',\n 'disabled:opacity-40 disabled:pointer-events-none',\n isDestructive\n ? 'bg-red-500/10 text-red-400 border border-red-500/20 hover:bg-red-500/15 hover:border-red-500/30'\n : 'bg-gradient-to-r from-blue-600 to-indigo-600 text-white rounded-full shadow-[0_4px_20px_rgba(37,99,235,0.3)] hover:shadow-[0_6px_25px_rgba(37,99,235,0.4)]'\n )}\n >\n {loading && <Loader2 className=\"w-4 h-4 animate-spin\" />}\n {confirmLabel}\n </button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}","import React from 'react';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport { twMerge } from 'tailwind-merge';\nimport { X } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n Popover — Stealth Glass Design System\n @level L1 — Atom: Popover overlay panel (Radix)\n ═══════════════════════════════════════════════════════════════ */\n\nexport const Popover = PopoverPrimitive.Root;\nexport const PopoverTrigger = PopoverPrimitive.Trigger;\nexport const PopoverAnchor = PopoverPrimitive.Anchor;\n\nexport const PopoverContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> & {\n showClose?: boolean;\n }\n>(({ className, align = 'center', sideOffset = 8, showClose = false, children, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={twMerge(\n 'z-50 w-72 max-w-sm',\n 'bg-sg-elevated border border-white/5 rounded-xl backdrop-blur-xl shadow-2xl p-4',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]: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',\n 'data-[side=top]:slide-in-from-bottom-2',\n 'data-[side=left]:slide-in-from-right-2',\n 'data-[side=right]:slide-in-from-left-2',\n 'duration-200',\n className\n )}\n {...props}\n >\n {children}\n {showClose && (\n <PopoverPrimitive.Close\n className={twMerge(\n 'absolute right-2 top-2 p-1 rounded-lg cursor-pointer',\n 'text-sg-text-muted hover:text-white hover:bg-white/5 transition-colors'\n )}\n >\n <X className=\"w-3.5 h-3.5\" />\n </PopoverPrimitive.Close>\n )}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n));\n\nPopoverContent.displayName = 'PopoverContent';","import React from 'react';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport { twMerge } from 'tailwind-merge';\n\n/* ═══════════════════════════════════════════════════════════════\n Tooltip — Stealth Glass Design System\n @level L1 — Atom: Hover tooltip (Radix)\n \n Popover has been split to its own file: ./Popover.tsx\n Re-exports below maintain backward compatibility for\n `import { Popover } from './Tooltip'`.\n ═══════════════════════════════════════════════════════════════ */\n\n/* ─── Tooltip ─── */\n\nexport const TooltipProvider = ({ children, ...props }: TooltipPrimitive.TooltipProviderProps) => (\n <TooltipPrimitive.Provider delayDuration={300} {...props}>\n {children}\n </TooltipPrimitive.Provider>\n);\n\nexport const Tooltip = TooltipPrimitive.Root;\nexport const TooltipTrigger = TooltipPrimitive.Trigger;\n\nexport const TooltipContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 6, children, ...props }, ref) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={twMerge(\n 'z-50 overflow-hidden',\n 'bg-sg-highlight border border-white/10 rounded-lg px-3 py-1.5',\n 'text-xs text-foreground shadow-xl',\n 'animate-in fade-in-0 zoom-in-95 duration-150',\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',\n 'data-[side=top]:slide-in-from-bottom-2',\n 'data-[side=left]:slide-in-from-right-2',\n 'data-[side=right]:slide-in-from-left-2',\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"fill-sg-highlight\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n));\n\nTooltipContent.displayName = 'TooltipContent';\n\n/* ─── Popover re-exports (backward compat) ─── */\n\nexport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n PopoverAnchor,\n} from './Popover';","import React from 'react';\nimport { Drawer as DrawerPrimitive } from 'vaul';\nimport { twMerge } from 'tailwind-merge';\nimport { X } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n Drawer — Side / bottom slide-out panel (uses vaul)\n @level L3 — Organism: Slide-out side/bottom panel\n ═══════════════════════════════════════════════════════════════\n \n Usage:\n <Drawer>\n <DrawerTrigger asChild>\n <Button>Open Drawer</Button>\n </DrawerTrigger>\n <DrawerContent side=\"right\" size=\"md\">\n <DrawerHeader>\n <DrawerTitle>Create Function</DrawerTitle>\n <DrawerDescription>Fill in the details.</DrawerDescription>\n </DrawerHeader>\n <div className=\"p-6\">...form content...</div>\n <DrawerFooter>\n <Button>Save</Button>\n </DrawerFooter>\n </DrawerContent>\n </Drawer>\n ═══════════════════════════════════════════════════════════════ */\n\n/* ─── Root + Trigger + Close ─── */\n\nexport const DrawerTrigger = DrawerPrimitive.Trigger;\nexport const DrawerClose = DrawerPrimitive.Close;\n\n/* Re-export Root as a wrapper that accepts `direction` */\nexport type DrawerProps = React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Root> & {\n direction?: 'top' | 'bottom' | 'left' | 'right';\n};\n\nexport function Drawer({ direction, ...props }: DrawerProps) {\n return <DrawerPrimitive.Root direction={direction} {...props} />;\n}\n\n/* ─── DrawerContent ─── */\n\nconst sizeClasses = {\n sm: 'max-w-[320px]',\n md: 'max-w-[480px]',\n lg: 'max-w-[640px]',\n xl: 'max-w-[800px]',\n full: 'max-w-none w-screen',\n};\n\nexport interface DrawerContentProps extends React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Content> {\n side?: 'right' | 'bottom' | 'left';\n size?: keyof typeof sizeClasses;\n showHandle?: boolean;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function DrawerContent({\n side = 'right',\n size = 'md',\n showHandle,\n children,\n className,\n ...props\n}: DrawerContentProps) {\n const isBottom = side === 'bottom';\n const handle = showHandle ?? isBottom;\n\n return (\n <DrawerPrimitive.Portal>\n {/* Overlay */}\n <DrawerPrimitive.Overlay className=\"fixed inset-0 z-50 bg-black/60 backdrop-blur-sm\" />\n\n {/* Content */}\n <DrawerPrimitive.Content\n className={twMerge(\n 'fixed z-50 flex flex-col bg-card outline-none',\n // Side positioning\n side === 'right' && 'inset-y-0 right-0 border-l border-white/5 w-full',\n side === 'left' && 'inset-y-0 left-0 border-r border-white/5 w-full',\n isBottom && 'inset-x-0 bottom-0 border-t border-white/5 rounded-t-[2rem] max-h-[85vh]',\n // Width constraint for side drawers\n !isBottom && sizeClasses[size],\n className\n )}\n {...props}\n >\n {/* Bottom handle */}\n {handle && (\n <div className=\"flex justify-center pt-4 pb-2\">\n <div className=\"w-12 h-1.5 rounded-full bg-white/10\" />\n </div>\n )}\n\n {/* Close button for side drawers */}\n {!isBottom && (\n <DrawerPrimitive.Close className=\"absolute top-4 right-4 p-1.5 rounded-lg text-sg-text-muted hover:text-white hover:bg-white/5 transition-colors cursor-pointer z-10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500/50 focus-visible:shadow-[0_0_0_4px_rgba(59,130,246,0.15)]\">\n <X className=\"w-4 h-4\" />\n <span className=\"sr-only\">Close</span>\n </DrawerPrimitive.Close>\n )}\n\n {children}\n </DrawerPrimitive.Content>\n </DrawerPrimitive.Portal>\n );\n}\n\n/* ─── DrawerHeader ─── */\n\nexport interface DrawerHeaderProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function DrawerHeader({ children, className }: DrawerHeaderProps) {\n return (\n <div className={twMerge('p-6 pb-0', className)}>\n {children}\n </div>\n );\n}\n\n/* ─── DrawerTitle ─── */\n\nexport interface DrawerTitleProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function DrawerTitle({ children, className }: DrawerTitleProps) {\n return (\n <DrawerPrimitive.Title className={twMerge('text-lg text-foreground', className)}>\n {children}\n </DrawerPrimitive.Title>\n );\n}\n\n/* ─── DrawerDescription ─── */\n\nexport interface DrawerDescriptionProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function DrawerDescription({ children, className }: DrawerDescriptionProps) {\n return (\n <DrawerPrimitive.Description className={twMerge('text-sm text-muted-foreground mt-1', className)}>\n {children}\n </DrawerPrimitive.Description>\n );\n}\n\n/* ─── DrawerFooter ─── */\n\nexport interface DrawerFooterProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function DrawerFooter({ children, className }: DrawerFooterProps) {\n return (\n <div className={twMerge('p-6 pt-4 border-t border-white/5 mt-auto', className)}>\n {children}\n </div>\n );\n}","import React from 'react';\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\nimport { twMerge } from 'tailwind-merge';\nimport type { LucideIcon } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n Tabs — Stealth Glass Design System\n @level L3 — Organism: Tabbed navigation with 3 style variants (Radix)\n ═══════════════════════════════════════════════════════════════ */\n\n/* ─── Root ─── */\n\nexport const Tabs = TabsPrimitive.Root;\n\n/* ─── TabsList ─── */\n\nconst listVariants = {\n glass: 'bg-white/[0.02] border border-white/5 rounded-xl p-1',\n underline: 'border-b border-white/5 pb-0',\n pills: 'gap-2',\n};\n\nexport interface TabsListProps extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.List> {\n variant?: 'glass' | 'underline' | 'pills';\n}\n\nexport const TabsList = React.forwardRef<HTMLDivElement, TabsListProps>(\n ({ className, variant = 'glass', ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={twMerge(\n 'inline-flex items-center gap-1',\n 'overflow-x-auto scrollbar-none',\n listVariants[variant],\n className\n )}\n data-variant={variant}\n {...props}\n />\n )\n);\n\nTabsList.displayName = 'TabsList';\n\n/* ─── TabsTrigger ─── */\n\nconst triggerVariants = {\n glass: [\n 'px-4 py-2 rounded-lg text-sm text-muted-foreground',\n 'data-[state=active]:bg-white/[0.06] data-[state=active]:text-white data-[state=active]:shadow-sm',\n 'hover:text-white',\n ].join(' '),\n underline: [\n 'px-4 py-2.5 text-sm text-muted-foreground border-b-2 border-transparent -mb-px',\n 'data-[state=active]:border-blue-500 data-[state=active]:text-white',\n 'hover:text-white',\n ].join(' '),\n pills: [\n 'px-4 py-2 rounded-full text-sm text-muted-foreground border border-transparent',\n 'data-[state=active]:bg-blue-500/10 data-[state=active]:text-blue-400 data-[state=active]:border-blue-500/20',\n 'hover:text-white',\n ].join(' '),\n};\n\nexport interface TabsTriggerProps extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger> {\n icon?: LucideIcon;\n}\n\nexport const TabsTrigger = React.forwardRef<HTMLButtonElement, TabsTriggerProps>(\n ({ className, icon: Icon, children, ...props }, ref) => {\n // Read variant from parent TabsList's data attribute (fallback to glass)\n return (\n <TabsPrimitive.Trigger\n ref={ref}\n className={twMerge(\n 'inline-flex items-center gap-2 whitespace-nowrap cursor-pointer',\n 'transition-all duration-200',\n 'disabled:opacity-40 disabled:cursor-not-allowed',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500/50 focus-visible:shadow-[0_0_0_4px_rgba(59,130,246,0.15)]',\n /* Default to glass styling; parent variant overrides via group data attribute */\n triggerVariants.glass,\n className\n )}\n {...props}\n >\n {Icon && <Icon className=\"w-4 h-4\" />}\n {children}\n </TabsPrimitive.Trigger>\n );\n }\n);\n\nTabsTrigger.displayName = 'TabsTrigger';\n\n/* Variant-aware trigger helper — apply variant explicitly */\nexport function createTriggerClass(variant: 'glass' | 'underline' | 'pills') {\n return triggerVariants[variant];\n}\n\n/* ─── TabsContent ─── */\n\nexport const TabsContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={twMerge(\n 'mt-4',\n 'focus-visible:outline-none',\n 'data-[state=active]:animate-in data-[state=active]:fade-in-0 data-[state=active]:slide-in-from-bottom-1',\n 'duration-200',\n className\n )}\n {...props}\n />\n));\n\nTabsContent.displayName = 'TabsContent';","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { ChevronRight } from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n Breadcrumb — Stealth Glass Design System\n @level L3 — Organism: Navigation breadcrumb trail\n ═══════════════════════════════════════════════════════════════ */\n\nexport function Breadcrumb({ className, ...props }: React.HTMLAttributes<HTMLElement>) {\n return <nav aria-label=\"Breadcrumb\" className={className} {...props} />;\n}\n\nexport function BreadcrumbList({ className, ...props }: React.HTMLAttributes<HTMLOListElement>) {\n return (\n <ol\n className={twMerge('flex items-center gap-1.5 text-sm flex-wrap', className)}\n {...props}\n />\n );\n}\n\nexport function BreadcrumbItem({ className, ...props }: React.HTMLAttributes<HTMLLIElement>) {\n return (\n <li className={twMerge('inline-flex items-center gap-1.5', className)} {...props} />\n );\n}\n\nexport interface BreadcrumbLinkProps {\n href?: string;\n onClick?: () => void;\n icon?: LucideIcon;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function BreadcrumbLink({ href, onClick, icon: Icon, children, className }: BreadcrumbLinkProps) {\n const classes = twMerge(\n 'inline-flex items-center gap-1.5 text-sg-text-muted hover:text-white transition-colors cursor-pointer',\n className\n );\n\n if (href) {\n return (\n <a href={href} className={classes}>\n {Icon && <Icon className=\"w-3.5 h-3.5\" />}\n {children}\n </a>\n );\n }\n\n if (onClick) {\n return (\n <button onClick={onClick} className={classes}>\n {Icon && <Icon className=\"w-3.5 h-3.5\" />}\n {children}\n </button>\n );\n }\n\n return (\n <span className={classes}>\n {Icon && <Icon className=\"w-3.5 h-3.5\" />}\n {children}\n </span>\n );\n}\n\nexport function BreadcrumbPage({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) {\n return (\n <span\n role=\"link\"\n aria-current=\"page\"\n className={twMerge('text-foreground', className)}\n {...props}\n />\n );\n}\n\nexport function BreadcrumbSeparator({ className }: { className?: string }) {\n return (\n <li role=\"presentation\" aria-hidden=\"true\" className={twMerge('', className)}>\n <ChevronRight className=\"w-3.5 h-3.5 text-sg-text-muted/50\" />\n </li>\n );\n}\n\n/* ─── Convenience: BreadcrumbTrail (auto-renders from array) ─── */\n\nexport interface BreadcrumbTrailItem {\n label: string;\n href?: string;\n onClick?: () => void;\n icon?: LucideIcon;\n}\n\nexport function BreadcrumbTrail({\n items,\n className,\n}: {\n items: BreadcrumbTrailItem[];\n className?: string;\n}) {\n return (\n <Breadcrumb className={className}>\n <BreadcrumbList>\n {items.flatMap((item, i) => {\n const isLast = i === items.length - 1;\n const elements = [\n <BreadcrumbItem key={`item-${i}`}>\n {isLast ? (\n <BreadcrumbPage>{item.label}</BreadcrumbPage>\n ) : (\n <BreadcrumbLink href={item.href} onClick={item.onClick} icon={item.icon}>\n {item.label}\n </BreadcrumbLink>\n )}\n </BreadcrumbItem>,\n ];\n if (!isLast) {\n elements.push(<BreadcrumbSeparator key={`sep-${i}`} />);\n }\n return elements;\n })}\n </BreadcrumbList>\n </Breadcrumb>\n );\n}","import React, { useState, useEffect } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n Pagination — Stealth Glass Design System\n @level L3 — Organism: Page navigation with size selector\n ═══════════════════════════════════════════════════════════════ */\n\nexport interface PaginationProps {\n currentPage: number;\n totalPages: number;\n totalItems?: number;\n pageSize?: number;\n onPageChange: (page: number) => void;\n onPageSizeChange?: (size: number) => void;\n pageSizeOptions?: number[];\n showInfo?: boolean;\n showPageSize?: boolean;\n className?: string;\n}\n\nfunction getPageNumbers(current: number, total: number): (number | 'ellipsis')[] {\n if (total <= 7) return Array.from({ length: total }, (_, i) => i + 1);\n\n const pages: (number | 'ellipsis')[] = [];\n\n // Always show first page\n pages.push(1);\n\n if (current <= 3) {\n pages.push(2, 3, 4);\n pages.push('ellipsis');\n } else if (current >= total - 2) {\n pages.push('ellipsis');\n pages.push(total - 3, total - 2, total - 1);\n } else {\n pages.push('ellipsis');\n pages.push(current - 1, current, current + 1);\n pages.push('ellipsis');\n }\n\n // Always show last page\n pages.push(total);\n\n return pages;\n}\n\nfunction getPageNumbersMobile(current: number, total: number): (number | 'ellipsis')[] {\n if (total <= 3) return Array.from({ length: total }, (_, i) => i + 1);\n\n // Show: 1, 2, ..., last\n return [1, 2, 'ellipsis', total];\n}\n\nconst pageButton = [\n 'w-9 h-9 rounded-lg text-sm inline-flex items-center justify-center',\n 'transition-all duration-200 cursor-pointer',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500/50',\n].join(' ');\n\nconst pageButtonDefault = 'bg-white/[0.03] border border-white/5 text-muted-foreground hover:bg-white/[0.06] hover:text-white';\nconst pageButtonActive = 'bg-blue-500/10 border-blue-500/20 text-blue-400';\nconst pageButtonDisabled = 'opacity-40 pointer-events-none';\n\nexport function Pagination({\n currentPage,\n totalPages,\n totalItems,\n pageSize,\n onPageChange,\n onPageSizeChange,\n pageSizeOptions = [10, 25, 50],\n showInfo = true,\n showPageSize = true,\n className,\n}: PaginationProps) {\n const [isMobile, setIsMobile] = useState(false);\n\n useEffect(() => {\n const checkMobile = () => setIsMobile(window.innerWidth < 640);\n checkMobile();\n window.addEventListener('resize', checkMobile);\n return () => window.removeEventListener('resize', checkMobile);\n }, []);\n\n if (totalPages <= 1 && !showInfo) return null;\n\n const pages = isMobile ? getPageNumbersMobile(currentPage, totalPages) : getPageNumbers(currentPage, totalPages);\n const startItem = pageSize ? (currentPage - 1) * pageSize + 1 : undefined;\n const endItem = pageSize && totalItems ? Math.min(currentPage * pageSize, totalItems) : undefined;\n\n return (\n <nav\n aria-label=\"Pagination\"\n className={twMerge(\n 'flex flex-col sm:flex-row items-center justify-between gap-4',\n className\n )}\n >\n {/* Info */}\n {showInfo && totalItems !== undefined && startItem !== undefined && endItem !== undefined && (\n <span className=\"hidden sm:block text-[10px] text-sg-text-muted uppercase tracking-wider font-bold order-1 sm:order-none\">\n Showing {startItem}–{endItem} of {totalItems}\n </span>\n )}\n\n {/* Page size selector */}\n {showPageSize && onPageSizeChange && (\n <div className=\"hidden sm:flex items-center gap-1 order-3 sm:order-none\">\n {pageSizeOptions.map((size) => (\n <button\n key={size}\n onClick={() => onPageSizeChange(size)}\n className={twMerge(\n 'px-2.5 py-1 rounded-lg text-[10px] font-bold transition-all duration-200 cursor-pointer',\n size === pageSize\n ? 'bg-blue-500/10 text-blue-400 border border-blue-500/20'\n : 'text-sg-text-muted hover:text-white hover:bg-white/5 border border-transparent'\n )}\n >\n {size}\n </button>\n ))}\n </div>\n )}\n\n {/* Page buttons */}\n {totalPages > 1 && (\n <div className=\"flex items-center gap-1 order-2 sm:order-none\">\n {/* Prev */}\n <button\n onClick={() => onPageChange(currentPage - 1)}\n disabled={currentPage <= 1}\n className={twMerge(pageButton, pageButtonDefault, currentPage <= 1 && pageButtonDisabled)}\n aria-label=\"Previous page\"\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </button>\n\n {pages.map((page, i) =>\n page === 'ellipsis' ? (\n <span key={`e-${i}`} className=\"w-9 h-9 inline-flex items-center justify-center text-sg-text-muted text-sm\">\n ...\n </span>\n ) : (\n <button\n key={page}\n onClick={() => onPageChange(page)}\n className={twMerge(\n pageButton,\n page === currentPage ? pageButtonActive : pageButtonDefault\n )}\n aria-current={page === currentPage ? 'page' : undefined}\n >\n {page}\n </button>\n )\n )}\n\n {/* Next */}\n <button\n onClick={() => onPageChange(currentPage + 1)}\n disabled={currentPage >= totalPages}\n className={twMerge(pageButton, pageButtonDefault, currentPage >= totalPages && pageButtonDisabled)}\n aria-label=\"Next page\"\n >\n <ChevronRight className=\"w-4 h-4\" />\n </button>\n </div>\n )}\n </nav>\n );\n}","import React from 'react';\nimport * as AccordionPrimitive from '@radix-ui/react-accordion';\nimport { twMerge } from 'tailwind-merge';\nimport { ChevronDown } from 'lucide-react';\nimport { SG_FOCUS_RING } from './utils/styles';\n\n/* ═══════════════════════════════════════════════════════════════\n Accordion — Expandable sections (Radix)\n @level L3 — Organism: Collapsible content sections\n ═══════════════════════════════════════════════════════════════\n \n Usage:\n <Accordion type=\"single\" collapsible>\n <AccordionItem value=\"general\">\n <AccordionTrigger>General Settings</AccordionTrigger>\n <AccordionContent>...content...</AccordionContent>\n </AccordionItem>\n </Accordion>\n \n <Accordion variant=\"bordered\" type=\"multiple\">\n ...\n </Accordion>\n ═══════════════════════════════════════════════════════════════ */\n\ntype AccordionVariant = 'default' | 'bordered' | 'ghost';\n\n/* ─── Context to pass variant ─── */\n\nconst VariantContext = React.createContext<AccordionVariant>('default');\n\n/* ─── Accordion ─── */\n\nexport type AccordionProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Root> & {\n variant?: AccordionVariant;\n className?: string;\n};\n\nexport function Accordion({\n variant = 'default',\n className,\n ...props\n}: AccordionProps) {\n return (\n <VariantContext.Provider value={variant}>\n <AccordionPrimitive.Root\n className={twMerge('w-full', className)}\n {...(props as any)}\n />\n </VariantContext.Provider>\n );\n}\n\n/* ─── AccordionItem ─── */\n\nconst itemVariants: Record<AccordionVariant, string> = {\n default: 'border-b border-white/5',\n bordered: 'rounded-xl bg-white/[0.02] border border-white/5 mb-2 px-4',\n ghost: 'border-b border-white/[0.03]',\n};\n\nexport interface AccordionItemProps extends React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item> {\n className?: string;\n}\n\nexport function AccordionItem({ className, ...props }: AccordionItemProps) {\n const variant = React.useContext(VariantContext);\n\n return (\n <AccordionPrimitive.Item\n className={twMerge(itemVariants[variant], className)}\n {...props}\n />\n );\n}\n\n/* ─── AccordionTrigger ─── */\n\nconst triggerVariants: Record<AccordionVariant, string> = {\n default: 'py-4 text-sm text-foreground hover:text-white',\n bordered: 'py-4 text-sm text-foreground',\n ghost: 'py-3 text-sm text-muted-foreground hover:text-white',\n};\n\nexport interface AccordionTriggerProps extends React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger> {\n className?: string;\n children: React.ReactNode;\n}\n\nexport function AccordionTrigger({ className, children, ...props }: AccordionTriggerProps) {\n const variant = React.useContext(VariantContext);\n\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n className={twMerge(\n 'flex flex-1 items-center justify-between transition-all cursor-pointer [&[data-state=open]>svg]:rotate-180',\n SG_FOCUS_RING,\n triggerVariants[variant],\n className\n )}\n {...props}\n >\n {children}\n <ChevronDown className=\"w-4 h-4 text-sg-text-muted shrink-0 transition-transform duration-200\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n );\n}\n\n/* ─── AccordionContent ─── */\n\nexport interface AccordionContentProps extends React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content> {\n className?: string;\n children: React.ReactNode;\n}\n\nexport function AccordionContent({ className, children, ...props }: AccordionContentProps) {\n return (\n <AccordionPrimitive.Content\n className={twMerge(\n 'overflow-hidden text-sm text-muted-foreground transition-all',\n 'data-[state=open]:animate-accordion-down data-[state=closed]:animate-accordion-up',\n className\n )}\n {...props}\n >\n <div className=\"pb-4\">{children}</div>\n </AccordionPrimitive.Content>\n );\n}","import React from 'react';\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';\nimport { twMerge } from 'tailwind-merge';\n\n/* ═══════════════════════════════════════════════════════════════\n ScrollArea — Custom-scrollbar container\n @level L1 — Atom: Custom scroll container (Radix)\n ═══════════════════════════════════════════════════════════════\n \n Usage:\n <ScrollArea className=\"h-[300px]\">\n <div>...long content...</div>\n </ScrollArea>\n \n <ScrollArea orientation=\"horizontal\">\n <div className=\"flex gap-4\">...</div>\n </ScrollArea>\n ═══════════════════════════════════════════════════════════════ */\n\nexport interface ScrollAreaProps {\n orientation?: 'vertical' | 'horizontal' | 'both';\n className?: string;\n children: React.ReactNode;\n}\n\nexport function ScrollArea({\n orientation = 'vertical',\n className,\n children,\n}: ScrollAreaProps) {\n return (\n <ScrollAreaPrimitive.Root\n className={twMerge('relative overflow-hidden', className)}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n\n {(orientation === 'vertical' || orientation === 'both') && (\n <ScrollBar orientation=\"vertical\" />\n )}\n {(orientation === 'horizontal' || orientation === 'both') && (\n <ScrollBar orientation=\"horizontal\" />\n )}\n\n <ScrollAreaPrimitive.Corner className=\"bg-transparent\" />\n </ScrollAreaPrimitive.Root>\n );\n}\n\n/* ─── ScrollBar ─── */\n\nexport interface ScrollBarProps {\n orientation?: 'vertical' | 'horizontal';\n className?: string;\n}\n\nexport function ScrollBar({\n orientation = 'vertical',\n className,\n}: ScrollBarProps) {\n return (\n <ScrollAreaPrimitive.Scrollbar\n orientation={orientation}\n className={twMerge(\n 'flex touch-none select-none transition-colors bg-transparent p-px',\n orientation === 'vertical' && 'w-2 border-l border-l-transparent',\n orientation === 'horizontal' && 'h-2 flex-col border-t border-t-transparent',\n className\n )}\n >\n <ScrollAreaPrimitive.Thumb\n className={twMerge(\n 'relative rounded-full bg-white/10 hover:bg-white/20 transition-colors',\n orientation === 'vertical' && 'flex-1'\n )}\n />\n </ScrollAreaPrimitive.Scrollbar>\n );\n}\n","import React from 'react';\nimport * as AvatarPrimitive from '@radix-ui/react-avatar';\nimport { twMerge } from 'tailwind-merge';\n\n/* ═══════════════════════════════════════════════════════════════\n Avatar + AvatarGroup — Stealth Glass Design System\n @level L1 — Atom: User avatar with status (Radix)\n ═══════════════════════════════════════════════════════════════ */\n\nconst sizeMap = {\n xs: { container: 'w-6 h-6', text: 'text-[9px]', dot: 'w-2 h-2 -bottom-0 -right-0 border' },\n sm: { container: 'w-8 h-8', text: 'text-xs', dot: 'w-2.5 h-2.5 -bottom-0.5 -right-0.5 border-[1.5px]' },\n md: { container: 'w-10 h-10', text: 'text-sm', dot: 'w-3 h-3 -bottom-0.5 -right-0.5 border-2' },\n lg: { container: 'w-12 h-12', text: 'text-base', dot: 'w-3.5 h-3.5 -bottom-0.5 -right-0.5 border-2' },\n xl: { container: 'w-16 h-16', text: 'text-lg', dot: 'w-4 h-4 -bottom-0.5 -right-0.5 border-2' },\n};\n\nconst statusColors = {\n online: 'bg-emerald-400 shadow-[0_0_8px_rgba(52,211,153,0.6)]',\n offline: 'bg-sg-text-muted',\n away: 'bg-amber-400 shadow-[0_0_8px_rgba(245,158,11,0.4)]',\n busy: 'bg-red-400 shadow-[0_0_8px_rgba(239,68,68,0.4)]',\n};\n\nfunction getInitials(name: string): string {\n return name\n .split(' ')\n .map((n) => n[0])\n .filter(Boolean)\n .slice(0, 2)\n .join('')\n .toUpperCase();\n}\n\nexport interface AvatarProps {\n src?: string;\n alt?: string;\n name?: string;\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n status?: 'online' | 'offline' | 'away' | 'busy';\n shape?: 'circle' | 'rounded';\n className?: string;\n}\n\nexport function Avatar({\n src,\n alt,\n name = '',\n size = 'md',\n status,\n shape = 'circle',\n className,\n}: AvatarProps) {\n const s = sizeMap[size];\n\n return (\n <div className={twMerge('relative inline-flex shrink-0', className)}>\n <AvatarPrimitive.Root\n className={twMerge(\n 'inline-flex items-center justify-center overflow-hidden',\n s.container,\n shape === 'circle' ? 'rounded-full' : 'rounded-xl'\n )}\n >\n <AvatarPrimitive.Image\n src={src}\n alt={alt || name}\n className=\"w-full h-full object-cover\"\n />\n <AvatarPrimitive.Fallback\n delayMs={0}\n className={twMerge(\n 'flex items-center justify-center w-full h-full',\n 'bg-gradient-to-br from-blue-500 via-indigo-500 to-purple-600',\n 'text-white font-bold select-none',\n s.text\n )}\n >\n {getInitials(name) || '?'}\n </AvatarPrimitive.Fallback>\n </AvatarPrimitive.Root>\n\n {status && (\n <span\n className={twMerge(\n 'absolute rounded-full border-background',\n s.dot,\n statusColors[status],\n status === 'online' ? 'animate-pulse-subtle' : ''\n )}\n />\n )}\n </div>\n );\n}\n\n/* ─── AvatarGroup ─── */\n\nexport interface AvatarGroupProps {\n children: React.ReactNode;\n max?: number;\n size?: AvatarProps['size'];\n className?: string;\n}\n\nexport function AvatarGroup({ children, max, size = 'md', className }: AvatarGroupProps) {\n const items = React.Children.toArray(children);\n const visible = max ? items.slice(0, max) : items;\n const remaining = max ? items.length - max : 0;\n const s = sizeMap[size];\n\n return (\n <div className={twMerge('flex -space-x-2', className)}>\n {visible.map((child, i) => (\n <div\n key={i}\n className=\"ring-2 ring-background rounded-full\"\n style={{ zIndex: visible.length - i }}\n >\n {React.isValidElement<AvatarProps>(child)\n ? React.cloneElement(child, { size })\n : child}\n </div>\n ))}\n {remaining > 0 && (\n <div\n className={twMerge(\n 'inline-flex items-center justify-center rounded-full ring-2 ring-background',\n 'bg-sg-highlight text-muted-foreground font-bold',\n s.container,\n s.text\n )}\n style={{ zIndex: 0 }}\n >\n +{remaining}\n </div>\n )}\n </div>\n );\n}","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { TrendingUp, TrendingDown, Minus } from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n StatCard + StatGrid — Stealth Glass Design System\n @level L2 — Molecule: Metric display card with trend + icon\n ═══════════════════════════════════════════════════════════════ */\n\nconst statusColorMap = {\n success: 'text-emerald-400',\n warning: 'text-amber-400',\n danger: 'text-red-400',\n neutral: 'text-foreground',\n};\n\nexport interface StatCardProps {\n label: string;\n value: string | number;\n unit?: string;\n trend?: {\n value: number;\n direction: 'up' | 'down' | 'flat';\n };\n icon?: LucideIcon;\n status?: 'success' | 'warning' | 'danger' | 'neutral';\n footer?: React.ReactNode;\n className?: string;\n}\n\nexport function StatCard({\n label,\n value,\n unit,\n trend,\n icon: Icon,\n status,\n footer,\n className,\n}: StatCardProps) {\n const TrendIcon = trend\n ? trend.direction === 'up'\n ? TrendingUp\n : trend.direction === 'down'\n ? TrendingDown\n : Minus\n : null;\n\n const trendColor = trend\n ? trend.direction === 'up'\n ? 'text-emerald-400'\n : trend.direction === 'down'\n ? 'text-red-400'\n : 'text-sg-text-muted'\n : '';\n\n const valueColor = status ? statusColorMap[status] : 'text-foreground';\n\n return (\n <div\n role=\"region\"\n aria-label={label}\n className={twMerge(\n 'bg-background border border-white/5 rounded-[2rem] p-6',\n 'shadow-[inset_0_0_0_1px_rgba(255,255,255,0.02)]',\n 'hover:border-white/10 hover:shadow-sg-tile-inset-hover hover:bg-sg-elevated',\n 'transition-all duration-300',\n className\n )}\n >\n <div className=\"flex items-start justify-between mb-3\">\n <span className=\"text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted\">\n {label}\n </span>\n {Icon && (\n <div className=\"rounded-xl bg-white/[0.03] p-2\">\n <Icon className=\"w-4 h-4 text-sg-text-muted\" />\n </div>\n )}\n </div>\n\n <div className=\"flex items-baseline gap-1\">\n <span className={twMerge('font-mono text-3xl tracking-tight', valueColor)}>\n {value}\n </span>\n {unit && (\n <span className=\"text-sm text-sg-text-muted\">{unit}</span>\n )}\n </div>\n\n {trend && TrendIcon && (\n <div className={twMerge('flex items-center gap-1.5 mt-2', trendColor)}>\n <TrendIcon className=\"w-3.5 h-3.5\" />\n <span className=\"text-xs font-bold\">\n {trend.direction !== 'flat' && (trend.value > 0 ? '+' : '')}\n {trend.value}%\n </span>\n </div>\n )}\n\n {footer && <div className=\"mt-3 pt-3 border-t border-white/5\">{footer}</div>}\n </div>\n );\n}\n\n/* ─── StatGrid ─── */\n\nconst colsMap = {\n 2: 'lg:grid-cols-2',\n 3: 'lg:grid-cols-3',\n 4: 'lg:grid-cols-4',\n};\n\nexport interface StatGridProps {\n cols?: 2 | 3 | 4;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function StatGrid({ cols = 4, children, className }: StatGridProps) {\n return (\n <div\n className={twMerge(\n 'grid grid-cols-1 sm:grid-cols-2 gap-4',\n colsMap[cols],\n className\n )}\n >\n {children}\n </div>\n );\n}","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { Info, CheckCircle2, AlertTriangle, AlertOctagon, X } from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n Alert — Stealth Glass Design System\n @level L2 — Molecule: Contextual alert/message box with icon and actions\n ═══════════════════════════════════════════════════════════════ */\n\nconst variantStyles = {\n info: { bg: 'bg-blue-500/5', border: 'border-blue-500/20', icon: 'text-blue-400', defaultIcon: Info, shadow: '' },\n success: { bg: 'bg-emerald-500/5', border: 'border-emerald-500/20', icon: 'text-emerald-400', defaultIcon: CheckCircle2, shadow: '' },\n warning: { bg: 'bg-amber-500/5', border: 'border-amber-500/20', icon: 'text-amber-400', defaultIcon: AlertTriangle, shadow: '' },\n error: { bg: 'bg-red-500/20', border: 'border-2 border-red-500/50', icon: 'text-red-400', defaultIcon: AlertOctagon, shadow: 'shadow-lg shadow-red-500/20' },\n neutral: { bg: 'bg-white/[0.02]', border: 'border-white/5', icon: 'text-sg-text-muted', defaultIcon: Info, shadow: '' },\n};\n\nexport interface AlertProps {\n variant?: 'info' | 'success' | 'warning' | 'error' | 'neutral';\n dismissable?: boolean;\n onDismiss?: () => void;\n icon?: LucideIcon;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function Alert({\n variant = 'info',\n dismissable = false,\n onDismiss,\n icon,\n children,\n className,\n}: AlertProps) {\n const v = variantStyles[variant];\n const IconComp = icon || v.defaultIcon;\n\n return (\n <div\n role=\"alert\"\n className={twMerge(\n 'rounded-2xl border p-4 flex items-start gap-3',\n v.bg,\n v.border,\n v.shadow,\n className\n )}\n >\n <IconComp className={twMerge('w-5 h-5 shrink-0 mt-0.5', v.icon)} />\n <div className=\"flex-1 min-w-0\">{children}</div>\n {dismissable && (\n <button\n onClick={onDismiss}\n className=\"shrink-0 p-1 rounded-lg text-sg-text-muted hover:text-white hover:bg-white/5 transition-colors cursor-pointer\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n );\n}\n\nexport function AlertTitle({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>) {\n return <h5 className={twMerge('text-sm text-foreground', className)} {...props} />;\n}\n\nexport function AlertDescription({ className, ...props }: React.HTMLAttributes<HTMLParagraphElement>) {\n return <p className={twMerge('text-sm text-muted-foreground mt-1', className)} {...props} />;\n}\n\nexport function AlertActions({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={twMerge('flex items-center gap-2 mt-3', className)} {...props} />;\n}","import React from 'react';\nimport * as ProgressPrimitive from '@radix-ui/react-progress';\nimport { twMerge } from 'tailwind-merge';\n\n/* ═══════════════════════════════════════════════════════════════\n Progress + UsageMeter — Stealth Glass Design System\n @level L1 — Atom: Progress bars and usage meters (Radix)\n ═══════════════════════════════════════════════════════════════ */\n\nconst colorMap = {\n blue: 'bg-blue-500 shadow-[0_0_8px_rgba(59,130,246,0.3)]',\n indigo: 'bg-indigo-500 shadow-[0_0_8px_rgba(99,102,241,0.3)]',\n success: 'bg-emerald-500 shadow-[0_0_8px_rgba(16,185,129,0.3)]',\n warning: 'bg-amber-500 shadow-[0_0_8px_rgba(245,158,11,0.3)]',\n danger: 'bg-red-500 shadow-[0_0_8px_rgba(239,68,68,0.3)]',\n};\n\nconst heightMap = {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n};\n\nfunction getAutoColor(pct: number): string {\n if (pct >= 80) return colorMap.danger;\n if (pct >= 50) return colorMap.warning;\n return colorMap.blue;\n}\n\nexport interface ProgressProps {\n value: number;\n max?: number;\n size?: 'sm' | 'md' | 'lg';\n color?: 'blue' | 'indigo' | 'success' | 'warning' | 'danger' | 'auto';\n animated?: boolean;\n className?: string;\n}\n\nexport function Progress({\n value,\n max = 100,\n size = 'md',\n color = 'blue',\n animated = false,\n className,\n}: ProgressProps) {\n const pct = Math.min(100, Math.max(0, (value / max) * 100));\n const fillColor = color === 'auto' ? getAutoColor(pct) : colorMap[color];\n\n return (\n <ProgressPrimitive.Root\n value={value}\n max={max}\n className={twMerge(\n 'relative w-full overflow-hidden rounded-full bg-white/[0.04]',\n heightMap[size],\n className\n )}\n >\n <ProgressPrimitive.Indicator\n className={twMerge(\n 'h-full rounded-full transition-all duration-500 ease-out',\n fillColor,\n animated ? 'relative overflow-hidden' : ''\n )}\n style={{ width: `${pct}%` }}\n >\n {animated && (\n <div\n className=\"absolute inset-0 bg-gradient-to-r from-transparent via-white/20 to-transparent\"\n style={{\n animation: 'shimmer 2s ease-in-out infinite',\n }}\n />\n )}\n </ProgressPrimitive.Indicator>\n </ProgressPrimitive.Root>\n );\n}\n\n/* ─── UsageMeter ─── */\n\nexport interface UsageMeterProps {\n label: string;\n current: number;\n max: number;\n unit?: string;\n showPercentage?: boolean;\n size?: ProgressProps['size'];\n className?: string;\n}\n\nexport function UsageMeter({\n label,\n current,\n max,\n unit = '',\n showPercentage = true,\n size = 'md',\n className,\n}: UsageMeterProps) {\n const pct = max > 0 ? Math.round((current / max) * 100) : 0;\n\n return (\n <div className={twMerge('w-full', className)}>\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted\">\n {label}\n </span>\n <span className=\"text-xs font-mono text-muted-foreground\">\n {current} / {max} {unit}\n {showPercentage && (\n <span className=\"text-sg-text-muted ml-1.5\">({pct}%)</span>\n )}\n </span>\n </div>\n <Progress value={current} max={max} color=\"auto\" size={size} />\n </div>\n );\n}","/* ═══════════════════════════════════════════════════════════════\n Shared clipboard utility — Stealth Glass Design System\n ═══════════════════════════════════════════════════════════════ */\n\n/**\n * Copy text to clipboard with fallback for older browsers.\n * @internal Shared utility — not part of public API.\n */\nexport async function copyText(text: string): Promise<void> {\n try {\n await navigator.clipboard.writeText(text);\n } catch {\n const ta = document.createElement('textarea');\n ta.value = text;\n ta.style.position = 'fixed';\n ta.style.opacity = '0';\n document.body.appendChild(ta);\n ta.select();\n document.execCommand('copy');\n document.body.removeChild(ta);\n }\n}\n","import React, { useState, useCallback } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { Copy, Check } from 'lucide-react';\nimport { copyText } from './utils/clipboard';\n\n/* ═══════════════════════════════════════════════════════════════\n CopyButton + CopyField — Stealth Glass Design System\n @level L2 — Molecule: Copy-to-clipboard button + field\n ═══════════════════════════════════════════════════════════════ */\n\n/* ─── CopyButton ─── */\n\nexport interface CopyButtonProps {\n text: string;\n label?: string;\n variant?: 'inline' | 'button';\n size?: 'sm' | 'md';\n className?: string;\n}\n\nexport function CopyButton({\n text,\n label,\n variant = 'inline',\n size = 'md',\n className,\n}: CopyButtonProps) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(async () => {\n await copyText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }, [text]);\n\n const isInline = variant === 'inline';\n const isSm = size === 'sm';\n\n return (\n <button\n onClick={handleCopy}\n className={twMerge(\n 'inline-flex items-center gap-1.5 transition-all duration-200 cursor-pointer',\n isInline\n ? [\n 'font-mono rounded-lg border',\n isSm ? 'px-2 py-1 text-[10px]' : 'px-3 py-1.5 text-xs',\n copied\n ? 'bg-emerald-500/10 text-emerald-400 border-emerald-500/20'\n : 'bg-white/[0.03] text-muted-foreground border-white/5 hover:bg-white/[0.06] hover:text-white hover:border-white/10',\n ].join(' ')\n : [\n 'rounded-xl border',\n isSm ? 'px-3 py-1.5 text-xs' : 'px-4 py-2 text-sm',\n copied\n ? 'bg-emerald-500/10 text-emerald-400 border-emerald-500/20'\n : 'bg-white/[0.03] text-foreground border-white/10 hover:bg-white/[0.08] hover:border-white/20',\n ].join(' '),\n className\n )}\n >\n {copied ? <Check className={isSm ? 'w-3 h-3' : 'w-3.5 h-3.5'} /> : <Copy className={isSm ? 'w-3 h-3' : 'w-3.5 h-3.5'} />}\n {copied ? 'Copied!' : label || text}\n </button>\n );\n}\n\n/* ─── CopyField ─── */\n\nexport interface CopyFieldProps {\n label?: string;\n value: string;\n mono?: boolean;\n masked?: boolean;\n className?: string;\n}\n\nexport function CopyField({\n label,\n value,\n mono = true,\n masked = false,\n className,\n}: CopyFieldProps) {\n const [copied, setCopied] = useState(false);\n const [revealed, setRevealed] = useState(false);\n\n const handleCopy = useCallback(async () => {\n await copyText(value);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }, [value]);\n\n const displayValue = masked && !revealed ? '•'.repeat(Math.min(value.length, 24)) : value;\n\n return (\n <div className={twMerge('w-full', className)}>\n {label && (\n <label className=\"block text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted mb-1.5\">\n {label}\n </label>\n )}\n <div\n className=\"flex items-center justify-between rounded-xl bg-white/[0.02] border border-white/5 pl-4 pr-2 py-2 gap-3 group hover:border-white/10 transition-all\"\n onMouseEnter={() => masked && setRevealed(true)}\n onMouseLeave={() => masked && setRevealed(false)}\n >\n <span\n className={twMerge(\n 'text-sm text-foreground truncate flex-1 select-all',\n mono && 'font-mono',\n masked && !revealed && 'tracking-wider text-sg-text-muted'\n )}\n >\n {displayValue}\n </span>\n <button\n onClick={handleCopy}\n className={twMerge(\n 'shrink-0 p-1.5 rounded-lg transition-all duration-200 cursor-pointer',\n copied\n ? 'text-emerald-400'\n : 'text-sg-text-muted hover:text-white hover:bg-white/5'\n )}\n aria-label=\"Copy to clipboard\"\n >\n {copied ? <Check className=\"w-4 h-4\" /> : <Copy className=\"w-4 h-4\" />}\n </button>\n </div>\n </div>\n );\n}","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport type { LucideIcon } from 'lucide-react';\nimport { CopyButton } from './CopyToClipboard';\n\n/* ═══════════════════════════════════════════════════════════════\n DescriptionList — Key-value pair display\n @level L2 — Molecule: Key-value display with optional copy\n ═══════════════════════════════════════════════════════════════\n \n Usage:\n <DescriptionList variant=\"inline\">\n <DescriptionItem label=\"Runtime\" value=\"Node.js 20\" />\n <DescriptionItem label=\"Region\" value=\"eu-west-1\" mono />\n <DescriptionItem label=\"Function ID\" value=\"fn_abc123\" copyable />\n </DescriptionList>\n ═══════════════════════════════════════════════════════════════ */\n\n/* ─── DescriptionList ─── */\n\nexport interface DescriptionListProps {\n variant?: 'stacked' | 'inline' | 'grid';\n dividers?: boolean;\n className?: string;\n children: React.ReactNode;\n}\n\nexport function DescriptionList({\n variant = 'stacked',\n dividers = true,\n className,\n children,\n}: DescriptionListProps) {\n const containerClass = twMerge(\n variant === 'grid'\n ? 'grid grid-cols-1 md:grid-cols-2 gap-0'\n : 'flex flex-col',\n className\n );\n\n return (\n <dl className={containerClass}>\n {React.Children.map(children, (child, i) => {\n if (React.isValidElement(child)) {\n const isLast = i === React.Children.count(children) - 1;\n return React.cloneElement(child as React.ReactElement<any>, {\n _variant: variant,\n _divider: dividers && !isLast,\n });\n }\n return child;\n })}\n </dl>\n );\n}\n\n/* ─── DescriptionItem ─── */\n\nexport interface DescriptionItemProps {\n label: string;\n value: React.ReactNode;\n mono?: boolean;\n copyable?: boolean;\n icon?: LucideIcon;\n actions?: React.ReactNode;\n className?: string;\n /** @internal — injected by DescriptionList */\n _variant?: 'stacked' | 'inline' | 'grid';\n /** @internal — injected by DescriptionList */\n _divider?: boolean;\n}\n\nexport function DescriptionItem({\n label,\n value,\n mono = false,\n copyable = false,\n icon: Icon,\n actions,\n className,\n _variant = 'stacked',\n _divider = false,\n}: DescriptionItemProps) {\n const isInline = _variant === 'inline';\n const copyValue = typeof value === 'string' ? value : '';\n\n return (\n <div\n className={twMerge(\n 'py-3',\n _divider && 'border-b border-white/5',\n isInline && 'flex items-start gap-4',\n _variant === 'grid' && 'px-0 md:odd:pr-4 md:even:pl-4',\n className\n )}\n >\n <dt\n className={twMerge(\n 'text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted',\n isInline ? 'w-[40%] shrink-0 pt-0.5' : 'mb-1'\n )}\n >\n {label}\n </dt>\n <dd\n className={twMerge(\n 'flex items-center gap-2 min-w-0',\n isInline && 'flex-1'\n )}\n >\n {Icon && <Icon className=\"w-3.5 h-3.5 text-sg-text-muted shrink-0\" />}\n <span\n className={twMerge(\n 'text-sm text-foreground truncate',\n mono && 'font-mono'\n )}\n >\n {value}\n </span>\n {copyable && copyValue && (\n <CopyButton text={copyValue} label=\"\" variant=\"inline\" size=\"sm\" className=\"opacity-0 group-hover:opacity-100 reveal-touch-visible transition-opacity shrink-0 px-1.5 py-0.5 text-[9px]\" />\n )}\n {actions && <div className=\"ml-auto shrink-0\">{actions}</div>}\n </dd>\n </div>\n );\n}","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport type { LucideIcon } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n Timeline — Vertical activity feed / audit log\n @level L3 — Organism: Vertical activity timeline\n ═══════════════════════════════════════════════════════════════\n \n Usage:\n <Timeline>\n <TimelineItem\n title=\"Deployed v23\"\n description=\"Production deployment via CLI\"\n timestamp=\"2 min ago\"\n status=\"success\"\n icon={Rocket}\n />\n <TimelineItem\n title=\"Build started\"\n timestamp=\"5 min ago\"\n status=\"info\"\n isLast\n />\n </Timeline>\n ═══════════════════════════════════════════════════════════════ */\n\ntype TimelineStatus = 'default' | 'success' | 'warning' | 'danger' | 'info';\n\nconst statusDotClasses: Record<TimelineStatus, string> = {\n default: 'border-white/10',\n success: 'border-emerald-500',\n warning: 'border-amber-500',\n danger: 'border-red-500',\n info: 'border-blue-500',\n};\n\nconst statusIconClasses: Record<TimelineStatus, string> = {\n default: 'text-muted-foreground',\n success: 'text-emerald-400',\n warning: 'text-amber-400',\n danger: 'text-red-400',\n info: 'text-blue-400',\n};\n\n/* ─── Timeline ─── */\n\nexport interface TimelineProps {\n variant?: 'default' | 'compact';\n className?: string;\n children: React.ReactNode;\n}\n\nexport function Timeline({\n variant = 'default',\n className,\n children,\n}: TimelineProps) {\n return (\n <div\n className={twMerge(\n 'flex flex-col',\n variant === 'compact' ? 'gap-2' : 'gap-0',\n className\n )}\n role=\"list\"\n >\n {children}\n </div>\n );\n}\n\n/* ─── TimelineItem ─── */\n\nexport interface TimelineItemProps {\n title: string;\n description?: React.ReactNode;\n timestamp: string | Date;\n icon?: LucideIcon;\n status?: TimelineStatus;\n user?: { name: string; avatar?: string };\n isLast?: boolean;\n actions?: React.ReactNode;\n className?: string;\n}\n\nexport function TimelineItem({\n title,\n description,\n timestamp,\n icon: Icon,\n status = 'default',\n user,\n isLast = false,\n actions,\n className,\n}: TimelineItemProps) {\n const ts = timestamp instanceof Date\n ? timestamp.toLocaleString()\n : timestamp;\n\n return (\n <div\n className={twMerge('relative flex gap-3 pb-6', isLast && 'pb-0', className)}\n role=\"listitem\"\n >\n {/* Connector line */}\n {!isLast && (\n <div className=\"absolute left-[11px] top-6 bottom-0 w-px bg-white/5\" />\n )}\n\n {/* Dot / Icon */}\n <div className=\"relative shrink-0 mt-0.5\">\n {Icon ? (\n <div\n className={twMerge(\n 'w-6 h-6 rounded-full bg-white/[0.04] flex items-center justify-center',\n statusIconClasses[status]\n )}\n >\n <Icon className=\"w-3 h-3\" />\n </div>\n ) : (\n <div\n className={twMerge(\n 'w-6 h-6 rounded-full border-2 bg-background',\n statusDotClasses[status]\n )}\n />\n )}\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm text-foreground break-words\">{title}</p>\n {description && (\n <div className=\"text-xs text-muted-foreground mt-0.5 break-words\">{description}</div>\n )}\n {user && (\n <div className=\"flex items-center gap-1.5 mt-1\">\n {user.avatar ? (\n <img\n src={user.avatar}\n alt={user.name}\n className=\"w-4 h-4 rounded-full\"\n />\n ) : (\n <div className=\"w-4 h-4 rounded-full bg-white/[0.06] flex items-center justify-center\">\n <span className=\"text-[7px] font-bold text-muted-foreground\">\n {user.name.charAt(0).toUpperCase()}\n </span>\n </div>\n )}\n <span className=\"text-[10px] text-sg-text-muted\">{user.name}</span>\n </div>\n )}\n </div>\n\n <div className=\"flex items-center gap-2 shrink-0\">\n <span className=\"text-[10px] text-sg-text-muted font-mono whitespace-nowrap\">{ts}</span>\n {actions}\n </div>\n </div>\n </div>\n </div>\n );\n}","import React, { useState, useCallback } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { Copy, Check } from 'lucide-react';\nimport { copyText } from './utils/clipboard';\n\n/* ═══════════════════════════════════════════════════════════════\n CodeBlock + InlineCode — Stealth Glass Design System\n @level L2 — Molecule: Syntax-highlighted code display\n \n Usage:\n <CodeBlock code={jsonString} language=\"JSON\" title=\"config.json\" />\n <CodeBlock code={curlCmd} language=\"bash\" showLineNumbers />\n <p>Use the <InlineCode>GET /api</InlineCode> endpoint.</p>\n ═══════════════════════════════════════════════════════════════ */\n\n/* ─── CodeBlock ─── */\n\nexport interface CodeBlockProps {\n code: string;\n language?: string;\n showLineNumbers?: boolean;\n showCopy?: boolean;\n maxHeight?: string;\n wrap?: boolean;\n title?: string;\n highlightLines?: number[];\n className?: string;\n}\n\nexport function CodeBlock({\n code,\n language,\n showLineNumbers = false,\n showCopy = true,\n maxHeight = '400px',\n wrap = false,\n title,\n highlightLines = [],\n className,\n}: CodeBlockProps) {\n const [copied, setCopied] = useState(false);\n const lines = code.split('\\n');\n\n const handleCopy = useCallback(async () => {\n await copyText(code);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }, [code]);\n\n const hasHeader = title || language || showCopy;\n const highlightSet = new Set(highlightLines);\n\n return (\n <div\n className={twMerge(\n 'rounded-xl border border-white/5 overflow-hidden',\n className\n )}\n >\n {/* Header bar */}\n {hasHeader && (\n <div className=\"flex items-center justify-between px-4 py-2 bg-white/[0.02] border-b border-white/5\">\n <div className=\"flex items-center gap-2\">\n {title && (\n <span className=\"text-xs text-muted-foreground\">{title}</span>\n )}\n {language && (\n <span className=\"inline-flex items-center px-1.5 py-0.5 rounded-full border border-white/10 bg-white/5 text-[9px] font-bold uppercase tracking-wider text-muted-foreground\">\n {language}\n </span>\n )}\n </div>\n {showCopy && (\n <button\n onClick={handleCopy}\n className={twMerge(\n 'p-1.5 rounded-lg transition-all duration-200 cursor-pointer',\n copied\n ? 'text-emerald-400'\n : 'text-sg-text-muted hover:text-white hover:bg-white/5'\n )}\n aria-label=\"Copy code\"\n >\n {copied ? <Check className=\"w-3.5 h-3.5\" /> : <Copy className=\"w-3.5 h-3.5\" />}\n </button>\n )}\n </div>\n )}\n\n {/* Code area */}\n <div\n className=\"overflow-auto scrollbar-none\"\n style={{ maxHeight }}\n >\n <pre className={twMerge(\n 'bg-background p-4 font-mono text-sm text-foreground m-0',\n !wrap && 'overflow-x-auto whitespace-pre',\n wrap && 'whitespace-pre-wrap break-words'\n )}>\n <code>\n {lines.map((line, i) => {\n const lineNum = i + 1;\n const isHighlighted = highlightSet.has(lineNum);\n\n return (\n <div\n key={i}\n className={twMerge(\n 'flex',\n isHighlighted && 'bg-blue-500/5 -mx-4 px-4'\n )}\n >\n {showLineNumbers && (\n <span className=\"text-sg-text-muted text-right select-none shrink-0 pr-4 border-r border-white/5 mr-4\" style={{ minWidth: '2.5rem' }}>\n {lineNum}\n </span>\n )}\n <span className=\"flex-1\">{line || '\\u00A0'}</span>\n </div>\n );\n })}\n </code>\n </pre>\n </div>\n </div>\n );\n}\n\n/* ─── InlineCode ─── */\n\nexport interface InlineCodeProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function InlineCode({ children, className }: InlineCodeProps) {\n return (\n <code\n className={twMerge(\n 'px-1.5 py-0.5 rounded bg-white/[0.04] border border-white/10 text-sm font-mono text-foreground',\n className\n )}\n >\n {children}\n </code>\n );\n}","import React, { useRef, useEffect, useState, useCallback } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { ChevronDown } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n LogViewer — Composable log viewer with level badges\n @level L3 — Organism: Structured log viewer with columns, levels, auto-scroll\n ═══════════════════════════════════════════════════════════════\n \n Usage:\n <LogViewer entries={logEntries} maxHeight=\"500px\" />\n <LogLine entry={entry} showSource />\n <LogLevelBadge level=\"error\" />\n ═══════════════════════════════════════════════════════════════ */\n\n/* ─── Types ─── */\n\nexport type LogLevel = 'info' | 'warn' | 'error' | 'debug';\n\nexport interface LogEntry {\n id: string;\n timestamp: string;\n level: LogLevel;\n message: string;\n source?: string;\n requestId?: string;\n duration?: number;\n memory?: number;\n metadata?: Record<string, string>;\n}\n\nexport interface LogColumn {\n key: 'timestamp' | 'level' | 'source' | 'message' | 'requestId' | 'duration' | 'memory';\n label: string;\n width?: string;\n}\n\nconst DEFAULT_COLUMNS: LogColumn[] = [\n { key: 'timestamp', label: 'Time', width: '160px' },\n { key: 'level', label: 'Level', width: '70px' },\n { key: 'message', label: 'Message' },\n];\n\n/* ─── LogLevelBadge ─── */\n\nconst levelStyles: Record<LogLevel, string> = {\n info: 'bg-blue-500/15 text-blue-400',\n warn: 'bg-amber-500/15 text-amber-400',\n error: 'bg-red-500/15 text-red-400',\n debug: 'bg-white/5 text-sg-text-muted',\n};\n\nexport interface LogLevelBadgeProps {\n level: LogLevel;\n className?: string;\n}\n\nexport function LogLevelBadge({ level, className }: LogLevelBadgeProps) {\n return (\n <span\n className={twMerge(\n 'inline-flex items-center justify-center px-1.5 py-0.5 rounded text-[9px] font-bold uppercase tracking-wider shrink-0',\n levelStyles[level],\n className\n )}\n >\n {level}\n </span>\n );\n}\n\n/* ─── LogLine ─── */\n\nconst lineHighlight: Record<LogLevel, string> = {\n info: '',\n warn: 'border-l-2 border-amber-500/50',\n error: 'bg-red-500/[0.03] border-l-2 border-red-500',\n debug: '',\n};\n\nexport interface LogLineProps {\n entry: LogEntry;\n showSource?: boolean;\n compact?: boolean;\n highlighted?: boolean;\n onClick?: () => void;\n className?: string;\n cardView?: boolean;\n}\n\nexport function LogLine({\n entry,\n showSource = false,\n compact = false,\n highlighted = false,\n onClick,\n className,\n cardView = false,\n}: LogLineProps) {\n // Card view for mobile\n if (cardView) {\n return (\n <div\n className={twMerge(\n 'p-3 rounded-xl bg-white/[0.02] border border-white/5 space-y-2 transition-all',\n 'hover:bg-white/[0.04] hover:border-white/10',\n lineHighlight[entry.level],\n highlighted && 'bg-blue-500/[0.04] border-blue-500/20',\n onClick && 'cursor-pointer active:scale-[0.98]',\n className\n )}\n onClick={onClick}\n >\n {/* Top row: Level badge and timestamp */}\n <div className=\"flex items-center justify-between gap-2\">\n <LogLevelBadge level={entry.level} />\n <span className=\"text-[10px] text-sg-text-muted font-mono\">\n {new Date(entry.timestamp).toLocaleTimeString()}\n </span>\n </div>\n\n {/* Source if available */}\n {showSource && entry.source && (\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-[9px] uppercase tracking-wider text-sg-text-muted/60 font-bold\">Source:</span>\n <span className=\"text-[11px] text-muted-foreground font-mono\">{entry.source}</span>\n </div>\n )}\n\n {/* Message */}\n <div className=\"text-xs text-foreground font-mono leading-relaxed break-words\">\n {entry.message}\n </div>\n\n {/* Metadata footer */}\n {(entry.duration !== undefined || entry.memory !== undefined || entry.requestId) && (\n <div className=\"flex items-center gap-3 pt-1 border-t border-white/5\">\n {entry.duration !== undefined && (\n <div className=\"flex items-center gap-1\">\n <span className=\"text-[9px] uppercase tracking-wider text-sg-text-muted/60 font-bold\">Duration:</span>\n <span className=\"text-[10px] text-muted-foreground font-mono\">{entry.duration}ms</span>\n </div>\n )}\n {entry.memory !== undefined && (\n <div className=\"flex items-center gap-1\">\n <span className=\"text-[9px] uppercase tracking-wider text-sg-text-muted/60 font-bold\">Memory:</span>\n <span className=\"text-[10px] text-muted-foreground font-mono\">{entry.memory}MB</span>\n </div>\n )}\n </div>\n )}\n </div>\n );\n }\n\n // Table view for desktop\n return (\n <div\n className={twMerge(\n 'flex items-start gap-2 px-3 font-mono text-xs transition-colors',\n compact ? 'py-1' : 'py-1.5',\n 'hover:bg-white/[0.02]',\n lineHighlight[entry.level],\n highlighted && 'bg-blue-500/[0.04]',\n onClick && 'cursor-pointer',\n className\n )}\n onClick={onClick}\n >\n {/* Timestamp */}\n <span className=\"text-sg-text-muted shrink-0 w-[160px] truncate hidden sm:block\">\n {entry.timestamp}\n </span>\n\n {/* Level */}\n <span className=\"shrink-0 w-[70px]\">\n <LogLevelBadge level={entry.level} />\n </span>\n\n {/* Source */}\n {showSource && entry.source && (\n <span className=\"text-sg-text-muted shrink-0 w-[120px] truncate\">\n {entry.source}\n </span>\n )}\n\n {/* Message */}\n <span className=\"flex-1 text-foreground truncate min-w-[120px]\">\n {entry.message}\n </span>\n\n {/* Duration */}\n {entry.duration !== undefined && (\n <span className=\"text-sg-text-muted shrink-0 text-right w-[70px]\">\n {entry.duration}ms\n </span>\n )}\n\n {/* Memory */}\n {entry.memory !== undefined && (\n <span className=\"text-sg-text-muted shrink-0 text-right w-[70px]\">\n {entry.memory}MB\n </span>\n )}\n </div>\n );\n}\n\n/* ─── LogViewer ─── */\n\nexport interface LogViewerProps {\n entries: LogEntry[];\n maxHeight?: string;\n showHeader?: boolean;\n headerColumns?: LogColumn[];\n autoScroll?: boolean;\n onEntryClick?: (entry: LogEntry) => void;\n emptyMessage?: string;\n showSource?: boolean;\n compact?: boolean;\n className?: string;\n}\n\nexport function LogViewer({\n entries,\n maxHeight = '500px',\n showHeader = true,\n headerColumns = DEFAULT_COLUMNS,\n autoScroll = true,\n onEntryClick,\n emptyMessage = 'No log entries',\n showSource = false,\n compact = false,\n className,\n}: LogViewerProps) {\n const scrollRef = useRef<HTMLDivElement>(null);\n const [isAtBottom, setIsAtBottom] = useState(true);\n\n // Track scroll position\n const handleScroll = useCallback(() => {\n const el = scrollRef.current;\n if (!el) return;\n const atBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 40;\n setIsAtBottom(atBottom);\n }, []);\n\n // Auto-scroll to bottom on new entries\n useEffect(() => {\n if (autoScroll && isAtBottom && scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n }\n }, [entries.length, autoScroll, isAtBottom]);\n\n const scrollToBottom = useCallback(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n setIsAtBottom(true);\n }\n }, []);\n\n const cols = showSource\n ? [\n ...headerColumns.slice(0, 2),\n { key: 'source' as const, label: 'Source', width: '120px' },\n ...headerColumns.slice(2),\n ]\n : headerColumns;\n\n // Compute min-width: sum of fixed column widths + minimum for message\n // Adjust based on hidden columns on mobile if needed, but here we just ensure a reasonable minimum\n const computedMinWidth = showSource ? 640 : 540;\n\n return (\n <div\n className={twMerge(\n 'rounded-[2rem] border border-white/5 bg-background overflow-hidden flex flex-col',\n className\n )}\n style={{ maxHeight }}\n >\n {/* Desktop table view */}\n <div className=\"hidden md:flex flex-1 overflow-x-auto min-h-0\">\n <div className=\"h-full flex flex-col\" style={{ minWidth: `max(100%, ${computedMinWidth}px)` }}>\n {/* Header */}\n {showHeader && (\n <div className=\"flex items-center gap-2 px-3 py-2 border-b border-white/5 bg-white/[0.01] shrink-0\">\n {cols.map((col) => (\n <span\n key={col.key}\n className={twMerge(\n \"text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted\",\n col.key === 'timestamp' && \"hidden sm:block\"\n )}\n style={{ width: col.width, flexShrink: col.width ? 0 : undefined, flex: col.width ? undefined : 1 }}\n >\n {col.label}\n </span>\n ))}\n </div>\n )}\n\n {/* Log entries */}\n <div\n ref={scrollRef}\n className=\"flex-1 overflow-y-auto scrollbar-none\"\n onScroll={handleScroll}\n >\n {entries.length === 0 ? (\n <div className=\"flex items-center justify-center py-12\">\n <span className=\"text-sm text-sg-text-muted\">{emptyMessage}</span>\n </div>\n ) : (\n entries.map((entry) => (\n <LogLine\n key={`desktop-${entry.id}`}\n entry={entry}\n showSource={showSource}\n compact={compact}\n onClick={onEntryClick ? () => onEntryClick(entry) : undefined}\n cardView={false}\n />\n ))\n )}\n </div>\n </div>\n </div>\n\n {/* Mobile card view */}\n <div className=\"md:hidden flex-1 overflow-y-auto scrollbar-none p-3 space-y-2\" ref={scrollRef} onScroll={handleScroll}>\n {entries.length === 0 ? (\n <div className=\"flex items-center justify-center py-12\">\n <span className=\"text-sm text-sg-text-muted\">{emptyMessage}</span>\n </div>\n ) : (\n entries.map((entry) => (\n <LogLine\n key={`mobile-${entry.id}`}\n entry={entry}\n showSource={showSource}\n compact={compact}\n onClick={onEntryClick ? () => onEntryClick(entry) : undefined}\n cardView={true}\n />\n ))\n )}\n </div>\n\n {/* Scroll-to-bottom indicator */}\n {!isAtBottom && entries.length > 0 && (\n <div className=\"relative\">\n <button\n onClick={scrollToBottom}\n className=\"absolute bottom-2 left-1/2 -translate-x-1/2 flex items-center gap-1 px-3 py-1.5 rounded-full bg-sg-elevated border border-white/10 text-xs text-muted-foreground hover:text-white hover:border-white/20 transition-all cursor-pointer shadow-lg z-10\"\n >\n <ChevronDown className=\"w-3 h-3\" />\n New logs\n </button>\n </div>\n )}\n </div>\n );\n}","import React, { useState, useCallback, useMemo } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { Eye, EyeOff, Pencil, Trash2, Plus, Lock, Unlock, Copy, Check, Search, Download } from 'lucide-react';\nimport { copyText } from './utils/clipboard';\n\n/* ═══════════════════════════════════════════════════════════════\n KeyValueEditor — Interactive key-value list with secrets\n @level L3 — Organism: CRUD key-value editor with search, secrets, bulk export\n ═══════════════════════════════════════════════════════════════ */\n\n/* ─── Types ─── */\n\nexport interface KeyValueItem {\n id: string;\n key: string;\n value: string;\n scope?: string;\n isSecret?: boolean;\n updatedAt?: string;\n}\n\n/* ─── Components ─── */\n\nfunction Tooltip({ children, content }: { children: React.ReactNode; content: string }) {\n return (\n <div className=\"group relative flex items-center\">\n {children}\n </div>\n );\n}\n\n/* ─── SecretField ─── */\n\nexport interface SecretFieldProps {\n value: string;\n revealed?: boolean;\n onRevealToggle?: () => void;\n copyable?: boolean;\n className?: string;\n}\n\nexport function SecretField({\n value,\n revealed = false,\n onRevealToggle,\n copyable = true,\n className,\n}: SecretFieldProps) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(async () => {\n await copyText(value);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }, [value]);\n\n return (\n <div className={twMerge('inline-flex items-center gap-1.5 min-w-0 max-w-full', className)}>\n <span\n className={twMerge(\n 'font-mono text-sm truncate min-w-0',\n revealed ? 'text-muted-foreground' : 'tracking-wider text-sg-text-muted'\n )}\n >\n {revealed ? value : '\\u2022'.repeat(Math.min(value.length, 16))}\n </span>\n {onRevealToggle && (\n <Tooltip content={revealed ? 'Hide secret' : 'Reveal secret'}>\n <button\n onClick={onRevealToggle}\n className=\"p-1 rounded text-sg-text-muted hover:text-white transition-colors cursor-pointer shrink-0\"\n aria-label={revealed ? 'Hide value' : 'Reveal value'}\n >\n {revealed ? <EyeOff className=\"w-3 h-3\" /> : <Eye className=\"w-3 h-3\" />}\n </button>\n </Tooltip>\n )}\n {copyable && (\n <Tooltip content=\"Copy value\">\n <button\n onClick={handleCopy}\n className={twMerge(\n 'p-1 rounded transition-colors cursor-pointer shrink-0',\n copied ? 'text-emerald-400' : 'text-sg-text-muted hover:text-white'\n )}\n aria-label=\"Copy value\"\n >\n {copied ? <Check className=\"w-3 h-3\" /> : <Copy className=\"w-3 h-3\" />}\n </button>\n </Tooltip>\n )}\n </div>\n );\n}\n\n/* ─── Scope Badge ─── */\n\nconst scopeColors: Record<string, string> = {\n production: 'bg-emerald-500/10 text-emerald-400 border-emerald-500/20',\n staging: 'bg-amber-500/10 text-amber-400 border-amber-500/20',\n development: 'bg-blue-500/10 text-blue-400 border-blue-500/20',\n};\n\nfunction ScopeBadge({ scope }: { scope: string }) {\n const color = scopeColors[scope] || 'bg-white/5 text-muted-foreground border-white/10';\n return (\n <span\n className={twMerge(\n 'inline-flex items-center px-1.5 py-0.5 rounded-full border text-[9px] font-bold uppercase tracking-wider whitespace-nowrap',\n color\n )}\n >\n {scope}\n </span>\n );\n}\n\n/* ─── KeyValueRow ─── */\n\nexport interface KeyValueRowProps {\n item: KeyValueItem;\n onEdit?: () => void;\n onDelete?: () => void;\n readOnly?: boolean;\n className?: string;\n}\n\nexport function KeyValueRow({\n item,\n onEdit,\n onDelete,\n readOnly = false,\n className,\n}: KeyValueRowProps) {\n const [revealed, setRevealed] = useState(false);\n\n return (\n <div\n className={twMerge(\n 'flex flex-col sm:flex-row sm:items-center gap-2 sm:gap-3 rounded-xl bg-white/[0.02] border border-white/5 px-3 sm:px-4 py-3 group hover:bg-white/[0.04] hover:border-white/10 transition-all',\n className\n )}\n >\n {/* Top row: Lock + Key + Mobile Actions */}\n <div className=\"flex items-center gap-2 sm:gap-3 w-full sm:w-auto sm:min-w-0\">\n {/* Secret indicator */}\n <div className=\"shrink-0\">\n {item.isSecret ? (\n <Tooltip content=\"Secret variable\">\n <Lock className=\"w-3.5 h-3.5 text-amber-400/60\" />\n </Tooltip>\n ) : (\n <Tooltip content=\"Public variable\">\n <Unlock className=\"w-3.5 h-3.5 text-sg-text-muted/40\" />\n </Tooltip>\n )}\n </div>\n\n {/* Key - Now flex-1 to allow truncation, preventing button push-off */}\n <div className=\"flex-1 min-w-0 flex items-center gap-2 sm:min-w-[120px] sm:max-w-[200px]\">\n <span className=\"font-mono text-sm text-foreground font-bold truncate\">\n {item.key}\n </span>\n {/* Scope - visible on mobile inline with key */}\n {item.scope && (\n <span className=\"sm:hidden shrink-0\">\n <ScopeBadge scope={item.scope} />\n </span>\n )}\n </div>\n\n {/* Actions - visible on mobile always, desktop hidden here */}\n {!readOnly && (\n <div className=\"flex items-center gap-1 sm:hidden shrink-0 ml-2\">\n {onEdit && (\n <button\n onClick={onEdit}\n className=\"p-1.5 rounded-lg text-sg-text-muted hover:text-white hover:bg-white/5 transition-colors cursor-pointer\"\n aria-label=\"Edit variable\"\n >\n <Pencil className=\"w-3.5 h-3.5\" />\n </button>\n )}\n {onDelete && (\n <button\n onClick={onDelete}\n className=\"p-1.5 rounded-lg text-sg-text-muted hover:text-red-400 hover:bg-red-500/10 transition-colors cursor-pointer\"\n aria-label=\"Delete variable\"\n >\n <Trash2 className=\"w-3.5 h-3.5\" />\n </button>\n )}\n </div>\n )}\n </div>\n\n {/* Value row */}\n <div className=\"flex-1 min-w-0 pl-6 sm:pl-0\">\n {item.isSecret ? (\n <SecretField\n value={item.value}\n revealed={revealed}\n onRevealToggle={() => setRevealed(!revealed)}\n />\n ) : (\n <span className=\"font-mono text-sm text-muted-foreground truncate block\">\n {item.value}\n </span>\n )}\n </div>\n\n {/* Scope - hidden on mobile, visible on desktop */}\n {item.scope && (\n <span className=\"hidden sm:inline-flex shrink-0\">\n <ScopeBadge scope={item.scope} />\n </span>\n )}\n\n {/* Desktop Actions */}\n {!readOnly && (\n <div className=\"hidden sm:flex items-center gap-1 opacity-0 group-hover:opacity-100 reveal-touch-visible transition-opacity shrink-0\">\n {onEdit && (\n <Tooltip content=\"Edit\">\n <button\n onClick={onEdit}\n className=\"p-1.5 rounded-lg text-sg-text-muted hover:text-white hover:bg-white/5 transition-colors cursor-pointer\"\n aria-label=\"Edit variable\"\n >\n <Pencil className=\"w-3.5 h-3.5\" />\n </button>\n </Tooltip>\n )}\n {onDelete && (\n <Tooltip content=\"Delete\">\n <button\n onClick={onDelete}\n className=\"p-1.5 rounded-lg text-sg-text-muted hover:text-red-400 hover:bg-red-500/10 transition-colors cursor-pointer\"\n aria-label=\"Delete variable\"\n >\n <Trash2 className=\"w-3.5 h-3.5\" />\n </button>\n </Tooltip>\n )}\n </div>\n )}\n </div>\n );\n}\n\n/* ─── Inline Add/Edit Form ─── */\n\ninterface InlineFormProps {\n initial?: KeyValueItem;\n scopes?: string[];\n allowSecrets?: boolean;\n onSave: (item: Omit<KeyValueItem, 'id'>) => void;\n onCancel: () => void;\n}\n\nfunction InlineForm({\n initial,\n scopes = [],\n allowSecrets = true,\n onSave,\n onCancel,\n}: InlineFormProps) {\n const [key, setKey] = useState(initial?.key || '');\n const [value, setValue] = useState(initial?.value || '');\n const [scope, setScope] = useState(initial?.scope || (scopes[0] || ''));\n const [isSecret, setIsSecret] = useState(initial?.isSecret || false);\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (!key.trim()) return;\n onSave({ key: key.trim(), value, scope: scope || undefined, isSecret });\n };\n\n return (\n <form\n onSubmit={handleSubmit}\n className=\"rounded-xl bg-white/[0.02] border border-blue-500/20 px-4 py-3 space-y-3\"\n >\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <input\n type=\"text\"\n value={key}\n onChange={(e) => setKey(e.target.value)}\n placeholder=\"KEY\"\n className=\"flex-1 px-3 py-2 rounded-lg bg-white/[0.03] border border-white/5 text-sm font-mono text-foreground placeholder:text-sg-text-muted/60 focus:border-blue-500/50 focus:bg-white/[0.05] focus:outline-none transition-all\"\n autoFocus\n />\n <input\n type=\"text\"\n value={value}\n onChange={(e) => setValue(e.target.value)}\n placeholder=\"value\"\n className=\"flex-[2] px-3 py-2 rounded-lg bg-white/[0.03] border border-white/5 text-sm font-mono text-foreground placeholder:text-sg-text-muted/60 focus:border-blue-500/50 focus:bg-white/[0.05] focus:outline-none transition-all\"\n />\n </div>\n\n <div className=\"flex flex-wrap items-center gap-4\">\n {scopes.length > 0 && (\n <select\n value={scope}\n onChange={(e) => setScope(e.target.value)}\n className=\"px-3 py-1.5 rounded-lg bg-white/[0.03] border border-white/5 text-xs text-foreground focus:border-blue-500/50 focus:outline-none cursor-pointer\"\n >\n {scopes.map((s) => (\n <option key={s} value={s}>{s}</option>\n ))}\n </select>\n )}\n\n {allowSecrets && (\n <label className=\"flex items-center gap-2 cursor-pointer text-xs text-muted-foreground\">\n <input\n type=\"checkbox\"\n checked={isSecret}\n onChange={(e) => setIsSecret(e.target.checked)}\n className=\"sr-only\"\n />\n <div\n className={twMerge(\n 'w-8 h-4 rounded-full transition-colors relative',\n isSecret ? 'bg-amber-500/30' : 'bg-white/10'\n )}\n >\n <div\n className={twMerge(\n 'absolute top-0.5 w-3 h-3 rounded-full transition-all',\n isSecret ? 'left-[18px] bg-amber-400' : 'left-0.5 bg-sg-text-muted'\n )}\n />\n </div>\n Secret\n </label>\n )}\n\n <div className=\"ml-auto flex gap-2\">\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"px-3 py-1.5 rounded-lg text-xs text-muted-foreground hover:text-white hover:bg-white/5 transition-colors cursor-pointer\"\n >\n Cancel\n </button>\n <button\n type=\"submit\"\n disabled={!key.trim()}\n className=\"px-3 py-1.5 rounded-lg bg-blue-600 text-xs text-white hover:bg-blue-500 transition-colors cursor-pointer disabled:opacity-40 disabled:cursor-not-allowed\"\n >\n {initial ? 'Update' : 'Add'}\n </button>\n </div>\n </div>\n </form>\n );\n}\n\n/* ─── KeyValueEditor ─── */\n\nexport interface KeyValueEditorProps {\n items: KeyValueItem[];\n onChange: (items: KeyValueItem[]) => void;\n scopes?: string[];\n allowSecrets?: boolean;\n addLabel?: string;\n emptyMessage?: string;\n readOnly?: boolean;\n className?: string;\n}\n\nexport function KeyValueEditor({\n items,\n onChange,\n scopes = [],\n allowSecrets = true,\n addLabel = 'Add Variable',\n emptyMessage = 'No variables configured',\n readOnly = false,\n className,\n}: KeyValueEditorProps) {\n const [showAdd, setShowAdd] = useState(false);\n const [editingId, setEditingId] = useState<string | null>(null);\n const [searchQuery, setSearchQuery] = useState('');\n\n const filteredItems = useMemo(() => {\n if (!searchQuery) return items;\n const lowerQuery = searchQuery.toLowerCase();\n return items.filter(\n (item) =>\n item.key.toLowerCase().includes(lowerQuery) ||\n item.value.toLowerCase().includes(lowerQuery)\n );\n }, [items, searchQuery]);\n\n const handleAdd = useCallback(\n (data: Omit<KeyValueItem, 'id'>) => {\n const newItem: KeyValueItem = {\n ...data,\n id: `kv_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,\n updatedAt: new Date().toISOString(),\n };\n onChange([...items, newItem]);\n setShowAdd(false);\n },\n [items, onChange]\n );\n\n const handleEdit = useCallback(\n (id: string, data: Omit<KeyValueItem, 'id'>) => {\n onChange(\n items.map((item) =>\n item.id === id ? { ...item, ...data, updatedAt: new Date().toISOString() } : item\n )\n );\n setEditingId(null);\n },\n [items, onChange]\n );\n\n const handleDelete = useCallback(\n (id: string) => {\n onChange(items.filter((item) => item.id !== id));\n },\n [items, onChange]\n );\n\n const handleCopyAll = useCallback(async () => {\n const text = items\n .map((item) => `${item.key}=${item.value}`)\n .join('\\n');\n await copyText(text);\n }, [items]);\n\n return (\n <div className={twMerge('space-y-4', className)}>\n {/* Header Controls */}\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <div className=\"relative flex-1\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-sg-text-muted\" />\n <input\n type=\"text\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n placeholder=\"Search keys or values...\"\n className=\"w-full pl-9 pr-4 py-2 rounded-xl bg-white/[0.03] border border-white/5 text-sm text-foreground placeholder:text-sg-text-muted focus:border-white/10 focus:outline-none transition-colors\"\n />\n </div>\n {items.length > 0 && (\n <button\n onClick={handleCopyAll}\n className=\"flex items-center justify-center gap-2 px-4 py-2 rounded-xl bg-white/[0.03] border border-white/5 text-sm text-muted-foreground hover:text-white hover:bg-white/[0.05] transition-colors cursor-pointer whitespace-nowrap\"\n >\n <Download className=\"w-4 h-4\" />\n Copy .env\n </button>\n )}\n </div>\n\n {/* Rows */}\n <div className=\"space-y-2\">\n {filteredItems.length === 0 && !showAdd && (\n <div className=\"flex items-center justify-center py-8 rounded-xl border border-dashed border-white/5\">\n <span className=\"text-sm text-sg-text-muted\">\n {searchQuery ? 'No matching variables found' : emptyMessage}\n </span>\n </div>\n )}\n\n {filteredItems.map((item) =>\n editingId === item.id ? (\n <InlineForm\n key={item.id}\n initial={item}\n scopes={scopes}\n allowSecrets={allowSecrets}\n onSave={(data) => handleEdit(item.id, data)}\n onCancel={() => setEditingId(null)}\n />\n ) : (\n <KeyValueRow\n key={item.id}\n item={item}\n readOnly={readOnly}\n onEdit={() => setEditingId(item.id)}\n onDelete={() => handleDelete(item.id)}\n />\n )\n )}\n </div>\n\n {/* Add form */}\n {showAdd && (\n <InlineForm\n scopes={scopes}\n allowSecrets={allowSecrets}\n onSave={handleAdd}\n onCancel={() => setShowAdd(false)}\n />\n )}\n\n {/* Add button */}\n {!readOnly && !showAdd && !searchQuery && (\n <button\n onClick={() => setShowAdd(true)}\n className=\"flex items-center gap-2 w-full px-4 py-3 rounded-xl border border-dashed border-white/5 text-sm text-sg-text-muted hover:text-white hover:border-white/10 hover:bg-white/[0.02] transition-all cursor-pointer\"\n >\n <Plus className=\"w-4 h-4\" />\n {addLabel}\n </button>\n )}\n </div>\n );\n}","import React, { useMemo } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport {\n ResponsiveContainer,\n Tooltip as RechartsTooltip,\n Legend as RechartsLegend,\n CartesianGrid,\n} from 'recharts';\nimport type { TooltipProps } from 'recharts';\nimport type { LucideIcon } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n Chart — Pre-styled Recharts wrappers for Stealth Glass\n @level L3 — Organism: Recharts container, tooltip, legend, grid wrappers\n ═══════════════════════════════════════════════════════════════\n \n Usage:\n <ChartContainer config={chartConfig}>\n <AreaChart data={data}>\n <ChartGrid />\n <XAxis dataKey=\"date\" {...axisStyle} />\n <YAxis {...axisStyle} />\n <ChartTooltip />\n <ChartLegend />\n <Area dataKey=\"invocations\" stroke=\"var(--color-invocations)\" fill=\"var(--color-invocations)\" fillOpacity={0.1} />\n </AreaChart>\n </ChartContainer>\n ═══════════════════════════════════════════════════════════════ */\n\n/* ─── Types ─── */\n\nexport interface ChartConfig {\n [key: string]: {\n label: string;\n color: string;\n icon?: LucideIcon;\n };\n}\n\n/* ─── ChartContainer ─── */\n\nexport interface ChartContainerProps {\n config: ChartConfig;\n children: React.ReactNode;\n className?: string;\n aspect?: number;\n}\n\nexport function ChartContainer({\n config,\n children,\n className,\n aspect,\n}: ChartContainerProps) {\n // Generate CSS variables for each config key's color\n const style = useMemo(() => {\n const vars: Record<string, string> = {};\n for (const [key, { color }] of Object.entries(config)) {\n vars[`--color-${key}`] = color;\n }\n return vars;\n }, [config]);\n\n return (\n <div className={twMerge('w-full h-full', className)} style={style}>\n <ResponsiveContainer width=\"100%\" aspect={aspect} height={aspect ? undefined : '100%'} minWidth={0} minHeight={aspect ? undefined : 50}>\n {children as React.ReactElement}\n </ResponsiveContainer>\n </div>\n );\n}\n\n/* ─── ChartTooltipContent ─── */\n\nexport interface ChartTooltipContentProps {\n active?: boolean;\n payload?: TooltipProps<number, string>['payload'];\n label?: string;\n config?: ChartConfig;\n labelFormatter?: (label: string) => string;\n valueFormatter?: (value: number, key: string) => string;\n className?: string;\n}\n\nexport function ChartTooltipContent({\n active,\n payload,\n label,\n config = {},\n labelFormatter,\n valueFormatter,\n className,\n}: ChartTooltipContentProps) {\n if (!active || !payload?.length) return null;\n\n const displayLabel = labelFormatter ? labelFormatter(String(label)) : label;\n\n return (\n <div\n className={twMerge(\n 'bg-sg-elevated border border-white/5 rounded-xl p-3 shadow-2xl backdrop-blur-xl min-w-[120px]',\n className\n )}\n >\n {displayLabel && (\n <p className=\"text-xs text-muted-foreground mb-1.5\">{displayLabel}</p>\n )}\n <div className=\"space-y-1\">\n {payload.map((entry) => {\n const key = String(entry.dataKey);\n const cfg = config[key];\n const displayValue = valueFormatter\n ? valueFormatter(Number(entry.value), key)\n : String(entry.value);\n const displayLabel = cfg?.label || entry.name || key;\n const color = entry.color || cfg?.color || '#3B82F6';\n\n return (\n <div key={key} className=\"flex items-center gap-2 text-sm\">\n <span\n className=\"w-2.5 h-2.5 rounded-full shrink-0\"\n style={{ backgroundColor: color }}\n />\n <span className=\"text-muted-foreground text-xs\">{displayLabel}</span>\n <span className=\"ml-auto text-foreground font-mono text-xs\">{displayValue}</span>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\n/* ─── ChartTooltip (wrapper for Recharts Tooltip) ─── */\n\nexport interface ChartTooltipProps {\n config?: ChartConfig;\n labelFormatter?: (label: string) => string;\n valueFormatter?: (value: number, key: string) => string;\n cursor?: boolean | object;\n}\n\nexport function ChartTooltip({\n config,\n labelFormatter,\n valueFormatter,\n cursor = { stroke: 'rgba(255,255,255,0.1)' },\n}: ChartTooltipProps) {\n return (\n <RechartsTooltip\n cursor={cursor}\n content={\n <ChartTooltipContent\n config={config}\n labelFormatter={labelFormatter}\n valueFormatter={valueFormatter}\n />\n }\n />\n );\n}\n\n/* ─── ChartLegendContent ─── */\n\nexport interface ChartLegendContentProps {\n payload?: Array<{ value: string; color: string; dataKey?: string }>;\n config?: ChartConfig;\n className?: string;\n}\n\nexport function ChartLegendContent({\n payload,\n config = {},\n className,\n}: ChartLegendContentProps) {\n if (!payload?.length) return null;\n\n return (\n <div className={twMerge('flex flex-wrap gap-4 justify-center mt-3', className)}>\n {payload.map((entry) => {\n const key = entry.dataKey || entry.value;\n const cfg = config[key];\n const displayLabel = cfg?.label || entry.value;\n const color = entry.color || cfg?.color || '#3B82F6';\n\n return (\n <div key={key} className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <span\n className=\"w-2 h-2 rounded-full shrink-0\"\n style={{ backgroundColor: color }}\n />\n {displayLabel}\n </div>\n );\n })}\n </div>\n );\n}\n\n/* ─── ChartLegend (wrapper for Recharts Legend) ─── */\n\nexport interface ChartLegendProps {\n config?: ChartConfig;\n}\n\nexport function ChartLegend({ config }: ChartLegendProps) {\n return (\n <RechartsLegend\n content={<ChartLegendContent config={config} />}\n />\n );\n}\n\n/* ─── ChartGrid — Pre-styled CartesianGrid ─── */\n\nexport interface ChartGridProps {\n horizontal?: boolean;\n vertical?: boolean;\n className?: string;\n}\n\nexport function ChartGrid({\n horizontal = true,\n vertical = false,\n ...props\n}: ChartGridProps) {\n return (\n <CartesianGrid\n horizontal={horizontal}\n vertical={vertical}\n stroke=\"rgba(255,255,255,0.05)\"\n strokeDasharray=\"3 3\"\n {...props}\n />\n );\n}\n\n/* ─── Axis style helper ─── */\n\nexport const chartAxisStyle = {\n tick: {\n fill: '#535C6B',\n fontSize: 10,\n fontFamily: \"'JetBrains Mono', 'Fira Code', ui-monospace, monospace\",\n },\n axisLine: { stroke: 'rgba(255,255,255,0.05)' },\n tickLine: false as const,\n};","import React from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport { twMerge } from 'tailwind-merge';\nimport { Check, Circle } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n DropdownMenu — Stealth Glass Design System\n @level L3 — Organism: Action dropdown menu (Radix)\n ═══════════════════════════════════════════════════════════════ */\n\nexport const DropdownMenu = DropdownMenuPrimitive.Root;\nexport const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\nexport const DropdownMenuGroup = DropdownMenuPrimitive.Group;\nexport const DropdownMenuPortal = DropdownMenuPrimitive.Portal;\nexport const DropdownMenuSub = DropdownMenuPrimitive.Sub;\nexport const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\n\n/* ─── Content ─── */\n\nexport const DropdownMenuContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={twMerge(\n 'z-50 min-w-[200px] overflow-hidden',\n 'bg-sg-elevated border border-white/5 rounded-xl backdrop-blur-xl shadow-2xl p-1',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]: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=top]:slide-in-from-bottom-2',\n 'data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2',\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n));\n\nDropdownMenuContent.displayName = 'DropdownMenuContent';\n\n/* ─── Item ─── */\n\nexport interface DropdownMenuItemProps\n extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> {\n variant?: 'default' | 'destructive';\n shortcut?: string;\n}\n\nexport const DropdownMenuItem = React.forwardRef<HTMLDivElement, DropdownMenuItemProps>(\n ({ className, variant = 'default', shortcut, children, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={twMerge(\n 'relative flex items-center gap-3 select-none cursor-pointer',\n 'px-3 py-2 rounded-lg text-sm outline-none',\n 'transition-colors duration-150',\n variant === 'destructive'\n ? 'text-red-400 focus:bg-red-500/10 focus:text-red-300'\n : 'text-muted-foreground focus:bg-white/[0.06] focus:text-white',\n 'data-[disabled]:opacity-40 data-[disabled]:cursor-not-allowed data-[disabled]:pointer-events-none',\n /* Mobile: larger touch targets */\n 'max-sm:py-3',\n className\n )}\n {...props}\n >\n <span className=\"flex-1\">{children}</span>\n {shortcut && (\n <span className=\"ml-auto text-[10px] text-sg-text-muted tracking-wider\">{shortcut}</span>\n )}\n </DropdownMenuPrimitive.Item>\n )\n);\n\nDropdownMenuItem.displayName = 'DropdownMenuItem';\n\n/* ─── CheckboxItem ─── */\n\nexport const DropdownMenuCheckboxItem = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n checked={checked}\n className={twMerge(\n 'relative flex items-center gap-3 select-none cursor-pointer',\n 'pl-8 pr-3 py-2 rounded-lg text-sm text-muted-foreground outline-none',\n 'focus:bg-white/[0.06] focus:text-white',\n 'transition-colors duration-150',\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2.5 flex items-center justify-center w-3.5 h-3.5\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"w-3.5 h-3.5 text-blue-400\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n));\n\nDropdownMenuCheckboxItem.displayName = 'DropdownMenuCheckboxItem';\n\n/* ─── RadioItem ─── */\n\nexport const DropdownMenuRadioItem = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={twMerge(\n 'relative flex items-center gap-3 select-none cursor-pointer',\n 'pl-8 pr-3 py-2 rounded-lg text-sm text-muted-foreground outline-none',\n 'focus:bg-white/[0.06] focus:text-white',\n 'transition-colors duration-150',\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2.5 flex items-center justify-center w-3.5 h-3.5\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"w-2 h-2 fill-blue-400 text-blue-400\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n));\n\nDropdownMenuRadioItem.displayName = 'DropdownMenuRadioItem';\n\n/* ─── Label ─── */\n\nexport const DropdownMenuLabel = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={twMerge(\n 'px-3 py-1.5 text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted',\n className\n )}\n {...props}\n />\n));\n\nDropdownMenuLabel.displayName = 'DropdownMenuLabel';\n\n/* ─── Separator ─── */\n\nexport const DropdownMenuSeparator = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={twMerge('h-px bg-white/5 my-1 -mx-1', className)}\n {...props}\n />\n));\n\nDropdownMenuSeparator.displayName = 'DropdownMenuSeparator';\n\n/* ─── SubContent ─── */\n\nexport const DropdownMenuSubTrigger = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={twMerge(\n 'flex items-center gap-3 select-none cursor-pointer',\n 'px-3 py-2 rounded-lg text-sm text-muted-foreground outline-none',\n 'focus:bg-white/[0.06] focus:text-white',\n className\n )}\n {...props}\n >\n {children}\n </DropdownMenuPrimitive.SubTrigger>\n));\n\nDropdownMenuSubTrigger.displayName = 'DropdownMenuSubTrigger';\n\nexport const DropdownMenuSubContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={twMerge(\n 'z-50 min-w-[180px] overflow-hidden',\n 'bg-sg-elevated border border-white/5 rounded-xl backdrop-blur-xl shadow-2xl p-1',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n className\n )}\n {...props}\n />\n));\n\nDropdownMenuSubContent.displayName = 'DropdownMenuSubContent';","import React, { useState, useMemo, useCallback } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { ChevronUp, ChevronDown, ChevronsUpDown, Search, X } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n DataTable — Stealth Glass Design System\n @level L3 — Organism: Full responsive data table with sort, search, pagination.\n ═══════════════════════════════════════════════════════════════ */\n\n/* ─── Types ─── */\n\nexport interface ColumnDef<T = Record<string, unknown>> {\n key: string;\n label: string;\n sortable?: boolean;\n render?: (value: unknown, row: T) => React.ReactNode;\n width?: string;\n align?: 'left' | 'center' | 'right';\n /** Hide this column below the given breakpoint */\n hiddenBelow?: 'sm' | 'md' | 'lg';\n}\n\nexport interface DataTableProps<T = Record<string, unknown>> {\n columns: ColumnDef<T>[];\n data: T[];\n searchable?: boolean;\n searchPlaceholder?: string;\n searchKeys?: string[];\n rowNumbers?: boolean;\n onRowClick?: (item: T) => void;\n emptyMessage?: string;\n loading?: boolean;\n getRowId?: (item: T) => string;\n /** Row selection */\n selectable?: boolean;\n selectedIds?: string[];\n onSelectionChange?: (ids: string[]) => void;\n /** Pagination */\n paginated?: boolean;\n pageSize?: number;\n pageSizeOptions?: number[];\n className?: string;\n}\n\n/* ─── Helpers ─── */\n\nconst hiddenClasses: Record<string, string> = {\n sm: 'hidden sm:table-cell',\n md: 'hidden md:table-cell',\n lg: 'hidden lg:table-cell',\n};\n\nconst hiddenCardClasses: Record<string, string> = {\n sm: 'hidden sm:flex',\n md: 'hidden md:flex',\n lg: 'hidden lg:flex',\n};\n\nconst alignClasses = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n};\n\nfunction getNestedValue(obj: Record<string, unknown>, path: string): unknown {\n return path.split('.').reduce((acc: unknown, key) => {\n if (acc && typeof acc === 'object') return (acc as Record<string, unknown>)[key];\n return undefined;\n }, obj);\n}\n\n/* ─── Component ─── */\n\nexport function DataTable<T extends Record<string, unknown>>({\n columns,\n data,\n searchable = true,\n searchPlaceholder = 'Search...',\n searchKeys,\n rowNumbers = true,\n onRowClick,\n emptyMessage = 'No data found',\n loading = false,\n getRowId,\n paginated = false,\n pageSize: initialPageSize = 10,\n pageSizeOptions = [10, 25, 50],\n className,\n selectable = false,\n selectedIds = [],\n onSelectionChange,\n}: DataTableProps<T>) {\n const [search, setSearch] = useState('');\n const [sortKey, setSortKey] = useState<string | null>(null);\n const [sortDir, setSortDir] = useState<'asc' | 'desc'>('asc');\n const [currentPage, setCurrentPage] = useState(1);\n const [pageSize, setPageSize] = useState(initialPageSize);\n\n const handleSort = useCallback(\n (key: string) => {\n if (sortKey === key) {\n setSortDir((d) => (d === 'asc' ? 'desc' : 'asc'));\n } else {\n setSortKey(key);\n setSortDir('asc');\n }\n setCurrentPage(1);\n },\n [sortKey]\n );\n\n /* Filter */\n const filtered = useMemo(() => {\n if (!search.trim()) return data;\n const q = search.toLowerCase();\n const keys = searchKeys || columns.map((c) => c.key);\n return data.filter((row) =>\n keys.some((key) => {\n const val = getNestedValue(row, key);\n return val !== undefined && String(val).toLowerCase().includes(q);\n })\n );\n }, [data, search, searchKeys, columns]);\n\n /* Sort */\n const sorted = useMemo(() => {\n if (!sortKey) return filtered;\n return [...filtered].sort((a, b) => {\n const aVal = getNestedValue(a, sortKey);\n const bVal = getNestedValue(b, sortKey);\n if (aVal == null && bVal == null) return 0;\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n const cmp = String(aVal).localeCompare(String(bVal), undefined, { numeric: true, sensitivity: 'base' });\n return sortDir === 'asc' ? cmp : -cmp;\n });\n }, [filtered, sortKey, sortDir]);\n\n /* Paginate */\n const totalItems = sorted.length;\n const totalPages = paginated ? Math.max(1, Math.ceil(totalItems / pageSize)) : 1;\n const paged = paginated ? sorted.slice((currentPage - 1) * pageSize, currentPage * pageSize) : sorted;\n\n /* Page change helpers */\n const safePage = (p: number) => setCurrentPage(Math.min(totalPages, Math.max(1, p)));\n\n const handlePageSize = (size: number) => {\n setPageSize(size);\n setCurrentPage(1);\n };\n\n /* Selection helpers */\n const selectedSet = useMemo(() => new Set(selectedIds), [selectedIds]);\n const pagedIds = useMemo(() => paged.map((row, idx) => getRowId ? getRowId(row) : String(idx)), [paged, getRowId]);\n const allPagedSelected = selectable && pagedIds.length > 0 && pagedIds.every(id => selectedSet.has(id));\n const somePagedSelected = selectable && pagedIds.some(id => selectedSet.has(id));\n\n const handleToggleRow = useCallback((rowId: string) => {\n if (!onSelectionChange) return;\n const next = selectedSet.has(rowId)\n ? selectedIds.filter(id => id !== rowId)\n : [...selectedIds, rowId];\n onSelectionChange(next);\n }, [selectedSet, selectedIds, onSelectionChange]);\n\n const handleToggleAll = useCallback(() => {\n if (!onSelectionChange) return;\n if (allPagedSelected) {\n onSelectionChange(selectedIds.filter(id => !pagedIds.includes(id)));\n } else {\n const merged = new Set([...selectedIds, ...pagedIds]);\n onSelectionChange(Array.from(merged));\n }\n }, [allPagedSelected, selectedIds, pagedIds, onSelectionChange]);\n\n /* Rendering */\n const SortIcon = ({ col }: { col: ColumnDef<T> }) => {\n if (!col.sortable) return null;\n if (sortKey !== col.key) return <ChevronsUpDown className=\"w-3 h-3 text-sg-text-muted/50\" />;\n return sortDir === 'asc' ? (\n <ChevronUp className=\"w-3 h-3 text-blue-400\" />\n ) : (\n <ChevronDown className=\"w-3 h-3 text-blue-400\" />\n );\n };\n\n return (\n <div className={twMerge('w-full', className)}>\n {/* Search */}\n {searchable && (\n <div className=\"relative flex items-center mb-4\">\n <Search className=\"absolute left-3 w-4 h-4 text-sg-text-muted pointer-events-none\" />\n <input\n value={search}\n onChange={(e) => { setSearch(e.target.value); setCurrentPage(1); }}\n placeholder={searchPlaceholder}\n className={twMerge(\n 'w-full h-10 pl-9 pr-9 rounded-xl text-sm',\n 'bg-white/[0.03] border border-white/5 text-foreground placeholder:text-sg-text-muted/60',\n 'focus:border-blue-500/50 focus:bg-white/[0.05] focus:outline-none focus:ring-2 focus:ring-blue-500/20',\n 'transition-all duration-200'\n )}\n />\n {search && (\n <button\n onClick={() => { setSearch(''); setCurrentPage(1); }}\n className=\"absolute right-3 w-4 h-4 text-sg-text-muted hover:text-white transition-colors cursor-pointer\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n )}\n\n {/* Loading */}\n {loading && (\n <div className=\"space-y-3\">\n {Array.from({ length: 5 }, (_, i) => (\n <div key={i} className=\"h-12 bg-white/[0.02] rounded-xl animate-pulse\" />\n ))}\n </div>\n )}\n\n {/* Empty */}\n {!loading && paged.length === 0 && (\n <div className=\"flex flex-col items-center justify-center py-16 text-center\">\n <span className=\"text-sm text-sg-text-muted\">{emptyMessage}</span>\n </div>\n )}\n\n {/* Desktop Table (≥768px) */}\n {!loading && paged.length > 0 && (\n <div className=\"hidden md:block overflow-x-auto -mx-1 px-1\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b border-white/5\">\n {selectable && (\n <th className=\"py-3 px-3 w-10\">\n <input\n type=\"checkbox\"\n checked={allPagedSelected}\n ref={(el) => { if (el) el.indeterminate = somePagedSelected && !allPagedSelected; }}\n onChange={handleToggleAll}\n className=\"w-4 h-4 rounded accent-blue-500 cursor-pointer bg-white/[0.03] border-white/10\"\n />\n </th>\n )}\n {rowNumbers && (\n <th className=\"text-left text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted py-3 px-3 w-12\">\n #\n </th>\n )}\n {columns.map((col) => (\n <th\n key={col.key}\n className={twMerge(\n 'text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted py-3 px-3',\n alignClasses[col.align || 'left'],\n col.sortable !== false ? 'cursor-pointer select-none hover:text-white transition-colors' : '',\n col.hiddenBelow ? hiddenClasses[col.hiddenBelow] : ''\n )}\n style={col.width ? { width: col.width } : undefined}\n onClick={() => col.sortable !== false && handleSort(col.key)}\n >\n <span className=\"inline-flex items-center gap-1.5\">\n {col.label}\n <SortIcon col={col} />\n </span>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {paged.map((row, idx) => {\n const rowId = getRowId ? getRowId(row) : String(idx);\n const globalIdx = paginated ? (currentPage - 1) * pageSize + idx + 1 : idx + 1;\n const isRowSelected = selectable && selectedSet.has(rowId);\n return (\n <tr\n key={rowId}\n onClick={() => onRowClick?.(row)}\n className={twMerge(\n 'border-b border-white/[0.03] transition-colors',\n onRowClick ? 'hover:bg-white/[0.02] cursor-pointer' : '',\n isRowSelected && 'bg-blue-500/[0.04]',\n )}\n >\n {selectable && (\n <td className=\"py-3 px-3\">\n <input\n type=\"checkbox\"\n checked={isRowSelected}\n onChange={(e) => { e.stopPropagation(); handleToggleRow(rowId); }}\n onClick={(e) => e.stopPropagation()}\n className=\"w-4 h-4 rounded accent-blue-500 cursor-pointer bg-white/[0.03] border-white/10\"\n />\n </td>\n )}\n {rowNumbers && (\n <td className=\"py-3 px-3 text-[10px] text-sg-text-muted font-mono\">{globalIdx}</td>\n )}\n {columns.map((col) => (\n <td\n key={col.key}\n className={twMerge(\n 'py-3 px-3 text-foreground',\n alignClasses[col.align || 'left'],\n col.hiddenBelow ? hiddenClasses[col.hiddenBelow] : ''\n )}\n >\n {col.render\n ? col.render(getNestedValue(row, col.key), row)\n : String(getNestedValue(row, col.key) ?? '—')}\n </td>\n ))}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n )}\n\n {/* Mobile Cards (<768px) */}\n {!loading && paged.length > 0 && (\n <div className=\"md:hidden space-y-3\">\n {/* Mobile sort pills */}\n <div className=\"flex flex-wrap gap-2\">\n {columns\n .filter((c) => c.sortable !== false)\n .map((col) => (\n <button\n key={col.key}\n onClick={() => handleSort(col.key)}\n className={twMerge(\n 'inline-flex items-center gap-1 px-3 py-1.5 rounded-full text-[10px] font-bold whitespace-nowrap',\n 'border transition-all duration-200 cursor-pointer',\n sortKey === col.key\n ? 'bg-blue-500/10 text-blue-400 border-blue-500/20'\n : 'bg-white/[0.03] text-sg-text-muted border-white/5 hover:text-white'\n )}\n >\n {col.label}\n {sortKey === col.key && (\n sortDir === 'asc'\n ? <ChevronUp className=\"w-3 h-3\" />\n : <ChevronDown className=\"w-3 h-3\" />\n )}\n </button>\n ))}\n </div>\n\n {paged.map((row, idx) => {\n const rowId = getRowId ? getRowId(row) : String(idx);\n return (\n <div\n key={rowId}\n onClick={() => onRowClick?.(row)}\n className={twMerge(\n 'rounded-xl bg-white/[0.02] border border-white/5 p-4 space-y-2',\n onRowClick ? 'cursor-pointer hover:border-white/10 transition-all' : ''\n )}\n >\n {columns.map((col) => (\n <div\n key={col.key}\n className={twMerge(\n 'flex justify-between items-center gap-2',\n col.hiddenBelow ? hiddenCardClasses[col.hiddenBelow] : ''\n )}\n >\n <span className=\"text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted shrink-0\">\n {col.label}\n </span>\n <span className=\"text-sm text-foreground text-right truncate\">\n {col.render\n ? col.render(getNestedValue(row, col.key), row)\n : String(getNestedValue(row, col.key) ?? '—')}\n </span>\n </div>\n ))}\n </div>\n );\n })}\n </div>\n )}\n\n {/* Pagination */}\n {paginated && totalPages > 1 && !loading && (\n <div className=\"flex flex-col sm:flex-row items-center justify-between gap-3 mt-4 pt-4 border-t border-white/5\">\n <span className=\"hidden sm:block text-[10px] text-sg-text-muted uppercase tracking-wider font-bold\">\n Showing {(currentPage - 1) * pageSize + 1}–{Math.min(currentPage * pageSize, totalItems)} of {totalItems}\n </span>\n\n <div className=\"hidden sm:flex items-center gap-1\">\n {pageSizeOptions.map((s) => (\n <button\n key={s}\n onClick={() => handlePageSize(s)}\n className={twMerge(\n 'px-2.5 py-1 rounded-lg text-[10px] font-bold transition-all cursor-pointer',\n s === pageSize\n ? 'bg-blue-500/10 text-blue-400 border border-blue-500/20'\n : 'text-sg-text-muted hover:text-white hover:bg-white/5 border border-transparent'\n )}\n >\n {s}\n </button>\n ))}\n </div>\n\n <div className=\"flex items-center gap-1\">\n <button\n onClick={() => safePage(currentPage - 1)}\n disabled={currentPage <= 1}\n className=\"w-9 h-9 rounded-lg bg-white/[0.03] border border-white/5 text-muted-foreground inline-flex items-center justify-center disabled:opacity-40 disabled:pointer-events-none hover:bg-white/[0.06] hover:text-white transition-all cursor-pointer\"\n >\n ‹\n </button>\n {Array.from({ length: Math.min(totalPages, window.innerWidth < 640 ? 3 : 5) }, (_, i) => {\n let page: number;\n const maxVisible = window.innerWidth < 640 ? 3 : 5;\n if (totalPages <= maxVisible) {\n page = i + 1;\n } else if (currentPage <= Math.floor(maxVisible / 2) + 1) {\n page = i + 1;\n } else if (currentPage >= totalPages - Math.floor(maxVisible / 2)) {\n page = totalPages - maxVisible + 1 + i;\n } else {\n page = currentPage - Math.floor(maxVisible / 2) + i;\n }\n return (\n <button\n key={page}\n onClick={() => safePage(page)}\n className={twMerge(\n 'w-9 h-9 rounded-lg text-sm inline-flex items-center justify-center transition-all cursor-pointer',\n page === currentPage\n ? 'bg-blue-500/10 border border-blue-500/20 text-blue-400'\n : 'bg-white/[0.03] border border-white/5 text-muted-foreground hover:bg-white/[0.06] hover:text-white'\n )}\n >\n {page}\n </button>\n );\n })}\n <button\n onClick={() => safePage(currentPage + 1)}\n disabled={currentPage >= totalPages}\n className=\"w-9 h-9 rounded-lg bg-white/[0.03] border border-white/5 text-muted-foreground inline-flex items-center justify-center disabled:opacity-40 disabled:pointer-events-none hover:bg-white/[0.06] hover:text-white transition-all cursor-pointer\"\n >\n ›\n </button>\n </div>\n </div>\n )}\n </div>\n );\n}","import React, { useState, useEffect } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { Inbox, AlertOctagon, RefreshCw, Loader2 } from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n EmptyState, ErrorState, LoadingState — Stealth Glass\n @level L4 — Template: Full-page state patterns (empty, error, loading)\n ═══════════════════════════════════════════════════════════════ */\n\n/* ─── EmptyState ─── */\n\nexport interface EmptyStateProps {\n icon?: LucideIcon;\n title?: string;\n description?: string;\n action?: {\n label: string;\n onClick: () => void;\n icon?: LucideIcon;\n };\n compact?: boolean;\n className?: string;\n}\n\nexport function EmptyState({\n icon: Icon = Inbox,\n title = 'Nothing here yet',\n description,\n action,\n compact = false,\n className,\n}: EmptyStateProps) {\n const ActionIcon = action?.icon;\n\n return (\n <div\n className={twMerge(\n 'flex flex-col items-center justify-center text-center',\n compact ? 'py-8 gap-3' : 'py-16 gap-4',\n className\n )}\n >\n <Icon className={twMerge('text-sg-text-muted/30', compact ? 'w-8 h-8' : 'w-12 h-12')} />\n <div className=\"space-y-1\">\n <p className={twMerge('text-muted-foreground', compact ? 'text-sm' : 'text-base')}>\n {title}\n </p>\n {description && (\n <p className=\"text-sm text-sg-text-muted max-w-sm mx-auto\">{description}</p>\n )}\n </div>\n {action && (\n <button\n onClick={action.onClick}\n className={twMerge(\n 'inline-flex items-center gap-2 mt-2 cursor-pointer',\n 'px-4 h-9 rounded-full text-sm',\n 'bg-gradient-to-r from-blue-600 to-indigo-600 text-white',\n 'shadow-[0_4px_20px_rgba(37,99,235,0.3)]',\n 'hover:shadow-[0_6px_25px_rgba(37,99,235,0.4)] hover:brightness-110',\n 'transition-all duration-200'\n )}\n >\n {ActionIcon && <ActionIcon className=\"w-4 h-4\" />}\n {action.label}\n </button>\n )}\n </div>\n );\n}\n\n/* ─── ErrorState ─── */\n\nexport interface ErrorStateProps {\n icon?: LucideIcon;\n title?: string;\n description?: string;\n onRetry?: () => void;\n retrying?: boolean;\n fullPage?: boolean;\n className?: string;\n}\n\nexport function ErrorState({\n icon: Icon = AlertOctagon,\n title = 'Something went wrong',\n description,\n onRetry,\n retrying = false,\n fullPage = false,\n className,\n}: ErrorStateProps) {\n return (\n <div\n role=\"alert\"\n className={twMerge(\n 'flex flex-col items-center justify-center text-center gap-4',\n fullPage ? 'min-h-[60vh]' : 'py-16',\n className\n )}\n >\n <Icon className=\"w-12 h-12 text-red-400/30\" />\n <div className=\"space-y-1\">\n <p className=\"text-base text-muted-foreground\">{title}</p>\n {description && (\n <p className=\"text-sm text-sg-text-muted max-w-sm mx-auto\">{description}</p>\n )}\n </div>\n {onRetry && (\n <button\n onClick={onRetry}\n disabled={retrying}\n className={twMerge(\n 'inline-flex items-center gap-2 mt-2 cursor-pointer',\n 'px-4 h-10 rounded-xl text-sm',\n 'bg-white/[0.03] border border-white/10 text-foreground',\n 'hover:bg-white/[0.08] hover:border-white/20',\n 'disabled:opacity-40 disabled:pointer-events-none',\n 'transition-all duration-200'\n )}\n >\n {retrying ? (\n <Loader2 className=\"w-4 h-4 animate-spin\" />\n ) : (\n <RefreshCw className=\"w-4 h-4\" />\n )}\n {retrying ? 'Retrying...' : 'Retry'}\n </button>\n )}\n </div>\n );\n}\n\n/* ─── LoadingState ─── */\n\nexport interface LoadingStateProps {\n variant?: 'spinner' | 'skeleton' | 'dots';\n message?: string;\n extendedMessage?: string;\n count?: number;\n className?: string;\n}\n\nexport function LoadingState({\n variant = 'spinner',\n message,\n extendedMessage = 'Still loading, hang tight...',\n count = 3,\n className,\n}: LoadingStateProps) {\n const [showExtended, setShowExtended] = useState(false);\n\n useEffect(() => {\n const timer = setTimeout(() => setShowExtended(true), 5000);\n return () => clearTimeout(timer);\n }, []);\n\n return (\n <div\n aria-live=\"polite\"\n aria-busy=\"true\"\n className={twMerge('flex flex-col items-center justify-center py-16 gap-4', className)}\n >\n {variant === 'spinner' && (\n <Loader2 className=\"w-6 h-6 text-blue-400 animate-spin\" />\n )}\n\n {variant === 'dots' && (\n <div className=\"flex items-center gap-1.5\">\n {[0, 1, 2].map((i) => (\n <div\n key={i}\n className=\"w-2 h-2 rounded-full bg-blue-400\"\n style={{\n animation: 'pulse-subtle 1.4s ease-in-out infinite',\n animationDelay: `${i * 0.2}s`,\n }}\n />\n ))}\n </div>\n )}\n\n {variant === 'skeleton' && (\n <div className=\"w-full max-w-md space-y-3\">\n {Array.from({ length: count }, (_, i) => (\n <div\n key={i}\n className=\"h-10 bg-white/[0.04] rounded-xl animate-pulse\"\n style={{ width: `${100 - i * 10}%` }}\n />\n ))}\n </div>\n )}\n\n {message && (\n <p className=\"text-sm text-sg-text-muted\">{message}</p>\n )}\n\n {showExtended && (\n <p className=\"text-xs text-sg-text-muted/60 animate-in fade-in duration-500\">\n {extendedMessage}\n </p>\n )}\n </div>\n );\n}","import React, { useEffect, useState, useCallback } from 'react';\nimport { Command as Cmdk } from 'cmdk';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { twMerge } from 'tailwind-merge';\nimport { Search } from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n CommandPalette — Stealth Glass Design System\n @level L3 — Organism: Cmd+K search palette (cmdk + Radix Dialog)\n ═══════════════════════════════════════════════════════════════ */\n\nexport interface CommandItem {\n id: string;\n label: string;\n description?: string;\n icon?: LucideIcon;\n shortcut?: string;\n keywords?: string[];\n disabled?: boolean;\n}\n\nexport interface CommandGroup {\n heading: string;\n items: CommandItem[];\n}\n\nexport interface CommandPaletteProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n groups: CommandGroup[];\n onSelect: (item: CommandItem) => void;\n placeholder?: string;\n emptyMessage?: string;\n}\n\nexport function CommandPalette({\n open,\n onOpenChange,\n groups,\n onSelect,\n placeholder = 'Search commands...',\n emptyMessage = 'No results found.',\n}: CommandPaletteProps) {\n return (\n <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay\n className={twMerge(\n 'fixed inset-0 z-50 bg-black/60 backdrop-blur-sm',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0'\n )}\n />\n <DialogPrimitive.Content\n className={twMerge(\n 'fixed left-1/2 top-[20vh] z-50 -translate-x-1/2',\n 'w-[calc(100%-2rem)] max-w-lg',\n 'bg-card border border-white/5 rounded-[2rem] shadow-2xl overflow-hidden',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:slide-in-from-top-4',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n 'duration-200'\n )}\n >\n <DialogPrimitive.Title className=\"sr-only\">Command Palette</DialogPrimitive.Title>\n <DialogPrimitive.Description className=\"sr-only\">\n Search for commands or navigate the application\n </DialogPrimitive.Description>\n <Cmdk\n className=\"flex flex-col\"\n label=\"Command Palette\"\n >\n {/* Search input */}\n <div className=\"flex items-center gap-3 px-5 h-14 border-b border-white/5\">\n <Search className=\"w-5 h-5 text-sg-text-muted shrink-0\" />\n <Cmdk.Input\n placeholder={placeholder}\n className=\"flex-1 bg-transparent text-base text-foreground placeholder:text-sg-text-muted/60 outline-none\"\n />\n </div>\n\n {/* Results */}\n <Cmdk.List className=\"max-h-[50vh] overflow-y-auto p-2\">\n <Cmdk.Empty className=\"flex items-center justify-center py-10 text-sm text-sg-text-muted\">\n {emptyMessage}\n </Cmdk.Empty>\n\n {groups.map((group) => (\n <Cmdk.Group\n key={group.heading}\n heading={group.heading}\n className=\"[&_[cmdk-group-heading]]:text-[10px] [&_[cmdk-group-heading]]:font-bold [&_[cmdk-group-heading]]:uppercase [&_[cmdk-group-heading]]:tracking-[0.2em] [&_[cmdk-group-heading]]:text-sg-text-muted [&_[cmdk-group-heading]]:px-3 [&_[cmdk-group-heading]]:py-2\"\n >\n {group.items.map((item) => {\n const ItemIcon = item.icon;\n return (\n <Cmdk.Item\n key={item.id}\n value={[item.label, item.description, ...(item.keywords || [])].join(' ')}\n disabled={item.disabled}\n onSelect={() => {\n onSelect(item);\n onOpenChange(false);\n }}\n className={twMerge(\n 'flex items-center gap-3 px-3 py-3 rounded-xl cursor-pointer select-none',\n 'text-muted-foreground transition-colors duration-150',\n 'data-[selected=true]:bg-white/[0.04] data-[selected=true]:text-white',\n 'data-[disabled=true]:opacity-40 data-[disabled=true]:cursor-not-allowed'\n )}\n >\n {ItemIcon && <ItemIcon className=\"w-4 h-4 text-sg-text-muted shrink-0\" />}\n <div className=\"flex-1 min-w-0\">\n <span className=\"text-sm block\">{item.label}</span>\n {item.description && (\n <span className=\"text-[10px] text-sg-text-muted block mt-0.5 truncate\">\n {item.description}\n </span>\n )}\n </div>\n {item.shortcut && (\n <div className=\"flex items-center gap-1 ml-auto shrink-0\">\n {item.shortcut.split('+').flatMap((key, i) => {\n const els: React.ReactNode[] = [];\n if (i > 0) {\n els.push(<span key={`sep-${i}`} className=\"text-sg-text-muted/40 text-[9px]\">+</span>);\n }\n els.push(\n <kbd key={`key-${i}`} className=\"px-1.5 py-0.5 rounded bg-white/[0.04] border border-white/10 text-[10px] font-mono text-sg-text-muted\">\n {key.trim()}\n </kbd>\n );\n return els;\n })}\n </div>\n )}\n </Cmdk.Item>\n );\n })}\n </Cmdk.Group>\n ))}\n </Cmdk.List>\n\n {/* Footer */}\n <div className=\"flex items-center gap-4 px-4 py-3 border-t border-white/5 text-[10px] text-sg-text-muted\">\n <span className=\"inline-flex items-center gap-1\">\n <kbd className=\"px-1 py-0.5 rounded bg-white/[0.04] border border-white/10 text-[9px] font-mono\">↑↓</kbd>\n navigate\n </span>\n <span className=\"inline-flex items-center gap-1\">\n <kbd className=\"px-1 py-0.5 rounded bg-white/[0.04] border border-white/10 text-[9px] font-mono\">↵</kbd>\n select\n </span>\n <span className=\"inline-flex items-center gap-1\">\n <kbd className=\"px-1 py-0.5 rounded bg-white/[0.04] border border-white/10 text-[9px] font-mono\">esc</kbd>\n close\n </span>\n </div>\n </Cmdk>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n );\n}\n\n/* ─── useCommandPalette Hook ─── */\n\nexport function useCommandPalette() {\n const [open, setOpen] = useState(false);\n\n useEffect(() => {\n const handler = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'k') {\n e.preventDefault();\n setOpen((o) => !o);\n }\n };\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, []);\n\n const toggle = useCallback(() => setOpen((o) => !o), []);\n\n return { open, setOpen, toggle };\n}","import React, { useState, useCallback, useMemo } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport {\n Calendar as CalendarIcon,\n Clock,\n ChevronDown,\n Check,\n} from 'lucide-react';\nimport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n} from './Popover';\n\n/* ═══════════════════════════════════════════════════════════════\n TimeRangePicker — Preset + custom date-time range selection\n @level L2 — Molecule: Date range picker with presets + popover\n ═══════════════════════════════════════════════════════════════\n\n Usage:\n <TimeRangePicker\n value={{ from: new Date(), to: new Date() }}\n onChange={({ from, to }) => {}}\n presets={[\n { label: 'Last 1h', value: '1h', getRange: () => ({ from: subHours(new Date(), 1), to: new Date() }) },\n ]}\n />\n ═══════════════════════════════════════════════════════════════ */\n\nexport interface TimeRangePreset {\n label: string;\n value: string;\n getRange: () => { from: Date; to: Date };\n}\n\nexport interface TimeRangeValue {\n from: Date;\n to: Date;\n}\n\nexport interface TimeRangePickerProps {\n value?: TimeRangeValue;\n onChange: (range: TimeRangeValue) => void;\n presets?: TimeRangePreset[];\n showCustom?: boolean;\n placeholder?: string;\n label?: string;\n size?: 'sm' | 'md';\n className?: string;\n}\n\nconst DEFAULT_PRESETS: TimeRangePreset[] = [\n { label: 'Last 5 min', value: '5m', getRange: () => ({ from: new Date(Date.now() - 5 * 60000), to: new Date() }) },\n { label: 'Last 15 min', value: '15m', getRange: () => ({ from: new Date(Date.now() - 15 * 60000), to: new Date() }) },\n { label: 'Last 1 hour', value: '1h', getRange: () => ({ from: new Date(Date.now() - 3600000), to: new Date() }) },\n { label: 'Last 6 hours', value: '6h', getRange: () => ({ from: new Date(Date.now() - 6 * 3600000), to: new Date() }) },\n { label: 'Last 24 hours', value: '24h', getRange: () => ({ from: new Date(Date.now() - 24 * 3600000), to: new Date() }) },\n { label: 'Last 7 days', value: '7d', getRange: () => ({ from: new Date(Date.now() - 7 * 86400000), to: new Date() }) },\n { label: 'Last 30 days', value: '30d', getRange: () => ({ from: new Date(Date.now() - 30 * 86400000), to: new Date() }) },\n];\n\nconst sizeClasses = {\n sm: 'h-8 px-3 text-xs rounded-lg',\n md: 'h-10 px-3.5 text-sm rounded-xl',\n};\n\nfunction formatDateTimeLocal(d: Date): string {\n const pad = (n: number) => String(n).padStart(2, '0');\n return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}T${pad(d.getHours())}:${pad(d.getMinutes())}`;\n}\n\nfunction formatDisplay(d: Date): string {\n return d.toLocaleDateString(undefined, { month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit' });\n}\n\nexport function TimeRangePicker({\n value,\n onChange,\n presets,\n showCustom = true,\n placeholder = 'Select time range',\n label,\n size = 'md',\n className,\n}: TimeRangePickerProps) {\n const [open, setOpen] = useState(false);\n const [activePreset, setActivePreset] = useState<string | null>(null);\n const [mode, setMode] = useState<'presets' | 'custom'>('presets');\n const [customFrom, setCustomFrom] = useState('');\n const [customTo, setCustomTo] = useState('');\n\n const presetList = presets || DEFAULT_PRESETS;\n\n const displayText = useMemo(() => {\n if (activePreset) {\n const preset = presetList.find(p => p.value === activePreset);\n if (preset) return preset.label;\n }\n if (value) {\n return `${formatDisplay(value.from)} — ${formatDisplay(value.to)}`;\n }\n return placeholder;\n }, [value, activePreset, presetList, placeholder]);\n\n const handlePreset = useCallback((preset: TimeRangePreset) => {\n const range = preset.getRange();\n setActivePreset(preset.value);\n onChange(range);\n setOpen(false);\n }, [onChange]);\n\n const handleCustomApply = useCallback(() => {\n if (customFrom && customTo) {\n const from = new Date(customFrom);\n const to = new Date(customTo);\n if (!isNaN(from.getTime()) && !isNaN(to.getTime()) && from < to) {\n setActivePreset(null);\n onChange({ from, to });\n setOpen(false);\n }\n }\n }, [customFrom, customTo, onChange]);\n\n const openCustom = useCallback(() => {\n setMode('custom');\n if (value) {\n setCustomFrom(formatDateTimeLocal(value.from));\n setCustomTo(formatDateTimeLocal(value.to));\n }\n }, [value]);\n\n return (\n <div className={twMerge('w-full', className)}>\n {label && (\n <label className=\"block text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted mb-1.5\">\n {label}\n </label>\n )}\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className={twMerge(\n 'flex w-full items-center justify-between gap-2 cursor-pointer',\n 'bg-white/[0.03] border border-white/5 text-foreground',\n 'hover:border-white/10 transition-all duration-200',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500/50',\n sizeClasses[size],\n !value && !activePreset && 'text-sg-text-muted/60',\n )}\n >\n <span className=\"inline-flex items-center gap-2 truncate\">\n <CalendarIcon className=\"w-4 h-4 text-sg-text-muted shrink-0\" />\n {displayText}\n </span>\n <ChevronDown className=\"w-4 h-4 text-sg-text-muted shrink-0\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n className=\"w-72 p-0\"\n >\n {mode === 'presets' ? (\n <div className=\"p-1\">\n {presetList.map((preset) => (\n <button\n key={preset.value}\n onClick={() => handlePreset(preset)}\n className={twMerge(\n 'w-full flex items-center justify-between px-3 py-2 rounded-lg text-sm cursor-pointer',\n 'transition-colors duration-150',\n activePreset === preset.value\n ? 'bg-blue-500/10 text-blue-400'\n : 'text-muted-foreground hover:bg-white/5 hover:text-white',\n )}\n >\n <span className=\"flex items-center gap-2\">\n <Clock className=\"w-3.5 h-3.5\" />\n {preset.label}\n </span>\n {activePreset === preset.value && (\n <Check className=\"w-3.5 h-3.5\" />\n )}\n </button>\n ))}\n {showCustom && (\n <button\n onClick={openCustom}\n className={twMerge(\n 'w-full flex items-center gap-2 px-3 py-2 rounded-lg text-sm cursor-pointer mt-1',\n 'border-t border-white/5 pt-2 text-muted-foreground hover:bg-white/5 hover:text-white',\n 'transition-colors duration-150',\n )}\n >\n <CalendarIcon className=\"w-3.5 h-3.5\" />\n Custom range...\n </button>\n )}\n </div>\n ) : (\n <div className=\"p-3 space-y-3\">\n <button\n onClick={() => setMode('presets')}\n className=\"text-xs text-sg-text-muted hover:text-white transition-colors cursor-pointer\"\n >\n ← Back to presets\n </button>\n <div>\n <label className=\"block text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted mb-1\">\n From\n </label>\n <input\n type=\"datetime-local\"\n value={customFrom}\n onChange={(e) => setCustomFrom(e.target.value)}\n className={twMerge(\n 'w-full h-9 px-3 rounded-lg text-xs',\n 'bg-white/[0.03] border border-white/5 text-foreground',\n 'focus:border-blue-500/50 focus:outline-none focus:ring-2 focus:ring-blue-500/20',\n 'transition-all duration-200',\n '[color-scheme:dark]',\n )}\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted mb-1\">\n To\n </label>\n <input\n type=\"datetime-local\"\n value={customTo}\n onChange={(e) => setCustomTo(e.target.value)}\n className={twMerge(\n 'w-full h-9 px-3 rounded-lg text-xs',\n 'bg-white/[0.03] border border-white/5 text-foreground',\n 'focus:border-blue-500/50 focus:outline-none focus:ring-2 focus:ring-blue-500/20',\n 'transition-all duration-200',\n '[color-scheme:dark]',\n )}\n />\n </div>\n <button\n onClick={handleCustomApply}\n disabled={!customFrom || !customTo}\n className={twMerge(\n 'w-full h-9 rounded-lg text-sm cursor-pointer',\n 'bg-gradient-to-r from-blue-600 to-indigo-600 text-white rounded-full',\n 'shadow-[0_4px_20px_rgba(37,99,235,0.3)]',\n 'hover:shadow-[0_6px_25px_rgba(37,99,235,0.4)] hover:brightness-110',\n 'disabled:opacity-40 disabled:pointer-events-none',\n 'transition-all duration-200',\n )}\n >\n Apply Range\n </button>\n </div>\n )}\n </PopoverContent>\n </Popover>\n </div>\n );\n}","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { Check, X, Sparkles } from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n PricingCard — Plan comparison card\n @level L3 — Organism: Pricing plan card with feature list\n ═══════════════════════════════════════════════════════════════\n\n Usage:\n <PricingCard\n name=\"Pro\"\n price={{ amount: 49, period: '/mo' }}\n features={[\n { label: '100k invocations', included: true },\n { label: 'Custom domains', included: true },\n { label: 'SSO', included: false },\n ]}\n highlighted\n ctaLabel=\"Upgrade to Pro\"\n onSelect={() => {}}\n />\n ═══════════════════════════════════════════════════════════════ */\n\nexport interface PricingFeature {\n label: string;\n included: boolean;\n tooltip?: string;\n}\n\nexport interface PricingCardProps {\n name: string;\n description?: string;\n price: { amount: number | string; period?: string; currency?: string } | string;\n features: PricingFeature[];\n highlighted?: boolean;\n current?: boolean;\n ctaLabel?: string;\n onSelect?: () => void;\n icon?: LucideIcon;\n badge?: string;\n className?: string;\n}\n\nexport function PricingCard({\n name,\n description,\n price,\n features,\n highlighted = false,\n current = false,\n ctaLabel = 'Get Started',\n onSelect,\n icon: Icon,\n badge,\n className,\n}: PricingCardProps) {\n const priceDisplay = typeof price === 'string'\n ? price\n : `${price.currency || '$'}${price.amount}`;\n const periodDisplay = typeof price === 'string' ? '' : (price.period || '/mo');\n\n return (\n <div\n className={twMerge(\n 'relative flex flex-col rounded-[2rem] border p-6 transition-all duration-300',\n highlighted\n ? 'bg-sg-elevated border-blue-500/30 shadow-[0_0_30px_rgba(59,130,246,0.1)]'\n : 'bg-background border-white/5',\n 'hover:border-white/10',\n className,\n )}\n >\n {/* Highlighted glow */}\n {highlighted && (\n <div className=\"absolute -top-20 -right-20 w-64 h-64 rounded-full blur-[80px] pointer-events-none opacity-40 bg-blue-500/10\" />\n )}\n\n {/* Badge */}\n {(badge || highlighted) && (\n <div className=\"absolute -top-3 left-1/2 -translate-x-1/2 z-10\">\n <span className={twMerge(\n 'inline-flex items-center gap-1.5 px-3 py-1 rounded-full text-[10px] font-bold uppercase tracking-wider',\n highlighted\n ? 'bg-gradient-to-r from-blue-600 to-indigo-600 text-white shadow-[0_4px_20px_rgba(37,99,235,0.3)]'\n : 'bg-white/5 text-muted-foreground border border-white/10',\n )}>\n {highlighted && <Sparkles className=\"w-3 h-3\" />}\n {badge || 'Recommended'}\n </span>\n </div>\n )}\n\n <div className=\"relative z-10 flex flex-col flex-1\">\n {/* Header */}\n <div className=\"mb-6\">\n <div className=\"flex items-center gap-2 mb-2\">\n {Icon && <Icon className=\"w-5 h-5 text-blue-400\" />}\n <h3 className=\"text-foreground\">{name}</h3>\n </div>\n {description && (\n <p className=\"text-sm text-muted-foreground\">{description}</p>\n )}\n </div>\n\n {/* Price */}\n <div className=\"mb-6\">\n <div className=\"flex items-baseline gap-1\">\n <span className=\"font-mono font-bold text-3xl tracking-tight text-foreground\">\n {priceDisplay}\n </span>\n {periodDisplay && (\n <span className=\"text-sm text-sg-text-muted\">{periodDisplay}</span>\n )}\n </div>\n </div>\n\n {/* Features */}\n <ul className=\"flex-1 space-y-3 mb-6\">\n {features.map((feature, i) => (\n <li key={i} className=\"flex items-start gap-2.5\">\n {feature.included ? (\n <Check className=\"w-4 h-4 text-emerald-400 shrink-0 mt-0.5\" />\n ) : (\n <X className=\"w-4 h-4 text-sg-text-muted/40 shrink-0 mt-0.5\" />\n )}\n <span className={twMerge(\n 'text-sm',\n feature.included ? 'text-foreground' : 'text-sg-text-muted',\n )}>\n {feature.label}\n </span>\n </li>\n ))}\n </ul>\n\n {/* CTA */}\n <button\n onClick={onSelect}\n disabled={current}\n className={twMerge(\n 'w-full h-10 rounded-full text-sm cursor-pointer transition-all duration-200',\n 'disabled:cursor-not-allowed',\n current\n ? 'bg-white/[0.03] border border-white/10 text-sg-text-muted'\n : highlighted\n ? 'bg-gradient-to-r from-blue-600 to-indigo-600 text-white shadow-[0_4px_20px_rgba(37,99,235,0.3)] hover:shadow-[0_6px_25px_rgba(37,99,235,0.4)] hover:brightness-110'\n : 'bg-white/[0.03] border border-white/10 text-foreground hover:bg-white/[0.08] hover:border-white/20',\n )}\n >\n {current ? 'Current Plan' : ctaLabel}\n </button>\n </div>\n </div>\n );\n}","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { TrendingDown, Lightbulb } from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n RecommendationCard — Actionable optimization suggestions\n @level L3 — Organism: Optimization recommendation card\n ═══════════════════════════════════════════════════════════════\n\n Usage:\n <RecommendationCard\n title=\"Right-size your Lambda\"\n description=\"fn-api-handler is over-provisioned. Reduce memory from 1024MB to 256MB.\"\n impact=\"high\"\n savings=\"$42/mo\"\n onApply={() => {}}\n onDismiss={() => {}}\n />\n ═══════════════════════════════════════════════════════════════ */\n\ntype Impact = 'high' | 'medium' | 'low';\n\nconst impactStyles: Record<Impact, { bg: string; text: string; border: string; dot: string }> = {\n high: { bg: 'bg-emerald-500/5', text: 'text-emerald-400', border: 'border-emerald-500/20', dot: 'bg-emerald-400' },\n medium: { bg: 'bg-amber-500/5', text: 'text-amber-400', border: 'border-amber-500/20', dot: 'bg-amber-400' },\n low: { bg: 'bg-blue-500/5', text: 'text-blue-400', border: 'border-blue-500/20', dot: 'bg-blue-400' },\n};\n\nexport interface RecommendationCardProps {\n title: string;\n description: string;\n impact: Impact;\n savings?: string;\n icon?: LucideIcon;\n onApply?: () => void;\n onDismiss?: () => void;\n applyLabel?: string;\n dismissLabel?: string;\n applied?: boolean;\n className?: string;\n}\n\nexport function RecommendationCard({\n title,\n description,\n impact,\n savings,\n icon: Icon = Lightbulb,\n onApply,\n onDismiss,\n applyLabel = 'Apply',\n dismissLabel = 'Dismiss',\n applied = false,\n className,\n}: RecommendationCardProps) {\n const style = impactStyles[impact];\n\n return (\n <div\n className={twMerge(\n 'rounded-xl border p-4 transition-all duration-200',\n applied ? 'bg-white/[0.01] border-white/[0.03] opacity-60' : 'bg-white/[0.02] border-white/5',\n className,\n )}\n >\n <div className=\"flex items-start gap-3\">\n {/* Icon */}\n <div className={twMerge(\n 'shrink-0 w-9 h-9 rounded-lg flex items-center justify-center',\n style.bg,\n )}>\n <Icon className={twMerge('w-4.5 h-4.5', style.text)} />\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-start justify-between gap-3 mb-1\">\n <h4 className=\"text-sm text-foreground\">{title}</h4>\n <div className=\"flex items-center gap-2 shrink-0\">\n {/* Impact badge */}\n <span className={twMerge(\n 'inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full border text-[9px] font-bold uppercase tracking-wider',\n style.bg, style.text, style.border,\n )}>\n <span className={twMerge('w-1.5 h-1.5 rounded-full', style.dot)} />\n {impact}\n </span>\n </div>\n </div>\n\n <p className=\"text-sm text-muted-foreground mb-3\">{description}</p>\n\n {/* Savings + Actions row */}\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n {savings && (\n <div className=\"flex items-center gap-1.5 text-emerald-400 shrink-0\">\n <TrendingDown className=\"w-3.5 h-3.5\" />\n <span className=\"text-xs font-mono font-bold\">{savings}</span>\n <span className=\"text-[10px] text-sg-text-muted\">estimated savings</span>\n </div>\n )}\n\n {!applied && (onApply || onDismiss) && (\n <div className=\"flex items-center gap-2 ml-auto\">\n {onDismiss && (\n <button\n onClick={onDismiss}\n className=\"px-3 h-7 rounded-lg text-xs text-sg-text-muted hover:text-white hover:bg-white/5 transition-colors cursor-pointer\"\n >\n {dismissLabel}\n </button>\n )}\n {onApply && (\n <button\n onClick={onApply}\n className={twMerge(\n 'px-3 h-7 rounded-lg text-xs cursor-pointer transition-all duration-200',\n 'bg-emerald-500/10 text-emerald-400 border border-emerald-500/20',\n 'hover:bg-emerald-500/15 hover:border-emerald-500/30',\n )}\n >\n {applyLabel}\n </button>\n )}\n </div>\n )}\n\n {applied && (\n <span className=\"text-xs text-emerald-400/60 ml-auto\">Applied</span>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}","import React, { useCallback } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { Check, Minus, X } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n PermissionMatrix — Role x Permission grid with checkboxes\n @level L3 — Organism: Role-based permission matrix grid\n ═══════════════════════════════════════════════════════════════\n\n Usage:\n <PermissionMatrix\n roles={[{ id: 'admin', label: 'Admin' }, { id: 'dev', label: 'Developer' }]}\n permissions={[\n { id: 'deploy', label: 'Deploy', group: 'Actions' },\n { id: 'view-logs', label: 'View Logs', group: 'Read' },\n ]}\n values={{ deploy: { admin: true, dev: true }, 'view-logs': { admin: true, dev: 'partial' } }}\n onChange={(permId, roleId, value) => {}}\n />\n ═══════════════════════════════════════════════════════════════ */\n\ntype CellValue = boolean | 'partial';\n\nexport interface PermissionRole {\n id: string;\n label: string;\n description?: string;\n}\n\nexport interface Permission {\n id: string;\n label: string;\n description?: string;\n group?: string;\n}\n\nexport interface PermissionMatrixProps {\n roles: PermissionRole[];\n permissions: Permission[];\n values: Record<string, Record<string, CellValue>>;\n onChange?: (permissionId: string, roleId: string, value: boolean) => void;\n readOnly?: boolean;\n className?: string;\n}\n\nfunction CellIcon({ value }: { value: CellValue | undefined }) {\n if (value === true) {\n return (\n <div className=\"w-5 h-5 rounded-md bg-emerald-500/15 flex items-center justify-center\">\n <Check className=\"w-3 h-3 text-emerald-400\" />\n </div>\n );\n }\n if (value === 'partial') {\n return (\n <div className=\"w-5 h-5 rounded-md bg-amber-500/15 flex items-center justify-center\">\n <Minus className=\"w-3 h-3 text-amber-400\" />\n </div>\n );\n }\n return (\n <div className=\"w-5 h-5 rounded-md bg-white/[0.03] flex items-center justify-center\">\n <X className=\"w-3 h-3 text-sg-text-muted/30\" />\n </div>\n );\n}\n\nexport function PermissionMatrix({\n roles,\n permissions,\n values,\n onChange,\n readOnly = false,\n className,\n}: PermissionMatrixProps) {\n const handleToggle = useCallback((permId: string, roleId: string) => {\n if (readOnly || !onChange) return;\n const current = values[permId]?.[roleId];\n onChange(permId, roleId, !current);\n }, [values, onChange, readOnly]);\n\n // Group permissions\n const groups = React.useMemo(() => {\n const map = new Map<string, Permission[]>();\n for (const perm of permissions) {\n const group = perm.group || '';\n if (!map.has(group)) map.set(group, []);\n map.get(group)!.push(perm);\n }\n return map;\n }, [permissions]);\n\n return (\n <div className={twMerge('overflow-x-auto -mx-1 px-1', className)}>\n <table className=\"w-full text-sm\" style={{ minWidth: `${140 + roles.length * 90}px` }}>\n {/* Header */}\n <thead>\n <tr className=\"border-b border-white/5\">\n <th className=\"text-left text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted py-3 px-3 min-w-[120px] sm:min-w-[180px] sticky left-0 bg-background z-10\">\n Permission\n </th>\n {roles.map((role) => (\n <th\n key={role.id}\n className=\"text-center text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted py-3 px-2 sm:px-3 min-w-[80px] sm:min-w-[110px]\"\n >\n <div className=\"truncate\">{role.label}</div>\n {role.description && (\n <div className=\"font-normal normal-case tracking-normal text-sg-text-muted/60 mt-0.5 truncate\">\n {role.description}\n </div>\n )}\n </th>\n ))}\n </tr>\n </thead>\n\n {/* Body */}\n <tbody>\n {Array.from(groups.entries()).flatMap(([group, perms], gi) => {\n const rows: React.ReactElement[] = [];\n\n // Group header\n if (group) {\n rows.push(\n <tr key={`group-${gi}`}>\n <td\n colSpan={roles.length + 1}\n className=\"pt-4 pb-2 px-3 text-[10px] font-bold uppercase tracking-[0.2em] text-muted-foreground sticky left-0 bg-background\"\n >\n {group}\n </td>\n </tr>\n );\n }\n\n // Permission rows\n for (const perm of perms) {\n rows.push(\n <tr key={perm.id} className=\"border-b border-white/[0.03] hover:bg-white/[0.01] transition-colors\">\n <td className=\"py-2.5 px-3 text-foreground sticky left-0 bg-background z-10\">\n <div className=\"truncate\">{perm.label}</div>\n {perm.description && (\n <div className=\"text-[10px] text-sg-text-muted mt-0.5\">{perm.description}</div>\n )}\n </td>\n {roles.map((role) => {\n const cellValue = values[perm.id]?.[role.id];\n return (\n <td key={role.id} className=\"py-2.5 px-3 text-center\">\n <button\n onClick={() => handleToggle(perm.id, role.id)}\n disabled={readOnly}\n className={twMerge(\n 'inline-flex items-center justify-center',\n readOnly\n ? 'cursor-default'\n : 'cursor-pointer hover:scale-110 transition-transform',\n )}\n aria-label={`${perm.label} for ${role.label}`}\n >\n <CellIcon value={cellValue} />\n </button>\n </td>\n );\n })}\n </tr>\n );\n }\n\n return rows;\n })}\n </tbody>\n </table>\n </div>\n );\n}","import React, { useState, useMemo, useCallback } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { Clock, Calendar, Play } from 'lucide-react';\n\n// ═══════════════════════════════════════════════════════════════\n// CronEditor — Visual cron expression builder + preview\n// @level L3 — Organism: Visual cron builder with preview\n// ═══════════════════════════════════════════════════════════════\n//\n// Usage:\n// <CronEditor value=\"0 */6 * * *\" onChange={fn} showNextRuns />\n//\n// ═══════════════════════════════════════════════════════════════\n\nexport interface CronPreset {\n label: string;\n value: string;\n}\n\nexport interface CronEditorProps {\n value: string;\n onChange: (expression: string) => void;\n presets?: CronPreset[];\n showPreview?: boolean;\n showNextRuns?: boolean;\n nextRunCount?: number;\n label?: string;\n error?: string;\n className?: string;\n}\n\nconst DEFAULT_PRESETS: CronPreset[] = [\n { label: 'Every minute', value: '* * * * *' },\n { label: 'Every 5 min', value: '*/5 * * * *' },\n { label: 'Every 15 min', value: '*/15 * * * *' },\n { label: 'Every hour', value: '0 * * * *' },\n { label: 'Every 6 hours', value: '0 */6 * * *' },\n { label: 'Daily at midnight', value: '0 0 * * *' },\n { label: 'Weekly (Mon 9am)', value: '0 9 * * 1' },\n { label: 'Monthly (1st)', value: '0 0 1 * *' },\n];\n\nconst FIELD_LABELS = ['Minute', 'Hour', 'Day', 'Month', 'Weekday'] as const;\n\nfunction parseCron(expr: string): string[] {\n const parts = expr.trim().split(/\\s+/);\n while (parts.length < 5) parts.push('*');\n return parts.slice(0, 5);\n}\n\nfunction describeCron(expr: string): string {\n const parts = parseCron(expr);\n const [min, hour, dom, mon, dow] = parts;\n\n if (expr === '* * * * *') return 'Runs every minute';\n if (min.startsWith('*/') && hour === '*' && dom === '*' && mon === '*' && dow === '*') {\n return `Runs every ${min.slice(2)} minutes`;\n }\n if (min === '0' && hour.startsWith('*/') && dom === '*' && mon === '*' && dow === '*') {\n return `Runs every ${hour.slice(2)} hours`;\n }\n if (min === '0' && hour === '*' && dom === '*' && mon === '*' && dow === '*') {\n return 'Runs every hour at :00';\n }\n if (min !== '*' && hour !== '*' && dom === '*' && mon === '*' && dow === '*') {\n return `Runs daily at ${hour.padStart(2, '0')}:${min.padStart(2, '0')}`;\n }\n if (min !== '*' && hour !== '*' && dom === '*' && mon === '*' && dow !== '*') {\n const days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n const dayName = days[parseInt(dow)] || dow;\n return `Runs weekly on ${dayName} at ${hour.padStart(2, '0')}:${min.padStart(2, '0')}`;\n }\n if (min !== '*' && hour !== '*' && dom !== '*' && mon === '*' && dow === '*') {\n return `Runs monthly on day ${dom} at ${hour.padStart(2, '0')}:${min.padStart(2, '0')}`;\n }\n return `Cron: ${expr}`;\n}\n\nfunction getNextRuns(expr: string, count: number): Date[] {\n const parts = parseCron(expr);\n const [minExpr, hourExpr, domExpr, monExpr, dowExpr] = parts;\n const runs: Date[] = [];\n const cursor = new Date();\n cursor.setSeconds(0, 0);\n cursor.setMinutes(cursor.getMinutes() + 1);\n\n const matches = (val: number, fieldExpr: string): boolean => {\n if (fieldExpr === '*') return true;\n if (fieldExpr.startsWith('*/')) return val % parseInt(fieldExpr.slice(2)) === 0;\n return fieldExpr.split(',').some(p => {\n if (p.includes('-')) {\n const [a, b] = p.split('-').map(Number);\n return val >= a && val <= b;\n }\n return val === parseInt(p);\n });\n };\n\n let iterations = 0;\n while (runs.length < count && iterations < 525960) {\n iterations++;\n const m = cursor.getMinutes();\n const h = cursor.getHours();\n const d = cursor.getDate();\n const mo = cursor.getMonth() + 1;\n const w = cursor.getDay();\n\n if (\n matches(m, minExpr) &&\n matches(h, hourExpr) &&\n matches(d, domExpr) &&\n matches(mo, monExpr) &&\n matches(w, dowExpr)\n ) {\n runs.push(new Date(cursor));\n }\n cursor.setMinutes(cursor.getMinutes() + 1);\n }\n\n return runs;\n}\n\nexport function CronEditor({\n value,\n onChange,\n presets,\n showPreview = true,\n showNextRuns = false,\n nextRunCount = 5,\n label,\n error,\n className,\n}: CronEditorProps) {\n const [mode, setMode] = useState<'presets' | 'manual'>('presets');\n const presetList = presets || DEFAULT_PRESETS;\n const fields = useMemo(() => parseCron(value), [value]);\n\n const description = useMemo(() => describeCron(value), [value]);\n const nextRuns = useMemo(\n () => showNextRuns ? getNextRuns(value, nextRunCount) : [],\n [value, showNextRuns, nextRunCount],\n );\n\n const updateField = useCallback((idx: number, val: string) => {\n const newFields = [...fields];\n newFields[idx] = val || '*';\n onChange(newFields.join(' '));\n }, [fields, onChange]);\n\n return (\n <div className={twMerge('w-full space-y-3', className)}>\n {label && (\n <label className=\"block text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted\">\n {label}\n </label>\n )}\n\n {/* Mode toggle */}\n <div className=\"flex gap-1 bg-white/[0.02] border border-white/5 rounded-xl p-1 w-fit\">\n {(['presets', 'manual'] as const).map((m) => (\n <button\n key={m}\n onClick={() => setMode(m)}\n className={twMerge(\n 'px-3 py-1.5 rounded-lg text-xs cursor-pointer transition-all duration-200',\n mode === m\n ? 'bg-white/[0.06] text-white'\n : 'text-muted-foreground hover:text-white',\n )}\n >\n {m === 'presets' ? 'Presets' : 'Manual'}\n </button>\n ))}\n </div>\n\n {mode === 'presets' ? (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-2\">\n {presetList.map((preset) => (\n <button\n key={preset.value}\n onClick={() => onChange(preset.value)}\n className={twMerge(\n 'flex items-center gap-2 px-3 py-2 rounded-xl text-sm cursor-pointer transition-all duration-200 text-left',\n value === preset.value\n ? 'bg-blue-500/10 text-blue-400 border border-blue-500/20'\n : 'bg-white/[0.02] border border-white/5 text-muted-foreground hover:bg-white/[0.04] hover:text-white',\n )}\n >\n <Clock className=\"w-3.5 h-3.5 shrink-0\" />\n {preset.label}\n </button>\n ))}\n </div>\n ) : (\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n <input\n value={value}\n onChange={(e) => onChange(e.target.value)}\n className={twMerge(\n 'flex-1 h-10 px-3.5 rounded-xl text-sm font-mono',\n 'bg-white/[0.03] border text-foreground',\n error ? 'border-red-500/30' : 'border-white/5',\n 'focus:border-blue-500/50 focus:outline-none focus:ring-2 focus:ring-blue-500/20',\n 'transition-all duration-200',\n )}\n placeholder=\"* * * * *\"\n spellCheck={false}\n />\n </div>\n\n <div className=\"overflow-x-auto pb-1\">\n <div className=\"flex gap-2 min-w-[280px]\">\n {FIELD_LABELS.map((fieldLabel, i) => (\n <div key={fieldLabel} className=\"flex-1 min-w-0\">\n <label className=\"block text-[9px] font-bold uppercase tracking-[0.15em] text-sg-text-muted mb-1 text-center\">\n {fieldLabel}\n </label>\n <input\n value={fields[i] || '*'}\n onChange={(e) => updateField(i, e.target.value)}\n className={twMerge(\n 'w-full h-8 px-2 rounded-lg text-xs font-mono text-center',\n 'bg-white/[0.03] border border-white/5 text-foreground',\n 'focus:border-blue-500/50 focus:outline-none focus:ring-2 focus:ring-blue-500/20',\n 'transition-all duration-200',\n )}\n spellCheck={false}\n />\n </div>\n ))}\n </div>\n </div>\n </div>\n )}\n\n {showPreview && (\n <div className=\"flex items-center gap-2 px-3 py-2 rounded-xl bg-white/[0.02] border border-white/5\">\n <Calendar className=\"w-3.5 h-3.5 text-blue-400 shrink-0\" />\n <span className=\"text-sm text-foreground\">{description}</span>\n </div>\n )}\n\n {showNextRuns && nextRuns.length > 0 && (\n <div className=\"space-y-1\">\n <span className=\"text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted\">\n Next runs\n </span>\n <div className=\"space-y-0.5\">\n {nextRuns.map((run, i) => (\n <div key={i} className=\"flex items-center gap-2 text-xs\">\n <Play className=\"w-3 h-3 text-sg-text-muted/40\" />\n <span className=\"font-mono text-muted-foreground\">\n {run.toLocaleString(undefined, {\n weekday: 'short', month: 'short', day: 'numeric',\n hour: '2-digit', minute: '2-digit',\n })}\n </span>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {error && <p className=\"text-xs text-red-400\">{error}</p>}\n </div>\n );\n}","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { Check, X, Loader2, Minus } from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n StepIndicator — Pipeline / process step visualization\n @level L2 — Molecule: Multi-step progress dots + connectors\n ═══════════════════════════════════════════════════════════════\n\n Usage:\n <StepIndicator\n steps={[\n { id: 'build', label: 'Build', status: 'completed', duration: '2m 13s' },\n { id: 'test', label: 'Test', status: 'active' },\n { id: 'deploy', label: 'Deploy', status: 'pending' },\n ]}\n orientation=\"horizontal\"\n />\n ═══════════════════════════════════════════════════════════════ */\n\ntype StepStatus = 'pending' | 'active' | 'completed' | 'failed' | 'skipped';\n\nconst statusStyles: Record<StepStatus, { dot: string; label: string; connector: string }> = {\n pending: { dot: 'border-white/10 bg-transparent', label: 'text-sg-text-muted', connector: 'bg-white/5' },\n active: { dot: 'border-blue-500 bg-blue-500/20 shadow-[0_0_12px_rgba(59,130,246,0.3)]', label: 'text-foreground', connector: 'bg-white/5' },\n completed: { dot: 'border-emerald-500 bg-emerald-500/20', label: 'text-muted-foreground', connector: 'bg-emerald-500/30' },\n failed: { dot: 'border-red-500 bg-red-500/20', label: 'text-red-400', connector: 'bg-red-500/30' },\n skipped: { dot: 'border-white/10 bg-white/[0.03]', label: 'text-sg-text-muted', connector: 'bg-white/5' },\n};\n\nconst statusIcons: Record<StepStatus, React.ReactNode> = {\n pending: null,\n active: <Loader2 className=\"w-3.5 h-3.5 text-blue-400 animate-spin\" />,\n completed: <Check className=\"w-3.5 h-3.5 text-emerald-400\" />,\n failed: <X className=\"w-3.5 h-3.5 text-red-400\" />,\n skipped: <Minus className=\"w-3.5 h-3.5 text-sg-text-muted\" />,\n};\n\nexport interface Step {\n id: string;\n label: string;\n description?: string;\n status: StepStatus;\n duration?: string;\n icon?: LucideIcon;\n}\n\nexport interface StepIndicatorProps {\n steps: Step[];\n orientation?: 'horizontal' | 'vertical';\n size?: 'sm' | 'md';\n onStepClick?: (step: Step) => void;\n className?: string;\n}\n\nexport function StepIndicator({\n steps,\n orientation: orientationProp,\n size = 'md',\n onStepClick,\n className,\n}: StepIndicatorProps) {\n // Switch to vertical on mobile if not explicitly set\n const [isMobile, setIsMobile] = React.useState(false);\n \n React.useEffect(() => {\n const check = () => setIsMobile(window.innerWidth < 640);\n check();\n window.addEventListener('resize', check);\n return () => window.removeEventListener('resize', check);\n }, []);\n\n const orientation = orientationProp || (isMobile ? 'vertical' : 'horizontal');\n const isHorizontal = orientation === 'horizontal';\n const dotSize = size === 'sm' ? 'w-6 h-6' : 'w-8 h-8';\n\n return (\n <div\n className={twMerge(\n isHorizontal\n ? 'flex items-start w-full'\n : 'flex flex-col',\n className,\n )}\n >\n {steps.flatMap((step, i) => {\n const style = statusStyles[step.status];\n const icon = step.icon ? <step.icon className={twMerge('w-3.5 h-3.5', style.label)} /> : statusIcons[step.status];\n const isLast = i === steps.length - 1;\n const elements: React.ReactElement[] = [];\n\n elements.push(\n <div\n key={step.id}\n className={twMerge(\n isHorizontal ? 'flex flex-col items-center flex-1 min-w-0' : 'flex items-start gap-3',\n onStepClick && 'cursor-pointer',\n )}\n onClick={() => onStepClick?.(step)}\n >\n {/* Dot */}\n <div className=\"flex items-center shrink-0\">\n {/* Left connector (vertical mode) */}\n {!isHorizontal && i > 0 && (\n <div className=\"sr-only\" />\n )}\n <div\n className={twMerge(\n 'rounded-full border-2 flex items-center justify-center transition-all duration-200',\n dotSize,\n style.dot,\n )}\n >\n {step.status === 'pending' && (\n <span className=\"text-[10px] font-mono font-bold text-sg-text-muted\">{i + 1}</span>\n )}\n {step.status !== 'pending' && icon}\n </div>\n </div>\n\n {/* Label + description */}\n <div className={twMerge(\n isHorizontal ? 'mt-2 text-center w-full' : 'pt-0.5',\n )}>\n <div className={twMerge('text-sm transition-colors', style.label)}>\n {step.label}\n </div>\n {step.description && (\n <div className=\"text-[10px] text-sg-text-muted mt-0.5\">{step.description}</div>\n )}\n {step.duration && (\n <div className=\"text-[10px] font-mono text-sg-text-muted mt-0.5\">{step.duration}</div>\n )}\n </div>\n </div>\n );\n\n // Connector line between steps\n if (!isLast) {\n const prevDone = step.status === 'completed';\n elements.push(\n isHorizontal ? (\n <div\n key={`conn-${i}`}\n className={twMerge(\n 'flex-1 h-0.5 mt-4 mx-1 rounded-full transition-colors',\n size === 'sm' && 'mt-3',\n prevDone ? style.connector : 'bg-white/5',\n )}\n style={{ minWidth: 16 }}\n />\n ) : (\n <div\n key={`conn-${i}`}\n className={twMerge(\n 'w-0.5 rounded-full ml-[15px] transition-colors',\n size === 'sm' ? 'h-6 ml-[11px]' : 'h-8',\n prevDone ? style.connector : 'bg-white/5',\n )}\n />\n )\n );\n }\n\n return elements;\n })}\n </div>\n );\n}","import React, { useCallback } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { Plus, Trash2 } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n TrafficSplitter — Multi-target percentage split (sum = 100%)\n @level L3 — Organism: Traffic percentage allocation with sliders\n ═══════════════════════════════════════════════════════════════\n\n Usage:\n <TrafficSplitter\n splits={[\n { id: 'v1', label: 'v1.2.0 (stable)', percentage: 90 },\n { id: 'v2', label: 'v1.3.0-rc1 (canary)', percentage: 10 },\n ]}\n onChange={setSplits}\n />\n ═══════════════════════════════════════════════════════════════ */\n\nconst SPLIT_COLORS = [\n { bar: 'bg-blue-500', text: 'text-blue-400', bg: 'bg-blue-500/10', border: 'border-blue-500/20' },\n { bar: 'bg-indigo-500', text: 'text-indigo-400', bg: 'bg-indigo-500/10', border: 'border-indigo-500/20' },\n { bar: 'bg-emerald-500', text: 'text-emerald-400', bg: 'bg-emerald-500/10',border: 'border-emerald-500/20' },\n { bar: 'bg-amber-500', text: 'text-amber-400', bg: 'bg-amber-500/10', border: 'border-amber-500/20' },\n { bar: 'bg-purple-500', text: 'text-purple-400', bg: 'bg-purple-500/10', border: 'border-purple-500/20' },\n];\n\nexport interface TrafficSplit {\n id: string;\n label: string;\n version?: string;\n percentage: number;\n color?: string;\n}\n\nexport interface TrafficSplitterProps {\n splits: TrafficSplit[];\n onChange: (splits: TrafficSplit[]) => void;\n min?: number;\n maxTargets?: number;\n label?: string;\n onAddTarget?: () => void;\n addTargetLabel?: string;\n className?: string;\n}\n\nexport function TrafficSplitter({\n splits,\n onChange,\n min = 0,\n maxTargets = 5,\n label,\n onAddTarget,\n addTargetLabel = 'Add target',\n className,\n}: TrafficSplitterProps) {\n const total = splits.reduce((sum, s) => sum + s.percentage, 0);\n\n const handleSliderChange = useCallback((idx: number, newPct: number) => {\n const clamped = Math.max(min, Math.min(100, newPct));\n const diff = clamped - splits[idx].percentage;\n if (diff === 0) return;\n\n const newSplits = splits.map((s, i) => ({ ...s }));\n newSplits[idx].percentage = clamped;\n\n // Distribute the difference among other targets\n const otherIndices = newSplits\n .map((_, i) => i)\n .filter(i => i !== idx && newSplits[i].percentage > min);\n\n if (otherIndices.length > 0) {\n let remaining = -diff;\n for (let j = 0; j < otherIndices.length; j++) {\n const oi = otherIndices[j];\n const share = j === otherIndices.length - 1\n ? remaining\n : Math.round(remaining / (otherIndices.length - j));\n const newVal = Math.max(min, newSplits[oi].percentage + share);\n const applied = newVal - newSplits[oi].percentage;\n newSplits[oi].percentage = newVal;\n remaining -= applied;\n }\n }\n\n // Normalize to exactly 100\n const newTotal = newSplits.reduce((s, t) => s + t.percentage, 0);\n if (newTotal !== 100 && newSplits.length > 1) {\n const adjust = 100 - newTotal;\n const adjustIdx = newSplits.findIndex((_, i) => i !== idx && newSplits[i].percentage > min);\n if (adjustIdx >= 0) {\n newSplits[adjustIdx].percentage += adjust;\n }\n }\n\n onChange(newSplits);\n }, [splits, onChange, min]);\n\n const handleRemove = useCallback((idx: number) => {\n if (splits.length <= 2) return;\n const removed = splits[idx];\n const remaining = splits.filter((_, i) => i !== idx);\n const share = Math.floor(removed.percentage / remaining.length);\n let leftover = removed.percentage - share * remaining.length;\n const result = remaining.map((s, i) => ({\n ...s,\n percentage: s.percentage + share + (i === 0 ? leftover : 0),\n }));\n onChange(result);\n }, [splits, onChange]);\n\n return (\n <div className={twMerge('w-full space-y-4', className)}>\n {label && (\n <label className=\"block text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted\">\n {label}\n </label>\n )}\n\n {/* Proportional bar */}\n <div className=\"flex h-3 rounded-full overflow-hidden bg-white/[0.03] border border-white/5\">\n {splits.map((split, i) => {\n const color = SPLIT_COLORS[i % SPLIT_COLORS.length];\n return (\n <div\n key={split.id}\n className={twMerge('transition-all duration-300', color.bar)}\n style={{ width: `${split.percentage}%` }}\n title={`${split.label}: ${split.percentage}%`}\n />\n );\n })}\n </div>\n\n {/* Split rows */}\n <div className=\"space-y-2\">\n {splits.map((split, i) => {\n const color = SPLIT_COLORS[i % SPLIT_COLORS.length];\n return (\n <div\n key={split.id}\n className=\"flex flex-col sm:flex-row sm:items-center gap-2 sm:gap-3 p-2 sm:p-0 rounded-xl bg-white/[0.01] sm:bg-transparent border border-white/5 sm:border-transparent\"\n >\n <div className=\"flex items-center gap-3 flex-1 min-w-0\">\n {/* Color dot */}\n <div className={twMerge('w-3 h-3 rounded-full shrink-0', color.bar)} />\n\n {/* Label */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"text-sm text-foreground truncate\">{split.label}</div>\n {split.version && (\n <div className=\"text-[10px] font-mono text-sg-text-muted\">{split.version}</div>\n )}\n </div>\n </div>\n\n <div className=\"flex items-center gap-3\">\n {/* Slider */}\n <input\n type=\"range\"\n min={min}\n max={100}\n value={split.percentage}\n onChange={(e) => handleSliderChange(i, parseInt(e.target.value))}\n className=\"flex-1 sm:w-24 accent-blue-500 cursor-pointer\"\n />\n\n {/* Percentage input */}\n <div className=\"flex items-center gap-1 shrink-0\">\n <input\n type=\"number\"\n min={min}\n max={100}\n value={split.percentage}\n onChange={(e) => handleSliderChange(i, parseInt(e.target.value) || 0)}\n className={twMerge(\n 'w-12 sm:w-14 h-8 px-2 rounded-lg text-xs font-mono text-center',\n 'bg-white/[0.03] border border-white/5 text-foreground',\n 'focus:border-blue-500/50 focus:outline-none',\n 'transition-all duration-200',\n '[appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none',\n )}\n />\n <span className=\"text-xs text-sg-text-muted\">%</span>\n </div>\n\n {/* Remove */}\n {splits.length > 2 && (\n <button\n onClick={() => handleRemove(i)}\n className=\"p-1 rounded-lg text-sg-text-muted hover:text-red-400 hover:bg-red-500/10 transition-colors cursor-pointer shrink-0\"\n aria-label={`Remove ${split.label}`}\n >\n <Trash2 className=\"w-3.5 h-3.5\" />\n </button>\n )}\n </div>\n </div>\n );\n })}\n </div>\n\n {/* Total indicator */}\n <div className=\"flex items-center justify-between\">\n <div className={twMerge(\n 'text-xs font-mono',\n total === 100 ? 'text-emerald-400' : 'text-red-400',\n )}>\n Total: {total}%\n {total !== 100 && ` (must equal 100%)`}\n </div>\n {onAddTarget && splits.length < maxTargets && (\n <button\n onClick={onAddTarget}\n className=\"inline-flex items-center gap-1.5 px-3 h-7 rounded-lg text-xs text-muted-foreground hover:text-white hover:bg-white/5 transition-colors cursor-pointer\"\n >\n <Plus className=\"w-3.5 h-3.5\" />\n {addTargetLabel}\n </button>\n )}\n </div>\n </div>\n );\n}","import React, { useState, useCallback } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { Send, Loader2, Plus, Trash2, ChevronDown, Copy, Check } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n RequestBuilder — HTTP request builder + response viewer\n @level L3 — Organism: HTTP request builder with headers, body, response\n ═══════════════════════════════════════════════════════════════\n\n Usage:\n <RequestBuilder\n method=\"POST\"\n url=\"/api/invoke\"\n onSend={async (req) => ({ status: 200, body: '{}', duration: 120 })}\n />\n ═══════════════════════════════════════════════════════════════ */\n\ntype HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n\nconst METHOD_COLORS: Record<HttpMethod, string> = {\n GET: 'text-emerald-400',\n POST: 'text-blue-400',\n PUT: 'text-amber-400',\n PATCH: 'text-indigo-400',\n DELETE: 'text-red-400',\n};\n\nexport interface RequestHeader {\n id: string;\n key: string;\n value: string;\n}\n\nexport interface RequestConfig {\n method: HttpMethod;\n url: string;\n headers: RequestHeader[];\n body: string;\n}\n\nexport interface ResponseResult {\n status: number;\n statusText?: string;\n headers?: Record<string, string>;\n body: string;\n duration?: number;\n}\n\nexport interface RequestBuilderProps {\n method?: HttpMethod;\n url?: string;\n headers?: RequestHeader[];\n body?: string;\n onSend?: (request: RequestConfig) => Promise<ResponseResult>;\n readOnlyUrl?: boolean;\n label?: string;\n className?: string;\n}\n\nasync function copyText(text: string) {\n try { await navigator.clipboard.writeText(text); }\n catch { /* fallback omitted for brevity */ }\n}\n\nfunction statusColor(code: number): string {\n if (code >= 200 && code < 300) return 'text-emerald-400 bg-emerald-500/10 border-emerald-500/20';\n if (code >= 300 && code < 400) return 'text-blue-400 bg-blue-500/10 border-blue-500/20';\n if (code >= 400 && code < 500) return 'text-amber-400 bg-amber-500/10 border-amber-500/20';\n return 'text-red-400 bg-red-500/10 border-red-500/20';\n}\n\nlet _headerId = 0;\n\nexport function RequestBuilder({\n method: initialMethod = 'GET',\n url: initialUrl = '',\n headers: initialHeaders,\n body: initialBody = '',\n onSend,\n readOnlyUrl = false,\n label,\n className,\n}: RequestBuilderProps) {\n const [method, setMethod] = useState<HttpMethod>(initialMethod);\n const [url, setUrl] = useState(initialUrl);\n const [activeTab, setActiveTab] = useState<'headers' | 'body'>('body');\n const [headers, setHeaders] = useState<RequestHeader[]>(\n initialHeaders || [{ id: `h${++_headerId}`, key: '', value: '' }]\n );\n const [body, setBody] = useState(initialBody);\n const [response, setResponse] = useState<ResponseResult | null>(null);\n const [loading, setLoading] = useState(false);\n const [copiedResponse, setCopiedResponse] = useState(false);\n\n const handleSend = useCallback(async () => {\n if (!onSend) return;\n setLoading(true);\n setResponse(null);\n try {\n const result = await onSend({\n method,\n url,\n headers: headers.filter(h => h.key.trim()),\n body,\n });\n setResponse(result);\n } catch (err: any) {\n setResponse({\n status: 0,\n body: err.message || 'Request failed',\n });\n } finally {\n setLoading(false);\n }\n }, [onSend, method, url, headers, body]);\n\n const addHeader = useCallback(() => {\n setHeaders(prev => [...prev, { id: `h${++_headerId}`, key: '', value: '' }]);\n }, []);\n\n const removeHeader = useCallback((id: string) => {\n setHeaders(prev => prev.filter(h => h.id !== id));\n }, []);\n\n const updateHeader = useCallback((id: string, field: 'key' | 'value', val: string) => {\n setHeaders(prev => prev.map(h => h.id === id ? { ...h, [field]: val } : h));\n }, []);\n\n const handleCopyResponse = useCallback(async () => {\n if (response) {\n await copyText(response.body);\n setCopiedResponse(true);\n setTimeout(() => setCopiedResponse(false), 2000);\n }\n }, [response]);\n\n const inputBase = 'bg-white/[0.03] border border-white/5 text-foreground focus:border-blue-500/50 focus:outline-none focus:ring-2 focus:ring-blue-500/20 transition-all duration-200';\n\n return (\n <div className={twMerge('w-full space-y-3', className)}>\n {label && (\n <label className=\"block text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted\">\n {label}\n </label>\n )}\n\n {/* Method + URL + Send */}\n <div className=\"flex flex-col sm:flex-row gap-2\">\n <div className=\"flex gap-2 flex-1\">\n <select\n value={method}\n onChange={(e) => setMethod(e.target.value as HttpMethod)}\n className={twMerge(\n 'h-10 px-3 rounded-xl text-sm font-bold cursor-pointer shrink-0 min-w-[100px]',\n inputBase,\n METHOD_COLORS[method],\n )}\n >\n {(['GET', 'POST', 'PUT', 'PATCH', 'DELETE'] as HttpMethod[]).map(m => (\n <option key={m} value={m} className=\"bg-sg-elevated text-foreground\">{m}</option>\n ))}\n </select>\n\n <input\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n readOnly={readOnlyUrl}\n placeholder=\"Enter URL or path...\"\n className={twMerge('flex-1 h-10 px-3.5 rounded-xl text-sm font-mono min-w-0', inputBase)}\n />\n </div>\n\n <button\n onClick={handleSend}\n disabled={loading || !onSend}\n className={twMerge(\n 'inline-flex items-center justify-center gap-2 px-6 h-10 rounded-full text-sm cursor-pointer sm:shrink-0',\n 'bg-gradient-to-r from-blue-600 to-indigo-600 text-white',\n 'shadow-[0_4px_20px_rgba(37,99,235,0.3)]',\n 'hover:shadow-[0_6px_25px_rgba(37,99,235,0.4)] hover:brightness-110',\n 'disabled:opacity-40 disabled:pointer-events-none',\n 'transition-all duration-200',\n )}\n >\n {loading ? <Loader2 className=\"w-4 h-4 animate-spin\" /> : <Send className=\"w-4 h-4\" />}\n Send\n </button>\n </div>\n\n {/* Tabs: Headers / Body */}\n <div className=\"flex gap-1 bg-white/[0.02] border border-white/5 rounded-xl p-1 w-fit\">\n {(['headers', 'body'] as const).map((tab) => (\n <button\n key={tab}\n onClick={() => setActiveTab(tab)}\n className={twMerge(\n 'px-3 py-1.5 rounded-lg text-xs capitalize cursor-pointer transition-all duration-200',\n activeTab === tab\n ? 'bg-white/[0.06] text-white'\n : 'text-muted-foreground hover:text-white',\n )}\n >\n {tab}\n {tab === 'headers' && headers.filter(h => h.key.trim()).length > 0 && (\n <span className=\"ml-1.5 text-[9px] text-blue-400\">{headers.filter(h => h.key.trim()).length}</span>\n )}\n </button>\n ))}\n </div>\n\n {/* Headers editor */}\n {activeTab === 'headers' && (\n <div className=\"space-y-2\">\n {headers.map((header) => (\n <div key={header.id} className=\"flex gap-2 items-center\">\n <input\n value={header.key}\n onChange={(e) => updateHeader(header.id, 'key', e.target.value)}\n placeholder=\"Header name\"\n className={twMerge('flex-1 h-8 px-3 rounded-lg text-xs font-mono', inputBase)}\n />\n <input\n value={header.value}\n onChange={(e) => updateHeader(header.id, 'value', e.target.value)}\n placeholder=\"Value\"\n className={twMerge('flex-1 h-8 px-3 rounded-lg text-xs font-mono', inputBase)}\n />\n <button\n onClick={() => removeHeader(header.id)}\n className=\"p-1 rounded text-sg-text-muted hover:text-red-400 transition-colors cursor-pointer shrink-0\"\n >\n <Trash2 className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n ))}\n <button\n onClick={addHeader}\n className=\"inline-flex items-center gap-1 text-xs text-sg-text-muted hover:text-white transition-colors cursor-pointer\"\n >\n <Plus className=\"w-3 h-3\" /> Add header\n </button>\n </div>\n )}\n\n {/* Body editor */}\n {activeTab === 'body' && (\n <textarea\n value={body}\n onChange={(e) => setBody(e.target.value)}\n placeholder='{\"key\": \"value\"}'\n rows={6}\n className={twMerge(\n 'w-full px-3.5 py-2.5 rounded-xl text-sm font-mono resize-y',\n inputBase,\n )}\n spellCheck={false}\n />\n )}\n\n {/* Response */}\n {response && (\n <div className=\"rounded-xl border border-white/5 overflow-hidden\">\n {/* Response header */}\n <div className=\"flex items-center justify-between px-4 py-2 bg-white/[0.02] border-b border-white/5\">\n <div className=\"flex items-center gap-3\">\n <span className={twMerge(\n 'inline-flex items-center px-2 py-0.5 rounded-full border text-[10px] font-bold font-mono',\n statusColor(response.status),\n )}>\n {response.status || 'ERR'}\n {response.statusText && ` ${response.statusText}`}\n </span>\n {response.duration !== undefined && (\n <span className=\"text-xs font-mono text-sg-text-muted\">{response.duration}ms</span>\n )}\n </div>\n <button\n onClick={handleCopyResponse}\n className=\"p-1.5 rounded-lg text-sg-text-muted hover:text-white hover:bg-white/5 transition-colors cursor-pointer\"\n >\n {copiedResponse\n ? <Check className=\"w-3.5 h-3.5 text-emerald-400\" />\n : <Copy className=\"w-3.5 h-3.5\" />\n }\n </button>\n </div>\n {/* Response body */}\n <pre className=\"p-4 bg-background font-mono text-sm text-foreground overflow-auto max-h-[300px] whitespace-pre-wrap\">\n {response.body}\n </pre>\n </div>\n )}\n </div>\n );\n}","import React, { useState, useMemo } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { ChevronRight, ChevronDown } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n TraceWaterfall — Distributed tracing Gantt-style span viewer\n @level L3 — Organism: Distributed tracing waterfall chart\n ═══════════════════════════════════════════════════════════════\n\n Usage:\n <TraceWaterfall\n spans={[\n { id: '1', service: 'api-gateway', operation: 'GET /users', startTime: 0, duration: 150, status: 'ok' },\n { id: '2', parentId: '1', service: 'user-service', operation: 'fetchUser', startTime: 20, duration: 80, status: 'ok' },\n { id: '3', parentId: '2', service: 'postgres', operation: 'SELECT', startTime: 30, duration: 45, status: 'error' },\n ]}\n totalDuration={150}\n />\n ═══════════════════════════════════════════════════════════════ */\n\ntype SpanStatus = 'ok' | 'error' | 'timeout';\n\nconst statusBarColors: Record<SpanStatus, string> = {\n ok: 'bg-blue-500',\n error: 'bg-red-500',\n timeout: 'bg-amber-500',\n};\n\nconst statusTextColors: Record<SpanStatus, string> = {\n ok: 'text-blue-400',\n error: 'text-red-400',\n timeout: 'text-amber-400',\n};\n\nexport interface TraceSpan {\n id: string;\n parentId?: string;\n service: string;\n operation: string;\n startTime: number;\n duration: number;\n status: SpanStatus;\n tags?: Record<string, string>;\n}\n\nexport interface TraceWaterfallProps {\n spans: TraceSpan[];\n totalDuration?: number;\n onSpanClick?: (span: TraceSpan) => void;\n className?: string;\n}\n\ninterface TreeSpan extends TraceSpan {\n depth: number;\n children: TreeSpan[];\n}\n\nfunction buildTree(spans: TraceSpan[]): TreeSpan[] {\n const map = new Map<string, TreeSpan>();\n const roots: TreeSpan[] = [];\n\n for (const span of spans) {\n map.set(span.id, { ...span, depth: 0, children: [] });\n }\n\n for (const span of spans) {\n const node = map.get(span.id)!;\n if (span.parentId && map.has(span.parentId)) {\n const parent = map.get(span.parentId)!;\n node.depth = parent.depth + 1;\n parent.children.push(node);\n } else {\n roots.push(node);\n }\n }\n\n return roots;\n}\n\nfunction flattenTree(nodes: TreeSpan[]): TreeSpan[] {\n const result: TreeSpan[] = [];\n function walk(list: TreeSpan[]) {\n for (const node of list) {\n result.push(node);\n walk(node.children);\n }\n }\n walk(nodes);\n return result;\n}\n\nexport function TraceWaterfall({\n spans,\n totalDuration: totalDurationProp,\n onSpanClick,\n className,\n}: TraceWaterfallProps) {\n const [collapsedIds, setCollapsedIds] = useState<Set<string>>(new Set());\n const [selectedId, setSelectedId] = useState<string | null>(null);\n\n const tree = useMemo(() => buildTree(spans), [spans]);\n const allFlat = useMemo(() => flattenTree(tree), [tree]);\n\n const totalDuration = totalDurationProp || Math.max(...spans.map(s => s.startTime + s.duration), 1);\n\n // Filter visible spans (respect collapsed)\n const visibleSpans = useMemo(() => {\n const hidden = new Set<string>();\n function markHidden(nodes: TreeSpan[]) {\n for (const node of nodes) {\n if (collapsedIds.has(node.id)) {\n function hideChildren(children: TreeSpan[]) {\n for (const child of children) {\n hidden.add(child.id);\n hideChildren(child.children);\n }\n }\n hideChildren(node.children);\n } else {\n markHidden(node.children);\n }\n }\n }\n markHidden(tree);\n return allFlat.filter(s => !hidden.has(s.id));\n }, [allFlat, collapsedIds, tree]);\n\n const toggleCollapse = (id: string) => {\n setCollapsedIds(prev => {\n const next = new Set(prev);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n };\n\n // Time ruler marks\n const marks = useMemo(() => {\n const count = 5;\n return Array.from({ length: count + 1 }, (_, i) => ({\n pct: (i / count) * 100,\n label: `${Math.round((i / count) * totalDuration)}ms`,\n }));\n }, [totalDuration]);\n\n return (\n <div className={twMerge('w-full', className)}>\n <div className=\"overflow-x-auto\">\n <div className=\"min-w-[600px]\">\n {/* Header */}\n <div className=\"flex border-b border-white/5\">\n <div className=\"w-[140px] sm:w-[260px] shrink-0 px-3 py-2 text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted\">\n Service / Operation\n </div>\n <div className=\"flex-1 relative px-2 py-2 overflow-hidden\">\n <div className=\"flex justify-between\">\n {marks.map((m, i) => (\n <span key={i} className=\"text-[9px] font-mono text-sg-text-muted shrink-0\">{m.label}</span>\n ))}\n </div>\n </div>\n </div>\n\n {/* Spans */}\n <div>\n {visibleSpans.map((span) => {\n const leftPct = (span.startTime / totalDuration) * 100;\n const widthPct = Math.max((span.duration / totalDuration) * 100, 0.5);\n const hasChildren = span.children.length > 0;\n const isCollapsed = collapsedIds.has(span.id);\n const isSelected = selectedId === span.id;\n\n return (\n <div\n key={span.id}\n className={twMerge(\n 'flex items-center border-b border-white/[0.03] transition-colors',\n 'hover:bg-white/[0.02]',\n isSelected && 'bg-blue-500/[0.04]',\n onSpanClick && 'cursor-pointer',\n )}\n onClick={() => {\n setSelectedId(span.id);\n onSpanClick?.(span);\n }}\n >\n {/* Label column */}\n <div\n className=\"w-[140px] sm:w-[260px] shrink-0 flex items-center gap-1 px-3 py-2 min-h-[36px]\"\n style={{ paddingLeft: `${8 + span.depth * 12}px` }}\n >\n {/* Expand/collapse toggle */}\n {hasChildren ? (\n <button\n onClick={(e) => { e.stopPropagation(); toggleCollapse(span.id); }}\n className=\"p-0.5 rounded text-sg-text-muted hover:text-white transition-colors cursor-pointer shrink-0\"\n >\n {isCollapsed\n ? <ChevronRight className=\"w-3 h-3\" />\n : <ChevronDown className=\"w-3 h-3\" />\n }\n </button>\n ) : (\n <span className=\"w-4 shrink-0\" />\n )}\n\n <div className=\"min-w-0 truncate\">\n <span className=\"text-xs text-muted-foreground\">{span.service}</span>\n <span className=\"text-xs text-sg-text-muted mx-1\">·</span>\n <span className={twMerge('text-xs', statusTextColors[span.status])}>\n {span.operation}\n </span>\n </div>\n </div>\n\n {/* Waterfall column */}\n <div className=\"flex-1 relative h-[36px] px-2 overflow-hidden\">\n {/* Grid lines */}\n {marks.map((m, i) => (\n <div\n key={i}\n className=\"absolute top-0 bottom-0 w-px bg-white/[0.03]\"\n style={{ left: `${m.pct}%` }}\n />\n ))}\n\n {/* Duration bar */}\n <div\n className={twMerge(\n 'absolute top-1/2 -translate-y-1/2 h-5 rounded-md flex items-center px-1.5 min-w-[2px]',\n statusBarColors[span.status],\n span.status === 'ok' ? 'opacity-70' : 'opacity-80',\n )}\n style={{\n left: `${leftPct}%`,\n width: `${widthPct}%`,\n }}\n >\n {widthPct > 8 && (\n <span className=\"text-[9px] font-mono text-white truncate\">\n {span.duration}ms\n </span>\n )}\n </div>\n\n {/* Duration label outside bar when bar is small */}\n {widthPct <= 8 && (\n <span\n className=\"absolute top-1/2 -translate-y-1/2 text-[9px] font-mono text-sg-text-muted ml-1 whitespace-nowrap\"\n style={{ left: `${Math.min(leftPct + widthPct, 85)}%` }}\n >\n {span.duration}ms\n </span>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n\n {/* Selected span details */}\n {selectedId && (() => {\n const span = spans.find(s => s.id === selectedId);\n if (!span || !span.tags || Object.keys(span.tags).length === 0) return null;\n return (\n <div className=\"mt-3 p-3 rounded-xl bg-white/[0.02] border border-white/5\">\n <div className=\"text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted mb-2\">\n Span Tags\n </div>\n <div className=\"space-y-1\">\n {Object.entries(span.tags).map(([k, v]) => (\n <div key={k} className=\"flex gap-2 text-xs\">\n <span className=\"text-sg-text-muted shrink-0\">{k}:</span>\n <span className=\"text-muted-foreground font-mono truncate\">{v}</span>\n </div>\n ))}\n </div>\n </div>\n );\n })()}\n </div>\n );\n}","import React, { useMemo, useState } from 'react';\nimport { twMerge } from 'tailwind-merge';\n\n/* ═══════════════════════════════════════════════════════════════\n ServiceMap — Node-and-edge dependency graph (pure SVG)\n @level L3 — Organism: Service dependency graph visualization\n ═══════════════════════════════════════════════════════════════\n\n Usage:\n <ServiceMap\n nodes={[\n { id: 'gateway', label: 'API Gateway', status: 'healthy', metrics: { rps: 1200 } },\n { id: 'users', label: 'User Service', status: 'healthy' },\n { id: 'db', label: 'PostgreSQL', status: 'degraded', type: 'database' },\n ]}\n edges={[\n { from: 'gateway', to: 'users', label: '45ms' },\n { from: 'users', to: 'db', label: '12ms', status: 'error' },\n ]}\n onNodeClick={(node) => {}}\n />\n ═══════════════════════════════════════════════════════════════ */\n\ntype NodeStatus = 'healthy' | 'degraded' | 'error' | 'unknown';\ntype EdgeStatus = 'ok' | 'error' | 'slow';\n\nconst nodeStatusColors: Record<NodeStatus, { fill: string; stroke: string; glow: string; dot: string }> = {\n healthy: { fill: '#0E1119', stroke: '#10B981', glow: 'rgba(16,185,129,0.15)', dot: '#10B981' },\n degraded: { fill: '#0E1119', stroke: '#F59E0B', glow: 'rgba(245,158,11,0.15)', dot: '#F59E0B' },\n error: { fill: '#0E1119', stroke: '#EF4444', glow: 'rgba(239,68,68,0.15)', dot: '#EF4444' },\n unknown: { fill: '#0E1119', stroke: '#535C6B', glow: 'rgba(83,92,107,0.1)', dot: '#535C6B' },\n};\n\nconst edgeStatusColors: Record<EdgeStatus, string> = {\n ok: '#535C6B',\n error: '#EF4444',\n slow: '#F59E0B',\n};\n\nexport interface ServiceNode {\n id: string;\n label: string;\n type?: string;\n status: NodeStatus;\n metrics?: { rps?: number; latency?: number; errorRate?: number };\n}\n\nexport interface ServiceEdge {\n from: string;\n to: string;\n label?: string;\n status?: EdgeStatus;\n metrics?: { rps?: number; latency?: number };\n}\n\nexport interface ServiceMapProps {\n nodes: ServiceNode[];\n edges: ServiceEdge[];\n onNodeClick?: (node: ServiceNode) => void;\n width?: number;\n height?: number;\n className?: string;\n}\n\nconst NODE_W = 160;\nconst NODE_H = 64;\nconst H_GAP = 80;\nconst V_GAP = 40;\n\ninterface LayoutNode {\n node: ServiceNode;\n x: number;\n y: number;\n}\n\nfunction layoutNodes(nodes: ServiceNode[], edges: ServiceEdge[]): LayoutNode[] {\n // Simple layered layout: BFS from roots\n const adjFrom = new Map<string, string[]>();\n const inDeg = new Map<string, number>();\n\n for (const n of nodes) {\n adjFrom.set(n.id, []);\n inDeg.set(n.id, 0);\n }\n for (const e of edges) {\n adjFrom.get(e.from)?.push(e.to);\n inDeg.set(e.to, (inDeg.get(e.to) || 0) + 1);\n }\n\n // Assign layers\n const layers: string[][] = [];\n const assigned = new Set<string>();\n let queue = nodes.filter(n => (inDeg.get(n.id) || 0) === 0).map(n => n.id);\n if (queue.length === 0) queue = [nodes[0]?.id].filter(Boolean);\n\n while (queue.length > 0) {\n layers.push([...queue]);\n queue.forEach(id => assigned.add(id));\n const next: string[] = [];\n for (const id of queue) {\n for (const child of (adjFrom.get(id) || [])) {\n if (!assigned.has(child) && !next.includes(child)) {\n next.push(child);\n }\n }\n }\n queue = next;\n }\n\n // Assign any remaining unassigned\n for (const n of nodes) {\n if (!assigned.has(n.id)) {\n layers.push([n.id]);\n assigned.add(n.id);\n }\n }\n\n // Position nodes\n const nodeMap = new Map(nodes.map(n => [n.id, n]));\n const results: LayoutNode[] = [];\n\n for (let li = 0; li < layers.length; li++) {\n const layer = layers[li];\n const layerHeight = layer.length * (NODE_H + V_GAP) - V_GAP;\n const startY = -layerHeight / 2;\n\n for (let ni = 0; ni < layer.length; ni++) {\n const node = nodeMap.get(layer[ni]);\n if (node) {\n results.push({\n node,\n x: li * (NODE_W + H_GAP),\n y: startY + ni * (NODE_H + V_GAP),\n });\n }\n }\n }\n\n return results;\n}\n\nexport function ServiceMap({\n nodes,\n edges,\n onNodeClick,\n width,\n height,\n className,\n}: ServiceMapProps) {\n const [hoveredNode, setHoveredNode] = useState<string | null>(null);\n\n const layout = useMemo(() => layoutNodes(nodes, edges), [nodes, edges]);\n const posMap = useMemo(() => new Map(layout.map(l => [l.node.id, l])), [layout]);\n\n // Compute SVG viewbox\n const bounds = useMemo(() => {\n if (layout.length === 0) return { minX: 0, minY: 0, w: 400, h: 300 };\n let minX = Infinity, maxX = -Infinity, minY = Infinity, maxY = -Infinity;\n for (const l of layout) {\n minX = Math.min(minX, l.x);\n maxX = Math.max(maxX, l.x + NODE_W);\n minY = Math.min(minY, l.y);\n maxY = Math.max(maxY, l.y + NODE_H);\n }\n const pad = 60;\n return {\n minX: minX - pad,\n minY: minY - pad,\n w: maxX - minX + pad * 2,\n h: maxY - minY + pad * 2,\n };\n }, [layout]);\n\n return (\n <div className={twMerge('w-full overflow-auto', className)}>\n <svg\n width={width || Math.max(bounds.w, 600)}\n height={height || Math.max(300, bounds.h)}\n viewBox={`${bounds.minX} ${bounds.minY} ${bounds.w} ${bounds.h}`}\n className=\"select-none min-w-full\"\n >\n <defs>\n <marker\n id=\"sg-arrow\"\n markerWidth=\"8\"\n markerHeight=\"6\"\n refX=\"8\"\n refY=\"3\"\n orient=\"auto\"\n >\n <path d=\"M0,0 L8,3 L0,6\" fill=\"#535C6B\" />\n </marker>\n <marker\n id=\"sg-arrow-error\"\n markerWidth=\"8\"\n markerHeight=\"6\"\n refX=\"8\"\n refY=\"3\"\n orient=\"auto\"\n >\n <path d=\"M0,0 L8,3 L0,6\" fill=\"#EF4444\" />\n </marker>\n </defs>\n\n {/* Edges */}\n {edges.map((edge, i) => {\n const fromPos = posMap.get(edge.from);\n const toPos = posMap.get(edge.to);\n if (!fromPos || !toPos) return null;\n\n const x1 = fromPos.x + NODE_W;\n const y1 = fromPos.y + NODE_H / 2;\n const x2 = toPos.x;\n const y2 = toPos.y + NODE_H / 2;\n const cx = (x1 + x2) / 2;\n const color = edgeStatusColors[edge.status || 'ok'];\n const markerId = edge.status === 'error' ? 'sg-arrow-error' : 'sg-arrow';\n\n return (\n <g key={`edge-${i}`}>\n <path\n d={`M${x1},${y1} C${cx},${y1} ${cx},${y2} ${x2},${y2}`}\n fill=\"none\"\n stroke={color}\n strokeWidth={1.5}\n strokeDasharray={edge.status === 'error' ? '4 3' : undefined}\n markerEnd={`url(#${markerId})`}\n opacity={0.6}\n />\n {edge.label && (\n <text\n x={cx}\n y={(y1 + y2) / 2 - 6}\n textAnchor=\"middle\"\n fill=\"#535C6B\"\n fontSize={9}\n fontFamily=\"monospace\"\n >\n {edge.label}\n </text>\n )}\n </g>\n );\n })}\n\n {/* Nodes */}\n {layout.map(({ node, x, y }) => {\n const colors = nodeStatusColors[node.status];\n const isHovered = hoveredNode === node.id;\n\n return (\n <g\n key={node.id}\n transform={`translate(${x},${y})`}\n onMouseEnter={() => setHoveredNode(node.id)}\n onMouseLeave={() => setHoveredNode(null)}\n onClick={() => onNodeClick?.(node)}\n style={{ cursor: onNodeClick ? 'pointer' : 'default' }}\n >\n {/* Glow */}\n {isHovered && (\n <rect\n x={-4}\n y={-4}\n width={NODE_W + 8}\n height={NODE_H + 8}\n rx={16}\n fill={colors.glow}\n />\n )}\n\n {/* Card */}\n <rect\n width={NODE_W}\n height={NODE_H}\n rx={12}\n fill={colors.fill}\n stroke={isHovered ? colors.stroke : 'rgba(255,255,255,0.05)'}\n strokeWidth={1}\n />\n\n {/* Status dot */}\n <circle cx={14} cy={NODE_H / 2} r={4} fill={colors.dot} />\n\n {/* Label */}\n <text\n x={28}\n y={NODE_H / 2 - 6}\n fill=\"#EDEDEF\"\n fontSize={11}\n dominantBaseline=\"middle\"\n >\n {node.label.length > 16 ? node.label.slice(0, 16) + '…' : node.label}\n </text>\n\n {/* Type / metrics */}\n <text\n x={28}\n y={NODE_H / 2 + 10}\n fill=\"#535C6B\"\n fontSize={9}\n fontFamily=\"monospace\"\n >\n {node.type || ''}\n {node.metrics?.rps !== undefined && ` ${node.metrics.rps} rps`}\n {node.metrics?.latency !== undefined && ` ${node.metrics.latency}ms`}\n </text>\n </g>\n );\n })}\n </svg>\n </div>\n );\n}\n","import React, { useCallback } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { Plus, Trash2, Bell } from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n AlertRuleEditor — Composable alert rule / threshold builder\n @level L3 — Organism: Alert threshold rule editor\n ═══════════════════════════════════════════════════════════════\n\n Usage:\n <AlertRuleEditor\n rules={rules}\n onChange={setRules}\n metrics={[\n { value: 'error_rate', label: 'Error Rate (%)' },\n { value: 'latency_p99', label: 'P99 Latency (ms)' },\n ]}\n channels={[\n { value: 'email', label: 'Email' },\n { value: 'slack', label: 'Slack' },\n ]}\n />\n ═══════════════════════════════════════════════════════════════ */\n\ntype Operator = '>' | '>=' | '<' | '<=' | '==' | '!=';\ntype Severity = 'critical' | 'warning' | 'info';\n\nconst OPERATORS: { value: Operator; label: string }[] = [\n { value: '>', label: '>' },\n { value: '>=', label: '>=' },\n { value: '<', label: '<' },\n { value: '<=', label: '<=' },\n { value: '==', label: '==' },\n { value: '!=', label: '!=' },\n];\n\nconst WINDOWS = [\n { value: '1m', label: '1 min' },\n { value: '5m', label: '5 min' },\n { value: '15m', label: '15 min' },\n { value: '1h', label: '1 hour' },\n { value: '6h', label: '6 hours' },\n { value: '24h', label: '24 hours' },\n];\n\nconst severityStyles: Record<Severity, { bg: string; text: string; border: string }> = {\n critical: { bg: 'bg-red-500/10', text: 'text-red-400', border: 'border-red-500/20' },\n warning: { bg: 'bg-amber-500/10', text: 'text-amber-400', border: 'border-amber-500/20' },\n info: { bg: 'bg-blue-500/10', text: 'text-blue-400', border: 'border-blue-500/20' },\n};\n\nexport interface MetricOption {\n value: string;\n label: string;\n icon?: LucideIcon;\n}\n\nexport interface ChannelOption {\n value: string;\n label: string;\n icon?: LucideIcon;\n}\n\nexport interface AlertRule {\n id: string;\n metric: string;\n operator: Operator;\n threshold: number;\n window: string;\n severity: Severity;\n channels: string[];\n enabled: boolean;\n}\n\nexport interface AlertRuleEditorProps {\n rules: AlertRule[];\n onChange: (rules: AlertRule[]) => void;\n metrics: MetricOption[];\n channels?: ChannelOption[];\n severities?: Severity[];\n label?: string;\n className?: string;\n}\n\nlet _ruleId = 0;\n\nconst inputBase = 'bg-white/[0.03] border border-white/5 text-foreground focus:border-blue-500/50 focus:outline-none focus:ring-2 focus:ring-blue-500/20 transition-all duration-200';\n\nexport function AlertRuleEditor({\n rules,\n onChange,\n metrics,\n channels = [],\n severities = ['critical', 'warning', 'info'],\n label,\n className,\n}: AlertRuleEditorProps) {\n const updateRule = useCallback((id: string, patch: Partial<AlertRule>) => {\n onChange(rules.map(r => r.id === id ? { ...r, ...patch } : r));\n }, [rules, onChange]);\n\n const removeRule = useCallback((id: string) => {\n onChange(rules.filter(r => r.id !== id));\n }, [rules, onChange]);\n\n const addRule = useCallback(() => {\n onChange([\n ...rules,\n {\n id: `rule-${++_ruleId}`,\n metric: metrics[0]?.value || '',\n operator: '>',\n threshold: 0,\n window: '5m',\n severity: 'warning',\n channels: [],\n enabled: true,\n },\n ]);\n }, [rules, onChange, metrics]);\n\n const toggleChannel = useCallback((ruleId: string, channelValue: string) => {\n const rule = rules.find(r => r.id === ruleId);\n if (!rule) return;\n const has = rule.channels.includes(channelValue);\n updateRule(ruleId, {\n channels: has\n ? rule.channels.filter(c => c !== channelValue)\n : [...rule.channels, channelValue],\n });\n }, [rules, updateRule]);\n\n return (\n <div className={twMerge('w-full space-y-3', className)}>\n {label && (\n <label className=\"block text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted\">\n {label}\n </label>\n )}\n\n {/* Rules */}\n {rules.map((rule) => {\n const sevStyle = severityStyles[rule.severity];\n return (\n <div\n key={rule.id}\n className={twMerge(\n 'rounded-xl border p-3 sm:p-4 space-y-3 transition-all duration-200',\n rule.enabled\n ? 'bg-white/[0.02] border-white/5'\n : 'bg-white/[0.01] border-white/[0.03] opacity-50',\n )}\n >\n {/* Top row: when [metric] [operator] [threshold] for [window] */}\n <div className=\"flex flex-col sm:flex-row sm:items-center gap-2\">\n <div className=\"flex items-center gap-2 flex-wrap flex-1\">\n <span className=\"text-xs text-sg-text-muted shrink-0\">When</span>\n\n {/* Metric */}\n <select\n value={rule.metric}\n onChange={(e) => updateRule(rule.id, { metric: e.target.value })}\n className={twMerge('h-8 px-2 rounded-lg text-xs cursor-pointer flex-1 sm:flex-none min-w-[120px]', inputBase)}\n >\n {metrics.map(m => (\n <option key={m.value} value={m.value} className=\"bg-sg-elevated\">\n {m.label}\n </option>\n ))}\n </select>\n\n {/* Operator */}\n <select\n value={rule.operator}\n onChange={(e) => updateRule(rule.id, { operator: e.target.value as Operator })}\n className={twMerge('h-8 px-2 rounded-lg text-xs font-mono cursor-pointer w-14 sm:w-16', inputBase)}\n >\n {OPERATORS.map(op => (\n <option key={op.value} value={op.value} className=\"bg-sg-elevated\">\n {op.label}\n </option>\n ))}\n </select>\n\n {/* Threshold */}\n <input\n type=\"number\"\n value={rule.threshold}\n onChange={(e) => updateRule(rule.id, { threshold: parseFloat(e.target.value) || 0 })}\n className={twMerge(\n 'h-8 px-2 rounded-lg text-xs font-mono w-16 sm:w-20 text-center',\n inputBase,\n '[appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none',\n )}\n />\n </div>\n\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs text-sg-text-muted shrink-0\">for</span>\n\n {/* Window */}\n <select\n value={rule.window}\n onChange={(e) => updateRule(rule.id, { window: e.target.value })}\n className={twMerge('h-8 px-2 rounded-lg text-xs cursor-pointer flex-1 sm:flex-none', inputBase)}\n >\n {WINDOWS.map(w => (\n <option key={w.value} value={w.value} className=\"bg-sg-elevated\">\n {w.label}\n </option>\n ))}\n </select>\n </div>\n </div>\n\n {/* Bottom row: severity + channels + actions */}\n <div className=\"flex items-center gap-2 sm:gap-3 flex-wrap\">\n {/* Severity */}\n <div className=\"flex gap-1 flex-wrap\">\n {severities.map(sev => (\n <button\n key={sev}\n onClick={() => updateRule(rule.id, { severity: sev })}\n className={twMerge(\n 'px-2 py-1 rounded-lg text-[10px] font-bold uppercase tracking-wider cursor-pointer transition-all duration-200 border',\n rule.severity === sev\n ? `${severityStyles[sev].bg} ${severityStyles[sev].text} ${severityStyles[sev].border}`\n : 'bg-transparent text-sg-text-muted border-transparent hover:bg-white/5',\n )}\n >\n {sev}\n </button>\n ))}\n </div>\n\n {/* Channels */}\n {channels.length > 0 && (\n <div className=\"flex items-center gap-1 flex-wrap\">\n <Bell className=\"w-3 h-3 text-sg-text-muted mr-1 shrink-0\" />\n {channels.map(ch => (\n <button\n key={ch.value}\n onClick={() => toggleChannel(rule.id, ch.value)}\n className={twMerge(\n 'px-2 py-1 rounded-lg text-[10px] cursor-pointer transition-all duration-200 border',\n rule.channels.includes(ch.value)\n ? 'bg-blue-500/10 text-blue-400 border-blue-500/20'\n : 'bg-transparent text-sg-text-muted border-transparent hover:bg-white/5',\n )}\n >\n {ch.label}\n </button>\n ))}\n </div>\n )}\n\n {/* Enable/Delete */}\n <div className=\"flex items-center gap-1 sm:ml-auto\">\n <button\n onClick={() => updateRule(rule.id, { enabled: !rule.enabled })}\n className={twMerge(\n 'px-2 py-1 rounded-lg text-[10px] cursor-pointer transition-colors',\n rule.enabled ? 'text-emerald-400' : 'text-sg-text-muted',\n 'hover:bg-white/5',\n )}\n >\n {rule.enabled ? 'Enabled' : 'Disabled'}\n </button>\n <button\n onClick={() => removeRule(rule.id)}\n className=\"p-1 rounded text-sg-text-muted hover:text-red-400 hover:bg-red-500/10 transition-colors cursor-pointer\"\n aria-label=\"Remove rule\"\n >\n <Trash2 className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n </div>\n </div>\n );\n })}\n\n {/* Add rule */}\n <button\n onClick={addRule}\n className=\"inline-flex items-center gap-2 px-4 h-9 rounded-xl text-sm text-muted-foreground hover:text-white bg-white/[0.03] border border-white/5 hover:bg-white/[0.08] hover:border-white/20 transition-all duration-200 cursor-pointer\"\n >\n <Plus className=\"w-4 h-4\" />\n Add Rule\n </button>\n </div>\n );\n}","import React, { useState, useCallback, useMemo } from 'react';\nimport { twMerge } from 'tailwind-merge';\n/* @level L3 — Organism: Tree-view file explorer with CRUD actions */\nimport {\n Folder,\n FolderOpen,\n File,\n FileText,\n FileCode,\n FileImage,\n ChevronRight,\n ChevronDown,\n Upload,\n Download,\n Trash2,\n FolderPlus,\n Home,\n} from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n FileBrowser — Hierarchical tree-view file explorer\n ═══════════════════════════════════════════════════════════════\n\n Usage:\n <FileBrowser\n items={[\n { id: '1', name: 'src', type: 'folder', children: [\n { id: '2', name: 'index.ts', type: 'file', size: 1024 },\n ]},\n ]}\n onNavigate={(path) => {}}\n onSelect={(ids) => {}}\n />\n ═══════════════════════════════════════════════════════════════ */\n\nexport interface FileItem {\n id: string;\n name: string;\n type: 'file' | 'folder';\n size?: number;\n modified?: string;\n children?: FileItem[];\n}\n\nexport interface FileBrowserActions {\n onUpload?: () => void;\n onDownload?: (ids: string[]) => void;\n onDelete?: (ids: string[]) => void;\n onCreateFolder?: () => void;\n}\n\nexport interface FileBrowserProps {\n items: FileItem[];\n currentPath?: string[];\n onNavigate?: (path: string[]) => void;\n selectedIds?: string[];\n onSelect?: (ids: string[]) => void;\n actions?: FileBrowserActions;\n className?: string;\n}\n\nfunction getFileIcon(name: string, isOpen?: boolean) {\n if (isOpen !== undefined) {\n return isOpen ? FolderOpen : Folder;\n }\n const ext = name.split('.').pop()?.toLowerCase();\n if (['ts', 'tsx', 'js', 'jsx', 'py', 'go', 'rs'].includes(ext || '')) return FileCode;\n if (['png', 'jpg', 'jpeg', 'gif', 'svg', 'webp'].includes(ext || '')) return FileImage;\n if (['md', 'txt', 'json', 'yaml', 'yml', 'toml'].includes(ext || '')) return FileText;\n return File;\n}\n\nfunction formatSize(bytes?: number): string {\n if (bytes === undefined) return '';\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\ninterface TreeRowProps {\n item: FileItem;\n depth: number;\n expanded: Set<string>;\n selected: Set<string>;\n onToggleExpand: (id: string) => void;\n onToggleSelect: (id: string) => void;\n onDoubleClick: (item: FileItem) => void;\n}\n\nfunction TreeRow({ item, depth, expanded, selected, onToggleExpand, onToggleSelect, onDoubleClick }: TreeRowProps) {\n const isFolder = item.type === 'folder';\n const isExpanded = expanded.has(item.id);\n const isSelected = selected.has(item.id);\n const Icon = isFolder ? getFileIcon(item.name, isExpanded) : getFileIcon(item.name);\n\n const elements: React.ReactElement[] = [];\n\n elements.push(\n <div\n key={item.id}\n className={twMerge(\n 'flex items-center gap-2 py-1.5 px-3 transition-colors group',\n 'hover:bg-white/[0.04]',\n isSelected && 'bg-blue-500/[0.12] border-l-2 border-l-blue-500',\n !isSelected && 'border-l-2 border-l-transparent',\n )}\n style={{ paddingLeft: `${12 + depth * 20}px` }}\n onClick={() => onToggleSelect(item.id)}\n onDoubleClick={() => onDoubleClick(item)}\n >\n {/* Expand toggle */}\n {isFolder ? (\n <button\n onClick={(e) => { e.stopPropagation(); onToggleExpand(item.id); }}\n className=\"p-0.5 rounded text-sg-text-muted hover:text-white transition-colors cursor-pointer shrink-0\"\n >\n {isExpanded\n ? <ChevronDown className=\"w-3 h-3\" />\n : <ChevronRight className=\"w-3 h-3\" />\n }\n </button>\n ) : (\n <span className=\"w-4 shrink-0\" />\n )}\n\n {/* Icon */}\n <Icon className={twMerge(\n 'w-4 h-4 shrink-0',\n isFolder\n ? isSelected ? 'text-blue-300' : 'text-blue-400'\n : isSelected ? 'text-blue-400' : 'text-sg-text-muted',\n )} />\n\n {/* Name */}\n <span className={twMerge(\n 'text-sm flex-1 truncate cursor-default',\n isSelected\n ? 'text-white'\n : isFolder ? 'text-foreground' : 'text-muted-foreground',\n )}>\n {item.name}\n </span>\n\n {/* Size */}\n {item.size !== undefined && (\n <span className=\"text-[10px] font-mono text-sg-text-muted shrink-0\">\n {formatSize(item.size)}\n </span>\n )}\n\n {/* Modified */}\n {item.modified && (\n <span className=\"text-[10px] text-sg-text-muted shrink-0 hidden sm:block\">\n {item.modified}\n </span>\n )}\n </div>\n );\n\n // Render children if expanded\n if (isFolder && isExpanded && item.children) {\n for (const child of item.children) {\n elements.push(\n <TreeRow\n key={child.id}\n item={child}\n depth={depth + 1}\n expanded={expanded}\n selected={selected}\n onToggleExpand={onToggleExpand}\n onToggleSelect={onToggleSelect}\n onDoubleClick={onDoubleClick}\n />\n );\n }\n }\n\n return <>{elements}</>;\n}\n\nexport function FileBrowser({\n items,\n currentPath = [],\n onNavigate,\n selectedIds = [],\n onSelect,\n actions,\n className,\n}: FileBrowserProps) {\n const [expanded, setExpanded] = useState<Set<string>>(new Set());\n const selected = useMemo(() => new Set(selectedIds), [selectedIds]);\n\n const toggleExpand = useCallback((id: string) => {\n setExpanded(prev => {\n const next = new Set(prev);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n }, []);\n\n const toggleSelect = useCallback((id: string) => {\n if (!onSelect) return;\n const newIds = selected.has(id)\n ? selectedIds.filter(i => i !== id)\n : [...selectedIds, id];\n onSelect(newIds);\n }, [selected, selectedIds, onSelect]);\n\n const handleDoubleClick = useCallback((item: FileItem) => {\n if (item.type === 'folder' && onNavigate) {\n onNavigate([...currentPath, item.name]);\n }\n }, [currentPath, onNavigate]);\n\n return (\n <div className={twMerge('rounded-xl border border-white/5 overflow-hidden', className)}>\n {/* Toolbar */}\n <div className=\"flex items-center gap-2 px-3 py-2 bg-white/[0.02] border-b border-white/5\">\n {/* Breadcrumb path */}\n <div className=\"flex items-center gap-1 flex-1 min-w-0 overflow-x-auto scrollbar-none\">\n <button\n onClick={() => onNavigate?.([])}\n className=\"p-1 rounded text-sg-text-muted hover:text-white transition-colors cursor-pointer shrink-0\"\n >\n <Home className=\"w-3.5 h-3.5\" />\n </button>\n {currentPath.map((segment, i) => (\n <React.Fragment key={i}>\n <ChevronRight className=\"w-3 h-3 text-sg-text-muted/40 shrink-0\" />\n <button\n onClick={() => onNavigate?.(currentPath.slice(0, i + 1))}\n className=\"text-xs text-muted-foreground hover:text-white transition-colors cursor-pointer shrink-0\"\n >\n {segment}\n </button>\n </React.Fragment>\n ))}\n </div>\n\n {/* Action buttons */}\n <div className=\"flex items-center gap-1 shrink-0\">\n {actions?.onCreateFolder && (\n <button\n onClick={actions.onCreateFolder}\n className=\"p-1.5 rounded-lg text-sg-text-muted hover:text-white hover:bg-white/5 transition-colors cursor-pointer\"\n title=\"New folder\"\n >\n <FolderPlus className=\"w-3.5 h-3.5\" />\n </button>\n )}\n {actions?.onUpload && (\n <button\n onClick={actions.onUpload}\n className=\"p-1.5 rounded-lg text-sg-text-muted hover:text-white hover:bg-white/5 transition-colors cursor-pointer\"\n title=\"Upload\"\n >\n <Upload className=\"w-3.5 h-3.5\" />\n </button>\n )}\n {actions?.onDownload && selectedIds.length > 0 && (\n <button\n onClick={() => actions.onDownload?.(selectedIds)}\n className=\"p-1.5 rounded-lg text-sg-text-muted hover:text-white hover:bg-white/5 transition-colors cursor-pointer\"\n title=\"Download\"\n >\n <Download className=\"w-3.5 h-3.5\" />\n </button>\n )}\n {actions?.onDelete && selectedIds.length > 0 && (\n <button\n onClick={() => actions.onDelete?.(selectedIds)}\n className=\"p-1.5 rounded-lg text-sg-text-muted hover:text-red-400 hover:bg-red-500/10 transition-colors cursor-pointer\"\n title=\"Delete\"\n >\n <Trash2 className=\"w-3.5 h-3.5\" />\n </button>\n )}\n </div>\n </div>\n\n {/* File tree */}\n <div className=\"max-h-[500px] overflow-y-auto\">\n {items.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center py-12 text-center\">\n <Folder className=\"w-8 h-8 text-sg-text-muted/30 mb-2\" />\n <p className=\"text-sm text-sg-text-muted\">This folder is empty</p>\n </div>\n ) : (\n items.map((item) => (\n <TreeRow\n key={item.id}\n item={item}\n depth={0}\n expanded={expanded}\n selected={selected}\n onToggleExpand={toggleExpand}\n onToggleSelect={toggleSelect}\n onDoubleClick={handleDoubleClick}\n />\n ))\n )}\n </div>\n\n {/* Footer */}\n {selectedIds.length > 0 && (\n <div className=\"px-3 py-1.5 bg-white/[0.02] border-t border-white/5 text-[10px] text-sg-text-muted\">\n {selectedIds.length} item{selectedIds.length > 1 ? 's' : ''} selected\n </div>\n )}\n </div>\n );\n}","import React, { useMemo } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { Check, ChevronLeft, ChevronRight, ArrowRight } from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n StepWizard + Checklist — Sequential wizard + task checklist\n @level L3 — Organism: Multi-step wizard flow + task checklist\n ═══════════════════════════════════════════════════════════════\n\n Usage (Wizard):\n <StepWizard\n steps={[\n { id: 'connect', label: 'Connect Repo', icon: GitBranch },\n { id: 'configure', label: 'Configure' },\n { id: 'deploy', label: 'Deploy' },\n ]}\n currentStep={1}\n onStepChange={setStep}\n onFinish={() => {}}\n >\n {(step) => <StepContent step={step} />}\n </StepWizard>\n\n Usage (Checklist):\n <Checklist\n items={[\n { id: 'repo', label: 'Connect repository', completed: true },\n { id: 'env', label: 'Set environment variables', completed: false,\n action: { label: 'Configure', onClick: () => {} } },\n ]}\n />\n ═══════════════════════════════════════════════════════════════ */\n\n/* ─── StepWizard ─── */\n\nexport interface WizardStep {\n id: string;\n label: string;\n description?: string;\n icon?: LucideIcon;\n}\n\nexport interface StepWizardProps {\n steps: WizardStep[];\n currentStep: number;\n onStepChange: (step: number) => void;\n onFinish?: () => void;\n canProceed?: boolean;\n children: (step: WizardStep, index: number) => React.ReactNode;\n backLabel?: string;\n nextLabel?: string;\n finishLabel?: string;\n className?: string;\n}\n\nexport function StepWizard({\n steps,\n currentStep,\n onStepChange,\n onFinish,\n canProceed = true,\n children,\n backLabel = 'Back',\n nextLabel = 'Next',\n finishLabel = 'Finish',\n className,\n}: StepWizardProps) {\n const isFirst = currentStep === 0;\n const isLast = currentStep === steps.length - 1;\n const current = steps[currentStep];\n\n return (\n <div className={twMerge('w-full space-y-6', className)}>\n {/* Step indicator bar */}\n <div className=\"flex items-center gap-0\">\n {steps.flatMap((step, i) => {\n const isPast = i < currentStep;\n const isCurrent = i === currentStep;\n const Icon = step.icon;\n const elements: React.ReactElement[] = [];\n\n elements.push(\n <div\n key={step.id}\n className={twMerge(\n 'flex items-center gap-2 cursor-pointer transition-all duration-200',\n isCurrent ? 'text-foreground' : isPast ? 'text-muted-foreground' : 'text-sg-text-muted',\n )}\n onClick={() => isPast && onStepChange(i)}\n >\n {/* Step circle */}\n <div className={twMerge(\n 'w-7 h-7 rounded-full flex items-center justify-center shrink-0 border-2 transition-all duration-200',\n isCurrent\n ? 'border-blue-500 bg-blue-500/20 shadow-[0_0_12px_rgba(59,130,246,0.3)]'\n : isPast\n ? 'border-emerald-500 bg-emerald-500/20'\n : 'border-white/10 bg-transparent',\n )}>\n {isPast ? (\n <Check className=\"w-3.5 h-3.5 text-emerald-400\" />\n ) : Icon ? (\n <Icon className={twMerge('w-3.5 h-3.5', isCurrent ? 'text-blue-400' : 'text-sg-text-muted')} />\n ) : (\n <span className=\"text-[10px] font-bold font-mono\">{i + 1}</span>\n )}\n </div>\n\n {/* Label */}\n <div className=\"hidden sm:block\">\n <div className=\"text-xs\">{step.label}</div>\n </div>\n </div>\n );\n\n // Connector\n if (i < steps.length - 1) {\n elements.push(\n <div\n key={`conn-${i}`}\n className={twMerge(\n 'flex-1 h-0.5 mx-2 rounded-full',\n isPast ? 'bg-emerald-500/30' : 'bg-white/5',\n )}\n style={{ minWidth: 20 }}\n />\n );\n }\n\n return elements;\n })}\n </div>\n\n {/* Step content */}\n <div className=\"min-h-[200px]\">\n {current && children(current, currentStep)}\n </div>\n\n {/* Navigation */}\n <div className=\"flex items-center justify-between pt-4 border-t border-white/5\">\n <button\n onClick={() => onStepChange(currentStep - 1)}\n disabled={isFirst}\n className={twMerge(\n 'inline-flex items-center gap-2 px-4 h-10 rounded-xl text-sm cursor-pointer',\n 'bg-white/[0.03] border border-white/10 text-foreground',\n 'hover:bg-white/[0.08] hover:border-white/20',\n 'disabled:opacity-30 disabled:pointer-events-none',\n 'transition-all duration-200',\n )}\n >\n <ChevronLeft className=\"w-4 h-4\" />\n {backLabel}\n </button>\n\n {isLast ? (\n <button\n onClick={onFinish}\n disabled={!canProceed}\n className={twMerge(\n 'inline-flex items-center gap-2 px-4 h-10 rounded-full text-sm cursor-pointer',\n 'bg-gradient-to-r from-blue-600 to-indigo-600 text-white',\n 'shadow-[0_4px_20px_rgba(37,99,235,0.3)]',\n 'hover:shadow-[0_6px_25px_rgba(37,99,235,0.4)] hover:brightness-110',\n 'disabled:opacity-40 disabled:pointer-events-none',\n 'transition-all duration-200',\n )}\n >\n {finishLabel}\n <Check className=\"w-4 h-4\" />\n </button>\n ) : (\n <button\n onClick={() => onStepChange(currentStep + 1)}\n disabled={!canProceed}\n className={twMerge(\n 'inline-flex items-center gap-2 px-4 h-10 rounded-full text-sm cursor-pointer',\n 'bg-gradient-to-r from-blue-600 to-indigo-600 text-white',\n 'shadow-[0_4px_20px_rgba(37,99,235,0.3)]',\n 'hover:shadow-[0_6px_25px_rgba(37,99,235,0.4)] hover:brightness-110',\n 'disabled:opacity-40 disabled:pointer-events-none',\n 'transition-all duration-200',\n )}\n >\n {nextLabel}\n <ChevronRight className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n </div>\n );\n}\n\n/* ─── Checklist ─── */\n\nexport interface ChecklistItem {\n id: string;\n label: string;\n description?: string;\n completed: boolean;\n action?: {\n label: string;\n onClick: () => void;\n icon?: LucideIcon;\n };\n}\n\nexport interface ChecklistProps {\n items: ChecklistItem[];\n onChange?: (id: string, completed: boolean) => void;\n title?: string;\n className?: string;\n}\n\nexport function Checklist({\n items,\n onChange,\n title,\n className,\n}: ChecklistProps) {\n const completedCount = items.filter(i => i.completed).length;\n const pct = items.length > 0 ? (completedCount / items.length) * 100 : 0;\n\n return (\n <div className={twMerge('w-full space-y-4', className)}>\n {/* Header with progress */}\n {title && (\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-foreground\">{title}</span>\n <span className=\"text-xs font-mono text-sg-text-muted\">\n {completedCount} of {items.length}\n </span>\n </div>\n <div className=\"h-1.5 rounded-full bg-white/[0.06] overflow-hidden\">\n <div\n className=\"h-full rounded-full bg-blue-500 transition-all duration-500\"\n style={{ width: `${pct}%` }}\n />\n </div>\n </div>\n )}\n\n {/* Checklist items */}\n <div className=\"space-y-1\">\n {items.map((item) => {\n const ActionIcon = item.action?.icon || ArrowRight;\n return (\n <div\n key={item.id}\n className={twMerge(\n 'flex items-center gap-3 px-3 py-2.5 rounded-xl transition-colors',\n 'hover:bg-white/[0.02]',\n )}\n >\n {/* Checkbox */}\n <button\n onClick={() => onChange?.(item.id, !item.completed)}\n disabled={!onChange}\n className={twMerge(\n 'w-5 h-5 rounded-md border-2 flex items-center justify-center shrink-0 transition-all duration-200',\n item.completed\n ? 'border-emerald-500 bg-emerald-500/20'\n : 'border-white/10 bg-transparent hover:border-white/20',\n onChange ? 'cursor-pointer' : 'cursor-default',\n )}\n >\n {item.completed && <Check className=\"w-3 h-3 text-emerald-400\" />}\n </button>\n\n {/* Label */}\n <div className=\"flex-1 min-w-0\">\n <div className={twMerge(\n 'text-sm transition-colors',\n item.completed ? 'text-sg-text-muted line-through' : 'text-foreground',\n )}>\n {item.label}\n </div>\n {item.description && (\n <div className=\"text-[10px] text-sg-text-muted mt-0.5\">{item.description}</div>\n )}\n </div>\n\n {/* Action button */}\n {item.action && !item.completed && (\n <button\n onClick={item.action.onClick}\n className=\"inline-flex items-center gap-1 px-3 h-7 rounded-lg text-xs text-blue-400 hover:bg-blue-500/10 transition-colors cursor-pointer shrink-0\"\n >\n {item.action.label}\n <ActionIcon className=\"w-3 h-3\" />\n </button>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}","import React, { createContext, useContext, useId } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { AlertCircle, Info } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n FormField — Stealth Glass Design System\n @level L2 — Molecule: Unified form field wrapper with label, description,\n validation error, and helper text. Pairs with Input, Select, Textarea, etc.\n ═══════════════════════════════════════════════════════════════\n\n Usage:\n <FormField label=\"API Key\" error=\"Required\" required>\n <Input placeholder=\"sk-...\" />\n </FormField>\n\n <FormGroup title=\"Environment\" description=\"Configure runtime\">\n <FormField label=\"Runtime\">\n <Select>...</Select>\n </FormField>\n <FormField label=\"Memory\" helperText=\"128–3008 MB\">\n <NumberInput />\n </FormField>\n </FormGroup>\n ═══════════════════════════════════════════════════════════════ */\n\n// ── Context ──\n\ninterface FormFieldContextValue {\n id: string;\n hasError: boolean;\n}\n\nconst FormFieldContext = createContext<FormFieldContextValue>({\n id: '',\n hasError: false,\n});\n\nexport function useFormField() {\n return useContext(FormFieldContext);\n}\n\n// ── FormField ──\n\nexport interface FormFieldProps {\n /** Field label */\n label?: string;\n /** Small description below the label */\n description?: string;\n /** Error message — shows red state when truthy */\n error?: string;\n /** Helper text below the input (hidden when error is shown) */\n helperText?: string;\n /** Show required asterisk */\n required?: boolean;\n /** Disable the entire field */\n disabled?: boolean;\n /** Horizontal layout (label left, input right) */\n horizontal?: boolean;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function FormField({\n label,\n description,\n error,\n helperText,\n required = false,\n disabled = false,\n horizontal = false,\n children,\n className,\n}: FormFieldProps) {\n const generatedId = useId();\n const id = `ff-${generatedId}`;\n const hasError = Boolean(error);\n\n return (\n <FormFieldContext.Provider value={{ id, hasError }}>\n <div\n className={twMerge(\n 'group',\n horizontal ? 'flex items-start gap-4' : 'flex flex-col gap-1.5',\n disabled && 'opacity-50 pointer-events-none',\n className,\n )}\n >\n {/* Label + description */}\n {(label || description) && (\n <div className={twMerge(\n horizontal ? 'w-40 shrink-0 pt-2.5' : '',\n )}>\n {label && (\n <label\n htmlFor={id}\n className=\"text-sm text-foreground cursor-pointer flex items-center gap-1\"\n >\n {label}\n {required && (\n <span className=\"text-red-400 text-xs\">*</span>\n )}\n </label>\n )}\n {description && (\n <p className=\"text-xs text-sg-text-muted mt-0.5\">{description}</p>\n )}\n </div>\n )}\n\n {/* Input area */}\n <div className={twMerge('flex-1 min-w-0', horizontal ? '' : '')}>\n {children}\n\n {/* Error message */}\n {hasError && (\n <div className=\"flex items-center gap-1.5 mt-1.5 animate-in fade-in slide-in-from-top-1 duration-200\">\n <AlertCircle className=\"w-3.5 h-3.5 text-red-400 shrink-0\" />\n <p className=\"text-xs text-red-400\">{error}</p>\n </div>\n )}\n\n {/* Helper text (shown only when no error) */}\n {!hasError && helperText && (\n <div className=\"flex items-center gap-1.5 mt-1.5\">\n <Info className=\"w-3 h-3 text-sg-text-muted shrink-0\" />\n <p className=\"text-xs text-sg-text-muted\">{helperText}</p>\n </div>\n )}\n </div>\n </div>\n </FormFieldContext.Provider>\n );\n}\n\n// ── FormGroup ──\n\nexport interface FormGroupProps {\n /** Section title */\n title?: string;\n /** Section description */\n description?: string;\n /** Collapsible */\n collapsible?: boolean;\n /** Default collapsed state */\n defaultCollapsed?: boolean;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function FormGroup({\n title,\n description,\n children,\n className,\n}: FormGroupProps) {\n return (\n <fieldset\n className={twMerge(\n 'rounded-xl border border-white/5 bg-white/[0.01] p-4',\n className,\n )}\n >\n {(title || description) && (\n <div className=\"mb-4\">\n {title && (\n <legend className=\"text-sm text-foreground px-1\">\n {title}\n </legend>\n )}\n {description && (\n <p className=\"text-xs text-sg-text-muted mt-0.5 px-1\">{description}</p>\n )}\n </div>\n )}\n <div className=\"space-y-4\">\n {children}\n </div>\n </fieldset>\n );\n}\n\n// ── FormActions ──\n\nexport interface FormActionsProps {\n /** Align buttons */\n align?: 'left' | 'right' | 'between';\n children: React.ReactNode;\n className?: string;\n}\n\nexport function FormActions({ align = 'right', children, className }: FormActionsProps) {\n return (\n <div\n className={twMerge(\n 'flex items-center gap-3 pt-4 border-t border-white/5',\n align === 'right' && 'justify-end',\n align === 'left' && 'justify-start',\n align === 'between' && 'justify-between',\n className,\n )}\n >\n {children}\n </div>\n );\n}\n\n// ── Inline helpers ──\n\nexport interface FormLabelProps {\n htmlFor?: string;\n required?: boolean;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function FormLabel({ htmlFor, required, children, className }: FormLabelProps) {\n return (\n <label\n htmlFor={htmlFor}\n className={twMerge('text-sm text-foreground cursor-pointer flex items-center gap-1', className)}\n >\n {children}\n {required && <span className=\"text-red-400 text-xs\">*</span>}\n </label>\n );\n}\n\nexport interface FormErrorProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function FormError({ children, className }: FormErrorProps) {\n return (\n <div className={twMerge('flex items-center gap-1', className)}>\n <AlertCircle className=\"w-3 h-3 text-red-400 shrink-0\" />\n <p className=\"text-[10px] text-red-400 font-bold uppercase tracking-wider\">{children}</p>\n </div>\n );\n}\n\nexport interface FormHelperTextProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function FormHelperText({ children, className }: FormHelperTextProps) {\n return (\n <p className={twMerge('text-xs text-sg-text-muted', className)}>\n {children}\n </p>\n );\n}","/* @level L3 — Organism: Notification dropdown + bell indicator */\nimport React, { useState, useCallback, useMemo } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport {\n Bell,\n Check,\n CheckCheck,\n X,\n AlertTriangle,\n Info,\n Rocket,\n ShieldAlert,\n Clock,\n ChevronRight,\n} from 'lucide-react';\nimport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n} from './Popover';\n\n/* ═══════════════════════════════════════════════════════════════\n NotificationCenter — Stealth Glass Design System\n Bell icon dropdown with grouped notifications, unread badge,\n mark-as-read, and action buttons.\n ═══════════════════════════════════════════════════════════════\n\n Usage:\n <NotificationCenter\n notifications={[\n {\n id: '1',\n type: 'deploy',\n title: 'Deployment succeeded',\n description: 'api-gateway v2.3.1 deployed to production',\n timestamp: new Date(),\n read: false,\n action: { label: 'View', onClick: () => {} },\n },\n ]}\n onMarkRead={(id) => {}}\n onMarkAllRead={() => {}}\n onDismiss={(id) => {}}\n />\n ═══════════════════════════════════════════════════════════════ */\n\nexport type NotificationType = 'info' | 'success' | 'warning' | 'error' | 'deploy' | 'alert' | 'system';\n\nexport interface NotificationAction {\n label: string;\n onClick: () => void;\n}\n\nexport interface NotificationItem {\n id: string;\n type: NotificationType;\n title: string;\n description?: string;\n timestamp: Date;\n read: boolean;\n action?: NotificationAction;\n /** Optional avatar/icon URL */\n avatarUrl?: string;\n}\n\nexport interface NotificationCenterProps {\n notifications: NotificationItem[];\n onMarkRead?: (id: string) => void;\n onMarkAllRead?: () => void;\n onDismiss?: (id: string) => void;\n /** Max notifications shown before \"View all\" */\n maxVisible?: number;\n onViewAll?: () => void;\n className?: string;\n}\n\nconst typeConfig: Record<NotificationType, { icon: React.ElementType; color: string; bg: string }> = {\n info: { icon: Info, color: 'text-blue-400', bg: 'bg-blue-500/10' },\n success: { icon: Check, color: 'text-emerald-400', bg: 'bg-emerald-500/10' },\n warning: { icon: AlertTriangle, color: 'text-amber-400', bg: 'bg-amber-500/10' },\n error: { icon: ShieldAlert, color: 'text-red-400', bg: 'bg-red-500/10' },\n deploy: { icon: Rocket, color: 'text-indigo-400', bg: 'bg-indigo-500/10' },\n alert: { icon: AlertTriangle, color: 'text-orange-400', bg: 'bg-orange-500/10' },\n system: { icon: Info, color: 'text-sg-text-muted', bg: 'bg-white/5' },\n};\n\nfunction formatRelativeTime(date: Date): string {\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffSecs = Math.floor(diffMs / 1000);\n const diffMins = Math.floor(diffSecs / 60);\n const diffHours = Math.floor(diffMins / 60);\n const diffDays = Math.floor(diffHours / 24);\n\n if (diffSecs < 60) return 'Just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n if (diffHours < 24) return `${diffHours}h ago`;\n if (diffDays < 7) return `${diffDays}d ago`;\n return date.toLocaleDateString();\n}\n\nfunction NotificationRow({\n item,\n onMarkRead,\n onDismiss,\n}: {\n item: NotificationItem;\n onMarkRead?: (id: string) => void;\n onDismiss?: (id: string) => void;\n}) {\n const config = typeConfig[item.type] || typeConfig.info;\n const Icon = config.icon;\n\n return (\n <div\n className={twMerge(\n 'flex gap-3 px-4 py-3 transition-colors group relative',\n 'hover:bg-white/[0.03]',\n !item.read && 'bg-blue-500/[0.03]',\n )}\n >\n {/* Unread dot */}\n {!item.read && (\n <div className=\"absolute left-1.5 top-1/2 -translate-y-1/2 w-1.5 h-1.5 rounded-full bg-blue-500\" />\n )}\n\n {/* Icon */}\n <div className={twMerge('w-8 h-8 rounded-lg flex items-center justify-center shrink-0 mt-0.5', config.bg)}>\n <Icon className={twMerge('w-4 h-4', config.color)} />\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <p className={twMerge(\n 'text-sm truncate',\n item.read ? 'text-muted-foreground' : 'text-foreground',\n )}>\n {item.title}\n </p>\n {item.description && (\n <p className=\"text-xs text-sg-text-muted mt-0.5 line-clamp-2\">\n {item.description}\n </p>\n )}\n <div className=\"flex items-center gap-3 mt-1.5\">\n <span className=\"text-[10px] text-sg-text-muted flex items-center gap-1\">\n <Clock className=\"w-3 h-3\" />\n {formatRelativeTime(item.timestamp)}\n </span>\n {item.action && (\n <button\n onClick={(e) => { e.stopPropagation(); item.action!.onClick(); }}\n className=\"text-[10px] text-blue-400 hover:text-blue-300 transition-colors cursor-pointer flex items-center gap-0.5\"\n >\n {item.action.label}\n <ChevronRight className=\"w-3 h-3\" />\n </button>\n )}\n </div>\n </div>\n\n {/* Actions */}\n <div className=\"flex items-start gap-1 opacity-0 group-hover:opacity-100 reveal-touch-visible transition-opacity shrink-0\">\n {!item.read && onMarkRead && (\n <button\n onClick={(e) => { e.stopPropagation(); onMarkRead(item.id); }}\n className=\"p-1 rounded text-sg-text-muted hover:text-white hover:bg-white/5 transition-colors cursor-pointer\"\n title=\"Mark as read\"\n >\n <Check className=\"w-3.5 h-3.5\" />\n </button>\n )}\n {onDismiss && (\n <button\n onClick={(e) => { e.stopPropagation(); onDismiss(item.id); }}\n className=\"p-1 rounded text-sg-text-muted hover:text-red-400 hover:bg-red-500/10 transition-colors cursor-pointer\"\n title=\"Dismiss\"\n >\n <X className=\"w-3.5 h-3.5\" />\n </button>\n )}\n </div>\n </div>\n );\n}\n\nexport function NotificationCenter({\n notifications,\n onMarkRead,\n onMarkAllRead,\n onDismiss,\n maxVisible = 8,\n onViewAll,\n className,\n}: NotificationCenterProps) {\n const [open, setOpen] = useState(false);\n\n const unreadCount = useMemo(\n () => notifications.filter(n => !n.read).length,\n [notifications],\n );\n\n const visibleNotifications = useMemo(\n () => notifications.slice(0, maxVisible),\n [notifications, maxVisible],\n );\n\n const hasMore = notifications.length > maxVisible;\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n className={twMerge(\n 'relative p-2 rounded-lg text-sg-text-muted hover:text-white hover:bg-white/5 transition-colors cursor-pointer',\n open && 'text-white bg-white/5',\n className,\n )}\n >\n <Bell className=\"w-5 h-5\" />\n {unreadCount > 0 && (\n <span className=\"absolute -top-0.5 -right-0.5 min-w-[18px] h-[18px] rounded-full bg-blue-500 text-white text-[10px] flex items-center justify-center px-1\">\n {unreadCount > 99 ? '99+' : unreadCount}\n </span>\n )}\n </button>\n </PopoverTrigger>\n <PopoverContent\n align=\"end\"\n sideOffset={8}\n className=\"w-[380px] max-sm:w-[calc(100vw-2rem)] p-0 rounded-xl border border-white/5 bg-card shadow-[0_16px_48px_rgba(0,0,0,0.4)]\"\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-white/5\">\n <div className=\"flex items-center gap-2\">\n <h3 className=\"text-sm text-foreground\">Notifications</h3>\n {unreadCount > 0 && (\n <span className=\"text-[10px] text-blue-400 bg-blue-500/10 px-1.5 py-0.5 rounded-full\">\n {unreadCount} new\n </span>\n )}\n </div>\n {unreadCount > 0 && onMarkAllRead && (\n <button\n onClick={onMarkAllRead}\n className=\"text-xs text-sg-text-muted hover:text-white transition-colors cursor-pointer flex items-center gap-1\"\n >\n <CheckCheck className=\"w-3.5 h-3.5\" />\n Mark all read\n </button>\n )}\n </div>\n\n {/* Notification list */}\n <div className=\"max-h-[400px] overflow-y-auto\" aria-live=\"polite\">\n {visibleNotifications.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center py-10 text-center\">\n <Bell className=\"w-8 h-8 text-sg-text-muted/30 mb-2\" />\n <p className=\"text-sm text-sg-text-muted\">No notifications</p>\n <p className=\"text-xs text-sg-text-muted/60 mt-1\">You're all caught up</p>\n </div>\n ) : (\n <div className=\"divide-y divide-white/5\">\n {visibleNotifications.map((item) => (\n <NotificationRow\n key={item.id}\n item={item}\n onMarkRead={onMarkRead}\n onDismiss={onDismiss}\n />\n ))}\n </div>\n )}\n </div>\n\n {/* Footer */}\n {hasMore && onViewAll && (\n <div className=\"border-t border-white/5 px-4 py-2.5\">\n <button\n onClick={() => { onViewAll(); setOpen(false); }}\n className=\"w-full text-xs text-sg-text-muted hover:text-white transition-colors cursor-pointer text-center\"\n >\n View all {notifications.length} notifications\n </button>\n </div>\n )}\n </PopoverContent>\n </Popover>\n );\n}\n\n// ── Standalone NotificationBell (simpler version) ──\n\nexport interface NotificationBellProps {\n count?: number;\n onClick?: () => void;\n className?: string;\n}\n\nexport function NotificationBell({ count = 0, onClick, className }: NotificationBellProps) {\n return (\n <button\n onClick={onClick}\n className={twMerge(\n 'relative p-2 rounded-lg text-sg-text-muted hover:text-white hover:bg-white/5 transition-colors cursor-pointer',\n className,\n )}\n >\n <Bell className=\"w-5 h-5\" />\n {count > 0 && (\n <span className=\"absolute -top-0.5 -right-0.5 min-w-[18px] h-[18px] rounded-full bg-blue-500 text-white text-[10px] flex items-center justify-center px-1\">\n {count > 99 ? '99+' : count}\n </span>\n )}\n </button>\n );\n}","import React, { useMemo } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport {\n AreaChart,\n Area,\n BarChart,\n Bar,\n LineChart,\n Line,\n ResponsiveContainer,\n YAxis,\n} from 'recharts';\n\n/* ═══════════════════════════════════════════════════════════════\n Sparkline — Stealth Glass Design System\n @level L2 — Molecule: Tiny inline charts for dashboard cards and stat displays.\n Three variants: area (default), line, and bar.\n ═══════════════════════════════════════════════════════════════\n\n Usage:\n <Sparkline data={[10, 24, 13, 45, 32, 48, 60]} />\n <Sparkline data={cpuData} variant=\"line\" color=\"emerald\" />\n <SparklineBar data={requestCounts} />\n <SparklineStat\n label=\"Requests/s\"\n value=\"12.4k\"\n trend={+12.3}\n data={[10, 24, 13, 45, 32, 48, 60]}\n />\n ═══════════════════════════════════════════════════════════════ */\n\nconst colorMap: Record<string, { stroke: string; fill: string }> = {\n blue: { stroke: '#3B82F6', fill: 'rgba(59, 130, 246, 0.15)' },\n indigo: { stroke: '#6366F1', fill: 'rgba(99, 102, 241, 0.15)' },\n purple: { stroke: '#8B5CF6', fill: 'rgba(139, 92, 246, 0.15)' },\n emerald: { stroke: '#10B981', fill: 'rgba(16, 185, 129, 0.15)' },\n amber: { stroke: '#F59E0B', fill: 'rgba(245, 158, 11, 0.15)' },\n red: { stroke: '#EF4444', fill: 'rgba(239, 68, 68, 0.15)' },\n};\n\nexport interface SparklineProps {\n /** Array of numbers or objects with a `value` key */\n data: number[] | Array<{ value: number; [key: string]: unknown }>;\n /** Chart variant */\n variant?: 'area' | 'line' | 'bar';\n /** Color theme */\n color?: keyof typeof colorMap;\n /** Width in pixels */\n width?: number;\n /** Height in pixels */\n height?: number;\n /** Show min/max Y range or auto-scale from 0 */\n autoScale?: boolean;\n /** Animate on mount */\n animate?: boolean;\n /** Accessible label for screen readers */\n 'aria-label'?: string;\n className?: string;\n}\n\nexport function Sparkline({\n data,\n variant = 'area',\n color = 'blue',\n width = 120,\n height = 32,\n autoScale = true,\n animate = true,\n 'aria-label': ariaLabel,\n className,\n}: SparklineProps) {\n const chartData = useMemo(() => {\n return data.map((d, i) => ({\n i,\n value: typeof d === 'number' ? d : d.value,\n }));\n }, [data]);\n\n const { stroke, fill } = colorMap[color] || colorMap.blue;\n\n const yDomain = useMemo(() => {\n if (!autoScale) return [0, 'auto'] as [number, string];\n const values = chartData.map(d => d.value);\n const min = Math.min(...values);\n const max = Math.max(...values);\n const padding = (max - min) * 0.1 || 1;\n return [min - padding, max + padding] as [number, number];\n }, [chartData, autoScale]);\n\n const commonProps = {\n data: chartData,\n margin: { top: 2, right: 2, bottom: 2, left: 2 },\n };\n\n return (\n <div\n role=\"img\"\n aria-label={ariaLabel || 'Sparkline chart'}\n className={twMerge('inline-flex items-center', className)}\n style={{ width, height }}\n >\n <ResponsiveContainer width=\"100%\" height=\"100%\" minWidth={0} minHeight={0}>\n {variant === 'bar' ? (\n <BarChart {...commonProps}>\n <YAxis domain={yDomain} hide />\n <Bar\n dataKey=\"value\"\n fill={stroke}\n opacity={0.6}\n radius={[1, 1, 0, 0]}\n isAnimationActive={animate}\n animationDuration={800}\n />\n </BarChart>\n ) : variant === 'line' ? (\n <LineChart {...commonProps}>\n <YAxis domain={yDomain} hide />\n <Line\n type=\"monotone\"\n dataKey=\"value\"\n stroke={stroke}\n strokeWidth={1.5}\n dot={false}\n isAnimationActive={animate}\n animationDuration={800}\n />\n </LineChart>\n ) : (\n <AreaChart {...commonProps}>\n <defs>\n <linearGradient id={`spark-grad-${color}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={stroke} stopOpacity={0.3} />\n <stop offset=\"100%\" stopColor={stroke} stopOpacity={0} />\n </linearGradient>\n </defs>\n <YAxis domain={yDomain} hide />\n <Area\n type=\"monotone\"\n dataKey=\"value\"\n stroke={stroke}\n strokeWidth={1.5}\n fill={`url(#spark-grad-${color})`}\n isAnimationActive={animate}\n animationDuration={800}\n />\n </AreaChart>\n )}\n </ResponsiveContainer>\n </div>\n );\n}\n\n// ── SparklineBar — Simplified bar-only variant ──\n\nexport interface SparklineBarProps {\n data: number[];\n color?: keyof typeof colorMap;\n width?: number;\n height?: number;\n className?: string;\n}\n\nexport function SparklineBar({\n data,\n color = 'blue',\n width = 80,\n height = 24,\n className,\n}: SparklineBarProps) {\n const { stroke } = colorMap[color] || colorMap.blue;\n const max = Math.max(...data, 1);\n\n return (\n <div\n className={twMerge('inline-flex items-end gap-px', className)}\n style={{ width, height }}\n >\n {data.map((value, i) => (\n <div\n key={i}\n className=\"flex-1 rounded-t-[1px] transition-all duration-300\"\n style={{\n height: `${Math.max((value / max) * 100, 4)}%`,\n backgroundColor: stroke,\n opacity: 0.4 + (value / max) * 0.6,\n }}\n />\n ))}\n </div>\n );\n}\n\n// ── SparklineStat — Sparkline paired with a stat value ──\n\nexport interface SparklineStatProps {\n label: string;\n value: string | number;\n /** Trend percentage (positive = up, negative = down) */\n trend?: number;\n data: number[];\n color?: keyof typeof colorMap;\n variant?: 'area' | 'line' | 'bar';\n className?: string;\n}\n\nexport function SparklineStat({\n label,\n value,\n trend,\n data,\n color = 'blue',\n variant = 'area',\n className,\n}: SparklineStatProps) {\n const trendColor = trend === undefined ? '' : trend >= 0 ? 'text-emerald-400' : 'text-red-400';\n // Auto-pick sparkline color by trend if no color override\n const effectiveColor = trend !== undefined\n ? (trend >= 0 ? 'emerald' : 'red')\n : color;\n\n return (\n <div className={twMerge('flex items-center justify-between gap-3', className)}>\n <div className=\"min-w-0\">\n <p className=\"text-[10px] uppercase tracking-[0.2em] text-sg-text-muted\">{label}</p>\n <div className=\"flex items-baseline gap-2 mt-0.5\">\n <span className=\"text-lg font-mono text-foreground tracking-tight\">{value}</span>\n {trend !== undefined && (\n <span className={twMerge('text-xs', trendColor)}>\n {trend >= 0 ? '+' : ''}{trend.toFixed(1)}%\n </span>\n )}\n </div>\n </div>\n <Sparkline\n data={data}\n color={effectiveColor}\n variant={variant}\n width={100}\n height={28}\n />\n </div>\n );\n}","import React, { useMemo, useState, useCallback } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { SplitSquareVertical, AlignJustify, Copy, Check } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n DiffViewer — Stealth Glass Design System\n @level L3 — Organism: Side-by-side or unified diff view for comparing code/config.\n ═══════════════════════════════════════════════════════════════\n\n Usage:\n <DiffViewer\n oldValue={previousConfig}\n newValue={currentConfig}\n oldTitle=\"v2.3.0\"\n newTitle=\"v2.4.0\"\n language=\"json\"\n />\n ═══════════════════════════════════════════════════════════════ */\n\nexport type DiffMode = 'unified' | 'split';\n\nexport interface DiffLine {\n type: 'added' | 'removed' | 'unchanged' | 'header';\n content: string;\n oldLineNum?: number;\n newLineNum?: number;\n}\n\nexport interface DiffViewerProps {\n /** The original text */\n oldValue: string;\n /** The modified text */\n newValue: string;\n /** Label for the old version */\n oldTitle?: string;\n /** Label for the new version */\n newTitle?: string;\n /** Display mode */\n mode?: DiffMode;\n /** Allow toggling between modes */\n showModeToggle?: boolean;\n /** Language label (decorative) */\n language?: string;\n /** Max height before scroll */\n maxHeight?: string;\n className?: string;\n}\n\n// ── Simple diff algorithm (line-based LCS) ──\n\nfunction computeDiff(oldText: string, newText: string): DiffLine[] {\n const oldLines = oldText.split('\\n');\n const newLines = newText.split('\\n');\n const result: DiffLine[] = [];\n\n // LCS table\n const m = oldLines.length;\n const n = newLines.length;\n const dp: number[][] = Array.from({ length: m + 1 }, () => Array(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 build diff\n let i = m, j = n;\n const stack: DiffLine[] = [];\n\n while (i > 0 || j > 0) {\n if (i > 0 && j > 0 && oldLines[i - 1] === newLines[j - 1]) {\n stack.push({\n type: 'unchanged',\n content: oldLines[i - 1],\n oldLineNum: i,\n newLineNum: j,\n });\n i--;\n j--;\n } else if (j > 0 && (i === 0 || dp[i][j - 1] >= dp[i - 1][j])) {\n stack.push({\n type: 'added',\n content: newLines[j - 1],\n newLineNum: j,\n });\n j--;\n } else if (i > 0) {\n stack.push({\n type: 'removed',\n content: oldLines[i - 1],\n oldLineNum: i,\n });\n i--;\n }\n }\n\n stack.reverse();\n\n // Group into hunks with context\n let lastChangedIdx = -1;\n const contextLines = 3;\n\n for (let idx = 0; idx < stack.length; idx++) {\n if (stack[idx].type !== 'unchanged') {\n // Add header if gap is large\n if (lastChangedIdx >= 0 && idx - lastChangedIdx > contextLines * 2 + 1) {\n // Emit trailing context from last change\n for (let c = lastChangedIdx + 1; c <= lastChangedIdx + contextLines && c < idx; c++) {\n result.push(stack[c]);\n }\n result.push({ type: 'header', content: '...' });\n // Emit leading context for this change\n for (let c = Math.max(idx - contextLines, lastChangedIdx + contextLines + 1); c < idx; c++) {\n result.push(stack[c]);\n }\n } else if (lastChangedIdx >= 0) {\n // No gap, emit all unchanged in between\n for (let c = lastChangedIdx + 1; c < idx; c++) {\n result.push(stack[c]);\n }\n } else {\n // First change — emit leading context\n for (let c = Math.max(0, idx - contextLines); c < idx; c++) {\n result.push(stack[c]);\n }\n }\n result.push(stack[idx]);\n lastChangedIdx = idx;\n }\n }\n\n // Trailing context after last change\n if (lastChangedIdx >= 0) {\n for (let c = lastChangedIdx + 1; c <= lastChangedIdx + contextLines && c < stack.length; c++) {\n result.push(stack[c]);\n }\n }\n\n // If no changes, show all as unchanged\n if (result.length === 0) {\n return stack;\n }\n\n return result;\n}\n\n// ── Stats ──\n\nfunction diffStats(lines: DiffLine[]) {\n let added = 0, removed = 0;\n for (const l of lines) {\n if (l.type === 'added') added++;\n if (l.type === 'removed') removed++;\n }\n return { added, removed };\n}\n\n// ── Line rendering ──\n\nfunction DiffLineRow({ line, showOldNum, showNewNum }: { line: DiffLine; showOldNum?: boolean; showNewNum?: boolean }) {\n if (line.type === 'header') {\n return (\n <div className=\"flex items-center px-4 py-1 bg-white/[0.02] text-[10px] text-sg-text-muted\">\n <span className=\"mx-auto\">···</span>\n </div>\n );\n }\n\n const bgClass =\n line.type === 'added' ? 'bg-emerald-500/[0.06]' :\n line.type === 'removed' ? 'bg-red-500/[0.06]' :\n '';\n\n const textClass =\n line.type === 'added' ? 'text-emerald-300' :\n line.type === 'removed' ? 'text-red-300' :\n 'text-muted-foreground';\n\n const prefix =\n line.type === 'added' ? '+' :\n line.type === 'removed' ? '-' :\n ' ';\n\n const borderClass =\n line.type === 'added' ? 'border-l-2 border-l-emerald-500/40' :\n line.type === 'removed' ? 'border-l-2 border-l-red-500/40' :\n 'border-l-2 border-l-transparent';\n\n return (\n <div className={twMerge('flex items-stretch font-mono text-xs', bgClass, borderClass)}>\n {/* Line numbers */}\n {showOldNum !== false && (\n <span className=\"w-10 shrink-0 text-right pr-2 py-0.5 text-[10px] text-sg-text-muted/50 select-none\">\n {line.oldLineNum ?? ''}\n </span>\n )}\n {showNewNum !== false && (\n <span className=\"w-10 shrink-0 text-right pr-2 py-0.5 text-[10px] text-sg-text-muted/50 select-none border-r border-white/5\">\n {line.newLineNum ?? ''}\n </span>\n )}\n {/* Prefix */}\n <span className={twMerge('w-5 shrink-0 text-center py-0.5 select-none', textClass)}>\n {prefix}\n </span>\n {/* Content */}\n <span className={twMerge('flex-1 py-0.5 pr-4 whitespace-pre', textClass)}>\n {line.content || '\\u00A0'}\n </span>\n </div>\n );\n}\n\nexport function DiffViewer({\n oldValue,\n newValue,\n oldTitle = 'Original',\n newTitle = 'Modified',\n mode: initialMode = 'unified',\n showModeToggle = true,\n language,\n maxHeight = '500px',\n className,\n}: DiffViewerProps) {\n const [mode, setMode] = useState<DiffMode>(initialMode);\n const [copied, setCopied] = useState(false);\n\n const diffLines = useMemo(() => computeDiff(oldValue, newValue), [oldValue, newValue]);\n const stats = useMemo(() => diffStats(diffLines), [diffLines]);\n\n const handleCopy = useCallback(() => {\n const text = diffLines\n .filter(l => l.type !== 'header')\n .map(l => {\n const prefix = l.type === 'added' ? '+ ' : l.type === 'removed' ? '- ' : ' ';\n return prefix + l.content;\n })\n .join('\\n');\n navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }, [diffLines]);\n\n // For split mode, separate into old/new columns\n const splitColumns = useMemo(() => {\n if (mode !== 'split') return { left: [], right: [] };\n\n const left: (DiffLine | null)[] = [];\n const right: (DiffLine | null)[] = [];\n\n let i = 0;\n while (i < diffLines.length) {\n const line = diffLines[i];\n if (line.type === 'unchanged' || line.type === 'header') {\n left.push(line);\n right.push(line);\n i++;\n } else if (line.type === 'removed') {\n // Collect consecutive removed, then consecutive added, pair them\n const removedBatch: DiffLine[] = [];\n while (i < diffLines.length && diffLines[i].type === 'removed') {\n removedBatch.push(diffLines[i]);\n i++;\n }\n const addedBatch: DiffLine[] = [];\n while (i < diffLines.length && diffLines[i].type === 'added') {\n addedBatch.push(diffLines[i]);\n i++;\n }\n const maxLen = Math.max(removedBatch.length, addedBatch.length);\n for (let j = 0; j < maxLen; j++) {\n left.push(j < removedBatch.length ? removedBatch[j] : null);\n right.push(j < addedBatch.length ? addedBatch[j] : null);\n }\n } else if (line.type === 'added') {\n left.push(null);\n right.push(line);\n i++;\n } else {\n i++;\n }\n }\n\n return { left, right };\n }, [diffLines, mode]);\n\n const noDiff = stats.added === 0 && stats.removed === 0;\n\n return (\n <div className={twMerge('rounded-xl border border-white/5 overflow-hidden', className)}>\n {/* Toolbar */}\n <div className=\"flex items-center gap-2 px-4 py-2 bg-white/[0.02] border-b border-white/5\">\n <div className=\"flex items-center gap-3 flex-1 min-w-0\">\n {language && (\n <span className=\"text-[10px] uppercase tracking-wider text-sg-text-muted\">{language}</span>\n )}\n <div className=\"flex items-center gap-2 text-xs\">\n {stats.added > 0 && (\n <span className=\"text-emerald-400\">+{stats.added}</span>\n )}\n {stats.removed > 0 && (\n <span className=\"text-red-400\">-{stats.removed}</span>\n )}\n {noDiff && (\n <span className=\"text-sg-text-muted\">No changes</span>\n )}\n </div>\n </div>\n\n <div className=\"flex items-center gap-1\">\n {showModeToggle && (\n <div className=\"flex items-center bg-white/[0.03] rounded-lg border border-white/5 p-0.5\">\n <button\n onClick={() => setMode('unified')}\n className={twMerge(\n 'p-1 rounded text-sg-text-muted transition-colors cursor-pointer',\n mode === 'unified' && 'bg-white/10 text-white',\n )}\n title=\"Unified view\"\n >\n <AlignJustify className=\"w-3.5 h-3.5\" />\n </button>\n <button\n onClick={() => setMode('split')}\n className={twMerge(\n 'p-1 rounded text-sg-text-muted transition-colors cursor-pointer',\n mode === 'split' && 'bg-white/10 text-white',\n )}\n title=\"Split view\"\n >\n <SplitSquareVertical className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n )}\n <button\n onClick={handleCopy}\n className=\"p-1.5 rounded-lg text-sg-text-muted hover:text-white hover:bg-white/5 transition-colors cursor-pointer\"\n >\n {copied ? <Check className=\"w-3.5 h-3.5 text-emerald-400\" /> : <Copy className=\"w-3.5 h-3.5\" />}\n </button>\n </div>\n </div>\n\n {/* File headers (split mode) */}\n {mode === 'split' && (\n <div className=\"flex border-b border-white/5\">\n <div className=\"flex-1 px-4 py-1.5 text-xs text-sg-text-muted bg-red-500/[0.03] border-r border-white/5\">\n {oldTitle}\n </div>\n <div className=\"flex-1 px-4 py-1.5 text-xs text-sg-text-muted bg-emerald-500/[0.03]\">\n {newTitle}\n </div>\n </div>\n )}\n\n {/* Diff content */}\n <div className=\"overflow-auto\" style={{ maxHeight }}>\n {mode === 'unified' ? (\n <div>\n {diffLines.map((line, i) => (\n <DiffLineRow key={i} line={line} />\n ))}\n </div>\n ) : (\n <div className=\"flex\">\n {/* Left (old) */}\n <div className=\"flex-1 border-r border-white/5\">\n {splitColumns.left.map((line, i) => (\n line ? (\n <DiffLineRow\n key={i}\n line={{ ...line, type: line.type === 'added' ? 'unchanged' : line.type }}\n showNewNum={false}\n />\n ) : (\n <div key={i} className=\"h-[22px] bg-white/[0.01]\" />\n )\n ))}\n </div>\n {/* Right (new) */}\n <div className=\"flex-1\">\n {splitColumns.right.map((line, i) => (\n line ? (\n <DiffLineRow\n key={i}\n line={{ ...line, type: line.type === 'removed' ? 'unchanged' : line.type }}\n showOldNum={false}\n />\n ) : (\n <div key={i} className=\"h-[22px] bg-white/[0.01]\" />\n )\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}","import React, { useState } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport {\n X,\n Info,\n AlertTriangle,\n AlertCircle,\n CheckCircle2,\n Megaphone,\n ArrowRight,\n} from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n Banner — Stealth Glass Design System\n @level L2 — Molecule: Persistent top-of-page announcement/alert bar with dismiss.\n ═══════════════════════════════════════════════════════════════\n\n Usage:\n <Banner\n variant=\"warning\"\n title=\"Scheduled Maintenance\"\n description=\"Platform maintenance on Feb 15, 2026 02:00-04:00 UTC\"\n action={{ label: 'Learn more', onClick: () => {} }}\n onDismiss={() => {}}\n />\n ═══════════════════════════════════════════════════════════════ */\n\nexport type BannerVariant = 'info' | 'warning' | 'error' | 'success' | 'announcement';\n\nexport interface BannerAction {\n label: string;\n onClick: () => void;\n}\n\nexport interface BannerProps {\n variant?: BannerVariant;\n title: string;\n description?: string;\n action?: BannerAction;\n dismissible?: boolean;\n onDismiss?: () => void;\n /** Sticky to top of viewport */\n sticky?: boolean;\n /** Icon override */\n icon?: React.ElementType;\n className?: string;\n}\n\nconst variantStyles: Record<BannerVariant, {\n bg: string;\n border: string;\n icon: React.ElementType;\n iconColor: string;\n titleColor: string;\n descColor: string;\n actionColor: string;\n}> = {\n info: {\n bg: 'bg-blue-500/[0.06]',\n border: 'border-blue-500/20',\n icon: Info,\n iconColor: 'text-blue-400',\n titleColor: 'text-blue-200',\n descColor: 'text-blue-300/70',\n actionColor: 'text-blue-400 hover:text-blue-300',\n },\n warning: {\n bg: 'bg-amber-500/[0.06]',\n border: 'border-amber-500/20',\n icon: AlertTriangle,\n iconColor: 'text-amber-400',\n titleColor: 'text-amber-200',\n descColor: 'text-amber-300/70',\n actionColor: 'text-amber-400 hover:text-amber-300',\n },\n error: {\n bg: 'bg-red-500/[0.06]',\n border: 'border-red-500/20',\n icon: AlertCircle,\n iconColor: 'text-red-400',\n titleColor: 'text-red-200',\n descColor: 'text-red-300/70',\n actionColor: 'text-red-400 hover:text-red-300',\n },\n success: {\n bg: 'bg-emerald-500/[0.06]',\n border: 'border-emerald-500/20',\n icon: CheckCircle2,\n iconColor: 'text-emerald-400',\n titleColor: 'text-emerald-200',\n descColor: 'text-emerald-300/70',\n actionColor: 'text-emerald-400 hover:text-emerald-300',\n },\n announcement: {\n bg: 'bg-gradient-to-r from-indigo-500/[0.08] to-purple-500/[0.08]',\n border: 'border-indigo-500/20',\n icon: Megaphone,\n iconColor: 'text-indigo-400',\n titleColor: 'text-foreground',\n descColor: 'text-muted-foreground',\n actionColor: 'text-indigo-400 hover:text-indigo-300',\n },\n};\n\nexport function Banner({\n variant = 'info',\n title,\n description,\n action,\n dismissible = true,\n onDismiss,\n sticky = false,\n icon: IconOverride,\n className,\n}: BannerProps) {\n const [dismissed, setDismissed] = useState(false);\n\n if (dismissed) return null;\n\n const style = variantStyles[variant];\n const Icon = IconOverride || style.icon;\n\n const handleDismiss = () => {\n setDismissed(true);\n onDismiss?.();\n };\n\n return (\n <div\n className={twMerge(\n 'border-b px-4 py-2.5 transition-all',\n style.bg,\n style.border,\n sticky && 'sticky top-0 z-50 backdrop-blur-xl',\n className,\n )}\n role=\"alert\"\n >\n <div className=\"max-w-[1600px] mx-auto flex items-center gap-3\">\n {/* Icon */}\n <Icon className={twMerge('w-4 h-4 shrink-0', style.iconColor)} />\n\n {/* Content */}\n <div className=\"flex-1 flex items-center gap-2 flex-wrap min-w-0\">\n <span className={twMerge('text-sm', style.titleColor)}>\n {title}\n </span>\n {description && (\n <span className={twMerge('text-xs hidden sm:inline', style.descColor)}>\n — {description}\n </span>\n )}\n </div>\n\n {/* Action */}\n {action && (\n <button\n onClick={action.onClick}\n className={twMerge(\n 'text-xs transition-colors cursor-pointer flex items-center gap-1 shrink-0',\n style.actionColor,\n )}\n >\n {action.label}\n <ArrowRight className=\"w-3 h-3\" />\n </button>\n )}\n\n {/* Dismiss */}\n {dismissible && (\n <button\n onClick={handleDismiss}\n className=\"p-1 rounded text-sg-text-muted hover:text-white hover:bg-white/5 transition-colors cursor-pointer shrink-0\"\n >\n <X className=\"w-3.5 h-3.5\" />\n </button>\n )}\n </div>\n </div>\n );\n}\n\n// ── BannerStack — for multiple banners ──\n\nexport interface BannerStackProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function BannerStack({ children, className }: BannerStackProps) {\n return (\n <div className={twMerge('flex flex-col', className)}>\n {children}\n </div>\n );\n}","import React, { useRef, useEffect, useMemo, useState } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { Copy, Check, Trash2, Circle, Pause, Play, ArrowDown } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n Terminal — Stealth Glass Design System\n @level L3 — Organism: Console output emulator with ANSI color support\n Console output emulator with ANSI color support, auto-scroll,\n timestamps, and streaming support.\n ═══════════════════════════════════════════════════════════════\n\n Usage:\n <Terminal\n lines={[\n { text: 'Building project...', timestamp: new Date() },\n { text: '\\x1b[32m✓\\x1b[0m Compiled successfully', timestamp: new Date() },\n { text: '\\x1b[31mERROR:\\x1b[0m Module not found', type: 'error' },\n ]}\n title=\"Build Output\"\n autoScroll\n />\n ═══════════════════════════════════════════════════════════════ */\n\nexport type TerminalLineType = 'stdout' | 'stderr' | 'system' | 'error' | 'success' | 'warning';\n\nexport interface TerminalLine {\n text: string;\n type?: TerminalLineType;\n timestamp?: Date;\n}\n\nexport interface TerminalProps {\n lines: TerminalLine[];\n title?: string;\n /** Show timestamps beside each line */\n showTimestamps?: boolean;\n /** Auto-scroll to bottom on new lines */\n autoScroll?: boolean;\n /** Max height */\n maxHeight?: string;\n /** Show line numbers */\n lineNumbers?: boolean;\n /** Allow pause/resume of auto-scroll */\n showControls?: boolean;\n /** On clear callback */\n onClear?: () => void;\n className?: string;\n}\n\n// ── ANSI color parser ──\n\ninterface ANSISegment {\n text: string;\n className: string;\n}\n\nconst ansiColorMap: Record<string, string> = {\n '30': 'text-sg-text-muted', // black\n '31': 'text-red-400', // red\n '32': 'text-emerald-400', // green\n '33': 'text-amber-400', // yellow\n '34': 'text-blue-400', // blue\n '35': 'text-purple-400', // magenta\n '36': 'text-cyan-400', // cyan\n '37': 'text-foreground', // white\n '90': 'text-sg-text-muted', // bright black (gray)\n '91': 'text-red-300', // bright red\n '92': 'text-emerald-300', // bright green\n '93': 'text-amber-300', // bright yellow\n '94': 'text-blue-300', // bright blue\n '95': 'text-purple-300', // bright magenta\n '96': 'text-cyan-300', // bright cyan\n '97': 'text-white', // bright white\n '1': 'font-bold', // bold\n '3': 'italic', // italic\n '4': 'underline', // underline\n};\n\nfunction parseANSI(text: string): ANSISegment[] {\n const segments: ANSISegment[] = [];\n // eslint-disable-next-line no-control-regex\n const regex = /\\x1b\\[([0-9;]*)m/g;\n let lastIndex = 0;\n let currentClasses: string[] = [];\n let match;\n\n while ((match = regex.exec(text)) !== null) {\n // Text before this ANSI code\n if (match.index > lastIndex) {\n segments.push({\n text: text.slice(lastIndex, match.index),\n className: currentClasses.join(' '),\n });\n }\n\n // Parse ANSI codes\n const codes = match[1].split(';');\n for (const code of codes) {\n if (code === '0' || code === '') {\n currentClasses = [];\n } else if (ansiColorMap[code]) {\n currentClasses.push(ansiColorMap[code]);\n }\n }\n\n lastIndex = regex.lastIndex;\n }\n\n // Remaining text\n if (lastIndex < text.length) {\n segments.push({\n text: text.slice(lastIndex),\n className: currentClasses.join(' '),\n });\n }\n\n return segments.length > 0 ? segments : [{ text, className: '' }];\n}\n\n// ── Line type colors ──\n\nconst lineTypeStyles: Record<TerminalLineType, string> = {\n stdout: 'text-muted-foreground',\n stderr: 'text-red-400',\n system: 'text-sg-text-muted italic',\n error: 'text-red-400',\n success: 'text-emerald-400',\n warning: 'text-amber-400',\n};\n\nfunction formatTimestamp(date: Date): string {\n return date.toLocaleTimeString('en-US', {\n hour12: false,\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n }) + '.' + String(date.getMilliseconds()).padStart(3, '0');\n}\n\nfunction TerminalLineRow({\n line,\n index,\n showTimestamps,\n lineNumbers,\n}: {\n line: TerminalLine;\n index: number;\n showTimestamps: boolean;\n lineNumbers: boolean;\n}) {\n const segments = useMemo(() => parseANSI(line.text), [line.text]);\n const baseStyle = lineTypeStyles[line.type || 'stdout'];\n\n return (\n <div className={twMerge(\n 'flex items-start gap-0 font-mono text-xs leading-5 hover:bg-white/[0.02] group',\n line.type === 'error' && 'bg-red-500/[0.03]',\n )}>\n {/* Line number */}\n {lineNumbers && (\n <span className=\"w-10 shrink-0 text-right pr-3 text-[10px] text-sg-text-muted/30 select-none\">\n {index + 1}\n </span>\n )}\n\n {/* Timestamp */}\n {showTimestamps && line.timestamp && (\n <span className=\"shrink-0 pr-3 text-[10px] text-sg-text-muted/50 select-none\">\n {formatTimestamp(line.timestamp)}\n </span>\n )}\n\n {/* Content */}\n <span className={twMerge('flex-1 whitespace-pre-wrap break-all', baseStyle)}>\n {segments.map((seg, i) => (\n <span key={i} className={seg.className || undefined}>\n {seg.text}\n </span>\n ))}\n </span>\n </div>\n );\n}\n\nexport function Terminal({\n lines,\n title = 'Terminal',\n showTimestamps = false,\n autoScroll: initialAutoScroll = true,\n maxHeight = '400px',\n lineNumbers = false,\n showControls = true,\n onClear,\n className,\n}: TerminalProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const [autoScroll, setAutoScroll] = useState(initialAutoScroll);\n const [copied, setCopied] = useState(false);\n const [isAtBottom, setIsAtBottom] = useState(true);\n\n // Auto-scroll effect\n useEffect(() => {\n if (autoScroll && containerRef.current) {\n containerRef.current.scrollTop = containerRef.current.scrollHeight;\n }\n }, [lines.length, autoScroll]);\n\n // Detect scroll position\n const handleScroll = () => {\n if (!containerRef.current) return;\n const { scrollTop, scrollHeight, clientHeight } = containerRef.current;\n const atBottom = scrollHeight - scrollTop - clientHeight < 30;\n setIsAtBottom(atBottom);\n if (!atBottom && autoScroll) {\n setAutoScroll(false);\n }\n };\n\n const scrollToBottom = () => {\n if (containerRef.current) {\n containerRef.current.scrollTop = containerRef.current.scrollHeight;\n }\n setAutoScroll(true);\n };\n\n const handleCopy = () => {\n const text = lines.map(l => l.text).join('\\n');\n navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n };\n\n return (\n <div className={twMerge('rounded-xl border border-white/5 overflow-hidden bg-background relative', className)}>\n {/* Header */}\n <div className=\"flex items-center gap-2 px-3 py-2 bg-white/[0.02] border-b border-white/5\">\n {/* Traffic lights */}\n <div className=\"flex items-center gap-1.5 mr-2\">\n <Circle className=\"w-2.5 h-2.5 fill-red-500/60 text-red-500/60\" />\n <Circle className=\"w-2.5 h-2.5 fill-amber-500/60 text-amber-500/60\" />\n <Circle className=\"w-2.5 h-2.5 fill-emerald-500/60 text-emerald-500/60\" />\n </div>\n\n <span className=\"text-xs text-sg-text-muted flex-1\">{title}</span>\n\n {/* Controls */}\n {showControls && (\n <div className=\"flex items-center gap-1\">\n <span className=\"text-[10px] text-sg-text-muted mr-1\">\n {lines.length} lines\n </span>\n <button\n onClick={() => setAutoScroll(!autoScroll)}\n className={twMerge(\n 'p-1 rounded text-sg-text-muted hover:text-white hover:bg-white/5 transition-colors cursor-pointer',\n autoScroll && 'text-blue-400',\n )}\n title={autoScroll ? 'Pause auto-scroll' : 'Resume auto-scroll'}\n >\n {autoScroll ? <Pause className=\"w-3 h-3\" /> : <Play className=\"w-3 h-3\" />}\n </button>\n <button\n onClick={handleCopy}\n className=\"p-1 rounded text-sg-text-muted hover:text-white hover:bg-white/5 transition-colors cursor-pointer\"\n title=\"Copy output\"\n >\n {copied ? <Check className=\"w-3 h-3 text-emerald-400\" /> : <Copy className=\"w-3 h-3\" />}\n </button>\n {onClear && (\n <button\n onClick={onClear}\n className=\"p-1 rounded text-sg-text-muted hover:text-red-400 hover:bg-red-500/10 transition-colors cursor-pointer\"\n title=\"Clear terminal\"\n >\n <Trash2 className=\"w-3 h-3\" />\n </button>\n )}\n </div>\n )}\n </div>\n\n {/* Terminal output */}\n <div\n ref={containerRef}\n className=\"overflow-auto px-3 py-2\"\n style={{ maxHeight }}\n onScroll={handleScroll}\n >\n {lines.length === 0 ? (\n <div className=\"text-xs text-sg-text-muted/40 font-mono py-4 text-center\">\n Waiting for output...\n </div>\n ) : (\n lines.map((line, i) => (\n <TerminalLineRow\n key={i}\n line={line}\n index={i}\n showTimestamps={showTimestamps}\n lineNumbers={lineNumbers}\n />\n ))\n )}\n </div>\n\n {/* Scroll-to-bottom button */}\n {!isAtBottom && (\n <div className=\"absolute bottom-2 right-4\">\n <button\n onClick={scrollToBottom}\n className=\"p-1.5 rounded-full bg-white/10 text-white hover:bg-white/20 transition-colors cursor-pointer shadow-lg\"\n >\n <ArrowDown className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n )}\n </div>\n );\n}","import React, { useState, useCallback, useMemo } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport {\n Calendar as CalendarIcon,\n Clock,\n ChevronLeft,\n ChevronRight,\n X,\n} from 'lucide-react';\nimport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n} from './Popover';\n/* @level L2 — Molecule: Calendar + time picker with popover */\nimport {\n format,\n startOfMonth,\n endOfMonth,\n startOfWeek,\n endOfWeek,\n addMonths,\n subMonths,\n eachDayOfInterval,\n isSameDay,\n isSameMonth,\n isToday,\n setHours,\n setMinutes,\n} from 'date-fns';\n\n/* ═══════════════════════════════════════════════════════════════\n DateTimePicker — Stealth Glass Design System\n Single date and optional time selection with calendar popup.\n ═══════════════════════════════════════════════════════════════\n\n Usage:\n <DateTimePicker\n value={new Date()}\n onChange={(date) => {}}\n showTime\n placeholder=\"Pick a date\"\n />\n ═══════════════════════════════════════════════════════════════ */\n\nexport interface DateTimePickerProps {\n value?: Date | null;\n onChange: (date: Date | null) => void;\n /** Show time picker */\n showTime?: boolean;\n /** Min date */\n minDate?: Date;\n /** Max date */\n maxDate?: Date;\n /** Placeholder text */\n placeholder?: string;\n /** Label above the picker */\n label?: string;\n /** Size variant */\n size?: 'sm' | 'md';\n /** Allow clearing the value */\n clearable?: boolean;\n /** Disabled state */\n disabled?: boolean;\n className?: string;\n}\n\nconst DAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\nconst HOURS = Array.from({ length: 24 }, (_, i) => i);\nconst MINUTES = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55];\n\nexport function DateTimePicker({\n value,\n onChange,\n showTime = false,\n minDate,\n maxDate,\n placeholder = 'Select date',\n label,\n size = 'md',\n clearable = true,\n disabled = false,\n className,\n}: DateTimePickerProps) {\n const [open, setOpen] = useState(false);\n const [viewDate, setViewDate] = useState(value || new Date());\n const [timeView, setTimeView] = useState(false);\n\n // Calendar grid\n const calendarDays = useMemo(() => {\n const monthStart = startOfMonth(viewDate);\n const monthEnd = endOfMonth(viewDate);\n const calStart = startOfWeek(monthStart);\n const calEnd = endOfWeek(monthEnd);\n return eachDayOfInterval({ start: calStart, end: calEnd });\n }, [viewDate]);\n\n const handleSelectDay = useCallback((day: Date) => {\n const newDate = value ? new Date(value) : new Date();\n newDate.setFullYear(day.getFullYear(), day.getMonth(), day.getDate());\n if (!showTime) {\n onChange(newDate);\n setOpen(false);\n } else {\n onChange(newDate);\n }\n }, [value, onChange, showTime]);\n\n const handleSetHour = useCallback((hour: number) => {\n const d = value ? new Date(value) : new Date();\n onChange(setHours(d, hour));\n }, [value, onChange]);\n\n const handleSetMinute = useCallback((minute: number) => {\n const d = value ? new Date(value) : new Date();\n onChange(setMinutes(d, minute));\n setTimeView(false);\n setOpen(false);\n }, [value, onChange]);\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange(null);\n };\n\n const isDayDisabled = (day: Date): boolean => {\n if (minDate && day < minDate) return true;\n if (maxDate && day > maxDate) return true;\n return false;\n };\n\n const formatDisplay = (): string => {\n if (!value) return '';\n if (showTime) {\n return format(value, 'MMM d, yyyy HH:mm');\n }\n return format(value, 'MMM d, yyyy');\n };\n\n const sizeClasses = size === 'sm' ? 'h-8 px-2.5 text-xs' : 'h-10 px-3 text-sm';\n\n return (\n <div className={twMerge('inline-flex flex-col', className)}>\n {label && (\n <label className=\"text-sm text-foreground mb-1.5\">{label}</label>\n )}\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n disabled={disabled}\n className={twMerge(\n 'inline-flex items-center gap-2 rounded-xl',\n 'bg-white/[0.03] border border-white/5 transition-all cursor-pointer',\n 'hover:bg-white/[0.05] hover:border-white/10',\n 'focus:border-blue-500/50 focus:bg-white/[0.05] focus:shadow-[0_0_0_2px_rgba(59,130,246,0.2)]',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n sizeClasses,\n value ? 'text-foreground' : 'text-sg-text-muted',\n )}\n >\n <CalendarIcon className=\"w-4 h-4 text-sg-text-muted shrink-0\" />\n <span className=\"flex-1 text-left truncate\">\n {formatDisplay() || placeholder}\n </span>\n {clearable && value && (\n <button\n onClick={handleClear}\n className=\"p-0.5 rounded text-sg-text-muted hover:text-white transition-colors cursor-pointer\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n )}\n </button>\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n sideOffset={4}\n className=\"p-0 w-[280px] rounded-xl border border-white/5 bg-card shadow-sg-dropdown\"\n >\n {!timeView ? (\n <>\n {/* Month navigation */}\n <div className=\"flex items-center justify-between px-3 py-2.5 border-b border-white/5\">\n <button\n onClick={() => setViewDate(subMonths(viewDate, 1))}\n className=\"p-1 rounded text-sg-text-muted hover:text-white hover:bg-white/5 transition-colors cursor-pointer\"\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </button>\n <span className=\"text-sm text-foreground\">\n {format(viewDate, 'MMMM yyyy')}\n </span>\n <button\n onClick={() => setViewDate(addMonths(viewDate, 1))}\n className=\"p-1 rounded text-sg-text-muted hover:text-white hover:bg-white/5 transition-colors cursor-pointer\"\n >\n <ChevronRight className=\"w-4 h-4\" />\n </button>\n </div>\n\n {/* Day names */}\n <div className=\"grid grid-cols-7 gap-0 px-2 pt-2\">\n {DAYS.map(day => (\n <div key={day} className=\"text-center text-[10px] text-sg-text-muted py-1\">\n {day}\n </div>\n ))}\n </div>\n\n {/* Calendar grid */}\n <div className=\"grid grid-cols-7 gap-0 px-2 pb-2\">\n {calendarDays.map((day, i) => {\n const isSelected = value ? isSameDay(day, value) : false;\n const isCurrentMonth = isSameMonth(day, viewDate);\n const isDisabled = isDayDisabled(day);\n const isCurrentDay = isToday(day);\n\n return (\n <button\n key={i}\n disabled={isDisabled}\n onClick={() => handleSelectDay(day)}\n className={twMerge(\n 'h-8 text-xs rounded-lg transition-colors cursor-pointer',\n 'hover:bg-white/5',\n !isCurrentMonth && 'text-sg-text-muted/30',\n isCurrentMonth && !isSelected && 'text-muted-foreground',\n isCurrentDay && !isSelected && 'text-blue-400 bg-blue-500/[0.06]',\n isSelected && 'bg-blue-500 text-white hover:bg-blue-600',\n isDisabled && 'opacity-30 cursor-not-allowed',\n )}\n >\n {format(day, 'd')}\n </button>\n );\n })}\n </div>\n\n {/* Time button */}\n {showTime && (\n <div className=\"border-t border-white/5 px-3 py-2\">\n <button\n onClick={() => setTimeView(true)}\n className=\"w-full flex items-center justify-center gap-2 py-1.5 rounded-lg bg-white/[0.03] border border-white/5 text-xs text-muted-foreground hover:bg-white/[0.06] hover:text-white transition-colors cursor-pointer\"\n >\n <Clock className=\"w-3.5 h-3.5\" />\n {value ? format(value, 'HH:mm') : 'Set time'}\n </button>\n </div>\n )}\n\n {/* Today shortcut */}\n <div className=\"border-t border-white/5 px-3 py-2\">\n <button\n onClick={() => {\n const today = new Date();\n setViewDate(today);\n handleSelectDay(today);\n }}\n className=\"w-full text-xs text-sg-text-muted hover:text-white transition-colors cursor-pointer text-center\"\n >\n Today\n </button>\n </div>\n </>\n ) : (\n /* Time selection */\n <div className=\"p-3\">\n <div className=\"flex items-center justify-between mb-3\">\n <button\n onClick={() => setTimeView(false)}\n className=\"p-1 rounded text-sg-text-muted hover:text-white hover:bg-white/5 transition-colors cursor-pointer\"\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </button>\n <span className=\"text-sm text-foreground\">Select Time</span>\n <div className=\"w-6\" />\n </div>\n\n {/* Hour grid */}\n <p className=\"text-[10px] uppercase tracking-wider text-sg-text-muted mb-1.5\">Hour</p>\n <div className=\"grid grid-cols-6 gap-1 mb-3\">\n {HOURS.map(h => (\n <button\n key={h}\n onClick={() => handleSetHour(h)}\n className={twMerge(\n 'h-7 text-xs rounded transition-colors cursor-pointer',\n 'hover:bg-white/5 text-muted-foreground',\n value && value.getHours() === h && 'bg-blue-500 text-white hover:bg-blue-600',\n )}\n >\n {String(h).padStart(2, '0')}\n </button>\n ))}\n </div>\n\n {/* Minute grid */}\n <p className=\"text-[10px] uppercase tracking-wider text-sg-text-muted mb-1.5\">Minute</p>\n <div className=\"grid grid-cols-6 gap-1\">\n {MINUTES.map(m => (\n <button\n key={m}\n onClick={() => handleSetMinute(m)}\n className={twMerge(\n 'h-7 text-xs rounded transition-colors cursor-pointer',\n 'hover:bg-white/5 text-muted-foreground',\n value && value.getMinutes() === m && 'bg-blue-500 text-white hover:bg-blue-600',\n )}\n >\n :{String(m).padStart(2, '0')}\n </button>\n ))}\n </div>\n </div>\n )}\n </PopoverContent>\n </Popover>\n </div>\n );\n}","import React, { useMemo } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport {\n Check,\n X,\n Loader2,\n Clock,\n SkipForward,\n Circle,\n ChevronRight,\n} from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n Pipeline — Stealth Glass Design System\n @level L3 — Organism: CI/CD deployment pipeline visualization with parallel stages,\n per-step statuses, and duration display.\n ═══════════════════════════════════════════════════════════════\n\n Usage:\n <Pipeline\n stages={[\n {\n id: 'build',\n name: 'Build',\n status: 'success',\n duration: '45s',\n steps: [\n { id: 'install', name: 'Install deps', status: 'success', duration: '12s' },\n { id: 'compile', name: 'Compile', status: 'success', duration: '33s' },\n ],\n },\n {\n id: 'test',\n name: 'Test',\n status: 'running',\n parallel: true,\n steps: [\n { id: 'unit', name: 'Unit Tests', status: 'success', duration: '20s' },\n { id: 'e2e', name: 'E2E Tests', status: 'running' },\n ],\n },\n {\n id: 'deploy',\n name: 'Deploy',\n status: 'pending',\n },\n ]}\n />\n ═══════════════════════════════════════════════════════════════ */\n\nexport type PipelineStepStatus = 'pending' | 'running' | 'success' | 'failed' | 'skipped' | 'cancelled';\n\nexport interface PipelineStep {\n id: string;\n name: string;\n status: PipelineStepStatus;\n duration?: string;\n /** Log output preview */\n logPreview?: string;\n}\n\nexport interface PipelineStage {\n id: string;\n name: string;\n status: PipelineStepStatus;\n duration?: string;\n /** Steps within this stage */\n steps?: PipelineStep[];\n /** Are steps parallel? */\n parallel?: boolean;\n}\n\nexport interface PipelineProps {\n stages: PipelineStage[];\n /** Compact mode (no step details) */\n compact?: boolean;\n /** Currently selected stage ID */\n selectedStageId?: string;\n onStageClick?: (stageId: string) => void;\n className?: string;\n}\n\n// ── Status rendering ──\n\nconst statusConfig: Record<PipelineStepStatus, {\n icon: React.ElementType;\n color: string;\n bg: string;\n border: string;\n animate?: string;\n}> = {\n pending: { icon: Clock, color: 'text-sg-text-muted', bg: 'bg-white/5', border: 'border-white/10' },\n running: { icon: Loader2, color: 'text-blue-400', bg: 'bg-blue-500/10', border: 'border-blue-500/30', animate: 'animate-spin' },\n success: { icon: Check, color: 'text-emerald-400', bg: 'bg-emerald-500/10', border: 'border-emerald-500/30' },\n failed: { icon: X, color: 'text-red-400', bg: 'bg-red-500/10', border: 'border-red-500/30' },\n skipped: { icon: SkipForward, color: 'text-sg-text-muted', bg: 'bg-white/[0.02]', border: 'border-white/5' },\n cancelled: { icon: Circle, color: 'text-sg-text-muted', bg: 'bg-white/[0.02]', border: 'border-white/5' },\n};\n\nconst connectorColor: Record<PipelineStepStatus, string> = {\n pending: 'bg-white/10',\n running: 'bg-blue-500/30',\n success: 'bg-emerald-500/30',\n failed: 'bg-red-500/30',\n skipped: 'bg-white/5',\n cancelled: 'bg-white/5',\n};\n\nfunction StatusIcon({ status, size = 'md' }: { status: PipelineStepStatus; size?: 'sm' | 'md' }) {\n const config = statusConfig[status];\n const Icon = config.icon;\n const iconSize = size === 'sm' ? 'w-3 h-3' : 'w-4 h-4';\n const containerSize = size === 'sm' ? 'w-5 h-5' : 'w-7 h-7';\n\n return (\n <div className={twMerge(\n 'rounded-full flex items-center justify-center shrink-0',\n containerSize,\n config.bg,\n `border ${config.border}`,\n )}>\n <Icon className={twMerge(iconSize, config.color, config.animate)} />\n </div>\n );\n}\n\n// ── Stage card ──\n\nfunction StageCard({\n stage,\n isSelected,\n onClick,\n compact,\n isLast,\n}: {\n stage: PipelineStage;\n isSelected: boolean;\n onClick?: () => void;\n compact: boolean;\n isLast: boolean;\n}) {\n const config = statusConfig[stage.status];\n\n return (\n <div className=\"flex items-stretch\">\n {/* Stage box */}\n <div\n onClick={onClick}\n className={twMerge(\n 'rounded-xl border transition-all min-w-[140px] max-w-[200px]',\n config.border,\n 'bg-white/[0.02]',\n onClick && 'cursor-pointer hover:bg-white/[0.04]',\n isSelected && 'ring-1 ring-blue-500/40 bg-blue-500/[0.04]',\n )}\n >\n {/* Header */}\n <div className=\"flex items-center gap-2 px-3 py-2.5\">\n <StatusIcon status={stage.status} />\n <div className=\"min-w-0 flex-1\">\n <p className={twMerge(\n 'text-sm truncate',\n stage.status === 'pending' || stage.status === 'skipped' ? 'text-sg-text-muted' : 'text-foreground',\n )}>\n {stage.name}\n </p>\n {stage.duration && (\n <p className=\"text-[10px] font-mono text-sg-text-muted\">{stage.duration}</p>\n )}\n </div>\n </div>\n\n {/* Steps (non-compact) */}\n {!compact && stage.steps && stage.steps.length > 0 && (\n <div className=\"border-t border-white/5 px-3 py-2 space-y-1.5\">\n {stage.parallel && (\n <p className=\"text-[9px] uppercase tracking-wider text-sg-text-muted/60 mb-1\">Parallel</p>\n )}\n {stage.steps.map(step => (\n <div key={step.id} className=\"flex items-center gap-2\">\n <StatusIcon status={step.status} size=\"sm\" />\n <span className={twMerge(\n 'text-xs truncate flex-1',\n step.status === 'pending' || step.status === 'skipped' ? 'text-sg-text-muted' : 'text-muted-foreground',\n )}>\n {step.name}\n </span>\n {step.duration && (\n <span className=\"text-[10px] font-mono text-sg-text-muted shrink-0\">\n {step.duration}\n </span>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Connector arrow */}\n {!isLast && (\n <div className=\"flex items-center px-2 shrink-0\">\n <div className={twMerge('h-0.5 w-6 rounded-full', connectorColor[stage.status])} />\n <ChevronRight className={twMerge('w-4 h-4 -ml-1', config.color)} />\n </div>\n )}\n </div>\n );\n}\n\nexport function Pipeline({\n stages,\n compact = false,\n selectedStageId,\n onStageClick,\n className,\n}: PipelineProps) {\n // Summary stats\n const summary = useMemo(() => {\n let passed = 0, failed = 0, running = 0, pending = 0;\n for (const s of stages) {\n if (s.status === 'success') passed++;\n else if (s.status === 'failed') failed++;\n else if (s.status === 'running') running++;\n else pending++;\n }\n return { passed, failed, running, pending, total: stages.length };\n }, [stages]);\n\n return (\n <div className={twMerge('', className)}>\n {/* Summary bar */}\n <div className=\"flex items-center gap-3 mb-4\">\n <div className=\"flex-1 flex items-center gap-4 text-xs\">\n {summary.passed > 0 && (\n <span className=\"text-emerald-400\">{summary.passed} passed</span>\n )}\n {summary.running > 0 && (\n <span className=\"text-blue-400\">{summary.running} running</span>\n )}\n {summary.failed > 0 && (\n <span className=\"text-red-400\">{summary.failed} failed</span>\n )}\n {summary.pending > 0 && (\n <span className=\"text-sg-text-muted\">{summary.pending} pending</span>\n )}\n </div>\n {/* Progress bar */}\n <div className=\"w-32 h-1.5 rounded-full bg-white/5 overflow-hidden flex\">\n {summary.passed > 0 && (\n <div\n className=\"h-full bg-emerald-500\"\n style={{ width: `${(summary.passed / summary.total) * 100}%` }}\n />\n )}\n {summary.running > 0 && (\n <div\n className=\"h-full bg-blue-500 animate-pulse\"\n style={{ width: `${(summary.running / summary.total) * 100}%` }}\n />\n )}\n {summary.failed > 0 && (\n <div\n className=\"h-full bg-red-500\"\n style={{ width: `${(summary.failed / summary.total) * 100}%` }}\n />\n )}\n </div>\n </div>\n\n {/* Pipeline stages */}\n <div className=\"flex items-start overflow-x-auto pb-2 scrollbar-none\">\n {stages.map((stage, i) => (\n <StageCard\n key={stage.id}\n stage={stage}\n isSelected={selectedStageId === stage.id}\n onClick={onStageClick ? () => onStageClick(stage.id) : undefined}\n compact={compact}\n isLast={i === stages.length - 1}\n />\n ))}\n </div>\n </div>\n );\n}","import React from 'react';\nimport * as ContextMenuPrimitive from '@radix-ui/react-context-menu';\nimport { twMerge } from 'tailwind-merge';\nimport { Check, ChevronRight, Circle } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n ContextMenu — Stealth Glass Design System\n @level L3 — Organism: Right-click context menu (Radix)\n ═══════════════════════════════════════════════════════════════\n\n Usage:\n <ContextMenu>\n <ContextMenuTrigger>\n <div>Right-click me</div>\n </ContextMenuTrigger>\n <ContextMenuContent>\n <ContextMenuItem onSelect={() => {}}>\n Copy\n </ContextMenuItem>\n <ContextMenuSeparator />\n <ContextMenuSub>\n <ContextMenuSubTrigger>More</ContextMenuSubTrigger>\n <ContextMenuSubContent>\n <ContextMenuItem>Rename</ContextMenuItem>\n </ContextMenuSubContent>\n </ContextMenuSub>\n </ContextMenuContent>\n </ContextMenu>\n ═══════════════════════════════════════════════════════════════ */\n\nexport const ContextMenu = ContextMenuPrimitive.Root;\nexport const ContextMenuTrigger = ContextMenuPrimitive.Trigger;\nexport const ContextMenuGroup = ContextMenuPrimitive.Group;\nexport const ContextMenuPortal = ContextMenuPrimitive.Portal;\nexport const ContextMenuSub = ContextMenuPrimitive.Sub;\nexport const ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup;\n\n// ── Content ──\n\nexport const ContextMenuContent = React.forwardRef<\n React.ComponentRef<typeof ContextMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <ContextMenuPrimitive.Portal>\n <ContextMenuPrimitive.Content\n ref={ref}\n className={twMerge(\n 'z-50 min-w-[180px] overflow-hidden rounded-xl p-1',\n 'bg-card border border-white/5',\n 'shadow-[0_16px_48px_rgba(0,0,0,0.4),0_0_0_1px_rgba(255,255,255,0.05)]',\n 'animate-in fade-in-0 zoom-in-95 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=top]:slide-in-from-bottom-2',\n 'data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2',\n className,\n )}\n {...props}\n />\n </ContextMenuPrimitive.Portal>\n));\nContextMenuContent.displayName = 'ContextMenuContent';\n\n// ── Item ──\n\nexport interface ContextMenuItemProps\n extends React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Item> {\n icon?: React.ElementType;\n shortcut?: string;\n destructive?: boolean;\n}\n\nexport const ContextMenuItem = React.forwardRef<HTMLDivElement, ContextMenuItemProps>(\n ({ className, icon: Icon, shortcut, destructive = false, children, ...props }, ref) => (\n <ContextMenuPrimitive.Item\n ref={ref}\n className={twMerge(\n 'relative flex items-center gap-2 rounded-lg px-2.5 py-1.5 text-sm outline-none select-none',\n 'transition-colors cursor-pointer',\n destructive\n ? 'text-red-400 data-[highlighted]:bg-red-500/10 data-[highlighted]:text-red-300'\n : 'text-muted-foreground data-[highlighted]:bg-white/5 data-[highlighted]:text-foreground',\n 'data-[disabled]:opacity-40 data-[disabled]:pointer-events-none',\n className,\n )}\n {...props}\n >\n {Icon && <Icon className=\"w-4 h-4 shrink-0\" />}\n <span className=\"flex-1\">{children}</span>\n {shortcut && (\n <span className=\"ml-auto text-xs text-sg-text-muted tracking-wide\">{shortcut}</span>\n )}\n </ContextMenuPrimitive.Item>\n ),\n);\nContextMenuItem.displayName = 'ContextMenuItem';\n\n// ── CheckboxItem ──\n\nexport const ContextMenuCheckboxItem = React.forwardRef<\n React.ComponentRef<typeof ContextMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <ContextMenuPrimitive.CheckboxItem\n ref={ref}\n className={twMerge(\n 'relative flex items-center gap-2 rounded-lg px-2.5 py-1.5 pl-8 text-sm outline-none select-none',\n 'text-muted-foreground data-[highlighted]:bg-white/5 data-[highlighted]:text-foreground',\n 'transition-colors cursor-pointer',\n 'data-[disabled]:opacity-40 data-[disabled]:pointer-events-none',\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2.5 flex h-4 w-4 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <Check className=\"h-3.5 w-3.5 text-blue-400\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.CheckboxItem>\n));\nContextMenuCheckboxItem.displayName = 'ContextMenuCheckboxItem';\n\n// ── RadioItem ──\n\nexport const ContextMenuRadioItem = React.forwardRef<\n React.ComponentRef<typeof ContextMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <ContextMenuPrimitive.RadioItem\n ref={ref}\n className={twMerge(\n 'relative flex items-center gap-2 rounded-lg px-2.5 py-1.5 pl-8 text-sm outline-none select-none',\n 'text-muted-foreground data-[highlighted]:bg-white/5 data-[highlighted]:text-foreground',\n 'transition-colors cursor-pointer',\n 'data-[disabled]:opacity-40 data-[disabled]:pointer-events-none',\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2.5 flex h-4 w-4 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-blue-400 text-blue-400\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.RadioItem>\n));\nContextMenuRadioItem.displayName = 'ContextMenuRadioItem';\n\n// ── Label ──\n\nexport const ContextMenuLabel = React.forwardRef<\n React.ComponentRef<typeof ContextMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Label> & { inset?: boolean }\n>(({ className, inset, ...props }, ref) => (\n <ContextMenuPrimitive.Label\n ref={ref}\n className={twMerge(\n 'px-2.5 py-1 text-[10px] uppercase tracking-[0.2em] text-sg-text-muted',\n inset && 'pl-8',\n className,\n )}\n {...props}\n />\n));\nContextMenuLabel.displayName = 'ContextMenuLabel';\n\n// ── Separator ──\n\nexport const ContextMenuSeparator = React.forwardRef<\n React.ComponentRef<typeof ContextMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <ContextMenuPrimitive.Separator\n ref={ref}\n className={twMerge('my-1 h-px bg-white/5', className)}\n {...props}\n />\n));\nContextMenuSeparator.displayName = 'ContextMenuSeparator';\n\n// ── SubTrigger ──\n\nexport const ContextMenuSubTrigger = React.forwardRef<\n React.ComponentRef<typeof ContextMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubTrigger> & { icon?: React.ElementType }\n>(({ className, icon: Icon, children, ...props }, ref) => (\n <ContextMenuPrimitive.SubTrigger\n ref={ref}\n className={twMerge(\n 'flex items-center gap-2 rounded-lg px-2.5 py-1.5 text-sm outline-none select-none',\n 'text-muted-foreground data-[highlighted]:bg-white/5 data-[highlighted]:text-foreground',\n 'data-[state=open]:bg-white/5 transition-colors cursor-pointer',\n className,\n )}\n {...props}\n >\n {Icon && <Icon className=\"w-4 h-4 shrink-0\" />}\n <span className=\"flex-1\">{children}</span>\n <ChevronRight className=\"ml-auto h-3.5 w-3.5 text-sg-text-muted\" />\n </ContextMenuPrimitive.SubTrigger>\n));\nContextMenuSubTrigger.displayName = 'ContextMenuSubTrigger';\n\n// ── SubContent ──\n\nexport const ContextMenuSubContent = React.forwardRef<\n React.ComponentRef<typeof ContextMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <ContextMenuPrimitive.SubContent\n ref={ref}\n className={twMerge(\n 'z-50 min-w-[160px] overflow-hidden rounded-xl p-1',\n 'bg-card border border-white/5',\n 'shadow-[0_16px_48px_rgba(0,0,0,0.4),0_0_0_1px_rgba(255,255,255,0.05)]',\n 'animate-in fade-in-0 zoom-in-95 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=top]:slide-in-from-bottom-2',\n 'data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2',\n className,\n )}\n {...props}\n />\n));\nContextMenuSubContent.displayName = 'ContextMenuSubContent';","import React, { useState, useCallback, useMemo } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { X, Search, SlidersHorizontal, ChevronDown, Check, Plus } from 'lucide-react';\nimport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n} from './Popover';\n\n/* ═══════════════════════════════════════════════════════════════\n FilterBar — Stealth Glass Design System\n @level L3 — Organism: Multi-criteria faceted search/filter bar with filter chips,\n dropdowns, and search. Perfect for logs, functions, deployments.\n ═══════════════════════════════════════════════════════════════\n\n Usage:\n <FilterBar\n filters={[\n {\n id: 'status',\n label: 'Status',\n type: 'select',\n options: [\n { value: 'running', label: 'Running' },\n { value: 'stopped', label: 'Stopped' },\n ],\n },\n {\n id: 'runtime',\n label: 'Runtime',\n type: 'multi-select',\n options: [\n { value: 'nodejs', label: 'Node.js' },\n { value: 'python', label: 'Python' },\n ],\n },\n {\n id: 'region',\n label: 'Region',\n type: 'select',\n options: [...],\n },\n ]}\n activeFilters={activeFilters}\n onFiltersChange={setActiveFilters}\n searchValue={search}\n onSearchChange={setSearch}\n searchPlaceholder=\"Search functions...\"\n />\n ═══════════════════════════════════════════════════════════════ */\n\nexport interface FilterOption {\n value: string;\n label: string;\n /** Optional color dot (e.g., for status) */\n color?: string;\n /** Count of matching items */\n count?: number;\n}\n\nexport interface FilterDefinition {\n id: string;\n label: string;\n type: 'select' | 'multi-select';\n options: FilterOption[];\n /** Icon for the filter */\n icon?: React.ElementType;\n}\n\nexport interface ActiveFilter {\n filterId: string;\n values: string[];\n}\n\nexport interface FilterBarProps {\n filters: FilterDefinition[];\n activeFilters: ActiveFilter[];\n onFiltersChange: (filters: ActiveFilter[]) => void;\n /** Search input */\n searchValue?: string;\n onSearchChange?: (value: string) => void;\n searchPlaceholder?: string;\n /** Show filter count badges */\n showCounts?: boolean;\n className?: string;\n}\n\n// ── Filter Chip (active filter display) ──\n\nfunction FilterChip({\n filter,\n active,\n onRemove,\n}: {\n filter: FilterDefinition;\n active: ActiveFilter;\n onRemove: () => void;\n}) {\n const labels = active.values.map(v => {\n const opt = filter.options.find(o => o.value === v);\n return opt?.label || v;\n });\n const displayLabel = labels.length <= 2 ? labels.join(', ') : `${labels[0]} +${labels.length - 1}`;\n\n return (\n <div className=\"inline-flex items-center gap-1 px-2 py-1 rounded-lg bg-blue-500/10 border border-blue-500/20 text-xs text-blue-300\">\n <span className=\"text-sg-text-muted\">{filter.label}:</span>\n <span>{displayLabel}</span>\n <button\n onClick={onRemove}\n className=\"p-0.5 rounded hover:bg-white/10 transition-colors cursor-pointer ml-0.5\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n </div>\n );\n}\n\n// ── Filter Dropdown ──\n\nfunction FilterDropdown({\n filter,\n active,\n onToggle,\n}: {\n filter: FilterDefinition;\n active: ActiveFilter | undefined;\n onToggle: (value: string) => void;\n}) {\n const [open, setOpen] = useState(false);\n const selectedValues = new Set(active?.values || []);\n const hasSelection = selectedValues.size > 0;\n const Icon = filter.icon;\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n className={twMerge(\n 'inline-flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg text-xs transition-all cursor-pointer',\n 'border',\n hasSelection\n ? 'bg-blue-500/[0.08] border-blue-500/20 text-blue-300'\n : 'bg-white/[0.02] border-white/5 text-sg-text-muted hover:text-muted-foreground hover:bg-white/[0.04]',\n )}\n >\n {Icon && <Icon className=\"w-3.5 h-3.5\" />}\n {filter.label}\n {hasSelection && (\n <span className=\"w-4 h-4 rounded-full bg-blue-500/20 text-[10px] flex items-center justify-center text-blue-300\">\n {selectedValues.size}\n </span>\n )}\n <ChevronDown className=\"w-3 h-3\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n sideOffset={4}\n className=\"p-1 min-w-[180px] rounded-xl border border-white/5 bg-card shadow-[0_16px_48px_rgba(0,0,0,0.4)]\"\n >\n {filter.options.map(opt => {\n const isSelected = selectedValues.has(opt.value);\n return (\n <button\n key={opt.value}\n onClick={() => onToggle(opt.value)}\n className={twMerge(\n 'w-full flex items-center gap-2 px-2.5 py-1.5 rounded-lg text-sm text-left',\n 'transition-colors cursor-pointer',\n isSelected\n ? 'bg-blue-500/[0.08] text-foreground'\n : 'text-muted-foreground hover:bg-white/5',\n )}\n >\n {/* Checkbox indicator */}\n <div className={twMerge(\n 'w-4 h-4 rounded border flex items-center justify-center shrink-0',\n isSelected\n ? 'bg-blue-500 border-blue-500'\n : 'border-white/10',\n )}>\n {isSelected && <Check className=\"w-3 h-3 text-white\" />}\n </div>\n\n {/* Color dot */}\n {opt.color && (\n <div\n className=\"w-2 h-2 rounded-full shrink-0\"\n style={{ backgroundColor: opt.color }}\n />\n )}\n\n <span className=\"flex-1\">{opt.label}</span>\n\n {opt.count !== undefined && (\n <span className=\"text-[10px] text-sg-text-muted\">{opt.count}</span>\n )}\n </button>\n );\n })}\n </PopoverContent>\n </Popover>\n );\n}\n\nexport function FilterBar({\n filters,\n activeFilters,\n onFiltersChange,\n searchValue,\n onSearchChange,\n searchPlaceholder = 'Search...',\n showCounts = false,\n className,\n}: FilterBarProps) {\n const activeMap = useMemo(() => {\n const map = new Map<string, ActiveFilter>();\n for (const af of activeFilters) {\n map.set(af.filterId, af);\n }\n return map;\n }, [activeFilters]);\n\n const handleToggle = useCallback((filterId: string, value: string) => {\n const existing = activeMap.get(filterId);\n const filter = filters.find(f => f.id === filterId);\n if (!filter) return;\n\n let newValues: string[];\n if (filter.type === 'select') {\n // Single select — toggle on/off\n newValues = existing?.values[0] === value ? [] : [value];\n } else {\n // Multi-select — add/remove\n const current = existing?.values || [];\n newValues = current.includes(value)\n ? current.filter(v => v !== value)\n : [...current, value];\n }\n\n const newFilters = activeFilters.filter(af => af.filterId !== filterId);\n if (newValues.length > 0) {\n newFilters.push({ filterId, values: newValues });\n }\n onFiltersChange(newFilters);\n }, [activeMap, activeFilters, filters, onFiltersChange]);\n\n const handleRemoveFilter = useCallback((filterId: string) => {\n onFiltersChange(activeFilters.filter(af => af.filterId !== filterId));\n }, [activeFilters, onFiltersChange]);\n\n const handleClearAll = useCallback(() => {\n onFiltersChange([]);\n onSearchChange?.('');\n }, [onFiltersChange, onSearchChange]);\n\n const hasActiveFilters = activeFilters.length > 0 || (searchValue && searchValue.length > 0);\n\n return (\n <div className={twMerge('space-y-2', className)} role=\"search\" aria-label=\"Filters\">\n {/* Main bar */}\n <div className=\"flex items-center gap-2 flex-wrap\">\n {/* Search */}\n {onSearchChange && (\n <div className=\"relative flex-1 min-w-[200px] max-w-[320px]\">\n <Search className=\"absolute left-2.5 top-1/2 -translate-y-1/2 w-4 h-4 text-sg-text-muted\" />\n <input\n type=\"text\"\n value={searchValue || ''}\n onChange={(e) => onSearchChange(e.target.value)}\n placeholder={searchPlaceholder}\n className={twMerge(\n 'w-full h-8 pl-8 pr-3 rounded-lg text-sm',\n 'bg-white/[0.03] border border-white/5 text-foreground',\n 'placeholder:text-sg-text-muted/60',\n 'focus:border-blue-500/50 focus:bg-white/[0.05] focus:shadow-[0_0_0_2px_rgba(59,130,246,0.2)]',\n 'outline-none transition-all',\n )}\n />\n {searchValue && (\n <button\n onClick={() => onSearchChange('')}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 p-0.5 rounded text-sg-text-muted hover:text-white transition-colors cursor-pointer\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n )}\n </div>\n )}\n\n {/* Filter icon */}\n <div className=\"flex items-center gap-1.5 text-sg-text-muted\">\n <SlidersHorizontal className=\"w-4 h-4\" />\n </div>\n\n {/* Filter dropdowns */}\n {filters.map(filter => (\n <FilterDropdown\n key={filter.id}\n filter={filter}\n active={activeMap.get(filter.id)}\n onToggle={(value) => handleToggle(filter.id, value)}\n />\n ))}\n\n {/* Clear all */}\n {hasActiveFilters && (\n <button\n onClick={handleClearAll}\n className=\"text-xs text-sg-text-muted hover:text-white transition-colors cursor-pointer px-2\"\n >\n Clear all\n </button>\n )}\n </div>\n\n {/* Active filter chips */}\n {activeFilters.length > 0 && (\n <div className=\"flex items-center gap-2 flex-wrap\">\n {activeFilters.map(af => {\n const filter = filters.find(f => f.id === af.filterId);\n if (!filter) return null;\n return (\n <FilterChip\n key={af.filterId}\n filter={filter}\n active={af}\n onRemove={() => handleRemoveFilter(af.filterId)}\n />\n );\n })}\n </div>\n )}\n </div>\n );\n}","import React, { useState, useRef, useCallback } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { Upload, File, X, Check, AlertCircle, Loader2 } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n DropZone — Stealth Glass Design System\n @level L3 — Organism: Drag-and-drop file upload area with progress, validation,\n and file list management.\n ═══════════════════════════════════════════════════════════════\n\n Usage:\n <DropZone\n accept={['.js', '.ts', '.zip']}\n maxSize={10 * 1024 * 1024}\n multiple\n onDrop={(files) => handleUpload(files)}\n />\n ═══════════════════════════════════════════════════════════════ */\n\nexport type DropZoneFileStatus = 'pending' | 'uploading' | 'success' | 'error';\n\nexport interface DropZoneFile {\n id: string;\n file: File;\n status: DropZoneFileStatus;\n progress?: number;\n error?: string;\n}\n\nexport interface DropZoneProps {\n /** Accepted file types (e.g., ['.js', '.ts', 'image/*']) */\n accept?: string[];\n /** Max file size in bytes */\n maxSize?: number;\n /** Allow multiple files */\n multiple?: boolean;\n /** Max number of files */\n maxFiles?: number;\n /** Callback when files are dropped/selected */\n onDrop: (files: File[]) => void;\n /** Show file list below drop zone */\n showFileList?: boolean;\n /** Files currently in the list (for controlled mode) */\n files?: DropZoneFile[];\n /** Remove file callback */\n onRemove?: (fileId: string) => void;\n /** Custom label */\n label?: string;\n /** Custom description */\n description?: string;\n /** Compact mode */\n compact?: boolean;\n /** Disabled */\n disabled?: boolean;\n className?: string;\n}\n\nfunction formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction generateId(): string {\n return Math.random().toString(36).substring(2, 9);\n}\n\nconst statusIcons: Record<DropZoneFileStatus, { icon: React.ElementType; color: string }> = {\n pending: { icon: File, color: 'text-sg-text-muted' },\n uploading: { icon: Loader2, color: 'text-blue-400 animate-spin' },\n success: { icon: Check, color: 'text-emerald-400' },\n error: { icon: AlertCircle, color: 'text-red-400' },\n};\n\nexport function DropZone({\n accept,\n maxSize,\n multiple = false,\n maxFiles,\n onDrop,\n showFileList = true,\n files: controlledFiles,\n onRemove,\n label,\n description,\n compact = false,\n disabled = false,\n className,\n}: DropZoneProps) {\n const [isDragging, setIsDragging] = useState(false);\n const [internalFiles, setInternalFiles] = useState<DropZoneFile[]>([]);\n const [validationError, setValidationError] = useState<string | null>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const files = controlledFiles ?? internalFiles;\n\n const validateFiles = useCallback((fileList: File[]): { valid: File[]; errors: string[] } => {\n const valid: File[] = [];\n const errors: string[] = [];\n\n for (const file of fileList) {\n // Check accept\n if (accept && accept.length > 0) {\n const ext = '.' + file.name.split('.').pop()?.toLowerCase();\n const mimeMatch = accept.some(a => {\n if (a.startsWith('.')) return ext === a.toLowerCase();\n if (a.endsWith('/*')) return file.type.startsWith(a.replace('/*', '/'));\n return file.type === a;\n });\n if (!mimeMatch) {\n errors.push(`${file.name}: File type not accepted`);\n continue;\n }\n }\n\n // Check size\n if (maxSize && file.size > maxSize) {\n errors.push(`${file.name}: Exceeds ${formatFileSize(maxSize)} limit`);\n continue;\n }\n\n valid.push(file);\n }\n\n // Check max files\n if (maxFiles && files.length + valid.length > maxFiles) {\n errors.push(`Maximum ${maxFiles} files allowed`);\n return { valid: valid.slice(0, Math.max(0, maxFiles - files.length)), errors };\n }\n\n return { valid, errors };\n }, [accept, maxSize, maxFiles, files.length]);\n\n const handleFiles = useCallback((fileList: FileList | null) => {\n if (!fileList) return;\n setValidationError(null);\n\n const fileArray = multiple ? Array.from(fileList) : [fileList[0]];\n const { valid, errors } = validateFiles(fileArray);\n\n if (errors.length > 0) {\n setValidationError(errors[0]);\n }\n\n if (valid.length > 0) {\n // Add to internal state if uncontrolled\n if (!controlledFiles) {\n const newFiles: DropZoneFile[] = valid.map(f => ({\n id: generateId(),\n file: f,\n status: 'pending' as const,\n }));\n setInternalFiles(prev => [...prev, ...newFiles]);\n }\n onDrop(valid);\n }\n }, [multiple, validateFiles, controlledFiles, onDrop]);\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n if (!disabled) setIsDragging(true);\n };\n\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault();\n setIsDragging(false);\n };\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault();\n setIsDragging(false);\n if (!disabled) handleFiles(e.dataTransfer.files);\n };\n\n const handleClick = () => {\n if (!disabled) inputRef.current?.click();\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n handleFiles(e.target.files);\n // Reset input so the same file can be selected again\n if (inputRef.current) inputRef.current.value = '';\n };\n\n const handleRemove = (fileId: string) => {\n if (onRemove) {\n onRemove(fileId);\n } else {\n setInternalFiles(prev => prev.filter(f => f.id !== fileId));\n }\n };\n\n const acceptString = accept?.join(',');\n\n return (\n <div className={twMerge('space-y-2', className)}>\n {/* Drop area */}\n <div\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n onClick={handleClick}\n className={twMerge(\n 'rounded-xl border-2 border-dashed transition-all cursor-pointer',\n 'flex flex-col items-center justify-center text-center',\n compact ? 'px-4 py-4' : 'px-6 py-8',\n isDragging\n ? 'border-blue-500/50 bg-blue-500/[0.06]'\n : 'border-white/10 bg-white/[0.01] hover:border-white/20 hover:bg-white/[0.03]',\n disabled && 'opacity-50 cursor-not-allowed',\n )}\n >\n <div className={twMerge(\n 'w-10 h-10 rounded-xl flex items-center justify-center mb-3',\n isDragging ? 'bg-blue-500/10' : 'bg-white/5',\n )}>\n <Upload className={twMerge(\n 'w-5 h-5',\n isDragging ? 'text-blue-400' : 'text-sg-text-muted',\n )} />\n </div>\n\n <p className={twMerge(\n 'text-sm',\n isDragging ? 'text-blue-300' : 'text-foreground',\n )}>\n {isDragging\n ? 'Drop files here'\n : (label || 'Drag & drop files here')}\n </p>\n <p className=\"text-xs text-sg-text-muted mt-1\">\n {description || (\n <>\n or <span className=\"text-blue-400 hover:text-blue-300\">browse from your computer</span>\n </>\n )}\n </p>\n\n {/* Constraints info */}\n {(accept || maxSize) && (\n <div className=\"flex items-center gap-3 mt-2 text-[10px] text-sg-text-muted/60\">\n {accept && (\n <span>{accept.join(', ')}</span>\n )}\n {maxSize && (\n <span>Max {formatFileSize(maxSize)}</span>\n )}\n </div>\n )}\n\n {/* Hidden file input */}\n <input\n ref={inputRef}\n type=\"file\"\n accept={acceptString}\n multiple={multiple}\n onChange={handleInputChange}\n className=\"hidden\"\n />\n </div>\n\n {/* Validation error */}\n {validationError && (\n <div className=\"flex items-center gap-1.5 text-xs text-red-400\">\n <AlertCircle className=\"w-3.5 h-3.5 shrink-0\" />\n {validationError}\n </div>\n )}\n\n {/* File list */}\n {showFileList && files.length > 0 && (\n <div className=\"rounded-xl border border-white/5 overflow-hidden divide-y divide-white/5\">\n {files.map(f => {\n const statusInfo = statusIcons[f.status];\n const StatusIcon = statusInfo.icon;\n\n return (\n <div key={f.id} className=\"flex items-center gap-3 px-3 py-2 bg-white/[0.01] hover:bg-white/[0.03] transition-colors\">\n <StatusIcon className={twMerge('w-4 h-4 shrink-0', statusInfo.color)} />\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm text-foreground truncate\">{f.file.name}</p>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[10px] text-sg-text-muted\">\n {formatFileSize(f.file.size)}\n </span>\n {f.error && (\n <span className=\"text-[10px] text-red-400\">{f.error}</span>\n )}\n </div>\n {/* Progress bar */}\n {f.status === 'uploading' && f.progress !== undefined && (\n <div className=\"mt-1 h-1 rounded-full bg-white/5 overflow-hidden\">\n <div\n className=\"h-full bg-blue-500 transition-all duration-300\"\n style={{ width: `${f.progress}%` }}\n />\n </div>\n )}\n </div>\n <button\n onClick={(e) => { e.stopPropagation(); handleRemove(f.id); }}\n className=\"p-1 rounded text-sg-text-muted hover:text-red-400 hover:bg-red-500/10 transition-colors cursor-pointer shrink-0\"\n >\n <X className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n}","import React, { useMemo } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from './Tooltip';\n\n/* ═══════════════════════════════════════════════════════════════\n PodHoneycomb — Stealth Glass Design System\n @level L3 — Organism: High-density pod status grid visualization.\n Uses a responsive grid layout to pack many items into a small space.\n ═══════════════════════════════════════════════════════════════ */\n\nexport type PodStatus = 'running' | 'pending' | 'failed' | 'warning' | 'terminating';\n\nexport interface PodNode {\n id: string;\n name: string;\n status: PodStatus;\n /** 0-100 representation of load */\n load?: number;\n /** Optional group/node identifier */\n group?: string;\n}\n\nexport interface PodHoneycombProps {\n pods: PodNode[];\n /** Group pods by this field (e.g. 'group') */\n groupBy?: keyof PodNode;\n className?: string;\n onPodClick?: (pod: PodNode) => void;\n}\n\nconst statusColors: Record<PodStatus, string> = {\n running: 'bg-emerald-500 shadow-[0_0_8px_rgba(16,185,129,0.4)]',\n pending: 'bg-amber-500 animate-pulse',\n failed: 'bg-red-500 shadow-[0_0_8px_rgba(239,68,68,0.5)]',\n warning: 'bg-orange-500',\n terminating: 'bg-gray-500 opacity-50',\n};\n\nconst statusBorders: Record<PodStatus, string> = {\n running: 'border-emerald-500/30',\n pending: 'border-amber-500/30',\n failed: 'border-red-500/50',\n warning: 'border-orange-500/30',\n terminating: 'border-gray-500/30',\n};\n\nfunction PodCell({ pod, onClick }: { pod: PodNode; onClick?: () => void }) {\n const loadOpacity = pod.load ? 0.2 + (pod.load / 100) * 0.8 : 1;\n \n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={onClick}\n className={twMerge(\n 'w-3 h-3 md:w-4 md:h-4 rounded-[2px] transition-all duration-300',\n 'hover:scale-125 hover:z-10 relative',\n 'border',\n statusBorders[pod.status],\n // Base background\n 'bg-background',\n )}\n >\n {/* Inner fill based on status and load */}\n <div \n className={twMerge('w-full h-full opacity-80', statusColors[pod.status])}\n style={{ opacity: loadOpacity }}\n />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"top\" className=\"text-xs\">\n <div className=\"font-bold text-foreground\">{pod.name}</div>\n <div className=\"text-muted-foreground\">\n Status: <span className=\"uppercase\">{pod.status}</span>\n </div>\n {pod.load !== undefined && (\n <div className=\"text-muted-foreground\">Load: {pod.load}%</div>\n )}\n </TooltipContent>\n </Tooltip>\n );\n}\n\nexport function PodHoneycomb({ pods, groupBy, className, onPodClick }: PodHoneycombProps) {\n // If grouping is enabled\n const groups = useMemo(() => {\n if (!groupBy) return { 'All Pods': pods };\n \n return pods.reduce((acc, pod) => {\n const key = String(pod[groupBy] || 'Unassigned');\n if (!acc[key]) acc[key] = [];\n acc[key].push(pod);\n return acc;\n }, {} as Record<string, PodNode[]>);\n }, [pods, groupBy]);\n\n return (\n <TooltipProvider>\n <div className={twMerge('space-y-6', className)}>\n {Object.entries(groups).map(([groupName, groupPods]) => (\n <div key={groupName}>\n {groupBy && (\n <h4 className=\"text-xs font-mono uppercase tracking-wider text-sg-text-muted mb-2 pl-1\">\n {groupName} <span className=\"text-muted-foreground\">({groupPods.length})</span>\n </h4>\n )}\n <div className=\"flex flex-wrap gap-1.5\">\n {groupPods.map((pod) => (\n <PodCell \n key={pod.id} \n pod={pod} \n onClick={onPodClick ? () => onPodClick(pod) : undefined} \n />\n ))}\n </div>\n </div>\n ))}\n </div>\n </TooltipProvider>\n );\n}","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { Globe, Wifi, AlertTriangle, CheckCircle } from 'lucide-react';\nimport { GlassTile } from './GlassTile';\n\n/* ═══════════════════════════════════════════════════════════════\n LatencyRadar — Stealth Glass Design System\n @level L3 — Organism: Regional latency and status visualization.\n ═══════════════════════════════════════════════════════════════ */\n\nexport type RegionStatus = 'online' | 'degraded' | 'offline';\n\nexport interface RegionPoint {\n id: string;\n name: string;\n code: string; // e.g., \"us-east-1\"\n latency: number; // in ms\n status: RegionStatus;\n}\n\nexport interface LatencyRadarProps {\n regions: RegionPoint[];\n className?: string;\n onRegionClick?: (region: RegionPoint) => void;\n}\n\nconst statusColors: Record<RegionStatus, string> = {\n online: 'text-emerald-400',\n degraded: 'text-amber-400',\n offline: 'text-red-400',\n};\n\nconst latencyColor = (ms: number) => {\n if (ms < 50) return 'text-emerald-400';\n if (ms < 150) return 'text-amber-400';\n return 'text-red-400';\n};\n\nexport function LatencyRadar({ regions, className, onRegionClick }: LatencyRadarProps) {\n // Sort by latency for the list view\n const sortedRegions = [...regions].sort((a, b) => a.latency - b.latency);\n\n return (\n <div className={twMerge('grid grid-cols-1 lg:grid-cols-2 gap-6', className)}>\n {/* Visual Radar Map (Abstract) */}\n <div className=\"relative aspect-square lg:aspect-auto min-h-[240px] bg-background rounded-2xl border border-white/5 overflow-hidden flex items-center justify-center\">\n {/* Radar Circles */}\n <div className=\"absolute inset-0 flex items-center justify-center opacity-20\">\n <div className=\"w-[150%] h-[150%] border border-white/10 rounded-full absolute\" />\n <div className=\"w-[100%] h-[100%] border border-white/10 rounded-full absolute\" />\n <div className=\"w-[60%] h-[60%] border border-white/10 rounded-full absolute\" />\n <div className=\"w-[30%] h-[30%] border border-white/10 rounded-full absolute\" />\n </div>\n \n {/* Central Hub */}\n <div className=\"relative z-10 w-12 h-12 bg-blue-500/20 rounded-full flex items-center justify-center border border-blue-500/50 shadow-[0_0_20px_rgba(59,130,246,0.3)]\">\n <Globe className=\"w-6 h-6 text-blue-400\" />\n </div>\n\n {/* Orbiting Points (Simulated positions) */}\n {regions.map((region, i) => {\n // Calculate random-ish positions on a circle based on index\n const angle = (i * (360 / regions.length)) * (Math.PI / 180);\n const radius = 60 + (region.latency / 5); // Distance based on latency\n const x = Math.cos(angle) * radius; // simplistic\n const y = Math.sin(angle) * radius;\n\n return (\n <div\n key={region.id}\n className=\"absolute w-3 h-3 -ml-1.5 -mt-1.5 rounded-full cursor-pointer hover:scale-150 transition-transform z-20\"\n style={{\n top: `calc(50% + ${y}% / 2.5)`, // Scale down to fit box\n left: `calc(50% + ${x}% / 2.5)`,\n backgroundColor: region.status === 'online' ? '#10B981' : region.status === 'degraded' ? '#F59E0B' : '#EF4444',\n boxShadow: `0 0 10px ${region.status === 'online' ? '#10B981' : '#EF4444'}`,\n }}\n title={`${region.name}: ${region.latency}ms`}\n onClick={() => onRegionClick?.(region)}\n >\n <div className=\"absolute inset-0 rounded-full animate-ping opacity-75 bg-inherit\" />\n </div>\n );\n })}\n </div>\n\n {/* Region List */}\n <div className=\"space-y-3 max-h-[300px] overflow-y-auto scrollbar-none pr-2\">\n {sortedRegions.map((region) => (\n <GlassTile\n key={region.id}\n variant=\"inner\"\n padding=\"sm\"\n className=\"flex items-center justify-between cursor-pointer hover:bg-white/[0.04]\"\n onClick={() => onRegionClick?.(region)}\n >\n <div className=\"flex items-center gap-3\">\n <div className={twMerge('w-2 h-2 rounded-full', region.status === 'online' ? 'bg-emerald-500' : 'bg-red-500')} />\n <div>\n <div className=\"text-sm font-medium text-foreground\">{region.name}</div>\n <div className=\"text-[10px] font-mono text-sg-text-muted\">{region.code}</div>\n </div>\n </div>\n \n <div className=\"flex items-center gap-2\">\n <span className={twMerge('text-xs font-mono font-bold', latencyColor(region.latency))}>\n {region.latency}ms\n </span>\n <Wifi className={twMerge('w-3 h-3', latencyColor(region.latency))} />\n </div>\n </GlassTile>\n ))}\n </div>\n </div>\n );\n}","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { TrendingUp, TrendingDown, DollarSign } from 'lucide-react';\nimport { AreaChart, Area, XAxis, YAxis, ResponsiveContainer, ReferenceLine } from 'recharts';\nimport { ChartContainer, ChartGrid, ChartTooltip } from './Chart';\n\n/* ═══════════════════════════════════════════════════════════════\n CostForecast — Stealth Glass Design System\n @level L3 — Organism: Cost projection chart (actual vs forecast).\n ═══════════════════════════════════════════════════════════════ */\n\nexport interface CostDataPoint {\n date: string;\n actual: number | null;\n projected: number | null;\n}\n\nexport interface CostForecastProps {\n data: CostDataPoint[];\n currentSpend: number;\n projectedSpend: number;\n budget: number;\n currency?: string;\n className?: string;\n}\n\nconst CHART_CONFIG = {\n actual: { label: 'Actual Spend', color: '#3B82F6' },\n projected: { label: 'Projected', color: '#9A92B1' }, // Muted color for projection\n};\n\nexport function CostForecast({\n data,\n currentSpend,\n projectedSpend,\n budget,\n currency = '$',\n className\n}: CostForecastProps) {\n const percentUsed = (currentSpend / budget) * 100;\n const isOverBudget = projectedSpend > budget;\n\n return (\n <div className={twMerge('flex flex-col h-full', className)}>\n {/* Header Stats */}\n <div className=\"flex items-start justify-between mb-6\">\n <div>\n <p className=\"text-xs text-muted-foreground uppercase tracking-wider mb-1\">Current Spend</p>\n <div className=\"flex items-baseline gap-1\">\n <span className=\"text-2xl font-bold text-foreground\">{currency}{currentSpend.toLocaleString()}</span>\n <span className=\"text-xs text-sg-text-muted\">/ {currency}{budget.toLocaleString()}</span>\n </div>\n </div>\n \n <div className=\"text-right\">\n <p className=\"text-xs text-muted-foreground uppercase tracking-wider mb-1\">Forecast</p>\n <div className={twMerge(\n 'flex items-center justify-end gap-1 font-mono text-lg font-bold',\n isOverBudget ? 'text-red-400' : 'text-emerald-400'\n )}>\n {isOverBudget ? <TrendingUp className=\"w-4 h-4\" /> : <TrendingDown className=\"w-4 h-4\" />}\n {currency}{projectedSpend.toLocaleString()}\n </div>\n </div>\n </div>\n\n {/* Progress Bar */}\n <div className=\"mb-6 space-y-2\">\n <div className=\"flex justify-between text-[10px] text-sg-text-muted uppercase tracking-wider\">\n <span>Budget Usage</span>\n <span>{percentUsed.toFixed(1)}%</span>\n </div>\n <div className=\"h-2 bg-white/5 rounded-full overflow-hidden relative\">\n <div \n className={twMerge('h-full rounded-full', isOverBudget ? 'bg-amber-500' : 'bg-blue-500')}\n style={{ width: `${Math.min(percentUsed, 100)}%` }} \n />\n {/* Budget Marker Line */}\n <div className=\"absolute top-0 bottom-0 w-0.5 bg-white/20 z-10\" style={{ left: '100%' }} /> \n </div>\n </div>\n\n {/* Chart */}\n <div className=\"flex-1 min-h-[160px]\">\n <ChartContainer config={CHART_CONFIG} className=\"h-full\">\n <AreaChart data={data} margin={{ top: 10, right: 0, left: -20, bottom: 0 }}>\n <defs>\n <linearGradient id=\"fillActual\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"5%\" stopColor=\"#3B82F6\" stopOpacity={0.3}/>\n <stop offset=\"95%\" stopColor=\"#3B82F6\" stopOpacity={0}/>\n </linearGradient>\n <pattern id=\"patternProjected\" patternUnits=\"userSpaceOnUse\" width=\"4\" height=\"4\">\n <path d=\"M-1,1 l2,-2 M0,4 l4,-4 M3,5 l2,-2\" stroke=\"#9A92B1\" strokeWidth=\"1\" strokeOpacity={0.2} />\n </pattern>\n </defs>\n \n <ChartGrid />\n <XAxis \n dataKey=\"date\" \n stroke=\"rgba(255,255,255,0.1)\" \n tick={{fill: '#535C6B', fontSize: 10}} \n tickLine={false}\n axisLine={false}\n />\n <YAxis \n stroke=\"rgba(255,255,255,0.1)\" \n tick={{fill: '#535C6B', fontSize: 10}} \n tickLine={false}\n axisLine={false}\n tickFormatter={(value) => `${currency}${value}`}\n />\n <ChartTooltip />\n \n {/* Projected Area (Dashed/Patterned) */}\n <Area \n type=\"monotone\" \n dataKey=\"projected\" \n stroke=\"#9A92B1\" \n strokeDasharray=\"5 5\"\n fill=\"url(#patternProjected)\" \n fillOpacity={1}\n />\n \n {/* Actual Area (Solid) */}\n <Area \n type=\"monotone\" \n dataKey=\"actual\" \n stroke=\"#3B82F6\" \n fill=\"url(#fillActual)\" \n />\n \n {/* Budget Line */}\n <ReferenceLine y={budget} stroke=\"#EF4444\" strokeDasharray=\"3 3\" label={{ value: 'Budget', fill: '#EF4444', fontSize: 10, position: 'insideTopRight' }} />\n </AreaChart>\n </ChartContainer>\n </div>\n </div>\n );\n}","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\n\n/* ═══════════════════════════════════════════════════════════════\n ResourceGauge — Stealth Glass Design System\n @level L3 — Organism: Radial gauge for resource consumption (SVG arcs).\n ═══════════════════════════════════════════════════════════════ */\n\nexport interface ResourceGaugeProps {\n label: string;\n value: number; // 0-100\n limit?: string; // e.g., \"4 cores\" or \"16GB\"\n unit?: string;\n color?: 'blue' | 'purple' | 'emerald' | 'amber' | 'red';\n size?: number;\n className?: string;\n}\n\nconst colorMap = {\n blue: { stroke: '#3B82F6', text: 'text-blue-400' },\n purple: { stroke: '#8B5CF6', text: 'text-purple-400' },\n emerald: { stroke: '#10B981', text: 'text-emerald-400' },\n amber: { stroke: '#F59E0B', text: 'text-amber-400' },\n red: { stroke: '#EF4444', text: 'text-red-400' },\n};\n\nexport function ResourceGauge({\n label,\n value,\n limit,\n unit = '%',\n color = 'blue',\n size = 160,\n className,\n}: ResourceGaugeProps) {\n // Gauge configuration\n const strokeWidth = 12;\n const radius = (size - strokeWidth) / 2;\n const circumference = radius * 2 * Math.PI;\n // We want a 240-degree arc (leaving 120 degrees open at bottom)\n const arcLength = circumference * (240 / 360);\n const strokeDashoffset = arcLength - (Math.min(value, 100) / 100) * arcLength;\n \n // Rotation to position the gap at the bottom\n // 240 degrees means we start at 150 degrees (90 + 60)\n const rotation = 150; \n\n const theme = colorMap[color] || colorMap.blue;\n\n return (\n <div className={twMerge('flex flex-col items-center justify-center relative', className)}>\n <div className=\"relative\" style={{ width: size, height: size }}>\n <svg\n width={size}\n height={size}\n className=\"transform rotate-[150deg] origin-center\" // Rotate entire SVG or group\n viewBox={`0 0 ${size} ${size}`}\n >\n {/* Background Arc */}\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n stroke=\"rgba(255,255,255,0.05)\"\n strokeWidth={strokeWidth}\n strokeDasharray={`${arcLength} ${circumference}`}\n strokeLinecap=\"round\"\n />\n\n {/* Value Arc (Glow) */}\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n stroke={theme.stroke}\n strokeWidth={strokeWidth}\n strokeDasharray={`${arcLength} ${circumference}`}\n strokeDashoffset={strokeDashoffset}\n strokeLinecap=\"round\"\n className=\"transition-all duration-1000 ease-out\"\n filter={`url(#glow-${color})`}\n opacity={0.4}\n />\n \n {/* Value Arc (Solid) */}\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n stroke={theme.stroke}\n strokeWidth={strokeWidth}\n strokeDasharray={`${arcLength} ${circumference}`}\n strokeDashoffset={strokeDashoffset}\n strokeLinecap=\"round\"\n className=\"transition-all duration-1000 ease-out\"\n />\n\n {/* Definitions for Glow Filter */}\n <defs>\n <filter id={`glow-${color}`} x=\"-20%\" y=\"-20%\" width=\"140%\" height=\"140%\">\n <feGaussianBlur stdDeviation=\"4\" result=\"blur\" />\n <feComposite in=\"SourceGraphic\" in2=\"blur\" operator=\"over\" />\n </filter>\n </defs>\n </svg>\n\n {/* Center Text Overlay */}\n <div className=\"absolute inset-0 flex flex-col items-center justify-center pt-4 select-none\">\n <span className=\"text-sm font-medium text-muted-foreground uppercase tracking-wider\">{label}</span>\n <div className=\"flex items-baseline gap-0.5 mt-1\">\n <span className={twMerge('text-4xl font-bold tracking-tight text-foreground', theme.text)}>\n {value}\n </span>\n <span className=\"text-lg text-sg-text-muted\">{unit}</span>\n </div>\n {limit && (\n <span className=\"text-xs text-sg-text-muted mt-1\">of {limit}</span>\n )}\n </div>\n </div>\n </div>\n );\n}","import React, { useRef, useEffect, useState } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { Search, Pause, Play, Download, Trash2, Terminal } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n LogTerminal — Stealth Glass Design System\n @level L3 — Organism\n @deprecated Use `LogViewer` for structured log display or `Terminal`\n for raw console output. LogTerminal will be removed in v2.0.0.\n \n Live streaming log viewer with syntax highlighting emulation,\n search, and \"follow tail\" functionality.\n ═══════════════════════════════════════════════════════════════ */\n\nexport type LogLevel = 'info' | 'warn' | 'error' | 'debug' | 'success';\n\nexport interface LogEntry {\n id: string;\n timestamp: string;\n level: LogLevel;\n message: string;\n source?: string;\n}\n\nexport interface LogTerminalProps {\n logs: LogEntry[];\n title?: string;\n isStreaming?: boolean;\n className?: string;\n onClear?: () => void;\n onDownload?: () => void;\n onToggleStream?: () => void;\n}\n\nconst levelColors: Record<LogLevel, string> = {\n info: 'text-blue-400',\n warn: 'text-amber-400',\n error: 'text-red-400',\n debug: 'text-purple-400',\n success: 'text-emerald-400',\n};\n\nconst levelBg: Record<LogLevel, string> = {\n info: 'bg-blue-400/10',\n warn: 'bg-amber-400/10',\n error: 'bg-red-400/10',\n debug: 'bg-purple-400/10',\n success: 'bg-emerald-400/10',\n};\n\nexport function LogTerminal({\n logs,\n title = 'Container Logs',\n isStreaming = true,\n className,\n onClear,\n onDownload,\n onToggleStream\n}: LogTerminalProps) {\n const scrollRef = useRef<HTMLDivElement>(null);\n const [searchTerm, setSearchTerm] = useState('');\n const [autoScroll, setAutoScroll] = useState(true);\n\n // Auto-scroll logic\n useEffect(() => {\n if (autoScroll && scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n }\n }, [logs, autoScroll]);\n\n // Handle manual scroll to disable auto-scroll\n const handleScroll = () => {\n if (!scrollRef.current) return;\n const { scrollTop, scrollHeight, clientHeight } = scrollRef.current;\n const isAtBottom = scrollHeight - scrollTop - clientHeight < 50;\n setAutoScroll(isAtBottom);\n };\n\n const filteredLogs = logs.filter(log => \n log.message.toLowerCase().includes(searchTerm.toLowerCase()) || \n log.source?.toLowerCase().includes(searchTerm.toLowerCase())\n );\n\n return (\n <div className={twMerge('flex flex-col h-full bg-[#050608] border border-white/10 rounded-xl overflow-hidden font-mono text-sm shadow-xl', className)}>\n {/* Header Toolbar */}\n <div className=\"flex items-center justify-between px-4 py-2 bg-white/[0.03] border-b border-white/5\">\n <div className=\"flex items-center gap-3\">\n <Terminal className=\"w-4 h-4 text-muted-foreground\" />\n <span className=\"text-foreground font-medium text-xs tracking-wide\">{title}</span>\n {isStreaming && (\n <span className=\"flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-emerald-500/10 border border-emerald-500/20 text-[10px] text-emerald-400\">\n <span className=\"w-1.5 h-1.5 rounded-full bg-emerald-400 animate-pulse\" />\n LIVE\n </span>\n )}\n </div>\n\n <div className=\"flex items-center gap-2\">\n {/* Search Input */}\n <div className=\"relative group\">\n <Search className=\"absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-sg-text-muted group-focus-within:text-blue-400 transition-colors\" />\n <input\n type=\"text\"\n placeholder=\"Filter logs...\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n className=\"h-7 w-48 bg-background border border-white/10 rounded-md pl-8 pr-3 text-xs text-foreground placeholder-sg-text-muted focus:outline-none focus:border-blue-500/50 transition-colors\"\n />\n </div>\n\n <div className=\"h-4 w-px bg-white/10 mx-1\" />\n\n {/* Action Buttons */}\n <button \n onClick={onToggleStream}\n className=\"p-1.5 hover:bg-white/10 rounded-md text-muted-foreground hover:text-foreground transition-colors\"\n title={isStreaming ? \"Pause Stream\" : \"Resume Stream\"}\n >\n {isStreaming ? <Pause className=\"w-3.5 h-3.5\" /> : <Play className=\"w-3.5 h-3.5\" />}\n </button>\n <button \n onClick={onDownload}\n className=\"p-1.5 hover:bg-white/10 rounded-md text-muted-foreground hover:text-foreground transition-colors\"\n title=\"Download Logs\"\n >\n <Download className=\"w-3.5 h-3.5\" />\n </button>\n <button \n onClick={onClear}\n className=\"p-1.5 hover:bg-white/10 rounded-md text-muted-foreground hover:text-red-400 transition-colors\"\n title=\"Clear Logs\"\n >\n <Trash2 className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n </div>\n\n {/* Log Viewport */}\n <div \n ref={scrollRef}\n onScroll={handleScroll}\n className=\"flex-1 overflow-y-auto overflow-x-hidden p-2 space-y-0.5 scrollbar-thin scrollbar-thumb-white/10 scrollbar-track-transparent\"\n >\n {filteredLogs.length === 0 ? (\n <div className=\"h-full flex items-center justify-center text-sg-text-muted italic\">\n No logs found matching filter\n </div>\n ) : (\n filteredLogs.map((log) => (\n <div \n key={log.id} \n className=\"flex items-start gap-3 px-2 py-0.5 hover:bg-white/[0.02] rounded group transition-colors text-[11px] md:text-xs\"\n >\n {/* Timestamp */}\n <span className=\"text-sg-text-muted shrink-0 w-24 tabular-nums select-none\">\n {log.timestamp}\n </span>\n\n {/* Source/Pod */}\n {log.source && (\n <span className=\"hidden md:block text-[#71717A] shrink-0 w-24 truncate select-none\">\n [{log.source}]\n </span>\n )}\n\n {/* Level Indicator */}\n <span className={twMerge(\n 'px-1.5 rounded uppercase font-bold text-[9px] select-none tracking-wider shrink-0 w-12 text-center',\n levelBg[log.level],\n levelColors[log.level]\n )}>\n {log.level}\n </span>\n\n {/* Message */}\n <span className=\"text-[#D4D4D8] break-all whitespace-pre-wrap font-medium\">\n {/* Highlight search term if exists */}\n {searchTerm ? (\n log.message.split(new RegExp(`(${searchTerm})`, 'gi')).map((part, i) => \n part.toLowerCase() === searchTerm.toLowerCase() ? (\n <span key={i} className=\"bg-blue-500/30 text-white rounded-[1px]\">{part}</span>\n ) : (\n part\n )\n )\n ) : (\n log.message\n )}\n </span>\n </div>\n ))\n )}\n \n {/* Anchor for auto-scroll */}\n {!autoScroll && (\n <button\n onClick={() => setAutoScroll(true)}\n className=\"absolute bottom-4 right-6 bg-blue-600/90 hover:bg-blue-500 text-white px-3 py-1.5 rounded-full text-xs shadow-lg backdrop-blur-sm flex items-center gap-2 transition-all\"\n >\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M12 5v14M19 12l-7 7-7-7\"/></svg>\n Resume Auto-scroll\n </button>\n )}\n </div>\n </div>\n );\n}","import React, { useState } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { Eye, EyeOff, Copy, Check, Lock, Plus, Trash2, RefreshCw } from 'lucide-react';\nimport { Button } from './Button';\n\n/* ═══════════════════════════════════════════════════════════════\n EnvManager — Stealth Glass Design System\n @level L3 — Organism\n @deprecated Use `KeyValueEditor` which provides the same functionality\n plus search, bulk import/export, and scope management.\n EnvManager will be removed in v2.0.0.\n \n Secure environment variable management with masked values,\n copy-to-clipboard, and sync status.\n ═══════════════════════════════════════════════════════════════ */\n\nexport interface EnvVar {\n id: string;\n key: string;\n value: string;\n isSecret: boolean;\n isSynced: boolean; // Is it deployed?\n}\n\nexport interface EnvManagerProps {\n variables: EnvVar[];\n className?: string;\n onUpdate?: (vars: EnvVar[]) => void;\n onDeploy?: () => void;\n}\n\nexport function EnvManager({\n variables: initialVars,\n className,\n onUpdate,\n onDeploy\n}: EnvManagerProps) {\n const [variables, setVariables] = useState<EnvVar[]>(initialVars);\n const [visibleSecrets, setVisibleSecrets] = useState<Record<string, boolean>>({});\n const [copiedId, setCopiedId] = useState<string | null>(null);\n\n const toggleVisibility = (id: string) => {\n setVisibleSecrets(prev => ({\n ...prev,\n [id]: !prev[id]\n }));\n };\n\n const copyToClipboard = (id: string, value: string) => {\n navigator.clipboard.writeText(value);\n setCopiedId(id);\n setTimeout(() => setCopiedId(null), 2000);\n };\n\n const handleDelete = (id: string) => {\n const newVars = variables.filter(v => v.id !== id);\n setVariables(newVars);\n onUpdate?.(newVars);\n };\n\n const handleAdd = () => {\n const newVar: EnvVar = {\n id: Math.random().toString(36).substr(2, 9),\n key: '',\n value: '',\n isSecret: false,\n isSynced: false,\n };\n setVariables([...variables, newVar]);\n };\n\n const hasUnsyncedChanges = variables.some(v => !v.isSynced);\n\n return (\n <div className={twMerge('flex flex-col bg-background border border-white/5 rounded-xl overflow-hidden', className)}>\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 bg-white/[0.02] border-b border-white/5\">\n <div className=\"flex items-center gap-2\">\n <Lock className=\"w-4 h-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium text-foreground\">Environment Variables</span>\n </div>\n {hasUnsyncedChanges && (\n <span className=\"text-[10px] text-amber-400 bg-amber-500/10 px-2 py-0.5 rounded-full border border-amber-500/20 animate-pulse\">\n Unsaved Changes\n </span>\n )}\n </div>\n\n {/* List */}\n <div className=\"p-2 space-y-1\">\n {variables.map((v) => (\n <div \n key={v.id} \n className=\"group flex items-center gap-2 p-2 rounded-lg hover:bg-white/[0.04] transition-colors\"\n >\n {/* Key Input */}\n <input\n type=\"text\"\n placeholder=\"KEY_NAME\"\n value={v.key}\n onChange={(e) => {\n const newVars = variables.map(curr => curr.id === v.id ? { ...curr, key: e.target.value.toUpperCase(), isSynced: false } : curr);\n setVariables(newVars);\n onUpdate?.(newVars);\n }}\n className=\"w-1/3 bg-transparent border-b border-transparent focus:border-blue-500/50 text-xs font-mono font-bold text-foreground placeholder-sg-text-muted focus:outline-none py-1\"\n />\n\n <span className=\"text-sg-text-muted\">=</span>\n\n {/* Value Input */}\n <div className=\"relative flex-1 group/input\">\n <input\n type={visibleSecrets[v.id] || !v.isSecret ? \"text\" : \"password\"}\n placeholder=\"Value\"\n value={v.value}\n onChange={(e) => {\n const newVars = variables.map(curr => curr.id === v.id ? { ...curr, value: e.target.value, isSynced: false } : curr);\n setVariables(newVars);\n onUpdate?.(newVars);\n }}\n className={twMerge(\n \"w-full bg-transparent border-b border-transparent focus:border-blue-500/50 text-xs font-mono text-muted-foreground focus:text-foreground placeholder-sg-text-muted focus:outline-none py-1 pr-16 transition-all\",\n !visibleSecrets[v.id] && v.isSecret && \"blur-[4px] focus:blur-none group-hover/input:blur-none transition-[filter]\"\n )}\n />\n \n {/* Value Actions */}\n <div className=\"absolute right-0 top-1/2 -translate-y-1/2 flex items-center gap-1 opacity-0 group-hover:opacity-100 reveal-touch-visible transition-opacity\">\n {v.isSecret && (\n <button \n onClick={() => toggleVisibility(v.id)}\n className=\"p-1 hover:bg-white/10 rounded text-sg-text-muted hover:text-foreground\"\n >\n {visibleSecrets[v.id] ? <EyeOff className=\"w-3 h-3\" /> : <Eye className=\"w-3 h-3\" />}\n </button>\n )}\n <button \n onClick={() => copyToClipboard(v.id, v.value)}\n className=\"p-1 hover:bg-white/10 rounded text-sg-text-muted hover:text-foreground\"\n >\n {copiedId === v.id ? <Check className=\"w-3 h-3 text-emerald-400\" /> : <Copy className=\"w-3 h-3\" />}\n </button>\n </div>\n </div>\n\n {/* Delete Action */}\n <button \n onClick={() => handleDelete(v.id)}\n className=\"p-1.5 opacity-0 group-hover:opacity-100 reveal-touch-visible hover:bg-red-500/10 rounded-md text-sg-text-muted hover:text-red-400 transition-all\"\n >\n <Trash2 className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n ))}\n </div>\n\n {/* Footer Actions */}\n <div className=\"flex items-center justify-between px-4 py-3 bg-white/[0.02] border-t border-white/5 mt-2\">\n <Button \n variant=\"outline\" \n size=\"sm\" \n onClick={handleAdd}\n className=\"text-xs h-7 gap-1.5\"\n >\n <Plus className=\"w-3 h-3\" /> Add Variable\n </Button>\n \n <Button \n variant=\"primary\" \n size=\"sm\" \n disabled={!hasUnsyncedChanges}\n onClick={onDeploy}\n className=\"text-xs h-7 gap-1.5\"\n >\n <RefreshCw className={twMerge(\"w-3 h-3\", !hasUnsyncedChanges && \"hidden\")} /> \n {hasUnsyncedChanges ? 'Deploy Changes' : 'Up to Date'}\n </Button>\n </div>\n </div>\n );\n}","import React, { useMemo } from 'react';\nimport { twMerge } from 'tailwind-merge';\n\n/* ═══════════════════════════════════════════════════════════════\n GlobeTracker — Stealth Glass Design System\n @level L3 — Organism: Dot-matrix world map for region/edge status.\n ═══════════════════════════════════════════════════════════════ */\n\nexport interface GlobePoint {\n id: string;\n lat: number;\n lng: number;\n label: string;\n status: 'active' | 'degraded' | 'offline';\n pulse?: boolean;\n}\n\nexport interface GlobeTrackerProps {\n points: GlobePoint[];\n className?: string;\n height?: number;\n}\n\n// Simplified Mercator projection (roughly)\nconst project = (lat: number, lng: number, width: number, height: number) => {\n const x = (lng + 180) * (width / 360);\n const latRad = (lat * Math.PI) / 180;\n const mercN = Math.log(Math.tan(Math.PI / 4 + latRad / 2));\n const y = height / 2 - (width * mercN) / (2 * Math.PI);\n return { x, y: Math.max(0, Math.min(height, y)) }; // Clamp y\n};\n\nexport function GlobeTracker({\n points,\n className,\n height = 300\n}: GlobeTrackerProps) {\n const width = 600; // Internal SVG coordinate system width\n const dotSize = 1.5;\n\n // Generate a grid of dots for the \"land\" (abstract representation)\n // In a real app, this would be a GeoJSON path, but for \"Stealth Glass\" \n // we want an abstract dot matrix look.\n // We'll simulate a world map with specific coordinate clusters.\n const worldDots = useMemo(() => {\n const dots: { x: number, y: number }[] = [];\n const rows = 40;\n const cols = 80;\n \n // Simple mask for continents (very rough approximation for visual aesthetic)\n const isLand = (r: number, c: number) => {\n const x = c / cols; \n const y = r / rows;\n // Rough geometric shapes for continents\n const isNA = x > 0.1 && x < 0.3 && y > 0.15 && y < 0.45;\n const isSA = x > 0.2 && x < 0.35 && y > 0.55 && y < 0.8;\n const isEU = x > 0.45 && x < 0.55 && y > 0.15 && y < 0.35;\n const isAF = x > 0.45 && x < 0.6 && y > 0.4 && y < 0.7;\n const isAS = x > 0.6 && x < 0.9 && y > 0.15 && y < 0.5;\n const isAU = x > 0.8 && x < 0.95 && y > 0.6 && y < 0.8;\n return isNA || isSA || isEU || isAF || isAS || isAU;\n };\n\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < cols; c++) {\n if (isLand(r, c)) {\n dots.push({\n x: (c / cols) * width,\n y: (r / rows) * height\n });\n }\n }\n }\n return dots;\n }, [height]);\n\n return (\n <div className={twMerge('relative rounded-xl bg-[#050608] border border-white/5 overflow-hidden flex items-center justify-center', className)}>\n {/* Background Gradient */}\n <div className=\"absolute inset-0 bg-radial-gradient from-blue-900/10 via-transparent to-transparent opacity-50\" />\n \n <svg\n viewBox={`0 0 ${width} ${height}`}\n className=\"w-full h-full text-sg-text-muted\"\n preserveAspectRatio=\"xMidYMid meet\"\n >\n <defs>\n <filter id=\"glow-point\">\n <feGaussianBlur stdDeviation=\"2.5\" result=\"coloredBlur\" />\n <feMerge>\n <feMergeNode in=\"coloredBlur\" />\n <feMergeNode in=\"SourceGraphic\" />\n </feMerge>\n </filter>\n </defs>\n\n {/* World Map Dot Matrix */}\n <g className=\"opacity-20\">\n {worldDots.map((dot, i) => (\n <circle key={i} cx={dot.x} cy={dot.y} r={dotSize} fill=\"currentColor\" />\n ))}\n </g>\n\n {/* Active Points */}\n {points.map((point) => {\n const { x, y } = project(point.lat, point.lng, width, height);\n const color = point.status === 'active' ? '#3B82F6' : point.status === 'degraded' ? '#F59E0B' : '#EF4444';\n \n return (\n <g key={point.id} className=\"group cursor-pointer\">\n {/* Ping Animation */}\n {point.pulse && (\n <circle cx={x} cy={y} r={8} fill=\"none\" stroke={color} strokeWidth=\"1\" opacity=\"0.5\">\n <animate attributeName=\"r\" from=\"2\" to=\"16\" dur=\"2s\" repeatCount=\"indefinite\" />\n <animate attributeName=\"opacity\" from=\"0.8\" to=\"0\" dur=\"2s\" repeatCount=\"indefinite\" />\n </circle>\n )}\n \n {/* Point */}\n <circle \n cx={x} \n cy={y} \n r={4} \n fill={color} \n filter=\"url(#glow-point)\"\n className=\"transition-all duration-300 group-hover:r-6\"\n />\n\n {/* Label (Visible on Hover) */}\n <g className=\"opacity-0 group-hover:opacity-100 transition-opacity duration-300 pointer-events-none\">\n <rect x={x - 40} y={y - 30} width=\"80\" height=\"20\" rx=\"4\" fill=\"#0B0E14\" stroke=\"rgba(255,255,255,0.1)\" />\n <text \n x={x} \n y={y - 16} \n textAnchor=\"middle\" \n fill=\"#EDEDEF\" \n fontSize=\"10\" \n fontWeight=\"bold\"\n >\n {point.label}\n </text>\n </g>\n </g>\n );\n })}\n </svg>\n \n {/* Legend Overlay */}\n <div className=\"absolute bottom-4 left-4 flex gap-4 text-[10px] text-muted-foreground\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"w-1.5 h-1.5 rounded-full bg-blue-500 shadow-[0_0_8px_rgba(59,130,246,0.6)]\" />\n Active\n </div>\n <div className=\"flex items-center gap-1.5\">\n <span className=\"w-1.5 h-1.5 rounded-full bg-amber-500 shadow-[0_0_8px_rgba(245,158,11,0.6)]\" />\n Degraded\n </div>\n <div className=\"flex items-center gap-1.5\">\n <span className=\"w-1.5 h-1.5 rounded-full bg-red-500 shadow-[0_0_8px_rgba(239,68,68,0.6)]\" />\n Offline\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { Globe, ShieldCheck, ShieldAlert, RefreshCw, Copy, ExternalLink, Check } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n DomainManager — Stealth Glass Design System\n @level L3 — Organism: Domain + SSL certificate management interface.\n ═══════════════════════════════════════════════════════════════ */\n\nexport interface DomainRecord {\n id: string;\n domain: string;\n status: 'active' | 'pending' | 'error';\n type: 'primary' | 'redirect' | 'alias';\n dnsRecord?: {\n type: 'CNAME' | 'A' | 'TXT';\n name: string;\n value: string;\n };\n errorMessage?: string;\n}\n\nexport interface DomainManagerProps {\n domains: DomainRecord[];\n onAddDomain?: () => void;\n onVerify?: (id: string) => void;\n onRemove?: (id: string) => void;\n className?: string;\n}\n\nexport function DomainManager({\n domains,\n onAddDomain,\n onVerify,\n onRemove,\n className\n}: DomainManagerProps) {\n const [copiedId, setCopiedId] = React.useState<string | null>(null);\n\n const copyToClipboard = (text: string, id: string) => {\n navigator.clipboard.writeText(text);\n setCopiedId(id);\n setTimeout(() => setCopiedId(null), 2000);\n };\n\n return (\n <div className={twMerge('flex flex-col gap-4', className)}>\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-sm font-medium text-foreground flex items-center gap-2\">\n <Globe className=\"w-4 h-4 text-muted-foreground\" />\n Custom Domains\n </h3>\n <button \n onClick={onAddDomain}\n className=\"text-xs text-blue-400 hover:text-blue-300 transition-colors font-medium flex items-center gap-1\"\n >\n + Add Domain\n </button>\n </div>\n\n <div className=\"space-y-3\">\n {domains.map((domain) => (\n <div \n key={domain.id}\n className=\"group relative bg-background border border-white/5 rounded-lg p-4 hover:border-white/10 transition-colors\"\n >\n <div className=\"flex items-start justify-between\">\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex items-center gap-3\">\n <span className=\"text-lg font-bold text-foreground tracking-tight\">{domain.domain}</span>\n {domain.status === 'active' && (\n <span className=\"px-2 py-0.5 rounded-full bg-emerald-500/10 border border-emerald-500/20 text-[10px] text-emerald-400 flex items-center gap-1\">\n <ShieldCheck className=\"w-3 h-3\" /> SSL Active\n </span>\n )}\n {domain.status === 'pending' && (\n <span className=\"px-2 py-0.5 rounded-full bg-amber-500/10 border border-amber-500/20 text-[10px] text-amber-400 flex items-center gap-1 animate-pulse\">\n <RefreshCw className=\"w-3 h-3 animate-spin\" /> Verifying DNS\n </span>\n )}\n {domain.status === 'error' && (\n <span className=\"px-2 py-0.5 rounded-full bg-red-500/10 border border-red-500/20 text-[10px] text-red-400 flex items-center gap-1\">\n <ShieldAlert className=\"w-3 h-3\" /> Config Error\n </span>\n )}\n </div>\n \n {domain.type === 'redirect' && (\n <span className=\"text-xs text-sg-text-muted\">Redirects to primary domain</span>\n )}\n </div>\n \n <div className=\"flex items-center gap-2\">\n <button className=\"p-1.5 text-sg-text-muted hover:text-foreground transition-colors rounded-md hover:bg-white/5\" aria-label=\"Open domain in new tab\">\n <ExternalLink className=\"w-4 h-4\" />\n </button>\n <button \n onClick={() => onRemove?.(domain.id)}\n className=\"p-1.5 text-sg-text-muted hover:text-red-400 transition-colors rounded-md hover:bg-white/5\"\n aria-label={`Remove domain ${domain.domain}`}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M18 6L6 18M6 6l12 12\"/></svg>\n </button>\n </div>\n </div>\n\n {/* DNS Instructions Panel */}\n {domain.status !== 'active' && domain.dnsRecord && (\n <div className=\"mt-4 p-3 bg-black/40 rounded border border-dashed border-white/10 flex flex-col gap-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs text-muted-foreground\">Set the following {domain.dnsRecord.type} record on your DNS provider:</span>\n <button \n onClick={() => onVerify?.(domain.id)}\n className=\"text-[10px] px-2 py-1 bg-white/5 hover:bg-white/10 border border-white/5 rounded text-foreground transition-colors\"\n >\n Refresh Status\n </button>\n </div>\n <div className=\"flex items-center gap-2\">\n <div className=\"h-8 px-3 flex items-center bg-[#050608] border border-white/10 rounded text-xs font-mono text-sg-text-muted select-none\">\n {domain.dnsRecord.type}\n </div>\n <div className=\"h-8 px-3 flex items-center bg-[#050608] border border-white/10 rounded text-xs font-mono text-foreground select-all\">\n {domain.dnsRecord.name}\n </div>\n <span className=\"text-sg-text-muted text-xs\">points to</span>\n <div className=\"h-8 flex-1 px-3 flex items-center justify-between bg-[#050608] border border-white/10 rounded text-xs font-mono text-blue-400 group/code\">\n <span className=\"truncate\">{domain.dnsRecord.value}</span>\n <button \n onClick={() => copyToClipboard(domain.dnsRecord!.value, domain.id)}\n className=\"opacity-0 group-hover/code:opacity-100 reveal-touch-visible transition-opacity ml-2 text-sg-text-muted hover:text-foreground\"\n aria-label=\"Copy DNS record value\"\n >\n {copiedId === domain.id ? <Check className=\"w-3 h-3 text-emerald-400\" /> : <Copy className=\"w-3 h-3\" />}\n </button>\n </div>\n </div>\n {domain.errorMessage && (\n <div className=\"text-[10px] text-red-400 mt-1 flex items-center gap-1\">\n <ShieldAlert className=\"w-3 h-3\" />\n {domain.errorMessage}\n </div>\n )}\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n );\n}","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\n\n/* ═══════════════════════════════════════════════════════════════\n ActivityHeatmap — Stealth Glass Design System\n @level L3 — Organism: GitHub-style temporal density heatmap.\n ═══════════════════════════════════════════════════════════════ */\n\nexport interface ActivityDataPoint {\n date: string; // ISO date YYYY-MM-DD\n count: number;\n level?: 0 | 1 | 2 | 3 | 4; // calculated if not provided\n}\n\nexport interface ActivityHeatmapProps {\n data: ActivityDataPoint[];\n startDate?: Date; // Defaults to 90 days ago\n days?: number; // Defaults to 90\n className?: string;\n colorScale?: 'blue' | 'green' | 'amber' | 'purple';\n}\n\nconst colorMaps = {\n blue: ['bg-background', 'bg-blue-900/40', 'bg-blue-700/60', 'bg-blue-500/80', 'bg-blue-400'],\n green: ['bg-background', 'bg-emerald-900/40', 'bg-emerald-700/60', 'bg-emerald-500/80', 'bg-emerald-400'],\n amber: ['bg-background', 'bg-amber-900/40', 'bg-amber-700/60', 'bg-amber-500/80', 'bg-amber-400'],\n purple: ['bg-background', 'bg-purple-900/40', 'bg-purple-700/60', 'bg-purple-500/80', 'bg-purple-400'],\n};\n\nexport function ActivityHeatmap({\n data,\n startDate,\n days = 84, // 12 weeks * 7 days\n className,\n colorScale = 'green'\n}: ActivityHeatmapProps) {\n const colors = colorMaps[colorScale];\n \n // Prepare grid\n const today = new Date();\n const start = startDate ? new Date(startDate) : new Date(today.getTime() - (days * 24 * 60 * 60 * 1000));\n \n // Normalize data into a lookup map\n const dataMap = new Map<string, number>();\n let maxCount = 0;\n data.forEach(d => {\n dataMap.set(d.date, d.count);\n if (d.count > maxCount) maxCount = d.count;\n });\n\n const cells = [];\n \n // Generate days\n for (let i = 0; i < days; i++) {\n const d = new Date(start);\n d.setDate(d.getDate() + i);\n const dateStr = d.toISOString().split('T')[0];\n const count = dataMap.get(dateStr) || 0;\n \n // Calculate level (0-4) based on maxCount\n let level = 0;\n if (count > 0) {\n if (!maxCount) level = 1;\n else level = Math.ceil((count / maxCount) * 4);\n }\n \n cells.push({ date: dateStr, count, level, dayOfWeek: d.getDay() });\n }\n\n // Group by weeks for columns (Vertical layout: Weeks are columns, Days are rows)\n const weeks = [];\n let currentWeek: typeof cells = [];\n \n cells.forEach((cell) => {\n currentWeek.push(cell);\n if (cell.dayOfWeek === 6 || weeks.length * 7 + currentWeek.length === cells.length) {\n // Fill empty start days for first week if needed? \n // Actually simplistic approach: just fill grid\n if (currentWeek.length === 7 || weeks.length > 0) { \n // If it's a full week or subsequent week, push it.\n // (Handling partial first weeks is tricky in concise code, assuming start is Sunday for simplicity)\n }\n weeks.push(currentWeek);\n currentWeek = [];\n }\n });\n if (currentWeek.length > 0) weeks.push(currentWeek);\n\n\n return (\n <div className={twMerge('flex flex-col gap-2', className)}>\n <div className=\"flex gap-[3px]\">\n {/* Render columns (Weeks) */}\n {weeks.map((week, wIndex) => (\n <div key={wIndex} className=\"flex flex-col gap-[3px]\">\n {week.map((day, dIndex) => (\n <div \n key={day.date}\n title={`${day.date}: ${day.count} events`}\n className={twMerge(\n 'w-3 h-3 rounded-[1px] border border-white/[0.03] transition-colors',\n colors[day.level]\n )}\n />\n ))}\n </div>\n ))}\n </div>\n <div className=\"flex items-center justify-between text-[10px] text-sg-text-muted\">\n <span>Less</span>\n <div className=\"flex gap-1\">\n {colors.map((c, i) => (\n <div key={i} className={twMerge('w-2.5 h-2.5 rounded-[1px]', c)} />\n ))}\n </div>\n <span>More</span>\n </div>\n </div>\n );\n}","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { GitCommit, Clock, CheckCircle2, XCircle, Loader2, PlayCircle, User } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n DeploymentList — Stealth Glass Design System\n @level L3 — Organism: Deployment history list with build status and commits.\n ═══════════════════════════════════════════════════════════════ */\n\nexport type DeploymentStatus = 'queued' | 'building' | 'ready' | 'error' | 'cancelled';\n\nexport interface DeploymentItem {\n id: string;\n project: string;\n branch: string;\n commitHash: string;\n commitMessage: string;\n status: DeploymentStatus;\n createdAt: string; // ISO date or \"2m ago\"\n duration?: string;\n authorName: string;\n authorAvatar?: string; // URL\n}\n\nexport interface DeploymentListProps {\n deployments: DeploymentItem[];\n className?: string;\n onSelect?: (id: string) => void;\n onRollback?: (id: string) => void;\n}\n\nconst statusConfig: Record<DeploymentStatus, { icon: typeof Clock; color: string; bg: string; border: string; animate?: boolean }> = {\n queued: { icon: Clock, color: 'text-gray-400', bg: 'bg-gray-500/10', border: 'border-gray-500/20' },\n building: { icon: Loader2, color: 'text-blue-400', bg: 'bg-blue-500/10', border: 'border-blue-500/20', animate: true },\n ready: { icon: CheckCircle2, color: 'text-emerald-400', bg: 'bg-emerald-500/10', border: 'border-emerald-500/20' },\n error: { icon: XCircle, color: 'text-red-400', bg: 'bg-red-500/10', border: 'border-red-500/20' },\n cancelled: { icon: XCircle, color: 'text-gray-500', bg: 'bg-gray-500/10', border: 'border-gray-500/20' },\n};\n\nexport function DeploymentList({\n deployments,\n className,\n onSelect,\n onRollback\n}: DeploymentListProps) {\n return (\n <div className={twMerge('flex flex-col w-full', className)}>\n <div className=\"flex items-center justify-between px-4 py-2 border-b border-white/5 bg-background/50\">\n <h3 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wider\">Recent Deployments</h3>\n <span className=\"text-[10px] text-sg-text-muted\">{deployments.length} total</span>\n </div>\n \n <div className=\"divide-y divide-white/5\">\n {deployments.map((deploy) => {\n const config = statusConfig[deploy.status];\n const Icon = config.icon;\n \n return (\n <div \n key={deploy.id}\n onClick={() => onSelect?.(deploy.id)}\n className=\"group flex items-center gap-4 p-4 hover:bg-white/[0.02] transition-colors cursor-pointer\"\n >\n {/* Status Icon */}\n <div className={twMerge(\n 'w-8 h-8 rounded-full flex items-center justify-center border shrink-0',\n config.bg, config.border, config.color\n )}>\n <Icon className={twMerge('w-4 h-4', config.animate && 'animate-spin')} />\n </div>\n\n {/* Main Info */}\n <div className=\"flex-1 min-w-0 flex flex-col gap-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium text-foreground truncate\">\n {deploy.commitMessage}\n </span>\n {deploy.status === 'ready' && (\n <span className=\"px-1.5 py-0.5 rounded text-[10px] font-medium bg-foreground/10 text-foreground\">\n Current\n </span>\n )}\n </div>\n \n <div className=\"flex items-center gap-3 text-xs text-muted-foreground\">\n <div className=\"flex items-center gap-1\">\n <GitCommit className=\"w-3 h-3\" />\n <span className=\"font-mono text-sg-text-muted\">{deploy.commitHash.substring(0, 7)}</span>\n </div>\n <div className=\"w-1 h-1 rounded-full bg-white/10\" />\n <span className=\"font-mono text-blue-400\">{deploy.branch}</span>\n <div className=\"w-1 h-1 rounded-full bg-white/10\" />\n <span>{deploy.createdAt}</span>\n </div>\n </div>\n\n {/* Meta & Actions */}\n <div className=\"flex items-center gap-6\">\n <div className=\"flex flex-col items-end gap-1 min-w-[80px]\">\n {deploy.duration && (\n <span className=\"text-xs text-foreground\">{deploy.duration}</span>\n )}\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-[10px] text-sg-text-muted\">{deploy.authorName}</span>\n {deploy.authorAvatar ? (\n <img src={deploy.authorAvatar} alt=\"\" className=\"w-4 h-4 rounded-full bg-white/10\" />\n ) : (\n <div className=\"w-4 h-4 rounded-full bg-white/10 flex items-center justify-center text-[8px] text-foreground\">\n {deploy.authorName[0]}\n </div>\n )}\n </div>\n </div>\n\n <button \n onClick={(e) => {\n e.stopPropagation();\n onRollback?.(deploy.id);\n }}\n className=\"opacity-0 group-hover:opacity-100 reveal-touch-visible transition-opacity p-2 text-sg-text-muted hover:text-foreground hover:bg-white/5 rounded-md\"\n title=\"Redeploy / Rollback\"\n aria-label=\"Redeploy or rollback deployment\"\n >\n <PlayCircle className=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n}","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { Cpu, Zap, ArrowUpRight, ArrowDownRight } from 'lucide-react';\nimport * as SliderPrimitive from '@radix-ui/react-slider';\n\n/* ═══════════════════════════════════════════════════════════════\n AutoscaleControl — Stealth Glass Design System\n @level L3 — Organism: HPA autoscaling configuration with min/max sliders.\n ═══════════════════════════════════════════════════════════════ */\n\nexport interface AutoscaleConfig {\n minReplicas: number;\n maxReplicas: number;\n cpuThreshold: number; // Percentage 0-100\n enabled: boolean;\n}\n\nexport interface AutoscaleControlProps {\n config: AutoscaleConfig;\n onChange: (config: AutoscaleConfig) => void;\n className?: string;\n maxLimit?: number; // Absolute max allowed in UI\n}\n\nexport function AutoscaleControl({\n config,\n onChange,\n className,\n maxLimit = 20\n}: AutoscaleControlProps) {\n \n const handleRangeChange = (value: number[]) => {\n onChange({\n ...config,\n minReplicas: value[0],\n maxReplicas: value[1]\n });\n };\n\n const handleCpuChange = (value: number[]) => {\n onChange({\n ...config,\n cpuThreshold: value[0]\n });\n };\n\n const toggleEnabled = () => {\n onChange({ ...config, enabled: !config.enabled });\n };\n\n return (\n <div className={twMerge('flex flex-col gap-6 p-1', className)}>\n {/* Header Toggle */}\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <div className={twMerge(\n 'w-8 h-8 rounded-lg flex items-center justify-center transition-colors',\n config.enabled ? 'bg-blue-500/20 text-blue-400' : 'bg-white/5 text-sg-text-muted'\n )}>\n <Zap className=\"w-4 h-4 fill-current\" />\n </div>\n <div>\n <h3 className=\"text-sm font-medium text-foreground\">Autoscaling</h3>\n <p className=\"text-xs text-muted-foreground\">\n {config.enabled \n ? `Scaling between ${config.minReplicas}-${config.maxReplicas} instances` \n : 'Fixed instance count (Manual)'}\n </p>\n </div>\n </div>\n <button\n onClick={toggleEnabled}\n className={twMerge(\n 'w-10 h-5 rounded-full relative transition-colors border',\n config.enabled ? 'bg-blue-600 border-blue-500' : 'bg-background border-white/10'\n )}\n >\n <div className={twMerge(\n 'absolute top-0.5 w-3.5 h-3.5 rounded-full bg-white transition-all shadow-sm',\n config.enabled ? 'left-5' : 'left-0.5 bg-sg-text-muted'\n )} />\n </button>\n </div>\n\n <div className={twMerge('space-y-6 transition-opacity duration-300', !config.enabled && 'opacity-40 pointer-events-none')}>\n {/* Instance Range Slider */}\n <div className=\"space-y-3\">\n <div className=\"flex justify-between text-xs\">\n <span className=\"text-muted-foreground\">Instance Range</span>\n <span className=\"text-foreground font-mono\">\n {config.minReplicas} <span className=\"text-sg-text-muted\">➔</span> {config.maxReplicas}\n </span>\n </div>\n \n <SliderPrimitive.Root\n className=\"relative flex items-center select-none touch-none w-full h-5\"\n value={[config.minReplicas, config.maxReplicas]}\n max={maxLimit}\n min={1}\n step={1}\n minStepsBetweenThumbs={1}\n onValueChange={handleRangeChange}\n >\n <SliderPrimitive.Track className=\"bg-white/10 relative grow rounded-full h-[3px]\">\n <SliderPrimitive.Range className=\"absolute bg-blue-500 h-full rounded-full\" />\n </SliderPrimitive.Track>\n <SliderPrimitive.Thumb\n className=\"block w-4 h-4 bg-foreground border border-blue-500 shadow-[0_0_10px_rgba(59,130,246,0.5)] rounded-full hover:scale-110 transition-transform focus:outline-none\"\n />\n <SliderPrimitive.Thumb\n className=\"block w-4 h-4 bg-foreground border border-blue-500 shadow-[0_0_10px_rgba(59,130,246,0.5)] rounded-full hover:scale-110 transition-transform focus:outline-none\"\n />\n </SliderPrimitive.Root>\n \n <div className=\"flex justify-between text-[10px] text-sg-text-muted font-mono px-1\">\n <span>1</span>\n <span>{maxLimit}</span>\n </div>\n </div>\n\n {/* CPU Threshold Slider */}\n <div className=\"space-y-3\">\n <div className=\"flex justify-between text-xs\">\n <span className=\"text-muted-foreground flex items-center gap-1.5\">\n <Cpu className=\"w-3 h-3\" /> CPU Target\n </span>\n <span className=\"text-foreground font-mono\">{config.cpuThreshold}%</span>\n </div>\n \n <SliderPrimitive.Root\n className=\"relative flex items-center select-none touch-none w-full h-5\"\n value={[config.cpuThreshold]}\n max={100}\n min={10}\n step={5}\n onValueChange={handleCpuChange}\n >\n <SliderPrimitive.Track className=\"bg-white/10 relative grow rounded-full h-[3px]\">\n <SliderPrimitive.Range className=\"absolute bg-emerald-500 h-full rounded-full\" />\n </SliderPrimitive.Track>\n <SliderPrimitive.Thumb\n className=\"block w-4 h-4 bg-foreground border border-emerald-500 shadow-[0_0_10px_rgba(16,185,129,0.5)] rounded-full hover:scale-110 transition-transform focus:outline-none\"\n />\n </SliderPrimitive.Root>\n \n <div className=\"grid grid-cols-2 gap-2\">\n <div className=\"p-2 rounded bg-white/5 border border-white/5 flex items-center gap-2\">\n <div className=\"p-1 rounded bg-blue-500/10 text-blue-400\">\n <ArrowUpRight className=\"w-3 h-3\" />\n </div>\n <div className=\"flex flex-col\">\n <span className=\"text-[9px] text-sg-text-muted\">Scale Up</span>\n <span className=\"text-[10px] text-foreground font-medium\">>{config.cpuThreshold}%</span>\n </div>\n </div>\n <div className=\"p-2 rounded bg-white/5 border border-white/5 flex items-center gap-2\">\n <div className=\"p-1 rounded bg-amber-500/10 text-amber-400\">\n <ArrowDownRight className=\"w-3 h-3\" />\n </div>\n <div className=\"flex flex-col\">\n <span className=\"text-[9px] text-sg-text-muted\">Scale Down</span>\n <span className=\"text-[10px] text-foreground font-medium\"><{Math.max(0, config.cpuThreshold - 20)}%</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n}","import React, { useState } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { Database, Trash2, History, RotateCcw, AlertTriangle } from 'lucide-react';\n\n/* ═══════════════════════════════════════════════════════════════\n CacheManager — Stealth Glass Design System\n @level L3 — Organism: CDN/Edge cache invalidation management.\n Interface for managing CDN/Edge cache invalidation (Purge)\n and viewing recent cache operations.\n ═══════════════════════════════════════════════════════════════ */\n\nexport interface CachePurgeRecord {\n id: string;\n path: string; // \"/*\" or \"/api/v1/users\"\n status: 'pending' | 'completed' | 'failed';\n initiatedBy: string;\n timestamp: string; // ISO date\n}\n\nexport interface CacheManagerProps {\n records: CachePurgeRecord[];\n onPurge: (path: string, tags: string[]) => void;\n className?: string;\n}\n\nexport function CacheManager({\n records,\n onPurge,\n className\n}: CacheManagerProps) {\n const [path, setPath] = useState('');\n const [isConfirming, setIsConfirming] = useState(false);\n\n const handlePurge = () => {\n if (!path) return;\n if (path === '/*' || path === '*') {\n if (!isConfirming) {\n setIsConfirming(true);\n return;\n }\n }\n onPurge(path, []);\n setPath('');\n setIsConfirming(false);\n };\n\n return (\n <div className={twMerge('flex flex-col h-full', className)}>\n {/* Input Area */}\n <div className=\"p-4 border-b border-white/5 bg-white/[0.01]\">\n <label className=\"text-xs text-muted-foreground font-medium mb-2 block\">Purge Cache by Path</label>\n <div className=\"flex gap-2\">\n <div className=\"relative flex-1 group\">\n <Database className=\"absolute left-3 top-2.5 w-4 h-4 text-sg-text-muted group-focus-within:text-foreground transition-colors\" />\n <input \n type=\"text\"\n value={path}\n onChange={(e) => {\n setPath(e.target.value);\n setIsConfirming(false);\n }}\n placeholder=\"e.g. /images/* or /api/products/123\"\n className=\"w-full h-9 bg-background border border-white/10 rounded-md pl-9 pr-3 text-sm text-foreground placeholder:text-sg-text-muted focus:outline-none focus:border-blue-500/50 focus:ring-1 focus:ring-blue-500/20 transition-all font-mono\"\n />\n </div>\n <button\n onClick={handlePurge}\n disabled={!path}\n className={twMerge(\n 'h-9 px-4 rounded-md text-xs font-medium transition-all flex items-center gap-2',\n isConfirming \n ? 'bg-red-500/10 text-red-400 border border-red-500/30 hover:bg-red-500/20' \n : 'bg-white/5 text-foreground border border-white/10 hover:bg-white/10 disabled:opacity-50 disabled:cursor-not-allowed'\n )}\n >\n {isConfirming ? (\n <>\n <AlertTriangle className=\"w-3 h-3\" />\n Confirm Purge All\n </>\n ) : (\n <>\n <Trash2 className=\"w-3 h-3\" />\n Purge\n </>\n )}\n </button>\n </div>\n <p className=\"mt-2 text-[10px] text-sg-text-muted\">\n Supports wildcards (*). Changes propagate to edge nodes within 300ms.\n </p>\n </div>\n\n {/* History List */}\n <div className=\"flex-1 flex flex-col min-h-0\">\n <div className=\"px-4 py-2 border-b border-white/5 flex items-center gap-2\">\n <History className=\"w-3 h-3 text-sg-text-muted\" />\n <span className=\"text-[10px] uppercase font-semibold text-sg-text-muted tracking-wider\">Recent Invalidations</span>\n </div>\n \n <div className=\"flex-1 overflow-y-auto p-2 space-y-1\">\n {records.length === 0 ? (\n <div className=\"h-20 flex flex-col items-center justify-center text-sg-text-muted text-xs italic\">\n No recent purge operations\n </div>\n ) : (\n records.map((record) => (\n <div key={record.id} className=\"flex items-center justify-between p-2 rounded hover:bg-white/5 group transition-colors\">\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"text-xs font-mono text-foreground\">{record.path}</span>\n <div className=\"flex items-center gap-2 text-[10px] text-sg-text-muted\">\n <span>{record.initiatedBy}</span>\n <span className=\"w-0.5 h-0.5 rounded-full bg-white/20\" />\n <span>{record.timestamp}</span>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n {record.status === 'completed' && (\n <span className=\"text-[10px] text-emerald-400 bg-emerald-500/10 px-1.5 py-0.5 rounded border border-emerald-500/20\">Success</span>\n )}\n {record.status === 'pending' && (\n <span className=\"text-[10px] text-amber-400 bg-amber-500/10 px-1.5 py-0.5 rounded border border-amber-500/20 animate-pulse\">Purging...</span>\n )}\n <button className=\"opacity-0 group-hover:opacity-100 reveal-touch-visible p-1.5 text-sg-text-muted hover:text-foreground transition-all\" title=\"Re-run\" aria-label=\"Re-run cache purge\">\n <RotateCcw className=\"w-3 h-3\" />\n </button>\n </div>\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n );\n}"]}
|