@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.
Files changed (522) hide show
  1. package/lib/components/GatewayConnector/GatewayConnector.js +2 -2
  2. package/lib/components/GatewayConnector/GatewayConnector.js.map +1 -1
  3. package/lib/components/KeyboardComposerDock.js +8 -1
  4. package/lib/components/KeyboardComposerDock.js.map +1 -1
  5. package/lib/components/NavigationHeader/NavigationHeader.js +2 -2
  6. package/lib/components/NavigationHeader/NavigationHeader.js.map +1 -1
  7. package/lib/config/env-config.js +4 -0
  8. package/lib/config/env-config.js.map +1 -1
  9. package/lib/contexts/ChatLiveStreamContext.js +4 -1
  10. package/lib/contexts/ChatLiveStreamContext.js.map +1 -1
  11. package/lib/features/agent-chat/NativeAgentChat.js +2 -0
  12. package/lib/features/agent-chat/NativeAgentChat.js.map +1 -1
  13. package/lib/features/apps/AppsCatalog.js +2 -2
  14. package/lib/features/apps/AppsCatalog.js.map +1 -1
  15. package/lib/features/audio-input/MicErrorBoundary.js +2 -2
  16. package/lib/features/audio-input/MicErrorBoundary.js.map +1 -1
  17. package/lib/features/canvas/AudioEditorExperience.js +308 -0
  18. package/lib/features/canvas/AudioEditorExperience.js.map +1 -0
  19. package/lib/features/canvas/CanvasAgentChatPane.js +310 -0
  20. package/lib/features/canvas/CanvasAgentChatPane.js.map +1 -0
  21. package/lib/features/canvas/CanvasBoardsGrid.js +414 -0
  22. package/lib/features/canvas/CanvasBoardsGrid.js.map +1 -0
  23. package/lib/features/canvas/CanvasChatResultCard.js +113 -0
  24. package/lib/features/canvas/CanvasChatResultCard.js.map +1 -0
  25. package/lib/features/canvas/CanvasEditToolsPanel.js +179 -0
  26. package/lib/features/canvas/CanvasEditToolsPanel.js.map +1 -0
  27. package/lib/features/canvas/CanvasExperience.js +859 -0
  28. package/lib/features/canvas/CanvasExperience.js.map +1 -0
  29. package/lib/features/canvas/CanvasGeneratePanel.js +514 -0
  30. package/lib/features/canvas/CanvasGeneratePanel.js.map +1 -0
  31. package/lib/features/canvas/CanvasLibrarySheet.js +355 -0
  32. package/lib/features/canvas/CanvasLibrarySheet.js.map +1 -0
  33. package/lib/features/canvas/CanvasLooksPanel.js +184 -0
  34. package/lib/features/canvas/CanvasLooksPanel.js.map +1 -0
  35. package/lib/features/canvas/CanvasTasksPanel.js +138 -0
  36. package/lib/features/canvas/CanvasTasksPanel.js.map +1 -0
  37. package/lib/features/canvas/CanvasTemplatesPanel.js +226 -0
  38. package/lib/features/canvas/CanvasTemplatesPanel.js.map +1 -0
  39. package/lib/features/canvas/CanvasToolDock.js +423 -0
  40. package/lib/features/canvas/CanvasToolDock.js.map +1 -0
  41. package/lib/features/canvas/FrameExtractorExperience.js +242 -0
  42. package/lib/features/canvas/FrameExtractorExperience.js.map +1 -0
  43. package/lib/features/canvas/ImageEditorExperience.js +491 -0
  44. package/lib/features/canvas/ImageEditorExperience.js.map +1 -0
  45. package/lib/features/canvas/InfluencerStudioExperience.js +288 -0
  46. package/lib/features/canvas/InfluencerStudioExperience.js.map +1 -0
  47. package/lib/features/canvas/MoodboardExperience.js +205 -0
  48. package/lib/features/canvas/MoodboardExperience.js.map +1 -0
  49. package/lib/features/canvas/NativeCanvasViewer.js +929 -0
  50. package/lib/features/canvas/NativeCanvasViewer.js.map +1 -0
  51. package/lib/features/canvas/PromoContextFields.js +150 -0
  52. package/lib/features/canvas/PromoContextFields.js.map +1 -0
  53. package/lib/features/canvas/SetStudioExperience.js +323 -0
  54. package/lib/features/canvas/SetStudioExperience.js.map +1 -0
  55. package/lib/features/canvas/VideoClipsExperience.js +175 -0
  56. package/lib/features/canvas/VideoClipsExperience.js.map +1 -0
  57. package/lib/features/canvas/VideoEditExperience.js +824 -0
  58. package/lib/features/canvas/VideoEditExperience.js.map +1 -0
  59. package/lib/features/canvas/VideoEditorExperience.js +3050 -0
  60. package/lib/features/canvas/VideoEditorExperience.js.map +1 -0
  61. package/lib/features/canvas/VideoGeneratorExperience.js +415 -0
  62. package/lib/features/canvas/VideoGeneratorExperience.js.map +1 -0
  63. package/lib/features/canvas/aiEdit.js +53 -0
  64. package/lib/features/canvas/aiEdit.js.map +1 -0
  65. package/lib/features/canvas/canvasAgentChat.js +76 -0
  66. package/lib/features/canvas/canvasAgentChat.js.map +1 -0
  67. package/lib/features/canvas/canvasBoardsCatalog.js +59 -0
  68. package/lib/features/canvas/canvasBoardsCatalog.js.map +1 -0
  69. package/lib/features/canvas/canvasBoardsSnapshot.js +14 -1
  70. package/lib/features/canvas/canvasBoardsSnapshot.js.map +1 -1
  71. package/lib/features/canvas/canvasChatDisplay.js +38 -0
  72. package/lib/features/canvas/canvasChatDisplay.js.map +1 -0
  73. package/lib/features/canvas/canvasChatTemplates.js +219 -0
  74. package/lib/features/canvas/canvasChatTemplates.js.map +1 -0
  75. package/lib/features/canvas/canvasCore.js +138 -1
  76. package/lib/features/canvas/canvasCore.js.map +1 -1
  77. package/lib/features/canvas/canvasEditOps.js +224 -0
  78. package/lib/features/canvas/canvasEditOps.js.map +1 -0
  79. package/lib/features/canvas/canvasTasks.js +187 -0
  80. package/lib/features/canvas/canvasTasks.js.map +1 -0
  81. package/lib/features/canvas/designPromptTemplates.js +3084 -0
  82. package/lib/features/canvas/designPromptTemplates.js.map +1 -0
  83. package/lib/features/canvas/editTools.js +54 -0
  84. package/lib/features/canvas/editTools.js.map +1 -0
  85. package/lib/features/canvas/extendVideo.js +5 -0
  86. package/lib/features/canvas/extendVideo.js.map +1 -0
  87. package/lib/features/canvas/frameExtract.js +33 -0
  88. package/lib/features/canvas/frameExtract.js.map +1 -0
  89. package/lib/features/canvas/generationModels.js +201 -0
  90. package/lib/features/canvas/generationModels.js.map +1 -0
  91. package/lib/features/canvas/influencer/influencerPipeline.js +170 -0
  92. package/lib/features/canvas/influencer/influencerPipeline.js.map +1 -0
  93. package/lib/features/canvas/influencer/productReel.js +72 -0
  94. package/lib/features/canvas/influencer/productReel.js.map +1 -0
  95. package/lib/features/canvas/influencer/reelPlan.js +159 -0
  96. package/lib/features/canvas/influencer/reelPlan.js.map +1 -0
  97. package/lib/features/canvas/moodboardCore.js +13 -0
  98. package/lib/features/canvas/moodboardCore.js.map +1 -0
  99. package/lib/features/canvas/promoProjectImport.js +99 -0
  100. package/lib/features/canvas/promoProjectImport.js.map +1 -0
  101. package/lib/features/canvas/promoVideo.js +312 -0
  102. package/lib/features/canvas/promoVideo.js.map +1 -0
  103. package/lib/features/canvas/recorder/CameraRecorderExperience.js +109 -0
  104. package/lib/features/canvas/recorder/CameraRecorderExperience.js.map +1 -0
  105. package/lib/features/canvas/sessionIdentity.js +28 -1
  106. package/lib/features/canvas/sessionIdentity.js.map +1 -1
  107. package/lib/features/canvas/set/SetViewportWebView.js +133 -0
  108. package/lib/features/canvas/set/SetViewportWebView.js.map +1 -0
  109. package/lib/features/canvas/set/cameraPath.js +194 -0
  110. package/lib/features/canvas/set/cameraPath.js.map +1 -0
  111. package/lib/features/canvas/set/setProject.js +24 -0
  112. package/lib/features/canvas/set/setProject.js.map +1 -0
  113. package/lib/features/canvas/storageLibrary.js +184 -0
  114. package/lib/features/canvas/storageLibrary.js.map +1 -0
  115. package/lib/features/canvas/studioCatalog.js +129 -0
  116. package/lib/features/canvas/studioCatalog.js.map +1 -0
  117. package/lib/features/canvas/studioLooks.js +189 -0
  118. package/lib/features/canvas/studioLooks.js.map +1 -0
  119. package/lib/features/canvas/surfaceIndex.js +63 -1
  120. package/lib/features/canvas/surfaceIndex.js.map +1 -1
  121. package/lib/features/canvas/templateImport/invideoNative.js +221 -0
  122. package/lib/features/canvas/templateImport/invideoNative.js.map +1 -0
  123. package/lib/features/canvas/templateImport/loadTemplate.js +43 -0
  124. package/lib/features/canvas/templateImport/loadTemplate.js.map +1 -0
  125. package/lib/features/canvas/templateImport/renderConfig.js +93 -0
  126. package/lib/features/canvas/templateImport/renderConfig.js.map +1 -0
  127. package/lib/features/canvas/useStudioCatalogTemplates.js +134 -0
  128. package/lib/features/canvas/useStudioCatalogTemplates.js.map +1 -0
  129. package/lib/features/canvas/video3d.js +109 -0
  130. package/lib/features/canvas/video3d.js.map +1 -0
  131. package/lib/features/canvas/videoClips.js +42 -0
  132. package/lib/features/canvas/videoClips.js.map +1 -0
  133. package/lib/features/canvas/videoEditor/agent/AgentCutPane.js +120 -0
  134. package/lib/features/canvas/videoEditor/agent/AgentCutPane.js.map +1 -0
  135. package/lib/features/canvas/videoEditor/agent/agentLoop.js +69 -0
  136. package/lib/features/canvas/videoEditor/agent/agentLoop.js.map +1 -0
  137. package/lib/features/canvas/videoEditor/agent/brainClient.js +45 -0
  138. package/lib/features/canvas/videoEditor/agent/brainClient.js.map +1 -0
  139. package/lib/features/canvas/videoEditor/agent/cutTools.js +129 -0
  140. package/lib/features/canvas/videoEditor/agent/cutTools.js.map +1 -0
  141. package/lib/features/canvas/videoEditor/editorModel.js +346 -0
  142. package/lib/features/canvas/videoEditor/editorModel.js.map +1 -0
  143. package/lib/features/canvas/videoEditor/exportRenderer.js +214 -0
  144. package/lib/features/canvas/videoEditor/exportRenderer.js.map +1 -0
  145. package/lib/features/canvas/videoEditor/filters.js +41 -0
  146. package/lib/features/canvas/videoEditor/filters.js.map +1 -0
  147. package/lib/features/canvas/videoEditor/mediaActions.js +57 -0
  148. package/lib/features/canvas/videoEditor/mediaActions.js.map +1 -0
  149. package/lib/features/canvas/videoEditor/remoteMediaClient.js +129 -0
  150. package/lib/features/canvas/videoEditor/remoteMediaClient.js.map +1 -0
  151. package/lib/features/canvas/videoEditor/solidColorPng.js +115 -0
  152. package/lib/features/canvas/videoEditor/solidColorPng.js.map +1 -0
  153. package/lib/features/canvas/videoEditor/videoEditOps.js +191 -0
  154. package/lib/features/canvas/videoEditor/videoEditOps.js.map +1 -0
  155. package/lib/features/canvas/videoEditor/videoProjectsStore.js +82 -0
  156. package/lib/features/canvas/videoEditor/videoProjectsStore.js.map +1 -0
  157. package/lib/features/canvas/videoRenderer.js +8 -0
  158. package/lib/features/canvas/videoRenderer.js.map +1 -0
  159. package/lib/features/canvas/withRemoteSafeArea.js +2 -2
  160. package/lib/features/canvas/withRemoteSafeArea.js.map +1 -1
  161. package/lib/features/characters/characterStudioProps.js +14 -0
  162. package/lib/features/characters/characterStudioProps.js.map +1 -0
  163. package/lib/features/chat/ChatCodeBlock.js +7 -3
  164. package/lib/features/chat/ChatCodeBlock.js.map +1 -1
  165. package/lib/features/chat/ChatTranscript.js +7 -3
  166. package/lib/features/chat/ChatTranscript.js.map +1 -1
  167. package/lib/features/chat/ChatWidgetCard.js +13 -0
  168. package/lib/features/chat/ChatWidgetCard.js.map +1 -0
  169. package/lib/features/chat/ConnectorConnectCard.js +164 -0
  170. package/lib/features/chat/ConnectorConnectCard.js.map +1 -0
  171. package/lib/features/chat/ConnectorConnectPrompt.js +254 -0
  172. package/lib/features/chat/ConnectorConnectPrompt.js.map +1 -0
  173. package/lib/features/chat/MessageActionBar.js.map +1 -1
  174. package/lib/features/chat/QueuedFollowUps.js +71 -0
  175. package/lib/features/chat/QueuedFollowUps.js.map +1 -0
  176. package/lib/features/chat/chatWidgets.js +37 -0
  177. package/lib/features/chat/chatWidgets.js.map +1 -0
  178. package/lib/features/chat/connectorConnect.js +179 -0
  179. package/lib/features/chat/connectorConnect.js.map +1 -0
  180. package/lib/features/chat/connectorConnectHandbacks.js +55 -0
  181. package/lib/features/chat/connectorConnectHandbacks.js.map +1 -0
  182. package/lib/features/design/DesignEditorExperience.js +643 -0
  183. package/lib/features/design/DesignEditorExperience.js.map +1 -0
  184. package/lib/features/design/DesignExperience.js +444 -0
  185. package/lib/features/design/DesignExperience.js.map +1 -0
  186. package/lib/features/design/designCore.js +298 -0
  187. package/lib/features/design/designCore.js.map +1 -0
  188. package/lib/features/design/designIndex.js +150 -0
  189. package/lib/features/design/designIndex.js.map +1 -0
  190. package/lib/features/design/exportDesign.js +133 -0
  191. package/lib/features/design/exportDesign.js.map +1 -0
  192. package/lib/features/job-search/ApplicationsPanel.js +907 -0
  193. package/lib/features/job-search/ApplicationsPanel.js.map +1 -0
  194. package/lib/features/job-search/ContactsPanel.js +627 -0
  195. package/lib/features/job-search/ContactsPanel.js.map +1 -0
  196. package/lib/features/job-search/InsightsPanel.js +299 -0
  197. package/lib/features/job-search/InsightsPanel.js.map +1 -0
  198. package/lib/features/job-search/InterviewPanel.js +637 -0
  199. package/lib/features/job-search/InterviewPanel.js.map +1 -0
  200. package/lib/features/job-search/JdPastePrompt.js +130 -0
  201. package/lib/features/job-search/JdPastePrompt.js.map +1 -0
  202. package/lib/features/job-search/JobCard.js +199 -0
  203. package/lib/features/job-search/JobCard.js.map +1 -0
  204. package/lib/features/job-search/JobDetailSheet.js +255 -0
  205. package/lib/features/job-search/JobDetailSheet.js.map +1 -0
  206. package/lib/features/job-search/JobSearchAgentChatPane.js +377 -0
  207. package/lib/features/job-search/JobSearchAgentChatPane.js.map +1 -0
  208. package/lib/features/job-search/JobSearchExperience.js +1324 -0
  209. package/lib/features/job-search/JobSearchExperience.js.map +1 -0
  210. package/lib/features/job-search/JobSearchLocationField.js +231 -0
  211. package/lib/features/job-search/JobSearchLocationField.js.map +1 -0
  212. package/lib/features/job-search/ProfilePanel.js +679 -0
  213. package/lib/features/job-search/ProfilePanel.js.map +1 -0
  214. package/lib/features/job-search/RepliesPanel.js +344 -0
  215. package/lib/features/job-search/RepliesPanel.js.map +1 -0
  216. package/lib/features/job-search/SavedPanel.js +297 -0
  217. package/lib/features/job-search/SavedPanel.js.map +1 -0
  218. package/lib/features/job-search/chat/widgetContent.js +29 -0
  219. package/lib/features/job-search/chat/widgetContent.js.map +1 -0
  220. package/lib/features/job-search/cvText.js +91 -0
  221. package/lib/features/job-search/cvText.js.map +1 -0
  222. package/lib/features/job-search/jobAgentSwipe.js +7 -0
  223. package/lib/features/job-search/jobAgentSwipe.js.map +1 -0
  224. package/lib/features/job-search/jobSearchClient.js +184 -0
  225. package/lib/features/job-search/jobSearchClient.js.map +1 -0
  226. package/lib/features/job-search/jobSearchExec.js +14 -0
  227. package/lib/features/job-search/jobSearchExec.js.map +1 -0
  228. package/lib/features/job-search/jobSearchRuntime.js +50 -0
  229. package/lib/features/job-search/jobSearchRuntime.js.map +1 -0
  230. package/lib/features/job-search/jobSearchTheme.js +44 -0
  231. package/lib/features/job-search/jobSearchTheme.js.map +1 -0
  232. package/lib/features/job-search/savedJobs.js +85 -0
  233. package/lib/features/job-search/savedJobs.js.map +1 -0
  234. package/lib/features/job-search/searchHistory.js +117 -0
  235. package/lib/features/job-search/searchHistory.js.map +1 -0
  236. package/lib/features/job-search/types.js +36 -0
  237. package/lib/features/job-search/types.js.map +1 -0
  238. package/lib/features/job-search/useJobSearchSession.js +558 -0
  239. package/lib/features/job-search/useJobSearchSession.js.map +1 -0
  240. package/lib/features/messaging/ChatComponents.js +529 -0
  241. package/lib/features/messaging/ChatComponents.js.map +1 -0
  242. package/lib/features/messaging/ChatInviteDeepLink.js +116 -0
  243. package/lib/features/messaging/ChatInviteDeepLink.js.map +1 -0
  244. package/lib/features/messaging/ContactsScreen.js +288 -0
  245. package/lib/features/messaging/ContactsScreen.js.map +1 -0
  246. package/lib/features/messaging/ConversationListScreen.js +147 -0
  247. package/lib/features/messaging/ConversationListScreen.js.map +1 -0
  248. package/lib/features/messaging/MessageActions.js +290 -0
  249. package/lib/features/messaging/MessageActions.js.map +1 -0
  250. package/lib/features/messaging/NativeChatExperience.js +189 -0
  251. package/lib/features/messaging/NativeChatExperience.js.map +1 -0
  252. package/lib/features/messaging/RegistrationScreen.js +11 -14
  253. package/lib/features/messaging/RegistrationScreen.js.map +1 -1
  254. package/lib/features/messaging/ThreadScreen.js +215 -0
  255. package/lib/features/messaging/ThreadScreen.js.map +1 -0
  256. package/lib/features/messaging/chatInviteLink.js +52 -0
  257. package/lib/features/messaging/chatInviteLink.js.map +1 -0
  258. package/lib/features/messaging/chatModel.js +278 -0
  259. package/lib/features/messaging/chatModel.js.map +1 -0
  260. package/lib/features/messaging/chatOperations.js +106 -1
  261. package/lib/features/messaging/chatOperations.js.map +1 -1
  262. package/lib/features/messaging/emojiCatalog.js +60 -0
  263. package/lib/features/messaging/emojiCatalog.js.map +1 -0
  264. package/lib/features/messaging/emojiKeywords.js +1592 -0
  265. package/lib/features/messaging/emojiKeywords.js.map +1 -0
  266. package/lib/features/messaging/nativeChatChannelQuery.js +27 -0
  267. package/lib/features/messaging/nativeChatChannelQuery.js.map +1 -0
  268. package/lib/features/messaging/phoneNumbers.js +52 -1
  269. package/lib/features/messaging/phoneNumbers.js.map +1 -1
  270. package/lib/features/messaging/sha256.js +68 -0
  271. package/lib/features/messaging/sha256.js.map +1 -0
  272. package/lib/features/messaging/useChatData.js +421 -0
  273. package/lib/features/messaging/useChatData.js.map +1 -0
  274. package/lib/features/messaging/useContactMatches.js +191 -0
  275. package/lib/features/messaging/useContactMatches.js.map +1 -0
  276. package/lib/features/messaging/usePhoneVerification.js +12 -12
  277. package/lib/features/messaging/usePhoneVerification.js.map +1 -1
  278. package/lib/features/messaging/yantraChatOrg.js +8 -3
  279. package/lib/features/messaging/yantraChatOrg.js.map +1 -1
  280. package/lib/features/resume/AnnotateModal.js +100 -0
  281. package/lib/features/resume/AnnotateModal.js.map +1 -0
  282. package/lib/features/resume/AnnotationBar.js +69 -0
  283. package/lib/features/resume/AnnotationBar.js.map +1 -0
  284. package/lib/features/resume/ExportSheet.js +105 -0
  285. package/lib/features/resume/ExportSheet.js.map +1 -0
  286. package/lib/features/resume/ResumeAgentChatPane.js +95 -0
  287. package/lib/features/resume/ResumeAgentChatPane.js.map +1 -0
  288. package/lib/features/resume/ResumeEditor.js +676 -0
  289. package/lib/features/resume/ResumeEditor.js.map +1 -0
  290. package/lib/features/resume/ResumeExperience.js +235 -0
  291. package/lib/features/resume/ResumeExperience.js.map +1 -0
  292. package/lib/features/resume/ResumeListPanel.js +262 -0
  293. package/lib/features/resume/ResumeListPanel.js.map +1 -0
  294. package/lib/features/resume/ResumeToolbar.js +236 -0
  295. package/lib/features/resume/ResumeToolbar.js.map +1 -0
  296. package/lib/features/resume/annotations.js +17 -0
  297. package/lib/features/resume/annotations.js.map +1 -0
  298. package/lib/features/resume/documentCss.js +52 -0
  299. package/lib/features/resume/documentCss.js.map +1 -0
  300. package/lib/features/resume/draft.js +89 -0
  301. package/lib/features/resume/draft.js.map +1 -0
  302. package/lib/features/resume/exportResume.js +43 -0
  303. package/lib/features/resume/exportResume.js.map +1 -0
  304. package/lib/features/resume/pickResumePhoto.js +22 -0
  305. package/lib/features/resume/pickResumePhoto.js.map +1 -0
  306. package/lib/features/resume/renderResume.js +121 -0
  307. package/lib/features/resume/renderResume.js.map +1 -0
  308. package/lib/features/resume/resumeClient.js +69 -0
  309. package/lib/features/resume/resumeClient.js.map +1 -0
  310. package/lib/features/resume/resumeExec.js +14 -0
  311. package/lib/features/resume/resumeExec.js.map +1 -0
  312. package/lib/features/resume/resumeIndex.js +244 -0
  313. package/lib/features/resume/resumeIndex.js.map +1 -0
  314. package/lib/features/resume/resumeRuntime.js +50 -0
  315. package/lib/features/resume/resumeRuntime.js.map +1 -0
  316. package/lib/features/resume/resumeTheme.js +34 -0
  317. package/lib/features/resume/resumeTheme.js.map +1 -0
  318. package/lib/features/resume/resumeToolbox.js +49 -0
  319. package/lib/features/resume/resumeToolbox.js.map +1 -0
  320. package/lib/features/resume/templates.js +90 -0
  321. package/lib/features/resume/templates.js.map +1 -0
  322. package/lib/features/resume/types.js +10 -0
  323. package/lib/features/resume/types.js.map +1 -0
  324. package/lib/features/resume/useResumeSession.js +183 -0
  325. package/lib/features/resume/useResumeSession.js.map +1 -0
  326. package/lib/features/shopping/DealsPanel.js +254 -0
  327. package/lib/features/shopping/DealsPanel.js.map +1 -0
  328. package/lib/features/shopping/HistoryPanel.js +147 -0
  329. package/lib/features/shopping/HistoryPanel.js.map +1 -0
  330. package/lib/features/shopping/OrdersPanel.js +157 -0
  331. package/lib/features/shopping/OrdersPanel.js.map +1 -0
  332. package/lib/features/shopping/ProductCard.js +326 -0
  333. package/lib/features/shopping/ProductCard.js.map +1 -0
  334. package/lib/features/shopping/ProductDetailSheet.js +313 -0
  335. package/lib/features/shopping/ProductDetailSheet.js.map +1 -0
  336. package/lib/features/shopping/ProductFilterBar.js +153 -0
  337. package/lib/features/shopping/ProductFilterBar.js.map +1 -0
  338. package/lib/features/shopping/ProductPhoto.js +27 -0
  339. package/lib/features/shopping/ProductPhoto.js.map +1 -0
  340. package/lib/features/shopping/SavedPanel.js +139 -0
  341. package/lib/features/shopping/SavedPanel.js.map +1 -0
  342. package/lib/features/shopping/ShoppingAgentChatPane.js +436 -0
  343. package/lib/features/shopping/ShoppingAgentChatPane.js.map +1 -0
  344. package/lib/features/shopping/ShoppingExperience.js +888 -0
  345. package/lib/features/shopping/ShoppingExperience.js.map +1 -0
  346. package/lib/features/shopping/TrendingSections.js +199 -0
  347. package/lib/features/shopping/TrendingSections.js.map +1 -0
  348. package/lib/features/shopping/WatchlistPanel.js +148 -0
  349. package/lib/features/shopping/WatchlistPanel.js.map +1 -0
  350. package/lib/features/shopping/catalog.js +238 -0
  351. package/lib/features/shopping/catalog.js.map +1 -0
  352. package/lib/features/shopping/chat/ShoppingChatResultCard.js +175 -0
  353. package/lib/features/shopping/chat/ShoppingChatResultCard.js.map +1 -0
  354. package/lib/features/shopping/chat/streamAssistantReply.js +34 -0
  355. package/lib/features/shopping/chat/streamAssistantReply.js.map +1 -0
  356. package/lib/features/shopping/chat/widgetContent.js +233 -0
  357. package/lib/features/shopping/chat/widgetContent.js.map +1 -0
  358. package/lib/features/shopping/hooks/useTrendingProducts.js +162 -0
  359. package/lib/features/shopping/hooks/useTrendingProducts.js.map +1 -0
  360. package/lib/features/shopping/productImage.js +42 -0
  361. package/lib/features/shopping/productImage.js.map +1 -0
  362. package/lib/features/shopping/savedProducts.js +84 -0
  363. package/lib/features/shopping/savedProducts.js.map +1 -0
  364. package/lib/features/shopping/services/catalogActions.js +166 -0
  365. package/lib/features/shopping/services/catalogActions.js.map +1 -0
  366. package/lib/features/shopping/services/parsePriceCheckIntent.js +58 -0
  367. package/lib/features/shopping/services/parsePriceCheckIntent.js.map +1 -0
  368. package/lib/features/shopping/services/parseShoppingIntent.js +67 -0
  369. package/lib/features/shopping/services/parseShoppingIntent.js.map +1 -0
  370. package/lib/features/shopping/services/productAvailability.js +25 -0
  371. package/lib/features/shopping/services/productAvailability.js.map +1 -0
  372. package/lib/features/shopping/services/productFilters.js +72 -0
  373. package/lib/features/shopping/services/productFilters.js.map +1 -0
  374. package/lib/features/shopping/services/retailerUrl.js +75 -0
  375. package/lib/features/shopping/services/retailerUrl.js.map +1 -0
  376. package/lib/features/shopping/services/shoppingChatReply.js +46 -0
  377. package/lib/features/shopping/services/shoppingChatReply.js.map +1 -0
  378. package/lib/features/shopping/services/shoppingProductSearch.js +336 -0
  379. package/lib/features/shopping/services/shoppingProductSearch.js.map +1 -0
  380. package/lib/features/shopping/services/shoppingSearchConnectorClient.js +41 -0
  381. package/lib/features/shopping/services/shoppingSearchConnectorClient.js.map +1 -0
  382. package/lib/features/shopping/shopAgentSwipe.js +7 -0
  383. package/lib/features/shopping/shopAgentSwipe.js.map +1 -0
  384. package/lib/features/shopping/shoppingCart.js +116 -0
  385. package/lib/features/shopping/shoppingCart.js.map +1 -0
  386. package/lib/features/shopping/shoppingExec.js +14 -0
  387. package/lib/features/shopping/shoppingExec.js.map +1 -0
  388. package/lib/features/shopping/shoppingHistoryStore.js +176 -0
  389. package/lib/features/shopping/shoppingHistoryStore.js.map +1 -0
  390. package/lib/features/shopping/shoppingRuntime.js +63 -0
  391. package/lib/features/shopping/shoppingRuntime.js.map +1 -0
  392. package/lib/features/shopping/timeAgo.js +14 -0
  393. package/lib/features/shopping/timeAgo.js.map +1 -0
  394. package/lib/features/shopping/useShoppingSearch.js +262 -0
  395. package/lib/features/shopping/useShoppingSearch.js.map +1 -0
  396. package/lib/features/travel/BookHeaderGlow.js +48 -0
  397. package/lib/features/travel/BookHeaderGlow.js.map +1 -0
  398. package/lib/features/travel/BookingsPanel.js +29 -0
  399. package/lib/features/travel/BookingsPanel.js.map +1 -0
  400. package/lib/features/travel/DiscoverPanel.js +155 -0
  401. package/lib/features/travel/DiscoverPanel.js.map +1 -0
  402. package/lib/features/travel/FlightCompareBar.js +86 -0
  403. package/lib/features/travel/FlightCompareBar.js.map +1 -0
  404. package/lib/features/travel/FlightDealsBoard.js +100 -0
  405. package/lib/features/travel/FlightDealsBoard.js.map +1 -0
  406. package/lib/features/travel/HistoryPanel.js +82 -0
  407. package/lib/features/travel/HistoryPanel.js.map +1 -0
  408. package/lib/features/travel/PopularDestinations.js +144 -0
  409. package/lib/features/travel/PopularDestinations.js.map +1 -0
  410. package/lib/features/travel/SavedPanel.js +27 -0
  411. package/lib/features/travel/SavedPanel.js.map +1 -0
  412. package/lib/features/travel/TravelAgentChatPane.js +303 -0
  413. package/lib/features/travel/TravelAgentChatPane.js.map +1 -0
  414. package/lib/features/travel/TravelBookHero.js +425 -0
  415. package/lib/features/travel/TravelBookHero.js.map +1 -0
  416. package/lib/features/travel/TravelDatesField.js +234 -0
  417. package/lib/features/travel/TravelDatesField.js.map +1 -0
  418. package/lib/features/travel/TravelDetailSheet.js +106 -0
  419. package/lib/features/travel/TravelDetailSheet.js.map +1 -0
  420. package/lib/features/travel/TravelExperience.js +624 -0
  421. package/lib/features/travel/TravelExperience.js.map +1 -0
  422. package/lib/features/travel/TravelGuestsField.js +85 -0
  423. package/lib/features/travel/TravelGuestsField.js.map +1 -0
  424. package/lib/features/travel/TravelLanding.js +318 -0
  425. package/lib/features/travel/TravelLanding.js.map +1 -0
  426. package/lib/features/travel/TravelLocationField.js +179 -0
  427. package/lib/features/travel/TravelLocationField.js.map +1 -0
  428. package/lib/features/travel/TravelPropertyCard.js +266 -0
  429. package/lib/features/travel/TravelPropertyCard.js.map +1 -0
  430. package/lib/features/travel/TravelPropertyPhoto.js +22 -0
  431. package/lib/features/travel/TravelPropertyPhoto.js.map +1 -0
  432. package/lib/features/travel/TravelRailFlyout.js +79 -0
  433. package/lib/features/travel/TravelRailFlyout.js.map +1 -0
  434. package/lib/features/travel/TravelResultsMap.js +126 -0
  435. package/lib/features/travel/TravelResultsMap.js.map +1 -0
  436. package/lib/features/travel/WorkspacePanel.js +148 -0
  437. package/lib/features/travel/WorkspacePanel.js.map +1 -0
  438. package/lib/features/travel/appNav.js +244 -0
  439. package/lib/features/travel/appNav.js.map +1 -0
  440. package/lib/features/travel/calendarDays.js +50 -0
  441. package/lib/features/travel/calendarDays.js.map +1 -0
  442. package/lib/features/travel/catalog.js +72 -0
  443. package/lib/features/travel/catalog.js.map +1 -0
  444. package/lib/features/travel/chat/TravelChatResultCard.js +107 -0
  445. package/lib/features/travel/chat/TravelChatResultCard.js.map +1 -0
  446. package/lib/features/travel/chat/widgetContent.js +107 -0
  447. package/lib/features/travel/chat/widgetContent.js.map +1 -0
  448. package/lib/features/travel/flightDeals.js +65 -0
  449. package/lib/features/travel/flightDeals.js.map +1 -0
  450. package/lib/features/travel/mapCoordinates.js +36 -0
  451. package/lib/features/travel/mapCoordinates.js.map +1 -0
  452. package/lib/features/travel/parseTravelIntent.js +303 -0
  453. package/lib/features/travel/parseTravelIntent.js.map +1 -0
  454. package/lib/features/travel/savedStays.js +66 -0
  455. package/lib/features/travel/savedStays.js.map +1 -0
  456. package/lib/features/travel/services/flightDealsBoard.js +111 -0
  457. package/lib/features/travel/services/flightDealsBoard.js.map +1 -0
  458. package/lib/features/travel/services/flightSearchConnectorClient.js +42 -0
  459. package/lib/features/travel/services/flightSearchConnectorClient.js.map +1 -0
  460. package/lib/features/travel/services/geocodeLocation.js +79 -0
  461. package/lib/features/travel/services/geocodeLocation.js.map +1 -0
  462. package/lib/features/travel/services/placePredictions.js +113 -0
  463. package/lib/features/travel/services/placePredictions.js.map +1 -0
  464. package/lib/features/travel/services/resolveOriginCity.js +27 -0
  465. package/lib/features/travel/services/resolveOriginCity.js.map +1 -0
  466. package/lib/features/travel/services/resortifiConnectorClient.js +76 -0
  467. package/lib/features/travel/services/resortifiConnectorClient.js.map +1 -0
  468. package/lib/features/travel/services/travelFlightSearch.js +289 -0
  469. package/lib/features/travel/services/travelFlightSearch.js.map +1 -0
  470. package/lib/features/travel/services/travelPropertySearch.js +377 -0
  471. package/lib/features/travel/services/travelPropertySearch.js.map +1 -0
  472. package/lib/features/travel/travelAgentSwipe.js +7 -0
  473. package/lib/features/travel/travelAgentSwipe.js.map +1 -0
  474. package/lib/features/travel/travelExec.js +14 -0
  475. package/lib/features/travel/travelExec.js.map +1 -0
  476. package/lib/features/travel/travelHistoryStore.js +108 -0
  477. package/lib/features/travel/travelHistoryStore.js.map +1 -0
  478. package/lib/features/travel/travelRuntime.js +62 -0
  479. package/lib/features/travel/travelRuntime.js.map +1 -0
  480. package/lib/features/travel/types.js +9 -0
  481. package/lib/features/travel/types.js.map +1 -0
  482. package/lib/features/travel/useTravelSearch.js +330 -0
  483. package/lib/features/travel/useTravelSearch.js.map +1 -0
  484. package/lib/features/travel/workspaceContent.js +548 -0
  485. package/lib/features/travel/workspaceContent.js.map +1 -0
  486. package/lib/hooks/useCdecliChannel.js +128 -6
  487. package/lib/hooks/useCdecliChannel.js.map +1 -1
  488. package/lib/hooks/useChatApi.js +4 -2
  489. package/lib/hooks/useChatApi.js.map +1 -1
  490. package/lib/hooks/useChatStream.js +77 -63
  491. package/lib/hooks/useChatStream.js.map +1 -1
  492. package/lib/hooks/useHostConnectorCard.js +24 -0
  493. package/lib/hooks/useHostConnectorCard.js.map +1 -0
  494. package/lib/hooks/useObtainSystemToken.js +23 -5
  495. package/lib/hooks/useObtainSystemToken.js.map +1 -1
  496. package/lib/hooks/webViewRetentionPolicy.js +1 -0
  497. package/lib/hooks/webViewRetentionPolicy.js.map +1 -1
  498. package/lib/index.js +1 -1
  499. package/lib/index.js.map +1 -1
  500. package/lib/screens/Chat/index.js +51 -22
  501. package/lib/screens/Chat/index.js.map +1 -1
  502. package/lib/screens/ChatNative/index.js +13 -2
  503. package/lib/screens/ChatNative/index.js.map +1 -1
  504. package/lib/screens/Home/HomeScreen.js +3 -3
  505. package/lib/screens/Home/HomeScreen.js.map +1 -1
  506. package/lib/screens/Home/components/ChatHistoryLanding.js +32 -32
  507. package/lib/screens/Home/components/ChatHistoryLanding.js.map +1 -1
  508. package/lib/screens/JobSearchNative/useJobSearchHostChat.js +12 -6
  509. package/lib/screens/JobSearchNative/useJobSearchHostChat.js.map +1 -1
  510. package/lib/screens/ResumeNative/useResumeHostChat.js +12 -6
  511. package/lib/screens/ResumeNative/useResumeHostChat.js.map +1 -1
  512. package/lib/screens/ShoppingNative/useShoppingHostChat.js +12 -6
  513. package/lib/screens/ShoppingNative/useShoppingHostChat.js.map +1 -1
  514. package/lib/screens/TravelNative/useTravelHostChat.js +12 -6
  515. package/lib/screens/TravelNative/useTravelHostChat.js.map +1 -1
  516. package/lib/screens/WebBuilder/WebViewWithNavigation.js +2 -2
  517. package/lib/screens/WebBuilder/WebViewWithNavigation.js.map +1 -1
  518. package/lib/services/brainQuickReply.js +38 -1
  519. package/lib/services/brainQuickReply.js.map +1 -1
  520. package/lib/state/chatThreadMerge.js +6 -1
  521. package/lib/state/chatThreadMerge.js.map +1 -1
  522. 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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"}