@paymanai/payman-ask-sdk 1.2.12 → 1.2.13
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/README.md +3 -0
- package/dist/index.d.mts +19 -1
- package/dist/index.d.ts +19 -1
- package/dist/index.js +60 -26
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +61 -27
- package/dist/index.mjs.map +1 -1
- package/dist/index.native.js.map +1 -1
- package/package.json +2 -2
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/utils/errorMessages.ts","../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","Square","Mic","ArrowUp","useState","ChevronDown","AnimatePresence","useMemo","Loader2","Check","X","Clock","useCallback","ChevronRight","Sparkles","ReactMarkdown","remarkGfm","Binoculars","User","MessageCircle","Fragment","ArrowDown","ShieldCheck","RefreshCw","useChat","useVoice"],"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\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\nexport function formatElapsedTime(ms?: number): string {\n\tif (!ms) return \"\";\n\tif (ms < 1000) return `${ms}ms`;\n\treturn `${(ms / 1000).toFixed(1)}s`;\n}\n","import { motion } from \"framer-motion\";\nimport { ArrowUp, Mic, Square } 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\tenableVoice = false,\n\tonVoicePress,\n\tvoiceAvailable = false,\n\tisRecording = false,\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 = 160;\n\t\t\ttextareaRef.current.style.height = `${Math.min(\n\t\t\t\tscrollHeight,\n\t\t\t\tmaxHeight\n\t\t\t)}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\tif (value.trim() && !isInputDisabled) onSend();\n\t\t}\n\t};\n\n\tconst isInputDisabled = disabled || isWaitingForResponse;\n\tconst showPauseButton = isWaitingForResponse && onPause;\n\tconst showVoiceButton = enableVoice && onVoicePress != null;\n\tconst isVoiceButtonDisabled =\n\t\tisWaitingForResponse || !voiceAvailable || !isSessionParamsConfigured;\n\tconst canSend = !isInputDisabled && !!value.trim();\n\n\tconst getPlaceholder = () => {\n\t\tif (!hasSelectedSession) return \"Select a version to start chatting\";\n\t\tif (!isSessionParamsConfigured) return \"Configure session params to begin\";\n\t\treturn placeholder;\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\"flex-shrink-0 w-full\", className)}\n\t\t\tstyle={{ flexShrink: 0 }}\n\t\t>\n\t\t\t<div className=\"px-3 pb-3 pt-1.5 w-full\">\n\t\t\t\t<div className=\"relative w-full max-w-2xl mx-auto\">\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tinitial={false}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex items-end overflow-hidden\",\n\t\t\t\t\t\t\t\"payman-chat-input\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\tref={textareaRef}\n\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\tonChange={(e) => onChange(e.target.value)}\n\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\tonClick={onClick}\n\t\t\t\t\t\t\tdisabled={isInputDisabled}\n\t\t\t\t\t\t\tplaceholder={getPlaceholder()}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"payman-chat-input-field\",\n\t\t\t\t\t\t\t\t\"focus:outline-none resize-none overflow-y-auto\",\n\t\t\t\t\t\t\t\t\"flex-1 min-w-0 py-3\"\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tminHeight: \"44px\",\n\t\t\t\t\t\t\t\tmaxHeight: \"160px\",\n\t\t\t\t\t\t\t\tpaddingLeft: \"18px\",\n\t\t\t\t\t\t\t\tpaddingRight: \"8px\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\trows={1}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{/* Action buttons - aligned with input */}\n\t\t\t\t\t\t<div className=\"flex items-center gap-1 shrink-0 p-2\">\n\t\t\t\t\t\t\t{/* Voice */}\n\t\t\t\t\t\t\t{showVoiceButton && (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tonClick={onVoicePress}\n\t\t\t\t\t\t\t\t\tdisabled={isVoiceButtonDisabled}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"relative flex items-center justify-center\",\n\t\t\t\t\t\t\t\t\t\t\"w-8 h-8 rounded-full transition-all duration-200\",\n\t\t\t\t\t\t\t\t\t\t\"payman-chat-input-btn-voice\",\n\t\t\t\t\t\t\t\t\t\tisRecording && \"recording\"\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\taria-label={isRecording ? \"Stop recording\" : \"Voice input\"}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{/* Recording ring pulse */}\n\t\t\t\t\t\t\t\t\t{isRecording && (\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"absolute inset-0 rounded-full border-2 animate-ping opacity-40\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\tborderColor: \"var(--payman-input-btn-voice-recording-ring)\",\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)}\n\t\t\t\t\t\t\t\t\t{isRecording ? (\n\t\t\t\t\t\t\t\t\t\t<Square\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-3 h-3 relative z-10\"\n\t\t\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\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\t\t<Mic className=\"w-4 h-4\" />\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{/* Send / Pause */}\n\t\t\t\t\t\t\t{showPauseButton ? (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tonClick={onPause}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"flex items-center justify-center\",\n\t\t\t\t\t\t\t\t\t\t\"w-8 h-8 rounded-full\",\n\t\t\t\t\t\t\t\t\t\t\"payman-chat-input-btn-pause\",\n\t\t\t\t\t\t\t\t\t\t\"hover:opacity-90 active:scale-95\",\n\t\t\t\t\t\t\t\t\t\t\"transition-all duration-150\"\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\taria-label=\"Stop response\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Square className=\"w-3.5 h-3.5\" fill=\"currentColor\" />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tonClick={onSend}\n\t\t\t\t\t\t\t\t\tdisabled={!canSend}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"flex items-center justify-center\",\n\t\t\t\t\t\t\t\t\t\t\"w-8 h-8 rounded-full\",\n\t\t\t\t\t\t\t\t\t\t\"payman-chat-input-btn-send\",\n\t\t\t\t\t\t\t\t\t\t\"hover:opacity-90 active:scale-95\",\n\t\t\t\t\t\t\t\t\t\t\"transition-all duration-150\"\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\taria-label=\"Send message\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ArrowUp className=\"w-4 h-4\" strokeWidth={2.5} />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</motion.div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","const WORKFLOW_FAILED = \"WORKFLOW_FAILED\";\nconst STREAM_NOT_STARTED = \"STREAM_NOT_STARTED\";\nconst HTTP_ERROR_PREFIX = /^HTTP\\s+(\\d+)\\s*:\\s*([\\s\\S]+)$/;\n\ntype ErrorPayload = {\n\tstatus?: number;\n\tmessage?: string;\n};\n\nexport function isFriendlyWorkflowError(errorDetails?: string): boolean {\n\tif (!errorDetails) return false;\n\n\treturn (\n\t\terrorDetails === WORKFLOW_FAILED ||\n\t\terrorDetails === STREAM_NOT_STARTED ||\n\t\terrorDetails.includes(WORKFLOW_FAILED)\n\t);\n}\n\nfunction parseErrorPayload(payload: string): ErrorPayload {\n\ttry {\n\t\tconst parsed = JSON.parse(payload) as unknown;\n\n\t\tif (typeof parsed === \"string\") {\n\t\t\treturn { message: parsed.trim() || undefined };\n\t\t}\n\n\t\tif (typeof parsed === \"object\" && parsed !== null) {\n\t\t\tconst record = parsed as Record<string, unknown>;\n\t\t\treturn {\n\t\t\t\tstatus:\n\t\t\t\t\ttypeof record.status === \"number\" ? record.status : undefined,\n\t\t\t\tmessage:\n\t\t\t\t\ttypeof record.message === \"string\" && record.message.trim()\n\t\t\t\t\t\t? record.message.trim()\n\t\t\t\t\t\t: undefined,\n\t\t\t};\n\t\t}\n\t} catch {\n\t\t// Ignore invalid JSON payloads and fall back to plain-text handling.\n\t}\n\n\treturn {};\n}\n\nexport function getConflictErrorMessage(errorDetails?: string): string | undefined {\n\tif (!errorDetails) return undefined;\n\n\tconst trimmedError = errorDetails.trim();\n\tconst httpMatch = trimmedError.match(HTTP_ERROR_PREFIX);\n\tconst httpStatus = httpMatch ? Number(httpMatch[1]) : undefined;\n\tconst rawPayload = (httpMatch ? httpMatch[2] : trimmedError).trim();\n\tconst payload = parseErrorPayload(rawPayload);\n\tconst status = payload.status ?? httpStatus;\n\n\tif (status !== 409) {\n\t\treturn undefined;\n\t}\n\n\tif (payload.message) {\n\t\treturn payload.message;\n\t}\n\n\treturn rawPayload || undefined;\n}\n","import { AnimatePresence, motion } from \"framer-motion\";\nimport {\n\tBinoculars,\n\tCheck,\n\tChevronDown,\n\tChevronRight,\n\tClock,\n\tLoader2,\n\tSparkles,\n\tX,\n} from \"lucide-react\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport type { AgentMessageProps, StreamingStep } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport {\n\tgetConflictErrorMessage,\n\tisFriendlyWorkflowError,\n} from \"../../utils/errorMessages\";\nimport { formatElapsedTime } from \"../../utils/formatDate\";\n\n/** Expandable block shown after streaming ends with all accumulated thinking. */\nfunction ThinkingBlock({ text }: { text: string }) {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst hasContent = typeof text === \"string\" && text.trim().length > 0;\n\n\tif (!hasContent) return null;\n\n\treturn (\n\t\t<div className=\"mt-1.5 mb-1.5\">\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => setIsOpen((prev) => !prev)}\n\t\t\t\tclassName=\"inline-flex items-center gap-1 text-[10px] payman-agent-thinking-toggle transition-colors\"\n\t\t\t\taria-expanded={isOpen}\n\t\t\t\taria-label={\n\t\t\t\t\tisOpen ? \"Collapse thought process\" : \"Expand thought process\"\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t<motion.div\n\t\t\t\t\tanimate={{ rotate: isOpen ? 180 : 0 }}\n\t\t\t\t\ttransition={{ duration: 0.15 }}\n\t\t\t\t\tclassName=\"shrink-0\"\n\t\t\t\t>\n\t\t\t\t\t<ChevronDown className=\"h-3 w-3\" />\n\t\t\t\t</motion.div>\n\t\t\t\t<span>Thought process</span>\n\t\t\t</button>\n\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t{isOpen && (\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tinitial={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\tanimate={{ height: \"auto\", opacity: 1 }}\n\t\t\t\t\t\texit={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\ttransition={{ duration: 0.2, ease: \"easeInOut\" }}\n\t\t\t\t\t\tclassName=\"overflow-hidden\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"mt-1 payman-agent-thinking-block rounded-md p-2 overflow-y-auto overflow-x-hidden\">\n\t\t\t\t\t\t\t<p className=\"m-0 text-xs payman-agent-thinking-block-text whitespace-pre-wrap leading-relaxed\">\n\t\t\t\t\t\t\t\t{text}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</motion.div>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t</div>\n\t);\n}\nconst FRIENDLY_ERROR_MESSAGE = \"Oops, something went wrong. Please try again.\";\n\n/** Content that looks like a raw error (INTENT_ERROR message) rather than a user-facing workflow response */\nfunction looksLikeRawError(text: string): boolean {\n\tif (!text || text.length < 10) return false;\n\treturn text.includes(\"errorType=\") || /failed:\\s*\\{/.test(text);\n}\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 =\n\t\t!!(message.tracingData || message.executionId) && !isStreaming;\n\tconst isCancelled = message.isCancelled ?? false;\n\tconst currentExecutingStepId = message.currentExecutingStepId;\n\n\tconst [isStepsExpanded, setIsStepsExpanded] = useState(false);\n\tconst wasStreamingRef = useRef(isStreaming);\n\n\tuseEffect(() => {\n\t\tif (isStreaming && hasSteps) {\n\t\t\tsetIsStepsExpanded(true);\n\t\t}\n\t\tif (wasStreamingRef.current && !isStreaming) {\n\t\t\tsetIsStepsExpanded(false);\n\t\t}\n\t\twasStreamingRef.current = isStreaming;\n\t}, [isStreaming, hasSteps]);\n\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\tconst rawContent = message.streamingContent || message.content || \"\";\n\tconst content = rawContent.replace(/\\\\n/g, \"\\n\");\n\t// When workflow completes with a response (e.g. after INTENT_ERROR), prefer that over error UI. Only show friendly error when there's no meaningful response or when content is raw error dump.\n\tconst hasMeaningfulContent =\n\t\tcontent.length > 0 && !looksLikeRawError(content);\n\t// Also show friendly error when workflow completed with no content (e.g. preflight failed, no workflowMsg)\n\tconst completedWithNoContent =\n\t\t!isStreaming &&\n\t\t!isCancelled &&\n\t\tcontent.length === 0 &&\n\t\t(message.streamProgress === \"completed\" || message.streamProgress === \"error\");\n\tconst conflictErrorMessage = getConflictErrorMessage(message.errorDetails);\n\tconst isError =\n\t\t!!conflictErrorMessage ||\n\t\t((isFriendlyWorkflowError(message.errorDetails) ||\n\t\t\tlooksLikeRawError(content)) &&\n\t\t\t!hasMeaningfulContent) ||\n\t\tcompletedWithNoContent;\n\tconst activeThinkingText = message.activeThinkingText;\n\tconst allThinkingText = message.allThinkingText;\n\tconst currentStep = useMemo(\n\t\t() =>\n\t\t\tmessage.steps?.find(\n\t\t\t\t(s) => s.id === currentExecutingStepId && s.status === \"in_progress\"\n\t\t\t),\n\t\t[message.steps, currentExecutingStepId]\n\t);\n\n\tconst getStepsLabel = (streaming: boolean) => {\n\t\tconst count = message.steps!.length;\n\t\tconst stepWord = count === 1 ? \"step\" : \"steps\";\n\t\tif (streaming) {\n\t\t\tif (streamingStepsText)\n\t\t\t\treturn streamingStepsText.replace(\"{count}\", count.toString());\n\t\t\treturn `${count} ${stepWord} in progress`;\n\t\t}\n\t\tif (completedStepsText) {\n\t\t\treturn completedStepsText\n\t\t\t\t.replace(\"{count}\", count.toString())\n\t\t\t\t.replace(\"{time}\", (totalElapsedMs / 1000).toFixed(1));\n\t\t}\n\t\treturn `${count} ${stepWord} completed`;\n\t};\n\n\t// All icons in a fixed 4x4 wrapper for alignment\n\tconst renderStepIcon = (\n\t\tstep: StreamingStep,\n\t\tisCurrentlyExecuting: boolean\n\t) => {\n\t\tconst wrapper = \"h-4 w-4 flex items-center justify-center shrink-0\";\n\t\tif (isCurrentlyExecuting)\n\t\t\treturn (\n\t\t\t\t<div className={wrapper}>\n\t\t\t\t\t<Loader2 className=\"h-3.5 w-3.5 payman-agent-step-icon--active animate-spin\" />\n\t\t\t\t</div>\n\t\t\t);\n\t\tif (step.status === \"pending\" && isCancelled)\n\t\t\treturn (\n\t\t\t\t<div className={wrapper}>\n\t\t\t\t\t<div className=\"h-1.5 w-1.5 rounded-full payman-agent-step-icon--pending\" />\n\t\t\t\t</div>\n\t\t\t);\n\t\tif (step.status === \"pending\" || step.status === \"in_progress\")\n\t\t\treturn (\n\t\t\t\t<div className={wrapper}>\n\t\t\t\t\t<Loader2 className=\"h-3.5 w-3.5 payman-agent-step-icon--in-progress-dim animate-spin\" />\n\t\t\t\t</div>\n\t\t\t);\n\t\tif (step.status === \"completed\")\n\t\t\treturn (\n\t\t\t\t<div className={wrapper}>\n\t\t\t\t\t<Check\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"h-3.5 w-3.5\",\n\t\t\t\t\t\t\tstep.eventType === \"USER_ACTION_SUCCESS\"\n\t\t\t\t\t\t\t\t? \"payman-agent-step-icon--success\"\n\t\t\t\t\t\t\t\t: \"payman-agent-step-icon--success-dim\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t);\n\t\tif (step.status === \"error\")\n\t\t\treturn (\n\t\t\t\t<div className={wrapper}>\n\t\t\t\t\t<X className=\"h-3.5 w-3.5 payman-agent-step-icon--error\" />\n\t\t\t\t</div>\n\t\t\t);\n\t\treturn (\n\t\t\t<div className={wrapper}>\n\t\t\t\t<div className=\"h-1.5 w-1.5 rounded-full payman-agent-step-icon--pending-dim\" />\n\t\t\t</div>\n\t\t);\n\t};\n\n\tconst stepsListContent = hasSteps && (\n\t\t<AnimatePresence initial={false}>\n\t\t\t{isStepsExpanded && (\n\t\t\t\t<motion.div\n\t\t\t\t\tinitial={{ height: 0, opacity: 0 }}\n\t\t\t\t\tanimate={{ height: \"auto\", opacity: 1 }}\n\t\t\t\t\texit={{ height: 0, opacity: 0 }}\n\t\t\t\t\ttransition={{ duration: 0.2, ease: \"easeInOut\" }}\n\t\t\t\t\tclassName=\"overflow-hidden\"\n\t\t\t\t>\n\t\t\t\t\t{!isStreaming && allThinkingText?.trim() && (\n\t\t\t\t\t\t<ThinkingBlock text={allThinkingText} />\n\t\t\t\t\t)}\n\t\t\t\t\t<div className=\"pt-1.5\">\n\t\t\t\t\t\t{message.steps!.map((step) => {\n\t\t\t\t\t\t\tconst isCurrentlyExecuting =\n\t\t\t\t\t\t\t\tstep.id === currentExecutingStepId &&\n\t\t\t\t\t\t\t\tstep.status === \"in_progress\" &&\n\t\t\t\t\t\t\t\tisStreaming &&\n\t\t\t\t\t\t\t\t!isCancelled;\n\t\t\t\t\t\t\tconst hasTime = step.elapsedMs != null && step.elapsedMs > 0;\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<div key={step.id} className=\"mb-1.5\">\n\t\t\t\t\t\t\t\t\t{/* Step row: icon + message */}\n\t\t\t\t\t\t\t\t\t<div className=\"flex gap-1.5 items-start\">\n\t\t\t\t\t\t\t\t\t\t<div className=\"mt-px\">\n\t\t\t\t\t\t\t\t\t\t\t{renderStepIcon(step, isCurrentlyExecuting)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<span\n\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\"text-xs leading-relaxed min-w-0 break-words\",\n\t\t\t\t\t\t\t\t\t\t\t\tisCurrentlyExecuting && \"shimmer-text font-medium\",\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\tstep.status === \"error\" &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"payman-agent-step-text--error\",\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\tstep.eventType === \"USER_ACTION_SUCCESS\" &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"payman-agent-step-text--success\",\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\tstep.status === \"completed\" &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"payman-agent-step-text--completed\",\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\tstep.status === \"pending\" &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"payman-agent-step-text--pending\",\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\tstep.status === \"in_progress\" &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"payman-agent-step-text--in-progress\"\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{step.message}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t{/* Time badge — indented to align with step text (16px icon + 6px gap = 22px) */}\n\t\t\t\t\t\t\t\t\t{hasTime && (\n\t\t\t\t\t\t\t\t\t\t<div className=\"pl-[22px] mt-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1 px-1.5 py-0.5 rounded-md payman-agent-step-time leading-none\">\n\t\t\t\t\t\t\t\t\t\t\t\t<Clock className=\"h-2.5 w-2.5 shrink-0 payman-agent-step-time-icon\" />\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-[10px] font-mono payman-agent-step-time-text\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{formatElapsedTime(step.elapsedMs!)}\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</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</div>\n\t\t\t\t</motion.div>\n\t\t\t)}\n\t\t</AnimatePresence>\n\t);\n\n\tconst stepsToggleRef = useRef<HTMLButtonElement>(null);\n\n\tconst handleStepsToggle = useCallback(() => {\n\t\tsetIsStepsExpanded((prev) => {\n\t\t\tconst next = !prev;\n\t\t\t// Dispatch event so MessageList can scroll to show expanded steps\n\t\t\tif (next) {\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tstepsToggleRef.current\n\t\t\t\t\t\t?.closest(\".payman-scrollbar\")\n\t\t\t\t\t\t?.dispatchEvent(new CustomEvent(\"payman-steps-toggle\"));\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn next;\n\t\t});\n\t}, []);\n\n\tconst stepsToggle = (streaming: boolean) => (\n\t\t<button\n\t\t\tref={stepsToggleRef}\n\t\t\tonClick={handleStepsToggle}\n\t\t\tclassName=\"inline-flex items-center gap-1.5 text-xs payman-agent-step-toggle transition-colors\"\n\t\t>\n\t\t\t<motion.div\n\t\t\t\tanimate={{ rotate: isStepsExpanded ? 90 : 0 }}\n\t\t\t\ttransition={{ duration: 0.15 }}\n\t\t\t\tclassName=\"shrink-0\"\n\t\t\t>\n\t\t\t\t<ChevronRight className=\"h-3 w-3\" />\n\t\t\t</motion.div>\n\t\t\t<span>{getStepsLabel(streaming)}</span>\n\t\t</button>\n\t);\n\n\t// Below-bubble steps section: only after streaming (thinking lives in bubble during stream)\n\tconst showSteps = showExecutionSteps && hasSteps && !isStreaming && !isError;\n\n\tconst messageContent = (\n\t\t<div className=\"w-full\">\n\t\t\t{/* Row: avatar + bubble + trace */}\n\t\t\t<div className=\"flex gap-3 justify-start items-start w-full\">\n\t\t\t\t{/* Avatar */}\n\t\t\t\t{showAvatar && (\n\t\t\t\t\t<div className=\"shrink-0 mt-0.5\">\n\t\t\t\t\t\t{isStreaming && showStreamingDot ? (\n\t\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\t<div className=\"relative\">\n\t\t\t\t\t\t\t\t\t<div className=\"h-2.5 w-2.5 rounded-full payman-agent-avatar-dot animate-pulse\" />\n\t\t\t\t\t\t\t\t\t<div className=\"absolute inset-0 h-2.5 w-2.5 rounded-full payman-agent-avatar-dot-ping animate-ping\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div className=\"h-8 w-8 rounded-full payman-agent-avatar flex items-center justify-center\">\n\t\t\t\t\t\t\t\t<Sparkles className=\"h-3.5 w-3.5 payman-agent-avatar-icon\" />\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)}\n\n\t\t\t\t{/* Bubble — constrained width */}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"min-w-0\",\n\t\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t\t? \"max-w-[85%]\"\n\t\t\t\t\t\t\t: showAvatar\n\t\t\t\t\t\t\t? \"max-w-[85%]\"\n\t\t\t\t\t\t\t: \"max-w-[80%]\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{/* User Action Result Badge */}\n\t\t\t\t\t{message.userActionResult && (\n\t\t\t\t\t\t<div className=\"mb-2\">\n\t\t\t\t\t\t\t{message.userActionResult === \"approved\" ? (\n\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1.5 px-4 py-1.5 text-xs font-semibold rounded-full payman-agent-approved shrink-0\">\n\t\t\t\t\t\t\t\t\t<Check className=\"w-3.5 h-3.5 shrink-0\" strokeWidth={2.5} />\n\t\t\t\t\t\t\t\t\tVerified\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\t\t<span className=\"inline-flex items-center gap-1.5 px-4 py-1.5 text-xs font-semibold rounded-full payman-agent-rejected shrink-0\">\n\t\t\t\t\t\t\t\t\t<X className=\"w-3.5 h-3.5 shrink-0\" strokeWidth={2.5} />\n\t\t\t\t\t\t\t\t\tRejected\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</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"overflow-hidden w-full min-w-0 px-4 py-3 rounded-2xl rounded-tl-md transition-all duration-200\",\n\t\t\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t\t\t? cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-agent-bubble payman-agent-bubble--centered\",\n\t\t\t\t\t\t\t\t\t\tisStreaming && \"streaming\",\n\t\t\t\t\t\t\t\t\t\tisError && \"error\"\n\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t\t: cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-agent-bubble\",\n\t\t\t\t\t\t\t\t\t\tisError && \"payman-agent-bubble--error\"\n\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{showAgentName && (\n\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"text-sm font-semibold mb-1 leading-none payman-agent-name\",\n\t\t\t\t\t\t\t\t\tisStreaming && !content && \"animate-pulse\"\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{isStreaming && !content ? \"Thought Process\" : agentName}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"text-sm leading-relaxed min-w-0 w-full break-words overflow-wrap-anywhere\",\n\t\t\t\t\t\t\t\tshowAgentName && \"mt-1\"\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{isStreaming && !content ? (\n\t\t\t\t\t\t\t\t// Streaming without content — show thinking/step indicator\n\t\t\t\t\t\t\t\tactiveThinkingText ? (\n\t\t\t\t\t\t\t\t\t<div className=\"flex gap-2 items-start\">\n\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-4 w-4 mt-0.5 payman-agent-thinking-spinner animate-spin shrink-0\" />\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-sm leading-relaxed min-w-0 break-words payman-agent-thinking-text whitespace-pre-wrap flex-1\">\n\t\t\t\t\t\t\t\t\t\t\t{activeThinkingText}\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"inline-block w-0.5 h-3.5 payman-agent-thinking-cursor animate-pulse ml-0.5 align-text-bottom\" />\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t) : currentStep ? (\n\t\t\t\t\t\t\t\t\t<div className=\"flex gap-1.5 items-start\">\n\t\t\t\t\t\t\t\t\t\t<div className=\"mt-0.5 shrink-0\">\n\t\t\t\t\t\t\t\t\t\t\t{renderStepIcon(currentStep, true)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-sm leading-relaxed min-w-0 break-words shimmer-text font-medium flex-1\">\n\t\t\t\t\t\t\t\t\t\t\t{currentStep.message}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<div className=\"flex gap-2.5 items-start\">\n\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"w-4 h-4 mt-0.5 payman-agent-thinking-spinner animate-spin shrink-0\" />\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-sm payman-agent-thinking-text flex-1\">\n\t\t\t\t\t\t\t\t\t\t\t{currentMessage || \"Thinking...\"}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) : isCancelled && !content ? (\n\t\t\t\t\t\t\t\t<div className=\"flex gap-2.5 items-start\">\n\t\t\t\t\t\t\t\t\t<X className=\"w-4 h-4 mt-0.5 payman-agent-cancelled-icon shrink-0\" />\n\t\t\t\t\t\t\t\t\t<span className=\"text-sm payman-agent-cancelled-text italic flex-1\">\n\t\t\t\t\t\t\t\t\t\t{currentMessage || \"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<div\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-markdown payman-agent-markdown prose prose-sm dark:prose-invert max-w-none min-w-0 w-full break-words overflow-wrap-anywhere\",\n\t\t\t\t\t\t\t\t\t\tisError && \"payman-agent-markdown--error\",\n\t\t\t\t\t\t\t\t\t\tisStreaming && content && \"streaming-cursor\"\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<ReactMarkdown\n\t\t\t\t\t\t\t\t\t\tremarkPlugins={[remarkGfm]}\n\t\t\t\t\t\t\t\t\t\tcomponents={markdownComponents(isError)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{isError\n\t\t\t\t\t\t\t\t\t\t\t? conflictErrorMessage ?? FRIENDLY_ERROR_MESSAGE\n\t\t\t\t\t\t\t\t\t\t\t: content ||\n\t\t\t\t\t\t\t\t\t\t\t (isStreaming\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"Thinking...\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isCancelled\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"Request was stopped.\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"\")}\n\t\t\t\t\t\t\t\t\t</ReactMarkdown>\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</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Trace Button */}\n\t\t\t\t{hasTraceData && onExecutionTraceClick && (\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\tonExecutionTraceClick({\n\t\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\t\ttracingData: message.tracingData,\n\t\t\t\t\t\t\t\texecutionId: message.executionId,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"p-2 rounded-lg shrink-0 payman-agent-trace\",\n\t\t\t\t\t\t\t\"active:scale-95 transition-all duration-150\",\n\t\t\t\t\t\t\tmessage.userActionResult ? \"mt-8\" : \"mt-0.5\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t\ttitle=\"View execution trace\"\n\t\t\t\t\t\taria-label=\"View execution trace\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Binoculars className=\"w-4 h-4 payman-agent-trace-icon\" />\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* Steps — outside the flex row (only when not streaming) */}\n\t\t\t{showSteps && (\n\t\t\t\t<div className={cn(\"mt-1.5\", showAvatar ? \"ml-11\" : \"ml-0\")}>\n\t\t\t\t\t{showExecutionSteps &&\n\t\t\t\t\t\thasSteps &&\n\t\t\t\t\t\t!isStreaming &&\n\t\t\t\t\t\t!isError &&\n\t\t\t\t\t\tstepsToggle(false)}\n\t\t\t\t\t{stepsListContent}\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: 8, scale: 0.98 }}\n\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\ttransition={{ duration: 0.25, ease: [0.25, 0.46, 0.45, 0.94] }}\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\n/* ---- Markdown components — colors inherited from payman-agent-markdown CSS ---- */\nfunction markdownComponents(_isError: boolean) {\n\treturn {\n\t\tp: ({ children }: any) => (\n\t\t\t<p className=\"mb-3 last:mb-0 text-sm leading-relaxed\">{children}</p>\n\t\t),\n\t\tcode: ({ className: codeClassName, children }: any) => {\n\t\t\tconst isInline = !codeClassName;\n\t\t\treturn isInline ? (\n\t\t\t\t<code className=\"px-1.5 py-0.5 rounded-md text-xs font-mono break-all payman-agent-code-inline\">\n\t\t\t\t\t{children}\n\t\t\t\t</code>\n\t\t\t) : (\n\t\t\t\t<code className=\"block p-3 rounded-lg text-xs font-mono overflow-x-auto my-2 whitespace-pre payman-agent-code-block\">\n\t\t\t\t\t{children}\n\t\t\t\t</code>\n\t\t\t);\n\t\t},\n\t\tpre: ({ children }: any) => (\n\t\t\t<pre className=\"my-2 overflow-x-auto max-w-full rounded-lg\">\n\t\t\t\t{children}\n\t\t\t</pre>\n\t\t),\n\t\tul: ({ children }: any) => (\n\t\t\t<ul className=\"list-disc ml-4 mb-3 space-y-1 text-sm\">{children}</ul>\n\t\t),\n\t\tol: ({ children }: any) => (\n\t\t\t<ol className=\"list-decimal ml-4 mb-3 space-y-1 text-sm\">{children}</ol>\n\t\t),\n\t\tli: ({ children }: any) => (\n\t\t\t<li className=\"text-sm leading-relaxed\">{children}</li>\n\t\t),\n\t\th1: ({ children }: any) => (\n\t\t\t<h1 className=\"text-lg font-semibold mb-2 mt-4 first:mt-0\">{children}</h1>\n\t\t),\n\t\th2: ({ children }: any) => (\n\t\t\t<h2 className=\"text-base font-semibold mb-2 mt-3 first:mt-0\">\n\t\t\t\t{children}\n\t\t\t</h2>\n\t\t),\n\t\th3: ({ children }: any) => (\n\t\t\t<h3 className=\"text-sm font-semibold mb-1 mt-2 first:mt-0\">{children}</h3>\n\t\t),\n\t\tstrong: ({ children }: any) => (\n\t\t\t<strong className=\"font-semibold\">{children}</strong>\n\t\t),\n\t\tem: ({ children }: any) => <em className=\"italic\">{children}</em>,\n\t\tblockquote: ({ children }: any) => (\n\t\t\t<blockquote className=\"pl-4 my-2 italic payman-agent-blockquote\">\n\t\t\t\t{children}\n\t\t\t</blockquote>\n\t\t),\n\t\thr: () => <hr className=\"my-4 payman-agent-hr\" />,\n\t\ta: ({ href, children }: any) => (\n\t\t\t<a\n\t\t\t\thref={href}\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\tclassName=\"underline underline-offset-2 decoration-1 payman-agent-link\"\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</a>\n\t\t),\n\t\ttable: ({ children }: any) => (\n\t\t\t<div className=\"relative w-full overflow-x-auto my-4 -mx-1\">\n\t\t\t\t<table className=\"min-w-full caption-bottom text-sm rounded-lg overflow-hidden payman-agent-table\">\n\t\t\t\t\t{children}\n\t\t\t\t</table>\n\t\t\t</div>\n\t\t),\n\t\tthead: ({ children }: any) => (\n\t\t\t<thead className=\"[&_tr]:border-b payman-agent-thead\">{children}</thead>\n\t\t),\n\t\ttbody: ({ children }: any) => (\n\t\t\t<tbody className=\"[&_tr:last-child]:border-0\">{children}</tbody>\n\t\t),\n\t\ttr: ({ children }: any) => (\n\t\t\t<tr className=\"border-b transition-colors payman-agent-tr\">{children}</tr>\n\t\t),\n\t\tth: ({ children }: any) => (\n\t\t\t<th className=\"h-10 px-3 text-left align-middle font-medium whitespace-nowrap text-xs\">\n\t\t\t\t{children}\n\t\t\t</th>\n\t\t),\n\t\ttd: ({ children }: any) => (\n\t\t\t<td className=\"p-3 align-middle text-sm\">{children}</td>\n\t\t),\n\t};\n}\n","import { motion } from \"framer-motion\";\nimport { User } from \"lucide-react\";\nimport type { UserMessageProps } from \"../../types\";\nimport { cn, formatDate } from \"../../utils\";\n\nexport function UserMessage({\n\tmessage,\n\tanimated = false,\n\tshowAvatar = false,\n}: UserMessageProps) {\n\tconst content = (\n\t\t<div className=\"flex gap-3 justify-end w-full\">\n\t\t\t{/* Message Container */}\n\t\t\t<div className=\"max-w-[80%] min-w-0 flex flex-col items-end\">\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"rounded-2xl rounded-br-md px-4 py-3\",\n\t\t\t\t\t\t\"bg-primary text-primary-foreground\",\n\t\t\t\t\t\t\"shadow-sm\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<p className=\"text-sm leading-relaxed 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<span className=\"text-[10px] mt-1.5 mr-1 text-muted-foreground/70 select-none\">\n\t\t\t\t\t{formatDate(message.timestamp)}\n\t\t\t\t</span>\n\t\t\t</div>\n\n\t\t\t{/* Avatar */}\n\t\t\t{showAvatar && (\n\t\t\t\t<div className=\"shrink-0 mt-0.5\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"h-8 w-8 rounded-full\",\n\t\t\t\t\t\t\t\"bg-primary/10 border border-primary/20\",\n\t\t\t\t\t\t\t\"flex items-center justify-center\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<User className=\"h-3.5 w-3.5 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: 8, scale: 0.98 }}\n\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\ttransition={{ duration: 0.25, ease: [0.25, 0.46, 0.45, 0.94] }}\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}","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 = \"Assistant\",\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\tconst actualShowUserAvatar =\n\t\tshowUserAvatar !== undefined ? showUserAvatar : showAvatars;\n\tconst actualShowAssistantAvatar =\n\t\tshowAssistantAvatar !== undefined ? showAssistantAvatar : showAvatars;\n\n\tif (message.role === \"user\") {\n\t\treturn (\n\t\t\t<UserMessage\n\t\t\t\tmessage={message}\n\t\t\t\tanimated={animated}\n\t\t\t\tshowAvatar={actualShowUserAvatar}\n\t\t\t/>\n\t\t);\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","import { cn } from \"../../utils\";\n\ninterface MessageRowSkeletonProps {\n\tisRightAligned?: boolean;\n}\n\nexport function MessageRowSkeleton({\n\tisRightAligned = false,\n}: MessageRowSkeletonProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"flex w-full\",\n\t\t\t\tisRightAligned ? \"justify-end\" : \"justify-start\"\n\t\t\t)}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex flex-col gap-2 w-full\",\n\t\t\t\t\tisRightAligned ? \"items-end max-w-[70%]\" : \"items-start max-w-[80%]\"\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"rounded-2xl p-4 w-full\",\n\t\t\t\t\t\tisRightAligned\n\t\t\t\t\t\t\t? \"bg-primary/8 rounded-br-md\"\n\t\t\t\t\t\t\t: \"bg-muted/70 rounded-bl-md\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"space-y-2.5\">\n\t\t\t\t\t\t<div className=\"h-3 skeleton-pulse rounded-full bg-muted-foreground/10 w-[85%]\" />\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName=\"h-3 skeleton-pulse rounded-full bg-muted-foreground/10 w-full\"\n\t\t\t\t\t\t\tstyle={{ animationDelay: \"0.1s\" }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{!isRightAligned && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName=\"h-3 skeleton-pulse rounded-full bg-muted-foreground/10 w-[60%]\"\n\t\t\t\t\t\t\t\tstyle={{ animationDelay: \"0.2s\" }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"h-2 skeleton-pulse rounded-full bg-muted-foreground/8 w-12 mx-1\"\n\t\t\t\t\tstyle={{ animationDelay: \"0.3s\" }}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { motion } from \"framer-motion\";\nimport { ArrowDown, MessageCircle } from \"lucide-react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { MessageListProps } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { MessageRow } from \"../MessageRow\";\nimport { MessageRowSkeleton } from \"../MessageRowSkeleton\";\n\nconst SCROLL_THRESHOLD = 150;\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 = \"Assistant\",\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 scrollRef = useRef<HTMLDivElement>(null);\n\tconst isNearBottomRef = useRef(true);\n\tconst [showScrollBtn, setShowScrollBtn] = useState(false);\n\tconst prevMessageCountRef = useRef(messages.length);\n\n\tconst getDistanceFromBottom = useCallback(() => {\n\t\tconst el = scrollRef.current;\n\t\tif (!el) return 0;\n\t\treturn el.scrollHeight - el.scrollTop - el.clientHeight;\n\t}, []);\n\n\tconst scrollToBottom = useCallback((behavior: ScrollBehavior = \"smooth\") => {\n\t\tconst el = scrollRef.current;\n\t\tif (!el) return;\n\t\tel.scrollTo({ top: el.scrollHeight, behavior });\n\t}, []);\n\n\tconst handleScroll = useCallback(() => {\n\t\tconst distance = getDistanceFromBottom();\n\t\tconst nearBottom = distance <= SCROLL_THRESHOLD;\n\t\tisNearBottomRef.current = nearBottom;\n\t\tsetShowScrollBtn(!nearBottom);\n\t}, [getDistanceFromBottom]);\n\n\t// Auto-scroll when new messages arrive\n\tuseEffect(() => {\n\t\tconst prevCount = prevMessageCountRef.current;\n\t\tprevMessageCountRef.current = messages.length;\n\n\t\tif (messages.length > prevCount && isNearBottomRef.current) {\n\t\t\trequestAnimationFrame(() => scrollToBottom());\n\t\t}\n\t}, [messages.length, scrollToBottom]);\n\n\t// Auto-scroll during streaming\n\tuseEffect(() => {\n\t\tconst lastMsg = messages[messages.length - 1];\n\t\tif (!lastMsg?.isStreaming) return;\n\t\tif (!isNearBottomRef.current) return;\n\n\t\trequestAnimationFrame(() => scrollToBottom());\n\t});\n\n\t// Instant scroll on mount\n\tuseEffect(() => {\n\t\tif (messages.length > 0) {\n\t\t\tsetTimeout(() => scrollToBottom(\"instant\"), 50);\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, []);\n\n\t// Listen for steps toggle events from AgentMessage\n\t// When steps expand, scroll down a bit so they're visible\n\tuseEffect(() => {\n\t\tconst handleStepsToggle = () => {\n\t\t\t// After steps expand/collapse, if we're near the bottom, scroll to show them\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tconst distance = getDistanceFromBottom();\n\t\t\t\t\tif (distance > 0 && distance < 600) {\n\t\t\t\t\t\tscrollToBottom();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tconst el = scrollRef.current;\n\t\tif (el) {\n\t\t\tel.addEventListener(\"payman-steps-toggle\", handleStepsToggle);\n\t\t\treturn () =>\n\t\t\t\tel.removeEventListener(\"payman-steps-toggle\", handleStepsToggle);\n\t\t}\n\t}, [getDistanceFromBottom, scrollToBottom]);\n\n\tconst handleScrollToBottom = useCallback(() => {\n\t\tscrollToBottom();\n\t}, [scrollToBottom]);\n\n\t/* Loading */\n\tif (isLoading) {\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 payman-scrollbar\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"space-y-5\",\n\t\t\t\t\t\tlayout === \"centered\" ? \"max-w-2xl mx-auto px-4 py-6\" : \"p-4\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{Array.from({ length: 5 }).map((_, i) => (\n\t\t\t\t\t\t<MessageRowSkeleton\n\t\t\t\t\t\t\tkey={`skel-${i}`}\n\t\t\t\t\t\t\tisRightAligned={i % 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\t/* Empty state */\n\tif (messages.length === 0) {\n\t\tconst lines = emptyStateText.split(\"\\n\").map((l) => l.trim()).filter(Boolean);\n\t\treturn (\n\t\t\t<div className={cn(\"payman-empty-root p-8\", className)}>\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={{ duration: 0.5, ease: [0.25, 0.46, 0.45, 0.94] }}\n\t\t\t\t\tclassName=\"payman-empty-content\"\n\t\t\t\t>\n\t\t\t\t\t{showEmptyStateIcon && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tinitial={{ scale: 0.85, opacity: 0 }}\n\t\t\t\t\t\t\tanimate={{ scale: 1, opacity: 1 }}\n\t\t\t\t\t\t\ttransition={{ delay: 0.08, duration: 0.45, ease: [0.25, 0.46, 0.45, 0.94] }}\n\t\t\t\t\t\t\tclassName=\"payman-empty-icon-wrap\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<MessageCircle className=\"h-7 w-7 payman-empty-icon\" strokeWidth={1.5} />\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t\t<div className=\"flex flex-col gap-1.5\">\n\t\t\t\t\t\t{lines.map((line, i) => (\n\t\t\t\t\t\t\t<motion.p\n\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 6 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\t\ttransition={{ delay: 0.12 + i * 0.06, duration: 0.4 }}\n\t\t\t\t\t\t\t\tclassName={i === 0 ? \"payman-empty-title\" : \"payman-empty-subtitle\"}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{line}\n\t\t\t\t\t\t\t</motion.p>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t</motion.div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t/* Messages */\n\treturn (\n\t\t<>\n\t\t\t{/* Scrollable message list — takes full flex space */}\n\t\t\t<div\n\t\t\t\tref={scrollRef}\n\t\t\t\tonScroll={handleScroll}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex-1 min-h-0 overflow-y-auto payman-scrollbar relative\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"space-y-4\",\n\t\t\t\t\t\tlayout === \"centered\" ? \"max-w-2xl mx-auto px-4 py-6\" : \"p-4\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{messages.map((message) => (\n\t\t\t\t\t\t<MessageRow\n\t\t\t\t\t\t\tkey={message.id}\n\t\t\t\t\t\t\tmessage={message}\n\t\t\t\t\t\t\tstage={stage}\n\t\t\t\t\t\t\tanimated={animated}\n\t\t\t\t\t\t\tshowAgentName={showAgentName}\n\t\t\t\t\t\t\tagentName={agentName}\n\t\t\t\t\t\t\tshowAvatars={showAvatars}\n\t\t\t\t\t\t\tshowUserAvatar={showUserAvatar}\n\t\t\t\t\t\t\tshowAssistantAvatar={showAssistantAvatar}\n\t\t\t\t\t\t\tlayout={layout}\n\t\t\t\t\t\t\tshowTimestamps={showTimestamps}\n\t\t\t\t\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\t\t\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\t\t\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\t\t\t\t\tcompletedStepsText={completedStepsText}\n\t\t\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\n\t\t\t\t{/* Scroll-to-bottom button */}\n\t\t\t\t{showScrollBtn && (\n\t\t\t\t\t<div className=\"sticky bottom-0 z-20 flex justify-center pb-3 -mt-11\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tonClick={handleScrollToBottom}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"w-8 h-8 rounded-full\",\n\t\t\t\t\t\t\t\t\"bg-card border border-border shadow-lg\",\n\t\t\t\t\t\t\t\t\"flex items-center justify-center\",\n\t\t\t\t\t\t\t\t\"hover:bg-muted active:scale-95\",\n\t\t\t\t\t\t\t\t\"transition-all duration-150\",\n\t\t\t\t\t\t\t\t\"cursor-pointer\"\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\taria-label=\"Scroll to bottom\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ArrowDown className=\"w-4 h-4 text-muted-foreground\" />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</>\n\t);\n}\n","import { useEffect, useRef } from \"react\";\nimport type { OtpInputProps } from \"../../types\";\nimport { cn } from \"../../utils\";\n\nconst DEFAULT_MAX_LENGTH = 6;\nconst MAX_SUPPORTED_LENGTH = 12;\nconst AUTO_FOCUS_DELAY_MS = 250;\n\nexport function OtpInput({\n\tvalue,\n\tonChange,\n\tmaxLength,\n\tdisabled = false,\n}: 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\tconst digits = value\n\t\t.split(\"\")\n\t\t.concat(Array(safeMaxLength).fill(\"\"))\n\t\t.slice(0, safeMaxLength);\n\n\t// Auto-focus first input\n\tuseEffect(() => {\n\t\tif (disabled) return;\n\t\tconst timer = window.setTimeout(() => {\n\t\t\tinputRefs.current[0]?.focus();\n\t\t}, AUTO_FOCUS_DELAY_MS);\n\t\treturn () => window.clearTimeout(timer);\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\tif (char && !/^\\d$/.test(char)) return;\n\t\tconst newDigits = [...digits];\n\t\tnewDigits[index] = char;\n\t\tupdateValue(newDigits);\n\t\tif (char && index < safeMaxLength - 1) focusInput(index + 1);\n\t};\n\n\tconst handleKeyDown = (\n\t\tindex: number,\n\t\te: React.KeyboardEvent<HTMLInputElement>\n\t) => {\n\t\tif (e.key === \"Enter\") {\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\t\tif (e.key === \"Backspace\") {\n\t\t\te.preventDefault();\n\t\t\tif (digits[index]) {\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\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\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\n\t\t\t.getData(\"text\")\n\t\t\t.replace(/\\D/g, \"\")\n\t\t\t.slice(0, safeMaxLength);\n\t\tif (!pasted) return;\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\t\tfocusInput(Math.min(pasted.length, safeMaxLength - 1));\n\t};\n\n\treturn (\n\t\t<div className=\"flex gap-2.5 justify-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) => {\n\t\t\t\t\t\tinputRefs.current[i] = el;\n\t\t\t\t\t}}\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\tclassName={cn(\n\t\t\t\t\t\t\"w-12 h-14 text-center text-xl font-semibold rounded-xl\",\n\t\t\t\t\t\t\"payman-otp-input otp-input\",\n\t\t\t\t\t\t\"transition-all duration-150 cursor-text\",\n\t\t\t\t\t\tdisabled && \"cursor-not-allowed\"\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 { Check, Loader2, RefreshCw, ShieldCheck, X } from \"lucide-react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { UserActionModalProps } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { OtpInput } from \"../OtpInput\";\nimport {\n\tACTION_PENDING_TIMEOUT_MS,\n\tBUTTON_LABELS,\n\tMODAL_CONTENT,\n\tRESEND_OTP_COOLDOWN_SECONDS,\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<\n\t\t\"approve\" | \"reject\" | \"resend\" | null\n\t>(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\n\tconst resetActionState = useCallback(() => {\n\t\tsetIsSubmitting(false);\n\t\tsetActionType(null);\n\t}, []);\n\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\tuseEffect(() => {\n\t\tif (resendCooldownRemaining <= 0) return;\n\t\tconst timer = setTimeout(\n\t\t\t() => setResendCooldownRemaining((p) => p - 1),\n\t\t\t1000\n\t\t);\n\t\treturn () => clearTimeout(timer);\n\t}, [resendCooldownRemaining]);\n\n\tuseEffect(() => {\n\t\tif (clearOtpTrigger > 0) {\n\t\t\tsetOtp(\"\");\n\t\t\tresetActionState();\n\t\t}\n\t}, [clearOtpTrigger, resetActionState]);\n\n\tuseEffect(() => {\n\t\tif (!isOpen || !isSubmitting) return;\n\t\tif (actionType !== \"approve\" && actionType !== \"reject\") return;\n\t\tconst timeout = setTimeout(resetActionState, ACTION_PENDING_TIMEOUT_MS);\n\t\treturn () => clearTimeout(timeout);\n\t}, [isOpen, isSubmitting, actionType, resetActionState]);\n\n\t// Focus trap\n\tuseEffect(() => {\n\t\tif (!isOpen) return;\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 getFocusable = () =>\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 = getFocusable();\n\t\t(focusables[0] ?? dialog).focus();\n\n\t\tconst handleKeyDown = (e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") {\n\t\t\t\te.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (e.key !== \"Tab\") return;\n\t\t\tconst items = getFocusable();\n\t\t\tif (!items.length) {\n\t\t\t\te.preventDefault();\n\t\t\t\tdialog.focus();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst first = items[0];\n\t\t\tconst last = items[items.length - 1];\n\t\t\tconst active = document.activeElement as HTMLElement | null;\n\t\t\tconst inDialog = active ? dialog.contains(active) : false;\n\t\t\tif (e.shiftKey) {\n\t\t\t\tif (!inDialog || active === first) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tlast.focus();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!inDialog || active === last) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tfirst.focus();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown);\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\t\tsetIsSubmitting(true);\n\t\tsetActionType(\"approve\");\n\t\ttry {\n\t\t\tawait onApprove(otp);\n\t\t} catch {\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} catch {\n\t\t\tresetActionState();\n\t\t}\n\t}, [onReject, resetActionState]);\n\n\tconst handleResend = useCallback(async () => {\n\t\tif (resendCooldownRemaining > 0) return;\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// 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<div\n\t\t\tclassName=\"payman-modal-backdrop\"\n\t\t\tstyle={{\n\t\t\t\tposition: \"fixed\",\n\t\t\t\tinset: 0,\n\t\t\t\tzIndex: 10000,\n\t\t\t\tdisplay: \"flex\",\n\t\t\t\talignItems: \"center\",\n\t\t\t\tjustifyContent: \"center\",\n\t\t\t\tpadding: 16,\n\t\t\t\tboxSizing: \"border-box\",\n\t\t\t}}\n\t\t>\n\t\t\t{/* Backdrop */}\n\t\t\t<div\n\t\t\t\tclassName=\"absolute inset-0 backdrop-blur-sm payman-modal-backdrop-overlay payman-modal-animate\"\n\t\t\t\taria-hidden\n\t\t\t\tstyle={{\n\t\t\t\t\tbackground:\n\t\t\t\t\t\t\"var(--payman-modal-backdrop-bg, rgba(0, 0, 0, 0.4))\",\n\t\t\t\t}}\n\t\t\t/>\n\n\t\t\t{/* Wrapper to constrain dialog width regardless of host CSS */}\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\tmaxWidth: 400,\n\t\t\t\t\tminWidth: 0,\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\taria-labelledby=\"payman-modal-title\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"relative w-full rounded-2xl p-6 shadow-2xl\",\n\t\t\t\t\t\t\"payman-modal-dialog payman-modal-animate\"\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\tmaxWidth: 400,\n\t\t\t\t\t\tboxSizing: \"border-box\",\n\t\t\t\t\t\tbackground:\n\t\t\t\t\t\t\t\"var(--payman-modal-dialog-bg, var(--payman-card, #ffffff))\",\n\t\t\t\t\t\tborder:\n\t\t\t\t\t\t\t\"1px solid var(--payman-modal-dialog-border, var(--payman-border, #e4e4e7))\",\n\t\t\t\t\t}}\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t>\n\t\t\t\t{/* Icon + Title */}\n\t\t\t\t<div className=\"text-center mb-5\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"inline-flex items-center justify-center w-12 h-12 rounded-2xl payman-modal-icon-wrap mb-3\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackground:\n\t\t\t\t\t\t\t\t\"var(--payman-modal-icon-bg, color-mix(in srgb, var(--payman-primary, #18181b) 10%, transparent))\",\n\t\t\t\t\t\t\tborder:\n\t\t\t\t\t\t\t\t\"1px solid var(--payman-modal-icon-border, color-mix(in srgb, var(--payman-primary, #18181b) 20%, transparent))\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ShieldCheck\n\t\t\t\t\t\t\tclassName=\"w-6 h-6 payman-modal-icon\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-icon-fg, var(--payman-primary, #18181b))\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<h2\n\t\t\t\t\t\tid=\"payman-modal-title\"\n\t\t\t\t\t\tclassName=\"text-lg font-semibold payman-modal-title tracking-tight\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\"var(--payman-modal-title-fg, var(--payman-foreground, #18181b))\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{MODAL_CONTENT.TITLE}\n\t\t\t\t\t</h2>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Description */}\n\t\t\t\t<p\n\t\t\t\t\tclassName=\"text-sm payman-modal-desc text-center mb-6 leading-relaxed px-0.5\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\"var(--payman-modal-desc-fg, var(--payman-muted-foreground, #71717a))\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{userActionRequest.message}\n\t\t\t\t</p>\n\n\t\t\t\t{/* OTP Input */}\n\t\t\t\t<div className=\"mb-6\">\n\t\t\t\t\t<OtpInput\n\t\t\t\t\t\tvalue={otp}\n\t\t\t\t\t\tonChange={setOtp}\n\t\t\t\t\t\tmaxLength={schema.maxLength}\n\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Buttons */}\n\t\t\t\t<div className=\"flex flex-col gap-3\">\n\t\t\t\t\t<div className=\"flex gap-2.5\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"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\"flex-1 flex items-center justify-center gap-2\",\n\t\t\t\t\t\t\t\t\"min-h-[48px] py-3 px-4 rounded-xl text-sm font-medium border-0 cursor-pointer\",\n\t\t\t\t\t\t\t\t\"payman-modal-btn-reject\",\n\t\t\t\t\t\t\t\t\"active:scale-[0.98] transition-all duration-150\",\n\t\t\t\t\t\t\t\t\"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\tbackground:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-btn-reject-bg, color-mix(in srgb, var(--payman-destructive, #ef4444) 10%, transparent))\",\n\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-btn-reject-fg, var(--payman-destructive, #ef4444))\",\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 shrink-0\" />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<X className=\"w-4 h-4 shrink-0\" strokeWidth={2.5} />\n\t\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? MODAL_CONTENT.LOADING_REJECT\n\t\t\t\t\t\t\t\t: 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\ttype=\"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\"flex-1 flex items-center justify-center gap-2\",\n\t\t\t\t\t\t\t\t\"min-h-[48px] py-3 px-4 rounded-xl text-sm font-medium border-0 cursor-pointer\",\n\t\t\t\t\t\t\t\t\"payman-modal-btn-approve\",\n\t\t\t\t\t\t\t\t\"active:scale-[0.98] transition-all duration-150\",\n\t\t\t\t\t\t\t\t\"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\tbackground:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-btn-approve-bg, var(--payman-primary, #18181b))\",\n\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-btn-approve-fg, var(--payman-primary-foreground, #fafafa))\",\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 shrink-0\" />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Check className=\"w-4 h-4 shrink-0\" strokeWidth={2.5} />\n\t\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? MODAL_CONTENT.LOADING_APPROVE\n\t\t\t\t\t\t\t\t: 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<button\n\t\t\t\t\t\ttype=\"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\"w-full flex items-center justify-center gap-2\",\n\t\t\t\t\t\t\t\"min-h-[48px] py-3 px-4 rounded-xl text-sm font-medium cursor-pointer\",\n\t\t\t\t\t\t\t\"payman-modal-btn-resend\",\n\t\t\t\t\t\t\t\"transition-all duration-150 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\tborder:\n\t\t\t\t\t\t\t\t\"1px solid var(--payman-modal-btn-resend-border, var(--payman-border, #e4e4e7))\",\n\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\"var(--payman-modal-btn-resend-fg, var(--payman-muted-foreground, #71717a))\",\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-4 h-4 animate-spin shrink-0\" />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<RefreshCw className=\"w-4 h-4 shrink-0\" strokeWidth={2.5} />\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? `${MODAL_CONTENT.RESEND_AVAILABLE_IN} ${resendCooldownRemaining}s`\n\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</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { useChat, useVoice } from \"@paymanai/payman-typescript-ask-sdk\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\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\tconst prevInputValueRef = useRef(inputValue);\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// Voice support\n\tconst {\n\t\tisAvailable: voiceAvailable,\n\t\tisRecording,\n\t\tstartRecording,\n\t\tstopRecording,\n\t\tclearTranscript,\n\t} = useVoice(\n\t\t{\n\t\t\tlang: config.voiceLang || \"en-US\",\n\t\t\tinterimResults: config.voiceInterimResults !== false,\n\t\t\tcontinuous: config.voiceContinuous !== false,\n\t\t},\n\t\t{\n\t\t\tonResult: (text) => {\n\t\t\t\t// Update input value with transcribed text in real-time\n\t\t\t\tsetInputValue(text);\n\t\t\t},\n\t\t\tonEnd: () => {\n\t\t\t\t// When recording ends, keep the text in input\n\t\t\t\t// User can edit or send\n\t\t\t},\n\t\t\tonError: (error) => {\n\t\t\t\tconsole.error(\"Voice error:\", error);\n\t\t\t},\n\t\t}\n\t);\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\t// Reset voice recognition only when user clears the input (not on initial empty state)\n\tuseEffect(() => {\n\t\tconst wasEmpty = prevInputValueRef.current.trim() === \"\";\n\t\tconst isEmpty = inputValue.trim() === \"\";\n\t\tprevInputValueRef.current = inputValue;\n\t\tif (!wasEmpty && isEmpty) {\n\t\t\tclearTranscript();\n\t\t\tif (isRecording) {\n\t\t\t\tstopRecording();\n\t\t\t}\n\t\t}\n\t}, [inputValue, clearTranscript, isRecording, stopRecording]);\n\n\tconst handleSend = () => {\n\t\tif (isRecording) {\n\t\t\tstopRecording();\n\t\t}\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 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 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 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\t<MessageList\n\t\t\t\t\tmessages={messages}\n\t\t\t\t\tisLoading={false}\n\t\t\t\t\temptyStateText={emptyStateText}\n\t\t\t\t\tshowEmptyStateIcon={showEmptyStateIcon}\n\t\t\t\t\tlayout={layout}\n\t\t\t\t\tshowTimestamps={showTimestamps}\n\t\t\t\t\tstage={config.stage || \"DEV\"}\n\t\t\t\t\tanimated={animated}\n\t\t\t\t\tshowAgentName={showAgentName}\n\t\t\t\t\tagentName={agentName}\n\t\t\t\t\tshowAvatars={showAvatars}\n\t\t\t\t\tshowUserAvatar={showUserAvatar}\n\t\t\t\t\tshowAssistantAvatar={showAssistantAvatar}\n\t\t\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\t\t\tcompletedStepsText={completedStepsText}\n\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t/>\n\n\t\t\t\t{/* Chat Input Area - Only show if user has ask permission */}\n\t\t\t\t{hasAskPermission && (\n\t\t\t\t\t<ChatInput\n\t\t\t\t\t\tvalue={inputValue}\n\t\t\t\t\t\tonChange={setInputValue}\n\t\t\t\t\t\tonSend={handleSend}\n\t\t\t\t\t\tonPause={cancelStream}\n\t\t\t\t\t\tdisabled={isInputDisabled}\n\t\t\t\t\t\tplaceholder={isRecording ? \"Listening...\" : placeholder}\n\t\t\t\t\t\tisWaitingForResponse={isWaitingForResponse}\n\t\t\t\t\t\thasSelectedSession={true}\n\t\t\t\t\t\tisSessionParamsConfigured={isSessionParamsConfigured}\n\t\t\t\t\t\tenableVoice={config.enableVoice === true}\n\t\t\t\t\t\tonVoicePress={isRecording ? stopRecording : startRecording}\n\t\t\t\t\t\tvoiceAvailable={config.enableVoice === true && voiceAvailable}\n\t\t\t\t\t\tisRecording={isRecording}\n\t\t\t\t\t\tinputStyle={inputStyle}\n\t\t\t\t\t\tlayout={layout}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t{/* User Action (OTP) Modal */}\n\t\t\t\t<UserActionModal\n\t\t\t\t\tisOpen={isUserActionSupported && userActionState.request !== null}\n\t\t\t\t\tuserActionRequest={userActionState.request}\n\t\t\t\t\tonApprove={approveUserAction}\n\t\t\t\t\tonReject={rejectUserAction}\n\t\t\t\t\tonResend={resendOtp}\n\t\t\t\t\tclearOtpTrigger={userActionState.clearOtpTrigger}\n\t\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/utils/errorMessages.ts","../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","Square","Mic","ArrowUp","useState","ChevronDown","AnimatePresence","useMemo","Loader2","Check","X","Clock","useCallback","ChevronRight","Sparkles","ReactMarkdown","remarkGfm","Binoculars","User","useLayoutEffect","MessageCircle","Fragment","ArrowDown","ShieldCheck","RefreshCw","useChat","useVoice"],"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 * Prepend older messages to the top of the list (e.g. from history pagination)\n\t */\n\tprependMessages: (messages: MessageDisplay[]) => 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\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\nexport function formatElapsedTime(ms?: number): string {\n\tif (!ms) return \"\";\n\tif (ms < 1000) return `${ms}ms`;\n\treturn `${(ms / 1000).toFixed(1)}s`;\n}\n","import { motion } from \"framer-motion\";\nimport { ArrowUp, Mic, Square } 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\tenableVoice = false,\n\tonVoicePress,\n\tvoiceAvailable = false,\n\tisRecording = false,\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 = 160;\n\t\t\ttextareaRef.current.style.height = `${Math.min(\n\t\t\t\tscrollHeight,\n\t\t\t\tmaxHeight\n\t\t\t)}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\tif (value.trim() && !isInputDisabled) onSend();\n\t\t}\n\t};\n\n\tconst isInputDisabled = disabled || isWaitingForResponse;\n\tconst showPauseButton = isWaitingForResponse && onPause;\n\tconst showVoiceButton = enableVoice && onVoicePress != null;\n\tconst isVoiceButtonDisabled =\n\t\tisWaitingForResponse || !voiceAvailable || !isSessionParamsConfigured;\n\tconst canSend = !isInputDisabled && !!value.trim();\n\n\tconst getPlaceholder = () => {\n\t\tif (!hasSelectedSession) return \"Select a version to start chatting\";\n\t\tif (!isSessionParamsConfigured) return \"Configure session params to begin\";\n\t\treturn placeholder;\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\"flex-shrink-0 w-full\", className)}\n\t\t\tstyle={{ flexShrink: 0 }}\n\t\t>\n\t\t\t<div className=\"px-3 pb-3 pt-1.5 w-full\">\n\t\t\t\t<div className=\"relative w-full max-w-2xl mx-auto\">\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tinitial={false}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex items-end overflow-hidden\",\n\t\t\t\t\t\t\t\"payman-chat-input\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\tref={textareaRef}\n\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\tonChange={(e) => onChange(e.target.value)}\n\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\tonClick={onClick}\n\t\t\t\t\t\t\tdisabled={isInputDisabled}\n\t\t\t\t\t\t\tplaceholder={getPlaceholder()}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"payman-chat-input-field\",\n\t\t\t\t\t\t\t\t\"focus:outline-none resize-none overflow-y-auto\",\n\t\t\t\t\t\t\t\t\"flex-1 min-w-0 py-3\"\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tminHeight: \"44px\",\n\t\t\t\t\t\t\t\tmaxHeight: \"160px\",\n\t\t\t\t\t\t\t\tpaddingLeft: \"18px\",\n\t\t\t\t\t\t\t\tpaddingRight: \"8px\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\trows={1}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{/* Action buttons - aligned with input */}\n\t\t\t\t\t\t<div className=\"flex items-center gap-1 shrink-0 p-2\">\n\t\t\t\t\t\t\t{/* Voice */}\n\t\t\t\t\t\t\t{showVoiceButton && (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tonClick={onVoicePress}\n\t\t\t\t\t\t\t\t\tdisabled={isVoiceButtonDisabled}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"relative flex items-center justify-center\",\n\t\t\t\t\t\t\t\t\t\t\"w-8 h-8 rounded-full transition-all duration-200\",\n\t\t\t\t\t\t\t\t\t\t\"payman-chat-input-btn-voice\",\n\t\t\t\t\t\t\t\t\t\tisRecording && \"recording\"\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\taria-label={isRecording ? \"Stop recording\" : \"Voice input\"}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{/* Recording ring pulse */}\n\t\t\t\t\t\t\t\t\t{isRecording && (\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"absolute inset-0 rounded-full border-2 animate-ping opacity-40\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\tborderColor: \"var(--payman-input-btn-voice-recording-ring)\",\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)}\n\t\t\t\t\t\t\t\t\t{isRecording ? (\n\t\t\t\t\t\t\t\t\t\t<Square\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-3 h-3 relative z-10\"\n\t\t\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\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\t\t<Mic className=\"w-4 h-4\" />\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{/* Send / Pause */}\n\t\t\t\t\t\t\t{showPauseButton ? (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tonClick={onPause}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"flex items-center justify-center\",\n\t\t\t\t\t\t\t\t\t\t\"w-8 h-8 rounded-full\",\n\t\t\t\t\t\t\t\t\t\t\"payman-chat-input-btn-pause\",\n\t\t\t\t\t\t\t\t\t\t\"hover:opacity-90 active:scale-95\",\n\t\t\t\t\t\t\t\t\t\t\"transition-all duration-150\"\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\taria-label=\"Stop response\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Square className=\"w-3.5 h-3.5\" fill=\"currentColor\" />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tonClick={onSend}\n\t\t\t\t\t\t\t\t\tdisabled={!canSend}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"flex items-center justify-center\",\n\t\t\t\t\t\t\t\t\t\t\"w-8 h-8 rounded-full\",\n\t\t\t\t\t\t\t\t\t\t\"payman-chat-input-btn-send\",\n\t\t\t\t\t\t\t\t\t\t\"hover:opacity-90 active:scale-95\",\n\t\t\t\t\t\t\t\t\t\t\"transition-all duration-150\"\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\taria-label=\"Send message\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ArrowUp className=\"w-4 h-4\" strokeWidth={2.5} />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</motion.div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","const WORKFLOW_FAILED = \"WORKFLOW_FAILED\";\nconst STREAM_NOT_STARTED = \"STREAM_NOT_STARTED\";\nconst HTTP_ERROR_PREFIX = /^HTTP\\s+(\\d+)\\s*:\\s*([\\s\\S]+)$/;\n\ntype ErrorPayload = {\n\tstatus?: number;\n\tmessage?: string;\n};\n\nexport function isFriendlyWorkflowError(errorDetails?: string): boolean {\n\tif (!errorDetails) return false;\n\n\treturn (\n\t\terrorDetails === WORKFLOW_FAILED ||\n\t\terrorDetails === STREAM_NOT_STARTED ||\n\t\terrorDetails.includes(WORKFLOW_FAILED)\n\t);\n}\n\nfunction parseErrorPayload(payload: string): ErrorPayload {\n\ttry {\n\t\tconst parsed = JSON.parse(payload) as unknown;\n\n\t\tif (typeof parsed === \"string\") {\n\t\t\treturn { message: parsed.trim() || undefined };\n\t\t}\n\n\t\tif (typeof parsed === \"object\" && parsed !== null) {\n\t\t\tconst record = parsed as Record<string, unknown>;\n\t\t\treturn {\n\t\t\t\tstatus:\n\t\t\t\t\ttypeof record.status === \"number\" ? record.status : undefined,\n\t\t\t\tmessage:\n\t\t\t\t\ttypeof record.message === \"string\" && record.message.trim()\n\t\t\t\t\t\t? record.message.trim()\n\t\t\t\t\t\t: undefined,\n\t\t\t};\n\t\t}\n\t} catch {\n\t\t// Ignore invalid JSON payloads and fall back to plain-text handling.\n\t}\n\n\treturn {};\n}\n\nexport function getConflictErrorMessage(errorDetails?: string): string | undefined {\n\tif (!errorDetails) return undefined;\n\n\tconst trimmedError = errorDetails.trim();\n\tconst httpMatch = trimmedError.match(HTTP_ERROR_PREFIX);\n\tconst httpStatus = httpMatch ? Number(httpMatch[1]) : undefined;\n\tconst rawPayload = (httpMatch ? httpMatch[2] : trimmedError).trim();\n\tconst payload = parseErrorPayload(rawPayload);\n\tconst status = payload.status ?? httpStatus;\n\n\tif (status !== 409) {\n\t\treturn undefined;\n\t}\n\n\tif (payload.message) {\n\t\treturn payload.message;\n\t}\n\n\treturn rawPayload || undefined;\n}\n","import { AnimatePresence, motion } from \"framer-motion\";\nimport {\n\tBinoculars,\n\tCheck,\n\tChevronDown,\n\tChevronRight,\n\tClock,\n\tLoader2,\n\tSparkles,\n\tX,\n} from \"lucide-react\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport type { AgentMessageProps, StreamingStep } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport {\n\tgetConflictErrorMessage,\n\tisFriendlyWorkflowError,\n} from \"../../utils/errorMessages\";\nimport { formatElapsedTime } from \"../../utils/formatDate\";\n\n/** Expandable block shown after streaming ends with all accumulated thinking. */\nfunction ThinkingBlock({ text }: { text: string }) {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst hasContent = typeof text === \"string\" && text.trim().length > 0;\n\n\tif (!hasContent) return null;\n\n\treturn (\n\t\t<div className=\"mt-1.5 mb-1.5\">\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => setIsOpen((prev) => !prev)}\n\t\t\t\tclassName=\"inline-flex items-center gap-1 text-[10px] payman-agent-thinking-toggle transition-colors\"\n\t\t\t\taria-expanded={isOpen}\n\t\t\t\taria-label={\n\t\t\t\t\tisOpen ? \"Collapse thought process\" : \"Expand thought process\"\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t<motion.div\n\t\t\t\t\tanimate={{ rotate: isOpen ? 180 : 0 }}\n\t\t\t\t\ttransition={{ duration: 0.15 }}\n\t\t\t\t\tclassName=\"shrink-0\"\n\t\t\t\t>\n\t\t\t\t\t<ChevronDown className=\"h-3 w-3\" />\n\t\t\t\t</motion.div>\n\t\t\t\t<span>Thought process</span>\n\t\t\t</button>\n\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t{isOpen && (\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tinitial={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\tanimate={{ height: \"auto\", opacity: 1 }}\n\t\t\t\t\t\texit={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\ttransition={{ duration: 0.2, ease: \"easeInOut\" }}\n\t\t\t\t\t\tclassName=\"overflow-hidden\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"mt-1 payman-agent-thinking-block rounded-md p-2 overflow-y-auto overflow-x-hidden\">\n\t\t\t\t\t\t\t<p className=\"m-0 text-xs payman-agent-thinking-block-text whitespace-pre-wrap leading-relaxed\">\n\t\t\t\t\t\t\t\t{text}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</motion.div>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t</div>\n\t);\n}\nconst FRIENDLY_ERROR_MESSAGE = \"Oops, something went wrong. Please try again.\";\n\n/** Content that looks like a raw error (INTENT_ERROR message) rather than a user-facing workflow response */\nfunction looksLikeRawError(text: string): boolean {\n\tif (!text || text.length < 10) return false;\n\treturn text.includes(\"errorType=\") || /failed:\\s*\\{/.test(text);\n}\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 =\n\t\t!!(message.tracingData || message.executionId) && !isStreaming;\n\tconst isCancelled = message.isCancelled ?? false;\n\tconst currentExecutingStepId = message.currentExecutingStepId;\n\n\tconst [isStepsExpanded, setIsStepsExpanded] = useState(false);\n\tconst wasStreamingRef = useRef(isStreaming);\n\n\tuseEffect(() => {\n\t\tif (isStreaming && hasSteps) {\n\t\t\tsetIsStepsExpanded(true);\n\t\t}\n\t\tif (wasStreamingRef.current && !isStreaming) {\n\t\t\tsetIsStepsExpanded(false);\n\t\t}\n\t\twasStreamingRef.current = isStreaming;\n\t}, [isStreaming, hasSteps]);\n\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\tconst rawContent = message.streamingContent || message.content || \"\";\n\tconst content = rawContent.replace(/\\\\n/g, \"\\n\");\n\t// When workflow completes with a response (e.g. after INTENT_ERROR), prefer that over error UI. Only show friendly error when there's no meaningful response or when content is raw error dump.\n\tconst hasMeaningfulContent =\n\t\tcontent.length > 0 && !looksLikeRawError(content);\n\t// Also show friendly error when workflow completed with no content (e.g. preflight failed, no workflowMsg)\n\tconst completedWithNoContent =\n\t\t!isStreaming &&\n\t\t!isCancelled &&\n\t\tcontent.length === 0 &&\n\t\t(message.streamProgress === \"completed\" || message.streamProgress === \"error\");\n\tconst conflictErrorMessage = getConflictErrorMessage(message.errorDetails);\n\tconst isError =\n\t\t!!conflictErrorMessage ||\n\t\t((isFriendlyWorkflowError(message.errorDetails) ||\n\t\t\tlooksLikeRawError(content)) &&\n\t\t\t!hasMeaningfulContent) ||\n\t\tcompletedWithNoContent;\n\tconst activeThinkingText = message.activeThinkingText;\n\tconst allThinkingText = message.allThinkingText;\n\tconst currentStep = useMemo(\n\t\t() =>\n\t\t\tmessage.steps?.find(\n\t\t\t\t(s) => s.id === currentExecutingStepId && s.status === \"in_progress\"\n\t\t\t),\n\t\t[message.steps, currentExecutingStepId]\n\t);\n\n\tconst getStepsLabel = (streaming: boolean) => {\n\t\tconst count = message.steps!.length;\n\t\tconst stepWord = count === 1 ? \"step\" : \"steps\";\n\t\tif (streaming) {\n\t\t\tif (streamingStepsText)\n\t\t\t\treturn streamingStepsText.replace(\"{count}\", count.toString());\n\t\t\treturn `${count} ${stepWord} in progress`;\n\t\t}\n\t\tif (completedStepsText) {\n\t\t\treturn completedStepsText\n\t\t\t\t.replace(\"{count}\", count.toString())\n\t\t\t\t.replace(\"{time}\", (totalElapsedMs / 1000).toFixed(1));\n\t\t}\n\t\treturn `${count} ${stepWord} completed`;\n\t};\n\n\t// All icons in a fixed 4x4 wrapper for alignment\n\tconst renderStepIcon = (\n\t\tstep: StreamingStep,\n\t\tisCurrentlyExecuting: boolean\n\t) => {\n\t\tconst wrapper = \"h-4 w-4 flex items-center justify-center shrink-0\";\n\t\tif (isCurrentlyExecuting)\n\t\t\treturn (\n\t\t\t\t<div className={wrapper}>\n\t\t\t\t\t<Loader2 className=\"h-3.5 w-3.5 payman-agent-step-icon--active animate-spin\" />\n\t\t\t\t</div>\n\t\t\t);\n\t\tif (step.status === \"pending\" && isCancelled)\n\t\t\treturn (\n\t\t\t\t<div className={wrapper}>\n\t\t\t\t\t<div className=\"h-1.5 w-1.5 rounded-full payman-agent-step-icon--pending\" />\n\t\t\t\t</div>\n\t\t\t);\n\t\tif (step.status === \"pending\" || step.status === \"in_progress\")\n\t\t\treturn (\n\t\t\t\t<div className={wrapper}>\n\t\t\t\t\t<Loader2 className=\"h-3.5 w-3.5 payman-agent-step-icon--in-progress-dim animate-spin\" />\n\t\t\t\t</div>\n\t\t\t);\n\t\tif (step.status === \"completed\")\n\t\t\treturn (\n\t\t\t\t<div className={wrapper}>\n\t\t\t\t\t<Check\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"h-3.5 w-3.5\",\n\t\t\t\t\t\t\tstep.eventType === \"USER_ACTION_SUCCESS\"\n\t\t\t\t\t\t\t\t? \"payman-agent-step-icon--success\"\n\t\t\t\t\t\t\t\t: \"payman-agent-step-icon--success-dim\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t);\n\t\tif (step.status === \"error\")\n\t\t\treturn (\n\t\t\t\t<div className={wrapper}>\n\t\t\t\t\t<X className=\"h-3.5 w-3.5 payman-agent-step-icon--error\" />\n\t\t\t\t</div>\n\t\t\t);\n\t\treturn (\n\t\t\t<div className={wrapper}>\n\t\t\t\t<div className=\"h-1.5 w-1.5 rounded-full payman-agent-step-icon--pending-dim\" />\n\t\t\t</div>\n\t\t);\n\t};\n\n\tconst stepsListContent = hasSteps && (\n\t\t<AnimatePresence initial={false}>\n\t\t\t{isStepsExpanded && (\n\t\t\t\t<motion.div\n\t\t\t\t\tinitial={{ height: 0, opacity: 0 }}\n\t\t\t\t\tanimate={{ height: \"auto\", opacity: 1 }}\n\t\t\t\t\texit={{ height: 0, opacity: 0 }}\n\t\t\t\t\ttransition={{ duration: 0.2, ease: \"easeInOut\" }}\n\t\t\t\t\tclassName=\"overflow-hidden\"\n\t\t\t\t>\n\t\t\t\t\t{!isStreaming && allThinkingText?.trim() && (\n\t\t\t\t\t\t<ThinkingBlock text={allThinkingText} />\n\t\t\t\t\t)}\n\t\t\t\t\t<div className=\"pt-1.5\">\n\t\t\t\t\t\t{message.steps!.map((step) => {\n\t\t\t\t\t\t\tconst isCurrentlyExecuting =\n\t\t\t\t\t\t\t\tstep.id === currentExecutingStepId &&\n\t\t\t\t\t\t\t\tstep.status === \"in_progress\" &&\n\t\t\t\t\t\t\t\tisStreaming &&\n\t\t\t\t\t\t\t\t!isCancelled;\n\t\t\t\t\t\t\tconst hasTime = step.elapsedMs != null && step.elapsedMs > 0;\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<div key={step.id} className=\"mb-1.5\">\n\t\t\t\t\t\t\t\t\t{/* Step row: icon + message */}\n\t\t\t\t\t\t\t\t\t<div className=\"flex gap-1.5 items-start\">\n\t\t\t\t\t\t\t\t\t\t<div className=\"mt-px\">\n\t\t\t\t\t\t\t\t\t\t\t{renderStepIcon(step, isCurrentlyExecuting)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<span\n\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\"text-xs leading-relaxed min-w-0 break-words\",\n\t\t\t\t\t\t\t\t\t\t\t\tisCurrentlyExecuting && \"shimmer-text font-medium\",\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\tstep.status === \"error\" &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"payman-agent-step-text--error\",\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\tstep.eventType === \"USER_ACTION_SUCCESS\" &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"payman-agent-step-text--success\",\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\tstep.status === \"completed\" &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"payman-agent-step-text--completed\",\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\tstep.status === \"pending\" &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"payman-agent-step-text--pending\",\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\tstep.status === \"in_progress\" &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"payman-agent-step-text--in-progress\"\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{step.message}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t{/* Time badge — indented to align with step text (16px icon + 6px gap = 22px) */}\n\t\t\t\t\t\t\t\t\t{hasTime && (\n\t\t\t\t\t\t\t\t\t\t<div className=\"pl-[22px] mt-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1 px-1.5 py-0.5 rounded-md payman-agent-step-time leading-none\">\n\t\t\t\t\t\t\t\t\t\t\t\t<Clock className=\"h-2.5 w-2.5 shrink-0 payman-agent-step-time-icon\" />\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-[10px] font-mono payman-agent-step-time-text\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{formatElapsedTime(step.elapsedMs!)}\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</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</div>\n\t\t\t\t</motion.div>\n\t\t\t)}\n\t\t</AnimatePresence>\n\t);\n\n\tconst stepsToggleRef = useRef<HTMLButtonElement>(null);\n\n\tconst handleStepsToggle = useCallback(() => {\n\t\tsetIsStepsExpanded((prev) => {\n\t\t\tconst next = !prev;\n\t\t\t// Dispatch event so MessageList can scroll to show expanded steps\n\t\t\tif (next) {\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tstepsToggleRef.current\n\t\t\t\t\t\t?.closest(\".payman-scrollbar\")\n\t\t\t\t\t\t?.dispatchEvent(new CustomEvent(\"payman-steps-toggle\"));\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn next;\n\t\t});\n\t}, []);\n\n\tconst stepsToggle = (streaming: boolean) => (\n\t\t<button\n\t\t\tref={stepsToggleRef}\n\t\t\tonClick={handleStepsToggle}\n\t\t\tclassName=\"inline-flex items-center gap-1.5 text-xs payman-agent-step-toggle transition-colors\"\n\t\t>\n\t\t\t<motion.div\n\t\t\t\tanimate={{ rotate: isStepsExpanded ? 90 : 0 }}\n\t\t\t\ttransition={{ duration: 0.15 }}\n\t\t\t\tclassName=\"shrink-0\"\n\t\t\t>\n\t\t\t\t<ChevronRight className=\"h-3 w-3\" />\n\t\t\t</motion.div>\n\t\t\t<span>{getStepsLabel(streaming)}</span>\n\t\t</button>\n\t);\n\n\t// Below-bubble steps section: only after streaming (thinking lives in bubble during stream)\n\tconst showSteps = showExecutionSteps && hasSteps && !isStreaming && !isError;\n\n\tconst messageContent = (\n\t\t<div className=\"w-full\">\n\t\t\t{/* Row: avatar + bubble + trace */}\n\t\t\t<div className=\"flex gap-3 justify-start items-start w-full\">\n\t\t\t\t{/* Avatar */}\n\t\t\t\t{showAvatar && (\n\t\t\t\t\t<div className=\"shrink-0 mt-0.5\">\n\t\t\t\t\t\t{isStreaming && showStreamingDot ? (\n\t\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\t<div className=\"relative\">\n\t\t\t\t\t\t\t\t\t<div className=\"h-2.5 w-2.5 rounded-full payman-agent-avatar-dot animate-pulse\" />\n\t\t\t\t\t\t\t\t\t<div className=\"absolute inset-0 h-2.5 w-2.5 rounded-full payman-agent-avatar-dot-ping animate-ping\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div className=\"h-8 w-8 rounded-full payman-agent-avatar flex items-center justify-center\">\n\t\t\t\t\t\t\t\t<Sparkles className=\"h-3.5 w-3.5 payman-agent-avatar-icon\" />\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)}\n\n\t\t\t\t{/* Bubble — constrained width */}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"min-w-0\",\n\t\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t\t? \"max-w-[85%]\"\n\t\t\t\t\t\t\t: showAvatar\n\t\t\t\t\t\t\t? \"max-w-[85%]\"\n\t\t\t\t\t\t\t: \"max-w-[80%]\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{/* User Action Result Badge */}\n\t\t\t\t\t{message.userActionResult && (\n\t\t\t\t\t\t<div className=\"mb-2\">\n\t\t\t\t\t\t\t{message.userActionResult === \"approved\" ? (\n\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1.5 px-4 py-1.5 text-xs font-semibold rounded-full payman-agent-approved shrink-0\">\n\t\t\t\t\t\t\t\t\t<Check className=\"w-3.5 h-3.5 shrink-0\" strokeWidth={2.5} />\n\t\t\t\t\t\t\t\t\tVerified\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\t\t<span className=\"inline-flex items-center gap-1.5 px-4 py-1.5 text-xs font-semibold rounded-full payman-agent-rejected shrink-0\">\n\t\t\t\t\t\t\t\t\t<X className=\"w-3.5 h-3.5 shrink-0\" strokeWidth={2.5} />\n\t\t\t\t\t\t\t\t\tRejected\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</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"overflow-hidden w-full min-w-0 px-4 py-3 rounded-2xl rounded-tl-md transition-all duration-200\",\n\t\t\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t\t\t? cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-agent-bubble payman-agent-bubble--centered\",\n\t\t\t\t\t\t\t\t\t\tisStreaming && \"streaming\",\n\t\t\t\t\t\t\t\t\t\tisError && \"error\"\n\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t\t: cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-agent-bubble\",\n\t\t\t\t\t\t\t\t\t\tisError && \"payman-agent-bubble--error\"\n\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{showAgentName && (\n\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"text-sm font-semibold mb-1 leading-none payman-agent-name\",\n\t\t\t\t\t\t\t\t\tisStreaming && !content && \"animate-pulse\"\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{isStreaming && !content ? \"Thought Process\" : agentName}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"text-sm leading-relaxed min-w-0 w-full break-words overflow-wrap-anywhere\",\n\t\t\t\t\t\t\t\tshowAgentName && \"mt-1\"\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{isStreaming && !content ? (\n\t\t\t\t\t\t\t\t// Streaming without content — show thinking/step indicator\n\t\t\t\t\t\t\t\tactiveThinkingText ? (\n\t\t\t\t\t\t\t\t\t<div className=\"flex gap-2 items-start\">\n\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-4 w-4 mt-0.5 payman-agent-thinking-spinner animate-spin shrink-0\" />\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-sm leading-relaxed min-w-0 break-words payman-agent-thinking-text whitespace-pre-wrap flex-1\">\n\t\t\t\t\t\t\t\t\t\t\t{activeThinkingText}\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"inline-block w-0.5 h-3.5 payman-agent-thinking-cursor animate-pulse ml-0.5 align-text-bottom\" />\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t) : currentStep ? (\n\t\t\t\t\t\t\t\t\t<div className=\"flex gap-1.5 items-start\">\n\t\t\t\t\t\t\t\t\t\t<div className=\"mt-0.5 shrink-0\">\n\t\t\t\t\t\t\t\t\t\t\t{renderStepIcon(currentStep, true)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-sm leading-relaxed min-w-0 break-words shimmer-text font-medium flex-1\">\n\t\t\t\t\t\t\t\t\t\t\t{currentStep.message}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<div className=\"flex gap-2.5 items-start\">\n\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"w-4 h-4 mt-0.5 payman-agent-thinking-spinner animate-spin shrink-0\" />\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-sm payman-agent-thinking-text flex-1\">\n\t\t\t\t\t\t\t\t\t\t\t{currentMessage || \"Thinking...\"}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) : isCancelled && !content ? (\n\t\t\t\t\t\t\t\t<div className=\"flex gap-2.5 items-start\">\n\t\t\t\t\t\t\t\t\t<X className=\"w-4 h-4 mt-0.5 payman-agent-cancelled-icon shrink-0\" />\n\t\t\t\t\t\t\t\t\t<span className=\"text-sm payman-agent-cancelled-text italic flex-1\">\n\t\t\t\t\t\t\t\t\t\t{currentMessage || \"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<div\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-markdown payman-agent-markdown prose prose-sm dark:prose-invert max-w-none min-w-0 w-full break-words overflow-wrap-anywhere\",\n\t\t\t\t\t\t\t\t\t\tisError && \"payman-agent-markdown--error\",\n\t\t\t\t\t\t\t\t\t\tisStreaming && content && \"streaming-cursor\"\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<ReactMarkdown\n\t\t\t\t\t\t\t\t\t\tremarkPlugins={[remarkGfm]}\n\t\t\t\t\t\t\t\t\t\tcomponents={markdownComponents(isError)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{isError\n\t\t\t\t\t\t\t\t\t\t\t? conflictErrorMessage ?? FRIENDLY_ERROR_MESSAGE\n\t\t\t\t\t\t\t\t\t\t\t: content ||\n\t\t\t\t\t\t\t\t\t\t\t (isStreaming\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"Thinking...\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isCancelled\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"Request was stopped.\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"\")}\n\t\t\t\t\t\t\t\t\t</ReactMarkdown>\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</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Trace Button */}\n\t\t\t\t{hasTraceData && onExecutionTraceClick && (\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\tonExecutionTraceClick({\n\t\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\t\ttracingData: message.tracingData,\n\t\t\t\t\t\t\t\texecutionId: message.executionId,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"p-2 rounded-lg shrink-0 payman-agent-trace\",\n\t\t\t\t\t\t\t\"active:scale-95 transition-all duration-150\",\n\t\t\t\t\t\t\tmessage.userActionResult ? \"mt-8\" : \"mt-0.5\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t\ttitle=\"View execution trace\"\n\t\t\t\t\t\taria-label=\"View execution trace\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Binoculars className=\"w-4 h-4 payman-agent-trace-icon\" />\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* Steps — outside the flex row (only when not streaming) */}\n\t\t\t{showSteps && (\n\t\t\t\t<div className={cn(\"mt-1.5\", showAvatar ? \"ml-11\" : \"ml-0\")}>\n\t\t\t\t\t{showExecutionSteps &&\n\t\t\t\t\t\thasSteps &&\n\t\t\t\t\t\t!isStreaming &&\n\t\t\t\t\t\t!isError &&\n\t\t\t\t\t\tstepsToggle(false)}\n\t\t\t\t\t{stepsListContent}\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: 8, scale: 0.98 }}\n\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\ttransition={{ duration: 0.25, ease: [0.25, 0.46, 0.45, 0.94] }}\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\n/* ---- Markdown components — colors inherited from payman-agent-markdown CSS ---- */\nfunction markdownComponents(_isError: boolean) {\n\treturn {\n\t\tp: ({ children }: any) => (\n\t\t\t<p className=\"mb-3 last:mb-0 text-sm leading-relaxed\">{children}</p>\n\t\t),\n\t\tcode: ({ className: codeClassName, children }: any) => {\n\t\t\tconst isInline = !codeClassName;\n\t\t\treturn isInline ? (\n\t\t\t\t<code className=\"px-1.5 py-0.5 rounded-md text-xs font-mono break-all payman-agent-code-inline\">\n\t\t\t\t\t{children}\n\t\t\t\t</code>\n\t\t\t) : (\n\t\t\t\t<code className=\"block p-3 rounded-lg text-xs font-mono overflow-x-auto my-2 whitespace-pre payman-agent-code-block\">\n\t\t\t\t\t{children}\n\t\t\t\t</code>\n\t\t\t);\n\t\t},\n\t\tpre: ({ children }: any) => (\n\t\t\t<pre className=\"my-2 overflow-x-auto max-w-full rounded-lg\">\n\t\t\t\t{children}\n\t\t\t</pre>\n\t\t),\n\t\tul: ({ children }: any) => (\n\t\t\t<ul className=\"list-disc ml-4 mb-3 space-y-1 text-sm\">{children}</ul>\n\t\t),\n\t\tol: ({ children }: any) => (\n\t\t\t<ol className=\"list-decimal ml-4 mb-3 space-y-1 text-sm\">{children}</ol>\n\t\t),\n\t\tli: ({ children }: any) => (\n\t\t\t<li className=\"text-sm leading-relaxed\">{children}</li>\n\t\t),\n\t\th1: ({ children }: any) => (\n\t\t\t<h1 className=\"text-lg font-semibold mb-2 mt-4 first:mt-0\">{children}</h1>\n\t\t),\n\t\th2: ({ children }: any) => (\n\t\t\t<h2 className=\"text-base font-semibold mb-2 mt-3 first:mt-0\">\n\t\t\t\t{children}\n\t\t\t</h2>\n\t\t),\n\t\th3: ({ children }: any) => (\n\t\t\t<h3 className=\"text-sm font-semibold mb-1 mt-2 first:mt-0\">{children}</h3>\n\t\t),\n\t\tstrong: ({ children }: any) => (\n\t\t\t<strong className=\"font-semibold\">{children}</strong>\n\t\t),\n\t\tem: ({ children }: any) => <em className=\"italic\">{children}</em>,\n\t\tblockquote: ({ children }: any) => (\n\t\t\t<blockquote className=\"pl-4 my-2 italic payman-agent-blockquote\">\n\t\t\t\t{children}\n\t\t\t</blockquote>\n\t\t),\n\t\thr: () => <hr className=\"my-4 payman-agent-hr\" />,\n\t\ta: ({ href, children }: any) => (\n\t\t\t<a\n\t\t\t\thref={href}\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\tclassName=\"underline underline-offset-2 decoration-1 payman-agent-link\"\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</a>\n\t\t),\n\t\ttable: ({ children }: any) => (\n\t\t\t<div className=\"relative w-full overflow-x-auto my-4 -mx-1\">\n\t\t\t\t<table className=\"min-w-full caption-bottom text-sm rounded-lg overflow-hidden payman-agent-table\">\n\t\t\t\t\t{children}\n\t\t\t\t</table>\n\t\t\t</div>\n\t\t),\n\t\tthead: ({ children }: any) => (\n\t\t\t<thead className=\"[&_tr]:border-b payman-agent-thead\">{children}</thead>\n\t\t),\n\t\ttbody: ({ children }: any) => (\n\t\t\t<tbody className=\"[&_tr:last-child]:border-0\">{children}</tbody>\n\t\t),\n\t\ttr: ({ children }: any) => (\n\t\t\t<tr className=\"border-b transition-colors payman-agent-tr\">{children}</tr>\n\t\t),\n\t\tth: ({ children }: any) => (\n\t\t\t<th className=\"h-10 px-3 text-left align-middle font-medium whitespace-nowrap text-xs\">\n\t\t\t\t{children}\n\t\t\t</th>\n\t\t),\n\t\ttd: ({ children }: any) => (\n\t\t\t<td className=\"p-3 align-middle text-sm\">{children}</td>\n\t\t),\n\t};\n}\n","import { motion } from \"framer-motion\";\nimport { User } from \"lucide-react\";\nimport type { UserMessageProps } from \"../../types\";\nimport { cn, formatDate } from \"../../utils\";\n\nexport function UserMessage({\n\tmessage,\n\tanimated = false,\n\tshowAvatar = false,\n}: UserMessageProps) {\n\tconst content = (\n\t\t<div className=\"flex gap-3 justify-end w-full\">\n\t\t\t{/* Message Container */}\n\t\t\t<div className=\"max-w-[80%] min-w-0 flex flex-col items-end\">\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"rounded-2xl rounded-br-md px-4 py-3\",\n\t\t\t\t\t\t\"bg-primary text-primary-foreground\",\n\t\t\t\t\t\t\"shadow-sm\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<p className=\"text-sm leading-relaxed 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<span className=\"text-[10px] mt-1.5 mr-1 text-muted-foreground/70 select-none\">\n\t\t\t\t\t{formatDate(message.timestamp)}\n\t\t\t\t</span>\n\t\t\t</div>\n\n\t\t\t{/* Avatar */}\n\t\t\t{showAvatar && (\n\t\t\t\t<div className=\"shrink-0 mt-0.5\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"h-8 w-8 rounded-full\",\n\t\t\t\t\t\t\t\"bg-primary/10 border border-primary/20\",\n\t\t\t\t\t\t\t\"flex items-center justify-center\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<User className=\"h-3.5 w-3.5 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: 8, scale: 0.98 }}\n\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\ttransition={{ duration: 0.25, ease: [0.25, 0.46, 0.45, 0.94] }}\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}","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 = \"Assistant\",\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\tconst actualShowUserAvatar =\n\t\tshowUserAvatar !== undefined ? showUserAvatar : showAvatars;\n\tconst actualShowAssistantAvatar =\n\t\tshowAssistantAvatar !== undefined ? showAssistantAvatar : showAvatars;\n\n\tif (message.role === \"user\") {\n\t\treturn (\n\t\t\t<UserMessage\n\t\t\t\tmessage={message}\n\t\t\t\tanimated={animated}\n\t\t\t\tshowAvatar={actualShowUserAvatar}\n\t\t\t/>\n\t\t);\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","import { cn } from \"../../utils\";\n\ninterface MessageRowSkeletonProps {\n\tisRightAligned?: boolean;\n}\n\nexport function MessageRowSkeleton({\n\tisRightAligned = false,\n}: MessageRowSkeletonProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"flex w-full\",\n\t\t\t\tisRightAligned ? \"justify-end\" : \"justify-start\"\n\t\t\t)}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex flex-col gap-2 w-full\",\n\t\t\t\t\tisRightAligned ? \"items-end max-w-[70%]\" : \"items-start max-w-[80%]\"\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"rounded-2xl p-4 w-full\",\n\t\t\t\t\t\tisRightAligned\n\t\t\t\t\t\t\t? \"bg-primary/8 rounded-br-md\"\n\t\t\t\t\t\t\t: \"bg-muted/70 rounded-bl-md\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"space-y-2.5\">\n\t\t\t\t\t\t<div className=\"h-3 skeleton-pulse rounded-full bg-muted-foreground/10 w-[85%]\" />\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName=\"h-3 skeleton-pulse rounded-full bg-muted-foreground/10 w-full\"\n\t\t\t\t\t\t\tstyle={{ animationDelay: \"0.1s\" }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{!isRightAligned && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName=\"h-3 skeleton-pulse rounded-full bg-muted-foreground/10 w-[60%]\"\n\t\t\t\t\t\t\t\tstyle={{ animationDelay: \"0.2s\" }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"h-2 skeleton-pulse rounded-full bg-muted-foreground/8 w-12 mx-1\"\n\t\t\t\t\tstyle={{ animationDelay: \"0.3s\" }}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { motion } from \"framer-motion\";\nimport { ArrowDown, MessageCircle } from \"lucide-react\";\nimport { useCallback, useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport type { MessageListProps } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { MessageRow } from \"../MessageRow\";\nimport { MessageRowSkeleton } from \"../MessageRowSkeleton\";\n\nconst SCROLL_THRESHOLD = 150;\nconst LOAD_MORE_THRESHOLD = 80;\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 = \"Assistant\",\n\tshowAvatars = false,\n\tshowUserAvatar,\n\tshowAssistantAvatar,\n\tshowExecutionSteps = false,\n\tshowStreamingDot = false,\n\tstreamingStepsText,\n\tcompletedStepsText,\n\tonExecutionTraceClick,\n\tclassName,\n\tonLoadMoreMessages,\n\tisLoadingMoreMessages = false,\n\thasMoreMessages = false,\n}: MessageListProps) {\n\tconst scrollRef = useRef<HTMLDivElement>(null);\n\tconst isNearBottomRef = useRef(true);\n\tconst [showScrollBtn, setShowScrollBtn] = useState(false);\n\tconst prevMessageCountRef = useRef(messages.length);\n\n\t// Track scroll height before prepend so we can restore position\n\tconst scrollHeightBeforePrependRef = useRef<number | null>(null);\n\tconst firstMessageIdRef = useRef<string | undefined>(messages[0]?.id);\n\n\tconst getDistanceFromBottom = useCallback(() => {\n\t\tconst el = scrollRef.current;\n\t\tif (!el) return 0;\n\t\treturn el.scrollHeight - el.scrollTop - el.clientHeight;\n\t}, []);\n\n\tconst scrollToBottom = useCallback((behavior: ScrollBehavior = \"smooth\") => {\n\t\tconst el = scrollRef.current;\n\t\tif (!el) return;\n\t\tel.scrollTo({ top: el.scrollHeight, behavior });\n\t}, []);\n\n\tconst handleScroll = useCallback(() => {\n\t\tconst el = scrollRef.current;\n\t\tif (!el) return;\n\n\t\tconst distance = getDistanceFromBottom();\n\t\tconst nearBottom = distance <= SCROLL_THRESHOLD;\n\t\tisNearBottomRef.current = nearBottom;\n\t\tsetShowScrollBtn(!nearBottom);\n\n\t\t// Trigger load-more when scrolled near the top\n\t\tif (\n\t\t\tel.scrollTop <= LOAD_MORE_THRESHOLD &&\n\t\t\thasMoreMessages &&\n\t\t\t!isLoadingMoreMessages &&\n\t\t\tonLoadMoreMessages\n\t\t) {\n\t\t\t// Snapshot scroll height before the state update so we can restore position\n\t\t\tscrollHeightBeforePrependRef.current = el.scrollHeight;\n\t\t\tonLoadMoreMessages();\n\t\t}\n\t}, [getDistanceFromBottom, hasMoreMessages, isLoadingMoreMessages, onLoadMoreMessages]);\n\n\t// After messages are prepended, restore scroll position so the view doesn't jump\n\tuseLayoutEffect(() => {\n\t\tconst el = scrollRef.current;\n\t\tconst prevHeight = scrollHeightBeforePrependRef.current;\n\t\tconst newFirstId = messages[0]?.id;\n\n\t\tif (el && prevHeight !== null && newFirstId !== firstMessageIdRef.current) {\n\t\t\tel.scrollTop = el.scrollHeight - prevHeight;\n\t\t\tscrollHeightBeforePrependRef.current = null;\n\t\t}\n\t\tfirstMessageIdRef.current = newFirstId;\n\t}, [messages]);\n\n\t// Auto-scroll when new messages arrive\n\tuseEffect(() => {\n\t\tconst prevCount = prevMessageCountRef.current;\n\t\tprevMessageCountRef.current = messages.length;\n\n\t\tif (messages.length > prevCount && isNearBottomRef.current) {\n\t\t\trequestAnimationFrame(() => scrollToBottom());\n\t\t}\n\t}, [messages.length, scrollToBottom]);\n\n\t// Auto-scroll during streaming\n\tuseEffect(() => {\n\t\tconst lastMsg = messages[messages.length - 1];\n\t\tif (!lastMsg?.isStreaming) return;\n\t\tif (!isNearBottomRef.current) return;\n\n\t\trequestAnimationFrame(() => scrollToBottom());\n\t});\n\n\t// Instant scroll on mount\n\tuseEffect(() => {\n\t\tif (messages.length > 0) {\n\t\t\tsetTimeout(() => scrollToBottom(\"instant\"), 50);\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, []);\n\n\t// Listen for steps toggle events from AgentMessage\n\t// When steps expand, scroll down a bit so they're visible\n\tuseEffect(() => {\n\t\tconst handleStepsToggle = () => {\n\t\t\t// After steps expand/collapse, if we're near the bottom, scroll to show them\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tconst distance = getDistanceFromBottom();\n\t\t\t\t\tif (distance > 0 && distance < 600) {\n\t\t\t\t\t\tscrollToBottom();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tconst el = scrollRef.current;\n\t\tif (el) {\n\t\t\tel.addEventListener(\"payman-steps-toggle\", handleStepsToggle);\n\t\t\treturn () =>\n\t\t\t\tel.removeEventListener(\"payman-steps-toggle\", handleStepsToggle);\n\t\t}\n\t}, [getDistanceFromBottom, scrollToBottom]);\n\n\tconst handleScrollToBottom = useCallback(() => {\n\t\tscrollToBottom();\n\t}, [scrollToBottom]);\n\n\t/* Loading */\n\tif (isLoading) {\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 payman-scrollbar\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"space-y-5\",\n\t\t\t\t\t\tlayout === \"centered\" ? \"max-w-2xl mx-auto px-4 py-6\" : \"p-4\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{Array.from({ length: 5 }).map((_, i) => (\n\t\t\t\t\t\t<MessageRowSkeleton\n\t\t\t\t\t\t\tkey={`skel-${i}`}\n\t\t\t\t\t\t\tisRightAligned={i % 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\t/* Empty state */\n\tif (messages.length === 0) {\n\t\tconst lines = emptyStateText.split(\"\\n\").map((l) => l.trim()).filter(Boolean);\n\t\treturn (\n\t\t\t<div className={cn(\"payman-empty-root p-8\", className)}>\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={{ duration: 0.5, ease: [0.25, 0.46, 0.45, 0.94] }}\n\t\t\t\t\tclassName=\"payman-empty-content\"\n\t\t\t\t>\n\t\t\t\t\t{showEmptyStateIcon && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tinitial={{ scale: 0.85, opacity: 0 }}\n\t\t\t\t\t\t\tanimate={{ scale: 1, opacity: 1 }}\n\t\t\t\t\t\t\ttransition={{ delay: 0.08, duration: 0.45, ease: [0.25, 0.46, 0.45, 0.94] }}\n\t\t\t\t\t\t\tclassName=\"payman-empty-icon-wrap\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<MessageCircle className=\"h-7 w-7 payman-empty-icon\" strokeWidth={1.5} />\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t\t<div className=\"flex flex-col gap-1.5\">\n\t\t\t\t\t\t{lines.map((line, i) => (\n\t\t\t\t\t\t\t<motion.p\n\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 6 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\t\ttransition={{ delay: 0.12 + i * 0.06, duration: 0.4 }}\n\t\t\t\t\t\t\t\tclassName={i === 0 ? \"payman-empty-title\" : \"payman-empty-subtitle\"}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{line}\n\t\t\t\t\t\t\t</motion.p>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t</motion.div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t/* Messages */\n\treturn (\n\t\t<>\n\t\t\t{/* Scrollable message list — takes full flex space */}\n\t\t\t<div\n\t\t\t\tref={scrollRef}\n\t\t\t\tonScroll={handleScroll}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex-1 min-h-0 overflow-y-auto payman-scrollbar relative\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"space-y-4\",\n\t\t\t\t\t\tlayout === \"centered\" ? \"max-w-2xl mx-auto px-4 py-6\" : \"p-4\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{/* Load-more spinner shown at top while fetching older messages */}\n\t\t\t\t\t{isLoadingMoreMessages && (\n\t\t\t\t\t\t<div className=\"flex justify-center py-2\">\n\t\t\t\t\t\t\t<div className=\"w-5 h-5 rounded-full border-2 border-muted-foreground/30 border-t-muted-foreground animate-spin\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t{messages.map((message) => (\n\t\t\t\t\t\t<MessageRow\n\t\t\t\t\t\t\tkey={message.id}\n\t\t\t\t\t\t\tmessage={message}\n\t\t\t\t\t\t\tstage={stage}\n\t\t\t\t\t\t\tanimated={animated}\n\t\t\t\t\t\t\tshowAgentName={showAgentName}\n\t\t\t\t\t\t\tagentName={agentName}\n\t\t\t\t\t\t\tshowAvatars={showAvatars}\n\t\t\t\t\t\t\tshowUserAvatar={showUserAvatar}\n\t\t\t\t\t\t\tshowAssistantAvatar={showAssistantAvatar}\n\t\t\t\t\t\t\tlayout={layout}\n\t\t\t\t\t\t\tshowTimestamps={showTimestamps}\n\t\t\t\t\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\t\t\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\t\t\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\t\t\t\t\tcompletedStepsText={completedStepsText}\n\t\t\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\n\t\t\t\t{/* Scroll-to-bottom button */}\n\t\t\t\t{showScrollBtn && (\n\t\t\t\t\t<div className=\"sticky bottom-0 z-20 flex justify-center pb-3 -mt-11\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tonClick={handleScrollToBottom}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"w-8 h-8 rounded-full\",\n\t\t\t\t\t\t\t\t\"bg-card border border-border shadow-lg\",\n\t\t\t\t\t\t\t\t\"flex items-center justify-center\",\n\t\t\t\t\t\t\t\t\"hover:bg-muted active:scale-95\",\n\t\t\t\t\t\t\t\t\"transition-all duration-150\",\n\t\t\t\t\t\t\t\t\"cursor-pointer\"\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\taria-label=\"Scroll to bottom\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ArrowDown className=\"w-4 h-4 text-muted-foreground\" />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</>\n\t);\n}\n","import { useEffect, useRef } from \"react\";\nimport type { OtpInputProps } from \"../../types\";\nimport { cn } from \"../../utils\";\n\nconst DEFAULT_MAX_LENGTH = 6;\nconst MAX_SUPPORTED_LENGTH = 12;\nconst AUTO_FOCUS_DELAY_MS = 250;\n\nexport function OtpInput({\n\tvalue,\n\tonChange,\n\tmaxLength,\n\tdisabled = false,\n}: 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\tconst digits = value\n\t\t.split(\"\")\n\t\t.concat(Array(safeMaxLength).fill(\"\"))\n\t\t.slice(0, safeMaxLength);\n\n\t// Auto-focus first input\n\tuseEffect(() => {\n\t\tif (disabled) return;\n\t\tconst timer = window.setTimeout(() => {\n\t\t\tinputRefs.current[0]?.focus();\n\t\t}, AUTO_FOCUS_DELAY_MS);\n\t\treturn () => window.clearTimeout(timer);\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\tif (char && !/^\\d$/.test(char)) return;\n\t\tconst newDigits = [...digits];\n\t\tnewDigits[index] = char;\n\t\tupdateValue(newDigits);\n\t\tif (char && index < safeMaxLength - 1) focusInput(index + 1);\n\t};\n\n\tconst handleKeyDown = (\n\t\tindex: number,\n\t\te: React.KeyboardEvent<HTMLInputElement>\n\t) => {\n\t\tif (e.key === \"Enter\") {\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\t\tif (e.key === \"Backspace\") {\n\t\t\te.preventDefault();\n\t\t\tif (digits[index]) {\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\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\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\n\t\t\t.getData(\"text\")\n\t\t\t.replace(/\\D/g, \"\")\n\t\t\t.slice(0, safeMaxLength);\n\t\tif (!pasted) return;\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\t\tfocusInput(Math.min(pasted.length, safeMaxLength - 1));\n\t};\n\n\treturn (\n\t\t<div className=\"flex gap-2.5 justify-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) => {\n\t\t\t\t\t\tinputRefs.current[i] = el;\n\t\t\t\t\t}}\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\tclassName={cn(\n\t\t\t\t\t\t\"w-12 h-14 text-center text-xl font-semibold rounded-xl\",\n\t\t\t\t\t\t\"payman-otp-input otp-input\",\n\t\t\t\t\t\t\"transition-all duration-150 cursor-text\",\n\t\t\t\t\t\tdisabled && \"cursor-not-allowed\"\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 { Check, Loader2, RefreshCw, ShieldCheck, X } from \"lucide-react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { UserActionModalProps } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { OtpInput } from \"../OtpInput\";\nimport {\n\tACTION_PENDING_TIMEOUT_MS,\n\tBUTTON_LABELS,\n\tMODAL_CONTENT,\n\tRESEND_OTP_COOLDOWN_SECONDS,\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<\n\t\t\"approve\" | \"reject\" | \"resend\" | null\n\t>(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\n\tconst resetActionState = useCallback(() => {\n\t\tsetIsSubmitting(false);\n\t\tsetActionType(null);\n\t}, []);\n\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\tuseEffect(() => {\n\t\tif (resendCooldownRemaining <= 0) return;\n\t\tconst timer = setTimeout(\n\t\t\t() => setResendCooldownRemaining((p) => p - 1),\n\t\t\t1000\n\t\t);\n\t\treturn () => clearTimeout(timer);\n\t}, [resendCooldownRemaining]);\n\n\tuseEffect(() => {\n\t\tif (clearOtpTrigger > 0) {\n\t\t\tsetOtp(\"\");\n\t\t\tresetActionState();\n\t\t}\n\t}, [clearOtpTrigger, resetActionState]);\n\n\tuseEffect(() => {\n\t\tif (!isOpen || !isSubmitting) return;\n\t\tif (actionType !== \"approve\" && actionType !== \"reject\") return;\n\t\tconst timeout = setTimeout(resetActionState, ACTION_PENDING_TIMEOUT_MS);\n\t\treturn () => clearTimeout(timeout);\n\t}, [isOpen, isSubmitting, actionType, resetActionState]);\n\n\t// Focus trap\n\tuseEffect(() => {\n\t\tif (!isOpen) return;\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 getFocusable = () =>\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 = getFocusable();\n\t\t(focusables[0] ?? dialog).focus();\n\n\t\tconst handleKeyDown = (e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") {\n\t\t\t\te.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (e.key !== \"Tab\") return;\n\t\t\tconst items = getFocusable();\n\t\t\tif (!items.length) {\n\t\t\t\te.preventDefault();\n\t\t\t\tdialog.focus();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst first = items[0];\n\t\t\tconst last = items[items.length - 1];\n\t\t\tconst active = document.activeElement as HTMLElement | null;\n\t\t\tconst inDialog = active ? dialog.contains(active) : false;\n\t\t\tif (e.shiftKey) {\n\t\t\t\tif (!inDialog || active === first) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tlast.focus();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!inDialog || active === last) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tfirst.focus();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown);\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\t\tsetIsSubmitting(true);\n\t\tsetActionType(\"approve\");\n\t\ttry {\n\t\t\tawait onApprove(otp);\n\t\t} catch {\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} catch {\n\t\t\tresetActionState();\n\t\t}\n\t}, [onReject, resetActionState]);\n\n\tconst handleResend = useCallback(async () => {\n\t\tif (resendCooldownRemaining > 0) return;\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// 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<div\n\t\t\tclassName=\"payman-modal-backdrop\"\n\t\t\tstyle={{\n\t\t\t\tposition: \"fixed\",\n\t\t\t\tinset: 0,\n\t\t\t\tzIndex: 10000,\n\t\t\t\tdisplay: \"flex\",\n\t\t\t\talignItems: \"center\",\n\t\t\t\tjustifyContent: \"center\",\n\t\t\t\tpadding: 16,\n\t\t\t\tboxSizing: \"border-box\",\n\t\t\t}}\n\t\t>\n\t\t\t{/* Backdrop */}\n\t\t\t<div\n\t\t\t\tclassName=\"absolute inset-0 backdrop-blur-sm payman-modal-backdrop-overlay payman-modal-animate\"\n\t\t\t\taria-hidden\n\t\t\t\tstyle={{\n\t\t\t\t\tbackground:\n\t\t\t\t\t\t\"var(--payman-modal-backdrop-bg, rgba(0, 0, 0, 0.4))\",\n\t\t\t\t}}\n\t\t\t/>\n\n\t\t\t{/* Wrapper to constrain dialog width regardless of host CSS */}\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\tmaxWidth: 400,\n\t\t\t\t\tminWidth: 0,\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\taria-labelledby=\"payman-modal-title\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"relative w-full rounded-2xl p-6 shadow-2xl\",\n\t\t\t\t\t\t\"payman-modal-dialog payman-modal-animate\"\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\tmaxWidth: 400,\n\t\t\t\t\t\tboxSizing: \"border-box\",\n\t\t\t\t\t\tbackground:\n\t\t\t\t\t\t\t\"var(--payman-modal-dialog-bg, var(--payman-card, #ffffff))\",\n\t\t\t\t\t\tborder:\n\t\t\t\t\t\t\t\"1px solid var(--payman-modal-dialog-border, var(--payman-border, #e4e4e7))\",\n\t\t\t\t\t}}\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t>\n\t\t\t\t{/* Icon + Title */}\n\t\t\t\t<div className=\"text-center mb-5\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"inline-flex items-center justify-center w-12 h-12 rounded-2xl payman-modal-icon-wrap mb-3\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackground:\n\t\t\t\t\t\t\t\t\"var(--payman-modal-icon-bg, color-mix(in srgb, var(--payman-primary, #18181b) 10%, transparent))\",\n\t\t\t\t\t\t\tborder:\n\t\t\t\t\t\t\t\t\"1px solid var(--payman-modal-icon-border, color-mix(in srgb, var(--payman-primary, #18181b) 20%, transparent))\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ShieldCheck\n\t\t\t\t\t\t\tclassName=\"w-6 h-6 payman-modal-icon\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-icon-fg, var(--payman-primary, #18181b))\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<h2\n\t\t\t\t\t\tid=\"payman-modal-title\"\n\t\t\t\t\t\tclassName=\"text-lg font-semibold payman-modal-title tracking-tight\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\"var(--payman-modal-title-fg, var(--payman-foreground, #18181b))\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{MODAL_CONTENT.TITLE}\n\t\t\t\t\t</h2>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Description */}\n\t\t\t\t<p\n\t\t\t\t\tclassName=\"text-sm payman-modal-desc text-center mb-6 leading-relaxed px-0.5\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\"var(--payman-modal-desc-fg, var(--payman-muted-foreground, #71717a))\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{userActionRequest.message}\n\t\t\t\t</p>\n\n\t\t\t\t{/* OTP Input */}\n\t\t\t\t<div className=\"mb-6\">\n\t\t\t\t\t<OtpInput\n\t\t\t\t\t\tvalue={otp}\n\t\t\t\t\t\tonChange={setOtp}\n\t\t\t\t\t\tmaxLength={schema.maxLength}\n\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Buttons */}\n\t\t\t\t<div className=\"flex flex-col gap-3\">\n\t\t\t\t\t<div className=\"flex gap-2.5\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"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\"flex-1 flex items-center justify-center gap-2\",\n\t\t\t\t\t\t\t\t\"min-h-[48px] py-3 px-4 rounded-xl text-sm font-medium border-0 cursor-pointer\",\n\t\t\t\t\t\t\t\t\"payman-modal-btn-reject\",\n\t\t\t\t\t\t\t\t\"active:scale-[0.98] transition-all duration-150\",\n\t\t\t\t\t\t\t\t\"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\tbackground:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-btn-reject-bg, color-mix(in srgb, var(--payman-destructive, #ef4444) 10%, transparent))\",\n\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-btn-reject-fg, var(--payman-destructive, #ef4444))\",\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 shrink-0\" />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<X className=\"w-4 h-4 shrink-0\" strokeWidth={2.5} />\n\t\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? MODAL_CONTENT.LOADING_REJECT\n\t\t\t\t\t\t\t\t: 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\ttype=\"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\"flex-1 flex items-center justify-center gap-2\",\n\t\t\t\t\t\t\t\t\"min-h-[48px] py-3 px-4 rounded-xl text-sm font-medium border-0 cursor-pointer\",\n\t\t\t\t\t\t\t\t\"payman-modal-btn-approve\",\n\t\t\t\t\t\t\t\t\"active:scale-[0.98] transition-all duration-150\",\n\t\t\t\t\t\t\t\t\"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\tbackground:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-btn-approve-bg, var(--payman-primary, #18181b))\",\n\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-btn-approve-fg, var(--payman-primary-foreground, #fafafa))\",\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 shrink-0\" />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Check className=\"w-4 h-4 shrink-0\" strokeWidth={2.5} />\n\t\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? MODAL_CONTENT.LOADING_APPROVE\n\t\t\t\t\t\t\t\t: 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<button\n\t\t\t\t\t\ttype=\"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\"w-full flex items-center justify-center gap-2\",\n\t\t\t\t\t\t\t\"min-h-[48px] py-3 px-4 rounded-xl text-sm font-medium cursor-pointer\",\n\t\t\t\t\t\t\t\"payman-modal-btn-resend\",\n\t\t\t\t\t\t\t\"transition-all duration-150 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\tborder:\n\t\t\t\t\t\t\t\t\"1px solid var(--payman-modal-btn-resend-border, var(--payman-border, #e4e4e7))\",\n\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\"var(--payman-modal-btn-resend-fg, var(--payman-muted-foreground, #71717a))\",\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-4 h-4 animate-spin shrink-0\" />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<RefreshCw className=\"w-4 h-4 shrink-0\" strokeWidth={2.5} />\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? `${MODAL_CONTENT.RESEND_AVAILABLE_IN} ${resendCooldownRemaining}s`\n\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</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { useChat, useVoice } from \"@paymanai/payman-typescript-ask-sdk\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\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\tonLoadMoreMessages,\n\tisLoadingMoreMessages = false,\n\thasMoreMessages = false,\n}: PaymanChatProps) {\n\tconst [inputValue, setInputValue] = useState(\"\");\n\tconst prevInputValueRef = useRef(inputValue);\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\tprependMessages,\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// Voice support\n\tconst {\n\t\tisAvailable: voiceAvailable,\n\t\tisRecording,\n\t\tstartRecording,\n\t\tstopRecording,\n\t\tclearTranscript,\n\t} = useVoice(\n\t\t{\n\t\t\tlang: config.voiceLang || \"en-US\",\n\t\t\tinterimResults: config.voiceInterimResults !== false,\n\t\t\tcontinuous: config.voiceContinuous !== false,\n\t\t},\n\t\t{\n\t\t\tonResult: (text) => {\n\t\t\t\t// Update input value with transcribed text in real-time\n\t\t\t\tsetInputValue(text);\n\t\t\t},\n\t\t\tonEnd: () => {\n\t\t\t\t// When recording ends, keep the text in input\n\t\t\t\t// User can edit or send\n\t\t\t},\n\t\t\tonError: (error) => {\n\t\t\t\tconsole.error(\"Voice error:\", error);\n\t\t\t},\n\t\t}\n\t);\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\tprependMessages,\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\tprependMessages,\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\t// Reset voice recognition only when user clears the input (not on initial empty state)\n\tuseEffect(() => {\n\t\tconst wasEmpty = prevInputValueRef.current.trim() === \"\";\n\t\tconst isEmpty = inputValue.trim() === \"\";\n\t\tprevInputValueRef.current = inputValue;\n\t\tif (!wasEmpty && isEmpty) {\n\t\t\tclearTranscript();\n\t\t\tif (isRecording) {\n\t\t\t\tstopRecording();\n\t\t\t}\n\t\t}\n\t}, [inputValue, clearTranscript, isRecording, stopRecording]);\n\n\tconst handleSend = () => {\n\t\tif (isRecording) {\n\t\t\tstopRecording();\n\t\t}\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 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 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 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\t<MessageList\n\t\t\t\t\tmessages={messages}\n\t\t\t\t\tisLoading={false}\n\t\t\t\t\temptyStateText={emptyStateText}\n\t\t\t\t\tshowEmptyStateIcon={showEmptyStateIcon}\n\t\t\t\t\tlayout={layout}\n\t\t\t\t\tshowTimestamps={showTimestamps}\n\t\t\t\t\tstage={config.stage || \"DEV\"}\n\t\t\t\t\tanimated={animated}\n\t\t\t\t\tshowAgentName={showAgentName}\n\t\t\t\t\tagentName={agentName}\n\t\t\t\t\tshowAvatars={showAvatars}\n\t\t\t\t\tshowUserAvatar={showUserAvatar}\n\t\t\t\t\tshowAssistantAvatar={showAssistantAvatar}\n\t\t\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\t\t\tcompletedStepsText={completedStepsText}\n\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t\tonLoadMoreMessages={onLoadMoreMessages}\n\t\t\t\t\tisLoadingMoreMessages={isLoadingMoreMessages}\n\t\t\t\t\thasMoreMessages={hasMoreMessages}\n\t\t\t\t/>\n\n\t\t\t\t{/* Chat Input Area - Only show if user has ask permission */}\n\t\t\t\t{hasAskPermission && (\n\t\t\t\t\t<ChatInput\n\t\t\t\t\t\tvalue={inputValue}\n\t\t\t\t\t\tonChange={setInputValue}\n\t\t\t\t\t\tonSend={handleSend}\n\t\t\t\t\t\tonPause={cancelStream}\n\t\t\t\t\t\tdisabled={isInputDisabled}\n\t\t\t\t\t\tplaceholder={isRecording ? \"Listening...\" : placeholder}\n\t\t\t\t\t\tisWaitingForResponse={isWaitingForResponse}\n\t\t\t\t\t\thasSelectedSession={true}\n\t\t\t\t\t\tisSessionParamsConfigured={isSessionParamsConfigured}\n\t\t\t\t\t\tenableVoice={config.enableVoice === true}\n\t\t\t\t\t\tonVoicePress={isRecording ? stopRecording : startRecording}\n\t\t\t\t\t\tvoiceAvailable={config.enableVoice === true && voiceAvailable}\n\t\t\t\t\t\tisRecording={isRecording}\n\t\t\t\t\t\tinputStyle={inputStyle}\n\t\t\t\t\t\tlayout={layout}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t{/* User Action (OTP) Modal */}\n\t\t\t\t<UserActionModal\n\t\t\t\t\tisOpen={isUserActionSupported && userActionState.request !== null}\n\t\t\t\t\tuserActionRequest={userActionState.request}\n\t\t\t\t\tonApprove={approveUserAction}\n\t\t\t\t\tonReject={rejectUserAction}\n\t\t\t\t\tonResend={resendOtp}\n\t\t\t\t\tclearOtpTrigger={userActionState.clearOtpTrigger}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</PaymanChatContext.Provider>\n\t);\n}\n"]}
|