@adminide-stack/yantra-mobile 12.0.28-alpha.67 → 12.0.28-alpha.68

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.
Files changed (35) hide show
  1. package/lib/api/stt.js +54 -0
  2. package/lib/api/stt.js.map +1 -0
  3. package/lib/components/GatewayConnector/GatewayConnector.js +18 -0
  4. package/lib/components/GatewayConnector/GatewayConnector.js.map +1 -0
  5. package/lib/components/NavigationHeader/NavigationHeader.js +214 -0
  6. package/lib/components/NavigationHeader/NavigationHeader.js.map +1 -0
  7. package/lib/components/ThinkingIndicator.js +55 -0
  8. package/lib/components/ThinkingIndicator.js.map +1 -0
  9. package/lib/compute.js +108 -31
  10. package/lib/compute.js.map +1 -1
  11. package/lib/contexts/CdecliConnectionContext.js +47 -0
  12. package/lib/contexts/CdecliConnectionContext.js.map +1 -0
  13. package/lib/contexts/GatewayContext.js +1 -1
  14. package/lib/features/audio-input/AudioRecorderPanel.js +228 -0
  15. package/lib/features/audio-input/AudioRecorderPanel.js.map +1 -0
  16. package/lib/hooks/useCdecliAutoConnect.js +41 -18
  17. package/lib/hooks/useCdecliAutoConnect.js.map +1 -1
  18. package/lib/hooks/useChatApi.js +158 -41
  19. package/lib/hooks/useChatApi.js.map +1 -1
  20. package/lib/hooks/useChatStream.js +59 -16
  21. package/lib/hooks/useChatStream.js.map +1 -1
  22. package/lib/hooks/usePrerequisiteIds.js +8 -12
  23. package/lib/hooks/usePrerequisiteIds.js.map +1 -1
  24. package/lib/index.js +1 -1
  25. package/lib/index.js.map +1 -1
  26. package/lib/routes.json +112 -0
  27. package/lib/screens/Chat/index.js +392 -0
  28. package/lib/screens/Chat/index.js.map +1 -0
  29. package/lib/screens/ChatHistory/index.js +56 -0
  30. package/lib/screens/ChatHistory/index.js.map +1 -0
  31. package/lib/screens/Home/HomeScreen.js +105 -427
  32. package/lib/screens/Home/HomeScreen.js.map +1 -1
  33. package/lib/screens/Home/components/ChatHistoryLanding.js +436 -214
  34. package/lib/screens/Home/components/ChatHistoryLanding.js.map +1 -1
  35. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"HomeScreen.js","sources":["../../../src/screens/Home/HomeScreen.tsx"],"sourcesContent":["import React, { FC, useState, useCallback, useEffect, useMemo } from 'react';\nimport {\n Keyboard,\n Platform,\n Pressable,\n StyleSheet,\n TouchableWithoutFeedback,\n View,\n useColorScheme,\n useWindowDimensions,\n} from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { Box, InputToolBar, Text, getDefaultLeftItems, getDefaultRightItems } from '@admin-layout/gluestack-ui-mobile';\nimport { SafeAreaView, useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { useNavigation, useRoute, CommonActions } from '@react-navigation/native';\nimport { MessagesContainerUI } from '@messenger-box/platform-mobile';\nimport { v4 as uuidv4 } from 'uuid';\nimport { ContributionSchemaId } from 'common';\nimport { useGetContextDataQuery, useGetPageSettingsQuery } from 'common/graphql';\nimport { useGatewayContext } from '../../contexts/GatewayContext';\nimport { GatewayToolbarButtonMobile } from '../../components/GatewayToolbarButtonMobile';\nimport { useCdecliAutoConnect } from '../../hooks/useCdecliAutoConnect';\nimport { usePrerequisiteIds } from '../../hooks/usePrerequisiteIds';\nimport { useChatMutations, useChatSessions } from '../../hooks/useChatApi';\nimport { useChatStream, type UseChatStreamRouting } from '../../hooks/useChatStream';\nimport type { ModeSubmission, RoutingMode } from './types';\nimport DeepSearchModal from './components/DeepSearchModal';\nimport ChatHistoryLanding from './components/ChatHistoryLanding';\nimport { extractDeepSearchSources, normalizeSummaryText, type DeepSearchSourceItem } from './deepSearchUtils';\nimport { YantraBrandLoader, YANTRA_LOADER_SIZE_COMPACT } from '../../components/YantraBrandLoader';\nimport { mobileTokens } from '../../theme/mobileTokens';\n\nexport type { RoutingMode, ModeSubmission };\n\nexport interface HomeScreenProps {\n initialMode?: RoutingMode;\n onSubmit?: (submission: ModeSubmission) => void;\n onStop?: () => void;\n isLoading?: boolean;\n disabled?: boolean;\n}\n\n/** Reserve the bottom composer band (toolbar + mode row) so the sending loader centers in the messages area above it. */\nconst SENDING_LOADER_COMPOSER_RESERVE_PX = 156;\nconst COMPOSER_SCROLL_RESERVE_PX = 164;\n\nfunction organizationFromSettingsValue(settings: unknown): string | null {\n if (settings == null) return null;\n if (typeof settings === 'string') {\n try {\n const parsed = JSON.parse(settings) as { organization?: string };\n const o = parsed?.organization;\n return typeof o === 'string' && o.trim() ? o.trim() : null;\n } catch {\n return null;\n }\n }\n if (typeof settings === 'object' && settings !== null && 'organization' in settings) {\n const o = (settings as { organization?: unknown }).organization;\n return typeof o === 'string' && o.trim() ? o.trim() : null;\n }\n return null;\n}\n\nfunction projectFromSettingsValue(settings: unknown): string | null {\n if (settings == null) return null;\n if (typeof settings === 'string') {\n try {\n const parsed = JSON.parse(settings) as { project?: string };\n const p = parsed?.project;\n return typeof p === 'string' && p.trim() ? p.trim() : null;\n } catch {\n return null;\n }\n }\n if (typeof settings === 'object' && settings !== null && 'project' in settings) {\n const p = (settings as { project?: unknown }).project;\n return typeof p === 'string' && p.trim() ? p.trim() : null;\n }\n return null;\n}\n\ninterface ChatContentSectionProps {\n contentMaxWidth: number;\n composerScrollBottomPadding: number;\n messages: Array<{ role: string; content: string; metadata?: unknown }>;\n response?: string;\n isLoading: boolean;\n disabled: boolean;\n isStreaming: boolean;\n onStop?: () => void;\n cancel: () => void;\n onSend: (text: string) => void;\n onBackPress: () => void;\n}\n\nconst ChatContentSection = React.memo(function ChatContentSection({\n contentMaxWidth,\n composerScrollBottomPadding,\n messages,\n response,\n isLoading,\n disabled,\n isStreaming,\n onStop,\n cancel,\n onSend,\n onBackPress,\n}: ChatContentSectionProps) {\n return (\n <Box flex={1} width=\"100%\" alignSelf=\"stretch\">\n <MessagesContainerUI\n mode=\"chat\"\n showBackButton={false}\n onBackPress={onBackPress}\n compactTop\n messagesContainerStyle={{\n paddingHorizontal: 0,\n paddingTop: 0,\n paddingBottom: composerScrollBottomPadding,\n margin: 0,\n marginTop: 0,\n alignSelf: 'center',\n width: contentMaxWidth,\n }}\n listContentStyle={{\n paddingTop: 0,\n paddingBottom: composerScrollBottomPadding,\n margin: 0,\n marginTop: 0,\n width: contentMaxWidth,\n alignSelf: 'center',\n justifyContent: 'flex-end',\n }}\n messages={messages.map((msg, index) => ({\n id: `msg-${index}-${msg.role}`,\n role: msg.role,\n content: msg.content,\n metadata: msg.metadata as any,\n }))}\n streamingContent={response}\n currentUser={{ id: 'user' }}\n onSend={onSend}\n disabled={isLoading || disabled}\n isLoading={isLoading}\n onStop={isStreaming ? cancel : onStop}\n renderPlanInputToolbar={() => null}\n renderBuildInputToolbar={() => null}\n />\n </Box>\n );\n});\n\ninterface EmptyStateSectionProps {\n isDark: boolean;\n secondaryTextColor: string;\n primaryTextColor: string;\n activeMode: RoutingMode;\n onModeSwitch: (mode: RoutingMode) => void;\n}\n\nconst EmptyStateSection = React.memo(function EmptyStateSection({\n isDark,\n secondaryTextColor,\n primaryTextColor,\n activeMode,\n onModeSwitch,\n}: EmptyStateSectionProps) {\n return (\n <Box flex={1} width=\"100%\">\n <View style={styles.emptyCenterTitleWrap}>\n <Text style={[styles.emptyEyebrow, { color: secondaryTextColor }]}>Choose your mode</Text>\n <View\n style={[\n styles.emptyModePillRow,\n {\n backgroundColor: isDark ? 'rgba(30, 41, 59, 0.9)' : '#eef2ff',\n borderColor: isDark ? 'rgba(148, 163, 184, 0.26)' : 'rgba(67, 56, 202, 0.15)',\n },\n ]}\n >\n <Pressable\n onPress={() => onModeSwitch('chat')}\n style={[\n styles.emptyModePill,\n activeMode === 'chat' && styles.emptyModePillActive,\n activeMode === 'chat' && { backgroundColor: isDark ? '#312e81' : '#4338ca' },\n ]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Switch to chat mode\"\n >\n <MaterialCommunityIcons\n name=\"magnify\"\n size={14}\n color={activeMode === 'chat' ? '#ffffff' : secondaryTextColor}\n />\n <Text\n style={[\n styles.emptyModePillLabel,\n { color: activeMode === 'chat' ? '#ffffff' : secondaryTextColor },\n ]}\n >\n Chat\n </Text>\n </Pressable>\n <Pressable\n onPress={() => onModeSwitch('deep-search')}\n style={[\n styles.emptyModePill,\n activeMode === 'deep-search' && styles.emptyModePillActive,\n activeMode === 'deep-search' && { backgroundColor: isDark ? '#312e81' : '#4338ca' },\n ]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Switch to deep-search mode\"\n >\n <MaterialCommunityIcons\n name=\"lightning-bolt-outline\"\n size={14}\n color={activeMode === 'deep-search' ? '#ffffff' : secondaryTextColor}\n />\n <Text\n style={[\n styles.emptyModePillLabel,\n { color: activeMode === 'deep-search' ? '#ffffff' : secondaryTextColor },\n ]}\n >\n Deep Search\n </Text>\n </Pressable>\n </View>\n <Text style={[styles.emptyCenterTitle, { color: primaryTextColor }]}>How do you want to start?</Text>\n <Text style={[styles.emptySubtitle, { color: secondaryTextColor }]}>\n Use Chat for quick help, or Deep Search for researched, source-backed answers.\n </Text>\n </View>\n </Box>\n );\n});\n\ninterface HeaderBackButtonProps {\n color: string;\n onPress: () => void;\n}\n\nconst HeaderBackButton = React.memo(function HeaderBackButton({ color, onPress }: HeaderBackButtonProps) {\n return (\n <Pressable\n onPress={onPress}\n style={({ pressed }) => [styles.backButton, pressed && styles.newChatButtonPressed]}\n accessibilityLabel=\"Back to chat\"\n >\n <MaterialCommunityIcons name=\"chevron-left\" size={24} color={color} />\n </Pressable>\n );\n});\n\ninterface HeaderRightActionsProps {\n gatewayToolbarStatus: string;\n gatewayToolbarError?: string | null;\n onToggleGateway: () => void;\n gatewayToolbarLabel?: string;\n gatewayToolbarTone: string;\n showChatHistory: boolean;\n onOpenChatHistory: () => void;\n onNewChat: () => void;\n isDark: boolean;\n accentColor: string;\n newChatIconColor: string;\n}\n\nconst HeaderRightActions = React.memo(function HeaderRightActions({\n gatewayToolbarStatus,\n gatewayToolbarError,\n onToggleGateway,\n gatewayToolbarLabel,\n gatewayToolbarTone,\n showChatHistory,\n onOpenChatHistory,\n onNewChat,\n isDark,\n accentColor,\n newChatIconColor,\n}: HeaderRightActionsProps) {\n return (\n <View style={styles.headerRight}>\n <GatewayToolbarButtonMobile\n gatewayStatus={gatewayToolbarStatus}\n gatewayError={gatewayToolbarError}\n onToggleGateway={onToggleGateway}\n disabled={false}\n statusLabel={gatewayToolbarLabel}\n tone={gatewayToolbarTone}\n />\n {!showChatHistory ? (\n <Pressable\n onPress={onOpenChatHistory}\n style={({ pressed }) => [styles.historyHeaderButton, pressed && styles.historyHeaderButtonPressed]}\n accessibilityLabel=\"Chat history\"\n accessibilityRole=\"button\"\n >\n <View\n style={[styles.historyHeaderButtonInner, isDark ? styles.historyHeaderButtonInnerDark : null]}\n >\n <MaterialCommunityIcons name=\"history\" size={19} color={accentColor} />\n </View>\n </Pressable>\n ) : null}\n <Pressable\n onPress={onNewChat}\n style={({ pressed }) => [styles.newChatButton, pressed && styles.newChatButtonPressed]}\n accessibilityLabel=\"New chat\"\n >\n <View style={[styles.newChatButtonInner, isDark ? styles.newChatButtonInnerDark : null]}>\n <MaterialCommunityIcons name=\"chat-plus-outline\" size={20} color={newChatIconColor} />\n </View>\n </Pressable>\n </View>\n );\n});\n\nfunction HomeScreenContent({\n initialMode = 'chat',\n onSubmit: onSubmitProp,\n onStop,\n isLoading: isLoadingProp = false,\n disabled = false,\n}: HomeScreenProps) {\n const { width: screenWidth } = useWindowDimensions();\n const colorScheme = useColorScheme();\n const isDark = colorScheme === 'dark';\n const navigation = useNavigation();\n const route = useRoute<any>();\n const hasRehydratedOrgRef = React.useRef(false);\n const [value, setValue] = useState('');\n const [activeMode, setActiveMode] = useState<RoutingMode>(initialMode);\n const [activeSessionId, setActiveSessionId] = useState<string | null>(null);\n const [isDeepSearchModalOpen, setIsDeepSearchModalOpen] = useState(false);\n const [deepSearchQuery, setDeepSearchQuery] = useState<string | null>(null);\n const [deepSearchSummary, setDeepSearchSummary] = useState('');\n const [deepSearchSources, setDeepSearchSources] = useState<DeepSearchSourceItem[]>([]);\n const [researchProcessOpen, setResearchProcessOpen] = useState(true);\n const [sourcesAccordionOpen, setSourcesAccordionOpen] = useState(true);\n /** Full-screen chat history list opened from header (chat UI remains default). */\n const [showChatHistory, setShowChatHistory] = useState(false);\n /** True while creating channel id before send (covers UI delay before chatLoading flips). */\n const [channelBootstrap, setChannelBootstrap] = useState(false);\n\n const { createChannel } = useChatMutations();\n const { sessions } = useChatSessions();\n const { orgName: resolvedOrgName, projectId } = usePrerequisiteIds();\n const { data: contextData } = useGetContextDataQuery();\n const cdecodeUri = contextData?.getContextData?.cdecodeUri;\n const { data: pageSettingsData } = useGetPageSettingsQuery({\n variables: {\n resourceUri: cdecodeUri as never,\n options: {\n schemaId: ContributionSchemaId.Configuration,\n configKey: 'account.default',\n includeMarketplace: true,\n },\n },\n skip: !cdecodeUri,\n fetchPolicy: 'cache-first',\n });\n const fallbackOrgNameFromSettings = useMemo(\n () => organizationFromSettingsValue(pageSettingsData?.pageSettings?.settings),\n [pageSettingsData],\n );\n const fallbackProjectIdFromSettings = useMemo(\n () => projectFromSettingsValue(pageSettingsData?.pageSettings?.settings),\n [pageSettingsData],\n );\n const routeOrgName = ((route?.params?.orgName as string | undefined) ?? '').trim() || null;\n const effectiveOrgName = resolvedOrgName || fallbackOrgNameFromSettings || routeOrgName || null;\n /** Prefer hook (same source as web); fall back to this screen's page settings when prerequisites lag one frame. */\n const effectiveProjectId = projectId || fallbackProjectIdFromSettings || null;\n const { selectedGateway } = useGatewayContext();\n const cdecliSelected = selectedGateway?.channelType === 'cdecli-serve';\n const cdecli = useCdecliAutoConnect(cdecliSelected, activeSessionId ?? undefined);\n\n /** Same gate as web ChatSessionPage (`cdecliConnected`): only route via gateway when the channel is live. */\n const cdecliConnected = cdecliSelected && cdecli.channelConnected;\n\n const effectivePersistenceMode = cdecli.persistenceMode ?? selectedGateway?.persistenceMode ?? 'frontend';\n\n const chatRouting: UseChatStreamRouting = useMemo(\n () =>\n cdecliConnected\n ? {\n kind: 'cdecli',\n channelConnected: cdecli.channelConnected,\n accountId: cdecli.accountId,\n persistenceMode: effectivePersistenceMode,\n }\n : { kind: 'groq' },\n [cdecliConnected, cdecli.channelConnected, cdecli.accountId, effectivePersistenceMode],\n );\n\n const chat = useChatStream(activeSessionId, chatRouting);\n\n const {\n messages,\n response,\n error: chatError,\n isLoading: chatLoading,\n isStreaming,\n hasMessages,\n sendMessage,\n cancel,\n clearMessages,\n } = chat;\n\n const trimmedQuery = value.trim();\n const hasQuery = trimmedQuery.length > 0;\n const canSubmit = hasQuery && Boolean(routeOrgName || effectiveOrgName);\n const isLoading = isLoadingProp || chatLoading;\n const isResearchMode = activeMode === 'deep-search';\n const inputPlaceholder = !effectiveOrgName\n ? 'Initializing workspace...'\n : isResearchMode\n ? 'Research anything...'\n : 'Ask anything...';\n const waitingForAssistant = useMemo(() => {\n if ((!chatLoading && !isStreaming) || messages.length === 0) return false;\n return messages[messages.length - 1]?.role === 'user';\n }, [chatLoading, isStreaming, messages]);\n\n /** Thread has bubbles or streaming buffer → anchor loader above composer; empty landing → center. */\n const pinSendingLoaderNearComposer = useMemo(\n () => messages.length > 0 || Boolean((response ?? '').trim()),\n [messages.length, response],\n );\n\n const showSendingLoader = !showChatHistory && (channelBootstrap || waitingForAssistant);\n const hasRenderableConversation = messages.length > 0 || isStreaming;\n\n const insets = useSafeAreaInsets();\n const [keyboardHeight, setKeyboardHeight] = useState(0);\n\n useEffect(() => {\n if (Platform.OS === 'ios') {\n const frameSub = Keyboard.addListener('keyboardWillChangeFrame', (event) =>\n setKeyboardHeight(event.endCoordinates?.height ?? 0),\n );\n const showSub = Keyboard.addListener('keyboardWillShow', (event) =>\n setKeyboardHeight(event.endCoordinates?.height ?? 0),\n );\n const hideSub = Keyboard.addListener('keyboardWillHide', () => setKeyboardHeight(0));\n return () => {\n frameSub.remove();\n showSub.remove();\n hideSub.remove();\n };\n }\n const showSub = Keyboard.addListener('keyboardDidShow', (event) =>\n setKeyboardHeight(event.endCoordinates?.height ?? 0),\n );\n const hideSub = Keyboard.addListener('keyboardDidHide', () => setKeyboardHeight(0));\n return () => {\n showSub.remove();\n hideSub.remove();\n };\n }, []);\n\n // useEffect(() => {\n // navigation.setOptions({\n // headerLeft: () => null,\n // });\n // }, []);\n\n const handleModeSwitch = useCallback((mode: RoutingMode) => {\n setActiveMode(mode);\n }, []);\n\n // Web-aligned flow: create channel first, then send first post using returned channel id.\n const ensureSessionId = useCallback(\n async (mode: RoutingMode): Promise<string> => {\n if (activeSessionId) return activeSessionId;\n if (!effectiveOrgName || !effectiveProjectId) {\n throw new Error('Workspace is still initializing. Please retry in a moment.');\n }\n const requestedChannelId = uuidv4();\n const title =\n mode === 'deep-search' ? `deep-search-${requestedChannelId}` : `chat-channel-${requestedChannelId}`;\n const session = await createChannel({\n id: requestedChannelId,\n title,\n isShared: false,\n sharedSlug: null,\n isArchived: false,\n isPinned: false,\n model: null,\n systemPrompt: null,\n orgName: effectiveOrgName,\n projectId: effectiveProjectId,\n } as any);\n setActiveSessionId(session.id);\n return session.id;\n },\n [activeSessionId, createChannel, effectiveOrgName, effectiveProjectId],\n );\n\n const handleSubmit = useCallback(\n async (attachments?: ModeSubmission['attachments']) => {\n if (!canSubmit || isLoading || disabled) return;\n\n const submission: ModeSubmission = {\n mode: activeMode,\n query: trimmedQuery,\n attachments,\n };\n\n if (activeMode === 'deep-search') {\n if (onSubmitProp) {\n onSubmitProp(submission);\n }\n setValue('');\n setDeepSearchQuery(trimmedQuery);\n setDeepSearchSummary('');\n setDeepSearchSources([]);\n setIsDeepSearchModalOpen(true);\n try {\n setChannelBootstrap(true);\n const sessionId = await ensureSessionId('deep-search');\n await sendMessage(trimmedQuery, undefined, sessionId);\n } catch (err) {\n console.error('[HomeScreen] Failed to create deep-search session:', err);\n } finally {\n setChannelBootstrap(false);\n }\n return;\n }\n\n if (onSubmitProp && activeMode === 'chat') {\n onSubmitProp(submission);\n setValue('');\n return;\n }\n\n try {\n setChannelBootstrap(true);\n const sessionId = await ensureSessionId('chat');\n setValue('');\n await sendMessage(trimmedQuery, undefined, sessionId);\n } catch (err) {\n console.error('[HomeScreen] Failed to create session:', err);\n } finally {\n setChannelBootstrap(false);\n }\n },\n [\n canSubmit,\n isLoading,\n disabled,\n activeMode,\n trimmedQuery,\n activeSessionId,\n onSubmitProp,\n ensureSessionId,\n sendMessage,\n ],\n );\n\n const handleNewChat = useCallback(() => {\n setShowChatHistory(false);\n setActiveSessionId(null);\n setValue('');\n clearMessages();\n }, [clearMessages]);\n\n const handleOpenChatHistory = useCallback(() => {\n setShowChatHistory(true);\n }, []);\n\n const handleCloseChatHistory = useCallback(() => {\n setShowChatHistory(false);\n }, []);\n\n const handleToggleGateway = useCallback(() => {\n // CDeCLI connection is selection-driven via useCdecliAutoConnect.\n }, []);\n\n const gatewayToolbarStatus =\n cdecli.status === 'connecting'\n ? 'connecting'\n : cdecli.status === 'connected'\n ? 'connected'\n : cdecli.status === 'error'\n ? 'error'\n : 'disconnected';\n\n const gatewayToolbarTone = 'default';\n\n const gatewayToolbarLabel = cdecli.status === 'connecting' ? 'Checking...' : undefined;\n\n const gatewayToolbarError = cdecli.error;\n // const surfaceColor = isDark ? '#0f172a' : mobileTokens.color.bg;\n const surfaceColor = isDark ? '#0f172a' : mobileTokens.color.surface;\n const primaryTextColor = isDark ? '#e5e7eb' : mobileTokens.color.text;\n const secondaryTextColor = isDark ? '#94a3b8' : mobileTokens.color.textMuted;\n const accentColor = isDark ? '#a5b4fc' : '#4338ca';\n const newChatIconColor = isDark ? '#e5e7eb' : '#000000';\n const contentMaxWidth = Math.min(720, Math.max(360, screenWidth - 24));\n\n useEffect(() => {\n const currentOrgName = (route?.params?.orgName as string | undefined)?.trim() || '';\n if (!effectiveOrgName || currentOrgName === effectiveOrgName) return;\n // Keep current screen params in sync with resolved org context.\n (navigation as any).setParams?.({ orgName: effectiveOrgName });\n }, [navigation, route?.params?.orgName, effectiveOrgName]);\n\n useEffect(() => {\n const currentOrgName = (route?.params?.orgName as string | undefined)?.trim() || '';\n if (hasRehydratedOrgRef.current || currentOrgName || !effectiveOrgName) return;\n\n hasRehydratedOrgRef.current = true;\n // Also navigate with merge=true to patch parent stack params in nested navigation state.\n navigation.getParent()?.dispatch(\n CommonActions.navigate('MainStack', {\n screen: 'MainStack.Layout.Home',\n params: {\n orgName: effectiveOrgName,\n },\n merge: true,\n key: Date.now().toString(),\n }),\n );\n\n // CommonActions.reset({\n // index: 0,\n // routes: [\n // {\n // name: 'MainStack',\n // state: {\n // routes: [\n // {\n // name: 'MainStack.Layout.Home',\n // params: { orgName: effectiveOrgName },\n // },\n // ],\n // },\n // },\n // ],\n // });\n\n // (navigation as any).navigate('MainStack', {\n // screen: 'MainStack.Layout.Home',\n // params: { orgName: effectiveOrgName },\n // merge: true,\n // key: Date.now().toString(),\n // });\n }, [navigation, route?.params?.orgName, effectiveOrgName]);\n\n useEffect(() => {\n const headerLeft = showChatHistory\n ? () => <HeaderBackButton color={primaryTextColor} onPress={handleCloseChatHistory} />\n : undefined;\n const headerRight = () => (\n <HeaderRightActions\n gatewayToolbarStatus={gatewayToolbarStatus}\n gatewayToolbarError={gatewayToolbarError}\n onToggleGateway={handleToggleGateway}\n gatewayToolbarLabel={gatewayToolbarLabel}\n gatewayToolbarTone={gatewayToolbarTone}\n showChatHistory={showChatHistory}\n onOpenChatHistory={handleOpenChatHistory}\n onNewChat={handleNewChat}\n isDark={isDark}\n accentColor={accentColor}\n newChatIconColor={newChatIconColor}\n />\n );\n\n navigation.setOptions({\n drawerLabel: 'Chat',\n headerTitle: showChatHistory ? 'Chats' : 'Yantra',\n headerLeft,\n headerRight,\n });\n }, [\n navigation,\n showChatHistory,\n handleCloseChatHistory,\n handleOpenChatHistory,\n handleNewChat,\n handleToggleGateway,\n gatewayToolbarStatus,\n gatewayToolbarError,\n gatewayToolbarLabel,\n gatewayToolbarTone,\n primaryTextColor,\n accentColor,\n newChatIconColor,\n isDark,\n ]);\n\n const handleSendMessage = useCallback(\n async (text: string) => {\n if (!text.trim() || isLoading || disabled) return;\n const submission: ModeSubmission = { mode: activeMode, query: text.trim() };\n if (activeMode === 'deep-search') {\n if (onSubmitProp) {\n onSubmitProp(submission);\n }\n setDeepSearchQuery(text.trim());\n setDeepSearchSummary('');\n setDeepSearchSources([]);\n setIsDeepSearchModalOpen(true);\n try {\n setChannelBootstrap(true);\n const sessionId = await ensureSessionId('deep-search');\n await sendMessage(text.trim(), undefined, sessionId);\n } catch (err) {\n console.error('[HomeScreen] Failed to create deep-search session:', err);\n } finally {\n setChannelBootstrap(false);\n }\n return;\n }\n try {\n setChannelBootstrap(true);\n const sessionId = await ensureSessionId('chat');\n await sendMessage(text.trim(), undefined, sessionId);\n } catch (err) {\n console.error('[HomeScreen] Failed to create session:', err);\n } finally {\n setChannelBootstrap(false);\n }\n },\n [isLoading, disabled, activeMode, onSubmitProp, ensureSessionId, sendMessage],\n );\n\n const latestAssistantMessage = useMemo(() => {\n for (let i = messages.length - 1; i >= 0; i -= 1) {\n if (messages[i]?.role === 'assistant') return messages[i]?.content ?? '';\n }\n return '';\n }, [messages]);\n\n const deepSearchPreviewContent = response || deepSearchSummary;\n const deepSearchPreviewNormalized = useMemo(\n () => normalizeSummaryText(deepSearchPreviewContent || deepSearchSummary || ''),\n [deepSearchPreviewContent, deepSearchSummary],\n );\n\n const handleDeepSearchClose = useCallback(() => {\n if (isStreaming) {\n cancel();\n }\n setIsDeepSearchModalOpen(false);\n setDeepSearchQuery(null);\n setDeepSearchSummary('');\n setDeepSearchSources([]);\n setResearchProcessOpen(true);\n setSourcesAccordionOpen(true);\n }, [isStreaming, cancel]);\n\n const handleRetryDeepSearch = useCallback(async () => {\n if (!deepSearchQuery || isStreaming) return;\n try {\n setChannelBootstrap(true);\n const sessionId = await ensureSessionId('deep-search');\n await sendMessage(deepSearchQuery, undefined, sessionId);\n } catch (error) {\n console.error('[HomeScreen] Failed to retry deep-search:', error);\n } finally {\n setChannelBootstrap(false);\n }\n }, [deepSearchQuery, isStreaming, ensureSessionId, sendMessage]);\n\n const handleValueChange = useCallback((e: any) => {\n setValue(e.nativeEvent.text);\n }, []);\n\n const handleMicPress = useCallback(() => {\n console.log('mic');\n }, []);\n\n const handleSelectHistorySession = useCallback((channelId: string) => {\n setShowChatHistory(false);\n setActiveSessionId(channelId);\n setActiveMode('chat');\n }, []);\n\n const handleComposeFromHistory = useCallback(() => {\n setShowChatHistory(false);\n setActiveSessionId(null);\n setValue('');\n clearMessages();\n }, [clearMessages]);\n\n const handleToggleResearchProcess = useCallback(() => {\n setResearchProcessOpen((prev) => !prev);\n }, []);\n\n const handleToggleSourcesAccordion = useCallback(() => {\n setSourcesAccordionOpen((prev) => !prev);\n }, []);\n\n const handleRetryDeepSearchPress = useCallback(() => {\n void handleRetryDeepSearch();\n }, [handleRetryDeepSearch]);\n\n useEffect(() => {\n if (!deepSearchQuery || isStreaming || !latestAssistantMessage) return;\n setDeepSearchSummary(normalizeSummaryText(latestAssistantMessage));\n setDeepSearchSources(extractDeepSearchSources(latestAssistantMessage));\n }, [deepSearchQuery, isStreaming, latestAssistantMessage]);\n\n const composerScrollBottomPadding = COMPOSER_SCROLL_RESERVE_PX;\n\n const leftItems = useMemo(\n () =>\n getDefaultLeftItems({\n search: {\n active: activeMode === 'chat',\n onClick: () => handleModeSwitch('chat'),\n },\n zap: {\n active: activeMode === 'deep-search',\n onClick: () => handleModeSwitch('deep-search'),\n },\n lightbulb: { enabled: false },\n }),\n [activeMode, handleModeSwitch],\n );\n\n const rightItems = useMemo(\n () =>\n getDefaultRightItems({\n tag: { enabled: false },\n chip: { enabled: false },\n camera: { enabled: false, onClick: () => console.log('camera') },\n image: { enabled: false, onClick: () => console.log('image') },\n attach: { enabled: false, onClick: () => console.log('attach') },\n }),\n [],\n );\n\n const inputConfig = useMemo(\n () => ({\n value,\n onChange: handleValueChange,\n placeholder: inputPlaceholder,\n disabled: isLoading || disabled,\n }),\n [value, handleValueChange, inputPlaceholder, isLoading, disabled],\n );\n\n const micSendButton = useMemo(\n () => ({\n hasContent: canSubmit,\n onSend: () => handleSubmit(),\n onMic: handleMicPress,\n disabled: isLoading || disabled,\n isLoading,\n onStop: isStreaming ? cancel : onStop,\n }),\n [canSubmit, handleSubmit, handleMicPress, isLoading, disabled, isStreaming, cancel, onStop],\n );\n\n return (\n <SafeAreaView edges={['left', 'right', 'bottom']} style={{ flex: 1, backgroundColor: surfaceColor }}>\n <TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>\n <Box flex={1} width=\"100%\" position=\"relative\">\n {(chatError || cdecli.error) && (\n <Box\n mb=\"$2\"\n mx=\"$4\"\n p=\"$3\"\n borderRadius=\"$md\"\n style={{\n backgroundColor: isDark ? '#2b1a1d' : '#fef2f2',\n borderWidth: 1,\n borderColor: isDark ? '#7f1d1d' : '#fecaca',\n }}\n >\n <Text fontSize=\"$sm\" style={{ color: isDark ? '#fecaca' : '#991b1b' }}>\n {chatError || cdecli.error}\n </Text>\n </Box>\n )}\n {showChatHistory ? (\n <ChatHistoryLanding\n onSelectSession={handleSelectHistorySession}\n onCompose={handleComposeFromHistory}\n />\n ) : hasRenderableConversation ? (\n <ChatContentSection\n contentMaxWidth={contentMaxWidth}\n composerScrollBottomPadding={composerScrollBottomPadding}\n messages={messages}\n response={response}\n isLoading={isLoading}\n disabled={disabled}\n isStreaming={isStreaming}\n onStop={onStop}\n cancel={cancel}\n onSend={handleSendMessage}\n onBackPress={handleNewChat}\n />\n ) : (\n <EmptyStateSection\n isDark={isDark}\n secondaryTextColor={secondaryTextColor}\n primaryTextColor={primaryTextColor}\n activeMode={activeMode}\n onModeSwitch={handleModeSwitch}\n />\n )}\n {!showChatHistory ? (\n <View\n style={[\n styles.bottomComposerWrap,\n {\n bottom: Math.max(0, keyboardHeight - insets.bottom),\n paddingBottom: Math.max(insets.bottom - 6, 2),\n // backgroundColor: composerBarBackground,\n // borderTopColor: composerBarBorder,\n },\n ]}\n >\n <View style={[styles.bottomComposerInner, { width: contentMaxWidth }]}>\n <InputToolBar\n inputConfig={inputConfig}\n leftItems={leftItems}\n rightItems={rightItems}\n templateButton={null}\n templateModalConfig={null}\n micSendButton={micSendButton}\n />\n </View>\n </View>\n ) : null}\n {showSendingLoader ? (\n <View\n pointerEvents=\"none\"\n style={\n pinSendingLoaderNearComposer\n ? [\n styles.sendingLoaderAboveComposer,\n {\n bottom: Math.max(insets.bottom, 12) + SENDING_LOADER_COMPOSER_RESERVE_PX,\n },\n ]\n : styles.sendingLoaderEmptyState\n }\n >\n <YantraBrandLoader size={YANTRA_LOADER_SIZE_COMPACT} />\n </View>\n ) : null}\n </Box>\n </TouchableWithoutFeedback>\n <DeepSearchModal\n visible={isDeepSearchModalOpen}\n query={deepSearchQuery}\n summaryText={deepSearchPreviewNormalized}\n sources={deepSearchSources}\n isStreaming={isStreaming}\n researchProcessOpen={researchProcessOpen}\n sourcesAccordionOpen={sourcesAccordionOpen}\n onToggleResearchProcess={handleToggleResearchProcess}\n onToggleSourcesAccordion={handleToggleSourcesAccordion}\n onRetry={handleRetryDeepSearchPress}\n onStop={cancel}\n onClose={handleDeepSearchClose}\n />\n </SafeAreaView>\n );\n}\n\nconst styles = StyleSheet.create({\n /** First message / empty screen: loader in the middle of the pane. */\n sendingLoaderEmptyState: {\n position: 'absolute',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n justifyContent: 'center',\n alignItems: 'center',\n zIndex: 40,\n },\n /** Active thread: loader just above the input, not over message history. */\n sendingLoaderAboveComposer: {\n position: 'absolute',\n left: 0,\n right: 0,\n alignItems: 'center',\n justifyContent: 'flex-end',\n paddingBottom: 8,\n zIndex: 40,\n },\n headerRight: {\n flexDirection: 'row',\n alignItems: 'center',\n marginRight: 6,\n gap: 6,\n },\n historyHeaderButton: {\n marginHorizontal: 0,\n padding: 0,\n borderRadius: 22,\n },\n historyHeaderButtonPressed: {\n opacity: 0.72,\n },\n historyHeaderButtonInner: {\n width: 32,\n height: 32,\n borderRadius: 16,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: mobileTokens.color.primarySoft,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: mobileTokens.color.primaryBorder,\n shadowColor: '#312e81',\n shadowOpacity: 0.1,\n shadowRadius: 5,\n shadowOffset: { width: 0, height: 2 },\n elevation: 2,\n },\n historyHeaderButtonInnerDark: {\n backgroundColor: '#1e293b',\n borderColor: 'rgba(148, 163, 184, 0.35)',\n shadowColor: '#111827',\n },\n newChatButton: {\n padding: 0,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 22,\n },\n newChatButtonInner: {\n width: 32,\n height: 32,\n borderRadius: 16,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: mobileTokens.color.surface,\n borderWidth: 1,\n borderColor: mobileTokens.color.border,\n shadowColor: '#0f172a',\n shadowOpacity: 0.08,\n shadowRadius: 5,\n shadowOffset: { width: 0, height: 2 },\n elevation: 2,\n },\n newChatButtonInnerDark: {\n backgroundColor: '#0f172a',\n borderColor: '#334155',\n },\n backButton: {\n marginLeft: 6,\n width: 36,\n height: 36,\n borderRadius: 18,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: '#f3f4f6',\n },\n newChatButtonPressed: {\n opacity: 0.6,\n },\n emptyCenterTitleWrap: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'flex-start',\n paddingHorizontal: 24,\n paddingTop: 88,\n paddingBottom: 52,\n maxWidth: 520,\n alignSelf: 'center',\n },\n emptyEyebrow: {\n fontSize: 12,\n fontWeight: '600',\n letterSpacing: 0.4,\n textTransform: 'uppercase',\n marginBottom: 10,\n },\n emptyCenterTitle: {\n marginTop: 2,\n fontSize: 30,\n fontWeight: '700',\n textAlign: 'center',\n letterSpacing: -0.5,\n },\n emptySubtitle: {\n marginTop: 12,\n fontSize: 14,\n lineHeight: 22,\n textAlign: 'center',\n paddingHorizontal: 16,\n maxWidth: 360,\n },\n bottomComposerWrap: {\n position: 'absolute',\n width: '100%',\n left: 0,\n right: 0,\n bottom: 0,\n alignItems: 'center',\n justifyContent: 'flex-end',\n // borderTopWidth: 1,\n shadowColor: '#0f172a',\n shadowOpacity: 0.08,\n shadowRadius: 8,\n shadowOffset: { width: 0, height: -2 },\n backgroundColor: 'transparent',\n elevation: 6,\n },\n bottomComposerInner: {\n paddingHorizontal: 14,\n paddingTop: 10,\n paddingBottom: 4,\n },\n emptyModePillRow: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n marginBottom: 22,\n borderRadius: 16,\n padding: 6,\n borderWidth: 1,\n shadowColor: '#312e81',\n shadowOpacity: 0.08,\n shadowRadius: 8,\n shadowOffset: { width: 0, height: 3 },\n elevation: 3,\n },\n emptyModePill: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 4,\n paddingHorizontal: 12,\n paddingVertical: 7,\n borderRadius: 11,\n },\n emptyModePillActive: {\n shadowColor: '#312e81',\n shadowOpacity: 0.18,\n shadowRadius: 6,\n shadowOffset: { width: 0, height: 2 },\n elevation: 2,\n },\n emptyModePillLabel: {\n fontSize: 12,\n fontWeight: '600',\n },\n});\n\nconst HomeScreen: FC<HomeScreenProps> = (props) => <HomeScreenContent {...props} />;\n\nexport default HomeScreen;\n"],"names":["ChatContentSection","EmptyStateSection","HeaderBackButton","HeaderRightActions","_a","_b","showSub","hideSub","uuidv4","_c"],"mappings":"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"}
1
+ {"version":3,"file":"HomeScreen.js","sources":["../../../src/screens/Home/HomeScreen.tsx"],"sourcesContent":["import React, { FC, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n Keyboard,\n Platform,\n Pressable,\n StyleSheet,\n TouchableWithoutFeedback,\n View,\n useColorScheme,\n useWindowDimensions,\n} from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { Box, InputToolBar, Text, getDefaultLeftItems, getDefaultRightItems } from '@admin-layout/gluestack-ui-mobile';\nimport { SafeAreaView, useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { useNavigation, useRoute, CommonActions } from '@react-navigation/native';\nimport { v4 as uuidv4 } from 'uuid';\nimport { ContributionSchemaId } from 'common';\nimport { useGetContextDataQuery, useGetPageSettingsQuery } from 'common/graphql';\nimport { usePrerequisiteIds } from '../../hooks/usePrerequisiteIds';\nimport { useChatMutations } from '../../hooks/useChatApi';\nimport { AudioRecorderPanel } from '../../features/audio-input/AudioRecorderPanel';\nimport type { ModeSubmission, RoutingMode } from './types';\nimport { mobileTokens } from '../../theme/mobileTokens';\n\n/**\n * Build the channel `title` we persist on creation. This is the server-side mode\n * signal (web parity: `useYantraComposerChannelSubmit`): the backend inspects the\n * title prefix to route deep-search requests differently from plain chat. The\n * UI never displays this raw string — `buildSessionFromChannel` filters\n * `chat-channel-…` / `deep-search-…` titles out of the history label cascade\n * and derives the visible label from the user's first message instead.\n *\n * Previously we used the user's prompt directly as the title for friendlier\n * history rows, but that silently disabled the server's mode detection — every\n * \"deep-search\" submission landed as a plain chat. Restored to the web scheme.\n */\nfunction buildChannelTitle(mode: RoutingMode, channelId: string): string {\n return mode === 'deep-search' ? `deep-search-${channelId}` : `chat-channel-${channelId}`;\n}\n\nexport type { RoutingMode, ModeSubmission };\n\nexport interface HomeScreenProps {\n initialMode?: RoutingMode;\n onSubmit?: (submission: ModeSubmission) => void;\n onStop?: () => void;\n isLoading?: boolean;\n disabled?: boolean;\n}\n\nfunction organizationFromSettingsValue(settings: unknown): string | null {\n if (settings == null) return null;\n if (typeof settings === 'string') {\n try {\n const parsed = JSON.parse(settings) as { organization?: string };\n const o = parsed?.organization;\n return typeof o === 'string' && o.trim() ? o.trim() : null;\n } catch {\n return null;\n }\n }\n if (typeof settings === 'object' && settings !== null && 'organization' in settings) {\n const o = (settings as { organization?: unknown }).organization;\n return typeof o === 'string' && o.trim() ? o.trim() : null;\n }\n return null;\n}\n\nfunction projectFromSettingsValue(settings: unknown): string | null {\n if (settings == null) return null;\n if (typeof settings === 'string') {\n try {\n const parsed = JSON.parse(settings) as { project?: string };\n const p = parsed?.project;\n return typeof p === 'string' && p.trim() ? p.trim() : null;\n } catch {\n return null;\n }\n }\n if (typeof settings === 'object' && settings !== null && 'project' in settings) {\n const p = (settings as { project?: unknown }).project;\n return typeof p === 'string' && p.trim() ? p.trim() : null;\n }\n return null;\n}\n\ninterface EmptyStateSectionProps {\n isDark: boolean;\n secondaryTextColor: string;\n primaryTextColor: string;\n activeMode: RoutingMode;\n onModeSwitch: (mode: RoutingMode) => void;\n}\n\nconst EmptyStateSection = React.memo(function EmptyStateSection({\n isDark,\n secondaryTextColor,\n primaryTextColor,\n activeMode,\n onModeSwitch,\n}: EmptyStateSectionProps) {\n return (\n <Box flex={1} width=\"100%\">\n <View style={styles.emptyCenterTitleWrap}>\n <Text style={[styles.emptyEyebrow, { color: secondaryTextColor }]}>Choose your mode</Text>\n <View\n style={[\n styles.emptyModePillRow,\n {\n backgroundColor: isDark ? 'rgba(30, 41, 59, 0.9)' : '#eef2ff',\n borderColor: isDark ? 'rgba(148, 163, 184, 0.26)' : 'rgba(67, 56, 202, 0.15)',\n },\n ]}\n >\n <Pressable\n onPress={() => onModeSwitch('chat')}\n style={[\n styles.emptyModePill,\n activeMode === 'chat' && styles.emptyModePillActive,\n activeMode === 'chat' && { backgroundColor: isDark ? '#312e81' : '#4338ca' },\n ]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Switch to chat mode\"\n >\n <MaterialCommunityIcons\n name=\"magnify\"\n size={14}\n color={activeMode === 'chat' ? '#ffffff' : secondaryTextColor}\n />\n <Text\n style={[\n styles.emptyModePillLabel,\n { color: activeMode === 'chat' ? '#ffffff' : secondaryTextColor },\n ]}\n >\n Chat\n </Text>\n </Pressable>\n <Pressable\n onPress={() => onModeSwitch('deep-search')}\n style={[\n styles.emptyModePill,\n activeMode === 'deep-search' && styles.emptyModePillActive,\n activeMode === 'deep-search' && { backgroundColor: isDark ? '#312e81' : '#4338ca' },\n ]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Switch to deep-search mode\"\n >\n <MaterialCommunityIcons\n name=\"lightning-bolt-outline\"\n size={14}\n color={activeMode === 'deep-search' ? '#ffffff' : secondaryTextColor}\n />\n <Text\n style={[\n styles.emptyModePillLabel,\n { color: activeMode === 'deep-search' ? '#ffffff' : secondaryTextColor },\n ]}\n >\n Deep Search\n </Text>\n </Pressable>\n {/**\n * Build mode — third pill rendered as a peer of Chat and\n * Deep Search so the segmented control matches the web\n * composer's `search · zap · lightbulb` axis. Inert for\n * now: tapping logs to the console and intentionally does\n * NOT call `onModeSwitch`, so the indigo active fill never\n * lands on Build until the underlying workflow flow exists\n * (matches the same inert treatment the lightbulb gets in\n * the composer toolbar). When `'workflow'` joins\n * `RoutingMode`, swap the press handler to\n * `onModeSwitch('workflow')` and add the `activeMode`\n * styles in the same shape as the two above.\n */}\n <Pressable\n onPress={() => {\n // eslint-disable-next-line no-console\n console.log('build mode');\n }}\n style={styles.emptyModePill}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Build mode (preview)\"\n >\n <MaterialCommunityIcons name=\"lightbulb-outline\" size={14} color={secondaryTextColor} />\n <Text style={[styles.emptyModePillLabel, { color: secondaryTextColor }]}>Build</Text>\n </Pressable>\n </View>\n <Text style={[styles.emptyCenterTitle, { color: primaryTextColor }]}>How do you want to start?</Text>\n <Text style={[styles.emptySubtitle, { color: secondaryTextColor }]}>\n Use Chat for quick help, Deep Search for source-backed answers, or Build to assemble workflows.\n </Text>\n </View>\n </Box>\n );\n});\n\nfunction HomeScreenContent({\n initialMode = 'chat',\n onSubmit: onSubmitProp,\n isLoading: isLoadingProp = false,\n disabled = false,\n}: HomeScreenProps) {\n const { width: screenWidth } = useWindowDimensions();\n const colorScheme = useColorScheme();\n const isDark = colorScheme === 'dark';\n const navigation = useNavigation<any>();\n const route = useRoute<any>();\n const hasRehydratedOrgRef = useRef(false);\n\n const [value, setValue] = useState('');\n const [activeMode, setActiveMode] = useState<RoutingMode>(initialMode);\n /**\n * `showAudioRecorder` swaps the InputToolBar for the inline voice recorder\n * panel — same pattern as the web composer\n * (`YantraSearchComposer.tsx`'s `showAudioRecorder` branch).\n */\n const [showAudioRecorder, setShowAudioRecorder] = useState(false);\n const [voiceError, setVoiceError] = useState<string | null>(null);\n\n const { createChannel } = useChatMutations();\n const { orgName: resolvedOrgName, projectId } = usePrerequisiteIds();\n const { data: contextData } = useGetContextDataQuery();\n const cdecodeUri = contextData?.getContextData?.cdecodeUri;\n const { data: pageSettingsData } = useGetPageSettingsQuery({\n variables: {\n resourceUri: cdecodeUri as never,\n options: {\n schemaId: ContributionSchemaId.Configuration,\n configKey: 'account.default',\n includeMarketplace: true,\n },\n },\n skip: !cdecodeUri,\n fetchPolicy: 'cache-first',\n });\n const fallbackOrgNameFromSettings = useMemo(\n () => organizationFromSettingsValue(pageSettingsData?.pageSettings?.settings),\n [pageSettingsData],\n );\n const fallbackProjectIdFromSettings = useMemo(\n () => projectFromSettingsValue(pageSettingsData?.pageSettings?.settings),\n [pageSettingsData],\n );\n const routeOrgName = ((route?.params?.orgName as string | undefined) ?? '').trim() || null;\n const effectiveOrgName = resolvedOrgName || fallbackOrgNameFromSettings || routeOrgName || null;\n const effectiveProjectId = projectId || fallbackProjectIdFromSettings || null;\n\n const trimmedQuery = value.trim();\n const hasQuery = trimmedQuery.length > 0;\n const canSubmit = hasQuery && Boolean(routeOrgName || effectiveOrgName);\n const isLoading = isLoadingProp;\n const isResearchMode = activeMode === 'deep-search';\n const inputPlaceholder = !effectiveOrgName\n ? 'Initializing workspace...'\n : isResearchMode\n ? 'Research anything...'\n : 'Ask anything...';\n\n const insets = useSafeAreaInsets();\n const [keyboardHeight, setKeyboardHeight] = useState(0);\n\n useEffect(() => {\n if (Platform.OS === 'ios') {\n const frameSub = Keyboard.addListener('keyboardWillChangeFrame', (event) =>\n setKeyboardHeight(event.endCoordinates?.height ?? 0),\n );\n const showSub = Keyboard.addListener('keyboardWillShow', (event) =>\n setKeyboardHeight(event.endCoordinates?.height ?? 0),\n );\n const hideSub = Keyboard.addListener('keyboardWillHide', () => setKeyboardHeight(0));\n return () => {\n frameSub.remove();\n showSub.remove();\n hideSub.remove();\n };\n }\n const showSub = Keyboard.addListener('keyboardDidShow', (event) =>\n setKeyboardHeight(event.endCoordinates?.height ?? 0),\n );\n const hideSub = Keyboard.addListener('keyboardDidHide', () => setKeyboardHeight(0));\n return () => {\n showSub.remove();\n hideSub.remove();\n };\n }, []);\n\n const handleModeSwitch = useCallback((mode: RoutingMode) => {\n setActiveMode(mode);\n }, []);\n\n /**\n * Mirrors the web `useYantraComposerChannelSubmit`: on submit we generate a client-side\n * channel id, fire-and-forget the createChannel mutation, then navigate immediately to\n * the Chat screen with the user's prompt. The Chat screen mounts, awaits the in-flight\n * creation just before saveMessages, and starts streaming the assistant response.\n */\n const navigateToChat = useCallback(\n (channelId: string, query: string, mode: RoutingMode, attachments?: ModeSubmission['attachments']) => {\n const params: Record<string, unknown> = {\n channelId,\n orgName: effectiveOrgName ?? routeOrgName ?? undefined,\n initialQuery: query,\n initialMode: mode,\n };\n if (attachments && attachments.length > 0) {\n params.initialAttachments = attachments;\n }\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.Chat',\n params,\n }),\n );\n },\n [navigation, effectiveOrgName, routeOrgName],\n );\n\n const handleSubmit = useCallback(\n async (attachments?: ModeSubmission['attachments']) => {\n if (!canSubmit || isLoading || disabled) return;\n\n const submission: ModeSubmission = {\n mode: activeMode,\n query: trimmedQuery,\n attachments,\n };\n if (onSubmitProp) {\n onSubmitProp(submission);\n }\n\n if (!effectiveOrgName || !effectiveProjectId) {\n console.warn('[HomeScreen] orgName/projectId not ready — skipping submit.');\n return;\n }\n\n const requestedChannelId = uuidv4();\n /**\n * Title is the server's mode signal (`deep-search-…` vs `chat-channel-…`).\n * It's NOT the history label — the history list derives that from the\n * first user message via `buildSessionFromChannel`.\n */\n const title = buildChannelTitle(activeMode, requestedChannelId);\n\n const queryToForward = trimmedQuery;\n const attachmentsToForward = attachments;\n setValue('');\n\n void createChannel({\n id: requestedChannelId,\n title,\n isShared: false,\n sharedSlug: null,\n isArchived: false,\n isPinned: false,\n model: null,\n systemPrompt: null,\n orgName: effectiveOrgName,\n projectId: effectiveProjectId,\n } as any).catch((err) => {\n console.error('[HomeScreen] createChannel failed:', err);\n });\n\n navigateToChat(requestedChannelId, queryToForward, activeMode, attachmentsToForward);\n },\n [\n canSubmit,\n isLoading,\n disabled,\n activeMode,\n trimmedQuery,\n onSubmitProp,\n effectiveOrgName,\n effectiveProjectId,\n createChannel,\n navigateToChat,\n ],\n );\n\n const surfaceColor = isDark ? '#0f172a' : mobileTokens.color.surface;\n const primaryTextColor = isDark ? '#e5e7eb' : mobileTokens.color.text;\n const secondaryTextColor = isDark ? '#94a3b8' : mobileTokens.color.textMuted;\n const contentMaxWidth = Math.min(720, Math.max(360, screenWidth - 24));\n\n useEffect(() => {\n const currentOrgName = (route?.params?.orgName as string | undefined)?.trim() || '';\n if (!effectiveOrgName || currentOrgName === effectiveOrgName) return;\n navigation.setParams?.({ orgName: effectiveOrgName });\n }, [navigation, route?.params?.orgName, effectiveOrgName]);\n\n useEffect(() => {\n const currentOrgName = (route?.params?.orgName as string | undefined)?.trim() || '';\n if (hasRehydratedOrgRef.current || currentOrgName || !effectiveOrgName) return;\n\n hasRehydratedOrgRef.current = true;\n navigation.getParent()?.dispatch(\n CommonActions.navigate('MainStack', {\n screen: 'MainStack.Layout.Home',\n params: { orgName: effectiveOrgName },\n merge: true,\n key: Date.now().toString(),\n }),\n );\n }, [navigation, route?.params?.orgName, effectiveOrgName]);\n\n const handleValueChange = useCallback((e: any) => {\n setValue(e.nativeEvent.text);\n }, []);\n\n /**\n * Mic affordance — web parity (`handleMicClick` in `YantraSearchComposer.tsx`).\n *\n * Only opens the recorder when the input is empty: if the user already has\n * a draft, the same button must act as Send (the `MicSendButton` in\n * `InputToolBar.tsx` already swaps its glyph from mic→send based on\n * `hasContent`, so this branch only fires when the icon is visibly a mic).\n *\n * We also drop the keyboard before showing the panel so the recorder doesn't\n * mount underneath the IME on the very first frame.\n */\n const handleMicPress = useCallback(() => {\n if (hasQuery) return;\n setVoiceError(null);\n Keyboard.dismiss();\n setShowAudioRecorder(true);\n }, [hasQuery]);\n\n const handleTranscriptionComplete = useCallback((text: string) => {\n const cleaned = (text ?? '').trim();\n setShowAudioRecorder(false);\n if (!cleaned) return;\n /*\n * Append on top of any existing draft (web `setQuery((prev) => …)`).\n * Single-space separator keeps the transcript readable when the user\n * dictates multiple times before sending.\n */\n setValue((prev) => (prev.trim().length > 0 ? `${prev.trim()} ${cleaned}` : cleaned));\n }, []);\n\n const handleRecorderCancel = useCallback(() => {\n setShowAudioRecorder(false);\n }, []);\n\n const handleRecorderError = useCallback((error: string) => {\n /*\n * Surface the failure to the user but don't trap them in the recorder —\n * `AudioRecorderPanel` already calls `onCancel` after an error, so we\n * just record the message here for the (lightweight) banner below.\n */\n setVoiceError(error);\n }, []);\n\n const leftItems = useMemo(\n () =>\n getDefaultLeftItems({\n search: {\n active: activeMode === 'chat',\n onClick: () => handleModeSwitch('chat'),\n },\n zap: {\n active: activeMode === 'deep-search',\n onClick: () => handleModeSwitch('deep-search'),\n },\n lightbulb: {\n onClick: () => {\n // eslint-disable-next-line no-console\n console.log('build mode');\n },\n },\n }),\n [activeMode, handleModeSwitch],\n );\n\n const rightItems = useMemo(\n () =>\n getDefaultRightItems({\n tag: { enabled: false },\n chip: { enabled: false },\n camera: { enabled: false },\n image: { enabled: false },\n attach: { enabled: false },\n }),\n [],\n );\n\n const inputConfig = useMemo(\n () => ({\n value,\n onChange: handleValueChange,\n placeholder: inputPlaceholder,\n disabled: isLoading || disabled,\n }),\n [value, handleValueChange, inputPlaceholder, isLoading, disabled],\n );\n\n const micSendButton = useMemo(\n () => ({\n hasContent: canSubmit,\n onSend: () => handleSubmit(),\n onMic: handleMicPress,\n disabled: isLoading || disabled,\n isLoading,\n }),\n [canSubmit, handleSubmit, handleMicPress, isLoading, disabled],\n );\n\n return (\n <SafeAreaView edges={['left', 'right', 'bottom']} style={{ flex: 1, backgroundColor: surfaceColor }}>\n <TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>\n <Box flex={1} width=\"100%\" position=\"relative\">\n <EmptyStateSection\n isDark={isDark}\n secondaryTextColor={secondaryTextColor}\n primaryTextColor={primaryTextColor}\n activeMode={activeMode}\n onModeSwitch={handleModeSwitch}\n />\n <View\n style={[\n styles.bottomComposerWrap,\n {\n bottom: Math.max(0, keyboardHeight - insets.bottom),\n paddingBottom: Math.max(insets.bottom - 6, 2),\n },\n ]}\n >\n <View style={[styles.bottomComposerInner, { width: contentMaxWidth }]}>\n {voiceError ? (\n <View\n style={[\n styles.voiceErrorBanner,\n {\n backgroundColor: isDark ? '#2b1a1d' : '#fef2f2',\n borderColor: isDark ? '#7f1d1d' : '#fecaca',\n },\n ]}\n >\n <Text style={[styles.voiceErrorText, { color: isDark ? '#fecaca' : '#991b1b' }]}>\n {voiceError}\n </Text>\n </View>\n ) : null}\n {showAudioRecorder ? (\n <AudioRecorderPanel\n isDark={isDark}\n onTranscriptionComplete={handleTranscriptionComplete}\n onCancel={handleRecorderCancel}\n onError={handleRecorderError}\n />\n ) : (\n <InputToolBar\n inputConfig={inputConfig}\n leftItems={leftItems}\n rightItems={rightItems}\n templateButton={null}\n templateModalConfig={null}\n micSendButton={micSendButton}\n />\n )}\n </View>\n </View>\n </Box>\n </TouchableWithoutFeedback>\n </SafeAreaView>\n );\n}\n\nconst styles = StyleSheet.create({\n emptyCenterTitleWrap: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'flex-start',\n paddingHorizontal: 24,\n paddingTop: 88,\n paddingBottom: 52,\n maxWidth: 520,\n alignSelf: 'center',\n },\n emptyEyebrow: {\n fontSize: 12,\n fontWeight: '600',\n letterSpacing: 0.4,\n textTransform: 'uppercase',\n marginBottom: 10,\n },\n emptyCenterTitle: {\n marginTop: 2,\n fontSize: 30,\n fontWeight: '700',\n textAlign: 'center',\n letterSpacing: -0.5,\n },\n emptySubtitle: {\n marginTop: 12,\n fontSize: 14,\n lineHeight: 22,\n textAlign: 'center',\n paddingHorizontal: 16,\n maxWidth: 360,\n },\n bottomComposerWrap: {\n position: 'absolute',\n width: '100%',\n left: 0,\n right: 0,\n bottom: 0,\n alignItems: 'center',\n justifyContent: 'flex-end',\n shadowColor: '#0f172a',\n shadowOpacity: 0.08,\n shadowRadius: 8,\n shadowOffset: { width: 0, height: -2 },\n backgroundColor: 'transparent',\n elevation: 6,\n },\n bottomComposerInner: {\n paddingHorizontal: 14,\n paddingTop: 10,\n paddingBottom: 4,\n },\n voiceErrorBanner: {\n marginBottom: 8,\n paddingHorizontal: 12,\n paddingVertical: 8,\n borderRadius: 10,\n borderWidth: 1,\n },\n voiceErrorText: {\n fontSize: 12,\n fontWeight: '500',\n },\n emptyModePillRow: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n marginBottom: 22,\n borderRadius: 16,\n padding: 6,\n borderWidth: 1,\n shadowColor: '#312e81',\n shadowOpacity: 0.08,\n shadowRadius: 8,\n shadowOffset: { width: 0, height: 3 },\n elevation: 3,\n },\n emptyModePill: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 4,\n paddingHorizontal: 12,\n paddingVertical: 7,\n borderRadius: 11,\n },\n emptyModePillActive: {\n shadowColor: '#312e81',\n shadowOpacity: 0.18,\n shadowRadius: 6,\n shadowOffset: { width: 0, height: 2 },\n elevation: 2,\n },\n emptyModePillLabel: {\n fontSize: 12,\n fontWeight: '600',\n },\n});\n\nconst HomeScreen: FC<HomeScreenProps> = (props) => <HomeScreenContent {...props} />;\n\nexport default HomeScreen;\n"],"names":["EmptyStateSection","_a","_b","showSub","hideSub","uuidv4","_c"],"mappings":"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"}