@miiflow/assistant-ui 0.2.3 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{WelcomeScreen-YsXZsAwZ.d.ts → WelcomeScreen-DAa22X9b.d.ts} +1 -1
- package/dist/{chunk-POKFMILU.js → chunk-QFKEGVG6.js} +9 -11
- package/dist/chunk-QFKEGVG6.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/styled/index.d.ts +1 -1
- package/dist/styled/index.js +1 -1
- package/dist/styles-no-preflight.css +1 -1
- package/dist/styles.css +1 -1
- package/package.json +9 -18
- package/dist/WelcomeScreen-BiY3uGhp.d.cts +0 -301
- package/dist/avatar-CL1hlGO5.d.cts +0 -109
- package/dist/branding-SzYU4ncD.d.cts +0 -18
- package/dist/chunk-3SEVU272.cjs +0 -2
- package/dist/chunk-3SEVU272.cjs.map +0 -1
- package/dist/chunk-HVCCZKEO.cjs +0 -2
- package/dist/chunk-HVCCZKEO.cjs.map +0 -1
- package/dist/chunk-KSMAVBLY.cjs +0 -2
- package/dist/chunk-KSMAVBLY.cjs.map +0 -1
- package/dist/chunk-POKFMILU.js.map +0 -1
- package/dist/chunk-QGRXQAWZ.cjs +0 -22
- package/dist/chunk-QGRXQAWZ.cjs.map +0 -1
- package/dist/chunk-SFEPMZCU.cjs +0 -2
- package/dist/chunk-SFEPMZCU.cjs.map +0 -1
- package/dist/chunk-TOYU46SZ.cjs +0 -2
- package/dist/chunk-TOYU46SZ.cjs.map +0 -1
- package/dist/chunk-ZKMXEECD.cjs +0 -2
- package/dist/chunk-ZKMXEECD.cjs.map +0 -1
- package/dist/client/index.cjs +0 -9
- package/dist/client/index.cjs.map +0 -1
- package/dist/client/index.d.cts +0 -249
- package/dist/context/index.cjs +0 -2
- package/dist/context/index.cjs.map +0 -1
- package/dist/context/index.d.cts +0 -43
- package/dist/hooks/index.cjs +0 -2
- package/dist/hooks/index.cjs.map +0 -1
- package/dist/hooks/index.d.cts +0 -146
- package/dist/index.cjs +0 -2
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -157
- package/dist/message-9z0crkf9.d.cts +0 -88
- package/dist/primitives/index.cjs +0 -2
- package/dist/primitives/index.cjs.map +0 -1
- package/dist/primitives/index.d.cts +0 -91
- package/dist/streaming-CF63E6iS.d.cts +0 -426
- package/dist/styled/index.cjs +0 -2
- package/dist/styled/index.cjs.map +0 -1
- package/dist/styled/index.d.cts +0 -477
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/cn.ts","../src/styled/AttachmentPreview.tsx","../src/styled/Avatar.tsx","../src/styled/ChatContainer.tsx","../src/styled/LoadingDots.tsx","../src/styled/MarkdownContent.tsx","../src/styled/CitationSources.tsx","../src/styled/ClarificationPanel.tsx","../src/styled/MessageActionBar.tsx","../src/styled/MessageAttachments.tsx","../src/utils/beamer.ts","../src/styled/StatusBadge.tsx","../src/styled/Timeline.tsx","../src/styled/EventContent.tsx","../src/styled/EventTimeline.tsx","../src/styled/PlanTimeline.tsx","../src/styled/claude-sdk/ClaudeToolPreview.tsx","../src/styled/claude-sdk/TerminalOutput.tsx","../src/styled/claude-sdk/FileOperationPreview.tsx","../src/styled/claude-sdk/SearchResultsView.tsx","../src/styled/claude-sdk/WebOperationPreview.tsx","../src/styled/claude-sdk/SubagentPanel.tsx","../src/styled/ReasoningPanel.tsx","../src/styled/StreamingText.tsx","../src/styled/SuggestedActions.tsx","../src/styled/visualizations/ChartVisualization.tsx","../src/styled/visualizations/TableVisualization.tsx","../src/styled/visualizations/CardVisualization.tsx","../src/styled/visualizations/KpiVisualization.tsx","../src/styled/visualizations/CodePreviewVisualization.tsx","../src/styled/visualizations/FormVisualization.tsx","../src/styled/visualizations/registry.ts","../src/styled/visualizations/schemas.ts","../src/styled/visualizations/VisualizationRenderer.tsx","../src/styled/Message.tsx","../src/styled/MessageComposer.tsx","../src/styled/ScrollToBottomButton.tsx","../src/styled/MessageList.tsx","../src/styled/TimeMarker.tsx","../src/styled/TypingIndicator.tsx","../src/styled/ChatHeader.tsx","../src/styled/ToolStatusIndicator.tsx","../src/styled/ChatLayout.tsx","../src/styled/WelcomeScreen.tsx"],"names":["cn","inputs","twMerge","clsx","getFileIcon","mimeType","ImageIcon","FileText","FileIcon","formatFileSize","bytes","AttachmentPreview","forwardRef","attachment","onRemove","removable","className","ref","Icon","isImage","jsxs","jsx","X","sizeClasses","iconSizes","getRoleIcon","role","size","iconSize","Bot","User","Avatar","name","src","alt","props","ChatContainer","children","gapClasses","LoadingDots","dotClass","LANGUAGE_MAP","normalizeLanguage","lang","slugify","text","CopyButton","copied","setCopied","useState","handleCopy","useCallback","Check","Copy","MarkdownContent","baselineFontSize","darkCodeTheme","useDarkCode","fontStyle","ReactMarkdown","remarkGfm","id","LinkIcon","href","codeClassName","match","codeText","language","SyntaxHighlighter","oneLight","oneDark","Fragment","getSourceTypeDisplay","sourceType","CitationSources","sources","selectedSource","setSelectedSource","source","typeDisplay","SourceDetailModal","onClose","useEffect","handleKey","e","AnimatePresence","motion","ExternalLink","InlineCitation","index","ClarificationPanel","clarification","onSubmit","onOptionSelect","disabled","loading","freeTextInput","setFreeTextInput","handleSubmit","responseText","handleOptionChange","event","selectedOption","handleKeyDown","hasOptions","showFreeText","MessageCircle","option","Send","MessageActionBar","textContent","onRegenerate","onEdit","textarea","MessageAttachments","attachments","onDownload","onPreview","lightboxUrl","setLightboxUrl","handleDownload","link","handlePreview","AttachmentCard","sizeLabel","FileTypeIcon","Download","Video","k","sizes","i","BEAMER_STYLE_ID","injectBeamerKeyframes","el","root","container","style","beamerBarStyle","StatusBadge","status","CircleDashed","Loader2","CircleCheck","CircleX","Timeline","items","badgeSize","containerRef","useRef","item","isLast","nextItemPending","showAnimatedLine","TimelineItem","itemRef","EventContent","isRunning","Wrench","success","INTERNAL_TOOLS","isInternalTool","toolName","convertChunkToEvent","chunk","isComplete","convertTimelineToEvents","timeline","events","thought","tool","EventTimeline","timelineItems","convertChunksToEvents","chunks","SubtaskContent","subtask","executionChunks","isExpanded","setIsExpanded","isFailed","isCompleted","hasExecutionDetails","ChevronUp","ChevronDown","PlanTimeline","plan","streamingChunks","subtaskChunks","ClaudeToolPreview","data","isPending","isError","getStatusIcon","XCircle","CheckCircle2","parts","ChevronRight","TerminalOutput","expanded","setExpanded","statusBorderColor","statusBgColor","statusColor","formatDuration","ms","Terminal","FileOperationPreview","opIcon","Eye","Save","Pencil","opColor","opBg","statusIcon","Clock","opLabel","formatPath","path","FileContent","DiffView","content","lines","useMemo","totalLines","truncated","line","idx","oldString","newString","SearchResultsView","isGrep","toolColor","toolBorderColor","toolBg","toolChipBg","FileSearch","FolderSearch","result","SearchResultRow","File","WebOperationPreview","isSearch","searchResults","urlPattern","matches","Search","Globe","TYPE_LABELS","SubagentPanel","statusBg","chipColor","label","GitBranch","nestedChunk","NestedChunkRenderer","useLiveStreamDuration","isStreaming","startTimeRef","elapsed","setElapsed","finalSecondsRef","interval","secs","hasClaudeSdkChunks","c","hasParallelExecutionChunks","getWaveExecutionStatus","waveStartChunks","lastWaveStart","currentWave","totalWaves","parallelCount","activeSubtasks","completedSubtasks","hasMultiAgentChunks","getSubagentAllocations","getMultiAgentStatus","subagents","isSynthesizing","alloc","statusOrder","key","existing","list","s","convertTimelineToChunks","MultiAgentStatusPanel","subagentList","isPlanning","allocations","a","agent","Sparkle","ClaudeSdkChunksRenderer","seconds","ReasoningPanel","executionTimeline","userMessageTimestamp","executionTime","defaultExpanded","controlledExpanded","onExpandedChange","localExpanded","setLocalExpanded","liveElapsed","wallClockSeconds","lockScroll","useScrollLock","value","streamingEvents","completedEvents","completedChunks","aggregatedPlanData","planningChunk","planClone","subtasks","completedCount","failedCount","st","m","totalExecutionTime","sum","lastEvent","diff","firstEvent","hasContent","lastChunk","isToolAction","isPlanningAction","isParallelMode","waveStatus","isClaudeSdkMode","isMultiAgentMode","multiAgentStatus","getLabel","running","completed","failed","total","op","file","cmd","desc","getIcon","Users","Zap","ListTodo","shouldShowPlanTimeline","planData","activePlan","showPlanTimeline","StreamingText","renderMarkdown","markdownProps","ACTION_ICONS","Navigation","Mail","getActionIcon","type","ArrowRight","SuggestedActions","actions","onSelect","showIcons","loadingIndex","setLoadingIndex","handleAction","action","isLoading","isDisabled","DEFAULT_COLORS","ChartVisualization","config","chartType","series","xAxis","yAxis","colors","height","showLegend","showGrid","showTooltip","animate","stacked","chartData","dataMap","point","xVal","commonProps","axisStyle","tooltipStyle","ResponsiveContainer","LineChart","CartesianGrid","XAxis","YAxis","Tooltip","Legend","Line","BarChart","Bar","AreaChart","Area","PieChart","Pie","percent","_","Cell","ScatterChart","Scatter","p","badgeColors","formatCellValue","column","strValue","colorClass","numValue","descendingComparator","b","orderBy","aValue","bValue","TableVisualization","columns","rows","sortable","paginated","pageSize","order","setOrder","setOrderBy","page","setPage","handleRequestSort","processedRows","sorted","totalPages","col","row","rowIdx","CardVisualization","onAction","subtitle","imageUrl","sections","collapsible","initiallyCollapsed","handleActionClick","renderSection","section","itemIdx","mainContent","KpiMetricCard","metric","color","trendIcon","ArrowUp","Circle","trendColor","sparklineData","KpiVisualization","metrics","layout","isGrid","CodePreviewVisualization","code","lineNumbers","highlightLines","startLine","normalizedLanguage","timer","lineNumber","FormVisualization","fields","submitAction","submitButtonText","cancelButtonText","formData","setFormData","initial","field","errors","setErrors","submitted","setSubmitted","handleChange","prev","next","validate","newErrors","min","max","pattern","message","handleCancel","inputClass","errorClass","renderField","hasError","opt","o","registry","registerVisualization","entry","getVisualization","getRegisteredTypes","registerBuiltinSchemas","schemas","schema","chartSeriesSchema","z","chartAxisSchema","chartVisualizationSchema","tableColumnSchema","tableVisualizationSchema","cardSectionSchema","cardActionSchema","cardVisualizationSchema","kpiMetricSchema","kpiVisualizationSchema","codePreviewVisualizationSchema","formFieldSchema","formVisualizationSchema","VisualizationRenderer","title","description","vizData","AlertCircle","issues","issue","Component","VIZ_MARKER_REGEX","parseContentWithVisualizations","lastIndex","Message","viewerRole","showAvatar","showTimestamp","reasoning","executionPlan","suggestedActions","onSuggestedAction","reasoningExpanded","onReasoningExpandedChange","citations","visualizations","pendingClarification","onClarificationSubmit","onVisualizationAction","useContext","ChatContext","participantRole","viewerRoleLower","isViewer","isAssistant","reasoningChunks","hasReasoningChunks","hasCompletedReasoning","hasReasoning","isWaitingForContent","hasAttachments","vizMap","map","viz","hasViz","contentParts","renderContent","part","wasStreamingRef","showFadeIn","MessageContent","MessageTimestamp","createdAt","dateString","TRANSFORMERS","BOLD_STAR","ITALIC_UNDERSCORE","QUOTE","ORDERED_LIST","UNORDERED_LIST","EDITOR_THEME","MAX_FILE_SIZE","ALLOWED_IMAGE_TYPES","ALLOWED_DOCUMENT_TYPES","ALLOWED_VIDEO_TYPES","DEFAULT_ALLOWED_TYPES","validateFile","allowedTypes","maxSize","AttachmentBar","att","isUploading","Image","EnterKeyPlugin","editor","useLexicalComposerContext","KEY_ENTER_COMMAND","COMMAND_PRIORITY_HIGH","ClearEditorPlugin","clearRef","$getRoot","$createParagraphNode","MessageComposer","onAttach","onUploadFile","onRemoveUploadedAttachment","supportsAttachments","allowedFileTypes","maxFileSize","placeholder","isSubmitting","inputText","setInputText","setAttachments","isDragOver","setIsDragOver","fileInputRef","clearEditorRef","dragCounterRef","isSubmitDisabled","isAnyUploading","uploadedIds","editorState","processedValue","$convertToMarkdownString","processFiles","files","newAttachments","error","attachmentId","err","rawFiles","savedAttachments","handleFileSelect","handleRemoveAttachment","removed","handleDragEnter","handleDragLeave","handleDragOver","handleDrop","initialConfig","$convertFromMarkdownString","ListItemNode","ListNode","AutoLinkNode","QuoteNode","Paperclip","LexicalComposer","RichTextPlugin","ContentEditable","LexicalErrorBoundary","OnChangePlugin","ListPlugin","HistoryPlugin","AutoFocusPlugin","ScrollToBottomButton","isAtBottom","onScrollToBottom","MessageList","autoScroll","showScrollToBottom","scrollToBottom","useAutoScroll","node","TimeMarker","TypingIndicator","ChatHeader","logo","showClose","menuOpen","setMenuOpen","menuRef","buttonRef","handleClickOutside","MoreVertical","ToolStatusIndicator","StatusIcon","ChatLayout","isEmpty","header","welcomeScreen","messageList","composer","footer","useRotatingPlaceholder","placeholders","intervalMs","setIndex","intervalRef","start","handleVisibility","DefaultInput","setValue","setFiles","textareaRef","removeFile","SuggestionCard","onClick","prefersReducedMotion","mousePos","setMousePos","handleMouseMove","rect","handleMouseLeave","MessageCircleQuestion","WelcomeScreen","suggestions","onSuggestionClick","welcomeText","composerSlot","handleSuggestionClick","msg"],"mappings":"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","file":"chunk-QGRXQAWZ.cjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Utility function to merge Tailwind CSS classes with proper precedence.\n * Combines clsx for conditional classes with tailwind-merge for conflict resolution.\n *\n * @example\n * cn(\"px-4 py-2\", \"px-6\") // => \"py-2 px-6\"\n * cn(\"text-red-500\", isActive && \"text-blue-500\") // => \"text-blue-500\" when isActive\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { forwardRef } from \"react\";\nimport { X, FileText, Image as ImageIcon, File as FileIcon } from \"lucide-react\";\nimport { cn } from \"../utils/cn\";\nimport type { Attachment } from \"../types\";\n\nexport interface AttachmentPreviewProps {\n /** The attachment to preview */\n attachment: Attachment;\n /** Callback when remove button is clicked */\n onRemove?: () => void;\n /** Whether removal is allowed */\n removable?: boolean;\n /** Additional CSS classes */\n className?: string;\n}\n\nfunction getFileIcon(mimeType: string) {\n if (mimeType.startsWith(\"image/\")) {\n return ImageIcon;\n }\n if (\n mimeType === \"application/pdf\" ||\n mimeType.startsWith(\"text/\")\n ) {\n return FileText;\n }\n return FileIcon;\n}\n\nfunction formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / 1024 / 1024).toFixed(1)} MB`;\n}\n\n/**\n * Styled attachment preview card.\n */\nexport const AttachmentPreview = forwardRef<HTMLDivElement, AttachmentPreviewProps>(\n ({ attachment, onRemove, removable = true, className }, ref) => {\n const Icon = getFileIcon(attachment.mimeType);\n const isImage = attachment.mimeType.startsWith(\"image/\");\n\n return (\n <div\n ref={ref}\n className={cn(\n \"relative group\",\n \"flex items-center gap-2\",\n \"p-2 rounded-lg\",\n \"border border-chat-border\",\n \"bg-chat-panel-bg\",\n className\n )}\n >\n {/* Preview or Icon */}\n <div\n className={cn(\n \"w-10 h-10 rounded\",\n \"flex items-center justify-center\",\n \"bg-gray-100 dark:bg-gray-800\",\n \"overflow-hidden flex-shrink-0\"\n )}\n >\n {isImage && attachment.previewUrl ? (\n <img\n src={attachment.previewUrl}\n alt={attachment.filename}\n className=\"w-full h-full object-cover\"\n />\n ) : (\n <Icon className=\"w-5 h-5 text-chat-subtle\" />\n )}\n </div>\n\n {/* File info */}\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium truncate text-chat-text\">\n {attachment.filename}\n </p>\n <p className=\"text-xs text-chat-subtle\">\n {formatFileSize(attachment.size)}\n </p>\n </div>\n\n {/* Remove button */}\n {removable && onRemove && (\n <button\n type=\"button\"\n onClick={onRemove}\n className={cn(\n \"absolute -top-1.5 -right-1.5\",\n \"w-5 h-5 rounded-full\",\n \"flex items-center justify-center\",\n \"bg-gray-500 text-white\",\n \"opacity-0 group-hover:opacity-100\",\n \"hover:bg-gray-600\",\n \"transition-opacity duration-200\"\n )}\n aria-label={`Remove ${attachment.filename}`}\n >\n <X className=\"w-3 h-3\" />\n </button>\n )}\n </div>\n );\n }\n);\n\nAttachmentPreview.displayName = \"AttachmentPreview\";\n","import { forwardRef } from \"react\";\nimport { Bot, User } from \"lucide-react\";\nimport { Avatar as AvatarPrimitive, type AvatarProps as AvatarPrimitiveProps } from \"../primitives\";\nimport { cn } from \"../utils/cn\";\nimport type { ParticipantRole } from \"../types\";\n\nexport interface AvatarProps extends Omit<AvatarPrimitiveProps, \"fallback\"> {\n /** Size variant */\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst sizeClasses = {\n sm: \"w-6 h-6 text-xs\",\n md: \"w-8 h-8 text-sm\",\n lg: \"w-10 h-10 text-base\",\n};\n\nconst iconSizes = {\n sm: 14,\n md: 16,\n lg: 20,\n};\n\nfunction getRoleIcon(role: ParticipantRole | undefined, size: \"sm\" | \"md\" | \"lg\") {\n const iconSize = iconSizes[size];\n\n switch (role) {\n case \"assistant\":\n return <Bot size={iconSize} />;\n case \"user\":\n return <User size={iconSize} />;\n default:\n return <User size={iconSize} />;\n }\n}\n\n/**\n * Styled Avatar component with role-based icons.\n */\nexport const Avatar = forwardRef<HTMLDivElement, AvatarProps>(\n ({ name, src, alt, role, size = \"md\", className, ...props }, ref) => {\n return (\n <AvatarPrimitive\n ref={ref}\n name={name}\n src={src}\n alt={alt}\n role={role}\n className={cn(\n \"rounded-full overflow-hidden flex-shrink-0\",\n \"flex items-center justify-center\",\n \"font-medium\",\n role === \"assistant\"\n ? \"bg-primary/10 text-primary\"\n : \"bg-gray-200 dark:bg-gray-700 text-gray-600 dark:text-gray-300\",\n sizeClasses[size],\n className\n )}\n fallback={getRoleIcon(role, size)}\n {...props}\n />\n );\n }\n);\n\nAvatar.displayName = \"Avatar\";\n","import { forwardRef, type ReactNode, type HTMLAttributes } from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport interface ChatContainerProps extends HTMLAttributes<HTMLDivElement> {\n /** Children to render */\n children: ReactNode;\n}\n\n/**\n * Styled container for the chat interface.\n * Provides flex layout and base styling.\n */\nexport const ChatContainer = forwardRef<HTMLDivElement, ChatContainerProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col h-full\",\n \"bg-white dark:bg-gray-900\",\n \"font-sans text-chat-text\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nChatContainer.displayName = \"ChatContainer\";\n","import { cn } from \"../utils/cn\";\n\nexport interface LoadingDotsProps {\n\t/** Size variant */\n\tsize?: \"small\" | \"medium\" | \"large\";\n\t/** Additional CSS classes */\n\tclassName?: string;\n}\n\nconst sizeClasses = {\n\tsmall: \"w-1.5 h-1.5\",\n\tmedium: \"w-2 h-2\",\n\tlarge: \"w-2.5 h-2.5\",\n};\n\nconst gapClasses = {\n\tsmall: \"gap-1\",\n\tmedium: \"gap-1.5\",\n\tlarge: \"gap-2\",\n};\n\n/**\n * Animated loading dots indicator\n */\nexport function LoadingDots({ size = \"medium\", className }: LoadingDotsProps) {\n\tconst dotClass = sizeClasses[size];\n\n\treturn (\n\t\t<div className={cn(\"flex items-center\", gapClasses[size], className)}>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\tdotClass,\n\t\t\t\t\t\"rounded-full bg-[var(--chat-text-subtle)]\",\n\t\t\t\t\t\"animate-loading-dot animate-loading-dot-1\"\n\t\t\t\t)}\n\t\t\t/>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\tdotClass,\n\t\t\t\t\t\"rounded-full bg-[var(--chat-text-subtle)]\",\n\t\t\t\t\t\"animate-loading-dot animate-loading-dot-2\"\n\t\t\t\t)}\n\t\t\t/>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\tdotClass,\n\t\t\t\t\t\"rounded-full bg-[var(--chat-text-subtle)]\",\n\t\t\t\t\t\"animate-loading-dot animate-loading-dot-3\"\n\t\t\t\t)}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","import { useState, useCallback } from \"react\";\nimport ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport { Prism as SyntaxHighlighter } from \"react-syntax-highlighter\";\nimport { oneDark, oneLight } from \"react-syntax-highlighter/dist/esm/styles/prism\";\nimport { Check, Copy, Link as LinkIcon } from \"lucide-react\";\nimport { cn } from \"../utils/cn\";\n\n// Language alias mapping\nconst LANGUAGE_MAP: Record<string, string> = {\n js: \"javascript\",\n ts: \"typescript\",\n jsx: \"jsx\",\n tsx: \"tsx\",\n py: \"python\",\n rb: \"ruby\",\n rs: \"rust\",\n go: \"go\",\n java: \"java\",\n cpp: \"cpp\",\n c: \"c\",\n cs: \"csharp\",\n swift: \"swift\",\n kt: \"kotlin\",\n php: \"php\",\n sql: \"sql\",\n sh: \"bash\",\n bash: \"bash\",\n zsh: \"bash\",\n shell: \"bash\",\n html: \"html\",\n css: \"css\",\n scss: \"scss\",\n json: \"json\",\n yaml: \"yaml\",\n yml: \"yaml\",\n xml: \"xml\",\n md: \"markdown\",\n graphql: \"graphql\",\n dockerfile: \"docker\",\n toml: \"toml\",\n};\n\nfunction normalizeLanguage(lang: string): string {\n return LANGUAGE_MAP[lang.toLowerCase()] || lang.toLowerCase();\n}\n\nfunction slugify(text: string): string {\n return text\n .toLowerCase()\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/\\s+/g, \"-\")\n .replace(/-+/g, \"-\")\n .trim();\n}\n\nfunction CopyButton({ text }: { text: string }) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n // Fallback: noop\n }\n }, [text]);\n\n return (\n <button\n onClick={handleCopy}\n className=\"flex items-center gap-1 px-2 py-1 text-xs rounded hover:bg-white/10 transition-colors text-gray-400 hover:text-gray-200\"\n aria-label={copied ? \"Copied\" : \"Copy code\"}\n >\n {copied ? <Check size={14} /> : <Copy size={14} />}\n {copied ? \"Copied\" : \"Copy\"}\n </button>\n );\n}\n\nexport interface MarkdownContentProps {\n /** Markdown content to render */\n children: string;\n /** Additional CSS classes */\n className?: string;\n /** Base font size multiplier for responsive scaling */\n baselineFontSize?: number;\n /** Use dark theme for code blocks */\n darkCodeTheme?: boolean;\n}\n\n/**\n * Styled markdown renderer with syntax highlighting, copy-to-clipboard,\n * and heading anchor links.\n */\nexport function MarkdownContent({\n children,\n className,\n baselineFontSize = 1,\n darkCodeTheme,\n}: MarkdownContentProps) {\n // Detect dark mode from CSS if not explicitly set\n const useDarkCode = darkCodeTheme ??\n (typeof window !== \"undefined\" && window.matchMedia?.(\"(prefers-color-scheme: dark)\").matches);\n\n const fontStyle = baselineFontSize !== 1\n ? { fontSize: `${baselineFontSize}rem` }\n : undefined;\n\n return (\n <ReactMarkdown\n className={cn(\"chat-prose\", className)}\n remarkPlugins={[remarkGfm]}\n components={{\n h1: ({ children }) => {\n const text = String(children);\n const id = slugify(text);\n return (\n <h1 id={id} className=\"group text-xl font-semibold mt-4 mb-2 first:mt-0\" style={fontStyle}>\n {children}\n <a href={`#${id}`} className=\"ml-2 opacity-0 group-hover:opacity-50 transition-opacity\" aria-label=\"Link to heading\">\n <LinkIcon size={16} className=\"inline\" />\n </a>\n </h1>\n );\n },\n h2: ({ children }) => {\n const text = String(children);\n const id = slugify(text);\n return (\n <h2 id={id} className=\"group text-lg font-semibold mt-3 mb-2 first:mt-0\" style={fontStyle}>\n {children}\n <a href={`#${id}`} className=\"ml-2 opacity-0 group-hover:opacity-50 transition-opacity\" aria-label=\"Link to heading\">\n <LinkIcon size={14} className=\"inline\" />\n </a>\n </h2>\n );\n },\n h3: ({ children }) => {\n const text = String(children);\n const id = slugify(text);\n return (\n <h3 id={id} className=\"group text-base font-medium mt-2 mb-1 first:mt-0\" style={fontStyle}>\n {children}\n <a href={`#${id}`} className=\"ml-2 opacity-0 group-hover:opacity-50 transition-opacity\" aria-label=\"Link to heading\">\n <LinkIcon size={12} className=\"inline\" />\n </a>\n </h3>\n );\n },\n h4: ({ children }) => (\n <h4 className=\"text-base font-medium mt-2 mb-1 first:mt-0\" style={fontStyle}>{children}</h4>\n ),\n p: ({ children }) => (\n <p className=\"mb-2 last:mb-0 leading-relaxed\" style={fontStyle}>{children}</p>\n ),\n a: ({ href, children }) => (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-primary underline hover:opacity-80 transition-opacity\"\n style={fontStyle}\n >\n {children}\n </a>\n ),\n ul: ({ children }) => (\n <ul className=\"list-disc pl-4 mb-2 space-y-1\">{children}</ul>\n ),\n ol: ({ children }) => (\n <ol className=\"list-decimal pl-4 mb-2 space-y-1\">{children}</ol>\n ),\n li: ({ children }) => <li className=\"leading-relaxed\" style={fontStyle}>{children}</li>,\n blockquote: ({ children }) => (\n <blockquote className=\"border-l-2 border-gray-300 dark:border-gray-600 pl-3 my-2 italic text-chat-subtle\" style={fontStyle}>\n {children}\n </blockquote>\n ),\n code: ({ className: codeClassName, children }) => {\n const match = /language-(\\w+)/.exec(codeClassName || \"\");\n const codeText = String(children).replace(/\\n$/, \"\");\n const isInline = !match && !codeText.includes(\"\\n\");\n\n if (isInline) {\n return (\n <code className=\"bg-gray-100 dark:bg-gray-800 px-1.5 py-0.5 rounded text-sm font-mono\" style={fontStyle}>\n {children}\n </code>\n );\n }\n\n const language = match ? normalizeLanguage(match[1]) : \"text\";\n\n return (\n <div className=\"relative group my-2 rounded-lg overflow-hidden border border-gray-200 dark:border-gray-700\">\n {/* Header with language badge and copy button */}\n <div className=\"flex items-center justify-between px-3 py-1.5 bg-gray-800 dark:bg-gray-900 border-b border-gray-700\">\n <span className=\"text-xs font-mono text-gray-400\">{language}</span>\n <CopyButton text={codeText} />\n </div>\n <SyntaxHighlighter\n language={language}\n style={useDarkCode === false ? oneLight : oneDark}\n customStyle={{\n margin: 0,\n borderRadius: 0,\n fontSize: \"0.8125rem\",\n lineHeight: \"1.6\",\n }}\n codeTagProps={{\n style: { fontFamily: \"'Fira Code', 'JetBrains Mono', monospace\" },\n }}\n >\n {codeText}\n </SyntaxHighlighter>\n </div>\n );\n },\n pre: ({ children }) => <>{children}</>,\n table: ({ children }) => (\n <div className=\"overflow-x-auto my-2 rounded-lg border border-gray-200 dark:border-gray-700\">\n <table className=\"min-w-full divide-y divide-gray-200 dark:divide-gray-700\">\n {children}\n </table>\n </div>\n ),\n thead: ({ children }) => (\n <thead className=\"bg-gray-50 dark:bg-gray-800\">{children}</thead>\n ),\n th: ({ children }) => (\n <th className=\"px-3 py-2 text-left text-sm font-medium text-gray-700 dark:text-gray-300\" style={fontStyle}>\n {children}\n </th>\n ),\n td: ({ children }) => (\n <td className=\"px-3 py-2 text-sm text-gray-600 dark:text-gray-400 border-t border-gray-100 dark:border-gray-700\" style={fontStyle}>\n {children}\n </td>\n ),\n hr: () => <hr className=\"my-4 border-gray-200 dark:border-gray-700\" />,\n strong: ({ children }) => (\n <strong className=\"font-semibold\">{children}</strong>\n ),\n em: ({ children }) => <em className=\"italic\">{children}</em>,\n img: ({ src, alt }) => (\n <img\n src={src}\n alt={alt ?? \"\"}\n className=\"max-w-full h-auto rounded-lg my-2\"\n loading=\"lazy\"\n />\n ),\n }}\n >\n {children}\n </ReactMarkdown>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { ExternalLink, X } from \"lucide-react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { cn } from \"../utils/cn\";\nimport type { SourceReference, SourceTypeConfig } from \"../types\";\n\nfunction getSourceTypeDisplay(sourceType: string): SourceTypeConfig {\n switch (sourceType) {\n case \"knowledge_base\":\n return { label: \"Knowledge Base\", color: \"#4caf50\" };\n case \"api\":\n return { label: \"API\", color: \"#2196f3\" };\n case \"system_tool\":\n return { label: \"Tool\", color: \"#ff9800\" };\n case \"mcp_tool\":\n return { label: \"MCP\", color: \"#9c27b0\" };\n case \"workflow\":\n return { label: \"Workflow\", color: \"#00bcd4\" };\n default:\n return { label: \"Source\", color: \"#757575\" };\n }\n}\n\nexport interface CitationSourcesProps {\n sources: SourceReference[];\n className?: string;\n}\n\n/**\n * Renders citation sources as a horizontal row of clickable chips.\n * Clicking a chip opens a modal showing full source content.\n */\nexport function CitationSources({ sources, className }: CitationSourcesProps) {\n const [selectedSource, setSelectedSource] = useState<SourceReference | null>(null);\n\n if (!sources || sources.length === 0) return null;\n\n return (\n <>\n <div className={cn(\"flex flex-wrap gap-1.5 mt-2\", className)}>\n {sources.map((source) => {\n const typeDisplay = getSourceTypeDisplay(source.source_type);\n return (\n <button\n key={source.index}\n onClick={() => setSelectedSource(source)}\n className=\"inline-flex items-center h-6 px-2 text-[0.75rem] font-medium rounded-full border cursor-pointer transition-colors max-w-[280px] truncate\"\n style={{\n backgroundColor: typeDisplay.color + \"1a\",\n color: typeDisplay.color,\n borderColor: typeDisplay.color + \"40\",\n }}\n >\n [{source.index}] {source.title}\n </button>\n );\n })}\n </div>\n\n <SourceDetailModal\n source={selectedSource}\n onClose={() => setSelectedSource(null)}\n />\n </>\n );\n}\n\nexport interface SourceDetailModalProps {\n source: SourceReference | null;\n onClose: () => void;\n}\n\nexport function SourceDetailModal({\n source,\n onClose,\n}: SourceDetailModalProps) {\n // Close on Escape\n useEffect(() => {\n if (!source) return;\n const handleKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n };\n document.addEventListener(\"keydown\", handleKey);\n return () => document.removeEventListener(\"keydown\", handleKey);\n }, [source, onClose]);\n\n if (!source) return null;\n\n const typeDisplay = getSourceTypeDisplay(source.source_type);\n\n return (\n <AnimatePresence>\n {source && (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center p-4\">\n {/* Backdrop */}\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className=\"absolute inset-0 bg-black/50\"\n onClick={onClose}\n />\n {/* Panel */}\n <motion.div\n initial={{ opacity: 0, scale: 0.95, y: 10 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.95, y: 10 }}\n transition={{ duration: 0.15 }}\n className=\"relative bg-white dark:bg-gray-900 rounded-xl shadow-xl border border-gray-200 dark:border-gray-700 w-full max-w-2xl max-h-[80vh] flex flex-col overflow-hidden\"\n >\n {/* Header */}\n <div className=\"flex items-center justify-between p-4 border-b border-gray-200 dark:border-gray-700\">\n <div className=\"flex items-center gap-2 min-w-0 flex-1\">\n <h3 className=\"text-lg font-semibold truncate\">{source.title}</h3>\n <span\n className=\"text-[0.7rem] px-1.5 py-0.5 rounded font-medium shrink-0\"\n style={{\n backgroundColor: typeDisplay.color + \"1a\",\n color: typeDisplay.color,\n }}\n >\n {typeDisplay.label}\n </span>\n </div>\n <button onClick={onClose} className=\"p-1 rounded hover:bg-gray-100 dark:hover:bg-gray-800 ml-2\">\n <X size={16} />\n </button>\n </div>\n\n {/* Content */}\n <div className=\"flex-1 overflow-y-auto p-4\">\n {/* Metadata row */}\n <div className=\"flex flex-wrap gap-1.5 mb-4\">\n <span className=\"text-[0.7rem] px-1.5 py-0.5 rounded border border-gray-200 dark:border-gray-700\">\n {source.tool_name.replace(/_/g, \" \")}\n </span>\n {source.query && (\n <span\n className=\"text-[0.7rem] px-1.5 py-0.5 rounded border border-gray-200 dark:border-gray-700 max-w-[200px] truncate\"\n title={source.query}\n >\n Query: {source.query.slice(0, 40)}{source.query.length > 40 ? \"...\" : \"\"}\n </span>\n )}\n </div>\n\n {/* URL link */}\n {source.url && (\n <div className=\"mb-4\">\n <a\n href={source.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-sm text-blue-500 hover:underline inline-flex items-center gap-1\"\n >\n {source.url.length > 80 ? `${source.url.slice(0, 80)}...` : source.url}\n <ExternalLink size={12} />\n </a>\n </div>\n )}\n\n {/* Description */}\n {source.description && (\n <p className=\"text-sm text-gray-500 mb-4\">{source.description}</p>\n )}\n\n {/* Full content or snippet */}\n {source.full_content ? (\n <div className=\"whitespace-pre-wrap font-mono text-sm leading-relaxed p-4 rounded-lg bg-gray-50 dark:bg-gray-800/50 border border-gray-200 dark:border-gray-700 max-h-[400px] overflow-auto\">\n {source.full_content}\n </div>\n ) : source.snippet ? (\n <div className=\"whitespace-pre-wrap font-mono text-sm leading-relaxed p-4 rounded-lg bg-gray-50 dark:bg-gray-800/50 border border-gray-200 dark:border-gray-700\">\n {source.snippet}\n </div>\n ) : (\n <p className=\"text-sm text-gray-400 italic\">No content available for this source.</p>\n )}\n </div>\n\n {/* Footer */}\n <div className=\"flex justify-end p-3 border-t border-gray-200 dark:border-gray-700\">\n <button\n onClick={onClose}\n className=\"px-3 py-1.5 text-sm rounded-lg hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors\"\n >\n Close\n </button>\n </div>\n </motion.div>\n </div>\n )}\n </AnimatePresence>\n );\n}\n\n/**\n * Inline citation badge - renders a small numbered badge like [1]\n * with optional tooltip on hover and click-to-open URL.\n */\nexport interface InlineCitationProps {\n index: number;\n source?: SourceReference;\n}\n\nexport function InlineCitation({ index, source }: InlineCitationProps) {\n return (\n <span\n className={cn(\n \"inline-flex items-center justify-center min-w-[16px] h-4 rounded-full\",\n \"bg-blue-500 text-white text-[0.6rem] font-semibold\",\n \"px-0.5 mx-0.5 align-super\",\n source?.url ? \"cursor-pointer hover:opacity-85\" : \"cursor-default\"\n )}\n title={source ? `${source.title}${source.description ? \": \" + source.description : \"\"}` : undefined}\n onClick={(e) => {\n if (source?.url) {\n e.stopPropagation();\n window.open(source.url, \"_blank\", \"noopener,noreferrer\");\n }\n }}\n >\n {index}\n </span>\n );\n}\n","import { useState, useCallback } from \"react\";\nimport { MessageCircle, Send } from \"lucide-react\";\nimport { cn } from \"../utils/cn\";\nimport type { ClarificationData } from \"../types\";\n\nexport interface ClarificationPanelProps {\n clarification: ClarificationData;\n onSubmit: (response: string) => void;\n onOptionSelect?: (option: string) => void;\n disabled?: boolean;\n loading?: boolean;\n className?: string;\n}\n\n/**\n * Stateless clarification panel - displays when the AI agent needs user input.\n * Orange left-border panel with question, radio options, and free-text input.\n */\nexport function ClarificationPanel({\n clarification,\n onSubmit,\n onOptionSelect,\n disabled = false,\n loading = false,\n className,\n}: ClarificationPanelProps) {\n const [freeTextInput, setFreeTextInput] = useState(\"\");\n\n const handleSubmit = useCallback(\n (responseText: string) => {\n if (!responseText.trim()) return;\n setFreeTextInput(\"\");\n onSubmit(responseText.trim());\n },\n [onSubmit]\n );\n\n const handleOptionChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const selectedOption = event.target.value;\n onOptionSelect?.(selectedOption);\n handleSubmit(selectedOption);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" && !e.shiftKey && freeTextInput.trim()) {\n e.preventDefault();\n handleSubmit(freeTextInput);\n }\n };\n\n const hasOptions = clarification.options && clarification.options.length > 0;\n const showFreeText = clarification.allowFreeText !== false;\n\n return (\n <div\n className={cn(\n \"mx-4 mb-3 px-4 py-3\",\n \"bg-orange-50/60 dark:bg-orange-950/20\",\n \"border-l-[3px] border-orange-400\",\n \"rounded-r-lg\",\n className\n )}\n >\n {/* Question row */}\n <div className={cn(\"flex items-start gap-2\", (hasOptions || showFreeText) && \"mb-2\")}>\n <span className=\"text-orange-600 mt-0.5\">\n <MessageCircle size={14} />\n </span>\n <p className=\"text-sm font-medium\">{clarification.question}</p>\n </div>\n\n {/* Options as radio buttons */}\n {hasOptions && (\n <div className={cn(\"ml-5 space-y-1\", showFreeText && \"mb-2\")}>\n {clarification.options!.map((option, index) => (\n <label\n key={index}\n className=\"flex items-center gap-2 py-0.5 cursor-pointer text-sm hover:bg-orange-100/50 dark:hover:bg-orange-900/20 rounded px-1 -mx-1\"\n >\n <input\n type=\"radio\"\n name=\"clarification-option\"\n value={option}\n onChange={handleOptionChange}\n disabled={disabled || loading}\n className=\"accent-orange-500 w-3.5 h-3.5\"\n />\n {option}\n </label>\n ))}\n </div>\n )}\n\n {/* Free text input */}\n {showFreeText && (\n <div className=\"flex items-center ml-5 bg-white dark:bg-gray-900 rounded border border-orange-200 dark:border-orange-800 px-3 py-1\">\n <input\n type=\"text\"\n value={freeTextInput}\n onChange={(e) => setFreeTextInput(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={hasOptions ? \"Or type your response...\" : \"Type your response...\"}\n disabled={disabled || loading}\n className=\"flex-1 text-sm bg-transparent outline-none placeholder:text-gray-400 disabled:opacity-50\"\n />\n <button\n onClick={() => handleSubmit(freeTextInput)}\n disabled={!freeTextInput.trim() || disabled || loading}\n className={cn(\n \"p-1 rounded transition-colors\",\n freeTextInput.trim()\n ? \"text-orange-600 hover:text-orange-700\"\n : \"text-gray-300\"\n )}\n >\n <Send size={16} />\n </button>\n </div>\n )}\n </div>\n );\n}\n","import { useState, useCallback } from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport interface MessageActionBarProps {\n /** The text content to copy */\n textContent: string;\n /** Optional callback when regenerate is requested */\n onRegenerate?: () => void;\n /** Optional callback when edit is requested */\n onEdit?: () => void;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Action bar that appears on hover below assistant message bubbles.\n * Currently implements Copy; onRegenerate and onEdit are reserved for future use.\n */\nexport function MessageActionBar({\n textContent,\n onRegenerate,\n onEdit,\n className,\n}: MessageActionBarProps) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(textContent);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n // Fallback for older browsers / non-secure contexts\n const textarea = document.createElement(\"textarea\");\n textarea.value = textContent;\n textarea.style.position = \"fixed\";\n textarea.style.opacity = \"0\";\n document.body.appendChild(textarea);\n textarea.select();\n document.execCommand(\"copy\");\n document.body.removeChild(textarea);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }\n }, [textContent]);\n\n return (\n <div\n className={cn(\n \"flex items-center gap-1\",\n \"opacity-0 group-hover:opacity-100 transition-opacity duration-150\",\n className,\n )}\n >\n {/* Copy button */}\n <button\n type=\"button\"\n onClick={handleCopy}\n aria-label={copied ? \"Copied\" : \"Copy message\"}\n className={cn(\n \"flex items-center justify-center\",\n \"w-7 h-7 rounded-md\",\n \"text-[var(--chat-text-subtle)] hover:text-[var(--chat-text)]\",\n \"hover:bg-[var(--chat-panel-bg)]\",\n \"transition-colors duration-150\",\n )}\n >\n {copied ? (\n // Check icon\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n ) : (\n // Copy icon\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" />\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />\n </svg>\n )}\n </button>\n\n {/* Regenerate button — only shown if callback provided */}\n {onRegenerate && (\n <button\n type=\"button\"\n onClick={onRegenerate}\n aria-label=\"Regenerate response\"\n className={cn(\n \"flex items-center justify-center\",\n \"w-7 h-7 rounded-md\",\n \"text-[var(--chat-text-subtle)] hover:text-[var(--chat-text)]\",\n \"hover:bg-[var(--chat-panel-bg)]\",\n \"transition-colors duration-150\",\n )}\n >\n {/* RefreshCw icon */}\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" />\n <path d=\"M8 16H3v5\" />\n </svg>\n </button>\n )}\n\n {/* Edit button — only shown if callback provided */}\n {onEdit && (\n <button\n type=\"button\"\n onClick={onEdit}\n aria-label=\"Edit message\"\n className={cn(\n \"flex items-center justify-center\",\n \"w-7 h-7 rounded-md\",\n \"text-[var(--chat-text-subtle)] hover:text-[var(--chat-text)]\",\n \"hover:bg-[var(--chat-panel-bg)]\",\n \"transition-colors duration-150\",\n )}\n >\n {/* Pencil icon */}\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z\" />\n <path d=\"m15 5 4 4\" />\n </svg>\n </button>\n )}\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { Download, FileIcon, FileText, Image as ImageIcon, Video, X } from \"lucide-react\";\nimport { cn } from \"../utils/cn\";\nimport type { Attachment } from \"../types\";\n\nexport interface MessageAttachmentsProps {\n /** List of attachments to display */\n attachments: Attachment[];\n /** Custom download handler */\n onDownload?: (attachment: Attachment) => void;\n /** Custom preview handler */\n onPreview?: (attachment: Attachment) => void;\n /** Additional class names */\n className?: string;\n}\n\n/**\n * Display attachments (images, videos, documents) in messages\n */\nexport function MessageAttachments({\n attachments,\n onDownload,\n onPreview,\n className,\n}: MessageAttachmentsProps) {\n const [lightboxUrl, setLightboxUrl] = useState<string | null>(null);\n\n if (!attachments || attachments.length === 0) {\n return null;\n }\n\n const handleDownload = (attachment: Attachment) => {\n if (onDownload) {\n onDownload(attachment);\n return;\n }\n\n // Default download behavior\n if (attachment.url) {\n const link = document.createElement(\"a\");\n link.href = attachment.url;\n link.download = attachment.filename;\n link.target = \"_blank\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n };\n\n const handlePreview = (attachment: Attachment) => {\n if (onPreview) {\n onPreview(attachment);\n return;\n }\n\n // Default preview for images\n if (attachment.isImage && attachment.url) {\n setLightboxUrl(attachment.url);\n }\n };\n\n return (\n <div className={cn(\"flex flex-wrap gap-1.5\", className)}>\n {attachments.map((attachment) => (\n <AttachmentCard\n key={attachment.id}\n attachment={attachment}\n onDownload={() => handleDownload(attachment)}\n onPreview={() => handlePreview(attachment)}\n />\n ))}\n\n {/* Image lightbox */}\n {lightboxUrl && (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/80\"\n onClick={() => setLightboxUrl(null)}\n >\n <button\n className=\"absolute top-4 right-4 p-2 text-white hover:bg-white/20 rounded-full transition-colors\"\n onClick={() => setLightboxUrl(null)}\n aria-label=\"Close\"\n >\n <X size={24} />\n </button>\n <img\n src={lightboxUrl}\n alt=\"Preview\"\n className=\"max-w-[90vw] max-h-[90vh] object-contain\"\n onClick={(e) => e.stopPropagation()}\n />\n </div>\n )}\n </div>\n );\n}\n\nfunction AttachmentCard({\n attachment,\n onDownload,\n onPreview,\n}: {\n attachment: Attachment;\n onDownload: () => void;\n onPreview: () => void;\n}) {\n // Compact inline card for all attachment types\n const sizeLabel = attachment.humanReadableSize || formatFileSize(attachment.size);\n\n return (\n <div\n className={cn(\n \"inline-flex items-center gap-2 px-2.5 py-1.5 rounded-lg max-w-full\",\n \"border border-[var(--chat-border)] bg-[var(--chat-panel-bg)]\",\n attachment.isImage && attachment.url && \"cursor-pointer hover:bg-[var(--chat-border)]/30\",\n )}\n onClick={attachment.isImage && attachment.url ? onPreview : undefined}\n >\n <FileTypeIcon mimeType={attachment.mimeType} size={14} />\n <span className=\"text-xs text-[var(--chat-text)] truncate min-w-0\">\n {attachment.filename}\n </span>\n {sizeLabel && sizeLabel !== \"0 Bytes\" && (\n <span className=\"text-[10px] text-[var(--chat-text-subtle)] flex-shrink-0\">\n {sizeLabel}\n </span>\n )}\n {attachment.url && (\n <button\n onClick={(e) => { e.stopPropagation(); onDownload(); }}\n className=\"p-0.5 hover:bg-[var(--chat-border)] rounded transition-colors flex-shrink-0\"\n aria-label=\"Download\"\n >\n <Download size={12} className=\"text-[var(--chat-text-subtle)]\" />\n </button>\n )}\n </div>\n );\n}\n\nfunction FileTypeIcon({ mimeType, size = 14 }: { mimeType: string; size?: number }) {\n if (mimeType.startsWith(\"image/\")) {\n return <ImageIcon size={size} className=\"text-[var(--chat-primary)] flex-shrink-0\" />;\n }\n if (mimeType.startsWith(\"video/\")) {\n return <Video size={size} className=\"text-[var(--chat-primary)] flex-shrink-0\" />;\n }\n if (mimeType === \"application/pdf\") {\n return <FileText size={size} className=\"text-red-500 flex-shrink-0\" />;\n }\n return <FileIcon size={size} className=\"text-gray-500 flex-shrink-0\" />;\n}\n\nfunction formatFileSize(bytes: number): string {\n if (bytes === 0) return \"0 Bytes\";\n const k = 1024;\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + \" \" + sizes[i];\n}\n","import type { CSSProperties } from \"react\";\n\nconst BEAMER_STYLE_ID = \"miiflow-beamer-keyframes\";\n\n/**\n * Injects @keyframes beamer into the appropriate root.\n * When an element inside a Shadow DOM is provided, injects into the shadow root\n * so the animation works in Shadow DOM contexts (e.g. embedded widget).\n * Otherwise falls back to document.head.\n */\nexport function injectBeamerKeyframes(el?: HTMLElement | null): void {\n if (typeof document === \"undefined\") return;\n\n const root = el?.getRootNode?.();\n const container = root instanceof ShadowRoot ? root : document.head;\n\n if (container.querySelector(`#${BEAMER_STYLE_ID}`)) return;\n\n const style = document.createElement(\"style\");\n style.id = BEAMER_STYLE_ID;\n style.textContent = `@keyframes beamer{0%{left:-30%}100%{left:100%}}`;\n container.appendChild(style);\n}\n\n/**\n * Inline style for the beamer bar overlay element.\n * Matches the on-platform MUI sx approach exactly.\n */\nexport const beamerBarStyle: CSSProperties = {\n position: \"absolute\",\n top: 0,\n left: \"-30%\",\n width: \"30%\",\n height: \"100%\",\n background:\n \"linear-gradient(90deg, transparent 0%, rgba(255, 255, 255, 0.7) 50%, transparent 100%)\",\n animation: \"beamer 2s linear infinite\",\n zIndex: 1,\n pointerEvents: \"none\",\n};\n","import { CircleCheck, CircleDashed, CircleX, Loader2 } from \"lucide-react\";\nimport { cn } from \"../utils/cn\";\nimport type { EventStatus } from \"../types\";\n\ninterface StatusBadgeProps {\n status: EventStatus;\n size?: number;\n className?: string;\n}\n\n/**\n * Circular status badge with magical animations\n * - Pending: Dashed circle (muted)\n * - Running: Glowing orb with pulse effect\n * - Completed: Green check with pop + flash animation\n * - Failed: Red X\n */\nexport function StatusBadge({ status, size = 16, className }: StatusBadgeProps) {\n const iconSize = Math.max(size - 4, 10);\n\n return (\n <div\n className={cn(\"relative flex-shrink-0 flex items-center justify-center\", className)}\n style={{ width: size, height: size }}\n >\n {status === \"pending\" && (\n <CircleDashed\n size={size}\n strokeWidth={2}\n className=\"text-[var(--chat-text-subtle)] opacity-40\"\n />\n )}\n {status === \"running\" && (\n <div className=\"relative flex items-center justify-center\" style={{ width: size, height: size }}>\n {/* Outer ping ring */}\n <div\n className=\"absolute inset-0 rounded-full bg-indigo-500/20 animate-ping\"\n style={{ animationDuration: '1.5s' }}\n />\n {/* Glowing orb container */}\n <div className=\"relative rounded-full bg-gradient-to-br from-indigo-500 to-purple-500 p-[2px] animate-pulse-glow\">\n <div className=\"rounded-full bg-white dark:bg-gray-900 flex items-center justify-center\" style={{ width: iconSize, height: iconSize }}>\n <Loader2\n size={iconSize - 2}\n strokeWidth={2.5}\n className=\"text-indigo-500 animate-spin\"\n />\n </div>\n </div>\n </div>\n )}\n {status === \"completed\" && (\n <div className=\"animate-complete-pop\">\n <div className=\"rounded-full animate-success-flash\">\n <CircleCheck\n size={size}\n strokeWidth={2}\n className=\"text-green-500\"\n />\n </div>\n </div>\n )}\n {status === \"failed\" && (\n <CircleX\n size={size}\n strokeWidth={2}\n className=\"text-red-500\"\n />\n )}\n </div>\n );\n}\n","import { ReactNode, useEffect, useRef } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { StatusBadge } from \"./StatusBadge\";\nimport type { EventStatus } from \"../types\";\nimport { injectBeamerKeyframes, beamerBarStyle } from \"../utils/beamer\";\n\nexport interface TimelineItemData {\n id: string;\n status: EventStatus;\n content: ReactNode;\n}\n\nexport interface TimelineProps {\n items: TimelineItemData[];\n badgeSize?: number;\n className?: string;\n}\n\n/**\n * Vertical timeline component\n * Displays items with status badges and connecting lines\n */\nexport function Timeline({ items, badgeSize = 20, className }: TimelineProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n useEffect(() => { injectBeamerKeyframes(containerRef.current); }, []);\n\n if (items.length === 0) {\n return null;\n }\n\n return (\n <div ref={containerRef} className={cn(\"max-w-full\", className)}>\n <div className=\"flex flex-col\">\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n const nextItem = !isLast ? items[index + 1] : null;\n const nextItemPending = nextItem?.status === \"pending\";\n // Show animated line when current item is running and connects to next\n const showAnimatedLine = item.status === \"running\" && !isLast;\n\n return (\n <div\n key={item.id}\n className=\"animate-fade-in\"\n style={{\n display: \"grid\",\n gridTemplateColumns: `${badgeSize}px 1fr`,\n gap: \"0.5rem\",\n paddingBottom: isLast ? 0 : \"0.5rem\",\n position: \"relative\",\n }}\n >\n {/* Status Badge Column */}\n <div\n className=\"relative flex flex-col items-center flex-shrink-0\"\n style={{ paddingTop: \"4px\" }}\n >\n <StatusBadge status={item.status} size={badgeSize} />\n\n {/* Vertical Connector Line */}\n {!isLast && (\n showAnimatedLine ? (\n // Animated energy flow line for running state\n <div\n className=\"absolute left-1/2 -translate-x-1/2 w-[2px] animate-flow-down\"\n style={{\n top: badgeSize + 6,\n height: `calc(100% - ${badgeSize}px + 4px)`,\n background: `repeating-linear-gradient(\n 180deg,\n rgb(99, 102, 241) 0px,\n rgb(99, 102, 241) 4px,\n transparent 4px,\n transparent 8px\n )`,\n zIndex: 1,\n }}\n />\n ) : (\n // Static line for other states\n <div\n className=\"absolute left-1/2 -translate-x-1/2\"\n style={{\n top: badgeSize + 6,\n height: `calc(100% - ${badgeSize}px + 4px)`,\n width: 0,\n borderLeft: \"2px\",\n borderStyle: nextItemPending ? \"dashed\" : \"solid\",\n borderColor: \"var(--chat-border)\",\n zIndex: 1,\n }}\n />\n )\n )}\n </div>\n\n {/* Content - with beamer effect when running */}\n <div\n style={{\n minWidth: 0,\n flex: 1,\n display: \"flex\",\n alignItems: \"center\",\n position: \"relative\",\n overflow: \"hidden\",\n borderRadius: 4,\n ...(item.status === \"running\" && {\n backgroundColor: \"rgba(0, 0, 0, 0.02)\",\n padding: \"2px 4px\",\n }),\n }}\n >\n {item.status === \"running\" && <div style={beamerBarStyle} />}\n {item.content}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\nexport interface TimelineItemProps {\n status: EventStatus;\n isLast?: boolean;\n badgeSize?: number;\n children: ReactNode;\n className?: string;\n}\n\n/**\n * Single timeline item (alternative API)\n */\nexport function TimelineItem({\n status,\n isLast = false,\n badgeSize = 16,\n children,\n className,\n}: TimelineItemProps) {\n const itemRef = useRef<HTMLDivElement>(null);\n useEffect(() => { injectBeamerKeyframes(itemRef.current); }, []);\n const showAnimatedLine = status === \"running\" && !isLast;\n\n return (\n <div\n ref={itemRef}\n className={cn(\n \"relative flex items-start gap-3 animate-fade-in\",\n !isLast && \"pb-3\",\n className\n )}\n >\n {/* Status Badge */}\n <div className=\"relative flex-shrink-0 pt-0.5\">\n <StatusBadge status={status} size={badgeSize} />\n\n {/* Vertical Connector Line */}\n {!isLast && (\n showAnimatedLine ? (\n // Animated energy flow line for running state\n <div\n className=\"absolute w-[2px] animate-flow-down\"\n style={{\n left: badgeSize / 2 - 1,\n top: badgeSize + 4,\n height: \"calc(100% + 12px)\",\n background: `repeating-linear-gradient(\n 180deg,\n rgb(99, 102, 241) 0px,\n rgb(99, 102, 241) 4px,\n transparent 4px,\n transparent 8px\n )`,\n zIndex: 1,\n }}\n />\n ) : (\n // Static line for other states\n <div\n className=\"absolute bg-[var(--chat-border)] opacity-30\"\n style={{\n left: badgeSize / 2 - 0.5,\n top: badgeSize + 4,\n height: \"calc(100% + 12px)\",\n width: 1,\n zIndex: 1,\n }}\n />\n )\n )}\n </div>\n\n {/* Content - with beamer effect when running */}\n <div\n style={{\n minWidth: 0,\n flex: 1,\n position: \"relative\",\n overflow: \"hidden\",\n borderRadius: 4,\n ...(status === \"running\" && {\n backgroundColor: \"rgba(0, 0, 0, 0.02)\",\n padding: \"2px 4px\",\n }),\n }}\n >\n {status === \"running\" && <div style={beamerBarStyle} />}\n {children}\n </div>\n </div>\n );\n}\n","import { useEffect, useRef } from \"react\";\nimport { Wrench } from \"lucide-react\";\nimport { cn } from \"../utils/cn\";\nimport { injectBeamerKeyframes, beamerBarStyle } from \"../utils/beamer\";\nimport { MarkdownContent } from \"./MarkdownContent\";\nimport type { Event } from \"../types\";\n\ninterface EventContentProps {\n event: Event;\n className?: string;\n /** When true, shows beamer scanning effect on tool items */\n isRunning?: boolean;\n}\n\n/**\n * Renders content for different event types\n * - Thinking: Markdown content with subtle styling\n * - Planning: Markdown content with planning context\n * - Tool: Inline icon + text display with beamer effect when running\n * - Observation: Colored result panel\n */\nexport function EventContent({ event, className, isRunning }: EventContentProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n useEffect(() => { injectBeamerKeyframes(containerRef.current); }, []);\n if (event.type === \"thinking\") {\n return (\n <div\n ref={containerRef}\n className={cn(\n \"p-1 rounded transition-colors\",\n \"bg-black/[0.01] hover:bg-black/[0.02]\",\n className\n )}\n >\n <div className=\"text-[var(--chat-text-subtle)] leading-relaxed\">\n <MarkdownContent className=\"text-[14px]\">{event.content}</MarkdownContent>\n </div>\n </div>\n );\n }\n\n if (event.type === \"planning\") {\n return (\n <div\n ref={containerRef}\n className={cn(\n \"p-1 rounded transition-colors\",\n \"bg-black/[0.01] hover:bg-black/[0.02]\",\n className\n )}\n >\n <div className=\"text-[var(--chat-text-subtle)] leading-relaxed\">\n <MarkdownContent className=\"text-[14px]\">{event.content}</MarkdownContent>\n </div>\n </div>\n );\n }\n\n if (event.type === \"tool\") {\n return (\n <div\n ref={containerRef}\n className={cn(\"inline-flex items-center gap-1.5\", className)}\n style={{\n position: \"relative\",\n overflow: \"hidden\",\n borderRadius: 4,\n ...(isRunning && {\n backgroundColor: \"rgba(0, 0, 0, 0.02)\",\n padding: \"2px 4px\",\n }),\n }}\n >\n {isRunning && <div style={beamerBarStyle} />}\n <Wrench size={14} className=\"text-black/50 relative z-10 shrink-0\" />\n <span className=\"text-[14px] text-black/65 relative z-10\">\n {event.toolDescription || event.toolName}\n </span>\n </div>\n );\n }\n\n if (event.type === \"observation\") {\n const success = event.success !== false;\n\n return (\n <div\n ref={containerRef}\n className={cn(\n \"px-3 py-1.5 rounded max-w-full overflow-auto\",\n success\n ? \"bg-green-50 border-l-[3px] border-green-400\"\n : \"bg-yellow-50 border-l-[3px] border-yellow-400\",\n className\n )}\n >\n <span\n className={cn(\n \"text-xs font-semibold uppercase tracking-wide block mb-1\",\n success ? \"text-green-700\" : \"text-yellow-700\"\n )}\n >\n {event.toolName} Result\n </span>\n <div\n className={cn(\n success ? \"text-green-900\" : \"text-yellow-900\"\n )}\n >\n <MarkdownContent className=\"text-[14px]\">{event.content}</MarkdownContent>\n </div>\n </div>\n );\n }\n\n return null;\n}\n","import { Timeline, type TimelineItemData } from \"./Timeline\";\nimport { EventContent } from \"./EventContent\";\nimport type { Event, EventStatus, StreamingChunk } from \"../types\";\n\n/**\n * Internal tools that should be hidden from users\n */\nconst INTERNAL_TOOLS = [\"create_plan\", \"unknown\"];\n\nfunction isInternalTool(toolName?: string): boolean {\n if (!toolName) return false;\n return INTERNAL_TOOLS.includes(toolName.toLowerCase().trim());\n}\n\n/**\n * Convert StreamingChunk to Event format\n */\nexport function convertChunkToEvent(chunk: StreamingChunk, index: number): Event | null {\n // Filter out internal tools\n if (chunk.toolName && isInternalTool(chunk.toolName)) {\n return null;\n }\n\n if (chunk.type === \"thinking\") {\n // Skip empty thinking chunks\n if (!chunk.content || chunk.content.trim().length === 0) {\n return null;\n }\n\n return {\n id: `thinking-${index}`,\n type: \"thinking\",\n status: \"completed\",\n content: chunk.content,\n };\n }\n\n if (chunk.type === \"planning\") {\n // Skip empty planning chunks\n if (!chunk.content || chunk.content.trim().length === 0) {\n return null;\n }\n\n const isComplete = chunk.planData !== undefined || chunk.content.includes(\"✓ Created plan\");\n\n return {\n id: `planning-${index}`,\n type: \"planning\",\n status: isComplete ? \"completed\" : \"running\",\n content: chunk.content,\n isComplete,\n };\n }\n\n if (chunk.type === \"tool\") {\n const status: EventStatus =\n chunk.status === \"executing\"\n ? \"running\"\n : chunk.status === \"completed\"\n ? \"completed\"\n : \"pending\";\n\n return {\n id: `tool-${index}`,\n type: \"tool\",\n status,\n toolName: chunk.toolName || \"Unknown Tool\",\n toolDescription: chunk.toolDescription,\n };\n }\n\n // Don't render observation chunks separately\n return null;\n}\n\n/**\n * Convert timeline items (from metadata) to Events\n */\nexport function convertTimelineToEvents(timeline: Array<Record<string, unknown>>): Event[] {\n const events: Event[] = [];\n\n timeline.forEach((item, index) => {\n if (item.type === \"thought\") {\n const thought = item.thought as string | undefined;\n if (!thought || thought.trim().length === 0) {\n return;\n }\n\n events.push({\n id: `thought-${index}`,\n type: \"thinking\",\n status: \"completed\",\n content: thought,\n });\n } else if (item.type === \"tool\") {\n const tool = (item.tool as string) || \"Unknown Tool\";\n if (isInternalTool(tool)) {\n return;\n }\n\n events.push({\n id: `tool-${index}`,\n type: \"tool\",\n status: \"completed\",\n toolName: tool,\n toolDescription: item.tool_description as string | undefined,\n });\n }\n });\n\n return events;\n}\n\nexport interface EventTimelineProps {\n events: Event[];\n isStreaming?: boolean;\n className?: string;\n}\n\n/**\n * Unified event timeline component\n * Displays thinking, tool execution, and observation events\n */\nexport function EventTimeline({ events, className }: EventTimelineProps) {\n if (events.length === 0) {\n return null;\n }\n\n // Convert events to timeline items\n const timelineItems: TimelineItemData[] = events.map((event) => ({\n id: event.id,\n status: event.status,\n content: <EventContent event={event} isRunning={event.status === \"running\"} />,\n }));\n\n return <Timeline items={timelineItems} badgeSize={20} className={className} />;\n}\n","import { useState } from \"react\";\nimport { ChevronDown, ChevronUp } from \"lucide-react\";\nimport { cn } from \"../utils/cn\";\nimport { Timeline, type TimelineItemData } from \"./Timeline\";\nimport { EventTimeline } from \"./EventTimeline\";\nimport type { PlanData, StreamingChunk, Event, EventStatus, SubTaskData } from \"../types\";\n\n/**\n * Convert streaming chunks to Events for a specific subtask\n */\nfunction convertChunksToEvents(chunks: StreamingChunk[]): Event[] {\n const events: Event[] = [];\n\n chunks.forEach((chunk, index) => {\n if (chunk.type === \"thinking\") {\n if (!chunk.content || chunk.content.trim().length === 0) return;\n\n events.push({\n id: `thinking-${index}`,\n type: \"thinking\",\n status: \"completed\",\n content: chunk.content,\n });\n } else if (chunk.type === \"tool\") {\n const status: EventStatus =\n chunk.status === \"executing\"\n ? \"running\"\n : chunk.status === \"completed\"\n ? \"completed\"\n : \"pending\";\n\n events.push({\n id: `tool-${index}`,\n type: \"tool\",\n status,\n toolName: chunk.toolName || \"Unknown Tool\",\n toolDescription: chunk.toolDescription,\n });\n }\n });\n\n return events;\n}\n\ninterface SubtaskContentProps {\n subtask: SubTaskData;\n executionChunks?: StreamingChunk[];\n}\n\n/**\n * Minimal inline content for each subtask — description + time, no card/border.\n */\nfunction SubtaskContent({ subtask, executionChunks = [] }: SubtaskContentProps) {\n const [isExpanded, setIsExpanded] = useState(subtask.status === \"running\");\n const isRunning = subtask.status === \"running\";\n const isFailed = subtask.status === \"failed\";\n const isCompleted = subtask.status === \"completed\";\n\n // Auto-expand when running\n if (isRunning && !isExpanded) {\n setIsExpanded(true);\n }\n\n const hasExecutionDetails = executionChunks.length > 0;\n const events = convertChunksToEvents(executionChunks);\n\n return (\n <div className=\"flex-1 min-w-0\">\n {/* Single row: description + execution time + expand chevron */}\n <div\n onClick={() => hasExecutionDetails && setIsExpanded(!isExpanded)}\n className={cn(\n \"flex items-center gap-2 min-w-0\",\n hasExecutionDetails && \"cursor-pointer\"\n )}\n >\n <span\n className={cn(\n \"text-sm font-medium truncate\",\n isFailed ? \"text-red-500\" : \"text-black/85\"\n )}\n >\n {subtask.description}\n </span>\n\n {/* Error inline */}\n {isFailed && subtask.error && (\n <span className=\"text-sm text-red-500 truncate flex-1\">\n {subtask.error}\n </span>\n )}\n\n {/* Execution time inline (subtle, like \"1.2s\") */}\n {isCompleted && subtask.execution_time != null && subtask.execution_time > 0 && (\n <span className=\"text-xs text-black/40 shrink-0 tabular-nums\">\n {subtask.execution_time.toFixed(1)}s\n </span>\n )}\n\n {/* Expand indicator */}\n {hasExecutionDetails && (\n <span className=\"text-black/40 shrink-0 flex items-center\">\n {isExpanded ? <ChevronUp size={14} /> : <ChevronDown size={14} />}\n </span>\n )}\n </div>\n\n {/* Nested execution details */}\n {hasExecutionDetails && isExpanded && (\n <div className=\"mt-2 pl-2\">\n <EventTimeline events={events} />\n </div>\n )}\n </div>\n );\n}\n\nexport interface PlanTimelineProps {\n plan: PlanData;\n streamingChunks?: StreamingChunk[];\n className?: string;\n}\n\n/**\n * Minimal timeline for Plan & Execute mode.\n * Matches in-house style: simple \"Plan:\" header + inline text rows.\n */\nexport function PlanTimeline({\n plan,\n streamingChunks = [],\n className,\n}: PlanTimelineProps) {\n // Convert subtasks to timeline items\n const timelineItems: TimelineItemData[] = plan.subtasks.map((subtask) => {\n const subtaskChunks = streamingChunks.filter(\n (chunk) => chunk.subtaskId === subtask.id\n );\n\n const status: EventStatus =\n subtask.status === \"running\"\n ? \"running\"\n : subtask.status === \"completed\"\n ? \"completed\"\n : subtask.status === \"failed\"\n ? \"failed\"\n : \"pending\";\n\n return {\n id: String(subtask.id),\n status,\n content: <SubtaskContent subtask={subtask} executionChunks={subtaskChunks} />,\n };\n });\n\n return (\n <div className={cn(\"space-y-2\", className)}>\n {/* Simple header */}\n <span className=\"text-sm text-black/50\">Plan:</span>\n\n {/* Subtask timeline */}\n <Timeline items={timelineItems} badgeSize={20} />\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { Wrench, ChevronDown, ChevronRight, Loader2, CheckCircle2, XCircle } from \"lucide-react\";\nimport type { StreamingChunk } from \"../../types\";\n\nexport interface ClaudeToolPreviewProps {\n chunk: StreamingChunk;\n}\n\nexport function ClaudeToolPreview({ chunk }: ClaudeToolPreviewProps) {\n const [isExpanded, setIsExpanded] = useState(false);\n\n const data = chunk.claudeToolData;\n if (!data) return null;\n\n const isPending = data.status === \"pending\";\n const isError = data.status === \"error\";\n const isCompleted = data.status === \"completed\";\n\n const getStatusIcon = () => {\n if (isPending) return <Loader2 size={14} className=\"animate-spin text-gray-400\" />;\n if (isError) return <XCircle size={14} className=\"text-red-500\" />;\n return <CheckCircle2 size={14} className=\"text-green-500\" />;\n };\n\n const getDisplayName = () => {\n const name = data.toolName;\n if (name.startsWith(\"mcp__\")) {\n const parts = name.split(\"__\");\n if (parts.length >= 3) return `${parts[1]}/${parts[2]}`;\n }\n return name;\n };\n\n return (\n <div className=\"bg-gray-50 dark:bg-gray-800/50 rounded-lg border border-gray-200 dark:border-gray-700 overflow-hidden\">\n <div\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"flex items-center gap-2 px-3 py-2 cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-800\"\n >\n <Wrench size={16} className=\"text-gray-400 shrink-0\" />\n <span className=\"flex-1 text-sm truncate\">\n <span className=\"font-medium\">{getDisplayName()}</span>\n {data.toolDescription && (\n <span className=\"text-gray-400 ml-2\">{data.toolDescription}</span>\n )}\n </span>\n {getStatusIcon()}\n {isCompleted && data.durationMs != null && (\n <span className=\"text-[0.7rem] px-1.5 py-0.5 bg-black/5 dark:bg-white/5 rounded\">\n {Math.round(data.durationMs)}ms\n </span>\n )}\n <span className=\"p-0.5\">\n {isExpanded ? <ChevronDown size={14} /> : <ChevronRight size={14} />}\n </span>\n </div>\n\n {isExpanded && (\n <div className=\"border-t border-gray-200 dark:border-gray-700 p-3\">\n {data.toolInput && Object.keys(data.toolInput).length > 0 && (\n <div className=\"mb-3\">\n <div className=\"text-[0.75rem] text-gray-400 uppercase tracking-wider mb-1\">Input</div>\n <pre className=\"text-[0.75rem] font-mono bg-gray-100 dark:bg-gray-900 rounded p-2 overflow-auto max-h-[150px] m-0\">\n {JSON.stringify(data.toolInput, null, 2)}\n </pre>\n </div>\n )}\n {isError && (\n <p className=\"text-sm text-red-500 font-mono\">{data.content || \"Tool execution failed\"}</p>\n )}\n {isPending && (\n <p className=\"text-sm text-gray-400 italic\">Executing tool...</p>\n )}\n {isCompleted && data.content && !data.isError && (\n <div>\n <div className=\"text-[0.75rem] text-gray-400 uppercase tracking-wider mb-1\">Result</div>\n <pre className=\"text-[0.75rem] font-mono bg-gray-100 dark:bg-gray-900 rounded p-2 overflow-auto max-h-[200px] whitespace-pre-wrap break-words m-0\">\n {data.content.length > 1500 ? `${data.content.slice(0, 1500)}\\n... (truncated)` : data.content}\n </pre>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { ChevronDown, ChevronRight, Terminal, CheckCircle2, XCircle, Loader2 } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport type { StreamingChunk } from \"../../types\";\n\nexport interface TerminalOutputProps {\n chunk: StreamingChunk;\n}\n\nexport function TerminalOutput({ chunk }: TerminalOutputProps) {\n const [expanded, setExpanded] = useState(true);\n\n const data = chunk.terminalData;\n if (!data) return null;\n\n const getStatusIcon = () => {\n switch (data.status) {\n case \"running\":\n return <Loader2 size={14} className=\"animate-spin text-blue-500\" />;\n case \"completed\":\n return <CheckCircle2 size={14} className=\"text-green-500\" />;\n case \"failed\":\n return <XCircle size={14} className=\"text-red-500\" />;\n default:\n return null;\n }\n };\n\n const statusBorderColor =\n data.status === \"running\" ? \"border-blue-500/30\" :\n data.status === \"failed\" ? \"border-red-500/30\" :\n data.exitCode === 0 ? \"border-green-500/30\" : \"border-yellow-500/30\";\n\n const statusBgColor =\n data.status === \"running\" ? \"bg-blue-500/10\" :\n data.status === \"failed\" ? \"bg-red-500/10\" :\n \"bg-green-500/10\";\n\n const statusColor =\n data.status === \"running\" ? \"text-blue-500\" :\n data.status === \"failed\" ? \"text-red-500\" :\n \"text-green-500\";\n\n const formatDuration = (ms?: number) => {\n if (!ms) return null;\n if (ms < 1000) return ms + \"ms\";\n return (ms / 1000).toFixed(1) + \"s\";\n };\n\n return (\n <div className={cn(\"my-1 bg-[#1a1a1a] rounded border\", statusBorderColor, \"overflow-hidden\")}>\n <div\n onClick={() => setExpanded(!expanded)}\n className={cn(\"flex items-center gap-2 px-3 py-1.5 cursor-pointer\", statusBgColor, \"hover:brightness-110\")}\n >\n <span className=\"p-0.5 text-gray-500\">\n {expanded ? <ChevronDown size={16} /> : <ChevronRight size={16} />}\n </span>\n <Terminal size={16} className={statusColor} />\n <span className=\"flex-1 font-mono text-[0.75rem] text-gray-300 truncate\">\n <span className=\"text-gray-500\">$ </span>\n {data.command}\n </span>\n {data.durationMs != null && (\n <span className=\"text-[0.7rem] text-gray-600\">{formatDuration(data.durationMs)}</span>\n )}\n {getStatusIcon()}\n {data.status !== \"running\" && data.exitCode !== undefined && (\n <span className={cn(\"text-[0.7rem] font-mono\", data.exitCode === 0 ? \"text-green-500\" : \"text-red-500\")}>\n [{data.exitCode}]\n </span>\n )}\n </div>\n\n {expanded && (\n <div className=\"p-3\">\n {data.description && (\n <p className=\"text-gray-500 text-[0.75rem] italic mb-2\">{data.description}</p>\n )}\n {data.stdout && (\n <pre className={cn(\n \"m-0 p-2 text-[0.7rem] font-mono bg-[#0d0d0d] rounded overflow-auto max-h-[300px]\",\n \"text-green-400 whitespace-pre-wrap break-words\",\n data.stderr && \"mb-2\"\n )}>\n {data.stdout}\n </pre>\n )}\n {data.stderr && (\n <pre className=\"m-0 p-2 text-[0.7rem] font-mono bg-red-500/10 rounded border border-red-500/30 overflow-auto max-h-[200px] text-red-400 whitespace-pre-wrap break-words\">\n {data.stderr}\n </pre>\n )}\n {data.status === \"running\" && !data.stdout && !data.stderr && (\n <p className=\"text-gray-500 text-[0.75rem] italic\">Running...</p>\n )}\n {data.status === \"completed\" && !data.stdout && !data.stderr && data.exitCode === 0 && (\n <p className=\"text-gray-600 text-[0.75rem] italic\">Command completed with no output</p>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { useState, useMemo } from \"react\";\nimport { ChevronDown, ChevronRight, Eye, Save, Pencil, FileText, CheckCircle2, XCircle, Clock } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport type { StreamingChunk } from \"../../types\";\n\nexport interface FileOperationPreviewProps {\n chunk: StreamingChunk;\n}\n\nexport function FileOperationPreview({ chunk }: FileOperationPreviewProps) {\n const [expanded, setExpanded] = useState(false);\n\n const data = chunk.fileOperationData;\n if (!data) return null;\n\n const opIcon = data.operation === \"read\" ? <Eye size={16} /> :\n data.operation === \"write\" ? <Save size={16} /> :\n data.operation === \"edit\" ? <Pencil size={16} /> :\n <FileText size={16} />;\n\n const opColor = data.operation === \"read\" ? \"text-blue-500 border-blue-500\" :\n data.operation === \"write\" ? \"text-green-500 border-green-500\" :\n data.operation === \"edit\" ? \"text-yellow-500 border-yellow-500\" :\n \"text-gray-500 border-gray-500\";\n\n const opBg = data.operation === \"read\" ? \"bg-blue-500/5 hover:bg-blue-500/8\" :\n data.operation === \"write\" ? \"bg-green-500/5 hover:bg-green-500/8\" :\n data.operation === \"edit\" ? \"bg-yellow-500/5 hover:bg-yellow-500/8\" :\n \"bg-gray-500/5\";\n\n const statusIcon = data.status === \"pending\" ? <Clock size={14} className=\"text-gray-400\" /> :\n data.status === \"completed\" ? <CheckCircle2 size={14} className=\"text-green-500\" /> :\n <XCircle size={14} className=\"text-red-500\" />;\n\n const opLabel = data.operation === \"read\" ? \"Read\" :\n data.operation === \"write\" ? \"Write\" :\n data.operation === \"edit\" ? \"Edit\" : \"File\";\n\n const formatPath = (path: string) => {\n const parts = path.split(\"/\");\n if (parts.length <= 3) return path;\n return \".../\" + parts.slice(-3).join(\"/\");\n };\n\n return (\n <div className={cn(\"my-1 border rounded overflow-hidden\", opColor.split(\" \")[1] + \"/30\")}>\n <div\n onClick={() => setExpanded(!expanded)}\n className={cn(\"flex items-center gap-2 px-3 py-1.5 cursor-pointer\", opBg)}\n >\n <span className=\"p-0.5\">\n {expanded ? <ChevronDown size={16} /> : <ChevronRight size={16} />}\n </span>\n <span className={opColor.split(\" \")[0]}>{opIcon}</span>\n <span className={cn(\"font-medium text-[0.75rem]\", opColor.split(\" \")[0])}>{opLabel}</span>\n <span className=\"flex-1 font-mono text-[0.75rem] text-gray-500 truncate\">\n {formatPath(data.filePath)}\n </span>\n {data.totalLines != null && (\n <span className=\"text-[0.7rem] text-gray-400\">{data.totalLines} lines</span>\n )}\n {statusIcon}\n </div>\n\n {expanded && (\n <div className=\"p-3 bg-gray-50 dark:bg-[#1e1e1e]\">\n {data.operation === \"read\" && data.content && (\n <FileContent content={data.content} />\n )}\n {data.operation === \"edit\" && (\n <DiffView oldString={data.oldString} newString={data.newString} />\n )}\n {data.operation === \"write\" && data.status === \"completed\" && (\n <p className=\"text-green-500 text-sm\">File written successfully</p>\n )}\n {data.error && (\n <p className=\"text-red-500 text-sm\">Error: {data.error}</p>\n )}\n </div>\n )}\n </div>\n );\n}\n\nfunction FileContent({ content }: { content: string }) {\n const lines = useMemo(() => content.split(\"\\n\").slice(0, 50), [content]);\n const totalLines = content.split(\"\\n\").length;\n const truncated = totalLines > 50;\n\n return (\n <div>\n <pre className=\"m-0 p-2 text-[0.75rem] font-mono bg-gray-100 dark:bg-[#1a1a1a] rounded overflow-auto max-h-[300px]\">\n {lines.map((line, idx) => (\n <div key={idx} className=\"flex\">\n <span className=\"inline-block w-10 text-right pr-3 mr-3 border-r border-gray-200 dark:border-gray-700 text-gray-400 select-none\">\n {idx + 1}\n </span>\n <span>{line || \" \"}</span>\n </div>\n ))}\n </pre>\n {truncated && (\n <p className=\"text-[0.75rem] text-gray-400 mt-1\">... and {totalLines - 50} more lines</p>\n )}\n </div>\n );\n}\n\nfunction DiffView({ oldString, newString }: { oldString?: string; newString?: string }) {\n if (!oldString && !newString) {\n return <p className=\"text-gray-500 text-sm\">No changes to display</p>;\n }\n\n return (\n <div className=\"flex gap-4\">\n <div className=\"flex-1\">\n <span className=\"text-[0.75rem] font-medium text-red-500 block mb-1\">- Removed</span>\n <pre className=\"m-0 p-2 text-[0.7rem] font-mono bg-red-500/10 rounded border border-red-500/30 overflow-auto max-h-[200px] whitespace-pre-wrap break-words\">\n {oldString || \"(empty)\"}\n </pre>\n </div>\n <div className=\"flex-1\">\n <span className=\"text-[0.75rem] font-medium text-green-500 block mb-1\">+ Added</span>\n <pre className=\"m-0 p-2 text-[0.7rem] font-mono bg-green-500/10 rounded border border-green-500/30 overflow-auto max-h-[200px] whitespace-pre-wrap break-words\">\n {newString || \"(empty)\"}\n </pre>\n </div>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { ChevronDown, ChevronRight, FileSearch, FolderSearch, File } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport type { StreamingChunk, SearchResultItem } from \"../../types\";\n\nexport interface SearchResultsViewProps {\n chunk: StreamingChunk;\n}\n\nexport function SearchResultsView({ chunk }: SearchResultsViewProps) {\n const [expanded, setExpanded] = useState(true);\n\n const data = chunk.searchResultsData;\n if (!data) return null;\n\n const isGrep = data.tool === \"grep\";\n const toolColor = isGrep ? \"text-purple-500\" : \"text-blue-500\";\n const toolBorderColor = isGrep ? \"border-purple-500/30\" : \"border-blue-500/30\";\n const toolBg = isGrep ? \"bg-purple-500/5 hover:bg-purple-500/8\" : \"bg-blue-500/5 hover:bg-blue-500/8\";\n const toolChipBg = isGrep ? \"bg-purple-500/10 text-purple-500\" : \"bg-blue-500/10 text-blue-500\";\n\n return (\n <div className={cn(\"my-1 border rounded overflow-hidden\", toolBorderColor)}>\n <div\n onClick={() => setExpanded(!expanded)}\n className={cn(\"flex items-center gap-2 px-3 py-1.5 cursor-pointer\", toolBg)}\n >\n <span className=\"p-0.5\">\n {expanded ? <ChevronDown size={16} /> : <ChevronRight size={16} />}\n </span>\n <span className={toolColor}>\n {isGrep ? <FileSearch size={16} /> : <FolderSearch size={16} />}\n </span>\n <span className={cn(\"text-[0.7rem] px-1.5 py-0.5 rounded font-medium\", toolChipBg)}>\n {isGrep ? \"Grep\" : \"Glob\"}\n </span>\n <span className=\"flex-1 font-mono text-[0.75rem] text-gray-500 truncate\">\n {data.pattern}\n </span>\n <span className={cn(\n \"text-[0.7rem] px-1.5 py-0.5 rounded\",\n data.totalCount > 0 ? \"bg-green-500/10 text-green-500\" : \"bg-gray-500/10 text-gray-500\"\n )}>\n {data.totalCount} results\n </span>\n </div>\n\n {expanded && (\n <div className=\"max-h-[300px] overflow-auto\">\n {data.results.length > 0 ? (\n <div>\n {data.results.slice(0, 50).map((result, idx) => (\n <SearchResultRow key={idx} result={result} isGrep={isGrep} />\n ))}\n {data.results.length > 50 && (\n <div className=\"py-1 px-3\">\n <span className=\"text-[0.75rem] text-gray-400\">\n ... and {data.results.length - 50} more results\n </span>\n </div>\n )}\n </div>\n ) : (\n <div className=\"p-3\">\n <p className=\"text-gray-500 text-sm\">No results found</p>\n </div>\n )}\n {data.error && (\n <div className=\"p-3\">\n <p className=\"text-red-500 text-sm\">Error: {data.error}</p>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\nfunction SearchResultRow({ result, isGrep }: { result: SearchResultItem; isGrep: boolean }) {\n const formatPath = (path: string) => {\n const parts = path.split(\"/\");\n if (parts.length <= 4) return path;\n return \".../\" + parts.slice(-4).join(\"/\");\n };\n\n return (\n <div className=\"flex items-start gap-2 py-1 px-3 border-b border-gray-100 dark:border-gray-800 last:border-b-0 hover:bg-gray-50 dark:hover:bg-gray-800/50\">\n <File size={14} className=\"text-gray-400 mt-0.5 shrink-0\" />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"font-mono text-[0.75rem] truncate\">{formatPath(result.filePath)}</span>\n {isGrep && result.lineNumber != null && (\n <span className=\"font-mono text-[0.7rem] text-blue-500\">:{result.lineNumber}</span>\n )}\n </div>\n {result.snippet && (\n <p className=\"font-mono text-[0.7rem] text-gray-500 truncate max-w-[400px]\">\n {result.snippet}\n </p>\n )}\n </div>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { Globe, Search, ExternalLink, ChevronDown, ChevronRight, Loader2, CheckCircle2, XCircle } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport type { StreamingChunk } from \"../../types\";\n\nexport interface WebOperationPreviewProps {\n chunk: StreamingChunk;\n}\n\nexport function WebOperationPreview({ chunk }: WebOperationPreviewProps) {\n const [isExpanded, setIsExpanded] = useState(false);\n\n const data = chunk.webOperationData;\n if (!data) return null;\n\n const isSearch = data.operation === \"search\";\n const isPending = data.status === \"pending\";\n const isError = data.status === \"error\";\n const isCompleted = data.status === \"completed\";\n\n const getStatusIcon = () => {\n if (isPending) return <Loader2 size={14} className=\"animate-spin text-gray-400\" />;\n if (isError) return <XCircle size={14} className=\"text-red-500\" />;\n return <CheckCircle2 size={14} className=\"text-green-500\" />;\n };\n\n const parseSearchResults = () => {\n if (!data.results || typeof data.results !== \"string\") return [];\n const urlPattern = /\\[([^\\]]+)\\]\\(([^)]+)\\)/g;\n const matches: { title: string; url: string }[] = [];\n let match;\n while ((match = urlPattern.exec(data.results)) !== null) {\n matches.push({ title: match[1], url: match[2] });\n }\n return matches;\n };\n\n const searchResults = isSearch ? parseSearchResults() : [];\n\n return (\n <div className=\"bg-gray-50 dark:bg-gray-800/50 rounded-lg border border-gray-200 dark:border-gray-700 overflow-hidden\">\n <div\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"flex items-center gap-2 px-3 py-2 cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-800\"\n >\n {isSearch ? (\n <Search size={16} className=\"text-gray-400 shrink-0\" />\n ) : (\n <Globe size={16} className=\"text-gray-400 shrink-0\" />\n )}\n <span className=\"flex-1 text-sm truncate\">\n {isSearch ? (\n <>Searching: <span className=\"font-medium\">{data.query}</span></>\n ) : (\n <>Fetching: <span className=\"font-medium\">{data.url}</span></>\n )}\n </span>\n {getStatusIcon()}\n {isCompleted && data.durationMs != null && (\n <span className=\"text-[0.7rem] px-1.5 py-0.5 bg-black/5 dark:bg-white/5 rounded\">\n {Math.round(data.durationMs)}ms\n </span>\n )}\n <span className=\"p-0.5\">\n {isExpanded ? <ChevronDown size={14} /> : <ChevronRight size={14} />}\n </span>\n </div>\n\n {isExpanded && (\n <div className=\"border-t border-gray-200 dark:border-gray-700 p-3\">\n {isError && data.error && (\n <p className=\"text-sm text-red-500 font-mono\">{data.error}</p>\n )}\n {isPending && (\n <p className=\"text-sm text-gray-400 italic\">\n {isSearch ? \"Searching the web...\" : \"Fetching content...\"}\n </p>\n )}\n {isSearch && isCompleted && searchResults.length > 0 && (\n <div className=\"space-y-2\">\n <div className=\"text-[0.75rem] text-gray-400 uppercase tracking-wider\">\n {searchResults.length} Results\n </div>\n {searchResults.slice(0, 5).map((result, idx) => (\n <div\n key={idx}\n className={cn(\n \"flex items-center gap-2 py-1\",\n idx < Math.min(searchResults.length, 5) - 1 && \"border-b border-gray-200 dark:border-gray-700\"\n )}\n >\n <ExternalLink size={12} className=\"text-gray-400 shrink-0\" />\n <a\n href={result.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-sm truncate hover:underline\"\n >\n {result.title}\n </a>\n </div>\n ))}\n {searchResults.length > 5 && (\n <p className=\"text-[0.75rem] text-gray-400 italic\">\n +{searchResults.length - 5} more results\n </p>\n )}\n </div>\n )}\n {isSearch && isCompleted && searchResults.length === 0 && data.results && (\n <p className=\"text-sm whitespace-pre-wrap max-h-[200px] overflow-auto\">\n {typeof data.results === \"string\"\n ? data.results.slice(0, 1000)\n : JSON.stringify(data.results, null, 2).slice(0, 1000)}\n {data.results.length > 1000 && \"...\"}\n </p>\n )}\n {!isSearch && isCompleted && data.content && (\n <div className=\"max-h-[300px] overflow-auto bg-gray-100 dark:bg-gray-900 rounded p-2\">\n <pre className=\"text-[0.75rem] font-mono whitespace-pre-wrap break-words m-0\">\n {data.content.slice(0, 2000)}\n {data.content.length > 2000 && \"\\n... (truncated)\"}\n </pre>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { ChevronDown, ChevronRight, GitBranch, CheckCircle2, XCircle, Loader2 } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport type { StreamingChunk } from \"../../types\";\n\nexport interface SubagentPanelProps {\n chunk: StreamingChunk;\n}\n\nconst TYPE_LABELS: Record<string, string> = {\n code_reviewer: \"Code Review\",\n researcher: \"Research\",\n data_analyst: \"Data Analysis\",\n Explore: \"Explore\",\n Plan: \"Planning\",\n Bash: \"Command Execution\",\n};\n\nexport function SubagentPanel({ chunk }: SubagentPanelProps) {\n const [expanded, setExpanded] = useState(true);\n\n const data = chunk.subagentData;\n if (!data) return null;\n\n const statusIcon =\n data.status === \"running\" ? <Loader2 size={16} className=\"animate-spin text-blue-500\" /> :\n data.status === \"completed\" ? <CheckCircle2 size={16} className=\"text-green-500\" /> :\n data.status === \"failed\" ? <XCircle size={16} className=\"text-red-500\" /> : null;\n\n const statusColor =\n data.status === \"running\" ? \"border-blue-500\" :\n data.status === \"completed\" ? \"border-green-500\" :\n data.status === \"failed\" ? \"border-red-500\" : \"border-gray-500\";\n\n const statusBg =\n data.status === \"running\" ? \"bg-blue-500/3\" :\n data.status === \"completed\" ? \"bg-green-500/3\" :\n data.status === \"failed\" ? \"bg-red-500/3\" : \"bg-gray-500/3\";\n\n const chipColor =\n data.status === \"running\" ? \"bg-blue-500/10 text-blue-500\" :\n data.status === \"completed\" ? \"bg-green-500/10 text-green-500\" :\n data.status === \"failed\" ? \"bg-red-500/10 text-red-500\" : \"bg-gray-500/10 text-gray-500\";\n\n const formatDuration = (ms?: number) => {\n if (!ms) return null;\n if (ms < 1000) return ms + \"ms\";\n return (ms / 1000).toFixed(1) + \"s\";\n };\n\n const label = TYPE_LABELS[data.subagentType] || data.subagentType;\n\n return (\n <div className={cn(\"border border-dashed rounded ml-4 my-2 overflow-hidden\", statusColor + \"/50\", statusBg)}>\n <div\n onClick={() => setExpanded(!expanded)}\n className={cn(\"flex items-center gap-2 px-3 py-1.5 cursor-pointer hover:brightness-95\")}\n >\n <span className=\"p-0.5\">\n {expanded ? <ChevronDown size={18} /> : <ChevronRight size={18} />}\n </span>\n <GitBranch size={16} className={statusColor.replace(\"border-\", \"text-\")} />\n <span className={cn(\"text-[0.75rem] px-2 py-0.5 rounded font-medium\", chipColor)}>\n {label}\n </span>\n <span className=\"flex-1 text-sm text-gray-500 truncate\">{data.description}</span>\n {statusIcon}\n {data.durationMs != null && (\n <span className=\"text-[0.7rem] text-gray-400\">{formatDuration(data.durationMs)}</span>\n )}\n </div>\n\n {expanded && (\n <div className=\"px-4 pb-3\">\n {data.nestedChunks && data.nestedChunks.length > 0 && (\n <div className=\"mt-2 space-y-1\">\n {data.nestedChunks.map((nestedChunk, idx) => (\n <NestedChunkRenderer key={idx} chunk={nestedChunk} />\n ))}\n </div>\n )}\n {data.status === \"completed\" && data.result && (\n <div className=\"mt-2 p-2 rounded bg-green-500/5 border border-green-500/20\">\n <span className=\"text-[0.75rem] font-medium text-green-500\">Result</span>\n <p className=\"mt-1 text-sm text-gray-500 whitespace-pre-wrap\">\n {data.result.length > 500 ? data.result.slice(0, 500) + \"...\" : data.result}\n </p>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\nfunction NestedChunkRenderer({ chunk }: { chunk: StreamingChunk }) {\n if (chunk.type === \"tool\" || chunk.type === \"observation\") {\n return (\n <div className=\"py-1 px-2 my-1 rounded bg-blue-500/5 text-[0.75rem]\">\n <span className=\"font-medium text-blue-500\">{chunk.toolName || \"Tool\"}:</span>{\" \"}\n <span className=\"text-gray-500\">\n {chunk.content?.slice(0, 200) || chunk.toolDescription || \"Executing...\"}\n {chunk.content && chunk.content.length > 200 && \"...\"}\n </span>\n </div>\n );\n }\n\n if (chunk.type === \"thinking\" || chunk.type === \"claude_thinking\") {\n return (\n <p className=\"py-1 text-[0.75rem] text-gray-400 italic\">\n {chunk.content?.slice(0, 150)}\n {chunk.content && chunk.content.length > 150 && \"...\"}\n </p>\n );\n }\n\n return null;\n}\n","import {\n\tFileText,\n\tGitBranch,\n\tGlobe,\n\tListTodo,\n\tLoader2,\n\tSearch,\n\tSparkle,\n\tTerminal,\n\tUsers,\n\tWrench,\n\tZap,\n} from \"lucide-react\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useScrollLock } from \"../hooks/use-scroll-lock\";\nimport type { Event, PlanData, StreamingChunk, SubagentInfo } from \"../types\";\nimport { beamerBarStyle, injectBeamerKeyframes } from \"../utils/beamer\";\nimport { cn } from \"../utils/cn\";\nimport { EventTimeline, convertChunkToEvent } from \"./EventTimeline\";\nimport { PlanTimeline } from \"./PlanTimeline\";\nimport { Timeline, type TimelineItemData } from \"./Timeline\";\nimport {\n\tClaudeToolPreview,\n\tFileOperationPreview,\n\tSearchResultsView,\n\tSubagentPanel,\n\tTerminalOutput,\n\tWebOperationPreview,\n} from \"./claude-sdk\";\n\n/**\n * Hook for live duration counter\n */\nfunction useLiveStreamDuration(isStreaming: boolean): { display: string; finalSeconds: number } {\n\tconst startTimeRef = useRef<number | null>(null);\n\tconst [elapsed, setElapsed] = useState(0);\n\tconst finalSecondsRef = useRef(0);\n\n\tuseEffect(() => {\n\t\tif (isStreaming) {\n\t\t\tif (startTimeRef.current === null) startTimeRef.current = Date.now();\n\t\t\tconst interval = setInterval(() => {\n\t\t\t\tif (startTimeRef.current !== null) {\n\t\t\t\t\tconst secs = Math.floor((Date.now() - startTimeRef.current) / 1000);\n\t\t\t\t\tsetElapsed(secs);\n\t\t\t\t\tfinalSecondsRef.current = secs;\n\t\t\t\t}\n\t\t\t}, 1000);\n\t\t\treturn () => clearInterval(interval);\n\t\t} else if (startTimeRef.current !== null) {\n\t\t\t// Streaming just ended — capture final elapsed time\n\t\t\tfinalSecondsRef.current = Math.floor((Date.now() - startTimeRef.current) / 1000);\n\t\t\tsetElapsed(finalSecondsRef.current);\n\t\t\tstartTimeRef.current = null;\n\t\t}\n\t}, [isStreaming]);\n\n\treturn { display: `${elapsed}`, finalSeconds: finalSecondsRef.current };\n}\n\nfunction hasClaudeSdkChunks(chunks: StreamingChunk[]): boolean {\n\treturn chunks.some(\n\t\t(c) =>\n\t\t\tc.orchestrator === \"claude_agent_sdk\" ||\n\t\t\tc.type === \"subagent\" ||\n\t\t\tc.type === \"file_operation\" ||\n\t\t\tc.type === \"terminal\" ||\n\t\t\tc.type === \"search_results\" ||\n\t\t\tc.type === \"web_operation\" ||\n\t\t\tc.type === \"claude_text\" ||\n\t\t\tc.type === \"claude_thinking\",\n\t);\n}\n\nfunction hasParallelExecutionChunks(chunks: StreamingChunk[]): boolean {\n\treturn chunks.some(\n\t\t(c) =>\n\t\t\tc.type === \"wave_start\" ||\n\t\t\tc.type === \"wave_complete\" ||\n\t\t\tc.type === \"parallel_subtask_start\" ||\n\t\t\tc.type === \"parallel_subtask_complete\" ||\n\t\t\tc.isParallel,\n\t);\n}\n\nfunction getWaveExecutionStatus(chunks: StreamingChunk[]) {\n\tconst waveStartChunks = chunks.filter((c) => c.type === \"wave_start\" && c.waveData);\n\tif (waveStartChunks.length === 0) return null;\n\n\tconst lastWaveStart = waveStartChunks[waveStartChunks.length - 1];\n\tconst currentWave = lastWaveStart.waveData?.waveNumber ?? 0;\n\tconst totalWaves = lastWaveStart.waveData?.totalWaves ?? 1;\n\tconst parallelCount = lastWaveStart.waveData?.parallelCount ?? 0;\n\n\tconst activeSubtasks: number[] = [];\n\tconst completedSubtasks: number[] = [];\n\n\tchunks.forEach((c) => {\n\t\tif (c.type === \"parallel_subtask_start\" && c.waveNumber === currentWave && c.subtaskId !== undefined) {\n\t\t\tif (!completedSubtasks.includes(c.subtaskId)) activeSubtasks.push(c.subtaskId);\n\t\t}\n\t\tif (c.type === \"parallel_subtask_complete\" && c.waveNumber === currentWave && c.subtaskId !== undefined) {\n\t\t\tcompletedSubtasks.push(c.subtaskId);\n\t\t\tconst idx = activeSubtasks.indexOf(c.subtaskId);\n\t\t\tif (idx >= 0) activeSubtasks.splice(idx, 1);\n\t\t}\n\t});\n\n\treturn { currentWave, totalWaves, parallelCount, activeSubtasks, completedSubtasks };\n}\n\nfunction hasMultiAgentChunks(chunks: StreamingChunk[]): boolean {\n\treturn chunks.some(\n\t\t(c) =>\n\t\t\tc.type === \"multi_agent_planning\" ||\n\t\t\tc.type === \"multi_agent_planning_complete\" ||\n\t\t\tc.type === \"subagent_start\" ||\n\t\t\tc.type === \"subagent_complete\" ||\n\t\t\tc.type === \"subagent_failed\" ||\n\t\t\tc.type === \"synthesis\" ||\n\t\t\tc.isMultiAgent,\n\t);\n}\n\nfunction getSubagentAllocations(chunks: StreamingChunk[]): { name: string; focus: string; query?: string }[] {\n\tconst planningChunk = chunks.find(\n\t\t(c) => (c.type === \"multi_agent_planning\" || c.type === \"multi_agent_planning_complete\") && c.subagentAllocations,\n\t);\n\treturn planningChunk?.subagentAllocations || [];\n}\n\nfunction getMultiAgentStatus(chunks: StreamingChunk[]) {\n\tconst subagents = new Map<string, SubagentInfo>();\n\tlet isSynthesizing = false;\n\n\tgetSubagentAllocations(chunks).forEach((alloc) => {\n\t\tsubagents.set(alloc.name, { name: alloc.name, task: alloc.query || alloc.focus, status: \"pending\" });\n\t});\n\n\tconst statusOrder: Record<string, number> = { pending: 0, running: 1, completed: 2, failed: 2 };\n\n\tchunks.forEach((c) => {\n\t\tif (c.subagentInfo?.name) {\n\t\t\tconst key = c.subagentInfo.id || c.subagentInfo.name;\n\t\t\tconst existing = subagents.get(key);\n\t\t\tif (!existing || (statusOrder[c.subagentInfo.status] ?? 0) >= (statusOrder[existing.status] ?? 0)) {\n\t\t\t\tsubagents.set(key, c.subagentInfo);\n\t\t\t}\n\t\t}\n\t\tif (c.type === \"synthesis\") isSynthesizing = true;\n\t});\n\n\tconst list = [...subagents.values()];\n\treturn {\n\t\tsubagents,\n\t\trunning: list.filter((s) => s.status === \"running\").length,\n\t\tcompleted: list.filter((s) => s.status === \"completed\").length,\n\t\tfailed: list.filter((s) => s.status === \"failed\").length,\n\t\tpending: list.filter((s) => s.status === \"pending\").length,\n\t\tisSynthesizing,\n\t};\n}\n\nfunction convertTimelineToChunks(timeline: any[]): StreamingChunk[] {\n\tconst chunks: StreamingChunk[] = [];\n\ttimeline.forEach((item) => {\n\t\tif (item.type === \"thought\" && item.thought) {\n\t\t\tchunks.push({ type: \"thinking\", content: item.thought, subtaskId: item.subtask_id });\n\t\t} else if (item.type === \"tool\") {\n\t\t\tchunks.push({\n\t\t\t\ttype: \"tool\",\n\t\t\t\tcontent: \"\",\n\t\t\t\ttoolName: item.tool || \"Unknown Tool\",\n\t\t\t\ttoolDescription: item.tool_description,\n\t\t\t\tstatus: \"completed\",\n\t\t\t\tsubtaskId: item.subtask_id,\n\t\t\t});\n\t\t\tif (item.observation) {\n\t\t\t\tchunks.push({\n\t\t\t\t\ttype: \"observation\",\n\t\t\t\t\tcontent: item.observation,\n\t\t\t\t\ttoolName: item.tool || \"Unknown Tool\",\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\tsubtaskId: item.subtask_id,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n\treturn chunks;\n}\n\nfunction MultiAgentStatusPanel({ chunks }: { chunks: StreamingChunk[] }) {\n\tconst status = getMultiAgentStatus(chunks);\n\tconst subagentList = [...status.subagents.values()];\n\n\tif (subagentList.length === 0) {\n\t\tconst isPlanning = chunks.some((c) => c.type === \"multi_agent_planning\");\n\t\tconst allocations = getSubagentAllocations(chunks);\n\n\t\tif (allocations.length > 0) {\n\t\t\treturn (\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t<Loader2 size={14} className=\"animate-spin text-gray-400\" />\n\t\t\t\t\t<span className=\"text-sm text-gray-500\">Allocating agents: {allocations.map((a) => a.name).join(\", \")}</span>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t\tif (isPlanning) {\n\t\t\treturn (\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t<Loader2 size={14} className=\"animate-spin text-gray-400\" />\n\t\t\t\t\t<span className=\"text-sm text-gray-500\">Planning agent allocation...</span>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t\treturn null;\n\t}\n\n\tconst items: TimelineItemData[] = subagentList.map((agent, index) => ({\n\t\tid: agent.id || `agent-${index}`,\n\t\tstatus:\n\t\t\tagent.status === \"running\"\n\t\t\t\t? \"running\"\n\t\t\t\t: agent.status === \"completed\"\n\t\t\t\t\t? \"completed\"\n\t\t\t\t\t: agent.status === \"failed\"\n\t\t\t\t\t\t? \"failed\"\n\t\t\t\t\t\t: \"pending\",\n\t\tcontent: (\n\t\t\t<div className=\"flex items-center gap-2 min-w-0 flex-1\">\n\t\t\t\t<span className=\"text-sm font-medium\">{agent.name}</span>\n\t\t\t\t<span className={cn(\"text-sm flex-1 truncate\", agent.status === \"failed\" ? \"text-red-500\" : \"text-gray-500\")}>\n\t\t\t\t\t{agent.status === \"failed\" && agent.error ? agent.error : agent.task}\n\t\t\t\t</span>\n\t\t\t\t{agent.status === \"completed\" && agent.executionTime != null && (\n\t\t\t\t\t<span className=\"text-xs text-gray-400 shrink-0\">{agent.executionTime.toFixed(1)}s</span>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t),\n\t}));\n\n\treturn (\n\t\t<div className=\"space-y-2\">\n\t\t\t<span className=\"text-sm text-gray-500\">{status.running === 0 ? \"Agents:\" : \"Running agents:\"}</span>\n\t\t\t<Timeline items={items} badgeSize={16} />\n\t\t\t{status.isSynthesizing && (\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t<Sparkle size={14} className=\"text-gray-500\" />\n\t\t\t\t\t<span className=\"text-sm text-gray-500\">Synthesizing results...</span>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nfunction ClaudeSdkChunksRenderer({ chunks }: { chunks: StreamingChunk[] }) {\n\treturn (\n\t\t<div className=\"space-y-2\">\n\t\t\t{chunks.map((chunk, index) => {\n\t\t\t\tif (chunk.type === \"subagent\" && chunk.subagentData)\n\t\t\t\t\treturn <SubagentPanel key={`subagent-${chunk.subagentData.subagentId}-${index}`} chunk={chunk} />;\n\t\t\t\tif (chunk.type === \"file_operation\" && chunk.fileOperationData)\n\t\t\t\t\treturn <FileOperationPreview key={`file-op-${chunk.fileOperationData.toolUseId}-${index}`} chunk={chunk} />;\n\t\t\t\tif (chunk.type === \"terminal\" && chunk.terminalData)\n\t\t\t\t\treturn <TerminalOutput key={`terminal-${chunk.terminalData.toolUseId}-${index}`} chunk={chunk} />;\n\t\t\t\tif (chunk.type === \"search_results\" && chunk.searchResultsData)\n\t\t\t\t\treturn <SearchResultsView key={`search-${chunk.searchResultsData.toolUseId}-${index}`} chunk={chunk} />;\n\t\t\t\tif (chunk.type === \"web_operation\" && chunk.webOperationData)\n\t\t\t\t\treturn <WebOperationPreview key={`web-op-${chunk.webOperationData.toolUseId}-${index}`} chunk={chunk} />;\n\t\t\t\tif (chunk.claudeToolData)\n\t\t\t\t\treturn <ClaudeToolPreview key={`claude-tool-${chunk.claudeToolData.toolUseId}-${index}`} chunk={chunk} />;\n\t\t\t\treturn null;\n\t\t\t})}\n\t\t</div>\n\t);\n}\n\nexport interface ReasoningPanelProps {\n\t/** Whether currently streaming */\n\tisStreaming?: boolean;\n\t/** Streaming chunks */\n\tchunks?: StreamingChunk[];\n\t/** Execution plan for Plan & Execute mode */\n\tplan?: PlanData;\n\t/** Execution timeline (completed messages) */\n\texecutionTimeline?: any[];\n\t/** User message timestamp for duration calculation */\n\tuserMessageTimestamp?: number;\n\t/** Total execution time in seconds */\n\texecutionTime?: number;\n\t/** Whether expanded by default */\n\tdefaultExpanded?: boolean;\n\t/** Controlled expanded state */\n\texpanded?: boolean;\n\t/** Callback when expanded state changes */\n\tonExpandedChange?: (expanded: boolean) => void;\n\t/** Additional class names */\n\tclassName?: string;\n}\n\nfunction formatDuration(seconds: number): string {\n\tif (seconds < 1) return `${Math.round(seconds * 1000)}ms`;\n\treturn `${seconds.toFixed(1)}s`;\n}\n\nexport function ReasoningPanel({\n\tisStreaming = false,\n\tchunks = [],\n\tplan,\n\texecutionTimeline = [],\n\tuserMessageTimestamp,\n\texecutionTime,\n\tdefaultExpanded = false,\n\texpanded: controlledExpanded,\n\tonExpandedChange,\n\tclassName,\n}: ReasoningPanelProps) {\n\tconst [localExpanded, setLocalExpanded] = useState(defaultExpanded);\n\tconst { display: liveElapsed, finalSeconds: wallClockSeconds } = useLiveStreamDuration(isStreaming);\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\n\tuseEffect(() => {\n\t\tinjectBeamerKeyframes(containerRef.current);\n\t}, []);\n\n\t// Scroll lock: prevent viewport jump when expanding/collapsing\n\tconst lockScroll = useScrollLock(containerRef, 300);\n\n\tconst isExpanded = controlledExpanded ?? localExpanded;\n\tconst setExpanded = useCallback(\n\t\t(value: boolean) => {\n\t\t\tlockScroll();\n\t\t\tsetLocalExpanded(value);\n\t\t\tonExpandedChange?.(value);\n\t\t},\n\t\t[lockScroll, onExpandedChange],\n\t);\n\n\t// Convert streaming chunks to Events\n\tconst streamingEvents = useMemo(() => {\n\t\tif (isStreaming) {\n\t\t\treturn chunks\n\t\t\t\t.map((chunk, index) => convertChunkToEvent(chunk, index))\n\t\t\t\t.filter((event): event is Event => event !== null);\n\t\t}\n\t\treturn [];\n\t}, [isStreaming, chunks]);\n\n\t// Convert timeline to Events for completed messages\n\tconst completedEvents = useMemo(() => {\n\t\tif (!isStreaming && (executionTimeline.length > 0 || chunks.length > 0)) {\n\t\t\treturn chunks\n\t\t\t\t.map((chunk, index) => convertChunkToEvent(chunk, index))\n\t\t\t\t.filter((event): event is Event => event !== null);\n\t\t}\n\t\treturn [];\n\t}, [isStreaming, executionTimeline, chunks]);\n\n\t// Convert timeline to chunks for PlanTimeline\n\tconst completedChunks = useMemo((): StreamingChunk[] => {\n\t\tif (!isStreaming && executionTimeline.length > 0) return convertTimelineToChunks(executionTimeline);\n\t\treturn [];\n\t}, [isStreaming, executionTimeline]);\n\n\t// Aggregate plan data from planning chunks\n\tconst aggregatedPlanData = useMemo(() => {\n\t\tif (!isStreaming) return null;\n\n\t\tconst planningChunk = chunks.find((c) => c.planData !== undefined);\n\t\tif (!planningChunk?.planData) return null;\n\n\t\tconst planClone = { ...planningChunk.planData };\n\t\tconst subtasks = [...(planClone.subtasks || [])];\n\t\tlet completedCount = 0;\n\t\tlet failedCount = 0;\n\n\t\tchunks.forEach((chunk) => {\n\t\t\tif (chunk.type === \"parallel_subtask_start\" && chunk.subtaskId !== undefined) {\n\t\t\t\tconst idx = subtasks.findIndex((st) => String(st.id) === String(chunk.subtaskId));\n\t\t\t\tif (idx !== -1) subtasks[idx] = { ...subtasks[idx], status: \"running\" };\n\t\t\t} else if (chunk.type === \"parallel_subtask_complete\" && chunk.subtaskId !== undefined) {\n\t\t\t\tconst idx = subtasks.findIndex((st) => String(st.id) === String(chunk.subtaskId));\n\t\t\t\tif (idx !== -1) {\n\t\t\t\t\tconst st = { ...subtasks[idx] };\n\t\t\t\t\tif (chunk.parallelSubtaskData?.success === false || chunk.success === false) {\n\t\t\t\t\t\tst.status = \"failed\";\n\t\t\t\t\t\tst.error = chunk.parallelSubtaskData?.error;\n\t\t\t\t\t\tfailedCount++;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tst.status = \"completed\";\n\t\t\t\t\t\tst.result = chunk.parallelSubtaskData?.result;\n\t\t\t\t\t\tst.execution_time = chunk.parallelSubtaskData?.executionTime;\n\t\t\t\t\t\tcompletedCount++;\n\t\t\t\t\t}\n\t\t\t\t\tsubtasks[idx] = st;\n\t\t\t\t}\n\t\t\t} else if (chunk.type === \"subtask\" && chunk.subtaskId !== undefined) {\n\t\t\t\tconst idx = subtasks.findIndex((st) => String(st.id) === String(chunk.subtaskId));\n\t\t\t\tif (idx !== -1) {\n\t\t\t\t\tconst st = { ...subtasks[idx] };\n\t\t\t\t\tif (chunk.content.includes(\"✓ Completed\")) {\n\t\t\t\t\t\tst.status = \"completed\";\n\t\t\t\t\t\tif (chunk.subtaskData?.execution_time) st.execution_time = chunk.subtaskData.execution_time;\n\t\t\t\t\t\tcompletedCount++;\n\t\t\t\t\t} else if (chunk.content.includes(\"✗ Failed\")) {\n\t\t\t\t\t\tst.status = \"failed\";\n\t\t\t\t\t\tconst m = chunk.content.match(/✗ Failed: (.*)/);\n\t\t\t\t\t\tif (m) st.error = m[1];\n\t\t\t\t\t\tfailedCount++;\n\t\t\t\t\t} else if (chunk.content.includes(\"→ **Subtask\")) {\n\t\t\t\t\t\tst.status = \"running\";\n\t\t\t\t\t}\n\t\t\t\t\tsubtasks[idx] = st;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tplanClone.subtasks = subtasks;\n\t\tplanClone.completed_subtasks = completedCount;\n\t\tplanClone.failed_subtasks = failedCount;\n\t\tplanClone.progress_percentage = (completedCount / planClone.total_subtasks) * 100;\n\t\treturn planClone;\n\t}, [isStreaming, chunks]);\n\n\t// Calculate total execution time\n\tconst totalExecutionTime = useMemo(() => {\n\t\t// Explicit prop takes highest priority (persisted wall-clock from streaming)\n\t\tif (executionTime && executionTime > 0) return executionTime;\n\n\t\tif (!isStreaming) {\n\t\t\tif (plan?.subtasks) return plan.subtasks.reduce((sum, st) => sum + (st.execution_time || 0), 0);\n\t\t\tif (executionTimeline.length > 0) {\n\t\t\t\tconst lastEvent = executionTimeline[executionTimeline.length - 1];\n\t\t\t\tif (userMessageTimestamp && lastEvent.timestamp) {\n\t\t\t\t\tconst diff = lastEvent.timestamp - userMessageTimestamp;\n\t\t\t\t\tif (diff > 0) return diff;\n\t\t\t\t}\n\t\t\t\tif (executionTimeline.length > 1) {\n\t\t\t\t\tconst firstEvent = executionTimeline[0];\n\t\t\t\t\tif (firstEvent.timestamp && lastEvent.timestamp) {\n\t\t\t\t\t\tconst diff = lastEvent.timestamp - firstEvent.timestamp;\n\t\t\t\t\t\tif (diff > 0) return diff;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn 0;\n\t}, [isStreaming, plan, executionTimeline, userMessageTimestamp, executionTime]);\n\n\t// Don't render if no content\n\tif (!isStreaming) {\n\t\tconst hasContent = plan || executionTimeline.length > 0 || chunks.length > 0;\n\t\tif (!hasContent) return null;\n\t\tif (hasContent && completedEvents.length === 0 && !plan && executionTimeline.length === 0) return null;\n\t}\n\n\t// Detect modes\n\tconst lastChunk = chunks.length > 0 ? chunks[chunks.length - 1] : null;\n\tconst isToolAction = lastChunk?.type === \"tool\" || !!lastChunk?.toolName;\n\tconst isPlanningAction = lastChunk?.type === \"planning\";\n\tconst isParallelMode = hasParallelExecutionChunks(chunks);\n\tconst waveStatus = isParallelMode ? getWaveExecutionStatus(chunks) : null;\n\tconst isClaudeSdkMode = hasClaudeSdkChunks(chunks);\n\tconst isMultiAgentMode = hasMultiAgentChunks(chunks);\n\tconst multiAgentStatus = isMultiAgentMode ? getMultiAgentStatus(chunks) : null;\n\n\t// Mode-specific label\n\tconst getLabel = () => {\n\t\tif (!isStreaming) {\n\t\t\tif (totalExecutionTime > 0) return `Thought for ${formatDuration(totalExecutionTime)}`;\n\t\t\t// Fallback: use wall-clock elapsed time tracked by the component\n\t\t\tif (wallClockSeconds > 0) return `Thought for ${formatDuration(wallClockSeconds)}`;\n\t\t\tif (chunks.length > 0) return \"Thought for a few seconds\";\n\t\t\treturn \"Thought for a few seconds\";\n\t\t}\n\n\t\t// Multi-agent mode\n\t\tif (isMultiAgentMode && multiAgentStatus) {\n\t\t\tconst { running, completed, failed, isSynthesizing } = multiAgentStatus;\n\t\t\tif (isSynthesizing) return \"Synthesizing results...\";\n\t\t\tif (lastChunk?.type === \"multi_agent_planning\") return \"Planning subagent allocation...\";\n\t\t\tif (lastChunk?.type === \"subagent_start\" && lastChunk?.subagentInfo)\n\t\t\t\treturn `${lastChunk.subagentInfo.name}: ${lastChunk.subagentInfo.task?.slice(0, 30) || \"working\"}...`;\n\t\t\tif (lastChunk?.type === \"subagent_complete\" && lastChunk?.subagentInfo)\n\t\t\t\treturn `${lastChunk.subagentInfo.name} complete`;\n\t\t\tif (lastChunk?.type === \"subagent_failed\" && lastChunk?.subagentInfo)\n\t\t\t\treturn `${lastChunk.subagentInfo.name} failed`;\n\t\t\tconst total = running + completed + failed;\n\t\t\tif (running > 0) return `${running} subagent${running > 1 ? \"s\" : \"\"} running (${completed}/${total} done)`;\n\t\t\tif (total > 0) return `Multi-agent execution (${completed}/${total} complete)`;\n\t\t}\n\n\t\t// Claude SDK mode\n\t\tif (isClaudeSdkMode) {\n\t\t\tif (lastChunk?.type === \"subagent\" && lastChunk?.subagentData)\n\t\t\t\treturn `${lastChunk.subagentData.subagentType}: ${lastChunk.subagentData.description}`;\n\t\t\tif (lastChunk?.type === \"file_operation\" && lastChunk?.fileOperationData) {\n\t\t\t\tconst op = lastChunk.fileOperationData.operation;\n\t\t\t\tconst file = lastChunk.fileOperationData.filePath.split(\"/\").pop();\n\t\t\t\treturn `${op === \"read\" ? \"Reading\" : op === \"edit\" ? \"Editing\" : \"Writing\"} ${file}`;\n\t\t\t}\n\t\t\tif (lastChunk?.type === \"terminal\" && lastChunk?.terminalData) {\n\t\t\t\tconst cmd = lastChunk.terminalData.command;\n\t\t\t\treturn cmd.length > 40 ? `$ ${cmd.slice(0, 37)}...` : `$ ${cmd}`;\n\t\t\t}\n\t\t\tif (lastChunk?.type === \"search_results\" && lastChunk?.searchResultsData)\n\t\t\t\treturn `${lastChunk.searchResultsData.tool}: ${lastChunk.searchResultsData.pattern}`;\n\t\t\tif (lastChunk?.type === \"web_operation\" && lastChunk?.webOperationData) {\n\t\t\t\treturn lastChunk.webOperationData.operation === \"search\"\n\t\t\t\t\t? `Searching: ${lastChunk.webOperationData.query}`\n\t\t\t\t\t: `Fetching: ${lastChunk.webOperationData.url?.slice(0, 40)}...`;\n\t\t\t}\n\t\t}\n\n\t\t// Parallel mode\n\t\tif (isParallelMode && waveStatus) {\n\t\t\tconst { currentWave, totalWaves, parallelCount, activeSubtasks, completedSubtasks } = waveStatus;\n\t\t\tif (lastChunk?.type === \"wave_start\")\n\t\t\t\treturn `Wave ${currentWave + 1}/${totalWaves}: ${parallelCount} parallel subtasks`;\n\t\t\tif (lastChunk?.type === \"wave_complete\")\n\t\t\t\treturn `Wave ${currentWave + 1} complete (${completedSubtasks.length} done)`;\n\t\t\tif (lastChunk?.type === \"parallel_subtask_start\" && lastChunk?.parallelSubtaskData?.description) {\n\t\t\t\tconst desc = lastChunk.parallelSubtaskData.description;\n\t\t\t\treturn desc.length > 40 ? `${desc.slice(0, 37)}...` : desc;\n\t\t\t}\n\t\t\tif (activeSubtasks.length > 0)\n\t\t\t\treturn `Wave ${currentWave + 1}/${totalWaves}: ${activeSubtasks.length} running...`;\n\t\t\treturn `Parallel execution (Wave ${currentWave + 1}/${totalWaves})`;\n\t\t}\n\n\t\t// Default\n\t\tif (lastChunk?.toolDescription) return lastChunk.toolDescription;\n\t\tif (lastChunk?.toolName) return lastChunk.toolName;\n\t\tswitch (lastChunk?.type) {\n\t\t\tcase \"planning\":\n\t\t\t\treturn \"Planning...\";\n\t\t\tcase \"thinking\":\n\t\t\t\treturn \"Thinking...\";\n\t\t\tcase \"tool\":\n\t\t\t\treturn lastChunk.toolName || \"Using tool...\";\n\t\t\tcase \"subtask\":\n\t\t\t\treturn `Executing subtask ${lastChunk.subtaskId || \"\"}...`;\n\t\t\tcase \"observation\":\n\t\t\t\treturn \"Analyzing results...\";\n\t\t\tcase \"progress\":\n\t\t\t\treturn \"Working...\";\n\t\t\tcase \"wave_start\":\n\t\t\t\treturn `Starting parallel execution...`;\n\t\t\tcase \"wave_complete\":\n\t\t\t\treturn \"Parallel wave complete\";\n\t\t\tcase \"parallel_subtask_start\":\n\t\t\t\treturn `Running parallel subtask...`;\n\t\t\tcase \"parallel_subtask_complete\":\n\t\t\t\treturn \"Parallel subtask complete\";\n\t\t\tdefault:\n\t\t\t\treturn \"Thinking...\";\n\t\t}\n\t};\n\n\t// Mode-specific icon\n\tconst getIcon = () => {\n\t\tif (isMultiAgentMode) return <Users size={14} />;\n\t\tif (isClaudeSdkMode) {\n\t\t\tif (lastChunk?.type === \"subagent\") return <GitBranch size={14} />;\n\t\t\tif (lastChunk?.type === \"file_operation\") return <FileText size={14} />;\n\t\t\tif (lastChunk?.type === \"terminal\") return <Terminal size={14} />;\n\t\t\tif (lastChunk?.type === \"search_results\") return <Search size={14} />;\n\t\t\tif (lastChunk?.type === \"web_operation\") return <Globe size={14} />;\n\t\t\treturn <Sparkle size={14} />;\n\t\t}\n\t\tif (isParallelMode) return <Zap size={14} />;\n\t\tif (isToolAction) return <Wrench size={14} />;\n\t\tif (isPlanningAction) return <ListTodo size={14} />;\n\t\treturn <Sparkle size={14} />;\n\t};\n\n\t// Determine what to show expanded\n\tconst shouldShowPlanTimeline = (planData: PlanData | null | undefined) => {\n\t\treturn planData?.subtasks && planData.subtasks.length >= 2;\n\t};\n\n\tconst activePlan = isStreaming ? aggregatedPlanData : plan;\n\tconst showPlanTimeline = shouldShowPlanTimeline(activePlan);\n\n\treturn (\n\t\t<div ref={containerRef} className={cn(\"max-w-full\", className)}>\n\t\t\t{/* Clickable header: icon + label + optional timer - matches on-platform MUI approach */}\n\t\t\t<div\n\t\t\t\tonClick={() => setExpanded(!isExpanded)}\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\tdisplay: \"inline-flex\",\n\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\tgap: 6,\n\t\t\t\t\tpadding: \"4px 6px\",\n\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\tborderRadius: 8,\n\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\ttransition: \"opacity 0.2s\",\n\t\t\t\t\t...(!isStreaming && { opacity: 0.6 }),\n\t\t\t\t}}>\n\t\t\t\t{isStreaming && <div style={beamerBarStyle} />}\n\t\t\t\t<span className={cn(\"flex items-center text-gray-500\")}>{isStreaming ? getIcon() : <Sparkle size={14} />}</span>\n\t\t\t\t<span className={cn(\"text-sm font-normal text-gray-500 text-[var(--chat-text-subtle)]\")}>{getLabel()}</span>\n\t\t\t\t{isStreaming && parseInt(liveElapsed) > 0 && (\n\t\t\t\t\t<span className=\"text-gray-500 font-normal tabular-nums text-sm\">{liveElapsed}s</span>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{isExpanded && (\n\t\t\t\t<div className=\"mt-3 animate-fade-in\">\n\t\t\t\t\t{isStreaming ? (\n\t\t\t\t\t\tisMultiAgentMode ? (\n\t\t\t\t\t\t\t<MultiAgentStatusPanel chunks={chunks} />\n\t\t\t\t\t\t) : isClaudeSdkMode ? (\n\t\t\t\t\t\t\t<ClaudeSdkChunksRenderer chunks={chunks} />\n\t\t\t\t\t\t) : showPlanTimeline && activePlan ? (\n\t\t\t\t\t\t\t<PlanTimeline plan={activePlan} streamingChunks={chunks} />\n\t\t\t\t\t\t) : aggregatedPlanData?.subtasks?.length === 1 ? (\n\t\t\t\t\t\t\t<EventTimeline events={streamingEvents} />\n\t\t\t\t\t\t) : aggregatedPlanData?.subtasks?.length === 0 ? null : (\n\t\t\t\t\t\t\t<EventTimeline events={streamingEvents} />\n\t\t\t\t\t\t)\n\t\t\t\t\t) : // Completed mode\n\t\t\t\t\tplan ? (\n\t\t\t\t\t\tplan.subtasks?.length === 0 ? null : plan.subtasks?.length === 1 ? (\n\t\t\t\t\t\t\t<EventTimeline events={completedEvents} />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<PlanTimeline plan={plan} streamingChunks={completedChunks} />\n\t\t\t\t\t\t)\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<EventTimeline events={completedEvents} />\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import { forwardRef } from \"react\";\nimport { StreamingText as StreamingTextPrimitive } from \"../primitives\";\nimport { MarkdownContent, type MarkdownContentProps } from \"./MarkdownContent\";\nimport { cn } from \"../utils/cn\";\n\nexport interface StreamingTextProps {\n /** The content to display */\n content: string;\n /** Whether the text is currently streaming */\n isStreaming?: boolean;\n /** Whether to render as markdown */\n renderMarkdown?: boolean;\n /** Additional CSS classes */\n className?: string;\n /** Base font size multiplier (passed to MarkdownContent) */\n baselineFontSize?: number;\n /** Props forwarded to MarkdownContent */\n markdownProps?: Partial<MarkdownContentProps>;\n}\n\n/**\n * Styled StreamingText that renders content directly as tokens arrive.\n *\n * Text appears instantly (no artificial typewriter delay), matching\n * platform-standard behavior. A blinking cursor is shown during streaming.\n */\nexport const StreamingText = forwardRef<HTMLDivElement, StreamingTextProps>(\n (\n {\n content,\n isStreaming = false,\n renderMarkdown = true,\n className,\n baselineFontSize,\n markdownProps,\n },\n ref,\n ) => {\n return (\n <StreamingTextPrimitive\n ref={ref}\n content={content}\n isStreaming={isStreaming}\n showCursor={false}\n className={cn(\"relative\", className)}\n >\n {renderMarkdown ? (\n <MarkdownContent\n baselineFontSize={baselineFontSize}\n {...markdownProps}\n >\n {content}\n </MarkdownContent>\n ) : (\n <span className=\"whitespace-pre-wrap\">{content}</span>\n )}\n </StreamingTextPrimitive>\n );\n },\n);\n\nStreamingText.displayName = \"StreamingText\";\n","import { forwardRef, useState, type ReactNode } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport {\n Send,\n Navigation,\n Copy,\n Mail,\n Search,\n ExternalLink,\n Zap,\n ArrowRight,\n Loader2,\n} from \"lucide-react\";\nimport { cn } from \"../utils/cn\";\nimport type { SuggestedAction, SuggestedActionType } from \"../types\";\n\nexport interface SuggestedActionsProps {\n /** List of suggested actions */\n actions: SuggestedAction[];\n /** Callback when an action is selected */\n onSelect?: (action: SuggestedAction) => void | Promise<void>;\n /** Additional CSS classes */\n className?: string;\n /** Whether to show type-specific icons */\n showIcons?: boolean;\n /** Disable all action buttons */\n disabled?: boolean;\n}\n\nconst ACTION_ICONS: Record<SuggestedActionType, ReactNode> = {\n send_message: <Send size={14} />,\n navigate: <Navigation size={14} />,\n copy_text: <Copy size={14} />,\n compose_email: <Mail size={14} />,\n search_emails: <Search size={14} />,\n open_modal: <ExternalLink size={14} />,\n api_call: <Zap size={14} />,\n};\n\nfunction getActionIcon(type?: SuggestedActionType): ReactNode {\n if (!type) return <ArrowRight size={14} />;\n return ACTION_ICONS[type] || <ArrowRight size={14} />;\n}\n\n/**\n * Styled SuggestedActions with type-specific icons, loading states, and staggered animation.\n */\nexport const SuggestedActions = forwardRef<HTMLDivElement, SuggestedActionsProps>(\n ({ actions, onSelect, className, showIcons = true, disabled = false }, ref) => {\n const [loadingIndex, setLoadingIndex] = useState<number | null>(null);\n\n if (actions.length === 0) return null;\n\n const handleAction = async (action: SuggestedAction, index: number) => {\n if (!onSelect || loadingIndex !== null) return;\n setLoadingIndex(index);\n try {\n await onSelect(action);\n } finally {\n setLoadingIndex(null);\n }\n };\n\n return (\n <div ref={ref} role=\"group\" aria-label=\"Suggested actions\" className={cn(\"flex flex-wrap gap-2\", className)}>\n <AnimatePresence>\n {actions.map((action, i) => {\n const isLoading = loadingIndex === i;\n const isDisabled = disabled || loadingIndex !== null;\n return (\n <motion.button\n key={action.id}\n type=\"button\"\n initial={{ opacity: 0, y: 4 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -4 }}\n transition={{ duration: 0.2, delay: i * 0.05 }}\n disabled={isDisabled}\n onClick={() => handleAction(action, i)}\n className={cn(\n \"inline-flex items-center gap-1.5\",\n \"px-3 py-1.5 rounded-lg\",\n \"text-sm font-medium\",\n \"border border-gray-200 dark:border-gray-700\",\n \"bg-white dark:bg-gray-800\",\n \"text-gray-700 dark:text-gray-300\",\n \"opacity-80 hover:opacity-100\",\n \"hover:border-gray-300 dark:hover:border-gray-600\",\n \"hover:bg-gray-50 dark:hover:bg-gray-750\",\n \"hover:-translate-y-px\",\n \"active:translate-y-0\",\n \"transition-all duration-200\",\n \"focus:outline-none focus:ring-2 focus:ring-blue-500/20\",\n \"disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:translate-y-0\"\n )}\n >\n {isLoading ? (\n <Loader2 size={14} className=\"animate-spin\" />\n ) : (\n showIcons && <span className=\"text-gray-400 dark:text-gray-500\">{getActionIcon(action.type)}</span>\n )}\n {action.label}\n </motion.button>\n );\n })}\n </AnimatePresence>\n </div>\n );\n }\n);\n\nSuggestedActions.displayName = \"SuggestedActions\";\n","import {\n LineChart, Line, BarChart, Bar, PieChart, Pie, AreaChart, Area,\n ScatterChart, Scatter, XAxis, YAxis, CartesianGrid, Tooltip, Legend,\n ResponsiveContainer, Cell,\n} from \"recharts\";\nimport type { ChartVisualizationData, ChartDataType, VisualizationConfig } from \"../../types\";\n\nexport interface ChartVisualizationProps {\n data: ChartVisualizationData;\n config?: VisualizationConfig;\n isStreaming?: boolean;\n}\n\nconst DEFAULT_COLORS = [\n \"#3B82F6\", \"#10B981\", \"#F59E0B\", \"#EF4444\",\n \"#8B5CF6\", \"#EC4899\", \"#06B6D4\", \"#F97316\",\n];\n\nexport function ChartVisualization({ data, config, isStreaming = false }: ChartVisualizationProps) {\n const { chartType, series, xAxis, yAxis } = data;\n const colors = config?.colors || DEFAULT_COLORS;\n const height = config?.height || 300;\n const showLegend = config?.legend !== false;\n const showGrid = config?.grid !== false;\n const showTooltip = config?.tooltip !== false;\n const animate = config?.animate !== false && !isStreaming;\n const stacked = config?.stacked || false;\n\n const transformDataForRecharts = () => {\n if (chartType === \"pie\") {\n const pieData = series[0]?.data || [];\n return pieData.map((item: any, idx: number) => ({\n name: item.name || item.x || `Item ${idx + 1}`,\n value: item.value ?? item.y ?? 0,\n }));\n }\n const dataMap = new Map<string | number, Record<string, any>>();\n series.forEach((s) => {\n s.data.forEach((point: any) => {\n const xVal = point.x ?? point.name;\n if (!dataMap.has(xVal)) dataMap.set(xVal, { x: xVal });\n dataMap.get(xVal)![s.name] = point.y ?? point.value ?? 0;\n });\n });\n return Array.from(dataMap.values());\n };\n\n const chartData = transformDataForRecharts();\n const commonProps = { data: chartData, margin: { top: 10, right: 30, left: 0, bottom: 0 } };\n\n const axisStyle = { fontSize: 12 };\n const tooltipStyle = {\n backgroundColor: \"#fff\",\n border: \"1px solid #e5e7eb\",\n borderRadius: 8,\n };\n\n const renderChart = () => {\n switch (chartType as ChartDataType) {\n case \"line\":\n return (\n <LineChart {...commonProps}>\n {showGrid && <CartesianGrid strokeDasharray=\"3 3\" stroke=\"#e5e7eb\" />}\n <XAxis dataKey=\"x\" {...axisStyle} tickLine={false} padding={{ left: 10, right: 10 }} />\n <YAxis {...axisStyle} tickLine={false} width={40} />\n {showTooltip && <Tooltip contentStyle={tooltipStyle} />}\n {showLegend && <Legend />}\n {series.map((s, idx) => (\n <Line key={s.name} type=\"monotone\" dataKey={s.name} stroke={s.color || colors[idx % colors.length]} strokeWidth={2} dot={false} activeDot={{ r: 4 }} isAnimationActive={animate} />\n ))}\n </LineChart>\n );\n case \"bar\":\n return (\n <BarChart {...commonProps}>\n {showGrid && <CartesianGrid strokeDasharray=\"3 3\" stroke=\"#e5e7eb\" />}\n <XAxis dataKey=\"x\" {...axisStyle} tickLine={false} padding={{ left: 10, right: 10 }} />\n <YAxis {...axisStyle} tickLine={false} width={40} />\n {showTooltip && <Tooltip contentStyle={tooltipStyle} />}\n {showLegend && <Legend />}\n {series.map((s, idx) => (\n <Bar key={s.name} dataKey={s.name} fill={s.color || colors[idx % colors.length]} stackId={stacked ? \"stack\" : undefined} isAnimationActive={animate} radius={[4, 4, 0, 0]} />\n ))}\n </BarChart>\n );\n case \"area\":\n return (\n <AreaChart {...commonProps}>\n {showGrid && <CartesianGrid strokeDasharray=\"3 3\" stroke=\"#e5e7eb\" />}\n <XAxis dataKey=\"x\" {...axisStyle} tickLine={false} padding={{ left: 10, right: 10 }} />\n <YAxis {...axisStyle} tickLine={false} width={40} />\n {showTooltip && <Tooltip contentStyle={tooltipStyle} />}\n {showLegend && <Legend />}\n {series.map((s, idx) => (\n <Area key={s.name} type=\"monotone\" dataKey={s.name} stroke={s.color || colors[idx % colors.length]} fill={s.color || colors[idx % colors.length]} fillOpacity={0.3} stackId={stacked ? \"stack\" : undefined} isAnimationActive={animate} />\n ))}\n </AreaChart>\n );\n case \"pie\":\n return (\n <PieChart>\n {showTooltip && <Tooltip contentStyle={tooltipStyle} />}\n {showLegend && <Legend />}\n <Pie data={chartData} dataKey=\"value\" nameKey=\"name\" cx=\"50%\" cy=\"50%\" outerRadius={Math.min(height, 300) / 3} isAnimationActive={animate} label={({ name, percent }) => `${name}: ${((percent ?? 0) * 100).toFixed(0)}%`} labelLine={false}>\n {chartData.map((_, idx) => <Cell key={`cell-${idx}`} fill={colors[idx % colors.length]} />)}\n </Pie>\n </PieChart>\n );\n case \"scatter\":\n return (\n <ScatterChart {...commonProps}>\n {showGrid && <CartesianGrid strokeDasharray=\"3 3\" stroke=\"#e5e7eb\" />}\n <XAxis dataKey=\"x\" type=\"number\" {...axisStyle} tickLine={false} name={xAxis?.label} padding={{ left: 10, right: 10 }} />\n <YAxis {...axisStyle} tickLine={false} name={yAxis?.label} width={40} />\n {showTooltip && <Tooltip contentStyle={tooltipStyle} />}\n {showLegend && <Legend />}\n {series.map((s, idx) => (\n <Scatter key={s.name} name={s.name} data={s.data.map((p: any) => ({ x: p.x, y: p.y }))} fill={s.color || colors[idx % colors.length]} isAnimationActive={animate} />\n ))}\n </ScatterChart>\n );\n default:\n return null;\n }\n };\n\n return (\n <div className=\"w-full\" style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n {renderChart() || <></>}\n </ResponsiveContainer>\n </div>\n );\n}\n","import { useMemo, useState } from \"react\";\nimport { Check, X, ChevronUp, ChevronDown } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport type { TableVisualizationData, TableColumn, TableColumnType, VisualizationConfig } from \"../../types\";\n\nexport interface TableVisualizationProps {\n data: TableVisualizationData;\n config?: VisualizationConfig;\n isStreaming?: boolean;\n}\n\ntype Order = \"asc\" | \"desc\";\n\nconst badgeColors: Record<string, string> = {\n active: \"bg-green-100 text-green-700\",\n completed: \"bg-green-100 text-green-700\",\n success: \"bg-green-100 text-green-700\",\n enabled: \"bg-green-100 text-green-700\",\n pending: \"bg-yellow-100 text-yellow-700\",\n processing: \"bg-yellow-100 text-yellow-700\",\n in_progress: \"bg-yellow-100 text-yellow-700\",\n failed: \"bg-red-100 text-red-700\",\n error: \"bg-red-100 text-red-700\",\n disabled: \"bg-red-100 text-red-700\",\n inactive: \"bg-gray-100 text-gray-700\",\n draft: \"bg-gray-100 text-gray-700\",\n};\n\nfunction formatCellValue(value: unknown, column: TableColumn): React.ReactNode {\n if (value === null || value === undefined) return <span className=\"text-gray-400\">-</span>;\n\n const type = column.type || \"string\";\n\n switch (type as TableColumnType) {\n case \"number\":\n return typeof value === \"number\" ? value.toLocaleString() : String(value);\n case \"currency\":\n return typeof value === \"number\"\n ? new Intl.NumberFormat(\"en-US\", { style: \"currency\", currency: \"USD\" }).format(value)\n : String(value);\n case \"date\":\n try { return new Date(value as string | number).toLocaleDateString(); }\n catch { return String(value); }\n case \"badge\": {\n const strValue = String(value).toLowerCase().replace(/\\s+/g, \"_\");\n const colorClass = badgeColors[strValue] || \"bg-gray-100 text-gray-700\";\n return <span className={cn(\"inline-block px-2 py-0.5 rounded-full text-xs font-medium\", colorClass)}>{String(value)}</span>;\n }\n case \"link\":\n return <a href={String(value)} target=\"_blank\" rel=\"noopener noreferrer\" className=\"text-blue-500 hover:underline\">{String(value)}</a>;\n case \"boolean\":\n return value ? <Check size={18} className=\"text-green-500\" /> : <X size={18} className=\"text-gray-400\" />;\n case \"progress\": {\n const numValue = typeof value === \"number\" ? value : parseFloat(String(value));\n return (\n <div className=\"flex items-center gap-2\">\n <div className=\"flex-1 h-2 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden\">\n <div className=\"h-full bg-blue-500 rounded-full\" style={{ width: `${Math.min(100, Math.max(0, numValue))}%` }} />\n </div>\n <span className=\"text-xs text-gray-500\">{numValue.toFixed(0)}%</span>\n </div>\n );\n }\n default:\n return String(value);\n }\n}\n\nfunction descendingComparator(a: Record<string, unknown>, b: Record<string, unknown>, orderBy: string): number {\n const aValue = a[orderBy];\n const bValue = b[orderBy];\n if (aValue == null) return 1;\n if (bValue == null) return -1;\n if (typeof aValue === \"number\" && typeof bValue === \"number\") return bValue - aValue;\n return String(bValue).localeCompare(String(aValue));\n}\n\nexport function TableVisualization({ data, config }: TableVisualizationProps) {\n const { columns, rows } = data;\n const sortable = config?.sortable !== false;\n const paginated = config?.paginated || false;\n const pageSize = config?.pageSize || 10;\n\n const [order, setOrder] = useState<Order>(\"asc\");\n const [orderBy, setOrderBy] = useState<string>(columns[0]?.key || \"\");\n const [page, setPage] = useState(0);\n\n const handleRequestSort = (key: string) => {\n setOrder(orderBy === key && order === \"asc\" ? \"desc\" : \"asc\");\n setOrderBy(key);\n };\n\n const processedRows = useMemo(() => {\n let sorted = [...rows];\n if (sortable && orderBy) {\n sorted.sort((a, b) => order === \"desc\" ? descendingComparator(a, b, orderBy) : -descendingComparator(a, b, orderBy));\n }\n if (paginated) sorted = sorted.slice(page * pageSize, (page + 1) * pageSize);\n return sorted;\n }, [rows, order, orderBy, page, pageSize, sortable, paginated]);\n\n const totalPages = Math.ceil(rows.length / pageSize);\n\n return (\n <div className=\"w-full overflow-x-auto\">\n <table className=\"min-w-full text-sm\">\n <thead>\n <tr>\n {columns.map((col) => (\n <th\n key={col.key}\n className={cn(\n \"px-3 py-2 font-semibold bg-gray-50 dark:bg-gray-800 whitespace-nowrap text-left\",\n sortable && \"cursor-pointer select-none hover:bg-gray-100 dark:hover:bg-gray-700\"\n )}\n style={{ width: col.width, textAlign: col.align || \"left\" }}\n onClick={() => sortable && handleRequestSort(col.key)}\n >\n <span className=\"inline-flex items-center gap-1\">\n {col.label}\n {sortable && orderBy === col.key && (\n order === \"asc\" ? <ChevronUp size={14} /> : <ChevronDown size={14} />\n )}\n </span>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {processedRows.map((row, rowIdx) => (\n <tr key={rowIdx} className=\"border-t border-gray-100 dark:border-gray-800 hover:bg-gray-50 dark:hover:bg-gray-800/50\">\n {columns.map((col) => (\n <td\n key={col.key}\n className=\"px-3 py-2 whitespace-nowrap max-w-[300px] overflow-hidden text-ellipsis\"\n style={{ textAlign: col.align || \"left\" }}\n >\n {formatCellValue(row[col.key], col)}\n </td>\n ))}\n </tr>\n ))}\n {processedRows.length === 0 && (\n <tr>\n <td colSpan={columns.length} className=\"px-3 py-8 text-center text-gray-400\">\n No data available\n </td>\n </tr>\n )}\n </tbody>\n </table>\n\n {paginated && rows.length > pageSize && (\n <div className=\"flex items-center justify-between px-3 py-2 border-t border-gray-200 dark:border-gray-700 text-sm\">\n <span className=\"text-gray-500\">\n {page * pageSize + 1}-{Math.min((page + 1) * pageSize, rows.length)} of {rows.length}\n </span>\n <div className=\"flex gap-1\">\n <button\n onClick={() => setPage(Math.max(0, page - 1))}\n disabled={page === 0}\n className=\"px-2 py-1 rounded hover:bg-gray-100 dark:hover:bg-gray-800 disabled:opacity-30\"\n >\n Prev\n </button>\n <button\n onClick={() => setPage(Math.min(totalPages - 1, page + 1))}\n disabled={page >= totalPages - 1}\n className=\"px-2 py-1 rounded hover:bg-gray-100 dark:hover:bg-gray-800 disabled:opacity-30\"\n >\n Next\n </button>\n </div>\n </div>\n )}\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { ChevronDown, ChevronUp, ExternalLink } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { MarkdownContent } from \"../MarkdownContent\";\nimport type { CardVisualizationData, CardSection, VisualizationConfig, VisualizationActionEvent } from \"../../types\";\n\nexport interface CardVisualizationProps {\n data: CardVisualizationData;\n config?: VisualizationConfig;\n isStreaming?: boolean;\n onAction?: (event: VisualizationActionEvent) => void;\n}\n\nexport function CardVisualization({ data, config, onAction }: CardVisualizationProps) {\n const { subtitle, imageUrl, sections, actions } = data;\n const collapsible = config?.collapsible || false;\n const initiallyCollapsed = config?.initiallyCollapsed || false;\n const [expanded, setExpanded] = useState(!initiallyCollapsed);\n\n const handleActionClick = (action: string) => {\n if (action.startsWith(\"http://\") || action.startsWith(\"https://\") || action.startsWith(\"/\")) {\n window.open(action, \"_blank\", \"noopener,noreferrer\");\n } else if (onAction) {\n onAction({ type: \"card_action\", action });\n } else {\n window.dispatchEvent(new CustomEvent(\"visualization-action\", { detail: { action } }));\n }\n };\n\n const renderSection = (section: CardSection, idx: number) => (\n <div key={idx} className={cn(idx < sections.length - 1 && \"mb-4\")}>\n {section.title && (\n <h4 className=\"font-semibold text-sm mb-2\">{section.title}</h4>\n )}\n {section.items && section.items.length > 0 && (\n <div className=\"space-y-1\">\n {section.items.map((item, itemIdx) => (\n <div key={itemIdx} className=\"flex justify-between items-start gap-4\">\n <span className=\"text-sm text-gray-500 shrink-0\">{item.label}</span>\n <span className=\"text-sm font-medium text-right\">{item.value}</span>\n </div>\n ))}\n </div>\n )}\n {section.content && <MarkdownContent>{section.content}</MarkdownContent>}\n </div>\n );\n\n const mainContent = (\n <>\n {imageUrl && (\n <img src={imageUrl} alt=\"\" className=\"w-full h-[140px] object-cover border-b border-gray-200 dark:border-gray-700\" />\n )}\n {subtitle && (\n <p className=\"text-sm text-gray-500 italic mb-4\">{subtitle}</p>\n )}\n {sections.map((section, idx) => (\n <div key={idx}>\n {renderSection(section, idx)}\n {idx < sections.length - 1 && <hr className=\"my-4 border-gray-200 dark:border-gray-700\" />}\n </div>\n ))}\n </>\n );\n\n return (\n <div className=\"w-full\">\n {collapsible && (\n <div\n className=\"flex items-center justify-between mb-2 cursor-pointer\"\n onClick={() => setExpanded(!expanded)}\n >\n <span className=\"text-sm text-gray-500\">{expanded ? \"Click to collapse\" : \"Click to expand\"}</span>\n <button className=\"p-1\">{expanded ? <ChevronUp size={18} /> : <ChevronDown size={18} />}</button>\n </div>\n )}\n {(!collapsible || expanded) && mainContent}\n {actions && actions.length > 0 && (\n <div className=\"flex gap-2 mt-4 pt-4 border-t border-gray-200 dark:border-gray-700\">\n {actions.map((action, idx) => (\n <button\n key={idx}\n onClick={() => handleActionClick(action.action)}\n className={cn(\n \"px-3 py-1.5 text-sm rounded-lg transition-colors\",\n action.variant === \"primary\" ? \"bg-blue-500 text-white hover:bg-blue-600\" :\n action.variant === \"text\" ? \"text-blue-500 hover:bg-blue-50\" :\n \"border border-gray-300 hover:bg-gray-50\"\n )}\n >\n {action.label}\n {action.action.startsWith(\"http\") && <ExternalLink size={14} className=\"inline ml-1\" />}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n}\n","import { ArrowUp, ChevronDown, Circle } from \"lucide-react\";\nimport { Area, AreaChart, ResponsiveContainer } from \"recharts\";\nimport { cn } from \"../../utils/cn\";\nimport type { KpiVisualizationData, KpiMetric, VisualizationConfig } from \"../../types\";\n\nexport interface KpiVisualizationProps {\n data: KpiVisualizationData;\n config?: VisualizationConfig;\n isStreaming?: boolean;\n}\n\nconst DEFAULT_COLORS = [\"#3B82F6\", \"#10B981\", \"#F59E0B\", \"#8B5CF6\"];\n\nfunction KpiMetricCard({ metric, color, animate }: { metric: KpiMetric; color: string; animate: boolean }) {\n const trendIcon = metric.trend === \"up\" ? <ArrowUp size={16} className=\"text-green-500\" /> :\n metric.trend === \"down\" ? <ChevronDown size={16} className=\"text-red-500\" /> :\n metric.trend === \"neutral\" ? <Circle size={14} className=\"text-gray-400\" /> : null;\n\n const trendColor = metric.trend === \"up\" ? \"text-green-500\" :\n metric.trend === \"down\" ? \"text-red-500\" : \"text-gray-500\";\n\n const sparklineData = metric.sparkline?.map((value, idx) => ({ value, idx }));\n\n return (\n <div className=\"p-4 rounded-lg border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 relative overflow-hidden\">\n {sparklineData && sparklineData.length > 0 && (\n <div className=\"absolute bottom-0 left-0 right-0 h-10 opacity-30\">\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <AreaChart data={sparklineData} margin={{ top: 0, right: 0, left: 0, bottom: 0 }}>\n <Area type=\"monotone\" dataKey=\"value\" stroke={metric.color || color} fill={metric.color || color} strokeWidth={1} isAnimationActive={animate} />\n </AreaChart>\n </ResponsiveContainer>\n </div>\n )}\n <div className=\"relative z-10\">\n <span className=\"text-xs text-gray-500 font-medium uppercase tracking-wider\">{metric.label}</span>\n <div className=\"flex items-baseline gap-1 mt-1\">\n <span className=\"text-2xl font-bold\">{metric.value}</span>\n {metric.unit && <span className=\"text-sm text-gray-500\">{metric.unit}</span>}\n </div>\n {(metric.trend || metric.change) && (\n <div className=\"flex items-center gap-1 mt-2\">\n {trendIcon}\n {metric.change && <span className={cn(\"text-sm font-medium\", trendColor)}>{metric.change}</span>}\n {metric.changeLabel && <span className=\"text-xs text-gray-500\">{metric.changeLabel}</span>}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport function KpiVisualization({ data, config, isStreaming = false }: KpiVisualizationProps) {\n const { metrics, layout = \"row\" } = data;\n const colors = config?.colors || DEFAULT_COLORS;\n const animate = config?.animate !== false && !isStreaming;\n const isGrid = layout === \"grid\";\n\n return (\n <div className={cn(\"w-full\", isGrid ? \"grid grid-cols-1 sm:grid-cols-2 gap-4\" : \"flex gap-4 flex-wrap\")}>\n {metrics.map((metric, idx) => (\n <div key={idx} className={cn(!isGrid && \"flex-1 min-w-[200px]\")}>\n <KpiMetricCard metric={metric} color={metric.color || colors[idx % colors.length]} animate={animate} />\n </div>\n ))}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { Check, Copy, FileText } from \"lucide-react\";\nimport { Prism as SyntaxHighlighter } from \"react-syntax-highlighter\";\nimport { oneDark } from \"react-syntax-highlighter/dist/esm/styles/prism\";\nimport type { CodePreviewVisualizationData, VisualizationConfig } from \"../../types\";\n\nexport interface CodePreviewVisualizationProps {\n data: CodePreviewVisualizationData;\n config?: VisualizationConfig;\n isStreaming?: boolean;\n}\n\nconst LANGUAGE_MAP: Record<string, string> = {\n js: \"javascript\", ts: \"typescript\", jsx: \"jsx\", tsx: \"tsx\",\n py: \"python\", rb: \"ruby\", rs: \"rust\", go: \"go\",\n java: \"java\", cpp: \"cpp\", c: \"c\", cs: \"csharp\",\n sh: \"bash\", bash: \"bash\", sql: \"sql\", html: \"html\",\n css: \"css\", json: \"json\", yaml: \"yaml\", yml: \"yaml\",\n xml: \"xml\", md: \"markdown\", graphql: \"graphql\",\n};\n\nexport function CodePreviewVisualization({ data }: CodePreviewVisualizationProps) {\n const { code, language, lineNumbers = true, highlightLines = [], startLine = 1 } = data;\n const [copied, setCopied] = useState(false);\n\n const normalizedLanguage = LANGUAGE_MAP[language.toLowerCase()] || language.toLowerCase();\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n } catch { /* noop */ }\n };\n\n useEffect(() => {\n if (copied) {\n const timer = setTimeout(() => setCopied(false), 2000);\n return () => clearTimeout(timer);\n }\n }, [copied]);\n\n const lineProps = (lineNumber: number) => {\n const style: React.CSSProperties = {};\n if (highlightLines.includes(lineNumber)) {\n style.backgroundColor = \"rgba(59, 130, 246, 0.1)\";\n style.display = \"block\";\n style.borderLeft = \"3px solid #3B82F6\";\n style.paddingLeft = \"8px\";\n style.marginLeft = \"-11px\";\n }\n return { style };\n };\n\n return (\n <div className=\"relative rounded-lg overflow-hidden border border-gray-200 dark:border-gray-700\">\n {/* Header */}\n <div className=\"flex items-center justify-between px-3 py-1.5 bg-gray-800 dark:bg-gray-900 border-b border-gray-700\">\n <div className=\"flex items-center gap-2\">\n <FileText size={16} className=\"text-gray-400\" />\n <span className=\"text-xs font-mono text-gray-400 lowercase\">{normalizedLanguage}</span>\n </div>\n <button\n onClick={handleCopy}\n className=\"flex items-center gap-1 px-2 py-1 text-xs rounded hover:bg-white/10 transition-colors text-gray-400 hover:text-gray-200\"\n title={copied ? \"Copied!\" : \"Copy code\"}\n >\n {copied ? <Check size={14} className=\"text-green-400\" /> : <Copy size={14} />}\n </button>\n </div>\n\n {/* Code */}\n <SyntaxHighlighter\n language={normalizedLanguage}\n style={oneDark}\n showLineNumbers={lineNumbers}\n startingLineNumber={startLine}\n wrapLines={true}\n lineProps={lineProps}\n customStyle={{\n margin: 0,\n borderRadius: 0,\n fontSize: \"0.8125rem\",\n lineHeight: \"1.6\",\n background: \"#1e1e1e\",\n }}\n codeTagProps={{\n style: { fontFamily: \"'Fira Code', 'JetBrains Mono', monospace\" },\n }}\n >\n {code.trim()}\n </SyntaxHighlighter>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport type { FormVisualizationData, FormField, VisualizationConfig, VisualizationActionEvent } from \"../../types\";\n\nexport interface FormVisualizationProps {\n data: FormVisualizationData;\n config?: VisualizationConfig;\n isStreaming?: boolean;\n onAction?: (event: VisualizationActionEvent) => void;\n}\n\nexport function FormVisualization({ data, config, isStreaming = false, onAction }: FormVisualizationProps) {\n const { fields, submitAction } = data;\n const submitButtonText = config?.submitButtonText || \"Submit\";\n const cancelButtonText = config?.cancelButtonText || \"Cancel\";\n\n const [formData, setFormData] = useState<Record<string, unknown>>(() => {\n const initial: Record<string, unknown> = {};\n fields.forEach((field) => {\n if (field.defaultValue !== undefined) initial[field.name] = field.defaultValue;\n else if (field.type === \"multiselect\") initial[field.name] = [];\n else if (field.type === \"checkbox\") initial[field.name] = false;\n else initial[field.name] = \"\";\n });\n return initial;\n });\n\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [submitted, setSubmitted] = useState(false);\n\n const handleChange = (name: string, value: unknown) => {\n setFormData((prev) => ({ ...prev, [name]: value }));\n if (errors[name]) setErrors((prev) => { const next = { ...prev }; delete next[name]; return next; });\n };\n\n const validate = (): boolean => {\n const newErrors: Record<string, string> = {};\n fields.forEach((field) => {\n const value = formData[field.name];\n if (field.required && (value === undefined || value === null || value === \"\" || (Array.isArray(value) && value.length === 0))) {\n newErrors[field.name] = `${field.label} is required`;\n return;\n }\n if (!value && !field.required) return;\n if (field.validation) {\n const { min, max, pattern, message } = field.validation;\n if (min !== undefined && typeof value === \"number\" && value < min) newErrors[field.name] = message || `Minimum value is ${min}`;\n if (max !== undefined && typeof value === \"number\" && value > max) newErrors[field.name] = message || `Maximum value is ${max}`;\n if (pattern && typeof value === \"string\" && !new RegExp(pattern).test(value)) newErrors[field.name] = message || \"Invalid format\";\n }\n if (field.type === \"email\" && typeof value === \"string\" && value && !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)) {\n newErrors[field.name] = \"Invalid email address\";\n }\n });\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (!validate()) return;\n if (onAction) {\n onAction({ type: \"form_submit\", action: submitAction || \"\", data: formData });\n } else {\n window.dispatchEvent(new CustomEvent(\"visualization-form-submit\", { detail: { action: submitAction, data: formData } }));\n }\n setSubmitted(true);\n };\n\n const handleCancel = () => {\n if (onAction) {\n onAction({ type: \"form_cancel\", action: submitAction || \"\" });\n } else {\n window.dispatchEvent(new CustomEvent(\"visualization-form-cancel\", { detail: { action: submitAction } }));\n }\n };\n\n if (submitted) {\n return (\n <div className=\"text-center py-8\">\n <p className=\"text-lg font-semibold text-green-500 mb-1\">Form Submitted</p>\n <p className=\"text-sm text-gray-500\">Your response has been recorded.</p>\n </div>\n );\n }\n\n const inputClass = \"w-full px-3 py-2 text-sm rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-900 focus:ring-2 focus:ring-blue-500/20 focus:border-blue-500 outline-none transition-colors\";\n const errorClass = \"border-red-500 focus:ring-red-500/20 focus:border-red-500\";\n\n const renderField = (field: FormField) => {\n const value = formData[field.name];\n const error = errors[field.name];\n const hasError = !!error;\n\n switch (field.type) {\n case \"text\":\n case \"email\":\n case \"number\":\n return (\n <input\n type={field.type}\n placeholder={field.placeholder}\n required={field.required}\n value={String(value || \"\")}\n onChange={(e) => handleChange(field.name, field.type === \"number\" ? parseFloat(e.target.value) || \"\" : e.target.value)}\n className={cn(inputClass, hasError && errorClass)}\n min={field.validation?.min}\n max={field.validation?.max}\n />\n );\n case \"textarea\":\n return (\n <textarea\n placeholder={field.placeholder}\n required={field.required}\n value={String(value || \"\")}\n onChange={(e) => handleChange(field.name, e.target.value)}\n className={cn(inputClass, \"min-h-[100px] resize-y\", hasError && errorClass)}\n rows={4}\n />\n );\n case \"select\":\n return (\n <select\n value={String(value || \"\")}\n onChange={(e) => handleChange(field.name, e.target.value)}\n className={cn(inputClass, hasError && errorClass)}\n >\n <option value=\"\" disabled>{field.placeholder || \"Select an option\"}</option>\n {field.options?.map((opt) => <option key={opt.value} value={opt.value}>{opt.label}</option>)}\n </select>\n );\n case \"multiselect\":\n return (\n <select\n multiple\n value={(value as string[]) || []}\n onChange={(e) => handleChange(field.name, Array.from(e.target.selectedOptions, (o) => o.value))}\n className={cn(inputClass, \"min-h-[80px]\", hasError && errorClass)}\n >\n {field.options?.map((opt) => <option key={opt.value} value={opt.value}>{opt.label}</option>)}\n </select>\n );\n case \"checkbox\":\n return (\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input type=\"checkbox\" checked={!!value} onChange={(e) => handleChange(field.name, e.target.checked)} className=\"w-4 h-4 accent-blue-500 rounded\" />\n <span className=\"text-sm\">{field.label}</span>\n </label>\n );\n case \"radio\":\n return (\n <div className=\"space-y-1\">\n {field.options?.map((opt) => (\n <label key={opt.value} className=\"flex items-center gap-2 cursor-pointer text-sm\">\n <input type=\"radio\" name={field.name} value={opt.value} checked={value === opt.value} onChange={(e) => handleChange(field.name, e.target.value)} className=\"w-3.5 h-3.5 accent-blue-500\" />\n {opt.label}\n </label>\n ))}\n </div>\n );\n case \"date\":\n return <input type=\"date\" value={String(value || \"\")} onChange={(e) => handleChange(field.name, e.target.value)} className={cn(inputClass, hasError && errorClass)} />;\n case \"datetime\":\n return <input type=\"datetime-local\" value={String(value || \"\")} onChange={(e) => handleChange(field.name, e.target.value)} className={cn(inputClass, hasError && errorClass)} />;\n default:\n return null;\n }\n };\n\n return (\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n {fields.map((field) => (\n <div key={field.name}>\n {field.type !== \"checkbox\" && (\n <label className=\"block text-sm font-medium mb-1\">\n {field.label}{field.required && <span className=\"text-red-500 ml-0.5\">*</span>}\n </label>\n )}\n {renderField(field)}\n {errors[field.name] && <p className=\"text-xs text-red-500 mt-1\">{errors[field.name]}</p>}\n </div>\n ))}\n <div className=\"flex gap-2 pt-2\">\n <button type=\"submit\" disabled={isStreaming} className=\"px-4 py-2 text-sm rounded-lg bg-blue-500 text-white hover:bg-blue-600 disabled:opacity-50 transition-colors\">\n {submitButtonText}\n </button>\n <button type=\"button\" onClick={handleCancel} className=\"px-4 py-2 text-sm rounded-lg border border-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors\">\n {cancelButtonText}\n </button>\n </div>\n </form>\n );\n}\n","import type { VisualizationConfig } from \"../../types\";\nimport type { ZodSchema } from \"zod\";\n\nexport interface VisualizationEntry {\n component: React.ComponentType<{\n data: any;\n config?: VisualizationConfig;\n isStreaming?: boolean;\n onAction?: (event: import(\"../../types\").VisualizationActionEvent) => void;\n }>;\n schema?: ZodSchema;\n}\n\nconst registry = new Map<string, VisualizationEntry>();\n\n/**\n * Register a visualization type. Built-in types are registered at module load.\n * Consumers can call this to add custom visualization types.\n */\nexport function registerVisualization(\n type: string,\n entry: VisualizationEntry,\n): void {\n registry.set(type, entry);\n}\n\n/**\n * Look up a registered visualization by type string.\n */\nexport function getVisualization(type: string): VisualizationEntry | undefined {\n return registry.get(type);\n}\n\n/**\n * Return all registered visualization type strings.\n */\nexport function getRegisteredTypes(): string[] {\n return Array.from(registry.keys());\n}\n\n// ---------------------------------------------------------------------------\n// Register built-in visualization types\n// ---------------------------------------------------------------------------\n\nimport { ChartVisualization } from \"./ChartVisualization\";\nimport { TableVisualization } from \"./TableVisualization\";\nimport { CardVisualization } from \"./CardVisualization\";\nimport { KpiVisualization } from \"./KpiVisualization\";\nimport { CodePreviewVisualization } from \"./CodePreviewVisualization\";\nimport { FormVisualization } from \"./FormVisualization\";\n\n// Schemas are registered lazily after the schemas module is loaded to avoid\n// circular-dependency issues. The `registerBuiltinSchemas` helper is called\n// from schemas.ts at module-load time.\nregisterVisualization(\"chart\", { component: ChartVisualization });\nregisterVisualization(\"table\", { component: TableVisualization });\nregisterVisualization(\"card\", { component: CardVisualization });\nregisterVisualization(\"kpi\", { component: KpiVisualization });\nregisterVisualization(\"code_preview\", { component: CodePreviewVisualization });\nregisterVisualization(\"form\", { component: FormVisualization });\n\n/**\n * Attach schemas to already-registered built-in types.\n * Called from schemas.ts at module-load time.\n */\nexport function registerBuiltinSchemas(\n schemas: Record<string, ZodSchema>,\n): void {\n for (const [type, schema] of Object.entries(schemas)) {\n const entry = registry.get(type);\n if (entry) {\n entry.schema = schema;\n }\n }\n}\n","import { z } from \"zod\";\nimport { registerBuiltinSchemas } from \"./registry\";\n\n// ---------------------------------------------------------------------------\n// Chart\n// ---------------------------------------------------------------------------\n\nconst chartSeriesSchema = z.object({\n\tname: z.string(),\n\tdata: z.array(\n\t\tz.union([\n\t\t\tz.object({ x: z.union([z.string(), z.number()]), y: z.number() }),\n\t\t\tz.object({ name: z.string(), value: z.number() }),\n\t\t]),\n\t),\n\tcolor: z.string().optional(),\n});\n\nconst chartAxisSchema = z.object({\n\tlabel: z.string().optional(),\n\ttype: z.enum([\"category\", \"number\", \"time\"]).optional(),\n\tmin: z.number().optional(),\n\tmax: z.number().optional(),\n});\n\nexport const chartVisualizationSchema = z.object({\n\tchartType: z.enum([\"line\", \"bar\", \"pie\", \"area\", \"scatter\", \"composed\"]),\n\tseries: z.array(chartSeriesSchema),\n\txAxis: chartAxisSchema.optional(),\n\tyAxis: chartAxisSchema.optional(),\n});\n\n// ---------------------------------------------------------------------------\n// Table\n// ---------------------------------------------------------------------------\n\nconst tableColumnSchema = z.object({\n\tkey: z.string(),\n\tlabel: z.string(),\n\ttype: z.enum([\"string\", \"number\", \"currency\", \"date\", \"badge\", \"link\", \"boolean\", \"progress\"]).optional(),\n\talign: z.enum([\"left\", \"center\", \"right\"]).optional(),\n\twidth: z.string().optional(),\n});\n\nexport const tableVisualizationSchema = z.object({\n\tcolumns: z.array(tableColumnSchema),\n\trows: z.array(z.record(z.string(), z.unknown())),\n});\n\n// ---------------------------------------------------------------------------\n// Card\n// ---------------------------------------------------------------------------\n\nconst cardSectionSchema = z.object({\n\ttitle: z.string().optional(),\n\titems: z.array(z.object({ label: z.string(), value: z.union([z.string(), z.number()]) })).optional(),\n\tcontent: z.string().optional(),\n});\n\nconst cardActionSchema = z.object({\n\tlabel: z.string(),\n\taction: z.string(),\n\tvariant: z.enum([\"primary\", \"secondary\", \"text\"]).optional(),\n});\n\nexport const cardVisualizationSchema = z.object({\n\tsubtitle: z.string().optional(),\n\timageUrl: z.string().optional(),\n\tsections: z.array(cardSectionSchema),\n\tactions: z.array(cardActionSchema).optional(),\n});\n\n// ---------------------------------------------------------------------------\n// KPI\n// ---------------------------------------------------------------------------\n\nconst kpiMetricSchema = z.object({\n\tlabel: z.string(),\n\tvalue: z.union([z.string(), z.number()]),\n\tunit: z.string().optional(),\n\ttrend: z.enum([\"up\", \"down\", \"neutral\"]).optional(),\n\tchange: z.string().optional(),\n\tchangeLabel: z.string().optional(),\n\tsparkline: z.array(z.number()).optional(),\n\tcolor: z.string().optional(),\n});\n\nexport const kpiVisualizationSchema = z.object({\n\tmetrics: z.array(kpiMetricSchema),\n\tlayout: z.enum([\"row\", \"grid\"]).optional(),\n});\n\n// ---------------------------------------------------------------------------\n// Code Preview\n// ---------------------------------------------------------------------------\n\nexport const codePreviewVisualizationSchema = z.object({\n\tcode: z.string(),\n\tlanguage: z.string(),\n\tlineNumbers: z.boolean().optional(),\n\thighlightLines: z.array(z.number()).optional(),\n\tstartLine: z.number().optional(),\n});\n\n// ---------------------------------------------------------------------------\n// Form\n// ---------------------------------------------------------------------------\n\nconst formFieldSchema = z.object({\n\tname: z.string(),\n\ttype: z.enum([\n\t\t\"text\",\n\t\t\"number\",\n\t\t\"email\",\n\t\t\"select\",\n\t\t\"multiselect\",\n\t\t\"checkbox\",\n\t\t\"radio\",\n\t\t\"textarea\",\n\t\t\"date\",\n\t\t\"datetime\",\n\t]),\n\tlabel: z.string(),\n\trequired: z.boolean().optional(),\n\tplaceholder: z.string().optional(),\n\toptions: z.array(z.object({ value: z.string(), label: z.string() })).optional(),\n\tdefaultValue: z.unknown().optional(),\n\tvalidation: z\n\t\t.object({\n\t\t\tmin: z.number().optional(),\n\t\t\tmax: z.number().optional(),\n\t\t\tpattern: z.string().optional(),\n\t\t\tmessage: z.string().optional(),\n\t\t})\n\t\t.optional(),\n});\n\nexport const formVisualizationSchema = z.object({\n\tfields: z.array(formFieldSchema),\n\tsubmitAction: z.string().optional(),\n});\n\n// ---------------------------------------------------------------------------\n// Auto-register schemas with the registry\n// ---------------------------------------------------------------------------\n\nregisterBuiltinSchemas({\n\tchart: chartVisualizationSchema,\n\ttable: tableVisualizationSchema,\n\tcard: cardVisualizationSchema,\n\tkpi: kpiVisualizationSchema,\n\tcode_preview: codePreviewVisualizationSchema,\n\tform: formVisualizationSchema,\n});\n","import { AlertCircle } from \"lucide-react\";\nimport type { VisualizationActionEvent, VisualizationChunkData } from \"../../types\";\nimport { getVisualization } from \"./registry\";\n// Side-effect import: ensures schemas are registered alongside components\nimport \"./schemas\";\n\nexport interface VisualizationRendererProps {\n data: VisualizationChunkData;\n isStreaming?: boolean;\n onAction?: (event: VisualizationActionEvent) => void;\n}\n\nexport function VisualizationRenderer({\n data,\n isStreaming = false,\n onAction,\n}: VisualizationRendererProps) {\n const { type, title, description, data: vizData, config } = data;\n\n const renderVisualization = () => {\n const entry = getVisualization(type);\n\n if (!entry) {\n return (\n <div className=\"flex items-center gap-2 p-4 text-yellow-500\">\n <AlertCircle size={20} />\n <span className=\"text-sm\">Unknown visualization type: {type}</span>\n </div>\n );\n }\n\n // Schema validation (if a schema is registered for this type)\n if (entry.schema) {\n const result = entry.schema.safeParse(vizData);\n if (!result.success) {\n const issues = result.error.issues.slice(0, 3);\n return (\n <div className=\"p-4 rounded-lg border border-red-200 dark:border-red-800 bg-red-50 dark:bg-red-950/30\">\n <div className=\"flex items-center gap-2 text-red-600 dark:text-red-400 mb-2\">\n <AlertCircle size={18} />\n <span className=\"text-sm font-medium\">\n Invalid {type} visualization data\n </span>\n </div>\n <ul className=\"text-xs text-red-500 dark:text-red-400 space-y-1 list-disc list-inside\">\n {issues.map((issue, i) => (\n <li key={i}>\n {issue.path.join(\".\")}: {issue.message}\n </li>\n ))}\n {result.error.issues.length > 3 && (\n <li>...and {result.error.issues.length - 3} more</li>\n )}\n </ul>\n </div>\n );\n }\n }\n\n const Component = entry.component;\n return (\n <Component\n data={vizData}\n config={config}\n isStreaming={isStreaming}\n onAction={onAction}\n />\n );\n };\n\n return (\n <div className=\"my-3 overflow-hidden\">\n {(title || description) && (\n <div className=\"mb-2\">\n {title && <p className=\"text-sm font-semibold\">{title}</p>}\n {description && (\n <p className=\"text-xs text-gray-500 mt-0.5\">{description}</p>\n )}\n </div>\n )}\n <div>{renderVisualization()}</div>\n </div>\n );\n}\n","import { forwardRef, useContext, useMemo, useRef } from \"react\";\nimport { MessageContent as MessageContentPrimitive, Message as MessagePrimitive } from \"../primitives\";\nimport type {\n\tClarificationData,\n\tMessageData,\n\tParticipantRole,\n\tSourceReference,\n\tStreamingChunk,\n\tSuggestedAction,\n\tVisualizationChunkData,\n} from \"../types\";\nimport { cn } from \"../utils/cn\";\nimport { ChatContext } from \"../context/ChatProvider\";\nimport { Avatar } from \"./Avatar\";\nimport { CitationSources } from \"./CitationSources\";\nimport { ClarificationPanel } from \"./ClarificationPanel\";\nimport { LoadingDots } from \"./LoadingDots\";\nimport { MarkdownContent } from \"./MarkdownContent\";\nimport { MessageActionBar } from \"./MessageActionBar\";\nimport { MessageAttachments } from \"./MessageAttachments\";\nimport { ReasoningPanel } from \"./ReasoningPanel\";\nimport { StreamingText } from \"./StreamingText\";\nimport { SuggestedActions } from \"./SuggestedActions\";\nimport { VisualizationRenderer } from \"./visualizations\";\n\n// Regex to match visualization markers [VIZ:uuid]\nconst VIZ_MARKER_REGEX = /\\[VIZ:([a-f0-9-]+)\\]/gi;\n\n/**\n * Parse content and split it by visualization markers.\n * Returns an array of alternating text and visualization IDs.\n */\nfunction parseContentWithVisualizations(\n\tcontent: string,\n): Array<{ type: \"text\"; content: string } | { type: \"viz\"; id: string }> {\n\tconst parts: Array<{ type: \"text\"; content: string } | { type: \"viz\"; id: string }> = [];\n\tlet lastIndex = 0;\n\tlet match;\n\n\t// Reset regex lastIndex\n\tVIZ_MARKER_REGEX.lastIndex = 0;\n\n\twhile ((match = VIZ_MARKER_REGEX.exec(content)) !== null) {\n\t\tif (match.index > lastIndex) {\n\t\t\tconst text = content.slice(lastIndex, match.index);\n\t\t\tif (text.trim()) {\n\t\t\t\tparts.push({ type: \"text\", content: text });\n\t\t\t}\n\t\t}\n\t\tparts.push({ type: \"viz\", id: match[1] });\n\t\tlastIndex = match.index + match[0].length;\n\t}\n\n\tif (lastIndex < content.length) {\n\t\tconst text = content.slice(lastIndex);\n\t\tif (text.trim()) {\n\t\t\tparts.push({ type: \"text\", content: text });\n\t\t}\n\t}\n\n\treturn parts;\n}\n\nexport interface MessageProps {\n\t/** The message data */\n\tmessage: MessageData;\n\t/** The viewer's role (determines alignment) */\n\tviewerRole?: ParticipantRole;\n\t/** Additional CSS classes */\n\tclassName?: string;\n\t/** Whether to show avatar */\n\tshowAvatar?: boolean;\n\t/** Whether to show timestamp */\n\tshowTimestamp?: boolean;\n\t/** Whether to render content as markdown */\n\trenderMarkdown?: boolean;\n\t/** Streaming chunks for reasoning panel */\n\treasoning?: StreamingChunk[];\n\t/** Execution plan for completed Plan & Execute messages */\n\texecutionPlan?: unknown;\n\t/** Execution timeline for completed messages (all orchestrator modes) */\n\texecutionTimeline?: unknown[];\n\t/** Suggested actions */\n\tsuggestedActions?: SuggestedAction[];\n\t/** Callback when suggested action is selected */\n\tonSuggestedAction?: (action: SuggestedAction) => void;\n\t/** Whether reasoning panel is expanded */\n\treasoningExpanded?: boolean;\n\t/** Callback when reasoning panel expansion changes */\n\tonReasoningExpandedChange?: (expanded: boolean) => void;\n\t/** Citation sources to display after message content */\n\tcitations?: SourceReference[];\n\t/** Inline visualizations to render within message content */\n\tvisualizations?: VisualizationChunkData[];\n\t/** Base font size multiplier for markdown rendering */\n\tbaselineFontSize?: number;\n\t/** Total execution time in seconds (persisted from streaming wall-clock) */\n\texecutionTime?: number;\n\t/** Pending clarification data (agent needs user input) */\n\tpendingClarification?: ClarificationData;\n\t/** Callback when user responds to a clarification */\n\tonClarificationSubmit?: (response: string) => void;\n}\n\n/**\n * Styled Message component with grid layout matching the main app.\n * Uses grid to align avatar and content, with reasoning above content.\n * Supports attachments, citations, inline visualizations, and streaming text.\n */\nexport const Message = forwardRef<HTMLDivElement, MessageProps>(\n\t(\n\t\t{\n\t\t\tmessage,\n\t\t\tviewerRole = \"user\",\n\t\t\tclassName,\n\t\t\tshowAvatar = true,\n\t\t\tshowTimestamp = true,\n\t\t\trenderMarkdown = true,\n\t\t\treasoning,\n\t\t\texecutionPlan,\n\t\t\texecutionTimeline,\n\t\t\tsuggestedActions,\n\t\t\tonSuggestedAction,\n\t\t\treasoningExpanded,\n\t\t\tonReasoningExpandedChange,\n\t\t\tcitations,\n\t\t\tvisualizations,\n\t\t\tbaselineFontSize,\n\t\t\texecutionTime,\n\t\t\tpendingClarification,\n\t\t\tonClarificationSubmit,\n\t\t},\n\t\tref,\n\t) => {\n\t\t// Get visualization action callback from context (null-safe for standalone usage)\n\t\tconst chatContext = useContext(ChatContext);\n\t\tconst onVisualizationAction = chatContext?.onVisualizationAction;\n\n\t\t// Case-insensitive comparison for role matching\n\t\tconst participantRole = (message.participant?.role || \"\").toLowerCase();\n\t\tconst viewerRoleLower = (viewerRole || \"\").toLowerCase();\n\t\tconst isViewer = participantRole === viewerRoleLower;\n\t\tconst isAssistant = participantRole === \"assistant\";\n\t\tconst isStreaming = message.isStreaming;\n\n\t\t// Filter reasoning chunks for display\n\t\t// Includes all reasoning-related types: ReAct, Parallel Plan, Multi-Agent, Claude SDK\n\t\tconst reasoningChunks = reasoning?.filter(\n\t\t\t(c) =>\n\t\t\t\t// Legacy ReAct types\n\t\t\t\tc.type === \"thinking\" ||\n\t\t\t\tc.type === \"tool\" ||\n\t\t\t\tc.type === \"observation\" ||\n\t\t\t\tc.type === \"planning\" ||\n\t\t\t\tc.type === \"subtask\" ||\n\t\t\t\t// Parallel Plan execution (wave-based)\n\t\t\t\tc.type === \"wave_start\" ||\n\t\t\t\tc.type === \"wave_complete\" ||\n\t\t\t\tc.type === \"parallel_subtask_start\" ||\n\t\t\t\tc.type === \"parallel_subtask_complete\" ||\n\t\t\t\t// Multi-Agent execution (miiflow-llm)\n\t\t\t\tc.type === \"multi_agent_planning\" ||\n\t\t\t\tc.type === \"subagent_start\" ||\n\t\t\t\tc.type === \"subagent_complete\" ||\n\t\t\t\tc.type === \"subagent_failed\" ||\n\t\t\t\tc.type === \"synthesis\" ||\n\t\t\t\t// Claude SDK native types\n\t\t\t\tc.type === \"claude_thinking\" ||\n\t\t\t\tc.type === \"subagent\" ||\n\t\t\t\tc.type === \"file_operation\" ||\n\t\t\t\tc.type === \"terminal\" ||\n\t\t\t\tc.type === \"search_results\" ||\n\t\t\t\tc.type === \"web_operation\" ||\n\t\t\t\t// Generic Claude tools (check for claudeToolData)\n\t\t\t\tc.claudeToolData != null,\n\t\t);\n\t\tconst hasReasoningChunks = reasoningChunks && reasoningChunks.length > 0;\n\t\tconst hasCompletedReasoning =\n\t\t\t!isStreaming && (executionPlan || (executionTimeline && executionTimeline.length > 0));\n\t\tconst hasReasoning = hasReasoningChunks || hasCompletedReasoning;\n\n\t\t// Check if waiting for content\n\t\tconst isWaitingForContent = isStreaming && !message.textContent && !hasReasoning;\n\n\t\t// Attachments from message data\n\t\tconst attachments = message.attachments;\n\t\tconst hasAttachments = attachments && attachments.length > 0;\n\n\t\t// Visualization map for inline rendering\n\t\tconst vizMap = useMemo(() => {\n\t\t\tif (!visualizations || visualizations.length === 0) return null;\n\t\t\tconst map = new Map<string, VisualizationChunkData>();\n\t\t\tvisualizations.forEach((viz) => map.set(viz.id, viz));\n\t\t\treturn map;\n\t\t}, [visualizations]);\n\n\t\t// Parse content for visualization markers\n\t\tconst hasViz = vizMap && vizMap.size > 0;\n\t\tconst contentParts = useMemo(() => {\n\t\t\tif (!hasViz || !message.textContent) return null;\n\t\t\treturn parseContentWithVisualizations(message.textContent);\n\t\t}, [hasViz, message.textContent]);\n\n\t\tconst renderContent = () => {\n\t\t\tif (!message.textContent) return null;\n\n\t\t\t// Content with inline visualizations\n\t\t\tif (contentParts && contentParts.length > 0 && vizMap) {\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{contentParts.map((part, idx) => {\n\t\t\t\t\t\t\tif (part.type === \"text\") {\n\t\t\t\t\t\t\t\treturn isStreaming ? (\n\t\t\t\t\t\t\t\t\t<StreamingText key={idx} content={part.content} isStreaming baselineFontSize={baselineFontSize} />\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<MarkdownContent\n\t\t\t\t\t\t\t\t\t\tkey={idx}\n\t\t\t\t\t\t\t\t\t\tbaselineFontSize={baselineFontSize}\n\t\t\t\t\t\t\t\t\t\tclassName={isViewer ? \"prose-invert\" : \"\"}>\n\t\t\t\t\t\t\t\t\t\t{part.content}\n\t\t\t\t\t\t\t\t\t</MarkdownContent>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst viz = vizMap.get(part.id);\n\t\t\t\t\t\t\tif (viz) {\n\t\t\t\t\t\t\t\treturn <VisualizationRenderer key={`viz-${part.id}`} data={viz} isStreaming={isStreaming} onAction={onVisualizationAction} />;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t})}\n\t\t\t\t\t</>\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Streaming text with typewriter\n\t\t\tif (isStreaming && renderMarkdown) {\n\t\t\t\treturn (\n\t\t\t\t\t<StreamingText\n\t\t\t\t\t\tcontent={message.textContent}\n\t\t\t\t\t\tisStreaming\n\t\t\t\t\t\tbaselineFontSize={baselineFontSize}\n\t\t\t\t\t\tclassName={isViewer ? \"prose-invert\" : \"\"}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Static markdown\n\t\t\tif (renderMarkdown) {\n\t\t\t\treturn (\n\t\t\t\t\t<MarkdownContent baselineFontSize={baselineFontSize} className={isViewer ? \"prose-invert\" : \"\"}>\n\t\t\t\t\t\t{message.textContent}\n\t\t\t\t\t</MarkdownContent>\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn <p className=\"whitespace-pre-wrap\">{message.textContent}</p>;\n\t\t};\n\n\t\t// Track if this message was ever in streaming state.\n\t\t// Streamed messages are already visible — re-animating them on completion causes a flash.\n\t\tconst wasStreamingRef = useRef(isStreaming);\n\t\tif (isStreaming) wasStreamingRef.current = true;\n\t\tconst showFadeIn = !isStreaming && !wasStreamingRef.current;\n\n\t\treturn (\n\t\t\t<MessagePrimitive\n\t\t\t\tref={ref}\n\t\t\t\tmessage={message}\n\t\t\t\tviewerRole={viewerRole}\n\t\t\t\tclassName={cn(\"w-full\", showFadeIn && \"animate-message-in\", className)}>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\"flex flex-col gap-1 w-full\")}\n\t\t\t\t\tdata-is-viewer={isViewer}>\n\t\t\t\t\t{/* Loading indicator: avatar + dots in same row */}\n\t\t\t\t\t{isWaitingForContent && (\n\t\t\t\t\t\t<div className={cn(\"flex items-start gap-2 w-full\")}>\n\t\t\t\t\t\t\t{showAvatar && !isViewer && (\n\t\t\t\t\t\t\t\t<div className=\"flex-shrink-0\">\n\t\t\t\t\t\t\t\t\t<Avatar\n\t\t\t\t\t\t\t\t\t\tname={message.participant?.name}\n\t\t\t\t\t\t\t\t\t\tsrc={message.participant?.avatarUrl}\n\t\t\t\t\t\t\t\t\t\trole={message.participant?.role}\n\t\t\t\t\t\t\t\t\t\tclassName=\"w-10 h-10 flex-shrink-0\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<div className=\"px-4 py-3\">\n\t\t\t\t\t\t\t\t<LoadingDots size=\"small\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Reasoning Panel - before content for assistant */}\n\t\t\t\t\t{hasReasoning && isAssistant && (\n\t\t\t\t\t\t<div className=\"w-full max-w-[80%]\">\n\t\t\t\t\t\t\t\t\t<ReasoningPanel\n\t\t\t\t\t\t\t\tisStreaming={isStreaming}\n\t\t\t\t\t\t\t\tchunks={reasoningChunks}\n\t\t\t\t\t\t\t\tplan={executionPlan as any}\n\t\t\t\t\t\t\t\texecutionTimeline={executionTimeline as any[]}\n\t\t\t\t\t\t\t\tuserMessageTimestamp={message.createdAt ? new Date(typeof message.createdAt === \"string\" ? message.createdAt : message.createdAt).getTime() / 1000 : undefined}\n\t\t\t\t\t\t\t\texecutionTime={executionTime}\n\t\t\t\t\t\t\t\texpanded={reasoningExpanded}\n\t\t\t\t\t\t\t\tonExpandedChange={onReasoningExpandedChange}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Content row: avatar + message bubble */}\n\t\t\t\t\t{message.textContent && (\n\t\t\t\t\t\t<div className={cn(\n\t\t\t\t\t\t\t\"group flex items-start gap-2 w-full\",\n\t\t\t\t\t\t\tisViewer ? \"flex-row-reverse\" : \"flex-row\"\n\t\t\t\t\t\t)}>\n\t\t\t\t\t\t\t{/* Avatar - shown for non-viewer messages */}\n\t\t\t\t\t\t\t{showAvatar && !isViewer && (\n\t\t\t\t\t\t\t\t<div className=\"flex-shrink-0\">\n\t\t\t\t\t\t\t\t\t<Avatar\n\t\t\t\t\t\t\t\t\t\tname={message.participant?.name}\n\t\t\t\t\t\t\t\t\t\tsrc={message.participant?.avatarUrl}\n\t\t\t\t\t\t\t\t\t\trole={message.participant?.role}\n\t\t\t\t\t\t\t\t\t\tclassName=\"w-10 h-10 flex-shrink-0\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{/* Message bubble */}\n\t\t\t\t\t\t\t<div className={cn(\"max-w-[85%]\", \"flex flex-col\")} data-message-role={isViewer ? \"viewer\" : \"other\"}>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"rounded-2xl\",\n\t\t\t\t\t\t\t\t\tisViewer || showAvatar ? \"px-4 py-3\" : \"\",\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: isViewer ? \"var(--chat-user-message-bg)\" : \"transparent\",\n\t\t\t\t\t\t\t\t\t\tcolor: isViewer ? \"var(--chat-user-message-text, #ffffff)\" : \"var(--chat-text)\",\n\t\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\t<MessageContentPrimitive>{renderContent()}</MessageContentPrimitive>\n\n\t\t\t\t\t\t\t\t\t{/* Citations */}\n\t\t\t\t\t\t\t\t\t{citations && citations.length > 0 && (\n\t\t\t\t\t\t\t\t\t\t<div className=\"mt-2 pt-2 border-t border-[var(--chat-border)]\">\n\t\t\t\t\t\t\t\t\t\t\t<CitationSources sources={citations} />\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t{/* Attachments — outside bubble */}\n\t\t\t\t\t\t\t\t{hasAttachments && (\n\t\t\t\t\t\t\t\t\t<div className=\"mt-2\">\n\t\t\t\t\t\t\t\t\t\t<MessageAttachments attachments={attachments} />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{/* Timestamp + action bar row */}\n\t\t\t\t\t\t\t\t{!isStreaming && (showTimestamp && message.createdAt || (isAssistant && message.textContent)) && (\n\t\t\t\t\t\t\t\t\t<div className={cn(\"flex items-center gap-2 mt-1\", isViewer && \"flex-row-reverse\")}>\n\t\t\t\t\t\t\t\t\t\t{showTimestamp && message.createdAt && (\n\t\t\t\t\t\t\t\t\t\t\t<MessageTimestamp\n\t\t\t\t\t\t\t\t\t\t\t\tcreatedAt={\n\t\t\t\t\t\t\t\t\t\t\t\t\ttypeof message.createdAt === \"string\" ? message.createdAt : message.createdAt.toISOString()\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tisViewer={isViewer}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{isAssistant && message.textContent && (\n\t\t\t\t\t\t\t\t\t\t\t<MessageActionBar textContent={message.textContent} />\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Message error display */}\n\t\t\t\t\t{message.error && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex items-start gap-2 w-full max-w-[85%]\",\n\t\t\t\t\t\t\t\t\"rounded-lg border px-3 py-2 mt-1\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tborderColor: \"var(--chat-error, #B1001B)\",\n\t\t\t\t\t\t\t\tbackgroundColor: \"color-mix(in srgb, var(--chat-error, #B1001B) 6%, transparent)\",\n\t\t\t\t\t\t\t\tcolor: \"var(--chat-error, #B1001B)\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{/* Alert triangle icon */}\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\twidth=\"16\"\n\t\t\t\t\t\t\t\theight=\"16\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\tclassName=\"flex-shrink-0 mt-0.5\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\" />\n\t\t\t\t\t\t\t\t<line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n\t\t\t\t\t\t\t\t<line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t<span className=\"text-sm\">{message.error.message}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Standalone avatar: only for reasoning, NOT loading (loading has its own avatar row above) */}\n\t\t\t\t\t{!message.textContent && showAvatar && !isViewer && hasReasoning && !isWaitingForContent && (\n\t\t\t\t\t\t<div className=\"flex items-start gap-2 w-full\">\n\t\t\t\t\t\t\t<div className=\"flex-shrink-0\">\n\t\t\t\t\t\t\t\t<Avatar\n\t\t\t\t\t\t\t\t\tname={message.participant?.name}\n\t\t\t\t\t\t\t\t\tsrc={message.participant?.avatarUrl}\n\t\t\t\t\t\t\t\t\trole={message.participant?.role}\n\t\t\t\t\t\t\t\t\tclassName=\"w-10 h-10 flex-shrink-0\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Clarification panel - when agent needs user input */}\n\t\t\t\t\t{pendingClarification && !isStreaming && onClarificationSubmit && (\n\t\t\t\t\t\t<div className=\"w-full max-w-[80%]\">\n\t\t\t\t\t\t\t<ClarificationPanel\n\t\t\t\t\t\t\t\tclarification={pendingClarification}\n\t\t\t\t\t\t\t\tonSubmit={onClarificationSubmit}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Suggested actions */}\n\t\t\t\t\t{suggestedActions && suggestedActions.length > 0 && !isStreaming && (\n\t\t\t\t\t\t<div className=\"w-full max-w-[80%]\">\n\t\t\t\t\t\t\t<SuggestedActions actions={suggestedActions} onSelect={onSuggestedAction} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</MessagePrimitive>\n\t\t);\n\t},\n);\n\nMessage.displayName = \"Message\";\n\nfunction MessageTimestamp({ createdAt }: { createdAt: string; isViewer?: boolean }) {\n\tconst formatTime = (dateString: string) => {\n\t\ttry {\n\t\t\tconst date = new Date(dateString);\n\t\t\treturn date.toLocaleTimeString([], { hour: \"2-digit\", minute: \"2-digit\" });\n\t\t} catch {\n\t\t\treturn \"\";\n\t\t}\n\t};\n\n\treturn (\n\t\t<span className=\"text-xs text-[var(--chat-text-subtle)]\">\n\t\t\t{formatTime(createdAt)}\n\t\t</span>\n\t);\n}\n\nexport { useMessage } from \"../primitives\";\n","import { forwardRef, useCallback, useRef, useState, useEffect } from \"react\";\nimport { ArrowUp, Paperclip, X, FileText, Image, Loader2, AlertCircle } from \"lucide-react\";\nimport { cn } from \"../utils/cn\";\n\nimport { AutoLinkNode } from \"@lexical/link\";\nimport { ListItemNode, ListNode } from \"@lexical/list\";\nimport {\n $convertFromMarkdownString,\n $convertToMarkdownString,\n BOLD_STAR,\n ITALIC_UNDERSCORE,\n ORDERED_LIST,\n QUOTE,\n UNORDERED_LIST,\n} from \"@lexical/markdown\";\nimport { LexicalComposer } from \"@lexical/react/LexicalComposer\";\nimport { ContentEditable } from \"@lexical/react/LexicalContentEditable\";\nimport { LexicalErrorBoundary } from \"@lexical/react/LexicalErrorBoundary\";\nimport { HistoryPlugin } from \"@lexical/react/LexicalHistoryPlugin\";\nimport { ListPlugin } from \"@lexical/react/LexicalListPlugin\";\nimport { RichTextPlugin } from \"@lexical/react/LexicalRichTextPlugin\";\nimport { OnChangePlugin } from \"@lexical/react/LexicalOnChangePlugin\";\nimport { AutoFocusPlugin } from \"@lexical/react/LexicalAutoFocusPlugin\";\nimport { QuoteNode } from \"@lexical/rich-text\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport {\n COMMAND_PRIORITY_HIGH,\n KEY_ENTER_COMMAND,\n $getRoot,\n $createParagraphNode,\n} from \"lexical\";\nimport type { EditorState } from \"lexical\";\n\nconst TRANSFORMERS = [BOLD_STAR, ITALIC_UNDERSCORE, QUOTE, ORDERED_LIST, UNORDERED_LIST];\n\nconst EDITOR_THEME = {\n ltr: \"ltr\",\n rtl: \"rtl\",\n placeholder: \"editor-placeholder\",\n paragraph: \"editor-paragraph\",\n quote: \"editor-quote\",\n text: {},\n};\n\n// ============================================================================\n// File upload constants (matching in-house backend)\n// ============================================================================\n\nconst MAX_FILE_SIZE = 100 * 1024 * 1024; // 100MB\n\nconst ALLOWED_IMAGE_TYPES = [\n \"image/jpeg\",\n \"image/jpg\",\n \"image/png\",\n \"image/gif\",\n \"image/webp\",\n \"image/svg+xml\",\n \"image/bmp\",\n];\nconst ALLOWED_DOCUMENT_TYPES = [\n \"application/pdf\",\n \"text/plain\",\n \"text/csv\",\n \"text/markdown\",\n \"application/json\",\n \"text/json\",\n \"application/msword\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n \"application/vnd.ms-excel\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n];\nconst ALLOWED_VIDEO_TYPES = [\n \"video/mp4\",\n \"video/webm\",\n \"video/ogg\",\n \"video/avi\",\n \"video/mov\",\n \"video/wmv\",\n \"video/flv\",\n \"video/mkv\",\n];\n\nconst DEFAULT_ALLOWED_TYPES = [\n ...ALLOWED_IMAGE_TYPES,\n ...ALLOWED_DOCUMENT_TYPES,\n ...ALLOWED_VIDEO_TYPES,\n];\n\n// ============================================================================\n// Attachment types\n// ============================================================================\n\ntype AttachmentStatus = \"pending\" | \"uploading\" | \"uploaded\" | \"error\";\n\ninterface AttachmentFile {\n id: string;\n file: File;\n previewUrl?: string;\n status: AttachmentStatus;\n attachmentId?: string;\n error?: string;\n}\n\n// ============================================================================\n// Utility\n// ============================================================================\n\nfunction formatFileSize(bytes: number): string {\n if (bytes === 0) return \"0 Bytes\";\n const k = 1024;\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + \" \" + sizes[i];\n}\n\nfunction validateFile(\n file: File,\n allowedTypes: string[],\n maxSize: number,\n): string | null {\n if (file.size > maxSize) {\n return `File size (${formatFileSize(file.size)}) exceeds max (${formatFileSize(maxSize)})`;\n }\n if (!allowedTypes.includes(file.type)) {\n return `File type ${file.type || \"unknown\"} is not allowed`;\n }\n return null;\n}\n\n// ============================================================================\n// Sub-components\n// ============================================================================\n\nfunction AttachmentBar({\n attachments,\n onRemove,\n disabled,\n}: {\n attachments: AttachmentFile[];\n onRemove: (id: string) => void;\n disabled: boolean;\n}) {\n if (attachments.length === 0) return null;\n\n return (\n <div className=\"flex flex-wrap gap-2 px-3 pt-3 pb-0\">\n {attachments.map((att) => {\n const isImage = att.file.type.startsWith(\"image/\");\n const isError = att.status === \"error\";\n const isUploading = att.status === \"uploading\";\n\n return (\n <div\n key={att.id}\n className={cn(\n \"relative flex items-center gap-1.5 px-2 py-1.5 rounded-lg text-xs max-w-[200px]\",\n isError\n ? \"bg-red-50 dark:bg-red-900/30 text-red-600 dark:text-red-400\"\n : \"bg-gray-100 dark:bg-zinc-700 text-gray-600 dark:text-zinc-300\",\n )}\n >\n {isUploading ? (\n <Loader2 size={14} className=\"flex-shrink-0 animate-spin\" />\n ) : isError ? (\n <AlertCircle size={14} className=\"flex-shrink-0\" />\n ) : isImage && att.previewUrl ? (\n <img src={att.previewUrl} alt={att.file.name} className=\"w-5 h-5 rounded object-cover\" />\n ) : isImage ? (\n <Image size={14} className=\"flex-shrink-0\" />\n ) : (\n <FileText size={14} className=\"flex-shrink-0\" />\n )}\n <span className=\"truncate\" title={isError ? att.error : att.file.name}>\n {isError ? att.error : att.file.name}\n </span>\n {!disabled && (\n <button\n type=\"button\"\n onClick={() => onRemove(att.id)}\n className=\"flex-shrink-0 ml-0.5 p-0.5 rounded-full hover:bg-gray-200 dark:hover:bg-zinc-600 transition-colors\"\n >\n <X size={12} />\n </button>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n\n/**\n * Lexical plugin: Enter to submit, Shift+Enter for newline.\n */\nfunction EnterKeyPlugin({ onSubmit, disabled }: { onSubmit: () => void; disabled: boolean }) {\n const [editor] = useLexicalComposerContext();\n\n useEffect(() => {\n return editor.registerCommand(\n KEY_ENTER_COMMAND,\n (event: KeyboardEvent | null) => {\n if (!event) return false;\n // Shift+Enter → newline (default behavior)\n if (event.shiftKey) return false;\n // Enter → submit\n event.preventDefault();\n if (!disabled) onSubmit();\n return true;\n },\n COMMAND_PRIORITY_HIGH,\n );\n }, [editor, onSubmit, disabled]);\n\n return null;\n}\n\n/**\n * Helper plugin to clear editor content programmatically.\n */\nfunction ClearEditorPlugin({ clearRef }: { clearRef: React.MutableRefObject<(() => void) | null> }) {\n const [editor] = useLexicalComposerContext();\n\n useEffect(() => {\n clearRef.current = () => {\n editor.update(() => {\n const root = $getRoot();\n root.clear();\n root.append($createParagraphNode());\n });\n };\n }, [editor, clearRef]);\n\n return null;\n}\n\n// ============================================================================\n// Main component\n// ============================================================================\n\nexport interface MessageComposerProps {\n /** Callback when message is submitted */\n onSubmit: (content: string, attachments?: File[], attachmentIds?: string[]) => Promise<void>;\n /** Callback when files are attached (for upload handling) */\n onAttach?: (files: File[]) => void;\n /** Upload a file to backend, returning an attachment ID. When provided, enables server-side upload flow. */\n onUploadFile?: (file: File) => Promise<string>;\n /** Notify backend/hook that an uploaded attachment was removed before sending. */\n onRemoveUploadedAttachment?: (attachmentId: string) => void;\n /** Whether the composer is disabled */\n disabled?: boolean;\n /** Whether attachments are supported */\n supportsAttachments?: boolean;\n /** Allowed MIME types for attachments (default: images + docs + videos) */\n allowedFileTypes?: string[];\n /** Maximum file size in bytes (default: 100MB) */\n maxFileSize?: number;\n /** Placeholder text */\n placeholder?: string;\n /** Additional CSS classes */\n className?: string;\n /** Whether a message is currently being submitted */\n isSubmitting?: boolean;\n}\n\n/**\n * Rich text MessageComposer with Lexical editor, attachment support,\n * file upload integration, drag & drop, and Enter-to-submit.\n */\nexport const MessageComposer = forwardRef<HTMLDivElement, MessageComposerProps>(\n (\n {\n onSubmit,\n onAttach,\n onUploadFile,\n onRemoveUploadedAttachment,\n disabled = false,\n supportsAttachments = true,\n allowedFileTypes = DEFAULT_ALLOWED_TYPES,\n maxFileSize = MAX_FILE_SIZE,\n placeholder = \"Type a message...\",\n className,\n isSubmitting = false,\n },\n ref,\n ) => {\n const [inputText, setInputText] = useState(\"\");\n const [attachments, setAttachments] = useState<AttachmentFile[]>([]);\n const [isDragOver, setIsDragOver] = useState(false);\n const fileInputRef = useRef<HTMLInputElement>(null);\n const clearEditorRef = useRef<(() => void) | null>(null);\n const dragCounterRef = useRef(0);\n\n const isSubmitDisabled = disabled || isSubmitting;\n const isAnyUploading = attachments.some((a) => a.status === \"uploading\");\n const uploadedIds = attachments\n .filter((a) => a.status === \"uploaded\" && a.attachmentId)\n .map((a) => a.attachmentId!);\n const hasAttachments = uploadedIds.length > 0 || attachments.some((a) => a.status === \"pending\");\n const hasContent = inputText.trim().length > 0 || hasAttachments;\n\n const handleChange = useCallback((editorState: EditorState) => {\n editorState.read(() => {\n const value = $convertToMarkdownString(TRANSFORMERS);\n const processedValue = value\n .replace(/\\n\\s*\\n\\s*\\n+/g, \"\\n\\n\")\n .replace(/(?<!\\n)\\n(?!\\n)/g, \" \\n\");\n setInputText(processedValue);\n });\n }, []);\n\n const processFiles = useCallback(\n async (files: File[]) => {\n const newAttachments: AttachmentFile[] = files.map((file) => {\n const error = validateFile(file, allowedFileTypes, maxFileSize);\n const att: AttachmentFile = {\n id: `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,\n file,\n status: error ? \"error\" : onUploadFile ? \"uploading\" : \"pending\",\n error: error || undefined,\n };\n if (!error && file.type.startsWith(\"image/\")) {\n att.previewUrl = URL.createObjectURL(file);\n }\n return att;\n });\n\n setAttachments((prev) => [...prev, ...newAttachments]);\n onAttach?.(files);\n\n // Upload files to backend if onUploadFile is provided\n if (onUploadFile) {\n for (const att of newAttachments) {\n if (att.status !== \"uploading\") continue;\n try {\n const attachmentId = await onUploadFile(att.file);\n setAttachments((prev) =>\n prev.map((a) =>\n a.id === att.id\n ? { ...a, status: \"uploaded\" as const, attachmentId }\n : a,\n ),\n );\n } catch (err) {\n setAttachments((prev) =>\n prev.map((a) =>\n a.id === att.id\n ? {\n ...a,\n status: \"error\" as const,\n error: err instanceof Error ? err.message : \"Upload failed\",\n }\n : a,\n ),\n );\n }\n }\n }\n },\n [allowedFileTypes, maxFileSize, onUploadFile, onAttach],\n );\n\n const handleSubmit = useCallback(async () => {\n if (!hasContent || isSubmitDisabled || isAnyUploading) return;\n\n const text = inputText;\n const rawFiles = attachments\n .filter((a) => a.status !== \"error\")\n .map((a) => a.file);\n const savedAttachments = attachments;\n\n // Clear state immediately\n clearEditorRef.current?.();\n setInputText(\"\");\n setAttachments([]);\n\n try {\n if (onUploadFile && uploadedIds.length > 0) {\n await onSubmit(text, undefined, uploadedIds);\n } else {\n await onSubmit(text, rawFiles.length > 0 ? rawFiles : undefined);\n }\n } catch {\n // Restore on error\n setInputText(text);\n setAttachments(savedAttachments);\n }\n }, [inputText, attachments, hasContent, isSubmitDisabled, isAnyUploading, onSubmit, onUploadFile, uploadedIds]);\n\n const handleFileSelect = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files;\n if (!files || files.length === 0) return;\n processFiles(Array.from(files));\n // Reset so same file can be selected again\n e.target.value = \"\";\n },\n [processFiles],\n );\n\n const handleRemoveAttachment = useCallback((id: string) => {\n setAttachments((prev) => {\n const removed = prev.find((a) => a.id === id);\n if (removed?.previewUrl) URL.revokeObjectURL(removed.previewUrl);\n // Clean up backend-side metadata for uploaded attachments\n if (removed?.attachmentId && onRemoveUploadedAttachment) {\n onRemoveUploadedAttachment(removed.attachmentId);\n }\n return prev.filter((a) => a.id !== id);\n });\n }, [onRemoveUploadedAttachment]);\n\n // Drag & drop handlers\n const handleDragEnter = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (!supportsAttachments || isSubmitting) return;\n dragCounterRef.current++;\n if (e.dataTransfer.types.includes(\"Files\")) {\n setIsDragOver(true);\n }\n },\n [supportsAttachments, isSubmitting],\n );\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragCounterRef.current--;\n if (dragCounterRef.current === 0) {\n setIsDragOver(false);\n }\n }, []);\n\n const handleDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n }, []);\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragCounterRef.current = 0;\n setIsDragOver(false);\n\n if (!supportsAttachments || isSubmitting) return;\n\n const files = Array.from(e.dataTransfer.files);\n if (files.length > 0) {\n processFiles(files);\n }\n },\n [supportsAttachments, isSubmitting, processFiles],\n );\n\n // Cleanup preview URLs on unmount\n useEffect(() => {\n return () => {\n attachments.forEach((a) => {\n if (a.previewUrl) URL.revokeObjectURL(a.previewUrl);\n });\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n const initialConfig = {\n namespace: \"ChatComposer\",\n theme: EDITOR_THEME,\n onError(error: Error) {\n console.error(\"[ChatComposer]\", error);\n },\n editorState() {\n return $convertFromMarkdownString(\"\", TRANSFORMERS);\n },\n nodes: [ListItemNode, ListNode, AutoLinkNode, QuoteNode],\n editable: !isSubmitting,\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex-shrink-0 px-3 pt-2 pb-3\",\n \"border-t border-gray-200 dark:border-zinc-700\",\n \"bg-white/95 dark:bg-zinc-900/95 backdrop-blur-sm\",\n className,\n )}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n <div\n className={cn(\n \"mx-auto max-w-[900px]\",\n \"rounded-xl\",\n \"bg-white dark:bg-zinc-800\",\n \"border border-gray-200 dark:border-zinc-700\",\n \"shadow-sm\",\n \"transition-all duration-200\",\n \"focus-within:shadow-md focus-within:border-gray-300 dark:focus-within:border-zinc-600\",\n isDragOver && \"ring-2 ring-blue-400 border-blue-400\",\n )}\n >\n {/* Drag overlay */}\n {isDragOver && (\n <div className=\"px-3 pt-3 pb-0\">\n <div className=\"flex items-center justify-center py-4 rounded-lg border-2 border-dashed border-blue-300 bg-blue-50 dark:bg-blue-900/20 text-blue-500 text-sm\">\n Drop files here\n </div>\n </div>\n )}\n\n {/* Attachment previews */}\n <AttachmentBar attachments={attachments} onRemove={handleRemoveAttachment} disabled={isSubmitting} />\n\n {/* Main input row */}\n <div\n className={cn(\n \"flex items-center gap-2 p-3\",\n attachments.length > 0 && \"pt-1.5\",\n )}\n >\n {/* Paperclip button */}\n {supportsAttachments && (\n <button\n type=\"button\"\n onClick={() => fileInputRef.current?.click()}\n disabled={isSubmitting}\n className={cn(\n \"flex-shrink-0\",\n \"w-8 h-8 rounded-lg\",\n \"flex items-center justify-center\",\n \"border border-gray-200 dark:border-zinc-600\",\n \"text-gray-500 dark:text-zinc-400\",\n \"hover:bg-gray-50 dark:hover:bg-zinc-700\",\n \"disabled:opacity-40 disabled:cursor-not-allowed\",\n \"transition-colors\",\n )}\n >\n <Paperclip size={16} />\n </button>\n )}\n\n {/* Lexical editor */}\n <div className=\"flex-1 min-w-0\">\n <LexicalComposer initialConfig={initialConfig}>\n <div className=\"relative px-1 text-sm\">\n <RichTextPlugin\n contentEditable={\n <ContentEditable\n className={cn(\n \"outline-none resize-none\",\n \"min-h-[24px] max-h-[200px] overflow-y-auto\",\n \"text-gray-900 dark:text-zinc-100\",\n \"[&_.editor-paragraph]:my-0\",\n \"[&_.editor-quote]:ml-0 [&_.editor-quote]:pl-3 [&_.editor-quote]:border-l-4 [&_.editor-quote]:border-gray-300\",\n \"[&_ul]:pl-4 [&_ol]:pl-4\",\n )}\n />\n }\n placeholder={\n <span className=\"absolute top-0 left-1 text-gray-400 dark:text-zinc-500 pointer-events-none select-none\">\n {placeholder}\n </span>\n }\n ErrorBoundary={LexicalErrorBoundary}\n />\n <OnChangePlugin onChange={handleChange} />\n <ListPlugin />\n <HistoryPlugin />\n <AutoFocusPlugin defaultSelection=\"rootStart\" />\n <EnterKeyPlugin onSubmit={handleSubmit} disabled={isSubmitDisabled || isAnyUploading} />\n <ClearEditorPlugin clearRef={clearEditorRef} />\n </div>\n </LexicalComposer>\n </div>\n\n {/* Send button */}\n <button\n type=\"button\"\n onClick={handleSubmit}\n disabled={!hasContent || isSubmitDisabled || isAnyUploading}\n className={cn(\n \"flex-shrink-0\",\n \"w-9 h-9 rounded-lg\",\n \"flex items-center justify-center\",\n \"bg-blue-500 text-white\",\n \"shadow-sm\",\n \"hover:bg-blue-600 hover:shadow-md hover:-translate-y-px\",\n \"active:translate-y-0 active:shadow-sm\",\n \"disabled:bg-gray-300 dark:disabled:bg-zinc-600 disabled:shadow-none disabled:translate-y-0 disabled:cursor-not-allowed\",\n \"transition-all duration-200\",\n )}\n >\n {isSubmitting || isAnyUploading ? <Loader2 size={16} className=\"animate-spin\" /> : <ArrowUp size={16} />}\n </button>\n </div>\n\n {/* Hidden file input */}\n {supportsAttachments && (\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n accept={allowedFileTypes.join(\",\")}\n onChange={handleFileSelect}\n className=\"hidden\"\n />\n )}\n </div>\n </div>\n );\n },\n);\n\nMessageComposer.displayName = \"MessageComposer\";\n\n// Re-export useComposer from primitives for backwards compatibility\nexport { useComposer } from \"../primitives\";\n","import { cn } from \"../utils/cn\";\n\nexport interface ScrollToBottomButtonProps {\n /** Whether the viewport is at the bottom (hides button when true) */\n isAtBottom: boolean;\n /** Callback to scroll to bottom */\n onScrollToBottom: () => void;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * A floating button that appears when the user has scrolled up,\n * allowing them to quickly jump back to the latest messages.\n * Fades in/out based on scroll position.\n */\nexport function ScrollToBottomButton({\n isAtBottom,\n onScrollToBottom,\n className,\n}: ScrollToBottomButtonProps) {\n return (\n <button\n type=\"button\"\n onClick={onScrollToBottom}\n aria-label=\"Scroll to bottom\"\n className={cn(\n \"absolute bottom-4 left-1/2 -translate-x-1/2 z-10\",\n \"flex items-center justify-center\",\n \"w-8 h-8 rounded-full\",\n \"bg-[var(--chat-bg,#ffffff)] border border-[var(--chat-border)]\",\n \"shadow-subtle hover:shadow-button-hover\",\n \"text-[var(--chat-text-subtle)] hover:text-[var(--chat-text)]\",\n \"transition-all duration-200\",\n isAtBottom\n ? \"opacity-0 pointer-events-none translate-y-2\"\n : \"opacity-100 translate-y-0\",\n className,\n )}\n >\n {/* ArrowDown icon — inline SVG to avoid lucide-react dependency */}\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M12 5v14\" />\n <path d=\"m19 12-7 7-7-7\" />\n </svg>\n </button>\n );\n}\n","import { forwardRef, type ReactNode } from \"react\";\nimport { useAutoScroll } from \"../hooks/use-auto-scroll\";\nimport { cn } from \"../utils/cn\";\nimport { ScrollToBottomButton } from \"./ScrollToBottomButton\";\n\nexport interface MessageListProps {\n\t/** Messages to render */\n\tchildren: ReactNode;\n\t/** Whether to auto-scroll to bottom */\n\tautoScroll?: boolean;\n\t/** Whether to show the scroll-to-bottom button */\n\tshowScrollToBottom?: boolean;\n\t/** Additional CSS classes */\n\tclassName?: string;\n}\n\n/**\n * Styled MessageList with scrolling, spacing, and scroll-to-bottom button.\n * Uses the enhanced useAutoScroll hook directly instead of going through\n * the primitive, since we need reactive isAtBottom for the button.\n */\nexport const MessageList = forwardRef<HTMLDivElement, MessageListProps>(\n\t({ children, autoScroll = true, showScrollToBottom = true, className }, ref) => {\n\t\tconst { containerRef, scrollToBottom, isAtBottom } = useAutoScroll<HTMLDivElement>({\n\t\t\tenabled: autoScroll,\n\t\t});\n\n\t\t// Merge refs\n\t\tconst mergedRef = (node: HTMLDivElement | null) => {\n\t\t\t(containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n\t\t\tif (typeof ref === \"function\") {\n\t\t\t\tref(node);\n\t\t\t} else if (ref) {\n\t\t\t\tref.current = node;\n\t\t\t}\n\t\t};\n\n\t\treturn (\n\t\t\t<div className=\"relative flex-1 overflow-hidden\">\n\t\t\t\t<div\n\t\t\t\t\tref={mergedRef}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"h-full overflow-y-auto\",\n\t\t\t\t\t\t\"flex flex-col gap-4 p-4\",\n\t\t\t\t\t\t\"chat-scrollbar\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t\t{showScrollToBottom && (\n\t\t\t\t\t<ScrollToBottomButton\n\t\t\t\t\t\tisAtBottom={isAtBottom}\n\t\t\t\t\t\tonScrollToBottom={() => scrollToBottom(\"smooth\")}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nMessageList.displayName = \"MessageList\";\n","export interface TimeMarkerProps {\n /** The label to display (e.g. \"Today\", \"Yesterday\", \"Monday\") */\n label: string;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Centered time separator between message groups.\n * Displays a label like \"Today\" or \"Yesterday\" with horizontal rules.\n */\nexport function TimeMarker({ label, className }: TimeMarkerProps) {\n return (\n <div\n className={`flex items-center gap-3 py-6 select-none ${className ?? \"\"}`}\n role=\"separator\"\n >\n <div className=\"flex-1 h-px bg-[var(--chat-border)]\" />\n <span className=\"text-xs font-medium text-[var(--chat-text-subtle)] whitespace-nowrap\">\n {label}\n </span>\n <div className=\"flex-1 h-px bg-[var(--chat-border)]\" />\n </div>\n );\n}\n","import { forwardRef } from \"react\";\nimport { TypingIndicator as TypingIndicatorPrimitive } from \"../primitives\";\nimport { cn } from \"../utils/cn\";\nimport { LoadingDots } from \"./LoadingDots\";\n\nexport interface TypingIndicatorProps {\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Styled TypingIndicator with animated dots.\n */\nexport const TypingIndicator = forwardRef<HTMLDivElement, TypingIndicatorProps>(\n ({ className }, ref) => {\n return (\n <TypingIndicatorPrimitive\n ref={ref}\n className={cn(\n \"inline-flex items-center gap-1\",\n \"px-4 py-3\",\n className\n )}\n >\n <LoadingDots size=\"small\" />\n </TypingIndicatorPrimitive>\n );\n }\n);\n\nTypingIndicator.displayName = \"TypingIndicator\";\n","import React, { useState, useRef, useEffect } from \"react\";\nimport { MoreVertical, X } from \"lucide-react\";\nimport { cn } from \"../utils/cn\";\n\nexport interface ChatHeaderAction {\n id: string;\n label: string;\n icon?: React.ReactNode;\n onClick: () => void;\n disabled?: boolean;\n}\n\nexport interface ChatHeaderProps {\n /** Assistant/chat title */\n title: string;\n /** Optional subtitle/description */\n subtitle?: string;\n /** Logo URL or element */\n logo?: string | React.ReactNode;\n /** Menu actions */\n actions?: ChatHeaderAction[];\n /** Show close button */\n showClose?: boolean;\n /** Close button handler */\n onClose?: () => void;\n /** Loading state */\n loading?: boolean;\n /** Additional class names */\n className?: string;\n /** Custom styles via CSS variables */\n style?: React.CSSProperties;\n}\n\nexport function ChatHeader({\n title,\n subtitle,\n logo,\n actions,\n showClose,\n onClose,\n loading,\n className,\n style,\n}: ChatHeaderProps) {\n const [menuOpen, setMenuOpen] = useState(false);\n const menuRef = useRef<HTMLDivElement>(null);\n const buttonRef = useRef<HTMLButtonElement>(null);\n\n // Close menu when clicking outside\n // Uses composedPath() to work correctly inside Shadow DOM\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n const path = event.composedPath();\n if (\n menuRef.current &&\n !path.includes(menuRef.current) &&\n buttonRef.current &&\n !path.includes(buttonRef.current)\n ) {\n setMenuOpen(false);\n }\n };\n\n if (menuOpen) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }\n }, [menuOpen]);\n\n return (\n <header\n className={cn(\n \"flex items-center justify-between gap-3\",\n \"px-4 py-3\",\n \"border-b border-[var(--chat-border)]\",\n \"bg-[var(--chat-header-bg,#ffffff)]\",\n className\n )}\n style={style}\n >\n {/* Left section: Logo and title */}\n <div className=\"flex items-center gap-3 flex-1 min-w-0\">\n {/* Logo */}\n {logo && (\n <div className=\"flex-shrink-0\">\n {typeof logo === \"string\" ? (\n <img\n src={logo}\n alt=\"\"\n className=\"w-10 h-10 rounded-lg object-contain\"\n />\n ) : (\n logo\n )}\n </div>\n )}\n\n {/* Title and subtitle */}\n <div className=\"flex flex-col min-w-0\">\n {loading ? (\n <div className=\"h-5 w-24 bg-gray-200 rounded animate-pulse\" />\n ) : (\n <h1 className=\"text-lg font-semibold text-[var(--chat-text)] truncate\">\n {title}\n </h1>\n )}\n {subtitle && (\n <p className=\"text-sm text-[var(--chat-text-subtle)] truncate\">\n {subtitle}\n </p>\n )}\n </div>\n </div>\n\n {/* Right section: Actions */}\n <div className=\"flex items-center gap-1 flex-shrink-0\">\n {/* Menu button */}\n {actions && actions.length > 0 && (\n <div className=\"relative\">\n <button\n ref={buttonRef}\n onClick={() => setMenuOpen(!menuOpen)}\n className={cn(\n \"p-2 rounded-lg\",\n \"text-[var(--chat-text-subtle)]\",\n \"hover:bg-[var(--chat-panel-bg)] hover:text-[var(--chat-text)]\",\n \"transition-colors duration-200\"\n )}\n aria-label=\"Menu\"\n aria-expanded={menuOpen}\n >\n <MoreVertical size={18} />\n </button>\n\n {/* Dropdown menu */}\n {menuOpen && (\n <div\n ref={menuRef}\n className={cn(\n \"absolute right-0 top-full mt-1 z-50\",\n \"min-w-[180px]\",\n \"bg-white rounded-lg shadow-lg\",\n \"border border-[var(--chat-border)]\",\n \"py-1\",\n \"animate-fade-in\"\n )}\n >\n {actions.map((action) => (\n <button\n key={action.id}\n onClick={() => {\n action.onClick();\n setMenuOpen(false);\n }}\n disabled={action.disabled}\n className={cn(\n \"w-full flex items-center gap-2 px-3 py-2\",\n \"text-sm text-left\",\n \"text-[var(--chat-text)]\",\n \"hover:bg-[var(--chat-panel-bg)]\",\n \"disabled:opacity-50 disabled:cursor-not-allowed\",\n \"transition-colors duration-150\"\n )}\n >\n {action.icon && (\n <span className=\"flex-shrink-0 text-[var(--chat-text-subtle)]\">\n {action.icon}\n </span>\n )}\n {action.label}\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* Close button */}\n {showClose && onClose && (\n <button\n onClick={onClose}\n className={cn(\n \"p-2 rounded-lg\",\n \"text-[var(--chat-text-subtle)]\",\n \"hover:bg-[var(--chat-panel-bg)] hover:text-[var(--chat-text)]\",\n \"transition-colors duration-200\"\n )}\n aria-label=\"Close\"\n >\n <X size={18} />\n </button>\n )}\n </div>\n </header>\n );\n}\n","import { cn } from \"../utils/cn\";\n\nexport type ToolStatus = \"running\" | \"complete\" | \"failed\" | \"pending\";\n\nexport interface ToolStatusIndicatorProps {\n /** Name of the tool */\n toolName: string;\n /** Current status */\n status: ToolStatus;\n /** Optional description of what the tool is doing */\n description?: string;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Inline status indicator for individual tool executions.\n * Shows tool name + status icon (spinner/check/X/clock).\n * Running state includes a subtle shimmer animation.\n */\nexport function ToolStatusIndicator({\n toolName,\n status,\n description,\n className,\n}: ToolStatusIndicatorProps) {\n return (\n <div\n className={cn(\n \"relative flex items-center gap-2 py-1 px-2 rounded-md text-sm overflow-hidden\",\n status === \"running\" && \"animate-shimmer\",\n className,\n )}\n >\n <StatusIcon status={status} />\n <span className=\"font-medium text-[var(--chat-text)]\">{toolName}</span>\n {description && (\n <span className=\"text-[var(--chat-text-subtle)] truncate\">\n {description}\n </span>\n )}\n </div>\n );\n}\n\nfunction StatusIcon({ status }: { status: ToolStatus }) {\n switch (status) {\n case \"running\":\n return (\n // Spinner\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"animate-spin text-[var(--chat-primary)]\"\n >\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n );\n case \"complete\":\n return (\n // Check circle\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-[var(--chat-secondary,#56C18A)]\"\n >\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\n <polyline points=\"22 4 12 14.01 9 11.01\" />\n </svg>\n );\n case \"failed\":\n return (\n // X circle\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-[var(--chat-error,#B1001B)]\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\n </svg>\n );\n case \"pending\":\n return (\n // Clock\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-[var(--chat-text-subtle)]\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12 6 12 12 16 14\" />\n </svg>\n );\n }\n}\n","import { AnimatePresence, motion } from \"framer-motion\";\nimport { forwardRef, ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport interface ChatLayoutProps {\n\t/** Whether the chat is in empty state (no messages) */\n\tisEmpty: boolean;\n\t/** Optional header rendered above the message area */\n\theader?: ReactNode;\n\t/** Content to display when isEmpty is true (typically a WelcomeScreen) */\n\twelcomeScreen?: ReactNode;\n\t/** The message list to display when not empty */\n\tmessageList?: ReactNode;\n\t/** The composer rendered at the bottom when not empty */\n\tcomposer?: ReactNode;\n\t/** Extra content between message list and composer (e.g. ClarificationPanel) */\n\tfooter?: ReactNode;\n\t/** Additional CSS classes */\n\tclassName?: string;\n}\n\n/**\n * Composable chat layout that handles the empty → active state transition\n * with a smooth crossfade animation.\n *\n * Replaces the repeated `AnimatePresence` + `motion.div` pattern found in\n * `centered-chat-layout.tsx` and `chat/[id]/page.tsx`.\n */\nexport const ChatLayout = forwardRef<HTMLDivElement, ChatLayoutProps>(\n\t({ isEmpty, header, welcomeScreen, messageList, composer, footer, className }, ref) => {\n\t\treturn (\n\t\t\t<div ref={ref} className={cn(\"relative h-full overflow-hidden flex flex-col min-h-0\", className)}>\n\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t{isEmpty && welcomeScreen ? (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tkey=\"welcome\"\n\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\t\t\t\tclassName=\"flex-1 flex flex-col overflow-hidden min-h-0\">\n\t\t\t\t\t\t\t{header}\n\t\t\t\t\t\t\t{welcomeScreen}\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tkey=\"active\"\n\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\t\t\ttransition={{ duration: 0.4 }}\n\t\t\t\t\t\t\tclassName=\"flex-1 flex flex-col overflow-hidden min-h-0\">\n\t\t\t\t\t\t\t{header}\n\n\t\t\t\t\t\t\t{/* Message list */}\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: -20 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\t\ttransition={{ duration: 0.4, delay: 0.1 }}\n\t\t\t\t\t\t\t\tclassName=\"flex-1 overflow-hidden flex flex-col min-h-0\">\n\t\t\t\t\t\t\t\t{messageList}\n\t\t\t\t\t\t\t</motion.div>\n\n\t\t\t\t\t\t\t{/* Footer slot (e.g. ClarificationPanel) */}\n\t\t\t\t\t\t\t{footer}\n\n\t\t\t\t\t\t\t{/* Composer */}\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 20 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\t\ttransition={{ duration: 0.4, delay: 0.2 }}>\n\t\t\t\t\t\t\t\t{composer}\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nChatLayout.displayName = \"ChatLayout\";\n","import { motion } from \"framer-motion\";\nimport { MessageCircleQuestion, Paperclip, X } from \"lucide-react\";\nimport { forwardRef, useCallback, useEffect, useRef, useState, type ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport interface WelcomeScreenProps {\n\t/** Rotating placeholder strings displayed in the input */\n\tplaceholders?: string[];\n\t/** Preset suggestion cards shown below the input */\n\tsuggestions?: string[];\n\t/** Called when the user submits a message via the built-in input */\n\tonSubmit?: (message: string, files?: File[]) => void;\n\t/** Called when the user clicks a suggestion card */\n\tonSuggestionClick?: (suggestion: string) => void;\n\t/** Welcome heading text */\n\twelcomeText?: string;\n\t/** Whether to show the attachment (paperclip) button */\n\tsupportsAttachments?: boolean;\n\t/** Override the default plain-text input with a custom composer (e.g. chat-ui MessageComposer) */\n\tcomposerSlot?: ReactNode;\n\t/** Additional CSS classes for the outer wrapper */\n\tclassName?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Rotating placeholder hook\n// ---------------------------------------------------------------------------\n\nfunction useRotatingPlaceholder(placeholders: string[], intervalMs = 3000) {\n\tconst [index, setIndex] = useState(0);\n\tconst intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n\tuseEffect(() => {\n\t\tif (placeholders.length <= 1) return;\n\n\t\tconst start = () => {\n\t\t\tintervalRef.current = setInterval(() => {\n\t\t\t\tsetIndex((prev) => (prev + 1) % placeholders.length);\n\t\t\t}, intervalMs);\n\t\t};\n\n\t\tconst handleVisibility = () => {\n\t\t\tif (document.visibilityState !== \"visible\") {\n\t\t\t\tif (intervalRef.current) {\n\t\t\t\t\tclearInterval(intervalRef.current);\n\t\t\t\t\tintervalRef.current = null;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tstart();\n\t\t\t}\n\t\t};\n\n\t\tstart();\n\t\tdocument.addEventListener(\"visibilitychange\", handleVisibility);\n\n\t\treturn () => {\n\t\t\tif (intervalRef.current) clearInterval(intervalRef.current);\n\t\t\tdocument.removeEventListener(\"visibilitychange\", handleVisibility);\n\t\t};\n\t}, [placeholders, intervalMs]);\n\n\treturn placeholders[index] ?? \"\";\n}\n\n// ---------------------------------------------------------------------------\n// Default inline input (simple textarea, no Lexical)\n// ---------------------------------------------------------------------------\n\nfunction DefaultInput({\n\tplaceholder,\n\tonSubmit,\n\tdisabled,\n\tsupportsAttachments,\n}: {\n\tplaceholder: string;\n\tonSubmit: (msg: string, files?: File[]) => void;\n\tdisabled?: boolean;\n\tsupportsAttachments?: boolean;\n}) {\n\tconst [value, setValue] = useState(\"\");\n\tconst [files, setFiles] = useState<File[]>([]);\n\tconst textareaRef = useRef<HTMLTextAreaElement>(null);\n\tconst fileInputRef = useRef<HTMLInputElement>(null);\n\n\t// Auto-resize\n\tuseEffect(() => {\n\t\tif (textareaRef.current) {\n\t\t\ttextareaRef.current.style.height = \"auto\";\n\t\t\ttextareaRef.current.style.height = textareaRef.current.scrollHeight + \"px\";\n\t\t}\n\t}, [value]);\n\n\tconst handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n\t\tif (e.key === \"Enter\" && !e.shiftKey) {\n\t\t\te.preventDefault();\n\t\t\thandleSubmit();\n\t\t}\n\t};\n\n\tconst handleSubmit = () => {\n\t\tif ((!value.trim() && files.length === 0) || disabled) return;\n\t\tonSubmit(value.trim(), files.length > 0 ? files : undefined);\n\t\tsetValue(\"\");\n\t\tsetFiles([]);\n\t};\n\n\tconst handleFileSelect = (e: React.ChangeEvent<HTMLInputElement>) => {\n\t\tif (e.target.files) {\n\t\t\tsetFiles((prev) => [...prev, ...Array.from(e.target.files!)]);\n\t\t}\n\t\te.target.value = \"\";\n\t};\n\n\tconst removeFile = (index: number) => {\n\t\tsetFiles((prev) => prev.filter((_, i) => i !== index));\n\t};\n\n\treturn (\n\t\t<form\n\t\t\tclassName={cn(\n\t\t\t\t\"w-full relative mx-auto\",\n\t\t\t\t\"bg-white dark:bg-zinc-800\",\n\t\t\t\t\"rounded-2xl overflow-hidden\",\n\t\t\t\t\"shadow-[0_8px_30px_rgba(0,0,0,0.08)]\",\n\t\t\t\t\"border border-gray-100 dark:border-zinc-700/50\",\n\t\t\t\t\"transition duration-200\",\n\t\t\t\t\"focus-within:shadow-[0_8px_30px_rgba(0,0,0,0.12)] focus-within:border-gray-200 dark:focus-within:border-zinc-600\",\n\t\t\t)}\n\t\t\tonSubmit={(e) => {\n\t\t\t\te.preventDefault();\n\t\t\t\thandleSubmit();\n\t\t\t}}>\n\t\t\t{/* File previews */}\n\t\t\t{files.length > 0 && (\n\t\t\t\t<div className=\"flex flex-wrap gap-2 px-4 pt-3\">\n\t\t\t\t\t{files.map((file, i) => (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={`${file.name}-${i}`}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex items-center gap-1.5 px-2.5 py-1 rounded-lg text-xs\",\n\t\t\t\t\t\t\t\t\"bg-gray-100 dark:bg-zinc-700 text-gray-600 dark:text-zinc-300\",\n\t\t\t\t\t\t\t)}>\n\t\t\t\t\t\t\t<span className=\"max-w-[120px] truncate\">{file.name}</span>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => removeFile(i)}\n\t\t\t\t\t\t\t\tclassName=\"flex-shrink-0 text-gray-400 hover:text-gray-600 dark:hover:text-zinc-200\">\n\t\t\t\t\t\t\t\t<X size={12} />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t{/* Paperclip button */}\n\t\t\t\t{supportsAttachments && (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={() => fileInputRef.current?.click()}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"ml-3 flex-shrink-0\",\n\t\t\t\t\t\t\t\"w-8 h-8 rounded-lg\",\n\t\t\t\t\t\t\t\"flex items-center justify-center\",\n\t\t\t\t\t\t\t\"text-gray-400 dark:text-zinc-500\",\n\t\t\t\t\t\t\t\"hover:bg-gray-100 dark:hover:bg-zinc-700\",\n\t\t\t\t\t\t\t\"hover:text-gray-600 dark:hover:text-zinc-300\",\n\t\t\t\t\t\t\t\"disabled:opacity-40 disabled:cursor-not-allowed\",\n\t\t\t\t\t\t\t\"transition-colors\",\n\t\t\t\t\t\t)}>\n\t\t\t\t\t\t<Paperclip size={16} />\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\n\t\t\t\t<textarea\n\t\t\t\t\tref={textareaRef}\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tonChange={(e) => setValue(e.target.value)}\n\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\trows={1}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"flex-1 text-sm sm:text-base\",\n\t\t\t\t\t\t\"border-none bg-transparent\",\n\t\t\t\t\t\t\"text-gray-900 dark:text-white\",\n\t\t\t\t\t\t\"focus:outline-none focus:ring-0 resize-none\",\n\t\t\t\t\t\t\"py-4 sm:py-5\",\n\t\t\t\t\t\tsupportsAttachments ? \"pl-1\" : \"pl-4 sm:pl-6\",\n\t\t\t\t\t\t\"placeholder:text-gray-400 dark:placeholder:text-zinc-500\",\n\t\t\t\t\t\t\"disabled:opacity-50 disabled:cursor-not-allowed\",\n\t\t\t\t\t\t\"max-h-[200px] overflow-y-auto\",\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\tdisabled={(!value.trim() && files.length === 0) || !!disabled}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"mr-3 flex-shrink-0\",\n\t\t\t\t\t\t\"w-9 h-9 rounded-lg\",\n\t\t\t\t\t\t\"flex items-center justify-center\",\n\t\t\t\t\t\t\"bg-gray-900 dark:bg-zinc-600 text-white dark:text-zinc-100\",\n\t\t\t\t\t\t\"shadow-sm\",\n\t\t\t\t\t\t\"hover:bg-gray-700 dark:hover:bg-zinc-500\",\n\t\t\t\t\t\t\"hover:shadow-md hover:-translate-y-px\",\n\t\t\t\t\t\t\"active:translate-y-0 active:shadow-sm\",\n\t\t\t\t\t\t\"disabled:bg-gray-300 dark:disabled:bg-zinc-700\",\n\t\t\t\t\t\t\"disabled:text-gray-500 dark:disabled:text-zinc-400\",\n\t\t\t\t\t\t\"disabled:shadow-none disabled:translate-y-0 disabled:cursor-not-allowed\",\n\t\t\t\t\t\t\"transition-all duration-200\",\n\t\t\t\t\t)}>\n\t\t\t\t\t<svg\n\t\t\t\t\t\twidth=\"16\"\n\t\t\t\t\t\theight=\"16\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\tstrokeLinejoin=\"round\">\n\t\t\t\t\t\t<path d=\"M12 19V5M5 12l7-7 7 7\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\n\t\t\t{/* Hidden file input */}\n\t\t\t{supportsAttachments && (\n\t\t\t\t<input ref={fileInputRef} type=\"file\" multiple onChange={handleFileSelect} className=\"hidden\" />\n\t\t\t)}\n\t\t</form>\n\t);\n}\n\n// ---------------------------------------------------------------------------\n// Suggestion card\n// ---------------------------------------------------------------------------\n\nfunction SuggestionCard({ text, onClick, index }: { text: string; onClick: () => void; index: number }) {\n\tconst buttonRef = useRef<HTMLButtonElement>(null);\n\tconst prefersReducedMotion = useRef(\n\t\ttypeof window !== \"undefined\" ? window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches : false,\n\t);\n\tconst [mousePos, setMousePos] = useState<{ x: number; y: number } | null>(null);\n\n\tconst handleMouseMove = useCallback(\n\t\t(e: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\tif (prefersReducedMotion.current) return;\n\t\t\tconst rect = e.currentTarget.getBoundingClientRect();\n\t\t\tsetMousePos({ x: e.clientX - rect.left, y: e.clientY - rect.top });\n\t\t},\n\t\t[],\n\t);\n\n\tconst handleMouseLeave = useCallback(() => {\n\t\tsetMousePos(null);\n\t}, []);\n\n\treturn (\n\t\t<motion.div\n\t\t\tinitial={{ opacity: 0, y: 20 }}\n\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\ttransition={{ delay: 0.2 + index * 0.1, duration: 0.4 }}>\n\t\t\t<button\n\t\t\t\tref={buttonRef}\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={onClick}\n\t\t\t\tonMouseMove={handleMouseMove}\n\t\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative overflow-hidden\",\n\t\t\t\t\t\"w-full text-left\",\n\t\t\t\t\t\"p-3\",\n\t\t\t\t\t\"cursor-pointer\",\n\t\t\t\t\t\"border border-gray-200 dark:border-zinc-700\",\n\t\t\t\t\t\"rounded-lg\",\n\t\t\t\t\t\"transition-all duration-200 ease-out\",\n\t\t\t\t\t\"bg-white dark:bg-zinc-800\",\n\t\t\t\t\t\"hover:border-gray-300 dark:hover:border-zinc-600\",\n\t\t\t\t\t\"hover:bg-gray-50 dark:hover:bg-zinc-750\",\n\t\t\t\t\t\"hover:shadow-sm\",\n\t\t\t\t\t\"active:bg-gray-100 dark:active:bg-zinc-700\",\n\t\t\t\t)}>\n\t\t\t\t{/* Mouse-tracking shimmer overlay */}\n\t\t\t\t{mousePos && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"pointer-events-none absolute inset-0 z-0\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackground: `radial-gradient(120px circle at ${mousePos.x}px ${mousePos.y}px, var(--chat-halo-primary, rgba(16,105,151,0.06)), transparent)`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t<div className=\"relative z-10 flex items-start gap-2.5\">\n\t\t\t\t\t<MessageCircleQuestion\n\t\t\t\t\t\tsize={16}\n\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\tclassName=\"mt-0.5 text-gray-400 dark:text-zinc-500 flex-shrink-0\"\n\t\t\t\t\t/>\n\t\t\t\t\t<span className=\"text-sm text-gray-600 dark:text-zinc-300 leading-relaxed flex-1\">{text}</span>\n\t\t\t\t</div>\n\t\t\t</button>\n\t\t</motion.div>\n\t);\n}\n\n// ---------------------------------------------------------------------------\n// WelcomeScreen\n// ---------------------------------------------------------------------------\n\n/**\n * Full-screen empty state with rotating placeholder input and suggestion cards.\n * Used as the welcome screen when no messages exist.\n *\n * By default renders a simple textarea input. Pass `composerSlot` to override\n * with e.g. the Lexical-based `MessageComposer`.\n */\nexport const WelcomeScreen = forwardRef<HTMLDivElement, WelcomeScreenProps>(\n\t(\n\t\t{\n\t\t\tplaceholders = [],\n\t\t\tsuggestions = [],\n\t\t\tonSubmit,\n\t\t\tonSuggestionClick,\n\t\t\twelcomeText = \"How can I help you today?\",\n\t\t\tsupportsAttachments,\n\t\t\tcomposerSlot,\n\t\t\tclassName,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst placeholder = useRotatingPlaceholder(placeholders);\n\n\t\tconst handleSuggestionClick = useCallback(\n\t\t\t(text: string) => {\n\t\t\t\tonSuggestionClick?.(text);\n\t\t\t},\n\t\t\t[onSuggestionClick],\n\t\t);\n\n\t\treturn (\n\t\t\t<div ref={ref} className={cn(\"relative overflow-hidden\", \"flex-1 flex items-center justify-center\", \"px-4 sm:px-6\", className)}>\n\t\t\t\t{/* Ambient background halo */}\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"pointer-events-none absolute inset-0 animate-welcome-halo\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackground: `radial-gradient(ellipse 60% 50% at 50% 45%, var(--chat-halo-primary, rgba(16,105,151,0.06)), var(--chat-halo-secondary, rgba(86,193,138,0.03)) 60%, transparent 100%)`,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\n\t\t\t\t<motion.div\n\t\t\t\t\tlayout\n\t\t\t\t\tinitial={{ scale: 0.95, y: 20, opacity: 0 }}\n\t\t\t\t\tanimate={{ scale: 1, y: 0, opacity: 1 }}\n\t\t\t\t\ttransition={{ type: \"spring\", stiffness: 200, damping: 25 }}\n\t\t\t\t\tclassName=\"relative w-full max-w-[800px] flex flex-col items-center gap-8\">\n\t\t\t\t\t{/* Welcome heading */}\n\t\t\t\t\t{welcomeText && (\n\t\t\t\t\t\t<motion.h2\n\t\t\t\t\t\t\tinitial={{ opacity: 0, y: -10 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\ttransition={{ delay: 0.1, duration: 0.4 }}\n\t\t\t\t\t\t\tclassName=\"text-2xl font-semibold text-gray-800 dark:text-gray-300 text-center\">\n\t\t\t\t\t\t\t{welcomeText}\n\t\t\t\t\t\t</motion.h2>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Composer with glow ring */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"w-full rounded-2xl\",\n\t\t\t\t\t\t\t\"transition-shadow duration-500\",\n\t\t\t\t\t\t\t\"shadow-[0_0_15px_rgba(16,105,151,0.08)]\",\n\t\t\t\t\t\t\t\"focus-within:shadow-[0_0_20px_rgba(16,105,151,0.15),0_0_40px_rgba(86,193,138,0.08)]\",\n\t\t\t\t\t\t\t\"dark:shadow-[0_0_15px_rgba(255,255,255,0.04)]\",\n\t\t\t\t\t\t\t\"dark:focus-within:shadow-[0_0_20px_rgba(255,255,255,0.08),0_0_40px_rgba(255,255,255,0.03)]\",\n\t\t\t\t\t\t)}>\n\t\t\t\t\t\t{composerSlot ?? (\n\t\t\t\t\t\t\t<DefaultInput\n\t\t\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\t\t\tonSubmit={(msg, files) => onSubmit?.(msg, files)}\n\t\t\t\t\t\t\t\tsupportsAttachments={supportsAttachments}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Suggestion cards */}\n\t\t\t\t\t{suggestions.length > 0 && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"grid gap-3 w-full max-w-[900px]\",\n\t\t\t\t\t\t\t\t\"grid-cols-1 sm:grid-cols-[repeat(auto-fit,minmax(250px,1fr))]\",\n\t\t\t\t\t\t\t)}>\n\t\t\t\t\t\t\t{suggestions.map((text, i) => (\n\t\t\t\t\t\t\t\t<SuggestionCard key={i} text={text} onClick={() => handleSuggestionClick(text)} index={i} />\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</motion.div>\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nWelcomeScreen.displayName = \"WelcomeScreen\";\n"]}
|