@adminide-stack/yantra-mobile 12.0.129-alpha.0 → 12.0.129-alpha.1

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 (360) hide show
  1. package/lib/compute.js +57 -1
  2. package/lib/compute.js.map +1 -1
  3. package/lib/features/agent-chat/NativeAgentChat.js +3 -2
  4. package/lib/features/agent-chat/NativeAgentChat.js.map +1 -1
  5. package/lib/features/apps/AppsCatalog.js +10 -0
  6. package/lib/features/apps/AppsCatalog.js.map +1 -1
  7. package/lib/features/apps/mobileAppCatalog.js +11 -0
  8. package/lib/features/apps/mobileAppCatalog.js.map +1 -1
  9. package/lib/features/canvas/AudioEditorExperience.js +448 -105
  10. package/lib/features/canvas/AudioEditorExperience.js.map +1 -1
  11. package/lib/features/canvas/CanvasAgentChatPane.js +33 -14
  12. package/lib/features/canvas/CanvasAgentChatPane.js.map +1 -1
  13. package/lib/features/canvas/CanvasBoardsGrid.js +493 -41
  14. package/lib/features/canvas/CanvasBoardsGrid.js.map +1 -1
  15. package/lib/features/canvas/CanvasChatResultCard.js.map +1 -1
  16. package/lib/features/canvas/CanvasEditToolsPanel.js +37 -1
  17. package/lib/features/canvas/CanvasEditToolsPanel.js.map +1 -1
  18. package/lib/features/canvas/CanvasExperience.js +237 -22
  19. package/lib/features/canvas/CanvasExperience.js.map +1 -1
  20. package/lib/features/canvas/CanvasGeneratePanel.js +119 -26
  21. package/lib/features/canvas/CanvasGeneratePanel.js.map +1 -1
  22. package/lib/features/canvas/CanvasLooksPanel.js +17 -6
  23. package/lib/features/canvas/CanvasLooksPanel.js.map +1 -1
  24. package/lib/features/canvas/CanvasTasksPanel.js +18 -1
  25. package/lib/features/canvas/CanvasTasksPanel.js.map +1 -1
  26. package/lib/features/canvas/DesignCategoryGallery.js +423 -0
  27. package/lib/features/canvas/DesignCategoryGallery.js.map +1 -0
  28. package/lib/features/canvas/ImageEditorExperience.js +763 -187
  29. package/lib/features/canvas/ImageEditorExperience.js.map +1 -1
  30. package/lib/features/canvas/SetStudioExperience.js +199 -11
  31. package/lib/features/canvas/SetStudioExperience.js.map +1 -1
  32. package/lib/features/canvas/VideoEditorExperience.js +59 -40
  33. package/lib/features/canvas/VideoEditorExperience.js.map +1 -1
  34. package/lib/features/canvas/VideoGeneratorExperience.js +134 -34
  35. package/lib/features/canvas/VideoGeneratorExperience.js.map +1 -1
  36. package/lib/features/canvas/aiEdit.js +4 -2
  37. package/lib/features/canvas/aiEdit.js.map +1 -1
  38. package/lib/features/canvas/audioEditor/AudioWaveform.js +96 -0
  39. package/lib/features/canvas/audioEditor/AudioWaveform.js.map +1 -0
  40. package/lib/features/canvas/audioEditor/audioPeaks.js +93 -0
  41. package/lib/features/canvas/audioEditor/audioPeaks.js.map +1 -0
  42. package/lib/features/canvas/canvasTaskSync.js +34 -7
  43. package/lib/features/canvas/canvasTaskSync.js.map +1 -1
  44. package/lib/features/canvas/canvasTasks.js +23 -3
  45. package/lib/features/canvas/canvasTasks.js.map +1 -1
  46. package/lib/features/canvas/canvasTheme.js +10 -24
  47. package/lib/features/canvas/canvasTheme.js.map +1 -1
  48. package/lib/features/canvas/canvasUi.js +1 -1
  49. package/lib/features/canvas/canvasUi.js.map +1 -1
  50. package/lib/features/canvas/createTiles.js +17 -9
  51. package/lib/features/canvas/createTiles.js.map +1 -1
  52. package/lib/features/canvas/deepLinks.js +35 -5
  53. package/lib/features/canvas/deepLinks.js.map +1 -1
  54. package/lib/features/canvas/designCatalog.js +165 -0
  55. package/lib/features/canvas/designCatalog.js.map +1 -0
  56. package/lib/features/canvas/designCategories.js +262 -0
  57. package/lib/features/canvas/designCategories.js.map +1 -0
  58. package/lib/features/canvas/editorControls.js +406 -0
  59. package/lib/features/canvas/editorControls.js.map +1 -0
  60. package/lib/features/canvas/generationModels.js +5 -3
  61. package/lib/features/canvas/generationModels.js.map +1 -1
  62. package/lib/features/canvas/generationTasks.js +162 -0
  63. package/lib/features/canvas/generationTasks.js.map +1 -0
  64. package/lib/features/canvas/generator/BottomSheet.js +167 -0
  65. package/lib/features/canvas/generator/BottomSheet.js.map +1 -0
  66. package/lib/features/canvas/generator/BusinessCardChatCard.js +155 -0
  67. package/lib/features/canvas/generator/BusinessCardChatCard.js.map +1 -0
  68. package/lib/features/canvas/generator/DirectorSheet.js +163 -0
  69. package/lib/features/canvas/generator/DirectorSheet.js.map +1 -0
  70. package/lib/features/canvas/generator/ReframePreview.js +122 -0
  71. package/lib/features/canvas/generator/ReframePreview.js.map +1 -0
  72. package/lib/features/canvas/generator/RunLogCard.js +119 -0
  73. package/lib/features/canvas/generator/RunLogCard.js.map +1 -0
  74. package/lib/features/canvas/generator/ShotPanel.js +261 -0
  75. package/lib/features/canvas/generator/ShotPanel.js.map +1 -0
  76. package/lib/features/canvas/generator/businessCardWidget.js +117 -0
  77. package/lib/features/canvas/generator/businessCardWidget.js.map +1 -0
  78. package/lib/features/canvas/generator/cameraVocabulary.js +142 -0
  79. package/lib/features/canvas/generator/cameraVocabulary.js.map +1 -0
  80. package/lib/features/canvas/generator/cinematicVocabulary.js +416 -0
  81. package/lib/features/canvas/generator/cinematicVocabulary.js.map +1 -0
  82. package/lib/features/canvas/generator/direction.js +41 -0
  83. package/lib/features/canvas/generator/direction.js.map +1 -0
  84. package/lib/features/canvas/generator/reframeGeometry.js +108 -0
  85. package/lib/features/canvas/generator/reframeGeometry.js.map +1 -0
  86. package/lib/features/canvas/generator/runLog.js +71 -0
  87. package/lib/features/canvas/generator/runLog.js.map +1 -0
  88. package/lib/features/canvas/generator/shot.js +133 -0
  89. package/lib/features/canvas/generator/shot.js.map +1 -0
  90. package/lib/features/canvas/generator/useShotSpec.js +87 -0
  91. package/lib/features/canvas/generator/useShotSpec.js.map +1 -0
  92. package/lib/features/canvas/home/HeroComposer.js +214 -0
  93. package/lib/features/canvas/home/HeroComposer.js.map +1 -0
  94. package/lib/features/canvas/home/HeroMonitor.js +225 -0
  95. package/lib/features/canvas/home/HeroMonitor.js.map +1 -0
  96. package/lib/features/canvas/home/LookDetail.js +185 -0
  97. package/lib/features/canvas/home/LookDetail.js.map +1 -0
  98. package/lib/features/canvas/home/LoopingVideo.js +37 -0
  99. package/lib/features/canvas/home/LoopingVideo.js.map +1 -0
  100. package/lib/features/canvas/home/TemplatesGallery.js +253 -0
  101. package/lib/features/canvas/home/TemplatesGallery.js.map +1 -0
  102. package/lib/features/canvas/home/heroShots.js +100 -0
  103. package/lib/features/canvas/home/heroShots.js.map +1 -0
  104. package/lib/features/canvas/homeWork.js +62 -3
  105. package/lib/features/canvas/homeWork.js.map +1 -1
  106. package/lib/features/canvas/imageEditor/ImageMarkup.js +195 -0
  107. package/lib/features/canvas/imageEditor/ImageMarkup.js.map +1 -0
  108. package/lib/features/canvas/imageEditor/imageEditOps.js +367 -0
  109. package/lib/features/canvas/imageEditor/imageEditOps.js.map +1 -0
  110. package/lib/features/canvas/nativeViewerRegistry.js.map +1 -1
  111. package/lib/features/canvas/rankedCatalogSearch.js +375 -0
  112. package/lib/features/canvas/rankedCatalogSearch.js.map +1 -0
  113. package/lib/features/canvas/recorder/CameraRecorderExperience.js +68 -20
  114. package/lib/features/canvas/recorder/CameraRecorderExperience.js.map +1 -1
  115. package/lib/features/canvas/recorder/RecordingReview.js +272 -0
  116. package/lib/features/canvas/recorder/RecordingReview.js.map +1 -0
  117. package/lib/features/canvas/recorder/RecordingsList.js +179 -0
  118. package/lib/features/canvas/recorder/RecordingsList.js.map +1 -0
  119. package/lib/features/canvas/recorder/recorderOps.js +99 -0
  120. package/lib/features/canvas/recorder/recorderOps.js.map +1 -0
  121. package/lib/features/canvas/seedanceShowcase.js +314 -0
  122. package/lib/features/canvas/seedanceShowcase.js.map +1 -0
  123. package/lib/features/canvas/serverTasks.js +149 -15
  124. package/lib/features/canvas/serverTasks.js.map +1 -1
  125. package/lib/features/canvas/sessionRenewal.js +114 -0
  126. package/lib/features/canvas/sessionRenewal.js.map +1 -0
  127. package/lib/features/canvas/set/SetViewportWebView.js +34 -1
  128. package/lib/features/canvas/set/SetViewportWebView.js.map +1 -1
  129. package/lib/features/canvas/set/agent/setTurn.js +4 -2
  130. package/lib/features/canvas/set/agent/setTurn.js.map +1 -1
  131. package/lib/features/canvas/set/setPresets.js +85 -0
  132. package/lib/features/canvas/set/setPresets.js.map +1 -0
  133. package/lib/features/canvas/set/setProject.js +4 -1
  134. package/lib/features/canvas/set/setProject.js.map +1 -1
  135. package/lib/features/canvas/studioCatalog.js +59 -4
  136. package/lib/features/canvas/studioCatalog.js.map +1 -1
  137. package/lib/features/canvas/studioLooks.js +31 -4
  138. package/lib/features/canvas/studioLooks.js.map +1 -1
  139. package/lib/features/canvas/surfaceIndex.js +1 -14
  140. package/lib/features/canvas/surfaceIndex.js.map +1 -1
  141. package/lib/features/canvas/templateSearch.js +489 -0
  142. package/lib/features/canvas/templateSearch.js.map +1 -0
  143. package/lib/features/canvas/useCanvasSession.js +28 -6
  144. package/lib/features/canvas/useCanvasSession.js.map +1 -1
  145. package/lib/features/canvas/useStudioCatalogTemplates.js +41 -5
  146. package/lib/features/canvas/useStudioCatalogTemplates.js.map +1 -1
  147. package/lib/features/canvas/videoEditor/EditorPanels.js +531 -0
  148. package/lib/features/canvas/videoEditor/EditorPanels.js.map +1 -0
  149. package/lib/features/canvas/videoEditor/agent/AgentCutPane.js +48 -4
  150. package/lib/features/canvas/videoEditor/agent/AgentCutPane.js.map +1 -1
  151. package/lib/features/canvas/videoEditor/agent/agentLoop.js +2 -0
  152. package/lib/features/canvas/videoEditor/agent/agentLoop.js.map +1 -1
  153. package/lib/features/canvas/videoEditor/agent/brainClient.js +97 -27
  154. package/lib/features/canvas/videoEditor/agent/brainClient.js.map +1 -1
  155. package/lib/features/canvas/videoEditor/agent/cutTools.js +707 -3
  156. package/lib/features/canvas/videoEditor/agent/cutTools.js.map +1 -1
  157. package/lib/features/canvas/videoEditor/audioServices.js +165 -0
  158. package/lib/features/canvas/videoEditor/audioServices.js.map +1 -0
  159. package/lib/features/canvas/videoEditor/captions.js +144 -0
  160. package/lib/features/canvas/videoEditor/captions.js.map +1 -0
  161. package/lib/features/canvas/videoEditor/compileTimeline.js +24 -16
  162. package/lib/features/canvas/videoEditor/compileTimeline.js.map +1 -1
  163. package/lib/features/canvas/videoEditor/editorModel.js +12 -2
  164. package/lib/features/canvas/videoEditor/editorModel.js.map +1 -1
  165. package/lib/features/canvas/videoEditor/exportTask.js +89 -7
  166. package/lib/features/canvas/videoEditor/exportTask.js.map +1 -1
  167. package/lib/features/canvas/videoEditor/layers.js +117 -0
  168. package/lib/features/canvas/videoEditor/layers.js.map +1 -0
  169. package/lib/features/canvas/videoEditor/remoteMediaClient.js +45 -18
  170. package/lib/features/canvas/videoEditor/remoteMediaClient.js.map +1 -1
  171. package/lib/features/canvas/videoEditor/renderTimeline.js +18 -6
  172. package/lib/features/canvas/videoEditor/renderTimeline.js.map +1 -1
  173. package/lib/features/canvas/videoEditor/revoice.js +138 -0
  174. package/lib/features/canvas/videoEditor/revoice.js.map +1 -0
  175. package/lib/features/canvas/videoEditor/storageUpload.js +34 -0
  176. package/lib/features/canvas/videoEditor/storageUpload.js.map +1 -0
  177. package/lib/features/canvas/videoEditor/textMotion.js +109 -0
  178. package/lib/features/canvas/videoEditor/textMotion.js.map +1 -0
  179. package/lib/features/canvas/videoEditor/transitions.js +31 -0
  180. package/lib/features/canvas/videoEditor/transitions.js.map +1 -0
  181. package/lib/features/chat/TemplatesChatCards.js +8 -3
  182. package/lib/features/chat/TemplatesChatCards.js.map +1 -1
  183. package/lib/features/design/DesignEditorExperience.js +674 -644
  184. package/lib/features/design/DesignEditorExperience.js.map +1 -1
  185. package/lib/features/design/DesignExperience.js +285 -538
  186. package/lib/features/design/DesignExperience.js.map +1 -1
  187. package/lib/features/design/designCore.js +2 -212
  188. package/lib/features/design/designCore.js.map +1 -1
  189. package/lib/features/design/designIndex.js +1 -50
  190. package/lib/features/design/designIndex.js.map +1 -1
  191. package/lib/features/design/doc/aiDesign.js +247 -0
  192. package/lib/features/design/doc/aiDesign.js.map +1 -0
  193. package/lib/features/design/doc/artifacts.js +280 -0
  194. package/lib/features/design/doc/artifacts.js.map +1 -0
  195. package/lib/features/design/doc/chart.js +98 -0
  196. package/lib/features/design/doc/chart.js.map +1 -0
  197. package/lib/features/design/doc/crop.js +104 -0
  198. package/lib/features/design/doc/crop.js.map +1 -0
  199. package/lib/features/design/doc/curve.js +49 -0
  200. package/lib/features/design/doc/curve.js.map +1 -0
  201. package/lib/features/design/doc/docOps.js +397 -0
  202. package/lib/features/design/doc/docOps.js.map +1 -0
  203. package/lib/features/design/doc/findReplace.js +112 -0
  204. package/lib/features/design/doc/findReplace.js.map +1 -0
  205. package/lib/features/design/doc/fonts.js +79 -0
  206. package/lib/features/design/doc/fonts.js.map +1 -0
  207. package/lib/features/design/doc/frames.js +17 -0
  208. package/lib/features/design/doc/frames.js.map +1 -0
  209. package/lib/features/design/doc/geometry.js +133 -0
  210. package/lib/features/design/doc/geometry.js.map +1 -0
  211. package/lib/features/design/doc/imageAdjust.js +203 -0
  212. package/lib/features/design/doc/imageAdjust.js.map +1 -0
  213. package/lib/features/design/doc/legacyDoc.js +107 -0
  214. package/lib/features/design/doc/legacyDoc.js.map +1 -0
  215. package/lib/features/design/doc/newDoc.js +335 -0
  216. package/lib/features/design/doc/newDoc.js.map +1 -0
  217. package/lib/features/design/doc/pageRange.js +17 -0
  218. package/lib/features/design/doc/pageRange.js.map +1 -0
  219. package/lib/features/design/doc/pathScale.js +68 -0
  220. package/lib/features/design/doc/pathScale.js.map +1 -0
  221. package/lib/features/design/doc/qr.js +62 -0
  222. package/lib/features/design/doc/qr.js.map +1 -0
  223. package/lib/features/design/doc/shapes.js +366 -0
  224. package/lib/features/design/doc/shapes.js.map +1 -0
  225. package/lib/features/design/doc/sizes.js +230 -0
  226. package/lib/features/design/doc/sizes.js.map +1 -0
  227. package/lib/features/design/doc/textEffects.js +134 -0
  228. package/lib/features/design/doc/textEffects.js.map +1 -0
  229. package/lib/features/design/doc/textLayout.js +182 -0
  230. package/lib/features/design/doc/textLayout.js.map +1 -0
  231. package/lib/features/design/doc/types.js +30 -0
  232. package/lib/features/design/doc/types.js.map +1 -0
  233. package/lib/features/design/editor/AiPanel.js +194 -0
  234. package/lib/features/design/editor/AiPanel.js.map +1 -0
  235. package/lib/features/design/editor/ChartDataPanel.js +182 -0
  236. package/lib/features/design/editor/ChartDataPanel.js.map +1 -0
  237. package/lib/features/design/editor/CropOverlay.js +199 -0
  238. package/lib/features/design/editor/CropOverlay.js.map +1 -0
  239. package/lib/features/design/editor/DesignCanvas.js +363 -0
  240. package/lib/features/design/editor/DesignCanvas.js.map +1 -0
  241. package/lib/features/design/editor/ExportSheet.js +123 -0
  242. package/lib/features/design/editor/ExportSheet.js.map +1 -0
  243. package/lib/features/design/editor/FindReplacePanel.js +93 -0
  244. package/lib/features/design/editor/FindReplacePanel.js.map +1 -0
  245. package/lib/features/design/editor/ImageTools.js +188 -0
  246. package/lib/features/design/editor/ImageTools.js.map +1 -0
  247. package/lib/features/design/editor/LayerTools.js +485 -0
  248. package/lib/features/design/editor/LayerTools.js.map +1 -0
  249. package/lib/features/design/editor/PageStrip.js +203 -0
  250. package/lib/features/design/editor/PageStrip.js.map +1 -0
  251. package/lib/features/design/editor/Slideshow.js +97 -0
  252. package/lib/features/design/editor/Slideshow.js.map +1 -0
  253. package/lib/features/design/editor/ToolPanels.js +695 -0
  254. package/lib/features/design/editor/ToolPanels.js.map +1 -0
  255. package/lib/features/design/editor/controls.js +630 -0
  256. package/lib/features/design/editor/controls.js.map +1 -0
  257. package/lib/features/design/editor/useDesignSave.js +91 -0
  258. package/lib/features/design/editor/useDesignSave.js.map +1 -0
  259. package/lib/features/design/export/exportDesign.js +170 -0
  260. package/lib/features/design/export/exportDesign.js.map +1 -0
  261. package/lib/features/design/export/pdf.js +143 -0
  262. package/lib/features/design/export/pdf.js.map +1 -0
  263. package/lib/features/design/home/DesignHome.js +688 -0
  264. package/lib/features/design/home/DesignHome.js.map +1 -0
  265. package/lib/features/design/home/studioHome.js +61 -0
  266. package/lib/features/design/home/studioHome.js.map +1 -0
  267. package/lib/features/design/pickDesignImage.js +60 -0
  268. package/lib/features/design/pickDesignImage.js.map +1 -0
  269. package/lib/features/design/render/DesignPageView.js +69 -0
  270. package/lib/features/design/render/DesignPageView.js.map +1 -0
  271. package/lib/features/design/render/PageCapture.js +288 -0
  272. package/lib/features/design/render/PageCapture.js.map +1 -0
  273. package/lib/features/design/render/TextMeasure.js +115 -0
  274. package/lib/features/design/render/TextMeasure.js.map +1 -0
  275. package/lib/features/design/render/fontRegistry.js +110 -0
  276. package/lib/features/design/render/fontRegistry.js.map +1 -0
  277. package/lib/features/design/render/layers.js +392 -0
  278. package/lib/features/design/render/layers.js.map +1 -0
  279. package/lib/features/design/render/svg.js +35 -0
  280. package/lib/features/design/render/svg.js.map +1 -0
  281. package/lib/features/design/render/svgParts.js +435 -0
  282. package/lib/features/design/render/svgParts.js.map +1 -0
  283. package/lib/features/design/surface/BoardScreen.js +529 -0
  284. package/lib/features/design/surface/BoardScreen.js.map +1 -0
  285. package/lib/features/design/surface/CompareView.js +138 -0
  286. package/lib/features/design/surface/CompareView.js.map +1 -0
  287. package/lib/features/design/surface/CreationScreen.js +294 -0
  288. package/lib/features/design/surface/CreationScreen.js.map +1 -0
  289. package/lib/features/design/surface/DesignAgentChatPane.js +444 -0
  290. package/lib/features/design/surface/DesignAgentChatPane.js.map +1 -0
  291. package/lib/features/design/surface/DesignBoards.js +441 -0
  292. package/lib/features/design/surface/DesignBoards.js.map +1 -0
  293. package/lib/features/design/surface/DesignPreview.js +159 -0
  294. package/lib/features/design/surface/DesignPreview.js.map +1 -0
  295. package/lib/features/design/surface/DesignSurfaceExperience.js +80 -0
  296. package/lib/features/design/surface/DesignSurfaceExperience.js.map +1 -0
  297. package/lib/features/design/surface/FullScreenPreview.js +59 -0
  298. package/lib/features/design/surface/FullScreenPreview.js.map +1 -0
  299. package/lib/features/design/surface/NewSystemDialog.js +122 -0
  300. package/lib/features/design/surface/NewSystemDialog.js.map +1 -0
  301. package/lib/features/design/surface/PickerSheet.js +175 -0
  302. package/lib/features/design/surface/PickerSheet.js.map +1 -0
  303. package/lib/features/design/surface/TemplatesGallery.js +156 -0
  304. package/lib/features/design/surface/TemplatesGallery.js.map +1 -0
  305. package/lib/features/design/surface/WetPaint.js +140 -0
  306. package/lib/features/design/surface/WetPaint.js.map +1 -0
  307. package/lib/features/design/surface/agentTurn.js +229 -0
  308. package/lib/features/design/surface/agentTurn.js.map +1 -0
  309. package/lib/features/design/surface/designBoard.js +218 -0
  310. package/lib/features/design/surface/designBoard.js.map +1 -0
  311. package/lib/features/design/surface/designChannel.js +186 -0
  312. package/lib/features/design/surface/designChannel.js.map +1 -0
  313. package/lib/features/design/surface/designChat.js +141 -0
  314. package/lib/features/design/surface/designChat.js.map +1 -0
  315. package/lib/features/design/surface/designConnector.js +266 -0
  316. package/lib/features/design/surface/designConnector.js.map +1 -0
  317. package/lib/features/design/surface/designDocument.js +40 -0
  318. package/lib/features/design/surface/designDocument.js.map +1 -0
  319. package/lib/features/design/surface/designExport.js +55 -0
  320. package/lib/features/design/surface/designExport.js.map +1 -0
  321. package/lib/features/design/surface/designLinks.js +64 -0
  322. package/lib/features/design/surface/designLinks.js.map +1 -0
  323. package/lib/features/design/surface/designPalette.js +24 -0
  324. package/lib/features/design/surface/designPalette.js.map +1 -0
  325. package/lib/features/design/surface/designRun.js +161 -0
  326. package/lib/features/design/surface/designRun.js.map +1 -0
  327. package/lib/features/design/surface/designTheme.js +119 -0
  328. package/lib/features/design/surface/designTheme.js.map +1 -0
  329. package/lib/features/design/surface/execStream.js +206 -0
  330. package/lib/features/design/surface/execStream.js.map +1 -0
  331. package/lib/features/design/surface/metaball.js +48 -0
  332. package/lib/features/design/surface/metaball.js.map +1 -0
  333. package/lib/features/design/surface/pickReferenceFiles.js +35 -0
  334. package/lib/features/design/surface/pickReferenceFiles.js.map +1 -0
  335. package/lib/features/design/surface/useDesignSurface.js +379 -0
  336. package/lib/features/design/surface/useDesignSurface.js.map +1 -0
  337. package/lib/features/docs/DocBlockRow.js +336 -0
  338. package/lib/features/docs/DocBlockRow.js.map +1 -0
  339. package/lib/features/docs/DocsEditorExperience.js +949 -0
  340. package/lib/features/docs/DocsEditorExperience.js.map +1 -0
  341. package/lib/features/docs/DocsToolbar.js +247 -0
  342. package/lib/features/docs/DocsToolbar.js.map +1 -0
  343. package/lib/features/docs/blocks.js +560 -0
  344. package/lib/features/docs/blocks.js.map +1 -0
  345. package/lib/features/docs/docArtifacts.js +129 -0
  346. package/lib/features/docs/docArtifacts.js.map +1 -0
  347. package/lib/features/docs/docEdits.js +201 -0
  348. package/lib/features/docs/docEdits.js.map +1 -0
  349. package/lib/features/docs/docExport.js +235 -0
  350. package/lib/features/docs/docExport.js.map +1 -0
  351. package/lib/features/docs/docShare.js +62 -0
  352. package/lib/features/docs/docShare.js.map +1 -0
  353. package/lib/features/links/openInApp.js +38 -2
  354. package/lib/features/links/openInApp.js.map +1 -1
  355. package/lib/routes.json +54 -0
  356. package/lib/screens/DesignNative/index.js +35 -0
  357. package/lib/screens/DesignNative/index.js.map +1 -0
  358. package/package.json +3 -3
  359. package/lib/features/design/exportDesign.js +0 -133
  360. package/lib/features/design/exportDesign.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"designIndex.js","sources":["../../../src/features/design/designIndex.ts"],"sourcesContent":["/**\n * Surface-index reader/writer for design documents.\n *\n * Same store and wire shape as the canvas boards (`surfaceIndex.ts`), under\n * the index's `design` surface namespace - `SurfaceType` already enumerates\n * it, so designs and canvases stay separate per-user collections with no\n * backend change. The whole `PersistedDesignDoc` rides the row's `metadata`\n * and is REPLACED wholesale on every write; never send a patch.\n */\nimport { parseDesignDoc, type PersistedDesignDoc } from './designCore';\n\nconst CHANNEL_FIELDS = 'id surface channelId title metadata updatedAt';\n\nexport interface DesignDocSummary {\n channelId: string;\n title?: string;\n savedAt: number;\n doc: PersistedDesignDoc;\n}\n\nexport interface FetchDesignsResult {\n designs: DesignDocSummary[];\n /** Plain sentence for the UI; null when the read succeeded. */\n error: string | null;\n}\n\n/** The caller's designs, newest first. Unparseable rows drop silently. */\nexport async function fetchMyDesigns(opts: {\n url: string;\n token?: string | null;\n signal?: AbortSignal;\n}): Promise<FetchDesignsResult> {\n if (!opts.url) return { designs: [], error: 'No design index configured for this build.' };\n\n let payload: {\n data?: { mySurfaceChannels?: Array<Record<string, unknown>> | null } | null;\n errors?: Array<{ message?: string }>;\n };\n try {\n const response = await fetch(opts.url, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n ...(opts.token ? { authorization: `Bearer ${opts.token}` } : {}),\n },\n body: JSON.stringify({\n query: `query MySurfaceChannels($surface: SurfaceType) {\n mySurfaceChannels(surface: $surface) { ${CHANNEL_FIELDS} }\n }`,\n variables: { surface: 'design' },\n }),\n signal: opts.signal,\n });\n if (response.status === 401 || response.status === 403) {\n return { designs: [], error: 'Your session expired. Sign in again to see your designs.' };\n }\n if (!response.ok) {\n return { designs: [], error: `The design index is unreachable (HTTP ${response.status}).` };\n }\n payload = await response.json();\n } catch (err) {\n if (err instanceof Error && err.name === 'AbortError') return { designs: [], error: null };\n return { designs: [], error: 'Could not reach the design index. Check your connection.' };\n }\n\n if (payload?.errors?.length) {\n const raw = payload.errors[0]?.message || '';\n const isAuth = /tenantid|unauthenticated|unauthorized|not authorised|forbidden/i.test(raw);\n return {\n designs: [],\n error: isAuth\n ? 'Your session expired. Sign in again to see your designs.'\n : raw || 'The design index rejected the request.',\n };\n }\n\n const designs: DesignDocSummary[] = [];\n for (const row of payload?.data?.mySurfaceChannels ?? []) {\n const channelId = typeof row?.channelId === 'string' ? row.channelId : '';\n if (!channelId) continue;\n const doc = parseDesignDoc(coerceMetadata(row?.metadata));\n if (!doc) continue;\n const title = typeof row?.title === 'string' ? row.title : undefined;\n designs.push({ channelId, title: doc.title || title, savedAt: doc.savedAt, doc });\n }\n designs.sort((a, b) => b.savedAt - a.savedAt);\n return { designs, error: null };\n}\n\n/** Write one design to the index (idempotent upsert). Never throws. */\nexport async function pushDesignDoc(opts: {\n url: string;\n token?: string | null;\n channelId: string;\n doc: PersistedDesignDoc;\n}): Promise<boolean> {\n const channelId = opts.channelId?.trim();\n if (!channelId || !opts.url) return false;\n try {\n const response = await fetch(opts.url, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n ...(opts.token ? { authorization: `Bearer ${opts.token}` } : {}),\n },\n body: JSON.stringify({\n query: `mutation RegisterSurfaceChannel($input: RegisterSurfaceChannelInput!) {\n registerSurfaceChannel(input: $input) { ${CHANNEL_FIELDS} }\n }`,\n variables: {\n input: {\n surface: 'design',\n channelId,\n sessionId: channelId,\n title: opts.doc.title || defaultTitle(opts.doc),\n metadata: opts.doc,\n },\n },\n }),\n });\n if (!response.ok) return false;\n const payload = (await response.json()) as {\n data?: { registerSurfaceChannel?: { id?: string } | null };\n errors?: Array<{ message?: string }>;\n };\n if (payload?.errors?.length) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[pushDesignDoc]', payload.errors[0]?.message);\n }\n return false;\n }\n return Boolean(payload?.data?.registerSurfaceChannel?.id);\n } catch (err) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[pushDesignDoc] failed:', err);\n }\n return false;\n }\n}\n\nexport function defaultTitle(doc: PersistedDesignDoc): string {\n if (doc.kind === 'tshirt') return 'T-shirt design';\n if (doc.kind === 'postcard') return 'Postcard';\n if (doc.kind === 'carousel') return 'Carousel';\n return 'Untitled design';\n}\n\nfunction coerceMetadata(value: unknown): unknown {\n if (typeof value !== 'string') return value;\n try {\n return JSON.parse(value);\n } catch {\n return null;\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAUA,MAAM,cAAiB,GAAA,+CAAA;AAcvB,eAAsB,eAAe,IAIL,EAAA;AA5BhC,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA6BE,EAAI,IAAA,CAAC,IAAK,CAAA,GAAA,EAAY,OAAA;AAAA,IACpB,SAAS,EAAC;AAAA,IACV,KAAO,EAAA;AAAA,GACT;AACA,EAAI,IAAA,OAAA;AAQJ,EAAI,IAAA;AACF,IAAA,MAAM,QAAW,GAAA,MAAM,KAAM,CAAA,IAAA,CAAK,GAAK,EAAA;AAAA,MACrC,MAAQ,EAAA,MAAA;AAAA,MACR,OAAS,EAAA,cAAA,CAAA;AAAA,QACP,cAAgB,EAAA;AAAA,OAAA,EACZ,KAAK,KAAQ,GAAA;AAAA,QACf,aAAA,EAAe,CAAU,OAAA,EAAA,IAAA,CAAK,KAAK,CAAA;AAAA,UACjC,EAAC,CAAA;AAAA,MAEP,IAAA,EAAM,KAAK,SAAU,CAAA;AAAA,QACnB,KAAO,EAAA,CAAA;AAAA,2DAAA,EAC8C,cAAc,CAAA;AAAA,iBAAA,CAAA;AAAA,QAEnE,SAAW,EAAA;AAAA,UACT,OAAS,EAAA;AAAA;AACX,OACD,CAAA;AAAA,MACD,QAAQ,IAAK,CAAA;AAAA,KACd,CAAA;AACD,IAAA,IAAI,QAAS,CAAA,MAAA,KAAW,GAAO,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AACtD,MAAO,OAAA;AAAA,QACL,SAAS,EAAC;AAAA,QACV,KAAO,EAAA;AAAA,OACT;AAAA;AAEF,IAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,MAAO,OAAA;AAAA,QACL,SAAS,EAAC;AAAA,QACV,KAAA,EAAO,CAAyC,sCAAA,EAAA,QAAA,CAAS,MAAM,CAAA,EAAA;AAAA,OACjE;AAAA;AAEF,IAAU,OAAA,GAAA,MAAM,SAAS,IAAK,EAAA;AAAA,WACvB,GAAK,EAAA;AACZ,IAAA,IAAI,GAAe,YAAA,KAAA,IAAS,GAAI,CAAA,IAAA,KAAS,cAAqB,OAAA;AAAA,MAC5D,SAAS,EAAC;AAAA,MACV,KAAO,EAAA;AAAA,KACT;AACA,IAAO,OAAA;AAAA,MACL,SAAS,EAAC;AAAA,MACV,KAAO,EAAA;AAAA,KACT;AAAA;AAEF,EAAI,IAAA,CAAA,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,MAAT,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,MAAQ,EAAA;AAC3B,IAAA,MAAM,QAAM,EAAQ,GAAA,OAAA,CAAA,MAAA,CAAO,CAAC,CAAA,KAAhB,mBAAmB,OAAW,KAAA,EAAA;AAC1C,IAAM,MAAA,MAAA,GAAS,iEAAkE,CAAA,IAAA,CAAK,GAAG,CAAA;AACzF,IAAO,OAAA;AAAA,MACL,SAAS,EAAC;AAAA,MACV,KAAA,EAAO,MAAS,GAAA,0DAAA,GAA6D,GAAO,IAAA;AAAA,KACtF;AAAA;AAEF,EAAA,MAAM,UAA8B,EAAC;AACrC,EAAA,KAAA,MAAW,QAAO,EAAS,GAAA,CAAA,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,IAAA,KAAT,mBAAe,iBAAf,KAAA,IAAA,GAAA,EAAA,GAAoC,EAAI,EAAA;AACxD,IAAA,MAAM,YAAY,QAAO,GAAA,IAAA,IAAA,GAAA,MAAA,GAAA,GAAA,CAAK,SAAc,CAAA,KAAA,QAAA,GAAW,IAAI,SAAY,GAAA,EAAA;AACvE,IAAA,IAAI,CAAC,SAAW,EAAA;AAChB,IAAA,MAAM,GAAM,GAAA,cAAA,CAAe,cAAe,CAAA,GAAA,IAAA,IAAA,GAAA,MAAA,GAAA,GAAA,CAAK,QAAQ,CAAC,CAAA;AACxD,IAAA,IAAI,CAAC,GAAK,EAAA;AACV,IAAA,MAAM,QAAQ,QAAO,GAAA,IAAA,IAAA,GAAA,MAAA,GAAA,GAAA,CAAK,KAAU,CAAA,KAAA,QAAA,GAAW,IAAI,KAAQ,GAAA,MAAA;AAC3D,IAAA,OAAA,CAAQ,IAAK,CAAA;AAAA,MACX,SAAA;AAAA,MACA,KAAA,EAAO,IAAI,KAAS,IAAA,KAAA;AAAA,MACpB,SAAS,GAAI,CAAA,OAAA;AAAA,MACb;AAAA,KACD,CAAA;AAAA;AAEH,EAAA,OAAA,CAAQ,KAAK,CAAC,CAAA,EAAG,MAAM,CAAE,CAAA,OAAA,GAAU,EAAE,OAAO,CAAA;AAC5C,EAAO,OAAA;AAAA,IACL,OAAA;AAAA,IACA,KAAO,EAAA;AAAA,GACT;AACF;AAGA,eAAsB,cAAc,IAKf,EAAA;AAtHrB,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAuHE,EAAM,MAAA,SAAA,GAAA,CAAY,EAAK,GAAA,IAAA,CAAA,SAAA,KAAL,IAAgB,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,EAAA;AAClC,EAAA,IAAI,CAAC,SAAA,IAAa,CAAC,IAAA,CAAK,KAAY,OAAA,KAAA;AACpC,EAAI,IAAA;AACF,IAAA,MAAM,QAAW,GAAA,MAAM,KAAM,CAAA,IAAA,CAAK,GAAK,EAAA;AAAA,MACrC,MAAQ,EAAA,MAAA;AAAA,MACR,OAAS,EAAA,cAAA,CAAA;AAAA,QACP,cAAgB,EAAA;AAAA,OAAA,EACZ,KAAK,KAAQ,GAAA;AAAA,QACf,aAAA,EAAe,CAAU,OAAA,EAAA,IAAA,CAAK,KAAK,CAAA;AAAA,UACjC,EAAC,CAAA;AAAA,MAEP,IAAA,EAAM,KAAK,SAAU,CAAA;AAAA,QACnB,KAAO,EAAA,CAAA;AAAA,4DAAA,EAC+C,cAAc,CAAA;AAAA,iBAAA,CAAA;AAAA,QAEpE,SAAW,EAAA;AAAA,UACT,KAAO,EAAA;AAAA,YACL,OAAS,EAAA,QAAA;AAAA,YACT,SAAA;AAAA,YACA,SAAW,EAAA,SAAA;AAAA,YACX,OAAO,IAAK,CAAA,GAAA,CAAI,KAAS,IAAA,YAAA,CAAa,KAAK,GAAG,CAAA;AAAA,YAC9C,UAAU,IAAK,CAAA;AAAA;AACjB;AACF,OACD;AAAA,KACF,CAAA;AACD,IAAI,IAAA,CAAC,QAAS,CAAA,EAAA,EAAW,OAAA,KAAA;AACzB,IAAM,MAAA,OAAA,GAAW,MAAM,QAAA,CAAS,IAAK,EAAA;AAUrC,IAAI,IAAA,CAAA,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAS,MAAT,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAiB,MAAQ,EAAA;AAC3B,MAAA,IAAI,OAAS,EAAA;AAEX,QAAA,OAAA,CAAQ,KAAK,iBAAmB,EAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,OAAO,CAAC,CAAA,KAAhB,mBAAmB,OAAO,CAAA;AAAA;AAE5D,MAAO,OAAA,KAAA;AAAA;AAET,IAAA,OAAO,SAAQ,EAAS,GAAA,CAAA,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,IAAA,KAAT,IAAe,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,sBAAA,KAAf,mBAAuC,EAAE,CAAA;AAAA,WACjD,GAAK,EAAA;AACZ,IAAA,IAAI,OAAS,EAAA;AAEX,MAAQ,OAAA,CAAA,IAAA,CAAK,2BAA2B,GAAG,CAAA;AAAA;AAE7C,IAAO,OAAA,KAAA;AAAA;AAEX;AACO,SAAS,aAAa,GAAiC,EAAA;AAC5D,EAAI,IAAA,GAAA,CAAI,IAAS,KAAA,QAAA,EAAiB,OAAA,gBAAA;AAClC,EAAI,IAAA,GAAA,CAAI,IAAS,KAAA,UAAA,EAAmB,OAAA,UAAA;AACpC,EAAI,IAAA,GAAA,CAAI,IAAS,KAAA,UAAA,EAAmB,OAAA,UAAA;AACpC,EAAO,OAAA,iBAAA;AACT;AACA,SAAS,eAAe,KAAyB,EAAA;AAC/C,EAAI,IAAA,OAAO,KAAU,KAAA,QAAA,EAAiB,OAAA,KAAA;AACtC,EAAI,IAAA;AACF,IAAO,OAAA,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,GACjB,CAAA,OAAA,CAAA,EAAA;AACN,IAAO,OAAA,IAAA;AAAA;AAEX"}
1
+ {"version":3,"file":"designIndex.js","sources":["../../../src/features/design/designIndex.ts"],"sourcesContent":["/**\n * Surface-index reader/writer for design documents.\n *\n * Same store and wire shape as the canvas boards (`surfaceIndex.ts`), under\n * the index's `design` surface namespace - `SurfaceType` already enumerates\n * it, so designs and canvases stay separate per-user collections with no\n * backend change. The whole `PersistedDesignDoc` rides the row's `metadata`\n * and is REPLACED wholesale on every write; never send a patch.\n */\nimport { parseDesignDoc, type PersistedDesignDoc } from './designCore';\n\nconst CHANNEL_FIELDS = 'id surface channelId title metadata updatedAt';\n\nexport interface DesignDocSummary {\n channelId: string;\n title?: string;\n savedAt: number;\n doc: PersistedDesignDoc;\n}\n\nexport interface FetchDesignsResult {\n designs: DesignDocSummary[];\n /** Plain sentence for the UI; null when the read succeeded. */\n error: string | null;\n}\n\n/** The caller's designs, newest first. Unparseable rows drop silently. */\nexport async function fetchMyDesigns(opts: {\n url: string;\n token?: string | null;\n signal?: AbortSignal;\n}): Promise<FetchDesignsResult> {\n if (!opts.url) return { designs: [], error: 'No design index configured for this build.' };\n\n let payload: {\n data?: { mySurfaceChannels?: Array<Record<string, unknown>> | null } | null;\n errors?: Array<{ message?: string }>;\n };\n try {\n const response = await fetch(opts.url, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n ...(opts.token ? { authorization: `Bearer ${opts.token}` } : {}),\n },\n body: JSON.stringify({\n query: `query MySurfaceChannels($surface: SurfaceType) {\n mySurfaceChannels(surface: $surface) { ${CHANNEL_FIELDS} }\n }`,\n variables: { surface: 'design' },\n }),\n signal: opts.signal,\n });\n if (response.status === 401 || response.status === 403) {\n return { designs: [], error: 'Your session expired. Sign in again to see your designs.' };\n }\n if (!response.ok) {\n return { designs: [], error: `The design index is unreachable (HTTP ${response.status}).` };\n }\n payload = await response.json();\n } catch (err) {\n if (err instanceof Error && err.name === 'AbortError') return { designs: [], error: null };\n return { designs: [], error: 'Could not reach the design index. Check your connection.' };\n }\n\n if (payload?.errors?.length) {\n const raw = payload.errors[0]?.message || '';\n const isAuth = /tenantid|unauthenticated|unauthorized|not authorised|forbidden/i.test(raw);\n return {\n designs: [],\n error: isAuth\n ? 'Your session expired. Sign in again to see your designs.'\n : raw || 'The design index rejected the request.',\n };\n }\n\n const designs: DesignDocSummary[] = [];\n for (const row of payload?.data?.mySurfaceChannels ?? []) {\n const channelId = typeof row?.channelId === 'string' ? row.channelId : '';\n if (!channelId) continue;\n const doc = parseDesignDoc(coerceMetadata(row?.metadata));\n if (!doc) continue;\n const title = typeof row?.title === 'string' ? row.title : undefined;\n designs.push({ channelId, title: doc.title || title, savedAt: doc.savedAt, doc });\n }\n designs.sort((a, b) => b.savedAt - a.savedAt);\n return { designs, error: null };\n}\n\n/** Write one design to the index (idempotent upsert). Never throws. */\nexport async function pushDesignDoc(opts: {\n url: string;\n token?: string | null;\n channelId: string;\n doc: PersistedDesignDoc;\n}): Promise<boolean> {\n const channelId = opts.channelId?.trim();\n if (!channelId || !opts.url) return false;\n try {\n const response = await fetch(opts.url, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n ...(opts.token ? { authorization: `Bearer ${opts.token}` } : {}),\n },\n body: JSON.stringify({\n query: `mutation RegisterSurfaceChannel($input: RegisterSurfaceChannelInput!) {\n registerSurfaceChannel(input: $input) { ${CHANNEL_FIELDS} }\n }`,\n variables: {\n input: {\n surface: 'design',\n channelId,\n sessionId: channelId,\n title: opts.doc.title || defaultTitle(opts.doc),\n metadata: opts.doc,\n },\n },\n }),\n });\n if (!response.ok) return false;\n const payload = (await response.json()) as {\n data?: { registerSurfaceChannel?: { id?: string } | null };\n errors?: Array<{ message?: string }>;\n };\n if (payload?.errors?.length) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[pushDesignDoc]', payload.errors[0]?.message);\n }\n return false;\n }\n return Boolean(payload?.data?.registerSurfaceChannel?.id);\n } catch (err) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[pushDesignDoc] failed:', err);\n }\n return false;\n }\n}\n\nexport function defaultTitle(doc: PersistedDesignDoc): string {\n if (doc.kind === 'tshirt') return 'T-shirt design';\n if (doc.kind === 'postcard') return 'Postcard';\n if (doc.kind === 'carousel') return 'Carousel';\n return 'Untitled design';\n}\n\nfunction coerceMetadata(value: unknown): unknown {\n if (typeof value !== 'string') return value;\n try {\n return JSON.parse(value);\n } catch {\n return null;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,247 @@
1
+ import {defaultPageName,newPageId,newLayerId}from'./types.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
+ var __objRest = (source, exclude) => {
21
+ var target = {};
22
+ for (var prop in source)
23
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
24
+ target[prop] = source[prop];
25
+ if (source != null && __getOwnPropSymbols)
26
+ for (var prop of __getOwnPropSymbols(source)) {
27
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
28
+ target[prop] = source[prop];
29
+ }
30
+ return target;
31
+ };
32
+ const CAROUSEL_CONNECTOR = "yantra-carousel";
33
+ const CAROUSEL_ACTIONS = {
34
+ BUILD_OUTLINE: "YANTRA_CAROUSEL_BUILD_OUTLINE",
35
+ BUILD_DESIGN: "YANTRA_CAROUSEL_BUILD_DESIGN",
36
+ BUILD_FLYER: "YANTRA_CAROUSEL_BUILD_FLYER",
37
+ EDIT_PAGE: "YANTRA_CAROUSEL_EDIT_PAGE",
38
+ GENERATE_PAGE: "YANTRA_CAROUSEL_GENERATE_PAGE"
39
+ };
40
+ const NO_TEXT_SUFFIX = " Absolutely no text, words, letters, numbers, captions, or typography anywhere in the image.";
41
+ function unwrapConnectorResult(result) {
42
+ var _a;
43
+ if (result.successful === false) throw new Error(result.error || "The design assistant failed");
44
+ const data = (_a = result.data) != null ? _a : result;
45
+ if (data.success === false) throw new Error(data.error || "The design assistant failed");
46
+ return data;
47
+ }
48
+ function deckBrief(input, doc) {
49
+ var _a, _b, _c, _d, _e, _f, _g;
50
+ return __spreadValues({
51
+ platform: ((_a = doc.brief) == null ? void 0 : _a.platform) || "Instagram",
52
+ format: doc.aspectRatio || ((_b = doc.brief) == null ? void 0 : _b.format) || "4:5",
53
+ pageCount: Math.max(1, Math.min(20, Math.round(input.pageCount))),
54
+ topic: input.topic.trim(),
55
+ audience: ((_c = input.audience) == null ? void 0 : _c.trim()) || ((_d = doc.brief) == null ? void 0 : _d.audience) || "a general audience",
56
+ tone: ((_e = input.tone) == null ? void 0 : _e.trim()) || ((_f = doc.brief) == null ? void 0 : _f.tone) || "Professional"
57
+ }, ((_g = doc.brief) == null ? void 0 : _g.brandGuidelines) ? {
58
+ brandGuidelines: doc.brief.brandGuidelines
59
+ } : {});
60
+ }
61
+ function isPrintDoc(doc) {
62
+ var _a, _b;
63
+ return Boolean(doc.print) || /print/i.test((_b = (_a = doc.brief) == null ? void 0 : _a.platform) != null ? _b : "");
64
+ }
65
+ function designToPages(design, startIndex = 0) {
66
+ return design.pages.map((page, i) => {
67
+ var _a, _b;
68
+ return {
69
+ id: newPageId(),
70
+ name: defaultPageName(page.role, startIndex + i),
71
+ prompt: "",
72
+ src: null,
73
+ status: "ready",
74
+ role: page.role,
75
+ background: __spreadValues(__spreadValues({}, page.background), ((_a = page.background) == null ? void 0 : _a.kind) === "image" ? {
76
+ src: null,
77
+ imageStatus: "empty"
78
+ } : {}),
79
+ layers: ((_b = page.layers) != null ? _b : []).map((layer) => {
80
+ const copy = JSON.parse(JSON.stringify(layer));
81
+ return __spreadValues(__spreadProps(__spreadValues({}, copy), {
82
+ id: newLayerId()
83
+ }), copy.kind === "image" ? {
84
+ src: null,
85
+ imageStatus: "empty",
86
+ uploaded: false
87
+ } : {});
88
+ })
89
+ };
90
+ });
91
+ }
92
+ function toConnectorPage(page, index, total) {
93
+ var _a, _b, _d;
94
+ const role = (_a = page.role) != null ? _a : index === 0 ? "cover" : index === total - 1 ? "cta" : "content";
95
+ const _c = (_b = page.background) != null ? _b : {
96
+ kind: "color",
97
+ color: "#ffffff"
98
+ }, {
99
+ src: _src,
100
+ imageStatus: _status
101
+ } = _c, background = __objRest(_c, [
102
+ "src",
103
+ "imageStatus"
104
+ ]);
105
+ return {
106
+ role,
107
+ background,
108
+ layers: ((_d = page.layers) != null ? _d : []).map((layer) => {
109
+ const _a2 = layer, {
110
+ id: _id
111
+ } = _a2, rest = __objRest(_a2, [
112
+ "id"
113
+ ]);
114
+ const out = __spreadValues({}, rest);
115
+ delete out.src;
116
+ delete out.imageStatus;
117
+ return out;
118
+ })
119
+ };
120
+ }
121
+ function mergeEditedPage(page, edited) {
122
+ var _a, _b, _c, _d, _e;
123
+ const painted = ((_a = page.layers) != null ? _a : []).filter((l) => l.kind === "image" && l.src);
124
+ const layers = ((_b = edited.layers) != null ? _b : []).map((raw) => {
125
+ var _a2;
126
+ const l = JSON.parse(JSON.stringify(raw));
127
+ if (l.kind === "image") {
128
+ const prompt = ((_a2 = l.prompt) != null ? _a2 : "").trim();
129
+ const match = painted.find((p) => {
130
+ var _a3;
131
+ return ((_a3 = p.prompt) != null ? _a3 : "").trim() === prompt && prompt;
132
+ });
133
+ return match ? __spreadProps(__spreadValues({}, l), {
134
+ id: newLayerId(),
135
+ src: match.src,
136
+ imageStatus: "ready"
137
+ }) : __spreadProps(__spreadValues({}, l), {
138
+ id: newLayerId(),
139
+ src: null,
140
+ imageStatus: "empty"
141
+ });
142
+ }
143
+ return __spreadProps(__spreadValues({}, l), {
144
+ id: newLayerId()
145
+ });
146
+ });
147
+ let background = __spreadValues({}, edited.background);
148
+ if (((_c = edited.background) == null ? void 0 : _c.kind) === "image" && edited.background.imagePrompt) {
149
+ const prev = page.background;
150
+ const same = (prev == null ? void 0 : prev.kind) === "image" && !!prev.src && ((_d = prev.imagePrompt) == null ? void 0 : _d.trim()) === edited.background.imagePrompt.trim();
151
+ background = same ? __spreadProps(__spreadValues({}, edited.background), {
152
+ src: prev.src,
153
+ imageStatus: "ready"
154
+ }) : __spreadProps(__spreadValues({}, edited.background), {
155
+ src: null,
156
+ imageStatus: "empty"
157
+ });
158
+ }
159
+ return __spreadProps(__spreadValues({}, page), {
160
+ role: (_e = edited.role) != null ? _e : page.role,
161
+ background,
162
+ layers
163
+ });
164
+ }
165
+ function designOf(data, what) {
166
+ const design = data.design;
167
+ if (!design || !Array.isArray(design.pages) || design.pages.length === 0) throw new Error(`The design assistant returned no ${what}`);
168
+ return design;
169
+ }
170
+ async function buildDeck(run, brief, aspectRatio) {
171
+ let outlineMarkdown;
172
+ try {
173
+ const outline = unwrapConnectorResult(await run(CAROUSEL_ACTIONS.BUILD_OUTLINE, __spreadValues({}, brief), 6e4));
174
+ outlineMarkdown = outline.outlineMarkdown || void 0;
175
+ } catch (e) {
176
+ outlineMarkdown = void 0;
177
+ }
178
+ const data = unwrapConnectorResult(await run(CAROUSEL_ACTIONS.BUILD_DESIGN, __spreadProps(__spreadValues({
179
+ brief: __spreadValues({}, brief)
180
+ }, outlineMarkdown ? {
181
+ outlineMarkdown
182
+ } : {}), {
183
+ aspectRatio
184
+ }), 12e4));
185
+ return designOf(data, "pages");
186
+ }
187
+ async function buildFlyer(run, brief, fontPair) {
188
+ const data = unwrapConnectorResult(await run(CAROUSEL_ACTIONS.BUILD_FLYER, {
189
+ brief: __spreadValues({}, brief)
190
+ }, 24e4));
191
+ const design = designOf(data, "flyer");
192
+ return __spreadValues(__spreadProps(__spreadValues({}, design), {
193
+ pages: design.pages.slice(0, 1)
194
+ }), {});
195
+ }
196
+ async function editPage(run, input) {
197
+ const data = unwrapConnectorResult(await run(CAROUSEL_ACTIONS.EDIT_PAGE, __spreadProps(__spreadValues(__spreadValues({
198
+ instruction: input.instruction,
199
+ page: input.page
200
+ }, input.palette ? {
201
+ palette: input.palette
202
+ } : {}), input.fontPair ? {
203
+ fontPair: input.fontPair
204
+ } : {}), {
205
+ aspectRatio: input.aspectRatio
206
+ }), 12e4));
207
+ const page = data.page;
208
+ if (!page || !Array.isArray(page.layers)) throw new Error("The design assistant returned no edited page");
209
+ return page;
210
+ }
211
+ async function paintPicture(run, input) {
212
+ var _a;
213
+ const data = unwrapConnectorResult(await run(CAROUSEL_ACTIONS.GENERATE_PAGE, {
214
+ prompt: `${input.prompt}${NO_TEXT_SUFFIX}`,
215
+ pageIndex: input.pageIndex,
216
+ totalPages: input.totalPages,
217
+ aspectRatio: input.aspectRatio,
218
+ skipCarouselPrefix: true
219
+ }, 24e4));
220
+ const images = (_a = data.images) != null ? _a : [];
221
+ const inline = images.find((im) => im.dataBase64);
222
+ if (inline == null ? void 0 : inline.dataBase64) return {
223
+ dataBase64: inline.dataBase64,
224
+ mimeType: inline.mimeType || "image/png"
225
+ };
226
+ const remote = images.find((im) => im.url);
227
+ if (remote == null ? void 0 : remote.url) return {
228
+ url: remote.url,
229
+ mimeType: remote.mimeType || "image/png"
230
+ };
231
+ throw new Error("No picture came back");
232
+ }
233
+ function picturesToPaint(page) {
234
+ var _a, _b, _c;
235
+ const out = [];
236
+ if (((_a = page.background) == null ? void 0 : _a.kind) === "image" && page.background.imagePrompt && !page.background.src) out.push({
237
+ target: "background"
238
+ });
239
+ for (const l of (_b = page.layers) != null ? _b : []) {
240
+ if (l.kind === "image" && !l.src && ((_c = l.prompt) == null ? void 0 : _c.trim())) out.push({
241
+ target: "layer",
242
+ layerId: l.id,
243
+ prompt: l.prompt
244
+ });
245
+ }
246
+ return out;
247
+ }export{CAROUSEL_ACTIONS,CAROUSEL_CONNECTOR,NO_TEXT_SUFFIX,buildDeck,buildFlyer,deckBrief,designToPages,editPage,isPrintDoc,mergeEditedPage,paintPicture,picturesToPaint,toConnectorPage,unwrapConnectorResult};//# sourceMappingURL=aiDesign.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aiDesign.js","sources":["../../../../src/features/design/doc/aiDesign.ts"],"sourcesContent":["/**\n * Designing with AI - native twin of the web Design Studio's wizard and chat\n * (state.tsx `startFromBrief` / `startFromFlyerBrief` / `editPageWithAI`, and\n * rpc/carouselRpc.ts): the `yantra-carousel` connector's actions, the same\n * params, the same result shapes.\n *\n * brief -> BUILD_OUTLINE -> BUILD_DESIGN (a deck) -> pages inserted\n * brief -> BUILD_FLYER (print) -> one page inserted\n * \"Edit this page\" -> EDIT_PAGE -> the page's layers replaced\n *\n * Image layers come back as text-free prompts; GENERATE_PAGE paints each one\n * afterwards (the caller hosts the bytes).\n *\n * Pure apart from the injected transport: runs under jest as-is.\n */\nimport {\n defaultPageName,\n newLayerId,\n newPageId,\n type DesignBackground,\n type DesignBrief,\n type DesignDoc,\n type DesignFontPair,\n type DesignPage,\n type DesignPalette,\n type EditorLayer,\n type PageBackground,\n} from './types';\n\nexport const CAROUSEL_CONNECTOR = 'yantra-carousel';\n\nexport const CAROUSEL_ACTIONS = {\n BUILD_OUTLINE: 'YANTRA_CAROUSEL_BUILD_OUTLINE',\n BUILD_DESIGN: 'YANTRA_CAROUSEL_BUILD_DESIGN',\n BUILD_FLYER: 'YANTRA_CAROUSEL_BUILD_FLYER',\n EDIT_PAGE: 'YANTRA_CAROUSEL_EDIT_PAGE',\n GENERATE_PAGE: 'YANTRA_CAROUSEL_GENERATE_PAGE',\n} as const;\n\n/** Web state.tsx NO_TEXT_SUFFIX: picture prompts must never paint words. */\nexport const NO_TEXT_SUFFIX =\n ' Absolutely no text, words, letters, numbers, captions, or typography anywhere in the image.';\n\n/** One connector call: action, params, and how long the agent may take. */\nexport type RunCarousel = (\n action: string,\n params: Record<string, unknown>,\n timeoutMs: number,\n) => Promise<Record<string, unknown>>;\n\n/** A connector page: what BUILD_DESIGN / BUILD_FLYER / EDIT_PAGE return per page. */\nexport interface ConnectorPage {\n role: 'cover' | 'content' | 'cta';\n background: DesignBackground;\n layers: Array<Record<string, unknown> & { kind: EditorLayer['kind'] }>;\n}\n\nexport interface ConnectorDesign {\n palette: DesignPalette;\n fontPair: DesignFontPair;\n pages: ConnectorPage[];\n}\n\n/** connector-run wraps results as { successful, data } in some agent versions and bare in others. */\nexport function unwrapConnectorResult(result: Record<string, unknown>): Record<string, unknown> {\n if (result.successful === false) throw new Error((result.error as string) || 'The design assistant failed');\n const data = (result.data ?? result) as Record<string, unknown>;\n if (data.success === false) throw new Error((data.error as string) || 'The design assistant failed');\n return data;\n}\n\n/** A deck brief from what the person typed and the design they are in. */\nexport function deckBrief(\n input: { topic: string; pageCount: number; audience?: string; tone?: string },\n doc: DesignDoc,\n): DesignBrief {\n return {\n platform: doc.brief?.platform || 'Instagram',\n format: doc.aspectRatio || doc.brief?.format || '4:5',\n pageCount: Math.max(1, Math.min(20, Math.round(input.pageCount))),\n topic: input.topic.trim(),\n audience: input.audience?.trim() || doc.brief?.audience || 'a general audience',\n tone: input.tone?.trim() || doc.brief?.tone || 'Professional',\n ...(doc.brief?.brandGuidelines ? { brandGuidelines: doc.brief.brandGuidelines } : {}),\n };\n}\n\n/** Is this a printed piece (one page, the flyer action) rather than a deck? */\nexport function isPrintDoc(doc: Pick<DesignDoc, 'print' | 'brief'>): boolean {\n return Boolean(doc.print) || /print/i.test(doc.brief?.platform ?? '');\n}\n\n/**\n * Connector pages as editor pages (web `designToPages`): fresh ids, chart\n * arrays cloned, image layers empty until painted.\n */\nexport function designToPages(design: Pick<ConnectorDesign, 'pages'>, startIndex = 0): DesignPage[] {\n return design.pages.map((page, i) => ({\n id: newPageId(),\n name: defaultPageName(page.role, startIndex + i),\n prompt: '',\n src: null,\n status: 'ready' as const,\n role: page.role,\n background: {\n ...page.background,\n ...(page.background?.kind === 'image' ? { src: null, imageStatus: 'empty' as const } : {}),\n } as PageBackground,\n layers: (page.layers ?? []).map((layer) => {\n const copy = JSON.parse(JSON.stringify(layer)) as EditorLayer;\n return {\n ...copy,\n id: newLayerId(),\n ...(copy.kind === 'image' ? { src: null, imageStatus: 'empty' as const, uploaded: false } : {}),\n } as EditorLayer;\n }),\n }));\n}\n\n/** The page as the connector reads it: no ids, no hosted pictures (web editPageWithAI). */\nexport function toConnectorPage(page: DesignPage, index: number, total: number): ConnectorPage {\n const role = page.role ?? (index === 0 ? 'cover' : index === total - 1 ? 'cta' : 'content');\n const {\n src: _src,\n imageStatus: _status,\n ...background\n } = page.background ?? { kind: 'color' as const, color: '#ffffff' };\n return {\n role,\n background: background as DesignBackground,\n layers: (page.layers ?? []).map((layer) => {\n const { id: _id, ...rest } = layer as EditorLayer & { src?: unknown; imageStatus?: unknown };\n const out = { ...rest } as Record<string, unknown> & { kind: EditorLayer['kind'] };\n delete out.src;\n delete out.imageStatus;\n return out;\n }),\n };\n}\n\n/**\n * An edited connector page merged onto the old one: a picture whose prompt did\n * not change keeps its painted source, so an edit never pays to repaint it.\n */\nexport function mergeEditedPage(page: DesignPage, edited: ConnectorPage): DesignPage {\n const painted = (page.layers ?? []).filter((l) => l.kind === 'image' && l.src) as Array<\n Extract<EditorLayer, { kind: 'image' }>\n >;\n const layers: EditorLayer[] = (edited.layers ?? []).map((raw) => {\n const l = JSON.parse(JSON.stringify(raw)) as EditorLayer;\n if (l.kind === 'image') {\n const prompt = (l.prompt ?? '').trim();\n const match = painted.find((p) => (p.prompt ?? '').trim() === prompt && prompt);\n return match\n ? { ...l, id: newLayerId(), src: match.src, imageStatus: 'ready' as const }\n : { ...l, id: newLayerId(), src: null, imageStatus: 'empty' as const };\n }\n return { ...l, id: newLayerId() } as EditorLayer;\n });\n let background: PageBackground = { ...edited.background };\n if (edited.background?.kind === 'image' && edited.background.imagePrompt) {\n const prev = page.background;\n const same =\n prev?.kind === 'image' && !!prev.src && prev.imagePrompt?.trim() === edited.background.imagePrompt.trim();\n background = same\n ? { ...edited.background, src: prev!.src, imageStatus: 'ready' }\n : { ...edited.background, src: null, imageStatus: 'empty' };\n }\n return { ...page, role: edited.role ?? page.role, background, layers };\n}\n\nfunction designOf(data: Record<string, unknown>, what: string): ConnectorDesign {\n const design = data.design as ConnectorDesign | undefined;\n if (!design || !Array.isArray(design.pages) || design.pages.length === 0)\n throw new Error(`The design assistant returned no ${what}`);\n return design;\n}\n\n/** Brief -> outline -> layered deck. The outline is best-effort, as on web. */\nexport async function buildDeck(run: RunCarousel, brief: DesignBrief, aspectRatio: string): Promise<ConnectorDesign> {\n let outlineMarkdown: string | undefined;\n try {\n const outline = unwrapConnectorResult(await run(CAROUSEL_ACTIONS.BUILD_OUTLINE, { ...brief }, 60_000));\n outlineMarkdown = (outline.outlineMarkdown as string) || undefined;\n } catch {\n outlineMarkdown = undefined;\n }\n const data = unwrapConnectorResult(\n await run(\n CAROUSEL_ACTIONS.BUILD_DESIGN,\n { brief: { ...brief }, ...(outlineMarkdown ? { outlineMarkdown } : {}), aspectRatio },\n 120_000,\n ),\n );\n return designOf(data, 'pages');\n}\n\nexport interface FlyerInput {\n title: string;\n headline?: string;\n tagline?: string;\n body?: string;\n tone?: string;\n format?: string;\n}\n\n/** A print brief -> one designed page (BUILD_FLYER). */\nexport async function buildFlyer(\n run: RunCarousel,\n brief: FlyerInput,\n fontPair?: DesignFontPair,\n): Promise<ConnectorDesign> {\n const data = unwrapConnectorResult(await run(CAROUSEL_ACTIONS.BUILD_FLYER, { brief: { ...brief } }, 240_000));\n const design = designOf(data, 'flyer');\n return { ...design, pages: design.pages.slice(0, 1), ...(fontPair ? { fontPair } : {}) };\n}\n\n/** A natural-language edit of one page (EDIT_PAGE). */\nexport async function editPage(\n run: RunCarousel,\n input: {\n instruction: string;\n page: ConnectorPage;\n palette?: DesignPalette;\n fontPair?: DesignFontPair;\n aspectRatio: string;\n },\n): Promise<ConnectorPage> {\n const data = unwrapConnectorResult(\n await run(\n CAROUSEL_ACTIONS.EDIT_PAGE,\n {\n instruction: input.instruction,\n page: input.page,\n ...(input.palette ? { palette: input.palette } : {}),\n ...(input.fontPair ? { fontPair: input.fontPair } : {}),\n aspectRatio: input.aspectRatio,\n },\n 120_000,\n ),\n );\n const page = data.page as ConnectorPage | undefined;\n if (!page || !Array.isArray(page.layers)) throw new Error('The design assistant returned no edited page');\n return page;\n}\n\n/** One picture for a prompt: inline base64 or a stored URL, whichever the agent returned. */\nexport async function paintPicture(\n run: RunCarousel,\n input: { prompt: string; pageIndex: number; totalPages: number; aspectRatio: string },\n): Promise<{ dataBase64?: string; url?: string; mimeType: string }> {\n const data = unwrapConnectorResult(\n await run(\n CAROUSEL_ACTIONS.GENERATE_PAGE,\n {\n prompt: `${input.prompt}${NO_TEXT_SUFFIX}`,\n pageIndex: input.pageIndex,\n totalPages: input.totalPages,\n aspectRatio: input.aspectRatio,\n skipCarouselPrefix: true,\n },\n 240_000,\n ),\n );\n const images = (data.images as Array<{ dataBase64?: string; url?: string; mimeType?: string }> | undefined) ?? [];\n const inline = images.find((im) => im.dataBase64);\n if (inline?.dataBase64) return { dataBase64: inline.dataBase64, mimeType: inline.mimeType || 'image/png' };\n const remote = images.find((im) => im.url);\n if (remote?.url) return { url: remote.url, mimeType: remote.mimeType || 'image/png' };\n throw new Error('No picture came back');\n}\n\n/** Every picture a page still needs painted: its image background, then image layers without a source. */\nexport function picturesToPaint(\n page: DesignPage,\n): Array<{ target: 'background' } | { target: 'layer'; layerId: string; prompt: string }> {\n const out: Array<{ target: 'background' } | { target: 'layer'; layerId: string; prompt: string }> = [];\n if (page.background?.kind === 'image' && page.background.imagePrompt && !page.background.src)\n out.push({ target: 'background' });\n for (const l of page.layers ?? []) {\n if (l.kind === 'image' && !l.src && l.prompt?.trim())\n out.push({ target: 'layer', layerId: l.id, prompt: l.prompt });\n }\n return out;\n}\n"],"names":["_a"],"mappings":"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"}
@@ -0,0 +1,280 @@
1
+ import {artifactTitle}from'./types.js';var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ const DESIGN_KINDS = ["deck", "flyer"];
21
+ function uuid() {
22
+ var _a, _b;
23
+ const bytes = new Uint8Array(16);
24
+ let filled = false;
25
+ try {
26
+ (_b = (_a = globalThis.crypto) == null ? void 0 : _a.getRandomValues) == null ? void 0 : _b.call(_a, bytes);
27
+ filled = bytes.some((b) => b !== 0);
28
+ } catch (e) {
29
+ filled = false;
30
+ }
31
+ if (!filled) for (let i = 0; i < 16; i += 1) bytes[i] = Math.floor(Math.random() * 256);
32
+ bytes[6] = bytes[6] & 15 | 64;
33
+ bytes[8] = bytes[8] & 63 | 128;
34
+ const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join("");
35
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
36
+ }
37
+ function newArtifactId(kind) {
38
+ return `${kind}:${uuid()}`;
39
+ }
40
+ function isDesignArtifactId(id) {
41
+ return typeof id === "string" && /^(deck|flyer):[0-9A-Za-z-]{8,}$/.test(id.trim());
42
+ }
43
+ function isDocArtifactId(id) {
44
+ return typeof id === "string" && /^doc:[0-9A-Za-z-]{8,}$/.test(id.trim());
45
+ }
46
+ const stripDataUrl = (src) => src && !src.startsWith("data:") ? src : null;
47
+ function slimDoc(doc) {
48
+ const hosted = (src) => {
49
+ const kept = stripDataUrl(src);
50
+ return kept && !/^(file|ph|assets-library|content):/i.test(kept) ? kept : null;
51
+ };
52
+ return __spreadProps(__spreadValues({}, doc), {
53
+ brandKit: doc.brandKit ? __spreadProps(__spreadValues({}, doc.brandKit), {
54
+ logos: doc.brandKit.logos.filter((l) => !l.startsWith("data:"))
55
+ }) : void 0,
56
+ pages: doc.pages.map((p) => {
57
+ var _a;
58
+ return __spreadProps(__spreadValues({}, p), {
59
+ dataBase64: void 0,
60
+ src: hosted(p.src),
61
+ status: p.status === "generating" ? "empty" : p.src && p.src.startsWith("data:") ? "empty" : p.status,
62
+ background: p.background ? __spreadProps(__spreadValues({}, p.background), {
63
+ src: hosted(p.background.src),
64
+ imageStatus: hosted(p.background.src) ? p.background.imageStatus : "empty"
65
+ }) : void 0,
66
+ layers: (_a = p.layers) == null ? void 0 : _a.map((l) => l.kind === "image" ? __spreadProps(__spreadValues({}, l), {
67
+ src: hosted(l.src),
68
+ imageStatus: hosted(l.src) ? l.imageStatus : "empty",
69
+ uploadError: void 0
70
+ }) : l)
71
+ });
72
+ })
73
+ });
74
+ }
75
+ function hasLocalMedia(doc) {
76
+ const local = (src) => Boolean(src && /^(file|ph|assets-library|content|data):/i.test(src));
77
+ return doc.pages.some((p) => {
78
+ var _a, _b;
79
+ return local((_a = p.background) == null ? void 0 : _a.src) || ((_b = p.layers) != null ? _b : []).some((l) => l.kind === "image" && local(l.src));
80
+ });
81
+ }
82
+ function decodeMetadata(value) {
83
+ if (typeof value !== "string") return value;
84
+ try {
85
+ return JSON.parse(value);
86
+ } catch (e) {
87
+ return null;
88
+ }
89
+ }
90
+ function coerceDesignArtifact(metadata) {
91
+ const meta = decodeMetadata(metadata);
92
+ const artifact = meta == null ? void 0 : meta.artifact;
93
+ if (!artifact || typeof artifact.id !== "string" || !artifact.id) return null;
94
+ if (!DESIGN_KINDS.includes(artifact.kind)) return null;
95
+ const doc = artifact.doc;
96
+ if (!doc || !Array.isArray(doc.pages) || !(doc.pageWidth > 0) || !(doc.pageHeight > 0)) return null;
97
+ return artifact;
98
+ }
99
+ function buildDesignArtifact(id, kind, doc, keep = {}, now = Date.now()) {
100
+ const slim = slimDoc(doc);
101
+ return __spreadValues(__spreadValues(__spreadProps(__spreadValues({
102
+ id,
103
+ kind
104
+ }, keep.sessionId ? {
105
+ sessionId: keep.sessionId
106
+ } : {}), {
107
+ title: artifactTitle(slim),
108
+ updatedAt: now,
109
+ doc: slim
110
+ }), keep.thumbUrl ? {
111
+ thumbUrl: keep.thumbUrl
112
+ } : {}), keep.exportUrl ? {
113
+ exportUrl: keep.exportUrl
114
+ } : {});
115
+ }
116
+ async function gql(opts, query, variables) {
117
+ var _a, _b, _c;
118
+ if (!opts.url) return {
119
+ data: null,
120
+ error: "No design index configured for this build."
121
+ };
122
+ try {
123
+ const response = await fetch(opts.url, {
124
+ method: "POST",
125
+ headers: __spreadValues({
126
+ "content-type": "application/json"
127
+ }, opts.token ? {
128
+ authorization: `Bearer ${opts.token}`
129
+ } : {}),
130
+ body: JSON.stringify({
131
+ query,
132
+ variables
133
+ }),
134
+ signal: opts.signal
135
+ });
136
+ if (response.status === 401 || response.status === 403) {
137
+ return {
138
+ data: null,
139
+ error: "Your session expired. Sign in again to see your designs."
140
+ };
141
+ }
142
+ if (response.status === 413) {
143
+ return {
144
+ data: null,
145
+ error: "This design is too big to save. Remove a few pictures or pages."
146
+ };
147
+ }
148
+ if (!response.ok) return {
149
+ data: null,
150
+ error: `The design index is unreachable (HTTP ${response.status}).`
151
+ };
152
+ const payload = await response.json();
153
+ if ((_a = payload == null ? void 0 : payload.errors) == null ? void 0 : _a.length) {
154
+ const raw = ((_b = payload.errors[0]) == null ? void 0 : _b.message) || "";
155
+ const isAuth = /tenantid|unauthenticated|unauthorized|not authorised|forbidden/i.test(raw);
156
+ return {
157
+ data: null,
158
+ error: isAuth ? "Your session expired. Sign in again to see your designs." : raw || "Request rejected."
159
+ };
160
+ }
161
+ return {
162
+ data: (_c = payload == null ? void 0 : payload.data) != null ? _c : null,
163
+ error: null
164
+ };
165
+ } catch (err) {
166
+ if (err instanceof Error && err.name === "AbortError") return {
167
+ data: null,
168
+ error: null
169
+ };
170
+ return {
171
+ data: null,
172
+ error: "Could not reach the design index. Check your connection."
173
+ };
174
+ }
175
+ }
176
+ const ROW_FIELDS = "channelId title metadata updatedAt";
177
+ async function saveDesignArtifact(opts, artifact) {
178
+ var _a;
179
+ const {
180
+ data,
181
+ error
182
+ } = await gql(opts, `mutation RegisterSurfaceChannel($input: RegisterSurfaceChannelInput!) {
183
+ registerSurfaceChannel(input: $input) { ${ROW_FIELDS} }
184
+ }`, {
185
+ input: __spreadProps(__spreadValues(__spreadValues({
186
+ surface: "canvas",
187
+ channelId: artifact.id
188
+ }, artifact.sessionId ? {
189
+ sessionId: artifact.sessionId
190
+ } : {}), artifact.title ? {
191
+ title: artifact.title
192
+ } : {}), {
193
+ metadata: {
194
+ artifact
195
+ }
196
+ })
197
+ });
198
+ if (error) return {
199
+ ok: false,
200
+ error
201
+ };
202
+ return ((_a = data == null ? void 0 : data.registerSurfaceChannel) == null ? void 0 : _a.channelId) ? {
203
+ ok: true,
204
+ error: null
205
+ } : {
206
+ ok: false,
207
+ error: "Could not save. Recent edits are not stored yet."
208
+ };
209
+ }
210
+ async function channelsMatching(opts, search, limit) {
211
+ var _a, _b;
212
+ const {
213
+ data,
214
+ error
215
+ } = await gql(opts, `query SurfaceChannels($filter: SurfaceChannelFilter, $offset: Int, $limit: Int) {
216
+ surfaceChannels(filter: $filter, offset: $offset, limit: $limit) { data { ${ROW_FIELDS} } totalCount }
217
+ }`, {
218
+ filter: {
219
+ surface: "canvas",
220
+ search
221
+ },
222
+ offset: 0,
223
+ limit
224
+ });
225
+ const page = data == null ? void 0 : data.surfaceChannels;
226
+ return {
227
+ rows: (_a = page == null ? void 0 : page.data) != null ? _a : [],
228
+ total: (_b = page == null ? void 0 : page.totalCount) != null ? _b : 0,
229
+ error
230
+ };
231
+ }
232
+ async function listDesignArtifacts(opts, limit = 24) {
233
+ var _a, _b;
234
+ const pages = await Promise.all(DESIGN_KINDS.map((kind) => channelsMatching(opts, `${kind}:`, limit)));
235
+ const designs = [];
236
+ for (const [i, page] of pages.entries()) {
237
+ for (const row of page.rows) {
238
+ const artifact = coerceDesignArtifact(row.metadata);
239
+ if ((artifact == null ? void 0 : artifact.kind) === DESIGN_KINDS[i] && artifact.id === row.channelId) designs.push(artifact);
240
+ }
241
+ }
242
+ designs.sort((a, b) => {
243
+ var _a2, _b2;
244
+ return ((_a2 = b.updatedAt) != null ? _a2 : 0) - ((_b2 = a.updatedAt) != null ? _b2 : 0);
245
+ });
246
+ const error = designs.length === 0 ? (_b = (_a = pages.find((p) => p.error)) == null ? void 0 : _a.error) != null ? _b : null : null;
247
+ return {
248
+ designs: designs.slice(0, limit),
249
+ more: pages.some((p) => p.total > limit) || designs.length > limit,
250
+ error
251
+ };
252
+ }
253
+ async function loadOwnedDesignArtifact(opts, id) {
254
+ if (!isDesignArtifactId(id)) return {
255
+ artifact: null,
256
+ error: null
257
+ };
258
+ const page = await channelsMatching(opts, id.trim(), 5);
259
+ const row = page.rows.find((r) => r.channelId === id.trim());
260
+ if (!row) return {
261
+ artifact: null,
262
+ error: page.error
263
+ };
264
+ const artifact = coerceDesignArtifact(row.metadata);
265
+ return {
266
+ artifact: artifact && artifact.id === id.trim() ? artifact : null,
267
+ error: null
268
+ };
269
+ }
270
+ async function deleteDesignArtifact(opts, id) {
271
+ const {
272
+ data
273
+ } = await gql(opts, `mutation DeleteSurfaceChannel($surface: SurfaceType!, $channelId: String!) {
274
+ deleteSurfaceChannel(surface: $surface, channelId: $channelId)
275
+ }`, {
276
+ surface: "canvas",
277
+ channelId: id
278
+ });
279
+ return Boolean(data == null ? void 0 : data.deleteSurfaceChannel);
280
+ }export{DESIGN_KINDS,buildDesignArtifact,channelsMatching,coerceDesignArtifact,decodeMetadata,deleteDesignArtifact,gql,hasLocalMedia,isDesignArtifactId,isDocArtifactId,listDesignArtifacts,loadOwnedDesignArtifact,newArtifactId,saveDesignArtifact,slimDoc};//# sourceMappingURL=artifacts.js.map