@adminide-stack/yantra-mobile 12.0.69-alpha.8 → 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 @@
1
+ {"version":3,"file":"productReel.js","sources":["../../../../src/features/canvas/influencer/productReel.ts"],"sourcesContent":["/**\n * Product presentation helpers — twin of web `influencer/productReel.ts` (pure).\n * Overlay placement on a timeline stays web/editor-side; native uses schedule\n * metadata + sequential board placement / optional overlay RPC.\n */\n\n/** Reel lengths offered, in seconds. Past 60 the planner writes several episodes. */\nexport const REEL_LENGTHS = [15, 30, 45, 60, 90, 120, 180] as const;\n\n/** The longest one planner episode may be (the connector clamps to it). */\nexport const MAX_EPISODE_SECONDS = 60;\n\nexport function lengthLabel(seconds: number): string {\n if (seconds < 60) return `${seconds}s`;\n const m = Math.floor(seconds / 60);\n const s = seconds % 60;\n return s ? `${m}:${String(s).padStart(2, '0')}` : `${m} min`;\n}\n\n/**\n * How the planner is asked for a reel of `seconds`: as few episodes as fit\n * under the 60s cap, each the same length, so the run reads as one piece.\n */\nexport function episodePlanFor(seconds: number): { episodeCount: number; durationSeconds: number } {\n const total = Math.min(REEL_LENGTHS[REEL_LENGTHS.length - 1], Math.max(8, Math.round(seconds)));\n const episodeCount = Math.max(1, Math.ceil(total / MAX_EPISODE_SECONDS));\n return { episodeCount, durationSeconds: Math.round(total / episodeCount) };\n}\n\nconst WORDS_PER_SECOND = 2.6;\n\n/** Appended to every brief so the planner fills the episode with enough words. */\nexport function lengthNote(durationSeconds: number): string {\n const low = Math.round(durationSeconds * WORDS_PER_SECOND * 0.9);\n const high = Math.round(durationSeconds * WORDS_PER_SECOND * 1.05);\n return `Length: each episode's spoken_line must be ${low} to ${high} words - a full ${durationSeconds} seconds spoken aloud. Do not stop short; keep talking through the point in detail.`;\n}\n\nexport interface ProductBrief {\n name: string;\n points: string[];\n offer?: string;\n callToAction?: string;\n notes?: string;\n}\n\n/** Stream brief for a product pitch — arc + facts the planner may not invent. */\nexport function productBrief(product: ProductBrief, seconds: number): string {\n const points = product.points.map((p) => p.trim()).filter(Boolean);\n const arc = [\n 'a hook that names the problem it solves',\n 'what it is and who it is for',\n ...(points.length\n ? [`each of these points, in this order: ${points.map((p, i) => `(${i + 1}) ${p}`).join('; ')}`]\n : []),\n 'how it is actually used, as if showing it',\n ...(product.offer?.trim() ? [`the offer, exactly: ${product.offer.trim()}`] : []),\n `end on the call to action: ${product.callToAction?.trim() || 'where to get it'}`,\n ];\n return [\n `Present the product \"${product.name.trim()}\" to camera, first person, as its host - a ${lengthLabel(seconds)} pitch.`,\n `Walk this arc across the whole run, in order: ${arc.join('; ')}.`,\n 'Speak only facts given here; do not invent features, numbers or claims. Keep every line sayable in one breath.',\n ...(product.notes?.trim() ? [`About the angle: ${product.notes.trim()}`] : []),\n ].join('\\n');\n}\n\nexport interface ProductShotPlacement {\n src: string;\n startSec: number;\n endSec: number;\n /** Percent box the photo letterboxes into (vertical reel default). */\n box: { x: number; y: number; width: number; height: number };\n}\n\nexport interface ProductShotOptions {\n every?: number;\n seconds?: number;\n lead?: number;\n tail?: number;\n /** When true, letterbox box for 9:16; else 16:9. */\n vertical?: boolean;\n}\n\n/**\n * Schedule product photo cut-ins over a finished reel duration (native twin of\n * web overlay track placement — pure numbers, no EditorProject).\n */\nexport function scheduleProductShots(\n reelSeconds: number,\n photoSrcs: string[],\n opts: ProductShotOptions = {},\n): ProductShotPlacement[] {\n const photos = photoSrcs.filter(Boolean);\n if (!photos.length || !(reelSeconds > 0)) return [];\n const every = opts.every ?? 12;\n const length = opts.seconds ?? 4;\n const lead = opts.lead ?? 3;\n const tail = opts.tail ?? 3;\n const vertical = opts.vertical !== false;\n const box = vertical ? { x: 10, y: 14, width: 80, height: 50 } : { x: 25, y: 8, width: 50, height: 84 };\n const out: ProductShotPlacement[] = [];\n let nextAt = lead;\n let shot = 0;\n while (nextAt < reelSeconds - tail) {\n const start = Math.max(lead, Math.min(nextAt, reelSeconds - tail - length));\n const end = Math.min(start + length, reelSeconds - tail);\n if (end - start < 1.5) break;\n out.push({ src: photos[shot % photos.length], startSec: start, endSec: end, box });\n shot += 1;\n nextAt = start + every;\n }\n return out;\n}\n\n/** Drop generator chatter from progress UI (JSON / questions / huge lines). */\nexport function progressLabel(message: string, fallback: string): string {\n const text = message.replace(/\\s+/g, ' ').trim();\n if (!text) return fallback;\n if (/[{}\\[\\]\"=]/.test(text) || text.length > 90 || /\\?/.test(text)) return fallback;\n return text;\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,159 @@
1
+ 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 MAX_RUN_SECONDS = 50;
21
+ const MAX_TAKE_WORDS = 20;
22
+ const wordCount = (text) => text.trim().split(/\s+/).filter(Boolean).length;
23
+ function speakingSeconds(line) {
24
+ const words = wordCount(line);
25
+ return Math.max(2, Math.round((words / 2.6 + 0.6) * 10) / 10);
26
+ }
27
+ function splitSpokenLine(line, maxWords = MAX_TAKE_WORDS) {
28
+ var _a;
29
+ const text = line.trim();
30
+ if (!text) return [];
31
+ const sentences = ((_a = text.match(new RegExp(`[\\s\\S]+?[.!?\u2026\u3002\uFF01\uFF1F]+["')\\]]*(?=\\s+(?!\\p{Ll})|$)|[\\s\\S]+$`, "gu"))) != null ? _a : [text]).map((s) => s.trim()).filter(Boolean);
32
+ const pieces = [];
33
+ let current = "";
34
+ for (const sentence of sentences) {
35
+ const joined = current ? `${current} ${sentence}` : sentence;
36
+ if (current && wordCount(joined) > maxWords) {
37
+ pieces.push(current);
38
+ current = sentence;
39
+ } else {
40
+ current = joined;
41
+ }
42
+ }
43
+ if (current) pieces.push(current);
44
+ return pieces;
45
+ }
46
+ const LIST_KEYS = ["beats", "scenes", "episodes"];
47
+ const WRAP_KEYS = ["stream", "plan", "result", "data"];
48
+ function findBeatList(value, depth = 0) {
49
+ if (Array.isArray(value)) return value;
50
+ if (!value || typeof value !== "object" || depth > 3) return [];
51
+ const o = value;
52
+ for (const key of LIST_KEYS) if (Array.isArray(o[key])) return o[key];
53
+ for (const key of WRAP_KEYS) {
54
+ const inner = findBeatList(o[key], depth + 1);
55
+ if (inner.length) return inner;
56
+ }
57
+ return [];
58
+ }
59
+ function firstText(entry, keys) {
60
+ for (const key of keys) {
61
+ const value = entry[key];
62
+ if (typeof value === "string" && value.trim()) return value.trim();
63
+ }
64
+ return "";
65
+ }
66
+ function firstSeconds(entry, keys) {
67
+ for (const key of keys) {
68
+ const value = Number(entry[key]);
69
+ if (Number.isFinite(value) && value > 0) return value;
70
+ }
71
+ return 0;
72
+ }
73
+ const LINE_KEYS = ["line", "spoken_line", "spokenLine", "text", "script", "say", "voiceover"];
74
+ const VISUAL_KEYS = ["visual", "art_prompt", "artPrompt", "video_prompt", "broll", "shot", "image"];
75
+ const SECONDS_KEYS = ["seconds", "duration", "durationSeconds", "duration_seconds"];
76
+ function parseEpisodePlan(raw) {
77
+ var _a, _b;
78
+ let value = raw;
79
+ if (typeof value === "string") {
80
+ const match = value.match(/\[[\s\S]*\]|\{[\s\S]*\}/);
81
+ if (!match) return [];
82
+ try {
83
+ value = JSON.parse(match[0]);
84
+ } catch (e) {
85
+ return [];
86
+ }
87
+ }
88
+ const beats = [];
89
+ for (const entry of findBeatList(value)) {
90
+ if (!entry || typeof entry !== "object") continue;
91
+ const e = entry;
92
+ const line = firstText(e, LINE_KEYS);
93
+ const visual = firstText(e, VISUAL_KEYS);
94
+ if (!line && !visual) continue;
95
+ const declared = String((_b = (_a = e.kind) != null ? _a : e.type) != null ? _b : "").toLowerCase();
96
+ const kind = declared.includes("broll") || declared.includes("b-roll") ? "broll" : declared.includes("talk") ? "talking" : visual && !line ? "broll" : "talking";
97
+ const scene = visual ? {
98
+ visual
99
+ } : {};
100
+ const pieces = kind === "talking" ? splitSpokenLine(line) : [line];
101
+ if (pieces.length > 1) {
102
+ for (const piece of pieces) beats.push(__spreadProps(__spreadValues({
103
+ kind,
104
+ line: piece
105
+ }, scene), {
106
+ seconds: speakingSeconds(piece)
107
+ }));
108
+ continue;
109
+ }
110
+ const declaredSeconds = firstSeconds(e, SECONDS_KEYS);
111
+ beats.push(__spreadProps(__spreadValues({
112
+ kind,
113
+ line
114
+ }, scene), {
115
+ seconds: declaredSeconds > 0 ? Math.min(30, declaredSeconds) : speakingSeconds(line || visual)
116
+ }));
117
+ }
118
+ return beats;
119
+ }
120
+ function planRenderJobs(beats, maxRunSeconds = MAX_RUN_SECONDS) {
121
+ const jobs = [];
122
+ let run = [];
123
+ let runSeconds = 0;
124
+ const flush = () => {
125
+ if (run.length) jobs.push({
126
+ kind: "run",
127
+ indexes: run
128
+ });
129
+ run = [];
130
+ runSeconds = 0;
131
+ };
132
+ beats.forEach((beat, index) => {
133
+ if (beat.kind !== "talking") {
134
+ flush();
135
+ jobs.push({
136
+ kind: "shot",
137
+ index
138
+ });
139
+ return;
140
+ }
141
+ const seconds = speakingSeconds(beat.line);
142
+ if (run.length && runSeconds + seconds > maxRunSeconds) flush();
143
+ run.push(index);
144
+ runSeconds += seconds;
145
+ });
146
+ flush();
147
+ return jobs;
148
+ }
149
+ function allotRunSeconds(beats, totalSeconds) {
150
+ const weights = beats.map((b) => Math.max(1, (b.line || b.visual || "").replace(/\s+/g, "").length));
151
+ const sum = weights.reduce((a, w) => a + w, 0);
152
+ let at = 0;
153
+ return weights.map((w, i) => {
154
+ const end = i === weights.length - 1 ? totalSeconds : at + totalSeconds * w / sum;
155
+ const seconds = Math.round((end - at) * 1e3) / 1e3;
156
+ at = end;
157
+ return seconds;
158
+ });
159
+ }export{MAX_RUN_SECONDS,MAX_TAKE_WORDS,allotRunSeconds,parseEpisodePlan,planRenderJobs,speakingSeconds,splitSpokenLine};//# sourceMappingURL=reelPlan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reelPlan.js","sources":["../../../../src/features/canvas/influencer/reelPlan.ts"],"sourcesContent":["/**\n * Pure reel planning — twin of web `influencer/reelPlan.ts` (planning only).\n */\nexport interface ReelBeat {\n kind: 'talking' | 'broll';\n line: string;\n visual?: string;\n seconds: number;\n}\n\nexport interface ReelClip {\n src: string;\n seconds: number;\n offset?: number;\n sourceSeconds?: number;\n}\n\nexport type RenderJob = { kind: 'run'; indexes: number[] } | { kind: 'shot'; index: number };\n\nexport const MAX_RUN_SECONDS = 50;\nexport const MAX_TAKE_WORDS = 20;\n\nconst wordCount = (text: string): number => text.trim().split(/\\s+/).filter(Boolean).length;\n\nexport function speakingSeconds(line: string): number {\n const words = wordCount(line);\n return Math.max(2, Math.round((words / 2.6 + 0.6) * 10) / 10);\n}\n\nexport function splitSpokenLine(line: string, maxWords = MAX_TAKE_WORDS): string[] {\n const text = line.trim();\n if (!text) return [];\n const sentences = (text.match(/[\\s\\S]+?[.!?…。!?]+[\"')\\]]*(?=\\s+(?!\\p{Ll})|$)|[\\s\\S]+$/gu) ?? [text])\n .map((s) => s.trim())\n .filter(Boolean);\n const pieces: string[] = [];\n let current = '';\n for (const sentence of sentences) {\n const joined = current ? `${current} ${sentence}` : sentence;\n if (current && wordCount(joined) > maxWords) {\n pieces.push(current);\n current = sentence;\n } else {\n current = joined;\n }\n }\n if (current) pieces.push(current);\n return pieces;\n}\n\nconst LIST_KEYS = ['beats', 'scenes', 'episodes'] as const;\nconst WRAP_KEYS = ['stream', 'plan', 'result', 'data'] as const;\n\nfunction findBeatList(value: unknown, depth = 0): unknown[] {\n if (Array.isArray(value)) return value;\n if (!value || typeof value !== 'object' || depth > 3) return [];\n const o = value as Record<string, unknown>;\n for (const key of LIST_KEYS) if (Array.isArray(o[key])) return o[key] as unknown[];\n for (const key of WRAP_KEYS) {\n const inner = findBeatList(o[key], depth + 1);\n if (inner.length) return inner;\n }\n return [];\n}\n\nfunction firstText(entry: Record<string, unknown>, keys: string[]): string {\n for (const key of keys) {\n const value = entry[key];\n if (typeof value === 'string' && value.trim()) return value.trim();\n }\n return '';\n}\n\nfunction firstSeconds(entry: Record<string, unknown>, keys: string[]): number {\n for (const key of keys) {\n const value = Number(entry[key]);\n if (Number.isFinite(value) && value > 0) return value;\n }\n return 0;\n}\n\nconst LINE_KEYS = ['line', 'spoken_line', 'spokenLine', 'text', 'script', 'say', 'voiceover'];\nconst VISUAL_KEYS = ['visual', 'art_prompt', 'artPrompt', 'video_prompt', 'broll', 'shot', 'image'];\nconst SECONDS_KEYS = ['seconds', 'duration', 'durationSeconds', 'duration_seconds'];\n\nexport function parseEpisodePlan(raw: unknown): ReelBeat[] {\n let value: unknown = raw;\n if (typeof value === 'string') {\n const match = value.match(/\\[[\\s\\S]*\\]|\\{[\\s\\S]*\\}/);\n if (!match) return [];\n try {\n value = JSON.parse(match[0]);\n } catch {\n return [];\n }\n }\n const beats: ReelBeat[] = [];\n for (const entry of findBeatList(value)) {\n if (!entry || typeof entry !== 'object') continue;\n const e = entry as Record<string, unknown>;\n const line = firstText(e, LINE_KEYS);\n const visual = firstText(e, VISUAL_KEYS);\n if (!line && !visual) continue;\n const declared = String(e.kind ?? e.type ?? '').toLowerCase();\n const kind: ReelBeat['kind'] =\n declared.includes('broll') || declared.includes('b-roll')\n ? 'broll'\n : declared.includes('talk')\n ? 'talking'\n : visual && !line\n ? 'broll'\n : 'talking';\n const scene = visual ? { visual } : {};\n const pieces = kind === 'talking' ? splitSpokenLine(line) : [line];\n if (pieces.length > 1) {\n for (const piece of pieces) beats.push({ kind, line: piece, ...scene, seconds: speakingSeconds(piece) });\n continue;\n }\n const declaredSeconds = firstSeconds(e, SECONDS_KEYS);\n beats.push({\n kind,\n line,\n ...scene,\n seconds: declaredSeconds > 0 ? Math.min(30, declaredSeconds) : speakingSeconds(line || visual),\n });\n }\n return beats;\n}\n\nexport function planRenderJobs(beats: ReelBeat[], maxRunSeconds = MAX_RUN_SECONDS): RenderJob[] {\n const jobs: RenderJob[] = [];\n let run: number[] = [];\n let runSeconds = 0;\n const flush = () => {\n if (run.length) jobs.push({ kind: 'run', indexes: run });\n run = [];\n runSeconds = 0;\n };\n beats.forEach((beat, index) => {\n if (beat.kind !== 'talking') {\n flush();\n jobs.push({ kind: 'shot', index });\n return;\n }\n const seconds = speakingSeconds(beat.line);\n if (run.length && runSeconds + seconds > maxRunSeconds) flush();\n run.push(index);\n runSeconds += seconds;\n });\n flush();\n return jobs;\n}\n\nexport function allotRunSeconds(beats: ReelBeat[], totalSeconds: number): number[] {\n const weights = beats.map((b) => Math.max(1, (b.line || b.visual || '').replace(/\\s+/g, '').length));\n const sum = weights.reduce((a, w) => a + w, 0);\n let at = 0;\n return weights.map((w, i) => {\n const end = i === weights.length - 1 ? totalSeconds : at + (totalSeconds * w) / sum;\n const seconds = Math.round((end - at) * 1000) / 1000;\n at = end;\n return seconds;\n });\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ const newMoodboard = () => ({
2
+ version: 1,
3
+ references: [],
4
+ notes: ""
5
+ });
6
+ function styleBrief(notes, referenceCount) {
7
+ const parts = [];
8
+ if (notes.trim()) parts.push(notes.trim().replace(/[.\s]+$/, ""));
9
+ if (referenceCount > 0) {
10
+ parts.push(referenceCount === 1 ? "match the look of the attached reference still" : `match the look of the ${referenceCount} attached reference stills`);
11
+ }
12
+ return parts.join(". ");
13
+ }export{newMoodboard,styleBrief};//# sourceMappingURL=moodboardCore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moodboardCore.js","sources":["../../../src/features/canvas/moodboardCore.ts"],"sourcesContent":["/**\n * Moodboard document + style brief — twin of canvas-surface moodboard/types +\n * palette.styleBrief (palette sampling stays web-only; phone uses notes).\n */\n\nexport interface MoodboardReference {\n id: string;\n src: string;\n label?: string;\n}\n\nexport interface MoodboardDoc {\n version: 1;\n references: MoodboardReference[];\n notes: string;\n}\n\nexport const newMoodboard = (): MoodboardDoc => ({ version: 1, references: [], notes: '' });\n\nexport function styleBrief(notes: string, referenceCount: number): string {\n const parts: string[] = [];\n if (notes.trim()) parts.push(notes.trim().replace(/[.\\s]+$/, ''));\n if (referenceCount > 0) {\n parts.push(\n referenceCount === 1\n ? 'match the look of the attached reference still'\n : `match the look of the ${referenceCount} attached reference stills`,\n );\n }\n return parts.join('. ');\n}\n"],"names":[],"mappings":"AAeO,MAAM,eAAe,OAAqB;AAAA,EAC/C,OAAS,EAAA,CAAA;AAAA,EACT,YAAY,EAAC;AAAA,EACb,KAAO,EAAA;AACT,CAAA;AACgB,SAAA,UAAA,CAAW,OAAe,cAAgC,EAAA;AACxE,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAI,IAAA,KAAA,CAAM,IAAK,EAAA,EAAS,KAAA,CAAA,IAAA,CAAK,KAAM,CAAA,IAAA,EAAO,CAAA,OAAA,CAAQ,SAAW,EAAA,EAAE,CAAC,CAAA;AAChE,EAAA,IAAI,iBAAiB,CAAG,EAAA;AACtB,IAAA,KAAA,CAAM,KAAK,cAAmB,KAAA,CAAA,GAAI,gDAAmD,GAAA,CAAA,sBAAA,EAAyB,cAAc,CAA4B,0BAAA,CAAA,CAAA;AAAA;AAE1J,EAAO,OAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB"}
@@ -0,0 +1,99 @@
1
+ import {DEFAULT_IMAGE_SEC,emptyTimeline}from'./videoEditor/editorModel.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 MICRO = 1e6;
21
+ function microsToSec(us) {
22
+ if (typeof us !== "number" || !Number.isFinite(us)) return 0;
23
+ return Math.max(0, us / MICRO);
24
+ }
25
+ function promoProjectToTimeline(project, title) {
26
+ var _a, _b, _c, _d, _e;
27
+ const clipsMap = project.clips && typeof project.clips === "object" ? project.clips : {};
28
+ const tracks = Array.isArray(project.tracks) ? project.tracks : [];
29
+ const orderedIds = [];
30
+ for (const track of tracks) {
31
+ for (const id of (_a = track.clipIds) != null ? _a : []) {
32
+ if (typeof id === "string" && !orderedIds.includes(id)) orderedIds.push(id);
33
+ }
34
+ }
35
+ for (const id of Object.keys(clipsMap)) {
36
+ if (!orderedIds.includes(id)) orderedIds.push(id);
37
+ }
38
+ const withStart = orderedIds.map((id) => ({
39
+ id,
40
+ clip: clipsMap[id]
41
+ })).filter((row) => row.clip).sort((a, b) => {
42
+ var _a2, _b2;
43
+ return microsToSec((_a2 = a.clip.display) == null ? void 0 : _a2.from) - microsToSec((_b2 = b.clip.display) == null ? void 0 : _b2.from);
44
+ });
45
+ const mediaClips = [];
46
+ const texts = [];
47
+ let counter = 0;
48
+ for (const {
49
+ clip
50
+ } of withStart) {
51
+ const from = microsToSec((_b = clip.display) == null ? void 0 : _b.from);
52
+ const to = microsToSec((_c = clip.display) == null ? void 0 : _c.to);
53
+ const span = Math.max(0.1, to > from ? to - from : DEFAULT_IMAGE_SEC);
54
+ const type = clip.type || "";
55
+ if (type === "text" && typeof clip.text === "string" && clip.text.trim()) {
56
+ counter += 1;
57
+ texts.push({
58
+ id: `promo-text-${counter}`,
59
+ text: clip.text.trim(),
60
+ startSec: from,
61
+ durationSec: span,
62
+ x: 0.5,
63
+ y: 0.5
64
+ });
65
+ continue;
66
+ }
67
+ if ((type === "video" || type === "image") && typeof clip.src === "string" && clip.src) {
68
+ counter += 1;
69
+ const trimFrom = microsToSec((_d = clip.trim) == null ? void 0 : _d.from);
70
+ const trimTo = ((_e = clip.trim) == null ? void 0 : _e.to) != null ? microsToSec(clip.trim.to) : null;
71
+ mediaClips.push({
72
+ id: `promo-clip-${counter}`,
73
+ itemId: clip.id || `promo-${counter}`,
74
+ type: type === "image" ? "image" : "video",
75
+ src: clip.src,
76
+ name: (clip.name || type).slice(0, 48),
77
+ durationSec: type === "image" ? span : null,
78
+ trimStartSec: trimFrom,
79
+ trimEndSec: trimTo && trimTo > trimFrom ? trimTo : null,
80
+ speed: 1,
81
+ speedCurve: "constant",
82
+ filter: "none",
83
+ volume: typeof clip.volume === "number" ? clip.volume : 1,
84
+ muted: Boolean(clip.muted),
85
+ fillColor: type === "image" && typeof clip.color === "string" ? clip.color : null
86
+ });
87
+ }
88
+ }
89
+ const logo = project.logo;
90
+ const logoSrc = typeof (logo == null ? void 0 : logo.src) === "string" && logo.src ? logo.src : null;
91
+ return {
92
+ timeline: __spreadProps(__spreadValues({}, emptyTimeline()), {
93
+ clips: mediaClips,
94
+ texts
95
+ }),
96
+ title: (title || "").trim() || "Designed promo",
97
+ logoSrc
98
+ };
99
+ }export{promoProjectToTimeline};//# sourceMappingURL=promoProjectImport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promoProjectImport.js","sources":["../../../src/features/canvas/promoProjectImport.ts"],"sourcesContent":["/**\n * Convert a web video-editor project (DESIGN_PROJECT result) into the native\n * EditorTimeline. Web uses microseconds + tracks; native uses a flat clip list\n * in seconds — we keep media/text order by display.from.\n */\nimport {\n DEFAULT_IMAGE_SEC,\n emptyTimeline,\n type EditorClip,\n type EditorTimeline,\n type TextClip,\n} from './videoEditor/editorModel';\n\nconst MICRO = 1_000_000;\n\ntype WebClip = {\n id?: string;\n type?: string;\n src?: string;\n text?: string;\n name?: string;\n display?: { from?: number; to?: number };\n trim?: { from?: number; to?: number };\n volume?: number;\n muted?: boolean;\n color?: string;\n};\n\nexport type ImportedPromoProject = {\n timeline: EditorTimeline;\n title: string;\n logoSrc: string | null;\n};\n\nfunction microsToSec(us: number | undefined): number {\n if (typeof us !== 'number' || !Number.isFinite(us)) return 0;\n return Math.max(0, us / MICRO);\n}\n\n/** Best-effort map from web EditorProject JSON → native timeline. */\nexport function promoProjectToTimeline(project: Record<string, unknown>, title?: string): ImportedPromoProject {\n const clipsMap = (project.clips && typeof project.clips === 'object' ? project.clips : {}) as Record<\n string,\n WebClip\n >;\n const tracks = Array.isArray(project.tracks) ? (project.tracks as Array<{ clipIds?: string[] }>) : [];\n const orderedIds: string[] = [];\n for (const track of tracks) {\n for (const id of track.clipIds ?? []) {\n if (typeof id === 'string' && !orderedIds.includes(id)) orderedIds.push(id);\n }\n }\n for (const id of Object.keys(clipsMap)) {\n if (!orderedIds.includes(id)) orderedIds.push(id);\n }\n\n const withStart = orderedIds\n .map((id) => ({ id, clip: clipsMap[id] }))\n .filter((row) => row.clip)\n .sort((a, b) => microsToSec(a.clip.display?.from) - microsToSec(b.clip.display?.from));\n\n const mediaClips: EditorClip[] = [];\n const texts: TextClip[] = [];\n let counter = 0;\n\n for (const { clip } of withStart) {\n const from = microsToSec(clip.display?.from);\n const to = microsToSec(clip.display?.to);\n const span = Math.max(0.1, to > from ? to - from : DEFAULT_IMAGE_SEC);\n const type = clip.type || '';\n\n if (type === 'text' && typeof clip.text === 'string' && clip.text.trim()) {\n counter += 1;\n texts.push({\n id: `promo-text-${counter}`,\n text: clip.text.trim(),\n startSec: from,\n durationSec: span,\n x: 0.5,\n y: 0.5,\n });\n continue;\n }\n\n if ((type === 'video' || type === 'image') && typeof clip.src === 'string' && clip.src) {\n counter += 1;\n const trimFrom = microsToSec(clip.trim?.from);\n const trimTo = clip.trim?.to != null ? microsToSec(clip.trim.to) : null;\n mediaClips.push({\n id: `promo-clip-${counter}`,\n itemId: clip.id || `promo-${counter}`,\n type: type === 'image' ? 'image' : 'video',\n src: clip.src,\n name: (clip.name || type).slice(0, 48),\n durationSec: type === 'image' ? span : null,\n trimStartSec: trimFrom,\n trimEndSec: trimTo && trimTo > trimFrom ? trimTo : null,\n speed: 1,\n speedCurve: 'constant',\n filter: 'none',\n volume: typeof clip.volume === 'number' ? clip.volume : 1,\n muted: Boolean(clip.muted),\n fillColor: type === 'image' && typeof clip.color === 'string' ? clip.color : null,\n });\n }\n }\n\n const logo = project.logo as { src?: string } | null | undefined;\n const logoSrc = typeof logo?.src === 'string' && logo.src ? logo.src : null;\n\n return {\n timeline: {\n ...emptyTimeline(),\n clips: mediaClips,\n texts,\n },\n title: (title || '').trim() || 'Designed promo',\n logoSrc,\n };\n}\n"],"names":["_a","_b"],"mappings":"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"}
@@ -0,0 +1,312 @@
1
+ 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
+ var __objRest = (source, exclude) => {
21
+ var target = {};
22
+ for (var prop in source)
23
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
24
+ target[prop] = source[prop];
25
+ if (source != null && __getOwnPropSymbols)
26
+ for (var prop of __getOwnPropSymbols(source)) {
27
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
28
+ target[prop] = source[prop];
29
+ }
30
+ return target;
31
+ };
32
+ const PROMO_CONNECTOR = "yantra-video-generation";
33
+ const PRODUCE_SUBMIT_ACTION = "YANTRA_VIDEO_GENERATION_PRODUCE_SUBMIT";
34
+ const PRODUCE_STATUS_ACTION = "YANTRA_VIDEO_GENERATION_PRODUCE_STATUS";
35
+ const DESIGN_PROJECT_ACTION = "YANTRA_VIDEO_GENERATION_DESIGN_PROJECT";
36
+ const PROMO_PRESETS = [{
37
+ id: "product-teaser",
38
+ name: "Product teaser",
39
+ description: "Cinematic launch teaser: hero shots, a reveal, one closing line.",
40
+ defaultDurationSeconds: 30,
41
+ needsSourceVideo: false
42
+ }, {
43
+ id: "brand-film",
44
+ name: "Brand film",
45
+ description: "Mood-led brand piece: story, atmosphere, music-first.",
46
+ defaultDurationSeconds: 60,
47
+ needsSourceVideo: false
48
+ }, {
49
+ id: "motion-promo",
50
+ name: "Motion promo",
51
+ description: "Kinetic type and motion graphics for a feature, offer or launch.",
52
+ defaultDurationSeconds: 30,
53
+ needsSourceVideo: false
54
+ }, {
55
+ id: "explainer",
56
+ name: "Explainer",
57
+ description: "Narrated explainer with captions: what, why, how.",
58
+ defaultDurationSeconds: 60,
59
+ needsSourceVideo: false
60
+ }, {
61
+ id: "social-hook",
62
+ name: "Social hook",
63
+ description: "Vertical scroll-stopper: instant hook, big captions, one message.",
64
+ defaultDurationSeconds: 15,
65
+ needsSourceVideo: false
66
+ }, {
67
+ id: "footage-remix",
68
+ name: "Remix footage",
69
+ description: "Cut a video already on the canvas into a promo with graphics and music.",
70
+ defaultDurationSeconds: 30,
71
+ needsSourceVideo: true
72
+ }];
73
+ const PROMO_PLAYBOOKS = [{
74
+ id: "",
75
+ name: "Preset default"
76
+ }, {
77
+ id: "premium-minimalist",
78
+ name: "Premium minimalist"
79
+ }, {
80
+ id: "clean-professional",
81
+ name: "Clean professional"
82
+ }, {
83
+ id: "flat-motion-graphics",
84
+ name: "Flat motion graphics"
85
+ }, {
86
+ id: "minimalist-diagram",
87
+ name: "Minimalist diagram"
88
+ }, {
89
+ id: "anime-ghibli",
90
+ name: "Anime / Ghibli"
91
+ }];
92
+ function defaultNarration(presetId) {
93
+ return presetId !== "brand-film" && presetId !== "social-hook";
94
+ }
95
+ const DEFAULT_PROMO_PRESET = "product-teaser";
96
+ const PROMO_DURATIONS = [15, 30, 45, 60, 90];
97
+ const PROMO_ASPECT_RATIOS = ["16:9", "9:16", "1:1"];
98
+ const PROMO_POLL_EVERY_MS = 2e4;
99
+ const PROMO_POLL_MAX_MS = 75 * 6e4;
100
+ function lookupPromoPreset(id) {
101
+ var _a;
102
+ return (_a = PROMO_PRESETS.find((p) => p.id === id)) != null ? _a : PROMO_PRESETS[0];
103
+ }
104
+ const EMPTY_PROMO_CONTEXT = {
105
+ onScreenText: "",
106
+ keyPoints: "",
107
+ audience: "",
108
+ tone: "",
109
+ avoid: "",
110
+ brandColors: ""
111
+ };
112
+ function hasPromoContext(value, logoUrl) {
113
+ return Boolean(logoUrl) || Object.values(value).some((v) => v.trim().length > 0);
114
+ }
115
+ function readBrandColors(raw) {
116
+ const out = [];
117
+ for (const token of raw.split(/[\s,]+/)) {
118
+ const m = token.trim().match(/^#?([0-9a-f]{3}|[0-9a-f]{6})$/i);
119
+ if (!m) continue;
120
+ const h = m[1].length === 3 ? m[1].split("").map((c) => c + c).join("") : m[1];
121
+ const hex = `#${h.toLowerCase()}`;
122
+ if (!out.includes(hex)) out.push(hex);
123
+ }
124
+ return out.slice(0, 6);
125
+ }
126
+ function buildPromoRunParams(opts) {
127
+ var _a, _b, _c, _d, _e, _f, _g;
128
+ const referenceImageUrls = ((_a = opts.referenceImageUrls) != null ? _a : []).filter((u) => /^https?:\/\//i.test(u));
129
+ return __spreadProps(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues({
130
+ prompt: opts.prompt,
131
+ preset: opts.preset,
132
+ durationSeconds: opts.durationSeconds,
133
+ aspectRatio: opts.aspectRatio
134
+ }, referenceImageUrls.length ? {
135
+ referenceImageUrls
136
+ } : {}), opts.sourceVideoUrl ? {
137
+ sourceVideoUrl: opts.sourceVideoUrl
138
+ } : {}), opts.brandName ? {
139
+ brandName: opts.brandName
140
+ } : {}), opts.callToAction ? {
141
+ callToAction: opts.callToAction
142
+ } : {}), opts.logoUrl ? {
143
+ logoUrl: opts.logoUrl
144
+ } : {}), ((_b = opts.onScreenText) == null ? void 0 : _b.trim()) ? {
145
+ onScreenText: opts.onScreenText
146
+ } : {}), ((_c = opts.keyPoints) == null ? void 0 : _c.trim()) ? {
147
+ keyPoints: opts.keyPoints
148
+ } : {}), ((_d = opts.audience) == null ? void 0 : _d.trim()) ? {
149
+ audience: opts.audience.trim()
150
+ } : {}), ((_e = opts.tone) == null ? void 0 : _e.trim()) ? {
151
+ tone: opts.tone.trim()
152
+ } : {}), ((_f = opts.avoid) == null ? void 0 : _f.trim()) ? {
153
+ avoid: opts.avoid.trim()
154
+ } : {}), ((_g = opts.brandColors) == null ? void 0 : _g.trim()) ? {
155
+ brandColors: opts.brandColors
156
+ } : {}), typeof opts.captions === "boolean" ? {
157
+ captions: opts.captions
158
+ } : {}), typeof opts.narration === "boolean" ? {
159
+ narration: opts.narration
160
+ } : {}), opts.stylePlaybook ? {
161
+ stylePlaybook: opts.stylePlaybook
162
+ } : {}), {
163
+ timeoutMs: 55 * 6e4
164
+ });
165
+ }
166
+ function parsePromoRunResult(result) {
167
+ var _a, _b, _c, _d, _e, _f, _g;
168
+ const data = (_a = result.data) != null ? _a : result;
169
+ const samples = data.samples;
170
+ const url = typeof data.videoUri === "string" && data.videoUri || ((_b = samples == null ? void 0 : samples.find((s2) => s2 == null ? void 0 : s2.uri)) == null ? void 0 : _b.uri) || "";
171
+ if (!url) return null;
172
+ const prod = (_c = data.production) != null ? _c : {};
173
+ const s = (k) => typeof prod[k] === "string" ? prod[k] : void 0;
174
+ const n = (k) => typeof prod[k] === "number" ? prod[k] : void 0;
175
+ return {
176
+ url,
177
+ title: (_d = s("title")) != null ? _d : "Marketing video",
178
+ projectId: (_e = s("projectId")) != null ? _e : typeof data.operationName === "string" ? data.operationName : "",
179
+ preset: (_f = s("preset")) != null ? _f : "",
180
+ pipeline: (_g = s("pipeline")) != null ? _g : "",
181
+ durationSeconds: n("durationSeconds"),
182
+ summary: s("summary")
183
+ };
184
+ }
185
+ function parseSubmitResult(result) {
186
+ var _a;
187
+ const d = (_a = result.data) != null ? _a : result;
188
+ const projectId = typeof d.projectId === "string" ? d.projectId : "";
189
+ const sandboxId = typeof d.sandboxId === "string" ? d.sandboxId : "";
190
+ return projectId && sandboxId ? {
191
+ projectId,
192
+ sandboxId
193
+ } : null;
194
+ }
195
+ function parsePollResult(result) {
196
+ var _a;
197
+ const d = (_a = result.data) != null ? _a : result;
198
+ const state = d.state === "succeeded" || d.state === "failed" ? d.state : "running";
199
+ const progress = Array.isArray(d.progress) ? d.progress.filter((x) => typeof x === "string") : [];
200
+ if (state === "succeeded") {
201
+ const run = parsePromoRunResult(d);
202
+ return run ? {
203
+ state,
204
+ progress,
205
+ result: run
206
+ } : {
207
+ state: "failed",
208
+ progress,
209
+ error: "Production finished but returned no video"
210
+ };
211
+ }
212
+ if (state === "failed") {
213
+ return {
214
+ state,
215
+ progress,
216
+ error: typeof d.error === "string" ? d.error : "Marketing video production failed"
217
+ };
218
+ }
219
+ return {
220
+ state,
221
+ progress
222
+ };
223
+ }
224
+ async function producePromoVideo(run, opts, onProgress, sleep = (ms) => new Promise((r) => setTimeout(r, ms)), isCancelled) {
225
+ onProgress == null ? void 0 : onProgress("Starting the production\u2026");
226
+ const submit = await run(PRODUCE_SUBMIT_ACTION, buildPromoRunParams(opts));
227
+ const handle = parseSubmitResult(submit);
228
+ if (!handle) throw new Error("Could not start the production (no handle returned)");
229
+ const deadline = Date.now() + PROMO_POLL_MAX_MS;
230
+ let lastProgress = "";
231
+ let pollErrors = 0;
232
+ while (Date.now() < deadline) {
233
+ if (isCancelled == null ? void 0 : isCancelled()) throw new Error("cancelled");
234
+ await sleep(PROMO_POLL_EVERY_MS);
235
+ if (isCancelled == null ? void 0 : isCancelled()) throw new Error("cancelled");
236
+ let poll;
237
+ try {
238
+ const raw = await run(PRODUCE_STATUS_ACTION, {
239
+ projectId: handle.projectId,
240
+ sandboxId: handle.sandboxId
241
+ });
242
+ poll = parsePollResult(raw);
243
+ pollErrors = 0;
244
+ } catch (err) {
245
+ if (++pollErrors >= 4) throw err instanceof Error ? err : new Error(String(err));
246
+ continue;
247
+ }
248
+ const line = poll.progress.at(-1);
249
+ if (line && line !== lastProgress) {
250
+ lastProgress = line;
251
+ onProgress == null ? void 0 : onProgress(line);
252
+ }
253
+ if (poll.state === "succeeded" && poll.result) return poll.result;
254
+ if (poll.state === "failed") throw new Error(poll.error || "Marketing video production failed");
255
+ }
256
+ throw new Error("The production is taking longer than expected \u2014 check back shortly.");
257
+ }
258
+ function buildDesignParams(opts) {
259
+ const _a = opts, {
260
+ captions: _c,
261
+ narration: _n,
262
+ stylePlaybook: _p
263
+ } = _a, rest = __objRest(_a, [
264
+ "captions",
265
+ "narration",
266
+ "stylePlaybook"
267
+ ]);
268
+ const base = buildPromoRunParams(rest);
269
+ delete base.timeoutMs;
270
+ return __spreadValues(__spreadValues(__spreadValues({}, base), opts.sourceVideoSeconds && opts.sourceVideoSeconds > 0 ? {
271
+ sourceVideoSeconds: opts.sourceVideoSeconds
272
+ } : {}), opts.musicUrl && /^https?:\/\//i.test(opts.musicUrl) ? {
273
+ musicUrl: opts.musicUrl
274
+ } : {});
275
+ }
276
+ function parseDesignResult(result) {
277
+ var _a, _b;
278
+ const body = (result == null ? void 0 : result.data) && typeof result.data === "object" ? result.data : result;
279
+ const project = body == null ? void 0 : body.project;
280
+ if (!project || typeof project !== "object" || !Array.isArray(project.tracks)) {
281
+ return null;
282
+ }
283
+ const summary = (_a = body.summary) != null ? _a : {};
284
+ const card = (_b = body.card) != null ? _b : {};
285
+ return {
286
+ project,
287
+ title: typeof body.title === "string" && body.title.trim() ? body.title.trim() : "Video project",
288
+ card: __spreadValues(__spreadValues({
289
+ category: typeof card.category === "string" ? card.category : "Promos"
290
+ }, card.industry ? {
291
+ industry: card.industry
292
+ } : {}), card.reason ? {
293
+ reason: card.reason
294
+ } : {}),
295
+ summary: {
296
+ scenes: Number(summary.scenes) || 0,
297
+ textLayers: Number(summary.textLayers) || 0,
298
+ mediaLayers: Number(summary.mediaLayers) || 0,
299
+ seconds: Number(summary.seconds) || 0,
300
+ sceneNames: Array.isArray(summary.sceneNames) ? summary.sceneNames.map(String) : [],
301
+ aspect: typeof summary.aspect === "string" ? summary.aspect : "auto"
302
+ },
303
+ notes: Array.isArray(body.notes) ? body.notes.map(String) : []
304
+ };
305
+ }
306
+ async function designPromoProject(run, opts) {
307
+ const raw = await run(DESIGN_PROJECT_ACTION, buildDesignParams(opts));
308
+ if (raw.successful === false) throw new Error(raw.error || "Could not design the video");
309
+ const designed = parseDesignResult(raw);
310
+ if (!designed) throw new Error("Could not design the video (no project returned)");
311
+ return designed;
312
+ }export{DEFAULT_PROMO_PRESET,DESIGN_PROJECT_ACTION,EMPTY_PROMO_CONTEXT,PRODUCE_STATUS_ACTION,PRODUCE_SUBMIT_ACTION,PROMO_ASPECT_RATIOS,PROMO_CONNECTOR,PROMO_DURATIONS,PROMO_PLAYBOOKS,PROMO_POLL_EVERY_MS,PROMO_POLL_MAX_MS,PROMO_PRESETS,buildDesignParams,buildPromoRunParams,defaultNarration,designPromoProject,hasPromoContext,lookupPromoPreset,parseDesignResult,parsePollResult,parsePromoRunResult,parseSubmitResult,producePromoVideo,readBrandColors};//# sourceMappingURL=promoVideo.js.map