@paymanai/payman-ask-sdk 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +5 -5
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1041,8 +1041,8 @@ function UserActionModal({
|
|
|
1041
1041
|
onClick: handleReject,
|
|
1042
1042
|
disabled: isSubmitting,
|
|
1043
1043
|
className: cn(
|
|
1044
|
-
"py-2.5 px-4 rounded-lg text-sm font-medium transition-colors",
|
|
1045
|
-
"bg-destructive/10 text-destructive hover:bg-destructive/
|
|
1044
|
+
"py-2.5 px-4 rounded-lg text-sm font-medium transition-colors cursor-pointer",
|
|
1045
|
+
"bg-destructive/10 text-destructive hover:bg-destructive/30 hover:text-destructive",
|
|
1046
1046
|
"disabled:opacity-50 disabled:cursor-not-allowed"
|
|
1047
1047
|
),
|
|
1048
1048
|
style: {
|
|
@@ -1066,7 +1066,7 @@ function UserActionModal({
|
|
|
1066
1066
|
onClick: handleApprove,
|
|
1067
1067
|
disabled: !isOtpValid || isSubmitting,
|
|
1068
1068
|
className: cn(
|
|
1069
|
-
"py-2.5 px-4 rounded-lg text-sm font-medium transition-colors",
|
|
1069
|
+
"py-2.5 px-4 rounded-lg text-sm font-medium transition-colors cursor-pointer",
|
|
1070
1070
|
"bg-primary text-primary-foreground hover:bg-primary/90 active:bg-primary/80",
|
|
1071
1071
|
"disabled:opacity-50 disabled:cursor-not-allowed"
|
|
1072
1072
|
),
|
|
@@ -1094,8 +1094,8 @@ function UserActionModal({
|
|
|
1094
1094
|
onClick: handleResend,
|
|
1095
1095
|
disabled: isSubmitting || resendCooldownRemaining > 0,
|
|
1096
1096
|
className: cn(
|
|
1097
|
-
"py-2 px-4 rounded-lg text-xs font-medium transition-colors w-full",
|
|
1098
|
-
"text-muted-foreground hover:text-foreground",
|
|
1097
|
+
"py-2 px-4 rounded-lg text-xs font-medium transition-colors w-full cursor-pointer",
|
|
1098
|
+
"border border-border text-muted-foreground hover:text-foreground hover:border-muted-foreground/40 hover:bg-muted/50",
|
|
1099
1099
|
"disabled:opacity-50 disabled:cursor-not-allowed"
|
|
1100
1100
|
),
|
|
1101
1101
|
style: {
|
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/OtpInput/index.tsx","../src/components/UserActionModal/constants.ts","../src/components/UserActionModal/utils.ts","../src/components/UserActionModal/index.tsx","../src/components/PaymanChat/index.tsx"],"names":["createContext","useContext","twMerge","clsx","useRef","useEffect","jsx","jsxs","motion","Pause","Send","useState","Bot","CheckCircle2","XCircle","Loader2","X","ReactMarkdown","remarkGfm","ChevronUp","ChevronDown","AnimatePresence","Check","Binoculars","User","useCallback","Fragment","ShieldCheck","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, CheckCircle2, 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\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{/* User Action Result Badge - above message bubble */}\n\t\t\t{message.userActionResult && (\n\t\t\t\t<div className=\"mb-2\">\n\t\t\t\t\t{message.userActionResult === \"approved\" ? (\n\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-full bg-green-100 text-green-700\">\n\t\t\t\t\t\t\t<CheckCircle2 className=\"w-3 h-3\" /> OTP Verified\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-full bg-red-100 text-red-700\">\n\t\t\t\t\t\t\t<XCircle className=\"w-3 h-3\" /> Rejected\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\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={cn(\"h-3 w-3 shrink-0 mt-0.5\", step.eventType === \"USER_ACTION_SUCCESS\" ? \"text-green-600\" : \"text-primary\")} />\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\tstep.eventType === \"USER_ACTION_SUCCESS\" && \"text-green-600\"\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{step.status === \"completed\" && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Check className={cn(\"h-3 w-3 shrink-0 mt-0.5\", step.eventType === \"USER_ACTION_SUCCESS\" ? \"text-green-600\" : \"text-primary\")} />\n\t\t\t\t\t\t\t\t\t\t\t)}\n\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<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)}\n\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<span\n\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\"text-muted-foreground break-words\",\n\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\tstep.eventType === \"USER_ACTION_SUCCESS\" && \"text-green-600\"\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>\n\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</span>\n\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<span className=\"ml-1.5 text-[10px] opacity-50\">\n\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</span>\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</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* Trace Icon - Positioned next to message bubble */}\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={cn(\n\t\t\t\t\t\t\"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\t\tmessage.userActionResult ? \"mt-8\" : \"mt-0.5\"\n\t\t\t\t\t)}\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 { useEffect, useRef } from \"react\";\nimport type { OtpInputProps } from \"../../types\";\n\nconst DEFAULT_MAX_LENGTH = 6;\nconst MAX_SUPPORTED_LENGTH = 12;\nconst AUTO_FOCUS_DELAY_MS = 250;\n\nexport function OtpInput({ value, onChange, maxLength, disabled = false }: OtpInputProps) {\n\tconst inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n\tconst safeMaxLength =\n\t\tNumber.isInteger(maxLength) && maxLength > 0\n\t\t\t? Math.min(maxLength, MAX_SUPPORTED_LENGTH)\n\t\t\t: DEFAULT_MAX_LENGTH;\n\n\t// Split value into individual characters\n\tconst digits = value.split(\"\").concat(Array(safeMaxLength).fill(\"\")).slice(0, safeMaxLength);\n\n\t// Auto-focus first input on mount\n\tuseEffect(() => {\n\t\tif (disabled) return;\n\n\t\tconst focusTimer = window.setTimeout(() => {\n\t\t\tinputRefs.current[0]?.focus();\n\t\t}, AUTO_FOCUS_DELAY_MS);\n\n\t\treturn () => window.clearTimeout(focusTimer);\n\t}, [disabled]);\n\n\tconst focusInput = (index: number) => {\n\t\tif (index >= 0 && index < safeMaxLength) {\n\t\t\tinputRefs.current[index]?.focus();\n\t\t}\n\t};\n\n\tconst updateValue = (newDigits: string[]) => {\n\t\tonChange(newDigits.join(\"\").slice(0, safeMaxLength));\n\t};\n\n\tconst handleChange = (index: number, char: string) => {\n\t\t// Only allow digits\n\t\tif (char && !/^\\d$/.test(char)) return;\n\n\t\tconst newDigits = [...digits];\n\t\tnewDigits[index] = char;\n\t\tupdateValue(newDigits);\n\n\t\t// Move to next box if a digit was entered\n\t\tif (char && index < safeMaxLength - 1) {\n\t\t\tfocusInput(index + 1);\n\t\t}\n\t};\n\n\tconst handleKeyDown = (index: number, e: React.KeyboardEvent<HTMLInputElement>) => {\n\t\tif (e.key === \"Enter\") {\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.key === \"Backspace\") {\n\t\t\te.preventDefault();\n\t\t\tif (digits[index]) {\n\t\t\t\t// Clear current box\n\t\t\t\tconst newDigits = [...digits];\n\t\t\t\tnewDigits[index] = \"\";\n\t\t\t\tupdateValue(newDigits);\n\t\t\t} else if (index > 0) {\n\t\t\t\t// Move to previous box and clear it\n\t\t\t\tconst newDigits = [...digits];\n\t\t\t\tnewDigits[index - 1] = \"\";\n\t\t\t\tupdateValue(newDigits);\n\t\t\t\tfocusInput(index - 1);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.key === \"ArrowLeft\") {\n\t\t\te.preventDefault();\n\t\t\tfocusInput(index - 1);\n\t\t} else if (e.key === \"ArrowRight\") {\n\t\t\te.preventDefault();\n\t\t\tfocusInput(index + 1);\n\t\t}\n\t};\n\n\tconst handlePaste = (e: React.ClipboardEvent) => {\n\t\te.preventDefault();\n\t\tconst pasted = e.clipboardData.getData(\"text\").replace(/\\D/g, \"\").slice(0, safeMaxLength);\n\t\tif (!pasted) return;\n\n\t\tconst newDigits = pasted\n\t\t\t.split(\"\")\n\t\t\t.concat(Array(safeMaxLength).fill(\"\"))\n\t\t\t.slice(0, safeMaxLength);\n\t\tupdateValue(newDigits);\n\n\t\t// Focus the box after the last pasted digit (or last box)\n\t\tfocusInput(Math.min(pasted.length, safeMaxLength - 1));\n\t};\n\n\treturn (\n\t\t<div style={{ display: \"flex\", gap: \"8px\", justifyContent: \"center\" }}>\n\t\t\t{digits.map((digit, i) => (\n\t\t\t\t<input\n\t\t\t\t\tkey={i}\n\t\t\t\t\tref={(el) => { inputRefs.current[i] = el; }}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tinputMode=\"numeric\"\n\t\t\t\t\tmaxLength={1}\n\t\t\t\t\tvalue={digit}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonChange={(e) => handleChange(i, e.target.value.slice(-1))}\n\t\t\t\t\tonKeyDown={(e) => handleKeyDown(i, e)}\n\t\t\t\t\tonPaste={handlePaste}\n\t\t\t\t\tonFocus={(e) => e.target.select()}\n\t\t\t\t\taria-label={`Digit ${i + 1}`}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: \"40px\",\n\t\t\t\t\t\theight: \"48px\",\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t\tfontSize: \"20px\",\n\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\tborder: \"1px solid var(--border, #E5E5E5)\",\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t\toutline: \"none\",\n\t\t\t\t\t\tbackgroundColor: disabled ? \"var(--muted, #F5F5F5)\" : \"transparent\",\n\t\t\t\t\t\tcolor: \"var(--foreground, #000)\",\n\t\t\t\t\t\topacity: disabled ? 0.5 : 1,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</div>\n\t);\n}\n","export const BUTTON_LABELS = {\n\tAPPROVE: \"Verify\",\n\tREJECT: \"Reject\",\n\tRESEND: \"Resend OTP\",\n} as const;\n\nexport const RESEND_OTP_COOLDOWN_SECONDS = 30;\n\nexport const DEFAULT_OTP_MAX_LENGTH = 6;\nexport const MIN_OTP_MAX_LENGTH = 1;\nexport const MAX_OTP_MAX_LENGTH = 12;\n\n// If backend success event is delayed/lost, avoid permanently locking modal controls.\nexport const ACTION_PENDING_TIMEOUT_MS = 15000;\n\nexport const MODAL_CONTENT = {\n\tTITLE: \"Verification Required\",\n\tLOADING_APPROVE: \"Verifying...\",\n\tLOADING_REJECT: \"Rejecting...\",\n\tLOADING_RESEND: \"Resending...\",\n\tRESEND_AVAILABLE_IN: \"Resend OTP in\",\n} as const;\n","import {\n\tDEFAULT_OTP_MAX_LENGTH,\n\tMAX_OTP_MAX_LENGTH,\n\tMIN_OTP_MAX_LENGTH,\n} from \"./constants\";\n\n/**\n * Safely extract OTP config from the backend's requestedSchema.\n * Falls back to DEFAULT_OTP_MAX_LENGTH (6) if anything is missing or invalid.\n */\nexport function getOtpSchemaFromRequest(\n\tschema: Record<string, unknown> | undefined,\n): { maxLength: number } {\n\tconst properties = schema?.properties as Record<string, unknown> | undefined;\n\tconst otp = properties?.otp as { maxLength?: number } | undefined;\n\tconst maxLengthRaw = otp?.maxLength;\n\tconst parsedMaxLength = Number.isInteger(maxLengthRaw)\n\t\t? Number(maxLengthRaw)\n\t\t: DEFAULT_OTP_MAX_LENGTH;\n\tconst clampedMaxLength = Math.min(\n\t\tMAX_OTP_MAX_LENGTH,\n\t\tMath.max(MIN_OTP_MAX_LENGTH, parsedMaxLength),\n\t);\n\n\treturn {\n\t\tmaxLength: clampedMaxLength,\n\t};\n}\n","import { useEffect, useState, useCallback, useRef } from \"react\";\nimport { ShieldCheck, Loader2 } from \"lucide-react\";\nimport type { UserActionModalProps } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { OtpInput } from \"../OtpInput\";\nimport {\n\tACTION_PENDING_TIMEOUT_MS,\n\tBUTTON_LABELS,\n\tRESEND_OTP_COOLDOWN_SECONDS,\n\tMODAL_CONTENT,\n} from \"./constants\";\nimport { getOtpSchemaFromRequest } from \"./utils\";\n\nexport function UserActionModal({\n\tisOpen,\n\tuserActionRequest,\n\tonApprove,\n\tonReject,\n\tonResend,\n\tclearOtpTrigger,\n}: UserActionModalProps) {\n\tconst [otp, setOtp] = useState(\"\");\n\tconst [actionType, setActionType] = useState<\"approve\" | \"reject\" | \"resend\" | null>(null);\n\tconst [isSubmitting, setIsSubmitting] = useState(false);\n\tconst [resendCooldownRemaining, setResendCooldownRemaining] = useState(0);\n\tconst dialogRef = useRef<HTMLDivElement | null>(null);\n\tconst previousFocusedRef = useRef<HTMLElement | null>(null);\n\n\tconst schema = getOtpSchemaFromRequest(userActionRequest?.requestedSchema);\n\tconst resetActionState = useCallback(() => {\n\t\tsetIsSubmitting(false);\n\t\tsetActionType(null);\n\t}, []);\n\n\t// When modal opens, start resend cooldown. When it closes, reset all state.\n\tuseEffect(() => {\n\t\tif (isOpen) {\n\t\t\tsetResendCooldownRemaining(RESEND_OTP_COOLDOWN_SECONDS);\n\t\t} else {\n\t\t\tsetOtp(\"\");\n\t\t\tresetActionState();\n\t\t\tsetResendCooldownRemaining(0);\n\t\t}\n\t}, [isOpen, resetActionState]);\n\n\t// Cooldown timer\n\tuseEffect(() => {\n\t\tif (resendCooldownRemaining <= 0) return;\n\n\t\tconst timer = setTimeout(() => {\n\t\t\tsetResendCooldownRemaining((prev) => prev - 1);\n\t\t}, 1000);\n\n\t\treturn () => clearTimeout(timer);\n\t}, [resendCooldownRemaining]);\n\n\t// External OTP clear (e.g. on INVALID or REST failure)\n\tuseEffect(() => {\n\t\tif (clearOtpTrigger > 0) {\n\t\t\tsetOtp(\"\");\n\t\t\tresetActionState();\n\t\t}\n\t}, [clearOtpTrigger, resetActionState]);\n\n\t// Failsafe: don't keep modal permanently blocked if backend close event is delayed/lost.\n\tuseEffect(() => {\n\t\tif (!isOpen || !isSubmitting) return;\n\t\tif (actionType !== \"approve\" && actionType !== \"reject\") return;\n\n\t\tconst timeout = setTimeout(() => {\n\t\t\tresetActionState();\n\t\t}, ACTION_PENDING_TIMEOUT_MS);\n\n\t\treturn () => clearTimeout(timeout);\n\t}, [isOpen, isSubmitting, actionType, resetActionState]);\n\n\t// Keep keyboard focus trapped inside the non-dismissable security modal.\n\tuseEffect(() => {\n\t\tif (!isOpen) return;\n\n\t\tconst dialog = dialogRef.current;\n\t\tif (!dialog) return;\n\n\t\tpreviousFocusedRef.current = document.activeElement as HTMLElement | null;\n\t\tconst originalOverflow = document.body.style.overflow;\n\t\tdocument.body.style.overflow = \"hidden\";\n\n\t\tconst getFocusableElements = () =>\n\t\t\tArray.from(\n\t\t\t\tdialog.querySelectorAll<HTMLElement>(\n\t\t\t\t\t'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n\t\t\t\t),\n\t\t\t).filter((el) => !el.hasAttribute(\"disabled\") && el.tabIndex !== -1);\n\n\t\tconst focusables = getFocusableElements();\n\t\t(focusables[0] ?? dialog).focus();\n\n\t\tconst handleKeyDown = (event: KeyboardEvent) => {\n\t\t\tif (event.key === \"Escape\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key !== \"Tab\") return;\n\n\t\t\tconst currentFocusables = getFocusableElements();\n\t\t\tif (currentFocusables.length === 0) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tdialog.focus();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst first = currentFocusables[0];\n\t\t\tconst last = currentFocusables[currentFocusables.length - 1];\n\t\t\tconst activeElement = document.activeElement as HTMLElement | null;\n\t\t\tconst isInDialog = activeElement ? dialog.contains(activeElement) : false;\n\n\t\t\tif (event.shiftKey) {\n\t\t\t\tif (!isInDialog || activeElement === first) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tlast.focus();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!isInDialog || activeElement === last) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tfirst.focus();\n\t\t\t}\n\t\t};\n\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown);\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"keydown\", handleKeyDown);\n\t\t\tdocument.body.style.overflow = originalOverflow;\n\t\t\tpreviousFocusedRef.current?.focus();\n\t\t};\n\t}, [isOpen]);\n\n\tconst handleApprove = useCallback(async () => {\n\t\tif (otp.length !== schema.maxLength || !/^\\d+$/.test(otp)) return;\n\n\t\tsetIsSubmitting(true);\n\t\tsetActionType(\"approve\");\n\t\ttry {\n\t\t\tawait onApprove(otp);\n\t\t\t// On success: keep spinner visible until modal closes via stream event.\n\t\t\t// The isOpen effect resets all state when the modal closes.\n\t\t} catch {\n\t\t\t// On error: reset so user can retry\n\t\t\tresetActionState();\n\t\t}\n\t}, [otp, schema.maxLength, onApprove, resetActionState]);\n\n\tconst handleReject = useCallback(async () => {\n\t\tsetIsSubmitting(true);\n\t\tsetActionType(\"reject\");\n\t\ttry {\n\t\t\tawait onReject();\n\t\t\t// On success: keep spinner visible until modal closes via stream event\n\t\t} catch {\n\t\t\t// On error: reset so user can retry\n\t\t\tresetActionState();\n\t\t}\n\t}, [onReject, resetActionState]);\n\n\tconst handleResend = useCallback(async () => {\n\t\tif (resendCooldownRemaining > 0) return;\n\n\t\tsetIsSubmitting(true);\n\t\tsetActionType(\"resend\");\n\t\ttry {\n\t\t\tawait onResend();\n\t\t\tsetResendCooldownRemaining(RESEND_OTP_COOLDOWN_SECONDS);\n\t\t} catch {\n\t\t\t// Error handled by parent\n\t\t} finally {\n\t\t\tsetActionType(null);\n\t\t\tsetIsSubmitting(false);\n\t\t}\n\t}, [resendCooldownRemaining, onResend]);\n\n\tif (!isOpen || !userActionRequest) return null;\n\n\tconst isOtpValid = otp.length === schema.maxLength && /^\\d+$/.test(otp);\n\n\treturn (\n\t\t<>\n\t\t\t{/* Backdrop */}\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: \"fixed\",\n\t\t\t\t\tinset: 0,\n\t\t\t\t\tbackgroundColor: \"rgba(0, 0, 0, 0.5)\",\n\t\t\t\t\tzIndex: 10000,\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{/* Dialog */}\n\t\t\t\t<div\n\t\t\t\t\tref={dialogRef}\n\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackgroundColor: \"var(--card, #FFFFFF)\",\n\t\t\t\t\t\tborderRadius: \"12px\",\n\t\t\t\t\t\tpadding: \"24px\",\n\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\tmaxWidth: \"420px\",\n\t\t\t\t\t\tmargin: \"0 16px\",\n\t\t\t\t\t\tboxShadow: \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\",\n\t\t\t\t\t}}\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t>\n\t\t\t\t\t{/* Icon + Title */}\n\t\t\t\t\t<div style={{ textAlign: \"center\", marginBottom: \"16px\" }}>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tdisplay: \"inline-flex\",\n\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\twidth: \"48px\",\n\t\t\t\t\t\t\t\theight: \"48px\",\n\t\t\t\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\t\t\t\tbackgroundColor: \"var(--muted, #F5F5F5)\",\n\t\t\t\t\t\t\t\tmarginBottom: \"12px\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ShieldCheck\n\t\t\t\t\t\t\t\tclassName=\"text-primary\"\n\t\t\t\t\t\t\t\tstyle={{ width: \"24px\", height: \"24px\" }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<h2\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: \"18px\",\n\t\t\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\t\t\tcolor: \"var(--foreground, #000)\",\n\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{MODAL_CONTENT.TITLE}\n\t\t\t\t\t\t</h2>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Description from backend */}\n\t\t\t\t\t<p\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tcolor: \"var(--muted-foreground, #666)\",\n\t\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\t\tlineHeight: 1.5,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{userActionRequest.message}\n\t\t\t\t\t</p>\n\n\t\t\t\t\t{/* OTP Input */}\n\t\t\t\t\t<div style={{ marginBottom: \"24px\" }}>\n\t\t\t\t\t\t<OtpInput\n\t\t\t\t\t\t\tvalue={otp}\n\t\t\t\t\t\t\tonChange={setOtp}\n\t\t\t\t\t\t\tmaxLength={schema.maxLength}\n\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t{/* Buttons — stacked: Reject + Approve on top, Resend below */}\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\t\tgap: \"10px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{/* Reject + Approve row */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\tgap: \"8px\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tonClick={handleReject}\n\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"py-2.5 px-4 rounded-lg text-sm font-medium transition-colors\",\n\t\t\t\t\t\t\t\t\"bg-destructive/10 text-destructive hover:bg-destructive/20 hover:text-destructive\",\n\t\t\t\t\t\t\t\t\"disabled:opacity-50 disabled:cursor-not-allowed\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\tgap: \"6px\",\n\t\t\t\t\t\t\t\twhiteSpace: \"nowrap\",\n\t\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{actionType === \"reject\" && (\n\t\t\t\t\t\t\t\t<Loader2 className=\"w-4 h-4 animate-spin\" style={{ flexShrink: 0 }} />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{actionType === \"reject\" ? MODAL_CONTENT.LOADING_REJECT : BUTTON_LABELS.REJECT}\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tonClick={handleApprove}\n\t\t\t\t\t\t\tdisabled={!isOtpValid || isSubmitting}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"py-2.5 px-4 rounded-lg text-sm font-medium transition-colors\",\n\t\t\t\t\t\t\t\t\"bg-primary text-primary-foreground hover:bg-primary/90 active:bg-primary/80\",\n\t\t\t\t\t\t\t\t\"disabled:opacity-50 disabled:cursor-not-allowed\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\tgap: \"6px\",\n\t\t\t\t\t\t\t\twhiteSpace: \"nowrap\",\n\t\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{actionType === \"approve\" && (\n\t\t\t\t\t\t\t\t<Loader2 className=\"w-4 h-4 animate-spin\" style={{ flexShrink: 0 }} />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{actionType === \"approve\" ? MODAL_CONTENT.LOADING_APPROVE : BUTTON_LABELS.APPROVE}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Resend OTP — full width below */}\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={handleResend}\n\t\t\t\t\t\tdisabled={isSubmitting || resendCooldownRemaining > 0}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"py-2 px-4 rounded-lg text-xs font-medium transition-colors w-full\",\n\t\t\t\t\t\t\t\"text-muted-foreground hover:text-foreground\",\n\t\t\t\t\t\t\t\"disabled:opacity-50 disabled:cursor-not-allowed\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\tgap: \"6px\",\n\t\t\t\t\t\t\twhiteSpace: \"nowrap\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{actionType === \"resend\" && (\n\t\t\t\t\t\t\t<Loader2 className=\"w-3.5 h-3.5 animate-spin\" style={{ flexShrink: 0 }} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{actionType === \"resend\"\n\t\t\t\t\t\t\t? MODAL_CONTENT.LOADING_RESEND\n\t\t\t\t\t\t\t: resendCooldownRemaining > 0\n\t\t\t\t\t\t\t\t? `${MODAL_CONTENT.RESEND_AVAILABLE_IN} ${resendCooldownRemaining}s`\n\t\t\t\t\t\t\t\t: BUTTON_LABELS.RESEND}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n","import { useMemo, useState } from \"react\";\nimport { useChat } from \"@paymanai/payman-typescript-ask-sdk\";\nimport { PaymanChatContext } from \"../../contexts\";\nimport type { PaymanChatProps, UserActionState } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { ChatInput } from \"../ChatInput\";\nimport { MessageList } from \"../MessageList\";\nimport { UserActionModal } from \"../UserActionModal\";\n\nconst DEFAULT_USER_ACTION_STATE: UserActionState = {\n\trequest: null,\n\tresult: null,\n\tclearOtpTrigger: 0,\n};\n\nconst NOOP_ASYNC = async () => {};\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 chat = useChat(config, callbacks);\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} = chat;\n\n\t// Keep OTP features backward-safe if hook returns a non-OTP shape.\n\tconst userActionState = chat.userActionState ?? DEFAULT_USER_ACTION_STATE;\n\tconst approveUserAction = chat.approveUserAction ?? NOOP_ASYNC;\n\tconst rejectUserAction = chat.rejectUserAction ?? NOOP_ASYNC;\n\tconst resendOtp = chat.resendOtp ?? NOOP_ASYNC;\n\tconst isUserActionSupported =\n\t\ttypeof chat.approveUserAction === \"function\" &&\n\t\ttypeof chat.rejectUserAction === \"function\" &&\n\t\ttypeof chat.resendOtp === \"function\";\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\tinputStyle = \"rounded\",\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\tinputStyle={inputStyle}\n\t\t\t\t\tlayout={layout}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{/* User Action (OTP) Modal */}\n\t\t\t<UserActionModal\n\t\t\t\tisOpen={isUserActionSupported && userActionState.request !== null}\n\t\t\t\tuserActionRequest={userActionState.request}\n\t\t\t\tonApprove={approveUserAction}\n\t\t\t\tonReject={rejectUserAction}\n\t\t\t\tonResend={resendOtp}\n\t\t\t\tclearOtpTrigger={userActionState.clearOtpTrigger}\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/OtpInput/index.tsx","../src/components/UserActionModal/constants.ts","../src/components/UserActionModal/utils.ts","../src/components/UserActionModal/index.tsx","../src/components/PaymanChat/index.tsx"],"names":["createContext","useContext","twMerge","clsx","useRef","useEffect","jsx","jsxs","motion","Pause","Send","useState","Bot","CheckCircle2","XCircle","Loader2","X","ReactMarkdown","remarkGfm","ChevronUp","ChevronDown","AnimatePresence","Check","Binoculars","User","useCallback","Fragment","ShieldCheck","useChat","useMemo"],"mappings":";;;;;;;;;;;;;;;;;AAmCO,IAAM,iBAAA,GAAoBA,oBAE/B,MAAS;AAmBJ,SAAS,aAAA,GAAwC;AACvD,EAAA,MAAM,OAAA,GAAUC,iBAAW,iBAAiB,CAAA;AAC5C,EAAA,IAAI,CAAC,OAAA,EAAS;AACb,IAAA,MAAM,IAAI,MAAM,0DAA0D,CAAA;AAAA,EAC3E;AACA,EAAA,OAAO,OAAA;AACR;ACxDO,SAAS,MAAM,MAAA,EAAsB;AAC3C,EAAA,OAAOC,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC5B;;;ACLO,SAAS,WAAW,SAAA,EAAkC;AAC5D,EAAA,MAAM,OAAO,OAAO,SAAA,KAAc,WAAW,IAAI,IAAA,CAAK,SAAS,CAAA,GAAI,SAAA;AAEnE,EAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,OAAA,EAAQ,GAAI,KAAK,OAAA,EAAQ;AAC5C,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,GAAK,CAAA;AAC1C,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,IAAO,CAAA;AAC7C,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,KAAQ,CAAA;AAG7C,EAAA,IAAI,WAAW,CAAA,EAAG;AACjB,IAAA,OAAO,UAAA;AAAA,EACR;AAGA,EAAA,IAAI,WAAW,EAAA,EAAI;AAClB,IAAA,OAAO,GAAG,QAAQ,CAAA,KAAA,CAAA;AAAA,EACnB;AAGA,EAAA,IAAI,YAAY,EAAA,EAAI;AACnB,IAAA,OAAO,GAAG,SAAS,CAAA,KAAA,CAAA;AAAA,EACpB;AAGA,EAAA,IAAI,WAAW,CAAA,EAAG;AACjB,IAAA,OAAO,GAAG,QAAQ,CAAA,KAAA,CAAA;AAAA,EACnB;AAGA,EAAA,OAAO,IAAA,CAAK,mBAAmB,OAAA,EAAS;AAAA,IACvC,KAAA,EAAO,OAAA;AAAA,IACP,GAAA,EAAK,SAAA;AAAA,IACL,MAAM,IAAA,CAAK,WAAA,OAAkB,GAAA,CAAI,WAAA,KAAgB,SAAA,GAAY;AAAA,GAC7D,CAAA;AACF;AChCO,SAAS,SAAA,CAAU;AAAA,EACzB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,WAAA,GAAc,sBAAA;AAAA,EACd,oBAAA,GAAuB,KAAA;AAAA,EACvB,kBAAA,GAAqB,IAAA;AAAA,EACrB,yBAAA,GAA4B,IAAA;AAAA,EAC5B,OAAA;AAAA,EACA;AACD,CAAA,EAAmB;AAClB,EAAA,MAAM,WAAA,GAAcC,aAA4B,IAAI,CAAA;AAGpD,EAAAC,eAAA,CAAU,MAAM;AACf,IAAA,IAAI,YAAY,OAAA,EAAS;AACxB,MAAA,WAAA,CAAY,OAAA,CAAQ,MAAM,MAAA,GAAS,MAAA;AACnC,MAAA,MAAM,YAAA,GAAe,YAAY,OAAA,CAAQ,YAAA;AACzC,MAAA,MAAM,SAAA,GAAY,GAAA;AAClB,MAAA,WAAA,CAAY,OAAA,CAAQ,MAAM,MAAA,GAAS,CAAA,EAAG,KAAK,GAAA,CAAI,YAAA,EAAc,SAAS,CAAC,CAAA,EAAA,CAAA;AAAA,IACxE;AAAA,EACD,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAgD;AACtE,IAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAC,EAAE,QAAA,EAAU;AACrC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,MAAA,EAAO;AAAA,IACR;AAAA,EACD,CAAA;AAEA,EAAA,MAAM,kBAAkB,QAAA,IAAY,oBAAA;AACpC,EAAA,MAAM,kBAAkB,oBAAA,IAAwB,OAAA;AAEhD,EAAA,MAAM,iBAAiB,MAAM;AAC5B,IAAA,IAAI,CAAC,kBAAA,EAAoB;AACxB,MAAA,OAAO,oCAAA;AAAA,IACR;AACA,IAAA,IAAI,CAAC,yBAAA,EAA2B;AAC/B,MAAA,OAAO,oDAAA;AAAA,IACR;AACA,IAAA,OAAO,WAAA;AAAA,EACR,CAAA;AAEA,EAAA,uBACCC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,0BAAA,EAA4B,SAAS,CAAA,EAAG,KAAA,EAAO,EAAE,UAAA,EAAY,CAAA,EAAE,EACjF,yCAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EACd,QAAA,kBAAAA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAuB,KAAA,EAAO,EAAE,QAAA,EAAU,OAAA,EAAQ,EACjE,QAAA,kBAAAC,eAAA;AAAA,IAACC,mBAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACA,OAAA,EAAS,KAAA;AAAA,MACT,SAAA,EAAU,mGAAA;AAAA,MACV,KAAA,EAAO,EAAE,YAAA,EAAc,MAAA,EAAO;AAAA,MAE9B,QAAA,EAAA;AAAA,wBAAAF,cAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACA,GAAA,EAAK,WAAA;AAAA,YACL,KAAA;AAAA,YACA,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YACxC,SAAA,EAAW,aAAA;AAAA,YACX,OAAA;AAAA,YACA,QAAA,EAAU,eAAA;AAAA,YACV,aAAa,cAAA,EAAe;AAAA,YAC5B,SAAA,EAAU,gLAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACN,SAAA,EAAW,MAAA;AAAA,cACX,SAAA,EAAW,OAAA;AAAA,cACX,OAAA,EAAS;AAAA,aACV;AAAA,YACA,IAAA,EAAM;AAAA;AAAA,SACP;AAAA,QACA,eAAA,mBACAA,cAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACA,OAAA,EAAS,OAAA;AAAA,YACT,SAAA,EAAU,sHAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACN,QAAA,EAAU,UAAA;AAAA,cACV,MAAA,EAAQ,KAAA;AAAA,cACR,KAAA,EAAO,KAAA;AAAA,cACP,OAAA,EAAS,KAAA;AAAA,cACT,YAAA,EAAc,QAAA;AAAA,cACd,KAAA,EAAO,MAAA;AAAA,cACP,MAAA,EAAQ;AAAA,aACT;AAAA,YACA,YAAA,EAAW,eAAA;AAAA,YAEX,QAAA,kBAAAA,cAAA,CAACG,iBAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,SAC5B,mBAEAH,cAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACA,OAAA,EAAS,MAAA;AAAA,YACT,QAAA,EAAU,eAAA,IAAmB,CAAC,KAAA,CAAM,IAAA,EAAK;AAAA,YACzC,SAAA,EAAU,sKAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACN,QAAA,EAAU,UAAA;AAAA,cACV,MAAA,EAAQ,KAAA;AAAA,cACR,KAAA,EAAO,KAAA;AAAA,cACP,OAAA,EAAS,KAAA;AAAA,cACT,YAAA,EAAc,QAAA;AAAA,cACd,KAAA,EAAO,MAAA;AAAA,cACP,MAAA,EAAQ;AAAA,aACT;AAAA,YACA,YAAA,EAAW,cAAA;AAAA,YAEX,QAAA,kBAAAA,cAAA,CAACI,gBAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AAC3B;AAAA;AAAA,GAEF,EACA,GACA,CAAA,EACD,CAAA;AAEF;AC7GO,SAAS,YAAA,CAAa;AAAA,EAC5B,OAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,aAAA,GAAgB,KAAA;AAAA,EAChB,SAAA,GAAY,WAAA;AAAA,EACZ,UAAA,GAAa,KAAA;AAAA,EACb,MAAA,GAAS,YAAA;AAAA,EACT,kBAAA,GAAqB,KAAA;AAAA,EACrB,gBAAA,GAAmB,KAAA;AAAA,EACnB,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACD,CAAA,EAAsB;AACrB,EAAA,MAAM,WAAA,GAAc,QAAQ,WAAA,IAAe,KAAA;AAC3C,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,KAAA,IAAS,OAAA,CAAQ,MAAM,MAAA,GAAS,CAAA;AACzD,EAAA,MAAM,eAAe,CAAC,EAAE,QAAQ,WAAA,IAAe,OAAA,CAAQ,gBAAgB,CAAC,WAAA;AACxE,EAAA,MAAM,OAAA,GAAU,QAAQ,OAAA,KAAY,OAAA,CAAQ,mBAAmB,OAAA,IAAW,CAAC,CAAC,OAAA,CAAQ,YAAA,CAAA;AACpF,EAAA,MAAM,WAAA,GAAc,QAAQ,WAAA,IAAe,KAAA;AAC3C,EAAA,MAAM,yBAAyB,OAAA,CAAQ,sBAAA;AAGvC,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIC,cAAA,CAAS,eAAe,QAAQ,CAAA;AAG9E,EAAAN,gBAAU,MAAM;AACf,IAAA,IAAI,eAAe,QAAA,EAAU;AAC5B,MAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,IACxB;AAAA,EAED,CAAA,EAAG,CAAC,WAAA,EAAa,QAAQ,CAAC,CAAA;AAG1B,EAAA,MAAM,cAAA,GAAiB,QAAA,GACpB,OAAA,CAAQ,KAAA,CAAO,MAAA,CAAO,CAAC,GAAA,EAAK,IAAA,KAAS,GAAA,IAAO,IAAA,CAAK,SAAA,IAAa,CAAA,CAAA,EAAI,CAAC,CAAA,GACnE,CAAA;AAEH,EAAA,MAAM,iBAAiB,OAAA,CAAQ,cAAA;AAE/B,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,gBAAA,IAAoB,OAAA,CAAQ,OAAA,IAAW,EAAA;AAClE,EAAA,MAAM,OAAA,GAAU,UAAA,CAAW,OAAA,CAAQ,MAAA,EAAQ,IAAI,CAAA;AAG/C,EAAA,MAAM,qBAAA,GAAwB,CAAC,QAAA,KAAsB;AACpD,IAAA,MAAM,WAAA,GAAc,CAAA,EAAG,QAAA,GAAW,MAAA,GAAS,MAAM,CAAA,mBAAA,EAAsB,OAAA,CAAQ,KAAA,CAAO,MAAA,KAAW,CAAA,GAAI,MAAA,GAAS,OAAO,CAAA,CAAA,CAAA;AACrH,IAAA,MAAM,OAAO,kBAAA,IAAsB,WAAA;AACnC,IAAA,MAAM,MAAA,GAAS,WAAW,MAAA,GAAS,MAAA;AACnC,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,SAAA,EAAW,OAAA,CAAQ,KAAA,CAAO,MAAA,CAAO,QAAA,EAAU,CAAA,CAAE,OAAA,CAAQ,cAAA,EAAgB,MAAM,CAAA;AAAA,EAChG,CAAA;AAEA,EAAA,MAAM,qBAAA,GAAwB,CAAC,QAAA,KAAsB;AAEpD,IAAA,IAAI,kBAAA,EAAoB;AACvB,MAAA,MAAM,SAAS,kBAAA,CACb,OAAA,CAAQ,SAAA,EAAW,OAAA,CAAQ,MAAO,MAAA,CAAO,QAAA,EAAU,CAAA,CACnD,QAAQ,QAAA,EAAA,CAAW,cAAA,GAAiB,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA;AAGtD,MAAA,OAAO,MAAA;AAAA,IACR;AAGA,IAAA,MAAM,MAAA,GAAS,WAAW,MAAA,GAAS,MAAA;AACnC,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,KAAA,CAAO,MAAA,KAAW,IAAI,MAAA,GAAS,OAAA;AACxD,IAAA,OAAO,GAAG,MAAM,CAAA,kBAAA,EAAqB,QAAQ,KAAA,CAAO,MAAM,IAAI,QAAQ,CAAA,CAAA,CAAA;AAAA,EACvE,CAAA;AAEA,EAAA,MAAM,cAAA,mBACLE,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6CAAA,EAEb,QAAA,EAAA;AAAA,IAAA,UAAA,oBACAD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BACb,QAAA,EAAA,WAAA,IAAe,gBAAA;AAAA;AAAA,sBAEfA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CACd,QAAA,kBAAAC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACd,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+CAAA,EAAgD,CAAA;AAAA,wBAC/DA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0EAAA,EAA2E;AAAA,OAAA,EAC3F,CAAA,EACD;AAAA;AAAA;AAAA,sBAGAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gEAAA,EACd,0BAAAA,cAAAA,CAACM,eAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EAAgC,CAAA,EAChD;AAAA,KAAA,EAEF,CAAA;AAAA,oBAIFL,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA;AAAA,MACf,uBAAA;AAAA,MACA,MAAA,KAAW,UAAA,GAAa,aAAA,GAAiB,UAAA,GAAa,aAAA,GAAgB;AAAA,KACvE,EAEE,QAAA,EAAA;AAAA,MAAA,OAAA,CAAQ,gBAAA,oBACRD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,QAAA,EAAA,OAAA,CAAQ,gBAAA,KAAqB,UAAA,mBAC7BC,eAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,uGAAA,EACf,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAACO,wBAAA,EAAA,EAAa,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,QAAE;AAAA,OAAA,EACrC,CAAA,mBAEAN,eAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,mGAAA,EACf,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAACQ,mBAAA,EAAA,EAAQ,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,QAAE;AAAA,OAAA,EAChC,CAAA,EAEF,CAAA;AAAA,sBAIDP,eAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACA,SAAA,EAAW,EAAA;AAAA,YACV,wBAAA;AAAA,YACA,WAAW,UAAA,GACR,EAAA;AAAA,cACD,iDAAA;AAAA,cACA,WAAW,wCAAA,GAA2C,2BAAA;AAAA,cACtD,OAAA,CAAQ,cAAc,8BAAA,GAAiC,oBAAA;AAAA,cACvD,OAAA,IAAW;AAAA,aACZ,GACE,EAAA;AAAA,cACD,KAAA;AAAA,cACA,QAAA,IAAY,CAAC,WAAA,GAAc,cAAA,GAAiB,YAAA;AAAA,cAC5C,UAAU,gDAAA,GAAmD;AAAA;AAC9D,WACF;AAAA,UAGE,QAAA,EAAA;AAAA,YAAA,aAAA,oBACAD,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2CACX,QAAA,EAAA,SAAA,EACF,CAAA;AAAA,4BAIDA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,2BAA2B,MAAA,KAAW,UAAA,GAAa,KAAA,GAAQ,EAAA,EAAI,iBAAiB,MAAM,CAAA,EACvG,QAAA,EAAA,WAAA,IAAe,CAAC,UAChB,CAAC,UAAA;AAAA;AAAA,8BAEAC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACd,QAAA,EAAA;AAAA,gCAAAD,cAAAA,CAACS,mBAAA,EAAA,EAAQ,SAAA,EAAU,iDAAA,EAAkD,CAAA;AAAA,gCACrET,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EACd,4CACAC,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0BAAA,EAA2B,QAAA,EAAA;AAAA,kBAAA,UAAA;AAAA,kCAE1CA,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EACf,QAAA,EAAA;AAAA,oCAAAD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EAAe,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,oCAChCA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAe,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,oCAChCA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAe,QAAA,EAAA,GAAA,EAAC;AAAA,mBAAA,EACjC;AAAA,iBAAA,EACD,CAAA,EAEF;AAAA,eAAA,EACD;AAAA;AAAA;AAAA,8BAGAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EACd,4CACAC,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0BAAA,EAA2B,QAAA,EAAA;AAAA,gBAAA,UAAA;AAAA,gCAE1CA,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EACf,QAAA,EAAA;AAAA,kCAAAD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EAAe,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,kCAChCA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAe,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,kCAChCA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAe,QAAA,EAAA,GAAA,EAAC;AAAA,iBAAA,EACjC;AAAA,eAAA,EACD,CAAA,EAEF;AAAA,aAAA,GAEE,eAAe,CAAC,OAAA;AAAA;AAAA,cAEnB,CAAC,UAAA,mBACAC,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACd,QAAA,EAAA;AAAA,gCAAAD,cAAAA,CAACU,aAAA,EAAA,EAAE,SAAA,EAAU,6CAAA,EAA8C,CAAA;AAAA,gCAC3DV,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EACd,4BAAkB,0BAAA,EACpB;AAAA,eAAA,EACD,oBAEAA,cAAAA,CAAC,UAAK,SAAA,EAAU,+BAAA,EACd,4BAAkB,0BAAA,EACpB;AAAA,gCAGDA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA;AAAA,cACf,6CAAA;AAAA,cACA,OAAA,IAAW;AAAA,eAEX,QAAA,kBAAAA,cAAAA;AAAA,cAACW,8BAAA;AAAA,cAAA;AAAA,gBACA,aAAA,EAAe,CAACC,0BAAS,CAAA;AAAA,gBACzB,UAAA,EAAY;AAAA,kBACX,CAAA,EAAG,CAAC,EAAE,QAAA,uBACLZ,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAW,GAAG,wCAAA,EAA0C,OAAA,GAAU,kBAAA,GAAqB,iBAAiB,GACzG,QAAA,EACF,CAAA;AAAA,kBAED,MAAM,CAAC,EAAE,SAAA,EAAW,aAAA,EAAe,UAAS,KAAM;AACjD,oBAAA,MAAM,WAAW,CAAC,aAAA;AAClB,oBAAA,OAAO,QAAA,mBACNA,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAW,EAAA,CAAG,mDAAA,EAAqD,OAAA,GAAU,oCAAA,GAAuC,UAAU,CAAA,EAClI,UACF,CAAA,mBAEAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,2EAA2E,OAAA,GAAU,oCAAA,GAAuC,UAAU,CAAA,EACxJ,QAAA,EACF,CAAA;AAAA,kBAEF,CAAA;AAAA,kBACA,GAAA,EAAK,CAAC,EAAE,QAAA,uBACPA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,iCAAA,EAAmC,OAAA,IAAW,mBAAmB,GAAI,QAAA,EAAS,CAAA;AAAA,kBAElG,EAAA,EAAI,CAAC,EAAE,QAAA,uBACNA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,EAAA,CAAG,uCAAA,EAAyC,OAAA,IAAW,kBAAkB,GACtF,QAAA,EACF,CAAA;AAAA,kBAED,EAAA,EAAI,CAAC,EAAE,QAAA,uBACNA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,EAAA,CAAG,0CAAA,EAA4C,OAAA,IAAW,kBAAkB,GACzF,QAAA,EACF,CAAA;AAAA,kBAED,EAAA,EAAI,CAAC,EAAE,QAAA,uBACNA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,GAAG,yBAAA,EAA2B,OAAA,GAAU,kBAAA,GAAqB,iBAAiB,GAC3F,QAAA,EACF,CAAA;AAAA,kBAED,EAAA,EAAI,CAAC,EAAE,QAAA,uBACNA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,GAAG,4CAAA,EAA8C,OAAA,GAAU,kBAAA,GAAqB,iBAAiB,GAC9G,QAAA,EACF,CAAA;AAAA,kBAED,EAAA,EAAI,CAAC,EAAE,QAAA,uBACNA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,GAAG,8CAAA,EAAgD,OAAA,GAAU,kBAAA,GAAqB,iBAAiB,GAChH,QAAA,EACF,CAAA;AAAA,kBAED,EAAA,EAAI,CAAC,EAAE,QAAA,uBACNA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,GAAG,4CAAA,EAA8C,OAAA,GAAU,kBAAA,GAAqB,iBAAiB,GAC9G,QAAA,EACF,CAAA;AAAA,kBAED,MAAA,EAAQ,CAAC,EAAE,QAAA,uBACVA,cAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAW,GAAG,eAAA,EAAiB,OAAA,GAAU,kBAAA,GAAqB,iBAAiB,GAAI,QAAA,EAAS,CAAA;AAAA,kBAErG,EAAA,EAAI,CAAC,EAAE,QAAA,uBACNA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,GAAG,QAAA,EAAU,OAAA,GAAU,kBAAA,GAAqB,iBAAiB,GAAI,QAAA,EAAS,CAAA;AAAA,kBAE1F,UAAA,EAAY,CAAC,EAAE,QAAA,EAAS,qBACvBA,cAAAA,CAAC,YAAA,EAAA,EAAW,SAAA,EAAU,iEAAA,EACpB,QAAA,EACF,CAAA;AAAA,kBAED,IAAI,sBAAMA,cAAAA,CAAC,IAAA,EAAA,EAAG,WAAU,oBAAA,EAAqB,CAAA;AAAA,kBAC7C,GAAG,CAAC,EAAE,IAAA,EAAM,QAAA,uBACXA,cAAAA;AAAA,oBAAC,GAAA;AAAA,oBAAA;AAAA,sBACA,IAAA;AAAA,sBACA,MAAA,EAAO,QAAA;AAAA,sBACP,GAAA,EAAI,qBAAA;AAAA,sBACJ,SAAA,EAAW,EAAA,CAAG,8BAAA,EAAgC,OAAA,GAAU,+CAA+C,oCAAoC,CAAA;AAAA,sBAE1I;AAAA;AAAA,mBACF;AAAA,kBAED,OAAO,CAAC,EAAE,QAAA,EAAS,qBAClBA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EACd,0BAAAA,cAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,mEAAA,EACf,UACF,CAAA,EACD,CAAA;AAAA,kBAED,KAAA,EAAO,CAAC,EAAE,QAAA,EAAS,qBAClBA,cAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,6BAAA,EACf,QAAA,EACF,CAAA;AAAA,kBAED,KAAA,EAAO,CAAC,EAAE,QAAA,EAAS,qBAClBA,cAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,4BAAA,EACf,QAAA,EACF,CAAA;AAAA,kBAED,EAAA,EAAI,CAAC,EAAE,QAAA,EAAS,qBACfA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,8CAAA,EACZ,QAAA,EACF,CAAA;AAAA,kBAED,EAAA,EAAI,CAAC,EAAE,QAAA,EAAS,qBACfA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,gFAAA,EACZ,QAAA,EACF,CAAA;AAAA,kBAED,EAAA,EAAI,CAAC,EAAE,QAAA,EAAS,qBACfA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,kCAAA,EACZ,QAAA,EACF;AAAA,iBAEF;AAAA,gBAEC,sBAAY,WAAA,GAAc,aAAA,GAAiB,WAAA,GAAc,0BAAA,GAA8B,UAAU,+CAAA,GAAkD,EAAA;AAAA;AAAA,eAEtJ,CAAA,EAEF;AAAA;AAAA;AAAA,OACD;AAAA,MAGA,kBAAA,IAAsB,YAAY,CAAC,WAAA,IAAe,CAAC,OAAA,oBACnDC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA;AAAA,QACf,iBAAA;AAAA,QACA,MAAA,KAAW,aACR,6DAAA,GACA;AAAA,OACJ,EACC,QAAA,EAAA;AAAA,wBAAAA,eAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACA,OAAA,EAAS,MAAM,kBAAA,CAAmB,CAAC,eAAe,CAAA;AAAA,YAClD,SAAA,EAAW,EAAA;AAAA,cACV,8EAAA;AAAA,cACA,MAAA,KAAW,aACR,sCAAA,GACA;AAAA,aACJ;AAAA,YAEC,QAAA,EAAA;AAAA,8BAAAD,eAAC,MAAA,EAAA,EAAM,QAAA,EAAA,qBAAA,CAAsB,CAAC,CAAC,eAAe,CAAA,EAAE,CAAA;AAAA,cAC/C,eAAA,mBACAA,cAAAA,CAACa,qBAAA,EAAA,EAAU,SAAA,EAAU,SAAA,EAAU,CAAA,mBAE/Bb,cAAAA,CAACc,uBAAA,EAAA,EAAY,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AAAA,SAEnC;AAAA,QAGC,eAAA,oBACAd,cAAAA,CAACe,4BAAA,EAAA,EACA,QAAA,kBAAAf,cAAAA;AAAA,UAACE,mBAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACA,OAAA,EAAS,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,YACjC,OAAA,EAAS,EAAE,MAAA,EAAQ,MAAA,EAAQ,SAAS,CAAA,EAAE;AAAA,YACtC,IAAA,EAAM,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,YAC9B,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA,EAAI;AAAA,YAC5B,SAAA,EAAU,2CAAA;AAAA,YAET,QAAA,EAAA,OAAA,CAAQ,KAAA,CAAO,GAAA,CAAI,CAAC,IAAA,KAAS;AAE7B,cAAA,MAAM,oBAAA,GAAuB,KAAK,EAAA,KAAO,sBAAA,IAA0B,KAAK,MAAA,KAAW,aAAA,IAAiB,eAAe,CAAC,WAAA;AACpH,cAAA,uBACCD,eAAAA,CAAC,KAAA,EAAA,EAAkB,SAAA,EAAU,gCAAA,EAE3B,QAAA,EAAA;AAAA,gBAAA,oBAAA,oBACAD,cAAAA,CAACS,mBAAA,EAAA,EAAQ,SAAA,EAAU,mDAAA,EAAoD,CAAA;AAAA,gBAGvE,IAAA,CAAK,WAAW,SAAA,IAAa,WAAA,oBAC7BT,cAAAA,CAACQ,mBAAA,EAAA,EAAQ,WAAU,+CAAA,EAAgD,CAAA;AAAA,gBAGnE,IAAA,CAAK,WAAW,SAAA,IAAa,CAAC,+BAC9BR,cAAAA,CAACS,mBAAA,EAAA,EAAQ,SAAA,EAAU,mDAAA,EAAoD,CAAA;AAAA,gBAGvE,IAAA,CAAK,WAAW,aAAA,IAAiB,CAAC,wCAClCT,cAAAA,CAACS,mBAAA,EAAA,EAAQ,SAAA,EAAU,mDAAA,EAAoD,CAAA;AAAA,gBAEvE,IAAA,CAAK,MAAA,KAAW,WAAA,oBAChBT,eAACgB,iBAAA,EAAA,EAAM,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,IAAA,CAAK,SAAA,KAAc,qBAAA,GAAwB,gBAAA,GAAmB,cAAc,CAAA,EAAG,CAAA;AAAA,gBAE/H,KAAK,MAAA,KAAW,OAAA,oBAChBhB,cAAAA,CAACU,aAAA,EAAA,EAAE,WAAU,0CAAA,EAA2C,CAAA;AAAA,gCAEzDT,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACd,QAAA,EAAA;AAAA,kCAAAD,cAAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACA,SAAA,EAAW,EAAA;AAAA,wBACV,mCAAA;AAAA,wBACA,IAAA,CAAK,WAAW,OAAA,IAAW,kBAAA;AAAA,wBAC3B,IAAA,CAAK,cAAc,qBAAA,IAAyB;AAAA,uBAC7C;AAAA,sBAEC,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,mBACP;AAAA,kBACC,KAAK,SAAA,oBACLC,eAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,+BAAA,EAAgC,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,oBAAA,CAC5C,IAAA,CAAK,SAAA,GAAY,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,oBAAE;AAAA,mBAAA,EACtC;AAAA,iBAAA,EAEF;AAAA,eAAA,EAAA,EAtCS,KAAK,EAuCf,CAAA;AAAA,YAEF,CAAC;AAAA;AAAA,SACF,EACD;AAAA,OAAA,EAEF,CAAA;AAAA,MAID,QAAA,IAAY,WAAA,oBACZA,eAAAA,CAAC,SAAI,SAAA,EAAW,EAAA;AAAA,QACf,iBAAA;AAAA,QACA,MAAA,KAAW,aACR,6DAAA,GACA;AAAA,OACJ,EACC,QAAA,EAAA;AAAA,wBAAAA,eAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACA,OAAA,EAAS,MAAM,kBAAA,CAAmB,CAAC,eAAe,CAAA;AAAA,YAClD,SAAA,EAAW,EAAA;AAAA,cACV,8EAAA;AAAA,cACA,MAAA,KAAW,aACR,sCAAA,GACA;AAAA,aACJ;AAAA,YAEC,QAAA,EAAA;AAAA,8BAAAD,eAAC,MAAA,EAAA,EAAM,QAAA,EAAA,qBAAA,CAAsB,CAAC,CAAC,eAAe,CAAA,EAAE,CAAA;AAAA,cAC/C,eAAA,mBACAA,cAAAA,CAACa,qBAAA,EAAA,EAAU,SAAA,EAAU,SAAA,EAAU,CAAA,mBAE/Bb,cAAAA,CAACc,uBAAA,EAAA,EAAY,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AAAA,SAEnC;AAAA,QAGC,eAAA,oBACAd,cAAAA,CAACe,4BAAA,EAAA,EACA,QAAA,kBAAAf,cAAAA;AAAA,UAACE,mBAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACA,OAAA,EAAS,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,YACjC,OAAA,EAAS,EAAE,MAAA,EAAQ,MAAA,EAAQ,SAAS,CAAA,EAAE;AAAA,YACtC,IAAA,EAAM,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,YAC9B,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA,EAAI;AAAA,YAC5B,SAAA,EAAU,2CAAA;AAAA,YAET,QAAA,EAAA,OAAA,CAAQ,KAAA,CAAO,GAAA,CAAI,CAAC,IAAA,KAAS;AAE7B,cAAA,MAAM,oBAAA,GAAuB,KAAK,EAAA,KAAO,sBAAA,IAA0B,KAAK,MAAA,KAAW,aAAA,IAAiB,eAAe,CAAC,WAAA;AACpH,cAAA,uBACCD,eAAAA,CAAC,KAAA,EAAA,EAAkB,SAAA,EAAU,gCAAA,EAE3B,QAAA,EAAA;AAAA,gBAAA,oBAAA,oBACAD,cAAAA,CAACS,mBAAA,EAAA,EAAQ,SAAA,EAAU,mDAAA,EAAoD,CAAA;AAAA,gBAGvE,IAAA,CAAK,WAAW,SAAA,IAAa,WAAA,oBAC7BT,cAAAA,CAACQ,mBAAA,EAAA,EAAQ,WAAU,+CAAA,EAAgD,CAAA;AAAA,gBAGnE,IAAA,CAAK,WAAW,SAAA,IAAa,CAAC,+BAC9BR,cAAAA,CAACS,mBAAA,EAAA,EAAQ,SAAA,EAAU,mDAAA,EAAoD,CAAA;AAAA,gBAGvE,IAAA,CAAK,WAAW,aAAA,IAAiB,CAAC,wCAClCT,cAAAA,CAACS,mBAAA,EAAA,EAAQ,SAAA,EAAU,mDAAA,EAAoD,CAAA;AAAA,gBAExE,IAAA,CAAK,MAAA,KAAW,WAAA,oBAChBT,eAACgB,iBAAA,EAAA,EAAM,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,IAAA,CAAK,SAAA,KAAc,qBAAA,GAAwB,gBAAA,GAAmB,cAAc,CAAA,EAAG,CAAA;AAAA,gBAE/H,KAAK,MAAA,KAAW,OAAA,oBAChBhB,cAAAA,CAACU,aAAA,EAAA,EAAE,WAAU,0CAAA,EAA2C,CAAA;AAAA,gCAEzDT,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACd,QAAA,EAAA;AAAA,kCAAAD,cAAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACA,SAAA,EAAW,EAAA;AAAA,wBACV,mCAAA;AAAA,wBACA,IAAA,CAAK,WAAW,OAAA,IAAW,kBAAA;AAAA,wBAC3B,IAAA,CAAK,cAAc,qBAAA,IAAyB;AAAA,uBAC7C;AAAA,sBAEC,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,mBACP;AAAA,kBACC,KAAK,SAAA,oBACLC,eAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,+BAAA,EAAgC,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,oBAAA,CAC5C,IAAA,CAAK,SAAA,GAAY,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,oBAAE;AAAA,mBAAA,EACtC;AAAA,iBAAA,EAEF;AAAA,eAAA,EAAA,EAtCU,KAAK,EAuChB,CAAA;AAAA,YAEF,CAAC;AAAA;AAAA,SACF,EACD;AAAA,OAAA,EAEF;AAAA,KAAA,EAED,CAAA;AAAA,IAGC,YAAA,IAAgB,yCAChBD,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACA,OAAA,EAAS,MACR,qBAAA,CAAsB;AAAA,UACrB,OAAA;AAAA,UACA,aAAa,OAAA,CAAQ,WAAA;AAAA,UACrB,aAAa,OAAA,CAAQ;AAAA,SACrB,CAAA;AAAA,QAEF,SAAA,EAAW,EAAA;AAAA,UACV,kJAAA;AAAA,UACA,OAAA,CAAQ,mBAAmB,MAAA,GAAS;AAAA,SACrC;AAAA,QACA,KAAA,EAAM,sBAAA;AAAA,QACN,YAAA,EAAW,sBAAA;AAAA,QAEX,QAAA,kBAAAA,cAAAA,CAACiB,sBAAA,EAAA,EAAW,SAAA,EAAU,yBAAA,EAA0B;AAAA;AAAA;AACjD,GAAA,EAEF,CAAA;AAGD,EAAA,IAAI,QAAA,EAAU;AACb,IAAA,uBACCjB,cAAAA;AAAA,MAACE,mBAAAA,CAAO,GAAA;AAAA,MAAP;AAAA,QACA,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,QAC7B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,QAC5B,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA,EAAI;AAAA,QAE3B,QAAA,EAAA;AAAA;AAAA,KACF;AAAA,EAEF;AAEA,EAAA,OAAO,cAAA;AACR;ACrgBO,SAAS,YAAY,EAAE,OAAA,EAAS,WAAW,KAAA,EAAO,UAAA,GAAa,OAAM,EAAqB;AAChG,EAAA,MAAM,OAAA,mBACLD,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+BAAA,EAEd,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACd,QAAA,EAAA;AAAA,sBAAAD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EACd,QAAA,kBAAAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,yCAAA,EACX,QAAA,EAAA,OAAA,CAAQ,OAAA,EACV,CAAA,EACD,CAAA;AAAA,sBACAA,eAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0CACX,QAAA,EAAA,UAAA,CAAW,OAAA,CAAQ,SAAS,CAAA,EAC9B;AAAA,KAAA,EACD,CAAA;AAAA,IAGC,8BACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BACd,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uEACd,QAAA,kBAAAA,cAAAA,CAACkB,oBAAK,SAAA,EAAU,sBAAA,EAAuB,GACxC,CAAA,EACD;AAAA,GAAA,EAEF,CAAA;AAGD,EAAA,IAAI,QAAA,EAAU;AACb,IAAA,uBACClB,cAAAA;AAAA,MAACE,mBAAAA,CAAO,GAAA;AAAA,MAAP;AAAA,QACA,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,QAC7B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,QAC5B,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA,EAAK,MAAM,SAAA,EAAU;AAAA,QAE5C,QAAA,EAAA;AAAA;AAAA,KACF;AAAA,EAEF;AAEA,EAAA,OAAO,OAAA;AACR;ACxCO,SAAS,UAAA,CAAW;AAAA,EAC1B,OAAA;AAAA,EACA,KAAA,GAAQ,KAAA;AAAA,EACR,QAAA,GAAW,KAAA;AAAA,EACX,aAAA,GAAgB,KAAA;AAAA,EAChB,SAAA,GAAY,SAAA;AAAA,EACZ,WAAA,GAAc,KAAA;AAAA,EACd,cAAA;AAAA,EACA,mBAAA;AAAA,EACA,MAAA,GAAS,YAAA;AAAA,EACT,cAAA,GAAiB,KAAA;AAAA,EACjB,kBAAA,GAAqB,KAAA;AAAA,EACrB,gBAAA,GAAmB,KAAA;AAAA,EACnB,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACD,CAAA,EAAoB;AAEnB,EAAA,MAAM,oBAAA,GAAuB,cAAA,KAAmB,MAAA,GAAY,cAAA,GAAiB,WAAA;AAC7E,EAAA,MAAM,yBAAA,GAA4B,mBAAA,KAAwB,MAAA,GAAY,mBAAA,GAAsB,WAAA;AAC5F,EAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAQ;AAC5B,IAAA,uBAAOF,cAAAA,CAAC,WAAA,EAAA,EAAY,OAAA,EAAkB,QAAA,EAAoB,YAAY,oBAAA,EAAsB,CAAA;AAAA,EAC7F;AAEA,EAAA,uBACCA,cAAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACA,OAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAA;AAAA,MACA,aAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA,EAAY,yBAAA;AAAA,MACZ,MAAA;AAAA,MACA,aAAA,EAAe,cAAA;AAAA,MACf,kBAAA;AAAA,MACA,gBAAA;AAAA,MACA,kBAAA;AAAA,MACA,kBAAA;AAAA,MACA;AAAA;AAAA,GACD;AAEF;ACzCO,SAAS,kBAAA,CAAmB;AAAA,EAClC,cAAA,GAAiB;AAClB,CAAA,EAA4B;AAC3B,EAAA,uBACCA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,SAAA,EAAW,CAAA,KAAA,EAAQ,cAAA,GAAiB,aAAA,GAAgB,eAAe,CAAA,cAAA,CAAA;AAAA,MAEnE,QAAA,kBAAAC,eAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACA,SAAA,EAAW,CAAA,cAAA,EAAiB,cAAA,GAAiB,WAAA,GAAc,aAAa,CAAA,mBAAA,CAAA;AAAA,UAExE,QAAA,EAAA;AAAA,4BAAAD,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACA,SAAA,EAAW,CAAA,eAAA,EACV,cAAA,GAAiB,eAAA,GAAkB,UACpC,CAAA,OAAA,CAAA;AAAA,gBAEA,QAAA,kBAAAC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACd,QAAA,EAAA;AAAA,kCAAAD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAAA,EAA2C,CAAA;AAAA,kCAC1DA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EAA4C,CAAA;AAAA,kCAC3DA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAAA,EAA2C;AAAA,iBAAA,EAC3D;AAAA;AAAA,aACD;AAAA,4BACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8CAAA,EAA+C;AAAA;AAAA;AAAA;AAC/D;AAAA,GACD;AAEF;ACrBO,SAAS,WAAA,CAAY;AAAA,EAC3B,QAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,cAAA,GAAiB,uBAAA;AAAA,EACjB,kBAAA,GAAqB,IAAA;AAAA,EACrB,MAAA,GAAS,YAAA;AAAA,EACT,cAAA,GAAiB,KAAA;AAAA,EACjB,KAAA,GAAQ,KAAA;AAAA,EACR,QAAA,GAAW,KAAA;AAAA,EACX,aAAA,GAAgB,KAAA;AAAA,EAChB,SAAA,GAAY,SAAA;AAAA,EACZ,WAAA,GAAc,KAAA;AAAA,EACd,cAAA;AAAA,EACA,mBAAA;AAAA,EACA,kBAAA,GAAqB,KAAA;AAAA,EACrB,gBAAA,GAAmB,KAAA;AAAA,EACnB,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA,qBAAA;AAAA,EACA;AACD,CAAA,EAAqB;AACpB,EAAA,MAAM,oBAAA,GAAuBF,aAAuB,IAAI,CAAA;AAGxD,EAAA,MAAM,cAAA,GAAiBqB,kBAAY,MAAM;AACxC,IAAA,MAAM,KAAK,oBAAA,CAAqB,OAAA;AAChC,IAAA,IAAI,EAAA,EAAI;AACP,MAAA,EAAA,CAAG,YAAY,EAAA,CAAG,YAAA;AAAA,IACnB;AAAA,EACD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAApB,gBAAU,MAAM;AACf,IAAA,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,cAAA,EAAe;AAAA,EACzC,CAAA,EAAG,CAAC,QAAA,EAAU,cAAc,CAAC,CAAA;AAE7B,EAAA,IAAI,SAAA,EAAW;AACd,IAAA,uBACCC,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,kCAAkC,SAAS,CAAA,EAC7D,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBACb,QAAA,EAAA,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,CAAA,EAAG,EAAE,GAAA,CAAI,CAAC,CAAA,EAAG,KAAA,qBAClCA,cAAAA;AAAA,MAAC,kBAAA;AAAA,MAAA;AAAA,QAEA,cAAA,EAAgB,QAAQ,CAAA,KAAM;AAAA,OAAA;AAAA,MADzB,YAAY,KAAK,CAAA;AAAA,KAGvB,GACF,CAAA,EACD,CAAA;AAAA,EAEF;AAEA,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AAC1B,IAAA,uBACCA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACV,iGAAA;AAAA,UACA;AAAA,SACD;AAAA,QAEA,QAAA,kBAAAC,eAAAA;AAAA,UAACC,mBAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACA,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,YAC7B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,YAC5B,UAAA,EAAY;AAAA,cACX,QAAA,EAAU,GAAA;AAAA,cACV,IAAA,EAAM;AAAA,aACP;AAAA,YACA,SAAA,EAAU,kCAAA;AAAA,YAGT,QAAA,EAAA;AAAA,cAAA,kBAAA,oBACAF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EACd,QAAA,kBAAAA,cAAAA,CAACM,eAAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EAAgC,CAAA,EAChD,CAAA;AAAA,cAIA,cAAA,CAAe,MAAM,IAAI,CAAA,CAAE,IAAI,CAAC,IAAA,EAAM,0BACtCN,cAAAA;AAAA,gBAAC,IAAA;AAAA,gBAAA;AAAA,kBAEA,SAAA,EAAW,EAAA;AAAA,oBACV,KAAA,KAAU,CAAA,GACP,MAAA,KAAW,UAAA,GACV,wCACA,wCAAA,GACD;AAAA,mBACJ;AAAA,kBAEC,QAAA,EAAA;AAAA,iBAAA;AAAA,gBATI;AAAA,eAWN;AAAA;AAAA;AAAA;AACF;AAAA,KACD;AAAA,EAEF;AAEA,EAAA,uBACCA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,GAAA,EAAK,oBAAA;AAAA,MACL,SAAA,EAAW,EAAA,CAAG,gCAAA,EAAkC,SAAS,CAAA;AAAA,MAEzD,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA;AAAA,QACf,WAAA;AAAA,QACA,MAAA,KAAW,aAAa,6BAAA,GAAgC;AAAA,OACzD,EACE,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,4BACdA,cAAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UAEA,OAAA;AAAA,UACA,KAAA;AAAA,UACA,QAAA;AAAA,UACA,aAAA;AAAA,UACA,SAAA;AAAA,UACA,WAAA;AAAA,UACA,cAAA;AAAA,UACA,mBAAA;AAAA,UACA,MAAA;AAAA,UACA,cAAA;AAAA,UACA,kBAAA;AAAA,UACA,gBAAA;AAAA,UACA,kBAAA;AAAA,UACA,kBAAA;AAAA,UACA;AAAA,SAAA;AAAA,QAfK,OAAA,CAAQ;AAAA,OAiBd,CAAA,EACF;AAAA;AAAA,GACD;AAEF;ACnIA,IAAM,kBAAA,GAAqB,CAAA;AAC3B,IAAM,oBAAA,GAAuB,EAAA;AAC7B,IAAM,mBAAA,GAAsB,GAAA;AAErB,SAAS,SAAS,EAAE,KAAA,EAAO,UAAU,SAAA,EAAW,QAAA,GAAW,OAAM,EAAkB;AACzF,EAAA,MAAM,SAAA,GAAYF,YAAAA,CAAoC,EAAE,CAAA;AACxD,EAAA,MAAM,aAAA,GACL,MAAA,CAAO,SAAA,CAAU,SAAS,CAAA,IAAK,SAAA,GAAY,CAAA,GACxC,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,oBAAoB,CAAA,GACxC,kBAAA;AAGJ,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,EAAE,EAAE,MAAA,CAAO,KAAA,CAAM,aAAa,CAAA,CAAE,KAAK,EAAE,CAAC,CAAA,CAAE,KAAA,CAAM,GAAG,aAAa,CAAA;AAG3F,EAAAC,gBAAU,MAAM;AACf,IAAA,IAAI,QAAA,EAAU;AAEd,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,UAAA,CAAW,MAAM;AAC1C,MAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAA,EAAG,KAAA,EAAM;AAAA,IAC7B,GAAG,mBAAmB,CAAA;AAEtB,IAAA,OAAO,MAAM,MAAA,CAAO,YAAA,CAAa,UAAU,CAAA;AAAA,EAC5C,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,UAAA,GAAa,CAAC,KAAA,KAAkB;AACrC,IAAA,IAAI,KAAA,IAAS,CAAA,IAAK,KAAA,GAAQ,aAAA,EAAe;AACxC,MAAA,SAAA,CAAU,OAAA,CAAQ,KAAK,CAAA,EAAG,KAAA,EAAM;AAAA,IACjC;AAAA,EACD,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,SAAA,KAAwB;AAC5C,IAAA,QAAA,CAAS,UAAU,IAAA,CAAK,EAAE,EAAE,KAAA,CAAM,CAAA,EAAG,aAAa,CAAC,CAAA;AAAA,EACpD,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,EAAe,IAAA,KAAiB;AAErD,IAAA,IAAI,IAAA,IAAQ,CAAC,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAG;AAEhC,IAAA,MAAM,SAAA,GAAY,CAAC,GAAG,MAAM,CAAA;AAC5B,IAAA,SAAA,CAAU,KAAK,CAAA,GAAI,IAAA;AACnB,IAAA,WAAA,CAAY,SAAS,CAAA;AAGrB,IAAA,IAAI,IAAA,IAAQ,KAAA,GAAQ,aAAA,GAAgB,CAAA,EAAG;AACtC,MAAA,UAAA,CAAW,QAAQ,CAAC,CAAA;AAAA,IACrB;AAAA,EACD,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,EAAe,CAAA,KAA6C;AAClF,IAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACtB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA;AAAA,IACD;AAEA,IAAA,IAAI,CAAA,CAAE,QAAQ,WAAA,EAAa;AAC1B,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,IAAI,MAAA,CAAO,KAAK,CAAA,EAAG;AAElB,QAAA,MAAM,SAAA,GAAY,CAAC,GAAG,MAAM,CAAA;AAC5B,QAAA,SAAA,CAAU,KAAK,CAAA,GAAI,EAAA;AACnB,QAAA,WAAA,CAAY,SAAS,CAAA;AAAA,MACtB,CAAA,MAAA,IAAW,QAAQ,CAAA,EAAG;AAErB,QAAA,MAAM,SAAA,GAAY,CAAC,GAAG,MAAM,CAAA;AAC5B,QAAA,SAAA,CAAU,KAAA,GAAQ,CAAC,CAAA,GAAI,EAAA;AACvB,QAAA,WAAA,CAAY,SAAS,CAAA;AACrB,QAAA,UAAA,CAAW,QAAQ,CAAC,CAAA;AAAA,MACrB;AACA,MAAA;AAAA,IACD;AAEA,IAAA,IAAI,CAAA,CAAE,QAAQ,WAAA,EAAa;AAC1B,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,UAAA,CAAW,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,YAAA,EAAc;AAClC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,UAAA,CAAW,QAAQ,CAAC,CAAA;AAAA,IACrB;AAAA,EACD,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAA4B;AAChD,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,MAAM,MAAA,GAAS,CAAA,CAAE,aAAA,CAAc,OAAA,CAAQ,MAAM,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,aAAa,CAAA;AACxF,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,IAAA,MAAM,SAAA,GAAY,MAAA,CAChB,KAAA,CAAM,EAAE,EACR,MAAA,CAAO,KAAA,CAAM,aAAa,CAAA,CAAE,KAAK,EAAE,CAAC,CAAA,CACpC,KAAA,CAAM,GAAG,aAAa,CAAA;AACxB,IAAA,WAAA,CAAY,SAAS,CAAA;AAGrB,IAAA,UAAA,CAAW,KAAK,GAAA,CAAI,MAAA,CAAO,MAAA,EAAQ,aAAA,GAAgB,CAAC,CAAC,CAAA;AAAA,EACtD,CAAA;AAEA,EAAA,uBACCC,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAS,MAAA,EAAQ,GAAA,EAAK,KAAA,EAAO,cAAA,EAAgB,UAAS,EAClE,QAAA,EAAA,MAAA,CAAO,IAAI,CAAC,KAAA,EAAO,sBACnBA,cAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MAEA,GAAA,EAAK,CAAC,EAAA,KAAO;AAAE,QAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAA,GAAI,EAAA;AAAA,MAAI,CAAA;AAAA,MAC1C,IAAA,EAAK,MAAA;AAAA,MACL,SAAA,EAAU,SAAA;AAAA,MACV,SAAA,EAAW,CAAA;AAAA,MACX,KAAA,EAAO,KAAA;AAAA,MACP,QAAA;AAAA,MACA,QAAA,EAAU,CAAC,CAAA,KAAM,YAAA,CAAa,CAAA,EAAG,EAAE,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,EAAE,CAAC,CAAA;AAAA,MACzD,SAAA,EAAW,CAAC,CAAA,KAAM,aAAA,CAAc,GAAG,CAAC,CAAA;AAAA,MACpC,OAAA,EAAS,WAAA;AAAA,MACT,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,MAAA,EAAO;AAAA,MAChC,YAAA,EAAY,CAAA,MAAA,EAAS,CAAA,GAAI,CAAC,CAAA,CAAA;AAAA,MAC1B,KAAA,EAAO;AAAA,QACN,KAAA,EAAO,MAAA;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,SAAA,EAAW,QAAA;AAAA,QACX,QAAA,EAAU,MAAA;AAAA,QACV,UAAA,EAAY,GAAA;AAAA,QACZ,MAAA,EAAQ,kCAAA;AAAA,QACR,YAAA,EAAc,KAAA;AAAA,QACd,OAAA,EAAS,MAAA;AAAA,QACT,eAAA,EAAiB,WAAW,uBAAA,GAA0B,aAAA;AAAA,QACtD,KAAA,EAAO,yBAAA;AAAA,QACP,OAAA,EAAS,WAAW,GAAA,GAAM;AAAA;AAC3B,KAAA;AAAA,IAxBK;AAAA,GA0BN,CAAA,EACF,CAAA;AAEF;;;ACpIO,IAAM,aAAA,GAAgB;AAAA,EAC5B,OAAA,EAAS,QAAA;AAAA,EACT,MAAA,EAAQ,QAAA;AAAA,EACR,MAAA,EAAQ;AACT,CAAA;AAEO,IAAM,2BAAA,GAA8B,EAAA;AAEpC,IAAM,sBAAA,GAAyB,CAAA;AAC/B,IAAM,kBAAA,GAAqB,CAAA;AAC3B,IAAM,kBAAA,GAAqB,EAAA;AAG3B,IAAM,yBAAA,GAA4B,IAAA;AAElC,IAAM,aAAA,GAAgB;AAAA,EAC5B,KAAA,EAAO,uBAAA;AAAA,EACP,eAAA,EAAiB,cAAA;AAAA,EACjB,cAAA,EAAgB,cAAA;AAAA,EAChB,cAAA,EAAgB,cAAA;AAAA,EAChB,mBAAA,EAAqB;AACtB,CAAA;;;ACXO,SAAS,wBACf,MAAA,EACwB;AACxB,EAAA,MAAM,aAAa,MAAA,EAAQ,UAAA;AAC3B,EAAA,MAAM,MAAM,UAAA,EAAY,GAAA;AACxB,EAAA,MAAM,eAAe,GAAA,EAAK,SAAA;AAC1B,EAAA,MAAM,kBAAkB,MAAA,CAAO,SAAA,CAAU,YAAY,CAAA,GAClD,MAAA,CAAO,YAAY,CAAA,GACnB,sBAAA;AACH,EAAA,MAAM,mBAAmB,IAAA,CAAK,GAAA;AAAA,IAC7B,kBAAA;AAAA,IACA,IAAA,CAAK,GAAA,CAAI,kBAAA,EAAoB,eAAe;AAAA,GAC7C;AAEA,EAAA,OAAO;AAAA,IACN,SAAA,EAAW;AAAA,GACZ;AACD;ACdO,SAAS,eAAA,CAAgB;AAAA,EAC/B,MAAA;AAAA,EACA,iBAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACD,CAAA,EAAyB;AACxB,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAIK,eAAS,EAAE,CAAA;AACjC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAiD,IAAI,CAAA;AACzF,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAS,KAAK,CAAA;AACtD,EAAA,MAAM,CAAC,uBAAA,EAAyB,0BAA0B,CAAA,GAAIA,eAAS,CAAC,CAAA;AACxE,EAAA,MAAM,SAAA,GAAYP,aAA8B,IAAI,CAAA;AACpD,EAAA,MAAM,kBAAA,GAAqBA,aAA2B,IAAI,CAAA;AAE1D,EAAA,MAAM,MAAA,GAAS,uBAAA,CAAwB,iBAAA,EAAmB,eAAe,CAAA;AACzE,EAAA,MAAM,gBAAA,GAAmBqB,kBAAY,MAAM;AAC1C,IAAA,eAAA,CAAgB,KAAK,CAAA;AACrB,IAAA,aAAA,CAAc,IAAI,CAAA;AAAA,EACnB,CAAA,EAAG,EAAE,CAAA;AAGL,EAAApB,gBAAU,MAAM;AACf,IAAA,IAAI,MAAA,EAAQ;AACX,MAAA,0BAAA,CAA2B,2BAA2B,CAAA;AAAA,IACvD,CAAA,MAAO;AACN,MAAA,MAAA,CAAO,EAAE,CAAA;AACT,MAAA,gBAAA,EAAiB;AACjB,MAAA,0BAAA,CAA2B,CAAC,CAAA;AAAA,IAC7B;AAAA,EACD,CAAA,EAAG,CAAC,MAAA,EAAQ,gBAAgB,CAAC,CAAA;AAG7B,EAAAA,gBAAU,MAAM;AACf,IAAA,IAAI,2BAA2B,CAAA,EAAG;AAElC,IAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC9B,MAAA,0BAAA,CAA2B,CAAC,IAAA,KAAS,IAAA,GAAO,CAAC,CAAA;AAAA,IAC9C,GAAG,GAAI,CAAA;AAEP,IAAA,OAAO,MAAM,aAAa,KAAK,CAAA;AAAA,EAChC,CAAA,EAAG,CAAC,uBAAuB,CAAC,CAAA;AAG5B,EAAAA,gBAAU,MAAM;AACf,IAAA,IAAI,kBAAkB,CAAA,EAAG;AACxB,MAAA,MAAA,CAAO,EAAE,CAAA;AACT,MAAA,gBAAA,EAAiB;AAAA,IAClB;AAAA,EACD,CAAA,EAAG,CAAC,eAAA,EAAiB,gBAAgB,CAAC,CAAA;AAGtC,EAAAA,gBAAU,MAAM;AACf,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,YAAA,EAAc;AAC9B,IAAA,IAAI,UAAA,KAAe,SAAA,IAAa,UAAA,KAAe,QAAA,EAAU;AAEzD,IAAA,MAAM,OAAA,GAAU,WAAW,MAAM;AAChC,MAAA,gBAAA,EAAiB;AAAA,IAClB,GAAG,yBAAyB,CAAA;AAE5B,IAAA,OAAO,MAAM,aAAa,OAAO,CAAA;AAAA,EAClC,GAAG,CAAC,MAAA,EAAQ,YAAA,EAAc,UAAA,EAAY,gBAAgB,CAAC,CAAA;AAGvD,EAAAA,gBAAU,MAAM;AACf,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,IAAA,MAAM,SAAS,SAAA,CAAU,OAAA;AACzB,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,IAAA,kBAAA,CAAmB,UAAU,QAAA,CAAS,aAAA;AACtC,IAAA,MAAM,gBAAA,GAAmB,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA;AAC7C,IAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,QAAA;AAE/B,IAAA,MAAM,oBAAA,GAAuB,MAC5B,KAAA,CAAM,IAAA;AAAA,MACL,MAAA,CAAO,gBAAA;AAAA,QACN;AAAA;AACD,KACD,CAAE,MAAA,CAAO,CAAC,EAAA,KAAO,CAAC,EAAA,CAAG,YAAA,CAAa,UAAU,CAAA,IAAK,EAAA,CAAG,QAAA,KAAa,EAAE,CAAA;AAEpE,IAAA,MAAM,aAAa,oBAAA,EAAqB;AACxC,IAAA,CAAC,UAAA,CAAW,CAAC,CAAA,IAAK,MAAA,EAAQ,KAAA,EAAM;AAEhC,IAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAyB;AAC/C,MAAA,IAAI,KAAA,CAAM,QAAQ,QAAA,EAAU;AAC3B,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA;AAAA,MACD;AAEA,MAAA,IAAI,KAAA,CAAM,QAAQ,KAAA,EAAO;AAEzB,MAAA,MAAM,oBAAoB,oBAAA,EAAqB;AAC/C,MAAA,IAAI,iBAAA,CAAkB,WAAW,CAAA,EAAG;AACnC,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,MAAA,CAAO,KAAA,EAAM;AACb,QAAA;AAAA,MACD;AAEA,MAAA,MAAM,KAAA,GAAQ,kBAAkB,CAAC,CAAA;AACjC,MAAA,MAAM,IAAA,GAAO,iBAAA,CAAkB,iBAAA,CAAkB,MAAA,GAAS,CAAC,CAAA;AAC3D,MAAA,MAAM,gBAAgB,QAAA,CAAS,aAAA;AAC/B,MAAA,MAAM,UAAA,GAAa,aAAA,GAAgB,MAAA,CAAO,QAAA,CAAS,aAAa,CAAA,GAAI,KAAA;AAEpE,MAAA,IAAI,MAAM,QAAA,EAAU;AACnB,QAAA,IAAI,CAAC,UAAA,IAAc,aAAA,KAAkB,KAAA,EAAO;AAC3C,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,IAAA,CAAK,KAAA,EAAM;AAAA,QACZ;AACA,QAAA;AAAA,MACD;AAEA,MAAA,IAAI,CAAC,UAAA,IAAc,aAAA,KAAkB,IAAA,EAAM;AAC1C,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,KAAA,CAAM,KAAA,EAAM;AAAA,MACb;AAAA,IACD,CAAA;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAElD,IAAA,OAAO,MAAM;AACZ,MAAA,QAAA,CAAS,mBAAA,CAAoB,WAAW,aAAa,CAAA;AACrD,MAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,gBAAA;AAC/B,MAAA,kBAAA,CAAmB,SAAS,KAAA,EAAM;AAAA,IACnC,CAAA;AAAA,EACD,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,MAAM,aAAA,GAAgBoB,kBAAY,YAAY;AAC7C,IAAA,IAAI,GAAA,CAAI,WAAW,MAAA,CAAO,SAAA,IAAa,CAAC,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,EAAG;AAE3D,IAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,IAAA,aAAA,CAAc,SAAS,CAAA;AACvB,IAAA,IAAI;AACH,MAAA,MAAM,UAAU,GAAG,CAAA;AAAA,IAGpB,CAAA,CAAA,MAAQ;AAEP,MAAA,gBAAA,EAAiB;AAAA,IAClB;AAAA,EACD,GAAG,CAAC,GAAA,EAAK,OAAO,SAAA,EAAW,SAAA,EAAW,gBAAgB,CAAC,CAAA;AAEvD,EAAA,MAAM,YAAA,GAAeA,kBAAY,YAAY;AAC5C,IAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,IAAA,aAAA,CAAc,QAAQ,CAAA;AACtB,IAAA,IAAI;AACH,MAAA,MAAM,QAAA,EAAS;AAAA,IAEhB,CAAA,CAAA,MAAQ;AAEP,MAAA,gBAAA,EAAiB;AAAA,IAClB;AAAA,EACD,CAAA,EAAG,CAAC,QAAA,EAAU,gBAAgB,CAAC,CAAA;AAE/B,EAAA,MAAM,YAAA,GAAeA,kBAAY,YAAY;AAC5C,IAAA,IAAI,0BAA0B,CAAA,EAAG;AAEjC,IAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,IAAA,aAAA,CAAc,QAAQ,CAAA;AACtB,IAAA,IAAI;AACH,MAAA,MAAM,QAAA,EAAS;AACf,MAAA,0BAAA,CAA2B,2BAA2B,CAAA;AAAA,IACvD,CAAA,CAAA,MAAQ;AAAA,IAER,CAAA,SAAE;AACD,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,IACtB;AAAA,EACD,CAAA,EAAG,CAAC,uBAAA,EAAyB,QAAQ,CAAC,CAAA;AAEtC,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,iBAAA,EAAmB,OAAO,IAAA;AAE1C,EAAA,MAAM,aAAa,GAAA,CAAI,MAAA,KAAW,OAAO,SAAA,IAAa,OAAA,CAAQ,KAAK,GAAG,CAAA;AAEtE,EAAA,uBACCnB,cAAAA,CAAAoB,mBAAA,EAAA,EAEC,QAAA,kBAAApB,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACN,QAAA,EAAU,OAAA;AAAA,QACV,KAAA,EAAO,CAAA;AAAA,QACP,eAAA,EAAiB,oBAAA;AAAA,QACjB,MAAA,EAAQ,GAAA;AAAA,QACR,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB;AAAA,OACjB;AAAA,MAGA,QAAA,kBAAAC,eAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACA,GAAA,EAAK,SAAA;AAAA,UACL,IAAA,EAAK,QAAA;AAAA,UACL,YAAA,EAAW,MAAA;AAAA,UACX,KAAA,EAAO;AAAA,YACN,eAAA,EAAiB,sBAAA;AAAA,YACjB,YAAA,EAAc,MAAA;AAAA,YACd,OAAA,EAAS,MAAA;AAAA,YACT,KAAA,EAAO,MAAA;AAAA,YACP,QAAA,EAAU,OAAA;AAAA,YACV,MAAA,EAAQ,QAAA;AAAA,YACR,SAAA,EAAW;AAAA,WACZ;AAAA,UACA,QAAA,EAAU,EAAA;AAAA,UAGV,QAAA,EAAA;AAAA,4BAAAA,eAAAA,CAAC,SAAI,KAAA,EAAO,EAAE,WAAW,QAAA,EAAU,YAAA,EAAc,QAAO,EACvD,QAAA,EAAA;AAAA,8BAAAD,cAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACA,KAAA,EAAO;AAAA,oBACN,OAAA,EAAS,aAAA;AAAA,oBACT,UAAA,EAAY,QAAA;AAAA,oBACZ,cAAA,EAAgB,QAAA;AAAA,oBAChB,KAAA,EAAO,MAAA;AAAA,oBACP,MAAA,EAAQ,MAAA;AAAA,oBACR,YAAA,EAAc,KAAA;AAAA,oBACd,eAAA,EAAiB,uBAAA;AAAA,oBACjB,YAAA,EAAc;AAAA,mBACf;AAAA,kBAEA,QAAA,kBAAAA,cAAAA;AAAA,oBAACqB,uBAAA;AAAA,oBAAA;AAAA,sBACA,SAAA,EAAU,cAAA;AAAA,sBACV,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,QAAQ,MAAA;AAAO;AAAA;AACxC;AAAA,eACD;AAAA,8BACArB,cAAAA;AAAA,gBAAC,IAAA;AAAA,gBAAA;AAAA,kBACA,KAAA,EAAO;AAAA,oBACN,QAAA,EAAU,MAAA;AAAA,oBACV,UAAA,EAAY,GAAA;AAAA,oBACZ,KAAA,EAAO,yBAAA;AAAA,oBACP,MAAA,EAAQ;AAAA,mBACT;AAAA,kBAEC,QAAA,EAAA,aAAA,CAAc;AAAA;AAAA;AAChB,aAAA,EACD,CAAA;AAAA,4BAGAA,cAAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACA,KAAA,EAAO;AAAA,kBACN,QAAA,EAAU,MAAA;AAAA,kBACV,KAAA,EAAO,+BAAA;AAAA,kBACP,SAAA,EAAW,QAAA;AAAA,kBACX,MAAA,EAAQ,YAAA;AAAA,kBACR,UAAA,EAAY;AAAA,iBACb;AAAA,gBAEC,QAAA,EAAA,iBAAA,CAAkB;AAAA;AAAA,aACpB;AAAA,4BAGAA,eAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,YAAA,EAAc,MAAA,IAC3B,QAAA,kBAAAA,cAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACA,KAAA,EAAO,GAAA;AAAA,gBACP,QAAA,EAAU,MAAA;AAAA,gBACV,WAAW,MAAA,CAAO,SAAA;AAAA,gBAClB,QAAA,EAAU;AAAA;AAAA,aACX,EACD,CAAA;AAAA,4BAGDC,eAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACA,KAAA,EAAO;AAAA,kBACN,OAAA,EAAS,MAAA;AAAA,kBACT,aAAA,EAAe,QAAA;AAAA,kBACf,GAAA,EAAK;AAAA,iBACN;AAAA,gBAGA,QAAA,EAAA;AAAA,kCAAAA,eAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACA,KAAA,EAAO;AAAA,wBACN,OAAA,EAAS,MAAA;AAAA,wBACT,GAAA,EAAK;AAAA,uBACN;AAAA,sBAEA,QAAA,EAAA;AAAA,wCAAAA,eAAAA;AAAA,0BAAC,QAAA;AAAA,0BAAA;AAAA,4BACA,OAAA,EAAS,YAAA;AAAA,4BACT,QAAA,EAAU,YAAA;AAAA,4BACV,SAAA,EAAW,EAAA;AAAA,8BACV,6EAAA;AAAA,8BACA,mFAAA;AAAA,8BACA;AAAA,6BACD;AAAA,4BACA,KAAA,EAAO;AAAA,8BACN,IAAA,EAAM,CAAA;AAAA,8BACN,OAAA,EAAS,MAAA;AAAA,8BACT,UAAA,EAAY,QAAA;AAAA,8BACZ,cAAA,EAAgB,QAAA;AAAA,8BAChB,GAAA,EAAK,KAAA;AAAA,8BACL,UAAA,EAAY,QAAA;AAAA,8BACZ,QAAA,EAAU;AAAA,6BACX;AAAA,4BAEC,QAAA,EAAA;AAAA,8BAAA,UAAA,KAAe,QAAA,oBACfD,cAAAA,CAACS,mBAAAA,EAAA,EAAQ,SAAA,EAAU,sBAAA,EAAuB,KAAA,EAAO,EAAE,UAAA,EAAY,CAAA,EAAE,EAAG,CAAA;AAAA,8BAEpE,UAAA,KAAe,QAAA,GAAW,aAAA,CAAc,cAAA,GAAiB,aAAA,CAAc;AAAA;AAAA;AAAA,yBACzE;AAAA,wCAEAR,eAAAA;AAAA,0BAAC,QAAA;AAAA,0BAAA;AAAA,4BACA,OAAA,EAAS,aAAA;AAAA,4BACT,QAAA,EAAU,CAAC,UAAA,IAAc,YAAA;AAAA,4BACzB,SAAA,EAAW,EAAA;AAAA,8BACV,6EAAA;AAAA,8BACA,6EAAA;AAAA,8BACA;AAAA,6BACD;AAAA,4BACA,KAAA,EAAO;AAAA,8BACN,IAAA,EAAM,CAAA;AAAA,8BACN,OAAA,EAAS,MAAA;AAAA,8BACT,UAAA,EAAY,QAAA;AAAA,8BACZ,cAAA,EAAgB,QAAA;AAAA,8BAChB,GAAA,EAAK,KAAA;AAAA,8BACL,UAAA,EAAY,QAAA;AAAA,8BACZ,QAAA,EAAU;AAAA,6BACX;AAAA,4BAEC,QAAA,EAAA;AAAA,8BAAA,UAAA,KAAe,SAAA,oBACfD,cAAAA,CAACS,mBAAAA,EAAA,EAAQ,SAAA,EAAU,sBAAA,EAAuB,KAAA,EAAO,EAAE,UAAA,EAAY,CAAA,EAAE,EAAG,CAAA;AAAA,8BAEpE,UAAA,KAAe,SAAA,GAAY,aAAA,CAAc,eAAA,GAAkB,aAAA,CAAc;AAAA;AAAA;AAAA;AAC3E;AAAA;AAAA,mBACD;AAAA,kCAGAR,eAAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBACA,OAAA,EAAS,YAAA;AAAA,sBACT,QAAA,EAAU,gBAAgB,uBAAA,GAA0B,CAAA;AAAA,sBACpD,SAAA,EAAW,EAAA;AAAA,wBACV,kFAAA;AAAA,wBACA,qHAAA;AAAA,wBACA;AAAA,uBACD;AAAA,sBACA,KAAA,EAAO;AAAA,wBACN,OAAA,EAAS,MAAA;AAAA,wBACT,UAAA,EAAY,QAAA;AAAA,wBACZ,cAAA,EAAgB,QAAA;AAAA,wBAChB,GAAA,EAAK,KAAA;AAAA,wBACL,UAAA,EAAY;AAAA,uBACb;AAAA,sBAEC,QAAA,EAAA;AAAA,wBAAA,UAAA,KAAe,QAAA,oBACfD,cAAAA,CAACS,mBAAAA,EAAA,EAAQ,SAAA,EAAU,0BAAA,EAA2B,KAAA,EAAO,EAAE,UAAA,EAAY,CAAA,EAAE,EAAG,CAAA;AAAA,wBAExE,UAAA,KAAe,QAAA,GACb,aAAA,CAAc,cAAA,GACd,uBAAA,GAA0B,CAAA,GACzB,CAAA,EAAG,aAAA,CAAc,mBAAmB,CAAA,CAAA,EAAI,uBAAuB,CAAA,CAAA,CAAA,GAC/D,aAAA,CAAc;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AACD;AAAA;AAAA;AACA;AAAA,GACD,EACD,CAAA;AAEF;ACrWA,IAAM,yBAAA,GAA6C;AAAA,EAClD,OAAA,EAAS,IAAA;AAAA,EAET,eAAA,EAAiB;AAClB,CAAA;AAEA,IAAM,aAAa,YAAY;AAAC,CAAA;AAEzB,SAAS,UAAA,CAAW;AAAA,EAC1B,MAAA;AAAA,EACA,YAAY,EAAC;AAAA,EACb,SAAA;AAAA,EACA,KAAA;AAAA,EACA;AACD,CAAA,EAAoB;AACnB,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIJ,eAAS,EAAE,CAAA;AAG/C,EAAA,MAAM,IAAA,GAAOiB,8BAAA,CAAQ,MAAA,EAAQ,SAAS,CAAA;AACtC,EAAA,MAAM;AAAA,IACL,QAAA;AAAA,IACA,WAAA;AAAA,IACA,oBAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACD,GAAI,IAAA;AAGJ,EAAA,MAAM,eAAA,GAAkB,KAAK,eAAA,IAAmB,yBAAA;AAChD,EAAA,MAAM,iBAAA,GAAoB,KAAK,iBAAA,IAAqB,UAAA;AACpD,EAAA,MAAM,gBAAA,GAAmB,KAAK,gBAAA,IAAoB,UAAA;AAClD,EAAA,MAAM,SAAA,GAAY,KAAK,SAAA,IAAa,UAAA;AACpC,EAAA,MAAM,qBAAA,GACL,OAAO,IAAA,CAAK,iBAAA,KAAsB,UAAA,IAClC,OAAO,IAAA,CAAK,gBAAA,KAAqB,UAAA,IACjC,OAAO,IAAA,CAAK,SAAA,KAAc,UAAA;AAG3B,EAAA,MAAM,YAAA,GAAeC,aAAA;AAAA,IACpB,OAAO;AAAA,MACN,YAAA;AAAA,MACA,aAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,IACA;AAAA,MACC,YAAA;AAAA,MACA,aAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA;AACD,GACD;AAGA,EAAA,MAAM,EAAE,uBAAsB,GAAI,SAAA;AAGlC,EAAA,MAAM;AAAA,IACL,WAAA,GAAc,sBAAA;AAAA,IACd,cAAA,GAAiB,uBAAA;AAAA,IACjB,aAAA;AAAA,IACA,YAAA,GAAe,KAAA;AAAA,IACf,gBAAA,GAAmB,IAAA;AAAA,IACnB,kBAAA;AAAA,IACA,kBAAA;AAAA,IACA,WAAA,GAAc,KAAA;AAAA,IACd,cAAA;AAAA,IACA,mBAAA;AAAA,IACA,aAAA,GAAgB,IAAA;AAAA,IAChB,SAAA,GAAY,WAAA;AAAA,IACZ,kBAAA,GAAqB,IAAA;AAAA,IACrB,gBAAA,GAAmB,IAAA;AAAA,IACnB,UAAA,GAAa,SAAA;AAAA,IACb,MAAA,GAAS,YAAA;AAAA,IACT,cAAA,GAAiB,KAAA;AAAA,IACjB,QAAA,GAAW,IAAA;AAAA,IACX,cAAA,GAAiB,KAAA;AAAA,IACjB,iBAAA;AAAA,IACA,kBAAA,GAAqB;AAAA,GACtB,GAAI,MAAA;AAGJ,EAAA,MAAM,yBAAA,GAA4BA,cAAQ,MAAM;AAC/C,IAAA,IAAI,CAAC,eAAe,OAAO,KAAA;AAC3B,IAAA,OAAO,CAAC,EAAE,aAAA,CAAc,EAAA,EAAI,MAAK,IAAK,aAAA,CAAc,MAAM,IAAA,EAAK,CAAA;AAAA,EAChE,GAAG,CAAC,aAAA,EAAe,EAAA,EAAI,aAAA,EAAe,IAAI,CAAC,CAAA;AAE3C,EAAA,MAAM,aAAa,MAAM;AACxB,IAAA,IAAI,UAAA,CAAW,IAAA,EAAK,IAAK,CAAC,gBAAgB,yBAAA,EAA2B;AACpE,MAAA,WAAA,CAAY,UAAA,CAAW,MAAM,CAAA;AAC7B,MAAA,aAAA,CAAc,EAAE,CAAA;AAAA,IACjB;AAAA,EACD,CAAA;AAEA,EAAA,MAAM,eAAA,GACL,oBAAA,IAAwB,CAAC,yBAAA,IAA6B,YAAA;AAGvD,EAAA,IAAI,cAAA,EAAgB;AACnB,IAAA,IAAI,iBAAA,EAAmB;AACtB,MAAA,uBACCvB,cAAAA,CAAC,iBAAA,CAAkB,UAAlB,EAA2B,KAAA,EAAO,cAClC,QAAA,kBAAAC,eAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACA,SAAA,EAAW,EAAA;AAAA,YACV,gFAAA;AAAA,YACA;AAAA,WACD;AAAA,UACA,KAAA;AAAA,UAGC,QAAA,EAAA;AAAA,YAAA,QAAA;AAAA,YAEA;AAAA;AAAA;AAAA,OACF,EACD,CAAA;AAAA,IAEF;AAGA,IAAA,uBACCD,cAAAA,CAAC,iBAAA,CAAkB,UAAlB,EAA2B,KAAA,EAAO,cAClC,QAAA,kBAAAC,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACV,gFAAA;AAAA,UACA;AAAA,SACD;AAAA,QACA,KAAA;AAAA,QAGC,QAAA,EAAA;AAAA,UAAA,QAAA;AAAA,0BAEDD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACd,0BAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACd,0BAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+BAAA,EAAgC,QAAA,EAAA,4BAAA,EAE/C,GACD,CAAA,EACD;AAAA;AAAA;AAAA,KACD,EACD,CAAA;AAAA,EAEF;AAEA,EAAA,uBACCA,cAAAA,CAAC,iBAAA,CAAkB,UAAlB,EAA2B,KAAA,EAAO,cAClC,QAAA,kBAAAC,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACV,gFAAA;AAAA,QACA;AAAA,OACD;AAAA,MACA,KAAA;AAAA,MAGC,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBAGFD,cAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACA,QAAA;AAAA,YACA,SAAA,EAAW,KAAA;AAAA,YACX,cAAA;AAAA,YACA,kBAAA;AAAA,YACA,MAAA;AAAA,YACA,cAAA;AAAA,YACA,KAAA,EAAO,OAAO,KAAA,IAAS,KAAA;AAAA,YACvB,QAAA;AAAA,YACA,aAAA;AAAA,YACA,SAAA;AAAA,YACA,WAAA;AAAA,YACA,cAAA;AAAA,YACA,mBAAA;AAAA,YACA,kBAAA;AAAA,YACA,gBAAA;AAAA,YACA,kBAAA;AAAA,YACA,kBAAA;AAAA,YACA;AAAA;AAAA,SACD;AAAA,QAGC,oCACAA,cAAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACA,KAAA,EAAO,UAAA;AAAA,YACP,QAAA,EAAU,aAAA;AAAA,YACV,MAAA,EAAQ,UAAA;AAAA,YACR,OAAA,EAAS,YAAA;AAAA,YACT,QAAA,EAAU,eAAA;AAAA,YACV,WAAA;AAAA,YACA,oBAAA;AAAA,YACA,kBAAA,EAAoB,IAAA;AAAA,YACpB,yBAAA;AAAA,YACA,UAAA;AAAA,YACA;AAAA;AAAA,SACD;AAAA,wBAIDA,cAAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACA,MAAA,EAAQ,qBAAA,IAAyB,eAAA,CAAgB,OAAA,KAAY,IAAA;AAAA,YAC7D,mBAAmB,eAAA,CAAgB,OAAA;AAAA,YACnC,SAAA,EAAW,iBAAA;AAAA,YACX,QAAA,EAAU,gBAAA;AAAA,YACV,QAAA,EAAU,SAAA;AAAA,YACV,iBAAiB,eAAA,CAAgB;AAAA;AAAA;AAClC;AAAA;AAAA,GACA,EACD,CAAA;AAEF","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, CheckCircle2, 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\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{/* User Action Result Badge - above message bubble */}\n\t\t\t{message.userActionResult && (\n\t\t\t\t<div className=\"mb-2\">\n\t\t\t\t\t{message.userActionResult === \"approved\" ? (\n\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-full bg-green-100 text-green-700\">\n\t\t\t\t\t\t\t<CheckCircle2 className=\"w-3 h-3\" /> OTP Verified\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-full bg-red-100 text-red-700\">\n\t\t\t\t\t\t\t<XCircle className=\"w-3 h-3\" /> Rejected\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\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={cn(\"h-3 w-3 shrink-0 mt-0.5\", step.eventType === \"USER_ACTION_SUCCESS\" ? \"text-green-600\" : \"text-primary\")} />\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\tstep.eventType === \"USER_ACTION_SUCCESS\" && \"text-green-600\"\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{step.status === \"completed\" && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Check className={cn(\"h-3 w-3 shrink-0 mt-0.5\", step.eventType === \"USER_ACTION_SUCCESS\" ? \"text-green-600\" : \"text-primary\")} />\n\t\t\t\t\t\t\t\t\t\t\t)}\n\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<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)}\n\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<span\n\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\"text-muted-foreground break-words\",\n\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\tstep.eventType === \"USER_ACTION_SUCCESS\" && \"text-green-600\"\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>\n\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</span>\n\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<span className=\"ml-1.5 text-[10px] opacity-50\">\n\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</span>\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</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* Trace Icon - Positioned next to message bubble */}\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={cn(\n\t\t\t\t\t\t\"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\t\tmessage.userActionResult ? \"mt-8\" : \"mt-0.5\"\n\t\t\t\t\t)}\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 { useEffect, useRef } from \"react\";\nimport type { OtpInputProps } from \"../../types\";\n\nconst DEFAULT_MAX_LENGTH = 6;\nconst MAX_SUPPORTED_LENGTH = 12;\nconst AUTO_FOCUS_DELAY_MS = 250;\n\nexport function OtpInput({ value, onChange, maxLength, disabled = false }: OtpInputProps) {\n\tconst inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n\tconst safeMaxLength =\n\t\tNumber.isInteger(maxLength) && maxLength > 0\n\t\t\t? Math.min(maxLength, MAX_SUPPORTED_LENGTH)\n\t\t\t: DEFAULT_MAX_LENGTH;\n\n\t// Split value into individual characters\n\tconst digits = value.split(\"\").concat(Array(safeMaxLength).fill(\"\")).slice(0, safeMaxLength);\n\n\t// Auto-focus first input on mount\n\tuseEffect(() => {\n\t\tif (disabled) return;\n\n\t\tconst focusTimer = window.setTimeout(() => {\n\t\t\tinputRefs.current[0]?.focus();\n\t\t}, AUTO_FOCUS_DELAY_MS);\n\n\t\treturn () => window.clearTimeout(focusTimer);\n\t}, [disabled]);\n\n\tconst focusInput = (index: number) => {\n\t\tif (index >= 0 && index < safeMaxLength) {\n\t\t\tinputRefs.current[index]?.focus();\n\t\t}\n\t};\n\n\tconst updateValue = (newDigits: string[]) => {\n\t\tonChange(newDigits.join(\"\").slice(0, safeMaxLength));\n\t};\n\n\tconst handleChange = (index: number, char: string) => {\n\t\t// Only allow digits\n\t\tif (char && !/^\\d$/.test(char)) return;\n\n\t\tconst newDigits = [...digits];\n\t\tnewDigits[index] = char;\n\t\tupdateValue(newDigits);\n\n\t\t// Move to next box if a digit was entered\n\t\tif (char && index < safeMaxLength - 1) {\n\t\t\tfocusInput(index + 1);\n\t\t}\n\t};\n\n\tconst handleKeyDown = (index: number, e: React.KeyboardEvent<HTMLInputElement>) => {\n\t\tif (e.key === \"Enter\") {\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.key === \"Backspace\") {\n\t\t\te.preventDefault();\n\t\t\tif (digits[index]) {\n\t\t\t\t// Clear current box\n\t\t\t\tconst newDigits = [...digits];\n\t\t\t\tnewDigits[index] = \"\";\n\t\t\t\tupdateValue(newDigits);\n\t\t\t} else if (index > 0) {\n\t\t\t\t// Move to previous box and clear it\n\t\t\t\tconst newDigits = [...digits];\n\t\t\t\tnewDigits[index - 1] = \"\";\n\t\t\t\tupdateValue(newDigits);\n\t\t\t\tfocusInput(index - 1);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.key === \"ArrowLeft\") {\n\t\t\te.preventDefault();\n\t\t\tfocusInput(index - 1);\n\t\t} else if (e.key === \"ArrowRight\") {\n\t\t\te.preventDefault();\n\t\t\tfocusInput(index + 1);\n\t\t}\n\t};\n\n\tconst handlePaste = (e: React.ClipboardEvent) => {\n\t\te.preventDefault();\n\t\tconst pasted = e.clipboardData.getData(\"text\").replace(/\\D/g, \"\").slice(0, safeMaxLength);\n\t\tif (!pasted) return;\n\n\t\tconst newDigits = pasted\n\t\t\t.split(\"\")\n\t\t\t.concat(Array(safeMaxLength).fill(\"\"))\n\t\t\t.slice(0, safeMaxLength);\n\t\tupdateValue(newDigits);\n\n\t\t// Focus the box after the last pasted digit (or last box)\n\t\tfocusInput(Math.min(pasted.length, safeMaxLength - 1));\n\t};\n\n\treturn (\n\t\t<div style={{ display: \"flex\", gap: \"8px\", justifyContent: \"center\" }}>\n\t\t\t{digits.map((digit, i) => (\n\t\t\t\t<input\n\t\t\t\t\tkey={i}\n\t\t\t\t\tref={(el) => { inputRefs.current[i] = el; }}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tinputMode=\"numeric\"\n\t\t\t\t\tmaxLength={1}\n\t\t\t\t\tvalue={digit}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonChange={(e) => handleChange(i, e.target.value.slice(-1))}\n\t\t\t\t\tonKeyDown={(e) => handleKeyDown(i, e)}\n\t\t\t\t\tonPaste={handlePaste}\n\t\t\t\t\tonFocus={(e) => e.target.select()}\n\t\t\t\t\taria-label={`Digit ${i + 1}`}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: \"40px\",\n\t\t\t\t\t\theight: \"48px\",\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t\tfontSize: \"20px\",\n\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\tborder: \"1px solid var(--border, #E5E5E5)\",\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t\toutline: \"none\",\n\t\t\t\t\t\tbackgroundColor: disabled ? \"var(--muted, #F5F5F5)\" : \"transparent\",\n\t\t\t\t\t\tcolor: \"var(--foreground, #000)\",\n\t\t\t\t\t\topacity: disabled ? 0.5 : 1,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</div>\n\t);\n}\n","export const BUTTON_LABELS = {\n\tAPPROVE: \"Verify\",\n\tREJECT: \"Reject\",\n\tRESEND: \"Resend OTP\",\n} as const;\n\nexport const RESEND_OTP_COOLDOWN_SECONDS = 30;\n\nexport const DEFAULT_OTP_MAX_LENGTH = 6;\nexport const MIN_OTP_MAX_LENGTH = 1;\nexport const MAX_OTP_MAX_LENGTH = 12;\n\n// If backend success event is delayed/lost, avoid permanently locking modal controls.\nexport const ACTION_PENDING_TIMEOUT_MS = 15000;\n\nexport const MODAL_CONTENT = {\n\tTITLE: \"Verification Required\",\n\tLOADING_APPROVE: \"Verifying...\",\n\tLOADING_REJECT: \"Rejecting...\",\n\tLOADING_RESEND: \"Resending...\",\n\tRESEND_AVAILABLE_IN: \"Resend OTP in\",\n} as const;\n","import {\n\tDEFAULT_OTP_MAX_LENGTH,\n\tMAX_OTP_MAX_LENGTH,\n\tMIN_OTP_MAX_LENGTH,\n} from \"./constants\";\n\n/**\n * Safely extract OTP config from the backend's requestedSchema.\n * Falls back to DEFAULT_OTP_MAX_LENGTH (6) if anything is missing or invalid.\n */\nexport function getOtpSchemaFromRequest(\n\tschema: Record<string, unknown> | undefined,\n): { maxLength: number } {\n\tconst properties = schema?.properties as Record<string, unknown> | undefined;\n\tconst otp = properties?.otp as { maxLength?: number } | undefined;\n\tconst maxLengthRaw = otp?.maxLength;\n\tconst parsedMaxLength = Number.isInteger(maxLengthRaw)\n\t\t? Number(maxLengthRaw)\n\t\t: DEFAULT_OTP_MAX_LENGTH;\n\tconst clampedMaxLength = Math.min(\n\t\tMAX_OTP_MAX_LENGTH,\n\t\tMath.max(MIN_OTP_MAX_LENGTH, parsedMaxLength),\n\t);\n\n\treturn {\n\t\tmaxLength: clampedMaxLength,\n\t};\n}\n","import { useEffect, useState, useCallback, useRef } from \"react\";\nimport { ShieldCheck, Loader2 } from \"lucide-react\";\nimport type { UserActionModalProps } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { OtpInput } from \"../OtpInput\";\nimport {\n\tACTION_PENDING_TIMEOUT_MS,\n\tBUTTON_LABELS,\n\tRESEND_OTP_COOLDOWN_SECONDS,\n\tMODAL_CONTENT,\n} from \"./constants\";\nimport { getOtpSchemaFromRequest } from \"./utils\";\n\nexport function UserActionModal({\n\tisOpen,\n\tuserActionRequest,\n\tonApprove,\n\tonReject,\n\tonResend,\n\tclearOtpTrigger,\n}: UserActionModalProps) {\n\tconst [otp, setOtp] = useState(\"\");\n\tconst [actionType, setActionType] = useState<\"approve\" | \"reject\" | \"resend\" | null>(null);\n\tconst [isSubmitting, setIsSubmitting] = useState(false);\n\tconst [resendCooldownRemaining, setResendCooldownRemaining] = useState(0);\n\tconst dialogRef = useRef<HTMLDivElement | null>(null);\n\tconst previousFocusedRef = useRef<HTMLElement | null>(null);\n\n\tconst schema = getOtpSchemaFromRequest(userActionRequest?.requestedSchema);\n\tconst resetActionState = useCallback(() => {\n\t\tsetIsSubmitting(false);\n\t\tsetActionType(null);\n\t}, []);\n\n\t// When modal opens, start resend cooldown. When it closes, reset all state.\n\tuseEffect(() => {\n\t\tif (isOpen) {\n\t\t\tsetResendCooldownRemaining(RESEND_OTP_COOLDOWN_SECONDS);\n\t\t} else {\n\t\t\tsetOtp(\"\");\n\t\t\tresetActionState();\n\t\t\tsetResendCooldownRemaining(0);\n\t\t}\n\t}, [isOpen, resetActionState]);\n\n\t// Cooldown timer\n\tuseEffect(() => {\n\t\tif (resendCooldownRemaining <= 0) return;\n\n\t\tconst timer = setTimeout(() => {\n\t\t\tsetResendCooldownRemaining((prev) => prev - 1);\n\t\t}, 1000);\n\n\t\treturn () => clearTimeout(timer);\n\t}, [resendCooldownRemaining]);\n\n\t// External OTP clear (e.g. on INVALID or REST failure)\n\tuseEffect(() => {\n\t\tif (clearOtpTrigger > 0) {\n\t\t\tsetOtp(\"\");\n\t\t\tresetActionState();\n\t\t}\n\t}, [clearOtpTrigger, resetActionState]);\n\n\t// Failsafe: don't keep modal permanently blocked if backend close event is delayed/lost.\n\tuseEffect(() => {\n\t\tif (!isOpen || !isSubmitting) return;\n\t\tif (actionType !== \"approve\" && actionType !== \"reject\") return;\n\n\t\tconst timeout = setTimeout(() => {\n\t\t\tresetActionState();\n\t\t}, ACTION_PENDING_TIMEOUT_MS);\n\n\t\treturn () => clearTimeout(timeout);\n\t}, [isOpen, isSubmitting, actionType, resetActionState]);\n\n\t// Keep keyboard focus trapped inside the non-dismissable security modal.\n\tuseEffect(() => {\n\t\tif (!isOpen) return;\n\n\t\tconst dialog = dialogRef.current;\n\t\tif (!dialog) return;\n\n\t\tpreviousFocusedRef.current = document.activeElement as HTMLElement | null;\n\t\tconst originalOverflow = document.body.style.overflow;\n\t\tdocument.body.style.overflow = \"hidden\";\n\n\t\tconst getFocusableElements = () =>\n\t\t\tArray.from(\n\t\t\t\tdialog.querySelectorAll<HTMLElement>(\n\t\t\t\t\t'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n\t\t\t\t),\n\t\t\t).filter((el) => !el.hasAttribute(\"disabled\") && el.tabIndex !== -1);\n\n\t\tconst focusables = getFocusableElements();\n\t\t(focusables[0] ?? dialog).focus();\n\n\t\tconst handleKeyDown = (event: KeyboardEvent) => {\n\t\t\tif (event.key === \"Escape\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key !== \"Tab\") return;\n\n\t\t\tconst currentFocusables = getFocusableElements();\n\t\t\tif (currentFocusables.length === 0) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tdialog.focus();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst first = currentFocusables[0];\n\t\t\tconst last = currentFocusables[currentFocusables.length - 1];\n\t\t\tconst activeElement = document.activeElement as HTMLElement | null;\n\t\t\tconst isInDialog = activeElement ? dialog.contains(activeElement) : false;\n\n\t\t\tif (event.shiftKey) {\n\t\t\t\tif (!isInDialog || activeElement === first) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tlast.focus();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!isInDialog || activeElement === last) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tfirst.focus();\n\t\t\t}\n\t\t};\n\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown);\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"keydown\", handleKeyDown);\n\t\t\tdocument.body.style.overflow = originalOverflow;\n\t\t\tpreviousFocusedRef.current?.focus();\n\t\t};\n\t}, [isOpen]);\n\n\tconst handleApprove = useCallback(async () => {\n\t\tif (otp.length !== schema.maxLength || !/^\\d+$/.test(otp)) return;\n\n\t\tsetIsSubmitting(true);\n\t\tsetActionType(\"approve\");\n\t\ttry {\n\t\t\tawait onApprove(otp);\n\t\t\t// On success: keep spinner visible until modal closes via stream event.\n\t\t\t// The isOpen effect resets all state when the modal closes.\n\t\t} catch {\n\t\t\t// On error: reset so user can retry\n\t\t\tresetActionState();\n\t\t}\n\t}, [otp, schema.maxLength, onApprove, resetActionState]);\n\n\tconst handleReject = useCallback(async () => {\n\t\tsetIsSubmitting(true);\n\t\tsetActionType(\"reject\");\n\t\ttry {\n\t\t\tawait onReject();\n\t\t\t// On success: keep spinner visible until modal closes via stream event\n\t\t} catch {\n\t\t\t// On error: reset so user can retry\n\t\t\tresetActionState();\n\t\t}\n\t}, [onReject, resetActionState]);\n\n\tconst handleResend = useCallback(async () => {\n\t\tif (resendCooldownRemaining > 0) return;\n\n\t\tsetIsSubmitting(true);\n\t\tsetActionType(\"resend\");\n\t\ttry {\n\t\t\tawait onResend();\n\t\t\tsetResendCooldownRemaining(RESEND_OTP_COOLDOWN_SECONDS);\n\t\t} catch {\n\t\t\t// Error handled by parent\n\t\t} finally {\n\t\t\tsetActionType(null);\n\t\t\tsetIsSubmitting(false);\n\t\t}\n\t}, [resendCooldownRemaining, onResend]);\n\n\tif (!isOpen || !userActionRequest) return null;\n\n\tconst isOtpValid = otp.length === schema.maxLength && /^\\d+$/.test(otp);\n\n\treturn (\n\t\t<>\n\t\t\t{/* Backdrop */}\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: \"fixed\",\n\t\t\t\t\tinset: 0,\n\t\t\t\t\tbackgroundColor: \"rgba(0, 0, 0, 0.5)\",\n\t\t\t\t\tzIndex: 10000,\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{/* Dialog */}\n\t\t\t\t<div\n\t\t\t\t\tref={dialogRef}\n\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackgroundColor: \"var(--card, #FFFFFF)\",\n\t\t\t\t\t\tborderRadius: \"12px\",\n\t\t\t\t\t\tpadding: \"24px\",\n\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\tmaxWidth: \"420px\",\n\t\t\t\t\t\tmargin: \"0 16px\",\n\t\t\t\t\t\tboxShadow: \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\",\n\t\t\t\t\t}}\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t>\n\t\t\t\t\t{/* Icon + Title */}\n\t\t\t\t\t<div style={{ textAlign: \"center\", marginBottom: \"16px\" }}>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tdisplay: \"inline-flex\",\n\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\twidth: \"48px\",\n\t\t\t\t\t\t\t\theight: \"48px\",\n\t\t\t\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\t\t\t\tbackgroundColor: \"var(--muted, #F5F5F5)\",\n\t\t\t\t\t\t\t\tmarginBottom: \"12px\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ShieldCheck\n\t\t\t\t\t\t\t\tclassName=\"text-primary\"\n\t\t\t\t\t\t\t\tstyle={{ width: \"24px\", height: \"24px\" }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<h2\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: \"18px\",\n\t\t\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\t\t\tcolor: \"var(--foreground, #000)\",\n\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{MODAL_CONTENT.TITLE}\n\t\t\t\t\t\t</h2>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Description from backend */}\n\t\t\t\t\t<p\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tcolor: \"var(--muted-foreground, #666)\",\n\t\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\t\tlineHeight: 1.5,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{userActionRequest.message}\n\t\t\t\t\t</p>\n\n\t\t\t\t\t{/* OTP Input */}\n\t\t\t\t\t<div style={{ marginBottom: \"24px\" }}>\n\t\t\t\t\t\t<OtpInput\n\t\t\t\t\t\t\tvalue={otp}\n\t\t\t\t\t\t\tonChange={setOtp}\n\t\t\t\t\t\t\tmaxLength={schema.maxLength}\n\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t{/* Buttons — stacked: Reject + Approve on top, Resend below */}\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\t\tgap: \"10px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{/* Reject + Approve row */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\tgap: \"8px\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tonClick={handleReject}\n\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"py-2.5 px-4 rounded-lg text-sm font-medium transition-colors cursor-pointer\",\n\t\t\t\t\t\t\t\t\"bg-destructive/10 text-destructive hover:bg-destructive/30 hover:text-destructive\",\n\t\t\t\t\t\t\t\t\"disabled:opacity-50 disabled:cursor-not-allowed\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\tgap: \"6px\",\n\t\t\t\t\t\t\t\twhiteSpace: \"nowrap\",\n\t\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{actionType === \"reject\" && (\n\t\t\t\t\t\t\t\t<Loader2 className=\"w-4 h-4 animate-spin\" style={{ flexShrink: 0 }} />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{actionType === \"reject\" ? MODAL_CONTENT.LOADING_REJECT : BUTTON_LABELS.REJECT}\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tonClick={handleApprove}\n\t\t\t\t\t\t\tdisabled={!isOtpValid || isSubmitting}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"py-2.5 px-4 rounded-lg text-sm font-medium transition-colors cursor-pointer\",\n\t\t\t\t\t\t\t\t\"bg-primary text-primary-foreground hover:bg-primary/90 active:bg-primary/80\",\n\t\t\t\t\t\t\t\t\"disabled:opacity-50 disabled:cursor-not-allowed\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\tgap: \"6px\",\n\t\t\t\t\t\t\t\twhiteSpace: \"nowrap\",\n\t\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{actionType === \"approve\" && (\n\t\t\t\t\t\t\t\t<Loader2 className=\"w-4 h-4 animate-spin\" style={{ flexShrink: 0 }} />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{actionType === \"approve\" ? MODAL_CONTENT.LOADING_APPROVE : BUTTON_LABELS.APPROVE}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Resend OTP — full width below */}\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={handleResend}\n\t\t\t\t\t\tdisabled={isSubmitting || resendCooldownRemaining > 0}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"py-2 px-4 rounded-lg text-xs font-medium transition-colors w-full cursor-pointer\",\n\t\t\t\t\t\t\t\"border border-border text-muted-foreground hover:text-foreground hover:border-muted-foreground/40 hover:bg-muted/50\",\n\t\t\t\t\t\t\t\"disabled:opacity-50 disabled:cursor-not-allowed\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\tgap: \"6px\",\n\t\t\t\t\t\t\twhiteSpace: \"nowrap\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{actionType === \"resend\" && (\n\t\t\t\t\t\t\t<Loader2 className=\"w-3.5 h-3.5 animate-spin\" style={{ flexShrink: 0 }} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{actionType === \"resend\"\n\t\t\t\t\t\t\t? MODAL_CONTENT.LOADING_RESEND\n\t\t\t\t\t\t\t: resendCooldownRemaining > 0\n\t\t\t\t\t\t\t\t? `${MODAL_CONTENT.RESEND_AVAILABLE_IN} ${resendCooldownRemaining}s`\n\t\t\t\t\t\t\t\t: BUTTON_LABELS.RESEND}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n","import { useMemo, useState } from \"react\";\nimport { useChat } from \"@paymanai/payman-typescript-ask-sdk\";\nimport { PaymanChatContext } from \"../../contexts\";\nimport type { PaymanChatProps, UserActionState } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { ChatInput } from \"../ChatInput\";\nimport { MessageList } from \"../MessageList\";\nimport { UserActionModal } from \"../UserActionModal\";\n\nconst DEFAULT_USER_ACTION_STATE: UserActionState = {\n\trequest: null,\n\tresult: null,\n\tclearOtpTrigger: 0,\n};\n\nconst NOOP_ASYNC = async () => {};\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 chat = useChat(config, callbacks);\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} = chat;\n\n\t// Keep OTP features backward-safe if hook returns a non-OTP shape.\n\tconst userActionState = chat.userActionState ?? DEFAULT_USER_ACTION_STATE;\n\tconst approveUserAction = chat.approveUserAction ?? NOOP_ASYNC;\n\tconst rejectUserAction = chat.rejectUserAction ?? NOOP_ASYNC;\n\tconst resendOtp = chat.resendOtp ?? NOOP_ASYNC;\n\tconst isUserActionSupported =\n\t\ttypeof chat.approveUserAction === \"function\" &&\n\t\ttypeof chat.rejectUserAction === \"function\" &&\n\t\ttypeof chat.resendOtp === \"function\";\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\tinputStyle = \"rounded\",\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\tinputStyle={inputStyle}\n\t\t\t\t\tlayout={layout}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{/* User Action (OTP) Modal */}\n\t\t\t<UserActionModal\n\t\t\t\tisOpen={isUserActionSupported && userActionState.request !== null}\n\t\t\t\tuserActionRequest={userActionState.request}\n\t\t\t\tonApprove={approveUserAction}\n\t\t\t\tonReject={rejectUserAction}\n\t\t\t\tonResend={resendOtp}\n\t\t\t\tclearOtpTrigger={userActionState.clearOtpTrigger}\n\t\t\t/>\n\t\t\t</div>\n\t\t</PaymanChatContext.Provider>\n\t);\n}\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1035,8 +1035,8 @@ function UserActionModal({
|
|
|
1035
1035
|
onClick: handleReject,
|
|
1036
1036
|
disabled: isSubmitting,
|
|
1037
1037
|
className: cn(
|
|
1038
|
-
"py-2.5 px-4 rounded-lg text-sm font-medium transition-colors",
|
|
1039
|
-
"bg-destructive/10 text-destructive hover:bg-destructive/
|
|
1038
|
+
"py-2.5 px-4 rounded-lg text-sm font-medium transition-colors cursor-pointer",
|
|
1039
|
+
"bg-destructive/10 text-destructive hover:bg-destructive/30 hover:text-destructive",
|
|
1040
1040
|
"disabled:opacity-50 disabled:cursor-not-allowed"
|
|
1041
1041
|
),
|
|
1042
1042
|
style: {
|
|
@@ -1060,7 +1060,7 @@ function UserActionModal({
|
|
|
1060
1060
|
onClick: handleApprove,
|
|
1061
1061
|
disabled: !isOtpValid || isSubmitting,
|
|
1062
1062
|
className: cn(
|
|
1063
|
-
"py-2.5 px-4 rounded-lg text-sm font-medium transition-colors",
|
|
1063
|
+
"py-2.5 px-4 rounded-lg text-sm font-medium transition-colors cursor-pointer",
|
|
1064
1064
|
"bg-primary text-primary-foreground hover:bg-primary/90 active:bg-primary/80",
|
|
1065
1065
|
"disabled:opacity-50 disabled:cursor-not-allowed"
|
|
1066
1066
|
),
|
|
@@ -1088,8 +1088,8 @@ function UserActionModal({
|
|
|
1088
1088
|
onClick: handleResend,
|
|
1089
1089
|
disabled: isSubmitting || resendCooldownRemaining > 0,
|
|
1090
1090
|
className: cn(
|
|
1091
|
-
"py-2 px-4 rounded-lg text-xs font-medium transition-colors w-full",
|
|
1092
|
-
"text-muted-foreground hover:text-foreground",
|
|
1091
|
+
"py-2 px-4 rounded-lg text-xs font-medium transition-colors w-full cursor-pointer",
|
|
1092
|
+
"border border-border text-muted-foreground hover:text-foreground hover:border-muted-foreground/40 hover:bg-muted/50",
|
|
1093
1093
|
"disabled:opacity-50 disabled:cursor-not-allowed"
|
|
1094
1094
|
),
|
|
1095
1095
|
style: {
|
package/dist/index.mjs.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/OtpInput/index.tsx","../src/components/UserActionModal/constants.ts","../src/components/UserActionModal/utils.ts","../src/components/UserActionModal/index.tsx","../src/components/PaymanChat/index.tsx"],"names":["useEffect","jsxs","jsx","motion","useRef","Bot","useState","useCallback","Loader2"],"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, CheckCircle2, 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\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{/* User Action Result Badge - above message bubble */}\n\t\t\t{message.userActionResult && (\n\t\t\t\t<div className=\"mb-2\">\n\t\t\t\t\t{message.userActionResult === \"approved\" ? (\n\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-full bg-green-100 text-green-700\">\n\t\t\t\t\t\t\t<CheckCircle2 className=\"w-3 h-3\" /> OTP Verified\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-full bg-red-100 text-red-700\">\n\t\t\t\t\t\t\t<XCircle className=\"w-3 h-3\" /> Rejected\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\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={cn(\"h-3 w-3 shrink-0 mt-0.5\", step.eventType === \"USER_ACTION_SUCCESS\" ? \"text-green-600\" : \"text-primary\")} />\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\tstep.eventType === \"USER_ACTION_SUCCESS\" && \"text-green-600\"\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{step.status === \"completed\" && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Check className={cn(\"h-3 w-3 shrink-0 mt-0.5\", step.eventType === \"USER_ACTION_SUCCESS\" ? \"text-green-600\" : \"text-primary\")} />\n\t\t\t\t\t\t\t\t\t\t\t)}\n\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<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)}\n\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<span\n\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\"text-muted-foreground break-words\",\n\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\tstep.eventType === \"USER_ACTION_SUCCESS\" && \"text-green-600\"\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>\n\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</span>\n\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<span className=\"ml-1.5 text-[10px] opacity-50\">\n\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</span>\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</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* Trace Icon - Positioned next to message bubble */}\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={cn(\n\t\t\t\t\t\t\"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\t\tmessage.userActionResult ? \"mt-8\" : \"mt-0.5\"\n\t\t\t\t\t)}\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 { useEffect, useRef } from \"react\";\nimport type { OtpInputProps } from \"../../types\";\n\nconst DEFAULT_MAX_LENGTH = 6;\nconst MAX_SUPPORTED_LENGTH = 12;\nconst AUTO_FOCUS_DELAY_MS = 250;\n\nexport function OtpInput({ value, onChange, maxLength, disabled = false }: OtpInputProps) {\n\tconst inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n\tconst safeMaxLength =\n\t\tNumber.isInteger(maxLength) && maxLength > 0\n\t\t\t? Math.min(maxLength, MAX_SUPPORTED_LENGTH)\n\t\t\t: DEFAULT_MAX_LENGTH;\n\n\t// Split value into individual characters\n\tconst digits = value.split(\"\").concat(Array(safeMaxLength).fill(\"\")).slice(0, safeMaxLength);\n\n\t// Auto-focus first input on mount\n\tuseEffect(() => {\n\t\tif (disabled) return;\n\n\t\tconst focusTimer = window.setTimeout(() => {\n\t\t\tinputRefs.current[0]?.focus();\n\t\t}, AUTO_FOCUS_DELAY_MS);\n\n\t\treturn () => window.clearTimeout(focusTimer);\n\t}, [disabled]);\n\n\tconst focusInput = (index: number) => {\n\t\tif (index >= 0 && index < safeMaxLength) {\n\t\t\tinputRefs.current[index]?.focus();\n\t\t}\n\t};\n\n\tconst updateValue = (newDigits: string[]) => {\n\t\tonChange(newDigits.join(\"\").slice(0, safeMaxLength));\n\t};\n\n\tconst handleChange = (index: number, char: string) => {\n\t\t// Only allow digits\n\t\tif (char && !/^\\d$/.test(char)) return;\n\n\t\tconst newDigits = [...digits];\n\t\tnewDigits[index] = char;\n\t\tupdateValue(newDigits);\n\n\t\t// Move to next box if a digit was entered\n\t\tif (char && index < safeMaxLength - 1) {\n\t\t\tfocusInput(index + 1);\n\t\t}\n\t};\n\n\tconst handleKeyDown = (index: number, e: React.KeyboardEvent<HTMLInputElement>) => {\n\t\tif (e.key === \"Enter\") {\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.key === \"Backspace\") {\n\t\t\te.preventDefault();\n\t\t\tif (digits[index]) {\n\t\t\t\t// Clear current box\n\t\t\t\tconst newDigits = [...digits];\n\t\t\t\tnewDigits[index] = \"\";\n\t\t\t\tupdateValue(newDigits);\n\t\t\t} else if (index > 0) {\n\t\t\t\t// Move to previous box and clear it\n\t\t\t\tconst newDigits = [...digits];\n\t\t\t\tnewDigits[index - 1] = \"\";\n\t\t\t\tupdateValue(newDigits);\n\t\t\t\tfocusInput(index - 1);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.key === \"ArrowLeft\") {\n\t\t\te.preventDefault();\n\t\t\tfocusInput(index - 1);\n\t\t} else if (e.key === \"ArrowRight\") {\n\t\t\te.preventDefault();\n\t\t\tfocusInput(index + 1);\n\t\t}\n\t};\n\n\tconst handlePaste = (e: React.ClipboardEvent) => {\n\t\te.preventDefault();\n\t\tconst pasted = e.clipboardData.getData(\"text\").replace(/\\D/g, \"\").slice(0, safeMaxLength);\n\t\tif (!pasted) return;\n\n\t\tconst newDigits = pasted\n\t\t\t.split(\"\")\n\t\t\t.concat(Array(safeMaxLength).fill(\"\"))\n\t\t\t.slice(0, safeMaxLength);\n\t\tupdateValue(newDigits);\n\n\t\t// Focus the box after the last pasted digit (or last box)\n\t\tfocusInput(Math.min(pasted.length, safeMaxLength - 1));\n\t};\n\n\treturn (\n\t\t<div style={{ display: \"flex\", gap: \"8px\", justifyContent: \"center\" }}>\n\t\t\t{digits.map((digit, i) => (\n\t\t\t\t<input\n\t\t\t\t\tkey={i}\n\t\t\t\t\tref={(el) => { inputRefs.current[i] = el; }}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tinputMode=\"numeric\"\n\t\t\t\t\tmaxLength={1}\n\t\t\t\t\tvalue={digit}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonChange={(e) => handleChange(i, e.target.value.slice(-1))}\n\t\t\t\t\tonKeyDown={(e) => handleKeyDown(i, e)}\n\t\t\t\t\tonPaste={handlePaste}\n\t\t\t\t\tonFocus={(e) => e.target.select()}\n\t\t\t\t\taria-label={`Digit ${i + 1}`}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: \"40px\",\n\t\t\t\t\t\theight: \"48px\",\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t\tfontSize: \"20px\",\n\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\tborder: \"1px solid var(--border, #E5E5E5)\",\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t\toutline: \"none\",\n\t\t\t\t\t\tbackgroundColor: disabled ? \"var(--muted, #F5F5F5)\" : \"transparent\",\n\t\t\t\t\t\tcolor: \"var(--foreground, #000)\",\n\t\t\t\t\t\topacity: disabled ? 0.5 : 1,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</div>\n\t);\n}\n","export const BUTTON_LABELS = {\n\tAPPROVE: \"Verify\",\n\tREJECT: \"Reject\",\n\tRESEND: \"Resend OTP\",\n} as const;\n\nexport const RESEND_OTP_COOLDOWN_SECONDS = 30;\n\nexport const DEFAULT_OTP_MAX_LENGTH = 6;\nexport const MIN_OTP_MAX_LENGTH = 1;\nexport const MAX_OTP_MAX_LENGTH = 12;\n\n// If backend success event is delayed/lost, avoid permanently locking modal controls.\nexport const ACTION_PENDING_TIMEOUT_MS = 15000;\n\nexport const MODAL_CONTENT = {\n\tTITLE: \"Verification Required\",\n\tLOADING_APPROVE: \"Verifying...\",\n\tLOADING_REJECT: \"Rejecting...\",\n\tLOADING_RESEND: \"Resending...\",\n\tRESEND_AVAILABLE_IN: \"Resend OTP in\",\n} as const;\n","import {\n\tDEFAULT_OTP_MAX_LENGTH,\n\tMAX_OTP_MAX_LENGTH,\n\tMIN_OTP_MAX_LENGTH,\n} from \"./constants\";\n\n/**\n * Safely extract OTP config from the backend's requestedSchema.\n * Falls back to DEFAULT_OTP_MAX_LENGTH (6) if anything is missing or invalid.\n */\nexport function getOtpSchemaFromRequest(\n\tschema: Record<string, unknown> | undefined,\n): { maxLength: number } {\n\tconst properties = schema?.properties as Record<string, unknown> | undefined;\n\tconst otp = properties?.otp as { maxLength?: number } | undefined;\n\tconst maxLengthRaw = otp?.maxLength;\n\tconst parsedMaxLength = Number.isInteger(maxLengthRaw)\n\t\t? Number(maxLengthRaw)\n\t\t: DEFAULT_OTP_MAX_LENGTH;\n\tconst clampedMaxLength = Math.min(\n\t\tMAX_OTP_MAX_LENGTH,\n\t\tMath.max(MIN_OTP_MAX_LENGTH, parsedMaxLength),\n\t);\n\n\treturn {\n\t\tmaxLength: clampedMaxLength,\n\t};\n}\n","import { useEffect, useState, useCallback, useRef } from \"react\";\nimport { ShieldCheck, Loader2 } from \"lucide-react\";\nimport type { UserActionModalProps } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { OtpInput } from \"../OtpInput\";\nimport {\n\tACTION_PENDING_TIMEOUT_MS,\n\tBUTTON_LABELS,\n\tRESEND_OTP_COOLDOWN_SECONDS,\n\tMODAL_CONTENT,\n} from \"./constants\";\nimport { getOtpSchemaFromRequest } from \"./utils\";\n\nexport function UserActionModal({\n\tisOpen,\n\tuserActionRequest,\n\tonApprove,\n\tonReject,\n\tonResend,\n\tclearOtpTrigger,\n}: UserActionModalProps) {\n\tconst [otp, setOtp] = useState(\"\");\n\tconst [actionType, setActionType] = useState<\"approve\" | \"reject\" | \"resend\" | null>(null);\n\tconst [isSubmitting, setIsSubmitting] = useState(false);\n\tconst [resendCooldownRemaining, setResendCooldownRemaining] = useState(0);\n\tconst dialogRef = useRef<HTMLDivElement | null>(null);\n\tconst previousFocusedRef = useRef<HTMLElement | null>(null);\n\n\tconst schema = getOtpSchemaFromRequest(userActionRequest?.requestedSchema);\n\tconst resetActionState = useCallback(() => {\n\t\tsetIsSubmitting(false);\n\t\tsetActionType(null);\n\t}, []);\n\n\t// When modal opens, start resend cooldown. When it closes, reset all state.\n\tuseEffect(() => {\n\t\tif (isOpen) {\n\t\t\tsetResendCooldownRemaining(RESEND_OTP_COOLDOWN_SECONDS);\n\t\t} else {\n\t\t\tsetOtp(\"\");\n\t\t\tresetActionState();\n\t\t\tsetResendCooldownRemaining(0);\n\t\t}\n\t}, [isOpen, resetActionState]);\n\n\t// Cooldown timer\n\tuseEffect(() => {\n\t\tif (resendCooldownRemaining <= 0) return;\n\n\t\tconst timer = setTimeout(() => {\n\t\t\tsetResendCooldownRemaining((prev) => prev - 1);\n\t\t}, 1000);\n\n\t\treturn () => clearTimeout(timer);\n\t}, [resendCooldownRemaining]);\n\n\t// External OTP clear (e.g. on INVALID or REST failure)\n\tuseEffect(() => {\n\t\tif (clearOtpTrigger > 0) {\n\t\t\tsetOtp(\"\");\n\t\t\tresetActionState();\n\t\t}\n\t}, [clearOtpTrigger, resetActionState]);\n\n\t// Failsafe: don't keep modal permanently blocked if backend close event is delayed/lost.\n\tuseEffect(() => {\n\t\tif (!isOpen || !isSubmitting) return;\n\t\tif (actionType !== \"approve\" && actionType !== \"reject\") return;\n\n\t\tconst timeout = setTimeout(() => {\n\t\t\tresetActionState();\n\t\t}, ACTION_PENDING_TIMEOUT_MS);\n\n\t\treturn () => clearTimeout(timeout);\n\t}, [isOpen, isSubmitting, actionType, resetActionState]);\n\n\t// Keep keyboard focus trapped inside the non-dismissable security modal.\n\tuseEffect(() => {\n\t\tif (!isOpen) return;\n\n\t\tconst dialog = dialogRef.current;\n\t\tif (!dialog) return;\n\n\t\tpreviousFocusedRef.current = document.activeElement as HTMLElement | null;\n\t\tconst originalOverflow = document.body.style.overflow;\n\t\tdocument.body.style.overflow = \"hidden\";\n\n\t\tconst getFocusableElements = () =>\n\t\t\tArray.from(\n\t\t\t\tdialog.querySelectorAll<HTMLElement>(\n\t\t\t\t\t'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n\t\t\t\t),\n\t\t\t).filter((el) => !el.hasAttribute(\"disabled\") && el.tabIndex !== -1);\n\n\t\tconst focusables = getFocusableElements();\n\t\t(focusables[0] ?? dialog).focus();\n\n\t\tconst handleKeyDown = (event: KeyboardEvent) => {\n\t\t\tif (event.key === \"Escape\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key !== \"Tab\") return;\n\n\t\t\tconst currentFocusables = getFocusableElements();\n\t\t\tif (currentFocusables.length === 0) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tdialog.focus();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst first = currentFocusables[0];\n\t\t\tconst last = currentFocusables[currentFocusables.length - 1];\n\t\t\tconst activeElement = document.activeElement as HTMLElement | null;\n\t\t\tconst isInDialog = activeElement ? dialog.contains(activeElement) : false;\n\n\t\t\tif (event.shiftKey) {\n\t\t\t\tif (!isInDialog || activeElement === first) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tlast.focus();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!isInDialog || activeElement === last) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tfirst.focus();\n\t\t\t}\n\t\t};\n\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown);\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"keydown\", handleKeyDown);\n\t\t\tdocument.body.style.overflow = originalOverflow;\n\t\t\tpreviousFocusedRef.current?.focus();\n\t\t};\n\t}, [isOpen]);\n\n\tconst handleApprove = useCallback(async () => {\n\t\tif (otp.length !== schema.maxLength || !/^\\d+$/.test(otp)) return;\n\n\t\tsetIsSubmitting(true);\n\t\tsetActionType(\"approve\");\n\t\ttry {\n\t\t\tawait onApprove(otp);\n\t\t\t// On success: keep spinner visible until modal closes via stream event.\n\t\t\t// The isOpen effect resets all state when the modal closes.\n\t\t} catch {\n\t\t\t// On error: reset so user can retry\n\t\t\tresetActionState();\n\t\t}\n\t}, [otp, schema.maxLength, onApprove, resetActionState]);\n\n\tconst handleReject = useCallback(async () => {\n\t\tsetIsSubmitting(true);\n\t\tsetActionType(\"reject\");\n\t\ttry {\n\t\t\tawait onReject();\n\t\t\t// On success: keep spinner visible until modal closes via stream event\n\t\t} catch {\n\t\t\t// On error: reset so user can retry\n\t\t\tresetActionState();\n\t\t}\n\t}, [onReject, resetActionState]);\n\n\tconst handleResend = useCallback(async () => {\n\t\tif (resendCooldownRemaining > 0) return;\n\n\t\tsetIsSubmitting(true);\n\t\tsetActionType(\"resend\");\n\t\ttry {\n\t\t\tawait onResend();\n\t\t\tsetResendCooldownRemaining(RESEND_OTP_COOLDOWN_SECONDS);\n\t\t} catch {\n\t\t\t// Error handled by parent\n\t\t} finally {\n\t\t\tsetActionType(null);\n\t\t\tsetIsSubmitting(false);\n\t\t}\n\t}, [resendCooldownRemaining, onResend]);\n\n\tif (!isOpen || !userActionRequest) return null;\n\n\tconst isOtpValid = otp.length === schema.maxLength && /^\\d+$/.test(otp);\n\n\treturn (\n\t\t<>\n\t\t\t{/* Backdrop */}\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: \"fixed\",\n\t\t\t\t\tinset: 0,\n\t\t\t\t\tbackgroundColor: \"rgba(0, 0, 0, 0.5)\",\n\t\t\t\t\tzIndex: 10000,\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{/* Dialog */}\n\t\t\t\t<div\n\t\t\t\t\tref={dialogRef}\n\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackgroundColor: \"var(--card, #FFFFFF)\",\n\t\t\t\t\t\tborderRadius: \"12px\",\n\t\t\t\t\t\tpadding: \"24px\",\n\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\tmaxWidth: \"420px\",\n\t\t\t\t\t\tmargin: \"0 16px\",\n\t\t\t\t\t\tboxShadow: \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\",\n\t\t\t\t\t}}\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t>\n\t\t\t\t\t{/* Icon + Title */}\n\t\t\t\t\t<div style={{ textAlign: \"center\", marginBottom: \"16px\" }}>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tdisplay: \"inline-flex\",\n\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\twidth: \"48px\",\n\t\t\t\t\t\t\t\theight: \"48px\",\n\t\t\t\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\t\t\t\tbackgroundColor: \"var(--muted, #F5F5F5)\",\n\t\t\t\t\t\t\t\tmarginBottom: \"12px\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ShieldCheck\n\t\t\t\t\t\t\t\tclassName=\"text-primary\"\n\t\t\t\t\t\t\t\tstyle={{ width: \"24px\", height: \"24px\" }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<h2\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: \"18px\",\n\t\t\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\t\t\tcolor: \"var(--foreground, #000)\",\n\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{MODAL_CONTENT.TITLE}\n\t\t\t\t\t\t</h2>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Description from backend */}\n\t\t\t\t\t<p\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tcolor: \"var(--muted-foreground, #666)\",\n\t\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\t\tlineHeight: 1.5,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{userActionRequest.message}\n\t\t\t\t\t</p>\n\n\t\t\t\t\t{/* OTP Input */}\n\t\t\t\t\t<div style={{ marginBottom: \"24px\" }}>\n\t\t\t\t\t\t<OtpInput\n\t\t\t\t\t\t\tvalue={otp}\n\t\t\t\t\t\t\tonChange={setOtp}\n\t\t\t\t\t\t\tmaxLength={schema.maxLength}\n\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t{/* Buttons — stacked: Reject + Approve on top, Resend below */}\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\t\tgap: \"10px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{/* Reject + Approve row */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\tgap: \"8px\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tonClick={handleReject}\n\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"py-2.5 px-4 rounded-lg text-sm font-medium transition-colors\",\n\t\t\t\t\t\t\t\t\"bg-destructive/10 text-destructive hover:bg-destructive/20 hover:text-destructive\",\n\t\t\t\t\t\t\t\t\"disabled:opacity-50 disabled:cursor-not-allowed\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\tgap: \"6px\",\n\t\t\t\t\t\t\t\twhiteSpace: \"nowrap\",\n\t\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{actionType === \"reject\" && (\n\t\t\t\t\t\t\t\t<Loader2 className=\"w-4 h-4 animate-spin\" style={{ flexShrink: 0 }} />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{actionType === \"reject\" ? MODAL_CONTENT.LOADING_REJECT : BUTTON_LABELS.REJECT}\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tonClick={handleApprove}\n\t\t\t\t\t\t\tdisabled={!isOtpValid || isSubmitting}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"py-2.5 px-4 rounded-lg text-sm font-medium transition-colors\",\n\t\t\t\t\t\t\t\t\"bg-primary text-primary-foreground hover:bg-primary/90 active:bg-primary/80\",\n\t\t\t\t\t\t\t\t\"disabled:opacity-50 disabled:cursor-not-allowed\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\tgap: \"6px\",\n\t\t\t\t\t\t\t\twhiteSpace: \"nowrap\",\n\t\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{actionType === \"approve\" && (\n\t\t\t\t\t\t\t\t<Loader2 className=\"w-4 h-4 animate-spin\" style={{ flexShrink: 0 }} />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{actionType === \"approve\" ? MODAL_CONTENT.LOADING_APPROVE : BUTTON_LABELS.APPROVE}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Resend OTP — full width below */}\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={handleResend}\n\t\t\t\t\t\tdisabled={isSubmitting || resendCooldownRemaining > 0}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"py-2 px-4 rounded-lg text-xs font-medium transition-colors w-full\",\n\t\t\t\t\t\t\t\"text-muted-foreground hover:text-foreground\",\n\t\t\t\t\t\t\t\"disabled:opacity-50 disabled:cursor-not-allowed\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\tgap: \"6px\",\n\t\t\t\t\t\t\twhiteSpace: \"nowrap\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{actionType === \"resend\" && (\n\t\t\t\t\t\t\t<Loader2 className=\"w-3.5 h-3.5 animate-spin\" style={{ flexShrink: 0 }} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{actionType === \"resend\"\n\t\t\t\t\t\t\t? MODAL_CONTENT.LOADING_RESEND\n\t\t\t\t\t\t\t: resendCooldownRemaining > 0\n\t\t\t\t\t\t\t\t? `${MODAL_CONTENT.RESEND_AVAILABLE_IN} ${resendCooldownRemaining}s`\n\t\t\t\t\t\t\t\t: BUTTON_LABELS.RESEND}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n","import { useMemo, useState } from \"react\";\nimport { useChat } from \"@paymanai/payman-typescript-ask-sdk\";\nimport { PaymanChatContext } from \"../../contexts\";\nimport type { PaymanChatProps, UserActionState } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { ChatInput } from \"../ChatInput\";\nimport { MessageList } from \"../MessageList\";\nimport { UserActionModal } from \"../UserActionModal\";\n\nconst DEFAULT_USER_ACTION_STATE: UserActionState = {\n\trequest: null,\n\tresult: null,\n\tclearOtpTrigger: 0,\n};\n\nconst NOOP_ASYNC = async () => {};\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 chat = useChat(config, callbacks);\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} = chat;\n\n\t// Keep OTP features backward-safe if hook returns a non-OTP shape.\n\tconst userActionState = chat.userActionState ?? DEFAULT_USER_ACTION_STATE;\n\tconst approveUserAction = chat.approveUserAction ?? NOOP_ASYNC;\n\tconst rejectUserAction = chat.rejectUserAction ?? NOOP_ASYNC;\n\tconst resendOtp = chat.resendOtp ?? NOOP_ASYNC;\n\tconst isUserActionSupported =\n\t\ttypeof chat.approveUserAction === \"function\" &&\n\t\ttypeof chat.rejectUserAction === \"function\" &&\n\t\ttypeof chat.resendOtp === \"function\";\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\tinputStyle = \"rounded\",\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\tinputStyle={inputStyle}\n\t\t\t\t\tlayout={layout}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{/* User Action (OTP) Modal */}\n\t\t\t<UserActionModal\n\t\t\t\tisOpen={isUserActionSupported && userActionState.request !== null}\n\t\t\t\tuserActionRequest={userActionState.request}\n\t\t\t\tonApprove={approveUserAction}\n\t\t\t\tonReject={rejectUserAction}\n\t\t\t\tonResend={resendOtp}\n\t\t\t\tclearOtpTrigger={userActionState.clearOtpTrigger}\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/OtpInput/index.tsx","../src/components/UserActionModal/constants.ts","../src/components/UserActionModal/utils.ts","../src/components/UserActionModal/index.tsx","../src/components/PaymanChat/index.tsx"],"names":["useEffect","jsxs","jsx","motion","useRef","Bot","useState","useCallback","Loader2"],"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, CheckCircle2, 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\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{/* User Action Result Badge - above message bubble */}\n\t\t\t{message.userActionResult && (\n\t\t\t\t<div className=\"mb-2\">\n\t\t\t\t\t{message.userActionResult === \"approved\" ? (\n\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-full bg-green-100 text-green-700\">\n\t\t\t\t\t\t\t<CheckCircle2 className=\"w-3 h-3\" /> OTP Verified\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-full bg-red-100 text-red-700\">\n\t\t\t\t\t\t\t<XCircle className=\"w-3 h-3\" /> Rejected\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\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={cn(\"h-3 w-3 shrink-0 mt-0.5\", step.eventType === \"USER_ACTION_SUCCESS\" ? \"text-green-600\" : \"text-primary\")} />\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\tstep.eventType === \"USER_ACTION_SUCCESS\" && \"text-green-600\"\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{step.status === \"completed\" && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Check className={cn(\"h-3 w-3 shrink-0 mt-0.5\", step.eventType === \"USER_ACTION_SUCCESS\" ? \"text-green-600\" : \"text-primary\")} />\n\t\t\t\t\t\t\t\t\t\t\t)}\n\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<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)}\n\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<span\n\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\"text-muted-foreground break-words\",\n\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\tstep.eventType === \"USER_ACTION_SUCCESS\" && \"text-green-600\"\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>\n\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</span>\n\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<span className=\"ml-1.5 text-[10px] opacity-50\">\n\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</span>\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</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* Trace Icon - Positioned next to message bubble */}\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={cn(\n\t\t\t\t\t\t\"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\t\tmessage.userActionResult ? \"mt-8\" : \"mt-0.5\"\n\t\t\t\t\t)}\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 { useEffect, useRef } from \"react\";\nimport type { OtpInputProps } from \"../../types\";\n\nconst DEFAULT_MAX_LENGTH = 6;\nconst MAX_SUPPORTED_LENGTH = 12;\nconst AUTO_FOCUS_DELAY_MS = 250;\n\nexport function OtpInput({ value, onChange, maxLength, disabled = false }: OtpInputProps) {\n\tconst inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n\tconst safeMaxLength =\n\t\tNumber.isInteger(maxLength) && maxLength > 0\n\t\t\t? Math.min(maxLength, MAX_SUPPORTED_LENGTH)\n\t\t\t: DEFAULT_MAX_LENGTH;\n\n\t// Split value into individual characters\n\tconst digits = value.split(\"\").concat(Array(safeMaxLength).fill(\"\")).slice(0, safeMaxLength);\n\n\t// Auto-focus first input on mount\n\tuseEffect(() => {\n\t\tif (disabled) return;\n\n\t\tconst focusTimer = window.setTimeout(() => {\n\t\t\tinputRefs.current[0]?.focus();\n\t\t}, AUTO_FOCUS_DELAY_MS);\n\n\t\treturn () => window.clearTimeout(focusTimer);\n\t}, [disabled]);\n\n\tconst focusInput = (index: number) => {\n\t\tif (index >= 0 && index < safeMaxLength) {\n\t\t\tinputRefs.current[index]?.focus();\n\t\t}\n\t};\n\n\tconst updateValue = (newDigits: string[]) => {\n\t\tonChange(newDigits.join(\"\").slice(0, safeMaxLength));\n\t};\n\n\tconst handleChange = (index: number, char: string) => {\n\t\t// Only allow digits\n\t\tif (char && !/^\\d$/.test(char)) return;\n\n\t\tconst newDigits = [...digits];\n\t\tnewDigits[index] = char;\n\t\tupdateValue(newDigits);\n\n\t\t// Move to next box if a digit was entered\n\t\tif (char && index < safeMaxLength - 1) {\n\t\t\tfocusInput(index + 1);\n\t\t}\n\t};\n\n\tconst handleKeyDown = (index: number, e: React.KeyboardEvent<HTMLInputElement>) => {\n\t\tif (e.key === \"Enter\") {\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.key === \"Backspace\") {\n\t\t\te.preventDefault();\n\t\t\tif (digits[index]) {\n\t\t\t\t// Clear current box\n\t\t\t\tconst newDigits = [...digits];\n\t\t\t\tnewDigits[index] = \"\";\n\t\t\t\tupdateValue(newDigits);\n\t\t\t} else if (index > 0) {\n\t\t\t\t// Move to previous box and clear it\n\t\t\t\tconst newDigits = [...digits];\n\t\t\t\tnewDigits[index - 1] = \"\";\n\t\t\t\tupdateValue(newDigits);\n\t\t\t\tfocusInput(index - 1);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.key === \"ArrowLeft\") {\n\t\t\te.preventDefault();\n\t\t\tfocusInput(index - 1);\n\t\t} else if (e.key === \"ArrowRight\") {\n\t\t\te.preventDefault();\n\t\t\tfocusInput(index + 1);\n\t\t}\n\t};\n\n\tconst handlePaste = (e: React.ClipboardEvent) => {\n\t\te.preventDefault();\n\t\tconst pasted = e.clipboardData.getData(\"text\").replace(/\\D/g, \"\").slice(0, safeMaxLength);\n\t\tif (!pasted) return;\n\n\t\tconst newDigits = pasted\n\t\t\t.split(\"\")\n\t\t\t.concat(Array(safeMaxLength).fill(\"\"))\n\t\t\t.slice(0, safeMaxLength);\n\t\tupdateValue(newDigits);\n\n\t\t// Focus the box after the last pasted digit (or last box)\n\t\tfocusInput(Math.min(pasted.length, safeMaxLength - 1));\n\t};\n\n\treturn (\n\t\t<div style={{ display: \"flex\", gap: \"8px\", justifyContent: \"center\" }}>\n\t\t\t{digits.map((digit, i) => (\n\t\t\t\t<input\n\t\t\t\t\tkey={i}\n\t\t\t\t\tref={(el) => { inputRefs.current[i] = el; }}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tinputMode=\"numeric\"\n\t\t\t\t\tmaxLength={1}\n\t\t\t\t\tvalue={digit}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonChange={(e) => handleChange(i, e.target.value.slice(-1))}\n\t\t\t\t\tonKeyDown={(e) => handleKeyDown(i, e)}\n\t\t\t\t\tonPaste={handlePaste}\n\t\t\t\t\tonFocus={(e) => e.target.select()}\n\t\t\t\t\taria-label={`Digit ${i + 1}`}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: \"40px\",\n\t\t\t\t\t\theight: \"48px\",\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t\tfontSize: \"20px\",\n\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\tborder: \"1px solid var(--border, #E5E5E5)\",\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t\toutline: \"none\",\n\t\t\t\t\t\tbackgroundColor: disabled ? \"var(--muted, #F5F5F5)\" : \"transparent\",\n\t\t\t\t\t\tcolor: \"var(--foreground, #000)\",\n\t\t\t\t\t\topacity: disabled ? 0.5 : 1,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</div>\n\t);\n}\n","export const BUTTON_LABELS = {\n\tAPPROVE: \"Verify\",\n\tREJECT: \"Reject\",\n\tRESEND: \"Resend OTP\",\n} as const;\n\nexport const RESEND_OTP_COOLDOWN_SECONDS = 30;\n\nexport const DEFAULT_OTP_MAX_LENGTH = 6;\nexport const MIN_OTP_MAX_LENGTH = 1;\nexport const MAX_OTP_MAX_LENGTH = 12;\n\n// If backend success event is delayed/lost, avoid permanently locking modal controls.\nexport const ACTION_PENDING_TIMEOUT_MS = 15000;\n\nexport const MODAL_CONTENT = {\n\tTITLE: \"Verification Required\",\n\tLOADING_APPROVE: \"Verifying...\",\n\tLOADING_REJECT: \"Rejecting...\",\n\tLOADING_RESEND: \"Resending...\",\n\tRESEND_AVAILABLE_IN: \"Resend OTP in\",\n} as const;\n","import {\n\tDEFAULT_OTP_MAX_LENGTH,\n\tMAX_OTP_MAX_LENGTH,\n\tMIN_OTP_MAX_LENGTH,\n} from \"./constants\";\n\n/**\n * Safely extract OTP config from the backend's requestedSchema.\n * Falls back to DEFAULT_OTP_MAX_LENGTH (6) if anything is missing or invalid.\n */\nexport function getOtpSchemaFromRequest(\n\tschema: Record<string, unknown> | undefined,\n): { maxLength: number } {\n\tconst properties = schema?.properties as Record<string, unknown> | undefined;\n\tconst otp = properties?.otp as { maxLength?: number } | undefined;\n\tconst maxLengthRaw = otp?.maxLength;\n\tconst parsedMaxLength = Number.isInteger(maxLengthRaw)\n\t\t? Number(maxLengthRaw)\n\t\t: DEFAULT_OTP_MAX_LENGTH;\n\tconst clampedMaxLength = Math.min(\n\t\tMAX_OTP_MAX_LENGTH,\n\t\tMath.max(MIN_OTP_MAX_LENGTH, parsedMaxLength),\n\t);\n\n\treturn {\n\t\tmaxLength: clampedMaxLength,\n\t};\n}\n","import { useEffect, useState, useCallback, useRef } from \"react\";\nimport { ShieldCheck, Loader2 } from \"lucide-react\";\nimport type { UserActionModalProps } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { OtpInput } from \"../OtpInput\";\nimport {\n\tACTION_PENDING_TIMEOUT_MS,\n\tBUTTON_LABELS,\n\tRESEND_OTP_COOLDOWN_SECONDS,\n\tMODAL_CONTENT,\n} from \"./constants\";\nimport { getOtpSchemaFromRequest } from \"./utils\";\n\nexport function UserActionModal({\n\tisOpen,\n\tuserActionRequest,\n\tonApprove,\n\tonReject,\n\tonResend,\n\tclearOtpTrigger,\n}: UserActionModalProps) {\n\tconst [otp, setOtp] = useState(\"\");\n\tconst [actionType, setActionType] = useState<\"approve\" | \"reject\" | \"resend\" | null>(null);\n\tconst [isSubmitting, setIsSubmitting] = useState(false);\n\tconst [resendCooldownRemaining, setResendCooldownRemaining] = useState(0);\n\tconst dialogRef = useRef<HTMLDivElement | null>(null);\n\tconst previousFocusedRef = useRef<HTMLElement | null>(null);\n\n\tconst schema = getOtpSchemaFromRequest(userActionRequest?.requestedSchema);\n\tconst resetActionState = useCallback(() => {\n\t\tsetIsSubmitting(false);\n\t\tsetActionType(null);\n\t}, []);\n\n\t// When modal opens, start resend cooldown. When it closes, reset all state.\n\tuseEffect(() => {\n\t\tif (isOpen) {\n\t\t\tsetResendCooldownRemaining(RESEND_OTP_COOLDOWN_SECONDS);\n\t\t} else {\n\t\t\tsetOtp(\"\");\n\t\t\tresetActionState();\n\t\t\tsetResendCooldownRemaining(0);\n\t\t}\n\t}, [isOpen, resetActionState]);\n\n\t// Cooldown timer\n\tuseEffect(() => {\n\t\tif (resendCooldownRemaining <= 0) return;\n\n\t\tconst timer = setTimeout(() => {\n\t\t\tsetResendCooldownRemaining((prev) => prev - 1);\n\t\t}, 1000);\n\n\t\treturn () => clearTimeout(timer);\n\t}, [resendCooldownRemaining]);\n\n\t// External OTP clear (e.g. on INVALID or REST failure)\n\tuseEffect(() => {\n\t\tif (clearOtpTrigger > 0) {\n\t\t\tsetOtp(\"\");\n\t\t\tresetActionState();\n\t\t}\n\t}, [clearOtpTrigger, resetActionState]);\n\n\t// Failsafe: don't keep modal permanently blocked if backend close event is delayed/lost.\n\tuseEffect(() => {\n\t\tif (!isOpen || !isSubmitting) return;\n\t\tif (actionType !== \"approve\" && actionType !== \"reject\") return;\n\n\t\tconst timeout = setTimeout(() => {\n\t\t\tresetActionState();\n\t\t}, ACTION_PENDING_TIMEOUT_MS);\n\n\t\treturn () => clearTimeout(timeout);\n\t}, [isOpen, isSubmitting, actionType, resetActionState]);\n\n\t// Keep keyboard focus trapped inside the non-dismissable security modal.\n\tuseEffect(() => {\n\t\tif (!isOpen) return;\n\n\t\tconst dialog = dialogRef.current;\n\t\tif (!dialog) return;\n\n\t\tpreviousFocusedRef.current = document.activeElement as HTMLElement | null;\n\t\tconst originalOverflow = document.body.style.overflow;\n\t\tdocument.body.style.overflow = \"hidden\";\n\n\t\tconst getFocusableElements = () =>\n\t\t\tArray.from(\n\t\t\t\tdialog.querySelectorAll<HTMLElement>(\n\t\t\t\t\t'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n\t\t\t\t),\n\t\t\t).filter((el) => !el.hasAttribute(\"disabled\") && el.tabIndex !== -1);\n\n\t\tconst focusables = getFocusableElements();\n\t\t(focusables[0] ?? dialog).focus();\n\n\t\tconst handleKeyDown = (event: KeyboardEvent) => {\n\t\t\tif (event.key === \"Escape\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key !== \"Tab\") return;\n\n\t\t\tconst currentFocusables = getFocusableElements();\n\t\t\tif (currentFocusables.length === 0) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tdialog.focus();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst first = currentFocusables[0];\n\t\t\tconst last = currentFocusables[currentFocusables.length - 1];\n\t\t\tconst activeElement = document.activeElement as HTMLElement | null;\n\t\t\tconst isInDialog = activeElement ? dialog.contains(activeElement) : false;\n\n\t\t\tif (event.shiftKey) {\n\t\t\t\tif (!isInDialog || activeElement === first) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tlast.focus();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!isInDialog || activeElement === last) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tfirst.focus();\n\t\t\t}\n\t\t};\n\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown);\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"keydown\", handleKeyDown);\n\t\t\tdocument.body.style.overflow = originalOverflow;\n\t\t\tpreviousFocusedRef.current?.focus();\n\t\t};\n\t}, [isOpen]);\n\n\tconst handleApprove = useCallback(async () => {\n\t\tif (otp.length !== schema.maxLength || !/^\\d+$/.test(otp)) return;\n\n\t\tsetIsSubmitting(true);\n\t\tsetActionType(\"approve\");\n\t\ttry {\n\t\t\tawait onApprove(otp);\n\t\t\t// On success: keep spinner visible until modal closes via stream event.\n\t\t\t// The isOpen effect resets all state when the modal closes.\n\t\t} catch {\n\t\t\t// On error: reset so user can retry\n\t\t\tresetActionState();\n\t\t}\n\t}, [otp, schema.maxLength, onApprove, resetActionState]);\n\n\tconst handleReject = useCallback(async () => {\n\t\tsetIsSubmitting(true);\n\t\tsetActionType(\"reject\");\n\t\ttry {\n\t\t\tawait onReject();\n\t\t\t// On success: keep spinner visible until modal closes via stream event\n\t\t} catch {\n\t\t\t// On error: reset so user can retry\n\t\t\tresetActionState();\n\t\t}\n\t}, [onReject, resetActionState]);\n\n\tconst handleResend = useCallback(async () => {\n\t\tif (resendCooldownRemaining > 0) return;\n\n\t\tsetIsSubmitting(true);\n\t\tsetActionType(\"resend\");\n\t\ttry {\n\t\t\tawait onResend();\n\t\t\tsetResendCooldownRemaining(RESEND_OTP_COOLDOWN_SECONDS);\n\t\t} catch {\n\t\t\t// Error handled by parent\n\t\t} finally {\n\t\t\tsetActionType(null);\n\t\t\tsetIsSubmitting(false);\n\t\t}\n\t}, [resendCooldownRemaining, onResend]);\n\n\tif (!isOpen || !userActionRequest) return null;\n\n\tconst isOtpValid = otp.length === schema.maxLength && /^\\d+$/.test(otp);\n\n\treturn (\n\t\t<>\n\t\t\t{/* Backdrop */}\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: \"fixed\",\n\t\t\t\t\tinset: 0,\n\t\t\t\t\tbackgroundColor: \"rgba(0, 0, 0, 0.5)\",\n\t\t\t\t\tzIndex: 10000,\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{/* Dialog */}\n\t\t\t\t<div\n\t\t\t\t\tref={dialogRef}\n\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackgroundColor: \"var(--card, #FFFFFF)\",\n\t\t\t\t\t\tborderRadius: \"12px\",\n\t\t\t\t\t\tpadding: \"24px\",\n\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\tmaxWidth: \"420px\",\n\t\t\t\t\t\tmargin: \"0 16px\",\n\t\t\t\t\t\tboxShadow: \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\",\n\t\t\t\t\t}}\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t>\n\t\t\t\t\t{/* Icon + Title */}\n\t\t\t\t\t<div style={{ textAlign: \"center\", marginBottom: \"16px\" }}>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tdisplay: \"inline-flex\",\n\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\twidth: \"48px\",\n\t\t\t\t\t\t\t\theight: \"48px\",\n\t\t\t\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\t\t\t\tbackgroundColor: \"var(--muted, #F5F5F5)\",\n\t\t\t\t\t\t\t\tmarginBottom: \"12px\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ShieldCheck\n\t\t\t\t\t\t\t\tclassName=\"text-primary\"\n\t\t\t\t\t\t\t\tstyle={{ width: \"24px\", height: \"24px\" }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<h2\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: \"18px\",\n\t\t\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\t\t\tcolor: \"var(--foreground, #000)\",\n\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{MODAL_CONTENT.TITLE}\n\t\t\t\t\t\t</h2>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Description from backend */}\n\t\t\t\t\t<p\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tcolor: \"var(--muted-foreground, #666)\",\n\t\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\t\tlineHeight: 1.5,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{userActionRequest.message}\n\t\t\t\t\t</p>\n\n\t\t\t\t\t{/* OTP Input */}\n\t\t\t\t\t<div style={{ marginBottom: \"24px\" }}>\n\t\t\t\t\t\t<OtpInput\n\t\t\t\t\t\t\tvalue={otp}\n\t\t\t\t\t\t\tonChange={setOtp}\n\t\t\t\t\t\t\tmaxLength={schema.maxLength}\n\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t{/* Buttons — stacked: Reject + Approve on top, Resend below */}\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\t\tgap: \"10px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{/* Reject + Approve row */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\tgap: \"8px\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tonClick={handleReject}\n\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"py-2.5 px-4 rounded-lg text-sm font-medium transition-colors cursor-pointer\",\n\t\t\t\t\t\t\t\t\"bg-destructive/10 text-destructive hover:bg-destructive/30 hover:text-destructive\",\n\t\t\t\t\t\t\t\t\"disabled:opacity-50 disabled:cursor-not-allowed\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\tgap: \"6px\",\n\t\t\t\t\t\t\t\twhiteSpace: \"nowrap\",\n\t\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{actionType === \"reject\" && (\n\t\t\t\t\t\t\t\t<Loader2 className=\"w-4 h-4 animate-spin\" style={{ flexShrink: 0 }} />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{actionType === \"reject\" ? MODAL_CONTENT.LOADING_REJECT : BUTTON_LABELS.REJECT}\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tonClick={handleApprove}\n\t\t\t\t\t\t\tdisabled={!isOtpValid || isSubmitting}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"py-2.5 px-4 rounded-lg text-sm font-medium transition-colors cursor-pointer\",\n\t\t\t\t\t\t\t\t\"bg-primary text-primary-foreground hover:bg-primary/90 active:bg-primary/80\",\n\t\t\t\t\t\t\t\t\"disabled:opacity-50 disabled:cursor-not-allowed\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\tgap: \"6px\",\n\t\t\t\t\t\t\t\twhiteSpace: \"nowrap\",\n\t\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{actionType === \"approve\" && (\n\t\t\t\t\t\t\t\t<Loader2 className=\"w-4 h-4 animate-spin\" style={{ flexShrink: 0 }} />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{actionType === \"approve\" ? MODAL_CONTENT.LOADING_APPROVE : BUTTON_LABELS.APPROVE}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Resend OTP — full width below */}\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={handleResend}\n\t\t\t\t\t\tdisabled={isSubmitting || resendCooldownRemaining > 0}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"py-2 px-4 rounded-lg text-xs font-medium transition-colors w-full cursor-pointer\",\n\t\t\t\t\t\t\t\"border border-border text-muted-foreground hover:text-foreground hover:border-muted-foreground/40 hover:bg-muted/50\",\n\t\t\t\t\t\t\t\"disabled:opacity-50 disabled:cursor-not-allowed\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\tgap: \"6px\",\n\t\t\t\t\t\t\twhiteSpace: \"nowrap\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{actionType === \"resend\" && (\n\t\t\t\t\t\t\t<Loader2 className=\"w-3.5 h-3.5 animate-spin\" style={{ flexShrink: 0 }} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{actionType === \"resend\"\n\t\t\t\t\t\t\t? MODAL_CONTENT.LOADING_RESEND\n\t\t\t\t\t\t\t: resendCooldownRemaining > 0\n\t\t\t\t\t\t\t\t? `${MODAL_CONTENT.RESEND_AVAILABLE_IN} ${resendCooldownRemaining}s`\n\t\t\t\t\t\t\t\t: BUTTON_LABELS.RESEND}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n","import { useMemo, useState } from \"react\";\nimport { useChat } from \"@paymanai/payman-typescript-ask-sdk\";\nimport { PaymanChatContext } from \"../../contexts\";\nimport type { PaymanChatProps, UserActionState } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { ChatInput } from \"../ChatInput\";\nimport { MessageList } from \"../MessageList\";\nimport { UserActionModal } from \"../UserActionModal\";\n\nconst DEFAULT_USER_ACTION_STATE: UserActionState = {\n\trequest: null,\n\tresult: null,\n\tclearOtpTrigger: 0,\n};\n\nconst NOOP_ASYNC = async () => {};\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 chat = useChat(config, callbacks);\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} = chat;\n\n\t// Keep OTP features backward-safe if hook returns a non-OTP shape.\n\tconst userActionState = chat.userActionState ?? DEFAULT_USER_ACTION_STATE;\n\tconst approveUserAction = chat.approveUserAction ?? NOOP_ASYNC;\n\tconst rejectUserAction = chat.rejectUserAction ?? NOOP_ASYNC;\n\tconst resendOtp = chat.resendOtp ?? NOOP_ASYNC;\n\tconst isUserActionSupported =\n\t\ttypeof chat.approveUserAction === \"function\" &&\n\t\ttypeof chat.rejectUserAction === \"function\" &&\n\t\ttypeof chat.resendOtp === \"function\";\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\tinputStyle = \"rounded\",\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\tinputStyle={inputStyle}\n\t\t\t\t\tlayout={layout}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{/* User Action (OTP) Modal */}\n\t\t\t<UserActionModal\n\t\t\t\tisOpen={isUserActionSupported && userActionState.request !== null}\n\t\t\t\tuserActionRequest={userActionState.request}\n\t\t\t\tonApprove={approveUserAction}\n\t\t\t\tonReject={rejectUserAction}\n\t\t\t\tonResend={resendOtp}\n\t\t\t\tclearOtpTrigger={userActionState.clearOtpTrigger}\n\t\t\t/>\n\t\t\t</div>\n\t\t</PaymanChatContext.Provider>\n\t);\n}\n"]}
|
package/package.json
CHANGED