@paymanai/payman-ask-sdk 1.2.22 → 1.2.24

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.
@@ -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/OtpInput/index.tsx","../src/components/UserActionModal/constants.ts","../src/components/UserActionModal/utils.ts","../src/components/UserActionModal/index.tsx","../src/components/PaymanChat/index.tsx"],"names":["useState","useEffect","jsx","AnimatePresence","jsxs","motion","Loader2","useRef","useMemo","Check","X","useCallback","Fragment","PaymanChat","isEmpty"],"mappings":"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","file":"index.mjs","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { MessageDisplay } from \"../types\";\n\nexport interface PaymanChatContextValue {\n\t/**\n\t * Clear all messages and reset the chat\n\t */\n\tresetSession: () => void;\n\n\t/**\n\t * Clear all messages without resetting session ID\n\t */\n\tclearMessages: () => void;\n\n\t/**\n\t * 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 { 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 { useChat, useVoice } from \"@paymanai/payman-typescript-ask-sdk\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from \"react\";\nimport { PaymanChatContext } from \"../../contexts\";\nimport type { PaymanChatProps, PaymanChatRef, UserActionState } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { initSentryIfNeeded } from \"../../utils/sentry\";\nimport { ChatInput } from \"../ChatInput\";\nimport { MessageList } from \"../MessageList\";\nimport { UserActionModal } from \"../UserActionModal\";\n\nconst DEFAULT_USER_ACTION_STATE: UserActionState = {\n\trequest: null,\n\tresult: null,\n\tclearOtpTrigger: 0,\n};\n\nconst NOOP_ASYNC = async () => {};\n\nexport const PaymanChat = forwardRef<PaymanChatRef, PaymanChatProps>(function PaymanChat({\n\tconfig,\n\tcallbacks = {},\n\tclassName,\n\tstyle,\n\tchildren,\n\tonLoadMoreMessages,\n\tisLoadingMoreMessages = false,\n\thasMoreMessages = false,\n}, ref) {\n\tconst [inputValue, setInputValue] = useState(\"\");\n\tconst prevInputValueRef = useRef(inputValue);\n\tconst [hasEverSentMessage, setHasEverSentMessage] = useState(false);\n\n\t// Initialise Sentry as early as possible using the DSN from config\n\tuseEffect(() => {\n\t\tif (config.sentryDsn) {\n\t\t\tinitSentryIfNeeded(config.sentryDsn);\n\t\t}\n\t}, [config.sentryDsn]);\n\n\t// Use the chat hook - it handles everything internally\n\tconst chat = useChat(config, callbacks);\n\tconst {\n\t\tmessages,\n\t\tsendMessage,\n\t\tisWaitingForResponse,\n\t\tresetSession,\n\t\tclearMessages,\n\t\tprependMessages,\n\t\tcancelStream,\n\t\tgetSessionId,\n\t\tgetMessages,\n\t} = chat;\n\n\t// Track when messages first appear (for animation)\n\tuseEffect(() => {\n\t\tif (messages.length > 0 && !hasEverSentMessage) {\n\t\t\tsetHasEverSentMessage(true);\n\t\t}\n\t}, [messages.length, hasEverSentMessage]);\n\n\t// Keep OTP features backward-safe if hook returns a non-OTP shape.\n\tconst userActionState = chat.userActionState ?? DEFAULT_USER_ACTION_STATE;\n\tconst approveUserAction = chat.approveUserAction ?? NOOP_ASYNC;\n\tconst rejectUserAction = chat.rejectUserAction ?? NOOP_ASYNC;\n\tconst resendOtp = chat.resendOtp ?? NOOP_ASYNC;\n\tconst isUserActionSupported =\n\t\ttypeof chat.approveUserAction === \"function\" &&\n\t\ttypeof chat.rejectUserAction === \"function\" &&\n\t\ttypeof chat.resendOtp === \"function\";\n\n\t// Voice support\n\tconst {\n\t\tisAvailable: voiceAvailable,\n\t\tisRecording,\n\t\tstartRecording,\n\t\tstopRecording,\n\t\tclearTranscript,\n\t} = useVoice(\n\t\t{\n\t\t\tlang: config.voiceLang || \"en-US\",\n\t\t\tinterimResults: config.voiceInterimResults !== false,\n\t\t\tcontinuous: config.voiceContinuous !== false,\n\t\t},\n\t\t{\n\t\t\tonResult: (text) => {\n\t\t\t\tsetInputValue(text);\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 { onExecutionTraceClick, onResetSession } = callbacks;\n\n\t// Expose control methods via ref\n\tuseImperativeHandle(ref, () => ({\n\t\tresetSession: () => {\n\t\t\tresetSession();\n\t\t\tonResetSession?.();\n\t\t},\n\t\tclearMessages,\n\t\tcancelStream,\n\t\tgetSessionId,\n\t\tgetMessages,\n\t}), [resetSession, clearMessages, cancelStream, getSessionId, getMessages, onResetSession]);\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} = config;\n\n\t// Check if session params are configured\n\tconst isSessionParamsConfigured = useMemo(() => {\n\t\tif (!sessionParams) return false;\n\t\treturn !!(sessionParams.id?.trim() && sessionParams.name?.trim());\n\t}, [sessionParams?.id, sessionParams?.name]);\n\n\t// Reset voice recognition only when user clears the input (not on initial empty state)\n\tuseEffect(() => {\n\t\tconst wasEmpty = prevInputValueRef.current.trim() === \"\";\n\t\tconst isEmpty = inputValue.trim() === \"\";\n\t\tprevInputValueRef.current = inputValue;\n\t\tif (!wasEmpty && isEmpty) {\n\t\t\tclearTranscript();\n\t\t\tif (isRecording) {\n\t\t\t\tstopRecording();\n\t\t\t}\n\t\t}\n\t}, [inputValue, clearTranscript, isRecording, stopRecording]);\n\n\tconst handleSend = () => {\n\t\tif (isRecording) {\n\t\t\tstopRecording();\n\t\t}\n\t\tif (inputValue.trim() && !disableInput && isSessionParamsConfigured) {\n\t\t\tsendMessage(inputValue.trim());\n\t\t\tsetInputValue(\"\");\n\t\t}\n\t};\n\n\tconst 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\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\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={isRecording ? stopRecording : startRecording}\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={() => {\n\t\t\t\tresetSession();\n\t\t\t\tonResetSession?.();\n\t\t\t}}\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/* ---- Centered empty state with input ---- */\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{/* Empty state content */}\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{/* Input centered below empty state */}\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/* ---- Normal chat layout ---- */\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{/* User Action (OTP) Modal */}\n\t\t\t\t<UserActionModal\n\t\t\t\t\tisOpen={isUserActionSupported && userActionState.request !== null}\n\t\t\t\t\tuserActionRequest={userActionState.request}\n\t\t\t\t\tonApprove={approveUserAction}\n\t\t\t\t\tonReject={rejectUserAction}\n\t\t\t\t\tonResend={resendOtp}\n\t\t\t\t\tclearOtpTrigger={userActionState.clearOtpTrigger}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</PaymanChatContext.Provider>\n\t);\n});\n"]}
1
+ {"version":3,"sources":["../src/contexts/PaymanChatContext.tsx","../src/utils/cn.ts","../src/utils/formatDate.ts","../src/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":["useState","frameStyle","useEffect","jsx","AnimatePresence","jsxs","motion","Loader2","useRef","useMemo","Check","X","useCallback","Fragment","createPortal","RotateCcw","RAG_IMAGE_PATH_REGEX","isUnresolvedRagImageSource","ReactMarkdown","remarkGfm","ChevronRight","AlertCircle","Copy","DEFAULT_MAX_LENGTH","MAX_SUPPORTED_LENGTH","AUTO_FOCUS_DELAY_MS","SCROLL_THRESHOLD","MessageListV2","ArrowDown","forwardRef","ChatInputV2","useImperativeHandle","Pencil","Mic","ArrowUp","PaymanChatInner","isEmpty","PaymanChatV1Shell","PaymanChatV2Shell","PaymanChat"],"mappings":"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","file":"index.mjs","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { MessageDisplay } from \"../types\";\n\nexport interface PaymanChatContextValue {\n\t/**\n\t * Clear all messages and reset the chat\n\t */\n\tresetSession: () => void;\n\n\t/**\n\t * Clear all messages without resetting session ID\n\t */\n\tclearMessages: () => void;\n\n\t/**\n\t * 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"]}