@adminide-stack/yantra-mobile 12.0.69-alpha.9 → 12.0.70-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +166 -0
  170. package/lib/features/chat/ConnectorConnectCard.js.map +1 -0
  171. package/lib/features/chat/ConnectorConnectPrompt.js +272 -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 +207 -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":"NativeCanvasViewer.js","sources":["../../../src/features/canvas/NativeCanvasViewer.tsx"],"sourcesContent":["/**\n * Native canvas board — the first genuinely native slice of the canvas\n * surface. Renders a `PersistedCanvasState` board (positioned image/video/audio\n * items on a plane) with pinch-zoom and pan, and lets items be moved and\n * freely resized in place: tap to select, drag the body to move, drag a corner\n * handle to resize (opposite corner anchored, per-axis, MIN_ITEM_SIZE floor).\n *\n * Deliberately NOT a port of the web editors. The board plane is positioned\n * media (`CanvasItem`: x/y/width/height/zIndex) — it needs a transformed view,\n * not a drawing engine, so there is no Konva analogue to replace and no new\n * native dependency: `react-native-gesture-handler`, `react-native-reanimated`\n * and `expo-image` are already in the app. Konva/Skia only enter the picture\n * for the EDITORS (freehand drawing, filters), which stay on the WebView tier.\n *\n * Every gesture runs on the UI thread via reanimated shared values — camera\n * AND item edits — so panning, dragging and resizing stay at frame rate even\n * while the JS thread is busy. React state only hears about an edit once, when\n * the gesture ends (`applyItemFrame` commit), which is also when the host's\n * `onBoardChange` fires; persistence stays the host's concern.\n */\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { Share, StyleSheet, Text, TextInput, View, useWindowDimensions } from 'react-native';\nimport {\n Gesture,\n GestureDetector,\n GestureHandlerRootView,\n Pressable as GHPressable,\n} from 'react-native-gesture-handler';\nimport Animated, {\n runOnJS,\n useAnimatedReaction,\n useAnimatedStyle,\n useSharedValue,\n type SharedValue,\n} from 'react-native-reanimated';\nimport { Image } from 'expo-image';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { getVideoItemRenderer } from './videoRenderer';\nimport {\n applyItemFrame,\n boardBounds,\n coerceUploadSizedItem,\n paintOrder,\n removeItem,\n resizeFrame,\n spreadStackedItems,\n MAX_ZOOM,\n MIN_ZOOM,\n type CanvasItem,\n type ItemFrame,\n type PersistedCanvasState,\n type ResizeCorner,\n} from './canvasCore';\nimport { CanvasAgentChatPane } from './CanvasAgentChatPane';\nimport type { GenerateLane } from './CanvasGeneratePanel';\nimport type { RunMediaAction } from './videoEditor/mediaActions';\n\nexport type CanvasItemAction =\n | 'edit-image'\n | 'mark-edit'\n | 'edit-video'\n | 'trim-video'\n | 'create-video'\n | 'edit-audio'\n | 'promo-video'\n | 'restyle-video';\n\nexport interface NativeCanvasViewerProps {\n board: PersistedCanvasState;\n /** Tap on an item — the seam where editors (WebView tier) attach later. */\n onItemPress?: (item: CanvasItem) => void;\n /** Fired once per finished drag/resize with the whole updated board.\n * The viewer keeps its own working copy; the host owns persistence. */\n onBoardChange?: (board: PersistedCanvasState) => void;\n /** Show the zoom cluster (- n% +) and the selection toolbar, like the\n * web canvas. Opt-in so screens with their own chrome (the Expo app's\n * zoom indicator) are unchanged. */\n controls?: boolean;\n /** Agent-backed toolbar actions (Edit Image, Create Video). The viewer\n * only raises the intent - what \"edit\" means is the host's business. */\n onItemAction?: (action: CanvasItemAction, item: CanvasItem) => void;\n /** Web compact header: Boards + item count + zoom cluster. */\n onBoardsPress?: () => void;\n /** Open the agent rail as soon as this board mounts (gallery AI Chat). */\n initialAgentOpen?: boolean;\n /** Hide the Generate/Library dock while the agent rail is open (web parity). */\n onAgentOpenChange?: (open: boolean) => void;\n runAction?: RunMediaAction;\n onAgentGenerated?: (\n url: string,\n meta: { prompt: string; aspect: string; mode: GenerateLane; title?: string },\n ) => CanvasItem | void;\n onAgentReplace?: (itemId: string, url: string) => void;\n /** Selected board item — edit dock / generate seed. */\n onSelectionChange?: (item: CanvasItem | null) => void;\n onUseTemplate?: (template: import('./canvasChatTemplates').CanvasPromptTemplate) => void;\n testID?: string;\n}\n\n/** Extra invisible touch padding around each handle. */\nconst HANDLE_SLOP = 12;\nconst SELECTION_COLOR = '#3b82f6';\n\n/** Static glyph tile - the fallback for any media that cannot draw itself\n * (no registered renderer, or a renderer that throws at mount). */\nfunction MediaGlyph({ item }: { item: CanvasItem }) {\n return (\n <View style={[StyleSheet.absoluteFill, styles.mediaTile]} accessibilityLabel={`Canvas ${item.type}`}>\n <Text style={styles.mediaTileGlyph}>{item.type === 'video' ? '▶' : '♪'}</Text>\n {item.generatedAssetName ? (\n <Text numberOfLines={1} style={styles.mediaTileLabel}>\n {item.generatedAssetName}\n </Text>\n ) : null}\n </View>\n );\n}\n\n/**\n * Isolates a registered video renderer's failures to the single item.\n *\n * The renderer is expo-video, delivered by whichever lane registered it. When\n * that lane's remote JS is loaded across the microfrontend boundary onto a\n * host binary whose native ExpoVideo is absent or a different version, mounting\n * VideoView throws at render (\"View config getter ... must be a function\").\n * Without this boundary that throw escapes to the remote's loader boundary and\n * the WHOLE canvas reads \"surface unavailable\". Here it degrades to the glyph\n * tile - the exact fallback used when no renderer is registered at all - so a\n * board with one bad video still opens.\n */\nclass VideoRenderIsland extends React.Component<\n { fallback: React.ReactNode; children: React.ReactNode },\n { failed: boolean }\n> {\n state = { failed: false };\n\n static getDerivedStateFromError() {\n return { failed: true };\n }\n\n componentDidCatch(error: unknown) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[NativeCanvasViewer] video renderer failed, using glyph:', error);\n }\n }\n\n render() {\n return this.state.failed ? this.props.fallback : this.props.children;\n }\n}\n\n/** The media content of an item, frame-agnostic — shared by the static and\n * the selected (animated) renderers. */\nfunction ItemContent({ item }: { item: CanvasItem }) {\n if (item.type === 'image') {\n return (\n <Image\n source={{ uri: item.src }}\n style={[StyleSheet.absoluteFill, styles.itemImage]}\n contentFit=\"cover\"\n transition={120}\n accessibilityLabel={item.generatedAssetName ?? 'Canvas image'}\n />\n );\n }\n const VideoRenderer = item.type === 'video' ? getVideoItemRenderer() : null;\n if (VideoRenderer) {\n return (\n <VideoRenderIsland fallback={<MediaGlyph item={item} />}>\n <VideoRenderer item={item} />\n </VideoRenderIsland>\n );\n }\n return <MediaGlyph item={item} />;\n}\n\n/** A non-selected item: static frame, tap to select. */\nfunction StaticItem({ item, onTap }: { item: CanvasItem; onTap: (item: CanvasItem) => void }) {\n const tap = Gesture.Tap()\n .runOnJS(true)\n .blocksExternalGesture()\n .onEnd(() => onTap(item));\n\n return (\n <GestureDetector gesture={tap}>\n <View\n style={{\n position: 'absolute',\n left: item.x,\n top: item.y,\n width: item.width,\n height: item.height,\n zIndex: item.zIndex,\n overflow: 'hidden',\n borderRadius: 8,\n }}\n >\n <ItemContent item={item} />\n </View>\n </GestureDetector>\n );\n}\n\nconst CORNERS: ResizeCorner[] = ['tl', 'tr', 'bl', 'br'];\n\nfunction ItemHoverToolbar({\n item,\n onAction,\n onRemove,\n onChromeTouch,\n}: {\n item: CanvasItem;\n onAction?: NativeCanvasViewerProps['onItemAction'];\n onRemove: () => void;\n onChromeTouch: () => void;\n}) {\n const [moreOpen, setMoreOpen] = useState(false);\n const [promptOpen, setPromptOpen] = useState(false);\n const [prompt, setPrompt] = useState('');\n\n const download = useCallback(() => {\n setMoreOpen(false);\n void Share.share({ url: item.src, message: item.src }).catch(() => undefined);\n }, [item.src]);\n\n // RNGH Pressable is a native button, so Native() actually activates and\n // can block the full-screen empty-plane tap. RN Pressable cannot.\n const stealTouches = useMemo(() => Gesture.Native().blocksExternalGesture(), []);\n\n return (\n <View style={styles.hoverWrap} pointerEvents=\"box-none\">\n <GestureDetector gesture={stealTouches}>\n <View style={styles.hoverCluster} pointerEvents=\"auto\" onTouchStart={onChromeTouch}>\n <View style={styles.hoverBar}>\n {/* Web clips the left of this row on a phone so the 3-dots stay on screen. */}\n <View style={styles.hoverActions}>\n <View style={styles.hoverActionsInner}>\n {item.type === 'image' ? (\n <>\n <GHPressable\n onPress={() => {\n setMoreOpen(false);\n setPromptOpen((v) => !v);\n }}\n style={styles.hoverBtn}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons name=\"pencil-outline\" size={20} color=\"#64748b\" />\n <Text style={styles.hoverLabel} numberOfLines={1}>\n Edit Image\n </Text>\n </GHPressable>\n <GHPressable\n onPress={() => {\n setMoreOpen(false);\n setPromptOpen(false);\n onAction?.('edit-image', item);\n }}\n style={styles.hoverBtn}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons name=\"content-cut\" size={20} color=\"#64748b\" />\n <Text style={styles.hoverLabel}>Editor</Text>\n </GHPressable>\n <GHPressable\n onPress={() => {\n setMoreOpen(false);\n setPromptOpen(false);\n onAction?.('mark-edit', item);\n }}\n style={styles.hoverBtn}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons name=\"marker\" size={20} color=\"#64748b\" />\n <Text style={styles.hoverLabel}>Mark & edit</Text>\n </GHPressable>\n </>\n ) : null}\n {item.type === 'video' ? (\n <GHPressable\n onPress={() => {\n setMoreOpen(false);\n onAction?.('edit-video', item);\n }}\n style={styles.hoverBtn}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons name=\"content-cut\" size={20} color=\"#64748b\" />\n <Text style={styles.hoverLabel}>Edit Video</Text>\n </GHPressable>\n ) : null}\n {item.type === 'audio' ? (\n <GHPressable\n onPress={() => {\n setMoreOpen(false);\n onAction?.('edit-audio', item);\n }}\n style={styles.hoverBtn}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons name=\"content-cut\" size={20} color=\"#64748b\" />\n <Text style={styles.hoverLabel}>Edit Audio</Text>\n </GHPressable>\n ) : null}\n <View style={styles.hoverDivider} />\n <GHPressable\n onPress={() => {\n setMoreOpen(false);\n onAction?.('create-video', item);\n }}\n style={styles.hoverBtn}\n accessibilityRole=\"button\"\n >\n <View>\n <MaterialCommunityIcons name=\"video-outline\" size={20} color=\"#64748b\" />\n <MaterialCommunityIcons\n name=\"star-four-points\"\n size={8}\n color=\"#94a3b8\"\n style={styles.hoverSparkle}\n />\n </View>\n <Text style={styles.hoverLabel}>Create Video</Text>\n </GHPressable>\n {item.type === 'video' ? (\n <GHPressable\n onPress={() => {\n setMoreOpen(false);\n onAction?.('restyle-video', item);\n }}\n style={styles.hoverBtn}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons name=\"auto-fix\" size={20} color=\"#64748b\" />\n <Text style={styles.hoverLabel}>Restyle</Text>\n </GHPressable>\n ) : null}\n {item.type === 'image' || item.type === 'video' ? (\n <GHPressable\n onPress={() => {\n setMoreOpen(false);\n onAction?.('promo-video', item);\n }}\n style={styles.hoverBtn}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons name=\"bullhorn-outline\" size={20} color=\"#64748b\" />\n <Text style={styles.hoverLabel}>Promo</Text>\n </GHPressable>\n ) : null}\n {item.type === 'video' ? (\n <>\n <View style={styles.hoverDivider} />\n <GHPressable\n onPress={() => {\n setMoreOpen(false);\n onAction?.('trim-video', item);\n }}\n style={styles.hoverBtn}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons\n name=\"movie-open-outline\"\n size={20}\n color=\"#64748b\"\n />\n <Text style={styles.hoverLabel}>Clips</Text>\n </GHPressable>\n </>\n ) : null}\n <View style={styles.hoverDivider} />\n <GHPressable\n onPress={download}\n style={styles.hoverIconBtn}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Download\"\n >\n <MaterialCommunityIcons name=\"download-outline\" size={20} color=\"#94a3b8\" />\n </GHPressable>\n </View>\n </View>\n <View style={styles.hoverDivider} />\n <View style={styles.moreWrap}>\n <GHPressable\n onPress={() => {\n setPromptOpen(false);\n setMoreOpen((v) => !v);\n }}\n style={styles.hoverIconBtn}\n accessibilityRole=\"button\"\n accessibilityLabel=\"More\"\n >\n <MaterialCommunityIcons name=\"dots-vertical\" size={20} color=\"#94a3b8\" />\n </GHPressable>\n {moreOpen ? (\n <View style={styles.moreMenu}>\n <GHPressable\n onPress={() => {\n setMoreOpen(false);\n onRemove();\n }}\n style={styles.moreRow}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons name=\"trash-can-outline\" size={20} color=\"#64748b\" />\n <Text style={styles.moreLabel}>Remove</Text>\n </GHPressable>\n <GHPressable onPress={download} style={styles.moreRow} accessibilityRole=\"button\">\n <MaterialCommunityIcons name=\"download-outline\" size={20} color=\"#64748b\" />\n <Text style={styles.moreLabel}>Download</Text>\n </GHPressable>\n </View>\n ) : null}\n </View>\n </View>\n {promptOpen && item.type === 'image' ? (\n <View style={styles.editPrompt}>\n <TextInput\n value={prompt}\n onChangeText={setPrompt}\n placeholder=\"Describe how to edit this image…\"\n placeholderTextColor=\"#94a3b8\"\n multiline\n style={styles.editPromptInput}\n />\n </View>\n ) : null}\n </View>\n </GestureDetector>\n </View>\n );\n}\n\nfunction DotGrid() {\n return (\n <View pointerEvents=\"none\" style={styles.dots}>\n {Array.from({ length: 40 }).map((_, row) => (\n <View key={row} style={styles.dotRow}>\n {Array.from({ length: 24 }).map((__, col) => (\n <View key={col} style={styles.dotCell}>\n <View style={styles.dot} />\n </View>\n ))}\n </View>\n ))}\n </View>\n );\n}\n\ninterface SelectedItemProps {\n item: CanvasItem;\n /** Camera scale — converts screen-space gesture deltas to board units. */\n cameraScale: SharedValue<number>;\n onCommit: (id: string, frame: ItemFrame) => void;\n onTap?: (item: CanvasItem) => void;\n showToolbar?: boolean;\n onAction?: NativeCanvasViewerProps['onItemAction'];\n onRemove: () => void;\n onChromeTouch: () => void;\n}\n\n/**\n * The selected item: its frame lives in shared values so drags and resizes\n * track the finger on the UI thread; React state is only told on gesture end.\n */\nfunction SelectedItem({\n item,\n cameraScale,\n onCommit,\n onTap,\n showToolbar,\n onAction,\n onRemove,\n onChromeTouch,\n}: SelectedItemProps) {\n const fx = useSharedValue(item.x);\n const fy = useSharedValue(item.y);\n const fw = useSharedValue(item.width);\n const fh = useSharedValue(item.height);\n // Frame snapshot at gesture start, so deltas compose instead of drifting.\n const start = useSharedValue<ItemFrame>({ x: item.x, y: item.y, width: item.width, height: item.height });\n\n // Selecting a different item reuses this component instance.\n useEffect(() => {\n fx.value = item.x;\n fy.value = item.y;\n fw.value = item.width;\n fh.value = item.height;\n // Shared values are stable refs; the item fields are the real inputs.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [item.id, item.x, item.y, item.width, item.height]);\n\n const commit = useCallback(\n (frame: ItemFrame) => {\n onCommit(item.id, frame);\n },\n [item.id, onCommit],\n );\n\n const snapshot = () => {\n 'worklet';\n\n start.value = { x: fx.value, y: fy.value, width: fw.value, height: fh.value };\n };\n\n const finish = () => {\n 'worklet';\n\n runOnJS(commit)({ x: fx.value, y: fy.value, width: fw.value, height: fh.value });\n };\n\n // Drag the body to move. One finger only, so two fingers stay pinch-zoom.\n const drag = Gesture.Pan()\n .maxPointers(1)\n .onStart(snapshot)\n .onUpdate((e) => {\n 'worklet';\n\n const s = cameraScale.value;\n fx.value = start.value.x + e.translationX / s;\n fy.value = start.value.y + e.translationY / s;\n })\n .onEnd(finish);\n\n const tap = Gesture.Tap()\n .runOnJS(true)\n .blocksExternalGesture()\n .onEnd(() => onTap?.(item));\n\n const bodyGesture = item.type === 'video' || item.type === 'audio' ? null : Gesture.Exclusive(tap, drag);\n\n const frameStyle = useAnimatedStyle(() => ({\n position: 'absolute',\n left: fx.value,\n top: fy.value,\n width: fw.value,\n height: fh.value,\n // Editing brings the item above its neighbours for the duration.\n zIndex: 99999,\n }));\n\n const ringStyle = useAnimatedStyle(() => ({\n borderWidth: 2 / cameraScale.value,\n borderRadius: 8 / cameraScale.value,\n }));\n\n // One resize pan per corner, built once per selected item. Not hooks, so\n // building them in a memoised map is safe.\n const cornerGestures = useMemo(\n () =>\n CORNERS.map((corner) =>\n Gesture.Pan()\n .maxPointers(1)\n .onStart(snapshot)\n .onUpdate((e) => {\n 'worklet';\n\n const s = cameraScale.value;\n const next = resizeFrame(start.value, corner, e.translationX / s, e.translationY / s);\n fx.value = next.x;\n fy.value = next.y;\n fw.value = next.width;\n fh.value = next.height;\n })\n .onEnd(finish),\n ),\n // Shared values and worklets are stable; rebuild only when the target changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [item.id],\n );\n\n const handleStyle = styles.webHandle;\n\n const cornerPlacement: Record<ResizeCorner, object> = {\n tl: { left: 0, top: 0 },\n tr: { right: 0, top: 0 },\n bl: { left: 0, bottom: 0 },\n br: { right: 0, bottom: 0 },\n };\n\n const media = (\n <View style={[StyleSheet.absoluteFill, { overflow: 'hidden', borderRadius: 8 }]}>\n <ItemContent item={item} />\n <Animated.View pointerEvents=\"none\" style={[StyleSheet.absoluteFill, styles.selectionRing, ringStyle]} />\n </View>\n );\n\n return (\n <Animated.View style={[frameStyle, styles.selectedOverflow]}>\n {bodyGesture ? <GestureDetector gesture={bodyGesture}>{media}</GestureDetector> : media}\n {(item.type === 'video' || item.type === 'audio') && (\n <GestureDetector gesture={drag}>\n <View style={styles.videoDragBar} accessibilityLabel=\"Drag to move\">\n <View style={styles.videoDragGrip} />\n <View style={styles.videoDragGrip} />\n <View style={styles.videoDragGrip} />\n </View>\n </GestureDetector>\n )}\n {CORNERS.map((corner, i) => (\n <GestureDetector key={corner} gesture={cornerGestures[i]}>\n <View style={[styles.handleAnchor, cornerPlacement[corner]]} hitSlop={HANDLE_SLOP}>\n <View style={handleStyle} />\n </View>\n </GestureDetector>\n ))}\n {showToolbar ? (\n <ItemHoverToolbar item={item} onAction={onAction} onRemove={onRemove} onChromeTouch={onChromeTouch} />\n ) : null}\n </Animated.View>\n );\n}\n\nexport function NativeCanvasViewer({\n board,\n onItemPress,\n onBoardChange,\n controls,\n onItemAction,\n onBoardsPress,\n initialAgentOpen = false,\n onAgentOpenChange,\n runAction,\n onAgentGenerated,\n onAgentReplace,\n onSelectionChange,\n onUseTemplate,\n testID,\n}: NativeCanvasViewerProps) {\n const { width: winW, height: winH } = useWindowDimensions();\n const [viewport, setViewport] = useState({ width: winW, height: winH });\n\n // Working copy of the board's items — edits land here on gesture end.\n // Exactly-stacked items (the default add frame) are fanned into a row for\n // display, or every file after the first would be invisible.\n const [items, setItems] = useState<readonly CanvasItem[]>(() =>\n spreadStackedItems(board.items.map(coerceUploadSizedItem)),\n );\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [agentOpen, setAgentOpen] = useState(initialAgentOpen);\n useEffect(() => {\n onAgentOpenChange?.(agentOpen);\n }, [agentOpen, onAgentOpenChange]);\n useEffect(() => {\n onSelectionChange?.(selectedId ? (items.find((it) => it.id === selectedId) ?? null) : null);\n }, [selectedId, items, onSelectionChange]);\n const boardMediaKey = board.items.map((it) => `${it.id}\\t${it.src}`).join('\\0');\n const prevItemIdsRef = useRef<Set<string>>(new Set(board.items.map((it) => it.id)));\n\n const ordered = useMemo(() => paintOrder(items), [items]);\n\n // Camera: scale + translation, driven on the UI thread.\n const scale = useSharedValue(1);\n const tx = useSharedValue(0);\n const ty = useSharedValue(0);\n // Gesture-start snapshots, so pinch/pan compose instead of fighting.\n const startScale = useSharedValue(1);\n const startTx = useSharedValue(0);\n const startTy = useSharedValue(0);\n\n const applyCamera = (list: readonly CanvasItem[]) => {\n const fit = boardBounds(list);\n if (!fit) {\n scale.value = 1;\n tx.value = 0;\n ty.value = 0;\n return;\n }\n const boardW = Math.max(1, fit.maxX - fit.minX);\n const boardH = Math.max(1, fit.maxY - fit.minY);\n // Web opens at 100% and pans. Fitting a 500px card into a 390px phone\n // was shrinking the in-plane item toolbar to ~69%.\n scale.value = 1;\n tx.value = (viewport.width - boardW) / 2 - fit.minX;\n ty.value = (viewport.height - boardH) / 2 - fit.minY;\n };\n\n useEffect(() => {\n const spread = spreadStackedItems(board.items.map(coerceUploadSizedItem));\n const prevIds = prevItemIdsRef.current;\n const added = spread.filter((it) => !prevIds.has(it.id));\n const removedCount = [...prevIds].filter((id) => !spread.some((s) => s.id === id)).length;\n const appended = added.length > 0 && removedCount === 0 && spread.length > prevIds.size;\n prevItemIdsRef.current = new Set(spread.map((it) => it.id));\n setItems(spread);\n setSelectedId(appended ? added[added.length - 1].id : null);\n applyCamera(spread);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [boardMediaKey]);\n\n useEffect(() => {\n applyCamera(items);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [viewport.width, viewport.height]);\n\n const handleCommit = useCallback(\n (id: string, frame: ItemFrame) => {\n setItems((prev) => {\n const next = applyItemFrame(prev, id, frame);\n const snapshot = { ...board, items: next };\n // Parent setState must not run inside this updater — React treats\n // it as rendering NativeCanvasViewer and throws.\n queueMicrotask(() => onBoardChange?.(snapshot));\n return next;\n });\n },\n [board, onBoardChange],\n );\n\n const handleSelect = useCallback(\n (item: CanvasItem) => {\n setSelectedId(item.id);\n onItemPress?.(item);\n },\n [onItemPress],\n );\n\n // Toolbar buttons sit on the full-screen pan/tap plane. RNGH Pressable\n // plus a brief deselect lock keeps 3-dots from clearing the selection.\n const skipDeselectUntil = useRef(0);\n const armChromeTouch = useCallback(() => {\n skipDeselectUntil.current = Date.now() + 400;\n }, []);\n const handleBackgroundTap = useCallback(\n (absX: number, absY: number) => {\n if (Date.now() < skipDeselectUntil.current) return;\n const item = selectedId ? items.find((it) => it.id === selectedId) : undefined;\n if (item) {\n const s = scale.value;\n const left = item.x * s + tx.value;\n const top = item.y * s + ty.value;\n // Toolbar sits just above the photo; treat that band as chrome.\n if (\n absX >= left &&\n absX <= left + item.width * s &&\n absY >= top - 80 &&\n absY <= top + item.height * s\n ) {\n return;\n }\n }\n setSelectedId(null);\n },\n [items, selectedId],\n );\n\n // Live zoom readout for the controls - rounded on the UI thread so React\n // hears only whole-percent changes, not every gesture frame.\n const [zoomPct, setZoomPct] = useState(100);\n useAnimatedReaction(\n () => Math.round(scale.value * 100),\n (pct, prev) => {\n if (pct !== prev) runOnJS(setZoomPct)(pct);\n },\n );\n\n /** Zoom about the viewport centre - the button twin of the pinch. */\n const zoomBy = useCallback(\n (factor: number) => {\n const next = Math.min(MAX_ZOOM, Math.max(MIN_ZOOM, scale.value * factor));\n const ratio = next / scale.value;\n const cx = viewport.width / 2;\n const cy = viewport.height / 2;\n tx.value = cx - (cx - tx.value) * ratio;\n ty.value = cy - (cy - ty.value) * ratio;\n scale.value = next;\n },\n // Shared values are stable refs.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [viewport.width, viewport.height],\n );\n\n /** Tap the percentage to reset to 100%, matching the web zoom cluster. */\n const fitBoard = useCallback(() => {\n applyCamera(items);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [items, viewport.width, viewport.height]);\n\n const commitItems = useCallback(\n (next: readonly CanvasItem[]) => {\n setItems(next);\n onBoardChange?.({ ...board, items: [...next] });\n },\n [board, onBoardChange],\n );\n\n const pan = Gesture.Pan()\n .minDistance(10)\n .averageTouches(true)\n .onStart(() => {\n startTx.value = tx.value;\n startTy.value = ty.value;\n })\n .onUpdate((e) => {\n tx.value = startTx.value + e.translationX;\n ty.value = startTy.value + e.translationY;\n });\n\n const pinch = Gesture.Pinch()\n .onStart(() => {\n startScale.value = scale.value;\n startTx.value = tx.value;\n startTy.value = ty.value;\n })\n .onUpdate((e) => {\n 'worklet';\n\n const raw = startScale.value * e.scale;\n const next = Math.min(MAX_ZOOM, Math.max(MIN_ZOOM, raw));\n // Zoom about the pinch focal point: keep the board point under the\n // fingers stationary while the scale changes around it.\n const ratio = next / startScale.value;\n tx.value = e.focalX - (e.focalX - startTx.value) * ratio;\n ty.value = e.focalY - (e.focalY - startTy.value) * ratio;\n scale.value = next;\n });\n\n // Tap on empty plane clears the selection; item taps win by being deeper.\n const backgroundTap = Gesture.Tap()\n .runOnJS(true)\n .onEnd((e) => {\n handleBackgroundTap(e.absoluteX, e.absoluteY);\n });\n\n const gesture = Gesture.Simultaneous(pan, pinch, backgroundTap);\n\n const planeStyle = useAnimatedStyle(() => ({\n transform: [{ translateX: tx.value }, { translateY: ty.value }, { scale: scale.value }] as const,\n }));\n\n // Empty boards still render the pan/zoom plane so Canvas Native opens as a\n // canvas, not a placeholder.\n\n return (\n // Self-sufficient gesture root: hosts differ in whether they wrap\n // screens in GestureHandlerRootView (the Expo app's canvas screen\n // does not), and GestureDetector throws without one. Nesting under a\n // host-provided root is safe.\n <GestureHandlerRootView\n style={styles.viewport}\n testID={testID}\n onLayout={(e) => {\n const { width, height } = e.nativeEvent.layout;\n if (width > 0 && height > 0) setViewport({ width, height });\n }}\n >\n {onBoardsPress ? (\n <View style={styles.boardHeader}>\n <GHPressable\n onPress={onBoardsPress}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Boards\"\n style={styles.boardsBtn}\n >\n <MaterialCommunityIcons name=\"view-grid-outline\" size={16} color=\"#64748b\" />\n <Text style={styles.boardsLabel}>Boards</Text>\n </GHPressable>\n <View style={styles.headerRule} />\n <Text style={styles.itemCount}>\n {items.length} {items.length === 1 ? 'item' : 'items'}\n </Text>\n <View style={styles.headerZoom}>\n <GHPressable\n onPress={() => zoomBy(1 / 1.25)}\n hitSlop={8}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Zoom out\"\n style={styles.zoomBtn}\n >\n <Text style={styles.zoomBtnGlyph}>−</Text>\n </GHPressable>\n <GHPressable\n onPress={fitBoard}\n hitSlop={8}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Fit board\"\n >\n <Text style={styles.zoomPct}>{zoomPct}%</Text>\n </GHPressable>\n <GHPressable\n onPress={() => zoomBy(1.25)}\n hitSlop={8}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Zoom in\"\n style={styles.zoomBtn}\n >\n <Text style={styles.zoomBtnGlyph}>+</Text>\n </GHPressable>\n </View>\n <View style={styles.headerRule} />\n <GHPressable\n onPress={() => setAgentOpen(true)}\n style={styles.askAgentBtn}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Ask agent\"\n >\n <MaterialCommunityIcons name=\"creation\" size={16} color=\"#64748b\" />\n </GHPressable>\n </View>\n ) : null}\n <View\n style={styles.canvasPlane}\n onLayout={(e) => {\n const { width, height } = e.nativeEvent.layout;\n if (width > 0 && height > 0) setViewport({ width, height });\n }}\n >\n <DotGrid />\n <GestureDetector gesture={gesture}>\n {/* Full-screen hit target so empty-canvas pan still works; items sit on the 1px plane. */}\n <View style={StyleSheet.absoluteFill} collapsable={false}>\n <Animated.View\n style={[styles.plane, planeStyle, { transformOrigin: '0 0' }]}\n pointerEvents=\"box-none\"\n >\n {ordered.map((item) =>\n item.id === selectedId ? (\n <SelectedItem\n key={item.id}\n item={item}\n cameraScale={scale}\n onCommit={handleCommit}\n onTap={onItemPress}\n showToolbar={controls}\n onAction={onItemAction}\n onRemove={() => {\n commitItems(removeItem(items, item.id));\n setSelectedId(null);\n }}\n onChromeTouch={armChromeTouch}\n />\n ) : (\n <StaticItem key={item.id} item={item} onTap={handleSelect} />\n ),\n )}\n </Animated.View>\n </View>\n </GestureDetector>\n {items.length === 0 ? (\n <View style={styles.emptyHint} pointerEvents=\"none\">\n <Text style={styles.emptyHintTitle}>Your canvas is empty</Text>\n <Text style={styles.emptyHintDetail}>\n Tap Generate below for an image, video, audio, slides, clips or a promo.\n </Text>\n </View>\n ) : null}\n {controls && !onBoardsPress ? (\n <View style={styles.zoomHud} pointerEvents=\"box-none\">\n <GHPressable\n onPress={() => zoomBy(1 / 1.25)}\n hitSlop={8}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Zoom out\"\n style={styles.zoomBtn}\n >\n <Text style={styles.zoomBtnGlyph}>−</Text>\n </GHPressable>\n <GHPressable\n onPress={fitBoard}\n hitSlop={8}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Fit board\"\n >\n <Text style={styles.zoomPct}>{zoomPct}%</Text>\n </GHPressable>\n <GHPressable\n onPress={() => zoomBy(1.25)}\n hitSlop={8}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Zoom in\"\n style={styles.zoomBtn}\n >\n <Text style={styles.zoomBtnGlyph}>+</Text>\n </GHPressable>\n </View>\n ) : null}\n </View>\n <CanvasAgentChatPane\n visible={agentOpen}\n onClose={() => setAgentOpen(false)}\n runAction={runAction}\n boardItems={items}\n selectedItem={items.find((it) => it.id === selectedId) ?? null}\n onGenerated={(url, meta) => onAgentGenerated?.(url, meta)}\n onReplace={(itemId, url) => onAgentReplace?.(itemId, url)}\n onOpenItem={(itemId) => {\n setSelectedId(itemId);\n setAgentOpen(false);\n }}\n onUseTemplate={onUseTemplate}\n />\n </GestureHandlerRootView>\n );\n}\n\n/** Initial zoom for a board, exposed for the screen's zoom indicator. */\nexport function initialZoomFor(_board: PersistedCanvasState, _viewportWidth: number, _viewportHeight: number): number {\n return 1;\n}\n\nconst styles = StyleSheet.create({\n viewport: { flex: 1, overflow: 'hidden', backgroundColor: '#eef1f4' },\n canvasPlane: { flex: 1, overflow: 'hidden' },\n emptyHint: {\n ...StyleSheet.absoluteFillObject,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 32,\n paddingTop: 8,\n paddingBottom: 72,\n },\n emptyHintTitle: { fontSize: 14, fontWeight: '500', color: '#0f172a', marginBottom: 6 },\n emptyHintDetail: { fontSize: 12, color: '#64748b', textAlign: 'center', maxWidth: 280, lineHeight: 17 },\n boardHeader: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n paddingHorizontal: 8,\n paddingVertical: 6,\n backgroundColor: '#ffffff',\n borderBottomWidth: StyleSheet.hairlineWidth,\n borderBottomColor: '#e2e8f0',\n zIndex: 50,\n },\n boardsBtn: { flexDirection: 'row', alignItems: 'center', gap: 6, paddingHorizontal: 6, paddingVertical: 6 },\n boardsLabel: { fontSize: 12, fontWeight: '600', color: '#64748b' },\n headerRule: { width: StyleSheet.hairlineWidth, height: 16, backgroundColor: '#e2e8f0' },\n itemCount: { fontSize: 11, color: '#94a3b8', fontVariant: ['tabular-nums'] },\n headerZoom: { marginLeft: 'auto', flexDirection: 'row', alignItems: 'center', gap: 2, flexShrink: 0 },\n askAgentBtn: {\n alignItems: 'center',\n justifyContent: 'center',\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: '#e2e8f0',\n borderRadius: 8,\n width: 36,\n height: 32,\n flexShrink: 0,\n },\n askAgentLabel: { fontSize: 11, fontWeight: '600', color: '#64748b' },\n plane: { position: 'absolute', left: 0, top: 0, width: 1, height: 1, overflow: 'visible' },\n itemImage: { borderRadius: 8, backgroundColor: '#e2e8f0' },\n zoomHud: {\n position: 'absolute',\n top: 12,\n right: 12,\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n paddingHorizontal: 12,\n paddingVertical: 8,\n borderRadius: 14,\n backgroundColor: '#ffffff',\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: '#e2e8f0',\n shadowColor: '#0f172a',\n shadowOpacity: 0.08,\n shadowRadius: 8,\n shadowOffset: { width: 0, height: 2 },\n elevation: 3,\n },\n selectedOverflow: { overflow: 'visible' },\n videoDragBar: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n height: 22,\n borderTopLeftRadius: 8,\n borderTopRightRadius: 8,\n backgroundColor: 'rgba(15, 23, 42, 0.35)',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 3,\n zIndex: 20,\n },\n videoDragGrip: { width: 3, height: 10, borderRadius: 1.5, backgroundColor: 'rgba(255,255,255,0.75)' },\n dots: { ...StyleSheet.absoluteFillObject },\n dotRow: { flexDirection: 'row', height: 22 },\n dotCell: { width: 22, height: 22, alignItems: 'center', justifyContent: 'center' },\n dot: { width: 2, height: 2, borderRadius: 1, backgroundColor: 'rgba(15,23,42,0.14)' },\n hoverWrap: {\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: '100%',\n alignItems: 'center',\n marginBottom: 4,\n zIndex: 50,\n overflow: 'visible',\n },\n hoverCluster: { alignItems: 'center', zIndex: 50 },\n hoverBar: {\n flexDirection: 'row',\n alignItems: 'center',\n maxWidth: '100%',\n overflow: 'visible',\n paddingHorizontal: 10,\n paddingVertical: 8,\n borderRadius: 14,\n backgroundColor: '#ffffff',\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: 'rgba(15,23,42,0.08)',\n shadowColor: '#0f172a',\n shadowOpacity: 0.12,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 4 },\n elevation: 6,\n },\n hoverActions: {\n flexShrink: 1,\n flexDirection: 'row',\n justifyContent: 'flex-end',\n overflow: 'hidden',\n },\n hoverActionsInner: { flexDirection: 'row', alignItems: 'center', flexShrink: 0 },\n moreWrap: { position: 'relative', flexShrink: 0, zIndex: 80 },\n editPrompt: {\n marginTop: 8,\n width: 280,\n borderRadius: 16,\n backgroundColor: '#ffffff',\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: 'rgba(15,23,42,0.08)',\n paddingHorizontal: 14,\n paddingVertical: 12,\n shadowColor: '#0f172a',\n shadowOpacity: 0.1,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 8 },\n elevation: 6,\n },\n editPromptInput: { minHeight: 44, fontSize: 15, color: '#334155', padding: 0 },\n hoverBtn: { flexDirection: 'row', alignItems: 'center', gap: 8, paddingHorizontal: 12, paddingVertical: 9 },\n hoverIconBtn: { paddingHorizontal: 10, paddingVertical: 9 },\n hoverLabel: { fontSize: 15, fontWeight: '600', color: '#334155' },\n hoverDivider: {\n width: StyleSheet.hairlineWidth,\n alignSelf: 'stretch',\n backgroundColor: '#e2e8f0',\n marginVertical: 4,\n marginHorizontal: 2,\n },\n hoverSparkle: { position: 'absolute', top: -3, right: -6 },\n moreMenu: {\n position: 'absolute',\n top: '100%',\n right: 0,\n marginTop: 8,\n zIndex: 90,\n minWidth: 176,\n borderRadius: 10,\n backgroundColor: '#ffffff',\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: 'rgba(15,23,42,0.08)',\n paddingVertical: 4,\n shadowColor: '#0f172a',\n shadowOpacity: 0.12,\n shadowRadius: 12,\n shadowOffset: { width: 0, height: 4 },\n elevation: 6,\n },\n moreRow: { flexDirection: 'row', alignItems: 'center', gap: 8, paddingHorizontal: 12, paddingVertical: 10 },\n moreLabel: { fontSize: 14, color: '#334155' },\n zoomBtn: { paddingHorizontal: 8, paddingVertical: 2 },\n zoomBtnGlyph: { fontSize: 20, color: '#334155', fontWeight: '500' },\n zoomPct: { fontSize: 15, color: '#0f172a', fontVariant: ['tabular-nums'], minWidth: 52, textAlign: 'center' },\n selectionRing: { borderColor: SELECTION_COLOR },\n handleAnchor: {\n position: 'absolute',\n width: 1,\n height: 1,\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 1,\n },\n webHandle: {\n width: 12,\n height: 12,\n marginLeft: -6,\n marginTop: -6,\n borderRadius: 2,\n backgroundColor: '#3b82f6',\n borderWidth: 1,\n borderColor: '#ffffff',\n },\n mediaTile: {\n borderRadius: 8,\n backgroundColor: '#0f172a',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 8,\n },\n mediaTileGlyph: { color: '#f8fafc', fontSize: 28, marginBottom: 4 },\n mediaTileLabel: { color: '#cbd5e1', fontSize: 11, maxWidth: '90%' },\n empty: { flex: 1, alignItems: 'center', justifyContent: 'center', backgroundColor: '#f8fafc' },\n emptyText: { color: '#64748b', fontSize: 14 },\n});\n"],"names":["React","GHPressable","_a"],"mappings":"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"}
@@ -0,0 +1,150 @@
1
+ import {jsxs,jsx}from'react/jsx-runtime';import {useState}from'react';import {StyleSheet,View,Pressable,Text,TextInput}from'react-native';import {MaterialCommunityIcons}from'@expo/vector-icons';import {Image}from'expo-image';import {hasPromoContext,readBrandColors}from'./promoVideo.js';export{EMPTY_PROMO_CONTEXT}from'./promoVideo.js';function PromoContextFields({
2
+ value,
3
+ onChange,
4
+ logoUrl,
5
+ onPickLogo,
6
+ onClearLogo
7
+ }) {
8
+ const [open, setOpen] = useState(() => hasPromoContext(value, logoUrl));
9
+ const swatches = readBrandColors(value.brandColors);
10
+ return /* @__PURE__ */ jsxs(View, { style: styles.root, children: [
11
+ /* @__PURE__ */ jsxs(View, { style: styles.logoRow, children: [
12
+ logoUrl ? /* @__PURE__ */ jsxs(View, { style: styles.logoBox, children: [
13
+ /* @__PURE__ */ jsx(Image, { source: {
14
+ uri: logoUrl
15
+ }, style: styles.logoImg, contentFit: "contain" }),
16
+ onClearLogo ? /* @__PURE__ */ jsx(Pressable, { onPress: onClearLogo, style: styles.logoClear, hitSlop: 6, children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "close", size: 12, color: "#64748b" }) }) : null
17
+ ] }) : null,
18
+ onPickLogo ? /* @__PURE__ */ jsxs(Pressable, { onPress: onPickLogo, style: styles.logoBtn, children: [
19
+ /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "image-plus", size: 14, color: "#64748b" }),
20
+ /* @__PURE__ */ jsx(Text, { style: styles.logoBtnLabel, children: logoUrl ? "Replace logo" : "Add logo" })
21
+ ] }) : null
22
+ ] }),
23
+ /* @__PURE__ */ jsxs(Pressable, { onPress: () => setOpen((v) => !v), style: styles.fold, children: [
24
+ /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: open ? "chevron-down" : "chevron-right", size: 14, color: "#64748b" }),
25
+ /* @__PURE__ */ jsx(Text, { style: styles.foldLabel, children: "Brand context" }),
26
+ !open && hasPromoContext(value) ? /* @__PURE__ */ jsx(Text, { style: styles.foldHint, children: "\xB7 set" }) : null
27
+ ] }),
28
+ open ? /* @__PURE__ */ jsxs(View, { style: styles.fields, children: [
29
+ /* @__PURE__ */ jsx(TextInput, { value: value.onScreenText, onChangeText: (onScreenText) => onChange({
30
+ onScreenText
31
+ }), placeholder: "Words that must appear on screen \u2014 one per line", placeholderTextColor: "#94a3b8", multiline: true, style: [styles.input, styles.multiline] }),
32
+ /* @__PURE__ */ jsx(TextInput, { value: value.keyPoints, onChangeText: (keyPoints) => onChange({
33
+ keyPoints
34
+ }), placeholder: "What it has to say \u2014 one point per line", placeholderTextColor: "#94a3b8", multiline: true, style: [styles.input, styles.multiline] }),
35
+ /* @__PURE__ */ jsxs(View, { style: styles.row, children: [
36
+ /* @__PURE__ */ jsx(TextInput, { value: value.audience, onChangeText: (audience) => onChange({
37
+ audience
38
+ }), placeholder: "Who it's for", placeholderTextColor: "#94a3b8", style: [styles.input, styles.half] }),
39
+ /* @__PURE__ */ jsx(TextInput, { value: value.tone, onChangeText: (tone) => onChange({
40
+ tone
41
+ }), placeholder: "Tone", placeholderTextColor: "#94a3b8", style: [styles.input, styles.half] })
42
+ ] }),
43
+ /* @__PURE__ */ jsx(TextInput, { value: value.avoid, onChangeText: (avoid) => onChange({
44
+ avoid
45
+ }), placeholder: "Avoid \u2014 words, claims, visuals", placeholderTextColor: "#94a3b8", style: styles.input }),
46
+ /* @__PURE__ */ jsx(TextInput, { value: value.brandColors, onChangeText: (brandColors) => onChange({
47
+ brandColors
48
+ }), placeholder: "Brand colours \u2014 #0f172a, #f8fafc", placeholderTextColor: "#94a3b8", autoCapitalize: "none", style: styles.input }),
49
+ swatches.length > 0 ? /* @__PURE__ */ jsx(View, { style: styles.swatches, children: swatches.map((hex) => /* @__PURE__ */ jsx(View, { style: [styles.swatch, {
50
+ backgroundColor: hex
51
+ }] }, hex)) }) : null
52
+ ] }) : null
53
+ ] });
54
+ }
55
+ const styles = StyleSheet.create({
56
+ root: {
57
+ gap: 8
58
+ },
59
+ logoRow: {
60
+ flexDirection: "row",
61
+ alignItems: "center",
62
+ gap: 8
63
+ },
64
+ logoBox: {
65
+ width: 40,
66
+ height: 40,
67
+ borderRadius: 8,
68
+ borderWidth: StyleSheet.hairlineWidth,
69
+ borderColor: "#e2e8f0",
70
+ backgroundColor: "#fff",
71
+ overflow: "hidden"
72
+ },
73
+ logoImg: {
74
+ width: "100%",
75
+ height: "100%"
76
+ },
77
+ logoClear: {
78
+ position: "absolute",
79
+ top: 0,
80
+ right: 0,
81
+ backgroundColor: "rgba(255,255,255,0.9)",
82
+ padding: 2,
83
+ borderBottomLeftRadius: 6
84
+ },
85
+ logoBtn: {
86
+ flexDirection: "row",
87
+ alignItems: "center",
88
+ gap: 6,
89
+ paddingHorizontal: 10,
90
+ paddingVertical: 8,
91
+ borderRadius: 8,
92
+ borderWidth: 1,
93
+ borderStyle: "dashed",
94
+ borderColor: "#cbd5e1"
95
+ },
96
+ logoBtnLabel: {
97
+ fontSize: 12,
98
+ color: "#64748b"
99
+ },
100
+ fold: {
101
+ flexDirection: "row",
102
+ alignItems: "center",
103
+ gap: 4,
104
+ alignSelf: "flex-start"
105
+ },
106
+ foldLabel: {
107
+ fontSize: 11,
108
+ color: "#64748b",
109
+ fontWeight: "600"
110
+ },
111
+ foldHint: {
112
+ fontSize: 11,
113
+ color: "#94a3b8"
114
+ },
115
+ fields: {
116
+ gap: 8
117
+ },
118
+ input: {
119
+ borderWidth: StyleSheet.hairlineWidth,
120
+ borderColor: "#e2e8f0",
121
+ borderRadius: 10,
122
+ paddingHorizontal: 12,
123
+ paddingVertical: 10,
124
+ fontSize: 13,
125
+ color: "#0f172a",
126
+ backgroundColor: "#fff"
127
+ },
128
+ multiline: {
129
+ minHeight: 64,
130
+ textAlignVertical: "top"
131
+ },
132
+ row: {
133
+ flexDirection: "row",
134
+ gap: 8
135
+ },
136
+ half: {
137
+ flex: 1
138
+ },
139
+ swatches: {
140
+ flexDirection: "row",
141
+ gap: 6
142
+ },
143
+ swatch: {
144
+ width: 18,
145
+ height: 18,
146
+ borderRadius: 4,
147
+ borderWidth: StyleSheet.hairlineWidth,
148
+ borderColor: "#e2e8f0"
149
+ }
150
+ });export{PromoContextFields};//# sourceMappingURL=PromoContextFields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromoContextFields.js","sources":["../../../src/features/canvas/PromoContextFields.tsx"],"sourcesContent":["/**\n * Native twin of canvas-surface PromoContextFields — brand mark + on-screen\n * wording + audience/tone, folded away until the user has a brand to pin.\n */\nimport React, { useState } from 'react';\nimport { Pressable, StyleSheet, Text, TextInput, View } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { Image } from 'expo-image';\nimport { EMPTY_PROMO_CONTEXT, hasPromoContext, readBrandColors, type PromoContext } from './promoVideo';\n\nexport function PromoContextFields({\n value,\n onChange,\n logoUrl,\n onPickLogo,\n onClearLogo,\n}: {\n value: PromoContext;\n onChange: (patch: Partial<PromoContext>) => void;\n logoUrl: string | null;\n onPickLogo?: () => void;\n onClearLogo?: () => void;\n}) {\n const [open, setOpen] = useState(() => hasPromoContext(value, logoUrl));\n const swatches = readBrandColors(value.brandColors);\n\n return (\n <View style={styles.root}>\n <View style={styles.logoRow}>\n {logoUrl ? (\n <View style={styles.logoBox}>\n <Image source={{ uri: logoUrl }} style={styles.logoImg} contentFit=\"contain\" />\n {onClearLogo ? (\n <Pressable onPress={onClearLogo} style={styles.logoClear} hitSlop={6}>\n <MaterialCommunityIcons name=\"close\" size={12} color=\"#64748b\" />\n </Pressable>\n ) : null}\n </View>\n ) : null}\n {onPickLogo ? (\n <Pressable onPress={onPickLogo} style={styles.logoBtn}>\n <MaterialCommunityIcons name=\"image-plus\" size={14} color=\"#64748b\" />\n <Text style={styles.logoBtnLabel}>{logoUrl ? 'Replace logo' : 'Add logo'}</Text>\n </Pressable>\n ) : null}\n </View>\n\n <Pressable onPress={() => setOpen((v) => !v)} style={styles.fold}>\n <MaterialCommunityIcons name={open ? 'chevron-down' : 'chevron-right'} size={14} color=\"#64748b\" />\n <Text style={styles.foldLabel}>Brand context</Text>\n {!open && hasPromoContext(value) ? <Text style={styles.foldHint}>· set</Text> : null}\n </Pressable>\n\n {open ? (\n <View style={styles.fields}>\n <TextInput\n value={value.onScreenText}\n onChangeText={(onScreenText) => onChange({ onScreenText })}\n placeholder=\"Words that must appear on screen — one per line\"\n placeholderTextColor=\"#94a3b8\"\n multiline\n style={[styles.input, styles.multiline]}\n />\n <TextInput\n value={value.keyPoints}\n onChangeText={(keyPoints) => onChange({ keyPoints })}\n placeholder=\"What it has to say — one point per line\"\n placeholderTextColor=\"#94a3b8\"\n multiline\n style={[styles.input, styles.multiline]}\n />\n <View style={styles.row}>\n <TextInput\n value={value.audience}\n onChangeText={(audience) => onChange({ audience })}\n placeholder=\"Who it's for\"\n placeholderTextColor=\"#94a3b8\"\n style={[styles.input, styles.half]}\n />\n <TextInput\n value={value.tone}\n onChangeText={(tone) => onChange({ tone })}\n placeholder=\"Tone\"\n placeholderTextColor=\"#94a3b8\"\n style={[styles.input, styles.half]}\n />\n </View>\n <TextInput\n value={value.avoid}\n onChangeText={(avoid) => onChange({ avoid })}\n placeholder=\"Avoid — words, claims, visuals\"\n placeholderTextColor=\"#94a3b8\"\n style={styles.input}\n />\n <TextInput\n value={value.brandColors}\n onChangeText={(brandColors) => onChange({ brandColors })}\n placeholder=\"Brand colours — #0f172a, #f8fafc\"\n placeholderTextColor=\"#94a3b8\"\n autoCapitalize=\"none\"\n style={styles.input}\n />\n {swatches.length > 0 ? (\n <View style={styles.swatches}>\n {swatches.map((hex) => (\n <View key={hex} style={[styles.swatch, { backgroundColor: hex }]} />\n ))}\n </View>\n ) : null}\n </View>\n ) : null}\n </View>\n );\n}\n\nexport { EMPTY_PROMO_CONTEXT };\n\nconst styles = StyleSheet.create({\n root: { gap: 8 },\n logoRow: { flexDirection: 'row', alignItems: 'center', gap: 8 },\n logoBox: {\n width: 40,\n height: 40,\n borderRadius: 8,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: '#e2e8f0',\n backgroundColor: '#fff',\n overflow: 'hidden',\n },\n logoImg: { width: '100%', height: '100%' },\n logoClear: {\n position: 'absolute',\n top: 0,\n right: 0,\n backgroundColor: 'rgba(255,255,255,0.9)',\n padding: 2,\n borderBottomLeftRadius: 6,\n },\n logoBtn: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n paddingHorizontal: 10,\n paddingVertical: 8,\n borderRadius: 8,\n borderWidth: 1,\n borderStyle: 'dashed',\n borderColor: '#cbd5e1',\n },\n logoBtnLabel: { fontSize: 12, color: '#64748b' },\n fold: { flexDirection: 'row', alignItems: 'center', gap: 4, alignSelf: 'flex-start' },\n foldLabel: { fontSize: 11, color: '#64748b', fontWeight: '600' },\n foldHint: { fontSize: 11, color: '#94a3b8' },\n fields: { gap: 8 },\n input: {\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: '#e2e8f0',\n borderRadius: 10,\n paddingHorizontal: 12,\n paddingVertical: 10,\n fontSize: 13,\n color: '#0f172a',\n backgroundColor: '#fff',\n },\n multiline: { minHeight: 64, textAlignVertical: 'top' },\n row: { flexDirection: 'row', gap: 8 },\n half: { flex: 1 },\n swatches: { flexDirection: 'row', gap: 6 },\n swatch: { width: 18, height: 18, borderRadius: 4, borderWidth: StyleSheet.hairlineWidth, borderColor: '#e2e8f0' },\n});\n"],"names":[],"mappings":"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"}