@paymanai/payman-ask-sdk 1.2.24 → 1.2.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/contexts/PaymanChatContext.tsx","../src/utils/cn.ts","../src/utils/formatDate.ts","../src/utils/sentry.ts","../src/components/ChatInput/index.tsx","../src/components/AgentMessage/ImageLightbox.tsx","../src/components/AgentMessage/MarkdownImage.tsx","../src/components/AgentMessage/markdownComponents.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/ResetSessionConfirmModal/index.tsx","../src/components/OtpInput/index.tsx","../src/components/UserActionModal/constants.ts","../src/components/UserActionModal/utils.ts","../src/components/UserActionModal/index.tsx","../src/components/v2/ActionTooltipV2.tsx","../src/components/v2/UserMessageV2.tsx","../src/components/v2/MarkdownImageV2.tsx","../src/components/v2/MarkdownRendererV2.tsx","../src/components/v2/ThinkingBlockV2.tsx","../src/components/v2/useTypingEffect.ts","../src/components/v2/AssistantMessageV2.tsx","../src/components/v2/OtpInputV2.tsx","../src/components/v2/VerificationCardV2.tsx","../src/components/v2/MessageListV2.tsx","../src/components/v2/ChatInputV2.tsx","../src/components/v2/ImageLightboxV2.tsx","../src/components/PaymanChat/index.tsx"],"names":["createContext","useContext","twMerge","clsx","Sentry","useRef","useState","useEffect","useCallback","jsx","jsxs","AnimatePresence","motion","Check","RotateCcw","Mic","ArrowUp","frameStyle","createPortal","X","Loader2","useMemo","Fragment","ChevronDown","Clock","ChevronRight","Sparkles","ReactMarkdown","remarkGfm","Binoculars","User","useLayoutEffect","ArrowDown","AlertCircle","Copy","Pencil","RAG_IMAGE_PATH_REGEX","isUnresolvedRagImageSource","ImageOff","Eye","buildFormattedThinking","WifiOff","SearchCode","DEFAULT_MAX_LENGTH","MAX_SUPPORTED_LENGTH","AUTO_FOCUS_DELAY_MS","ShieldCheck","SCROLL_THRESHOLD","forwardRef","MessageListV2","useImperativeHandle","ChatInputV2","Plus","ImagePlus","Paperclip","Download","PaymanChatInner","useVoice","isEmpty","PaymanChatV1Shell","useChat","PaymanChatV2Shell","useChatV2","PaymanChat"],"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 * as Sentry from \"@sentry/react\";\n\n/**\n * Initialise Sentry inside the SDK.\n * Only runs when a DSN is provided and Sentry has not already been initialised\n * by the host application, so it is safe to call even if the host also calls\n * Sentry.init().\n */\nexport function initSentryIfNeeded(dsn: string): void {\n\tif (!dsn) return;\n\n\t// getClient() returns undefined when Sentry has not been initialised yet\n\tif (Sentry.getClient()) return;\n\n\tSentry.init({\n\t\tdsn,\n\t\tsendDefaultPii: true,\n\t\tinitialScope: {\n\t\t\ttags: { source: \"payman-ask-sdk\" },\n\t\t},\n\t});\n}\n","import { AnimatePresence, motion } from \"framer-motion\";\nimport { ArrowUp, Check, Mic, RotateCcw } from \"lucide-react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { ChatInputProps } from \"../../types\";\nimport { cn } from \"../../utils\";\n\nconst AI_DISCLAIMER_TEXT =\n\t\"AI can make mistakes. Please double-check responses.\";\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\ttranscribedText = \"\",\n\tonCancelRecording,\n\tonConfirmRecording,\n\tshowResetSession = false,\n\tonResetSession,\n}: ChatInputProps) {\n\tconst textareaRef = useRef<HTMLTextAreaElement>(null);\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst prevWaitingRef = useRef(isWaitingForResponse);\n\tconst [recordingSeconds, setRecordingSeconds] = useState(0);\n\tconst recordingTimerRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\tconst [isFocused, setIsFocused] = useState(false);\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(scrollHeight, maxHeight)}px`;\n\t\t}\n\t}, [value]);\n\n\t// Auto-focus on mount\n\tuseEffect(() => {\n\t\trequestAnimationFrame(() => {\n\t\t\ttextareaRef.current?.focus();\n\t\t});\n\t}, []);\n\n\t// Re-focus after response completes\n\tuseEffect(() => {\n\t\tconst wasWaiting = prevWaitingRef.current;\n\t\tprevWaitingRef.current = isWaitingForResponse;\n\t\tif (wasWaiting && !isWaitingForResponse) {\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\ttextareaRef.current?.focus();\n\t\t\t\tcontainerRef.current?.scrollIntoView({ block: \"end\", behavior: \"smooth\" });\n\t\t\t});\n\t\t}\n\t}, [isWaitingForResponse]);\n\n\t// Recording timer\n\tuseEffect(() => {\n\t\tif (isRecording) {\n\t\t\tsetRecordingSeconds(0);\n\t\t\trecordingTimerRef.current = setInterval(() => {\n\t\t\t\tsetRecordingSeconds((s) => s + 1);\n\t\t\t}, 1000);\n\t\t} else {\n\t\t\tif (recordingTimerRef.current) {\n\t\t\t\tclearInterval(recordingTimerRef.current);\n\t\t\t\trecordingTimerRef.current = null;\n\t\t\t}\n\t\t\tsetRecordingSeconds(0);\n\t\t}\n\t\treturn () => {\n\t\t\tif (recordingTimerRef.current) {\n\t\t\t\tclearInterval(recordingTimerRef.current);\n\t\t\t}\n\t\t};\n\t}, [isRecording]);\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 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\tconst formatTime = useCallback((seconds: number) => {\n\t\tconst mins = Math.floor(seconds / 60);\n\t\tconst secs = seconds % 60;\n\t\treturn `${String(mins).padStart(2, \"0\")}:${String(secs).padStart(2, \"0\")}`;\n\t}, []);\n\n\tconst handleCancel = () => {\n\t\tif (onCancelRecording) {\n\t\t\tonCancelRecording();\n\t\t} else if (onVoicePress) {\n\t\t\tonVoicePress();\n\t\t}\n\t};\n\n\tconst handleConfirm = () => {\n\t\tif (onConfirmRecording) {\n\t\t\tonConfirmRecording();\n\t\t} else if (onVoicePress) {\n\t\t\tonVoicePress();\n\t\t}\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName={cn(\"payman-chat-input-wrapper\", className)}\n\t\t>\n\t\t\t<div className=\"payman-chat-input-container\">\n\t\t\t\t<div className=\"payman-chat-input-inner\">\n\t\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t\t{isRecording ? (\n\t\t\t\t\t\t\t/* ======== Recording State ======== */\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tkey=\"recording\"\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\texit={{ opacity: 0, y: 6 }}\n\t\t\t\t\t\t\t\ttransition={{ duration: 0.25, ease: [0.25, 0.46, 0.45, 0.94] }}\n\t\t\t\t\t\t\t\tclassName=\"payman-chat-input payman-chat-input--recording\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{/* Live transcript area */}\n\t\t\t\t\t\t\t\t<div className=\"payman-recording-transcript-area\">\n\t\t\t\t\t\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t\t\t\t\t\t{transcribedText ? (\n\t\t\t\t\t\t\t\t\t\t\t<motion.p\n\t\t\t\t\t\t\t\t\t\t\t\tkey=\"text\"\n\t\t\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t\t\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.15 }}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-recording-transcript-text\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{transcribedText}\n\t\t\t\t\t\t\t\t\t\t\t\t<motion.span\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-recording-cursor\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: [1, 0] }}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.8, repeat: Infinity, repeatType: \"reverse\" }}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</motion.p>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<motion.p\n\t\t\t\t\t\t\t\t\t\t\t\tkey=\"placeholder\"\n\t\t\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 0.5 }}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-recording-transcript-placeholder\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\tListening...\n\t\t\t\t\t\t\t\t\t\t\t</motion.p>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t{/* Bottom bar: Cancel · dot timer · confirm */}\n\t\t\t\t\t\t\t\t<div className=\"payman-recording-bar\">\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={handleCancel}\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-recording-btn-cancel\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Cancel recording\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\tCancel\n\t\t\t\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t\t\t\t<div className=\"payman-recording-indicator\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"payman-recording-dot\" />\n\t\t\t\t\t\t\t\t\t\t<span className=\"payman-recording-timer\">\n\t\t\t\t\t\t\t\t\t\t\t{formatTime(recordingSeconds)}\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<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={handleConfirm}\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-recording-btn-confirm\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Confirm recording\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Check className=\"w-4 h-4\" strokeWidth={2.5} />\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t/* ======== Normal Input State ======== */\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tkey=\"input\"\n\t\t\t\t\t\t\t\tinitial={false}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\t\texit={{ opacity: 0, y: 6 }}\n\t\t\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"payman-chat-input\",\n\t\t\t\t\t\t\t\t\tisFocused && \"payman-chat-input--focused\"\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{/* Textarea */}\n\t\t\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\t\t\tref={textareaRef}\n\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t\tonChange={(e) => onChange(e.target.value)}\n\t\t\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\t\t\tonFocus={() => setIsFocused(true)}\n\t\t\t\t\t\t\t\t\tonBlur={() => setIsFocused(false)}\n\t\t\t\t\t\t\t\t\tonClick={onClick}\n\t\t\t\t\t\t\t\t\tdisabled={isInputDisabled}\n\t\t\t\t\t\t\t\t\tplaceholder={getPlaceholder()}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-chat-input-field\"\n\t\t\t\t\t\t\t\t\trows={1}\n\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t{/* Bottom action bar */}\n\t\t\t\t\t\t\t\t<div className=\"payman-chat-input-bottom\">\n\t\t\t\t\t\t\t\t\t{/* Left: reset session */}\n\t\t\t\t\t\t\t\t\t<div className=\"payman-chat-input-actions-left\">\n\t\t\t\t\t\t\t\t\t\t{showResetSession && onResetSession && (\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={onResetSession}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isWaitingForResponse}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-chat-input-btn-reset\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"New Session\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<RotateCcw className=\"w-3.5 h-3.5\" strokeWidth={2.5} />\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"payman-chat-input-btn-reset-tooltip\">New Session</span>\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t{/* Right: voice + send */}\n\t\t\t\t\t\t\t\t\t<div className=\"payman-chat-input-actions\">\n\t\t\t\t\t\t\t\t\t\t{showVoiceButton && (\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={onVoicePress}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isVoiceButtonDisabled}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-chat-input-btn-voice\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"Voice input\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<Mic className=\"w-[18px] h-[18px]\" />\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={onSend}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={!canSend}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-chat-input-btn-send\"\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Send message\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\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\t\t</button>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t<p className=\"payman-chat-input-disclaimer\">{AI_DISCLAIMER_TEXT}</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { AnimatePresence, motion } from \"framer-motion\";\nimport { Loader2, X } from \"lucide-react\";\nimport type { CSSProperties } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\n\ntype ImageLightboxProps = {\n\tsrc: string;\n\talt?: string;\n\tonClose: () => void;\n};\n\nexport function ImageLightbox({\n\tsrc,\n\talt = \"\",\n\tonClose,\n}: ImageLightboxProps) {\n\tconst [isMounted, setIsMounted] = useState(false);\n\tconst [isImageLoaded, setIsImageLoaded] = useState(false);\n\tconst overlayStyle: CSSProperties = {\n\t\tposition: \"fixed\",\n\t\tinset: 0,\n\t\tzIndex: 2147483647,\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tpadding: 16,\n\t\tbackground: \"rgba(2, 6, 23, 0.92)\",\n\t\tisolation: \"isolate\",\n\t};\n\tconst frameStyle: CSSProperties = {\n\t\tposition: \"relative\",\n\t\twidth: \"min(92vw, 1280px)\",\n\t\theight: \"min(88vh, 920px)\",\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\toverflow: \"hidden\",\n\t};\n\n\tuseEffect(() => {\n\t\tsetIsMounted(true);\n\t\treturn () => setIsMounted(false);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tsetIsImageLoaded(false);\n\t}, [src]);\n\n\tuseEffect(() => {\n\t\tif (typeof document === \"undefined\") return;\n\n\t\tconst previousOverflow = document.body.style.overflow;\n\t\tdocument.body.style.overflow = \"hidden\";\n\n\t\treturn () => {\n\t\t\tdocument.body.style.overflow = previousOverflow;\n\t\t};\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (typeof document === \"undefined\") return;\n\n\t\tconst handleKeyDown = (event: KeyboardEvent) => {\n\t\t\tif (event.key === \"Escape\") {\n\t\t\t\tonClose();\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};\n\t}, [onClose]);\n\n\tif (!isMounted || typeof document === \"undefined\") {\n\t\treturn null;\n\t}\n\n\treturn createPortal(\n\t\t<AnimatePresence>\n\t\t\t<motion.div\n\t\t\t\tstyle={overlayStyle}\n\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\ttransition={{ duration: 0.18 }}\n\t\t\t\tonClick={onClose}\n\t\t\t>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={onClose}\n\t\t\t\t\tclassName=\"absolute top-4 right-4 z-[1] flex h-9 w-9 items-center justify-center rounded-full bg-black/60 text-white/90 transition-colors hover:bg-black/75\"\n\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t>\n\t\t\t\t\t<X className=\"h-4 w-4\" />\n\t\t\t\t</button>\n\n\t\t\t\t<div style={frameStyle} onClick={(event) => event.stopPropagation()}>\n\t\t\t\t\t{!isImageLoaded ? (\n\t\t\t\t\t\t<div className=\"absolute inset-0 flex flex-col items-center justify-center gap-2\">\n\t\t\t\t\t\t\t<Loader2 className=\"h-5 w-5 animate-spin text-white/80\" />\n\t\t\t\t\t\t\t<p className=\"text-sm font-medium text-white/90\">\n\t\t\t\t\t\t\t\tLoading image\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p className=\"text-xs text-white/60\">Reference image</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : null}\n\n\t\t\t\t\t<div className=\"flex h-full w-full items-center justify-center p-3 sm:p-4\">\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\t\talt={alt}\n\t\t\t\t\t\t\tdraggable={false}\n\t\t\t\t\t\t\tonLoad={() => setIsImageLoaded(true)}\n\t\t\t\t\t\t\tclassName={`block h-full w-full rounded-xl object-contain shadow-2xl transition-opacity duration-200 ${\n\t\t\t\t\t\t\t\tisImageLoaded ? \"opacity-100\" : \"opacity-0\"\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</motion.div>\n\t\t</AnimatePresence>,\n\t\tdocument.body,\n\t);\n}\n","import { Loader2 } from \"lucide-react\";\nimport type { CSSProperties } from \"react\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { ImageLightbox } from \"./ImageLightbox\";\n\nconst RAG_IMAGE_PATH_REGEX =\n\t/^(?:https?:\\/\\/[^/\\s]+)?\\/api\\/rag\\/chunks\\/[^\"'\\s]+\\/image(?:[?#][^\"'\\s]*)?$/;\n\nfunction isUnresolvedRagImageSource(src: string) {\n\treturn RAG_IMAGE_PATH_REGEX.test(src);\n}\n\nfunction LoadingImageCard({\n\tlabel,\n\tdescription,\n}: {\n\tlabel: string;\n\tdescription: string;\n}) {\n\treturn (\n\t\t<span className=\"my-3 flex min-h-36 w-full flex-col items-center justify-center gap-2 px-4 py-5 text-center\">\n\t\t\t<Loader2 className=\"h-5 w-5 animate-spin text-slate-500 dark:text-slate-300\" />\n\t\t\t<span className=\"text-xs font-medium text-slate-600 dark:text-slate-200\">\n\t\t\t\t{label}\n\t\t\t</span>\n\t\t\t<span className=\"text-[11px] leading-relaxed text-slate-500/90 dark:text-slate-300/80\">\n\t\t\t\t{description}\n\t\t\t</span>\n\t\t</span>\n\t);\n}\n\nfunction BrokenImageCard({ alt }: { alt?: string }) {\n\treturn (\n\t\t<span className=\"my-3 flex min-h-44 w-full flex-col items-center justify-center gap-2 rounded-xl border border-dashed border-red-200 bg-red-50/60 px-4 py-5 text-center dark:border-red-900/40 dark:bg-red-950/20\">\n\t\t\t<span className=\"text-xs font-medium text-red-600 dark:text-red-300\">\n\t\t\t\tUnable to load image\n\t\t\t</span>\n\t\t\t{alt ? (\n\t\t\t\t<span className=\"max-w-sm text-[11px] leading-relaxed text-red-500/80 dark:text-red-200/80\">\n\t\t\t\t\t{alt}\n\t\t\t\t</span>\n\t\t\t) : null}\n\t\t</span>\n\t);\n}\n\ntype MarkdownImageProps = {\n\tsrc?: string;\n\talt?: string;\n\tisResolving?: boolean;\n};\n\nexport function MarkdownImage({\n\tsrc,\n\talt,\n\tisResolving = false,\n}: MarkdownImageProps) {\n\tconst imageFrameStyle: CSSProperties = {\n\t\twidth: \"min(100%, 32rem)\",\n\t\tmaxWidth: \"100%\",\n\t};\n\tconst imageStyle: CSSProperties = {\n\t\tdisplay: \"block\",\n\t\twidth: \"100%\",\n\t\theight: \"auto\",\n\t\tmaxWidth: \"100%\",\n\t\tmaxHeight: \"18rem\",\n\t\tobjectFit: \"contain\",\n\t};\n\tconst [isLoaded, setIsLoaded] = useState(false);\n\tconst [hasError, setHasError] = useState(false);\n\tconst [isLightboxOpen, setIsLightboxOpen] = useState(false);\n\tconst isUnresolvedRagImage = useMemo(\n\t\t() => (src ? isUnresolvedRagImageSource(src) : false),\n\t\t[src]\n\t);\n\tconst isResolvingRagImage = isResolving && isUnresolvedRagImage;\n\n\tuseEffect(() => {\n\t\tsetIsLoaded(false);\n\t\tsetHasError(false);\n\t\tsetIsLightboxOpen(false);\n\t}, [src]);\n\n\tif (!src) {\n\t\treturn null;\n\t}\n\n\tif (isResolvingRagImage) {\n\t\treturn (\n\t\t\t<LoadingImageCard label=\"Loading image\" description=\"Reference image\" />\n\t\t);\n\t}\n\n\tif (hasError) {\n\t\treturn <BrokenImageCard alt={alt} />;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<span className=\"my-3 block w-full\">\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tif (isLoaded) {\n\t\t\t\t\t\t\tsetIsLightboxOpen(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t\tdisabled={!isLoaded}\n\t\t\t\t\taria-busy={!isLoaded}\n\t\t\t\t\tclassName=\"group relative mx-auto flex w-full items-center justify-center overflow-hidden rounded-xl bg-black/[0.03] px-3 py-3 text-left transition-colors hover:bg-black/[0.05] disabled:cursor-wait disabled:hover:bg-black/[0.03] dark:bg-white/[0.03] dark:hover:bg-white/[0.05] dark:disabled:hover:bg-white/[0.03]\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t...imageFrameStyle,\n\t\t\t\t\t\t...(!isLoaded ? { minHeight: \"9rem\" } : {}),\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\talt={alt || \"\"}\n\t\t\t\t\t\tclassName={`relative z-[1] block h-auto max-h-[22rem] w-full max-w-full rounded-lg object-contain transition-opacity duration-200 ${\n\t\t\t\t\t\t\tisLoaded ? \"opacity-100\" : \"opacity-0\"\n\t\t\t\t\t\t}`}\n\t\t\t\t\t\tstyle={imageStyle}\n\t\t\t\t\t\tonLoad={() => {\n\t\t\t\t\t\t\tsetHasError(false);\n\t\t\t\t\t\t\tsetIsLoaded(true);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonError={() => {\n\t\t\t\t\t\t\tsetIsLoaded(false);\n\t\t\t\t\t\t\tsetHasError(true);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</button>\n\t\t\t</span>\n\n\t\t\t{isLightboxOpen && isLoaded ? (\n\t\t\t\t<ImageLightbox\n\t\t\t\t\tsrc={src}\n\t\t\t\t\talt={alt}\n\t\t\t\t\tonClose={() => setIsLightboxOpen(false)}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t</>\n\t);\n}\n","import type { Components } from \"react-markdown\";\nimport { MarkdownImage } from \"./MarkdownImage\";\n\ntype CreateMarkdownComponentsOptions = {\n\tisResolvingImages?: boolean;\n};\n\nexport function createMarkdownComponents(\n\toptions: CreateMarkdownComponentsOptions = {},\n): Components {\n\treturn {\n\t\tp: ({ children }) => (\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 }) => {\n\t\t\tconst isInline = !codeClassName;\n\n\t\t\treturn isInline ? (\n\t\t\t\t<code className=\"payman-agent-code-inline rounded-md px-1.5 py-0.5 font-mono text-xs break-all\">\n\t\t\t\t\t{children}\n\t\t\t\t</code>\n\t\t\t) : (\n\t\t\t\t<code className=\"payman-agent-code-block my-2 block overflow-x-auto rounded-lg p-3 font-mono text-xs whitespace-pre\">\n\t\t\t\t\t{children}\n\t\t\t\t</code>\n\t\t\t);\n\t\t},\n\t\tpre: ({ children }) => (\n\t\t\t<pre className=\"my-2 max-w-full overflow-x-auto rounded-lg\">\n\t\t\t\t{children}\n\t\t\t</pre>\n\t\t),\n\t\tul: ({ children }) => (\n\t\t\t<ul className=\"mb-3 ml-4 list-disc space-y-1 text-sm\">{children}</ul>\n\t\t),\n\t\tol: ({ children }) => (\n\t\t\t<ol className=\"mb-3 ml-4 list-decimal space-y-1 text-sm\">{children}</ol>\n\t\t),\n\t\tli: ({ children }) => <li className=\"text-sm leading-relaxed\">{children}</li>,\n\t\th1: ({ children }) => (\n\t\t\t<h1 className=\"mt-4 mb-2 text-lg font-semibold first:mt-0\">{children}</h1>\n\t\t),\n\t\th2: ({ children }) => (\n\t\t\t<h2 className=\"mt-3 mb-2 text-base font-semibold first:mt-0\">\n\t\t\t\t{children}\n\t\t\t</h2>\n\t\t),\n\t\th3: ({ children }) => (\n\t\t\t<h3 className=\"mt-2 mb-1 text-sm font-semibold first:mt-0\">{children}</h3>\n\t\t),\n\t\tstrong: ({ children }) => <strong className=\"font-semibold\">{children}</strong>,\n\t\tem: ({ children }) => <em className=\"italic\">{children}</em>,\n\t\tblockquote: ({ children }) => (\n\t\t\t<blockquote className=\"payman-agent-blockquote my-2 pl-4 italic\">\n\t\t\t\t{children}\n\t\t\t</blockquote>\n\t\t),\n\t\thr: () => <hr className=\"payman-agent-hr my-4\" />,\n\t\ta: ({ href, children }) => (\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=\"payman-agent-link underline decoration-1 underline-offset-2\"\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</a>\n\t\t),\n\t\timg: ({ src, alt }) => (\n\t\t\t<MarkdownImage\n\t\t\t\tsrc={typeof src === \"string\" ? src : undefined}\n\t\t\t\talt={typeof alt === \"string\" ? alt : undefined}\n\t\t\t\tisResolving={options.isResolvingImages}\n\t\t\t/>\n\t\t),\n\t\ttable: ({ children }) => (\n\t\t\t<div className=\"relative my-4 -mx-1 w-full overflow-x-auto\">\n\t\t\t\t<table className=\"payman-agent-table min-w-full caption-bottom overflow-hidden rounded-lg text-sm\">\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 }) => (\n\t\t\t<thead className=\"payman-agent-thead [&_tr]:border-b\">{children}</thead>\n\t\t),\n\t\ttbody: ({ children }) => (\n\t\t\t<tbody className=\"[&_tr:last-child]:border-0\">{children}</tbody>\n\t\t),\n\t\ttr: ({ children }) => (\n\t\t\t<tr className=\"payman-agent-tr border-b transition-colors\">{children}</tr>\n\t\t),\n\t\tth: ({ children }) => (\n\t\t\t<th className=\"h-10 px-3 text-left align-middle text-xs font-medium whitespace-nowrap\">\n\t\t\t\t{children}\n\t\t\t</th>\n\t\t),\n\t\ttd: ({ children }) => (\n\t\t\t<td className=\"p-3 align-middle text-sm whitespace-nowrap\">{children}</td>\n\t\t),\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 { createMarkdownComponents } from \"./markdownComponents\";\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\tconst markdownRenderers = useMemo(\n\t\t() =>\n\t\t\tcreateMarkdownComponents({\n\t\t\t\tisResolvingImages: message.isResolvingImages,\n\t\t\t}),\n\t\t[message.isResolvingImages],\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={markdownRenderers}\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","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 } 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\temptyStateComponent,\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\", 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{/* Custom component (e.g. logo/illustration) from integrator */}\n\t\t\t\t\t{emptyStateComponent && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tinitial={{ scale: 0.9, opacity: 0 }}\n\t\t\t\t\t\t\tanimate={{ scale: 1, opacity: 1 }}\n\t\t\t\t\t\t\ttransition={{ delay: 0.05, duration: 0.45, ease: [0.25, 0.46, 0.45, 0.94] }}\n\t\t\t\t\t\t\tclassName=\"payman-empty-custom-component\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{emptyStateComponent}\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t\t<div className=\"payman-empty-text-group\">\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 { useCallback, useEffect } from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\n\nexport type ResetSessionConfirmModalProps = {\n\tisOpen: boolean;\n\tonClose: () => void;\n\tonConfirm: () => void;\n};\n\nexport function ResetSessionConfirmModal({\n\tisOpen,\n\tonClose,\n\tonConfirm,\n}: ResetSessionConfirmModalProps) {\n\tconst handleKeyDown = useCallback(\n\t\t(event: KeyboardEvent) => {\n\t\t\tif (event.key === \"Escape\") {\n\t\t\t\tonClose();\n\t\t\t}\n\t\t},\n\t\t[onClose],\n\t);\n\n\tuseEffect(() => {\n\t\tif (!isOpen || typeof document === \"undefined\") return;\n\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown);\n\t\tconst previousOverflow = document.body.style.overflow;\n\t\tdocument.body.style.overflow = \"hidden\";\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"keydown\", handleKeyDown);\n\t\t\tdocument.body.style.overflow = previousOverflow;\n\t\t};\n\t}, [handleKeyDown, isOpen]);\n\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{isOpen ? (\n\t\t\t\t<motion.div\n\t\t\t\t\tclassName=\"payman-reset-session-modal-backdrop\"\n\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\ttransition={{ duration: 0.18 }}\n\t\t\t\t\tonClick={onClose}\n\t\t\t\t\trole=\"presentation\"\n\t\t\t\t>\n\t\t\t\t\t<div className=\"payman-reset-session-modal-overlay\" />\n\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tinitial={{ opacity: 0, y: 12, scale: 0.98 }}\n\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\t\t\texit={{ opacity: 0, y: 8, scale: 0.98 }}\n\t\t\t\t\t\ttransition={{ duration: 0.2, ease: [0.16, 1, 0.3, 1] }}\n\t\t\t\t\t\tclassName=\"payman-reset-session-modal-dialog\"\n\t\t\t\t\t\tonClick={(event) => event.stopPropagation()}\n\t\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\t\taria-labelledby=\"payman-reset-session-title\"\n\t\t\t\t\t\taria-describedby=\"payman-reset-session-description\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"payman-reset-session-modal-copy\">\n\t\t\t\t\t\t\t<p className=\"payman-reset-session-modal-eyebrow\">\n\t\t\t\t\t\t\t\tNew Session\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<h2\n\t\t\t\t\t\t\t\tid=\"payman-reset-session-title\"\n\t\t\t\t\t\t\t\tclassName=\"payman-reset-session-modal-title\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tStart a new session?\n\t\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\tid=\"payman-reset-session-description\"\n\t\t\t\t\t\t\t\tclassName=\"payman-reset-session-modal-description\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tThis will clear the current conversation and start fresh.\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div className=\"payman-reset-session-modal-actions\">\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={onClose}\n\t\t\t\t\t\t\t\tclassName=\"payman-reset-session-modal-btn payman-reset-session-modal-btn-secondary\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tCancel\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={onConfirm}\n\t\t\t\t\t\t\t\tclassName=\"payman-reset-session-modal-btn payman-reset-session-modal-btn-primary\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tNew Session\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</motion.div>\n\t\t\t\t</motion.div>\n\t\t\t) : null}\n\t\t</AnimatePresence>\n\t);\n}\n","import { useEffect, useRef, useState } 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;\nconst COMPLETE_PULSE_MS = 400;\n\nexport function OtpInput({\n\tvalue,\n\tonChange,\n\tmaxLength,\n\tdisabled = false,\n\terror = false,\n}: OtpInputProps) {\n\tconst inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n\tconst [completePulse, setCompletePulse] = useState(false);\n\tconst prevLenRef = useRef(0);\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\tconst isFull =\n\t\tvalue.length === safeMaxLength && /^\\d+$/.test(value);\n\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\t// Trigger completion pulse when last digit is typed\n\tuseEffect(() => {\n\t\tlet t: number | undefined;\n\t\tif (isFull && prevLenRef.current < safeMaxLength) {\n\t\t\tsetCompletePulse(true);\n\t\t\tt = window.setTimeout(\n\t\t\t\t() => setCompletePulse(false),\n\t\t\t\tCOMPLETE_PULSE_MS\n\t\t\t);\n\t\t}\n\t\tprevLenRef.current = value.length;\n\t\treturn () => {\n\t\t\tif (typeof t === \"number\") {\n\t\t\t\twindow.clearTimeout(t);\n\t\t\t}\n\t\t};\n\t}, [isFull, value.length, safeMaxLength]);\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\n\t\t\tclassName={cn(\n\t\t\t\t\"flex justify-center\",\n\t\t\t\terror && \"payman-otp-shake\",\n\t\t\t\tcompletePulse && \"payman-otp-complete-pulse\"\n\t\t\t)}\n\t\t\tstyle={{ gap: 10 }}\n\t\t>\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\"text-center font-semibold rounded-lg\",\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\terror && \"payman-otp-input--error\"\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: 44,\n\t\t\t\t\t\theight: 50,\n\t\t\t\t\t\tfontSize: 20,\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\t/** Link-style actions (new layout) */\n\tRESEND_CODE: \"Resend OTP\",\n\tCANCEL_TRANSFER: \"Cancel Payment\",\n\t/** Short cancel label for payee approval flows */\n\tCANCEL: \"Cancel\",\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\tSECURED_BY_PREFIX: \"Secured by\",\n\tSECURED_BY_BRAND: \"Payman\",\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\n/**\n * Format backend amount string (e.g. \"2500.00\", \"53.00\") for display as USD.\n */\nexport function formatAmountForDisplay(amount: string): string {\n\tconst normalized = amount.replace(/,/g, \"\").trim();\n\tconst n = Number(normalized);\n\tif (!Number.isFinite(n)) {\n\t\treturn amount.startsWith(\"$\") ? amount : `$${amount}`;\n\t}\n\treturn new Intl.NumberFormat(\"en-US\", {\n\t\tstyle: \"currency\",\n\t\tcurrency: \"USD\",\n\t}).format(n);\n}\n","import { Loader2, X } from \"lucide-react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport paymanLogoMark from \"../../assets/payman-mono-crop-blue.png\";\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 { formatAmountForDisplay, getOtpSchemaFromRequest } from \"./utils\";\n\nconst OTP_ERROR_FLASH_MS = 600;\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 [otpError, setOtpError] = useState(false);\n\tconst dialogRef = useRef<HTMLDivElement | null>(null);\n\tconst previousFocusedRef = useRef<HTMLElement | null>(null);\n\tconst lastAutoSubmittedRef = useRef<string>(\"\");\n\tconst submitInFlightRef = useRef(false);\n\tconst submitGenerationRef = useRef(0);\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\tsetOtpError(false);\n\t\t\tlastAutoSubmittedRef.current = \"\";\n\t\t\tsubmitInFlightRef.current = false;\n\t\t\tsubmitGenerationRef.current += 1;\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\t// Wrong OTP — clearOtpTrigger fires, flash red + shake, then clear\n\tuseEffect(() => {\n\t\tif (clearOtpTrigger > 0) {\n\t\t\tsetOtpError(true);\n\t\t\tconst t = setTimeout(() => {\n\t\t\t\tsetOtpError(false);\n\t\t\t\tsetOtp(\"\");\n\t\t\t\tresetActionState();\n\t\t\t}, OTP_ERROR_FLASH_MS);\n\t\t\treturn () => clearTimeout(t);\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// Auto-submit when OTP is complete (digits only, length matches schema).\n\tuseEffect(() => {\n\t\tif (!isOpen || !userActionRequest) return;\n\t\tif (otp.length !== schema.maxLength || !/^\\d+$/.test(otp)) {\n\t\t\treturn;\n\t\t}\n\t\tif (isSubmitting || submitInFlightRef.current) return;\n\t\tif (lastAutoSubmittedRef.current === otp) return;\n\n\t\tlastAutoSubmittedRef.current = otp;\n\t\tsubmitInFlightRef.current = true;\n\t\tconst submitGeneration = submitGenerationRef.current;\n\n\t\tvoid (async () => {\n\t\t\tsetIsSubmitting(true);\n\t\t\tsetActionType(\"approve\");\n\t\t\ttry {\n\t\t\t\tawait onApprove(otp);\n\t\t\t} catch {\n\t\t\t\tif (submitGenerationRef.current !== submitGeneration) return;\n\t\t\t\tresetActionState();\n\t\t\t\tlastAutoSubmittedRef.current = otp;\n\t\t\t} finally {\n\t\t\t\tif (submitGenerationRef.current !== submitGeneration) return;\n\t\t\t\tsubmitInFlightRef.current = false;\n\t\t\t}\n\t\t})();\n\t}, [\n\t\totp,\n\t\tisOpen,\n\t\tisSubmitting,\n\t\tuserActionRequest,\n\t\tschema.maxLength,\n\t\tonApprove,\n\t\tresetActionState,\n\t]);\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 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 isPayment =\n\t\tuserActionRequest.userActionType === \"PAYMENT_APPROVAL\" &&\n\t\tBoolean(userActionRequest.metadata?.amount);\n\tconst isPayee =\n\t\tuserActionRequest.userActionType === \"PAYEE_APPROVAL\" &&\n\t\tBoolean(userActionRequest.metadata?.payeeName);\n\n\tconst isVerifying = actionType === \"approve\" && isSubmitting;\n\tconst isCancelling = actionType === \"reject\" && isSubmitting;\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<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<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: 440,\n\t\t\t\t\tminWidth: 0,\n\t\t\t\t}}\n\t\t\t>\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-user-action-message\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"relative w-full rounded-2xl 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: 440,\n\t\t\t\t\t\tboxSizing: \"border-box\",\n\t\t\t\t\t\tpadding: \"36px 32px 28px\",\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\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={handleReject}\n\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\tclassName=\"payman-modal-close-btn absolute flex items-center justify-center rounded-full border-0 bg-transparent p-0 cursor-pointer disabled:cursor-not-allowed\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\ttop: 12,\n\t\t\t\t\t\t\tright: 12,\n\t\t\t\t\t\t\twidth: 28,\n\t\t\t\t\t\t\theight: 28,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<X size={16} strokeWidth={2.5} />\n\t\t\t\t\t</button>\n\n\t\t\t\t\t<p\n\t\t\t\t\t\tid=\"payman-user-action-message\"\n\t\t\t\t\t\tclassName=\"text-center leading-snug\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tfontSize: 14,\n\t\t\t\t\t\t\tlineHeight: 1.5,\n\t\t\t\t\t\t\tmargin: \"0 0 20px\",\n\t\t\t\t\t\t\tpaddingRight: 24,\n\t\t\t\t\t\t\tpaddingLeft: 24,\n\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\"var(--payman-modal-desc-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{userActionRequest.message}\n\t\t\t\t\t</p>\n\n\t\t\t\t\t{isPayment && (\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tclassName=\"text-center font-semibold uppercase\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\t\tletterSpacing: \"0.08em\",\n\t\t\t\t\t\t\t\tmargin: \"0 0 4px\",\n\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-desc-fg, var(--payman-muted-foreground, #71717a))\",\n\t\t\t\t\t\t\t\topacity: 0.7,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tPay\n\t\t\t\t\t\t</p>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{isPayment && userActionRequest.metadata?.amount && (\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tclassName=\"text-center font-bold tabular-nums tracking-tight\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 42,\n\t\t\t\t\t\t\t\tlineHeight: 1.1,\n\t\t\t\t\t\t\t\tmargin: \"0 0 32px\",\n\t\t\t\t\t\t\t\tcolor: \"var(--payman-modal-hero-fg, #0a3b44)\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{formatAmountForDisplay(userActionRequest.metadata.amount)}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{isPayee && (\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tclassName=\"text-center font-semibold uppercase\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\t\tletterSpacing: \"0.08em\",\n\t\t\t\t\t\t\t\tmargin: \"0 0 4px\",\n\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-desc-fg, var(--payman-muted-foreground, #71717a))\",\n\t\t\t\t\t\t\t\topacity: 0.7,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tCreate Payee\n\t\t\t\t\t\t</p>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{isPayee && userActionRequest.metadata?.payeeName && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName=\"text-center\"\n\t\t\t\t\t\t\tstyle={{ margin: \"0 0 32px\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\tclassName=\"font-bold leading-tight\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tfontSize: 28,\n\t\t\t\t\t\t\t\t\tmargin: \"0 0 4px\",\n\t\t\t\t\t\t\t\t\tcolor: \"var(--payman-modal-hero-fg, #0a3b44)\",\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{userActionRequest.metadata.payeeName}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t{userActionRequest.metadata.payeeType ? (\n\t\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\t\tclassName=\"font-semibold uppercase\"\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tfontSize: 10,\n\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.08em\",\n\t\t\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t\t\t\tcolor: \"var(--payman-modal-hero-fg, #0a3b44)\",\n\t\t\t\t\t\t\t\t\t\topacity: 0.85,\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{userActionRequest.metadata.payeeType}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<div style={{ marginBottom: 30 }}>\n\t\t\t\t\t\t<OtpInput\n\t\t\t\t\t\t\tvalue={otp}\n\t\t\t\t\t\t\tonChange={setOtp}\n\t\t\t\t\t\t\tmaxLength={schema.maxLength}\n\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\terror={otpError}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{isVerifying ? (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName=\"flex items-center justify-center gap-2\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tmarginTop: 10,\n\t\t\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\t\t\tcolor: \"var(--payman-modal-hero-fg, #0a3b44)\",\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<Loader2\n\t\t\t\t\t\t\t\t\tclassName=\"animate-spin shrink-0\"\n\t\t\t\t\t\t\t\t\tstyle={{ width: 14, height: 14 }}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<span className=\"font-medium\">\n\t\t\t\t\t\t\t\t\t{MODAL_CONTENT.LOADING_APPROVE}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"flex flex-col items-center\"\n\t\t\t\t\t\tstyle={{ gap: 12, marginBottom: 32 }}\n\t\t\t\t\t>\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={handleResend}\n\t\t\t\t\t\t\tdisabled={isSubmitting || resendCooldownRemaining > 0}\n\t\t\t\t\t\t\tclassName=\"payman-modal-link-resend border-0 bg-transparent p-0 cursor-pointer font-semibold transition-colors disabled:cursor-not-allowed disabled:opacity-40\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 11,\n\t\t\t\t\t\t\t\tletterSpacing: \"0.06em\",\n\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-desc-fg, var(--payman-muted-foreground, #71717a))\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{actionType === \"resend\" ? (\n\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1.5\">\n\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 animate-spin\" />\n\t\t\t\t\t\t\t\t\t{MODAL_CONTENT.LOADING_RESEND}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t) : resendCooldownRemaining > 0 ? (\n\t\t\t\t\t\t\t\t`${MODAL_CONTENT.RESEND_AVAILABLE_IN} ${resendCooldownRemaining}s`\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\tBUTTON_LABELS.RESEND_CODE\n\t\t\t\t\t\t\t)}\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={handleReject}\n\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\tclassName=\"payman-modal-link-cancel border-0 bg-transparent p-0 cursor-pointer font-semibold transition-colors disabled:cursor-not-allowed disabled:opacity-40\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 11,\n\t\t\t\t\t\t\t\tletterSpacing: \"0.06em\",\n\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-desc-fg, var(--payman-muted-foreground, #71717a))\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{isCancelling ? (\n\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1.5\">\n\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 animate-spin\" />\n\t\t\t\t\t\t\t\t\t{MODAL_CONTENT.LOADING_REJECT}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t) : isPayee ? (\n\t\t\t\t\t\t\t\tBUTTON_LABELS.CANCEL\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\tBUTTON_LABELS.CANCEL_TRANSFER\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"flex flex-row flex-nowrap items-center justify-center gap-1.5\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tborderTop:\n\t\t\t\t\t\t\t\t\"1px solid var(--payman-modal-dialog-border, var(--payman-border, #e4e4e7))\",\n\t\t\t\t\t\t\tpaddingTop: 20,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclassName=\"font-medium whitespace-nowrap\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 11,\n\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-desc-fg, var(--payman-muted-foreground, #71717a))\",\n\t\t\t\t\t\t\t\topacity: 0.9,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{MODAL_CONTENT.SECURED_BY_PREFIX}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\tsrc={paymanLogoMark}\n\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\theight: 18,\n\t\t\t\t\t\t\t\twidth: \"auto\",\n\t\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\t\tobjectFit: \"contain\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tdraggable={false}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclassName=\"font-bold whitespace-nowrap\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\n\t\t\t\t\t\t\t\tcolor: \"var(--payman-modal-brand-fg, #0a3b44)\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{MODAL_CONTENT.SECURED_BY_BRAND}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import type { ReactNode } from \"react\";\n\ntype ActionTooltipV2Props = {\n\tlabel: string;\n\tchildren: ReactNode;\n};\n\nexport function ActionTooltipV2({ label, children }: ActionTooltipV2Props) {\n\treturn (\n\t\t<div className=\"payman-v2-tooltip\">\n\t\t\t{children}\n\t\t\t<div aria-hidden=\"true\" className=\"payman-v2-tooltip-content\">\n\t\t\t\t<div className=\"payman-v2-tooltip-text\">\n\t\t\t\t\t{label}\n\t\t\t\t\t<div className=\"payman-v2-tooltip-arrow\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { createPortal } from \"react-dom\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n\tAlertCircle,\n\tCheck,\n\tCopy,\n\tPencil,\n\tRotateCcw,\n} from \"lucide-react\";\nimport { ActionTooltipV2 } from \"./ActionTooltipV2\";\nimport { cn } from \"../../utils/cn\";\nimport type { MessageDisplay, UserMessageActionsConfig } from \"../../types\";\n\nexport type UserMessageV2Props = {\n\tmessage: MessageDisplay;\n\tonEdit?: (messageId: string) => void;\n\tonRetry?: (messageId: string) => void;\n\tretryDisabled?: boolean;\n\tactions?: UserMessageActionsConfig;\n};\n\ntype ToastState = {\n\tlabel: string;\n\ttone: \"success\" | \"error\";\n} | null;\n\nfunction formatMessageTime(timestamp: string): string {\n\tconst value = new Date(timestamp);\n\tif (Number.isNaN(value.getTime())) return \"\";\n\treturn new Intl.DateTimeFormat(undefined, {\n\t\thour: \"numeric\",\n\t\tminute: \"2-digit\",\n\t}).format(value);\n}\n\nexport function UserMessageV2({\n\tmessage,\n\tonEdit,\n\tonRetry,\n\tretryDisabled = false,\n\tactions,\n}: UserMessageV2Props) {\n\tconst [copied, setCopied] = useState(false);\n\tconst [toast, setToast] = useState<ToastState>(null);\n\tconst copyResetTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst toastTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst showCopyAction = actions?.copy ?? true;\n\tconst showEditAction = actions?.edit ?? false;\n\tconst showRetryAction = actions?.retry ?? false;\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (copyResetTimerRef.current) clearTimeout(copyResetTimerRef.current);\n\t\t\tif (toastTimerRef.current) clearTimeout(toastTimerRef.current);\n\t\t};\n\t}, []);\n\n\tconst showToast = (label: string, tone: \"success\" | \"error\") => {\n\t\tif (toastTimerRef.current) clearTimeout(toastTimerRef.current);\n\t\tsetToast({ label, tone });\n\t\ttoastTimerRef.current = setTimeout(() => setToast(null), 1800);\n\t};\n\n\tconst handleCopy = async () => {\n\t\ttry {\n\t\t\tif (!navigator.clipboard?.writeText) {\n\t\t\t\tthrow new Error(\"Clipboard unavailable\");\n\t\t\t}\n\t\t\tawait navigator.clipboard.writeText(message.content);\n\t\t\tif (copyResetTimerRef.current) clearTimeout(copyResetTimerRef.current);\n\t\t\tsetCopied(true);\n\t\t\tcopyResetTimerRef.current = setTimeout(() => setCopied(false), 1800);\n\t\t\tshowToast(\"Copied to clipboard\", \"success\");\n\t\t} catch {\n\t\t\tsetCopied(false);\n\t\t\tshowToast(\"Could not copy\", \"error\");\n\t\t}\n\t};\n\n\tconst timestamp = formatMessageTime(message.timestamp);\n\tconst hasVisibleActions =\n\t\tshowCopyAction || (showEditAction && !!onEdit) || (showRetryAction && !!onRetry);\n\n\tconst toastPortal =\n\t\ttypeof document !== \"undefined\"\n\t\t\t? createPortal(\n\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t{toast && (\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: -18, scale: 0.96 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\t\t\t\t\texit={{ opacity: 0, y: -12, scale: 0.96 }}\n\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\ttype: \"spring\",\n\t\t\t\t\t\t\t\t\tstiffness: 360,\n\t\t\t\t\t\t\t\t\tdamping: 26,\n\t\t\t\t\t\t\t\t\tmass: 0.7,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName=\"payman-v2-toast\"\n\t\t\t\t\t\t\t\trole=\"status\"\n\t\t\t\t\t\t\t\taria-live=\"polite\"\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-v2-toast-inner\",\n\t\t\t\t\t\t\t\t\t\ttoast.tone === \"success\"\n\t\t\t\t\t\t\t\t\t\t\t? \"payman-v2-toast-success\"\n\t\t\t\t\t\t\t\t\t\t\t: \"payman-v2-toast-error\",\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{toast.tone === \"success\" ? (\n\t\t\t\t\t\t\t\t\t\t<Check className=\"h-4 w-4\" style={{ color: \"#059669\" }} />\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<AlertCircle\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-4 w-4\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ color: \"#ef4444\" }}\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<span>{toast.label}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AnimatePresence>,\n\t\t\t\t\tdocument.body,\n\t\t\t\t)\n\t\t\t: null;\n\n\treturn (\n\t\t<>\n\t\t\t{toastPortal}\n\n\t\t\t<div className=\"payman-v2-user-msg payman-v2-fade-in\">\n\t\t\t\t<div className=\"payman-v2-user-msg-group\">\n\t\t\t\t\t<div className=\"payman-v2-user-msg-bubble\">\n\t\t\t\t\t\t<p className=\"payman-v2-user-msg-text\">{message.content}</p>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{message.isError && message.errorDetails && (\n\t\t\t\t\t\t<div className=\"payman-v2-user-msg-error\">\n\t\t\t\t\t\t\t<AlertCircle\n\t\t\t\t\t\t\t\tclassName=\"h-3.5 w-3.5 shrink-0\"\n\t\t\t\t\t\t\t\tstyle={{ color: \"rgba(239, 68, 68, 0.7)\", marginTop: \"2px\" }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<p className=\"payman-v2-user-msg-error-text\">\n\t\t\t\t\t\t\t\t{message.errorDetails}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{(timestamp || hasVisibleActions) && (\n\t\t\t\t\t\t<div className=\"payman-v2-user-msg-actions\">\n\t\t\t\t\t\t\t{timestamp ? (\n\t\t\t\t\t\t\t\t<span className=\"payman-v2-user-msg-timestamp\">{timestamp}</span>\n\t\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t\t{showCopyAction && (\n\t\t\t\t\t\t\t\t<ActionTooltipV2 label=\"Copy\">\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => void handleCopy()}\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-user-msg-action-btn\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Copy message\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{copied ? (\n\t\t\t\t\t\t\t\t\t\t\t<Check\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-3.5 w-3.5\"\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={{ color: \"#059669\" }}\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<Copy className=\"h-3.5 w-3.5\" />\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</ActionTooltipV2>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{showEditAction && onEdit && (\n\t\t\t\t\t\t\t\t<ActionTooltipV2 label=\"Edit\">\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => onEdit(message.id)}\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-user-msg-action-btn\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Edit message\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Pencil className=\"h-3.5 w-3.5\" />\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</ActionTooltipV2>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{showRetryAction && onRetry && (\n\t\t\t\t\t\t\t\t<ActionTooltipV2 label=\"Retry\">\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => onRetry(message.id)}\n\t\t\t\t\t\t\t\t\t\tdisabled={retryDisabled}\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-user-msg-action-btn\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Retry message\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<RotateCcw className=\"h-3.5 w-3.5\" />\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</ActionTooltipV2>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n","import {\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n\ttype CSSProperties,\n} from \"react\";\nimport { Loader2, ImageOff, Eye } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\n\nconst RAG_IMAGE_PATH_REGEX =\n\t/^(?:https?:\\/\\/[^/\\s]+)?\\/api\\/rag\\/chunks\\/[^\"'\\s]+\\/image(?:[?#][^\"'\\s]*)?$/;\n\nfunction isUnresolvedRagImageSource(src: string) {\n\treturn RAG_IMAGE_PATH_REGEX.test(src);\n}\n\nexport type MarkdownImageV2Props = {\n\tsrc?: string;\n\talt?: string;\n\tisResolving?: boolean;\n\tonImageClick?: (src: string, alt: string) => void;\n};\n\nconst frameStyle: CSSProperties = {\n\twidth: \"min(100%, 32rem)\",\n\tmaxWidth: \"100%\",\n};\n\nconst imgStyle: CSSProperties = {\n\tdisplay: \"block\",\n\twidth: \"100%\",\n\theight: \"auto\",\n\tmaxWidth: \"100%\",\n\tmaxHeight: \"22rem\",\n\tobjectFit: \"contain\",\n};\n\nexport function MarkdownImageV2({\n\tsrc,\n\talt,\n\tisResolving = false,\n\tonImageClick,\n}: MarkdownImageV2Props) {\n\tconst [isVisible, setIsVisible] = useState(false);\n\tconst [isLoaded, setIsLoaded] = useState(false);\n\tconst [hasError, setHasError] = useState(false);\n\tconst [retryCount, setRetryCount] = useState(0);\n\tconst sentinelRef = useRef<HTMLSpanElement>(null);\n\n\tconst isUnresolvedRag = useMemo(\n\t\t() => (src ? isUnresolvedRagImageSource(src) : false),\n\t\t[src],\n\t);\n\tconst isResolvingRag = Boolean(isResolving && isUnresolvedRag);\n\n\tuseEffect(() => {\n\t\tsetIsLoaded(false);\n\t\tsetHasError(false);\n\t\tsetRetryCount(0);\n\t\tsetIsVisible(false);\n\t}, [src]);\n\n\tuseEffect(() => {\n\t\tconst el = sentinelRef.current;\n\t\tif (!el || !src) return;\n\n\t\tconst observer = new IntersectionObserver(\n\t\t\t([entry]) => {\n\t\t\t\tif (entry.isIntersecting) {\n\t\t\t\t\tsetIsVisible(true);\n\t\t\t\t\tobserver.disconnect();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ rootMargin: \"200px\" },\n\t\t);\n\n\t\tobserver.observe(el);\n\t\treturn () => observer.disconnect();\n\t}, [src]);\n\n\tif (!src) return null;\n\n\tif (isResolvingRag) {\n\t\treturn (\n\t\t\t<span\n\t\t\t\tclassName={cn(\"payman-v2-md-image\", \"payman-v2-md-image-resolving\")}\n\t\t\t>\n\t\t\t\t<span className=\"payman-v2-md-image-resolving-inner\">\n\t\t\t\t\t<Loader2 className=\"payman-v2-md-image-loading\" aria-hidden />\n\t\t\t\t\t<span>Loading image</span>\n\t\t\t\t\t<span>Reference image</span>\n\t\t\t\t</span>\n\t\t\t</span>\n\t\t);\n\t}\n\n\tif (hasError) {\n\t\treturn (\n\t\t\t<span className={cn(\"payman-v2-md-image\", \"payman-v2-md-image-error\")}>\n\t\t\t\t<ImageOff aria-hidden />\n\t\t\t\t<span>Unable to load image</span>\n\t\t\t\t{alt ? <span>{alt}</span> : null}\n\t\t\t\t{retryCount < 3 ? (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"payman-v2-md-image-error-retry\"\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tsetHasError(false);\n\t\t\t\t\t\t\tsetRetryCount((c) => c + 1);\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tRetry\n\t\t\t\t\t</button>\n\t\t\t\t) : null}\n\t\t\t</span>\n\t\t);\n\t}\n\n\tconst imgSrc =\n\t\tretryCount > 0\n\t\t\t? `${src}${src.includes(\"?\") ? \"&\" : \"?\"}_r=${retryCount}`\n\t\t\t: src;\n\n\treturn (\n\t\t<span ref={sentinelRef} className=\"payman-v2-md-image\">\n\t\t\t{isVisible ? (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName=\"payman-v2-md-image-button\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tif (isLoaded && src) onImageClick?.(src, alt || \"Image\");\n\t\t\t\t\t}}\n\t\t\t\t\tdisabled={!isLoaded}\n\t\t\t\t\taria-busy={!isLoaded}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t...frameStyle,\n\t\t\t\t\t\t...(!isLoaded ? { minHeight: \"10rem\" } : {}),\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{!isLoaded && (\n\t\t\t\t\t\t<span className=\"payman-v2-md-image-placeholder\">\n\t\t\t\t\t\t\t<Loader2\n\t\t\t\t\t\t\t\tclassName=\"payman-v2-md-image-loading\"\n\t\t\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<span>Loading image…</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={imgSrc}\n\t\t\t\t\t\talt={alt || \"\"}\n\t\t\t\t\t\tclassName=\"payman-v2-md-image-img\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t...imgStyle,\n\t\t\t\t\t\t\topacity: isLoaded ? 1 : 0,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonLoad={() => {\n\t\t\t\t\t\t\tsetHasError(false);\n\t\t\t\t\t\t\tsetIsLoaded(true);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonError={() => {\n\t\t\t\t\t\t\tsetIsLoaded(false);\n\t\t\t\t\t\t\tsetHasError(true);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\n\t\t\t\t\t{isLoaded ? (\n\t\t\t\t\t\t<span className=\"payman-v2-md-image-overlay\" aria-hidden>\n\t\t\t\t\t\t\t<span className=\"payman-v2-md-image-overlay-icon\">\n\t\t\t\t\t\t\t\t<Eye />\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) : null}\n\t\t\t\t</button>\n\t\t\t) : (\n\t\t\t\t<span\n\t\t\t\t\tclassName=\"payman-v2-md-image-placeholder\"\n\t\t\t\t\tstyle={{ ...frameStyle, minHeight: \"10rem\" }}\n\t\t\t\t>\n\t\t\t\t\t<span>Image</span>\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</span>\n\t);\n}\n","import ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport type { Components } from \"react-markdown\";\nimport { useMemo } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { MarkdownImageV2 } from \"./MarkdownImageV2\";\n\nexport type MarkdownRendererV2Props = {\n\tcontent: string;\n\tisStreaming?: boolean;\n\tisResolvingImages?: boolean;\n\tonImageClick?: (src: string, alt: string) => void;\n};\n\nfunction buildComponents(\n\tonImageClick?: (src: string, alt: string) => void,\n\tisResolvingImages?: boolean,\n): Components {\n\treturn {\n\t\tp: ({ children }) => <p>{children}</p>,\n\t\tcode: ({ children }) => <code>{children}</code>,\n\t\tpre: ({ children }) => (\n\t\t\t<div className=\"payman-v2-markdown-pre\">\n\t\t\t\t<pre>{children}</pre>\n\t\t\t</div>\n\t\t),\n\t\tul: ({ children }) => <ul>{children}</ul>,\n\t\tol: ({ children }) => <ol>{children}</ol>,\n\t\tli: ({ children }) => <li>{children}</li>,\n\t\th1: ({ children }) => <h1>{children}</h1>,\n\t\th2: ({ children }) => <h2>{children}</h2>,\n\t\th3: ({ children }) => <h3>{children}</h3>,\n\t\tstrong: ({ children }) => <strong>{children}</strong>,\n\t\tem: ({ children }) => <em>{children}</em>,\n\t\tblockquote: ({ children }) => <blockquote>{children}</blockquote>,\n\t\thr: () => <hr />,\n\t\ta: ({ href, children }) => (\n\t\t\t<a href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n\t\t\t\t{children}\n\t\t\t</a>\n\t\t),\n\t\timg: ({ src, alt }) => (\n\t\t\t<MarkdownImageV2\n\t\t\t\tsrc={typeof src === \"string\" ? src : undefined}\n\t\t\t\talt={typeof alt === \"string\" ? alt : undefined}\n\t\t\t\tisResolving={isResolvingImages}\n\t\t\t\tonImageClick={onImageClick}\n\t\t\t/>\n\t\t),\n\t\ttable: ({ children }) => (\n\t\t\t<div className=\"payman-v2-markdown-table-wrapper\">\n\t\t\t\t<table className=\"payman-v2-markdown-table\">{children}</table>\n\t\t\t</div>\n\t\t),\n\t\tthead: ({ children }) => (\n\t\t\t<thead className=\"payman-v2-markdown-thead\">{children}</thead>\n\t\t),\n\t\ttbody: ({ children }) => (\n\t\t\t<tbody className=\"payman-v2-markdown-tbody\">{children}</tbody>\n\t\t),\n\t\tth: ({ children }) => (\n\t\t\t<th className=\"payman-v2-markdown-th\">{children}</th>\n\t\t),\n\t\ttd: ({ children }) => (\n\t\t\t<td className=\"payman-v2-markdown-td\">{children}</td>\n\t\t),\n\t};\n}\n\nexport function MarkdownRendererV2({\n\tcontent,\n\tisStreaming,\n\tisResolvingImages,\n\tonImageClick,\n}: MarkdownRendererV2Props) {\n\tconst components = useMemo(\n\t\t() => buildComponents(onImageClick, isResolvingImages),\n\t\t[onImageClick, isResolvingImages],\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"payman-v2-markdown\",\n\t\t\t\tisStreaming && \"payman-v2-streaming-cursor\",\n\t\t\t)}\n\t\t>\n\t\t\t<ReactMarkdown remarkPlugins={[remarkGfm]} components={components}>\n\t\t\t\t{content}\n\t\t\t</ReactMarkdown>\n\t\t</div>\n\t);\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { ChevronRight } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\n\nexport const CURSOR_MESSAGES = [\n\t\"Analyzing\",\n\t\"Processing\",\n\t\"Calculating\",\n\t\"Reviewing\",\n\t\"Verifying\",\n\t\"Assessing\",\n\t\"Evaluating\",\n\t\"Checking\",\n\t\"Planning\",\n\t\"Updating\",\n\t\"Validating\",\n\t\"Monitoring\",\n\t\"Optimizing\",\n\t\"Reconciling\",\n\t\"Forecasting\",\n\t\"Inspecting\",\n\t\"Organizing\",\n\t\"Sorting\",\n\t\"Scanning\",\n\t\"Balancing\",\n\t\"Summarizing\",\n\t\"Predicting\",\n\t\"Comparing\",\n\t\"Tracking\",\n\t\"Adjusting\",\n\t\"Examining\",\n\t\"Mapping\",\n\t\"Modeling\",\n\t\"Reporting\",\n\t\"Confirming\",\n] as const;\n\nexport const FINAL_CURSOR_MESSAGE = \"Finishing up\";\n\ntype ThinkingLine =\n\t| { type: \"statement\"; text: string }\n\t| { type: \"detail\"; text: string }\n\t| { type: \"status\"; variant: \"success\" | \"error\"; text: string };\n\nfunction parseThinkingContent(content: string): ThinkingLine[] {\n\tconst lines = content.split(\"\\n\");\n\tconst out: ThinkingLine[] = [];\n\tfor (const raw of lines) {\n\t\tconst line = raw.trim();\n\t\tif (!line) continue;\n\n\t\tconst stmt = line.match(/^\\*\\*(.+)\\*\\*$/);\n\t\tif (stmt) {\n\t\t\tout.push({ type: \"statement\", text: stmt[1].trim() });\n\t\t\tcontinue;\n\t\t}\n\t\tif (line.startsWith(\"✓ \")) {\n\t\t\tout.push({\n\t\t\t\ttype: \"status\",\n\t\t\t\tvariant: \"success\",\n\t\t\t\ttext: line.slice(2).trim(),\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (line.startsWith(\"✗ \")) {\n\t\t\tout.push({\n\t\t\t\ttype: \"status\",\n\t\t\t\tvariant: \"error\",\n\t\t\t\ttext: line.slice(2).trim(),\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tout.push({ type: \"detail\", text: line });\n\t}\n\treturn out;\n}\n\nexport type ThinkingBlockV2Props = {\n\tcontent: string;\n\tisStreaming: boolean;\n\tdurationSec?: number;\n};\n\nexport function ThinkingBlockV2({\n\tcontent,\n\tisStreaming,\n\tdurationSec,\n}: ThinkingBlockV2Props) {\n\tconst [open, setOpen] = useState(true);\n\tconst [cursorIdx, setCursorIdx] = useState(0);\n\tconst prevStreaming = useRef(isStreaming);\n\n\tconst parsed = useMemo(() => parseThinkingContent(content), [content]);\n\n\tconst isFinalizingPhase = useMemo(() => {\n\t\tconst statements = parsed.filter(\n\t\t\t(l): l is Extract<ThinkingLine, { type: \"statement\" }> =>\n\t\t\t\tl.type === \"statement\",\n\t\t);\n\t\treturn (\n\t\t\tstatements.length > 0 &&\n\t\t\tstatements[statements.length - 1].text === \"Finalizing\"\n\t\t);\n\t}, [parsed]);\n\n\tuseEffect(() => {\n\t\tif (prevStreaming.current && !isStreaming) {\n\t\t\tsetOpen(false);\n\t\t}\n\t\tprevStreaming.current = isStreaming;\n\t}, [isStreaming]);\n\n\tuseEffect(() => {\n\t\tif (!isStreaming || isFinalizingPhase) return;\n\t\tconst id = window.setInterval(() => {\n\t\t\tsetCursorIdx((i) => (i + 1) % CURSOR_MESSAGES.length);\n\t\t}, 4000);\n\t\treturn () => window.clearInterval(id);\n\t}, [isStreaming, isFinalizingPhase]);\n\n\tconst headerLabel = isStreaming ? (\n\t\t<span className=\"payman-v2-thinking-shimmer\">Working on it…</span>\n\t) : durationSec !== undefined ? (\n\t\t<span>Thought for {durationSec}s</span>\n\t) : (\n\t\t<span>Thought</span>\n\t);\n\n\tconst cursorKey = isFinalizingPhase ? \"finalizing\" : String(cursorIdx);\n\tconst cursorText = isFinalizingPhase\n\t\t? FINAL_CURSOR_MESSAGE\n\t\t: CURSOR_MESSAGES[cursorIdx];\n\n\treturn (\n\t\t<div className=\"payman-v2-thinking\">\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName=\"payman-v2-thinking-toggle\"\n\t\t\t\tonClick={() => setOpen((o) => !o)}\n\t\t\t\taria-expanded={open}\n\t\t\t>\n\t\t\t\t<ChevronRight\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"payman-v2-thinking-chevron\",\n\t\t\t\t\t\topen && \"payman-v2-thinking-chevron-open\",\n\t\t\t\t\t)}\n\t\t\t\t\taria-hidden\n\t\t\t\t/>\n\t\t\t\t{headerLabel}\n\t\t\t</button>\n\n\t\t\t<div className=\"payman-v2-thinking-border\">\n\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t{open && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tkey=\"thinking-content\"\n\t\t\t\t\t\t\tclassName=\"payman-v2-thinking-content\"\n\t\t\t\t\t\t\tinitial={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\t\tanimate={{ height: \"auto\", opacity: 1 }}\n\t\t\t\t\t\t\texit={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\t\ttransition={{ duration: 0.2, ease: \"easeInOut\" }}\n\t\t\t\t\t\t\tstyle={{ overflow: \"hidden\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t{parsed.map((item, i) => {\n\t\t\t\t\t\t\t\t\tif (item.type === \"statement\") {\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-thinking-statement\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{item.text}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (item.type === \"detail\") {\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-thinking-detail\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{item.text}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tkey={i}\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\"payman-v2-thinking-status\",\n\t\t\t\t\t\t\t\t\t\t\t\titem.variant === \"success\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"payman-v2-thinking-status-success\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"payman-v2-thinking-status-error\",\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{item.text}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\n\t\t\t\t\t\t\t\t{isStreaming && (\n\t\t\t\t\t\t\t\t\t<div className=\"payman-v2-thinking-cursor\">\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-thinking-cursor-bar\"\n\t\t\t\t\t\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t\t\t\t\t\t\t<motion.span\n\t\t\t\t\t\t\t\t\t\t\t\tkey={cursorKey}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-thinking-cursor-label\"\n\t\t\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 4 }}\n\t\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\t\t\t\t\t\texit={{ opacity: 0, y: -4 }}\n\t\t\t\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{cursorText}\n\t\t\t\t\t\t\t\t\t\t\t</motion.span>\n\t\t\t\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { useEffect, useRef, useState } from \"react\";\n\n/**\n * Progressively reveals `targetText` char-by-char, matching the demo's\n * typing-loop feel for both thinking content and the final response.\n *\n * - While `enabled` is true the hook keeps a \"displayed\" buffer and\n * advances it toward the current `targetText` one character at a time.\n * - If new text is appended to `targetText` mid-animation, the loop\n * picks up from where it left off.\n * - When `enabled` becomes false the remaining text is flushed instantly\n * (e.g. when thinking ends and we auto-collapse).\n */\n\ntype SpeedProfile = {\n\tnormal: [number, number];\n\tfast: number;\n\tpunctuation: [number, number];\n\tnewline: [number, number];\n\tidle: number;\n};\n\nexport const THINKING_SPEED: SpeedProfile = {\n\tnormal: [6, 8],\n\tfast: 1,\n\tpunctuation: [20, 30],\n\tnewline: [12, 18],\n\tidle: 30,\n};\n\nexport const RESPONSE_SPEED: SpeedProfile = {\n\tnormal: [4, 8],\n\tfast: 1,\n\tpunctuation: [20, 30],\n\tnewline: [10, 15],\n\tidle: 30,\n};\n\nfunction charDelay(char: string, speed: SpeedProfile): number {\n\tif (char === \"*\") return speed.fast;\n\tif (char === \"\\n\") return speed.newline[0] + Math.random() * speed.newline[1];\n\tif (\".!?,;:\".includes(char))\n\t\treturn speed.punctuation[0] + Math.random() * speed.punctuation[1];\n\treturn speed.normal[0] + Math.random() * speed.normal[1];\n}\n\nexport function useTypingEffect(\n\ttargetText: string,\n\tenabled: boolean,\n\tspeed: SpeedProfile = RESPONSE_SPEED,\n\tinitialDisplayedText?: string,\n): { displayedText: string; isTyping: boolean } {\n\tconst [displayedText, setDisplayedText] = useState(\"\");\n\tconst displayedRef = useRef(\"\");\n\tconst targetRef = useRef(targetText);\n\tconst enabledRef = useRef(enabled);\n\tconst initialDisplayedRef = useRef(initialDisplayedText);\n\tconst timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst runningRef = useRef(false);\n\n\ttargetRef.current = targetText;\n\tenabledRef.current = enabled;\n\tinitialDisplayedRef.current = initialDisplayedText;\n\n\tuseEffect(() => {\n\t\tif (!enabled) {\n\t\t\tif (timerRef.current) {\n\t\t\t\tclearTimeout(timerRef.current);\n\t\t\t\ttimerRef.current = null;\n\t\t\t}\n\t\t\trunningRef.current = false;\n\t\t\tdisplayedRef.current = targetText;\n\t\t\tsetDisplayedText(targetText);\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tdisplayedRef.current.length === 0 &&\n\t\t\tinitialDisplayedRef.current &&\n\t\t\ttargetRef.current.startsWith(initialDisplayedRef.current)\n\t\t) {\n\t\t\tdisplayedRef.current = initialDisplayedRef.current;\n\t\t\tsetDisplayedText(initialDisplayedRef.current);\n\t\t}\n\n\t\tif (runningRef.current) return;\n\t\trunningRef.current = true;\n\n\t\tconst tick = () => {\n\t\t\tif (!enabledRef.current) {\n\t\t\t\trunningRef.current = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (displayedRef.current.length < targetRef.current.length) {\n\t\t\t\tconst nextChar = targetRef.current[displayedRef.current.length];\n\t\t\t\tdisplayedRef.current += nextChar;\n\t\t\t\tsetDisplayedText(displayedRef.current);\n\t\t\t\tconst delay = charDelay(nextChar, speed);\n\t\t\t\ttimerRef.current = setTimeout(tick, delay);\n\t\t\t} else {\n\t\t\t\ttimerRef.current = setTimeout(tick, speed.idle);\n\t\t\t}\n\t\t};\n\n\t\ttick();\n\n\t\treturn () => {\n\t\t\tif (timerRef.current) {\n\t\t\t\tclearTimeout(timerRef.current);\n\t\t\t\ttimerRef.current = null;\n\t\t\t}\n\t\t\trunningRef.current = false;\n\t\t};\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [enabled]);\n\n\tconst isTyping =\n\t\tenabled && displayedRef.current.length < targetRef.current.length;\n\n\treturn {\n\t\tdisplayedText: enabled ? displayedText : targetText,\n\t\tisTyping,\n\t};\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport {\n\tCopy,\n\tCheck,\n\tAlertCircle,\n\tWifiOff,\n\tSearchCode,\n} from \"lucide-react\";\nimport { buildFormattedThinking } from \"@paymanai/payman-typescript-ask-sdk\";\nimport type {\n\tAssistantMessageActionsConfig,\n\tMessageDisplay,\n} from \"../../types\";\nimport { MarkdownRendererV2 } from \"./MarkdownRendererV2\";\nimport { ThinkingBlockV2 } from \"./ThinkingBlockV2\";\nimport { ActionTooltipV2 } from \"./ActionTooltipV2\";\nimport { cn } from \"../../utils/cn\";\nimport { useTypingEffect, THINKING_SPEED, RESPONSE_SPEED } from \"./useTypingEffect\";\n\nexport type AssistantMessageV2Props = {\n\tmessage: MessageDisplay;\n\tonImageClick?: (src: string, alt: string) => void;\n\tonExecutionTraceClick?: (data: {\n\t\tmessage: MessageDisplay;\n\t\ttracingData?: unknown;\n\t\texecutionId?: string;\n\t}) => void;\n\tactions?: AssistantMessageActionsConfig;\n};\n\ntype ToastState = {\n\tlabel: string;\n\ttone: \"success\" | \"error\";\n} | null;\n\nconst INITIAL_THINKING_PLACEHOLDER = [\n\t\"**Getting things ready**\",\n\t\"Putting things together\",\n].join(\"\\n\");\n\n/**\n * Get the formatted thinking text for v2 display.\n * Uses the pre-computed formattedThinkingText from the TS SDK when available,\n * falls back to building it from steps + allThinkingText.\n */\nfunction getFormattedThinking(\n\tmessage: MessageDisplay,\n\tincludeInitialPlaceholder = false,\n): string {\n\tconst plainThinkingText =\n\t\tmessage.allThinkingText || message.activeThinkingText || \"\";\n\n\tconst baseText = message.formattedThinkingText ||\n\t\tbuildFormattedThinking(message.steps, plainThinkingText);\n\n\tif (includeInitialPlaceholder && baseText) {\n\t\treturn INITIAL_THINKING_PLACEHOLDER + \"\\n\" + baseText;\n\t}\n\tif (includeInitialPlaceholder) {\n\t\treturn INITIAL_THINKING_PLACEHOLDER;\n\t}\n\n\treturn baseText;\n}\n\nexport function AssistantMessageV2({\n\tmessage,\n\tonImageClick,\n\tonExecutionTraceClick,\n\tactions,\n}: AssistantMessageV2Props) {\n\tconst [copied, setCopied] = useState(false);\n\tconst [toast, setToast] = useState<ToastState>(null);\n\tconst copyResetTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst toastTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst showCopyAction = actions?.copy ?? true;\n\tconst showTraceAction =\n\t\t(actions?.trace ?? true) && !!onExecutionTraceClick;\n\n\tconst hasEverStreamed = useRef(!!message.isStreaming);\n\tconst hasShownInitialThinking = useRef(\n\t\tmessage.streamProgress === \"processing\",\n\t);\n\tif (message.isStreaming) hasEverStreamed.current = true;\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (copyResetTimerRef.current) clearTimeout(copyResetTimerRef.current);\n\t\t\tif (toastTimerRef.current) clearTimeout(toastTimerRef.current);\n\t\t};\n\t}, []);\n\n\tconst rawResponseContent = (() => {\n\t\tconst raw = message.isStreaming\n\t\t\t? (message.streamingContent || message.content)\n\t\t\t: message.content;\n\t\tif (!raw) return \"\";\n\t\treturn raw.replace(/\\\\n/g, \"\\n\");\n\t})();\n\n\tconst hasReadyStreamPhase =\n\t\tmessage.streamProgress === \"processing\" ||\n\t\tBoolean(message.steps?.length) ||\n\t\tBoolean(message.allThinkingText) ||\n\t\tBoolean(message.activeThinkingText) ||\n\t\tBoolean(rawResponseContent);\n\n\tif (hasReadyStreamPhase && !message.isError) {\n\t\thasShownInitialThinking.current = true;\n\t}\n\n\tconst includeInitialPlaceholder =\n\t\thasShownInitialThinking.current && !message.isError;\n\tconst rawThinkingContent = useMemo(\n\t\t() => getFormattedThinking(message, includeInitialPlaceholder),\n\t\t[message, includeInitialPlaceholder],\n\t);\n\n\tconst isThinkingStreaming =\n\t\t!!message.isStreaming &&\n\t\t!rawResponseContent &&\n\t\t!message.isError;\n\n\tconst { displayedText: thinkingContent } = useTypingEffect(\n\t\trawThinkingContent,\n\t\thasEverStreamed.current && isThinkingStreaming,\n\t\tTHINKING_SPEED,\n\t\tincludeInitialPlaceholder ? INITIAL_THINKING_PLACEHOLDER : undefined,\n\t);\n\tconst hasThinkingContent = Boolean(thinkingContent);\n\tconst showThinkingBlock = hasThinkingContent || isThinkingStreaming;\n\tconst showLegacyThinkingPhase =\n\t\t!!message.isStreaming &&\n\t\t!message.isError &&\n\t\t!rawResponseContent &&\n\t\tmessage.streamProgress === \"started\";\n\n\tconst responseTypingEnabled =\n\t\thasEverStreamed.current && Boolean(rawResponseContent) && !message.isError;\n\n\tconst { displayedText: displayContent, isTyping: isResponseTyping } =\n\t\tuseTypingEffect(rawResponseContent, responseTypingEnabled, RESPONSE_SPEED);\n\n\tconst thinkingDuration = (() => {\n\t\tif (!message.steps || message.steps.length === 0) return undefined;\n\t\tconst first = message.steps[0];\n\t\tconst last = message.steps[message.steps.length - 1];\n\t\tif (first.timestamp && last.timestamp) {\n\t\t\treturn Math.round((last.timestamp - first.timestamp) / 1000);\n\t\t}\n\t\tconst total = message.steps.reduce((sum, s) => sum + (s.elapsedMs || 0), 0);\n\t\treturn total > 0 ? Math.round(total / 1000) : undefined;\n\t})();\n\n\tif (message.isError && !displayContent && !hasThinkingContent) {\n\t\treturn (\n\t\t\t<div className=\"payman-v2-assistant-msg payman-v2-fade-in\">\n\t\t\t\t<div className=\"payman-v2-assistant-msg-error\">\n\t\t\t\t\t<AlertCircle\n\t\t\t\t\t\tclassName=\"payman-v2-assistant-msg-error-icon\"\n\t\t\t\t\t\tstyle={{ width: 16, height: 16 }}\n\t\t\t\t\t/>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p className=\"payman-v2-assistant-msg-error-text\">\n\t\t\t\t\t\t\t{message.errorDetails || \"Something went wrong. Please try again.\"}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (showLegacyThinkingPhase) {\n\t\treturn (\n\t\t\t<div className=\"payman-v2-assistant-msg payman-v2-fade-in\">\n\t\t\t\t<p className=\"payman-v2-assistant-msg-thinking-only payman-v2-thinking-shimmer\">\n\t\t\t\t\tWorking on it…\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tconst showToast = (label: string, tone: \"success\" | \"error\") => {\n\t\tif (toastTimerRef.current) clearTimeout(toastTimerRef.current);\n\t\tsetToast({ label, tone });\n\t\ttoastTimerRef.current = setTimeout(() => setToast(null), 1800);\n\t};\n\n\tconst handleCopy = async () => {\n\t\ttry {\n\t\t\tif (!navigator.clipboard?.writeText) {\n\t\t\t\tthrow new Error(\"Clipboard unavailable\");\n\t\t\t}\n\t\t\tawait navigator.clipboard.writeText(displayContent);\n\t\t\tif (copyResetTimerRef.current) clearTimeout(copyResetTimerRef.current);\n\t\t\tsetCopied(true);\n\t\t\tcopyResetTimerRef.current = setTimeout(() => setCopied(false), 1800);\n\t\t\tshowToast(\"Copied to clipboard\", \"success\");\n\t\t} catch {\n\t\t\tsetCopied(false);\n\t\t\tshowToast(\"Could not copy\", \"error\");\n\t\t}\n\t};\n\n\tconst handleTrace = () => {\n\t\tonExecutionTraceClick?.({\n\t\t\tmessage,\n\t\t\ttracingData: message.tracingData,\n\t\t\texecutionId: message.executionId,\n\t\t});\n\t};\n\n\tconst hasPartialError = message.isError && displayContent;\n\tconst isDone =\n\t\t!message.isStreaming &&\n\t\tdisplayContent &&\n\t\t!hasPartialError &&\n\t\t!isResponseTyping;\n\tconst hasVisibleDoneActions =\n\t\tshowCopyAction ||\n\t\tshowTraceAction;\n\tconst isCancelled = message.isCancelled;\n\n\tconst toastPortal =\n\t\ttypeof document !== \"undefined\"\n\t\t\t? createPortal(\n\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t{toast && (\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: -18, scale: 0.96 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\t\t\t\t\texit={{ opacity: 0, y: -12, scale: 0.96 }}\n\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\ttype: \"spring\",\n\t\t\t\t\t\t\t\t\tstiffness: 360,\n\t\t\t\t\t\t\t\t\tdamping: 26,\n\t\t\t\t\t\t\t\t\tmass: 0.7,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName=\"payman-v2-toast\"\n\t\t\t\t\t\t\t\trole=\"status\"\n\t\t\t\t\t\t\t\taria-live=\"polite\"\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-v2-toast-inner\",\n\t\t\t\t\t\t\t\t\t\ttoast.tone === \"success\"\n\t\t\t\t\t\t\t\t\t\t\t? \"payman-v2-toast-success\"\n\t\t\t\t\t\t\t\t\t\t\t: \"payman-v2-toast-error\",\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{toast.tone === \"success\" ? (\n\t\t\t\t\t\t\t\t\t\t<Check\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-4 w-4\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ color: \"#059669\" }}\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<AlertCircle\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-4 w-4\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ color: \"#ef4444\" }}\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<span>{toast.label}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AnimatePresence>,\n\t\t\t\t\tdocument.body,\n\t\t\t\t)\n\t\t\t: null;\n\n\treturn (\n\t\t<>\n\t\t\t{toastPortal}\n\n\t\t\t<div className=\"payman-v2-assistant-msg payman-v2-fade-in\">\n\t\t\t\t{showThinkingBlock && (\n\t\t\t\t\t<ThinkingBlockV2\n\t\t\t\t\t\tcontent={thinkingContent}\n\t\t\t\t\t\tisStreaming={isThinkingStreaming}\n\t\t\t\t\t\tdurationSec={thinkingDuration}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t<div className=\"payman-v2-assistant-msg-content-area\">\n\t\t\t\t\t{displayContent ? (\n\t\t\t\t\t\t<MarkdownRendererV2\n\t\t\t\t\t\t\tcontent={displayContent}\n\t\t\t\t\t\t\tisStreaming={(message.isStreaming && !isCancelled) || isResponseTyping}\n\t\t\t\t\t\t\tisResolvingImages={message.isResolvingImages}\n\t\t\t\t\t\t\tonImageClick={onImageClick}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : !isThinkingStreaming && !hasThinkingContent ? (\n\t\t\t\t\t\t<span className=\"payman-v2-assistant-msg-placeholder\">...</span>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\n\t\t\t\t{isCancelled && message.isStreaming && (\n\t\t\t\t\t<div className=\"payman-v2-assistant-msg-paused\">\n\t\t\t\t\t\t<WifiOff\n\t\t\t\t\t\t\tstyle={{ width: 14, height: 14, color: \"rgba(217, 119, 6, 0.7)\", flexShrink: 0 }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<p className=\"payman-v2-assistant-msg-paused-text\">\n\t\t\t\t\t\t\tConnection slow - resuming…\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{hasPartialError && (\n\t\t\t\t\t<div className=\"payman-v2-assistant-msg-partial-error\">\n\t\t\t\t\t\t<AlertCircle\n\t\t\t\t\t\t\tclassName=\"payman-v2-assistant-msg-error-icon\"\n\t\t\t\t\t\t\tstyle={{ width: 16, height: 16 }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<p className=\"payman-v2-assistant-msg-error-text\">\n\t\t\t\t\t\t\t\t{message.errorDetails || \"The response was interrupted.\"}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{isDone && hasVisibleDoneActions && (\n\t\t\t\t\t<div className=\"payman-v2-assistant-msg-actions\">\n\t\t\t\t\t\t{showCopyAction && (\n\t\t\t\t\t\t\t<ActionTooltipV2 label=\"Copy\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tonClick={() => void handleCopy()}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-v2-assistant-msg-action-btn\",\n\t\t\t\t\t\t\t\t\t\tcopied && \"payman-v2-assistant-msg-action-btn-active\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\taria-label=\"Copy\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{copied ? (\n\t\t\t\t\t\t\t\t\t\t<Check style={{ width: 16, height: 16 }} />\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<Copy style={{ width: 16, height: 16 }} />\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</ActionTooltipV2>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{showTraceAction && (\n\t\t\t\t\t\t\t<ActionTooltipV2 label=\"Trace\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tonClick={handleTrace}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-assistant-msg-action-btn\"\n\t\t\t\t\t\t\t\t\taria-label=\"Trace response\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<SearchCode style={{ width: 16, height: 16 }} />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</ActionTooltipV2>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</>\n\t);\n}\n","import { useEffect, useRef, type ClipboardEvent, type KeyboardEvent } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport type OtpInputV2Props = {\n\tvalue: string;\n\tonChange: (value: string) => void;\n\tmaxLength?: number;\n\tdisabled?: boolean;\n\terror?: boolean;\n};\n\nconst DEFAULT_MAX_LENGTH = 6;\nconst MAX_SUPPORTED_LENGTH = 12;\nconst AUTO_FOCUS_DELAY_MS = 250;\n\nexport function OtpInputV2({\n\tvalue,\n\tonChange,\n\tmaxLength,\n\tdisabled = false,\n\terror = false,\n}: OtpInputV2Props) {\n\tconst inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n\tconst safeMaxLength =\n\t\tNumber.isInteger(maxLength) && (maxLength as number) > 0\n\t\t\t? Math.min(maxLength as number, 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\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 = (index: number, e: KeyboardEvent<HTMLInputElement>) => {\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: ClipboardEvent<HTMLInputElement>) => {\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={cn(\"payman-v2-otp\", error && \"payman-v2-shake\")}>\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\"payman-v2-otp-digit\",\n\t\t\t\t\t\tdigit && \"payman-v2-otp-digit-filled\",\n\t\t\t\t\t\terror && \"payman-v2-otp-digit-error\"\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</div>\n\t);\n}\n","import { motion } from \"framer-motion\";\nimport { Loader2, RotateCcw, ShieldCheck } from \"lucide-react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { OtpInputV2 } from \"./OtpInputV2\";\n\nexport type VerificationActionV2 = {\n\ttype: string;\n\tmessage: string;\n\tamount?: string;\n\tpayeeName?: string;\n};\n\nexport type VerificationStatusV2 =\n\t| \"pending\"\n\t| \"verifying\"\n\t| \"approved\"\n\t| \"rejected\"\n\t| \"error\";\n\nexport type VerificationCardV2Props = {\n\tmessageId: string;\n\taction: VerificationActionV2;\n\tstatus: VerificationStatusV2;\n\tonApprove: (messageId: string, otp: string) => Promise<void>;\n\tonReject: (messageId: string) => Promise<void>;\n\tonResend: (messageId: string) => Promise<void>;\n};\n\nconst RESEND_COOLDOWN_S = 30;\nconst OTP_LEN = 6;\n\nexport function VerificationCardV2({\n\tmessageId,\n\taction,\n\tstatus,\n\tonApprove,\n\tonReject,\n\tonResend,\n}: VerificationCardV2Props) {\n\tconst [otp, setOtp] = useState(\"\");\n\tconst [otpErrored, setOtpErrored] = useState(false);\n\tconst [resendSec, setResendSec] = useState(0);\n\tconst lastSubmittedRef = useRef<string | null>(null);\n\tconst resendTimerRef = useRef<number | undefined>(undefined);\n\n\tuseEffect(() => {\n\t\tif (status !== \"error\") {\n\t\t\tsetOtpErrored(false);\n\t\t\treturn;\n\t\t}\n\t\tsetOtpErrored(true);\n\t\tconst t = window.setTimeout(() => {\n\t\t\tsetOtp(\"\");\n\t\t\tsetOtpErrored(false);\n\t\t\tlastSubmittedRef.current = null;\n\t\t}, 600);\n\t\treturn () => window.clearTimeout(t);\n\t}, [status]);\n\n\tuseEffect(() => {\n\t\tif (otp.length < OTP_LEN) {\n\t\t\tlastSubmittedRef.current = null;\n\t\t}\n\t}, [otp]);\n\n\tuseEffect(() => {\n\t\tif (\n\t\t\totp.length !== OTP_LEN ||\n\t\t\t!/^\\d+$/.test(otp) ||\n\t\t\tstatus !== \"pending\"\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tif (lastSubmittedRef.current === otp) return;\n\t\tlastSubmittedRef.current = otp;\n\t\tvoid onApprove(messageId, otp);\n\t}, [messageId, onApprove, otp, status]);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (typeof resendTimerRef.current === \"number\") {\n\t\t\t\twindow.clearInterval(resendTimerRef.current);\n\t\t\t}\n\t\t};\n\t}, []);\n\n\tconst startResendCooldown = useCallback(() => {\n\t\tsetResendSec(RESEND_COOLDOWN_S);\n\t\tif (typeof resendTimerRef.current === \"number\") {\n\t\t\twindow.clearInterval(resendTimerRef.current);\n\t\t}\n\t\tresendTimerRef.current = window.setInterval(() => {\n\t\t\tsetResendSec((s) => {\n\t\t\t\tif (s <= 1) {\n\t\t\t\t\tif (typeof resendTimerRef.current === \"number\") {\n\t\t\t\t\t\twindow.clearInterval(resendTimerRef.current);\n\t\t\t\t\t\tresendTimerRef.current = undefined;\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\treturn s - 1;\n\t\t\t});\n\t\t}, 1000);\n\t}, []);\n\n\tconst handleResend = useCallback(async () => {\n\t\tif (resendSec > 0 || status === \"verifying\") return;\n\t\tawait onResend(messageId);\n\t\tstartResendCooldown();\n\t}, [messageId, onResend, resendSec, startResendCooldown, status]);\n\n\tconst handleCancel = useCallback(async () => {\n\t\tawait onReject(messageId);\n\t}, [messageId, onReject]);\n\n\tconst busy = status === \"verifying\";\n\n\tif (status === \"approved\" || status === \"rejected\") {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<motion.div\n\t\t\tclassName=\"payman-v2-verification\"\n\t\t\tinitial={{ opacity: 0, y: 10 }}\n\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\ttransition={{ type: \"spring\", stiffness: 320, damping: 28 }}\n\t\t>\n\t\t\t<div className=\"payman-v2-verification-card\">\n\t\t\t\t<div className=\"payman-v2-verification-header\">\n\t\t\t\t\t<div className=\"payman-v2-verification-header-row\">\n\t\t\t\t\t\t<ShieldCheck\n\t\t\t\t\t\t\tclassName=\"payman-v2-verification-icon\"\n\t\t\t\t\t\t\tsize={18}\n\t\t\t\t\t\t\tstrokeWidth={1.75}\n\t\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<p className=\"payman-v2-verification-title\">Verify</p>\n\t\t\t\t\t\t{action.amount != null ? (\n\t\t\t\t\t\t\t<span className=\"payman-v2-verification-amount\">\n\t\t\t\t\t\t\t\t{action.amount}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) : action.payeeName ? (\n\t\t\t\t\t\t\t<span className=\"payman-v2-verification-payee\">\n\t\t\t\t\t\t\t\t{action.payeeName}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</div>\n\t\t\t\t\t<p className=\"payman-v2-verification-description\">\n\t\t\t\t\t\tEnter the 6-digit code sent to your phone\n\t\t\t\t\t</p>\n\t\t\t\t\t<OtpInputV2\n\t\t\t\t\t\tvalue={otp}\n\t\t\t\t\t\tonChange={setOtp}\n\t\t\t\t\t\tmaxLength={OTP_LEN}\n\t\t\t\t\t\tdisabled={busy}\n\t\t\t\t\t\terror={otpErrored}\n\t\t\t\t\t/>\n\t\t\t\t\t{busy ? (\n\t\t\t\t\t\t<div className=\"payman-v2-verification-submitting\">\n\t\t\t\t\t\t\t<motion.span\n\t\t\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\t\t\tstyle={{ display: \"inline-flex\" }}\n\t\t\t\t\t\t\t\tanimate={{ rotate: 360 }}\n\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\trepeat: Infinity,\n\t\t\t\t\t\t\t\t\tduration: 0.7,\n\t\t\t\t\t\t\t\t\tease: \"linear\",\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<Loader2 size={14} strokeWidth={2} />\n\t\t\t\t\t\t\t</motion.span>\n\t\t\t\t\t\t\t<span className=\"payman-v2-verification-submitting-text\">\n\t\t\t\t\t\t\t\tVerifying...\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\t\t\t\t<div className=\"payman-v2-verification-actions\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"payman-v2-verification-resend-btn\"\n\t\t\t\t\t\tdisabled={busy || resendSec > 0}\n\t\t\t\t\t\tonClick={() => void handleResend()}\n\t\t\t\t\t>\n\t\t\t\t\t\t<RotateCcw size={12} strokeWidth={2} aria-hidden />\n\t\t\t\t\t\t{resendSec > 0 ? `Resend (${resendSec}s)` : \"Resend\"}\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"payman-v2-verification-cancel-btn\"\n\t\t\t\t\t\tdisabled={busy}\n\t\t\t\t\t\tonClick={() => void handleCancel()}\n\t\t\t\t\t>\n\t\t\t\t\t\tCancel\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</motion.div>\n\t);\n}\n","import {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { ArrowDown } from \"lucide-react\";\nimport type { MessageListV2Props } from \"../../types\";\nimport { UserMessageV2 } from \"./UserMessageV2\";\nimport { AssistantMessageV2 } from \"./AssistantMessageV2\";\nimport { VerificationCardV2 } from \"./VerificationCardV2\";\n\nexport type { MessageListV2Props } from \"../../types\";\n\nconst SCROLL_THRESHOLD = 100;\n\nexport type MessageListV2Handle = {\n\tscrollToBottom: (behavior?: ScrollBehavior) => void;\n};\n\nexport const MessageListV2 = forwardRef<MessageListV2Handle, MessageListV2Props>(\n\tfunction MessageListV2(\n\t\t{\n\t\t\tmessages,\n\t\t\tisStreaming: _isStreaming = false,\n\t\t\tonEditUserMessage,\n\t\t\tonRetryUserMessage,\n\t\t\tonImageClick,\n\t\t\tonExecutionTraceClick,\n\t\t\tmessageActions,\n\t\t\tretryDisabled = false,\n\t\t\tuserAction,\n\t\t\tonApproveAction,\n\t\t\tonRejectAction,\n\t\t\tonResendAction,\n\t\t},\n\t\tref,\n\t) {\n\t\tconst scrollRef = useRef<HTMLDivElement>(null);\n\t\tconst scrollInnerRef = useRef<HTMLDivElement>(null);\n\t\tconst isNearBottomRef = useRef(true);\n\t\tconst [showScrollBtn, setShowScrollBtn] = useState(false);\n\t\tconst prevCountRef = useRef(messages.length);\n\t\tconst pauseStickUntilUserMessageRef = useRef(false);\n\t\tconst followingBottomRef = useRef(true);\n\t\tconst isProgrammaticScrollRef = useRef(false);\n\n\t\tconst getDistanceFromBottom = useCallback(() => {\n\t\t\tconst el = scrollRef.current;\n\t\t\tif (!el) return 0;\n\t\t\treturn el.scrollHeight - el.scrollTop - el.clientHeight;\n\t\t}, []);\n\n\t\tconst scrollToBottom = useCallback(\n\t\t\t(behavior: ScrollBehavior = \"smooth\") => {\n\t\t\t\tconst el = scrollRef.current;\n\t\t\t\tif (!el) return;\n\t\t\t\tisProgrammaticScrollRef.current = true;\n\t\t\t\tpauseStickUntilUserMessageRef.current = false;\n\t\t\t\tfollowingBottomRef.current = true;\n\t\t\t\tel.scrollTo({ top: el.scrollHeight, behavior });\n\t\t\t\tconst clear = () => {\n\t\t\t\t\tisProgrammaticScrollRef.current = false;\n\t\t\t\t};\n\t\t\t\tif (behavior === \"instant\") {\n\t\t\t\t\trequestAnimationFrame(clear);\n\t\t\t\t} else {\n\t\t\t\t\tsetTimeout(clear, 400);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[],\n\t\t);\n\n\t\tuseImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tscrollToBottom: (behavior: ScrollBehavior = \"smooth\") => {\n\t\t\t\t\tisNearBottomRef.current = true;\n\t\t\t\t\tpauseStickUntilUserMessageRef.current = false;\n\t\t\t\t\tfollowingBottomRef.current = true;\n\t\t\t\t\tsetShowScrollBtn(false);\n\t\t\t\t\tscrollToBottom(behavior);\n\t\t\t\t},\n\t\t\t}),\n\t\t\t[scrollToBottom],\n\t\t);\n\n\t\tconst handleScroll = useCallback(() => {\n\t\t\tconst distance = getDistanceFromBottom();\n\t\t\tconst nearBottom = distance <= SCROLL_THRESHOLD;\n\t\t\tisNearBottomRef.current = nearBottom;\n\t\t\tsetShowScrollBtn(!nearBottom);\n\n\t\t\tif (isProgrammaticScrollRef.current) return;\n\n\t\t\tif (!nearBottom) {\n\t\t\t\tfollowingBottomRef.current = false;\n\t\t\t\tpauseStickUntilUserMessageRef.current = true;\n\t\t\t}\n\t\t}, [getDistanceFromBottom]);\n\n\t\tuseEffect(() => {\n\t\t\tconst prevCount = prevCountRef.current;\n\t\t\tprevCountRef.current = messages.length;\n\t\t\tif (messages.length > prevCount) {\n\t\t\t\tconst last = messages[messages.length - 1];\n\t\t\t\tif (last?.role === \"user\") {\n\t\t\t\t\tpauseStickUntilUserMessageRef.current = false;\n\t\t\t\t\tfollowingBottomRef.current = true;\n\t\t\t\t\trequestAnimationFrame(() => scrollToBottom());\n\t\t\t\t} else if (\n\t\t\t\t\t!pauseStickUntilUserMessageRef.current &&\n\t\t\t\t\tfollowingBottomRef.current\n\t\t\t\t) {\n\t\t\t\t\trequestAnimationFrame(() => scrollToBottom(\"instant\"));\n\t\t\t\t}\n\t\t\t}\n\t\t}, [messages.length, scrollToBottom]);\n\n\t\tuseEffect(() => {\n\t\t\tconst lastMsg = messages[messages.length - 1];\n\t\t\tif (!lastMsg?.isStreaming) return;\n\t\t\tif (pauseStickUntilUserMessageRef.current) return;\n\t\t\tif (!followingBottomRef.current) return;\n\t\t\tconst el = scrollRef.current;\n\t\t\tif (!el) return;\n\t\t\tisProgrammaticScrollRef.current = true;\n\t\t\tel.scrollTop = el.scrollHeight;\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tisProgrammaticScrollRef.current = false;\n\t\t\t});\n\t\t});\n\n\t\tuseEffect(() => {\n\t\t\tconst inner = scrollInnerRef.current;\n\t\t\tif (!inner) return;\n\n\t\t\tconst pinIfFollowing = () => {\n\t\t\t\tif (pauseStickUntilUserMessageRef.current) return;\n\t\t\t\tif (!followingBottomRef.current) return;\n\t\t\t\tconst el = scrollRef.current;\n\t\t\t\tif (!el) return;\n\t\t\t\tisProgrammaticScrollRef.current = true;\n\t\t\t\tel.scrollTop = el.scrollHeight;\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tisProgrammaticScrollRef.current = false;\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tconst ro = new ResizeObserver(() => {\n\t\t\t\tpinIfFollowing();\n\t\t\t});\n\t\t\tro.observe(inner);\n\t\t\treturn () => ro.disconnect();\n\t\t}, []);\n\n\t\tuseEffect(() => {\n\t\t\tif (messages.length > 0) {\n\t\t\t\tsetTimeout(() => scrollToBottom(\"instant\"), 50);\n\t\t\t}\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t}, []);\n\n\t\treturn (\n\t\t\t<div className=\"payman-v2-message-list\">\n\t\t\t\t<div\n\t\t\t\t\tref={scrollRef}\n\t\t\t\t\tonScroll={handleScroll}\n\t\t\t\t\tclassName=\"payman-v2-message-scroll payman-v2-scrollbar\"\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tref={scrollInnerRef}\n\t\t\t\t\t\tclassName=\"payman-v2-message-scroll-inner\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{messages.map((message) => (\n\t\t\t\t\t\t\t<div key={message.id}>\n\t\t\t\t\t\t\t\t{message.role === \"user\" ? (\n\t\t\t\t\t\t\t\t\t<UserMessageV2\n\t\t\t\t\t\t\t\t\t\tmessage={message}\n\t\t\t\t\t\t\t\t\t\tonEdit={onEditUserMessage}\n\t\t\t\t\t\t\t\t\t\tonRetry={onRetryUserMessage}\n\t\t\t\t\t\t\t\t\t\tretryDisabled={retryDisabled}\n\t\t\t\t\t\t\t\t\t\tactions={messageActions?.userMessageActions}\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<AssistantMessageV2\n\t\t\t\t\t\t\t\t\t\tmessage={message}\n\t\t\t\t\t\t\t\t\t\tonImageClick={onImageClick}\n\t\t\t\t\t\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t\t\t\t\t\t\tactions={messageActions?.assistantMessageActions}\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</div>\n\t\t\t\t\t\t))}\n\n\t\t\t\t\t\t{userAction && userAction.status !== \"approved\" && userAction.status !== \"rejected\" && (\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<VerificationCardV2\n\t\t\t\t\t\t\t\t\tmessageId={userAction.messageId}\n\t\t\t\t\t\t\t\t\taction={userAction.action}\n\t\t\t\t\t\t\t\t\tstatus={userAction.status}\n\t\t\t\t\t\t\t\t\tonApprove={onApproveAction ?? (async () => {})}\n\t\t\t\t\t\t\t\t\tonReject={onRejectAction ?? (async () => {})}\n\t\t\t\t\t\t\t\t\tonResend={onResendAction ?? (async () => {})}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<AnimatePresence>\n\t\t\t\t\t{showScrollBtn && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 6 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\texit={{ opacity: 0, y: 6 }}\n\t\t\t\t\t\t\ttransition={{ duration: 0.12 }}\n\t\t\t\t\t\t\tclassName=\"payman-v2-scroll-to-bottom\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\tscrollToBottom();\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName=\"payman-v2-scroll-to-bottom-btn\"\n\t\t\t\t\t\t\t\taria-label=\"Scroll to bottom\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ArrowDown style={{ width: 16, height: 16 }} />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</div>\n\t\t);\n\t},\n);\n","import {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport {\n\tArrowUp,\n\tMic,\n\tPlus,\n\tImagePlus,\n\tPaperclip,\n\tPencil,\n\tRotateCcw,\n\tX,\n} from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\n\nexport type ChatInputV2Props = {\n\tonSend: (message: string) => void;\n\tonCancel?: () => void;\n\tdisabled?: boolean;\n\tisStreaming?: boolean;\n\tplaceholder?: string;\n\tenableVoice?: boolean;\n\tvoiceAvailable?: boolean;\n\tisRecording?: boolean;\n\tonVoicePress?: () => void;\n\tonCancelRecording?: () => void;\n\tonConfirmRecording?: () => void;\n\ttranscribedText?: string;\n\tshowResetSession?: boolean;\n\tonResetSession?: () => void;\n\tshowAttachmentButton?: boolean;\n\tshowUploadImageButton?: boolean;\n\tshowAttachFileButton?: boolean;\n\tonUploadImageClick?: () => void;\n\tonAttachFileClick?: () => void;\n\teditingMessageId?: string | null;\n\tonClearEditing?: () => void;\n};\n\nexport type ChatInputV2Handle = {\n\tsetDraft: (message: string) => void;\n};\n\nexport const ChatInputV2 = forwardRef<ChatInputV2Handle, ChatInputV2Props>(\n\tfunction ChatInputV2(\n\t\t{\n\t\t\tonSend,\n\t\t\tonCancel,\n\t\t\tdisabled = false,\n\t\t\tisStreaming = false,\n\t\t\tplaceholder = \"Reply...\",\n\t\t\tenableVoice = false,\n\t\t\tvoiceAvailable = false,\n\t\t\tisRecording = false,\n\t\t\tonVoicePress,\n\t\t\ttranscribedText = \"\",\n\t\t\tshowResetSession = false,\n\t\t\tonResetSession,\n\t\t\tshowAttachmentButton = true,\n\t\t\tshowUploadImageButton = true,\n\t\t\tshowAttachFileButton = true,\n\t\t\tonUploadImageClick,\n\t\t\tonAttachFileClick,\n\t\t\teditingMessageId = null,\n\t\t\tonClearEditing,\n\t\t}: ChatInputV2Props,\n\t\tref,\n\t) {\n\t\tconst [value, setValue] = useState(\"\");\n\t\tconst [isFocused, setIsFocused] = useState(false);\n\t\tconst [showActions, setShowActions] = useState(false);\n\t\tconst [showVoiceTooltip, setShowVoiceTooltip] = useState(false);\n\t\tconst textareaRef = useRef<HTMLTextAreaElement>(null);\n\t\tconst actionsRef = useRef<HTMLDivElement>(null);\n\t\tconst preRecordTextRef = useRef(\"\");\n\t\tconst voiceTooltipTimerRef = useRef<ReturnType<typeof setTimeout> | null>(\n\t\t\tnull,\n\t\t);\n\t\tconst voiceDraftSyncActiveRef = useRef(false);\n\n\t\tconst isInputLocked = disabled || isRecording;\n\t\tconst hasAttachmentOptions = showUploadImageButton || showAttachFileButton;\n\t\tconst showAttachmentMenuButton = showAttachmentButton && hasAttachmentOptions;\n\t\tconst showVoiceButton = enableVoice && onVoicePress != null;\n\t\tconst isVoiceButtonDisabled = disabled || !voiceAvailable;\n\n\t\tuseEffect(() => {\n\t\t\tif (textareaRef.current) {\n\t\t\t\ttextareaRef.current.style.height = \"auto\";\n\t\t\t\tconst scrollHeight = textareaRef.current.scrollHeight;\n\t\t\t\ttextareaRef.current.style.height = `${Math.min(scrollHeight, 200)}px`;\n\t\t\t}\n\t\t}, [value]);\n\n\t\tuseEffect(() => {\n\t\t\tif (disabled) {\n\t\t\t\tsetIsFocused(false);\n\t\t\t\tsetShowActions(false);\n\t\t\t\ttextareaRef.current?.blur();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst frameId = requestAnimationFrame(() => textareaRef.current?.focus());\n\t\t\treturn () => cancelAnimationFrame(frameId);\n\t\t}, [disabled]);\n\n\t\tuseImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tsetDraft: (message: string) => {\n\t\t\t\t\tsetShowActions(false);\n\t\t\t\t\tsetValue(message);\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\tconst textarea = textareaRef.current;\n\t\t\t\t\t\tif (!textarea || disabled) return;\n\t\t\t\t\t\ttextarea.focus();\n\t\t\t\t\t\tconst end = message.length;\n\t\t\t\t\t\ttextarea.setSelectionRange(end, end);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t\t[disabled],\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tif (!showActions) return;\n\t\t\tconst handleClickOutside = (e: MouseEvent) => {\n\t\t\t\tif (\n\t\t\t\t\tactionsRef.current &&\n\t\t\t\t\t!actionsRef.current.contains(e.target as Node)\n\t\t\t\t) {\n\t\t\t\t\tsetShowActions(false);\n\t\t\t\t}\n\t\t\t};\n\t\t\tdocument.addEventListener(\"mousedown\", handleClickOutside);\n\t\t\treturn () => document.removeEventListener(\"mousedown\", handleClickOutside);\n\t\t}, [showActions]);\n\n\t\tuseEffect(() => {\n\t\t\tif (!showAttachmentMenuButton) {\n\t\t\t\tsetShowActions(false);\n\t\t\t}\n\t\t}, [showAttachmentMenuButton]);\n\n\t\tuseEffect(() => {\n\t\t\treturn () => {\n\t\t\t\tif (voiceTooltipTimerRef.current) {\n\t\t\t\t\tclearTimeout(voiceTooltipTimerRef.current);\n\t\t\t\t}\n\t\t\t};\n\t\t}, []);\n\n\t\tuseEffect(() => {\n\t\t\tif (!voiceDraftSyncActiveRef.current) return;\n\t\t\tconst base = preRecordTextRef.current;\n\t\t\tconst separator = base && !base.endsWith(\" \") && transcribedText ? \" \" : \"\";\n\t\t\tsetValue(`${base}${separator}${transcribedText}`);\n\t\t}, [isRecording, transcribedText]);\n\n\t\tconst handleSend = useCallback(() => {\n\t\t\tif (!value.trim() || disabled) return;\n\t\t\tvoiceDraftSyncActiveRef.current = false;\n\t\t\tpreRecordTextRef.current = \"\";\n\t\t\tonClearEditing?.();\n\t\t\tonSend(value.trim());\n\t\t\tsetValue(\"\");\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tif (textareaRef.current) {\n\t\t\t\t\ttextareaRef.current.style.height = \"auto\";\n\t\t\t\t\ttextareaRef.current.focus();\n\t\t\t\t}\n\t\t\t});\n\t\t}, [value, disabled, onClearEditing, onSend]);\n\n\t\tconst handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n\t\t\tif (e.key === \"Enter\" && !e.shiftKey) {\n\t\t\t\te.preventDefault();\n\t\t\t\tif (isStreaming) return;\n\t\t\t\thandleSend();\n\t\t\t}\n\t\t};\n\n\t\tconst handleUploadImageClick = () => {\n\t\t\tonUploadImageClick?.();\n\t\t\tsetShowActions(false);\n\t\t};\n\n\t\tconst handleAttachFileClick = () => {\n\t\t\tonAttachFileClick?.();\n\t\t\tsetShowActions(false);\n\t\t};\n\n\t\tconst hideVoiceTooltip = useCallback(() => {\n\t\t\tif (voiceTooltipTimerRef.current) {\n\t\t\t\tclearTimeout(voiceTooltipTimerRef.current);\n\t\t\t\tvoiceTooltipTimerRef.current = null;\n\t\t\t}\n\t\t\tsetShowVoiceTooltip(false);\n\t\t}, []);\n\n\t\tconst startVoiceTooltipTimer = useCallback(() => {\n\t\t\tif (isVoiceButtonDisabled || isRecording) return;\n\t\t\tif (voiceTooltipTimerRef.current) {\n\t\t\t\tclearTimeout(voiceTooltipTimerRef.current);\n\t\t\t}\n\t\t\tvoiceTooltipTimerRef.current = setTimeout(() => {\n\t\t\t\tsetShowVoiceTooltip(true);\n\t\t\t\tvoiceTooltipTimerRef.current = null;\n\t\t\t}, 2000);\n\t\t}, [isRecording, isVoiceButtonDisabled]);\n\n\t\tconst handleVoiceToggle = () => {\n\t\t\thideVoiceTooltip();\n\t\t\tsetShowActions(false);\n\t\t\tif (!onVoicePress || isVoiceButtonDisabled) return;\n\t\t\tif (!isRecording) {\n\t\t\t\tpreRecordTextRef.current = value;\n\t\t\t\tvoiceDraftSyncActiveRef.current = true;\n\t\t\t}\n\t\t\tonVoicePress();\n\t\t};\n\n\t\tconst canSend = value.trim().length > 0 && !disabled;\n\t\tconst sendDisabled = !canSend || isStreaming;\n\n\t\treturn (\n\t\t\t<div className=\"payman-v2-input-container\">\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"payman-v2-input-wrapper\",\n\t\t\t\t\t\t(isFocused || isRecording) && \"payman-v2-input-wrapper-focused\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"payman-v2-input-body\">\n\t\t\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t\t\t{editingMessageId && (\n\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: -4 }}\n\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\t\t\texit={{ opacity: 0, y: -4 }}\n\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.14, ease: \"easeOut\" }}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-editing-banner\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div className=\"payman-v2-input-editing-banner-info\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"payman-v2-input-editing-icon-wrap\">\n\t\t\t\t\t\t\t\t\t\t\t<Pencil style={{ width: 12, height: 12 }} />\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t<p className=\"payman-v2-input-editing-label\">\n\t\t\t\t\t\t\t\t\t\t\tEditing message\n\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t{onClearEditing && (\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={onClearEditing}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-editing-close\"\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Stop editing message\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<X style={{ width: 14, height: 14 }} />\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</AnimatePresence>\n\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) => {\n\t\t\t\t\t\t\t\tif (isRecording) return;\n\t\t\t\t\t\t\t\tconst nextValue = e.target.value;\n\t\t\t\t\t\t\t\tvoiceDraftSyncActiveRef.current = false;\n\t\t\t\t\t\t\t\tsetValue(nextValue);\n\t\t\t\t\t\t\t\tif (editingMessageId && nextValue.length === 0) {\n\t\t\t\t\t\t\t\t\tonClearEditing?.();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\tonFocus={() => {\n\t\t\t\t\t\t\t\tif (!disabled) setIsFocused(true);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonBlur={() => setIsFocused(false)}\n\t\t\t\t\t\t\tonMouseDown={(e) => {\n\t\t\t\t\t\t\t\tif (disabled) e.preventDefault();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\taria-disabled={disabled}\n\t\t\t\t\t\t\treadOnly={isInputLocked}\n\t\t\t\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\t\t\t\tplaceholder={isRecording ? \"Listening…\" : placeholder}\n\t\t\t\t\t\t\tclassName=\"payman-v2-input-textarea\"\n\t\t\t\t\t\t\tdata-disabled={disabled ? \"true\" : \"false\"}\n\t\t\t\t\t\t\trows={1}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div className=\"payman-v2-input-controls\">\n\t\t\t\t\t\t<div className=\"payman-v2-input-controls-left\">\n\t\t\t\t\t\t\t{showResetSession && onResetSession && (\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={onResetSession}\n\t\t\t\t\t\t\t\t\tdisabled={isStreaming || isRecording}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-new-session-btn\"\n\t\t\t\t\t\t\t\t\taria-label=\"New Session\"\n\t\t\t\t\t\t\t\t\ttitle=\"New Session\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<RotateCcw\n\t\t\t\t\t\t\t\t\t\tstyle={{ width: 16, height: 16, strokeWidth: 2.25 }}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<span className=\"payman-v2-input-new-session-tooltip\">\n\t\t\t\t\t\t\t\t\t\tNew Session\n\t\t\t\t\t\t\t\t\t</span>\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{showAttachmentMenuButton && (\n\t\t\t\t\t\t\t\t<div style={{ position: \"relative\" }} ref={actionsRef}>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => setShowActions((current) => !current)}\n\t\t\t\t\t\t\t\t\t\tdisabled={disabled || isRecording}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\"payman-v2-input-attach-btn\",\n\t\t\t\t\t\t\t\t\t\t\tshowActions && \"payman-v2-input-attach-btn-active\",\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\taria-label=\"Attach\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Plus\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ width: 20, height: 20, strokeWidth: 2 }}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t\t\t\t\t{showActions && (\n\t\t\t\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 4, scale: 0.95 }}\n\t\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\t\t\t\t\t\t\t\t\texit={{ opacity: 0, y: 4, scale: 0.95 }}\n\t\t\t\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.12 }}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-attach-menu\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{showUploadImageButton && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-attach-option\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={handleUploadImageClick}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ImagePlus\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={{ width: 16, height: 16 }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-attach-option-icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tUpload image\n\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t{showAttachFileButton && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-attach-option\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={handleAttachFileClick}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Paperclip\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={{ width: 16, height: 16 }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-attach-option-icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tAttach file\n\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{showVoiceButton && (\n\t\t\t\t\t\t\t\t<div style={{ position: \"relative\" }}>\n\t\t\t\t\t\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t\t\t\t\t\t{showVoiceTooltip && (\n\t\t\t\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 4, scale: 0.98 }}\n\t\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\t\t\t\t\t\t\t\t\texit={{ opacity: 0, y: 4, scale: 0.98 }}\n\t\t\t\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.14, ease: \"easeOut\" }}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-voice-tooltip\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"payman-v2-input-voice-tooltip-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tChat with your voice\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"payman-v2-input-voice-tooltip-arrow\" />\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</AnimatePresence>\n\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={handleVoiceToggle}\n\t\t\t\t\t\t\t\t\t\tonMouseEnter={startVoiceTooltipTimer}\n\t\t\t\t\t\t\t\t\t\tonMouseLeave={hideVoiceTooltip}\n\t\t\t\t\t\t\t\t\t\tonFocus={startVoiceTooltipTimer}\n\t\t\t\t\t\t\t\t\t\tonBlur={hideVoiceTooltip}\n\t\t\t\t\t\t\t\t\t\tdisabled={isVoiceButtonDisabled}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\"payman-v2-input-mic-btn\",\n\t\t\t\t\t\t\t\t\t\t\tisRecording && \"payman-v2-input-mic-recording\",\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\taria-label={isRecording ? \"Stop recording\" : \"Voice input\"}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Mic style={{ width: 18, height: 18 }} />\n\t\t\t\t\t\t\t\t\t\t{isRecording && (\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"payman-v2-input-mic-indicator\" />\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</button>\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\n\t\t\t\t\t\t<div className=\"payman-v2-input-controls-right\">\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={handleSend}\n\t\t\t\t\t\t\t\tdisabled={sendDisabled}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"payman-v2-input-send-btn\",\n\t\t\t\t\t\t\t\t\tsendDisabled && \"payman-v2-input-send-btn-disabled\",\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\taria-label=\"Send message\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ArrowUp\n\t\t\t\t\t\t\t\t\tstyle={{ width: 16, height: 16, strokeWidth: 2.5 }}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-send-icon\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</button>\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<p className=\"payman-v2-input-disclaimer\">\n\t\t\t\t\tAI can make mistakes. Please double-check responses.\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t);\n\t},\n);\n","import { useCallback, useEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { Download, Loader2, X } from \"lucide-react\";\n\nexport type ImageLightboxV2Props = {\n\tsrc: string | null;\n\talt: string;\n\tonClose: () => void;\n};\n\nexport function ImageLightboxV2({ src, alt, onClose }: ImageLightboxV2Props) {\n\tconst [isMounted, setIsMounted] = useState(false);\n\tconst [isImageLoaded, setIsImageLoaded] = useState(false);\n\n\tuseEffect(() => {\n\t\tsetIsMounted(true);\n\t\treturn () => setIsMounted(false);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tsetIsImageLoaded(false);\n\t}, [src]);\n\n\tconst handleKeyDown = useCallback(\n\t\t(e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") onClose();\n\t\t},\n\t\t[onClose]\n\t);\n\n\tuseEffect(() => {\n\t\tif (!src || typeof document === \"undefined\") return;\n\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown);\n\t\tconst previousOverflow = document.body.style.overflow;\n\t\tdocument.body.style.overflow = \"hidden\";\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"keydown\", handleKeyDown);\n\t\t\tdocument.body.style.overflow = previousOverflow;\n\t\t};\n\t}, [src, handleKeyDown]);\n\n\tconst handleDownload = () => {\n\t\tif (!src || typeof document === \"undefined\") return;\n\t\tconst a = document.createElement(\"a\");\n\t\ta.href = src;\n\t\ta.download = alt.trim() ? alt : \"image\";\n\t\tdocument.body.appendChild(a);\n\t\ta.click();\n\t\ta.remove();\n\t};\n\n\tif (!isMounted || typeof document === \"undefined\") {\n\t\treturn null;\n\t}\n\n\treturn createPortal(\n\t\t<AnimatePresence>\n\t\t\t{src ? (\n\t\t\t\t<motion.div\n\t\t\t\t\tkey={src}\n\t\t\t\t\tclassName=\"payman-v2-lightbox\"\n\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\ttransition={{ duration: 0.18 }}\n\t\t\t\t\tonClick={onClose}\n\t\t\t\t\trole=\"presentation\"\n\t\t\t\t>\n\t\t\t\t\t<div className=\"payman-v2-lightbox-controls\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName=\"payman-v2-lightbox-btn\"\n\t\t\t\t\t\t\taria-label=\"Download\"\n\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\thandleDownload();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Download size={20} strokeWidth={2} />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName=\"payman-v2-lightbox-btn\"\n\t\t\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<X size={20} strokeWidth={2} />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"payman-v2-lightbox-content\"\n\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\t\taria-label={alt || \"Image preview\"}\n\t\t\t\t\t>\n\t\t\t\t\t\t{!isImageLoaded ? (\n\t\t\t\t\t\t\t<div className=\"payman-v2-lightbox-loading\">\n\t\t\t\t\t\t\t\t<Loader2\n\t\t\t\t\t\t\t\t\tsize={24}\n\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\taria-hidden={true}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tcolor: \"rgba(255, 255, 255, 0.8)\",\n\t\t\t\t\t\t\t\t\t\tanimation: \"payman-v2-spin 0.6s linear infinite\",\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<p className=\"payman-v2-lightbox-loading-text\">\n\t\t\t\t\t\t\t\t\tLoading image\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t<div className=\"payman-v2-lightbox-img-wrapper\">\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tinitial={{ scale: 0.92, opacity: 0 }}\n\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\tscale: isImageLoaded ? 1 : 0.92,\n\t\t\t\t\t\t\t\t\topacity: isImageLoaded ? 1 : 0,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\texit={{ scale: 0.92, opacity: 0 }}\n\t\t\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\theight: \"100%\",\n\t\t\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\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<img\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-lightbox-img\"\n\t\t\t\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\t\t\t\talt={alt}\n\t\t\t\t\t\t\t\t\tdraggable={false}\n\t\t\t\t\t\t\t\t\tonLoad={() => setIsImageLoaded(true)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</motion.div>\n\t\t\t) : null}\n\t\t</AnimatePresence>,\n\t\tdocument.body\n\t);\n}\n","import { useChat, useChatV2, useVoice } from \"@paymanai/payman-typescript-ask-sdk\";\nimport type { UseChatReturn, UseChatV2Return } from \"@paymanai/payman-typescript-ask-sdk\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from \"react\";\nimport { PaymanChatContext } from \"../../contexts\";\nimport type {\n\tMessageActionsConfig,\n\tPaymanChatProps,\n\tPaymanChatRef,\n\tUserActionState,\n} from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { initSentryIfNeeded } from \"../../utils/sentry\";\nimport { ChatInput } from \"../ChatInput\";\nimport { MessageList } from \"../MessageList\";\nimport { ResetSessionConfirmModal } from \"../ResetSessionConfirmModal\";\nimport { UserActionModal } from \"../UserActionModal\";\nimport { MessageListV2 } from \"../v2/MessageListV2\";\nimport type { MessageListV2Handle } from \"../v2/MessageListV2\";\nimport { ChatInputV2 } from \"../v2/ChatInputV2\";\nimport type { ChatInputV2Handle } from \"../v2/ChatInputV2\";\nimport { ImageLightboxV2 } from \"../v2/ImageLightboxV2\";\nimport type { VerificationStatusV2 } from \"../v2/VerificationCardV2\";\n\nconst DEFAULT_USER_ACTION_STATE: UserActionState = {\n\trequest: null,\n\tresult: null,\n\tclearOtpTrigger: 0,\n};\n\nconst NOOP_ASYNC = async () => {};\n\ntype PaymanChatInnerProps = PaymanChatProps & { chat: UseChatReturn | UseChatV2Return };\n\nconst PaymanChatInner = forwardRef<PaymanChatRef, PaymanChatInnerProps>(function PaymanChatInner({\n\tconfig,\n\tcallbacks = {},\n\tclassName,\n\tstyle,\n\tchildren,\n\tonLoadMoreMessages,\n\tisLoadingMoreMessages = false,\n\thasMoreMessages = false,\n\tchat,\n}, ref) {\n\tconst [inputValue, setInputValue] = useState(\"\");\n\tconst prevInputValueRef = useRef(inputValue);\n\tconst [hasEverSentMessage, setHasEverSentMessage] = useState(false);\n\tconst [lightboxSrc, setLightboxSrc] = useState<string | null>(null);\n\tconst [lightboxAlt, setLightboxAlt] = useState(\"\");\n\tconst [editingMessageId, setEditingMessageId] = useState<string | null>(null);\n\tconst [isResetSessionConfirmOpen, setIsResetSessionConfirmOpen] =\n\t\tuseState(false);\n\tconst chatInputV2Ref = useRef<ChatInputV2Handle>(null);\n\tconst messageListV2Ref = useRef<MessageListV2Handle>(null);\n\tconst resetToEmptyStateRef = useRef(false);\n\n\tconst isV2 = config.uiVersion !== 1;\n\n\tuseEffect(() => {\n\t\tif (config.sentryDsn) {\n\t\t\tinitSentryIfNeeded(config.sentryDsn);\n\t\t}\n\t}, [config.sentryDsn]);\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// Track when messages first appear (for animation)\n\tuseEffect(() => {\n\t\tif (resetToEmptyStateRef.current) {\n\t\t\tif (messages.length === 0) {\n\t\t\t\tsetHasEverSentMessage(false);\n\t\t\t\tresetToEmptyStateRef.current = false;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (messages.length > 0 && !hasEverSentMessage) {\n\t\t\tsetHasEverSentMessage(true);\n\t\t}\n\t}, [messages.length, hasEverSentMessage]);\n\n\tuseEffect(() => {\n\t\tif (!editingMessageId) return;\n\t\tconst editingMessageStillExists = messages.some(\n\t\t\t(message) => message.id === editingMessageId && message.role === \"user\"\n\t\t);\n\t\tif (!editingMessageStillExists) {\n\t\t\tsetEditingMessageId(null);\n\t\t}\n\t}, [editingMessageId, messages]);\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\ttranscribedText,\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\tif (!isV2) {\n\t\t\t\t\tsetInputValue(text);\n\t\t\t\t}\n\t\t\t},\n\t\t\tonEnd: () => {},\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 {\n\t\tonExecutionTraceClick,\n\t\tonResetSession,\n\t\tonUploadImageClick,\n\t\tonAttachFileClick,\n\t} = callbacks;\n\n\tconst performResetSession = useCallback(() => {\n\t\tresetToEmptyStateRef.current = true;\n\t\tsetEditingMessageId(null);\n\t\tsetIsResetSessionConfirmOpen(false);\n\t\tsetInputValue(\"\");\n\t\tsetLightboxSrc(null);\n\t\tsetLightboxAlt(\"\");\n\t\tchatInputV2Ref.current?.setDraft(\"\");\n\t\tclearTranscript();\n\t\tif (isRecording) {\n\t\t\tstopRecording();\n\t\t}\n\t\tresetSession();\n\t\tonResetSession?.();\n\t}, [\n\t\tclearTranscript,\n\t\tisRecording,\n\t\tonResetSession,\n\t\tresetSession,\n\t\tstopRecording,\n\t]);\n\n\tconst requestResetSession = useCallback(() => {\n\t\tsetIsResetSessionConfirmOpen(true);\n\t}, []);\n\n\tconst closeResetSessionConfirm = useCallback(() => {\n\t\tsetIsResetSessionConfirmOpen(false);\n\t}, []);\n\n\t// Expose control methods via ref\n\tuseImperativeHandle(ref, () => ({\n\t\tresetSession: performResetSession,\n\t\tclearMessages,\n\t\tcancelStream,\n\t\tgetSessionId,\n\t\tgetMessages,\n\t}), [performResetSession, clearMessages, cancelStream, getSessionId, getMessages]);\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\temptyStateComponent,\n\t\tshowResetSession = false,\n\t\tshowAttachmentButton = true,\n\t\tshowUploadImageButton = true,\n\t\tshowAttachFileButton = true,\n\t\tmessageActions: messageActionsConfig,\n\t} = config;\n\n\tconst messageActions = useMemo<Required<MessageActionsConfig>>(\n\t\t() => ({\n\t\t\tuserMessageActions: {\n\t\t\t\tcopy: messageActionsConfig?.userMessageActions?.copy ?? true,\n\t\t\t\tedit: messageActionsConfig?.userMessageActions?.edit ?? false,\n\t\t\t\tretry: messageActionsConfig?.userMessageActions?.retry ?? false,\n\t\t\t},\n\t\t\tassistantMessageActions: {\n\t\t\t\tcopy: messageActionsConfig?.assistantMessageActions?.copy ?? true,\n\t\t\t\ttrace: messageActionsConfig?.assistantMessageActions?.trace ?? true,\n\t\t\t},\n\t\t}),\n\t\t[messageActionsConfig]\n\t);\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\tvoid sendMessage(inputValue.trim());\n\t\t\tsetInputValue(\"\");\n\t\t}\n\t};\n\n\tconst handleCancelRecording = () => {\n\t\tstopRecording();\n\t\tclearTranscript();\n\t\tsetInputValue(\"\");\n\t};\n\n\tconst handleConfirmRecording = () => {\n\t\tstopRecording();\n\t\t// Keep the transcribed text in the input for user to review/send\n\t};\n\n\tconst isInputDisabled =\n\t\tisWaitingForResponse || !isSessionParamsConfigured || disableInput;\n\tconst isV2InputDisabled = !isSessionParamsConfigured || disableInput;\n\n\tconst isEmpty = messages.length === 0;\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-background 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{children}\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\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-background 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{children}\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\t// --- V2 helpers ---\n\tconst handleImageClick = (src: string, alt: string) => {\n\t\tsetLightboxSrc(src);\n\t\tsetLightboxAlt(alt);\n\t};\n\n\tconst v2UserAction = useMemo(() => {\n\t\tif (!isUserActionSupported || !userActionState.request) return null;\n\t\tconst req = userActionState.request;\n\t\tlet status: VerificationStatusV2 = \"pending\";\n\t\tif (userActionState.result === \"approved\") status = \"approved\";\n\t\telse if (userActionState.result === \"rejected\") status = \"rejected\";\n\t\treturn {\n\t\t\tmessageId: `ua-${req.userActionId || Date.now()}`,\n\t\t\taction: {\n\t\t\t\ttype: req.userActionType || \"generic\",\n\t\t\t\tmessage: req.message || \"Verify this action\",\n\t\t\t\tamount: req.metadata?.amount,\n\t\t\t\tpayeeName: req.metadata?.payeeName,\n\t\t\t},\n\t\t\tstatus,\n\t\t};\n\t}, [isUserActionSupported, userActionState.request, userActionState.result]);\n\n\tconst handleV2Send = (text: string) => {\n\t\tif (isRecording) stopRecording();\n\t\tif (text.trim() && !disableInput && isSessionParamsConfigured) {\n\t\t\tsetEditingMessageId(null);\n\t\t\tvoid sendMessage(text.trim());\n\t\t}\n\t};\n\n\tconst handleVoicePress = useCallback(async () => {\n\t\tif (!voiceAvailable) return;\n\t\tif (isRecording) {\n\t\t\tstopRecording();\n\t\t\treturn;\n\t\t}\n\t\tclearTranscript();\n\t\tawait startRecording();\n\t}, [clearTranscript, isRecording, startRecording, stopRecording, voiceAvailable]);\n\n\tconst handleEditMessageDraft = useCallback((messageId: string) => {\n\t\tconst targetMessage = messages.find((message) => message.id === messageId);\n\t\tif (!targetMessage?.content.trim()) return;\n\t\tsetEditingMessageId(messageId);\n\t\tchatInputV2Ref.current?.setDraft(targetMessage.content);\n\t\trequestAnimationFrame(() => {\n\t\t\tmessageListV2Ref.current?.scrollToBottom(\"smooth\");\n\t\t});\n\t}, [messages]);\n\n\tconst handleRetryUserMessage = useCallback((messageId: string) => {\n\t\tif (isWaitingForResponse) return;\n\t\tconst targetMessage = messages.find(\n\t\t\t(message) => message.id === messageId && message.role === \"user\"\n\t\t);\n\t\tif (!targetMessage?.content.trim()) return;\n\t\tvoid sendMessage(targetMessage.content.trim());\n\t\tconst bump = () => messageListV2Ref.current?.scrollToBottom(\"instant\");\n\t\trequestAnimationFrame(() => {\n\t\t\tbump();\n\t\t\tqueueMicrotask(() => {\n\t\t\t\twindow.setTimeout(bump, 120);\n\t\t\t});\n\t\t});\n\t}, [isWaitingForResponse, messages, sendMessage]);\n\n\tconst handleClearEditing = useCallback(() => {\n\t\tsetEditingMessageId(null);\n\t}, []);\n\n\t// --- V2 Render ---\n\tif (isV2) {\n\t\treturn (\n\t\t\t<PaymanChatContext.Provider value={contextValue}>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\"payman-v2-root\", className)}\n\t\t\t\t\tstyle={style}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\n\t\t\t\t\t{isChatDisabled ? (\n\t\t\t\t\t\tdisabledComponent || (\n\t\t\t\t\t\t\t<div style={{ flex: 1, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", padding: \"1rem\" }}>\n\t\t\t\t\t\t\t\t<div style={{ textAlign: \"center\", color: \"var(--payman-v2-text-3)\", fontSize: \"0.875rem\" }}>\n\t\t\t\t\t\t\t\t\tChat is currently disabled\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) : (\n\t\t\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t\t\t{isEmpty && !hasEverSentMessage ? (\n\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\tkey=\"v2-empty\"\n\t\t\t\t\t\t\t\t\tinitial={{ opacity: 1 }}\n\t\t\t\t\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-chat-layout\"\n\t\t\t\t\t\t\t\t\tstyle={{ justifyContent: \"center\", alignItems: \"center\" }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\", justifyContent: \"center\", flex: 1, width: \"100%\" }}>\n\t\t\t\t\t\t\t\t\t\t<MessageList\n\t\t\t\t\t\t\t\t\t\t\tmessages={messages}\n\t\t\t\t\t\t\t\t\t\t\tisLoading={false}\n\t\t\t\t\t\t\t\t\t\t\temptyStateText={emptyStateText}\n\t\t\t\t\t\t\t\t\t\t\tshowEmptyStateIcon={showEmptyStateIcon}\n\t\t\t\t\t\t\t\t\t\t\temptyStateComponent={emptyStateComponent}\n\t\t\t\t\t\t\t\t\t\t\tlayout={layout}\n\t\t\t\t\t\t\t\t\t\t\tshowTimestamps={showTimestamps}\n\t\t\t\t\t\t\t\t\t\t\tstage={config.stage || \"DEV\"}\n\t\t\t\t\t\t\t\t\t\t\tanimated={animated}\n\t\t\t\t\t\t\t\t\t\t\tshowAgentName={showAgentName}\n\t\t\t\t\t\t\t\t\t\t\tagentName={agentName}\n\t\t\t\t\t\t\t\t\t\t\tshowAvatars={showAvatars}\n\t\t\t\t\t\t\t\t\t\t\tshowUserAvatar={showUserAvatar}\n\t\t\t\t\t\t\t\t\t\t\tshowAssistantAvatar={showAssistantAvatar}\n\t\t\t\t\t\t\t\t\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\t\t\t\t\t\t\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\t\t\t\t\t\t\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\t\t\t\t\t\t\t\t\tcompletedStepsText={completedStepsText}\n\t\t\t\t\t\t\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t\t\t\t\t\t\t\tonLoadMoreMessages={onLoadMoreMessages}\n\t\t\t\t\t\t\t\t\t\t\tisLoadingMoreMessages={isLoadingMoreMessages}\n\t\t\t\t\t\t\t\t\t\t\thasMoreMessages={hasMoreMessages}\n\t\t\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 12 }}\n\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\t\t\t\t\ttransition={{ delay: 0.2, duration: 0.4, ease: [0.25, 0.46, 0.45, 0.94] }}\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ width: \"100%\" }}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{hasAskPermission && (\n\t\t\t\t\t\t\t\t\t\t\t\t<ChatInputV2\n\t\t\t\t\t\t\t\t\t\t\t\t\tref={chatInputV2Ref}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonSend={handleV2Send}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonCancel={cancelStream}\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isV2InputDisabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\tisStreaming={isWaitingForResponse}\n\t\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={isRecording ? \"Listening...\" : placeholder}\n\t\t\t\t\t\t\t\t\t\t\t\t\tenableVoice={config.enableVoice === true}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttranscribedText={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconfig.enableVoice === true ? transcribedText : \"\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tvoiceAvailable={config.enableVoice === true && voiceAvailable}\n\t\t\t\t\t\t\t\t\t\t\t\t\tisRecording={isRecording}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonVoicePress={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconfig.enableVoice === true\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? handleVoicePress\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonCancelRecording={handleCancelRecording}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonConfirmRecording={handleConfirmRecording}\n\t\t\t\t\t\t\t\t\t\t\t\t\tshowResetSession={showResetSession}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonResetSession={requestResetSession}\n\t\t\t\t\t\t\t\t\t\t\t\t\tshowAttachmentButton={showAttachmentButton}\n\t\t\t\t\t\t\t\t\t\t\t\t\tshowUploadImageButton={showUploadImageButton}\n\t\t\t\t\t\t\t\t\t\t\t\t\tshowAttachFileButton={showAttachFileButton}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonUploadImageClick={onUploadImageClick}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonAttachFileClick={onAttachFileClick}\n\t\t\t\t\t\t\t\t\t\t\t\t\teditingMessageId={editingMessageId}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClearEditing={handleClearEditing}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\tkey=\"v2-chat\"\n\t\t\t\t\t\t\t\t\tinitial={hasEverSentMessage ? { opacity: 0 } : false}\n\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-chat-layout\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<MessageListV2\n\t\t\t\t\t\t\t\t\t\tref={messageListV2Ref}\n\t\t\t\t\t\t\t\t\t\tmessages={messages}\n\t\t\t\t\t\t\t\t\t\tisStreaming={isWaitingForResponse}\n\t\t\t\t\t\t\t\t\t\tonEditUserMessage={handleEditMessageDraft}\n\t\t\t\t\t\t\t\t\t\tonRetryUserMessage={handleRetryUserMessage}\n\t\t\t\t\t\t\t\t\t\tonImageClick={handleImageClick}\n\t\t\t\t\t\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t\t\t\t\t\t\tmessageActions={messageActions}\n\t\t\t\t\t\t\t\t\t\tretryDisabled={isWaitingForResponse}\n\t\t\t\t\t\t\t\t\t\tuserAction={v2UserAction}\n\t\t\t\t\t\t\t\t\t\tonApproveAction={\n\t\t\t\t\t\t\t\t\t\t\tisUserActionSupported\n\t\t\t\t\t\t\t\t\t\t\t\t? async (_msgId: string, otp: string) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tawait approveUserAction(otp);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tonRejectAction={\n\t\t\t\t\t\t\t\t\t\t\tisUserActionSupported\n\t\t\t\t\t\t\t\t\t\t\t\t? async () => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tawait rejectUserAction();\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tonResendAction={\n\t\t\t\t\t\t\t\t\t\t\tisUserActionSupported\n\t\t\t\t\t\t\t\t\t\t\t\t? async () => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tawait resendOtp();\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t: undefined\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{hasAskPermission && (\n\t\t\t\t\t\t\t\t\t\t<ChatInputV2\n\t\t\t\t\t\t\t\t\t\t\tref={chatInputV2Ref}\n\t\t\t\t\t\t\t\t\t\t\tonSend={handleV2Send}\n\t\t\t\t\t\t\t\t\t\t\tonCancel={cancelStream}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={isV2InputDisabled}\n\t\t\t\t\t\t\t\t\t\t\tisStreaming={isWaitingForResponse}\n\t\t\t\t\t\t\t\t\t\t\tplaceholder={isRecording ? \"Listening...\" : placeholder}\n\t\t\t\t\t\t\t\t\t\t\tenableVoice={config.enableVoice === true}\n\t\t\t\t\t\t\t\t\t\t\ttranscribedText={\n\t\t\t\t\t\t\t\t\t\t\t\tconfig.enableVoice === true ? transcribedText : \"\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tvoiceAvailable={config.enableVoice === true && voiceAvailable}\n\t\t\t\t\t\t\t\t\t\t\tisRecording={isRecording}\n\t\t\t\t\t\t\t\t\t\t\tonVoicePress={\n\t\t\t\t\t\t\t\t\t\t\t\tconfig.enableVoice === true\n\t\t\t\t\t\t\t\t\t\t\t\t\t? handleVoicePress\n\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tonCancelRecording={handleCancelRecording}\n\t\t\t\t\t\t\t\t\t\t\tonConfirmRecording={handleConfirmRecording}\n\t\t\t\t\t\t\t\t\t\t\tshowResetSession={showResetSession}\n\t\t\t\t\t\t\t\t\t\t\tonResetSession={requestResetSession}\n\t\t\t\t\t\t\t\t\t\t\tshowAttachmentButton={showAttachmentButton}\n\t\t\t\t\t\t\t\t\t\t\tshowUploadImageButton={showUploadImageButton}\n\t\t\t\t\t\t\t\t\t\t\tshowAttachFileButton={showAttachFileButton}\n\t\t\t\t\t\t\t\t\t\t\tonUploadImageClick={onUploadImageClick}\n\t\t\t\t\t\t\t\t\t\t\tonAttachFileClick={onAttachFileClick}\n\t\t\t\t\t\t\t\t\t\t\teditingMessageId={editingMessageId}\n\t\t\t\t\t\t\t\t\t\t\tonClearEditing={handleClearEditing}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<ImageLightboxV2\n\t\t\t\t\t\tsrc={lightboxSrc}\n\t\t\t\t\t\talt={lightboxAlt}\n\t\t\t\t\t\tonClose={() => setLightboxSrc(null)}\n\t\t\t\t\t/>\n\t\t\t\t\t<ResetSessionConfirmModal\n\t\t\t\t\t\tisOpen={isResetSessionConfirmOpen}\n\t\t\t\t\t\tonClose={closeResetSessionConfirm}\n\t\t\t\t\t\tonConfirm={performResetSession}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</PaymanChatContext.Provider>\n\t\t);\n\t}\n\n\t// --- V1 Render (original) ---\n\tconst inputElement = hasAskPermission && (\n\t\t<ChatInput\n\t\t\tvalue={inputValue}\n\t\t\tonChange={setInputValue}\n\t\t\tonSend={handleSend}\n\t\t\tonPause={cancelStream}\n\t\t\tdisabled={isInputDisabled}\n\t\t\tplaceholder={isRecording ? \"Listening...\" : placeholder}\n\t\t\tisWaitingForResponse={isWaitingForResponse}\n\t\t\thasSelectedSession={true}\n\t\t\tisSessionParamsConfigured={isSessionParamsConfigured}\n\t\t\tenableVoice={config.enableVoice === true}\n\t\t\tonVoicePress={config.enableVoice === true ? handleVoicePress : undefined}\n\t\t\tvoiceAvailable={config.enableVoice === true && voiceAvailable}\n\t\t\tisRecording={isRecording}\n\t\t\ttranscribedText={inputValue}\n\t\t\tonCancelRecording={handleCancelRecording}\n\t\t\tonConfirmRecording={handleConfirmRecording}\n\t\t\tinputStyle={inputStyle}\n\t\t\tlayout={layout}\n\t\t\tshowResetSession={showResetSession}\n\t\t\tonResetSession={requestResetSession}\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-background 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{children}\n\n\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t{isEmpty && !hasEverSentMessage ? (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tkey=\"empty-centered\"\n\t\t\t\t\t\t\tinitial={{ opacity: 1 }}\n\t\t\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\t\t\t\tclassName=\"payman-empty-centered-layout\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"payman-empty-centered-inner\">\n\t\t\t\t\t\t\t\t<MessageList\n\t\t\t\t\t\t\t\t\tmessages={messages}\n\t\t\t\t\t\t\t\t\tisLoading={false}\n\t\t\t\t\t\t\t\t\temptyStateText={emptyStateText}\n\t\t\t\t\t\t\t\t\tshowEmptyStateIcon={showEmptyStateIcon}\n\t\t\t\t\t\t\t\t\temptyStateComponent={emptyStateComponent}\n\t\t\t\t\t\t\t\t\tlayout={layout}\n\t\t\t\t\t\t\t\t\tshowTimestamps={showTimestamps}\n\t\t\t\t\t\t\t\t\tstage={config.stage || \"DEV\"}\n\t\t\t\t\t\t\t\t\tanimated={animated}\n\t\t\t\t\t\t\t\t\tshowAgentName={showAgentName}\n\t\t\t\t\t\t\t\t\tagentName={agentName}\n\t\t\t\t\t\t\t\t\tshowAvatars={showAvatars}\n\t\t\t\t\t\t\t\t\tshowUserAvatar={showUserAvatar}\n\t\t\t\t\t\t\t\t\tshowAssistantAvatar={showAssistantAvatar}\n\t\t\t\t\t\t\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\t\t\t\t\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\t\t\t\t\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\t\t\t\t\t\t\tcompletedStepsText={completedStepsText}\n\t\t\t\t\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t\t\t\t\t\tonLoadMoreMessages={onLoadMoreMessages}\n\t\t\t\t\t\t\t\t\tisLoadingMoreMessages={isLoadingMoreMessages}\n\t\t\t\t\t\t\t\t\thasMoreMessages={hasMoreMessages}\n\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 12 }}\n\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\t\t\ttransition={{ delay: 0.2, duration: 0.4, ease: [0.25, 0.46, 0.45, 0.94] }}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-empty-centered-input\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{inputElement}\n\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tkey=\"chat-layout\"\n\t\t\t\t\t\t\tinitial={hasEverSentMessage ? { opacity: 0 } : false}\n\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\t\t\t\tclassName=\"flex flex-col flex-1 min-h-0\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<MessageList\n\t\t\t\t\t\t\t\tmessages={messages}\n\t\t\t\t\t\t\t\tisLoading={false}\n\t\t\t\t\t\t\t\temptyStateText={emptyStateText}\n\t\t\t\t\t\t\t\tshowEmptyStateIcon={showEmptyStateIcon}\n\t\t\t\t\t\t\t\temptyStateComponent={emptyStateComponent}\n\t\t\t\t\t\t\t\tlayout={layout}\n\t\t\t\t\t\t\t\tshowTimestamps={showTimestamps}\n\t\t\t\t\t\t\t\tstage={config.stage || \"DEV\"}\n\t\t\t\t\t\t\t\tanimated={animated}\n\t\t\t\t\t\t\t\tshowAgentName={showAgentName}\n\t\t\t\t\t\t\t\tagentName={agentName}\n\t\t\t\t\t\t\t\tshowAvatars={showAvatars}\n\t\t\t\t\t\t\t\tshowUserAvatar={showUserAvatar}\n\t\t\t\t\t\t\t\tshowAssistantAvatar={showAssistantAvatar}\n\t\t\t\t\t\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\t\t\t\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\t\t\t\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\t\t\t\t\t\tcompletedStepsText={completedStepsText}\n\t\t\t\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t\t\t\t\tonLoadMoreMessages={onLoadMoreMessages}\n\t\t\t\t\t\t\t\tisLoadingMoreMessages={isLoadingMoreMessages}\n\t\t\t\t\t\t\t\thasMoreMessages={hasMoreMessages}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{inputElement}\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\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\t<ResetSessionConfirmModal\n\t\t\t\t\tisOpen={isResetSessionConfirmOpen}\n\t\t\t\t\tonClose={closeResetSessionConfirm}\n\t\t\t\t\tonConfirm={performResetSession}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</PaymanChatContext.Provider>\n\t);\n});\n\n// V1 shell — calls useChat, delegates to PaymanChatInner\nconst PaymanChatV1Shell = forwardRef<PaymanChatRef, PaymanChatProps>(\n\tfunction PaymanChatV1Shell(props, ref) {\n\t\tconst chat = useChat(props.config, props.callbacks);\n\t\treturn <PaymanChatInner {...props} chat={chat} ref={ref} />;\n\t},\n);\n\n// V2 shell — calls useChatV2, delegates to PaymanChatInner\nconst PaymanChatV2Shell = forwardRef<PaymanChatRef, PaymanChatProps>(\n\tfunction PaymanChatV2Shell(props, ref) {\n\t\tconst chat = useChatV2(props.config, props.callbacks);\n\t\treturn <PaymanChatInner {...props} chat={chat} ref={ref} />;\n\t},\n);\n\n// Outer dispatcher — picks v1 or v2 shell based on config.uiVersion\nexport const PaymanChat = forwardRef<PaymanChatRef, PaymanChatProps>(\n\tfunction PaymanChat(props, ref) {\n\t\tif (props.config.uiVersion !== 1) {\n\t\t\treturn <PaymanChatV2Shell {...props} ref={ref} />;\n\t\t}\n\t\treturn <PaymanChatV1Shell {...props} ref={ref} />;\n\t},\n);\n"]}
1
+ {"version":3,"sources":["../src/contexts/PaymanChatContext.tsx","../src/utils/cn.ts","../src/utils/formatDate.ts","../src/utils/sentryContext.ts","../src/utils/errorMessages.ts","../src/utils/sentry.ts","../src/components/ChatInput/index.tsx","../src/components/AgentMessage/ImageLightbox.tsx","../src/components/AgentMessage/MarkdownImage.tsx","../src/components/AgentMessage/markdownComponents.tsx","../src/components/AgentMessage/index.tsx","../src/components/UserMessage/index.tsx","../src/components/MessageRow/index.tsx","../src/components/MessageRowSkeleton/index.tsx","../src/components/MessageList/index.tsx","../src/components/ResetSessionConfirmModal/index.tsx","../src/components/OtpInput/index.tsx","../src/components/UserActionModal/constants.ts","../src/components/UserActionModal/utils.ts","../src/components/UserActionModal/index.tsx","../src/components/v2/ActionTooltipV2.tsx","../src/components/v2/UserMessageV2.tsx","../src/components/v2/MarkdownImageV2.tsx","../src/components/v2/MarkdownRendererV2.tsx","../src/components/v2/PaymanMark.tsx","../src/components/v2/ThinkingBlockV2.tsx","../src/components/v2/useTypingEffect.ts","../src/components/v2/AssistantMessageV2.tsx","../src/components/v2/OtpInputV2.tsx","../src/components/v2/VerificationCardV2.tsx","../src/components/v2/MessageListV2.tsx","../src/components/v2/ChatInputV2.tsx","../src/components/v2/ImageLightboxV2.tsx","../src/components/PaymanChat/index.tsx"],"names":["createContext","useContext","twMerge","clsx","Sentry","init","Sentry2","useRef","useState","useEffect","useCallback","jsx","jsxs","AnimatePresence","motion","Check","RotateCcw","Mic","ArrowUp","frameStyle","createPortal","X","Loader2","useMemo","Fragment","ChevronDown","Clock","ChevronRight","Sparkles","ReactMarkdown","remarkGfm","Binoculars","User","useLayoutEffect","ArrowDown","AlertCircle","Copy","Pencil","RAG_IMAGE_PATH_REGEX","isUnresolvedRagImageSource","ImageOff","Eye","interpolate","buildFormattedThinking","conflictErrorMessage","WifiOff","SearchCode","DEFAULT_MAX_LENGTH","MAX_SUPPORTED_LENGTH","AUTO_FOCUS_DELAY_MS","ShieldCheck","SCROLL_THRESHOLD","forwardRef","MessageListV2","useImperativeHandle","ChatInputV2","Plus","ImagePlus","Paperclip","Download","PaymanChatInner","useVoice","isEmpty","PaymanChatV1Shell","useChat","PaymanChatV2Shell","useChatV2","PaymanChat"],"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 * as Sentry from \"@sentry/react\";\n\nexport interface ChatSessionContext {\n\tsessionId?: string;\n\tsessionOwnerId?: string;\n\tworkflowName?: string;\n\texecutionId?: string;\n\tcfRay?: string;\n\troute?: string;\n\tcustomerId?: string;\n\tcustomerEmail?: string;\n}\n\n/**\n * Reports an error to Sentry enriched with chat session context.\n * Tags and context are scoped to this event so they don't leak\n * to unrelated errors.\n *\n * No-op when Sentry is not initialised.\n */\nexport function captureSentryError(\n\terror: Error | string,\n\tcontext: ChatSessionContext\n): void {\n\tif (!Sentry.getClient()) return;\n\n\tconst tags: Record<string, string> = {};\n\tif (context.executionId) tags.executionId = context.executionId;\n\tif (context.sessionId) tags.sessionId = context.sessionId;\n\tif (context.route) tags.route = context.route;\n\tif (context.cfRay) tags.cfRay = context.cfRay;\n\n\tif (context.customerId) tags.customerId = context.customerId;\n\tif (context.customerEmail) tags.customerEmail = context.customerEmail;\n\n\tconst contexts = {\n\t\tchat_session: {\n\t\t\tsessionId: context.sessionId ?? null,\n\t\t\tsessionOwnerId: context.sessionOwnerId ?? null,\n\t\t\texecutionId: context.executionId ?? null,\n\t\t\tworkflowName: context.workflowName ?? null,\n\t\t\tcfRay: context.cfRay ?? null,\n\t\t\tcustomerId: context.customerId ?? null,\n\t\t\tcustomerEmail: context.customerEmail ?? null,\n\t\t},\n\t};\n\n\tif (typeof error === \"string\") {\n\t\tSentry.captureMessage(error, { level: \"error\", tags, contexts });\n\t} else {\n\t\tSentry.captureException(error, { tags, contexts });\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// Targeted fetch interceptor for capturing cf-ray headers\n// ---------------------------------------------------------------------------\n\ntype CfRayListener = (cfRay: string) => void;\n\ninterface InterceptorEntry {\n\turlPattern: string;\n\tlistener: CfRayListener;\n}\n\nconst interceptors: Set<InterceptorEntry> = new Set();\nlet originalFetch: typeof globalThis.fetch | null = null;\n\nfunction patchFetch(): void {\n\tif (originalFetch !== null) return;\n\tif (typeof globalThis === \"undefined\" || typeof globalThis.fetch !== \"function\")\n\t\treturn;\n\n\toriginalFetch = globalThis.fetch;\n\n\tglobalThis.fetch = async function (\n\t\tthis: typeof globalThis,\n\t\tinput: RequestInfo | URL,\n\t\tinit?: RequestInit\n\t): Promise<Response> {\n\t\tconst response = await originalFetch!.call(this, input, init);\n\n\t\tif (interceptors.size > 0) {\n\t\t\tconst url =\n\t\t\t\ttypeof input === \"string\"\n\t\t\t\t\t? input\n\t\t\t\t\t: input instanceof URL\n\t\t\t\t\t\t? input.href\n\t\t\t\t\t\t: (input as Request).url;\n\n\t\t\ttry {\n\t\t\t\tconst cfRay = response.headers.get(\"cf-ray\");\n\t\t\t\tif (cfRay) {\n\t\t\t\t\tfor (const entry of interceptors) {\n\t\t\t\t\t\tif (url.includes(entry.urlPattern)) {\n\t\t\t\t\t\t\tentry.listener(cfRay);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// headers may be inaccessible on opaque responses\n\t\t\t}\n\t\t}\n\n\t\treturn response;\n\t};\n}\n\nfunction maybeUnpatchFetch(): void {\n\tif (interceptors.size > 0 || originalFetch === null) return;\n\tglobalThis.fetch = originalFetch;\n\toriginalFetch = null;\n}\n\n/**\n * Registers a listener that receives the `cf-ray` header value whenever a\n * fetch response URL contains `urlPattern`.\n *\n * Returns an unsubscribe function (call on unmount).\n */\nexport function subscribeToCfRay(\n\turlPattern: string,\n\tlistener: CfRayListener\n): () => void {\n\tconst entry: InterceptorEntry = { urlPattern, listener };\n\tpatchFetch();\n\tinterceptors.add(entry);\n\treturn () => {\n\t\tinterceptors.delete(entry);\n\t\tmaybeUnpatchFetch();\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 * as Sentry from \"@sentry/react\";\n\n/**\n * Initialise Sentry inside the SDK.\n * Only runs when a DSN is provided and Sentry has not already been initialised\n * by the host application, so it is safe to call even if the host also calls\n * Sentry.init().\n */\nexport function initSentryIfNeeded(dsn: string): void {\n\tif (!dsn) return;\n\n\t// getClient() returns undefined when Sentry has not been initialised yet\n\tif (Sentry.getClient()) return;\n\n\tSentry.init({\n\t\tdsn,\n\t\tsendDefaultPii: true,\n\t\tinitialScope: {\n\t\t\ttags: { source: \"payman-ask-sdk\" },\n\t\t},\n\t});\n}\n","import { AnimatePresence, motion } from \"framer-motion\";\nimport { ArrowUp, Check, Mic, RotateCcw } from \"lucide-react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { ChatInputProps } from \"../../types\";\nimport { cn } from \"../../utils\";\n\nconst AI_DISCLAIMER_TEXT =\n\t\"AI can make mistakes. Please double-check responses.\";\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\ttranscribedText = \"\",\n\tonCancelRecording,\n\tonConfirmRecording,\n\tshowResetSession = false,\n\tonResetSession,\n}: ChatInputProps) {\n\tconst textareaRef = useRef<HTMLTextAreaElement>(null);\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst prevWaitingRef = useRef(isWaitingForResponse);\n\tconst [recordingSeconds, setRecordingSeconds] = useState(0);\n\tconst recordingTimerRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\tconst [isFocused, setIsFocused] = useState(false);\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(scrollHeight, maxHeight)}px`;\n\t\t}\n\t}, [value]);\n\n\t// Auto-focus on mount\n\tuseEffect(() => {\n\t\trequestAnimationFrame(() => {\n\t\t\ttextareaRef.current?.focus();\n\t\t});\n\t}, []);\n\n\t// Re-focus after response completes\n\tuseEffect(() => {\n\t\tconst wasWaiting = prevWaitingRef.current;\n\t\tprevWaitingRef.current = isWaitingForResponse;\n\t\tif (wasWaiting && !isWaitingForResponse) {\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\ttextareaRef.current?.focus();\n\t\t\t\tcontainerRef.current?.scrollIntoView({ block: \"end\", behavior: \"smooth\" });\n\t\t\t});\n\t\t}\n\t}, [isWaitingForResponse]);\n\n\t// Recording timer\n\tuseEffect(() => {\n\t\tif (isRecording) {\n\t\t\tsetRecordingSeconds(0);\n\t\t\trecordingTimerRef.current = setInterval(() => {\n\t\t\t\tsetRecordingSeconds((s) => s + 1);\n\t\t\t}, 1000);\n\t\t} else {\n\t\t\tif (recordingTimerRef.current) {\n\t\t\t\tclearInterval(recordingTimerRef.current);\n\t\t\t\trecordingTimerRef.current = null;\n\t\t\t}\n\t\t\tsetRecordingSeconds(0);\n\t\t}\n\t\treturn () => {\n\t\t\tif (recordingTimerRef.current) {\n\t\t\t\tclearInterval(recordingTimerRef.current);\n\t\t\t}\n\t\t};\n\t}, [isRecording]);\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 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\tconst formatTime = useCallback((seconds: number) => {\n\t\tconst mins = Math.floor(seconds / 60);\n\t\tconst secs = seconds % 60;\n\t\treturn `${String(mins).padStart(2, \"0\")}:${String(secs).padStart(2, \"0\")}`;\n\t}, []);\n\n\tconst handleCancel = () => {\n\t\tif (onCancelRecording) {\n\t\t\tonCancelRecording();\n\t\t} else if (onVoicePress) {\n\t\t\tonVoicePress();\n\t\t}\n\t};\n\n\tconst handleConfirm = () => {\n\t\tif (onConfirmRecording) {\n\t\t\tonConfirmRecording();\n\t\t} else if (onVoicePress) {\n\t\t\tonVoicePress();\n\t\t}\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName={cn(\"payman-chat-input-wrapper\", className)}\n\t\t>\n\t\t\t<div className=\"payman-chat-input-container\">\n\t\t\t\t<div className=\"payman-chat-input-inner\">\n\t\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t\t{isRecording ? (\n\t\t\t\t\t\t\t/* ======== Recording State ======== */\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tkey=\"recording\"\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\texit={{ opacity: 0, y: 6 }}\n\t\t\t\t\t\t\t\ttransition={{ duration: 0.25, ease: [0.25, 0.46, 0.45, 0.94] }}\n\t\t\t\t\t\t\t\tclassName=\"payman-chat-input payman-chat-input--recording\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{/* Live transcript area */}\n\t\t\t\t\t\t\t\t<div className=\"payman-recording-transcript-area\">\n\t\t\t\t\t\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t\t\t\t\t\t{transcribedText ? (\n\t\t\t\t\t\t\t\t\t\t\t<motion.p\n\t\t\t\t\t\t\t\t\t\t\t\tkey=\"text\"\n\t\t\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t\t\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.15 }}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-recording-transcript-text\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{transcribedText}\n\t\t\t\t\t\t\t\t\t\t\t\t<motion.span\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-recording-cursor\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: [1, 0] }}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.8, repeat: Infinity, repeatType: \"reverse\" }}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</motion.p>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<motion.p\n\t\t\t\t\t\t\t\t\t\t\t\tkey=\"placeholder\"\n\t\t\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 0.5 }}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-recording-transcript-placeholder\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\tListening...\n\t\t\t\t\t\t\t\t\t\t\t</motion.p>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t{/* Bottom bar: Cancel · dot timer · confirm */}\n\t\t\t\t\t\t\t\t<div className=\"payman-recording-bar\">\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={handleCancel}\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-recording-btn-cancel\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Cancel recording\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\tCancel\n\t\t\t\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t\t\t\t<div className=\"payman-recording-indicator\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"payman-recording-dot\" />\n\t\t\t\t\t\t\t\t\t\t<span className=\"payman-recording-timer\">\n\t\t\t\t\t\t\t\t\t\t\t{formatTime(recordingSeconds)}\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<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={handleConfirm}\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-recording-btn-confirm\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Confirm recording\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Check className=\"w-4 h-4\" strokeWidth={2.5} />\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t/* ======== Normal Input State ======== */\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tkey=\"input\"\n\t\t\t\t\t\t\t\tinitial={false}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\t\texit={{ opacity: 0, y: 6 }}\n\t\t\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"payman-chat-input\",\n\t\t\t\t\t\t\t\t\tisFocused && \"payman-chat-input--focused\"\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{/* Textarea */}\n\t\t\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\t\t\tref={textareaRef}\n\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t\tonChange={(e) => onChange(e.target.value)}\n\t\t\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\t\t\tonFocus={() => setIsFocused(true)}\n\t\t\t\t\t\t\t\t\tonBlur={() => setIsFocused(false)}\n\t\t\t\t\t\t\t\t\tonClick={onClick}\n\t\t\t\t\t\t\t\t\tdisabled={isInputDisabled}\n\t\t\t\t\t\t\t\t\tplaceholder={getPlaceholder()}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-chat-input-field\"\n\t\t\t\t\t\t\t\t\trows={1}\n\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t{/* Bottom action bar */}\n\t\t\t\t\t\t\t\t<div className=\"payman-chat-input-bottom\">\n\t\t\t\t\t\t\t\t\t{/* Left: reset session */}\n\t\t\t\t\t\t\t\t\t<div className=\"payman-chat-input-actions-left\">\n\t\t\t\t\t\t\t\t\t\t{showResetSession && onResetSession && (\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={onResetSession}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isWaitingForResponse}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-chat-input-btn-reset\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"New Session\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<RotateCcw className=\"w-3.5 h-3.5\" strokeWidth={2.5} />\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"payman-chat-input-btn-reset-tooltip\">New Session</span>\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t{/* Right: voice + send */}\n\t\t\t\t\t\t\t\t\t<div className=\"payman-chat-input-actions\">\n\t\t\t\t\t\t\t\t\t\t{showVoiceButton && (\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={onVoicePress}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isVoiceButtonDisabled}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-chat-input-btn-voice\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"Voice input\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<Mic className=\"w-[18px] h-[18px]\" />\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={onSend}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={!canSend}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-chat-input-btn-send\"\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Send message\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\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\t\t</button>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t<p className=\"payman-chat-input-disclaimer\">{AI_DISCLAIMER_TEXT}</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { AnimatePresence, motion } from \"framer-motion\";\nimport { Loader2, X } from \"lucide-react\";\nimport type { CSSProperties } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\n\ntype ImageLightboxProps = {\n\tsrc: string;\n\talt?: string;\n\tonClose: () => void;\n};\n\nexport function ImageLightbox({\n\tsrc,\n\talt = \"\",\n\tonClose,\n}: ImageLightboxProps) {\n\tconst [isMounted, setIsMounted] = useState(false);\n\tconst [isImageLoaded, setIsImageLoaded] = useState(false);\n\tconst overlayStyle: CSSProperties = {\n\t\tposition: \"fixed\",\n\t\tinset: 0,\n\t\tzIndex: 2147483647,\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tpadding: 16,\n\t\tbackground: \"rgba(2, 6, 23, 0.92)\",\n\t\tisolation: \"isolate\",\n\t};\n\tconst frameStyle: CSSProperties = {\n\t\tposition: \"relative\",\n\t\twidth: \"min(92vw, 1280px)\",\n\t\theight: \"min(88vh, 920px)\",\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\toverflow: \"hidden\",\n\t};\n\n\tuseEffect(() => {\n\t\tsetIsMounted(true);\n\t\treturn () => setIsMounted(false);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tsetIsImageLoaded(false);\n\t}, [src]);\n\n\tuseEffect(() => {\n\t\tif (typeof document === \"undefined\") return;\n\n\t\tconst previousOverflow = document.body.style.overflow;\n\t\tdocument.body.style.overflow = \"hidden\";\n\n\t\treturn () => {\n\t\t\tdocument.body.style.overflow = previousOverflow;\n\t\t};\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (typeof document === \"undefined\") return;\n\n\t\tconst handleKeyDown = (event: KeyboardEvent) => {\n\t\t\tif (event.key === \"Escape\") {\n\t\t\t\tonClose();\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};\n\t}, [onClose]);\n\n\tif (!isMounted || typeof document === \"undefined\") {\n\t\treturn null;\n\t}\n\n\treturn createPortal(\n\t\t<AnimatePresence>\n\t\t\t<motion.div\n\t\t\t\tstyle={overlayStyle}\n\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\ttransition={{ duration: 0.18 }}\n\t\t\t\tonClick={onClose}\n\t\t\t>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={onClose}\n\t\t\t\t\tclassName=\"absolute top-4 right-4 z-[1] flex h-9 w-9 items-center justify-center rounded-full bg-black/60 text-white/90 transition-colors hover:bg-black/75\"\n\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t>\n\t\t\t\t\t<X className=\"h-4 w-4\" />\n\t\t\t\t</button>\n\n\t\t\t\t<div style={frameStyle} onClick={(event) => event.stopPropagation()}>\n\t\t\t\t\t{!isImageLoaded ? (\n\t\t\t\t\t\t<div className=\"absolute inset-0 flex flex-col items-center justify-center gap-2\">\n\t\t\t\t\t\t\t<Loader2 className=\"h-5 w-5 animate-spin text-white/80\" />\n\t\t\t\t\t\t\t<p className=\"text-sm font-medium text-white/90\">\n\t\t\t\t\t\t\t\tLoading image\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p className=\"text-xs text-white/60\">Reference image</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : null}\n\n\t\t\t\t\t<div className=\"flex h-full w-full items-center justify-center p-3 sm:p-4\">\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\t\talt={alt}\n\t\t\t\t\t\t\tdraggable={false}\n\t\t\t\t\t\t\tonLoad={() => setIsImageLoaded(true)}\n\t\t\t\t\t\t\tclassName={`block h-full w-full rounded-xl object-contain shadow-2xl transition-opacity duration-200 ${\n\t\t\t\t\t\t\t\tisImageLoaded ? \"opacity-100\" : \"opacity-0\"\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</motion.div>\n\t\t</AnimatePresence>,\n\t\tdocument.body,\n\t);\n}\n","import { Loader2 } from \"lucide-react\";\nimport type { CSSProperties } from \"react\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { ImageLightbox } from \"./ImageLightbox\";\n\nconst RAG_IMAGE_PATH_REGEX =\n\t/^(?:https?:\\/\\/[^/\\s]+)?\\/api\\/rag\\/chunks\\/[^\"'\\s]+\\/image(?:[?#][^\"'\\s]*)?$/;\n\nfunction isUnresolvedRagImageSource(src: string) {\n\treturn RAG_IMAGE_PATH_REGEX.test(src);\n}\n\nfunction LoadingImageCard({\n\tlabel,\n\tdescription,\n}: {\n\tlabel: string;\n\tdescription: string;\n}) {\n\treturn (\n\t\t<span className=\"my-3 flex min-h-36 w-full flex-col items-center justify-center gap-2 px-4 py-5 text-center\">\n\t\t\t<Loader2 className=\"h-5 w-5 animate-spin text-slate-500 dark:text-slate-300\" />\n\t\t\t<span className=\"text-xs font-medium text-slate-600 dark:text-slate-200\">\n\t\t\t\t{label}\n\t\t\t</span>\n\t\t\t<span className=\"text-[11px] leading-relaxed text-slate-500/90 dark:text-slate-300/80\">\n\t\t\t\t{description}\n\t\t\t</span>\n\t\t</span>\n\t);\n}\n\nfunction BrokenImageCard({ alt }: { alt?: string }) {\n\treturn (\n\t\t<span className=\"my-3 flex min-h-44 w-full flex-col items-center justify-center gap-2 rounded-xl border border-dashed border-red-200 bg-red-50/60 px-4 py-5 text-center dark:border-red-900/40 dark:bg-red-950/20\">\n\t\t\t<span className=\"text-xs font-medium text-red-600 dark:text-red-300\">\n\t\t\t\tUnable to load image\n\t\t\t</span>\n\t\t\t{alt ? (\n\t\t\t\t<span className=\"max-w-sm text-[11px] leading-relaxed text-red-500/80 dark:text-red-200/80\">\n\t\t\t\t\t{alt}\n\t\t\t\t</span>\n\t\t\t) : null}\n\t\t</span>\n\t);\n}\n\ntype MarkdownImageProps = {\n\tsrc?: string;\n\talt?: string;\n\tisResolving?: boolean;\n};\n\nexport function MarkdownImage({\n\tsrc,\n\talt,\n\tisResolving = false,\n}: MarkdownImageProps) {\n\tconst imageFrameStyle: CSSProperties = {\n\t\twidth: \"min(100%, 32rem)\",\n\t\tmaxWidth: \"100%\",\n\t};\n\tconst imageStyle: CSSProperties = {\n\t\tdisplay: \"block\",\n\t\twidth: \"100%\",\n\t\theight: \"auto\",\n\t\tmaxWidth: \"100%\",\n\t\tmaxHeight: \"18rem\",\n\t\tobjectFit: \"contain\",\n\t};\n\tconst [isLoaded, setIsLoaded] = useState(false);\n\tconst [hasError, setHasError] = useState(false);\n\tconst [isLightboxOpen, setIsLightboxOpen] = useState(false);\n\tconst isUnresolvedRagImage = useMemo(\n\t\t() => (src ? isUnresolvedRagImageSource(src) : false),\n\t\t[src]\n\t);\n\tconst isResolvingRagImage = isResolving && isUnresolvedRagImage;\n\n\tuseEffect(() => {\n\t\tsetIsLoaded(false);\n\t\tsetHasError(false);\n\t\tsetIsLightboxOpen(false);\n\t}, [src]);\n\n\tif (!src) {\n\t\treturn null;\n\t}\n\n\tif (isResolvingRagImage) {\n\t\treturn (\n\t\t\t<LoadingImageCard label=\"Loading image\" description=\"Reference image\" />\n\t\t);\n\t}\n\n\tif (hasError) {\n\t\treturn <BrokenImageCard alt={alt} />;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<span className=\"my-3 block w-full\">\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tif (isLoaded) {\n\t\t\t\t\t\t\tsetIsLightboxOpen(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t\tdisabled={!isLoaded}\n\t\t\t\t\taria-busy={!isLoaded}\n\t\t\t\t\tclassName=\"group relative mx-auto flex w-full items-center justify-center overflow-hidden rounded-xl bg-black/[0.03] px-3 py-3 text-left transition-colors hover:bg-black/[0.05] disabled:cursor-wait disabled:hover:bg-black/[0.03] dark:bg-white/[0.03] dark:hover:bg-white/[0.05] dark:disabled:hover:bg-white/[0.03]\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t...imageFrameStyle,\n\t\t\t\t\t\t...(!isLoaded ? { minHeight: \"9rem\" } : {}),\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\talt={alt || \"\"}\n\t\t\t\t\t\tclassName={`relative z-[1] block h-auto max-h-[22rem] w-full max-w-full rounded-lg object-contain transition-opacity duration-200 ${\n\t\t\t\t\t\t\tisLoaded ? \"opacity-100\" : \"opacity-0\"\n\t\t\t\t\t\t}`}\n\t\t\t\t\t\tstyle={imageStyle}\n\t\t\t\t\t\tonLoad={() => {\n\t\t\t\t\t\t\tsetHasError(false);\n\t\t\t\t\t\t\tsetIsLoaded(true);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonError={() => {\n\t\t\t\t\t\t\tsetIsLoaded(false);\n\t\t\t\t\t\t\tsetHasError(true);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</button>\n\t\t\t</span>\n\n\t\t\t{isLightboxOpen && isLoaded ? (\n\t\t\t\t<ImageLightbox\n\t\t\t\t\tsrc={src}\n\t\t\t\t\talt={alt}\n\t\t\t\t\tonClose={() => setIsLightboxOpen(false)}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t</>\n\t);\n}\n","import type { Components } from \"react-markdown\";\nimport { MarkdownImage } from \"./MarkdownImage\";\n\ntype CreateMarkdownComponentsOptions = {\n\tisResolvingImages?: boolean;\n};\n\nexport function createMarkdownComponents(\n\toptions: CreateMarkdownComponentsOptions = {},\n): Components {\n\treturn {\n\t\tp: ({ children }) => (\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 }) => {\n\t\t\tconst isInline = !codeClassName;\n\n\t\t\treturn isInline ? (\n\t\t\t\t<code className=\"payman-agent-code-inline rounded-md px-1.5 py-0.5 font-mono text-xs break-all\">\n\t\t\t\t\t{children}\n\t\t\t\t</code>\n\t\t\t) : (\n\t\t\t\t<code className=\"payman-agent-code-block my-2 block overflow-x-auto rounded-lg p-3 font-mono text-xs whitespace-pre\">\n\t\t\t\t\t{children}\n\t\t\t\t</code>\n\t\t\t);\n\t\t},\n\t\tpre: ({ children }) => (\n\t\t\t<pre className=\"my-2 max-w-full overflow-x-auto rounded-lg\">\n\t\t\t\t{children}\n\t\t\t</pre>\n\t\t),\n\t\tul: ({ children }) => (\n\t\t\t<ul className=\"mb-3 ml-4 list-disc space-y-1 text-sm\">{children}</ul>\n\t\t),\n\t\tol: ({ children }) => (\n\t\t\t<ol className=\"mb-3 ml-4 list-decimal space-y-1 text-sm\">{children}</ol>\n\t\t),\n\t\tli: ({ children }) => <li className=\"text-sm leading-relaxed\">{children}</li>,\n\t\th1: ({ children }) => (\n\t\t\t<h1 className=\"mt-4 mb-2 text-lg font-semibold first:mt-0\">{children}</h1>\n\t\t),\n\t\th2: ({ children }) => (\n\t\t\t<h2 className=\"mt-3 mb-2 text-base font-semibold first:mt-0\">\n\t\t\t\t{children}\n\t\t\t</h2>\n\t\t),\n\t\th3: ({ children }) => (\n\t\t\t<h3 className=\"mt-2 mb-1 text-sm font-semibold first:mt-0\">{children}</h3>\n\t\t),\n\t\tstrong: ({ children }) => <strong className=\"font-semibold\">{children}</strong>,\n\t\tem: ({ children }) => <em className=\"italic\">{children}</em>,\n\t\tblockquote: ({ children }) => (\n\t\t\t<blockquote className=\"payman-agent-blockquote my-2 pl-4 italic\">\n\t\t\t\t{children}\n\t\t\t</blockquote>\n\t\t),\n\t\thr: () => <hr className=\"payman-agent-hr my-4\" />,\n\t\ta: ({ href, children }) => (\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=\"payman-agent-link underline decoration-1 underline-offset-2\"\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</a>\n\t\t),\n\t\timg: ({ src, alt }) => (\n\t\t\t<MarkdownImage\n\t\t\t\tsrc={typeof src === \"string\" ? src : undefined}\n\t\t\t\talt={typeof alt === \"string\" ? alt : undefined}\n\t\t\t\tisResolving={options.isResolvingImages}\n\t\t\t/>\n\t\t),\n\t\ttable: ({ children }) => (\n\t\t\t<div className=\"relative my-4 -mx-1 w-full overflow-x-auto\">\n\t\t\t\t<table className=\"payman-agent-table min-w-full caption-bottom overflow-hidden rounded-lg text-sm\">\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 }) => (\n\t\t\t<thead className=\"payman-agent-thead [&_tr]:border-b\">{children}</thead>\n\t\t),\n\t\ttbody: ({ children }) => (\n\t\t\t<tbody className=\"[&_tr:last-child]:border-0\">{children}</tbody>\n\t\t),\n\t\ttr: ({ children }) => (\n\t\t\t<tr className=\"payman-agent-tr border-b transition-colors\">{children}</tr>\n\t\t),\n\t\tth: ({ children }) => (\n\t\t\t<th className=\"h-10 px-3 text-left align-middle text-xs font-medium whitespace-nowrap\">\n\t\t\t\t{children}\n\t\t\t</th>\n\t\t),\n\t\ttd: ({ children }) => (\n\t\t\t<td className=\"p-3 align-middle text-sm whitespace-nowrap\">{children}</td>\n\t\t),\n\t};\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 { createMarkdownComponents } from \"./markdownComponents\";\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\tconst markdownRenderers = useMemo(\n\t\t() =>\n\t\t\tcreateMarkdownComponents({\n\t\t\t\tisResolvingImages: message.isResolvingImages,\n\t\t\t}),\n\t\t[message.isResolvingImages],\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={markdownRenderers}\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","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 } 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\temptyStateComponent,\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\", 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{/* Custom component (e.g. logo/illustration) from integrator */}\n\t\t\t\t\t{emptyStateComponent && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tinitial={{ scale: 0.9, opacity: 0 }}\n\t\t\t\t\t\t\tanimate={{ scale: 1, opacity: 1 }}\n\t\t\t\t\t\t\ttransition={{ delay: 0.05, duration: 0.45, ease: [0.25, 0.46, 0.45, 0.94] }}\n\t\t\t\t\t\t\tclassName=\"payman-empty-custom-component\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{emptyStateComponent}\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t\t<div className=\"payman-empty-text-group\">\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 { useCallback, useEffect } from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\n\nexport type ResetSessionConfirmModalProps = {\n\tisOpen: boolean;\n\tonClose: () => void;\n\tonConfirm: () => void;\n};\n\nexport function ResetSessionConfirmModal({\n\tisOpen,\n\tonClose,\n\tonConfirm,\n}: ResetSessionConfirmModalProps) {\n\tconst handleKeyDown = useCallback(\n\t\t(event: KeyboardEvent) => {\n\t\t\tif (event.key === \"Escape\") {\n\t\t\t\tonClose();\n\t\t\t}\n\t\t},\n\t\t[onClose],\n\t);\n\n\tuseEffect(() => {\n\t\tif (!isOpen || typeof document === \"undefined\") return;\n\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown);\n\t\tconst previousOverflow = document.body.style.overflow;\n\t\tdocument.body.style.overflow = \"hidden\";\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"keydown\", handleKeyDown);\n\t\t\tdocument.body.style.overflow = previousOverflow;\n\t\t};\n\t}, [handleKeyDown, isOpen]);\n\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{isOpen ? (\n\t\t\t\t<motion.div\n\t\t\t\t\tclassName=\"payman-reset-session-modal-backdrop\"\n\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\ttransition={{ duration: 0.18 }}\n\t\t\t\t\tonClick={onClose}\n\t\t\t\t\trole=\"presentation\"\n\t\t\t\t>\n\t\t\t\t\t<div className=\"payman-reset-session-modal-overlay\" />\n\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tinitial={{ opacity: 0, y: 12, scale: 0.98 }}\n\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\t\t\texit={{ opacity: 0, y: 8, scale: 0.98 }}\n\t\t\t\t\t\ttransition={{ duration: 0.2, ease: [0.16, 1, 0.3, 1] }}\n\t\t\t\t\t\tclassName=\"payman-reset-session-modal-dialog\"\n\t\t\t\t\t\tonClick={(event) => event.stopPropagation()}\n\t\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\t\taria-labelledby=\"payman-reset-session-title\"\n\t\t\t\t\t\taria-describedby=\"payman-reset-session-description\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"payman-reset-session-modal-copy\">\n\t\t\t\t\t\t\t<p className=\"payman-reset-session-modal-eyebrow\">\n\t\t\t\t\t\t\t\tNew Session\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<h2\n\t\t\t\t\t\t\t\tid=\"payman-reset-session-title\"\n\t\t\t\t\t\t\t\tclassName=\"payman-reset-session-modal-title\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tStart a new session?\n\t\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\tid=\"payman-reset-session-description\"\n\t\t\t\t\t\t\t\tclassName=\"payman-reset-session-modal-description\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tThis will clear the current conversation and start fresh.\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div className=\"payman-reset-session-modal-actions\">\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={onClose}\n\t\t\t\t\t\t\t\tclassName=\"payman-reset-session-modal-btn payman-reset-session-modal-btn-secondary\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tCancel\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={onConfirm}\n\t\t\t\t\t\t\t\tclassName=\"payman-reset-session-modal-btn payman-reset-session-modal-btn-primary\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tNew Session\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</motion.div>\n\t\t\t\t</motion.div>\n\t\t\t) : null}\n\t\t</AnimatePresence>\n\t);\n}\n","import { useEffect, useRef, useState } 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;\nconst COMPLETE_PULSE_MS = 400;\n\nexport function OtpInput({\n\tvalue,\n\tonChange,\n\tmaxLength,\n\tdisabled = false,\n\terror = false,\n}: OtpInputProps) {\n\tconst inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n\tconst [completePulse, setCompletePulse] = useState(false);\n\tconst prevLenRef = useRef(0);\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\tconst isFull =\n\t\tvalue.length === safeMaxLength && /^\\d+$/.test(value);\n\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\t// Trigger completion pulse when last digit is typed\n\tuseEffect(() => {\n\t\tlet t: number | undefined;\n\t\tif (isFull && prevLenRef.current < safeMaxLength) {\n\t\t\tsetCompletePulse(true);\n\t\t\tt = window.setTimeout(\n\t\t\t\t() => setCompletePulse(false),\n\t\t\t\tCOMPLETE_PULSE_MS\n\t\t\t);\n\t\t}\n\t\tprevLenRef.current = value.length;\n\t\treturn () => {\n\t\t\tif (typeof t === \"number\") {\n\t\t\t\twindow.clearTimeout(t);\n\t\t\t}\n\t\t};\n\t}, [isFull, value.length, safeMaxLength]);\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\n\t\t\tclassName={cn(\n\t\t\t\t\"flex justify-center\",\n\t\t\t\terror && \"payman-otp-shake\",\n\t\t\t\tcompletePulse && \"payman-otp-complete-pulse\"\n\t\t\t)}\n\t\t\tstyle={{ gap: 10 }}\n\t\t>\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\"text-center font-semibold rounded-lg\",\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\terror && \"payman-otp-input--error\"\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: 44,\n\t\t\t\t\t\theight: 50,\n\t\t\t\t\t\tfontSize: 20,\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\t/** Link-style actions (new layout) */\n\tRESEND_CODE: \"Resend OTP\",\n\tCANCEL_TRANSFER: \"Cancel Payment\",\n\t/** Short cancel label for payee approval flows */\n\tCANCEL: \"Cancel\",\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\tSECURED_BY_PREFIX: \"Secured by\",\n\tSECURED_BY_BRAND: \"Payman\",\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\n/**\n * Format backend amount string (e.g. \"2500.00\", \"53.00\") for display as USD.\n */\nexport function formatAmountForDisplay(amount: string): string {\n\tconst normalized = amount.replace(/,/g, \"\").trim();\n\tconst n = Number(normalized);\n\tif (!Number.isFinite(n)) {\n\t\treturn amount.startsWith(\"$\") ? amount : `$${amount}`;\n\t}\n\treturn new Intl.NumberFormat(\"en-US\", {\n\t\tstyle: \"currency\",\n\t\tcurrency: \"USD\",\n\t}).format(n);\n}\n","import { Loader2, X } from \"lucide-react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport paymanLogoMark from \"../../assets/payman-mono-crop-blue.png\";\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 { formatAmountForDisplay, getOtpSchemaFromRequest } from \"./utils\";\n\nconst OTP_ERROR_FLASH_MS = 600;\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 [otpError, setOtpError] = useState(false);\n\tconst dialogRef = useRef<HTMLDivElement | null>(null);\n\tconst previousFocusedRef = useRef<HTMLElement | null>(null);\n\tconst lastAutoSubmittedRef = useRef<string>(\"\");\n\tconst submitInFlightRef = useRef(false);\n\tconst submitGenerationRef = useRef(0);\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\tsetOtpError(false);\n\t\t\tlastAutoSubmittedRef.current = \"\";\n\t\t\tsubmitInFlightRef.current = false;\n\t\t\tsubmitGenerationRef.current += 1;\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\t// Wrong OTP — clearOtpTrigger fires, flash red + shake, then clear\n\tuseEffect(() => {\n\t\tif (clearOtpTrigger > 0) {\n\t\t\tsetOtpError(true);\n\t\t\tconst t = setTimeout(() => {\n\t\t\t\tsetOtpError(false);\n\t\t\t\tsetOtp(\"\");\n\t\t\t\tresetActionState();\n\t\t\t}, OTP_ERROR_FLASH_MS);\n\t\t\treturn () => clearTimeout(t);\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// Auto-submit when OTP is complete (digits only, length matches schema).\n\tuseEffect(() => {\n\t\tif (!isOpen || !userActionRequest) return;\n\t\tif (otp.length !== schema.maxLength || !/^\\d+$/.test(otp)) {\n\t\t\treturn;\n\t\t}\n\t\tif (isSubmitting || submitInFlightRef.current) return;\n\t\tif (lastAutoSubmittedRef.current === otp) return;\n\n\t\tlastAutoSubmittedRef.current = otp;\n\t\tsubmitInFlightRef.current = true;\n\t\tconst submitGeneration = submitGenerationRef.current;\n\n\t\tvoid (async () => {\n\t\t\tsetIsSubmitting(true);\n\t\t\tsetActionType(\"approve\");\n\t\t\ttry {\n\t\t\t\tawait onApprove(otp);\n\t\t\t} catch {\n\t\t\t\tif (submitGenerationRef.current !== submitGeneration) return;\n\t\t\t\tresetActionState();\n\t\t\t\tlastAutoSubmittedRef.current = otp;\n\t\t\t} finally {\n\t\t\t\tif (submitGenerationRef.current !== submitGeneration) return;\n\t\t\t\tsubmitInFlightRef.current = false;\n\t\t\t}\n\t\t})();\n\t}, [\n\t\totp,\n\t\tisOpen,\n\t\tisSubmitting,\n\t\tuserActionRequest,\n\t\tschema.maxLength,\n\t\tonApprove,\n\t\tresetActionState,\n\t]);\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 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 isPayment =\n\t\tuserActionRequest.userActionType === \"PAYMENT_APPROVAL\" &&\n\t\tBoolean(userActionRequest.metadata?.amount);\n\tconst isPayee =\n\t\tuserActionRequest.userActionType === \"PAYEE_APPROVAL\" &&\n\t\tBoolean(userActionRequest.metadata?.payeeName);\n\n\tconst isVerifying = actionType === \"approve\" && isSubmitting;\n\tconst isCancelling = actionType === \"reject\" && isSubmitting;\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<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<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: 440,\n\t\t\t\t\tminWidth: 0,\n\t\t\t\t}}\n\t\t\t>\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-user-action-message\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"relative w-full rounded-2xl 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: 440,\n\t\t\t\t\t\tboxSizing: \"border-box\",\n\t\t\t\t\t\tpadding: \"36px 32px 28px\",\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\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={handleReject}\n\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\tclassName=\"payman-modal-close-btn absolute flex items-center justify-center rounded-full border-0 bg-transparent p-0 cursor-pointer disabled:cursor-not-allowed\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\ttop: 12,\n\t\t\t\t\t\t\tright: 12,\n\t\t\t\t\t\t\twidth: 28,\n\t\t\t\t\t\t\theight: 28,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<X size={16} strokeWidth={2.5} />\n\t\t\t\t\t</button>\n\n\t\t\t\t\t<p\n\t\t\t\t\t\tid=\"payman-user-action-message\"\n\t\t\t\t\t\tclassName=\"text-center leading-snug\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tfontSize: 14,\n\t\t\t\t\t\t\tlineHeight: 1.5,\n\t\t\t\t\t\t\tmargin: \"0 0 20px\",\n\t\t\t\t\t\t\tpaddingRight: 24,\n\t\t\t\t\t\t\tpaddingLeft: 24,\n\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\"var(--payman-modal-desc-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{userActionRequest.message}\n\t\t\t\t\t</p>\n\n\t\t\t\t\t{isPayment && (\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tclassName=\"text-center font-semibold uppercase\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\t\tletterSpacing: \"0.08em\",\n\t\t\t\t\t\t\t\tmargin: \"0 0 4px\",\n\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-desc-fg, var(--payman-muted-foreground, #71717a))\",\n\t\t\t\t\t\t\t\topacity: 0.7,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tPay\n\t\t\t\t\t\t</p>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{isPayment && userActionRequest.metadata?.amount && (\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tclassName=\"text-center font-bold tabular-nums tracking-tight\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 42,\n\t\t\t\t\t\t\t\tlineHeight: 1.1,\n\t\t\t\t\t\t\t\tmargin: \"0 0 32px\",\n\t\t\t\t\t\t\t\tcolor: \"var(--payman-modal-hero-fg, #0a3b44)\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{formatAmountForDisplay(userActionRequest.metadata.amount)}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{isPayee && (\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tclassName=\"text-center font-semibold uppercase\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\t\tletterSpacing: \"0.08em\",\n\t\t\t\t\t\t\t\tmargin: \"0 0 4px\",\n\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-desc-fg, var(--payman-muted-foreground, #71717a))\",\n\t\t\t\t\t\t\t\topacity: 0.7,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tCreate Payee\n\t\t\t\t\t\t</p>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{isPayee && userActionRequest.metadata?.payeeName && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName=\"text-center\"\n\t\t\t\t\t\t\tstyle={{ margin: \"0 0 32px\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\tclassName=\"font-bold leading-tight\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tfontSize: 28,\n\t\t\t\t\t\t\t\t\tmargin: \"0 0 4px\",\n\t\t\t\t\t\t\t\t\tcolor: \"var(--payman-modal-hero-fg, #0a3b44)\",\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{userActionRequest.metadata.payeeName}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t{userActionRequest.metadata.payeeType ? (\n\t\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\t\tclassName=\"font-semibold uppercase\"\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tfontSize: 10,\n\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.08em\",\n\t\t\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t\t\t\tcolor: \"var(--payman-modal-hero-fg, #0a3b44)\",\n\t\t\t\t\t\t\t\t\t\topacity: 0.85,\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{userActionRequest.metadata.payeeType}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<div style={{ marginBottom: 30 }}>\n\t\t\t\t\t\t<OtpInput\n\t\t\t\t\t\t\tvalue={otp}\n\t\t\t\t\t\t\tonChange={setOtp}\n\t\t\t\t\t\t\tmaxLength={schema.maxLength}\n\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\terror={otpError}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{isVerifying ? (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName=\"flex items-center justify-center gap-2\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tmarginTop: 10,\n\t\t\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\t\t\tcolor: \"var(--payman-modal-hero-fg, #0a3b44)\",\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<Loader2\n\t\t\t\t\t\t\t\t\tclassName=\"animate-spin shrink-0\"\n\t\t\t\t\t\t\t\t\tstyle={{ width: 14, height: 14 }}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<span className=\"font-medium\">\n\t\t\t\t\t\t\t\t\t{MODAL_CONTENT.LOADING_APPROVE}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"flex flex-col items-center\"\n\t\t\t\t\t\tstyle={{ gap: 12, marginBottom: 32 }}\n\t\t\t\t\t>\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={handleResend}\n\t\t\t\t\t\t\tdisabled={isSubmitting || resendCooldownRemaining > 0}\n\t\t\t\t\t\t\tclassName=\"payman-modal-link-resend border-0 bg-transparent p-0 cursor-pointer font-semibold transition-colors disabled:cursor-not-allowed disabled:opacity-40\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 11,\n\t\t\t\t\t\t\t\tletterSpacing: \"0.06em\",\n\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-desc-fg, var(--payman-muted-foreground, #71717a))\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{actionType === \"resend\" ? (\n\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1.5\">\n\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 animate-spin\" />\n\t\t\t\t\t\t\t\t\t{MODAL_CONTENT.LOADING_RESEND}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t) : resendCooldownRemaining > 0 ? (\n\t\t\t\t\t\t\t\t`${MODAL_CONTENT.RESEND_AVAILABLE_IN} ${resendCooldownRemaining}s`\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\tBUTTON_LABELS.RESEND_CODE\n\t\t\t\t\t\t\t)}\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={handleReject}\n\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\tclassName=\"payman-modal-link-cancel border-0 bg-transparent p-0 cursor-pointer font-semibold transition-colors disabled:cursor-not-allowed disabled:opacity-40\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 11,\n\t\t\t\t\t\t\t\tletterSpacing: \"0.06em\",\n\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-desc-fg, var(--payman-muted-foreground, #71717a))\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{isCancelling ? (\n\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1.5\">\n\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-3 w-3 animate-spin\" />\n\t\t\t\t\t\t\t\t\t{MODAL_CONTENT.LOADING_REJECT}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t) : isPayee ? (\n\t\t\t\t\t\t\t\tBUTTON_LABELS.CANCEL\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\tBUTTON_LABELS.CANCEL_TRANSFER\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"flex flex-row flex-nowrap items-center justify-center gap-1.5\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tborderTop:\n\t\t\t\t\t\t\t\t\"1px solid var(--payman-modal-dialog-border, var(--payman-border, #e4e4e7))\",\n\t\t\t\t\t\t\tpaddingTop: 20,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclassName=\"font-medium whitespace-nowrap\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 11,\n\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\"var(--payman-modal-desc-fg, var(--payman-muted-foreground, #71717a))\",\n\t\t\t\t\t\t\t\topacity: 0.9,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{MODAL_CONTENT.SECURED_BY_PREFIX}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\tsrc={paymanLogoMark}\n\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\theight: 18,\n\t\t\t\t\t\t\t\twidth: \"auto\",\n\t\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\t\tobjectFit: \"contain\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tdraggable={false}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclassName=\"font-bold whitespace-nowrap\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\n\t\t\t\t\t\t\t\tcolor: \"var(--payman-modal-brand-fg, #0a3b44)\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{MODAL_CONTENT.SECURED_BY_BRAND}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import type { ReactNode } from \"react\";\n\ntype ActionTooltipV2Props = {\n\tlabel: string;\n\tchildren: ReactNode;\n};\n\nexport function ActionTooltipV2({ label, children }: ActionTooltipV2Props) {\n\treturn (\n\t\t<div className=\"payman-v2-tooltip\">\n\t\t\t{children}\n\t\t\t<div aria-hidden=\"true\" className=\"payman-v2-tooltip-content\">\n\t\t\t\t<div className=\"payman-v2-tooltip-text\">\n\t\t\t\t\t{label}\n\t\t\t\t\t<div className=\"payman-v2-tooltip-arrow\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { createPortal } from \"react-dom\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n\tAlertCircle,\n\tCheck,\n\tCopy,\n\tPencil,\n\tRotateCcw,\n} from \"lucide-react\";\nimport { ActionTooltipV2 } from \"./ActionTooltipV2\";\nimport { cn } from \"../../utils/cn\";\nimport { getConflictErrorMessage } from \"../../utils/errorMessages\";\nimport type { MessageDisplay, UserMessageActionsConfig } from \"../../types\";\n\nexport type UserMessageV2Props = {\n\tmessage: MessageDisplay;\n\tonEdit?: (messageId: string) => void;\n\tonRetry?: (messageId: string) => void;\n\tretryDisabled?: boolean;\n\tactions?: UserMessageActionsConfig;\n};\n\ntype ToastState = {\n\tlabel: string;\n\ttone: \"success\" | \"error\";\n} | null;\n\nfunction formatMessageTime(timestamp: string): string {\n\tconst value = new Date(timestamp);\n\tif (Number.isNaN(value.getTime())) return \"\";\n\treturn new Intl.DateTimeFormat(undefined, {\n\t\thour: \"numeric\",\n\t\tminute: \"2-digit\",\n\t}).format(value);\n}\n\nexport function UserMessageV2({\n\tmessage,\n\tonEdit,\n\tonRetry,\n\tretryDisabled = false,\n\tactions,\n}: UserMessageV2Props) {\n\tconst [copied, setCopied] = useState(false);\n\tconst [toast, setToast] = useState<ToastState>(null);\n\tconst copyResetTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst toastTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst showCopyAction = actions?.copy ?? true;\n\tconst showEditAction = actions?.edit ?? false;\n\tconst showRetryAction = actions?.retry ?? false;\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (copyResetTimerRef.current) clearTimeout(copyResetTimerRef.current);\n\t\t\tif (toastTimerRef.current) clearTimeout(toastTimerRef.current);\n\t\t};\n\t}, []);\n\n\tconst showToast = (label: string, tone: \"success\" | \"error\") => {\n\t\tif (toastTimerRef.current) clearTimeout(toastTimerRef.current);\n\t\tsetToast({ label, tone });\n\t\ttoastTimerRef.current = setTimeout(() => setToast(null), 1800);\n\t};\n\n\tconst handleCopy = async () => {\n\t\ttry {\n\t\t\tif (!navigator.clipboard?.writeText) {\n\t\t\t\tthrow new Error(\"Clipboard unavailable\");\n\t\t\t}\n\t\t\tawait navigator.clipboard.writeText(message.content);\n\t\t\tif (copyResetTimerRef.current) clearTimeout(copyResetTimerRef.current);\n\t\t\tsetCopied(true);\n\t\t\tcopyResetTimerRef.current = setTimeout(() => setCopied(false), 1800);\n\t\t\tshowToast(\"Copied to clipboard\", \"success\");\n\t\t} catch {\n\t\t\tsetCopied(false);\n\t\t\tshowToast(\"Could not copy\", \"error\");\n\t\t}\n\t};\n\n\tconst timestamp = formatMessageTime(message.timestamp);\n\tconst hasVisibleActions =\n\t\tshowCopyAction || (showEditAction && !!onEdit) || (showRetryAction && !!onRetry);\n\n\tconst toastPortal =\n\t\ttypeof document !== \"undefined\"\n\t\t\t? createPortal(\n\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t{toast && (\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: -18, scale: 0.96 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\t\t\t\t\texit={{ opacity: 0, y: -12, scale: 0.96 }}\n\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\ttype: \"spring\",\n\t\t\t\t\t\t\t\t\tstiffness: 360,\n\t\t\t\t\t\t\t\t\tdamping: 26,\n\t\t\t\t\t\t\t\t\tmass: 0.7,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName=\"payman-v2-toast\"\n\t\t\t\t\t\t\t\trole=\"status\"\n\t\t\t\t\t\t\t\taria-live=\"polite\"\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-v2-toast-inner\",\n\t\t\t\t\t\t\t\t\t\ttoast.tone === \"success\"\n\t\t\t\t\t\t\t\t\t\t\t? \"payman-v2-toast-success\"\n\t\t\t\t\t\t\t\t\t\t\t: \"payman-v2-toast-error\",\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{toast.tone === \"success\" ? (\n\t\t\t\t\t\t\t\t\t\t<Check className=\"h-4 w-4\" style={{ color: \"#059669\" }} />\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<AlertCircle\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-4 w-4\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ color: \"#ef4444\" }}\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<span>{toast.label}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AnimatePresence>,\n\t\t\t\t\tdocument.body,\n\t\t\t\t)\n\t\t\t: null;\n\n\treturn (\n\t\t<>\n\t\t\t{toastPortal}\n\n\t\t\t<div className=\"payman-v2-user-msg payman-v2-fade-in\">\n\t\t\t\t<div className=\"payman-v2-user-msg-group\">\n\t\t\t\t\t<div className=\"payman-v2-user-msg-bubble\">\n\t\t\t\t\t\t<p className=\"payman-v2-user-msg-text\">{message.content}</p>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{message.isError && message.errorDetails && (() => {\n\t\t\t\t\t\tconst resolvedError =\n\t\t\t\t\t\t\tgetConflictErrorMessage(message.errorDetails) ??\n\t\t\t\t\t\t\tmessage.errorDetails;\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div className=\"payman-v2-user-msg-error\">\n\t\t\t\t\t\t\t\t<AlertCircle\n\t\t\t\t\t\t\t\t\tclassName=\"h-3.5 w-3.5 shrink-0\"\n\t\t\t\t\t\t\t\t\tstyle={{ color: \"rgba(239, 68, 68, 0.7)\", marginTop: \"2px\" }}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<p className=\"payman-v2-user-msg-error-text\">\n\t\t\t\t\t\t\t\t\t{resolvedError}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t})()}\n\n\t\t\t\t\t{(timestamp || hasVisibleActions) && (\n\t\t\t\t\t\t<div className=\"payman-v2-user-msg-actions\">\n\t\t\t\t\t\t\t{timestamp ? (\n\t\t\t\t\t\t\t\t<span className=\"payman-v2-user-msg-timestamp\">{timestamp}</span>\n\t\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t\t{showCopyAction && (\n\t\t\t\t\t\t\t\t<ActionTooltipV2 label=\"Copy\">\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => void handleCopy()}\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-user-msg-action-btn\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Copy message\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{copied ? (\n\t\t\t\t\t\t\t\t\t\t\t<Check\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-3.5 w-3.5\"\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={{ color: \"#059669\" }}\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<Copy className=\"h-3.5 w-3.5\" />\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</ActionTooltipV2>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{showEditAction && onEdit && (\n\t\t\t\t\t\t\t\t<ActionTooltipV2 label=\"Edit\">\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => onEdit(message.id)}\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-user-msg-action-btn\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Edit message\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Pencil className=\"h-3.5 w-3.5\" />\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</ActionTooltipV2>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{showRetryAction && onRetry && (\n\t\t\t\t\t\t\t\t<ActionTooltipV2 label=\"Retry\">\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => onRetry(message.id)}\n\t\t\t\t\t\t\t\t\t\tdisabled={retryDisabled}\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-user-msg-action-btn\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Retry message\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<RotateCcw className=\"h-3.5 w-3.5\" />\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</ActionTooltipV2>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n","import {\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n\ttype CSSProperties,\n} from \"react\";\nimport { Loader2, ImageOff, Eye } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\n\nconst RAG_IMAGE_PATH_REGEX =\n\t/^(?:https?:\\/\\/[^/\\s]+)?\\/api\\/rag\\/chunks\\/[^\"'\\s]+\\/image(?:[?#][^\"'\\s]*)?$/;\n\nfunction isUnresolvedRagImageSource(src: string) {\n\treturn RAG_IMAGE_PATH_REGEX.test(src);\n}\n\nexport type MarkdownImageV2Props = {\n\tsrc?: string;\n\talt?: string;\n\tisResolving?: boolean;\n\tonImageClick?: (src: string, alt: string) => void;\n};\n\nconst frameStyle: CSSProperties = {\n\twidth: \"min(100%, 32rem)\",\n\tmaxWidth: \"100%\",\n};\n\nconst imgStyle: CSSProperties = {\n\tdisplay: \"block\",\n\twidth: \"100%\",\n\theight: \"auto\",\n\tmaxWidth: \"100%\",\n\tmaxHeight: \"22rem\",\n\tobjectFit: \"contain\",\n};\n\nexport function MarkdownImageV2({\n\tsrc,\n\talt,\n\tisResolving = false,\n\tonImageClick,\n}: MarkdownImageV2Props) {\n\tconst [isVisible, setIsVisible] = useState(false);\n\tconst [isLoaded, setIsLoaded] = useState(false);\n\tconst [hasError, setHasError] = useState(false);\n\tconst [retryCount, setRetryCount] = useState(0);\n\tconst sentinelRef = useRef<HTMLSpanElement>(null);\n\n\tconst isUnresolvedRag = useMemo(\n\t\t() => (src ? isUnresolvedRagImageSource(src) : false),\n\t\t[src],\n\t);\n\tconst isResolvingRag = Boolean(isResolving && isUnresolvedRag);\n\n\tuseEffect(() => {\n\t\tsetIsLoaded(false);\n\t\tsetHasError(false);\n\t\tsetRetryCount(0);\n\t\tsetIsVisible(false);\n\t}, [src]);\n\n\tuseEffect(() => {\n\t\tconst el = sentinelRef.current;\n\t\tif (!el || !src) return;\n\n\t\tconst observer = new IntersectionObserver(\n\t\t\t([entry]) => {\n\t\t\t\tif (entry.isIntersecting) {\n\t\t\t\t\tsetIsVisible(true);\n\t\t\t\t\tobserver.disconnect();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ rootMargin: \"200px\" },\n\t\t);\n\n\t\tobserver.observe(el);\n\t\treturn () => observer.disconnect();\n\t}, [src]);\n\n\tif (!src) return null;\n\n\tif (isResolvingRag) {\n\t\treturn (\n\t\t\t<span\n\t\t\t\tclassName={cn(\"payman-v2-md-image\", \"payman-v2-md-image-resolving\")}\n\t\t\t>\n\t\t\t\t<span className=\"payman-v2-md-image-resolving-inner\">\n\t\t\t\t\t<Loader2 className=\"payman-v2-md-image-loading\" aria-hidden />\n\t\t\t\t\t<span>Loading image</span>\n\t\t\t\t\t<span>Reference image</span>\n\t\t\t\t</span>\n\t\t\t</span>\n\t\t);\n\t}\n\n\tif (hasError) {\n\t\treturn (\n\t\t\t<span className={cn(\"payman-v2-md-image\", \"payman-v2-md-image-error\")}>\n\t\t\t\t<ImageOff aria-hidden />\n\t\t\t\t<span>Unable to load image</span>\n\t\t\t\t{alt ? <span>{alt}</span> : null}\n\t\t\t\t{retryCount < 3 ? (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"payman-v2-md-image-error-retry\"\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tsetHasError(false);\n\t\t\t\t\t\t\tsetRetryCount((c) => c + 1);\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tRetry\n\t\t\t\t\t</button>\n\t\t\t\t) : null}\n\t\t\t</span>\n\t\t);\n\t}\n\n\tconst imgSrc =\n\t\tretryCount > 0\n\t\t\t? `${src}${src.includes(\"?\") ? \"&\" : \"?\"}_r=${retryCount}`\n\t\t\t: src;\n\n\treturn (\n\t\t<span ref={sentinelRef} className=\"payman-v2-md-image\">\n\t\t\t{isVisible ? (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName=\"payman-v2-md-image-button\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tif (isLoaded && src) onImageClick?.(src, alt || \"Image\");\n\t\t\t\t\t}}\n\t\t\t\t\tdisabled={!isLoaded}\n\t\t\t\t\taria-busy={!isLoaded}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t...frameStyle,\n\t\t\t\t\t\t...(!isLoaded ? { minHeight: \"10rem\" } : {}),\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{!isLoaded && (\n\t\t\t\t\t\t<span className=\"payman-v2-md-image-placeholder\">\n\t\t\t\t\t\t\t<Loader2\n\t\t\t\t\t\t\t\tclassName=\"payman-v2-md-image-loading\"\n\t\t\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<span>Loading image…</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={imgSrc}\n\t\t\t\t\t\talt={alt || \"\"}\n\t\t\t\t\t\tclassName=\"payman-v2-md-image-img\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t...imgStyle,\n\t\t\t\t\t\t\topacity: isLoaded ? 1 : 0,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonLoad={() => {\n\t\t\t\t\t\t\tsetHasError(false);\n\t\t\t\t\t\t\tsetIsLoaded(true);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonError={() => {\n\t\t\t\t\t\t\tsetIsLoaded(false);\n\t\t\t\t\t\t\tsetHasError(true);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\n\t\t\t\t\t{isLoaded ? (\n\t\t\t\t\t\t<span className=\"payman-v2-md-image-overlay\" aria-hidden>\n\t\t\t\t\t\t\t<span className=\"payman-v2-md-image-overlay-icon\">\n\t\t\t\t\t\t\t\t<Eye />\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) : null}\n\t\t\t\t</button>\n\t\t\t) : (\n\t\t\t\t<span\n\t\t\t\t\tclassName=\"payman-v2-md-image-placeholder\"\n\t\t\t\t\tstyle={{ ...frameStyle, minHeight: \"10rem\" }}\n\t\t\t\t>\n\t\t\t\t\t<span>Image</span>\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</span>\n\t);\n}\n","import ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport type { Components } from \"react-markdown\";\nimport { useMemo } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { MarkdownImageV2 } from \"./MarkdownImageV2\";\n\nexport type MarkdownRendererV2Props = {\n\tcontent: string;\n\tisStreaming?: boolean;\n\tisResolvingImages?: boolean;\n\tonImageClick?: (src: string, alt: string) => void;\n};\n\nfunction buildComponents(\n\tonImageClick?: (src: string, alt: string) => void,\n\tisResolvingImages?: boolean,\n): Components {\n\treturn {\n\t\tp: ({ children }) => <p>{children}</p>,\n\t\tcode: ({ children }) => <code>{children}</code>,\n\t\tpre: ({ children }) => (\n\t\t\t<div className=\"payman-v2-markdown-pre\">\n\t\t\t\t<pre>{children}</pre>\n\t\t\t</div>\n\t\t),\n\t\tul: ({ children }) => <ul>{children}</ul>,\n\t\tol: ({ children }) => <ol>{children}</ol>,\n\t\tli: ({ children }) => <li>{children}</li>,\n\t\th1: ({ children }) => <h1>{children}</h1>,\n\t\th2: ({ children }) => <h2>{children}</h2>,\n\t\th3: ({ children }) => <h3>{children}</h3>,\n\t\tstrong: ({ children }) => <strong>{children}</strong>,\n\t\tem: ({ children }) => <em>{children}</em>,\n\t\tblockquote: ({ children }) => <blockquote>{children}</blockquote>,\n\t\thr: () => <hr />,\n\t\ta: ({ href, children }) => (\n\t\t\t<a href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n\t\t\t\t{children}\n\t\t\t</a>\n\t\t),\n\t\timg: ({ src, alt }) => (\n\t\t\t<MarkdownImageV2\n\t\t\t\tsrc={typeof src === \"string\" ? src : undefined}\n\t\t\t\talt={typeof alt === \"string\" ? alt : undefined}\n\t\t\t\tisResolving={isResolvingImages}\n\t\t\t\tonImageClick={onImageClick}\n\t\t\t/>\n\t\t),\n\t\ttable: ({ children }) => (\n\t\t\t<div className=\"payman-v2-markdown-table-wrapper\">\n\t\t\t\t<table className=\"payman-v2-markdown-table\">{children}</table>\n\t\t\t</div>\n\t\t),\n\t\tthead: ({ children }) => (\n\t\t\t<thead className=\"payman-v2-markdown-thead\">{children}</thead>\n\t\t),\n\t\ttbody: ({ children }) => (\n\t\t\t<tbody className=\"payman-v2-markdown-tbody\">{children}</tbody>\n\t\t),\n\t\tth: ({ children }) => (\n\t\t\t<th className=\"payman-v2-markdown-th\">{children}</th>\n\t\t),\n\t\ttd: ({ children }) => (\n\t\t\t<td className=\"payman-v2-markdown-td\">{children}</td>\n\t\t),\n\t};\n}\n\nexport function MarkdownRendererV2({\n\tcontent,\n\tisStreaming,\n\tisResolvingImages,\n\tonImageClick,\n}: MarkdownRendererV2Props) {\n\tconst components = useMemo(\n\t\t() => buildComponents(onImageClick, isResolvingImages),\n\t\t[onImageClick, isResolvingImages],\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"payman-v2-markdown\",\n\t\t\t\tisStreaming && \"payman-v2-streaming-cursor\",\n\t\t\t)}\n\t\t>\n\t\t\t<ReactMarkdown remarkPlugins={[remarkGfm]} components={components}>\n\t\t\t\t{content}\n\t\t\t</ReactMarkdown>\n\t\t</div>\n\t);\n}\n","import { useEffect, useRef } from \"react\";\nimport { interpolate } from \"flubber\";\n\n// Exact Payman brand logo path (viewBox 0 0 190 232).\nconst PAYMAN_PATH =\n\t\"M174.005 38.1616C159.62 18.4068 138.406 5.43014 114.263 1.62485C90.1187 -2.18045 65.9302 3.63155 46.1599 17.9906C21.9565 35.5752 6.06885 61.5137 1.39776 91.0344C-3.27333 120.555 3.85231 150.135 21.4358 174.305C43.0508 204.004 74.9451 223.506 111.243 229.244L122.415 231.013V171.273C121.968 171.273 121.522 171.302 121.076 171.302C116.955 171.302 112.82 170.975 108.684 170.321C106.795 170.024 104.92 169.638 103.076 169.207V207.839C76.5368 201.031 53.4045 185.364 37.0706 162.934C22.5218 142.941 16.6309 118.474 20.4838 94.037C24.3515 69.6148 37.502 48.1505 57.5103 33.5983C73.1004 22.2715 92.1865 17.6784 111.228 20.6811C130.269 23.6837 147.005 33.9253 158.355 49.5032C167.117 61.5583 170.673 76.2889 168.337 91.0047C166.016 105.72 158.087 118.653 146.038 127.408C136.815 134.112 125.524 136.832 114.248 135.048C102.972 133.264 93.079 127.214 86.355 117.984C81.2823 111.027 79.2443 102.51 80.5831 94.0073C81.922 85.5049 86.5038 78.0429 93.4658 72.9741C98.6129 69.2283 104.92 67.7121 111.213 68.7081C117.506 69.704 123.039 73.0782 126.788 78.2362C129.481 81.9374 130.567 86.4711 129.853 90.9898C129.139 95.5086 126.699 99.4774 122.995 102.183H146.648C147.719 99.5815 148.492 96.8464 148.939 94.0073C150.456 84.39 148.135 74.743 142.408 66.8797C135.625 57.5597 125.613 51.4207 114.218 49.637C102.823 47.8384 91.4129 50.5734 82.0707 57.3665C70.9285 65.4676 63.6095 77.4037 61.4525 91.0047C59.2955 104.606 62.5831 118.221 70.6905 129.355C80.4344 142.748 94.8195 151.548 111.198 154.134C127.577 156.72 143.97 152.781 157.373 143.03C173.603 131.228 184.269 113.822 187.408 94.0073C190.547 74.193 185.757 54.349 173.96 38.117L174.005 38.1616Z\";\n\n// Circle centred on the Payman logo's viewBox midpoint (95, 116) with radius 80,\n// expressed as four cubic-bezier segments so flubber interpolates smoothly.\nconst CIRCLE_PATH =\n\t\"M95 36C139.183 36 175 71.817 175 116C175 160.183 139.183 196 95 196C50.817 196 15 160.183 15 116C15 71.817 50.817 36 95 36Z\";\n\n// Eased cubic-in-out for the morph so edges ease at rest and middle is quick.\nfunction easeInOut(t: number): number {\n\treturn t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2;\n}\n\ntype Phase =\n\t| { kind: \"hold-logo\" }\n\t| { kind: \"morph\"; direction: 1 | -1; progress: number }\n\t| { kind: \"hold-circle\"; progress: number };\n\nconst TIMINGS = {\n\t// Total loop cycle = sum of all phases (ms)\n\tholdLogoMs: 900,\n\tmorphToCircleMs: 550,\n\tholdCircleMs: 1100,\n\tmorphToLogoMs: 550,\n};\n\nconst TOTAL_CYCLE =\n\tTIMINGS.holdLogoMs +\n\tTIMINGS.morphToCircleMs +\n\tTIMINGS.holdCircleMs +\n\tTIMINGS.morphToLogoMs;\n\nfunction phaseAtTime(elapsed: number): Phase {\n\tlet t = elapsed % TOTAL_CYCLE;\n\n\tif (t < TIMINGS.holdLogoMs) {\n\t\treturn { kind: \"hold-logo\" };\n\t}\n\tt -= TIMINGS.holdLogoMs;\n\n\tif (t < TIMINGS.morphToCircleMs) {\n\t\treturn {\n\t\t\tkind: \"morph\",\n\t\t\tdirection: 1,\n\t\t\tprogress: easeInOut(t / TIMINGS.morphToCircleMs),\n\t\t};\n\t}\n\tt -= TIMINGS.morphToCircleMs;\n\n\tif (t < TIMINGS.holdCircleMs) {\n\t\treturn { kind: \"hold-circle\", progress: t / TIMINGS.holdCircleMs };\n\t}\n\tt -= TIMINGS.holdCircleMs;\n\n\treturn {\n\t\tkind: \"morph\",\n\t\tdirection: -1,\n\t\tprogress: easeInOut(t / TIMINGS.morphToLogoMs),\n\t};\n}\n\n// Ring stroke geometry (circumference of a circle at r=65 ≈ 408.4).\nconst RING_CX = 95;\nconst RING_CY = 116;\nconst RING_R = 65;\nconst RING_STROKE_WIDTH = 22;\nconst RING_CIRCUMFERENCE = 2 * Math.PI * RING_R;\nconst RING_ARC_FRACTION = 0.3; // 30% of the ring is the visible progressing arc.\n\n// Flubber's `interpolate` is expensive at fine `maxSegmentLength`. Cache the\n// resulting interpolators at module scope (shared across every mount) and\n// build them lazily off the render-critical path so the first assistant\n// message doesn't block the main thread while \"Working on it…\" animates in.\ntype Interpolators = {\n\tforward: (t: number) => string;\n\tbackward: (t: number) => string;\n};\nlet cachedInterpolators: Interpolators | null = null;\nlet pendingInterpolators: Promise<Interpolators> | null = null;\n\nfunction buildInterpolators(): Interpolators {\n\tconst opts = { maxSegmentLength: 8 };\n\treturn {\n\t\tforward: interpolate(PAYMAN_PATH, CIRCLE_PATH, opts),\n\t\tbackward: interpolate(CIRCLE_PATH, PAYMAN_PATH, opts),\n\t};\n}\n\nfunction loadInterpolatorsAsync(): Promise<Interpolators> {\n\tif (cachedInterpolators) return Promise.resolve(cachedInterpolators);\n\tif (pendingInterpolators) return pendingInterpolators;\n\n\tpendingInterpolators = new Promise<Interpolators>((resolve) => {\n\t\tconst run = () => {\n\t\t\tcachedInterpolators = buildInterpolators();\n\t\t\tresolve(cachedInterpolators);\n\t\t};\n\t\tconst ric = (\n\t\t\tglobalThis as typeof globalThis & {\n\t\t\t\trequestIdleCallback?: (cb: () => void, opts?: { timeout: number }) => number;\n\t\t\t}\n\t\t).requestIdleCallback;\n\t\tif (typeof ric === \"function\") {\n\t\t\tric(run, { timeout: 200 });\n\t\t} else {\n\t\t\tsetTimeout(run, 0);\n\t\t}\n\t});\n\treturn pendingInterpolators;\n}\n\nexport function PaymanMark() {\n\tconst pathRef = useRef<SVGPathElement | null>(null);\n\tconst ringGroupRef = useRef<SVGGElement | null>(null);\n\n\tuseEffect(() => {\n\t\tconst reduced = window.matchMedia(\n\t\t\t\"(prefers-reduced-motion: reduce)\",\n\t\t).matches;\n\t\tif (reduced) {\n\t\t\tpathRef.current?.setAttribute(\"d\", PAYMAN_PATH);\n\t\t\tpathRef.current?.setAttribute(\"fill-opacity\", \"1\");\n\t\t\tringGroupRef.current?.setAttribute(\"opacity\", \"0\");\n\t\t\treturn;\n\t\t}\n\n\t\tlet raf = 0;\n\t\tlet cancelled = false;\n\t\tconst start = performance.now();\n\t\tlet interpolators = cachedInterpolators;\n\n\t\tconst tick = (now: number) => {\n\t\t\tconst elapsed = now - start;\n\t\t\tconst phase = phaseAtTime(elapsed);\n\n\t\t\tlet d: string;\n\t\t\tlet fillOpacity = 1;\n\t\t\tlet ringOpacity = 0;\n\t\t\t// The ring's continuous spin is based on absolute elapsed time so it\n\t\t\t// stays smooth whether visible or not.\n\t\t\tconst spin = (elapsed / 900) * 360;\n\n\t\t\tswitch (phase.kind) {\n\t\t\t\tcase \"hold-logo\":\n\t\t\t\t\td = PAYMAN_PATH;\n\t\t\t\t\tfillOpacity = 1;\n\t\t\t\t\tringOpacity = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"morph\": {\n\t\t\t\t\tif (!interpolators) {\n\t\t\t\t\t\t// Interpolators aren't ready yet — hold the logo instead of\n\t\t\t\t\t\t// blocking the frame to compute them.\n\t\t\t\t\t\td = PAYMAN_PATH;\n\t\t\t\t\t\tfillOpacity = 1;\n\t\t\t\t\t\tringOpacity = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\td =\n\t\t\t\t\t\tphase.direction === 1\n\t\t\t\t\t\t\t? interpolators.forward(phase.progress)\n\t\t\t\t\t\t\t: interpolators.backward(phase.progress);\n\t\t\t\t\t// `p` measures how \"circle-like\" the current shape is (0 = P, 1 = circle).\n\t\t\t\t\tconst p =\n\t\t\t\t\t\tphase.direction === 1\n\t\t\t\t\t\t\t? phase.progress\n\t\t\t\t\t\t\t: 1 - phase.progress;\n\t\t\t\t\t// Fill holds until the shape is mostly a circle, then fades out.\n\t\t\t\t\tfillOpacity = p < 0.6 ? 1 : 1 - (p - 0.6) / 0.4;\n\t\t\t\t\t// Ring fades in once the shape is past halfway to circle.\n\t\t\t\t\tringOpacity = p < 0.55 ? 0 : (p - 0.55) / 0.45;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"hold-circle\":\n\t\t\t\t\td = CIRCLE_PATH;\n\t\t\t\t\tfillOpacity = 0;\n\t\t\t\t\tringOpacity = 1;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (pathRef.current) {\n\t\t\t\tpathRef.current.setAttribute(\"d\", d);\n\t\t\t\tpathRef.current.setAttribute(\"fill-opacity\", fillOpacity.toFixed(3));\n\t\t\t}\n\t\t\tif (ringGroupRef.current) {\n\t\t\t\tringGroupRef.current.setAttribute(\"opacity\", ringOpacity.toFixed(3));\n\t\t\t\tringGroupRef.current.setAttribute(\n\t\t\t\t\t\"transform\",\n\t\t\t\t\t`rotate(${spin.toFixed(2)} ${RING_CX} ${RING_CY})`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\traf = requestAnimationFrame(tick);\n\t\t};\n\n\t\traf = requestAnimationFrame(tick);\n\n\t\tif (!interpolators) {\n\t\t\tvoid loadInterpolatorsAsync().then((result) => {\n\t\t\t\tif (!cancelled) interpolators = result;\n\t\t\t});\n\t\t}\n\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\tcancelAnimationFrame(raf);\n\t\t};\n\t}, []);\n\n\treturn (\n\t\t<svg\n\t\t\tclassName=\"payman-v2-thinking-mark\"\n\t\t\tviewBox=\"0 0 190 232\"\n\t\t\taria-hidden\n\t\t\tfocusable=\"false\"\n\t\t>\n\t\t\t{/* Morphing filled shape: Payman P ↔ circle. */}\n\t\t\t<path ref={pathRef} d={PAYMAN_PATH} fill=\"currentColor\" />\n\n\t\t\t{/* Progressing ring that appears once the shape reaches circle. */}\n\t\t\t<g ref={ringGroupRef} opacity={0}>\n\t\t\t\t<circle\n\t\t\t\t\tcx={RING_CX}\n\t\t\t\t\tcy={RING_CY}\n\t\t\t\t\tr={RING_R}\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstrokeWidth={RING_STROKE_WIDTH}\n\t\t\t\t\tstrokeOpacity={0.16}\n\t\t\t\t/>\n\t\t\t\t<circle\n\t\t\t\t\tcx={RING_CX}\n\t\t\t\t\tcy={RING_CY}\n\t\t\t\t\tr={RING_R}\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstrokeWidth={RING_STROKE_WIDTH}\n\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\tstrokeDasharray={`${RING_CIRCUMFERENCE * RING_ARC_FRACTION} ${RING_CIRCUMFERENCE}`}\n\t\t\t\t/>\n\t\t\t</g>\n\t\t</svg>\n\t);\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { ChevronRight } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { PaymanMark } from \"./PaymanMark\";\n\nexport const CURSOR_MESSAGES = [\n\t\"Analyzing\",\n\t\"Processing\",\n\t\"Calculating\",\n\t\"Reviewing\",\n\t\"Verifying\",\n\t\"Assessing\",\n\t\"Evaluating\",\n\t\"Checking\",\n\t\"Planning\",\n\t\"Working\",\n\t\"Updating\",\n\t\"Validating\",\n\t\"Monitoring\",\n\t\"Optimizing\",\n\t\"Reconciling\",\n\t\"Forecasting\",\n\t\"Inspecting\",\n\t\"Organizing\",\n\t\"Sorting\",\n\t\"Scanning\",\n\t\"Balancing\",\n\t\"Summarizing\",\n\t\"Predicting\",\n\t\"Comparing\",\n\t\"Tracking\",\n\t\"Adjusting\",\n\t\"Examining\",\n\t\"Mapping\",\n\t\"Modeling\",\n\t\"Reporting\",\n\t\"Confirming\",\n] as const;\n\nexport const FINAL_CURSOR_MESSAGE = \"Finishing up\";\n\nfunction getMaxDuration(\n\t...values: Array<number | null | undefined>\n): number | undefined {\n\tconst defined = values.filter(\n\t\t(value): value is number =>\n\t\t\ttypeof value === \"number\" && Number.isFinite(value),\n\t);\n\treturn defined.length > 0 ? Math.max(...defined) : undefined;\n}\n\ntype ThinkingLine =\n\t| { type: \"statement\"; text: string }\n\t| { type: \"detail\"; text: string }\n\t| { type: \"status\"; variant: \"success\" | \"error\"; text: string };\n\nfunction parseThinkingContent(content: string): ThinkingLine[] {\n\tconst lines = content.split(\"\\n\");\n\tconst out: ThinkingLine[] = [];\n\tfor (const raw of lines) {\n\t\tconst line = raw.trim();\n\t\tif (!line) continue;\n\n\t\tconst stmt = line.match(/^\\*\\*(.+)\\*\\*$/);\n\t\tif (stmt) {\n\t\t\tout.push({ type: \"statement\", text: stmt[1].trim() });\n\t\t\tcontinue;\n\t\t}\n\t\tif (line.startsWith(\"✓ \")) {\n\t\t\tout.push({\n\t\t\t\ttype: \"status\",\n\t\t\t\tvariant: \"success\",\n\t\t\t\ttext: line.slice(2).trim(),\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (line.startsWith(\"✗ \")) {\n\t\t\tout.push({\n\t\t\t\ttype: \"status\",\n\t\t\t\tvariant: \"error\",\n\t\t\t\ttext: line.slice(2).trim(),\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tout.push({ type: \"detail\", text: line });\n\t}\n\treturn out;\n}\n\ntype AnimatedSecondsProps = {\n\tvalue: number;\n\tclassName?: string;\n\tariaLabel: string;\n};\n\nfunction AnimatedSeconds({\n\tvalue,\n\tclassName,\n\tariaLabel,\n}: AnimatedSecondsProps) {\n\treturn (\n\t\t<span className={cn(\"payman-v2-thinking-seconds\", className)} aria-label={ariaLabel}>\n\t\t\t<span className=\"payman-v2-thinking-seconds-track\" aria-hidden=\"true\">\n\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t<motion.span\n\t\t\t\t\t\tkey={value}\n\t\t\t\t\t\tclassName=\"payman-v2-thinking-seconds-value\"\n\t\t\t\t\t\tinitial={{ opacity: 0, y: 6, filter: \"blur(2px)\" }}\n\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, filter: \"blur(0px)\" }}\n\t\t\t\t\t\texit={{ opacity: 0, y: -6, filter: \"blur(2px)\" }}\n\t\t\t\t\t\ttransition={{ duration: 0.2, ease: [0.22, 1, 0.36, 1] }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{value}\n\t\t\t\t\t</motion.span>\n\t\t\t\t</AnimatePresence>\n\t\t\t</span>\n\t\t\t<span className=\"payman-v2-thinking-seconds-suffix\" aria-hidden=\"true\">\n\t\t\t\ts\n\t\t\t</span>\n\t\t</span>\n\t);\n}\n\nexport type ThinkingBlockV2Props = {\n\tcontent: string;\n\tisStreaming: boolean;\n\t/** Final duration in seconds (shown after streaming ends). */\n\tdurationSec?: number;\n\t/** Epoch ms when the request was submitted — used for the live counter. */\n\tstartedAt?: number;\n};\n\nexport function ThinkingBlockV2({\n\tcontent,\n\tisStreaming,\n\tdurationSec,\n\tstartedAt,\n}: ThinkingBlockV2Props) {\n\tconst [open, setOpen] = useState(true);\n\tconst [cursorIdx, setCursorIdx] = useState(0);\n\tconst [elapsedSec, setElapsedSec] = useState(() =>\n\t\tstartedAt ? Math.max(0, Math.floor((Date.now() - startedAt) / 1000)) : 0,\n\t);\n\tconst frozenSecRef = useRef<number | null>(null);\n\tconst prevStreaming = useRef(isStreaming);\n\n\tconst parsed = useMemo(() => parseThinkingContent(content), [content]);\n\n\tconst isFinalizingPhase = useMemo(() => {\n\t\tconst statements = parsed.filter(\n\t\t\t(l): l is Extract<ThinkingLine, { type: \"statement\" }> =>\n\t\t\t\tl.type === \"statement\",\n\t\t);\n\t\treturn (\n\t\t\tstatements.length > 0 &&\n\t\t\tstatements[statements.length - 1].text === \"Finalizing\"\n\t\t);\n\t}, [parsed]);\n\n\tuseEffect(() => {\n\t\tif (prevStreaming.current && !isStreaming) {\n\t\t\tsetOpen(false);\n\t\t\t// Freeze the final elapsed seconds at the moment streaming stops,\n\t\t\t// so the header shows an accurate \"Thought for Xs\" even if\n\t\t\t// `durationSec` isn't provided by the caller.\n\t\t\tif (startedAt) {\n\t\t\t\tfrozenSecRef.current = Math.max(\n\t\t\t\t\t0,\n\t\t\t\t\tMath.floor((Date.now() - startedAt) / 1000),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tprevStreaming.current = isStreaming;\n\t}, [isStreaming, startedAt]);\n\n\tuseEffect(() => {\n\t\tif (!isStreaming || !startedAt) return;\n\t\tconst tick = () => {\n\t\t\tsetElapsedSec(\n\t\t\t\tMath.max(0, Math.floor((Date.now() - startedAt) / 1000)),\n\t\t\t);\n\t\t};\n\t\ttick();\n\t\tconst id = window.setInterval(tick, 1000);\n\t\treturn () => window.clearInterval(id);\n\t}, [isStreaming, startedAt]);\n\n\tuseEffect(() => {\n\t\tif (!isStreaming || isFinalizingPhase) return;\n\t\tconst id = window.setInterval(() => {\n\t\t\tsetCursorIdx((i) => (i + 1) % CURSOR_MESSAGES.length);\n\t\t}, 4000);\n\t\treturn () => window.clearInterval(id);\n\t}, [isStreaming, isFinalizingPhase]);\n\n\tconst justStoppedSec =\n\t\t!isStreaming && prevStreaming.current && startedAt\n\t\t\t? Math.max(0, Math.floor((Date.now() - startedAt) / 1000))\n\t\t\t: undefined;\n\tconst finalSec = getMaxDuration(\n\t\tdurationSec,\n\t\tfrozenSecRef.current,\n\t\tjustStoppedSec,\n\t\t!isStreaming ? elapsedSec : undefined,\n\t);\n\n\tconst headerLabel = isStreaming ? (\n\t\t<span className=\"payman-v2-thinking-header-label\">\n\t\t\t<span className=\"payman-v2-thinking-shimmer\">Working on it…</span>\n\t\t\t{startedAt !== undefined && (\n\t\t\t\t<AnimatedSeconds\n\t\t\t\t\tclassName=\"payman-v2-thinking-timer\"\n\t\t\t\t\tariaLabel={`Elapsed ${elapsedSec} seconds`}\n\t\t\t\t\tvalue={elapsedSec}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</span>\n\t) : finalSec !== null && finalSec !== undefined ? (\n\t\t<span className=\"payman-v2-thinking-header-label\">\n\t\t\t<span>Thought for</span>\n\t\t\t<AnimatedSeconds\n\t\t\t\tclassName=\"payman-v2-thinking-duration\"\n\t\t\t\tariaLabel={`Thought for ${finalSec} seconds`}\n\t\t\t\tvalue={finalSec}\n\t\t\t/>\n\t\t</span>\n\t) : (\n\t\t<span>Thought</span>\n\t);\n\n\tconst cursorKey = isFinalizingPhase ? \"finalizing\" : String(cursorIdx);\n\tconst cursorText = isFinalizingPhase\n\t\t? FINAL_CURSOR_MESSAGE\n\t\t: CURSOR_MESSAGES[cursorIdx];\n\n\treturn (\n\t\t<div className=\"payman-v2-thinking\">\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName=\"payman-v2-thinking-toggle\"\n\t\t\t\tonClick={() => setOpen((o) => !o)}\n\t\t\t\taria-expanded={open}\n\t\t\t>\n\t\t\t\t<ChevronRight\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"payman-v2-thinking-chevron\",\n\t\t\t\t\t\topen && \"payman-v2-thinking-chevron-open\",\n\t\t\t\t\t)}\n\t\t\t\t\taria-hidden\n\t\t\t\t/>\n\t\t\t\t{headerLabel}\n\t\t\t</button>\n\n\t\t\t<div className=\"payman-v2-thinking-border\">\n\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t{open && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tkey=\"thinking-content\"\n\t\t\t\t\t\t\tclassName=\"payman-v2-thinking-content\"\n\t\t\t\t\t\t\tinitial={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\t\tanimate={{ height: \"auto\", opacity: 1 }}\n\t\t\t\t\t\t\texit={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\t\ttransition={{ duration: 0.2, ease: \"easeInOut\" }}\n\t\t\t\t\t\t\tstyle={{ overflow: \"hidden\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t{parsed.map((item, i) => {\n\t\t\t\t\t\t\t\t\tif (item.type === \"statement\") {\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-thinking-statement\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{item.text}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (item.type === \"detail\") {\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-thinking-detail\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{item.text}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tkey={i}\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\"payman-v2-thinking-status\",\n\t\t\t\t\t\t\t\t\t\t\t\titem.variant === \"success\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"payman-v2-thinking-status-success\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"payman-v2-thinking-status-error\",\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{item.text}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\n\t\t\t\t\t\t\t\t{isStreaming && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-thinking-cursor\"\n\t\t\t\t\t\t\t\t\t\taria-live=\"polite\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<PaymanMark />\n\t\t\t\t\t\t\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t\t\t\t\t\t\t<motion.span\n\t\t\t\t\t\t\t\t\t\t\t\tkey={cursorKey}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-thinking-cursor-label payman-v2-thinking-shimmer\"\n\t\t\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 2 }}\n\t\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\t\t\t\t\t\texit={{ opacity: 0, y: -2 }}\n\t\t\t\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.24, ease: [0.4, 0, 0.2, 1] }}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{cursorText}\n\t\t\t\t\t\t\t\t\t\t\t</motion.span>\n\t\t\t\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { useEffect, useRef, useState } from \"react\";\n\n/**\n * Progressively reveals `targetText` char-by-char, matching the demo's\n * typing-loop feel for both thinking content and the final response.\n *\n * - While `enabled` is true the hook keeps a \"displayed\" buffer and\n * advances it toward the current `targetText` one character at a time.\n * - If new text is appended to `targetText` mid-animation, the loop\n * picks up from where it left off.\n * - When `enabled` becomes false the remaining text is flushed instantly\n * (e.g. when thinking ends and we auto-collapse).\n */\n\ntype SpeedProfile = {\n\tnormal: [number, number];\n\tfast: number;\n\tpunctuation: [number, number];\n\tnewline: [number, number];\n\tidle: number;\n};\n\nexport const THINKING_SPEED: SpeedProfile = {\n\tnormal: [6, 8],\n\tfast: 1,\n\tpunctuation: [20, 30],\n\tnewline: [12, 18],\n\tidle: 30,\n};\n\nexport const RESPONSE_SPEED: SpeedProfile = {\n\tnormal: [4, 8],\n\tfast: 1,\n\tpunctuation: [20, 30],\n\tnewline: [10, 15],\n\tidle: 30,\n};\n\nfunction charDelay(char: string, speed: SpeedProfile): number {\n\tif (char === \"*\") return speed.fast;\n\tif (char === \"\\n\") return speed.newline[0] + Math.random() * speed.newline[1];\n\tif (\".!?,;:\".includes(char))\n\t\treturn speed.punctuation[0] + Math.random() * speed.punctuation[1];\n\treturn speed.normal[0] + Math.random() * speed.normal[1];\n}\n\nexport function useTypingEffect(\n\ttargetText: string,\n\tenabled: boolean,\n\tspeed: SpeedProfile = RESPONSE_SPEED,\n\tinitialDisplayedText?: string,\n): { displayedText: string; isTyping: boolean } {\n\tconst [displayedText, setDisplayedText] = useState(\"\");\n\tconst displayedRef = useRef(\"\");\n\tconst targetRef = useRef(targetText);\n\tconst enabledRef = useRef(enabled);\n\tconst initialDisplayedRef = useRef(initialDisplayedText);\n\tconst timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst runningRef = useRef(false);\n\n\ttargetRef.current = targetText;\n\tenabledRef.current = enabled;\n\tinitialDisplayedRef.current = initialDisplayedText;\n\n\tuseEffect(() => {\n\t\tif (!enabled) {\n\t\t\tif (timerRef.current) {\n\t\t\t\tclearTimeout(timerRef.current);\n\t\t\t\ttimerRef.current = null;\n\t\t\t}\n\t\t\trunningRef.current = false;\n\t\t\tdisplayedRef.current = targetText;\n\t\t\tsetDisplayedText(targetText);\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tdisplayedRef.current.length === 0 &&\n\t\t\tinitialDisplayedRef.current &&\n\t\t\ttargetRef.current.startsWith(initialDisplayedRef.current)\n\t\t) {\n\t\t\tdisplayedRef.current = initialDisplayedRef.current;\n\t\t\tsetDisplayedText(initialDisplayedRef.current);\n\t\t}\n\n\t\tif (runningRef.current) return;\n\t\trunningRef.current = true;\n\n\t\tconst tick = () => {\n\t\t\tif (!enabledRef.current) {\n\t\t\t\trunningRef.current = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (displayedRef.current.length < targetRef.current.length) {\n\t\t\t\tconst nextChar = targetRef.current[displayedRef.current.length];\n\t\t\t\tdisplayedRef.current += nextChar;\n\t\t\t\tsetDisplayedText(displayedRef.current);\n\t\t\t\tconst delay = charDelay(nextChar, speed);\n\t\t\t\ttimerRef.current = setTimeout(tick, delay);\n\t\t\t} else {\n\t\t\t\ttimerRef.current = setTimeout(tick, speed.idle);\n\t\t\t}\n\t\t};\n\n\t\ttick();\n\n\t\treturn () => {\n\t\t\tif (timerRef.current) {\n\t\t\t\tclearTimeout(timerRef.current);\n\t\t\t\ttimerRef.current = null;\n\t\t\t}\n\t\t\trunningRef.current = false;\n\t\t};\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [enabled]);\n\n\tconst isTyping =\n\t\tenabled && displayedRef.current.length < targetRef.current.length;\n\n\treturn {\n\t\tdisplayedText: enabled ? displayedText : targetText,\n\t\tisTyping,\n\t};\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport {\n\tCopy,\n\tCheck,\n\tAlertCircle,\n\tWifiOff,\n\tSearchCode,\n} from \"lucide-react\";\nimport { buildFormattedThinking } from \"@paymanai/payman-typescript-ask-sdk\";\nimport type {\n\tAssistantMessageActionsConfig,\n\tMessageDisplay,\n} from \"../../types\";\nimport { MarkdownRendererV2 } from \"./MarkdownRendererV2\";\nimport { ThinkingBlockV2 } from \"./ThinkingBlockV2\";\nimport { ActionTooltipV2 } from \"./ActionTooltipV2\";\nimport { cn } from \"../../utils/cn\";\nimport {\n\tgetConflictErrorMessage,\n\tisFriendlyWorkflowError,\n} from \"../../utils/errorMessages\";\nimport { useTypingEffect, THINKING_SPEED, RESPONSE_SPEED } from \"./useTypingEffect\";\n\nexport type AssistantMessageV2Props = {\n\tmessage: MessageDisplay;\n\tonImageClick?: (src: string, alt: string) => void;\n\tonExecutionTraceClick?: (data: {\n\t\tmessage: MessageDisplay;\n\t\ttracingData?: unknown;\n\t\texecutionId?: string;\n\t}) => void;\n\tactions?: AssistantMessageActionsConfig;\n};\n\ntype ToastState = {\n\tlabel: string;\n\ttone: \"success\" | \"error\";\n} | null;\n\nconst INITIAL_THINKING_PLACEHOLDER = [\n\t\"**Getting things ready**\",\n\t\"Putting things together\",\n].join(\"\\n\");\n\n/**\n * Get the formatted thinking text for v2 display.\n * Uses the pre-computed formattedThinkingText from the TS SDK when available,\n * falls back to building it from steps + allThinkingText.\n */\nfunction getFormattedThinking(\n\tmessage: MessageDisplay,\n\tincludeInitialPlaceholder = false,\n): string {\n\tconst plainThinkingText =\n\t\tmessage.allThinkingText || message.activeThinkingText || \"\";\n\n\tconst baseText = message.formattedThinkingText ||\n\t\tbuildFormattedThinking(message.steps, plainThinkingText);\n\n\tif (includeInitialPlaceholder && baseText) {\n\t\treturn INITIAL_THINKING_PLACEHOLDER + \"\\n\" + baseText;\n\t}\n\tif (includeInitialPlaceholder) {\n\t\treturn INITIAL_THINKING_PLACEHOLDER;\n\t}\n\n\treturn baseText;\n}\n\nexport function AssistantMessageV2({\n\tmessage,\n\tonImageClick,\n\tonExecutionTraceClick,\n\tactions,\n}: AssistantMessageV2Props) {\n\tconst [copied, setCopied] = useState(false);\n\tconst [toast, setToast] = useState<ToastState>(null);\n\tconst copyResetTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst toastTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst showCopyAction = actions?.copy ?? true;\n\tconst showTraceAction =\n\t\t(actions?.trace ?? true) && !!onExecutionTraceClick;\n\n\tconst hasEverStreamed = useRef(!!message.isStreaming);\n\tconst hasShownInitialThinking = useRef(\n\t\tmessage.streamProgress === \"processing\",\n\t);\n\tif (message.isStreaming) hasEverStreamed.current = true;\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (copyResetTimerRef.current) clearTimeout(copyResetTimerRef.current);\n\t\t\tif (toastTimerRef.current) clearTimeout(toastTimerRef.current);\n\t\t};\n\t}, []);\n\n\tconst rawResponseContent = (() => {\n\t\tconst raw = message.isStreaming\n\t\t\t? (message.streamingContent || message.content)\n\t\t\t: message.content;\n\t\tif (!raw) return \"\";\n\t\treturn raw.replace(/\\\\n/g, \"\\n\");\n\t})();\n\n\tconst hasReadyStreamPhase =\n\t\tmessage.streamProgress === \"processing\" ||\n\t\tBoolean(message.steps?.length) ||\n\t\tBoolean(message.allThinkingText) ||\n\t\tBoolean(message.activeThinkingText) ||\n\t\tBoolean(rawResponseContent);\n\n\tif (hasReadyStreamPhase && !message.isError) {\n\t\thasShownInitialThinking.current = true;\n\t}\n\n\tconst includeInitialPlaceholder =\n\t\thasShownInitialThinking.current && !message.isError;\n\tconst rawThinkingContent = useMemo(\n\t\t() => getFormattedThinking(message, includeInitialPlaceholder),\n\t\t[message, includeInitialPlaceholder],\n\t);\n\n\tconst isThinkingStreaming =\n\t\t!!message.isStreaming &&\n\t\t!rawResponseContent &&\n\t\t!message.isError;\n\n\tconst { displayedText: thinkingContent } = useTypingEffect(\n\t\trawThinkingContent,\n\t\thasEverStreamed.current && isThinkingStreaming,\n\t\tTHINKING_SPEED,\n\t\tincludeInitialPlaceholder ? INITIAL_THINKING_PLACEHOLDER : undefined,\n\t);\n\tconst hasThinkingContent = Boolean(thinkingContent);\n\tconst showThinkingBlock = hasThinkingContent || isThinkingStreaming;\n\tconst showLegacyThinkingPhase =\n\t\t!!message.isStreaming &&\n\t\t!message.isError &&\n\t\t!rawResponseContent &&\n\t\tmessage.streamProgress === \"started\";\n\n\tconst responseTypingEnabled =\n\t\thasEverStreamed.current && Boolean(rawResponseContent) && !message.isError;\n\n\tconst { displayedText: displayContent, isTyping: isResponseTyping } =\n\t\tuseTypingEffect(rawResponseContent, responseTypingEnabled, RESPONSE_SPEED);\n\n\tconst resolvedErrorText = (() => {\n\t\tconst conflictErrorMessage = getConflictErrorMessage(message.errorDetails);\n\t\tif (conflictErrorMessage) {\n\t\t\treturn conflictErrorMessage;\n\t\t}\n\t\tif (\n\t\t\tisFriendlyWorkflowError(message.errorDetails) &&\n\t\t\t!message.errorDetails\n\t\t) {\n\t\t\treturn \"Oops, something went wrong. Please try again.\";\n\t\t}\n\t\treturn message.errorDetails;\n\t})();\n\n\tconst requestStartedAt = useMemo(() => {\n\t\tif (!message.timestamp) return undefined;\n\t\tconst t = Date.parse(message.timestamp);\n\t\treturn Number.isFinite(t) ? t : undefined;\n\t}, [message.timestamp]);\n\n\t// Total wall-clock time from when the user submitted (assistant message\n\t// was created) until the last step arrived. Falls back to step-span if\n\t// the message timestamp isn't available.\n\tconst thinkingDuration = (() => {\n\t\tconst steps = message.steps;\n\t\tif (!steps || steps.length === 0) return undefined;\n\t\tconst last = steps[steps.length - 1];\n\t\tif (requestStartedAt && last.timestamp) {\n\t\t\treturn Math.max(\n\t\t\t\t0,\n\t\t\t\tMath.round((last.timestamp - requestStartedAt) / 1000),\n\t\t\t);\n\t\t}\n\t\tconst first = steps[0];\n\t\tif (first.timestamp && last.timestamp) {\n\t\t\treturn Math.round((last.timestamp - first.timestamp) / 1000);\n\t\t}\n\t\tconst total = steps.reduce((sum, s) => sum + (s.elapsedMs || 0), 0);\n\t\treturn total > 0 ? Math.round(total / 1000) : undefined;\n\t})();\n\n\tconst conflictErrorMessage = getConflictErrorMessage(message.errorDetails);\n\tconst isConflictError = Boolean(conflictErrorMessage);\n\n\t// For 409 conflicts, render only the parsed backend message — never the\n\t// raw `ops`/JSON payload, a generic \"Oops…\" fallback, or any partial\n\t// streamed content that arrived before the conflict fired.\n\tif (isConflictError) {\n\t\treturn (\n\t\t\t<div className=\"payman-v2-assistant-msg payman-v2-fade-in\">\n\t\t\t\t<div className=\"payman-v2-assistant-msg-error\">\n\t\t\t\t\t<AlertCircle\n\t\t\t\t\t\tclassName=\"payman-v2-assistant-msg-error-icon\"\n\t\t\t\t\t\tstyle={{ width: 16, height: 16 }}\n\t\t\t\t\t/>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p className=\"payman-v2-assistant-msg-error-text\">\n\t\t\t\t\t\t\t{conflictErrorMessage}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (message.isError && !displayContent && !hasThinkingContent) {\n\t\treturn (\n\t\t\t<div className=\"payman-v2-assistant-msg payman-v2-fade-in\">\n\t\t\t\t<div className=\"payman-v2-assistant-msg-error\">\n\t\t\t\t\t<AlertCircle\n\t\t\t\t\t\tclassName=\"payman-v2-assistant-msg-error-icon\"\n\t\t\t\t\t\tstyle={{ width: 16, height: 16 }}\n\t\t\t\t\t/>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t{resolvedErrorText ? (\n\t\t\t\t\t\t\t<p className=\"payman-v2-assistant-msg-error-text\">\n\t\t\t\t\t\t\t\t{resolvedErrorText}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (showLegacyThinkingPhase) {\n\t\treturn (\n\t\t\t<div className=\"payman-v2-assistant-msg payman-v2-fade-in\">\n\t\t\t\t<p className=\"payman-v2-assistant-msg-thinking-only payman-v2-thinking-shimmer\">\n\t\t\t\t\tWorking on it…\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tconst showToast = (label: string, tone: \"success\" | \"error\") => {\n\t\tif (toastTimerRef.current) clearTimeout(toastTimerRef.current);\n\t\tsetToast({ label, tone });\n\t\ttoastTimerRef.current = setTimeout(() => setToast(null), 1800);\n\t};\n\n\tconst handleCopy = async () => {\n\t\ttry {\n\t\t\tif (!navigator.clipboard?.writeText) {\n\t\t\t\tthrow new Error(\"Clipboard unavailable\");\n\t\t\t}\n\t\t\tawait navigator.clipboard.writeText(displayContent);\n\t\t\tif (copyResetTimerRef.current) clearTimeout(copyResetTimerRef.current);\n\t\t\tsetCopied(true);\n\t\t\tcopyResetTimerRef.current = setTimeout(() => setCopied(false), 1800);\n\t\t\tshowToast(\"Copied to clipboard\", \"success\");\n\t\t} catch {\n\t\t\tsetCopied(false);\n\t\t\tshowToast(\"Could not copy\", \"error\");\n\t\t}\n\t};\n\n\tconst handleTrace = () => {\n\t\tonExecutionTraceClick?.({\n\t\t\tmessage,\n\t\t\ttracingData: message.tracingData,\n\t\t\texecutionId: message.executionId,\n\t\t});\n\t};\n\n\tconst hasPartialError = message.isError && displayContent && !isConflictError;\n\tconst isDone =\n\t\t!message.isStreaming &&\n\t\tdisplayContent &&\n\t\t!hasPartialError &&\n\t\t!isResponseTyping;\n\tconst hasVisibleDoneActions =\n\t\tshowCopyAction ||\n\t\tshowTraceAction;\n\tconst isCancelled = message.isCancelled;\n\n\tconst toastPortal =\n\t\ttypeof document !== \"undefined\"\n\t\t\t? createPortal(\n\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t{toast && (\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: -18, scale: 0.96 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\t\t\t\t\texit={{ opacity: 0, y: -12, scale: 0.96 }}\n\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\ttype: \"spring\",\n\t\t\t\t\t\t\t\t\tstiffness: 360,\n\t\t\t\t\t\t\t\t\tdamping: 26,\n\t\t\t\t\t\t\t\t\tmass: 0.7,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName=\"payman-v2-toast\"\n\t\t\t\t\t\t\t\trole=\"status\"\n\t\t\t\t\t\t\t\taria-live=\"polite\"\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-v2-toast-inner\",\n\t\t\t\t\t\t\t\t\t\ttoast.tone === \"success\"\n\t\t\t\t\t\t\t\t\t\t\t? \"payman-v2-toast-success\"\n\t\t\t\t\t\t\t\t\t\t\t: \"payman-v2-toast-error\",\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{toast.tone === \"success\" ? (\n\t\t\t\t\t\t\t\t\t\t<Check\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-4 w-4\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ color: \"#059669\" }}\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<AlertCircle\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-4 w-4\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ color: \"#ef4444\" }}\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<span>{toast.label}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AnimatePresence>,\n\t\t\t\t\tdocument.body,\n\t\t\t\t)\n\t\t\t: null;\n\n\treturn (\n\t\t<>\n\t\t\t{toastPortal}\n\n\t\t\t<div className=\"payman-v2-assistant-msg payman-v2-fade-in\">\n\t\t\t\t{showThinkingBlock && (\n\t\t\t\t\t<ThinkingBlockV2\n\t\t\t\t\t\tcontent={thinkingContent}\n\t\t\t\t\t\tisStreaming={isThinkingStreaming}\n\t\t\t\t\t\tdurationSec={thinkingDuration}\n\t\t\t\t\t\tstartedAt={requestStartedAt}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t<div className=\"payman-v2-assistant-msg-content-area\">\n\t\t\t\t\t{displayContent ? (\n\t\t\t\t\t\t<MarkdownRendererV2\n\t\t\t\t\t\t\tcontent={displayContent}\n\t\t\t\t\t\t\tisStreaming={(message.isStreaming && !isCancelled) || isResponseTyping}\n\t\t\t\t\t\t\tisResolvingImages={message.isResolvingImages}\n\t\t\t\t\t\t\tonImageClick={onImageClick}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : !isThinkingStreaming && !hasThinkingContent ? (\n\t\t\t\t\t\t<span className=\"payman-v2-assistant-msg-placeholder\">...</span>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\n\t\t\t\t{isCancelled && message.isStreaming && (\n\t\t\t\t\t<div className=\"payman-v2-assistant-msg-paused\">\n\t\t\t\t\t\t<WifiOff\n\t\t\t\t\t\t\tstyle={{ width: 14, height: 14, color: \"rgba(217, 119, 6, 0.7)\", flexShrink: 0 }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<p className=\"payman-v2-assistant-msg-paused-text\">\n\t\t\t\t\t\t\tConnection slow - resuming…\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{hasPartialError && (\n\t\t\t\t\t<div className=\"payman-v2-assistant-msg-partial-error\">\n\t\t\t\t\t\t<AlertCircle\n\t\t\t\t\t\t\tclassName=\"payman-v2-assistant-msg-error-icon\"\n\t\t\t\t\t\t\tstyle={{ width: 16, height: 16 }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t{resolvedErrorText ? (\n\t\t\t\t\t\t\t\t<p className=\"payman-v2-assistant-msg-error-text\">\n\t\t\t\t\t\t\t\t\t{resolvedErrorText}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{isDone && hasVisibleDoneActions && (\n\t\t\t\t\t<div className=\"payman-v2-assistant-msg-actions\">\n\t\t\t\t\t\t{showCopyAction && (\n\t\t\t\t\t\t\t<ActionTooltipV2 label=\"Copy\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tonClick={() => void handleCopy()}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-v2-assistant-msg-action-btn\",\n\t\t\t\t\t\t\t\t\t\tcopied && \"payman-v2-assistant-msg-action-btn-active\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\taria-label=\"Copy\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{copied ? (\n\t\t\t\t\t\t\t\t\t\t<Check style={{ width: 16, height: 16 }} />\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<Copy style={{ width: 16, height: 16 }} />\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</ActionTooltipV2>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{showTraceAction && (\n\t\t\t\t\t\t\t<ActionTooltipV2 label=\"Trace\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tonClick={handleTrace}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-assistant-msg-action-btn\"\n\t\t\t\t\t\t\t\t\taria-label=\"Trace response\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<SearchCode style={{ width: 16, height: 16 }} />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</ActionTooltipV2>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</>\n\t);\n}\n","import { useEffect, useRef, type ClipboardEvent, type KeyboardEvent } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport type OtpInputV2Props = {\n\tvalue: string;\n\tonChange: (value: string) => void;\n\tmaxLength?: number;\n\tdisabled?: boolean;\n\terror?: boolean;\n};\n\nconst DEFAULT_MAX_LENGTH = 6;\nconst MAX_SUPPORTED_LENGTH = 12;\nconst AUTO_FOCUS_DELAY_MS = 250;\n\nexport function OtpInputV2({\n\tvalue,\n\tonChange,\n\tmaxLength,\n\tdisabled = false,\n\terror = false,\n}: OtpInputV2Props) {\n\tconst inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n\tconst safeMaxLength =\n\t\tNumber.isInteger(maxLength) && (maxLength as number) > 0\n\t\t\t? Math.min(maxLength as number, 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\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 = (index: number, e: KeyboardEvent<HTMLInputElement>) => {\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: ClipboardEvent<HTMLInputElement>) => {\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={cn(\"payman-v2-otp\", error && \"payman-v2-shake\")}>\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\"payman-v2-otp-digit\",\n\t\t\t\t\t\tdigit && \"payman-v2-otp-digit-filled\",\n\t\t\t\t\t\terror && \"payman-v2-otp-digit-error\"\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</div>\n\t);\n}\n","import { motion } from \"framer-motion\";\nimport { Loader2, ShieldCheck } from \"lucide-react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { OtpInputV2 } from \"./OtpInputV2\";\n\nexport type VerificationActionV2 = {\n\ttype: string;\n\tmessage: string;\n\tamount?: string;\n\tpayeeName?: string;\n};\n\nexport type VerificationStatusV2 =\n\t| \"pending\"\n\t| \"verifying\"\n\t| \"approved\"\n\t| \"rejected\"\n\t| \"error\";\n\nexport type VerificationCardV2Props = {\n\tmessageId: string;\n\taction: VerificationActionV2;\n\tstatus: VerificationStatusV2;\n\tonApprove: (messageId: string, otp: string) => Promise<void>;\n\tonReject: (messageId: string) => Promise<void>;\n\tonResend: (messageId: string) => Promise<void>;\n};\n\nconst RESEND_COOLDOWN_S = 30;\nconst OTP_LEN = 6;\n\nexport function VerificationCardV2({\n\tmessageId,\n\taction,\n\tstatus,\n\tonApprove,\n\tonReject,\n\tonResend,\n}: VerificationCardV2Props) {\n\tconst [otp, setOtp] = useState(\"\");\n\tconst [otpErrored, setOtpErrored] = useState(false);\n\tconst [resendSec, setResendSec] = useState(0);\n\tconst lastSubmittedRef = useRef<string | null>(null);\n\tconst resendTimerRef = useRef<number | undefined>(undefined);\n\n\tuseEffect(() => {\n\t\tif (status !== \"error\") {\n\t\t\tsetOtpErrored(false);\n\t\t\treturn;\n\t\t}\n\t\tsetOtpErrored(true);\n\t\tconst t = window.setTimeout(() => {\n\t\t\tsetOtp(\"\");\n\t\t\tsetOtpErrored(false);\n\t\t\tlastSubmittedRef.current = null;\n\t\t}, 600);\n\t\treturn () => window.clearTimeout(t);\n\t}, [status]);\n\n\tuseEffect(() => {\n\t\tif (otp.length < OTP_LEN) {\n\t\t\tlastSubmittedRef.current = null;\n\t\t}\n\t}, [otp]);\n\n\tuseEffect(() => {\n\t\tif (\n\t\t\totp.length !== OTP_LEN ||\n\t\t\t!/^\\d+$/.test(otp) ||\n\t\t\tstatus !== \"pending\"\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tif (lastSubmittedRef.current === otp) return;\n\t\tlastSubmittedRef.current = otp;\n\t\tvoid onApprove(messageId, otp);\n\t}, [messageId, onApprove, otp, status]);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (typeof resendTimerRef.current === \"number\") {\n\t\t\t\twindow.clearInterval(resendTimerRef.current);\n\t\t\t}\n\t\t};\n\t}, []);\n\n\tconst startResendCooldown = useCallback(() => {\n\t\tsetResendSec(RESEND_COOLDOWN_S);\n\t\tif (typeof resendTimerRef.current === \"number\") {\n\t\t\twindow.clearInterval(resendTimerRef.current);\n\t\t}\n\t\tresendTimerRef.current = window.setInterval(() => {\n\t\t\tsetResendSec((s) => {\n\t\t\t\tif (s <= 1) {\n\t\t\t\t\tif (typeof resendTimerRef.current === \"number\") {\n\t\t\t\t\t\twindow.clearInterval(resendTimerRef.current);\n\t\t\t\t\t\tresendTimerRef.current = undefined;\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\treturn s - 1;\n\t\t\t});\n\t\t}, 1000);\n\t}, []);\n\n\tconst handleResend = useCallback(async () => {\n\t\tif (resendSec > 0 || status === \"verifying\") return;\n\t\tawait onResend(messageId);\n\t\tstartResendCooldown();\n\t}, [messageId, onResend, resendSec, startResendCooldown, status]);\n\n\tconst handleCancel = useCallback(async () => {\n\t\tawait onReject(messageId);\n\t}, [messageId, onReject]);\n\n\tconst handleSubmit = useCallback(async () => {\n\t\tif (\n\t\t\totp.length !== OTP_LEN ||\n\t\t\t!/^\\d+$/.test(otp) ||\n\t\t\tstatus !== \"pending\"\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tif (lastSubmittedRef.current === otp) return;\n\t\tlastSubmittedRef.current = otp;\n\t\tawait onApprove(messageId, otp);\n\t}, [messageId, onApprove, otp, status]);\n\n\tconst busy = status === \"verifying\";\n\tconst canSubmit = status === \"pending\" && otp.length === OTP_LEN && /^\\d+$/.test(otp);\n\n\tif (status === \"approved\" || status === \"rejected\") {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<motion.div\n\t\t\tclassName=\"payman-v2-verification\"\n\t\t\tinitial={{ opacity: 0, y: 10 }}\n\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\ttransition={{ type: \"spring\", stiffness: 320, damping: 28 }}\n\t\t>\n\t\t\t<div className=\"payman-v2-verification-card\">\n\t\t\t\t<div className=\"payman-v2-verification-header\">\n\t\t\t\t\t<div className=\"payman-v2-verification-header-row\">\n\t\t\t\t\t\t<ShieldCheck\n\t\t\t\t\t\t\tclassName=\"payman-v2-verification-icon\"\n\t\t\t\t\t\t\tsize={18}\n\t\t\t\t\t\t\tstrokeWidth={1.75}\n\t\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<p className=\"payman-v2-verification-title\">Verify</p>\n\t\t\t\t\t\t{action.amount != null ? (\n\t\t\t\t\t\t\t<span className=\"payman-v2-verification-amount\">\n\t\t\t\t\t\t\t\t{action.amount}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) : action.payeeName ? (\n\t\t\t\t\t\t\t<span className=\"payman-v2-verification-payee\">\n\t\t\t\t\t\t\t\t{action.payeeName}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</div>\n\t\t\t\t\t<p className=\"payman-v2-verification-description\">\n\t\t\t\t\t\tEnter the 6-digit code sent to your phone\n\t\t\t\t\t</p>\n\t\t\t\t\t<OtpInputV2\n\t\t\t\t\t\tvalue={otp}\n\t\t\t\t\t\tonChange={setOtp}\n\t\t\t\t\t\tmaxLength={OTP_LEN}\n\t\t\t\t\t\tdisabled={busy}\n\t\t\t\t\t\terror={otpErrored}\n\t\t\t\t\t/>\n\t\t\t\t\t{busy ? (\n\t\t\t\t\t\t<div className=\"payman-v2-verification-submitting\">\n\t\t\t\t\t\t\t<motion.span\n\t\t\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\t\t\tstyle={{ display: \"inline-flex\" }}\n\t\t\t\t\t\t\t\tanimate={{ rotate: 360 }}\n\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\trepeat: Infinity,\n\t\t\t\t\t\t\t\t\tduration: 0.7,\n\t\t\t\t\t\t\t\t\tease: \"linear\",\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<Loader2 size={14} strokeWidth={2} />\n\t\t\t\t\t\t\t</motion.span>\n\t\t\t\t\t\t\t<span className=\"payman-v2-verification-submitting-text\">\n\t\t\t\t\t\t\t\tVerifying...\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\t\t\t\t<div className=\"payman-v2-verification-actions\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"payman-v2-verification-cancel-btn\"\n\t\t\t\t\t\tdisabled={busy}\n\t\t\t\t\t\tonClick={() => void handleCancel()}\n\t\t\t\t\t>\n\t\t\t\t\t\tCancel\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName=\"payman-v2-verification-resend-link\"\n\t\t\t\tdisabled={busy || resendSec > 0}\n\t\t\t\tonClick={() => void handleResend()}\n\t\t\t>\n\t\t\t\t{resendSec > 0 ? `Resend (${resendSec}s)` : \"Resend\"}\n\t\t\t</button>\n\t\t</motion.div>\n\t);\n}\n","import {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { ArrowDown } from \"lucide-react\";\nimport type { MessageListV2Props } from \"../../types\";\nimport { UserMessageV2 } from \"./UserMessageV2\";\nimport { AssistantMessageV2 } from \"./AssistantMessageV2\";\nimport { VerificationCardV2 } from \"./VerificationCardV2\";\n\nexport type { MessageListV2Props } from \"../../types\";\n\nconst SCROLL_THRESHOLD = 100;\n\nexport type MessageListV2Handle = {\n\tscrollToBottom: (behavior?: ScrollBehavior) => void;\n};\n\nexport const MessageListV2 = forwardRef<MessageListV2Handle, MessageListV2Props>(\n\tfunction MessageListV2(\n\t\t{\n\t\t\tmessages,\n\t\t\tisStreaming: _isStreaming = false,\n\t\t\tonEditUserMessage,\n\t\t\tonRetryUserMessage,\n\t\t\tonImageClick,\n\t\t\tonExecutionTraceClick,\n\t\t\tmessageActions,\n\t\t\tretryDisabled = false,\n\t\t\tuserAction,\n\t\t\tonApproveAction,\n\t\t\tonRejectAction,\n\t\t\tonResendAction,\n\t\t},\n\t\tref,\n\t) {\n\t\tconst scrollRef = useRef<HTMLDivElement>(null);\n\t\tconst scrollInnerRef = useRef<HTMLDivElement>(null);\n\t\tconst isNearBottomRef = useRef(true);\n\t\tconst [showScrollBtn, setShowScrollBtn] = useState(false);\n\t\tconst prevCountRef = useRef(messages.length);\n\t\tconst pauseStickUntilUserMessageRef = useRef(false);\n\t\tconst followingBottomRef = useRef(true);\n\t\tconst isProgrammaticScrollRef = useRef(false);\n\n\t\tconst getDistanceFromBottom = useCallback(() => {\n\t\t\tconst el = scrollRef.current;\n\t\t\tif (!el) return 0;\n\t\t\treturn el.scrollHeight - el.scrollTop - el.clientHeight;\n\t\t}, []);\n\n\t\tconst scrollToBottom = useCallback(\n\t\t\t(behavior: ScrollBehavior = \"smooth\") => {\n\t\t\t\tconst el = scrollRef.current;\n\t\t\t\tif (!el) return;\n\t\t\t\tisProgrammaticScrollRef.current = true;\n\t\t\t\tpauseStickUntilUserMessageRef.current = false;\n\t\t\t\tfollowingBottomRef.current = true;\n\t\t\t\tel.scrollTo({ top: el.scrollHeight, behavior });\n\t\t\t\tconst clear = () => {\n\t\t\t\t\tisProgrammaticScrollRef.current = false;\n\t\t\t\t};\n\t\t\t\tif (behavior === \"instant\") {\n\t\t\t\t\trequestAnimationFrame(clear);\n\t\t\t\t} else {\n\t\t\t\t\tsetTimeout(clear, 400);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[],\n\t\t);\n\n\t\tuseImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tscrollToBottom: (behavior: ScrollBehavior = \"smooth\") => {\n\t\t\t\t\tisNearBottomRef.current = true;\n\t\t\t\t\tpauseStickUntilUserMessageRef.current = false;\n\t\t\t\t\tfollowingBottomRef.current = true;\n\t\t\t\t\tsetShowScrollBtn(false);\n\t\t\t\t\tscrollToBottom(behavior);\n\t\t\t\t},\n\t\t\t}),\n\t\t\t[scrollToBottom],\n\t\t);\n\n\t\tconst handleScroll = useCallback(() => {\n\t\t\tconst distance = getDistanceFromBottom();\n\t\t\tconst nearBottom = distance <= SCROLL_THRESHOLD;\n\t\t\tisNearBottomRef.current = nearBottom;\n\t\t\tsetShowScrollBtn(!nearBottom);\n\n\t\t\tif (isProgrammaticScrollRef.current) return;\n\n\t\t\tif (!nearBottom) {\n\t\t\t\tfollowingBottomRef.current = false;\n\t\t\t\tpauseStickUntilUserMessageRef.current = true;\n\t\t\t}\n\t\t}, [getDistanceFromBottom]);\n\n\t\tuseEffect(() => {\n\t\t\tconst prevCount = prevCountRef.current;\n\t\t\tprevCountRef.current = messages.length;\n\t\t\tif (messages.length > prevCount) {\n\t\t\t\tconst last = messages[messages.length - 1];\n\t\t\t\tif (last?.role === \"user\") {\n\t\t\t\t\tpauseStickUntilUserMessageRef.current = false;\n\t\t\t\t\tfollowingBottomRef.current = true;\n\t\t\t\t\trequestAnimationFrame(() => scrollToBottom());\n\t\t\t\t} else if (\n\t\t\t\t\t!pauseStickUntilUserMessageRef.current &&\n\t\t\t\t\tfollowingBottomRef.current\n\t\t\t\t) {\n\t\t\t\t\trequestAnimationFrame(() => scrollToBottom(\"instant\"));\n\t\t\t\t}\n\t\t\t}\n\t\t}, [messages.length, scrollToBottom]);\n\n\t\tuseEffect(() => {\n\t\t\tconst lastMsg = messages[messages.length - 1];\n\t\t\tif (!lastMsg?.isStreaming) return;\n\t\t\tif (pauseStickUntilUserMessageRef.current) return;\n\t\t\tif (!followingBottomRef.current) return;\n\t\t\tconst el = scrollRef.current;\n\t\t\tif (!el) return;\n\t\t\tisProgrammaticScrollRef.current = true;\n\t\t\tel.scrollTop = el.scrollHeight;\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tisProgrammaticScrollRef.current = false;\n\t\t\t});\n\t\t});\n\n\t\tuseEffect(() => {\n\t\t\tconst inner = scrollInnerRef.current;\n\t\t\tif (!inner) return;\n\n\t\t\tconst pinIfFollowing = () => {\n\t\t\t\tif (pauseStickUntilUserMessageRef.current) return;\n\t\t\t\tif (!followingBottomRef.current) return;\n\t\t\t\tconst el = scrollRef.current;\n\t\t\t\tif (!el) return;\n\t\t\t\tisProgrammaticScrollRef.current = true;\n\t\t\t\tel.scrollTop = el.scrollHeight;\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tisProgrammaticScrollRef.current = false;\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tconst ro = new ResizeObserver(() => {\n\t\t\t\tpinIfFollowing();\n\t\t\t});\n\t\t\tro.observe(inner);\n\t\t\treturn () => ro.disconnect();\n\t\t}, []);\n\n\t\tuseEffect(() => {\n\t\t\tif (messages.length > 0) {\n\t\t\t\tsetTimeout(() => scrollToBottom(\"instant\"), 50);\n\t\t\t}\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t}, []);\n\n\t\treturn (\n\t\t\t<div className=\"payman-v2-message-list\">\n\t\t\t\t<div\n\t\t\t\t\tref={scrollRef}\n\t\t\t\t\tonScroll={handleScroll}\n\t\t\t\t\tclassName=\"payman-v2-message-scroll payman-v2-scrollbar\"\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tref={scrollInnerRef}\n\t\t\t\t\t\tclassName=\"payman-v2-message-scroll-inner\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{messages.map((message) => (\n\t\t\t\t\t\t\t<div key={message.id}>\n\t\t\t\t\t\t\t\t{message.role === \"user\" ? (\n\t\t\t\t\t\t\t\t\t<UserMessageV2\n\t\t\t\t\t\t\t\t\t\tmessage={message}\n\t\t\t\t\t\t\t\t\t\tonEdit={onEditUserMessage}\n\t\t\t\t\t\t\t\t\t\tonRetry={onRetryUserMessage}\n\t\t\t\t\t\t\t\t\t\tretryDisabled={retryDisabled}\n\t\t\t\t\t\t\t\t\t\tactions={messageActions?.userMessageActions}\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<AssistantMessageV2\n\t\t\t\t\t\t\t\t\t\tmessage={message}\n\t\t\t\t\t\t\t\t\t\tonImageClick={onImageClick}\n\t\t\t\t\t\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t\t\t\t\t\t\tactions={messageActions?.assistantMessageActions}\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</div>\n\t\t\t\t\t\t))}\n\n\t\t\t\t\t\t{userAction && userAction.status !== \"approved\" && userAction.status !== \"rejected\" && (\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<VerificationCardV2\n\t\t\t\t\t\t\t\t\tmessageId={userAction.messageId}\n\t\t\t\t\t\t\t\t\taction={userAction.action}\n\t\t\t\t\t\t\t\t\tstatus={userAction.status}\n\t\t\t\t\t\t\t\t\tonApprove={onApproveAction ?? (async () => {})}\n\t\t\t\t\t\t\t\t\tonReject={onRejectAction ?? (async () => {})}\n\t\t\t\t\t\t\t\t\tonResend={onResendAction ?? (async () => {})}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<AnimatePresence>\n\t\t\t\t\t{showScrollBtn && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 6 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\texit={{ opacity: 0, y: 6 }}\n\t\t\t\t\t\t\ttransition={{ duration: 0.12 }}\n\t\t\t\t\t\t\tclassName=\"payman-v2-scroll-to-bottom\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\tscrollToBottom();\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName=\"payman-v2-scroll-to-bottom-btn\"\n\t\t\t\t\t\t\t\taria-label=\"Scroll to bottom\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ArrowDown style={{ width: 16, height: 16 }} />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</div>\n\t\t);\n\t},\n);\n","import {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport {\n\tArrowUp,\n\tMic,\n\tPlus,\n\tImagePlus,\n\tPaperclip,\n\tPencil,\n\tRotateCcw,\n\tX,\n} from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\n\nexport type ChatInputV2Props = {\n\tonSend: (message: string) => void;\n\tonCancel?: () => void;\n\tdisabled?: boolean;\n\tisStreaming?: boolean;\n\tplaceholder?: string;\n\tenableVoice?: boolean;\n\tvoiceAvailable?: boolean;\n\tisRecording?: boolean;\n\tonVoicePress?: () => void;\n\tonCancelRecording?: () => void;\n\tonConfirmRecording?: () => void;\n\ttranscribedText?: string;\n\tshowResetSession?: boolean;\n\tonResetSession?: () => void;\n\tshowAttachmentButton?: boolean;\n\tshowUploadImageButton?: boolean;\n\tshowAttachFileButton?: boolean;\n\tonUploadImageClick?: () => void;\n\tonAttachFileClick?: () => void;\n\teditingMessageId?: string | null;\n\tonClearEditing?: () => void;\n\t/** When true, the send control is hidden (e.g. during inline OTP verification). */\n\thideSendButton?: boolean;\n};\n\nexport type ChatInputV2Handle = {\n\tsetDraft: (message: string) => void;\n};\n\nexport const ChatInputV2 = forwardRef<ChatInputV2Handle, ChatInputV2Props>(\n\tfunction ChatInputV2(\n\t\t{\n\t\t\tonSend,\n\t\t\tonCancel,\n\t\t\tdisabled = false,\n\t\t\tisStreaming = false,\n\t\t\tplaceholder = \"Reply...\",\n\t\t\tenableVoice = false,\n\t\t\tvoiceAvailable = false,\n\t\t\tisRecording = false,\n\t\t\tonVoicePress,\n\t\t\ttranscribedText = \"\",\n\t\t\tshowResetSession = false,\n\t\t\tonResetSession,\n\t\t\tshowAttachmentButton = true,\n\t\t\tshowUploadImageButton = true,\n\t\t\tshowAttachFileButton = true,\n\t\t\tonUploadImageClick,\n\t\t\tonAttachFileClick,\n\t\t\teditingMessageId = null,\n\t\t\tonClearEditing,\n\t\t\thideSendButton = false,\n\t\t}: ChatInputV2Props,\n\t\tref,\n\t) {\n\t\tconst [value, setValue] = useState(\"\");\n\t\tconst [isFocused, setIsFocused] = useState(false);\n\t\tconst [showActions, setShowActions] = useState(false);\n\t\tconst [showVoiceTooltip, setShowVoiceTooltip] = useState(false);\n\t\tconst textareaRef = useRef<HTMLTextAreaElement>(null);\n\t\tconst actionsRef = useRef<HTMLDivElement>(null);\n\t\tconst preRecordTextRef = useRef(\"\");\n\t\tconst voiceTooltipTimerRef = useRef<ReturnType<typeof setTimeout> | null>(\n\t\t\tnull,\n\t\t);\n\t\tconst voiceDraftSyncActiveRef = useRef(false);\n\n\t\tconst isInputLocked = disabled || isRecording;\n\t\tconst hasAttachmentOptions = showUploadImageButton || showAttachFileButton;\n\t\tconst showAttachmentMenuButton = showAttachmentButton && hasAttachmentOptions;\n\t\tconst showVoiceButton = enableVoice && onVoicePress != null;\n\t\tconst isVoiceButtonDisabled = disabled || !voiceAvailable;\n\n\t\tuseEffect(() => {\n\t\t\tif (textareaRef.current) {\n\t\t\t\ttextareaRef.current.style.height = \"auto\";\n\t\t\t\tconst scrollHeight = textareaRef.current.scrollHeight;\n\t\t\t\ttextareaRef.current.style.height = `${Math.min(scrollHeight, 200)}px`;\n\t\t\t}\n\t\t}, [value]);\n\n\t\tuseEffect(() => {\n\t\t\tif (disabled) {\n\t\t\t\tsetIsFocused(false);\n\t\t\t\tsetShowActions(false);\n\t\t\t\ttextareaRef.current?.blur();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst frameId = requestAnimationFrame(() => textareaRef.current?.focus());\n\t\t\treturn () => cancelAnimationFrame(frameId);\n\t\t}, [disabled]);\n\n\t\tuseImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tsetDraft: (message: string) => {\n\t\t\t\t\tsetShowActions(false);\n\t\t\t\t\tsetValue(message);\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\tconst textarea = textareaRef.current;\n\t\t\t\t\t\tif (!textarea || disabled) return;\n\t\t\t\t\t\ttextarea.focus();\n\t\t\t\t\t\tconst end = message.length;\n\t\t\t\t\t\ttextarea.setSelectionRange(end, end);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t\t[disabled],\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tif (!showActions) return;\n\t\t\tconst handleClickOutside = (e: MouseEvent) => {\n\t\t\t\tif (\n\t\t\t\t\tactionsRef.current &&\n\t\t\t\t\t!actionsRef.current.contains(e.target as Node)\n\t\t\t\t) {\n\t\t\t\t\tsetShowActions(false);\n\t\t\t\t}\n\t\t\t};\n\t\t\tdocument.addEventListener(\"mousedown\", handleClickOutside);\n\t\t\treturn () => document.removeEventListener(\"mousedown\", handleClickOutside);\n\t\t}, [showActions]);\n\n\t\tuseEffect(() => {\n\t\t\tif (!showAttachmentMenuButton) {\n\t\t\t\tsetShowActions(false);\n\t\t\t}\n\t\t}, [showAttachmentMenuButton]);\n\n\t\tuseEffect(() => {\n\t\t\treturn () => {\n\t\t\t\tif (voiceTooltipTimerRef.current) {\n\t\t\t\t\tclearTimeout(voiceTooltipTimerRef.current);\n\t\t\t\t}\n\t\t\t};\n\t\t}, []);\n\n\t\tuseEffect(() => {\n\t\t\tif (!voiceDraftSyncActiveRef.current) return;\n\t\t\tconst base = preRecordTextRef.current;\n\t\t\tconst separator = base && !base.endsWith(\" \") && transcribedText ? \" \" : \"\";\n\t\t\tsetValue(`${base}${separator}${transcribedText}`);\n\t\t}, [isRecording, transcribedText]);\n\n\t\tconst handleSend = useCallback(() => {\n\t\t\tif (!value.trim() || disabled) return;\n\t\t\tvoiceDraftSyncActiveRef.current = false;\n\t\t\tpreRecordTextRef.current = \"\";\n\t\t\tonClearEditing?.();\n\t\t\tonSend(value.trim());\n\t\t\tsetValue(\"\");\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tif (textareaRef.current) {\n\t\t\t\t\ttextareaRef.current.style.height = \"auto\";\n\t\t\t\t\ttextareaRef.current.focus();\n\t\t\t\t}\n\t\t\t});\n\t\t}, [value, disabled, onClearEditing, onSend]);\n\n\t\tconst handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n\t\t\tif (e.key === \"Enter\" && !e.shiftKey) {\n\t\t\t\te.preventDefault();\n\t\t\t\tif (isStreaming || hideSendButton) return;\n\t\t\t\thandleSend();\n\t\t\t}\n\t\t};\n\n\t\tconst handleUploadImageClick = () => {\n\t\t\tonUploadImageClick?.();\n\t\t\tsetShowActions(false);\n\t\t};\n\n\t\tconst handleAttachFileClick = () => {\n\t\t\tonAttachFileClick?.();\n\t\t\tsetShowActions(false);\n\t\t};\n\n\t\tconst hideVoiceTooltip = useCallback(() => {\n\t\t\tif (voiceTooltipTimerRef.current) {\n\t\t\t\tclearTimeout(voiceTooltipTimerRef.current);\n\t\t\t\tvoiceTooltipTimerRef.current = null;\n\t\t\t}\n\t\t\tsetShowVoiceTooltip(false);\n\t\t}, []);\n\n\t\tconst startVoiceTooltipTimer = useCallback(() => {\n\t\t\tif (isVoiceButtonDisabled || isRecording) return;\n\t\t\tif (voiceTooltipTimerRef.current) {\n\t\t\t\tclearTimeout(voiceTooltipTimerRef.current);\n\t\t\t}\n\t\t\tvoiceTooltipTimerRef.current = setTimeout(() => {\n\t\t\t\tsetShowVoiceTooltip(true);\n\t\t\t\tvoiceTooltipTimerRef.current = null;\n\t\t\t}, 2000);\n\t\t}, [isRecording, isVoiceButtonDisabled]);\n\n\t\tconst handleVoiceToggle = () => {\n\t\t\thideVoiceTooltip();\n\t\t\tsetShowActions(false);\n\t\t\tif (!onVoicePress || isVoiceButtonDisabled) return;\n\t\t\tif (!isRecording) {\n\t\t\t\tpreRecordTextRef.current = value;\n\t\t\t\tvoiceDraftSyncActiveRef.current = true;\n\t\t\t}\n\t\t\tonVoicePress();\n\t\t};\n\n\t\tconst canSend = value.trim().length > 0 && !disabled;\n\t\tconst sendDisabled = !canSend || isStreaming;\n\n\t\treturn (\n\t\t\t<div className=\"payman-v2-input-container\">\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"payman-v2-input-wrapper\",\n\t\t\t\t\t\t(isFocused || isRecording) && \"payman-v2-input-wrapper-focused\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"payman-v2-input-body\">\n\t\t\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t\t\t{editingMessageId && (\n\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: -4 }}\n\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\t\t\texit={{ opacity: 0, y: -4 }}\n\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.14, ease: \"easeOut\" }}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-editing-banner\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div className=\"payman-v2-input-editing-banner-info\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"payman-v2-input-editing-icon-wrap\">\n\t\t\t\t\t\t\t\t\t\t\t<Pencil style={{ width: 12, height: 12 }} />\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t<p className=\"payman-v2-input-editing-label\">\n\t\t\t\t\t\t\t\t\t\t\tEditing message\n\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t{onClearEditing && (\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={onClearEditing}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-editing-close\"\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Stop editing message\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<X style={{ width: 14, height: 14 }} />\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</AnimatePresence>\n\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) => {\n\t\t\t\t\t\t\t\tif (isRecording) return;\n\t\t\t\t\t\t\t\tconst nextValue = e.target.value;\n\t\t\t\t\t\t\t\tvoiceDraftSyncActiveRef.current = false;\n\t\t\t\t\t\t\t\tsetValue(nextValue);\n\t\t\t\t\t\t\t\tif (editingMessageId && nextValue.length === 0) {\n\t\t\t\t\t\t\t\t\tonClearEditing?.();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\tonFocus={() => {\n\t\t\t\t\t\t\t\tif (!disabled) setIsFocused(true);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonBlur={() => setIsFocused(false)}\n\t\t\t\t\t\t\tonMouseDown={(e) => {\n\t\t\t\t\t\t\t\tif (disabled) e.preventDefault();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\taria-disabled={disabled}\n\t\t\t\t\t\t\treadOnly={isInputLocked}\n\t\t\t\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\t\t\t\tplaceholder={isRecording ? \"Listening…\" : placeholder}\n\t\t\t\t\t\t\tclassName=\"payman-v2-input-textarea\"\n\t\t\t\t\t\t\tdata-disabled={disabled ? \"true\" : \"false\"}\n\t\t\t\t\t\t\trows={1}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div className=\"payman-v2-input-controls\">\n\t\t\t\t\t\t<div className=\"payman-v2-input-controls-left\">\n\t\t\t\t\t\t\t{showResetSession && onResetSession && (\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={onResetSession}\n\t\t\t\t\t\t\t\t\tdisabled={isStreaming || isRecording}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-new-session-btn\"\n\t\t\t\t\t\t\t\t\taria-label=\"New Session\"\n\t\t\t\t\t\t\t\t\ttitle=\"New Session\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<RotateCcw\n\t\t\t\t\t\t\t\t\t\tstyle={{ width: 16, height: 16, strokeWidth: 2.25 }}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<span className=\"payman-v2-input-new-session-tooltip\">\n\t\t\t\t\t\t\t\t\t\tNew Session\n\t\t\t\t\t\t\t\t\t</span>\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{showAttachmentMenuButton && (\n\t\t\t\t\t\t\t\t<div style={{ position: \"relative\" }} ref={actionsRef}>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => setShowActions((current) => !current)}\n\t\t\t\t\t\t\t\t\t\tdisabled={disabled || isRecording}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\"payman-v2-input-attach-btn\",\n\t\t\t\t\t\t\t\t\t\t\tshowActions && \"payman-v2-input-attach-btn-active\",\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\taria-label=\"Attach\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Plus\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ width: 20, height: 20, strokeWidth: 2 }}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t\t\t\t\t{showActions && (\n\t\t\t\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 4, scale: 0.95 }}\n\t\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\t\t\t\t\t\t\t\t\texit={{ opacity: 0, y: 4, scale: 0.95 }}\n\t\t\t\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.12 }}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-attach-menu\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{showUploadImageButton && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-attach-option\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={handleUploadImageClick}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ImagePlus\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={{ width: 16, height: 16 }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-attach-option-icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tUpload image\n\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t{showAttachFileButton && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-attach-option\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={handleAttachFileClick}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Paperclip\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={{ width: 16, height: 16 }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-attach-option-icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tAttach file\n\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{showVoiceButton && (\n\t\t\t\t\t\t\t\t<div style={{ position: \"relative\" }}>\n\t\t\t\t\t\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t\t\t\t\t\t{showVoiceTooltip && (\n\t\t\t\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 4, scale: 0.98 }}\n\t\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\t\t\t\t\t\t\t\t\texit={{ opacity: 0, y: 4, scale: 0.98 }}\n\t\t\t\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.14, ease: \"easeOut\" }}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-voice-tooltip\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"payman-v2-input-voice-tooltip-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tChat with your voice\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"payman-v2-input-voice-tooltip-arrow\" />\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</AnimatePresence>\n\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={handleVoiceToggle}\n\t\t\t\t\t\t\t\t\t\tonMouseEnter={startVoiceTooltipTimer}\n\t\t\t\t\t\t\t\t\t\tonMouseLeave={hideVoiceTooltip}\n\t\t\t\t\t\t\t\t\t\tonFocus={startVoiceTooltipTimer}\n\t\t\t\t\t\t\t\t\t\tonBlur={hideVoiceTooltip}\n\t\t\t\t\t\t\t\t\t\tdisabled={isVoiceButtonDisabled}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\"payman-v2-input-mic-btn\",\n\t\t\t\t\t\t\t\t\t\t\tisRecording && \"payman-v2-input-mic-recording\",\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\taria-label={isRecording ? \"Stop recording\" : \"Voice input\"}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Mic style={{ width: 18, height: 18 }} />\n\t\t\t\t\t\t\t\t\t\t{isRecording && (\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"payman-v2-input-mic-indicator\" />\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</button>\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\n\t\t\t\t\t\t{!hideSendButton && (\n\t\t\t\t\t\t\t<div className=\"payman-v2-input-controls-right\">\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={handleSend}\n\t\t\t\t\t\t\t\t\tdisabled={sendDisabled}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-v2-input-send-btn\",\n\t\t\t\t\t\t\t\t\t\tsendDisabled && \"payman-v2-input-send-btn-disabled\",\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\n\t\t\t\t\t\t\t\t\t\tstyle={{ width: 16, height: 16, strokeWidth: 2.5 }}\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-input-send-icon\"\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</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<p className=\"payman-v2-input-disclaimer\">\n\t\t\t\t\tAI can make mistakes. Please double-check responses.\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t);\n\t},\n);\n","import { useCallback, useEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { Download, Loader2, X } from \"lucide-react\";\n\nexport type ImageLightboxV2Props = {\n\tsrc: string | null;\n\talt: string;\n\tonClose: () => void;\n};\n\nexport function ImageLightboxV2({ src, alt, onClose }: ImageLightboxV2Props) {\n\tconst [isMounted, setIsMounted] = useState(false);\n\tconst [isImageLoaded, setIsImageLoaded] = useState(false);\n\n\tuseEffect(() => {\n\t\tsetIsMounted(true);\n\t\treturn () => setIsMounted(false);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tsetIsImageLoaded(false);\n\t}, [src]);\n\n\tconst handleKeyDown = useCallback(\n\t\t(e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") onClose();\n\t\t},\n\t\t[onClose]\n\t);\n\n\tuseEffect(() => {\n\t\tif (!src || typeof document === \"undefined\") return;\n\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown);\n\t\tconst previousOverflow = document.body.style.overflow;\n\t\tdocument.body.style.overflow = \"hidden\";\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"keydown\", handleKeyDown);\n\t\t\tdocument.body.style.overflow = previousOverflow;\n\t\t};\n\t}, [src, handleKeyDown]);\n\n\tconst handleDownload = () => {\n\t\tif (!src || typeof document === \"undefined\") return;\n\t\tconst a = document.createElement(\"a\");\n\t\ta.href = src;\n\t\ta.download = alt.trim() ? alt : \"image\";\n\t\tdocument.body.appendChild(a);\n\t\ta.click();\n\t\ta.remove();\n\t};\n\n\tif (!isMounted || typeof document === \"undefined\") {\n\t\treturn null;\n\t}\n\n\treturn createPortal(\n\t\t<AnimatePresence>\n\t\t\t{src ? (\n\t\t\t\t<motion.div\n\t\t\t\t\tkey={src}\n\t\t\t\t\tclassName=\"payman-v2-lightbox\"\n\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\ttransition={{ duration: 0.18 }}\n\t\t\t\t\tonClick={onClose}\n\t\t\t\t\trole=\"presentation\"\n\t\t\t\t>\n\t\t\t\t\t<div className=\"payman-v2-lightbox-controls\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName=\"payman-v2-lightbox-btn\"\n\t\t\t\t\t\t\taria-label=\"Download\"\n\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\thandleDownload();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Download size={20} strokeWidth={2} />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName=\"payman-v2-lightbox-btn\"\n\t\t\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<X size={20} strokeWidth={2} />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"payman-v2-lightbox-content\"\n\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\t\taria-label={alt || \"Image preview\"}\n\t\t\t\t\t>\n\t\t\t\t\t\t{!isImageLoaded ? (\n\t\t\t\t\t\t\t<div className=\"payman-v2-lightbox-loading\">\n\t\t\t\t\t\t\t\t<Loader2\n\t\t\t\t\t\t\t\t\tsize={24}\n\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\taria-hidden={true}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tcolor: \"rgba(255, 255, 255, 0.8)\",\n\t\t\t\t\t\t\t\t\t\tanimation: \"payman-v2-spin 0.6s linear infinite\",\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<p className=\"payman-v2-lightbox-loading-text\">\n\t\t\t\t\t\t\t\t\tLoading image\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t<div className=\"payman-v2-lightbox-img-wrapper\">\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tinitial={{ scale: 0.92, opacity: 0 }}\n\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\tscale: isImageLoaded ? 1 : 0.92,\n\t\t\t\t\t\t\t\t\topacity: isImageLoaded ? 1 : 0,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\texit={{ scale: 0.92, opacity: 0 }}\n\t\t\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\theight: \"100%\",\n\t\t\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\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<img\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-lightbox-img\"\n\t\t\t\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\t\t\t\talt={alt}\n\t\t\t\t\t\t\t\t\tdraggable={false}\n\t\t\t\t\t\t\t\t\tonLoad={() => setIsImageLoaded(true)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</motion.div>\n\t\t\t) : null}\n\t\t</AnimatePresence>,\n\t\tdocument.body\n\t);\n}\n","import { useChat, useChatV2, useVoice } from \"@paymanai/payman-typescript-ask-sdk\";\nimport type { UseChatReturn, UseChatV2Return } from \"@paymanai/payman-typescript-ask-sdk\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from \"react\";\nimport { PaymanChatContext } from \"../../contexts\";\nimport type {\n\tChatCallbacks,\n\tChatConfig,\n\tMessageActionsConfig,\n\tMessageDisplay,\n\tPaymanChatProps,\n\tPaymanChatRef,\n\tUserActionState,\n} from \"../../types\";\nimport { cn } from \"../../utils\";\nimport {\n\tisFriendlyWorkflowError,\n\tgetConflictErrorMessage,\n} from \"../../utils/errorMessages\";\nimport { initSentryIfNeeded } from \"../../utils/sentry\";\nimport {\n\tcaptureSentryError,\n\tsubscribeToCfRay,\n\ttype ChatSessionContext,\n} from \"../../utils/sentryContext\";\nimport { ChatInput } from \"../ChatInput\";\nimport { MessageList } from \"../MessageList\";\nimport { ResetSessionConfirmModal } from \"../ResetSessionConfirmModal\";\nimport { UserActionModal } from \"../UserActionModal\";\nimport { MessageListV2 } from \"../v2/MessageListV2\";\nimport type { MessageListV2Handle } from \"../v2/MessageListV2\";\nimport { ChatInputV2 } from \"../v2/ChatInputV2\";\nimport type { ChatInputV2Handle } from \"../v2/ChatInputV2\";\nimport { ImageLightboxV2 } from \"../v2/ImageLightboxV2\";\nimport type { VerificationStatusV2 } from \"../v2/VerificationCardV2\";\n\nconst DEFAULT_USER_ACTION_STATE: UserActionState = {\n\trequest: null,\n\tresult: null,\n\tclearOtpTrigger: 0,\n};\n\nconst NOOP_ASYNC = async () => {};\n\nfunction useSentryChatCallbacks(\n\tcallbacks: ChatCallbacks | undefined,\n\tconfig: ChatConfig,\n): ChatCallbacks {\n\tconst sentryCtxRef = useRef<ChatSessionContext>({});\n\tconst callbacksRef = useRef(callbacks);\n\tcallbacksRef.current = callbacks;\n\n\tconst initialSessionId = config.initialSessionId;\n\tconst apiHeaders = config.api.headers;\n\n\tuseEffect(() => {\n\t\tsentryCtxRef.current.workflowName = config.workflowName;\n\t\tsentryCtxRef.current.sessionOwnerId = config.sessionParams?.id;\n\t\tif (initialSessionId) {\n\t\t\tsentryCtxRef.current.sessionId = initialSessionId;\n\t\t}\n\t\tif (apiHeaders) {\n\t\t\tsentryCtxRef.current.customerId =\n\t\t\t\tapiHeaders[\"x-paygent-wf-mcp-customer-id\"] ?? sentryCtxRef.current.customerId;\n\t\t\tsentryCtxRef.current.customerEmail =\n\t\t\t\tapiHeaders[\"x-paygent-wf-mcp-customer-email\"] ?? sentryCtxRef.current.customerEmail;\n\t\t}\n\t}, [\n\t\tconfig.workflowName,\n\t\tconfig.sessionParams?.id,\n\t\tinitialSessionId,\n\t\tapiHeaders,\n\t]);\n\n\tuseEffect(() => {\n\t\tconst endpoint = config.api.streamEndpoint || \"/api/workflows/ask/stream\";\n\t\treturn subscribeToCfRay(endpoint, (cfRay) => {\n\t\t\tsentryCtxRef.current.cfRay = cfRay;\n\t\t});\n\t}, [config.api.streamEndpoint]);\n\n\treturn useMemo<ChatCallbacks>(\n\t\t() => ({\n\t\t\tonMessageSent: (msg) => callbacksRef.current?.onMessageSent?.(msg),\n\t\t\tonStreamStart: () => callbacksRef.current?.onStreamStart?.(),\n\t\t\tonStreamComplete: (message: MessageDisplay) => {\n\t\t\t\tif (message.executionId) {\n\t\t\t\t\tsentryCtxRef.current.executionId = message.executionId;\n\t\t\t\t}\n\t\t\t\tif (message.sessionId) {\n\t\t\t\t\tsentryCtxRef.current.sessionId = message.sessionId;\n\t\t\t\t}\n\n\t\t\t\tconst content = message.content ?? \"\";\n\t\t\t\tconst looksLikeRawErr =\n\t\t\t\t\tcontent.length >= 10 &&\n\t\t\t\t\t(content.includes(\"errorType=\") || /failed:\\s*\\{/.test(content));\n\t\t\t\tconst completedEmpty =\n\t\t\t\t\t!message.isStreaming &&\n\t\t\t\t\t!message.isCancelled &&\n\t\t\t\t\tcontent.length === 0 &&\n\t\t\t\t\t(message.streamProgress === \"completed\" || message.streamProgress === \"error\");\n\t\t\t\tconst hasConflict = !!getConflictErrorMessage(message.errorDetails);\n\t\t\t\tconst hasFriendlyErr = isFriendlyWorkflowError(message.errorDetails);\n\n\t\t\t\tconst shouldCapture =\n\t\t\t\t\tmessage.isError ||\n\t\t\t\t\thasConflict ||\n\t\t\t\t\thasFriendlyErr ||\n\t\t\t\t\tlooksLikeRawErr ||\n\t\t\t\t\tcompletedEmpty;\n\n\t\t\t\tif (shouldCapture) {\n\t\t\t\t\tsentryCtxRef.current.route =\n\t\t\t\t\t\ttypeof window !== \"undefined\"\n\t\t\t\t\t\t\t? window.location.pathname\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\tcaptureSentryError(\n\t\t\t\t\t\t`Workflow error: ${message.errorDetails || content || \"Unknown error\"}`,\n\t\t\t\t\t\t{ ...sentryCtxRef.current },\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tcallbacksRef.current?.onStreamComplete?.(message);\n\t\t\t},\n\t\t\tonError: (error: Error) => {\n\t\t\t\tsentryCtxRef.current.route =\n\t\t\t\t\ttypeof window !== \"undefined\" ? window.location.pathname : undefined;\n\t\t\t\tcaptureSentryError(error, { ...sentryCtxRef.current });\n\t\t\t\tcallbacksRef.current?.onError?.(error);\n\t\t\t},\n\t\t\tonSessionIdChange: (sessionId: string) => {\n\t\t\t\tsentryCtxRef.current.sessionId = sessionId;\n\t\t\t\tcallbacksRef.current?.onSessionIdChange?.(sessionId);\n\t\t\t},\n\t\t\tonExecutionTraceClick: (data) =>\n\t\t\t\tcallbacksRef.current?.onExecutionTraceClick?.(data),\n\t\t\tonResetSession: () => callbacksRef.current?.onResetSession?.(),\n\t\t\tonUploadImageClick: () => callbacksRef.current?.onUploadImageClick?.(),\n\t\t\tonAttachFileClick: () => callbacksRef.current?.onAttachFileClick?.(),\n\t\t\tonUserActionRequired: (req) =>\n\t\t\t\tcallbacksRef.current?.onUserActionRequired?.(req),\n\t\t\tonUserActionEvent: (evType, msg) =>\n\t\t\t\tcallbacksRef.current?.onUserActionEvent?.(evType, msg),\n\t\t}),\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[],\n\t);\n}\n\ntype PaymanChatInnerProps = PaymanChatProps & { chat: UseChatReturn | UseChatV2Return };\n\nconst PaymanChatInner = forwardRef<PaymanChatRef, PaymanChatInnerProps>(function PaymanChatInner({\n\tconfig,\n\tcallbacks = {},\n\tclassName,\n\tstyle,\n\tchildren,\n\tonLoadMoreMessages,\n\tisLoadingMoreMessages = false,\n\thasMoreMessages = false,\n\tchat,\n}, ref) {\n\tconst [inputValue, setInputValue] = useState(\"\");\n\tconst prevInputValueRef = useRef(inputValue);\n\tconst [hasEverSentMessage, setHasEverSentMessage] = useState(false);\n\tconst [lightboxSrc, setLightboxSrc] = useState<string | null>(null);\n\tconst [lightboxAlt, setLightboxAlt] = useState(\"\");\n\tconst [editingMessageId, setEditingMessageId] = useState<string | null>(null);\n\tconst [isResetSessionConfirmOpen, setIsResetSessionConfirmOpen] =\n\t\tuseState(false);\n\tconst chatInputV2Ref = useRef<ChatInputV2Handle>(null);\n\tconst messageListV2Ref = useRef<MessageListV2Handle>(null);\n\tconst resetToEmptyStateRef = useRef(false);\n\n\tconst isV2 = config.uiVersion !== 1;\n\n\tuseEffect(() => {\n\t\tif (config.sentryDsn) {\n\t\t\tinitSentryIfNeeded(config.sentryDsn);\n\t\t}\n\t}, [config.sentryDsn]);\n\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// Track when messages first appear (for animation)\n\tuseEffect(() => {\n\t\tif (resetToEmptyStateRef.current) {\n\t\t\tif (messages.length === 0) {\n\t\t\t\tsetHasEverSentMessage(false);\n\t\t\t\tresetToEmptyStateRef.current = false;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (messages.length > 0 && !hasEverSentMessage) {\n\t\t\tsetHasEverSentMessage(true);\n\t\t}\n\t}, [messages.length, hasEverSentMessage]);\n\n\tuseEffect(() => {\n\t\tif (!editingMessageId) return;\n\t\tconst editingMessageStillExists = messages.some(\n\t\t\t(message) => message.id === editingMessageId && message.role === \"user\"\n\t\t);\n\t\tif (!editingMessageStillExists) {\n\t\t\tsetEditingMessageId(null);\n\t\t}\n\t}, [editingMessageId, messages]);\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\ttranscribedText,\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\tif (!isV2) {\n\t\t\t\t\tsetInputValue(text);\n\t\t\t\t}\n\t\t\t},\n\t\t\tonEnd: () => {},\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 {\n\t\tonExecutionTraceClick,\n\t\tonResetSession,\n\t\tonUploadImageClick,\n\t\tonAttachFileClick,\n\t} = callbacks;\n\n\tconst performResetSession = useCallback(() => {\n\t\tresetToEmptyStateRef.current = true;\n\t\tsetEditingMessageId(null);\n\t\tsetIsResetSessionConfirmOpen(false);\n\t\tsetInputValue(\"\");\n\t\tsetLightboxSrc(null);\n\t\tsetLightboxAlt(\"\");\n\t\tchatInputV2Ref.current?.setDraft(\"\");\n\t\tclearTranscript();\n\t\tif (isRecording) {\n\t\t\tstopRecording();\n\t\t}\n\t\tresetSession();\n\t\tonResetSession?.();\n\t}, [\n\t\tclearTranscript,\n\t\tisRecording,\n\t\tonResetSession,\n\t\tresetSession,\n\t\tstopRecording,\n\t]);\n\n\tconst requestResetSession = useCallback(() => {\n\t\tsetIsResetSessionConfirmOpen(true);\n\t}, []);\n\n\tconst closeResetSessionConfirm = useCallback(() => {\n\t\tsetIsResetSessionConfirmOpen(false);\n\t}, []);\n\n\t// Expose control methods via ref\n\tuseImperativeHandle(ref, () => ({\n\t\tresetSession: performResetSession,\n\t\tclearMessages,\n\t\tcancelStream,\n\t\tgetSessionId,\n\t\tgetMessages,\n\t}), [performResetSession, clearMessages, cancelStream, getSessionId, getMessages]);\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\temptyStateComponent,\n\t\tshowResetSession = false,\n\t\tshowAttachmentButton = true,\n\t\tshowUploadImageButton = true,\n\t\tshowAttachFileButton = true,\n\t\tmessageActions: messageActionsConfig,\n\t} = config;\n\n\tconst messageActions = useMemo<Required<MessageActionsConfig>>(\n\t\t() => ({\n\t\t\tuserMessageActions: {\n\t\t\t\tcopy: messageActionsConfig?.userMessageActions?.copy ?? true,\n\t\t\t\tedit: messageActionsConfig?.userMessageActions?.edit ?? false,\n\t\t\t\tretry: messageActionsConfig?.userMessageActions?.retry ?? false,\n\t\t\t},\n\t\t\tassistantMessageActions: {\n\t\t\t\tcopy: messageActionsConfig?.assistantMessageActions?.copy ?? true,\n\t\t\t\ttrace: messageActionsConfig?.assistantMessageActions?.trace ?? true,\n\t\t\t},\n\t\t}),\n\t\t[messageActionsConfig]\n\t);\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\tvoid sendMessage(inputValue.trim());\n\t\t\tsetInputValue(\"\");\n\t\t}\n\t};\n\n\tconst handleCancelRecording = () => {\n\t\tstopRecording();\n\t\tclearTranscript();\n\t\tsetInputValue(\"\");\n\t};\n\n\tconst handleConfirmRecording = () => {\n\t\tstopRecording();\n\t\t// Keep the transcribed text in the input for user to review/send\n\t};\n\n\tconst isInputDisabled =\n\t\tisWaitingForResponse || !isSessionParamsConfigured || disableInput;\n\tconst isV2InputDisabled = !isSessionParamsConfigured || disableInput;\n\n\tconst isEmpty = messages.length === 0;\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-background 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{children}\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\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-background 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{children}\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\t// --- V2 helpers ---\n\tconst handleImageClick = (src: string, alt: string) => {\n\t\tsetLightboxSrc(src);\n\t\tsetLightboxAlt(alt);\n\t};\n\n\tconst v2UserAction = useMemo(() => {\n\t\tif (!isUserActionSupported || !userActionState.request) return null;\n\t\tconst req = userActionState.request;\n\t\tlet status: VerificationStatusV2 = \"pending\";\n\t\tif (userActionState.result === \"approved\") status = \"approved\";\n\t\telse if (userActionState.result === \"rejected\") status = \"rejected\";\n\t\treturn {\n\t\t\tmessageId: `ua-${req.userActionId || Date.now()}`,\n\t\t\taction: {\n\t\t\t\ttype: req.userActionType || \"generic\",\n\t\t\t\tmessage: req.message || \"Verify this action\",\n\t\t\t\tamount: req.metadata?.amount,\n\t\t\t\tpayeeName: req.metadata?.payeeName,\n\t\t\t},\n\t\t\tstatus,\n\t\t};\n\t}, [isUserActionSupported, userActionState.request, userActionState.result]);\n\n\tconst hideV2SendDuringVerification =\n\t\tv2UserAction != null &&\n\t\tv2UserAction.status !== \"approved\" &&\n\t\tv2UserAction.status !== \"rejected\";\n\n\tconst handleV2Send = (text: string) => {\n\t\tif (isRecording) stopRecording();\n\t\tif (text.trim() && !disableInput && isSessionParamsConfigured) {\n\t\t\tsetEditingMessageId(null);\n\t\t\tvoid sendMessage(text.trim());\n\t\t}\n\t};\n\n\tconst handleVoicePress = useCallback(async () => {\n\t\tif (!voiceAvailable) return;\n\t\tif (isRecording) {\n\t\t\tstopRecording();\n\t\t\treturn;\n\t\t}\n\t\tclearTranscript();\n\t\tawait startRecording();\n\t}, [clearTranscript, isRecording, startRecording, stopRecording, voiceAvailable]);\n\n\tconst handleEditMessageDraft = useCallback((messageId: string) => {\n\t\tconst targetMessage = messages.find((message) => message.id === messageId);\n\t\tif (!targetMessage?.content.trim()) return;\n\t\tsetEditingMessageId(messageId);\n\t\tchatInputV2Ref.current?.setDraft(targetMessage.content);\n\t\trequestAnimationFrame(() => {\n\t\t\tmessageListV2Ref.current?.scrollToBottom(\"smooth\");\n\t\t});\n\t}, [messages]);\n\n\tconst handleRetryUserMessage = useCallback((messageId: string) => {\n\t\tif (isWaitingForResponse) return;\n\t\tconst targetMessage = messages.find(\n\t\t\t(message) => message.id === messageId && message.role === \"user\"\n\t\t);\n\t\tif (!targetMessage?.content.trim()) return;\n\t\tvoid sendMessage(targetMessage.content.trim());\n\t\tconst bump = () => messageListV2Ref.current?.scrollToBottom(\"instant\");\n\t\trequestAnimationFrame(() => {\n\t\t\tbump();\n\t\t\tqueueMicrotask(() => {\n\t\t\t\twindow.setTimeout(bump, 120);\n\t\t\t});\n\t\t});\n\t}, [isWaitingForResponse, messages, sendMessage]);\n\n\tconst handleClearEditing = useCallback(() => {\n\t\tsetEditingMessageId(null);\n\t}, []);\n\n\t// --- V2 Render ---\n\tif (isV2) {\n\t\treturn (\n\t\t\t<PaymanChatContext.Provider value={contextValue}>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\"payman-v2-root\", className)}\n\t\t\t\t\tstyle={style}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\n\t\t\t\t\t{isChatDisabled ? (\n\t\t\t\t\t\tdisabledComponent || (\n\t\t\t\t\t\t\t<div style={{ flex: 1, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", padding: \"1rem\" }}>\n\t\t\t\t\t\t\t\t<div style={{ textAlign: \"center\", color: \"var(--payman-v2-text-3)\", fontSize: \"0.875rem\" }}>\n\t\t\t\t\t\t\t\t\tChat is currently disabled\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) : (\n\t\t\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t\t\t{isEmpty && !hasEverSentMessage ? (\n\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\tkey=\"v2-empty\"\n\t\t\t\t\t\t\t\t\tinitial={{ opacity: 1 }}\n\t\t\t\t\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-chat-layout\"\n\t\t\t\t\t\t\t\t\tstyle={{ justifyContent: \"center\", alignItems: \"center\" }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\", justifyContent: \"center\", flex: 1, width: \"100%\" }}>\n\t\t\t\t\t\t\t\t\t\t<MessageList\n\t\t\t\t\t\t\t\t\t\t\tmessages={messages}\n\t\t\t\t\t\t\t\t\t\t\tisLoading={false}\n\t\t\t\t\t\t\t\t\t\t\temptyStateText={emptyStateText}\n\t\t\t\t\t\t\t\t\t\t\tshowEmptyStateIcon={showEmptyStateIcon}\n\t\t\t\t\t\t\t\t\t\t\temptyStateComponent={emptyStateComponent}\n\t\t\t\t\t\t\t\t\t\t\tlayout={layout}\n\t\t\t\t\t\t\t\t\t\t\tshowTimestamps={showTimestamps}\n\t\t\t\t\t\t\t\t\t\t\tstage={config.stage || \"DEV\"}\n\t\t\t\t\t\t\t\t\t\t\tanimated={animated}\n\t\t\t\t\t\t\t\t\t\t\tshowAgentName={showAgentName}\n\t\t\t\t\t\t\t\t\t\t\tagentName={agentName}\n\t\t\t\t\t\t\t\t\t\t\tshowAvatars={showAvatars}\n\t\t\t\t\t\t\t\t\t\t\tshowUserAvatar={showUserAvatar}\n\t\t\t\t\t\t\t\t\t\t\tshowAssistantAvatar={showAssistantAvatar}\n\t\t\t\t\t\t\t\t\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\t\t\t\t\t\t\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\t\t\t\t\t\t\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\t\t\t\t\t\t\t\t\tcompletedStepsText={completedStepsText}\n\t\t\t\t\t\t\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t\t\t\t\t\t\t\tonLoadMoreMessages={onLoadMoreMessages}\n\t\t\t\t\t\t\t\t\t\t\tisLoadingMoreMessages={isLoadingMoreMessages}\n\t\t\t\t\t\t\t\t\t\t\thasMoreMessages={hasMoreMessages}\n\t\t\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 12 }}\n\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\t\t\t\t\ttransition={{ delay: 0.2, duration: 0.4, ease: [0.25, 0.46, 0.45, 0.94] }}\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ width: \"100%\" }}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{hasAskPermission && (\n\t\t\t\t\t\t\t\t\t\t\t\t<ChatInputV2\n\t\t\t\t\t\t\t\t\t\t\t\t\tref={chatInputV2Ref}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonSend={handleV2Send}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonCancel={cancelStream}\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isV2InputDisabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\tisStreaming={isWaitingForResponse}\n\t\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={isRecording ? \"Listening...\" : placeholder}\n\t\t\t\t\t\t\t\t\t\t\t\t\tenableVoice={config.enableVoice === true}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttranscribedText={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconfig.enableVoice === true ? transcribedText : \"\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tvoiceAvailable={config.enableVoice === true && voiceAvailable}\n\t\t\t\t\t\t\t\t\t\t\t\t\tisRecording={isRecording}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonVoicePress={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconfig.enableVoice === true\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? handleVoicePress\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonCancelRecording={handleCancelRecording}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonConfirmRecording={handleConfirmRecording}\n\t\t\t\t\t\t\t\t\t\t\t\t\tshowResetSession={showResetSession}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonResetSession={requestResetSession}\n\t\t\t\t\t\t\t\t\t\t\t\t\tshowAttachmentButton={showAttachmentButton}\n\t\t\t\t\t\t\t\t\t\t\t\t\tshowUploadImageButton={showUploadImageButton}\n\t\t\t\t\t\t\t\t\t\t\t\t\tshowAttachFileButton={showAttachFileButton}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonUploadImageClick={onUploadImageClick}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonAttachFileClick={onAttachFileClick}\n\t\t\t\t\t\t\t\t\t\t\t\t\teditingMessageId={editingMessageId}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClearEditing={handleClearEditing}\n\t\t\t\t\t\t\t\t\t\t\t\t\thideSendButton={hideV2SendDuringVerification}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\tkey=\"v2-chat\"\n\t\t\t\t\t\t\t\t\tinitial={hasEverSentMessage ? { opacity: 0 } : false}\n\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-v2-chat-layout\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<MessageListV2\n\t\t\t\t\t\t\t\t\t\tref={messageListV2Ref}\n\t\t\t\t\t\t\t\t\t\tmessages={messages}\n\t\t\t\t\t\t\t\t\t\tisStreaming={isWaitingForResponse}\n\t\t\t\t\t\t\t\t\t\tonEditUserMessage={handleEditMessageDraft}\n\t\t\t\t\t\t\t\t\t\tonRetryUserMessage={handleRetryUserMessage}\n\t\t\t\t\t\t\t\t\t\tonImageClick={handleImageClick}\n\t\t\t\t\t\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t\t\t\t\t\t\tmessageActions={messageActions}\n\t\t\t\t\t\t\t\t\t\tretryDisabled={isWaitingForResponse}\n\t\t\t\t\t\t\t\t\t\tuserAction={v2UserAction}\n\t\t\t\t\t\t\t\t\t\tonApproveAction={\n\t\t\t\t\t\t\t\t\t\t\tisUserActionSupported\n\t\t\t\t\t\t\t\t\t\t\t\t? async (_msgId: string, otp: string) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tawait approveUserAction(otp);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tonRejectAction={\n\t\t\t\t\t\t\t\t\t\t\tisUserActionSupported\n\t\t\t\t\t\t\t\t\t\t\t\t? async () => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tawait rejectUserAction();\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tonResendAction={\n\t\t\t\t\t\t\t\t\t\t\tisUserActionSupported\n\t\t\t\t\t\t\t\t\t\t\t\t? async () => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tawait resendOtp();\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t: undefined\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{hasAskPermission && (\n\t\t\t\t\t\t\t\t\t\t<ChatInputV2\n\t\t\t\t\t\t\t\t\t\t\tref={chatInputV2Ref}\n\t\t\t\t\t\t\t\t\t\t\tonSend={handleV2Send}\n\t\t\t\t\t\t\t\t\t\t\tonCancel={cancelStream}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={isV2InputDisabled}\n\t\t\t\t\t\t\t\t\t\t\tisStreaming={isWaitingForResponse}\n\t\t\t\t\t\t\t\t\t\t\tplaceholder={isRecording ? \"Listening...\" : placeholder}\n\t\t\t\t\t\t\t\t\t\t\tenableVoice={config.enableVoice === true}\n\t\t\t\t\t\t\t\t\t\t\ttranscribedText={\n\t\t\t\t\t\t\t\t\t\t\t\tconfig.enableVoice === true ? transcribedText : \"\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tvoiceAvailable={config.enableVoice === true && voiceAvailable}\n\t\t\t\t\t\t\t\t\t\t\tisRecording={isRecording}\n\t\t\t\t\t\t\t\t\t\t\tonVoicePress={\n\t\t\t\t\t\t\t\t\t\t\t\tconfig.enableVoice === true\n\t\t\t\t\t\t\t\t\t\t\t\t\t? handleVoicePress\n\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tonCancelRecording={handleCancelRecording}\n\t\t\t\t\t\t\t\t\t\t\tonConfirmRecording={handleConfirmRecording}\n\t\t\t\t\t\t\t\t\t\t\tshowResetSession={showResetSession}\n\t\t\t\t\t\t\t\t\t\t\tonResetSession={requestResetSession}\n\t\t\t\t\t\t\t\t\t\t\tshowAttachmentButton={showAttachmentButton}\n\t\t\t\t\t\t\t\t\t\t\tshowUploadImageButton={showUploadImageButton}\n\t\t\t\t\t\t\t\t\t\t\tshowAttachFileButton={showAttachFileButton}\n\t\t\t\t\t\t\t\t\t\t\tonUploadImageClick={onUploadImageClick}\n\t\t\t\t\t\t\t\t\t\t\tonAttachFileClick={onAttachFileClick}\n\t\t\t\t\t\t\t\t\t\t\teditingMessageId={editingMessageId}\n\t\t\t\t\t\t\t\t\t\t\tonClearEditing={handleClearEditing}\n\t\t\t\t\t\t\t\t\t\t\thideSendButton={hideV2SendDuringVerification}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<ImageLightboxV2\n\t\t\t\t\t\tsrc={lightboxSrc}\n\t\t\t\t\t\talt={lightboxAlt}\n\t\t\t\t\t\tonClose={() => setLightboxSrc(null)}\n\t\t\t\t\t/>\n\t\t\t\t\t<ResetSessionConfirmModal\n\t\t\t\t\t\tisOpen={isResetSessionConfirmOpen}\n\t\t\t\t\t\tonClose={closeResetSessionConfirm}\n\t\t\t\t\t\tonConfirm={performResetSession}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</PaymanChatContext.Provider>\n\t\t);\n\t}\n\n\t// --- V1 Render (original) ---\n\tconst inputElement = hasAskPermission && (\n\t\t<ChatInput\n\t\t\tvalue={inputValue}\n\t\t\tonChange={setInputValue}\n\t\t\tonSend={handleSend}\n\t\t\tonPause={cancelStream}\n\t\t\tdisabled={isInputDisabled}\n\t\t\tplaceholder={isRecording ? \"Listening...\" : placeholder}\n\t\t\tisWaitingForResponse={isWaitingForResponse}\n\t\t\thasSelectedSession={true}\n\t\t\tisSessionParamsConfigured={isSessionParamsConfigured}\n\t\t\tenableVoice={config.enableVoice === true}\n\t\t\tonVoicePress={config.enableVoice === true ? handleVoicePress : undefined}\n\t\t\tvoiceAvailable={config.enableVoice === true && voiceAvailable}\n\t\t\tisRecording={isRecording}\n\t\t\ttranscribedText={inputValue}\n\t\t\tonCancelRecording={handleCancelRecording}\n\t\t\tonConfirmRecording={handleConfirmRecording}\n\t\t\tinputStyle={inputStyle}\n\t\t\tlayout={layout}\n\t\t\tshowResetSession={showResetSession}\n\t\t\tonResetSession={requestResetSession}\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-background 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{children}\n\n\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t{isEmpty && !hasEverSentMessage ? (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tkey=\"empty-centered\"\n\t\t\t\t\t\t\tinitial={{ opacity: 1 }}\n\t\t\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\t\t\t\tclassName=\"payman-empty-centered-layout\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"payman-empty-centered-inner\">\n\t\t\t\t\t\t\t\t<MessageList\n\t\t\t\t\t\t\t\t\tmessages={messages}\n\t\t\t\t\t\t\t\t\tisLoading={false}\n\t\t\t\t\t\t\t\t\temptyStateText={emptyStateText}\n\t\t\t\t\t\t\t\t\tshowEmptyStateIcon={showEmptyStateIcon}\n\t\t\t\t\t\t\t\t\temptyStateComponent={emptyStateComponent}\n\t\t\t\t\t\t\t\t\tlayout={layout}\n\t\t\t\t\t\t\t\t\tshowTimestamps={showTimestamps}\n\t\t\t\t\t\t\t\t\tstage={config.stage || \"DEV\"}\n\t\t\t\t\t\t\t\t\tanimated={animated}\n\t\t\t\t\t\t\t\t\tshowAgentName={showAgentName}\n\t\t\t\t\t\t\t\t\tagentName={agentName}\n\t\t\t\t\t\t\t\t\tshowAvatars={showAvatars}\n\t\t\t\t\t\t\t\t\tshowUserAvatar={showUserAvatar}\n\t\t\t\t\t\t\t\t\tshowAssistantAvatar={showAssistantAvatar}\n\t\t\t\t\t\t\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\t\t\t\t\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\t\t\t\t\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\t\t\t\t\t\t\tcompletedStepsText={completedStepsText}\n\t\t\t\t\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t\t\t\t\t\tonLoadMoreMessages={onLoadMoreMessages}\n\t\t\t\t\t\t\t\t\tisLoadingMoreMessages={isLoadingMoreMessages}\n\t\t\t\t\t\t\t\t\thasMoreMessages={hasMoreMessages}\n\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 12 }}\n\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\t\t\ttransition={{ delay: 0.2, duration: 0.4, ease: [0.25, 0.46, 0.45, 0.94] }}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-empty-centered-input\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{inputElement}\n\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tkey=\"chat-layout\"\n\t\t\t\t\t\t\tinitial={hasEverSentMessage ? { opacity: 0 } : false}\n\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\t\t\t\tclassName=\"flex flex-col flex-1 min-h-0\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<MessageList\n\t\t\t\t\t\t\t\tmessages={messages}\n\t\t\t\t\t\t\t\tisLoading={false}\n\t\t\t\t\t\t\t\temptyStateText={emptyStateText}\n\t\t\t\t\t\t\t\tshowEmptyStateIcon={showEmptyStateIcon}\n\t\t\t\t\t\t\t\temptyStateComponent={emptyStateComponent}\n\t\t\t\t\t\t\t\tlayout={layout}\n\t\t\t\t\t\t\t\tshowTimestamps={showTimestamps}\n\t\t\t\t\t\t\t\tstage={config.stage || \"DEV\"}\n\t\t\t\t\t\t\t\tanimated={animated}\n\t\t\t\t\t\t\t\tshowAgentName={showAgentName}\n\t\t\t\t\t\t\t\tagentName={agentName}\n\t\t\t\t\t\t\t\tshowAvatars={showAvatars}\n\t\t\t\t\t\t\t\tshowUserAvatar={showUserAvatar}\n\t\t\t\t\t\t\t\tshowAssistantAvatar={showAssistantAvatar}\n\t\t\t\t\t\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\t\t\t\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\t\t\t\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\t\t\t\t\t\tcompletedStepsText={completedStepsText}\n\t\t\t\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t\t\t\t\tonLoadMoreMessages={onLoadMoreMessages}\n\t\t\t\t\t\t\t\tisLoadingMoreMessages={isLoadingMoreMessages}\n\t\t\t\t\t\t\t\thasMoreMessages={hasMoreMessages}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{inputElement}\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\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\t<ResetSessionConfirmModal\n\t\t\t\t\tisOpen={isResetSessionConfirmOpen}\n\t\t\t\t\tonClose={closeResetSessionConfirm}\n\t\t\t\t\tonConfirm={performResetSession}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</PaymanChatContext.Provider>\n\t);\n});\n\n// V1 shell — calls useChat, delegates to PaymanChatInner\nconst PaymanChatV1Shell = forwardRef<PaymanChatRef, PaymanChatProps>(\n\tfunction PaymanChatV1Shell(props, ref) {\n\t\tconst mergedCallbacks = useSentryChatCallbacks(props.callbacks, props.config);\n\t\tconst chat = useChat(props.config, mergedCallbacks);\n\t\treturn <PaymanChatInner {...props} chat={chat} ref={ref} />;\n\t},\n);\n\n// V2 shell — calls useChatV2, delegates to PaymanChatInner\nconst PaymanChatV2Shell = forwardRef<PaymanChatRef, PaymanChatProps>(\n\tfunction PaymanChatV2Shell(props, ref) {\n\t\tconst mergedCallbacks = useSentryChatCallbacks(props.callbacks, props.config);\n\t\tconst chat = useChatV2(props.config, mergedCallbacks);\n\t\treturn <PaymanChatInner {...props} chat={chat} ref={ref} />;\n\t},\n);\n\n// Outer dispatcher — picks v1 or v2 shell based on config.uiVersion\nexport const PaymanChat = forwardRef<PaymanChatRef, PaymanChatProps>(\n\tfunction PaymanChat(props, ref) {\n\t\tif (props.config.uiVersion !== 1) {\n\t\t\treturn <PaymanChatV2Shell {...props} ref={ref} />;\n\t\t}\n\t\treturn <PaymanChatV1Shell {...props} ref={ref} />;\n\t},\n);\n"]}