@adminide-stack/yantra-mobile 12.0.128 → 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 +4 -4
  359. package/lib/features/design/exportDesign.js +0 -133
  360. package/lib/features/design/exportDesign.js.map +0 -1
@@ -0,0 +1,229 @@
1
+ import {deriveAgentEndpoint,deriveBackendGraphqlUrl}from'../../canvas/videoEditor/remoteMediaClient.js';import {GENERATE_TIMEOUT_MS,WEB_DESIGN_CONNECTOR_ID,DESIGN_GENERATE_ACTION,OUTPUT_CONTRACT}from'./designConnector.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 __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
21
+ const DESIGN_SKILLS = ["yantra-skills/cdecli-connector-skill"];
22
+ function isChatTurn(opts) {
23
+ return !(opts == null ? void 0 : opts.editing) && !(opts == null ? void 0 : opts.reference) && !(opts == null ? void 0 : opts.templateId) && !(opts == null ? void 0 : opts.systemId);
24
+ }
25
+ function chatDirective(message) {
26
+ return `${message}
27
+
28
+ (If this turn asks for a web page, landing page, site or UI mockup, run the ${WEB_DESIGN_CONNECTOR_ID} action ${DESIGN_GENERATE_ACTION} \u2014 do not search for another connector, and do not generate an image instead. ${OUTPUT_CONTRACT} If it is ordinary conversation, just reply.)`;
29
+ }
30
+ class AgentSseParser {
31
+ constructor(onDelta, onStatus) {
32
+ this.onDelta = onDelta;
33
+ this.onStatus = onStatus;
34
+ __publicField(this, "buf", "");
35
+ __publicField(this, "text", "");
36
+ __publicField(this, "sessionId", null);
37
+ __publicField(this, "error", null);
38
+ __publicField(this, "done", false);
39
+ /** Tool calls seen: work happened even when no text did. */
40
+ __publicField(this, "toolCalls", 0);
41
+ /** A "⚠" notice, shown only once something follows it. */
42
+ __publicField(this, "held", "");
43
+ }
44
+ feed(chunk) {
45
+ this.buf += chunk.replace(/\r\n/g, "\n");
46
+ let at = this.buf.indexOf("\n\n");
47
+ while (at >= 0) {
48
+ this.block(this.buf.slice(0, at));
49
+ this.buf = this.buf.slice(at + 2);
50
+ at = this.buf.indexOf("\n\n");
51
+ }
52
+ }
53
+ end() {
54
+ if (this.buf.trim()) this.block(this.buf);
55
+ this.buf = "";
56
+ this.release();
57
+ }
58
+ /** The stream ended without an answer, any work or a `done`: the connection dropped. */
59
+ get dropped() {
60
+ return !this.done && !this.text && !this.toolCalls;
61
+ }
62
+ block(block) {
63
+ var _a, _b;
64
+ let event = "message";
65
+ const data = [];
66
+ for (const line of block.split("\n")) {
67
+ if (line.startsWith("event:")) event = line.slice(6).trim();
68
+ else if (line.startsWith("data:")) data.push(line.slice(5).trimStart());
69
+ }
70
+ let payload = {};
71
+ try {
72
+ payload = JSON.parse(data.join("\n"));
73
+ } catch (e) {
74
+ return;
75
+ }
76
+ if (event !== "output" && event !== "error") this.release();
77
+ switch (event) {
78
+ case "session":
79
+ if (typeof payload.session_id === "string") this.sessionId = payload.session_id;
80
+ break;
81
+ case "delta":
82
+ if (typeof payload.text === "string") this.push(payload.text);
83
+ break;
84
+ case "output": {
85
+ const text = typeof payload.text === "string" ? payload.text.trim() : "";
86
+ if (!text) break;
87
+ this.release();
88
+ if (text.startsWith("\u26A0")) this.held = text;
89
+ else this.push(this.gap() + text);
90
+ break;
91
+ }
92
+ case "tool_call":
93
+ this.toolCalls += 1;
94
+ break;
95
+ case "status":
96
+ if (typeof payload.status === "string") (_a = this.onStatus) == null ? void 0 : _a.call(this, payload.status);
97
+ break;
98
+ case "error":
99
+ if (payload.turn_failed === true || payload.turn_failed === "true") this.held = "";
100
+ else this.release();
101
+ this.error = String((_b = payload.error) != null ? _b : "The design assistant failed.");
102
+ break;
103
+ case "done":
104
+ this.done = true;
105
+ break;
106
+ }
107
+ }
108
+ gap() {
109
+ return this.text && !this.text.endsWith("\n") ? "\n\n" : "";
110
+ }
111
+ release() {
112
+ if (!this.held) return;
113
+ const notice = this.held;
114
+ this.held = "";
115
+ this.push(this.gap() + notice);
116
+ }
117
+ push(text) {
118
+ var _a;
119
+ this.text += text;
120
+ (_a = this.onDelta) == null ? void 0 : _a.call(this, text);
121
+ }
122
+ }
123
+ const TURN_TIMEOUT_MS = GENERATE_TIMEOUT_MS + 2e4;
124
+ function createAgentTurnTransport(token, indexUrl) {
125
+ const agent = deriveAgentEndpoint(indexUrl);
126
+ const backend = deriveBackendGraphqlUrl(indexUrl);
127
+ const skill = DESIGN_SKILLS.join(",");
128
+ const openSession = async (model, channelId) => {
129
+ const resp = await fetch(`${agent}/v1/agent/session`, {
130
+ method: "POST",
131
+ headers: {
132
+ "Content-Type": "application/json",
133
+ Authorization: `Bearer ${token}`
134
+ },
135
+ body: JSON.stringify(__spreadValues(__spreadValues({
136
+ skill
137
+ }, model ? {
138
+ model
139
+ } : {}), channelId ? {
140
+ channel_id: channelId
141
+ } : {}))
142
+ });
143
+ if (!resp.ok) throw new Error(`The design assistant could not start (HTTP ${resp.status}).`);
144
+ const info = await resp.json();
145
+ if (!info.session_id) throw new Error("The design assistant did not open a session.");
146
+ return info.session_id;
147
+ };
148
+ return {
149
+ turn: async (message, opts) => {
150
+ const sessionId = opts.sessionId || await openSession(opts.model, opts.channelId);
151
+ return new Promise((resolve, reject) => {
152
+ var _a, _b;
153
+ const parser = new AgentSseParser(opts.onDelta, opts.onStatus);
154
+ const xhr = new XMLHttpRequest();
155
+ let seen = 0;
156
+ let settled = false;
157
+ const settle = (fn) => {
158
+ var _a2, _b2;
159
+ if (settled) return;
160
+ settled = true;
161
+ clearTimeout(timer);
162
+ (_b2 = (_a2 = opts.signal) == null ? void 0 : _a2.removeEventListener) == null ? void 0 : _b2.call(_a2, "abort", onAbort);
163
+ fn();
164
+ };
165
+ const pump = () => {
166
+ var _a2;
167
+ const text = (_a2 = xhr.responseText) != null ? _a2 : "";
168
+ if (text.length > seen) {
169
+ parser.feed(text.slice(seen));
170
+ seen = text.length;
171
+ }
172
+ };
173
+ const onAbort = () => {
174
+ xhr.abort();
175
+ settle(() => reject(new Error("Stopped.")));
176
+ };
177
+ const timer = setTimeout(() => {
178
+ xhr.abort();
179
+ settle(() => reject(new Error("The design assistant took too long. Try again.")));
180
+ }, TURN_TIMEOUT_MS);
181
+ (_b = (_a = opts.signal) == null ? void 0 : _a.addEventListener) == null ? void 0 : _b.call(_a, "abort", onAbort);
182
+ xhr.open("POST", `${agent}/v1/agent/chat`);
183
+ xhr.setRequestHeader("Content-Type", "application/json");
184
+ xhr.setRequestHeader("Authorization", `Bearer ${token}`);
185
+ xhr.onprogress = pump;
186
+ xhr.onreadystatechange = () => {
187
+ if (xhr.readyState === 3) pump();
188
+ };
189
+ xhr.onerror = () => settle(() => reject(new Error("Could not reach the design assistant. Check your connection.")));
190
+ xhr.onload = () => {
191
+ pump();
192
+ parser.end();
193
+ if (xhr.status < 200 || xhr.status >= 300) {
194
+ settle(() => reject(new Error(`The design assistant failed (HTTP ${xhr.status}).`)));
195
+ return;
196
+ }
197
+ if (parser.error && !parser.text.trim()) {
198
+ settle(() => reject(new Error(parser.error)));
199
+ return;
200
+ }
201
+ if (parser.dropped) {
202
+ settle(() => reject(new Error("The connection to the agent closed before it answered.")));
203
+ return;
204
+ }
205
+ settle(() => {
206
+ var _a2;
207
+ return resolve({
208
+ text: parser.text,
209
+ sessionId: (_a2 = parser.sessionId) != null ? _a2 : sessionId
210
+ });
211
+ });
212
+ };
213
+ xhr.send(JSON.stringify(__spreadValues(__spreadValues(__spreadProps(__spreadValues({
214
+ message: opts.raw ? message : chatDirective(message),
215
+ stream: true,
216
+ session_id: sessionId
217
+ }, opts.channelId ? {
218
+ channel_id: opts.channelId
219
+ } : {}), {
220
+ skill
221
+ }), opts.model ? {
222
+ model: opts.model
223
+ } : {}), backend ? {
224
+ backend_graphql_url: backend
225
+ } : {})));
226
+ });
227
+ }
228
+ };
229
+ }export{AgentSseParser,DESIGN_SKILLS,chatDirective,createAgentTurnTransport,isChatTurn};//# sourceMappingURL=agentTurn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentTurn.js","sources":["../../../../src/features/design/surface/agentTurn.ts"],"sourcesContent":["/**\n * The design chat turn - native twin of design-surface\n * `standalone/designChatTurn.ts` over surface-kit `agentChat`\n * (`openAgentSession`, `postAgentChatStream`).\n *\n * A bare composer send is a conversation, not an order to build: it goes to\n * the agent with the design skill attached, and the skill decides whether to\n * answer or to run the generator. A template, system, edit or reference is an\n * explicit \"make me this\" and takes the connector lane instead (`isChatTurn`).\n *\n * The agent streams SSE (`event:` / `data:` blocks): `delta` and `output` carry\n * reply text, `status` progress, `tool_call` work, `error` a failure, `done`\n * the end. As the web (0.4.3) reads it: an `output` notice starting \"⚠\" is held\n * until something follows it, and a failed turn (`turn_failed`) drops it; a\n * stream that closes before any answer or work is an error, not an empty reply.\n * `AgentSseParser` reads them, pure; the transport streams through XHR for the\n * same reason as `execStream.ts`.\n */\nimport { deriveAgentEndpoint, deriveBackendGraphqlUrl } from '../../canvas/videoEditor/remoteMediaClient';\nimport {\n DESIGN_GENERATE_ACTION,\n GENERATE_TIMEOUT_MS,\n OUTPUT_CONTRACT,\n WEB_DESIGN_CONNECTOR_ID,\n} from './designConnector';\n\n/** The agent toolbox a design turn needs (web DESIGN_SKILLS). */\nexport const DESIGN_SKILLS = ['yantra-skills/cdecli-connector-skill'];\n\n/** A bare send is a conversation; a template, system, edit target or reference is an explicit build. */\nexport function isChatTurn(opts?: {\n templateId?: string;\n systemId?: string;\n editing?: boolean;\n reference?: boolean;\n}): boolean {\n return !opts?.editing && !opts?.reference && !opts?.templateId && !opts?.systemId;\n}\n\n/** The chat lane's routing note - conditional on purpose, or \"hi\" designs a page. */\nexport function chatDirective(message: string): string {\n return (\n `${message}\\n\\n` +\n `(If this turn asks for a web page, landing page, site or UI mockup, run the ` +\n `${WEB_DESIGN_CONNECTOR_ID} action ${DESIGN_GENERATE_ACTION} — do not search for another ` +\n `connector, and do not generate an image instead. ${OUTPUT_CONTRACT} ` +\n `If it is ordinary conversation, just reply.)`\n );\n}\n\n/** Reads the agent's SSE body as it arrives. */\nexport class AgentSseParser {\n private buf = '';\n text = '';\n sessionId: string | null = null;\n error: string | null = null;\n done = false;\n /** Tool calls seen: work happened even when no text did. */\n toolCalls = 0;\n /** A \"⚠\" notice, shown only once something follows it. */\n private held = '';\n\n constructor(\n private readonly onDelta?: (text: string) => void,\n private readonly onStatus?: (status: string) => void,\n ) {}\n\n feed(chunk: string): void {\n this.buf += chunk.replace(/\\r\\n/g, '\\n');\n let at = this.buf.indexOf('\\n\\n');\n while (at >= 0) {\n this.block(this.buf.slice(0, at));\n this.buf = this.buf.slice(at + 2);\n at = this.buf.indexOf('\\n\\n');\n }\n }\n\n end(): void {\n if (this.buf.trim()) this.block(this.buf);\n this.buf = '';\n this.release();\n }\n\n /** The stream ended without an answer, any work or a `done`: the connection dropped. */\n get dropped(): boolean {\n return !this.done && !this.text && !this.toolCalls;\n }\n\n private block(block: string): void {\n let event = 'message';\n const data: string[] = [];\n for (const line of block.split('\\n')) {\n if (line.startsWith('event:')) event = line.slice(6).trim();\n else if (line.startsWith('data:')) data.push(line.slice(5).trimStart());\n }\n let payload: Record<string, unknown> = {};\n try {\n payload = JSON.parse(data.join('\\n')) as Record<string, unknown>;\n } catch {\n return;\n }\n if (event !== 'output' && event !== 'error') this.release();\n switch (event) {\n case 'session':\n if (typeof payload.session_id === 'string') this.sessionId = payload.session_id;\n break;\n case 'delta':\n if (typeof payload.text === 'string') this.push(payload.text);\n break;\n case 'output': {\n const text = typeof payload.text === 'string' ? payload.text.trim() : '';\n if (!text) break;\n this.release();\n if (text.startsWith('⚠')) this.held = text;\n else this.push(this.gap() + text);\n break;\n }\n case 'tool_call':\n this.toolCalls += 1;\n break;\n case 'status':\n if (typeof payload.status === 'string') this.onStatus?.(payload.status);\n break;\n case 'error':\n if (payload.turn_failed === true || payload.turn_failed === 'true') this.held = '';\n else this.release();\n this.error = String(payload.error ?? 'The design assistant failed.');\n break;\n case 'done':\n this.done = true;\n break;\n default:\n break;\n }\n }\n\n private gap(): string {\n return this.text && !this.text.endsWith('\\n') ? '\\n\\n' : '';\n }\n\n private release(): void {\n if (!this.held) return;\n const notice = this.held;\n this.held = '';\n this.push(this.gap() + notice);\n }\n\n private push(text: string): void {\n this.text += text;\n this.onDelta?.(text);\n }\n}\n\nexport interface AgentTurnTransport {\n /** One chat turn; the session is opened on first use and reused for the board. */\n turn: (\n message: string,\n opts: {\n sessionId?: string | null;\n model?: string;\n /** The board's chat channel: the agent stores both sides of the turn there. */\n channelId?: string;\n /** Send the message as is (a pinned directive) instead of wrapping it in the chat routing note. */\n raw?: boolean;\n onDelta?: (t: string) => void;\n onStatus?: (s: string) => void;\n signal?: AbortSignal;\n },\n ) => Promise<{ text: string; sessionId: string }>;\n}\n\n/** Past this a turn is stuck, not slow: it may itself run the generator (web TURN_TIMEOUT_MS). */\nconst TURN_TIMEOUT_MS = GENERATE_TIMEOUT_MS + 20_000;\n\nexport function createAgentTurnTransport(token: string, indexUrl: string): AgentTurnTransport {\n const agent = deriveAgentEndpoint(indexUrl);\n const backend = deriveBackendGraphqlUrl(indexUrl);\n const skill = DESIGN_SKILLS.join(',');\n\n const openSession = async (model?: string, channelId?: string): Promise<string> => {\n const resp = await fetch(`${agent}/v1/agent/session`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` },\n body: JSON.stringify({\n skill,\n ...(model ? { model } : {}),\n ...(channelId ? { channel_id: channelId } : {}),\n }),\n });\n if (!resp.ok) throw new Error(`The design assistant could not start (HTTP ${resp.status}).`);\n const info = (await resp.json()) as { session_id?: string };\n if (!info.session_id) throw new Error('The design assistant did not open a session.');\n return info.session_id;\n };\n\n return {\n turn: async (message, opts) => {\n const sessionId = opts.sessionId || (await openSession(opts.model, opts.channelId));\n return new Promise((resolve, reject) => {\n const parser = new AgentSseParser(opts.onDelta, opts.onStatus);\n const xhr = new XMLHttpRequest();\n let seen = 0;\n let settled = false;\n const settle = (fn: () => void) => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n opts.signal?.removeEventListener?.('abort', onAbort);\n fn();\n };\n const pump = () => {\n const text = xhr.responseText ?? '';\n if (text.length > seen) {\n parser.feed(text.slice(seen));\n seen = text.length;\n }\n };\n const onAbort = () => {\n xhr.abort();\n settle(() => reject(new Error('Stopped.')));\n };\n const timer = setTimeout(() => {\n xhr.abort();\n settle(() => reject(new Error('The design assistant took too long. Try again.')));\n }, TURN_TIMEOUT_MS);\n opts.signal?.addEventListener?.('abort', onAbort);\n xhr.open('POST', `${agent}/v1/agent/chat`);\n xhr.setRequestHeader('Content-Type', 'application/json');\n xhr.setRequestHeader('Authorization', `Bearer ${token}`);\n xhr.onprogress = pump;\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 3) pump();\n };\n xhr.onerror = () =>\n settle(() => reject(new Error('Could not reach the design assistant. Check your connection.')));\n xhr.onload = () => {\n pump();\n parser.end();\n if (xhr.status < 200 || xhr.status >= 300) {\n settle(() => reject(new Error(`The design assistant failed (HTTP ${xhr.status}).`)));\n return;\n }\n if (parser.error && !parser.text.trim()) {\n settle(() => reject(new Error(parser.error!)));\n return;\n }\n if (parser.dropped) {\n settle(() => reject(new Error('The connection to the agent closed before it answered.')));\n return;\n }\n settle(() => resolve({ text: parser.text, sessionId: parser.sessionId ?? sessionId }));\n };\n xhr.send(\n JSON.stringify({\n message: opts.raw ? message : chatDirective(message),\n stream: true,\n session_id: sessionId,\n ...(opts.channelId ? { channel_id: opts.channelId } : {}),\n skill,\n ...(opts.model ? { model: opts.model } : {}),\n ...(backend ? { backend_graphql_url: backend } : {}),\n }),\n );\n });\n },\n };\n}\n"],"names":["_a","_b"],"mappings":"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"}
@@ -0,0 +1,218 @@
1
+ import {unescapeJsonDocument}from'./designDocument.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 MAX_BOARD_CREATIONS = 12;
21
+ const MAX_BOARD_BYTES = 6e6;
22
+ function newBoardId() {
23
+ var _a, _b;
24
+ const bytes = new Uint8Array(16);
25
+ let filled = false;
26
+ try {
27
+ (_b = (_a = globalThis.crypto) == null ? void 0 : _a.getRandomValues) == null ? void 0 : _b.call(_a, bytes);
28
+ filled = bytes.some((b) => b !== 0);
29
+ } catch (e) {
30
+ filled = false;
31
+ }
32
+ if (!filled) for (let i = 0; i < 16; i += 1) bytes[i] = Math.floor(Math.random() * 256);
33
+ bytes[6] = bytes[6] & 15 | 64;
34
+ bytes[8] = bytes[8] & 63 | 128;
35
+ const h = Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join("");
36
+ return `${h.slice(0, 8)}-${h.slice(8, 12)}-${h.slice(12, 16)}-${h.slice(16, 20)}-${h.slice(20)}`;
37
+ }
38
+ function buildDesignBoardState(creations, now = Date.now()) {
39
+ var _a;
40
+ const kept = creations.slice(0, MAX_BOARD_CREATIONS);
41
+ while (kept.length > 1 && JSON.stringify(kept).length > MAX_BOARD_BYTES) kept.pop();
42
+ return {
43
+ version: 1,
44
+ savedAt: now,
45
+ title: (_a = kept[0]) == null ? void 0 : _a.title,
46
+ creations: kept
47
+ };
48
+ }
49
+ function designBoardSignature(state) {
50
+ return JSON.stringify(state.creations.map((c) => {
51
+ var _a, _b;
52
+ return [(_a = c.id) != null ? _a : "", c.title, c.html.length, (_b = c.url) != null ? _b : ""];
53
+ }));
54
+ }
55
+ function decode(value) {
56
+ if (typeof value !== "string") return value;
57
+ try {
58
+ return JSON.parse(value);
59
+ } catch (e) {
60
+ return null;
61
+ }
62
+ }
63
+ function coerceDesignBoard(value) {
64
+ const parsed = decode(value);
65
+ if (!parsed || parsed.version !== 1 || !Array.isArray(parsed.creations)) return null;
66
+ const creations = parsed.creations.filter((c) => c && typeof c.html === "string").map((c) => __spreadProps(__spreadValues({}, c), {
67
+ html: unescapeJsonDocument(c.html)
68
+ }));
69
+ return __spreadProps(__spreadValues({}, parsed), {
70
+ creations
71
+ });
72
+ }
73
+ const creationKey = (c) => {
74
+ var _a;
75
+ return (_a = c.id) != null ? _a : c.title;
76
+ };
77
+ function landCreation(creations, landed, replaceKey) {
78
+ const key = replaceKey != null ? replaceKey : creationKey(landed);
79
+ const at = creations.findIndex((c) => creationKey(c) === key);
80
+ if (at < 0) return [landed, ...creations];
81
+ const next = [...creations];
82
+ next[at] = landed;
83
+ return next;
84
+ }
85
+ const FIELDS = "channelId title metadata updatedAt";
86
+ async function gql(opts, query, variables) {
87
+ var _a, _b, _c;
88
+ if (!opts.url) return {
89
+ data: null,
90
+ error: "No design index configured for this build."
91
+ };
92
+ try {
93
+ const response = await fetch(opts.url, {
94
+ method: "POST",
95
+ headers: __spreadValues({
96
+ "content-type": "application/json"
97
+ }, opts.token ? {
98
+ authorization: `Bearer ${opts.token}`
99
+ } : {}),
100
+ body: JSON.stringify({
101
+ query,
102
+ variables
103
+ }),
104
+ signal: opts.signal
105
+ });
106
+ if (response.status === 401 || response.status === 403) {
107
+ return {
108
+ data: null,
109
+ error: "Your session expired. Sign in again to see your designs."
110
+ };
111
+ }
112
+ if (!response.ok) return {
113
+ data: null,
114
+ error: `The design index is unreachable (HTTP ${response.status}).`
115
+ };
116
+ const payload = await response.json();
117
+ if ((_a = payload == null ? void 0 : payload.errors) == null ? void 0 : _a.length) {
118
+ const raw = ((_b = payload.errors[0]) == null ? void 0 : _b.message) || "";
119
+ return {
120
+ data: null,
121
+ error: /tenantid|unauthenticated|unauthorized|forbidden/i.test(raw) ? "Your session expired. Sign in again to see your designs." : raw || "The design index rejected the request."
122
+ };
123
+ }
124
+ return {
125
+ data: (_c = payload == null ? void 0 : payload.data) != null ? _c : null,
126
+ error: null
127
+ };
128
+ } catch (err) {
129
+ if (err instanceof Error && err.name === "AbortError") return {
130
+ data: null,
131
+ error: null
132
+ };
133
+ return {
134
+ data: null,
135
+ error: "Could not reach the design index. Check your connection."
136
+ };
137
+ }
138
+ }
139
+ async function pushDesignBoard(opts, boardId, state) {
140
+ var _a;
141
+ const {
142
+ data,
143
+ error
144
+ } = await gql(opts, `mutation RegisterSurfaceChannel($input: RegisterSurfaceChannelInput!) {
145
+ registerSurfaceChannel(input: $input) { ${FIELDS} }
146
+ }`, {
147
+ input: __spreadProps(__spreadValues({
148
+ surface: "design",
149
+ channelId: boardId,
150
+ sessionId: boardId
151
+ }, state.title ? {
152
+ title: state.title
153
+ } : {}), {
154
+ metadata: state
155
+ })
156
+ });
157
+ if (error) return {
158
+ ok: false,
159
+ error
160
+ };
161
+ return ((_a = data == null ? void 0 : data.registerSurfaceChannel) == null ? void 0 : _a.channelId) ? {
162
+ ok: true,
163
+ error: null
164
+ } : {
165
+ ok: false,
166
+ error: "Could not save the board. Recent designs are not stored yet."
167
+ };
168
+ }
169
+ async function pullDesignBoard(opts, boardId) {
170
+ var _a;
171
+ const {
172
+ data
173
+ } = await gql(opts, `query SurfaceChannel($surface: SurfaceType!, $channelId: String!) {
174
+ surfaceChannel(surface: $surface, channelId: $channelId) { ${FIELDS} }
175
+ }`, {
176
+ surface: "design",
177
+ channelId: boardId
178
+ });
179
+ return coerceDesignBoard((_a = data == null ? void 0 : data.surfaceChannel) == null ? void 0 : _a.metadata);
180
+ }
181
+ async function pullDesignBoards(opts) {
182
+ var _a, _b, _c;
183
+ const {
184
+ data,
185
+ error
186
+ } = await gql(opts, `query MySurfaceChannels($surface: SurfaceType) { mySurfaceChannels(surface: $surface) { ${FIELDS} } }`, {
187
+ surface: "design"
188
+ });
189
+ const boards = [];
190
+ for (const row of (_a = data == null ? void 0 : data.mySurfaceChannels) != null ? _a : []) {
191
+ const state = coerceDesignBoard(row.metadata);
192
+ const id = typeof row.channelId === "string" ? row.channelId : "";
193
+ if (!id || !state || state.creations.length === 0) continue;
194
+ boards.push({
195
+ id,
196
+ title: state.title,
197
+ creationCount: state.creations.length,
198
+ savedAt: (_b = state.savedAt) != null ? _b : 0,
199
+ preview: (_c = state.creations[0]) == null ? void 0 : _c.html
200
+ });
201
+ }
202
+ boards.sort((a, b) => b.savedAt - a.savedAt);
203
+ return {
204
+ boards,
205
+ error
206
+ };
207
+ }
208
+ async function deleteDesignBoard(opts, boardId) {
209
+ const {
210
+ data
211
+ } = await gql(opts, `mutation DeleteSurfaceChannel($surface: SurfaceType!, $channelId: String!) {
212
+ deleteSurfaceChannel(surface: $surface, channelId: $channelId)
213
+ }`, {
214
+ surface: "design",
215
+ channelId: boardId
216
+ });
217
+ return Boolean(data == null ? void 0 : data.deleteSurfaceChannel);
218
+ }export{MAX_BOARD_BYTES,MAX_BOARD_CREATIONS,buildDesignBoardState,coerceDesignBoard,creationKey,deleteDesignBoard,designBoardSignature,landCreation,newBoardId,pullDesignBoard,pullDesignBoards,pushDesignBoard};//# sourceMappingURL=designBoard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"designBoard.js","sources":["../../../../src/features/design/surface/designBoard.ts"],"sourcesContent":["/**\n * Design boards - native twin of design-surface `state/designBoard.ts` and\n * `types.ts`: one saved project board per session, the whole board riding in\n * the SurfaceChannel row's `metadata` on the `design` surface, keyed by the\n * board id (`channelId === sessionId`).\n *\n * Same rows as the web Design surface, so a board started on the phone opens\n * on the web and the reverse. The `version: 1 && creations[]` shape gate keeps\n * the first native editor's rows (also on `design`, shaped `pages[]`) out of\n * the grid, and theirs keeps boards out of it.\n *\n * Pure apart from `fetch`: runs under jest as-is.\n */\nimport { unescapeJsonDocument } from './designDocument';\n\n/** One generated design: a single self-contained HTML document (web `DesignArtifact`). */\nexport interface DesignArtifact {\n /** Stable library id - lets a creation be edited in place. */\n id?: string;\n html: string;\n /** Public URL of the uploaded HTML, when the connector stored one. */\n url?: string | null;\n title: string;\n systemId: string;\n templateId: string;\n /** Recovered from a cut-off stream: the document is truncated, not finished. */\n partial?: boolean;\n boardId?: string;\n}\n\n/** 12 creations / 6 MB per board: the index body limit is ~8 MB and every page is inlined. */\nexport const MAX_BOARD_CREATIONS = 12;\nexport const MAX_BOARD_BYTES = 6_000_000;\n\nexport interface PersistedDesignBoard {\n version: 1;\n savedAt: number;\n /** The newest creation's title, so a tile reads like its work. */\n title?: string;\n creations: DesignArtifact[];\n}\n\n/** One tile in the board grid. */\nexport interface DesignBoardSummary {\n id: string;\n title?: string;\n creationCount: number;\n savedAt: number;\n /** Newest creation's html - the tile's preview. */\n preview?: string;\n}\n\n/** Mint a board id (web `crypto.randomUUID()`); the index upserts on it. */\nexport function newBoardId(): string {\n const bytes = new Uint8Array(16);\n let filled = false;\n try {\n (globalThis.crypto as Crypto | undefined)?.getRandomValues?.(bytes);\n filled = bytes.some((b) => b !== 0);\n } catch {\n filled = false;\n }\n if (!filled) for (let i = 0; i < 16; i += 1) bytes[i] = Math.floor(Math.random() * 256);\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const h = Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');\n return `${h.slice(0, 8)}-${h.slice(8, 12)}-${h.slice(12, 16)}-${h.slice(16, 20)}-${h.slice(20)}`;\n}\n\n/** The state to persist, newest first, trimmed to what the row can carry. */\nexport function buildDesignBoardState(creations: DesignArtifact[], now: number = Date.now()): PersistedDesignBoard {\n const kept = creations.slice(0, MAX_BOARD_CREATIONS);\n while (kept.length > 1 && JSON.stringify(kept).length > MAX_BOARD_BYTES) kept.pop();\n return { version: 1, savedAt: now, title: kept[0]?.title, creations: kept };\n}\n\n/** What makes a board worth a write, comparable across saves (`savedAt` always differs). */\nexport function designBoardSignature(state: PersistedDesignBoard): string {\n return JSON.stringify(state.creations.map((c) => [c.id ?? '', c.title, c.html.length, c.url ?? '']));\n}\n\nfunction decode(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\n/** Validate a decoded board; `metadata` is untrusted JSON from the index. */\nexport function coerceDesignBoard(value: unknown): PersistedDesignBoard | null {\n const parsed = decode(value) as PersistedDesignBoard | null;\n if (!parsed || parsed.version !== 1 || !Array.isArray(parsed.creations)) return null;\n // Repairs boards saved with a still-escaped page; the next save persists the clean html.\n const creations = parsed.creations\n .filter((c) => c && typeof c.html === 'string')\n .map((c) => ({ ...c, html: unescapeJsonDocument(c.html) }));\n return { ...parsed, creations };\n}\n\n/** Same key the web's tab sync uses: the id when the connector assigned one, else the title. */\nexport const creationKey = (c: Pick<DesignArtifact, 'id' | 'title'>): string => c.id ?? c.title;\n\n/**\n * A creation landing on a board: an edit (same key) replaces its creation in\n * place, anything new goes on top.\n */\nexport function landCreation(\n creations: readonly DesignArtifact[],\n landed: DesignArtifact,\n replaceKey?: string,\n): DesignArtifact[] {\n const key = replaceKey ?? creationKey(landed);\n const at = creations.findIndex((c) => creationKey(c) === key);\n if (at < 0) return [landed, ...creations];\n const next = [...creations];\n next[at] = landed;\n return next;\n}\n\n// ── Index transport ──────────────────────────────────────────────────────\n\nexport interface BoardIndexOptions {\n url: string;\n token?: string | null;\n signal?: AbortSignal;\n}\n\nconst FIELDS = 'channelId title metadata updatedAt';\n\nasync function gql<T>(\n opts: BoardIndexOptions,\n query: string,\n variables: Record<string, unknown>,\n): Promise<{ data: T | null; error: string | null }> {\n if (!opts.url) return { data: null, error: 'No design index configured for this build.' };\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({ query, variables }),\n signal: opts.signal,\n });\n if (response.status === 401 || response.status === 403) {\n return { data: null, error: 'Your session expired. Sign in again to see your designs.' };\n }\n if (!response.ok) return { data: null, error: `The design index is unreachable (HTTP ${response.status}).` };\n const payload = (await response.json()) as { data?: T; errors?: Array<{ message?: string }> };\n if (payload?.errors?.length) {\n const raw = payload.errors[0]?.message || '';\n return {\n data: null,\n error: /tenantid|unauthenticated|unauthorized|forbidden/i.test(raw)\n ? 'Your session expired. Sign in again to see your designs.'\n : raw || 'The design index rejected the request.',\n };\n }\n return { data: payload?.data ?? null, error: null };\n } catch (err) {\n if (err instanceof Error && err.name === 'AbortError') return { data: null, error: null };\n return { data: null, error: 'Could not reach the design index. Check your connection.' };\n }\n}\n\n/**\n * Write one board (web `pushDesignBoard`). `registerSurfaceChannel` is the\n * idempotent upsert and `metadata` is replaced wholesale: the complete state\n * goes every time. The board indexes itself under its own id as the session.\n */\nexport async function pushDesignBoard(\n opts: BoardIndexOptions,\n boardId: string,\n state: PersistedDesignBoard,\n): Promise<{ ok: boolean; error: string | null }> {\n const { data, error } = await gql<{ registerSurfaceChannel?: { channelId?: string } | null }>(\n opts,\n `mutation RegisterSurfaceChannel($input: RegisterSurfaceChannelInput!) {\n registerSurfaceChannel(input: $input) { ${FIELDS} }\n }`,\n {\n input: {\n surface: 'design',\n channelId: boardId,\n sessionId: boardId,\n ...(state.title ? { title: state.title } : {}),\n metadata: state,\n },\n },\n );\n if (error) return { ok: false, error };\n return data?.registerSurfaceChannel?.channelId\n ? { ok: true, error: null }\n : { ok: false, error: 'Could not save the board. Recent designs are not stored yet.' };\n}\n\n/** One board, or null when absent, malformed or unreachable (web `pullDesignBoard`). */\nexport async function pullDesignBoard(opts: BoardIndexOptions, boardId: string): Promise<PersistedDesignBoard | null> {\n const { data } = await gql<{ surfaceChannel?: { metadata?: unknown } | null }>(\n opts,\n `query SurfaceChannel($surface: SurfaceType!, $channelId: String!) {\n surfaceChannel(surface: $surface, channelId: $channelId) { ${FIELDS} }\n }`,\n { surface: 'design', channelId: boardId },\n );\n return coerceDesignBoard(data?.surfaceChannel?.metadata);\n}\n\n/** Every board this user has, newest first (web `pullDesignBoards`). */\nexport async function pullDesignBoards(\n opts: BoardIndexOptions,\n): Promise<{ boards: DesignBoardSummary[]; error: string | null }> {\n const { data, error } = await gql<{ mySurfaceChannels?: Array<Record<string, unknown>> | null }>(\n opts,\n `query MySurfaceChannels($surface: SurfaceType) { mySurfaceChannels(surface: $surface) { ${FIELDS} } }`,\n { surface: 'design' },\n );\n const boards: DesignBoardSummary[] = [];\n for (const row of data?.mySurfaceChannels ?? []) {\n const state = coerceDesignBoard(row.metadata);\n const id = typeof row.channelId === 'string' ? row.channelId : '';\n if (!id || !state || state.creations.length === 0) continue;\n boards.push({\n id,\n title: state.title,\n creationCount: state.creations.length,\n savedAt: state.savedAt ?? 0,\n preview: state.creations[0]?.html,\n });\n }\n boards.sort((a, b) => b.savedAt - a.savedAt);\n return { boards, error };\n}\n\n/** Hard-delete one board row. */\nexport async function deleteDesignBoard(opts: BoardIndexOptions, boardId: string): Promise<boolean> {\n const { data } = await gql<{ deleteSurfaceChannel?: boolean | null }>(\n opts,\n `mutation DeleteSurfaceChannel($surface: SurfaceType!, $channelId: String!) {\n deleteSurfaceChannel(surface: $surface, channelId: $channelId)\n }`,\n { surface: 'design', channelId: boardId },\n );\n return Boolean(data?.deleteSurfaceChannel);\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AA+BO,MAAM,mBAAsB,GAAA;AAC5B,MAAM,eAAkB,GAAA;AAoBxB,SAAS,UAAqB,GAAA;AApDrC,EAAA,IAAA,EAAA,EAAA,EAAA;AAqDE,EAAM,MAAA,KAAA,GAAQ,IAAI,UAAA,CAAW,EAAE,CAAA;AAC/B,EAAA,IAAI,MAAS,GAAA,KAAA;AACb,EAAI,IAAA;AACF,IAAA,CAAC,EAAW,GAAA,CAAA,EAAA,GAAA,UAAA,CAAA,MAAA,KAAX,IAA0C,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,eAAA,KAA1C,IAA4D,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,KAAA,CAAA;AAC7D,IAAA,MAAA,GAAS,KAAM,CAAA,IAAA,CAAK,CAAK,CAAA,KAAA,CAAA,KAAM,CAAC,CAAA;AAAA,GAC1B,CAAA,OAAA,CAAA,EAAA;AACN,IAAS,MAAA,GAAA,KAAA;AAAA;AAEX,EAAA,IAAI,CAAC,MAAQ,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,IAAI,EAAI,EAAA,CAAA,IAAK,CAAG,EAAA,KAAA,CAAM,CAAC,CAAI,GAAA,IAAA,CAAK,MAAM,IAAK,CAAA,MAAA,KAAW,GAAG,CAAA;AACtF,EAAA,KAAA,CAAM,CAAC,CAAA,GAAI,KAAM,CAAA,CAAC,IAAI,EAAO,GAAA,EAAA;AAC7B,EAAA,KAAA,CAAM,CAAC,CAAA,GAAI,KAAM,CAAA,CAAC,IAAI,EAAO,GAAA,GAAA;AAC7B,EAAA,MAAM,CAAI,GAAA,KAAA,CAAM,IAAK,CAAA,KAAA,EAAO,OAAK,CAAE,CAAA,QAAA,CAAS,EAAE,CAAA,CAAE,SAAS,CAAG,EAAA,GAAG,CAAC,CAAA,CAAE,KAAK,EAAE,CAAA;AACzE,EAAA,OAAO,CAAG,EAAA,CAAA,CAAE,KAAM,CAAA,CAAA,EAAG,CAAC,CAAC,CAAI,CAAA,EAAA,CAAA,CAAE,KAAM,CAAA,CAAA,EAAG,EAAE,CAAC,CAAI,CAAA,EAAA,CAAA,CAAE,KAAM,CAAA,EAAA,EAAI,EAAE,CAAC,CAAI,CAAA,EAAA,CAAA,CAAE,KAAM,CAAA,EAAA,EAAI,EAAE,CAAC,CAAI,CAAA,EAAA,CAAA,CAAE,KAAM,CAAA,EAAE,CAAC,CAAA,CAAA;AAChG;AAGO,SAAS,qBAAsB,CAAA,SAAA,EAA6B,GAAc,GAAA,IAAA,CAAK,KAA6B,EAAA;AArEnH,EAAA,IAAA,EAAA;AAsEE,EAAA,MAAM,IAAO,GAAA,SAAA,CAAU,KAAM,CAAA,CAAA,EAAG,mBAAmB,CAAA;AACnD,EAAO,OAAA,IAAA,CAAK,MAAS,GAAA,CAAA,IAAK,IAAK,CAAA,SAAA,CAAU,IAAI,CAAE,CAAA,MAAA,GAAS,eAAiB,EAAA,IAAA,CAAK,GAAI,EAAA;AAClF,EAAO,OAAA;AAAA,IACL,OAAS,EAAA,CAAA;AAAA,IACT,OAAS,EAAA,GAAA;AAAA,IACT,KAAO,EAAA,CAAA,EAAA,GAAA,IAAA,CAAK,CAAC,CAAA,KAAN,IAAS,GAAA,MAAA,GAAA,EAAA,CAAA,KAAA;AAAA,IAChB,SAAW,EAAA;AAAA,GACb;AACF;AAGO,SAAS,qBAAqB,KAAqC,EAAA;AACxE,EAAA,OAAO,IAAK,CAAA,SAAA,CAAU,KAAM,CAAA,SAAA,CAAU,IAAI,CAAE,CAAA,KAAA;AAlF9C,IAAA,IAAA,EAAA,EAAA,EAAA;AAkFiD,IAAA,OAAA,CAAA,CAAC,EAAE,GAAA,CAAA,CAAA,EAAA,KAAF,IAAQ,GAAA,EAAA,GAAA,EAAA,EAAI,CAAE,CAAA,KAAA,EAAO,CAAE,CAAA,IAAA,CAAK,MAAQ,EAAA,CAAA,EAAA,GAAA,CAAA,CAAE,GAAF,KAAA,IAAA,GAAA,EAAA,GAAS,EAAE,CAAA;AAAA,GAAC,CAAC,CAAA;AACnG;AACA,SAAS,OAAO,KAAyB,EAAA;AACvC,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;AAGO,SAAS,kBAAkB,KAA6C,EAAA;AAC7E,EAAM,MAAA,MAAA,GAAS,OAAO,KAAK,CAAA;AAC3B,EAAI,IAAA,CAAC,MAAU,IAAA,MAAA,CAAO,OAAY,KAAA,CAAA,IAAK,CAAC,KAAA,CAAM,OAAQ,CAAA,MAAA,CAAO,SAAS,CAAA,EAAU,OAAA,IAAA;AAEhF,EAAA,MAAM,SAAY,GAAA,MAAA,CAAO,SAAU,CAAA,MAAA,CAAO,OAAK,CAAK,IAAA,OAAO,CAAE,CAAA,IAAA,KAAS,QAAQ,CAAA,CAAE,GAAI,CAAA,CAAA,CAAA,KAAM,iCACrF,CADqF,CAAA,EAAA;AAAA,IAExF,IAAA,EAAM,oBAAqB,CAAA,CAAA,CAAE,IAAI;AAAA,GACjC,CAAA,CAAA;AACF,EAAA,OAAO,iCACF,MADE,CAAA,EAAA;AAAA,IAEL;AAAA,GACF,CAAA;AACF;AAGa,MAAA,WAAA,GAAc,CAAC,CAAiD,KAAA;AA7G7E,EAAA,IAAA,EAAA;AA6GgF,EAAE,OAAA,CAAA,EAAA,GAAA,CAAA,CAAA,EAAA,KAAF,YAAQ,CAAE,CAAA,KAAA;AAAA;AAM1E,SAAA,YAAA,CAAa,SAAsC,EAAA,MAAA,EAAwB,UAAuC,EAAA;AAChI,EAAM,MAAA,GAAA,GAAM,UAAc,IAAA,IAAA,GAAA,UAAA,GAAA,WAAA,CAAY,MAAM,CAAA;AAC5C,EAAA,MAAM,KAAK,SAAU,CAAA,SAAA,CAAU,OAAK,WAAY,CAAA,CAAC,MAAM,GAAG,CAAA;AAC1D,EAAA,IAAI,KAAK,CAAG,EAAA,OAAO,CAAC,MAAA,EAAQ,GAAG,SAAS,CAAA;AACxC,EAAM,MAAA,IAAA,GAAO,CAAC,GAAG,SAAS,CAAA;AAC1B,EAAA,IAAA,CAAK,EAAE,CAAI,GAAA,MAAA;AACX,EAAO,OAAA,IAAA;AACT;AASA,MAAM,MAAS,GAAA,oCAAA;AACf,eAAe,GAAA,CAAO,IAAyB,EAAA,KAAA,EAAe,SAG3D,EAAA;AAvIH,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAwIE,EAAI,IAAA,CAAC,IAAK,CAAA,GAAA,EAAY,OAAA;AAAA,IACpB,IAAM,EAAA,IAAA;AAAA,IACN,KAAO,EAAA;AAAA,GACT;AACA,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,KAAA;AAAA,QACA;AAAA,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,IAAM,EAAA,IAAA;AAAA,QACN,KAAO,EAAA;AAAA,OACT;AAAA;AAEF,IAAI,IAAA,CAAC,QAAS,CAAA,EAAA,EAAW,OAAA;AAAA,MACvB,IAAM,EAAA,IAAA;AAAA,MACN,KAAA,EAAO,CAAyC,sCAAA,EAAA,QAAA,CAAS,MAAM,CAAA,EAAA;AAAA,KACjE;AACA,IAAM,MAAA,OAAA,GAAW,MAAM,QAAA,CAAS,IAAK,EAAA;AAMrC,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,MAAM,QAAM,EAAQ,GAAA,OAAA,CAAA,MAAA,CAAO,CAAC,CAAA,KAAhB,mBAAmB,OAAW,KAAA,EAAA;AAC1C,MAAO,OAAA;AAAA,QACL,IAAM,EAAA,IAAA;AAAA,QACN,OAAO,kDAAmD,CAAA,IAAA,CAAK,GAAG,CAAA,GAAI,6DAA6D,GAAO,IAAA;AAAA,OAC5I;AAAA;AAEF,IAAO,OAAA;AAAA,MACL,IAAA,EAAA,CAAM,EAAS,GAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,IAAA,KAAT,IAAiB,GAAA,EAAA,GAAA,IAAA;AAAA,MACvB,KAAO,EAAA;AAAA,KACT;AAAA,WACO,GAAK,EAAA;AACZ,IAAA,IAAI,GAAe,YAAA,KAAA,IAAS,GAAI,CAAA,IAAA,KAAS,cAAqB,OAAA;AAAA,MAC5D,IAAM,EAAA,IAAA;AAAA,MACN,KAAO,EAAA;AAAA,KACT;AACA,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,IAAA;AAAA,MACN,KAAO,EAAA;AAAA,KACT;AAAA;AAEJ;AAOsB,eAAA,eAAA,CAAgB,IAAyB,EAAA,OAAA,EAAiB,KAG7E,EAAA;AA1MH,EAAA,IAAA,EAAA;AA2ME,EAAM,MAAA;AAAA,IACJ,IAAA;AAAA,IACA;AAAA,GACF,GAAI,MAAM,GAAA,CAIP,IAAM,EAAA,CAAA;AAAA,oDAAA,EAC2C,MAAM,CAAA;AAAA,SAChD,CAAA,EAAA;AAAA,IACR,KAAO,EAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACL,OAAS,EAAA,QAAA;AAAA,MACT,SAAW,EAAA,OAAA;AAAA,MACX,SAAW,EAAA;AAAA,KAAA,EACP,MAAM,KAAQ,GAAA;AAAA,MAChB,OAAO,KAAM,CAAA;AAAA,KACf,GAAI,EANC,CAAA,EAAA;AAAA,MAOL,QAAU,EAAA;AAAA,KACZ;AAAA,GACD,CAAA;AACD,EAAA,IAAI,OAAc,OAAA;AAAA,IAChB,EAAI,EAAA,KAAA;AAAA,IACJ;AAAA,GACF;AACA,EAAO,OAAA,CAAA,CAAA,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,sBAAN,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAA8B,SAAY,IAAA;AAAA,IAC/C,EAAI,EAAA,IAAA;AAAA,IACJ,KAAO,EAAA;AAAA,GACL,GAAA;AAAA,IACF,EAAI,EAAA,KAAA;AAAA,IACJ,KAAO,EAAA;AAAA,GACT;AACF;AAGsB,eAAA,eAAA,CAAgB,MAAyB,OAAuD,EAAA;AA7OtH,EAAA,IAAA,EAAA;AA8OE,EAAM,MAAA;AAAA,IACJ;AAAA,GACF,GAAI,MAAM,GAAA,CAIP,IAAM,EAAA,CAAA;AAAA,uEAAA,EAC8D,MAAM,CAAA;AAAA,SACnE,CAAA,EAAA;AAAA,IACR,OAAS,EAAA,QAAA;AAAA,IACT,SAAW,EAAA;AAAA,GACZ,CAAA;AACD,EAAA,OAAO,iBAAkB,CAAA,CAAA,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,cAAN,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,QAAQ,CAAA;AACzD;AAGA,eAAsB,iBAAiB,IAGpC,EAAA;AAjQH,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAkQE,EAAM,MAAA;AAAA,IACJ,IAAA;AAAA,IACA;AAAA,MACE,MAAM,GAAA,CAEP,IAAM,EAAA,CAAA,wFAAA,EAA2F,MAAM,CAAQ,IAAA,CAAA,EAAA;AAAA,IAChH,OAAS,EAAA;AAAA,GACV,CAAA;AACD,EAAA,MAAM,SAA+B,EAAC;AACtC,EAAA,KAAA,MAAW,GAAO,IAAA,CAAA,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,iBAAN,KAAA,IAAA,GAAA,EAAA,GAA2B,EAAI,EAAA;AAC/C,IAAM,MAAA,KAAA,GAAQ,iBAAkB,CAAA,GAAA,CAAI,QAAQ,CAAA;AAC5C,IAAA,MAAM,KAAK,OAAO,GAAA,CAAI,SAAc,KAAA,QAAA,GAAW,IAAI,SAAY,GAAA,EAAA;AAC/D,IAAA,IAAI,CAAC,EAAM,IAAA,CAAC,SAAS,KAAM,CAAA,SAAA,CAAU,WAAW,CAAG,EAAA;AACnD,IAAA,MAAA,CAAO,IAAK,CAAA;AAAA,MACV,EAAA;AAAA,MACA,OAAO,KAAM,CAAA,KAAA;AAAA,MACb,aAAA,EAAe,MAAM,SAAU,CAAA,MAAA;AAAA,MAC/B,OAAA,EAAA,CAAS,EAAM,GAAA,KAAA,CAAA,OAAA,KAAN,IAAiB,GAAA,EAAA,GAAA,CAAA;AAAA,MAC1B,OAAS,EAAA,CAAA,EAAA,GAAA,KAAA,CAAM,SAAU,CAAA,CAAC,MAAjB,IAAoB,GAAA,MAAA,GAAA,EAAA,CAAA;AAAA,KAC9B,CAAA;AAAA;AAEH,EAAA,MAAA,CAAO,KAAK,CAAC,CAAA,EAAG,MAAM,CAAE,CAAA,OAAA,GAAU,EAAE,OAAO,CAAA;AAC3C,EAAO,OAAA;AAAA,IACL,MAAA;AAAA,IACA;AAAA,GACF;AACF;AAGsB,eAAA,iBAAA,CAAkB,MAAyB,OAAmC,EAAA;AAClG,EAAM,MAAA;AAAA,IACJ;AAAA,GACF,GAAI,MAAM,GAAA,CAEP,IAAM,EAAA,CAAA;AAAA;AAAA,SAEC,CAAA,EAAA;AAAA,IACR,OAAS,EAAA,QAAA;AAAA,IACT,SAAW,EAAA;AAAA,GACZ,CAAA;AACD,EAAO,OAAA,OAAA,CAAQ,6BAAM,oBAAoB,CAAA;AAC3C"}