@paymanai/payman-ask-sdk 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -568,10 +568,16 @@ function MessageList({
568
568
  onExecutionTraceClick,
569
569
  className
570
570
  }) {
571
- const messagesEndRef = react.useRef(null);
571
+ const messagesContainerRef = react.useRef(null);
572
+ const scrollToBottom = react.useCallback(() => {
573
+ const el = messagesContainerRef.current;
574
+ if (el) {
575
+ el.scrollTop = el.scrollHeight;
576
+ }
577
+ }, []);
572
578
  react.useEffect(() => {
573
- messagesEndRef.current?.scrollIntoView({ behavior: "smooth" });
574
- }, [messages]);
579
+ if (messages.length > 0) scrollToBottom();
580
+ }, [messages, scrollToBottom]);
575
581
  if (isLoading) {
576
582
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex-1 overflow-y-auto min-h-0", className), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-4 space-y-4", children: Array.from({ length: 6 }).map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
577
583
  MessageRowSkeleton,
@@ -617,33 +623,37 @@ function MessageList({
617
623
  }
618
624
  );
619
625
  }
620
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex-1 overflow-y-auto min-h-0", className), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn(
621
- "space-y-4",
622
- layout === "centered" ? "max-w-2xl mx-auto px-4 py-6" : "p-4"
623
- ), children: [
624
- messages.map((message) => /* @__PURE__ */ jsxRuntime.jsx(
625
- MessageRow,
626
- {
627
- message,
628
- stage,
629
- animated,
630
- showAgentName,
631
- agentName,
632
- showAvatars,
633
- showUserAvatar,
634
- showAssistantAvatar,
635
- layout,
636
- showTimestamps,
637
- showExecutionSteps,
638
- showStreamingDot,
639
- streamingStepsText,
640
- completedStepsText,
641
- onExecutionTraceClick
642
- },
643
- message.id
644
- )),
645
- /* @__PURE__ */ jsxRuntime.jsx("div", { ref: messagesEndRef })
646
- ] }) });
626
+ return /* @__PURE__ */ jsxRuntime.jsx(
627
+ "div",
628
+ {
629
+ ref: messagesContainerRef,
630
+ className: cn("flex-1 overflow-y-auto min-h-0", className),
631
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(
632
+ "space-y-4",
633
+ layout === "centered" ? "max-w-2xl mx-auto px-4 py-6" : "p-4"
634
+ ), children: messages.map((message) => /* @__PURE__ */ jsxRuntime.jsx(
635
+ MessageRow,
636
+ {
637
+ message,
638
+ stage,
639
+ animated,
640
+ showAgentName,
641
+ agentName,
642
+ showAvatars,
643
+ showUserAvatar,
644
+ showAssistantAvatar,
645
+ layout,
646
+ showTimestamps,
647
+ showExecutionSteps,
648
+ showStreamingDot,
649
+ streamingStepsText,
650
+ completedStepsText,
651
+ onExecutionTraceClick
652
+ },
653
+ message.id
654
+ )) })
655
+ }
656
+ );
647
657
  }
648
658
  function PaymanChat({
649
659
  config,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/contexts/PaymanChatContext.tsx","../src/utils/cn.ts","../src/utils/formatDate.ts","../src/components/ChatInput/index.tsx","../src/components/AgentMessage/index.tsx","../src/components/UserMessage/index.tsx","../src/components/MessageRow/index.tsx","../src/components/MessageRowSkeleton/index.tsx","../src/components/MessageList/index.tsx","../src/components/PaymanChat/index.tsx"],"names":["createContext","useContext","twMerge","clsx","useRef","useEffect","jsx","jsxs","motion","Pause","Send","useState","Bot","Loader2","X","ReactMarkdown","remarkGfm","ChevronUp","ChevronDown","AnimatePresence","XCircle","Check","Binoculars","User","useChat","useMemo"],"mappings":"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","file":"index.js","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { MessageDisplay } from \"../types\";\n\nexport interface PaymanChatContextValue {\n\t/**\n\t * Clear all messages and reset the chat\n\t */\n\tresetSession: () => void;\n\n\t/**\n\t * Clear all messages without resetting session ID\n\t */\n\tclearMessages: () => void;\n\n\t/**\n\t * Cancel current streaming operation\n\t */\n\tcancelStream: () => void;\n\n\t/**\n\t * Get current session ID\n\t */\n\tgetSessionId: () => string | undefined;\n\n\t/**\n\t * Get all messages\n\t */\n\tgetMessages: () => MessageDisplay[];\n\n\t/**\n\t * Check if currently waiting for response\n\t */\n\tisWaitingForResponse: boolean;\n}\n\nexport const PaymanChatContext = createContext<\n\tPaymanChatContextValue | undefined\n>(undefined);\n\n/**\n * Hook to access PaymanChat controls from parent components\n * \n * @example\n * ```tsx\n * function MyComponent() {\n * const chat = usePaymanChat();\n * \n * return (\n * <>\n * <button onClick={chat.resetSession}>Reset</button>\n * <button onClick={chat.clearMessages}>Clear</button>\n * </>\n * );\n * }\n * ```\n */\nexport function usePaymanChat(): PaymanChatContextValue {\n\tconst context = useContext(PaymanChatContext);\n\tif (!context) {\n\t\tthrow new Error(\"usePaymanChat must be used within a PaymanChat component\");\n\t}\n\treturn context;\n}\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Utility function to merge Tailwind CSS classes\n */\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","/**\n * Format a timestamp to a readable date/time string\n */\nexport function formatDate(timestamp: string | Date): string {\n\tconst date = typeof timestamp === \"string\" ? new Date(timestamp) : timestamp;\n\t\n\tconst now = new Date();\n\tconst diffMs = now.getTime() - date.getTime();\n\tconst diffMins = Math.floor(diffMs / 60000);\n\tconst diffHours = Math.floor(diffMs / 3600000);\n\tconst diffDays = Math.floor(diffMs / 86400000);\n\n\t// Less than a minute\n\tif (diffMins < 1) {\n\t\treturn \"Just now\";\n\t}\n\n\t// Less than an hour\n\tif (diffMins < 60) {\n\t\treturn `${diffMins}m ago`;\n\t}\n\n\t// Less than a day\n\tif (diffHours < 24) {\n\t\treturn `${diffHours}h ago`;\n\t}\n\n\t// Less than a week\n\tif (diffDays < 7) {\n\t\treturn `${diffDays}d ago`;\n\t}\n\n\t// Format as date\n\treturn date.toLocaleDateString(\"en-US\", {\n\t\tmonth: \"short\",\n\t\tday: \"numeric\",\n\t\tyear: date.getFullYear() !== now.getFullYear() ? \"numeric\" : undefined,\n\t});\n}\n","import { motion } from \"framer-motion\";\nimport { Send, Pause } from \"lucide-react\";\nimport { useEffect, useRef } from \"react\";\nimport type { ChatInputProps } from \"../../types\";\nimport { cn } from \"../../utils\";\n\nexport function ChatInput({\n\tvalue,\n\tonChange,\n\tonSend,\n\tonPause,\n\tdisabled = false,\n\tplaceholder = \"Type your message...\",\n\tisWaitingForResponse = false,\n\thasSelectedSession = true,\n\tisSessionParamsConfigured = true,\n\tonClick,\n\tclassName,\n}: ChatInputProps) {\n\tconst textareaRef = useRef<HTMLTextAreaElement>(null);\n\n\t// Auto-resize textarea\n\tuseEffect(() => {\n\t\tif (textareaRef.current) {\n\t\t\ttextareaRef.current.style.height = \"auto\";\n\t\t\tconst scrollHeight = textareaRef.current.scrollHeight;\n\t\t\tconst maxHeight = 200;\n\t\t\ttextareaRef.current.style.height = `${Math.min(scrollHeight, maxHeight)}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\tonSend();\n\t\t}\n\t};\n\n\tconst isInputDisabled = disabled || isWaitingForResponse;\n\tconst showPauseButton = isWaitingForResponse && onPause;\n\n\tconst getPlaceholder = () => {\n\t\tif (!hasSelectedSession) {\n\t\t\treturn \"Select a version to start chatting\";\n\t\t}\n\t\tif (!isSessionParamsConfigured) {\n\t\t\treturn \"Configure User ID and User Label in Session Params\";\n\t\t}\n\t\treturn placeholder;\n\t};\n\n\treturn (\n\t\t<div className={cn(\"flex-shrink-0 p-4 w-full\", className)} style={{ flexShrink: 0 }}>\n\t\t\t<div className=\"flex justify-center w-full\">\n\t\t\t\t<div className=\"relative w-full px-0\" style={{ maxWidth: \"672px\" }}>\n\t\t\t\t<motion.div\n\t\t\t\t\tinitial={false}\n\t\t\t\t\tclassName=\"relative flex items-end overflow-hidden transition-colors bg-input border border-border shadow-sm\"\n\t\t\t\t\tstyle={{ borderRadius: \"24px\" }}\n\t\t\t\t>\n\t\t\t\t\t<textarea\n\t\t\t\t\t\tref={textareaRef}\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\tonChange={(e) => onChange(e.target.value)}\n\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\tonClick={onClick}\n\t\t\t\t\t\tdisabled={isInputDisabled}\n\t\t\t\t\t\tplaceholder={getPlaceholder()}\n\t\t\t\t\t\tclassName=\"bg-transparent text-foreground focus:outline-none resize-none overflow-y-auto disabled:opacity-50 disabled:cursor-not-allowed w-full text-sm placeholder:text-muted-foreground\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tminHeight: \"48px\",\n\t\t\t\t\t\t\tmaxHeight: \"200px\",\n\t\t\t\t\t\t\tpadding: \"12px 48px 12px 16px\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\trows={1}\n\t\t\t\t\t/>\n\t\t\t\t{showPauseButton ? (\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={onPause}\n\t\t\t\t\t\tclassName=\"flex items-center justify-center flex-shrink-0 transition-all bg-primary text-primary-foreground hover:bg-primary/90\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\tbottom: \"8px\",\n\t\t\t\t\t\t\tright: \"8px\",\n\t\t\t\t\t\t\tpadding: \"8px\",\n\t\t\t\t\t\t\tborderRadius: \"9999px\",\n\t\t\t\t\t\t\twidth: \"32px\",\n\t\t\t\t\t\t\theight: \"32px\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\taria-label=\"Pause request\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Pause className=\"w-4 h-4\" />\n\t\t\t\t\t</button>\n\t\t\t\t) : (\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={onSend}\n\t\t\t\t\t\tdisabled={isInputDisabled || !value.trim()}\n\t\t\t\t\t\tclassName=\"flex items-center justify-center flex-shrink-0 transition-all bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 disabled:cursor-not-allowed\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\tbottom: \"8px\",\n\t\t\t\t\t\t\tright: \"8px\",\n\t\t\t\t\t\t\tpadding: \"8px\",\n\t\t\t\t\t\t\tborderRadius: \"9999px\",\n\t\t\t\t\t\t\twidth: \"32px\",\n\t\t\t\t\t\t\theight: \"32px\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\taria-label=\"Send message\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Send className=\"w-4 h-4\" />\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t</motion.div>\n\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { AnimatePresence, motion } from \"framer-motion\";\nimport { Binoculars, Bot, ChevronDown, ChevronUp, Check, X, Loader2, XCircle } from \"lucide-react\";\nimport { useState, useEffect } from \"react\";\nimport ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport type { AgentMessageProps } from \"../../types\";\nimport { cn } from \"../../utils\";\n\nexport function AgentMessage({\n\tmessage,\n\tanimated = false,\n\tshowAgentName = false,\n\tagentName = \"Assistant\",\n\tshowAvatar = false,\n\tlayout = \"full-width\",\n\tshowTimestamp = false,\n\tshowExecutionSteps = false,\n\tshowStreamingDot = false,\n\tstreamingStepsText,\n\tcompletedStepsText,\n\tonExecutionTraceClick,\n}: AgentMessageProps) {\n\tconst isStreaming = message.isStreaming ?? false;\n\tconst hasSteps = message.steps && message.steps.length > 0;\n\tconst hasTraceData = !!(message.tracingData || message.executionId) && !isStreaming;\n\tconst isError = message.isError ?? (message.streamProgress === \"error\" || !!message.errorDetails);\n\tconst isCancelled = message.isCancelled ?? false;\n\tconst currentExecutingStepId = message.currentExecutingStepId;\n\t\n\t// Steps are expanded during streaming, stay expanded after completion\n\tconst [isStepsExpanded, setIsStepsExpanded] = useState(isStreaming && hasSteps);\n\t\n\t// Update expanded state when streaming starts - keep expanded after completion\n\tuseEffect(() => {\n\t\tif (isStreaming && hasSteps) {\n\t\t\tsetIsStepsExpanded(true);\n\t\t}\n\t\t// Don't collapse when streaming stops - keep it expanded\n\t}, [isStreaming, hasSteps]);\n\t\n\t// Calculate total elapsed time from steps\n\tconst totalElapsedMs = hasSteps\n\t\t? message.steps.reduce((sum, step) => sum + (step.elapsedMs || 0), 0)\n\t\t: 0;\n\n\tconst currentMessage = message.currentMessage;\n\t// Process content to handle literal \\n characters\n\tconst rawContent = message.streamingContent || message.content || \"\";\n\tconst content = rawContent.replace(/\\\\n/g, '\\n');\n\n\t// Format steps text\n\tconst getStreamingStepsText = (expanded: boolean) => {\n\t\tconst defaultText = `${expanded ? \"Hide\" : \"View\"} progress ({count} ${message.steps!.length === 1 ? \"step\" : \"steps\"})`;\n\t\tconst text = streamingStepsText || defaultText;\n\t\tconst prefix = expanded ? \"Hide\" : \"View\";\n\t\treturn text.replace(\"{count}\", message.steps!.length.toString()).replace(/^(View|Hide)/, prefix);\n\t};\n\n\tconst getCompletedStepsText = (expanded: boolean) => {\n\t\t// If custom text is provided, use it\n\t\tif (completedStepsText) {\n\t\t\tconst result = completedStepsText\n\t\t\t\t.replace(\"{count}\", message.steps!.length.toString())\n\t\t\t\t.replace(\"{time}\", (totalElapsedMs / 1000).toFixed(1));\n\t\t\t\n\t\t\t// Always show the same text regardless of expansion state\n\t\t\treturn result;\n\t\t}\n\t\t\n\t\t// Fall back to default \"View execution steps\" format\n\t\tconst prefix = expanded ? \"Hide\" : \"View\";\n\t\tconst stepWord = message.steps!.length === 1 ? \"step\" : \"steps\";\n\t\treturn `${prefix} execution steps (${message.steps!.length} ${stepWord})`;\n\t};\n\n\tconst messageContent = (\n\t\t<div className=\"flex gap-4 justify-start items-start w-full\">\n\t\t\t{/* Avatar or Streaming Dot Indicator - Only show if enabled */}\n\t\t\t{showAvatar && (\n\t\t\t\t<div className=\"h-8 w-8 shrink-0 mt-0.5\">\n\t\t\t\t\t{isStreaming && showStreamingDot ? (\n\t\t\t\t\t\t// Animated dot indicator while streaming\n\t\t\t\t\t\t<div className=\"h-8 w-8 flex items-center justify-center\">\n\t\t\t\t\t\t\t<div className=\"relative\">\n\t\t\t\t\t\t\t\t<div className=\"h-2 w-2 rounded-full bg-primary animate-pulse\" />\n\t\t\t\t\t\t\t\t<div className=\"absolute inset-0 h-2 w-2 rounded-full bg-primary animate-ping opacity-75\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t// Avatar after completion or if streaming dot is disabled\n\t\t\t\t\t\t<div className=\"h-8 w-8 rounded-full bg-muted flex items-center justify-center\">\n\t\t\t\t\t\t\t<Bot className=\"h-4 w-4 text-muted-foreground\" />\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{/* Message Container */}\n\t\t<div className={cn(\n\t\t\t\"min-w-0 flex flex-col\",\n\t\t\tlayout === \"centered\" ? \"max-w-[85%]\" : (showAvatar ? \"max-w-[85%]\" : \"max-w-[80%]\")\n\t\t)}>\n\t\t\t{/* Message Bubble */}\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"overflow-hidden w-full\",\n\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t? cn(\n\t\t\t\t\t\t\t\"bg-white border transition-all duration-200 p-3\",\n\t\t\t\t\t\t\thasSteps ? \"rounded-t-2xl rounded-tl-sm border-b-0\" : \"rounded-2xl rounded-tl-sm\",\n\t\t\t\t\t\t\tmessage.isStreaming ? \"border-neutral-300 shadow-sm\" : \"border-neutral-200\",\n\t\t\t\t\t\t\tisError && \"border-red-200\"\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: cn(\n\t\t\t\t\t\t\t\"p-3\",\n\t\t\t\t\t\t\thasSteps && !isStreaming ? \"rounded-t-md\" : \"rounded-md\",\n\t\t\t\t\t\t\tisError ? \"bg-destructive/10 border border-destructive/30\" : \"bg-muted\"\n\t\t\t\t\t\t)\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t\t{/* Agent Name */}\n\t\t\t\t\t{showAgentName && (\n\t\t\t\t\t\t<p className=\"text-xs font-semibold mb-1.5 opacity-60\">\n\t\t\t\t\t\t\t{agentName}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Message Content */}\n\t\t\t\t\t<div className={cn(\"text-sm leading-relaxed\", layout === \"centered\" ? \"p-4\" : \"\", showAgentName && \"mt-1\")}>\n\t\t\t\t\t\t{isStreaming && !content ? (\n\t\t\t\t\t\t\t!showAvatar ? (\n\t\t\t\t\t\t\t\t// Without avatars (yaak): show spinner\n\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-3\">\n\t\t\t\t\t\t\t\t\t<Loader2 className=\"w-4 h-4 text-primary animate-spin flex-shrink-0\" />\n\t\t\t\t\t\t\t\t\t<span className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t{currentMessage || (\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center\">\n\t\t\t\t\t\t\t\t\t\t\t\tThinking\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"ml-1 inline-flex\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"thinking-dot\">.</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"thinking-dot\">.</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"thinking-dot\">.</span>\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</span>\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\t// With avatars (paygent-central): no spinner in message (dot avatar handles it)\n\t\t\t\t\t\t\t\t<span className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t{currentMessage || (\n\t\t\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center\">\n\t\t\t\t\t\t\t\t\t\t\tThinking\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"ml-1 inline-flex\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"thinking-dot\">.</span>\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"thinking-dot\">.</span>\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"thinking-dot\">.</span>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) : isCancelled && !content ? (\n\t\t\t\t\t\t\t// Show cancelled state only when message is cancelled and has no content\n\t\t\t\t\t\t\t!showAvatar ? (\n\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-3\">\n\t\t\t\t\t\t\t\t\t<X className=\"w-4 h-4 text-muted-foreground flex-shrink-0\" />\n\t\t\t\t\t\t\t\t\t<span className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t{currentMessage || \"The request was stopped.\"}\n\t\t\t\t\t\t\t\t\t</span>\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\t<span className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t{currentMessage || \"The request was stopped.\"}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div className={cn(\n\t\t\t\t\t\t\t\t\"prose prose-sm dark:prose-invert max-w-none\",\n\t\t\t\t\t\t\t\tisError && \"text-destructive\"\n\t\t\t\t\t\t\t)}>\n\t\t\t\t\t\t\t\t<ReactMarkdown\n\t\t\t\t\t\t\t\t\tremarkPlugins={[remarkGfm]}\n\t\t\t\t\t\t\t\t\tcomponents={{\n\t\t\t\t\t\t\t\t\t\tp: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<p className={cn(\"mb-3 last:mb-0 text-sm leading-relaxed\", isError ? \"text-destructive\" : \"text-foreground\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tcode: ({ className: codeClassName, children }) => {\n\t\t\t\t\t\t\t\t\t\t\tconst isInline = !codeClassName;\n\t\t\t\t\t\t\t\t\t\t\treturn isInline ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<code className={cn(\"px-1.5 py-0.5 rounded text-xs font-mono break-all\", isError ? \"bg-destructive/10 text-destructive\" : \"bg-muted\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t\t</code>\n\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t<code className={cn(\"block p-3 rounded text-xs font-mono overflow-x-auto my-2 whitespace-pre\", isError ? \"bg-destructive/10 text-destructive\" : \"bg-muted\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t\t</code>\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\tpre: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<pre className={cn(\"my-2 overflow-x-auto max-w-full\", isError && \"bg-destructive/10\")}>{children}</pre>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tul: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<ul className={cn(\"list-disc ml-4 mb-3 space-y-1 text-sm\", isError && \"text-destructive\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tol: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<ol className={cn(\"list-decimal ml-4 mb-3 space-y-1 text-sm\", isError && \"text-destructive\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</ol>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tli: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<li className={cn(\"text-sm leading-relaxed\", isError ? \"text-destructive\" : \"text-foreground\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\th1: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<h1 className={cn(\"text-lg font-semibold mb-2 mt-4 first:mt-0\", isError ? \"text-destructive\" : \"text-foreground\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</h1>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\th2: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<h2 className={cn(\"text-base font-semibold mb-2 mt-3 first:mt-0\", isError ? \"text-destructive\" : \"text-foreground\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\th3: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<h3 className={cn(\"text-sm font-semibold mb-1 mt-2 first:mt-0\", isError ? \"text-destructive\" : \"text-foreground\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tstrong: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<strong className={cn(\"font-semibold\", isError ? \"text-destructive\" : \"text-foreground\")}>{children}</strong>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tem: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<em className={cn(\"italic\", isError ? \"text-destructive\" : \"text-foreground\")}>{children}</em>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tblockquote: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<blockquote className=\"border-l-4 border-border pl-4 my-2 italic text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</blockquote>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\thr: () => <hr className=\"my-4 border-border\" />,\n\t\t\t\t\t\t\t\t\t\ta: ({ href, children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\t\t\thref={href}\n\t\t\t\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\"underline underline-offset-2\", isError ? \"text-destructive hover:text-destructive/80\" : \"text-primary hover:text-primary/80\")}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\ttable: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"relative w-full overflow-x-auto my-4 -mx-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t<table className=\"min-w-full caption-bottom text-sm border border-border rounded-md\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t\t</table>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tthead: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<thead className=\"[&_tr]:border-b bg-muted/50\">\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</thead>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\ttbody: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<tbody className=\"[&_tr:last-child]:border-0\">\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</tbody>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\ttr: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<tr className=\"hover:bg-muted/50 border-b transition-colors\">\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tth: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<th className=\"text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap\">\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\ttd: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<td className=\"p-2 align-middle text-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{content || (isStreaming ? \"Thinking...\" : (isCancelled ? \"The request was stopped.\" : (isError ? \"Oops, something went wrong. Please try again.\" : \"\")))}\n\t\t\t\t\t\t\t\t</ReactMarkdown>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t{/* Execution Steps - Only show when NOT streaming, if enabled, and NO error */}\n\t\t\t{showExecutionSteps && hasSteps && !isStreaming && !isError && (\n\t\t\t\t<div className={cn(\n\t\t\t\t\t\"overflow-hidden\",\n\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t? \"bg-white border border-t-0 border-neutral-200 rounded-b-2xl\"\n\t\t\t\t\t\t: \"bg-muted border-t border-border/30 rounded-b-md\"\n\t\t\t\t)}>\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={() => setIsStepsExpanded(!isStepsExpanded)}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"w-full px-4 py-2 flex items-center justify-between text-xs transition-colors\",\n\t\t\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t\t\t? \"text-neutral-500 hover:bg-neutral-50\"\n\t\t\t\t\t\t\t\t: \"text-muted-foreground hover:bg-muted/70\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t\t<span>{getCompletedStepsText(isStepsExpanded)}</span>\n\t\t\t\t\t\t\t{isStepsExpanded ? (\n\t\t\t\t\t\t\t\t<ChevronUp className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ChevronDown className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t{/* Execution steps list */}\n\t\t\t\t\t\t{isStepsExpanded && (\n\t\t\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\tinitial={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\t\t\t\tanimate={{ height: \"auto\", opacity: 1 }}\n\t\t\t\t\t\t\t\t\texit={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\t\t\t\tclassName=\"px-4 pb-3 pt-2 space-y-2 bg-background/30\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{message.steps!.map((step) => {\n\t\t\t\t\t\t\t\t\t\t// Check if step is currently executing\n\t\t\t\t\t\t\t\t\t\tconst isCurrentlyExecuting = step.id === currentExecutingStepId && step.status === \"in_progress\" && isStreaming && !isCancelled;\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<div key={step.id} className=\"flex items-start gap-2 text-xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t{/* Currently executing: show loading spinner */}\n\t\t\t\t\t\t\t\t\t\t\t\t{isCurrentlyExecuting && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 text-primary animate-spin shrink-0 mt-0.5\" />\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\t{/* Cancelled/pending: show XCircle */}\n\t\t\t\t\t\t\t\t\t\t\t\t{step.status === \"pending\" && isCancelled && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<XCircle className=\"h-3 w-3 text-muted-foreground shrink-0 mt-0.5\" />\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\t{/* Pending (not cancelled): show loading spinner */}\n\t\t\t\t\t\t\t\t\t\t\t\t{step.status === \"pending\" && !isCancelled && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 text-primary animate-spin shrink-0 mt-0.5\" />\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\t{/* In progress (not currently executing): show loading spinner */}\n\t\t\t\t\t\t\t\t\t\t\t\t{step.status === \"in_progress\" && !isCurrentlyExecuting && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 text-primary animate-spin shrink-0 mt-0.5\" />\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\t{step.status === \"completed\" && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Check className=\"h-3 w-3 text-primary shrink-0 mt-0.5\" />\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\t{step.status === \"error\" && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<X className=\"h-3 w-3 text-destructive shrink-0 mt-0.5\" />\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\t<div className=\"flex-1 min-w-0\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"text-muted-foreground break-words\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstep.status === \"error\" && \"text-destructive\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{step.message}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{step.elapsedMs && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"ml-1.5 text-[10px] opacity-50\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t({(step.elapsedMs / 1000).toFixed(1)}s)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t{/* Streaming Steps Progress - Always show during streaming */}\n\t\t\t{hasSteps && isStreaming && (\n\t\t\t\t<div className={cn(\n\t\t\t\t\t\"overflow-hidden\",\n\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t? \"bg-white border border-t-0 border-neutral-300 rounded-b-2xl\"\n\t\t\t\t\t\t: \"bg-muted border-t border-border/30 rounded-b-md\"\n\t\t\t\t)}>\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={() => setIsStepsExpanded(!isStepsExpanded)}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"w-full px-4 py-2 flex items-center justify-between text-xs transition-colors\",\n\t\t\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t\t\t? \"text-neutral-500 hover:bg-neutral-50\"\n\t\t\t\t\t\t\t\t: \"text-muted-foreground hover:bg-muted/70\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t\t<span>{getStreamingStepsText(isStepsExpanded)}</span>\n\t\t\t\t\t\t\t{isStepsExpanded ? (\n\t\t\t\t\t\t\t\t<ChevronUp className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ChevronDown className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t{/* Streaming steps list */}\n\t\t\t\t\t\t{isStepsExpanded && (\n\t\t\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\tinitial={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\t\t\t\tanimate={{ height: \"auto\", opacity: 1 }}\n\t\t\t\t\t\t\t\t\texit={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\t\t\t\tclassName=\"px-4 pb-3 pt-2 space-y-2 bg-background/30\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{message.steps!.map((step) => {\n\t\t\t\t\t\t\t\t\t\t// Check if step is currently executing\n\t\t\t\t\t\t\t\t\t\tconst isCurrentlyExecuting = step.id === currentExecutingStepId && step.status === \"in_progress\" && isStreaming && !isCancelled;\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<div key={step.id} className=\"flex items-start gap-2 text-xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t{/* Currently executing: show loading spinner */}\n\t\t\t\t\t\t\t\t\t\t\t\t{isCurrentlyExecuting && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 text-primary animate-spin shrink-0 mt-0.5\" />\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\t{/* Cancelled/pending: show XCircle */}\n\t\t\t\t\t\t\t\t\t\t\t\t{step.status === \"pending\" && isCancelled && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<XCircle className=\"h-3 w-3 text-muted-foreground shrink-0 mt-0.5\" />\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\t{/* Pending (not cancelled): show loading spinner */}\n\t\t\t\t\t\t\t\t\t\t\t\t{step.status === \"pending\" && !isCancelled && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 text-primary animate-spin shrink-0 mt-0.5\" />\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\t{/* In progress (not currently executing): show loading spinner */}\n\t\t\t\t\t\t\t\t\t\t\t\t{step.status === \"in_progress\" && !isCurrentlyExecuting && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 text-primary animate-spin shrink-0 mt-0.5\" />\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\t{step.status === \"completed\" && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Check className=\"h-3 w-3 text-primary shrink-0 mt-0.5\" />\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\t{step.status === \"error\" && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<X className=\"h-3 w-3 text-destructive shrink-0 mt-0.5\" />\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\t<div className=\"flex-1 min-w-0\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"text-muted-foreground break-words\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstep.status === \"error\" && \"text-destructive\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{step.message}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{step.elapsedMs && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"ml-1.5 text-[10px] opacity-50\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t({(step.elapsedMs / 1000).toFixed(1)}s)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* Trace Icon - Positioned next to message */}\n\t\t\t{hasTraceData && onExecutionTraceClick && (\n\t\t\t\t<button\n\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\tonExecutionTraceClick({\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\ttracingData: message.tracingData,\n\t\t\t\t\t\t\texecutionId: message.executionId,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\tclassName=\"mt-0.5 p-2 bg-white/5 border border-white/20 rounded-lg shadow-sm hover:bg-white/10 hover:border-highlight transition-colors duration-200 flex-shrink-0\"\n\t\t\t\t\ttitle=\"View execution trace\"\n\t\t\t\t\taria-label=\"View execution trace\"\n\t\t\t\t>\n\t\t\t\t\t<Binoculars className=\"w-4 h-4 text-foreground\" />\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n\n\tif (animated) {\n\t\treturn (\n\t\t\t<motion.div\n\t\t\t\tinitial={{ opacity: 0, y: 10 }}\n\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t>\n\t\t\t\t{messageContent}\n\t\t\t</motion.div>\n\t\t);\n\t}\n\n\treturn messageContent;\n}\n","import { motion } from \"framer-motion\";\nimport { User } from \"lucide-react\";\nimport type { UserMessageProps } from \"../../types\";\nimport { formatDate } from \"../../utils\";\n\nexport function UserMessage({ message, animated = false, showAvatar = false }: UserMessageProps) {\n\tconst content = (\n\t\t<div className=\"flex gap-4 justify-end w-full\">\n\t\t\t{/* Message Container */}\n\t\t\t<div className=\"max-w-[85%] min-w-0 flex flex-col items-end\">\n\t\t\t\t<div className=\"rounded-lg p-3 bg-primary text-primary-foreground\">\n\t\t\t\t\t<p className=\"text-sm whitespace-pre-wrap break-words\">\n\t\t\t\t\t\t{message.content}\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t\t<p className=\"text-[10px] mt-1 text-muted-foreground\">\n\t\t\t\t\t{formatDate(message.timestamp)}\n\t\t\t\t</p>\n\t\t\t</div>\n\n\t\t\t{/* Avatar - Only show if enabled */}\n\t\t\t{showAvatar && (\n\t\t\t\t<div className=\"h-8 w-8 shrink-0 mt-0.5\">\n\t\t\t\t\t<div className=\"h-8 w-8 rounded-full bg-primary/10 flex items-center justify-center\">\n\t\t\t\t\t\t<User className=\"h-4 w-4 text-primary\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n\n\tif (animated) {\n\t\treturn (\n\t\t\t<motion.div\n\t\t\t\tinitial={{ opacity: 0, y: 10 }}\n\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\ttransition={{ duration: 0.3, ease: \"easeOut\" }}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</motion.div>\n\t\t);\n\t}\n\n\treturn content;\n}\n","import type { MessageRowProps } from \"../../types\";\nimport { AgentMessage } from \"../AgentMessage\";\nimport { UserMessage } from \"../UserMessage\";\n\nexport function MessageRow({\n\tmessage,\n\tstage = \"DEV\",\n\tanimated = false,\n\tshowAgentName = false,\n\tagentName = \"Paygent\",\n\tshowAvatars = false,\n\tshowUserAvatar,\n\tshowAssistantAvatar,\n\tlayout = \"full-width\",\n\tshowTimestamps = false,\n\tshowExecutionSteps = false,\n\tshowStreamingDot = false,\n\tstreamingStepsText,\n\tcompletedStepsText,\n\tonExecutionTraceClick,\n}: MessageRowProps) {\n\t// Determine actual avatar visibility\n\tconst actualShowUserAvatar = showUserAvatar !== undefined ? showUserAvatar : showAvatars;\n\tconst actualShowAssistantAvatar = showAssistantAvatar !== undefined ? showAssistantAvatar : showAvatars;\n\tif (message.role === \"user\") {\n\t\treturn <UserMessage message={message} animated={animated} showAvatar={actualShowUserAvatar} />;\n\t}\n\n\treturn (\n\t\t<AgentMessage\n\t\t\tmessage={message}\n\t\t\tstage={stage}\n\t\t\tanimated={animated}\n\t\t\tshowAgentName={showAgentName}\n\t\t\tagentName={agentName}\n\t\t\tshowAvatar={actualShowAssistantAvatar}\n\t\t\tlayout={layout}\n\t\t\tshowTimestamp={showTimestamps}\n\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\tcompletedStepsText={completedStepsText}\n\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t/>\n\t);\n}\n","interface MessageRowSkeletonProps {\n\tisRightAligned?: boolean;\n}\n\nexport function MessageRowSkeleton({\n\tisRightAligned = false,\n}: MessageRowSkeletonProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={`flex ${isRightAligned ? \"justify-end\" : \"justify-start\"} animate-pulse`}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={`flex flex-col ${isRightAligned ? \"items-end\" : \"items-start\"} w-full max-w-[80%]`}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={`rounded-lg p-3 ${\n\t\t\t\t\t\tisRightAligned ? \"bg-primary/20\" : \"bg-muted\"\n\t\t\t\t\t} w-full`}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"space-y-2\">\n\t\t\t\t\t\t<div className=\"h-3 bg-muted-foreground/20 rounded w-3/4\" />\n\t\t\t\t\t\t<div className=\"h-3 bg-muted-foreground/20 rounded w-full\" />\n\t\t\t\t\t\t<div className=\"h-3 bg-muted-foreground/20 rounded w-5/6\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"h-2 bg-muted-foreground/20 rounded w-16 mt-1\" />\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { motion } from \"framer-motion\";\nimport { Bot } from \"lucide-react\";\nimport { useEffect, useRef } from \"react\";\nimport type { MessageListProps } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { MessageRow } from \"../MessageRow\";\nimport { MessageRowSkeleton } from \"../MessageRowSkeleton\";\n\nexport function MessageList({\n\tmessages,\n\tisLoading = false,\n\temptyStateText = \"What can I help with?\",\n\tshowEmptyStateIcon = true,\n\tlayout = \"full-width\",\n\tshowTimestamps = false,\n\tstage = \"DEV\",\n\tanimated = false,\n\tshowAgentName = false,\n\tagentName = \"Paygent\",\n\tshowAvatars = false,\n\tshowUserAvatar,\n\tshowAssistantAvatar,\n\tshowExecutionSteps = false,\n\tshowStreamingDot = false,\n\tstreamingStepsText,\n\tcompletedStepsText,\n\tonExecutionTraceClick,\n\tclassName,\n}: MessageListProps) {\n\tconst messagesEndRef = useRef<HTMLDivElement>(null);\n\n\t// Auto-scroll to bottom when new messages arrive\n\tuseEffect(() => {\n\t\tmessagesEndRef.current?.scrollIntoView({ behavior: \"smooth\" });\n\t}, [messages]);\n\n\tif (isLoading) {\n\t\treturn (\n\t\t\t<div className={cn(\"flex-1 overflow-y-auto min-h-0\", className)}>\n\t\t\t\t<div className=\"p-4 space-y-4\">\n\t\t\t\t\t{Array.from({ length: 6 }).map((_, index) => (\n\t\t\t\t\t\t<MessageRowSkeleton\n\t\t\t\t\t\t\tkey={`skeleton-${index}`}\n\t\t\t\t\t\t\tisRightAligned={index % 3 === 0}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (messages.length === 0) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex-1 overflow-y-auto min-h-0 flex flex-col items-center justify-center h-full text-center p-4\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<motion.div\n\t\t\t\t\tinitial={{ opacity: 0, y: 20 }}\n\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\ttransition={{\n\t\t\t\t\t\tduration: 0.5,\n\t\t\t\t\t\tease: \"easeOut\",\n\t\t\t\t\t}}\n\t\t\t\t\tclassName=\"flex flex-col items-center gap-4\"\n\t\t\t\t>\n\t\t\t\t\t{/* Bot Icon - Optional */}\n\t\t\t\t\t{showEmptyStateIcon && (\n\t\t\t\t\t\t<div className=\"flex h-12 w-12 items-center justify-center\">\n\t\t\t\t\t\t\t<Bot className=\"h-6 w-6 text-muted-foreground\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t\n\t\t\t\t\t{/* Empty state text - supports multiline with \\n */}\n\t\t\t\t\t{emptyStateText.split('\\n').map((line, index) => (\n\t\t\t\t\t\t<h2\n\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\tindex === 0 \n\t\t\t\t\t\t\t\t\t? layout === \"centered\" \n\t\t\t\t\t\t\t\t\t\t? \"text-2xl font-semibold text-primary\" \n\t\t\t\t\t\t\t\t\t\t: \"text-2xl font-semibold text-foreground\"\n\t\t\t\t\t\t\t\t\t: \"text-sm text-muted-foreground\"\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{line}\n\t\t\t\t\t\t</h2>\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\treturn (\n\t\t<div className={cn(\"flex-1 overflow-y-auto min-h-0\", className)}>\n\t\t\t<div className={cn(\n\t\t\t\t\"space-y-4\",\n\t\t\t\tlayout === \"centered\" ? \"max-w-2xl mx-auto px-4 py-6\" : \"p-4\"\n\t\t\t)}>\n\t\t\t\t{messages.map((message) => (\n\t\t\t\t\t<MessageRow\n\t\t\t\t\t\tkey={message.id}\n\t\t\t\t\t\tmessage={message}\n\t\t\t\t\t\tstage={stage}\n\t\t\t\t\t\tanimated={animated}\n\t\t\t\t\t\tshowAgentName={showAgentName}\n\t\t\t\t\t\tagentName={agentName}\n\t\t\t\t\t\tshowAvatars={showAvatars}\n\t\t\t\t\t\tshowUserAvatar={showUserAvatar}\n\t\t\t\t\t\tshowAssistantAvatar={showAssistantAvatar}\n\t\t\t\t\t\tlayout={layout}\n\t\t\t\t\t\tshowTimestamps={showTimestamps}\n\t\t\t\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\t\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\t\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\t\t\t\tcompletedStepsText={completedStepsText}\n\t\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t\t<div ref={messagesEndRef} />\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { useMemo, useState } from \"react\";\nimport { useChat } from \"@paymanai/payman-typescript-ask-sdk\";\nimport { PaymanChatContext } from \"../../contexts\";\nimport type { PaymanChatProps } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { ChatInput } from \"../ChatInput\";\nimport { MessageList } from \"../MessageList\";\n\nexport function PaymanChat({\n\tconfig,\n\tcallbacks = {},\n\tclassName,\n\tstyle,\n\tchildren,\n}: PaymanChatProps) {\n\tconst [inputValue, setInputValue] = useState(\"\");\n\n\t// Use the chat hook - it handles everything internally\n\tconst {\n\t\tmessages,\n\t\tsendMessage,\n\t\tisWaitingForResponse,\n\t\tresetSession,\n\t\tclearMessages,\n\t\tcancelStream,\n\t\tgetSessionId,\n\t\tgetMessages,\n\t} = useChat(config, callbacks);\n\n\t// Create context value with control methods\n\tconst contextValue = useMemo(\n\t\t() => ({\n\t\t\tresetSession,\n\t\t\tclearMessages,\n\t\t\tcancelStream,\n\t\t\tgetSessionId,\n\t\t\tgetMessages,\n\t\t\tisWaitingForResponse,\n\t\t}),\n\t\t[\n\t\t\tresetSession,\n\t\t\tclearMessages,\n\t\t\tcancelStream,\n\t\t\tgetSessionId,\n\t\t\tgetMessages,\n\t\t\tisWaitingForResponse,\n\t\t]\n\t);\n\n\t// Extract callbacks\n\tconst { onExecutionTraceClick } = callbacks;\n\n\t// Extract config with hardcoded UI defaults\n\tconst {\n\t\tplaceholder = \"Type your message...\",\n\t\temptyStateText = \"What can I help with?\",\n\t\tsessionParams,\n\t\tdisableInput = false,\n\t\thasAskPermission = true,\n\t\tstreamingStepsText,\n\t\tcompletedStepsText,\n\t\tshowAvatars = false,\n\t\tshowUserAvatar,\n\t\tshowAssistantAvatar,\n\t\tshowAgentName = true,\n\t\tagentName = \"Assistant\",\n\t\tshowExecutionSteps = true,\n\t\tshowStreamingDot = true,\n\t\tlayout = \"full-width\",\n\t\tshowTimestamps = false,\n\t\tanimated = true,\n\t\tisChatDisabled = false,\n\t\tdisabledComponent,\n\t\tshowEmptyStateIcon = true,\n\t} = config;\n\n\t// Check if session params are configured\n\tconst isSessionParamsConfigured = useMemo(() => {\n\t\tif (!sessionParams) return false;\n\t\treturn !!(sessionParams.id?.trim() && sessionParams.name?.trim());\n\t}, [sessionParams?.id, sessionParams?.name]);\n\n\tconst handleSend = () => {\n\t\tif (inputValue.trim() && !disableInput && isSessionParamsConfigured) {\n\t\t\tsendMessage(inputValue.trim());\n\t\t\tsetInputValue(\"\");\n\t\t}\n\t};\n\n\tconst isInputDisabled =\n\t\tisWaitingForResponse || !isSessionParamsConfigured || disableInput;\n\n\t// If chat is disabled, show custom component or default disabled UI\n\tif (isChatDisabled) {\n\t\tif (disabledComponent) {\n\t\t\treturn (\n\t\t\t\t<PaymanChatContext.Provider value={contextValue}>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"bg-card border border-border rounded-lg overflow-hidden flex flex-col flex-[4]\",\n\t\t\t\t\t\t\tclassName\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle={style}\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* Custom header can be passed as children */}\n\t\t\t\t\t\t{children}\n\t\t\t\t\t\t{/* Custom disabled component */}\n\t\t\t\t\t\t{disabledComponent}\n\t\t\t\t\t</div>\n\t\t\t\t</PaymanChatContext.Provider>\n\t\t\t);\n\t\t}\n\n\t\t// Default disabled UI\n\t\treturn (\n\t\t\t<PaymanChatContext.Provider value={contextValue}>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"bg-card border border-border rounded-lg overflow-hidden flex flex-col flex-[4]\",\n\t\t\t\t\t\tclassName\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={style}\n\t\t\t\t>\n\t\t\t\t\t{/* Custom header can be passed as children */}\n\t\t\t\t\t{children}\n\t\t\t\t\t{/* Default disabled state */}\n\t\t\t\t\t<div className=\"flex-1 flex items-center justify-center p-4\">\n\t\t\t\t\t\t<div className=\"text-center\">\n\t\t\t\t\t\t\t<div className=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\t\t\tChat is currently disabled\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</PaymanChatContext.Provider>\n\t\t);\n\t}\n\n\treturn (\n\t\t<PaymanChatContext.Provider value={contextValue}>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"bg-card border border-border rounded-lg overflow-hidden flex flex-col flex-[4]\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t\tstyle={style}\n\t\t\t>\n\t\t\t\t{/* Custom header can be passed as children */}\n\t\t\t\t{children}\n\n\t\t\t\t{/* Messages Area */}\n\t\t\t<MessageList\n\t\t\t\tmessages={messages}\n\t\t\t\tisLoading={false}\n\t\t\t\temptyStateText={emptyStateText}\n\t\t\t\tshowEmptyStateIcon={showEmptyStateIcon}\n\t\t\t\tlayout={layout}\n\t\t\t\tshowTimestamps={showTimestamps}\n\t\t\t\tstage={config.stage || \"DEV\"}\n\t\t\t\tanimated={animated}\n\t\t\t\tshowAgentName={showAgentName}\n\t\t\t\tagentName={agentName}\n\t\t\t\tshowAvatars={showAvatars}\n\t\t\t\tshowUserAvatar={showUserAvatar}\n\t\t\t\tshowAssistantAvatar={showAssistantAvatar}\n\t\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\t\tcompletedStepsText={completedStepsText}\n\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t/>\n\n\t\t\t{/* Chat Input Area - Only show if user has ask permission */}\n\t\t\t{hasAskPermission && (\n\t\t\t\t<ChatInput\n\t\t\t\t\tvalue={inputValue}\n\t\t\t\t\tonChange={setInputValue}\n\t\t\t\t\tonSend={handleSend}\n\t\t\t\t\tonPause={cancelStream}\n\t\t\t\t\tdisabled={isInputDisabled}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\tisWaitingForResponse={isWaitingForResponse}\n\t\t\t\t\thasSelectedSession={true}\n\t\t\t\t\tisSessionParamsConfigured={isSessionParamsConfigured}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t</div>\n\t\t</PaymanChatContext.Provider>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["../src/contexts/PaymanChatContext.tsx","../src/utils/cn.ts","../src/utils/formatDate.ts","../src/components/ChatInput/index.tsx","../src/components/AgentMessage/index.tsx","../src/components/UserMessage/index.tsx","../src/components/MessageRow/index.tsx","../src/components/MessageRowSkeleton/index.tsx","../src/components/MessageList/index.tsx","../src/components/PaymanChat/index.tsx"],"names":["createContext","useContext","twMerge","clsx","useRef","useEffect","jsx","jsxs","motion","Pause","Send","useState","Bot","Loader2","X","ReactMarkdown","remarkGfm","ChevronUp","ChevronDown","AnimatePresence","XCircle","Check","Binoculars","User","useCallback","useChat","useMemo"],"mappings":"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","file":"index.js","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { MessageDisplay } from \"../types\";\n\nexport interface PaymanChatContextValue {\n\t/**\n\t * Clear all messages and reset the chat\n\t */\n\tresetSession: () => void;\n\n\t/**\n\t * Clear all messages without resetting session ID\n\t */\n\tclearMessages: () => void;\n\n\t/**\n\t * Cancel current streaming operation\n\t */\n\tcancelStream: () => void;\n\n\t/**\n\t * Get current session ID\n\t */\n\tgetSessionId: () => string | undefined;\n\n\t/**\n\t * Get all messages\n\t */\n\tgetMessages: () => MessageDisplay[];\n\n\t/**\n\t * Check if currently waiting for response\n\t */\n\tisWaitingForResponse: boolean;\n}\n\nexport const PaymanChatContext = createContext<\n\tPaymanChatContextValue | undefined\n>(undefined);\n\n/**\n * Hook to access PaymanChat controls from parent components\n * \n * @example\n * ```tsx\n * function MyComponent() {\n * const chat = usePaymanChat();\n * \n * return (\n * <>\n * <button onClick={chat.resetSession}>Reset</button>\n * <button onClick={chat.clearMessages}>Clear</button>\n * </>\n * );\n * }\n * ```\n */\nexport function usePaymanChat(): PaymanChatContextValue {\n\tconst context = useContext(PaymanChatContext);\n\tif (!context) {\n\t\tthrow new Error(\"usePaymanChat must be used within a PaymanChat component\");\n\t}\n\treturn context;\n}\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Utility function to merge Tailwind CSS classes\n */\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","/**\n * Format a timestamp to a readable date/time string\n */\nexport function formatDate(timestamp: string | Date): string {\n\tconst date = typeof timestamp === \"string\" ? new Date(timestamp) : timestamp;\n\t\n\tconst now = new Date();\n\tconst diffMs = now.getTime() - date.getTime();\n\tconst diffMins = Math.floor(diffMs / 60000);\n\tconst diffHours = Math.floor(diffMs / 3600000);\n\tconst diffDays = Math.floor(diffMs / 86400000);\n\n\t// Less than a minute\n\tif (diffMins < 1) {\n\t\treturn \"Just now\";\n\t}\n\n\t// Less than an hour\n\tif (diffMins < 60) {\n\t\treturn `${diffMins}m ago`;\n\t}\n\n\t// Less than a day\n\tif (diffHours < 24) {\n\t\treturn `${diffHours}h ago`;\n\t}\n\n\t// Less than a week\n\tif (diffDays < 7) {\n\t\treturn `${diffDays}d ago`;\n\t}\n\n\t// Format as date\n\treturn date.toLocaleDateString(\"en-US\", {\n\t\tmonth: \"short\",\n\t\tday: \"numeric\",\n\t\tyear: date.getFullYear() !== now.getFullYear() ? \"numeric\" : undefined,\n\t});\n}\n","import { motion } from \"framer-motion\";\nimport { Send, Pause } from \"lucide-react\";\nimport { useEffect, useRef } from \"react\";\nimport type { ChatInputProps } from \"../../types\";\nimport { cn } from \"../../utils\";\n\nexport function ChatInput({\n\tvalue,\n\tonChange,\n\tonSend,\n\tonPause,\n\tdisabled = false,\n\tplaceholder = \"Type your message...\",\n\tisWaitingForResponse = false,\n\thasSelectedSession = true,\n\tisSessionParamsConfigured = true,\n\tonClick,\n\tclassName,\n}: ChatInputProps) {\n\tconst textareaRef = useRef<HTMLTextAreaElement>(null);\n\n\t// Auto-resize textarea\n\tuseEffect(() => {\n\t\tif (textareaRef.current) {\n\t\t\ttextareaRef.current.style.height = \"auto\";\n\t\t\tconst scrollHeight = textareaRef.current.scrollHeight;\n\t\t\tconst maxHeight = 200;\n\t\t\ttextareaRef.current.style.height = `${Math.min(scrollHeight, maxHeight)}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\tonSend();\n\t\t}\n\t};\n\n\tconst isInputDisabled = disabled || isWaitingForResponse;\n\tconst showPauseButton = isWaitingForResponse && onPause;\n\n\tconst getPlaceholder = () => {\n\t\tif (!hasSelectedSession) {\n\t\t\treturn \"Select a version to start chatting\";\n\t\t}\n\t\tif (!isSessionParamsConfigured) {\n\t\t\treturn \"Configure User ID and User Label in Session Params\";\n\t\t}\n\t\treturn placeholder;\n\t};\n\n\treturn (\n\t\t<div className={cn(\"flex-shrink-0 p-4 w-full\", className)} style={{ flexShrink: 0 }}>\n\t\t\t<div className=\"flex justify-center w-full\">\n\t\t\t\t<div className=\"relative w-full px-0\" style={{ maxWidth: \"672px\" }}>\n\t\t\t\t<motion.div\n\t\t\t\t\tinitial={false}\n\t\t\t\t\tclassName=\"relative flex items-end overflow-hidden transition-colors bg-input border border-border shadow-sm\"\n\t\t\t\t\tstyle={{ borderRadius: \"24px\" }}\n\t\t\t\t>\n\t\t\t\t\t<textarea\n\t\t\t\t\t\tref={textareaRef}\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\tonChange={(e) => onChange(e.target.value)}\n\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\tonClick={onClick}\n\t\t\t\t\t\tdisabled={isInputDisabled}\n\t\t\t\t\t\tplaceholder={getPlaceholder()}\n\t\t\t\t\t\tclassName=\"bg-transparent text-foreground focus:outline-none resize-none overflow-y-auto disabled:opacity-50 disabled:cursor-not-allowed w-full text-sm placeholder:text-muted-foreground\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tminHeight: \"48px\",\n\t\t\t\t\t\t\tmaxHeight: \"200px\",\n\t\t\t\t\t\t\tpadding: \"12px 48px 12px 16px\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\trows={1}\n\t\t\t\t\t/>\n\t\t\t\t{showPauseButton ? (\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={onPause}\n\t\t\t\t\t\tclassName=\"flex items-center justify-center flex-shrink-0 transition-all bg-primary text-primary-foreground hover:bg-primary/90\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\tbottom: \"8px\",\n\t\t\t\t\t\t\tright: \"8px\",\n\t\t\t\t\t\t\tpadding: \"8px\",\n\t\t\t\t\t\t\tborderRadius: \"9999px\",\n\t\t\t\t\t\t\twidth: \"32px\",\n\t\t\t\t\t\t\theight: \"32px\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\taria-label=\"Pause request\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Pause className=\"w-4 h-4\" />\n\t\t\t\t\t</button>\n\t\t\t\t) : (\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={onSend}\n\t\t\t\t\t\tdisabled={isInputDisabled || !value.trim()}\n\t\t\t\t\t\tclassName=\"flex items-center justify-center flex-shrink-0 transition-all bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 disabled:cursor-not-allowed\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\tbottom: \"8px\",\n\t\t\t\t\t\t\tright: \"8px\",\n\t\t\t\t\t\t\tpadding: \"8px\",\n\t\t\t\t\t\t\tborderRadius: \"9999px\",\n\t\t\t\t\t\t\twidth: \"32px\",\n\t\t\t\t\t\t\theight: \"32px\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\taria-label=\"Send message\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Send className=\"w-4 h-4\" />\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t</motion.div>\n\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { AnimatePresence, motion } from \"framer-motion\";\nimport { Binoculars, Bot, ChevronDown, ChevronUp, Check, X, Loader2, XCircle } from \"lucide-react\";\nimport { useState, useEffect } from \"react\";\nimport ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport type { AgentMessageProps } from \"../../types\";\nimport { cn } from \"../../utils\";\n\nexport function AgentMessage({\n\tmessage,\n\tanimated = false,\n\tshowAgentName = false,\n\tagentName = \"Assistant\",\n\tshowAvatar = false,\n\tlayout = \"full-width\",\n\tshowTimestamp = false,\n\tshowExecutionSteps = false,\n\tshowStreamingDot = false,\n\tstreamingStepsText,\n\tcompletedStepsText,\n\tonExecutionTraceClick,\n}: AgentMessageProps) {\n\tconst isStreaming = message.isStreaming ?? false;\n\tconst hasSteps = message.steps && message.steps.length > 0;\n\tconst hasTraceData = !!(message.tracingData || message.executionId) && !isStreaming;\n\tconst isError = message.isError ?? (message.streamProgress === \"error\" || !!message.errorDetails);\n\tconst isCancelled = message.isCancelled ?? false;\n\tconst currentExecutingStepId = message.currentExecutingStepId;\n\t\n\t// Steps are expanded during streaming, stay expanded after completion\n\tconst [isStepsExpanded, setIsStepsExpanded] = useState(isStreaming && hasSteps);\n\t\n\t// Update expanded state when streaming starts - keep expanded after completion\n\tuseEffect(() => {\n\t\tif (isStreaming && hasSteps) {\n\t\t\tsetIsStepsExpanded(true);\n\t\t}\n\t\t// Don't collapse when streaming stops - keep it expanded\n\t}, [isStreaming, hasSteps]);\n\t\n\t// Calculate total elapsed time from steps\n\tconst totalElapsedMs = hasSteps\n\t\t? message.steps.reduce((sum, step) => sum + (step.elapsedMs || 0), 0)\n\t\t: 0;\n\n\tconst currentMessage = message.currentMessage;\n\t// Process content to handle literal \\n characters\n\tconst rawContent = message.streamingContent || message.content || \"\";\n\tconst content = rawContent.replace(/\\\\n/g, '\\n');\n\n\t// Format steps text\n\tconst getStreamingStepsText = (expanded: boolean) => {\n\t\tconst defaultText = `${expanded ? \"Hide\" : \"View\"} progress ({count} ${message.steps!.length === 1 ? \"step\" : \"steps\"})`;\n\t\tconst text = streamingStepsText || defaultText;\n\t\tconst prefix = expanded ? \"Hide\" : \"View\";\n\t\treturn text.replace(\"{count}\", message.steps!.length.toString()).replace(/^(View|Hide)/, prefix);\n\t};\n\n\tconst getCompletedStepsText = (expanded: boolean) => {\n\t\t// If custom text is provided, use it\n\t\tif (completedStepsText) {\n\t\t\tconst result = completedStepsText\n\t\t\t\t.replace(\"{count}\", message.steps!.length.toString())\n\t\t\t\t.replace(\"{time}\", (totalElapsedMs / 1000).toFixed(1));\n\t\t\t\n\t\t\t// Always show the same text regardless of expansion state\n\t\t\treturn result;\n\t\t}\n\t\t\n\t\t// Fall back to default \"View execution steps\" format\n\t\tconst prefix = expanded ? \"Hide\" : \"View\";\n\t\tconst stepWord = message.steps!.length === 1 ? \"step\" : \"steps\";\n\t\treturn `${prefix} execution steps (${message.steps!.length} ${stepWord})`;\n\t};\n\n\tconst messageContent = (\n\t\t<div className=\"flex gap-4 justify-start items-start w-full\">\n\t\t\t{/* Avatar or Streaming Dot Indicator - Only show if enabled */}\n\t\t\t{showAvatar && (\n\t\t\t\t<div className=\"h-8 w-8 shrink-0 mt-0.5\">\n\t\t\t\t\t{isStreaming && showStreamingDot ? (\n\t\t\t\t\t\t// Animated dot indicator while streaming\n\t\t\t\t\t\t<div className=\"h-8 w-8 flex items-center justify-center\">\n\t\t\t\t\t\t\t<div className=\"relative\">\n\t\t\t\t\t\t\t\t<div className=\"h-2 w-2 rounded-full bg-primary animate-pulse\" />\n\t\t\t\t\t\t\t\t<div className=\"absolute inset-0 h-2 w-2 rounded-full bg-primary animate-ping opacity-75\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t// Avatar after completion or if streaming dot is disabled\n\t\t\t\t\t\t<div className=\"h-8 w-8 rounded-full bg-muted flex items-center justify-center\">\n\t\t\t\t\t\t\t<Bot className=\"h-4 w-4 text-muted-foreground\" />\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{/* Message Container */}\n\t\t<div className={cn(\n\t\t\t\"min-w-0 flex flex-col\",\n\t\t\tlayout === \"centered\" ? \"max-w-[85%]\" : (showAvatar ? \"max-w-[85%]\" : \"max-w-[80%]\")\n\t\t)}>\n\t\t\t{/* Message Bubble */}\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"overflow-hidden w-full\",\n\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t? cn(\n\t\t\t\t\t\t\t\"bg-white border transition-all duration-200 p-3\",\n\t\t\t\t\t\t\thasSteps ? \"rounded-t-2xl rounded-tl-sm border-b-0\" : \"rounded-2xl rounded-tl-sm\",\n\t\t\t\t\t\t\tmessage.isStreaming ? \"border-neutral-300 shadow-sm\" : \"border-neutral-200\",\n\t\t\t\t\t\t\tisError && \"border-red-200\"\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: cn(\n\t\t\t\t\t\t\t\"p-3\",\n\t\t\t\t\t\t\thasSteps && !isStreaming ? \"rounded-t-md\" : \"rounded-md\",\n\t\t\t\t\t\t\tisError ? \"bg-destructive/10 border border-destructive/30\" : \"bg-muted\"\n\t\t\t\t\t\t)\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t\t{/* Agent Name */}\n\t\t\t\t\t{showAgentName && (\n\t\t\t\t\t\t<p className=\"text-xs font-semibold mb-1.5 opacity-60\">\n\t\t\t\t\t\t\t{agentName}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Message Content */}\n\t\t\t\t\t<div className={cn(\"text-sm leading-relaxed\", layout === \"centered\" ? \"p-4\" : \"\", showAgentName && \"mt-1\")}>\n\t\t\t\t\t\t{isStreaming && !content ? (\n\t\t\t\t\t\t\t!showAvatar ? (\n\t\t\t\t\t\t\t\t// Without avatars (yaak): show spinner\n\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-3\">\n\t\t\t\t\t\t\t\t\t<Loader2 className=\"w-4 h-4 text-primary animate-spin flex-shrink-0\" />\n\t\t\t\t\t\t\t\t\t<span className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t{currentMessage || (\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center\">\n\t\t\t\t\t\t\t\t\t\t\t\tThinking\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"ml-1 inline-flex\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"thinking-dot\">.</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"thinking-dot\">.</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"thinking-dot\">.</span>\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</span>\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\t// With avatars (paygent-central): no spinner in message (dot avatar handles it)\n\t\t\t\t\t\t\t\t<span className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t{currentMessage || (\n\t\t\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center\">\n\t\t\t\t\t\t\t\t\t\t\tThinking\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"ml-1 inline-flex\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"thinking-dot\">.</span>\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"thinking-dot\">.</span>\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"thinking-dot\">.</span>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) : isCancelled && !content ? (\n\t\t\t\t\t\t\t// Show cancelled state only when message is cancelled and has no content\n\t\t\t\t\t\t\t!showAvatar ? (\n\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-3\">\n\t\t\t\t\t\t\t\t\t<X className=\"w-4 h-4 text-muted-foreground flex-shrink-0\" />\n\t\t\t\t\t\t\t\t\t<span className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t{currentMessage || \"The request was stopped.\"}\n\t\t\t\t\t\t\t\t\t</span>\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\t<span className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t{currentMessage || \"The request was stopped.\"}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div className={cn(\n\t\t\t\t\t\t\t\t\"prose prose-sm dark:prose-invert max-w-none\",\n\t\t\t\t\t\t\t\tisError && \"text-destructive\"\n\t\t\t\t\t\t\t)}>\n\t\t\t\t\t\t\t\t<ReactMarkdown\n\t\t\t\t\t\t\t\t\tremarkPlugins={[remarkGfm]}\n\t\t\t\t\t\t\t\t\tcomponents={{\n\t\t\t\t\t\t\t\t\t\tp: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<p className={cn(\"mb-3 last:mb-0 text-sm leading-relaxed\", isError ? \"text-destructive\" : \"text-foreground\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tcode: ({ className: codeClassName, children }) => {\n\t\t\t\t\t\t\t\t\t\t\tconst isInline = !codeClassName;\n\t\t\t\t\t\t\t\t\t\t\treturn isInline ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<code className={cn(\"px-1.5 py-0.5 rounded text-xs font-mono break-all\", isError ? \"bg-destructive/10 text-destructive\" : \"bg-muted\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t\t</code>\n\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t<code className={cn(\"block p-3 rounded text-xs font-mono overflow-x-auto my-2 whitespace-pre\", isError ? \"bg-destructive/10 text-destructive\" : \"bg-muted\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t\t</code>\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\tpre: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<pre className={cn(\"my-2 overflow-x-auto max-w-full\", isError && \"bg-destructive/10\")}>{children}</pre>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tul: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<ul className={cn(\"list-disc ml-4 mb-3 space-y-1 text-sm\", isError && \"text-destructive\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tol: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<ol className={cn(\"list-decimal ml-4 mb-3 space-y-1 text-sm\", isError && \"text-destructive\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</ol>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tli: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<li className={cn(\"text-sm leading-relaxed\", isError ? \"text-destructive\" : \"text-foreground\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\th1: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<h1 className={cn(\"text-lg font-semibold mb-2 mt-4 first:mt-0\", isError ? \"text-destructive\" : \"text-foreground\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</h1>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\th2: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<h2 className={cn(\"text-base font-semibold mb-2 mt-3 first:mt-0\", isError ? \"text-destructive\" : \"text-foreground\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\th3: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<h3 className={cn(\"text-sm font-semibold mb-1 mt-2 first:mt-0\", isError ? \"text-destructive\" : \"text-foreground\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tstrong: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<strong className={cn(\"font-semibold\", isError ? \"text-destructive\" : \"text-foreground\")}>{children}</strong>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tem: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<em className={cn(\"italic\", isError ? \"text-destructive\" : \"text-foreground\")}>{children}</em>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tblockquote: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<blockquote className=\"border-l-4 border-border pl-4 my-2 italic text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</blockquote>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\thr: () => <hr className=\"my-4 border-border\" />,\n\t\t\t\t\t\t\t\t\t\ta: ({ href, children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\t\t\thref={href}\n\t\t\t\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\"underline underline-offset-2\", isError ? \"text-destructive hover:text-destructive/80\" : \"text-primary hover:text-primary/80\")}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\ttable: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"relative w-full overflow-x-auto my-4 -mx-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t<table className=\"min-w-full caption-bottom text-sm border border-border rounded-md\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t\t</table>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tthead: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<thead className=\"[&_tr]:border-b bg-muted/50\">\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</thead>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\ttbody: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<tbody className=\"[&_tr:last-child]:border-0\">\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</tbody>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\ttr: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<tr className=\"hover:bg-muted/50 border-b transition-colors\">\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tth: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<th className=\"text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap\">\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\ttd: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<td className=\"p-2 align-middle text-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{content || (isStreaming ? \"Thinking...\" : (isCancelled ? \"The request was stopped.\" : (isError ? \"Oops, something went wrong. Please try again.\" : \"\")))}\n\t\t\t\t\t\t\t\t</ReactMarkdown>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t{/* Execution Steps - Only show when NOT streaming, if enabled, and NO error */}\n\t\t\t{showExecutionSteps && hasSteps && !isStreaming && !isError && (\n\t\t\t\t<div className={cn(\n\t\t\t\t\t\"overflow-hidden\",\n\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t? \"bg-white border border-t-0 border-neutral-200 rounded-b-2xl\"\n\t\t\t\t\t\t: \"bg-muted border-t border-border/30 rounded-b-md\"\n\t\t\t\t)}>\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={() => setIsStepsExpanded(!isStepsExpanded)}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"w-full px-4 py-2 flex items-center justify-between text-xs transition-colors\",\n\t\t\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t\t\t? \"text-neutral-500 hover:bg-neutral-50\"\n\t\t\t\t\t\t\t\t: \"text-muted-foreground hover:bg-muted/70\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t\t<span>{getCompletedStepsText(isStepsExpanded)}</span>\n\t\t\t\t\t\t\t{isStepsExpanded ? (\n\t\t\t\t\t\t\t\t<ChevronUp className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ChevronDown className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t{/* Execution steps list */}\n\t\t\t\t\t\t{isStepsExpanded && (\n\t\t\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\tinitial={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\t\t\t\tanimate={{ height: \"auto\", opacity: 1 }}\n\t\t\t\t\t\t\t\t\texit={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\t\t\t\tclassName=\"px-4 pb-3 pt-2 space-y-2 bg-background/30\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{message.steps!.map((step) => {\n\t\t\t\t\t\t\t\t\t\t// Check if step is currently executing\n\t\t\t\t\t\t\t\t\t\tconst isCurrentlyExecuting = step.id === currentExecutingStepId && step.status === \"in_progress\" && isStreaming && !isCancelled;\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<div key={step.id} className=\"flex items-start gap-2 text-xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t{/* Currently executing: show loading spinner */}\n\t\t\t\t\t\t\t\t\t\t\t\t{isCurrentlyExecuting && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 text-primary animate-spin shrink-0 mt-0.5\" />\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\t{/* Cancelled/pending: show XCircle */}\n\t\t\t\t\t\t\t\t\t\t\t\t{step.status === \"pending\" && isCancelled && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<XCircle className=\"h-3 w-3 text-muted-foreground shrink-0 mt-0.5\" />\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\t{/* Pending (not cancelled): show loading spinner */}\n\t\t\t\t\t\t\t\t\t\t\t\t{step.status === \"pending\" && !isCancelled && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 text-primary animate-spin shrink-0 mt-0.5\" />\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\t{/* In progress (not currently executing): show loading spinner */}\n\t\t\t\t\t\t\t\t\t\t\t\t{step.status === \"in_progress\" && !isCurrentlyExecuting && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 text-primary animate-spin shrink-0 mt-0.5\" />\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\t{step.status === \"completed\" && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Check className=\"h-3 w-3 text-primary shrink-0 mt-0.5\" />\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\t{step.status === \"error\" && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<X className=\"h-3 w-3 text-destructive shrink-0 mt-0.5\" />\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\t<div className=\"flex-1 min-w-0\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"text-muted-foreground break-words\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstep.status === \"error\" && \"text-destructive\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{step.message}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{step.elapsedMs && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"ml-1.5 text-[10px] opacity-50\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t({(step.elapsedMs / 1000).toFixed(1)}s)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t{/* Streaming Steps Progress - Always show during streaming */}\n\t\t\t{hasSteps && isStreaming && (\n\t\t\t\t<div className={cn(\n\t\t\t\t\t\"overflow-hidden\",\n\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t? \"bg-white border border-t-0 border-neutral-300 rounded-b-2xl\"\n\t\t\t\t\t\t: \"bg-muted border-t border-border/30 rounded-b-md\"\n\t\t\t\t)}>\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={() => setIsStepsExpanded(!isStepsExpanded)}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"w-full px-4 py-2 flex items-center justify-between text-xs transition-colors\",\n\t\t\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t\t\t? \"text-neutral-500 hover:bg-neutral-50\"\n\t\t\t\t\t\t\t\t: \"text-muted-foreground hover:bg-muted/70\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t\t<span>{getStreamingStepsText(isStepsExpanded)}</span>\n\t\t\t\t\t\t\t{isStepsExpanded ? (\n\t\t\t\t\t\t\t\t<ChevronUp className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ChevronDown className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t{/* Streaming steps list */}\n\t\t\t\t\t\t{isStepsExpanded && (\n\t\t\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\tinitial={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\t\t\t\tanimate={{ height: \"auto\", opacity: 1 }}\n\t\t\t\t\t\t\t\t\texit={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\t\t\t\tclassName=\"px-4 pb-3 pt-2 space-y-2 bg-background/30\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{message.steps!.map((step) => {\n\t\t\t\t\t\t\t\t\t\t// Check if step is currently executing\n\t\t\t\t\t\t\t\t\t\tconst isCurrentlyExecuting = step.id === currentExecutingStepId && step.status === \"in_progress\" && isStreaming && !isCancelled;\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<div key={step.id} className=\"flex items-start gap-2 text-xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t{/* Currently executing: show loading spinner */}\n\t\t\t\t\t\t\t\t\t\t\t\t{isCurrentlyExecuting && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 text-primary animate-spin shrink-0 mt-0.5\" />\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\t{/* Cancelled/pending: show XCircle */}\n\t\t\t\t\t\t\t\t\t\t\t\t{step.status === \"pending\" && isCancelled && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<XCircle className=\"h-3 w-3 text-muted-foreground shrink-0 mt-0.5\" />\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\t{/* Pending (not cancelled): show loading spinner */}\n\t\t\t\t\t\t\t\t\t\t\t\t{step.status === \"pending\" && !isCancelled && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 text-primary animate-spin shrink-0 mt-0.5\" />\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\t{/* In progress (not currently executing): show loading spinner */}\n\t\t\t\t\t\t\t\t\t\t\t\t{step.status === \"in_progress\" && !isCurrentlyExecuting && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 text-primary animate-spin shrink-0 mt-0.5\" />\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\t{step.status === \"completed\" && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Check className=\"h-3 w-3 text-primary shrink-0 mt-0.5\" />\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\t{step.status === \"error\" && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<X className=\"h-3 w-3 text-destructive shrink-0 mt-0.5\" />\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\t<div className=\"flex-1 min-w-0\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"text-muted-foreground break-words\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstep.status === \"error\" && \"text-destructive\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{step.message}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{step.elapsedMs && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"ml-1.5 text-[10px] opacity-50\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t({(step.elapsedMs / 1000).toFixed(1)}s)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* Trace Icon - Positioned next to message */}\n\t\t\t{hasTraceData && onExecutionTraceClick && (\n\t\t\t\t<button\n\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\tonExecutionTraceClick({\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\ttracingData: message.tracingData,\n\t\t\t\t\t\t\texecutionId: message.executionId,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\tclassName=\"mt-0.5 p-2 bg-white/5 border border-white/20 rounded-lg shadow-sm hover:bg-white/10 hover:border-highlight transition-colors duration-200 flex-shrink-0\"\n\t\t\t\t\ttitle=\"View execution trace\"\n\t\t\t\t\taria-label=\"View execution trace\"\n\t\t\t\t>\n\t\t\t\t\t<Binoculars className=\"w-4 h-4 text-foreground\" />\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n\n\tif (animated) {\n\t\treturn (\n\t\t\t<motion.div\n\t\t\t\tinitial={{ opacity: 0, y: 10 }}\n\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t>\n\t\t\t\t{messageContent}\n\t\t\t</motion.div>\n\t\t);\n\t}\n\n\treturn messageContent;\n}\n","import { motion } from \"framer-motion\";\nimport { User } from \"lucide-react\";\nimport type { UserMessageProps } from \"../../types\";\nimport { formatDate } from \"../../utils\";\n\nexport function UserMessage({ message, animated = false, showAvatar = false }: UserMessageProps) {\n\tconst content = (\n\t\t<div className=\"flex gap-4 justify-end w-full\">\n\t\t\t{/* Message Container */}\n\t\t\t<div className=\"max-w-[85%] min-w-0 flex flex-col items-end\">\n\t\t\t\t<div className=\"rounded-lg p-3 bg-primary text-primary-foreground\">\n\t\t\t\t\t<p className=\"text-sm whitespace-pre-wrap break-words\">\n\t\t\t\t\t\t{message.content}\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t\t<p className=\"text-[10px] mt-1 text-muted-foreground\">\n\t\t\t\t\t{formatDate(message.timestamp)}\n\t\t\t\t</p>\n\t\t\t</div>\n\n\t\t\t{/* Avatar - Only show if enabled */}\n\t\t\t{showAvatar && (\n\t\t\t\t<div className=\"h-8 w-8 shrink-0 mt-0.5\">\n\t\t\t\t\t<div className=\"h-8 w-8 rounded-full bg-primary/10 flex items-center justify-center\">\n\t\t\t\t\t\t<User className=\"h-4 w-4 text-primary\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n\n\tif (animated) {\n\t\treturn (\n\t\t\t<motion.div\n\t\t\t\tinitial={{ opacity: 0, y: 10 }}\n\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\ttransition={{ duration: 0.3, ease: \"easeOut\" }}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</motion.div>\n\t\t);\n\t}\n\n\treturn content;\n}\n","import type { MessageRowProps } from \"../../types\";\nimport { AgentMessage } from \"../AgentMessage\";\nimport { UserMessage } from \"../UserMessage\";\n\nexport function MessageRow({\n\tmessage,\n\tstage = \"DEV\",\n\tanimated = false,\n\tshowAgentName = false,\n\tagentName = \"Paygent\",\n\tshowAvatars = false,\n\tshowUserAvatar,\n\tshowAssistantAvatar,\n\tlayout = \"full-width\",\n\tshowTimestamps = false,\n\tshowExecutionSteps = false,\n\tshowStreamingDot = false,\n\tstreamingStepsText,\n\tcompletedStepsText,\n\tonExecutionTraceClick,\n}: MessageRowProps) {\n\t// Determine actual avatar visibility\n\tconst actualShowUserAvatar = showUserAvatar !== undefined ? showUserAvatar : showAvatars;\n\tconst actualShowAssistantAvatar = showAssistantAvatar !== undefined ? showAssistantAvatar : showAvatars;\n\tif (message.role === \"user\") {\n\t\treturn <UserMessage message={message} animated={animated} showAvatar={actualShowUserAvatar} />;\n\t}\n\n\treturn (\n\t\t<AgentMessage\n\t\t\tmessage={message}\n\t\t\tstage={stage}\n\t\t\tanimated={animated}\n\t\t\tshowAgentName={showAgentName}\n\t\t\tagentName={agentName}\n\t\t\tshowAvatar={actualShowAssistantAvatar}\n\t\t\tlayout={layout}\n\t\t\tshowTimestamp={showTimestamps}\n\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\tcompletedStepsText={completedStepsText}\n\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t/>\n\t);\n}\n","interface MessageRowSkeletonProps {\n\tisRightAligned?: boolean;\n}\n\nexport function MessageRowSkeleton({\n\tisRightAligned = false,\n}: MessageRowSkeletonProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={`flex ${isRightAligned ? \"justify-end\" : \"justify-start\"} animate-pulse`}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={`flex flex-col ${isRightAligned ? \"items-end\" : \"items-start\"} w-full max-w-[80%]`}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={`rounded-lg p-3 ${\n\t\t\t\t\t\tisRightAligned ? \"bg-primary/20\" : \"bg-muted\"\n\t\t\t\t\t} w-full`}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"space-y-2\">\n\t\t\t\t\t\t<div className=\"h-3 bg-muted-foreground/20 rounded w-3/4\" />\n\t\t\t\t\t\t<div className=\"h-3 bg-muted-foreground/20 rounded w-full\" />\n\t\t\t\t\t\t<div className=\"h-3 bg-muted-foreground/20 rounded w-5/6\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"h-2 bg-muted-foreground/20 rounded w-16 mt-1\" />\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { motion } from \"framer-motion\";\nimport { Bot } from \"lucide-react\";\nimport { useCallback, useEffect, useRef } from \"react\";\nimport type { MessageListProps } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { MessageRow } from \"../MessageRow\";\nimport { MessageRowSkeleton } from \"../MessageRowSkeleton\";\n\nexport function MessageList({\n\tmessages,\n\tisLoading = false,\n\temptyStateText = \"What can I help with?\",\n\tshowEmptyStateIcon = true,\n\tlayout = \"full-width\",\n\tshowTimestamps = false,\n\tstage = \"DEV\",\n\tanimated = false,\n\tshowAgentName = false,\n\tagentName = \"Paygent\",\n\tshowAvatars = false,\n\tshowUserAvatar,\n\tshowAssistantAvatar,\n\tshowExecutionSteps = false,\n\tshowStreamingDot = false,\n\tstreamingStepsText,\n\tcompletedStepsText,\n\tonExecutionTraceClick,\n\tclassName,\n}: MessageListProps) {\n\tconst messagesContainerRef = useRef<HTMLDivElement>(null);\n\n\t// Scroll within the chat container only (keeps scroll inside iframe when lib is embedded)\n\tconst scrollToBottom = useCallback(() => {\n\t\tconst el = messagesContainerRef.current;\n\t\tif (el) {\n\t\t\tel.scrollTop = el.scrollHeight;\n\t\t}\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (messages.length > 0) scrollToBottom();\n\t}, [messages, scrollToBottom]);\n\n\tif (isLoading) {\n\t\treturn (\n\t\t\t<div className={cn(\"flex-1 overflow-y-auto min-h-0\", className)}>\n\t\t\t\t<div className=\"p-4 space-y-4\">\n\t\t\t\t\t{Array.from({ length: 6 }).map((_, index) => (\n\t\t\t\t\t\t<MessageRowSkeleton\n\t\t\t\t\t\t\tkey={`skeleton-${index}`}\n\t\t\t\t\t\t\tisRightAligned={index % 3 === 0}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (messages.length === 0) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex-1 overflow-y-auto min-h-0 flex flex-col items-center justify-center h-full text-center p-4\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<motion.div\n\t\t\t\t\tinitial={{ opacity: 0, y: 20 }}\n\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\ttransition={{\n\t\t\t\t\t\tduration: 0.5,\n\t\t\t\t\t\tease: \"easeOut\",\n\t\t\t\t\t}}\n\t\t\t\t\tclassName=\"flex flex-col items-center gap-4\"\n\t\t\t\t>\n\t\t\t\t\t{/* Bot Icon - Optional */}\n\t\t\t\t\t{showEmptyStateIcon && (\n\t\t\t\t\t\t<div className=\"flex h-12 w-12 items-center justify-center\">\n\t\t\t\t\t\t\t<Bot className=\"h-6 w-6 text-muted-foreground\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t\n\t\t\t\t\t{/* Empty state text - supports multiline with \\n */}\n\t\t\t\t\t{emptyStateText.split('\\n').map((line, index) => (\n\t\t\t\t\t\t<h2\n\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\tindex === 0 \n\t\t\t\t\t\t\t\t\t? layout === \"centered\" \n\t\t\t\t\t\t\t\t\t\t? \"text-2xl font-semibold text-primary\" \n\t\t\t\t\t\t\t\t\t\t: \"text-2xl font-semibold text-foreground\"\n\t\t\t\t\t\t\t\t\t: \"text-sm text-muted-foreground\"\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{line}\n\t\t\t\t\t\t</h2>\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\treturn (\n\t\t<div\n\t\t\tref={messagesContainerRef}\n\t\t\tclassName={cn(\"flex-1 overflow-y-auto min-h-0\", className)}\n\t\t>\n\t\t\t<div className={cn(\n\t\t\t\t\"space-y-4\",\n\t\t\t\tlayout === \"centered\" ? \"max-w-2xl mx-auto px-4 py-6\" : \"p-4\"\n\t\t\t)}>\n\t\t\t\t{messages.map((message) => (\n\t\t\t\t\t<MessageRow\n\t\t\t\t\t\tkey={message.id}\n\t\t\t\t\t\tmessage={message}\n\t\t\t\t\t\tstage={stage}\n\t\t\t\t\t\tanimated={animated}\n\t\t\t\t\t\tshowAgentName={showAgentName}\n\t\t\t\t\t\tagentName={agentName}\n\t\t\t\t\t\tshowAvatars={showAvatars}\n\t\t\t\t\t\tshowUserAvatar={showUserAvatar}\n\t\t\t\t\t\tshowAssistantAvatar={showAssistantAvatar}\n\t\t\t\t\t\tlayout={layout}\n\t\t\t\t\t\tshowTimestamps={showTimestamps}\n\t\t\t\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\t\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\t\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\t\t\t\tcompletedStepsText={completedStepsText}\n\t\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { useMemo, useState } from \"react\";\nimport { useChat } from \"@paymanai/payman-typescript-ask-sdk\";\nimport { PaymanChatContext } from \"../../contexts\";\nimport type { PaymanChatProps } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { ChatInput } from \"../ChatInput\";\nimport { MessageList } from \"../MessageList\";\n\nexport function PaymanChat({\n\tconfig,\n\tcallbacks = {},\n\tclassName,\n\tstyle,\n\tchildren,\n}: PaymanChatProps) {\n\tconst [inputValue, setInputValue] = useState(\"\");\n\n\t// Use the chat hook - it handles everything internally\n\tconst {\n\t\tmessages,\n\t\tsendMessage,\n\t\tisWaitingForResponse,\n\t\tresetSession,\n\t\tclearMessages,\n\t\tcancelStream,\n\t\tgetSessionId,\n\t\tgetMessages,\n\t} = useChat(config, callbacks);\n\n\t// Create context value with control methods\n\tconst contextValue = useMemo(\n\t\t() => ({\n\t\t\tresetSession,\n\t\t\tclearMessages,\n\t\t\tcancelStream,\n\t\t\tgetSessionId,\n\t\t\tgetMessages,\n\t\t\tisWaitingForResponse,\n\t\t}),\n\t\t[\n\t\t\tresetSession,\n\t\t\tclearMessages,\n\t\t\tcancelStream,\n\t\t\tgetSessionId,\n\t\t\tgetMessages,\n\t\t\tisWaitingForResponse,\n\t\t]\n\t);\n\n\t// Extract callbacks\n\tconst { onExecutionTraceClick } = callbacks;\n\n\t// Extract config with hardcoded UI defaults\n\tconst {\n\t\tplaceholder = \"Type your message...\",\n\t\temptyStateText = \"What can I help with?\",\n\t\tsessionParams,\n\t\tdisableInput = false,\n\t\thasAskPermission = true,\n\t\tstreamingStepsText,\n\t\tcompletedStepsText,\n\t\tshowAvatars = false,\n\t\tshowUserAvatar,\n\t\tshowAssistantAvatar,\n\t\tshowAgentName = true,\n\t\tagentName = \"Assistant\",\n\t\tshowExecutionSteps = true,\n\t\tshowStreamingDot = true,\n\t\tlayout = \"full-width\",\n\t\tshowTimestamps = false,\n\t\tanimated = true,\n\t\tisChatDisabled = false,\n\t\tdisabledComponent,\n\t\tshowEmptyStateIcon = true,\n\t} = config;\n\n\t// Check if session params are configured\n\tconst isSessionParamsConfigured = useMemo(() => {\n\t\tif (!sessionParams) return false;\n\t\treturn !!(sessionParams.id?.trim() && sessionParams.name?.trim());\n\t}, [sessionParams?.id, sessionParams?.name]);\n\n\tconst handleSend = () => {\n\t\tif (inputValue.trim() && !disableInput && isSessionParamsConfigured) {\n\t\t\tsendMessage(inputValue.trim());\n\t\t\tsetInputValue(\"\");\n\t\t}\n\t};\n\n\tconst isInputDisabled =\n\t\tisWaitingForResponse || !isSessionParamsConfigured || disableInput;\n\n\t// If chat is disabled, show custom component or default disabled UI\n\tif (isChatDisabled) {\n\t\tif (disabledComponent) {\n\t\t\treturn (\n\t\t\t\t<PaymanChatContext.Provider value={contextValue}>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"bg-card border border-border rounded-lg overflow-hidden flex flex-col flex-[4]\",\n\t\t\t\t\t\t\tclassName\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle={style}\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* Custom header can be passed as children */}\n\t\t\t\t\t\t{children}\n\t\t\t\t\t\t{/* Custom disabled component */}\n\t\t\t\t\t\t{disabledComponent}\n\t\t\t\t\t</div>\n\t\t\t\t</PaymanChatContext.Provider>\n\t\t\t);\n\t\t}\n\n\t\t// Default disabled UI\n\t\treturn (\n\t\t\t<PaymanChatContext.Provider value={contextValue}>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"bg-card border border-border rounded-lg overflow-hidden flex flex-col flex-[4]\",\n\t\t\t\t\t\tclassName\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={style}\n\t\t\t\t>\n\t\t\t\t\t{/* Custom header can be passed as children */}\n\t\t\t\t\t{children}\n\t\t\t\t\t{/* Default disabled state */}\n\t\t\t\t\t<div className=\"flex-1 flex items-center justify-center p-4\">\n\t\t\t\t\t\t<div className=\"text-center\">\n\t\t\t\t\t\t\t<div className=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\t\t\tChat is currently disabled\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</PaymanChatContext.Provider>\n\t\t);\n\t}\n\n\treturn (\n\t\t<PaymanChatContext.Provider value={contextValue}>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"bg-card border border-border rounded-lg overflow-hidden flex flex-col flex-[4]\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t\tstyle={style}\n\t\t\t>\n\t\t\t\t{/* Custom header can be passed as children */}\n\t\t\t\t{children}\n\n\t\t\t\t{/* Messages Area */}\n\t\t\t<MessageList\n\t\t\t\tmessages={messages}\n\t\t\t\tisLoading={false}\n\t\t\t\temptyStateText={emptyStateText}\n\t\t\t\tshowEmptyStateIcon={showEmptyStateIcon}\n\t\t\t\tlayout={layout}\n\t\t\t\tshowTimestamps={showTimestamps}\n\t\t\t\tstage={config.stage || \"DEV\"}\n\t\t\t\tanimated={animated}\n\t\t\t\tshowAgentName={showAgentName}\n\t\t\t\tagentName={agentName}\n\t\t\t\tshowAvatars={showAvatars}\n\t\t\t\tshowUserAvatar={showUserAvatar}\n\t\t\t\tshowAssistantAvatar={showAssistantAvatar}\n\t\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\t\tcompletedStepsText={completedStepsText}\n\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t/>\n\n\t\t\t{/* Chat Input Area - Only show if user has ask permission */}\n\t\t\t{hasAskPermission && (\n\t\t\t\t<ChatInput\n\t\t\t\t\tvalue={inputValue}\n\t\t\t\t\tonChange={setInputValue}\n\t\t\t\t\tonSend={handleSend}\n\t\t\t\t\tonPause={cancelStream}\n\t\t\t\t\tdisabled={isInputDisabled}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\tisWaitingForResponse={isWaitingForResponse}\n\t\t\t\t\thasSelectedSession={true}\n\t\t\t\t\tisSessionParamsConfigured={isSessionParamsConfigured}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t</div>\n\t\t</PaymanChatContext.Provider>\n\t);\n}\n"]}
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { createContext, useContext, useState, useMemo, useRef, useEffect } from 'react';
1
+ import { createContext, useContext, useState, useMemo, useRef, useCallback, useEffect } from 'react';
2
2
  import { useChat } from '@paymanai/payman-typescript-ask-sdk';
3
3
  export { generateId, streamWorkflowEvents, useChat } from '@paymanai/payman-typescript-ask-sdk';
4
4
  import { clsx } from 'clsx';
@@ -562,10 +562,16 @@ function MessageList({
562
562
  onExecutionTraceClick,
563
563
  className
564
564
  }) {
565
- const messagesEndRef = useRef(null);
565
+ const messagesContainerRef = useRef(null);
566
+ const scrollToBottom = useCallback(() => {
567
+ const el = messagesContainerRef.current;
568
+ if (el) {
569
+ el.scrollTop = el.scrollHeight;
570
+ }
571
+ }, []);
566
572
  useEffect(() => {
567
- messagesEndRef.current?.scrollIntoView({ behavior: "smooth" });
568
- }, [messages]);
573
+ if (messages.length > 0) scrollToBottom();
574
+ }, [messages, scrollToBottom]);
569
575
  if (isLoading) {
570
576
  return /* @__PURE__ */ jsx("div", { className: cn("flex-1 overflow-y-auto min-h-0", className), children: /* @__PURE__ */ jsx("div", { className: "p-4 space-y-4", children: Array.from({ length: 6 }).map((_, index) => /* @__PURE__ */ jsx(
571
577
  MessageRowSkeleton,
@@ -611,33 +617,37 @@ function MessageList({
611
617
  }
612
618
  );
613
619
  }
614
- return /* @__PURE__ */ jsx("div", { className: cn("flex-1 overflow-y-auto min-h-0", className), children: /* @__PURE__ */ jsxs("div", { className: cn(
615
- "space-y-4",
616
- layout === "centered" ? "max-w-2xl mx-auto px-4 py-6" : "p-4"
617
- ), children: [
618
- messages.map((message) => /* @__PURE__ */ jsx(
619
- MessageRow,
620
- {
621
- message,
622
- stage,
623
- animated,
624
- showAgentName,
625
- agentName,
626
- showAvatars,
627
- showUserAvatar,
628
- showAssistantAvatar,
629
- layout,
630
- showTimestamps,
631
- showExecutionSteps,
632
- showStreamingDot,
633
- streamingStepsText,
634
- completedStepsText,
635
- onExecutionTraceClick
636
- },
637
- message.id
638
- )),
639
- /* @__PURE__ */ jsx("div", { ref: messagesEndRef })
640
- ] }) });
620
+ return /* @__PURE__ */ jsx(
621
+ "div",
622
+ {
623
+ ref: messagesContainerRef,
624
+ className: cn("flex-1 overflow-y-auto min-h-0", className),
625
+ children: /* @__PURE__ */ jsx("div", { className: cn(
626
+ "space-y-4",
627
+ layout === "centered" ? "max-w-2xl mx-auto px-4 py-6" : "p-4"
628
+ ), children: messages.map((message) => /* @__PURE__ */ jsx(
629
+ MessageRow,
630
+ {
631
+ message,
632
+ stage,
633
+ animated,
634
+ showAgentName,
635
+ agentName,
636
+ showAvatars,
637
+ showUserAvatar,
638
+ showAssistantAvatar,
639
+ layout,
640
+ showTimestamps,
641
+ showExecutionSteps,
642
+ showStreamingDot,
643
+ streamingStepsText,
644
+ completedStepsText,
645
+ onExecutionTraceClick
646
+ },
647
+ message.id
648
+ )) })
649
+ }
650
+ );
641
651
  }
642
652
  function PaymanChat({
643
653
  config,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/contexts/PaymanChatContext.tsx","../src/utils/cn.ts","../src/utils/formatDate.ts","../src/components/ChatInput/index.tsx","../src/components/AgentMessage/index.tsx","../src/components/UserMessage/index.tsx","../src/components/MessageRow/index.tsx","../src/components/MessageRowSkeleton/index.tsx","../src/components/MessageList/index.tsx","../src/components/PaymanChat/index.tsx"],"names":["useEffect","jsxs","jsx","motion","useRef","Bot","useState"],"mappings":"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","file":"index.mjs","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { MessageDisplay } from \"../types\";\n\nexport interface PaymanChatContextValue {\n\t/**\n\t * Clear all messages and reset the chat\n\t */\n\tresetSession: () => void;\n\n\t/**\n\t * Clear all messages without resetting session ID\n\t */\n\tclearMessages: () => void;\n\n\t/**\n\t * Cancel current streaming operation\n\t */\n\tcancelStream: () => void;\n\n\t/**\n\t * Get current session ID\n\t */\n\tgetSessionId: () => string | undefined;\n\n\t/**\n\t * Get all messages\n\t */\n\tgetMessages: () => MessageDisplay[];\n\n\t/**\n\t * Check if currently waiting for response\n\t */\n\tisWaitingForResponse: boolean;\n}\n\nexport const PaymanChatContext = createContext<\n\tPaymanChatContextValue | undefined\n>(undefined);\n\n/**\n * Hook to access PaymanChat controls from parent components\n * \n * @example\n * ```tsx\n * function MyComponent() {\n * const chat = usePaymanChat();\n * \n * return (\n * <>\n * <button onClick={chat.resetSession}>Reset</button>\n * <button onClick={chat.clearMessages}>Clear</button>\n * </>\n * );\n * }\n * ```\n */\nexport function usePaymanChat(): PaymanChatContextValue {\n\tconst context = useContext(PaymanChatContext);\n\tif (!context) {\n\t\tthrow new Error(\"usePaymanChat must be used within a PaymanChat component\");\n\t}\n\treturn context;\n}\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Utility function to merge Tailwind CSS classes\n */\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","/**\n * Format a timestamp to a readable date/time string\n */\nexport function formatDate(timestamp: string | Date): string {\n\tconst date = typeof timestamp === \"string\" ? new Date(timestamp) : timestamp;\n\t\n\tconst now = new Date();\n\tconst diffMs = now.getTime() - date.getTime();\n\tconst diffMins = Math.floor(diffMs / 60000);\n\tconst diffHours = Math.floor(diffMs / 3600000);\n\tconst diffDays = Math.floor(diffMs / 86400000);\n\n\t// Less than a minute\n\tif (diffMins < 1) {\n\t\treturn \"Just now\";\n\t}\n\n\t// Less than an hour\n\tif (diffMins < 60) {\n\t\treturn `${diffMins}m ago`;\n\t}\n\n\t// Less than a day\n\tif (diffHours < 24) {\n\t\treturn `${diffHours}h ago`;\n\t}\n\n\t// Less than a week\n\tif (diffDays < 7) {\n\t\treturn `${diffDays}d ago`;\n\t}\n\n\t// Format as date\n\treturn date.toLocaleDateString(\"en-US\", {\n\t\tmonth: \"short\",\n\t\tday: \"numeric\",\n\t\tyear: date.getFullYear() !== now.getFullYear() ? \"numeric\" : undefined,\n\t});\n}\n","import { motion } from \"framer-motion\";\nimport { Send, Pause } from \"lucide-react\";\nimport { useEffect, useRef } from \"react\";\nimport type { ChatInputProps } from \"../../types\";\nimport { cn } from \"../../utils\";\n\nexport function ChatInput({\n\tvalue,\n\tonChange,\n\tonSend,\n\tonPause,\n\tdisabled = false,\n\tplaceholder = \"Type your message...\",\n\tisWaitingForResponse = false,\n\thasSelectedSession = true,\n\tisSessionParamsConfigured = true,\n\tonClick,\n\tclassName,\n}: ChatInputProps) {\n\tconst textareaRef = useRef<HTMLTextAreaElement>(null);\n\n\t// Auto-resize textarea\n\tuseEffect(() => {\n\t\tif (textareaRef.current) {\n\t\t\ttextareaRef.current.style.height = \"auto\";\n\t\t\tconst scrollHeight = textareaRef.current.scrollHeight;\n\t\t\tconst maxHeight = 200;\n\t\t\ttextareaRef.current.style.height = `${Math.min(scrollHeight, maxHeight)}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\tonSend();\n\t\t}\n\t};\n\n\tconst isInputDisabled = disabled || isWaitingForResponse;\n\tconst showPauseButton = isWaitingForResponse && onPause;\n\n\tconst getPlaceholder = () => {\n\t\tif (!hasSelectedSession) {\n\t\t\treturn \"Select a version to start chatting\";\n\t\t}\n\t\tif (!isSessionParamsConfigured) {\n\t\t\treturn \"Configure User ID and User Label in Session Params\";\n\t\t}\n\t\treturn placeholder;\n\t};\n\n\treturn (\n\t\t<div className={cn(\"flex-shrink-0 p-4 w-full\", className)} style={{ flexShrink: 0 }}>\n\t\t\t<div className=\"flex justify-center w-full\">\n\t\t\t\t<div className=\"relative w-full px-0\" style={{ maxWidth: \"672px\" }}>\n\t\t\t\t<motion.div\n\t\t\t\t\tinitial={false}\n\t\t\t\t\tclassName=\"relative flex items-end overflow-hidden transition-colors bg-input border border-border shadow-sm\"\n\t\t\t\t\tstyle={{ borderRadius: \"24px\" }}\n\t\t\t\t>\n\t\t\t\t\t<textarea\n\t\t\t\t\t\tref={textareaRef}\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\tonChange={(e) => onChange(e.target.value)}\n\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\tonClick={onClick}\n\t\t\t\t\t\tdisabled={isInputDisabled}\n\t\t\t\t\t\tplaceholder={getPlaceholder()}\n\t\t\t\t\t\tclassName=\"bg-transparent text-foreground focus:outline-none resize-none overflow-y-auto disabled:opacity-50 disabled:cursor-not-allowed w-full text-sm placeholder:text-muted-foreground\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tminHeight: \"48px\",\n\t\t\t\t\t\t\tmaxHeight: \"200px\",\n\t\t\t\t\t\t\tpadding: \"12px 48px 12px 16px\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\trows={1}\n\t\t\t\t\t/>\n\t\t\t\t{showPauseButton ? (\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={onPause}\n\t\t\t\t\t\tclassName=\"flex items-center justify-center flex-shrink-0 transition-all bg-primary text-primary-foreground hover:bg-primary/90\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\tbottom: \"8px\",\n\t\t\t\t\t\t\tright: \"8px\",\n\t\t\t\t\t\t\tpadding: \"8px\",\n\t\t\t\t\t\t\tborderRadius: \"9999px\",\n\t\t\t\t\t\t\twidth: \"32px\",\n\t\t\t\t\t\t\theight: \"32px\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\taria-label=\"Pause request\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Pause className=\"w-4 h-4\" />\n\t\t\t\t\t</button>\n\t\t\t\t) : (\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={onSend}\n\t\t\t\t\t\tdisabled={isInputDisabled || !value.trim()}\n\t\t\t\t\t\tclassName=\"flex items-center justify-center flex-shrink-0 transition-all bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 disabled:cursor-not-allowed\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\tbottom: \"8px\",\n\t\t\t\t\t\t\tright: \"8px\",\n\t\t\t\t\t\t\tpadding: \"8px\",\n\t\t\t\t\t\t\tborderRadius: \"9999px\",\n\t\t\t\t\t\t\twidth: \"32px\",\n\t\t\t\t\t\t\theight: \"32px\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\taria-label=\"Send message\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Send className=\"w-4 h-4\" />\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t</motion.div>\n\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { AnimatePresence, motion } from \"framer-motion\";\nimport { Binoculars, Bot, ChevronDown, ChevronUp, Check, X, Loader2, XCircle } from \"lucide-react\";\nimport { useState, useEffect } from \"react\";\nimport ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport type { AgentMessageProps } from \"../../types\";\nimport { cn } from \"../../utils\";\n\nexport function AgentMessage({\n\tmessage,\n\tanimated = false,\n\tshowAgentName = false,\n\tagentName = \"Assistant\",\n\tshowAvatar = false,\n\tlayout = \"full-width\",\n\tshowTimestamp = false,\n\tshowExecutionSteps = false,\n\tshowStreamingDot = false,\n\tstreamingStepsText,\n\tcompletedStepsText,\n\tonExecutionTraceClick,\n}: AgentMessageProps) {\n\tconst isStreaming = message.isStreaming ?? false;\n\tconst hasSteps = message.steps && message.steps.length > 0;\n\tconst hasTraceData = !!(message.tracingData || message.executionId) && !isStreaming;\n\tconst isError = message.isError ?? (message.streamProgress === \"error\" || !!message.errorDetails);\n\tconst isCancelled = message.isCancelled ?? false;\n\tconst currentExecutingStepId = message.currentExecutingStepId;\n\t\n\t// Steps are expanded during streaming, stay expanded after completion\n\tconst [isStepsExpanded, setIsStepsExpanded] = useState(isStreaming && hasSteps);\n\t\n\t// Update expanded state when streaming starts - keep expanded after completion\n\tuseEffect(() => {\n\t\tif (isStreaming && hasSteps) {\n\t\t\tsetIsStepsExpanded(true);\n\t\t}\n\t\t// Don't collapse when streaming stops - keep it expanded\n\t}, [isStreaming, hasSteps]);\n\t\n\t// Calculate total elapsed time from steps\n\tconst totalElapsedMs = hasSteps\n\t\t? message.steps.reduce((sum, step) => sum + (step.elapsedMs || 0), 0)\n\t\t: 0;\n\n\tconst currentMessage = message.currentMessage;\n\t// Process content to handle literal \\n characters\n\tconst rawContent = message.streamingContent || message.content || \"\";\n\tconst content = rawContent.replace(/\\\\n/g, '\\n');\n\n\t// Format steps text\n\tconst getStreamingStepsText = (expanded: boolean) => {\n\t\tconst defaultText = `${expanded ? \"Hide\" : \"View\"} progress ({count} ${message.steps!.length === 1 ? \"step\" : \"steps\"})`;\n\t\tconst text = streamingStepsText || defaultText;\n\t\tconst prefix = expanded ? \"Hide\" : \"View\";\n\t\treturn text.replace(\"{count}\", message.steps!.length.toString()).replace(/^(View|Hide)/, prefix);\n\t};\n\n\tconst getCompletedStepsText = (expanded: boolean) => {\n\t\t// If custom text is provided, use it\n\t\tif (completedStepsText) {\n\t\t\tconst result = completedStepsText\n\t\t\t\t.replace(\"{count}\", message.steps!.length.toString())\n\t\t\t\t.replace(\"{time}\", (totalElapsedMs / 1000).toFixed(1));\n\t\t\t\n\t\t\t// Always show the same text regardless of expansion state\n\t\t\treturn result;\n\t\t}\n\t\t\n\t\t// Fall back to default \"View execution steps\" format\n\t\tconst prefix = expanded ? \"Hide\" : \"View\";\n\t\tconst stepWord = message.steps!.length === 1 ? \"step\" : \"steps\";\n\t\treturn `${prefix} execution steps (${message.steps!.length} ${stepWord})`;\n\t};\n\n\tconst messageContent = (\n\t\t<div className=\"flex gap-4 justify-start items-start w-full\">\n\t\t\t{/* Avatar or Streaming Dot Indicator - Only show if enabled */}\n\t\t\t{showAvatar && (\n\t\t\t\t<div className=\"h-8 w-8 shrink-0 mt-0.5\">\n\t\t\t\t\t{isStreaming && showStreamingDot ? (\n\t\t\t\t\t\t// Animated dot indicator while streaming\n\t\t\t\t\t\t<div className=\"h-8 w-8 flex items-center justify-center\">\n\t\t\t\t\t\t\t<div className=\"relative\">\n\t\t\t\t\t\t\t\t<div className=\"h-2 w-2 rounded-full bg-primary animate-pulse\" />\n\t\t\t\t\t\t\t\t<div className=\"absolute inset-0 h-2 w-2 rounded-full bg-primary animate-ping opacity-75\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t// Avatar after completion or if streaming dot is disabled\n\t\t\t\t\t\t<div className=\"h-8 w-8 rounded-full bg-muted flex items-center justify-center\">\n\t\t\t\t\t\t\t<Bot className=\"h-4 w-4 text-muted-foreground\" />\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{/* Message Container */}\n\t\t<div className={cn(\n\t\t\t\"min-w-0 flex flex-col\",\n\t\t\tlayout === \"centered\" ? \"max-w-[85%]\" : (showAvatar ? \"max-w-[85%]\" : \"max-w-[80%]\")\n\t\t)}>\n\t\t\t{/* Message Bubble */}\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"overflow-hidden w-full\",\n\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t? cn(\n\t\t\t\t\t\t\t\"bg-white border transition-all duration-200 p-3\",\n\t\t\t\t\t\t\thasSteps ? \"rounded-t-2xl rounded-tl-sm border-b-0\" : \"rounded-2xl rounded-tl-sm\",\n\t\t\t\t\t\t\tmessage.isStreaming ? \"border-neutral-300 shadow-sm\" : \"border-neutral-200\",\n\t\t\t\t\t\t\tisError && \"border-red-200\"\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: cn(\n\t\t\t\t\t\t\t\"p-3\",\n\t\t\t\t\t\t\thasSteps && !isStreaming ? \"rounded-t-md\" : \"rounded-md\",\n\t\t\t\t\t\t\tisError ? \"bg-destructive/10 border border-destructive/30\" : \"bg-muted\"\n\t\t\t\t\t\t)\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t\t{/* Agent Name */}\n\t\t\t\t\t{showAgentName && (\n\t\t\t\t\t\t<p className=\"text-xs font-semibold mb-1.5 opacity-60\">\n\t\t\t\t\t\t\t{agentName}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Message Content */}\n\t\t\t\t\t<div className={cn(\"text-sm leading-relaxed\", layout === \"centered\" ? \"p-4\" : \"\", showAgentName && \"mt-1\")}>\n\t\t\t\t\t\t{isStreaming && !content ? (\n\t\t\t\t\t\t\t!showAvatar ? (\n\t\t\t\t\t\t\t\t// Without avatars (yaak): show spinner\n\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-3\">\n\t\t\t\t\t\t\t\t\t<Loader2 className=\"w-4 h-4 text-primary animate-spin flex-shrink-0\" />\n\t\t\t\t\t\t\t\t\t<span className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t{currentMessage || (\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center\">\n\t\t\t\t\t\t\t\t\t\t\t\tThinking\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"ml-1 inline-flex\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"thinking-dot\">.</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"thinking-dot\">.</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"thinking-dot\">.</span>\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</span>\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\t// With avatars (paygent-central): no spinner in message (dot avatar handles it)\n\t\t\t\t\t\t\t\t<span className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t{currentMessage || (\n\t\t\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center\">\n\t\t\t\t\t\t\t\t\t\t\tThinking\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"ml-1 inline-flex\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"thinking-dot\">.</span>\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"thinking-dot\">.</span>\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"thinking-dot\">.</span>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) : isCancelled && !content ? (\n\t\t\t\t\t\t\t// Show cancelled state only when message is cancelled and has no content\n\t\t\t\t\t\t\t!showAvatar ? (\n\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-3\">\n\t\t\t\t\t\t\t\t\t<X className=\"w-4 h-4 text-muted-foreground flex-shrink-0\" />\n\t\t\t\t\t\t\t\t\t<span className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t{currentMessage || \"The request was stopped.\"}\n\t\t\t\t\t\t\t\t\t</span>\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\t<span className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t{currentMessage || \"The request was stopped.\"}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div className={cn(\n\t\t\t\t\t\t\t\t\"prose prose-sm dark:prose-invert max-w-none\",\n\t\t\t\t\t\t\t\tisError && \"text-destructive\"\n\t\t\t\t\t\t\t)}>\n\t\t\t\t\t\t\t\t<ReactMarkdown\n\t\t\t\t\t\t\t\t\tremarkPlugins={[remarkGfm]}\n\t\t\t\t\t\t\t\t\tcomponents={{\n\t\t\t\t\t\t\t\t\t\tp: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<p className={cn(\"mb-3 last:mb-0 text-sm leading-relaxed\", isError ? \"text-destructive\" : \"text-foreground\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tcode: ({ className: codeClassName, children }) => {\n\t\t\t\t\t\t\t\t\t\t\tconst isInline = !codeClassName;\n\t\t\t\t\t\t\t\t\t\t\treturn isInline ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<code className={cn(\"px-1.5 py-0.5 rounded text-xs font-mono break-all\", isError ? \"bg-destructive/10 text-destructive\" : \"bg-muted\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t\t</code>\n\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t<code className={cn(\"block p-3 rounded text-xs font-mono overflow-x-auto my-2 whitespace-pre\", isError ? \"bg-destructive/10 text-destructive\" : \"bg-muted\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t\t</code>\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\tpre: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<pre className={cn(\"my-2 overflow-x-auto max-w-full\", isError && \"bg-destructive/10\")}>{children}</pre>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tul: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<ul className={cn(\"list-disc ml-4 mb-3 space-y-1 text-sm\", isError && \"text-destructive\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tol: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<ol className={cn(\"list-decimal ml-4 mb-3 space-y-1 text-sm\", isError && \"text-destructive\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</ol>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tli: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<li className={cn(\"text-sm leading-relaxed\", isError ? \"text-destructive\" : \"text-foreground\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\th1: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<h1 className={cn(\"text-lg font-semibold mb-2 mt-4 first:mt-0\", isError ? \"text-destructive\" : \"text-foreground\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</h1>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\th2: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<h2 className={cn(\"text-base font-semibold mb-2 mt-3 first:mt-0\", isError ? \"text-destructive\" : \"text-foreground\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\th3: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<h3 className={cn(\"text-sm font-semibold mb-1 mt-2 first:mt-0\", isError ? \"text-destructive\" : \"text-foreground\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tstrong: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<strong className={cn(\"font-semibold\", isError ? \"text-destructive\" : \"text-foreground\")}>{children}</strong>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tem: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<em className={cn(\"italic\", isError ? \"text-destructive\" : \"text-foreground\")}>{children}</em>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tblockquote: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<blockquote className=\"border-l-4 border-border pl-4 my-2 italic text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</blockquote>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\thr: () => <hr className=\"my-4 border-border\" />,\n\t\t\t\t\t\t\t\t\t\ta: ({ href, children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\t\t\thref={href}\n\t\t\t\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\"underline underline-offset-2\", isError ? \"text-destructive hover:text-destructive/80\" : \"text-primary hover:text-primary/80\")}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\ttable: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"relative w-full overflow-x-auto my-4 -mx-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t<table className=\"min-w-full caption-bottom text-sm border border-border rounded-md\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t\t</table>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tthead: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<thead className=\"[&_tr]:border-b bg-muted/50\">\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</thead>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\ttbody: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<tbody className=\"[&_tr:last-child]:border-0\">\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</tbody>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\ttr: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<tr className=\"hover:bg-muted/50 border-b transition-colors\">\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tth: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<th className=\"text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap\">\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\ttd: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<td className=\"p-2 align-middle text-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{content || (isStreaming ? \"Thinking...\" : (isCancelled ? \"The request was stopped.\" : (isError ? \"Oops, something went wrong. Please try again.\" : \"\")))}\n\t\t\t\t\t\t\t\t</ReactMarkdown>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t{/* Execution Steps - Only show when NOT streaming, if enabled, and NO error */}\n\t\t\t{showExecutionSteps && hasSteps && !isStreaming && !isError && (\n\t\t\t\t<div className={cn(\n\t\t\t\t\t\"overflow-hidden\",\n\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t? \"bg-white border border-t-0 border-neutral-200 rounded-b-2xl\"\n\t\t\t\t\t\t: \"bg-muted border-t border-border/30 rounded-b-md\"\n\t\t\t\t)}>\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={() => setIsStepsExpanded(!isStepsExpanded)}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"w-full px-4 py-2 flex items-center justify-between text-xs transition-colors\",\n\t\t\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t\t\t? \"text-neutral-500 hover:bg-neutral-50\"\n\t\t\t\t\t\t\t\t: \"text-muted-foreground hover:bg-muted/70\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t\t<span>{getCompletedStepsText(isStepsExpanded)}</span>\n\t\t\t\t\t\t\t{isStepsExpanded ? (\n\t\t\t\t\t\t\t\t<ChevronUp className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ChevronDown className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t{/* Execution steps list */}\n\t\t\t\t\t\t{isStepsExpanded && (\n\t\t\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\tinitial={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\t\t\t\tanimate={{ height: \"auto\", opacity: 1 }}\n\t\t\t\t\t\t\t\t\texit={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\t\t\t\tclassName=\"px-4 pb-3 pt-2 space-y-2 bg-background/30\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{message.steps!.map((step) => {\n\t\t\t\t\t\t\t\t\t\t// Check if step is currently executing\n\t\t\t\t\t\t\t\t\t\tconst isCurrentlyExecuting = step.id === currentExecutingStepId && step.status === \"in_progress\" && isStreaming && !isCancelled;\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<div key={step.id} className=\"flex items-start gap-2 text-xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t{/* Currently executing: show loading spinner */}\n\t\t\t\t\t\t\t\t\t\t\t\t{isCurrentlyExecuting && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 text-primary animate-spin shrink-0 mt-0.5\" />\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\t{/* Cancelled/pending: show XCircle */}\n\t\t\t\t\t\t\t\t\t\t\t\t{step.status === \"pending\" && isCancelled && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<XCircle className=\"h-3 w-3 text-muted-foreground shrink-0 mt-0.5\" />\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\t{/* Pending (not cancelled): show loading spinner */}\n\t\t\t\t\t\t\t\t\t\t\t\t{step.status === \"pending\" && !isCancelled && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 text-primary animate-spin shrink-0 mt-0.5\" />\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\t{/* In progress (not currently executing): show loading spinner */}\n\t\t\t\t\t\t\t\t\t\t\t\t{step.status === \"in_progress\" && !isCurrentlyExecuting && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 text-primary animate-spin shrink-0 mt-0.5\" />\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\t{step.status === \"completed\" && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Check className=\"h-3 w-3 text-primary shrink-0 mt-0.5\" />\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\t{step.status === \"error\" && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<X className=\"h-3 w-3 text-destructive shrink-0 mt-0.5\" />\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\t<div className=\"flex-1 min-w-0\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"text-muted-foreground break-words\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstep.status === \"error\" && \"text-destructive\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{step.message}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{step.elapsedMs && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"ml-1.5 text-[10px] opacity-50\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t({(step.elapsedMs / 1000).toFixed(1)}s)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t{/* Streaming Steps Progress - Always show during streaming */}\n\t\t\t{hasSteps && isStreaming && (\n\t\t\t\t<div className={cn(\n\t\t\t\t\t\"overflow-hidden\",\n\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t? \"bg-white border border-t-0 border-neutral-300 rounded-b-2xl\"\n\t\t\t\t\t\t: \"bg-muted border-t border-border/30 rounded-b-md\"\n\t\t\t\t)}>\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={() => setIsStepsExpanded(!isStepsExpanded)}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"w-full px-4 py-2 flex items-center justify-between text-xs transition-colors\",\n\t\t\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t\t\t? \"text-neutral-500 hover:bg-neutral-50\"\n\t\t\t\t\t\t\t\t: \"text-muted-foreground hover:bg-muted/70\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t\t<span>{getStreamingStepsText(isStepsExpanded)}</span>\n\t\t\t\t\t\t\t{isStepsExpanded ? (\n\t\t\t\t\t\t\t\t<ChevronUp className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ChevronDown className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t{/* Streaming steps list */}\n\t\t\t\t\t\t{isStepsExpanded && (\n\t\t\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\tinitial={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\t\t\t\tanimate={{ height: \"auto\", opacity: 1 }}\n\t\t\t\t\t\t\t\t\texit={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\t\t\t\tclassName=\"px-4 pb-3 pt-2 space-y-2 bg-background/30\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{message.steps!.map((step) => {\n\t\t\t\t\t\t\t\t\t\t// Check if step is currently executing\n\t\t\t\t\t\t\t\t\t\tconst isCurrentlyExecuting = step.id === currentExecutingStepId && step.status === \"in_progress\" && isStreaming && !isCancelled;\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<div key={step.id} className=\"flex items-start gap-2 text-xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t{/* Currently executing: show loading spinner */}\n\t\t\t\t\t\t\t\t\t\t\t\t{isCurrentlyExecuting && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 text-primary animate-spin shrink-0 mt-0.5\" />\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\t{/* Cancelled/pending: show XCircle */}\n\t\t\t\t\t\t\t\t\t\t\t\t{step.status === \"pending\" && isCancelled && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<XCircle className=\"h-3 w-3 text-muted-foreground shrink-0 mt-0.5\" />\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\t{/* Pending (not cancelled): show loading spinner */}\n\t\t\t\t\t\t\t\t\t\t\t\t{step.status === \"pending\" && !isCancelled && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 text-primary animate-spin shrink-0 mt-0.5\" />\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\t{/* In progress (not currently executing): show loading spinner */}\n\t\t\t\t\t\t\t\t\t\t\t\t{step.status === \"in_progress\" && !isCurrentlyExecuting && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 text-primary animate-spin shrink-0 mt-0.5\" />\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\t{step.status === \"completed\" && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Check className=\"h-3 w-3 text-primary shrink-0 mt-0.5\" />\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\t{step.status === \"error\" && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<X className=\"h-3 w-3 text-destructive shrink-0 mt-0.5\" />\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\t<div className=\"flex-1 min-w-0\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"text-muted-foreground break-words\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstep.status === \"error\" && \"text-destructive\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{step.message}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{step.elapsedMs && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"ml-1.5 text-[10px] opacity-50\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t({(step.elapsedMs / 1000).toFixed(1)}s)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* Trace Icon - Positioned next to message */}\n\t\t\t{hasTraceData && onExecutionTraceClick && (\n\t\t\t\t<button\n\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\tonExecutionTraceClick({\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\ttracingData: message.tracingData,\n\t\t\t\t\t\t\texecutionId: message.executionId,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\tclassName=\"mt-0.5 p-2 bg-white/5 border border-white/20 rounded-lg shadow-sm hover:bg-white/10 hover:border-highlight transition-colors duration-200 flex-shrink-0\"\n\t\t\t\t\ttitle=\"View execution trace\"\n\t\t\t\t\taria-label=\"View execution trace\"\n\t\t\t\t>\n\t\t\t\t\t<Binoculars className=\"w-4 h-4 text-foreground\" />\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n\n\tif (animated) {\n\t\treturn (\n\t\t\t<motion.div\n\t\t\t\tinitial={{ opacity: 0, y: 10 }}\n\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t>\n\t\t\t\t{messageContent}\n\t\t\t</motion.div>\n\t\t);\n\t}\n\n\treturn messageContent;\n}\n","import { motion } from \"framer-motion\";\nimport { User } from \"lucide-react\";\nimport type { UserMessageProps } from \"../../types\";\nimport { formatDate } from \"../../utils\";\n\nexport function UserMessage({ message, animated = false, showAvatar = false }: UserMessageProps) {\n\tconst content = (\n\t\t<div className=\"flex gap-4 justify-end w-full\">\n\t\t\t{/* Message Container */}\n\t\t\t<div className=\"max-w-[85%] min-w-0 flex flex-col items-end\">\n\t\t\t\t<div className=\"rounded-lg p-3 bg-primary text-primary-foreground\">\n\t\t\t\t\t<p className=\"text-sm whitespace-pre-wrap break-words\">\n\t\t\t\t\t\t{message.content}\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t\t<p className=\"text-[10px] mt-1 text-muted-foreground\">\n\t\t\t\t\t{formatDate(message.timestamp)}\n\t\t\t\t</p>\n\t\t\t</div>\n\n\t\t\t{/* Avatar - Only show if enabled */}\n\t\t\t{showAvatar && (\n\t\t\t\t<div className=\"h-8 w-8 shrink-0 mt-0.5\">\n\t\t\t\t\t<div className=\"h-8 w-8 rounded-full bg-primary/10 flex items-center justify-center\">\n\t\t\t\t\t\t<User className=\"h-4 w-4 text-primary\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n\n\tif (animated) {\n\t\treturn (\n\t\t\t<motion.div\n\t\t\t\tinitial={{ opacity: 0, y: 10 }}\n\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\ttransition={{ duration: 0.3, ease: \"easeOut\" }}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</motion.div>\n\t\t);\n\t}\n\n\treturn content;\n}\n","import type { MessageRowProps } from \"../../types\";\nimport { AgentMessage } from \"../AgentMessage\";\nimport { UserMessage } from \"../UserMessage\";\n\nexport function MessageRow({\n\tmessage,\n\tstage = \"DEV\",\n\tanimated = false,\n\tshowAgentName = false,\n\tagentName = \"Paygent\",\n\tshowAvatars = false,\n\tshowUserAvatar,\n\tshowAssistantAvatar,\n\tlayout = \"full-width\",\n\tshowTimestamps = false,\n\tshowExecutionSteps = false,\n\tshowStreamingDot = false,\n\tstreamingStepsText,\n\tcompletedStepsText,\n\tonExecutionTraceClick,\n}: MessageRowProps) {\n\t// Determine actual avatar visibility\n\tconst actualShowUserAvatar = showUserAvatar !== undefined ? showUserAvatar : showAvatars;\n\tconst actualShowAssistantAvatar = showAssistantAvatar !== undefined ? showAssistantAvatar : showAvatars;\n\tif (message.role === \"user\") {\n\t\treturn <UserMessage message={message} animated={animated} showAvatar={actualShowUserAvatar} />;\n\t}\n\n\treturn (\n\t\t<AgentMessage\n\t\t\tmessage={message}\n\t\t\tstage={stage}\n\t\t\tanimated={animated}\n\t\t\tshowAgentName={showAgentName}\n\t\t\tagentName={agentName}\n\t\t\tshowAvatar={actualShowAssistantAvatar}\n\t\t\tlayout={layout}\n\t\t\tshowTimestamp={showTimestamps}\n\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\tcompletedStepsText={completedStepsText}\n\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t/>\n\t);\n}\n","interface MessageRowSkeletonProps {\n\tisRightAligned?: boolean;\n}\n\nexport function MessageRowSkeleton({\n\tisRightAligned = false,\n}: MessageRowSkeletonProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={`flex ${isRightAligned ? \"justify-end\" : \"justify-start\"} animate-pulse`}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={`flex flex-col ${isRightAligned ? \"items-end\" : \"items-start\"} w-full max-w-[80%]`}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={`rounded-lg p-3 ${\n\t\t\t\t\t\tisRightAligned ? \"bg-primary/20\" : \"bg-muted\"\n\t\t\t\t\t} w-full`}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"space-y-2\">\n\t\t\t\t\t\t<div className=\"h-3 bg-muted-foreground/20 rounded w-3/4\" />\n\t\t\t\t\t\t<div className=\"h-3 bg-muted-foreground/20 rounded w-full\" />\n\t\t\t\t\t\t<div className=\"h-3 bg-muted-foreground/20 rounded w-5/6\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"h-2 bg-muted-foreground/20 rounded w-16 mt-1\" />\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { motion } from \"framer-motion\";\nimport { Bot } from \"lucide-react\";\nimport { useEffect, useRef } from \"react\";\nimport type { MessageListProps } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { MessageRow } from \"../MessageRow\";\nimport { MessageRowSkeleton } from \"../MessageRowSkeleton\";\n\nexport function MessageList({\n\tmessages,\n\tisLoading = false,\n\temptyStateText = \"What can I help with?\",\n\tshowEmptyStateIcon = true,\n\tlayout = \"full-width\",\n\tshowTimestamps = false,\n\tstage = \"DEV\",\n\tanimated = false,\n\tshowAgentName = false,\n\tagentName = \"Paygent\",\n\tshowAvatars = false,\n\tshowUserAvatar,\n\tshowAssistantAvatar,\n\tshowExecutionSteps = false,\n\tshowStreamingDot = false,\n\tstreamingStepsText,\n\tcompletedStepsText,\n\tonExecutionTraceClick,\n\tclassName,\n}: MessageListProps) {\n\tconst messagesEndRef = useRef<HTMLDivElement>(null);\n\n\t// Auto-scroll to bottom when new messages arrive\n\tuseEffect(() => {\n\t\tmessagesEndRef.current?.scrollIntoView({ behavior: \"smooth\" });\n\t}, [messages]);\n\n\tif (isLoading) {\n\t\treturn (\n\t\t\t<div className={cn(\"flex-1 overflow-y-auto min-h-0\", className)}>\n\t\t\t\t<div className=\"p-4 space-y-4\">\n\t\t\t\t\t{Array.from({ length: 6 }).map((_, index) => (\n\t\t\t\t\t\t<MessageRowSkeleton\n\t\t\t\t\t\t\tkey={`skeleton-${index}`}\n\t\t\t\t\t\t\tisRightAligned={index % 3 === 0}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (messages.length === 0) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex-1 overflow-y-auto min-h-0 flex flex-col items-center justify-center h-full text-center p-4\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<motion.div\n\t\t\t\t\tinitial={{ opacity: 0, y: 20 }}\n\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\ttransition={{\n\t\t\t\t\t\tduration: 0.5,\n\t\t\t\t\t\tease: \"easeOut\",\n\t\t\t\t\t}}\n\t\t\t\t\tclassName=\"flex flex-col items-center gap-4\"\n\t\t\t\t>\n\t\t\t\t\t{/* Bot Icon - Optional */}\n\t\t\t\t\t{showEmptyStateIcon && (\n\t\t\t\t\t\t<div className=\"flex h-12 w-12 items-center justify-center\">\n\t\t\t\t\t\t\t<Bot className=\"h-6 w-6 text-muted-foreground\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t\n\t\t\t\t\t{/* Empty state text - supports multiline with \\n */}\n\t\t\t\t\t{emptyStateText.split('\\n').map((line, index) => (\n\t\t\t\t\t\t<h2\n\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\tindex === 0 \n\t\t\t\t\t\t\t\t\t? layout === \"centered\" \n\t\t\t\t\t\t\t\t\t\t? \"text-2xl font-semibold text-primary\" \n\t\t\t\t\t\t\t\t\t\t: \"text-2xl font-semibold text-foreground\"\n\t\t\t\t\t\t\t\t\t: \"text-sm text-muted-foreground\"\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{line}\n\t\t\t\t\t\t</h2>\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\treturn (\n\t\t<div className={cn(\"flex-1 overflow-y-auto min-h-0\", className)}>\n\t\t\t<div className={cn(\n\t\t\t\t\"space-y-4\",\n\t\t\t\tlayout === \"centered\" ? \"max-w-2xl mx-auto px-4 py-6\" : \"p-4\"\n\t\t\t)}>\n\t\t\t\t{messages.map((message) => (\n\t\t\t\t\t<MessageRow\n\t\t\t\t\t\tkey={message.id}\n\t\t\t\t\t\tmessage={message}\n\t\t\t\t\t\tstage={stage}\n\t\t\t\t\t\tanimated={animated}\n\t\t\t\t\t\tshowAgentName={showAgentName}\n\t\t\t\t\t\tagentName={agentName}\n\t\t\t\t\t\tshowAvatars={showAvatars}\n\t\t\t\t\t\tshowUserAvatar={showUserAvatar}\n\t\t\t\t\t\tshowAssistantAvatar={showAssistantAvatar}\n\t\t\t\t\t\tlayout={layout}\n\t\t\t\t\t\tshowTimestamps={showTimestamps}\n\t\t\t\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\t\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\t\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\t\t\t\tcompletedStepsText={completedStepsText}\n\t\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t\t<div ref={messagesEndRef} />\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { useMemo, useState } from \"react\";\nimport { useChat } from \"@paymanai/payman-typescript-ask-sdk\";\nimport { PaymanChatContext } from \"../../contexts\";\nimport type { PaymanChatProps } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { ChatInput } from \"../ChatInput\";\nimport { MessageList } from \"../MessageList\";\n\nexport function PaymanChat({\n\tconfig,\n\tcallbacks = {},\n\tclassName,\n\tstyle,\n\tchildren,\n}: PaymanChatProps) {\n\tconst [inputValue, setInputValue] = useState(\"\");\n\n\t// Use the chat hook - it handles everything internally\n\tconst {\n\t\tmessages,\n\t\tsendMessage,\n\t\tisWaitingForResponse,\n\t\tresetSession,\n\t\tclearMessages,\n\t\tcancelStream,\n\t\tgetSessionId,\n\t\tgetMessages,\n\t} = useChat(config, callbacks);\n\n\t// Create context value with control methods\n\tconst contextValue = useMemo(\n\t\t() => ({\n\t\t\tresetSession,\n\t\t\tclearMessages,\n\t\t\tcancelStream,\n\t\t\tgetSessionId,\n\t\t\tgetMessages,\n\t\t\tisWaitingForResponse,\n\t\t}),\n\t\t[\n\t\t\tresetSession,\n\t\t\tclearMessages,\n\t\t\tcancelStream,\n\t\t\tgetSessionId,\n\t\t\tgetMessages,\n\t\t\tisWaitingForResponse,\n\t\t]\n\t);\n\n\t// Extract callbacks\n\tconst { onExecutionTraceClick } = callbacks;\n\n\t// Extract config with hardcoded UI defaults\n\tconst {\n\t\tplaceholder = \"Type your message...\",\n\t\temptyStateText = \"What can I help with?\",\n\t\tsessionParams,\n\t\tdisableInput = false,\n\t\thasAskPermission = true,\n\t\tstreamingStepsText,\n\t\tcompletedStepsText,\n\t\tshowAvatars = false,\n\t\tshowUserAvatar,\n\t\tshowAssistantAvatar,\n\t\tshowAgentName = true,\n\t\tagentName = \"Assistant\",\n\t\tshowExecutionSteps = true,\n\t\tshowStreamingDot = true,\n\t\tlayout = \"full-width\",\n\t\tshowTimestamps = false,\n\t\tanimated = true,\n\t\tisChatDisabled = false,\n\t\tdisabledComponent,\n\t\tshowEmptyStateIcon = true,\n\t} = config;\n\n\t// Check if session params are configured\n\tconst isSessionParamsConfigured = useMemo(() => {\n\t\tif (!sessionParams) return false;\n\t\treturn !!(sessionParams.id?.trim() && sessionParams.name?.trim());\n\t}, [sessionParams?.id, sessionParams?.name]);\n\n\tconst handleSend = () => {\n\t\tif (inputValue.trim() && !disableInput && isSessionParamsConfigured) {\n\t\t\tsendMessage(inputValue.trim());\n\t\t\tsetInputValue(\"\");\n\t\t}\n\t};\n\n\tconst isInputDisabled =\n\t\tisWaitingForResponse || !isSessionParamsConfigured || disableInput;\n\n\t// If chat is disabled, show custom component or default disabled UI\n\tif (isChatDisabled) {\n\t\tif (disabledComponent) {\n\t\t\treturn (\n\t\t\t\t<PaymanChatContext.Provider value={contextValue}>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"bg-card border border-border rounded-lg overflow-hidden flex flex-col flex-[4]\",\n\t\t\t\t\t\t\tclassName\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle={style}\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* Custom header can be passed as children */}\n\t\t\t\t\t\t{children}\n\t\t\t\t\t\t{/* Custom disabled component */}\n\t\t\t\t\t\t{disabledComponent}\n\t\t\t\t\t</div>\n\t\t\t\t</PaymanChatContext.Provider>\n\t\t\t);\n\t\t}\n\n\t\t// Default disabled UI\n\t\treturn (\n\t\t\t<PaymanChatContext.Provider value={contextValue}>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"bg-card border border-border rounded-lg overflow-hidden flex flex-col flex-[4]\",\n\t\t\t\t\t\tclassName\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={style}\n\t\t\t\t>\n\t\t\t\t\t{/* Custom header can be passed as children */}\n\t\t\t\t\t{children}\n\t\t\t\t\t{/* Default disabled state */}\n\t\t\t\t\t<div className=\"flex-1 flex items-center justify-center p-4\">\n\t\t\t\t\t\t<div className=\"text-center\">\n\t\t\t\t\t\t\t<div className=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\t\t\tChat is currently disabled\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</PaymanChatContext.Provider>\n\t\t);\n\t}\n\n\treturn (\n\t\t<PaymanChatContext.Provider value={contextValue}>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"bg-card border border-border rounded-lg overflow-hidden flex flex-col flex-[4]\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t\tstyle={style}\n\t\t\t>\n\t\t\t\t{/* Custom header can be passed as children */}\n\t\t\t\t{children}\n\n\t\t\t\t{/* Messages Area */}\n\t\t\t<MessageList\n\t\t\t\tmessages={messages}\n\t\t\t\tisLoading={false}\n\t\t\t\temptyStateText={emptyStateText}\n\t\t\t\tshowEmptyStateIcon={showEmptyStateIcon}\n\t\t\t\tlayout={layout}\n\t\t\t\tshowTimestamps={showTimestamps}\n\t\t\t\tstage={config.stage || \"DEV\"}\n\t\t\t\tanimated={animated}\n\t\t\t\tshowAgentName={showAgentName}\n\t\t\t\tagentName={agentName}\n\t\t\t\tshowAvatars={showAvatars}\n\t\t\t\tshowUserAvatar={showUserAvatar}\n\t\t\t\tshowAssistantAvatar={showAssistantAvatar}\n\t\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\t\tcompletedStepsText={completedStepsText}\n\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t/>\n\n\t\t\t{/* Chat Input Area - Only show if user has ask permission */}\n\t\t\t{hasAskPermission && (\n\t\t\t\t<ChatInput\n\t\t\t\t\tvalue={inputValue}\n\t\t\t\t\tonChange={setInputValue}\n\t\t\t\t\tonSend={handleSend}\n\t\t\t\t\tonPause={cancelStream}\n\t\t\t\t\tdisabled={isInputDisabled}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\tisWaitingForResponse={isWaitingForResponse}\n\t\t\t\t\thasSelectedSession={true}\n\t\t\t\t\tisSessionParamsConfigured={isSessionParamsConfigured}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t</div>\n\t\t</PaymanChatContext.Provider>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["../src/contexts/PaymanChatContext.tsx","../src/utils/cn.ts","../src/utils/formatDate.ts","../src/components/ChatInput/index.tsx","../src/components/AgentMessage/index.tsx","../src/components/UserMessage/index.tsx","../src/components/MessageRow/index.tsx","../src/components/MessageRowSkeleton/index.tsx","../src/components/MessageList/index.tsx","../src/components/PaymanChat/index.tsx"],"names":["useEffect","jsxs","jsx","motion","useRef","Bot","useState"],"mappings":"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","file":"index.mjs","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { MessageDisplay } from \"../types\";\n\nexport interface PaymanChatContextValue {\n\t/**\n\t * Clear all messages and reset the chat\n\t */\n\tresetSession: () => void;\n\n\t/**\n\t * Clear all messages without resetting session ID\n\t */\n\tclearMessages: () => void;\n\n\t/**\n\t * Cancel current streaming operation\n\t */\n\tcancelStream: () => void;\n\n\t/**\n\t * Get current session ID\n\t */\n\tgetSessionId: () => string | undefined;\n\n\t/**\n\t * Get all messages\n\t */\n\tgetMessages: () => MessageDisplay[];\n\n\t/**\n\t * Check if currently waiting for response\n\t */\n\tisWaitingForResponse: boolean;\n}\n\nexport const PaymanChatContext = createContext<\n\tPaymanChatContextValue | undefined\n>(undefined);\n\n/**\n * Hook to access PaymanChat controls from parent components\n * \n * @example\n * ```tsx\n * function MyComponent() {\n * const chat = usePaymanChat();\n * \n * return (\n * <>\n * <button onClick={chat.resetSession}>Reset</button>\n * <button onClick={chat.clearMessages}>Clear</button>\n * </>\n * );\n * }\n * ```\n */\nexport function usePaymanChat(): PaymanChatContextValue {\n\tconst context = useContext(PaymanChatContext);\n\tif (!context) {\n\t\tthrow new Error(\"usePaymanChat must be used within a PaymanChat component\");\n\t}\n\treturn context;\n}\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Utility function to merge Tailwind CSS classes\n */\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","/**\n * Format a timestamp to a readable date/time string\n */\nexport function formatDate(timestamp: string | Date): string {\n\tconst date = typeof timestamp === \"string\" ? new Date(timestamp) : timestamp;\n\t\n\tconst now = new Date();\n\tconst diffMs = now.getTime() - date.getTime();\n\tconst diffMins = Math.floor(diffMs / 60000);\n\tconst diffHours = Math.floor(diffMs / 3600000);\n\tconst diffDays = Math.floor(diffMs / 86400000);\n\n\t// Less than a minute\n\tif (diffMins < 1) {\n\t\treturn \"Just now\";\n\t}\n\n\t// Less than an hour\n\tif (diffMins < 60) {\n\t\treturn `${diffMins}m ago`;\n\t}\n\n\t// Less than a day\n\tif (diffHours < 24) {\n\t\treturn `${diffHours}h ago`;\n\t}\n\n\t// Less than a week\n\tif (diffDays < 7) {\n\t\treturn `${diffDays}d ago`;\n\t}\n\n\t// Format as date\n\treturn date.toLocaleDateString(\"en-US\", {\n\t\tmonth: \"short\",\n\t\tday: \"numeric\",\n\t\tyear: date.getFullYear() !== now.getFullYear() ? \"numeric\" : undefined,\n\t});\n}\n","import { motion } from \"framer-motion\";\nimport { Send, Pause } from \"lucide-react\";\nimport { useEffect, useRef } from \"react\";\nimport type { ChatInputProps } from \"../../types\";\nimport { cn } from \"../../utils\";\n\nexport function ChatInput({\n\tvalue,\n\tonChange,\n\tonSend,\n\tonPause,\n\tdisabled = false,\n\tplaceholder = \"Type your message...\",\n\tisWaitingForResponse = false,\n\thasSelectedSession = true,\n\tisSessionParamsConfigured = true,\n\tonClick,\n\tclassName,\n}: ChatInputProps) {\n\tconst textareaRef = useRef<HTMLTextAreaElement>(null);\n\n\t// Auto-resize textarea\n\tuseEffect(() => {\n\t\tif (textareaRef.current) {\n\t\t\ttextareaRef.current.style.height = \"auto\";\n\t\t\tconst scrollHeight = textareaRef.current.scrollHeight;\n\t\t\tconst maxHeight = 200;\n\t\t\ttextareaRef.current.style.height = `${Math.min(scrollHeight, maxHeight)}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\tonSend();\n\t\t}\n\t};\n\n\tconst isInputDisabled = disabled || isWaitingForResponse;\n\tconst showPauseButton = isWaitingForResponse && onPause;\n\n\tconst getPlaceholder = () => {\n\t\tif (!hasSelectedSession) {\n\t\t\treturn \"Select a version to start chatting\";\n\t\t}\n\t\tif (!isSessionParamsConfigured) {\n\t\t\treturn \"Configure User ID and User Label in Session Params\";\n\t\t}\n\t\treturn placeholder;\n\t};\n\n\treturn (\n\t\t<div className={cn(\"flex-shrink-0 p-4 w-full\", className)} style={{ flexShrink: 0 }}>\n\t\t\t<div className=\"flex justify-center w-full\">\n\t\t\t\t<div className=\"relative w-full px-0\" style={{ maxWidth: \"672px\" }}>\n\t\t\t\t<motion.div\n\t\t\t\t\tinitial={false}\n\t\t\t\t\tclassName=\"relative flex items-end overflow-hidden transition-colors bg-input border border-border shadow-sm\"\n\t\t\t\t\tstyle={{ borderRadius: \"24px\" }}\n\t\t\t\t>\n\t\t\t\t\t<textarea\n\t\t\t\t\t\tref={textareaRef}\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\tonChange={(e) => onChange(e.target.value)}\n\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\tonClick={onClick}\n\t\t\t\t\t\tdisabled={isInputDisabled}\n\t\t\t\t\t\tplaceholder={getPlaceholder()}\n\t\t\t\t\t\tclassName=\"bg-transparent text-foreground focus:outline-none resize-none overflow-y-auto disabled:opacity-50 disabled:cursor-not-allowed w-full text-sm placeholder:text-muted-foreground\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tminHeight: \"48px\",\n\t\t\t\t\t\t\tmaxHeight: \"200px\",\n\t\t\t\t\t\t\tpadding: \"12px 48px 12px 16px\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\trows={1}\n\t\t\t\t\t/>\n\t\t\t\t{showPauseButton ? (\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={onPause}\n\t\t\t\t\t\tclassName=\"flex items-center justify-center flex-shrink-0 transition-all bg-primary text-primary-foreground hover:bg-primary/90\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\tbottom: \"8px\",\n\t\t\t\t\t\t\tright: \"8px\",\n\t\t\t\t\t\t\tpadding: \"8px\",\n\t\t\t\t\t\t\tborderRadius: \"9999px\",\n\t\t\t\t\t\t\twidth: \"32px\",\n\t\t\t\t\t\t\theight: \"32px\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\taria-label=\"Pause request\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Pause className=\"w-4 h-4\" />\n\t\t\t\t\t</button>\n\t\t\t\t) : (\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={onSend}\n\t\t\t\t\t\tdisabled={isInputDisabled || !value.trim()}\n\t\t\t\t\t\tclassName=\"flex items-center justify-center flex-shrink-0 transition-all bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 disabled:cursor-not-allowed\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\tbottom: \"8px\",\n\t\t\t\t\t\t\tright: \"8px\",\n\t\t\t\t\t\t\tpadding: \"8px\",\n\t\t\t\t\t\t\tborderRadius: \"9999px\",\n\t\t\t\t\t\t\twidth: \"32px\",\n\t\t\t\t\t\t\theight: \"32px\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\taria-label=\"Send message\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Send className=\"w-4 h-4\" />\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t</motion.div>\n\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { AnimatePresence, motion } from \"framer-motion\";\nimport { Binoculars, Bot, ChevronDown, ChevronUp, Check, X, Loader2, XCircle } from \"lucide-react\";\nimport { useState, useEffect } from \"react\";\nimport ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport type { AgentMessageProps } from \"../../types\";\nimport { cn } from \"../../utils\";\n\nexport function AgentMessage({\n\tmessage,\n\tanimated = false,\n\tshowAgentName = false,\n\tagentName = \"Assistant\",\n\tshowAvatar = false,\n\tlayout = \"full-width\",\n\tshowTimestamp = false,\n\tshowExecutionSteps = false,\n\tshowStreamingDot = false,\n\tstreamingStepsText,\n\tcompletedStepsText,\n\tonExecutionTraceClick,\n}: AgentMessageProps) {\n\tconst isStreaming = message.isStreaming ?? false;\n\tconst hasSteps = message.steps && message.steps.length > 0;\n\tconst hasTraceData = !!(message.tracingData || message.executionId) && !isStreaming;\n\tconst isError = message.isError ?? (message.streamProgress === \"error\" || !!message.errorDetails);\n\tconst isCancelled = message.isCancelled ?? false;\n\tconst currentExecutingStepId = message.currentExecutingStepId;\n\t\n\t// Steps are expanded during streaming, stay expanded after completion\n\tconst [isStepsExpanded, setIsStepsExpanded] = useState(isStreaming && hasSteps);\n\t\n\t// Update expanded state when streaming starts - keep expanded after completion\n\tuseEffect(() => {\n\t\tif (isStreaming && hasSteps) {\n\t\t\tsetIsStepsExpanded(true);\n\t\t}\n\t\t// Don't collapse when streaming stops - keep it expanded\n\t}, [isStreaming, hasSteps]);\n\t\n\t// Calculate total elapsed time from steps\n\tconst totalElapsedMs = hasSteps\n\t\t? message.steps.reduce((sum, step) => sum + (step.elapsedMs || 0), 0)\n\t\t: 0;\n\n\tconst currentMessage = message.currentMessage;\n\t// Process content to handle literal \\n characters\n\tconst rawContent = message.streamingContent || message.content || \"\";\n\tconst content = rawContent.replace(/\\\\n/g, '\\n');\n\n\t// Format steps text\n\tconst getStreamingStepsText = (expanded: boolean) => {\n\t\tconst defaultText = `${expanded ? \"Hide\" : \"View\"} progress ({count} ${message.steps!.length === 1 ? \"step\" : \"steps\"})`;\n\t\tconst text = streamingStepsText || defaultText;\n\t\tconst prefix = expanded ? \"Hide\" : \"View\";\n\t\treturn text.replace(\"{count}\", message.steps!.length.toString()).replace(/^(View|Hide)/, prefix);\n\t};\n\n\tconst getCompletedStepsText = (expanded: boolean) => {\n\t\t// If custom text is provided, use it\n\t\tif (completedStepsText) {\n\t\t\tconst result = completedStepsText\n\t\t\t\t.replace(\"{count}\", message.steps!.length.toString())\n\t\t\t\t.replace(\"{time}\", (totalElapsedMs / 1000).toFixed(1));\n\t\t\t\n\t\t\t// Always show the same text regardless of expansion state\n\t\t\treturn result;\n\t\t}\n\t\t\n\t\t// Fall back to default \"View execution steps\" format\n\t\tconst prefix = expanded ? \"Hide\" : \"View\";\n\t\tconst stepWord = message.steps!.length === 1 ? \"step\" : \"steps\";\n\t\treturn `${prefix} execution steps (${message.steps!.length} ${stepWord})`;\n\t};\n\n\tconst messageContent = (\n\t\t<div className=\"flex gap-4 justify-start items-start w-full\">\n\t\t\t{/* Avatar or Streaming Dot Indicator - Only show if enabled */}\n\t\t\t{showAvatar && (\n\t\t\t\t<div className=\"h-8 w-8 shrink-0 mt-0.5\">\n\t\t\t\t\t{isStreaming && showStreamingDot ? (\n\t\t\t\t\t\t// Animated dot indicator while streaming\n\t\t\t\t\t\t<div className=\"h-8 w-8 flex items-center justify-center\">\n\t\t\t\t\t\t\t<div className=\"relative\">\n\t\t\t\t\t\t\t\t<div className=\"h-2 w-2 rounded-full bg-primary animate-pulse\" />\n\t\t\t\t\t\t\t\t<div className=\"absolute inset-0 h-2 w-2 rounded-full bg-primary animate-ping opacity-75\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t// Avatar after completion or if streaming dot is disabled\n\t\t\t\t\t\t<div className=\"h-8 w-8 rounded-full bg-muted flex items-center justify-center\">\n\t\t\t\t\t\t\t<Bot className=\"h-4 w-4 text-muted-foreground\" />\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{/* Message Container */}\n\t\t<div className={cn(\n\t\t\t\"min-w-0 flex flex-col\",\n\t\t\tlayout === \"centered\" ? \"max-w-[85%]\" : (showAvatar ? \"max-w-[85%]\" : \"max-w-[80%]\")\n\t\t)}>\n\t\t\t{/* Message Bubble */}\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"overflow-hidden w-full\",\n\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t? cn(\n\t\t\t\t\t\t\t\"bg-white border transition-all duration-200 p-3\",\n\t\t\t\t\t\t\thasSteps ? \"rounded-t-2xl rounded-tl-sm border-b-0\" : \"rounded-2xl rounded-tl-sm\",\n\t\t\t\t\t\t\tmessage.isStreaming ? \"border-neutral-300 shadow-sm\" : \"border-neutral-200\",\n\t\t\t\t\t\t\tisError && \"border-red-200\"\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: cn(\n\t\t\t\t\t\t\t\"p-3\",\n\t\t\t\t\t\t\thasSteps && !isStreaming ? \"rounded-t-md\" : \"rounded-md\",\n\t\t\t\t\t\t\tisError ? \"bg-destructive/10 border border-destructive/30\" : \"bg-muted\"\n\t\t\t\t\t\t)\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t\t{/* Agent Name */}\n\t\t\t\t\t{showAgentName && (\n\t\t\t\t\t\t<p className=\"text-xs font-semibold mb-1.5 opacity-60\">\n\t\t\t\t\t\t\t{agentName}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Message Content */}\n\t\t\t\t\t<div className={cn(\"text-sm leading-relaxed\", layout === \"centered\" ? \"p-4\" : \"\", showAgentName && \"mt-1\")}>\n\t\t\t\t\t\t{isStreaming && !content ? (\n\t\t\t\t\t\t\t!showAvatar ? (\n\t\t\t\t\t\t\t\t// Without avatars (yaak): show spinner\n\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-3\">\n\t\t\t\t\t\t\t\t\t<Loader2 className=\"w-4 h-4 text-primary animate-spin flex-shrink-0\" />\n\t\t\t\t\t\t\t\t\t<span className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t{currentMessage || (\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center\">\n\t\t\t\t\t\t\t\t\t\t\t\tThinking\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"ml-1 inline-flex\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"thinking-dot\">.</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"thinking-dot\">.</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"thinking-dot\">.</span>\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</span>\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\t// With avatars (paygent-central): no spinner in message (dot avatar handles it)\n\t\t\t\t\t\t\t\t<span className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t{currentMessage || (\n\t\t\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center\">\n\t\t\t\t\t\t\t\t\t\t\tThinking\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"ml-1 inline-flex\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"thinking-dot\">.</span>\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"thinking-dot\">.</span>\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"thinking-dot\">.</span>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) : isCancelled && !content ? (\n\t\t\t\t\t\t\t// Show cancelled state only when message is cancelled and has no content\n\t\t\t\t\t\t\t!showAvatar ? (\n\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-3\">\n\t\t\t\t\t\t\t\t\t<X className=\"w-4 h-4 text-muted-foreground flex-shrink-0\" />\n\t\t\t\t\t\t\t\t\t<span className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t{currentMessage || \"The request was stopped.\"}\n\t\t\t\t\t\t\t\t\t</span>\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\t<span className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t{currentMessage || \"The request was stopped.\"}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div className={cn(\n\t\t\t\t\t\t\t\t\"prose prose-sm dark:prose-invert max-w-none\",\n\t\t\t\t\t\t\t\tisError && \"text-destructive\"\n\t\t\t\t\t\t\t)}>\n\t\t\t\t\t\t\t\t<ReactMarkdown\n\t\t\t\t\t\t\t\t\tremarkPlugins={[remarkGfm]}\n\t\t\t\t\t\t\t\t\tcomponents={{\n\t\t\t\t\t\t\t\t\t\tp: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<p className={cn(\"mb-3 last:mb-0 text-sm leading-relaxed\", isError ? \"text-destructive\" : \"text-foreground\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tcode: ({ className: codeClassName, children }) => {\n\t\t\t\t\t\t\t\t\t\t\tconst isInline = !codeClassName;\n\t\t\t\t\t\t\t\t\t\t\treturn isInline ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<code className={cn(\"px-1.5 py-0.5 rounded text-xs font-mono break-all\", isError ? \"bg-destructive/10 text-destructive\" : \"bg-muted\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t\t</code>\n\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t<code className={cn(\"block p-3 rounded text-xs font-mono overflow-x-auto my-2 whitespace-pre\", isError ? \"bg-destructive/10 text-destructive\" : \"bg-muted\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t\t</code>\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\tpre: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<pre className={cn(\"my-2 overflow-x-auto max-w-full\", isError && \"bg-destructive/10\")}>{children}</pre>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tul: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<ul className={cn(\"list-disc ml-4 mb-3 space-y-1 text-sm\", isError && \"text-destructive\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tol: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<ol className={cn(\"list-decimal ml-4 mb-3 space-y-1 text-sm\", isError && \"text-destructive\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</ol>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tli: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<li className={cn(\"text-sm leading-relaxed\", isError ? \"text-destructive\" : \"text-foreground\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\th1: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<h1 className={cn(\"text-lg font-semibold mb-2 mt-4 first:mt-0\", isError ? \"text-destructive\" : \"text-foreground\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</h1>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\th2: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<h2 className={cn(\"text-base font-semibold mb-2 mt-3 first:mt-0\", isError ? \"text-destructive\" : \"text-foreground\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\th3: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<h3 className={cn(\"text-sm font-semibold mb-1 mt-2 first:mt-0\", isError ? \"text-destructive\" : \"text-foreground\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tstrong: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<strong className={cn(\"font-semibold\", isError ? \"text-destructive\" : \"text-foreground\")}>{children}</strong>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tem: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<em className={cn(\"italic\", isError ? \"text-destructive\" : \"text-foreground\")}>{children}</em>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tblockquote: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<blockquote className=\"border-l-4 border-border pl-4 my-2 italic text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</blockquote>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\thr: () => <hr className=\"my-4 border-border\" />,\n\t\t\t\t\t\t\t\t\t\ta: ({ href, children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\t\t\thref={href}\n\t\t\t\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\"underline underline-offset-2\", isError ? \"text-destructive hover:text-destructive/80\" : \"text-primary hover:text-primary/80\")}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\ttable: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"relative w-full overflow-x-auto my-4 -mx-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t<table className=\"min-w-full caption-bottom text-sm border border-border rounded-md\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t\t</table>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tthead: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<thead className=\"[&_tr]:border-b bg-muted/50\">\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</thead>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\ttbody: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<tbody className=\"[&_tr:last-child]:border-0\">\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</tbody>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\ttr: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<tr className=\"hover:bg-muted/50 border-b transition-colors\">\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tth: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<th className=\"text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap\">\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\ttd: ({ children }) => (\n\t\t\t\t\t\t\t\t\t\t\t<td className=\"p-2 align-middle text-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{content || (isStreaming ? \"Thinking...\" : (isCancelled ? \"The request was stopped.\" : (isError ? \"Oops, something went wrong. Please try again.\" : \"\")))}\n\t\t\t\t\t\t\t\t</ReactMarkdown>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t{/* Execution Steps - Only show when NOT streaming, if enabled, and NO error */}\n\t\t\t{showExecutionSteps && hasSteps && !isStreaming && !isError && (\n\t\t\t\t<div className={cn(\n\t\t\t\t\t\"overflow-hidden\",\n\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t? \"bg-white border border-t-0 border-neutral-200 rounded-b-2xl\"\n\t\t\t\t\t\t: \"bg-muted border-t border-border/30 rounded-b-md\"\n\t\t\t\t)}>\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={() => setIsStepsExpanded(!isStepsExpanded)}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"w-full px-4 py-2 flex items-center justify-between text-xs transition-colors\",\n\t\t\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t\t\t? \"text-neutral-500 hover:bg-neutral-50\"\n\t\t\t\t\t\t\t\t: \"text-muted-foreground hover:bg-muted/70\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t\t<span>{getCompletedStepsText(isStepsExpanded)}</span>\n\t\t\t\t\t\t\t{isStepsExpanded ? (\n\t\t\t\t\t\t\t\t<ChevronUp className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ChevronDown className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t{/* Execution steps list */}\n\t\t\t\t\t\t{isStepsExpanded && (\n\t\t\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\tinitial={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\t\t\t\tanimate={{ height: \"auto\", opacity: 1 }}\n\t\t\t\t\t\t\t\t\texit={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\t\t\t\tclassName=\"px-4 pb-3 pt-2 space-y-2 bg-background/30\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{message.steps!.map((step) => {\n\t\t\t\t\t\t\t\t\t\t// Check if step is currently executing\n\t\t\t\t\t\t\t\t\t\tconst isCurrentlyExecuting = step.id === currentExecutingStepId && step.status === \"in_progress\" && isStreaming && !isCancelled;\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<div key={step.id} className=\"flex items-start gap-2 text-xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t{/* Currently executing: show loading spinner */}\n\t\t\t\t\t\t\t\t\t\t\t\t{isCurrentlyExecuting && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 text-primary animate-spin shrink-0 mt-0.5\" />\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\t{/* Cancelled/pending: show XCircle */}\n\t\t\t\t\t\t\t\t\t\t\t\t{step.status === \"pending\" && isCancelled && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<XCircle className=\"h-3 w-3 text-muted-foreground shrink-0 mt-0.5\" />\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\t{/* Pending (not cancelled): show loading spinner */}\n\t\t\t\t\t\t\t\t\t\t\t\t{step.status === \"pending\" && !isCancelled && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 text-primary animate-spin shrink-0 mt-0.5\" />\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\t{/* In progress (not currently executing): show loading spinner */}\n\t\t\t\t\t\t\t\t\t\t\t\t{step.status === \"in_progress\" && !isCurrentlyExecuting && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 text-primary animate-spin shrink-0 mt-0.5\" />\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\t{step.status === \"completed\" && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Check className=\"h-3 w-3 text-primary shrink-0 mt-0.5\" />\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\t{step.status === \"error\" && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<X className=\"h-3 w-3 text-destructive shrink-0 mt-0.5\" />\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\t<div className=\"flex-1 min-w-0\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"text-muted-foreground break-words\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstep.status === \"error\" && \"text-destructive\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{step.message}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{step.elapsedMs && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"ml-1.5 text-[10px] opacity-50\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t({(step.elapsedMs / 1000).toFixed(1)}s)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t{/* Streaming Steps Progress - Always show during streaming */}\n\t\t\t{hasSteps && isStreaming && (\n\t\t\t\t<div className={cn(\n\t\t\t\t\t\"overflow-hidden\",\n\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t? \"bg-white border border-t-0 border-neutral-300 rounded-b-2xl\"\n\t\t\t\t\t\t: \"bg-muted border-t border-border/30 rounded-b-md\"\n\t\t\t\t)}>\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={() => setIsStepsExpanded(!isStepsExpanded)}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"w-full px-4 py-2 flex items-center justify-between text-xs transition-colors\",\n\t\t\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t\t\t? \"text-neutral-500 hover:bg-neutral-50\"\n\t\t\t\t\t\t\t\t: \"text-muted-foreground hover:bg-muted/70\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t\t<span>{getStreamingStepsText(isStepsExpanded)}</span>\n\t\t\t\t\t\t\t{isStepsExpanded ? (\n\t\t\t\t\t\t\t\t<ChevronUp className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ChevronDown className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t{/* Streaming steps list */}\n\t\t\t\t\t\t{isStepsExpanded && (\n\t\t\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\tinitial={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\t\t\t\tanimate={{ height: \"auto\", opacity: 1 }}\n\t\t\t\t\t\t\t\t\texit={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\t\t\t\tclassName=\"px-4 pb-3 pt-2 space-y-2 bg-background/30\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{message.steps!.map((step) => {\n\t\t\t\t\t\t\t\t\t\t// Check if step is currently executing\n\t\t\t\t\t\t\t\t\t\tconst isCurrentlyExecuting = step.id === currentExecutingStepId && step.status === \"in_progress\" && isStreaming && !isCancelled;\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<div key={step.id} className=\"flex items-start gap-2 text-xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t{/* Currently executing: show loading spinner */}\n\t\t\t\t\t\t\t\t\t\t\t\t{isCurrentlyExecuting && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 text-primary animate-spin shrink-0 mt-0.5\" />\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\t{/* Cancelled/pending: show XCircle */}\n\t\t\t\t\t\t\t\t\t\t\t\t{step.status === \"pending\" && isCancelled && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<XCircle className=\"h-3 w-3 text-muted-foreground shrink-0 mt-0.5\" />\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\t{/* Pending (not cancelled): show loading spinner */}\n\t\t\t\t\t\t\t\t\t\t\t\t{step.status === \"pending\" && !isCancelled && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 text-primary animate-spin shrink-0 mt-0.5\" />\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\t{/* In progress (not currently executing): show loading spinner */}\n\t\t\t\t\t\t\t\t\t\t\t\t{step.status === \"in_progress\" && !isCurrentlyExecuting && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 text-primary animate-spin shrink-0 mt-0.5\" />\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\t{step.status === \"completed\" && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Check className=\"h-3 w-3 text-primary shrink-0 mt-0.5\" />\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\t{step.status === \"error\" && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<X className=\"h-3 w-3 text-destructive shrink-0 mt-0.5\" />\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\t<div className=\"flex-1 min-w-0\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"text-muted-foreground break-words\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstep.status === \"error\" && \"text-destructive\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{step.message}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{step.elapsedMs && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"ml-1.5 text-[10px] opacity-50\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t({(step.elapsedMs / 1000).toFixed(1)}s)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* Trace Icon - Positioned next to message */}\n\t\t\t{hasTraceData && onExecutionTraceClick && (\n\t\t\t\t<button\n\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\tonExecutionTraceClick({\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\ttracingData: message.tracingData,\n\t\t\t\t\t\t\texecutionId: message.executionId,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\tclassName=\"mt-0.5 p-2 bg-white/5 border border-white/20 rounded-lg shadow-sm hover:bg-white/10 hover:border-highlight transition-colors duration-200 flex-shrink-0\"\n\t\t\t\t\ttitle=\"View execution trace\"\n\t\t\t\t\taria-label=\"View execution trace\"\n\t\t\t\t>\n\t\t\t\t\t<Binoculars className=\"w-4 h-4 text-foreground\" />\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n\n\tif (animated) {\n\t\treturn (\n\t\t\t<motion.div\n\t\t\t\tinitial={{ opacity: 0, y: 10 }}\n\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t>\n\t\t\t\t{messageContent}\n\t\t\t</motion.div>\n\t\t);\n\t}\n\n\treturn messageContent;\n}\n","import { motion } from \"framer-motion\";\nimport { User } from \"lucide-react\";\nimport type { UserMessageProps } from \"../../types\";\nimport { formatDate } from \"../../utils\";\n\nexport function UserMessage({ message, animated = false, showAvatar = false }: UserMessageProps) {\n\tconst content = (\n\t\t<div className=\"flex gap-4 justify-end w-full\">\n\t\t\t{/* Message Container */}\n\t\t\t<div className=\"max-w-[85%] min-w-0 flex flex-col items-end\">\n\t\t\t\t<div className=\"rounded-lg p-3 bg-primary text-primary-foreground\">\n\t\t\t\t\t<p className=\"text-sm whitespace-pre-wrap break-words\">\n\t\t\t\t\t\t{message.content}\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t\t<p className=\"text-[10px] mt-1 text-muted-foreground\">\n\t\t\t\t\t{formatDate(message.timestamp)}\n\t\t\t\t</p>\n\t\t\t</div>\n\n\t\t\t{/* Avatar - Only show if enabled */}\n\t\t\t{showAvatar && (\n\t\t\t\t<div className=\"h-8 w-8 shrink-0 mt-0.5\">\n\t\t\t\t\t<div className=\"h-8 w-8 rounded-full bg-primary/10 flex items-center justify-center\">\n\t\t\t\t\t\t<User className=\"h-4 w-4 text-primary\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n\n\tif (animated) {\n\t\treturn (\n\t\t\t<motion.div\n\t\t\t\tinitial={{ opacity: 0, y: 10 }}\n\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\ttransition={{ duration: 0.3, ease: \"easeOut\" }}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</motion.div>\n\t\t);\n\t}\n\n\treturn content;\n}\n","import type { MessageRowProps } from \"../../types\";\nimport { AgentMessage } from \"../AgentMessage\";\nimport { UserMessage } from \"../UserMessage\";\n\nexport function MessageRow({\n\tmessage,\n\tstage = \"DEV\",\n\tanimated = false,\n\tshowAgentName = false,\n\tagentName = \"Paygent\",\n\tshowAvatars = false,\n\tshowUserAvatar,\n\tshowAssistantAvatar,\n\tlayout = \"full-width\",\n\tshowTimestamps = false,\n\tshowExecutionSteps = false,\n\tshowStreamingDot = false,\n\tstreamingStepsText,\n\tcompletedStepsText,\n\tonExecutionTraceClick,\n}: MessageRowProps) {\n\t// Determine actual avatar visibility\n\tconst actualShowUserAvatar = showUserAvatar !== undefined ? showUserAvatar : showAvatars;\n\tconst actualShowAssistantAvatar = showAssistantAvatar !== undefined ? showAssistantAvatar : showAvatars;\n\tif (message.role === \"user\") {\n\t\treturn <UserMessage message={message} animated={animated} showAvatar={actualShowUserAvatar} />;\n\t}\n\n\treturn (\n\t\t<AgentMessage\n\t\t\tmessage={message}\n\t\t\tstage={stage}\n\t\t\tanimated={animated}\n\t\t\tshowAgentName={showAgentName}\n\t\t\tagentName={agentName}\n\t\t\tshowAvatar={actualShowAssistantAvatar}\n\t\t\tlayout={layout}\n\t\t\tshowTimestamp={showTimestamps}\n\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\tcompletedStepsText={completedStepsText}\n\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t/>\n\t);\n}\n","interface MessageRowSkeletonProps {\n\tisRightAligned?: boolean;\n}\n\nexport function MessageRowSkeleton({\n\tisRightAligned = false,\n}: MessageRowSkeletonProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={`flex ${isRightAligned ? \"justify-end\" : \"justify-start\"} animate-pulse`}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={`flex flex-col ${isRightAligned ? \"items-end\" : \"items-start\"} w-full max-w-[80%]`}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={`rounded-lg p-3 ${\n\t\t\t\t\t\tisRightAligned ? \"bg-primary/20\" : \"bg-muted\"\n\t\t\t\t\t} w-full`}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"space-y-2\">\n\t\t\t\t\t\t<div className=\"h-3 bg-muted-foreground/20 rounded w-3/4\" />\n\t\t\t\t\t\t<div className=\"h-3 bg-muted-foreground/20 rounded w-full\" />\n\t\t\t\t\t\t<div className=\"h-3 bg-muted-foreground/20 rounded w-5/6\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"h-2 bg-muted-foreground/20 rounded w-16 mt-1\" />\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { motion } from \"framer-motion\";\nimport { Bot } from \"lucide-react\";\nimport { useCallback, useEffect, useRef } from \"react\";\nimport type { MessageListProps } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { MessageRow } from \"../MessageRow\";\nimport { MessageRowSkeleton } from \"../MessageRowSkeleton\";\n\nexport function MessageList({\n\tmessages,\n\tisLoading = false,\n\temptyStateText = \"What can I help with?\",\n\tshowEmptyStateIcon = true,\n\tlayout = \"full-width\",\n\tshowTimestamps = false,\n\tstage = \"DEV\",\n\tanimated = false,\n\tshowAgentName = false,\n\tagentName = \"Paygent\",\n\tshowAvatars = false,\n\tshowUserAvatar,\n\tshowAssistantAvatar,\n\tshowExecutionSteps = false,\n\tshowStreamingDot = false,\n\tstreamingStepsText,\n\tcompletedStepsText,\n\tonExecutionTraceClick,\n\tclassName,\n}: MessageListProps) {\n\tconst messagesContainerRef = useRef<HTMLDivElement>(null);\n\n\t// Scroll within the chat container only (keeps scroll inside iframe when lib is embedded)\n\tconst scrollToBottom = useCallback(() => {\n\t\tconst el = messagesContainerRef.current;\n\t\tif (el) {\n\t\t\tel.scrollTop = el.scrollHeight;\n\t\t}\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (messages.length > 0) scrollToBottom();\n\t}, [messages, scrollToBottom]);\n\n\tif (isLoading) {\n\t\treturn (\n\t\t\t<div className={cn(\"flex-1 overflow-y-auto min-h-0\", className)}>\n\t\t\t\t<div className=\"p-4 space-y-4\">\n\t\t\t\t\t{Array.from({ length: 6 }).map((_, index) => (\n\t\t\t\t\t\t<MessageRowSkeleton\n\t\t\t\t\t\t\tkey={`skeleton-${index}`}\n\t\t\t\t\t\t\tisRightAligned={index % 3 === 0}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (messages.length === 0) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex-1 overflow-y-auto min-h-0 flex flex-col items-center justify-center h-full text-center p-4\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<motion.div\n\t\t\t\t\tinitial={{ opacity: 0, y: 20 }}\n\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\ttransition={{\n\t\t\t\t\t\tduration: 0.5,\n\t\t\t\t\t\tease: \"easeOut\",\n\t\t\t\t\t}}\n\t\t\t\t\tclassName=\"flex flex-col items-center gap-4\"\n\t\t\t\t>\n\t\t\t\t\t{/* Bot Icon - Optional */}\n\t\t\t\t\t{showEmptyStateIcon && (\n\t\t\t\t\t\t<div className=\"flex h-12 w-12 items-center justify-center\">\n\t\t\t\t\t\t\t<Bot className=\"h-6 w-6 text-muted-foreground\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t\n\t\t\t\t\t{/* Empty state text - supports multiline with \\n */}\n\t\t\t\t\t{emptyStateText.split('\\n').map((line, index) => (\n\t\t\t\t\t\t<h2\n\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\tindex === 0 \n\t\t\t\t\t\t\t\t\t? layout === \"centered\" \n\t\t\t\t\t\t\t\t\t\t? \"text-2xl font-semibold text-primary\" \n\t\t\t\t\t\t\t\t\t\t: \"text-2xl font-semibold text-foreground\"\n\t\t\t\t\t\t\t\t\t: \"text-sm text-muted-foreground\"\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{line}\n\t\t\t\t\t\t</h2>\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\treturn (\n\t\t<div\n\t\t\tref={messagesContainerRef}\n\t\t\tclassName={cn(\"flex-1 overflow-y-auto min-h-0\", className)}\n\t\t>\n\t\t\t<div className={cn(\n\t\t\t\t\"space-y-4\",\n\t\t\t\tlayout === \"centered\" ? \"max-w-2xl mx-auto px-4 py-6\" : \"p-4\"\n\t\t\t)}>\n\t\t\t\t{messages.map((message) => (\n\t\t\t\t\t<MessageRow\n\t\t\t\t\t\tkey={message.id}\n\t\t\t\t\t\tmessage={message}\n\t\t\t\t\t\tstage={stage}\n\t\t\t\t\t\tanimated={animated}\n\t\t\t\t\t\tshowAgentName={showAgentName}\n\t\t\t\t\t\tagentName={agentName}\n\t\t\t\t\t\tshowAvatars={showAvatars}\n\t\t\t\t\t\tshowUserAvatar={showUserAvatar}\n\t\t\t\t\t\tshowAssistantAvatar={showAssistantAvatar}\n\t\t\t\t\t\tlayout={layout}\n\t\t\t\t\t\tshowTimestamps={showTimestamps}\n\t\t\t\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\t\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\t\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\t\t\t\tcompletedStepsText={completedStepsText}\n\t\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { useMemo, useState } from \"react\";\nimport { useChat } from \"@paymanai/payman-typescript-ask-sdk\";\nimport { PaymanChatContext } from \"../../contexts\";\nimport type { PaymanChatProps } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { ChatInput } from \"../ChatInput\";\nimport { MessageList } from \"../MessageList\";\n\nexport function PaymanChat({\n\tconfig,\n\tcallbacks = {},\n\tclassName,\n\tstyle,\n\tchildren,\n}: PaymanChatProps) {\n\tconst [inputValue, setInputValue] = useState(\"\");\n\n\t// Use the chat hook - it handles everything internally\n\tconst {\n\t\tmessages,\n\t\tsendMessage,\n\t\tisWaitingForResponse,\n\t\tresetSession,\n\t\tclearMessages,\n\t\tcancelStream,\n\t\tgetSessionId,\n\t\tgetMessages,\n\t} = useChat(config, callbacks);\n\n\t// Create context value with control methods\n\tconst contextValue = useMemo(\n\t\t() => ({\n\t\t\tresetSession,\n\t\t\tclearMessages,\n\t\t\tcancelStream,\n\t\t\tgetSessionId,\n\t\t\tgetMessages,\n\t\t\tisWaitingForResponse,\n\t\t}),\n\t\t[\n\t\t\tresetSession,\n\t\t\tclearMessages,\n\t\t\tcancelStream,\n\t\t\tgetSessionId,\n\t\t\tgetMessages,\n\t\t\tisWaitingForResponse,\n\t\t]\n\t);\n\n\t// Extract callbacks\n\tconst { onExecutionTraceClick } = callbacks;\n\n\t// Extract config with hardcoded UI defaults\n\tconst {\n\t\tplaceholder = \"Type your message...\",\n\t\temptyStateText = \"What can I help with?\",\n\t\tsessionParams,\n\t\tdisableInput = false,\n\t\thasAskPermission = true,\n\t\tstreamingStepsText,\n\t\tcompletedStepsText,\n\t\tshowAvatars = false,\n\t\tshowUserAvatar,\n\t\tshowAssistantAvatar,\n\t\tshowAgentName = true,\n\t\tagentName = \"Assistant\",\n\t\tshowExecutionSteps = true,\n\t\tshowStreamingDot = true,\n\t\tlayout = \"full-width\",\n\t\tshowTimestamps = false,\n\t\tanimated = true,\n\t\tisChatDisabled = false,\n\t\tdisabledComponent,\n\t\tshowEmptyStateIcon = true,\n\t} = config;\n\n\t// Check if session params are configured\n\tconst isSessionParamsConfigured = useMemo(() => {\n\t\tif (!sessionParams) return false;\n\t\treturn !!(sessionParams.id?.trim() && sessionParams.name?.trim());\n\t}, [sessionParams?.id, sessionParams?.name]);\n\n\tconst handleSend = () => {\n\t\tif (inputValue.trim() && !disableInput && isSessionParamsConfigured) {\n\t\t\tsendMessage(inputValue.trim());\n\t\t\tsetInputValue(\"\");\n\t\t}\n\t};\n\n\tconst isInputDisabled =\n\t\tisWaitingForResponse || !isSessionParamsConfigured || disableInput;\n\n\t// If chat is disabled, show custom component or default disabled UI\n\tif (isChatDisabled) {\n\t\tif (disabledComponent) {\n\t\t\treturn (\n\t\t\t\t<PaymanChatContext.Provider value={contextValue}>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"bg-card border border-border rounded-lg overflow-hidden flex flex-col flex-[4]\",\n\t\t\t\t\t\t\tclassName\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle={style}\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* Custom header can be passed as children */}\n\t\t\t\t\t\t{children}\n\t\t\t\t\t\t{/* Custom disabled component */}\n\t\t\t\t\t\t{disabledComponent}\n\t\t\t\t\t</div>\n\t\t\t\t</PaymanChatContext.Provider>\n\t\t\t);\n\t\t}\n\n\t\t// Default disabled UI\n\t\treturn (\n\t\t\t<PaymanChatContext.Provider value={contextValue}>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"bg-card border border-border rounded-lg overflow-hidden flex flex-col flex-[4]\",\n\t\t\t\t\t\tclassName\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={style}\n\t\t\t\t>\n\t\t\t\t\t{/* Custom header can be passed as children */}\n\t\t\t\t\t{children}\n\t\t\t\t\t{/* Default disabled state */}\n\t\t\t\t\t<div className=\"flex-1 flex items-center justify-center p-4\">\n\t\t\t\t\t\t<div className=\"text-center\">\n\t\t\t\t\t\t\t<div className=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\t\t\tChat is currently disabled\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</PaymanChatContext.Provider>\n\t\t);\n\t}\n\n\treturn (\n\t\t<PaymanChatContext.Provider value={contextValue}>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"bg-card border border-border rounded-lg overflow-hidden flex flex-col flex-[4]\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t\tstyle={style}\n\t\t\t>\n\t\t\t\t{/* Custom header can be passed as children */}\n\t\t\t\t{children}\n\n\t\t\t\t{/* Messages Area */}\n\t\t\t<MessageList\n\t\t\t\tmessages={messages}\n\t\t\t\tisLoading={false}\n\t\t\t\temptyStateText={emptyStateText}\n\t\t\t\tshowEmptyStateIcon={showEmptyStateIcon}\n\t\t\t\tlayout={layout}\n\t\t\t\tshowTimestamps={showTimestamps}\n\t\t\t\tstage={config.stage || \"DEV\"}\n\t\t\t\tanimated={animated}\n\t\t\t\tshowAgentName={showAgentName}\n\t\t\t\tagentName={agentName}\n\t\t\t\tshowAvatars={showAvatars}\n\t\t\t\tshowUserAvatar={showUserAvatar}\n\t\t\t\tshowAssistantAvatar={showAssistantAvatar}\n\t\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\t\tcompletedStepsText={completedStepsText}\n\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t/>\n\n\t\t\t{/* Chat Input Area - Only show if user has ask permission */}\n\t\t\t{hasAskPermission && (\n\t\t\t\t<ChatInput\n\t\t\t\t\tvalue={inputValue}\n\t\t\t\t\tonChange={setInputValue}\n\t\t\t\t\tonSend={handleSend}\n\t\t\t\t\tonPause={cancelStream}\n\t\t\t\t\tdisabled={isInputDisabled}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\tisWaitingForResponse={isWaitingForResponse}\n\t\t\t\t\thasSelectedSession={true}\n\t\t\t\t\tisSessionParamsConfigured={isSessionParamsConfigured}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t</div>\n\t\t</PaymanChatContext.Provider>\n\t);\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paymanai/payman-ask-sdk",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "Reusable chat SDK for Payman workflows with streaming support (Web & React Native)",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -81,7 +81,7 @@
81
81
  }
82
82
  },
83
83
  "dependencies": {
84
- "@paymanai/payman-typescript-ask-sdk": "^1.0.0",
84
+ "@paymanai/payman-typescript-ask-sdk": "^1.0.2",
85
85
  "clsx": "^2.1.1",
86
86
  "tailwind-merge": "^3.3.1"
87
87
  },