@adminide-stack/yantra-mobile 12.0.69-alpha.9 → 12.0.70-alpha.0
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 +166 -0
- package/lib/features/chat/ConnectorConnectCard.js.map +1 -0
- package/lib/features/chat/ConnectorConnectPrompt.js +272 -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 +207 -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,129 @@
|
|
|
1
|
+
import {removeClip,moveClip,updateClip}from'../editorModel.js';const CUT_AGENT_TOOLS = [{
|
|
2
|
+
type: "function",
|
|
3
|
+
function: {
|
|
4
|
+
name: "get_timeline",
|
|
5
|
+
description: "List clips on the timeline with ids, sources, and durations.",
|
|
6
|
+
parameters: {
|
|
7
|
+
type: "object",
|
|
8
|
+
properties: {}
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
}, {
|
|
12
|
+
type: "function",
|
|
13
|
+
function: {
|
|
14
|
+
name: "remove_scenes",
|
|
15
|
+
description: "Remove clips by id.",
|
|
16
|
+
parameters: {
|
|
17
|
+
type: "object",
|
|
18
|
+
properties: {
|
|
19
|
+
ids: {
|
|
20
|
+
type: "array",
|
|
21
|
+
items: {
|
|
22
|
+
type: "string"
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
required: ["ids"]
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}, {
|
|
30
|
+
type: "function",
|
|
31
|
+
function: {
|
|
32
|
+
name: "reorder_scenes",
|
|
33
|
+
description: "Move a clip earlier (-1) or later (1) by one slot.",
|
|
34
|
+
parameters: {
|
|
35
|
+
type: "object",
|
|
36
|
+
properties: {
|
|
37
|
+
id: {
|
|
38
|
+
type: "string"
|
|
39
|
+
},
|
|
40
|
+
direction: {
|
|
41
|
+
type: "integer",
|
|
42
|
+
enum: [-1, 1]
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
required: ["id", "direction"]
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}, {
|
|
49
|
+
type: "function",
|
|
50
|
+
function: {
|
|
51
|
+
name: "trim_scene",
|
|
52
|
+
description: "Set trimStartSec / trimEndSec on a clip (source seconds).",
|
|
53
|
+
parameters: {
|
|
54
|
+
type: "object",
|
|
55
|
+
properties: {
|
|
56
|
+
id: {
|
|
57
|
+
type: "string"
|
|
58
|
+
},
|
|
59
|
+
trimStartSec: {
|
|
60
|
+
type: "number"
|
|
61
|
+
},
|
|
62
|
+
trimEndSec: {
|
|
63
|
+
type: "number"
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
required: ["id"]
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}];
|
|
70
|
+
async function executeCutTool(name, rawArgs, ctx) {
|
|
71
|
+
const args = rawArgs && typeof rawArgs === "object" ? rawArgs : {};
|
|
72
|
+
if (name === "get_timeline") {
|
|
73
|
+
const t = ctx.getTimeline();
|
|
74
|
+
const rows = t.clips.map((c, i) => {
|
|
75
|
+
var _a;
|
|
76
|
+
return {
|
|
77
|
+
index: i,
|
|
78
|
+
id: c.id,
|
|
79
|
+
src: (_a = c.src) == null ? void 0 : _a.slice(0, 80),
|
|
80
|
+
durationSec: c.durationSec,
|
|
81
|
+
trimStartSec: c.trimStartSec,
|
|
82
|
+
trimEndSec: c.trimEndSec
|
|
83
|
+
};
|
|
84
|
+
});
|
|
85
|
+
return {
|
|
86
|
+
ok: true,
|
|
87
|
+
label: `Timeline \xB7 ${rows.length} clip(s)`,
|
|
88
|
+
content: JSON.stringify(rows)
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
if (name === "remove_scenes") {
|
|
92
|
+
const ids = Array.isArray(args.ids) ? args.ids.filter((x) => typeof x === "string") : [];
|
|
93
|
+
let next = ctx.getTimeline();
|
|
94
|
+
for (const id of ids) next = removeClip(next, id);
|
|
95
|
+
ctx.setTimeline(next);
|
|
96
|
+
return {
|
|
97
|
+
ok: true,
|
|
98
|
+
label: `Removed ${ids.length} clip(s)`,
|
|
99
|
+
content: "ok"
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
if (name === "reorder_scenes") {
|
|
103
|
+
const id = typeof args.id === "string" ? args.id : "";
|
|
104
|
+
const direction = args.direction === -1 || args.direction === 1 ? args.direction : 1;
|
|
105
|
+
ctx.setTimeline(moveClip(ctx.getTimeline(), id, direction));
|
|
106
|
+
return {
|
|
107
|
+
ok: true,
|
|
108
|
+
label: `Moved ${id}`,
|
|
109
|
+
content: "ok"
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
if (name === "trim_scene") {
|
|
113
|
+
const id = typeof args.id === "string" ? args.id : "";
|
|
114
|
+
const patch = {};
|
|
115
|
+
if (typeof args.trimStartSec === "number") patch.trimStartSec = args.trimStartSec;
|
|
116
|
+
if (typeof args.trimEndSec === "number") patch.trimEndSec = args.trimEndSec;
|
|
117
|
+
ctx.setTimeline(updateClip(ctx.getTimeline(), id, patch));
|
|
118
|
+
return {
|
|
119
|
+
ok: true,
|
|
120
|
+
label: `Trimmed ${id}`,
|
|
121
|
+
content: "ok"
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
ok: false,
|
|
126
|
+
label: name,
|
|
127
|
+
content: `Unknown tool ${name}`
|
|
128
|
+
};
|
|
129
|
+
}export{CUT_AGENT_TOOLS,executeCutTool};//# sourceMappingURL=cutTools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cutTools.js","sources":["../../../../../src/features/canvas/videoEditor/agent/cutTools.ts"],"sourcesContent":["/**\n * Cut-only agent tools mapped onto native EditorTimeline.\n */\nimport type { EditorTimeline } from '../editorModel';\nimport { moveClip, removeClip, updateClip } from '../editorModel';\nimport type { BrainTool } from './brainClient';\n\nexport interface AgentToolContext {\n getTimeline: () => EditorTimeline;\n setTimeline: (next: EditorTimeline) => void;\n}\n\nexport interface ToolOutcome {\n ok: boolean;\n label: string;\n detail?: string;\n content: string;\n}\n\nexport const CUT_AGENT_TOOLS: BrainTool[] = [\n {\n type: 'function',\n function: {\n name: 'get_timeline',\n description: 'List clips on the timeline with ids, sources, and durations.',\n parameters: { type: 'object', properties: {} },\n },\n },\n {\n type: 'function',\n function: {\n name: 'remove_scenes',\n description: 'Remove clips by id.',\n parameters: {\n type: 'object',\n properties: { ids: { type: 'array', items: { type: 'string' } } },\n required: ['ids'],\n },\n },\n },\n {\n type: 'function',\n function: {\n name: 'reorder_scenes',\n description: 'Move a clip earlier (-1) or later (1) by one slot.',\n parameters: {\n type: 'object',\n properties: {\n id: { type: 'string' },\n direction: { type: 'integer', enum: [-1, 1] },\n },\n required: ['id', 'direction'],\n },\n },\n },\n {\n type: 'function',\n function: {\n name: 'trim_scene',\n description: 'Set trimStartSec / trimEndSec on a clip (source seconds).',\n parameters: {\n type: 'object',\n properties: {\n id: { type: 'string' },\n trimStartSec: { type: 'number' },\n trimEndSec: { type: 'number' },\n },\n required: ['id'],\n },\n },\n },\n];\n\nexport async function executeCutTool(name: string, rawArgs: unknown, ctx: AgentToolContext): Promise<ToolOutcome> {\n const args = (rawArgs && typeof rawArgs === 'object' ? rawArgs : {}) as Record<string, unknown>;\n if (name === 'get_timeline') {\n const t = ctx.getTimeline();\n const rows = t.clips.map((c, i) => ({\n index: i,\n id: c.id,\n src: c.src?.slice(0, 80),\n durationSec: c.durationSec,\n trimStartSec: c.trimStartSec,\n trimEndSec: c.trimEndSec,\n }));\n return {\n ok: true,\n label: `Timeline · ${rows.length} clip(s)`,\n content: JSON.stringify(rows),\n };\n }\n if (name === 'remove_scenes') {\n const ids = Array.isArray(args.ids) ? args.ids.filter((x): x is string => typeof x === 'string') : [];\n let next = ctx.getTimeline();\n for (const id of ids) next = removeClip(next, id);\n ctx.setTimeline(next);\n return { ok: true, label: `Removed ${ids.length} clip(s)`, content: 'ok' };\n }\n if (name === 'reorder_scenes') {\n const id = typeof args.id === 'string' ? args.id : '';\n const direction = args.direction === -1 || args.direction === 1 ? args.direction : 1;\n ctx.setTimeline(moveClip(ctx.getTimeline(), id, direction));\n return { ok: true, label: `Moved ${id}`, content: 'ok' };\n }\n if (name === 'trim_scene') {\n const id = typeof args.id === 'string' ? args.id : '';\n const patch: { trimStartSec?: number; trimEndSec?: number | null } = {};\n if (typeof args.trimStartSec === 'number') patch.trimStartSec = args.trimStartSec;\n if (typeof args.trimEndSec === 'number') patch.trimEndSec = args.trimEndSec;\n ctx.setTimeline(updateClip(ctx.getTimeline(), id, patch));\n return { ok: true, label: `Trimmed ${id}`, content: 'ok' };\n }\n return { ok: false, label: name, content: `Unknown tool ${name}` };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
import {parseHexColor}from'./solidColorPng.js';export{colorFromSolidSrc,solidColorPngDataUrl,uploadFilenameFor}from'./solidColorPng.js';var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
const MOTION_STRENGTHS = [{
|
|
21
|
+
id: "subtle",
|
|
22
|
+
label: "Subtle",
|
|
23
|
+
zoom: 1.1
|
|
24
|
+
}, {
|
|
25
|
+
id: "normal",
|
|
26
|
+
label: "Normal",
|
|
27
|
+
zoom: 1.3
|
|
28
|
+
}, {
|
|
29
|
+
id: "strong",
|
|
30
|
+
label: "Strong",
|
|
31
|
+
zoom: 1.7
|
|
32
|
+
}];
|
|
33
|
+
const MOTION_MOVES = [{
|
|
34
|
+
id: "none",
|
|
35
|
+
label: "None"
|
|
36
|
+
}, {
|
|
37
|
+
id: "zoom-in",
|
|
38
|
+
label: "Zoom in"
|
|
39
|
+
}, {
|
|
40
|
+
id: "zoom-out",
|
|
41
|
+
label: "Zoom out"
|
|
42
|
+
}, {
|
|
43
|
+
id: "pan-left",
|
|
44
|
+
label: "Pan left"
|
|
45
|
+
}, {
|
|
46
|
+
id: "pan-right",
|
|
47
|
+
label: "Pan right"
|
|
48
|
+
}, {
|
|
49
|
+
id: "pan-up",
|
|
50
|
+
label: "Pan up"
|
|
51
|
+
}, {
|
|
52
|
+
id: "pan-down",
|
|
53
|
+
label: "Pan down"
|
|
54
|
+
}];
|
|
55
|
+
const CLIP_TRANSITIONS = ["fade", "wipeleft", "wiperight", "slideup", "slidedown", "circleopen", "dissolve"];
|
|
56
|
+
function kenBurnsFor(move, zoom) {
|
|
57
|
+
if (move === "none") return null;
|
|
58
|
+
if (move === "zoom-in") return {
|
|
59
|
+
zoomStart: 1,
|
|
60
|
+
zoomEnd: zoom,
|
|
61
|
+
direction: "center"
|
|
62
|
+
};
|
|
63
|
+
if (move === "zoom-out") return {
|
|
64
|
+
zoomStart: zoom,
|
|
65
|
+
zoomEnd: 1,
|
|
66
|
+
direction: "center"
|
|
67
|
+
};
|
|
68
|
+
return {
|
|
69
|
+
zoomStart: zoom,
|
|
70
|
+
zoomEnd: zoom,
|
|
71
|
+
direction: move.replace("pan-", "")
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function moveIdOf(kb) {
|
|
75
|
+
if (!kb) return "none";
|
|
76
|
+
if (kb.direction !== "center") return `pan-${kb.direction}`;
|
|
77
|
+
return kb.zoomEnd >= kb.zoomStart ? "zoom-in" : "zoom-out";
|
|
78
|
+
}
|
|
79
|
+
const SPEED_PRESETS = [0.5, 1, 1.5, 2];
|
|
80
|
+
const SPEED_CURVES = ["constant", "ease-in", "ease-out", "pulse"];
|
|
81
|
+
const SEGMENT_LENGTH_SEC = 2;
|
|
82
|
+
function rangeAtPlayhead(playheadSec, totalSec) {
|
|
83
|
+
const span = Math.max(totalSec, SEGMENT_LENGTH_SEC);
|
|
84
|
+
const startSec = Math.max(0, Math.min(playheadSec, span - SEGMENT_LENGTH_SEC));
|
|
85
|
+
return {
|
|
86
|
+
startSec,
|
|
87
|
+
durationSec: Math.min(SEGMENT_LENGTH_SEC, Math.max(0.5, span - startSec))
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function newSegment(kind, playheadSec, totalSec) {
|
|
91
|
+
counter += 1;
|
|
92
|
+
const {
|
|
93
|
+
startSec,
|
|
94
|
+
durationSec
|
|
95
|
+
} = rangeAtPlayhead(playheadSec, totalSec);
|
|
96
|
+
if (kind === "speed") {
|
|
97
|
+
return {
|
|
98
|
+
id: `seg-${counter}`,
|
|
99
|
+
kind,
|
|
100
|
+
name: "Speed \xD72",
|
|
101
|
+
startSec,
|
|
102
|
+
durationSec,
|
|
103
|
+
speed: 2
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
if (kind === "zoom") {
|
|
107
|
+
return {
|
|
108
|
+
id: `seg-${counter}`,
|
|
109
|
+
kind,
|
|
110
|
+
name: "Zoom subtle",
|
|
111
|
+
startSec,
|
|
112
|
+
durationSec,
|
|
113
|
+
zoom: {
|
|
114
|
+
x: 50,
|
|
115
|
+
y: 50,
|
|
116
|
+
depth: "subtle"
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
if (kind === "crop") {
|
|
121
|
+
return {
|
|
122
|
+
id: `seg-${counter}`,
|
|
123
|
+
kind,
|
|
124
|
+
name: "Crop",
|
|
125
|
+
startSec,
|
|
126
|
+
durationSec,
|
|
127
|
+
crop: {
|
|
128
|
+
x: 10,
|
|
129
|
+
y: 10,
|
|
130
|
+
width: 80,
|
|
131
|
+
height: 80
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
id: `seg-${counter}`,
|
|
137
|
+
kind: "trim",
|
|
138
|
+
name: "Trim",
|
|
139
|
+
startSec,
|
|
140
|
+
durationSec
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
function emptyTimeline() {
|
|
144
|
+
return {
|
|
145
|
+
clips: [],
|
|
146
|
+
texts: [],
|
|
147
|
+
segments: [],
|
|
148
|
+
voiceover: null,
|
|
149
|
+
soundtrack: null
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
const DEFAULT_IMAGE_SEC = 3;
|
|
153
|
+
let counter = 0;
|
|
154
|
+
function clipFromItem(item) {
|
|
155
|
+
var _a;
|
|
156
|
+
counter += 1;
|
|
157
|
+
return {
|
|
158
|
+
id: `clip-${counter}`,
|
|
159
|
+
itemId: item.id,
|
|
160
|
+
type: item.type === "video" ? "video" : "image",
|
|
161
|
+
src: item.src,
|
|
162
|
+
name: ((_a = item.generatedAssetName) == null ? void 0 : _a.trim()) || (item.type === "video" ? "Video" : "Image"),
|
|
163
|
+
durationSec: item.type === "video" ? null : DEFAULT_IMAGE_SEC,
|
|
164
|
+
trimStartSec: 0,
|
|
165
|
+
trimEndSec: null,
|
|
166
|
+
speed: 1,
|
|
167
|
+
speedCurve: "constant",
|
|
168
|
+
filter: "none",
|
|
169
|
+
kenBurns: null,
|
|
170
|
+
transitionIn: null,
|
|
171
|
+
volume: 1,
|
|
172
|
+
muted: false
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
function solidColorSrc(hex) {
|
|
176
|
+
const h = hex.replace("#", "").padEnd(6, "0");
|
|
177
|
+
const r = Number.parseInt(h.slice(0, 2), 16) || 0;
|
|
178
|
+
const g = Number.parseInt(h.slice(2, 4), 16) || 0;
|
|
179
|
+
const b = Number.parseInt(h.slice(4, 6), 16) || 0;
|
|
180
|
+
const bytes = [71, 73, 70, 56, 57, 97, 1, 0, 1, 0, 128, 0, 0, r, g, b, 0, 0, 0, 44, 0, 0, 0, 0, 1, 0, 1, 0, 0, 2, 2, 68, 1, 0, 59];
|
|
181
|
+
let bin = "";
|
|
182
|
+
for (const byte of bytes) bin += String.fromCharCode(byte);
|
|
183
|
+
const b64 = typeof globalThis.btoa === "function" ? globalThis.btoa(bin) : Buffer.from(Uint8Array.from(bytes)).toString("base64");
|
|
184
|
+
return `data:image/gif;base64,${b64}`;
|
|
185
|
+
}
|
|
186
|
+
function clipFromColor(hex) {
|
|
187
|
+
const {
|
|
188
|
+
hex: fillColor
|
|
189
|
+
} = parseHexColor(hex);
|
|
190
|
+
return __spreadProps(__spreadValues({}, clipFromItem({
|
|
191
|
+
id: `scene-${hex.replace("#", "")}-${counter + 1}`,
|
|
192
|
+
type: "image",
|
|
193
|
+
src: solidColorSrc(fillColor),
|
|
194
|
+
generatedAssetName: "Blank scene"
|
|
195
|
+
})), {
|
|
196
|
+
fillColor
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
const TEXT_PRESETS = [{
|
|
200
|
+
id: "title",
|
|
201
|
+
label: "Title",
|
|
202
|
+
text: "Title",
|
|
203
|
+
x: 0.5,
|
|
204
|
+
y: 0.38
|
|
205
|
+
}, {
|
|
206
|
+
id: "subtitle",
|
|
207
|
+
label: "Subtitle",
|
|
208
|
+
text: "Subtitle",
|
|
209
|
+
x: 0.5,
|
|
210
|
+
y: 0.54
|
|
211
|
+
}, {
|
|
212
|
+
id: "caption",
|
|
213
|
+
label: "Caption",
|
|
214
|
+
text: "Caption",
|
|
215
|
+
x: 0.5,
|
|
216
|
+
y: 0.86
|
|
217
|
+
}, {
|
|
218
|
+
id: "lower-third",
|
|
219
|
+
label: "Lower third",
|
|
220
|
+
text: "Name \xB7 Role",
|
|
221
|
+
x: 0.5,
|
|
222
|
+
y: 0.78
|
|
223
|
+
}];
|
|
224
|
+
function textClipAt(startSec, preset) {
|
|
225
|
+
var _a, _b, _c;
|
|
226
|
+
counter += 1;
|
|
227
|
+
return {
|
|
228
|
+
id: `text-${counter}`,
|
|
229
|
+
text: (_a = preset == null ? void 0 : preset.text) != null ? _a : "Title",
|
|
230
|
+
startSec,
|
|
231
|
+
durationSec: 2,
|
|
232
|
+
x: (_b = preset == null ? void 0 : preset.x) != null ? _b : 0.5,
|
|
233
|
+
y: (_c = preset == null ? void 0 : preset.y) != null ? _c : 0.35
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
function clipTimelineSec(clip) {
|
|
237
|
+
var _a;
|
|
238
|
+
if (clip.type === "image") return ((_a = clip.durationSec) != null ? _a : DEFAULT_IMAGE_SEC) / clip.speed;
|
|
239
|
+
if (clip.trimEndSec === null) return null;
|
|
240
|
+
return Math.max(0, clip.trimEndSec - clip.trimStartSec) / clip.speed;
|
|
241
|
+
}
|
|
242
|
+
function timelineDuration(clips) {
|
|
243
|
+
let knownSec = 0;
|
|
244
|
+
let hasUnknown = false;
|
|
245
|
+
for (const clip of clips) {
|
|
246
|
+
const sec = clipTimelineSec(clip);
|
|
247
|
+
if (sec === null) hasUnknown = true;
|
|
248
|
+
else knownSec += sec;
|
|
249
|
+
}
|
|
250
|
+
return {
|
|
251
|
+
knownSec: Math.round(knownSec * 10) / 10,
|
|
252
|
+
hasUnknown
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
function updateClip(timeline, id, patch) {
|
|
256
|
+
return __spreadProps(__spreadValues({}, timeline), {
|
|
257
|
+
clips: timeline.clips.map((c) => c.id === id ? __spreadProps(__spreadValues(__spreadValues({}, c), patch), {
|
|
258
|
+
id: c.id
|
|
259
|
+
}) : c)
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
function moveClip(timeline, id, dir) {
|
|
263
|
+
const index = timeline.clips.findIndex((c) => c.id === id);
|
|
264
|
+
const to = index + dir;
|
|
265
|
+
if (index < 0 || to < 0 || to >= timeline.clips.length) return timeline;
|
|
266
|
+
const clips = [...timeline.clips];
|
|
267
|
+
const [clip] = clips.splice(index, 1);
|
|
268
|
+
clips.splice(to, 0, clip);
|
|
269
|
+
return __spreadProps(__spreadValues({}, timeline), {
|
|
270
|
+
clips
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
function removeClip(timeline, id) {
|
|
274
|
+
return __spreadProps(__spreadValues({}, timeline), {
|
|
275
|
+
clips: timeline.clips.filter((c) => c.id !== id)
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
function updateText(timeline, id, patch) {
|
|
279
|
+
return __spreadProps(__spreadValues({}, timeline), {
|
|
280
|
+
texts: timeline.texts.map((t) => t.id === id ? __spreadProps(__spreadValues(__spreadValues({}, t), patch), {
|
|
281
|
+
id: t.id
|
|
282
|
+
}) : t)
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
function removeText(timeline, id) {
|
|
286
|
+
return __spreadProps(__spreadValues({}, timeline), {
|
|
287
|
+
texts: timeline.texts.filter((t) => t.id !== id)
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
function trimClip(clip, startSec, endSec) {
|
|
291
|
+
const start = Math.max(0, startSec);
|
|
292
|
+
if (endSec === null) return {
|
|
293
|
+
trimStartSec: start,
|
|
294
|
+
trimEndSec: null
|
|
295
|
+
};
|
|
296
|
+
return {
|
|
297
|
+
trimStartSec: Math.min(start, Math.max(0, endSec - 0.1)),
|
|
298
|
+
trimEndSec: Math.max(endSec, start + 0.1)
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
function buildExportSpec(timeline) {
|
|
302
|
+
var _a;
|
|
303
|
+
return __spreadProps(__spreadValues(__spreadValues(__spreadValues({
|
|
304
|
+
version: 2,
|
|
305
|
+
fps: 30,
|
|
306
|
+
format: "mp4"
|
|
307
|
+
}, timeline.voiceover ? {
|
|
308
|
+
voiceover: timeline.voiceover
|
|
309
|
+
} : {}), timeline.soundtrack ? {
|
|
310
|
+
soundtrack: timeline.soundtrack
|
|
311
|
+
} : {}), ((_a = timeline.segments) == null ? void 0 : _a.length) ? {
|
|
312
|
+
segments: timeline.segments
|
|
313
|
+
} : {}), {
|
|
314
|
+
clips: timeline.clips.map(({
|
|
315
|
+
type,
|
|
316
|
+
src,
|
|
317
|
+
durationSec,
|
|
318
|
+
trimStartSec,
|
|
319
|
+
trimEndSec,
|
|
320
|
+
speed,
|
|
321
|
+
speedCurve,
|
|
322
|
+
filter,
|
|
323
|
+
kenBurns,
|
|
324
|
+
transitionIn,
|
|
325
|
+
volume,
|
|
326
|
+
muted,
|
|
327
|
+
fillColor
|
|
328
|
+
}) => __spreadValues({
|
|
329
|
+
type,
|
|
330
|
+
src,
|
|
331
|
+
durationSec,
|
|
332
|
+
trimStartSec,
|
|
333
|
+
trimEndSec,
|
|
334
|
+
speed,
|
|
335
|
+
speedCurve,
|
|
336
|
+
filter,
|
|
337
|
+
kenBurns,
|
|
338
|
+
transitionIn,
|
|
339
|
+
volume,
|
|
340
|
+
muted
|
|
341
|
+
}, fillColor ? {
|
|
342
|
+
fillColor
|
|
343
|
+
} : {})),
|
|
344
|
+
texts: timeline.texts
|
|
345
|
+
});
|
|
346
|
+
}export{CLIP_TRANSITIONS,DEFAULT_IMAGE_SEC,MOTION_MOVES,MOTION_STRENGTHS,SEGMENT_LENGTH_SEC,SPEED_CURVES,SPEED_PRESETS,TEXT_PRESETS,buildExportSpec,clipFromColor,clipFromItem,clipTimelineSec,emptyTimeline,kenBurnsFor,moveClip,moveIdOf,newSegment,rangeAtPlayhead,removeClip,removeText,solidColorSrc,textClipAt,timelineDuration,trimClip,updateClip,updateText};//# sourceMappingURL=editorModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editorModel.js","sources":["../../../../src/features/canvas/videoEditor/editorModel.ts"],"sourcesContent":["/**\n * Pure timeline model for the native video editor - every edit the UI can\n * make, as data. No RN imports so it runs identically under Metro, rspack\n * and jest, and the export spec is the single contract the yantra-video\n * render service consumes.\n */\nimport type { CanvasItem } from '../canvasCore';\nimport { parseHexColor } from './solidColorPng';\n\nexport { colorFromSolidSrc, solidColorPngDataUrl, uploadFilenameFor } from './solidColorPng';\n\nexport type FilterId = 'none' | 'cinematic' | 'film' | 'kodak' | 'mono' | 'vivid' | 'warm' | 'cool' | 'dreamy';\n\n/** Stage-toolbar motion — canvas-surface StageToolbar. */\nexport type KenBurns = { zoomStart: number; zoomEnd: number; direction: string };\n\nexport const MOTION_STRENGTHS = [\n { id: 'subtle', label: 'Subtle', zoom: 1.1 },\n { id: 'normal', label: 'Normal', zoom: 1.3 },\n { id: 'strong', label: 'Strong', zoom: 1.7 },\n] as const;\n\nexport const MOTION_MOVES = [\n { id: 'none', label: 'None' },\n { id: 'zoom-in', label: 'Zoom in' },\n { id: 'zoom-out', label: 'Zoom out' },\n { id: 'pan-left', label: 'Pan left' },\n { id: 'pan-right', label: 'Pan right' },\n { id: 'pan-up', label: 'Pan up' },\n { id: 'pan-down', label: 'Pan down' },\n] as const;\n\nexport const CLIP_TRANSITIONS = [\n 'fade',\n 'wipeleft',\n 'wiperight',\n 'slideup',\n 'slidedown',\n 'circleopen',\n 'dissolve',\n] as const;\n\nexport function kenBurnsFor(move: string, zoom: number): KenBurns | null {\n if (move === 'none') return null;\n if (move === 'zoom-in') return { zoomStart: 1, zoomEnd: zoom, direction: 'center' };\n if (move === 'zoom-out') return { zoomStart: zoom, zoomEnd: 1, direction: 'center' };\n return { zoomStart: zoom, zoomEnd: zoom, direction: move.replace('pan-', '') };\n}\n\nexport function moveIdOf(kb: KenBurns | null | undefined): string {\n if (!kb) return 'none';\n if (kb.direction !== 'center') return `pan-${kb.direction}`;\n return kb.zoomEnd >= kb.zoomStart ? 'zoom-in' : 'zoom-out';\n}\n\n/** Constant playback speeds the preview can honestly reproduce. */\nexport const SPEED_PRESETS = [0.5, 1, 1.5, 2] as const;\nexport type SpeedPreset = (typeof SPEED_PRESETS)[number];\n\n/** Speed-curve intents rendered server-side; preview plays the base speed. */\nexport type SpeedCurve = 'constant' | 'ease-in' | 'ease-out' | 'pulse';\nexport const SPEED_CURVES: readonly SpeedCurve[] = ['constant', 'ease-in', 'ease-out', 'pulse'];\n\nexport interface EditorClip {\n /** Unique per timeline entry - the same media can appear twice. */\n id: string;\n itemId: string;\n type: 'image' | 'video';\n src: string;\n name: string;\n /** Images hold a still for this long; null = the video's own length. */\n durationSec: number | null;\n /** Seconds cut from the head of a video clip. */\n trimStartSec: number;\n /** Absolute end point in source seconds; null = source end. */\n trimEndSec: number | null;\n speed: SpeedPreset;\n speedCurve: SpeedCurve;\n filter: FilterId;\n kenBurns?: KenBurns | null;\n /** xfade into this clip from the previous one. */\n transitionIn?: { effect: string; durationMs: number } | null;\n /** 0..1 */\n volume: number;\n muted: boolean;\n /** Solid colour scene — `src` is a preview GIF; export paints a PNG. */\n fillColor?: string | null;\n}\n\nexport interface TextClip {\n id: string;\n text: string;\n startSec: number;\n durationSec: number;\n /** Normalized 0..1 position of the text centre on the frame. */\n x: number;\n y: number;\n}\n\n/** Cursorful-style ranged effect over the cut (web ClipSegment). */\nexport type SegmentKind = 'speed' | 'zoom' | 'crop' | 'trim';\nexport type ZoomDepth = 'subtle' | 'moderate' | 'strong';\n\nexport interface EditorSegment {\n id: string;\n kind: SegmentKind;\n name: string;\n startSec: number;\n durationSec: number;\n speed?: number;\n zoom?: { x: number; y: number; depth: ZoomDepth };\n crop?: { x: number; y: number; width: number; height: number };\n}\n\nexport const SEGMENT_LENGTH_SEC = 2;\n\n/** 2s range at the playhead, kept inside the cut so the ruler does not grow. */\nexport function rangeAtPlayhead(playheadSec: number, totalSec: number): { startSec: number; durationSec: number } {\n const span = Math.max(totalSec, SEGMENT_LENGTH_SEC);\n const startSec = Math.max(0, Math.min(playheadSec, span - SEGMENT_LENGTH_SEC));\n return { startSec, durationSec: Math.min(SEGMENT_LENGTH_SEC, Math.max(0.5, span - startSec)) };\n}\n\nexport function newSegment(kind: SegmentKind, playheadSec: number, totalSec: number): EditorSegment {\n counter += 1;\n const { startSec, durationSec } = rangeAtPlayhead(playheadSec, totalSec);\n if (kind === 'speed') {\n return { id: `seg-${counter}`, kind, name: 'Speed ×2', startSec, durationSec, speed: 2 };\n }\n if (kind === 'zoom') {\n return {\n id: `seg-${counter}`,\n kind,\n name: 'Zoom subtle',\n startSec,\n durationSec,\n zoom: { x: 50, y: 50, depth: 'subtle' },\n };\n }\n if (kind === 'crop') {\n return {\n id: `seg-${counter}`,\n kind,\n name: 'Crop',\n startSec,\n durationSec,\n crop: { x: 10, y: 10, width: 80, height: 80 },\n };\n }\n return { id: `seg-${counter}`, kind: 'trim', name: 'Trim', startSec, durationSec };\n}\n\n/** A generated narration/voice track laid under the whole timeline. */\nexport interface Voiceover {\n /** Rendered speech audio (voicebox SPEAK output). */\n audioUrl: string;\n /** mix = duck under existing audio; replace = swap the audio track. */\n mode: 'mix' | 'replace';\n /** Voice name/profile used - display only. */\n voiceLabel?: string;\n /** The spoken text - kept for re-generation. */\n text?: string;\n}\n\n/** A music bed laid under the whole timeline (generated or user-provided). */\nexport interface Soundtrack {\n /** Fetchable audio URL (yantra-audio generation output or an upload). */\n audioUrl: string;\n /** mix = duck under existing audio; replace = swap the audio track. */\n mode: 'mix' | 'replace';\n /** Display label - the generation prompt or the track name. */\n title?: string;\n}\n\nexport interface EditorTimeline {\n clips: EditorClip[];\n texts: TextClip[];\n segments?: EditorSegment[];\n voiceover?: Voiceover | null;\n soundtrack?: Soundtrack | null;\n}\n\nexport function emptyTimeline(): EditorTimeline {\n return { clips: [], texts: [], segments: [], voiceover: null, soundtrack: null };\n}\n\nexport interface VideoExportSpec {\n version: 2;\n fps: 30;\n format: 'mp4';\n clips: Array<\n Pick<\n EditorClip,\n | 'type'\n | 'src'\n | 'durationSec'\n | 'trimStartSec'\n | 'trimEndSec'\n | 'speed'\n | 'speedCurve'\n | 'filter'\n | 'kenBurns'\n | 'transitionIn'\n | 'volume'\n | 'muted'\n | 'fillColor'\n >\n >;\n texts: TextClip[];\n segments?: EditorSegment[];\n voiceover?: Voiceover | null;\n soundtrack?: Soundtrack | null;\n}\n\nexport const DEFAULT_IMAGE_SEC = 3;\n\nlet counter = 0;\n/** Test seam: deterministic ids. */\nexport function resetEditorIds(): void {\n counter = 0;\n}\n\nexport function clipFromItem(item: CanvasItem): EditorClip {\n counter += 1;\n return {\n id: `clip-${counter}`,\n itemId: item.id,\n type: item.type === 'video' ? 'video' : 'image',\n src: item.src,\n name: item.generatedAssetName?.trim() || (item.type === 'video' ? 'Video' : 'Image'),\n durationSec: item.type === 'video' ? null : DEFAULT_IMAGE_SEC,\n trimStartSec: 0,\n trimEndSec: null,\n speed: 1,\n speedCurve: 'constant',\n filter: 'none',\n kenBurns: null,\n transitionIn: null,\n volume: 1,\n muted: false,\n };\n}\n\n/** 1×1 GIF data URL — blank color scenes without a network placeholder. */\nexport function solidColorSrc(hex: string): string {\n const h = hex.replace('#', '').padEnd(6, '0');\n const r = Number.parseInt(h.slice(0, 2), 16) || 0;\n const g = Number.parseInt(h.slice(2, 4), 16) || 0;\n const b = Number.parseInt(h.slice(4, 6), 16) || 0;\n const bytes = [\n 0x47,\n 0x49,\n 0x46,\n 0x38,\n 0x39,\n 0x61,\n 0x01,\n 0x00,\n 0x01,\n 0x00,\n 0x80,\n 0x00,\n 0x00,\n r,\n g,\n b,\n 0x00,\n 0x00,\n 0x00,\n 0x2c,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x01,\n 0x00,\n 0x01,\n 0x00,\n 0x00,\n 0x02,\n 0x02,\n 0x44,\n 0x01,\n 0x00,\n 0x3b,\n ];\n let bin = '';\n for (const byte of bytes) bin += String.fromCharCode(byte);\n const b64 =\n typeof globalThis.btoa === 'function'\n ? globalThis.btoa(bin)\n : Buffer.from(Uint8Array.from(bytes)).toString('base64');\n return `data:image/gif;base64,${b64}`;\n}\n\nexport function clipFromColor(hex: string): EditorClip {\n const { hex: fillColor } = parseHexColor(hex);\n return {\n ...clipFromItem({\n id: `scene-${hex.replace('#', '')}-${counter + 1}`,\n type: 'image',\n src: solidColorSrc(fillColor),\n x: 0,\n y: 0,\n width: 640,\n height: 360,\n zIndex: 1,\n generatedAssetName: 'Blank scene',\n }),\n fillColor,\n };\n}\n\n/** Title-card presets — same four as canvas-surface MediaLibrary TEXT_PRESETS. */\nexport const TEXT_PRESETS = [\n { id: 'title', label: 'Title', text: 'Title', x: 0.5, y: 0.38 },\n { id: 'subtitle', label: 'Subtitle', text: 'Subtitle', x: 0.5, y: 0.54 },\n { id: 'caption', label: 'Caption', text: 'Caption', x: 0.5, y: 0.86 },\n { id: 'lower-third', label: 'Lower third', text: 'Name · Role', x: 0.5, y: 0.78 },\n] as const;\n\nexport function textClipAt(startSec: number, preset?: { text: string; x: number; y: number }): TextClip {\n counter += 1;\n return {\n id: `text-${counter}`,\n text: preset?.text ?? 'Title',\n startSec,\n durationSec: 2,\n x: preset?.x ?? 0.5,\n y: preset?.y ?? 0.35,\n };\n}\n\n/** Effective duration a clip contributes to the timeline, after trim+speed.\n * Unknown-length videos report null - the UI says \"video\", not a guess. */\nexport function clipTimelineSec(clip: EditorClip): number | null {\n if (clip.type === 'image') return (clip.durationSec ?? DEFAULT_IMAGE_SEC) / clip.speed;\n if (clip.trimEndSec === null) return null;\n return Math.max(0, clip.trimEndSec - clip.trimStartSec) / clip.speed;\n}\n\n/** Total known seconds + whether unknown-length video remains. */\nexport function timelineDuration(clips: readonly EditorClip[]): { knownSec: number; hasUnknown: boolean } {\n let knownSec = 0;\n let hasUnknown = false;\n for (const clip of clips) {\n const sec = clipTimelineSec(clip);\n if (sec === null) hasUnknown = true;\n else knownSec += sec;\n }\n return { knownSec: Math.round(knownSec * 10) / 10, hasUnknown };\n}\n\nexport function updateClip(timeline: EditorTimeline, id: string, patch: Partial<EditorClip>): EditorTimeline {\n return {\n ...timeline,\n clips: timeline.clips.map((c) => (c.id === id ? { ...c, ...patch, id: c.id } : c)),\n };\n}\n\nexport function moveClip(timeline: EditorTimeline, id: string, dir: -1 | 1): EditorTimeline {\n const index = timeline.clips.findIndex((c) => c.id === id);\n const to = index + dir;\n if (index < 0 || to < 0 || to >= timeline.clips.length) return timeline;\n const clips = [...timeline.clips];\n const [clip] = clips.splice(index, 1);\n clips.splice(to, 0, clip);\n return { ...timeline, clips };\n}\n\nexport function removeClip(timeline: EditorTimeline, id: string): EditorTimeline {\n return { ...timeline, clips: timeline.clips.filter((c) => c.id !== id) };\n}\n\nexport function updateText(timeline: EditorTimeline, id: string, patch: Partial<TextClip>): EditorTimeline {\n return {\n ...timeline,\n texts: timeline.texts.map((t) => (t.id === id ? { ...t, ...patch, id: t.id } : t)),\n };\n}\n\nexport function removeText(timeline: EditorTimeline, id: string): EditorTimeline {\n return { ...timeline, texts: timeline.texts.filter((t) => t.id !== id) };\n}\n\n/** Clamp a trim edit so the window never inverts or escapes the source. */\nexport function trimClip(\n clip: EditorClip,\n startSec: number,\n endSec: number | null,\n): Pick<EditorClip, 'trimStartSec' | 'trimEndSec'> {\n const start = Math.max(0, startSec);\n if (endSec === null) return { trimStartSec: start, trimEndSec: null };\n return { trimStartSec: Math.min(start, Math.max(0, endSec - 0.1)), trimEndSec: Math.max(endSec, start + 0.1) };\n}\n\nexport function buildExportSpec(timeline: EditorTimeline): VideoExportSpec {\n return {\n version: 2,\n fps: 30,\n format: 'mp4',\n ...(timeline.voiceover ? { voiceover: timeline.voiceover } : {}),\n ...(timeline.soundtrack ? { soundtrack: timeline.soundtrack } : {}),\n ...(timeline.segments?.length ? { segments: timeline.segments } : {}),\n clips: timeline.clips.map(\n ({\n type,\n src,\n durationSec,\n trimStartSec,\n trimEndSec,\n speed,\n speedCurve,\n filter,\n kenBurns,\n transitionIn,\n volume,\n muted,\n fillColor,\n }) => ({\n type,\n src,\n durationSec,\n trimStartSec,\n trimEndSec,\n speed,\n speedCurve,\n filter,\n kenBurns,\n transitionIn,\n volume,\n muted,\n ...(fillColor ? { fillColor } : {}),\n }),\n ),\n texts: timeline.texts,\n };\n}\n"],"names":[],"mappings":"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"}
|