@adminide-stack/yantra-mobile 12.0.69-alpha.13 → 12.0.69-alpha.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/GatewayConnector/GatewayConnector.js +2 -2
- package/lib/components/GatewayConnector/GatewayConnector.js.map +1 -1
- package/lib/components/KeyboardComposerDock.js +8 -1
- package/lib/components/KeyboardComposerDock.js.map +1 -1
- package/lib/components/NavigationHeader/NavigationHeader.js +2 -2
- package/lib/components/NavigationHeader/NavigationHeader.js.map +1 -1
- package/lib/features/apps/AppsCatalog.js +2 -2
- package/lib/features/apps/AppsCatalog.js.map +1 -1
- package/lib/features/audio-input/MicErrorBoundary.js +2 -2
- package/lib/features/audio-input/MicErrorBoundary.js.map +1 -1
- package/lib/features/canvas/AudioEditorExperience.js +308 -0
- package/lib/features/canvas/AudioEditorExperience.js.map +1 -0
- package/lib/features/canvas/CanvasAgentChatPane.js +310 -0
- package/lib/features/canvas/CanvasAgentChatPane.js.map +1 -0
- package/lib/features/canvas/CanvasBoardsGrid.js +414 -0
- package/lib/features/canvas/CanvasBoardsGrid.js.map +1 -0
- package/lib/features/canvas/CanvasChatResultCard.js +113 -0
- package/lib/features/canvas/CanvasChatResultCard.js.map +1 -0
- package/lib/features/canvas/CanvasEditToolsPanel.js +179 -0
- package/lib/features/canvas/CanvasEditToolsPanel.js.map +1 -0
- package/lib/features/canvas/CanvasExperience.js +859 -0
- package/lib/features/canvas/CanvasExperience.js.map +1 -0
- package/lib/features/canvas/CanvasGeneratePanel.js +514 -0
- package/lib/features/canvas/CanvasGeneratePanel.js.map +1 -0
- package/lib/features/canvas/CanvasLibrarySheet.js +355 -0
- package/lib/features/canvas/CanvasLibrarySheet.js.map +1 -0
- package/lib/features/canvas/CanvasLooksPanel.js +184 -0
- package/lib/features/canvas/CanvasLooksPanel.js.map +1 -0
- package/lib/features/canvas/CanvasTasksPanel.js +138 -0
- package/lib/features/canvas/CanvasTasksPanel.js.map +1 -0
- package/lib/features/canvas/CanvasTemplatesPanel.js +226 -0
- package/lib/features/canvas/CanvasTemplatesPanel.js.map +1 -0
- package/lib/features/canvas/CanvasToolDock.js +423 -0
- package/lib/features/canvas/CanvasToolDock.js.map +1 -0
- package/lib/features/canvas/FrameExtractorExperience.js +242 -0
- package/lib/features/canvas/FrameExtractorExperience.js.map +1 -0
- package/lib/features/canvas/ImageEditorExperience.js +491 -0
- package/lib/features/canvas/ImageEditorExperience.js.map +1 -0
- package/lib/features/canvas/InfluencerStudioExperience.js +288 -0
- package/lib/features/canvas/InfluencerStudioExperience.js.map +1 -0
- package/lib/features/canvas/MoodboardExperience.js +205 -0
- package/lib/features/canvas/MoodboardExperience.js.map +1 -0
- package/lib/features/canvas/NativeCanvasViewer.js +929 -0
- package/lib/features/canvas/NativeCanvasViewer.js.map +1 -0
- package/lib/features/canvas/PromoContextFields.js +150 -0
- package/lib/features/canvas/PromoContextFields.js.map +1 -0
- package/lib/features/canvas/SetStudioExperience.js +323 -0
- package/lib/features/canvas/SetStudioExperience.js.map +1 -0
- package/lib/features/canvas/VideoClipsExperience.js +175 -0
- package/lib/features/canvas/VideoClipsExperience.js.map +1 -0
- package/lib/features/canvas/VideoEditExperience.js +824 -0
- package/lib/features/canvas/VideoEditExperience.js.map +1 -0
- package/lib/features/canvas/VideoEditorExperience.js +3050 -0
- package/lib/features/canvas/VideoEditorExperience.js.map +1 -0
- package/lib/features/canvas/VideoGeneratorExperience.js +415 -0
- package/lib/features/canvas/VideoGeneratorExperience.js.map +1 -0
- package/lib/features/canvas/aiEdit.js +53 -0
- package/lib/features/canvas/aiEdit.js.map +1 -0
- package/lib/features/canvas/canvasAgentChat.js +76 -0
- package/lib/features/canvas/canvasAgentChat.js.map +1 -0
- package/lib/features/canvas/canvasBoardsCatalog.js +59 -0
- package/lib/features/canvas/canvasBoardsCatalog.js.map +1 -0
- package/lib/features/canvas/canvasBoardsSnapshot.js +14 -1
- package/lib/features/canvas/canvasBoardsSnapshot.js.map +1 -1
- package/lib/features/canvas/canvasChatDisplay.js +38 -0
- package/lib/features/canvas/canvasChatDisplay.js.map +1 -0
- package/lib/features/canvas/canvasChatTemplates.js +219 -0
- package/lib/features/canvas/canvasChatTemplates.js.map +1 -0
- package/lib/features/canvas/canvasCore.js +138 -1
- package/lib/features/canvas/canvasCore.js.map +1 -1
- package/lib/features/canvas/canvasEditOps.js +224 -0
- package/lib/features/canvas/canvasEditOps.js.map +1 -0
- package/lib/features/canvas/canvasTasks.js +187 -0
- package/lib/features/canvas/canvasTasks.js.map +1 -0
- package/lib/features/canvas/designPromptTemplates.js +3084 -0
- package/lib/features/canvas/designPromptTemplates.js.map +1 -0
- package/lib/features/canvas/editTools.js +54 -0
- package/lib/features/canvas/editTools.js.map +1 -0
- package/lib/features/canvas/extendVideo.js +5 -0
- package/lib/features/canvas/extendVideo.js.map +1 -0
- package/lib/features/canvas/frameExtract.js +33 -0
- package/lib/features/canvas/frameExtract.js.map +1 -0
- package/lib/features/canvas/generationModels.js +201 -0
- package/lib/features/canvas/generationModels.js.map +1 -0
- package/lib/features/canvas/influencer/influencerPipeline.js +170 -0
- package/lib/features/canvas/influencer/influencerPipeline.js.map +1 -0
- package/lib/features/canvas/influencer/productReel.js +72 -0
- package/lib/features/canvas/influencer/productReel.js.map +1 -0
- package/lib/features/canvas/influencer/reelPlan.js +159 -0
- package/lib/features/canvas/influencer/reelPlan.js.map +1 -0
- package/lib/features/canvas/moodboardCore.js +13 -0
- package/lib/features/canvas/moodboardCore.js.map +1 -0
- package/lib/features/canvas/promoProjectImport.js +99 -0
- package/lib/features/canvas/promoProjectImport.js.map +1 -0
- package/lib/features/canvas/promoVideo.js +312 -0
- package/lib/features/canvas/promoVideo.js.map +1 -0
- package/lib/features/canvas/recorder/CameraRecorderExperience.js +109 -0
- package/lib/features/canvas/recorder/CameraRecorderExperience.js.map +1 -0
- package/lib/features/canvas/sessionIdentity.js +28 -1
- package/lib/features/canvas/sessionIdentity.js.map +1 -1
- package/lib/features/canvas/set/SetViewportWebView.js +133 -0
- package/lib/features/canvas/set/SetViewportWebView.js.map +1 -0
- package/lib/features/canvas/set/cameraPath.js +194 -0
- package/lib/features/canvas/set/cameraPath.js.map +1 -0
- package/lib/features/canvas/set/setProject.js +24 -0
- package/lib/features/canvas/set/setProject.js.map +1 -0
- package/lib/features/canvas/storageLibrary.js +184 -0
- package/lib/features/canvas/storageLibrary.js.map +1 -0
- package/lib/features/canvas/studioCatalog.js +129 -0
- package/lib/features/canvas/studioCatalog.js.map +1 -0
- package/lib/features/canvas/studioLooks.js +189 -0
- package/lib/features/canvas/studioLooks.js.map +1 -0
- package/lib/features/canvas/surfaceIndex.js +63 -1
- package/lib/features/canvas/surfaceIndex.js.map +1 -1
- package/lib/features/canvas/templateImport/invideoNative.js +221 -0
- package/lib/features/canvas/templateImport/invideoNative.js.map +1 -0
- package/lib/features/canvas/templateImport/loadTemplate.js +43 -0
- package/lib/features/canvas/templateImport/loadTemplate.js.map +1 -0
- package/lib/features/canvas/templateImport/renderConfig.js +93 -0
- package/lib/features/canvas/templateImport/renderConfig.js.map +1 -0
- package/lib/features/canvas/useStudioCatalogTemplates.js +134 -0
- package/lib/features/canvas/useStudioCatalogTemplates.js.map +1 -0
- package/lib/features/canvas/video3d.js +109 -0
- package/lib/features/canvas/video3d.js.map +1 -0
- package/lib/features/canvas/videoClips.js +42 -0
- package/lib/features/canvas/videoClips.js.map +1 -0
- package/lib/features/canvas/videoEditor/agent/AgentCutPane.js +120 -0
- package/lib/features/canvas/videoEditor/agent/AgentCutPane.js.map +1 -0
- package/lib/features/canvas/videoEditor/agent/agentLoop.js +69 -0
- package/lib/features/canvas/videoEditor/agent/agentLoop.js.map +1 -0
- package/lib/features/canvas/videoEditor/agent/brainClient.js +45 -0
- package/lib/features/canvas/videoEditor/agent/brainClient.js.map +1 -0
- package/lib/features/canvas/videoEditor/agent/cutTools.js +129 -0
- package/lib/features/canvas/videoEditor/agent/cutTools.js.map +1 -0
- package/lib/features/canvas/videoEditor/editorModel.js +346 -0
- package/lib/features/canvas/videoEditor/editorModel.js.map +1 -0
- package/lib/features/canvas/videoEditor/exportRenderer.js +214 -0
- package/lib/features/canvas/videoEditor/exportRenderer.js.map +1 -0
- package/lib/features/canvas/videoEditor/filters.js +41 -0
- package/lib/features/canvas/videoEditor/filters.js.map +1 -0
- package/lib/features/canvas/videoEditor/mediaActions.js +57 -0
- package/lib/features/canvas/videoEditor/mediaActions.js.map +1 -0
- package/lib/features/canvas/videoEditor/remoteMediaClient.js +129 -0
- package/lib/features/canvas/videoEditor/remoteMediaClient.js.map +1 -0
- package/lib/features/canvas/videoEditor/solidColorPng.js +115 -0
- package/lib/features/canvas/videoEditor/solidColorPng.js.map +1 -0
- package/lib/features/canvas/videoEditor/videoEditOps.js +191 -0
- package/lib/features/canvas/videoEditor/videoEditOps.js.map +1 -0
- package/lib/features/canvas/videoEditor/videoProjectsStore.js +82 -0
- package/lib/features/canvas/videoEditor/videoProjectsStore.js.map +1 -0
- package/lib/features/canvas/videoRenderer.js +8 -0
- package/lib/features/canvas/videoRenderer.js.map +1 -0
- package/lib/features/canvas/withRemoteSafeArea.js +2 -2
- package/lib/features/canvas/withRemoteSafeArea.js.map +1 -1
- package/lib/features/characters/characterStudioProps.js +14 -0
- package/lib/features/characters/characterStudioProps.js.map +1 -0
- package/lib/features/design/DesignEditorExperience.js +643 -0
- package/lib/features/design/DesignEditorExperience.js.map +1 -0
- package/lib/features/design/DesignExperience.js +444 -0
- package/lib/features/design/DesignExperience.js.map +1 -0
- package/lib/features/design/designCore.js +298 -0
- package/lib/features/design/designCore.js.map +1 -0
- package/lib/features/design/designIndex.js +150 -0
- package/lib/features/design/designIndex.js.map +1 -0
- package/lib/features/design/exportDesign.js +133 -0
- package/lib/features/design/exportDesign.js.map +1 -0
- package/lib/features/job-search/ApplicationsPanel.js +907 -0
- package/lib/features/job-search/ApplicationsPanel.js.map +1 -0
- package/lib/features/job-search/ContactsPanel.js +627 -0
- package/lib/features/job-search/ContactsPanel.js.map +1 -0
- package/lib/features/job-search/InsightsPanel.js +299 -0
- package/lib/features/job-search/InsightsPanel.js.map +1 -0
- package/lib/features/job-search/InterviewPanel.js +637 -0
- package/lib/features/job-search/InterviewPanel.js.map +1 -0
- package/lib/features/job-search/JdPastePrompt.js +130 -0
- package/lib/features/job-search/JdPastePrompt.js.map +1 -0
- package/lib/features/job-search/JobCard.js +199 -0
- package/lib/features/job-search/JobCard.js.map +1 -0
- package/lib/features/job-search/JobDetailSheet.js +255 -0
- package/lib/features/job-search/JobDetailSheet.js.map +1 -0
- package/lib/features/job-search/JobSearchAgentChatPane.js +377 -0
- package/lib/features/job-search/JobSearchAgentChatPane.js.map +1 -0
- package/lib/features/job-search/JobSearchExperience.js +1324 -0
- package/lib/features/job-search/JobSearchExperience.js.map +1 -0
- package/lib/features/job-search/JobSearchLocationField.js +231 -0
- package/lib/features/job-search/JobSearchLocationField.js.map +1 -0
- package/lib/features/job-search/ProfilePanel.js +679 -0
- package/lib/features/job-search/ProfilePanel.js.map +1 -0
- package/lib/features/job-search/RepliesPanel.js +344 -0
- package/lib/features/job-search/RepliesPanel.js.map +1 -0
- package/lib/features/job-search/SavedPanel.js +297 -0
- package/lib/features/job-search/SavedPanel.js.map +1 -0
- package/lib/features/job-search/chat/widgetContent.js +29 -0
- package/lib/features/job-search/chat/widgetContent.js.map +1 -0
- package/lib/features/job-search/cvText.js +91 -0
- package/lib/features/job-search/cvText.js.map +1 -0
- package/lib/features/job-search/jobAgentSwipe.js +7 -0
- package/lib/features/job-search/jobAgentSwipe.js.map +1 -0
- package/lib/features/job-search/jobSearchClient.js +184 -0
- package/lib/features/job-search/jobSearchClient.js.map +1 -0
- package/lib/features/job-search/jobSearchExec.js +14 -0
- package/lib/features/job-search/jobSearchExec.js.map +1 -0
- package/lib/features/job-search/jobSearchRuntime.js +50 -0
- package/lib/features/job-search/jobSearchRuntime.js.map +1 -0
- package/lib/features/job-search/jobSearchTheme.js +44 -0
- package/lib/features/job-search/jobSearchTheme.js.map +1 -0
- package/lib/features/job-search/savedJobs.js +85 -0
- package/lib/features/job-search/savedJobs.js.map +1 -0
- package/lib/features/job-search/searchHistory.js +117 -0
- package/lib/features/job-search/searchHistory.js.map +1 -0
- package/lib/features/job-search/types.js +36 -0
- package/lib/features/job-search/types.js.map +1 -0
- package/lib/features/job-search/useJobSearchSession.js +558 -0
- package/lib/features/job-search/useJobSearchSession.js.map +1 -0
- package/lib/features/messaging/ChatComponents.js +529 -0
- package/lib/features/messaging/ChatComponents.js.map +1 -0
- package/lib/features/messaging/ChatInviteDeepLink.js +116 -0
- package/lib/features/messaging/ChatInviteDeepLink.js.map +1 -0
- package/lib/features/messaging/ContactsScreen.js +230 -0
- package/lib/features/messaging/ContactsScreen.js.map +1 -0
- package/lib/features/messaging/ConversationListScreen.js +147 -0
- package/lib/features/messaging/ConversationListScreen.js.map +1 -0
- package/lib/features/messaging/MessageActions.js +283 -0
- package/lib/features/messaging/MessageActions.js.map +1 -0
- package/lib/features/messaging/NativeChatExperience.js +186 -0
- package/lib/features/messaging/NativeChatExperience.js.map +1 -0
- package/lib/features/messaging/RegistrationScreen.js +7 -7
- package/lib/features/messaging/RegistrationScreen.js.map +1 -1
- package/lib/features/messaging/ThreadScreen.js +215 -0
- package/lib/features/messaging/ThreadScreen.js.map +1 -0
- package/lib/features/messaging/chatInviteLink.js +52 -0
- package/lib/features/messaging/chatInviteLink.js.map +1 -0
- package/lib/features/messaging/chatModel.js +278 -0
- package/lib/features/messaging/chatModel.js.map +1 -0
- package/lib/features/messaging/chatOperations.js +116 -1
- package/lib/features/messaging/chatOperations.js.map +1 -1
- package/lib/features/messaging/emojiCatalog.js +36 -0
- package/lib/features/messaging/emojiCatalog.js.map +1 -0
- package/lib/features/messaging/nativeChatChannelQuery.js +27 -0
- package/lib/features/messaging/nativeChatChannelQuery.js.map +1 -0
- package/lib/features/messaging/phoneNumbers.js +52 -1
- package/lib/features/messaging/phoneNumbers.js.map +1 -1
- package/lib/features/messaging/sha256.js +68 -0
- package/lib/features/messaging/sha256.js.map +1 -0
- package/lib/features/messaging/useChatData.js +421 -0
- package/lib/features/messaging/useChatData.js.map +1 -0
- package/lib/features/messaging/useContactMatches.js +231 -0
- package/lib/features/messaging/useContactMatches.js.map +1 -0
- package/lib/features/messaging/usePhoneVerification.js +6 -5
- package/lib/features/messaging/usePhoneVerification.js.map +1 -1
- package/lib/features/messaging/yantraChatOrg.js +8 -3
- package/lib/features/messaging/yantraChatOrg.js.map +1 -1
- package/lib/features/resume/AnnotateModal.js +100 -0
- package/lib/features/resume/AnnotateModal.js.map +1 -0
- package/lib/features/resume/AnnotationBar.js +69 -0
- package/lib/features/resume/AnnotationBar.js.map +1 -0
- package/lib/features/resume/ExportSheet.js +105 -0
- package/lib/features/resume/ExportSheet.js.map +1 -0
- package/lib/features/resume/ResumeAgentChatPane.js +95 -0
- package/lib/features/resume/ResumeAgentChatPane.js.map +1 -0
- package/lib/features/resume/ResumeEditor.js +676 -0
- package/lib/features/resume/ResumeEditor.js.map +1 -0
- package/lib/features/resume/ResumeExperience.js +235 -0
- package/lib/features/resume/ResumeExperience.js.map +1 -0
- package/lib/features/resume/ResumeListPanel.js +262 -0
- package/lib/features/resume/ResumeListPanel.js.map +1 -0
- package/lib/features/resume/ResumeToolbar.js +236 -0
- package/lib/features/resume/ResumeToolbar.js.map +1 -0
- package/lib/features/resume/annotations.js +17 -0
- package/lib/features/resume/annotations.js.map +1 -0
- package/lib/features/resume/documentCss.js +52 -0
- package/lib/features/resume/documentCss.js.map +1 -0
- package/lib/features/resume/draft.js +89 -0
- package/lib/features/resume/draft.js.map +1 -0
- package/lib/features/resume/exportResume.js +43 -0
- package/lib/features/resume/exportResume.js.map +1 -0
- package/lib/features/resume/pickResumePhoto.js +22 -0
- package/lib/features/resume/pickResumePhoto.js.map +1 -0
- package/lib/features/resume/renderResume.js +121 -0
- package/lib/features/resume/renderResume.js.map +1 -0
- package/lib/features/resume/resumeClient.js +69 -0
- package/lib/features/resume/resumeClient.js.map +1 -0
- package/lib/features/resume/resumeExec.js +14 -0
- package/lib/features/resume/resumeExec.js.map +1 -0
- package/lib/features/resume/resumeIndex.js +244 -0
- package/lib/features/resume/resumeIndex.js.map +1 -0
- package/lib/features/resume/resumeRuntime.js +50 -0
- package/lib/features/resume/resumeRuntime.js.map +1 -0
- package/lib/features/resume/resumeTheme.js +34 -0
- package/lib/features/resume/resumeTheme.js.map +1 -0
- package/lib/features/resume/resumeToolbox.js +49 -0
- package/lib/features/resume/resumeToolbox.js.map +1 -0
- package/lib/features/resume/templates.js +90 -0
- package/lib/features/resume/templates.js.map +1 -0
- package/lib/features/resume/types.js +10 -0
- package/lib/features/resume/types.js.map +1 -0
- package/lib/features/resume/useResumeSession.js +183 -0
- package/lib/features/resume/useResumeSession.js.map +1 -0
- package/lib/features/shopping/DealsPanel.js +254 -0
- package/lib/features/shopping/DealsPanel.js.map +1 -0
- package/lib/features/shopping/HistoryPanel.js +147 -0
- package/lib/features/shopping/HistoryPanel.js.map +1 -0
- package/lib/features/shopping/OrdersPanel.js +157 -0
- package/lib/features/shopping/OrdersPanel.js.map +1 -0
- package/lib/features/shopping/ProductCard.js +326 -0
- package/lib/features/shopping/ProductCard.js.map +1 -0
- package/lib/features/shopping/ProductDetailSheet.js +313 -0
- package/lib/features/shopping/ProductDetailSheet.js.map +1 -0
- package/lib/features/shopping/ProductFilterBar.js +153 -0
- package/lib/features/shopping/ProductFilterBar.js.map +1 -0
- package/lib/features/shopping/ProductPhoto.js +27 -0
- package/lib/features/shopping/ProductPhoto.js.map +1 -0
- package/lib/features/shopping/SavedPanel.js +139 -0
- package/lib/features/shopping/SavedPanel.js.map +1 -0
- package/lib/features/shopping/ShoppingAgentChatPane.js +436 -0
- package/lib/features/shopping/ShoppingAgentChatPane.js.map +1 -0
- package/lib/features/shopping/ShoppingExperience.js +888 -0
- package/lib/features/shopping/ShoppingExperience.js.map +1 -0
- package/lib/features/shopping/TrendingSections.js +199 -0
- package/lib/features/shopping/TrendingSections.js.map +1 -0
- package/lib/features/shopping/WatchlistPanel.js +148 -0
- package/lib/features/shopping/WatchlistPanel.js.map +1 -0
- package/lib/features/shopping/catalog.js +238 -0
- package/lib/features/shopping/catalog.js.map +1 -0
- package/lib/features/shopping/chat/ShoppingChatResultCard.js +175 -0
- package/lib/features/shopping/chat/ShoppingChatResultCard.js.map +1 -0
- package/lib/features/shopping/chat/streamAssistantReply.js +34 -0
- package/lib/features/shopping/chat/streamAssistantReply.js.map +1 -0
- package/lib/features/shopping/chat/widgetContent.js +233 -0
- package/lib/features/shopping/chat/widgetContent.js.map +1 -0
- package/lib/features/shopping/hooks/useTrendingProducts.js +162 -0
- package/lib/features/shopping/hooks/useTrendingProducts.js.map +1 -0
- package/lib/features/shopping/productImage.js +42 -0
- package/lib/features/shopping/productImage.js.map +1 -0
- package/lib/features/shopping/savedProducts.js +84 -0
- package/lib/features/shopping/savedProducts.js.map +1 -0
- package/lib/features/shopping/services/catalogActions.js +166 -0
- package/lib/features/shopping/services/catalogActions.js.map +1 -0
- package/lib/features/shopping/services/parsePriceCheckIntent.js +58 -0
- package/lib/features/shopping/services/parsePriceCheckIntent.js.map +1 -0
- package/lib/features/shopping/services/parseShoppingIntent.js +67 -0
- package/lib/features/shopping/services/parseShoppingIntent.js.map +1 -0
- package/lib/features/shopping/services/productAvailability.js +25 -0
- package/lib/features/shopping/services/productAvailability.js.map +1 -0
- package/lib/features/shopping/services/productFilters.js +72 -0
- package/lib/features/shopping/services/productFilters.js.map +1 -0
- package/lib/features/shopping/services/retailerUrl.js +75 -0
- package/lib/features/shopping/services/retailerUrl.js.map +1 -0
- package/lib/features/shopping/services/shoppingChatReply.js +46 -0
- package/lib/features/shopping/services/shoppingChatReply.js.map +1 -0
- package/lib/features/shopping/services/shoppingProductSearch.js +336 -0
- package/lib/features/shopping/services/shoppingProductSearch.js.map +1 -0
- package/lib/features/shopping/services/shoppingSearchConnectorClient.js +41 -0
- package/lib/features/shopping/services/shoppingSearchConnectorClient.js.map +1 -0
- package/lib/features/shopping/shopAgentSwipe.js +7 -0
- package/lib/features/shopping/shopAgentSwipe.js.map +1 -0
- package/lib/features/shopping/shoppingCart.js +116 -0
- package/lib/features/shopping/shoppingCart.js.map +1 -0
- package/lib/features/shopping/shoppingExec.js +14 -0
- package/lib/features/shopping/shoppingExec.js.map +1 -0
- package/lib/features/shopping/shoppingHistoryStore.js +176 -0
- package/lib/features/shopping/shoppingHistoryStore.js.map +1 -0
- package/lib/features/shopping/shoppingRuntime.js +63 -0
- package/lib/features/shopping/shoppingRuntime.js.map +1 -0
- package/lib/features/shopping/timeAgo.js +14 -0
- package/lib/features/shopping/timeAgo.js.map +1 -0
- package/lib/features/shopping/useShoppingSearch.js +262 -0
- package/lib/features/shopping/useShoppingSearch.js.map +1 -0
- package/lib/features/travel/BookHeaderGlow.js +48 -0
- package/lib/features/travel/BookHeaderGlow.js.map +1 -0
- package/lib/features/travel/BookingsPanel.js +29 -0
- package/lib/features/travel/BookingsPanel.js.map +1 -0
- package/lib/features/travel/DiscoverPanel.js +155 -0
- package/lib/features/travel/DiscoverPanel.js.map +1 -0
- package/lib/features/travel/FlightCompareBar.js +86 -0
- package/lib/features/travel/FlightCompareBar.js.map +1 -0
- package/lib/features/travel/FlightDealsBoard.js +100 -0
- package/lib/features/travel/FlightDealsBoard.js.map +1 -0
- package/lib/features/travel/HistoryPanel.js +82 -0
- package/lib/features/travel/HistoryPanel.js.map +1 -0
- package/lib/features/travel/PopularDestinations.js +144 -0
- package/lib/features/travel/PopularDestinations.js.map +1 -0
- package/lib/features/travel/SavedPanel.js +27 -0
- package/lib/features/travel/SavedPanel.js.map +1 -0
- package/lib/features/travel/TravelAgentChatPane.js +303 -0
- package/lib/features/travel/TravelAgentChatPane.js.map +1 -0
- package/lib/features/travel/TravelBookHero.js +425 -0
- package/lib/features/travel/TravelBookHero.js.map +1 -0
- package/lib/features/travel/TravelDatesField.js +234 -0
- package/lib/features/travel/TravelDatesField.js.map +1 -0
- package/lib/features/travel/TravelDetailSheet.js +106 -0
- package/lib/features/travel/TravelDetailSheet.js.map +1 -0
- package/lib/features/travel/TravelExperience.js +624 -0
- package/lib/features/travel/TravelExperience.js.map +1 -0
- package/lib/features/travel/TravelGuestsField.js +85 -0
- package/lib/features/travel/TravelGuestsField.js.map +1 -0
- package/lib/features/travel/TravelLanding.js +318 -0
- package/lib/features/travel/TravelLanding.js.map +1 -0
- package/lib/features/travel/TravelLocationField.js +179 -0
- package/lib/features/travel/TravelLocationField.js.map +1 -0
- package/lib/features/travel/TravelPropertyCard.js +266 -0
- package/lib/features/travel/TravelPropertyCard.js.map +1 -0
- package/lib/features/travel/TravelPropertyPhoto.js +22 -0
- package/lib/features/travel/TravelPropertyPhoto.js.map +1 -0
- package/lib/features/travel/TravelRailFlyout.js +79 -0
- package/lib/features/travel/TravelRailFlyout.js.map +1 -0
- package/lib/features/travel/TravelResultsMap.js +126 -0
- package/lib/features/travel/TravelResultsMap.js.map +1 -0
- package/lib/features/travel/WorkspacePanel.js +148 -0
- package/lib/features/travel/WorkspacePanel.js.map +1 -0
- package/lib/features/travel/appNav.js +244 -0
- package/lib/features/travel/appNav.js.map +1 -0
- package/lib/features/travel/calendarDays.js +50 -0
- package/lib/features/travel/calendarDays.js.map +1 -0
- package/lib/features/travel/catalog.js +72 -0
- package/lib/features/travel/catalog.js.map +1 -0
- package/lib/features/travel/chat/TravelChatResultCard.js +107 -0
- package/lib/features/travel/chat/TravelChatResultCard.js.map +1 -0
- package/lib/features/travel/chat/widgetContent.js +107 -0
- package/lib/features/travel/chat/widgetContent.js.map +1 -0
- package/lib/features/travel/flightDeals.js +65 -0
- package/lib/features/travel/flightDeals.js.map +1 -0
- package/lib/features/travel/mapCoordinates.js +36 -0
- package/lib/features/travel/mapCoordinates.js.map +1 -0
- package/lib/features/travel/parseTravelIntent.js +303 -0
- package/lib/features/travel/parseTravelIntent.js.map +1 -0
- package/lib/features/travel/savedStays.js +66 -0
- package/lib/features/travel/savedStays.js.map +1 -0
- package/lib/features/travel/services/flightDealsBoard.js +111 -0
- package/lib/features/travel/services/flightDealsBoard.js.map +1 -0
- package/lib/features/travel/services/flightSearchConnectorClient.js +42 -0
- package/lib/features/travel/services/flightSearchConnectorClient.js.map +1 -0
- package/lib/features/travel/services/geocodeLocation.js +79 -0
- package/lib/features/travel/services/geocodeLocation.js.map +1 -0
- package/lib/features/travel/services/placePredictions.js +113 -0
- package/lib/features/travel/services/placePredictions.js.map +1 -0
- package/lib/features/travel/services/resolveOriginCity.js +27 -0
- package/lib/features/travel/services/resolveOriginCity.js.map +1 -0
- package/lib/features/travel/services/resortifiConnectorClient.js +76 -0
- package/lib/features/travel/services/resortifiConnectorClient.js.map +1 -0
- package/lib/features/travel/services/travelFlightSearch.js +289 -0
- package/lib/features/travel/services/travelFlightSearch.js.map +1 -0
- package/lib/features/travel/services/travelPropertySearch.js +377 -0
- package/lib/features/travel/services/travelPropertySearch.js.map +1 -0
- package/lib/features/travel/travelAgentSwipe.js +7 -0
- package/lib/features/travel/travelAgentSwipe.js.map +1 -0
- package/lib/features/travel/travelExec.js +14 -0
- package/lib/features/travel/travelExec.js.map +1 -0
- package/lib/features/travel/travelHistoryStore.js +108 -0
- package/lib/features/travel/travelHistoryStore.js.map +1 -0
- package/lib/features/travel/travelRuntime.js +62 -0
- package/lib/features/travel/travelRuntime.js.map +1 -0
- package/lib/features/travel/types.js +9 -0
- package/lib/features/travel/types.js.map +1 -0
- package/lib/features/travel/useTravelSearch.js +330 -0
- package/lib/features/travel/useTravelSearch.js.map +1 -0
- package/lib/features/travel/workspaceContent.js +548 -0
- package/lib/features/travel/workspaceContent.js.map +1 -0
- package/lib/hooks/useObtainSystemToken.js +23 -5
- package/lib/hooks/useObtainSystemToken.js.map +1 -1
- package/lib/hooks/webViewRetentionPolicy.js +1 -0
- package/lib/hooks/webViewRetentionPolicy.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/screens/ChatNative/index.js +13 -2
- package/lib/screens/ChatNative/index.js.map +1 -1
- package/lib/screens/Home/HomeScreen.js +3 -3
- package/lib/screens/Home/HomeScreen.js.map +1 -1
- package/lib/screens/Home/components/ChatHistoryLanding.js +32 -32
- package/lib/screens/Home/components/ChatHistoryLanding.js.map +1 -1
- package/lib/screens/WebBuilder/WebViewWithNavigation.js +2 -2
- package/lib/screens/WebBuilder/WebViewWithNavigation.js.map +1 -1
- package/lib/services/brainQuickReply.js +38 -1
- package/lib/services/brainQuickReply.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {jsx}from'react/jsx-runtime';import
|
|
1
|
+
import {jsx}from'react/jsx-runtime';import React__default,{useCallback}from'react';import {useCdecliConnection}from'../../contexts/CdecliConnectionContext.js';import {useGatewayContext}from'../../contexts/GatewayContext.js';import {GatewayToolbarButtonMobile}from'../GatewayToolbarButtonMobile.js';function mapCdecliStatus(status) {
|
|
2
2
|
if (status === "connecting") return "connecting";
|
|
3
3
|
if (status === "connected") return "connected";
|
|
4
4
|
if (status === "error") return "error";
|
|
@@ -18,4 +18,4 @@ const GatewayConnector = ({
|
|
|
18
18
|
}, []);
|
|
19
19
|
return /* @__PURE__ */ jsx(GatewayToolbarButtonMobile, { gatewayStatus, gatewayError: cdecli.error, onToggleGateway: handleToggleGateway, disabled, statusLabel: gatewayLabel, gatewayName: (selectedGateway == null ? void 0 : selectedGateway.name) || "Yantra", tone });
|
|
20
20
|
};
|
|
21
|
-
var GatewayConnector$1 =
|
|
21
|
+
var GatewayConnector$1 = React__default.memo(GatewayConnector);export{GatewayConnector$1 as default};//# sourceMappingURL=GatewayConnector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GatewayConnector.js","sources":["../../../src/components/GatewayConnector/GatewayConnector.tsx"],"sourcesContent":["/**\n * Gateway connector pill.\n *\n * Renders the visual CDeCLI status pill (`GatewayToolbarButtonMobile`) using\n * the shared `CdecliConnectionContext`. It is purely a consumer — the actual\n * `useCdecliAutoConnect` lifecycle lives in `CdecliConnectionProvider`\n * mounted once at the app root.\n *\n * This separation is intentional: the Chat screen also binds its `channelId`\n * to the same shared connection. If this component called its own\n * `useCdecliAutoConnect`, the two hooks would race their `gatewayConnect`\n * mutations and the agent session would lose its chat binding, producing the\n * \"agent did not return a response / API key may be missing\" fallback.\n */\nimport React, { useCallback } from 'react';\nimport { useCdecliConnection } from '../../contexts/CdecliConnectionContext';\nimport { useGatewayContext } from '../../contexts/GatewayContext';\nimport { GatewayToolbarButtonMobile } from '../GatewayToolbarButtonMobile';\n\nexport type GatewayConnectorStatus = 'connecting' | 'connected' | 'disconnected' | 'error';\n\ninterface GatewayConnectorProps {\n /** Visual variant — defaults to the standard toolbar tone. */\n tone?: 'default' | 'provisioning' | 'workspace-error';\n /** Disable interaction (the pill itself is currently click-through). */\n disabled?: boolean;\n}\n\nfunction mapCdecliStatus(status: string | null | undefined): GatewayConnectorStatus {\n if (status === 'connecting') return 'connecting';\n if (status === 'connected') return 'connected';\n if (status === 'error') return 'error';\n return 'disconnected';\n}\n\nconst GatewayConnector: React.FC<GatewayConnectorProps> = ({ tone = 'default', disabled = false }) => {\n const cdecli = useCdecliConnection();\n const { selectedGateway } = useGatewayContext();\n\n const gatewayStatus = mapCdecliStatus(cdecli.status);\n const gatewayLabel = cdecli.status === 'connecting' ? 'Checking...' : undefined;\n\n const handleToggleGateway = useCallback(() => {\n /* CDeCLI selection is gateway-context driven elsewhere — no-op here. */\n }, []);\n\n return (\n <GatewayToolbarButtonMobile\n gatewayStatus={gatewayStatus}\n gatewayError={cdecli.error}\n onToggleGateway={handleToggleGateway}\n disabled={disabled}\n statusLabel={gatewayLabel}\n gatewayName={selectedGateway?.name || 'Yantra'}\n tone={tone}\n />\n );\n};\n\nexport default React.memo(GatewayConnector);\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GatewayConnector.js","sources":["../../../src/components/GatewayConnector/GatewayConnector.tsx"],"sourcesContent":["/**\n * Gateway connector pill.\n *\n * Renders the visual CDeCLI status pill (`GatewayToolbarButtonMobile`) using\n * the shared `CdecliConnectionContext`. It is purely a consumer — the actual\n * `useCdecliAutoConnect` lifecycle lives in `CdecliConnectionProvider`\n * mounted once at the app root.\n *\n * This separation is intentional: the Chat screen also binds its `channelId`\n * to the same shared connection. If this component called its own\n * `useCdecliAutoConnect`, the two hooks would race their `gatewayConnect`\n * mutations and the agent session would lose its chat binding, producing the\n * \"agent did not return a response / API key may be missing\" fallback.\n */\nimport React, { useCallback } from 'react';\nimport { useCdecliConnection } from '../../contexts/CdecliConnectionContext';\nimport { useGatewayContext } from '../../contexts/GatewayContext';\nimport { GatewayToolbarButtonMobile } from '../GatewayToolbarButtonMobile';\n\nexport type GatewayConnectorStatus = 'connecting' | 'connected' | 'disconnected' | 'error';\n\ninterface GatewayConnectorProps {\n /** Visual variant — defaults to the standard toolbar tone. */\n tone?: 'default' | 'provisioning' | 'workspace-error';\n /** Disable interaction (the pill itself is currently click-through). */\n disabled?: boolean;\n}\n\nfunction mapCdecliStatus(status: string | null | undefined): GatewayConnectorStatus {\n if (status === 'connecting') return 'connecting';\n if (status === 'connected') return 'connected';\n if (status === 'error') return 'error';\n return 'disconnected';\n}\n\nconst GatewayConnector: React.FC<GatewayConnectorProps> = ({ tone = 'default', disabled = false }) => {\n const cdecli = useCdecliConnection();\n const { selectedGateway } = useGatewayContext();\n\n const gatewayStatus = mapCdecliStatus(cdecli.status);\n const gatewayLabel = cdecli.status === 'connecting' ? 'Checking...' : undefined;\n\n const handleToggleGateway = useCallback(() => {\n /* CDeCLI selection is gateway-context driven elsewhere — no-op here. */\n }, []);\n\n return (\n <GatewayToolbarButtonMobile\n gatewayStatus={gatewayStatus}\n gatewayError={cdecli.error}\n onToggleGateway={handleToggleGateway}\n disabled={disabled}\n statusLabel={gatewayLabel}\n gatewayName={selectedGateway?.name || 'Yantra'}\n tone={tone}\n />\n );\n};\n\nexport default React.memo(GatewayConnector);\n"],"names":["React"],"mappings":"0SAyBA,SAAS,gBAAgB,MAA2D,EAAA;AAClF,EAAI,IAAA,MAAA,KAAW,cAAqB,OAAA,YAAA;AACpC,EAAI,IAAA,MAAA,KAAW,aAAoB,OAAA,WAAA;AACnC,EAAI,IAAA,MAAA,KAAW,SAAgB,OAAA,OAAA;AAC/B,EAAO,OAAA,cAAA;AACT;AACA,MAAM,mBAAoD,CAAC;AAAA,EACzD,IAAO,GAAA,SAAA;AAAA,EACP,QAAW,GAAA;AACb,CAAM,KAAA;AACJ,EAAA,MAAM,SAAS,mBAAoB,EAAA;AACnC,EAAM,MAAA;AAAA,IACJ;AAAA,MACE,iBAAkB,EAAA;AACtB,EAAM,MAAA,aAAA,GAAgB,eAAgB,CAAA,MAAA,CAAO,MAAM,CAAA;AACnD,EAAA,MAAM,YAAe,GAAA,MAAA,CAAO,MAAW,KAAA,YAAA,GAAe,aAAgB,GAAA,MAAA;AACtE,EAAM,MAAA,mBAAA,GAAsB,YAAY,MAAM;AAAA,GAE9C,EAAG,EAAE,CAAA;AACL,EAAA,uBAAQ,GAAA,CAAA,0BAAA,EAAA,EAA2B,aAA8B,EAAA,YAAA,EAAc,OAAO,KAAO,EAAA,eAAA,EAAiB,mBAAqB,EAAA,QAAA,EAAoB,aAAa,YAAc,EAAA,WAAA,EAAA,CAAa,eAAiB,IAAA,IAAA,GAAA,MAAA,GAAA,eAAA,CAAA,IAAA,KAAQ,UAAU,IAAY,EAAA,CAAA;AAChP,CAAA;AACA,yBAAeA,cAAA,CAAM,KAAK,gBAAgB,CAAA"}
|
|
@@ -29,6 +29,13 @@ function KeyboardAwareScreen({
|
|
|
29
29
|
}
|
|
30
30
|
return /* @__PURE__ */ jsx(View, { style: [styles.flex, style], testID, children });
|
|
31
31
|
}
|
|
32
|
+
function KeyboardLiftSpacer() {
|
|
33
|
+
const height = useKeyboardLiftHeight();
|
|
34
|
+
if (Platform.OS !== "ios" || height <= 0) return null;
|
|
35
|
+
return /* @__PURE__ */ jsx(View, { style: {
|
|
36
|
+
height
|
|
37
|
+
}, pointerEvents: "none" });
|
|
38
|
+
}
|
|
32
39
|
function configureKeyboardLayout(duration) {
|
|
33
40
|
if (Platform.OS !== "ios") return;
|
|
34
41
|
LayoutAnimation.configureNext({
|
|
@@ -138,4 +145,4 @@ const styles = StyleSheet.create({
|
|
|
138
145
|
width: "100%",
|
|
139
146
|
alignItems: "center"
|
|
140
147
|
}
|
|
141
|
-
});export{COMPOSER_INPUT_NATIVE_ID,KeyboardAwareScreen,KeyboardComposerDock,useKeyboardLiftHeight};//# sourceMappingURL=KeyboardComposerDock.js.map
|
|
148
|
+
});export{COMPOSER_INPUT_NATIVE_ID,KeyboardAwareScreen,KeyboardComposerDock,KeyboardLiftSpacer,useKeyboardLiftHeight};//# sourceMappingURL=KeyboardComposerDock.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeyboardComposerDock.js","sources":["../../src/components/KeyboardComposerDock.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport {\n Keyboard,\n LayoutAnimation,\n PanResponder,\n Platform,\n StyleSheet,\n View,\n type StyleProp,\n type ViewStyle,\n} from 'react-native';\nimport { dismissKeyboard, isKeyboardControllerAvailable } from '../utils/keyboardController';\n\nexport const COMPOSER_INPUT_NATIVE_ID = 'yantra-composer';\n\nexport type KeyboardComposerDockProps = {\n children: React.ReactNode;\n /** Home-indicator inset when the keyboard is closed. */\n closedInset: number;\n keyboardVisible?: boolean;\n /** Expo Go: swipe up on the composer focuses this field (opens the keyboard). */\n onSwipeUp?: () => void;\n};\n\n/**\n * Native swipe region when keyboard-controller is linked: swipe up opens the\n * keyboard, swipe down closes it and the keys follow the finger (iOS interpolator).\n */\nexport function KeyboardAwareScreen({\n children,\n style,\n testID,\n}: {\n children: React.ReactNode;\n style?: StyleProp<ViewStyle>;\n testID?: string;\n}) {\n if (isKeyboardControllerAvailable()) {\n const KeyboardGestureArea = require('react-native-keyboard-controller')\n .KeyboardGestureArea as React.ComponentType<{\n style?: StyleProp<ViewStyle>;\n interpolator?: 'ios' | 'linear';\n showOnSwipeUp?: boolean;\n enableSwipeToDismiss?: boolean;\n textInputNativeID?: string;\n testID?: string;\n children?: React.ReactNode;\n }>;\n return (\n <KeyboardGestureArea\n style={[styles.flex, style]}\n interpolator=\"ios\"\n showOnSwipeUp\n enableSwipeToDismiss\n textInputNativeID={COMPOSER_INPUT_NATIVE_ID}\n testID={testID}\n >\n {children}\n </KeyboardGestureArea>\n );\n }\n return (\n <View style={[styles.flex, style]} testID={testID}>\n {children}\n </View>\n );\n}\n\n/** In-flow iOS spacer so a flex sibling (stage/canvas) shrinks above the keys. */\nexport function KeyboardLiftSpacer() {\n const height = useKeyboardLiftHeight();\n if (Platform.OS !== 'ios' || height <= 0) return null;\n return <View style={{ height }} pointerEvents=\"none\" />;\n}\n\nfunction configureKeyboardLayout(duration?: number) {\n if (Platform.OS !== 'ios') return;\n LayoutAnimation.configureNext({\n duration: duration && duration > 0 ? duration : 250,\n update: {\n type: LayoutAnimation.Types.keyboard,\n },\n });\n}\n\ntype KeyboardHeightListener = { remove: () => void };\n\nfunction listenKeyboardController(\n onHeight: (height: number, duration?: number) => void,\n): KeyboardHeightListener | null {\n if (!isKeyboardControllerAvailable()) return null;\n try {\n const { KeyboardEvents } = require('react-native-keyboard-controller') as {\n KeyboardEvents?: {\n addListener: (\n event: string,\n cb: (e: { height?: number; duration?: number }) => void,\n ) => {\n remove: () => void;\n };\n };\n };\n if (!KeyboardEvents?.addListener) return null;\n const show = KeyboardEvents.addListener('keyboardWillShow', (e) => {\n onHeight(e?.height ?? 0, e?.duration);\n });\n const shown = KeyboardEvents.addListener('keyboardDidShow', (e) => {\n onHeight(e?.height ?? 0, e?.duration);\n });\n const hide = KeyboardEvents.addListener('keyboardWillHide', (e) => {\n onHeight(0, e?.duration);\n });\n const hidden = KeyboardEvents.addListener('keyboardDidHide', (e) => {\n onHeight(0, e?.duration);\n });\n return {\n remove: () => {\n show.remove();\n shown.remove();\n hide.remove();\n hidden.remove();\n },\n };\n } catch {\n return null;\n }\n}\n\n/** Keyboard height used by the dock spacer. Chat reads this so it scrolls after the list shrinks. */\nexport function useKeyboardLiftHeight(): number {\n const [height, setHeight] = useState(0);\n\n useEffect(() => {\n const apply = (next: number, duration?: number) => {\n configureKeyboardLayout(duration);\n setHeight(next);\n };\n const show = Keyboard.addListener(Platform.OS === 'ios' ? 'keyboardWillShow' : 'keyboardDidShow', (e) => {\n apply(e.endCoordinates?.height ?? 0, e.duration);\n });\n const hide = Keyboard.addListener(Platform.OS === 'ios' ? 'keyboardWillHide' : 'keyboardDidHide', (e) => {\n apply(0, e.duration);\n });\n // KeyboardProvider swallows RN Keyboard events on staging binaries, so\n // Create image / video inputs sat under the keys. Mirror height from\n // keyboard-controller when it is linked.\n const controller = listenKeyboardController(apply);\n return () => {\n show.remove();\n hide.remove();\n controller?.remove();\n };\n }, []);\n\n return Platform.OS === 'android' ? 0 : height;\n}\n\n/**\n * In-flow spacer = full keyboard height so the composer docks on the keys.\n * Native swipe lives on KeyboardAwareScreen; Expo Go uses a composer pan.\n */\nexport function KeyboardComposerDock({ children, closedInset, onSwipeUp }: KeyboardComposerDockProps) {\n const keyboardHeight = useKeyboardLiftHeight();\n const closedPadding = Math.max(closedInset, 0);\n const useNativeSwipe = isKeyboardControllerAvailable();\n const onSwipeUpRef = useRef(onSwipeUp);\n onSwipeUpRef.current = onSwipeUp;\n const fallbackGestures = useRef(\n PanResponder.create({\n onMoveShouldSetPanResponder: (_, g) => Math.abs(g.dy) > 12 && Math.abs(g.dy) > Math.abs(g.dx) * 1.2,\n onPanResponderRelease: (_, g) => {\n if (g.dy < -28 || g.vy < -0.55) onSwipeUpRef.current?.();\n else if (g.dy > 28 || g.vy > 0.55) dismissKeyboard();\n },\n }),\n ).current;\n\n return (\n <View style={styles.dockWrap} {...(useNativeSwipe ? null : fallbackGestures.panHandlers)}>\n <View style={[styles.dock, { paddingBottom: Math.max(0, closedPadding - keyboardHeight) }]}>\n {children}\n </View>\n {Platform.OS === 'ios' ? <View style={{ height: keyboardHeight }} pointerEvents=\"none\" /> : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n flex: {\n flex: 1,\n },\n // Pin composer + keyboard spacer to the bottom of the column. Without this,\n // a short sibling (collapsed stage, chips) top-aligns the field and the\n // leftover reads as a hole above the keys.\n dockWrap: {\n marginTop: 'auto',\n width: '100%',\n flexGrow: 0,\n flexShrink: 0,\n },\n dock: {\n width: '100%',\n alignItems: 'center',\n },\n});\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"KeyboardComposerDock.js","sources":["../../src/components/KeyboardComposerDock.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport {\n Keyboard,\n LayoutAnimation,\n PanResponder,\n Platform,\n StyleSheet,\n View,\n type StyleProp,\n type ViewStyle,\n} from 'react-native';\nimport { dismissKeyboard, isKeyboardControllerAvailable } from '../utils/keyboardController';\n\nexport const COMPOSER_INPUT_NATIVE_ID = 'yantra-composer';\n\nexport type KeyboardComposerDockProps = {\n children: React.ReactNode;\n /** Home-indicator inset when the keyboard is closed. */\n closedInset: number;\n keyboardVisible?: boolean;\n /** Expo Go: swipe up on the composer focuses this field (opens the keyboard). */\n onSwipeUp?: () => void;\n};\n\n/**\n * Native swipe region when keyboard-controller is linked: swipe up opens the\n * keyboard, swipe down closes it and the keys follow the finger (iOS interpolator).\n */\nexport function KeyboardAwareScreen({\n children,\n style,\n testID,\n}: {\n children: React.ReactNode;\n style?: StyleProp<ViewStyle>;\n testID?: string;\n}) {\n if (isKeyboardControllerAvailable()) {\n const KeyboardGestureArea = require('react-native-keyboard-controller')\n .KeyboardGestureArea as React.ComponentType<{\n style?: StyleProp<ViewStyle>;\n interpolator?: 'ios' | 'linear';\n showOnSwipeUp?: boolean;\n enableSwipeToDismiss?: boolean;\n textInputNativeID?: string;\n testID?: string;\n children?: React.ReactNode;\n }>;\n return (\n <KeyboardGestureArea\n style={[styles.flex, style]}\n interpolator=\"ios\"\n showOnSwipeUp\n enableSwipeToDismiss\n textInputNativeID={COMPOSER_INPUT_NATIVE_ID}\n testID={testID}\n >\n {children}\n </KeyboardGestureArea>\n );\n }\n return (\n <View style={[styles.flex, style]} testID={testID}>\n {children}\n </View>\n );\n}\n\n/** In-flow iOS spacer so a flex sibling (stage/canvas) shrinks above the keys. */\nexport function KeyboardLiftSpacer() {\n const height = useKeyboardLiftHeight();\n if (Platform.OS !== 'ios' || height <= 0) return null;\n return <View style={{ height }} pointerEvents=\"none\" />;\n}\n\nfunction configureKeyboardLayout(duration?: number) {\n if (Platform.OS !== 'ios') return;\n LayoutAnimation.configureNext({\n duration: duration && duration > 0 ? duration : 250,\n update: {\n type: LayoutAnimation.Types.keyboard,\n },\n });\n}\n\ntype KeyboardHeightListener = { remove: () => void };\n\nfunction listenKeyboardController(\n onHeight: (height: number, duration?: number) => void,\n): KeyboardHeightListener | null {\n if (!isKeyboardControllerAvailable()) return null;\n try {\n const { KeyboardEvents } = require('react-native-keyboard-controller') as {\n KeyboardEvents?: {\n addListener: (\n event: string,\n cb: (e: { height?: number; duration?: number }) => void,\n ) => {\n remove: () => void;\n };\n };\n };\n if (!KeyboardEvents?.addListener) return null;\n const show = KeyboardEvents.addListener('keyboardWillShow', (e) => {\n onHeight(e?.height ?? 0, e?.duration);\n });\n const shown = KeyboardEvents.addListener('keyboardDidShow', (e) => {\n onHeight(e?.height ?? 0, e?.duration);\n });\n const hide = KeyboardEvents.addListener('keyboardWillHide', (e) => {\n onHeight(0, e?.duration);\n });\n const hidden = KeyboardEvents.addListener('keyboardDidHide', (e) => {\n onHeight(0, e?.duration);\n });\n return {\n remove: () => {\n show.remove();\n shown.remove();\n hide.remove();\n hidden.remove();\n },\n };\n } catch {\n return null;\n }\n}\n\n/** Keyboard height used by the dock spacer. Chat reads this so it scrolls after the list shrinks. */\nexport function useKeyboardLiftHeight(): number {\n const [height, setHeight] = useState(0);\n\n useEffect(() => {\n const apply = (next: number, duration?: number) => {\n configureKeyboardLayout(duration);\n setHeight(next);\n };\n const show = Keyboard.addListener(Platform.OS === 'ios' ? 'keyboardWillShow' : 'keyboardDidShow', (e) => {\n apply(e.endCoordinates?.height ?? 0, e.duration);\n });\n const hide = Keyboard.addListener(Platform.OS === 'ios' ? 'keyboardWillHide' : 'keyboardDidHide', (e) => {\n apply(0, e.duration);\n });\n // KeyboardProvider swallows RN Keyboard events on staging binaries, so\n // Create image / video inputs sat under the keys. Mirror height from\n // keyboard-controller when it is linked.\n const controller = listenKeyboardController(apply);\n return () => {\n show.remove();\n hide.remove();\n controller?.remove();\n };\n }, []);\n\n return Platform.OS === 'android' ? 0 : height;\n}\n\n/**\n * In-flow spacer = full keyboard height so the composer docks on the keys.\n * Native swipe lives on KeyboardAwareScreen; Expo Go uses a composer pan.\n */\nexport function KeyboardComposerDock({ children, closedInset, onSwipeUp }: KeyboardComposerDockProps) {\n const keyboardHeight = useKeyboardLiftHeight();\n const closedPadding = Math.max(closedInset, 0);\n const useNativeSwipe = isKeyboardControllerAvailable();\n const onSwipeUpRef = useRef(onSwipeUp);\n onSwipeUpRef.current = onSwipeUp;\n const fallbackGestures = useRef(\n PanResponder.create({\n onMoveShouldSetPanResponder: (_, g) => Math.abs(g.dy) > 12 && Math.abs(g.dy) > Math.abs(g.dx) * 1.2,\n onPanResponderRelease: (_, g) => {\n if (g.dy < -28 || g.vy < -0.55) onSwipeUpRef.current?.();\n else if (g.dy > 28 || g.vy > 0.55) dismissKeyboard();\n },\n }),\n ).current;\n\n return (\n <View style={styles.dockWrap} {...(useNativeSwipe ? null : fallbackGestures.panHandlers)}>\n <View style={[styles.dock, { paddingBottom: Math.max(0, closedPadding - keyboardHeight) }]}>\n {children}\n </View>\n {Platform.OS === 'ios' ? <View style={{ height: keyboardHeight }} pointerEvents=\"none\" /> : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n flex: {\n flex: 1,\n },\n // Pin composer + keyboard spacer to the bottom of the column. Without this,\n // a short sibling (collapsed stage, chips) top-aligns the field and the\n // leftover reads as a hole above the keys.\n dockWrap: {\n marginTop: 'auto',\n width: '100%',\n flexGrow: 0,\n flexShrink: 0,\n },\n dock: {\n width: '100%',\n alignItems: 'center',\n },\n});\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {jsx,jsxs,Fragment}from'react/jsx-runtime';import
|
|
1
|
+
import {jsx,jsxs,Fragment}from'react/jsx-runtime';import React__default,{useMemo,useCallback}from'react';import {StyleSheet,View,ScrollView,Pressable}from'react-native';import {dismissKeyboard}from'../../utils/keyboardController.js';import {useSafeAreaInsets,SafeAreaView}from'react-native-safe-area-context';import {StatusBar}from'expo-status-bar';import {useNavigation,CommonActions}from'@react-navigation/native';import {getHeaderTitle}from'@react-navigation/elements';import {MaterialCommunityIcons}from'@expo/vector-icons';import {Text}from'@admin-layout/gluestack-ui-mobile';import GatewayConnector from'../GatewayConnector/GatewayConnector.js';import {tryWebBuilderBack}from'../../screens/WebBuilder/webbuilderBackHandler.js';import {config}from'../../config/env-config.js';import {resolveAppTitleFromSurfaceUrl}from'../../features/apps/resolveSurfaceUrl.js';import {navigateToNewChatHome}from'../../utils/navigateToNewChatHome.js';import {dispatchDrawerAction}from'../../utils/drawerNavigation.js';import {useAppTheme}from'../../theme/AppThemeProvider.js';import {HeaderMoreMenu}from'./HeaderMoreMenu.js';import {HeaderSkillsButton}from'./HeaderSkillsButton.js';import {HeaderTasksButton}from'./HeaderTasksButton.js';import {HeaderToolbarButton}from'./HeaderToolbarButton.js';const ICON_SIZE = 22;
|
|
2
2
|
function resolveTitle(options, route) {
|
|
3
3
|
var _a, _b, _c, _d;
|
|
4
4
|
const paramTitle = (_a = route == null ? void 0 : route.params) == null ? void 0 : _a.appTitle;
|
|
@@ -190,4 +190,4 @@ const styles = StyleSheet.create({
|
|
|
190
190
|
opacity: 0.6
|
|
191
191
|
}
|
|
192
192
|
});
|
|
193
|
-
var NavigationHeader$1 =
|
|
193
|
+
var NavigationHeader$1 = React__default.memo(NavigationHeader);export{NavigationHeader$1 as default};//# sourceMappingURL=NavigationHeader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavigationHeader.js","sources":["../../../src/components/NavigationHeader/NavigationHeader.tsx"],"sourcesContent":["/**\n * Universal navigation header for the Yantra mobile app.\n *\n * Home and Chat keep Tasks · Skills in the top bar. Apps and History live in\n * the sidebar drawer (Manus-style rows); Apps opens a full screen, not a popup.\n *\n * Wired via `customHeader` in `compute.ts`. Screens never call `setOptions`.\n */\nimport React, { useCallback, useMemo } from 'react';\nimport { Pressable, ScrollView, StyleSheet, View } from 'react-native';\nimport { dismissKeyboard } from '../../utils/keyboardController';\nimport { SafeAreaView, useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { StatusBar } from 'expo-status-bar';\nimport { CommonActions, useNavigation } from '@react-navigation/native';\nimport { getHeaderTitle } from '@react-navigation/elements';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { Text } from '@admin-layout/gluestack-ui-mobile';\nimport { GatewayConnector } from '../GatewayConnector';\nimport { tryWebBuilderBack } from '../../screens/WebBuilder/webbuilderBackHandler';\nimport { config } from '../../config/env-config';\nimport { resolveAppTitleFromSurfaceUrl } from '../../features/apps/resolveSurfaceUrl';\nimport { navigateToNewChatHome } from '../../utils/navigateToNewChatHome';\nimport { dispatchDrawerAction } from '../../utils/drawerNavigation';\nimport { useAppTheme } from '../../theme/AppThemeProvider';\nimport { HeaderMoreMenu } from './HeaderMoreMenu';\nimport { HeaderSkillsButton } from './HeaderSkillsButton';\nimport { HeaderTasksButton } from './HeaderTasksButton';\nimport { HeaderToolbarButton } from './HeaderToolbarButton';\n\ninterface NavigationHeaderProps {\n navigation?: any;\n route?: any;\n options?: any;\n back?: { title?: string };\n\n showTitle?: boolean;\n showToggle?: boolean;\n showBack?: boolean;\n showFilter?: boolean;\n isSearchBack?: boolean;\n showGateway?: boolean;\n showApps?: boolean;\n showHistory?: boolean;\n showNewChat?: boolean;\n headerBgColor?: string;\n}\n\nconst ICON_SIZE = 22;\n\nfunction resolveTitle(options: any, route: any): string {\n const paramTitle = route?.params?.appTitle;\n const routeName = typeof route?.name === 'string' ? route.name : '';\n if (/CanvasNative/i.test(routeName)) return 'Canvas';\n if (/ResumeNative/i.test(routeName)) return 'Resume';\n if (typeof paramTitle === 'string' && paramTitle.trim()) {\n return paramTitle.trim();\n }\n const fromUrl = resolveAppTitleFromSurfaceUrl(route?.params?.url, config);\n if (fromUrl) return fromUrl;\n\n if (typeof options?.title === 'string' && options.title.trim()) {\n return options.title.trim();\n }\n if (typeof options?.headerTitle === 'string' && options.headerTitle.trim()) {\n return options.headerTitle.trim();\n }\n const fallback = getHeaderTitle?.(options ?? {}, route?.name ?? 'Yantra');\n return typeof fallback === 'string' && fallback.trim() ? fallback : 'Yantra';\n}\n\nconst NavigationHeader: React.FC<NavigationHeaderProps> = (props) => {\n const {\n navigation: navProp,\n route,\n options,\n back,\n showTitle = true,\n showToggle = false,\n showBack = false,\n showGateway = false,\n showNewChat = false,\n headerBgColor,\n } = props;\n\n const showChatToolbar = showGateway;\n\n const fallbackNav = useNavigation<any>();\n const navigation = navProp ?? fallbackNav;\n\n const { isDark } = useAppTheme();\n const insets = useSafeAreaInsets();\n\n const themeTitleColor = isDark ? '#f1f5f9' : '#0f172a';\n const optionTint = typeof options?.headerTintColor === 'string' ? options.headerTintColor : null;\n const tintLooksDark = optionTint && /^(#?000(000)?|black)$/i.test(optionTint.trim());\n const effectiveTint = optionTint && !(isDark && tintLooksDark) ? optionTint : null;\n const titleColor = effectiveTint ?? themeTitleColor;\n const iconColor = effectiveTint ?? themeTitleColor;\n\n const surfaceColor = headerBgColor ?? (isDark ? '#0f172a' : '#ffffff');\n const dividerColor = isDark ? 'rgba(148, 163, 184, 0.18)' : 'rgba(15, 23, 42, 0.06)';\n\n const titleAlignLeft = options?.headerTitleAlign === 'left';\n const title = useMemo(\n () => resolveTitle(options, route),\n [options, route, route?.params?.appTitle, route?.params?.url],\n );\n const optionTitleStyle = options?.headerTitleStyle ?? null;\n\n const orgName = useMemo(() => {\n const raw = (route?.params?.orgName as string | undefined) ?? '';\n return typeof raw === 'string' && raw.trim() ? raw.trim() : null;\n }, [route?.params?.orgName]);\n\n const handleBack = useCallback(() => {\n const routeName = typeof route?.name === 'string' ? route.name : '';\n if (/webbuilder/i.test(routeName) && tryWebBuilderBack()) {\n return;\n }\n if (navigation?.canGoBack?.()) {\n navigation.goBack();\n return;\n }\n navigation?.dispatch?.(\n CommonActions.navigate({\n name: 'MainStack.Layout.Home',\n params: orgName ? { orgName } : undefined,\n }),\n );\n }, [navigation, orgName, route?.name]);\n\n const handleToggleDrawer = useCallback(() => {\n try {\n dispatchDrawerAction(navigation, 'toggle');\n } catch {\n /* Current navigator may not be a drawer — ignore. */\n }\n }, [navigation]);\n\n const handleNewChat = useCallback(() => {\n navigateToNewChatHome(navigation, orgName);\n }, [navigation, orgName]);\n\n const wantsBack = Boolean(back) || showBack;\n\n const leftSlot = wantsBack ? (\n <Pressable\n onPress={handleBack}\n accessibilityLabel=\"Go back\"\n accessibilityRole=\"button\"\n style={({ pressed }) => [styles.iconButton, pressed && styles.iconButtonPressed]}\n hitSlop={8}\n >\n <MaterialCommunityIcons name=\"chevron-left\" size={ICON_SIZE + 4} color={iconColor} />\n </Pressable>\n ) : showToggle ? (\n <Pressable\n onPress={handleToggleDrawer}\n accessibilityLabel=\"Open menu\"\n accessibilityRole=\"button\"\n style={({ pressed }) => [styles.iconButton, pressed && styles.iconButtonPressed]}\n hitSlop={8}\n >\n <MaterialCommunityIcons name=\"menu\" size={ICON_SIZE} color={iconColor} />\n </Pressable>\n ) : null;\n\n if (route?.params?.hideNavigationHeader) {\n return <StatusBar style={isDark ? 'light' : 'dark'} />;\n }\n\n const hideBrandTitle = showChatToolbar && title === 'Yantra';\n const titleSlot =\n showTitle && !hideBrandTitle ? (\n <Text\n style={[\n styles.title,\n titleAlignLeft ? styles.titleAlignLeft : styles.titleAlignCenter,\n { color: titleColor },\n optionTitleStyle,\n ]}\n numberOfLines={1}\n ellipsizeMode=\"tail\"\n >\n {title}\n </Text>\n ) : null;\n\n return (\n <>\n <StatusBar style={isDark ? 'light' : 'dark'} />\n <SafeAreaView edges={['top']} style={{ backgroundColor: surfaceColor }}>\n <View\n onStartShouldSetResponderCapture={() => {\n dismissKeyboard();\n return false;\n }}\n style={[\n styles.row,\n {\n backgroundColor: surfaceColor,\n borderBottomColor: dividerColor,\n paddingTop: insets.top > 0 ? 0 : 6,\n },\n options?.headerStyle ?? null,\n ]}\n >\n <View style={styles.leftSlot}>{leftSlot}</View>\n\n {showChatToolbar ? (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={styles.toolsScroll}\n contentContainerStyle={styles.toolsContent}\n keyboardShouldPersistTaps=\"handled\"\n >\n <HeaderTasksButton isDark={isDark} />\n <HeaderSkillsButton isDark={isDark} />\n </ScrollView>\n ) : (\n <View style={[styles.titleSlot, titleAlignLeft && styles.titleSlotLeft]}>{titleSlot}</View>\n )}\n\n <View style={styles.rightSlot}>\n {showChatToolbar ? (\n <View style={styles.rightActions}>\n {showGateway ? <GatewayConnector /> : null}\n <HeaderMoreMenu isDark={isDark} onNewChat={showNewChat ? handleNewChat : undefined} />\n </View>\n ) : showNewChat ? (\n <HeaderToolbarButton\n icon=\"chat-plus-outline\"\n onPress={handleNewChat}\n accessibilityLabel=\"New chat\"\n isDark={isDark}\n />\n ) : null}\n </View>\n </View>\n </SafeAreaView>\n </>\n );\n};\n\nconst styles = StyleSheet.create({\n row: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingLeft: 4,\n paddingRight: 6,\n paddingVertical: 4,\n minHeight: 48,\n borderBottomWidth: StyleSheet.hairlineWidth,\n overflow: 'visible',\n },\n leftSlot: {\n flexDirection: 'row',\n alignItems: 'center',\n flexShrink: 0,\n },\n toolsScroll: {\n flex: 1,\n minWidth: 0,\n },\n toolsContent: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingLeft: 2,\n paddingRight: 8,\n gap: 2,\n },\n titleSlot: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 8,\n minWidth: 0,\n },\n titleSlotLeft: {\n alignItems: 'flex-start',\n },\n rightSlot: {\n flexShrink: 0,\n alignItems: 'flex-end',\n justifyContent: 'center',\n paddingLeft: 4,\n },\n rightActions: {\n flexDirection: 'row',\n alignItems: 'center',\n flexShrink: 0,\n },\n title: {\n fontSize: 17,\n fontWeight: '700',\n letterSpacing: -0.2,\n flexShrink: 1,\n },\n titleAlignCenter: {\n textAlign: 'center',\n },\n titleAlignLeft: {\n textAlign: 'left',\n },\n iconButton: {\n width: 36,\n height: 36,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 10,\n },\n iconButtonPressed: {\n opacity: 0.6,\n },\n});\n\nexport default React.memo(NavigationHeader);\n"],"names":["_a","_b"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NavigationHeader.js","sources":["../../../src/components/NavigationHeader/NavigationHeader.tsx"],"sourcesContent":["/**\n * Universal navigation header for the Yantra mobile app.\n *\n * Home and Chat keep Tasks · Skills in the top bar. Apps and History live in\n * the sidebar drawer (Manus-style rows); Apps opens a full screen, not a popup.\n *\n * Wired via `customHeader` in `compute.ts`. Screens never call `setOptions`.\n */\nimport React, { useCallback, useMemo } from 'react';\nimport { Pressable, ScrollView, StyleSheet, View } from 'react-native';\nimport { dismissKeyboard } from '../../utils/keyboardController';\nimport { SafeAreaView, useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { StatusBar } from 'expo-status-bar';\nimport { CommonActions, useNavigation } from '@react-navigation/native';\nimport { getHeaderTitle } from '@react-navigation/elements';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { Text } from '@admin-layout/gluestack-ui-mobile';\nimport { GatewayConnector } from '../GatewayConnector';\nimport { tryWebBuilderBack } from '../../screens/WebBuilder/webbuilderBackHandler';\nimport { config } from '../../config/env-config';\nimport { resolveAppTitleFromSurfaceUrl } from '../../features/apps/resolveSurfaceUrl';\nimport { navigateToNewChatHome } from '../../utils/navigateToNewChatHome';\nimport { dispatchDrawerAction } from '../../utils/drawerNavigation';\nimport { useAppTheme } from '../../theme/AppThemeProvider';\nimport { HeaderMoreMenu } from './HeaderMoreMenu';\nimport { HeaderSkillsButton } from './HeaderSkillsButton';\nimport { HeaderTasksButton } from './HeaderTasksButton';\nimport { HeaderToolbarButton } from './HeaderToolbarButton';\n\ninterface NavigationHeaderProps {\n navigation?: any;\n route?: any;\n options?: any;\n back?: { title?: string };\n\n showTitle?: boolean;\n showToggle?: boolean;\n showBack?: boolean;\n showFilter?: boolean;\n isSearchBack?: boolean;\n showGateway?: boolean;\n showApps?: boolean;\n showHistory?: boolean;\n showNewChat?: boolean;\n headerBgColor?: string;\n}\n\nconst ICON_SIZE = 22;\n\nfunction resolveTitle(options: any, route: any): string {\n const paramTitle = route?.params?.appTitle;\n const routeName = typeof route?.name === 'string' ? route.name : '';\n if (/CanvasNative/i.test(routeName)) return 'Canvas';\n if (/ResumeNative/i.test(routeName)) return 'Resume';\n if (typeof paramTitle === 'string' && paramTitle.trim()) {\n return paramTitle.trim();\n }\n const fromUrl = resolveAppTitleFromSurfaceUrl(route?.params?.url, config);\n if (fromUrl) return fromUrl;\n\n if (typeof options?.title === 'string' && options.title.trim()) {\n return options.title.trim();\n }\n if (typeof options?.headerTitle === 'string' && options.headerTitle.trim()) {\n return options.headerTitle.trim();\n }\n const fallback = getHeaderTitle?.(options ?? {}, route?.name ?? 'Yantra');\n return typeof fallback === 'string' && fallback.trim() ? fallback : 'Yantra';\n}\n\nconst NavigationHeader: React.FC<NavigationHeaderProps> = (props) => {\n const {\n navigation: navProp,\n route,\n options,\n back,\n showTitle = true,\n showToggle = false,\n showBack = false,\n showGateway = false,\n showNewChat = false,\n headerBgColor,\n } = props;\n\n const showChatToolbar = showGateway;\n\n const fallbackNav = useNavigation<any>();\n const navigation = navProp ?? fallbackNav;\n\n const { isDark } = useAppTheme();\n const insets = useSafeAreaInsets();\n\n const themeTitleColor = isDark ? '#f1f5f9' : '#0f172a';\n const optionTint = typeof options?.headerTintColor === 'string' ? options.headerTintColor : null;\n const tintLooksDark = optionTint && /^(#?000(000)?|black)$/i.test(optionTint.trim());\n const effectiveTint = optionTint && !(isDark && tintLooksDark) ? optionTint : null;\n const titleColor = effectiveTint ?? themeTitleColor;\n const iconColor = effectiveTint ?? themeTitleColor;\n\n const surfaceColor = headerBgColor ?? (isDark ? '#0f172a' : '#ffffff');\n const dividerColor = isDark ? 'rgba(148, 163, 184, 0.18)' : 'rgba(15, 23, 42, 0.06)';\n\n const titleAlignLeft = options?.headerTitleAlign === 'left';\n const title = useMemo(\n () => resolveTitle(options, route),\n [options, route, route?.params?.appTitle, route?.params?.url],\n );\n const optionTitleStyle = options?.headerTitleStyle ?? null;\n\n const orgName = useMemo(() => {\n const raw = (route?.params?.orgName as string | undefined) ?? '';\n return typeof raw === 'string' && raw.trim() ? raw.trim() : null;\n }, [route?.params?.orgName]);\n\n const handleBack = useCallback(() => {\n const routeName = typeof route?.name === 'string' ? route.name : '';\n if (/webbuilder/i.test(routeName) && tryWebBuilderBack()) {\n return;\n }\n if (navigation?.canGoBack?.()) {\n navigation.goBack();\n return;\n }\n navigation?.dispatch?.(\n CommonActions.navigate({\n name: 'MainStack.Layout.Home',\n params: orgName ? { orgName } : undefined,\n }),\n );\n }, [navigation, orgName, route?.name]);\n\n const handleToggleDrawer = useCallback(() => {\n try {\n dispatchDrawerAction(navigation, 'toggle');\n } catch {\n /* Current navigator may not be a drawer — ignore. */\n }\n }, [navigation]);\n\n const handleNewChat = useCallback(() => {\n navigateToNewChatHome(navigation, orgName);\n }, [navigation, orgName]);\n\n const wantsBack = Boolean(back) || showBack;\n\n const leftSlot = wantsBack ? (\n <Pressable\n onPress={handleBack}\n accessibilityLabel=\"Go back\"\n accessibilityRole=\"button\"\n style={({ pressed }) => [styles.iconButton, pressed && styles.iconButtonPressed]}\n hitSlop={8}\n >\n <MaterialCommunityIcons name=\"chevron-left\" size={ICON_SIZE + 4} color={iconColor} />\n </Pressable>\n ) : showToggle ? (\n <Pressable\n onPress={handleToggleDrawer}\n accessibilityLabel=\"Open menu\"\n accessibilityRole=\"button\"\n style={({ pressed }) => [styles.iconButton, pressed && styles.iconButtonPressed]}\n hitSlop={8}\n >\n <MaterialCommunityIcons name=\"menu\" size={ICON_SIZE} color={iconColor} />\n </Pressable>\n ) : null;\n\n if (route?.params?.hideNavigationHeader) {\n return <StatusBar style={isDark ? 'light' : 'dark'} />;\n }\n\n const hideBrandTitle = showChatToolbar && title === 'Yantra';\n const titleSlot =\n showTitle && !hideBrandTitle ? (\n <Text\n style={[\n styles.title,\n titleAlignLeft ? styles.titleAlignLeft : styles.titleAlignCenter,\n { color: titleColor },\n optionTitleStyle,\n ]}\n numberOfLines={1}\n ellipsizeMode=\"tail\"\n >\n {title}\n </Text>\n ) : null;\n\n return (\n <>\n <StatusBar style={isDark ? 'light' : 'dark'} />\n <SafeAreaView edges={['top']} style={{ backgroundColor: surfaceColor }}>\n <View\n onStartShouldSetResponderCapture={() => {\n dismissKeyboard();\n return false;\n }}\n style={[\n styles.row,\n {\n backgroundColor: surfaceColor,\n borderBottomColor: dividerColor,\n paddingTop: insets.top > 0 ? 0 : 6,\n },\n options?.headerStyle ?? null,\n ]}\n >\n <View style={styles.leftSlot}>{leftSlot}</View>\n\n {showChatToolbar ? (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={styles.toolsScroll}\n contentContainerStyle={styles.toolsContent}\n keyboardShouldPersistTaps=\"handled\"\n >\n <HeaderTasksButton isDark={isDark} />\n <HeaderSkillsButton isDark={isDark} />\n </ScrollView>\n ) : (\n <View style={[styles.titleSlot, titleAlignLeft && styles.titleSlotLeft]}>{titleSlot}</View>\n )}\n\n <View style={styles.rightSlot}>\n {showChatToolbar ? (\n <View style={styles.rightActions}>\n {showGateway ? <GatewayConnector /> : null}\n <HeaderMoreMenu isDark={isDark} onNewChat={showNewChat ? handleNewChat : undefined} />\n </View>\n ) : showNewChat ? (\n <HeaderToolbarButton\n icon=\"chat-plus-outline\"\n onPress={handleNewChat}\n accessibilityLabel=\"New chat\"\n isDark={isDark}\n />\n ) : null}\n </View>\n </View>\n </SafeAreaView>\n </>\n );\n};\n\nconst styles = StyleSheet.create({\n row: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingLeft: 4,\n paddingRight: 6,\n paddingVertical: 4,\n minHeight: 48,\n borderBottomWidth: StyleSheet.hairlineWidth,\n overflow: 'visible',\n },\n leftSlot: {\n flexDirection: 'row',\n alignItems: 'center',\n flexShrink: 0,\n },\n toolsScroll: {\n flex: 1,\n minWidth: 0,\n },\n toolsContent: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingLeft: 2,\n paddingRight: 8,\n gap: 2,\n },\n titleSlot: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 8,\n minWidth: 0,\n },\n titleSlotLeft: {\n alignItems: 'flex-start',\n },\n rightSlot: {\n flexShrink: 0,\n alignItems: 'flex-end',\n justifyContent: 'center',\n paddingLeft: 4,\n },\n rightActions: {\n flexDirection: 'row',\n alignItems: 'center',\n flexShrink: 0,\n },\n title: {\n fontSize: 17,\n fontWeight: '700',\n letterSpacing: -0.2,\n flexShrink: 1,\n },\n titleAlignCenter: {\n textAlign: 'center',\n },\n titleAlignLeft: {\n textAlign: 'left',\n },\n iconButton: {\n width: 36,\n height: 36,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 10,\n },\n iconButtonPressed: {\n opacity: 0.6,\n },\n});\n\nexport default React.memo(NavigationHeader);\n"],"names":["_a","_b","React"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {jsxs,jsx,Fragment}from'react/jsx-runtime';import
|
|
1
|
+
import {jsxs,jsx,Fragment}from'react/jsx-runtime';import React__default,{useState,useMemo,useCallback}from'react';import {useColorScheme,useWindowDimensions,View,StyleSheet,Pressable,Text,TextInput,ScrollView}from'react-native';import {useNavigation,useRoute,CommonActions}from'@react-navigation/native';import {MaterialCommunityIcons}from'@expo/vector-icons';import {Image}from'expo-image';import {v4}from'uuid';import {config}from'../../config/env-config.js';import {mobileTokens}from'../../theme/mobileTokens.js';import {useChatMutations}from'../../hooks/useChatApi.js';import {resolveSurfaceUrl}from'./resolveSurfaceUrl.js';import {useAppFavorites}from'./appFavorites.js';import {APP_ART}from'./appArt.js';import {filterMobileApps,MOBILE_APP_CATALOG,APP_GROUP_ART}from'./mobileAppCatalog.js';var __defProp = Object.defineProperty;
|
|
2
2
|
var __defProps = Object.defineProperties;
|
|
3
3
|
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
4
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
@@ -236,7 +236,7 @@ function AppsCatalog({
|
|
|
236
236
|
}], children: apps.map((app) => /* @__PURE__ */ jsx(AppCard, { app, width: cardWidth, theme: cardTheme, favorite: favorites.has(app.key), onOpen: openApp, onToggleFavorite: toggleFavorite }, app.key)) }) })
|
|
237
237
|
] });
|
|
238
238
|
}
|
|
239
|
-
const AppCard =
|
|
239
|
+
const AppCard = React__default.memo(function AppCard2({
|
|
240
240
|
app,
|
|
241
241
|
width,
|
|
242
242
|
theme,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppsCatalog.js","sources":["../../../src/features/apps/AppsCatalog.tsx"],"sourcesContent":["/**\n * Full-screen Apps catalog: All / Favorites tabs, search, then a flat grid of\n * poster cards (square artwork tile, bold name, group caption) - the\n * game-launcher layout, so 30 apps scan as one dense wall instead of six\n * short sections. Tapping a card opens its native surface or a new chat.\n *\n * Tile artwork comes from `appArt.ts` (bundled 480px illustrations, one per\n * app). A tile without artwork falls back to the group's poster color with\n * the app glyph centered and a large faded copy bleeding off the corner.\n */\nimport React, { useCallback, useMemo, useState } from 'react';\nimport {\n Pressable,\n ScrollView,\n StyleSheet,\n Text,\n TextInput,\n View,\n useColorScheme,\n useWindowDimensions,\n} from 'react-native';\nimport { CommonActions, useNavigation, useRoute } from '@react-navigation/native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { Image } from 'expo-image';\nimport { v4 as uuidv4 } from 'uuid';\nimport { config } from '../../config/env-config';\nimport { mobileTokens } from '../../theme/mobileTokens';\nimport { useChatMutations } from '../../hooks/useChatApi';\nimport { resolveSurfaceUrl } from './resolveSurfaceUrl';\nimport { useAppFavorites } from './appFavorites';\nimport { APP_ART } from './appArt';\nimport {\n APP_GROUP_ART,\n filterMobileApps,\n MOBILE_APP_CATALOG,\n type AppsTab,\n type MobileAppItem,\n} from './mobileAppCatalog';\n\nconst H_PAD = 16;\nconst GAP = 12;\n/** Narrowest card that still fits a 2-line name; more columns on wider screens. */\nconst MIN_CARD = 104;\n\ninterface CardTheme {\n surface: string;\n border: string;\n foreground: string;\n muted: string;\n pressed: string;\n}\n\nfunction buildChannelTitle(channelId: string): string {\n return `chat-channel-${channelId}`;\n}\n\nexport function AppsCatalog({ orgName: orgNameProp }: { orgName?: string | null }) {\n const navigation = useNavigation<any>();\n const route = useRoute<any>();\n const colorScheme = useColorScheme();\n const isDark = colorScheme === 'dark';\n const { createChannel } = useChatMutations();\n const { width: screenWidth } = useWindowDimensions();\n const [query, setQuery] = useState('');\n const [tab, setTab] = useState<AppsTab>('all');\n const { favorites, toggle: toggleFavorite } = useAppFavorites();\n\n const orgName = useMemo(() => {\n if (typeof orgNameProp === 'string' && orgNameProp.trim()) return orgNameProp.trim();\n const raw = (route?.params?.orgName as string | undefined) ?? '';\n return typeof raw === 'string' && raw.trim() ? raw.trim() : null;\n }, [orgNameProp, route?.params?.orgName]);\n\n const apps = useMemo(() => filterMobileApps(MOBILE_APP_CATALOG, query, tab, favorites), [favorites, query, tab]);\n const columns = Math.max(3, Math.min(6, Math.floor((screenWidth - H_PAD * 2 + GAP) / (MIN_CARD + GAP))));\n const cardWidth = Math.floor((screenWidth - H_PAD * 2 - GAP * (columns - 1)) / columns);\n\n const muted = isDark ? '#94a3b8' : mobileTokens.color.textMuted;\n const foreground = isDark ? '#e2e8f0' : mobileTokens.color.text;\n const surface = isDark ? '#111827' : mobileTokens.color.surface;\n const screenBg = isDark ? '#0f172a' : mobileTokens.color.bg;\n const borderColor = isDark ? 'rgba(148,163,184,0.22)' : mobileTokens.color.border;\n const fieldBg = isDark ? '#1e293b' : mobileTokens.color.surface;\n const cardTheme: CardTheme = {\n surface,\n border: borderColor,\n foreground,\n muted,\n pressed: isDark ? 'rgba(148,163,184,0.10)' : 'rgba(15,23,42,0.05)',\n };\n const segmentBg = isDark ? 'rgba(148,163,184,0.12)' : mobileTokens.color.surface;\n const segmentActiveBg = isDark ? 'rgba(148,163,184,0.24)' : mobileTokens.color.surface;\n const emptyMarkBg = isDark ? 'rgba(234,88,12,0.22)' : mobileTokens.color.primarySoft;\n\n const openApp = useCallback(\n (app: MobileAppItem) => {\n const channelId = uuidv4();\n const params: Record<string, unknown> = {\n orgName: orgName ?? undefined,\n channelId,\n appTitle: app.label,\n };\n\n if (app.nativeRoute === 'characters-native') {\n // Same wiring as AppsMenu: the tile opens the self-contained native\n // character studio (never a chat with the tile's prompt). The host\n // contributes only the session token + subgraph endpoint, built in\n // the screen, so no manifest/handoff params are needed here.\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.CharactersNative',\n params,\n }),\n );\n return;\n }\n\n if (app.nativeRoute === 'canvas-native') {\n // Web canvas opens the boards grid first. Do not mint a chat\n // channelId here — that id is not an index row, and passing it\n // looks like a deep link into a board that does not exist.\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.CanvasNative',\n params: { orgName: orgName ?? undefined, appTitle: 'Canvas' },\n }),\n );\n return;\n }\n\n if (app.nativeRoute === 'chat-native') {\n // Opens the conversation list. Deliberately no channelId: the\n // uuid minted above is an AI-chat channel, not a messenger\n // channel, and passing it would read as a deep link into a\n // thread that does not exist.\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.ChatNative',\n params: { orgName: orgName ?? undefined },\n }),\n );\n return;\n }\n\n if (app.nativeRoute === 'billing-native') {\n navigation.navigate('MainStack.Billing', { orgName: orgName ?? undefined });\n return;\n }\n\n if (app.nativeRoute === 'shopping-native') {\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.ShoppingNative',\n params: { orgName: orgName ?? undefined, appTitle: 'Shop' },\n }),\n );\n return;\n }\n\n if (app.nativeRoute === 'travel-native') {\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.TravelNative',\n params: { orgName: orgName ?? undefined, appTitle: 'Travel' },\n }),\n );\n return;\n }\n\n if (app.nativeRoute === 'job-search-native') {\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.JobSearchNative',\n params: { orgName: orgName ?? undefined, appTitle: 'Job Search' },\n }),\n );\n return;\n }\n\n if (app.nativeRoute === 'resume-native') {\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.ResumeNative',\n params: { orgName: orgName ?? undefined, appTitle: 'Resume' },\n }),\n );\n return;\n }\n\n if (app.nativeRoute === 'webbuilder') {\n const surfaceUrl = resolveSurfaceUrl(app, config);\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.WebBuilder',\n params: surfaceUrl ? { ...params, url: surfaceUrl } : params,\n }),\n );\n return;\n }\n\n void createChannel({\n id: channelId,\n title: buildChannelTitle(channelId),\n isShared: false,\n sharedSlug: null,\n isArchived: false,\n isPinned: false,\n model: null,\n systemPrompt: null,\n orgName,\n } as any).catch((err) => {\n console.error('[AppsCatalog] createChannel failed:', err);\n });\n\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.Chat',\n params: {\n ...params,\n initialQuery: app.prompt,\n initialMode: 'chat',\n },\n }),\n );\n },\n [createChannel, navigation, orgName],\n );\n\n const emptyState =\n tab === 'favorites' && !query.trim()\n ? {\n icon: 'heart-outline' as const,\n title: 'No favorites yet',\n hint: 'Tap the heart on any app to keep it here.',\n }\n : {\n icon: 'magnify' as const,\n title: 'No apps match that search',\n hint: tab === 'favorites' ? 'Try All apps, or a shorter name.' : 'Try a shorter name.',\n };\n\n return (\n <View style={[styles.root, { backgroundColor: screenBg }]}>\n <View style={[styles.segment, { backgroundColor: segmentBg, borderColor }]} accessibilityRole=\"tablist\">\n {(\n [\n { key: 'all', label: 'All apps' },\n { key: 'favorites', label: 'Favorites' },\n ] as const\n ).map(({ key, label }) => {\n const selected = tab === key;\n return (\n <Pressable\n key={key}\n onPress={() => setTab(key)}\n accessibilityRole=\"tab\"\n accessibilityState={{ selected }}\n style={[\n styles.segmentItem,\n selected && [styles.segmentItemActive, { backgroundColor: segmentActiveBg }],\n ]}\n >\n <Text\n style={[\n styles.segmentLabel,\n { color: selected ? foreground : muted },\n selected && styles.segmentLabelActive,\n ]}\n >\n {label}\n </Text>\n </Pressable>\n );\n })}\n </View>\n <View style={[styles.searchWrap, { backgroundColor: fieldBg, borderColor }]}>\n <MaterialCommunityIcons name=\"magnify\" size={18} color={muted} />\n <TextInput\n value={query}\n onChangeText={setQuery}\n placeholder=\"Search apps\"\n placeholderTextColor={muted}\n autoCorrect={false}\n autoCapitalize=\"none\"\n clearButtonMode=\"while-editing\"\n style={[styles.searchInput, { color: foreground }]}\n />\n </View>\n <ScrollView keyboardShouldPersistTaps=\"handled\" contentContainerStyle={styles.list}>\n {apps.length === 0 ? (\n <View style={styles.empty}>\n <View style={[styles.emptyMark, { backgroundColor: emptyMarkBg }]}>\n <MaterialCommunityIcons\n name={emptyState.icon}\n size={26}\n color={mobileTokens.color.primary}\n />\n </View>\n <Text style={[styles.emptyTitle, { color: foreground }]}>{emptyState.title}</Text>\n <Text style={[styles.emptyHint, { color: muted }]}>{emptyState.hint}</Text>\n </View>\n ) : (\n <View style={[styles.grid, { gap: GAP }]}>\n {apps.map((app) => (\n <AppCard\n key={app.key}\n app={app}\n width={cardWidth}\n theme={cardTheme}\n favorite={favorites.has(app.key)}\n onOpen={openApp}\n onToggleFavorite={toggleFavorite}\n />\n ))}\n </View>\n )}\n </ScrollView>\n </View>\n );\n}\n\nconst AppCard = React.memo(function AppCard({\n app,\n width,\n theme,\n favorite,\n onOpen,\n onToggleFavorite,\n}: {\n app: MobileAppItem;\n width: number;\n theme: CardTheme;\n favorite: boolean;\n onOpen: (app: MobileAppItem) => void;\n onToggleFavorite: (key: string) => void;\n}) {\n const poster = APP_GROUP_ART[app.group];\n const artwork = APP_ART[app.key];\n // Glyph scales with the tile so a 3-column phone and a 5-column tablet read alike.\n const glyph = Math.round(width * 0.36);\n const echo = Math.round(width * 0.95);\n return (\n <Pressable\n onPress={() => onOpen(app)}\n accessibilityRole=\"button\"\n accessibilityLabel={`${app.label}, ${app.group}`}\n accessibilityHint=\"Opens the app\"\n style={({ pressed }) => [\n styles.card,\n { width, backgroundColor: theme.surface, borderColor: theme.border },\n pressed && { backgroundColor: theme.pressed, transform: [{ scale: 0.97 }] },\n ]}\n >\n <View style={[styles.tile, { backgroundColor: poster.base }]}>\n {artwork ? (\n <Image\n source={artwork}\n style={StyleSheet.absoluteFill}\n contentFit=\"cover\"\n transition={120}\n accessibilityIgnoresInvertColors\n />\n ) : (\n <>\n <View\n style={[\n styles.tileHighlight,\n { width: width * 0.9, height: width * 0.9, borderRadius: width },\n ]}\n />\n <MaterialCommunityIcons\n name={app.icon}\n size={echo}\n color={poster.glow}\n style={[styles.tileEcho, { right: -echo * 0.28, bottom: -echo * 0.3 }]}\n />\n <MaterialCommunityIcons name={app.icon} size={glyph} color=\"#ffffff\" style={styles.tileGlyph} />\n </>\n )}\n <Pressable\n onPress={() => onToggleFavorite(app.key)}\n hitSlop={8}\n accessibilityRole=\"button\"\n accessibilityLabel={\n favorite ? `Remove ${app.label} from favorites` : `Add ${app.label} to favorites`\n }\n accessibilityState={{ selected: favorite }}\n style={({ pressed }) => [styles.heart, pressed && styles.heartPressed]}\n >\n <MaterialCommunityIcons\n name={favorite ? 'heart' : 'heart-outline'}\n size={16}\n color={favorite ? '#fb7185' : '#ffffff'}\n />\n </Pressable>\n </View>\n <View style={styles.cardBody}>\n <Text style={[styles.cardTitle, { color: theme.foreground }]} numberOfLines={2}>\n {app.label}\n </Text>\n <Text style={[styles.cardCaption, { color: theme.muted }]} numberOfLines={1}>\n {app.group}\n </Text>\n </View>\n </Pressable>\n );\n});\n\nconst styles = StyleSheet.create({\n root: {\n flex: 1,\n },\n segment: {\n flexDirection: 'row',\n alignSelf: 'center',\n marginTop: 12,\n padding: 4,\n borderRadius: mobileTokens.radius.pill,\n borderWidth: 1,\n minWidth: 240,\n maxWidth: 320,\n width: '70%',\n },\n segmentItem: {\n flex: 1,\n minHeight: 36,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: mobileTokens.radius.pill,\n },\n segmentItemActive: {\n ...mobileTokens.shadow.card,\n },\n segmentLabel: {\n fontSize: 15,\n fontWeight: '600',\n },\n segmentLabelActive: {\n fontWeight: '700',\n },\n searchWrap: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n marginHorizontal: H_PAD,\n marginTop: 12,\n marginBottom: 4,\n borderWidth: 1,\n borderRadius: mobileTokens.radius.md,\n paddingHorizontal: 12,\n minHeight: 44,\n },\n searchInput: {\n flex: 1,\n fontSize: 15,\n paddingVertical: 8,\n },\n list: {\n paddingHorizontal: H_PAD,\n paddingTop: 12,\n paddingBottom: 32,\n },\n grid: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n alignItems: 'stretch',\n },\n card: {\n borderRadius: mobileTokens.radius.lg,\n borderWidth: 1,\n overflow: 'hidden',\n },\n tile: {\n aspectRatio: 1,\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n },\n tileHighlight: {\n position: 'absolute',\n top: '-45%',\n left: '-35%',\n backgroundColor: 'rgba(255,255,255,0.12)',\n },\n tileEcho: {\n position: 'absolute',\n opacity: 0.28,\n },\n tileGlyph: {\n textShadowColor: 'rgba(15,23,42,0.28)',\n textShadowOffset: { width: 0, height: 2 },\n textShadowRadius: 6,\n },\n heart: {\n position: 'absolute',\n top: 8,\n right: 8,\n width: 32,\n height: 32,\n borderRadius: 16,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgba(15,23,42,0.36)',\n },\n heartPressed: {\n backgroundColor: 'rgba(15,23,42,0.55)',\n },\n cardBody: {\n paddingHorizontal: 10,\n paddingTop: 10,\n paddingBottom: 12,\n gap: 3,\n },\n cardTitle: {\n fontSize: 14,\n fontWeight: '700',\n lineHeight: 18,\n // Two lines reserved so every row lines up whether a name wraps or not.\n minHeight: 36,\n },\n cardCaption: {\n fontSize: 11,\n fontWeight: '600',\n letterSpacing: 0.8,\n textTransform: 'uppercase',\n },\n empty: {\n alignItems: 'center',\n paddingTop: 56,\n paddingHorizontal: 32,\n gap: 6,\n },\n emptyMark: {\n width: 56,\n height: 56,\n borderRadius: 28,\n alignItems: 'center',\n justifyContent: 'center',\n marginBottom: 8,\n },\n emptyTitle: {\n fontSize: 16,\n fontWeight: '700',\n },\n emptyHint: {\n fontSize: 14,\n textAlign: 'center',\n lineHeight: 20,\n },\n});\n"],"names":["_a","uuidv4","AppCard"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AppsCatalog.js","sources":["../../../src/features/apps/AppsCatalog.tsx"],"sourcesContent":["/**\n * Full-screen Apps catalog: All / Favorites tabs, search, then a flat grid of\n * poster cards (square artwork tile, bold name, group caption) - the\n * game-launcher layout, so 30 apps scan as one dense wall instead of six\n * short sections. Tapping a card opens its native surface or a new chat.\n *\n * Tile artwork comes from `appArt.ts` (bundled 480px illustrations, one per\n * app). A tile without artwork falls back to the group's poster color with\n * the app glyph centered and a large faded copy bleeding off the corner.\n */\nimport React, { useCallback, useMemo, useState } from 'react';\nimport {\n Pressable,\n ScrollView,\n StyleSheet,\n Text,\n TextInput,\n View,\n useColorScheme,\n useWindowDimensions,\n} from 'react-native';\nimport { CommonActions, useNavigation, useRoute } from '@react-navigation/native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { Image } from 'expo-image';\nimport { v4 as uuidv4 } from 'uuid';\nimport { config } from '../../config/env-config';\nimport { mobileTokens } from '../../theme/mobileTokens';\nimport { useChatMutations } from '../../hooks/useChatApi';\nimport { resolveSurfaceUrl } from './resolveSurfaceUrl';\nimport { useAppFavorites } from './appFavorites';\nimport { APP_ART } from './appArt';\nimport {\n APP_GROUP_ART,\n filterMobileApps,\n MOBILE_APP_CATALOG,\n type AppsTab,\n type MobileAppItem,\n} from './mobileAppCatalog';\n\nconst H_PAD = 16;\nconst GAP = 12;\n/** Narrowest card that still fits a 2-line name; more columns on wider screens. */\nconst MIN_CARD = 104;\n\ninterface CardTheme {\n surface: string;\n border: string;\n foreground: string;\n muted: string;\n pressed: string;\n}\n\nfunction buildChannelTitle(channelId: string): string {\n return `chat-channel-${channelId}`;\n}\n\nexport function AppsCatalog({ orgName: orgNameProp }: { orgName?: string | null }) {\n const navigation = useNavigation<any>();\n const route = useRoute<any>();\n const colorScheme = useColorScheme();\n const isDark = colorScheme === 'dark';\n const { createChannel } = useChatMutations();\n const { width: screenWidth } = useWindowDimensions();\n const [query, setQuery] = useState('');\n const [tab, setTab] = useState<AppsTab>('all');\n const { favorites, toggle: toggleFavorite } = useAppFavorites();\n\n const orgName = useMemo(() => {\n if (typeof orgNameProp === 'string' && orgNameProp.trim()) return orgNameProp.trim();\n const raw = (route?.params?.orgName as string | undefined) ?? '';\n return typeof raw === 'string' && raw.trim() ? raw.trim() : null;\n }, [orgNameProp, route?.params?.orgName]);\n\n const apps = useMemo(() => filterMobileApps(MOBILE_APP_CATALOG, query, tab, favorites), [favorites, query, tab]);\n const columns = Math.max(3, Math.min(6, Math.floor((screenWidth - H_PAD * 2 + GAP) / (MIN_CARD + GAP))));\n const cardWidth = Math.floor((screenWidth - H_PAD * 2 - GAP * (columns - 1)) / columns);\n\n const muted = isDark ? '#94a3b8' : mobileTokens.color.textMuted;\n const foreground = isDark ? '#e2e8f0' : mobileTokens.color.text;\n const surface = isDark ? '#111827' : mobileTokens.color.surface;\n const screenBg = isDark ? '#0f172a' : mobileTokens.color.bg;\n const borderColor = isDark ? 'rgba(148,163,184,0.22)' : mobileTokens.color.border;\n const fieldBg = isDark ? '#1e293b' : mobileTokens.color.surface;\n const cardTheme: CardTheme = {\n surface,\n border: borderColor,\n foreground,\n muted,\n pressed: isDark ? 'rgba(148,163,184,0.10)' : 'rgba(15,23,42,0.05)',\n };\n const segmentBg = isDark ? 'rgba(148,163,184,0.12)' : mobileTokens.color.surface;\n const segmentActiveBg = isDark ? 'rgba(148,163,184,0.24)' : mobileTokens.color.surface;\n const emptyMarkBg = isDark ? 'rgba(234,88,12,0.22)' : mobileTokens.color.primarySoft;\n\n const openApp = useCallback(\n (app: MobileAppItem) => {\n const channelId = uuidv4();\n const params: Record<string, unknown> = {\n orgName: orgName ?? undefined,\n channelId,\n appTitle: app.label,\n };\n\n if (app.nativeRoute === 'characters-native') {\n // Same wiring as AppsMenu: the tile opens the self-contained native\n // character studio (never a chat with the tile's prompt). The host\n // contributes only the session token + subgraph endpoint, built in\n // the screen, so no manifest/handoff params are needed here.\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.CharactersNative',\n params,\n }),\n );\n return;\n }\n\n if (app.nativeRoute === 'canvas-native') {\n // Web canvas opens the boards grid first. Do not mint a chat\n // channelId here — that id is not an index row, and passing it\n // looks like a deep link into a board that does not exist.\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.CanvasNative',\n params: { orgName: orgName ?? undefined, appTitle: 'Canvas' },\n }),\n );\n return;\n }\n\n if (app.nativeRoute === 'chat-native') {\n // Opens the conversation list. Deliberately no channelId: the\n // uuid minted above is an AI-chat channel, not a messenger\n // channel, and passing it would read as a deep link into a\n // thread that does not exist.\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.ChatNative',\n params: { orgName: orgName ?? undefined },\n }),\n );\n return;\n }\n\n if (app.nativeRoute === 'billing-native') {\n navigation.navigate('MainStack.Billing', { orgName: orgName ?? undefined });\n return;\n }\n\n if (app.nativeRoute === 'shopping-native') {\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.ShoppingNative',\n params: { orgName: orgName ?? undefined, appTitle: 'Shop' },\n }),\n );\n return;\n }\n\n if (app.nativeRoute === 'travel-native') {\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.TravelNative',\n params: { orgName: orgName ?? undefined, appTitle: 'Travel' },\n }),\n );\n return;\n }\n\n if (app.nativeRoute === 'job-search-native') {\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.JobSearchNative',\n params: { orgName: orgName ?? undefined, appTitle: 'Job Search' },\n }),\n );\n return;\n }\n\n if (app.nativeRoute === 'resume-native') {\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.ResumeNative',\n params: { orgName: orgName ?? undefined, appTitle: 'Resume' },\n }),\n );\n return;\n }\n\n if (app.nativeRoute === 'webbuilder') {\n const surfaceUrl = resolveSurfaceUrl(app, config);\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.WebBuilder',\n params: surfaceUrl ? { ...params, url: surfaceUrl } : params,\n }),\n );\n return;\n }\n\n void createChannel({\n id: channelId,\n title: buildChannelTitle(channelId),\n isShared: false,\n sharedSlug: null,\n isArchived: false,\n isPinned: false,\n model: null,\n systemPrompt: null,\n orgName,\n } as any).catch((err) => {\n console.error('[AppsCatalog] createChannel failed:', err);\n });\n\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.Chat',\n params: {\n ...params,\n initialQuery: app.prompt,\n initialMode: 'chat',\n },\n }),\n );\n },\n [createChannel, navigation, orgName],\n );\n\n const emptyState =\n tab === 'favorites' && !query.trim()\n ? {\n icon: 'heart-outline' as const,\n title: 'No favorites yet',\n hint: 'Tap the heart on any app to keep it here.',\n }\n : {\n icon: 'magnify' as const,\n title: 'No apps match that search',\n hint: tab === 'favorites' ? 'Try All apps, or a shorter name.' : 'Try a shorter name.',\n };\n\n return (\n <View style={[styles.root, { backgroundColor: screenBg }]}>\n <View style={[styles.segment, { backgroundColor: segmentBg, borderColor }]} accessibilityRole=\"tablist\">\n {(\n [\n { key: 'all', label: 'All apps' },\n { key: 'favorites', label: 'Favorites' },\n ] as const\n ).map(({ key, label }) => {\n const selected = tab === key;\n return (\n <Pressable\n key={key}\n onPress={() => setTab(key)}\n accessibilityRole=\"tab\"\n accessibilityState={{ selected }}\n style={[\n styles.segmentItem,\n selected && [styles.segmentItemActive, { backgroundColor: segmentActiveBg }],\n ]}\n >\n <Text\n style={[\n styles.segmentLabel,\n { color: selected ? foreground : muted },\n selected && styles.segmentLabelActive,\n ]}\n >\n {label}\n </Text>\n </Pressable>\n );\n })}\n </View>\n <View style={[styles.searchWrap, { backgroundColor: fieldBg, borderColor }]}>\n <MaterialCommunityIcons name=\"magnify\" size={18} color={muted} />\n <TextInput\n value={query}\n onChangeText={setQuery}\n placeholder=\"Search apps\"\n placeholderTextColor={muted}\n autoCorrect={false}\n autoCapitalize=\"none\"\n clearButtonMode=\"while-editing\"\n style={[styles.searchInput, { color: foreground }]}\n />\n </View>\n <ScrollView keyboardShouldPersistTaps=\"handled\" contentContainerStyle={styles.list}>\n {apps.length === 0 ? (\n <View style={styles.empty}>\n <View style={[styles.emptyMark, { backgroundColor: emptyMarkBg }]}>\n <MaterialCommunityIcons\n name={emptyState.icon}\n size={26}\n color={mobileTokens.color.primary}\n />\n </View>\n <Text style={[styles.emptyTitle, { color: foreground }]}>{emptyState.title}</Text>\n <Text style={[styles.emptyHint, { color: muted }]}>{emptyState.hint}</Text>\n </View>\n ) : (\n <View style={[styles.grid, { gap: GAP }]}>\n {apps.map((app) => (\n <AppCard\n key={app.key}\n app={app}\n width={cardWidth}\n theme={cardTheme}\n favorite={favorites.has(app.key)}\n onOpen={openApp}\n onToggleFavorite={toggleFavorite}\n />\n ))}\n </View>\n )}\n </ScrollView>\n </View>\n );\n}\n\nconst AppCard = React.memo(function AppCard({\n app,\n width,\n theme,\n favorite,\n onOpen,\n onToggleFavorite,\n}: {\n app: MobileAppItem;\n width: number;\n theme: CardTheme;\n favorite: boolean;\n onOpen: (app: MobileAppItem) => void;\n onToggleFavorite: (key: string) => void;\n}) {\n const poster = APP_GROUP_ART[app.group];\n const artwork = APP_ART[app.key];\n // Glyph scales with the tile so a 3-column phone and a 5-column tablet read alike.\n const glyph = Math.round(width * 0.36);\n const echo = Math.round(width * 0.95);\n return (\n <Pressable\n onPress={() => onOpen(app)}\n accessibilityRole=\"button\"\n accessibilityLabel={`${app.label}, ${app.group}`}\n accessibilityHint=\"Opens the app\"\n style={({ pressed }) => [\n styles.card,\n { width, backgroundColor: theme.surface, borderColor: theme.border },\n pressed && { backgroundColor: theme.pressed, transform: [{ scale: 0.97 }] },\n ]}\n >\n <View style={[styles.tile, { backgroundColor: poster.base }]}>\n {artwork ? (\n <Image\n source={artwork}\n style={StyleSheet.absoluteFill}\n contentFit=\"cover\"\n transition={120}\n accessibilityIgnoresInvertColors\n />\n ) : (\n <>\n <View\n style={[\n styles.tileHighlight,\n { width: width * 0.9, height: width * 0.9, borderRadius: width },\n ]}\n />\n <MaterialCommunityIcons\n name={app.icon}\n size={echo}\n color={poster.glow}\n style={[styles.tileEcho, { right: -echo * 0.28, bottom: -echo * 0.3 }]}\n />\n <MaterialCommunityIcons name={app.icon} size={glyph} color=\"#ffffff\" style={styles.tileGlyph} />\n </>\n )}\n <Pressable\n onPress={() => onToggleFavorite(app.key)}\n hitSlop={8}\n accessibilityRole=\"button\"\n accessibilityLabel={\n favorite ? `Remove ${app.label} from favorites` : `Add ${app.label} to favorites`\n }\n accessibilityState={{ selected: favorite }}\n style={({ pressed }) => [styles.heart, pressed && styles.heartPressed]}\n >\n <MaterialCommunityIcons\n name={favorite ? 'heart' : 'heart-outline'}\n size={16}\n color={favorite ? '#fb7185' : '#ffffff'}\n />\n </Pressable>\n </View>\n <View style={styles.cardBody}>\n <Text style={[styles.cardTitle, { color: theme.foreground }]} numberOfLines={2}>\n {app.label}\n </Text>\n <Text style={[styles.cardCaption, { color: theme.muted }]} numberOfLines={1}>\n {app.group}\n </Text>\n </View>\n </Pressable>\n );\n});\n\nconst styles = StyleSheet.create({\n root: {\n flex: 1,\n },\n segment: {\n flexDirection: 'row',\n alignSelf: 'center',\n marginTop: 12,\n padding: 4,\n borderRadius: mobileTokens.radius.pill,\n borderWidth: 1,\n minWidth: 240,\n maxWidth: 320,\n width: '70%',\n },\n segmentItem: {\n flex: 1,\n minHeight: 36,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: mobileTokens.radius.pill,\n },\n segmentItemActive: {\n ...mobileTokens.shadow.card,\n },\n segmentLabel: {\n fontSize: 15,\n fontWeight: '600',\n },\n segmentLabelActive: {\n fontWeight: '700',\n },\n searchWrap: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n marginHorizontal: H_PAD,\n marginTop: 12,\n marginBottom: 4,\n borderWidth: 1,\n borderRadius: mobileTokens.radius.md,\n paddingHorizontal: 12,\n minHeight: 44,\n },\n searchInput: {\n flex: 1,\n fontSize: 15,\n paddingVertical: 8,\n },\n list: {\n paddingHorizontal: H_PAD,\n paddingTop: 12,\n paddingBottom: 32,\n },\n grid: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n alignItems: 'stretch',\n },\n card: {\n borderRadius: mobileTokens.radius.lg,\n borderWidth: 1,\n overflow: 'hidden',\n },\n tile: {\n aspectRatio: 1,\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n },\n tileHighlight: {\n position: 'absolute',\n top: '-45%',\n left: '-35%',\n backgroundColor: 'rgba(255,255,255,0.12)',\n },\n tileEcho: {\n position: 'absolute',\n opacity: 0.28,\n },\n tileGlyph: {\n textShadowColor: 'rgba(15,23,42,0.28)',\n textShadowOffset: { width: 0, height: 2 },\n textShadowRadius: 6,\n },\n heart: {\n position: 'absolute',\n top: 8,\n right: 8,\n width: 32,\n height: 32,\n borderRadius: 16,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgba(15,23,42,0.36)',\n },\n heartPressed: {\n backgroundColor: 'rgba(15,23,42,0.55)',\n },\n cardBody: {\n paddingHorizontal: 10,\n paddingTop: 10,\n paddingBottom: 12,\n gap: 3,\n },\n cardTitle: {\n fontSize: 14,\n fontWeight: '700',\n lineHeight: 18,\n // Two lines reserved so every row lines up whether a name wraps or not.\n minHeight: 36,\n },\n cardCaption: {\n fontSize: 11,\n fontWeight: '600',\n letterSpacing: 0.8,\n textTransform: 'uppercase',\n },\n empty: {\n alignItems: 'center',\n paddingTop: 56,\n paddingHorizontal: 32,\n gap: 6,\n },\n emptyMark: {\n width: 56,\n height: 56,\n borderRadius: 28,\n alignItems: 'center',\n justifyContent: 'center',\n marginBottom: 8,\n },\n emptyTitle: {\n fontSize: 16,\n fontWeight: '700',\n },\n emptyHint: {\n fontSize: 14,\n textAlign: 'center',\n lineHeight: 20,\n },\n});\n"],"names":["_a","uuidv4","React","AppCard"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React__default from'react';var __defProp = Object.defineProperty;
|
|
2
2
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
3
|
var __publicField = (obj, key, value) => __defNormalProp(obj, key + "" , value);
|
|
4
|
-
class MicErrorBoundary extends
|
|
4
|
+
class MicErrorBoundary extends React__default.Component {
|
|
5
5
|
constructor() {
|
|
6
6
|
super(...arguments);
|
|
7
7
|
__publicField(this, "state", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MicErrorBoundary.js","sources":["../../../src/features/audio-input/MicErrorBoundary.tsx"],"sourcesContent":["import React from 'react';\n\ninterface MicErrorBoundaryProps {\n /**\n * Soft-cancel callback fired when a render-time error is caught.\n * Host screens use this to dismiss the panel so the composer reappears.\n */\n onCancel: () => void;\n /** Optional error sink so the host can surface a banner / toast. */\n onError?: (message: string) => void;\n children: React.ReactNode;\n}\n\ninterface MicErrorBoundaryState {\n hasError: boolean;\n}\n\n/**\n * Catches synchronous render-time errors thrown by the audio-input subtree.\n *\n * Why it exists: `expo-audio`'s `useAudioRecorder(...)` constructs a native\n * `AVAudioRecorder` (iOS) / `MediaRecorder` (Android) during the React render\n * phase. If the native module isn't linked, the new-architecture bridge can't\n * resolve it, or the recorder constructor throws (e.g. permissions revoked\n * mid-session), the throw propagates out of render and — in a release build\n * with Hermes — kills the JS thread and crashes the app.\n *\n * Wrapping the panel in this boundary turns that hard crash into a graceful\n * cancel: the boundary catches the throw, hides the children, fires\n * `onError` (so the host can surface \"Voice input failed to start\"), and\n * fires `onCancel` (so the host can dismiss the panel and restore the\n * composer). The composer remains usable, the user sees a clear message,\n * and the app stays alive.\n *\n * This does NOT catch async/native crashes (e.g. AVAudioSession explosions\n * inside Objective-C). For those, the pre-permission gate in `handleMicPress`\n * is the primary defense — this boundary is the belt-and-suspenders fallback\n * for the JS render path.\n */\nexport class MicErrorBoundary extends React.Component<MicErrorBoundaryProps, MicErrorBoundaryState> {\n state: MicErrorBoundaryState = { hasError: false };\n\n static getDerivedStateFromError(): MicErrorBoundaryState {\n return { hasError: true };\n }\n\n componentDidCatch(error: Error) {\n const msg = error?.message ? error.message : 'Voice input failed to start.';\n try {\n this.props.onError?.(msg);\n } catch {\n /* host error sink should never re-throw, but stay defensive */\n }\n try {\n this.props.onCancel();\n } catch {\n /* same — onCancel is \"soft\", never re-throws */\n }\n }\n\n render() {\n if (this.state.hasError) {\n return null;\n }\n return this.props.children;\n }\n}\n\nexport default MicErrorBoundary;\n"],"names":[],"mappings":";;;AAqCa,MAAA,gBAAA,
|
|
1
|
+
{"version":3,"file":"MicErrorBoundary.js","sources":["../../../src/features/audio-input/MicErrorBoundary.tsx"],"sourcesContent":["import React from 'react';\n\ninterface MicErrorBoundaryProps {\n /**\n * Soft-cancel callback fired when a render-time error is caught.\n * Host screens use this to dismiss the panel so the composer reappears.\n */\n onCancel: () => void;\n /** Optional error sink so the host can surface a banner / toast. */\n onError?: (message: string) => void;\n children: React.ReactNode;\n}\n\ninterface MicErrorBoundaryState {\n hasError: boolean;\n}\n\n/**\n * Catches synchronous render-time errors thrown by the audio-input subtree.\n *\n * Why it exists: `expo-audio`'s `useAudioRecorder(...)` constructs a native\n * `AVAudioRecorder` (iOS) / `MediaRecorder` (Android) during the React render\n * phase. If the native module isn't linked, the new-architecture bridge can't\n * resolve it, or the recorder constructor throws (e.g. permissions revoked\n * mid-session), the throw propagates out of render and — in a release build\n * with Hermes — kills the JS thread and crashes the app.\n *\n * Wrapping the panel in this boundary turns that hard crash into a graceful\n * cancel: the boundary catches the throw, hides the children, fires\n * `onError` (so the host can surface \"Voice input failed to start\"), and\n * fires `onCancel` (so the host can dismiss the panel and restore the\n * composer). The composer remains usable, the user sees a clear message,\n * and the app stays alive.\n *\n * This does NOT catch async/native crashes (e.g. AVAudioSession explosions\n * inside Objective-C). For those, the pre-permission gate in `handleMicPress`\n * is the primary defense — this boundary is the belt-and-suspenders fallback\n * for the JS render path.\n */\nexport class MicErrorBoundary extends React.Component<MicErrorBoundaryProps, MicErrorBoundaryState> {\n state: MicErrorBoundaryState = { hasError: false };\n\n static getDerivedStateFromError(): MicErrorBoundaryState {\n return { hasError: true };\n }\n\n componentDidCatch(error: Error) {\n const msg = error?.message ? error.message : 'Voice input failed to start.';\n try {\n this.props.onError?.(msg);\n } catch {\n /* host error sink should never re-throw, but stay defensive */\n }\n try {\n this.props.onCancel();\n } catch {\n /* same — onCancel is \"soft\", never re-throws */\n }\n }\n\n render() {\n if (this.state.hasError) {\n return null;\n }\n return this.props.children;\n }\n}\n\nexport default MicErrorBoundary;\n"],"names":["React"],"mappings":";;;AAqCa,MAAA,gBAAA,SAAyBA,eAAM,SAAwD,CAAA;AAAA,EAA7F,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AACL,IAA+B,aAAA,CAAA,IAAA,EAAA,OAAA,EAAA;AAAA,MAC7B,QAAU,EAAA;AAAA,KACZ,CAAA;AAAA;AAAA,EACA,OAAO,wBAAkD,GAAA;AACvD,IAAO,OAAA;AAAA,MACL,QAAU,EAAA;AAAA,KACZ;AAAA;AACF,EACA,kBAAkB,KAAc,EAAA;AA9ClC,IAAA,IAAA,EAAA,EAAA,EAAA;AA+CI,IAAA,MAAM,GAAM,GAAA,CAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,OAAU,IAAA,KAAA,CAAM,OAAU,GAAA,8BAAA;AAC7C,IAAI,IAAA;AACF,MAAK,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAA,KAAA,EAAM,YAAX,IAAqB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,GAAA,CAAA;AAAA,KACf,CAAA,OAAA,CAAA,EAAA;AAAA;AAGR,IAAI,IAAA;AACF,MAAA,IAAA,CAAK,MAAM,QAAS,EAAA;AAAA,KACd,CAAA,OAAA,CAAA,EAAA;AAAA;AAER;AACF,EACA,MAAS,GAAA;AACP,IAAI,IAAA,IAAA,CAAK,MAAM,QAAU,EAAA;AACvB,MAAO,OAAA,IAAA;AAAA;AAET,IAAA,OAAO,KAAK,KAAM,CAAA,QAAA;AAAA;AAEtB"}
|