@paymanai/payman-ask-sdk 1.2.21 → 1.2.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/contexts/PaymanChatContext.tsx","../src/utils/cn.ts","../src/utils/formatDate.ts","../src/utils/sentry.ts","../src/components/ChatInput/index.tsx","../src/components/AgentMessage/ImageLightbox.tsx","../src/components/AgentMessage/MarkdownImage.tsx","../src/components/AgentMessage/markdownComponents.tsx","../src/utils/errorMessages.ts","../src/components/AgentMessage/index.tsx","../src/components/UserMessage/index.tsx","../src/components/MessageRow/index.tsx","../src/components/MessageRowSkeleton/index.tsx","../src/components/MessageList/index.tsx","../src/components/OtpInput/index.tsx","../src/components/UserActionModal/constants.ts","../src/components/UserActionModal/utils.ts","../src/components/UserActionModal/index.tsx","../src/components/PaymanChat/index.tsx"],"names":["createContext","useContext","twMerge","clsx","Sentry","useRef","useState","useEffect","useCallback","jsx","jsxs","AnimatePresence","motion","Check","RotateCcw","Mic","ArrowUp","createPortal","X","Loader2","useMemo","Fragment","ChevronDown","Clock","ChevronRight","Sparkles","ReactMarkdown","remarkGfm","Binoculars","User","useLayoutEffect","ArrowDown","forwardRef","PaymanChat","useChat","useVoice","useImperativeHandle","isEmpty"],"mappings":"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","file":"index.js","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { MessageDisplay } from \"../types\";\n\nexport interface PaymanChatContextValue {\n\t/**\n\t * Clear all messages and reset the chat\n\t */\n\tresetSession: () => void;\n\n\t/**\n\t * Clear all messages without resetting session ID\n\t */\n\tclearMessages: () => void;\n\n\t/**\n\t * Prepend older messages to the top of the list (e.g. from history pagination)\n\t */\n\tprependMessages: (messages: MessageDisplay[]) => void;\n\n\t/**\n\t * Cancel current streaming operation\n\t */\n\tcancelStream: () => void;\n\n\t/**\n\t * Get current session ID\n\t */\n\tgetSessionId: () => string | undefined;\n\n\t/**\n\t * Get all messages\n\t */\n\tgetMessages: () => MessageDisplay[];\n\n\t/**\n\t * Check if currently waiting for response\n\t */\n\tisWaitingForResponse: boolean;\n}\n\nexport const PaymanChatContext = createContext<\n\tPaymanChatContextValue | undefined\n>(undefined);\n\n/**\n * Hook to access PaymanChat controls from parent components\n * \n * @example\n * ```tsx\n * function MyComponent() {\n * const chat = usePaymanChat();\n * \n * return (\n * <>\n * <button onClick={chat.resetSession}>Reset</button>\n * <button onClick={chat.clearMessages}>Clear</button>\n * </>\n * );\n * }\n * ```\n */\nexport function usePaymanChat(): PaymanChatContextValue {\n\tconst context = useContext(PaymanChatContext);\n\tif (!context) {\n\t\tthrow new Error(\"usePaymanChat must be used within a PaymanChat component\");\n\t}\n\treturn context;\n}\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Utility function to merge Tailwind CSS classes\n */\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","/**\n * Format a timestamp to a readable date/time string\n */\nexport function formatDate(timestamp: string | Date): string {\n\tconst date = typeof timestamp === \"string\" ? new Date(timestamp) : timestamp;\n\n\tconst now = new Date();\n\tconst diffMs = now.getTime() - date.getTime();\n\tconst diffMins = Math.floor(diffMs / 60000);\n\tconst diffHours = Math.floor(diffMs / 3600000);\n\tconst diffDays = Math.floor(diffMs / 86400000);\n\n\t// Less than a minute\n\tif (diffMins < 1) {\n\t\treturn \"Just now\";\n\t}\n\n\t// Less than an hour\n\tif (diffMins < 60) {\n\t\treturn `${diffMins}m ago`;\n\t}\n\n\t// Less than a day\n\tif (diffHours < 24) {\n\t\treturn `${diffHours}h ago`;\n\t}\n\n\t// Less than a week\n\tif (diffDays < 7) {\n\t\treturn `${diffDays}d ago`;\n\t}\n\n\t// Format as date\n\treturn date.toLocaleDateString(\"en-US\", {\n\t\tmonth: \"short\",\n\t\tday: \"numeric\",\n\t\tyear: date.getFullYear() !== now.getFullYear() ? \"numeric\" : undefined,\n\t});\n}\n\nexport function formatElapsedTime(ms?: number): string {\n\tif (!ms) return \"\";\n\tif (ms < 1000) return `${ms}ms`;\n\treturn `${(ms / 1000).toFixed(1)}s`;\n}\n","import * as Sentry from \"@sentry/react\";\n\n/**\n * Initialise Sentry inside the SDK.\n * Only runs when a DSN is provided and Sentry has not already been initialised\n * by the host application, so it is safe to call even if the host also calls\n * Sentry.init().\n */\nexport function initSentryIfNeeded(dsn: string): void {\n\tif (!dsn) return;\n\n\t// getClient() returns undefined when Sentry has not been initialised yet\n\tif (Sentry.getClient()) return;\n\n\tSentry.init({\n\t\tdsn,\n\t\tsendDefaultPii: true,\n\t\tinitialScope: {\n\t\t\ttags: { source: \"payman-ask-sdk\" },\n\t\t},\n\t});\n}\n","import { AnimatePresence, motion } from \"framer-motion\";\nimport { ArrowUp, Check, Mic, RotateCcw } from \"lucide-react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { ChatInputProps } from \"../../types\";\nimport { cn } from \"../../utils\";\n\nconst AI_DISCLAIMER_TEXT =\n\t\"AI can make mistakes. Please double-check responses.\";\n\nexport function ChatInput({\n\tvalue,\n\tonChange,\n\tonSend,\n\tonPause,\n\tdisabled = false,\n\tplaceholder = \"Type your message...\",\n\tisWaitingForResponse = false,\n\thasSelectedSession = true,\n\tisSessionParamsConfigured = true,\n\tonClick,\n\tclassName,\n\tenableVoice = false,\n\tonVoicePress,\n\tvoiceAvailable = false,\n\tisRecording = false,\n\ttranscribedText = \"\",\n\tonCancelRecording,\n\tonConfirmRecording,\n\tshowResetSession = false,\n\tonResetSession,\n}: ChatInputProps) {\n\tconst textareaRef = useRef<HTMLTextAreaElement>(null);\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst prevWaitingRef = useRef(isWaitingForResponse);\n\tconst [recordingSeconds, setRecordingSeconds] = useState(0);\n\tconst recordingTimerRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\tconst [isFocused, setIsFocused] = useState(false);\n\n\t// Auto-resize textarea\n\tuseEffect(() => {\n\t\tif (textareaRef.current) {\n\t\t\ttextareaRef.current.style.height = \"auto\";\n\t\t\tconst scrollHeight = textareaRef.current.scrollHeight;\n\t\t\tconst maxHeight = 160;\n\t\t\ttextareaRef.current.style.height = `${Math.min(scrollHeight, maxHeight)}px`;\n\t\t}\n\t}, [value]);\n\n\t// Auto-focus on mount\n\tuseEffect(() => {\n\t\trequestAnimationFrame(() => {\n\t\t\ttextareaRef.current?.focus();\n\t\t});\n\t}, []);\n\n\t// Re-focus after response completes\n\tuseEffect(() => {\n\t\tconst wasWaiting = prevWaitingRef.current;\n\t\tprevWaitingRef.current = isWaitingForResponse;\n\t\tif (wasWaiting && !isWaitingForResponse) {\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\ttextareaRef.current?.focus();\n\t\t\t\tcontainerRef.current?.scrollIntoView({ block: \"end\", behavior: \"smooth\" });\n\t\t\t});\n\t\t}\n\t}, [isWaitingForResponse]);\n\n\t// Recording timer\n\tuseEffect(() => {\n\t\tif (isRecording) {\n\t\t\tsetRecordingSeconds(0);\n\t\t\trecordingTimerRef.current = setInterval(() => {\n\t\t\t\tsetRecordingSeconds((s) => s + 1);\n\t\t\t}, 1000);\n\t\t} else {\n\t\t\tif (recordingTimerRef.current) {\n\t\t\t\tclearInterval(recordingTimerRef.current);\n\t\t\t\trecordingTimerRef.current = null;\n\t\t\t}\n\t\t\tsetRecordingSeconds(0);\n\t\t}\n\t\treturn () => {\n\t\t\tif (recordingTimerRef.current) {\n\t\t\t\tclearInterval(recordingTimerRef.current);\n\t\t\t}\n\t\t};\n\t}, [isRecording]);\n\n\tconst handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n\t\tif (e.key === \"Enter\" && !e.shiftKey) {\n\t\t\te.preventDefault();\n\t\t\tif (value.trim() && !isInputDisabled) onSend();\n\t\t}\n\t};\n\n\tconst isInputDisabled = disabled || isWaitingForResponse;\n\tconst showVoiceButton = enableVoice && onVoicePress != null;\n\tconst isVoiceButtonDisabled =\n\t\tisWaitingForResponse || !voiceAvailable || !isSessionParamsConfigured;\n\tconst canSend = !isInputDisabled && !!value.trim();\n\n\tconst getPlaceholder = () => {\n\t\tif (!hasSelectedSession) return \"Select a version to start chatting\";\n\t\tif (!isSessionParamsConfigured) return \"Configure session params to begin\";\n\t\treturn placeholder;\n\t};\n\n\tconst formatTime = useCallback((seconds: number) => {\n\t\tconst mins = Math.floor(seconds / 60);\n\t\tconst secs = seconds % 60;\n\t\treturn `${String(mins).padStart(2, \"0\")}:${String(secs).padStart(2, \"0\")}`;\n\t}, []);\n\n\tconst handleCancel = () => {\n\t\tif (onCancelRecording) {\n\t\t\tonCancelRecording();\n\t\t} else if (onVoicePress) {\n\t\t\tonVoicePress();\n\t\t}\n\t};\n\n\tconst handleConfirm = () => {\n\t\tif (onConfirmRecording) {\n\t\t\tonConfirmRecording();\n\t\t} else if (onVoicePress) {\n\t\t\tonVoicePress();\n\t\t}\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName={cn(\"payman-chat-input-wrapper\", className)}\n\t\t>\n\t\t\t<div className=\"payman-chat-input-container\">\n\t\t\t\t<div className=\"payman-chat-input-inner\">\n\t\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t\t{isRecording ? (\n\t\t\t\t\t\t\t/* ======== Recording State ======== */\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tkey=\"recording\"\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 6 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\t\texit={{ opacity: 0, y: 6 }}\n\t\t\t\t\t\t\t\ttransition={{ duration: 0.25, ease: [0.25, 0.46, 0.45, 0.94] }}\n\t\t\t\t\t\t\t\tclassName=\"payman-chat-input payman-chat-input--recording\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{/* Live transcript area */}\n\t\t\t\t\t\t\t\t<div className=\"payman-recording-transcript-area\">\n\t\t\t\t\t\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t\t\t\t\t\t{transcribedText ? (\n\t\t\t\t\t\t\t\t\t\t\t<motion.p\n\t\t\t\t\t\t\t\t\t\t\t\tkey=\"text\"\n\t\t\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t\t\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.15 }}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-recording-transcript-text\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{transcribedText}\n\t\t\t\t\t\t\t\t\t\t\t\t<motion.span\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-recording-cursor\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: [1, 0] }}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.8, repeat: Infinity, repeatType: \"reverse\" }}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</motion.p>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<motion.p\n\t\t\t\t\t\t\t\t\t\t\t\tkey=\"placeholder\"\n\t\t\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 0.5 }}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-recording-transcript-placeholder\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\tListening...\n\t\t\t\t\t\t\t\t\t\t\t</motion.p>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t{/* Bottom bar: Cancel · dot timer · confirm */}\n\t\t\t\t\t\t\t\t<div className=\"payman-recording-bar\">\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={handleCancel}\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-recording-btn-cancel\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Cancel recording\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\tCancel\n\t\t\t\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t\t\t\t<div className=\"payman-recording-indicator\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"payman-recording-dot\" />\n\t\t\t\t\t\t\t\t\t\t<span className=\"payman-recording-timer\">\n\t\t\t\t\t\t\t\t\t\t\t{formatTime(recordingSeconds)}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={handleConfirm}\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-recording-btn-confirm\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Confirm recording\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Check className=\"w-4 h-4\" strokeWidth={2.5} />\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t/* ======== Normal Input State ======== */\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tkey=\"input\"\n\t\t\t\t\t\t\t\tinitial={false}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\t\texit={{ opacity: 0, y: 6 }}\n\t\t\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"payman-chat-input\",\n\t\t\t\t\t\t\t\t\tisFocused && \"payman-chat-input--focused\"\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{/* Textarea */}\n\t\t\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\t\t\tref={textareaRef}\n\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t\tonChange={(e) => onChange(e.target.value)}\n\t\t\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\t\t\tonFocus={() => setIsFocused(true)}\n\t\t\t\t\t\t\t\t\tonBlur={() => setIsFocused(false)}\n\t\t\t\t\t\t\t\t\tonClick={onClick}\n\t\t\t\t\t\t\t\t\tdisabled={isInputDisabled}\n\t\t\t\t\t\t\t\t\tplaceholder={getPlaceholder()}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-chat-input-field\"\n\t\t\t\t\t\t\t\t\trows={1}\n\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t{/* Bottom action bar */}\n\t\t\t\t\t\t\t\t<div className=\"payman-chat-input-bottom\">\n\t\t\t\t\t\t\t\t\t{/* Left: reset session */}\n\t\t\t\t\t\t\t\t\t<div className=\"payman-chat-input-actions-left\">\n\t\t\t\t\t\t\t\t\t\t{showResetSession && onResetSession && (\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={onResetSession}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isWaitingForResponse}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-chat-input-btn-reset\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"New Session\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<RotateCcw className=\"w-3.5 h-3.5\" strokeWidth={2.5} />\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"payman-chat-input-btn-reset-tooltip\">New Session</span>\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t{/* Right: voice + send */}\n\t\t\t\t\t\t\t\t\t<div className=\"payman-chat-input-actions\">\n\t\t\t\t\t\t\t\t\t\t{showVoiceButton && (\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={onVoicePress}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isVoiceButtonDisabled}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-chat-input-btn-voice\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"Voice input\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<Mic className=\"w-[18px] h-[18px]\" />\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={onSend}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={!canSend}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-chat-input-btn-send\"\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Send message\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<ArrowUp className=\"w-4 h-4\" strokeWidth={2.5} />\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t<p className=\"payman-chat-input-disclaimer\">{AI_DISCLAIMER_TEXT}</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { AnimatePresence, motion } from \"framer-motion\";\nimport { Loader2, X } from \"lucide-react\";\nimport type { CSSProperties } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\n\ntype ImageLightboxProps = {\n\tsrc: string;\n\talt?: string;\n\tonClose: () => void;\n};\n\nexport function ImageLightbox({\n\tsrc,\n\talt = \"\",\n\tonClose,\n}: ImageLightboxProps) {\n\tconst [isMounted, setIsMounted] = useState(false);\n\tconst [isImageLoaded, setIsImageLoaded] = useState(false);\n\tconst overlayStyle: CSSProperties = {\n\t\tposition: \"fixed\",\n\t\tinset: 0,\n\t\tzIndex: 2147483647,\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tpadding: 16,\n\t\tbackground: \"rgba(2, 6, 23, 0.92)\",\n\t\tisolation: \"isolate\",\n\t};\n\tconst frameStyle: CSSProperties = {\n\t\tposition: \"relative\",\n\t\twidth: \"min(92vw, 1280px)\",\n\t\theight: \"min(88vh, 920px)\",\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\toverflow: \"hidden\",\n\t};\n\n\tuseEffect(() => {\n\t\tsetIsMounted(true);\n\t\treturn () => setIsMounted(false);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tsetIsImageLoaded(false);\n\t}, [src]);\n\n\tuseEffect(() => {\n\t\tif (typeof document === \"undefined\") return;\n\n\t\tconst previousOverflow = document.body.style.overflow;\n\t\tdocument.body.style.overflow = \"hidden\";\n\n\t\treturn () => {\n\t\t\tdocument.body.style.overflow = previousOverflow;\n\t\t};\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (typeof document === \"undefined\") return;\n\n\t\tconst handleKeyDown = (event: KeyboardEvent) => {\n\t\t\tif (event.key === \"Escape\") {\n\t\t\t\tonClose();\n\t\t\t}\n\t\t};\n\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"keydown\", handleKeyDown);\n\t\t};\n\t}, [onClose]);\n\n\tif (!isMounted || typeof document === \"undefined\") {\n\t\treturn null;\n\t}\n\n\treturn createPortal(\n\t\t<AnimatePresence>\n\t\t\t<motion.div\n\t\t\t\tstyle={overlayStyle}\n\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\ttransition={{ duration: 0.18 }}\n\t\t\t\tonClick={onClose}\n\t\t\t>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={onClose}\n\t\t\t\t\tclassName=\"absolute top-4 right-4 z-[1] flex h-9 w-9 items-center justify-center rounded-full bg-black/60 text-white/90 transition-colors hover:bg-black/75\"\n\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t>\n\t\t\t\t\t<X className=\"h-4 w-4\" />\n\t\t\t\t</button>\n\n\t\t\t\t<div style={frameStyle} onClick={(event) => event.stopPropagation()}>\n\t\t\t\t\t{!isImageLoaded ? (\n\t\t\t\t\t\t<div className=\"absolute inset-0 flex flex-col items-center justify-center gap-2\">\n\t\t\t\t\t\t\t<Loader2 className=\"h-5 w-5 animate-spin text-white/80\" />\n\t\t\t\t\t\t\t<p className=\"text-sm font-medium text-white/90\">\n\t\t\t\t\t\t\t\tLoading image\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p className=\"text-xs text-white/60\">Reference image</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : null}\n\n\t\t\t\t\t<div className=\"flex h-full w-full items-center justify-center p-3 sm:p-4\">\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\t\talt={alt}\n\t\t\t\t\t\t\tdraggable={false}\n\t\t\t\t\t\t\tonLoad={() => setIsImageLoaded(true)}\n\t\t\t\t\t\t\tclassName={`block h-full w-full rounded-xl object-contain shadow-2xl transition-opacity duration-200 ${\n\t\t\t\t\t\t\t\tisImageLoaded ? \"opacity-100\" : \"opacity-0\"\n\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</motion.div>\n\t\t</AnimatePresence>,\n\t\tdocument.body,\n\t);\n}\n","import { Loader2 } from \"lucide-react\";\nimport type { CSSProperties } from \"react\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { ImageLightbox } from \"./ImageLightbox\";\n\nconst RAG_IMAGE_PATH_REGEX =\n\t/^(?:https?:\\/\\/[^/\\s]+)?\\/api\\/rag\\/chunks\\/[^\"'\\s]+\\/image(?:[?#][^\"'\\s]*)?$/;\n\nfunction isUnresolvedRagImageSource(src: string) {\n\treturn RAG_IMAGE_PATH_REGEX.test(src);\n}\n\nfunction LoadingImageCard({\n\tlabel,\n\tdescription,\n}: {\n\tlabel: string;\n\tdescription: string;\n}) {\n\treturn (\n\t\t<span className=\"my-3 flex min-h-36 w-full flex-col items-center justify-center gap-2 px-4 py-5 text-center\">\n\t\t\t<Loader2 className=\"h-5 w-5 animate-spin text-slate-500 dark:text-slate-300\" />\n\t\t\t<span className=\"text-xs font-medium text-slate-600 dark:text-slate-200\">\n\t\t\t\t{label}\n\t\t\t</span>\n\t\t\t<span className=\"text-[11px] leading-relaxed text-slate-500/90 dark:text-slate-300/80\">\n\t\t\t\t{description}\n\t\t\t</span>\n\t\t</span>\n\t);\n}\n\nfunction BrokenImageCard({ alt }: { alt?: string }) {\n\treturn (\n\t\t<span className=\"my-3 flex min-h-44 w-full flex-col items-center justify-center gap-2 rounded-xl border border-dashed border-red-200 bg-red-50/60 px-4 py-5 text-center dark:border-red-900/40 dark:bg-red-950/20\">\n\t\t\t<span className=\"text-xs font-medium text-red-600 dark:text-red-300\">\n\t\t\t\tUnable to load image\n\t\t\t</span>\n\t\t\t{alt ? (\n\t\t\t\t<span className=\"max-w-sm text-[11px] leading-relaxed text-red-500/80 dark:text-red-200/80\">\n\t\t\t\t\t{alt}\n\t\t\t\t</span>\n\t\t\t) : null}\n\t\t</span>\n\t);\n}\n\ntype MarkdownImageProps = {\n\tsrc?: string;\n\talt?: string;\n\tisResolving?: boolean;\n};\n\nexport function MarkdownImage({\n\tsrc,\n\talt,\n\tisResolving = false,\n}: MarkdownImageProps) {\n\tconst imageFrameStyle: CSSProperties = {\n\t\twidth: \"min(100%, 32rem)\",\n\t\tmaxWidth: \"100%\",\n\t};\n\tconst imageStyle: CSSProperties = {\n\t\tdisplay: \"block\",\n\t\twidth: \"100%\",\n\t\theight: \"auto\",\n\t\tmaxWidth: \"100%\",\n\t\tmaxHeight: \"18rem\",\n\t\tobjectFit: \"contain\",\n\t};\n\tconst [isLoaded, setIsLoaded] = useState(false);\n\tconst [hasError, setHasError] = useState(false);\n\tconst [isLightboxOpen, setIsLightboxOpen] = useState(false);\n\tconst isUnresolvedRagImage = useMemo(\n\t\t() => (src ? isUnresolvedRagImageSource(src) : false),\n\t\t[src]\n\t);\n\tconst isResolvingRagImage = isResolving && isUnresolvedRagImage;\n\n\tuseEffect(() => {\n\t\tsetIsLoaded(false);\n\t\tsetHasError(false);\n\t\tsetIsLightboxOpen(false);\n\t}, [src]);\n\n\tif (!src) {\n\t\treturn null;\n\t}\n\n\tif (isResolvingRagImage) {\n\t\treturn (\n\t\t\t<LoadingImageCard label=\"Loading image\" description=\"Reference image\" />\n\t\t);\n\t}\n\n\tif (hasError) {\n\t\treturn <BrokenImageCard alt={alt} />;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<span className=\"my-3 block w-full\">\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tif (isLoaded) {\n\t\t\t\t\t\t\tsetIsLightboxOpen(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t\tdisabled={!isLoaded}\n\t\t\t\t\taria-busy={!isLoaded}\n\t\t\t\t\tclassName=\"group relative mx-auto flex w-full items-center justify-center overflow-hidden rounded-xl bg-black/[0.03] px-3 py-3 text-left transition-colors hover:bg-black/[0.05] disabled:cursor-wait disabled:hover:bg-black/[0.03] dark:bg-white/[0.03] dark:hover:bg-white/[0.05] dark:disabled:hover:bg-white/[0.03]\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t...imageFrameStyle,\n\t\t\t\t\t\t...(!isLoaded ? { minHeight: \"9rem\" } : {}),\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\talt={alt || \"\"}\n\t\t\t\t\t\tclassName={`relative z-[1] block h-auto max-h-[22rem] w-full max-w-full rounded-lg object-contain transition-opacity duration-200 ${\n\t\t\t\t\t\t\tisLoaded ? \"opacity-100\" : \"opacity-0\"\n\t\t\t\t\t\t}`}\n\t\t\t\t\t\tstyle={imageStyle}\n\t\t\t\t\t\tonLoad={() => {\n\t\t\t\t\t\t\tsetHasError(false);\n\t\t\t\t\t\t\tsetIsLoaded(true);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonError={() => {\n\t\t\t\t\t\t\tsetIsLoaded(false);\n\t\t\t\t\t\t\tsetHasError(true);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</button>\n\t\t\t</span>\n\n\t\t\t{isLightboxOpen && isLoaded ? (\n\t\t\t\t<ImageLightbox\n\t\t\t\t\tsrc={src}\n\t\t\t\t\talt={alt}\n\t\t\t\t\tonClose={() => setIsLightboxOpen(false)}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t</>\n\t);\n}\n","import type { Components } from \"react-markdown\";\nimport { MarkdownImage } from \"./MarkdownImage\";\n\ntype CreateMarkdownComponentsOptions = {\n\tisResolvingImages?: boolean;\n};\n\nexport function createMarkdownComponents(\n\toptions: CreateMarkdownComponentsOptions = {},\n): Components {\n\treturn {\n\t\tp: ({ children }) => (\n\t\t\t<p className=\"mb-3 last:mb-0 text-sm leading-relaxed\">{children}</p>\n\t\t),\n\t\tcode: ({ className: codeClassName, children }) => {\n\t\t\tconst isInline = !codeClassName;\n\n\t\t\treturn isInline ? (\n\t\t\t\t<code className=\"payman-agent-code-inline rounded-md px-1.5 py-0.5 font-mono text-xs break-all\">\n\t\t\t\t\t{children}\n\t\t\t\t</code>\n\t\t\t) : (\n\t\t\t\t<code className=\"payman-agent-code-block my-2 block overflow-x-auto rounded-lg p-3 font-mono text-xs whitespace-pre\">\n\t\t\t\t\t{children}\n\t\t\t\t</code>\n\t\t\t);\n\t\t},\n\t\tpre: ({ children }) => (\n\t\t\t<pre className=\"my-2 max-w-full overflow-x-auto rounded-lg\">\n\t\t\t\t{children}\n\t\t\t</pre>\n\t\t),\n\t\tul: ({ children }) => (\n\t\t\t<ul className=\"mb-3 ml-4 list-disc space-y-1 text-sm\">{children}</ul>\n\t\t),\n\t\tol: ({ children }) => (\n\t\t\t<ol className=\"mb-3 ml-4 list-decimal space-y-1 text-sm\">{children}</ol>\n\t\t),\n\t\tli: ({ children }) => <li className=\"text-sm leading-relaxed\">{children}</li>,\n\t\th1: ({ children }) => (\n\t\t\t<h1 className=\"mt-4 mb-2 text-lg font-semibold first:mt-0\">{children}</h1>\n\t\t),\n\t\th2: ({ children }) => (\n\t\t\t<h2 className=\"mt-3 mb-2 text-base font-semibold first:mt-0\">\n\t\t\t\t{children}\n\t\t\t</h2>\n\t\t),\n\t\th3: ({ children }) => (\n\t\t\t<h3 className=\"mt-2 mb-1 text-sm font-semibold first:mt-0\">{children}</h3>\n\t\t),\n\t\tstrong: ({ children }) => <strong className=\"font-semibold\">{children}</strong>,\n\t\tem: ({ children }) => <em className=\"italic\">{children}</em>,\n\t\tblockquote: ({ children }) => (\n\t\t\t<blockquote className=\"payman-agent-blockquote my-2 pl-4 italic\">\n\t\t\t\t{children}\n\t\t\t</blockquote>\n\t\t),\n\t\thr: () => <hr className=\"payman-agent-hr my-4\" />,\n\t\ta: ({ href, children }) => (\n\t\t\t<a\n\t\t\t\thref={href}\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\tclassName=\"payman-agent-link underline decoration-1 underline-offset-2\"\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</a>\n\t\t),\n\t\timg: ({ src, alt }) => (\n\t\t\t<MarkdownImage\n\t\t\t\tsrc={typeof src === \"string\" ? src : undefined}\n\t\t\t\talt={typeof alt === \"string\" ? alt : undefined}\n\t\t\t\tisResolving={options.isResolvingImages}\n\t\t\t/>\n\t\t),\n\t\ttable: ({ children }) => (\n\t\t\t<div className=\"relative my-4 -mx-1 w-full overflow-x-auto\">\n\t\t\t\t<table className=\"payman-agent-table min-w-full caption-bottom overflow-hidden rounded-lg text-sm\">\n\t\t\t\t\t{children}\n\t\t\t\t</table>\n\t\t\t</div>\n\t\t),\n\t\tthead: ({ children }) => (\n\t\t\t<thead className=\"payman-agent-thead [&_tr]:border-b\">{children}</thead>\n\t\t),\n\t\ttbody: ({ children }) => (\n\t\t\t<tbody className=\"[&_tr:last-child]:border-0\">{children}</tbody>\n\t\t),\n\t\ttr: ({ children }) => (\n\t\t\t<tr className=\"payman-agent-tr border-b transition-colors\">{children}</tr>\n\t\t),\n\t\tth: ({ children }) => (\n\t\t\t<th className=\"h-10 px-3 text-left align-middle text-xs font-medium whitespace-nowrap\">\n\t\t\t\t{children}\n\t\t\t</th>\n\t\t),\n\t\ttd: ({ children }) => (\n\t\t\t<td className=\"p-3 align-middle text-sm whitespace-nowrap\">{children}</td>\n\t\t),\n\t};\n}\n","const WORKFLOW_FAILED = \"WORKFLOW_FAILED\";\nconst STREAM_NOT_STARTED = \"STREAM_NOT_STARTED\";\nconst HTTP_ERROR_PREFIX = /^HTTP\\s+(\\d+)\\s*:\\s*([\\s\\S]+)$/;\n\ntype ErrorPayload = {\n\tstatus?: number;\n\tmessage?: string;\n};\n\nexport function isFriendlyWorkflowError(errorDetails?: string): boolean {\n\tif (!errorDetails) return false;\n\n\treturn (\n\t\terrorDetails === WORKFLOW_FAILED ||\n\t\terrorDetails === STREAM_NOT_STARTED ||\n\t\terrorDetails.includes(WORKFLOW_FAILED)\n\t);\n}\n\nfunction parseErrorPayload(payload: string): ErrorPayload {\n\ttry {\n\t\tconst parsed = JSON.parse(payload) as unknown;\n\n\t\tif (typeof parsed === \"string\") {\n\t\t\treturn { message: parsed.trim() || undefined };\n\t\t}\n\n\t\tif (typeof parsed === \"object\" && parsed !== null) {\n\t\t\tconst record = parsed as Record<string, unknown>;\n\t\t\treturn {\n\t\t\t\tstatus:\n\t\t\t\t\ttypeof record.status === \"number\" ? record.status : undefined,\n\t\t\t\tmessage:\n\t\t\t\t\ttypeof record.message === \"string\" && record.message.trim()\n\t\t\t\t\t\t? record.message.trim()\n\t\t\t\t\t\t: undefined,\n\t\t\t};\n\t\t}\n\t} catch {\n\t\t// Ignore invalid JSON payloads and fall back to plain-text handling.\n\t}\n\n\treturn {};\n}\n\nexport function getConflictErrorMessage(errorDetails?: string): string | undefined {\n\tif (!errorDetails) return undefined;\n\n\tconst trimmedError = errorDetails.trim();\n\tconst httpMatch = trimmedError.match(HTTP_ERROR_PREFIX);\n\tconst httpStatus = httpMatch ? Number(httpMatch[1]) : undefined;\n\tconst rawPayload = (httpMatch ? httpMatch[2] : trimmedError).trim();\n\tconst payload = parseErrorPayload(rawPayload);\n\tconst status = payload.status ?? httpStatus;\n\n\tif (status !== 409) {\n\t\treturn undefined;\n\t}\n\n\tif (payload.message) {\n\t\treturn payload.message;\n\t}\n\n\treturn rawPayload || undefined;\n}\n","import { AnimatePresence, motion } from \"framer-motion\";\nimport {\n\tBinoculars,\n\tCheck,\n\tChevronDown,\n\tChevronRight,\n\tClock,\n\tLoader2,\n\tSparkles,\n\tX,\n} from \"lucide-react\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport type { AgentMessageProps, StreamingStep } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { createMarkdownComponents } from \"./markdownComponents\";\nimport {\n\tgetConflictErrorMessage,\n\tisFriendlyWorkflowError,\n} from \"../../utils/errorMessages\";\nimport { formatElapsedTime } from \"../../utils/formatDate\";\n\n/** Expandable block shown after streaming ends with all accumulated thinking. */\nfunction ThinkingBlock({ text }: { text: string }) {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst hasContent = typeof text === \"string\" && text.trim().length > 0;\n\n\tif (!hasContent) return null;\n\n\treturn (\n\t\t<div className=\"mt-1.5 mb-1.5\">\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => setIsOpen((prev) => !prev)}\n\t\t\t\tclassName=\"inline-flex items-center gap-1 text-[10px] payman-agent-thinking-toggle transition-colors\"\n\t\t\t\taria-expanded={isOpen}\n\t\t\t\taria-label={\n\t\t\t\t\tisOpen ? \"Collapse thought process\" : \"Expand thought process\"\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t<motion.div\n\t\t\t\t\tanimate={{ rotate: isOpen ? 180 : 0 }}\n\t\t\t\t\ttransition={{ duration: 0.15 }}\n\t\t\t\t\tclassName=\"shrink-0\"\n\t\t\t\t>\n\t\t\t\t\t<ChevronDown className=\"h-3 w-3\" />\n\t\t\t\t</motion.div>\n\t\t\t\t<span>Thought process</span>\n\t\t\t</button>\n\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t{isOpen && (\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tinitial={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\tanimate={{ height: \"auto\", opacity: 1 }}\n\t\t\t\t\t\texit={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\ttransition={{ duration: 0.2, ease: \"easeInOut\" }}\n\t\t\t\t\t\tclassName=\"overflow-hidden\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"mt-1 payman-agent-thinking-block rounded-md p-2 overflow-y-auto overflow-x-hidden\">\n\t\t\t\t\t\t\t<p className=\"m-0 text-xs payman-agent-thinking-block-text whitespace-pre-wrap leading-relaxed\">\n\t\t\t\t\t\t\t\t{text}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</motion.div>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t</div>\n\t);\n}\nconst FRIENDLY_ERROR_MESSAGE = \"Oops, something went wrong. Please try again.\";\n\n/** Content that looks like a raw error (INTENT_ERROR message) rather than a user-facing workflow response */\nfunction looksLikeRawError(text: string): boolean {\n\tif (!text || text.length < 10) return false;\n\treturn text.includes(\"errorType=\") || /failed:\\s*\\{/.test(text);\n}\n\nexport function AgentMessage({\n\tmessage,\n\tanimated = false,\n\tshowAgentName = false,\n\tagentName = \"Assistant\",\n\tshowAvatar = false,\n\tlayout = \"full-width\",\n\tshowExecutionSteps = false,\n\tshowStreamingDot = false,\n\tstreamingStepsText,\n\tcompletedStepsText,\n\tonExecutionTraceClick,\n}: AgentMessageProps) {\n\tconst isStreaming = message.isStreaming ?? false;\n\tconst hasSteps = message.steps && message.steps.length > 0;\n\tconst hasTraceData =\n\t\t!!(message.tracingData || message.executionId) && !isStreaming;\n\tconst isCancelled = message.isCancelled ?? false;\n\tconst currentExecutingStepId = message.currentExecutingStepId;\n\n\tconst [isStepsExpanded, setIsStepsExpanded] = useState(false);\n\tconst wasStreamingRef = useRef(isStreaming);\n\n\tuseEffect(() => {\n\t\tif (isStreaming && hasSteps) {\n\t\t\tsetIsStepsExpanded(true);\n\t\t}\n\t\tif (wasStreamingRef.current && !isStreaming) {\n\t\t\tsetIsStepsExpanded(false);\n\t\t}\n\t\twasStreamingRef.current = isStreaming;\n\t}, [isStreaming, hasSteps]);\n\n\tconst totalElapsedMs = hasSteps\n\t\t? message.steps!.reduce((sum, step) => sum + (step.elapsedMs || 0), 0)\n\t\t: 0;\n\n\tconst currentMessage = message.currentMessage;\n\tconst rawContent = message.streamingContent || message.content || \"\";\n\tconst content = rawContent.replace(/\\\\n/g, \"\\n\");\n\t// When workflow completes with a response (e.g. after INTENT_ERROR), prefer that over error UI. Only show friendly error when there's no meaningful response or when content is raw error dump.\n\tconst hasMeaningfulContent =\n\t\tcontent.length > 0 && !looksLikeRawError(content);\n\t// Also show friendly error when workflow completed with no content (e.g. preflight failed, no workflowMsg)\n\tconst completedWithNoContent =\n\t\t!isStreaming &&\n\t\t!isCancelled &&\n\t\tcontent.length === 0 &&\n\t\t(message.streamProgress === \"completed\" || message.streamProgress === \"error\");\n\tconst conflictErrorMessage = getConflictErrorMessage(message.errorDetails);\n\tconst isError =\n\t\t!!conflictErrorMessage ||\n\t\t((isFriendlyWorkflowError(message.errorDetails) ||\n\t\t\tlooksLikeRawError(content)) &&\n\t\t\t!hasMeaningfulContent) ||\n\t\tcompletedWithNoContent;\n\tconst activeThinkingText = message.activeThinkingText;\n\tconst allThinkingText = message.allThinkingText;\n\tconst currentStep = useMemo(\n\t\t() =>\n\t\t\tmessage.steps?.find(\n\t\t\t\t(s) => s.id === currentExecutingStepId && s.status === \"in_progress\"\n\t\t\t),\n\t\t[message.steps, currentExecutingStepId]\n\t);\n\tconst markdownRenderers = useMemo(\n\t\t() =>\n\t\t\tcreateMarkdownComponents({\n\t\t\t\tisResolvingImages: message.isResolvingImages,\n\t\t\t}),\n\t\t[message.isResolvingImages],\n\t);\n\n\tconst getStepsLabel = (streaming: boolean) => {\n\t\tconst count = message.steps!.length;\n\t\tconst stepWord = count === 1 ? \"step\" : \"steps\";\n\t\tif (streaming) {\n\t\t\tif (streamingStepsText)\n\t\t\t\treturn streamingStepsText.replace(\"{count}\", count.toString());\n\t\t\treturn `${count} ${stepWord} in progress`;\n\t\t}\n\t\tif (completedStepsText) {\n\t\t\treturn completedStepsText\n\t\t\t\t.replace(\"{count}\", count.toString())\n\t\t\t\t.replace(\"{time}\", (totalElapsedMs / 1000).toFixed(1));\n\t\t}\n\t\treturn `${count} ${stepWord} completed`;\n\t};\n\n\t// All icons in a fixed 4x4 wrapper for alignment\n\tconst renderStepIcon = (\n\t\tstep: StreamingStep,\n\t\tisCurrentlyExecuting: boolean\n\t) => {\n\t\tconst wrapper = \"h-4 w-4 flex items-center justify-center shrink-0\";\n\t\tif (isCurrentlyExecuting)\n\t\t\treturn (\n\t\t\t\t<div className={wrapper}>\n\t\t\t\t\t<Loader2 className=\"h-3.5 w-3.5 payman-agent-step-icon--active animate-spin\" />\n\t\t\t\t</div>\n\t\t\t);\n\t\tif (step.status === \"pending\" && isCancelled)\n\t\t\treturn (\n\t\t\t\t<div className={wrapper}>\n\t\t\t\t\t<div className=\"h-1.5 w-1.5 rounded-full payman-agent-step-icon--pending\" />\n\t\t\t\t</div>\n\t\t\t);\n\t\tif (step.status === \"pending\" || step.status === \"in_progress\")\n\t\t\treturn (\n\t\t\t\t<div className={wrapper}>\n\t\t\t\t\t<Loader2 className=\"h-3.5 w-3.5 payman-agent-step-icon--in-progress-dim animate-spin\" />\n\t\t\t\t</div>\n\t\t\t);\n\t\tif (step.status === \"completed\")\n\t\t\treturn (\n\t\t\t\t<div className={wrapper}>\n\t\t\t\t\t<Check\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"h-3.5 w-3.5\",\n\t\t\t\t\t\t\tstep.eventType === \"USER_ACTION_SUCCESS\"\n\t\t\t\t\t\t\t\t? \"payman-agent-step-icon--success\"\n\t\t\t\t\t\t\t\t: \"payman-agent-step-icon--success-dim\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t);\n\t\tif (step.status === \"error\")\n\t\t\treturn (\n\t\t\t\t<div className={wrapper}>\n\t\t\t\t\t<X className=\"h-3.5 w-3.5 payman-agent-step-icon--error\" />\n\t\t\t\t</div>\n\t\t\t);\n\t\treturn (\n\t\t\t<div className={wrapper}>\n\t\t\t\t<div className=\"h-1.5 w-1.5 rounded-full payman-agent-step-icon--pending-dim\" />\n\t\t\t</div>\n\t\t);\n\t};\n\n\tconst stepsListContent = hasSteps && (\n\t\t<AnimatePresence initial={false}>\n\t\t\t{isStepsExpanded && (\n\t\t\t\t<motion.div\n\t\t\t\t\tinitial={{ height: 0, opacity: 0 }}\n\t\t\t\t\tanimate={{ height: \"auto\", opacity: 1 }}\n\t\t\t\t\texit={{ height: 0, opacity: 0 }}\n\t\t\t\t\ttransition={{ duration: 0.2, ease: \"easeInOut\" }}\n\t\t\t\t\tclassName=\"overflow-hidden\"\n\t\t\t\t>\n\t\t\t\t\t{!isStreaming && allThinkingText?.trim() && (\n\t\t\t\t\t\t<ThinkingBlock text={allThinkingText} />\n\t\t\t\t\t)}\n\t\t\t\t\t<div className=\"pt-1.5\">\n\t\t\t\t\t\t{message.steps!.map((step) => {\n\t\t\t\t\t\t\tconst isCurrentlyExecuting =\n\t\t\t\t\t\t\t\tstep.id === currentExecutingStepId &&\n\t\t\t\t\t\t\t\tstep.status === \"in_progress\" &&\n\t\t\t\t\t\t\t\tisStreaming &&\n\t\t\t\t\t\t\t\t!isCancelled;\n\t\t\t\t\t\t\tconst hasTime = step.elapsedMs != null && step.elapsedMs > 0;\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<div key={step.id} className=\"mb-1.5\">\n\t\t\t\t\t\t\t\t\t{/* Step row: icon + message */}\n\t\t\t\t\t\t\t\t\t<div className=\"flex gap-1.5 items-start\">\n\t\t\t\t\t\t\t\t\t\t<div className=\"mt-px\">\n\t\t\t\t\t\t\t\t\t\t\t{renderStepIcon(step, isCurrentlyExecuting)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\"text-xs leading-relaxed min-w-0 break-words\",\n\t\t\t\t\t\t\t\t\t\t\t\tisCurrentlyExecuting && \"shimmer-text font-medium\",\n\t\t\t\t\t\t\t\t\t\t\t\t!isCurrentlyExecuting &&\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep.status === \"error\" &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"payman-agent-step-text--error\",\n\t\t\t\t\t\t\t\t\t\t\t\t!isCurrentlyExecuting &&\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep.eventType === \"USER_ACTION_SUCCESS\" &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"payman-agent-step-text--success\",\n\t\t\t\t\t\t\t\t\t\t\t\t!isCurrentlyExecuting &&\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep.status === \"completed\" &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"payman-agent-step-text--completed\",\n\t\t\t\t\t\t\t\t\t\t\t\t!isCurrentlyExecuting &&\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep.status === \"pending\" &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"payman-agent-step-text--pending\",\n\t\t\t\t\t\t\t\t\t\t\t\t!isCurrentlyExecuting &&\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep.status === \"in_progress\" &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"payman-agent-step-text--in-progress\"\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{step.message}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t{/* Time badge — indented to align with step text (16px icon + 6px gap = 22px) */}\n\t\t\t\t\t\t\t\t\t{hasTime && (\n\t\t\t\t\t\t\t\t\t\t<div className=\"pl-[22px] mt-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1 px-1.5 py-0.5 rounded-md payman-agent-step-time leading-none\">\n\t\t\t\t\t\t\t\t\t\t\t\t<Clock className=\"h-2.5 w-2.5 shrink-0 payman-agent-step-time-icon\" />\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-[10px] font-mono payman-agent-step-time-text\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{formatElapsedTime(step.elapsedMs!)}\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</div>\n\t\t\t\t</motion.div>\n\t\t\t)}\n\t\t</AnimatePresence>\n\t);\n\n\tconst stepsToggleRef = useRef<HTMLButtonElement>(null);\n\n\tconst handleStepsToggle = useCallback(() => {\n\t\tsetIsStepsExpanded((prev) => {\n\t\t\tconst next = !prev;\n\t\t\t// Dispatch event so MessageList can scroll to show expanded steps\n\t\t\tif (next) {\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tstepsToggleRef.current\n\t\t\t\t\t\t?.closest(\".payman-scrollbar\")\n\t\t\t\t\t\t?.dispatchEvent(new CustomEvent(\"payman-steps-toggle\"));\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn next;\n\t\t});\n\t}, []);\n\n\tconst stepsToggle = (streaming: boolean) => (\n\t\t<button\n\t\t\tref={stepsToggleRef}\n\t\t\tonClick={handleStepsToggle}\n\t\t\tclassName=\"inline-flex items-center gap-1.5 text-xs payman-agent-step-toggle transition-colors\"\n\t\t>\n\t\t\t<motion.div\n\t\t\t\tanimate={{ rotate: isStepsExpanded ? 90 : 0 }}\n\t\t\t\ttransition={{ duration: 0.15 }}\n\t\t\t\tclassName=\"shrink-0\"\n\t\t\t>\n\t\t\t\t<ChevronRight className=\"h-3 w-3\" />\n\t\t\t</motion.div>\n\t\t\t<span>{getStepsLabel(streaming)}</span>\n\t\t</button>\n\t);\n\n\t// Below-bubble steps section: only after streaming (thinking lives in bubble during stream)\n\tconst showSteps = showExecutionSteps && hasSteps && !isStreaming && !isError;\n\n\tconst messageContent = (\n\t\t<div className=\"w-full\">\n\t\t\t{/* Row: avatar + bubble + trace */}\n\t\t\t<div className=\"flex gap-3 justify-start items-start w-full\">\n\t\t\t\t{/* Avatar */}\n\t\t\t\t{showAvatar && (\n\t\t\t\t\t<div className=\"shrink-0 mt-0.5\">\n\t\t\t\t\t\t{isStreaming && showStreamingDot ? (\n\t\t\t\t\t\t\t<div className=\"h-8 w-8 flex items-center justify-center\">\n\t\t\t\t\t\t\t\t<div className=\"relative\">\n\t\t\t\t\t\t\t\t\t<div className=\"h-2.5 w-2.5 rounded-full payman-agent-avatar-dot animate-pulse\" />\n\t\t\t\t\t\t\t\t\t<div className=\"absolute inset-0 h-2.5 w-2.5 rounded-full payman-agent-avatar-dot-ping animate-ping\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div className=\"h-8 w-8 rounded-full payman-agent-avatar flex items-center justify-center\">\n\t\t\t\t\t\t\t\t<Sparkles className=\"h-3.5 w-3.5 payman-agent-avatar-icon\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{/* Bubble — constrained width */}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"min-w-0\",\n\t\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t\t? \"max-w-[85%]\"\n\t\t\t\t\t\t\t: showAvatar\n\t\t\t\t\t\t\t? \"max-w-[85%]\"\n\t\t\t\t\t\t\t: \"max-w-[80%]\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{/* User Action Result Badge */}\n\t\t\t\t\t{message.userActionResult && (\n\t\t\t\t\t\t<div className=\"mb-2\">\n\t\t\t\t\t\t\t{message.userActionResult === \"approved\" ? (\n\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1.5 px-4 py-1.5 text-xs font-semibold rounded-full payman-agent-approved shrink-0\">\n\t\t\t\t\t\t\t\t\t<Check className=\"w-3.5 h-3.5 shrink-0\" strokeWidth={2.5} />\n\t\t\t\t\t\t\t\t\tVerified\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1.5 px-4 py-1.5 text-xs font-semibold rounded-full payman-agent-rejected shrink-0\">\n\t\t\t\t\t\t\t\t\t<X className=\"w-3.5 h-3.5 shrink-0\" strokeWidth={2.5} />\n\t\t\t\t\t\t\t\t\tRejected\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"overflow-hidden w-full min-w-0 px-4 py-3 rounded-2xl rounded-tl-md transition-all duration-200\",\n\t\t\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t\t\t? cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-agent-bubble payman-agent-bubble--centered\",\n\t\t\t\t\t\t\t\t\t\tisStreaming && \"streaming\",\n\t\t\t\t\t\t\t\t\t\tisError && \"error\"\n\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t\t: cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-agent-bubble\",\n\t\t\t\t\t\t\t\t\t\tisError && \"payman-agent-bubble--error\"\n\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{showAgentName && (\n\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"text-sm font-semibold mb-1 leading-none payman-agent-name\",\n\t\t\t\t\t\t\t\t\tisStreaming && !content && \"animate-pulse\"\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{isStreaming && !content ? \"Thought Process\" : agentName}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"text-sm leading-relaxed min-w-0 w-full break-words overflow-wrap-anywhere\",\n\t\t\t\t\t\t\t\tshowAgentName && \"mt-1\"\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{isStreaming && !content ? (\n\t\t\t\t\t\t\t\t// Streaming without content — show thinking/step indicator\n\t\t\t\t\t\t\t\tactiveThinkingText ? (\n\t\t\t\t\t\t\t\t\t<div className=\"flex gap-2 items-start\">\n\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-4 w-4 mt-0.5 payman-agent-thinking-spinner animate-spin shrink-0\" />\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-sm leading-relaxed min-w-0 break-words payman-agent-thinking-text whitespace-pre-wrap flex-1\">\n\t\t\t\t\t\t\t\t\t\t\t{activeThinkingText}\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"inline-block w-0.5 h-3.5 payman-agent-thinking-cursor animate-pulse ml-0.5 align-text-bottom\" />\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t) : currentStep ? (\n\t\t\t\t\t\t\t\t\t<div className=\"flex gap-1.5 items-start\">\n\t\t\t\t\t\t\t\t\t\t<div className=\"mt-0.5 shrink-0\">\n\t\t\t\t\t\t\t\t\t\t\t{renderStepIcon(currentStep, true)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-sm leading-relaxed min-w-0 break-words shimmer-text font-medium flex-1\">\n\t\t\t\t\t\t\t\t\t\t\t{currentStep.message}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<div className=\"flex gap-2.5 items-start\">\n\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"w-4 h-4 mt-0.5 payman-agent-thinking-spinner animate-spin shrink-0\" />\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-sm payman-agent-thinking-text flex-1\">\n\t\t\t\t\t\t\t\t\t\t\t{currentMessage || \"Thinking...\"}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) : isCancelled && !content ? (\n\t\t\t\t\t\t\t\t<div className=\"flex gap-2.5 items-start\">\n\t\t\t\t\t\t\t\t\t<X className=\"w-4 h-4 mt-0.5 payman-agent-cancelled-icon shrink-0\" />\n\t\t\t\t\t\t\t\t\t<span className=\"text-sm payman-agent-cancelled-text italic flex-1\">\n\t\t\t\t\t\t\t\t\t\t{currentMessage || \"Request was stopped.\"}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-markdown payman-agent-markdown prose prose-sm dark:prose-invert max-w-none min-w-0 w-full break-words overflow-wrap-anywhere\",\n\t\t\t\t\t\t\t\t\t\tisError && \"payman-agent-markdown--error\",\n\t\t\t\t\t\t\t\t\t\tisStreaming && content && \"streaming-cursor\"\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ReactMarkdown\n\t\t\t\t\t\t\t\t\t\tremarkPlugins={[remarkGfm]}\n\t\t\t\t\t\t\t\t\t\tcomponents={markdownRenderers}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{isError\n\t\t\t\t\t\t\t\t\t\t\t? conflictErrorMessage ?? FRIENDLY_ERROR_MESSAGE\n\t\t\t\t\t\t\t\t\t\t\t: content ||\n\t\t\t\t\t\t\t\t\t\t\t (isStreaming\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"Thinking...\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isCancelled\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"Request was stopped.\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"\")}\n\t\t\t\t\t\t\t\t\t</ReactMarkdown>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Trace Button */}\n\t\t\t\t{hasTraceData && onExecutionTraceClick && (\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\tonExecutionTraceClick({\n\t\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\t\ttracingData: message.tracingData,\n\t\t\t\t\t\t\t\texecutionId: message.executionId,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"p-2 rounded-lg shrink-0 payman-agent-trace\",\n\t\t\t\t\t\t\t\"active:scale-95 transition-all duration-150\",\n\t\t\t\t\t\t\tmessage.userActionResult ? \"mt-8\" : \"mt-0.5\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t\ttitle=\"View execution trace\"\n\t\t\t\t\t\taria-label=\"View execution trace\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Binoculars className=\"w-4 h-4 payman-agent-trace-icon\" />\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* Steps — outside the flex row (only when not streaming) */}\n\t\t\t{showSteps && (\n\t\t\t\t<div className={cn(\"mt-1.5\", showAvatar ? \"ml-11\" : \"ml-0\")}>\n\t\t\t\t\t{showExecutionSteps &&\n\t\t\t\t\t\thasSteps &&\n\t\t\t\t\t\t!isStreaming &&\n\t\t\t\t\t\t!isError &&\n\t\t\t\t\t\tstepsToggle(false)}\n\t\t\t\t\t{stepsListContent}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n\n\tif (animated) {\n\t\treturn (\n\t\t\t<motion.div\n\t\t\t\tinitial={{ opacity: 0, y: 8, scale: 0.98 }}\n\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\ttransition={{ duration: 0.25, ease: [0.25, 0.46, 0.45, 0.94] }}\n\t\t\t>\n\t\t\t\t{messageContent}\n\t\t\t</motion.div>\n\t\t);\n\t}\n\n\treturn messageContent;\n}\n","import { motion } from \"framer-motion\";\nimport { User } from \"lucide-react\";\nimport type { UserMessageProps } from \"../../types\";\nimport { cn, formatDate } from \"../../utils\";\n\nexport function UserMessage({\n\tmessage,\n\tanimated = false,\n\tshowAvatar = false,\n}: UserMessageProps) {\n\tconst content = (\n\t\t<div className=\"flex gap-3 justify-end w-full\">\n\t\t\t{/* Message Container */}\n\t\t\t<div className=\"max-w-[80%] min-w-0 flex flex-col items-end\">\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"rounded-2xl rounded-br-md px-4 py-3\",\n\t\t\t\t\t\t\"bg-primary text-primary-foreground\",\n\t\t\t\t\t\t\"shadow-sm\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<p className=\"text-sm leading-relaxed whitespace-pre-wrap break-words\">\n\t\t\t\t\t\t{message.content}\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t\t<span className=\"text-[10px] mt-1.5 mr-1 text-muted-foreground/70 select-none\">\n\t\t\t\t\t{formatDate(message.timestamp)}\n\t\t\t\t</span>\n\t\t\t</div>\n\n\t\t\t{/* Avatar */}\n\t\t\t{showAvatar && (\n\t\t\t\t<div className=\"shrink-0 mt-0.5\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"h-8 w-8 rounded-full\",\n\t\t\t\t\t\t\t\"bg-primary/10 border border-primary/20\",\n\t\t\t\t\t\t\t\"flex items-center justify-center\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<User className=\"h-3.5 w-3.5 text-primary\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n\n\tif (animated) {\n\t\treturn (\n\t\t\t<motion.div\n\t\t\t\tinitial={{ opacity: 0, y: 8, scale: 0.98 }}\n\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\ttransition={{ duration: 0.25, ease: [0.25, 0.46, 0.45, 0.94] }}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</motion.div>\n\t\t);\n\t}\n\n\treturn content;\n}","import type { MessageRowProps } from \"../../types\";\nimport { AgentMessage } from \"../AgentMessage\";\nimport { UserMessage } from \"../UserMessage\";\n\nexport function MessageRow({\n\tmessage,\n\tstage = \"DEV\",\n\tanimated = false,\n\tshowAgentName = false,\n\tagentName = \"Assistant\",\n\tshowAvatars = false,\n\tshowUserAvatar,\n\tshowAssistantAvatar,\n\tlayout = \"full-width\",\n\tshowTimestamps = false,\n\tshowExecutionSteps = false,\n\tshowStreamingDot = false,\n\tstreamingStepsText,\n\tcompletedStepsText,\n\tonExecutionTraceClick,\n}: MessageRowProps) {\n\tconst actualShowUserAvatar =\n\t\tshowUserAvatar !== undefined ? showUserAvatar : showAvatars;\n\tconst actualShowAssistantAvatar =\n\t\tshowAssistantAvatar !== undefined ? showAssistantAvatar : showAvatars;\n\n\tif (message.role === \"user\") {\n\t\treturn (\n\t\t\t<UserMessage\n\t\t\t\tmessage={message}\n\t\t\t\tanimated={animated}\n\t\t\t\tshowAvatar={actualShowUserAvatar}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<AgentMessage\n\t\t\tmessage={message}\n\t\t\tstage={stage}\n\t\t\tanimated={animated}\n\t\t\tshowAgentName={showAgentName}\n\t\t\tagentName={agentName}\n\t\t\tshowAvatar={actualShowAssistantAvatar}\n\t\t\tlayout={layout}\n\t\t\tshowTimestamp={showTimestamps}\n\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\tcompletedStepsText={completedStepsText}\n\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t/>\n\t);\n}\n","import { cn } from \"../../utils\";\n\ninterface MessageRowSkeletonProps {\n\tisRightAligned?: boolean;\n}\n\nexport function MessageRowSkeleton({\n\tisRightAligned = false,\n}: MessageRowSkeletonProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"flex w-full\",\n\t\t\t\tisRightAligned ? \"justify-end\" : \"justify-start\"\n\t\t\t)}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex flex-col gap-2 w-full\",\n\t\t\t\t\tisRightAligned ? \"items-end max-w-[70%]\" : \"items-start max-w-[80%]\"\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"rounded-2xl p-4 w-full\",\n\t\t\t\t\t\tisRightAligned\n\t\t\t\t\t\t\t? \"bg-primary/8 rounded-br-md\"\n\t\t\t\t\t\t\t: \"bg-muted/70 rounded-bl-md\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"space-y-2.5\">\n\t\t\t\t\t\t<div className=\"h-3 skeleton-pulse rounded-full bg-muted-foreground/10 w-[85%]\" />\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName=\"h-3 skeleton-pulse rounded-full bg-muted-foreground/10 w-full\"\n\t\t\t\t\t\t\tstyle={{ animationDelay: \"0.1s\" }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{!isRightAligned && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName=\"h-3 skeleton-pulse rounded-full bg-muted-foreground/10 w-[60%]\"\n\t\t\t\t\t\t\t\tstyle={{ animationDelay: \"0.2s\" }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"h-2 skeleton-pulse rounded-full bg-muted-foreground/8 w-12 mx-1\"\n\t\t\t\t\tstyle={{ animationDelay: \"0.3s\" }}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { motion } from \"framer-motion\";\nimport { ArrowDown } from \"lucide-react\";\nimport { useCallback, useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport type { MessageListProps } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { MessageRow } from \"../MessageRow\";\nimport { MessageRowSkeleton } from \"../MessageRowSkeleton\";\n\nconst SCROLL_THRESHOLD = 150;\nconst LOAD_MORE_THRESHOLD = 80;\n\nexport function MessageList({\n\tmessages,\n\tisLoading = false,\n\temptyStateText = \"What can I help with?\",\n\tshowEmptyStateIcon = true,\n\temptyStateComponent,\n\tlayout = \"full-width\",\n\tshowTimestamps = false,\n\tstage = \"DEV\",\n\tanimated = false,\n\tshowAgentName = false,\n\tagentName = \"Assistant\",\n\tshowAvatars = false,\n\tshowUserAvatar,\n\tshowAssistantAvatar,\n\tshowExecutionSteps = false,\n\tshowStreamingDot = false,\n\tstreamingStepsText,\n\tcompletedStepsText,\n\tonExecutionTraceClick,\n\tclassName,\n\tonLoadMoreMessages,\n\tisLoadingMoreMessages = false,\n\thasMoreMessages = false,\n}: MessageListProps) {\n\tconst scrollRef = useRef<HTMLDivElement>(null);\n\tconst isNearBottomRef = useRef(true);\n\tconst [showScrollBtn, setShowScrollBtn] = useState(false);\n\tconst prevMessageCountRef = useRef(messages.length);\n\n\t// Track scroll height before prepend so we can restore position\n\tconst scrollHeightBeforePrependRef = useRef<number | null>(null);\n\tconst firstMessageIdRef = useRef<string | undefined>(messages[0]?.id);\n\n\tconst getDistanceFromBottom = useCallback(() => {\n\t\tconst el = scrollRef.current;\n\t\tif (!el) return 0;\n\t\treturn el.scrollHeight - el.scrollTop - el.clientHeight;\n\t}, []);\n\n\tconst scrollToBottom = useCallback((behavior: ScrollBehavior = \"smooth\") => {\n\t\tconst el = scrollRef.current;\n\t\tif (!el) return;\n\t\tel.scrollTo({ top: el.scrollHeight, behavior });\n\t}, []);\n\n\tconst handleScroll = useCallback(() => {\n\t\tconst el = scrollRef.current;\n\t\tif (!el) return;\n\n\t\tconst distance = getDistanceFromBottom();\n\t\tconst nearBottom = distance <= SCROLL_THRESHOLD;\n\t\tisNearBottomRef.current = nearBottom;\n\t\tsetShowScrollBtn(!nearBottom);\n\n\t\t// Trigger load-more when scrolled near the top\n\t\tif (\n\t\t\tel.scrollTop <= LOAD_MORE_THRESHOLD &&\n\t\t\thasMoreMessages &&\n\t\t\t!isLoadingMoreMessages &&\n\t\t\tonLoadMoreMessages\n\t\t) {\n\t\t\t// Snapshot scroll height before the state update so we can restore position\n\t\t\tscrollHeightBeforePrependRef.current = el.scrollHeight;\n\t\t\tonLoadMoreMessages();\n\t\t}\n\t}, [getDistanceFromBottom, hasMoreMessages, isLoadingMoreMessages, onLoadMoreMessages]);\n\n\t// After messages are prepended, restore scroll position so the view doesn't jump\n\tuseLayoutEffect(() => {\n\t\tconst el = scrollRef.current;\n\t\tconst prevHeight = scrollHeightBeforePrependRef.current;\n\t\tconst newFirstId = messages[0]?.id;\n\n\t\tif (el && prevHeight !== null && newFirstId !== firstMessageIdRef.current) {\n\t\t\tel.scrollTop = el.scrollHeight - prevHeight;\n\t\t\tscrollHeightBeforePrependRef.current = null;\n\t\t}\n\t\tfirstMessageIdRef.current = newFirstId;\n\t}, [messages]);\n\n\t// Auto-scroll when new messages arrive\n\tuseEffect(() => {\n\t\tconst prevCount = prevMessageCountRef.current;\n\t\tprevMessageCountRef.current = messages.length;\n\n\t\tif (messages.length > prevCount && isNearBottomRef.current) {\n\t\t\trequestAnimationFrame(() => scrollToBottom());\n\t\t}\n\t}, [messages.length, scrollToBottom]);\n\n\t// Auto-scroll during streaming\n\tuseEffect(() => {\n\t\tconst lastMsg = messages[messages.length - 1];\n\t\tif (!lastMsg?.isStreaming) return;\n\t\tif (!isNearBottomRef.current) return;\n\n\t\trequestAnimationFrame(() => scrollToBottom());\n\t});\n\n\t// Instant scroll on mount\n\tuseEffect(() => {\n\t\tif (messages.length > 0) {\n\t\t\tsetTimeout(() => scrollToBottom(\"instant\"), 50);\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, []);\n\n\t// Listen for steps toggle events from AgentMessage\n\t// When steps expand, scroll down a bit so they're visible\n\tuseEffect(() => {\n\t\tconst handleStepsToggle = () => {\n\t\t\t// After steps expand/collapse, if we're near the bottom, scroll to show them\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tconst distance = getDistanceFromBottom();\n\t\t\t\t\tif (distance > 0 && distance < 600) {\n\t\t\t\t\t\tscrollToBottom();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tconst el = scrollRef.current;\n\t\tif (el) {\n\t\t\tel.addEventListener(\"payman-steps-toggle\", handleStepsToggle);\n\t\t\treturn () =>\n\t\t\t\tel.removeEventListener(\"payman-steps-toggle\", handleStepsToggle);\n\t\t}\n\t}, [getDistanceFromBottom, scrollToBottom]);\n\n\tconst handleScrollToBottom = useCallback(() => {\n\t\tscrollToBottom();\n\t}, [scrollToBottom]);\n\n\t/* Loading */\n\tif (isLoading) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex-1 overflow-y-auto min-h-0 payman-scrollbar\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"space-y-5\",\n\t\t\t\t\t\tlayout === \"centered\" ? \"max-w-2xl mx-auto px-4 py-6\" : \"p-4\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{Array.from({ length: 5 }).map((_, i) => (\n\t\t\t\t\t\t<MessageRowSkeleton\n\t\t\t\t\t\t\tkey={`skel-${i}`}\n\t\t\t\t\t\t\tisRightAligned={i % 3 === 0}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t/* Empty state */\n\tif (messages.length === 0) {\n\t\tconst lines = emptyStateText.split(\"\\n\").map((l) => l.trim()).filter(Boolean);\n\t\treturn (\n\t\t\t<div className={cn(\"payman-empty-root\", className)}>\n\t\t\t\t<motion.div\n\t\t\t\t\tinitial={{ opacity: 0, y: 20 }}\n\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\ttransition={{ duration: 0.5, ease: [0.25, 0.46, 0.45, 0.94] }}\n\t\t\t\t\tclassName=\"payman-empty-content\"\n\t\t\t\t>\n\t\t\t\t\t{/* Custom component (e.g. logo/illustration) from integrator */}\n\t\t\t\t\t{emptyStateComponent && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tinitial={{ scale: 0.9, opacity: 0 }}\n\t\t\t\t\t\t\tanimate={{ scale: 1, opacity: 1 }}\n\t\t\t\t\t\t\ttransition={{ delay: 0.05, duration: 0.45, ease: [0.25, 0.46, 0.45, 0.94] }}\n\t\t\t\t\t\t\tclassName=\"payman-empty-custom-component\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{emptyStateComponent}\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t\t<div className=\"payman-empty-text-group\">\n\t\t\t\t\t\t{lines.map((line, i) => (\n\t\t\t\t\t\t\t<motion.p\n\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 6 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\t\ttransition={{ delay: 0.12 + i * 0.06, duration: 0.4 }}\n\t\t\t\t\t\t\t\tclassName={i === 0 ? \"payman-empty-title\" : \"payman-empty-subtitle\"}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{line}\n\t\t\t\t\t\t\t</motion.p>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t</motion.div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t/* Messages */\n\treturn (\n\t\t<>\n\t\t\t{/* Scrollable message list — takes full flex space */}\n\t\t\t<div\n\t\t\t\tref={scrollRef}\n\t\t\t\tonScroll={handleScroll}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex-1 min-h-0 overflow-y-auto payman-scrollbar relative\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"space-y-4\",\n\t\t\t\t\t\tlayout === \"centered\" ? \"max-w-2xl mx-auto px-4 py-6\" : \"p-4\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{/* Load-more spinner shown at top while fetching older messages */}\n\t\t\t\t\t{isLoadingMoreMessages && (\n\t\t\t\t\t\t<div className=\"flex justify-center py-2\">\n\t\t\t\t\t\t\t<div className=\"w-5 h-5 rounded-full border-2 border-muted-foreground/30 border-t-muted-foreground animate-spin\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t{messages.map((message) => (\n\t\t\t\t\t\t<MessageRow\n\t\t\t\t\t\t\tkey={message.id}\n\t\t\t\t\t\t\tmessage={message}\n\t\t\t\t\t\t\tstage={stage}\n\t\t\t\t\t\t\tanimated={animated}\n\t\t\t\t\t\t\tshowAgentName={showAgentName}\n\t\t\t\t\t\t\tagentName={agentName}\n\t\t\t\t\t\t\tshowAvatars={showAvatars}\n\t\t\t\t\t\t\tshowUserAvatar={showUserAvatar}\n\t\t\t\t\t\t\tshowAssistantAvatar={showAssistantAvatar}\n\t\t\t\t\t\t\tlayout={layout}\n\t\t\t\t\t\t\tshowTimestamps={showTimestamps}\n\t\t\t\t\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\t\t\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\t\t\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\t\t\t\t\tcompletedStepsText={completedStepsText}\n\t\t\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\n\t\t\t\t{/* Scroll-to-bottom button */}\n\t\t\t\t{showScrollBtn && (\n\t\t\t\t\t<div className=\"sticky bottom-0 z-20 flex justify-center pb-3 -mt-11\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tonClick={handleScrollToBottom}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"w-8 h-8 rounded-full\",\n\t\t\t\t\t\t\t\t\"bg-card border border-border shadow-lg\",\n\t\t\t\t\t\t\t\t\"flex items-center justify-center\",\n\t\t\t\t\t\t\t\t\"hover:bg-muted active:scale-95\",\n\t\t\t\t\t\t\t\t\"transition-all duration-150\",\n\t\t\t\t\t\t\t\t\"cursor-pointer\"\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\taria-label=\"Scroll to bottom\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ArrowDown className=\"w-4 h-4 text-muted-foreground\" />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</>\n\t);\n}\n","import { 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/sentryContext.ts","../src/utils/errorMessages.ts","../src/utils/sentry.ts","../src/components/ChatInput/index.tsx","../src/components/AgentMessage/ImageLightbox.tsx","../src/components/AgentMessage/MarkdownImage.tsx","../src/components/AgentMessage/markdownComponents.tsx","../src/components/AgentMessage/index.tsx","../src/components/UserMessage/index.tsx","../src/components/MessageRow/index.tsx","../src/components/MessageRowSkeleton/index.tsx","../src/components/MessageList/index.tsx","../src/components/OtpInput/index.tsx","../src/components/UserActionModal/constants.ts","../src/components/UserActionModal/utils.ts","../src/components/UserActionModal/index.tsx","../src/components/PaymanChat/index.tsx"],"names":["createContext","useContext","twMerge","clsx","Sentry","init","Sentry2","useRef","useState","useEffect","useCallback","jsx","jsxs","AnimatePresence","motion","Check","RotateCcw","Mic","ArrowUp","createPortal","X","Loader2","useMemo","Fragment","ChevronDown","Clock","ChevronRight","Sparkles","ReactMarkdown","remarkGfm","Binoculars","User","useLayoutEffect","ArrowDown","forwardRef","PaymanChat","useChat","useVoice","useImperativeHandle","isEmpty"],"mappings":"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","file":"index.js","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { MessageDisplay } from \"../types\";\n\nexport interface PaymanChatContextValue {\n\t/**\n\t * Clear all messages and reset the chat\n\t */\n\tresetSession: () => void;\n\n\t/**\n\t * Clear all messages without resetting session ID\n\t */\n\tclearMessages: () => void;\n\n\t/**\n\t * Prepend older messages to the top of the list (e.g. from history pagination)\n\t */\n\tprependMessages: (messages: MessageDisplay[]) => void;\n\n\t/**\n\t * Cancel current streaming operation\n\t */\n\tcancelStream: () => void;\n\n\t/**\n\t * Get current session ID\n\t */\n\tgetSessionId: () => string | undefined;\n\n\t/**\n\t * Get all messages\n\t */\n\tgetMessages: () => MessageDisplay[];\n\n\t/**\n\t * Check if currently waiting for response\n\t */\n\tisWaitingForResponse: boolean;\n}\n\nexport const PaymanChatContext = createContext<\n\tPaymanChatContextValue | undefined\n>(undefined);\n\n/**\n * Hook to access PaymanChat controls from parent components\n * \n * @example\n * ```tsx\n * function MyComponent() {\n * const chat = usePaymanChat();\n * \n * return (\n * <>\n * <button onClick={chat.resetSession}>Reset</button>\n * <button onClick={chat.clearMessages}>Clear</button>\n * </>\n * );\n * }\n * ```\n */\nexport function usePaymanChat(): PaymanChatContextValue {\n\tconst context = useContext(PaymanChatContext);\n\tif (!context) {\n\t\tthrow new Error(\"usePaymanChat must be used within a PaymanChat component\");\n\t}\n\treturn context;\n}\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Utility function to merge Tailwind CSS classes\n */\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","/**\n * Format a timestamp to a readable date/time string\n */\nexport function formatDate(timestamp: string | Date): string {\n\tconst date = typeof timestamp === \"string\" ? new Date(timestamp) : timestamp;\n\n\tconst now = new Date();\n\tconst diffMs = now.getTime() - date.getTime();\n\tconst diffMins = Math.floor(diffMs / 60000);\n\tconst diffHours = Math.floor(diffMs / 3600000);\n\tconst diffDays = Math.floor(diffMs / 86400000);\n\n\t// Less than a minute\n\tif (diffMins < 1) {\n\t\treturn \"Just now\";\n\t}\n\n\t// Less than an hour\n\tif (diffMins < 60) {\n\t\treturn `${diffMins}m ago`;\n\t}\n\n\t// Less than a day\n\tif (diffHours < 24) {\n\t\treturn `${diffHours}h ago`;\n\t}\n\n\t// Less than a week\n\tif (diffDays < 7) {\n\t\treturn `${diffDays}d ago`;\n\t}\n\n\t// Format as date\n\treturn date.toLocaleDateString(\"en-US\", {\n\t\tmonth: \"short\",\n\t\tday: \"numeric\",\n\t\tyear: date.getFullYear() !== now.getFullYear() ? \"numeric\" : undefined,\n\t});\n}\n\nexport function formatElapsedTime(ms?: number): string {\n\tif (!ms) return \"\";\n\tif (ms < 1000) return `${ms}ms`;\n\treturn `${(ms / 1000).toFixed(1)}s`;\n}\n","import * as Sentry from \"@sentry/react\";\n\nexport interface ChatSessionContext {\n\tsessionId?: string;\n\tsessionOwnerId?: string;\n\tworkflowName?: string;\n\texecutionId?: string;\n\tcfRay?: string;\n\troute?: string;\n\tcustomerId?: string;\n\tcustomerEmail?: string;\n}\n\n/**\n * Reports an error to Sentry enriched with chat session context.\n * Tags and context are scoped to this event so they don't leak\n * to unrelated errors.\n *\n * No-op when Sentry is not initialised.\n */\nexport function captureSentryError(\n\terror: Error | string,\n\tcontext: ChatSessionContext\n): void {\n\tif (!Sentry.getClient()) return;\n\n\tconst tags: Record<string, string> = {};\n\tif (context.executionId) tags.executionId = context.executionId;\n\tif (context.sessionId) tags.sessionId = context.sessionId;\n\tif (context.route) tags.route = context.route;\n\tif (context.cfRay) tags.cfRay = context.cfRay;\n\n\tif (context.customerId) tags.customerId = context.customerId;\n\tif (context.customerEmail) tags.customerEmail = context.customerEmail;\n\n\tconst contexts = {\n\t\tchat_session: {\n\t\t\tsessionId: context.sessionId ?? null,\n\t\t\tsessionOwnerId: context.sessionOwnerId ?? null,\n\t\t\texecutionId: context.executionId ?? null,\n\t\t\tworkflowName: context.workflowName ?? null,\n\t\t\tcfRay: context.cfRay ?? null,\n\t\t\tcustomerId: context.customerId ?? null,\n\t\t\tcustomerEmail: context.customerEmail ?? null,\n\t\t},\n\t};\n\n\tif (typeof error === \"string\") {\n\t\tSentry.captureMessage(error, { level: \"error\", tags, contexts });\n\t} else {\n\t\tSentry.captureException(error, { tags, contexts });\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// Targeted fetch interceptor for capturing cf-ray headers\n// ---------------------------------------------------------------------------\n\ntype CfRayListener = (cfRay: string) => void;\n\ninterface InterceptorEntry {\n\turlPattern: string;\n\tlistener: CfRayListener;\n}\n\nconst interceptors: Set<InterceptorEntry> = new Set();\nlet originalFetch: typeof globalThis.fetch | null = null;\n\nfunction patchFetch(): void {\n\tif (originalFetch !== null) return;\n\tif (typeof globalThis === \"undefined\" || typeof globalThis.fetch !== \"function\")\n\t\treturn;\n\n\toriginalFetch = globalThis.fetch;\n\n\tglobalThis.fetch = async function (\n\t\tthis: typeof globalThis,\n\t\tinput: RequestInfo | URL,\n\t\tinit?: RequestInit\n\t): Promise<Response> {\n\t\tconst response = await originalFetch!.call(this, input, init);\n\n\t\tif (interceptors.size > 0) {\n\t\t\tconst url =\n\t\t\t\ttypeof input === \"string\"\n\t\t\t\t\t? input\n\t\t\t\t\t: input instanceof URL\n\t\t\t\t\t\t? input.href\n\t\t\t\t\t\t: (input as Request).url;\n\n\t\t\ttry {\n\t\t\t\tconst cfRay = response.headers.get(\"cf-ray\");\n\t\t\t\tif (cfRay) {\n\t\t\t\t\tfor (const entry of interceptors) {\n\t\t\t\t\t\tif (url.includes(entry.urlPattern)) {\n\t\t\t\t\t\t\tentry.listener(cfRay);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// headers may be inaccessible on opaque responses\n\t\t\t}\n\t\t}\n\n\t\treturn response;\n\t};\n}\n\nfunction maybeUnpatchFetch(): void {\n\tif (interceptors.size > 0 || originalFetch === null) return;\n\tglobalThis.fetch = originalFetch;\n\toriginalFetch = null;\n}\n\n/**\n * Registers a listener that receives the `cf-ray` header value whenever a\n * fetch response URL contains `urlPattern`.\n *\n * Returns an unsubscribe function (call on unmount).\n */\nexport function subscribeToCfRay(\n\turlPattern: string,\n\tlistener: CfRayListener\n): () => void {\n\tconst entry: InterceptorEntry = { urlPattern, listener };\n\tpatchFetch();\n\tinterceptors.add(entry);\n\treturn () => {\n\t\tinterceptors.delete(entry);\n\t\tmaybeUnpatchFetch();\n\t};\n}\n","const WORKFLOW_FAILED = \"WORKFLOW_FAILED\";\nconst STREAM_NOT_STARTED = \"STREAM_NOT_STARTED\";\nconst HTTP_ERROR_PREFIX = /^HTTP\\s+(\\d+)\\s*:\\s*([\\s\\S]+)$/;\n\ntype ErrorPayload = {\n\tstatus?: number;\n\tmessage?: string;\n};\n\nexport function isFriendlyWorkflowError(errorDetails?: string): boolean {\n\tif (!errorDetails) return false;\n\n\treturn (\n\t\terrorDetails === WORKFLOW_FAILED ||\n\t\terrorDetails === STREAM_NOT_STARTED ||\n\t\terrorDetails.includes(WORKFLOW_FAILED)\n\t);\n}\n\nfunction parseErrorPayload(payload: string): ErrorPayload {\n\ttry {\n\t\tconst parsed = JSON.parse(payload) as unknown;\n\n\t\tif (typeof parsed === \"string\") {\n\t\t\treturn { message: parsed.trim() || undefined };\n\t\t}\n\n\t\tif (typeof parsed === \"object\" && parsed !== null) {\n\t\t\tconst record = parsed as Record<string, unknown>;\n\t\t\treturn {\n\t\t\t\tstatus:\n\t\t\t\t\ttypeof record.status === \"number\" ? record.status : undefined,\n\t\t\t\tmessage:\n\t\t\t\t\ttypeof record.message === \"string\" && record.message.trim()\n\t\t\t\t\t\t? record.message.trim()\n\t\t\t\t\t\t: undefined,\n\t\t\t};\n\t\t}\n\t} catch {\n\t\t// Ignore invalid JSON payloads and fall back to plain-text handling.\n\t}\n\n\treturn {};\n}\n\nexport function getConflictErrorMessage(errorDetails?: string): string | undefined {\n\tif (!errorDetails) return undefined;\n\n\tconst trimmedError = errorDetails.trim();\n\tconst httpMatch = trimmedError.match(HTTP_ERROR_PREFIX);\n\tconst httpStatus = httpMatch ? Number(httpMatch[1]) : undefined;\n\tconst rawPayload = (httpMatch ? httpMatch[2] : trimmedError).trim();\n\tconst payload = parseErrorPayload(rawPayload);\n\tconst status = payload.status ?? httpStatus;\n\n\tif (status !== 409) {\n\t\treturn undefined;\n\t}\n\n\tif (payload.message) {\n\t\treturn payload.message;\n\t}\n\n\treturn rawPayload || undefined;\n}\n","import * as Sentry from \"@sentry/react\";\n\n/**\n * Initialise Sentry inside the SDK.\n * Only runs when a DSN is provided and Sentry has not already been initialised\n * by the host application, so it is safe to call even if the host also calls\n * Sentry.init().\n */\nexport function initSentryIfNeeded(dsn: string): void {\n\tif (!dsn) return;\n\n\t// getClient() returns undefined when Sentry has not been initialised yet\n\tif (Sentry.getClient()) return;\n\n\tSentry.init({\n\t\tdsn,\n\t\tsendDefaultPii: true,\n\t\tinitialScope: {\n\t\t\ttags: { source: \"payman-ask-sdk\" },\n\t\t},\n\t});\n}\n","import { AnimatePresence, motion } from \"framer-motion\";\nimport { ArrowUp, Check, Mic, RotateCcw } from \"lucide-react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { ChatInputProps } from \"../../types\";\nimport { cn } from \"../../utils\";\n\nconst AI_DISCLAIMER_TEXT =\n\t\"AI can make mistakes. Please double-check responses.\";\n\nexport function ChatInput({\n\tvalue,\n\tonChange,\n\tonSend,\n\tonPause,\n\tdisabled = false,\n\tplaceholder = \"Type your message...\",\n\tisWaitingForResponse = false,\n\thasSelectedSession = true,\n\tisSessionParamsConfigured = true,\n\tonClick,\n\tclassName,\n\tenableVoice = false,\n\tonVoicePress,\n\tvoiceAvailable = false,\n\tisRecording = false,\n\ttranscribedText = \"\",\n\tonCancelRecording,\n\tonConfirmRecording,\n\tshowResetSession = false,\n\tonResetSession,\n}: ChatInputProps) {\n\tconst textareaRef = useRef<HTMLTextAreaElement>(null);\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst prevWaitingRef = useRef(isWaitingForResponse);\n\tconst [recordingSeconds, setRecordingSeconds] = useState(0);\n\tconst recordingTimerRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\tconst [isFocused, setIsFocused] = useState(false);\n\n\t// Auto-resize textarea\n\tuseEffect(() => {\n\t\tif (textareaRef.current) {\n\t\t\ttextareaRef.current.style.height = \"auto\";\n\t\t\tconst scrollHeight = textareaRef.current.scrollHeight;\n\t\t\tconst maxHeight = 160;\n\t\t\ttextareaRef.current.style.height = `${Math.min(scrollHeight, maxHeight)}px`;\n\t\t}\n\t}, [value]);\n\n\t// Auto-focus on mount\n\tuseEffect(() => {\n\t\trequestAnimationFrame(() => {\n\t\t\ttextareaRef.current?.focus();\n\t\t});\n\t}, []);\n\n\t// Re-focus after response completes\n\tuseEffect(() => {\n\t\tconst wasWaiting = prevWaitingRef.current;\n\t\tprevWaitingRef.current = isWaitingForResponse;\n\t\tif (wasWaiting && !isWaitingForResponse) {\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\ttextareaRef.current?.focus();\n\t\t\t\tcontainerRef.current?.scrollIntoView({ block: \"end\", behavior: \"smooth\" });\n\t\t\t});\n\t\t}\n\t}, [isWaitingForResponse]);\n\n\t// Recording timer\n\tuseEffect(() => {\n\t\tif (isRecording) {\n\t\t\tsetRecordingSeconds(0);\n\t\t\trecordingTimerRef.current = setInterval(() => {\n\t\t\t\tsetRecordingSeconds((s) => s + 1);\n\t\t\t}, 1000);\n\t\t} else {\n\t\t\tif (recordingTimerRef.current) {\n\t\t\t\tclearInterval(recordingTimerRef.current);\n\t\t\t\trecordingTimerRef.current = null;\n\t\t\t}\n\t\t\tsetRecordingSeconds(0);\n\t\t}\n\t\treturn () => {\n\t\t\tif (recordingTimerRef.current) {\n\t\t\t\tclearInterval(recordingTimerRef.current);\n\t\t\t}\n\t\t};\n\t}, [isRecording]);\n\n\tconst handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n\t\tif (e.key === \"Enter\" && !e.shiftKey) {\n\t\t\te.preventDefault();\n\t\t\tif (value.trim() && !isInputDisabled) onSend();\n\t\t}\n\t};\n\n\tconst isInputDisabled = disabled || isWaitingForResponse;\n\tconst showVoiceButton = enableVoice && onVoicePress != null;\n\tconst isVoiceButtonDisabled =\n\t\tisWaitingForResponse || !voiceAvailable || !isSessionParamsConfigured;\n\tconst canSend = !isInputDisabled && !!value.trim();\n\n\tconst getPlaceholder = () => {\n\t\tif (!hasSelectedSession) return \"Select a version to start chatting\";\n\t\tif (!isSessionParamsConfigured) return \"Configure session params to begin\";\n\t\treturn placeholder;\n\t};\n\n\tconst formatTime = useCallback((seconds: number) => {\n\t\tconst mins = Math.floor(seconds / 60);\n\t\tconst secs = seconds % 60;\n\t\treturn `${String(mins).padStart(2, \"0\")}:${String(secs).padStart(2, \"0\")}`;\n\t}, []);\n\n\tconst handleCancel = () => {\n\t\tif (onCancelRecording) {\n\t\t\tonCancelRecording();\n\t\t} else if (onVoicePress) {\n\t\t\tonVoicePress();\n\t\t}\n\t};\n\n\tconst handleConfirm = () => {\n\t\tif (onConfirmRecording) {\n\t\t\tonConfirmRecording();\n\t\t} else if (onVoicePress) {\n\t\t\tonVoicePress();\n\t\t}\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName={cn(\"payman-chat-input-wrapper\", className)}\n\t\t>\n\t\t\t<div className=\"payman-chat-input-container\">\n\t\t\t\t<div className=\"payman-chat-input-inner\">\n\t\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t\t{isRecording ? (\n\t\t\t\t\t\t\t/* ======== Recording State ======== */\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tkey=\"recording\"\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 6 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\t\texit={{ opacity: 0, y: 6 }}\n\t\t\t\t\t\t\t\ttransition={{ duration: 0.25, ease: [0.25, 0.46, 0.45, 0.94] }}\n\t\t\t\t\t\t\t\tclassName=\"payman-chat-input payman-chat-input--recording\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{/* Live transcript area */}\n\t\t\t\t\t\t\t\t<div className=\"payman-recording-transcript-area\">\n\t\t\t\t\t\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t\t\t\t\t\t{transcribedText ? (\n\t\t\t\t\t\t\t\t\t\t\t<motion.p\n\t\t\t\t\t\t\t\t\t\t\t\tkey=\"text\"\n\t\t\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t\t\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.15 }}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-recording-transcript-text\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{transcribedText}\n\t\t\t\t\t\t\t\t\t\t\t\t<motion.span\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-recording-cursor\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: [1, 0] }}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.8, repeat: Infinity, repeatType: \"reverse\" }}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</motion.p>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<motion.p\n\t\t\t\t\t\t\t\t\t\t\t\tkey=\"placeholder\"\n\t\t\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 0.5 }}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-recording-transcript-placeholder\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\tListening...\n\t\t\t\t\t\t\t\t\t\t\t</motion.p>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t{/* Bottom bar: Cancel · dot timer · confirm */}\n\t\t\t\t\t\t\t\t<div className=\"payman-recording-bar\">\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={handleCancel}\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-recording-btn-cancel\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Cancel recording\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\tCancel\n\t\t\t\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t\t\t\t<div className=\"payman-recording-indicator\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"payman-recording-dot\" />\n\t\t\t\t\t\t\t\t\t\t<span className=\"payman-recording-timer\">\n\t\t\t\t\t\t\t\t\t\t\t{formatTime(recordingSeconds)}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={handleConfirm}\n\t\t\t\t\t\t\t\t\t\tclassName=\"payman-recording-btn-confirm\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Confirm recording\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Check className=\"w-4 h-4\" strokeWidth={2.5} />\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t/* ======== Normal Input State ======== */\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tkey=\"input\"\n\t\t\t\t\t\t\t\tinitial={false}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\t\texit={{ opacity: 0, y: 6 }}\n\t\t\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"payman-chat-input\",\n\t\t\t\t\t\t\t\t\tisFocused && \"payman-chat-input--focused\"\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{/* Textarea */}\n\t\t\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\t\t\tref={textareaRef}\n\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t\tonChange={(e) => onChange(e.target.value)}\n\t\t\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\t\t\tonFocus={() => setIsFocused(true)}\n\t\t\t\t\t\t\t\t\tonBlur={() => setIsFocused(false)}\n\t\t\t\t\t\t\t\t\tonClick={onClick}\n\t\t\t\t\t\t\t\t\tdisabled={isInputDisabled}\n\t\t\t\t\t\t\t\t\tplaceholder={getPlaceholder()}\n\t\t\t\t\t\t\t\t\tclassName=\"payman-chat-input-field\"\n\t\t\t\t\t\t\t\t\trows={1}\n\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t{/* Bottom action bar */}\n\t\t\t\t\t\t\t\t<div className=\"payman-chat-input-bottom\">\n\t\t\t\t\t\t\t\t\t{/* Left: reset session */}\n\t\t\t\t\t\t\t\t\t<div className=\"payman-chat-input-actions-left\">\n\t\t\t\t\t\t\t\t\t\t{showResetSession && onResetSession && (\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={onResetSession}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isWaitingForResponse}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-chat-input-btn-reset\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"New Session\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<RotateCcw className=\"w-3.5 h-3.5\" strokeWidth={2.5} />\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"payman-chat-input-btn-reset-tooltip\">New Session</span>\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t{/* Right: voice + send */}\n\t\t\t\t\t\t\t\t\t<div className=\"payman-chat-input-actions\">\n\t\t\t\t\t\t\t\t\t\t{showVoiceButton && (\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={onVoicePress}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isVoiceButtonDisabled}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-chat-input-btn-voice\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"Voice input\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<Mic className=\"w-[18px] h-[18px]\" />\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={onSend}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={!canSend}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"payman-chat-input-btn-send\"\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Send message\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<ArrowUp className=\"w-4 h-4\" strokeWidth={2.5} />\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t<p className=\"payman-chat-input-disclaimer\">{AI_DISCLAIMER_TEXT}</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { AnimatePresence, motion } from \"framer-motion\";\nimport { Loader2, X } from \"lucide-react\";\nimport type { CSSProperties } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\n\ntype ImageLightboxProps = {\n\tsrc: string;\n\talt?: string;\n\tonClose: () => void;\n};\n\nexport function ImageLightbox({\n\tsrc,\n\talt = \"\",\n\tonClose,\n}: ImageLightboxProps) {\n\tconst [isMounted, setIsMounted] = useState(false);\n\tconst [isImageLoaded, setIsImageLoaded] = useState(false);\n\tconst overlayStyle: CSSProperties = {\n\t\tposition: \"fixed\",\n\t\tinset: 0,\n\t\tzIndex: 2147483647,\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tpadding: 16,\n\t\tbackground: \"rgba(2, 6, 23, 0.92)\",\n\t\tisolation: \"isolate\",\n\t};\n\tconst frameStyle: CSSProperties = {\n\t\tposition: \"relative\",\n\t\twidth: \"min(92vw, 1280px)\",\n\t\theight: \"min(88vh, 920px)\",\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\toverflow: \"hidden\",\n\t};\n\n\tuseEffect(() => {\n\t\tsetIsMounted(true);\n\t\treturn () => setIsMounted(false);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tsetIsImageLoaded(false);\n\t}, [src]);\n\n\tuseEffect(() => {\n\t\tif (typeof document === \"undefined\") return;\n\n\t\tconst previousOverflow = document.body.style.overflow;\n\t\tdocument.body.style.overflow = \"hidden\";\n\n\t\treturn () => {\n\t\t\tdocument.body.style.overflow = previousOverflow;\n\t\t};\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (typeof document === \"undefined\") return;\n\n\t\tconst handleKeyDown = (event: KeyboardEvent) => {\n\t\t\tif (event.key === \"Escape\") {\n\t\t\t\tonClose();\n\t\t\t}\n\t\t};\n\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"keydown\", handleKeyDown);\n\t\t};\n\t}, [onClose]);\n\n\tif (!isMounted || typeof document === \"undefined\") {\n\t\treturn null;\n\t}\n\n\treturn createPortal(\n\t\t<AnimatePresence>\n\t\t\t<motion.div\n\t\t\t\tstyle={overlayStyle}\n\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\ttransition={{ duration: 0.18 }}\n\t\t\t\tonClick={onClose}\n\t\t\t>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={onClose}\n\t\t\t\t\tclassName=\"absolute top-4 right-4 z-[1] flex h-9 w-9 items-center justify-center rounded-full bg-black/60 text-white/90 transition-colors hover:bg-black/75\"\n\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t>\n\t\t\t\t\t<X className=\"h-4 w-4\" />\n\t\t\t\t</button>\n\n\t\t\t\t<div style={frameStyle} onClick={(event) => event.stopPropagation()}>\n\t\t\t\t\t{!isImageLoaded ? (\n\t\t\t\t\t\t<div className=\"absolute inset-0 flex flex-col items-center justify-center gap-2\">\n\t\t\t\t\t\t\t<Loader2 className=\"h-5 w-5 animate-spin text-white/80\" />\n\t\t\t\t\t\t\t<p className=\"text-sm font-medium text-white/90\">\n\t\t\t\t\t\t\t\tLoading image\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p className=\"text-xs text-white/60\">Reference image</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : null}\n\n\t\t\t\t\t<div className=\"flex h-full w-full items-center justify-center p-3 sm:p-4\">\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\t\talt={alt}\n\t\t\t\t\t\t\tdraggable={false}\n\t\t\t\t\t\t\tonLoad={() => setIsImageLoaded(true)}\n\t\t\t\t\t\t\tclassName={`block h-full w-full rounded-xl object-contain shadow-2xl transition-opacity duration-200 ${\n\t\t\t\t\t\t\t\tisImageLoaded ? \"opacity-100\" : \"opacity-0\"\n\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</motion.div>\n\t\t</AnimatePresence>,\n\t\tdocument.body,\n\t);\n}\n","import { Loader2 } from \"lucide-react\";\nimport type { CSSProperties } from \"react\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { ImageLightbox } from \"./ImageLightbox\";\n\nconst RAG_IMAGE_PATH_REGEX =\n\t/^(?:https?:\\/\\/[^/\\s]+)?\\/api\\/rag\\/chunks\\/[^\"'\\s]+\\/image(?:[?#][^\"'\\s]*)?$/;\n\nfunction isUnresolvedRagImageSource(src: string) {\n\treturn RAG_IMAGE_PATH_REGEX.test(src);\n}\n\nfunction LoadingImageCard({\n\tlabel,\n\tdescription,\n}: {\n\tlabel: string;\n\tdescription: string;\n}) {\n\treturn (\n\t\t<span className=\"my-3 flex min-h-36 w-full flex-col items-center justify-center gap-2 px-4 py-5 text-center\">\n\t\t\t<Loader2 className=\"h-5 w-5 animate-spin text-slate-500 dark:text-slate-300\" />\n\t\t\t<span className=\"text-xs font-medium text-slate-600 dark:text-slate-200\">\n\t\t\t\t{label}\n\t\t\t</span>\n\t\t\t<span className=\"text-[11px] leading-relaxed text-slate-500/90 dark:text-slate-300/80\">\n\t\t\t\t{description}\n\t\t\t</span>\n\t\t</span>\n\t);\n}\n\nfunction BrokenImageCard({ alt }: { alt?: string }) {\n\treturn (\n\t\t<span className=\"my-3 flex min-h-44 w-full flex-col items-center justify-center gap-2 rounded-xl border border-dashed border-red-200 bg-red-50/60 px-4 py-5 text-center dark:border-red-900/40 dark:bg-red-950/20\">\n\t\t\t<span className=\"text-xs font-medium text-red-600 dark:text-red-300\">\n\t\t\t\tUnable to load image\n\t\t\t</span>\n\t\t\t{alt ? (\n\t\t\t\t<span className=\"max-w-sm text-[11px] leading-relaxed text-red-500/80 dark:text-red-200/80\">\n\t\t\t\t\t{alt}\n\t\t\t\t</span>\n\t\t\t) : null}\n\t\t</span>\n\t);\n}\n\ntype MarkdownImageProps = {\n\tsrc?: string;\n\talt?: string;\n\tisResolving?: boolean;\n};\n\nexport function MarkdownImage({\n\tsrc,\n\talt,\n\tisResolving = false,\n}: MarkdownImageProps) {\n\tconst imageFrameStyle: CSSProperties = {\n\t\twidth: \"min(100%, 32rem)\",\n\t\tmaxWidth: \"100%\",\n\t};\n\tconst imageStyle: CSSProperties = {\n\t\tdisplay: \"block\",\n\t\twidth: \"100%\",\n\t\theight: \"auto\",\n\t\tmaxWidth: \"100%\",\n\t\tmaxHeight: \"18rem\",\n\t\tobjectFit: \"contain\",\n\t};\n\tconst [isLoaded, setIsLoaded] = useState(false);\n\tconst [hasError, setHasError] = useState(false);\n\tconst [isLightboxOpen, setIsLightboxOpen] = useState(false);\n\tconst isUnresolvedRagImage = useMemo(\n\t\t() => (src ? isUnresolvedRagImageSource(src) : false),\n\t\t[src]\n\t);\n\tconst isResolvingRagImage = isResolving && isUnresolvedRagImage;\n\n\tuseEffect(() => {\n\t\tsetIsLoaded(false);\n\t\tsetHasError(false);\n\t\tsetIsLightboxOpen(false);\n\t}, [src]);\n\n\tif (!src) {\n\t\treturn null;\n\t}\n\n\tif (isResolvingRagImage) {\n\t\treturn (\n\t\t\t<LoadingImageCard label=\"Loading image\" description=\"Reference image\" />\n\t\t);\n\t}\n\n\tif (hasError) {\n\t\treturn <BrokenImageCard alt={alt} />;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<span className=\"my-3 block w-full\">\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tif (isLoaded) {\n\t\t\t\t\t\t\tsetIsLightboxOpen(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t\tdisabled={!isLoaded}\n\t\t\t\t\taria-busy={!isLoaded}\n\t\t\t\t\tclassName=\"group relative mx-auto flex w-full items-center justify-center overflow-hidden rounded-xl bg-black/[0.03] px-3 py-3 text-left transition-colors hover:bg-black/[0.05] disabled:cursor-wait disabled:hover:bg-black/[0.03] dark:bg-white/[0.03] dark:hover:bg-white/[0.05] dark:disabled:hover:bg-white/[0.03]\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t...imageFrameStyle,\n\t\t\t\t\t\t...(!isLoaded ? { minHeight: \"9rem\" } : {}),\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\talt={alt || \"\"}\n\t\t\t\t\t\tclassName={`relative z-[1] block h-auto max-h-[22rem] w-full max-w-full rounded-lg object-contain transition-opacity duration-200 ${\n\t\t\t\t\t\t\tisLoaded ? \"opacity-100\" : \"opacity-0\"\n\t\t\t\t\t\t}`}\n\t\t\t\t\t\tstyle={imageStyle}\n\t\t\t\t\t\tonLoad={() => {\n\t\t\t\t\t\t\tsetHasError(false);\n\t\t\t\t\t\t\tsetIsLoaded(true);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonError={() => {\n\t\t\t\t\t\t\tsetIsLoaded(false);\n\t\t\t\t\t\t\tsetHasError(true);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</button>\n\t\t\t</span>\n\n\t\t\t{isLightboxOpen && isLoaded ? (\n\t\t\t\t<ImageLightbox\n\t\t\t\t\tsrc={src}\n\t\t\t\t\talt={alt}\n\t\t\t\t\tonClose={() => setIsLightboxOpen(false)}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t</>\n\t);\n}\n","import type { Components } from \"react-markdown\";\nimport { MarkdownImage } from \"./MarkdownImage\";\n\ntype CreateMarkdownComponentsOptions = {\n\tisResolvingImages?: boolean;\n};\n\nexport function createMarkdownComponents(\n\toptions: CreateMarkdownComponentsOptions = {},\n): Components {\n\treturn {\n\t\tp: ({ children }) => (\n\t\t\t<p className=\"mb-3 last:mb-0 text-sm leading-relaxed\">{children}</p>\n\t\t),\n\t\tcode: ({ className: codeClassName, children }) => {\n\t\t\tconst isInline = !codeClassName;\n\n\t\t\treturn isInline ? (\n\t\t\t\t<code className=\"payman-agent-code-inline rounded-md px-1.5 py-0.5 font-mono text-xs break-all\">\n\t\t\t\t\t{children}\n\t\t\t\t</code>\n\t\t\t) : (\n\t\t\t\t<code className=\"payman-agent-code-block my-2 block overflow-x-auto rounded-lg p-3 font-mono text-xs whitespace-pre\">\n\t\t\t\t\t{children}\n\t\t\t\t</code>\n\t\t\t);\n\t\t},\n\t\tpre: ({ children }) => (\n\t\t\t<pre className=\"my-2 max-w-full overflow-x-auto rounded-lg\">\n\t\t\t\t{children}\n\t\t\t</pre>\n\t\t),\n\t\tul: ({ children }) => (\n\t\t\t<ul className=\"mb-3 ml-4 list-disc space-y-1 text-sm\">{children}</ul>\n\t\t),\n\t\tol: ({ children }) => (\n\t\t\t<ol className=\"mb-3 ml-4 list-decimal space-y-1 text-sm\">{children}</ol>\n\t\t),\n\t\tli: ({ children }) => <li className=\"text-sm leading-relaxed\">{children}</li>,\n\t\th1: ({ children }) => (\n\t\t\t<h1 className=\"mt-4 mb-2 text-lg font-semibold first:mt-0\">{children}</h1>\n\t\t),\n\t\th2: ({ children }) => (\n\t\t\t<h2 className=\"mt-3 mb-2 text-base font-semibold first:mt-0\">\n\t\t\t\t{children}\n\t\t\t</h2>\n\t\t),\n\t\th3: ({ children }) => (\n\t\t\t<h3 className=\"mt-2 mb-1 text-sm font-semibold first:mt-0\">{children}</h3>\n\t\t),\n\t\tstrong: ({ children }) => <strong className=\"font-semibold\">{children}</strong>,\n\t\tem: ({ children }) => <em className=\"italic\">{children}</em>,\n\t\tblockquote: ({ children }) => (\n\t\t\t<blockquote className=\"payman-agent-blockquote my-2 pl-4 italic\">\n\t\t\t\t{children}\n\t\t\t</blockquote>\n\t\t),\n\t\thr: () => <hr className=\"payman-agent-hr my-4\" />,\n\t\ta: ({ href, children }) => (\n\t\t\t<a\n\t\t\t\thref={href}\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\tclassName=\"payman-agent-link underline decoration-1 underline-offset-2\"\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</a>\n\t\t),\n\t\timg: ({ src, alt }) => (\n\t\t\t<MarkdownImage\n\t\t\t\tsrc={typeof src === \"string\" ? src : undefined}\n\t\t\t\talt={typeof alt === \"string\" ? alt : undefined}\n\t\t\t\tisResolving={options.isResolvingImages}\n\t\t\t/>\n\t\t),\n\t\ttable: ({ children }) => (\n\t\t\t<div className=\"relative my-4 -mx-1 w-full overflow-x-auto\">\n\t\t\t\t<table className=\"payman-agent-table min-w-full caption-bottom overflow-hidden rounded-lg text-sm\">\n\t\t\t\t\t{children}\n\t\t\t\t</table>\n\t\t\t</div>\n\t\t),\n\t\tthead: ({ children }) => (\n\t\t\t<thead className=\"payman-agent-thead [&_tr]:border-b\">{children}</thead>\n\t\t),\n\t\ttbody: ({ children }) => (\n\t\t\t<tbody className=\"[&_tr:last-child]:border-0\">{children}</tbody>\n\t\t),\n\t\ttr: ({ children }) => (\n\t\t\t<tr className=\"payman-agent-tr border-b transition-colors\">{children}</tr>\n\t\t),\n\t\tth: ({ children }) => (\n\t\t\t<th className=\"h-10 px-3 text-left align-middle text-xs font-medium whitespace-nowrap\">\n\t\t\t\t{children}\n\t\t\t</th>\n\t\t),\n\t\ttd: ({ children }) => (\n\t\t\t<td className=\"p-3 align-middle text-sm whitespace-nowrap\">{children}</td>\n\t\t),\n\t};\n}\n","import { AnimatePresence, motion } from \"framer-motion\";\nimport {\n\tBinoculars,\n\tCheck,\n\tChevronDown,\n\tChevronRight,\n\tClock,\n\tLoader2,\n\tSparkles,\n\tX,\n} from \"lucide-react\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport type { AgentMessageProps, StreamingStep } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { createMarkdownComponents } from \"./markdownComponents\";\nimport {\n\tgetConflictErrorMessage,\n\tisFriendlyWorkflowError,\n} from \"../../utils/errorMessages\";\nimport { formatElapsedTime } from \"../../utils/formatDate\";\n\n/** Expandable block shown after streaming ends with all accumulated thinking. */\nfunction ThinkingBlock({ text }: { text: string }) {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst hasContent = typeof text === \"string\" && text.trim().length > 0;\n\n\tif (!hasContent) return null;\n\n\treturn (\n\t\t<div className=\"mt-1.5 mb-1.5\">\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => setIsOpen((prev) => !prev)}\n\t\t\t\tclassName=\"inline-flex items-center gap-1 text-[10px] payman-agent-thinking-toggle transition-colors\"\n\t\t\t\taria-expanded={isOpen}\n\t\t\t\taria-label={\n\t\t\t\t\tisOpen ? \"Collapse thought process\" : \"Expand thought process\"\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t<motion.div\n\t\t\t\t\tanimate={{ rotate: isOpen ? 180 : 0 }}\n\t\t\t\t\ttransition={{ duration: 0.15 }}\n\t\t\t\t\tclassName=\"shrink-0\"\n\t\t\t\t>\n\t\t\t\t\t<ChevronDown className=\"h-3 w-3\" />\n\t\t\t\t</motion.div>\n\t\t\t\t<span>Thought process</span>\n\t\t\t</button>\n\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t{isOpen && (\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tinitial={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\tanimate={{ height: \"auto\", opacity: 1 }}\n\t\t\t\t\t\texit={{ height: 0, opacity: 0 }}\n\t\t\t\t\t\ttransition={{ duration: 0.2, ease: \"easeInOut\" }}\n\t\t\t\t\t\tclassName=\"overflow-hidden\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"mt-1 payman-agent-thinking-block rounded-md p-2 overflow-y-auto overflow-x-hidden\">\n\t\t\t\t\t\t\t<p className=\"m-0 text-xs payman-agent-thinking-block-text whitespace-pre-wrap leading-relaxed\">\n\t\t\t\t\t\t\t\t{text}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</motion.div>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t</div>\n\t);\n}\nconst FRIENDLY_ERROR_MESSAGE = \"Oops, something went wrong. Please try again.\";\n\n/** Content that looks like a raw error (INTENT_ERROR message) rather than a user-facing workflow response */\nfunction looksLikeRawError(text: string): boolean {\n\tif (!text || text.length < 10) return false;\n\treturn text.includes(\"errorType=\") || /failed:\\s*\\{/.test(text);\n}\n\nexport function AgentMessage({\n\tmessage,\n\tanimated = false,\n\tshowAgentName = false,\n\tagentName = \"Assistant\",\n\tshowAvatar = false,\n\tlayout = \"full-width\",\n\tshowExecutionSteps = false,\n\tshowStreamingDot = false,\n\tstreamingStepsText,\n\tcompletedStepsText,\n\tonExecutionTraceClick,\n}: AgentMessageProps) {\n\tconst isStreaming = message.isStreaming ?? false;\n\tconst hasSteps = message.steps && message.steps.length > 0;\n\tconst hasTraceData =\n\t\t!!(message.tracingData || message.executionId) && !isStreaming;\n\tconst isCancelled = message.isCancelled ?? false;\n\tconst currentExecutingStepId = message.currentExecutingStepId;\n\n\tconst [isStepsExpanded, setIsStepsExpanded] = useState(false);\n\tconst wasStreamingRef = useRef(isStreaming);\n\n\tuseEffect(() => {\n\t\tif (isStreaming && hasSteps) {\n\t\t\tsetIsStepsExpanded(true);\n\t\t}\n\t\tif (wasStreamingRef.current && !isStreaming) {\n\t\t\tsetIsStepsExpanded(false);\n\t\t}\n\t\twasStreamingRef.current = isStreaming;\n\t}, [isStreaming, hasSteps]);\n\n\tconst totalElapsedMs = hasSteps\n\t\t? message.steps!.reduce((sum, step) => sum + (step.elapsedMs || 0), 0)\n\t\t: 0;\n\n\tconst currentMessage = message.currentMessage;\n\tconst rawContent = message.streamingContent || message.content || \"\";\n\tconst content = rawContent.replace(/\\\\n/g, \"\\n\");\n\t// When workflow completes with a response (e.g. after INTENT_ERROR), prefer that over error UI. Only show friendly error when there's no meaningful response or when content is raw error dump.\n\tconst hasMeaningfulContent =\n\t\tcontent.length > 0 && !looksLikeRawError(content);\n\t// Also show friendly error when workflow completed with no content (e.g. preflight failed, no workflowMsg)\n\tconst completedWithNoContent =\n\t\t!isStreaming &&\n\t\t!isCancelled &&\n\t\tcontent.length === 0 &&\n\t\t(message.streamProgress === \"completed\" || message.streamProgress === \"error\");\n\tconst conflictErrorMessage = getConflictErrorMessage(message.errorDetails);\n\tconst isError =\n\t\t!!conflictErrorMessage ||\n\t\t((isFriendlyWorkflowError(message.errorDetails) ||\n\t\t\tlooksLikeRawError(content)) &&\n\t\t\t!hasMeaningfulContent) ||\n\t\tcompletedWithNoContent;\n\tconst activeThinkingText = message.activeThinkingText;\n\tconst allThinkingText = message.allThinkingText;\n\tconst currentStep = useMemo(\n\t\t() =>\n\t\t\tmessage.steps?.find(\n\t\t\t\t(s) => s.id === currentExecutingStepId && s.status === \"in_progress\"\n\t\t\t),\n\t\t[message.steps, currentExecutingStepId]\n\t);\n\tconst markdownRenderers = useMemo(\n\t\t() =>\n\t\t\tcreateMarkdownComponents({\n\t\t\t\tisResolvingImages: message.isResolvingImages,\n\t\t\t}),\n\t\t[message.isResolvingImages],\n\t);\n\n\tconst getStepsLabel = (streaming: boolean) => {\n\t\tconst count = message.steps!.length;\n\t\tconst stepWord = count === 1 ? \"step\" : \"steps\";\n\t\tif (streaming) {\n\t\t\tif (streamingStepsText)\n\t\t\t\treturn streamingStepsText.replace(\"{count}\", count.toString());\n\t\t\treturn `${count} ${stepWord} in progress`;\n\t\t}\n\t\tif (completedStepsText) {\n\t\t\treturn completedStepsText\n\t\t\t\t.replace(\"{count}\", count.toString())\n\t\t\t\t.replace(\"{time}\", (totalElapsedMs / 1000).toFixed(1));\n\t\t}\n\t\treturn `${count} ${stepWord} completed`;\n\t};\n\n\t// All icons in a fixed 4x4 wrapper for alignment\n\tconst renderStepIcon = (\n\t\tstep: StreamingStep,\n\t\tisCurrentlyExecuting: boolean\n\t) => {\n\t\tconst wrapper = \"h-4 w-4 flex items-center justify-center shrink-0\";\n\t\tif (isCurrentlyExecuting)\n\t\t\treturn (\n\t\t\t\t<div className={wrapper}>\n\t\t\t\t\t<Loader2 className=\"h-3.5 w-3.5 payman-agent-step-icon--active animate-spin\" />\n\t\t\t\t</div>\n\t\t\t);\n\t\tif (step.status === \"pending\" && isCancelled)\n\t\t\treturn (\n\t\t\t\t<div className={wrapper}>\n\t\t\t\t\t<div className=\"h-1.5 w-1.5 rounded-full payman-agent-step-icon--pending\" />\n\t\t\t\t</div>\n\t\t\t);\n\t\tif (step.status === \"pending\" || step.status === \"in_progress\")\n\t\t\treturn (\n\t\t\t\t<div className={wrapper}>\n\t\t\t\t\t<Loader2 className=\"h-3.5 w-3.5 payman-agent-step-icon--in-progress-dim animate-spin\" />\n\t\t\t\t</div>\n\t\t\t);\n\t\tif (step.status === \"completed\")\n\t\t\treturn (\n\t\t\t\t<div className={wrapper}>\n\t\t\t\t\t<Check\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"h-3.5 w-3.5\",\n\t\t\t\t\t\t\tstep.eventType === \"USER_ACTION_SUCCESS\"\n\t\t\t\t\t\t\t\t? \"payman-agent-step-icon--success\"\n\t\t\t\t\t\t\t\t: \"payman-agent-step-icon--success-dim\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t);\n\t\tif (step.status === \"error\")\n\t\t\treturn (\n\t\t\t\t<div className={wrapper}>\n\t\t\t\t\t<X className=\"h-3.5 w-3.5 payman-agent-step-icon--error\" />\n\t\t\t\t</div>\n\t\t\t);\n\t\treturn (\n\t\t\t<div className={wrapper}>\n\t\t\t\t<div className=\"h-1.5 w-1.5 rounded-full payman-agent-step-icon--pending-dim\" />\n\t\t\t</div>\n\t\t);\n\t};\n\n\tconst stepsListContent = hasSteps && (\n\t\t<AnimatePresence initial={false}>\n\t\t\t{isStepsExpanded && (\n\t\t\t\t<motion.div\n\t\t\t\t\tinitial={{ height: 0, opacity: 0 }}\n\t\t\t\t\tanimate={{ height: \"auto\", opacity: 1 }}\n\t\t\t\t\texit={{ height: 0, opacity: 0 }}\n\t\t\t\t\ttransition={{ duration: 0.2, ease: \"easeInOut\" }}\n\t\t\t\t\tclassName=\"overflow-hidden\"\n\t\t\t\t>\n\t\t\t\t\t{!isStreaming && allThinkingText?.trim() && (\n\t\t\t\t\t\t<ThinkingBlock text={allThinkingText} />\n\t\t\t\t\t)}\n\t\t\t\t\t<div className=\"pt-1.5\">\n\t\t\t\t\t\t{message.steps!.map((step) => {\n\t\t\t\t\t\t\tconst isCurrentlyExecuting =\n\t\t\t\t\t\t\t\tstep.id === currentExecutingStepId &&\n\t\t\t\t\t\t\t\tstep.status === \"in_progress\" &&\n\t\t\t\t\t\t\t\tisStreaming &&\n\t\t\t\t\t\t\t\t!isCancelled;\n\t\t\t\t\t\t\tconst hasTime = step.elapsedMs != null && step.elapsedMs > 0;\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<div key={step.id} className=\"mb-1.5\">\n\t\t\t\t\t\t\t\t\t{/* Step row: icon + message */}\n\t\t\t\t\t\t\t\t\t<div className=\"flex gap-1.5 items-start\">\n\t\t\t\t\t\t\t\t\t\t<div className=\"mt-px\">\n\t\t\t\t\t\t\t\t\t\t\t{renderStepIcon(step, isCurrentlyExecuting)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\"text-xs leading-relaxed min-w-0 break-words\",\n\t\t\t\t\t\t\t\t\t\t\t\tisCurrentlyExecuting && \"shimmer-text font-medium\",\n\t\t\t\t\t\t\t\t\t\t\t\t!isCurrentlyExecuting &&\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep.status === \"error\" &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"payman-agent-step-text--error\",\n\t\t\t\t\t\t\t\t\t\t\t\t!isCurrentlyExecuting &&\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep.eventType === \"USER_ACTION_SUCCESS\" &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"payman-agent-step-text--success\",\n\t\t\t\t\t\t\t\t\t\t\t\t!isCurrentlyExecuting &&\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep.status === \"completed\" &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"payman-agent-step-text--completed\",\n\t\t\t\t\t\t\t\t\t\t\t\t!isCurrentlyExecuting &&\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep.status === \"pending\" &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"payman-agent-step-text--pending\",\n\t\t\t\t\t\t\t\t\t\t\t\t!isCurrentlyExecuting &&\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep.status === \"in_progress\" &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"payman-agent-step-text--in-progress\"\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{step.message}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t{/* Time badge — indented to align with step text (16px icon + 6px gap = 22px) */}\n\t\t\t\t\t\t\t\t\t{hasTime && (\n\t\t\t\t\t\t\t\t\t\t<div className=\"pl-[22px] mt-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1 px-1.5 py-0.5 rounded-md payman-agent-step-time leading-none\">\n\t\t\t\t\t\t\t\t\t\t\t\t<Clock className=\"h-2.5 w-2.5 shrink-0 payman-agent-step-time-icon\" />\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-[10px] font-mono payman-agent-step-time-text\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{formatElapsedTime(step.elapsedMs!)}\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</div>\n\t\t\t\t</motion.div>\n\t\t\t)}\n\t\t</AnimatePresence>\n\t);\n\n\tconst stepsToggleRef = useRef<HTMLButtonElement>(null);\n\n\tconst handleStepsToggle = useCallback(() => {\n\t\tsetIsStepsExpanded((prev) => {\n\t\t\tconst next = !prev;\n\t\t\t// Dispatch event so MessageList can scroll to show expanded steps\n\t\t\tif (next) {\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tstepsToggleRef.current\n\t\t\t\t\t\t?.closest(\".payman-scrollbar\")\n\t\t\t\t\t\t?.dispatchEvent(new CustomEvent(\"payman-steps-toggle\"));\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn next;\n\t\t});\n\t}, []);\n\n\tconst stepsToggle = (streaming: boolean) => (\n\t\t<button\n\t\t\tref={stepsToggleRef}\n\t\t\tonClick={handleStepsToggle}\n\t\t\tclassName=\"inline-flex items-center gap-1.5 text-xs payman-agent-step-toggle transition-colors\"\n\t\t>\n\t\t\t<motion.div\n\t\t\t\tanimate={{ rotate: isStepsExpanded ? 90 : 0 }}\n\t\t\t\ttransition={{ duration: 0.15 }}\n\t\t\t\tclassName=\"shrink-0\"\n\t\t\t>\n\t\t\t\t<ChevronRight className=\"h-3 w-3\" />\n\t\t\t</motion.div>\n\t\t\t<span>{getStepsLabel(streaming)}</span>\n\t\t</button>\n\t);\n\n\t// Below-bubble steps section: only after streaming (thinking lives in bubble during stream)\n\tconst showSteps = showExecutionSteps && hasSteps && !isStreaming && !isError;\n\n\tconst messageContent = (\n\t\t<div className=\"w-full\">\n\t\t\t{/* Row: avatar + bubble + trace */}\n\t\t\t<div className=\"flex gap-3 justify-start items-start w-full\">\n\t\t\t\t{/* Avatar */}\n\t\t\t\t{showAvatar && (\n\t\t\t\t\t<div className=\"shrink-0 mt-0.5\">\n\t\t\t\t\t\t{isStreaming && showStreamingDot ? (\n\t\t\t\t\t\t\t<div className=\"h-8 w-8 flex items-center justify-center\">\n\t\t\t\t\t\t\t\t<div className=\"relative\">\n\t\t\t\t\t\t\t\t\t<div className=\"h-2.5 w-2.5 rounded-full payman-agent-avatar-dot animate-pulse\" />\n\t\t\t\t\t\t\t\t\t<div className=\"absolute inset-0 h-2.5 w-2.5 rounded-full payman-agent-avatar-dot-ping animate-ping\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div className=\"h-8 w-8 rounded-full payman-agent-avatar flex items-center justify-center\">\n\t\t\t\t\t\t\t\t<Sparkles className=\"h-3.5 w-3.5 payman-agent-avatar-icon\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{/* Bubble — constrained width */}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"min-w-0\",\n\t\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t\t? \"max-w-[85%]\"\n\t\t\t\t\t\t\t: showAvatar\n\t\t\t\t\t\t\t? \"max-w-[85%]\"\n\t\t\t\t\t\t\t: \"max-w-[80%]\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{/* User Action Result Badge */}\n\t\t\t\t\t{message.userActionResult && (\n\t\t\t\t\t\t<div className=\"mb-2\">\n\t\t\t\t\t\t\t{message.userActionResult === \"approved\" ? (\n\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1.5 px-4 py-1.5 text-xs font-semibold rounded-full payman-agent-approved shrink-0\">\n\t\t\t\t\t\t\t\t\t<Check className=\"w-3.5 h-3.5 shrink-0\" strokeWidth={2.5} />\n\t\t\t\t\t\t\t\t\tVerified\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1.5 px-4 py-1.5 text-xs font-semibold rounded-full payman-agent-rejected shrink-0\">\n\t\t\t\t\t\t\t\t\t<X className=\"w-3.5 h-3.5 shrink-0\" strokeWidth={2.5} />\n\t\t\t\t\t\t\t\t\tRejected\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"overflow-hidden w-full min-w-0 px-4 py-3 rounded-2xl rounded-tl-md transition-all duration-200\",\n\t\t\t\t\t\t\tlayout === \"centered\"\n\t\t\t\t\t\t\t\t? cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-agent-bubble payman-agent-bubble--centered\",\n\t\t\t\t\t\t\t\t\t\tisStreaming && \"streaming\",\n\t\t\t\t\t\t\t\t\t\tisError && \"error\"\n\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t\t: cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-agent-bubble\",\n\t\t\t\t\t\t\t\t\t\tisError && \"payman-agent-bubble--error\"\n\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{showAgentName && (\n\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"text-sm font-semibold mb-1 leading-none payman-agent-name\",\n\t\t\t\t\t\t\t\t\tisStreaming && !content && \"animate-pulse\"\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{isStreaming && !content ? \"Thought Process\" : agentName}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"text-sm leading-relaxed min-w-0 w-full break-words overflow-wrap-anywhere\",\n\t\t\t\t\t\t\t\tshowAgentName && \"mt-1\"\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{isStreaming && !content ? (\n\t\t\t\t\t\t\t\t// Streaming without content — show thinking/step indicator\n\t\t\t\t\t\t\t\tactiveThinkingText ? (\n\t\t\t\t\t\t\t\t\t<div className=\"flex gap-2 items-start\">\n\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"h-4 w-4 mt-0.5 payman-agent-thinking-spinner animate-spin shrink-0\" />\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-sm leading-relaxed min-w-0 break-words payman-agent-thinking-text whitespace-pre-wrap flex-1\">\n\t\t\t\t\t\t\t\t\t\t\t{activeThinkingText}\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"inline-block w-0.5 h-3.5 payman-agent-thinking-cursor animate-pulse ml-0.5 align-text-bottom\" />\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t) : currentStep ? (\n\t\t\t\t\t\t\t\t\t<div className=\"flex gap-1.5 items-start\">\n\t\t\t\t\t\t\t\t\t\t<div className=\"mt-0.5 shrink-0\">\n\t\t\t\t\t\t\t\t\t\t\t{renderStepIcon(currentStep, true)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-sm leading-relaxed min-w-0 break-words shimmer-text font-medium flex-1\">\n\t\t\t\t\t\t\t\t\t\t\t{currentStep.message}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<div className=\"flex gap-2.5 items-start\">\n\t\t\t\t\t\t\t\t\t\t<Loader2 className=\"w-4 h-4 mt-0.5 payman-agent-thinking-spinner animate-spin shrink-0\" />\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-sm payman-agent-thinking-text flex-1\">\n\t\t\t\t\t\t\t\t\t\t\t{currentMessage || \"Thinking...\"}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) : isCancelled && !content ? (\n\t\t\t\t\t\t\t\t<div className=\"flex gap-2.5 items-start\">\n\t\t\t\t\t\t\t\t\t<X className=\"w-4 h-4 mt-0.5 payman-agent-cancelled-icon shrink-0\" />\n\t\t\t\t\t\t\t\t\t<span className=\"text-sm payman-agent-cancelled-text italic flex-1\">\n\t\t\t\t\t\t\t\t\t\t{currentMessage || \"Request was stopped.\"}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"payman-markdown payman-agent-markdown prose prose-sm dark:prose-invert max-w-none min-w-0 w-full break-words overflow-wrap-anywhere\",\n\t\t\t\t\t\t\t\t\t\tisError && \"payman-agent-markdown--error\",\n\t\t\t\t\t\t\t\t\t\tisStreaming && content && \"streaming-cursor\"\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ReactMarkdown\n\t\t\t\t\t\t\t\t\t\tremarkPlugins={[remarkGfm]}\n\t\t\t\t\t\t\t\t\t\tcomponents={markdownRenderers}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{isError\n\t\t\t\t\t\t\t\t\t\t\t? conflictErrorMessage ?? FRIENDLY_ERROR_MESSAGE\n\t\t\t\t\t\t\t\t\t\t\t: content ||\n\t\t\t\t\t\t\t\t\t\t\t (isStreaming\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"Thinking...\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isCancelled\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"Request was stopped.\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"\")}\n\t\t\t\t\t\t\t\t\t</ReactMarkdown>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Trace Button */}\n\t\t\t\t{hasTraceData && onExecutionTraceClick && (\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\tonExecutionTraceClick({\n\t\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\t\ttracingData: message.tracingData,\n\t\t\t\t\t\t\t\texecutionId: message.executionId,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"p-2 rounded-lg shrink-0 payman-agent-trace\",\n\t\t\t\t\t\t\t\"active:scale-95 transition-all duration-150\",\n\t\t\t\t\t\t\tmessage.userActionResult ? \"mt-8\" : \"mt-0.5\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t\ttitle=\"View execution trace\"\n\t\t\t\t\t\taria-label=\"View execution trace\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Binoculars className=\"w-4 h-4 payman-agent-trace-icon\" />\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* Steps — outside the flex row (only when not streaming) */}\n\t\t\t{showSteps && (\n\t\t\t\t<div className={cn(\"mt-1.5\", showAvatar ? \"ml-11\" : \"ml-0\")}>\n\t\t\t\t\t{showExecutionSteps &&\n\t\t\t\t\t\thasSteps &&\n\t\t\t\t\t\t!isStreaming &&\n\t\t\t\t\t\t!isError &&\n\t\t\t\t\t\tstepsToggle(false)}\n\t\t\t\t\t{stepsListContent}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n\n\tif (animated) {\n\t\treturn (\n\t\t\t<motion.div\n\t\t\t\tinitial={{ opacity: 0, y: 8, scale: 0.98 }}\n\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\ttransition={{ duration: 0.25, ease: [0.25, 0.46, 0.45, 0.94] }}\n\t\t\t>\n\t\t\t\t{messageContent}\n\t\t\t</motion.div>\n\t\t);\n\t}\n\n\treturn messageContent;\n}\n","import { motion } from \"framer-motion\";\nimport { User } from \"lucide-react\";\nimport type { UserMessageProps } from \"../../types\";\nimport { cn, formatDate } from \"../../utils\";\n\nexport function UserMessage({\n\tmessage,\n\tanimated = false,\n\tshowAvatar = false,\n}: UserMessageProps) {\n\tconst content = (\n\t\t<div className=\"flex gap-3 justify-end w-full\">\n\t\t\t{/* Message Container */}\n\t\t\t<div className=\"max-w-[80%] min-w-0 flex flex-col items-end\">\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"rounded-2xl rounded-br-md px-4 py-3\",\n\t\t\t\t\t\t\"bg-primary text-primary-foreground\",\n\t\t\t\t\t\t\"shadow-sm\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<p className=\"text-sm leading-relaxed whitespace-pre-wrap break-words\">\n\t\t\t\t\t\t{message.content}\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t\t<span className=\"text-[10px] mt-1.5 mr-1 text-muted-foreground/70 select-none\">\n\t\t\t\t\t{formatDate(message.timestamp)}\n\t\t\t\t</span>\n\t\t\t</div>\n\n\t\t\t{/* Avatar */}\n\t\t\t{showAvatar && (\n\t\t\t\t<div className=\"shrink-0 mt-0.5\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"h-8 w-8 rounded-full\",\n\t\t\t\t\t\t\t\"bg-primary/10 border border-primary/20\",\n\t\t\t\t\t\t\t\"flex items-center justify-center\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<User className=\"h-3.5 w-3.5 text-primary\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n\n\tif (animated) {\n\t\treturn (\n\t\t\t<motion.div\n\t\t\t\tinitial={{ opacity: 0, y: 8, scale: 0.98 }}\n\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1 }}\n\t\t\t\ttransition={{ duration: 0.25, ease: [0.25, 0.46, 0.45, 0.94] }}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</motion.div>\n\t\t);\n\t}\n\n\treturn content;\n}","import type { MessageRowProps } from \"../../types\";\nimport { AgentMessage } from \"../AgentMessage\";\nimport { UserMessage } from \"../UserMessage\";\n\nexport function MessageRow({\n\tmessage,\n\tstage = \"DEV\",\n\tanimated = false,\n\tshowAgentName = false,\n\tagentName = \"Assistant\",\n\tshowAvatars = false,\n\tshowUserAvatar,\n\tshowAssistantAvatar,\n\tlayout = \"full-width\",\n\tshowTimestamps = false,\n\tshowExecutionSteps = false,\n\tshowStreamingDot = false,\n\tstreamingStepsText,\n\tcompletedStepsText,\n\tonExecutionTraceClick,\n}: MessageRowProps) {\n\tconst actualShowUserAvatar =\n\t\tshowUserAvatar !== undefined ? showUserAvatar : showAvatars;\n\tconst actualShowAssistantAvatar =\n\t\tshowAssistantAvatar !== undefined ? showAssistantAvatar : showAvatars;\n\n\tif (message.role === \"user\") {\n\t\treturn (\n\t\t\t<UserMessage\n\t\t\t\tmessage={message}\n\t\t\t\tanimated={animated}\n\t\t\t\tshowAvatar={actualShowUserAvatar}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<AgentMessage\n\t\t\tmessage={message}\n\t\t\tstage={stage}\n\t\t\tanimated={animated}\n\t\t\tshowAgentName={showAgentName}\n\t\t\tagentName={agentName}\n\t\t\tshowAvatar={actualShowAssistantAvatar}\n\t\t\tlayout={layout}\n\t\t\tshowTimestamp={showTimestamps}\n\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\tcompletedStepsText={completedStepsText}\n\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t/>\n\t);\n}\n","import { cn } from \"../../utils\";\n\ninterface MessageRowSkeletonProps {\n\tisRightAligned?: boolean;\n}\n\nexport function MessageRowSkeleton({\n\tisRightAligned = false,\n}: MessageRowSkeletonProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"flex w-full\",\n\t\t\t\tisRightAligned ? \"justify-end\" : \"justify-start\"\n\t\t\t)}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex flex-col gap-2 w-full\",\n\t\t\t\t\tisRightAligned ? \"items-end max-w-[70%]\" : \"items-start max-w-[80%]\"\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"rounded-2xl p-4 w-full\",\n\t\t\t\t\t\tisRightAligned\n\t\t\t\t\t\t\t? \"bg-primary/8 rounded-br-md\"\n\t\t\t\t\t\t\t: \"bg-muted/70 rounded-bl-md\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"space-y-2.5\">\n\t\t\t\t\t\t<div className=\"h-3 skeleton-pulse rounded-full bg-muted-foreground/10 w-[85%]\" />\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName=\"h-3 skeleton-pulse rounded-full bg-muted-foreground/10 w-full\"\n\t\t\t\t\t\t\tstyle={{ animationDelay: \"0.1s\" }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{!isRightAligned && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName=\"h-3 skeleton-pulse rounded-full bg-muted-foreground/10 w-[60%]\"\n\t\t\t\t\t\t\t\tstyle={{ animationDelay: \"0.2s\" }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"h-2 skeleton-pulse rounded-full bg-muted-foreground/8 w-12 mx-1\"\n\t\t\t\t\tstyle={{ animationDelay: \"0.3s\" }}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { motion } from \"framer-motion\";\nimport { ArrowDown } from \"lucide-react\";\nimport { useCallback, useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport type { MessageListProps } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport { MessageRow } from \"../MessageRow\";\nimport { MessageRowSkeleton } from \"../MessageRowSkeleton\";\n\nconst SCROLL_THRESHOLD = 150;\nconst LOAD_MORE_THRESHOLD = 80;\n\nexport function MessageList({\n\tmessages,\n\tisLoading = false,\n\temptyStateText = \"What can I help with?\",\n\tshowEmptyStateIcon = true,\n\temptyStateComponent,\n\tlayout = \"full-width\",\n\tshowTimestamps = false,\n\tstage = \"DEV\",\n\tanimated = false,\n\tshowAgentName = false,\n\tagentName = \"Assistant\",\n\tshowAvatars = false,\n\tshowUserAvatar,\n\tshowAssistantAvatar,\n\tshowExecutionSteps = false,\n\tshowStreamingDot = false,\n\tstreamingStepsText,\n\tcompletedStepsText,\n\tonExecutionTraceClick,\n\tclassName,\n\tonLoadMoreMessages,\n\tisLoadingMoreMessages = false,\n\thasMoreMessages = false,\n}: MessageListProps) {\n\tconst scrollRef = useRef<HTMLDivElement>(null);\n\tconst isNearBottomRef = useRef(true);\n\tconst [showScrollBtn, setShowScrollBtn] = useState(false);\n\tconst prevMessageCountRef = useRef(messages.length);\n\n\t// Track scroll height before prepend so we can restore position\n\tconst scrollHeightBeforePrependRef = useRef<number | null>(null);\n\tconst firstMessageIdRef = useRef<string | undefined>(messages[0]?.id);\n\n\tconst getDistanceFromBottom = useCallback(() => {\n\t\tconst el = scrollRef.current;\n\t\tif (!el) return 0;\n\t\treturn el.scrollHeight - el.scrollTop - el.clientHeight;\n\t}, []);\n\n\tconst scrollToBottom = useCallback((behavior: ScrollBehavior = \"smooth\") => {\n\t\tconst el = scrollRef.current;\n\t\tif (!el) return;\n\t\tel.scrollTo({ top: el.scrollHeight, behavior });\n\t}, []);\n\n\tconst handleScroll = useCallback(() => {\n\t\tconst el = scrollRef.current;\n\t\tif (!el) return;\n\n\t\tconst distance = getDistanceFromBottom();\n\t\tconst nearBottom = distance <= SCROLL_THRESHOLD;\n\t\tisNearBottomRef.current = nearBottom;\n\t\tsetShowScrollBtn(!nearBottom);\n\n\t\t// Trigger load-more when scrolled near the top\n\t\tif (\n\t\t\tel.scrollTop <= LOAD_MORE_THRESHOLD &&\n\t\t\thasMoreMessages &&\n\t\t\t!isLoadingMoreMessages &&\n\t\t\tonLoadMoreMessages\n\t\t) {\n\t\t\t// Snapshot scroll height before the state update so we can restore position\n\t\t\tscrollHeightBeforePrependRef.current = el.scrollHeight;\n\t\t\tonLoadMoreMessages();\n\t\t}\n\t}, [getDistanceFromBottom, hasMoreMessages, isLoadingMoreMessages, onLoadMoreMessages]);\n\n\t// After messages are prepended, restore scroll position so the view doesn't jump\n\tuseLayoutEffect(() => {\n\t\tconst el = scrollRef.current;\n\t\tconst prevHeight = scrollHeightBeforePrependRef.current;\n\t\tconst newFirstId = messages[0]?.id;\n\n\t\tif (el && prevHeight !== null && newFirstId !== firstMessageIdRef.current) {\n\t\t\tel.scrollTop = el.scrollHeight - prevHeight;\n\t\t\tscrollHeightBeforePrependRef.current = null;\n\t\t}\n\t\tfirstMessageIdRef.current = newFirstId;\n\t}, [messages]);\n\n\t// Auto-scroll when new messages arrive\n\tuseEffect(() => {\n\t\tconst prevCount = prevMessageCountRef.current;\n\t\tprevMessageCountRef.current = messages.length;\n\n\t\tif (messages.length > prevCount && isNearBottomRef.current) {\n\t\t\trequestAnimationFrame(() => scrollToBottom());\n\t\t}\n\t}, [messages.length, scrollToBottom]);\n\n\t// Auto-scroll during streaming\n\tuseEffect(() => {\n\t\tconst lastMsg = messages[messages.length - 1];\n\t\tif (!lastMsg?.isStreaming) return;\n\t\tif (!isNearBottomRef.current) return;\n\n\t\trequestAnimationFrame(() => scrollToBottom());\n\t});\n\n\t// Instant scroll on mount\n\tuseEffect(() => {\n\t\tif (messages.length > 0) {\n\t\t\tsetTimeout(() => scrollToBottom(\"instant\"), 50);\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, []);\n\n\t// Listen for steps toggle events from AgentMessage\n\t// When steps expand, scroll down a bit so they're visible\n\tuseEffect(() => {\n\t\tconst handleStepsToggle = () => {\n\t\t\t// After steps expand/collapse, if we're near the bottom, scroll to show them\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tconst distance = getDistanceFromBottom();\n\t\t\t\t\tif (distance > 0 && distance < 600) {\n\t\t\t\t\t\tscrollToBottom();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tconst el = scrollRef.current;\n\t\tif (el) {\n\t\t\tel.addEventListener(\"payman-steps-toggle\", handleStepsToggle);\n\t\t\treturn () =>\n\t\t\t\tel.removeEventListener(\"payman-steps-toggle\", handleStepsToggle);\n\t\t}\n\t}, [getDistanceFromBottom, scrollToBottom]);\n\n\tconst handleScrollToBottom = useCallback(() => {\n\t\tscrollToBottom();\n\t}, [scrollToBottom]);\n\n\t/* Loading */\n\tif (isLoading) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex-1 overflow-y-auto min-h-0 payman-scrollbar\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"space-y-5\",\n\t\t\t\t\t\tlayout === \"centered\" ? \"max-w-2xl mx-auto px-4 py-6\" : \"p-4\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{Array.from({ length: 5 }).map((_, i) => (\n\t\t\t\t\t\t<MessageRowSkeleton\n\t\t\t\t\t\t\tkey={`skel-${i}`}\n\t\t\t\t\t\t\tisRightAligned={i % 3 === 0}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t/* Empty state */\n\tif (messages.length === 0) {\n\t\tconst lines = emptyStateText.split(\"\\n\").map((l) => l.trim()).filter(Boolean);\n\t\treturn (\n\t\t\t<div className={cn(\"payman-empty-root\", className)}>\n\t\t\t\t<motion.div\n\t\t\t\t\tinitial={{ opacity: 0, y: 20 }}\n\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\ttransition={{ duration: 0.5, ease: [0.25, 0.46, 0.45, 0.94] }}\n\t\t\t\t\tclassName=\"payman-empty-content\"\n\t\t\t\t>\n\t\t\t\t\t{/* Custom component (e.g. logo/illustration) from integrator */}\n\t\t\t\t\t{emptyStateComponent && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tinitial={{ scale: 0.9, opacity: 0 }}\n\t\t\t\t\t\t\tanimate={{ scale: 1, opacity: 1 }}\n\t\t\t\t\t\t\ttransition={{ delay: 0.05, duration: 0.45, ease: [0.25, 0.46, 0.45, 0.94] }}\n\t\t\t\t\t\t\tclassName=\"payman-empty-custom-component\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{emptyStateComponent}\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t\t<div className=\"payman-empty-text-group\">\n\t\t\t\t\t\t{lines.map((line, i) => (\n\t\t\t\t\t\t\t<motion.p\n\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 6 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\t\ttransition={{ delay: 0.12 + i * 0.06, duration: 0.4 }}\n\t\t\t\t\t\t\t\tclassName={i === 0 ? \"payman-empty-title\" : \"payman-empty-subtitle\"}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{line}\n\t\t\t\t\t\t\t</motion.p>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t</motion.div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t/* Messages */\n\treturn (\n\t\t<>\n\t\t\t{/* Scrollable message list — takes full flex space */}\n\t\t\t<div\n\t\t\t\tref={scrollRef}\n\t\t\t\tonScroll={handleScroll}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex-1 min-h-0 overflow-y-auto payman-scrollbar relative\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"space-y-4\",\n\t\t\t\t\t\tlayout === \"centered\" ? \"max-w-2xl mx-auto px-4 py-6\" : \"p-4\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{/* Load-more spinner shown at top while fetching older messages */}\n\t\t\t\t\t{isLoadingMoreMessages && (\n\t\t\t\t\t\t<div className=\"flex justify-center py-2\">\n\t\t\t\t\t\t\t<div className=\"w-5 h-5 rounded-full border-2 border-muted-foreground/30 border-t-muted-foreground animate-spin\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t{messages.map((message) => (\n\t\t\t\t\t\t<MessageRow\n\t\t\t\t\t\t\tkey={message.id}\n\t\t\t\t\t\t\tmessage={message}\n\t\t\t\t\t\t\tstage={stage}\n\t\t\t\t\t\t\tanimated={animated}\n\t\t\t\t\t\t\tshowAgentName={showAgentName}\n\t\t\t\t\t\t\tagentName={agentName}\n\t\t\t\t\t\t\tshowAvatars={showAvatars}\n\t\t\t\t\t\t\tshowUserAvatar={showUserAvatar}\n\t\t\t\t\t\t\tshowAssistantAvatar={showAssistantAvatar}\n\t\t\t\t\t\t\tlayout={layout}\n\t\t\t\t\t\t\tshowTimestamps={showTimestamps}\n\t\t\t\t\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\t\t\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\t\t\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\t\t\t\t\tcompletedStepsText={completedStepsText}\n\t\t\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\n\t\t\t\t{/* Scroll-to-bottom button */}\n\t\t\t\t{showScrollBtn && (\n\t\t\t\t\t<div className=\"sticky bottom-0 z-20 flex justify-center pb-3 -mt-11\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tonClick={handleScrollToBottom}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"w-8 h-8 rounded-full\",\n\t\t\t\t\t\t\t\t\"bg-card border border-border shadow-lg\",\n\t\t\t\t\t\t\t\t\"flex items-center justify-center\",\n\t\t\t\t\t\t\t\t\"hover:bg-muted active:scale-95\",\n\t\t\t\t\t\t\t\t\"transition-all duration-150\",\n\t\t\t\t\t\t\t\t\"cursor-pointer\"\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\taria-label=\"Scroll to bottom\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ArrowDown className=\"w-4 h-4 text-muted-foreground\" />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</>\n\t);\n}\n","import { 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 { ChatCallbacks, MessageDisplay, PaymanChatProps, PaymanChatRef, UserActionState } from \"../../types\";\nimport { cn } from \"../../utils\";\nimport {\n\tisFriendlyWorkflowError,\n\tgetConflictErrorMessage,\n} from \"../../utils/errorMessages\";\nimport { initSentryIfNeeded } from \"../../utils/sentry\";\nimport {\n\tcaptureSentryError,\n\tsubscribeToCfRay,\n\ttype ChatSessionContext,\n} from \"../../utils/sentryContext\";\nimport { ChatInput } from \"../ChatInput\";\nimport { MessageList } from \"../MessageList\";\nimport { 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// ---- Sentry error context tracking ----\n\n\tconst sentryCtxRef = useRef<ChatSessionContext>({});\n\tconst callbacksRef = useRef(callbacks);\n\tcallbacksRef.current = callbacks;\n\n\tconst initialSessionId = (config as Record<string, unknown>).initialSessionId as string | undefined;\n\tconst apiHeaders = config.api.headers;\n\n\tuseEffect(() => {\n\t\tsentryCtxRef.current.workflowName = config.workflowName;\n\t\tsentryCtxRef.current.sessionOwnerId = config.sessionParams?.id;\n\t\tif (initialSessionId) {\n\t\t\tsentryCtxRef.current.sessionId = initialSessionId;\n\t\t}\n\t\tif (apiHeaders) {\n\t\t\tsentryCtxRef.current.customerId =\n\t\t\t\tapiHeaders[\"x-paygent-wf-mcp-customer-id\"] ?? sentryCtxRef.current.customerId;\n\t\t\tsentryCtxRef.current.customerEmail =\n\t\t\t\tapiHeaders[\"x-paygent-wf-mcp-customer-email\"] ?? sentryCtxRef.current.customerEmail;\n\t\t}\n\t}, [\n\t\tconfig.workflowName,\n\t\tconfig.sessionParams?.id,\n\t\tinitialSessionId,\n\t\tapiHeaders,\n\t]);\n\n\tuseEffect(() => {\n\t\tconst endpoint =\n\t\t\tconfig.api.streamEndpoint || \"/api/workflows/ask/stream\";\n\t\treturn subscribeToCfRay(endpoint, (cfRay) => {\n\t\t\tsentryCtxRef.current.cfRay = cfRay;\n\t\t});\n\t}, [config.api.streamEndpoint]);\n\n\tconst sentryCallbacks = useMemo<ChatCallbacks>(\n\t\t() => ({\n\t\t\tonMessageSent: (msg) => callbacksRef.current.onMessageSent?.(msg),\n\t\t\tonStreamStart: () => callbacksRef.current.onStreamStart?.(),\n\t\tonStreamComplete: (message: MessageDisplay) => {\n\t\t\tif (message.executionId)\n\t\t\t\tsentryCtxRef.current.executionId = message.executionId;\n\t\t\tif (message.sessionId)\n\t\t\t\tsentryCtxRef.current.sessionId = message.sessionId;\n\n\t\t\tconst content = message.content ?? \"\";\n\t\t\tconst looksLikeRawErr =\n\t\t\t\tcontent.length >= 10 &&\n\t\t\t\t(content.includes(\"errorType=\") || /failed:\\s*\\{/.test(content));\n\t\t\tconst completedEmpty =\n\t\t\t\t!message.isStreaming &&\n\t\t\t\t!message.isCancelled &&\n\t\t\t\tcontent.length === 0 &&\n\t\t\t\t(message.streamProgress === \"completed\" || message.streamProgress === \"error\");\n\t\t\tconst hasConflict = !!getConflictErrorMessage(message.errorDetails);\n\t\t\tconst hasFriendlyErr = isFriendlyWorkflowError(message.errorDetails);\n\n\t\t\tconst shouldCapture =\n\t\t\t\tmessage.isError ||\n\t\t\t\thasConflict ||\n\t\t\t\thasFriendlyErr ||\n\t\t\t\tlooksLikeRawErr ||\n\t\t\t\tcompletedEmpty;\n\n\t\t\tif (shouldCapture) {\n\t\t\t\tsentryCtxRef.current.route =\n\t\t\t\t\ttypeof window !== \"undefined\"\n\t\t\t\t\t\t? window.location.pathname\n\t\t\t\t\t\t: undefined;\n\t\t\t\tcaptureSentryError(\n\t\t\t\t\t`Workflow error: ${message.errorDetails || content || \"Unknown error\"}`,\n\t\t\t\t\t{ ...sentryCtxRef.current }\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcallbacksRef.current.onStreamComplete?.(message);\n\t\t},\n\t\t\tonError: (error: Error) => {\n\t\t\t\tsentryCtxRef.current.route =\n\t\t\t\t\ttypeof window !== \"undefined\"\n\t\t\t\t\t\t? window.location.pathname\n\t\t\t\t\t\t: undefined;\n\t\t\t\tcaptureSentryError(error, { ...sentryCtxRef.current });\n\t\t\t\tcallbacksRef.current.onError?.(error);\n\t\t\t},\n\t\t\tonSessionIdChange: (sessionId: string) => {\n\t\t\t\tsentryCtxRef.current.sessionId = sessionId;\n\t\t\t\tcallbacksRef.current.onSessionIdChange?.(sessionId);\n\t\t\t},\n\t\t\tonExecutionTraceClick: (data) =>\n\t\t\t\tcallbacksRef.current.onExecutionTraceClick?.(data),\n\t\t\tonResetSession: () => callbacksRef.current.onResetSession?.(),\n\t\t\tonUserActionRequired: (req) =>\n\t\t\t\tcallbacksRef.current.onUserActionRequired?.(req),\n\t\t\tonUserActionEvent: (evType, msg) =>\n\t\t\t\tcallbacksRef.current.onUserActionEvent?.(evType, msg),\n\t\t}),\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[]\n\t);\n\n\t// Use the chat hook - it handles everything internally\n\tconst chat = useChat(config, sentryCallbacks);\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"]}