@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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/contexts/PaymanChatContext.tsx","../src/components/ChatInput/index.native.tsx","../src/utils/errorMessages.ts","../src/components/AgentMessage/index.native.tsx","../src/utils/cn.ts","../src/utils/formatDate.ts","../src/components/UserMessage/index.native.tsx","../src/components/MessageRow/index.native.tsx","../src/components/MessageRowSkeleton/index.native.tsx","../src/components/MessageList/index.native.tsx","../src/components/OtpInput/index.native.tsx","../src/components/UserActionModal/constants.ts","../src/components/UserActionModal/utils.ts","../src/components/UserActionModal/index.native.tsx","../src/components/PaymanChat/index.native.tsx"],"names":["createContext","useContext","Platform","UIManager","memo","useRef","Animated","useEffect","Easing","jsx","s","useState","LayoutAnimation","jsxs","View","TextInput","Pressable","X","Text","Check","Mic","Send","StyleSheet","useSharedValue","React","withRepeat","withTiming","useAnimatedStyle","Loader2","interpolateColor","ChevronDown","useMemo","useCallback","FadeInDown","Layout","Sparkles","Markdown","Binoculars","ChevronRight","FadeIn","FadeOut","Clock","twMerge","clsx","User","MessageCircle","FlatList","newDigits","Dimensions","Keyboard","Modal","KeyboardAvoidingView","ScrollView","ActivityIndicator","Fragment","Image","useChat","useVoice"],"mappings":"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","file":"index.native.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 { Check, Mic, Pause, Send, X } from \"lucide-react-native\";\nimport { memo, useEffect, useRef, useState } from \"react\";\nimport {\n\tAnimated,\n\tEasing,\n\tLayoutAnimation,\n\tPlatform,\n\tPressable,\n\tStyleSheet,\n\tText,\n\tTextInput,\n\tUIManager,\n\tView,\n} from \"react-native\";\nimport type { ChatInputProps } from \"../../types\";\n\n// Enable LayoutAnimation on Android\nif (Platform.OS === \"android\" && UIManager.setLayoutAnimationEnabledExperimental) {\n\tUIManager.setLayoutAnimationEnabledExperimental(true);\n}\n\nconst VOICE_DOT_COUNT = 24;\nconst VOICE_DOT_MIN_H = 5;\nconst VOICE_DOT_MAX_H = 14;\n/** How long (ms) after last transcript change we still consider \"user talking\" for waveform */\nconst SPEECH_ACTIVITY_MS = 1400;\n\n/** Theme primary color for voice bar */\nconst VOICE_THEME_COLOR = \"#00858d\";\nconst VOICE_THEME_RGBA = \"rgba(0, 133, 141, 0.6)\";\nconst VOICE_THEME_RGBA_LIGHT = \"rgba(0, 133, 141, 0.2)\";\nconst VOICE_BAR_BG = \"#f0f9f9\";\nconst VOICE_BAR_BORDER = \"rgba(0, 133, 141, 0.35)\";\nconst AI_DISCLAIMER_TEXT =\n\t\"AI can make mistakes. Please double-check responses.\";\n\n// Animated waveform bar that bounces when recording (user talking)\nconst VoiceWaveformBar = memo(\n\t({\n\t\tindex,\n\t\tisActive,\n\t\tbarColor,\n\t}: {\n\t\tindex: number;\n\t\tisActive: boolean;\n\t\tbarColor: string;\n\t}) => {\n\t\tconst height = useRef(new Animated.Value(VOICE_DOT_MIN_H)).current;\n\n\t\tuseEffect(() => {\n\t\t\tif (isActive) {\n\t\t\t\tconst delay = index * 25;\n\t\t\t\tconst duration = 180 + (index % 3) * 40;\n\t\t\t\tconst animation = Animated.loop(\n\t\t\t\t\tAnimated.sequence([\n\t\t\t\t\t\tAnimated.timing(height, {\n\t\t\t\t\t\t\ttoValue: VOICE_DOT_MAX_H,\n\t\t\t\t\t\t\tduration,\n\t\t\t\t\t\t\tdelay,\n\t\t\t\t\t\t\teasing: Easing.inOut(Easing.ease),\n\t\t\t\t\t\t\tuseNativeDriver: false,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tAnimated.timing(height, {\n\t\t\t\t\t\t\ttoValue: VOICE_DOT_MIN_H,\n\t\t\t\t\t\t\tduration,\n\t\t\t\t\t\t\teasing: Easing.inOut(Easing.ease),\n\t\t\t\t\t\t\tuseNativeDriver: false,\n\t\t\t\t\t\t}),\n\t\t\t\t\t])\n\t\t\t\t);\n\t\t\t\tanimation.start();\n\t\t\t\treturn () => animation.stop();\n\t\t\t} else {\n\t\t\t\tAnimated.timing(height, {\n\t\t\t\t\ttoValue: VOICE_DOT_MIN_H,\n\t\t\t\t\tduration: 200,\n\t\t\t\t\tuseNativeDriver: false,\n\t\t\t\t}).start();\n\t\t\t}\n\t\t}, [isActive, index, height]);\n\n\t\treturn (\n\t\t\t<Animated.View\n\t\t\t\tstyle={[\n\t\t\t\t\ts.voiceDotBase,\n\t\t\t\t\t{\n\t\t\t\t\t\theight,\n\t\t\t\t\t\tbackgroundColor: barColor,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t/>\n\t\t);\n\t}\n);\nVoiceWaveformBar.displayName = \"VoiceWaveformBar\";\n\nfunction formatDuration(seconds: number): string {\n\tconst m = Math.floor(seconds / 60);\n\tconst s = seconds % 60;\n\treturn `${m}:${s.toString().padStart(2, \"0\")}`;\n}\n\nexport function ChatInput({\n\tvalue,\n\tonChange,\n\tonSend,\n\tonPause,\n\tdisabled = false,\n\tplaceholder = \"Chat with Claude\",\n\tisWaitingForResponse = false,\n\thasSelectedSession = true,\n\tisSessionParamsConfigured = true,\n\tonClick,\n\tinputStyle = \"rounded\",\n\tlayout = \"full-width\",\n\tenableVoice = false,\n\tonVoicePress,\n\tvoiceAvailable = false,\n\tisRecording = false,\n\trecordingDurationSeconds = 0,\n\tonConfirmRecording,\n\tonCancelRecording,\n\ttranscribedText,\n}: ChatInputProps) {\n\tconst isInputDisabled = disabled || isWaitingForResponse;\n\tconst showPauseButton = false;\n\tconst showVoiceButton = enableVoice && onVoicePress != null;\n\tconst isVoiceButtonDisabled =\n\t\tisWaitingForResponse || !voiceAvailable || !isSessionParamsConfigured;\n\tconst canSend = !isInputDisabled && value.trim().length > 0;\n\n\tconst showVoiceBar =\n\t\tenableVoice &&\n\t\tisRecording &&\n\t\tonConfirmRecording != null &&\n\t\tonCancelRecording != null;\n\n\t// Waveforms animate only when user is talking (transcript changed recently)\n\tconst [isUserSpeaking, setIsUserSpeaking] = useState(false);\n\tconst speechTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst prevTranscriptRef = useRef(\"\");\n\tuseEffect(() => {\n\t\tif (!showVoiceBar) {\n\t\t\tsetIsUserSpeaking(false);\n\t\t\tprevTranscriptRef.current = \"\";\n\t\t\tif (speechTimeoutRef.current) {\n\t\t\t\tclearTimeout(speechTimeoutRef.current);\n\t\t\t\tspeechTimeoutRef.current = null;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst current = transcribedText ?? \"\";\n\t\tconst changed = current !== prevTranscriptRef.current;\n\t\tprevTranscriptRef.current = current;\n\t\tif (changed) {\n\t\t\tsetIsUserSpeaking(true);\n\t\t\tif (speechTimeoutRef.current) clearTimeout(speechTimeoutRef.current);\n\t\t\tspeechTimeoutRef.current = setTimeout(() => {\n\t\t\t\tspeechTimeoutRef.current = null;\n\t\t\t\tsetIsUserSpeaking(false);\n\t\t\t}, SPEECH_ACTIVITY_MS);\n\t\t}\n\t\treturn () => {\n\t\t\tif (speechTimeoutRef.current) {\n\t\t\t\tclearTimeout(speechTimeoutRef.current);\n\t\t\t\tspeechTimeoutRef.current = null;\n\t\t\t}\n\t\t};\n\t}, [showVoiceBar, transcribedText]);\n\n\tconst animOpacity = useRef(new Animated.Value(1)).current;\n\tconst animScale = useRef(new Animated.Value(1)).current;\n\tconst inputRef = useRef<TextInput>(null);\n\n\t// Animate in when switching to voice bar, out when switching back to input\n\tuseEffect(() => {\n\t\tif (showVoiceBar) {\n\t\t\tLayoutAnimation.configureNext(\n\t\t\t\tLayoutAnimation.create(200, \"easeInEaseOut\", \"opacity\")\n\t\t\t);\n\t\t\tanimOpacity.setValue(0.92);\n\t\t\tanimScale.setValue(0.98);\n\t\t\tAnimated.parallel([\n\t\t\t\tAnimated.timing(animOpacity, {\n\t\t\t\t\ttoValue: 1,\n\t\t\t\t\tduration: 200,\n\t\t\t\t\tuseNativeDriver: true,\n\t\t\t\t}),\n\t\t\t\tAnimated.spring(animScale, {\n\t\t\t\t\ttoValue: 1,\n\t\t\t\t\tuseNativeDriver: true,\n\t\t\t\t\tspeed: 12,\n\t\t\t\t\tbounciness: 4,\n\t\t\t\t}),\n\t\t\t]).start();\n\t\t} else {\n\t\t\tLayoutAnimation.configureNext(\n\t\t\t\tLayoutAnimation.create(220, \"easeInEaseOut\", \"opacity\")\n\t\t\t);\n\t\t\tanimOpacity.setValue(1);\n\t\t\tanimScale.setValue(1);\n\t\t}\n\t}, [showVoiceBar, animOpacity, animScale]);\n\n\tconst getPlaceholder = () => {\n\t\tif (!hasSelectedSession) return \"Select a version to start chatting\";\n\t\tif (!isSessionParamsConfigured)\n\t\t\treturn \"Configure User ID and User Label in Session Params\";\n\t\treturn placeholder;\n\t};\n\n\tconst handleSubmit = () => {\n\t\tif (canSend) onSend();\n\t};\n\n\tconst handleConfirmRecording = () => {\n\t\tLayoutAnimation.configureNext(\n\t\t\tLayoutAnimation.create(220, \"easeOut\", \"opacity\")\n\t\t);\n\t\tonConfirmRecording?.();\n\t};\n\n\tconst handleCancelRecording = () => {\n\t\tLayoutAnimation.configureNext(\n\t\t\tLayoutAnimation.create(200, \"easeIn\", \"opacity\")\n\t\t);\n\t\tonCancelRecording?.();\n\t};\n\n\treturn (\n\t\t<View\n\t\t\tstyle={[\n\t\t\t\ts.outerBar,\n\t\t\t\tlayout === \"centered\" && s.outerBarCentered,\n\t\t\t\tshowVoiceBar && s.outerBarVoiceMargin,\n\t\t\t]}\n\t\t>\n\t\t\t<View style={s.column}>\n\t\t\t\t<View style={[s.inputWrap, showVoiceBar && s.inputWrapRelative]}>\n\t\t\t\t\t<TextInput\n\t\t\t\t\t\tref={inputRef}\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\tonChangeText={onChange}\n\t\t\t\t\t\tonPress={onClick}\n\t\t\t\t\t\teditable={!isInputDisabled}\n\t\t\t\t\t\tplaceholder={getPlaceholder()}\n\t\t\t\t\t\tplaceholderTextColor='#9CA3AF'\n\t\t\t\t\t\tmultiline\n\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\ts.input,\n\t\t\t\t\t\t\tisInputDisabled && s.inputDisabled,\n\t\t\t\t\t\t\tshowVoiceBar && s.inputHiddenKeepFocus,\n\t\t\t\t\t\t]}\n\t\t\t\t\t\treturnKeyType=\"default\"\n\t\t\t\t\t\tblurOnSubmit={false}\n\t\t\t\t\t\tonSubmitEditing={handleSubmit}\n\t\t\t\t\t/>\n\t\t\t\t\t{showVoiceBar && (\n\t\t\t\t\t\t<Animated.View\n\t\t\t\t\t\t\tpointerEvents=\"box-none\"\n\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\ts.voiceBarContainer,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\topacity: animOpacity,\n\t\t\t\t\t\t\t\t\ttransform: [{ scale: animScale }],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<View style={s.voiceBar}>\n\t\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\t\tonPress={handleCancelRecording}\n\t\t\t\t\t\t\t\t\tstyle={({ pressed }) => [\n\t\t\t\t\t\t\t\t\t\ts.voiceBarCancelBtn,\n\t\t\t\t\t\t\t\t\t\tpressed && s.btnPressed,\n\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\taccessibilityLabel=\"Cancel recording\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<X size={20} color={VOICE_THEME_COLOR} strokeWidth={2.5} />\n\t\t\t\t\t\t\t\t</Pressable>\n\n\t\t\t\t\t\t\t\t<View style={s.voiceBarCenter}>\n\t\t\t\t\t\t\t\t\t<View style={s.voiceBarDots}>\n\t\t\t\t\t\t\t\t\t\t{Array.from({ length: VOICE_DOT_COUNT }).map((_, i) => (\n\t\t\t\t\t\t\t\t\t\t\t<VoiceWaveformBar\n\t\t\t\t\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\t\t\t\t\tindex={i}\n\t\t\t\t\t\t\t\t\t\t\t\tisActive={isUserSpeaking}\n\t\t\t\t\t\t\t\t\t\t\t\tbarColor={VOICE_THEME_RGBA}\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</View>\n\t\t\t\t\t\t\t\t\t<Text style={s.voiceBarTimer}>\n\t\t\t\t\t\t\t\t\t\t{formatDuration(recordingDurationSeconds)}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t</View>\n\n\t\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\t\tonPress={handleConfirmRecording}\n\t\t\t\t\t\t\t\t\tstyle={({ pressed }) => [\n\t\t\t\t\t\t\t\t\t\ts.voiceBarConfirmBtn,\n\t\t\t\t\t\t\t\t\t\tpressed && s.btnPressed,\n\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\taccessibilityLabel=\"Confirm and send recording\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Check size={22} color={VOICE_THEME_COLOR} strokeWidth={2.5} />\n\t\t\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t</Animated.View>\n\t\t\t\t\t)}\n\t\t\t\t</View>\n\n\t\t\t\t{!showVoiceBar && (\n\t\t\t\t\t<View style={s.actionsRow}>\n\t\t\t\t\t\t<View style={s.rightActions}>\n\t\t\t\t\t\t\t{showVoiceButton && (\n\t\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\t\tonPress={onVoicePress}\n\t\t\t\t\t\t\t\t\tdisabled={isVoiceButtonDisabled}\n\t\t\t\t\t\t\t\t\tstyle={({ pressed }) => [\n\t\t\t\t\t\t\t\t\t\ts.iconBtn,\n\t\t\t\t\t\t\t\t\t\tpressed && s.btnPressed,\n\t\t\t\t\t\t\t\t\t\tisVoiceButtonDisabled && s.btnDisabled,\n\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\taccessibilityLabel=\"Voice input\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<View style={s.iconBtnInner}>\n\t\t\t\t\t\t\t\t\t\t<Mic size={22} color='#6B7280' strokeWidth={2} />\n\t\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{showPauseButton ? (\n\t\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\t\tonPress={onPause}\n\t\t\t\t\t\t\t\t\tstyle={({ pressed }) => [\n\t\t\t\t\t\t\t\t\t\ts.sendBtn,\n\t\t\t\t\t\t\t\t\t\tpressed && s.btnPressed,\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<View style={s.sendBtnInner}>\n\t\t\t\t\t\t\t\t\t\t<Pause size={18} color=\"#FFFFFF\" />\n\t\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\t\tonPress={onSend}\n\t\t\t\t\t\t\t\t\tdisabled={!canSend}\n\t\t\t\t\t\t\t\t\tstyle={({ pressed }) => [\n\t\t\t\t\t\t\t\t\t\ts.sendBtn,\n\t\t\t\t\t\t\t\t\t\t!canSend && s.btnDisabled,\n\t\t\t\t\t\t\t\t\t\tpressed && s.btnPressed,\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<View style={s.sendBtnInner}>\n\t\t\t\t\t\t\t\t\t\t<Send size={18} color=\"#FFFFFF\" />\n\t\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</View>\n\t\t\t\t\t</View>\n\t\t\t\t)}\n\t\t\t</View>\n\t\t\t<View style={s.disclaimerWrap}>\n\t\t\t\t<Text style={s.disclaimerText}>{AI_DISCLAIMER_TEXT}</Text>\n\t\t\t</View>\n\t\t</View>\n\t);\n}\n\nconst s = StyleSheet.create({\n\touterBar: {\n\t\twidth: \"100%\",\n\t\tbackgroundColor: '#f1f5f9',\n\t\tborderTopWidth: 1,\n\t\tborderTopColor: 'rgba(0,0,0,0.08)',\n\t\tpaddingTop: 12,\n\t\tpaddingBottom: Platform.OS === \"ios\" ? 28 : 12,\n\t\tpaddingHorizontal: 12,\n\t\tborderTopLeftRadius: 20,\n\t\tborderTopRightRadius: 20,\n\t},\n\touterBarCentered: { alignItems: \"center\" },\n\tdisclaimerWrap: {\n\t\tmaxWidth: 672,\n\t\twidth: \"100%\",\n\t\talignSelf: \"center\",\n\t\tpaddingHorizontal: 12,\n\t\tmarginTop: 2,\n\t},\n\tdisclaimerText: {\n\t\tfontSize: 11,\n\t\tlineHeight: 15,\n\t\tcolor: \"#6B7280\",\n\t\ttextAlign: \"center\",\n\t},\n\tcolumn: {\n\t\tmaxWidth: 672,\n\t\twidth: \"100%\",\n\t\talignSelf: \"center\",\n\t\tgap: 10,\n\t},\n\tactionsRow: {\n\t\tflexDirection: \"row\",\n\t\tjustifyContent: \"flex-end\",\n\t\talignItems: \"center\",\n\t\tmarginBottom: 10\n\t},\n\ticonBtn: {\n\t\twidth: 36,\n\t\theight: 36,\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t\tborderRadius: 18,\n\t\toverflow: \"hidden\",\n\t},\n\ticonBtnInner: {\n\t\twidth: 36,\n\t\theight: 36,\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t\tbackgroundColor: 'rgba(0,0,0,0.1)',\n\t\tborderRadius: 18,\n\t},\n\tinputWrap: {\n\t\twidth: \"100%\",\n\t\tminHeight: 56,\n\t\tjustifyContent: \"center\",\n\t\tpaddingHorizontal: 4,\n\t},\n\tinputWrapRelative: {\n\t\tposition: \"relative\",\n\t},\n\tinputHiddenKeepFocus: {\n\t\tposition: \"absolute\",\n\t\tleft: 0,\n\t\tright: 0,\n\t\ttop: 0,\n\t\topacity: 0,\n\t\tzIndex: 0,\n\t},\n\tinput: {\n\t\tminHeight: 56,\n\t\tmaxHeight: 140,\n\t\tpaddingVertical: 16,\n\t\tpaddingHorizontal: 16,\n\t\tfontSize: 16,\n\t\tcolor: '#1F2937',\n\t\tlineHeight: 22,\n\t},\n\tinputDisabled: { opacity: 0.5 },\n\trightActions: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tgap: 6,\n\t},\n\tsendBtn: {\n\t\twidth: 36,\n\t\theight: 36,\n\t\tborderRadius: 18,\n\t\toverflow: \"hidden\",\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t},\n\tsendBtnInner: {\n\t\twidth: 36,\n\t\theight: 36,\n\t\tborderRadius: 18,\n\t\tbackgroundColor: '#00858d',\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t},\n\tbtnDisabled: { opacity: 0.35 },\n\tbtnPressed: { opacity: 0.7 },\n\touterBarVoiceMargin: {\n\t\tpaddingBottom: Platform.OS === \"ios\" ? 36 : 20,\n\t},\n\t// Voice bar (replaces input when recording) – theme #00858d\n\tvoiceBarContainer: {\n\t\tposition: \"absolute\",\n\t\tleft: 0,\n\t\tright: 0,\n\t\ttop: 0,\n\t\tbottom: 0,\n\t\tjustifyContent: \"center\",\n\t\tzIndex: 1,\n\t},\n\tvoiceBar: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"space-between\",\n\t\tbackgroundColor: VOICE_BAR_BG,\n\t\tborderWidth: 1,\n\t\tborderColor: VOICE_BAR_BORDER,\n\t\tborderRadius: 28,\n\t\tminHeight: 56,\n\t\tpaddingHorizontal: 12,\n\t\tpaddingVertical: 10,\n\t\tgap: 12,\n\t},\n\tvoiceBarCancelBtn: {\n\t\twidth: 40,\n\t\theight: 40,\n\t\tborderRadius: 20,\n\t\tbackgroundColor: VOICE_THEME_RGBA_LIGHT,\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t},\n\tvoiceBarCenter: {\n\t\tflex: 1,\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"space-between\",\n\t\tgap: 10,\n\t\tmarginLeft: 8,\n\t},\n\tvoiceBarDots: {\n\t\tflex: 1,\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"space-between\",\n\t\tgap: 4,\n\t},\n\tvoiceDotBase: {\n\t\twidth: 4,\n\t\tborderRadius: 2,\n\t},\n\tvoiceDot: {\n\t\twidth: 4,\n\t\theight: 6,\n\t\tborderRadius: 2,\n\t\tbackgroundColor: VOICE_THEME_RGBA,\n\t},\n\tvoiceDotActive: {\n\t\theight: 12,\n\t\tbackgroundColor: VOICE_THEME_COLOR,\n\t},\n\tvoiceBarTimer: {\n\t\tfontSize: 15,\n\t\tfontWeight: \"600\",\n\t\tcolor: VOICE_THEME_COLOR,\n\t\tminWidth: 36,\n\t\ttextAlign: \"right\",\n\t},\n\tvoiceBarConfirmBtn: {\n\t\twidth: 40,\n\t\theight: 40,\n\t\tborderRadius: 20,\n\t\tbackgroundColor: \"#FFFFFF\",\n\t\tborderWidth: 1,\n\t\tborderColor: VOICE_THEME_COLOR,\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\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 {\n\tBinoculars,\n\tCheck,\n\tChevronDown,\n\tChevronRight,\n\tClock,\n\tLoader2,\n\tSparkles,\n\tX,\n} from \"lucide-react-native\";\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Pressable, StyleSheet, Text, View } from \"react-native\";\nimport Markdown from \"react-native-markdown-display\";\nimport Animated, {\n\tEasing,\n\tFadeIn,\n\tFadeInDown,\n\tFadeOut,\n\tinterpolateColor,\n\tLayout,\n\tuseAnimatedStyle,\n\tuseSharedValue,\n\twithRepeat,\n\twithTiming,\n} from \"react-native-reanimated\";\nimport type { AgentMessageProps } from \"../../types\";\nimport {\n\tgetConflictErrorMessage,\n\tisFriendlyWorkflowError,\n} from \"../../utils/errorMessages\";\n\n/* ---- Animated spinning loader ---- */\nfunction AnimatedLoader({\n\tsize = 14,\n\tcolor = \"#00858d\",\n}: {\n\tsize?: number;\n\tcolor?: string;\n}) {\n\tconst rotation = useSharedValue(0);\n\tReact.useEffect(() => {\n\t\trotation.value = withRepeat(\n\t\t\twithTiming(360, { duration: 1000, easing: Easing.linear }),\n\t\t\t-1\n\t\t);\n\t}, [rotation]);\n\tconst style = useAnimatedStyle(() => ({\n\t\ttransform: [{ rotate: `${rotation.value}deg` }],\n\t}));\n\treturn (\n\t\t<Animated.View style={style}>\n\t\t\t<Loader2 size={size} color={color} />\n\t\t</Animated.View>\n\t);\n}\n\n/* ---- Shimmer text — slow left-to-right color sweep (matches web 3.5s) ---- */\nfunction ShimmerText({\n\tchildren,\n\tstyle: textStyle,\n}: {\n\tchildren: string;\n\tstyle?: any;\n}) {\n\tconst progress = useSharedValue(0);\n\tReact.useEffect(() => {\n\t\tprogress.value = withRepeat(\n\t\t\twithTiming(1, { duration: 3500, easing: Easing.linear }),\n\t\t\t-1,\n\t\t\tfalse\n\t\t);\n\t}, [progress]);\n\tconst animatedStyle = useAnimatedStyle(() => {\n\t\tconst color = interpolateColor(\n\t\t\tprogress.value,\n\t\t\t[0, 0.35, 0.5, 0.65, 1],\n\t\t\t[\"#9CA3AF\", \"#9CA3AF\", \"#00858d\", \"#9CA3AF\", \"#9CA3AF\"]\n\t\t);\n\t\treturn { color };\n\t});\n\treturn (\n\t\t<Animated.Text style={[textStyle, animatedStyle, { fontWeight: \"600\" }]}>\n\t\t\t{children}\n\t\t</Animated.Text>\n\t);\n}\n\n/* ---- Pulsing \"Thought Process\" label ---- */\nfunction ThoughtProcessLabel({ style }: { style?: any }) {\n\tconst opacity = useSharedValue(1);\n\tReact.useEffect(() => {\n\t\topacity.value = withRepeat(\n\t\t\twithTiming(0.5, { duration: 800, easing: Easing.inOut(Easing.ease) }),\n\t\t\t-1,\n\t\t\ttrue\n\t\t);\n\t}, [opacity]);\n\tconst animatedStyle = useAnimatedStyle(() => ({ opacity: opacity.value }));\n\treturn (\n\t\t<Animated.Text style={[style, animatedStyle]}>\n\t\t\tThought Process\n\t\t</Animated.Text>\n\t);\n}\n\n/* ---- Expandable thinking block (Cursor-style: compact, auto-scroll) ---- */\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<View style={ts.thinkingWrap}>\n\t\t\t<Pressable\n\t\t\t\tonPress={() => setIsOpen((prev) => !prev)}\n\t\t\t\tstyle={ts.thinkingToggle}\n\t\t\t\taccessibilityRole=\"button\"\n\t\t\t\taccessibilityState={{ expanded: isOpen }}\n\t\t\t\taccessibilityLabel={isOpen ? \"Collapse thought process\" : \"Expand thought process\"}\n\t\t\t>\n\t\t\t\t<View style={{ transform: [{ rotate: isOpen ? \"180deg\" : \"0deg\" }] }}>\n\t\t\t\t\t<ChevronDown size={10} color=\"rgba(156,163,175,0.5)\" />\n\t\t\t\t</View>\n\t\t\t\t<Text style={ts.thinkingToggleText}>Thought process</Text>\n\t\t\t</Pressable>\n\t\t\t{isOpen && (\n\t\t\t\t<View style={ts.thinkingContent}>\n\t\t\t\t\t<Text style={ts.thinkingContentText}>{text}</Text>\n\t\t\t\t</View>\n\t\t\t)}\n\t\t</View>\n\t);\n}\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\tshowTimestamp: _showTimestamp = false,\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(\n\t\tisStreaming && hasSteps\n\t);\n\tconst wasStreamingRef = useRef(isStreaming);\n\n\tuseEffect(() => {\n\t\tif (isStreaming && hasSteps) setIsStepsExpanded(true);\n\t\tif (wasStreamingRef.current && !isStreaming) setIsStepsExpanded(false);\n\t\twasStreamingRef.current = isStreaming;\n\t}, [isStreaming, hasSteps]);\n\n\tconst totalElapsedMs = hasSteps\n\t\t? message.steps!.reduce((sum, step) => sum + (step.elapsedMs || 0), 0)\n\t\t: 0;\n\n\tconst currentMessage = message.currentMessage;\n\tconst rawContent = message.streamingContent || message.content || \"\";\n\tconst content = rawContent.replace(/\\\\n/g, \"\\n\");\n\t// When workflow completes with a response (e.g. after INTENT_ERROR), prefer that over error UI. Only show friendly error when there's no meaningful response or when content is raw error dump.\n\tconst hasMeaningfulContent =\n\t\tcontent.length > 0 && !looksLikeRawError(content);\n\t// Also show friendly error when workflow completed with no content (e.g. preflight failed, no workflowMsg)\n\tconst completedWithNoContent =\n\t\t!isStreaming &&\n\t\t!isCancelled &&\n\t\tcontent.length === 0 &&\n\t\t(message.streamProgress === \"completed\" || message.streamProgress === \"error\");\n\tconst conflictErrorMessage = getConflictErrorMessage(message.errorDetails);\n\tconst isError =\n\t\t!!conflictErrorMessage ||\n\t\t((isFriendlyWorkflowError(message.errorDetails) ||\n\t\t\tlooksLikeRawError(content)) &&\n\t\t\t!hasMeaningfulContent) ||\n\t\tcompletedWithNoContent;\n\tconst activeThinkingText = message.activeThinkingText;\n\tconst allThinkingText = message.allThinkingText;\n\tconst currentStep = useMemo(\n\t\t() =>\n\t\t\tmessage.steps?.find(\n\t\t\t\t(s) => s.id === currentExecutingStepId && s.status === \"in_progress\"\n\t\t\t),\n\t\t[message.steps, currentExecutingStepId]\n\t);\n\n\tconst getStepsLabel = useCallback(\n\t\t(streaming: boolean) => {\n\t\t\tconst count = message.steps!.length;\n\t\t\tconst stepWord = count === 1 ? \"step\" : \"steps\";\n\t\t\tif (streaming) {\n\t\t\t\tif (streamingStepsText)\n\t\t\t\t\treturn streamingStepsText.replace(\"{count}\", count.toString());\n\t\t\t\treturn `${count} ${stepWord} in progress`;\n\t\t\t}\n\t\t\tif (completedStepsText) {\n\t\t\t\treturn completedStepsText\n\t\t\t\t\t.replace(\"{count}\", count.toString())\n\t\t\t\t\t.replace(\"{time}\", (totalElapsedMs / 1000).toFixed(1));\n\t\t\t}\n\t\t\treturn `${count} ${stepWord} completed`;\n\t\t},\n\t\t[message.steps, streamingStepsText, completedStepsText, totalElapsedMs]\n\t);\n\n\t/* Step icon — all in fixed 16×16 wrapper for alignment */\n\tconst renderStepIcon = (step: any, isCurrentlyExecuting: boolean) => {\n\t\tconst W = s.iconWrap;\n\t\tif (isCurrentlyExecuting)\n\t\t\treturn (\n\t\t\t\t<View style={W}>\n\t\t\t\t\t<AnimatedLoader size={13} color=\"#00858d\" />\n\t\t\t\t</View>\n\t\t\t);\n\t\tif (step.status === \"pending\" && isCancelled)\n\t\t\treturn (\n\t\t\t\t<View style={W}>\n\t\t\t\t\t<View style={s.dotMuted} />\n\t\t\t\t</View>\n\t\t\t);\n\t\tif (step.status === \"pending\" || step.status === \"in_progress\")\n\t\t\treturn (\n\t\t\t\t<View style={W}>\n\t\t\t\t\t<AnimatedLoader size={13} color=\"rgba(0,133,141,0.4)\" />\n\t\t\t\t</View>\n\t\t\t);\n\t\tif (step.status === \"completed\")\n\t\t\treturn (\n\t\t\t\t<View style={W}>\n\t\t\t\t\t<Check\n\t\t\t\t\t\tsize={13}\n\t\t\t\t\t\tcolor={\n\t\t\t\t\t\t\tstep.eventType === \"USER_ACTION_SUCCESS\"\n\t\t\t\t\t\t\t\t? \"#10B981\"\n\t\t\t\t\t\t\t\t: \"rgba(0,133,141,0.7)\"\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</View>\n\t\t\t);\n\t\tif (step.status === \"error\")\n\t\t\treturn (\n\t\t\t\t<View style={W}>\n\t\t\t\t\t<X size={13} color=\"#EF4444\" />\n\t\t\t\t</View>\n\t\t\t);\n\t\treturn (\n\t\t\t<View style={W}>\n\t\t\t\t<View style={s.dotMuted} />\n\t\t\t</View>\n\t\t);\n\t};\n\n\t// Below-bubble steps section: only after streaming (thinking lives in bubble during stream)\n\tconst showSteps =\n\t\tshowExecutionSteps && hasSteps && !isStreaming && !isError;\n\n\tconst handleStepsToggle = useCallback(() => {\n\t\tsetIsStepsExpanded((prev) => !prev);\n\t}, []);\n\n\tconst AnimatedView = animated ? Animated.View : View;\n\tconst animatedProps = animated\n\t\t? { entering: FadeInDown.duration(200), layout: Layout }\n\t\t: {};\n\n\tconst messageContent = (\n\t\t<View style={s.outerWrap}>\n\t\t\t{/* Row: avatar + bubble + trace */}\n\t\t\t<View style={s.row}>\n\t\t\t\t{/* Avatar */}\n\t\t\t\t{showAvatar && (\n\t\t\t\t\t<View style={s.avatarWrap}>\n\t\t\t\t\t\t{isStreaming && showStreamingDot ? (\n\t\t\t\t\t\t\t<View style={s.dotContainer}>\n\t\t\t\t\t\t\t\t<View style={s.streamDot} />\n\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<View style={s.avatar}>\n\t\t\t\t\t\t\t\t<Sparkles size={14} color=\"#9CA3AF\" />\n\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</View>\n\t\t\t\t)}\n\n\t\t\t\t{/* Bubble — constrained width */}\n\t\t\t\t<View\n\t\t\t\t\tstyle={[s.bubbleCol, layout === \"centered\" && s.bubbleColCentered]}\n\t\t\t\t>\n\t\t\t\t\t{/* User Action Badge */}\n\t\t\t\t\t{message.userActionResult && (\n\t\t\t\t\t\t<View style={s.badgeWrap}>\n\t\t\t\t\t\t\t{message.userActionResult === \"approved\" ? (\n\t\t\t\t\t\t\t\t<View style={[s.badge, s.badgeApproved]}>\n\t\t\t\t\t\t\t\t\t<Check size={10} color=\"#15803D\" />\n\t\t\t\t\t\t\t\t\t<Text style={s.badgeApprovedText}>Verified</Text>\n\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<View style={[s.badge, s.badgeRejected]}>\n\t\t\t\t\t\t\t\t\t<X size={10} color=\"#B91C1C\" />\n\t\t\t\t\t\t\t\t\t<Text style={s.badgeRejectedText}>Rejected</Text>\n\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</View>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Bubble */}\n\t\t\t\t\t<View\n\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\ts.bubble,\n\t\t\t\t\t\t\tlayout === \"centered\" ? s.bubbleCentered : s.bubbleDefault,\n\t\t\t\t\t\t\tisError && s.bubbleError,\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(isStreaming && !content ? (\n\t\t\t\t\t\t\t\t<ThoughtProcessLabel style={s.agentName} />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Text style={s.agentName}>{agentName}</Text>\n\t\t\t\t\t\t\t))}\n\n\t\t\t\t\t\t<View>\n\t\t\t\t\t\t\t{isStreaming && !content ? (\n\t\t\t\t\t\t\t\t// One active item at a time, by event order: thinking stream OR current step with loading (same bullet UI as dropdown)\n\t\t\t\t\t\t\t\tactiveThinkingText ? (\n\t\t\t\t\t\t\t\t\t<View style={s.stepRow}>\n\t\t\t\t\t\t\t\t\t\t<View style={{ marginTop: 1 }}>\n\t\t\t\t\t\t\t\t\t\t\t<View style={s.iconWrap}>\n\t\t\t\t\t\t\t\t\t\t\t\t<AnimatedLoader size={13} color=\"rgba(0,133,141,0.7)\" />\n\t\t\t\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t\t\t\t<Text style={[s.bubbleBodyText, s.thinkingTextFlex]}>\n\t\t\t\t\t\t\t\t\t\t\t{activeThinkingText}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t\t) : currentStep ? (\n\t\t\t\t\t\t\t\t\t<View style={s.stepRow}>\n\t\t\t\t\t\t\t\t\t\t<View style={{ marginTop: 1 }}>\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</View>\n\t\t\t\t\t\t\t\t\t\t<ShimmerText style={s.bubbleBodyText}>\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</ShimmerText>\n\t\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<View style={s.thinkingRow}>\n\t\t\t\t\t\t\t\t\t\t{!showAvatar && (\n\t\t\t\t\t\t\t\t\t\t\t<AnimatedLoader size={15} color=\"rgba(0,133,141,0.7)\" />\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t<Text style={s.bubbleBodyText}>\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</Text>\n\t\t\t\t\t\t\t\t\t</View>\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<View style={s.thinkingRow}>\n\t\t\t\t\t\t\t\t\t<X size={15} color=\"#9CA3AF\" />\n\t\t\t\t\t\t\t\t\t<Text style={[s.bubbleBodyText, { fontStyle: \"italic\" }]}>\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</Text>\n\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Markdown\n\t\t\t\t\t\t\t\t\tstyle={isError ? markdownErrorStyles : markdownStyles}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{isError\n\t\t\t\t\t\t\t\t\t\t? conflictErrorMessage ?? \"Something went wrong. Please try again.\"\n\t\t\t\t\t\t\t\t\t\t: content ||\n\t\t\t\t\t\t\t\t\t\t(isStreaming\n\t\t\t\t\t\t\t\t\t\t\t? \"Thinking...\"\n\t\t\t\t\t\t\t\t\t\t\t: isCancelled\n\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: \"\")}\n\t\t\t\t\t\t\t\t</Markdown>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</View>\n\t\t\t\t\t</View>\n\t\t\t\t</View>\n\n\t\t\t\t{/* Trace button */}\n\t\t\t\t{hasTraceData && onExecutionTraceClick && (\n\t\t\t\t\t<Pressable\n\t\t\t\t\t\tonPress={() =>\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\tstyle={[s.traceBtn, message.userActionResult && s.traceBtnOffset]}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Binoculars size={15} color=\"#9CA3AF\" />\n\t\t\t\t\t</Pressable>\n\t\t\t\t)}\n\t\t\t</View>\n\n\t\t\t{/* Steps — OUTSIDE the row, indented past avatar */}\n\t\t\t{showSteps && (\n\t\t\t\t<View style={[s.stepsOuter, showAvatar && s.stepsIndented]}>\n\t\t\t\t\t{/* Chevron toggle */}\n\t\t\t\t\t<Pressable onPress={handleStepsToggle} style={s.stepsToggle}>\n\t\t\t\t\t\t<View\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\ttransform: [{ rotate: isStepsExpanded ? \"90deg\" : \"0deg\" }],\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ChevronRight size={12} color=\"rgba(156,163,175,0.6)\" />\n\t\t\t\t\t\t</View>\n\t\t\t\t\t\t<Text style={s.stepsToggleText}>\n\t\t\t\t\t\t\t{getStepsLabel(false)}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</Pressable>\n\n\t\t\t\t\t{/* Expanded steps list */}\n\t\t\t\t\t{isStepsExpanded && hasSteps && (\n\t\t\t\t\t\t<Animated.View\n\t\t\t\t\t\t\tentering={animated ? FadeIn.duration(200) : undefined}\n\t\t\t\t\t\t\texiting={animated ? FadeOut.duration(150) : undefined}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{!isStreaming && allThinkingText?.trim() ? (\n\t\t\t\t\t\t\t\t<ThinkingBlock text={allThinkingText} />\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t<View style={s.stepsList}>\n\t\t\t\t\t\t\t\t{message.steps!.map((step) => {\n\t\t\t\t\t\t\t\t\tconst isExec =\n\t\t\t\t\t\t\t\t\t\tstep.id === currentExecutingStepId &&\n\t\t\t\t\t\t\t\t\t\tstep.status === \"in_progress\" &&\n\t\t\t\t\t\t\t\t\t\tisStreaming &&\n\t\t\t\t\t\t\t\t\t\t!isCancelled;\n\t\t\t\t\t\t\t\t\tconst hasTime = step.elapsedMs != null && step.elapsedMs > 0;\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<View key={step.id} style={s.stepItem}>\n\t\t\t\t\t\t\t\t\t{/* Step row: icon + text */}\n\t\t\t\t\t\t\t\t\t<View style={s.stepRow}>\n\t\t\t\t\t\t\t\t\t\t<View style={{ marginTop: 1 }}>\n\t\t\t\t\t\t\t\t\t\t\t{renderStepIcon(step, isExec)}\n\t\t\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t\t\t\t{isExec ? (\n\t\t\t\t\t\t\t\t\t\t\t<ShimmerText style={s.stepText}>\n\t\t\t\t\t\t\t\t\t\t\t\t{step.message}\n\t\t\t\t\t\t\t\t\t\t\t</ShimmerText>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\t\t\t\t\t\ts.stepText,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep.status === \"completed\" && s.stepTextMuted,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep.status === \"error\" && s.stepTextError,\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\ts.stepTextSuccess,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep.status === \"pending\" && s.stepTextPending,\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\t!isExec &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ts.stepTextInProgress,\n\t\t\t\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{step.message}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</View>\n\n\t\t\t\t\t\t\t\t\t{/* Time badge below, aligned with text */}\n\t\t\t\t\t\t\t\t\t{hasTime && (\n\t\t\t\t\t\t\t\t\t\t<View style={s.timeBadgeWrap}>\n\t\t\t\t\t\t\t\t\t\t\t<View style={s.timeBadge}>\n\t\t\t\t\t\t\t\t\t\t\t\t<Clock size={8} color=\"rgba(156,163,175,0.6)\" />\n\t\t\t\t\t\t\t\t\t\t\t\t<Text style={s.timeBadgeText}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{(step.elapsedMs! / 1000).toFixed(1)}s\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t</Animated.View>\n\t\t\t\t\t)}\n\t\t\t\t</View>\n\t\t\t)}\n\t\t</View>\n\t);\n\n\treturn <AnimatedView {...animatedProps}>{messageContent}</AnimatedView>;\n}\n\n/* ---- Styles ---- */\nconst s = StyleSheet.create({\n\touterWrap: { width: \"100%\" },\n\trow: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"flex-start\",\n\t\tgap: 10,\n\t\twidth: \"100%\",\n\t},\n\n\t// Avatar\n\tavatarWrap: { width: 28, height: 28, marginTop: 2 },\n\tdotContainer: {\n\t\twidth: 28,\n\t\theight: 28,\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t},\n\tstreamDot: {\n\t\twidth: 8,\n\t\theight: 8,\n\t\tborderRadius: 4,\n\t\tbackgroundColor: \"#00858d\",\n\t\topacity: 0.75,\n\t},\n\tavatar: {\n\t\twidth: 28,\n\t\theight: 28,\n\t\tborderRadius: 14,\n\t\tbackgroundColor: \"rgba(0,0,0,0.03)\",\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tborderColor: \"rgba(0,0,0,0.08)\",\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t},\n\n\t// Bubble column\n\t// Bubble column — flex: 1 so it fills available width on mobile (still capped by maxWidth)\n\tbubbleCol: { flex: 1, minWidth: 0, maxWidth: \"92%\", flexShrink: 1 },\n\tbubbleColCentered: { maxWidth: \"95%\" },\n\n\t// Badge\n\tbadgeWrap: { marginBottom: 6 },\n\tbadge: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tgap: 4,\n\t\tpaddingHorizontal: 8,\n\t\tpaddingVertical: 3,\n\t\tborderRadius: 10,\n\t\talignSelf: \"flex-start\",\n\t},\n\tbadgeApproved: {\n\t\tbackgroundColor: \"#DCFCE7\",\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tborderColor: \"rgba(34,197,94,0.3)\",\n\t},\n\tbadgeApprovedText: { fontSize: 14, lineHeight: 21, fontWeight: \"500\", color: \"#15803D\" },\n\tbadgeRejected: {\n\t\tbackgroundColor: \"#FEE2E2\",\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tborderColor: \"rgba(239,68,68,0.3)\",\n\t},\n\tbadgeRejectedText: { fontSize: 14, lineHeight: 21, fontWeight: \"500\", color: \"#B91C1C\" },\n\n\t// Bubble\n\tbubble: {\n\t\toverflow: \"hidden\",\n\t\twidth: \"100%\",\n\t\tpaddingHorizontal: 14,\n\t\tpaddingVertical: 10,\n\t},\n\tbubbleDefault: {\n\t\tbackgroundColor: \"rgba(0,0,0,0.04)\",\n\t\tborderRadius: 16,\n\t\tborderTopLeftRadius: 4,\n\t},\n\tbubbleCentered: {\n\t\tbackgroundColor: \"#FFFFFF\",\n\t\tborderWidth: 1,\n\t\tborderColor: \"rgba(0,0,0,0.08)\",\n\t\tborderRadius: 16,\n\t\tborderTopLeftRadius: 4,\n\t},\n\tbubbleError: {\n\t\tbackgroundColor: \"rgba(239,68,68,0.05)\",\n\t\tborderWidth: 1,\n\t\tborderColor: \"rgba(239,68,68,0.15)\",\n\t},\n\n\t// Agent name (text-sm to match query)\n\tagentName: {\n\t\tfontSize: 14,\n\t\tlineHeight: 21,\n\t\tfontWeight: \"600\",\n\t\tcolor: \"rgba(0,0,0,0.35)\",\n\t\tmarginBottom: 2,\n\t},\n\n\t// All body text inside assistant bubble: same size as query (text-sm = 14px)\n\tbubbleBodyText: {\n\t\tfontSize: 14,\n\t\tlineHeight: 21,\n\t\tcolor: \"#9CA3AF\",\n\t\tflex: 1,\n\t\tminWidth: 0,\n\t},\n\n\t// Thinking state\n\tthinkingRow: { flexDirection: \"row\", alignItems: \"center\", gap: 8 },\n\tthinkingText: { fontSize: 14, lineHeight: 21, color: \"#9CA3AF\" },\n\tthinkingTextFlex: { flex: 1, minWidth: 0 },\n\n\t// Trace button\n\ttraceBtn: {\n\t\tpadding: 7,\n\t\tbackgroundColor: \"rgba(0,0,0,0.02)\",\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tborderColor: \"rgba(0,0,0,0.08)\",\n\t\tborderRadius: 8,\n\t\tmarginTop: 2,\n\t},\n\ttraceBtnOffset: { marginTop: 30 },\n\n\t// Steps section\n\tstepsOuter: { marginTop: 6 },\n\tstepsIndented: { marginLeft: 38 }, // 28 avatar + 10 gap\n\n\t// Toggle\n\tstepsToggle: { flexDirection: \"row\", alignItems: \"center\", gap: 5 },\n\tstepsToggleText: { fontSize: 11, color: \"rgba(156,163,175,0.65)\" },\n\n\t// Steps list\n\tstepsList: { marginTop: 6 },\n\tstepItem: { marginBottom: 6 },\n\tstepRow: { flexDirection: \"row\", alignItems: \"flex-start\", gap: 5 },\n\ticonWrap: {\n\t\twidth: 16,\n\t\theight: 16,\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t},\n\tdotMuted: {\n\t\twidth: 5,\n\t\theight: 5,\n\t\tborderRadius: 3,\n\t\tbackgroundColor: \"rgba(0,0,0,0.12)\",\n\t},\n\tstepText: {\n\t\tfontSize: 12,\n\t\tlineHeight: 17,\n\t\tflex: 1,\n\t\tminWidth: 0,\n\t\tcolor: \"#374151\",\n\t},\n\tstepTextMuted: { color: \"#9CA3AF\" },\n\tstepTextError: { color: \"#EF4444\" },\n\tstepTextSuccess: { color: \"#10B981\" },\n\tstepTextPending: { color: \"rgba(156,163,175,0.4)\" },\n\tstepTextInProgress: { color: \"rgba(156,163,175,0.6)\" },\n\n\t// Time badge — aligned with text (pl = 16 icon + 5 gap = 21)\n\ttimeBadgeWrap: { paddingLeft: 21, marginTop: 3 },\n\ttimeBadge: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tgap: 3,\n\t\tbackgroundColor: \"rgba(0,0,0,0.03)\",\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tborderColor: \"rgba(0,0,0,0.06)\",\n\t\tborderRadius: 4,\n\t\tpaddingHorizontal: 5,\n\t\tpaddingVertical: 2,\n\t\talignSelf: \"flex-start\",\n\t},\n\ttimeBadgeText: {\n\t\tfontSize: 9,\n\t\tfontFamily: \"monospace\",\n\t\tcolor: \"rgba(156,163,175,0.6)\",\n\t},\n});\n\n/* ---- ThinkingBlock styles ---- */\nconst ts = StyleSheet.create({\n\tthinkingWrap: { marginTop: 4, marginBottom: 4 },\n\tthinkingToggle: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tgap: 3,\n\t},\n\tthinkingToggleText: {\n\t\tfontSize: 10,\n\t\tcolor: \"rgba(156,163,175,0.5)\",\n\t},\n\tthinkingContent: {\n\t\tmarginTop: 4,\n\t\tbackgroundColor: \"rgba(0,0,0,0.03)\",\n\t\tborderRadius: 6,\n\t\tpadding: 8,\n\t},\n\tthinkingContentText: {\n\t\tfontSize: 11,\n\t\tlineHeight: 16,\n\t\tcolor: \"rgba(107,114,128,0.8)\",\n\t},\n});\n\n/* ---- Markdown styles ---- */\nconst markdownStyles = {\n\tbody: { fontSize: 14, lineHeight: 21, color: \"#1F2937\" },\n\tparagraph: { marginBottom: 8, fontSize: 14, lineHeight: 21 },\n\tstrong: { fontWeight: \"600\" as const },\n\tem: { fontStyle: \"italic\" as const },\n\tcode_inline: {\n\t\tbackgroundColor: \"rgba(0,0,0,0.04)\",\n\t\tpaddingHorizontal: 5,\n\t\tpaddingVertical: 2,\n\t\tborderRadius: 4,\n\t\tfontSize: 12,\n\t\tfontFamily: \"monospace\",\n\t},\n\tcode_block: {\n\t\tbackgroundColor: \"rgba(0,0,0,0.04)\",\n\t\tpadding: 12,\n\t\tborderRadius: 8,\n\t\tfontSize: 12,\n\t\tfontFamily: \"monospace\",\n\t\tmarginVertical: 8,\n\t},\n\tlist_item: { fontSize: 14, lineHeight: 21 },\n\tbullet_list: { marginBottom: 8 },\n\tordered_list: { marginBottom: 8 },\n\theading1: {\n\t\tfontSize: 18,\n\t\tfontWeight: \"600\" as const,\n\t\tmarginBottom: 6,\n\t\tmarginTop: 12,\n\t\tcolor: \"#1F2937\",\n\t},\n\theading2: {\n\t\tfontSize: 16,\n\t\tfontWeight: \"600\" as const,\n\t\tmarginBottom: 6,\n\t\tmarginTop: 10,\n\t\tcolor: \"#1F2937\",\n\t},\n\theading3: {\n\t\tfontSize: 14,\n\t\tfontWeight: \"600\" as const,\n\t\tmarginBottom: 4,\n\t\tmarginTop: 8,\n\t\tcolor: \"#1F2937\",\n\t},\n\tblockquote: {\n\t\tborderLeftWidth: 3,\n\t\tborderLeftColor: \"rgba(0,0,0,0.1)\",\n\t\tpaddingLeft: 12,\n\t\tmarginVertical: 8,\n\t\tfontStyle: \"italic\" as const,\n\t\tcolor: \"#6B7280\",\n\t},\n\thr: {\n\t\tmarginVertical: 16,\n\t\tborderBottomWidth: StyleSheet.hairlineWidth,\n\t\tborderBottomColor: \"rgba(0,0,0,0.1)\",\n\t},\n\tlink: { color: \"#007AFF\", textDecorationLine: \"underline\" as const },\n};\n\nconst markdownErrorStyles = {\n\t...markdownStyles,\n\tbody: { ...markdownStyles.body, color: \"#EF4444\" },\n\tparagraph: { ...markdownStyles.paragraph, color: \"#EF4444\" },\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 { User } from \"lucide-react-native\";\nimport { StyleSheet, Text, View } from \"react-native\";\nimport Animated, { FadeInDown } from \"react-native-reanimated\";\nimport type { UserMessageProps } from \"../../types\";\nimport { formatDate } from \"../../utils\";\n\nexport function UserMessage({\n\tmessage,\n\tanimated = false,\n\tshowAvatar = false,\n}: UserMessageProps) {\n\tconst AnimatedView = animated ? Animated.View : View;\n\tconst animatedProps = animated ? { entering: FadeInDown.duration(250) } : {};\n\n\treturn (\n\t\t<AnimatedView {...animatedProps}>\n\t\t\t<View style={s.container}>\n\t\t\t\t<View style={s.messageCol}>\n\t\t\t\t\t<View style={s.bubble}>\n\t\t\t\t\t\t<Text style={s.text}>{message.content}</Text>\n\t\t\t\t\t</View>\n\t\t\t\t\t<Text style={s.timestamp}>{formatDate(message.timestamp)}</Text>\n\t\t\t\t</View>\n\n\t\t\t\t{showAvatar && (\n\t\t\t\t\t<View style={s.avatarWrap}>\n\t\t\t\t\t\t<View style={s.avatar}>\n\t\t\t\t\t\t\t<User size={13} color=\"#FFFFFF\" />\n\t\t\t\t\t\t</View>\n\t\t\t\t\t</View>\n\t\t\t\t)}\n\t\t\t</View>\n\t\t</AnimatedView>\n\t);\n}\n\nconst s = StyleSheet.create({\n\tcontainer: {\n\t\tflexDirection: \"row\",\n\t\tjustifyContent: \"flex-end\",\n\t\twidth: \"100%\",\n\t\tgap: 10,\n\t},\n\tmessageCol: {\n\t\tmaxWidth: \"80%\",\n\t\tminWidth: 0,\n\t\tflexDirection: \"column\",\n\t\talignItems: \"flex-end\",\n\t},\n\tbubble: {\n\t\tborderRadius: 16,\n\t\tborderBottomRightRadius: 4,\n\t\tpaddingHorizontal: 14,\n\t\tpaddingVertical: 10,\n\t\tbackgroundColor: \"#00858d\",\n\t},\n\ttext: { fontSize: 14, color: \"#FFFFFF\", lineHeight: 20 },\n\ttimestamp: { fontSize: 10, marginTop: 3, color: \"rgba(0,0,0,0.25)\" },\n\tavatarWrap: { width: 28, height: 28, marginTop: 2 },\n\tavatar: {\n\t\twidth: 28,\n\t\theight: 28,\n\t\tborderRadius: 14,\n\t\tbackgroundColor: \"#00858d\",\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t},\n});\n","import type { MessageRowProps } from \"../../types\";\nimport { AgentMessage } from \"../AgentMessage\";\nimport { UserMessage } from \"../UserMessage\";\n\nexport function MessageRow({\n\tmessage,\n\tstage = \"DEV\",\n\tanimated = false,\n\tshowAgentName = false,\n\tagentName = \"Paygent\",\n\tshowAvatars = false,\n\tshowUserAvatar,\n\tshowAssistantAvatar,\n\tshowExecutionSteps = false,\n\tshowStreamingDot = false,\n\tstreamingStepsText,\n\tcompletedStepsText,\n\tonExecutionTraceClick,\n}: MessageRowProps) {\n\t// Determine actual avatar visibility\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\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 { useEffect } from \"react\";\nimport { StyleSheet, View } from \"react-native\";\nimport Animated, {\n\tuseAnimatedStyle,\n\tuseSharedValue,\n\twithRepeat,\n\twithTiming,\n} from \"react-native-reanimated\";\n\ninterface MessageRowSkeletonProps {\n\tisRightAligned?: boolean;\n}\n\nexport function MessageRowSkeleton({\n\tisRightAligned = false,\n}: MessageRowSkeletonProps) {\n\tconst opacity = useSharedValue(0.3);\n\n\tuseEffect(() => {\n\t\topacity.value = withRepeat(withTiming(0.8, { duration: 1200 }), -1, true);\n\t}, []);\n\n\tconst animatedStyle = useAnimatedStyle(() => ({ opacity: opacity.value }));\n\n\treturn (\n\t\t<View\n\t\t\tstyle={[s.container, isRightAligned ? s.containerRight : s.containerLeft]}\n\t\t>\n\t\t\t<View\n\t\t\t\tstyle={[s.content, isRightAligned ? s.contentRight : s.contentLeft]}\n\t\t\t>\n\t\t\t\t<Animated.View\n\t\t\t\t\tstyle={[\n\t\t\t\t\t\ts.bubble,\n\t\t\t\t\t\tisRightAligned ? s.bubbleRight : s.bubbleLeft,\n\t\t\t\t\t\tanimatedStyle,\n\t\t\t\t\t]}\n\t\t\t\t>\n\t\t\t\t\t<View style={s.skeletonWrap}>\n\t\t\t\t\t\t<View style={[s.line, { width: \"70%\" }]} />\n\t\t\t\t\t\t<View style={[s.line, { width: \"100%\" }]} />\n\t\t\t\t\t\t<View style={[s.line, { width: \"80%\" }]} />\n\t\t\t\t\t</View>\n\t\t\t\t</Animated.View>\n\t\t\t\t<Animated.View style={[s.timestamp, animatedStyle]} />\n\t\t\t</View>\n\t\t</View>\n\t);\n}\n\nconst s = StyleSheet.create({\n\tcontainer: { flexDirection: \"row\", width: \"100%\" },\n\tcontainerLeft: { justifyContent: \"flex-start\" },\n\tcontainerRight: { justifyContent: \"flex-end\" },\n\tcontent: { maxWidth: \"75%\", width: \"100%\" },\n\tcontentLeft: { alignItems: \"flex-start\" },\n\tcontentRight: { alignItems: \"flex-end\" },\n\tbubble: { borderRadius: 16, padding: 14, width: \"100%\" },\n\tbubbleLeft: { backgroundColor: \"rgba(0,0,0,0.04)\", borderTopLeftRadius: 4 },\n\tbubbleRight: {\n\t\tbackgroundColor: \"rgba(0,122,255,0.08)\",\n\t\tborderBottomRightRadius: 4,\n\t},\n\tskeletonWrap: { gap: 8 },\n\tline: { height: 10, backgroundColor: \"rgba(0,0,0,0.08)\", borderRadius: 5 },\n\ttimestamp: {\n\t\theight: 6,\n\t\twidth: 50,\n\t\tbackgroundColor: \"rgba(0,0,0,0.06)\",\n\t\tborderRadius: 3,\n\t\tmarginTop: 4,\n\t},\n});\n","import { MessageCircle } from \"lucide-react-native\";\nimport { useEffect, useRef } from \"react\";\nimport { FlatList, StyleSheet, Text, View } from \"react-native\";\nimport Animated, { FadeIn } from \"react-native-reanimated\";\nimport type { MessageListProps } from \"../../types\";\nimport { MessageRow } from \"../MessageRow\";\nimport { MessageRowSkeleton } from \"../MessageRowSkeleton\";\n\nexport function MessageList({\n\tmessages,\n\tisLoading = false,\n\temptyStateText = \"What can I help with?\",\n\tshowEmptyStateIcon = true,\n\tlayout = \"full-width\",\n\tshowTimestamps = false,\n\tstage = \"DEV\",\n\tanimated = false,\n\tshowAgentName = false,\n\tagentName = \"Paygent\",\n\tshowAvatars = false,\n\tshowUserAvatar,\n\tshowAssistantAvatar,\n\tshowExecutionSteps = false,\n\tshowStreamingDot = false,\n\tstreamingStepsText,\n\tcompletedStepsText,\n\tonExecutionTraceClick,\n\tclassName,\n}: MessageListProps) {\n\tconst flatListRef = useRef<FlatList>(null);\n\n\t// Auto-scroll to bottom when new messages arrive\n\tuseEffect(() => {\n\t\tif (messages.length > 0) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tflatListRef.current?.scrollToEnd({ animated: true });\n\t\t\t}, 100);\n\t\t}\n\t}, [messages.length]);\n\n\tif (isLoading) {\n\t\treturn (\n\t\t\t<View style={s.container}>\n\t\t\t\t<View style={s.skeletonContent}>\n\t\t\t\t\t{Array.from({ length: 5 }).map((_, index) => (\n\t\t\t\t\t\t<MessageRowSkeleton\n\t\t\t\t\t\t\tkey={`skeleton-${index}`}\n\t\t\t\t\t\t\tisRightAligned={index % 3 === 0}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</View>\n\t\t\t</View>\n\t\t);\n\t}\n\n\tif (messages.length === 0) {\n\t\treturn (\n\t\t\t<View style={s.emptyContainer}>\n\t\t\t\t<Animated.View entering={FadeIn.duration(500)} style={s.emptyContent}>\n\t\t\t\t\t{showEmptyStateIcon && (\n\t\t\t\t\t\t<View style={s.iconContainer}>\n\t\t\t\t\t\t\t<MessageCircle size={24} color=\"rgba(156,163,175,0.7)\" />\n\t\t\t\t\t\t</View>\n\t\t\t\t\t)}\n\t\t\t\t\t{emptyStateText.split(\"\\n\").map((line, index) => (\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\tstyle={index === 0 ? s.emptyTitle : s.emptySubtitle}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{line}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t))}\n\t\t\t\t</Animated.View>\n\t\t\t</View>\n\t\t);\n\t}\n\n\treturn (\n\t\t<FlatList\n\t\t\tref={flatListRef}\n\t\t\tdata={messages}\n\t\t\tkeyExtractor={(item) => item.id}\n\t\t\trenderItem={({ item }) => (\n\t\t\t\t<MessageRow\n\t\t\t\t\tmessage={item}\n\t\t\t\t\tstage={stage}\n\t\t\t\t\tanimated={animated}\n\t\t\t\t\tshowAgentName={showAgentName}\n\t\t\t\t\tagentName={agentName}\n\t\t\t\t\tshowAvatars={showAvatars}\n\t\t\t\t\tshowUserAvatar={showUserAvatar}\n\t\t\t\t\tshowAssistantAvatar={showAssistantAvatar}\n\t\t\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\t\t\tcompletedStepsText={completedStepsText}\n\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\tcontentContainerStyle={[\n\t\t\t\ts.listContent,\n\t\t\t\tlayout === \"centered\" && s.listContentCentered,\n\t\t\t]}\n\t\t\tshowsVerticalScrollIndicator={false}\n\t\t/>\n\t);\n}\n\nconst s = StyleSheet.create({\n\tcontainer: { flex: 1 },\n\tskeletonContent: { padding: 16, gap: 16 },\n\temptyContainer: {\n\t\tflex: 1,\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t\tpadding: 24,\n\t},\n\temptyContent: { alignItems: \"center\", gap: 10, maxWidth: 280 },\n\ticonContainer: {\n\t\twidth: 56,\n\t\theight: 56,\n\t\tborderRadius: 16,\n\t\tbackgroundColor: \"rgba(0,0,0,0.03)\",\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tborderColor: \"rgba(0,0,0,0.06)\",\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t\tmarginBottom: 4,\n\t},\n\temptyTitle: {\n\t\tfontSize: 20,\n\t\tfontWeight: \"600\",\n\t\tcolor: \"#1F2937\",\n\t\ttextAlign: \"center\",\n\t},\n\temptySubtitle: {\n\t\tfontSize: 14,\n\t\tcolor: \"#9CA3AF\",\n\t\ttextAlign: \"center\",\n\t\tlineHeight: 20,\n\t},\n\tlistContent: { padding: 16, gap: 16 },\n\tlistContentCentered: { maxWidth: 672, alignSelf: \"center\", width: \"100%\" },\n});\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { View, TextInput, StyleSheet, Animated } from \"react-native\";\nimport type { OtpInputProps } from \"../../types\";\n\nconst DEFAULT_MAX_LENGTH = 6;\nconst MAX_SUPPORTED_LENGTH = 12;\nconst OTP_ERROR_BORDER = \"#ef4444\";\nconst COMPLETE_PULSE_MS = 350;\nconst SHAKE_MS = 400;\n\nexport function OtpInput({\n\tvalue,\n\tonChange,\n\tmaxLength,\n\tdisabled = false,\n\terror = false,\n}: OtpInputProps) {\n\tconst inputRefs = useRef<(TextInput | null)[]>([]);\n\tconst shakeAnim = useRef(new Animated.Value(0)).current;\n\tconst scaleAnim = useRef(new Animated.Value(1)).current;\n\tconst prevLenRef = useRef(0);\n\tconst [internalError, setInternalError] = useState(false);\n\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 = value.length === safeMaxLength && /^\\d+$/.test(value);\n\n\t// Auto-focus first input on mount\n\tuseEffect(() => {\n\t\tif (!disabled) {\n\t\t\tinputRefs.current[0]?.focus();\n\t\t}\n\t}, [disabled]);\n\n\t// Error shake\n\tuseEffect(() => {\n\t\tif (!error) {\n\t\t\tsetInternalError(false);\n\t\t\treturn;\n\t\t}\n\t\tsetInternalError(true);\n\t\tAnimated.sequence([\n\t\t\tAnimated.timing(shakeAnim, { toValue: 1, duration: SHAKE_MS, useNativeDriver: true }),\n\t\t\tAnimated.timing(shakeAnim, { toValue: 0, duration: 0, useNativeDriver: true }),\n\t\t]).start();\n\t}, [error, shakeAnim]);\n\n\t// Completion pulse\n\tuseEffect(() => {\n\t\tif (isFull && prevLenRef.current < safeMaxLength) {\n\t\t\tAnimated.sequence([\n\t\t\t\tAnimated.timing(scaleAnim, { toValue: 1.04, duration: COMPLETE_PULSE_MS * 0.4, useNativeDriver: true }),\n\t\t\t\tAnimated.timing(scaleAnim, { toValue: 1, duration: COMPLETE_PULSE_MS * 0.6, useNativeDriver: true }),\n\t\t\t]).start();\n\t\t}\n\t\tprevLenRef.current = value.length;\n\t}, [isFull, value.length, safeMaxLength, scaleAnim]);\n\n\tconst shakeTranslate = shakeAnim.interpolate({\n\t\tinputRange: [0, 0.15, 0.3, 0.45, 0.6, 0.75, 0.9, 1],\n\t\toutputRange: [0, -6, 5, -4, 3, -2, 1, 0],\n\t});\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, text: string) => {\n\t\tconst cleaned = text.replace(/\\D/g, \"\");\n\t\tif (cleaned.length > 1) {\n\t\t\tconst pasted = cleaned.slice(0, safeMaxLength);\n\t\t\tconst newDigits = pasted\n\t\t\t\t.split(\"\")\n\t\t\t\t.concat(Array(safeMaxLength).fill(\"\"))\n\t\t\t\t.slice(0, safeMaxLength);\n\t\t\tupdateValue(newDigits);\n\t\t\tfocusInput(Math.min(pasted.length, safeMaxLength - 1));\n\t\t\treturn;\n\t\t}\n\n\t\tconst char = cleaned.slice(-1);\n\t\tconst newDigits = [...digits];\n\t\tnewDigits[index] = char;\n\t\tupdateValue(newDigits);\n\n\t\tif (char && index < safeMaxLength - 1) {\n\t\t\tfocusInput(index + 1);\n\t\t}\n\t};\n\n\tconst handleKeyPress = (index: number, key: string) => {\n\t\tif (key === \"Backspace\") {\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}\n\t};\n\n\treturn (\n\t\t<Animated.View\n\t\t\tstyle={[\n\t\t\t\ts.container,\n\t\t\t\t{ transform: [{ translateX: shakeTranslate }, { scale: scaleAnim }] },\n\t\t\t]}\n\t\t>\n\t\t\t{digits.map((digit, i) => (\n\t\t\t\t<TextInput\n\t\t\t\t\tkey={i}\n\t\t\t\t\tref={(el) => { inputRefs.current[i] = el; }}\n\t\t\t\t\tvalue={digit}\n\t\t\t\t\teditable={!disabled}\n\t\t\t\t\tkeyboardType=\"number-pad\"\n\t\t\t\t\tmaxLength={1}\n\t\t\t\t\tonChangeText={(text) => handleChange(i, text)}\n\t\t\t\t\tonKeyPress={({ nativeEvent }) => handleKeyPress(i, nativeEvent.key)}\n\t\t\t\t\tonFocus={() => inputRefs.current[i]?.setNativeProps({ selection: { start: 0, end: 1 } })}\n\t\t\t\t\tstyle={[\n\t\t\t\t\t\ts.input,\n\t\t\t\t\t\tdisabled && s.inputDisabled,\n\t\t\t\t\t\tinternalError && s.inputError,\n\t\t\t\t\t]}\n\t\t\t\t\taccessibilityLabel={`Digit ${i + 1}`}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</Animated.View>\n\t);\n}\n\nconst PAYMAN_OTP = {\n\tbg: \"#FFFFFF\",\n\tborder: \"rgba(0,0,0,0.1)\",\n\tfg: \"#18181b\",\n\tdisabledBg: \"rgba(0,0,0,0.03)\",\n};\n\nconst s = StyleSheet.create({\n\tcontainer: { flexDirection: \"row\", gap: 8, justifyContent: \"center\" },\n\tinput: {\n\t\twidth: 44,\n\t\theight: 50,\n\t\ttextAlign: \"center\",\n\t\tfontSize: 20,\n\t\tfontWeight: \"600\",\n\t\tborderWidth: 1,\n\t\tborderColor: PAYMAN_OTP.border,\n\t\tborderRadius: 10,\n\t\tcolor: PAYMAN_OTP.fg,\n\t\tbackgroundColor: PAYMAN_OTP.bg,\n\t},\n\tinputDisabled: { backgroundColor: PAYMAN_OTP.disabledBg, opacity: 0.5 },\n\tinputError: {\n\t\tborderColor: OTP_ERROR_BORDER,\n\t\tborderWidth: 1.5,\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 { X } from \"lucide-react-native\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n\tActivityIndicator,\n\tDimensions,\n\tImage,\n\tKeyboard,\n\tKeyboardAvoidingView,\n\tModal,\n\tPlatform,\n\tPressable,\n\tScrollView,\n\tStyleSheet,\n\tText,\n\tView,\n} from \"react-native\";\nimport paymanLogoMark from \"../../assets/payman-mono-crop-blue.png\";\nimport type { UserActionModalProps } from \"../../types\";\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\n/** Logo / footer brand teal — hero amount & payee use this instead of primary blue */\nconst PAYMAN_BRAND_GREEN = \"#0A3B44\";\n\nconst PAYMAN = {\n\tprimary: \"#00858d\",\n\tprimaryForeground: \"#ffffff\",\n\tforeground: \"#18181b\",\n\tmutedForeground: \"#71717a\",\n\tmutedForegroundLight: \"#a1a1aa\",\n\tborder: \"#e4e4e7\",\n\tcard: \"#ffffff\",\n\tmodalBackdrop: \"rgba(0,0,0,0.4)\",\n} as const;\n\nconst { width: SCREEN_WIDTH } = Dimensions.get(\"window\");\nconst DIALOG_MAX_WIDTH = Math.min(440, SCREEN_WIDTH * 0.94);\nconst DIALOG_PADDING = 28;\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 [keyboardVisible, setKeyboardVisible] = useState(false);\n\tconst [otpError, setOtpError] = useState(false);\n\tconst lastAutoSubmittedRef = useRef<string>(\"\");\n\tconst submitInFlightRef = useRef(false);\n\tconst submitGenerationRef = useRef(0);\n\n\tconst schema = getOtpSchemaFromRequest(userActionRequest?.requestedSchema);\n\n\tuseEffect(() => {\n\t\tconst show = Keyboard.addListener(\n\t\t\tPlatform.OS === \"ios\" ? \"keyboardWillShow\" : \"keyboardDidShow\",\n\t\t\t() => setKeyboardVisible(true)\n\t\t);\n\t\tconst hide = Keyboard.addListener(\n\t\t\tPlatform.OS === \"ios\" ? \"keyboardWillHide\" : \"keyboardDidHide\",\n\t\t\t() => setKeyboardVisible(false)\n\t\t);\n\t\treturn () => {\n\t\t\tshow.remove();\n\t\t\thide.remove();\n\t\t};\n\t}, []);\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((prev) => prev - 1),\n\t\t\t1000\n\t\t);\n\t\treturn () => clearTimeout(timer);\n\t}, [resendCooldownRemaining]);\n\n\t// Wrong OTP — 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(\n\t\t\t() => resetActionState(),\n\t\t\tACTION_PENDING_TIMEOUT_MS\n\t\t);\n\t\treturn () => clearTimeout(timeout);\n\t}, [isOpen, isSubmitting, actionType, resetActionState]);\n\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\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} finally {\n\t\t\tsetActionType(null);\n\t\t\tsetIsSubmitting(false);\n\t\t}\n\t}, [resendCooldownRemaining, onResend]);\n\n\tif (!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\tconst modalPosition = keyboardVisible ? \"flex-end\" : \"center\";\n\n\treturn (\n\t\t<Modal\n\t\t\tvisible={isOpen}\n\t\t\ttransparent\n\t\t\tanimationType=\"fade\"\n\t\t\tonRequestClose={() => {}}\n\t\t\tstatusBarTranslucent={Platform.OS === \"android\"}\n\t\t>\n\t\t\t<KeyboardAvoidingView\n\t\t\t\tstyle={[s.keyboardAvoid, { justifyContent: modalPosition }]}\n\t\t\t\tbehavior={Platform.OS === \"ios\" ? \"padding\" : \"height\"}\n\t\t\t\tkeyboardVerticalOffset={Platform.OS === \"ios\" ? 0 : 20}\n\t\t\t>\n\t\t\t\t<View style={[s.modalOverlay, { justifyContent: modalPosition }]}>\n\t\t\t\t\t<ScrollView\n\t\t\t\t\t\tcontentContainerStyle={[\n\t\t\t\t\t\t\ts.scrollContent,\n\t\t\t\t\t\t\t{ justifyContent: modalPosition },\n\t\t\t\t\t\t]}\n\t\t\t\t\t\tshowsVerticalScrollIndicator={false}\n\t\t\t\t\t\tkeyboardShouldPersistTaps=\"handled\"\n\t\t\t\t\t>\n\t\t\t\t\t<View style={[s.dialog, { width: DIALOG_MAX_WIDTH }]}>\n\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\tonPress={handleReject}\n\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\tstyle={s.closeBtn}\n\t\t\t\t\t\t\taccessibilityLabel=\"Close\"\n\t\t\t\t\t\t\thitSlop={8}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{({ pressed }) => (\n\t\t\t\t\t\t\t\t<X\n\t\t\t\t\t\t\t\t\tsize={16}\n\t\t\t\t\t\t\t\t\tcolor={\n\t\t\t\t\t\t\t\t\t\tpressed && !isSubmitting\n\t\t\t\t\t\t\t\t\t\t\t? PAYMAN.foreground\n\t\t\t\t\t\t\t\t\t\t\t: PAYMAN.mutedForeground\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tstrokeWidth={2.5}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Pressable>\n\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tstyle={s.description}\n\t\t\t\t\t\t\taccessibilityLabel=\"payman-modal-desc\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{userActionRequest.message}\n\t\t\t\t\t\t</Text>\n\n\t\t\t\t\t\t{isPayment ? (\n\t\t\t\t\t\t\t<Text style={s.transferLabel}>Pay</Text>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t{isPayment && userActionRequest.metadata?.amount ? (\n\t\t\t\t\t\t\t<Text style={s.heroAmount}>\n\t\t\t\t\t\t\t\t{formatAmountForDisplay(userActionRequest.metadata.amount)}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t{isPayee ? (\n\t\t\t\t\t\t\t<Text style={s.transferLabel}>Create Payee</Text>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t{isPayee && userActionRequest.metadata?.payeeName ? (\n\t\t\t\t\t\t\t<View style={s.heroPayeeWrap}>\n\t\t\t\t\t\t\t\t<Text style={s.heroPayeeName}>\n\t\t\t\t\t\t\t\t\t{userActionRequest.metadata.payeeName}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t{userActionRequest.metadata.payeeType ? (\n\t\t\t\t\t\t\t\t\t<Text style={s.heroPayeeType}>\n\t\t\t\t\t\t\t\t\t\t{userActionRequest.metadata.payeeType}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t<View style={s.otpWrap} accessibilityLabel=\"payman-otp-wrap\">\n\t\t\t\t\t\t\t<OtpInput\n\t\t\t\t\t\t\t\tvalue={otp}\n\t\t\t\t\t\t\t\tonChange={setOtp}\n\t\t\t\t\t\t\t\tmaxLength={schema.maxLength}\n\t\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\t\terror={otpError}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{isVerifying ? (\n\t\t\t\t\t\t\t\t<View style={s.verifyingRow}>\n\t\t\t\t\t\t\t\t\t<ActivityIndicator\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\tcolor={PAYMAN_BRAND_GREEN}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<Text style={s.verifyingText}>\n\t\t\t\t\t\t\t\t\t\t{MODAL_CONTENT.LOADING_APPROVE}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</View>\n\n\t\t\t\t\t\t<View style={s.linksCol}>\n\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\tonPress={handleResend}\n\t\t\t\t\t\t\t\tdisabled={isSubmitting || resendCooldownRemaining > 0}\n\t\t\t\t\t\t\t\taccessibilityLabel=\"payman-modal-btn-resend\"\n\t\t\t\t\t\t\t\ttestID=\"payman-modal-btn-resend\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{({ pressed }) => (\n\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\t\t\t\ts.linkText,\n\t\t\t\t\t\t\t\t\t\t\tpressed && { opacity: 0.6 },\n\t\t\t\t\t\t\t\t\t\t\t(isSubmitting || resendCooldownRemaining > 0) &&\n\t\t\t\t\t\t\t\t\t\t\t\ts.linkDisabled,\n\t\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{actionType === \"resend\" ? (\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{MODAL_CONTENT.LOADING_RESEND}\n\t\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t\t) : resendCooldownRemaining > 0 ? (\n\t\t\t\t\t\t\t\t\t\t\t`${MODAL_CONTENT.RESEND_AVAILABLE_IN} ${resendCooldownRemaining}s`\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\tBUTTON_LABELS.RESEND_CODE\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Pressable>\n\n\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\tonPress={handleReject}\n\t\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\t\taccessibilityLabel=\"payman-modal-btn-reject\"\n\t\t\t\t\t\t\t\ttestID=\"payman-modal-btn-reject\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{({ pressed }) => (\n\t\t\t\t\t\t\t\t\t<View style={{ flexDirection: \"row\", alignItems: \"center\", justifyContent: \"center\", gap: 6 }}>\n\t\t\t\t\t\t\t\t\t\t{isCancelling ? (\n\t\t\t\t\t\t\t\t\t\t\t<ActivityIndicator\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t\tcolor={PAYMAN.mutedForeground}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\t\t\t\t\ts.linkText,\n\t\t\t\t\t\t\t\t\t\t\t\tpressed &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t!isSubmitting && {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: PAYMAN.foreground,\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\tisSubmitting && !isCancelling && s.linkDisabled,\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{isCancelling\n\t\t\t\t\t\t\t\t\t\t\t\t? MODAL_CONTENT.LOADING_REJECT\n\t\t\t\t\t\t\t\t\t\t\t\t: isPayee\n\t\t\t\t\t\t\t\t\t\t\t\t\t? BUTTON_LABELS.CANCEL\n\t\t\t\t\t\t\t\t\t\t\t\t\t: BUTTON_LABELS.CANCEL_TRANSFER}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t\t</View>\n\n\t\t\t\t\t\t<View style={s.footer}>\n\t\t\t\t\t\t\t<Text style={s.footerPrefix}>\n\t\t\t\t\t\t\t\t{MODAL_CONTENT.SECURED_BY_PREFIX}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\t\tsource={{ uri: paymanLogoMark }}\n\t\t\t\t\t\t\t\tstyle={s.footerLogo}\n\t\t\t\t\t\t\t\tresizeMode=\"contain\"\n\t\t\t\t\t\t\t\taccessibilityElementsHidden\n\t\t\t\t\t\t\t\timportantForAccessibility=\"no-hide-descendants\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Text style={s.footerBrand}>\n\t\t\t\t\t\t\t\t{MODAL_CONTENT.SECURED_BY_BRAND}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</View>\n\t\t\t\t\t</View>\n\t\t\t\t\t</ScrollView>\n\t\t\t\t</View>\n\t\t\t</KeyboardAvoidingView>\n\t\t</Modal>\n\t);\n}\n\nconst s = StyleSheet.create({\n\tkeyboardAvoid: {\n\t\tflex: 1,\n\t\twidth: \"100%\",\n\t},\n\tmodalOverlay: {\n\t\tflex: 1,\n\t\twidth: \"100%\",\n\t\tbackgroundColor: PAYMAN.modalBackdrop,\n\t\talignItems: \"center\",\n\t\tpaddingHorizontal: 16,\n\t\tpaddingBottom: 24,\n\t},\n\tscrollContent: {\n\t\tflexGrow: 1,\n\t\twidth: \"100%\",\n\t\talignItems: \"center\",\n\t\tpaddingBottom: 8,\n\t},\n\tdialog: {\n\t\tposition: \"relative\",\n\t\tbackgroundColor: PAYMAN.card,\n\t\tborderRadius: 16,\n\t\tpaddingTop: 36,\n\t\tpaddingHorizontal: DIALOG_PADDING,\n\t\tpaddingBottom: 28,\n\t\tborderWidth: 1,\n\t\tborderColor: PAYMAN.border,\n\t},\n\tcloseBtn: {\n\t\tposition: \"absolute\",\n\t\tright: 10,\n\t\ttop: 10,\n\t\twidth: 28,\n\t\theight: 28,\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tzIndex: 2,\n\t},\n\tdescription: {\n\t\tfontSize: 14,\n\t\tlineHeight: 20,\n\t\tcolor: PAYMAN.mutedForeground,\n\t\ttextAlign: \"center\",\n\t\tmarginBottom: 20,\n\t\tpaddingHorizontal: 24,\n\t},\n\ttransferLabel: {\n\t\tfontSize: 12,\n\t\tfontWeight: \"600\",\n\t\tletterSpacing: 0.8,\n\t\ttextTransform: \"uppercase\",\n\t\tcolor: PAYMAN.mutedForeground,\n\t\ttextAlign: \"center\",\n\t\tmarginBottom: 4,\n\t\topacity: 0.7,\n\t},\n\theroAmount: {\n\t\tfontSize: 42,\n\t\tfontWeight: \"700\",\n\t\tcolor: PAYMAN_BRAND_GREEN,\n\t\ttextAlign: \"center\",\n\t\tmarginBottom: 32,\n\t\tletterSpacing: -0.5,\n\t},\n\theroPayeeWrap: {\n\t\talignItems: \"center\",\n\t\tmarginBottom: 32,\n\t\tgap: 4,\n\t},\n\theroPayeeName: {\n\t\tfontSize: 28,\n\t\tfontWeight: \"700\",\n\t\tcolor: PAYMAN_BRAND_GREEN,\n\t\ttextAlign: \"center\",\n\t},\n\theroPayeeType: {\n\t\tfontSize: 10,\n\t\tfontWeight: \"600\",\n\t\tletterSpacing: 0.8,\n\t\ttextTransform: \"uppercase\",\n\t\tcolor: PAYMAN_BRAND_GREEN,\n\t\topacity: 0.85,\n\t},\n\totpWrap: {\n\t\tmarginBottom: 30,\n\t},\n\tverifyingRow: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tgap: 6,\n\t\tmarginTop: 10,\n\t},\n\tverifyingText: {\n\t\tfontSize: 12,\n\t\tfontWeight: \"500\",\n\t\tcolor: PAYMAN_BRAND_GREEN,\n\t},\n\tlinksCol: {\n\t\talignItems: \"center\",\n\t\tgap: 12,\n\t\tmarginBottom: 32,\n\t},\n\tlinkText: {\n\t\tfontSize: 11,\n\t\tfontWeight: \"600\",\n\t\tletterSpacing: 0.02,\n\t\tcolor: PAYMAN.mutedForeground,\n\t\ttextAlign: \"center\",\n\t},\n\tlinkDisabled: {\n\t\topacity: 0.4,\n\t},\n\tfooter: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tflexWrap: \"nowrap\",\n\t\tgap: 6,\n\t\tborderTopWidth: 1,\n\t\tborderTopColor: PAYMAN.border,\n\t\tpaddingTop: 20,\n\t},\n\tfooterPrefix: {\n\t\tfontSize: 11,\n\t\tfontWeight: \"500\",\n\t\tcolor: PAYMAN.mutedForeground,\n\t\topacity: 0.9,\n\t},\n\tfooterLogo: {\n\t\theight: 18,\n\t\twidth: 18,\n\t},\n\tfooterBrand: {\n\t\tfontSize: 12,\n\t\tfontWeight: \"700\",\n\t\tletterSpacing: 0.3,\n\t\tcolor: \"#0A3B44\",\n\t},\n});\n","import { useChat, useVoice } from \"@paymanai/payman-typescript-ask-sdk\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n\tKeyboardAvoidingView,\n\tPlatform,\n\tStyleSheet,\n\tText,\n\tView,\n} from \"react-native\";\nimport { PaymanChatContext } from \"../../contexts\";\nimport type { PaymanChatProps, UserActionState } from \"../../types\";\nimport { ChatInput } from \"../ChatInput\";\nimport { MessageList } from \"../MessageList\";\nimport { UserActionModal } from \"../UserActionModal\";\n\nconst DEFAULT_USER_ACTION_STATE: UserActionState = {\n\trequest: null,\n\tresult: null,\n\tclearOtpTrigger: 0,\n};\n\nconst NOOP_ASYNC = async () => {};\n\nexport function PaymanChat({\n\tconfig,\n\tcallbacks = {},\n\tclassName,\n\tstyle,\n\tchildren,\n}: PaymanChatProps) {\n\tconst [inputValue, setInputValue] = useState(\"\");\n\tconst [recordingElapsedSeconds, setRecordingElapsedSeconds] = useState(0);\n\tconst recordingStartRef = useRef<number | null>(null);\n\tconst recordingIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\tconst prevInputValueRef = useRef(inputValue);\n\n\t// Use the chat hook - it handles everything internally\n\tconst chat = useChat(config, callbacks);\n\tconst {\n\t\tmessages,\n\t\tsendMessage,\n\t\tisWaitingForResponse,\n\t\tresetSession,\n\t\tclearMessages,\n\t\tcancelStream,\n\t\tgetSessionId,\n\t\tgetMessages,\n\t} = chat;\n\n\t// Keep OTP features backward-safe if hook returns a non-OTP shape.\n\tconst userActionState = chat.userActionState ?? DEFAULT_USER_ACTION_STATE;\n\tconst approveUserAction = chat.approveUserAction ?? NOOP_ASYNC;\n\tconst rejectUserAction = chat.rejectUserAction ?? NOOP_ASYNC;\n\tconst resendOtp = chat.resendOtp ?? NOOP_ASYNC;\n\tconst isUserActionSupported =\n\t\ttypeof chat.approveUserAction === \"function\" &&\n\t\ttypeof chat.rejectUserAction === \"function\" &&\n\t\ttypeof chat.resendOtp === \"function\";\n\n\t// Voice support\n\tconst {\n\t\tvoiceState,\n\t\ttranscribedText,\n\t\tisAvailable: voiceAvailable,\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\tonError: (error) => {\n\t\t\t\tconsole.error(\"Voice error:\", error);\n\t\t\t},\n\t\t}\n\t);\n\n\tconst isRecording = voiceState === \"listening\";\n\n\t// Create context value with control methods\n\tconst contextValue = useMemo(\n\t\t() => ({\n\t\t\tresetSession,\n\t\t\tclearMessages,\n\t\t\tcancelStream,\n\t\t\tgetSessionId,\n\t\t\tgetMessages,\n\t\t\tisWaitingForResponse,\n\t\t}),\n\t\t[\n\t\t\tresetSession,\n\t\t\tclearMessages,\n\t\t\tcancelStream,\n\t\t\tgetSessionId,\n\t\t\tgetMessages,\n\t\t\tisWaitingForResponse,\n\t\t]\n\t);\n\n\t// Extract callbacks\n\tconst { onExecutionTraceClick } = callbacks;\n\n\t// Extract config with hardcoded UI defaults\n\tconst {\n\t\tplaceholder = \"Type your message...\",\n\t\temptyStateText = \"What can I help with?\",\n\t\tsessionParams,\n\t\tdisableInput = false,\n\t\thasAskPermission = true,\n\t\tstreamingStepsText,\n\t\tcompletedStepsText,\n\t\tshowAvatars = false,\n\t\tshowUserAvatar,\n\t\tshowAssistantAvatar,\n\t\tshowAgentName = true,\n\t\tagentName = \"Assistant\",\n\t\tshowExecutionSteps = true,\n\t\tshowStreamingDot = true,\n\t\tlayout = \"full-width\",\n\t\tshowTimestamps = false,\n\t\tanimated = true,\n\t\tisChatDisabled = false,\n\t\tdisabledComponent,\n\t\tshowEmptyStateIcon = true,\n\t\tinputStyle = \"rounded\",\n\t\tenableVoice = 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// Recording timer: tick every second while recording\n\tuseEffect(() => {\n\t\tif (isRecording) {\n\t\t\trecordingStartRef.current = Date.now();\n\t\t\tsetRecordingElapsedSeconds(0);\n\t\t\trecordingIntervalRef.current = setInterval(() => {\n\t\t\t\tif (recordingStartRef.current != null) {\n\t\t\t\t\tsetRecordingElapsedSeconds(\n\t\t\t\t\t\tMath.floor((Date.now() - recordingStartRef.current) / 1000)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}, 1000);\n\t\t} else {\n\t\t\trecordingStartRef.current = null;\n\t\t\tif (recordingIntervalRef.current) {\n\t\t\t\tclearInterval(recordingIntervalRef.current);\n\t\t\t\trecordingIntervalRef.current = null;\n\t\t\t}\n\t\t\tsetRecordingElapsedSeconds(0);\n\t\t}\n\t\treturn () => {\n\t\t\tif (recordingIntervalRef.current) {\n\t\t\t\tclearInterval(recordingIntervalRef.current);\n\t\t\t\trecordingIntervalRef.current = null;\n\t\t\t}\n\t\t};\n\t}, [isRecording]);\n\n\t// Reset voice recognition only when user clears the input\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\tstopRecording();\n\t\t}\n\t}, [inputValue, clearTranscript, stopRecording]);\n\n\tconst handleSend = useCallback(() => {\n\t\tstopRecording();\n\t\tif (inputValue.trim() && !disableInput && isSessionParamsConfigured) {\n\t\t\tsendMessage(inputValue.trim());\n\t\t\tsetInputValue(\"\");\n\t\t}\n\t}, [\n\t\tinputValue,\n\t\tdisableInput,\n\t\tisSessionParamsConfigured,\n\t\tsendMessage,\n\t\tstopRecording,\n\t]);\n\n\tconst isInputDisabled =\n\t\tisWaitingForResponse || !isSessionParamsConfigured || disableInput;\n\n\t// Voice handlers\n\tconst handleVoicePress = useCallback(async () => {\n\t\tif (!voiceAvailable) return;\n\t\tclearTranscript();\n\t\tawait startRecording();\n\t}, [voiceAvailable, startRecording, clearTranscript]);\n\n\tconst handleConfirmRecording = useCallback(() => {\n\t\tstopRecording();\n\t\tif (transcribedText.trim()) setInputValue(transcribedText);\n\t}, [stopRecording, transcribedText]);\n\n\tconst handleCancelRecording = useCallback(() => {\n\t\tstopRecording();\n\t}, [stopRecording]);\n\n\t// Disabled state\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<View style={[s.container, style]}>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t\t{disabledComponent}\n\t\t\t\t\t</View>\n\t\t\t\t</PaymanChatContext.Provider>\n\t\t\t);\n\t\t}\n\t\treturn (\n\t\t\t<PaymanChatContext.Provider value={contextValue}>\n\t\t\t\t<View style={[s.container, style]}>\n\t\t\t\t\t{children}\n\t\t\t\t\t<View style={s.disabledWrap}>\n\t\t\t\t\t\t<Text style={s.disabledText}>Chat is currently disabled</Text>\n\t\t\t\t\t</View>\n\t\t\t\t</View>\n\t\t\t</PaymanChatContext.Provider>\n\t\t);\n\t}\n\n\treturn (\n\t\t<PaymanChatContext.Provider value={contextValue}>\n\t\t\t<KeyboardAvoidingView\n\t\t\t\tstyle={[s.container, style]}\n\t\t\t\tbehavior={Platform.OS === \"ios\" ? \"padding\" : \"height\"}\n\t\t\t\tkeyboardVerticalOffset={Platform.OS === \"ios\" ? 90 : 0}\n\t\t\t>\n\t\t\t\t{children}\n\n\t\t\t\t<MessageList\n\t\t\t\t\tmessages={messages}\n\t\t\t\t\tisLoading={false}\n\t\t\t\t\temptyStateText={emptyStateText}\n\t\t\t\t\tshowEmptyStateIcon={showEmptyStateIcon}\n\t\t\t\t\tlayout={layout}\n\t\t\t\t\tshowTimestamps={showTimestamps}\n\t\t\t\t\tstage={config.stage || \"DEV\"}\n\t\t\t\t\tanimated={animated}\n\t\t\t\t\tshowAgentName={showAgentName}\n\t\t\t\t\tagentName={agentName}\n\t\t\t\t\tshowAvatars={showAvatars}\n\t\t\t\t\tshowUserAvatar={showUserAvatar}\n\t\t\t\t\tshowAssistantAvatar={showAssistantAvatar}\n\t\t\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\t\t\tcompletedStepsText={completedStepsText}\n\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t/>\n\n\t\t\t\t{hasAskPermission && (\n\t\t\t\t\t<ChatInput\n\t\t\t\t\t\tvalue={inputValue}\n\t\t\t\t\t\tonChange={setInputValue}\n\t\t\t\t\t\tonSend={handleSend}\n\t\t\t\t\t\tonPause={cancelStream}\n\t\t\t\t\t\tdisabled={isInputDisabled}\n\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\tisWaitingForResponse={isWaitingForResponse}\n\t\t\t\t\t\thasSelectedSession={true}\n\t\t\t\t\t\tisSessionParamsConfigured={isSessionParamsConfigured}\n\t\t\t\t\t\tinputStyle={inputStyle}\n\t\t\t\t\t\tlayout={layout}\n\t\t\t\t\t\tenableVoice={enableVoice}\n\t\t\t\t\t\tonVoicePress={enableVoice ? handleVoicePress : undefined}\n\t\t\t\t\t\tvoiceAvailable={enableVoice && voiceAvailable}\n\t\t\t\t\t\tisRecording={enableVoice && isRecording}\n\t\t\t\t\t\trecordingDurationSeconds={recordingElapsedSeconds}\n\t\t\t\t\t\tonConfirmRecording={enableVoice ? handleConfirmRecording : undefined}\n\t\t\t\t\t\tonCancelRecording={enableVoice ? handleCancelRecording : undefined}\n\t\t\t\t\t\ttranscribedText={enableVoice && isRecording ? transcribedText : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t<UserActionModal\n\t\t\t\t\tisOpen={isUserActionSupported && userActionState.request !== null}\n\t\t\t\t\tuserActionRequest={userActionState.request}\n\t\t\t\t\tonApprove={approveUserAction}\n\t\t\t\t\tonReject={rejectUserAction}\n\t\t\t\t\tonResend={resendOtp}\n\t\t\t\t\tclearOtpTrigger={userActionState.clearOtpTrigger}\n\t\t\t\t/>\n\t\t\t</KeyboardAvoidingView>\n\t\t</PaymanChatContext.Provider>\n\t);\n}\n\nconst s = StyleSheet.create({\n\tcontainer: {\n\t\tflex: 1,\n\t\tbackgroundColor: \"#FFFFFF\",\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tborderColor: \"rgba(0,0,0,0.08)\",\n\t\tborderRadius: 16,\n\t\toverflow: \"hidden\",\n\t},\n\tdisabledWrap: {\n\t\tflex: 1,\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t\tpadding: 16,\n\t},\n\tdisabledText: { fontSize: 14, color: \"#9CA3AF\", textAlign: \"center\" },\n});\n"]}
1
+ {"version":3,"sources":["../src/contexts/PaymanChatContext.tsx","../src/components/ChatInput/index.native.tsx","../src/utils/errorMessages.ts","../src/components/AgentMessage/index.native.tsx","../src/utils/cn.ts","../src/utils/formatDate.ts","../src/utils/sentryContext.ts","../src/components/UserMessage/index.native.tsx","../src/components/MessageRow/index.native.tsx","../src/components/MessageRowSkeleton/index.native.tsx","../src/components/MessageList/index.native.tsx","../src/components/OtpInput/index.native.tsx","../src/components/UserActionModal/constants.ts","../src/components/UserActionModal/utils.ts","../src/components/UserActionModal/index.native.tsx","../src/components/PaymanChat/index.native.tsx"],"names":["createContext","useContext","Platform","UIManager","memo","useRef","Animated","useEffect","Easing","jsx","s","useState","LayoutAnimation","jsxs","View","TextInput","Pressable","X","Text","Check","Mic","Send","StyleSheet","useSharedValue","React","withRepeat","withTiming","useAnimatedStyle","Loader2","interpolateColor","ChevronDown","useMemo","useCallback","FadeInDown","Layout","Sparkles","Markdown","Binoculars","ChevronRight","FadeIn","FadeOut","Clock","twMerge","clsx","Sentry","User","MessageCircle","FlatList","newDigits","Dimensions","Keyboard","Modal","KeyboardAvoidingView","ScrollView","ActivityIndicator","Fragment","Image","useChat","useVoice"],"mappings":"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","file":"index.native.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 { Check, Mic, Pause, Send, X } from \"lucide-react-native\";\nimport { memo, useEffect, useRef, useState } from \"react\";\nimport {\n\tAnimated,\n\tEasing,\n\tLayoutAnimation,\n\tPlatform,\n\tPressable,\n\tStyleSheet,\n\tText,\n\tTextInput,\n\tUIManager,\n\tView,\n} from \"react-native\";\nimport type { ChatInputProps } from \"../../types\";\n\n// Enable LayoutAnimation on Android\nif (Platform.OS === \"android\" && UIManager.setLayoutAnimationEnabledExperimental) {\n\tUIManager.setLayoutAnimationEnabledExperimental(true);\n}\n\nconst VOICE_DOT_COUNT = 24;\nconst VOICE_DOT_MIN_H = 5;\nconst VOICE_DOT_MAX_H = 14;\n/** How long (ms) after last transcript change we still consider \"user talking\" for waveform */\nconst SPEECH_ACTIVITY_MS = 1400;\n\n/** Theme primary color for voice bar */\nconst VOICE_THEME_COLOR = \"#00858d\";\nconst VOICE_THEME_RGBA = \"rgba(0, 133, 141, 0.6)\";\nconst VOICE_THEME_RGBA_LIGHT = \"rgba(0, 133, 141, 0.2)\";\nconst VOICE_BAR_BG = \"#f0f9f9\";\nconst VOICE_BAR_BORDER = \"rgba(0, 133, 141, 0.35)\";\nconst AI_DISCLAIMER_TEXT =\n\t\"AI can make mistakes. Please double-check responses.\";\n\n// Animated waveform bar that bounces when recording (user talking)\nconst VoiceWaveformBar = memo(\n\t({\n\t\tindex,\n\t\tisActive,\n\t\tbarColor,\n\t}: {\n\t\tindex: number;\n\t\tisActive: boolean;\n\t\tbarColor: string;\n\t}) => {\n\t\tconst height = useRef(new Animated.Value(VOICE_DOT_MIN_H)).current;\n\n\t\tuseEffect(() => {\n\t\t\tif (isActive) {\n\t\t\t\tconst delay = index * 25;\n\t\t\t\tconst duration = 180 + (index % 3) * 40;\n\t\t\t\tconst animation = Animated.loop(\n\t\t\t\t\tAnimated.sequence([\n\t\t\t\t\t\tAnimated.timing(height, {\n\t\t\t\t\t\t\ttoValue: VOICE_DOT_MAX_H,\n\t\t\t\t\t\t\tduration,\n\t\t\t\t\t\t\tdelay,\n\t\t\t\t\t\t\teasing: Easing.inOut(Easing.ease),\n\t\t\t\t\t\t\tuseNativeDriver: false,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tAnimated.timing(height, {\n\t\t\t\t\t\t\ttoValue: VOICE_DOT_MIN_H,\n\t\t\t\t\t\t\tduration,\n\t\t\t\t\t\t\teasing: Easing.inOut(Easing.ease),\n\t\t\t\t\t\t\tuseNativeDriver: false,\n\t\t\t\t\t\t}),\n\t\t\t\t\t])\n\t\t\t\t);\n\t\t\t\tanimation.start();\n\t\t\t\treturn () => animation.stop();\n\t\t\t} else {\n\t\t\t\tAnimated.timing(height, {\n\t\t\t\t\ttoValue: VOICE_DOT_MIN_H,\n\t\t\t\t\tduration: 200,\n\t\t\t\t\tuseNativeDriver: false,\n\t\t\t\t}).start();\n\t\t\t}\n\t\t}, [isActive, index, height]);\n\n\t\treturn (\n\t\t\t<Animated.View\n\t\t\t\tstyle={[\n\t\t\t\t\ts.voiceDotBase,\n\t\t\t\t\t{\n\t\t\t\t\t\theight,\n\t\t\t\t\t\tbackgroundColor: barColor,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t/>\n\t\t);\n\t}\n);\nVoiceWaveformBar.displayName = \"VoiceWaveformBar\";\n\nfunction formatDuration(seconds: number): string {\n\tconst m = Math.floor(seconds / 60);\n\tconst s = seconds % 60;\n\treturn `${m}:${s.toString().padStart(2, \"0\")}`;\n}\n\nexport function ChatInput({\n\tvalue,\n\tonChange,\n\tonSend,\n\tonPause,\n\tdisabled = false,\n\tplaceholder = \"Chat with Claude\",\n\tisWaitingForResponse = false,\n\thasSelectedSession = true,\n\tisSessionParamsConfigured = true,\n\tonClick,\n\tinputStyle = \"rounded\",\n\tlayout = \"full-width\",\n\tenableVoice = false,\n\tonVoicePress,\n\tvoiceAvailable = false,\n\tisRecording = false,\n\trecordingDurationSeconds = 0,\n\tonConfirmRecording,\n\tonCancelRecording,\n\ttranscribedText,\n\tonInputFocus,\n}: ChatInputProps) {\n\tconst isInputDisabled = disabled || isWaitingForResponse;\n\tconst showPauseButton = false;\n\tconst showVoiceButton = enableVoice && onVoicePress != null;\n\tconst isVoiceButtonDisabled =\n\t\tisWaitingForResponse || !voiceAvailable || !isSessionParamsConfigured;\n\tconst canSend = !isInputDisabled && value.trim().length > 0;\n\n\tconst showVoiceBar =\n\t\tenableVoice &&\n\t\tisRecording &&\n\t\tonConfirmRecording != null &&\n\t\tonCancelRecording != null;\n\n\t// Waveforms animate only when user is talking (transcript changed recently)\n\tconst [isUserSpeaking, setIsUserSpeaking] = useState(false);\n\tconst speechTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst prevTranscriptRef = useRef(\"\");\n\tuseEffect(() => {\n\t\tif (!showVoiceBar) {\n\t\t\tsetIsUserSpeaking(false);\n\t\t\tprevTranscriptRef.current = \"\";\n\t\t\tif (speechTimeoutRef.current) {\n\t\t\t\tclearTimeout(speechTimeoutRef.current);\n\t\t\t\tspeechTimeoutRef.current = null;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst current = transcribedText ?? \"\";\n\t\tconst changed = current !== prevTranscriptRef.current;\n\t\tprevTranscriptRef.current = current;\n\t\tif (changed) {\n\t\t\tsetIsUserSpeaking(true);\n\t\t\tif (speechTimeoutRef.current) clearTimeout(speechTimeoutRef.current);\n\t\t\tspeechTimeoutRef.current = setTimeout(() => {\n\t\t\t\tspeechTimeoutRef.current = null;\n\t\t\t\tsetIsUserSpeaking(false);\n\t\t\t}, SPEECH_ACTIVITY_MS);\n\t\t}\n\t\treturn () => {\n\t\t\tif (speechTimeoutRef.current) {\n\t\t\t\tclearTimeout(speechTimeoutRef.current);\n\t\t\t\tspeechTimeoutRef.current = null;\n\t\t\t}\n\t\t};\n\t}, [showVoiceBar, transcribedText]);\n\n\tconst animOpacity = useRef(new Animated.Value(1)).current;\n\tconst animScale = useRef(new Animated.Value(1)).current;\n\tconst inputRef = useRef<TextInput>(null);\n\n\t// Animate in when switching to voice bar, out when switching back to input\n\tuseEffect(() => {\n\t\tif (showVoiceBar) {\n\t\t\tLayoutAnimation.configureNext(\n\t\t\t\tLayoutAnimation.create(200, \"easeInEaseOut\", \"opacity\")\n\t\t\t);\n\t\t\tanimOpacity.setValue(0.92);\n\t\t\tanimScale.setValue(0.98);\n\t\t\tAnimated.parallel([\n\t\t\t\tAnimated.timing(animOpacity, {\n\t\t\t\t\ttoValue: 1,\n\t\t\t\t\tduration: 200,\n\t\t\t\t\tuseNativeDriver: true,\n\t\t\t\t}),\n\t\t\t\tAnimated.spring(animScale, {\n\t\t\t\t\ttoValue: 1,\n\t\t\t\t\tuseNativeDriver: true,\n\t\t\t\t\tspeed: 12,\n\t\t\t\t\tbounciness: 4,\n\t\t\t\t}),\n\t\t\t]).start();\n\t\t} else {\n\t\t\tLayoutAnimation.configureNext(\n\t\t\t\tLayoutAnimation.create(220, \"easeInEaseOut\", \"opacity\")\n\t\t\t);\n\t\t\tanimOpacity.setValue(1);\n\t\t\tanimScale.setValue(1);\n\t\t}\n\t}, [showVoiceBar, animOpacity, animScale]);\n\n\tconst getPlaceholder = () => {\n\t\tif (!hasSelectedSession) return \"Select a version to start chatting\";\n\t\tif (!isSessionParamsConfigured)\n\t\t\treturn \"Configure User ID and User Label in Session Params\";\n\t\treturn placeholder;\n\t};\n\n\tconst handleSubmit = () => {\n\t\tif (canSend) onSend();\n\t};\n\n\tconst handleConfirmRecording = () => {\n\t\tLayoutAnimation.configureNext(\n\t\t\tLayoutAnimation.create(220, \"easeOut\", \"opacity\")\n\t\t);\n\t\tonConfirmRecording?.();\n\t};\n\n\tconst handleCancelRecording = () => {\n\t\tLayoutAnimation.configureNext(\n\t\t\tLayoutAnimation.create(200, \"easeIn\", \"opacity\")\n\t\t);\n\t\tonCancelRecording?.();\n\t};\n\n\treturn (\n\t\t<View\n\t\t\tstyle={[\n\t\t\t\ts.outerBar,\n\t\t\t\tlayout === \"centered\" && s.outerBarCentered,\n\t\t\t\tshowVoiceBar && s.outerBarVoiceMargin,\n\t\t\t]}\n\t\t>\n\t\t\t<View style={s.column}>\n\t\t\t\t<View style={[s.inputWrap, showVoiceBar && s.inputWrapRelative]}>\n\t\t\t\t\t<TextInput\n\t\t\t\t\t\tref={inputRef}\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\tonChangeText={onChange}\n\t\t\t\t\t\tonFocus={onInputFocus}\n\t\t\t\t\t\tonPress={onClick}\n\t\t\t\t\t\teditable={!isInputDisabled}\n\t\t\t\t\t\tplaceholder={getPlaceholder()}\n\t\t\t\t\t\tplaceholderTextColor='#9CA3AF'\n\t\t\t\t\t\tmultiline\n\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\ts.input,\n\t\t\t\t\t\t\tisInputDisabled && s.inputDisabled,\n\t\t\t\t\t\t\tshowVoiceBar && s.inputHiddenKeepFocus,\n\t\t\t\t\t\t]}\n\t\t\t\t\t\treturnKeyType=\"default\"\n\t\t\t\t\t\tblurOnSubmit={false}\n\t\t\t\t\t\tonSubmitEditing={handleSubmit}\n\t\t\t\t\t/>\n\t\t\t\t\t{showVoiceBar && (\n\t\t\t\t\t\t<Animated.View\n\t\t\t\t\t\t\tpointerEvents=\"box-none\"\n\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\ts.voiceBarContainer,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\topacity: animOpacity,\n\t\t\t\t\t\t\t\t\ttransform: [{ scale: animScale }],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<View style={s.voiceBar}>\n\t\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\t\tonPress={handleCancelRecording}\n\t\t\t\t\t\t\t\t\tstyle={({ pressed }) => [\n\t\t\t\t\t\t\t\t\t\ts.voiceBarCancelBtn,\n\t\t\t\t\t\t\t\t\t\tpressed && s.btnPressed,\n\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\taccessibilityLabel=\"Cancel recording\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<X size={20} color={VOICE_THEME_COLOR} strokeWidth={2.5} />\n\t\t\t\t\t\t\t\t</Pressable>\n\n\t\t\t\t\t\t\t\t<View style={s.voiceBarCenter}>\n\t\t\t\t\t\t\t\t\t<View style={s.voiceBarDots}>\n\t\t\t\t\t\t\t\t\t\t{Array.from({ length: VOICE_DOT_COUNT }).map((_, i) => (\n\t\t\t\t\t\t\t\t\t\t\t<VoiceWaveformBar\n\t\t\t\t\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\t\t\t\t\tindex={i}\n\t\t\t\t\t\t\t\t\t\t\t\tisActive={isUserSpeaking}\n\t\t\t\t\t\t\t\t\t\t\t\tbarColor={VOICE_THEME_RGBA}\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</View>\n\t\t\t\t\t\t\t\t\t<Text style={s.voiceBarTimer}>\n\t\t\t\t\t\t\t\t\t\t{formatDuration(recordingDurationSeconds)}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t</View>\n\n\t\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\t\tonPress={handleConfirmRecording}\n\t\t\t\t\t\t\t\t\tstyle={({ pressed }) => [\n\t\t\t\t\t\t\t\t\t\ts.voiceBarConfirmBtn,\n\t\t\t\t\t\t\t\t\t\tpressed && s.btnPressed,\n\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\taccessibilityLabel=\"Confirm and send recording\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Check size={22} color={VOICE_THEME_COLOR} strokeWidth={2.5} />\n\t\t\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t</Animated.View>\n\t\t\t\t\t)}\n\t\t\t\t</View>\n\n\t\t\t\t{!showVoiceBar && (\n\t\t\t\t\t<View style={s.actionsRow}>\n\t\t\t\t\t\t<View style={s.rightActions}>\n\t\t\t\t\t\t\t{showVoiceButton && (\n\t\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\t\tonPress={onVoicePress}\n\t\t\t\t\t\t\t\t\tdisabled={isVoiceButtonDisabled}\n\t\t\t\t\t\t\t\t\tstyle={({ pressed }) => [\n\t\t\t\t\t\t\t\t\t\ts.iconBtn,\n\t\t\t\t\t\t\t\t\t\tpressed && s.btnPressed,\n\t\t\t\t\t\t\t\t\t\tisVoiceButtonDisabled && s.btnDisabled,\n\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\taccessibilityLabel=\"Voice input\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<View style={s.iconBtnInner}>\n\t\t\t\t\t\t\t\t\t\t<Mic size={22} color='#6B7280' strokeWidth={2} />\n\t\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{showPauseButton ? (\n\t\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\t\tonPress={onPause}\n\t\t\t\t\t\t\t\t\tstyle={({ pressed }) => [\n\t\t\t\t\t\t\t\t\t\ts.sendBtn,\n\t\t\t\t\t\t\t\t\t\tpressed && s.btnPressed,\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<View style={s.sendBtnInner}>\n\t\t\t\t\t\t\t\t\t\t<Pause size={18} color=\"#FFFFFF\" />\n\t\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\t\tonPress={onSend}\n\t\t\t\t\t\t\t\t\tdisabled={!canSend}\n\t\t\t\t\t\t\t\t\tstyle={({ pressed }) => [\n\t\t\t\t\t\t\t\t\t\ts.sendBtn,\n\t\t\t\t\t\t\t\t\t\t!canSend && s.btnDisabled,\n\t\t\t\t\t\t\t\t\t\tpressed && s.btnPressed,\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<View style={s.sendBtnInner}>\n\t\t\t\t\t\t\t\t\t\t<Send size={18} color=\"#FFFFFF\" />\n\t\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</View>\n\t\t\t\t\t</View>\n\t\t\t\t)}\n\t\t\t</View>\n\t\t\t<View style={s.disclaimerWrap}>\n\t\t\t\t<Text style={s.disclaimerText}>{AI_DISCLAIMER_TEXT}</Text>\n\t\t\t</View>\n\t\t</View>\n\t);\n}\n\nconst s = StyleSheet.create({\n\touterBar: {\n\t\twidth: \"100%\",\n\t\tbackgroundColor: '#f1f5f9',\n\t\tborderTopWidth: 1,\n\t\tborderTopColor: 'rgba(0,0,0,0.08)',\n\t\tpaddingTop: 12,\n\t\tpaddingBottom: Platform.OS === \"ios\" ? 28 : 12,\n\t\tpaddingHorizontal: 12,\n\t\tborderTopLeftRadius: 20,\n\t\tborderTopRightRadius: 20,\n\t},\n\touterBarCentered: { alignItems: \"center\" },\n\tdisclaimerWrap: {\n\t\tmaxWidth: 672,\n\t\twidth: \"100%\",\n\t\talignSelf: \"center\",\n\t\tpaddingHorizontal: 12,\n\t\tmarginTop: 2,\n\t},\n\tdisclaimerText: {\n\t\tfontSize: 11,\n\t\tlineHeight: 15,\n\t\tcolor: \"#6B7280\",\n\t\ttextAlign: \"center\",\n\t},\n\tcolumn: {\n\t\tmaxWidth: 672,\n\t\twidth: \"100%\",\n\t\talignSelf: \"center\",\n\t\tgap: 10,\n\t},\n\tactionsRow: {\n\t\tflexDirection: \"row\",\n\t\tjustifyContent: \"flex-end\",\n\t\talignItems: \"center\",\n\t\tmarginBottom: 10\n\t},\n\ticonBtn: {\n\t\twidth: 36,\n\t\theight: 36,\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t\tborderRadius: 18,\n\t\toverflow: \"hidden\",\n\t},\n\ticonBtnInner: {\n\t\twidth: 36,\n\t\theight: 36,\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t\tbackgroundColor: 'rgba(0,0,0,0.1)',\n\t\tborderRadius: 18,\n\t},\n\tinputWrap: {\n\t\twidth: \"100%\",\n\t\tminHeight: 56,\n\t\tjustifyContent: \"center\",\n\t\tpaddingHorizontal: 4,\n\t},\n\tinputWrapRelative: {\n\t\tposition: \"relative\",\n\t},\n\tinputHiddenKeepFocus: {\n\t\tposition: \"absolute\",\n\t\tleft: 0,\n\t\tright: 0,\n\t\ttop: 0,\n\t\topacity: 0,\n\t\tzIndex: 0,\n\t},\n\tinput: {\n\t\tminHeight: 56,\n\t\tmaxHeight: 140,\n\t\tpaddingVertical: 16,\n\t\tpaddingHorizontal: 16,\n\t\tfontSize: 16,\n\t\tcolor: '#1F2937',\n\t\tlineHeight: 22,\n\t},\n\tinputDisabled: { opacity: 0.5 },\n\trightActions: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tgap: 6,\n\t},\n\tsendBtn: {\n\t\twidth: 36,\n\t\theight: 36,\n\t\tborderRadius: 18,\n\t\toverflow: \"hidden\",\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t},\n\tsendBtnInner: {\n\t\twidth: 36,\n\t\theight: 36,\n\t\tborderRadius: 18,\n\t\tbackgroundColor: '#00858d',\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t},\n\tbtnDisabled: { opacity: 0.35 },\n\tbtnPressed: { opacity: 0.7 },\n\touterBarVoiceMargin: {\n\t\tpaddingBottom: Platform.OS === \"ios\" ? 36 : 20,\n\t},\n\t// Voice bar (replaces input when recording) – theme #00858d\n\tvoiceBarContainer: {\n\t\tposition: \"absolute\",\n\t\tleft: 0,\n\t\tright: 0,\n\t\ttop: 0,\n\t\tbottom: 0,\n\t\tjustifyContent: \"center\",\n\t\tzIndex: 1,\n\t},\n\tvoiceBar: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"space-between\",\n\t\tbackgroundColor: VOICE_BAR_BG,\n\t\tborderWidth: 1,\n\t\tborderColor: VOICE_BAR_BORDER,\n\t\tborderRadius: 28,\n\t\tminHeight: 56,\n\t\tpaddingHorizontal: 12,\n\t\tpaddingVertical: 10,\n\t\tgap: 12,\n\t},\n\tvoiceBarCancelBtn: {\n\t\twidth: 40,\n\t\theight: 40,\n\t\tborderRadius: 20,\n\t\tbackgroundColor: VOICE_THEME_RGBA_LIGHT,\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t},\n\tvoiceBarCenter: {\n\t\tflex: 1,\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"space-between\",\n\t\tgap: 10,\n\t\tmarginLeft: 8,\n\t},\n\tvoiceBarDots: {\n\t\tflex: 1,\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"space-between\",\n\t\tgap: 4,\n\t},\n\tvoiceDotBase: {\n\t\twidth: 4,\n\t\tborderRadius: 2,\n\t},\n\tvoiceDot: {\n\t\twidth: 4,\n\t\theight: 6,\n\t\tborderRadius: 2,\n\t\tbackgroundColor: VOICE_THEME_RGBA,\n\t},\n\tvoiceDotActive: {\n\t\theight: 12,\n\t\tbackgroundColor: VOICE_THEME_COLOR,\n\t},\n\tvoiceBarTimer: {\n\t\tfontSize: 15,\n\t\tfontWeight: \"600\",\n\t\tcolor: VOICE_THEME_COLOR,\n\t\tminWidth: 36,\n\t\ttextAlign: \"right\",\n\t},\n\tvoiceBarConfirmBtn: {\n\t\twidth: 40,\n\t\theight: 40,\n\t\tborderRadius: 20,\n\t\tbackgroundColor: \"#FFFFFF\",\n\t\tborderWidth: 1,\n\t\tborderColor: VOICE_THEME_COLOR,\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\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 {\n\tBinoculars,\n\tCheck,\n\tChevronDown,\n\tChevronRight,\n\tClock,\n\tLoader2,\n\tSparkles,\n\tX,\n} from \"lucide-react-native\";\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Pressable, StyleSheet, Text, View } from \"react-native\";\nimport Markdown from \"react-native-markdown-display\";\nimport Animated, {\n\tEasing,\n\tFadeIn,\n\tFadeInDown,\n\tFadeOut,\n\tinterpolateColor,\n\tLayout,\n\tuseAnimatedStyle,\n\tuseSharedValue,\n\twithRepeat,\n\twithTiming,\n} from \"react-native-reanimated\";\nimport type { AgentMessageProps } from \"../../types\";\nimport {\n\tgetConflictErrorMessage,\n\tisFriendlyWorkflowError,\n} from \"../../utils/errorMessages\";\n\n/* ---- Animated spinning loader ---- */\nfunction AnimatedLoader({\n\tsize = 14,\n\tcolor = \"#00858d\",\n}: {\n\tsize?: number;\n\tcolor?: string;\n}) {\n\tconst rotation = useSharedValue(0);\n\tReact.useEffect(() => {\n\t\trotation.value = withRepeat(\n\t\t\twithTiming(360, { duration: 1000, easing: Easing.linear }),\n\t\t\t-1\n\t\t);\n\t}, [rotation]);\n\tconst style = useAnimatedStyle(() => ({\n\t\ttransform: [{ rotate: `${rotation.value}deg` }],\n\t}));\n\treturn (\n\t\t<Animated.View style={style}>\n\t\t\t<Loader2 size={size} color={color} />\n\t\t</Animated.View>\n\t);\n}\n\n/* ---- Shimmer text — slow left-to-right color sweep (matches web 3.5s) ---- */\nfunction ShimmerText({\n\tchildren,\n\tstyle: textStyle,\n}: {\n\tchildren: string;\n\tstyle?: any;\n}) {\n\tconst progress = useSharedValue(0);\n\tReact.useEffect(() => {\n\t\tprogress.value = withRepeat(\n\t\t\twithTiming(1, { duration: 3500, easing: Easing.linear }),\n\t\t\t-1,\n\t\t\tfalse\n\t\t);\n\t}, [progress]);\n\tconst animatedStyle = useAnimatedStyle(() => {\n\t\tconst color = interpolateColor(\n\t\t\tprogress.value,\n\t\t\t[0, 0.35, 0.5, 0.65, 1],\n\t\t\t[\"#9CA3AF\", \"#9CA3AF\", \"#00858d\", \"#9CA3AF\", \"#9CA3AF\"]\n\t\t);\n\t\treturn { color };\n\t});\n\treturn (\n\t\t<Animated.Text style={[textStyle, animatedStyle, { fontWeight: \"600\" }]}>\n\t\t\t{children}\n\t\t</Animated.Text>\n\t);\n}\n\n/* ---- Pulsing \"Thought Process\" label ---- */\nfunction ThoughtProcessLabel({ style }: { style?: any }) {\n\tconst opacity = useSharedValue(1);\n\tReact.useEffect(() => {\n\t\topacity.value = withRepeat(\n\t\t\twithTiming(0.5, { duration: 800, easing: Easing.inOut(Easing.ease) }),\n\t\t\t-1,\n\t\t\ttrue\n\t\t);\n\t}, [opacity]);\n\tconst animatedStyle = useAnimatedStyle(() => ({ opacity: opacity.value }));\n\treturn (\n\t\t<Animated.Text style={[style, animatedStyle]}>\n\t\t\tThought Process\n\t\t</Animated.Text>\n\t);\n}\n\n/* ---- Expandable thinking block (Cursor-style: compact, auto-scroll) ---- */\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<View style={ts.thinkingWrap}>\n\t\t\t<Pressable\n\t\t\t\tonPress={() => setIsOpen((prev) => !prev)}\n\t\t\t\tstyle={ts.thinkingToggle}\n\t\t\t\taccessibilityRole=\"button\"\n\t\t\t\taccessibilityState={{ expanded: isOpen }}\n\t\t\t\taccessibilityLabel={isOpen ? \"Collapse thought process\" : \"Expand thought process\"}\n\t\t\t>\n\t\t\t\t<View style={{ transform: [{ rotate: isOpen ? \"180deg\" : \"0deg\" }] }}>\n\t\t\t\t\t<ChevronDown size={10} color=\"rgba(156,163,175,0.5)\" />\n\t\t\t\t</View>\n\t\t\t\t<Text style={ts.thinkingToggleText}>Thought process</Text>\n\t\t\t</Pressable>\n\t\t\t{isOpen && (\n\t\t\t\t<View style={ts.thinkingContent}>\n\t\t\t\t\t<Text style={ts.thinkingContentText}>{text}</Text>\n\t\t\t\t</View>\n\t\t\t)}\n\t\t</View>\n\t);\n}\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\tshowTimestamp: _showTimestamp = false,\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(\n\t\tisStreaming && hasSteps\n\t);\n\tconst wasStreamingRef = useRef(isStreaming);\n\n\tuseEffect(() => {\n\t\tif (isStreaming && hasSteps) setIsStepsExpanded(true);\n\t\tif (wasStreamingRef.current && !isStreaming) setIsStepsExpanded(false);\n\t\twasStreamingRef.current = isStreaming;\n\t}, [isStreaming, hasSteps]);\n\n\tconst totalElapsedMs = hasSteps\n\t\t? message.steps!.reduce((sum, step) => sum + (step.elapsedMs || 0), 0)\n\t\t: 0;\n\n\tconst currentMessage = message.currentMessage;\n\tconst rawContent = message.streamingContent || message.content || \"\";\n\tconst content = rawContent.replace(/\\\\n/g, \"\\n\");\n\t// When workflow completes with a response (e.g. after INTENT_ERROR), prefer that over error UI. Only show friendly error when there's no meaningful response or when content is raw error dump.\n\tconst hasMeaningfulContent =\n\t\tcontent.length > 0 && !looksLikeRawError(content);\n\t// Also show friendly error when workflow completed with no content (e.g. preflight failed, no workflowMsg)\n\tconst completedWithNoContent =\n\t\t!isStreaming &&\n\t\t!isCancelled &&\n\t\tcontent.length === 0 &&\n\t\t(message.streamProgress === \"completed\" || message.streamProgress === \"error\");\n\tconst conflictErrorMessage = getConflictErrorMessage(message.errorDetails);\n\tconst isError =\n\t\t!!conflictErrorMessage ||\n\t\t((isFriendlyWorkflowError(message.errorDetails) ||\n\t\t\tlooksLikeRawError(content)) &&\n\t\t\t!hasMeaningfulContent) ||\n\t\tcompletedWithNoContent;\n\tconst activeThinkingText = message.activeThinkingText;\n\tconst allThinkingText = message.allThinkingText;\n\tconst currentStep = useMemo(\n\t\t() =>\n\t\t\tmessage.steps?.find(\n\t\t\t\t(s) => s.id === currentExecutingStepId && s.status === \"in_progress\"\n\t\t\t),\n\t\t[message.steps, currentExecutingStepId]\n\t);\n\n\tconst getStepsLabel = useCallback(\n\t\t(streaming: boolean) => {\n\t\t\tconst count = message.steps!.length;\n\t\t\tconst stepWord = count === 1 ? \"step\" : \"steps\";\n\t\t\tif (streaming) {\n\t\t\t\tif (streamingStepsText)\n\t\t\t\t\treturn streamingStepsText.replace(\"{count}\", count.toString());\n\t\t\t\treturn `${count} ${stepWord} in progress`;\n\t\t\t}\n\t\t\tif (completedStepsText) {\n\t\t\t\treturn completedStepsText\n\t\t\t\t\t.replace(\"{count}\", count.toString())\n\t\t\t\t\t.replace(\"{time}\", (totalElapsedMs / 1000).toFixed(1));\n\t\t\t}\n\t\t\treturn `${count} ${stepWord} completed`;\n\t\t},\n\t\t[message.steps, streamingStepsText, completedStepsText, totalElapsedMs]\n\t);\n\n\t/* Step icon — all in fixed 16×16 wrapper for alignment */\n\tconst renderStepIcon = (step: any, isCurrentlyExecuting: boolean) => {\n\t\tconst W = s.iconWrap;\n\t\tif (isCurrentlyExecuting)\n\t\t\treturn (\n\t\t\t\t<View style={W}>\n\t\t\t\t\t<AnimatedLoader size={13} color=\"#00858d\" />\n\t\t\t\t</View>\n\t\t\t);\n\t\tif (step.status === \"pending\" && isCancelled)\n\t\t\treturn (\n\t\t\t\t<View style={W}>\n\t\t\t\t\t<View style={s.dotMuted} />\n\t\t\t\t</View>\n\t\t\t);\n\t\tif (step.status === \"pending\" || step.status === \"in_progress\")\n\t\t\treturn (\n\t\t\t\t<View style={W}>\n\t\t\t\t\t<AnimatedLoader size={13} color=\"rgba(0,133,141,0.4)\" />\n\t\t\t\t</View>\n\t\t\t);\n\t\tif (step.status === \"completed\")\n\t\t\treturn (\n\t\t\t\t<View style={W}>\n\t\t\t\t\t<Check\n\t\t\t\t\t\tsize={13}\n\t\t\t\t\t\tcolor={\n\t\t\t\t\t\t\tstep.eventType === \"USER_ACTION_SUCCESS\"\n\t\t\t\t\t\t\t\t? \"#10B981\"\n\t\t\t\t\t\t\t\t: \"rgba(0,133,141,0.7)\"\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</View>\n\t\t\t);\n\t\tif (step.status === \"error\")\n\t\t\treturn (\n\t\t\t\t<View style={W}>\n\t\t\t\t\t<X size={13} color=\"#EF4444\" />\n\t\t\t\t</View>\n\t\t\t);\n\t\treturn (\n\t\t\t<View style={W}>\n\t\t\t\t<View style={s.dotMuted} />\n\t\t\t</View>\n\t\t);\n\t};\n\n\t// Below-bubble steps section: only after streaming (thinking lives in bubble during stream)\n\tconst showSteps =\n\t\tshowExecutionSteps && hasSteps && !isStreaming && !isError;\n\n\tconst handleStepsToggle = useCallback(() => {\n\t\tsetIsStepsExpanded((prev) => !prev);\n\t}, []);\n\n\tconst AnimatedView = animated ? Animated.View : View;\n\tconst animatedProps = animated\n\t\t? { entering: FadeInDown.duration(200), layout: Layout }\n\t\t: {};\n\n\tconst messageContent = (\n\t\t<View style={s.outerWrap}>\n\t\t\t{/* Row: avatar + bubble + trace */}\n\t\t\t<View style={s.row}>\n\t\t\t\t{/* Avatar */}\n\t\t\t\t{showAvatar && (\n\t\t\t\t\t<View style={s.avatarWrap}>\n\t\t\t\t\t\t{isStreaming && showStreamingDot ? (\n\t\t\t\t\t\t\t<View style={s.dotContainer}>\n\t\t\t\t\t\t\t\t<View style={s.streamDot} />\n\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<View style={s.avatar}>\n\t\t\t\t\t\t\t\t<Sparkles size={14} color=\"#9CA3AF\" />\n\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</View>\n\t\t\t\t)}\n\n\t\t\t\t{/* Bubble — constrained width */}\n\t\t\t\t<View\n\t\t\t\t\tstyle={[s.bubbleCol, layout === \"centered\" && s.bubbleColCentered]}\n\t\t\t\t>\n\t\t\t\t\t{/* User Action Badge */}\n\t\t\t\t\t{message.userActionResult && (\n\t\t\t\t\t\t<View style={s.badgeWrap}>\n\t\t\t\t\t\t\t{message.userActionResult === \"approved\" ? (\n\t\t\t\t\t\t\t\t<View style={[s.badge, s.badgeApproved]}>\n\t\t\t\t\t\t\t\t\t<Check size={10} color=\"#15803D\" />\n\t\t\t\t\t\t\t\t\t<Text style={s.badgeApprovedText}>Verified</Text>\n\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<View style={[s.badge, s.badgeRejected]}>\n\t\t\t\t\t\t\t\t\t<X size={10} color=\"#B91C1C\" />\n\t\t\t\t\t\t\t\t\t<Text style={s.badgeRejectedText}>Rejected</Text>\n\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</View>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Bubble */}\n\t\t\t\t\t<View\n\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\ts.bubble,\n\t\t\t\t\t\t\tlayout === \"centered\" ? s.bubbleCentered : s.bubbleDefault,\n\t\t\t\t\t\t\tisError && s.bubbleError,\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(isStreaming && !content ? (\n\t\t\t\t\t\t\t\t<ThoughtProcessLabel style={s.agentName} />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Text style={s.agentName}>{agentName}</Text>\n\t\t\t\t\t\t\t))}\n\n\t\t\t\t\t\t<View>\n\t\t\t\t\t\t\t{isStreaming && !content ? (\n\t\t\t\t\t\t\t\t// One active item at a time, by event order: thinking stream OR current step with loading (same bullet UI as dropdown)\n\t\t\t\t\t\t\t\tactiveThinkingText ? (\n\t\t\t\t\t\t\t\t\t<View style={s.stepRow}>\n\t\t\t\t\t\t\t\t\t\t<View style={{ marginTop: 1 }}>\n\t\t\t\t\t\t\t\t\t\t\t<View style={s.iconWrap}>\n\t\t\t\t\t\t\t\t\t\t\t\t<AnimatedLoader size={13} color=\"rgba(0,133,141,0.7)\" />\n\t\t\t\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t\t\t\t<Text style={[s.bubbleBodyText, s.thinkingTextFlex]}>\n\t\t\t\t\t\t\t\t\t\t\t{activeThinkingText}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t\t) : currentStep ? (\n\t\t\t\t\t\t\t\t\t<View style={s.stepRow}>\n\t\t\t\t\t\t\t\t\t\t<View style={{ marginTop: 1 }}>\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</View>\n\t\t\t\t\t\t\t\t\t\t<ShimmerText style={s.bubbleBodyText}>\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</ShimmerText>\n\t\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<View style={s.thinkingRow}>\n\t\t\t\t\t\t\t\t\t\t{!showAvatar && (\n\t\t\t\t\t\t\t\t\t\t\t<AnimatedLoader size={15} color=\"rgba(0,133,141,0.7)\" />\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t<Text style={s.bubbleBodyText}>\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</Text>\n\t\t\t\t\t\t\t\t\t</View>\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<View style={s.thinkingRow}>\n\t\t\t\t\t\t\t\t\t<X size={15} color=\"#9CA3AF\" />\n\t\t\t\t\t\t\t\t\t<Text style={[s.bubbleBodyText, { fontStyle: \"italic\" }]}>\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</Text>\n\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Markdown\n\t\t\t\t\t\t\t\t\tstyle={isError ? markdownErrorStyles : markdownStyles}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{isError\n\t\t\t\t\t\t\t\t\t\t? conflictErrorMessage ?? \"Something went wrong. Please try again.\"\n\t\t\t\t\t\t\t\t\t\t: content ||\n\t\t\t\t\t\t\t\t\t\t(isStreaming\n\t\t\t\t\t\t\t\t\t\t\t? \"Thinking...\"\n\t\t\t\t\t\t\t\t\t\t\t: isCancelled\n\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: \"\")}\n\t\t\t\t\t\t\t\t</Markdown>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</View>\n\t\t\t\t\t</View>\n\t\t\t\t</View>\n\n\t\t\t\t{/* Trace button */}\n\t\t\t\t{hasTraceData && onExecutionTraceClick && (\n\t\t\t\t\t<Pressable\n\t\t\t\t\t\tonPress={() =>\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\tstyle={[s.traceBtn, message.userActionResult && s.traceBtnOffset]}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Binoculars size={15} color=\"#9CA3AF\" />\n\t\t\t\t\t</Pressable>\n\t\t\t\t)}\n\t\t\t</View>\n\n\t\t\t{/* Steps — OUTSIDE the row, indented past avatar */}\n\t\t\t{showSteps && (\n\t\t\t\t<View style={[s.stepsOuter, showAvatar && s.stepsIndented]}>\n\t\t\t\t\t{/* Chevron toggle */}\n\t\t\t\t\t<Pressable onPress={handleStepsToggle} style={s.stepsToggle}>\n\t\t\t\t\t\t<View\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\ttransform: [{ rotate: isStepsExpanded ? \"90deg\" : \"0deg\" }],\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ChevronRight size={12} color=\"rgba(156,163,175,0.6)\" />\n\t\t\t\t\t\t</View>\n\t\t\t\t\t\t<Text style={s.stepsToggleText}>\n\t\t\t\t\t\t\t{getStepsLabel(false)}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</Pressable>\n\n\t\t\t\t\t{/* Expanded steps list */}\n\t\t\t\t\t{isStepsExpanded && hasSteps && (\n\t\t\t\t\t\t<Animated.View\n\t\t\t\t\t\t\tentering={animated ? FadeIn.duration(200) : undefined}\n\t\t\t\t\t\t\texiting={animated ? FadeOut.duration(150) : undefined}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{!isStreaming && allThinkingText?.trim() ? (\n\t\t\t\t\t\t\t\t<ThinkingBlock text={allThinkingText} />\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t<View style={s.stepsList}>\n\t\t\t\t\t\t\t\t{message.steps!.map((step) => {\n\t\t\t\t\t\t\t\t\tconst isExec =\n\t\t\t\t\t\t\t\t\t\tstep.id === currentExecutingStepId &&\n\t\t\t\t\t\t\t\t\t\tstep.status === \"in_progress\" &&\n\t\t\t\t\t\t\t\t\t\tisStreaming &&\n\t\t\t\t\t\t\t\t\t\t!isCancelled;\n\t\t\t\t\t\t\t\t\tconst hasTime = step.elapsedMs != null && step.elapsedMs > 0;\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<View key={step.id} style={s.stepItem}>\n\t\t\t\t\t\t\t\t\t{/* Step row: icon + text */}\n\t\t\t\t\t\t\t\t\t<View style={s.stepRow}>\n\t\t\t\t\t\t\t\t\t\t<View style={{ marginTop: 1 }}>\n\t\t\t\t\t\t\t\t\t\t\t{renderStepIcon(step, isExec)}\n\t\t\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t\t\t\t{isExec ? (\n\t\t\t\t\t\t\t\t\t\t\t<ShimmerText style={s.stepText}>\n\t\t\t\t\t\t\t\t\t\t\t\t{step.message}\n\t\t\t\t\t\t\t\t\t\t\t</ShimmerText>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\t\t\t\t\t\ts.stepText,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep.status === \"completed\" && s.stepTextMuted,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep.status === \"error\" && s.stepTextError,\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\ts.stepTextSuccess,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep.status === \"pending\" && s.stepTextPending,\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\t!isExec &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ts.stepTextInProgress,\n\t\t\t\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{step.message}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</View>\n\n\t\t\t\t\t\t\t\t\t{/* Time badge below, aligned with text */}\n\t\t\t\t\t\t\t\t\t{hasTime && (\n\t\t\t\t\t\t\t\t\t\t<View style={s.timeBadgeWrap}>\n\t\t\t\t\t\t\t\t\t\t\t<View style={s.timeBadge}>\n\t\t\t\t\t\t\t\t\t\t\t\t<Clock size={8} color=\"rgba(156,163,175,0.6)\" />\n\t\t\t\t\t\t\t\t\t\t\t\t<Text style={s.timeBadgeText}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{(step.elapsedMs! / 1000).toFixed(1)}s\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t</Animated.View>\n\t\t\t\t\t)}\n\t\t\t\t</View>\n\t\t\t)}\n\t\t</View>\n\t);\n\n\treturn <AnimatedView {...animatedProps}>{messageContent}</AnimatedView>;\n}\n\n/* ---- Styles ---- */\nconst s = StyleSheet.create({\n\touterWrap: { width: \"100%\" },\n\trow: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"flex-start\",\n\t\tgap: 10,\n\t\twidth: \"100%\",\n\t},\n\n\t// Avatar\n\tavatarWrap: { width: 28, height: 28, marginTop: 2 },\n\tdotContainer: {\n\t\twidth: 28,\n\t\theight: 28,\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t},\n\tstreamDot: {\n\t\twidth: 8,\n\t\theight: 8,\n\t\tborderRadius: 4,\n\t\tbackgroundColor: \"#00858d\",\n\t\topacity: 0.75,\n\t},\n\tavatar: {\n\t\twidth: 28,\n\t\theight: 28,\n\t\tborderRadius: 14,\n\t\tbackgroundColor: \"rgba(0,0,0,0.03)\",\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tborderColor: \"rgba(0,0,0,0.08)\",\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t},\n\n\t// Bubble column\n\t// Bubble column — flex: 1 so it fills available width on mobile (still capped by maxWidth)\n\tbubbleCol: { flex: 1, minWidth: 0, maxWidth: \"92%\", flexShrink: 1 },\n\tbubbleColCentered: { maxWidth: \"95%\" },\n\n\t// Badge\n\tbadgeWrap: { marginBottom: 6 },\n\tbadge: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tgap: 4,\n\t\tpaddingHorizontal: 8,\n\t\tpaddingVertical: 3,\n\t\tborderRadius: 10,\n\t\talignSelf: \"flex-start\",\n\t},\n\tbadgeApproved: {\n\t\tbackgroundColor: \"#DCFCE7\",\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tborderColor: \"rgba(34,197,94,0.3)\",\n\t},\n\tbadgeApprovedText: { fontSize: 14, lineHeight: 21, fontWeight: \"500\", color: \"#15803D\" },\n\tbadgeRejected: {\n\t\tbackgroundColor: \"#FEE2E2\",\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tborderColor: \"rgba(239,68,68,0.3)\",\n\t},\n\tbadgeRejectedText: { fontSize: 14, lineHeight: 21, fontWeight: \"500\", color: \"#B91C1C\" },\n\n\t// Bubble\n\tbubble: {\n\t\toverflow: \"hidden\",\n\t\twidth: \"100%\",\n\t\tpaddingHorizontal: 14,\n\t\tpaddingVertical: 10,\n\t},\n\tbubbleDefault: {\n\t\tbackgroundColor: \"rgba(0,0,0,0.04)\",\n\t\tborderRadius: 16,\n\t\tborderTopLeftRadius: 4,\n\t},\n\tbubbleCentered: {\n\t\tbackgroundColor: \"#FFFFFF\",\n\t\tborderWidth: 1,\n\t\tborderColor: \"rgba(0,0,0,0.08)\",\n\t\tborderRadius: 16,\n\t\tborderTopLeftRadius: 4,\n\t},\n\tbubbleError: {\n\t\tbackgroundColor: \"rgba(239,68,68,0.05)\",\n\t\tborderWidth: 1,\n\t\tborderColor: \"rgba(239,68,68,0.15)\",\n\t},\n\n\t// Agent name (text-sm to match query)\n\tagentName: {\n\t\tfontSize: 14,\n\t\tlineHeight: 21,\n\t\tfontWeight: \"600\",\n\t\tcolor: \"rgba(0,0,0,0.35)\",\n\t\tmarginBottom: 2,\n\t},\n\n\t// All body text inside assistant bubble: same size as query (text-sm = 14px)\n\tbubbleBodyText: {\n\t\tfontSize: 14,\n\t\tlineHeight: 21,\n\t\tcolor: \"#9CA3AF\",\n\t\tflex: 1,\n\t\tminWidth: 0,\n\t},\n\n\t// Thinking state\n\tthinkingRow: { flexDirection: \"row\", alignItems: \"center\", gap: 8 },\n\tthinkingText: { fontSize: 14, lineHeight: 21, color: \"#9CA3AF\" },\n\tthinkingTextFlex: { flex: 1, minWidth: 0 },\n\n\t// Trace button\n\ttraceBtn: {\n\t\tpadding: 7,\n\t\tbackgroundColor: \"rgba(0,0,0,0.02)\",\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tborderColor: \"rgba(0,0,0,0.08)\",\n\t\tborderRadius: 8,\n\t\tmarginTop: 2,\n\t},\n\ttraceBtnOffset: { marginTop: 30 },\n\n\t// Steps section\n\tstepsOuter: { marginTop: 6 },\n\tstepsIndented: { marginLeft: 38 }, // 28 avatar + 10 gap\n\n\t// Toggle\n\tstepsToggle: { flexDirection: \"row\", alignItems: \"center\", gap: 5 },\n\tstepsToggleText: { fontSize: 11, color: \"rgba(156,163,175,0.65)\" },\n\n\t// Steps list\n\tstepsList: { marginTop: 6 },\n\tstepItem: { marginBottom: 6 },\n\tstepRow: { flexDirection: \"row\", alignItems: \"flex-start\", gap: 5 },\n\ticonWrap: {\n\t\twidth: 16,\n\t\theight: 16,\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t},\n\tdotMuted: {\n\t\twidth: 5,\n\t\theight: 5,\n\t\tborderRadius: 3,\n\t\tbackgroundColor: \"rgba(0,0,0,0.12)\",\n\t},\n\tstepText: {\n\t\tfontSize: 12,\n\t\tlineHeight: 17,\n\t\tflex: 1,\n\t\tminWidth: 0,\n\t\tcolor: \"#374151\",\n\t},\n\tstepTextMuted: { color: \"#9CA3AF\" },\n\tstepTextError: { color: \"#EF4444\" },\n\tstepTextSuccess: { color: \"#10B981\" },\n\tstepTextPending: { color: \"rgba(156,163,175,0.4)\" },\n\tstepTextInProgress: { color: \"rgba(156,163,175,0.6)\" },\n\n\t// Time badge — aligned with text (pl = 16 icon + 5 gap = 21)\n\ttimeBadgeWrap: { paddingLeft: 21, marginTop: 3 },\n\ttimeBadge: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tgap: 3,\n\t\tbackgroundColor: \"rgba(0,0,0,0.03)\",\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tborderColor: \"rgba(0,0,0,0.06)\",\n\t\tborderRadius: 4,\n\t\tpaddingHorizontal: 5,\n\t\tpaddingVertical: 2,\n\t\talignSelf: \"flex-start\",\n\t},\n\ttimeBadgeText: {\n\t\tfontSize: 9,\n\t\tfontFamily: \"monospace\",\n\t\tcolor: \"rgba(156,163,175,0.6)\",\n\t},\n});\n\n/* ---- ThinkingBlock styles ---- */\nconst ts = StyleSheet.create({\n\tthinkingWrap: { marginTop: 4, marginBottom: 4 },\n\tthinkingToggle: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tgap: 3,\n\t},\n\tthinkingToggleText: {\n\t\tfontSize: 10,\n\t\tcolor: \"rgba(156,163,175,0.5)\",\n\t},\n\tthinkingContent: {\n\t\tmarginTop: 4,\n\t\tbackgroundColor: \"rgba(0,0,0,0.03)\",\n\t\tborderRadius: 6,\n\t\tpadding: 8,\n\t},\n\tthinkingContentText: {\n\t\tfontSize: 11,\n\t\tlineHeight: 16,\n\t\tcolor: \"rgba(107,114,128,0.8)\",\n\t},\n});\n\n/* ---- Markdown styles ---- */\nconst markdownStyles = {\n\tbody: { fontSize: 14, lineHeight: 21, color: \"#1F2937\" },\n\tparagraph: { marginBottom: 8, fontSize: 14, lineHeight: 21 },\n\tstrong: { fontWeight: \"600\" as const },\n\tem: { fontStyle: \"italic\" as const },\n\tcode_inline: {\n\t\tbackgroundColor: \"rgba(0,0,0,0.04)\",\n\t\tpaddingHorizontal: 5,\n\t\tpaddingVertical: 2,\n\t\tborderRadius: 4,\n\t\tfontSize: 12,\n\t\tfontFamily: \"monospace\",\n\t},\n\tcode_block: {\n\t\tbackgroundColor: \"rgba(0,0,0,0.04)\",\n\t\tpadding: 12,\n\t\tborderRadius: 8,\n\t\tfontSize: 12,\n\t\tfontFamily: \"monospace\",\n\t\tmarginVertical: 8,\n\t},\n\tlist_item: { fontSize: 14, lineHeight: 21 },\n\tbullet_list: { marginBottom: 8 },\n\tordered_list: { marginBottom: 8 },\n\theading1: {\n\t\tfontSize: 18,\n\t\tfontWeight: \"600\" as const,\n\t\tmarginBottom: 6,\n\t\tmarginTop: 12,\n\t\tcolor: \"#1F2937\",\n\t},\n\theading2: {\n\t\tfontSize: 16,\n\t\tfontWeight: \"600\" as const,\n\t\tmarginBottom: 6,\n\t\tmarginTop: 10,\n\t\tcolor: \"#1F2937\",\n\t},\n\theading3: {\n\t\tfontSize: 14,\n\t\tfontWeight: \"600\" as const,\n\t\tmarginBottom: 4,\n\t\tmarginTop: 8,\n\t\tcolor: \"#1F2937\",\n\t},\n\tblockquote: {\n\t\tborderLeftWidth: 3,\n\t\tborderLeftColor: \"rgba(0,0,0,0.1)\",\n\t\tpaddingLeft: 12,\n\t\tmarginVertical: 8,\n\t\tfontStyle: \"italic\" as const,\n\t\tcolor: \"#6B7280\",\n\t},\n\thr: {\n\t\tmarginVertical: 16,\n\t\tborderBottomWidth: StyleSheet.hairlineWidth,\n\t\tborderBottomColor: \"rgba(0,0,0,0.1)\",\n\t},\n\tlink: { color: \"#007AFF\", textDecorationLine: \"underline\" as const },\n};\n\nconst markdownErrorStyles = {\n\t...markdownStyles,\n\tbody: { ...markdownStyles.body, color: \"#EF4444\" },\n\tparagraph: { ...markdownStyles.paragraph, color: \"#EF4444\" },\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","import { User } from \"lucide-react-native\";\nimport { StyleSheet, Text, View } from \"react-native\";\nimport Animated, { FadeInDown } from \"react-native-reanimated\";\nimport type { UserMessageProps } from \"../../types\";\nimport { formatDate } from \"../../utils\";\n\nexport function UserMessage({\n\tmessage,\n\tanimated = false,\n\tshowAvatar = false,\n}: UserMessageProps) {\n\tconst AnimatedView = animated ? Animated.View : View;\n\tconst animatedProps = animated ? { entering: FadeInDown.duration(250) } : {};\n\n\treturn (\n\t\t<AnimatedView {...animatedProps}>\n\t\t\t<View style={s.container}>\n\t\t\t\t<View style={s.messageCol}>\n\t\t\t\t\t<View style={s.bubble}>\n\t\t\t\t\t\t<Text style={s.text}>{message.content}</Text>\n\t\t\t\t\t</View>\n\t\t\t\t\t<Text style={s.timestamp}>{formatDate(message.timestamp)}</Text>\n\t\t\t\t</View>\n\n\t\t\t\t{showAvatar && (\n\t\t\t\t\t<View style={s.avatarWrap}>\n\t\t\t\t\t\t<View style={s.avatar}>\n\t\t\t\t\t\t\t<User size={13} color=\"#FFFFFF\" />\n\t\t\t\t\t\t</View>\n\t\t\t\t\t</View>\n\t\t\t\t)}\n\t\t\t</View>\n\t\t</AnimatedView>\n\t);\n}\n\nconst s = StyleSheet.create({\n\tcontainer: {\n\t\tflexDirection: \"row\",\n\t\tjustifyContent: \"flex-end\",\n\t\twidth: \"100%\",\n\t\tgap: 10,\n\t},\n\tmessageCol: {\n\t\tmaxWidth: \"80%\",\n\t\tminWidth: 0,\n\t\tflexDirection: \"column\",\n\t\talignItems: \"flex-end\",\n\t},\n\tbubble: {\n\t\tborderRadius: 16,\n\t\tborderBottomRightRadius: 4,\n\t\tpaddingHorizontal: 14,\n\t\tpaddingVertical: 10,\n\t\tbackgroundColor: \"#00858d\",\n\t},\n\ttext: { fontSize: 14, color: \"#FFFFFF\", lineHeight: 20 },\n\ttimestamp: { fontSize: 10, marginTop: 3, color: \"rgba(0,0,0,0.25)\" },\n\tavatarWrap: { width: 28, height: 28, marginTop: 2 },\n\tavatar: {\n\t\twidth: 28,\n\t\theight: 28,\n\t\tborderRadius: 14,\n\t\tbackgroundColor: \"#00858d\",\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t},\n});\n","import type { MessageRowProps } from \"../../types\";\nimport { AgentMessage } from \"../AgentMessage\";\nimport { UserMessage } from \"../UserMessage\";\n\nexport function MessageRow({\n\tmessage,\n\tstage = \"DEV\",\n\tanimated = false,\n\tshowAgentName = false,\n\tagentName = \"Paygent\",\n\tshowAvatars = false,\n\tshowUserAvatar,\n\tshowAssistantAvatar,\n\tshowExecutionSteps = false,\n\tshowStreamingDot = false,\n\tstreamingStepsText,\n\tcompletedStepsText,\n\tonExecutionTraceClick,\n}: MessageRowProps) {\n\t// Determine actual avatar visibility\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\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 { useEffect } from \"react\";\nimport { StyleSheet, View } from \"react-native\";\nimport Animated, {\n\tuseAnimatedStyle,\n\tuseSharedValue,\n\twithRepeat,\n\twithTiming,\n} from \"react-native-reanimated\";\n\ninterface MessageRowSkeletonProps {\n\tisRightAligned?: boolean;\n}\n\nexport function MessageRowSkeleton({\n\tisRightAligned = false,\n}: MessageRowSkeletonProps) {\n\tconst opacity = useSharedValue(0.3);\n\n\tuseEffect(() => {\n\t\topacity.value = withRepeat(withTiming(0.8, { duration: 1200 }), -1, true);\n\t}, []);\n\n\tconst animatedStyle = useAnimatedStyle(() => ({ opacity: opacity.value }));\n\n\treturn (\n\t\t<View\n\t\t\tstyle={[s.container, isRightAligned ? s.containerRight : s.containerLeft]}\n\t\t>\n\t\t\t<View\n\t\t\t\tstyle={[s.content, isRightAligned ? s.contentRight : s.contentLeft]}\n\t\t\t>\n\t\t\t\t<Animated.View\n\t\t\t\t\tstyle={[\n\t\t\t\t\t\ts.bubble,\n\t\t\t\t\t\tisRightAligned ? s.bubbleRight : s.bubbleLeft,\n\t\t\t\t\t\tanimatedStyle,\n\t\t\t\t\t]}\n\t\t\t\t>\n\t\t\t\t\t<View style={s.skeletonWrap}>\n\t\t\t\t\t\t<View style={[s.line, { width: \"70%\" }]} />\n\t\t\t\t\t\t<View style={[s.line, { width: \"100%\" }]} />\n\t\t\t\t\t\t<View style={[s.line, { width: \"80%\" }]} />\n\t\t\t\t\t</View>\n\t\t\t\t</Animated.View>\n\t\t\t\t<Animated.View style={[s.timestamp, animatedStyle]} />\n\t\t\t</View>\n\t\t</View>\n\t);\n}\n\nconst s = StyleSheet.create({\n\tcontainer: { flexDirection: \"row\", width: \"100%\" },\n\tcontainerLeft: { justifyContent: \"flex-start\" },\n\tcontainerRight: { justifyContent: \"flex-end\" },\n\tcontent: { maxWidth: \"75%\", width: \"100%\" },\n\tcontentLeft: { alignItems: \"flex-start\" },\n\tcontentRight: { alignItems: \"flex-end\" },\n\tbubble: { borderRadius: 16, padding: 14, width: \"100%\" },\n\tbubbleLeft: { backgroundColor: \"rgba(0,0,0,0.04)\", borderTopLeftRadius: 4 },\n\tbubbleRight: {\n\t\tbackgroundColor: \"rgba(0,122,255,0.08)\",\n\t\tborderBottomRightRadius: 4,\n\t},\n\tskeletonWrap: { gap: 8 },\n\tline: { height: 10, backgroundColor: \"rgba(0,0,0,0.08)\", borderRadius: 5 },\n\ttimestamp: {\n\t\theight: 6,\n\t\twidth: 50,\n\t\tbackgroundColor: \"rgba(0,0,0,0.06)\",\n\t\tborderRadius: 3,\n\t\tmarginTop: 4,\n\t},\n});\n","import { MessageCircle } from \"lucide-react-native\";\nimport { useCallback, useEffect, useRef } from \"react\";\nimport { FlatList, Platform, StyleSheet, Text, View } from \"react-native\";\nimport Animated, { FadeIn } from \"react-native-reanimated\";\nimport type { MessageListProps } from \"../../types\";\nimport { MessageRow } from \"../MessageRow\";\nimport { MessageRowSkeleton } from \"../MessageRowSkeleton\";\n\nexport function MessageList({\n\tmessages,\n\tisLoading = false,\n\temptyStateText = \"What can I help with?\",\n\tshowEmptyStateIcon = true,\n\tlayout = \"full-width\",\n\tshowTimestamps = false,\n\tstage = \"DEV\",\n\tanimated = false,\n\tshowAgentName = false,\n\tagentName = \"Paygent\",\n\tshowAvatars = false,\n\tshowUserAvatar,\n\tshowAssistantAvatar,\n\tshowExecutionSteps = false,\n\tshowStreamingDot = false,\n\tstreamingStepsText,\n\tcompletedStepsText,\n\tonExecutionTraceClick,\n\tclassName,\n\tisWaitingForResponse = false,\n\tscrollToEndHandleRef,\n}: MessageListProps) {\n\tconst flatListRef = useRef<FlatList>(null);\n\tconst messagesRef = useRef(messages);\n\tmessagesRef.current = messages;\n\tconst prevWaitingRef = useRef(isWaitingForResponse);\n\tconst prevLastStreamingRef = useRef<boolean | undefined>(undefined);\n\n\tconst scrollToEnd = useCallback(() => {\n\t\tflatListRef.current?.scrollToEnd({ animated: true });\n\t}, []);\n\n\t/**\n\t * Assistant bubble height changes without `messages.length` changing (streaming tokens, thinking,\n\t * waiting for first chunk). Scroll so the response stays above the composer.\n\t */\n\tconst scrollToEndOnAssistantLayout = useCallback(() => {\n\t\tconst list = messagesRef.current;\n\t\tconst last = list[list.length - 1];\n\t\tconst shouldFollow =\n\t\t\tisWaitingForResponse ||\n\t\t\t(last?.role === \"assistant\" && last.isStreaming);\n\t\tif (!shouldFollow) return;\n\t\tconst run = () =>\n\t\t\tflatListRef.current?.scrollToEnd({ animated: false });\n\t\trun();\n\t\trequestAnimationFrame(run);\n\t\tsetTimeout(run, 16);\n\t\tsetTimeout(run, 48);\n\t}, [isWaitingForResponse]);\n\n\t// Expose scroll-to-end for PaymanChat (e.g. when the input is focused / keyboard opens).\n\tuseEffect(() => {\n\t\tif (!scrollToEndHandleRef) return;\n\t\tscrollToEndHandleRef.current = scrollToEnd;\n\t\treturn () => {\n\t\t\tscrollToEndHandleRef.current = null;\n\t\t};\n\t}, [scrollToEndHandleRef, scrollToEnd]);\n\n\t// Auto-scroll to bottom when new messages arrive\n\tuseEffect(() => {\n\t\tif (messages.length > 0) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tscrollToEnd();\n\t\t\t}, 100);\n\t\t}\n\t}, [messages.length, scrollToEnd]);\n\n\t// When the assistant finishes streaming, layout can change (e.g. steps, thinking) — scroll once.\n\tuseEffect(() => {\n\t\tconst last = messages[messages.length - 1];\n\t\tconst streaming = last?.isStreaming;\n\t\tif (prevLastStreamingRef.current === true && streaming === false) {\n\t\t\tsetTimeout(() => scrollToEnd(), 0);\n\t\t}\n\t\tprevLastStreamingRef.current = streaming;\n\t}, [messages, scrollToEnd]);\n\n\t// When the request completes, final content/layout may settle after the last stream frame.\n\tuseEffect(() => {\n\t\tif (prevWaitingRef.current === true && isWaitingForResponse === false) {\n\t\t\tsetTimeout(() => scrollToEnd(), 50);\n\t\t}\n\t\tprevWaitingRef.current = isWaitingForResponse;\n\t}, [isWaitingForResponse, scrollToEnd]);\n\n\tif (isLoading) {\n\t\treturn (\n\t\t\t<View style={s.container}>\n\t\t\t\t<View style={s.skeletonContent}>\n\t\t\t\t\t{Array.from({ length: 5 }).map((_, index) => (\n\t\t\t\t\t\t<MessageRowSkeleton\n\t\t\t\t\t\t\tkey={`skeleton-${index}`}\n\t\t\t\t\t\t\tisRightAligned={index % 3 === 0}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</View>\n\t\t\t</View>\n\t\t);\n\t}\n\n\tif (messages.length === 0) {\n\t\treturn (\n\t\t\t<View style={s.emptyContainer}>\n\t\t\t\t<Animated.View entering={FadeIn.duration(500)} style={s.emptyContent}>\n\t\t\t\t\t{showEmptyStateIcon && (\n\t\t\t\t\t\t<View style={s.iconContainer}>\n\t\t\t\t\t\t\t<MessageCircle size={24} color=\"rgba(156,163,175,0.7)\" />\n\t\t\t\t\t\t</View>\n\t\t\t\t\t)}\n\t\t\t\t\t{emptyStateText.split(\"\\n\").map((line, index) => (\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\tstyle={index === 0 ? s.emptyTitle : s.emptySubtitle}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{line}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t))}\n\t\t\t\t</Animated.View>\n\t\t\t</View>\n\t\t);\n\t}\n\n\treturn (\n\t\t<FlatList\n\t\t\tref={flatListRef}\n\t\t\tstyle={s.list}\n\t\t\tdata={messages}\n\t\t\tkeyExtractor={(item) => item.id}\n\t\t\tkeyboardShouldPersistTaps=\"handled\"\n\t\t\tkeyboardDismissMode=\"interactive\"\n\t\t\trenderItem={({ item }) => (\n\t\t\t\t<MessageRow\n\t\t\t\t\tmessage={item}\n\t\t\t\t\tstage={stage}\n\t\t\t\t\tanimated={animated}\n\t\t\t\t\tshowAgentName={showAgentName}\n\t\t\t\t\tagentName={agentName}\n\t\t\t\t\tshowAvatars={showAvatars}\n\t\t\t\t\tshowUserAvatar={showUserAvatar}\n\t\t\t\t\tshowAssistantAvatar={showAssistantAvatar}\n\t\t\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\t\t\tcompletedStepsText={completedStepsText}\n\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\tcontentContainerStyle={[\n\t\t\t\ts.listContent,\n\t\t\t\tlayout === \"centered\" && s.listContentCentered,\n\t\t\t]}\n\t\t\t/** Extra room so execution-step toggles / expanded steps clear the composer when scrolled to the end. */\n\t\t\tListFooterComponent={<View style={s.listFooterSpacer} />}\n\t\t\tonContentSizeChange={scrollToEndOnAssistantLayout}\n\t\t\tshowsVerticalScrollIndicator={false}\n\t\t/>\n\t);\n}\n\nconst s = StyleSheet.create({\n\t/** Fills space above the input so messages stay in the scroll region, not behind it. */\n\tlist: { flex: 1 },\n\tcontainer: { flex: 1 },\n\tskeletonContent: { padding: 16, gap: 16 },\n\temptyContainer: {\n\t\tflex: 1,\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t\tpadding: 24,\n\t},\n\temptyContent: { alignItems: \"center\", gap: 10, maxWidth: 280 },\n\ticonContainer: {\n\t\twidth: 56,\n\t\theight: 56,\n\t\tborderRadius: 16,\n\t\tbackgroundColor: \"rgba(0,0,0,0.03)\",\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tborderColor: \"rgba(0,0,0,0.06)\",\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t\tmarginBottom: 4,\n\t},\n\temptyTitle: {\n\t\tfontSize: 20,\n\t\tfontWeight: \"600\",\n\t\tcolor: \"#1F2937\",\n\t\ttextAlign: \"center\",\n\t},\n\temptySubtitle: {\n\t\tfontSize: 14,\n\t\tcolor: \"#9CA3AF\",\n\t\ttextAlign: \"center\",\n\t\tlineHeight: 20,\n\t},\n\tlistContent: {\n\t\tpaddingTop: 16,\n\t\tpaddingHorizontal: 16,\n\t\tpaddingBottom: 16,\n\t\tgap: 16,\n\t},\n\tlistContentCentered: { maxWidth: 672, alignSelf: \"center\", width: \"100%\" },\n\t/** Extra space below last message — thinking/stream text can wrap to multiple lines before scroll runs. */\n\tlistFooterSpacer: {\n\t\theight: Platform.select({ ios: 52, android: 60, default: 52 }),\n\t},\n});\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { View, TextInput, StyleSheet, Animated } from \"react-native\";\nimport type { OtpInputProps } from \"../../types\";\n\nconst DEFAULT_MAX_LENGTH = 6;\nconst MAX_SUPPORTED_LENGTH = 12;\nconst OTP_ERROR_BORDER = \"#ef4444\";\nconst COMPLETE_PULSE_MS = 350;\nconst SHAKE_MS = 400;\n\nexport function OtpInput({\n\tvalue,\n\tonChange,\n\tmaxLength,\n\tdisabled = false,\n\terror = false,\n}: OtpInputProps) {\n\tconst inputRefs = useRef<(TextInput | null)[]>([]);\n\tconst shakeAnim = useRef(new Animated.Value(0)).current;\n\tconst scaleAnim = useRef(new Animated.Value(1)).current;\n\tconst prevLenRef = useRef(0);\n\tconst [internalError, setInternalError] = useState(false);\n\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 = value.length === safeMaxLength && /^\\d+$/.test(value);\n\n\t// Auto-focus first input on mount\n\tuseEffect(() => {\n\t\tif (!disabled) {\n\t\t\tinputRefs.current[0]?.focus();\n\t\t}\n\t}, [disabled]);\n\n\t// Error shake\n\tuseEffect(() => {\n\t\tif (!error) {\n\t\t\tsetInternalError(false);\n\t\t\treturn;\n\t\t}\n\t\tsetInternalError(true);\n\t\tAnimated.sequence([\n\t\t\tAnimated.timing(shakeAnim, { toValue: 1, duration: SHAKE_MS, useNativeDriver: true }),\n\t\t\tAnimated.timing(shakeAnim, { toValue: 0, duration: 0, useNativeDriver: true }),\n\t\t]).start();\n\t}, [error, shakeAnim]);\n\n\t// Completion pulse\n\tuseEffect(() => {\n\t\tif (isFull && prevLenRef.current < safeMaxLength) {\n\t\t\tAnimated.sequence([\n\t\t\t\tAnimated.timing(scaleAnim, { toValue: 1.04, duration: COMPLETE_PULSE_MS * 0.4, useNativeDriver: true }),\n\t\t\t\tAnimated.timing(scaleAnim, { toValue: 1, duration: COMPLETE_PULSE_MS * 0.6, useNativeDriver: true }),\n\t\t\t]).start();\n\t\t}\n\t\tprevLenRef.current = value.length;\n\t}, [isFull, value.length, safeMaxLength, scaleAnim]);\n\n\tconst shakeTranslate = shakeAnim.interpolate({\n\t\tinputRange: [0, 0.15, 0.3, 0.45, 0.6, 0.75, 0.9, 1],\n\t\toutputRange: [0, -6, 5, -4, 3, -2, 1, 0],\n\t});\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, text: string) => {\n\t\tconst cleaned = text.replace(/\\D/g, \"\");\n\t\tif (cleaned.length > 1) {\n\t\t\tconst pasted = cleaned.slice(0, safeMaxLength);\n\t\t\tconst newDigits = pasted\n\t\t\t\t.split(\"\")\n\t\t\t\t.concat(Array(safeMaxLength).fill(\"\"))\n\t\t\t\t.slice(0, safeMaxLength);\n\t\t\tupdateValue(newDigits);\n\t\t\tfocusInput(Math.min(pasted.length, safeMaxLength - 1));\n\t\t\treturn;\n\t\t}\n\n\t\tconst char = cleaned.slice(-1);\n\t\tconst newDigits = [...digits];\n\t\tnewDigits[index] = char;\n\t\tupdateValue(newDigits);\n\n\t\tif (char && index < safeMaxLength - 1) {\n\t\t\tfocusInput(index + 1);\n\t\t}\n\t};\n\n\tconst handleKeyPress = (index: number, key: string) => {\n\t\tif (key === \"Backspace\") {\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}\n\t};\n\n\treturn (\n\t\t<Animated.View\n\t\t\tstyle={[\n\t\t\t\ts.container,\n\t\t\t\t{ transform: [{ translateX: shakeTranslate }, { scale: scaleAnim }] },\n\t\t\t]}\n\t\t>\n\t\t\t{digits.map((digit, i) => (\n\t\t\t\t<TextInput\n\t\t\t\t\tkey={i}\n\t\t\t\t\tref={(el) => { inputRefs.current[i] = el; }}\n\t\t\t\t\tvalue={digit}\n\t\t\t\t\teditable={!disabled}\n\t\t\t\t\tkeyboardType=\"number-pad\"\n\t\t\t\t\tmaxLength={1}\n\t\t\t\t\tonChangeText={(text) => handleChange(i, text)}\n\t\t\t\t\tonKeyPress={({ nativeEvent }) => handleKeyPress(i, nativeEvent.key)}\n\t\t\t\t\tonFocus={() => inputRefs.current[i]?.setNativeProps({ selection: { start: 0, end: 1 } })}\n\t\t\t\t\tstyle={[\n\t\t\t\t\t\ts.input,\n\t\t\t\t\t\tdisabled && s.inputDisabled,\n\t\t\t\t\t\tinternalError && s.inputError,\n\t\t\t\t\t]}\n\t\t\t\t\taccessibilityLabel={`Digit ${i + 1}`}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</Animated.View>\n\t);\n}\n\nconst PAYMAN_OTP = {\n\tbg: \"#FFFFFF\",\n\tborder: \"rgba(0,0,0,0.1)\",\n\tfg: \"#18181b\",\n\tdisabledBg: \"rgba(0,0,0,0.03)\",\n};\n\nconst s = StyleSheet.create({\n\tcontainer: { flexDirection: \"row\", gap: 8, justifyContent: \"center\" },\n\tinput: {\n\t\twidth: 44,\n\t\theight: 50,\n\t\ttextAlign: \"center\",\n\t\tfontSize: 20,\n\t\tfontWeight: \"600\",\n\t\tborderWidth: 1,\n\t\tborderColor: PAYMAN_OTP.border,\n\t\tborderRadius: 10,\n\t\tcolor: PAYMAN_OTP.fg,\n\t\tbackgroundColor: PAYMAN_OTP.bg,\n\t},\n\tinputDisabled: { backgroundColor: PAYMAN_OTP.disabledBg, opacity: 0.5 },\n\tinputError: {\n\t\tborderColor: OTP_ERROR_BORDER,\n\t\tborderWidth: 1.5,\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 { X } from \"lucide-react-native\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n\tActivityIndicator,\n\tDimensions,\n\tImage,\n\tKeyboard,\n\tKeyboardAvoidingView,\n\tModal,\n\tPlatform,\n\tPressable,\n\tScrollView,\n\tStyleSheet,\n\tText,\n\tView,\n} from \"react-native\";\nimport paymanLogoMark from \"../../assets/payman-mono-crop-blue.png\";\nimport type { UserActionModalProps } from \"../../types\";\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\n/** Logo / footer brand teal — hero amount & payee use this instead of primary blue */\nconst PAYMAN_BRAND_GREEN = \"#0A3B44\";\n\nconst PAYMAN = {\n\tprimary: \"#00858d\",\n\tprimaryForeground: \"#ffffff\",\n\tforeground: \"#18181b\",\n\tmutedForeground: \"#71717a\",\n\tmutedForegroundLight: \"#a1a1aa\",\n\tborder: \"#e4e4e7\",\n\tcard: \"#ffffff\",\n\tmodalBackdrop: \"rgba(0,0,0,0.4)\",\n} as const;\n\nconst { width: SCREEN_WIDTH } = Dimensions.get(\"window\");\nconst DIALOG_MAX_WIDTH = Math.min(440, SCREEN_WIDTH * 0.94);\nconst DIALOG_PADDING = 28;\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 [keyboardVisible, setKeyboardVisible] = useState(false);\n\tconst [otpError, setOtpError] = useState(false);\n\tconst lastAutoSubmittedRef = useRef<string>(\"\");\n\tconst submitInFlightRef = useRef(false);\n\tconst submitGenerationRef = useRef(0);\n\n\tconst schema = getOtpSchemaFromRequest(userActionRequest?.requestedSchema);\n\n\tuseEffect(() => {\n\t\tconst show = Keyboard.addListener(\n\t\t\tPlatform.OS === \"ios\" ? \"keyboardWillShow\" : \"keyboardDidShow\",\n\t\t\t() => setKeyboardVisible(true)\n\t\t);\n\t\tconst hide = Keyboard.addListener(\n\t\t\tPlatform.OS === \"ios\" ? \"keyboardWillHide\" : \"keyboardDidHide\",\n\t\t\t() => setKeyboardVisible(false)\n\t\t);\n\t\treturn () => {\n\t\t\tshow.remove();\n\t\t\thide.remove();\n\t\t};\n\t}, []);\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((prev) => prev - 1),\n\t\t\t1000\n\t\t);\n\t\treturn () => clearTimeout(timer);\n\t}, [resendCooldownRemaining]);\n\n\t// Wrong OTP — 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(\n\t\t\t() => resetActionState(),\n\t\t\tACTION_PENDING_TIMEOUT_MS\n\t\t);\n\t\treturn () => clearTimeout(timeout);\n\t}, [isOpen, isSubmitting, actionType, resetActionState]);\n\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\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} finally {\n\t\t\tsetActionType(null);\n\t\t\tsetIsSubmitting(false);\n\t\t}\n\t}, [resendCooldownRemaining, onResend]);\n\n\tif (!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\tconst modalPosition = keyboardVisible ? \"flex-end\" : \"center\";\n\n\treturn (\n\t\t<Modal\n\t\t\tvisible={isOpen}\n\t\t\ttransparent\n\t\t\tanimationType=\"fade\"\n\t\t\tonRequestClose={() => {}}\n\t\t\tstatusBarTranslucent={Platform.OS === \"android\"}\n\t\t>\n\t\t\t<KeyboardAvoidingView\n\t\t\t\tstyle={[s.keyboardAvoid, { justifyContent: modalPosition }]}\n\t\t\t\tbehavior={Platform.OS === \"ios\" ? \"padding\" : \"height\"}\n\t\t\t\tkeyboardVerticalOffset={Platform.OS === \"ios\" ? 0 : 20}\n\t\t\t>\n\t\t\t\t<View style={[s.modalOverlay, { justifyContent: modalPosition }]}>\n\t\t\t\t\t<ScrollView\n\t\t\t\t\t\tcontentContainerStyle={[\n\t\t\t\t\t\t\ts.scrollContent,\n\t\t\t\t\t\t\t{ justifyContent: modalPosition },\n\t\t\t\t\t\t]}\n\t\t\t\t\t\tshowsVerticalScrollIndicator={false}\n\t\t\t\t\t\tkeyboardShouldPersistTaps=\"handled\"\n\t\t\t\t\t>\n\t\t\t\t\t<View style={[s.dialog, { width: DIALOG_MAX_WIDTH }]}>\n\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\tonPress={handleReject}\n\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\tstyle={s.closeBtn}\n\t\t\t\t\t\t\taccessibilityLabel=\"Close\"\n\t\t\t\t\t\t\thitSlop={8}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{({ pressed }) => (\n\t\t\t\t\t\t\t\t<X\n\t\t\t\t\t\t\t\t\tsize={16}\n\t\t\t\t\t\t\t\t\tcolor={\n\t\t\t\t\t\t\t\t\t\tpressed && !isSubmitting\n\t\t\t\t\t\t\t\t\t\t\t? PAYMAN.foreground\n\t\t\t\t\t\t\t\t\t\t\t: PAYMAN.mutedForeground\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tstrokeWidth={2.5}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Pressable>\n\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tstyle={s.description}\n\t\t\t\t\t\t\taccessibilityLabel=\"payman-modal-desc\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{userActionRequest.message}\n\t\t\t\t\t\t</Text>\n\n\t\t\t\t\t\t{isPayment ? (\n\t\t\t\t\t\t\t<Text style={s.transferLabel}>Pay</Text>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t{isPayment && userActionRequest.metadata?.amount ? (\n\t\t\t\t\t\t\t<Text style={s.heroAmount}>\n\t\t\t\t\t\t\t\t{formatAmountForDisplay(userActionRequest.metadata.amount)}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t{isPayee ? (\n\t\t\t\t\t\t\t<Text style={s.transferLabel}>Create Payee</Text>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t{isPayee && userActionRequest.metadata?.payeeName ? (\n\t\t\t\t\t\t\t<View style={s.heroPayeeWrap}>\n\t\t\t\t\t\t\t\t<Text style={s.heroPayeeName}>\n\t\t\t\t\t\t\t\t\t{userActionRequest.metadata.payeeName}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t{userActionRequest.metadata.payeeType ? (\n\t\t\t\t\t\t\t\t\t<Text style={s.heroPayeeType}>\n\t\t\t\t\t\t\t\t\t\t{userActionRequest.metadata.payeeType}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t<View style={s.otpWrap} accessibilityLabel=\"payman-otp-wrap\">\n\t\t\t\t\t\t\t<OtpInput\n\t\t\t\t\t\t\t\tvalue={otp}\n\t\t\t\t\t\t\t\tonChange={setOtp}\n\t\t\t\t\t\t\t\tmaxLength={schema.maxLength}\n\t\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\t\terror={otpError}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{isVerifying ? (\n\t\t\t\t\t\t\t\t<View style={s.verifyingRow}>\n\t\t\t\t\t\t\t\t\t<ActivityIndicator\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\tcolor={PAYMAN_BRAND_GREEN}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<Text style={s.verifyingText}>\n\t\t\t\t\t\t\t\t\t\t{MODAL_CONTENT.LOADING_APPROVE}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</View>\n\n\t\t\t\t\t\t<View style={s.linksCol}>\n\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\tonPress={handleResend}\n\t\t\t\t\t\t\t\tdisabled={isSubmitting || resendCooldownRemaining > 0}\n\t\t\t\t\t\t\t\taccessibilityLabel=\"payman-modal-btn-resend\"\n\t\t\t\t\t\t\t\ttestID=\"payman-modal-btn-resend\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{({ pressed }) => (\n\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\t\t\t\ts.linkText,\n\t\t\t\t\t\t\t\t\t\t\tpressed && { opacity: 0.6 },\n\t\t\t\t\t\t\t\t\t\t\t(isSubmitting || resendCooldownRemaining > 0) &&\n\t\t\t\t\t\t\t\t\t\t\t\ts.linkDisabled,\n\t\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{actionType === \"resend\" ? (\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{MODAL_CONTENT.LOADING_RESEND}\n\t\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t\t) : resendCooldownRemaining > 0 ? (\n\t\t\t\t\t\t\t\t\t\t\t`${MODAL_CONTENT.RESEND_AVAILABLE_IN} ${resendCooldownRemaining}s`\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\tBUTTON_LABELS.RESEND_CODE\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Pressable>\n\n\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\tonPress={handleReject}\n\t\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\t\taccessibilityLabel=\"payman-modal-btn-reject\"\n\t\t\t\t\t\t\t\ttestID=\"payman-modal-btn-reject\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{({ pressed }) => (\n\t\t\t\t\t\t\t\t\t<View style={{ flexDirection: \"row\", alignItems: \"center\", justifyContent: \"center\", gap: 6 }}>\n\t\t\t\t\t\t\t\t\t\t{isCancelling ? (\n\t\t\t\t\t\t\t\t\t\t\t<ActivityIndicator\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t\tcolor={PAYMAN.mutedForeground}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\t\t\t\t\ts.linkText,\n\t\t\t\t\t\t\t\t\t\t\t\tpressed &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t!isSubmitting && {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: PAYMAN.foreground,\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\tisSubmitting && !isCancelling && s.linkDisabled,\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{isCancelling\n\t\t\t\t\t\t\t\t\t\t\t\t? MODAL_CONTENT.LOADING_REJECT\n\t\t\t\t\t\t\t\t\t\t\t\t: isPayee\n\t\t\t\t\t\t\t\t\t\t\t\t\t? BUTTON_LABELS.CANCEL\n\t\t\t\t\t\t\t\t\t\t\t\t\t: BUTTON_LABELS.CANCEL_TRANSFER}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t\t</View>\n\n\t\t\t\t\t\t<View style={s.footer}>\n\t\t\t\t\t\t\t<Text style={s.footerPrefix}>\n\t\t\t\t\t\t\t\t{MODAL_CONTENT.SECURED_BY_PREFIX}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\t\tsource={{ uri: paymanLogoMark }}\n\t\t\t\t\t\t\t\tstyle={s.footerLogo}\n\t\t\t\t\t\t\t\tresizeMode=\"contain\"\n\t\t\t\t\t\t\t\taccessibilityElementsHidden\n\t\t\t\t\t\t\t\timportantForAccessibility=\"no-hide-descendants\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Text style={s.footerBrand}>\n\t\t\t\t\t\t\t\t{MODAL_CONTENT.SECURED_BY_BRAND}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</View>\n\t\t\t\t\t</View>\n\t\t\t\t\t</ScrollView>\n\t\t\t\t</View>\n\t\t\t</KeyboardAvoidingView>\n\t\t</Modal>\n\t);\n}\n\nconst s = StyleSheet.create({\n\tkeyboardAvoid: {\n\t\tflex: 1,\n\t\twidth: \"100%\",\n\t},\n\tmodalOverlay: {\n\t\tflex: 1,\n\t\twidth: \"100%\",\n\t\tbackgroundColor: PAYMAN.modalBackdrop,\n\t\talignItems: \"center\",\n\t\tpaddingHorizontal: 16,\n\t\tpaddingBottom: 24,\n\t},\n\tscrollContent: {\n\t\tflexGrow: 1,\n\t\twidth: \"100%\",\n\t\talignItems: \"center\",\n\t\tpaddingBottom: 8,\n\t},\n\tdialog: {\n\t\tposition: \"relative\",\n\t\tbackgroundColor: PAYMAN.card,\n\t\tborderRadius: 16,\n\t\tpaddingTop: 36,\n\t\tpaddingHorizontal: DIALOG_PADDING,\n\t\tpaddingBottom: 28,\n\t\tborderWidth: 1,\n\t\tborderColor: PAYMAN.border,\n\t},\n\tcloseBtn: {\n\t\tposition: \"absolute\",\n\t\tright: 10,\n\t\ttop: 10,\n\t\twidth: 28,\n\t\theight: 28,\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tzIndex: 2,\n\t},\n\tdescription: {\n\t\tfontSize: 14,\n\t\tlineHeight: 20,\n\t\tcolor: PAYMAN.mutedForeground,\n\t\ttextAlign: \"center\",\n\t\tmarginBottom: 20,\n\t\tpaddingHorizontal: 24,\n\t},\n\ttransferLabel: {\n\t\tfontSize: 12,\n\t\tfontWeight: \"600\",\n\t\tletterSpacing: 0.8,\n\t\ttextTransform: \"uppercase\",\n\t\tcolor: PAYMAN.mutedForeground,\n\t\ttextAlign: \"center\",\n\t\tmarginBottom: 4,\n\t\topacity: 0.7,\n\t},\n\theroAmount: {\n\t\tfontSize: 42,\n\t\tfontWeight: \"700\",\n\t\tcolor: PAYMAN_BRAND_GREEN,\n\t\ttextAlign: \"center\",\n\t\tmarginBottom: 32,\n\t\tletterSpacing: -0.5,\n\t},\n\theroPayeeWrap: {\n\t\talignItems: \"center\",\n\t\tmarginBottom: 32,\n\t\tgap: 4,\n\t},\n\theroPayeeName: {\n\t\tfontSize: 28,\n\t\tfontWeight: \"700\",\n\t\tcolor: PAYMAN_BRAND_GREEN,\n\t\ttextAlign: \"center\",\n\t},\n\theroPayeeType: {\n\t\tfontSize: 10,\n\t\tfontWeight: \"600\",\n\t\tletterSpacing: 0.8,\n\t\ttextTransform: \"uppercase\",\n\t\tcolor: PAYMAN_BRAND_GREEN,\n\t\topacity: 0.85,\n\t},\n\totpWrap: {\n\t\tmarginBottom: 30,\n\t},\n\tverifyingRow: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tgap: 6,\n\t\tmarginTop: 10,\n\t},\n\tverifyingText: {\n\t\tfontSize: 12,\n\t\tfontWeight: \"500\",\n\t\tcolor: PAYMAN_BRAND_GREEN,\n\t},\n\tlinksCol: {\n\t\talignItems: \"center\",\n\t\tgap: 12,\n\t\tmarginBottom: 32,\n\t},\n\tlinkText: {\n\t\tfontSize: 11,\n\t\tfontWeight: \"600\",\n\t\tletterSpacing: 0.02,\n\t\tcolor: PAYMAN.mutedForeground,\n\t\ttextAlign: \"center\",\n\t},\n\tlinkDisabled: {\n\t\topacity: 0.4,\n\t},\n\tfooter: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tflexWrap: \"nowrap\",\n\t\tgap: 6,\n\t\tborderTopWidth: 1,\n\t\tborderTopColor: PAYMAN.border,\n\t\tpaddingTop: 20,\n\t},\n\tfooterPrefix: {\n\t\tfontSize: 11,\n\t\tfontWeight: \"500\",\n\t\tcolor: PAYMAN.mutedForeground,\n\t\topacity: 0.9,\n\t},\n\tfooterLogo: {\n\t\theight: 18,\n\t\twidth: 18,\n\t},\n\tfooterBrand: {\n\t\tfontSize: 12,\n\t\tfontWeight: \"700\",\n\t\tletterSpacing: 0.3,\n\t\tcolor: \"#0A3B44\",\n\t},\n});\n","import { useChat, useVoice } from \"@paymanai/payman-typescript-ask-sdk\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n\tKeyboardAvoidingView,\n\tPlatform,\n\tStyleSheet,\n\tText,\n\tView,\n} from \"react-native\";\nimport { PaymanChatContext } from \"../../contexts\";\nimport type { PaymanChatProps, UserActionState } from \"../../types\";\nimport { ChatInput } from \"../ChatInput\";\nimport { MessageList } from \"../MessageList\";\nimport { UserActionModal } from \"../UserActionModal\";\n\nconst DEFAULT_USER_ACTION_STATE: UserActionState = {\n\trequest: null,\n\tresult: null,\n\tclearOtpTrigger: 0,\n};\n\nconst NOOP_ASYNC = async () => {};\n\nexport function PaymanChat({\n\tconfig,\n\tcallbacks = {},\n\tclassName,\n\tstyle,\n\tchildren,\n}: PaymanChatProps) {\n\tconst [inputValue, setInputValue] = useState(\"\");\n\tconst [recordingElapsedSeconds, setRecordingElapsedSeconds] = useState(0);\n\tconst recordingStartRef = useRef<number | null>(null);\n\tconst recordingIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\tconst prevInputValueRef = useRef(inputValue);\n\tconst scrollMessagesToEndRef = useRef<(() => void) | null>(null);\n\n\t// Use the chat hook - it handles everything internally\n\tconst chat = useChat(config, callbacks);\n\tconst {\n\t\tmessages,\n\t\tsendMessage,\n\t\tisWaitingForResponse,\n\t\tresetSession,\n\t\tclearMessages,\n\t\tcancelStream,\n\t\tgetSessionId,\n\t\tgetMessages,\n\t} = chat;\n\n\t// Keep OTP features backward-safe if hook returns a non-OTP shape.\n\tconst userActionState = chat.userActionState ?? DEFAULT_USER_ACTION_STATE;\n\tconst approveUserAction = chat.approveUserAction ?? NOOP_ASYNC;\n\tconst rejectUserAction = chat.rejectUserAction ?? NOOP_ASYNC;\n\tconst resendOtp = chat.resendOtp ?? NOOP_ASYNC;\n\tconst isUserActionSupported =\n\t\ttypeof chat.approveUserAction === \"function\" &&\n\t\ttypeof chat.rejectUserAction === \"function\" &&\n\t\ttypeof chat.resendOtp === \"function\";\n\n\t// Voice support\n\tconst {\n\t\tvoiceState,\n\t\ttranscribedText,\n\t\tisAvailable: voiceAvailable,\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\tonError: (error) => {\n\t\t\t\tconsole.error(\"Voice error:\", error);\n\t\t\t},\n\t\t}\n\t);\n\n\tconst isRecording = voiceState === \"listening\";\n\n\t// Create context value with control methods\n\tconst contextValue = useMemo(\n\t\t() => ({\n\t\t\tresetSession,\n\t\t\tclearMessages,\n\t\t\tcancelStream,\n\t\t\tgetSessionId,\n\t\t\tgetMessages,\n\t\t\tisWaitingForResponse,\n\t\t}),\n\t\t[\n\t\t\tresetSession,\n\t\t\tclearMessages,\n\t\t\tcancelStream,\n\t\t\tgetSessionId,\n\t\t\tgetMessages,\n\t\t\tisWaitingForResponse,\n\t\t]\n\t);\n\n\t// Extract callbacks\n\tconst { onExecutionTraceClick } = callbacks;\n\n\t// Extract config with hardcoded UI defaults\n\tconst {\n\t\tplaceholder = \"Type your message...\",\n\t\temptyStateText = \"What can I help with?\",\n\t\tsessionParams,\n\t\tdisableInput = false,\n\t\thasAskPermission = true,\n\t\tstreamingStepsText,\n\t\tcompletedStepsText,\n\t\tshowAvatars = false,\n\t\tshowUserAvatar,\n\t\tshowAssistantAvatar,\n\t\tshowAgentName = true,\n\t\tagentName = \"Assistant\",\n\t\tshowExecutionSteps = true,\n\t\tshowStreamingDot = true,\n\t\tlayout = \"full-width\",\n\t\tshowTimestamps = false,\n\t\tanimated = true,\n\t\tisChatDisabled = false,\n\t\tdisabledComponent,\n\t\tshowEmptyStateIcon = true,\n\t\tinputStyle = \"rounded\",\n\t\tenableVoice = 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// Recording timer: tick every second while recording\n\tuseEffect(() => {\n\t\tif (isRecording) {\n\t\t\trecordingStartRef.current = Date.now();\n\t\t\tsetRecordingElapsedSeconds(0);\n\t\t\trecordingIntervalRef.current = setInterval(() => {\n\t\t\t\tif (recordingStartRef.current != null) {\n\t\t\t\t\tsetRecordingElapsedSeconds(\n\t\t\t\t\t\tMath.floor((Date.now() - recordingStartRef.current) / 1000)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}, 1000);\n\t\t} else {\n\t\t\trecordingStartRef.current = null;\n\t\t\tif (recordingIntervalRef.current) {\n\t\t\t\tclearInterval(recordingIntervalRef.current);\n\t\t\t\trecordingIntervalRef.current = null;\n\t\t\t}\n\t\t\tsetRecordingElapsedSeconds(0);\n\t\t}\n\t\treturn () => {\n\t\t\tif (recordingIntervalRef.current) {\n\t\t\t\tclearInterval(recordingIntervalRef.current);\n\t\t\t\trecordingIntervalRef.current = null;\n\t\t\t}\n\t\t};\n\t}, [isRecording]);\n\n\t// Reset voice recognition only when user clears the input\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\tstopRecording();\n\t\t}\n\t}, [inputValue, clearTranscript, stopRecording]);\n\n\tconst handleSend = useCallback(() => {\n\t\tstopRecording();\n\t\tif (inputValue.trim() && !disableInput && isSessionParamsConfigured) {\n\t\t\tsendMessage(inputValue.trim());\n\t\t\tsetInputValue(\"\");\n\t\t}\n\t}, [\n\t\tinputValue,\n\t\tdisableInput,\n\t\tisSessionParamsConfigured,\n\t\tsendMessage,\n\t\tstopRecording,\n\t]);\n\n\tconst isInputDisabled =\n\t\tisWaitingForResponse || !isSessionParamsConfigured || disableInput;\n\n\t// Voice handlers\n\tconst handleVoicePress = useCallback(async () => {\n\t\tif (!voiceAvailable) return;\n\t\tclearTranscript();\n\t\tawait startRecording();\n\t}, [voiceAvailable, startRecording, clearTranscript]);\n\n\tconst handleConfirmRecording = useCallback(() => {\n\t\tstopRecording();\n\t\tif (transcribedText.trim()) setInputValue(transcribedText);\n\t}, [stopRecording, transcribedText]);\n\n\tconst handleCancelRecording = useCallback(() => {\n\t\tstopRecording();\n\t}, [stopRecording]);\n\n\t/** Scroll messages after focus so content stays above the keyboard once layout settles. */\n\tconst handleInputFocus = useCallback(() => {\n\t\tconst run = () => scrollMessagesToEndRef.current?.();\n\t\trun();\n\t\trequestAnimationFrame(run);\n\t\tsetTimeout(run, 100);\n\t\tsetTimeout(run, 280);\n\t}, []);\n\n\t// Disabled state\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<View style={[s.container, style]}>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t\t{disabledComponent}\n\t\t\t\t\t</View>\n\t\t\t\t</PaymanChatContext.Provider>\n\t\t\t);\n\t\t}\n\t\treturn (\n\t\t\t<PaymanChatContext.Provider value={contextValue}>\n\t\t\t\t<View style={[s.container, style]}>\n\t\t\t\t\t{children}\n\t\t\t\t\t<View style={s.disabledWrap}>\n\t\t\t\t\t\t<Text style={s.disabledText}>Chat is currently disabled</Text>\n\t\t\t\t\t</View>\n\t\t\t\t</View>\n\t\t\t</PaymanChatContext.Provider>\n\t\t);\n\t}\n\n\treturn (\n\t\t<PaymanChatContext.Provider value={contextValue}>\n\t\t\t<KeyboardAvoidingView\n\t\t\t\tstyle={[s.container, style]}\n\t\t\t\tbehavior=\"padding\"\n\t\t\t\tkeyboardVerticalOffset={Platform.OS === \"ios\" ? 90 : 0}\n\t\t\t>\n\t\t\t\t{children}\n\n\t\t\t\t<View style={s.messageListWrap}>\n\t\t\t\t\t<MessageList\n\t\t\t\t\t\tmessages={messages}\n\t\t\t\t\t\tisWaitingForResponse={isWaitingForResponse}\n\t\t\t\t\t\tisLoading={false}\n\t\t\t\t\t\temptyStateText={emptyStateText}\n\t\t\t\t\t\tshowEmptyStateIcon={showEmptyStateIcon}\n\t\t\t\t\t\tlayout={layout}\n\t\t\t\t\t\tshowTimestamps={showTimestamps}\n\t\t\t\t\t\tstage={config.stage || \"DEV\"}\n\t\t\t\t\t\tanimated={animated}\n\t\t\t\t\t\tshowAgentName={showAgentName}\n\t\t\t\t\t\tagentName={agentName}\n\t\t\t\t\t\tshowAvatars={showAvatars}\n\t\t\t\t\t\tshowUserAvatar={showUserAvatar}\n\t\t\t\t\t\tshowAssistantAvatar={showAssistantAvatar}\n\t\t\t\t\t\tshowExecutionSteps={showExecutionSteps}\n\t\t\t\t\t\tshowStreamingDot={showStreamingDot}\n\t\t\t\t\t\tstreamingStepsText={streamingStepsText}\n\t\t\t\t\t\tcompletedStepsText={completedStepsText}\n\t\t\t\t\t\tonExecutionTraceClick={onExecutionTraceClick}\n\t\t\t\t\t\tscrollToEndHandleRef={scrollMessagesToEndRef}\n\t\t\t\t\t/>\n\t\t\t\t</View>\n\n\t\t\t\t{hasAskPermission && (\n\t\t\t\t\t<View style={s.inputBarWrap}>\n\t\t\t\t\t\t<ChatInput\n\t\t\t\t\t\t\tvalue={inputValue}\n\t\t\t\t\t\t\tonChange={setInputValue}\n\t\t\t\t\t\t\tonSend={handleSend}\n\t\t\t\t\t\t\tonPause={cancelStream}\n\t\t\t\t\t\t\tdisabled={isInputDisabled}\n\t\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\t\tisWaitingForResponse={isWaitingForResponse}\n\t\t\t\t\t\t\thasSelectedSession={true}\n\t\t\t\t\t\t\tisSessionParamsConfigured={isSessionParamsConfigured}\n\t\t\t\t\t\t\tinputStyle={inputStyle}\n\t\t\t\t\t\t\tlayout={layout}\n\t\t\t\t\t\t\tenableVoice={enableVoice}\n\t\t\t\t\t\t\tonVoicePress={enableVoice ? handleVoicePress : undefined}\n\t\t\t\t\t\t\tvoiceAvailable={enableVoice && voiceAvailable}\n\t\t\t\t\t\t\tisRecording={enableVoice && isRecording}\n\t\t\t\t\t\t\trecordingDurationSeconds={recordingElapsedSeconds}\n\t\t\t\t\t\t\tonConfirmRecording={enableVoice ? handleConfirmRecording : undefined}\n\t\t\t\t\t\t\tonCancelRecording={enableVoice ? handleCancelRecording : undefined}\n\t\t\t\t\t\t\ttranscribedText={enableVoice && isRecording ? transcribedText : undefined}\n\t\t\t\t\t\t\tonInputFocus={handleInputFocus}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</View>\n\t\t\t\t)}\n\n\t\t\t\t<UserActionModal\n\t\t\t\t\tisOpen={isUserActionSupported && userActionState.request !== null}\n\t\t\t\t\tuserActionRequest={userActionState.request}\n\t\t\t\t\tonApprove={approveUserAction}\n\t\t\t\t\tonReject={rejectUserAction}\n\t\t\t\t\tonResend={resendOtp}\n\t\t\t\t\tclearOtpTrigger={userActionState.clearOtpTrigger}\n\t\t\t\t/>\n\t\t\t</KeyboardAvoidingView>\n\t\t</PaymanChatContext.Provider>\n\t);\n}\n\nconst s = StyleSheet.create({\n\t/** Lets the message list shrink when the keyboard opens; pairs with FlatList flex:1. */\n\tmessageListWrap: { flex: 1, minHeight: 0, zIndex: 0 },\n\t/**\n\t * Keeps the composer above the message list when scrolling so rows (e.g. stream step toggles)\n\t * do not paint over the input. Elevation applies on Android only.\n\t */\n\tinputBarWrap: {\n\t\twidth: \"100%\",\n\t\tzIndex: 2,\n\t\t...Platform.select({\n\t\t\tandroid: { elevation: 8 },\n\t\t\tdefault: {},\n\t\t}),\n\t},\n\tcontainer: {\n\t\tflex: 1,\n\t\tbackgroundColor: \"#FFFFFF\",\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tborderColor: \"rgba(0,0,0,0.08)\",\n\t\tborderRadius: 16,\n\t\toverflow: \"hidden\",\n\t},\n\tdisabledWrap: {\n\t\tflex: 1,\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t\tpadding: 16,\n\t},\n\tdisabledText: { fontSize: 14, color: \"#9CA3AF\", textAlign: \"center\" },\n});\n"]}