@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,859 @@
1
+ import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {useMemo,useState,useRef,useEffect,useCallback}from'react';import {StyleSheet,useColorScheme,View,Text,Pressable,ActivityIndicator}from'react-native';import {NativeCanvasViewer}from'./NativeCanvasViewer.js';import {CanvasBoardsGrid}from'./CanvasBoardsGrid.js';import {CanvasAgentChatPane}from'./CanvasAgentChatPane.js';import {VideoEditorExperience}from'./VideoEditorExperience.js';import {ImageEditorExperience}from'./ImageEditorExperience.js';import {AudioEditorExperience}from'./AudioEditorExperience.js';import {friendlyMediaError}from'./videoEditor/mediaActions.js';import {createRemoteRunAction,createRemoteUploadMedia,proxiedMediaUrl}from'./videoEditor/remoteMediaClient.js';import {renderExportSpec}from'./videoEditor/exportRenderer.js';import {getCachedCanvasBoards,fetchMyCanvasBoards,pushCanvasBoard}from'./surfaceIndex.js';import {readCachedCanvasBoards,writeCachedCanvasBoards}from'./canvasBoardsCatalog.js';import {hydrateCanvasBoardsSnapshot,persistCanvasBoardsSnapshot}from'./canvasBoardsSnapshot.js';import {boardSignature,frameForUpload,buildBoardState,dimsForAspect,newBoardId,emptyBoardState}from'./canvasCore.js';import {promoProjectToTimeline}from'./promoProjectImport.js';import {loadTemplateTimeline}from'./templateImport/loadTemplate.js';import {CanvasToolDock}from'./CanvasToolDock.js';import {describeSession}from'./sessionIdentity.js';import {DesignExperience}from'../design/DesignExperience.js';import {fetchMyDesigns}from'../design/designIndex.js';import {VideoGeneratorExperience}from'./VideoGeneratorExperience.js';import {VideoEditExperience}from'./VideoEditExperience.js';import {VideoClipsExperience}from'./VideoClipsExperience.js';import {FrameExtractorExperience}from'./FrameExtractorExperience.js';import {MoodboardExperience}from'./MoodboardExperience.js';import {SetStudioExperience}from'./SetStudioExperience.js';import {InfluencerStudioExperience}from'./InfluencerStudioExperience.js';import {CameraRecorderExperience}from'./recorder/CameraRecorderExperience.js';import {listStudioLooks}from'./studioLooks.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
+ function untitledBoard(channelId) {
21
+ const id = (channelId == null ? void 0 : channelId.trim()) || newBoardId();
22
+ return {
23
+ channelId: id,
24
+ title: "",
25
+ savedAt: Date.now(),
26
+ itemCount: 0,
27
+ board: emptyBoardState()
28
+ };
29
+ }
30
+ const SAVE_DEBOUNCE_MS = 600;
31
+ function CanvasExperience({
32
+ token,
33
+ indexUrl,
34
+ channelId,
35
+ board: explicitBoard,
36
+ sessionError,
37
+ onItemAction,
38
+ onExportVideo,
39
+ onPickLocalMedia,
40
+ uploadMedia,
41
+ audioRecorder,
42
+ runMediaAction,
43
+ apolloClient,
44
+ testID
45
+ }) {
46
+ var _a, _b, _c, _d, _e, _f, _g;
47
+ const isDark = useColorScheme() === "dark";
48
+ const effectiveRunAction = useMemo(() => runMediaAction != null ? runMediaAction : token && indexUrl ? createRemoteRunAction(token, indexUrl) : void 0, [runMediaAction, token, indexUrl]);
49
+ const effectiveUploadMedia = useMemo(() => uploadMedia != null ? uploadMedia : token && indexUrl ? createRemoteUploadMedia(token, indexUrl) : void 0, [uploadMedia, token, indexUrl]);
50
+ const cachedBoards = (_a = getCachedCanvasBoards(indexUrl)) != null ? _a : apolloClient ? readCachedCanvasBoards(apolloClient) : null;
51
+ const [boards, setBoards] = useState(() => cachedBoards != null ? cachedBoards : []);
52
+ const [loading, setLoading] = useState(!explicitBoard && cachedBoards == null);
53
+ const [error, setError] = useState(null);
54
+ const [selectedId, setSelectedId] = useState(null);
55
+ const [agentOpen, setAgentOpen] = useState(false);
56
+ const [gridAgentOpen, setGridAgentOpen] = useState(false);
57
+ const [generation, setGeneration] = useState(0);
58
+ const [mediaBusy, setMediaBusy] = useState(false);
59
+ const [uploadStatus, setUploadStatus] = useState(null);
60
+ const lastSavedByIdRef = useRef({});
61
+ const skipFetch = Boolean(explicitBoard);
62
+ useEffect(() => {
63
+ if (skipFetch || !indexUrl) return void 0;
64
+ let cancelled = false;
65
+ void hydrateCanvasBoardsSnapshot(indexUrl).then((rows) => {
66
+ if (cancelled || !(rows == null ? void 0 : rows.length)) return;
67
+ setBoards((prev) => prev.length > 0 ? prev : rows);
68
+ setLoading(false);
69
+ });
70
+ return () => {
71
+ cancelled = true;
72
+ };
73
+ }, [indexUrl, skipFetch]);
74
+ useEffect(() => {
75
+ if (skipFetch) return void 0;
76
+ if (!token) {
77
+ if (getCachedCanvasBoards(indexUrl) == null) {
78
+ setLoading(true);
79
+ }
80
+ setError(null);
81
+ return void 0;
82
+ }
83
+ const controller = new AbortController();
84
+ let cancelled = false;
85
+ const hasCache = getCachedCanvasBoards(indexUrl) != null || readCachedCanvasBoards(apolloClient).length > 0;
86
+ (async () => {
87
+ if (!hasCache) {
88
+ setLoading(true);
89
+ setError(null);
90
+ }
91
+ const result = await fetchMyCanvasBoards({
92
+ url: indexUrl,
93
+ token,
94
+ signal: controller.signal
95
+ });
96
+ if (cancelled) return;
97
+ if (__DEV__) {
98
+ console.log("[CanvasExperience] boards:", JSON.stringify(result.boards.map((b) => ({
99
+ channelId: b.channelId,
100
+ title: b.title,
101
+ items: b.board.items.map((i) => ({
102
+ type: i.type,
103
+ x: i.x,
104
+ y: i.y,
105
+ w: i.width,
106
+ h: i.height,
107
+ z: i.zIndex,
108
+ src: `${i.src.slice(0, 96)}\u2026`
109
+ }))
110
+ }))));
111
+ }
112
+ if (result.error) {
113
+ if (!hasCache) setError(result.error);
114
+ setLoading(false);
115
+ return;
116
+ }
117
+ lastSavedByIdRef.current = Object.fromEntries(result.boards.map((entry) => [entry.channelId, boardSignature(entry.board)]));
118
+ setBoards(result.boards);
119
+ writeCachedCanvasBoards(apolloClient, result.boards);
120
+ setError(null);
121
+ setLoading(false);
122
+ })();
123
+ return () => {
124
+ cancelled = true;
125
+ controller.abort();
126
+ };
127
+ }, [indexUrl, token, skipFetch, generation, apolloClient]);
128
+ useEffect(() => {
129
+ if (skipFetch || loading || !indexUrl) return;
130
+ persistCanvasBoardsSnapshot(indexUrl, boards);
131
+ }, [boards, indexUrl, loading, skipFetch]);
132
+ useEffect(() => {
133
+ if (selectedId || !channelId || boards.length === 0) return;
134
+ const match = boards.find((entry) => entry.channelId === channelId);
135
+ if (match) setSelectedId(match.channelId);
136
+ }, [boards, channelId, selectedId]);
137
+ const selected = useMemo(() => selectedId ? boards.find((entry) => entry.channelId === selectedId) : void 0, [boards, selectedId]);
138
+ const playableBoard = useCallback((board) => {
139
+ if (!indexUrl) return board;
140
+ return __spreadProps(__spreadValues({}, board), {
141
+ items: board.items.map((item) => item.type === "video" || item.type === "audio" ? __spreadProps(__spreadValues({}, item), {
142
+ src: proxiedMediaUrl(indexUrl, item.src)
143
+ }) : item)
144
+ });
145
+ }, [indexUrl]);
146
+ const handleDockStudio = useCallback((studio) => {
147
+ if (studio === "video") {
148
+ setEditorSeed({
149
+ itemId: null
150
+ });
151
+ return;
152
+ }
153
+ if (studio === "agent") {
154
+ setEditorSeed({
155
+ itemId: null,
156
+ initialRailTab: "agent"
157
+ });
158
+ return;
159
+ }
160
+ if (studio === "influencer") {
161
+ setShowInfluencer(true);
162
+ return;
163
+ }
164
+ if (studio === "set3d") {
165
+ setShowSet3d(true);
166
+ return;
167
+ }
168
+ if (studio === "frames") {
169
+ setShowFrames(true);
170
+ return;
171
+ }
172
+ if (studio === "moodboard") {
173
+ setShowMoodboard(true);
174
+ return;
175
+ }
176
+ const kind = studio === "flyers" ? "postcard" : studio === "carousel" ? "carousel" : "design";
177
+ setDesignEntry({
178
+ kind
179
+ });
180
+ }, []);
181
+ const reload = useCallback(() => setGeneration((n) => n + 1), []);
182
+ const handleBoardChange = useCallback((board) => {
183
+ setBoards((prev) => prev.map((entry) => entry.channelId === selectedId ? __spreadProps(__spreadValues({}, entry), {
184
+ board,
185
+ title: board.title || entry.title,
186
+ itemCount: board.items.length,
187
+ savedAt: board.savedAt
188
+ }) : entry));
189
+ }, [selectedId]);
190
+ const handleAddPhotos = useCallback(async (source) => {
191
+ if (!onPickLocalMedia || mediaBusy) return;
192
+ try {
193
+ const picked = await onPickLocalMedia((message) => {
194
+ setMediaBusy(true);
195
+ setUploadStatus(message);
196
+ }, source);
197
+ if (!picked.length) return;
198
+ setBoards((prev) => {
199
+ const list = prev.length ? prev : [untitledBoard(channelId)];
200
+ const targetId = selectedId != null ? selectedId : list[0].channelId;
201
+ return list.map((entry) => {
202
+ if (entry.channelId !== targetId) return entry;
203
+ const startZ = entry.board.items.length;
204
+ const items = [...entry.board.items, ...picked.map((item, i) => __spreadProps(__spreadValues(__spreadValues({}, item), frameForUpload(item.type)), {
205
+ zIndex: startZ + i + 1
206
+ }))];
207
+ const nextState = buildBoardState(items, entry.board.zoom, entry.title);
208
+ return __spreadProps(__spreadValues({}, entry), {
209
+ title: nextState.title || entry.title,
210
+ itemCount: items.length,
211
+ board: __spreadProps(__spreadValues({}, entry.board), {
212
+ items,
213
+ savedAt: Date.now(),
214
+ title: nextState.title
215
+ })
216
+ });
217
+ });
218
+ });
219
+ } catch (err) {
220
+ if (__DEV__) {
221
+ console.warn("[CanvasExperience] add photos failed:", err);
222
+ }
223
+ } finally {
224
+ setMediaBusy(false);
225
+ setUploadStatus(null);
226
+ }
227
+ }, [onPickLocalMedia, selectedId, channelId, mediaBusy]);
228
+ const handleNewCanvas = useCallback(() => {
229
+ const entry = untitledBoard();
230
+ lastSavedByIdRef.current[entry.channelId] = boardSignature(entry.board);
231
+ setBoards((prev) => [entry, ...prev]);
232
+ setSelectedId(entry.channelId);
233
+ }, []);
234
+ const handleAskAgentFromGrid = useCallback(() => {
235
+ setGridAgentOpen(true);
236
+ }, []);
237
+ const closeBoard = useCallback(() => {
238
+ setAgentOpen(false);
239
+ setGridAgentOpen(false);
240
+ setBoardSelectedItem(null);
241
+ setSelectedId(null);
242
+ setBoards((prev) => prev.filter((entry) => entry.itemCount > 0));
243
+ }, []);
244
+ useEffect(() => {
245
+ if (skipFetch || loading || !token || !indexUrl || !selected) return void 0;
246
+ const state = buildBoardState(selected.board.items, selected.board.zoom, selected.title);
247
+ if (state.items.length === 0) return void 0;
248
+ const sig = boardSignature(state);
249
+ if (lastSavedByIdRef.current[selected.channelId] === sig) return void 0;
250
+ const timer = setTimeout(() => {
251
+ void pushCanvasBoard({
252
+ url: indexUrl,
253
+ token,
254
+ channelId: selected.channelId,
255
+ state
256
+ }).then((ok) => {
257
+ if (ok) lastSavedByIdRef.current[selected.channelId] = sig;
258
+ });
259
+ }, SAVE_DEBOUNCE_MS);
260
+ return () => clearTimeout(timer);
261
+ }, [selected, token, indexUrl, loading, skipFetch]);
262
+ const [editorSeed, setEditorSeed] = useState(null);
263
+ const [mediaEdit, setMediaEdit] = useState(null);
264
+ const [generator, setGenerator] = useState(null);
265
+ const [videoEdit, setVideoEdit] = useState(null);
266
+ const [videoClips, setVideoClips] = useState(null);
267
+ const [showFrames, setShowFrames] = useState(false);
268
+ const [showMoodboard, setShowMoodboard] = useState(false);
269
+ const [showSet3d, setShowSet3d] = useState(false);
270
+ const [showInfluencer, setShowInfluencer] = useState(false);
271
+ const [showRecorder, setShowRecorder] = useState(false);
272
+ const [boardSelectedItem, setBoardSelectedItem] = useState(null);
273
+ const [exporting, setExporting] = useState(null);
274
+ const [designEntry, setDesignEntry] = useState(null);
275
+ const [designs, setDesigns] = useState([]);
276
+ const [featuredLooks, setFeaturedLooks] = useState([]);
277
+ useEffect(() => {
278
+ if (skipFetch || !token || !indexUrl || designEntry) return void 0;
279
+ const controller = new AbortController();
280
+ void fetchMyDesigns({
281
+ url: indexUrl,
282
+ token,
283
+ signal: controller.signal
284
+ }).then((result) => {
285
+ setDesigns(result.designs);
286
+ });
287
+ return () => controller.abort();
288
+ }, [token, indexUrl, skipFetch, designEntry, generation]);
289
+ useEffect(() => {
290
+ if (!token && !effectiveRunAction && !apolloClient) {
291
+ setFeaturedLooks([]);
292
+ return;
293
+ }
294
+ let cancelled = false;
295
+ void listStudioLooks(effectiveRunAction, {
296
+ limit: 12
297
+ }, {
298
+ client: apolloClient,
299
+ token,
300
+ indexUrl
301
+ }).then((page) => {
302
+ if (!cancelled) setFeaturedLooks(page.looks);
303
+ }).catch(() => {
304
+ if (!cancelled) setFeaturedLooks([]);
305
+ });
306
+ return () => {
307
+ cancelled = true;
308
+ };
309
+ }, [apolloClient, effectiveRunAction, indexUrl, token]);
310
+ const addBoardItem = useCallback((type, url, opts) => {
311
+ var _a2;
312
+ const maxEdge = type === "video" ? 640 : 600;
313
+ const frame = (opts == null ? void 0 : opts.aspect) ? __spreadValues({
314
+ x: 100,
315
+ y: 100
316
+ }, dimsForAspect(opts.aspect, maxEdge)) : frameForUpload(type);
317
+ const src = indexUrl ? proxiedMediaUrl(indexUrl, url) : url;
318
+ const item = __spreadValues({
319
+ id: newBoardId(),
320
+ type,
321
+ src,
322
+ generatedAssetName: (_a2 = opts == null ? void 0 : opts.name) != null ? _a2 : type === "video" ? "Edited video" : type,
323
+ zIndex: 1
324
+ }, frame);
325
+ setBoards((prev) => {
326
+ const list = prev.length ? prev : [untitledBoard(channelId)];
327
+ const targetId = selectedId != null ? selectedId : list[0].channelId;
328
+ return list.map((entry) => {
329
+ if (entry.channelId !== targetId) return entry;
330
+ const items = [...entry.board.items, __spreadProps(__spreadValues({}, item), {
331
+ zIndex: entry.board.items.length + 1
332
+ })];
333
+ const nextState = buildBoardState(items, entry.board.zoom, entry.title);
334
+ return __spreadProps(__spreadValues({}, entry), {
335
+ title: nextState.title || entry.title,
336
+ itemCount: items.length,
337
+ board: __spreadProps(__spreadValues({}, entry.board), {
338
+ items,
339
+ savedAt: Date.now(),
340
+ title: nextState.title
341
+ })
342
+ });
343
+ });
344
+ });
345
+ return item;
346
+ }, [selectedId, channelId, indexUrl]);
347
+ const openFreshBoardWithItem = useCallback((type, url, opts) => {
348
+ var _a2;
349
+ const maxEdge = type === "video" ? 640 : 600;
350
+ const frame = (opts == null ? void 0 : opts.aspect) ? __spreadValues({
351
+ x: 100,
352
+ y: 100
353
+ }, dimsForAspect(opts.aspect, maxEdge)) : frameForUpload(type);
354
+ const src = indexUrl ? proxiedMediaUrl(indexUrl, url) : url;
355
+ const item = __spreadValues({
356
+ id: newBoardId(),
357
+ type,
358
+ src,
359
+ generatedAssetName: (_a2 = opts == null ? void 0 : opts.name) != null ? _a2 : type === "video" ? "Edited video" : type,
360
+ zIndex: 1
361
+ }, frame);
362
+ const entry = untitledBoard();
363
+ const items = [__spreadProps(__spreadValues({}, item), {
364
+ zIndex: 1
365
+ })];
366
+ const nextState = buildBoardState(items, entry.board.zoom, entry.title);
367
+ const next = __spreadProps(__spreadValues({}, entry), {
368
+ title: nextState.title || entry.title,
369
+ itemCount: items.length,
370
+ board: __spreadProps(__spreadValues({}, entry.board), {
371
+ items,
372
+ savedAt: Date.now(),
373
+ title: nextState.title
374
+ })
375
+ });
376
+ lastSavedByIdRef.current[entry.channelId] = boardSignature(next.board);
377
+ setBoards((prev) => [next, ...prev]);
378
+ setSelectedId(entry.channelId);
379
+ setGridAgentOpen(false);
380
+ return item;
381
+ }, [indexUrl]);
382
+ const addRenderedVideo = useCallback((url, opts) => addBoardItem("video", url, opts), [addBoardItem]);
383
+ const patchItemSrc = useCallback((itemId, url, type) => {
384
+ const src = indexUrl ? proxiedMediaUrl(indexUrl, url) : url;
385
+ setBoards((prev) => prev.map((entry) => {
386
+ if (entry.channelId !== selectedId) return entry;
387
+ const items = entry.board.items.map((item) => item.id === itemId ? __spreadValues(__spreadProps(__spreadValues({}, item), {
388
+ src
389
+ }), type ? {
390
+ type
391
+ } : {}) : item);
392
+ const nextState = buildBoardState(items, entry.board.zoom, entry.title);
393
+ return __spreadProps(__spreadValues({}, entry), {
394
+ board: __spreadProps(__spreadValues({}, entry.board), {
395
+ items,
396
+ savedAt: Date.now(),
397
+ title: nextState.title
398
+ })
399
+ });
400
+ }));
401
+ }, [selectedId, indexUrl]);
402
+ const exportBusyRef = useRef(false);
403
+ const effectiveOnExport = useMemo(() => {
404
+ if (!effectiveRunAction) return onExportVideo;
405
+ const runAction = effectiveRunAction;
406
+ const upload = effectiveUploadMedia;
407
+ return (spec) => {
408
+ if (exportBusyRef.current) return;
409
+ exportBusyRef.current = true;
410
+ setExporting({
411
+ stage: "Starting render"
412
+ });
413
+ void renderExportSpec(spec, runAction, upload, (p) => setExporting(p)).then((url) => {
414
+ addRenderedVideo(url);
415
+ setEditorSeed(null);
416
+ setExporting(null);
417
+ }).catch((err) => {
418
+ setExporting({
419
+ stage: "",
420
+ error: friendlyMediaError(err, "video export")
421
+ });
422
+ }).finally(() => {
423
+ exportBusyRef.current = false;
424
+ });
425
+ };
426
+ }, [onExportVideo, effectiveRunAction, effectiveUploadMedia, addRenderedVideo]);
427
+ const handleItemAction = useCallback((action, item) => {
428
+ if (action === "create-video") {
429
+ setGenerator({
430
+ mode: "video",
431
+ item
432
+ });
433
+ return;
434
+ }
435
+ if (action === "restyle-video") {
436
+ setGenerator({
437
+ mode: "video",
438
+ item,
439
+ restyle: true
440
+ });
441
+ return;
442
+ }
443
+ if (action === "promo-video") {
444
+ setGenerator({
445
+ mode: "promo",
446
+ item
447
+ });
448
+ return;
449
+ }
450
+ if (action === "edit-video") {
451
+ setVideoEdit(item);
452
+ return;
453
+ }
454
+ if (action === "trim-video") {
455
+ setVideoClips(item);
456
+ return;
457
+ }
458
+ if ((action === "edit-image" || action === "mark-edit") && effectiveRunAction) {
459
+ setMediaEdit(__spreadValues({
460
+ kind: "image",
461
+ item
462
+ }, action === "mark-edit" ? {
463
+ initialTab: "aiedit"
464
+ } : {}));
465
+ return;
466
+ }
467
+ if (action === "edit-audio" && effectiveRunAction) {
468
+ setMediaEdit({
469
+ kind: "audio",
470
+ item
471
+ });
472
+ return;
473
+ }
474
+ onItemAction == null ? void 0 : onItemAction(action, item);
475
+ }, [onItemAction, effectiveRunAction]);
476
+ const handleUseTemplate = useCallback(async (template) => {
477
+ try {
478
+ const imported = await loadTemplateTimeline(template);
479
+ setEditorSeed({
480
+ itemId: null,
481
+ initialTimeline: imported.timeline,
482
+ projectTitle: imported.title,
483
+ logoSrc: imported.logoSrc
484
+ });
485
+ } catch (e) {
486
+ }
487
+ }, []);
488
+ if (generator) {
489
+ return /* @__PURE__ */ jsx(VideoGeneratorExperience, { mode: generator.mode, item: generator.item, restyle: generator.restyle, initialPrompt: generator.initialPrompt, runAction: effectiveRunAction, onClose: () => setGenerator(null), onGenerated: (url, meta) => {
490
+ const kind = meta.mode === "audio" ? "audio" : meta.mode === "image" ? "image" : "video";
491
+ addBoardItem(kind, url, {
492
+ name: `${kind === "image" ? "Image" : kind === "audio" ? "Audio" : meta.mode === "promo" ? "Promo" : "Video"} \xB7 ${meta.prompt.slice(0, 28)}`,
493
+ aspect: meta.aspect
494
+ });
495
+ setGenerator(null);
496
+ }, onPromoDesigned: (designed) => {
497
+ const imported = promoProjectToTimeline(designed.project, designed.title);
498
+ setGenerator(null);
499
+ setEditorSeed({
500
+ itemId: null,
501
+ initialTimeline: imported.timeline,
502
+ projectTitle: imported.title,
503
+ logoSrc: imported.logoSrc
504
+ });
505
+ } });
506
+ }
507
+ if (showFrames) {
508
+ return /* @__PURE__ */ jsx(FrameExtractorExperience, { boardItems: (_b = selected == null ? void 0 : selected.board.items) != null ? _b : [], seedVideo: (boardSelectedItem == null ? void 0 : boardSelectedItem.type) === "video" ? boardSelectedItem : null, runAction: effectiveRunAction, onClose: () => setShowFrames(false), onPlace: (urls) => {
509
+ urls.forEach((url, i) => addBoardItem("image", url, {
510
+ name: `Frame ${i + 1}`
511
+ }));
512
+ setShowFrames(false);
513
+ } });
514
+ }
515
+ if (showMoodboard) {
516
+ return /* @__PURE__ */ jsx(MoodboardExperience, { boardItems: (_c = selected == null ? void 0 : selected.board.items) != null ? _c : [], onClose: () => setShowMoodboard(false), onUseBrief: (brief) => {
517
+ setShowMoodboard(false);
518
+ setGenerator({
519
+ mode: "image",
520
+ initialPrompt: brief
521
+ });
522
+ } });
523
+ }
524
+ if (showSet3d) {
525
+ return /* @__PURE__ */ jsx(SetStudioExperience, { boardItems: (_d = selected == null ? void 0 : selected.board.items) != null ? _d : [], runAction: effectiveRunAction, uploadMedia: effectiveUploadMedia, onClose: () => setShowSet3d(false), onPlace: (kind, url, name) => {
526
+ addBoardItem(kind, url, {
527
+ name
528
+ });
529
+ } });
530
+ }
531
+ if (showRecorder) {
532
+ return /* @__PURE__ */ jsx(CameraRecorderExperience, { onClose: () => setShowRecorder(false), onPick: async (source) => {
533
+ if (!onPickLocalMedia) return [];
534
+ return onPickLocalMedia(void 0, source);
535
+ }, onPlaced: (items) => {
536
+ for (const item of items) {
537
+ addBoardItem(item.type === "video" ? "video" : "image", item.src, {
538
+ name: item.generatedAssetName,
539
+ aspect: item.aspect
540
+ });
541
+ }
542
+ } });
543
+ }
544
+ if (showInfluencer) {
545
+ return /* @__PURE__ */ jsx(InfluencerStudioExperience, { boardItems: (_e = selected == null ? void 0 : selected.board.items) != null ? _e : [], runAction: effectiveRunAction, onClose: () => setShowInfluencer(false), onPlace: (url, name) => {
546
+ addBoardItem("video", url, {
547
+ name,
548
+ aspect: "9:16"
549
+ });
550
+ setShowInfluencer(false);
551
+ } });
552
+ }
553
+ if (videoEdit) {
554
+ return /* @__PURE__ */ jsx(VideoEditExperience, { src: videoEdit.src, name: videoEdit.generatedAssetName, items: (_f = selected == null ? void 0 : selected.board.items) != null ? _f : [], runAction: effectiveRunAction, onClose: () => setVideoEdit(null), onApplied: (url, kind) => {
555
+ if (kind === "audio") {
556
+ addBoardItem("audio", url, {
557
+ name: "Extracted audio"
558
+ });
559
+ } else {
560
+ patchItemSrc(videoEdit.id, url, kind === "image" ? "image" : "video");
561
+ }
562
+ setVideoEdit(null);
563
+ } });
564
+ }
565
+ if (videoClips) {
566
+ return /* @__PURE__ */ jsx(VideoClipsExperience, { item: videoClips === "url" ? null : videoClips, runAction: effectiveRunAction, onClose: () => setVideoClips(null), onClips: (urls, aspect) => {
567
+ urls.forEach((url, i) => addRenderedVideo(url, {
568
+ name: `Clip ${i + 1}`,
569
+ aspect
570
+ }));
571
+ setVideoClips(null);
572
+ } });
573
+ }
574
+ if (explicitBoard) {
575
+ return /* @__PURE__ */ jsx(NativeCanvasViewer, { board: playableBoard(explicitBoard), controls: true, onItemAction: handleItemAction, testID });
576
+ }
577
+ if (sessionError) {
578
+ return /* @__PURE__ */ jsx(Notice, { isDark, title: "Couldn\u2019t open your canvases", detail: sessionError });
579
+ }
580
+ if (error && boards.length === 0) {
581
+ return /* @__PURE__ */ jsx(Notice, { isDark, title: "Couldn\u2019t load your canvases", detail: error, fine: describeSession(token, indexUrl), onRetry: reload });
582
+ }
583
+ if (mediaEdit) {
584
+ const shared = {
585
+ src: mediaEdit.item.src,
586
+ name: mediaEdit.item.generatedAssetName,
587
+ runAction: effectiveRunAction,
588
+ onClose: () => setMediaEdit(null),
589
+ onSave: (url) => {
590
+ patchItemSrc(mediaEdit.item.id, url, mediaEdit.kind);
591
+ setMediaEdit(null);
592
+ }
593
+ };
594
+ return mediaEdit.kind === "image" ? /* @__PURE__ */ jsx(ImageEditorExperience, __spreadProps(__spreadValues({}, shared), { initialTab: mediaEdit.initialTab })) : /* @__PURE__ */ jsx(AudioEditorExperience, __spreadValues({}, shared));
595
+ }
596
+ if (editorSeed) {
597
+ return /* @__PURE__ */ jsxs(View, { style: styles.fill, children: [
598
+ /* @__PURE__ */ jsx(VideoEditorExperience, { items: (_g = selected == null ? void 0 : selected.board.items) != null ? _g : [], seedItemId: editorSeed.itemId, initialTimeline: editorSeed.initialTimeline, projectTitle: editorSeed.projectTitle || (selected == null ? void 0 : selected.board.title) || (selected == null ? void 0 : selected.title), initialLogoSrc: editorSeed.logoSrc, onClose: () => setEditorSeed(null), onExport: effectiveOnExport, onPickLocalMedia, runAction: effectiveRunAction, uploadMedia: effectiveUploadMedia, audioRecorder, apolloClient, token, indexUrl, initialRailTab: editorSeed.initialRailTab }),
599
+ exporting ? /* @__PURE__ */ jsx(View, { style: styles.exportOverlay, children: /* @__PURE__ */ jsx(View, { style: styles.exportCard, children: exporting.error ? /* @__PURE__ */ jsxs(Fragment, { children: [
600
+ /* @__PURE__ */ jsx(Text, { style: styles.exportError, children: "Export failed" }),
601
+ /* @__PURE__ */ jsx(Text, { style: styles.exportStage, numberOfLines: 4, children: exporting.error }),
602
+ /* @__PURE__ */ jsx(Pressable, { onPress: () => setExporting(null), style: styles.exportDismiss, accessibilityRole: "button", children: /* @__PURE__ */ jsx(Text, { style: styles.exportDismissLabel, children: "Dismiss" }) })
603
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
604
+ /* @__PURE__ */ jsx(ActivityIndicator, { color: "#F7F7FA" }),
605
+ /* @__PURE__ */ jsx(Text, { style: styles.exportStage, children: exporting.stage })
606
+ ] }) }) }) : null
607
+ ] });
608
+ }
609
+ if (designEntry) {
610
+ return /* @__PURE__ */ jsx(View, { style: styles.fill, testID, children: /* @__PURE__ */ jsx(DesignExperience, { token, indexUrl, entry: designEntry, onClose: () => setDesignEntry(null), onPickLocalMedia, uploadMedia: effectiveUploadMedia, runMediaAction: effectiveRunAction }) });
611
+ }
612
+ if (!selected) {
613
+ return /* @__PURE__ */ jsxs(View, { style: styles.fill, testID, children: [
614
+ loading && boards.length === 0 ? /* @__PURE__ */ jsx(View, { style: styles.gridLoading, pointerEvents: "none", children: /* @__PURE__ */ jsx(ActivityIndicator, { size: "small" }) }) : null,
615
+ /* @__PURE__ */ jsx(CanvasBoardsGrid, { boards: boards.filter((entry) => entry.itemCount > 0), onOpen: setSelectedId, onNewCanvas: handleNewCanvas, designs, onOpenDesign: (channelId2) => setDesignEntry({
616
+ channelId: channelId2
617
+ }), onNewDesign: (kind) => setDesignEntry({
618
+ kind
619
+ }), onAskAgent: handleAskAgentFromGrid, onComposeGenerate: ({
620
+ mode,
621
+ prompt
622
+ }) => {
623
+ setGenerator({
624
+ mode,
625
+ initialPrompt: prompt
626
+ });
627
+ }, featuredLooks, onRecreateLook: (look) => {
628
+ setGenerator({
629
+ mode: "video",
630
+ initialPrompt: look.prompt
631
+ });
632
+ } }),
633
+ /* @__PURE__ */ jsx(CanvasAgentChatPane, { visible: gridAgentOpen, onClose: () => setGridAgentOpen(false), runAction: effectiveRunAction, boardItems: [], onGenerated: (url, meta) => {
634
+ const kind = meta.mode === "audio" ? "audio" : meta.mode === "image" ? "image" : "video";
635
+ return openFreshBoardWithItem(kind, url, {
636
+ name: `${kind === "image" ? "Image" : kind === "audio" ? "Audio" : "Video"} \xB7 ${(meta.title || meta.prompt).slice(0, 28)}`,
637
+ aspect: meta.aspect
638
+ });
639
+ }, onUseTemplate: (template) => void handleUseTemplate(template) })
640
+ ] });
641
+ }
642
+ return /* @__PURE__ */ jsxs(View, { style: styles.fill, testID, children: [
643
+ /* @__PURE__ */ jsx(CanvasToolDock, { busy: mediaBusy, boards, boardId: selectedId, runAction: effectiveRunAction, apolloClient, token, indexUrl, seedItem: boardSelectedItem, dockHidden: agentOpen, onUpload: (source) => void handleAddPhotos(source), onPlace: (item) => addBoardItem(item.type, item.src, {
644
+ name: item.generatedAssetName
645
+ }), onPickStorage: (kind, url, name) => addBoardItem(kind, url, {
646
+ name
647
+ }), onStudio: handleDockStudio, onSlides: () => setDesignEntry({
648
+ kind: "design"
649
+ }), onGenerated: (url, meta) => {
650
+ const kind = meta.mode === "audio" ? "audio" : meta.mode === "image" ? "image" : "video";
651
+ addBoardItem(kind, url, {
652
+ name: `${kind === "image" ? "Image" : kind === "audio" ? "Audio" : meta.mode === "promo" ? "Promo" : meta.mode === "clips" ? "Clip" : "Video"} \xB7 ${meta.prompt.slice(0, 28)}`,
653
+ aspect: meta.aspect
654
+ });
655
+ }, onPromoDesigned: (designed) => {
656
+ const imported = promoProjectToTimeline(designed.project, designed.title);
657
+ setEditorSeed({
658
+ itemId: null,
659
+ initialTimeline: imported.timeline,
660
+ projectTitle: imported.title,
661
+ logoSrc: imported.logoSrc
662
+ });
663
+ }, onEditReplaced: (itemId, url) => patchItemSrc(itemId, url), onEditVideo: (item) => setVideoEdit(item), onRecord: () => setShowRecorder(true), children: /* @__PURE__ */ jsx(NativeCanvasViewer, { board: playableBoard(selected.board), controls: true, onBoardsPress: closeBoard, onItemAction: handleItemAction, onBoardChange: handleBoardChange, onAgentOpenChange: setAgentOpen, onSelectionChange: setBoardSelectedItem, runAction: effectiveRunAction, onAgentGenerated: (url, meta) => {
664
+ const kind = meta.mode === "audio" ? "audio" : meta.mode === "image" ? "image" : "video";
665
+ return addBoardItem(kind, url, {
666
+ name: `${kind === "image" ? "Image" : kind === "audio" ? "Audio" : "Video"} \xB7 ${(meta.title || meta.prompt).slice(0, 28)}`,
667
+ aspect: meta.aspect
668
+ });
669
+ }, onAgentReplace: (itemId, url) => patchItemSrc(itemId, url), onUseTemplate: (template) => void handleUseTemplate(template) }) }),
670
+ uploadStatus ? /* @__PURE__ */ jsxs(View, { pointerEvents: "none", style: styles.uploadToast, children: [
671
+ mediaBusy ? /* @__PURE__ */ jsx(ActivityIndicator, { size: "small", color: "#2563eb" }) : null,
672
+ /* @__PURE__ */ jsx(Text, { style: styles.uploadToastText, numberOfLines: 2, children: uploadStatus })
673
+ ] }) : null
674
+ ] });
675
+ }
676
+ function Notice({
677
+ isDark,
678
+ title,
679
+ detail,
680
+ fine,
681
+ primaryLabel,
682
+ onPrimary,
683
+ onRetry,
684
+ retryLabel = "Try again"
685
+ }) {
686
+ return /* @__PURE__ */ jsxs(View, { style: styles.center, children: [
687
+ /* @__PURE__ */ jsx(Text, { style: [styles.title, isDark && styles.textLight], children: title }),
688
+ /* @__PURE__ */ jsx(Text, { style: [styles.detail, isDark && styles.textMuted], children: detail }),
689
+ fine ? /* @__PURE__ */ jsx(Text, { style: styles.fine, children: fine }) : null,
690
+ onPrimary ? /* @__PURE__ */ jsx(Pressable, { onPress: onPrimary, style: styles.primaryCta, accessibilityRole: "button", children: /* @__PURE__ */ jsx(Text, { style: styles.primaryCtaLabel, children: primaryLabel != null ? primaryLabel : "Create" }) }) : null,
691
+ onRetry ? /* @__PURE__ */ jsx(Pressable, { onPress: onRetry, style: styles.retry, accessibilityRole: "button", children: /* @__PURE__ */ jsx(Text, { style: styles.retryLabel, children: retryLabel }) }) : null
692
+ ] });
693
+ }
694
+ const styles = StyleSheet.create({
695
+ primaryCta: {
696
+ marginTop: 16,
697
+ paddingHorizontal: 22,
698
+ paddingVertical: 11,
699
+ borderRadius: 11,
700
+ backgroundColor: "#2563eb"
701
+ },
702
+ primaryCtaLabel: {
703
+ color: "#ffffff",
704
+ fontSize: 14,
705
+ fontWeight: "600"
706
+ },
707
+ fill: {
708
+ flex: 1
709
+ },
710
+ gridLoading: {
711
+ position: "absolute",
712
+ top: 12,
713
+ right: 16,
714
+ zIndex: 4
715
+ },
716
+ center: {
717
+ flex: 1,
718
+ alignItems: "center",
719
+ justifyContent: "center",
720
+ padding: 24
721
+ },
722
+ title: {
723
+ fontSize: 15,
724
+ fontWeight: "600",
725
+ color: "#0f172a",
726
+ marginBottom: 6
727
+ },
728
+ detail: {
729
+ fontSize: 13,
730
+ color: "#64748b",
731
+ textAlign: "center"
732
+ },
733
+ fine: {
734
+ marginTop: 10,
735
+ fontSize: 11,
736
+ color: "#94a3b8",
737
+ textAlign: "center",
738
+ paddingHorizontal: 20,
739
+ lineHeight: 15
740
+ },
741
+ spaced: {
742
+ marginTop: 10
743
+ },
744
+ textLight: {
745
+ color: "#f8fafc"
746
+ },
747
+ textMuted: {
748
+ color: "#94a3b8"
749
+ },
750
+ retry: {
751
+ marginTop: 16,
752
+ paddingHorizontal: 18,
753
+ paddingVertical: 10,
754
+ borderRadius: 10,
755
+ backgroundColor: "#2563eb"
756
+ },
757
+ retryLabel: {
758
+ color: "#ffffff",
759
+ fontSize: 13,
760
+ fontWeight: "600"
761
+ },
762
+ backPill: {
763
+ position: "absolute",
764
+ top: 12,
765
+ left: 12,
766
+ zIndex: 40,
767
+ flexDirection: "row",
768
+ alignItems: "center",
769
+ gap: 6,
770
+ maxWidth: 220,
771
+ paddingHorizontal: 14,
772
+ paddingVertical: 10,
773
+ borderRadius: 12,
774
+ backgroundColor: "#ffffff",
775
+ borderWidth: 1,
776
+ borderColor: "rgba(15,23,42,0.08)",
777
+ shadowColor: "#0f172a",
778
+ shadowOpacity: 0.08,
779
+ shadowRadius: 8,
780
+ shadowOffset: {
781
+ width: 0,
782
+ height: 2
783
+ },
784
+ elevation: 2
785
+ },
786
+ backLabel: {
787
+ fontSize: 15,
788
+ fontWeight: "600",
789
+ color: "#475569"
790
+ },
791
+ uploadToast: {
792
+ position: "absolute",
793
+ top: 56,
794
+ left: 16,
795
+ right: 16,
796
+ zIndex: 60,
797
+ flexDirection: "row",
798
+ alignItems: "center",
799
+ gap: 10,
800
+ paddingHorizontal: 14,
801
+ paddingVertical: 12,
802
+ borderRadius: 14,
803
+ backgroundColor: "#ffffff",
804
+ borderWidth: StyleSheet.hairlineWidth,
805
+ borderColor: "rgba(15,23,42,0.08)",
806
+ shadowColor: "#0f172a",
807
+ shadowOpacity: 0.12,
808
+ shadowRadius: 16,
809
+ shadowOffset: {
810
+ width: 0,
811
+ height: 4
812
+ },
813
+ elevation: 6
814
+ },
815
+ uploadToastText: {
816
+ flex: 1,
817
+ fontSize: 14,
818
+ fontWeight: "600",
819
+ color: "#0f172a"
820
+ },
821
+ exportOverlay: __spreadProps(__spreadValues({}, StyleSheet.absoluteFillObject), {
822
+ backgroundColor: "rgba(0,0,0,0.65)",
823
+ alignItems: "center",
824
+ justifyContent: "center",
825
+ padding: 32
826
+ }),
827
+ exportCard: {
828
+ minWidth: 220,
829
+ maxWidth: 320,
830
+ alignItems: "center",
831
+ gap: 10,
832
+ backgroundColor: "#17171C",
833
+ borderRadius: 16,
834
+ paddingVertical: 20,
835
+ paddingHorizontal: 24
836
+ },
837
+ exportStage: {
838
+ fontSize: 13,
839
+ color: "#CBD5E1",
840
+ textAlign: "center"
841
+ },
842
+ exportError: {
843
+ fontSize: 15,
844
+ fontWeight: "600",
845
+ color: "#F87171"
846
+ },
847
+ exportDismiss: {
848
+ marginTop: 4,
849
+ backgroundColor: "#26262E",
850
+ borderRadius: 16,
851
+ paddingHorizontal: 14,
852
+ paddingVertical: 8
853
+ },
854
+ exportDismissLabel: {
855
+ fontSize: 13,
856
+ fontWeight: "600",
857
+ color: "#F7F7FA"
858
+ }
859
+ });export{CanvasExperience,CanvasExperience as default};//# sourceMappingURL=CanvasExperience.js.map