@page-speed/agent-everywhere 0.3.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/utils.ts","../src/orchestration/index.tsx","../src/orchestration/manifest.ts","../src/components/primitives/message.tsx","../src/components/primitives/typing-indicator.tsx","../src/components/primitives/status-badge.tsx","../src/ui/button.tsx","../src/components/input/prompt-input.tsx","../src/ui/input.tsx","../src/components/input/multimodal-input.tsx","../src/components/input/quick-replies.tsx","../src/ui/badge.tsx","../src/components/input/template-selector.tsx","../src/components/input/inline-suggestions.tsx","../src/components/input/file-drop-zone.tsx","../src/components/input/prompt-library.tsx","../src/components/interactive/persona-selector.tsx","../src/ui/avatar.tsx","../src/components/interactive/entity-card.tsx","../src/components/interactive/option-cards.tsx","../src/components/interactive/settings-panel.tsx","../src/components/interactive/agent-handoff.tsx","../src/components/interactive/listing-feed.tsx","../src/components/interactive/control-grid.tsx","../src/components/interactive/recommendation-cards.tsx","../src/components/interactive/schedule-timeline.tsx","../src/ui/collapsible.tsx","../src/components/messages/message-with-reasoning.tsx","../src/components/messages/message-with-steps.tsx","../src/ui/textarea.tsx","../src/components/messages/message-with-feedback.tsx","../src/components/messages/message-with-attachments.tsx","../src/components/primitives/avatar.tsx","../src/components/messages/conversation-artifact.tsx","../src/components/data-display/chart-container.tsx","../src/components/data-display/metrics-grid.tsx","../src/components/data-display/data-table.tsx","../src/components/data-display/progress-tracker.tsx","../src/components/data-display/sentiment-display.tsx","../src/components/data-display/media-gallery.tsx","../src/ui/progress.tsx","../src/components/data-display/allocation-breakdown.tsx","../src/components/data-display/analytics-dashboard.tsx","../src/components/specialty/image-generator.tsx","../src/components/specialty/writing-assistant.tsx","../src/components/specialty/onboarding-wizard.tsx","../src/components/specialty/quiz-card.tsx","../src/components/specialty/guided-lesson-flow.tsx","../src/components/specialty/media-editor-canvas.tsx","../src/components/analytics/conversation-analytics.tsx","../src/components/analytics/performance-metrics.tsx","../src/containers/chat-panel.tsx","../src/containers/floating-widget.tsx","../src/containers/fullscreen-dashboard.tsx","../src/containers/split-view.tsx","../src/orchestration/register-components.ts","../src/core/mock-backend.ts","../src/core/use-agent-backend.ts","../src/transport/client.ts","../src/transport/protocol.ts","../src/transport/use-semantic-builder.ts","../src/ui/scroll-area.tsx","../src/ui/tooltip.tsx","../src/components/primitives/timestamp.tsx","../src/components/primitives/system-message.tsx","../src/components/primitives/message-actions.tsx","../src/components/data-display/report-view.tsx","../src/components/messages/message-list.tsx","../src/containers/overlay-modal.tsx","../src/containers/mobile-shell.tsx","../src/containers/full-bleed-surface.tsx","../src/containers/agent-surface.tsx"],"names":["twMerge","clsx","delay","createContext","useReducer","useCallback","value","useMemo","jsx","useContext","motion","Markdown","jsxs","cva","React2","Slot","forwardRef","useRef","useImperativeHandle","useLayoutEffect","SendIcon","React3","ImageIcon","MicIcon","FileTextIcon","PaperclipIcon","AnimatePresence","XIcon","Fragment","useState","SearchIcon","useEffect","FileIcon","UploadIcon","UserCircleIcon","React4","AvatarPrimitive","CheckIcon","Loader2Icon","CheckCircle2Icon","ArrowRightIcon","SparklesIcon","BookmarkIcon","toneClasses","Toggle","LightbulbIcon","AlertTriangleIcon","InfoIcon","CollapsiblePrimitive","CollapsibleTrigger","CollapsibleContent","BrainIcon","ZapIcon","ChevronDownIcon","CopyIcon","React5","ThumbsUpIcon","ThumbsDownIcon","attachmentIcons","BotIcon","UserIcon","ResponsiveContainer","BarChart","CartesianGrid","XAxis","YAxis","Tooltip","Bar","LineChart","Line","AreaChart","Area","PieChart","Pie","Cell","Legend","DownloadIcon","TrendingUpIcon","TrendingDownIcon","MinusIcon","ChevronUpIcon","ArrowUpDownIcon","PlayIcon","LinkIcon","ExternalLinkIcon","React6","ProgressPrimitive","ArrowUpIcon","ArrowDownIcon","WandIcon","LayoutGridIcon","Grid3X3Icon","ArrowUpRightIcon","ShuffleIcon","AlignLeftIcon","ListIcon","HashIcon","TypeIcon","RotateCcwIcon","SkipForwardIcon","ChevronLeftIcon","ChevronRightIcon","XCircleIcon","HelpCircleIcon","Minimize2Icon","Maximize2Icon","defaultMetrics","MessageSquareIcon","ClockIcon","CoinsIcon","ActivityIcon","GripVerticalIcon","PanelLeftOpenIcon","PanelLeftCloseIcon","React7","ScrollAreaPrimitive","TooltipPrimitive","React8","AlertCircleIcon","CheckCircleIcon","MoreHorizontalIcon","ArrowLeftIcon","MoreVerticalIcon"],"mappings":"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","file":"index.cjs","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Merge Tailwind classes with clsx\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n/**\n * Format a date to a relative time string (e.g., \"2 min ago\")\n */\nexport function formatRelativeTime(date: Date): string {\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffSec = Math.floor(diffMs / 1000);\n const diffMin = Math.floor(diffSec / 60);\n const diffHour = Math.floor(diffMin / 60);\n const diffDay = Math.floor(diffHour / 24);\n\n if (diffSec < 60) return 'Just now';\n if (diffMin < 60) return `${diffMin} min ago`;\n if (diffHour < 24) return `${diffHour} hour${diffHour > 1 ? 's' : ''} ago`;\n if (diffDay < 7) return `${diffDay} day${diffDay > 1 ? 's' : ''} ago`;\n \n return date.toLocaleDateString();\n}\n\n/**\n * Format a date to a time string (e.g., \"2:30 PM\")\n */\nexport function formatTime(date: Date): string {\n return date.toLocaleTimeString([], { hour: 'numeric', minute: '2-digit' });\n}\n\n/**\n * Format bytes to human-readable size\n */\nexport function formatBytes(bytes: number): string {\n if (bytes === 0) return '0 B';\n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`;\n}\n\n/**\n * Generate a unique ID\n */\nexport function generateId(prefix = 'agent'): string {\n return `${prefix}-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n}\n\n/**\n * Truncate text with ellipsis\n */\nexport function truncate(text: string, maxLength: number): string {\n if (text.length <= maxLength) return text;\n return `${text.substring(0, maxLength - 3)}...`;\n}\n\n/**\n * Debounce function\n */\nexport function debounce<T extends (...args: unknown[]) => unknown>(\n fn: T,\n delay: number\n): (...args: Parameters<T>) => void {\n let timeoutId: ReturnType<typeof setTimeout>;\n return (...args: Parameters<T>) => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => fn(...args), delay);\n };\n}\n\n/**\n * Copy text to clipboard\n */\nexport async function copyToClipboard(text: string): Promise<boolean> {\n try {\n await navigator.clipboard.writeText(text);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Parse markdown-style bold text to segments\n */\nexport function parseTextWithBold(text: string): Array<{ text: string; bold: boolean }> {\n const segments: Array<{ text: string; bold: boolean }> = [];\n const regex = /\\*\\*(.+?)\\*\\*/g;\n let lastIndex = 0;\n let match;\n\n while ((match = regex.exec(text)) !== null) {\n if (match.index > lastIndex) {\n segments.push({ text: text.slice(lastIndex, match.index), bold: false });\n }\n segments.push({ text: match[1], bold: true });\n lastIndex = regex.lastIndex;\n }\n\n if (lastIndex < text.length) {\n segments.push({ text: text.slice(lastIndex), bold: false });\n }\n\n return segments;\n}\n\n/**\n * Get initials from a name\n */\nexport function getInitials(name: string, maxLength = 2): string {\n return name\n .split(' ')\n .map((word) => word[0])\n .join('')\n .toUpperCase()\n .substring(0, maxLength);\n}\n\n/**\n * Calculate percentage\n */\nexport function calculatePercentage(value: number, total: number): number {\n if (total === 0) return 0;\n return Math.round((value / total) * 100);\n}\n\n/**\n * Format a number with commas\n */\nexport function formatNumber(num: number): string {\n return num.toLocaleString();\n}\n\n/**\n * Format currency\n */\nexport function formatCurrency(amount: number, currency = 'USD'): string {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency,\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n }).format(amount);\n}\n\n/**\n * Delay/sleep utility\n */\nexport function delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Check if we're in a browser environment\n */\nexport function isBrowser(): boolean {\n return typeof window !== 'undefined';\n}\n\n/**\n * Check if we're inside an iframe\n */\nexport function isInIframe(): boolean {\n if (!isBrowser()) return false;\n try {\n return window.self !== window.top;\n } catch {\n return true;\n }\n}\n\n/**\n * Get color for sentiment\n */\nexport function getSentimentColor(sentiment: 'positive' | 'negative' | 'neutral' | 'mixed'): string {\n const colors = {\n positive: 'text-emerald-500',\n negative: 'text-red-500',\n neutral: 'text-muted-foreground',\n mixed: 'text-amber-500',\n };\n return colors[sentiment];\n}\n\n/**\n * Get background color for sentiment\n */\nexport function getSentimentBgColor(sentiment: 'positive' | 'negative' | 'neutral' | 'mixed'): string {\n const colors = {\n positive: 'bg-emerald-500/10',\n negative: 'bg-red-500/10',\n neutral: 'bg-muted',\n mixed: 'bg-amber-500/10',\n };\n return colors[sentiment];\n}\n","'use client';\n\n// ============================================================================\n// AGENT EVERYWHERE - Orchestration Layer\n// ============================================================================\n// This is the core orchestration system that allows AI agents to dynamically\n// compose and render UI components. It provides a registry, slot system,\n// and render engine for flexible UI composition.\n\nimport React, { createContext, useContext, useReducer, useCallback, useMemo } from 'react';\nimport type {\n AgentConfig,\n AgentState,\n AgentAction,\n AgentMessage,\n LayoutConfig,\n Attachment,\n AgentPersona,\n RenderInstruction,\n OrchestrationCommand,\n ComponentSlot,\n} from '../core/types';\nimport { generateId } from '../core/utils';\n\n// ============================================================================\n// COMPONENT REGISTRY\n// ============================================================================\n\ntype RegisteredComponent = React.ComponentType<Record<string, unknown>>;\n\nclass ComponentRegistry {\n private components: Map<string, RegisteredComponent> = new Map();\n\n register(name: string, component: RegisteredComponent) {\n this.components.set(name, component);\n }\n\n get(name: string): RegisteredComponent | undefined {\n return this.components.get(name);\n }\n\n has(name: string): boolean {\n return this.components.has(name);\n }\n\n unregister(name: string) {\n this.components.delete(name);\n }\n\n list(): string[] {\n return Array.from(this.components.keys());\n }\n\n clear() {\n this.components.clear();\n }\n}\n\nexport const componentRegistry = new ComponentRegistry();\n\n// ============================================================================\n// STATE REDUCER\n// ============================================================================\n\nconst initialState: AgentState = {\n messages: [],\n isLoading: false,\n error: undefined,\n inputValue: '',\n attachments: [],\n layout: { mode: 'panel' },\n isOpen: false,\n isMinimized: false,\n unreadCount: 0,\n persona: undefined,\n};\n\nfunction agentReducer(state: AgentState, action: AgentAction): AgentState {\n switch (action.type) {\n case 'SET_MESSAGES':\n return { ...state, messages: action.payload };\n case 'ADD_MESSAGE':\n return { ...state, messages: [...state.messages, action.payload] };\n case 'UPDATE_MESSAGE':\n return {\n ...state,\n messages: state.messages.map((msg) =>\n msg.id === action.payload.id ? { ...msg, ...action.payload.updates } : msg\n ),\n };\n case 'DELETE_MESSAGE':\n return {\n ...state,\n messages: state.messages.filter((msg) => msg.id !== action.payload),\n };\n case 'SET_LOADING':\n return { ...state, isLoading: action.payload };\n case 'SET_ERROR':\n return { ...state, error: action.payload };\n case 'SET_INPUT':\n return { ...state, inputValue: action.payload };\n case 'ADD_ATTACHMENT':\n return { ...state, attachments: [...state.attachments, action.payload] };\n case 'REMOVE_ATTACHMENT':\n return {\n ...state,\n attachments: state.attachments.filter((att) => att.id !== action.payload),\n };\n case 'CLEAR_ATTACHMENTS':\n return { ...state, attachments: [] };\n case 'SET_LAYOUT':\n return { ...state, layout: action.payload };\n case 'SET_OPEN':\n return { ...state, isOpen: action.payload };\n case 'SET_MINIMIZED':\n return { ...state, isMinimized: action.payload };\n case 'SET_UNREAD_COUNT':\n return { ...state, unreadCount: action.payload };\n case 'SET_PERSONA':\n return { ...state, persona: action.payload };\n case 'RESET':\n return initialState;\n default:\n return state;\n }\n}\n\n// ============================================================================\n// AGENT CONTEXT\n// ============================================================================\n\ninterface AgentContextValue {\n config: AgentConfig;\n state: AgentState;\n dispatch: React.Dispatch<AgentAction>;\n // Convenience actions\n sendMessage: (content: string, attachments?: Attachment[]) => void;\n addMessage: (message: Omit<AgentMessage, 'id' | 'timestamp'>) => AgentMessage;\n updateMessage: (id: string, updates: Partial<AgentMessage>) => void;\n deleteMessage: (id: string) => void;\n setLoading: (loading: boolean) => void;\n setError: (error: string | undefined) => void;\n setInput: (value: string) => void;\n addAttachment: (attachment: Attachment) => void;\n removeAttachment: (id: string) => void;\n clearAttachments: () => void;\n setLayout: (layout: LayoutConfig) => void;\n setOpen: (open: boolean) => void;\n setMinimized: (minimized: boolean) => void;\n setPersona: (persona: AgentPersona | undefined) => void;\n reset: () => void;\n // Orchestration\n executeCommand: (command: OrchestrationCommand) => void;\n}\n\nconst AgentContext = createContext<AgentContextValue | null>(null);\n\n// ============================================================================\n// AGENT PROVIDER\n// ============================================================================\n\ninterface AgentProviderProps {\n config: AgentConfig;\n initialMessages?: AgentMessage[];\n onSendMessage?: (content: string, attachments?: Attachment[]) => Promise<void>;\n onEvent?: (event: { type: string; payload?: unknown }) => void;\n children: React.ReactNode;\n}\n\nexport function AgentProvider({\n config,\n initialMessages = [],\n onSendMessage,\n onEvent,\n children,\n}: AgentProviderProps) {\n const [state, dispatch] = useReducer(agentReducer, {\n ...initialState,\n messages: initialMessages,\n layout: config.layout,\n });\n\n const emitEvent = useCallback(\n (type: string, payload?: unknown) => {\n onEvent?.({ type, payload });\n },\n [onEvent]\n );\n\n const addMessage = useCallback(\n (message: Omit<AgentMessage, 'id' | 'timestamp'>): AgentMessage => {\n const newMessage: AgentMessage = {\n ...message,\n id: generateId('msg'),\n timestamp: new Date(),\n };\n dispatch({ type: 'ADD_MESSAGE', payload: newMessage });\n emitEvent('message:receive', newMessage);\n return newMessage;\n },\n [emitEvent]\n );\n\n const sendMessage = useCallback(\n async (content: string, attachments?: Attachment[]) => {\n // Add user message\n const userMessage: AgentMessage = {\n id: generateId('msg'),\n role: 'user',\n content,\n timestamp: new Date(),\n attachments,\n };\n dispatch({ type: 'ADD_MESSAGE', payload: userMessage });\n dispatch({ type: 'CLEAR_ATTACHMENTS' });\n dispatch({ type: 'SET_INPUT', payload: '' });\n emitEvent('message:send', userMessage);\n\n // Call handler if provided\n if (onSendMessage) {\n dispatch({ type: 'SET_LOADING', payload: true });\n try {\n await onSendMessage(content, attachments);\n } catch (error) {\n dispatch({ type: 'SET_ERROR', payload: String(error) });\n emitEvent('error', error);\n } finally {\n dispatch({ type: 'SET_LOADING', payload: false });\n }\n }\n },\n [onSendMessage, emitEvent]\n );\n\n const updateMessage = useCallback((id: string, updates: Partial<AgentMessage>) => {\n dispatch({ type: 'UPDATE_MESSAGE', payload: { id, updates } });\n }, []);\n\n const deleteMessage = useCallback((id: string) => {\n dispatch({ type: 'DELETE_MESSAGE', payload: id });\n }, []);\n\n const setLoading = useCallback((loading: boolean) => {\n dispatch({ type: 'SET_LOADING', payload: loading });\n }, []);\n\n const setError = useCallback((error: string | undefined) => {\n dispatch({ type: 'SET_ERROR', payload: error });\n }, []);\n\n const setInput = useCallback((value: string) => {\n dispatch({ type: 'SET_INPUT', payload: value });\n }, []);\n\n const addAttachment = useCallback(\n (attachment: Attachment) => {\n dispatch({ type: 'ADD_ATTACHMENT', payload: attachment });\n emitEvent('attachment:add', attachment);\n },\n [emitEvent]\n );\n\n const removeAttachment = useCallback(\n (id: string) => {\n dispatch({ type: 'REMOVE_ATTACHMENT', payload: id });\n emitEvent('attachment:remove', { id });\n },\n [emitEvent]\n );\n\n const clearAttachments = useCallback(() => {\n dispatch({ type: 'CLEAR_ATTACHMENTS' });\n }, []);\n\n const setLayout = useCallback(\n (layout: LayoutConfig) => {\n dispatch({ type: 'SET_LAYOUT', payload: layout });\n emitEvent('layout:change', layout);\n },\n [emitEvent]\n );\n\n const setOpen = useCallback(\n (open: boolean) => {\n dispatch({ type: 'SET_OPEN', payload: open });\n emitEvent(open ? 'widget:open' : 'widget:close');\n if (open) {\n dispatch({ type: 'SET_UNREAD_COUNT', payload: 0 });\n }\n },\n [emitEvent]\n );\n\n const setMinimized = useCallback(\n (minimized: boolean) => {\n dispatch({ type: 'SET_MINIMIZED', payload: minimized });\n emitEvent('widget:minimize', { minimized });\n },\n [emitEvent]\n );\n\n const setPersona = useCallback((persona: AgentPersona | undefined) => {\n dispatch({ type: 'SET_PERSONA', payload: persona });\n }, []);\n\n const reset = useCallback(() => {\n dispatch({ type: 'RESET' });\n }, []);\n\n const executeCommand = useCallback(\n (command: OrchestrationCommand) => {\n switch (command.type) {\n case 'layout_change':\n if (typeof command.payload !== 'string') {\n setLayout(command.payload as LayoutConfig);\n }\n break;\n case 'inject':\n case 'update':\n case 'remove':\n // These would be handled by a slot system in a more complex implementation\n emitEvent(`orchestration:${command.type}`, command);\n break;\n }\n },\n [setLayout, emitEvent]\n );\n\n const value = useMemo(\n () => ({\n config,\n state,\n dispatch,\n sendMessage,\n addMessage,\n updateMessage,\n deleteMessage,\n setLoading,\n setError,\n setInput,\n addAttachment,\n removeAttachment,\n clearAttachments,\n setLayout,\n setOpen,\n setMinimized,\n setPersona,\n reset,\n executeCommand,\n }),\n [\n config,\n state,\n sendMessage,\n addMessage,\n updateMessage,\n deleteMessage,\n setLoading,\n setError,\n setInput,\n addAttachment,\n removeAttachment,\n clearAttachments,\n setLayout,\n setOpen,\n setMinimized,\n setPersona,\n reset,\n executeCommand,\n ]\n );\n\n return <AgentContext.Provider value={value}>{children}</AgentContext.Provider>;\n}\n\n// ============================================================================\n// HOOKS\n// ============================================================================\n\nexport function useAgent() {\n const context = useContext(AgentContext);\n if (!context) {\n throw new Error('useAgent must be used within an AgentProvider');\n }\n return context;\n}\n\nexport function useAgentMessages() {\n const { state, addMessage, updateMessage, deleteMessage } = useAgent();\n return {\n messages: state.messages,\n isLoading: state.isLoading,\n addMessage,\n updateMessage,\n deleteMessage,\n };\n}\n\nexport function useAgentInput() {\n const { state, setInput, sendMessage, addAttachment, removeAttachment, clearAttachments } =\n useAgent();\n return {\n value: state.inputValue,\n attachments: state.attachments,\n isLoading: state.isLoading,\n setValue: setInput,\n send: sendMessage,\n addAttachment,\n removeAttachment,\n clearAttachments,\n };\n}\n\nexport function useAgentLayout() {\n const { state, setLayout, setOpen, setMinimized } = useAgent();\n return {\n layout: state.layout,\n isOpen: state.isOpen,\n isMinimized: state.isMinimized,\n setLayout,\n setOpen,\n setMinimized,\n };\n}\n\n// ============================================================================\n// DYNAMIC RENDERER\n// ============================================================================\n\ninterface DynamicRendererProps {\n instruction: RenderInstruction;\n fallback?: React.ReactNode;\n}\n\nexport function DynamicRenderer({ instruction, fallback = null }: DynamicRendererProps) {\n const Component = componentRegistry.get(instruction.component);\n\n if (!Component) {\n console.warn(`Component \"${instruction.component}\" not found in registry`);\n return <>{fallback}</>;\n }\n\n if (instruction.condition === false) {\n return null;\n }\n\n return (\n <Component {...(instruction.props || {})}>\n {instruction.children?.map((child, index) => (\n <DynamicRenderer key={index} instruction={child} />\n ))}\n </Component>\n );\n}\n\n// ============================================================================\n// SLOT RENDERER\n// ============================================================================\n\ninterface SlotRendererProps {\n slot: ComponentSlot | undefined;\n fallback?: React.ReactNode;\n}\n\nexport function SlotRenderer({ slot, fallback = null }: SlotRendererProps) {\n if (!slot || slot.visible === false) {\n return <>{fallback}</>;\n }\n\n const Component = componentRegistry.get(slot.component);\n if (!Component) {\n console.warn(`Slot component \"${slot.component}\" not found in registry`);\n return <>{fallback}</>;\n }\n\n return <Component {...(slot.props || {})} />;\n}\n\n// ============================================================================\n// EXPORTS\n// ============================================================================\n\nexport { AgentContext };\nexport type { AgentContextValue, AgentProviderProps };\n","// ============================================================================\n// AGENT EVERYWHERE - Component Manifest\n// ============================================================================\n// A typed, serializable catalog describing every component an orchestration\n// agent can select and inject at runtime. Each entry captures the component's\n// capability, the kind of payload it renders, and guidance on when to pick it.\n// The manifest is intentionally data-only (no React imports) so it can be sent\n// to an LLM/orchestrator as context or filtered programmatically.\n\nexport type ComponentCategory =\n | 'primitive'\n | 'input'\n | 'message'\n | 'data-display'\n | 'interactive'\n | 'specialty'\n | 'container';\n\n/** Logical capability tags an orchestrator can match intent against. */\nexport type ComponentCapability =\n | 'text'\n | 'streaming'\n | 'reasoning'\n | 'steps'\n | 'feedback'\n | 'attachments'\n | 'file-upload'\n | 'voice'\n | 'image-generation'\n | 'suggestions'\n | 'templates'\n | 'quick-replies'\n | 'persona'\n | 'sentiment'\n | 'handoff'\n | 'chart'\n | 'table'\n | 'metrics'\n | 'progress'\n | 'entity-card'\n | 'option-select'\n | 'settings'\n | 'analytics'\n | 'wizard'\n | 'quiz'\n | 'writing'\n | 'layout'\n | 'media-gallery'\n | 'listing'\n | 'controls'\n | 'allocation'\n | 'recommendation'\n | 'schedule'\n | 'lesson'\n | 'media-editing';\n\nexport interface ManifestPropSpec {\n name: string;\n /** TS-ish type string for orchestrator/LLM consumption. */\n type: string;\n required?: boolean;\n description?: string;\n}\n\nexport interface ComponentManifestEntry {\n /** Registry key + import name. */\n name: string;\n category: ComponentCategory;\n /** One-line description of what it does. */\n description: string;\n capabilities: ComponentCapability[];\n /** Guidance for an orchestrator on when to select this component. */\n whenToUse: string;\n /** Key props (not exhaustive — the source of truth is the TS interface). */\n props: ManifestPropSpec[];\n /** Render surfaces this component is appropriate for. */\n surfaces: Array<'conversation' | 'dashboard' | 'widget'>;\n}\n\nconst ALL_SURFACES: ComponentManifestEntry['surfaces'] = [\n 'conversation',\n 'dashboard',\n 'widget',\n];\n\nexport const componentManifest: ComponentManifestEntry[] = [\n // --- Primitives ---\n {\n name: 'MessageBubble',\n category: 'primitive',\n description: 'A single role-styled message bubble.',\n capabilities: ['text'],\n whenToUse: 'Render any individual chat message body.',\n props: [\n { name: 'role', type: \"'user' | 'assistant' | 'system'\", required: true },\n { name: 'children', type: 'ReactNode', required: true },\n ],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'TypingIndicator',\n category: 'primitive',\n description: 'Animated dots shown while the agent is responding.',\n capabilities: ['streaming'],\n whenToUse: 'Show during in-flight backend responses.',\n props: [{ name: 'size', type: \"'sm' | 'md'\" }],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'StatusBadge',\n category: 'primitive',\n description: 'Online/offline/busy status pill.',\n capabilities: ['text'],\n whenToUse: 'Indicate agent availability in a header.',\n props: [{ name: 'status', type: \"'online' | 'offline' | 'busy' | 'away'\", required: true }],\n surfaces: ALL_SURFACES,\n },\n\n // --- Input ---\n {\n name: 'PromptInput',\n category: 'input',\n description: 'Auto-growing text input with send affordance.',\n capabilities: ['text'],\n whenToUse: 'Default composer for any conversation surface.',\n props: [\n { name: 'value', type: 'string', required: true },\n { name: 'onChange', type: '(v: string) => void', required: true },\n { name: 'onSend', type: '(v: string) => void', required: true },\n ],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'MultimodalInput',\n category: 'input',\n description: 'Composer with attachment + voice affordances.',\n capabilities: ['text', 'attachments', 'voice', 'file-upload'],\n whenToUse: 'When the turn may include files, images, or audio.',\n props: [\n { name: 'value', type: 'string', required: true },\n { name: 'onSend', type: '(v: string, files?: File[]) => void', required: true },\n ],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'QuickReplies',\n category: 'input',\n description: 'Tappable suggested reply chips.',\n capabilities: ['quick-replies', 'suggestions'],\n whenToUse: 'Offer constrained next actions after a message.',\n props: [{ name: 'replies', type: 'QuickReply[]', required: true }],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'TemplateSelector',\n category: 'input',\n description: 'Pick a parameterized prompt template and fill variables.',\n capabilities: ['templates'],\n whenToUse: 'Help users start from structured, reusable prompts.',\n props: [{ name: 'templates', type: 'PromptTemplate[]', required: true }],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'InlineSuggestionsInput',\n category: 'input',\n description: 'Input with inline ghost-text completion.',\n capabilities: ['suggestions', 'text'],\n whenToUse: 'Accelerate typing with predictive completions.',\n props: [{ name: 'getSuggestions', type: '(value: string) => Promise<InlineSuggestion[]>' }],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'FileDropZone',\n category: 'input',\n description: 'Drag-and-drop file upload area.',\n capabilities: ['file-upload', 'attachments'],\n whenToUse: 'Collect documents/images for processing.',\n props: [{ name: 'onFiles', type: '(files: File[]) => void', required: true }],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'PromptLibrary',\n category: 'input',\n description: 'Searchable, categorized library of saved prompts.',\n capabilities: ['templates', 'suggestions'],\n whenToUse: 'Let users browse and reuse a catalog of prompts.',\n props: [{ name: 'prompts', type: 'LibraryPrompt[]', required: true }],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'PersonaSelector',\n category: 'input',\n description: 'Choose the active agent persona/profile.',\n capabilities: ['persona'],\n whenToUse: 'Switch tone/capability profile before a turn.',\n props: [{ name: 'personas', type: 'AgentPersona[]', required: true }],\n surfaces: ALL_SURFACES,\n },\n\n // --- Messages ---\n {\n name: 'MessageWithReasoning',\n category: 'message',\n description: 'Assistant message with collapsible chain-of-thought.',\n capabilities: ['text', 'reasoning'],\n whenToUse: 'Expose intermediate reasoning steps transparently.',\n props: [\n { name: 'content', type: 'string', required: true },\n { name: 'reasoning', type: 'ReasoningStep[]' },\n ],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'MessageWithSteps',\n category: 'message',\n description: 'Message showing multi-step execution progress.',\n capabilities: ['text', 'steps'],\n whenToUse: 'Visualize a tool/workflow run with per-step status.',\n props: [\n { name: 'content', type: 'string', required: true },\n { name: 'steps', type: 'ExecutionStep[]', required: true },\n ],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'MessageWithFeedback',\n category: 'message',\n description: 'Message with thumbs up/down + categorized feedback.',\n capabilities: ['text', 'feedback'],\n whenToUse: 'Collect response quality signals.',\n props: [\n { name: 'content', type: 'string', required: true },\n { name: 'onFeedback', type: '(f: MessageFeedback) => void' },\n ],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'MessageWithAttachments',\n category: 'message',\n description: 'Message rendering attached media/files.',\n capabilities: ['text', 'attachments'],\n whenToUse: 'Display files/images shared in a turn.',\n props: [\n { name: 'content', type: 'string' },\n { name: 'attachments', type: 'Attachment[]', required: true },\n ],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'ConversationArtifact',\n category: 'message',\n description: 'Wraps any rich-content node (chart/report/gallery) as an assistant conversation turn.',\n capabilities: ['text'],\n whenToUse: 'Drop a data-display component into a message thread as an assistant turn, with optional intro/caption.',\n props: [\n { name: 'children', type: 'ReactNode', required: true },\n { name: 'intro', type: 'string' },\n { name: 'caption', type: 'string' },\n ],\n surfaces: ALL_SURFACES,\n },\n\n // --- Data display ---\n {\n name: 'ChartContainer',\n category: 'data-display',\n description: 'Renders bar/line/pie/area charts from ChartData.',\n capabilities: ['chart'],\n whenToUse: 'Visualize quantitative results or trends.',\n props: [{ name: 'data', type: 'ChartData', required: true }],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'MetricsGrid',\n category: 'data-display',\n description: 'Grid of KPI metric cards with trends.',\n capabilities: ['metrics'],\n whenToUse: 'Summarize headline numbers at a glance.',\n props: [{ name: 'metrics', type: 'MetricData[]', required: true }],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'DataTable',\n category: 'data-display',\n description: 'Sortable tabular data view.',\n capabilities: ['table'],\n whenToUse: 'Show row-level detail or query results.',\n props: [{ name: 'data', type: 'TableData', required: true }],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'ProgressTracker',\n category: 'data-display',\n description: 'Linear/stepped progress visualization.',\n capabilities: ['progress', 'steps'],\n whenToUse: 'Track completion of a long-running task.',\n props: [{ name: 'steps', type: 'ProgressStep[]', required: true }],\n surfaces: ALL_SURFACES,\n },\n\n // --- Interactive ---\n {\n name: 'EntityCard',\n category: 'interactive',\n description: 'Rich card for a person/place/item with actions.',\n capabilities: ['entity-card'],\n whenToUse: 'Surface a structured entity with primary/secondary actions.',\n props: [{ name: 'entity', type: 'EntityCardData', required: true }],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'OptionCards',\n category: 'interactive',\n description: 'Selectable recommendation/option cards.',\n capabilities: ['option-select'],\n whenToUse: 'Present a set of choices for the user to pick from.',\n props: [{ name: 'options', type: 'OptionCardItem[]', required: true }],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'SettingsPanel',\n category: 'interactive',\n description: 'Grouped toggles/controls panel.',\n capabilities: ['settings'],\n whenToUse: 'Let the user configure preferences or controls inline.',\n props: [{ name: 'groups', type: 'SettingsGroup[]', required: true }],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'AgentHandoff',\n category: 'interactive',\n description: 'Visualizes a handoff/routing between specialized AI agents (direct, routing-to-specialist, or multi-agent triage).',\n capabilities: ['handoff', 'persona'],\n whenToUse: 'Route a request between specialized agents by request type (onboarding/routing), or triage among several candidates.',\n props: [\n { name: 'variant', type: \"'direct' | 'routing' | 'triage'\" },\n { name: 'from', type: 'HandoffAgent', required: true },\n { name: 'to', type: 'HandoffAgent' },\n { name: 'candidates', type: 'HandoffCandidate[]' },\n { name: 'reason', type: 'string' },\n { name: 'status', type: \"'connecting' | 'handed-off' | 'active'\" },\n { name: 'actions', type: 'HandoffAction[]' },\n ],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'ListingFeed',\n category: 'interactive',\n description: 'Feed of structured listing cards with meta fields, tags, and actions.',\n capabilities: ['listing', 'entity-card'],\n whenToUse: 'Present a scannable list of structured results/opportunities the user can act on or save.',\n props: [\n { name: 'listings', type: 'Listing[]', required: true },\n { name: 'savedIds', type: 'string[]' },\n { name: 'onToggleSaved', type: '(id: string) => void' },\n ],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'ControlGrid',\n category: 'interactive',\n description: 'Grid of toggle/slider/status/action control tiles with live state.',\n capabilities: ['controls', 'settings'],\n whenToUse: 'Expose live controls so the user can flip toggles, adjust values, or trigger actions.',\n props: [\n { name: 'tiles', type: 'ControlTile[]', required: true },\n { name: 'onToggle', type: '(id: string, next: boolean) => void' },\n { name: 'onValueChange', type: '(id: string, value: number) => void' },\n ],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'RecommendationCards',\n category: 'interactive',\n description: 'Recommendation cards with rationale, impact, and actions.',\n capabilities: ['recommendation', 'option-select'],\n whenToUse: 'Surface a set of recommended actions with the reasoning behind each.',\n props: [{ name: 'recommendations', type: 'Recommendation[]', required: true }],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'ScheduleTimeline',\n category: 'interactive',\n description: 'Time-ordered agenda/timeline of slots with state, options, and actions.',\n capabilities: ['schedule', 'steps'],\n whenToUse: 'Show a chronological agenda or let the user pick from proposed time slots.',\n props: [\n { name: 'items', type: 'AgendaItem[]', required: true },\n { name: 'selectedOptionId', type: 'string' },\n { name: 'onSelectOption', type: '(itemId: string, optionId: string) => void' },\n ],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'SentimentDisplay',\n category: 'data-display',\n description: 'Visualizes a sentiment score and emotion breakdown.',\n capabilities: ['sentiment', 'analytics'],\n whenToUse: 'Show tone/sentiment analysis of text.',\n props: [{ name: 'sentiment', type: 'SentimentScore', required: true }],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'MediaGallery',\n category: 'data-display',\n description: 'Grid/list gallery of media items with grouping and lightbox preview.',\n capabilities: ['media-gallery', 'attachments'],\n whenToUse: 'Display a collection of images/video/files/links the user can browse and preview.',\n props: [\n { name: 'items', type: 'MediaItem[]', required: true },\n { name: 'groupBy', type: \"'group' | 'kind' | 'none'\" },\n { name: 'enablePreview', type: 'boolean' },\n ],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'AllocationBreakdown',\n category: 'data-display',\n description: 'Weighted allocation visualization (stacked bar + per-segment rows).',\n capabilities: ['allocation', 'chart', 'metrics'],\n whenToUse: 'Show how a whole is distributed across weighted segments, with deltas and summary stats.',\n props: [\n { name: 'segments', type: 'AllocationSegment[]', required: true },\n { name: 'summary', type: 'AllocationSummaryStat[]' },\n ],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'AnalyticsDashboard',\n category: 'data-display',\n description: 'Polished, responsive analytics report: KPI cards, distribution bar, breakdown/ranked lists, and recent items.',\n capabilities: ['analytics', 'metrics', 'chart'],\n whenToUse: 'Render a multi-section analytics/report view back to the user (e.g. an NLP query turned into a visualized report). Collapses to one column on narrow surfaces.',\n props: [\n { name: 'metrics', type: 'AnalyticsMetric[]' },\n { name: 'distribution', type: 'AnalyticsDistributionSegment[]' },\n { name: 'highlight', type: 'AnalyticsHighlight' },\n { name: 'breakdown', type: 'AnalyticsBreakdownRow[]' },\n { name: 'ranked', type: 'AnalyticsRankedRow[]' },\n { name: 'recentItems', type: 'AnalyticsRecentItem[]' },\n ],\n surfaces: ALL_SURFACES,\n },\n\n // --- Specialty ---\n {\n name: 'ImageGenerator',\n category: 'specialty',\n description: 'Prompt-to-image generation panel with variations.',\n capabilities: ['image-generation'],\n whenToUse: 'Generate or iterate on images from prompts.',\n props: [{ name: 'onGenerate', type: '(prompt: string) => void' }],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'WritingAssistant',\n category: 'specialty',\n description: 'Long-form drafting with tone/length controls.',\n capabilities: ['writing'],\n whenToUse: 'Draft or refine long-form content.',\n props: [{ name: 'onGenerate', type: '(opts: WritingOptions) => void' }],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'OnboardingWizard',\n category: 'specialty',\n description: 'Multi-step guided setup flow.',\n capabilities: ['wizard', 'steps'],\n whenToUse: 'Walk a user through first-run configuration.',\n props: [{ name: 'steps', type: 'WizardStep[]', required: true }],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'QuizCard',\n category: 'specialty',\n description: 'Interactive multiple-choice question card.',\n capabilities: ['quiz', 'option-select'],\n whenToUse: 'Assess knowledge or gather structured input.',\n props: [{ name: 'questions', type: 'QuizQuestion[]', required: true }],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'GuidedLessonFlow',\n category: 'specialty',\n description: 'Step-through guided flow with content and optional knowledge checks.',\n capabilities: ['lesson', 'wizard', 'quiz', 'progress'],\n whenToUse: 'Walk a user through sequential content with optional per-step comprehension checks.',\n props: [\n { name: 'steps', type: 'LessonStep[]', required: true },\n { name: 'currentIndex', type: 'number' },\n { name: 'onComplete', type: '() => void' },\n ],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'MediaEditorCanvas',\n category: 'specialty',\n description: 'Media canvas with tool/adjustment rail and before/after compare.',\n capabilities: ['media-editing'],\n whenToUse: 'Preview a media edit, compare before/after, and expose tools/adjustments.',\n props: [\n { name: 'sourceUrl', type: 'string' },\n { name: 'tools', type: 'EditorTool[]' },\n { name: 'adjustments', type: 'EditorAdjustment[]' },\n { name: 'enableCompare', type: 'boolean' },\n ],\n surfaces: ['conversation', 'dashboard'],\n },\n\n // --- Analytics ---\n {\n name: 'ConversationAnalytics',\n category: 'data-display',\n description: 'Dashboard of conversation/topic analytics.',\n capabilities: ['analytics', 'chart', 'metrics'],\n whenToUse: 'Summarize aggregate conversation insights.',\n props: [{ name: 'data', type: 'ConversationAnalyticsData', required: true }],\n surfaces: ['dashboard'],\n },\n {\n name: 'PerformanceMetrics',\n category: 'data-display',\n description: 'Agent performance KPI dashboard.',\n capabilities: ['analytics', 'metrics'],\n whenToUse: 'Report on agent performance over time.',\n props: [{ name: 'metrics', type: 'PerformanceMetricsData', required: true }],\n surfaces: ['dashboard'],\n },\n\n // --- Containers ---\n {\n name: 'ChatPanel',\n category: 'container',\n description: 'Standard bounded conversation panel.',\n capabilities: ['layout'],\n whenToUse: 'Embed a conversation inside a page or dashboard.',\n props: [{ name: 'children', type: 'ReactNode', required: true }],\n surfaces: ['conversation'],\n },\n {\n name: 'FloatingWidget',\n category: 'container',\n description: 'Floating launcher + expandable chat for embedding.',\n capabilities: ['layout'],\n whenToUse: 'Drop an agent onto any (incl. 3rd-party) website.',\n props: [\n { name: 'isOpen', type: 'boolean', required: true },\n { name: 'onToggle', type: '() => void', required: true },\n ],\n surfaces: ['widget'],\n },\n {\n name: 'FullscreenDashboard',\n category: 'container',\n description: 'Full-screen reporting/dashboard surface.',\n capabilities: ['layout'],\n whenToUse: 'Expand a conversation into a full report view.',\n props: [{ name: 'children', type: 'ReactNode', required: true }],\n surfaces: ['dashboard'],\n },\n {\n name: 'SplitView',\n category: 'container',\n description: 'Conversation alongside a data/report panel.',\n capabilities: ['layout'],\n whenToUse: 'Chat and live results side-by-side.',\n props: [\n { name: 'chat', type: 'ReactNode', required: true },\n { name: 'panel', type: 'ReactNode', required: true },\n ],\n surfaces: ['dashboard'],\n },\n];\n\n/** Lookup a manifest entry by component name. */\nexport function getManifestEntry(name: string): ComponentManifestEntry | undefined {\n return componentManifest.find((c) => c.name === name);\n}\n\n/** Filter manifest entries by capability — the core orchestrator query. */\nexport function findComponentsByCapability(\n capability: ComponentCapability\n): ComponentManifestEntry[] {\n return componentManifest.filter((c) => c.capabilities.includes(capability));\n}\n\n/** Filter manifest entries appropriate for a given render surface. */\nexport function findComponentsBySurface(\n surface: 'conversation' | 'dashboard' | 'widget'\n): ComponentManifestEntry[] {\n return componentManifest.filter((c) => c.surfaces.includes(surface));\n}\n\n/** Filter by category. */\nexport function findComponentsByCategory(\n category: ComponentCategory\n): ComponentManifestEntry[] {\n return componentManifest.filter((c) => c.category === category);\n}\n","'use client';\n\nimport { motion } from 'motion/react';\nimport { Markdown } from '@page-speed/markdown-to-jsx';\nimport { cn } from '../../core/utils';\nimport type { MessageRole } from '../../core/types';\n\nexport interface MessageBubbleProps {\n role: MessageRole;\n children: React.ReactNode;\n className?: string;\n /** Remove default styling, just provide structure */\n unstyled?: boolean;\n}\n\nexport function MessageBubble({ role, children, className, unstyled }: MessageBubbleProps) {\n return (\n <motion.div\n initial={{ opacity: 0, y: 6 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.2 }}\n className={cn(\n 'max-w-[85%] rounded-lg px-3 py-2',\n !unstyled && role === 'user' && 'bg-foreground text-background',\n !unstyled && role === 'assistant' && 'bg-muted/50',\n !unstyled && role === 'system' && 'bg-muted/30 border border-dashed',\n className\n )}\n >\n {children}\n </motion.div>\n );\n}\n\nexport interface MessageContentProps {\n children: React.ReactNode;\n className?: string;\n /**\n * When the content is a plain string, render it as markdown (headings,\n * lists, bold/italic, code, links) instead of raw text. Defaults to true.\n * Set false for content that should be shown verbatim.\n */\n markdown?: boolean;\n}\n\n// Markdown spacing is provided via element OVERRIDES with inline styles rather\n// than Tailwind utility classes. The consumer's Tailwind build does not scan\n// this package's compiled output, so arbitrary variants like `[&_p]:my-1.5`\n// are never generated and silently do nothing — which is why agent messages\n// rendered jammed together. Inline styles render correctly in any consumer.\nconst SPACE = '0.5rem';\n\nconst mdStyle: React.CSSProperties = { lineHeight: 1.6 };\n\nconst MdP = ({ children }: { children?: React.ReactNode }) => (\n <p style={{ margin: `${SPACE} 0` }}>{children}</p>\n);\nconst MdUl = ({ children }: { children?: React.ReactNode }) => (\n <ul style={{ margin: `${SPACE} 0`, paddingLeft: '1.25rem', listStyle: 'disc' }}>\n {children}\n </ul>\n);\nconst MdOl = ({ children }: { children?: React.ReactNode }) => (\n <ol\n style={{ margin: `${SPACE} 0`, paddingLeft: '1.25rem', listStyle: 'decimal' }}\n >\n {children}\n </ol>\n);\nconst MdLi = ({ children }: { children?: React.ReactNode }) => (\n <li style={{ margin: '0.2rem 0' }}>{children}</li>\n);\nconst mkHeading =\n (level: 1 | 2 | 3, fontSize: string) =>\n ({ children }: { children?: React.ReactNode }) => {\n const Tag = `h${level}` as 'h1' | 'h2' | 'h3';\n return (\n <Tag style={{ margin: `${SPACE} 0 0.25rem`, fontSize, fontWeight: 600 }}>\n {children}\n </Tag>\n );\n };\nconst MdBlockquote = ({ children }: { children?: React.ReactNode }) => (\n <blockquote\n style={{\n margin: `${SPACE} 0`,\n paddingLeft: '0.75rem',\n borderLeft: '2px solid currentColor',\n opacity: 0.85,\n }}\n >\n {children}\n </blockquote>\n);\n\n// Override the spacing-critical block elements with inline-styled equivalents.\n// Links, images, code, and tables keep the library's default ecosystem\n// overrides (useDefaults stays on).\nconst MARKDOWN_OVERRIDES = {\n p: MdP,\n ul: MdUl,\n ol: MdOl,\n li: MdLi,\n h1: mkHeading(1, '1rem'),\n h2: mkHeading(2, '0.95rem'),\n h3: mkHeading(3, '0.9rem'),\n blockquote: MdBlockquote,\n};\n\nexport function MessageContent({\n children,\n className,\n markdown = true,\n}: MessageContentProps) {\n // Render markdown only for plain string content. Non-string children (custom\n // nodes) and opt-outs fall back to verbatim, whitespace-preserving text.\n if (markdown && typeof children === 'string') {\n return (\n <Markdown\n className={cn(\n 'text-sm [&>*:first-child]:mt-0 [&>*:last-child]:mb-0',\n className,\n )}\n overrides={MARKDOWN_OVERRIDES}\n >\n {children}\n </Markdown>\n );\n }\n return (\n <div\n className={cn('text-sm leading-relaxed whitespace-pre-wrap', className)}\n style={mdStyle}\n >\n {children}\n </div>\n );\n}\n\nexport interface MessageContainerProps {\n role: MessageRole;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function MessageContainer({ role, children, className }: MessageContainerProps) {\n return (\n <div\n className={cn(\n 'flex gap-3',\n role === 'user' && 'flex-row-reverse',\n className\n )}\n >\n {children}\n </div>\n );\n}\n","'use client';\n\nimport { motion } from 'motion/react';\nimport { cn } from '../../core/utils';\n\nexport interface TypingIndicatorProps {\n className?: string;\n /** Dot size */\n size?: 'sm' | 'md';\n /** Label to show */\n label?: string;\n}\n\nexport function TypingIndicator({ className, size = 'sm', label }: TypingIndicatorProps) {\n const dotSize = size === 'sm' ? 'size-1.5' : 'size-2';\n\n return (\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className={cn('flex items-center gap-2', className)}\n >\n <div className=\"flex items-center gap-1 rounded-lg bg-muted/50 px-3 py-2\">\n <span className={cn(dotSize, 'animate-pulse rounded-full bg-muted-foreground')} />\n <span\n className={cn(\n dotSize,\n 'animate-pulse rounded-full bg-muted-foreground [animation-delay:150ms]'\n )}\n />\n <span\n className={cn(\n dotSize,\n 'animate-pulse rounded-full bg-muted-foreground [animation-delay:300ms]'\n )}\n />\n </div>\n {label && (\n <span className=\"text-muted-foreground text-xs\">{label}</span>\n )}\n </motion.div>\n );\n}\n","'use client';\n\nimport { cn } from '../../core/utils';\n\nexport type StatusType = 'online' | 'offline' | 'busy' | 'away';\n\nexport interface StatusBadgeProps {\n status: StatusType;\n label?: string;\n showDot?: boolean;\n className?: string;\n}\n\nconst statusColors: Record<StatusType, string> = {\n online: 'bg-emerald-500',\n offline: 'bg-muted-foreground/50',\n busy: 'bg-red-500',\n away: 'bg-amber-500',\n};\n\nconst statusLabels: Record<StatusType, string> = {\n online: 'Online',\n offline: 'Offline',\n busy: 'Busy',\n away: 'Away',\n};\n\nexport function StatusBadge({\n status,\n label,\n showDot = true,\n className,\n}: StatusBadgeProps) {\n const displayLabel = label || statusLabels[status];\n\n return (\n <div className={cn('flex items-center gap-1.5', className)}>\n {showDot && (\n <span className={cn('size-1.5 rounded-full', statusColors[status])} />\n )}\n <span className=\"text-muted-foreground text-[10px]\">{displayLabel}</span>\n </div>\n );\n}\n","import * as React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../core/utils';\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground shadow hover:bg-primary/90\",\n destructive: \"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90\",\n outline: \"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground\",\n secondary: \"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2\",\n sm: \"h-8 rounded-md px-3 text-xs\",\n lg: \"h-10 rounded-md px-8\",\n icon: \"h-9 w-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button';\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n );\n }\n);\nButton.displayName = 'Button';\n\nexport { Button, buttonVariants };\n","'use client';\n\nimport {\n type FormEvent,\n forwardRef,\n type KeyboardEvent,\n useCallback,\n useImperativeHandle,\n useLayoutEffect,\n useRef,\n} from 'react';\nimport { SendIcon } from 'lucide-react';\nimport { Button } from '../../ui/button';\nimport { cn } from '../../core/utils';\n\nexport interface PromptInputProps {\n /** Current input value */\n value: string;\n /** Value change handler */\n onChange: (value: string) => void;\n /** Submit handler */\n onSubmit: () => void;\n /** Placeholder text */\n placeholder?: string;\n /** Disable input */\n disabled?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Auto focus */\n autoFocus?: boolean;\n /** Show send button */\n showSendButton?: boolean;\n /** Custom send button content */\n sendButtonContent?: React.ReactNode;\n /** Additional actions (left side) */\n leftActions?: React.ReactNode;\n /** Additional actions (right side, before send) */\n rightActions?: React.ReactNode;\n /** Container class */\n className?: string;\n /** Input class */\n inputClassName?: string;\n /** Variant styling */\n variant?: 'default' | 'minimal' | 'bordered';\n /**\n * Minimum number of visible text rows. Default 1 (grows as the user types).\n */\n minRows?: number;\n /**\n * Maximum number of visible text rows before the textarea scrolls internally\n * instead of growing further. Default 6.\n */\n maxRows?: number;\n}\n\n// Approximate line height (px) used to cap auto-grow at `maxRows`. Matches the\n// `text-sm` / `leading-5` rhythm used below.\nconst LINE_HEIGHT_PX = 20;\nconst VERTICAL_PADDING_PX = 8; // py-1 top+bottom\n\n/**\n * Conversational prompt input.\n *\n * Behaves like a standard AI chat input: it is a multi-line, auto-growing\n * textarea where **Enter submits** and **Shift+Enter inserts a newline**. The\n * textarea grows with content up to `maxRows`, then scrolls internally.\n *\n * (Previously this was a single-line `<input>`, which made Shift+Enter a no-op\n * and prevented multi-line messages entirely.)\n */\nexport const PromptInput = forwardRef<HTMLTextAreaElement, PromptInputProps>(\n (\n {\n value,\n onChange,\n onSubmit,\n placeholder = 'Type a message...',\n disabled = false,\n loading = false,\n autoFocus = false,\n showSendButton = true,\n sendButtonContent,\n leftActions,\n rightActions,\n className,\n inputClassName,\n variant = 'default',\n minRows = 1,\n maxRows = 6,\n },\n ref\n ) => {\n const textareaRef = useRef<HTMLTextAreaElement | null>(null);\n useImperativeHandle(ref, () => textareaRef.current as HTMLTextAreaElement);\n\n // Auto-grow: reset height, then size to content, capped at maxRows.\n const resize = useCallback(() => {\n const el = textareaRef.current;\n if (!el) return;\n el.style.height = 'auto';\n const maxHeight = maxRows * LINE_HEIGHT_PX + VERTICAL_PADDING_PX;\n const minHeight = minRows * LINE_HEIGHT_PX + VERTICAL_PADDING_PX;\n const next = Math.min(Math.max(el.scrollHeight, minHeight), maxHeight);\n el.style.height = `${next}px`;\n el.style.overflowY = el.scrollHeight > maxHeight ? 'auto' : 'hidden';\n }, [maxRows, minRows]);\n\n useLayoutEffect(() => {\n resize();\n }, [value, resize]);\n\n const handleSubmit = useCallback(\n (e?: FormEvent) => {\n e?.preventDefault();\n if (!value.trim() || disabled || loading) return;\n onSubmit();\n },\n [value, disabled, loading, onSubmit]\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLTextAreaElement>) => {\n // Enter submits; Shift+Enter inserts a newline (default behavior).\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSubmit();\n }\n },\n [handleSubmit]\n );\n\n const variantStyles = {\n default: 'border-t px-3 py-2.5',\n minimal: 'px-3 py-2',\n bordered: 'border rounded-lg px-3 py-2.5',\n };\n\n const inputVariantStyles = {\n default: 'bg-transparent',\n minimal: 'bg-transparent px-0',\n bordered: 'bg-muted/50',\n };\n\n return (\n <form onSubmit={handleSubmit} className={cn(variantStyles[variant], className)}>\n <div className=\"flex items-end gap-2\">\n {leftActions}\n\n <textarea\n ref={textareaRef}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n disabled={disabled || loading}\n autoFocus={autoFocus}\n rows={minRows}\n className={cn(\n 'flex-1 resize-none border-0 px-0 py-1 text-sm leading-5 shadow-none',\n 'placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-0',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n inputVariantStyles[variant],\n inputClassName\n )}\n />\n\n {rightActions}\n\n {showSendButton && (\n <Button\n type=\"submit\"\n size=\"sm\"\n variant={variant === 'minimal' ? 'ghost' : 'outline'}\n disabled={!value.trim() || disabled || loading}\n className=\"size-8 shrink-0 p-0\"\n >\n {sendButtonContent || <SendIcon className=\"size-4\" />}\n </Button>\n )}\n </div>\n </form>\n );\n }\n);\n\nPromptInput.displayName = 'PromptInput';\n","import * as React from 'react';\nimport { cn } from '../core/utils';\n\nconst Input = React.forwardRef<HTMLInputElement, React.ComponentProps<'input'>>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nInput.displayName = 'Input';\n\nexport { Input };\n","'use client';\n\nimport { type FormEvent, forwardRef, useCallback, useRef, type KeyboardEvent } from 'react';\nimport {\n SendIcon,\n PaperclipIcon,\n ImageIcon,\n MicIcon,\n XIcon,\n FileTextIcon,\n} from 'lucide-react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { Input } from '../../ui/input';\nimport { Button } from '../../ui/button';\nimport { cn, formatBytes } from '../../core/utils';\nimport type { Attachment, AttachmentType } from '../../core/types';\n\nexport interface MultimodalInputProps {\n /** Current input value */\n value: string;\n /** Value change handler */\n onChange: (value: string) => void;\n /** Submit handler */\n onSubmit: () => void;\n /** Current attachments */\n attachments?: Attachment[];\n /** Add attachment handler */\n onAddAttachment?: (file: File) => void;\n /** Remove attachment handler */\n onRemoveAttachment?: (id: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Disable input */\n disabled?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Show file button */\n showFileButton?: boolean;\n /** Show image button */\n showImageButton?: boolean;\n /** Show mic button */\n showMicButton?: boolean;\n /** Accepted file types */\n acceptedFileTypes?: string;\n /** Accepted image types */\n acceptedImageTypes?: string;\n /** Max file size in bytes */\n maxFileSize?: number;\n /** Container class */\n className?: string;\n}\n\nconst attachmentIcons: Record<AttachmentType, typeof FileTextIcon> = {\n image: ImageIcon,\n audio: MicIcon,\n video: FileTextIcon,\n document: FileTextIcon,\n file: PaperclipIcon,\n};\n\nexport const MultimodalInput = forwardRef<HTMLInputElement, MultimodalInputProps>(\n (\n {\n value,\n onChange,\n onSubmit,\n attachments = [],\n onAddAttachment,\n onRemoveAttachment,\n placeholder = 'Type a message or attach media...',\n disabled = false,\n loading = false,\n showFileButton = true,\n showImageButton = true,\n showMicButton = false,\n acceptedFileTypes = '.pdf,.doc,.docx,.txt,.csv,.xlsx',\n acceptedImageTypes = 'image/*',\n maxFileSize = 10 * 1024 * 1024, // 10MB\n className,\n },\n ref\n ) => {\n const fileInputRef = useRef<HTMLInputElement>(null);\n const imageInputRef = useRef<HTMLInputElement>(null);\n\n const handleSubmit = useCallback(\n (e: FormEvent) => {\n e.preventDefault();\n if ((!value.trim() && attachments.length === 0) || disabled || loading) return;\n onSubmit();\n },\n [value, attachments.length, disabled, loading, onSubmit]\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSubmit(e as unknown as FormEvent);\n }\n },\n [handleSubmit]\n );\n\n const handleFileChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files;\n if (!files || !onAddAttachment) return;\n\n Array.from(files).forEach((file) => {\n if (file.size <= maxFileSize) {\n onAddAttachment(file);\n }\n });\n\n // Reset input\n e.target.value = '';\n },\n [onAddAttachment, maxFileSize]\n );\n\n return (\n <div className={cn('border-t', className)}>\n {/* Attachment previews */}\n <AnimatePresence>\n {attachments.length > 0 && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n className=\"overflow-hidden border-b px-3 py-2\"\n >\n <div className=\"flex flex-wrap gap-2\">\n {attachments.map((attachment) => {\n const Icon = attachmentIcons[attachment.type];\n return (\n <motion.div\n key={attachment.id}\n initial={{ scale: 0.8, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0.8, opacity: 0 }}\n className=\"flex items-center gap-2 rounded-md border bg-muted/30 px-2 py-1.5\"\n >\n <div className=\"flex size-6 items-center justify-center rounded bg-muted\">\n <Icon className=\"size-3 text-muted-foreground\" />\n </div>\n <div className=\"min-w-0 max-w-[120px]\">\n <p className=\"truncate text-xs font-medium\">{attachment.name}</p>\n {attachment.size && (\n <p className=\"text-[10px] text-muted-foreground\">\n {formatBytes(attachment.size)}\n </p>\n )}\n </div>\n {onRemoveAttachment && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"size-5 p-0 text-muted-foreground hover:text-foreground\"\n onClick={() => onRemoveAttachment(attachment.id)}\n >\n <XIcon className=\"size-3\" />\n </Button>\n )}\n </motion.div>\n );\n })}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n\n {/* Input row */}\n <form onSubmit={handleSubmit} className=\"px-3 py-2.5\">\n <div className=\"flex items-center gap-2\">\n {/* Action buttons */}\n <div className=\"flex items-center gap-0.5\">\n {showFileButton && onAddAttachment && (\n <>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"size-8 p-0 text-muted-foreground hover:text-foreground\"\n onClick={() => fileInputRef.current?.click()}\n disabled={disabled || loading}\n >\n <PaperclipIcon className=\"size-4\" />\n </Button>\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={acceptedFileTypes}\n onChange={handleFileChange}\n className=\"hidden\"\n multiple\n />\n </>\n )}\n\n {showImageButton && onAddAttachment && (\n <>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"size-8 p-0 text-muted-foreground hover:text-foreground\"\n onClick={() => imageInputRef.current?.click()}\n disabled={disabled || loading}\n >\n <ImageIcon className=\"size-4\" />\n </Button>\n <input\n ref={imageInputRef}\n type=\"file\"\n accept={acceptedImageTypes}\n onChange={handleFileChange}\n className=\"hidden\"\n multiple\n />\n </>\n )}\n\n {showMicButton && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"size-8 p-0 text-muted-foreground hover:text-foreground\"\n disabled={disabled || loading}\n >\n <MicIcon className=\"size-4\" />\n </Button>\n )}\n </div>\n\n {/* Text input */}\n <Input\n ref={ref}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n disabled={disabled || loading}\n className=\"h-9 flex-1 border-0 bg-transparent shadow-none focus-visible:ring-0\"\n />\n\n {/* Send button */}\n <Button\n type=\"submit\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"size-8 shrink-0 p-0\"\n disabled={(!value.trim() && attachments.length === 0) || disabled || loading}\n >\n <SendIcon className=\"size-4\" />\n </Button>\n </div>\n </form>\n </div>\n );\n }\n);\n\nMultimodalInput.displayName = 'MultimodalInput';\n","'use client';\n\nimport { cn } from '../../core/utils';\nimport type { QuickReply } from '../../core/types';\n\nexport interface QuickRepliesProps {\n /** Available quick replies */\n replies: QuickReply[];\n /** Click handler */\n onSelect: (reply: QuickReply) => void;\n /** Disable interactions */\n disabled?: boolean;\n /** Container class */\n className?: string;\n /** Pill variant */\n variant?: 'default' | 'outline' | 'filled';\n /** Size */\n size?: 'sm' | 'md';\n}\n\nexport function QuickReplies({\n replies,\n onSelect,\n disabled = false,\n className,\n variant = 'outline',\n size = 'sm',\n}: QuickRepliesProps) {\n if (replies.length === 0) return null;\n\n const variantStyles = {\n default:\n 'border bg-muted/30 hover:bg-muted/60 hover:text-foreground text-muted-foreground',\n outline:\n 'border hover:bg-muted/50 hover:text-foreground text-muted-foreground',\n filled:\n 'bg-muted hover:bg-muted/80 text-foreground',\n };\n\n const sizeStyles = {\n sm: 'px-2.5 py-1 text-[10px]',\n md: 'px-3 py-1.5 text-xs',\n };\n\n return (\n <div className={cn('flex flex-wrap gap-1.5', className)}>\n {replies.map((reply) => (\n <button\n key={reply.id}\n type=\"button\"\n onClick={() => onSelect(reply)}\n disabled={disabled}\n className={cn(\n 'shrink-0 rounded-full transition-colors disabled:opacity-50 disabled:cursor-not-allowed',\n variantStyles[variant],\n sizeStyles[size]\n )}\n >\n {reply.label}\n </button>\n ))}\n </div>\n );\n}\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../core/utils';\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n {\n variants: {\n variant: {\n default: \"border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80\",\n secondary: \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive: \"border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80\",\n outline: \"text-foreground\",\n success: \"border-transparent bg-emerald-500/10 text-emerald-600 dark:text-emerald-400\",\n warning: \"border-transparent bg-amber-500/10 text-amber-600 dark:text-amber-400\",\n error: \"border-transparent bg-red-500/10 text-red-600 dark:text-red-400\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n );\n}\n\nexport { Badge, badgeVariants };\n","'use client';\n\nimport { useState, useCallback, useMemo } from 'react';\nimport { SearchIcon, XIcon } from 'lucide-react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { Input } from '../../ui/input';\nimport { Button } from '../../ui/button';\nimport { Badge } from '../../ui/badge';\nimport { cn } from '../../core/utils';\nimport type { PromptTemplate } from '../../core/types';\n\nexport interface TemplateSelectorProps {\n /** Available templates */\n templates: PromptTemplate[];\n /** Template selection handler */\n onSelect: (template: PromptTemplate, variables?: Record<string, string>) => void;\n /** Optional category filter */\n categories?: string[];\n /** Show search */\n showSearch?: boolean;\n /** Container class */\n className?: string;\n /** Variant */\n variant?: 'grid' | 'list';\n}\n\nexport function TemplateSelector({\n templates,\n onSelect,\n categories,\n showSearch = true,\n className,\n variant = 'grid',\n}: TemplateSelectorProps) {\n const [search, setSearch] = useState('');\n const [selectedCategory, setSelectedCategory] = useState<string | null>(null);\n const [selectedTemplate, setSelectedTemplate] = useState<PromptTemplate | null>(null);\n const [variables, setVariables] = useState<Record<string, string>>({});\n\n // Extract unique categories from templates\n const allCategories = useMemo(() => {\n if (categories) return categories;\n const cats = new Set<string>();\n templates.forEach((t) => {\n if (t.category) cats.add(t.category);\n });\n return Array.from(cats);\n }, [templates, categories]);\n\n // Filter templates\n const filteredTemplates = useMemo(() => {\n return templates.filter((t) => {\n const matchesSearch =\n !search ||\n t.title.toLowerCase().includes(search.toLowerCase()) ||\n t.description?.toLowerCase().includes(search.toLowerCase());\n const matchesCategory = !selectedCategory || t.category === selectedCategory;\n return matchesSearch && matchesCategory;\n });\n }, [templates, search, selectedCategory]);\n\n const handleTemplateClick = useCallback((template: PromptTemplate) => {\n if (template.variables && template.variables.length > 0) {\n setSelectedTemplate(template);\n // Initialize variables with defaults\n const defaults: Record<string, string> = {};\n template.variables.forEach((v) => {\n if (v.defaultValue) defaults[v.name] = v.defaultValue;\n });\n setVariables(defaults);\n } else {\n onSelect(template);\n }\n }, [onSelect]);\n\n const handleVariableSubmit = useCallback(() => {\n if (!selectedTemplate) return;\n onSelect(selectedTemplate, variables);\n setSelectedTemplate(null);\n setVariables({});\n }, [selectedTemplate, variables, onSelect]);\n\n const handleVariableCancel = useCallback(() => {\n setSelectedTemplate(null);\n setVariables({});\n }, []);\n\n return (\n <div className={cn('flex flex-col gap-3', className)}>\n {/* Search and categories */}\n <div className=\"flex flex-col gap-2\">\n {showSearch && (\n <div className=\"relative\">\n <SearchIcon className=\"absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search templates...\"\n className=\"h-8 pl-8 text-sm\"\n />\n {search && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"absolute right-1 top-1/2 size-6 -translate-y-1/2 p-0\"\n onClick={() => setSearch('')}\n >\n <XIcon className=\"size-3\" />\n </Button>\n )}\n </div>\n )}\n\n {allCategories.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5\">\n <Badge\n variant={selectedCategory === null ? 'default' : 'outline'}\n className=\"cursor-pointer text-[10px]\"\n onClick={() => setSelectedCategory(null)}\n >\n All\n </Badge>\n {allCategories.map((cat) => (\n <Badge\n key={cat}\n variant={selectedCategory === cat ? 'default' : 'outline'}\n className=\"cursor-pointer text-[10px]\"\n onClick={() => setSelectedCategory(cat)}\n >\n {cat}\n </Badge>\n ))}\n </div>\n )}\n </div>\n\n {/* Template grid/list */}\n <AnimatePresence mode=\"wait\">\n {selectedTemplate ? (\n // Variable input form\n <motion.div\n key=\"variables\"\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -8 }}\n className=\"flex flex-col gap-3 rounded-lg border bg-muted/30 p-3\"\n >\n <div>\n <h4 className=\"font-medium text-sm\">{selectedTemplate.title}</h4>\n {selectedTemplate.description && (\n <p className=\"mt-0.5 text-muted-foreground text-xs\">\n {selectedTemplate.description}\n </p>\n )}\n </div>\n\n {selectedTemplate.variables?.map((variable) => (\n <div key={variable.name} className=\"flex flex-col gap-1\">\n <label className=\"text-xs font-medium\">\n {variable.label}\n {variable.required && <span className=\"text-red-500 ml-0.5\">*</span>}\n </label>\n {variable.type === 'select' && variable.options ? (\n <select\n value={variables[variable.name] || ''}\n onChange={(e) =>\n setVariables((prev) => ({ ...prev, [variable.name]: e.target.value }))\n }\n className=\"h-8 rounded-md border bg-background px-2 text-sm\"\n >\n <option value=\"\">Select...</option>\n {variable.options.map((opt) => (\n <option key={opt} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n ) : (\n <Input\n type={variable.type === 'number' ? 'number' : 'text'}\n value={variables[variable.name] || ''}\n onChange={(e) =>\n setVariables((prev) => ({ ...prev, [variable.name]: e.target.value }))\n }\n placeholder={variable.placeholder}\n className=\"h-8 text-sm\"\n />\n )}\n </div>\n ))}\n\n <div className=\"flex items-center justify-end gap-2\">\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 text-xs\" onClick={handleVariableCancel}>\n Cancel\n </Button>\n <Button size=\"sm\" className=\"h-7 text-xs\" onClick={handleVariableSubmit}>\n Use Template\n </Button>\n </div>\n </motion.div>\n ) : (\n // Template list\n <motion.div\n key=\"list\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className={cn(\n variant === 'grid' ? 'grid grid-cols-2 gap-2' : 'flex flex-col gap-1'\n )}\n >\n {filteredTemplates.map((template, index) => (\n <motion.button\n key={template.id}\n type=\"button\"\n initial={{ opacity: 0, y: 4 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: index * 0.03 }}\n onClick={() => handleTemplateClick(template)}\n className={cn(\n 'text-left rounded-md border p-2.5 transition-colors hover:bg-muted/50',\n variant === 'list' && 'flex items-center gap-3'\n )}\n >\n <div className=\"min-w-0 flex-1\">\n <p className=\"font-medium text-xs truncate\">{template.title}</p>\n {template.description && variant === 'grid' && (\n <p className=\"mt-0.5 text-muted-foreground text-[10px] line-clamp-2\">\n {template.description}\n </p>\n )}\n </div>\n {template.category && variant === 'list' && (\n <Badge variant=\"secondary\" className=\"text-[10px] shrink-0\">\n {template.category}\n </Badge>\n )}\n </motion.button>\n ))}\n\n {filteredTemplates.length === 0 && (\n <p className=\"col-span-2 py-4 text-center text-muted-foreground text-xs\">\n No templates found\n </p>\n )}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n}\n","'use client';\n\nimport { forwardRef, useState, useCallback, useEffect, useRef } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { cn } from '../../core/utils';\nimport type { InlineSuggestion } from '../../core/types';\n\nexport interface InlineSuggestionsInputProps {\n /** Current input value */\n value: string;\n /** Value change handler */\n onChange: (value: string) => void;\n /** Get suggestions based on current input */\n getSuggestions?: (input: string) => InlineSuggestion[];\n /** Placeholder text */\n placeholder?: string;\n /** Disable input */\n disabled?: boolean;\n /** Container class */\n className?: string;\n /** Input class */\n inputClassName?: string;\n /** Debounce delay for suggestions */\n debounceMs?: number;\n}\n\nexport const InlineSuggestionsInput = forwardRef<HTMLInputElement, InlineSuggestionsInputProps>(\n (\n {\n value,\n onChange,\n getSuggestions,\n placeholder = 'Start typing...',\n disabled = false,\n className,\n inputClassName,\n debounceMs = 150,\n },\n ref\n ) => {\n const [suggestion, setSuggestion] = useState<InlineSuggestion | null>(null);\n const [showSuggestion, setShowSuggestion] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const combinedRef = (ref || inputRef) as React.RefObject<HTMLInputElement>;\n const debounceRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n // Update suggestions when value changes\n useEffect(() => {\n if (!getSuggestions || !value.trim()) {\n setSuggestion(null);\n setShowSuggestion(false);\n return;\n }\n\n // Clear previous timeout\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n\n // Debounce suggestion lookup\n debounceRef.current = setTimeout(() => {\n const suggestions = getSuggestions(value);\n if (suggestions.length > 0) {\n setSuggestion(suggestions[0]);\n setShowSuggestion(true);\n } else {\n setSuggestion(null);\n setShowSuggestion(false);\n }\n }, debounceMs);\n\n return () => {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n };\n }, [value, getSuggestions, debounceMs]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Tab' && suggestion && showSuggestion) {\n e.preventDefault();\n onChange(suggestion.completion);\n setShowSuggestion(false);\n } else if (e.key === 'Escape' && showSuggestion) {\n setShowSuggestion(false);\n }\n },\n [suggestion, showSuggestion, onChange]\n );\n\n // Calculate ghost text (the part that extends beyond current input)\n const ghostText =\n suggestion && showSuggestion && suggestion.completion.startsWith(value)\n ? suggestion.completion.slice(value.length)\n : '';\n\n return (\n <div className={cn('relative', className)}>\n {/* Ghost text layer */}\n <div className=\"pointer-events-none absolute inset-0 flex items-center overflow-hidden\">\n <span className=\"invisible whitespace-pre text-sm\">{value}</span>\n <AnimatePresence>\n {ghostText && (\n <motion.span\n initial={{ opacity: 0 }}\n animate={{ opacity: 0.4 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.15 }}\n className=\"whitespace-pre text-sm text-muted-foreground\"\n >\n {ghostText}\n </motion.span>\n )}\n </AnimatePresence>\n </div>\n\n {/* Actual input */}\n <input\n ref={combinedRef}\n type=\"text\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={handleKeyDown}\n onBlur={() => setShowSuggestion(false)}\n onFocus={() => {\n if (suggestion) setShowSuggestion(true);\n }}\n placeholder={placeholder}\n disabled={disabled}\n className={cn(\n 'w-full bg-transparent text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50',\n inputClassName\n )}\n />\n\n {/* Tab hint */}\n <AnimatePresence>\n {ghostText && (\n <motion.div\n initial={{ opacity: 0, y: 4 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: 4 }}\n className=\"absolute -bottom-5 left-0 flex items-center gap-1\"\n >\n <kbd className=\"rounded border bg-muted px-1 py-0.5 font-mono text-[9px] text-muted-foreground\">\n Tab\n </kbd>\n <span className=\"text-[10px] text-muted-foreground\">to accept</span>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n }\n);\n\nInlineSuggestionsInput.displayName = 'InlineSuggestionsInput';\n","'use client';\n\nimport { useCallback, useState, useRef, type DragEvent } from 'react';\nimport { UploadIcon, XIcon, FileIcon, ImageIcon, FileTextIcon } from 'lucide-react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { Button } from '../../ui/button';\nimport { cn, formatBytes, generateId } from '../../core/utils';\nimport type { Attachment, AttachmentType } from '../../core/types';\n\nexport interface FileDropZoneProps {\n /** Current files */\n files?: Attachment[];\n /** Add files handler */\n onAddFiles?: (files: Attachment[]) => void;\n /** Remove file handler */\n onRemoveFile?: (id: string) => void;\n /** Accepted file types (e.g., \"image/*,.pdf\") */\n accept?: string;\n /** Max file size in bytes */\n maxFileSize?: number;\n /** Max number of files */\n maxFiles?: number;\n /** Disable interactions */\n disabled?: boolean;\n /** Container class */\n className?: string;\n /** Variant */\n variant?: 'compact' | 'full';\n}\n\nfunction getAttachmentType(file: File): AttachmentType {\n if (file.type.startsWith('image/')) return 'image';\n if (file.type.startsWith('audio/')) return 'audio';\n if (file.type.startsWith('video/')) return 'video';\n if (file.type.includes('pdf') || file.type.includes('document')) return 'document';\n return 'file';\n}\n\nconst fileIcons: Record<AttachmentType, typeof FileIcon> = {\n image: ImageIcon,\n audio: FileIcon,\n video: FileIcon,\n document: FileTextIcon,\n file: FileIcon,\n};\n\nexport function FileDropZone({\n files = [],\n onAddFiles,\n onRemoveFile,\n accept,\n maxFileSize = 10 * 1024 * 1024, // 10MB\n maxFiles = 5,\n disabled = false,\n className,\n variant = 'full',\n}: FileDropZoneProps) {\n const [isDragOver, setIsDragOver] = useState(false);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const processFiles = useCallback(\n (fileList: FileList) => {\n if (!onAddFiles) return;\n\n const newAttachments: Attachment[] = [];\n const currentCount = files.length;\n const remainingSlots = maxFiles - currentCount;\n\n Array.from(fileList)\n .slice(0, remainingSlots)\n .forEach((file) => {\n if (file.size <= maxFileSize) {\n newAttachments.push({\n id: generateId('file'),\n type: getAttachmentType(file),\n name: file.name,\n size: file.size,\n sizeLabel: formatBytes(file.size),\n mimeType: file.type,\n url: URL.createObjectURL(file),\n });\n }\n });\n\n if (newAttachments.length > 0) {\n onAddFiles(newAttachments);\n }\n },\n [files.length, maxFiles, maxFileSize, onAddFiles]\n );\n\n const handleDragOver = useCallback((e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragOver(true);\n }, []);\n\n const handleDragLeave = useCallback((e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragOver(false);\n }, []);\n\n const handleDrop = useCallback(\n (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragOver(false);\n\n if (disabled) return;\n if (e.dataTransfer.files) {\n processFiles(e.dataTransfer.files);\n }\n },\n [disabled, processFiles]\n );\n\n const handleFileSelect = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.files) {\n processFiles(e.target.files);\n }\n e.target.value = '';\n },\n [processFiles]\n );\n\n const canAddMore = files.length < maxFiles;\n\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n {/* Drop zone */}\n {(variant === 'full' || files.length === 0) && (\n <div\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n onClick={() => !disabled && canAddMore && fileInputRef.current?.click()}\n className={cn(\n 'flex flex-col items-center justify-center gap-2 rounded-lg border-2 border-dashed p-4 transition-colors cursor-pointer',\n isDragOver && 'border-primary bg-primary/5',\n !isDragOver && 'border-muted-foreground/25 hover:border-muted-foreground/50',\n disabled && 'opacity-50 cursor-not-allowed',\n !canAddMore && 'opacity-50 cursor-not-allowed'\n )}\n >\n <UploadIcon className=\"size-6 text-muted-foreground\" />\n <div className=\"text-center\">\n <p className=\"text-sm font-medium\">\n {isDragOver ? 'Drop files here' : 'Drop files or click to upload'}\n </p>\n <p className=\"text-xs text-muted-foreground mt-0.5\">\n Max {formatBytes(maxFileSize)} per file, up to {maxFiles} files\n </p>\n </div>\n </div>\n )}\n\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={accept}\n onChange={handleFileSelect}\n className=\"hidden\"\n multiple={maxFiles > 1}\n disabled={disabled || !canAddMore}\n />\n\n {/* File list */}\n <AnimatePresence>\n {files.length > 0 && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n className=\"flex flex-col gap-1.5\"\n >\n {files.map((file) => {\n const Icon = fileIcons[file.type];\n return (\n <motion.div\n key={file.id}\n initial={{ opacity: 0, x: -8 }}\n animate={{ opacity: 1, x: 0 }}\n exit={{ opacity: 0, x: 8 }}\n className=\"flex items-center gap-2 rounded-md border bg-muted/30 px-2.5 py-2\"\n >\n <div className=\"flex size-8 shrink-0 items-center justify-center rounded bg-muted\">\n <Icon className=\"size-4 text-muted-foreground\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-sm font-medium\">{file.name}</p>\n <p className=\"text-xs text-muted-foreground\">\n {file.sizeLabel || (file.size ? formatBytes(file.size) : '')}\n </p>\n </div>\n {onRemoveFile && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"size-6 p-0 text-muted-foreground hover:text-foreground\"\n onClick={() => onRemoveFile(file.id)}\n disabled={disabled}\n >\n <XIcon className=\"size-3\" />\n </Button>\n )}\n </motion.div>\n );\n })}\n </motion.div>\n )}\n </AnimatePresence>\n\n {/* Add more button (compact variant) */}\n {variant === 'compact' && files.length > 0 && canAddMore && (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 text-xs\"\n onClick={() => fileInputRef.current?.click()}\n disabled={disabled}\n >\n <UploadIcon className=\"size-3 mr-1\" />\n Add more files\n </Button>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useMemo, useState } from 'react';\nimport { motion } from 'motion/react';\nimport { SearchIcon } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Badge } from '../../ui/badge';\n\nexport interface LibraryPrompt {\n id: string;\n title: string;\n prompt: string;\n description?: string;\n category?: string;\n tags?: string[];\n}\n\nexport interface PromptLibraryProps {\n prompts: LibraryPrompt[];\n /** Fired when a prompt is chosen. */\n onSelect?: (prompt: LibraryPrompt) => void;\n /** Enable the search box. */\n searchable?: boolean;\n /** Enable category filter chips. */\n filterByCategory?: boolean;\n className?: string;\n}\n\nexport function PromptLibrary({\n prompts,\n onSelect,\n searchable = true,\n filterByCategory = true,\n className,\n}: PromptLibraryProps) {\n const [query, setQuery] = useState('');\n const [activeCategory, setActiveCategory] = useState<string | null>(null);\n\n const categories = useMemo(() => {\n const set = new Set<string>();\n prompts.forEach((p) => p.category && set.add(p.category));\n return Array.from(set);\n }, [prompts]);\n\n const filtered = useMemo(() => {\n const q = query.trim().toLowerCase();\n return prompts.filter((p) => {\n const matchesCategory = !activeCategory || p.category === activeCategory;\n const matchesQuery =\n !q ||\n p.title.toLowerCase().includes(q) ||\n p.prompt.toLowerCase().includes(q) ||\n p.description?.toLowerCase().includes(q) ||\n p.tags?.some((t) => t.toLowerCase().includes(q));\n return matchesCategory && matchesQuery;\n });\n }, [prompts, query, activeCategory]);\n\n return (\n <div className={cn('flex flex-col rounded-lg border bg-card', className)}>\n {searchable && (\n <div className=\"flex items-center gap-2 border-b px-3 py-2\">\n <SearchIcon className=\"size-4 text-muted-foreground\" />\n <input\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder=\"Search prompts...\"\n className=\"flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground\"\n />\n </div>\n )}\n\n {filterByCategory && categories.length > 0 && (\n <div className=\"flex gap-1.5 overflow-x-auto border-b px-3 py-2\">\n <button\n type=\"button\"\n onClick={() => setActiveCategory(null)}\n className={cn(\n 'shrink-0 rounded-full px-2.5 py-1 text-xs transition-colors',\n activeCategory === null ? 'bg-foreground text-background' : 'bg-muted text-muted-foreground'\n )}\n >\n All\n </button>\n {categories.map((cat) => (\n <button\n key={cat}\n type=\"button\"\n onClick={() => setActiveCategory(cat)}\n className={cn(\n 'shrink-0 rounded-full px-2.5 py-1 text-xs transition-colors',\n activeCategory === cat ? 'bg-foreground text-background' : 'bg-muted text-muted-foreground'\n )}\n >\n {cat}\n </button>\n ))}\n </div>\n )}\n\n <div className=\"max-h-80 overflow-y-auto p-2\">\n {filtered.length === 0 ? (\n <p className=\"p-4 text-center text-sm text-muted-foreground\">No prompts found</p>\n ) : (\n <div className=\"space-y-1\">\n {filtered.map((prompt, index) => (\n <motion.button\n key={prompt.id}\n type=\"button\"\n initial={{ opacity: 0, y: 6 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: index * 0.03 }}\n onClick={() => onSelect?.(prompt)}\n className=\"flex w-full flex-col gap-1 rounded-md p-3 text-left transition-colors hover:bg-muted/40\"\n >\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium\">{prompt.title}</span>\n {prompt.category && (\n <Badge variant=\"secondary\" className=\"ml-auto text-[10px] font-normal\">\n {prompt.category}\n </Badge>\n )}\n </div>\n {prompt.description && (\n <p className=\"text-xs text-muted-foreground line-clamp-2\">{prompt.description}</p>\n )}\n </motion.button>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport default PromptLibrary;\n","'use client';\n\nimport { motion, AnimatePresence } from 'motion/react';\nimport { UserCircleIcon } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Badge } from '../../ui/badge';\nimport type { AgentPersona } from '../../core/types';\n\nexport interface PersonaSelectorProps {\n /** Available personas to choose from. */\n personas: AgentPersona[];\n /** Currently selected persona id (controlled). */\n selectedId?: string;\n /** Selection handler. */\n onSelect?: (persona: AgentPersona) => void;\n /** Show the selected persona's system prompt preview. */\n showSystemPrompt?: boolean;\n /** Render personas as a horizontal row instead of a list. */\n orientation?: 'vertical' | 'horizontal';\n /** Optional icon resolver for a persona (defaults to a user icon). */\n renderIcon?: (persona: AgentPersona) => React.ReactNode;\n className?: string;\n}\n\nexport function PersonaSelector({\n personas,\n selectedId,\n onSelect,\n showSystemPrompt = false,\n orientation = 'vertical',\n renderIcon,\n className,\n}: PersonaSelectorProps) {\n const selected = personas.find((p) => p.id === selectedId) ?? personas[0];\n\n return (\n <div className={cn('rounded-lg border bg-card', className)}>\n <div className=\"px-4 pt-4 pb-2\">\n <span className=\"text-xs font-medium text-muted-foreground\">Choose a persona</span>\n </div>\n <div\n className={cn(\n 'gap-1 px-3 pb-3',\n orientation === 'vertical' ? 'flex flex-col' : 'flex overflow-x-auto'\n )}\n >\n {personas.map((persona, index) => {\n const isSelected = selected?.id === persona.id;\n return (\n <motion.button\n key={persona.id}\n type=\"button\"\n initial={{ opacity: 0, x: -8 }}\n animate={{ opacity: 1, x: 0 }}\n transition={{ duration: 0.15, delay: index * 0.05 }}\n onClick={() => onSelect?.(persona)}\n className={cn(\n 'flex w-full flex-col gap-2 rounded-md p-3 text-left transition-colors',\n orientation === 'horizontal' && 'min-w-[200px]',\n isSelected ? 'bg-muted/60 ring-1 ring-foreground/10' : 'hover:bg-muted/30'\n )}\n >\n <div className=\"flex items-center gap-2\">\n <span className=\"flex size-6 items-center justify-center rounded-md bg-muted text-muted-foreground\">\n {renderIcon ? renderIcon(persona) : <UserCircleIcon className=\"size-3.5\" />}\n </span>\n <span className=\"text-sm font-medium\">{persona.name}</span>\n {isSelected && <span className=\"ml-auto size-1.5 rounded-full bg-emerald-500\" />}\n </div>\n <p className=\"text-[11px] leading-snug text-muted-foreground line-clamp-2\">\n {persona.description}\n </p>\n {persona.capabilities && persona.capabilities.length > 0 && (\n <div className=\"flex flex-wrap gap-1\">\n {persona.capabilities.map((cap) => (\n <Badge key={cap} variant=\"secondary\" className=\"h-4 px-1 text-[9px] font-normal\">\n {cap}\n </Badge>\n ))}\n </div>\n )}\n </motion.button>\n );\n })}\n </div>\n\n {showSystemPrompt && selected?.systemPrompt && (\n <div className=\"border-t px-4 py-3\">\n <span className=\"mb-1.5 block text-[10px] font-medium text-muted-foreground\">\n System prompt\n </span>\n <AnimatePresence mode=\"wait\">\n <motion.p\n key={selected.id}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.15 }}\n className=\"text-[11px] leading-snug text-muted-foreground line-clamp-3\"\n >\n {selected.systemPrompt}\n </motion.p>\n </AnimatePresence>\n </div>\n )}\n </div>\n );\n}\n\nexport default PersonaSelector;\n","'use client';\n\nimport * as React from 'react';\nimport * as AvatarPrimitive from '@radix-ui/react-avatar';\nimport { cn } from '../core/utils';\n\nconst Avatar = React.forwardRef<\n React.ComponentRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n \"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full\",\n className\n )}\n {...props}\n />\n));\nAvatar.displayName = AvatarPrimitive.Root.displayName;\n\nconst AvatarImage = React.forwardRef<\n React.ComponentRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn(\"aspect-square h-full w-full\", className)}\n {...props}\n />\n));\nAvatarImage.displayName = AvatarPrimitive.Image.displayName;\n\nconst AvatarFallback = React.forwardRef<\n React.ComponentRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n \"flex h-full w-full items-center justify-center rounded-full bg-muted\",\n className\n )}\n {...props}\n />\n));\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;\n\nexport { Avatar, AvatarImage, AvatarFallback };\n","'use client';\n\nimport { motion } from 'motion/react';\nimport { cn } from '../../core/utils';\nimport { Button } from '../../ui/button';\nimport { Badge } from '../../ui/badge';\nimport { Avatar, AvatarImage, AvatarFallback } from '../../ui/avatar';\nimport { getInitials } from '../../core/utils';\n\nexport interface EntityField {\n label: string;\n value: string;\n icon?: React.ReactNode;\n}\n\nexport interface EntityAction {\n id: string;\n label: string;\n icon?: React.ReactNode;\n variant?: 'default' | 'outline' | 'secondary' | 'ghost';\n onClick?: () => void;\n}\n\nexport interface EntityCardData {\n id: string;\n /** Primary title (name of the person/place/item). */\n title: string;\n /** Secondary line under the title. */\n subtitle?: string;\n /** Avatar/image URL. */\n imageUrl?: string;\n /** Short descriptive text. */\n description?: string;\n /** Tags/labels. */\n tags?: string[];\n /** Structured key/value fields. */\n fields?: EntityField[];\n /** Optional status badge. */\n status?: { label: string; tone?: 'neutral' | 'positive' | 'warning' | 'negative' };\n}\n\nexport interface EntityCardProps {\n entity: EntityCardData;\n /** Actions rendered in the card footer. */\n actions?: EntityAction[];\n /** Card click handler. */\n onClick?: (entity: EntityCardData) => void;\n /** Compact layout. */\n compact?: boolean;\n className?: string;\n}\n\nconst toneClasses: Record<string, string> = {\n neutral: 'bg-muted text-muted-foreground',\n positive: 'bg-emerald-500/10 text-emerald-600',\n warning: 'bg-amber-500/10 text-amber-600',\n negative: 'bg-red-500/10 text-red-600',\n};\n\nexport function EntityCard({ entity, actions, onClick, compact, className }: EntityCardProps) {\n return (\n <motion.div\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.2 }}\n onClick={onClick ? () => onClick(entity) : undefined}\n className={cn(\n 'rounded-lg border bg-card p-4',\n onClick && 'cursor-pointer transition-colors hover:bg-muted/30',\n className\n )}\n >\n <div className=\"flex items-start gap-3\">\n <Avatar className={cn(compact ? 'size-9' : 'size-11')}>\n {entity.imageUrl && <AvatarImage src={entity.imageUrl} alt={entity.title} />}\n <AvatarFallback>{getInitials(entity.title)}</AvatarFallback>\n </Avatar>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <h4 className=\"truncate font-medium text-sm\">{entity.title}</h4>\n {entity.status && (\n <Badge className={cn('text-[10px]', toneClasses[entity.status.tone ?? 'neutral'])}>\n {entity.status.label}\n </Badge>\n )}\n </div>\n {entity.subtitle && (\n <p className=\"truncate text-xs text-muted-foreground\">{entity.subtitle}</p>\n )}\n </div>\n </div>\n\n {entity.description && !compact && (\n <p className=\"mt-3 text-sm text-muted-foreground\">{entity.description}</p>\n )}\n\n {entity.fields && entity.fields.length > 0 && !compact && (\n <div className=\"mt-3 space-y-1.5\">\n {entity.fields.map((field) => (\n <div key={field.label} className=\"flex items-center gap-2 text-xs\">\n {field.icon && <span className=\"text-muted-foreground\">{field.icon}</span>}\n <span className=\"text-muted-foreground\">{field.label}:</span>\n <span className=\"font-medium\">{field.value}</span>\n </div>\n ))}\n </div>\n )}\n\n {entity.tags && entity.tags.length > 0 && (\n <div className=\"mt-3 flex flex-wrap gap-1\">\n {entity.tags.map((tag) => (\n <Badge key={tag} variant=\"secondary\" className=\"text-[10px] font-normal\">\n {tag}\n </Badge>\n ))}\n </div>\n )}\n\n {actions && actions.length > 0 && (\n <div className=\"mt-4 flex flex-wrap gap-2\">\n {actions.map((action) => (\n <Button\n key={action.id}\n size=\"sm\"\n variant={action.variant ?? 'outline'}\n className=\"h-7 gap-1.5 text-xs\"\n onClick={(e) => {\n e.stopPropagation();\n action.onClick?.();\n }}\n >\n {action.icon}\n {action.label}\n </Button>\n ))}\n </div>\n )}\n </motion.div>\n );\n}\n\nexport default EntityCard;\n","'use client';\n\nimport { motion } from 'motion/react';\nimport { CheckIcon } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Button } from '../../ui/button';\nimport { Badge } from '../../ui/badge';\n\nexport interface OptionCardItem {\n id: string;\n title: string;\n description?: string;\n imageUrl?: string;\n /** Optional headline value (price, score, rating, etc.). */\n value?: string;\n /** Highlight chips. */\n highlights?: string[];\n /** Mark as recommended/featured. */\n recommended?: boolean;\n /** Disable selection. */\n disabled?: boolean;\n}\n\nexport interface OptionCardsProps {\n options: OptionCardItem[];\n /** Selected option id(s). */\n selectedIds?: string[];\n /** Allow selecting more than one. */\n multiple?: boolean;\n /** Selection handler. */\n onSelect?: (id: string, selectedIds: string[]) => void;\n /** Label for the per-card action button. */\n actionLabel?: string;\n /** Per-card action handler (renders a button when provided). */\n onAction?: (option: OptionCardItem) => void;\n /** Layout columns. */\n columns?: 1 | 2 | 3;\n className?: string;\n}\n\nexport function OptionCards({\n options,\n selectedIds = [],\n multiple = false,\n onSelect,\n actionLabel,\n onAction,\n columns = 2,\n className,\n}: OptionCardsProps) {\n const gridCols = { 1: 'grid-cols-1', 2: 'grid-cols-1 sm:grid-cols-2', 3: 'grid-cols-1 sm:grid-cols-3' };\n\n const handleSelect = (id: string) => {\n let next: string[];\n if (multiple) {\n next = selectedIds.includes(id)\n ? selectedIds.filter((s) => s !== id)\n : [...selectedIds, id];\n } else {\n next = [id];\n }\n onSelect?.(id, next);\n };\n\n return (\n <div className={cn('grid gap-3', gridCols[columns], className)}>\n {options.map((option, index) => {\n const isSelected = selectedIds.includes(option.id);\n return (\n <motion.div\n key={option.id}\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: index * 0.05 }}\n onClick={() => !option.disabled && onSelect && handleSelect(option.id)}\n className={cn(\n 'relative flex flex-col rounded-lg border bg-card p-4 transition-colors',\n onSelect && !option.disabled && 'cursor-pointer hover:bg-muted/30',\n isSelected && 'border-foreground ring-1 ring-foreground/20',\n option.disabled && 'opacity-50'\n )}\n >\n {option.recommended && (\n <Badge className=\"absolute -top-2 left-3 bg-foreground text-background text-[10px]\">\n Recommended\n </Badge>\n )}\n {isSelected && (\n <span className=\"absolute right-3 top-3 flex size-5 items-center justify-center rounded-full bg-foreground text-background\">\n <CheckIcon className=\"size-3\" />\n </span>\n )}\n {option.imageUrl && (\n <img\n src={option.imageUrl}\n alt={option.title}\n className=\"mb-3 h-28 w-full rounded-md object-cover\"\n />\n )}\n <div className=\"flex items-start justify-between gap-2\">\n <h4 className=\"font-medium text-sm\">{option.title}</h4>\n {option.value && <span className=\"font-semibold text-sm\">{option.value}</span>}\n </div>\n {option.description && (\n <p className=\"mt-1 text-xs text-muted-foreground\">{option.description}</p>\n )}\n {option.highlights && option.highlights.length > 0 && (\n <div className=\"mt-2 flex flex-wrap gap-1\">\n {option.highlights.map((h) => (\n <Badge key={h} variant=\"secondary\" className=\"text-[10px] font-normal\">\n {h}\n </Badge>\n ))}\n </div>\n )}\n {onAction && actionLabel && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"mt-3 h-7 text-xs\"\n disabled={option.disabled}\n onClick={(e) => {\n e.stopPropagation();\n onAction(option);\n }}\n >\n {actionLabel}\n </Button>\n )}\n </motion.div>\n );\n })}\n </div>\n );\n}\n\nexport default OptionCards;\n","'use client';\n\nimport { cn } from '../../core/utils';\n\nexport type SettingControlType = 'toggle' | 'select' | 'radio';\n\nexport interface SettingControl {\n id: string;\n label: string;\n description?: string;\n type: SettingControlType;\n /** Current value: boolean for toggle, string for select/radio. */\n value: boolean | string;\n /** Options for select/radio. */\n options?: Array<{ label: string; value: string }>;\n disabled?: boolean;\n}\n\nexport interface SettingsGroup {\n id: string;\n title?: string;\n description?: string;\n controls: SettingControl[];\n}\n\nexport interface SettingsPanelProps {\n groups: SettingsGroup[];\n /** Change handler: emits the control id and its new value. */\n onChange?: (controlId: string, value: boolean | string) => void;\n className?: string;\n}\n\nfunction Toggle({\n checked,\n disabled,\n onChange,\n}: {\n checked: boolean;\n disabled?: boolean;\n onChange: () => void;\n}) {\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n disabled={disabled}\n onClick={onChange}\n className={cn(\n 'relative inline-flex h-5 w-9 shrink-0 items-center rounded-full transition-colors disabled:opacity-50',\n checked ? 'bg-foreground' : 'bg-muted-foreground/30'\n )}\n >\n <span\n className={cn(\n 'inline-block size-4 rounded-full bg-background shadow transition-transform',\n checked ? 'translate-x-4' : 'translate-x-0.5'\n )}\n />\n </button>\n );\n}\n\nexport function SettingsPanel({ groups, onChange, className }: SettingsPanelProps) {\n return (\n <div className={cn('rounded-lg border bg-card divide-y', className)}>\n {groups.map((group) => (\n <div key={group.id} className=\"p-4\">\n {group.title && <h4 className=\"font-medium text-sm\">{group.title}</h4>}\n {group.description && (\n <p className=\"mt-0.5 text-xs text-muted-foreground\">{group.description}</p>\n )}\n <div className=\"mt-3 space-y-3\">\n {group.controls.map((control) => (\n <div key={control.id} className=\"flex items-center justify-between gap-4\">\n <div className=\"min-w-0\">\n <p className=\"text-sm\">{control.label}</p>\n {control.description && (\n <p className=\"text-xs text-muted-foreground\">{control.description}</p>\n )}\n </div>\n {control.type === 'toggle' && (\n <Toggle\n checked={Boolean(control.value)}\n disabled={control.disabled}\n onChange={() => onChange?.(control.id, !control.value)}\n />\n )}\n {(control.type === 'select' || control.type === 'radio') && control.options && (\n <select\n value={String(control.value)}\n disabled={control.disabled}\n onChange={(e) => onChange?.(control.id, e.target.value)}\n className=\"rounded-md border bg-background px-2 py-1 text-xs focus:outline-none focus:ring-1 focus:ring-ring disabled:opacity-50\"\n >\n {control.options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n )}\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n}\n\nexport default SettingsPanel;\n","'use client';\n\nimport { motion } from 'motion/react';\nimport {\n ArrowRightIcon,\n Loader2Icon,\n CheckCircle2Icon,\n SparklesIcon,\n} from 'lucide-react';\nimport { cn, getInitials } from '../../core/utils';\nimport { Button } from '../../ui/button';\nimport { Avatar, AvatarImage, AvatarFallback } from '../../ui/avatar';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\n/**\n * Lifecycle of an agent-to-agent handoff.\n * - 'connecting' → the target agent is being brought online / routed to.\n * - 'handed-off' → control has transferred to the target agent.\n * - 'active' → the target agent is now actively handling the request.\n */\nexport type HandoffStatus = 'connecting' | 'handed-off' | 'active';\n\n/** Visual presentation of a handoff. */\nexport type HandoffVariant =\n /** Simple A → B transition. */\n | 'direct'\n /** A → specialist B, foregrounding the routing reason. */\n | 'routing'\n /** Triage: route a request to one of several candidate agents. */\n | 'triage';\n\n/** A single agent participating in a handoff. Fully data-driven. */\nexport interface HandoffAgent {\n id: string;\n /** Display name. */\n name: string;\n /** Role / specialty line (e.g. \"Project Management\"). */\n specialty?: string;\n /** Avatar/thumbnail image URL. */\n avatarUrl?: string;\n}\n\n/** A candidate target in a triage handoff, with a match signal. */\nexport interface HandoffCandidate extends HandoffAgent {\n /** Why this candidate matches the request. */\n reason?: string;\n /** Optional 0–100 match/confidence used to mark + sort the selected one. */\n match?: number;\n /** Marks the candidate the request is being routed to. */\n selected?: boolean;\n}\n\nexport interface HandoffAction {\n id: string;\n label: string;\n variant?: 'primary' | 'secondary';\n onClick?: () => void;\n}\n\nexport interface AgentHandoffProps {\n /** Layout/semantics of the handoff. Defaults to 'direct'. */\n variant?: HandoffVariant;\n /** The agent handing the request off. */\n from: HandoffAgent;\n /**\n * The agent receiving the request. Required for 'direct'/'routing'. For\n * 'triage', omit and supply `candidates` instead (the selected candidate is\n * treated as the target).\n */\n to?: HandoffAgent;\n /** Candidate agents for a 'triage' handoff. */\n candidates?: HandoffCandidate[];\n /** Short reason/context line for the handoff. */\n reason?: string;\n /** Current handoff status. Defaults to 'connecting'. */\n status?: HandoffStatus;\n /** Optional action buttons (e.g. accept/continue). */\n actions?: HandoffAction[];\n className?: string;\n}\n\n// ============================================================================\n// HELPERS\n// ============================================================================\n\nconst STATUS_META: Record<\n HandoffStatus,\n { label: string; dotClass: string; textClass: string }\n> = {\n connecting: { label: 'Connecting…', dotClass: 'bg-amber-500 animate-pulse', textClass: 'text-amber-600' },\n 'handed-off': { label: 'Handed off', dotClass: 'bg-sky-500', textClass: 'text-sky-600' },\n active: { label: 'Active', dotClass: 'bg-emerald-500', textClass: 'text-emerald-600' },\n};\n\nfunction AgentBadge({\n agent,\n size = 'md',\n muted = false,\n}: {\n agent: HandoffAgent;\n size?: 'sm' | 'md';\n muted?: boolean;\n}) {\n const avatarSize = size === 'sm' ? 'size-8' : 'size-11';\n return (\n <div className={cn('flex min-w-0 flex-col items-center gap-1.5 text-center', muted && 'opacity-60')}>\n <Avatar className={avatarSize}>\n {agent.avatarUrl && <AvatarImage src={agent.avatarUrl} alt={agent.name} />}\n <AvatarFallback className=\"text-xs font-medium\">{getInitials(agent.name)}</AvatarFallback>\n </Avatar>\n <div className=\"min-w-0\">\n <p className=\"truncate text-xs font-medium\">{agent.name}</p>\n {agent.specialty && (\n <p className=\"truncate text-[10px] text-muted-foreground\">{agent.specialty}</p>\n )}\n </div>\n </div>\n );\n}\n\nfunction TransitionIcon({ status }: { status: HandoffStatus }) {\n return (\n <div className=\"flex flex-col items-center gap-1 text-muted-foreground\">\n {status === 'connecting' ? (\n <Loader2Icon className=\"size-5 animate-spin\" />\n ) : status === 'active' ? (\n <CheckCircle2Icon className=\"size-5 text-emerald-500\" />\n ) : (\n <ArrowRightIcon className=\"size-5\" />\n )}\n </div>\n );\n}\n\nfunction StatusPill({ status }: { status: HandoffStatus }) {\n const meta = STATUS_META[status];\n return (\n <span className={cn('flex items-center gap-1.5 text-xs font-medium', meta.textClass)}>\n <span className={cn('size-1.5 rounded-full', meta.dotClass)} />\n {meta.label}\n </span>\n );\n}\n\nfunction ActionRow({ actions }: { actions: HandoffAction[] }) {\n return (\n <div className=\"mt-4 flex flex-wrap justify-center gap-2\">\n {actions.map((action) => (\n <Button\n key={action.id}\n size=\"sm\"\n variant={action.variant === 'secondary' ? 'outline' : 'default'}\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ))}\n </div>\n );\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\n/**\n * AgentHandoff visualizes a handoff between specialized AI agents based on\n * request type (onboarding / routing). It supports several variants — a direct\n * A→B transition, a \"routing to specialist\" with a reason, and a multi-agent\n * triage that routes a request to one of several candidates. Everything is\n * driven by typed props: the component hardcodes no names, specialties, or\n * images.\n */\nexport function AgentHandoff({\n variant = 'direct',\n from,\n to,\n candidates = [],\n reason,\n status = 'connecting',\n actions,\n className,\n}: AgentHandoffProps) {\n // For triage, the selected candidate (or highest match) is the effective target.\n const triageTarget =\n variant === 'triage'\n ? candidates.find((c) => c.selected) ??\n [...candidates].sort((a, b) => (b.match ?? 0) - (a.match ?? 0))[0]\n : undefined;\n const target = to ?? triageTarget;\n const effectiveReason = reason ?? triageTarget?.reason;\n\n return (\n <motion.div\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n className={cn('rounded-xl border bg-card p-4', className)}\n >\n {/* Header: routing intent + status */}\n <div className=\"mb-3 flex items-center justify-between gap-2\">\n <span className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <SparklesIcon className=\"size-3.5\" />\n {variant === 'triage'\n ? 'Routing request'\n : variant === 'routing'\n ? 'Routing to specialist'\n : 'Agent handoff'}\n </span>\n <StatusPill status={status} />\n </div>\n\n {/* Transition */}\n {variant === 'triage' ? (\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex items-center justify-center gap-3\">\n <AgentBadge agent={from} />\n <TransitionIcon status={status} />\n {target ? (\n <AgentBadge agent={target} />\n ) : (\n <div className=\"text-xs text-muted-foreground\">Selecting…</div>\n )}\n </div>\n\n {/* Candidate list */}\n <div className=\"mt-1 space-y-1.5 border-t pt-3\">\n {candidates.map((candidate) => {\n const isSelected = target?.id === candidate.id;\n return (\n <div\n key={candidate.id}\n className={cn(\n 'flex items-center gap-3 rounded-lg border px-3 py-2 transition-colors',\n isSelected ? 'border-foreground/30 bg-muted/60' : 'border-transparent bg-muted/20'\n )}\n >\n <Avatar className=\"size-7\">\n {candidate.avatarUrl && <AvatarImage src={candidate.avatarUrl} alt={candidate.name} />}\n <AvatarFallback className=\"text-[10px] font-medium\">\n {getInitials(candidate.name)}\n </AvatarFallback>\n </Avatar>\n <div className=\"min-w-0 flex-1\">\n <p className=\"flex items-center gap-1.5 truncate text-xs font-medium\">\n {candidate.name}\n {candidate.specialty && (\n <span className=\"font-normal text-muted-foreground\">· {candidate.specialty}</span>\n )}\n </p>\n {candidate.reason && (\n <p className=\"truncate text-[10px] text-muted-foreground\">{candidate.reason}</p>\n )}\n </div>\n {candidate.match !== undefined && (\n <span\n className={cn(\n 'shrink-0 text-xs tabular-nums',\n isSelected ? 'font-medium text-foreground' : 'text-muted-foreground'\n )}\n >\n {candidate.match}%\n </span>\n )}\n </div>\n );\n })}\n </div>\n </div>\n ) : (\n <div className=\"flex items-center justify-center gap-4\">\n <AgentBadge agent={from} muted={status !== 'connecting'} />\n <TransitionIcon status={status} />\n {target && <AgentBadge agent={target} />}\n </div>\n )}\n\n {/* Reason / context */}\n {effectiveReason && (\n <p className=\"mt-3 rounded-lg bg-muted/40 px-3 py-2 text-center text-xs text-muted-foreground\">\n {effectiveReason}\n </p>\n )}\n\n {/* Actions */}\n {actions && actions.length > 0 && <ActionRow actions={actions} />}\n </motion.div>\n );\n}\n\nexport default AgentHandoff;\n","'use client';\n\nimport { motion } from 'motion/react';\nimport { BookmarkIcon } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Button } from '../../ui/button';\nimport { Badge } from '../../ui/badge';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface ListingField {\n /** Optional leading icon. */\n icon?: React.ReactNode;\n /** Field value (e.g. \"Remote\", \"$120/hr\", \"2 days ago\"). */\n value: string;\n}\n\nexport interface ListingAction {\n id: string;\n label: string;\n variant?: 'default' | 'outline' | 'secondary' | 'ghost';\n /** Stretch to fill available width. */\n fill?: boolean;\n onClick?: () => void;\n}\n\nexport interface Listing {\n id: string;\n /** Primary heading. */\n title: string;\n /** Secondary heading (source/organization/author). */\n subtitle?: string;\n /** Body description. */\n description?: string;\n /** Inline meta fields (location, value, date, etc.). */\n fields?: ListingField[];\n /** Tag chips. */\n tags?: string[];\n /** Per-card actions. */\n actions?: ListingAction[];\n}\n\nexport interface ListingFeedProps {\n listings: Listing[];\n /** Set of bookmarked/saved ids (controlled). */\n savedIds?: string[];\n /** Toggle handler for the bookmark affordance. Hides the icon when omitted. */\n onToggleSaved?: (id: string) => void;\n /** Click handler for the whole card. */\n onSelect?: (listing: Listing) => void;\n className?: string;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function ListingFeed({\n listings,\n savedIds = [],\n onToggleSaved,\n onSelect,\n className,\n}: ListingFeedProps) {\n return (\n <div className={cn('grid gap-3', className)}>\n {listings.map((listing, index) => {\n const isSaved = savedIds.includes(listing.id);\n return (\n <motion.div\n key={listing.id}\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: index * 0.05 }}\n onClick={onSelect ? () => onSelect(listing) : undefined}\n className={cn(\n 'rounded-lg border bg-card p-4',\n onSelect && 'cursor-pointer transition-colors hover:bg-muted/30'\n )}\n >\n <div className=\"space-y-3\">\n {/* Header */}\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"min-w-0 flex-1\">\n <h4 className=\"text-sm font-medium\">{listing.title}</h4>\n {listing.subtitle && (\n <p className=\"mt-1 text-sm text-muted-foreground\">{listing.subtitle}</p>\n )}\n </div>\n {onToggleSaved && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 shrink-0\"\n onClick={(e) => {\n e.stopPropagation();\n onToggleSaved(listing.id);\n }}\n >\n <BookmarkIcon\n className={cn('size-4', isSaved && 'fill-foreground text-foreground')}\n />\n </Button>\n )}\n </div>\n\n {/* Meta fields */}\n {listing.fields && listing.fields.length > 0 && (\n <div className=\"flex flex-wrap items-center gap-x-2 gap-y-1 text-xs text-muted-foreground\">\n {listing.fields.map((field, i) => (\n <span key={i} className=\"flex items-center gap-1\">\n {field.icon}\n {field.value}\n </span>\n ))}\n </div>\n )}\n\n {/* Description */}\n {listing.description && (\n <p className=\"text-sm text-muted-foreground\">{listing.description}</p>\n )}\n\n {/* Tags */}\n {listing.tags && listing.tags.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5\">\n {listing.tags.map((tag) => (\n <Badge key={tag} variant=\"outline\" className=\"text-xs\">\n {tag}\n </Badge>\n ))}\n </div>\n )}\n\n {/* Actions */}\n {listing.actions && listing.actions.length > 0 && (\n <div className=\"flex gap-2\">\n {listing.actions.map((action) => (\n <Button\n key={action.id}\n variant={action.variant ?? 'outline'}\n size=\"sm\"\n className={cn('text-xs', action.fill && 'flex-1')}\n onClick={(e) => {\n e.stopPropagation();\n action.onClick?.();\n }}\n >\n {action.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n </motion.div>\n );\n })}\n </div>\n );\n}\n\nexport default ListingFeed;\n","'use client';\n\nimport { motion } from 'motion/react';\nimport { cn } from '../../core/utils';\nimport { Button } from '../../ui/button';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport type ControlTileType = 'toggle' | 'slider' | 'status' | 'action';\n\nexport interface ControlTile {\n id: string;\n label: string;\n type: ControlTileType;\n /** Optional leading icon. */\n icon?: React.ReactNode;\n /** Grouping key (rendered as a section header). */\n group?: string;\n /** toggle: on/off state. */\n on?: boolean;\n /** slider: current numeric value. */\n value?: number;\n /** slider: bounds + step. */\n min?: number;\n max?: number;\n step?: number;\n /** slider: unit suffix shown next to the value (e.g. \"%\", \"°\"). */\n unit?: string;\n /** status: free-form descriptor shown under the label. */\n statusLabel?: string;\n /** status tone -> color. */\n statusTone?: 'neutral' | 'positive' | 'warning' | 'negative';\n /** action: button label. */\n actionLabel?: string;\n /** Disable the tile. */\n disabled?: boolean;\n}\n\nexport interface ControlGridProps {\n tiles: ControlTile[];\n /** Number of columns. */\n columns?: 1 | 2 | 3;\n /** Toggle handler (type: toggle). */\n onToggle?: (id: string, next: boolean) => void;\n /** Slider change handler (type: slider). */\n onValueChange?: (id: string, value: number) => void;\n /** Action handler (type: action). */\n onAction?: (id: string) => void;\n className?: string;\n}\n\nconst toneClasses: Record<string, string> = {\n neutral: 'text-muted-foreground',\n positive: 'text-emerald-600',\n warning: 'text-amber-600',\n negative: 'text-red-600',\n};\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nfunction Toggle({\n on,\n disabled,\n onChange,\n}: {\n on: boolean;\n disabled?: boolean;\n onChange: () => void;\n}) {\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={on}\n disabled={disabled}\n onClick={(e) => {\n e.stopPropagation();\n onChange();\n }}\n className={cn(\n 'relative inline-flex h-5 w-9 shrink-0 items-center rounded-full transition-colors disabled:opacity-50',\n on ? 'bg-foreground' : 'bg-muted-foreground/30'\n )}\n >\n <motion.span\n layout\n transition={{ type: 'spring', stiffness: 500, damping: 30 }}\n className={cn(\n 'inline-block size-4 rounded-full bg-background shadow-sm',\n on ? 'translate-x-4' : 'translate-x-0.5'\n )}\n />\n </button>\n );\n}\n\nexport function ControlGrid({\n tiles,\n columns = 2,\n onToggle,\n onValueChange,\n onAction,\n className,\n}: ControlGridProps) {\n const gridCols = { 1: 'grid-cols-1', 2: 'grid-cols-1 sm:grid-cols-2', 3: 'grid-cols-1 sm:grid-cols-3' };\n\n // Preserve order while collecting groups.\n const groups: string[] = [];\n for (const tile of tiles) {\n const g = tile.group ?? '';\n if (!groups.includes(g)) groups.push(g);\n }\n\n const renderTile = (tile: ControlTile, index: number) => {\n const active = tile.type === 'toggle' ? !!tile.on : true;\n return (\n <motion.div\n key={tile.id}\n initial={{ opacity: 0, y: 6 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.15, delay: index * 0.03 }}\n className={cn(\n 'flex flex-col gap-2 rounded-lg border bg-card p-3',\n tile.disabled && 'opacity-50'\n )}\n >\n <div className=\"flex items-start gap-3\">\n {tile.icon && (\n <div\n className={cn(\n 'flex size-8 shrink-0 items-center justify-center rounded-md',\n active ? 'bg-foreground/10 text-foreground' : 'bg-muted/50 text-muted-foreground/50'\n )}\n >\n {tile.icon}\n </div>\n )}\n <div className=\"min-w-0 flex-1\">\n <span className={cn('block text-sm', active ? 'font-medium' : 'text-muted-foreground')}>\n {tile.label}\n </span>\n {tile.type === 'status' && tile.statusLabel && (\n <span className={cn('text-xs', toneClasses[tile.statusTone ?? 'neutral'])}>\n {tile.statusLabel}\n </span>\n )}\n {tile.type === 'slider' && tile.value !== undefined && (\n <span className=\"text-xs text-muted-foreground tabular-nums\">\n {tile.value}\n {tile.unit}\n </span>\n )}\n </div>\n\n {tile.type === 'toggle' && (\n <Toggle\n on={!!tile.on}\n disabled={tile.disabled}\n onChange={() => onToggle?.(tile.id, !tile.on)}\n />\n )}\n {tile.type === 'status' && (\n <span\n className={cn(\n 'mt-1.5 size-2 shrink-0 rounded-full',\n tile.statusTone === 'positive'\n ? 'bg-emerald-500'\n : tile.statusTone === 'warning'\n ? 'bg-amber-500'\n : tile.statusTone === 'negative'\n ? 'bg-red-500'\n : 'bg-muted-foreground/40'\n )}\n />\n )}\n </div>\n\n {tile.type === 'slider' && (\n <input\n type=\"range\"\n min={tile.min ?? 0}\n max={tile.max ?? 100}\n step={tile.step ?? 1}\n value={tile.value ?? 0}\n disabled={tile.disabled}\n onChange={(e) => onValueChange?.(tile.id, Number(e.target.value))}\n className=\"h-1.5 w-full cursor-pointer appearance-none rounded-full bg-muted accent-foreground\"\n />\n )}\n\n {tile.type === 'action' && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={tile.disabled}\n className=\"h-7 text-xs\"\n onClick={() => onAction?.(tile.id)}\n >\n {tile.actionLabel ?? 'Run'}\n </Button>\n )}\n </motion.div>\n );\n };\n\n const hasGroups = groups.some((g) => g !== '');\n\n if (!hasGroups) {\n return (\n <div className={cn('grid gap-3', gridCols[columns], className)}>\n {tiles.map(renderTile)}\n </div>\n );\n }\n\n return (\n <div className={cn('space-y-4', className)}>\n {groups.map((group) => {\n const groupTiles = tiles.filter((t) => (t.group ?? '') === group);\n return (\n <div key={group || 'ungrouped'} className=\"space-y-2\">\n {group && (\n <span className=\"block font-medium text-muted-foreground text-xs\">{group}</span>\n )}\n <div className={cn('grid gap-3', gridCols[columns])}>{groupTiles.map(renderTile)}</div>\n </div>\n );\n })}\n </div>\n );\n}\n\nexport default ControlGrid;\n","'use client';\n\nimport { motion } from 'motion/react';\nimport { LightbulbIcon, AlertTriangleIcon, CheckCircle2Icon, InfoIcon } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Button } from '../../ui/button';\nimport { Badge } from '../../ui/badge';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport type RecommendationTone = 'suggestion' | 'caution' | 'positive' | 'info';\n\nexport interface RecommendationAction {\n id: string;\n label: string;\n variant?: 'default' | 'outline' | 'secondary' | 'ghost';\n onClick?: () => void;\n}\n\nexport interface Recommendation {\n id: string;\n /** Headline recommendation. */\n title: string;\n /** Supporting explanation of *why* this is recommended. */\n rationale: string;\n /** Tone drives icon + accent color. */\n tone?: RecommendationTone;\n /** Optional confidence/priority chip text (e.g. \"High priority\"). */\n badge?: string;\n /** Optional structured impact line (e.g. \"Expected change: +5%\"). */\n impact?: string;\n /** Actions the user can take on this recommendation. */\n actions?: RecommendationAction[];\n}\n\nexport interface RecommendationCardsProps {\n recommendations: Recommendation[];\n className?: string;\n}\n\nconst toneConfig: Record<\n RecommendationTone,\n { icon: typeof InfoIcon; iconWrap: string; accent: string }\n> = {\n suggestion: { icon: LightbulbIcon, iconWrap: 'bg-blue-500/10 text-blue-600', accent: 'border-l-blue-500' },\n caution: { icon: AlertTriangleIcon, iconWrap: 'bg-amber-500/10 text-amber-600', accent: 'border-l-amber-500' },\n positive: { icon: CheckCircle2Icon, iconWrap: 'bg-emerald-500/10 text-emerald-600', accent: 'border-l-emerald-500' },\n info: { icon: InfoIcon, iconWrap: 'bg-muted text-muted-foreground', accent: 'border-l-muted-foreground/40' },\n};\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function RecommendationCards({ recommendations, className }: RecommendationCardsProps) {\n return (\n <div className={cn('space-y-3', className)}>\n {recommendations.map((rec, index) => {\n const config = toneConfig[rec.tone ?? 'info'];\n const Icon = config.icon;\n return (\n <motion.div\n key={rec.id}\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: index * 0.05 }}\n className={cn('rounded-lg border border-l-2 bg-card p-4', config.accent)}\n >\n <div className=\"flex items-start gap-3\">\n <div className={cn('flex size-8 shrink-0 items-center justify-center rounded-md', config.iconWrap)}>\n <Icon className=\"size-4\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <h4 className=\"text-sm font-medium\">{rec.title}</h4>\n {rec.badge && (\n <Badge variant=\"secondary\" className=\"text-[10px]\">\n {rec.badge}\n </Badge>\n )}\n </div>\n <p className=\"mt-1 text-sm text-muted-foreground\">{rec.rationale}</p>\n {rec.impact && (\n <p className=\"mt-2 rounded-md bg-muted/50 px-2 py-1 text-xs text-muted-foreground\">\n {rec.impact}\n </p>\n )}\n {rec.actions && rec.actions.length > 0 && (\n <div className=\"mt-3 flex flex-wrap gap-2\">\n {rec.actions.map((action) => (\n <Button\n key={action.id}\n size=\"sm\"\n variant={action.variant ?? 'outline'}\n className=\"h-7 text-xs\"\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n </div>\n </motion.div>\n );\n })}\n </div>\n );\n}\n\nexport default RecommendationCards;\n","'use client';\n\nimport { motion } from 'motion/react';\nimport { cn } from '../../core/utils';\nimport { Badge } from '../../ui/badge';\nimport { Button } from '../../ui/button';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport type AgendaItemState = 'upcoming' | 'active' | 'done';\n\nexport interface AgendaSlotOption {\n id: string;\n label: string;\n}\n\nexport interface AgendaItemAction {\n id: string;\n label: string;\n variant?: 'default' | 'outline' | 'secondary' | 'ghost';\n onClick?: () => void;\n}\n\nexport interface AgendaItem {\n id: string;\n /** Time label (e.g. \"10:00 AM\", \"Day 1 · 14:00\"). */\n time: string;\n /** Optional end/duration label. */\n duration?: string;\n /** Title of the slot/session. */\n title: string;\n /** Secondary line (location, host, track). */\n subtitle?: string;\n /** Body description. */\n description?: string;\n /** Tag chips. */\n tags?: string[];\n /** Lifecycle state -> visual emphasis. */\n state?: AgendaItemState;\n /** Selectable proposed time options (rendered as buttons). */\n options?: AgendaSlotOption[];\n /** Per-item actions. */\n actions?: AgendaItemAction[];\n}\n\nexport interface ScheduleTimelineProps {\n items: AgendaItem[];\n /** Selected option id (controlled). */\n selectedOptionId?: string;\n /** Option selection handler. */\n onSelectOption?: (itemId: string, optionId: string) => void;\n className?: string;\n}\n\nconst stateDot: Record<AgendaItemState, string> = {\n upcoming: 'border-2 border-muted-foreground/30 bg-background',\n active: 'border-2 border-foreground bg-foreground',\n done: 'border-2 border-emerald-500 bg-emerald-500',\n};\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function ScheduleTimeline({\n items,\n selectedOptionId,\n onSelectOption,\n className,\n}: ScheduleTimelineProps) {\n return (\n <div className={cn('flex flex-col', className)}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n const state = item.state ?? 'upcoming';\n return (\n <motion.div\n key={item.id}\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: index * 0.05 }}\n className=\"relative flex gap-3\"\n >\n {/* Time + rail */}\n <div className=\"flex w-16 shrink-0 flex-col items-end pt-0.5 text-right\">\n <span className=\"text-xs font-medium tabular-nums\">{item.time}</span>\n {item.duration && (\n <span className=\"text-[10px] text-muted-foreground\">{item.duration}</span>\n )}\n </div>\n\n <div className=\"relative flex flex-col items-center\">\n <span className={cn('z-10 mt-1 size-3 shrink-0 rounded-full', stateDot[state])} />\n {!isLast && <span className=\"w-0.5 flex-1 bg-muted\" />}\n </div>\n\n {/* Content */}\n <div className={cn('min-w-0 flex-1', !isLast && 'pb-4')}>\n <div className=\"rounded-lg border bg-card p-3\">\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"min-w-0\">\n <h4 className={cn('text-sm', state === 'done' ? 'text-muted-foreground' : 'font-medium')}>\n {item.title}\n </h4>\n {item.subtitle && (\n <p className=\"mt-0.5 text-xs text-muted-foreground\">{item.subtitle}</p>\n )}\n </div>\n {state === 'active' && (\n <Badge className=\"bg-foreground text-background text-[10px]\">Now</Badge>\n )}\n </div>\n\n {item.description && (\n <p className=\"mt-2 text-sm text-muted-foreground\">{item.description}</p>\n )}\n\n {item.tags && item.tags.length > 0 && (\n <div className=\"mt-2 flex flex-wrap gap-1.5\">\n {item.tags.map((tag) => (\n <Badge key={tag} variant=\"outline\" className=\"h-5 text-xs\">\n {tag}\n </Badge>\n ))}\n </div>\n )}\n\n {item.options && item.options.length > 0 && (\n <div className=\"mt-3 space-y-1.5\">\n {item.options.map((option) => {\n const selected = selectedOptionId === option.id;\n return (\n <button\n key={option.id}\n type=\"button\"\n onClick={() => onSelectOption?.(item.id, option.id)}\n className={cn(\n 'flex w-full items-center justify-between rounded-md border px-3 py-1.5 text-left text-xs transition-colors',\n selected\n ? 'border-foreground bg-muted'\n : 'hover:bg-muted/50'\n )}\n >\n <span>{option.label}</span>\n </button>\n );\n })}\n </div>\n )}\n\n {item.actions && item.actions.length > 0 && (\n <div className=\"mt-3 flex gap-2\">\n {item.actions.map((action) => (\n <Button\n key={action.id}\n size=\"sm\"\n variant={action.variant ?? 'outline'}\n className=\"h-7 flex-1 text-xs\"\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n </div>\n </motion.div>\n );\n })}\n </div>\n );\n}\n\nexport default ScheduleTimeline;\n","'use client';\n\nimport * as CollapsiblePrimitive from '@radix-ui/react-collapsible';\n\nconst Collapsible = CollapsiblePrimitive.Root;\n\nconst CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger;\n\nconst CollapsibleContent = CollapsiblePrimitive.CollapsibleContent;\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };\n","'use client';\n\nimport { useState } from 'react';\nimport {\n BrainIcon,\n CheckCircle2Icon,\n ChevronDownIcon,\n SearchIcon,\n LightbulbIcon,\n ZapIcon,\n} from 'lucide-react';\nimport { AnimatePresence, motion } from 'motion/react';\nimport { Badge } from '../../ui/badge';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../../ui/collapsible';\nimport { cn } from '../../core/utils';\nimport type { ReasoningStep, ReasoningStatus } from '../../core/types';\n\nexport interface MessageWithReasoningProps {\n /** Reasoning steps */\n steps: ReasoningStep[];\n /** Final answer content */\n children?: React.ReactNode;\n /** Title for the reasoning section */\n title?: string;\n /** Show timing bar */\n showTimingBar?: boolean;\n /** Container class */\n className?: string;\n /** Actions to display after the answer */\n actions?: React.ReactNode;\n}\n\nconst stepIconMap: Record<string, typeof BrainIcon> = {\n search: SearchIcon,\n brain: BrainIcon,\n lightbulb: LightbulbIcon,\n zap: ZapIcon,\n};\n\nfunction getStepIcon(iconName?: string) {\n if (!iconName) return BrainIcon;\n return stepIconMap[iconName] || BrainIcon;\n}\n\nfunction StatusIcon({ status }: { status: ReasoningStatus }) {\n if (status === 'complete') {\n return <CheckCircle2Icon className=\"size-3 text-emerald-500\" />;\n }\n if (status === 'active') {\n return (\n <motion.div\n animate={{ rotate: 360 }}\n transition={{ duration: 1, repeat: Infinity, ease: 'linear' }}\n className=\"size-3 rounded-full border-2 border-foreground border-t-transparent\"\n />\n );\n }\n return <div className=\"size-3 rounded-full border-2 border-muted-foreground/30\" />;\n}\n\nexport function MessageWithReasoning({\n steps,\n children,\n title = 'Chain of thought',\n showTimingBar = true,\n className,\n actions,\n}: MessageWithReasoningProps) {\n const [expandedStep, setExpandedStep] = useState<string | null>(null);\n\n const totalDuration = steps.reduce((sum, step) => sum + (step.duration || 0), 0);\n const completedSteps = steps.filter((s) => s.status === 'complete').length;\n const isComplete = completedSteps === steps.length;\n\n return (\n <div className={cn('overflow-hidden rounded-lg border bg-card', className)}>\n {/* Reasoning header */}\n <div className=\"flex items-center gap-3 border-b px-4 py-2.5 bg-muted/20\">\n <div className=\"flex size-6 shrink-0 items-center justify-center rounded-full bg-muted\">\n <BrainIcon className=\"size-3 text-muted-foreground\" />\n </div>\n <span className=\"font-medium text-sm\">{title}</span>\n <div className=\"flex items-center gap-2 text-muted-foreground text-xs\">\n <span>{steps.length} steps</span>\n {totalDuration > 0 && (\n <>\n <span>·</span>\n <span className=\"font-mono tabular-nums\">{totalDuration}s</span>\n </>\n )}\n </div>\n <Badge variant={isComplete ? 'success' : 'secondary'} className=\"ml-auto font-normal text-[10px]\">\n {isComplete ? 'Complete' : 'Processing'}\n </Badge>\n </div>\n\n {/* Reasoning steps */}\n <div className=\"border-b\">\n <div className=\"relative py-2\">\n {steps.map((step, index) => {\n const StepIcon = getStepIcon(step.icon);\n const isExpanded = expandedStep === step.id;\n const isLast = index === steps.length - 1;\n\n return (\n <motion.div\n key={step.id}\n initial={{ opacity: 0, y: 4 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.2, delay: index * 0.06 }}\n className=\"relative\"\n >\n {/* Vertical connector line */}\n {!isLast && (\n <div className=\"absolute left-[26px] top-[32px] bottom-0 w-px bg-border\" />\n )}\n\n <button\n type=\"button\"\n onClick={() => setExpandedStep(isExpanded ? null : step.id)}\n className=\"flex w-full items-center gap-3 px-4 py-2 text-left transition-colors hover:bg-muted/30\"\n >\n {/* Step status */}\n <span className=\"relative z-10 flex size-5 shrink-0 items-center justify-center rounded-full bg-muted\">\n <StatusIcon status={step.status} />\n </span>\n\n <StepIcon className=\"size-3.5 text-muted-foreground\" />\n\n <span className=\"flex-1 text-xs font-medium\">{step.label}</span>\n\n {step.duration && (\n <span className=\"font-mono text-muted-foreground text-[10px] tabular-nums\">\n {step.duration}s\n </span>\n )}\n\n <ChevronDownIcon\n className={cn(\n 'size-3.5 text-muted-foreground/60 transition-transform duration-200',\n isExpanded && 'rotate-180'\n )}\n />\n </button>\n\n <AnimatePresence>\n {isExpanded && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={{ duration: 0.2 }}\n className=\"overflow-hidden\"\n >\n <div className=\"pb-2 pl-[52px] pr-4\">\n <Collapsible defaultOpen>\n <CollapsibleTrigger className=\"group flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground\">\n <span>Thought for {step.duration || 0} seconds</span>\n <ChevronDownIcon className=\"size-3 transition-transform group-data-[state=closed]:-rotate-90\" />\n </CollapsibleTrigger>\n <CollapsibleContent>\n <div className=\"mt-2 rounded-md bg-muted/30 p-3\">\n <p className=\"whitespace-pre-wrap text-xs text-muted-foreground leading-relaxed\">\n {step.content}\n </p>\n </div>\n </CollapsibleContent>\n </Collapsible>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </motion.div>\n );\n })}\n </div>\n\n {/* Timing summary bar */}\n {showTimingBar && totalDuration > 0 && (\n <div className=\"flex items-center gap-1 border-t px-4 py-2\">\n {steps.map((step) => {\n const widthPercent = ((step.duration || 0) / totalDuration) * 100;\n return (\n <div\n key={step.id}\n className=\"h-1 rounded-full bg-muted-foreground/20\"\n style={{ width: `${widthPercent}%` }}\n title={`${step.label}: ${step.duration}s`}\n />\n );\n })}\n <span className=\"ml-auto font-mono text-muted-foreground text-[10px] tabular-nums\">\n {totalDuration}s total\n </span>\n </div>\n )}\n </div>\n\n {/* Final answer */}\n {children && (\n <div className=\"px-4 py-4\">\n <div className=\"mb-2.5 flex items-center gap-2\">\n <ZapIcon className=\"size-3.5 text-muted-foreground\" />\n <span className=\"font-medium text-xs text-muted-foreground\">Final Answer</span>\n </div>\n <div className=\"text-sm leading-relaxed\">{children}</div>\n {actions && <div className=\"mt-3\">{actions}</div>}\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { CheckIcon, ChevronDownIcon, CopyIcon, Loader2Icon } from 'lucide-react';\nimport { AnimatePresence, motion } from 'motion/react';\nimport { Button } from '../../ui/button';\nimport { cn, copyToClipboard, calculatePercentage } from '../../core/utils';\nimport type { ExecutionStep, ExecutionStepStatus } from '../../core/types';\n\nexport interface MessageWithStepsProps {\n /** Steps to display */\n steps: ExecutionStep[];\n /** Title for the step list */\n title?: string;\n /** Show progress bar */\n showProgress?: boolean;\n /** Initially expanded step index */\n defaultExpanded?: number;\n /** Container class */\n className?: string;\n /** Footer content */\n footer?: React.ReactNode;\n}\n\nfunction StepNode({ status }: { status: ExecutionStepStatus }) {\n if (status === 'complete') {\n return (\n <div className=\"flex size-6 items-center justify-center rounded-full bg-emerald-500\">\n <CheckIcon className=\"size-3 text-white\" />\n </div>\n );\n }\n if (status === 'active') {\n return (\n <div className=\"relative flex size-6 items-center justify-center rounded-full border-2 border-foreground\">\n <Loader2Icon className=\"size-3 animate-spin text-foreground\" />\n </div>\n );\n }\n if (status === 'error') {\n return (\n <div className=\"flex size-6 items-center justify-center rounded-full bg-red-500\">\n <span className=\"text-white text-xs font-bold\">!</span>\n </div>\n );\n }\n return (\n <div className=\"flex size-6 items-center justify-center rounded-full border-2 border-muted-foreground/30\" />\n );\n}\n\nexport function MessageWithSteps({\n steps,\n title,\n showProgress = true,\n defaultExpanded,\n className,\n footer,\n}: MessageWithStepsProps) {\n const [expanded, setExpanded] = useState<number | null>(\n defaultExpanded ?? steps.findIndex((s) => s.status === 'active')\n );\n const [copied, setCopied] = useState<string | null>(null);\n\n const handleCopy = async (stepId: string, code: string) => {\n const success = await copyToClipboard(code);\n if (success) {\n setCopied(stepId);\n setTimeout(() => setCopied(null), 2000);\n }\n };\n\n const completedSteps = steps.filter((s) => s.status === 'complete').length;\n const progressPercent = calculatePercentage(completedSteps, steps.length);\n\n return (\n <div className={cn('overflow-hidden rounded-lg border bg-card', className)}>\n {/* Header with progress */}\n {(title || showProgress) && (\n <div className=\"border-b px-4 py-3\">\n <div className=\"flex items-center justify-between\">\n {title && <span className=\"font-medium text-sm\">{title}</span>}\n <span className=\"font-mono text-muted-foreground text-xs\">\n {completedSteps}/{steps.length} complete\n </span>\n </div>\n {showProgress && (\n <div className=\"mt-2 h-1 overflow-hidden rounded-full bg-muted\">\n <motion.div\n className=\"h-full rounded-full bg-emerald-500\"\n initial={{ width: 0 }}\n animate={{ width: `${progressPercent}%` }}\n transition={{ duration: 0.6, ease: 'easeOut' }}\n />\n </div>\n )}\n </div>\n )}\n\n {/* Timeline steps */}\n <div className=\"px-4 py-2\">\n {steps.map((step, index) => {\n const isExpanded = expanded === index;\n const isLast = index === steps.length - 1;\n\n return (\n <motion.div\n key={step.id}\n initial={{ opacity: 0, y: 4 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.2, delay: index * 0.07 }}\n className=\"relative\"\n >\n {/* Timeline connector line */}\n {!isLast && (\n <div\n className={cn(\n 'absolute top-8 left-3 h-[calc(100%-20px)] w-px',\n step.status === 'complete' ? 'bg-emerald-500' : 'bg-border'\n )}\n />\n )}\n\n {/* Step header */}\n <button\n type=\"button\"\n onClick={() => setExpanded(isExpanded ? null : index)}\n className=\"flex w-full items-start gap-3 py-2.5 text-left transition-colors\"\n >\n <div className=\"relative z-10 mt-0.5 shrink-0\">\n <StepNode status={step.status} />\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span\n className={cn(\n 'font-medium text-sm',\n step.status === 'pending' && 'text-muted-foreground'\n )}\n >\n {step.title}\n </span>\n {step.duration && (\n <span className=\"font-mono text-muted-foreground text-[10px]\">\n {step.duration}\n </span>\n )}\n </div>\n {!isExpanded && (\n <p className=\"mt-0.5 truncate text-muted-foreground text-xs\">\n {step.description}\n </p>\n )}\n </div>\n <ChevronDownIcon\n className={cn(\n 'mt-1 size-4 shrink-0 text-muted-foreground/60 transition-transform duration-200',\n isExpanded ? 'rotate-0' : '-rotate-90'\n )}\n />\n </button>\n\n {/* Expanded content */}\n <AnimatePresence>\n {isExpanded && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={{ duration: 0.2, ease: 'easeOut' }}\n className=\"overflow-hidden pl-9\"\n >\n <p className=\"mb-3 text-muted-foreground text-sm leading-relaxed\">\n {step.description}\n </p>\n {step.code && (\n <div className=\"mb-3 overflow-hidden rounded-md bg-zinc-950\">\n <div className=\"flex items-center justify-between px-3 py-1.5\">\n <span className=\"font-mono text-zinc-500 text-[10px]\">\n {step.status === 'active' ? 'running...' : 'code'}\n </span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 gap-1 px-2 text-xs text-zinc-400 hover:text-zinc-200\"\n onClick={(e) => {\n e.stopPropagation();\n handleCopy(step.id, step.code as string);\n }}\n >\n {copied === step.id ? (\n <>\n <CheckIcon className=\"size-3\" />\n Copied\n </>\n ) : (\n <>\n <CopyIcon className=\"size-3\" />\n Copy\n </>\n )}\n </Button>\n </div>\n <pre className=\"overflow-x-auto px-3 pb-3 font-mono text-[11px] leading-5 text-zinc-300\">\n <code>{step.code}</code>\n </pre>\n </div>\n )}\n {step.output && (\n <div className=\"mb-3 rounded-md bg-muted/50 p-3\">\n <p className=\"text-muted-foreground text-xs font-mono\">\n {step.output}\n </p>\n </div>\n )}\n </motion.div>\n )}\n </AnimatePresence>\n </motion.div>\n );\n })}\n </div>\n\n {/* Footer */}\n {footer && <div className=\"border-t px-4 py-3\">{footer}</div>}\n </div>\n );\n}\n","import * as React from 'react';\nimport { cn } from '../core/utils';\n\nconst Textarea = React.forwardRef<\n HTMLTextAreaElement,\n React.ComponentProps<'textarea'>\n>(({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n});\nTextarea.displayName = 'Textarea';\n\nexport { Textarea };\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport {\n CheckCircle2Icon,\n ThumbsDownIcon,\n ThumbsUpIcon,\n} from 'lucide-react';\nimport { AnimatePresence, motion } from 'motion/react';\nimport { Badge } from '../../ui/badge';\nimport { Button } from '../../ui/button';\nimport { Textarea } from '../../ui/textarea';\nimport { cn } from '../../core/utils';\nimport type { FeedbackCategory, MessageFeedback } from '../../core/types';\n\nexport interface MessageWithFeedbackProps {\n /** Message content */\n children: React.ReactNode;\n /** Current feedback state */\n feedback?: MessageFeedback;\n /** Feedback submission handler */\n onFeedback?: (feedback: MessageFeedback) => void;\n /** Available feedback categories */\n categories?: FeedbackCategory[];\n /** Show comment input */\n showComment?: boolean;\n /** Label for the feedback prompt */\n promptLabel?: string;\n /** Container class */\n className?: string;\n}\n\nconst defaultCategories: FeedbackCategory[] = [\n { id: 'accurate', label: 'Accurate', sentiment: 'positive' },\n { id: 'helpful', label: 'Helpful', sentiment: 'positive' },\n { id: 'well-structured', label: 'Well-structured', sentiment: 'positive' },\n { id: 'creative', label: 'Creative', sentiment: 'positive' },\n { id: 'too-long', label: 'Too long', sentiment: 'negative' },\n { id: 'incomplete', label: 'Incomplete', sentiment: 'negative' },\n { id: 'incorrect', label: 'Incorrect', sentiment: 'negative' },\n { id: 'off-topic', label: 'Off-topic', sentiment: 'negative' },\n];\n\nexport function MessageWithFeedback({\n children,\n feedback: initialFeedback,\n onFeedback,\n categories = defaultCategories,\n showComment = true,\n promptLabel = 'Was this response helpful?',\n className,\n}: MessageWithFeedbackProps) {\n const [vote, setVote] = useState<'up' | 'down' | null>(initialFeedback?.vote ?? null);\n const [selectedCategories, setSelectedCategories] = useState<string[]>(\n initialFeedback?.categories ?? []\n );\n const [comment, setComment] = useState(initialFeedback?.comment ?? '');\n const [submitted, setSubmitted] = useState(!!initialFeedback);\n const [showDetails, setShowDetails] = useState(false);\n\n const toggleCategory = useCallback((id: string) => {\n setSelectedCategories((prev) =>\n prev.includes(id) ? prev.filter((c) => c !== id) : [...prev, id]\n );\n }, []);\n\n const handleVote = useCallback((direction: 'up' | 'down') => {\n const newVote = vote === direction ? null : direction;\n setVote(newVote);\n if (newVote) {\n setShowDetails(true);\n }\n }, [vote]);\n\n const handleSubmit = useCallback(() => {\n if (!vote) return;\n \n const feedbackData: MessageFeedback = {\n vote,\n categories: selectedCategories.length > 0 ? selectedCategories : undefined,\n comment: comment.trim() || undefined,\n timestamp: new Date(),\n };\n\n onFeedback?.(feedbackData);\n setSubmitted(true);\n }, [vote, selectedCategories, comment, onFeedback]);\n\n const handleReset = useCallback(() => {\n setVote(null);\n setSelectedCategories([]);\n setComment('');\n setSubmitted(false);\n setShowDetails(false);\n }, []);\n\n const visibleCategories = vote\n ? categories.filter((c) =>\n vote === 'up' ? c.sentiment === 'positive' : c.sentiment === 'negative'\n )\n : categories;\n\n return (\n <div className={cn('overflow-hidden rounded-lg border bg-card', className)}>\n {/* Message content */}\n <div className=\"px-4 py-4\">{children}</div>\n\n {/* Feedback area */}\n <div className=\"border-t\">\n <AnimatePresence mode=\"wait\">\n {submitted ? (\n <motion.div\n key=\"success\"\n initial={{ opacity: 0, scale: 0.96 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.96 }}\n transition={{ duration: 0.2 }}\n className=\"flex flex-col items-center gap-2 px-4 py-8\"\n >\n <motion.div\n initial={{ scale: 0 }}\n animate={{ scale: 1 }}\n transition={{ type: 'spring', stiffness: 300, damping: 20, delay: 0.1 }}\n >\n <CheckCircle2Icon className=\"size-8 text-emerald-500\" />\n </motion.div>\n <span className=\"font-medium text-sm\">Thanks for your feedback</span>\n <span className=\"text-center text-muted-foreground text-xs\">\n Your input helps improve response quality.\n {selectedCategories.length > 0 && (\n <>\n {' '}\n You selected {selectedCategories.length} categor\n {selectedCategories.length === 1 ? 'y' : 'ies'}.\n </>\n )}\n </span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"mt-1 h-7 text-xs\"\n onClick={handleReset}\n >\n Submit another\n </Button>\n </motion.div>\n ) : (\n <motion.div\n key=\"form\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.15 }}\n >\n {/* Vote buttons */}\n <div className=\"flex items-center justify-between px-4 py-3\">\n <span className=\"text-muted-foreground text-xs\">{promptLabel}</span>\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n 'h-8 gap-1.5 px-3 text-xs transition-colors',\n vote === 'up' &&\n 'bg-emerald-500/10 text-emerald-600 hover:bg-emerald-500/15 dark:text-emerald-400'\n )}\n onClick={() => handleVote('up')}\n >\n <ThumbsUpIcon className={cn('size-3.5', vote === 'up' && 'fill-current')} />\n Helpful\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n 'h-8 gap-1.5 px-3 text-xs transition-colors',\n vote === 'down' &&\n 'bg-red-500/10 text-red-600 hover:bg-red-500/15 dark:text-red-400'\n )}\n onClick={() => handleVote('down')}\n >\n <ThumbsDownIcon className={cn('size-3.5', vote === 'down' && 'fill-current')} />\n Not helpful\n </Button>\n </div>\n </div>\n\n {/* Expanded details */}\n <AnimatePresence>\n {showDetails && vote && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={{ duration: 0.25, ease: 'easeOut' }}\n className=\"overflow-hidden\"\n >\n {/* Category tags */}\n <div className=\"border-t px-4 py-3\">\n <span className=\"mb-2 block text-muted-foreground text-xs\">\n {vote === 'up' ? 'What did you like?' : 'What went wrong?'}\n </span>\n <div className=\"flex flex-wrap gap-1.5\">\n {visibleCategories.map((category) => {\n const isSelected = selectedCategories.includes(category.id);\n return (\n <motion.button\n key={category.id}\n type=\"button\"\n initial={{ opacity: 0, scale: 0.9 }}\n animate={{ opacity: 1, scale: 1 }}\n transition={{ duration: 0.15 }}\n onClick={() => toggleCategory(category.id)}\n >\n <Badge\n variant={isSelected ? 'default' : 'outline'}\n className=\"cursor-pointer text-xs transition-colors\"\n >\n {category.label}\n </Badge>\n </motion.button>\n );\n })}\n </div>\n </div>\n\n {/* Comment */}\n {showComment && (\n <div className=\"border-t px-4 py-3\">\n <Textarea\n value={comment}\n onChange={(e) => setComment(e.target.value)}\n placeholder={\n vote === 'up'\n ? 'What made this response stand out? (optional)'\n : 'How could this response be improved? (optional)'\n }\n rows={2}\n className=\"resize-none text-sm\"\n />\n </div>\n )}\n\n {/* Submit */}\n <div className=\"flex items-center justify-between border-t px-4 py-3\">\n <span className=\"text-muted-foreground text-xs\">\n {selectedCategories.length > 0\n ? `${selectedCategories.length} selected`\n : 'No categories selected'}\n </span>\n <Button\n size=\"sm\"\n className=\"h-7 text-xs\"\n onClick={handleSubmit}\n disabled={!vote}\n >\n Submit feedback\n </Button>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { FileTextIcon, ImageIcon, MicIcon } from 'lucide-react';\nimport { motion } from 'motion/react';\nimport { cn, formatBytes } from '../../core/utils';\nimport type { Attachment, AttachmentType } from '../../core/types';\n\nexport interface MessageWithAttachmentsProps {\n /** Message content */\n children?: React.ReactNode;\n /** Attachments */\n attachments: Attachment[];\n /** Click handler for attachment */\n onAttachmentClick?: (attachment: Attachment) => void;\n /** Container class */\n className?: string;\n /** Attachment display variant */\n variant?: 'compact' | 'card';\n}\n\nconst attachmentIcons: Record<AttachmentType, typeof FileTextIcon> = {\n image: ImageIcon,\n audio: MicIcon,\n video: FileTextIcon,\n document: FileTextIcon,\n file: FileTextIcon,\n};\n\nfunction AttachmentPreview({\n attachment,\n onClick,\n variant,\n}: {\n attachment: Attachment;\n onClick?: (attachment: Attachment) => void;\n variant: 'compact' | 'card';\n}) {\n const Icon = attachmentIcons[attachment.type];\n\n // Image preview\n if (attachment.type === 'image' && attachment.url) {\n return (\n <button\n type=\"button\"\n onClick={() => onClick?.(attachment)}\n className={cn(\n 'overflow-hidden rounded-md border bg-muted/30 transition-colors hover:bg-muted/50',\n variant === 'card' ? 'w-full' : 'w-auto'\n )}\n >\n <img\n src={attachment.url}\n alt={attachment.name}\n className={cn(\n 'object-cover',\n variant === 'card' ? 'h-32 w-full' : 'h-20 w-20'\n )}\n />\n {variant === 'card' && (\n <div className=\"px-2 py-1.5\">\n <p className=\"truncate text-xs font-medium\">{attachment.name}</p>\n {attachment.size && (\n <p className=\"text-[10px] text-muted-foreground\">\n {formatBytes(attachment.size)}\n </p>\n )}\n </div>\n )}\n </button>\n );\n }\n\n // Audio preview with waveform\n if (attachment.type === 'audio') {\n return (\n <div className=\"flex items-center gap-2 rounded-md border bg-muted/30 px-2.5 py-2\">\n <div className=\"flex size-10 shrink-0 items-center justify-center rounded bg-muted\">\n <MicIcon className=\"size-4 text-muted-foreground/60\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate font-medium text-xs\">{attachment.name}</p>\n <div className=\"mt-1 flex items-center gap-1\">\n {Array.from({ length: 12 }).map((_, i) => (\n <div\n key={`${attachment.id}-wave-${i}`}\n className=\"w-1 rounded-full bg-muted-foreground/30\"\n style={{ height: `${6 + ((i * 7 + 3) % 10)}px` }}\n />\n ))}\n </div>\n </div>\n </div>\n );\n }\n\n // Default file preview\n return (\n <button\n type=\"button\"\n onClick={() => onClick?.(attachment)}\n className=\"flex items-center gap-2 rounded-md border bg-muted/30 px-2.5 py-2 transition-colors hover:bg-muted/50\"\n >\n <div className=\"flex size-10 shrink-0 items-center justify-center rounded bg-muted\">\n <Icon className=\"size-4 text-muted-foreground/60\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"truncate font-medium text-xs\">{attachment.name}</p>\n {attachment.size && (\n <p className=\"text-[10px] text-muted-foreground\">\n {formatBytes(attachment.size)}\n </p>\n )}\n </div>\n </button>\n );\n}\n\nexport function MessageWithAttachments({\n children,\n attachments,\n onAttachmentClick,\n className,\n variant = 'compact',\n}: MessageWithAttachmentsProps) {\n if (attachments.length === 0 && !children) return null;\n\n return (\n <motion.div\n initial={{ opacity: 0, y: 6 }}\n animate={{ opacity: 1, y: 0 }}\n className={cn('space-y-2', className)}\n >\n {/* Attachments */}\n {attachments.length > 0 && (\n <div\n className={cn(\n 'flex gap-2',\n variant === 'card' ? 'flex-col' : 'flex-wrap'\n )}\n >\n {attachments.map((attachment) => (\n <AttachmentPreview\n key={attachment.id}\n attachment={attachment}\n onClick={onAttachmentClick}\n variant={variant}\n />\n ))}\n </div>\n )}\n\n {/* Message content */}\n {children && (\n <div className=\"rounded-lg bg-muted/50 px-3 py-2.5 text-sm leading-relaxed\">\n {children}\n </div>\n )}\n </motion.div>\n );\n}\n","'use client';\n\nimport { BotIcon, UserIcon } from 'lucide-react';\nimport { Avatar as AvatarRoot, AvatarFallback, AvatarImage } from '../../ui/avatar';\nimport { cn, getInitials } from '../../core/utils';\nimport type { MessageRole, AgentPersona } from '../../core/types';\n\nexport interface AgentAvatarProps {\n role: MessageRole;\n /** For assistant, optionally pass persona */\n persona?: AgentPersona;\n /** For user, optionally pass name */\n name?: string;\n /** Custom image URL */\n src?: string;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\nconst sizeClasses = {\n sm: 'size-6',\n md: 'size-8',\n lg: 'size-10',\n};\n\nconst iconSizes = {\n sm: 'size-3',\n md: 'size-4',\n lg: 'size-5',\n};\n\nexport function AgentAvatar({\n role,\n persona,\n name,\n src,\n size = 'md',\n className,\n}: AgentAvatarProps) {\n const imageUrl = src || persona?.avatar;\n const displayName = name || persona?.name || (role === 'assistant' ? 'AI' : 'You');\n \n return (\n <AvatarRoot className={cn(sizeClasses[size], 'shrink-0', className)}>\n {imageUrl && <AvatarImage src={imageUrl} alt={displayName} />}\n <AvatarFallback\n className={cn(\n role === 'assistant' && 'bg-foreground text-background',\n role === 'user' && 'bg-muted text-muted-foreground',\n role === 'system' && 'bg-amber-500/20 text-amber-600'\n )}\n >\n {role === 'assistant' ? (\n <BotIcon className={iconSizes[size]} />\n ) : role === 'user' ? (\n name ? (\n <span className=\"text-[10px] font-medium\">{getInitials(name)}</span>\n ) : (\n <UserIcon className={iconSizes[size]} />\n )\n ) : (\n <span className=\"text-[10px] font-medium\">SYS</span>\n )}\n </AvatarFallback>\n </AvatarRoot>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { cn } from '../../core/utils';\nimport { MessageContainer, MessageBubble, MessageContent } from '../primitives/message';\nimport { AgentAvatar } from '../primitives/avatar';\n\nexport interface ConversationArtifactProps {\n /** Rich content (a data-display component) rendered inside the assistant turn. */\n children: ReactNode;\n /** Optional intro text shown as a bubble above the artifact. */\n intro?: string;\n /** Optional caption shown below the artifact. */\n caption?: string;\n /** Show the assistant avatar. */\n showAvatar?: boolean;\n className?: string;\n}\n\n/**\n * ConversationArtifact wraps an arbitrary rich-content node (chart, gallery,\n * report, etc.) as an assistant conversation turn so an orchestrator can drop\n * any data-display component directly into a message thread. It reuses the\n * shared message primitives (container + avatar + bubble) so it lines up with\n * the rest of the conversation across every surface. Purely presentational and\n * industry-agnostic — the artifact is supplied via `children`.\n */\nexport function ConversationArtifact({\n children,\n intro,\n caption,\n showAvatar = true,\n className,\n}: ConversationArtifactProps) {\n return (\n <MessageContainer role=\"assistant\" className={className}>\n {showAvatar && <AgentAvatar role=\"assistant\" size=\"sm\" />}\n <div className=\"flex min-w-0 flex-1 flex-col gap-2\">\n {intro && (\n <MessageBubble role=\"assistant\">\n <MessageContent>{intro}</MessageContent>\n </MessageBubble>\n )}\n <div className={cn('w-full min-w-0')}>{children}</div>\n {caption && (\n <p className=\"px-1 text-muted-foreground text-xs\">{caption}</p>\n )}\n </div>\n </MessageContainer>\n );\n}\n\nexport default ConversationArtifact;\n","'use client';\n\nimport { useMemo } from 'react';\nimport { LightbulbIcon, DownloadIcon } from 'lucide-react';\nimport {\n BarChart,\n Bar,\n LineChart,\n Line,\n AreaChart,\n Area,\n PieChart,\n Pie,\n Cell,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n ResponsiveContainer,\n Legend,\n} from 'recharts';\nimport { Button } from '../../ui/button';\nimport { cn } from '../../core/utils';\nimport type { ChartData } from '../../core/types';\n\nexport interface ChartContainerProps {\n /** Chart configuration */\n data: ChartData;\n /** Height of chart */\n height?: number;\n /** Show download button */\n showDownload?: boolean;\n /** Show insight */\n showInsight?: boolean;\n /** Download handler */\n onDownload?: () => void;\n /** Container class */\n className?: string;\n /** Color palette */\n colors?: string[];\n}\n\nconst defaultColors = [\n 'hsl(221, 83%, 53%)', // blue\n 'hsl(142, 71%, 45%)', // green\n 'hsl(262, 83%, 58%)', // purple\n 'hsl(24, 95%, 53%)', // orange\n 'hsl(349, 89%, 60%)', // pink\n 'hsl(47, 96%, 53%)', // yellow\n];\n\nfunction SimpleBarChart({ data, colors }: { data: ChartData; colors: string[] }) {\n const maxValue = Math.max(...data.data.map((d) => d.value));\n\n return (\n <div className=\"space-y-2\">\n {data.data.map((item, index) => {\n const percentage = (item.value / maxValue) * 100;\n return (\n <div key={item.label} className=\"space-y-1\">\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"text-muted-foreground\">{item.label}</span>\n <span className=\"font-medium tabular-nums\">\n {typeof item.value === 'number'\n ? item.value.toLocaleString()\n : item.value}\n </span>\n </div>\n <div className=\"h-2 overflow-hidden rounded-full bg-muted\">\n <div\n className=\"h-full transition-all duration-500\"\n style={{\n width: `${percentage}%`,\n backgroundColor: colors[index % colors.length],\n }}\n />\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction RechartsChart({ data, height, colors }: { data: ChartData; height: number; colors: string[] }) {\n const chartType = data.type;\n\n if (chartType === 'bar') {\n return (\n <ResponsiveContainer width=\"100%\" height={height}>\n <BarChart data={data.data}>\n <CartesianGrid strokeDasharray=\"3 3\" className=\"stroke-muted\" />\n <XAxis\n dataKey=\"label\"\n tick={{ fontSize: 11 }}\n className=\"text-muted-foreground\"\n />\n <YAxis tick={{ fontSize: 11 }} className=\"text-muted-foreground\" />\n <Tooltip\n contentStyle={{\n backgroundColor: 'hsl(var(--card))',\n border: '1px solid hsl(var(--border))',\n borderRadius: '6px',\n fontSize: '12px',\n }}\n />\n <Bar dataKey=\"value\" fill={colors[0]} radius={[4, 4, 0, 0]} />\n </BarChart>\n </ResponsiveContainer>\n );\n }\n\n if (chartType === 'line') {\n return (\n <ResponsiveContainer width=\"100%\" height={height}>\n <LineChart data={data.data}>\n <CartesianGrid strokeDasharray=\"3 3\" className=\"stroke-muted\" />\n <XAxis\n dataKey=\"label\"\n tick={{ fontSize: 11 }}\n className=\"text-muted-foreground\"\n />\n <YAxis tick={{ fontSize: 11 }} className=\"text-muted-foreground\" />\n <Tooltip\n contentStyle={{\n backgroundColor: 'hsl(var(--card))',\n border: '1px solid hsl(var(--border))',\n borderRadius: '6px',\n fontSize: '12px',\n }}\n />\n <Line\n type=\"monotone\"\n dataKey=\"value\"\n stroke={colors[0]}\n strokeWidth={2}\n dot={{ fill: colors[0], strokeWidth: 2 }}\n />\n </LineChart>\n </ResponsiveContainer>\n );\n }\n\n if (chartType === 'area') {\n return (\n <ResponsiveContainer width=\"100%\" height={height}>\n <AreaChart data={data.data}>\n <CartesianGrid strokeDasharray=\"3 3\" className=\"stroke-muted\" />\n <XAxis\n dataKey=\"label\"\n tick={{ fontSize: 11 }}\n className=\"text-muted-foreground\"\n />\n <YAxis tick={{ fontSize: 11 }} className=\"text-muted-foreground\" />\n <Tooltip\n contentStyle={{\n backgroundColor: 'hsl(var(--card))',\n border: '1px solid hsl(var(--border))',\n borderRadius: '6px',\n fontSize: '12px',\n }}\n />\n <Area\n type=\"monotone\"\n dataKey=\"value\"\n stroke={colors[0]}\n fill={`${colors[0]}33`}\n strokeWidth={2}\n />\n </AreaChart>\n </ResponsiveContainer>\n );\n }\n\n if (chartType === 'pie' || chartType === 'donut') {\n const innerRadius = chartType === 'donut' ? 60 : 0;\n return (\n <ResponsiveContainer width=\"100%\" height={height}>\n <PieChart>\n <Pie\n data={data.data}\n dataKey=\"value\"\n nameKey=\"label\"\n cx=\"50%\"\n cy=\"50%\"\n innerRadius={innerRadius}\n outerRadius={80}\n paddingAngle={2}\n >\n {data.data.map((_, index) => (\n <Cell key={`cell-${index}`} fill={colors[index % colors.length]} />\n ))}\n </Pie>\n <Tooltip\n contentStyle={{\n backgroundColor: 'hsl(var(--card))',\n border: '1px solid hsl(var(--border))',\n borderRadius: '6px',\n fontSize: '12px',\n }}\n />\n <Legend\n formatter={(value) => (\n <span className=\"text-xs text-foreground\">{value}</span>\n )}\n />\n </PieChart>\n </ResponsiveContainer>\n );\n }\n\n // Fallback to simple bar chart\n return <SimpleBarChart data={data} colors={colors} />;\n}\n\nexport function ChartContainer({\n data,\n height = 200,\n showDownload = true,\n showInsight = true,\n onDownload,\n className,\n colors = defaultColors,\n}: ChartContainerProps) {\n const useSimpleChart = useMemo(() => {\n // Use simple chart for small data sets or on smaller screens\n return data.data.length <= 5 && data.type === 'bar';\n }, [data.data.length, data.type]);\n\n return (\n <div className={cn('rounded-lg border bg-muted/50 p-4', className)}>\n {/* Header */}\n <div className=\"mb-3 flex items-center justify-between\">\n <h4 className=\"text-sm font-medium\">{data.title}</h4>\n {showDownload && onDownload && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 gap-1 text-xs\"\n onClick={onDownload}\n >\n <DownloadIcon className=\"size-3\" />\n Export\n </Button>\n )}\n </div>\n\n {/* Chart */}\n <div className=\"min-h-[120px]\">\n {useSimpleChart ? (\n <SimpleBarChart data={data} colors={colors} />\n ) : (\n <RechartsChart data={data} height={height} colors={colors} />\n )}\n </div>\n\n {/* Insight */}\n {showInsight && data.insight && (\n <div className=\"mt-3 flex gap-2 rounded-md bg-muted p-2\">\n <LightbulbIcon className=\"size-4 shrink-0 text-amber-500\" />\n <p className=\"text-xs text-muted-foreground\">{data.insight}</p>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { TrendingUpIcon, TrendingDownIcon, MinusIcon } from 'lucide-react';\nimport { motion } from 'motion/react';\nimport { cn, formatNumber } from '../../core/utils';\nimport type { MetricData, TrendDirection } from '../../core/types';\n\nexport interface MetricsGridProps {\n /** Metrics to display */\n metrics: MetricData[];\n /** Number of columns */\n columns?: 2 | 3 | 4;\n /** Container class */\n className?: string;\n /** Variant */\n variant?: 'card' | 'compact';\n}\n\nconst trendIcons: Record<TrendDirection, typeof TrendingUpIcon> = {\n up: TrendingUpIcon,\n down: TrendingDownIcon,\n stable: MinusIcon,\n};\n\nconst trendColors: Record<TrendDirection, string> = {\n up: 'text-emerald-500',\n down: 'text-red-500',\n stable: 'text-muted-foreground',\n};\n\nexport function MetricsGrid({\n metrics,\n columns = 2,\n className,\n variant = 'card',\n}: MetricsGridProps) {\n const gridCols = {\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n 4: 'grid-cols-2 sm:grid-cols-4',\n };\n\n return (\n <div className={cn('grid gap-3', gridCols[columns], className)}>\n {metrics.map((metric, index) => {\n const TrendIcon = metric.trend ? trendIcons[metric.trend.direction] : null;\n\n return (\n <motion.div\n key={metric.id}\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: index * 0.05 }}\n className={cn(\n 'rounded-md',\n variant === 'card' && 'border bg-card p-4',\n variant === 'compact' && 'bg-muted/50 p-3'\n )}\n >\n <p className=\"font-mono text-muted-foreground text-xs\">{metric.label}</p>\n <div className=\"mt-1 flex items-end justify-between\">\n <p className=\"font-semibold text-lg tabular-nums\">\n {typeof metric.value === 'number' ? formatNumber(metric.value) : metric.value}\n </p>\n {metric.trend && TrendIcon && (\n <div\n className={cn(\n 'flex items-center gap-0.5 text-xs',\n trendColors[metric.trend.direction]\n )}\n >\n <TrendIcon className=\"size-3\" />\n <span className=\"tabular-nums\">{metric.trend.value}%</span>\n </div>\n )}\n </div>\n {metric.description && (\n <p className=\"mt-1 text-muted-foreground text-[10px]\">{metric.description}</p>\n )}\n </motion.div>\n );\n })}\n </div>\n );\n}\n","'use client';\n\nimport { useMemo } from 'react';\nimport { ArrowUpDownIcon, ChevronDownIcon, ChevronUpIcon } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport type { TableData, TableColumn } from '../../core/types';\n\nexport interface DataTableProps {\n /** Table data */\n data: TableData;\n /** Sort column */\n sortColumn?: string;\n /** Sort direction */\n sortDirection?: 'asc' | 'desc';\n /** Sort change handler */\n onSort?: (column: string) => void;\n /** Row click handler */\n onRowClick?: (row: Record<string, unknown>) => void;\n /** Container class */\n className?: string;\n /** Compact mode */\n compact?: boolean;\n /** Max height with scroll */\n maxHeight?: number;\n}\n\nfunction formatCellValue(value: unknown, type?: TableColumn['type']): string {\n if (value === null || value === undefined) return '-';\n\n if (type === 'number' && typeof value === 'number') {\n return value.toLocaleString();\n }\n\n if (type === 'date' && (value instanceof Date || typeof value === 'string')) {\n const date = value instanceof Date ? value : new Date(value);\n return date.toLocaleDateString();\n }\n\n if (type === 'boolean') {\n return value ? 'Yes' : 'No';\n }\n\n return String(value);\n}\n\nexport function DataTable({\n data,\n sortColumn,\n sortDirection,\n onSort,\n onRowClick,\n className,\n compact = false,\n maxHeight,\n}: DataTableProps) {\n const sortedRows = useMemo(() => {\n if (!sortColumn || !sortDirection) return data.rows;\n\n return [...data.rows].sort((a, b) => {\n const aVal = a[sortColumn];\n const bVal = b[sortColumn];\n\n if (aVal === bVal) return 0;\n if (aVal === null || aVal === undefined) return 1;\n if (bVal === null || bVal === undefined) return -1;\n\n const comparison = aVal < bVal ? -1 : 1;\n return sortDirection === 'asc' ? comparison : -comparison;\n });\n }, [data.rows, sortColumn, sortDirection]);\n\n const cellPadding = compact ? 'px-2 py-1.5' : 'px-3 py-2';\n const textSize = compact ? 'text-xs' : 'text-sm';\n\n return (\n <div className={cn('overflow-hidden rounded-lg border', className)}>\n {data.title && (\n <div className=\"border-b bg-muted/30 px-3 py-2\">\n <h4 className=\"font-medium text-sm\">{data.title}</h4>\n </div>\n )}\n <div\n className=\"overflow-auto\"\n style={{ maxHeight: maxHeight ? `${maxHeight}px` : undefined }}\n >\n <table className=\"w-full\">\n <thead className=\"bg-muted/50 sticky top-0\">\n <tr>\n {data.columns.map((column) => (\n <th\n key={column.key}\n className={cn(\n cellPadding,\n textSize,\n 'text-left font-medium text-muted-foreground whitespace-nowrap',\n column.align === 'center' && 'text-center',\n column.align === 'right' && 'text-right',\n onSort && 'cursor-pointer hover:text-foreground transition-colors'\n )}\n onClick={() => onSort?.(column.key)}\n >\n <span className=\"inline-flex items-center gap-1\">\n {column.label}\n {onSort && (\n <span className=\"text-muted-foreground/50\">\n {sortColumn === column.key ? (\n sortDirection === 'asc' ? (\n <ChevronUpIcon className=\"size-3\" />\n ) : (\n <ChevronDownIcon className=\"size-3\" />\n )\n ) : (\n <ArrowUpDownIcon className=\"size-3\" />\n )}\n </span>\n )}\n </span>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {sortedRows.map((row, rowIndex) => (\n <tr\n key={rowIndex}\n className={cn(\n 'border-t transition-colors',\n onRowClick && 'cursor-pointer hover:bg-muted/50'\n )}\n onClick={() => onRowClick?.(row)}\n >\n {data.columns.map((column) => (\n <td\n key={column.key}\n className={cn(\n cellPadding,\n textSize,\n 'whitespace-nowrap',\n column.align === 'center' && 'text-center',\n column.align === 'right' && 'text-right',\n column.type === 'number' && 'tabular-nums'\n )}\n >\n {formatCellValue(row[column.key], column.type)}\n </td>\n ))}\n </tr>\n ))}\n {sortedRows.length === 0 && (\n <tr>\n <td\n colSpan={data.columns.length}\n className={cn(cellPadding, 'text-center text-muted-foreground')}\n >\n No data available\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { CheckIcon, Loader2Icon } from 'lucide-react';\nimport { motion } from 'motion/react';\nimport { cn, calculatePercentage } from '../../core/utils';\n\nexport type ProgressStepStatus = 'complete' | 'active' | 'pending' | 'error';\n\nexport interface ProgressStep {\n id: string;\n label: string;\n description?: string;\n status: ProgressStepStatus;\n}\n\nexport interface ProgressTrackerProps {\n /** Steps to display */\n steps: ProgressStep[];\n /** Orientation */\n orientation?: 'horizontal' | 'vertical';\n /** Container class */\n className?: string;\n /** Show progress percentage */\n showPercentage?: boolean;\n /** Compact mode */\n compact?: boolean;\n}\n\nfunction StepIndicator({ status, index }: { status: ProgressStepStatus; index: number }) {\n if (status === 'complete') {\n return (\n <motion.div\n initial={{ scale: 0 }}\n animate={{ scale: 1 }}\n className=\"flex size-6 items-center justify-center rounded-full bg-emerald-500\"\n >\n <CheckIcon className=\"size-3 text-white\" />\n </motion.div>\n );\n }\n\n if (status === 'active') {\n return (\n <div className=\"flex size-6 items-center justify-center rounded-full border-2 border-primary bg-background\">\n <Loader2Icon className=\"size-3 animate-spin text-primary\" />\n </div>\n );\n }\n\n if (status === 'error') {\n return (\n <div className=\"flex size-6 items-center justify-center rounded-full bg-red-500\">\n <span className=\"text-xs font-bold text-white\">!</span>\n </div>\n );\n }\n\n return (\n <div className=\"flex size-6 items-center justify-center rounded-full border-2 border-muted-foreground/30 bg-background\">\n <span className=\"text-[10px] text-muted-foreground\">{index + 1}</span>\n </div>\n );\n}\n\nexport function ProgressTracker({\n steps,\n orientation = 'vertical',\n className,\n showPercentage = true,\n compact = false,\n}: ProgressTrackerProps) {\n const completedSteps = steps.filter((s) => s.status === 'complete').length;\n const progressPercent = calculatePercentage(completedSteps, steps.length);\n\n if (orientation === 'horizontal') {\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n {showPercentage && (\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"text-muted-foreground\">Progress</span>\n <span className=\"font-mono tabular-nums\">{progressPercent}%</span>\n </div>\n )}\n <div className=\"flex items-center gap-2\">\n {steps.map((step, index) => (\n <div key={step.id} className=\"flex flex-1 items-center\">\n <div className=\"flex flex-col items-center\">\n <StepIndicator status={step.status} index={index} />\n {!compact && (\n <span className=\"mt-1 text-center text-[10px] text-muted-foreground max-w-[60px] truncate\">\n {step.label}\n </span>\n )}\n </div>\n {index < steps.length - 1 && (\n <div\n className={cn(\n 'mx-1 h-0.5 flex-1 rounded-full',\n step.status === 'complete' ? 'bg-emerald-500' : 'bg-muted'\n )}\n />\n )}\n </div>\n ))}\n </div>\n </div>\n );\n }\n\n // Vertical orientation\n return (\n <div className={cn('flex flex-col gap-0', className)}>\n {showPercentage && (\n <div className=\"mb-2 flex items-center justify-between text-xs\">\n <span className=\"text-muted-foreground\">\n {completedSteps} of {steps.length} complete\n </span>\n <span className=\"font-mono tabular-nums\">{progressPercent}%</span>\n </div>\n )}\n\n {steps.map((step, index) => {\n const isLast = index === steps.length - 1;\n\n return (\n <div key={step.id} className=\"relative flex gap-3\">\n {/* Connector line */}\n {!isLast && (\n <div\n className={cn(\n 'absolute left-[11px] top-6 w-0.5 h-[calc(100%-12px)]',\n step.status === 'complete' ? 'bg-emerald-500' : 'bg-muted'\n )}\n />\n )}\n\n {/* Step indicator */}\n <div className=\"relative z-10 shrink-0\">\n <StepIndicator status={step.status} index={index} />\n </div>\n\n {/* Step content */}\n <div className={cn('min-w-0 flex-1', !isLast && 'pb-4')}>\n <p\n className={cn(\n 'font-medium text-sm',\n step.status === 'pending' && 'text-muted-foreground'\n )}\n >\n {step.label}\n </p>\n {step.description && !compact && (\n <p className=\"mt-0.5 text-xs text-muted-foreground\">{step.description}</p>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n","'use client';\n\nimport { motion } from 'motion/react';\nimport { cn, getSentimentColor, getSentimentBgColor } from '../../core/utils';\nimport type { SentimentScore } from '../../core/types';\n\nexport interface SentimentDisplayProps {\n sentiment: SentimentScore;\n /** Show the per-emotion breakdown bars. */\n showEmotions?: boolean;\n /** Show the numeric confidence. */\n showConfidence?: boolean;\n className?: string;\n}\n\nexport function SentimentDisplay({\n sentiment,\n showEmotions = true,\n showConfidence = true,\n className,\n}: SentimentDisplayProps) {\n // Map overall score (-1..1) to a 0..100 position on the meter.\n const position = ((sentiment.overall + 1) / 2) * 100;\n\n return (\n <div className={cn('rounded-lg border bg-card p-4', className)}>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm font-medium\">Sentiment</span>\n <span\n className={cn(\n 'rounded-full px-2 py-0.5 text-xs font-medium capitalize',\n getSentimentBgColor(sentiment.label),\n getSentimentColor(sentiment.label)\n )}\n >\n {sentiment.label}\n </span>\n </div>\n\n {/* Meter */}\n <div className=\"mt-3\">\n <div className=\"relative h-2 w-full overflow-hidden rounded-full bg-gradient-to-r from-red-500/40 via-muted to-emerald-500/40\">\n <motion.div\n initial={{ left: '50%' }}\n animate={{ left: `${position}%` }}\n transition={{ type: 'spring', stiffness: 120, damping: 18 }}\n className=\"absolute top-1/2 size-3 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-background bg-foreground shadow\"\n />\n </div>\n <div className=\"mt-1 flex justify-between text-[10px] text-muted-foreground\">\n <span>Negative</span>\n <span>Neutral</span>\n <span>Positive</span>\n </div>\n </div>\n\n {showConfidence && (\n <p className=\"mt-2 text-xs text-muted-foreground\">\n Confidence: {Math.round(sentiment.confidence * 100)}%\n </p>\n )}\n\n {showEmotions && sentiment.emotions && sentiment.emotions.length > 0 && (\n <div className=\"mt-3 space-y-2\">\n {sentiment.emotions.map((emotion) => (\n <div key={emotion.emotion} className=\"space-y-1\">\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"capitalize text-muted-foreground\">{emotion.emotion}</span>\n <span className=\"tabular-nums\">{Math.round(emotion.score * 100)}%</span>\n </div>\n <div className=\"h-1.5 w-full overflow-hidden rounded-full bg-muted\">\n <motion.div\n initial={{ width: 0 }}\n animate={{ width: `${emotion.score * 100}%` }}\n transition={{ duration: 0.4 }}\n className=\"h-full rounded-full\"\n style={{ backgroundColor: emotion.color ?? 'hsl(var(--foreground))' }}\n />\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nexport default SentimentDisplay;\n","'use client';\n\nimport { useMemo, useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n ImageIcon,\n FileIcon,\n FileTextIcon,\n LinkIcon,\n PlayIcon,\n DownloadIcon,\n ExternalLinkIcon,\n XIcon,\n} from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Button } from '../../ui/button';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport type MediaKind = 'image' | 'video' | 'file' | 'link';\n\nexport interface MediaItem {\n id: string;\n kind: MediaKind;\n /** Title/filename shown under or over the item. */\n label: string;\n /** Thumbnail/preview image URL (images & video). */\n thumbnailUrl?: string;\n /** Full-size/source URL for preview, download, or open. */\n url?: string;\n /** Secondary line (size, domain, author, date, etc.). */\n meta?: string;\n /** Free-form group key used by the grouping tabs. */\n group?: string;\n /** Solid background swatch for thumbnail-less items. */\n swatchClassName?: string;\n}\n\nexport interface MediaGalleryProps {\n items: MediaItem[];\n /** Group items into filter tabs by `group` (falls back to kind). */\n groupBy?: 'group' | 'kind' | 'none';\n /** Number of columns in the image/video grid. */\n columns?: 2 | 3 | 4;\n /** Open a lightbox/preview when an item is activated. */\n enablePreview?: boolean;\n /** Per-item primary action (download/open). Renders a button when provided. */\n onItemAction?: (item: MediaItem) => void;\n /** Item click handler (fires alongside preview). */\n onItemClick?: (item: MediaItem) => void;\n /** Footer \"view all\" action. */\n onViewAll?: () => void;\n className?: string;\n}\n\nconst kindIcon: Record<MediaKind, typeof FileIcon> = {\n image: ImageIcon,\n video: PlayIcon,\n file: FileTextIcon,\n link: LinkIcon,\n};\n\nfunction isGridKind(kind: MediaKind) {\n return kind === 'image' || kind === 'video';\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function MediaGallery({\n items,\n groupBy = 'group',\n columns = 3,\n enablePreview = true,\n onItemAction,\n onItemClick,\n onViewAll,\n className,\n}: MediaGalleryProps) {\n const groups = useMemo(() => {\n if (groupBy === 'none') return [] as string[];\n const key = groupBy === 'kind' ? 'kind' : 'group';\n const seen: string[] = [];\n for (const item of items) {\n const value = key === 'kind' ? item.kind : item.group ?? item.kind;\n if (!seen.includes(value)) seen.push(value);\n }\n return seen;\n }, [items, groupBy]);\n\n const [activeGroup, setActiveGroup] = useState<string | null>(groups[0] ?? null);\n const [previewItem, setPreviewItem] = useState<MediaItem | null>(null);\n\n const visibleItems = useMemo(() => {\n if (groupBy === 'none' || activeGroup === null) return items;\n const key = groupBy === 'kind' ? 'kind' : 'group';\n return items.filter((item) =>\n key === 'kind' ? item.kind === activeGroup : (item.group ?? item.kind) === activeGroup\n );\n }, [items, groupBy, activeGroup]);\n\n const gridCols = { 2: 'grid-cols-2', 3: 'grid-cols-3', 4: 'grid-cols-4' };\n\n const handleActivate = (item: MediaItem) => {\n onItemClick?.(item);\n if (enablePreview && isGridKind(item.kind)) setPreviewItem(item);\n };\n\n const gridItems = visibleItems.filter((i) => isGridKind(i.kind));\n const listItems = visibleItems.filter((i) => !isGridKind(i.kind));\n\n return (\n <div className={cn('flex flex-col overflow-hidden rounded-lg border bg-card', className)}>\n {/* Group tabs */}\n {groupBy !== 'none' && groups.length > 0 && (\n <div className=\"flex border-b\">\n {groups.map((group) => {\n const count = items.filter((item) =>\n (groupBy === 'kind' ? item.kind : item.group ?? item.kind) === group\n ).length;\n const active = activeGroup === group;\n return (\n <button\n key={group}\n type=\"button\"\n onClick={() => setActiveGroup(group)}\n className={cn(\n 'flex flex-1 items-center justify-center gap-1.5 px-3 py-2.5 text-xs capitalize transition-colors',\n active\n ? 'border-b-2 border-foreground font-medium text-foreground'\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n {group}\n <span\n className={cn(\n 'rounded-full px-1.5 py-0.5 text-[10px] tabular-nums',\n active ? 'bg-foreground text-background' : 'bg-muted text-muted-foreground'\n )}\n >\n {count}\n </span>\n </button>\n );\n })}\n </div>\n )}\n\n {/* Content */}\n <div className=\"flex-1 overflow-y-auto\">\n {gridItems.length > 0 && (\n <div className=\"p-3\">\n <div className={cn('grid gap-1.5', gridCols[columns])}>\n {gridItems.map((item) => (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => handleActivate(item)}\n className=\"group relative block\"\n >\n <div\n className={cn(\n 'flex aspect-square items-center justify-center overflow-hidden rounded-md',\n item.swatchClassName ?? 'bg-muted'\n )}\n >\n {item.thumbnailUrl ? (\n <img\n src={item.thumbnailUrl}\n alt={item.label}\n className=\"size-full object-cover\"\n />\n ) : (\n (() => {\n const Icon = kindIcon[item.kind];\n return <Icon className=\"size-5 text-muted-foreground/40\" />;\n })()\n )}\n {item.kind === 'video' && (\n <span className=\"absolute inset-0 flex items-center justify-center\">\n <span className=\"flex size-8 items-center justify-center rounded-full bg-black/50\">\n <PlayIcon className=\"size-4 text-white\" />\n </span>\n </span>\n )}\n </div>\n <div className=\"pointer-events-none absolute inset-0 flex flex-col justify-end rounded-md p-2 opacity-0 transition-all group-hover:bg-black/40 group-hover:opacity-100\">\n <span className=\"truncate text-left font-medium text-[10px] text-white\">\n {item.label}\n </span>\n {item.meta && <span className=\"text-left text-[10px] text-white/70\">{item.meta}</span>}\n </div>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {listItems.map((item, index) => {\n const Icon = kindIcon[item.kind];\n const isLast = index === listItems.length - 1;\n return (\n <div\n key={item.id}\n onClick={() => handleActivate(item)}\n className={cn(\n 'flex items-center gap-3 px-4 py-3 transition-colors',\n onItemClick && 'cursor-pointer hover:bg-muted/50',\n !isLast && 'border-b'\n )}\n >\n <div className=\"flex size-9 shrink-0 items-center justify-center rounded-md bg-muted/50\">\n <Icon className=\"size-4 text-muted-foreground\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <span className=\"block truncate font-medium text-sm\">{item.label}</span>\n {item.meta && <p className=\"mt-0.5 truncate text-muted-foreground text-xs\">{item.meta}</p>}\n </div>\n {onItemAction && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 shrink-0 text-muted-foreground hover:text-foreground\"\n onClick={(e) => {\n e.stopPropagation();\n onItemAction(item);\n }}\n >\n {item.kind === 'link' ? (\n <ExternalLinkIcon className=\"size-3.5\" />\n ) : (\n <DownloadIcon className=\"size-3.5\" />\n )}\n </Button>\n )}\n </div>\n );\n })}\n\n {visibleItems.length === 0 && (\n <div className=\"p-8 text-center text-sm text-muted-foreground\">No items</div>\n )}\n </div>\n\n {/* Footer */}\n {onViewAll && (\n <div className=\"flex items-center justify-between border-t px-4 py-3\">\n <span className=\"text-muted-foreground text-xs\">{visibleItems.length} items</span>\n <Button variant=\"outline\" size=\"sm\" className=\"h-7 text-xs\" onClick={onViewAll}>\n View all\n </Button>\n </div>\n )}\n\n {/* Lightbox / preview */}\n <AnimatePresence>\n {previewItem && (\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n onClick={() => setPreviewItem(null)}\n className=\"absolute inset-0 z-20 flex items-center justify-center bg-black/70 p-6\"\n >\n <motion.div\n initial={{ scale: 0.96 }}\n animate={{ scale: 1 }}\n exit={{ scale: 0.96 }}\n onClick={(e) => e.stopPropagation()}\n className=\"relative max-h-full w-full max-w-lg overflow-hidden rounded-lg bg-card\"\n >\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"absolute right-2 top-2 z-10 size-7\"\n onClick={() => setPreviewItem(null)}\n >\n <XIcon className=\"size-4\" />\n </Button>\n <div className=\"flex aspect-video items-center justify-center bg-muted\">\n {previewItem.thumbnailUrl ? (\n <img\n src={previewItem.url ?? previewItem.thumbnailUrl}\n alt={previewItem.label}\n className=\"size-full object-contain\"\n />\n ) : (\n <ImageIcon className=\"size-10 text-muted-foreground/30\" />\n )}\n </div>\n <div className=\"flex items-center justify-between gap-3 px-4 py-3\">\n <div className=\"min-w-0\">\n <p className=\"truncate font-medium text-sm\">{previewItem.label}</p>\n {previewItem.meta && (\n <p className=\"truncate text-muted-foreground text-xs\">{previewItem.meta}</p>\n )}\n </div>\n {onItemAction && (\n <Button size=\"sm\" className=\"h-7 gap-1.5 text-xs\" onClick={() => onItemAction(previewItem)}>\n <DownloadIcon className=\"size-3\" />\n Save\n </Button>\n )}\n </div>\n </motion.div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n}\n\nexport default MediaGallery;\n","'use client';\n\nimport * as React from 'react';\nimport * as ProgressPrimitive from '@radix-ui/react-progress';\nimport { cn } from '../core/utils';\n\nconst Progress = React.forwardRef<\n React.ComponentRef<typeof ProgressPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>\n>(({ className, value, ...props }, ref) => (\n <ProgressPrimitive.Root\n ref={ref}\n className={cn(\n \"relative h-2 w-full overflow-hidden rounded-full bg-primary/20\",\n className\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className=\"h-full w-full flex-1 bg-primary transition-all\"\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n));\nProgress.displayName = ProgressPrimitive.Root.displayName;\n\nexport { Progress };\n","'use client';\n\nimport { motion } from 'motion/react';\nimport { cn } from '../../core/utils';\nimport { Badge } from '../../ui/badge';\nimport { Progress } from '../../ui/progress';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface AllocationSegment {\n id: string;\n /** Segment label. */\n label: string;\n /** Optional secondary descriptor. */\n description?: string;\n /** Weight (0-100). Rows are sorted as provided. */\n weight: number;\n /** Optional formatted magnitude (e.g. \"$50K\", \"1.2k units\"). */\n amount?: string;\n /** Optional signed delta shown with tone (e.g. \"+12.3%\"). */\n delta?: number;\n /** Categorical tag rendered as a badge. */\n tag?: string;\n /** Tag tone. */\n tone?: 'neutral' | 'positive' | 'warning' | 'negative';\n /** Bar fill color class (defaults to a palette by index). */\n colorClassName?: string;\n}\n\nexport interface AllocationSummaryStat {\n label: string;\n value: string;\n}\n\nexport interface AllocationBreakdownProps {\n segments: AllocationSegment[];\n /** Optional headline stats grid shown above the rows. */\n summary?: AllocationSummaryStat[];\n /** Show the proportional stacked bar at the top. */\n showStackedBar?: boolean;\n className?: string;\n}\n\nconst toneText: Record<string, string> = {\n neutral: 'text-muted-foreground',\n positive: 'text-emerald-600',\n warning: 'text-amber-600',\n negative: 'text-red-600',\n};\n\nconst palette = [\n 'bg-foreground',\n 'bg-blue-500',\n 'bg-emerald-500',\n 'bg-amber-500',\n 'bg-violet-500',\n 'bg-rose-500',\n];\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function AllocationBreakdown({\n segments,\n summary,\n showStackedBar = true,\n className,\n}: AllocationBreakdownProps) {\n const total = segments.reduce((sum, s) => sum + s.weight, 0) || 1;\n\n return (\n <div className={cn('rounded-lg border bg-card', className)}>\n {summary && summary.length > 0 && (\n <div\n className=\"grid gap-3 border-b p-4\"\n style={{ gridTemplateColumns: `repeat(${summary.length}, minmax(0, 1fr))` }}\n >\n {summary.map((stat) => (\n <div key={stat.label} className=\"rounded-md bg-muted/50 p-2\">\n <span className=\"text-xs text-muted-foreground\">{stat.label}</span>\n <p className=\"mt-1 text-lg font-semibold tabular-nums\">{stat.value}</p>\n </div>\n ))}\n </div>\n )}\n\n <div className=\"space-y-3 p-4\">\n {showStackedBar && (\n <div className=\"flex h-2.5 w-full overflow-hidden rounded-full bg-muted\">\n {segments.map((segment, index) => (\n <motion.div\n key={segment.id}\n initial={{ width: 0 }}\n animate={{ width: `${(segment.weight / total) * 100}%` }}\n transition={{ duration: 0.4, delay: index * 0.05 }}\n className={cn(segment.colorClassName ?? palette[index % palette.length])}\n />\n ))}\n </div>\n )}\n\n <div className=\"space-y-2.5\">\n {segments.map((segment, index) => (\n <div key={segment.id} className=\"rounded-md border bg-card p-2.5\">\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <span\n className={cn(\n 'size-2.5 shrink-0 rounded-full',\n segment.colorClassName ?? palette[index % palette.length]\n )}\n />\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"truncate text-sm font-medium\">{segment.label}</span>\n {segment.tag && (\n <Badge variant=\"secondary\" className={cn('text-xs', toneText[segment.tone ?? 'neutral'])}>\n {segment.tag}\n </Badge>\n )}\n </div>\n {segment.description && (\n <p className=\"mt-0.5 truncate text-xs text-muted-foreground\">\n {segment.description}\n </p>\n )}\n </div>\n </div>\n <div className=\"shrink-0 text-right\">\n {segment.amount && (\n <p className=\"text-sm font-medium tabular-nums\">{segment.amount}</p>\n )}\n {segment.delta !== undefined && (\n <p\n className={cn(\n 'text-xs tabular-nums',\n segment.delta >= 0 ? 'text-emerald-600' : 'text-red-600'\n )}\n >\n {segment.delta > 0 ? '+' : ''}\n {segment.delta}%\n </p>\n )}\n </div>\n </div>\n <div className=\"mt-2\">\n <div className=\"flex items-center justify-between text-xs text-muted-foreground\">\n <span>Weight</span>\n <span className=\"tabular-nums\">{segment.weight}%</span>\n </div>\n <Progress value={segment.weight} className=\"mt-1 h-1.5\" />\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n}\n\nexport default AllocationBreakdown;\n","'use client';\n\nimport { motion } from 'motion/react';\nimport { ArrowDownIcon, ArrowUpIcon } from 'lucide-react';\nimport { cn } from '../../core/utils';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport type TrendTone = 'positive' | 'negative' | 'neutral';\n\nexport interface AnalyticsTrend {\n /** Magnitude shown next to the arrow (e.g. 12.4 → \"12.4%\"). */\n value: number;\n /** Visual direction of the arrow. Defaults to value sign. */\n direction?: 'up' | 'down';\n /** Color treatment; lets \"down is good\" cases stay green. */\n tone?: TrendTone;\n}\n\nexport interface AnalyticsMetric {\n id: string;\n label: string;\n value: string | number;\n /** Optional suffix rendered after the value (e.g. \"/5\"). */\n unit?: string;\n icon?: React.ReactNode;\n trend?: AnalyticsTrend;\n}\n\nexport interface AnalyticsDistributionSegment {\n id: string;\n label: string;\n /** Percentage of the whole (0–100). */\n value: number;\n /** Tailwind background class for bar + legend dot. */\n colorClassName?: string;\n}\n\nexport interface AnalyticsHighlight {\n label: string;\n /** Big formatted value, e.g. \"87%\". */\n value: string;\n /** Progress fill 0–100. Defaults to a numeric parse of value. */\n progress?: number;\n icon?: React.ReactNode;\n trend?: AnalyticsTrend;\n colorClassName?: string;\n}\n\nexport interface AnalyticsBreakdownRow {\n id: string;\n label: string;\n /** Bar fill 0–100. */\n percentage: number;\n /** Secondary count/measure rendered on the right. */\n count?: string | number;\n trend?: AnalyticsTrend;\n}\n\nexport interface AnalyticsRankedRow {\n id: string;\n label: string;\n /** Bar fill 0–100. */\n percentage: number;\n /** Right-aligned value label (e.g. \"0.8s\"). */\n value: string;\n colorClassName?: string;\n}\n\nexport interface AnalyticsRecentItem {\n id: string;\n label: string;\n /** Category/secondary label. */\n category?: string;\n /** Status dot tone. */\n tone?: TrendTone;\n /** Right-aligned meta fields (e.g. [\"12 msgs\", \"4m 22s\"]). */\n meta?: string[];\n /** Optional 0–5 rating rendered as filled/empty dots. */\n rating?: number;\n /** Relative time label (e.g. \"5 min ago\"). */\n time?: string;\n}\n\nexport interface AnalyticsDashboardProps {\n /** Header title. */\n title?: string;\n /** Range pill text (e.g. \"Last 30 days\"). */\n range?: string;\n /** Right-aligned summary count text (e.g. \"2,847 records\"). */\n summary?: string;\n /** Top KPI cards (typically 3). */\n metrics?: AnalyticsMetric[];\n /** Distribution segmented bar. */\n distribution?: AnalyticsDistributionSegment[];\n /** Label for the distribution block. */\n distributionLabel?: string;\n /** Highlighted single % metric beside the distribution. */\n highlight?: AnalyticsHighlight;\n /** Left \"breakdown\" list. */\n breakdown?: AnalyticsBreakdownRow[];\n breakdownLabel?: string;\n /** Right \"ranked / percentile\" list. */\n ranked?: AnalyticsRankedRow[];\n rankedLabel?: string;\n /** Bottom recent-items list. */\n recentItems?: AnalyticsRecentItem[];\n recentLabel?: string;\n className?: string;\n}\n\n// ============================================================================\n// HELPERS\n// ============================================================================\n\nconst TONE_DOT: Record<TrendTone, string> = {\n positive: 'bg-emerald-500',\n negative: 'bg-red-500',\n neutral: 'bg-muted-foreground/40',\n};\n\nfunction resolveTrend(trend: AnalyticsTrend) {\n const direction = trend.direction ?? (trend.value < 0 ? 'down' : 'up');\n const tone: TrendTone =\n trend.tone ?? (direction === 'up' ? 'positive' : 'negative');\n return { direction, tone };\n}\n\nfunction TrendIndicator({ trend }: { trend: AnalyticsTrend }) {\n const { direction, tone } = resolveTrend(trend);\n return (\n <span\n className={cn(\n 'flex items-center gap-0.5 text-[11px] tabular-nums',\n tone === 'positive' && 'text-emerald-600',\n tone === 'negative' && 'text-red-600',\n tone === 'neutral' && 'text-muted-foreground'\n )}\n >\n {direction === 'up' ? (\n <ArrowUpIcon className=\"size-2.5\" />\n ) : (\n <ArrowDownIcon className=\"size-2.5\" />\n )}\n {Math.abs(trend.value)}%\n </span>\n );\n}\n\nfunction numericFromValue(value: string): number {\n const parsed = Number.parseFloat(value.replace(/[^0-9.]/g, ''));\n return Number.isFinite(parsed) ? Math.min(100, Math.max(0, parsed)) : 0;\n}\n\n// ============================================================================\n// DEFAULTS (abstract / generic)\n// ============================================================================\n\nconst defaultMetrics: AnalyticsMetric[] = [\n { id: 'm1', label: 'Metric One', value: '2,847', trend: { value: 12.4 } },\n { id: 'm2', label: 'Metric Two', value: '1.8s', trend: { value: 8.2, direction: 'down', tone: 'positive' } },\n { id: 'm3', label: 'Metric Three', value: '4.2', unit: '/5', trend: { value: 3.1 } },\n];\n\nconst defaultDistribution: AnalyticsDistributionSegment[] = [\n { id: 'a', label: 'Segment A', value: 68, colorClassName: 'bg-emerald-500' },\n { id: 'b', label: 'Segment B', value: 24, colorClassName: 'bg-muted-foreground/30' },\n { id: 'c', label: 'Segment C', value: 8, colorClassName: 'bg-red-500' },\n];\n\nconst defaultHighlight: AnalyticsHighlight = {\n label: 'Highlight',\n value: '87%',\n trend: { value: 2.8 },\n colorClassName: 'bg-emerald-500',\n};\n\nconst defaultBreakdown: AnalyticsBreakdownRow[] = [\n { id: 'b1', label: 'Category A', percentage: 31, count: 892, trend: { value: 2.1 } },\n { id: 'b2', label: 'Category B', percentage: 24, count: 684 },\n { id: 'b3', label: 'Category C', percentage: 19, count: 541, trend: { value: 1.4 } },\n { id: 'b4', label: 'Category D', percentage: 14, count: 398, trend: { value: 0.9, direction: 'down' } },\n { id: 'b5', label: 'Category E', percentage: 12, count: 332, trend: { value: 0.6 } },\n];\n\nconst defaultRanked: AnalyticsRankedRow[] = [\n { id: 'r1', label: 'Tier 1', percentage: 18, value: '0.8s' },\n { id: 'r2', label: 'Tier 2', percentage: 32, value: '1.4s' },\n { id: 'r3', label: 'Tier 3', percentage: 52, value: '2.3s' },\n { id: 'r4', label: 'Tier 4', percentage: 78, value: '3.8s' },\n { id: 'r5', label: 'Tier 5', percentage: 96, value: '6.1s' },\n];\n\nconst defaultRecentItems: AnalyticsRecentItem[] = [\n { id: 'i1', label: 'Item One', category: 'Category A', tone: 'positive', meta: ['12 units', '4m 22s'], rating: 5, time: '5 min ago' },\n { id: 'i2', label: 'Item Two', category: 'Category C', tone: 'positive', meta: ['8 units', '2m 48s'], rating: 4, time: '18 min ago' },\n { id: 'i3', label: 'Item Three', category: 'Category B', tone: 'neutral', meta: ['5 units', '1m 15s'], rating: 3, time: '32 min ago' },\n { id: 'i4', label: 'Item Four', category: 'Category E', tone: 'positive', meta: ['15 units', '8m 05s'], rating: 5, time: '1 hr ago' },\n];\n\n// ============================================================================\n// SUB-BLOCKS\n// ============================================================================\n\nfunction MetricCard({ metric, index }: { metric: AnalyticsMetric; index: number }) {\n return (\n <motion.div\n initial={{ opacity: 0, y: 6 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: index * 0.04 }}\n className=\"px-5 py-4\"\n >\n <div className=\"flex items-center gap-2 text-muted-foreground\">\n {metric.icon}\n <span className=\"text-xs\">{metric.label}</span>\n </div>\n <div className=\"mt-2 flex items-baseline gap-2\">\n <span className=\"font-semibold text-2xl tabular-nums\">{metric.value}</span>\n {metric.unit && <span className=\"text-muted-foreground text-xs\">{metric.unit}</span>}\n {metric.trend && <TrendIndicator trend={metric.trend} />}\n </div>\n </motion.div>\n );\n}\n\nfunction DistributionBlock({\n label,\n segments,\n}: {\n label: string;\n segments: AnalyticsDistributionSegment[];\n}) {\n return (\n <div className=\"px-5 py-4\">\n <span className=\"font-medium text-muted-foreground text-xs\">{label}</span>\n <div className=\"mt-3 flex h-3 overflow-hidden rounded-full\">\n {segments.map((seg) => (\n <div\n key={seg.id}\n className={cn('h-full', seg.colorClassName ?? 'bg-foreground/40')}\n style={{ width: `${seg.value}%` }}\n />\n ))}\n </div>\n <div className=\"mt-3 flex flex-wrap items-center gap-x-4 gap-y-1.5\">\n {segments.map((seg) => (\n <span key={seg.id} className=\"flex items-center gap-1.5 text-xs\">\n <span className={cn('size-1.5 rounded-full', seg.colorClassName ?? 'bg-foreground/40')} />\n <span className=\"text-muted-foreground\">{seg.label}</span>\n <span className=\"font-mono tabular-nums\">{seg.value}%</span>\n </span>\n ))}\n </div>\n </div>\n );\n}\n\nfunction HighlightBlock({ highlight }: { highlight: AnalyticsHighlight }) {\n const progress = highlight.progress ?? numericFromValue(highlight.value);\n return (\n <div className=\"px-5 py-4\">\n <div className=\"flex items-center gap-2 text-muted-foreground\">\n {highlight.icon}\n <span className=\"text-xs\">{highlight.label}</span>\n </div>\n <div className=\"mt-2 flex items-baseline gap-2\">\n <span className=\"font-semibold text-3xl tabular-nums\">{highlight.value}</span>\n {highlight.trend && <TrendIndicator trend={highlight.trend} />}\n </div>\n <div className=\"mt-3 h-1.5 overflow-hidden rounded-full bg-muted\">\n <motion.div\n initial={{ width: 0 }}\n animate={{ width: `${progress}%` }}\n transition={{ duration: 0.4 }}\n className={cn('h-full rounded-full', highlight.colorClassName ?? 'bg-emerald-500')}\n />\n </div>\n </div>\n );\n}\n\nfunction BreakdownList({\n label,\n rows,\n}: {\n label: string;\n rows: AnalyticsBreakdownRow[];\n}) {\n return (\n <div className=\"px-5 py-4\">\n <span className=\"font-medium text-muted-foreground text-xs\">{label}</span>\n <div className=\"mt-3 space-y-2.5\">\n {rows.map((row) => (\n <div key={row.id} className=\"flex items-center gap-3\">\n <span className=\"w-20 shrink-0 truncate text-xs @md:w-28\">{row.label}</span>\n <div className=\"h-1.5 flex-1 overflow-hidden rounded-full bg-muted\">\n <div className=\"h-full rounded-full bg-muted-foreground/40\" style={{ width: `${row.percentage}%` }} />\n </div>\n <span className=\"w-8 shrink-0 text-right text-muted-foreground text-xs tabular-nums\">{row.percentage}%</span>\n {row.count !== undefined && (\n <span className=\"w-10 shrink-0 text-right text-xs tabular-nums\">{row.count}</span>\n )}\n <span className=\"w-3 shrink-0\">\n {row.trend && <TrendIndicator trend={row.trend} />}\n </span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nfunction RankedList({\n label,\n rows,\n}: {\n label: string;\n rows: AnalyticsRankedRow[];\n}) {\n return (\n <div className=\"px-5 py-4\">\n <span className=\"font-medium text-muted-foreground text-xs\">{label}</span>\n <div className=\"mt-3 space-y-2.5\">\n {rows.map((row) => (\n <div key={row.id} className=\"flex items-center gap-3\">\n <span className=\"w-10 shrink-0 text-muted-foreground text-xs\">{row.label}</span>\n <div className=\"h-1.5 flex-1 overflow-hidden rounded-full bg-muted\">\n <div\n className={cn('h-full rounded-full', row.colorClassName ?? 'bg-sky-400/70')}\n style={{ width: `${row.percentage}%` }}\n />\n </div>\n <span className=\"w-12 shrink-0 text-right text-xs tabular-nums\">{row.value}</span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nfunction RatingDots({ rating }: { rating: number }) {\n return (\n <span className=\"flex items-center gap-0.5\">\n {Array.from({ length: 5 }).map((_, i) => (\n <span\n key={i}\n className={cn(\n 'size-1.5 rounded-full',\n i < Math.round(rating) ? 'bg-foreground' : 'bg-muted-foreground/25'\n )}\n />\n ))}\n </span>\n );\n}\n\nfunction RecentList({\n label,\n items,\n}: {\n label: string;\n items: AnalyticsRecentItem[];\n}) {\n return (\n <div className=\"px-5 py-4\">\n <span className=\"font-medium text-muted-foreground text-xs\">{label}</span>\n <div className=\"mt-3 divide-y\">\n {items.map((item) => (\n <div\n key={item.id}\n className=\"flex flex-col gap-1.5 py-2.5 @md:flex-row @md:items-center @md:gap-3\"\n >\n <div className=\"flex min-w-0 flex-1 items-center gap-2.5\">\n <span className={cn('size-1.5 shrink-0 rounded-full', TONE_DOT[item.tone ?? 'neutral'])} />\n <span className=\"truncate font-medium text-sm\">{item.label}</span>\n {item.category && (\n <span className=\"truncate text-muted-foreground text-xs\">{item.category}</span>\n )}\n </div>\n <div className=\"flex flex-wrap items-center gap-x-3 gap-y-1 pl-4 text-muted-foreground text-xs tabular-nums @md:justify-end @md:pl-0\">\n {item.meta?.map((m, i) => (\n <span key={i}>{m}</span>\n ))}\n {item.rating !== undefined && <RatingDots rating={item.rating} />}\n {item.time && <span className=\"whitespace-nowrap\">{item.time}</span>}\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\n/**\n * AnalyticsDashboard renders a polished, fully responsive analytics report:\n * a header with range pill + summary, KPI cards, a distribution bar + a\n * highlighted metric, a two-column breakdown/ranked pair, and a recent-items\n * list. Every multi-column row collapses to a single column on narrow surfaces\n * (panel/widget/split). All content is prop-driven and industry-agnostic.\n */\nexport function AnalyticsDashboard({\n title = 'Analytics',\n range = 'Last 30 days',\n summary,\n metrics = defaultMetrics,\n distribution = defaultDistribution,\n distributionLabel = 'Distribution',\n highlight = defaultHighlight,\n breakdown = defaultBreakdown,\n breakdownLabel = 'Breakdown',\n ranked = defaultRanked,\n rankedLabel = 'Ranked',\n recentItems = defaultRecentItems,\n recentLabel = 'Recent items',\n className,\n}: AnalyticsDashboardProps) {\n return (\n <div className={cn('@container overflow-hidden rounded-xl border bg-card', className)}>\n {/* Header */}\n <div className=\"flex flex-wrap items-center justify-between gap-2 px-5 pt-5 pb-4\">\n <div className=\"flex items-center gap-3\">\n <h3 className=\"font-semibold text-base\">{title}</h3>\n {range && (\n <span className=\"rounded-full bg-muted px-2.5 py-0.5 text-muted-foreground text-xs\">\n {range}\n </span>\n )}\n </div>\n {summary && <span className=\"text-muted-foreground text-sm\">{summary}</span>}\n </div>\n\n {/* KPI cards */}\n {metrics.length > 0 && (\n <div className=\"grid grid-cols-1 border-t divide-y @md:grid-cols-3 @md:divide-x @md:divide-y-0\">\n {metrics.map((metric, i) => (\n <MetricCard key={metric.id} metric={metric} index={i} />\n ))}\n </div>\n )}\n\n {/* Distribution + highlight */}\n {(distribution.length > 0 || highlight) && (\n <div className=\"grid grid-cols-1 border-t divide-y @2xl:grid-cols-3 @2xl:divide-x @2xl:divide-y-0\">\n {distribution.length > 0 && (\n <div className=\"@2xl:col-span-2\">\n <DistributionBlock label={distributionLabel} segments={distribution} />\n </div>\n )}\n {highlight && <HighlightBlock highlight={highlight} />}\n </div>\n )}\n\n {/* Breakdown + ranked */}\n {(breakdown.length > 0 || ranked.length > 0) && (\n <div className=\"grid grid-cols-1 border-t divide-y @xl:grid-cols-2 @xl:divide-x @xl:divide-y-0\">\n {breakdown.length > 0 && <BreakdownList label={breakdownLabel} rows={breakdown} />}\n {ranked.length > 0 && <RankedList label={rankedLabel} rows={ranked} />}\n </div>\n )}\n\n {/* Recent items */}\n {recentItems.length > 0 && (\n <div className=\"border-t\">\n <RecentList label={recentLabel} items={recentItems} />\n </div>\n )}\n </div>\n );\n}\n\nexport default AnalyticsDashboard;\n","'use client';\n\nimport { useState } from 'react';\nimport { motion } from 'motion/react';\nimport {\n ImageIcon,\n SparklesIcon,\n WandIcon,\n DownloadIcon,\n CopyIcon,\n ShuffleIcon,\n ArrowUpRightIcon,\n Grid3X3Icon,\n LayoutGridIcon,\n} from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Button } from '../../ui/button';\nimport { Input } from '../../ui/input';\nimport { Badge } from '../../ui/badge';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface StylePreset {\n id: string;\n label: string;\n description?: string;\n}\n\nexport interface AspectRatio {\n id: string;\n label: string;\n value: string;\n dimensions: string;\n}\n\nexport interface GeneratedImage {\n id: string;\n url?: string;\n prompt: string;\n style?: string;\n aspectRatio?: string;\n seed?: string;\n model?: string;\n steps?: number;\n timestamp: Date;\n isFavorite?: boolean;\n}\n\nexport interface ImageGeneratorProps {\n /** Available style presets */\n stylePresets?: StylePreset[];\n /** Available aspect ratios */\n aspectRatios?: AspectRatio[];\n /** Initial prompt value */\n initialPrompt?: string;\n /** Quality options */\n qualityOptions?: Array<{ id: string; label: string }>;\n /** Generated images */\n images?: GeneratedImage[];\n /** Callback when generation is requested */\n onGenerate?: (params: {\n prompt: string;\n style: string;\n aspectRatio: string;\n quality: string;\n }) => void;\n /** Callback when image is selected */\n onSelectImage?: (image: GeneratedImage) => void;\n /** Callback when image is downloaded */\n onDownload?: (image: GeneratedImage) => void;\n /** Callback when seed is copied */\n onCopySeed?: (seed: string) => void;\n /** Callback when shuffle/regenerate is requested */\n onShuffle?: (image: GeneratedImage) => void;\n /** Loading state */\n isGenerating?: boolean;\n /** Custom class name */\n className?: string;\n}\n\n// ============================================================================\n// DEFAULT VALUES\n// ============================================================================\n\nconst defaultStylePresets: StylePreset[] = [\n { id: 'photorealistic', label: 'Photorealistic', description: 'Lifelike photography' },\n { id: 'illustration', label: 'Illustration', description: 'Digital art style' },\n { id: '3d', label: '3D Render', description: 'Cinema 4D look' },\n { id: 'anime', label: 'Anime', description: 'Japanese animation' },\n { id: 'oil-painting', label: 'Oil Painting', description: 'Classical fine art' },\n { id: 'pixel-art', label: 'Pixel Art', description: 'Retro 8-bit style' },\n];\n\nconst defaultAspectRatios: AspectRatio[] = [\n { id: '1:1', label: '1:1', value: '1024x1024', dimensions: '1024 x 1024' },\n { id: '16:9', label: '16:9', value: '1792x1024', dimensions: '1792 x 1024' },\n { id: '9:16', label: '9:16', value: '1024x1792', dimensions: '1024 x 1792' },\n { id: '4:3', label: '4:3', value: '1365x1024', dimensions: '1365 x 1024' },\n];\n\nconst defaultQualityOptions = [\n { id: 'standard', label: 'Standard' },\n { id: 'hd', label: 'HD' },\n];\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function ImageGenerator({\n stylePresets = defaultStylePresets,\n aspectRatios = defaultAspectRatios,\n qualityOptions = defaultQualityOptions,\n initialPrompt = '',\n images = [],\n onGenerate,\n onSelectImage,\n onDownload,\n onCopySeed,\n onShuffle,\n isGenerating = false,\n className,\n}: ImageGeneratorProps) {\n const [prompt, setPrompt] = useState(initialPrompt);\n const [activeStyle, setActiveStyle] = useState(stylePresets[0]?.id || '');\n const [activeRatio, setActiveRatio] = useState(aspectRatios[0]?.id || '');\n const [quality, setQuality] = useState(qualityOptions[1]?.id || 'hd');\n const [selectedImageId, setSelectedImageId] = useState<string | null>(images[0]?.id || null);\n const [copiedSeed, setCopiedSeed] = useState(false);\n const [viewMode, setViewMode] = useState<'grid' | 'bento'>('bento');\n\n const selectedImage = images.find((img) => img.id === selectedImageId);\n\n const handleGenerate = () => {\n onGenerate?.({\n prompt,\n style: activeStyle,\n aspectRatio: activeRatio,\n quality,\n });\n };\n\n const handleCopySeed = () => {\n if (!selectedImage?.seed) return;\n onCopySeed?.(selectedImage.seed);\n setCopiedSeed(true);\n setTimeout(() => setCopiedSeed(false), 2000);\n };\n\n const handleSelectImage = (image: GeneratedImage) => {\n setSelectedImageId(image.id);\n onSelectImage?.(image);\n };\n\n return (\n <div className={cn('overflow-hidden rounded-lg border bg-card', className)}>\n {/* Prompt input */}\n <div className=\"flex items-center gap-2 border-b px-4 py-3\">\n <WandIcon className=\"size-4 shrink-0 text-muted-foreground\" />\n <Input\n value={prompt}\n onChange={(e) => setPrompt(e.target.value)}\n placeholder=\"Describe the image you want to generate...\"\n className=\"h-8 border-0 bg-transparent px-0 shadow-none focus-visible:ring-0\"\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleGenerate();\n }\n }}\n />\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"h-7 shrink-0 gap-1.5 text-xs\"\n onClick={handleGenerate}\n disabled={isGenerating || !prompt.trim()}\n >\n <SparklesIcon className=\"size-3\" />\n {isGenerating ? 'Generating...' : 'Generate'}\n </Button>\n </div>\n\n {/* Controls row */}\n <div className=\"flex flex-wrap items-center gap-3 border-b px-4 py-2.5\">\n {/* Style presets */}\n <div className=\"flex flex-wrap gap-1\">\n {stylePresets.map((style) => (\n <button\n key={style.id}\n type=\"button\"\n onClick={() => setActiveStyle(style.id)}\n className={cn(\n 'rounded-md px-2 py-1 text-xs transition-colors',\n activeStyle === style.id\n ? 'bg-muted font-medium text-foreground'\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n {style.label}\n </button>\n ))}\n </div>\n\n <div className=\"h-4 w-px bg-border\" />\n\n {/* Aspect ratio */}\n <div className=\"flex gap-1\">\n {aspectRatios.map((ratio) => (\n <button\n key={ratio.id}\n type=\"button\"\n onClick={() => setActiveRatio(ratio.id)}\n className={cn(\n 'rounded-md px-2 py-1 font-mono text-xs transition-colors',\n activeRatio === ratio.id\n ? 'bg-muted font-medium text-foreground'\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n {ratio.label}\n </button>\n ))}\n </div>\n\n <div className=\"h-4 w-px bg-border\" />\n\n {/* Quality toggle */}\n <div className=\"flex gap-1\">\n {qualityOptions.map((opt) => (\n <button\n key={opt.id}\n type=\"button\"\n onClick={() => setQuality(opt.id)}\n className={cn(\n 'rounded-md px-2 py-1 text-xs transition-colors',\n quality === opt.id\n ? 'bg-muted font-medium text-foreground'\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n {opt.label}\n </button>\n ))}\n </div>\n\n <div className=\"ml-auto flex gap-1\">\n <button\n type=\"button\"\n onClick={() => setViewMode('bento')}\n className={cn(\n 'rounded-md p-1.5 transition-colors',\n viewMode === 'bento' ? 'bg-muted' : 'hover:bg-muted/50'\n )}\n >\n <LayoutGridIcon className=\"size-4\" />\n </button>\n <button\n type=\"button\"\n onClick={() => setViewMode('grid')}\n className={cn(\n 'rounded-md p-1.5 transition-colors',\n viewMode === 'grid' ? 'bg-muted' : 'hover:bg-muted/50'\n )}\n >\n <Grid3X3Icon className=\"size-4\" />\n </button>\n </div>\n </div>\n\n {/* Image gallery */}\n {images.length > 0 ? (\n <div\n className={cn(\n 'grid gap-px bg-muted',\n viewMode === 'bento' ? 'grid-cols-3' : 'grid-cols-2 sm:grid-cols-3 md:grid-cols-4'\n )}\n >\n {images.map((image, index) => {\n const isSelected = selectedImageId === image.id;\n const isLarge = viewMode === 'bento' && (index === 0 || index === 4);\n\n return (\n <motion.div\n key={image.id}\n initial={{ opacity: 0, scale: 0.96 }}\n animate={{ opacity: 1, scale: 1 }}\n transition={{ duration: 0.25, delay: index * 0.06 }}\n className={cn(\n 'group relative bg-card',\n isLarge ? 'col-span-2 row-span-1' : 'col-span-1'\n )}\n >\n <button\n type=\"button\"\n onClick={() => handleSelectImage(image)}\n className=\"flex w-full items-center justify-center\"\n >\n <div\n className={cn(\n 'flex w-full items-center justify-center bg-muted/30',\n isLarge || viewMode === 'grid' ? 'aspect-square' : 'aspect-square',\n isSelected ? 'ring-2 ring-foreground ring-inset' : ''\n )}\n >\n {image.url ? (\n <img\n src={image.url}\n alt={image.prompt}\n className=\"h-full w-full object-cover\"\n />\n ) : (\n <div className=\"flex flex-col items-center gap-1\">\n <ImageIcon className=\"size-5 text-muted-foreground/20\" />\n <span className=\"text-[10px] text-muted-foreground/30\">\n Image {index + 1}\n </span>\n </div>\n )}\n </div>\n </button>\n\n {/* Hover overlay */}\n <div className=\"pointer-events-none absolute inset-0 flex items-end bg-black/0 p-2 opacity-0 transition-all duration-200 group-hover:pointer-events-auto group-hover:bg-black/40 group-hover:opacity-100\">\n <div className=\"flex w-full items-center justify-between\">\n <div>\n <span className=\"block font-medium text-white text-xs\">\n Image {index + 1}\n </span>\n {image.seed && (\n <span className=\"text-[10px] text-white/60\">Seed: {image.seed}</span>\n )}\n </div>\n <div className=\"flex gap-1\">\n {onDownload && (\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-6 text-white hover:bg-white/20\"\n onClick={(e) => {\n e.stopPropagation();\n onDownload(image);\n }}\n >\n <DownloadIcon className=\"size-3\" />\n </Button>\n )}\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-6 text-white hover:bg-white/20\"\n onClick={(e) => {\n e.stopPropagation();\n // Open in new tab\n }}\n >\n <ArrowUpRightIcon className=\"size-3\" />\n </Button>\n {onShuffle && (\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-6 text-white hover:bg-white/20\"\n onClick={(e) => {\n e.stopPropagation();\n onShuffle(image);\n }}\n >\n <ShuffleIcon className=\"size-3\" />\n </Button>\n )}\n </div>\n </div>\n </div>\n </motion.div>\n );\n })}\n </div>\n ) : (\n <div className=\"flex h-64 items-center justify-center text-muted-foreground\">\n <div className=\"flex flex-col items-center gap-2\">\n <ImageIcon className=\"size-8 opacity-50\" />\n <p className=\"text-sm\">Enter a prompt and click Generate</p>\n </div>\n </div>\n )}\n\n {/* Footer with generation metadata */}\n <div className=\"flex flex-wrap items-center justify-between gap-2 border-t px-4 py-3\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"text-muted-foreground text-xs\">{images.length} images generated</span>\n {activeStyle && (\n <Badge variant=\"secondary\" className=\"font-normal text-xs\">\n {stylePresets.find((s) => s.id === activeStyle)?.label}\n </Badge>\n )}\n {activeRatio && (\n <Badge variant=\"secondary\" className=\"font-mono font-normal text-xs\">\n {aspectRatios.find((r) => r.id === activeRatio)?.dimensions}\n </Badge>\n )}\n <Badge variant=\"secondary\" className=\"font-normal text-xs\">\n {qualityOptions.find((q) => q.id === quality)?.label}\n </Badge>\n </div>\n {selectedImage && (\n <div className=\"flex items-center gap-2\">\n {selectedImage.model && (\n <span className=\"text-muted-foreground text-xs\">\n {selectedImage.model}\n {selectedImage.steps ? ` · ${selectedImage.steps} steps` : ''}\n </span>\n )}\n {selectedImage.seed && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 gap-1 px-2 text-muted-foreground text-xs\"\n onClick={handleCopySeed}\n >\n <CopyIcon className=\"size-2.5\" />\n {copiedSeed ? 'Copied' : `Seed: ${selectedImage.seed}`}\n </Button>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport default ImageGenerator;\n","'use client';\n\nimport { useState } from 'react';\nimport {\n FileTextIcon,\n SparklesIcon,\n WandIcon,\n CopyIcon,\n RotateCcwIcon,\n CheckIcon,\n TypeIcon,\n AlignLeftIcon,\n ListIcon,\n HashIcon,\n} from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Button } from '../../ui/button';\nimport { Badge } from '../../ui/badge';\nimport { Textarea } from '../../ui/textarea';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface WritingTone {\n id: string;\n label: string;\n description?: string;\n}\n\nexport interface WritingFormat {\n id: string;\n label: string;\n icon?: React.ReactNode;\n}\n\nexport interface WritingAction {\n id: string;\n label: string;\n icon?: React.ReactNode;\n description?: string;\n}\n\nexport interface WritingAssistantProps {\n /** Initial content */\n initialContent?: string;\n /** Available tones */\n tones?: WritingTone[];\n /** Available formats */\n formats?: WritingFormat[];\n /** Available actions */\n actions?: WritingAction[];\n /** Callback when content changes */\n onChange?: (content: string) => void;\n /** Callback when action is triggered */\n onAction?: (actionId: string, content: string, options: { tone: string; format: string }) => void;\n /** Loading state */\n isProcessing?: boolean;\n /** Custom class name */\n className?: string;\n}\n\n// ============================================================================\n// DEFAULT VALUES\n// ============================================================================\n\nconst defaultTones: WritingTone[] = [\n { id: 'professional', label: 'Professional', description: 'Formal and business-appropriate' },\n { id: 'casual', label: 'Casual', description: 'Friendly and conversational' },\n { id: 'persuasive', label: 'Persuasive', description: 'Compelling and convincing' },\n { id: 'academic', label: 'Academic', description: 'Scholarly and well-researched' },\n { id: 'creative', label: 'Creative', description: 'Imaginative and expressive' },\n];\n\nconst defaultFormats: WritingFormat[] = [\n { id: 'paragraph', label: 'Paragraph', icon: <AlignLeftIcon className=\"size-3\" /> },\n { id: 'bullet', label: 'Bullet Points', icon: <ListIcon className=\"size-3\" /> },\n { id: 'numbered', label: 'Numbered', icon: <HashIcon className=\"size-3\" /> },\n { id: 'heading', label: 'With Headings', icon: <TypeIcon className=\"size-3\" /> },\n];\n\nconst defaultActions: WritingAction[] = [\n { id: 'improve', label: 'Improve', icon: <SparklesIcon className=\"size-3\" />, description: 'Enhance clarity and flow' },\n { id: 'shorten', label: 'Shorten', icon: <FileTextIcon className=\"size-3\" />, description: 'Make more concise' },\n { id: 'expand', label: 'Expand', icon: <FileTextIcon className=\"size-3\" />, description: 'Add more detail' },\n { id: 'rewrite', label: 'Rewrite', icon: <RotateCcwIcon className=\"size-3\" />, description: 'Complete rewrite' },\n];\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function WritingAssistant({\n initialContent = '',\n tones = defaultTones,\n formats = defaultFormats,\n actions = defaultActions,\n onChange,\n onAction,\n isProcessing = false,\n className,\n}: WritingAssistantProps) {\n const [content, setContent] = useState(initialContent);\n const [activeTone, setActiveTone] = useState(tones[0]?.id || '');\n const [activeFormat, setActiveFormat] = useState(formats[0]?.id || '');\n const [copied, setCopied] = useState(false);\n\n const wordCount = content.trim().split(/\\s+/).filter(Boolean).length;\n const charCount = content.length;\n\n const handleContentChange = (value: string) => {\n setContent(value);\n onChange?.(value);\n };\n\n const handleAction = (actionId: string) => {\n onAction?.(actionId, content, { tone: activeTone, format: activeFormat });\n };\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(content);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error('Failed to copy:', err);\n }\n };\n\n return (\n <div className={cn('overflow-hidden rounded-lg border bg-card', className)}>\n {/* Header with tone selector */}\n <div className=\"flex items-center gap-2 border-b px-4 py-3\">\n <WandIcon className=\"size-4 shrink-0 text-muted-foreground\" />\n <span className=\"text-sm font-medium\">Writing Assistant</span>\n <div className=\"ml-auto flex gap-1\">\n {tones.map((tone) => (\n <button\n key={tone.id}\n type=\"button\"\n onClick={() => setActiveTone(tone.id)}\n className={cn(\n 'rounded-md px-2 py-1 text-xs transition-colors',\n activeTone === tone.id\n ? 'bg-muted font-medium text-foreground'\n : 'text-muted-foreground hover:text-foreground'\n )}\n title={tone.description}\n >\n {tone.label}\n </button>\n ))}\n </div>\n </div>\n\n {/* Format selector */}\n <div className=\"flex items-center gap-2 border-b px-4 py-2\">\n <span className=\"text-xs text-muted-foreground\">Format:</span>\n <div className=\"flex gap-1\">\n {formats.map((format) => (\n <button\n key={format.id}\n type=\"button\"\n onClick={() => setActiveFormat(format.id)}\n className={cn(\n 'flex items-center gap-1 rounded-md px-2 py-1 text-xs transition-colors',\n activeFormat === format.id\n ? 'bg-muted font-medium text-foreground'\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n {format.icon}\n {format.label}\n </button>\n ))}\n </div>\n </div>\n\n {/* Text editor */}\n <div className=\"p-4\">\n <Textarea\n value={content}\n onChange={(e) => handleContentChange(e.target.value)}\n placeholder=\"Start writing or paste your text here...\"\n className=\"min-h-[200px] resize-none border-0 bg-transparent p-0 shadow-none focus-visible:ring-0\"\n disabled={isProcessing}\n />\n </div>\n\n {/* Actions bar */}\n <div className=\"flex flex-wrap items-center gap-2 border-t px-4 py-3\">\n <div className=\"flex flex-wrap gap-1\">\n {actions.map((action) => (\n <Button\n key={action.id}\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 gap-1.5 text-xs\"\n onClick={() => handleAction(action.id)}\n disabled={isProcessing || !content.trim()}\n title={action.description}\n >\n {action.icon}\n {action.label}\n </Button>\n ))}\n </div>\n\n <div className=\"ml-auto flex items-center gap-3\">\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n <Badge variant=\"secondary\" className=\"font-normal\">\n {wordCount} words\n </Badge>\n <Badge variant=\"secondary\" className=\"font-normal\">\n {charCount} chars\n </Badge>\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 gap-1 px-2 text-xs\"\n onClick={handleCopy}\n disabled={!content.trim()}\n >\n {copied ? (\n <>\n <CheckIcon className=\"size-3\" />\n Copied\n </>\n ) : (\n <>\n <CopyIcon className=\"size-3\" />\n Copy\n </>\n )}\n </Button>\n </div>\n </div>\n </div>\n );\n}\n\nexport default WritingAssistant;\n","'use client';\n\nimport { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n CheckIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n SkipForwardIcon,\n} from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Button } from '../../ui/button';\nimport { Progress } from '../../ui/progress';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface OnboardingStep {\n id: string;\n title: string;\n description: string;\n content?: React.ReactNode;\n image?: string;\n isComplete?: boolean;\n isSkippable?: boolean;\n action?: {\n label: string;\n onClick: () => void | Promise<void>;\n };\n}\n\nexport interface OnboardingWizardProps {\n /** Steps to display */\n steps: OnboardingStep[];\n /** Current step index (controlled) */\n currentStep?: number;\n /** Callback when step changes */\n onStepChange?: (index: number) => void;\n /** Callback when onboarding is completed */\n onComplete?: () => void;\n /** Callback when onboarding is skipped */\n onSkip?: () => void;\n /** Allow skipping */\n allowSkip?: boolean;\n /** Show progress indicator */\n showProgress?: boolean;\n /** Custom class name */\n className?: string;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function OnboardingWizard({\n steps,\n currentStep: controlledStep,\n onStepChange,\n onComplete,\n onSkip,\n allowSkip = true,\n showProgress = true,\n className,\n}: OnboardingWizardProps) {\n const [internalStep, setInternalStep] = useState(0);\n const [completedSteps, setCompletedSteps] = useState<Set<string>>(new Set());\n const [direction, setDirection] = useState<1 | -1>(1);\n\n const currentIndex = controlledStep ?? internalStep;\n const currentStepData = steps[currentIndex];\n const isFirstStep = currentIndex === 0;\n const isLastStep = currentIndex === steps.length - 1;\n const progress = ((currentIndex + 1) / steps.length) * 100;\n\n const goToStep = (index: number) => {\n setDirection(index > currentIndex ? 1 : -1);\n if (controlledStep === undefined) {\n setInternalStep(index);\n }\n onStepChange?.(index);\n };\n\n const handleNext = async () => {\n // Mark current step as complete\n setCompletedSteps((prev) => new Set([...prev, currentStepData.id]));\n\n // Execute step action if present\n if (currentStepData.action) {\n await currentStepData.action.onClick();\n }\n\n if (isLastStep) {\n onComplete?.();\n } else {\n goToStep(currentIndex + 1);\n }\n };\n\n const handlePrev = () => {\n if (!isFirstStep) {\n goToStep(currentIndex - 1);\n }\n };\n\n const handleSkip = () => {\n onSkip?.();\n };\n\n const handleSkipStep = () => {\n if (!isLastStep) {\n goToStep(currentIndex + 1);\n } else {\n onComplete?.();\n }\n };\n\n if (!currentStepData) {\n return null;\n }\n\n const variants = {\n enter: (dir: number) => ({\n x: dir > 0 ? 100 : -100,\n opacity: 0,\n }),\n center: {\n x: 0,\n opacity: 1,\n },\n exit: (dir: number) => ({\n x: dir > 0 ? -100 : 100,\n opacity: 0,\n }),\n };\n\n return (\n <div className={cn('rounded-lg border bg-card overflow-hidden', className)}>\n {/* Progress header */}\n {showProgress && (\n <div className=\"border-b px-4 py-3\">\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-sm font-medium\">\n Step {currentIndex + 1} of {steps.length}\n </span>\n {allowSkip && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 gap-1 text-xs text-muted-foreground\"\n onClick={handleSkip}\n >\n <SkipForwardIcon className=\"size-3\" />\n Skip All\n </Button>\n )}\n </div>\n <Progress value={progress} className=\"h-1.5\" />\n </div>\n )}\n\n {/* Step indicator dots */}\n <div className=\"flex items-center justify-center gap-2 py-4 border-b\">\n {steps.map((step, index) => {\n const isActive = index === currentIndex;\n const isCompleted = completedSteps.has(step.id) || step.isComplete;\n\n return (\n <button\n key={step.id}\n type=\"button\"\n onClick={() => goToStep(index)}\n className={cn(\n 'flex items-center justify-center size-8 rounded-full transition-colors',\n isActive && 'bg-foreground text-background',\n !isActive && isCompleted && 'bg-emerald-500 text-white',\n !isActive && !isCompleted && 'border-2 border-muted-foreground/30 text-muted-foreground'\n )}\n >\n {isCompleted && !isActive ? (\n <CheckIcon className=\"size-4\" />\n ) : (\n <span className=\"text-xs font-medium\">{index + 1}</span>\n )}\n </button>\n );\n })}\n </div>\n\n {/* Step content */}\n <div className=\"relative min-h-[300px] overflow-hidden\">\n <AnimatePresence custom={direction} mode=\"wait\">\n <motion.div\n key={currentStepData.id}\n custom={direction}\n variants={variants}\n initial=\"enter\"\n animate=\"center\"\n exit=\"exit\"\n transition={{ type: 'tween', duration: 0.3 }}\n className=\"p-6\"\n >\n {currentStepData.image && (\n <div className=\"mb-6 flex justify-center\">\n <div className=\"h-32 w-32 rounded-lg bg-muted flex items-center justify-center\">\n <img\n src={currentStepData.image}\n alt={currentStepData.title}\n className=\"max-h-full max-w-full object-contain\"\n />\n </div>\n </div>\n )}\n\n <div className=\"text-center\">\n <h2 className=\"text-xl font-semibold mb-2\">{currentStepData.title}</h2>\n <p className=\"text-muted-foreground\">{currentStepData.description}</p>\n </div>\n\n {currentStepData.content && (\n <div className=\"mt-6\">{currentStepData.content}</div>\n )}\n </motion.div>\n </AnimatePresence>\n </div>\n\n {/* Navigation footer */}\n <div className=\"flex items-center justify-between border-t px-4 py-3\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handlePrev}\n disabled={isFirstStep}\n className=\"gap-1\"\n >\n <ChevronLeftIcon className=\"size-4\" />\n Back\n </Button>\n\n <div className=\"flex gap-2\">\n {currentStepData.isSkippable && !isLastStep && (\n <Button variant=\"ghost\" size=\"sm\" onClick={handleSkipStep}>\n Skip\n </Button>\n )}\n <Button size=\"sm\" onClick={handleNext} className=\"gap-1\">\n {currentStepData.action?.label || (isLastStep ? 'Complete' : 'Continue')}\n <ChevronRightIcon className=\"size-4\" />\n </Button>\n </div>\n </div>\n </div>\n );\n}\n\nexport default OnboardingWizard;\n","'use client';\n\nimport { useState } from 'react';\nimport { motion } from 'motion/react';\nimport { CheckCircle2Icon, XCircleIcon, HelpCircleIcon, ChevronRightIcon } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Button } from '../../ui/button';\nimport { Badge } from '../../ui/badge';\nimport { Progress } from '../../ui/progress';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface QuizOption {\n id: string;\n text: string;\n}\n\nexport interface QuizQuestion {\n id: string;\n question: string;\n options: QuizOption[];\n correctOptionId: string;\n explanation?: string;\n hint?: string;\n category?: string;\n difficulty?: 'easy' | 'medium' | 'hard';\n}\n\nexport interface QuizResult {\n questionId: string;\n selectedOptionId: string | null;\n isCorrect: boolean;\n timeSpent?: number;\n}\n\nexport interface QuizCardProps {\n /** Questions to display */\n questions: QuizQuestion[];\n /** Current question index (controlled) */\n currentIndex?: number;\n /** Callback when answer is selected */\n onAnswer?: (questionId: string, optionId: string, isCorrect: boolean) => void;\n /** Callback when quiz is completed */\n onComplete?: (results: QuizResult[]) => void;\n /** Callback when next question is requested */\n onNext?: () => void;\n /** Show hints */\n showHints?: boolean;\n /** Show explanations after answering */\n showExplanations?: boolean;\n /** Allow retrying wrong answers */\n allowRetry?: boolean;\n /** Custom class name */\n className?: string;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function QuizCard({\n questions,\n currentIndex: controlledIndex,\n onAnswer,\n onComplete,\n onNext,\n showHints = true,\n showExplanations = true,\n allowRetry = false,\n className,\n}: QuizCardProps) {\n const [internalIndex, setInternalIndex] = useState(0);\n const [selectedOption, setSelectedOption] = useState<string | null>(null);\n const [hasAnswered, setHasAnswered] = useState(false);\n const [showHint, setShowHint] = useState(false);\n const [results, setResults] = useState<QuizResult[]>([]);\n\n const currentIndex = controlledIndex ?? internalIndex;\n const currentQuestion = questions[currentIndex];\n const isLastQuestion = currentIndex === questions.length - 1;\n const progress = ((currentIndex + (hasAnswered ? 1 : 0)) / questions.length) * 100;\n\n if (!currentQuestion) {\n return (\n <div className={cn('rounded-lg border bg-card p-6 text-center', className)}>\n <p className=\"text-muted-foreground\">No questions available</p>\n </div>\n );\n }\n\n const isCorrect = selectedOption === currentQuestion.correctOptionId;\n\n const handleSelectOption = (optionId: string) => {\n if (hasAnswered && !allowRetry) return;\n\n setSelectedOption(optionId);\n setHasAnswered(true);\n setShowHint(false);\n\n const correct = optionId === currentQuestion.correctOptionId;\n const result: QuizResult = {\n questionId: currentQuestion.id,\n selectedOptionId: optionId,\n isCorrect: correct,\n };\n\n setResults((prev) => [...prev.filter((r) => r.questionId !== currentQuestion.id), result]);\n onAnswer?.(currentQuestion.id, optionId, correct);\n };\n\n const handleNext = () => {\n if (isLastQuestion) {\n onComplete?.(results);\n } else {\n if (controlledIndex === undefined) {\n setInternalIndex((prev) => prev + 1);\n }\n setSelectedOption(null);\n setHasAnswered(false);\n setShowHint(false);\n onNext?.();\n }\n };\n\n const handleRetry = () => {\n setSelectedOption(null);\n setHasAnswered(false);\n };\n\n const getDifficultyColor = (difficulty?: string) => {\n switch (difficulty) {\n case 'easy':\n return 'bg-emerald-500/10 text-emerald-600';\n case 'medium':\n return 'bg-amber-500/10 text-amber-600';\n case 'hard':\n return 'bg-red-500/10 text-red-600';\n default:\n return 'bg-muted text-muted-foreground';\n }\n };\n\n return (\n <div className={cn('rounded-lg border bg-card', className)}>\n {/* Progress header */}\n <div className=\"border-b px-4 py-3\">\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-sm text-muted-foreground\">\n Question {currentIndex + 1} of {questions.length}\n </span>\n <div className=\"flex items-center gap-2\">\n {currentQuestion.category && (\n <Badge variant=\"secondary\" className=\"text-xs\">\n {currentQuestion.category}\n </Badge>\n )}\n {currentQuestion.difficulty && (\n <Badge className={cn('text-xs', getDifficultyColor(currentQuestion.difficulty))}>\n {currentQuestion.difficulty}\n </Badge>\n )}\n </div>\n </div>\n <Progress value={progress} className=\"h-1.5\" />\n </div>\n\n {/* Question */}\n <div className=\"p-4\">\n <h3 className=\"text-lg font-medium mb-4\">{currentQuestion.question}</h3>\n\n {/* Options */}\n <div className=\"space-y-2\">\n {currentQuestion.options.map((option, index) => {\n const isSelected = selectedOption === option.id;\n const isCorrectOption = option.id === currentQuestion.correctOptionId;\n const showCorrectness = hasAnswered;\n\n return (\n <motion.button\n key={option.id}\n type=\"button\"\n onClick={() => handleSelectOption(option.id)}\n disabled={hasAnswered && !allowRetry}\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: index * 0.1 }}\n className={cn(\n 'w-full flex items-center gap-3 rounded-lg border p-3 text-left transition-colors',\n !hasAnswered && 'hover:bg-muted/50 cursor-pointer',\n hasAnswered && !allowRetry && 'cursor-default',\n isSelected && !showCorrectness && 'border-foreground bg-muted',\n showCorrectness && isCorrectOption && 'border-emerald-500 bg-emerald-500/10',\n showCorrectness && isSelected && !isCorrectOption && 'border-red-500 bg-red-500/10'\n )}\n >\n <span\n className={cn(\n 'flex size-6 shrink-0 items-center justify-center rounded-full border text-xs font-medium',\n isSelected && !showCorrectness && 'border-foreground bg-foreground text-background',\n showCorrectness && isCorrectOption && 'border-emerald-500 bg-emerald-500 text-white',\n showCorrectness && isSelected && !isCorrectOption && 'border-red-500 bg-red-500 text-white'\n )}\n >\n {showCorrectness && isCorrectOption ? (\n <CheckCircle2Icon className=\"size-4\" />\n ) : showCorrectness && isSelected && !isCorrectOption ? (\n <XCircleIcon className=\"size-4\" />\n ) : (\n String.fromCharCode(65 + index)\n )}\n </span>\n <span className=\"flex-1\">{option.text}</span>\n </motion.button>\n );\n })}\n </div>\n\n {/* Hint */}\n {showHints && currentQuestion.hint && !hasAnswered && (\n <div className=\"mt-4\">\n {showHint ? (\n <div className=\"rounded-lg bg-muted/50 p-3 text-sm text-muted-foreground\">\n <span className=\"font-medium\">Hint:</span> {currentQuestion.hint}\n </div>\n ) : (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"gap-1.5 text-muted-foreground\"\n onClick={() => setShowHint(true)}\n >\n <HelpCircleIcon className=\"size-4\" />\n Show Hint\n </Button>\n )}\n </div>\n )}\n\n {/* Explanation */}\n {showExplanations && hasAnswered && currentQuestion.explanation && (\n <motion.div\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n className={cn(\n 'mt-4 rounded-lg p-3 text-sm',\n isCorrect ? 'bg-emerald-500/10' : 'bg-amber-500/10'\n )}\n >\n <span className=\"font-medium\">{isCorrect ? 'Correct!' : 'Explanation:'}</span>{' '}\n {currentQuestion.explanation}\n </motion.div>\n )}\n </div>\n\n {/* Footer actions */}\n <div className=\"flex items-center justify-between border-t px-4 py-3\">\n <div className=\"text-sm text-muted-foreground\">\n {hasAnswered && (\n <span className={isCorrect ? 'text-emerald-600' : 'text-red-600'}>\n {isCorrect ? 'Correct!' : 'Incorrect'}\n </span>\n )}\n </div>\n <div className=\"flex gap-2\">\n {hasAnswered && !isCorrect && allowRetry && (\n <Button variant=\"outline\" size=\"sm\" onClick={handleRetry}>\n Try Again\n </Button>\n )}\n {hasAnswered && (\n <Button size=\"sm\" onClick={handleNext} className=\"gap-1\">\n {isLastQuestion ? 'Complete' : 'Next'}\n <ChevronRightIcon className=\"size-4\" />\n </Button>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nexport default QuizCard;\n","'use client';\n\nimport { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { ChevronLeftIcon, ChevronRightIcon, CheckIcon } from 'lucide-react';\nimport { cn, parseTextWithBold } from '../../core/utils';\nimport { Button } from '../../ui/button';\nimport { Badge } from '../../ui/badge';\nimport { QuizCard, type QuizQuestion } from './quiz-card';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface LessonStep {\n id: string;\n /** Step title. */\n title: string;\n /** Body content. Supports **bold** segments and blank-line paragraphs. */\n content: string;\n /** Optional short label for the step rail/tooltip. */\n shortLabel?: string;\n /** Optional knowledge check shown after the content. */\n quiz?: QuizQuestion[];\n /** Require a correct quiz answer before advancing. */\n requireQuizPass?: boolean;\n}\n\nexport interface GuidedLessonFlowProps {\n steps: LessonStep[];\n /** Controlled current step index. */\n currentIndex?: number;\n /** Title shown in the header. */\n title?: string;\n /** Optional level/track chip. */\n badge?: string;\n /** Step change handler. */\n onStepChange?: (index: number) => void;\n /** Quiz answer handler (bubbled from the embedded QuizCard). */\n onAnswer?: (stepId: string, questionId: string, optionId: string, isCorrect: boolean) => void;\n /** Completion handler. */\n onComplete?: () => void;\n className?: string;\n}\n\nfunction LessonContent({ content }: { content: string }) {\n return (\n <div className=\"space-y-3 text-sm leading-relaxed\">\n {content.split('\\n\\n').map((para, i) => (\n <p key={i} className=\"text-muted-foreground\">\n {parseTextWithBold(para).map((seg, j) =>\n seg.bold ? (\n <strong key={j} className=\"font-medium text-foreground\">\n {seg.text}\n </strong>\n ) : (\n <span key={j}>{seg.text}</span>\n )\n )}\n </p>\n ))}\n </div>\n );\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function GuidedLessonFlow({\n steps,\n currentIndex: controlledIndex,\n title = 'Guided Module',\n badge,\n onStepChange,\n onAnswer,\n onComplete,\n className,\n}: GuidedLessonFlowProps) {\n const [internalIndex, setInternalIndex] = useState(0);\n const [passedSteps, setPassedSteps] = useState<Set<string>>(new Set());\n\n const currentIndex = controlledIndex ?? internalIndex;\n const step = steps[currentIndex];\n const isLast = currentIndex === steps.length - 1;\n\n if (!step) {\n return (\n <div className={cn('rounded-lg border bg-card p-6 text-center text-muted-foreground', className)}>\n No steps available\n </div>\n );\n }\n\n const quizGate = step.requireQuizPass && step.quiz && step.quiz.length > 0;\n const canAdvance = !quizGate || passedSteps.has(step.id);\n\n const goTo = (next: number) => {\n const clamped = Math.max(0, Math.min(steps.length - 1, next));\n if (controlledIndex === undefined) setInternalIndex(clamped);\n onStepChange?.(clamped);\n };\n\n const handleNext = () => {\n if (isLast) {\n onComplete?.();\n } else {\n goTo(currentIndex + 1);\n }\n };\n\n return (\n <div className={cn('flex flex-col overflow-hidden rounded-lg border bg-card', className)}>\n {/* Header + progress rail */}\n <div className=\"border-b px-4 py-3\">\n <div className=\"flex items-center gap-3\">\n <span className=\"font-medium text-sm\">{title}</span>\n {badge && (\n <Badge variant=\"secondary\" className=\"font-normal text-[10px]\">\n {badge}\n </Badge>\n )}\n <span className=\"ml-auto text-muted-foreground text-xs\">\n Step {currentIndex + 1}/{steps.length}\n </span>\n </div>\n <div className=\"mt-2 flex items-center gap-1\">\n {steps.map((s, i) => (\n <div\n key={s.id}\n className={cn(\n 'h-1 flex-1 rounded-full transition-colors',\n i < currentIndex || passedSteps.has(s.id)\n ? 'bg-emerald-500'\n : i === currentIndex\n ? 'bg-foreground'\n : 'bg-muted'\n )}\n />\n ))}\n </div>\n </div>\n\n {/* Step content */}\n <div className=\"flex-1 overflow-y-auto p-5\">\n <AnimatePresence mode=\"wait\">\n <motion.div\n key={step.id}\n initial={{ opacity: 0, x: 12 }}\n animate={{ opacity: 1, x: 0 }}\n exit={{ opacity: 0, x: -12 }}\n transition={{ duration: 0.2 }}\n className=\"space-y-4\"\n >\n <h3 className=\"text-base font-medium\">{step.title}</h3>\n <LessonContent content={step.content} />\n\n {step.quiz && step.quiz.length > 0 && (\n <div className=\"pt-2\">\n <span className=\"mb-2 block font-medium text-xs text-muted-foreground\">\n Knowledge check\n </span>\n <QuizCard\n questions={step.quiz}\n showHints\n showExplanations\n onAnswer={(questionId, optionId, isCorrect) => {\n if (isCorrect) {\n setPassedSteps((prev) => new Set(prev).add(step.id));\n }\n onAnswer?.(step.id, questionId, optionId, isCorrect);\n }}\n />\n </div>\n )}\n </motion.div>\n </AnimatePresence>\n </div>\n\n {/* Footer nav */}\n <div className=\"flex items-center justify-between border-t px-4 py-3\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"gap-1 text-xs\"\n disabled={currentIndex === 0}\n onClick={() => goTo(currentIndex - 1)}\n >\n <ChevronLeftIcon className=\"size-4\" />\n Back\n </Button>\n <Button size=\"sm\" className=\"gap-1 text-xs\" disabled={!canAdvance} onClick={handleNext}>\n {isLast ? (\n <>\n Finish\n <CheckIcon className=\"size-4\" />\n </>\n ) : (\n <>\n Next\n <ChevronRightIcon className=\"size-4\" />\n </>\n )}\n </Button>\n </div>\n </div>\n );\n}\n\nexport default GuidedLessonFlow;\n","'use client';\n\nimport { useState } from 'react';\nimport {\n ImageIcon,\n Maximize2Icon,\n Minimize2Icon,\n RotateCcwIcon,\n DownloadIcon,\n SparklesIcon,\n} from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Button } from '../../ui/button';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface EditorTool {\n id: string;\n label: string;\n icon?: React.ReactNode;\n /** Swatch/preview color for tool tiles without an icon. */\n swatch?: string;\n}\n\nexport interface EditorAdjustment {\n id: string;\n label: string;\n value: number;\n min?: number;\n max?: number;\n step?: number;\n}\n\nexport interface MediaEditorCanvasProps {\n /** Source image URL for the canvas. Falls back to a placeholder tile. */\n sourceUrl?: string;\n /** Result/preview image URL (used for the \"after\" comparison view). */\n previewUrl?: string;\n /** Selectable tools (filters/presets/crop/etc.). */\n tools?: EditorTool[];\n /** Active tool id (controlled). */\n activeToolId?: string;\n /** Continuous adjustment controls. */\n adjustments?: EditorAdjustment[];\n /** Enable the before/after comparison toggle. */\n enableCompare?: boolean;\n /** Labels for the compare toggle. */\n beforeLabel?: string;\n afterLabel?: string;\n onSelectTool?: (id: string) => void;\n onAdjust?: (id: string, value: number) => void;\n onReset?: () => void;\n onSave?: () => void;\n className?: string;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function MediaEditorCanvas({\n sourceUrl,\n previewUrl,\n tools = [],\n activeToolId,\n adjustments = [],\n enableCompare = true,\n beforeLabel = 'Before',\n afterLabel = 'After',\n onSelectTool,\n onAdjust,\n onReset,\n onSave,\n className,\n}: MediaEditorCanvasProps) {\n const [comparison, setComparison] = useState<'before' | 'after'>('after');\n const [expanded, setExpanded] = useState(false);\n\n const shownUrl =\n comparison === 'before' ? sourceUrl : previewUrl ?? sourceUrl;\n\n return (\n <div className={cn('flex flex-col overflow-hidden rounded-lg border bg-card', className)}>\n {/* Header */}\n <div className=\"flex items-center justify-between border-b px-4 py-3\">\n <div className=\"flex items-center gap-2\">\n <div className=\"flex size-8 items-center justify-center rounded-md bg-muted\">\n <ImageIcon className=\"size-4 text-foreground\" />\n </div>\n <span className=\"text-sm font-medium\">Editor</span>\n </div>\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n onClick={() => setExpanded((v) => !v)}\n aria-label={expanded ? 'Collapse' : 'Expand'}\n >\n {expanded ? <Minimize2Icon className=\"size-3.5\" /> : <Maximize2Icon className=\"size-3.5\" />}\n </Button>\n </div>\n </div>\n\n <div className={cn('flex flex-col', !expanded && 'sm:flex-row')}>\n {/* Canvas */}\n <div className=\"flex flex-1 flex-col p-3\">\n {/* Compare toggle */}\n {enableCompare && (\n <div className=\"mb-2 flex items-center justify-end\">\n <div className=\"flex items-center gap-1 rounded-md bg-muted p-0.5\">\n {(['before', 'after'] as const).map((mode) => (\n <button\n key={mode}\n type=\"button\"\n onClick={() => setComparison(mode)}\n className={cn(\n 'rounded-sm px-2 py-1 text-xs transition-colors',\n comparison === mode\n ? 'bg-background text-foreground'\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n {mode === 'before' ? beforeLabel : afterLabel}\n </button>\n ))}\n </div>\n </div>\n )}\n\n <div className=\"relative aspect-video overflow-hidden rounded-md border bg-muted\">\n {shownUrl ? (\n <img src={shownUrl} alt={comparison} className=\"size-full object-contain\" />\n ) : (\n <div className=\"flex h-full items-center justify-center\">\n <ImageIcon className=\"size-10 text-muted-foreground/20\" />\n </div>\n )}\n <div className=\"absolute bottom-2 left-2 rounded-md bg-background/90 px-2 py-1 backdrop-blur-sm\">\n <span className=\"text-xs font-medium\">\n {comparison === 'before' ? beforeLabel : afterLabel}\n </span>\n </div>\n </div>\n\n {/* Canvas actions */}\n <div className=\"mt-3 flex items-center gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 flex-1 gap-1.5 text-xs\"\n onClick={onReset}\n >\n <RotateCcwIcon className=\"size-3\" />\n Reset\n </Button>\n <Button size=\"sm\" className=\"h-7 flex-1 gap-1.5 text-xs\" onClick={onSave}>\n <DownloadIcon className=\"size-3\" />\n Save\n </Button>\n </div>\n </div>\n\n {/* Tool / adjustment rail */}\n {(tools.length > 0 || adjustments.length > 0) && (\n <div className={cn('shrink-0 border-t p-3', !expanded && 'sm:w-56 sm:border-l sm:border-t-0')}>\n {tools.length > 0 && (\n <div>\n <div className=\"flex items-center gap-1.5\">\n <SparklesIcon className=\"size-3.5 text-muted-foreground\" />\n <span className=\"text-xs font-medium\">Tools</span>\n </div>\n <div className=\"mt-2 grid grid-cols-4 gap-2\">\n {tools.map((tool) => {\n const active = activeToolId === tool.id;\n return (\n <button\n key={tool.id}\n type=\"button\"\n onClick={() => onSelectTool?.(tool.id)}\n className={cn(\n 'group flex flex-col items-center gap-1.5 rounded-md p-2 transition-colors',\n active ? 'bg-muted' : 'hover:bg-muted/50'\n )}\n >\n <div\n className={cn(\n 'flex size-10 items-center justify-center rounded-md border',\n active && 'ring-1 ring-foreground'\n )}\n style={tool.swatch ? { backgroundColor: tool.swatch } : undefined}\n >\n {tool.icon}\n </div>\n <span\n className={cn(\n 'truncate text-[10px]',\n active ? 'text-foreground' : 'text-muted-foreground group-hover:text-foreground'\n )}\n >\n {tool.label}\n </span>\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n {adjustments.length > 0 && (\n <div className={cn(tools.length > 0 && 'mt-4')}>\n <span className=\"text-xs font-medium\">Adjustments</span>\n <div className=\"mt-2 space-y-3\">\n {adjustments.map((adj) => (\n <div key={adj.id}>\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"text-muted-foreground\">{adj.label}</span>\n <span className=\"tabular-nums\">{adj.value}</span>\n </div>\n <input\n type=\"range\"\n min={adj.min ?? 0}\n max={adj.max ?? 100}\n step={adj.step ?? 1}\n value={adj.value}\n onChange={(e) => onAdjust?.(adj.id, Number(e.target.value))}\n className=\"mt-1 h-1.5 w-full cursor-pointer appearance-none rounded-full bg-muted accent-foreground\"\n />\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport default MediaEditorCanvas;\n","'use client';\n\nimport { useState } from 'react';\nimport {\n LineChart,\n Line,\n PieChart,\n Pie,\n Cell,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n ResponsiveContainer,\n Legend,\n} from 'recharts';\nimport {\n MessageSquareIcon,\n ClockIcon,\n ThumbsUpIcon,\n TrendingUpIcon,\n TrendingDownIcon,\n MinusIcon,\n} from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Badge } from '../../ui/badge';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface ConversationMetric {\n id: string;\n label: string;\n value: number | string;\n change?: number;\n changeLabel?: string;\n icon?: React.ReactNode;\n}\n\nexport interface TopicData {\n topic: string;\n count: number;\n percentage: number;\n}\n\nexport interface SentimentData {\n sentiment: 'positive' | 'negative' | 'neutral';\n value: number;\n}\n\nexport interface TimelineData {\n date: string;\n messages: number;\n responses: number;\n}\n\nexport interface ConversationAnalyticsProps {\n /** Key metrics to display */\n metrics?: ConversationMetric[];\n /** Topics discussed */\n topics?: TopicData[];\n /** Sentiment breakdown */\n sentiment?: SentimentData[];\n /** Messages over time */\n timeline?: TimelineData[];\n /** Time period label */\n period?: string;\n /** Custom class name */\n className?: string;\n}\n\n// ============================================================================\n// DEFAULT VALUES\n// ============================================================================\n\nconst defaultMetrics: ConversationMetric[] = [\n {\n id: 'total',\n label: 'Total Messages',\n value: 1247,\n change: 12.5,\n changeLabel: 'vs last period',\n icon: <MessageSquareIcon className=\"size-4\" />,\n },\n {\n id: 'avgResponse',\n label: 'Avg Response Time',\n value: '1.2s',\n change: -8.3,\n changeLabel: 'faster',\n icon: <ClockIcon className=\"size-4\" />,\n },\n {\n id: 'satisfaction',\n label: 'User Satisfaction',\n value: '94%',\n change: 2.1,\n changeLabel: 'improvement',\n icon: <ThumbsUpIcon className=\"size-4\" />,\n },\n];\n\nconst defaultTopics: TopicData[] = [\n { topic: 'Product Questions', count: 342, percentage: 35 },\n { topic: 'Technical Support', count: 278, percentage: 28 },\n { topic: 'Pricing', count: 186, percentage: 19 },\n { topic: 'Account Issues', count: 98, percentage: 10 },\n { topic: 'Other', count: 78, percentage: 8 },\n];\n\nconst defaultSentiment: SentimentData[] = [\n { sentiment: 'positive', value: 65 },\n { sentiment: 'neutral', value: 25 },\n { sentiment: 'negative', value: 10 },\n];\n\nconst defaultTimeline: TimelineData[] = [\n { date: 'Mon', messages: 120, responses: 115 },\n { date: 'Tue', messages: 145, responses: 140 },\n { date: 'Wed', messages: 132, responses: 128 },\n { date: 'Thu', messages: 178, responses: 172 },\n { date: 'Fri', messages: 156, responses: 150 },\n { date: 'Sat', messages: 89, responses: 85 },\n { date: 'Sun', messages: 67, responses: 64 },\n];\n\nconst SENTIMENT_COLORS = {\n positive: '#22c55e',\n neutral: '#94a3b8',\n negative: '#ef4444',\n};\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function ConversationAnalytics({\n metrics = defaultMetrics,\n topics = defaultTopics,\n sentiment = defaultSentiment,\n timeline = defaultTimeline,\n period = 'Last 7 days',\n className,\n}: ConversationAnalyticsProps) {\n const [activeTab, setActiveTab] = useState<'overview' | 'topics' | 'sentiment'>('overview');\n\n const getTrendIcon = (change?: number) => {\n if (change === undefined) return null;\n if (change > 0) return <TrendingUpIcon className=\"size-3 text-emerald-500\" />;\n if (change < 0) return <TrendingDownIcon className=\"size-3 text-red-500\" />;\n return <MinusIcon className=\"size-3 text-muted-foreground\" />;\n };\n\n const getTrendColor = (change?: number) => {\n if (change === undefined) return '';\n if (change > 0) return 'text-emerald-500';\n if (change < 0) return 'text-red-500';\n return 'text-muted-foreground';\n };\n\n return (\n <div className={cn('rounded-lg border bg-card', className)}>\n {/* Header */}\n <div className=\"flex items-center justify-between border-b px-4 py-3\">\n <div>\n <h3 className=\"font-medium\">Conversation Analytics</h3>\n <p className=\"text-xs text-muted-foreground\">{period}</p>\n </div>\n <div className=\"flex gap-1\">\n {(['overview', 'topics', 'sentiment'] as const).map((tab) => (\n <button\n key={tab}\n type=\"button\"\n onClick={() => setActiveTab(tab)}\n className={cn(\n 'rounded-md px-3 py-1.5 text-xs capitalize transition-colors',\n activeTab === tab\n ? 'bg-muted font-medium text-foreground'\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n {tab}\n </button>\n ))}\n </div>\n </div>\n\n {/* Metrics row */}\n <div className=\"grid grid-cols-3 gap-4 border-b px-4 py-4\">\n {metrics.map((metric) => (\n <div key={metric.id} className=\"flex items-start gap-3\">\n {metric.icon && (\n <div className=\"flex size-8 shrink-0 items-center justify-center rounded-lg bg-muted\">\n {metric.icon}\n </div>\n )}\n <div>\n <p className=\"text-xs text-muted-foreground\">{metric.label}</p>\n <p className=\"text-lg font-semibold\">{metric.value}</p>\n {metric.change !== undefined && (\n <div className=\"flex items-center gap-1\">\n {getTrendIcon(metric.change)}\n <span className={cn('text-xs', getTrendColor(metric.change))}>\n {Math.abs(metric.change)}% {metric.changeLabel}\n </span>\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n\n {/* Chart content */}\n <div className=\"p-4\">\n {activeTab === 'overview' && (\n <div className=\"h-64\">\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <LineChart data={timeline}>\n <CartesianGrid strokeDasharray=\"3 3\" className=\"stroke-muted\" />\n <XAxis dataKey=\"date\" className=\"text-xs\" tick={{ fill: 'currentColor' }} />\n <YAxis className=\"text-xs\" tick={{ fill: 'currentColor' }} />\n <Tooltip\n contentStyle={{\n backgroundColor: 'hsl(var(--card))',\n borderColor: 'hsl(var(--border))',\n borderRadius: '0.5rem',\n }}\n />\n <Legend />\n <Line\n type=\"monotone\"\n dataKey=\"messages\"\n stroke=\"hsl(var(--foreground))\"\n strokeWidth={2}\n dot={false}\n />\n <Line\n type=\"monotone\"\n dataKey=\"responses\"\n stroke=\"hsl(var(--muted-foreground))\"\n strokeWidth={2}\n dot={false}\n strokeDasharray=\"4 4\"\n />\n </LineChart>\n </ResponsiveContainer>\n </div>\n )}\n\n {activeTab === 'topics' && (\n <div className=\"space-y-3\">\n {topics.map((topic) => (\n <div key={topic.topic} className=\"flex items-center gap-3\">\n <div className=\"w-32 text-sm truncate\">{topic.topic}</div>\n <div className=\"flex-1 h-2 bg-muted rounded-full overflow-hidden\">\n <div\n className=\"h-full bg-foreground rounded-full transition-all\"\n style={{ width: `${topic.percentage}%` }}\n />\n </div>\n <div className=\"w-16 text-right\">\n <Badge variant=\"secondary\" className=\"text-xs\">\n {topic.count}\n </Badge>\n </div>\n </div>\n ))}\n </div>\n )}\n\n {activeTab === 'sentiment' && (\n <div className=\"flex items-center justify-center\">\n <div className=\"h-64 w-64\">\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <PieChart>\n <Pie\n data={sentiment}\n dataKey=\"value\"\n nameKey=\"sentiment\"\n cx=\"50%\"\n cy=\"50%\"\n innerRadius={60}\n outerRadius={100}\n paddingAngle={2}\n >\n {sentiment.map((entry) => (\n <Cell\n key={entry.sentiment}\n fill={SENTIMENT_COLORS[entry.sentiment]}\n />\n ))}\n </Pie>\n <Tooltip\n formatter={(value) => [`${value}%`, 'Percentage']}\n contentStyle={{\n backgroundColor: 'hsl(var(--card))',\n borderColor: 'hsl(var(--border))',\n borderRadius: '0.5rem',\n }}\n />\n <Legend\n formatter={(value) => (\n <span className=\"text-sm capitalize\">{value}</span>\n )}\n />\n </PieChart>\n </ResponsiveContainer>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport default ConversationAnalytics;\n","'use client';\n\nimport { useState } from 'react';\nimport {\n AreaChart,\n Area,\n BarChart,\n Bar,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n ResponsiveContainer,\n} from 'recharts';\nimport {\n ZapIcon,\n CoinsIcon,\n AlertTriangleIcon,\n ActivityIcon,\n TrendingUpIcon,\n TrendingDownIcon,\n} from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Badge } from '../../ui/badge';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface PerformanceMetric {\n id: string;\n label: string;\n value: number | string;\n unit?: string;\n change?: number;\n status?: 'good' | 'warning' | 'error';\n icon?: React.ReactNode;\n}\n\nexport interface LatencyData {\n time: string;\n p50: number;\n p95: number;\n p99: number;\n}\n\nexport interface TokenUsageData {\n date: string;\n input: number;\n output: number;\n}\n\nexport interface ErrorData {\n type: string;\n count: number;\n percentage: number;\n}\n\nexport interface PerformanceMetricsProps {\n /** Key metrics */\n metrics?: PerformanceMetric[];\n /** Latency over time */\n latency?: LatencyData[];\n /** Token usage */\n tokenUsage?: TokenUsageData[];\n /** Error breakdown */\n errors?: ErrorData[];\n /** Time period */\n period?: string;\n /** Custom class name */\n className?: string;\n}\n\n// ============================================================================\n// DEFAULT VALUES\n// ============================================================================\n\nconst defaultMetrics: PerformanceMetric[] = [\n {\n id: 'latency',\n label: 'Avg Latency',\n value: 245,\n unit: 'ms',\n change: -12,\n status: 'good',\n icon: <ZapIcon className=\"size-4\" />,\n },\n {\n id: 'tokens',\n label: 'Tokens Used',\n value: '1.2M',\n change: 8,\n status: 'good',\n icon: <CoinsIcon className=\"size-4\" />,\n },\n {\n id: 'errors',\n label: 'Error Rate',\n value: 0.3,\n unit: '%',\n change: -0.1,\n status: 'good',\n icon: <AlertTriangleIcon className=\"size-4\" />,\n },\n {\n id: 'uptime',\n label: 'Uptime',\n value: 99.9,\n unit: '%',\n status: 'good',\n icon: <ActivityIcon className=\"size-4\" />,\n },\n];\n\nconst defaultLatency: LatencyData[] = [\n { time: '00:00', p50: 180, p95: 320, p99: 450 },\n { time: '04:00', p50: 165, p95: 290, p99: 420 },\n { time: '08:00', p50: 210, p95: 380, p99: 520 },\n { time: '12:00', p50: 245, p95: 420, p99: 580 },\n { time: '16:00', p50: 230, p95: 400, p99: 550 },\n { time: '20:00', p50: 195, p95: 350, p99: 480 },\n];\n\nconst defaultTokenUsage: TokenUsageData[] = [\n { date: 'Mon', input: 45000, output: 62000 },\n { date: 'Tue', input: 52000, output: 71000 },\n { date: 'Wed', input: 48000, output: 65000 },\n { date: 'Thu', input: 61000, output: 82000 },\n { date: 'Fri', input: 55000, output: 74000 },\n { date: 'Sat', input: 32000, output: 45000 },\n { date: 'Sun', input: 28000, output: 38000 },\n];\n\nconst defaultErrors: ErrorData[] = [\n { type: 'Rate Limit', count: 45, percentage: 40 },\n { type: 'Timeout', count: 32, percentage: 28 },\n { type: 'Invalid Request', count: 20, percentage: 18 },\n { type: 'Server Error', count: 16, percentage: 14 },\n];\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function PerformanceMetrics({\n metrics = defaultMetrics,\n latency = defaultLatency,\n tokenUsage = defaultTokenUsage,\n errors = defaultErrors,\n period = 'Last 24 hours',\n className,\n}: PerformanceMetricsProps) {\n const [activeChart, setActiveChart] = useState<'latency' | 'tokens' | 'errors'>('latency');\n\n const getStatusColor = (status?: string) => {\n switch (status) {\n case 'good':\n return 'bg-emerald-500/10 text-emerald-600';\n case 'warning':\n return 'bg-amber-500/10 text-amber-600';\n case 'error':\n return 'bg-red-500/10 text-red-600';\n default:\n return 'bg-muted text-muted-foreground';\n }\n };\n\n return (\n <div className={cn('rounded-lg border bg-card', className)}>\n {/* Header */}\n <div className=\"flex items-center justify-between border-b px-4 py-3\">\n <div>\n <h3 className=\"font-medium\">Performance Metrics</h3>\n <p className=\"text-xs text-muted-foreground\">{period}</p>\n </div>\n <div className=\"flex gap-1\">\n {(['latency', 'tokens', 'errors'] as const).map((tab) => (\n <button\n key={tab}\n type=\"button\"\n onClick={() => setActiveChart(tab)}\n className={cn(\n 'rounded-md px-3 py-1.5 text-xs capitalize transition-colors',\n activeChart === tab\n ? 'bg-muted font-medium text-foreground'\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n {tab}\n </button>\n ))}\n </div>\n </div>\n\n {/* Metrics grid */}\n <div className=\"grid grid-cols-2 gap-4 border-b px-4 py-4 md:grid-cols-4\">\n {metrics.map((metric) => (\n <div key={metric.id} className=\"space-y-1\">\n <div className=\"flex items-center gap-2\">\n {metric.icon && (\n <div\n className={cn(\n 'flex size-6 items-center justify-center rounded',\n getStatusColor(metric.status)\n )}\n >\n {metric.icon}\n </div>\n )}\n <span className=\"text-xs text-muted-foreground\">{metric.label}</span>\n </div>\n <div className=\"flex items-baseline gap-1\">\n <span className=\"text-xl font-semibold\">{metric.value}</span>\n {metric.unit && (\n <span className=\"text-sm text-muted-foreground\">{metric.unit}</span>\n )}\n </div>\n {metric.change !== undefined && (\n <div className=\"flex items-center gap-1\">\n {metric.change > 0 ? (\n <TrendingUpIcon className=\"size-3 text-emerald-500\" />\n ) : (\n <TrendingDownIcon className=\"size-3 text-red-500\" />\n )}\n <span\n className={cn(\n 'text-xs',\n metric.change > 0 ? 'text-emerald-500' : 'text-red-500'\n )}\n >\n {Math.abs(metric.change)}\n {metric.unit || '%'}\n </span>\n </div>\n )}\n </div>\n ))}\n </div>\n\n {/* Charts */}\n <div className=\"p-4\">\n {activeChart === 'latency' && (\n <div className=\"h-64\">\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <AreaChart data={latency}>\n <CartesianGrid strokeDasharray=\"3 3\" className=\"stroke-muted\" />\n <XAxis dataKey=\"time\" className=\"text-xs\" tick={{ fill: 'currentColor' }} />\n <YAxis className=\"text-xs\" tick={{ fill: 'currentColor' }} />\n <Tooltip\n contentStyle={{\n backgroundColor: 'hsl(var(--card))',\n borderColor: 'hsl(var(--border))',\n borderRadius: '0.5rem',\n }}\n formatter={(value) => [`${value}ms`]}\n />\n <Area\n type=\"monotone\"\n dataKey=\"p99\"\n stroke=\"#ef4444\"\n fill=\"#ef444420\"\n strokeWidth={1}\n />\n <Area\n type=\"monotone\"\n dataKey=\"p95\"\n stroke=\"#f59e0b\"\n fill=\"#f59e0b20\"\n strokeWidth={1}\n />\n <Area\n type=\"monotone\"\n dataKey=\"p50\"\n stroke=\"#22c55e\"\n fill=\"#22c55e20\"\n strokeWidth={2}\n />\n </AreaChart>\n </ResponsiveContainer>\n <div className=\"flex items-center justify-center gap-4 mt-2\">\n <div className=\"flex items-center gap-1.5\">\n <div className=\"size-2 rounded-full bg-emerald-500\" />\n <span className=\"text-xs text-muted-foreground\">P50</span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <div className=\"size-2 rounded-full bg-amber-500\" />\n <span className=\"text-xs text-muted-foreground\">P95</span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <div className=\"size-2 rounded-full bg-red-500\" />\n <span className=\"text-xs text-muted-foreground\">P99</span>\n </div>\n </div>\n </div>\n )}\n\n {activeChart === 'tokens' && (\n <div className=\"h-64\">\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <BarChart data={tokenUsage}>\n <CartesianGrid strokeDasharray=\"3 3\" className=\"stroke-muted\" />\n <XAxis dataKey=\"date\" className=\"text-xs\" tick={{ fill: 'currentColor' }} />\n <YAxis\n className=\"text-xs\"\n tick={{ fill: 'currentColor' }}\n tickFormatter={(value) => `${(value / 1000).toFixed(0)}k`}\n />\n <Tooltip\n contentStyle={{\n backgroundColor: 'hsl(var(--card))',\n borderColor: 'hsl(var(--border))',\n borderRadius: '0.5rem',\n }}\n formatter={(value) => [String(value).replace(/\\B(?=(\\d{3})+(?!\\d))/g, ','), 'Tokens']}\n />\n <Bar dataKey=\"input\" fill=\"hsl(var(--muted-foreground))\" radius={[4, 4, 0, 0]} />\n <Bar dataKey=\"output\" fill=\"hsl(var(--foreground))\" radius={[4, 4, 0, 0]} />\n </BarChart>\n </ResponsiveContainer>\n <div className=\"flex items-center justify-center gap-4 mt-2\">\n <div className=\"flex items-center gap-1.5\">\n <div className=\"size-2 rounded-full bg-muted-foreground\" />\n <span className=\"text-xs text-muted-foreground\">Input</span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <div className=\"size-2 rounded-full bg-foreground\" />\n <span className=\"text-xs text-muted-foreground\">Output</span>\n </div>\n </div>\n </div>\n )}\n\n {activeChart === 'errors' && (\n <div className=\"space-y-3\">\n {errors.map((error) => (\n <div key={error.type} className=\"flex items-center gap-3\">\n <div className=\"w-32 text-sm\">{error.type}</div>\n <div className=\"flex-1 h-2 bg-muted rounded-full overflow-hidden\">\n <div\n className=\"h-full bg-red-500 rounded-full transition-all\"\n style={{ width: `${error.percentage}%` }}\n />\n </div>\n <div className=\"w-20 text-right\">\n <Badge variant=\"secondary\" className=\"text-xs\">\n {error.count} ({error.percentage}%)\n </Badge>\n </div>\n </div>\n ))}\n <div className=\"pt-4 text-center\">\n <p className=\"text-sm text-muted-foreground\">\n Total Errors: {errors.reduce((sum, e) => sum + e.count, 0)}\n </p>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport default PerformanceMetrics;\n","'use client';\n\nimport { useEffect, useRef } from 'react';\nimport { SparklesIcon } from 'lucide-react';\nimport { cn } from '../core/utils';\nimport { TypingIndicator } from '../components/primitives/typing-indicator';\n\nexport interface ChatPanelProps {\n /** Panel title */\n title?: string;\n /** Panel subtitle or status */\n subtitle?: string;\n /** Header icon */\n icon?: React.ReactNode;\n /** Header actions (right side) */\n headerActions?: React.ReactNode;\n /** Messages content */\n children: React.ReactNode;\n /** Input component */\n input?: React.ReactNode;\n /** Quick replies or suggestions (above input) */\n suggestions?: React.ReactNode;\n /** Footer content (below input) */\n footer?: React.ReactNode;\n /** Is loading/typing */\n isLoading?: boolean;\n /** Auto-scroll to bottom */\n autoScroll?: boolean;\n /** Container class */\n className?: string;\n /** Content class */\n contentClassName?: string;\n /** Fixed height or flexible */\n height?: number | string;\n /** Model selector (in header) */\n modelSelector?: React.ReactNode;\n}\n\nexport function ChatPanel({\n title = 'AI Assistant',\n subtitle,\n icon,\n headerActions,\n children,\n input,\n suggestions,\n footer,\n isLoading = false,\n autoScroll = true,\n className,\n contentClassName,\n height,\n modelSelector,\n}: ChatPanelProps) {\n const scrollRef = useRef<HTMLDivElement>(null);\n\n // Auto-scroll to bottom when content changes\n useEffect(() => {\n if (autoScroll && scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n }\n }, [children, isLoading, autoScroll]);\n\n return (\n <div\n className={cn(\n 'flex flex-col overflow-hidden rounded-lg border bg-card',\n className\n )}\n style={{ height: height ? (typeof height === 'number' ? `${height}px` : height) : undefined }}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between border-b px-4 py-3\">\n <div className=\"flex items-center gap-2\">\n {icon || <SparklesIcon className=\"size-4 text-muted-foreground\" />}\n <div>\n <span className=\"font-medium text-sm\">{title}</span>\n {subtitle && (\n <p className=\"text-muted-foreground text-xs\">{subtitle}</p>\n )}\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n {modelSelector}\n {headerActions}\n </div>\n </div>\n\n {/* Messages area */}\n <div ref={scrollRef} className={cn('flex-1 overflow-y-auto', contentClassName)}>\n <div className=\"flex flex-col gap-4 p-4\">\n {children}\n {isLoading && <TypingIndicator />}\n </div>\n </div>\n\n {/* Suggestions */}\n {suggestions && (\n <div className=\"border-t px-4 py-2\">{suggestions}</div>\n )}\n\n {/* Input */}\n {input}\n\n {/* Footer */}\n {footer && (\n <div className=\"border-t px-4 py-1.5\">\n {footer}\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useEffect, useRef } from 'react';\nimport { MessageSquareIcon, MinusIcon, XIcon } from 'lucide-react';\nimport { AnimatePresence, motion } from 'motion/react';\nimport { Button } from '../ui/button';\nimport { cn } from '../core/utils';\nimport { TypingIndicator } from '../components/primitives/typing-indicator';\nimport { StatusBadge } from '../components/primitives/status-badge';\nimport type { WidgetPosition } from '../core/types';\n\nexport interface FloatingWidgetProps {\n /** Is widget open */\n isOpen: boolean;\n /** Is widget minimized */\n isMinimized?: boolean;\n /** Toggle open state */\n onToggle: () => void;\n /** Toggle minimized state */\n onMinimize?: () => void;\n /** Close widget */\n onClose?: () => void;\n /** Widget title */\n title?: string;\n /** Widget icon */\n icon?: React.ReactNode;\n /** Online status */\n status?: 'online' | 'offline' | 'busy' | 'away';\n /** Unread message count */\n unreadCount?: number;\n /** Messages content */\n children: React.ReactNode;\n /** Input component */\n input?: React.ReactNode;\n /** Quick replies */\n quickReplies?: React.ReactNode;\n /** Footer (e.g., \"Powered by...\") */\n footer?: React.ReactNode;\n /** Is loading/typing */\n isLoading?: boolean;\n /** Position on screen */\n position?: WidgetPosition;\n /** Widget width */\n width?: number;\n /** Widget height */\n height?: number;\n /** Container class */\n className?: string;\n /** Show minimizable button */\n showMinimize?: boolean;\n /** Show close button */\n showClose?: boolean;\n}\n\nconst positionClasses: Record<WidgetPosition, string> = {\n 'bottom-right': 'bottom-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n 'top-right': 'top-4 right-4',\n 'top-left': 'top-4 left-4',\n center: 'top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2',\n};\n\nexport function FloatingWidget({\n isOpen,\n isMinimized = false,\n onToggle,\n onMinimize,\n onClose,\n title = 'AI Assistant',\n icon,\n status = 'online',\n unreadCount = 0,\n children,\n input,\n quickReplies,\n footer,\n isLoading = false,\n position = 'bottom-right',\n width = 380,\n height = 480,\n className,\n showMinimize = true,\n showClose = true,\n}: FloatingWidgetProps) {\n const scrollRef = useRef<HTMLDivElement>(null);\n\n // Auto-scroll to bottom\n useEffect(() => {\n if (isOpen && !isMinimized && scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n }\n }, [children, isLoading, isOpen, isMinimized]);\n\n return (\n <div className={cn('fixed z-50', positionClasses[position], className)}>\n <AnimatePresence mode=\"wait\">\n {isOpen && !isMinimized ? (\n <motion.div\n key=\"panel\"\n initial={{ opacity: 0, scale: 0.92, y: 12 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.92, y: 12 }}\n transition={{ duration: 0.2, ease: 'easeOut' }}\n className=\"flex flex-col overflow-hidden rounded-lg border bg-card shadow-lg\"\n style={{ width, height }}\n >\n {/* Header */}\n <div className=\"flex items-center gap-3 border-b px-4 py-3\">\n <div className=\"flex size-8 items-center justify-center rounded-full bg-muted/50\">\n {icon || <MessageSquareIcon className=\"size-3.5 text-muted-foreground\" />}\n </div>\n <div className=\"flex-1\">\n <span className=\"font-medium text-sm\">{title}</span>\n <StatusBadge status={status} className=\"mt-0.5\" />\n </div>\n <div className=\"flex items-center gap-0.5\">\n {showMinimize && onMinimize && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"size-7 p-0 text-muted-foreground hover:text-foreground\"\n onClick={onMinimize}\n >\n <MinusIcon className=\"size-3.5\" />\n </Button>\n )}\n {showClose && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"size-7 p-0 text-muted-foreground hover:text-foreground\"\n onClick={onClose || onToggle}\n >\n <XIcon className=\"size-3.5\" />\n </Button>\n )}\n </div>\n </div>\n\n {/* Messages */}\n <div ref={scrollRef} className=\"flex-1 overflow-y-auto\">\n <div className=\"flex flex-col gap-3 p-4\">\n {children}\n {isLoading && <TypingIndicator size=\"sm\" />}\n </div>\n </div>\n\n {/* Quick replies / action panel.\n Supports both small reply chips and richer action panels (e.g. a\n confirm card). Constrained to a fraction of the widget height with\n its own scroll so it never covers the conversation, and separated\n from the transcript with a top border. */}\n {quickReplies && (\n <div className=\"max-h-[40%] shrink-0 overflow-y-auto border-t bg-muted/30 px-4 py-2\">\n {quickReplies}\n </div>\n )}\n\n {/* Input */}\n {input}\n\n {/* Footer */}\n {footer && (\n <div className=\"border-t px-4 py-1.5\">\n <p className=\"text-center text-[10px] text-muted-foreground\">{footer}</p>\n </div>\n )}\n </motion.div>\n ) : (\n <motion.button\n key=\"trigger\"\n type=\"button\"\n initial={{ scale: 0.8, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0.8, opacity: 0 }}\n transition={{ duration: 0.15, ease: 'easeOut' }}\n whileHover={{ scale: 1.05 }}\n whileTap={{ scale: 0.95 }}\n onClick={onToggle}\n className=\"relative flex size-12 items-center justify-center rounded-full border bg-card shadow-lg transition-colors hover:bg-muted/50\"\n >\n {icon || <MessageSquareIcon className=\"size-5 text-foreground\" />}\n {unreadCount > 0 && (\n <span className=\"absolute -top-0.5 -right-0.5 flex size-4 items-center justify-center rounded-full bg-foreground font-medium text-[9px] text-background\">\n {unreadCount > 9 ? '9+' : unreadCount}\n </span>\n )}\n </motion.button>\n )}\n </AnimatePresence>\n </div>\n );\n}\n","'use client';\n\nimport { useEffect, useRef } from 'react';\nimport { XIcon, GripVerticalIcon } from 'lucide-react';\nimport { motion } from 'motion/react';\nimport { Button } from '../ui/button';\nimport { cn } from '../core/utils';\nimport { TypingIndicator } from '../components/primitives/typing-indicator';\n\nexport interface FullscreenDashboardProps {\n /** Is fullscreen active */\n isFullscreen?: boolean;\n /** Exit fullscreen handler */\n onExitFullscreen?: () => void;\n /** Title */\n title?: string;\n /** Header actions */\n headerActions?: React.ReactNode;\n /** Main content (chat area) */\n children: React.ReactNode;\n /** Sidebar content (optional) */\n sidebar?: React.ReactNode;\n /** Input component */\n input?: React.ReactNode;\n /** Is loading */\n isLoading?: boolean;\n /** Sidebar position */\n sidebarPosition?: 'left' | 'right';\n /** Sidebar width */\n sidebarWidth?: number;\n /** Show sidebar toggle */\n showSidebarToggle?: boolean;\n /** Sidebar is collapsed */\n isSidebarCollapsed?: boolean;\n /** Toggle sidebar */\n onToggleSidebar?: () => void;\n /** Container class */\n className?: string;\n}\n\nexport function FullscreenDashboard({\n isFullscreen = true,\n onExitFullscreen,\n title = 'AI Dashboard',\n headerActions,\n children,\n sidebar,\n input,\n isLoading = false,\n sidebarPosition = 'right',\n sidebarWidth = 320,\n showSidebarToggle = true,\n isSidebarCollapsed = false,\n onToggleSidebar,\n className,\n}: FullscreenDashboardProps) {\n const scrollRef = useRef<HTMLDivElement>(null);\n\n // Auto-scroll main content\n useEffect(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n }\n }, [children, isLoading]);\n\n // Esc exits fullscreen. Guarded for SSR (no window/document on the server).\n useEffect(() => {\n if (!isFullscreen || !onExitFullscreen) return;\n if (typeof document === 'undefined') return;\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onExitFullscreen();\n };\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [isFullscreen, onExitFullscreen]);\n\n const mainContent = (\n <div className=\"flex flex-1 flex-col overflow-hidden\">\n {/* Main messages/content area */}\n <div ref={scrollRef} className=\"flex-1 overflow-y-auto\">\n <div className=\"mx-auto max-w-3xl p-6\">\n <div className=\"flex flex-col gap-4\">\n {children}\n {isLoading && <TypingIndicator />}\n </div>\n </div>\n </div>\n\n {/* Input */}\n {input && (\n <div className=\"border-t bg-background\">\n <div className=\"mx-auto max-w-3xl\">{input}</div>\n </div>\n )}\n </div>\n );\n\n const sidebarContent = sidebar && !isSidebarCollapsed && (\n <motion.div\n initial={{ width: 0, opacity: 0 }}\n animate={{ width: sidebarWidth, opacity: 1 }}\n exit={{ width: 0, opacity: 0 }}\n transition={{ duration: 0.2 }}\n className={cn(\n 'shrink-0 overflow-hidden border-l bg-muted/30',\n sidebarPosition === 'left' && 'order-first border-l-0 border-r'\n )}\n style={{ width: sidebarWidth }}\n >\n <div className=\"h-full overflow-y-auto p-4\">{sidebar}</div>\n </motion.div>\n );\n\n return (\n <div\n className={cn(\n 'flex flex-col bg-background',\n isFullscreen && 'fixed inset-0 z-50',\n !isFullscreen && 'h-full',\n className\n )}\n >\n {/* Header */}\n <header className=\"flex h-14 items-center justify-between border-b px-4\">\n <div className=\"flex items-center gap-3\">\n {showSidebarToggle && sidebar && onToggleSidebar && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"size-8 p-0\"\n onClick={onToggleSidebar}\n >\n <GripVerticalIcon className=\"size-4\" />\n </Button>\n )}\n <h1 className=\"font-semibold text-lg\">{title}</h1>\n </div>\n\n <div className=\"flex items-center gap-2\">\n {headerActions}\n {onExitFullscreen && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n aria-label=\"Exit fullscreen\"\n title=\"Exit fullscreen (Esc)\"\n className=\"size-8 shrink-0 p-0\"\n onClick={onExitFullscreen}\n >\n <XIcon className=\"size-4\" />\n </Button>\n )}\n </div>\n </header>\n\n {/* Main area with optional sidebar */}\n <div className=\"flex flex-1 overflow-hidden\">\n {sidebarPosition === 'left' && sidebarContent}\n {mainContent}\n {sidebarPosition === 'right' && sidebarContent}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useEffect, useRef, useState } from 'react';\nimport { GripVerticalIcon, PanelLeftCloseIcon, PanelLeftOpenIcon } from 'lucide-react';\nimport { motion } from 'motion/react';\nimport { Button } from '../ui/button';\nimport { cn } from '../core/utils';\nimport { TypingIndicator } from '../components/primitives/typing-indicator';\n\nexport interface SplitViewProps {\n /** Chat/main content (left side) */\n children: React.ReactNode;\n /** Data panel content (right side) */\n dataPanel: React.ReactNode;\n /** Chat input */\n input?: React.ReactNode;\n /** Is loading */\n isLoading?: boolean;\n /** Initial split ratio (0-1) */\n initialSplit?: number;\n /** Minimum panel width in pixels */\n minPanelWidth?: number;\n /** Is data panel collapsed */\n isCollapsed?: boolean;\n /** Toggle collapse */\n onToggleCollapse?: () => void;\n /** Resizable */\n resizable?: boolean;\n /** Container class */\n className?: string;\n /** Chat panel title */\n chatTitle?: string;\n /** Data panel title */\n dataPanelTitle?: string;\n}\n\nexport function SplitView({\n children,\n dataPanel,\n input,\n isLoading = false,\n initialSplit = 0.5,\n minPanelWidth = 300,\n isCollapsed = false,\n onToggleCollapse,\n resizable = true,\n className,\n chatTitle = 'Chat',\n dataPanelTitle = 'Data',\n}: SplitViewProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const scrollRef = useRef<HTMLDivElement>(null);\n const [splitRatio, setSplitRatio] = useState(initialSplit);\n const [isDragging, setIsDragging] = useState(false);\n\n // Auto-scroll chat\n useEffect(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n }\n }, [children, isLoading]);\n\n // Handle drag resize\n const handleMouseDown = () => {\n if (!resizable) return;\n setIsDragging(true);\n };\n\n useEffect(() => {\n if (!isDragging) return;\n\n const handleMouseMove = (e: MouseEvent) => {\n if (!containerRef.current) return;\n const rect = containerRef.current.getBoundingClientRect();\n const newRatio = (e.clientX - rect.left) / rect.width;\n \n // Clamp to min/max\n const minRatio = minPanelWidth / rect.width;\n const maxRatio = 1 - minRatio;\n setSplitRatio(Math.max(minRatio, Math.min(maxRatio, newRatio)));\n };\n\n const handleMouseUp = () => {\n setIsDragging(false);\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, [isDragging, minPanelWidth]);\n\n return (\n <div\n ref={containerRef}\n className={cn('flex h-full overflow-hidden rounded-lg border bg-card', className)}\n >\n {/* Chat panel */}\n <div\n className=\"flex flex-col overflow-hidden\"\n style={{ width: isCollapsed ? '100%' : `${splitRatio * 100}%` }}\n >\n {/* Chat header */}\n <div className=\"flex h-10 items-center justify-between border-b px-3\">\n <span className=\"font-medium text-sm\">{chatTitle}</span>\n {onToggleCollapse && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"size-6 p-0\"\n onClick={onToggleCollapse}\n >\n {isCollapsed ? (\n <PanelLeftOpenIcon className=\"size-3.5\" />\n ) : (\n <PanelLeftCloseIcon className=\"size-3.5\" />\n )}\n </Button>\n )}\n </div>\n\n {/* Chat content */}\n <div ref={scrollRef} className=\"flex-1 overflow-y-auto\">\n <div className=\"flex flex-col gap-4 p-4\">\n {children}\n {isLoading && <TypingIndicator />}\n </div>\n </div>\n\n {/* Chat input */}\n {input}\n </div>\n\n {/* Resize handle */}\n {!isCollapsed && resizable && (\n <div\n className={cn(\n 'flex w-1 cursor-col-resize items-center justify-center bg-border hover:bg-muted-foreground/20 transition-colors',\n isDragging && 'bg-primary'\n )}\n onMouseDown={handleMouseDown}\n >\n <GripVerticalIcon className=\"size-3 text-muted-foreground\" />\n </div>\n )}\n\n {/* Data panel */}\n {!isCollapsed && (\n <motion.div\n initial={{ width: 0, opacity: 0 }}\n animate={{ width: `${(1 - splitRatio) * 100}%`, opacity: 1 }}\n className=\"flex flex-col overflow-hidden\"\n >\n {/* Data header */}\n <div className=\"flex h-10 items-center border-b px-3\">\n <span className=\"font-medium text-sm\">{dataPanelTitle}</span>\n </div>\n\n {/* Data content */}\n <div className=\"flex-1 overflow-y-auto p-4\">{dataPanel}</div>\n </motion.div>\n )}\n </div>\n );\n}\n","// ============================================================================\n// AGENT EVERYWHERE - Component Registration\n// ============================================================================\n// Wires every component referenced by the manifest into the runtime\n// componentRegistry so an orchestrator can resolve a manifest name to a real\n// React component (via DynamicRenderer / SlotRenderer) at runtime.\n\nimport type { ComponentType } from 'react';\nimport { componentRegistry } from './index';\n\nimport { MessageBubble } from '../components/primitives/message';\nimport { TypingIndicator } from '../components/primitives/typing-indicator';\nimport { StatusBadge } from '../components/primitives/status-badge';\n\nimport { PromptInput } from '../components/input/prompt-input';\nimport { MultimodalInput } from '../components/input/multimodal-input';\nimport { QuickReplies } from '../components/input/quick-replies';\nimport { TemplateSelector } from '../components/input/template-selector';\nimport { InlineSuggestionsInput } from '../components/input/inline-suggestions';\nimport { FileDropZone } from '../components/input/file-drop-zone';\nimport { PromptLibrary } from '../components/input/prompt-library';\n\nimport { PersonaSelector } from '../components/interactive/persona-selector';\nimport { EntityCard } from '../components/interactive/entity-card';\nimport { OptionCards } from '../components/interactive/option-cards';\nimport { SettingsPanel } from '../components/interactive/settings-panel';\nimport { AgentHandoff } from '../components/interactive/agent-handoff';\nimport { ListingFeed } from '../components/interactive/listing-feed';\nimport { ControlGrid } from '../components/interactive/control-grid';\nimport { RecommendationCards } from '../components/interactive/recommendation-cards';\nimport { ScheduleTimeline } from '../components/interactive/schedule-timeline';\n\nimport { MessageWithReasoning } from '../components/messages/message-with-reasoning';\nimport { MessageWithSteps } from '../components/messages/message-with-steps';\nimport { MessageWithFeedback } from '../components/messages/message-with-feedback';\nimport { MessageWithAttachments } from '../components/messages/message-with-attachments';\nimport { ConversationArtifact } from '../components/messages/conversation-artifact';\n\nimport { ChartContainer } from '../components/data-display/chart-container';\nimport { MetricsGrid } from '../components/data-display/metrics-grid';\nimport { DataTable } from '../components/data-display/data-table';\nimport { ProgressTracker } from '../components/data-display/progress-tracker';\nimport { SentimentDisplay } from '../components/data-display/sentiment-display';\nimport { MediaGallery } from '../components/data-display/media-gallery';\nimport { AllocationBreakdown } from '../components/data-display/allocation-breakdown';\nimport { AnalyticsDashboard } from '../components/data-display/analytics-dashboard';\n\nimport { ImageGenerator } from '../components/specialty/image-generator';\nimport { WritingAssistant } from '../components/specialty/writing-assistant';\nimport { OnboardingWizard } from '../components/specialty/onboarding-wizard';\nimport { QuizCard } from '../components/specialty/quiz-card';\nimport { GuidedLessonFlow } from '../components/specialty/guided-lesson-flow';\nimport { MediaEditorCanvas } from '../components/specialty/media-editor-canvas';\n\nimport { ConversationAnalytics } from '../components/analytics/conversation-analytics';\nimport { PerformanceMetrics } from '../components/analytics/performance-metrics';\n\nimport { ChatPanel } from '../containers/chat-panel';\nimport { FloatingWidget } from '../containers/floating-widget';\nimport { FullscreenDashboard } from '../containers/fullscreen-dashboard';\nimport { SplitView } from '../containers/split-view';\n\ntype AnyComponent = ComponentType<Record<string, unknown>>;\n\n/**\n * Map of manifest component name → component. Keys correspond exactly to the\n * `name` field of each entry in `componentManifest`, so a render instruction\n * produced from the manifest resolves to the right component.\n */\nexport const componentMap: Record<string, AnyComponent> = {\n MessageBubble,\n TypingIndicator,\n StatusBadge,\n PromptInput,\n MultimodalInput,\n QuickReplies,\n TemplateSelector,\n InlineSuggestionsInput,\n FileDropZone,\n PromptLibrary,\n PersonaSelector,\n EntityCard,\n OptionCards,\n SettingsPanel,\n AgentHandoff,\n ListingFeed,\n ControlGrid,\n RecommendationCards,\n ScheduleTimeline,\n MessageWithReasoning,\n MessageWithSteps,\n MessageWithFeedback,\n MessageWithAttachments,\n ConversationArtifact,\n ChartContainer,\n MetricsGrid,\n DataTable,\n ProgressTracker,\n SentimentDisplay,\n MediaGallery,\n AllocationBreakdown,\n AnalyticsDashboard,\n ImageGenerator,\n WritingAssistant,\n OnboardingWizard,\n QuizCard,\n GuidedLessonFlow,\n MediaEditorCanvas,\n ConversationAnalytics,\n PerformanceMetrics,\n ChatPanel,\n FloatingWidget,\n FullscreenDashboard,\n SplitView,\n} as unknown as Record<string, AnyComponent>;\n\nlet registered = false;\n\n/**\n * Register every built-in component into the shared registry. Idempotent —\n * safe to call from multiple entry points. Call once during app startup so the\n * orchestrator can render components by manifest name.\n */\nexport function registerAllComponents() {\n if (registered) return;\n for (const [name, component] of Object.entries(componentMap)) {\n componentRegistry.register(name, component);\n }\n registered = true;\n}\n","// ============================================================================\n// AGENT EVERYWHERE - Mock Backend\n// ============================================================================\n// A fully in-memory implementation of `AgentBackend`. It fakes streaming text,\n// reasoning, tool calls, and report generation so the engine and playground run\n// with zero network access and no real LLM. Everything here is deterministic\n// scaffolding with abstract, domain-neutral content.\n\nimport type {\n AgentBackend,\n AgentReport,\n AgentStreamChunk,\n GenerateReportOptions,\n SendOptions,\n ToolDefinition,\n} from './backend';\nimport type { DataPayload } from './types';\nimport { generateId } from './utils';\n\nexport interface MockBackendConfig {\n /** Delay between streamed tokens, ms. */\n tokenDelayMs?: number;\n /** Delay before the stream starts, ms. */\n latencyMs?: number;\n /** Emit reasoning steps before the answer. */\n withReasoning?: boolean;\n /** Emit a tool call + result mid-stream. */\n withToolCalls?: boolean;\n /** Attach a generated data payload to responses. */\n withData?: boolean;\n /**\n * Override how the reply text is produced. Receives the user content and\n * returns the full assistant reply (still streamed token-by-token).\n */\n responder?: (content: string) => string;\n /** Tool definitions advertised by `listTools()`. */\n tools?: ToolDefinition[];\n}\n\nconst sleep = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));\n\nconst DEFAULT_REPLY =\n 'Here is a summary of what I found. The key signals are trending in a ' +\n 'positive direction, with a few areas worth a closer look. I can break any ' +\n 'of these down further or generate a full report on demand.';\n\nfunction buildSampleData(): DataPayload {\n const labels = ['Segment A', 'Segment B', 'Segment C', 'Segment D'];\n return {\n type: 'chart',\n chart: {\n type: 'bar',\n title: 'Distribution by segment',\n insight: 'Segment A leads, with steady contribution across the rest.',\n data: labels.map((label, i) => ({\n label,\n value: Math.round(40 + Math.sin(i) * 25 + i * 8),\n })),\n },\n };\n}\n\nexport function createMockBackend(config: MockBackendConfig = {}): AgentBackend {\n const {\n tokenDelayMs = 18,\n latencyMs = 300,\n withReasoning = true,\n withToolCalls = false,\n withData = false,\n responder,\n tools = [],\n } = config;\n\n async function* send(\n content: string,\n options: SendOptions = {}\n ): AsyncIterable<AgentStreamChunk> {\n const { signal } = options;\n const aborted = () => signal?.aborted;\n\n const messageId = generateId('msg');\n yield { type: 'message_start', messageId, role: 'assistant' };\n\n await sleep(latencyMs);\n if (aborted()) return;\n\n if (withReasoning) {\n const steps = [\n { label: 'Understanding request', content: 'Parsing intent and scope.' },\n { label: 'Gathering context', content: 'Pulling relevant signals.' },\n { label: 'Composing response', content: 'Drafting a concise answer.' },\n ];\n for (const [i, s] of steps.entries()) {\n if (aborted()) return;\n yield {\n type: 'reasoning',\n step: {\n id: `reason-${i}`,\n label: s.label,\n content: s.content,\n status: 'complete',\n },\n };\n await sleep(120);\n }\n }\n\n if (withToolCalls && (options.tools?.length || tools.length)) {\n const callId = generateId('call');\n const tool = (options.tools ?? tools)[0];\n yield {\n type: 'tool_call',\n call: {\n id: callId,\n name: tool?.name ?? 'query',\n arguments: { input: content },\n label: tool?.description ?? 'Running query',\n },\n };\n await sleep(260);\n if (aborted()) return;\n yield {\n type: 'tool_result',\n callId,\n result: { status: 'success', output: { rows: 4 }, data: buildSampleData() },\n };\n }\n\n const reply = responder ? responder(content) : DEFAULT_REPLY;\n const tokens = reply.split(/(\\s+)/);\n let streamed = '';\n for (const token of tokens) {\n if (aborted()) return;\n streamed += token;\n yield { type: 'text_delta', text: token };\n await sleep(tokenDelayMs);\n }\n\n let data: DataPayload | undefined;\n if (withData) {\n data = buildSampleData();\n yield { type: 'data', data };\n }\n\n yield {\n type: 'message_complete',\n message: {\n id: messageId,\n role: 'assistant',\n content: streamed,\n timestamp: new Date(),\n data,\n },\n };\n }\n\n async function generateReport(\n options: GenerateReportOptions\n ): Promise<AgentReport> {\n await sleep(latencyMs * 2);\n const metrics: DataPayload = {\n type: 'metrics',\n metrics: [\n { id: 'm1', label: 'Total', value: '12,480', trend: { direction: 'up', value: 12 } },\n { id: 'm2', label: 'Active', value: '3,210', trend: { direction: 'up', value: 4 } },\n { id: 'm3', label: 'Rate', value: '68%', trend: { direction: 'down', value: 2 } },\n { id: 'm4', label: 'Score', value: '4.6', trend: { direction: 'stable', value: 0 } },\n ],\n };\n return {\n id: generateId('report'),\n title: 'Generated Report',\n subtitle: options.prompt.slice(0, 120),\n generatedAt: new Date(),\n sections: [\n {\n id: 'overview',\n title: 'Overview',\n summary:\n 'A high-level snapshot of the requested metrics. All figures are ' +\n 'illustrative placeholders produced by the mock backend.',\n data: metrics,\n },\n {\n id: 'breakdown',\n title: 'Breakdown',\n summary: 'Distribution across the primary segments.',\n data: buildSampleData(),\n },\n {\n id: 'detail',\n title: 'Detail',\n summary: 'Row-level detail backing the figures above.',\n data: {\n type: 'table',\n table: {\n title: 'Records',\n columns: [\n { key: 'name', label: 'Name' },\n { key: 'value', label: 'Value', type: 'number', align: 'right' },\n { key: 'change', label: 'Change', align: 'right' },\n ],\n rows: [\n { name: 'Segment A', value: 5120, change: '+12%' },\n { name: 'Segment B', value: 3480, change: '+4%' },\n { name: 'Segment C', value: 2310, change: '-2%' },\n { name: 'Segment D', value: 1570, change: '+1%' },\n ],\n },\n },\n },\n ],\n };\n }\n\n return {\n send,\n generateReport,\n listTools: () => tools,\n };\n}\n","'use client';\n\n// ============================================================================\n// AGENT EVERYWHERE - Backend Hook\n// ============================================================================\n// Bridges an `AgentBackend` to local message state. Returns a `send` function\n// that streams an assistant reply into a live-updating message, plus a\n// `generateReport` helper. Works standalone or wired into AgentProvider.\n\nimport { useCallback, useRef, useState } from 'react';\nimport type {\n AgentBackend,\n AgentReport,\n ToolCall,\n} from './backend';\nimport type {\n AgentMessage,\n Attachment,\n ExecutionStep,\n ReasoningStep,\n} from './types';\nimport { generateId } from './utils';\n\nexport interface UseAgentBackendOptions {\n backend: AgentBackend;\n initialMessages?: AgentMessage[];\n onError?: (error: Error) => void;\n}\n\nexport interface UseAgentBackendResult {\n messages: AgentMessage[];\n isLoading: boolean;\n error?: string;\n activeToolCalls: ToolCall[];\n send: (content: string, attachments?: Attachment[]) => Promise<void>;\n generateReport: (prompt: string) => Promise<AgentReport>;\n setMessages: React.Dispatch<React.SetStateAction<AgentMessage[]>>;\n reset: () => void;\n cancel: () => void;\n}\n\nexport function useAgentBackend({\n backend,\n initialMessages = [],\n onError,\n}: UseAgentBackendOptions): UseAgentBackendResult {\n const [messages, setMessages] = useState<AgentMessage[]>(initialMessages);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | undefined>(undefined);\n const [activeToolCalls, setActiveToolCalls] = useState<ToolCall[]>([]);\n const abortRef = useRef<AbortController | undefined>(undefined);\n\n const upsertAssistant = useCallback(\n (id: string, updater: (prev: AgentMessage) => AgentMessage) => {\n setMessages((prev) => {\n const exists = prev.some((m) => m.id === id);\n if (!exists) {\n const base: AgentMessage = {\n id,\n role: 'assistant',\n content: '',\n timestamp: new Date(),\n };\n return [...prev, updater(base)];\n }\n return prev.map((m) => (m.id === id ? updater(m) : m));\n });\n },\n []\n );\n\n const send = useCallback(\n async (content: string, attachments?: Attachment[]) => {\n if (!content.trim() && (!attachments || attachments.length === 0)) return;\n\n const userMessage: AgentMessage = {\n id: generateId('msg'),\n role: 'user',\n content,\n timestamp: new Date(),\n attachments,\n };\n setMessages((prev) => [...prev, userMessage]);\n setError(undefined);\n setIsLoading(true);\n setActiveToolCalls([]);\n\n const controller = new AbortController();\n abortRef.current = controller;\n\n let assistantId = '';\n const reasoning: ReasoningStep[] = [];\n const steps: ExecutionStep[] = [];\n\n try {\n const history = [...messages, userMessage];\n for await (const chunk of backend.send(content, {\n history,\n attachments,\n tools: backend.listTools?.(),\n signal: controller.signal,\n })) {\n switch (chunk.type) {\n case 'message_start':\n assistantId = chunk.messageId;\n upsertAssistant(assistantId, (m) => m);\n break;\n case 'reasoning':\n reasoning.push(chunk.step);\n upsertAssistant(assistantId, (m) => ({ ...m, reasoning: [...reasoning] }));\n break;\n case 'step':\n steps.push(chunk.step);\n upsertAssistant(assistantId, (m) => ({ ...m, steps: [...steps] }));\n break;\n case 'tool_call':\n setActiveToolCalls((prev) => [...prev, chunk.call]);\n break;\n case 'tool_result':\n setActiveToolCalls((prev) => prev.filter((c) => c.id !== chunk.callId));\n if (chunk.result.data) {\n upsertAssistant(assistantId, (m) => ({ ...m, data: chunk.result.data }));\n }\n break;\n case 'text_delta':\n upsertAssistant(assistantId, (m) => ({\n ...m,\n content: m.content + chunk.text,\n }));\n break;\n case 'data':\n upsertAssistant(assistantId, (m) => ({ ...m, data: chunk.data }));\n break;\n case 'message_complete':\n upsertAssistant(assistantId, (m) => ({ ...m, ...chunk.message, id: m.id }));\n break;\n case 'error':\n throw new Error(chunk.message);\n }\n }\n } catch (err) {\n if (controller.signal.aborted) return;\n const e = err instanceof Error ? err : new Error('Backend request failed');\n setError(e.message);\n onError?.(e);\n } finally {\n setIsLoading(false);\n setActiveToolCalls([]);\n abortRef.current = undefined;\n }\n },\n [backend, messages, upsertAssistant, onError]\n );\n\n const generateReport = useCallback(\n (prompt: string) => backend.generateReport({ prompt, history: messages }),\n [backend, messages]\n );\n\n const cancel = useCallback(() => {\n abortRef.current?.abort();\n setIsLoading(false);\n }, []);\n\n const reset = useCallback(() => {\n abortRef.current?.abort();\n setMessages(initialMessages);\n setError(undefined);\n setIsLoading(false);\n setActiveToolCalls([]);\n }, [initialMessages]);\n\n return {\n messages,\n isLoading,\n error,\n activeToolCalls,\n send,\n generateReport,\n setMessages,\n reset,\n cancel,\n };\n}\n","// ============================================================================\n// AGENT EVERYWHERE - Semantic-Builder WebSocket Client\n// ============================================================================\n// A small, framework- and vendor-neutral WebSocket client that speaks the\n// streaming semantic-builder chat protocol. It owns connection lifecycle,\n// exponential-backoff reconnect, and typed envelope dispatch. React hooks and\n// the AgentBackend adapter both build on top of this — there is exactly one\n// place that understands the wire format.\n//\n// The client embeds NO API origin and NO route structure. The caller supplies\n// either a complete `socketUrl` or a `resolveSocketUrl` function, so nothing\n// about any specific backend deployment ships inside this package.\n\nimport {\n type AgentAttachment,\n type AgentBlock,\n type ConversationHistoryItem,\n type ServerEnvelope,\n type SocketUrlResolver,\n type UserMessageEnvelope,\n} from './protocol';\n\nexport type ConnectionState =\n | 'idle'\n | 'connecting'\n | 'ready'\n | 'streaming'\n | 'error'\n | 'requires_shared_domain';\n\nexport interface SocketClientOptions<TBlock = AgentBlock> {\n /** Numeric (or numeric-string) website id. */\n websiteId: string | number;\n /** Page-category token the conversation is scoped to. */\n pageCategoryId: string;\n /**\n * A fully-qualified `ws://`/`wss://` URL, OR an http(s) origin that will be\n * upgraded by `resolveSocketUrl`. Provide exactly one of `socketUrl` or\n * `resolveSocketUrl`.\n */\n socketUrl?: string;\n /**\n * Resolver that returns the WebSocket URL for this conversation. Supplied by\n * the host so the package embeds no origin/route. Takes precedence over\n * `socketUrl` when both are present.\n */\n resolveSocketUrl?: SocketUrlResolver;\n /** Called whenever the high-level connection state changes. */\n onStateChange?: (state: ConnectionState) => void;\n /** Called for every decoded server envelope. */\n onEnvelope?: (envelope: ServerEnvelope<TBlock>) => void;\n /** Called on a transport or protocol error with a human-readable message. */\n onError?: (message: string) => void;\n /**\n * Optional WebSocket implementation (for non-browser/SSR/test environments).\n * Defaults to the global `WebSocket`.\n */\n webSocketImpl?: typeof WebSocket;\n /** Cap on the reconnect backoff, ms. Defaults to 30_000. */\n maxReconnectDelayMs?: number;\n}\n\nexport interface SocketSendPayload<TBlock = AgentBlock> {\n message: string;\n blocks: TBlock[];\n conversationHistory: ConversationHistoryItem[];\n contentBrief?: Record<string, unknown> | null;\n attachments?: AgentAttachment[];\n}\n\nfunction reconnectDelayMs(attempt: number, cap: number): number {\n return Math.min(1000 * 2 ** Math.max(attempt - 1, 0), cap);\n}\n\n/**\n * Manages a single semantic-builder WebSocket connection. Pure TS (not React)\n * so it can be reused by hooks, the AgentBackend adapter, tests, or a\n * non-React host. Call `connect()` to open and `close()` to tear down.\n */\nexport class SemanticBuilderSocketClient<TBlock = AgentBlock> {\n private readonly options: SocketClientOptions<TBlock>;\n private socket: WebSocket | null = null;\n private reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n private shouldReconnect = true;\n private reconnectAttempts = 0;\n private connectedOnce = false;\n private state: ConnectionState = 'idle';\n private readonly WebSocketImpl: typeof WebSocket;\n private readonly maxReconnectDelayMs: number;\n\n constructor(options: SocketClientOptions<TBlock>) {\n this.options = options;\n const impl =\n options.webSocketImpl ??\n (typeof WebSocket !== 'undefined' ? WebSocket : undefined);\n if (!impl) {\n throw new Error(\n 'SemanticBuilderSocketClient: no WebSocket implementation available. ' +\n 'Pass `webSocketImpl` when running outside a browser.',\n );\n }\n this.WebSocketImpl = impl;\n this.maxReconnectDelayMs = options.maxReconnectDelayMs ?? 30_000;\n }\n\n /** Current high-level connection state. */\n getState(): ConnectionState {\n return this.state;\n }\n\n /** True when the socket is open and the backend is ready for messages. */\n isReady(): boolean {\n return (\n this.state === 'ready' &&\n this.socket?.readyState === this.WebSocketImpl.OPEN\n );\n }\n\n private setState(next: ConnectionState) {\n if (this.state === next) return;\n this.state = next;\n this.options.onStateChange?.(next);\n }\n\n private resolveUrl(): string {\n const { resolveSocketUrl, socketUrl, websiteId, pageCategoryId } =\n this.options;\n if (resolveSocketUrl) {\n return resolveSocketUrl({ websiteId, pageCategoryId });\n }\n if (socketUrl && socketUrl.trim().length > 0) {\n return socketUrl;\n }\n throw new Error(\n 'No WebSocket URL available. Provide either `socketUrl` or ' +\n '`resolveSocketUrl` (the host supplies the origin and route).',\n );\n }\n\n /** Open (or re-open) the connection. Idempotent for an already-open socket. */\n connect(): void {\n let url: string;\n try {\n url = this.resolveUrl();\n } catch (err) {\n this.setState('error');\n this.options.onError?.(\n err instanceof Error ? err.message : 'Could not resolve socket URL.',\n );\n return;\n }\n\n this.closeSocket();\n this.shouldReconnect = true;\n this.setState('connecting');\n\n const socket = new this.WebSocketImpl(url);\n this.socket = socket;\n\n socket.addEventListener('open', () => {\n this.setState('connecting');\n });\n\n socket.addEventListener('message', (event: MessageEvent) => {\n let envelope: ServerEnvelope<TBlock> | null = null;\n try {\n envelope = JSON.parse(String(event.data));\n } catch {\n return;\n }\n if (!envelope) return;\n\n switch (envelope.type) {\n case 'connection_ready':\n this.reconnectAttempts = 0;\n this.connectedOnce = true;\n this.setState('ready');\n break;\n case 'assistant_message_start':\n case 'assistant_message_delta':\n case 'assistant_message_thinking_delta':\n this.setState('streaming');\n break;\n case 'assistant_message_complete':\n this.setState('ready');\n break;\n case 'error':\n this.setState(this.isSocketOpen() ? 'ready' : 'error');\n this.options.onError?.(\n envelope.error || 'The backend could not process that request.',\n );\n break;\n default:\n break;\n }\n\n this.options.onEnvelope?.(envelope);\n });\n\n socket.addEventListener('close', () => {\n this.socket = null;\n if (!this.shouldReconnect) return;\n\n this.reconnectAttempts += 1;\n const delay = reconnectDelayMs(\n this.reconnectAttempts,\n this.maxReconnectDelayMs,\n );\n\n // Surface an error only after a couple of failed attempts so a single\n // transient drop doesn't flash an error at the user.\n const surfaceError =\n this.reconnectAttempts >= (this.connectedOnce ? 2 : 3);\n if (surfaceError) {\n this.setState('error');\n this.options.onError?.(\n 'Unable to reach the agent service. Retrying automatically…',\n );\n } else if (this.state !== 'requires_shared_domain') {\n this.setState('connecting');\n }\n\n this.reconnectTimer = setTimeout(() => this.connect(), delay);\n });\n\n socket.addEventListener('error', () => {\n // Defer to the close handler for retry/surface decisions; browsers fire\n // an error event before the close/retry cycle.\n });\n }\n\n /**\n * Send a user message. Returns false (without throwing) when the socket is\n * not ready, so callers can surface a friendly \"not connected yet\" message.\n */\n send(payload: SocketSendPayload<TBlock>): boolean {\n if (!this.isReady() || !this.socket) {\n this.setState('error');\n this.options.onError?.(\n 'The agent is not ready yet. Wait for the connection to finish, then try again.',\n );\n return false;\n }\n\n const envelope: UserMessageEnvelope<TBlock> = {\n type: 'user_message',\n message: payload.message,\n blocks: payload.blocks,\n conversationHistory: payload.conversationHistory,\n contentBrief: payload.contentBrief ?? null,\n attachments: payload.attachments ?? [],\n };\n\n this.setState('streaming');\n this.socket.send(JSON.stringify(envelope));\n return true;\n }\n\n /** Force a fresh connection attempt, resetting backoff. */\n retry(): void {\n this.shouldReconnect = true;\n this.reconnectAttempts = 0;\n this.connect();\n }\n\n /** Permanently close the connection and stop reconnecting. */\n close(): void {\n this.shouldReconnect = false;\n this.closeSocket();\n }\n\n private isSocketOpen(): boolean {\n return this.socket?.readyState === this.WebSocketImpl.OPEN;\n }\n\n private closeSocket(): void {\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n const socket = this.socket;\n this.socket = null;\n if (socket && socket.readyState < this.WebSocketImpl.CLOSING) {\n socket.close();\n }\n }\n}\n","// ============================================================================\n// AGENT EVERYWHERE - Semantic-Builder WebSocket Protocol\n// ============================================================================\n// Typed, framework- and vendor-neutral description of the wire protocol used by\n// a streaming semantic-builder chat backend.\n//\n// The transport is fully host-agnostic: the caller supplies the complete\n// WebSocket URL (or a builder for it), so this package embeds NO API origin,\n// NO route/path structure, and NO infrastructure detail. Nothing here reveals\n// any specific backend deployment.\n//\n// All fields are camelCase on the wire.\n\n/** A prior turn replayed to the agent as grounding context. */\nexport interface ConversationHistoryItem {\n role: 'user' | 'assistant';\n content: string;\n}\n\n/** Kinds of attachment the agent understands. */\nexport type AttachmentKind =\n | 'uploaded_media'\n | 'source_url'\n | 'scraped_media';\n\n/** Coarse media classification for an attachment. */\nexport type AttachmentMediaType = 'image' | 'video' | 'svg' | 'unknown';\n\n/**\n * A single attachment sent alongside a user message. Only `kind` is required;\n * everything else is optional and forwarded verbatim to the backend.\n */\nexport interface AgentAttachment {\n kind: AttachmentKind | (string & {});\n mediaRecordId?: number | string | null;\n mediaType?: AttachmentMediaType | (string & {});\n url?: string | null;\n token?: string | null;\n filename?: string | null;\n alt?: string | null;\n sourceUrl?: string | null;\n intentHint?: string | null;\n}\n\n/**\n * Opaque generated block. The engine never interprets block internals — it\n * forwards them to the host via `onGeneratedBlocks`. Callers supply their own\n * block type via the generic on the client/hook.\n */\nexport type AgentBlock = Record<string, unknown>;\n\n/** Update semantics returned with a block payload. */\nexport type BlockUpdateMode = 'full_page' | 'partial_update' | (string & {});\n\n// === Client -> Server ===\n\n/** The only message type the backend accepts. */\nexport interface UserMessageEnvelope<TBlock = AgentBlock> {\n type: 'user_message';\n message: string;\n blocks: TBlock[];\n conversationHistory: ConversationHistoryItem[];\n contentBrief?: Record<string, unknown> | null;\n attachments?: AgentAttachment[];\n}\n\n// === Server -> Client envelopes ===\n\nexport interface ConnectionReadyEnvelope {\n type: 'connection_ready';\n pageCategoryId?: string;\n pageCategoryName?: string;\n pageCategorySlug?: string;\n}\n\nexport interface AssistantMessageStartEnvelope {\n type: 'assistant_message_start';\n messageId: string;\n userId?: number | string;\n}\n\nexport interface AssistantMessageDeltaEnvelope {\n type: 'assistant_message_delta';\n messageId: string;\n delta: string;\n}\n\nexport interface AssistantMessageThinkingDeltaEnvelope {\n type: 'assistant_message_thinking_delta';\n messageId: string;\n delta: string;\n}\n\nexport interface AssistantMessageBlocksEnvelope<TBlock = AgentBlock> {\n type: 'assistant_message_blocks';\n messageId: string;\n blocks: TBlock[] | null;\n updateMode?: BlockUpdateMode;\n}\n\nexport interface AssistantMessageCompleteEnvelope<TBlock = AgentBlock> {\n type: 'assistant_message_complete';\n messageId?: string;\n message: string;\n thinking?: string | null;\n blocks: TBlock[] | null;\n updateMode?: BlockUpdateMode;\n}\n\nexport interface ErrorEnvelope {\n type: 'error';\n error?: string;\n}\n\n/** Discriminated union of every envelope the backend can emit. */\nexport type ServerEnvelope<TBlock = AgentBlock> =\n | ConnectionReadyEnvelope\n | AssistantMessageStartEnvelope\n | AssistantMessageDeltaEnvelope\n | AssistantMessageThinkingDeltaEnvelope\n | AssistantMessageBlocksEnvelope<TBlock>\n | AssistantMessageCompleteEnvelope<TBlock>\n | ErrorEnvelope;\n\n/**\n * Resolves a fully-qualified WebSocket URL for a conversation. The host app\n * supplies this so the package never embeds any origin or route structure.\n *\n * Implementations typically read an API origin from an environment variable\n * and append whatever path their backend exposes. Return a `ws://` or `wss://`\n * URL. The default builder below is a convenience, not a requirement.\n */\nexport type SocketUrlResolver = (params: {\n websiteId: string | number;\n pageCategoryId: string;\n}) => string;\n\n/**\n * Convenience builder that upgrades a caller-supplied HTTP(S) origin to ws/wss\n * and appends a path. Both `baseUrl` and `path` are REQUIRED and supplied by\n * the host — this package ships no default origin and no default route, so\n * nothing about any specific backend is baked in.\n *\n * @param baseUrl Absolute http(s) origin (e.g. read from an env var).\n * @param path Path on that origin, with `{websiteId}` and\n * `{pageCategoryId}` placeholders substituted.\n * @param params The identifiers to substitute into `path`.\n */\nexport function buildSocketUrl(\n baseUrl: string,\n path: string,\n params: { websiteId: string | number; pageCategoryId: string },\n): string {\n if (!baseUrl || baseUrl.trim().length === 0) {\n throw new Error(\n 'A `baseUrl` is required to build the socket URL. ' +\n 'Supply your API origin (e.g. from an environment variable).',\n );\n }\n if (!path || path.trim().length === 0) {\n throw new Error(\n 'A `path` is required to build the socket URL. ' +\n 'Supply the route your backend exposes.',\n );\n }\n\n const resolvedPath = path\n .replace('{websiteId}', encodeURIComponent(String(params.websiteId)))\n .replace('{pageCategoryId}', encodeURIComponent(params.pageCategoryId));\n\n let url: URL;\n try {\n url = new URL(resolvedPath, baseUrl);\n } catch {\n throw new Error(`Invalid \\`baseUrl\\` provided to the socket client: ${baseUrl}`);\n }\n\n if (url.protocol !== 'https:' && url.protocol !== 'http:') {\n throw new Error(\n `\\`baseUrl\\` must be an http(s) URL; received protocol \"${url.protocol}\".`,\n );\n }\n\n url.protocol = url.protocol === 'https:' ? 'wss:' : 'ws:';\n return url.toString();\n}\n\n/** Coerce/normalize an arbitrary website id into numeric form, or null. */\nexport function normalizeWebsiteId(value: string | number): number | null {\n if (typeof value === 'number') return Number.isFinite(value) ? value : null;\n if (typeof value === 'string' && /^\\d+$/.test(value)) {\n return Number.parseInt(value, 10);\n }\n return null;\n}\n","'use client';\n\n// ============================================================================\n// AGENT EVERYWHERE - Semantic Builder Hook\n// ============================================================================\n// A drop-in React hook that drives a semantic-builder conversation over a\n// streaming WebSocket backend. Its return shape is intentionally compatible\n// with a typical host `useSemanticBuilderConversation`, so existing UI can\n// adopt it with minimal changes.\n//\n// Vendor-neutral: the host supplies the socket URL (or a resolver); this hook\n// embeds no API origin or route.\n//\n// Responsibilities owned here (so the host no longer has to):\n// - Connection lifecycle + reconnect (delegated to the socket client)\n// - Message state machine (start/delta/thinking/complete/error)\n// - Hidden requests (auto-draft) that stream blocks without showing a bubble\n// - Block extraction fallback from message text\n// - Assistant text sanitization (strips tool-call XML + fenced block JSON)\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n SemanticBuilderSocketClient,\n type ConnectionState,\n} from './client';\nimport type {\n AgentAttachment,\n AgentBlock,\n BlockUpdateMode,\n ConversationHistoryItem,\n ServerEnvelope,\n SocketUrlResolver,\n} from './protocol';\nimport { generateId } from '../core/utils';\n\nexport type ChatMessageRole = 'system' | 'user' | 'assistant';\n\nexport interface SemanticBuilderChatMessage {\n id: string;\n role: ChatMessageRole;\n content: string;\n thinking?: string;\n streaming?: boolean;\n createdAt: number;\n}\n\nexport interface UseSemanticBuilderOptions<TBlock = AgentBlock> {\n /**\n * A fully-qualified `ws`/`wss` URL. Provide this OR `resolveSocketUrl`. The\n * host owns the origin/route; this package embeds neither.\n */\n socketUrl?: string;\n /** Resolver that returns the socket URL for this conversation. */\n resolveSocketUrl?: SocketUrlResolver;\n websiteId: string | number;\n pageCategoryId: string;\n pageName: string;\n pageSlug?: string;\n /** Current page blocks, forwarded to the agent for grounding. */\n blocks: TBlock[];\n /** Optional content brief grounding context. */\n contentBrief?: Record<string, unknown> | null;\n /** Connect only when enabled (e.g. once the page has finished loading). */\n enabled: boolean;\n /** Invoked when the agent returns generated blocks. */\n onGeneratedBlocks?: (blocks: TBlock[], updateMode?: BlockUpdateMode) => void;\n /**\n * Optional hook to intercept undo-like messages and restore a prior local\n * snapshot before hitting the network. Return the restored blocks to short\n * circuit, or null/undefined to fall through to the agent.\n */\n onUndoRequest?: (message: string) => Promise<TBlock[] | null> | TBlock[] | null;\n /** Optional override for the welcome system message. */\n buildWelcomeMessage?: (args: {\n pageName: string;\n hasContentBrief: boolean;\n }) => string;\n /** Optional WebSocket implementation (SSR/tests). */\n webSocketImpl?: typeof WebSocket;\n}\n\nexport interface SendMessageOptions {\n /** Don't render a user/assistant bubble; used for background auto-draft. */\n hidden?: boolean;\n attachments?: AgentAttachment[];\n}\n\nexport interface UseSemanticBuilderResult {\n messages: SemanticBuilderChatMessage[];\n connectionState: ConnectionState;\n connectionError: string | null;\n statusLabel: string;\n isConnected: boolean;\n isStreaming: boolean;\n sendMessage: (\n content: string,\n options?: SendMessageOptions,\n ) => Promise<boolean>;\n retry: () => void;\n}\n\n// --- Text helpers ---\n\nfunction sanitizeAssistantText(content?: string | null): string {\n if (!content) return '';\n return content\n .split('\\n')\n .filter((line) => {\n const trimmed = line.trimStart();\n return (\n !trimmed.startsWith('<function_calls') &&\n !trimmed.startsWith('</function_calls') &&\n !trimmed.startsWith('<function_call') &&\n !trimmed.startsWith('</function_call')\n );\n })\n .join('\\n')\n .trim();\n}\n\nfunction stripBlockJson(content: string): string {\n const stripped = content.replace(/```json\\s*[[{][\\s\\S]*?```/g, '').trim();\n if (/^[[{]/.test(stripped)) {\n try {\n JSON.parse(stripped);\n return '';\n } catch {\n return stripped;\n }\n }\n return stripped;\n}\n\n/**\n * Best-effort extraction of a generated-blocks array from assistant text. The\n * backend normally emits structured `assistant_message_blocks`, but this is a\n * fallback for fenced ```json arrays embedded in the final message.\n */\nfunction extractBlocksFromText<TBlock>(text: string): TBlock[] | null {\n if (!text) return null;\n const fenced = text.match(/```json\\s*([[{][\\s\\S]*?)```/);\n const candidate = fenced ? fenced[1] : null;\n const tryParse = (raw: string): TBlock[] | null => {\n try {\n const parsed = JSON.parse(raw);\n if (Array.isArray(parsed)) return parsed as TBlock[];\n if (parsed && typeof parsed === 'object') {\n const maybe = (parsed as { blocks?: unknown }).blocks;\n if (Array.isArray(maybe)) return maybe as TBlock[];\n }\n } catch {\n /* ignore */\n }\n return null;\n };\n if (candidate) {\n const fromFence = tryParse(candidate.trim());\n if (fromFence?.length) return fromFence;\n }\n const trimmed = text.trim();\n if (/^[[{]/.test(trimmed)) {\n const direct = tryParse(trimmed);\n if (direct?.length) return direct;\n }\n return null;\n}\n\nfunction extractSourceUrlAttachments(content: string): AgentAttachment[] {\n const matches = content.match(/https?:\\/\\/[^\\s<>\"'`]+/gi) || [];\n const seen = new Set<string>();\n return matches\n .map((rawUrl) => rawUrl.replace(/[),.;!?]+$/g, ''))\n .filter((url) => {\n if (seen.has(url)) return false;\n seen.add(url);\n return true;\n })\n .slice(0, 3)\n .map((url) => ({\n kind: 'source_url' as const,\n mediaType: 'unknown' as const,\n url,\n sourceUrl: url,\n intentHint: 'user_provided_source_url',\n }));\n}\n\nfunction buildHistory(\n messages: SemanticBuilderChatMessage[],\n): ConversationHistoryItem[] {\n return messages\n .filter(\n (m): m is SemanticBuilderChatMessage & { role: 'user' | 'assistant' } =>\n (m.role === 'user' || m.role === 'assistant') &&\n m.content.trim().length > 0 &&\n !m.streaming,\n )\n .map((m) => ({ role: m.role, content: m.content }));\n}\n\nfunction upsertMessage(\n messages: SemanticBuilderChatMessage[],\n messageId: string,\n updater: (\n message: SemanticBuilderChatMessage,\n ) => SemanticBuilderChatMessage,\n): { found: boolean; nextMessages: SemanticBuilderChatMessage[] } {\n let found = false;\n const nextMessages = messages.map((message) => {\n if (message.id !== messageId) return message;\n found = true;\n return updater(message);\n });\n return { found, nextMessages };\n}\n\nexport function useSemanticBuilder<TBlock = AgentBlock>({\n socketUrl,\n resolveSocketUrl,\n websiteId,\n pageCategoryId,\n pageName,\n pageSlug,\n blocks,\n contentBrief,\n enabled,\n onGeneratedBlocks,\n onUndoRequest,\n buildWelcomeMessage,\n webSocketImpl,\n}: UseSemanticBuilderOptions<TBlock>): UseSemanticBuilderResult {\n const [messages, setMessages] = useState<SemanticBuilderChatMessage[]>([]);\n const [connectionState, setConnectionState] =\n useState<ConnectionState>('idle');\n const [connectionError, setConnectionError] = useState<string | null>(null);\n\n const clientRef = useRef<SemanticBuilderSocketClient<TBlock> | null>(null);\n const messagesRef = useRef<SemanticBuilderChatMessage[]>([]);\n const blocksRef = useRef(blocks);\n const contentBriefRef = useRef(contentBrief);\n const onGeneratedBlocksRef = useRef(onGeneratedBlocks);\n const onUndoRequestRef = useRef(onUndoRequest);\n const resolveSocketUrlRef = useRef(resolveSocketUrl);\n const pendingHiddenRequestsRef = useRef(0);\n const hiddenAssistantMessageIdsRef = useRef(new Set<string>());\n\n useEffect(() => {\n messagesRef.current = messages;\n }, [messages]);\n useEffect(() => {\n blocksRef.current = blocks;\n }, [blocks]);\n useEffect(() => {\n contentBriefRef.current = contentBrief;\n }, [contentBrief]);\n useEffect(() => {\n onGeneratedBlocksRef.current = onGeneratedBlocks;\n }, [onGeneratedBlocks]);\n useEffect(() => {\n onUndoRequestRef.current = onUndoRequest;\n }, [onUndoRequest]);\n useEffect(() => {\n resolveSocketUrlRef.current = resolveSocketUrl;\n }, [resolveSocketUrl]);\n\n // Seed the welcome system message whenever the page/brief context changes.\n useEffect(() => {\n const hasContentBrief = !!contentBrief;\n const content =\n buildWelcomeMessage?.({ pageName, hasContentBrief }) ??\n (hasContentBrief\n ? `Connected to ${pageName}. The page brief is loaded and ready. Describe the page you want and I'll stream back layout guidance and design reasoning.`\n : `Connected to ${pageName}. There is no saved content brief yet, so I'll work from the current page structure and brand context.`);\n setMessages([\n {\n id: 'agent-everywhere-welcome',\n role: 'system',\n content,\n createdAt: Date.now(),\n },\n ]);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [contentBrief, pageName, pageSlug]);\n\n const handleEnvelope = useCallback((envelope: ServerEnvelope<TBlock>) => {\n switch (envelope.type) {\n case 'connection_ready':\n setConnectionError(null);\n break;\n\n case 'assistant_message_start': {\n setConnectionError(null);\n const messageId = envelope.messageId;\n if (!messageId) return;\n if (pendingHiddenRequestsRef.current > 0) {\n pendingHiddenRequestsRef.current -= 1;\n hiddenAssistantMessageIdsRef.current.add(messageId);\n return;\n }\n setMessages((current) => [\n ...current,\n {\n id: messageId,\n role: 'assistant',\n content: '',\n streaming: true,\n createdAt: Date.now(),\n },\n ]);\n break;\n }\n\n case 'assistant_message_delta': {\n const { messageId, delta } = envelope;\n if (!messageId || hiddenAssistantMessageIdsRef.current.has(messageId))\n return;\n setMessages((current) => {\n const { found, nextMessages } = upsertMessage(\n current,\n messageId,\n (m) => ({ ...m, content: `${m.content}${delta || ''}` }),\n );\n return found ? nextMessages : current;\n });\n break;\n }\n\n case 'assistant_message_thinking_delta': {\n const { messageId, delta } = envelope;\n if (!messageId || hiddenAssistantMessageIdsRef.current.has(messageId))\n return;\n setMessages((current) => {\n const { found, nextMessages } = upsertMessage(\n current,\n messageId,\n (m) => ({ ...m, thinking: `${m.thinking || ''}${delta || ''}` }),\n );\n return found ? nextMessages : current;\n });\n break;\n }\n\n case 'assistant_message_blocks': {\n if (envelope.blocks && envelope.blocks.length > 0) {\n onGeneratedBlocksRef.current?.(envelope.blocks, envelope.updateMode);\n }\n break;\n }\n\n case 'assistant_message_complete': {\n const messageId = envelope.messageId;\n const finalContent = sanitizeAssistantText(envelope.message || '');\n const finalThinking = sanitizeAssistantText(envelope.thinking || '');\n const completeBlocks =\n envelope.blocks && envelope.blocks.length > 0\n ? envelope.blocks\n : extractBlocksFromText<TBlock>(finalContent);\n const hasBlocks = Boolean(completeBlocks?.length);\n const displayContent =\n stripBlockJson(finalContent).length > 0\n ? finalContent\n : hasBlocks\n ? 'Done — I updated the page.'\n : finalContent;\n\n if (completeBlocks?.length) {\n onGeneratedBlocksRef.current?.(completeBlocks, envelope.updateMode);\n }\n\n if (!messageId) return;\n\n if (hiddenAssistantMessageIdsRef.current.has(messageId)) {\n hiddenAssistantMessageIdsRef.current.delete(messageId);\n return;\n }\n\n setMessages((current) => {\n const { found, nextMessages } = upsertMessage(\n current,\n messageId,\n (m) => ({\n ...m,\n content: displayContent || m.content,\n thinking: finalThinking || m.thinking,\n streaming: false,\n }),\n );\n if (found) return nextMessages;\n return [\n ...current,\n {\n id: messageId,\n role: 'assistant',\n content: displayContent,\n thinking: finalThinking || undefined,\n streaming: false,\n createdAt: Date.now(),\n },\n ];\n });\n break;\n }\n\n case 'error': {\n pendingHiddenRequestsRef.current = 0;\n hiddenAssistantMessageIdsRef.current.clear();\n // Drop empty streaming placeholders; finalize ones with content.\n setMessages((current) =>\n current.flatMap((m) => {\n if (!m.streaming) return [m];\n if (m.content.trim().length === 0 && !(m.thinking || '').trim()) {\n return [];\n }\n return [{ ...m, streaming: false }];\n }),\n );\n setConnectionError(\n envelope.error || 'The backend could not process that request.',\n );\n break;\n }\n\n default:\n break;\n }\n }, []);\n\n // Build/destroy the client when connection inputs change.\n useEffect(() => {\n if (!enabled) return;\n\n const client = new SemanticBuilderSocketClient<TBlock>({\n websiteId,\n pageCategoryId,\n socketUrl,\n resolveSocketUrl: resolveSocketUrlRef.current,\n onStateChange: setConnectionState,\n onEnvelope: handleEnvelope,\n onError: setConnectionError,\n webSocketImpl,\n });\n clientRef.current = client;\n client.connect();\n\n return () => {\n client.close();\n clientRef.current = null;\n };\n }, [\n enabled,\n handleEnvelope,\n pageCategoryId,\n socketUrl,\n webSocketImpl,\n websiteId,\n ]);\n\n const sendMessage = useCallback(\n async (\n content: string,\n options?: SendMessageOptions,\n ): Promise<boolean> => {\n const trimmed = content.trim();\n if (!trimmed) return false;\n\n // Undo interception (optional host-provided snapshot restore).\n if (!options?.hidden && onUndoRequestRef.current) {\n const restored = await onUndoRequestRef.current(trimmed);\n if (restored && restored.length) {\n onGeneratedBlocksRef.current?.(restored, 'full_page');\n setMessages((current) => [\n ...current,\n {\n id: generateId('msg'),\n role: 'user',\n content: trimmed,\n createdAt: Date.now(),\n },\n {\n id: generateId('msg'),\n role: 'assistant',\n content: 'Reverted to the previous local builder snapshot.',\n createdAt: Date.now(),\n },\n ]);\n return true;\n }\n }\n\n const client = clientRef.current;\n if (!client || !client.isReady()) {\n setConnectionState('error');\n setConnectionError(\n 'The agent is not ready yet. Wait for the connection to finish, then try again.',\n );\n return false;\n }\n\n setConnectionError(null);\n const history = buildHistory(messagesRef.current);\n\n if (!options?.hidden) {\n setMessages((current) => [\n ...current,\n {\n id: generateId('msg'),\n role: 'user',\n content: trimmed,\n createdAt: Date.now(),\n },\n ]);\n } else {\n pendingHiddenRequestsRef.current += 1;\n }\n\n return client.send({\n message: trimmed,\n blocks: blocksRef.current,\n conversationHistory: history,\n contentBrief: contentBriefRef.current ?? null,\n attachments: [\n ...(options?.attachments || []),\n ...extractSourceUrlAttachments(trimmed),\n ],\n });\n },\n [],\n );\n\n const retry = useCallback(() => {\n clientRef.current?.retry();\n }, []);\n\n const isConnected =\n connectionState === 'ready' || connectionState === 'streaming';\n const isStreaming = connectionState === 'streaming';\n\n const statusLabel = useMemo(() => {\n switch (connectionState) {\n case 'ready':\n return 'AI connected';\n case 'streaming':\n return 'Streaming';\n case 'connecting':\n return 'Connecting';\n case 'requires_shared_domain':\n return 'Shared-domain auth required';\n case 'error':\n return 'Connection issue';\n default:\n return 'Starting';\n }\n }, [connectionState]);\n\n return {\n messages,\n connectionState,\n connectionError,\n statusLabel,\n isConnected,\n isStreaming,\n sendMessage,\n retry,\n };\n}\n","'use client';\n\nimport * as React from 'react';\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';\nimport { cn } from '../core/utils';\n\nconst ScrollArea = React.forwardRef<\n React.ComponentRef<typeof ScrollAreaPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn(\"relative overflow-hidden\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n));\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;\n\nconst ScrollBar = React.forwardRef<\n React.ComponentRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n \"flex touch-none select-none transition-colors\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent p-[1px]\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent p-[1px]\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n));\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;\n\nexport { ScrollArea, ScrollBar };\n","'use client';\n\nimport * as React from 'react';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport { cn } from '../core/utils';\n\nconst TooltipProvider = TooltipPrimitive.Provider;\n\nconst Tooltip = TooltipPrimitive.Root;\n\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ComponentRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground 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 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","'use client';\n\nimport { cn, formatTime, formatRelativeTime } from '../../core/utils';\n\nexport interface TimestampProps {\n date: Date;\n /** Format style */\n format?: 'time' | 'relative';\n className?: string;\n}\n\nexport function Timestamp({ date, format = 'time', className }: TimestampProps) {\n const formatted = format === 'time' ? formatTime(date) : formatRelativeTime(date);\n\n return (\n <span className={cn('text-muted-foreground text-[10px]', className)}>\n {formatted}\n </span>\n );\n}\n","'use client';\n\nimport { AlertCircleIcon, InfoIcon, AlertTriangleIcon, CheckCircleIcon } from 'lucide-react';\nimport { motion } from 'motion/react';\nimport { cn } from '../../core/utils';\n\nexport type SystemMessageType = 'info' | 'warning' | 'error' | 'success';\n\nexport interface SystemMessageProps {\n type?: SystemMessageType;\n children: React.ReactNode;\n className?: string;\n /** Show icon */\n showIcon?: boolean;\n}\n\nconst icons = {\n info: InfoIcon,\n warning: AlertTriangleIcon,\n error: AlertCircleIcon,\n success: CheckCircleIcon,\n};\n\nconst styles = {\n info: 'bg-muted/50 text-muted-foreground border-muted',\n warning: 'bg-amber-500/10 text-amber-600 dark:text-amber-400 border-amber-500/20',\n error: 'bg-red-500/10 text-red-600 dark:text-red-400 border-red-500/20',\n success: 'bg-emerald-500/10 text-emerald-600 dark:text-emerald-400 border-emerald-500/20',\n};\n\nexport function SystemMessage({\n type = 'info',\n children,\n className,\n showIcon = true,\n}: SystemMessageProps) {\n const Icon = icons[type];\n\n return (\n <motion.div\n initial={{ opacity: 0, scale: 0.98 }}\n animate={{ opacity: 1, scale: 1 }}\n className={cn(\n 'flex items-center gap-2 rounded-md border px-3 py-2',\n styles[type],\n className\n )}\n >\n {showIcon && <Icon className=\"size-4 shrink-0\" />}\n <span className=\"text-xs\">{children}</span>\n </motion.div>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { CheckIcon, CopyIcon, ThumbsUpIcon, ThumbsDownIcon, MoreHorizontalIcon } from 'lucide-react';\nimport { Button } from '../../ui/button';\nimport { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider } from '../../ui/tooltip';\nimport { cn, copyToClipboard } from '../../core/utils';\n\nexport interface MessageActionsProps {\n /** Content to copy */\n content?: string;\n /** Show copy button */\n showCopy?: boolean;\n /** Show vote buttons */\n showVote?: boolean;\n /** Show more button */\n showMore?: boolean;\n /** Current vote state */\n vote?: 'up' | 'down' | null;\n /** Vote callback */\n onVote?: (vote: 'up' | 'down' | null) => void;\n /** More options callback */\n onMore?: () => void;\n /** Custom actions */\n children?: React.ReactNode;\n className?: string;\n /** Size variant */\n size?: 'sm' | 'md';\n}\n\nexport function MessageActions({\n content,\n showCopy = true,\n showVote = false,\n showMore = false,\n vote,\n onVote,\n onMore,\n children,\n className,\n size = 'sm',\n}: MessageActionsProps) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = async () => {\n if (!content) return;\n const success = await copyToClipboard(content);\n if (success) {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }\n };\n\n const handleVote = (direction: 'up' | 'down') => {\n if (!onVote) return;\n onVote(vote === direction ? null : direction);\n };\n\n const iconSize = size === 'sm' ? 'size-3' : 'size-3.5';\n const buttonSize = size === 'sm' ? 'size-6' : 'size-7';\n\n return (\n <TooltipProvider delayDuration={300}>\n <div className={cn('flex items-center gap-0.5', className)}>\n {showCopy && content && (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleCopy}\n className={cn(buttonSize, 'p-0 text-muted-foreground hover:text-foreground')}\n >\n {copied ? (\n <CheckIcon className={iconSize} />\n ) : (\n <CopyIcon className={iconSize} />\n )}\n </Button>\n </TooltipTrigger>\n <TooltipContent>{copied ? 'Copied!' : 'Copy'}</TooltipContent>\n </Tooltip>\n )}\n\n {showVote && (\n <>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => handleVote('up')}\n className={cn(\n buttonSize,\n 'p-0 transition-colors',\n vote === 'up'\n ? 'text-emerald-500 hover:text-emerald-600'\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n <ThumbsUpIcon className={cn(iconSize, vote === 'up' && 'fill-current')} />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Good response</TooltipContent>\n </Tooltip>\n\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => handleVote('down')}\n className={cn(\n buttonSize,\n 'p-0 transition-colors',\n vote === 'down'\n ? 'text-red-500 hover:text-red-600'\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n <ThumbsDownIcon className={cn(iconSize, vote === 'down' && 'fill-current')} />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Poor response</TooltipContent>\n </Tooltip>\n </>\n )}\n\n {showMore && onMore && (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onMore}\n className={cn(buttonSize, 'p-0 text-muted-foreground hover:text-foreground')}\n >\n <MoreHorizontalIcon className={iconSize} />\n </Button>\n </TooltipTrigger>\n <TooltipContent>More options</TooltipContent>\n </Tooltip>\n )}\n\n {children}\n </div>\n </TooltipProvider>\n );\n}\n","'use client';\n\nimport { motion } from 'motion/react';\nimport { cn } from '../../core/utils';\nimport { ChartContainer } from './chart-container';\nimport { MetricsGrid } from './metrics-grid';\nimport { DataTable } from './data-table';\nimport type { DataPayload } from '../../core/types';\nimport type { AgentReport } from '../../core/backend';\n\nexport interface DataPayloadViewProps {\n payload: DataPayload;\n className?: string;\n}\n\n/** Renders any DataPayload via the appropriate data-display component. */\nexport function DataPayloadView({ payload, className }: DataPayloadViewProps) {\n if (payload.type === 'chart' && payload.chart) {\n return <ChartContainer data={payload.chart} className={className} />;\n }\n if (payload.type === 'metrics' && payload.metrics) {\n return <MetricsGrid metrics={payload.metrics} className={className} />;\n }\n if (payload.type === 'table' && payload.table) {\n return <DataTable data={payload.table} className={className} />;\n }\n return null;\n}\n\nexport interface ReportViewProps {\n report: AgentReport;\n className?: string;\n}\n\n/**\n * Renders a structured AgentReport as a sequence of titled sections. Used as\n * the default content for the expand-to-dashboard surface.\n */\nexport function ReportView({ report, className }: ReportViewProps) {\n return (\n <div className={cn('space-y-6', className)}>\n <header>\n <h2 className=\"text-xl font-semibold\">{report.title}</h2>\n {report.subtitle && <p className=\"text-sm text-muted-foreground\">{report.subtitle}</p>}\n <p className=\"mt-1 text-xs text-muted-foreground\">\n Generated {report.generatedAt.toLocaleString()}\n </p>\n </header>\n\n {report.sections.map((section, index) => (\n <motion.section\n key={section.id}\n initial={{ opacity: 0, y: 12 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: index * 0.08 }}\n className=\"space-y-3\"\n >\n <h3 className=\"font-medium\">{section.title}</h3>\n {section.summary && (\n <p className=\"text-sm text-muted-foreground\">{section.summary}</p>\n )}\n {section.data && <DataPayloadView payload={section.data} />}\n </motion.section>\n ))}\n </div>\n );\n}\n\nexport default ReportView;\n","'use client';\n\nimport { cn } from '../../core/utils';\nimport { MessageContainer, MessageBubble, MessageContent } from '../primitives/message';\nimport { AgentAvatar } from '../primitives/avatar';\nimport { MessageWithReasoning } from './message-with-reasoning';\nimport { MessageWithSteps } from './message-with-steps';\nimport { MessageWithAttachments } from './message-with-attachments';\nimport { DataPayloadView } from '../data-display/report-view';\nimport type { AgentMessage } from '../../core/types';\n\nexport interface MessageListProps {\n messages: AgentMessage[];\n /** Show avatars next to messages. */\n showAvatars?: boolean;\n /** Optional custom renderer; falls back to the built-in renderer. */\n renderMessage?: (message: AgentMessage) => React.ReactNode;\n /** Feedback handler passed to feedback-capable messages. */\n onFeedback?: (messageId: string, vote: 'up' | 'down') => void;\n className?: string;\n}\n\n/**\n * Renders a list of AgentMessages. For each message it composes the optional\n * rich sections (reasoning, steps) above the message bubble, then the bubble\n * content, attachments, and any structured data payload. This is the default\n * conversation body shared by every surface.\n */\nexport function MessageList({\n messages,\n showAvatars = true,\n renderMessage,\n className,\n}: MessageListProps) {\n return (\n <div className={cn('flex flex-col gap-4', className)}>\n {messages.map((message) => {\n if (renderMessage) {\n return <div key={message.id}>{renderMessage(message)}</div>;\n }\n\n const hasReasoning =\n message.role === 'assistant' &&\n !!message.reasoning &&\n message.reasoning.length > 0;\n const hasSteps =\n message.role === 'assistant' && !!message.steps && message.steps.length > 0;\n const hasAttachments = !!message.attachments && message.attachments.length > 0;\n\n return (\n <MessageContainer key={message.id} role={message.role}>\n {showAvatars && <AgentAvatar role={message.role} size=\"sm\" />}\n <div className=\"flex min-w-0 flex-col gap-2\">\n {hasReasoning && <MessageWithReasoning steps={message.reasoning!} />}\n {hasSteps && <MessageWithSteps steps={message.steps!} />}\n\n {message.content && (\n <MessageBubble role={message.role}>\n <MessageContent>{message.content}</MessageContent>\n </MessageBubble>\n )}\n\n {hasAttachments && (\n <MessageWithAttachments attachments={message.attachments!} />\n )}\n\n {message.data && <DataPayloadView payload={message.data} />}\n </div>\n </MessageContainer>\n );\n })}\n </div>\n );\n}\n\nexport default MessageList;\n","'use client';\n\nimport { useEffect, useRef } from 'react';\nimport { XIcon } from 'lucide-react';\nimport { AnimatePresence, motion } from 'motion/react';\nimport { Button } from '../ui/button';\nimport { Avatar, AvatarFallback, AvatarImage } from '../ui/avatar';\nimport { cn } from '../core/utils';\nimport { TypingIndicator } from '../components/primitives/typing-indicator';\n\nexport interface OverlayModalProps {\n /** Is modal open */\n isOpen: boolean;\n /** Close handler */\n onClose: () => void;\n /** Modal title */\n title?: string;\n /** Avatar/agent info */\n agent?: {\n name: string;\n avatar?: string;\n initials?: string;\n status?: string;\n };\n /** Messages content */\n children: React.ReactNode;\n /** Input component */\n input?: React.ReactNode;\n /** Is loading/typing */\n isLoading?: boolean;\n /** Modal width */\n width?: number | string;\n /** Modal height */\n height?: number | string;\n /** Container class */\n className?: string;\n /** Backdrop class */\n backdropClassName?: string;\n /** Close on backdrop click */\n closeOnBackdrop?: boolean;\n}\n\nexport function OverlayModal({\n isOpen,\n onClose,\n title,\n agent,\n children,\n input,\n isLoading = false,\n width = 'calc(100% - 48px)',\n height = 540,\n className,\n backdropClassName,\n closeOnBackdrop = true,\n}: OverlayModalProps) {\n const scrollRef = useRef<HTMLDivElement>(null);\n\n // Auto-scroll to bottom\n useEffect(() => {\n if (isOpen && scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n }\n }, [children, isLoading, isOpen]);\n\n // Handle escape key\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n onClose();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, onClose]);\n\n return (\n <AnimatePresence>\n {isOpen && (\n <>\n {/* Backdrop */}\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.15 }}\n className={cn(\n 'fixed inset-0 z-50 bg-black/40 backdrop-blur-[2px]',\n backdropClassName\n )}\n onClick={closeOnBackdrop ? onClose : undefined}\n aria-hidden=\"true\"\n />\n\n {/* Modal */}\n <motion.div\n initial={{ opacity: 0, scale: 0.95, y: 20 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.95, y: 20 }}\n transition={{ duration: 0.2 }}\n className={cn(\n 'fixed left-1/2 top-1/2 z-50 -translate-x-1/2 -translate-y-1/2',\n 'flex flex-col overflow-hidden rounded-xl border bg-card shadow-lg',\n className\n )}\n style={{\n width: typeof width === 'number' ? `${width}px` : width,\n height: typeof height === 'number' ? `${height}px` : height,\n maxWidth: 'calc(100vw - 32px)',\n maxHeight: 'calc(100vh - 32px)',\n }}\n >\n {/* Header */}\n <div className=\"flex items-center gap-3 border-b px-4 py-3\">\n {agent && (\n <Avatar className=\"size-7\">\n {agent.avatar && <AvatarImage src={agent.avatar} alt={agent.name} />}\n <AvatarFallback className=\"text-xs\">\n {agent.initials || agent.name.slice(0, 2).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n )}\n <div className=\"min-w-0 flex-1\">\n <p className=\"font-medium text-sm\">{title || agent?.name || 'Chat'}</p>\n {agent?.status && (\n <p className=\"flex items-center gap-1.5 text-muted-foreground text-xs\">\n <span className=\"size-1.5 rounded-full bg-emerald-500\" />\n {agent.status}\n </p>\n )}\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"size-7 p-0\"\n onClick={onClose}\n >\n <XIcon className=\"size-3.5\" />\n </Button>\n </div>\n\n {/* Messages */}\n <div ref={scrollRef} className=\"flex-1 overflow-y-auto py-2\">\n {children}\n {isLoading && (\n <div className=\"px-4 py-2\">\n <TypingIndicator />\n </div>\n )}\n </div>\n\n {/* Input */}\n {input}\n </motion.div>\n </>\n )}\n </AnimatePresence>\n );\n}\n","'use client';\n\nimport { useEffect, useRef } from 'react';\nimport { ArrowLeftIcon, MoreVerticalIcon } from 'lucide-react';\nimport { Button } from '../ui/button';\nimport { cn } from '../core/utils';\nimport { TypingIndicator } from '../components/primitives/typing-indicator';\nimport { StatusBadge } from '../components/primitives/status-badge';\n\nexport interface MobileShellProps {\n /** Title */\n title?: string;\n /** Subtitle */\n subtitle?: string;\n /** Back button handler */\n onBack?: () => void;\n /** More options handler */\n onMore?: () => void;\n /** Status */\n status?: 'online' | 'offline' | 'busy' | 'away';\n /** Messages content */\n children: React.ReactNode;\n /** Input component */\n input?: React.ReactNode;\n /** Quick replies */\n quickReplies?: React.ReactNode;\n /** Is loading */\n isLoading?: boolean;\n /** Container class */\n className?: string;\n /** Safe area insets */\n safeArea?: boolean;\n}\n\nexport function MobileShell({\n title = 'Assistant',\n subtitle,\n onBack,\n onMore,\n status,\n children,\n input,\n quickReplies,\n isLoading = false,\n className,\n safeArea = true,\n}: MobileShellProps) {\n const scrollRef = useRef<HTMLDivElement>(null);\n\n // Auto-scroll\n useEffect(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n }\n }, [children, isLoading]);\n\n return (\n <div\n className={cn(\n 'flex h-full flex-col bg-background',\n safeArea && 'pb-safe pt-safe',\n className\n )}\n >\n {/* Header */}\n <header className=\"flex h-14 shrink-0 items-center gap-2 border-b px-2\">\n {onBack && (\n <Button variant=\"ghost\" size=\"sm\" className=\"size-9 p-0\" onClick={onBack}>\n <ArrowLeftIcon className=\"size-5\" />\n </Button>\n )}\n <div className=\"min-w-0 flex-1\">\n <h1 className=\"truncate font-semibold text-base\">{title}</h1>\n {subtitle && (\n <p className=\"truncate text-muted-foreground text-xs\">{subtitle}</p>\n )}\n {status && !subtitle && <StatusBadge status={status} />}\n </div>\n {onMore && (\n <Button variant=\"ghost\" size=\"sm\" className=\"size-9 p-0\" onClick={onMore}>\n <MoreVerticalIcon className=\"size-5\" />\n </Button>\n )}\n </header>\n\n {/* Messages */}\n <div ref={scrollRef} className=\"flex-1 overflow-y-auto\">\n <div className=\"flex flex-col gap-3 p-3\">\n {children}\n {isLoading && <TypingIndicator />}\n </div>\n </div>\n\n {/* Quick replies */}\n {quickReplies && (\n <div className=\"shrink-0 overflow-x-auto border-t px-3 py-2\">\n <div className=\"flex gap-2\">{quickReplies}</div>\n </div>\n )}\n\n {/* Input */}\n {input && <div className=\"shrink-0 border-t\">{input}</div>}\n </div>\n );\n}\n","'use client';\n\nimport { useEffect, type ReactNode } from 'react';\nimport { XIcon } from 'lucide-react';\nimport { Button } from '../ui/button';\nimport { cn } from '../core/utils';\n\nexport interface FullBleedSurfaceProps {\n /** The artifact (chart, gallery, editor, generator, etc.) rendered edge-to-edge. */\n children: ReactNode;\n /** Surface title shown in the header. */\n title?: string;\n /** Optional icon shown before the title. */\n icon?: ReactNode;\n /** Optional header actions (right side, before the exit control). */\n headerActions?: ReactNode;\n /**\n * Exit handler. When provided, an X control is shown and Esc returns to the\n * previous surface. The host decides where \"exit\" goes (typically panel).\n */\n onExit?: () => void;\n /** Accessible label / tooltip for the exit control. */\n exitLabel?: string;\n /** Treat as an overlay (fixed inset). When false, fills its parent (h-full). */\n overlay?: boolean;\n className?: string;\n}\n\n/**\n * FullBleedSurface presents a single large artifact using the entire available\n * surface — no conversation column, no composer, no max-width cap. It exists so\n * an orchestrator can promote a big visualization (analytics dashboard, media\n * gallery, generator, editor, …) to a maximum-real-estate layout for the\n * fullscreen and split surfaces, where the goal is visibility rather than chat.\n *\n * Purely presentational and industry-agnostic — the artifact is supplied via\n * `children` and is responsible for its own internal scrolling/layout.\n */\nexport function FullBleedSurface({\n children,\n title,\n icon,\n headerActions,\n onExit,\n exitLabel = 'Exit',\n overlay = false,\n className,\n}: FullBleedSurfaceProps) {\n // Esc exits. Guarded for SSR (no document on the server) and only bound when\n // an exit handler is supplied.\n useEffect(() => {\n if (!onExit) return;\n if (typeof document === 'undefined') return;\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onExit();\n };\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [onExit]);\n\n return (\n <div\n className={cn(\n 'flex flex-col bg-background',\n overlay ? 'fixed inset-0 z-50' : 'h-full',\n className\n )}\n >\n <header className=\"flex h-14 shrink-0 items-center justify-between border-b px-4\">\n <div className=\"flex items-center gap-2 min-w-0\">\n {icon}\n {title && (\n <h1 className=\"truncate font-semibold text-lg\">{title}</h1>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n {headerActions}\n {onExit && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n aria-label={exitLabel}\n title={`${exitLabel} (Esc)`}\n className=\"size-8 shrink-0 p-0\"\n onClick={onExit}\n >\n <XIcon className=\"size-4\" />\n </Button>\n )}\n </div>\n </header>\n\n {/* Artifact region: full width/height, the artifact controls its own\n internal scroll and padding. */}\n <div className=\"min-h-0 flex-1 overflow-auto\">{children}</div>\n </div>\n );\n}\n\nexport default FullBleedSurface;\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { ChatPanel } from './chat-panel';\nimport { FloatingWidget } from './floating-widget';\nimport { FullscreenDashboard } from './fullscreen-dashboard';\nimport { SplitView } from './split-view';\nimport { OverlayModal } from './overlay-modal';\nimport { MobileShell } from './mobile-shell';\nimport { MessageList } from '../components/messages/message-list';\nimport { PromptInput } from '../components/input/prompt-input';\nimport { ReportView } from '../components/data-display/report-view';\nimport type { AgentMessage, LayoutMode, WidgetPosition } from '../core/types';\nimport type { AgentReport } from '../core/backend';\n\nexport interface AgentSurfaceProps {\n /** Which rendering surface to present. */\n mode: LayoutMode;\n /** Conversation messages rendered by the shared MessageList. */\n messages: AgentMessage[];\n /** Loading/typing indicator state. */\n isLoading?: boolean;\n\n // --- Controlled input (optional convenience) ---\n /** Current draft value. If provided, a default PromptInput is rendered. */\n inputValue?: string;\n /** Draft change handler. */\n onInputChange?: (value: string) => void;\n /** Submit handler. */\n onSubmit?: () => void;\n /** Placeholder for the default input. */\n inputPlaceholder?: string;\n /** Fully custom input node; overrides the default PromptInput. */\n input?: ReactNode;\n\n // --- Presentation ---\n /** Surface title (header). */\n title?: string;\n /** Surface subtitle/status text. */\n subtitle?: string;\n /** Header icon. */\n icon?: ReactNode;\n /** Header actions (right side). */\n headerActions?: ReactNode;\n /** Suggestions/quick-replies node shown above the input. */\n suggestions?: ReactNode;\n /** Show avatars in the conversation. */\n showAvatars?: boolean;\n /** Custom message renderer passed through to MessageList. */\n renderMessage?: (message: AgentMessage) => ReactNode;\n /** Feedback handler passed to MessageList. */\n onFeedback?: (messageId: string, vote: 'up' | 'down') => void;\n\n // --- Data / report side ---\n /**\n * Structured report rendered in the data region. Used by the\n * dashboard/split surfaces (sidebar or data panel). If omitted, a custom\n * `dataPanel` node may be supplied instead.\n */\n report?: AgentReport;\n /** Custom data-region node; overrides `report`. */\n dataPanel?: ReactNode;\n\n // --- Widget / overlay state ---\n /** Open state for widget/overlay surfaces. */\n isOpen?: boolean;\n /** Toggle handler for the widget launcher. */\n onToggle?: () => void;\n /** Close handler for widget/overlay surfaces. */\n onClose?: () => void;\n /**\n * Exit handler for the fullscreen surface. When provided, the fullscreen\n * container shows a close (X) control and binds Esc to return to the\n * previous surface. The host decides where \"exit\" goes (typically panel).\n */\n onExitFullscreen?: () => void;\n /** Widget anchor position. */\n position?: WidgetPosition;\n /** Online status for widget/mobile headers. */\n status?: 'online' | 'offline' | 'busy' | 'away';\n\n className?: string;\n}\n\n/**\n * AgentSurface is the single entry point that renders the agent UI into any\n * supported layout from one set of primitives. The orchestrator selects a\n * `mode` and the same messages, input, and report flow into the matching\n * container — there are no per-surface forks of the conversation logic.\n *\n * - 'panel' → inline ChatPanel (standard conversation)\n * - 'fullscreen' → FullscreenDashboard (chat + report sidebar)\n * - 'split' → SplitView (chat beside a live data panel)\n * - 'widget' → FloatingWidget (embeddable launcher + conversation)\n * - 'overlay' → OverlayModal (centered modal conversation)\n * - 'mobile' → MobileShell (full-height mobile layout)\n */\nexport function AgentSurface({\n mode,\n messages,\n isLoading = false,\n inputValue,\n onInputChange,\n onSubmit,\n inputPlaceholder,\n input,\n title,\n subtitle,\n icon,\n headerActions,\n suggestions,\n showAvatars = true,\n renderMessage,\n onFeedback,\n report,\n dataPanel,\n isOpen = true,\n onToggle,\n onClose,\n onExitFullscreen,\n position,\n status,\n className,\n}: AgentSurfaceProps) {\n const conversation = (\n <MessageList\n messages={messages}\n showAvatars={showAvatars}\n renderMessage={renderMessage}\n onFeedback={onFeedback}\n />\n );\n\n // Build a default input only when controlled props are provided and no\n // custom input node was passed.\n const resolvedInput =\n input ??\n (onInputChange && onSubmit !== undefined ? (\n <div className=\"border-t p-2\">\n <PromptInput\n value={inputValue ?? ''}\n onChange={onInputChange}\n onSubmit={onSubmit}\n placeholder={inputPlaceholder}\n loading={isLoading}\n />\n </div>\n ) : undefined);\n\n const dataRegion = dataPanel ?? (report ? <ReportView report={report} /> : null);\n\n switch (mode) {\n case 'fullscreen':\n return (\n <FullscreenDashboard\n title={title}\n headerActions={headerActions}\n onExitFullscreen={onExitFullscreen}\n input={resolvedInput}\n isLoading={isLoading}\n sidebar={dataRegion ?? undefined}\n className={className}\n >\n {conversation}\n </FullscreenDashboard>\n );\n\n case 'split':\n return (\n <SplitView\n input={resolvedInput}\n isLoading={isLoading}\n dataPanel={dataRegion}\n chatTitle={title}\n className={className}\n >\n {conversation}\n </SplitView>\n );\n\n case 'widget':\n return (\n <FloatingWidget\n isOpen={isOpen}\n onToggle={onToggle ?? (() => {})}\n onClose={onClose}\n title={title}\n icon={icon}\n status={status}\n input={resolvedInput}\n quickReplies={suggestions}\n isLoading={isLoading}\n position={position}\n className={className}\n >\n {conversation}\n </FloatingWidget>\n );\n\n case 'overlay':\n return (\n <OverlayModal\n isOpen={isOpen}\n onClose={onClose ?? (() => {})}\n title={title}\n input={resolvedInput}\n isLoading={isLoading}\n className={className}\n >\n {conversation}\n </OverlayModal>\n );\n\n case 'mobile':\n return (\n <MobileShell\n title={title}\n subtitle={subtitle}\n status={status}\n input={resolvedInput}\n quickReplies={suggestions}\n isLoading={isLoading}\n className={className}\n >\n {conversation}\n </MobileShell>\n );\n\n case 'panel':\n default:\n return (\n <ChatPanel\n title={title}\n subtitle={subtitle}\n icon={icon}\n headerActions={headerActions}\n input={resolvedInput}\n suggestions={suggestions}\n isLoading={isLoading}\n className={className}\n >\n {conversation}\n </ChatPanel>\n );\n }\n}\n\nexport default AgentSurface;\n"]}
1
+ {"version":3,"sources":["../src/core/utils.ts","../src/orchestration/index.tsx","../src/orchestration/manifest.ts","../src/components/primitives/message.tsx","../src/components/primitives/typing-indicator.tsx","../src/components/primitives/status-badge.tsx","../src/ui/button.tsx","../src/components/input/prompt-input.tsx","../src/ui/input.tsx","../src/components/input/multimodal-input.tsx","../src/components/input/quick-replies.tsx","../src/ui/badge.tsx","../src/components/input/template-selector.tsx","../src/components/input/inline-suggestions.tsx","../src/components/input/file-drop-zone.tsx","../src/components/input/prompt-library.tsx","../src/components/interactive/persona-selector.tsx","../src/ui/avatar.tsx","../src/components/interactive/entity-card.tsx","../src/components/interactive/option-cards.tsx","../src/components/interactive/settings-panel.tsx","../src/components/interactive/agent-handoff.tsx","../src/components/interactive/listing-feed.tsx","../src/components/interactive/control-grid.tsx","../src/components/interactive/recommendation-cards.tsx","../src/components/interactive/schedule-timeline.tsx","../src/ui/collapsible.tsx","../src/components/messages/message-with-reasoning.tsx","../src/components/messages/message-with-steps.tsx","../src/ui/textarea.tsx","../src/components/messages/message-with-feedback.tsx","../src/components/messages/message-with-attachments.tsx","../src/components/primitives/avatar.tsx","../src/components/messages/conversation-artifact.tsx","../src/components/data-display/chart-container.tsx","../src/components/data-display/metrics-grid.tsx","../src/components/data-display/data-table.tsx","../src/components/data-display/progress-tracker.tsx","../src/components/data-display/sentiment-display.tsx","../src/components/data-display/media-gallery.tsx","../src/ui/progress.tsx","../src/components/data-display/allocation-breakdown.tsx","../src/components/data-display/analytics-dashboard.tsx","../src/components/specialty/image-generator.tsx","../src/components/specialty/writing-assistant.tsx","../src/components/specialty/onboarding-wizard.tsx","../src/components/specialty/quiz-card.tsx","../src/components/specialty/guided-lesson-flow.tsx","../src/components/specialty/media-editor-canvas.tsx","../src/components/analytics/conversation-analytics.tsx","../src/components/analytics/performance-metrics.tsx","../src/containers/chat-panel.tsx","../src/containers/floating-widget.tsx","../src/containers/fullscreen-dashboard.tsx","../src/containers/split-view.tsx","../src/orchestration/register-components.ts","../src/core/mock-backend.ts","../src/core/use-agent-backend.ts","../src/transport/client.ts","../src/transport/protocol.ts","../src/transport/use-semantic-builder.ts","../src/ui/scroll-area.tsx","../src/ui/tooltip.tsx","../src/components/primitives/timestamp.tsx","../src/components/primitives/system-message.tsx","../src/components/primitives/message-actions.tsx","../src/components/data-display/report-view.tsx","../src/components/interactive/confirmation-panel.tsx","../src/components/messages/message-list.tsx","../src/containers/overlay-modal.tsx","../src/containers/mobile-shell.tsx","../src/containers/full-bleed-surface.tsx","../src/containers/agent-surface.tsx"],"names":["twMerge","clsx","delay","createContext","useReducer","useCallback","value","useMemo","jsx","useContext","motion","Markdown","jsxs","cva","React2","Slot","forwardRef","useRef","useImperativeHandle","useLayoutEffect","SendIcon","React3","ImageIcon","MicIcon","FileTextIcon","PaperclipIcon","AnimatePresence","XIcon","Fragment","useState","SearchIcon","useEffect","FileIcon","UploadIcon","UserCircleIcon","React4","AvatarPrimitive","CheckIcon","Loader2Icon","CheckCircle2Icon","ArrowRightIcon","SparklesIcon","BookmarkIcon","toneClasses","Toggle","LightbulbIcon","AlertTriangleIcon","InfoIcon","CollapsiblePrimitive","CollapsibleTrigger","CollapsibleContent","BrainIcon","ZapIcon","ChevronDownIcon","CopyIcon","React5","ThumbsUpIcon","ThumbsDownIcon","attachmentIcons","BotIcon","UserIcon","ResponsiveContainer","BarChart","CartesianGrid","XAxis","YAxis","Tooltip","Bar","LineChart","Line","AreaChart","Area","PieChart","Pie","Cell","Legend","DownloadIcon","TrendingUpIcon","TrendingDownIcon","MinusIcon","ChevronUpIcon","ArrowUpDownIcon","PlayIcon","LinkIcon","ExternalLinkIcon","React6","ProgressPrimitive","ArrowUpIcon","ArrowDownIcon","WandIcon","LayoutGridIcon","Grid3X3Icon","ArrowUpRightIcon","ShuffleIcon","AlignLeftIcon","ListIcon","HashIcon","TypeIcon","RotateCcwIcon","SkipForwardIcon","ChevronLeftIcon","ChevronRightIcon","XCircleIcon","HelpCircleIcon","Minimize2Icon","Maximize2Icon","defaultMetrics","MessageSquareIcon","ClockIcon","CoinsIcon","ActivityIcon","GripVerticalIcon","PanelLeftOpenIcon","PanelLeftCloseIcon","React7","ScrollAreaPrimitive","TooltipPrimitive","React8","AlertCircleIcon","CheckCircleIcon","MoreHorizontalIcon","ClipboardListIcon","ArrowLeftIcon","MoreVerticalIcon"],"mappings":"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","file":"index.cjs","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Merge Tailwind classes with clsx\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n/**\n * Format a date to a relative time string (e.g., \"2 min ago\")\n */\nexport function formatRelativeTime(date: Date): string {\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffSec = Math.floor(diffMs / 1000);\n const diffMin = Math.floor(diffSec / 60);\n const diffHour = Math.floor(diffMin / 60);\n const diffDay = Math.floor(diffHour / 24);\n\n if (diffSec < 60) return 'Just now';\n if (diffMin < 60) return `${diffMin} min ago`;\n if (diffHour < 24) return `${diffHour} hour${diffHour > 1 ? 's' : ''} ago`;\n if (diffDay < 7) return `${diffDay} day${diffDay > 1 ? 's' : ''} ago`;\n \n return date.toLocaleDateString();\n}\n\n/**\n * Format a date to a time string (e.g., \"2:30 PM\")\n */\nexport function formatTime(date: Date): string {\n return date.toLocaleTimeString([], { hour: 'numeric', minute: '2-digit' });\n}\n\n/**\n * Format bytes to human-readable size\n */\nexport function formatBytes(bytes: number): string {\n if (bytes === 0) return '0 B';\n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`;\n}\n\n/**\n * Generate a unique ID\n */\nexport function generateId(prefix = 'agent'): string {\n return `${prefix}-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n}\n\n/**\n * Truncate text with ellipsis\n */\nexport function truncate(text: string, maxLength: number): string {\n if (text.length <= maxLength) return text;\n return `${text.substring(0, maxLength - 3)}...`;\n}\n\n/**\n * Debounce function\n */\nexport function debounce<T extends (...args: unknown[]) => unknown>(\n fn: T,\n delay: number\n): (...args: Parameters<T>) => void {\n let timeoutId: ReturnType<typeof setTimeout>;\n return (...args: Parameters<T>) => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => fn(...args), delay);\n };\n}\n\n/**\n * Copy text to clipboard\n */\nexport async function copyToClipboard(text: string): Promise<boolean> {\n try {\n await navigator.clipboard.writeText(text);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Parse markdown-style bold text to segments\n */\nexport function parseTextWithBold(text: string): Array<{ text: string; bold: boolean }> {\n const segments: Array<{ text: string; bold: boolean }> = [];\n const regex = /\\*\\*(.+?)\\*\\*/g;\n let lastIndex = 0;\n let match;\n\n while ((match = regex.exec(text)) !== null) {\n if (match.index > lastIndex) {\n segments.push({ text: text.slice(lastIndex, match.index), bold: false });\n }\n segments.push({ text: match[1], bold: true });\n lastIndex = regex.lastIndex;\n }\n\n if (lastIndex < text.length) {\n segments.push({ text: text.slice(lastIndex), bold: false });\n }\n\n return segments;\n}\n\n/**\n * Get initials from a name\n */\nexport function getInitials(name: string, maxLength = 2): string {\n return name\n .split(' ')\n .map((word) => word[0])\n .join('')\n .toUpperCase()\n .substring(0, maxLength);\n}\n\n/**\n * Calculate percentage\n */\nexport function calculatePercentage(value: number, total: number): number {\n if (total === 0) return 0;\n return Math.round((value / total) * 100);\n}\n\n/**\n * Format a number with commas\n */\nexport function formatNumber(num: number): string {\n return num.toLocaleString();\n}\n\n/**\n * Format currency\n */\nexport function formatCurrency(amount: number, currency = 'USD'): string {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency,\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n }).format(amount);\n}\n\n/**\n * Delay/sleep utility\n */\nexport function delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Check if we're in a browser environment\n */\nexport function isBrowser(): boolean {\n return typeof window !== 'undefined';\n}\n\n/**\n * Check if we're inside an iframe\n */\nexport function isInIframe(): boolean {\n if (!isBrowser()) return false;\n try {\n return window.self !== window.top;\n } catch {\n return true;\n }\n}\n\n/**\n * Get color for sentiment\n */\nexport function getSentimentColor(sentiment: 'positive' | 'negative' | 'neutral' | 'mixed'): string {\n const colors = {\n positive: 'text-emerald-500',\n negative: 'text-red-500',\n neutral: 'text-muted-foreground',\n mixed: 'text-amber-500',\n };\n return colors[sentiment];\n}\n\n/**\n * Get background color for sentiment\n */\nexport function getSentimentBgColor(sentiment: 'positive' | 'negative' | 'neutral' | 'mixed'): string {\n const colors = {\n positive: 'bg-emerald-500/10',\n negative: 'bg-red-500/10',\n neutral: 'bg-muted',\n mixed: 'bg-amber-500/10',\n };\n return colors[sentiment];\n}\n","'use client';\n\n// ============================================================================\n// AGENT EVERYWHERE - Orchestration Layer\n// ============================================================================\n// This is the core orchestration system that allows AI agents to dynamically\n// compose and render UI components. It provides a registry, slot system,\n// and render engine for flexible UI composition.\n\nimport React, { createContext, useContext, useReducer, useCallback, useMemo } from 'react';\nimport type {\n AgentConfig,\n AgentState,\n AgentAction,\n AgentMessage,\n LayoutConfig,\n Attachment,\n AgentPersona,\n RenderInstruction,\n OrchestrationCommand,\n ComponentSlot,\n} from '../core/types';\nimport { generateId } from '../core/utils';\n\n// ============================================================================\n// COMPONENT REGISTRY\n// ============================================================================\n\ntype RegisteredComponent = React.ComponentType<Record<string, unknown>>;\n\nclass ComponentRegistry {\n private components: Map<string, RegisteredComponent> = new Map();\n\n register(name: string, component: RegisteredComponent) {\n this.components.set(name, component);\n }\n\n get(name: string): RegisteredComponent | undefined {\n return this.components.get(name);\n }\n\n has(name: string): boolean {\n return this.components.has(name);\n }\n\n unregister(name: string) {\n this.components.delete(name);\n }\n\n list(): string[] {\n return Array.from(this.components.keys());\n }\n\n clear() {\n this.components.clear();\n }\n}\n\nexport const componentRegistry = new ComponentRegistry();\n\n// ============================================================================\n// STATE REDUCER\n// ============================================================================\n\nconst initialState: AgentState = {\n messages: [],\n isLoading: false,\n error: undefined,\n inputValue: '',\n attachments: [],\n layout: { mode: 'panel' },\n isOpen: false,\n isMinimized: false,\n unreadCount: 0,\n persona: undefined,\n};\n\nfunction agentReducer(state: AgentState, action: AgentAction): AgentState {\n switch (action.type) {\n case 'SET_MESSAGES':\n return { ...state, messages: action.payload };\n case 'ADD_MESSAGE':\n return { ...state, messages: [...state.messages, action.payload] };\n case 'UPDATE_MESSAGE':\n return {\n ...state,\n messages: state.messages.map((msg) =>\n msg.id === action.payload.id ? { ...msg, ...action.payload.updates } : msg\n ),\n };\n case 'DELETE_MESSAGE':\n return {\n ...state,\n messages: state.messages.filter((msg) => msg.id !== action.payload),\n };\n case 'SET_LOADING':\n return { ...state, isLoading: action.payload };\n case 'SET_ERROR':\n return { ...state, error: action.payload };\n case 'SET_INPUT':\n return { ...state, inputValue: action.payload };\n case 'ADD_ATTACHMENT':\n return { ...state, attachments: [...state.attachments, action.payload] };\n case 'REMOVE_ATTACHMENT':\n return {\n ...state,\n attachments: state.attachments.filter((att) => att.id !== action.payload),\n };\n case 'CLEAR_ATTACHMENTS':\n return { ...state, attachments: [] };\n case 'SET_LAYOUT':\n return { ...state, layout: action.payload };\n case 'SET_OPEN':\n return { ...state, isOpen: action.payload };\n case 'SET_MINIMIZED':\n return { ...state, isMinimized: action.payload };\n case 'SET_UNREAD_COUNT':\n return { ...state, unreadCount: action.payload };\n case 'SET_PERSONA':\n return { ...state, persona: action.payload };\n case 'RESET':\n return initialState;\n default:\n return state;\n }\n}\n\n// ============================================================================\n// AGENT CONTEXT\n// ============================================================================\n\ninterface AgentContextValue {\n config: AgentConfig;\n state: AgentState;\n dispatch: React.Dispatch<AgentAction>;\n // Convenience actions\n sendMessage: (content: string, attachments?: Attachment[]) => void;\n addMessage: (message: Omit<AgentMessage, 'id' | 'timestamp'>) => AgentMessage;\n updateMessage: (id: string, updates: Partial<AgentMessage>) => void;\n deleteMessage: (id: string) => void;\n setLoading: (loading: boolean) => void;\n setError: (error: string | undefined) => void;\n setInput: (value: string) => void;\n addAttachment: (attachment: Attachment) => void;\n removeAttachment: (id: string) => void;\n clearAttachments: () => void;\n setLayout: (layout: LayoutConfig) => void;\n setOpen: (open: boolean) => void;\n setMinimized: (minimized: boolean) => void;\n setPersona: (persona: AgentPersona | undefined) => void;\n reset: () => void;\n // Orchestration\n executeCommand: (command: OrchestrationCommand) => void;\n}\n\nconst AgentContext = createContext<AgentContextValue | null>(null);\n\n// ============================================================================\n// AGENT PROVIDER\n// ============================================================================\n\ninterface AgentProviderProps {\n config: AgentConfig;\n initialMessages?: AgentMessage[];\n onSendMessage?: (content: string, attachments?: Attachment[]) => Promise<void>;\n onEvent?: (event: { type: string; payload?: unknown }) => void;\n children: React.ReactNode;\n}\n\nexport function AgentProvider({\n config,\n initialMessages = [],\n onSendMessage,\n onEvent,\n children,\n}: AgentProviderProps) {\n const [state, dispatch] = useReducer(agentReducer, {\n ...initialState,\n messages: initialMessages,\n layout: config.layout,\n });\n\n const emitEvent = useCallback(\n (type: string, payload?: unknown) => {\n onEvent?.({ type, payload });\n },\n [onEvent]\n );\n\n const addMessage = useCallback(\n (message: Omit<AgentMessage, 'id' | 'timestamp'>): AgentMessage => {\n const newMessage: AgentMessage = {\n ...message,\n id: generateId('msg'),\n timestamp: new Date(),\n };\n dispatch({ type: 'ADD_MESSAGE', payload: newMessage });\n emitEvent('message:receive', newMessage);\n return newMessage;\n },\n [emitEvent]\n );\n\n const sendMessage = useCallback(\n async (content: string, attachments?: Attachment[]) => {\n // Add user message\n const userMessage: AgentMessage = {\n id: generateId('msg'),\n role: 'user',\n content,\n timestamp: new Date(),\n attachments,\n };\n dispatch({ type: 'ADD_MESSAGE', payload: userMessage });\n dispatch({ type: 'CLEAR_ATTACHMENTS' });\n dispatch({ type: 'SET_INPUT', payload: '' });\n emitEvent('message:send', userMessage);\n\n // Call handler if provided\n if (onSendMessage) {\n dispatch({ type: 'SET_LOADING', payload: true });\n try {\n await onSendMessage(content, attachments);\n } catch (error) {\n dispatch({ type: 'SET_ERROR', payload: String(error) });\n emitEvent('error', error);\n } finally {\n dispatch({ type: 'SET_LOADING', payload: false });\n }\n }\n },\n [onSendMessage, emitEvent]\n );\n\n const updateMessage = useCallback((id: string, updates: Partial<AgentMessage>) => {\n dispatch({ type: 'UPDATE_MESSAGE', payload: { id, updates } });\n }, []);\n\n const deleteMessage = useCallback((id: string) => {\n dispatch({ type: 'DELETE_MESSAGE', payload: id });\n }, []);\n\n const setLoading = useCallback((loading: boolean) => {\n dispatch({ type: 'SET_LOADING', payload: loading });\n }, []);\n\n const setError = useCallback((error: string | undefined) => {\n dispatch({ type: 'SET_ERROR', payload: error });\n }, []);\n\n const setInput = useCallback((value: string) => {\n dispatch({ type: 'SET_INPUT', payload: value });\n }, []);\n\n const addAttachment = useCallback(\n (attachment: Attachment) => {\n dispatch({ type: 'ADD_ATTACHMENT', payload: attachment });\n emitEvent('attachment:add', attachment);\n },\n [emitEvent]\n );\n\n const removeAttachment = useCallback(\n (id: string) => {\n dispatch({ type: 'REMOVE_ATTACHMENT', payload: id });\n emitEvent('attachment:remove', { id });\n },\n [emitEvent]\n );\n\n const clearAttachments = useCallback(() => {\n dispatch({ type: 'CLEAR_ATTACHMENTS' });\n }, []);\n\n const setLayout = useCallback(\n (layout: LayoutConfig) => {\n dispatch({ type: 'SET_LAYOUT', payload: layout });\n emitEvent('layout:change', layout);\n },\n [emitEvent]\n );\n\n const setOpen = useCallback(\n (open: boolean) => {\n dispatch({ type: 'SET_OPEN', payload: open });\n emitEvent(open ? 'widget:open' : 'widget:close');\n if (open) {\n dispatch({ type: 'SET_UNREAD_COUNT', payload: 0 });\n }\n },\n [emitEvent]\n );\n\n const setMinimized = useCallback(\n (minimized: boolean) => {\n dispatch({ type: 'SET_MINIMIZED', payload: minimized });\n emitEvent('widget:minimize', { minimized });\n },\n [emitEvent]\n );\n\n const setPersona = useCallback((persona: AgentPersona | undefined) => {\n dispatch({ type: 'SET_PERSONA', payload: persona });\n }, []);\n\n const reset = useCallback(() => {\n dispatch({ type: 'RESET' });\n }, []);\n\n const executeCommand = useCallback(\n (command: OrchestrationCommand) => {\n switch (command.type) {\n case 'layout_change':\n if (typeof command.payload !== 'string') {\n setLayout(command.payload as LayoutConfig);\n }\n break;\n case 'inject':\n case 'update':\n case 'remove':\n // These would be handled by a slot system in a more complex implementation\n emitEvent(`orchestration:${command.type}`, command);\n break;\n }\n },\n [setLayout, emitEvent]\n );\n\n const value = useMemo(\n () => ({\n config,\n state,\n dispatch,\n sendMessage,\n addMessage,\n updateMessage,\n deleteMessage,\n setLoading,\n setError,\n setInput,\n addAttachment,\n removeAttachment,\n clearAttachments,\n setLayout,\n setOpen,\n setMinimized,\n setPersona,\n reset,\n executeCommand,\n }),\n [\n config,\n state,\n sendMessage,\n addMessage,\n updateMessage,\n deleteMessage,\n setLoading,\n setError,\n setInput,\n addAttachment,\n removeAttachment,\n clearAttachments,\n setLayout,\n setOpen,\n setMinimized,\n setPersona,\n reset,\n executeCommand,\n ]\n );\n\n return <AgentContext.Provider value={value}>{children}</AgentContext.Provider>;\n}\n\n// ============================================================================\n// HOOKS\n// ============================================================================\n\nexport function useAgent() {\n const context = useContext(AgentContext);\n if (!context) {\n throw new Error('useAgent must be used within an AgentProvider');\n }\n return context;\n}\n\nexport function useAgentMessages() {\n const { state, addMessage, updateMessage, deleteMessage } = useAgent();\n return {\n messages: state.messages,\n isLoading: state.isLoading,\n addMessage,\n updateMessage,\n deleteMessage,\n };\n}\n\nexport function useAgentInput() {\n const { state, setInput, sendMessage, addAttachment, removeAttachment, clearAttachments } =\n useAgent();\n return {\n value: state.inputValue,\n attachments: state.attachments,\n isLoading: state.isLoading,\n setValue: setInput,\n send: sendMessage,\n addAttachment,\n removeAttachment,\n clearAttachments,\n };\n}\n\nexport function useAgentLayout() {\n const { state, setLayout, setOpen, setMinimized } = useAgent();\n return {\n layout: state.layout,\n isOpen: state.isOpen,\n isMinimized: state.isMinimized,\n setLayout,\n setOpen,\n setMinimized,\n };\n}\n\n// ============================================================================\n// DYNAMIC RENDERER\n// ============================================================================\n\ninterface DynamicRendererProps {\n instruction: RenderInstruction;\n fallback?: React.ReactNode;\n}\n\nexport function DynamicRenderer({ instruction, fallback = null }: DynamicRendererProps) {\n const Component = componentRegistry.get(instruction.component);\n\n if (!Component) {\n console.warn(`Component \"${instruction.component}\" not found in registry`);\n return <>{fallback}</>;\n }\n\n if (instruction.condition === false) {\n return null;\n }\n\n return (\n <Component {...(instruction.props || {})}>\n {instruction.children?.map((child, index) => (\n <DynamicRenderer key={index} instruction={child} />\n ))}\n </Component>\n );\n}\n\n// ============================================================================\n// SLOT RENDERER\n// ============================================================================\n\ninterface SlotRendererProps {\n slot: ComponentSlot | undefined;\n fallback?: React.ReactNode;\n}\n\nexport function SlotRenderer({ slot, fallback = null }: SlotRendererProps) {\n if (!slot || slot.visible === false) {\n return <>{fallback}</>;\n }\n\n const Component = componentRegistry.get(slot.component);\n if (!Component) {\n console.warn(`Slot component \"${slot.component}\" not found in registry`);\n return <>{fallback}</>;\n }\n\n return <Component {...(slot.props || {})} />;\n}\n\n// ============================================================================\n// EXPORTS\n// ============================================================================\n\nexport { AgentContext };\nexport type { AgentContextValue, AgentProviderProps };\n","// ============================================================================\n// AGENT EVERYWHERE - Component Manifest\n// ============================================================================\n// A typed, serializable catalog describing every component an orchestration\n// agent can select and inject at runtime. Each entry captures the component's\n// capability, the kind of payload it renders, and guidance on when to pick it.\n// The manifest is intentionally data-only (no React imports) so it can be sent\n// to an LLM/orchestrator as context or filtered programmatically.\n\nexport type ComponentCategory =\n | 'primitive'\n | 'input'\n | 'message'\n | 'data-display'\n | 'interactive'\n | 'specialty'\n | 'container';\n\n/** Logical capability tags an orchestrator can match intent against. */\nexport type ComponentCapability =\n | 'text'\n | 'streaming'\n | 'reasoning'\n | 'steps'\n | 'feedback'\n | 'attachments'\n | 'file-upload'\n | 'voice'\n | 'image-generation'\n | 'suggestions'\n | 'templates'\n | 'quick-replies'\n | 'persona'\n | 'sentiment'\n | 'handoff'\n | 'chart'\n | 'table'\n | 'metrics'\n | 'progress'\n | 'entity-card'\n | 'option-select'\n | 'settings'\n | 'analytics'\n | 'wizard'\n | 'quiz'\n | 'writing'\n | 'layout'\n | 'media-gallery'\n | 'listing'\n | 'controls'\n | 'allocation'\n | 'recommendation'\n | 'schedule'\n | 'lesson'\n | 'media-editing';\n\nexport interface ManifestPropSpec {\n name: string;\n /** TS-ish type string for orchestrator/LLM consumption. */\n type: string;\n required?: boolean;\n description?: string;\n}\n\nexport interface ComponentManifestEntry {\n /** Registry key + import name. */\n name: string;\n category: ComponentCategory;\n /** One-line description of what it does. */\n description: string;\n capabilities: ComponentCapability[];\n /** Guidance for an orchestrator on when to select this component. */\n whenToUse: string;\n /** Key props (not exhaustive — the source of truth is the TS interface). */\n props: ManifestPropSpec[];\n /** Render surfaces this component is appropriate for. */\n surfaces: Array<'conversation' | 'dashboard' | 'widget'>;\n}\n\nconst ALL_SURFACES: ComponentManifestEntry['surfaces'] = [\n 'conversation',\n 'dashboard',\n 'widget',\n];\n\nexport const componentManifest: ComponentManifestEntry[] = [\n // --- Primitives ---\n {\n name: 'MessageBubble',\n category: 'primitive',\n description: 'A single role-styled message bubble.',\n capabilities: ['text'],\n whenToUse: 'Render any individual chat message body.',\n props: [\n { name: 'role', type: \"'user' | 'assistant' | 'system'\", required: true },\n { name: 'children', type: 'ReactNode', required: true },\n ],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'TypingIndicator',\n category: 'primitive',\n description: 'Animated dots shown while the agent is responding.',\n capabilities: ['streaming'],\n whenToUse: 'Show during in-flight backend responses.',\n props: [{ name: 'size', type: \"'sm' | 'md'\" }],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'StatusBadge',\n category: 'primitive',\n description: 'Online/offline/busy status pill.',\n capabilities: ['text'],\n whenToUse: 'Indicate agent availability in a header.',\n props: [{ name: 'status', type: \"'online' | 'offline' | 'busy' | 'away'\", required: true }],\n surfaces: ALL_SURFACES,\n },\n\n // --- Input ---\n {\n name: 'PromptInput',\n category: 'input',\n description: 'Auto-growing text input with send affordance.',\n capabilities: ['text'],\n whenToUse: 'Default composer for any conversation surface.',\n props: [\n { name: 'value', type: 'string', required: true },\n { name: 'onChange', type: '(v: string) => void', required: true },\n { name: 'onSend', type: '(v: string) => void', required: true },\n ],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'MultimodalInput',\n category: 'input',\n description: 'Composer with attachment + voice affordances.',\n capabilities: ['text', 'attachments', 'voice', 'file-upload'],\n whenToUse: 'When the turn may include files, images, or audio.',\n props: [\n { name: 'value', type: 'string', required: true },\n { name: 'onSend', type: '(v: string, files?: File[]) => void', required: true },\n ],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'QuickReplies',\n category: 'input',\n description: 'Tappable suggested reply chips.',\n capabilities: ['quick-replies', 'suggestions'],\n whenToUse: 'Offer constrained next actions after a message.',\n props: [{ name: 'replies', type: 'QuickReply[]', required: true }],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'TemplateSelector',\n category: 'input',\n description: 'Pick a parameterized prompt template and fill variables.',\n capabilities: ['templates'],\n whenToUse: 'Help users start from structured, reusable prompts.',\n props: [{ name: 'templates', type: 'PromptTemplate[]', required: true }],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'InlineSuggestionsInput',\n category: 'input',\n description: 'Input with inline ghost-text completion.',\n capabilities: ['suggestions', 'text'],\n whenToUse: 'Accelerate typing with predictive completions.',\n props: [{ name: 'getSuggestions', type: '(value: string) => Promise<InlineSuggestion[]>' }],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'FileDropZone',\n category: 'input',\n description: 'Drag-and-drop file upload area.',\n capabilities: ['file-upload', 'attachments'],\n whenToUse: 'Collect documents/images for processing.',\n props: [{ name: 'onFiles', type: '(files: File[]) => void', required: true }],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'PromptLibrary',\n category: 'input',\n description: 'Searchable, categorized library of saved prompts.',\n capabilities: ['templates', 'suggestions'],\n whenToUse: 'Let users browse and reuse a catalog of prompts.',\n props: [{ name: 'prompts', type: 'LibraryPrompt[]', required: true }],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'PersonaSelector',\n category: 'input',\n description: 'Choose the active agent persona/profile.',\n capabilities: ['persona'],\n whenToUse: 'Switch tone/capability profile before a turn.',\n props: [{ name: 'personas', type: 'AgentPersona[]', required: true }],\n surfaces: ALL_SURFACES,\n },\n\n // --- Messages ---\n {\n name: 'MessageWithReasoning',\n category: 'message',\n description: 'Assistant message with collapsible chain-of-thought.',\n capabilities: ['text', 'reasoning'],\n whenToUse: 'Expose intermediate reasoning steps transparently.',\n props: [\n { name: 'content', type: 'string', required: true },\n { name: 'reasoning', type: 'ReasoningStep[]' },\n ],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'MessageWithSteps',\n category: 'message',\n description: 'Message showing multi-step execution progress.',\n capabilities: ['text', 'steps'],\n whenToUse: 'Visualize a tool/workflow run with per-step status.',\n props: [\n { name: 'content', type: 'string', required: true },\n { name: 'steps', type: 'ExecutionStep[]', required: true },\n ],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'MessageWithFeedback',\n category: 'message',\n description: 'Message with thumbs up/down + categorized feedback.',\n capabilities: ['text', 'feedback'],\n whenToUse: 'Collect response quality signals.',\n props: [\n { name: 'content', type: 'string', required: true },\n { name: 'onFeedback', type: '(f: MessageFeedback) => void' },\n ],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'MessageWithAttachments',\n category: 'message',\n description: 'Message rendering attached media/files.',\n capabilities: ['text', 'attachments'],\n whenToUse: 'Display files/images shared in a turn.',\n props: [\n { name: 'content', type: 'string' },\n { name: 'attachments', type: 'Attachment[]', required: true },\n ],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'ConversationArtifact',\n category: 'message',\n description: 'Wraps any rich-content node (chart/report/gallery) as an assistant conversation turn.',\n capabilities: ['text'],\n whenToUse: 'Drop a data-display component into a message thread as an assistant turn, with optional intro/caption.',\n props: [\n { name: 'children', type: 'ReactNode', required: true },\n { name: 'intro', type: 'string' },\n { name: 'caption', type: 'string' },\n ],\n surfaces: ALL_SURFACES,\n },\n\n // --- Data display ---\n {\n name: 'ChartContainer',\n category: 'data-display',\n description: 'Renders bar/line/pie/area charts from ChartData.',\n capabilities: ['chart'],\n whenToUse: 'Visualize quantitative results or trends.',\n props: [{ name: 'data', type: 'ChartData', required: true }],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'MetricsGrid',\n category: 'data-display',\n description: 'Grid of KPI metric cards with trends.',\n capabilities: ['metrics'],\n whenToUse: 'Summarize headline numbers at a glance.',\n props: [{ name: 'metrics', type: 'MetricData[]', required: true }],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'DataTable',\n category: 'data-display',\n description: 'Sortable tabular data view.',\n capabilities: ['table'],\n whenToUse: 'Show row-level detail or query results.',\n props: [{ name: 'data', type: 'TableData', required: true }],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'ProgressTracker',\n category: 'data-display',\n description: 'Linear/stepped progress visualization.',\n capabilities: ['progress', 'steps'],\n whenToUse: 'Track completion of a long-running task.',\n props: [{ name: 'steps', type: 'ProgressStep[]', required: true }],\n surfaces: ALL_SURFACES,\n },\n\n // --- Interactive ---\n {\n name: 'EntityCard',\n category: 'interactive',\n description: 'Rich card for a person/place/item with actions.',\n capabilities: ['entity-card'],\n whenToUse: 'Surface a structured entity with primary/secondary actions.',\n props: [{ name: 'entity', type: 'EntityCardData', required: true }],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'OptionCards',\n category: 'interactive',\n description: 'Selectable recommendation/option cards.',\n capabilities: ['option-select'],\n whenToUse: 'Present a set of choices for the user to pick from.',\n props: [{ name: 'options', type: 'OptionCardItem[]', required: true }],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'SettingsPanel',\n category: 'interactive',\n description: 'Grouped toggles/controls panel.',\n capabilities: ['settings'],\n whenToUse: 'Let the user configure preferences or controls inline.',\n props: [{ name: 'groups', type: 'SettingsGroup[]', required: true }],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'AgentHandoff',\n category: 'interactive',\n description: 'Visualizes a handoff/routing between specialized AI agents (direct, routing-to-specialist, or multi-agent triage).',\n capabilities: ['handoff', 'persona'],\n whenToUse: 'Route a request between specialized agents by request type (onboarding/routing), or triage among several candidates.',\n props: [\n { name: 'variant', type: \"'direct' | 'routing' | 'triage'\" },\n { name: 'from', type: 'HandoffAgent', required: true },\n { name: 'to', type: 'HandoffAgent' },\n { name: 'candidates', type: 'HandoffCandidate[]' },\n { name: 'reason', type: 'string' },\n { name: 'status', type: \"'connecting' | 'handed-off' | 'active'\" },\n { name: 'actions', type: 'HandoffAction[]' },\n ],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'ListingFeed',\n category: 'interactive',\n description: 'Feed of structured listing cards with meta fields, tags, and actions.',\n capabilities: ['listing', 'entity-card'],\n whenToUse: 'Present a scannable list of structured results/opportunities the user can act on or save.',\n props: [\n { name: 'listings', type: 'Listing[]', required: true },\n { name: 'savedIds', type: 'string[]' },\n { name: 'onToggleSaved', type: '(id: string) => void' },\n ],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'ControlGrid',\n category: 'interactive',\n description: 'Grid of toggle/slider/status/action control tiles with live state.',\n capabilities: ['controls', 'settings'],\n whenToUse: 'Expose live controls so the user can flip toggles, adjust values, or trigger actions.',\n props: [\n { name: 'tiles', type: 'ControlTile[]', required: true },\n { name: 'onToggle', type: '(id: string, next: boolean) => void' },\n { name: 'onValueChange', type: '(id: string, value: number) => void' },\n ],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'RecommendationCards',\n category: 'interactive',\n description: 'Recommendation cards with rationale, impact, and actions.',\n capabilities: ['recommendation', 'option-select'],\n whenToUse: 'Surface a set of recommended actions with the reasoning behind each.',\n props: [{ name: 'recommendations', type: 'Recommendation[]', required: true }],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'ScheduleTimeline',\n category: 'interactive',\n description: 'Time-ordered agenda/timeline of slots with state, options, and actions.',\n capabilities: ['schedule', 'steps'],\n whenToUse: 'Show a chronological agenda or let the user pick from proposed time slots.',\n props: [\n { name: 'items', type: 'AgendaItem[]', required: true },\n { name: 'selectedOptionId', type: 'string' },\n { name: 'onSelectOption', type: '(itemId: string, optionId: string) => void' },\n ],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'SentimentDisplay',\n category: 'data-display',\n description: 'Visualizes a sentiment score and emotion breakdown.',\n capabilities: ['sentiment', 'analytics'],\n whenToUse: 'Show tone/sentiment analysis of text.',\n props: [{ name: 'sentiment', type: 'SentimentScore', required: true }],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'MediaGallery',\n category: 'data-display',\n description: 'Grid/list gallery of media items with grouping and lightbox preview.',\n capabilities: ['media-gallery', 'attachments'],\n whenToUse: 'Display a collection of images/video/files/links the user can browse and preview.',\n props: [\n { name: 'items', type: 'MediaItem[]', required: true },\n { name: 'groupBy', type: \"'group' | 'kind' | 'none'\" },\n { name: 'enablePreview', type: 'boolean' },\n ],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'AllocationBreakdown',\n category: 'data-display',\n description: 'Weighted allocation visualization (stacked bar + per-segment rows).',\n capabilities: ['allocation', 'chart', 'metrics'],\n whenToUse: 'Show how a whole is distributed across weighted segments, with deltas and summary stats.',\n props: [\n { name: 'segments', type: 'AllocationSegment[]', required: true },\n { name: 'summary', type: 'AllocationSummaryStat[]' },\n ],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'AnalyticsDashboard',\n category: 'data-display',\n description: 'Polished, responsive analytics report: KPI cards, distribution bar, breakdown/ranked lists, and recent items.',\n capabilities: ['analytics', 'metrics', 'chart'],\n whenToUse: 'Render a multi-section analytics/report view back to the user (e.g. an NLP query turned into a visualized report). Collapses to one column on narrow surfaces.',\n props: [\n { name: 'metrics', type: 'AnalyticsMetric[]' },\n { name: 'distribution', type: 'AnalyticsDistributionSegment[]' },\n { name: 'highlight', type: 'AnalyticsHighlight' },\n { name: 'breakdown', type: 'AnalyticsBreakdownRow[]' },\n { name: 'ranked', type: 'AnalyticsRankedRow[]' },\n { name: 'recentItems', type: 'AnalyticsRecentItem[]' },\n ],\n surfaces: ALL_SURFACES,\n },\n\n // --- Specialty ---\n {\n name: 'ImageGenerator',\n category: 'specialty',\n description: 'Prompt-to-image generation panel with variations.',\n capabilities: ['image-generation'],\n whenToUse: 'Generate or iterate on images from prompts.',\n props: [{ name: 'onGenerate', type: '(prompt: string) => void' }],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'WritingAssistant',\n category: 'specialty',\n description: 'Long-form drafting with tone/length controls.',\n capabilities: ['writing'],\n whenToUse: 'Draft or refine long-form content.',\n props: [{ name: 'onGenerate', type: '(opts: WritingOptions) => void' }],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'OnboardingWizard',\n category: 'specialty',\n description: 'Multi-step guided setup flow.',\n capabilities: ['wizard', 'steps'],\n whenToUse: 'Walk a user through first-run configuration.',\n props: [{ name: 'steps', type: 'WizardStep[]', required: true }],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'QuizCard',\n category: 'specialty',\n description: 'Interactive multiple-choice question card.',\n capabilities: ['quiz', 'option-select'],\n whenToUse: 'Assess knowledge or gather structured input.',\n props: [{ name: 'questions', type: 'QuizQuestion[]', required: true }],\n surfaces: ALL_SURFACES,\n },\n {\n name: 'GuidedLessonFlow',\n category: 'specialty',\n description: 'Step-through guided flow with content and optional knowledge checks.',\n capabilities: ['lesson', 'wizard', 'quiz', 'progress'],\n whenToUse: 'Walk a user through sequential content with optional per-step comprehension checks.',\n props: [\n { name: 'steps', type: 'LessonStep[]', required: true },\n { name: 'currentIndex', type: 'number' },\n { name: 'onComplete', type: '() => void' },\n ],\n surfaces: ['conversation', 'dashboard'],\n },\n {\n name: 'MediaEditorCanvas',\n category: 'specialty',\n description: 'Media canvas with tool/adjustment rail and before/after compare.',\n capabilities: ['media-editing'],\n whenToUse: 'Preview a media edit, compare before/after, and expose tools/adjustments.',\n props: [\n { name: 'sourceUrl', type: 'string' },\n { name: 'tools', type: 'EditorTool[]' },\n { name: 'adjustments', type: 'EditorAdjustment[]' },\n { name: 'enableCompare', type: 'boolean' },\n ],\n surfaces: ['conversation', 'dashboard'],\n },\n\n // --- Analytics ---\n {\n name: 'ConversationAnalytics',\n category: 'data-display',\n description: 'Dashboard of conversation/topic analytics.',\n capabilities: ['analytics', 'chart', 'metrics'],\n whenToUse: 'Summarize aggregate conversation insights.',\n props: [{ name: 'data', type: 'ConversationAnalyticsData', required: true }],\n surfaces: ['dashboard'],\n },\n {\n name: 'PerformanceMetrics',\n category: 'data-display',\n description: 'Agent performance KPI dashboard.',\n capabilities: ['analytics', 'metrics'],\n whenToUse: 'Report on agent performance over time.',\n props: [{ name: 'metrics', type: 'PerformanceMetricsData', required: true }],\n surfaces: ['dashboard'],\n },\n\n // --- Containers ---\n {\n name: 'ChatPanel',\n category: 'container',\n description: 'Standard bounded conversation panel.',\n capabilities: ['layout'],\n whenToUse: 'Embed a conversation inside a page or dashboard.',\n props: [{ name: 'children', type: 'ReactNode', required: true }],\n surfaces: ['conversation'],\n },\n {\n name: 'FloatingWidget',\n category: 'container',\n description: 'Floating launcher + expandable chat for embedding.',\n capabilities: ['layout'],\n whenToUse: 'Drop an agent onto any (incl. 3rd-party) website.',\n props: [\n { name: 'isOpen', type: 'boolean', required: true },\n { name: 'onToggle', type: '() => void', required: true },\n ],\n surfaces: ['widget'],\n },\n {\n name: 'FullscreenDashboard',\n category: 'container',\n description: 'Full-screen reporting/dashboard surface.',\n capabilities: ['layout'],\n whenToUse: 'Expand a conversation into a full report view.',\n props: [{ name: 'children', type: 'ReactNode', required: true }],\n surfaces: ['dashboard'],\n },\n {\n name: 'SplitView',\n category: 'container',\n description: 'Conversation alongside a data/report panel.',\n capabilities: ['layout'],\n whenToUse: 'Chat and live results side-by-side.',\n props: [\n { name: 'chat', type: 'ReactNode', required: true },\n { name: 'panel', type: 'ReactNode', required: true },\n ],\n surfaces: ['dashboard'],\n },\n];\n\n/** Lookup a manifest entry by component name. */\nexport function getManifestEntry(name: string): ComponentManifestEntry | undefined {\n return componentManifest.find((c) => c.name === name);\n}\n\n/** Filter manifest entries by capability — the core orchestrator query. */\nexport function findComponentsByCapability(\n capability: ComponentCapability\n): ComponentManifestEntry[] {\n return componentManifest.filter((c) => c.capabilities.includes(capability));\n}\n\n/** Filter manifest entries appropriate for a given render surface. */\nexport function findComponentsBySurface(\n surface: 'conversation' | 'dashboard' | 'widget'\n): ComponentManifestEntry[] {\n return componentManifest.filter((c) => c.surfaces.includes(surface));\n}\n\n/** Filter by category. */\nexport function findComponentsByCategory(\n category: ComponentCategory\n): ComponentManifestEntry[] {\n return componentManifest.filter((c) => c.category === category);\n}\n","'use client';\n\nimport { motion } from 'motion/react';\nimport { Markdown } from '@page-speed/markdown-to-jsx';\nimport { cn } from '../../core/utils';\nimport type { MessageRole } from '../../core/types';\n\nexport interface MessageBubbleProps {\n role: MessageRole;\n children: React.ReactNode;\n className?: string;\n /** Remove default styling, just provide structure */\n unstyled?: boolean;\n}\n\nexport function MessageBubble({ role, children, className, unstyled }: MessageBubbleProps) {\n return (\n <motion.div\n initial={{ opacity: 0, y: 6 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.2 }}\n className={cn(\n 'max-w-[85%] rounded-lg px-3 py-2',\n !unstyled && role === 'user' && 'bg-foreground text-background',\n !unstyled && role === 'assistant' && 'bg-muted/50',\n !unstyled && role === 'system' && 'bg-muted/30 border border-dashed',\n className\n )}\n >\n {children}\n </motion.div>\n );\n}\n\nexport interface MessageContentProps {\n children: React.ReactNode;\n className?: string;\n /**\n * When the content is a plain string, render it as markdown (headings,\n * lists, bold/italic, code, links) instead of raw text. Defaults to true.\n * Set false for content that should be shown verbatim.\n */\n markdown?: boolean;\n}\n\n// Markdown spacing is provided via element OVERRIDES with inline styles rather\n// than Tailwind utility classes. The consumer's Tailwind build does not scan\n// this package's compiled output, so arbitrary variants like `[&_p]:my-1.5`\n// are never generated and silently do nothing — which is why agent messages\n// rendered jammed together. Inline styles render correctly in any consumer.\nconst SPACE = '0.5rem';\n\nconst mdStyle: React.CSSProperties = { lineHeight: 1.6 };\n\nconst MdP = ({ children }: { children?: React.ReactNode }) => (\n <p style={{ margin: `${SPACE} 0` }}>{children}</p>\n);\nconst MdUl = ({ children }: { children?: React.ReactNode }) => (\n <ul style={{ margin: `${SPACE} 0`, paddingLeft: '1.25rem', listStyle: 'disc' }}>\n {children}\n </ul>\n);\nconst MdOl = ({ children }: { children?: React.ReactNode }) => (\n <ol\n style={{ margin: `${SPACE} 0`, paddingLeft: '1.25rem', listStyle: 'decimal' }}\n >\n {children}\n </ol>\n);\nconst MdLi = ({ children }: { children?: React.ReactNode }) => (\n <li style={{ margin: '0.2rem 0' }}>{children}</li>\n);\nconst mkHeading =\n (level: 1 | 2 | 3, fontSize: string) =>\n ({ children }: { children?: React.ReactNode }) => {\n const Tag = `h${level}` as 'h1' | 'h2' | 'h3';\n return (\n <Tag style={{ margin: `${SPACE} 0 0.25rem`, fontSize, fontWeight: 600 }}>\n {children}\n </Tag>\n );\n };\nconst MdBlockquote = ({ children }: { children?: React.ReactNode }) => (\n <blockquote\n style={{\n margin: `${SPACE} 0`,\n paddingLeft: '0.75rem',\n borderLeft: '2px solid currentColor',\n opacity: 0.85,\n }}\n >\n {children}\n </blockquote>\n);\n\n// Override the spacing-critical block elements with inline-styled equivalents.\n// Links, images, code, and tables keep the library's default ecosystem\n// overrides (useDefaults stays on).\nconst MARKDOWN_OVERRIDES = {\n p: MdP,\n ul: MdUl,\n ol: MdOl,\n li: MdLi,\n h1: mkHeading(1, '1rem'),\n h2: mkHeading(2, '0.95rem'),\n h3: mkHeading(3, '0.9rem'),\n blockquote: MdBlockquote,\n};\n\nexport function MessageContent({\n children,\n className,\n markdown = true,\n}: MessageContentProps) {\n // Render markdown only for plain string content. Non-string children (custom\n // nodes) and opt-outs fall back to verbatim, whitespace-preserving text.\n if (markdown && typeof children === 'string') {\n return (\n <Markdown\n className={cn(\n 'text-sm [&>*:first-child]:mt-0 [&>*:last-child]:mb-0',\n className,\n )}\n overrides={MARKDOWN_OVERRIDES}\n >\n {children}\n </Markdown>\n );\n }\n return (\n <div\n className={cn('text-sm leading-relaxed whitespace-pre-wrap', className)}\n style={mdStyle}\n >\n {children}\n </div>\n );\n}\n\nexport interface MessageContainerProps {\n role: MessageRole;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function MessageContainer({ role, children, className }: MessageContainerProps) {\n return (\n <div\n className={cn(\n 'flex gap-3',\n role === 'user' && 'flex-row-reverse',\n className\n )}\n >\n {children}\n </div>\n );\n}\n","'use client';\n\nimport { motion } from 'motion/react';\nimport { cn } from '../../core/utils';\n\nexport interface TypingIndicatorProps {\n className?: string;\n /** Dot size */\n size?: 'sm' | 'md';\n /** Label to show */\n label?: string;\n}\n\nexport function TypingIndicator({ className, size = 'sm', label }: TypingIndicatorProps) {\n const dotSize = size === 'sm' ? 'size-1.5' : 'size-2';\n\n return (\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className={cn('flex items-center gap-2', className)}\n >\n <div className=\"flex items-center gap-1 rounded-lg bg-muted/50 px-3 py-2\">\n <span className={cn(dotSize, 'animate-pulse rounded-full bg-muted-foreground')} />\n <span\n className={cn(\n dotSize,\n 'animate-pulse rounded-full bg-muted-foreground [animation-delay:150ms]'\n )}\n />\n <span\n className={cn(\n dotSize,\n 'animate-pulse rounded-full bg-muted-foreground [animation-delay:300ms]'\n )}\n />\n </div>\n {label && (\n <span className=\"text-muted-foreground text-xs\">{label}</span>\n )}\n </motion.div>\n );\n}\n","'use client';\n\nimport { cn } from '../../core/utils';\n\nexport type StatusType = 'online' | 'offline' | 'busy' | 'away';\n\nexport interface StatusBadgeProps {\n status: StatusType;\n label?: string;\n showDot?: boolean;\n className?: string;\n}\n\nconst statusColors: Record<StatusType, string> = {\n online: 'bg-emerald-500',\n offline: 'bg-muted-foreground/50',\n busy: 'bg-red-500',\n away: 'bg-amber-500',\n};\n\nconst statusLabels: Record<StatusType, string> = {\n online: 'Online',\n offline: 'Offline',\n busy: 'Busy',\n away: 'Away',\n};\n\nexport function StatusBadge({\n status,\n label,\n showDot = true,\n className,\n}: StatusBadgeProps) {\n const displayLabel = label || statusLabels[status];\n\n return (\n <div className={cn('flex items-center gap-1.5', className)}>\n {showDot && (\n <span className={cn('size-1.5 rounded-full', statusColors[status])} />\n )}\n <span className=\"text-muted-foreground text-[10px]\">{displayLabel}</span>\n </div>\n );\n}\n","import * as React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../core/utils';\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground shadow hover:bg-primary/90\",\n destructive: \"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90\",\n outline: \"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground\",\n secondary: \"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2\",\n sm: \"h-8 rounded-md px-3 text-xs\",\n lg: \"h-10 rounded-md px-8\",\n icon: \"h-9 w-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button';\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n );\n }\n);\nButton.displayName = 'Button';\n\nexport { Button, buttonVariants };\n","\"use client\";\n\nimport {\n type FormEvent,\n forwardRef,\n type KeyboardEvent,\n useCallback,\n useImperativeHandle,\n useLayoutEffect,\n useRef,\n} from \"react\";\nimport { SendIcon } from \"lucide-react\";\nimport { Button } from \"../../ui/button\";\nimport { cn } from \"../../core/utils\";\n\nexport interface PromptInputProps {\n /** Current input value */\n value: string;\n /** Value change handler */\n onChange: (value: string) => void;\n /** Submit handler */\n onSubmit: () => void;\n /** Placeholder text */\n placeholder?: string;\n /** Disable input */\n disabled?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Auto focus */\n autoFocus?: boolean;\n /** Show send button */\n showSendButton?: boolean;\n /** Custom send button content */\n sendButtonContent?: React.ReactNode;\n /** Additional actions (left side) */\n leftActions?: React.ReactNode;\n /** Additional actions (right side, before send) */\n rightActions?: React.ReactNode;\n /** Container class */\n className?: string;\n /** Input class */\n inputClassName?: string;\n /** Variant styling */\n variant?: \"default\" | \"minimal\" | \"bordered\";\n /**\n * Minimum number of visible text rows. Default 1 (grows as the user types).\n */\n minRows?: number;\n /**\n * Maximum number of visible text rows before the textarea scrolls internally\n * instead of growing further. Default 6.\n */\n maxRows?: number;\n}\n\n// Approximate line height (px) used to cap auto-grow at `maxRows`. Matches the\n// `text-sm` / `leading-5` rhythm used below.\nconst LINE_HEIGHT_PX = 20;\nconst VERTICAL_PADDING_PX = 8; // py-1 top+bottom\n\n/**\n * Conversational prompt input.\n *\n * Behaves like a standard AI chat input: it is a multi-line, auto-growing\n * textarea where **Enter submits** and **Shift+Enter inserts a newline**. The\n * textarea grows with content up to `maxRows`, then scrolls internally.\n *\n * (Previously this was a single-line `<input>`, which made Shift+Enter a no-op\n * and prevented multi-line messages entirely.)\n */\nexport const PromptInput = forwardRef<HTMLTextAreaElement, PromptInputProps>(\n (\n {\n value,\n onChange,\n onSubmit,\n placeholder = \"Type a message...\",\n disabled = false,\n loading = false,\n autoFocus = false,\n showSendButton = true,\n sendButtonContent,\n leftActions,\n rightActions,\n className,\n inputClassName,\n variant = \"default\",\n minRows = 1,\n maxRows = 6,\n },\n ref,\n ) => {\n const textareaRef = useRef<HTMLTextAreaElement | null>(null);\n useImperativeHandle(ref, () => textareaRef.current as HTMLTextAreaElement);\n\n // Auto-grow: reset height, then size to content, capped at maxRows.\n const resize = useCallback(() => {\n const el = textareaRef.current;\n if (!el) return;\n el.style.height = \"auto\";\n const maxHeight = maxRows * LINE_HEIGHT_PX + VERTICAL_PADDING_PX;\n const minHeight = minRows * LINE_HEIGHT_PX + VERTICAL_PADDING_PX;\n const next = Math.min(Math.max(el.scrollHeight, minHeight), maxHeight);\n el.style.height = `${next}px`;\n el.style.overflowY = el.scrollHeight > maxHeight ? \"auto\" : \"hidden\";\n }, [maxRows, minRows]);\n\n useLayoutEffect(() => {\n resize();\n }, [value, resize]);\n\n const handleSubmit = useCallback(\n (e?: FormEvent) => {\n e?.preventDefault();\n if (!value.trim() || disabled || loading) return;\n onSubmit();\n },\n [value, disabled, loading, onSubmit],\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLTextAreaElement>) => {\n // Enter submits; Shift+Enter inserts a newline (default behavior).\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n handleSubmit();\n }\n },\n [handleSubmit],\n );\n\n const variantStyles = {\n default: \"px-3 py-2.5\",\n minimal: \"px-3 py-2\",\n bordered: \"border rounded-lg px-3 py-2.5\",\n };\n\n const inputVariantStyles = {\n default: \"bg-transparent\",\n minimal: \"bg-transparent px-0\",\n bordered: \"bg-muted/50\",\n };\n\n return (\n <form\n onSubmit={handleSubmit}\n className={cn(variantStyles[variant], className)}\n >\n <div className=\"flex items-end gap-2\">\n {leftActions}\n\n <textarea\n ref={textareaRef}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n disabled={disabled || loading}\n autoFocus={autoFocus}\n rows={minRows}\n className={cn(\n \"flex-1 resize-none border-0 px-0 py-1 text-sm leading-5 shadow-none\",\n \"placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-0\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n inputVariantStyles[variant],\n inputClassName,\n )}\n />\n\n {rightActions}\n\n {showSendButton && (\n <Button\n type=\"submit\"\n size=\"sm\"\n variant={variant === \"minimal\" ? \"ghost\" : \"outline\"}\n disabled={!value.trim() || disabled || loading}\n className=\"size-8 shrink-0 p-0\"\n >\n {sendButtonContent || <SendIcon className=\"size-4\" />}\n </Button>\n )}\n </div>\n </form>\n );\n },\n);\n\nPromptInput.displayName = \"PromptInput\";\n","import * as React from 'react';\nimport { cn } from '../core/utils';\n\nconst Input = React.forwardRef<HTMLInputElement, React.ComponentProps<'input'>>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nInput.displayName = 'Input';\n\nexport { Input };\n","'use client';\n\nimport { type FormEvent, forwardRef, useCallback, useRef, type KeyboardEvent } from 'react';\nimport {\n SendIcon,\n PaperclipIcon,\n ImageIcon,\n MicIcon,\n XIcon,\n FileTextIcon,\n} from 'lucide-react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { Input } from '../../ui/input';\nimport { Button } from '../../ui/button';\nimport { cn, formatBytes } from '../../core/utils';\nimport type { Attachment, AttachmentType } from '../../core/types';\n\nexport interface MultimodalInputProps {\n /** Current input value */\n value: string;\n /** Value change handler */\n onChange: (value: string) => void;\n /** Submit handler */\n onSubmit: () => void;\n /** Current attachments */\n attachments?: Attachment[];\n /** Add attachment handler */\n onAddAttachment?: (file: File) => void;\n /** Remove attachment handler */\n onRemoveAttachment?: (id: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Disable input */\n disabled?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Show file button */\n showFileButton?: boolean;\n /** Show image button */\n showImageButton?: boolean;\n /** Show mic button */\n showMicButton?: boolean;\n /** Accepted file types */\n acceptedFileTypes?: string;\n /** Accepted image types */\n acceptedImageTypes?: string;\n /** Max file size in bytes */\n maxFileSize?: number;\n /** Container class */\n className?: string;\n}\n\nconst attachmentIcons: Record<AttachmentType, typeof FileTextIcon> = {\n image: ImageIcon,\n audio: MicIcon,\n video: FileTextIcon,\n document: FileTextIcon,\n file: PaperclipIcon,\n};\n\nexport const MultimodalInput = forwardRef<HTMLInputElement, MultimodalInputProps>(\n (\n {\n value,\n onChange,\n onSubmit,\n attachments = [],\n onAddAttachment,\n onRemoveAttachment,\n placeholder = 'Type a message or attach media...',\n disabled = false,\n loading = false,\n showFileButton = true,\n showImageButton = true,\n showMicButton = false,\n acceptedFileTypes = '.pdf,.doc,.docx,.txt,.csv,.xlsx',\n acceptedImageTypes = 'image/*',\n maxFileSize = 10 * 1024 * 1024, // 10MB\n className,\n },\n ref\n ) => {\n const fileInputRef = useRef<HTMLInputElement>(null);\n const imageInputRef = useRef<HTMLInputElement>(null);\n\n const handleSubmit = useCallback(\n (e: FormEvent) => {\n e.preventDefault();\n if ((!value.trim() && attachments.length === 0) || disabled || loading) return;\n onSubmit();\n },\n [value, attachments.length, disabled, loading, onSubmit]\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSubmit(e as unknown as FormEvent);\n }\n },\n [handleSubmit]\n );\n\n const handleFileChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files;\n if (!files || !onAddAttachment) return;\n\n Array.from(files).forEach((file) => {\n if (file.size <= maxFileSize) {\n onAddAttachment(file);\n }\n });\n\n // Reset input\n e.target.value = '';\n },\n [onAddAttachment, maxFileSize]\n );\n\n return (\n <div className={cn('border-t', className)}>\n {/* Attachment previews */}\n <AnimatePresence>\n {attachments.length > 0 && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n className=\"overflow-hidden border-b px-3 py-2\"\n >\n <div className=\"flex flex-wrap gap-2\">\n {attachments.map((attachment) => {\n const Icon = attachmentIcons[attachment.type];\n return (\n <motion.div\n key={attachment.id}\n initial={{ scale: 0.8, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0.8, opacity: 0 }}\n className=\"flex items-center gap-2 rounded-md border bg-muted/30 px-2 py-1.5\"\n >\n <div className=\"flex size-6 items-center justify-center rounded bg-muted\">\n <Icon className=\"size-3 text-muted-foreground\" />\n </div>\n <div className=\"min-w-0 max-w-[120px]\">\n <p className=\"truncate text-xs font-medium\">{attachment.name}</p>\n {attachment.size && (\n <p className=\"text-[10px] text-muted-foreground\">\n {formatBytes(attachment.size)}\n </p>\n )}\n </div>\n {onRemoveAttachment && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"size-5 p-0 text-muted-foreground hover:text-foreground\"\n onClick={() => onRemoveAttachment(attachment.id)}\n >\n <XIcon className=\"size-3\" />\n </Button>\n )}\n </motion.div>\n );\n })}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n\n {/* Input row */}\n <form onSubmit={handleSubmit} className=\"px-3 py-2.5\">\n <div className=\"flex items-center gap-2\">\n {/* Action buttons */}\n <div className=\"flex items-center gap-0.5\">\n {showFileButton && onAddAttachment && (\n <>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"size-8 p-0 text-muted-foreground hover:text-foreground\"\n onClick={() => fileInputRef.current?.click()}\n disabled={disabled || loading}\n >\n <PaperclipIcon className=\"size-4\" />\n </Button>\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={acceptedFileTypes}\n onChange={handleFileChange}\n className=\"hidden\"\n multiple\n />\n </>\n )}\n\n {showImageButton && onAddAttachment && (\n <>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"size-8 p-0 text-muted-foreground hover:text-foreground\"\n onClick={() => imageInputRef.current?.click()}\n disabled={disabled || loading}\n >\n <ImageIcon className=\"size-4\" />\n </Button>\n <input\n ref={imageInputRef}\n type=\"file\"\n accept={acceptedImageTypes}\n onChange={handleFileChange}\n className=\"hidden\"\n multiple\n />\n </>\n )}\n\n {showMicButton && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"size-8 p-0 text-muted-foreground hover:text-foreground\"\n disabled={disabled || loading}\n >\n <MicIcon className=\"size-4\" />\n </Button>\n )}\n </div>\n\n {/* Text input */}\n <Input\n ref={ref}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n disabled={disabled || loading}\n className=\"h-9 flex-1 border-0 bg-transparent shadow-none focus-visible:ring-0\"\n />\n\n {/* Send button */}\n <Button\n type=\"submit\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"size-8 shrink-0 p-0\"\n disabled={(!value.trim() && attachments.length === 0) || disabled || loading}\n >\n <SendIcon className=\"size-4\" />\n </Button>\n </div>\n </form>\n </div>\n );\n }\n);\n\nMultimodalInput.displayName = 'MultimodalInput';\n","'use client';\n\nimport { cn } from '../../core/utils';\nimport type { QuickReply } from '../../core/types';\n\nexport interface QuickRepliesProps {\n /** Available quick replies */\n replies: QuickReply[];\n /** Click handler */\n onSelect: (reply: QuickReply) => void;\n /** Disable interactions */\n disabled?: boolean;\n /** Container class */\n className?: string;\n /** Pill variant */\n variant?: 'default' | 'outline' | 'filled';\n /** Size */\n size?: 'sm' | 'md';\n}\n\nexport function QuickReplies({\n replies,\n onSelect,\n disabled = false,\n className,\n variant = 'outline',\n size = 'sm',\n}: QuickRepliesProps) {\n if (replies.length === 0) return null;\n\n const variantStyles = {\n default:\n 'border bg-muted/30 hover:bg-muted/60 hover:text-foreground text-muted-foreground',\n outline:\n 'border hover:bg-muted/50 hover:text-foreground text-muted-foreground',\n filled:\n 'bg-muted hover:bg-muted/80 text-foreground',\n };\n\n const sizeStyles = {\n sm: 'px-2.5 py-1 text-[10px]',\n md: 'px-3 py-1.5 text-xs',\n };\n\n return (\n <div className={cn('flex flex-wrap gap-1.5', className)}>\n {replies.map((reply) => (\n <button\n key={reply.id}\n type=\"button\"\n onClick={() => onSelect(reply)}\n disabled={disabled}\n className={cn(\n 'shrink-0 rounded-full transition-colors disabled:opacity-50 disabled:cursor-not-allowed',\n variantStyles[variant],\n sizeStyles[size]\n )}\n >\n {reply.label}\n </button>\n ))}\n </div>\n );\n}\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../core/utils';\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n {\n variants: {\n variant: {\n default: \"border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80\",\n secondary: \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive: \"border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80\",\n outline: \"text-foreground\",\n success: \"border-transparent bg-emerald-500/10 text-emerald-600 dark:text-emerald-400\",\n warning: \"border-transparent bg-amber-500/10 text-amber-600 dark:text-amber-400\",\n error: \"border-transparent bg-red-500/10 text-red-600 dark:text-red-400\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n );\n}\n\nexport { Badge, badgeVariants };\n","'use client';\n\nimport { useState, useCallback, useMemo } from 'react';\nimport { SearchIcon, XIcon } from 'lucide-react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { Input } from '../../ui/input';\nimport { Button } from '../../ui/button';\nimport { Badge } from '../../ui/badge';\nimport { cn } from '../../core/utils';\nimport type { PromptTemplate } from '../../core/types';\n\nexport interface TemplateSelectorProps {\n /** Available templates */\n templates: PromptTemplate[];\n /** Template selection handler */\n onSelect: (template: PromptTemplate, variables?: Record<string, string>) => void;\n /** Optional category filter */\n categories?: string[];\n /** Show search */\n showSearch?: boolean;\n /** Container class */\n className?: string;\n /** Variant */\n variant?: 'grid' | 'list';\n}\n\nexport function TemplateSelector({\n templates,\n onSelect,\n categories,\n showSearch = true,\n className,\n variant = 'grid',\n}: TemplateSelectorProps) {\n const [search, setSearch] = useState('');\n const [selectedCategory, setSelectedCategory] = useState<string | null>(null);\n const [selectedTemplate, setSelectedTemplate] = useState<PromptTemplate | null>(null);\n const [variables, setVariables] = useState<Record<string, string>>({});\n\n // Extract unique categories from templates\n const allCategories = useMemo(() => {\n if (categories) return categories;\n const cats = new Set<string>();\n templates.forEach((t) => {\n if (t.category) cats.add(t.category);\n });\n return Array.from(cats);\n }, [templates, categories]);\n\n // Filter templates\n const filteredTemplates = useMemo(() => {\n return templates.filter((t) => {\n const matchesSearch =\n !search ||\n t.title.toLowerCase().includes(search.toLowerCase()) ||\n t.description?.toLowerCase().includes(search.toLowerCase());\n const matchesCategory = !selectedCategory || t.category === selectedCategory;\n return matchesSearch && matchesCategory;\n });\n }, [templates, search, selectedCategory]);\n\n const handleTemplateClick = useCallback((template: PromptTemplate) => {\n if (template.variables && template.variables.length > 0) {\n setSelectedTemplate(template);\n // Initialize variables with defaults\n const defaults: Record<string, string> = {};\n template.variables.forEach((v) => {\n if (v.defaultValue) defaults[v.name] = v.defaultValue;\n });\n setVariables(defaults);\n } else {\n onSelect(template);\n }\n }, [onSelect]);\n\n const handleVariableSubmit = useCallback(() => {\n if (!selectedTemplate) return;\n onSelect(selectedTemplate, variables);\n setSelectedTemplate(null);\n setVariables({});\n }, [selectedTemplate, variables, onSelect]);\n\n const handleVariableCancel = useCallback(() => {\n setSelectedTemplate(null);\n setVariables({});\n }, []);\n\n return (\n <div className={cn('flex flex-col gap-3', className)}>\n {/* Search and categories */}\n <div className=\"flex flex-col gap-2\">\n {showSearch && (\n <div className=\"relative\">\n <SearchIcon className=\"absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search templates...\"\n className=\"h-8 pl-8 text-sm\"\n />\n {search && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"absolute right-1 top-1/2 size-6 -translate-y-1/2 p-0\"\n onClick={() => setSearch('')}\n >\n <XIcon className=\"size-3\" />\n </Button>\n )}\n </div>\n )}\n\n {allCategories.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5\">\n <Badge\n variant={selectedCategory === null ? 'default' : 'outline'}\n className=\"cursor-pointer text-[10px]\"\n onClick={() => setSelectedCategory(null)}\n >\n All\n </Badge>\n {allCategories.map((cat) => (\n <Badge\n key={cat}\n variant={selectedCategory === cat ? 'default' : 'outline'}\n className=\"cursor-pointer text-[10px]\"\n onClick={() => setSelectedCategory(cat)}\n >\n {cat}\n </Badge>\n ))}\n </div>\n )}\n </div>\n\n {/* Template grid/list */}\n <AnimatePresence mode=\"wait\">\n {selectedTemplate ? (\n // Variable input form\n <motion.div\n key=\"variables\"\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -8 }}\n className=\"flex flex-col gap-3 rounded-lg border bg-muted/30 p-3\"\n >\n <div>\n <h4 className=\"font-medium text-sm\">{selectedTemplate.title}</h4>\n {selectedTemplate.description && (\n <p className=\"mt-0.5 text-muted-foreground text-xs\">\n {selectedTemplate.description}\n </p>\n )}\n </div>\n\n {selectedTemplate.variables?.map((variable) => (\n <div key={variable.name} className=\"flex flex-col gap-1\">\n <label className=\"text-xs font-medium\">\n {variable.label}\n {variable.required && <span className=\"text-red-500 ml-0.5\">*</span>}\n </label>\n {variable.type === 'select' && variable.options ? (\n <select\n value={variables[variable.name] || ''}\n onChange={(e) =>\n setVariables((prev) => ({ ...prev, [variable.name]: e.target.value }))\n }\n className=\"h-8 rounded-md border bg-background px-2 text-sm\"\n >\n <option value=\"\">Select...</option>\n {variable.options.map((opt) => (\n <option key={opt} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n ) : (\n <Input\n type={variable.type === 'number' ? 'number' : 'text'}\n value={variables[variable.name] || ''}\n onChange={(e) =>\n setVariables((prev) => ({ ...prev, [variable.name]: e.target.value }))\n }\n placeholder={variable.placeholder}\n className=\"h-8 text-sm\"\n />\n )}\n </div>\n ))}\n\n <div className=\"flex items-center justify-end gap-2\">\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 text-xs\" onClick={handleVariableCancel}>\n Cancel\n </Button>\n <Button size=\"sm\" className=\"h-7 text-xs\" onClick={handleVariableSubmit}>\n Use Template\n </Button>\n </div>\n </motion.div>\n ) : (\n // Template list\n <motion.div\n key=\"list\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className={cn(\n variant === 'grid' ? 'grid grid-cols-2 gap-2' : 'flex flex-col gap-1'\n )}\n >\n {filteredTemplates.map((template, index) => (\n <motion.button\n key={template.id}\n type=\"button\"\n initial={{ opacity: 0, y: 4 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: index * 0.03 }}\n onClick={() => handleTemplateClick(template)}\n className={cn(\n 'text-left rounded-md border p-2.5 transition-colors hover:bg-muted/50',\n variant === 'list' && 'flex items-center gap-3'\n )}\n >\n <div className=\"min-w-0 flex-1\">\n <p className=\"font-medium text-xs truncate\">{template.title}</p>\n {template.description && variant === 'grid' && (\n <p className=\"mt-0.5 text-muted-foreground text-[10px] line-clamp-2\">\n {template.description}\n </p>\n )}\n </div>\n {template.category && variant === 'list' && (\n <Badge variant=\"secondary\" className=\"text-[10px] shrink-0\">\n {template.category}\n </Badge>\n )}\n </motion.button>\n ))}\n\n {filteredTemplates.length === 0 && (\n <p className=\"col-span-2 py-4 text-center text-muted-foreground text-xs\">\n No templates found\n </p>\n )}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n}\n","'use client';\n\nimport { forwardRef, useState, useCallback, useEffect, useRef } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { cn } from '../../core/utils';\nimport type { InlineSuggestion } from '../../core/types';\n\nexport interface InlineSuggestionsInputProps {\n /** Current input value */\n value: string;\n /** Value change handler */\n onChange: (value: string) => void;\n /** Get suggestions based on current input */\n getSuggestions?: (input: string) => InlineSuggestion[];\n /** Placeholder text */\n placeholder?: string;\n /** Disable input */\n disabled?: boolean;\n /** Container class */\n className?: string;\n /** Input class */\n inputClassName?: string;\n /** Debounce delay for suggestions */\n debounceMs?: number;\n}\n\nexport const InlineSuggestionsInput = forwardRef<HTMLInputElement, InlineSuggestionsInputProps>(\n (\n {\n value,\n onChange,\n getSuggestions,\n placeholder = 'Start typing...',\n disabled = false,\n className,\n inputClassName,\n debounceMs = 150,\n },\n ref\n ) => {\n const [suggestion, setSuggestion] = useState<InlineSuggestion | null>(null);\n const [showSuggestion, setShowSuggestion] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const combinedRef = (ref || inputRef) as React.RefObject<HTMLInputElement>;\n const debounceRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n // Update suggestions when value changes\n useEffect(() => {\n if (!getSuggestions || !value.trim()) {\n setSuggestion(null);\n setShowSuggestion(false);\n return;\n }\n\n // Clear previous timeout\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n\n // Debounce suggestion lookup\n debounceRef.current = setTimeout(() => {\n const suggestions = getSuggestions(value);\n if (suggestions.length > 0) {\n setSuggestion(suggestions[0]);\n setShowSuggestion(true);\n } else {\n setSuggestion(null);\n setShowSuggestion(false);\n }\n }, debounceMs);\n\n return () => {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n };\n }, [value, getSuggestions, debounceMs]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Tab' && suggestion && showSuggestion) {\n e.preventDefault();\n onChange(suggestion.completion);\n setShowSuggestion(false);\n } else if (e.key === 'Escape' && showSuggestion) {\n setShowSuggestion(false);\n }\n },\n [suggestion, showSuggestion, onChange]\n );\n\n // Calculate ghost text (the part that extends beyond current input)\n const ghostText =\n suggestion && showSuggestion && suggestion.completion.startsWith(value)\n ? suggestion.completion.slice(value.length)\n : '';\n\n return (\n <div className={cn('relative', className)}>\n {/* Ghost text layer */}\n <div className=\"pointer-events-none absolute inset-0 flex items-center overflow-hidden\">\n <span className=\"invisible whitespace-pre text-sm\">{value}</span>\n <AnimatePresence>\n {ghostText && (\n <motion.span\n initial={{ opacity: 0 }}\n animate={{ opacity: 0.4 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.15 }}\n className=\"whitespace-pre text-sm text-muted-foreground\"\n >\n {ghostText}\n </motion.span>\n )}\n </AnimatePresence>\n </div>\n\n {/* Actual input */}\n <input\n ref={combinedRef}\n type=\"text\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={handleKeyDown}\n onBlur={() => setShowSuggestion(false)}\n onFocus={() => {\n if (suggestion) setShowSuggestion(true);\n }}\n placeholder={placeholder}\n disabled={disabled}\n className={cn(\n 'w-full bg-transparent text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50',\n inputClassName\n )}\n />\n\n {/* Tab hint */}\n <AnimatePresence>\n {ghostText && (\n <motion.div\n initial={{ opacity: 0, y: 4 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: 4 }}\n className=\"absolute -bottom-5 left-0 flex items-center gap-1\"\n >\n <kbd className=\"rounded border bg-muted px-1 py-0.5 font-mono text-[9px] text-muted-foreground\">\n Tab\n </kbd>\n <span className=\"text-[10px] text-muted-foreground\">to accept</span>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n }\n);\n\nInlineSuggestionsInput.displayName = 'InlineSuggestionsInput';\n","'use client';\n\nimport { useCallback, useState, useRef, type DragEvent } from 'react';\nimport { UploadIcon, XIcon, FileIcon, ImageIcon, FileTextIcon } from 'lucide-react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { Button } from '../../ui/button';\nimport { cn, formatBytes, generateId } from '../../core/utils';\nimport type { Attachment, AttachmentType } from '../../core/types';\n\nexport interface FileDropZoneProps {\n /** Current files */\n files?: Attachment[];\n /** Add files handler */\n onAddFiles?: (files: Attachment[]) => void;\n /** Remove file handler */\n onRemoveFile?: (id: string) => void;\n /** Accepted file types (e.g., \"image/*,.pdf\") */\n accept?: string;\n /** Max file size in bytes */\n maxFileSize?: number;\n /** Max number of files */\n maxFiles?: number;\n /** Disable interactions */\n disabled?: boolean;\n /** Container class */\n className?: string;\n /** Variant */\n variant?: 'compact' | 'full';\n}\n\nfunction getAttachmentType(file: File): AttachmentType {\n if (file.type.startsWith('image/')) return 'image';\n if (file.type.startsWith('audio/')) return 'audio';\n if (file.type.startsWith('video/')) return 'video';\n if (file.type.includes('pdf') || file.type.includes('document')) return 'document';\n return 'file';\n}\n\nconst fileIcons: Record<AttachmentType, typeof FileIcon> = {\n image: ImageIcon,\n audio: FileIcon,\n video: FileIcon,\n document: FileTextIcon,\n file: FileIcon,\n};\n\nexport function FileDropZone({\n files = [],\n onAddFiles,\n onRemoveFile,\n accept,\n maxFileSize = 10 * 1024 * 1024, // 10MB\n maxFiles = 5,\n disabled = false,\n className,\n variant = 'full',\n}: FileDropZoneProps) {\n const [isDragOver, setIsDragOver] = useState(false);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const processFiles = useCallback(\n (fileList: FileList) => {\n if (!onAddFiles) return;\n\n const newAttachments: Attachment[] = [];\n const currentCount = files.length;\n const remainingSlots = maxFiles - currentCount;\n\n Array.from(fileList)\n .slice(0, remainingSlots)\n .forEach((file) => {\n if (file.size <= maxFileSize) {\n newAttachments.push({\n id: generateId('file'),\n type: getAttachmentType(file),\n name: file.name,\n size: file.size,\n sizeLabel: formatBytes(file.size),\n mimeType: file.type,\n url: URL.createObjectURL(file),\n });\n }\n });\n\n if (newAttachments.length > 0) {\n onAddFiles(newAttachments);\n }\n },\n [files.length, maxFiles, maxFileSize, onAddFiles]\n );\n\n const handleDragOver = useCallback((e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragOver(true);\n }, []);\n\n const handleDragLeave = useCallback((e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragOver(false);\n }, []);\n\n const handleDrop = useCallback(\n (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragOver(false);\n\n if (disabled) return;\n if (e.dataTransfer.files) {\n processFiles(e.dataTransfer.files);\n }\n },\n [disabled, processFiles]\n );\n\n const handleFileSelect = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.files) {\n processFiles(e.target.files);\n }\n e.target.value = '';\n },\n [processFiles]\n );\n\n const canAddMore = files.length < maxFiles;\n\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n {/* Drop zone */}\n {(variant === 'full' || files.length === 0) && (\n <div\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n onClick={() => !disabled && canAddMore && fileInputRef.current?.click()}\n className={cn(\n 'flex flex-col items-center justify-center gap-2 rounded-lg border-2 border-dashed p-4 transition-colors cursor-pointer',\n isDragOver && 'border-primary bg-primary/5',\n !isDragOver && 'border-muted-foreground/25 hover:border-muted-foreground/50',\n disabled && 'opacity-50 cursor-not-allowed',\n !canAddMore && 'opacity-50 cursor-not-allowed'\n )}\n >\n <UploadIcon className=\"size-6 text-muted-foreground\" />\n <div className=\"text-center\">\n <p className=\"text-sm font-medium\">\n {isDragOver ? 'Drop files here' : 'Drop files or click to upload'}\n </p>\n <p className=\"text-xs text-muted-foreground mt-0.5\">\n Max {formatBytes(maxFileSize)} per file, up to {maxFiles} files\n </p>\n </div>\n </div>\n )}\n\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={accept}\n onChange={handleFileSelect}\n className=\"hidden\"\n multiple={maxFiles > 1}\n disabled={disabled || !canAddMore}\n />\n\n {/* File list */}\n <AnimatePresence>\n {files.length > 0 && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n className=\"flex flex-col gap-1.5\"\n >\n {files.map((file) => {\n const Icon = fileIcons[file.type];\n return (\n <motion.div\n key={file.id}\n initial={{ opacity: 0, x: -8 }}\n animate={{ opacity: 1, x: 0 }}\n exit={{ opacity: 0, x: 8 }}\n className=\"flex items-center gap-2 rounded-md border bg-muted/30 px-2.5 py-2\"\n >\n <div className=\"flex size-8 shrink-0 items-center justify-center rounded bg-muted\">\n <Icon className=\"size-4 text-muted-foreground\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-sm font-medium\">{file.name}</p>\n <p className=\"text-xs text-muted-foreground\">\n {file.sizeLabel || (file.size ? formatBytes(file.size) : '')}\n </p>\n </div>\n {onRemoveFile && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"size-6 p-0 text-muted-foreground hover:text-foreground\"\n onClick={() => onRemoveFile(file.id)}\n disabled={disabled}\n >\n <XIcon className=\"size-3\" />\n </Button>\n )}\n </motion.div>\n );\n })}\n </motion.div>\n )}\n </AnimatePresence>\n\n {/* Add more button (compact variant) */}\n {variant === 'compact' && files.length > 0 && canAddMore && (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 text-xs\"\n onClick={() => fileInputRef.current?.click()}\n disabled={disabled}\n >\n <UploadIcon className=\"size-3 mr-1\" />\n Add more files\n </Button>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useMemo, useState } from 'react';\nimport { motion } from 'motion/react';\nimport { SearchIcon } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Badge } from '../../ui/badge';\n\nexport interface LibraryPrompt {\n id: string;\n title: string;\n prompt: string;\n description?: string;\n category?: string;\n tags?: string[];\n}\n\nexport interface PromptLibraryProps {\n prompts: LibraryPrompt[];\n /** Fired when a prompt is chosen. */\n onSelect?: (prompt: LibraryPrompt) => void;\n /** Enable the search box. */\n searchable?: boolean;\n /** Enable category filter chips. */\n filterByCategory?: boolean;\n className?: string;\n}\n\nexport function PromptLibrary({\n prompts,\n onSelect,\n searchable = true,\n filterByCategory = true,\n className,\n}: PromptLibraryProps) {\n const [query, setQuery] = useState('');\n const [activeCategory, setActiveCategory] = useState<string | null>(null);\n\n const categories = useMemo(() => {\n const set = new Set<string>();\n prompts.forEach((p) => p.category && set.add(p.category));\n return Array.from(set);\n }, [prompts]);\n\n const filtered = useMemo(() => {\n const q = query.trim().toLowerCase();\n return prompts.filter((p) => {\n const matchesCategory = !activeCategory || p.category === activeCategory;\n const matchesQuery =\n !q ||\n p.title.toLowerCase().includes(q) ||\n p.prompt.toLowerCase().includes(q) ||\n p.description?.toLowerCase().includes(q) ||\n p.tags?.some((t) => t.toLowerCase().includes(q));\n return matchesCategory && matchesQuery;\n });\n }, [prompts, query, activeCategory]);\n\n return (\n <div className={cn('flex flex-col rounded-lg border bg-card', className)}>\n {searchable && (\n <div className=\"flex items-center gap-2 border-b px-3 py-2\">\n <SearchIcon className=\"size-4 text-muted-foreground\" />\n <input\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder=\"Search prompts...\"\n className=\"flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground\"\n />\n </div>\n )}\n\n {filterByCategory && categories.length > 0 && (\n <div className=\"flex gap-1.5 overflow-x-auto border-b px-3 py-2\">\n <button\n type=\"button\"\n onClick={() => setActiveCategory(null)}\n className={cn(\n 'shrink-0 rounded-full px-2.5 py-1 text-xs transition-colors',\n activeCategory === null ? 'bg-foreground text-background' : 'bg-muted text-muted-foreground'\n )}\n >\n All\n </button>\n {categories.map((cat) => (\n <button\n key={cat}\n type=\"button\"\n onClick={() => setActiveCategory(cat)}\n className={cn(\n 'shrink-0 rounded-full px-2.5 py-1 text-xs transition-colors',\n activeCategory === cat ? 'bg-foreground text-background' : 'bg-muted text-muted-foreground'\n )}\n >\n {cat}\n </button>\n ))}\n </div>\n )}\n\n <div className=\"max-h-80 overflow-y-auto p-2\">\n {filtered.length === 0 ? (\n <p className=\"p-4 text-center text-sm text-muted-foreground\">No prompts found</p>\n ) : (\n <div className=\"space-y-1\">\n {filtered.map((prompt, index) => (\n <motion.button\n key={prompt.id}\n type=\"button\"\n initial={{ opacity: 0, y: 6 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: index * 0.03 }}\n onClick={() => onSelect?.(prompt)}\n className=\"flex w-full flex-col gap-1 rounded-md p-3 text-left transition-colors hover:bg-muted/40\"\n >\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium\">{prompt.title}</span>\n {prompt.category && (\n <Badge variant=\"secondary\" className=\"ml-auto text-[10px] font-normal\">\n {prompt.category}\n </Badge>\n )}\n </div>\n {prompt.description && (\n <p className=\"text-xs text-muted-foreground line-clamp-2\">{prompt.description}</p>\n )}\n </motion.button>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport default PromptLibrary;\n","'use client';\n\nimport { motion, AnimatePresence } from 'motion/react';\nimport { UserCircleIcon } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Badge } from '../../ui/badge';\nimport type { AgentPersona } from '../../core/types';\n\nexport interface PersonaSelectorProps {\n /** Available personas to choose from. */\n personas: AgentPersona[];\n /** Currently selected persona id (controlled). */\n selectedId?: string;\n /** Selection handler. */\n onSelect?: (persona: AgentPersona) => void;\n /** Show the selected persona's system prompt preview. */\n showSystemPrompt?: boolean;\n /** Render personas as a horizontal row instead of a list. */\n orientation?: 'vertical' | 'horizontal';\n /** Optional icon resolver for a persona (defaults to a user icon). */\n renderIcon?: (persona: AgentPersona) => React.ReactNode;\n className?: string;\n}\n\nexport function PersonaSelector({\n personas,\n selectedId,\n onSelect,\n showSystemPrompt = false,\n orientation = 'vertical',\n renderIcon,\n className,\n}: PersonaSelectorProps) {\n const selected = personas.find((p) => p.id === selectedId) ?? personas[0];\n\n return (\n <div className={cn('rounded-lg border bg-card', className)}>\n <div className=\"px-4 pt-4 pb-2\">\n <span className=\"text-xs font-medium text-muted-foreground\">Choose a persona</span>\n </div>\n <div\n className={cn(\n 'gap-1 px-3 pb-3',\n orientation === 'vertical' ? 'flex flex-col' : 'flex overflow-x-auto'\n )}\n >\n {personas.map((persona, index) => {\n const isSelected = selected?.id === persona.id;\n return (\n <motion.button\n key={persona.id}\n type=\"button\"\n initial={{ opacity: 0, x: -8 }}\n animate={{ opacity: 1, x: 0 }}\n transition={{ duration: 0.15, delay: index * 0.05 }}\n onClick={() => onSelect?.(persona)}\n className={cn(\n 'flex w-full flex-col gap-2 rounded-md p-3 text-left transition-colors',\n orientation === 'horizontal' && 'min-w-[200px]',\n isSelected ? 'bg-muted/60 ring-1 ring-foreground/10' : 'hover:bg-muted/30'\n )}\n >\n <div className=\"flex items-center gap-2\">\n <span className=\"flex size-6 items-center justify-center rounded-md bg-muted text-muted-foreground\">\n {renderIcon ? renderIcon(persona) : <UserCircleIcon className=\"size-3.5\" />}\n </span>\n <span className=\"text-sm font-medium\">{persona.name}</span>\n {isSelected && <span className=\"ml-auto size-1.5 rounded-full bg-emerald-500\" />}\n </div>\n <p className=\"text-[11px] leading-snug text-muted-foreground line-clamp-2\">\n {persona.description}\n </p>\n {persona.capabilities && persona.capabilities.length > 0 && (\n <div className=\"flex flex-wrap gap-1\">\n {persona.capabilities.map((cap) => (\n <Badge key={cap} variant=\"secondary\" className=\"h-4 px-1 text-[9px] font-normal\">\n {cap}\n </Badge>\n ))}\n </div>\n )}\n </motion.button>\n );\n })}\n </div>\n\n {showSystemPrompt && selected?.systemPrompt && (\n <div className=\"border-t px-4 py-3\">\n <span className=\"mb-1.5 block text-[10px] font-medium text-muted-foreground\">\n System prompt\n </span>\n <AnimatePresence mode=\"wait\">\n <motion.p\n key={selected.id}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.15 }}\n className=\"text-[11px] leading-snug text-muted-foreground line-clamp-3\"\n >\n {selected.systemPrompt}\n </motion.p>\n </AnimatePresence>\n </div>\n )}\n </div>\n );\n}\n\nexport default PersonaSelector;\n","'use client';\n\nimport * as React from 'react';\nimport * as AvatarPrimitive from '@radix-ui/react-avatar';\nimport { cn } from '../core/utils';\n\nconst Avatar = React.forwardRef<\n React.ComponentRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n \"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full\",\n className\n )}\n {...props}\n />\n));\nAvatar.displayName = AvatarPrimitive.Root.displayName;\n\nconst AvatarImage = React.forwardRef<\n React.ComponentRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn(\"aspect-square h-full w-full\", className)}\n {...props}\n />\n));\nAvatarImage.displayName = AvatarPrimitive.Image.displayName;\n\nconst AvatarFallback = React.forwardRef<\n React.ComponentRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n \"flex h-full w-full items-center justify-center rounded-full bg-muted\",\n className\n )}\n {...props}\n />\n));\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;\n\nexport { Avatar, AvatarImage, AvatarFallback };\n","'use client';\n\nimport { motion } from 'motion/react';\nimport { cn } from '../../core/utils';\nimport { Button } from '../../ui/button';\nimport { Badge } from '../../ui/badge';\nimport { Avatar, AvatarImage, AvatarFallback } from '../../ui/avatar';\nimport { getInitials } from '../../core/utils';\n\nexport interface EntityField {\n label: string;\n value: string;\n icon?: React.ReactNode;\n}\n\nexport interface EntityAction {\n id: string;\n label: string;\n icon?: React.ReactNode;\n variant?: 'default' | 'outline' | 'secondary' | 'ghost';\n onClick?: () => void;\n}\n\nexport interface EntityCardData {\n id: string;\n /** Primary title (name of the person/place/item). */\n title: string;\n /** Secondary line under the title. */\n subtitle?: string;\n /** Avatar/image URL. */\n imageUrl?: string;\n /** Short descriptive text. */\n description?: string;\n /** Tags/labels. */\n tags?: string[];\n /** Structured key/value fields. */\n fields?: EntityField[];\n /** Optional status badge. */\n status?: { label: string; tone?: 'neutral' | 'positive' | 'warning' | 'negative' };\n}\n\nexport interface EntityCardProps {\n entity: EntityCardData;\n /** Actions rendered in the card footer. */\n actions?: EntityAction[];\n /** Card click handler. */\n onClick?: (entity: EntityCardData) => void;\n /** Compact layout. */\n compact?: boolean;\n className?: string;\n}\n\nconst toneClasses: Record<string, string> = {\n neutral: 'bg-muted text-muted-foreground',\n positive: 'bg-emerald-500/10 text-emerald-600',\n warning: 'bg-amber-500/10 text-amber-600',\n negative: 'bg-red-500/10 text-red-600',\n};\n\nexport function EntityCard({ entity, actions, onClick, compact, className }: EntityCardProps) {\n return (\n <motion.div\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.2 }}\n onClick={onClick ? () => onClick(entity) : undefined}\n className={cn(\n 'rounded-lg border bg-card p-4',\n onClick && 'cursor-pointer transition-colors hover:bg-muted/30',\n className\n )}\n >\n <div className=\"flex items-start gap-3\">\n <Avatar className={cn(compact ? 'size-9' : 'size-11')}>\n {entity.imageUrl && <AvatarImage src={entity.imageUrl} alt={entity.title} />}\n <AvatarFallback>{getInitials(entity.title)}</AvatarFallback>\n </Avatar>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <h4 className=\"truncate font-medium text-sm\">{entity.title}</h4>\n {entity.status && (\n <Badge className={cn('text-[10px]', toneClasses[entity.status.tone ?? 'neutral'])}>\n {entity.status.label}\n </Badge>\n )}\n </div>\n {entity.subtitle && (\n <p className=\"truncate text-xs text-muted-foreground\">{entity.subtitle}</p>\n )}\n </div>\n </div>\n\n {entity.description && !compact && (\n <p className=\"mt-3 text-sm text-muted-foreground\">{entity.description}</p>\n )}\n\n {entity.fields && entity.fields.length > 0 && !compact && (\n <div className=\"mt-3 space-y-1.5\">\n {entity.fields.map((field) => (\n <div key={field.label} className=\"flex items-center gap-2 text-xs\">\n {field.icon && <span className=\"text-muted-foreground\">{field.icon}</span>}\n <span className=\"text-muted-foreground\">{field.label}:</span>\n <span className=\"font-medium\">{field.value}</span>\n </div>\n ))}\n </div>\n )}\n\n {entity.tags && entity.tags.length > 0 && (\n <div className=\"mt-3 flex flex-wrap gap-1\">\n {entity.tags.map((tag) => (\n <Badge key={tag} variant=\"secondary\" className=\"text-[10px] font-normal\">\n {tag}\n </Badge>\n ))}\n </div>\n )}\n\n {actions && actions.length > 0 && (\n <div className=\"mt-4 flex flex-wrap gap-2\">\n {actions.map((action) => (\n <Button\n key={action.id}\n size=\"sm\"\n variant={action.variant ?? 'outline'}\n className=\"h-7 gap-1.5 text-xs\"\n onClick={(e) => {\n e.stopPropagation();\n action.onClick?.();\n }}\n >\n {action.icon}\n {action.label}\n </Button>\n ))}\n </div>\n )}\n </motion.div>\n );\n}\n\nexport default EntityCard;\n","'use client';\n\nimport { motion } from 'motion/react';\nimport { CheckIcon } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Button } from '../../ui/button';\nimport { Badge } from '../../ui/badge';\n\nexport interface OptionCardItem {\n id: string;\n title: string;\n description?: string;\n imageUrl?: string;\n /** Optional headline value (price, score, rating, etc.). */\n value?: string;\n /** Highlight chips. */\n highlights?: string[];\n /** Mark as recommended/featured. */\n recommended?: boolean;\n /** Disable selection. */\n disabled?: boolean;\n}\n\nexport interface OptionCardsProps {\n options: OptionCardItem[];\n /** Selected option id(s). */\n selectedIds?: string[];\n /** Allow selecting more than one. */\n multiple?: boolean;\n /** Selection handler. */\n onSelect?: (id: string, selectedIds: string[]) => void;\n /** Label for the per-card action button. */\n actionLabel?: string;\n /** Per-card action handler (renders a button when provided). */\n onAction?: (option: OptionCardItem) => void;\n /** Layout columns. */\n columns?: 1 | 2 | 3;\n className?: string;\n}\n\nexport function OptionCards({\n options,\n selectedIds = [],\n multiple = false,\n onSelect,\n actionLabel,\n onAction,\n columns = 2,\n className,\n}: OptionCardsProps) {\n const gridCols = { 1: 'grid-cols-1', 2: 'grid-cols-1 sm:grid-cols-2', 3: 'grid-cols-1 sm:grid-cols-3' };\n\n const handleSelect = (id: string) => {\n let next: string[];\n if (multiple) {\n next = selectedIds.includes(id)\n ? selectedIds.filter((s) => s !== id)\n : [...selectedIds, id];\n } else {\n next = [id];\n }\n onSelect?.(id, next);\n };\n\n return (\n <div className={cn('grid gap-3', gridCols[columns], className)}>\n {options.map((option, index) => {\n const isSelected = selectedIds.includes(option.id);\n return (\n <motion.div\n key={option.id}\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: index * 0.05 }}\n onClick={() => !option.disabled && onSelect && handleSelect(option.id)}\n className={cn(\n 'relative flex flex-col rounded-lg border bg-card p-4 transition-colors',\n onSelect && !option.disabled && 'cursor-pointer hover:bg-muted/30',\n isSelected && 'border-foreground ring-1 ring-foreground/20',\n option.disabled && 'opacity-50'\n )}\n >\n {option.recommended && (\n <Badge className=\"absolute -top-2 left-3 bg-foreground text-background text-[10px]\">\n Recommended\n </Badge>\n )}\n {isSelected && (\n <span className=\"absolute right-3 top-3 flex size-5 items-center justify-center rounded-full bg-foreground text-background\">\n <CheckIcon className=\"size-3\" />\n </span>\n )}\n {option.imageUrl && (\n <img\n src={option.imageUrl}\n alt={option.title}\n className=\"mb-3 h-28 w-full rounded-md object-cover\"\n />\n )}\n <div className=\"flex items-start justify-between gap-2\">\n <h4 className=\"font-medium text-sm\">{option.title}</h4>\n {option.value && <span className=\"font-semibold text-sm\">{option.value}</span>}\n </div>\n {option.description && (\n <p className=\"mt-1 text-xs text-muted-foreground\">{option.description}</p>\n )}\n {option.highlights && option.highlights.length > 0 && (\n <div className=\"mt-2 flex flex-wrap gap-1\">\n {option.highlights.map((h) => (\n <Badge key={h} variant=\"secondary\" className=\"text-[10px] font-normal\">\n {h}\n </Badge>\n ))}\n </div>\n )}\n {onAction && actionLabel && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"mt-3 h-7 text-xs\"\n disabled={option.disabled}\n onClick={(e) => {\n e.stopPropagation();\n onAction(option);\n }}\n >\n {actionLabel}\n </Button>\n )}\n </motion.div>\n );\n })}\n </div>\n );\n}\n\nexport default OptionCards;\n","'use client';\n\nimport { cn } from '../../core/utils';\n\nexport type SettingControlType = 'toggle' | 'select' | 'radio';\n\nexport interface SettingControl {\n id: string;\n label: string;\n description?: string;\n type: SettingControlType;\n /** Current value: boolean for toggle, string for select/radio. */\n value: boolean | string;\n /** Options for select/radio. */\n options?: Array<{ label: string; value: string }>;\n disabled?: boolean;\n}\n\nexport interface SettingsGroup {\n id: string;\n title?: string;\n description?: string;\n controls: SettingControl[];\n}\n\nexport interface SettingsPanelProps {\n groups: SettingsGroup[];\n /** Change handler: emits the control id and its new value. */\n onChange?: (controlId: string, value: boolean | string) => void;\n className?: string;\n}\n\nfunction Toggle({\n checked,\n disabled,\n onChange,\n}: {\n checked: boolean;\n disabled?: boolean;\n onChange: () => void;\n}) {\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n disabled={disabled}\n onClick={onChange}\n className={cn(\n 'relative inline-flex h-5 w-9 shrink-0 items-center rounded-full transition-colors disabled:opacity-50',\n checked ? 'bg-foreground' : 'bg-muted-foreground/30'\n )}\n >\n <span\n className={cn(\n 'inline-block size-4 rounded-full bg-background shadow transition-transform',\n checked ? 'translate-x-4' : 'translate-x-0.5'\n )}\n />\n </button>\n );\n}\n\nexport function SettingsPanel({ groups, onChange, className }: SettingsPanelProps) {\n return (\n <div className={cn('rounded-lg border bg-card divide-y', className)}>\n {groups.map((group) => (\n <div key={group.id} className=\"p-4\">\n {group.title && <h4 className=\"font-medium text-sm\">{group.title}</h4>}\n {group.description && (\n <p className=\"mt-0.5 text-xs text-muted-foreground\">{group.description}</p>\n )}\n <div className=\"mt-3 space-y-3\">\n {group.controls.map((control) => (\n <div key={control.id} className=\"flex items-center justify-between gap-4\">\n <div className=\"min-w-0\">\n <p className=\"text-sm\">{control.label}</p>\n {control.description && (\n <p className=\"text-xs text-muted-foreground\">{control.description}</p>\n )}\n </div>\n {control.type === 'toggle' && (\n <Toggle\n checked={Boolean(control.value)}\n disabled={control.disabled}\n onChange={() => onChange?.(control.id, !control.value)}\n />\n )}\n {(control.type === 'select' || control.type === 'radio') && control.options && (\n <select\n value={String(control.value)}\n disabled={control.disabled}\n onChange={(e) => onChange?.(control.id, e.target.value)}\n className=\"rounded-md border bg-background px-2 py-1 text-xs focus:outline-none focus:ring-1 focus:ring-ring disabled:opacity-50\"\n >\n {control.options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n )}\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n}\n\nexport default SettingsPanel;\n","'use client';\n\nimport { motion } from 'motion/react';\nimport {\n ArrowRightIcon,\n Loader2Icon,\n CheckCircle2Icon,\n SparklesIcon,\n} from 'lucide-react';\nimport { cn, getInitials } from '../../core/utils';\nimport { Button } from '../../ui/button';\nimport { Avatar, AvatarImage, AvatarFallback } from '../../ui/avatar';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\n/**\n * Lifecycle of an agent-to-agent handoff.\n * - 'connecting' → the target agent is being brought online / routed to.\n * - 'handed-off' → control has transferred to the target agent.\n * - 'active' → the target agent is now actively handling the request.\n */\nexport type HandoffStatus = 'connecting' | 'handed-off' | 'active';\n\n/** Visual presentation of a handoff. */\nexport type HandoffVariant =\n /** Simple A → B transition. */\n | 'direct'\n /** A → specialist B, foregrounding the routing reason. */\n | 'routing'\n /** Triage: route a request to one of several candidate agents. */\n | 'triage';\n\n/** A single agent participating in a handoff. Fully data-driven. */\nexport interface HandoffAgent {\n id: string;\n /** Display name. */\n name: string;\n /** Role / specialty line (e.g. \"Project Management\"). */\n specialty?: string;\n /** Avatar/thumbnail image URL. */\n avatarUrl?: string;\n}\n\n/** A candidate target in a triage handoff, with a match signal. */\nexport interface HandoffCandidate extends HandoffAgent {\n /** Why this candidate matches the request. */\n reason?: string;\n /** Optional 0–100 match/confidence used to mark + sort the selected one. */\n match?: number;\n /** Marks the candidate the request is being routed to. */\n selected?: boolean;\n}\n\nexport interface HandoffAction {\n id: string;\n label: string;\n variant?: 'primary' | 'secondary';\n onClick?: () => void;\n}\n\nexport interface AgentHandoffProps {\n /** Layout/semantics of the handoff. Defaults to 'direct'. */\n variant?: HandoffVariant;\n /** The agent handing the request off. */\n from: HandoffAgent;\n /**\n * The agent receiving the request. Required for 'direct'/'routing'. For\n * 'triage', omit and supply `candidates` instead (the selected candidate is\n * treated as the target).\n */\n to?: HandoffAgent;\n /** Candidate agents for a 'triage' handoff. */\n candidates?: HandoffCandidate[];\n /** Short reason/context line for the handoff. */\n reason?: string;\n /** Current handoff status. Defaults to 'connecting'. */\n status?: HandoffStatus;\n /** Optional action buttons (e.g. accept/continue). */\n actions?: HandoffAction[];\n className?: string;\n}\n\n// ============================================================================\n// HELPERS\n// ============================================================================\n\nconst STATUS_META: Record<\n HandoffStatus,\n { label: string; dotClass: string; textClass: string }\n> = {\n connecting: { label: 'Connecting…', dotClass: 'bg-amber-500 animate-pulse', textClass: 'text-amber-600' },\n 'handed-off': { label: 'Handed off', dotClass: 'bg-sky-500', textClass: 'text-sky-600' },\n active: { label: 'Active', dotClass: 'bg-emerald-500', textClass: 'text-emerald-600' },\n};\n\nfunction AgentBadge({\n agent,\n size = 'md',\n muted = false,\n}: {\n agent: HandoffAgent;\n size?: 'sm' | 'md';\n muted?: boolean;\n}) {\n const avatarSize = size === 'sm' ? 'size-8' : 'size-11';\n return (\n <div className={cn('flex min-w-0 flex-col items-center gap-1.5 text-center', muted && 'opacity-60')}>\n <Avatar className={avatarSize}>\n {agent.avatarUrl && <AvatarImage src={agent.avatarUrl} alt={agent.name} />}\n <AvatarFallback className=\"text-xs font-medium\">{getInitials(agent.name)}</AvatarFallback>\n </Avatar>\n <div className=\"min-w-0\">\n <p className=\"truncate text-xs font-medium\">{agent.name}</p>\n {agent.specialty && (\n <p className=\"truncate text-[10px] text-muted-foreground\">{agent.specialty}</p>\n )}\n </div>\n </div>\n );\n}\n\nfunction TransitionIcon({ status }: { status: HandoffStatus }) {\n return (\n <div className=\"flex flex-col items-center gap-1 text-muted-foreground\">\n {status === 'connecting' ? (\n <Loader2Icon className=\"size-5 animate-spin\" />\n ) : status === 'active' ? (\n <CheckCircle2Icon className=\"size-5 text-emerald-500\" />\n ) : (\n <ArrowRightIcon className=\"size-5\" />\n )}\n </div>\n );\n}\n\nfunction StatusPill({ status }: { status: HandoffStatus }) {\n const meta = STATUS_META[status];\n return (\n <span className={cn('flex items-center gap-1.5 text-xs font-medium', meta.textClass)}>\n <span className={cn('size-1.5 rounded-full', meta.dotClass)} />\n {meta.label}\n </span>\n );\n}\n\nfunction ActionRow({ actions }: { actions: HandoffAction[] }) {\n return (\n <div className=\"mt-4 flex flex-wrap justify-center gap-2\">\n {actions.map((action) => (\n <Button\n key={action.id}\n size=\"sm\"\n variant={action.variant === 'secondary' ? 'outline' : 'default'}\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ))}\n </div>\n );\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\n/**\n * AgentHandoff visualizes a handoff between specialized AI agents based on\n * request type (onboarding / routing). It supports several variants — a direct\n * A→B transition, a \"routing to specialist\" with a reason, and a multi-agent\n * triage that routes a request to one of several candidates. Everything is\n * driven by typed props: the component hardcodes no names, specialties, or\n * images.\n */\nexport function AgentHandoff({\n variant = 'direct',\n from,\n to,\n candidates = [],\n reason,\n status = 'connecting',\n actions,\n className,\n}: AgentHandoffProps) {\n // For triage, the selected candidate (or highest match) is the effective target.\n const triageTarget =\n variant === 'triage'\n ? candidates.find((c) => c.selected) ??\n [...candidates].sort((a, b) => (b.match ?? 0) - (a.match ?? 0))[0]\n : undefined;\n const target = to ?? triageTarget;\n const effectiveReason = reason ?? triageTarget?.reason;\n\n return (\n <motion.div\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n className={cn('rounded-xl border bg-card p-4', className)}\n >\n {/* Header: routing intent + status */}\n <div className=\"mb-3 flex items-center justify-between gap-2\">\n <span className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <SparklesIcon className=\"size-3.5\" />\n {variant === 'triage'\n ? 'Routing request'\n : variant === 'routing'\n ? 'Routing to specialist'\n : 'Agent handoff'}\n </span>\n <StatusPill status={status} />\n </div>\n\n {/* Transition */}\n {variant === 'triage' ? (\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex items-center justify-center gap-3\">\n <AgentBadge agent={from} />\n <TransitionIcon status={status} />\n {target ? (\n <AgentBadge agent={target} />\n ) : (\n <div className=\"text-xs text-muted-foreground\">Selecting…</div>\n )}\n </div>\n\n {/* Candidate list */}\n <div className=\"mt-1 space-y-1.5 border-t pt-3\">\n {candidates.map((candidate) => {\n const isSelected = target?.id === candidate.id;\n return (\n <div\n key={candidate.id}\n className={cn(\n 'flex items-center gap-3 rounded-lg border px-3 py-2 transition-colors',\n isSelected ? 'border-foreground/30 bg-muted/60' : 'border-transparent bg-muted/20'\n )}\n >\n <Avatar className=\"size-7\">\n {candidate.avatarUrl && <AvatarImage src={candidate.avatarUrl} alt={candidate.name} />}\n <AvatarFallback className=\"text-[10px] font-medium\">\n {getInitials(candidate.name)}\n </AvatarFallback>\n </Avatar>\n <div className=\"min-w-0 flex-1\">\n <p className=\"flex items-center gap-1.5 truncate text-xs font-medium\">\n {candidate.name}\n {candidate.specialty && (\n <span className=\"font-normal text-muted-foreground\">· {candidate.specialty}</span>\n )}\n </p>\n {candidate.reason && (\n <p className=\"truncate text-[10px] text-muted-foreground\">{candidate.reason}</p>\n )}\n </div>\n {candidate.match !== undefined && (\n <span\n className={cn(\n 'shrink-0 text-xs tabular-nums',\n isSelected ? 'font-medium text-foreground' : 'text-muted-foreground'\n )}\n >\n {candidate.match}%\n </span>\n )}\n </div>\n );\n })}\n </div>\n </div>\n ) : (\n <div className=\"flex items-center justify-center gap-4\">\n <AgentBadge agent={from} muted={status !== 'connecting'} />\n <TransitionIcon status={status} />\n {target && <AgentBadge agent={target} />}\n </div>\n )}\n\n {/* Reason / context */}\n {effectiveReason && (\n <p className=\"mt-3 rounded-lg bg-muted/40 px-3 py-2 text-center text-xs text-muted-foreground\">\n {effectiveReason}\n </p>\n )}\n\n {/* Actions */}\n {actions && actions.length > 0 && <ActionRow actions={actions} />}\n </motion.div>\n );\n}\n\nexport default AgentHandoff;\n","'use client';\n\nimport { motion } from 'motion/react';\nimport { BookmarkIcon } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Button } from '../../ui/button';\nimport { Badge } from '../../ui/badge';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface ListingField {\n /** Optional leading icon. */\n icon?: React.ReactNode;\n /** Field value (e.g. \"Remote\", \"$120/hr\", \"2 days ago\"). */\n value: string;\n}\n\nexport interface ListingAction {\n id: string;\n label: string;\n variant?: 'default' | 'outline' | 'secondary' | 'ghost';\n /** Stretch to fill available width. */\n fill?: boolean;\n onClick?: () => void;\n}\n\nexport interface Listing {\n id: string;\n /** Primary heading. */\n title: string;\n /** Secondary heading (source/organization/author). */\n subtitle?: string;\n /** Body description. */\n description?: string;\n /** Inline meta fields (location, value, date, etc.). */\n fields?: ListingField[];\n /** Tag chips. */\n tags?: string[];\n /** Per-card actions. */\n actions?: ListingAction[];\n}\n\nexport interface ListingFeedProps {\n listings: Listing[];\n /** Set of bookmarked/saved ids (controlled). */\n savedIds?: string[];\n /** Toggle handler for the bookmark affordance. Hides the icon when omitted. */\n onToggleSaved?: (id: string) => void;\n /** Click handler for the whole card. */\n onSelect?: (listing: Listing) => void;\n className?: string;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function ListingFeed({\n listings,\n savedIds = [],\n onToggleSaved,\n onSelect,\n className,\n}: ListingFeedProps) {\n return (\n <div className={cn('grid gap-3', className)}>\n {listings.map((listing, index) => {\n const isSaved = savedIds.includes(listing.id);\n return (\n <motion.div\n key={listing.id}\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: index * 0.05 }}\n onClick={onSelect ? () => onSelect(listing) : undefined}\n className={cn(\n 'rounded-lg border bg-card p-4',\n onSelect && 'cursor-pointer transition-colors hover:bg-muted/30'\n )}\n >\n <div className=\"space-y-3\">\n {/* Header */}\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"min-w-0 flex-1\">\n <h4 className=\"text-sm font-medium\">{listing.title}</h4>\n {listing.subtitle && (\n <p className=\"mt-1 text-sm text-muted-foreground\">{listing.subtitle}</p>\n )}\n </div>\n {onToggleSaved && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 shrink-0\"\n onClick={(e) => {\n e.stopPropagation();\n onToggleSaved(listing.id);\n }}\n >\n <BookmarkIcon\n className={cn('size-4', isSaved && 'fill-foreground text-foreground')}\n />\n </Button>\n )}\n </div>\n\n {/* Meta fields */}\n {listing.fields && listing.fields.length > 0 && (\n <div className=\"flex flex-wrap items-center gap-x-2 gap-y-1 text-xs text-muted-foreground\">\n {listing.fields.map((field, i) => (\n <span key={i} className=\"flex items-center gap-1\">\n {field.icon}\n {field.value}\n </span>\n ))}\n </div>\n )}\n\n {/* Description */}\n {listing.description && (\n <p className=\"text-sm text-muted-foreground\">{listing.description}</p>\n )}\n\n {/* Tags */}\n {listing.tags && listing.tags.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5\">\n {listing.tags.map((tag) => (\n <Badge key={tag} variant=\"outline\" className=\"text-xs\">\n {tag}\n </Badge>\n ))}\n </div>\n )}\n\n {/* Actions */}\n {listing.actions && listing.actions.length > 0 && (\n <div className=\"flex gap-2\">\n {listing.actions.map((action) => (\n <Button\n key={action.id}\n variant={action.variant ?? 'outline'}\n size=\"sm\"\n className={cn('text-xs', action.fill && 'flex-1')}\n onClick={(e) => {\n e.stopPropagation();\n action.onClick?.();\n }}\n >\n {action.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n </motion.div>\n );\n })}\n </div>\n );\n}\n\nexport default ListingFeed;\n","'use client';\n\nimport { motion } from 'motion/react';\nimport { cn } from '../../core/utils';\nimport { Button } from '../../ui/button';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport type ControlTileType = 'toggle' | 'slider' | 'status' | 'action';\n\nexport interface ControlTile {\n id: string;\n label: string;\n type: ControlTileType;\n /** Optional leading icon. */\n icon?: React.ReactNode;\n /** Grouping key (rendered as a section header). */\n group?: string;\n /** toggle: on/off state. */\n on?: boolean;\n /** slider: current numeric value. */\n value?: number;\n /** slider: bounds + step. */\n min?: number;\n max?: number;\n step?: number;\n /** slider: unit suffix shown next to the value (e.g. \"%\", \"°\"). */\n unit?: string;\n /** status: free-form descriptor shown under the label. */\n statusLabel?: string;\n /** status tone -> color. */\n statusTone?: 'neutral' | 'positive' | 'warning' | 'negative';\n /** action: button label. */\n actionLabel?: string;\n /** Disable the tile. */\n disabled?: boolean;\n}\n\nexport interface ControlGridProps {\n tiles: ControlTile[];\n /** Number of columns. */\n columns?: 1 | 2 | 3;\n /** Toggle handler (type: toggle). */\n onToggle?: (id: string, next: boolean) => void;\n /** Slider change handler (type: slider). */\n onValueChange?: (id: string, value: number) => void;\n /** Action handler (type: action). */\n onAction?: (id: string) => void;\n className?: string;\n}\n\nconst toneClasses: Record<string, string> = {\n neutral: 'text-muted-foreground',\n positive: 'text-emerald-600',\n warning: 'text-amber-600',\n negative: 'text-red-600',\n};\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nfunction Toggle({\n on,\n disabled,\n onChange,\n}: {\n on: boolean;\n disabled?: boolean;\n onChange: () => void;\n}) {\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={on}\n disabled={disabled}\n onClick={(e) => {\n e.stopPropagation();\n onChange();\n }}\n className={cn(\n 'relative inline-flex h-5 w-9 shrink-0 items-center rounded-full transition-colors disabled:opacity-50',\n on ? 'bg-foreground' : 'bg-muted-foreground/30'\n )}\n >\n <motion.span\n layout\n transition={{ type: 'spring', stiffness: 500, damping: 30 }}\n className={cn(\n 'inline-block size-4 rounded-full bg-background shadow-sm',\n on ? 'translate-x-4' : 'translate-x-0.5'\n )}\n />\n </button>\n );\n}\n\nexport function ControlGrid({\n tiles,\n columns = 2,\n onToggle,\n onValueChange,\n onAction,\n className,\n}: ControlGridProps) {\n const gridCols = { 1: 'grid-cols-1', 2: 'grid-cols-1 sm:grid-cols-2', 3: 'grid-cols-1 sm:grid-cols-3' };\n\n // Preserve order while collecting groups.\n const groups: string[] = [];\n for (const tile of tiles) {\n const g = tile.group ?? '';\n if (!groups.includes(g)) groups.push(g);\n }\n\n const renderTile = (tile: ControlTile, index: number) => {\n const active = tile.type === 'toggle' ? !!tile.on : true;\n return (\n <motion.div\n key={tile.id}\n initial={{ opacity: 0, y: 6 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.15, delay: index * 0.03 }}\n className={cn(\n 'flex flex-col gap-2 rounded-lg border bg-card p-3',\n tile.disabled && 'opacity-50'\n )}\n >\n <div className=\"flex items-start gap-3\">\n {tile.icon && (\n <div\n className={cn(\n 'flex size-8 shrink-0 items-center justify-center rounded-md',\n active ? 'bg-foreground/10 text-foreground' : 'bg-muted/50 text-muted-foreground/50'\n )}\n >\n {tile.icon}\n </div>\n )}\n <div className=\"min-w-0 flex-1\">\n <span className={cn('block text-sm', active ? 'font-medium' : 'text-muted-foreground')}>\n {tile.label}\n </span>\n {tile.type === 'status' && tile.statusLabel && (\n <span className={cn('text-xs', toneClasses[tile.statusTone ?? 'neutral'])}>\n {tile.statusLabel}\n </span>\n )}\n {tile.type === 'slider' && tile.value !== undefined && (\n <span className=\"text-xs text-muted-foreground tabular-nums\">\n {tile.value}\n {tile.unit}\n </span>\n )}\n </div>\n\n {tile.type === 'toggle' && (\n <Toggle\n on={!!tile.on}\n disabled={tile.disabled}\n onChange={() => onToggle?.(tile.id, !tile.on)}\n />\n )}\n {tile.type === 'status' && (\n <span\n className={cn(\n 'mt-1.5 size-2 shrink-0 rounded-full',\n tile.statusTone === 'positive'\n ? 'bg-emerald-500'\n : tile.statusTone === 'warning'\n ? 'bg-amber-500'\n : tile.statusTone === 'negative'\n ? 'bg-red-500'\n : 'bg-muted-foreground/40'\n )}\n />\n )}\n </div>\n\n {tile.type === 'slider' && (\n <input\n type=\"range\"\n min={tile.min ?? 0}\n max={tile.max ?? 100}\n step={tile.step ?? 1}\n value={tile.value ?? 0}\n disabled={tile.disabled}\n onChange={(e) => onValueChange?.(tile.id, Number(e.target.value))}\n className=\"h-1.5 w-full cursor-pointer appearance-none rounded-full bg-muted accent-foreground\"\n />\n )}\n\n {tile.type === 'action' && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={tile.disabled}\n className=\"h-7 text-xs\"\n onClick={() => onAction?.(tile.id)}\n >\n {tile.actionLabel ?? 'Run'}\n </Button>\n )}\n </motion.div>\n );\n };\n\n const hasGroups = groups.some((g) => g !== '');\n\n if (!hasGroups) {\n return (\n <div className={cn('grid gap-3', gridCols[columns], className)}>\n {tiles.map(renderTile)}\n </div>\n );\n }\n\n return (\n <div className={cn('space-y-4', className)}>\n {groups.map((group) => {\n const groupTiles = tiles.filter((t) => (t.group ?? '') === group);\n return (\n <div key={group || 'ungrouped'} className=\"space-y-2\">\n {group && (\n <span className=\"block font-medium text-muted-foreground text-xs\">{group}</span>\n )}\n <div className={cn('grid gap-3', gridCols[columns])}>{groupTiles.map(renderTile)}</div>\n </div>\n );\n })}\n </div>\n );\n}\n\nexport default ControlGrid;\n","'use client';\n\nimport { motion } from 'motion/react';\nimport { LightbulbIcon, AlertTriangleIcon, CheckCircle2Icon, InfoIcon } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Button } from '../../ui/button';\nimport { Badge } from '../../ui/badge';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport type RecommendationTone = 'suggestion' | 'caution' | 'positive' | 'info';\n\nexport interface RecommendationAction {\n id: string;\n label: string;\n variant?: 'default' | 'outline' | 'secondary' | 'ghost';\n onClick?: () => void;\n}\n\nexport interface Recommendation {\n id: string;\n /** Headline recommendation. */\n title: string;\n /** Supporting explanation of *why* this is recommended. */\n rationale: string;\n /** Tone drives icon + accent color. */\n tone?: RecommendationTone;\n /** Optional confidence/priority chip text (e.g. \"High priority\"). */\n badge?: string;\n /** Optional structured impact line (e.g. \"Expected change: +5%\"). */\n impact?: string;\n /** Actions the user can take on this recommendation. */\n actions?: RecommendationAction[];\n}\n\nexport interface RecommendationCardsProps {\n recommendations: Recommendation[];\n className?: string;\n}\n\nconst toneConfig: Record<\n RecommendationTone,\n { icon: typeof InfoIcon; iconWrap: string; accent: string }\n> = {\n suggestion: { icon: LightbulbIcon, iconWrap: 'bg-blue-500/10 text-blue-600', accent: 'border-l-blue-500' },\n caution: { icon: AlertTriangleIcon, iconWrap: 'bg-amber-500/10 text-amber-600', accent: 'border-l-amber-500' },\n positive: { icon: CheckCircle2Icon, iconWrap: 'bg-emerald-500/10 text-emerald-600', accent: 'border-l-emerald-500' },\n info: { icon: InfoIcon, iconWrap: 'bg-muted text-muted-foreground', accent: 'border-l-muted-foreground/40' },\n};\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function RecommendationCards({ recommendations, className }: RecommendationCardsProps) {\n return (\n <div className={cn('space-y-3', className)}>\n {recommendations.map((rec, index) => {\n const config = toneConfig[rec.tone ?? 'info'];\n const Icon = config.icon;\n return (\n <motion.div\n key={rec.id}\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: index * 0.05 }}\n className={cn('rounded-lg border border-l-2 bg-card p-4', config.accent)}\n >\n <div className=\"flex items-start gap-3\">\n <div className={cn('flex size-8 shrink-0 items-center justify-center rounded-md', config.iconWrap)}>\n <Icon className=\"size-4\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <h4 className=\"text-sm font-medium\">{rec.title}</h4>\n {rec.badge && (\n <Badge variant=\"secondary\" className=\"text-[10px]\">\n {rec.badge}\n </Badge>\n )}\n </div>\n <p className=\"mt-1 text-sm text-muted-foreground\">{rec.rationale}</p>\n {rec.impact && (\n <p className=\"mt-2 rounded-md bg-muted/50 px-2 py-1 text-xs text-muted-foreground\">\n {rec.impact}\n </p>\n )}\n {rec.actions && rec.actions.length > 0 && (\n <div className=\"mt-3 flex flex-wrap gap-2\">\n {rec.actions.map((action) => (\n <Button\n key={action.id}\n size=\"sm\"\n variant={action.variant ?? 'outline'}\n className=\"h-7 text-xs\"\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n </div>\n </motion.div>\n );\n })}\n </div>\n );\n}\n\nexport default RecommendationCards;\n","'use client';\n\nimport { motion } from 'motion/react';\nimport { cn } from '../../core/utils';\nimport { Badge } from '../../ui/badge';\nimport { Button } from '../../ui/button';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport type AgendaItemState = 'upcoming' | 'active' | 'done';\n\nexport interface AgendaSlotOption {\n id: string;\n label: string;\n}\n\nexport interface AgendaItemAction {\n id: string;\n label: string;\n variant?: 'default' | 'outline' | 'secondary' | 'ghost';\n onClick?: () => void;\n}\n\nexport interface AgendaItem {\n id: string;\n /** Time label (e.g. \"10:00 AM\", \"Day 1 · 14:00\"). */\n time: string;\n /** Optional end/duration label. */\n duration?: string;\n /** Title of the slot/session. */\n title: string;\n /** Secondary line (location, host, track). */\n subtitle?: string;\n /** Body description. */\n description?: string;\n /** Tag chips. */\n tags?: string[];\n /** Lifecycle state -> visual emphasis. */\n state?: AgendaItemState;\n /** Selectable proposed time options (rendered as buttons). */\n options?: AgendaSlotOption[];\n /** Per-item actions. */\n actions?: AgendaItemAction[];\n}\n\nexport interface ScheduleTimelineProps {\n items: AgendaItem[];\n /** Selected option id (controlled). */\n selectedOptionId?: string;\n /** Option selection handler. */\n onSelectOption?: (itemId: string, optionId: string) => void;\n className?: string;\n}\n\nconst stateDot: Record<AgendaItemState, string> = {\n upcoming: 'border-2 border-muted-foreground/30 bg-background',\n active: 'border-2 border-foreground bg-foreground',\n done: 'border-2 border-emerald-500 bg-emerald-500',\n};\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function ScheduleTimeline({\n items,\n selectedOptionId,\n onSelectOption,\n className,\n}: ScheduleTimelineProps) {\n return (\n <div className={cn('flex flex-col', className)}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n const state = item.state ?? 'upcoming';\n return (\n <motion.div\n key={item.id}\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: index * 0.05 }}\n className=\"relative flex gap-3\"\n >\n {/* Time + rail */}\n <div className=\"flex w-16 shrink-0 flex-col items-end pt-0.5 text-right\">\n <span className=\"text-xs font-medium tabular-nums\">{item.time}</span>\n {item.duration && (\n <span className=\"text-[10px] text-muted-foreground\">{item.duration}</span>\n )}\n </div>\n\n <div className=\"relative flex flex-col items-center\">\n <span className={cn('z-10 mt-1 size-3 shrink-0 rounded-full', stateDot[state])} />\n {!isLast && <span className=\"w-0.5 flex-1 bg-muted\" />}\n </div>\n\n {/* Content */}\n <div className={cn('min-w-0 flex-1', !isLast && 'pb-4')}>\n <div className=\"rounded-lg border bg-card p-3\">\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"min-w-0\">\n <h4 className={cn('text-sm', state === 'done' ? 'text-muted-foreground' : 'font-medium')}>\n {item.title}\n </h4>\n {item.subtitle && (\n <p className=\"mt-0.5 text-xs text-muted-foreground\">{item.subtitle}</p>\n )}\n </div>\n {state === 'active' && (\n <Badge className=\"bg-foreground text-background text-[10px]\">Now</Badge>\n )}\n </div>\n\n {item.description && (\n <p className=\"mt-2 text-sm text-muted-foreground\">{item.description}</p>\n )}\n\n {item.tags && item.tags.length > 0 && (\n <div className=\"mt-2 flex flex-wrap gap-1.5\">\n {item.tags.map((tag) => (\n <Badge key={tag} variant=\"outline\" className=\"h-5 text-xs\">\n {tag}\n </Badge>\n ))}\n </div>\n )}\n\n {item.options && item.options.length > 0 && (\n <div className=\"mt-3 space-y-1.5\">\n {item.options.map((option) => {\n const selected = selectedOptionId === option.id;\n return (\n <button\n key={option.id}\n type=\"button\"\n onClick={() => onSelectOption?.(item.id, option.id)}\n className={cn(\n 'flex w-full items-center justify-between rounded-md border px-3 py-1.5 text-left text-xs transition-colors',\n selected\n ? 'border-foreground bg-muted'\n : 'hover:bg-muted/50'\n )}\n >\n <span>{option.label}</span>\n </button>\n );\n })}\n </div>\n )}\n\n {item.actions && item.actions.length > 0 && (\n <div className=\"mt-3 flex gap-2\">\n {item.actions.map((action) => (\n <Button\n key={action.id}\n size=\"sm\"\n variant={action.variant ?? 'outline'}\n className=\"h-7 flex-1 text-xs\"\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n </div>\n </motion.div>\n );\n })}\n </div>\n );\n}\n\nexport default ScheduleTimeline;\n","'use client';\n\nimport * as CollapsiblePrimitive from '@radix-ui/react-collapsible';\n\nconst Collapsible = CollapsiblePrimitive.Root;\n\nconst CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger;\n\nconst CollapsibleContent = CollapsiblePrimitive.CollapsibleContent;\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };\n","'use client';\n\nimport { useState } from 'react';\nimport {\n BrainIcon,\n CheckCircle2Icon,\n ChevronDownIcon,\n SearchIcon,\n LightbulbIcon,\n ZapIcon,\n} from 'lucide-react';\nimport { AnimatePresence, motion } from 'motion/react';\nimport { Badge } from '../../ui/badge';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../../ui/collapsible';\nimport { cn } from '../../core/utils';\nimport type { ReasoningStep, ReasoningStatus } from '../../core/types';\n\nexport interface MessageWithReasoningProps {\n /** Reasoning steps */\n steps: ReasoningStep[];\n /** Final answer content */\n children?: React.ReactNode;\n /** Title for the reasoning section */\n title?: string;\n /** Show timing bar */\n showTimingBar?: boolean;\n /** Container class */\n className?: string;\n /** Actions to display after the answer */\n actions?: React.ReactNode;\n}\n\nconst stepIconMap: Record<string, typeof BrainIcon> = {\n search: SearchIcon,\n brain: BrainIcon,\n lightbulb: LightbulbIcon,\n zap: ZapIcon,\n};\n\nfunction getStepIcon(iconName?: string) {\n if (!iconName) return BrainIcon;\n return stepIconMap[iconName] || BrainIcon;\n}\n\nfunction StatusIcon({ status }: { status: ReasoningStatus }) {\n if (status === 'complete') {\n return <CheckCircle2Icon className=\"size-3 text-emerald-500\" />;\n }\n if (status === 'active') {\n return (\n <motion.div\n animate={{ rotate: 360 }}\n transition={{ duration: 1, repeat: Infinity, ease: 'linear' }}\n className=\"size-3 rounded-full border-2 border-foreground border-t-transparent\"\n />\n );\n }\n return <div className=\"size-3 rounded-full border-2 border-muted-foreground/30\" />;\n}\n\nexport function MessageWithReasoning({\n steps,\n children,\n title = 'Chain of thought',\n showTimingBar = true,\n className,\n actions,\n}: MessageWithReasoningProps) {\n const [expandedStep, setExpandedStep] = useState<string | null>(null);\n\n const totalDuration = steps.reduce((sum, step) => sum + (step.duration || 0), 0);\n const completedSteps = steps.filter((s) => s.status === 'complete').length;\n const isComplete = completedSteps === steps.length;\n\n return (\n <div className={cn('overflow-hidden rounded-lg border bg-card', className)}>\n {/* Reasoning header */}\n <div className=\"flex items-center gap-3 border-b px-4 py-2.5 bg-muted/20\">\n <div className=\"flex size-6 shrink-0 items-center justify-center rounded-full bg-muted\">\n <BrainIcon className=\"size-3 text-muted-foreground\" />\n </div>\n <span className=\"font-medium text-sm\">{title}</span>\n <div className=\"flex items-center gap-2 text-muted-foreground text-xs\">\n <span>{steps.length} steps</span>\n {totalDuration > 0 && (\n <>\n <span>·</span>\n <span className=\"font-mono tabular-nums\">{totalDuration}s</span>\n </>\n )}\n </div>\n <Badge variant={isComplete ? 'success' : 'secondary'} className=\"ml-auto font-normal text-[10px]\">\n {isComplete ? 'Complete' : 'Processing'}\n </Badge>\n </div>\n\n {/* Reasoning steps */}\n <div className=\"border-b\">\n <div className=\"relative py-2\">\n {steps.map((step, index) => {\n const StepIcon = getStepIcon(step.icon);\n const isExpanded = expandedStep === step.id;\n const isLast = index === steps.length - 1;\n\n return (\n <motion.div\n key={step.id}\n initial={{ opacity: 0, y: 4 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.2, delay: index * 0.06 }}\n className=\"relative\"\n >\n {/* Vertical connector line */}\n {!isLast && (\n <div className=\"absolute left-[26px] top-[32px] bottom-0 w-px bg-border\" />\n )}\n\n <button\n type=\"button\"\n onClick={() => setExpandedStep(isExpanded ? null : step.id)}\n className=\"flex w-full items-center gap-3 px-4 py-2 text-left transition-colors hover:bg-muted/30\"\n >\n {/* Step status */}\n <span className=\"relative z-10 flex size-5 shrink-0 items-center justify-center rounded-full bg-muted\">\n <StatusIcon status={step.status} />\n </span>\n\n <StepIcon className=\"size-3.5 text-muted-foreground\" />\n\n <span className=\"flex-1 text-xs font-medium\">{step.label}</span>\n\n {step.duration && (\n <span className=\"font-mono text-muted-foreground text-[10px] tabular-nums\">\n {step.duration}s\n </span>\n )}\n\n <ChevronDownIcon\n className={cn(\n 'size-3.5 text-muted-foreground/60 transition-transform duration-200',\n isExpanded && 'rotate-180'\n )}\n />\n </button>\n\n <AnimatePresence>\n {isExpanded && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={{ duration: 0.2 }}\n className=\"overflow-hidden\"\n >\n <div className=\"pb-2 pl-[52px] pr-4\">\n <Collapsible defaultOpen>\n <CollapsibleTrigger className=\"group flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground\">\n <span>Thought for {step.duration || 0} seconds</span>\n <ChevronDownIcon className=\"size-3 transition-transform group-data-[state=closed]:-rotate-90\" />\n </CollapsibleTrigger>\n <CollapsibleContent>\n <div className=\"mt-2 rounded-md bg-muted/30 p-3\">\n <p className=\"whitespace-pre-wrap text-xs text-muted-foreground leading-relaxed\">\n {step.content}\n </p>\n </div>\n </CollapsibleContent>\n </Collapsible>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </motion.div>\n );\n })}\n </div>\n\n {/* Timing summary bar */}\n {showTimingBar && totalDuration > 0 && (\n <div className=\"flex items-center gap-1 border-t px-4 py-2\">\n {steps.map((step) => {\n const widthPercent = ((step.duration || 0) / totalDuration) * 100;\n return (\n <div\n key={step.id}\n className=\"h-1 rounded-full bg-muted-foreground/20\"\n style={{ width: `${widthPercent}%` }}\n title={`${step.label}: ${step.duration}s`}\n />\n );\n })}\n <span className=\"ml-auto font-mono text-muted-foreground text-[10px] tabular-nums\">\n {totalDuration}s total\n </span>\n </div>\n )}\n </div>\n\n {/* Final answer */}\n {children && (\n <div className=\"px-4 py-4\">\n <div className=\"mb-2.5 flex items-center gap-2\">\n <ZapIcon className=\"size-3.5 text-muted-foreground\" />\n <span className=\"font-medium text-xs text-muted-foreground\">Final Answer</span>\n </div>\n <div className=\"text-sm leading-relaxed\">{children}</div>\n {actions && <div className=\"mt-3\">{actions}</div>}\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { CheckIcon, ChevronDownIcon, CopyIcon, Loader2Icon } from 'lucide-react';\nimport { AnimatePresence, motion } from 'motion/react';\nimport { Button } from '../../ui/button';\nimport { cn, copyToClipboard, calculatePercentage } from '../../core/utils';\nimport type { ExecutionStep, ExecutionStepStatus } from '../../core/types';\n\nexport interface MessageWithStepsProps {\n /** Steps to display */\n steps: ExecutionStep[];\n /** Title for the step list */\n title?: string;\n /** Show progress bar */\n showProgress?: boolean;\n /** Initially expanded step index */\n defaultExpanded?: number;\n /** Container class */\n className?: string;\n /** Footer content */\n footer?: React.ReactNode;\n}\n\nfunction StepNode({ status }: { status: ExecutionStepStatus }) {\n if (status === 'complete') {\n return (\n <div className=\"flex size-6 items-center justify-center rounded-full bg-emerald-500\">\n <CheckIcon className=\"size-3 text-white\" />\n </div>\n );\n }\n if (status === 'active') {\n return (\n <div className=\"relative flex size-6 items-center justify-center rounded-full border-2 border-foreground\">\n <Loader2Icon className=\"size-3 animate-spin text-foreground\" />\n </div>\n );\n }\n if (status === 'error') {\n return (\n <div className=\"flex size-6 items-center justify-center rounded-full bg-red-500\">\n <span className=\"text-white text-xs font-bold\">!</span>\n </div>\n );\n }\n return (\n <div className=\"flex size-6 items-center justify-center rounded-full border-2 border-muted-foreground/30\" />\n );\n}\n\nexport function MessageWithSteps({\n steps,\n title,\n showProgress = true,\n defaultExpanded,\n className,\n footer,\n}: MessageWithStepsProps) {\n const [expanded, setExpanded] = useState<number | null>(\n defaultExpanded ?? steps.findIndex((s) => s.status === 'active')\n );\n const [copied, setCopied] = useState<string | null>(null);\n\n const handleCopy = async (stepId: string, code: string) => {\n const success = await copyToClipboard(code);\n if (success) {\n setCopied(stepId);\n setTimeout(() => setCopied(null), 2000);\n }\n };\n\n const completedSteps = steps.filter((s) => s.status === 'complete').length;\n const progressPercent = calculatePercentage(completedSteps, steps.length);\n\n return (\n <div className={cn('overflow-hidden rounded-lg border bg-card', className)}>\n {/* Header with progress */}\n {(title || showProgress) && (\n <div className=\"border-b px-4 py-3\">\n <div className=\"flex items-center justify-between\">\n {title && <span className=\"font-medium text-sm\">{title}</span>}\n <span className=\"font-mono text-muted-foreground text-xs\">\n {completedSteps}/{steps.length} complete\n </span>\n </div>\n {showProgress && (\n <div className=\"mt-2 h-1 overflow-hidden rounded-full bg-muted\">\n <motion.div\n className=\"h-full rounded-full bg-emerald-500\"\n initial={{ width: 0 }}\n animate={{ width: `${progressPercent}%` }}\n transition={{ duration: 0.6, ease: 'easeOut' }}\n />\n </div>\n )}\n </div>\n )}\n\n {/* Timeline steps */}\n <div className=\"px-4 py-2\">\n {steps.map((step, index) => {\n const isExpanded = expanded === index;\n const isLast = index === steps.length - 1;\n\n return (\n <motion.div\n key={step.id}\n initial={{ opacity: 0, y: 4 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.2, delay: index * 0.07 }}\n className=\"relative\"\n >\n {/* Timeline connector line */}\n {!isLast && (\n <div\n className={cn(\n 'absolute top-8 left-3 h-[calc(100%-20px)] w-px',\n step.status === 'complete' ? 'bg-emerald-500' : 'bg-border'\n )}\n />\n )}\n\n {/* Step header */}\n <button\n type=\"button\"\n onClick={() => setExpanded(isExpanded ? null : index)}\n className=\"flex w-full items-start gap-3 py-2.5 text-left transition-colors\"\n >\n <div className=\"relative z-10 mt-0.5 shrink-0\">\n <StepNode status={step.status} />\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span\n className={cn(\n 'font-medium text-sm',\n step.status === 'pending' && 'text-muted-foreground'\n )}\n >\n {step.title}\n </span>\n {step.duration && (\n <span className=\"font-mono text-muted-foreground text-[10px]\">\n {step.duration}\n </span>\n )}\n </div>\n {!isExpanded && (\n <p className=\"mt-0.5 truncate text-muted-foreground text-xs\">\n {step.description}\n </p>\n )}\n </div>\n <ChevronDownIcon\n className={cn(\n 'mt-1 size-4 shrink-0 text-muted-foreground/60 transition-transform duration-200',\n isExpanded ? 'rotate-0' : '-rotate-90'\n )}\n />\n </button>\n\n {/* Expanded content */}\n <AnimatePresence>\n {isExpanded && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={{ duration: 0.2, ease: 'easeOut' }}\n className=\"overflow-hidden pl-9\"\n >\n <p className=\"mb-3 text-muted-foreground text-sm leading-relaxed\">\n {step.description}\n </p>\n {step.code && (\n <div className=\"mb-3 overflow-hidden rounded-md bg-zinc-950\">\n <div className=\"flex items-center justify-between px-3 py-1.5\">\n <span className=\"font-mono text-zinc-500 text-[10px]\">\n {step.status === 'active' ? 'running...' : 'code'}\n </span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 gap-1 px-2 text-xs text-zinc-400 hover:text-zinc-200\"\n onClick={(e) => {\n e.stopPropagation();\n handleCopy(step.id, step.code as string);\n }}\n >\n {copied === step.id ? (\n <>\n <CheckIcon className=\"size-3\" />\n Copied\n </>\n ) : (\n <>\n <CopyIcon className=\"size-3\" />\n Copy\n </>\n )}\n </Button>\n </div>\n <pre className=\"overflow-x-auto px-3 pb-3 font-mono text-[11px] leading-5 text-zinc-300\">\n <code>{step.code}</code>\n </pre>\n </div>\n )}\n {step.output && (\n <div className=\"mb-3 rounded-md bg-muted/50 p-3\">\n <p className=\"text-muted-foreground text-xs font-mono\">\n {step.output}\n </p>\n </div>\n )}\n </motion.div>\n )}\n </AnimatePresence>\n </motion.div>\n );\n })}\n </div>\n\n {/* Footer */}\n {footer && <div className=\"border-t px-4 py-3\">{footer}</div>}\n </div>\n );\n}\n","import * as React from 'react';\nimport { cn } from '../core/utils';\n\nconst Textarea = React.forwardRef<\n HTMLTextAreaElement,\n React.ComponentProps<'textarea'>\n>(({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n});\nTextarea.displayName = 'Textarea';\n\nexport { Textarea };\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport {\n CheckCircle2Icon,\n ThumbsDownIcon,\n ThumbsUpIcon,\n} from 'lucide-react';\nimport { AnimatePresence, motion } from 'motion/react';\nimport { Badge } from '../../ui/badge';\nimport { Button } from '../../ui/button';\nimport { Textarea } from '../../ui/textarea';\nimport { cn } from '../../core/utils';\nimport type { FeedbackCategory, MessageFeedback } from '../../core/types';\n\nexport interface MessageWithFeedbackProps {\n /** Message content */\n children: React.ReactNode;\n /** Current feedback state */\n feedback?: MessageFeedback;\n /** Feedback submission handler */\n onFeedback?: (feedback: MessageFeedback) => void;\n /** Available feedback categories */\n categories?: FeedbackCategory[];\n /** Show comment input */\n showComment?: boolean;\n /** Label for the feedback prompt */\n promptLabel?: string;\n /** Container class */\n className?: string;\n}\n\nconst defaultCategories: FeedbackCategory[] = [\n { id: 'accurate', label: 'Accurate', sentiment: 'positive' },\n { id: 'helpful', label: 'Helpful', sentiment: 'positive' },\n { id: 'well-structured', label: 'Well-structured', sentiment: 'positive' },\n { id: 'creative', label: 'Creative', sentiment: 'positive' },\n { id: 'too-long', label: 'Too long', sentiment: 'negative' },\n { id: 'incomplete', label: 'Incomplete', sentiment: 'negative' },\n { id: 'incorrect', label: 'Incorrect', sentiment: 'negative' },\n { id: 'off-topic', label: 'Off-topic', sentiment: 'negative' },\n];\n\nexport function MessageWithFeedback({\n children,\n feedback: initialFeedback,\n onFeedback,\n categories = defaultCategories,\n showComment = true,\n promptLabel = 'Was this response helpful?',\n className,\n}: MessageWithFeedbackProps) {\n const [vote, setVote] = useState<'up' | 'down' | null>(initialFeedback?.vote ?? null);\n const [selectedCategories, setSelectedCategories] = useState<string[]>(\n initialFeedback?.categories ?? []\n );\n const [comment, setComment] = useState(initialFeedback?.comment ?? '');\n const [submitted, setSubmitted] = useState(!!initialFeedback);\n const [showDetails, setShowDetails] = useState(false);\n\n const toggleCategory = useCallback((id: string) => {\n setSelectedCategories((prev) =>\n prev.includes(id) ? prev.filter((c) => c !== id) : [...prev, id]\n );\n }, []);\n\n const handleVote = useCallback((direction: 'up' | 'down') => {\n const newVote = vote === direction ? null : direction;\n setVote(newVote);\n if (newVote) {\n setShowDetails(true);\n }\n }, [vote]);\n\n const handleSubmit = useCallback(() => {\n if (!vote) return;\n \n const feedbackData: MessageFeedback = {\n vote,\n categories: selectedCategories.length > 0 ? selectedCategories : undefined,\n comment: comment.trim() || undefined,\n timestamp: new Date(),\n };\n\n onFeedback?.(feedbackData);\n setSubmitted(true);\n }, [vote, selectedCategories, comment, onFeedback]);\n\n const handleReset = useCallback(() => {\n setVote(null);\n setSelectedCategories([]);\n setComment('');\n setSubmitted(false);\n setShowDetails(false);\n }, []);\n\n const visibleCategories = vote\n ? categories.filter((c) =>\n vote === 'up' ? c.sentiment === 'positive' : c.sentiment === 'negative'\n )\n : categories;\n\n return (\n <div className={cn('overflow-hidden rounded-lg border bg-card', className)}>\n {/* Message content */}\n <div className=\"px-4 py-4\">{children}</div>\n\n {/* Feedback area */}\n <div className=\"border-t\">\n <AnimatePresence mode=\"wait\">\n {submitted ? (\n <motion.div\n key=\"success\"\n initial={{ opacity: 0, scale: 0.96 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.96 }}\n transition={{ duration: 0.2 }}\n className=\"flex flex-col items-center gap-2 px-4 py-8\"\n >\n <motion.div\n initial={{ scale: 0 }}\n animate={{ scale: 1 }}\n transition={{ type: 'spring', stiffness: 300, damping: 20, delay: 0.1 }}\n >\n <CheckCircle2Icon className=\"size-8 text-emerald-500\" />\n </motion.div>\n <span className=\"font-medium text-sm\">Thanks for your feedback</span>\n <span className=\"text-center text-muted-foreground text-xs\">\n Your input helps improve response quality.\n {selectedCategories.length > 0 && (\n <>\n {' '}\n You selected {selectedCategories.length} categor\n {selectedCategories.length === 1 ? 'y' : 'ies'}.\n </>\n )}\n </span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"mt-1 h-7 text-xs\"\n onClick={handleReset}\n >\n Submit another\n </Button>\n </motion.div>\n ) : (\n <motion.div\n key=\"form\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.15 }}\n >\n {/* Vote buttons */}\n <div className=\"flex items-center justify-between px-4 py-3\">\n <span className=\"text-muted-foreground text-xs\">{promptLabel}</span>\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n 'h-8 gap-1.5 px-3 text-xs transition-colors',\n vote === 'up' &&\n 'bg-emerald-500/10 text-emerald-600 hover:bg-emerald-500/15 dark:text-emerald-400'\n )}\n onClick={() => handleVote('up')}\n >\n <ThumbsUpIcon className={cn('size-3.5', vote === 'up' && 'fill-current')} />\n Helpful\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n 'h-8 gap-1.5 px-3 text-xs transition-colors',\n vote === 'down' &&\n 'bg-red-500/10 text-red-600 hover:bg-red-500/15 dark:text-red-400'\n )}\n onClick={() => handleVote('down')}\n >\n <ThumbsDownIcon className={cn('size-3.5', vote === 'down' && 'fill-current')} />\n Not helpful\n </Button>\n </div>\n </div>\n\n {/* Expanded details */}\n <AnimatePresence>\n {showDetails && vote && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={{ duration: 0.25, ease: 'easeOut' }}\n className=\"overflow-hidden\"\n >\n {/* Category tags */}\n <div className=\"border-t px-4 py-3\">\n <span className=\"mb-2 block text-muted-foreground text-xs\">\n {vote === 'up' ? 'What did you like?' : 'What went wrong?'}\n </span>\n <div className=\"flex flex-wrap gap-1.5\">\n {visibleCategories.map((category) => {\n const isSelected = selectedCategories.includes(category.id);\n return (\n <motion.button\n key={category.id}\n type=\"button\"\n initial={{ opacity: 0, scale: 0.9 }}\n animate={{ opacity: 1, scale: 1 }}\n transition={{ duration: 0.15 }}\n onClick={() => toggleCategory(category.id)}\n >\n <Badge\n variant={isSelected ? 'default' : 'outline'}\n className=\"cursor-pointer text-xs transition-colors\"\n >\n {category.label}\n </Badge>\n </motion.button>\n );\n })}\n </div>\n </div>\n\n {/* Comment */}\n {showComment && (\n <div className=\"border-t px-4 py-3\">\n <Textarea\n value={comment}\n onChange={(e) => setComment(e.target.value)}\n placeholder={\n vote === 'up'\n ? 'What made this response stand out? (optional)'\n : 'How could this response be improved? (optional)'\n }\n rows={2}\n className=\"resize-none text-sm\"\n />\n </div>\n )}\n\n {/* Submit */}\n <div className=\"flex items-center justify-between border-t px-4 py-3\">\n <span className=\"text-muted-foreground text-xs\">\n {selectedCategories.length > 0\n ? `${selectedCategories.length} selected`\n : 'No categories selected'}\n </span>\n <Button\n size=\"sm\"\n className=\"h-7 text-xs\"\n onClick={handleSubmit}\n disabled={!vote}\n >\n Submit feedback\n </Button>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { FileTextIcon, ImageIcon, MicIcon } from 'lucide-react';\nimport { motion } from 'motion/react';\nimport { cn, formatBytes } from '../../core/utils';\nimport type { Attachment, AttachmentType } from '../../core/types';\n\nexport interface MessageWithAttachmentsProps {\n /** Message content */\n children?: React.ReactNode;\n /** Attachments */\n attachments: Attachment[];\n /** Click handler for attachment */\n onAttachmentClick?: (attachment: Attachment) => void;\n /** Container class */\n className?: string;\n /** Attachment display variant */\n variant?: 'compact' | 'card';\n}\n\nconst attachmentIcons: Record<AttachmentType, typeof FileTextIcon> = {\n image: ImageIcon,\n audio: MicIcon,\n video: FileTextIcon,\n document: FileTextIcon,\n file: FileTextIcon,\n};\n\nfunction AttachmentPreview({\n attachment,\n onClick,\n variant,\n}: {\n attachment: Attachment;\n onClick?: (attachment: Attachment) => void;\n variant: 'compact' | 'card';\n}) {\n const Icon = attachmentIcons[attachment.type];\n\n // Image preview\n if (attachment.type === 'image' && attachment.url) {\n return (\n <button\n type=\"button\"\n onClick={() => onClick?.(attachment)}\n className={cn(\n 'overflow-hidden rounded-md border bg-muted/30 transition-colors hover:bg-muted/50',\n variant === 'card' ? 'w-full' : 'w-auto'\n )}\n >\n <img\n src={attachment.url}\n alt={attachment.name}\n className={cn(\n 'object-cover',\n variant === 'card' ? 'h-32 w-full' : 'h-20 w-20'\n )}\n />\n {variant === 'card' && (\n <div className=\"px-2 py-1.5\">\n <p className=\"truncate text-xs font-medium\">{attachment.name}</p>\n {attachment.size && (\n <p className=\"text-[10px] text-muted-foreground\">\n {formatBytes(attachment.size)}\n </p>\n )}\n </div>\n )}\n </button>\n );\n }\n\n // Audio preview with waveform\n if (attachment.type === 'audio') {\n return (\n <div className=\"flex items-center gap-2 rounded-md border bg-muted/30 px-2.5 py-2\">\n <div className=\"flex size-10 shrink-0 items-center justify-center rounded bg-muted\">\n <MicIcon className=\"size-4 text-muted-foreground/60\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate font-medium text-xs\">{attachment.name}</p>\n <div className=\"mt-1 flex items-center gap-1\">\n {Array.from({ length: 12 }).map((_, i) => (\n <div\n key={`${attachment.id}-wave-${i}`}\n className=\"w-1 rounded-full bg-muted-foreground/30\"\n style={{ height: `${6 + ((i * 7 + 3) % 10)}px` }}\n />\n ))}\n </div>\n </div>\n </div>\n );\n }\n\n // Default file preview\n return (\n <button\n type=\"button\"\n onClick={() => onClick?.(attachment)}\n className=\"flex items-center gap-2 rounded-md border bg-muted/30 px-2.5 py-2 transition-colors hover:bg-muted/50\"\n >\n <div className=\"flex size-10 shrink-0 items-center justify-center rounded bg-muted\">\n <Icon className=\"size-4 text-muted-foreground/60\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"truncate font-medium text-xs\">{attachment.name}</p>\n {attachment.size && (\n <p className=\"text-[10px] text-muted-foreground\">\n {formatBytes(attachment.size)}\n </p>\n )}\n </div>\n </button>\n );\n}\n\nexport function MessageWithAttachments({\n children,\n attachments,\n onAttachmentClick,\n className,\n variant = 'compact',\n}: MessageWithAttachmentsProps) {\n if (attachments.length === 0 && !children) return null;\n\n return (\n <motion.div\n initial={{ opacity: 0, y: 6 }}\n animate={{ opacity: 1, y: 0 }}\n className={cn('space-y-2', className)}\n >\n {/* Attachments */}\n {attachments.length > 0 && (\n <div\n className={cn(\n 'flex gap-2',\n variant === 'card' ? 'flex-col' : 'flex-wrap'\n )}\n >\n {attachments.map((attachment) => (\n <AttachmentPreview\n key={attachment.id}\n attachment={attachment}\n onClick={onAttachmentClick}\n variant={variant}\n />\n ))}\n </div>\n )}\n\n {/* Message content */}\n {children && (\n <div className=\"rounded-lg bg-muted/50 px-3 py-2.5 text-sm leading-relaxed\">\n {children}\n </div>\n )}\n </motion.div>\n );\n}\n","'use client';\n\nimport { BotIcon, UserIcon } from 'lucide-react';\nimport { Avatar as AvatarRoot, AvatarFallback, AvatarImage } from '../../ui/avatar';\nimport { cn, getInitials } from '../../core/utils';\nimport type { MessageRole, AgentPersona } from '../../core/types';\n\nexport interface AgentAvatarProps {\n role: MessageRole;\n /** For assistant, optionally pass persona */\n persona?: AgentPersona;\n /** For user, optionally pass name */\n name?: string;\n /** Custom image URL */\n src?: string;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\nconst sizeClasses = {\n sm: 'size-6',\n md: 'size-8',\n lg: 'size-10',\n};\n\nconst iconSizes = {\n sm: 'size-3',\n md: 'size-4',\n lg: 'size-5',\n};\n\nexport function AgentAvatar({\n role,\n persona,\n name,\n src,\n size = 'md',\n className,\n}: AgentAvatarProps) {\n const imageUrl = src || persona?.avatar;\n const displayName = name || persona?.name || (role === 'assistant' ? 'AI' : 'You');\n \n return (\n <AvatarRoot className={cn(sizeClasses[size], 'shrink-0', className)}>\n {imageUrl && <AvatarImage src={imageUrl} alt={displayName} />}\n <AvatarFallback\n className={cn(\n role === 'assistant' && 'bg-foreground text-background',\n role === 'user' && 'bg-muted text-muted-foreground',\n role === 'system' && 'bg-amber-500/20 text-amber-600'\n )}\n >\n {role === 'assistant' ? (\n <BotIcon className={iconSizes[size]} />\n ) : role === 'user' ? (\n name ? (\n <span className=\"text-[10px] font-medium\">{getInitials(name)}</span>\n ) : (\n <UserIcon className={iconSizes[size]} />\n )\n ) : (\n <span className=\"text-[10px] font-medium\">SYS</span>\n )}\n </AvatarFallback>\n </AvatarRoot>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { cn } from '../../core/utils';\nimport { MessageContainer, MessageBubble, MessageContent } from '../primitives/message';\nimport { AgentAvatar } from '../primitives/avatar';\n\nexport interface ConversationArtifactProps {\n /** Rich content (a data-display component) rendered inside the assistant turn. */\n children: ReactNode;\n /** Optional intro text shown as a bubble above the artifact. */\n intro?: string;\n /** Optional caption shown below the artifact. */\n caption?: string;\n /** Show the assistant avatar. */\n showAvatar?: boolean;\n className?: string;\n}\n\n/**\n * ConversationArtifact wraps an arbitrary rich-content node (chart, gallery,\n * report, etc.) as an assistant conversation turn so an orchestrator can drop\n * any data-display component directly into a message thread. It reuses the\n * shared message primitives (container + avatar + bubble) so it lines up with\n * the rest of the conversation across every surface. Purely presentational and\n * industry-agnostic — the artifact is supplied via `children`.\n */\nexport function ConversationArtifact({\n children,\n intro,\n caption,\n showAvatar = true,\n className,\n}: ConversationArtifactProps) {\n return (\n <MessageContainer role=\"assistant\" className={className}>\n {showAvatar && <AgentAvatar role=\"assistant\" size=\"sm\" />}\n <div className=\"flex min-w-0 flex-1 flex-col gap-2\">\n {intro && (\n <MessageBubble role=\"assistant\">\n <MessageContent>{intro}</MessageContent>\n </MessageBubble>\n )}\n <div className={cn('w-full min-w-0')}>{children}</div>\n {caption && (\n <p className=\"px-1 text-muted-foreground text-xs\">{caption}</p>\n )}\n </div>\n </MessageContainer>\n );\n}\n\nexport default ConversationArtifact;\n","'use client';\n\nimport { useMemo } from 'react';\nimport { LightbulbIcon, DownloadIcon } from 'lucide-react';\nimport {\n BarChart,\n Bar,\n LineChart,\n Line,\n AreaChart,\n Area,\n PieChart,\n Pie,\n Cell,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n ResponsiveContainer,\n Legend,\n} from 'recharts';\nimport { Button } from '../../ui/button';\nimport { cn } from '../../core/utils';\nimport type { ChartData } from '../../core/types';\n\nexport interface ChartContainerProps {\n /** Chart configuration */\n data: ChartData;\n /** Height of chart */\n height?: number;\n /** Show download button */\n showDownload?: boolean;\n /** Show insight */\n showInsight?: boolean;\n /** Download handler */\n onDownload?: () => void;\n /** Container class */\n className?: string;\n /** Color palette */\n colors?: string[];\n}\n\nconst defaultColors = [\n 'hsl(221, 83%, 53%)', // blue\n 'hsl(142, 71%, 45%)', // green\n 'hsl(262, 83%, 58%)', // purple\n 'hsl(24, 95%, 53%)', // orange\n 'hsl(349, 89%, 60%)', // pink\n 'hsl(47, 96%, 53%)', // yellow\n];\n\nfunction SimpleBarChart({ data, colors }: { data: ChartData; colors: string[] }) {\n const maxValue = Math.max(...data.data.map((d) => d.value));\n\n return (\n <div className=\"space-y-2\">\n {data.data.map((item, index) => {\n const percentage = (item.value / maxValue) * 100;\n return (\n <div key={item.label} className=\"space-y-1\">\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"text-muted-foreground\">{item.label}</span>\n <span className=\"font-medium tabular-nums\">\n {typeof item.value === 'number'\n ? item.value.toLocaleString()\n : item.value}\n </span>\n </div>\n <div className=\"h-2 overflow-hidden rounded-full bg-muted\">\n <div\n className=\"h-full transition-all duration-500\"\n style={{\n width: `${percentage}%`,\n backgroundColor: colors[index % colors.length],\n }}\n />\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction RechartsChart({ data, height, colors }: { data: ChartData; height: number; colors: string[] }) {\n const chartType = data.type;\n\n if (chartType === 'bar') {\n return (\n <ResponsiveContainer width=\"100%\" height={height}>\n <BarChart data={data.data}>\n <CartesianGrid strokeDasharray=\"3 3\" className=\"stroke-muted\" />\n <XAxis\n dataKey=\"label\"\n tick={{ fontSize: 11 }}\n className=\"text-muted-foreground\"\n />\n <YAxis tick={{ fontSize: 11 }} className=\"text-muted-foreground\" />\n <Tooltip\n contentStyle={{\n backgroundColor: 'hsl(var(--card))',\n border: '1px solid hsl(var(--border))',\n borderRadius: '6px',\n fontSize: '12px',\n }}\n />\n <Bar dataKey=\"value\" fill={colors[0]} radius={[4, 4, 0, 0]} />\n </BarChart>\n </ResponsiveContainer>\n );\n }\n\n if (chartType === 'line') {\n return (\n <ResponsiveContainer width=\"100%\" height={height}>\n <LineChart data={data.data}>\n <CartesianGrid strokeDasharray=\"3 3\" className=\"stroke-muted\" />\n <XAxis\n dataKey=\"label\"\n tick={{ fontSize: 11 }}\n className=\"text-muted-foreground\"\n />\n <YAxis tick={{ fontSize: 11 }} className=\"text-muted-foreground\" />\n <Tooltip\n contentStyle={{\n backgroundColor: 'hsl(var(--card))',\n border: '1px solid hsl(var(--border))',\n borderRadius: '6px',\n fontSize: '12px',\n }}\n />\n <Line\n type=\"monotone\"\n dataKey=\"value\"\n stroke={colors[0]}\n strokeWidth={2}\n dot={{ fill: colors[0], strokeWidth: 2 }}\n />\n </LineChart>\n </ResponsiveContainer>\n );\n }\n\n if (chartType === 'area') {\n return (\n <ResponsiveContainer width=\"100%\" height={height}>\n <AreaChart data={data.data}>\n <CartesianGrid strokeDasharray=\"3 3\" className=\"stroke-muted\" />\n <XAxis\n dataKey=\"label\"\n tick={{ fontSize: 11 }}\n className=\"text-muted-foreground\"\n />\n <YAxis tick={{ fontSize: 11 }} className=\"text-muted-foreground\" />\n <Tooltip\n contentStyle={{\n backgroundColor: 'hsl(var(--card))',\n border: '1px solid hsl(var(--border))',\n borderRadius: '6px',\n fontSize: '12px',\n }}\n />\n <Area\n type=\"monotone\"\n dataKey=\"value\"\n stroke={colors[0]}\n fill={`${colors[0]}33`}\n strokeWidth={2}\n />\n </AreaChart>\n </ResponsiveContainer>\n );\n }\n\n if (chartType === 'pie' || chartType === 'donut') {\n const innerRadius = chartType === 'donut' ? 60 : 0;\n return (\n <ResponsiveContainer width=\"100%\" height={height}>\n <PieChart>\n <Pie\n data={data.data}\n dataKey=\"value\"\n nameKey=\"label\"\n cx=\"50%\"\n cy=\"50%\"\n innerRadius={innerRadius}\n outerRadius={80}\n paddingAngle={2}\n >\n {data.data.map((_, index) => (\n <Cell key={`cell-${index}`} fill={colors[index % colors.length]} />\n ))}\n </Pie>\n <Tooltip\n contentStyle={{\n backgroundColor: 'hsl(var(--card))',\n border: '1px solid hsl(var(--border))',\n borderRadius: '6px',\n fontSize: '12px',\n }}\n />\n <Legend\n formatter={(value) => (\n <span className=\"text-xs text-foreground\">{value}</span>\n )}\n />\n </PieChart>\n </ResponsiveContainer>\n );\n }\n\n // Fallback to simple bar chart\n return <SimpleBarChart data={data} colors={colors} />;\n}\n\nexport function ChartContainer({\n data,\n height = 200,\n showDownload = true,\n showInsight = true,\n onDownload,\n className,\n colors = defaultColors,\n}: ChartContainerProps) {\n const useSimpleChart = useMemo(() => {\n // Use simple chart for small data sets or on smaller screens\n return data.data.length <= 5 && data.type === 'bar';\n }, [data.data.length, data.type]);\n\n return (\n <div className={cn('rounded-lg border bg-muted/50 p-4', className)}>\n {/* Header */}\n <div className=\"mb-3 flex items-center justify-between\">\n <h4 className=\"text-sm font-medium\">{data.title}</h4>\n {showDownload && onDownload && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 gap-1 text-xs\"\n onClick={onDownload}\n >\n <DownloadIcon className=\"size-3\" />\n Export\n </Button>\n )}\n </div>\n\n {/* Chart */}\n <div className=\"min-h-[120px]\">\n {useSimpleChart ? (\n <SimpleBarChart data={data} colors={colors} />\n ) : (\n <RechartsChart data={data} height={height} colors={colors} />\n )}\n </div>\n\n {/* Insight */}\n {showInsight && data.insight && (\n <div className=\"mt-3 flex gap-2 rounded-md bg-muted p-2\">\n <LightbulbIcon className=\"size-4 shrink-0 text-amber-500\" />\n <p className=\"text-xs text-muted-foreground\">{data.insight}</p>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { TrendingUpIcon, TrendingDownIcon, MinusIcon } from 'lucide-react';\nimport { motion } from 'motion/react';\nimport { cn, formatNumber } from '../../core/utils';\nimport type { MetricData, TrendDirection } from '../../core/types';\n\nexport interface MetricsGridProps {\n /** Metrics to display */\n metrics: MetricData[];\n /** Number of columns */\n columns?: 2 | 3 | 4;\n /** Container class */\n className?: string;\n /** Variant */\n variant?: 'card' | 'compact';\n}\n\nconst trendIcons: Record<TrendDirection, typeof TrendingUpIcon> = {\n up: TrendingUpIcon,\n down: TrendingDownIcon,\n stable: MinusIcon,\n};\n\nconst trendColors: Record<TrendDirection, string> = {\n up: 'text-emerald-500',\n down: 'text-red-500',\n stable: 'text-muted-foreground',\n};\n\nexport function MetricsGrid({\n metrics,\n columns = 2,\n className,\n variant = 'card',\n}: MetricsGridProps) {\n const gridCols = {\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n 4: 'grid-cols-2 sm:grid-cols-4',\n };\n\n return (\n <div className={cn('grid gap-3', gridCols[columns], className)}>\n {metrics.map((metric, index) => {\n const TrendIcon = metric.trend ? trendIcons[metric.trend.direction] : null;\n\n return (\n <motion.div\n key={metric.id}\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: index * 0.05 }}\n className={cn(\n 'rounded-md',\n variant === 'card' && 'border bg-card p-4',\n variant === 'compact' && 'bg-muted/50 p-3'\n )}\n >\n <p className=\"font-mono text-muted-foreground text-xs\">{metric.label}</p>\n <div className=\"mt-1 flex items-end justify-between\">\n <p className=\"font-semibold text-lg tabular-nums\">\n {typeof metric.value === 'number' ? formatNumber(metric.value) : metric.value}\n </p>\n {metric.trend && TrendIcon && (\n <div\n className={cn(\n 'flex items-center gap-0.5 text-xs',\n trendColors[metric.trend.direction]\n )}\n >\n <TrendIcon className=\"size-3\" />\n <span className=\"tabular-nums\">{metric.trend.value}%</span>\n </div>\n )}\n </div>\n {metric.description && (\n <p className=\"mt-1 text-muted-foreground text-[10px]\">{metric.description}</p>\n )}\n </motion.div>\n );\n })}\n </div>\n );\n}\n","'use client';\n\nimport { useMemo } from 'react';\nimport { ArrowUpDownIcon, ChevronDownIcon, ChevronUpIcon } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport type { TableData, TableColumn } from '../../core/types';\n\nexport interface DataTableProps {\n /** Table data */\n data: TableData;\n /** Sort column */\n sortColumn?: string;\n /** Sort direction */\n sortDirection?: 'asc' | 'desc';\n /** Sort change handler */\n onSort?: (column: string) => void;\n /** Row click handler */\n onRowClick?: (row: Record<string, unknown>) => void;\n /** Container class */\n className?: string;\n /** Compact mode */\n compact?: boolean;\n /** Max height with scroll */\n maxHeight?: number;\n}\n\nfunction formatCellValue(value: unknown, type?: TableColumn['type']): string {\n if (value === null || value === undefined) return '-';\n\n if (type === 'number' && typeof value === 'number') {\n return value.toLocaleString();\n }\n\n if (type === 'date' && (value instanceof Date || typeof value === 'string')) {\n const date = value instanceof Date ? value : new Date(value);\n return date.toLocaleDateString();\n }\n\n if (type === 'boolean') {\n return value ? 'Yes' : 'No';\n }\n\n return String(value);\n}\n\nexport function DataTable({\n data,\n sortColumn,\n sortDirection,\n onSort,\n onRowClick,\n className,\n compact = false,\n maxHeight,\n}: DataTableProps) {\n const sortedRows = useMemo(() => {\n if (!sortColumn || !sortDirection) return data.rows;\n\n return [...data.rows].sort((a, b) => {\n const aVal = a[sortColumn];\n const bVal = b[sortColumn];\n\n if (aVal === bVal) return 0;\n if (aVal === null || aVal === undefined) return 1;\n if (bVal === null || bVal === undefined) return -1;\n\n const comparison = aVal < bVal ? -1 : 1;\n return sortDirection === 'asc' ? comparison : -comparison;\n });\n }, [data.rows, sortColumn, sortDirection]);\n\n const cellPadding = compact ? 'px-2 py-1.5' : 'px-3 py-2';\n const textSize = compact ? 'text-xs' : 'text-sm';\n\n return (\n <div className={cn('overflow-hidden rounded-lg border', className)}>\n {data.title && (\n <div className=\"border-b bg-muted/30 px-3 py-2\">\n <h4 className=\"font-medium text-sm\">{data.title}</h4>\n </div>\n )}\n <div\n className=\"overflow-auto\"\n style={{ maxHeight: maxHeight ? `${maxHeight}px` : undefined }}\n >\n <table className=\"w-full\">\n <thead className=\"bg-muted/50 sticky top-0\">\n <tr>\n {data.columns.map((column) => (\n <th\n key={column.key}\n className={cn(\n cellPadding,\n textSize,\n 'text-left font-medium text-muted-foreground whitespace-nowrap',\n column.align === 'center' && 'text-center',\n column.align === 'right' && 'text-right',\n onSort && 'cursor-pointer hover:text-foreground transition-colors'\n )}\n onClick={() => onSort?.(column.key)}\n >\n <span className=\"inline-flex items-center gap-1\">\n {column.label}\n {onSort && (\n <span className=\"text-muted-foreground/50\">\n {sortColumn === column.key ? (\n sortDirection === 'asc' ? (\n <ChevronUpIcon className=\"size-3\" />\n ) : (\n <ChevronDownIcon className=\"size-3\" />\n )\n ) : (\n <ArrowUpDownIcon className=\"size-3\" />\n )}\n </span>\n )}\n </span>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {sortedRows.map((row, rowIndex) => (\n <tr\n key={rowIndex}\n className={cn(\n 'border-t transition-colors',\n onRowClick && 'cursor-pointer hover:bg-muted/50'\n )}\n onClick={() => onRowClick?.(row)}\n >\n {data.columns.map((column) => (\n <td\n key={column.key}\n className={cn(\n cellPadding,\n textSize,\n 'whitespace-nowrap',\n column.align === 'center' && 'text-center',\n column.align === 'right' && 'text-right',\n column.type === 'number' && 'tabular-nums'\n )}\n >\n {formatCellValue(row[column.key], column.type)}\n </td>\n ))}\n </tr>\n ))}\n {sortedRows.length === 0 && (\n <tr>\n <td\n colSpan={data.columns.length}\n className={cn(cellPadding, 'text-center text-muted-foreground')}\n >\n No data available\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { CheckIcon, Loader2Icon } from 'lucide-react';\nimport { motion } from 'motion/react';\nimport { cn, calculatePercentage } from '../../core/utils';\n\nexport type ProgressStepStatus = 'complete' | 'active' | 'pending' | 'error';\n\nexport interface ProgressStep {\n id: string;\n label: string;\n description?: string;\n status: ProgressStepStatus;\n}\n\nexport interface ProgressTrackerProps {\n /** Steps to display */\n steps: ProgressStep[];\n /** Orientation */\n orientation?: 'horizontal' | 'vertical';\n /** Container class */\n className?: string;\n /** Show progress percentage */\n showPercentage?: boolean;\n /** Compact mode */\n compact?: boolean;\n}\n\nfunction StepIndicator({ status, index }: { status: ProgressStepStatus; index: number }) {\n if (status === 'complete') {\n return (\n <motion.div\n initial={{ scale: 0 }}\n animate={{ scale: 1 }}\n className=\"flex size-6 items-center justify-center rounded-full bg-emerald-500\"\n >\n <CheckIcon className=\"size-3 text-white\" />\n </motion.div>\n );\n }\n\n if (status === 'active') {\n return (\n <div className=\"flex size-6 items-center justify-center rounded-full border-2 border-primary bg-background\">\n <Loader2Icon className=\"size-3 animate-spin text-primary\" />\n </div>\n );\n }\n\n if (status === 'error') {\n return (\n <div className=\"flex size-6 items-center justify-center rounded-full bg-red-500\">\n <span className=\"text-xs font-bold text-white\">!</span>\n </div>\n );\n }\n\n return (\n <div className=\"flex size-6 items-center justify-center rounded-full border-2 border-muted-foreground/30 bg-background\">\n <span className=\"text-[10px] text-muted-foreground\">{index + 1}</span>\n </div>\n );\n}\n\nexport function ProgressTracker({\n steps,\n orientation = 'vertical',\n className,\n showPercentage = true,\n compact = false,\n}: ProgressTrackerProps) {\n const completedSteps = steps.filter((s) => s.status === 'complete').length;\n const progressPercent = calculatePercentage(completedSteps, steps.length);\n\n if (orientation === 'horizontal') {\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n {showPercentage && (\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"text-muted-foreground\">Progress</span>\n <span className=\"font-mono tabular-nums\">{progressPercent}%</span>\n </div>\n )}\n <div className=\"flex items-center gap-2\">\n {steps.map((step, index) => (\n <div key={step.id} className=\"flex flex-1 items-center\">\n <div className=\"flex flex-col items-center\">\n <StepIndicator status={step.status} index={index} />\n {!compact && (\n <span className=\"mt-1 text-center text-[10px] text-muted-foreground max-w-[60px] truncate\">\n {step.label}\n </span>\n )}\n </div>\n {index < steps.length - 1 && (\n <div\n className={cn(\n 'mx-1 h-0.5 flex-1 rounded-full',\n step.status === 'complete' ? 'bg-emerald-500' : 'bg-muted'\n )}\n />\n )}\n </div>\n ))}\n </div>\n </div>\n );\n }\n\n // Vertical orientation\n return (\n <div className={cn('flex flex-col gap-0', className)}>\n {showPercentage && (\n <div className=\"mb-2 flex items-center justify-between text-xs\">\n <span className=\"text-muted-foreground\">\n {completedSteps} of {steps.length} complete\n </span>\n <span className=\"font-mono tabular-nums\">{progressPercent}%</span>\n </div>\n )}\n\n {steps.map((step, index) => {\n const isLast = index === steps.length - 1;\n\n return (\n <div key={step.id} className=\"relative flex gap-3\">\n {/* Connector line */}\n {!isLast && (\n <div\n className={cn(\n 'absolute left-[11px] top-6 w-0.5 h-[calc(100%-12px)]',\n step.status === 'complete' ? 'bg-emerald-500' : 'bg-muted'\n )}\n />\n )}\n\n {/* Step indicator */}\n <div className=\"relative z-10 shrink-0\">\n <StepIndicator status={step.status} index={index} />\n </div>\n\n {/* Step content */}\n <div className={cn('min-w-0 flex-1', !isLast && 'pb-4')}>\n <p\n className={cn(\n 'font-medium text-sm',\n step.status === 'pending' && 'text-muted-foreground'\n )}\n >\n {step.label}\n </p>\n {step.description && !compact && (\n <p className=\"mt-0.5 text-xs text-muted-foreground\">{step.description}</p>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n","'use client';\n\nimport { motion } from 'motion/react';\nimport { cn, getSentimentColor, getSentimentBgColor } from '../../core/utils';\nimport type { SentimentScore } from '../../core/types';\n\nexport interface SentimentDisplayProps {\n sentiment: SentimentScore;\n /** Show the per-emotion breakdown bars. */\n showEmotions?: boolean;\n /** Show the numeric confidence. */\n showConfidence?: boolean;\n className?: string;\n}\n\nexport function SentimentDisplay({\n sentiment,\n showEmotions = true,\n showConfidence = true,\n className,\n}: SentimentDisplayProps) {\n // Map overall score (-1..1) to a 0..100 position on the meter.\n const position = ((sentiment.overall + 1) / 2) * 100;\n\n return (\n <div className={cn('rounded-lg border bg-card p-4', className)}>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm font-medium\">Sentiment</span>\n <span\n className={cn(\n 'rounded-full px-2 py-0.5 text-xs font-medium capitalize',\n getSentimentBgColor(sentiment.label),\n getSentimentColor(sentiment.label)\n )}\n >\n {sentiment.label}\n </span>\n </div>\n\n {/* Meter */}\n <div className=\"mt-3\">\n <div className=\"relative h-2 w-full overflow-hidden rounded-full bg-gradient-to-r from-red-500/40 via-muted to-emerald-500/40\">\n <motion.div\n initial={{ left: '50%' }}\n animate={{ left: `${position}%` }}\n transition={{ type: 'spring', stiffness: 120, damping: 18 }}\n className=\"absolute top-1/2 size-3 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-background bg-foreground shadow\"\n />\n </div>\n <div className=\"mt-1 flex justify-between text-[10px] text-muted-foreground\">\n <span>Negative</span>\n <span>Neutral</span>\n <span>Positive</span>\n </div>\n </div>\n\n {showConfidence && (\n <p className=\"mt-2 text-xs text-muted-foreground\">\n Confidence: {Math.round(sentiment.confidence * 100)}%\n </p>\n )}\n\n {showEmotions && sentiment.emotions && sentiment.emotions.length > 0 && (\n <div className=\"mt-3 space-y-2\">\n {sentiment.emotions.map((emotion) => (\n <div key={emotion.emotion} className=\"space-y-1\">\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"capitalize text-muted-foreground\">{emotion.emotion}</span>\n <span className=\"tabular-nums\">{Math.round(emotion.score * 100)}%</span>\n </div>\n <div className=\"h-1.5 w-full overflow-hidden rounded-full bg-muted\">\n <motion.div\n initial={{ width: 0 }}\n animate={{ width: `${emotion.score * 100}%` }}\n transition={{ duration: 0.4 }}\n className=\"h-full rounded-full\"\n style={{ backgroundColor: emotion.color ?? 'hsl(var(--foreground))' }}\n />\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nexport default SentimentDisplay;\n","'use client';\n\nimport { useMemo, useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n ImageIcon,\n FileIcon,\n FileTextIcon,\n LinkIcon,\n PlayIcon,\n DownloadIcon,\n ExternalLinkIcon,\n XIcon,\n} from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Button } from '../../ui/button';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport type MediaKind = 'image' | 'video' | 'file' | 'link';\n\nexport interface MediaItem {\n id: string;\n kind: MediaKind;\n /** Title/filename shown under or over the item. */\n label: string;\n /** Thumbnail/preview image URL (images & video). */\n thumbnailUrl?: string;\n /** Full-size/source URL for preview, download, or open. */\n url?: string;\n /** Secondary line (size, domain, author, date, etc.). */\n meta?: string;\n /** Free-form group key used by the grouping tabs. */\n group?: string;\n /** Solid background swatch for thumbnail-less items. */\n swatchClassName?: string;\n}\n\nexport interface MediaGalleryProps {\n items: MediaItem[];\n /** Group items into filter tabs by `group` (falls back to kind). */\n groupBy?: 'group' | 'kind' | 'none';\n /** Number of columns in the image/video grid. */\n columns?: 2 | 3 | 4;\n /** Open a lightbox/preview when an item is activated. */\n enablePreview?: boolean;\n /** Per-item primary action (download/open). Renders a button when provided. */\n onItemAction?: (item: MediaItem) => void;\n /** Item click handler (fires alongside preview). */\n onItemClick?: (item: MediaItem) => void;\n /** Footer \"view all\" action. */\n onViewAll?: () => void;\n className?: string;\n}\n\nconst kindIcon: Record<MediaKind, typeof FileIcon> = {\n image: ImageIcon,\n video: PlayIcon,\n file: FileTextIcon,\n link: LinkIcon,\n};\n\nfunction isGridKind(kind: MediaKind) {\n return kind === 'image' || kind === 'video';\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function MediaGallery({\n items,\n groupBy = 'group',\n columns = 3,\n enablePreview = true,\n onItemAction,\n onItemClick,\n onViewAll,\n className,\n}: MediaGalleryProps) {\n const groups = useMemo(() => {\n if (groupBy === 'none') return [] as string[];\n const key = groupBy === 'kind' ? 'kind' : 'group';\n const seen: string[] = [];\n for (const item of items) {\n const value = key === 'kind' ? item.kind : item.group ?? item.kind;\n if (!seen.includes(value)) seen.push(value);\n }\n return seen;\n }, [items, groupBy]);\n\n const [activeGroup, setActiveGroup] = useState<string | null>(groups[0] ?? null);\n const [previewItem, setPreviewItem] = useState<MediaItem | null>(null);\n\n const visibleItems = useMemo(() => {\n if (groupBy === 'none' || activeGroup === null) return items;\n const key = groupBy === 'kind' ? 'kind' : 'group';\n return items.filter((item) =>\n key === 'kind' ? item.kind === activeGroup : (item.group ?? item.kind) === activeGroup\n );\n }, [items, groupBy, activeGroup]);\n\n const gridCols = { 2: 'grid-cols-2', 3: 'grid-cols-3', 4: 'grid-cols-4' };\n\n const handleActivate = (item: MediaItem) => {\n onItemClick?.(item);\n if (enablePreview && isGridKind(item.kind)) setPreviewItem(item);\n };\n\n const gridItems = visibleItems.filter((i) => isGridKind(i.kind));\n const listItems = visibleItems.filter((i) => !isGridKind(i.kind));\n\n return (\n <div className={cn('flex flex-col overflow-hidden rounded-lg border bg-card', className)}>\n {/* Group tabs */}\n {groupBy !== 'none' && groups.length > 0 && (\n <div className=\"flex border-b\">\n {groups.map((group) => {\n const count = items.filter((item) =>\n (groupBy === 'kind' ? item.kind : item.group ?? item.kind) === group\n ).length;\n const active = activeGroup === group;\n return (\n <button\n key={group}\n type=\"button\"\n onClick={() => setActiveGroup(group)}\n className={cn(\n 'flex flex-1 items-center justify-center gap-1.5 px-3 py-2.5 text-xs capitalize transition-colors',\n active\n ? 'border-b-2 border-foreground font-medium text-foreground'\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n {group}\n <span\n className={cn(\n 'rounded-full px-1.5 py-0.5 text-[10px] tabular-nums',\n active ? 'bg-foreground text-background' : 'bg-muted text-muted-foreground'\n )}\n >\n {count}\n </span>\n </button>\n );\n })}\n </div>\n )}\n\n {/* Content */}\n <div className=\"flex-1 overflow-y-auto\">\n {gridItems.length > 0 && (\n <div className=\"p-3\">\n <div className={cn('grid gap-1.5', gridCols[columns])}>\n {gridItems.map((item) => (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => handleActivate(item)}\n className=\"group relative block\"\n >\n <div\n className={cn(\n 'flex aspect-square items-center justify-center overflow-hidden rounded-md',\n item.swatchClassName ?? 'bg-muted'\n )}\n >\n {item.thumbnailUrl ? (\n <img\n src={item.thumbnailUrl}\n alt={item.label}\n className=\"size-full object-cover\"\n />\n ) : (\n (() => {\n const Icon = kindIcon[item.kind];\n return <Icon className=\"size-5 text-muted-foreground/40\" />;\n })()\n )}\n {item.kind === 'video' && (\n <span className=\"absolute inset-0 flex items-center justify-center\">\n <span className=\"flex size-8 items-center justify-center rounded-full bg-black/50\">\n <PlayIcon className=\"size-4 text-white\" />\n </span>\n </span>\n )}\n </div>\n <div className=\"pointer-events-none absolute inset-0 flex flex-col justify-end rounded-md p-2 opacity-0 transition-all group-hover:bg-black/40 group-hover:opacity-100\">\n <span className=\"truncate text-left font-medium text-[10px] text-white\">\n {item.label}\n </span>\n {item.meta && <span className=\"text-left text-[10px] text-white/70\">{item.meta}</span>}\n </div>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {listItems.map((item, index) => {\n const Icon = kindIcon[item.kind];\n const isLast = index === listItems.length - 1;\n return (\n <div\n key={item.id}\n onClick={() => handleActivate(item)}\n className={cn(\n 'flex items-center gap-3 px-4 py-3 transition-colors',\n onItemClick && 'cursor-pointer hover:bg-muted/50',\n !isLast && 'border-b'\n )}\n >\n <div className=\"flex size-9 shrink-0 items-center justify-center rounded-md bg-muted/50\">\n <Icon className=\"size-4 text-muted-foreground\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <span className=\"block truncate font-medium text-sm\">{item.label}</span>\n {item.meta && <p className=\"mt-0.5 truncate text-muted-foreground text-xs\">{item.meta}</p>}\n </div>\n {onItemAction && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 shrink-0 text-muted-foreground hover:text-foreground\"\n onClick={(e) => {\n e.stopPropagation();\n onItemAction(item);\n }}\n >\n {item.kind === 'link' ? (\n <ExternalLinkIcon className=\"size-3.5\" />\n ) : (\n <DownloadIcon className=\"size-3.5\" />\n )}\n </Button>\n )}\n </div>\n );\n })}\n\n {visibleItems.length === 0 && (\n <div className=\"p-8 text-center text-sm text-muted-foreground\">No items</div>\n )}\n </div>\n\n {/* Footer */}\n {onViewAll && (\n <div className=\"flex items-center justify-between border-t px-4 py-3\">\n <span className=\"text-muted-foreground text-xs\">{visibleItems.length} items</span>\n <Button variant=\"outline\" size=\"sm\" className=\"h-7 text-xs\" onClick={onViewAll}>\n View all\n </Button>\n </div>\n )}\n\n {/* Lightbox / preview */}\n <AnimatePresence>\n {previewItem && (\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n onClick={() => setPreviewItem(null)}\n className=\"absolute inset-0 z-20 flex items-center justify-center bg-black/70 p-6\"\n >\n <motion.div\n initial={{ scale: 0.96 }}\n animate={{ scale: 1 }}\n exit={{ scale: 0.96 }}\n onClick={(e) => e.stopPropagation()}\n className=\"relative max-h-full w-full max-w-lg overflow-hidden rounded-lg bg-card\"\n >\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"absolute right-2 top-2 z-10 size-7\"\n onClick={() => setPreviewItem(null)}\n >\n <XIcon className=\"size-4\" />\n </Button>\n <div className=\"flex aspect-video items-center justify-center bg-muted\">\n {previewItem.thumbnailUrl ? (\n <img\n src={previewItem.url ?? previewItem.thumbnailUrl}\n alt={previewItem.label}\n className=\"size-full object-contain\"\n />\n ) : (\n <ImageIcon className=\"size-10 text-muted-foreground/30\" />\n )}\n </div>\n <div className=\"flex items-center justify-between gap-3 px-4 py-3\">\n <div className=\"min-w-0\">\n <p className=\"truncate font-medium text-sm\">{previewItem.label}</p>\n {previewItem.meta && (\n <p className=\"truncate text-muted-foreground text-xs\">{previewItem.meta}</p>\n )}\n </div>\n {onItemAction && (\n <Button size=\"sm\" className=\"h-7 gap-1.5 text-xs\" onClick={() => onItemAction(previewItem)}>\n <DownloadIcon className=\"size-3\" />\n Save\n </Button>\n )}\n </div>\n </motion.div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n}\n\nexport default MediaGallery;\n","'use client';\n\nimport * as React from 'react';\nimport * as ProgressPrimitive from '@radix-ui/react-progress';\nimport { cn } from '../core/utils';\n\nconst Progress = React.forwardRef<\n React.ComponentRef<typeof ProgressPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>\n>(({ className, value, ...props }, ref) => (\n <ProgressPrimitive.Root\n ref={ref}\n className={cn(\n \"relative h-2 w-full overflow-hidden rounded-full bg-primary/20\",\n className\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className=\"h-full w-full flex-1 bg-primary transition-all\"\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n));\nProgress.displayName = ProgressPrimitive.Root.displayName;\n\nexport { Progress };\n","'use client';\n\nimport { motion } from 'motion/react';\nimport { cn } from '../../core/utils';\nimport { Badge } from '../../ui/badge';\nimport { Progress } from '../../ui/progress';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface AllocationSegment {\n id: string;\n /** Segment label. */\n label: string;\n /** Optional secondary descriptor. */\n description?: string;\n /** Weight (0-100). Rows are sorted as provided. */\n weight: number;\n /** Optional formatted magnitude (e.g. \"$50K\", \"1.2k units\"). */\n amount?: string;\n /** Optional signed delta shown with tone (e.g. \"+12.3%\"). */\n delta?: number;\n /** Categorical tag rendered as a badge. */\n tag?: string;\n /** Tag tone. */\n tone?: 'neutral' | 'positive' | 'warning' | 'negative';\n /** Bar fill color class (defaults to a palette by index). */\n colorClassName?: string;\n}\n\nexport interface AllocationSummaryStat {\n label: string;\n value: string;\n}\n\nexport interface AllocationBreakdownProps {\n segments: AllocationSegment[];\n /** Optional headline stats grid shown above the rows. */\n summary?: AllocationSummaryStat[];\n /** Show the proportional stacked bar at the top. */\n showStackedBar?: boolean;\n className?: string;\n}\n\nconst toneText: Record<string, string> = {\n neutral: 'text-muted-foreground',\n positive: 'text-emerald-600',\n warning: 'text-amber-600',\n negative: 'text-red-600',\n};\n\nconst palette = [\n 'bg-foreground',\n 'bg-blue-500',\n 'bg-emerald-500',\n 'bg-amber-500',\n 'bg-violet-500',\n 'bg-rose-500',\n];\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function AllocationBreakdown({\n segments,\n summary,\n showStackedBar = true,\n className,\n}: AllocationBreakdownProps) {\n const total = segments.reduce((sum, s) => sum + s.weight, 0) || 1;\n\n return (\n <div className={cn('rounded-lg border bg-card', className)}>\n {summary && summary.length > 0 && (\n <div\n className=\"grid gap-3 border-b p-4\"\n style={{ gridTemplateColumns: `repeat(${summary.length}, minmax(0, 1fr))` }}\n >\n {summary.map((stat) => (\n <div key={stat.label} className=\"rounded-md bg-muted/50 p-2\">\n <span className=\"text-xs text-muted-foreground\">{stat.label}</span>\n <p className=\"mt-1 text-lg font-semibold tabular-nums\">{stat.value}</p>\n </div>\n ))}\n </div>\n )}\n\n <div className=\"space-y-3 p-4\">\n {showStackedBar && (\n <div className=\"flex h-2.5 w-full overflow-hidden rounded-full bg-muted\">\n {segments.map((segment, index) => (\n <motion.div\n key={segment.id}\n initial={{ width: 0 }}\n animate={{ width: `${(segment.weight / total) * 100}%` }}\n transition={{ duration: 0.4, delay: index * 0.05 }}\n className={cn(segment.colorClassName ?? palette[index % palette.length])}\n />\n ))}\n </div>\n )}\n\n <div className=\"space-y-2.5\">\n {segments.map((segment, index) => (\n <div key={segment.id} className=\"rounded-md border bg-card p-2.5\">\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <span\n className={cn(\n 'size-2.5 shrink-0 rounded-full',\n segment.colorClassName ?? palette[index % palette.length]\n )}\n />\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"truncate text-sm font-medium\">{segment.label}</span>\n {segment.tag && (\n <Badge variant=\"secondary\" className={cn('text-xs', toneText[segment.tone ?? 'neutral'])}>\n {segment.tag}\n </Badge>\n )}\n </div>\n {segment.description && (\n <p className=\"mt-0.5 truncate text-xs text-muted-foreground\">\n {segment.description}\n </p>\n )}\n </div>\n </div>\n <div className=\"shrink-0 text-right\">\n {segment.amount && (\n <p className=\"text-sm font-medium tabular-nums\">{segment.amount}</p>\n )}\n {segment.delta !== undefined && (\n <p\n className={cn(\n 'text-xs tabular-nums',\n segment.delta >= 0 ? 'text-emerald-600' : 'text-red-600'\n )}\n >\n {segment.delta > 0 ? '+' : ''}\n {segment.delta}%\n </p>\n )}\n </div>\n </div>\n <div className=\"mt-2\">\n <div className=\"flex items-center justify-between text-xs text-muted-foreground\">\n <span>Weight</span>\n <span className=\"tabular-nums\">{segment.weight}%</span>\n </div>\n <Progress value={segment.weight} className=\"mt-1 h-1.5\" />\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n}\n\nexport default AllocationBreakdown;\n","'use client';\n\nimport { motion } from 'motion/react';\nimport { ArrowDownIcon, ArrowUpIcon } from 'lucide-react';\nimport { cn } from '../../core/utils';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport type TrendTone = 'positive' | 'negative' | 'neutral';\n\nexport interface AnalyticsTrend {\n /** Magnitude shown next to the arrow (e.g. 12.4 → \"12.4%\"). */\n value: number;\n /** Visual direction of the arrow. Defaults to value sign. */\n direction?: 'up' | 'down';\n /** Color treatment; lets \"down is good\" cases stay green. */\n tone?: TrendTone;\n}\n\nexport interface AnalyticsMetric {\n id: string;\n label: string;\n value: string | number;\n /** Optional suffix rendered after the value (e.g. \"/5\"). */\n unit?: string;\n icon?: React.ReactNode;\n trend?: AnalyticsTrend;\n}\n\nexport interface AnalyticsDistributionSegment {\n id: string;\n label: string;\n /** Percentage of the whole (0–100). */\n value: number;\n /** Tailwind background class for bar + legend dot. */\n colorClassName?: string;\n}\n\nexport interface AnalyticsHighlight {\n label: string;\n /** Big formatted value, e.g. \"87%\". */\n value: string;\n /** Progress fill 0–100. Defaults to a numeric parse of value. */\n progress?: number;\n icon?: React.ReactNode;\n trend?: AnalyticsTrend;\n colorClassName?: string;\n}\n\nexport interface AnalyticsBreakdownRow {\n id: string;\n label: string;\n /** Bar fill 0–100. */\n percentage: number;\n /** Secondary count/measure rendered on the right. */\n count?: string | number;\n trend?: AnalyticsTrend;\n}\n\nexport interface AnalyticsRankedRow {\n id: string;\n label: string;\n /** Bar fill 0–100. */\n percentage: number;\n /** Right-aligned value label (e.g. \"0.8s\"). */\n value: string;\n colorClassName?: string;\n}\n\nexport interface AnalyticsRecentItem {\n id: string;\n label: string;\n /** Category/secondary label. */\n category?: string;\n /** Status dot tone. */\n tone?: TrendTone;\n /** Right-aligned meta fields (e.g. [\"12 msgs\", \"4m 22s\"]). */\n meta?: string[];\n /** Optional 0–5 rating rendered as filled/empty dots. */\n rating?: number;\n /** Relative time label (e.g. \"5 min ago\"). */\n time?: string;\n}\n\nexport interface AnalyticsDashboardProps {\n /** Header title. */\n title?: string;\n /** Range pill text (e.g. \"Last 30 days\"). */\n range?: string;\n /** Right-aligned summary count text (e.g. \"2,847 records\"). */\n summary?: string;\n /** Top KPI cards (typically 3). */\n metrics?: AnalyticsMetric[];\n /** Distribution segmented bar. */\n distribution?: AnalyticsDistributionSegment[];\n /** Label for the distribution block. */\n distributionLabel?: string;\n /** Highlighted single % metric beside the distribution. */\n highlight?: AnalyticsHighlight;\n /** Left \"breakdown\" list. */\n breakdown?: AnalyticsBreakdownRow[];\n breakdownLabel?: string;\n /** Right \"ranked / percentile\" list. */\n ranked?: AnalyticsRankedRow[];\n rankedLabel?: string;\n /** Bottom recent-items list. */\n recentItems?: AnalyticsRecentItem[];\n recentLabel?: string;\n className?: string;\n}\n\n// ============================================================================\n// HELPERS\n// ============================================================================\n\nconst TONE_DOT: Record<TrendTone, string> = {\n positive: 'bg-emerald-500',\n negative: 'bg-red-500',\n neutral: 'bg-muted-foreground/40',\n};\n\nfunction resolveTrend(trend: AnalyticsTrend) {\n const direction = trend.direction ?? (trend.value < 0 ? 'down' : 'up');\n const tone: TrendTone =\n trend.tone ?? (direction === 'up' ? 'positive' : 'negative');\n return { direction, tone };\n}\n\nfunction TrendIndicator({ trend }: { trend: AnalyticsTrend }) {\n const { direction, tone } = resolveTrend(trend);\n return (\n <span\n className={cn(\n 'flex items-center gap-0.5 text-[11px] tabular-nums',\n tone === 'positive' && 'text-emerald-600',\n tone === 'negative' && 'text-red-600',\n tone === 'neutral' && 'text-muted-foreground'\n )}\n >\n {direction === 'up' ? (\n <ArrowUpIcon className=\"size-2.5\" />\n ) : (\n <ArrowDownIcon className=\"size-2.5\" />\n )}\n {Math.abs(trend.value)}%\n </span>\n );\n}\n\nfunction numericFromValue(value: string): number {\n const parsed = Number.parseFloat(value.replace(/[^0-9.]/g, ''));\n return Number.isFinite(parsed) ? Math.min(100, Math.max(0, parsed)) : 0;\n}\n\n// ============================================================================\n// DEFAULTS (abstract / generic)\n// ============================================================================\n\nconst defaultMetrics: AnalyticsMetric[] = [\n { id: 'm1', label: 'Metric One', value: '2,847', trend: { value: 12.4 } },\n { id: 'm2', label: 'Metric Two', value: '1.8s', trend: { value: 8.2, direction: 'down', tone: 'positive' } },\n { id: 'm3', label: 'Metric Three', value: '4.2', unit: '/5', trend: { value: 3.1 } },\n];\n\nconst defaultDistribution: AnalyticsDistributionSegment[] = [\n { id: 'a', label: 'Segment A', value: 68, colorClassName: 'bg-emerald-500' },\n { id: 'b', label: 'Segment B', value: 24, colorClassName: 'bg-muted-foreground/30' },\n { id: 'c', label: 'Segment C', value: 8, colorClassName: 'bg-red-500' },\n];\n\nconst defaultHighlight: AnalyticsHighlight = {\n label: 'Highlight',\n value: '87%',\n trend: { value: 2.8 },\n colorClassName: 'bg-emerald-500',\n};\n\nconst defaultBreakdown: AnalyticsBreakdownRow[] = [\n { id: 'b1', label: 'Category A', percentage: 31, count: 892, trend: { value: 2.1 } },\n { id: 'b2', label: 'Category B', percentage: 24, count: 684 },\n { id: 'b3', label: 'Category C', percentage: 19, count: 541, trend: { value: 1.4 } },\n { id: 'b4', label: 'Category D', percentage: 14, count: 398, trend: { value: 0.9, direction: 'down' } },\n { id: 'b5', label: 'Category E', percentage: 12, count: 332, trend: { value: 0.6 } },\n];\n\nconst defaultRanked: AnalyticsRankedRow[] = [\n { id: 'r1', label: 'Tier 1', percentage: 18, value: '0.8s' },\n { id: 'r2', label: 'Tier 2', percentage: 32, value: '1.4s' },\n { id: 'r3', label: 'Tier 3', percentage: 52, value: '2.3s' },\n { id: 'r4', label: 'Tier 4', percentage: 78, value: '3.8s' },\n { id: 'r5', label: 'Tier 5', percentage: 96, value: '6.1s' },\n];\n\nconst defaultRecentItems: AnalyticsRecentItem[] = [\n { id: 'i1', label: 'Item One', category: 'Category A', tone: 'positive', meta: ['12 units', '4m 22s'], rating: 5, time: '5 min ago' },\n { id: 'i2', label: 'Item Two', category: 'Category C', tone: 'positive', meta: ['8 units', '2m 48s'], rating: 4, time: '18 min ago' },\n { id: 'i3', label: 'Item Three', category: 'Category B', tone: 'neutral', meta: ['5 units', '1m 15s'], rating: 3, time: '32 min ago' },\n { id: 'i4', label: 'Item Four', category: 'Category E', tone: 'positive', meta: ['15 units', '8m 05s'], rating: 5, time: '1 hr ago' },\n];\n\n// ============================================================================\n// SUB-BLOCKS\n// ============================================================================\n\nfunction MetricCard({ metric, index }: { metric: AnalyticsMetric; index: number }) {\n return (\n <motion.div\n initial={{ opacity: 0, y: 6 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: index * 0.04 }}\n className=\"px-5 py-4\"\n >\n <div className=\"flex items-center gap-2 text-muted-foreground\">\n {metric.icon}\n <span className=\"text-xs\">{metric.label}</span>\n </div>\n <div className=\"mt-2 flex items-baseline gap-2\">\n <span className=\"font-semibold text-2xl tabular-nums\">{metric.value}</span>\n {metric.unit && <span className=\"text-muted-foreground text-xs\">{metric.unit}</span>}\n {metric.trend && <TrendIndicator trend={metric.trend} />}\n </div>\n </motion.div>\n );\n}\n\nfunction DistributionBlock({\n label,\n segments,\n}: {\n label: string;\n segments: AnalyticsDistributionSegment[];\n}) {\n return (\n <div className=\"px-5 py-4\">\n <span className=\"font-medium text-muted-foreground text-xs\">{label}</span>\n <div className=\"mt-3 flex h-3 overflow-hidden rounded-full\">\n {segments.map((seg) => (\n <div\n key={seg.id}\n className={cn('h-full', seg.colorClassName ?? 'bg-foreground/40')}\n style={{ width: `${seg.value}%` }}\n />\n ))}\n </div>\n <div className=\"mt-3 flex flex-wrap items-center gap-x-4 gap-y-1.5\">\n {segments.map((seg) => (\n <span key={seg.id} className=\"flex items-center gap-1.5 text-xs\">\n <span className={cn('size-1.5 rounded-full', seg.colorClassName ?? 'bg-foreground/40')} />\n <span className=\"text-muted-foreground\">{seg.label}</span>\n <span className=\"font-mono tabular-nums\">{seg.value}%</span>\n </span>\n ))}\n </div>\n </div>\n );\n}\n\nfunction HighlightBlock({ highlight }: { highlight: AnalyticsHighlight }) {\n const progress = highlight.progress ?? numericFromValue(highlight.value);\n return (\n <div className=\"px-5 py-4\">\n <div className=\"flex items-center gap-2 text-muted-foreground\">\n {highlight.icon}\n <span className=\"text-xs\">{highlight.label}</span>\n </div>\n <div className=\"mt-2 flex items-baseline gap-2\">\n <span className=\"font-semibold text-3xl tabular-nums\">{highlight.value}</span>\n {highlight.trend && <TrendIndicator trend={highlight.trend} />}\n </div>\n <div className=\"mt-3 h-1.5 overflow-hidden rounded-full bg-muted\">\n <motion.div\n initial={{ width: 0 }}\n animate={{ width: `${progress}%` }}\n transition={{ duration: 0.4 }}\n className={cn('h-full rounded-full', highlight.colorClassName ?? 'bg-emerald-500')}\n />\n </div>\n </div>\n );\n}\n\nfunction BreakdownList({\n label,\n rows,\n}: {\n label: string;\n rows: AnalyticsBreakdownRow[];\n}) {\n return (\n <div className=\"px-5 py-4\">\n <span className=\"font-medium text-muted-foreground text-xs\">{label}</span>\n <div className=\"mt-3 space-y-2.5\">\n {rows.map((row) => (\n <div key={row.id} className=\"flex items-center gap-3\">\n <span className=\"w-20 shrink-0 truncate text-xs @md:w-28\">{row.label}</span>\n <div className=\"h-1.5 flex-1 overflow-hidden rounded-full bg-muted\">\n <div className=\"h-full rounded-full bg-muted-foreground/40\" style={{ width: `${row.percentage}%` }} />\n </div>\n <span className=\"w-8 shrink-0 text-right text-muted-foreground text-xs tabular-nums\">{row.percentage}%</span>\n {row.count !== undefined && (\n <span className=\"w-10 shrink-0 text-right text-xs tabular-nums\">{row.count}</span>\n )}\n <span className=\"w-3 shrink-0\">\n {row.trend && <TrendIndicator trend={row.trend} />}\n </span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nfunction RankedList({\n label,\n rows,\n}: {\n label: string;\n rows: AnalyticsRankedRow[];\n}) {\n return (\n <div className=\"px-5 py-4\">\n <span className=\"font-medium text-muted-foreground text-xs\">{label}</span>\n <div className=\"mt-3 space-y-2.5\">\n {rows.map((row) => (\n <div key={row.id} className=\"flex items-center gap-3\">\n <span className=\"w-10 shrink-0 text-muted-foreground text-xs\">{row.label}</span>\n <div className=\"h-1.5 flex-1 overflow-hidden rounded-full bg-muted\">\n <div\n className={cn('h-full rounded-full', row.colorClassName ?? 'bg-sky-400/70')}\n style={{ width: `${row.percentage}%` }}\n />\n </div>\n <span className=\"w-12 shrink-0 text-right text-xs tabular-nums\">{row.value}</span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nfunction RatingDots({ rating }: { rating: number }) {\n return (\n <span className=\"flex items-center gap-0.5\">\n {Array.from({ length: 5 }).map((_, i) => (\n <span\n key={i}\n className={cn(\n 'size-1.5 rounded-full',\n i < Math.round(rating) ? 'bg-foreground' : 'bg-muted-foreground/25'\n )}\n />\n ))}\n </span>\n );\n}\n\nfunction RecentList({\n label,\n items,\n}: {\n label: string;\n items: AnalyticsRecentItem[];\n}) {\n return (\n <div className=\"px-5 py-4\">\n <span className=\"font-medium text-muted-foreground text-xs\">{label}</span>\n <div className=\"mt-3 divide-y\">\n {items.map((item) => (\n <div\n key={item.id}\n className=\"flex flex-col gap-1.5 py-2.5 @md:flex-row @md:items-center @md:gap-3\"\n >\n <div className=\"flex min-w-0 flex-1 items-center gap-2.5\">\n <span className={cn('size-1.5 shrink-0 rounded-full', TONE_DOT[item.tone ?? 'neutral'])} />\n <span className=\"truncate font-medium text-sm\">{item.label}</span>\n {item.category && (\n <span className=\"truncate text-muted-foreground text-xs\">{item.category}</span>\n )}\n </div>\n <div className=\"flex flex-wrap items-center gap-x-3 gap-y-1 pl-4 text-muted-foreground text-xs tabular-nums @md:justify-end @md:pl-0\">\n {item.meta?.map((m, i) => (\n <span key={i}>{m}</span>\n ))}\n {item.rating !== undefined && <RatingDots rating={item.rating} />}\n {item.time && <span className=\"whitespace-nowrap\">{item.time}</span>}\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\n/**\n * AnalyticsDashboard renders a polished, fully responsive analytics report:\n * a header with range pill + summary, KPI cards, a distribution bar + a\n * highlighted metric, a two-column breakdown/ranked pair, and a recent-items\n * list. Every multi-column row collapses to a single column on narrow surfaces\n * (panel/widget/split). All content is prop-driven and industry-agnostic.\n */\nexport function AnalyticsDashboard({\n title = 'Analytics',\n range = 'Last 30 days',\n summary,\n metrics = defaultMetrics,\n distribution = defaultDistribution,\n distributionLabel = 'Distribution',\n highlight = defaultHighlight,\n breakdown = defaultBreakdown,\n breakdownLabel = 'Breakdown',\n ranked = defaultRanked,\n rankedLabel = 'Ranked',\n recentItems = defaultRecentItems,\n recentLabel = 'Recent items',\n className,\n}: AnalyticsDashboardProps) {\n return (\n <div className={cn('@container overflow-hidden rounded-xl border bg-card', className)}>\n {/* Header */}\n <div className=\"flex flex-wrap items-center justify-between gap-2 px-5 pt-5 pb-4\">\n <div className=\"flex items-center gap-3\">\n <h3 className=\"font-semibold text-base\">{title}</h3>\n {range && (\n <span className=\"rounded-full bg-muted px-2.5 py-0.5 text-muted-foreground text-xs\">\n {range}\n </span>\n )}\n </div>\n {summary && <span className=\"text-muted-foreground text-sm\">{summary}</span>}\n </div>\n\n {/* KPI cards */}\n {metrics.length > 0 && (\n <div className=\"grid grid-cols-1 border-t divide-y @md:grid-cols-3 @md:divide-x @md:divide-y-0\">\n {metrics.map((metric, i) => (\n <MetricCard key={metric.id} metric={metric} index={i} />\n ))}\n </div>\n )}\n\n {/* Distribution + highlight */}\n {(distribution.length > 0 || highlight) && (\n <div className=\"grid grid-cols-1 border-t divide-y @2xl:grid-cols-3 @2xl:divide-x @2xl:divide-y-0\">\n {distribution.length > 0 && (\n <div className=\"@2xl:col-span-2\">\n <DistributionBlock label={distributionLabel} segments={distribution} />\n </div>\n )}\n {highlight && <HighlightBlock highlight={highlight} />}\n </div>\n )}\n\n {/* Breakdown + ranked */}\n {(breakdown.length > 0 || ranked.length > 0) && (\n <div className=\"grid grid-cols-1 border-t divide-y @xl:grid-cols-2 @xl:divide-x @xl:divide-y-0\">\n {breakdown.length > 0 && <BreakdownList label={breakdownLabel} rows={breakdown} />}\n {ranked.length > 0 && <RankedList label={rankedLabel} rows={ranked} />}\n </div>\n )}\n\n {/* Recent items */}\n {recentItems.length > 0 && (\n <div className=\"border-t\">\n <RecentList label={recentLabel} items={recentItems} />\n </div>\n )}\n </div>\n );\n}\n\nexport default AnalyticsDashboard;\n","'use client';\n\nimport { useState } from 'react';\nimport { motion } from 'motion/react';\nimport {\n ImageIcon,\n SparklesIcon,\n WandIcon,\n DownloadIcon,\n CopyIcon,\n ShuffleIcon,\n ArrowUpRightIcon,\n Grid3X3Icon,\n LayoutGridIcon,\n} from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Button } from '../../ui/button';\nimport { Input } from '../../ui/input';\nimport { Badge } from '../../ui/badge';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface StylePreset {\n id: string;\n label: string;\n description?: string;\n}\n\nexport interface AspectRatio {\n id: string;\n label: string;\n value: string;\n dimensions: string;\n}\n\nexport interface GeneratedImage {\n id: string;\n url?: string;\n prompt: string;\n style?: string;\n aspectRatio?: string;\n seed?: string;\n model?: string;\n steps?: number;\n timestamp: Date;\n isFavorite?: boolean;\n}\n\nexport interface ImageGeneratorProps {\n /** Available style presets */\n stylePresets?: StylePreset[];\n /** Available aspect ratios */\n aspectRatios?: AspectRatio[];\n /** Initial prompt value */\n initialPrompt?: string;\n /** Quality options */\n qualityOptions?: Array<{ id: string; label: string }>;\n /** Generated images */\n images?: GeneratedImage[];\n /** Callback when generation is requested */\n onGenerate?: (params: {\n prompt: string;\n style: string;\n aspectRatio: string;\n quality: string;\n }) => void;\n /** Callback when image is selected */\n onSelectImage?: (image: GeneratedImage) => void;\n /** Callback when image is downloaded */\n onDownload?: (image: GeneratedImage) => void;\n /** Callback when seed is copied */\n onCopySeed?: (seed: string) => void;\n /** Callback when shuffle/regenerate is requested */\n onShuffle?: (image: GeneratedImage) => void;\n /** Loading state */\n isGenerating?: boolean;\n /** Custom class name */\n className?: string;\n}\n\n// ============================================================================\n// DEFAULT VALUES\n// ============================================================================\n\nconst defaultStylePresets: StylePreset[] = [\n { id: 'photorealistic', label: 'Photorealistic', description: 'Lifelike photography' },\n { id: 'illustration', label: 'Illustration', description: 'Digital art style' },\n { id: '3d', label: '3D Render', description: 'Cinema 4D look' },\n { id: 'anime', label: 'Anime', description: 'Japanese animation' },\n { id: 'oil-painting', label: 'Oil Painting', description: 'Classical fine art' },\n { id: 'pixel-art', label: 'Pixel Art', description: 'Retro 8-bit style' },\n];\n\nconst defaultAspectRatios: AspectRatio[] = [\n { id: '1:1', label: '1:1', value: '1024x1024', dimensions: '1024 x 1024' },\n { id: '16:9', label: '16:9', value: '1792x1024', dimensions: '1792 x 1024' },\n { id: '9:16', label: '9:16', value: '1024x1792', dimensions: '1024 x 1792' },\n { id: '4:3', label: '4:3', value: '1365x1024', dimensions: '1365 x 1024' },\n];\n\nconst defaultQualityOptions = [\n { id: 'standard', label: 'Standard' },\n { id: 'hd', label: 'HD' },\n];\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function ImageGenerator({\n stylePresets = defaultStylePresets,\n aspectRatios = defaultAspectRatios,\n qualityOptions = defaultQualityOptions,\n initialPrompt = '',\n images = [],\n onGenerate,\n onSelectImage,\n onDownload,\n onCopySeed,\n onShuffle,\n isGenerating = false,\n className,\n}: ImageGeneratorProps) {\n const [prompt, setPrompt] = useState(initialPrompt);\n const [activeStyle, setActiveStyle] = useState(stylePresets[0]?.id || '');\n const [activeRatio, setActiveRatio] = useState(aspectRatios[0]?.id || '');\n const [quality, setQuality] = useState(qualityOptions[1]?.id || 'hd');\n const [selectedImageId, setSelectedImageId] = useState<string | null>(images[0]?.id || null);\n const [copiedSeed, setCopiedSeed] = useState(false);\n const [viewMode, setViewMode] = useState<'grid' | 'bento'>('bento');\n\n const selectedImage = images.find((img) => img.id === selectedImageId);\n\n const handleGenerate = () => {\n onGenerate?.({\n prompt,\n style: activeStyle,\n aspectRatio: activeRatio,\n quality,\n });\n };\n\n const handleCopySeed = () => {\n if (!selectedImage?.seed) return;\n onCopySeed?.(selectedImage.seed);\n setCopiedSeed(true);\n setTimeout(() => setCopiedSeed(false), 2000);\n };\n\n const handleSelectImage = (image: GeneratedImage) => {\n setSelectedImageId(image.id);\n onSelectImage?.(image);\n };\n\n return (\n <div className={cn('overflow-hidden rounded-lg border bg-card', className)}>\n {/* Prompt input */}\n <div className=\"flex items-center gap-2 border-b px-4 py-3\">\n <WandIcon className=\"size-4 shrink-0 text-muted-foreground\" />\n <Input\n value={prompt}\n onChange={(e) => setPrompt(e.target.value)}\n placeholder=\"Describe the image you want to generate...\"\n className=\"h-8 border-0 bg-transparent px-0 shadow-none focus-visible:ring-0\"\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleGenerate();\n }\n }}\n />\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"h-7 shrink-0 gap-1.5 text-xs\"\n onClick={handleGenerate}\n disabled={isGenerating || !prompt.trim()}\n >\n <SparklesIcon className=\"size-3\" />\n {isGenerating ? 'Generating...' : 'Generate'}\n </Button>\n </div>\n\n {/* Controls row */}\n <div className=\"flex flex-wrap items-center gap-3 border-b px-4 py-2.5\">\n {/* Style presets */}\n <div className=\"flex flex-wrap gap-1\">\n {stylePresets.map((style) => (\n <button\n key={style.id}\n type=\"button\"\n onClick={() => setActiveStyle(style.id)}\n className={cn(\n 'rounded-md px-2 py-1 text-xs transition-colors',\n activeStyle === style.id\n ? 'bg-muted font-medium text-foreground'\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n {style.label}\n </button>\n ))}\n </div>\n\n <div className=\"h-4 w-px bg-border\" />\n\n {/* Aspect ratio */}\n <div className=\"flex gap-1\">\n {aspectRatios.map((ratio) => (\n <button\n key={ratio.id}\n type=\"button\"\n onClick={() => setActiveRatio(ratio.id)}\n className={cn(\n 'rounded-md px-2 py-1 font-mono text-xs transition-colors',\n activeRatio === ratio.id\n ? 'bg-muted font-medium text-foreground'\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n {ratio.label}\n </button>\n ))}\n </div>\n\n <div className=\"h-4 w-px bg-border\" />\n\n {/* Quality toggle */}\n <div className=\"flex gap-1\">\n {qualityOptions.map((opt) => (\n <button\n key={opt.id}\n type=\"button\"\n onClick={() => setQuality(opt.id)}\n className={cn(\n 'rounded-md px-2 py-1 text-xs transition-colors',\n quality === opt.id\n ? 'bg-muted font-medium text-foreground'\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n {opt.label}\n </button>\n ))}\n </div>\n\n <div className=\"ml-auto flex gap-1\">\n <button\n type=\"button\"\n onClick={() => setViewMode('bento')}\n className={cn(\n 'rounded-md p-1.5 transition-colors',\n viewMode === 'bento' ? 'bg-muted' : 'hover:bg-muted/50'\n )}\n >\n <LayoutGridIcon className=\"size-4\" />\n </button>\n <button\n type=\"button\"\n onClick={() => setViewMode('grid')}\n className={cn(\n 'rounded-md p-1.5 transition-colors',\n viewMode === 'grid' ? 'bg-muted' : 'hover:bg-muted/50'\n )}\n >\n <Grid3X3Icon className=\"size-4\" />\n </button>\n </div>\n </div>\n\n {/* Image gallery */}\n {images.length > 0 ? (\n <div\n className={cn(\n 'grid gap-px bg-muted',\n viewMode === 'bento' ? 'grid-cols-3' : 'grid-cols-2 sm:grid-cols-3 md:grid-cols-4'\n )}\n >\n {images.map((image, index) => {\n const isSelected = selectedImageId === image.id;\n const isLarge = viewMode === 'bento' && (index === 0 || index === 4);\n\n return (\n <motion.div\n key={image.id}\n initial={{ opacity: 0, scale: 0.96 }}\n animate={{ opacity: 1, scale: 1 }}\n transition={{ duration: 0.25, delay: index * 0.06 }}\n className={cn(\n 'group relative bg-card',\n isLarge ? 'col-span-2 row-span-1' : 'col-span-1'\n )}\n >\n <button\n type=\"button\"\n onClick={() => handleSelectImage(image)}\n className=\"flex w-full items-center justify-center\"\n >\n <div\n className={cn(\n 'flex w-full items-center justify-center bg-muted/30',\n isLarge || viewMode === 'grid' ? 'aspect-square' : 'aspect-square',\n isSelected ? 'ring-2 ring-foreground ring-inset' : ''\n )}\n >\n {image.url ? (\n <img\n src={image.url}\n alt={image.prompt}\n className=\"h-full w-full object-cover\"\n />\n ) : (\n <div className=\"flex flex-col items-center gap-1\">\n <ImageIcon className=\"size-5 text-muted-foreground/20\" />\n <span className=\"text-[10px] text-muted-foreground/30\">\n Image {index + 1}\n </span>\n </div>\n )}\n </div>\n </button>\n\n {/* Hover overlay */}\n <div className=\"pointer-events-none absolute inset-0 flex items-end bg-black/0 p-2 opacity-0 transition-all duration-200 group-hover:pointer-events-auto group-hover:bg-black/40 group-hover:opacity-100\">\n <div className=\"flex w-full items-center justify-between\">\n <div>\n <span className=\"block font-medium text-white text-xs\">\n Image {index + 1}\n </span>\n {image.seed && (\n <span className=\"text-[10px] text-white/60\">Seed: {image.seed}</span>\n )}\n </div>\n <div className=\"flex gap-1\">\n {onDownload && (\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-6 text-white hover:bg-white/20\"\n onClick={(e) => {\n e.stopPropagation();\n onDownload(image);\n }}\n >\n <DownloadIcon className=\"size-3\" />\n </Button>\n )}\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-6 text-white hover:bg-white/20\"\n onClick={(e) => {\n e.stopPropagation();\n // Open in new tab\n }}\n >\n <ArrowUpRightIcon className=\"size-3\" />\n </Button>\n {onShuffle && (\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-6 text-white hover:bg-white/20\"\n onClick={(e) => {\n e.stopPropagation();\n onShuffle(image);\n }}\n >\n <ShuffleIcon className=\"size-3\" />\n </Button>\n )}\n </div>\n </div>\n </div>\n </motion.div>\n );\n })}\n </div>\n ) : (\n <div className=\"flex h-64 items-center justify-center text-muted-foreground\">\n <div className=\"flex flex-col items-center gap-2\">\n <ImageIcon className=\"size-8 opacity-50\" />\n <p className=\"text-sm\">Enter a prompt and click Generate</p>\n </div>\n </div>\n )}\n\n {/* Footer with generation metadata */}\n <div className=\"flex flex-wrap items-center justify-between gap-2 border-t px-4 py-3\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"text-muted-foreground text-xs\">{images.length} images generated</span>\n {activeStyle && (\n <Badge variant=\"secondary\" className=\"font-normal text-xs\">\n {stylePresets.find((s) => s.id === activeStyle)?.label}\n </Badge>\n )}\n {activeRatio && (\n <Badge variant=\"secondary\" className=\"font-mono font-normal text-xs\">\n {aspectRatios.find((r) => r.id === activeRatio)?.dimensions}\n </Badge>\n )}\n <Badge variant=\"secondary\" className=\"font-normal text-xs\">\n {qualityOptions.find((q) => q.id === quality)?.label}\n </Badge>\n </div>\n {selectedImage && (\n <div className=\"flex items-center gap-2\">\n {selectedImage.model && (\n <span className=\"text-muted-foreground text-xs\">\n {selectedImage.model}\n {selectedImage.steps ? ` · ${selectedImage.steps} steps` : ''}\n </span>\n )}\n {selectedImage.seed && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 gap-1 px-2 text-muted-foreground text-xs\"\n onClick={handleCopySeed}\n >\n <CopyIcon className=\"size-2.5\" />\n {copiedSeed ? 'Copied' : `Seed: ${selectedImage.seed}`}\n </Button>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport default ImageGenerator;\n","'use client';\n\nimport { useState } from 'react';\nimport {\n FileTextIcon,\n SparklesIcon,\n WandIcon,\n CopyIcon,\n RotateCcwIcon,\n CheckIcon,\n TypeIcon,\n AlignLeftIcon,\n ListIcon,\n HashIcon,\n} from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Button } from '../../ui/button';\nimport { Badge } from '../../ui/badge';\nimport { Textarea } from '../../ui/textarea';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface WritingTone {\n id: string;\n label: string;\n description?: string;\n}\n\nexport interface WritingFormat {\n id: string;\n label: string;\n icon?: React.ReactNode;\n}\n\nexport interface WritingAction {\n id: string;\n label: string;\n icon?: React.ReactNode;\n description?: string;\n}\n\nexport interface WritingAssistantProps {\n /** Initial content */\n initialContent?: string;\n /** Available tones */\n tones?: WritingTone[];\n /** Available formats */\n formats?: WritingFormat[];\n /** Available actions */\n actions?: WritingAction[];\n /** Callback when content changes */\n onChange?: (content: string) => void;\n /** Callback when action is triggered */\n onAction?: (actionId: string, content: string, options: { tone: string; format: string }) => void;\n /** Loading state */\n isProcessing?: boolean;\n /** Custom class name */\n className?: string;\n}\n\n// ============================================================================\n// DEFAULT VALUES\n// ============================================================================\n\nconst defaultTones: WritingTone[] = [\n { id: 'professional', label: 'Professional', description: 'Formal and business-appropriate' },\n { id: 'casual', label: 'Casual', description: 'Friendly and conversational' },\n { id: 'persuasive', label: 'Persuasive', description: 'Compelling and convincing' },\n { id: 'academic', label: 'Academic', description: 'Scholarly and well-researched' },\n { id: 'creative', label: 'Creative', description: 'Imaginative and expressive' },\n];\n\nconst defaultFormats: WritingFormat[] = [\n { id: 'paragraph', label: 'Paragraph', icon: <AlignLeftIcon className=\"size-3\" /> },\n { id: 'bullet', label: 'Bullet Points', icon: <ListIcon className=\"size-3\" /> },\n { id: 'numbered', label: 'Numbered', icon: <HashIcon className=\"size-3\" /> },\n { id: 'heading', label: 'With Headings', icon: <TypeIcon className=\"size-3\" /> },\n];\n\nconst defaultActions: WritingAction[] = [\n { id: 'improve', label: 'Improve', icon: <SparklesIcon className=\"size-3\" />, description: 'Enhance clarity and flow' },\n { id: 'shorten', label: 'Shorten', icon: <FileTextIcon className=\"size-3\" />, description: 'Make more concise' },\n { id: 'expand', label: 'Expand', icon: <FileTextIcon className=\"size-3\" />, description: 'Add more detail' },\n { id: 'rewrite', label: 'Rewrite', icon: <RotateCcwIcon className=\"size-3\" />, description: 'Complete rewrite' },\n];\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function WritingAssistant({\n initialContent = '',\n tones = defaultTones,\n formats = defaultFormats,\n actions = defaultActions,\n onChange,\n onAction,\n isProcessing = false,\n className,\n}: WritingAssistantProps) {\n const [content, setContent] = useState(initialContent);\n const [activeTone, setActiveTone] = useState(tones[0]?.id || '');\n const [activeFormat, setActiveFormat] = useState(formats[0]?.id || '');\n const [copied, setCopied] = useState(false);\n\n const wordCount = content.trim().split(/\\s+/).filter(Boolean).length;\n const charCount = content.length;\n\n const handleContentChange = (value: string) => {\n setContent(value);\n onChange?.(value);\n };\n\n const handleAction = (actionId: string) => {\n onAction?.(actionId, content, { tone: activeTone, format: activeFormat });\n };\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(content);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error('Failed to copy:', err);\n }\n };\n\n return (\n <div className={cn('overflow-hidden rounded-lg border bg-card', className)}>\n {/* Header with tone selector */}\n <div className=\"flex items-center gap-2 border-b px-4 py-3\">\n <WandIcon className=\"size-4 shrink-0 text-muted-foreground\" />\n <span className=\"text-sm font-medium\">Writing Assistant</span>\n <div className=\"ml-auto flex gap-1\">\n {tones.map((tone) => (\n <button\n key={tone.id}\n type=\"button\"\n onClick={() => setActiveTone(tone.id)}\n className={cn(\n 'rounded-md px-2 py-1 text-xs transition-colors',\n activeTone === tone.id\n ? 'bg-muted font-medium text-foreground'\n : 'text-muted-foreground hover:text-foreground'\n )}\n title={tone.description}\n >\n {tone.label}\n </button>\n ))}\n </div>\n </div>\n\n {/* Format selector */}\n <div className=\"flex items-center gap-2 border-b px-4 py-2\">\n <span className=\"text-xs text-muted-foreground\">Format:</span>\n <div className=\"flex gap-1\">\n {formats.map((format) => (\n <button\n key={format.id}\n type=\"button\"\n onClick={() => setActiveFormat(format.id)}\n className={cn(\n 'flex items-center gap-1 rounded-md px-2 py-1 text-xs transition-colors',\n activeFormat === format.id\n ? 'bg-muted font-medium text-foreground'\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n {format.icon}\n {format.label}\n </button>\n ))}\n </div>\n </div>\n\n {/* Text editor */}\n <div className=\"p-4\">\n <Textarea\n value={content}\n onChange={(e) => handleContentChange(e.target.value)}\n placeholder=\"Start writing or paste your text here...\"\n className=\"min-h-[200px] resize-none border-0 bg-transparent p-0 shadow-none focus-visible:ring-0\"\n disabled={isProcessing}\n />\n </div>\n\n {/* Actions bar */}\n <div className=\"flex flex-wrap items-center gap-2 border-t px-4 py-3\">\n <div className=\"flex flex-wrap gap-1\">\n {actions.map((action) => (\n <Button\n key={action.id}\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 gap-1.5 text-xs\"\n onClick={() => handleAction(action.id)}\n disabled={isProcessing || !content.trim()}\n title={action.description}\n >\n {action.icon}\n {action.label}\n </Button>\n ))}\n </div>\n\n <div className=\"ml-auto flex items-center gap-3\">\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n <Badge variant=\"secondary\" className=\"font-normal\">\n {wordCount} words\n </Badge>\n <Badge variant=\"secondary\" className=\"font-normal\">\n {charCount} chars\n </Badge>\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 gap-1 px-2 text-xs\"\n onClick={handleCopy}\n disabled={!content.trim()}\n >\n {copied ? (\n <>\n <CheckIcon className=\"size-3\" />\n Copied\n </>\n ) : (\n <>\n <CopyIcon className=\"size-3\" />\n Copy\n </>\n )}\n </Button>\n </div>\n </div>\n </div>\n );\n}\n\nexport default WritingAssistant;\n","'use client';\n\nimport { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n CheckIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n SkipForwardIcon,\n} from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Button } from '../../ui/button';\nimport { Progress } from '../../ui/progress';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface OnboardingStep {\n id: string;\n title: string;\n description: string;\n content?: React.ReactNode;\n image?: string;\n isComplete?: boolean;\n isSkippable?: boolean;\n action?: {\n label: string;\n onClick: () => void | Promise<void>;\n };\n}\n\nexport interface OnboardingWizardProps {\n /** Steps to display */\n steps: OnboardingStep[];\n /** Current step index (controlled) */\n currentStep?: number;\n /** Callback when step changes */\n onStepChange?: (index: number) => void;\n /** Callback when onboarding is completed */\n onComplete?: () => void;\n /** Callback when onboarding is skipped */\n onSkip?: () => void;\n /** Allow skipping */\n allowSkip?: boolean;\n /** Show progress indicator */\n showProgress?: boolean;\n /** Custom class name */\n className?: string;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function OnboardingWizard({\n steps,\n currentStep: controlledStep,\n onStepChange,\n onComplete,\n onSkip,\n allowSkip = true,\n showProgress = true,\n className,\n}: OnboardingWizardProps) {\n const [internalStep, setInternalStep] = useState(0);\n const [completedSteps, setCompletedSteps] = useState<Set<string>>(new Set());\n const [direction, setDirection] = useState<1 | -1>(1);\n\n const currentIndex = controlledStep ?? internalStep;\n const currentStepData = steps[currentIndex];\n const isFirstStep = currentIndex === 0;\n const isLastStep = currentIndex === steps.length - 1;\n const progress = ((currentIndex + 1) / steps.length) * 100;\n\n const goToStep = (index: number) => {\n setDirection(index > currentIndex ? 1 : -1);\n if (controlledStep === undefined) {\n setInternalStep(index);\n }\n onStepChange?.(index);\n };\n\n const handleNext = async () => {\n // Mark current step as complete\n setCompletedSteps((prev) => new Set([...prev, currentStepData.id]));\n\n // Execute step action if present\n if (currentStepData.action) {\n await currentStepData.action.onClick();\n }\n\n if (isLastStep) {\n onComplete?.();\n } else {\n goToStep(currentIndex + 1);\n }\n };\n\n const handlePrev = () => {\n if (!isFirstStep) {\n goToStep(currentIndex - 1);\n }\n };\n\n const handleSkip = () => {\n onSkip?.();\n };\n\n const handleSkipStep = () => {\n if (!isLastStep) {\n goToStep(currentIndex + 1);\n } else {\n onComplete?.();\n }\n };\n\n if (!currentStepData) {\n return null;\n }\n\n const variants = {\n enter: (dir: number) => ({\n x: dir > 0 ? 100 : -100,\n opacity: 0,\n }),\n center: {\n x: 0,\n opacity: 1,\n },\n exit: (dir: number) => ({\n x: dir > 0 ? -100 : 100,\n opacity: 0,\n }),\n };\n\n return (\n <div className={cn('rounded-lg border bg-card overflow-hidden', className)}>\n {/* Progress header */}\n {showProgress && (\n <div className=\"border-b px-4 py-3\">\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-sm font-medium\">\n Step {currentIndex + 1} of {steps.length}\n </span>\n {allowSkip && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 gap-1 text-xs text-muted-foreground\"\n onClick={handleSkip}\n >\n <SkipForwardIcon className=\"size-3\" />\n Skip All\n </Button>\n )}\n </div>\n <Progress value={progress} className=\"h-1.5\" />\n </div>\n )}\n\n {/* Step indicator dots */}\n <div className=\"flex items-center justify-center gap-2 py-4 border-b\">\n {steps.map((step, index) => {\n const isActive = index === currentIndex;\n const isCompleted = completedSteps.has(step.id) || step.isComplete;\n\n return (\n <button\n key={step.id}\n type=\"button\"\n onClick={() => goToStep(index)}\n className={cn(\n 'flex items-center justify-center size-8 rounded-full transition-colors',\n isActive && 'bg-foreground text-background',\n !isActive && isCompleted && 'bg-emerald-500 text-white',\n !isActive && !isCompleted && 'border-2 border-muted-foreground/30 text-muted-foreground'\n )}\n >\n {isCompleted && !isActive ? (\n <CheckIcon className=\"size-4\" />\n ) : (\n <span className=\"text-xs font-medium\">{index + 1}</span>\n )}\n </button>\n );\n })}\n </div>\n\n {/* Step content */}\n <div className=\"relative min-h-[300px] overflow-hidden\">\n <AnimatePresence custom={direction} mode=\"wait\">\n <motion.div\n key={currentStepData.id}\n custom={direction}\n variants={variants}\n initial=\"enter\"\n animate=\"center\"\n exit=\"exit\"\n transition={{ type: 'tween', duration: 0.3 }}\n className=\"p-6\"\n >\n {currentStepData.image && (\n <div className=\"mb-6 flex justify-center\">\n <div className=\"h-32 w-32 rounded-lg bg-muted flex items-center justify-center\">\n <img\n src={currentStepData.image}\n alt={currentStepData.title}\n className=\"max-h-full max-w-full object-contain\"\n />\n </div>\n </div>\n )}\n\n <div className=\"text-center\">\n <h2 className=\"text-xl font-semibold mb-2\">{currentStepData.title}</h2>\n <p className=\"text-muted-foreground\">{currentStepData.description}</p>\n </div>\n\n {currentStepData.content && (\n <div className=\"mt-6\">{currentStepData.content}</div>\n )}\n </motion.div>\n </AnimatePresence>\n </div>\n\n {/* Navigation footer */}\n <div className=\"flex items-center justify-between border-t px-4 py-3\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handlePrev}\n disabled={isFirstStep}\n className=\"gap-1\"\n >\n <ChevronLeftIcon className=\"size-4\" />\n Back\n </Button>\n\n <div className=\"flex gap-2\">\n {currentStepData.isSkippable && !isLastStep && (\n <Button variant=\"ghost\" size=\"sm\" onClick={handleSkipStep}>\n Skip\n </Button>\n )}\n <Button size=\"sm\" onClick={handleNext} className=\"gap-1\">\n {currentStepData.action?.label || (isLastStep ? 'Complete' : 'Continue')}\n <ChevronRightIcon className=\"size-4\" />\n </Button>\n </div>\n </div>\n </div>\n );\n}\n\nexport default OnboardingWizard;\n","'use client';\n\nimport { useState } from 'react';\nimport { motion } from 'motion/react';\nimport { CheckCircle2Icon, XCircleIcon, HelpCircleIcon, ChevronRightIcon } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Button } from '../../ui/button';\nimport { Badge } from '../../ui/badge';\nimport { Progress } from '../../ui/progress';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface QuizOption {\n id: string;\n text: string;\n}\n\nexport interface QuizQuestion {\n id: string;\n question: string;\n options: QuizOption[];\n correctOptionId: string;\n explanation?: string;\n hint?: string;\n category?: string;\n difficulty?: 'easy' | 'medium' | 'hard';\n}\n\nexport interface QuizResult {\n questionId: string;\n selectedOptionId: string | null;\n isCorrect: boolean;\n timeSpent?: number;\n}\n\nexport interface QuizCardProps {\n /** Questions to display */\n questions: QuizQuestion[];\n /** Current question index (controlled) */\n currentIndex?: number;\n /** Callback when answer is selected */\n onAnswer?: (questionId: string, optionId: string, isCorrect: boolean) => void;\n /** Callback when quiz is completed */\n onComplete?: (results: QuizResult[]) => void;\n /** Callback when next question is requested */\n onNext?: () => void;\n /** Show hints */\n showHints?: boolean;\n /** Show explanations after answering */\n showExplanations?: boolean;\n /** Allow retrying wrong answers */\n allowRetry?: boolean;\n /** Custom class name */\n className?: string;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function QuizCard({\n questions,\n currentIndex: controlledIndex,\n onAnswer,\n onComplete,\n onNext,\n showHints = true,\n showExplanations = true,\n allowRetry = false,\n className,\n}: QuizCardProps) {\n const [internalIndex, setInternalIndex] = useState(0);\n const [selectedOption, setSelectedOption] = useState<string | null>(null);\n const [hasAnswered, setHasAnswered] = useState(false);\n const [showHint, setShowHint] = useState(false);\n const [results, setResults] = useState<QuizResult[]>([]);\n\n const currentIndex = controlledIndex ?? internalIndex;\n const currentQuestion = questions[currentIndex];\n const isLastQuestion = currentIndex === questions.length - 1;\n const progress = ((currentIndex + (hasAnswered ? 1 : 0)) / questions.length) * 100;\n\n if (!currentQuestion) {\n return (\n <div className={cn('rounded-lg border bg-card p-6 text-center', className)}>\n <p className=\"text-muted-foreground\">No questions available</p>\n </div>\n );\n }\n\n const isCorrect = selectedOption === currentQuestion.correctOptionId;\n\n const handleSelectOption = (optionId: string) => {\n if (hasAnswered && !allowRetry) return;\n\n setSelectedOption(optionId);\n setHasAnswered(true);\n setShowHint(false);\n\n const correct = optionId === currentQuestion.correctOptionId;\n const result: QuizResult = {\n questionId: currentQuestion.id,\n selectedOptionId: optionId,\n isCorrect: correct,\n };\n\n setResults((prev) => [...prev.filter((r) => r.questionId !== currentQuestion.id), result]);\n onAnswer?.(currentQuestion.id, optionId, correct);\n };\n\n const handleNext = () => {\n if (isLastQuestion) {\n onComplete?.(results);\n } else {\n if (controlledIndex === undefined) {\n setInternalIndex((prev) => prev + 1);\n }\n setSelectedOption(null);\n setHasAnswered(false);\n setShowHint(false);\n onNext?.();\n }\n };\n\n const handleRetry = () => {\n setSelectedOption(null);\n setHasAnswered(false);\n };\n\n const getDifficultyColor = (difficulty?: string) => {\n switch (difficulty) {\n case 'easy':\n return 'bg-emerald-500/10 text-emerald-600';\n case 'medium':\n return 'bg-amber-500/10 text-amber-600';\n case 'hard':\n return 'bg-red-500/10 text-red-600';\n default:\n return 'bg-muted text-muted-foreground';\n }\n };\n\n return (\n <div className={cn('rounded-lg border bg-card', className)}>\n {/* Progress header */}\n <div className=\"border-b px-4 py-3\">\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-sm text-muted-foreground\">\n Question {currentIndex + 1} of {questions.length}\n </span>\n <div className=\"flex items-center gap-2\">\n {currentQuestion.category && (\n <Badge variant=\"secondary\" className=\"text-xs\">\n {currentQuestion.category}\n </Badge>\n )}\n {currentQuestion.difficulty && (\n <Badge className={cn('text-xs', getDifficultyColor(currentQuestion.difficulty))}>\n {currentQuestion.difficulty}\n </Badge>\n )}\n </div>\n </div>\n <Progress value={progress} className=\"h-1.5\" />\n </div>\n\n {/* Question */}\n <div className=\"p-4\">\n <h3 className=\"text-lg font-medium mb-4\">{currentQuestion.question}</h3>\n\n {/* Options */}\n <div className=\"space-y-2\">\n {currentQuestion.options.map((option, index) => {\n const isSelected = selectedOption === option.id;\n const isCorrectOption = option.id === currentQuestion.correctOptionId;\n const showCorrectness = hasAnswered;\n\n return (\n <motion.button\n key={option.id}\n type=\"button\"\n onClick={() => handleSelectOption(option.id)}\n disabled={hasAnswered && !allowRetry}\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: index * 0.1 }}\n className={cn(\n 'w-full flex items-center gap-3 rounded-lg border p-3 text-left transition-colors',\n !hasAnswered && 'hover:bg-muted/50 cursor-pointer',\n hasAnswered && !allowRetry && 'cursor-default',\n isSelected && !showCorrectness && 'border-foreground bg-muted',\n showCorrectness && isCorrectOption && 'border-emerald-500 bg-emerald-500/10',\n showCorrectness && isSelected && !isCorrectOption && 'border-red-500 bg-red-500/10'\n )}\n >\n <span\n className={cn(\n 'flex size-6 shrink-0 items-center justify-center rounded-full border text-xs font-medium',\n isSelected && !showCorrectness && 'border-foreground bg-foreground text-background',\n showCorrectness && isCorrectOption && 'border-emerald-500 bg-emerald-500 text-white',\n showCorrectness && isSelected && !isCorrectOption && 'border-red-500 bg-red-500 text-white'\n )}\n >\n {showCorrectness && isCorrectOption ? (\n <CheckCircle2Icon className=\"size-4\" />\n ) : showCorrectness && isSelected && !isCorrectOption ? (\n <XCircleIcon className=\"size-4\" />\n ) : (\n String.fromCharCode(65 + index)\n )}\n </span>\n <span className=\"flex-1\">{option.text}</span>\n </motion.button>\n );\n })}\n </div>\n\n {/* Hint */}\n {showHints && currentQuestion.hint && !hasAnswered && (\n <div className=\"mt-4\">\n {showHint ? (\n <div className=\"rounded-lg bg-muted/50 p-3 text-sm text-muted-foreground\">\n <span className=\"font-medium\">Hint:</span> {currentQuestion.hint}\n </div>\n ) : (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"gap-1.5 text-muted-foreground\"\n onClick={() => setShowHint(true)}\n >\n <HelpCircleIcon className=\"size-4\" />\n Show Hint\n </Button>\n )}\n </div>\n )}\n\n {/* Explanation */}\n {showExplanations && hasAnswered && currentQuestion.explanation && (\n <motion.div\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n className={cn(\n 'mt-4 rounded-lg p-3 text-sm',\n isCorrect ? 'bg-emerald-500/10' : 'bg-amber-500/10'\n )}\n >\n <span className=\"font-medium\">{isCorrect ? 'Correct!' : 'Explanation:'}</span>{' '}\n {currentQuestion.explanation}\n </motion.div>\n )}\n </div>\n\n {/* Footer actions */}\n <div className=\"flex items-center justify-between border-t px-4 py-3\">\n <div className=\"text-sm text-muted-foreground\">\n {hasAnswered && (\n <span className={isCorrect ? 'text-emerald-600' : 'text-red-600'}>\n {isCorrect ? 'Correct!' : 'Incorrect'}\n </span>\n )}\n </div>\n <div className=\"flex gap-2\">\n {hasAnswered && !isCorrect && allowRetry && (\n <Button variant=\"outline\" size=\"sm\" onClick={handleRetry}>\n Try Again\n </Button>\n )}\n {hasAnswered && (\n <Button size=\"sm\" onClick={handleNext} className=\"gap-1\">\n {isLastQuestion ? 'Complete' : 'Next'}\n <ChevronRightIcon className=\"size-4\" />\n </Button>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nexport default QuizCard;\n","'use client';\n\nimport { useState } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { ChevronLeftIcon, ChevronRightIcon, CheckIcon } from 'lucide-react';\nimport { cn, parseTextWithBold } from '../../core/utils';\nimport { Button } from '../../ui/button';\nimport { Badge } from '../../ui/badge';\nimport { QuizCard, type QuizQuestion } from './quiz-card';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface LessonStep {\n id: string;\n /** Step title. */\n title: string;\n /** Body content. Supports **bold** segments and blank-line paragraphs. */\n content: string;\n /** Optional short label for the step rail/tooltip. */\n shortLabel?: string;\n /** Optional knowledge check shown after the content. */\n quiz?: QuizQuestion[];\n /** Require a correct quiz answer before advancing. */\n requireQuizPass?: boolean;\n}\n\nexport interface GuidedLessonFlowProps {\n steps: LessonStep[];\n /** Controlled current step index. */\n currentIndex?: number;\n /** Title shown in the header. */\n title?: string;\n /** Optional level/track chip. */\n badge?: string;\n /** Step change handler. */\n onStepChange?: (index: number) => void;\n /** Quiz answer handler (bubbled from the embedded QuizCard). */\n onAnswer?: (stepId: string, questionId: string, optionId: string, isCorrect: boolean) => void;\n /** Completion handler. */\n onComplete?: () => void;\n className?: string;\n}\n\nfunction LessonContent({ content }: { content: string }) {\n return (\n <div className=\"space-y-3 text-sm leading-relaxed\">\n {content.split('\\n\\n').map((para, i) => (\n <p key={i} className=\"text-muted-foreground\">\n {parseTextWithBold(para).map((seg, j) =>\n seg.bold ? (\n <strong key={j} className=\"font-medium text-foreground\">\n {seg.text}\n </strong>\n ) : (\n <span key={j}>{seg.text}</span>\n )\n )}\n </p>\n ))}\n </div>\n );\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function GuidedLessonFlow({\n steps,\n currentIndex: controlledIndex,\n title = 'Guided Module',\n badge,\n onStepChange,\n onAnswer,\n onComplete,\n className,\n}: GuidedLessonFlowProps) {\n const [internalIndex, setInternalIndex] = useState(0);\n const [passedSteps, setPassedSteps] = useState<Set<string>>(new Set());\n\n const currentIndex = controlledIndex ?? internalIndex;\n const step = steps[currentIndex];\n const isLast = currentIndex === steps.length - 1;\n\n if (!step) {\n return (\n <div className={cn('rounded-lg border bg-card p-6 text-center text-muted-foreground', className)}>\n No steps available\n </div>\n );\n }\n\n const quizGate = step.requireQuizPass && step.quiz && step.quiz.length > 0;\n const canAdvance = !quizGate || passedSteps.has(step.id);\n\n const goTo = (next: number) => {\n const clamped = Math.max(0, Math.min(steps.length - 1, next));\n if (controlledIndex === undefined) setInternalIndex(clamped);\n onStepChange?.(clamped);\n };\n\n const handleNext = () => {\n if (isLast) {\n onComplete?.();\n } else {\n goTo(currentIndex + 1);\n }\n };\n\n return (\n <div className={cn('flex flex-col overflow-hidden rounded-lg border bg-card', className)}>\n {/* Header + progress rail */}\n <div className=\"border-b px-4 py-3\">\n <div className=\"flex items-center gap-3\">\n <span className=\"font-medium text-sm\">{title}</span>\n {badge && (\n <Badge variant=\"secondary\" className=\"font-normal text-[10px]\">\n {badge}\n </Badge>\n )}\n <span className=\"ml-auto text-muted-foreground text-xs\">\n Step {currentIndex + 1}/{steps.length}\n </span>\n </div>\n <div className=\"mt-2 flex items-center gap-1\">\n {steps.map((s, i) => (\n <div\n key={s.id}\n className={cn(\n 'h-1 flex-1 rounded-full transition-colors',\n i < currentIndex || passedSteps.has(s.id)\n ? 'bg-emerald-500'\n : i === currentIndex\n ? 'bg-foreground'\n : 'bg-muted'\n )}\n />\n ))}\n </div>\n </div>\n\n {/* Step content */}\n <div className=\"flex-1 overflow-y-auto p-5\">\n <AnimatePresence mode=\"wait\">\n <motion.div\n key={step.id}\n initial={{ opacity: 0, x: 12 }}\n animate={{ opacity: 1, x: 0 }}\n exit={{ opacity: 0, x: -12 }}\n transition={{ duration: 0.2 }}\n className=\"space-y-4\"\n >\n <h3 className=\"text-base font-medium\">{step.title}</h3>\n <LessonContent content={step.content} />\n\n {step.quiz && step.quiz.length > 0 && (\n <div className=\"pt-2\">\n <span className=\"mb-2 block font-medium text-xs text-muted-foreground\">\n Knowledge check\n </span>\n <QuizCard\n questions={step.quiz}\n showHints\n showExplanations\n onAnswer={(questionId, optionId, isCorrect) => {\n if (isCorrect) {\n setPassedSteps((prev) => new Set(prev).add(step.id));\n }\n onAnswer?.(step.id, questionId, optionId, isCorrect);\n }}\n />\n </div>\n )}\n </motion.div>\n </AnimatePresence>\n </div>\n\n {/* Footer nav */}\n <div className=\"flex items-center justify-between border-t px-4 py-3\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"gap-1 text-xs\"\n disabled={currentIndex === 0}\n onClick={() => goTo(currentIndex - 1)}\n >\n <ChevronLeftIcon className=\"size-4\" />\n Back\n </Button>\n <Button size=\"sm\" className=\"gap-1 text-xs\" disabled={!canAdvance} onClick={handleNext}>\n {isLast ? (\n <>\n Finish\n <CheckIcon className=\"size-4\" />\n </>\n ) : (\n <>\n Next\n <ChevronRightIcon className=\"size-4\" />\n </>\n )}\n </Button>\n </div>\n </div>\n );\n}\n\nexport default GuidedLessonFlow;\n","'use client';\n\nimport { useState } from 'react';\nimport {\n ImageIcon,\n Maximize2Icon,\n Minimize2Icon,\n RotateCcwIcon,\n DownloadIcon,\n SparklesIcon,\n} from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Button } from '../../ui/button';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface EditorTool {\n id: string;\n label: string;\n icon?: React.ReactNode;\n /** Swatch/preview color for tool tiles without an icon. */\n swatch?: string;\n}\n\nexport interface EditorAdjustment {\n id: string;\n label: string;\n value: number;\n min?: number;\n max?: number;\n step?: number;\n}\n\nexport interface MediaEditorCanvasProps {\n /** Source image URL for the canvas. Falls back to a placeholder tile. */\n sourceUrl?: string;\n /** Result/preview image URL (used for the \"after\" comparison view). */\n previewUrl?: string;\n /** Selectable tools (filters/presets/crop/etc.). */\n tools?: EditorTool[];\n /** Active tool id (controlled). */\n activeToolId?: string;\n /** Continuous adjustment controls. */\n adjustments?: EditorAdjustment[];\n /** Enable the before/after comparison toggle. */\n enableCompare?: boolean;\n /** Labels for the compare toggle. */\n beforeLabel?: string;\n afterLabel?: string;\n onSelectTool?: (id: string) => void;\n onAdjust?: (id: string, value: number) => void;\n onReset?: () => void;\n onSave?: () => void;\n className?: string;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function MediaEditorCanvas({\n sourceUrl,\n previewUrl,\n tools = [],\n activeToolId,\n adjustments = [],\n enableCompare = true,\n beforeLabel = 'Before',\n afterLabel = 'After',\n onSelectTool,\n onAdjust,\n onReset,\n onSave,\n className,\n}: MediaEditorCanvasProps) {\n const [comparison, setComparison] = useState<'before' | 'after'>('after');\n const [expanded, setExpanded] = useState(false);\n\n const shownUrl =\n comparison === 'before' ? sourceUrl : previewUrl ?? sourceUrl;\n\n return (\n <div className={cn('flex flex-col overflow-hidden rounded-lg border bg-card', className)}>\n {/* Header */}\n <div className=\"flex items-center justify-between border-b px-4 py-3\">\n <div className=\"flex items-center gap-2\">\n <div className=\"flex size-8 items-center justify-center rounded-md bg-muted\">\n <ImageIcon className=\"size-4 text-foreground\" />\n </div>\n <span className=\"text-sm font-medium\">Editor</span>\n </div>\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n onClick={() => setExpanded((v) => !v)}\n aria-label={expanded ? 'Collapse' : 'Expand'}\n >\n {expanded ? <Minimize2Icon className=\"size-3.5\" /> : <Maximize2Icon className=\"size-3.5\" />}\n </Button>\n </div>\n </div>\n\n <div className={cn('flex flex-col', !expanded && 'sm:flex-row')}>\n {/* Canvas */}\n <div className=\"flex flex-1 flex-col p-3\">\n {/* Compare toggle */}\n {enableCompare && (\n <div className=\"mb-2 flex items-center justify-end\">\n <div className=\"flex items-center gap-1 rounded-md bg-muted p-0.5\">\n {(['before', 'after'] as const).map((mode) => (\n <button\n key={mode}\n type=\"button\"\n onClick={() => setComparison(mode)}\n className={cn(\n 'rounded-sm px-2 py-1 text-xs transition-colors',\n comparison === mode\n ? 'bg-background text-foreground'\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n {mode === 'before' ? beforeLabel : afterLabel}\n </button>\n ))}\n </div>\n </div>\n )}\n\n <div className=\"relative aspect-video overflow-hidden rounded-md border bg-muted\">\n {shownUrl ? (\n <img src={shownUrl} alt={comparison} className=\"size-full object-contain\" />\n ) : (\n <div className=\"flex h-full items-center justify-center\">\n <ImageIcon className=\"size-10 text-muted-foreground/20\" />\n </div>\n )}\n <div className=\"absolute bottom-2 left-2 rounded-md bg-background/90 px-2 py-1 backdrop-blur-sm\">\n <span className=\"text-xs font-medium\">\n {comparison === 'before' ? beforeLabel : afterLabel}\n </span>\n </div>\n </div>\n\n {/* Canvas actions */}\n <div className=\"mt-3 flex items-center gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 flex-1 gap-1.5 text-xs\"\n onClick={onReset}\n >\n <RotateCcwIcon className=\"size-3\" />\n Reset\n </Button>\n <Button size=\"sm\" className=\"h-7 flex-1 gap-1.5 text-xs\" onClick={onSave}>\n <DownloadIcon className=\"size-3\" />\n Save\n </Button>\n </div>\n </div>\n\n {/* Tool / adjustment rail */}\n {(tools.length > 0 || adjustments.length > 0) && (\n <div className={cn('shrink-0 border-t p-3', !expanded && 'sm:w-56 sm:border-l sm:border-t-0')}>\n {tools.length > 0 && (\n <div>\n <div className=\"flex items-center gap-1.5\">\n <SparklesIcon className=\"size-3.5 text-muted-foreground\" />\n <span className=\"text-xs font-medium\">Tools</span>\n </div>\n <div className=\"mt-2 grid grid-cols-4 gap-2\">\n {tools.map((tool) => {\n const active = activeToolId === tool.id;\n return (\n <button\n key={tool.id}\n type=\"button\"\n onClick={() => onSelectTool?.(tool.id)}\n className={cn(\n 'group flex flex-col items-center gap-1.5 rounded-md p-2 transition-colors',\n active ? 'bg-muted' : 'hover:bg-muted/50'\n )}\n >\n <div\n className={cn(\n 'flex size-10 items-center justify-center rounded-md border',\n active && 'ring-1 ring-foreground'\n )}\n style={tool.swatch ? { backgroundColor: tool.swatch } : undefined}\n >\n {tool.icon}\n </div>\n <span\n className={cn(\n 'truncate text-[10px]',\n active ? 'text-foreground' : 'text-muted-foreground group-hover:text-foreground'\n )}\n >\n {tool.label}\n </span>\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n {adjustments.length > 0 && (\n <div className={cn(tools.length > 0 && 'mt-4')}>\n <span className=\"text-xs font-medium\">Adjustments</span>\n <div className=\"mt-2 space-y-3\">\n {adjustments.map((adj) => (\n <div key={adj.id}>\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"text-muted-foreground\">{adj.label}</span>\n <span className=\"tabular-nums\">{adj.value}</span>\n </div>\n <input\n type=\"range\"\n min={adj.min ?? 0}\n max={adj.max ?? 100}\n step={adj.step ?? 1}\n value={adj.value}\n onChange={(e) => onAdjust?.(adj.id, Number(e.target.value))}\n className=\"mt-1 h-1.5 w-full cursor-pointer appearance-none rounded-full bg-muted accent-foreground\"\n />\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport default MediaEditorCanvas;\n","'use client';\n\nimport { useState } from 'react';\nimport {\n LineChart,\n Line,\n PieChart,\n Pie,\n Cell,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n ResponsiveContainer,\n Legend,\n} from 'recharts';\nimport {\n MessageSquareIcon,\n ClockIcon,\n ThumbsUpIcon,\n TrendingUpIcon,\n TrendingDownIcon,\n MinusIcon,\n} from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Badge } from '../../ui/badge';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface ConversationMetric {\n id: string;\n label: string;\n value: number | string;\n change?: number;\n changeLabel?: string;\n icon?: React.ReactNode;\n}\n\nexport interface TopicData {\n topic: string;\n count: number;\n percentage: number;\n}\n\nexport interface SentimentData {\n sentiment: 'positive' | 'negative' | 'neutral';\n value: number;\n}\n\nexport interface TimelineData {\n date: string;\n messages: number;\n responses: number;\n}\n\nexport interface ConversationAnalyticsProps {\n /** Key metrics to display */\n metrics?: ConversationMetric[];\n /** Topics discussed */\n topics?: TopicData[];\n /** Sentiment breakdown */\n sentiment?: SentimentData[];\n /** Messages over time */\n timeline?: TimelineData[];\n /** Time period label */\n period?: string;\n /** Custom class name */\n className?: string;\n}\n\n// ============================================================================\n// DEFAULT VALUES\n// ============================================================================\n\nconst defaultMetrics: ConversationMetric[] = [\n {\n id: 'total',\n label: 'Total Messages',\n value: 1247,\n change: 12.5,\n changeLabel: 'vs last period',\n icon: <MessageSquareIcon className=\"size-4\" />,\n },\n {\n id: 'avgResponse',\n label: 'Avg Response Time',\n value: '1.2s',\n change: -8.3,\n changeLabel: 'faster',\n icon: <ClockIcon className=\"size-4\" />,\n },\n {\n id: 'satisfaction',\n label: 'User Satisfaction',\n value: '94%',\n change: 2.1,\n changeLabel: 'improvement',\n icon: <ThumbsUpIcon className=\"size-4\" />,\n },\n];\n\nconst defaultTopics: TopicData[] = [\n { topic: 'Product Questions', count: 342, percentage: 35 },\n { topic: 'Technical Support', count: 278, percentage: 28 },\n { topic: 'Pricing', count: 186, percentage: 19 },\n { topic: 'Account Issues', count: 98, percentage: 10 },\n { topic: 'Other', count: 78, percentage: 8 },\n];\n\nconst defaultSentiment: SentimentData[] = [\n { sentiment: 'positive', value: 65 },\n { sentiment: 'neutral', value: 25 },\n { sentiment: 'negative', value: 10 },\n];\n\nconst defaultTimeline: TimelineData[] = [\n { date: 'Mon', messages: 120, responses: 115 },\n { date: 'Tue', messages: 145, responses: 140 },\n { date: 'Wed', messages: 132, responses: 128 },\n { date: 'Thu', messages: 178, responses: 172 },\n { date: 'Fri', messages: 156, responses: 150 },\n { date: 'Sat', messages: 89, responses: 85 },\n { date: 'Sun', messages: 67, responses: 64 },\n];\n\nconst SENTIMENT_COLORS = {\n positive: '#22c55e',\n neutral: '#94a3b8',\n negative: '#ef4444',\n};\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function ConversationAnalytics({\n metrics = defaultMetrics,\n topics = defaultTopics,\n sentiment = defaultSentiment,\n timeline = defaultTimeline,\n period = 'Last 7 days',\n className,\n}: ConversationAnalyticsProps) {\n const [activeTab, setActiveTab] = useState<'overview' | 'topics' | 'sentiment'>('overview');\n\n const getTrendIcon = (change?: number) => {\n if (change === undefined) return null;\n if (change > 0) return <TrendingUpIcon className=\"size-3 text-emerald-500\" />;\n if (change < 0) return <TrendingDownIcon className=\"size-3 text-red-500\" />;\n return <MinusIcon className=\"size-3 text-muted-foreground\" />;\n };\n\n const getTrendColor = (change?: number) => {\n if (change === undefined) return '';\n if (change > 0) return 'text-emerald-500';\n if (change < 0) return 'text-red-500';\n return 'text-muted-foreground';\n };\n\n return (\n <div className={cn('rounded-lg border bg-card', className)}>\n {/* Header */}\n <div className=\"flex items-center justify-between border-b px-4 py-3\">\n <div>\n <h3 className=\"font-medium\">Conversation Analytics</h3>\n <p className=\"text-xs text-muted-foreground\">{period}</p>\n </div>\n <div className=\"flex gap-1\">\n {(['overview', 'topics', 'sentiment'] as const).map((tab) => (\n <button\n key={tab}\n type=\"button\"\n onClick={() => setActiveTab(tab)}\n className={cn(\n 'rounded-md px-3 py-1.5 text-xs capitalize transition-colors',\n activeTab === tab\n ? 'bg-muted font-medium text-foreground'\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n {tab}\n </button>\n ))}\n </div>\n </div>\n\n {/* Metrics row */}\n <div className=\"grid grid-cols-3 gap-4 border-b px-4 py-4\">\n {metrics.map((metric) => (\n <div key={metric.id} className=\"flex items-start gap-3\">\n {metric.icon && (\n <div className=\"flex size-8 shrink-0 items-center justify-center rounded-lg bg-muted\">\n {metric.icon}\n </div>\n )}\n <div>\n <p className=\"text-xs text-muted-foreground\">{metric.label}</p>\n <p className=\"text-lg font-semibold\">{metric.value}</p>\n {metric.change !== undefined && (\n <div className=\"flex items-center gap-1\">\n {getTrendIcon(metric.change)}\n <span className={cn('text-xs', getTrendColor(metric.change))}>\n {Math.abs(metric.change)}% {metric.changeLabel}\n </span>\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n\n {/* Chart content */}\n <div className=\"p-4\">\n {activeTab === 'overview' && (\n <div className=\"h-64\">\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <LineChart data={timeline}>\n <CartesianGrid strokeDasharray=\"3 3\" className=\"stroke-muted\" />\n <XAxis dataKey=\"date\" className=\"text-xs\" tick={{ fill: 'currentColor' }} />\n <YAxis className=\"text-xs\" tick={{ fill: 'currentColor' }} />\n <Tooltip\n contentStyle={{\n backgroundColor: 'hsl(var(--card))',\n borderColor: 'hsl(var(--border))',\n borderRadius: '0.5rem',\n }}\n />\n <Legend />\n <Line\n type=\"monotone\"\n dataKey=\"messages\"\n stroke=\"hsl(var(--foreground))\"\n strokeWidth={2}\n dot={false}\n />\n <Line\n type=\"monotone\"\n dataKey=\"responses\"\n stroke=\"hsl(var(--muted-foreground))\"\n strokeWidth={2}\n dot={false}\n strokeDasharray=\"4 4\"\n />\n </LineChart>\n </ResponsiveContainer>\n </div>\n )}\n\n {activeTab === 'topics' && (\n <div className=\"space-y-3\">\n {topics.map((topic) => (\n <div key={topic.topic} className=\"flex items-center gap-3\">\n <div className=\"w-32 text-sm truncate\">{topic.topic}</div>\n <div className=\"flex-1 h-2 bg-muted rounded-full overflow-hidden\">\n <div\n className=\"h-full bg-foreground rounded-full transition-all\"\n style={{ width: `${topic.percentage}%` }}\n />\n </div>\n <div className=\"w-16 text-right\">\n <Badge variant=\"secondary\" className=\"text-xs\">\n {topic.count}\n </Badge>\n </div>\n </div>\n ))}\n </div>\n )}\n\n {activeTab === 'sentiment' && (\n <div className=\"flex items-center justify-center\">\n <div className=\"h-64 w-64\">\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <PieChart>\n <Pie\n data={sentiment}\n dataKey=\"value\"\n nameKey=\"sentiment\"\n cx=\"50%\"\n cy=\"50%\"\n innerRadius={60}\n outerRadius={100}\n paddingAngle={2}\n >\n {sentiment.map((entry) => (\n <Cell\n key={entry.sentiment}\n fill={SENTIMENT_COLORS[entry.sentiment]}\n />\n ))}\n </Pie>\n <Tooltip\n formatter={(value) => [`${value}%`, 'Percentage']}\n contentStyle={{\n backgroundColor: 'hsl(var(--card))',\n borderColor: 'hsl(var(--border))',\n borderRadius: '0.5rem',\n }}\n />\n <Legend\n formatter={(value) => (\n <span className=\"text-sm capitalize\">{value}</span>\n )}\n />\n </PieChart>\n </ResponsiveContainer>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport default ConversationAnalytics;\n","'use client';\n\nimport { useState } from 'react';\nimport {\n AreaChart,\n Area,\n BarChart,\n Bar,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n ResponsiveContainer,\n} from 'recharts';\nimport {\n ZapIcon,\n CoinsIcon,\n AlertTriangleIcon,\n ActivityIcon,\n TrendingUpIcon,\n TrendingDownIcon,\n} from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Badge } from '../../ui/badge';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface PerformanceMetric {\n id: string;\n label: string;\n value: number | string;\n unit?: string;\n change?: number;\n status?: 'good' | 'warning' | 'error';\n icon?: React.ReactNode;\n}\n\nexport interface LatencyData {\n time: string;\n p50: number;\n p95: number;\n p99: number;\n}\n\nexport interface TokenUsageData {\n date: string;\n input: number;\n output: number;\n}\n\nexport interface ErrorData {\n type: string;\n count: number;\n percentage: number;\n}\n\nexport interface PerformanceMetricsProps {\n /** Key metrics */\n metrics?: PerformanceMetric[];\n /** Latency over time */\n latency?: LatencyData[];\n /** Token usage */\n tokenUsage?: TokenUsageData[];\n /** Error breakdown */\n errors?: ErrorData[];\n /** Time period */\n period?: string;\n /** Custom class name */\n className?: string;\n}\n\n// ============================================================================\n// DEFAULT VALUES\n// ============================================================================\n\nconst defaultMetrics: PerformanceMetric[] = [\n {\n id: 'latency',\n label: 'Avg Latency',\n value: 245,\n unit: 'ms',\n change: -12,\n status: 'good',\n icon: <ZapIcon className=\"size-4\" />,\n },\n {\n id: 'tokens',\n label: 'Tokens Used',\n value: '1.2M',\n change: 8,\n status: 'good',\n icon: <CoinsIcon className=\"size-4\" />,\n },\n {\n id: 'errors',\n label: 'Error Rate',\n value: 0.3,\n unit: '%',\n change: -0.1,\n status: 'good',\n icon: <AlertTriangleIcon className=\"size-4\" />,\n },\n {\n id: 'uptime',\n label: 'Uptime',\n value: 99.9,\n unit: '%',\n status: 'good',\n icon: <ActivityIcon className=\"size-4\" />,\n },\n];\n\nconst defaultLatency: LatencyData[] = [\n { time: '00:00', p50: 180, p95: 320, p99: 450 },\n { time: '04:00', p50: 165, p95: 290, p99: 420 },\n { time: '08:00', p50: 210, p95: 380, p99: 520 },\n { time: '12:00', p50: 245, p95: 420, p99: 580 },\n { time: '16:00', p50: 230, p95: 400, p99: 550 },\n { time: '20:00', p50: 195, p95: 350, p99: 480 },\n];\n\nconst defaultTokenUsage: TokenUsageData[] = [\n { date: 'Mon', input: 45000, output: 62000 },\n { date: 'Tue', input: 52000, output: 71000 },\n { date: 'Wed', input: 48000, output: 65000 },\n { date: 'Thu', input: 61000, output: 82000 },\n { date: 'Fri', input: 55000, output: 74000 },\n { date: 'Sat', input: 32000, output: 45000 },\n { date: 'Sun', input: 28000, output: 38000 },\n];\n\nconst defaultErrors: ErrorData[] = [\n { type: 'Rate Limit', count: 45, percentage: 40 },\n { type: 'Timeout', count: 32, percentage: 28 },\n { type: 'Invalid Request', count: 20, percentage: 18 },\n { type: 'Server Error', count: 16, percentage: 14 },\n];\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function PerformanceMetrics({\n metrics = defaultMetrics,\n latency = defaultLatency,\n tokenUsage = defaultTokenUsage,\n errors = defaultErrors,\n period = 'Last 24 hours',\n className,\n}: PerformanceMetricsProps) {\n const [activeChart, setActiveChart] = useState<'latency' | 'tokens' | 'errors'>('latency');\n\n const getStatusColor = (status?: string) => {\n switch (status) {\n case 'good':\n return 'bg-emerald-500/10 text-emerald-600';\n case 'warning':\n return 'bg-amber-500/10 text-amber-600';\n case 'error':\n return 'bg-red-500/10 text-red-600';\n default:\n return 'bg-muted text-muted-foreground';\n }\n };\n\n return (\n <div className={cn('rounded-lg border bg-card', className)}>\n {/* Header */}\n <div className=\"flex items-center justify-between border-b px-4 py-3\">\n <div>\n <h3 className=\"font-medium\">Performance Metrics</h3>\n <p className=\"text-xs text-muted-foreground\">{period}</p>\n </div>\n <div className=\"flex gap-1\">\n {(['latency', 'tokens', 'errors'] as const).map((tab) => (\n <button\n key={tab}\n type=\"button\"\n onClick={() => setActiveChart(tab)}\n className={cn(\n 'rounded-md px-3 py-1.5 text-xs capitalize transition-colors',\n activeChart === tab\n ? 'bg-muted font-medium text-foreground'\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n {tab}\n </button>\n ))}\n </div>\n </div>\n\n {/* Metrics grid */}\n <div className=\"grid grid-cols-2 gap-4 border-b px-4 py-4 md:grid-cols-4\">\n {metrics.map((metric) => (\n <div key={metric.id} className=\"space-y-1\">\n <div className=\"flex items-center gap-2\">\n {metric.icon && (\n <div\n className={cn(\n 'flex size-6 items-center justify-center rounded',\n getStatusColor(metric.status)\n )}\n >\n {metric.icon}\n </div>\n )}\n <span className=\"text-xs text-muted-foreground\">{metric.label}</span>\n </div>\n <div className=\"flex items-baseline gap-1\">\n <span className=\"text-xl font-semibold\">{metric.value}</span>\n {metric.unit && (\n <span className=\"text-sm text-muted-foreground\">{metric.unit}</span>\n )}\n </div>\n {metric.change !== undefined && (\n <div className=\"flex items-center gap-1\">\n {metric.change > 0 ? (\n <TrendingUpIcon className=\"size-3 text-emerald-500\" />\n ) : (\n <TrendingDownIcon className=\"size-3 text-red-500\" />\n )}\n <span\n className={cn(\n 'text-xs',\n metric.change > 0 ? 'text-emerald-500' : 'text-red-500'\n )}\n >\n {Math.abs(metric.change)}\n {metric.unit || '%'}\n </span>\n </div>\n )}\n </div>\n ))}\n </div>\n\n {/* Charts */}\n <div className=\"p-4\">\n {activeChart === 'latency' && (\n <div className=\"h-64\">\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <AreaChart data={latency}>\n <CartesianGrid strokeDasharray=\"3 3\" className=\"stroke-muted\" />\n <XAxis dataKey=\"time\" className=\"text-xs\" tick={{ fill: 'currentColor' }} />\n <YAxis className=\"text-xs\" tick={{ fill: 'currentColor' }} />\n <Tooltip\n contentStyle={{\n backgroundColor: 'hsl(var(--card))',\n borderColor: 'hsl(var(--border))',\n borderRadius: '0.5rem',\n }}\n formatter={(value) => [`${value}ms`]}\n />\n <Area\n type=\"monotone\"\n dataKey=\"p99\"\n stroke=\"#ef4444\"\n fill=\"#ef444420\"\n strokeWidth={1}\n />\n <Area\n type=\"monotone\"\n dataKey=\"p95\"\n stroke=\"#f59e0b\"\n fill=\"#f59e0b20\"\n strokeWidth={1}\n />\n <Area\n type=\"monotone\"\n dataKey=\"p50\"\n stroke=\"#22c55e\"\n fill=\"#22c55e20\"\n strokeWidth={2}\n />\n </AreaChart>\n </ResponsiveContainer>\n <div className=\"flex items-center justify-center gap-4 mt-2\">\n <div className=\"flex items-center gap-1.5\">\n <div className=\"size-2 rounded-full bg-emerald-500\" />\n <span className=\"text-xs text-muted-foreground\">P50</span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <div className=\"size-2 rounded-full bg-amber-500\" />\n <span className=\"text-xs text-muted-foreground\">P95</span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <div className=\"size-2 rounded-full bg-red-500\" />\n <span className=\"text-xs text-muted-foreground\">P99</span>\n </div>\n </div>\n </div>\n )}\n\n {activeChart === 'tokens' && (\n <div className=\"h-64\">\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <BarChart data={tokenUsage}>\n <CartesianGrid strokeDasharray=\"3 3\" className=\"stroke-muted\" />\n <XAxis dataKey=\"date\" className=\"text-xs\" tick={{ fill: 'currentColor' }} />\n <YAxis\n className=\"text-xs\"\n tick={{ fill: 'currentColor' }}\n tickFormatter={(value) => `${(value / 1000).toFixed(0)}k`}\n />\n <Tooltip\n contentStyle={{\n backgroundColor: 'hsl(var(--card))',\n borderColor: 'hsl(var(--border))',\n borderRadius: '0.5rem',\n }}\n formatter={(value) => [String(value).replace(/\\B(?=(\\d{3})+(?!\\d))/g, ','), 'Tokens']}\n />\n <Bar dataKey=\"input\" fill=\"hsl(var(--muted-foreground))\" radius={[4, 4, 0, 0]} />\n <Bar dataKey=\"output\" fill=\"hsl(var(--foreground))\" radius={[4, 4, 0, 0]} />\n </BarChart>\n </ResponsiveContainer>\n <div className=\"flex items-center justify-center gap-4 mt-2\">\n <div className=\"flex items-center gap-1.5\">\n <div className=\"size-2 rounded-full bg-muted-foreground\" />\n <span className=\"text-xs text-muted-foreground\">Input</span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <div className=\"size-2 rounded-full bg-foreground\" />\n <span className=\"text-xs text-muted-foreground\">Output</span>\n </div>\n </div>\n </div>\n )}\n\n {activeChart === 'errors' && (\n <div className=\"space-y-3\">\n {errors.map((error) => (\n <div key={error.type} className=\"flex items-center gap-3\">\n <div className=\"w-32 text-sm\">{error.type}</div>\n <div className=\"flex-1 h-2 bg-muted rounded-full overflow-hidden\">\n <div\n className=\"h-full bg-red-500 rounded-full transition-all\"\n style={{ width: `${error.percentage}%` }}\n />\n </div>\n <div className=\"w-20 text-right\">\n <Badge variant=\"secondary\" className=\"text-xs\">\n {error.count} ({error.percentage}%)\n </Badge>\n </div>\n </div>\n ))}\n <div className=\"pt-4 text-center\">\n <p className=\"text-sm text-muted-foreground\">\n Total Errors: {errors.reduce((sum, e) => sum + e.count, 0)}\n </p>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport default PerformanceMetrics;\n","'use client';\n\nimport { useEffect, useRef } from 'react';\nimport { SparklesIcon } from 'lucide-react';\nimport { cn } from '../core/utils';\nimport { TypingIndicator } from '../components/primitives/typing-indicator';\n\nexport interface ChatPanelProps {\n /** Panel title */\n title?: string;\n /** Panel subtitle or status */\n subtitle?: string;\n /** Header icon */\n icon?: React.ReactNode;\n /** Header actions (right side) */\n headerActions?: React.ReactNode;\n /** Messages content */\n children: React.ReactNode;\n /** Input component */\n input?: React.ReactNode;\n /** Quick replies or suggestions (above input) */\n suggestions?: React.ReactNode;\n /** Footer content (below input) */\n footer?: React.ReactNode;\n /** Is loading/typing */\n isLoading?: boolean;\n /** Auto-scroll to bottom */\n autoScroll?: boolean;\n /** Container class */\n className?: string;\n /** Content class */\n contentClassName?: string;\n /** Fixed height or flexible */\n height?: number | string;\n /** Model selector (in header) */\n modelSelector?: React.ReactNode;\n}\n\nexport function ChatPanel({\n title = 'AI Assistant',\n subtitle,\n icon,\n headerActions,\n children,\n input,\n suggestions,\n footer,\n isLoading = false,\n autoScroll = true,\n className,\n contentClassName,\n height,\n modelSelector,\n}: ChatPanelProps) {\n const scrollRef = useRef<HTMLDivElement>(null);\n\n // Auto-scroll to bottom when content changes\n useEffect(() => {\n if (autoScroll && scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n }\n }, [children, isLoading, autoScroll]);\n\n return (\n <div\n className={cn(\n 'flex flex-col overflow-hidden rounded-lg border bg-card',\n className\n )}\n style={{ height: height ? (typeof height === 'number' ? `${height}px` : height) : undefined }}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between border-b px-4 py-3\">\n <div className=\"flex items-center gap-2\">\n {icon || <SparklesIcon className=\"size-4 text-muted-foreground\" />}\n <div>\n <span className=\"font-medium text-sm\">{title}</span>\n {subtitle && (\n <p className=\"text-muted-foreground text-xs\">{subtitle}</p>\n )}\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n {modelSelector}\n {headerActions}\n </div>\n </div>\n\n {/* Messages area */}\n <div ref={scrollRef} className={cn('flex-1 overflow-y-auto', contentClassName)}>\n <div className=\"flex flex-col gap-4 p-4\">\n {children}\n {isLoading && <TypingIndicator />}\n </div>\n </div>\n\n {/* Suggestions */}\n {suggestions && (\n <div className=\"border-t px-4 py-2\">{suggestions}</div>\n )}\n\n {/* Input */}\n {input}\n\n {/* Footer */}\n {footer && (\n <div className=\"border-t px-4 py-1.5\">\n {footer}\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useEffect, useRef } from 'react';\nimport { MessageSquareIcon, MinusIcon, XIcon } from 'lucide-react';\nimport { AnimatePresence, motion } from 'motion/react';\nimport { Button } from '../ui/button';\nimport { cn } from '../core/utils';\nimport { TypingIndicator } from '../components/primitives/typing-indicator';\nimport { StatusBadge } from '../components/primitives/status-badge';\nimport type { WidgetPosition } from '../core/types';\n\nexport interface FloatingWidgetProps {\n /** Is widget open */\n isOpen: boolean;\n /** Is widget minimized */\n isMinimized?: boolean;\n /** Toggle open state */\n onToggle: () => void;\n /** Toggle minimized state */\n onMinimize?: () => void;\n /** Close widget */\n onClose?: () => void;\n /** Widget title */\n title?: string;\n /** Widget icon */\n icon?: React.ReactNode;\n /** Online status */\n status?: 'online' | 'offline' | 'busy' | 'away';\n /** Unread message count */\n unreadCount?: number;\n /** Messages content */\n children: React.ReactNode;\n /** Input component */\n input?: React.ReactNode;\n /** Quick replies */\n quickReplies?: React.ReactNode;\n /** Footer (e.g., \"Powered by...\") */\n footer?: React.ReactNode;\n /** Is loading/typing */\n isLoading?: boolean;\n /** Position on screen */\n position?: WidgetPosition;\n /** Widget width */\n width?: number;\n /** Widget height */\n height?: number;\n /** Container class */\n className?: string;\n /** Show minimizable button */\n showMinimize?: boolean;\n /** Show close button */\n showClose?: boolean;\n}\n\nconst positionClasses: Record<WidgetPosition, string> = {\n 'bottom-right': 'bottom-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n 'top-right': 'top-4 right-4',\n 'top-left': 'top-4 left-4',\n center: 'top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2',\n};\n\nexport function FloatingWidget({\n isOpen,\n isMinimized = false,\n onToggle,\n onMinimize,\n onClose,\n title = 'AI Assistant',\n icon,\n status = 'online',\n unreadCount = 0,\n children,\n input,\n quickReplies,\n footer,\n isLoading = false,\n position = 'bottom-right',\n width = 380,\n height = 480,\n className,\n showMinimize = true,\n showClose = true,\n}: FloatingWidgetProps) {\n const scrollRef = useRef<HTMLDivElement>(null);\n\n // Auto-scroll to bottom\n useEffect(() => {\n if (isOpen && !isMinimized && scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n }\n }, [children, isLoading, isOpen, isMinimized]);\n\n return (\n <div className={cn('fixed z-50', positionClasses[position], className)}>\n <AnimatePresence mode=\"wait\">\n {isOpen && !isMinimized ? (\n <motion.div\n key=\"panel\"\n initial={{ opacity: 0, scale: 0.92, y: 12 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.92, y: 12 }}\n transition={{ duration: 0.2, ease: 'easeOut' }}\n className=\"flex flex-col overflow-hidden rounded-lg border bg-card shadow-lg\"\n style={{ width, height }}\n >\n {/* Header */}\n <div className=\"flex items-center gap-3 border-b px-4 py-3\">\n <div className=\"flex size-8 items-center justify-center rounded-full bg-muted/50\">\n {icon || <MessageSquareIcon className=\"size-3.5 text-muted-foreground\" />}\n </div>\n <div className=\"flex-1\">\n <span className=\"font-medium text-sm\">{title}</span>\n <StatusBadge status={status} className=\"mt-0.5\" />\n </div>\n <div className=\"flex items-center gap-0.5\">\n {showMinimize && onMinimize && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"size-7 p-0 text-muted-foreground hover:text-foreground\"\n onClick={onMinimize}\n >\n <MinusIcon className=\"size-3.5\" />\n </Button>\n )}\n {showClose && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"size-7 p-0 text-muted-foreground hover:text-foreground\"\n onClick={onClose || onToggle}\n >\n <XIcon className=\"size-3.5\" />\n </Button>\n )}\n </div>\n </div>\n\n {/* Messages */}\n <div ref={scrollRef} className=\"flex-1 overflow-y-auto\">\n <div className=\"flex flex-col gap-3 p-4\">\n {children}\n {isLoading && <TypingIndicator size=\"sm\" />}\n </div>\n </div>\n\n {/* Quick replies / action panel.\n Supports both small reply chips and richer action panels (e.g. a\n confirm card). Constrained to a fraction of the widget height with\n its own scroll so it never covers the conversation, and separated\n from the transcript with a top border. */}\n {quickReplies && (\n <div className=\"max-h-[40%] shrink-0 overflow-y-auto border-t bg-muted/30 px-4 py-2\">\n {quickReplies}\n </div>\n )}\n\n {/* Input */}\n {input}\n\n {/* Footer */}\n {footer && (\n <div className=\"border-t px-4 py-1.5\">\n <p className=\"text-center text-[10px] text-muted-foreground\">{footer}</p>\n </div>\n )}\n </motion.div>\n ) : (\n <motion.button\n key=\"trigger\"\n type=\"button\"\n initial={{ scale: 0.8, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0.8, opacity: 0 }}\n transition={{ duration: 0.15, ease: 'easeOut' }}\n whileHover={{ scale: 1.05 }}\n whileTap={{ scale: 0.95 }}\n onClick={onToggle}\n className=\"relative flex size-12 items-center justify-center rounded-full border bg-card shadow-lg transition-colors hover:bg-muted/50\"\n >\n {icon || <MessageSquareIcon className=\"size-5 text-foreground\" />}\n {unreadCount > 0 && (\n <span className=\"absolute -top-0.5 -right-0.5 flex size-4 items-center justify-center rounded-full bg-foreground font-medium text-[9px] text-background\">\n {unreadCount > 9 ? '9+' : unreadCount}\n </span>\n )}\n </motion.button>\n )}\n </AnimatePresence>\n </div>\n );\n}\n","'use client';\n\nimport { useEffect, useRef } from 'react';\nimport { XIcon, GripVerticalIcon } from 'lucide-react';\nimport { motion } from 'motion/react';\nimport { Button } from '../ui/button';\nimport { cn } from '../core/utils';\nimport { TypingIndicator } from '../components/primitives/typing-indicator';\n\nexport interface FullscreenDashboardProps {\n /** Is fullscreen active */\n isFullscreen?: boolean;\n /** Exit fullscreen handler */\n onExitFullscreen?: () => void;\n /** Title */\n title?: string;\n /** Header actions */\n headerActions?: React.ReactNode;\n /** Main content (chat area) */\n children: React.ReactNode;\n /** Sidebar content (optional) */\n sidebar?: React.ReactNode;\n /** Input component */\n input?: React.ReactNode;\n /** Is loading */\n isLoading?: boolean;\n /** Sidebar position */\n sidebarPosition?: 'left' | 'right';\n /** Sidebar width */\n sidebarWidth?: number;\n /** Show sidebar toggle */\n showSidebarToggle?: boolean;\n /** Sidebar is collapsed */\n isSidebarCollapsed?: boolean;\n /** Toggle sidebar */\n onToggleSidebar?: () => void;\n /** Container class */\n className?: string;\n}\n\nexport function FullscreenDashboard({\n isFullscreen = true,\n onExitFullscreen,\n title = 'AI Dashboard',\n headerActions,\n children,\n sidebar,\n input,\n isLoading = false,\n sidebarPosition = 'right',\n sidebarWidth = 320,\n showSidebarToggle = true,\n isSidebarCollapsed = false,\n onToggleSidebar,\n className,\n}: FullscreenDashboardProps) {\n const scrollRef = useRef<HTMLDivElement>(null);\n\n // Auto-scroll main content\n useEffect(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n }\n }, [children, isLoading]);\n\n // Esc exits fullscreen. Guarded for SSR (no window/document on the server).\n useEffect(() => {\n if (!isFullscreen || !onExitFullscreen) return;\n if (typeof document === 'undefined') return;\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onExitFullscreen();\n };\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [isFullscreen, onExitFullscreen]);\n\n const mainContent = (\n <div className=\"flex flex-1 flex-col overflow-hidden\">\n {/* Main messages/content area */}\n <div ref={scrollRef} className=\"flex-1 overflow-y-auto\">\n <div className=\"mx-auto max-w-3xl p-6\">\n <div className=\"flex flex-col gap-4\">\n {children}\n {isLoading && <TypingIndicator />}\n </div>\n </div>\n </div>\n\n {/* Input */}\n {input && (\n <div className=\"border-t bg-background\">\n <div className=\"mx-auto max-w-3xl\">{input}</div>\n </div>\n )}\n </div>\n );\n\n const sidebarContent = sidebar && !isSidebarCollapsed && (\n <motion.div\n initial={{ width: 0, opacity: 0 }}\n animate={{ width: sidebarWidth, opacity: 1 }}\n exit={{ width: 0, opacity: 0 }}\n transition={{ duration: 0.2 }}\n className={cn(\n 'shrink-0 overflow-hidden border-l bg-muted/30',\n sidebarPosition === 'left' && 'order-first border-l-0 border-r'\n )}\n style={{ width: sidebarWidth }}\n >\n <div className=\"h-full overflow-y-auto p-4\">{sidebar}</div>\n </motion.div>\n );\n\n return (\n <div\n className={cn(\n 'flex flex-col bg-background',\n isFullscreen && 'fixed inset-0 z-50',\n !isFullscreen && 'h-full',\n className\n )}\n >\n {/* Header */}\n <header className=\"flex h-14 items-center justify-between border-b px-4\">\n <div className=\"flex items-center gap-3\">\n {showSidebarToggle && sidebar && onToggleSidebar && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"size-8 p-0\"\n onClick={onToggleSidebar}\n >\n <GripVerticalIcon className=\"size-4\" />\n </Button>\n )}\n <h1 className=\"font-semibold text-lg\">{title}</h1>\n </div>\n\n <div className=\"flex items-center gap-2\">\n {headerActions}\n {onExitFullscreen && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n aria-label=\"Exit fullscreen\"\n title=\"Exit fullscreen (Esc)\"\n className=\"size-8 shrink-0 p-0\"\n onClick={onExitFullscreen}\n >\n <XIcon className=\"size-4\" />\n </Button>\n )}\n </div>\n </header>\n\n {/* Main area with optional sidebar */}\n <div className=\"flex flex-1 overflow-hidden\">\n {sidebarPosition === 'left' && sidebarContent}\n {mainContent}\n {sidebarPosition === 'right' && sidebarContent}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useEffect, useRef, useState } from 'react';\nimport { GripVerticalIcon, PanelLeftCloseIcon, PanelLeftOpenIcon } from 'lucide-react';\nimport { motion } from 'motion/react';\nimport { Button } from '../ui/button';\nimport { cn } from '../core/utils';\nimport { TypingIndicator } from '../components/primitives/typing-indicator';\n\nexport interface SplitViewProps {\n /** Chat/main content (left side) */\n children: React.ReactNode;\n /** Data panel content (right side) */\n dataPanel: React.ReactNode;\n /** Chat input */\n input?: React.ReactNode;\n /** Is loading */\n isLoading?: boolean;\n /** Initial split ratio (0-1) */\n initialSplit?: number;\n /** Minimum panel width in pixels */\n minPanelWidth?: number;\n /** Is data panel collapsed */\n isCollapsed?: boolean;\n /** Toggle collapse */\n onToggleCollapse?: () => void;\n /** Resizable */\n resizable?: boolean;\n /** Container class */\n className?: string;\n /** Chat panel title */\n chatTitle?: string;\n /** Data panel title */\n dataPanelTitle?: string;\n}\n\nexport function SplitView({\n children,\n dataPanel,\n input,\n isLoading = false,\n initialSplit = 0.5,\n minPanelWidth = 300,\n isCollapsed = false,\n onToggleCollapse,\n resizable = true,\n className,\n chatTitle = 'Chat',\n dataPanelTitle = 'Data',\n}: SplitViewProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const scrollRef = useRef<HTMLDivElement>(null);\n const [splitRatio, setSplitRatio] = useState(initialSplit);\n const [isDragging, setIsDragging] = useState(false);\n\n // Auto-scroll chat\n useEffect(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n }\n }, [children, isLoading]);\n\n // Handle drag resize\n const handleMouseDown = () => {\n if (!resizable) return;\n setIsDragging(true);\n };\n\n useEffect(() => {\n if (!isDragging) return;\n\n const handleMouseMove = (e: MouseEvent) => {\n if (!containerRef.current) return;\n const rect = containerRef.current.getBoundingClientRect();\n const newRatio = (e.clientX - rect.left) / rect.width;\n \n // Clamp to min/max\n const minRatio = minPanelWidth / rect.width;\n const maxRatio = 1 - minRatio;\n setSplitRatio(Math.max(minRatio, Math.min(maxRatio, newRatio)));\n };\n\n const handleMouseUp = () => {\n setIsDragging(false);\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, [isDragging, minPanelWidth]);\n\n return (\n <div\n ref={containerRef}\n className={cn('flex h-full overflow-hidden rounded-lg border bg-card', className)}\n >\n {/* Chat panel */}\n <div\n className=\"flex flex-col overflow-hidden\"\n style={{ width: isCollapsed ? '100%' : `${splitRatio * 100}%` }}\n >\n {/* Chat header */}\n <div className=\"flex h-10 items-center justify-between border-b px-3\">\n <span className=\"font-medium text-sm\">{chatTitle}</span>\n {onToggleCollapse && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"size-6 p-0\"\n onClick={onToggleCollapse}\n >\n {isCollapsed ? (\n <PanelLeftOpenIcon className=\"size-3.5\" />\n ) : (\n <PanelLeftCloseIcon className=\"size-3.5\" />\n )}\n </Button>\n )}\n </div>\n\n {/* Chat content */}\n <div ref={scrollRef} className=\"flex-1 overflow-y-auto\">\n <div className=\"flex flex-col gap-4 p-4\">\n {children}\n {isLoading && <TypingIndicator />}\n </div>\n </div>\n\n {/* Chat input */}\n {input}\n </div>\n\n {/* Resize handle */}\n {!isCollapsed && resizable && (\n <div\n className={cn(\n 'flex w-1 cursor-col-resize items-center justify-center bg-border hover:bg-muted-foreground/20 transition-colors',\n isDragging && 'bg-primary'\n )}\n onMouseDown={handleMouseDown}\n >\n <GripVerticalIcon className=\"size-3 text-muted-foreground\" />\n </div>\n )}\n\n {/* Data panel */}\n {!isCollapsed && (\n <motion.div\n initial={{ width: 0, opacity: 0 }}\n animate={{ width: `${(1 - splitRatio) * 100}%`, opacity: 1 }}\n className=\"flex flex-col overflow-hidden\"\n >\n {/* Data header */}\n <div className=\"flex h-10 items-center border-b px-3\">\n <span className=\"font-medium text-sm\">{dataPanelTitle}</span>\n </div>\n\n {/* Data content */}\n <div className=\"flex-1 overflow-y-auto p-4\">{dataPanel}</div>\n </motion.div>\n )}\n </div>\n );\n}\n","// ============================================================================\n// AGENT EVERYWHERE - Component Registration\n// ============================================================================\n// Wires every component referenced by the manifest into the runtime\n// componentRegistry so an orchestrator can resolve a manifest name to a real\n// React component (via DynamicRenderer / SlotRenderer) at runtime.\n\nimport type { ComponentType } from 'react';\nimport { componentRegistry } from './index';\n\nimport { MessageBubble } from '../components/primitives/message';\nimport { TypingIndicator } from '../components/primitives/typing-indicator';\nimport { StatusBadge } from '../components/primitives/status-badge';\n\nimport { PromptInput } from '../components/input/prompt-input';\nimport { MultimodalInput } from '../components/input/multimodal-input';\nimport { QuickReplies } from '../components/input/quick-replies';\nimport { TemplateSelector } from '../components/input/template-selector';\nimport { InlineSuggestionsInput } from '../components/input/inline-suggestions';\nimport { FileDropZone } from '../components/input/file-drop-zone';\nimport { PromptLibrary } from '../components/input/prompt-library';\n\nimport { PersonaSelector } from '../components/interactive/persona-selector';\nimport { EntityCard } from '../components/interactive/entity-card';\nimport { OptionCards } from '../components/interactive/option-cards';\nimport { SettingsPanel } from '../components/interactive/settings-panel';\nimport { AgentHandoff } from '../components/interactive/agent-handoff';\nimport { ListingFeed } from '../components/interactive/listing-feed';\nimport { ControlGrid } from '../components/interactive/control-grid';\nimport { RecommendationCards } from '../components/interactive/recommendation-cards';\nimport { ScheduleTimeline } from '../components/interactive/schedule-timeline';\n\nimport { MessageWithReasoning } from '../components/messages/message-with-reasoning';\nimport { MessageWithSteps } from '../components/messages/message-with-steps';\nimport { MessageWithFeedback } from '../components/messages/message-with-feedback';\nimport { MessageWithAttachments } from '../components/messages/message-with-attachments';\nimport { ConversationArtifact } from '../components/messages/conversation-artifact';\n\nimport { ChartContainer } from '../components/data-display/chart-container';\nimport { MetricsGrid } from '../components/data-display/metrics-grid';\nimport { DataTable } from '../components/data-display/data-table';\nimport { ProgressTracker } from '../components/data-display/progress-tracker';\nimport { SentimentDisplay } from '../components/data-display/sentiment-display';\nimport { MediaGallery } from '../components/data-display/media-gallery';\nimport { AllocationBreakdown } from '../components/data-display/allocation-breakdown';\nimport { AnalyticsDashboard } from '../components/data-display/analytics-dashboard';\n\nimport { ImageGenerator } from '../components/specialty/image-generator';\nimport { WritingAssistant } from '../components/specialty/writing-assistant';\nimport { OnboardingWizard } from '../components/specialty/onboarding-wizard';\nimport { QuizCard } from '../components/specialty/quiz-card';\nimport { GuidedLessonFlow } from '../components/specialty/guided-lesson-flow';\nimport { MediaEditorCanvas } from '../components/specialty/media-editor-canvas';\n\nimport { ConversationAnalytics } from '../components/analytics/conversation-analytics';\nimport { PerformanceMetrics } from '../components/analytics/performance-metrics';\n\nimport { ChatPanel } from '../containers/chat-panel';\nimport { FloatingWidget } from '../containers/floating-widget';\nimport { FullscreenDashboard } from '../containers/fullscreen-dashboard';\nimport { SplitView } from '../containers/split-view';\n\ntype AnyComponent = ComponentType<Record<string, unknown>>;\n\n/**\n * Map of manifest component name → component. Keys correspond exactly to the\n * `name` field of each entry in `componentManifest`, so a render instruction\n * produced from the manifest resolves to the right component.\n */\nexport const componentMap: Record<string, AnyComponent> = {\n MessageBubble,\n TypingIndicator,\n StatusBadge,\n PromptInput,\n MultimodalInput,\n QuickReplies,\n TemplateSelector,\n InlineSuggestionsInput,\n FileDropZone,\n PromptLibrary,\n PersonaSelector,\n EntityCard,\n OptionCards,\n SettingsPanel,\n AgentHandoff,\n ListingFeed,\n ControlGrid,\n RecommendationCards,\n ScheduleTimeline,\n MessageWithReasoning,\n MessageWithSteps,\n MessageWithFeedback,\n MessageWithAttachments,\n ConversationArtifact,\n ChartContainer,\n MetricsGrid,\n DataTable,\n ProgressTracker,\n SentimentDisplay,\n MediaGallery,\n AllocationBreakdown,\n AnalyticsDashboard,\n ImageGenerator,\n WritingAssistant,\n OnboardingWizard,\n QuizCard,\n GuidedLessonFlow,\n MediaEditorCanvas,\n ConversationAnalytics,\n PerformanceMetrics,\n ChatPanel,\n FloatingWidget,\n FullscreenDashboard,\n SplitView,\n} as unknown as Record<string, AnyComponent>;\n\nlet registered = false;\n\n/**\n * Register every built-in component into the shared registry. Idempotent —\n * safe to call from multiple entry points. Call once during app startup so the\n * orchestrator can render components by manifest name.\n */\nexport function registerAllComponents() {\n if (registered) return;\n for (const [name, component] of Object.entries(componentMap)) {\n componentRegistry.register(name, component);\n }\n registered = true;\n}\n","// ============================================================================\n// AGENT EVERYWHERE - Mock Backend\n// ============================================================================\n// A fully in-memory implementation of `AgentBackend`. It fakes streaming text,\n// reasoning, tool calls, and report generation so the engine and playground run\n// with zero network access and no real LLM. Everything here is deterministic\n// scaffolding with abstract, domain-neutral content.\n\nimport type {\n AgentBackend,\n AgentReport,\n AgentStreamChunk,\n GenerateReportOptions,\n SendOptions,\n ToolDefinition,\n} from './backend';\nimport type { DataPayload } from './types';\nimport { generateId } from './utils';\n\nexport interface MockBackendConfig {\n /** Delay between streamed tokens, ms. */\n tokenDelayMs?: number;\n /** Delay before the stream starts, ms. */\n latencyMs?: number;\n /** Emit reasoning steps before the answer. */\n withReasoning?: boolean;\n /** Emit a tool call + result mid-stream. */\n withToolCalls?: boolean;\n /** Attach a generated data payload to responses. */\n withData?: boolean;\n /**\n * Override how the reply text is produced. Receives the user content and\n * returns the full assistant reply (still streamed token-by-token).\n */\n responder?: (content: string) => string;\n /** Tool definitions advertised by `listTools()`. */\n tools?: ToolDefinition[];\n}\n\nconst sleep = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));\n\nconst DEFAULT_REPLY =\n 'Here is a summary of what I found. The key signals are trending in a ' +\n 'positive direction, with a few areas worth a closer look. I can break any ' +\n 'of these down further or generate a full report on demand.';\n\nfunction buildSampleData(): DataPayload {\n const labels = ['Segment A', 'Segment B', 'Segment C', 'Segment D'];\n return {\n type: 'chart',\n chart: {\n type: 'bar',\n title: 'Distribution by segment',\n insight: 'Segment A leads, with steady contribution across the rest.',\n data: labels.map((label, i) => ({\n label,\n value: Math.round(40 + Math.sin(i) * 25 + i * 8),\n })),\n },\n };\n}\n\nexport function createMockBackend(config: MockBackendConfig = {}): AgentBackend {\n const {\n tokenDelayMs = 18,\n latencyMs = 300,\n withReasoning = true,\n withToolCalls = false,\n withData = false,\n responder,\n tools = [],\n } = config;\n\n async function* send(\n content: string,\n options: SendOptions = {}\n ): AsyncIterable<AgentStreamChunk> {\n const { signal } = options;\n const aborted = () => signal?.aborted;\n\n const messageId = generateId('msg');\n yield { type: 'message_start', messageId, role: 'assistant' };\n\n await sleep(latencyMs);\n if (aborted()) return;\n\n if (withReasoning) {\n const steps = [\n { label: 'Understanding request', content: 'Parsing intent and scope.' },\n { label: 'Gathering context', content: 'Pulling relevant signals.' },\n { label: 'Composing response', content: 'Drafting a concise answer.' },\n ];\n for (const [i, s] of steps.entries()) {\n if (aborted()) return;\n yield {\n type: 'reasoning',\n step: {\n id: `reason-${i}`,\n label: s.label,\n content: s.content,\n status: 'complete',\n },\n };\n await sleep(120);\n }\n }\n\n if (withToolCalls && (options.tools?.length || tools.length)) {\n const callId = generateId('call');\n const tool = (options.tools ?? tools)[0];\n yield {\n type: 'tool_call',\n call: {\n id: callId,\n name: tool?.name ?? 'query',\n arguments: { input: content },\n label: tool?.description ?? 'Running query',\n },\n };\n await sleep(260);\n if (aborted()) return;\n yield {\n type: 'tool_result',\n callId,\n result: { status: 'success', output: { rows: 4 }, data: buildSampleData() },\n };\n }\n\n const reply = responder ? responder(content) : DEFAULT_REPLY;\n const tokens = reply.split(/(\\s+)/);\n let streamed = '';\n for (const token of tokens) {\n if (aborted()) return;\n streamed += token;\n yield { type: 'text_delta', text: token };\n await sleep(tokenDelayMs);\n }\n\n let data: DataPayload | undefined;\n if (withData) {\n data = buildSampleData();\n yield { type: 'data', data };\n }\n\n yield {\n type: 'message_complete',\n message: {\n id: messageId,\n role: 'assistant',\n content: streamed,\n timestamp: new Date(),\n data,\n },\n };\n }\n\n async function generateReport(\n options: GenerateReportOptions\n ): Promise<AgentReport> {\n await sleep(latencyMs * 2);\n const metrics: DataPayload = {\n type: 'metrics',\n metrics: [\n { id: 'm1', label: 'Total', value: '12,480', trend: { direction: 'up', value: 12 } },\n { id: 'm2', label: 'Active', value: '3,210', trend: { direction: 'up', value: 4 } },\n { id: 'm3', label: 'Rate', value: '68%', trend: { direction: 'down', value: 2 } },\n { id: 'm4', label: 'Score', value: '4.6', trend: { direction: 'stable', value: 0 } },\n ],\n };\n return {\n id: generateId('report'),\n title: 'Generated Report',\n subtitle: options.prompt.slice(0, 120),\n generatedAt: new Date(),\n sections: [\n {\n id: 'overview',\n title: 'Overview',\n summary:\n 'A high-level snapshot of the requested metrics. All figures are ' +\n 'illustrative placeholders produced by the mock backend.',\n data: metrics,\n },\n {\n id: 'breakdown',\n title: 'Breakdown',\n summary: 'Distribution across the primary segments.',\n data: buildSampleData(),\n },\n {\n id: 'detail',\n title: 'Detail',\n summary: 'Row-level detail backing the figures above.',\n data: {\n type: 'table',\n table: {\n title: 'Records',\n columns: [\n { key: 'name', label: 'Name' },\n { key: 'value', label: 'Value', type: 'number', align: 'right' },\n { key: 'change', label: 'Change', align: 'right' },\n ],\n rows: [\n { name: 'Segment A', value: 5120, change: '+12%' },\n { name: 'Segment B', value: 3480, change: '+4%' },\n { name: 'Segment C', value: 2310, change: '-2%' },\n { name: 'Segment D', value: 1570, change: '+1%' },\n ],\n },\n },\n },\n ],\n };\n }\n\n return {\n send,\n generateReport,\n listTools: () => tools,\n };\n}\n","'use client';\n\n// ============================================================================\n// AGENT EVERYWHERE - Backend Hook\n// ============================================================================\n// Bridges an `AgentBackend` to local message state. Returns a `send` function\n// that streams an assistant reply into a live-updating message, plus a\n// `generateReport` helper. Works standalone or wired into AgentProvider.\n\nimport { useCallback, useRef, useState } from 'react';\nimport type {\n AgentBackend,\n AgentReport,\n ToolCall,\n} from './backend';\nimport type {\n AgentMessage,\n Attachment,\n ExecutionStep,\n ReasoningStep,\n} from './types';\nimport { generateId } from './utils';\n\nexport interface UseAgentBackendOptions {\n backend: AgentBackend;\n initialMessages?: AgentMessage[];\n onError?: (error: Error) => void;\n}\n\nexport interface UseAgentBackendResult {\n messages: AgentMessage[];\n isLoading: boolean;\n error?: string;\n activeToolCalls: ToolCall[];\n send: (content: string, attachments?: Attachment[]) => Promise<void>;\n generateReport: (prompt: string) => Promise<AgentReport>;\n setMessages: React.Dispatch<React.SetStateAction<AgentMessage[]>>;\n reset: () => void;\n cancel: () => void;\n}\n\nexport function useAgentBackend({\n backend,\n initialMessages = [],\n onError,\n}: UseAgentBackendOptions): UseAgentBackendResult {\n const [messages, setMessages] = useState<AgentMessage[]>(initialMessages);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | undefined>(undefined);\n const [activeToolCalls, setActiveToolCalls] = useState<ToolCall[]>([]);\n const abortRef = useRef<AbortController | undefined>(undefined);\n\n const upsertAssistant = useCallback(\n (id: string, updater: (prev: AgentMessage) => AgentMessage) => {\n setMessages((prev) => {\n const exists = prev.some((m) => m.id === id);\n if (!exists) {\n const base: AgentMessage = {\n id,\n role: 'assistant',\n content: '',\n timestamp: new Date(),\n };\n return [...prev, updater(base)];\n }\n return prev.map((m) => (m.id === id ? updater(m) : m));\n });\n },\n []\n );\n\n const send = useCallback(\n async (content: string, attachments?: Attachment[]) => {\n if (!content.trim() && (!attachments || attachments.length === 0)) return;\n\n const userMessage: AgentMessage = {\n id: generateId('msg'),\n role: 'user',\n content,\n timestamp: new Date(),\n attachments,\n };\n setMessages((prev) => [...prev, userMessage]);\n setError(undefined);\n setIsLoading(true);\n setActiveToolCalls([]);\n\n const controller = new AbortController();\n abortRef.current = controller;\n\n let assistantId = '';\n const reasoning: ReasoningStep[] = [];\n const steps: ExecutionStep[] = [];\n\n try {\n const history = [...messages, userMessage];\n for await (const chunk of backend.send(content, {\n history,\n attachments,\n tools: backend.listTools?.(),\n signal: controller.signal,\n })) {\n switch (chunk.type) {\n case 'message_start':\n assistantId = chunk.messageId;\n upsertAssistant(assistantId, (m) => m);\n break;\n case 'reasoning':\n reasoning.push(chunk.step);\n upsertAssistant(assistantId, (m) => ({ ...m, reasoning: [...reasoning] }));\n break;\n case 'step':\n steps.push(chunk.step);\n upsertAssistant(assistantId, (m) => ({ ...m, steps: [...steps] }));\n break;\n case 'tool_call':\n setActiveToolCalls((prev) => [...prev, chunk.call]);\n break;\n case 'tool_result':\n setActiveToolCalls((prev) => prev.filter((c) => c.id !== chunk.callId));\n if (chunk.result.data) {\n upsertAssistant(assistantId, (m) => ({ ...m, data: chunk.result.data }));\n }\n break;\n case 'text_delta':\n upsertAssistant(assistantId, (m) => ({\n ...m,\n content: m.content + chunk.text,\n }));\n break;\n case 'data':\n upsertAssistant(assistantId, (m) => ({ ...m, data: chunk.data }));\n break;\n case 'message_complete':\n upsertAssistant(assistantId, (m) => ({ ...m, ...chunk.message, id: m.id }));\n break;\n case 'error':\n throw new Error(chunk.message);\n }\n }\n } catch (err) {\n if (controller.signal.aborted) return;\n const e = err instanceof Error ? err : new Error('Backend request failed');\n setError(e.message);\n onError?.(e);\n } finally {\n setIsLoading(false);\n setActiveToolCalls([]);\n abortRef.current = undefined;\n }\n },\n [backend, messages, upsertAssistant, onError]\n );\n\n const generateReport = useCallback(\n (prompt: string) => backend.generateReport({ prompt, history: messages }),\n [backend, messages]\n );\n\n const cancel = useCallback(() => {\n abortRef.current?.abort();\n setIsLoading(false);\n }, []);\n\n const reset = useCallback(() => {\n abortRef.current?.abort();\n setMessages(initialMessages);\n setError(undefined);\n setIsLoading(false);\n setActiveToolCalls([]);\n }, [initialMessages]);\n\n return {\n messages,\n isLoading,\n error,\n activeToolCalls,\n send,\n generateReport,\n setMessages,\n reset,\n cancel,\n };\n}\n","// ============================================================================\n// AGENT EVERYWHERE - Semantic-Builder WebSocket Client\n// ============================================================================\n// A small, framework- and vendor-neutral WebSocket client that speaks the\n// streaming semantic-builder chat protocol. It owns connection lifecycle,\n// exponential-backoff reconnect, and typed envelope dispatch. React hooks and\n// the AgentBackend adapter both build on top of this — there is exactly one\n// place that understands the wire format.\n//\n// The client embeds NO API origin and NO route structure. The caller supplies\n// either a complete `socketUrl` or a `resolveSocketUrl` function, so nothing\n// about any specific backend deployment ships inside this package.\n\nimport {\n type AgentAttachment,\n type AgentBlock,\n type ConversationHistoryItem,\n type ServerEnvelope,\n type SocketUrlResolver,\n type UserMessageEnvelope,\n} from './protocol';\n\nexport type ConnectionState =\n | 'idle'\n | 'connecting'\n | 'ready'\n | 'streaming'\n | 'error'\n | 'requires_shared_domain';\n\nexport interface SocketClientOptions<TBlock = AgentBlock> {\n /** Numeric (or numeric-string) website id. */\n websiteId: string | number;\n /** Page-category token the conversation is scoped to. */\n pageCategoryId: string;\n /**\n * A fully-qualified `ws://`/`wss://` URL, OR an http(s) origin that will be\n * upgraded by `resolveSocketUrl`. Provide exactly one of `socketUrl` or\n * `resolveSocketUrl`.\n */\n socketUrl?: string;\n /**\n * Resolver that returns the WebSocket URL for this conversation. Supplied by\n * the host so the package embeds no origin/route. Takes precedence over\n * `socketUrl` when both are present.\n */\n resolveSocketUrl?: SocketUrlResolver;\n /** Called whenever the high-level connection state changes. */\n onStateChange?: (state: ConnectionState) => void;\n /** Called for every decoded server envelope. */\n onEnvelope?: (envelope: ServerEnvelope<TBlock>) => void;\n /** Called on a transport or protocol error with a human-readable message. */\n onError?: (message: string) => void;\n /**\n * Optional WebSocket implementation (for non-browser/SSR/test environments).\n * Defaults to the global `WebSocket`.\n */\n webSocketImpl?: typeof WebSocket;\n /** Cap on the reconnect backoff, ms. Defaults to 30_000. */\n maxReconnectDelayMs?: number;\n}\n\nexport interface SocketSendPayload<TBlock = AgentBlock> {\n message: string;\n blocks: TBlock[];\n conversationHistory: ConversationHistoryItem[];\n contentBrief?: Record<string, unknown> | null;\n attachments?: AgentAttachment[];\n}\n\nfunction reconnectDelayMs(attempt: number, cap: number): number {\n return Math.min(1000 * 2 ** Math.max(attempt - 1, 0), cap);\n}\n\n/**\n * Manages a single semantic-builder WebSocket connection. Pure TS (not React)\n * so it can be reused by hooks, the AgentBackend adapter, tests, or a\n * non-React host. Call `connect()` to open and `close()` to tear down.\n */\nexport class SemanticBuilderSocketClient<TBlock = AgentBlock> {\n private readonly options: SocketClientOptions<TBlock>;\n private socket: WebSocket | null = null;\n private reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n private shouldReconnect = true;\n private reconnectAttempts = 0;\n private connectedOnce = false;\n private state: ConnectionState = 'idle';\n private readonly WebSocketImpl: typeof WebSocket;\n private readonly maxReconnectDelayMs: number;\n\n constructor(options: SocketClientOptions<TBlock>) {\n this.options = options;\n const impl =\n options.webSocketImpl ??\n (typeof WebSocket !== 'undefined' ? WebSocket : undefined);\n if (!impl) {\n throw new Error(\n 'SemanticBuilderSocketClient: no WebSocket implementation available. ' +\n 'Pass `webSocketImpl` when running outside a browser.',\n );\n }\n this.WebSocketImpl = impl;\n this.maxReconnectDelayMs = options.maxReconnectDelayMs ?? 30_000;\n }\n\n /** Current high-level connection state. */\n getState(): ConnectionState {\n return this.state;\n }\n\n /** True when the socket is open and the backend is ready for messages. */\n isReady(): boolean {\n return (\n this.state === 'ready' &&\n this.socket?.readyState === this.WebSocketImpl.OPEN\n );\n }\n\n private setState(next: ConnectionState) {\n if (this.state === next) return;\n this.state = next;\n this.options.onStateChange?.(next);\n }\n\n private resolveUrl(): string {\n const { resolveSocketUrl, socketUrl, websiteId, pageCategoryId } =\n this.options;\n if (resolveSocketUrl) {\n return resolveSocketUrl({ websiteId, pageCategoryId });\n }\n if (socketUrl && socketUrl.trim().length > 0) {\n return socketUrl;\n }\n throw new Error(\n 'No WebSocket URL available. Provide either `socketUrl` or ' +\n '`resolveSocketUrl` (the host supplies the origin and route).',\n );\n }\n\n /** Open (or re-open) the connection. Idempotent for an already-open socket. */\n connect(): void {\n let url: string;\n try {\n url = this.resolveUrl();\n } catch (err) {\n this.setState('error');\n this.options.onError?.(\n err instanceof Error ? err.message : 'Could not resolve socket URL.',\n );\n return;\n }\n\n this.closeSocket();\n this.shouldReconnect = true;\n this.setState('connecting');\n\n const socket = new this.WebSocketImpl(url);\n this.socket = socket;\n\n socket.addEventListener('open', () => {\n this.setState('connecting');\n });\n\n socket.addEventListener('message', (event: MessageEvent) => {\n let envelope: ServerEnvelope<TBlock> | null = null;\n try {\n envelope = JSON.parse(String(event.data));\n } catch {\n return;\n }\n if (!envelope) return;\n\n switch (envelope.type) {\n case 'connection_ready':\n this.reconnectAttempts = 0;\n this.connectedOnce = true;\n this.setState('ready');\n break;\n case 'assistant_message_start':\n case 'assistant_message_delta':\n case 'assistant_message_thinking_delta':\n this.setState('streaming');\n break;\n case 'assistant_message_complete':\n this.setState('ready');\n break;\n case 'error':\n this.setState(this.isSocketOpen() ? 'ready' : 'error');\n this.options.onError?.(\n envelope.error || 'The backend could not process that request.',\n );\n break;\n default:\n break;\n }\n\n this.options.onEnvelope?.(envelope);\n });\n\n socket.addEventListener('close', () => {\n this.socket = null;\n if (!this.shouldReconnect) return;\n\n this.reconnectAttempts += 1;\n const delay = reconnectDelayMs(\n this.reconnectAttempts,\n this.maxReconnectDelayMs,\n );\n\n // Surface an error only after a couple of failed attempts so a single\n // transient drop doesn't flash an error at the user.\n const surfaceError =\n this.reconnectAttempts >= (this.connectedOnce ? 2 : 3);\n if (surfaceError) {\n this.setState('error');\n this.options.onError?.(\n 'Unable to reach the agent service. Retrying automatically…',\n );\n } else if (this.state !== 'requires_shared_domain') {\n this.setState('connecting');\n }\n\n this.reconnectTimer = setTimeout(() => this.connect(), delay);\n });\n\n socket.addEventListener('error', () => {\n // Defer to the close handler for retry/surface decisions; browsers fire\n // an error event before the close/retry cycle.\n });\n }\n\n /**\n * Send a user message. Returns false (without throwing) when the socket is\n * not ready, so callers can surface a friendly \"not connected yet\" message.\n */\n send(payload: SocketSendPayload<TBlock>): boolean {\n if (!this.isReady() || !this.socket) {\n this.setState('error');\n this.options.onError?.(\n 'The agent is not ready yet. Wait for the connection to finish, then try again.',\n );\n return false;\n }\n\n const envelope: UserMessageEnvelope<TBlock> = {\n type: 'user_message',\n message: payload.message,\n blocks: payload.blocks,\n conversationHistory: payload.conversationHistory,\n contentBrief: payload.contentBrief ?? null,\n attachments: payload.attachments ?? [],\n };\n\n this.setState('streaming');\n this.socket.send(JSON.stringify(envelope));\n return true;\n }\n\n /** Force a fresh connection attempt, resetting backoff. */\n retry(): void {\n this.shouldReconnect = true;\n this.reconnectAttempts = 0;\n this.connect();\n }\n\n /** Permanently close the connection and stop reconnecting. */\n close(): void {\n this.shouldReconnect = false;\n this.closeSocket();\n }\n\n private isSocketOpen(): boolean {\n return this.socket?.readyState === this.WebSocketImpl.OPEN;\n }\n\n private closeSocket(): void {\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n const socket = this.socket;\n this.socket = null;\n if (socket && socket.readyState < this.WebSocketImpl.CLOSING) {\n socket.close();\n }\n }\n}\n","// ============================================================================\n// AGENT EVERYWHERE - Semantic-Builder WebSocket Protocol\n// ============================================================================\n// Typed, framework- and vendor-neutral description of the wire protocol used by\n// a streaming semantic-builder chat backend.\n//\n// The transport is fully host-agnostic: the caller supplies the complete\n// WebSocket URL (or a builder for it), so this package embeds NO API origin,\n// NO route/path structure, and NO infrastructure detail. Nothing here reveals\n// any specific backend deployment.\n//\n// All fields are camelCase on the wire.\n\n/** A prior turn replayed to the agent as grounding context. */\nexport interface ConversationHistoryItem {\n role: 'user' | 'assistant';\n content: string;\n}\n\n/** Kinds of attachment the agent understands. */\nexport type AttachmentKind =\n | 'uploaded_media'\n | 'source_url'\n | 'scraped_media';\n\n/** Coarse media classification for an attachment. */\nexport type AttachmentMediaType = 'image' | 'video' | 'svg' | 'unknown';\n\n/**\n * A single attachment sent alongside a user message. Only `kind` is required;\n * everything else is optional and forwarded verbatim to the backend.\n */\nexport interface AgentAttachment {\n kind: AttachmentKind | (string & {});\n mediaRecordId?: number | string | null;\n mediaType?: AttachmentMediaType | (string & {});\n url?: string | null;\n token?: string | null;\n filename?: string | null;\n alt?: string | null;\n sourceUrl?: string | null;\n intentHint?: string | null;\n}\n\n/**\n * Opaque generated block. The engine never interprets block internals — it\n * forwards them to the host via `onGeneratedBlocks`. Callers supply their own\n * block type via the generic on the client/hook.\n */\nexport type AgentBlock = Record<string, unknown>;\n\n/** Update semantics returned with a block payload. */\nexport type BlockUpdateMode = 'full_page' | 'partial_update' | (string & {});\n\n// === Client -> Server ===\n\n/** The only message type the backend accepts. */\nexport interface UserMessageEnvelope<TBlock = AgentBlock> {\n type: 'user_message';\n message: string;\n blocks: TBlock[];\n conversationHistory: ConversationHistoryItem[];\n contentBrief?: Record<string, unknown> | null;\n attachments?: AgentAttachment[];\n}\n\n// === Server -> Client envelopes ===\n\nexport interface ConnectionReadyEnvelope {\n type: 'connection_ready';\n pageCategoryId?: string;\n pageCategoryName?: string;\n pageCategorySlug?: string;\n}\n\nexport interface AssistantMessageStartEnvelope {\n type: 'assistant_message_start';\n messageId: string;\n userId?: number | string;\n}\n\nexport interface AssistantMessageDeltaEnvelope {\n type: 'assistant_message_delta';\n messageId: string;\n delta: string;\n}\n\nexport interface AssistantMessageThinkingDeltaEnvelope {\n type: 'assistant_message_thinking_delta';\n messageId: string;\n delta: string;\n}\n\nexport interface AssistantMessageBlocksEnvelope<TBlock = AgentBlock> {\n type: 'assistant_message_blocks';\n messageId: string;\n blocks: TBlock[] | null;\n updateMode?: BlockUpdateMode;\n}\n\nexport interface AssistantMessageCompleteEnvelope<TBlock = AgentBlock> {\n type: 'assistant_message_complete';\n messageId?: string;\n message: string;\n thinking?: string | null;\n blocks: TBlock[] | null;\n updateMode?: BlockUpdateMode;\n}\n\nexport interface ErrorEnvelope {\n type: 'error';\n error?: string;\n}\n\n/** Discriminated union of every envelope the backend can emit. */\nexport type ServerEnvelope<TBlock = AgentBlock> =\n | ConnectionReadyEnvelope\n | AssistantMessageStartEnvelope\n | AssistantMessageDeltaEnvelope\n | AssistantMessageThinkingDeltaEnvelope\n | AssistantMessageBlocksEnvelope<TBlock>\n | AssistantMessageCompleteEnvelope<TBlock>\n | ErrorEnvelope;\n\n/**\n * Resolves a fully-qualified WebSocket URL for a conversation. The host app\n * supplies this so the package never embeds any origin or route structure.\n *\n * Implementations typically read an API origin from an environment variable\n * and append whatever path their backend exposes. Return a `ws://` or `wss://`\n * URL. The default builder below is a convenience, not a requirement.\n */\nexport type SocketUrlResolver = (params: {\n websiteId: string | number;\n pageCategoryId: string;\n}) => string;\n\n/**\n * Convenience builder that upgrades a caller-supplied HTTP(S) origin to ws/wss\n * and appends a path. Both `baseUrl` and `path` are REQUIRED and supplied by\n * the host — this package ships no default origin and no default route, so\n * nothing about any specific backend is baked in.\n *\n * @param baseUrl Absolute http(s) origin (e.g. read from an env var).\n * @param path Path on that origin, with `{websiteId}` and\n * `{pageCategoryId}` placeholders substituted.\n * @param params The identifiers to substitute into `path`.\n */\nexport function buildSocketUrl(\n baseUrl: string,\n path: string,\n params: { websiteId: string | number; pageCategoryId: string },\n): string {\n if (!baseUrl || baseUrl.trim().length === 0) {\n throw new Error(\n 'A `baseUrl` is required to build the socket URL. ' +\n 'Supply your API origin (e.g. from an environment variable).',\n );\n }\n if (!path || path.trim().length === 0) {\n throw new Error(\n 'A `path` is required to build the socket URL. ' +\n 'Supply the route your backend exposes.',\n );\n }\n\n const resolvedPath = path\n .replace('{websiteId}', encodeURIComponent(String(params.websiteId)))\n .replace('{pageCategoryId}', encodeURIComponent(params.pageCategoryId));\n\n let url: URL;\n try {\n url = new URL(resolvedPath, baseUrl);\n } catch {\n throw new Error(`Invalid \\`baseUrl\\` provided to the socket client: ${baseUrl}`);\n }\n\n if (url.protocol !== 'https:' && url.protocol !== 'http:') {\n throw new Error(\n `\\`baseUrl\\` must be an http(s) URL; received protocol \"${url.protocol}\".`,\n );\n }\n\n url.protocol = url.protocol === 'https:' ? 'wss:' : 'ws:';\n return url.toString();\n}\n\n/** Coerce/normalize an arbitrary website id into numeric form, or null. */\nexport function normalizeWebsiteId(value: string | number): number | null {\n if (typeof value === 'number') return Number.isFinite(value) ? value : null;\n if (typeof value === 'string' && /^\\d+$/.test(value)) {\n return Number.parseInt(value, 10);\n }\n return null;\n}\n","'use client';\n\n// ============================================================================\n// AGENT EVERYWHERE - Semantic Builder Hook\n// ============================================================================\n// A drop-in React hook that drives a semantic-builder conversation over a\n// streaming WebSocket backend. Its return shape is intentionally compatible\n// with a typical host `useSemanticBuilderConversation`, so existing UI can\n// adopt it with minimal changes.\n//\n// Vendor-neutral: the host supplies the socket URL (or a resolver); this hook\n// embeds no API origin or route.\n//\n// Responsibilities owned here (so the host no longer has to):\n// - Connection lifecycle + reconnect (delegated to the socket client)\n// - Message state machine (start/delta/thinking/complete/error)\n// - Hidden requests (auto-draft) that stream blocks without showing a bubble\n// - Block extraction fallback from message text\n// - Assistant text sanitization (strips tool-call XML + fenced block JSON)\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n SemanticBuilderSocketClient,\n type ConnectionState,\n} from './client';\nimport type {\n AgentAttachment,\n AgentBlock,\n BlockUpdateMode,\n ConversationHistoryItem,\n ServerEnvelope,\n SocketUrlResolver,\n} from './protocol';\nimport { generateId } from '../core/utils';\n\nexport type ChatMessageRole = 'system' | 'user' | 'assistant';\n\nexport interface SemanticBuilderChatMessage {\n id: string;\n role: ChatMessageRole;\n content: string;\n thinking?: string;\n streaming?: boolean;\n createdAt: number;\n}\n\nexport interface UseSemanticBuilderOptions<TBlock = AgentBlock> {\n /**\n * A fully-qualified `ws`/`wss` URL. Provide this OR `resolveSocketUrl`. The\n * host owns the origin/route; this package embeds neither.\n */\n socketUrl?: string;\n /** Resolver that returns the socket URL for this conversation. */\n resolveSocketUrl?: SocketUrlResolver;\n websiteId: string | number;\n pageCategoryId: string;\n pageName: string;\n pageSlug?: string;\n /** Current page blocks, forwarded to the agent for grounding. */\n blocks: TBlock[];\n /** Optional content brief grounding context. */\n contentBrief?: Record<string, unknown> | null;\n /** Connect only when enabled (e.g. once the page has finished loading). */\n enabled: boolean;\n /** Invoked when the agent returns generated blocks. */\n onGeneratedBlocks?: (blocks: TBlock[], updateMode?: BlockUpdateMode) => void;\n /**\n * Optional hook to intercept undo-like messages and restore a prior local\n * snapshot before hitting the network. Return the restored blocks to short\n * circuit, or null/undefined to fall through to the agent.\n */\n onUndoRequest?: (message: string) => Promise<TBlock[] | null> | TBlock[] | null;\n /** Optional override for the welcome system message. */\n buildWelcomeMessage?: (args: {\n pageName: string;\n hasContentBrief: boolean;\n }) => string;\n /** Optional WebSocket implementation (SSR/tests). */\n webSocketImpl?: typeof WebSocket;\n}\n\nexport interface SendMessageOptions {\n /** Don't render a user/assistant bubble; used for background auto-draft. */\n hidden?: boolean;\n attachments?: AgentAttachment[];\n}\n\nexport interface UseSemanticBuilderResult {\n messages: SemanticBuilderChatMessage[];\n connectionState: ConnectionState;\n connectionError: string | null;\n statusLabel: string;\n isConnected: boolean;\n isStreaming: boolean;\n sendMessage: (\n content: string,\n options?: SendMessageOptions,\n ) => Promise<boolean>;\n retry: () => void;\n}\n\n// --- Text helpers ---\n\nfunction sanitizeAssistantText(content?: string | null): string {\n if (!content) return '';\n return content\n .split('\\n')\n .filter((line) => {\n const trimmed = line.trimStart();\n return (\n !trimmed.startsWith('<function_calls') &&\n !trimmed.startsWith('</function_calls') &&\n !trimmed.startsWith('<function_call') &&\n !trimmed.startsWith('</function_call')\n );\n })\n .join('\\n')\n .trim();\n}\n\nfunction stripBlockJson(content: string): string {\n const stripped = content.replace(/```json\\s*[[{][\\s\\S]*?```/g, '').trim();\n if (/^[[{]/.test(stripped)) {\n try {\n JSON.parse(stripped);\n return '';\n } catch {\n return stripped;\n }\n }\n return stripped;\n}\n\n/**\n * Best-effort extraction of a generated-blocks array from assistant text. The\n * backend normally emits structured `assistant_message_blocks`, but this is a\n * fallback for fenced ```json arrays embedded in the final message.\n */\nfunction extractBlocksFromText<TBlock>(text: string): TBlock[] | null {\n if (!text) return null;\n const fenced = text.match(/```json\\s*([[{][\\s\\S]*?)```/);\n const candidate = fenced ? fenced[1] : null;\n const tryParse = (raw: string): TBlock[] | null => {\n try {\n const parsed = JSON.parse(raw);\n if (Array.isArray(parsed)) return parsed as TBlock[];\n if (parsed && typeof parsed === 'object') {\n const maybe = (parsed as { blocks?: unknown }).blocks;\n if (Array.isArray(maybe)) return maybe as TBlock[];\n }\n } catch {\n /* ignore */\n }\n return null;\n };\n if (candidate) {\n const fromFence = tryParse(candidate.trim());\n if (fromFence?.length) return fromFence;\n }\n const trimmed = text.trim();\n if (/^[[{]/.test(trimmed)) {\n const direct = tryParse(trimmed);\n if (direct?.length) return direct;\n }\n return null;\n}\n\nfunction extractSourceUrlAttachments(content: string): AgentAttachment[] {\n const matches = content.match(/https?:\\/\\/[^\\s<>\"'`]+/gi) || [];\n const seen = new Set<string>();\n return matches\n .map((rawUrl) => rawUrl.replace(/[),.;!?]+$/g, ''))\n .filter((url) => {\n if (seen.has(url)) return false;\n seen.add(url);\n return true;\n })\n .slice(0, 3)\n .map((url) => ({\n kind: 'source_url' as const,\n mediaType: 'unknown' as const,\n url,\n sourceUrl: url,\n intentHint: 'user_provided_source_url',\n }));\n}\n\nfunction buildHistory(\n messages: SemanticBuilderChatMessage[],\n): ConversationHistoryItem[] {\n return messages\n .filter(\n (m): m is SemanticBuilderChatMessage & { role: 'user' | 'assistant' } =>\n (m.role === 'user' || m.role === 'assistant') &&\n m.content.trim().length > 0 &&\n !m.streaming,\n )\n .map((m) => ({ role: m.role, content: m.content }));\n}\n\nfunction upsertMessage(\n messages: SemanticBuilderChatMessage[],\n messageId: string,\n updater: (\n message: SemanticBuilderChatMessage,\n ) => SemanticBuilderChatMessage,\n): { found: boolean; nextMessages: SemanticBuilderChatMessage[] } {\n let found = false;\n const nextMessages = messages.map((message) => {\n if (message.id !== messageId) return message;\n found = true;\n return updater(message);\n });\n return { found, nextMessages };\n}\n\nexport function useSemanticBuilder<TBlock = AgentBlock>({\n socketUrl,\n resolveSocketUrl,\n websiteId,\n pageCategoryId,\n pageName,\n pageSlug,\n blocks,\n contentBrief,\n enabled,\n onGeneratedBlocks,\n onUndoRequest,\n buildWelcomeMessage,\n webSocketImpl,\n}: UseSemanticBuilderOptions<TBlock>): UseSemanticBuilderResult {\n const [messages, setMessages] = useState<SemanticBuilderChatMessage[]>([]);\n const [connectionState, setConnectionState] =\n useState<ConnectionState>('idle');\n const [connectionError, setConnectionError] = useState<string | null>(null);\n\n const clientRef = useRef<SemanticBuilderSocketClient<TBlock> | null>(null);\n const messagesRef = useRef<SemanticBuilderChatMessage[]>([]);\n const blocksRef = useRef(blocks);\n const contentBriefRef = useRef(contentBrief);\n const onGeneratedBlocksRef = useRef(onGeneratedBlocks);\n const onUndoRequestRef = useRef(onUndoRequest);\n const resolveSocketUrlRef = useRef(resolveSocketUrl);\n const pendingHiddenRequestsRef = useRef(0);\n const hiddenAssistantMessageIdsRef = useRef(new Set<string>());\n\n useEffect(() => {\n messagesRef.current = messages;\n }, [messages]);\n useEffect(() => {\n blocksRef.current = blocks;\n }, [blocks]);\n useEffect(() => {\n contentBriefRef.current = contentBrief;\n }, [contentBrief]);\n useEffect(() => {\n onGeneratedBlocksRef.current = onGeneratedBlocks;\n }, [onGeneratedBlocks]);\n useEffect(() => {\n onUndoRequestRef.current = onUndoRequest;\n }, [onUndoRequest]);\n useEffect(() => {\n resolveSocketUrlRef.current = resolveSocketUrl;\n }, [resolveSocketUrl]);\n\n // Seed the welcome system message whenever the page/brief context changes.\n useEffect(() => {\n const hasContentBrief = !!contentBrief;\n const content =\n buildWelcomeMessage?.({ pageName, hasContentBrief }) ??\n (hasContentBrief\n ? `Connected to ${pageName}. The page brief is loaded and ready. Describe the page you want and I'll stream back layout guidance and design reasoning.`\n : `Connected to ${pageName}. There is no saved content brief yet, so I'll work from the current page structure and brand context.`);\n setMessages([\n {\n id: 'agent-everywhere-welcome',\n role: 'system',\n content,\n createdAt: Date.now(),\n },\n ]);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [contentBrief, pageName, pageSlug]);\n\n const handleEnvelope = useCallback((envelope: ServerEnvelope<TBlock>) => {\n switch (envelope.type) {\n case 'connection_ready':\n setConnectionError(null);\n break;\n\n case 'assistant_message_start': {\n setConnectionError(null);\n const messageId = envelope.messageId;\n if (!messageId) return;\n if (pendingHiddenRequestsRef.current > 0) {\n pendingHiddenRequestsRef.current -= 1;\n hiddenAssistantMessageIdsRef.current.add(messageId);\n return;\n }\n setMessages((current) => [\n ...current,\n {\n id: messageId,\n role: 'assistant',\n content: '',\n streaming: true,\n createdAt: Date.now(),\n },\n ]);\n break;\n }\n\n case 'assistant_message_delta': {\n const { messageId, delta } = envelope;\n if (!messageId || hiddenAssistantMessageIdsRef.current.has(messageId))\n return;\n setMessages((current) => {\n const { found, nextMessages } = upsertMessage(\n current,\n messageId,\n (m) => ({ ...m, content: `${m.content}${delta || ''}` }),\n );\n return found ? nextMessages : current;\n });\n break;\n }\n\n case 'assistant_message_thinking_delta': {\n const { messageId, delta } = envelope;\n if (!messageId || hiddenAssistantMessageIdsRef.current.has(messageId))\n return;\n setMessages((current) => {\n const { found, nextMessages } = upsertMessage(\n current,\n messageId,\n (m) => ({ ...m, thinking: `${m.thinking || ''}${delta || ''}` }),\n );\n return found ? nextMessages : current;\n });\n break;\n }\n\n case 'assistant_message_blocks': {\n if (envelope.blocks && envelope.blocks.length > 0) {\n onGeneratedBlocksRef.current?.(envelope.blocks, envelope.updateMode);\n }\n break;\n }\n\n case 'assistant_message_complete': {\n const messageId = envelope.messageId;\n const finalContent = sanitizeAssistantText(envelope.message || '');\n const finalThinking = sanitizeAssistantText(envelope.thinking || '');\n const completeBlocks =\n envelope.blocks && envelope.blocks.length > 0\n ? envelope.blocks\n : extractBlocksFromText<TBlock>(finalContent);\n const hasBlocks = Boolean(completeBlocks?.length);\n const displayContent =\n stripBlockJson(finalContent).length > 0\n ? finalContent\n : hasBlocks\n ? 'Done — I updated the page.'\n : finalContent;\n\n if (completeBlocks?.length) {\n onGeneratedBlocksRef.current?.(completeBlocks, envelope.updateMode);\n }\n\n if (!messageId) return;\n\n if (hiddenAssistantMessageIdsRef.current.has(messageId)) {\n hiddenAssistantMessageIdsRef.current.delete(messageId);\n return;\n }\n\n setMessages((current) => {\n const { found, nextMessages } = upsertMessage(\n current,\n messageId,\n (m) => ({\n ...m,\n content: displayContent || m.content,\n thinking: finalThinking || m.thinking,\n streaming: false,\n }),\n );\n if (found) return nextMessages;\n return [\n ...current,\n {\n id: messageId,\n role: 'assistant',\n content: displayContent,\n thinking: finalThinking || undefined,\n streaming: false,\n createdAt: Date.now(),\n },\n ];\n });\n break;\n }\n\n case 'error': {\n pendingHiddenRequestsRef.current = 0;\n hiddenAssistantMessageIdsRef.current.clear();\n // Drop empty streaming placeholders; finalize ones with content.\n setMessages((current) =>\n current.flatMap((m) => {\n if (!m.streaming) return [m];\n if (m.content.trim().length === 0 && !(m.thinking || '').trim()) {\n return [];\n }\n return [{ ...m, streaming: false }];\n }),\n );\n setConnectionError(\n envelope.error || 'The backend could not process that request.',\n );\n break;\n }\n\n default:\n break;\n }\n }, []);\n\n // Build/destroy the client when connection inputs change.\n useEffect(() => {\n if (!enabled) return;\n\n const client = new SemanticBuilderSocketClient<TBlock>({\n websiteId,\n pageCategoryId,\n socketUrl,\n resolveSocketUrl: resolveSocketUrlRef.current,\n onStateChange: setConnectionState,\n onEnvelope: handleEnvelope,\n onError: setConnectionError,\n webSocketImpl,\n });\n clientRef.current = client;\n client.connect();\n\n return () => {\n client.close();\n clientRef.current = null;\n };\n }, [\n enabled,\n handleEnvelope,\n pageCategoryId,\n socketUrl,\n webSocketImpl,\n websiteId,\n ]);\n\n const sendMessage = useCallback(\n async (\n content: string,\n options?: SendMessageOptions,\n ): Promise<boolean> => {\n const trimmed = content.trim();\n if (!trimmed) return false;\n\n // Undo interception (optional host-provided snapshot restore).\n if (!options?.hidden && onUndoRequestRef.current) {\n const restored = await onUndoRequestRef.current(trimmed);\n if (restored && restored.length) {\n onGeneratedBlocksRef.current?.(restored, 'full_page');\n setMessages((current) => [\n ...current,\n {\n id: generateId('msg'),\n role: 'user',\n content: trimmed,\n createdAt: Date.now(),\n },\n {\n id: generateId('msg'),\n role: 'assistant',\n content: 'Reverted to the previous local builder snapshot.',\n createdAt: Date.now(),\n },\n ]);\n return true;\n }\n }\n\n const client = clientRef.current;\n if (!client || !client.isReady()) {\n setConnectionState('error');\n setConnectionError(\n 'The agent is not ready yet. Wait for the connection to finish, then try again.',\n );\n return false;\n }\n\n setConnectionError(null);\n const history = buildHistory(messagesRef.current);\n\n if (!options?.hidden) {\n setMessages((current) => [\n ...current,\n {\n id: generateId('msg'),\n role: 'user',\n content: trimmed,\n createdAt: Date.now(),\n },\n ]);\n } else {\n pendingHiddenRequestsRef.current += 1;\n }\n\n return client.send({\n message: trimmed,\n blocks: blocksRef.current,\n conversationHistory: history,\n contentBrief: contentBriefRef.current ?? null,\n attachments: [\n ...(options?.attachments || []),\n ...extractSourceUrlAttachments(trimmed),\n ],\n });\n },\n [],\n );\n\n const retry = useCallback(() => {\n clientRef.current?.retry();\n }, []);\n\n const isConnected =\n connectionState === 'ready' || connectionState === 'streaming';\n const isStreaming = connectionState === 'streaming';\n\n const statusLabel = useMemo(() => {\n switch (connectionState) {\n case 'ready':\n return 'AI connected';\n case 'streaming':\n return 'Streaming';\n case 'connecting':\n return 'Connecting';\n case 'requires_shared_domain':\n return 'Shared-domain auth required';\n case 'error':\n return 'Connection issue';\n default:\n return 'Starting';\n }\n }, [connectionState]);\n\n return {\n messages,\n connectionState,\n connectionError,\n statusLabel,\n isConnected,\n isStreaming,\n sendMessage,\n retry,\n };\n}\n","'use client';\n\nimport * as React from 'react';\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';\nimport { cn } from '../core/utils';\n\nconst ScrollArea = React.forwardRef<\n React.ComponentRef<typeof ScrollAreaPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn(\"relative overflow-hidden\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n));\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;\n\nconst ScrollBar = React.forwardRef<\n React.ComponentRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n \"flex touch-none select-none transition-colors\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent p-[1px]\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent p-[1px]\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n));\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;\n\nexport { ScrollArea, ScrollBar };\n","'use client';\n\nimport * as React from 'react';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport { cn } from '../core/utils';\n\nconst TooltipProvider = TooltipPrimitive.Provider;\n\nconst Tooltip = TooltipPrimitive.Root;\n\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ComponentRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground 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 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","'use client';\n\nimport { cn, formatTime, formatRelativeTime } from '../../core/utils';\n\nexport interface TimestampProps {\n date: Date;\n /** Format style */\n format?: 'time' | 'relative';\n className?: string;\n}\n\nexport function Timestamp({ date, format = 'time', className }: TimestampProps) {\n const formatted = format === 'time' ? formatTime(date) : formatRelativeTime(date);\n\n return (\n <span className={cn('text-muted-foreground text-[10px]', className)}>\n {formatted}\n </span>\n );\n}\n","'use client';\n\nimport { AlertCircleIcon, InfoIcon, AlertTriangleIcon, CheckCircleIcon } from 'lucide-react';\nimport { motion } from 'motion/react';\nimport { cn } from '../../core/utils';\n\nexport type SystemMessageType = 'info' | 'warning' | 'error' | 'success';\n\nexport interface SystemMessageProps {\n type?: SystemMessageType;\n children: React.ReactNode;\n className?: string;\n /** Show icon */\n showIcon?: boolean;\n}\n\nconst icons = {\n info: InfoIcon,\n warning: AlertTriangleIcon,\n error: AlertCircleIcon,\n success: CheckCircleIcon,\n};\n\nconst styles = {\n info: 'bg-muted/50 text-muted-foreground border-muted',\n warning: 'bg-amber-500/10 text-amber-600 dark:text-amber-400 border-amber-500/20',\n error: 'bg-red-500/10 text-red-600 dark:text-red-400 border-red-500/20',\n success: 'bg-emerald-500/10 text-emerald-600 dark:text-emerald-400 border-emerald-500/20',\n};\n\nexport function SystemMessage({\n type = 'info',\n children,\n className,\n showIcon = true,\n}: SystemMessageProps) {\n const Icon = icons[type];\n\n return (\n <motion.div\n initial={{ opacity: 0, scale: 0.98 }}\n animate={{ opacity: 1, scale: 1 }}\n className={cn(\n 'flex items-center gap-2 rounded-md border px-3 py-2',\n styles[type],\n className\n )}\n >\n {showIcon && <Icon className=\"size-4 shrink-0\" />}\n <span className=\"text-xs\">{children}</span>\n </motion.div>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { CheckIcon, CopyIcon, ThumbsUpIcon, ThumbsDownIcon, MoreHorizontalIcon } from 'lucide-react';\nimport { Button } from '../../ui/button';\nimport { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider } from '../../ui/tooltip';\nimport { cn, copyToClipboard } from '../../core/utils';\n\nexport interface MessageActionsProps {\n /** Content to copy */\n content?: string;\n /** Show copy button */\n showCopy?: boolean;\n /** Show vote buttons */\n showVote?: boolean;\n /** Show more button */\n showMore?: boolean;\n /** Current vote state */\n vote?: 'up' | 'down' | null;\n /** Vote callback */\n onVote?: (vote: 'up' | 'down' | null) => void;\n /** More options callback */\n onMore?: () => void;\n /** Custom actions */\n children?: React.ReactNode;\n className?: string;\n /** Size variant */\n size?: 'sm' | 'md';\n}\n\nexport function MessageActions({\n content,\n showCopy = true,\n showVote = false,\n showMore = false,\n vote,\n onVote,\n onMore,\n children,\n className,\n size = 'sm',\n}: MessageActionsProps) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = async () => {\n if (!content) return;\n const success = await copyToClipboard(content);\n if (success) {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }\n };\n\n const handleVote = (direction: 'up' | 'down') => {\n if (!onVote) return;\n onVote(vote === direction ? null : direction);\n };\n\n const iconSize = size === 'sm' ? 'size-3' : 'size-3.5';\n const buttonSize = size === 'sm' ? 'size-6' : 'size-7';\n\n return (\n <TooltipProvider delayDuration={300}>\n <div className={cn('flex items-center gap-0.5', className)}>\n {showCopy && content && (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleCopy}\n className={cn(buttonSize, 'p-0 text-muted-foreground hover:text-foreground')}\n >\n {copied ? (\n <CheckIcon className={iconSize} />\n ) : (\n <CopyIcon className={iconSize} />\n )}\n </Button>\n </TooltipTrigger>\n <TooltipContent>{copied ? 'Copied!' : 'Copy'}</TooltipContent>\n </Tooltip>\n )}\n\n {showVote && (\n <>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => handleVote('up')}\n className={cn(\n buttonSize,\n 'p-0 transition-colors',\n vote === 'up'\n ? 'text-emerald-500 hover:text-emerald-600'\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n <ThumbsUpIcon className={cn(iconSize, vote === 'up' && 'fill-current')} />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Good response</TooltipContent>\n </Tooltip>\n\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => handleVote('down')}\n className={cn(\n buttonSize,\n 'p-0 transition-colors',\n vote === 'down'\n ? 'text-red-500 hover:text-red-600'\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n <ThumbsDownIcon className={cn(iconSize, vote === 'down' && 'fill-current')} />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Poor response</TooltipContent>\n </Tooltip>\n </>\n )}\n\n {showMore && onMore && (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onMore}\n className={cn(buttonSize, 'p-0 text-muted-foreground hover:text-foreground')}\n >\n <MoreHorizontalIcon className={iconSize} />\n </Button>\n </TooltipTrigger>\n <TooltipContent>More options</TooltipContent>\n </Tooltip>\n )}\n\n {children}\n </div>\n </TooltipProvider>\n );\n}\n","'use client';\n\nimport { motion } from 'motion/react';\nimport { cn } from '../../core/utils';\nimport { ChartContainer } from './chart-container';\nimport { MetricsGrid } from './metrics-grid';\nimport { DataTable } from './data-table';\nimport type { DataPayload } from '../../core/types';\nimport type { AgentReport } from '../../core/backend';\n\nexport interface DataPayloadViewProps {\n payload: DataPayload;\n className?: string;\n}\n\n/** Renders any DataPayload via the appropriate data-display component. */\nexport function DataPayloadView({ payload, className }: DataPayloadViewProps) {\n if (payload.type === 'chart' && payload.chart) {\n return <ChartContainer data={payload.chart} className={className} />;\n }\n if (payload.type === 'metrics' && payload.metrics) {\n return <MetricsGrid metrics={payload.metrics} className={className} />;\n }\n if (payload.type === 'table' && payload.table) {\n return <DataTable data={payload.table} className={className} />;\n }\n return null;\n}\n\nexport interface ReportViewProps {\n report: AgentReport;\n className?: string;\n}\n\n/**\n * Renders a structured AgentReport as a sequence of titled sections. Used as\n * the default content for the expand-to-dashboard surface.\n */\nexport function ReportView({ report, className }: ReportViewProps) {\n return (\n <div className={cn('space-y-6', className)}>\n <header>\n <h2 className=\"text-xl font-semibold\">{report.title}</h2>\n {report.subtitle && <p className=\"text-sm text-muted-foreground\">{report.subtitle}</p>}\n <p className=\"mt-1 text-xs text-muted-foreground\">\n Generated {report.generatedAt.toLocaleString()}\n </p>\n </header>\n\n {report.sections.map((section, index) => (\n <motion.section\n key={section.id}\n initial={{ opacity: 0, y: 12 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: index * 0.08 }}\n className=\"space-y-3\"\n >\n <h3 className=\"font-medium\">{section.title}</h3>\n {section.summary && (\n <p className=\"text-sm text-muted-foreground\">{section.summary}</p>\n )}\n {section.data && <DataPayloadView payload={section.data} />}\n </motion.section>\n ))}\n </div>\n );\n}\n\nexport default ReportView;\n","'use client';\n\nimport { motion } from 'motion/react';\nimport { ClipboardListIcon } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Button, type ButtonProps } from '../../ui/button';\nimport { Badge } from '../../ui/badge';\nimport { MessageContent } from '../primitives/message';\n\nexport interface ConfirmationAction {\n id: string;\n label: string;\n /** Button variant; defaults to 'default' for the first action, 'outline' otherwise. */\n variant?: ButtonProps['variant'];\n /** Disable this action. */\n disabled?: boolean;\n /** Render a loading/busy state and disable the button. */\n busy?: boolean;\n}\n\nexport interface ConfirmationPanelProps {\n /** Panel heading, e.g. \"Proposed plan\". */\n title?: string;\n /**\n * Short label shown beside the title (e.g. \"0 pages to change\"). Rendered as\n * a badge so scope/summary metadata reads at a glance.\n */\n summary?: string;\n /**\n * The plan / confirmation body. When a string is passed it is rendered\n * through the same markdown pipeline as assistant messages, so headings,\n * paragraphs, and bullet/numbered lists keep their spacing and line breaks.\n * Pass `markdown={false}` to render verbatim, or pass a node for custom body.\n */\n body?: React.ReactNode;\n /**\n * Render the string body as markdown. Defaults to true. Ignored for node\n * bodies (which are rendered as-is).\n */\n markdown?: boolean;\n /** Leading icon for the header. Defaults to a clipboard list icon. */\n icon?: React.ReactNode;\n /** Action buttons (confirm / cancel / regenerate, …). */\n actions?: ConfirmationAction[];\n /** Invoked with the action id when an action button is activated. */\n onAction?: (id: string) => void;\n /** Accessible label for the panel region. Defaults to the title. */\n ariaLabel?: string;\n className?: string;\n}\n\n/**\n * An inline confirmation / proposed-plan / action panel.\n *\n * It is designed to flow inside the transcript like any other message — NOT to\n * be pinned above the input — so it never covers the latest assistant response.\n * The body reuses {@link MessageContent}, giving long plans the same markdown\n * rendering, typography, and spacing as normal assistant messages.\n */\nexport function ConfirmationPanel({\n title = 'Proposed plan',\n summary,\n body,\n markdown = true,\n icon,\n actions,\n onAction,\n ariaLabel,\n className,\n}: ConfirmationPanelProps) {\n const hasBody = body !== undefined && body !== null && body !== '';\n\n return (\n <motion.section\n initial={{ opacity: 0, y: 6 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.2 }}\n aria-label={ariaLabel ?? title}\n className={cn(\n 'flex w-full min-w-0 flex-col rounded-lg border bg-card p-4',\n className\n )}\n >\n <header className=\"flex items-center gap-2\">\n <span className=\"flex size-6 shrink-0 items-center justify-center rounded-md bg-muted/60 text-muted-foreground\">\n {icon ?? <ClipboardListIcon className=\"size-3.5\" />}\n </span>\n <h4 className=\"min-w-0 flex-1 truncate font-medium text-sm\">{title}</h4>\n {summary && (\n <Badge variant=\"secondary\" className=\"shrink-0 text-[10px] font-normal\">\n {summary}\n </Badge>\n )}\n </header>\n\n {hasBody && (\n <div className=\"mt-2 min-w-0\">\n {typeof body === 'string' ? (\n <MessageContent markdown={markdown}>{body}</MessageContent>\n ) : (\n body\n )}\n </div>\n )}\n\n {actions && actions.length > 0 && (\n <div className=\"mt-3 flex flex-wrap gap-2\">\n {actions.map((action, index) => (\n <Button\n key={action.id}\n type=\"button\"\n size=\"sm\"\n variant={action.variant ?? (index === 0 ? 'default' : 'outline')}\n disabled={action.disabled || action.busy}\n aria-busy={action.busy || undefined}\n onClick={() => onAction?.(action.id)}\n >\n {action.label}\n </Button>\n ))}\n </div>\n )}\n </motion.section>\n );\n}\n\nexport default ConfirmationPanel;\n","'use client';\n\nimport { cn } from '../../core/utils';\nimport { MessageContainer, MessageBubble, MessageContent } from '../primitives/message';\nimport { AgentAvatar } from '../primitives/avatar';\nimport { MessageWithReasoning } from './message-with-reasoning';\nimport { MessageWithSteps } from './message-with-steps';\nimport { MessageWithAttachments } from './message-with-attachments';\nimport { DataPayloadView } from '../data-display/report-view';\nimport { ConfirmationPanel } from '../interactive/confirmation-panel';\nimport type { AgentMessage } from '../../core/types';\n\nexport interface MessageListProps {\n messages: AgentMessage[];\n /** Show avatars next to messages. */\n showAvatars?: boolean;\n /** Optional custom renderer; falls back to the built-in renderer. */\n renderMessage?: (message: AgentMessage) => React.ReactNode;\n /** Feedback handler passed to feedback-capable messages. */\n onFeedback?: (messageId: string, vote: 'up' | 'down') => void;\n /**\n * Invoked when an inline confirmation-panel action is activated. Receives the\n * owning message id and the action id.\n */\n onConfirmAction?: (messageId: string, actionId: string) => void;\n className?: string;\n}\n\n/**\n * Renders a list of AgentMessages. For each message it composes the optional\n * rich sections (reasoning, steps) above the message bubble, then the bubble\n * content, attachments, and any structured data payload. This is the default\n * conversation body shared by every surface.\n */\nexport function MessageList({\n messages,\n showAvatars = true,\n renderMessage,\n onConfirmAction,\n className,\n}: MessageListProps) {\n return (\n <div className={cn('flex flex-col gap-4', className)}>\n {messages.map((message) => {\n if (renderMessage) {\n return <div key={message.id}>{renderMessage(message)}</div>;\n }\n\n const hasReasoning =\n message.role === 'assistant' &&\n !!message.reasoning &&\n message.reasoning.length > 0;\n const hasSteps =\n message.role === 'assistant' && !!message.steps && message.steps.length > 0;\n const hasAttachments = !!message.attachments && message.attachments.length > 0;\n\n return (\n <MessageContainer key={message.id} role={message.role}>\n {showAvatars && <AgentAvatar role={message.role} size=\"sm\" />}\n <div className=\"flex min-w-0 flex-col gap-2\">\n {hasReasoning && <MessageWithReasoning steps={message.reasoning!} />}\n {hasSteps && <MessageWithSteps steps={message.steps!} />}\n\n {message.content && (\n <MessageBubble role={message.role}>\n <MessageContent>{message.content}</MessageContent>\n </MessageBubble>\n )}\n\n {hasAttachments && (\n <MessageWithAttachments attachments={message.attachments!} />\n )}\n\n {message.data && <DataPayloadView payload={message.data} />}\n\n {message.confirmation && (\n <ConfirmationPanel\n title={message.confirmation.title}\n summary={message.confirmation.summary}\n body={message.confirmation.body}\n markdown={message.confirmation.markdown}\n actions={message.confirmation.actions}\n onAction={(actionId) => onConfirmAction?.(message.id, actionId)}\n />\n )}\n </div>\n </MessageContainer>\n );\n })}\n </div>\n );\n}\n\nexport default MessageList;\n","'use client';\n\nimport { useEffect, useRef } from 'react';\nimport { XIcon } from 'lucide-react';\nimport { AnimatePresence, motion } from 'motion/react';\nimport { Button } from '../ui/button';\nimport { Avatar, AvatarFallback, AvatarImage } from '../ui/avatar';\nimport { cn } from '../core/utils';\nimport { TypingIndicator } from '../components/primitives/typing-indicator';\n\nexport interface OverlayModalProps {\n /** Is modal open */\n isOpen: boolean;\n /** Close handler */\n onClose: () => void;\n /** Modal title */\n title?: string;\n /** Avatar/agent info */\n agent?: {\n name: string;\n avatar?: string;\n initials?: string;\n status?: string;\n };\n /** Messages content */\n children: React.ReactNode;\n /** Input component */\n input?: React.ReactNode;\n /** Is loading/typing */\n isLoading?: boolean;\n /** Modal width */\n width?: number | string;\n /** Modal height */\n height?: number | string;\n /** Container class */\n className?: string;\n /** Backdrop class */\n backdropClassName?: string;\n /** Close on backdrop click */\n closeOnBackdrop?: boolean;\n}\n\nexport function OverlayModal({\n isOpen,\n onClose,\n title,\n agent,\n children,\n input,\n isLoading = false,\n width = 'calc(100% - 48px)',\n height = 540,\n className,\n backdropClassName,\n closeOnBackdrop = true,\n}: OverlayModalProps) {\n const scrollRef = useRef<HTMLDivElement>(null);\n\n // Auto-scroll to bottom\n useEffect(() => {\n if (isOpen && scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n }\n }, [children, isLoading, isOpen]);\n\n // Handle escape key\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n onClose();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, onClose]);\n\n return (\n <AnimatePresence>\n {isOpen && (\n <>\n {/* Backdrop */}\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.15 }}\n className={cn(\n 'fixed inset-0 z-50 bg-black/40 backdrop-blur-[2px]',\n backdropClassName\n )}\n onClick={closeOnBackdrop ? onClose : undefined}\n aria-hidden=\"true\"\n />\n\n {/* Modal */}\n <motion.div\n initial={{ opacity: 0, scale: 0.95, y: 20 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.95, y: 20 }}\n transition={{ duration: 0.2 }}\n className={cn(\n 'fixed left-1/2 top-1/2 z-50 -translate-x-1/2 -translate-y-1/2',\n 'flex flex-col overflow-hidden rounded-xl border bg-card shadow-lg',\n className\n )}\n style={{\n width: typeof width === 'number' ? `${width}px` : width,\n height: typeof height === 'number' ? `${height}px` : height,\n maxWidth: 'calc(100vw - 32px)',\n maxHeight: 'calc(100vh - 32px)',\n }}\n >\n {/* Header */}\n <div className=\"flex items-center gap-3 border-b px-4 py-3\">\n {agent && (\n <Avatar className=\"size-7\">\n {agent.avatar && <AvatarImage src={agent.avatar} alt={agent.name} />}\n <AvatarFallback className=\"text-xs\">\n {agent.initials || agent.name.slice(0, 2).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n )}\n <div className=\"min-w-0 flex-1\">\n <p className=\"font-medium text-sm\">{title || agent?.name || 'Chat'}</p>\n {agent?.status && (\n <p className=\"flex items-center gap-1.5 text-muted-foreground text-xs\">\n <span className=\"size-1.5 rounded-full bg-emerald-500\" />\n {agent.status}\n </p>\n )}\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"size-7 p-0\"\n onClick={onClose}\n >\n <XIcon className=\"size-3.5\" />\n </Button>\n </div>\n\n {/* Messages */}\n <div ref={scrollRef} className=\"flex-1 overflow-y-auto py-2\">\n {children}\n {isLoading && (\n <div className=\"px-4 py-2\">\n <TypingIndicator />\n </div>\n )}\n </div>\n\n {/* Input */}\n {input}\n </motion.div>\n </>\n )}\n </AnimatePresence>\n );\n}\n","'use client';\n\nimport { useEffect, useRef } from 'react';\nimport { ArrowLeftIcon, MoreVerticalIcon } from 'lucide-react';\nimport { Button } from '../ui/button';\nimport { cn } from '../core/utils';\nimport { TypingIndicator } from '../components/primitives/typing-indicator';\nimport { StatusBadge } from '../components/primitives/status-badge';\n\nexport interface MobileShellProps {\n /** Title */\n title?: string;\n /** Subtitle */\n subtitle?: string;\n /** Back button handler */\n onBack?: () => void;\n /** More options handler */\n onMore?: () => void;\n /** Status */\n status?: 'online' | 'offline' | 'busy' | 'away';\n /** Messages content */\n children: React.ReactNode;\n /** Input component */\n input?: React.ReactNode;\n /** Quick replies */\n quickReplies?: React.ReactNode;\n /** Is loading */\n isLoading?: boolean;\n /** Container class */\n className?: string;\n /** Safe area insets */\n safeArea?: boolean;\n}\n\nexport function MobileShell({\n title = 'Assistant',\n subtitle,\n onBack,\n onMore,\n status,\n children,\n input,\n quickReplies,\n isLoading = false,\n className,\n safeArea = true,\n}: MobileShellProps) {\n const scrollRef = useRef<HTMLDivElement>(null);\n\n // Auto-scroll\n useEffect(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n }\n }, [children, isLoading]);\n\n return (\n <div\n className={cn(\n 'flex h-full flex-col bg-background',\n safeArea && 'pb-safe pt-safe',\n className\n )}\n >\n {/* Header */}\n <header className=\"flex h-14 shrink-0 items-center gap-2 border-b px-2\">\n {onBack && (\n <Button variant=\"ghost\" size=\"sm\" className=\"size-9 p-0\" onClick={onBack}>\n <ArrowLeftIcon className=\"size-5\" />\n </Button>\n )}\n <div className=\"min-w-0 flex-1\">\n <h1 className=\"truncate font-semibold text-base\">{title}</h1>\n {subtitle && (\n <p className=\"truncate text-muted-foreground text-xs\">{subtitle}</p>\n )}\n {status && !subtitle && <StatusBadge status={status} />}\n </div>\n {onMore && (\n <Button variant=\"ghost\" size=\"sm\" className=\"size-9 p-0\" onClick={onMore}>\n <MoreVerticalIcon className=\"size-5\" />\n </Button>\n )}\n </header>\n\n {/* Messages */}\n <div ref={scrollRef} className=\"flex-1 overflow-y-auto\">\n <div className=\"flex flex-col gap-3 p-3\">\n {children}\n {isLoading && <TypingIndicator />}\n </div>\n </div>\n\n {/* Quick replies */}\n {quickReplies && (\n <div className=\"shrink-0 overflow-x-auto border-t px-3 py-2\">\n <div className=\"flex gap-2\">{quickReplies}</div>\n </div>\n )}\n\n {/* Input */}\n {input && <div className=\"shrink-0 border-t\">{input}</div>}\n </div>\n );\n}\n","'use client';\n\nimport { useEffect, type ReactNode } from 'react';\nimport { XIcon } from 'lucide-react';\nimport { Button } from '../ui/button';\nimport { cn } from '../core/utils';\n\nexport interface FullBleedSurfaceProps {\n /** The artifact (chart, gallery, editor, generator, etc.) rendered edge-to-edge. */\n children: ReactNode;\n /** Surface title shown in the header. */\n title?: string;\n /** Optional icon shown before the title. */\n icon?: ReactNode;\n /** Optional header actions (right side, before the exit control). */\n headerActions?: ReactNode;\n /**\n * Exit handler. When provided, an X control is shown and Esc returns to the\n * previous surface. The host decides where \"exit\" goes (typically panel).\n */\n onExit?: () => void;\n /** Accessible label / tooltip for the exit control. */\n exitLabel?: string;\n /** Treat as an overlay (fixed inset). When false, fills its parent (h-full). */\n overlay?: boolean;\n className?: string;\n}\n\n/**\n * FullBleedSurface presents a single large artifact using the entire available\n * surface — no conversation column, no composer, no max-width cap. It exists so\n * an orchestrator can promote a big visualization (analytics dashboard, media\n * gallery, generator, editor, …) to a maximum-real-estate layout for the\n * fullscreen and split surfaces, where the goal is visibility rather than chat.\n *\n * Purely presentational and industry-agnostic — the artifact is supplied via\n * `children` and is responsible for its own internal scrolling/layout.\n */\nexport function FullBleedSurface({\n children,\n title,\n icon,\n headerActions,\n onExit,\n exitLabel = 'Exit',\n overlay = false,\n className,\n}: FullBleedSurfaceProps) {\n // Esc exits. Guarded for SSR (no document on the server) and only bound when\n // an exit handler is supplied.\n useEffect(() => {\n if (!onExit) return;\n if (typeof document === 'undefined') return;\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onExit();\n };\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [onExit]);\n\n return (\n <div\n className={cn(\n 'flex flex-col bg-background',\n overlay ? 'fixed inset-0 z-50' : 'h-full',\n className\n )}\n >\n <header className=\"flex h-14 shrink-0 items-center justify-between border-b px-4\">\n <div className=\"flex items-center gap-2 min-w-0\">\n {icon}\n {title && (\n <h1 className=\"truncate font-semibold text-lg\">{title}</h1>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n {headerActions}\n {onExit && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n aria-label={exitLabel}\n title={`${exitLabel} (Esc)`}\n className=\"size-8 shrink-0 p-0\"\n onClick={onExit}\n >\n <XIcon className=\"size-4\" />\n </Button>\n )}\n </div>\n </header>\n\n {/* Artifact region: full width/height, the artifact controls its own\n internal scroll and padding. */}\n <div className=\"min-h-0 flex-1 overflow-auto\">{children}</div>\n </div>\n );\n}\n\nexport default FullBleedSurface;\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { ChatPanel } from './chat-panel';\nimport { FloatingWidget } from './floating-widget';\nimport { FullscreenDashboard } from './fullscreen-dashboard';\nimport { SplitView } from './split-view';\nimport { OverlayModal } from './overlay-modal';\nimport { MobileShell } from './mobile-shell';\nimport { MessageList } from '../components/messages/message-list';\nimport { PromptInput } from '../components/input/prompt-input';\nimport { ReportView } from '../components/data-display/report-view';\nimport type { AgentMessage, LayoutMode, WidgetPosition } from '../core/types';\nimport type { AgentReport } from '../core/backend';\n\nexport interface AgentSurfaceProps {\n /** Which rendering surface to present. */\n mode: LayoutMode;\n /** Conversation messages rendered by the shared MessageList. */\n messages: AgentMessage[];\n /** Loading/typing indicator state. */\n isLoading?: boolean;\n\n // --- Controlled input (optional convenience) ---\n /** Current draft value. If provided, a default PromptInput is rendered. */\n inputValue?: string;\n /** Draft change handler. */\n onInputChange?: (value: string) => void;\n /** Submit handler. */\n onSubmit?: () => void;\n /** Placeholder for the default input. */\n inputPlaceholder?: string;\n /** Fully custom input node; overrides the default PromptInput. */\n input?: ReactNode;\n\n // --- Presentation ---\n /** Surface title (header). */\n title?: string;\n /** Surface subtitle/status text. */\n subtitle?: string;\n /** Header icon. */\n icon?: ReactNode;\n /** Header actions (right side). */\n headerActions?: ReactNode;\n /** Suggestions/quick-replies node shown above the input. */\n suggestions?: ReactNode;\n /** Show avatars in the conversation. */\n showAvatars?: boolean;\n /** Custom message renderer passed through to MessageList. */\n renderMessage?: (message: AgentMessage) => ReactNode;\n /** Feedback handler passed to MessageList. */\n onFeedback?: (messageId: string, vote: 'up' | 'down') => void;\n /**\n * Handler for inline confirmation-panel actions. Receives the owning message\n * id and the activated action id. Confirmation panels render inline in the\n * transcript (via `message.confirmation`), never pinned over the response.\n */\n onConfirmAction?: (messageId: string, actionId: string) => void;\n\n // --- Data / report side ---\n /**\n * Structured report rendered in the data region. Used by the\n * dashboard/split surfaces (sidebar or data panel). If omitted, a custom\n * `dataPanel` node may be supplied instead.\n */\n report?: AgentReport;\n /** Custom data-region node; overrides `report`. */\n dataPanel?: ReactNode;\n\n // --- Widget / overlay state ---\n /** Open state for widget/overlay surfaces. */\n isOpen?: boolean;\n /** Toggle handler for the widget launcher. */\n onToggle?: () => void;\n /** Close handler for widget/overlay surfaces. */\n onClose?: () => void;\n /**\n * Exit handler for the fullscreen surface. When provided, the fullscreen\n * container shows a close (X) control and binds Esc to return to the\n * previous surface. The host decides where \"exit\" goes (typically panel).\n */\n onExitFullscreen?: () => void;\n /** Widget anchor position. */\n position?: WidgetPosition;\n /** Online status for widget/mobile headers. */\n status?: 'online' | 'offline' | 'busy' | 'away';\n\n className?: string;\n}\n\n/**\n * AgentSurface is the single entry point that renders the agent UI into any\n * supported layout from one set of primitives. The orchestrator selects a\n * `mode` and the same messages, input, and report flow into the matching\n * container — there are no per-surface forks of the conversation logic.\n *\n * - 'panel' → inline ChatPanel (standard conversation)\n * - 'fullscreen' → FullscreenDashboard (chat + report sidebar)\n * - 'split' → SplitView (chat beside a live data panel)\n * - 'widget' → FloatingWidget (embeddable launcher + conversation)\n * - 'overlay' → OverlayModal (centered modal conversation)\n * - 'mobile' → MobileShell (full-height mobile layout)\n */\nexport function AgentSurface({\n mode,\n messages,\n isLoading = false,\n inputValue,\n onInputChange,\n onSubmit,\n inputPlaceholder,\n input,\n title,\n subtitle,\n icon,\n headerActions,\n suggestions,\n showAvatars = true,\n renderMessage,\n onFeedback,\n onConfirmAction,\n report,\n dataPanel,\n isOpen = true,\n onToggle,\n onClose,\n onExitFullscreen,\n position,\n status,\n className,\n}: AgentSurfaceProps) {\n const conversation = (\n <MessageList\n messages={messages}\n showAvatars={showAvatars}\n renderMessage={renderMessage}\n onFeedback={onFeedback}\n onConfirmAction={onConfirmAction}\n />\n );\n\n // Build a default input only when controlled props are provided and no\n // custom input node was passed.\n const resolvedInput =\n input ??\n (onInputChange && onSubmit !== undefined ? (\n <div className=\"border-t p-2\">\n <PromptInput\n value={inputValue ?? ''}\n onChange={onInputChange}\n onSubmit={onSubmit}\n placeholder={inputPlaceholder}\n loading={isLoading}\n />\n </div>\n ) : undefined);\n\n const dataRegion = dataPanel ?? (report ? <ReportView report={report} /> : null);\n\n switch (mode) {\n case 'fullscreen':\n return (\n <FullscreenDashboard\n title={title}\n headerActions={headerActions}\n onExitFullscreen={onExitFullscreen}\n input={resolvedInput}\n isLoading={isLoading}\n sidebar={dataRegion ?? undefined}\n className={className}\n >\n {conversation}\n </FullscreenDashboard>\n );\n\n case 'split':\n return (\n <SplitView\n input={resolvedInput}\n isLoading={isLoading}\n dataPanel={dataRegion}\n chatTitle={title}\n className={className}\n >\n {conversation}\n </SplitView>\n );\n\n case 'widget':\n return (\n <FloatingWidget\n isOpen={isOpen}\n onToggle={onToggle ?? (() => {})}\n onClose={onClose}\n title={title}\n icon={icon}\n status={status}\n input={resolvedInput}\n quickReplies={suggestions}\n isLoading={isLoading}\n position={position}\n className={className}\n >\n {conversation}\n </FloatingWidget>\n );\n\n case 'overlay':\n return (\n <OverlayModal\n isOpen={isOpen}\n onClose={onClose ?? (() => {})}\n title={title}\n input={resolvedInput}\n isLoading={isLoading}\n className={className}\n >\n {conversation}\n </OverlayModal>\n );\n\n case 'mobile':\n return (\n <MobileShell\n title={title}\n subtitle={subtitle}\n status={status}\n input={resolvedInput}\n quickReplies={suggestions}\n isLoading={isLoading}\n className={className}\n >\n {conversation}\n </MobileShell>\n );\n\n case 'panel':\n default:\n return (\n <ChatPanel\n title={title}\n subtitle={subtitle}\n icon={icon}\n headerActions={headerActions}\n input={resolvedInput}\n suggestions={suggestions}\n isLoading={isLoading}\n className={className}\n >\n {conversation}\n </ChatPanel>\n );\n }\n}\n\nexport default AgentSurface;\n"]}