@adminide-stack/yantra-mobile 12.0.69-alpha.9 → 12.0.69
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/config/env-config.js +4 -0
- package/lib/config/env-config.js.map +1 -1
- package/lib/contexts/ChatLiveStreamContext.js +4 -1
- package/lib/contexts/ChatLiveStreamContext.js.map +1 -1
- package/lib/features/agent-chat/NativeAgentChat.js +2 -0
- package/lib/features/agent-chat/NativeAgentChat.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/chat/ChatCodeBlock.js +7 -3
- package/lib/features/chat/ChatCodeBlock.js.map +1 -1
- package/lib/features/chat/ChatTranscript.js +7 -3
- package/lib/features/chat/ChatTranscript.js.map +1 -1
- package/lib/features/chat/ChatWidgetCard.js +13 -0
- package/lib/features/chat/ChatWidgetCard.js.map +1 -0
- package/lib/features/chat/ConnectorConnectCard.js +164 -0
- package/lib/features/chat/ConnectorConnectCard.js.map +1 -0
- package/lib/features/chat/ConnectorConnectPrompt.js +254 -0
- package/lib/features/chat/ConnectorConnectPrompt.js.map +1 -0
- package/lib/features/chat/MessageActionBar.js.map +1 -1
- package/lib/features/chat/QueuedFollowUps.js +71 -0
- package/lib/features/chat/QueuedFollowUps.js.map +1 -0
- package/lib/features/chat/chatWidgets.js +37 -0
- package/lib/features/chat/chatWidgets.js.map +1 -0
- package/lib/features/chat/connectorConnect.js +179 -0
- package/lib/features/chat/connectorConnect.js.map +1 -0
- package/lib/features/chat/connectorConnectHandbacks.js +55 -0
- package/lib/features/chat/connectorConnectHandbacks.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 +288 -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 +290 -0
- package/lib/features/messaging/MessageActions.js.map +1 -0
- package/lib/features/messaging/NativeChatExperience.js +189 -0
- package/lib/features/messaging/NativeChatExperience.js.map +1 -0
- package/lib/features/messaging/RegistrationScreen.js +11 -14
- 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 +106 -1
- package/lib/features/messaging/chatOperations.js.map +1 -1
- package/lib/features/messaging/emojiCatalog.js +60 -0
- package/lib/features/messaging/emojiCatalog.js.map +1 -0
- package/lib/features/messaging/emojiKeywords.js +1592 -0
- package/lib/features/messaging/emojiKeywords.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 +191 -0
- package/lib/features/messaging/useContactMatches.js.map +1 -0
- package/lib/features/messaging/usePhoneVerification.js +12 -12
- 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/useCdecliChannel.js +128 -6
- package/lib/hooks/useCdecliChannel.js.map +1 -1
- package/lib/hooks/useChatApi.js +4 -2
- package/lib/hooks/useChatApi.js.map +1 -1
- package/lib/hooks/useChatStream.js +77 -63
- package/lib/hooks/useChatStream.js.map +1 -1
- package/lib/hooks/useHostConnectorCard.js +24 -0
- package/lib/hooks/useHostConnectorCard.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/Chat/index.js +51 -22
- package/lib/screens/Chat/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/JobSearchNative/useJobSearchHostChat.js +12 -6
- package/lib/screens/JobSearchNative/useJobSearchHostChat.js.map +1 -1
- package/lib/screens/ResumeNative/useResumeHostChat.js +12 -6
- package/lib/screens/ResumeNative/useResumeHostChat.js.map +1 -1
- package/lib/screens/ShoppingNative/useShoppingHostChat.js +12 -6
- package/lib/screens/ShoppingNative/useShoppingHostChat.js.map +1 -1
- package/lib/screens/TravelNative/useTravelHostChat.js +12 -6
- package/lib/screens/TravelNative/useTravelHostChat.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/lib/state/chatThreadMerge.js +6 -1
- package/lib/state/chatThreadMerge.js.map +1 -1
- package/package.json +6 -4
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import {useState,useRef,useEffect,useCallback,useMemo}from'react';import {loadStudioTemplatePage,uniqueTemplatePage,STUDIO_TEMPLATE_PAGE_SIZE}from'./canvasChatTemplates.js';import {studioCatalogFilter,STUDIO_CATALOG_QUERY,studioTemplatesToCatalogNodes,catalogRowToStudioTemplate}from'./studioCatalog.js';function rowsFromData(data) {
|
|
2
|
+
var _a, _b;
|
|
3
|
+
return ((_b = (_a = data == null ? void 0 : data.formTemplateSubmissions) == null ? void 0 : _a.nodes) != null ? _b : []).map(catalogRowToStudioTemplate).filter((row) => row !== null);
|
|
4
|
+
}
|
|
5
|
+
function readCachedTemplates(client, search) {
|
|
6
|
+
if (!client) return [];
|
|
7
|
+
try {
|
|
8
|
+
const data = client.readQuery({
|
|
9
|
+
query: STUDIO_CATALOG_QUERY,
|
|
10
|
+
variables: {
|
|
11
|
+
filter: studioCatalogFilter(search, 0)
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
return rowsFromData(data);
|
|
15
|
+
} catch (e) {
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function writeCachedTemplates(client, search, rows) {
|
|
20
|
+
if (!client) return;
|
|
21
|
+
client.writeQuery({
|
|
22
|
+
query: STUDIO_CATALOG_QUERY,
|
|
23
|
+
variables: {
|
|
24
|
+
filter: studioCatalogFilter(search, 0)
|
|
25
|
+
},
|
|
26
|
+
data: {
|
|
27
|
+
formTemplateSubmissions: {
|
|
28
|
+
__typename: "FormTemplateSubmissionConnection",
|
|
29
|
+
nodes: studioTemplatesToCatalogNodes(rows)
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
function isFullPage(count) {
|
|
35
|
+
return count > 0 && count % STUDIO_TEMPLATE_PAGE_SIZE === 0;
|
|
36
|
+
}
|
|
37
|
+
function useStudioCatalogTemplates(search, client, runAction, corpus) {
|
|
38
|
+
const term = search.trim();
|
|
39
|
+
const [templates, setTemplates] = useState(() => readCachedTemplates(client, term));
|
|
40
|
+
const [loading, setLoading] = useState(() => readCachedTemplates(client, term).length === 0);
|
|
41
|
+
const [loadingMore, setLoadingMore] = useState(false);
|
|
42
|
+
const [ended, setEnded] = useState(false);
|
|
43
|
+
const templatesRef = useRef(templates);
|
|
44
|
+
templatesRef.current = templates;
|
|
45
|
+
const endedRef = useRef(false);
|
|
46
|
+
const loadMoreLock = useRef(false);
|
|
47
|
+
const runActionRef = useRef(runAction);
|
|
48
|
+
runActionRef.current = runAction;
|
|
49
|
+
const corpusRef = useRef(corpus);
|
|
50
|
+
corpusRef.current = corpus;
|
|
51
|
+
useEffect(() => {
|
|
52
|
+
endedRef.current = false;
|
|
53
|
+
setEnded(false);
|
|
54
|
+
const cached = readCachedTemplates(client, term);
|
|
55
|
+
if (cached.length > 0) {
|
|
56
|
+
setTemplates(cached);
|
|
57
|
+
setLoading(false);
|
|
58
|
+
} else {
|
|
59
|
+
setLoading(true);
|
|
60
|
+
}
|
|
61
|
+
let live = true;
|
|
62
|
+
void loadStudioTemplatePage(term || void 0, 0, runActionRef.current, corpusRef.current).then((page) => {
|
|
63
|
+
if (!live) return;
|
|
64
|
+
setTemplates(page.rows);
|
|
65
|
+
writeCachedTemplates(client, term, page.rows);
|
|
66
|
+
}).finally(() => {
|
|
67
|
+
if (live) setLoading(false);
|
|
68
|
+
});
|
|
69
|
+
return () => {
|
|
70
|
+
live = false;
|
|
71
|
+
};
|
|
72
|
+
}, [client, term]);
|
|
73
|
+
const loadMore = useCallback(() => {
|
|
74
|
+
const already = templatesRef.current;
|
|
75
|
+
if (loadMoreLock.current || already.length === 0) return;
|
|
76
|
+
loadMoreLock.current = true;
|
|
77
|
+
setLoadingMore(true);
|
|
78
|
+
void (async () => {
|
|
79
|
+
let incoming = [];
|
|
80
|
+
if (client) {
|
|
81
|
+
try {
|
|
82
|
+
const {
|
|
83
|
+
data
|
|
84
|
+
} = await client.query({
|
|
85
|
+
query: STUDIO_CATALOG_QUERY,
|
|
86
|
+
variables: {
|
|
87
|
+
filter: studioCatalogFilter(term, already.length)
|
|
88
|
+
},
|
|
89
|
+
fetchPolicy: "network-only"
|
|
90
|
+
});
|
|
91
|
+
incoming = rowsFromData(data);
|
|
92
|
+
} catch (e) {
|
|
93
|
+
incoming = [];
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
let next = uniqueTemplatePage(already, incoming, [], term || void 0);
|
|
97
|
+
if (next.rows.length === 0) {
|
|
98
|
+
const page = await loadStudioTemplatePage(term || void 0, already.length, runActionRef.current, corpusRef.current);
|
|
99
|
+
next = uniqueTemplatePage(already, page.rows, corpusRef.current, term || void 0);
|
|
100
|
+
}
|
|
101
|
+
if (next.rows.length === 0) {
|
|
102
|
+
endedRef.current = true;
|
|
103
|
+
setEnded(true);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
endedRef.current = false;
|
|
107
|
+
setEnded(false);
|
|
108
|
+
const merged = [...already, ...next.rows];
|
|
109
|
+
templatesRef.current = merged;
|
|
110
|
+
setTemplates(merged);
|
|
111
|
+
writeCachedTemplates(client, term, merged);
|
|
112
|
+
})().catch(() => {
|
|
113
|
+
endedRef.current = true;
|
|
114
|
+
setEnded(true);
|
|
115
|
+
}).finally(() => {
|
|
116
|
+
loadMoreLock.current = false;
|
|
117
|
+
setLoadingMore(false);
|
|
118
|
+
});
|
|
119
|
+
}, [client, term]);
|
|
120
|
+
const hydrate = useCallback((rows, _offset) => {
|
|
121
|
+
setTemplates([...rows]);
|
|
122
|
+
endedRef.current = !isFullPage(rows.length);
|
|
123
|
+
setEnded(!isFullPage(rows.length));
|
|
124
|
+
writeCachedTemplates(client, term, rows);
|
|
125
|
+
}, [client, term]);
|
|
126
|
+
return useMemo(() => ({
|
|
127
|
+
templates,
|
|
128
|
+
loading: loading && templates.length === 0,
|
|
129
|
+
loadingMore,
|
|
130
|
+
hasMore: !ended,
|
|
131
|
+
loadMore,
|
|
132
|
+
hydrate
|
|
133
|
+
}), [ended, hydrate, loadMore, loading, loadingMore, templates]);
|
|
134
|
+
}export{useStudioCatalogTemplates};//# sourceMappingURL=useStudioCatalogTemplates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useStudioCatalogTemplates.js","sources":["../../../src/features/canvas/useStudioCatalogTemplates.ts"],"sourcesContent":["import type { ApolloClient } from '@apollo/client';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { RunMediaAction } from './videoEditor/mediaActions';\nimport { loadStudioTemplatePage, uniqueTemplatePage, type CanvasPromptTemplate } from './canvasChatTemplates';\nimport { STUDIO_TEMPLATE_PAGE_SIZE } from './canvasChatTemplates';\nimport {\n STUDIO_CATALOG_QUERY,\n catalogRowToStudioTemplate,\n studioCatalogFilter,\n studioTemplatesToCatalogNodes,\n type StudioCatalogRow,\n} from './studioCatalog';\n\ninterface StudioCatalogData {\n formTemplateSubmissions?: { nodes?: StudioCatalogRow[] | null } | null;\n}\n\n/** Host Apollo client — passed in so the federated remote writes the host cache. */\nexport type StudioCatalogClient = Pick<ApolloClient<object>, 'readQuery' | 'writeQuery' | 'query'>;\n\nfunction rowsFromData(data: StudioCatalogData | null | undefined): CanvasPromptTemplate[] {\n return (data?.formTemplateSubmissions?.nodes ?? [])\n .map(catalogRowToStudioTemplate)\n .filter((row): row is CanvasPromptTemplate => row !== null);\n}\n\nfunction readCachedTemplates(client: StudioCatalogClient | null | undefined, search: string): CanvasPromptTemplate[] {\n if (!client) return [];\n try {\n const data = client.readQuery<StudioCatalogData>({\n query: STUDIO_CATALOG_QUERY,\n variables: { filter: studioCatalogFilter(search, 0) },\n });\n return rowsFromData(data);\n } catch {\n return [];\n }\n}\n\nfunction writeCachedTemplates(\n client: StudioCatalogClient | null | undefined,\n search: string,\n rows: readonly CanvasPromptTemplate[],\n) {\n if (!client) return;\n client.writeQuery({\n query: STUDIO_CATALOG_QUERY,\n variables: { filter: studioCatalogFilter(search, 0) },\n data: {\n formTemplateSubmissions: {\n __typename: 'FormTemplateSubmissionConnection',\n nodes: studioTemplatesToCatalogNodes(rows),\n },\n },\n });\n}\n\nfunction isFullPage(count: number): boolean {\n return count > 0 && count % STUDIO_TEMPLATE_PAGE_SIZE === 0;\n}\n\nexport function useStudioCatalogTemplates(\n search: string,\n client: StudioCatalogClient | null | undefined,\n runAction: RunMediaAction | undefined,\n corpus: CanvasPromptTemplate[],\n) {\n const term = search.trim();\n const [templates, setTemplates] = useState<CanvasPromptTemplate[]>(() => readCachedTemplates(client, term));\n const [loading, setLoading] = useState(() => readCachedTemplates(client, term).length === 0);\n const [loadingMore, setLoadingMore] = useState(false);\n const [ended, setEnded] = useState(false);\n const templatesRef = useRef(templates);\n templatesRef.current = templates;\n const endedRef = useRef(false);\n const loadMoreLock = useRef(false);\n const runActionRef = useRef(runAction);\n runActionRef.current = runAction;\n const corpusRef = useRef(corpus);\n corpusRef.current = corpus;\n\n useEffect(() => {\n endedRef.current = false;\n setEnded(false);\n const cached = readCachedTemplates(client, term);\n if (cached.length > 0) {\n setTemplates(cached);\n setLoading(false);\n } else {\n setLoading(true);\n }\n let live = true;\n void loadStudioTemplatePage(term || undefined, 0, runActionRef.current, corpusRef.current)\n .then((page) => {\n if (!live) return;\n setTemplates(page.rows);\n writeCachedTemplates(client, term, page.rows);\n })\n .finally(() => {\n if (live) setLoading(false);\n });\n return () => {\n live = false;\n };\n }, [client, term]);\n\n const loadMore = useCallback(() => {\n const already = templatesRef.current;\n if (loadMoreLock.current || already.length === 0) return;\n loadMoreLock.current = true;\n setLoadingMore(true);\n void (async () => {\n let incoming: CanvasPromptTemplate[] = [];\n if (client) {\n try {\n const { data } = await client.query({\n query: STUDIO_CATALOG_QUERY,\n variables: { filter: studioCatalogFilter(term, already.length) },\n fetchPolicy: 'network-only',\n });\n incoming = rowsFromData(data as StudioCatalogData);\n } catch {\n incoming = [];\n }\n }\n let next = uniqueTemplatePage(already, incoming, [], term || undefined);\n if (next.rows.length === 0) {\n const page = await loadStudioTemplatePage(\n term || undefined,\n already.length,\n runActionRef.current,\n corpusRef.current,\n );\n next = uniqueTemplatePage(already, page.rows, corpusRef.current, term || undefined);\n }\n if (next.rows.length === 0) {\n endedRef.current = true;\n setEnded(true);\n return;\n }\n endedRef.current = false;\n setEnded(false);\n const merged = [...already, ...next.rows];\n templatesRef.current = merged;\n setTemplates(merged);\n writeCachedTemplates(client, term, merged);\n })()\n .catch(() => {\n endedRef.current = true;\n setEnded(true);\n })\n .finally(() => {\n loadMoreLock.current = false;\n setLoadingMore(false);\n });\n }, [client, term]);\n\n const hydrate = useCallback(\n (rows: readonly CanvasPromptTemplate[], _offset: number) => {\n setTemplates([...rows]);\n endedRef.current = !isFullPage(rows.length);\n setEnded(!isFullPage(rows.length));\n writeCachedTemplates(client, term, rows);\n },\n [client, term],\n );\n\n return useMemo(\n () => ({\n templates,\n loading: loading && templates.length === 0,\n loadingMore,\n hasMore: !ended,\n loadMore,\n hydrate,\n }),\n [ended, hydrate, loadMore, loading, loadingMore, templates],\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import {resultUrl,generationImageUrl}from'./videoEditor/mediaActions.js';var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
3
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
4
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
5
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
6
|
+
var __spreadValues = (a, b) => {
|
|
7
|
+
for (var prop in b || (b = {}))
|
|
8
|
+
if (__hasOwnProp.call(b, prop))
|
|
9
|
+
__defNormalProp(a, prop, b[prop]);
|
|
10
|
+
if (__getOwnPropSymbols)
|
|
11
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
12
|
+
if (__propIsEnum.call(b, prop))
|
|
13
|
+
__defNormalProp(a, prop, b[prop]);
|
|
14
|
+
}
|
|
15
|
+
return a;
|
|
16
|
+
};
|
|
17
|
+
const VIDEO_3D_CONNECTOR = "yantra-video-3d";
|
|
18
|
+
const VIDEO_3D_ACTIONS = {
|
|
19
|
+
objectGenerate: "YANTRA_VIDEO_3D_OBJECT_GENERATE",
|
|
20
|
+
objectStatus: "YANTRA_VIDEO_3D_OBJECT_STATUS",
|
|
21
|
+
worldGenerate: "YANTRA_VIDEO_3D_WORLD_GENERATE"};
|
|
22
|
+
function unwrap(result, what) {
|
|
23
|
+
if (result.successful === false) {
|
|
24
|
+
throw new Error(result.error || `${what} failed`);
|
|
25
|
+
}
|
|
26
|
+
const data = result.data && typeof result.data === "object" ? result.data : result;
|
|
27
|
+
if (data.successful === false) {
|
|
28
|
+
throw new Error(data.error || `${what} failed`);
|
|
29
|
+
}
|
|
30
|
+
return data;
|
|
31
|
+
}
|
|
32
|
+
const asString = (value) => typeof value === "string" ? value : "";
|
|
33
|
+
const toObjectResult = (data) => ({
|
|
34
|
+
modelUrl: asString(data.modelUrl),
|
|
35
|
+
previewUrl: asString(data.previewUrl) || asString(data.modelUrl),
|
|
36
|
+
model: asString(data.model),
|
|
37
|
+
requestId: asString(data.requestId),
|
|
38
|
+
stored: data.stored !== false
|
|
39
|
+
});
|
|
40
|
+
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
41
|
+
const POLL_INTERVAL_MS = 5e3;
|
|
42
|
+
const DEFAULT_TOTAL_TIMEOUT_MS = 36e4;
|
|
43
|
+
async function generateWorld3D(run, options) {
|
|
44
|
+
const data = unwrap(await run(VIDEO_3D_CONNECTOR, VIDEO_3D_ACTIONS.worldGenerate, __spreadValues(__spreadValues({
|
|
45
|
+
prompt: options.prompt
|
|
46
|
+
}, options.model ? {
|
|
47
|
+
model: options.model
|
|
48
|
+
} : {}), options.width ? {
|
|
49
|
+
width: options.width
|
|
50
|
+
} : {})), "3D world generation");
|
|
51
|
+
const imageUrl = asString(data.imageUrl) || resultUrl(data, VIDEO_3D_ACTIONS.worldGenerate);
|
|
52
|
+
if (!imageUrl) throw new Error("World generation returned no image");
|
|
53
|
+
return {
|
|
54
|
+
imageUrl,
|
|
55
|
+
model: asString(data.model),
|
|
56
|
+
provider: asString(data.provider),
|
|
57
|
+
width: typeof data.width === "number" ? data.width : 0,
|
|
58
|
+
height: typeof data.height === "number" ? data.height : 0,
|
|
59
|
+
resolvedPrompt: asString(data.resolvedPrompt) || options.prompt,
|
|
60
|
+
stored: data.stored !== false
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
async function generateObject3D(run, options) {
|
|
64
|
+
var _a, _b, _c, _d;
|
|
65
|
+
const params = {};
|
|
66
|
+
if (options.imageUrl) params.imageUrl = options.imageUrl;
|
|
67
|
+
if ((_a = options.prompt) == null ? void 0 : _a.trim()) params.prompt = options.prompt.trim();
|
|
68
|
+
if (options.model) params.model = options.model;
|
|
69
|
+
if (options.texture !== void 0) params.texture = options.texture;
|
|
70
|
+
if (!params.imageUrl && !params.prompt) {
|
|
71
|
+
throw new Error("Give the object a source image or a prompt.");
|
|
72
|
+
}
|
|
73
|
+
(_b = options.onProgress) == null ? void 0 : _b.call(options, "Submitting to the mesh model\u2026");
|
|
74
|
+
const first = unwrap(await run(VIDEO_3D_CONNECTOR, VIDEO_3D_ACTIONS.objectGenerate, params), "3D object generation");
|
|
75
|
+
if (first.status !== "pending") return toObjectResult(first);
|
|
76
|
+
const requestId = asString(first.requestId);
|
|
77
|
+
const model = asString(first.model);
|
|
78
|
+
if (!requestId || !model) throw new Error("The 3D job did not come back with anything to poll.");
|
|
79
|
+
const deadline = Date.now() + ((_c = options.totalTimeoutMs) != null ? _c : DEFAULT_TOTAL_TIMEOUT_MS);
|
|
80
|
+
const typical = typeof first.typicalSeconds === "number" ? first.typicalSeconds : 90;
|
|
81
|
+
const startedAt = Date.now();
|
|
82
|
+
while (Date.now() < deadline) {
|
|
83
|
+
const waited = Math.round((Date.now() - startedAt) / 1e3);
|
|
84
|
+
(_d = options.onProgress) == null ? void 0 : _d.call(options, `Building the mesh \u2014 ${waited}s of about ${typical}s`);
|
|
85
|
+
await sleep(POLL_INTERVAL_MS);
|
|
86
|
+
const next = unwrap(await run(VIDEO_3D_CONNECTOR, VIDEO_3D_ACTIONS.objectStatus, {
|
|
87
|
+
requestId,
|
|
88
|
+
model
|
|
89
|
+
}), "3D object status");
|
|
90
|
+
if (next.status !== "pending") return toObjectResult(next);
|
|
91
|
+
}
|
|
92
|
+
throw new Error("The 3D job is taking longer than expected. Try again in a minute.");
|
|
93
|
+
}
|
|
94
|
+
const SET_RENDER_INSTRUCTION = "Use the attached layout references as the exact composition: keep camera angle, position and scale of every subject, and the horizon. Replace untextured blocking with photographic detail. ";
|
|
95
|
+
async function renderSetStill(run, options) {
|
|
96
|
+
const prompt = `${SET_RENDER_INSTRUCTION}${options.look.trim() || "Photorealistic scene matching the layout."}`;
|
|
97
|
+
const refs = options.referenceUrls.filter(Boolean).slice(0, 4);
|
|
98
|
+
const result = await run("yantra-image-generation", "YANTRA_IMAGE_GENERATION_GENERATE", __spreadValues(__spreadValues({
|
|
99
|
+
prompt,
|
|
100
|
+
aspect_ratio: options.aspect || "16:9"
|
|
101
|
+
}, refs[0] ? {
|
|
102
|
+
referenceImageUrl: refs[0]
|
|
103
|
+
} : {}), refs.length > 1 ? {
|
|
104
|
+
referenceImageUrls: refs
|
|
105
|
+
} : {}));
|
|
106
|
+
const url = generationImageUrl(result) || resultUrl(result, "YANTRA_IMAGE_GENERATION_GENERATE") || "";
|
|
107
|
+
if (!url) throw new Error("Set render returned no image");
|
|
108
|
+
return url;
|
|
109
|
+
}export{SET_RENDER_INSTRUCTION,VIDEO_3D_ACTIONS,VIDEO_3D_CONNECTOR,generateObject3D,generateWorld3D,renderSetStill};//# sourceMappingURL=video3d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"video3d.js","sources":["../../../src/features/canvas/video3d.ts"],"sourcesContent":["/**\n * Native twin of canvas-surface `rpc/video3dRpc` — world + object mesh lanes\n * on `yantra-video-3d`. Phone has no Three.js set viewport; these RPCs power\n * the native Set studio (world / object / still render).\n */\nimport { resultUrl, generationImageUrl, type RunMediaAction } from './videoEditor/mediaActions';\n\nexport const VIDEO_3D_CONNECTOR = 'yantra-video-3d';\n\nexport const VIDEO_3D_ACTIONS = {\n objectGenerate: 'YANTRA_VIDEO_3D_OBJECT_GENERATE',\n objectStatus: 'YANTRA_VIDEO_3D_OBJECT_STATUS',\n worldGenerate: 'YANTRA_VIDEO_3D_WORLD_GENERATE',\n listModels: 'YANTRA_VIDEO_3D_LIST_MODELS',\n checkAvailability: 'YANTRA_VIDEO_3D_CHECK_AVAILABILITY',\n} as const;\n\nexport interface Object3DResult {\n modelUrl: string;\n previewUrl: string;\n model: string;\n requestId: string;\n stored: boolean;\n}\n\nexport interface World3DResult {\n imageUrl: string;\n model: string;\n provider: string;\n width: number;\n height: number;\n resolvedPrompt: string;\n stored: boolean;\n}\n\nfunction unwrap(result: Record<string, unknown>, what: string): Record<string, unknown> {\n if (result.successful === false) {\n throw new Error((result.error as string) || `${what} failed`);\n }\n const data = (result.data && typeof result.data === 'object' ? result.data : result) as Record<string, unknown>;\n if (data.successful === false) {\n throw new Error((data.error as string) || `${what} failed`);\n }\n return data;\n}\n\nconst asString = (value: unknown): string => (typeof value === 'string' ? value : '');\n\nconst toObjectResult = (data: Record<string, unknown>): Object3DResult => ({\n modelUrl: asString(data.modelUrl),\n previewUrl: asString(data.previewUrl) || asString(data.modelUrl),\n model: asString(data.model),\n requestId: asString(data.requestId),\n stored: data.stored !== false,\n});\n\nconst sleep = (ms: number) => new Promise((r) => setTimeout(r, ms));\n\nconst POLL_INTERVAL_MS = 5_000;\nconst DEFAULT_TOTAL_TIMEOUT_MS = 360_000;\n\nexport async function generateWorld3D(\n run: RunMediaAction,\n options: { prompt: string; model?: string; width?: number },\n): Promise<World3DResult> {\n const data = unwrap(\n await run(VIDEO_3D_CONNECTOR, VIDEO_3D_ACTIONS.worldGenerate, {\n prompt: options.prompt,\n ...(options.model ? { model: options.model } : {}),\n ...(options.width ? { width: options.width } : {}),\n }),\n '3D world generation',\n );\n const imageUrl = asString(data.imageUrl) || resultUrl(data, VIDEO_3D_ACTIONS.worldGenerate);\n if (!imageUrl) throw new Error('World generation returned no image');\n return {\n imageUrl,\n model: asString(data.model),\n provider: asString(data.provider),\n width: typeof data.width === 'number' ? data.width : 0,\n height: typeof data.height === 'number' ? data.height : 0,\n resolvedPrompt: asString(data.resolvedPrompt) || options.prompt,\n stored: data.stored !== false,\n };\n}\n\nexport async function generateObject3D(\n run: RunMediaAction,\n options: {\n imageUrl?: string;\n prompt?: string;\n model?: string;\n texture?: boolean;\n totalTimeoutMs?: number;\n onProgress?: (message: string) => void;\n },\n): Promise<Object3DResult> {\n const params: Record<string, unknown> = {};\n if (options.imageUrl) params.imageUrl = options.imageUrl;\n if (options.prompt?.trim()) params.prompt = options.prompt.trim();\n if (options.model) params.model = options.model;\n if (options.texture !== undefined) params.texture = options.texture;\n if (!params.imageUrl && !params.prompt) {\n throw new Error('Give the object a source image or a prompt.');\n }\n\n options.onProgress?.('Submitting to the mesh model…');\n const first = unwrap(\n await run(VIDEO_3D_CONNECTOR, VIDEO_3D_ACTIONS.objectGenerate, params),\n '3D object generation',\n );\n if (first.status !== 'pending') return toObjectResult(first);\n\n const requestId = asString(first.requestId);\n const model = asString(first.model);\n if (!requestId || !model) throw new Error('The 3D job did not come back with anything to poll.');\n\n const deadline = Date.now() + (options.totalTimeoutMs ?? DEFAULT_TOTAL_TIMEOUT_MS);\n const typical = typeof first.typicalSeconds === 'number' ? first.typicalSeconds : 90;\n const startedAt = Date.now();\n\n while (Date.now() < deadline) {\n const waited = Math.round((Date.now() - startedAt) / 1000);\n options.onProgress?.(`Building the mesh — ${waited}s of about ${typical}s`);\n await sleep(POLL_INTERVAL_MS);\n const next = unwrap(\n await run(VIDEO_3D_CONNECTOR, VIDEO_3D_ACTIONS.objectStatus, { requestId, model }),\n '3D object status',\n );\n if (next.status !== 'pending') return toObjectResult(next);\n }\n throw new Error('The 3D job is taking longer than expected. Try again in a minute.');\n}\n\n/** Layout still from set props — image lane with a blocking instruction (web RenderPanel). */\nexport const SET_RENDER_INSTRUCTION =\n 'Use the attached layout references as the exact composition: keep camera angle, ' +\n 'position and scale of every subject, and the horizon. Replace untextured blocking ' +\n 'with photographic detail. ';\n\nexport async function renderSetStill(\n run: RunMediaAction,\n options: { look: string; referenceUrls: string[]; aspect?: string },\n): Promise<string> {\n const prompt = `${SET_RENDER_INSTRUCTION}${options.look.trim() || 'Photorealistic scene matching the layout.'}`;\n const refs = options.referenceUrls.filter(Boolean).slice(0, 4);\n const result = await run('yantra-image-generation', 'YANTRA_IMAGE_GENERATION_GENERATE', {\n prompt,\n aspect_ratio: options.aspect || '16:9',\n ...(refs[0] ? { referenceImageUrl: refs[0] } : {}),\n ...(refs.length > 1 ? { referenceImageUrls: refs } : {}),\n });\n const url = generationImageUrl(result) || resultUrl(result, 'YANTRA_IMAGE_GENERATION_GENERATE') || '';\n if (!url) throw new Error('Set render returned no image');\n return url;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
3
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
4
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
5
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
6
|
+
var __spreadValues = (a, b) => {
|
|
7
|
+
for (var prop in b || (b = {}))
|
|
8
|
+
if (__hasOwnProp.call(b, prop))
|
|
9
|
+
__defNormalProp(a, prop, b[prop]);
|
|
10
|
+
if (__getOwnPropSymbols)
|
|
11
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
12
|
+
if (__propIsEnum.call(b, prop))
|
|
13
|
+
__defNormalProp(a, prop, b[prop]);
|
|
14
|
+
}
|
|
15
|
+
return a;
|
|
16
|
+
};
|
|
17
|
+
const CLIP_ASPECT_RATIOS = ["9:16", "1:1", "16:9"];
|
|
18
|
+
const CLIP_COUNT_CHOICES = [1, 2, 3, 4, 5, 6, 8, 10];
|
|
19
|
+
const CLIP_RESOLUTIONS = ["720", "1080"];
|
|
20
|
+
function buildClipRunParams(opts) {
|
|
21
|
+
return __spreadValues({
|
|
22
|
+
video_url: opts.videoUrl,
|
|
23
|
+
num_clips: opts.numClips,
|
|
24
|
+
aspect_ratio: opts.aspectRatio,
|
|
25
|
+
format: opts.resolution
|
|
26
|
+
}, opts.language ? {
|
|
27
|
+
language: opts.language
|
|
28
|
+
} : {});
|
|
29
|
+
}
|
|
30
|
+
function parseClipRunResult(result) {
|
|
31
|
+
var _a;
|
|
32
|
+
const data = (_a = result.data) != null ? _a : result;
|
|
33
|
+
let clips = Array.isArray(data.clips) ? data.clips : [];
|
|
34
|
+
if (clips.length === 0 && typeof data.highlights_json === "string") {
|
|
35
|
+
try {
|
|
36
|
+
const parsed = JSON.parse(data.highlights_json);
|
|
37
|
+
if (Array.isArray(parsed)) clips = parsed;
|
|
38
|
+
} catch (e) {
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return clips.map((c) => c.clip_url).filter((u) => typeof u === "string" && u.length > 0);
|
|
42
|
+
}export{CLIP_ASPECT_RATIOS,CLIP_COUNT_CHOICES,CLIP_RESOLUTIONS,buildClipRunParams,parseClipRunResult};//# sourceMappingURL=videoClips.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"videoClips.js","sources":["../../../src/features/canvas/videoClips.ts"],"sourcesContent":["/** Native twin of canvas-surface `rpc/videoClipRpc` — params + result parse. */\n\nexport const CLIP_ASPECT_RATIOS = ['9:16', '1:1', '16:9'] as const;\nexport const CLIP_COUNT_CHOICES = [1, 2, 3, 4, 5, 6, 8, 10] as const;\nexport const CLIP_RESOLUTIONS = ['720', '1080'] as const;\n\nexport interface VideoClipRunOptions {\n videoUrl: string;\n numClips: number;\n aspectRatio: string;\n resolution: string;\n language?: string;\n}\n\nexport function buildClipRunParams(opts: VideoClipRunOptions): Record<string, unknown> {\n return {\n video_url: opts.videoUrl,\n num_clips: opts.numClips,\n aspect_ratio: opts.aspectRatio,\n format: opts.resolution,\n ...(opts.language ? { language: opts.language } : {}),\n };\n}\n\nexport function parseClipRunResult(result: Record<string, unknown>): string[] {\n const data = (result.data ?? result) as Record<string, unknown>;\n let clips = Array.isArray(data.clips) ? (data.clips as Array<{ clip_url?: string }>) : [];\n if (clips.length === 0 && typeof data.highlights_json === 'string') {\n try {\n const parsed = JSON.parse(data.highlights_json) as unknown;\n if (Array.isArray(parsed)) clips = parsed as Array<{ clip_url?: string }>;\n } catch {\n /* malformed highlights_json */\n }\n }\n return clips.map((c) => c.clip_url).filter((u): u is string => typeof u === 'string' && u.length > 0);\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAEO,MAAM,kBAAqB,GAAA,CAAC,MAAQ,EAAA,KAAA,EAAO,MAAM;AAC3C,MAAA,kBAAA,GAAqB,CAAC,CAAG,EAAA,CAAA,EAAG,GAAG,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAA,EAAG,EAAE;AAC7C,MAAA,gBAAA,GAAmB,CAAC,KAAA,EAAO,MAAM;AAQvC,SAAS,mBAAmB,IAAoD,EAAA;AACrF,EAAO,OAAA,cAAA,CAAA;AAAA,IACL,WAAW,IAAK,CAAA,QAAA;AAAA,IAChB,WAAW,IAAK,CAAA,QAAA;AAAA,IAChB,cAAc,IAAK,CAAA,WAAA;AAAA,IACnB,QAAQ,IAAK,CAAA;AAAA,GAAA,EACT,KAAK,QAAW,GAAA;AAAA,IAClB,UAAU,IAAK,CAAA;AAAA,MACb,EAAC,CAAA;AAET;AACO,SAAS,mBAAmB,MAA2C,EAAA;AAvB9E,EAAA,IAAA,EAAA;AAwBE,EAAM,MAAA,IAAA,GAAA,CAAQ,EAAO,GAAA,MAAA,CAAA,IAAA,KAAP,IAAe,GAAA,EAAA,GAAA,MAAA;AAC7B,EAAI,IAAA,KAAA,GAAQ,MAAM,OAAQ,CAAA,IAAA,CAAK,KAAK,CAAI,GAAA,IAAA,CAAK,QAExC,EAAC;AACN,EAAA,IAAI,MAAM,MAAW,KAAA,CAAA,IAAK,OAAO,IAAA,CAAK,oBAAoB,QAAU,EAAA;AAClE,IAAI,IAAA;AACF,MAAA,MAAM,MAAS,GAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,eAAe,CAAA;AAC9C,MAAA,IAAI,KAAM,CAAA,OAAA,CAAQ,MAAM,CAAA,EAAW,KAAA,GAAA,MAAA;AAAA,KAG7B,CAAA,OAAA,CAAA,EAAA;AAAA;AAER;AAEF,EAAA,OAAO,KAAM,CAAA,GAAA,CAAI,CAAK,CAAA,KAAA,CAAA,CAAE,QAAQ,CAAE,CAAA,MAAA,CAAO,CAAC,CAAA,KAAmB,OAAO,CAAA,KAAM,QAAY,IAAA,CAAA,CAAE,SAAS,CAAC,CAAA;AACpG"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import {jsxs,jsx}from'react/jsx-runtime';import {useRef,useState}from'react';import {StyleSheet,View,Text,ScrollView,TextInput,Pressable,ActivityIndicator}from'react-native';import {deriveAgentEndpoint}from'../remoteMediaClient.js';import {runCutAgentTurn}from'./agentLoop.js';function AgentCutPane({
|
|
2
|
+
timeline,
|
|
3
|
+
setTimeline,
|
|
4
|
+
token,
|
|
5
|
+
indexUrl
|
|
6
|
+
}) {
|
|
7
|
+
const timelineRef = useRef(timeline);
|
|
8
|
+
timelineRef.current = timeline;
|
|
9
|
+
const [prompt, setPrompt] = useState("Keep the strongest 3 clips and put the hero shot first");
|
|
10
|
+
const [busy, setBusy] = useState(false);
|
|
11
|
+
const [status, setStatus] = useState(null);
|
|
12
|
+
const [log, setLog] = useState([]);
|
|
13
|
+
const [history, setHistory] = useState([]);
|
|
14
|
+
const run = async () => {
|
|
15
|
+
if (!token || !indexUrl) {
|
|
16
|
+
setLog((l) => [...l, "Sign in needed for AI cut."]);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const text = prompt.trim();
|
|
20
|
+
if (!text || busy) return;
|
|
21
|
+
setBusy(true);
|
|
22
|
+
setStatus("Starting\u2026");
|
|
23
|
+
setHistory((h) => [...h, {
|
|
24
|
+
role: "user",
|
|
25
|
+
content: text
|
|
26
|
+
}]);
|
|
27
|
+
try {
|
|
28
|
+
const result = await runCutAgentTurn({
|
|
29
|
+
history,
|
|
30
|
+
userText: text,
|
|
31
|
+
token,
|
|
32
|
+
agentEndpoint: deriveAgentEndpoint(indexUrl),
|
|
33
|
+
onStatus: setStatus,
|
|
34
|
+
ctx: {
|
|
35
|
+
getTimeline: () => timelineRef.current,
|
|
36
|
+
setTimeline: (next) => {
|
|
37
|
+
timelineRef.current = next;
|
|
38
|
+
setTimeline(next);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
for (const step of result.steps) setLog((l) => [...l, step.label]);
|
|
43
|
+
setLog((l) => [...l, result.text]);
|
|
44
|
+
setHistory((h) => [...h, {
|
|
45
|
+
role: "assistant",
|
|
46
|
+
content: result.text
|
|
47
|
+
}]);
|
|
48
|
+
setPrompt("");
|
|
49
|
+
} catch (err) {
|
|
50
|
+
setLog((l) => [...l, err instanceof Error ? err.message : String(err)]);
|
|
51
|
+
} finally {
|
|
52
|
+
setBusy(false);
|
|
53
|
+
setStatus(null);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
return /* @__PURE__ */ jsxs(View, { style: styles.root, children: [
|
|
57
|
+
/* @__PURE__ */ jsx(Text, { style: styles.title, children: "AI cut" }),
|
|
58
|
+
/* @__PURE__ */ jsx(Text, { style: styles.fine, children: "Describe the cut. The agent can inspect, trim, reorder, and remove clips." }),
|
|
59
|
+
/* @__PURE__ */ jsx(ScrollView, { style: styles.log, contentContainerStyle: {
|
|
60
|
+
paddingBottom: 8
|
|
61
|
+
}, children: log.map((line, i) => /* @__PURE__ */ jsx(Text, { style: styles.logLine, children: line }, `${i}-${line.slice(0, 12)}`)) }),
|
|
62
|
+
status ? /* @__PURE__ */ jsx(Text, { style: styles.status, children: status }) : null,
|
|
63
|
+
/* @__PURE__ */ jsx(TextInput, { value: prompt, onChangeText: setPrompt, style: styles.input, multiline: true, placeholderTextColor: "#94a3b8", placeholder: "e.g. Drop the last clip and tighten the open" }),
|
|
64
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: () => void run(), disabled: busy, style: [styles.cta, busy && styles.ctaOff], children: busy ? /* @__PURE__ */ jsx(ActivityIndicator, { color: "#0f172a" }) : /* @__PURE__ */ jsx(Text, { style: styles.ctaLabel, children: "Run cut" }) })
|
|
65
|
+
] });
|
|
66
|
+
}
|
|
67
|
+
const styles = StyleSheet.create({
|
|
68
|
+
root: {
|
|
69
|
+
padding: 12,
|
|
70
|
+
gap: 8
|
|
71
|
+
},
|
|
72
|
+
title: {
|
|
73
|
+
fontSize: 14,
|
|
74
|
+
fontWeight: "700",
|
|
75
|
+
color: "#0f172a"
|
|
76
|
+
},
|
|
77
|
+
fine: {
|
|
78
|
+
fontSize: 12,
|
|
79
|
+
color: "#64748b",
|
|
80
|
+
lineHeight: 16
|
|
81
|
+
},
|
|
82
|
+
log: {
|
|
83
|
+
maxHeight: 140,
|
|
84
|
+
backgroundColor: "#f8fafc",
|
|
85
|
+
borderRadius: 10,
|
|
86
|
+
padding: 8
|
|
87
|
+
},
|
|
88
|
+
logLine: {
|
|
89
|
+
fontSize: 12,
|
|
90
|
+
color: "#334155",
|
|
91
|
+
marginBottom: 4
|
|
92
|
+
},
|
|
93
|
+
status: {
|
|
94
|
+
fontSize: 12,
|
|
95
|
+
color: "#7c3aed"
|
|
96
|
+
},
|
|
97
|
+
input: {
|
|
98
|
+
minHeight: 64,
|
|
99
|
+
borderRadius: 10,
|
|
100
|
+
borderWidth: 1,
|
|
101
|
+
borderColor: "#e2e8f0",
|
|
102
|
+
paddingHorizontal: 10,
|
|
103
|
+
paddingVertical: 8,
|
|
104
|
+
color: "#0f172a",
|
|
105
|
+
textAlignVertical: "top"
|
|
106
|
+
},
|
|
107
|
+
cta: {
|
|
108
|
+
alignItems: "center",
|
|
109
|
+
paddingVertical: 11,
|
|
110
|
+
borderRadius: 10,
|
|
111
|
+
backgroundColor: "#e2e8f0"
|
|
112
|
+
},
|
|
113
|
+
ctaOff: {
|
|
114
|
+
opacity: 0.5
|
|
115
|
+
},
|
|
116
|
+
ctaLabel: {
|
|
117
|
+
fontWeight: "700",
|
|
118
|
+
color: "#0f172a"
|
|
119
|
+
}
|
|
120
|
+
});export{AgentCutPane};//# sourceMappingURL=AgentCutPane.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentCutPane.js","sources":["../../../../../src/features/canvas/videoEditor/agent/AgentCutPane.tsx"],"sourcesContent":["/**\n * Agentic cut pane inside the video editor — describe the cut, tools rearrange clips.\n */\nimport React, { useRef, useState } from 'react';\nimport { ActivityIndicator, Pressable, ScrollView, StyleSheet, Text, TextInput, View } from 'react-native';\nimport type { EditorTimeline } from '../editorModel';\nimport { deriveAgentEndpoint } from '../remoteMediaClient';\nimport { runCutAgentTurn } from './agentLoop';\n\nexport function AgentCutPane({\n timeline,\n setTimeline,\n token,\n indexUrl,\n}: {\n timeline: EditorTimeline;\n setTimeline: (next: EditorTimeline | ((prev: EditorTimeline) => EditorTimeline)) => void;\n token?: string | null;\n indexUrl?: string | null;\n}) {\n const timelineRef = useRef(timeline);\n timelineRef.current = timeline;\n const [prompt, setPrompt] = useState('Keep the strongest 3 clips and put the hero shot first');\n const [busy, setBusy] = useState(false);\n const [status, setStatus] = useState<string | null>(null);\n const [log, setLog] = useState<string[]>([]);\n const [history, setHistory] = useState<Array<{ role: 'user' | 'assistant'; content: string }>>([]);\n\n const run = async () => {\n if (!token || !indexUrl) {\n setLog((l) => [...l, 'Sign in needed for AI cut.']);\n return;\n }\n const text = prompt.trim();\n if (!text || busy) return;\n setBusy(true);\n setStatus('Starting…');\n setHistory((h) => [...h, { role: 'user', content: text }]);\n try {\n const result = await runCutAgentTurn({\n history,\n userText: text,\n token,\n agentEndpoint: deriveAgentEndpoint(indexUrl),\n onStatus: setStatus,\n ctx: {\n getTimeline: () => timelineRef.current,\n setTimeline: (next) => {\n timelineRef.current = next;\n setTimeline(next);\n },\n },\n });\n for (const step of result.steps) setLog((l) => [...l, step.label]);\n setLog((l) => [...l, result.text]);\n setHistory((h) => [...h, { role: 'assistant', content: result.text }]);\n setPrompt('');\n } catch (err: unknown) {\n setLog((l) => [...l, err instanceof Error ? err.message : String(err)]);\n } finally {\n setBusy(false);\n setStatus(null);\n }\n };\n\n return (\n <View style={styles.root}>\n <Text style={styles.title}>AI cut</Text>\n <Text style={styles.fine}>Describe the cut. The agent can inspect, trim, reorder, and remove clips.</Text>\n <ScrollView style={styles.log} contentContainerStyle={{ paddingBottom: 8 }}>\n {log.map((line, i) => (\n <Text key={`${i}-${line.slice(0, 12)}`} style={styles.logLine}>\n {line}\n </Text>\n ))}\n </ScrollView>\n {status ? <Text style={styles.status}>{status}</Text> : null}\n <TextInput\n value={prompt}\n onChangeText={setPrompt}\n style={styles.input}\n multiline\n placeholderTextColor=\"#94a3b8\"\n placeholder=\"e.g. Drop the last clip and tighten the open\"\n />\n <Pressable onPress={() => void run()} disabled={busy} style={[styles.cta, busy && styles.ctaOff]}>\n {busy ? <ActivityIndicator color=\"#0f172a\" /> : <Text style={styles.ctaLabel}>Run cut</Text>}\n </Pressable>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { padding: 12, gap: 8 },\n title: { fontSize: 14, fontWeight: '700', color: '#0f172a' },\n fine: { fontSize: 12, color: '#64748b', lineHeight: 16 },\n log: { maxHeight: 140, backgroundColor: '#f8fafc', borderRadius: 10, padding: 8 },\n logLine: { fontSize: 12, color: '#334155', marginBottom: 4 },\n status: { fontSize: 12, color: '#7c3aed' },\n input: {\n minHeight: 64,\n borderRadius: 10,\n borderWidth: 1,\n borderColor: '#e2e8f0',\n paddingHorizontal: 10,\n paddingVertical: 8,\n color: '#0f172a',\n textAlignVertical: 'top',\n },\n cta: {\n alignItems: 'center',\n paddingVertical: 11,\n borderRadius: 10,\n backgroundColor: '#e2e8f0',\n },\n ctaOff: { opacity: 0.5 },\n ctaLabel: { fontWeight: '700', color: '#0f172a' },\n});\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import {brainChat}from'./brainClient.js';import {CUT_AGENT_TOOLS,executeCutTool}from'./cutTools.js';const SYSTEM = `You are a video editor assistant on a phone timeline.
|
|
2
|
+
Use tools to inspect and rearrange clips. Prefer short clear replies.
|
|
3
|
+
Only use the provided tools. When done, summarize in two sentences.`;
|
|
4
|
+
async function runCutAgentTurn(args) {
|
|
5
|
+
var _a, _b, _c, _d;
|
|
6
|
+
const steps = [];
|
|
7
|
+
const messages = [{
|
|
8
|
+
role: "system",
|
|
9
|
+
content: SYSTEM
|
|
10
|
+
}, ...args.history.slice(-10).map((m) => ({
|
|
11
|
+
role: m.role,
|
|
12
|
+
content: m.content
|
|
13
|
+
})), {
|
|
14
|
+
role: "user",
|
|
15
|
+
content: args.userText
|
|
16
|
+
}];
|
|
17
|
+
const maxRounds = (_a = args.maxRounds) != null ? _a : 10;
|
|
18
|
+
for (let round = 0; round < maxRounds; round += 1) {
|
|
19
|
+
(_b = args.onStatus) == null ? void 0 : _b.call(args, round === 0 ? "Thinking\u2026" : `Working (round ${round + 1})\u2026`);
|
|
20
|
+
let reply;
|
|
21
|
+
try {
|
|
22
|
+
reply = await brainChat({
|
|
23
|
+
messages,
|
|
24
|
+
tools: CUT_AGENT_TOOLS,
|
|
25
|
+
token: args.token,
|
|
26
|
+
agentEndpoint: args.agentEndpoint
|
|
27
|
+
});
|
|
28
|
+
} catch (err) {
|
|
29
|
+
return {
|
|
30
|
+
text: err instanceof Error ? err.message : String(err),
|
|
31
|
+
steps
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
if (!((_c = reply.tool_calls) == null ? void 0 : _c.length)) {
|
|
35
|
+
return {
|
|
36
|
+
text: reply.content.trim() || "Done.",
|
|
37
|
+
steps
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
messages.push({
|
|
41
|
+
role: "assistant",
|
|
42
|
+
content: reply.content || ""
|
|
43
|
+
});
|
|
44
|
+
for (const call of reply.tool_calls) {
|
|
45
|
+
let parsed = {};
|
|
46
|
+
try {
|
|
47
|
+
parsed = JSON.parse(call.function.arguments || "{}");
|
|
48
|
+
} catch (e) {
|
|
49
|
+
parsed = {};
|
|
50
|
+
}
|
|
51
|
+
(_d = args.onStatus) == null ? void 0 : _d.call(args, call.function.name);
|
|
52
|
+
const outcome = await executeCutTool(call.function.name, parsed, args.ctx);
|
|
53
|
+
steps.push({
|
|
54
|
+
label: outcome.label,
|
|
55
|
+
detail: outcome.detail
|
|
56
|
+
});
|
|
57
|
+
messages.push({
|
|
58
|
+
role: "tool",
|
|
59
|
+
tool_call_id: call.id,
|
|
60
|
+
name: call.function.name,
|
|
61
|
+
content: outcome.content
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
text: "Stopped after the tool budget. Ask me to continue if needed.",
|
|
67
|
+
steps
|
|
68
|
+
};
|
|
69
|
+
}export{runCutAgentTurn};//# sourceMappingURL=agentLoop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentLoop.js","sources":["../../../../../src/features/canvas/videoEditor/agent/agentLoop.ts"],"sourcesContent":["/**\n * One agentic cut turn — twin of web agentLoop (cut tools only).\n */\nimport { brainChat, type BrainMessage, type BrainReply } from './brainClient';\nimport { CUT_AGENT_TOOLS, executeCutTool, type AgentToolContext } from './cutTools';\n\nexport interface AgentTurnResult {\n text: string;\n steps: Array<{ label: string; detail?: string }>;\n}\n\nconst SYSTEM = `You are a video editor assistant on a phone timeline.\nUse tools to inspect and rearrange clips. Prefer short clear replies.\nOnly use the provided tools. When done, summarize in two sentences.`;\n\nexport async function runCutAgentTurn(args: {\n history: Array<{ role: 'user' | 'assistant'; content: string }>;\n userText: string;\n ctx: AgentToolContext;\n token: string;\n agentEndpoint: string;\n onStatus?: (text: string) => void;\n maxRounds?: number;\n}): Promise<AgentTurnResult> {\n const steps: AgentTurnResult['steps'] = [];\n const messages: BrainMessage[] = [\n { role: 'system', content: SYSTEM },\n ...args.history.slice(-10).map((m) => ({ role: m.role as 'user' | 'assistant', content: m.content })),\n { role: 'user', content: args.userText },\n ];\n const maxRounds = args.maxRounds ?? 10;\n\n for (let round = 0; round < maxRounds; round += 1) {\n args.onStatus?.(round === 0 ? 'Thinking…' : `Working (round ${round + 1})…`);\n let reply: BrainReply;\n try {\n reply = await brainChat({\n messages,\n tools: CUT_AGENT_TOOLS,\n token: args.token,\n agentEndpoint: args.agentEndpoint,\n });\n } catch (err) {\n return {\n text: err instanceof Error ? err.message : String(err),\n steps,\n };\n }\n\n if (!reply.tool_calls?.length) {\n return { text: reply.content.trim() || 'Done.', steps };\n }\n\n messages.push({\n role: 'assistant',\n content: reply.content || '',\n });\n\n for (const call of reply.tool_calls) {\n let parsed: unknown = {};\n try {\n parsed = JSON.parse(call.function.arguments || '{}');\n } catch {\n parsed = {};\n }\n args.onStatus?.(call.function.name);\n const outcome = await executeCutTool(call.function.name, parsed, args.ctx);\n steps.push({ label: outcome.label, detail: outcome.detail });\n messages.push({\n role: 'tool',\n tool_call_id: call.id,\n name: call.function.name,\n content: outcome.content,\n });\n }\n }\n\n return { text: 'Stopped after the tool budget. Ask me to continue if needed.', steps };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
3
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
4
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
5
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
6
|
+
var __spreadValues = (a, b) => {
|
|
7
|
+
for (var prop in b || (b = {}))
|
|
8
|
+
if (__hasOwnProp.call(b, prop))
|
|
9
|
+
__defNormalProp(a, prop, b[prop]);
|
|
10
|
+
if (__getOwnPropSymbols)
|
|
11
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
12
|
+
if (__propIsEnum.call(b, prop))
|
|
13
|
+
__defNormalProp(a, prop, b[prop]);
|
|
14
|
+
}
|
|
15
|
+
return a;
|
|
16
|
+
};
|
|
17
|
+
async function brainChat(args) {
|
|
18
|
+
var _a, _b, _c;
|
|
19
|
+
const resp = await fetch(`${args.agentEndpoint}/v1/yantra-brain/chat/completions`, {
|
|
20
|
+
method: "POST",
|
|
21
|
+
headers: {
|
|
22
|
+
"content-type": "application/json",
|
|
23
|
+
authorization: `Bearer ${args.token}`
|
|
24
|
+
},
|
|
25
|
+
body: JSON.stringify(__spreadValues({
|
|
26
|
+
model: args.model || "yantra-brain-smart",
|
|
27
|
+
messages: args.messages
|
|
28
|
+
}, ((_a = args.tools) == null ? void 0 : _a.length) ? {
|
|
29
|
+
tools: args.tools,
|
|
30
|
+
tool_choice: "auto"
|
|
31
|
+
} : {}))
|
|
32
|
+
});
|
|
33
|
+
const json = await resp.json().catch(() => ({}));
|
|
34
|
+
if (!resp.ok) {
|
|
35
|
+
throw new Error(typeof json.error === "string" ? json.error : `Brain chat failed (HTTP ${resp.status})`);
|
|
36
|
+
}
|
|
37
|
+
const choices = json.choices;
|
|
38
|
+
const message = (_c = (_b = choices == null ? void 0 : choices[0]) == null ? void 0 : _b.message) != null ? _c : {};
|
|
39
|
+
const content = typeof message.content === "string" ? message.content : "";
|
|
40
|
+
const tool_calls = Array.isArray(message.tool_calls) ? message.tool_calls : void 0;
|
|
41
|
+
return {
|
|
42
|
+
content,
|
|
43
|
+
tool_calls
|
|
44
|
+
};
|
|
45
|
+
}export{brainChat};//# sourceMappingURL=brainClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brainClient.js","sources":["../../../../../src/features/canvas/videoEditor/agent/brainClient.ts"],"sourcesContent":["/** Brain chat transport for the studio agent (gateway /v1/yantra-brain). */\nexport interface BrainMessage {\n role: 'system' | 'user' | 'assistant' | 'tool';\n content: string;\n tool_call_id?: string;\n name?: string;\n}\n\nexport interface BrainTool {\n type: 'function';\n function: { name: string; description: string; parameters: Record<string, unknown> };\n}\n\nexport interface BrainToolCall {\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n}\n\nexport interface BrainReply {\n content: string;\n tool_calls?: BrainToolCall[];\n}\n\nexport type BrainChat = (args: {\n messages: BrainMessage[];\n tools?: BrainTool[];\n model?: string;\n token: string;\n agentEndpoint: string;\n}) => Promise<BrainReply>;\n\nexport async function brainChat(args: {\n messages: BrainMessage[];\n tools?: BrainTool[];\n model?: string;\n token: string;\n agentEndpoint: string;\n}): Promise<BrainReply> {\n const resp = await fetch(`${args.agentEndpoint}/v1/yantra-brain/chat/completions`, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${args.token}`,\n },\n body: JSON.stringify({\n model: args.model || 'yantra-brain-smart',\n messages: args.messages,\n ...(args.tools?.length ? { tools: args.tools, tool_choice: 'auto' } : {}),\n }),\n });\n const json = (await resp.json().catch(() => ({}))) as Record<string, unknown>;\n if (!resp.ok) {\n throw new Error(typeof json.error === 'string' ? json.error : `Brain chat failed (HTTP ${resp.status})`);\n }\n const choices = json.choices as Array<{ message?: Record<string, unknown> }> | undefined;\n const message = choices?.[0]?.message ?? {};\n const content = typeof message.content === 'string' ? message.content : '';\n const tool_calls = Array.isArray(message.tool_calls) ? (message.tool_calls as BrainToolCall[]) : undefined;\n return { content, tool_calls };\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAkCA,eAAsB,UAAU,IAMR,EAAA;AAxCxB,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAyCE,EAAA,MAAM,OAAO,MAAM,KAAA,CAAM,CAAG,EAAA,IAAA,CAAK,aAAa,CAAqC,iCAAA,CAAA,EAAA;AAAA,IACjF,MAAQ,EAAA,MAAA;AAAA,IACR,OAAS,EAAA;AAAA,MACP,cAAgB,EAAA,kBAAA;AAAA,MAChB,aAAA,EAAe,CAAU,OAAA,EAAA,IAAA,CAAK,KAAK,CAAA;AAAA,KACrC;AAAA,IACA,IAAA,EAAM,KAAK,SAAU,CAAA,cAAA,CAAA;AAAA,MACnB,KAAA,EAAO,KAAK,KAAS,IAAA,oBAAA;AAAA,MACrB,UAAU,IAAK,CAAA;AAAA,KACX,EAAA,CAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAL,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,MAAS,IAAA;AAAA,MACvB,OAAO,IAAK,CAAA,KAAA;AAAA,MACZ,WAAa,EAAA;AAAA,KACf,GAAI,EACL,CAAA;AAAA,GACF,CAAA;AACD,EAAM,MAAA,IAAA,GAAQ,MAAM,IAAK,CAAA,IAAA,GAAO,KAAM,CAAA,OAAO,EAAG,CAAA,CAAA;AAChD,EAAI,IAAA,CAAC,KAAK,EAAI,EAAA;AACZ,IAAM,MAAA,IAAI,KAAM,CAAA,OAAO,IAAK,CAAA,KAAA,KAAU,QAAW,GAAA,IAAA,CAAK,KAAQ,GAAA,CAAA,wBAAA,EAA2B,IAAK,CAAA,MAAM,CAAG,CAAA,CAAA,CAAA;AAAA;AAEzG,EAAA,MAAM,UAAU,IAAK,CAAA,OAAA;AAGrB,EAAA,MAAM,WAAU,EAAU,GAAA,CAAA,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,CAAA,CAAA,KAAV,IAAc,GAAA,MAAA,GAAA,EAAA,CAAA,OAAA,KAAd,YAAyB,EAAC;AAC1C,EAAA,MAAM,UAAU,OAAO,OAAA,CAAQ,OAAY,KAAA,QAAA,GAAW,QAAQ,OAAU,GAAA,EAAA;AACxE,EAAA,MAAM,aAAa,KAAM,CAAA,OAAA,CAAQ,QAAQ,UAAU,CAAA,GAAI,QAAQ,UAAgC,GAAA,MAAA;AAC/F,EAAO,OAAA;AAAA,IACL,OAAA;AAAA,IACA;AAAA,GACF;AACF"}
|