@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
@@ -0,0 +1,266 @@
1
+ import {isComplete,extractDocument,looksLikeDocument}from'./designDocument.js';import {execBody,ExecStreamError}from'./execStream.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 WEB_DESIGN_CONNECTOR_ID = "yantra-web-design";
33
+ const DESIGN_GENERATE_ACTION = "YANTRA_DESIGN_GENERATE";
34
+ const DESIGN_EDIT_ACTION = "YANTRA_DESIGN_EDIT";
35
+ const DESIGN_LIST_TEMPLATES_ACTION = "YANTRA_DESIGN_LIST_TEMPLATES";
36
+ const DESIGN_LIST_TOOLS_ACTION = "YANTRA_DESIGN_LIST_TOOLS";
37
+ const DESIGN_LIST_SYSTEMS_ACTION = "YANTRA_DESIGN_LIST_SYSTEMS";
38
+ const DESIGN_EXTRACT_SYSTEM_ACTION = "YANTRA_DESIGN_EXTRACT_SYSTEM";
39
+ const GENERATE_TIMEOUT_MS = 54e4;
40
+ const EDIT_TIMEOUT_MS = 42e4;
41
+ const CATALOG_TIMEOUT_MS = 6e4;
42
+ const EXTRACT_SYSTEM_TIMEOUT_MS = 3e5;
43
+ const OUTPUT_CONTRACT = "Return the complete HTML document inline in your reply. Do not write it to a file, do not summarize it, and do not stop to confirm.";
44
+ function systemNote(systemId) {
45
+ if (!systemId) return "";
46
+ return `
47
+
48
+ Use the "${systemId}" design system: load its tokens and contract first and build every color, font, radius and spacing value from them. Do not invent a palette from the subject matter.`;
49
+ }
50
+ const ASK_MARKERS = ["AskUserQuestion", "[CDECLI_ASK_USER_QUESTION]"];
51
+ class DesignQuestionError extends Error {
52
+ constructor(question) {
53
+ super(question);
54
+ this.question = question;
55
+ this.name = "DesignQuestionError";
56
+ }
57
+ }
58
+ class DesignNotAPageError extends Error {
59
+ constructor(reply) {
60
+ const clean = reply.replace(/\s+/g, " ").trim();
61
+ super(`The design assistant replied with text instead of a page: \u201C${clean.length > 220 ? `${clean.slice(0, 220)}\u2026` : clean}\u201D`);
62
+ this.reply = reply;
63
+ this.name = "DesignNotAPageError";
64
+ }
65
+ }
66
+ function questionFrom(streamed) {
67
+ var _a;
68
+ const prose = (_a = streamed.split(/(?:⚙\s*)?AskUserQuestion|\[CDECLI_ASK_USER_QUESTION\]/)[0]) != null ? _a : "";
69
+ return prose.trim() || "The design assistant asked a question before generating.";
70
+ }
71
+ function generateParams(p) {
72
+ return __spreadProps(__spreadValues(__spreadValues(__spreadValues({
73
+ brief: `${p.brief}${systemNote(p.systemId)}
74
+
75
+ ${OUTPUT_CONTRACT}`
76
+ }, p.templateId ? {
77
+ templateId: p.templateId
78
+ } : {}), p.systemId ? {
79
+ systemId: p.systemId
80
+ } : {}), p.model ? {
81
+ model: p.model
82
+ } : {}), {
83
+ // Inside the connector params: it streams on params.stream, and the runtime opens its buffering gate on it.
84
+ stream: true
85
+ });
86
+ }
87
+ function editParams(p) {
88
+ return __spreadProps(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues({
89
+ html: p.html,
90
+ instruction: `${p.instruction}
91
+
92
+ ${OUTPUT_CONTRACT}`
93
+ }, p.systemId ? {
94
+ systemId: p.systemId
95
+ } : {}), p.templateId ? {
96
+ templateId: p.templateId
97
+ } : {}), p.model ? {
98
+ model: p.model
99
+ } : {}), p.title ? {
100
+ title: p.title
101
+ } : {}), p.id ? {
102
+ id: p.id
103
+ } : {}), {
104
+ stream: true
105
+ });
106
+ }
107
+ function designDirective(action, params) {
108
+ var _a;
109
+ return `${String((_a = params.brief) != null ? _a : "")}
110
+
111
+ (Run the ${WEB_DESIGN_CONNECTOR_ID} action ${action} with exactly these params: ${JSON.stringify(params)}. Run it now and return the resulting page \u2014 produce it, don't just describe it or list the available actions.)`;
112
+ }
113
+ function designGenerateMessage(p) {
114
+ return designDirective(DESIGN_GENERATE_ACTION, generateParams(p));
115
+ }
116
+ function designEditMessage(p) {
117
+ const _a = editParams(p), {
118
+ model: _model
119
+ } = _a, params = __objRest(_a, [
120
+ "model"
121
+ ]);
122
+ return designDirective(DESIGN_EDIT_ACTION, params);
123
+ }
124
+ function toArtifact(html, data, fallback) {
125
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
126
+ const titleMatch = html.match(/<title>([^<]+)<\/title>/i);
127
+ const id = (_a = data.id) != null ? _a : fallback.id;
128
+ return __spreadValues(__spreadProps(__spreadValues({}, id ? {
129
+ id
130
+ } : {}), {
131
+ html,
132
+ url: (_b = data.url) != null ? _b : null,
133
+ title: String((_h = (_g = (_e = (_c = data.title) != null ? _c : fallback.title) != null ? _e : (_d = titleMatch == null ? void 0 : titleMatch[1]) == null ? void 0 : _d.trim()) != null ? _g : (_f = fallback.brief) == null ? void 0 : _f.slice(0, 60)) != null ? _h : "Design"),
134
+ systemId: String((_j = (_i = data.systemId) != null ? _i : fallback.systemId) != null ? _j : "claude"),
135
+ templateId: String((_l = (_k = data.templateId) != null ? _k : fallback.templateId) != null ? _l : "landing")
136
+ }), !isComplete(html) ? {
137
+ partial: true
138
+ } : {});
139
+ }
140
+ async function runPageAction(transport, action, params, timeoutMs, label, onProgress, signal) {
141
+ var _a, _b;
142
+ let streamed = "";
143
+ const collect = (chunk) => {
144
+ streamed += chunk;
145
+ onProgress == null ? void 0 : onProgress(chunk);
146
+ if (ASK_MARKERS.some((m) => chunk.includes(m))) throw new DesignQuestionError(questionFrom(streamed));
147
+ };
148
+ let data;
149
+ try {
150
+ const result = await transport.run(execBody(WEB_DESIGN_CONNECTOR_ID, action, params, timeoutMs), label, collect, signal);
151
+ data = (_a = result.data) != null ? _a : result;
152
+ } catch (err) {
153
+ if (err instanceof DesignQuestionError) throw err;
154
+ if (ASK_MARKERS.some((m) => streamed.includes(m))) throw new DesignQuestionError(questionFrom(streamed));
155
+ const recovered = extractDocument(streamed || (err instanceof ExecStreamError ? err.progress : ""));
156
+ if (!recovered) throw err;
157
+ data = {
158
+ html: recovered
159
+ };
160
+ }
161
+ let html = String((_b = data.html) != null ? _b : "");
162
+ if (!looksLikeDocument(html)) {
163
+ const recovered = extractDocument(streamed);
164
+ if (!recovered) throw new DesignNotAPageError(html || streamed);
165
+ html = recovered;
166
+ }
167
+ return {
168
+ html,
169
+ data
170
+ };
171
+ }
172
+ async function generateDesign(transport, p, onProgress, signal) {
173
+ const {
174
+ html,
175
+ data
176
+ } = await runPageAction(transport, DESIGN_GENERATE_ACTION, generateParams(p), GENERATE_TIMEOUT_MS, "Generate design", onProgress, signal);
177
+ return toArtifact(html, data, {
178
+ brief: p.brief,
179
+ systemId: p.systemId,
180
+ templateId: p.templateId
181
+ });
182
+ }
183
+ async function editDesign(transport, p, onProgress, signal) {
184
+ const {
185
+ html,
186
+ data
187
+ } = await runPageAction(transport, DESIGN_EDIT_ACTION, editParams(p), EDIT_TIMEOUT_MS, "Edit design", onProgress, signal);
188
+ return toArtifact(html, data, {
189
+ title: p.title,
190
+ id: p.id,
191
+ systemId: p.systemId,
192
+ templateId: p.templateId
193
+ });
194
+ }
195
+ function listOf(result, key) {
196
+ var _a;
197
+ const data = (_a = result.data) != null ? _a : result;
198
+ if (Array.isArray(data)) return data;
199
+ const nested = data == null ? void 0 : data[key];
200
+ return Array.isArray(nested) ? nested : [];
201
+ }
202
+ async function list(transport, action, label) {
203
+ return transport.run(execBody(WEB_DESIGN_CONNECTOR_ID, action, {}, CATALOG_TIMEOUT_MS), label);
204
+ }
205
+ async function listTemplates(transport) {
206
+ return listOf(await list(transport, DESIGN_LIST_TEMPLATES_ACTION, "List templates"), "templates").map((t) => {
207
+ var _a, _b, _c, _d, _e;
208
+ return __spreadValues(__spreadValues({
209
+ id: String((_b = (_a = t.id) != null ? _a : t.templateId) != null ? _b : ""),
210
+ title: String((_e = (_d = (_c = t.title) != null ? _c : t.name) != null ? _d : t.id) != null ? _e : "Template")
211
+ }, t.description ? {
212
+ description: String(t.description)
213
+ } : {}), typeof t.cover === "string" && t.cover ? {
214
+ cover: t.cover
215
+ } : {});
216
+ }).filter((t) => t.id);
217
+ }
218
+ async function listSystems(transport) {
219
+ return listOf(await list(transport, DESIGN_LIST_SYSTEMS_ACTION, "List design systems"), "systems").filter((s) => s.id).map((s) => {
220
+ var _a;
221
+ return __spreadValues(__spreadValues({
222
+ id: String(s.id),
223
+ title: String((_a = s.name) != null ? _a : s.id)
224
+ }, s.category ? {
225
+ category: String(s.category)
226
+ } : {}), s.description ? {
227
+ description: String(s.description)
228
+ } : {});
229
+ });
230
+ }
231
+ async function listTools(transport) {
232
+ return listOf(await list(transport, DESIGN_LIST_TOOLS_ACTION, "List design tools"), "tools").filter((t) => t.id && t.skill).map((t) => {
233
+ var _a, _b;
234
+ return __spreadProps(__spreadValues(__spreadValues(__spreadProps(__spreadValues({
235
+ id: String(t.id),
236
+ title: String((_b = (_a = t.title) != null ? _a : t.name) != null ? _b : t.id)
237
+ }, t.description ? {
238
+ description: String(t.description)
239
+ } : {}), {
240
+ skill: String(t.skill)
241
+ }), t.category ? {
242
+ category: String(t.category)
243
+ } : {}), t.prompt ? {
244
+ prompt: String(t.prompt)
245
+ } : {}), {
246
+ editsCurrent: Boolean(t.editsCurrent)
247
+ });
248
+ });
249
+ }
250
+ async function extractSystem(transport, url) {
251
+ var _a, _b, _c, _d;
252
+ const result = await transport.run(execBody(WEB_DESIGN_CONNECTOR_ID, DESIGN_EXTRACT_SYSTEM_ACTION, {
253
+ url
254
+ }, EXTRACT_SYSTEM_TIMEOUT_MS), "Extract design system");
255
+ const data = (_a = result.data) != null ? _a : result;
256
+ const system = (_c = (_b = data.system) != null ? _b : data) != null ? _c : {};
257
+ if (!system.id) throw new Error(`No design system could be read from ${url}.`);
258
+ return __spreadValues(__spreadValues({
259
+ id: String(system.id),
260
+ title: String((_d = system.name) != null ? _d : system.id)
261
+ }, system.category ? {
262
+ category: String(system.category)
263
+ } : {}), system.description ? {
264
+ description: String(system.description)
265
+ } : {});
266
+ }export{DESIGN_EDIT_ACTION,DESIGN_EXTRACT_SYSTEM_ACTION,DESIGN_GENERATE_ACTION,DESIGN_LIST_SYSTEMS_ACTION,DESIGN_LIST_TEMPLATES_ACTION,DESIGN_LIST_TOOLS_ACTION,DesignNotAPageError,DesignQuestionError,GENERATE_TIMEOUT_MS,OUTPUT_CONTRACT,WEB_DESIGN_CONNECTOR_ID,designDirective,designEditMessage,designGenerateMessage,editDesign,editParams,extractSystem,generateDesign,generateParams,listOf,listSystems,listTemplates,listTools,systemNote,toArtifact};//# sourceMappingURL=designConnector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"designConnector.js","sources":["../../../../src/features/design/surface/designConnector.ts"],"sourcesContent":["/**\n * The `yantra-web-design` connector - native twin of design-surface\n * `standalone/designConnectorClient.ts`: generate, edit, and the catalogs the\n * agent pane offers (templates, design systems, tools), plus reading a site\n * into a new design system.\n *\n * Same actions, same params and the same OUTPUT_CONTRACT, so a page made here\n * is the page the web would make. The web's durable chat-channel lane is not\n * used: a phone runs the direct exec lane, which is the web's own fallback.\n * The stream IS the page as it is written, so a lost result frame is recovered\n * from it, and a generator that stops to ask a question is caught mid-stream\n * (the exec lane has no way to answer it, so it would otherwise hang).\n *\n * Pure apart from the injected transport: runs under jest as-is.\n */\nimport { extractDocument, isComplete, looksLikeDocument } from './designDocument';\nimport type { DesignArtifact } from './designBoard';\nimport { ExecStreamError, execBody, type ExecTransport } from './execStream';\n\nexport const WEB_DESIGN_CONNECTOR_ID = 'yantra-web-design';\nexport const DESIGN_GENERATE_ACTION = 'YANTRA_DESIGN_GENERATE';\nexport const DESIGN_EDIT_ACTION = 'YANTRA_DESIGN_EDIT';\nexport const DESIGN_LIST_TEMPLATES_ACTION = 'YANTRA_DESIGN_LIST_TEMPLATES';\nexport const DESIGN_LIST_TOOLS_ACTION = 'YANTRA_DESIGN_LIST_TOOLS';\nexport const DESIGN_LIST_SYSTEMS_ACTION = 'YANTRA_DESIGN_LIST_SYSTEMS';\nexport const DESIGN_EXTRACT_SYSTEM_ACTION = 'YANTRA_DESIGN_EXTRACT_SYSTEM';\n\n/** Measured on the web: a real page streams past 340s. */\nexport const GENERATE_TIMEOUT_MS = 540_000;\nconst EDIT_TIMEOUT_MS = 420_000;\nconst CATALOG_TIMEOUT_MS = 60_000;\nconst EXTRACT_SYSTEM_TIMEOUT_MS = 300_000;\n\n/** Without this the generator writes the page to its own /tmp and returns a summary. */\nexport const OUTPUT_CONTRACT =\n 'Return the complete HTML document inline in your reply. Do not write it to a file, ' +\n 'do not summarize it, and do not stop to confirm.';\n\n/** Naming the picked system in the prose too: a run that skips the lookup invents a palette from the subject. */\nexport function systemNote(systemId?: string): string {\n if (!systemId) return '';\n return (\n `\\n\\nUse the \"${systemId}\" design system: load its tokens and contract first and build ` +\n `every color, font, radius and spacing value from them. Do not invent a palette from the subject matter.`\n );\n}\n\nconst ASK_MARKERS = ['AskUserQuestion', '[CDECLI_ASK_USER_QUESTION]'];\n\n/** Thrown when the generator asked instead of generating; `question` is its prose. */\nexport class DesignQuestionError extends Error {\n constructor(readonly question: string) {\n super(question);\n this.name = 'DesignQuestionError';\n }\n}\n\n/** Thrown when the result held prose, not a page. */\nexport class DesignNotAPageError extends Error {\n constructor(readonly reply: string) {\n const clean = reply.replace(/\\s+/g, ' ').trim();\n super(\n `The design assistant replied with text instead of a page: “${clean.length > 220 ? `${clean.slice(0, 220)}…` : clean}”`,\n );\n this.name = 'DesignNotAPageError';\n }\n}\n\nfunction questionFrom(streamed: string): string {\n const prose = streamed.split(/(?:⚙\\s*)?AskUserQuestion|\\[CDECLI_ASK_USER_QUESTION\\]/)[0] ?? '';\n return prose.trim() || 'The design assistant asked a question before generating.';\n}\n\nexport interface GenerateParams {\n brief: string;\n templateId?: string;\n systemId?: string;\n model?: string;\n}\n\nexport interface EditParams {\n html: string;\n instruction: string;\n id?: string;\n title?: string;\n systemId?: string;\n templateId?: string;\n model?: string;\n}\n\n/** The connector's params for one generate (web `generateParams`). */\nexport function generateParams(p: GenerateParams): Record<string, unknown> {\n return {\n brief: `${p.brief}${systemNote(p.systemId)}\\n\\n${OUTPUT_CONTRACT}`,\n ...(p.templateId ? { templateId: p.templateId } : {}),\n ...(p.systemId ? { systemId: p.systemId } : {}),\n ...(p.model ? { model: p.model } : {}),\n // Inside the connector params: it streams on params.stream, and the runtime opens its buffering gate on it.\n stream: true,\n };\n}\n\nexport function editParams(p: EditParams): Record<string, unknown> {\n return {\n html: p.html,\n instruction: `${p.instruction}\\n\\n${OUTPUT_CONTRACT}`,\n ...(p.systemId ? { systemId: p.systemId } : {}),\n ...(p.templateId ? { templateId: p.templateId } : {}),\n ...(p.model ? { model: p.model } : {}),\n ...(p.title ? { title: p.title } : {}),\n ...(p.id ? { id: p.id } : {}),\n stream: true,\n };\n}\n\n/**\n * `/v1/agent/chat` carries only text, so a durable turn asks in prose; both\n * closing clauses are load-bearing - without them the agent narrates instead of\n * running (web `designDirective`).\n */\nexport function designDirective(action: string, params: Record<string, unknown>): string {\n return (\n `${String(params.brief ?? '')}\\n\\n` +\n `(Run the ${WEB_DESIGN_CONNECTOR_ID} action ${action} with exactly these params: ${JSON.stringify(params)}. ` +\n `Run it now and return the resulting page — produce it, don't just describe it ` +\n `or list the available actions.)`\n );\n}\n\n/** A generate on the durable lane (web `designGenerateMessage`). */\nexport function designGenerateMessage(p: GenerateParams): string {\n return designDirective(DESIGN_GENERATE_ACTION, generateParams(p));\n}\n\n/** An edit on the durable lane - the page rides WITH the instruction (web `designEditMessage`). */\nexport function designEditMessage(p: EditParams): string {\n const { model: _model, ...params } = editParams(p);\n return designDirective(DESIGN_EDIT_ACTION, params);\n}\n\n/** The artifact from a page plus whatever the result frame carried (web `toGeneratedDesign`). */\nexport function toArtifact(\n html: string,\n data: Record<string, unknown>,\n fallback: { title?: string; brief?: string; id?: string; systemId?: string; templateId?: string },\n): DesignArtifact {\n const titleMatch = html.match(/<title>([^<]+)<\\/title>/i);\n const id = (data.id as string | undefined) ?? fallback.id;\n return {\n ...(id ? { id } : {}),\n html,\n url: (data.url as string | undefined) ?? null,\n title: String(\n data.title ?? fallback.title ?? titleMatch?.[1]?.trim() ?? fallback.brief?.slice(0, 60) ?? 'Design',\n ),\n systemId: String(data.systemId ?? fallback.systemId ?? 'claude'),\n templateId: String(data.templateId ?? fallback.templateId ?? 'landing'),\n ...(!isComplete(html) ? { partial: true } : {}),\n };\n}\n\n/** One page-producing run: stream it, catch a question, recover the page from the stream when the frame lost it. */\nasync function runPageAction(\n transport: ExecTransport,\n action: string,\n params: Record<string, unknown>,\n timeoutMs: number,\n label: string,\n onProgress?: (chunk: string) => void,\n signal?: AbortSignal,\n): Promise<{ html: string; data: Record<string, unknown> }> {\n let streamed = '';\n const collect = (chunk: string) => {\n streamed += chunk;\n onProgress?.(chunk);\n if (ASK_MARKERS.some((m) => chunk.includes(m))) throw new DesignQuestionError(questionFrom(streamed));\n };\n let data: Record<string, unknown>;\n try {\n const result = await transport.run(\n execBody(WEB_DESIGN_CONNECTOR_ID, action, params, timeoutMs),\n label,\n collect,\n signal,\n );\n data = ((result.data as Record<string, unknown> | undefined) ?? result) as Record<string, unknown>;\n } catch (err) {\n if (err instanceof DesignQuestionError) throw err;\n if (ASK_MARKERS.some((m) => streamed.includes(m))) throw new DesignQuestionError(questionFrom(streamed));\n const recovered = extractDocument(streamed || (err instanceof ExecStreamError ? err.progress : ''));\n if (!recovered) throw err;\n data = { html: recovered };\n }\n let html = String(data.html ?? '');\n if (!looksLikeDocument(html)) {\n const recovered = extractDocument(streamed);\n if (!recovered) throw new DesignNotAPageError(html || streamed);\n html = recovered;\n }\n return { html, data };\n}\n\n/** YANTRA_DESIGN_GENERATE: a new page from a brief. */\nexport async function generateDesign(\n transport: ExecTransport,\n p: GenerateParams,\n onProgress?: (chunk: string) => void,\n signal?: AbortSignal,\n): Promise<DesignArtifact> {\n const { html, data } = await runPageAction(\n transport,\n DESIGN_GENERATE_ACTION,\n generateParams(p),\n GENERATE_TIMEOUT_MS,\n 'Generate design',\n onProgress,\n signal,\n );\n return toArtifact(html, data, { brief: p.brief, systemId: p.systemId, templateId: p.templateId });\n}\n\n/** YANTRA_DESIGN_EDIT: the open page, changed in place - its id is kept so the creation updates, not duplicates. */\nexport async function editDesign(\n transport: ExecTransport,\n p: EditParams,\n onProgress?: (chunk: string) => void,\n signal?: AbortSignal,\n): Promise<DesignArtifact> {\n const { html, data } = await runPageAction(\n transport,\n DESIGN_EDIT_ACTION,\n editParams(p),\n EDIT_TIMEOUT_MS,\n 'Edit design',\n onProgress,\n signal,\n );\n return toArtifact(html, data, { title: p.title, id: p.id, systemId: p.systemId, templateId: p.templateId });\n}\n\n// ── Catalogs ─────────────────────────────────────────────────────────────\n\nexport interface TemplateOption {\n id: string;\n title: string;\n description?: string;\n cover?: string;\n}\n\nexport interface SystemOption {\n id: string;\n title: string;\n category?: string;\n description?: string;\n}\n\nexport interface ToolOption {\n id: string;\n title: string;\n description?: string;\n skill: string;\n category?: string;\n prompt?: string;\n editsCurrent: boolean;\n}\n\n/** A list out of a result: the array itself, or under `key`, possibly inside `data`. */\nexport function listOf(result: Record<string, unknown>, key: string): Array<Record<string, unknown>> {\n const data = (result.data ?? result) as unknown;\n if (Array.isArray(data)) return data as Array<Record<string, unknown>>;\n const nested = (data as Record<string, unknown> | null)?.[key];\n return Array.isArray(nested) ? (nested as Array<Record<string, unknown>>) : [];\n}\n\nasync function list(transport: ExecTransport, action: string, label: string): Promise<Record<string, unknown>> {\n return transport.run(execBody(WEB_DESIGN_CONNECTOR_ID, action, {}, CATALOG_TIMEOUT_MS), label);\n}\n\nexport async function listTemplates(transport: ExecTransport): Promise<TemplateOption[]> {\n return listOf(await list(transport, DESIGN_LIST_TEMPLATES_ACTION, 'List templates'), 'templates')\n .map((t) => ({\n id: String(t.id ?? t.templateId ?? ''),\n title: String(t.title ?? t.name ?? t.id ?? 'Template'),\n ...(t.description ? { description: String(t.description) } : {}),\n ...(typeof t.cover === 'string' && t.cover ? { cover: t.cover } : {}),\n }))\n .filter((t) => t.id);\n}\n\nexport async function listSystems(transport: ExecTransport): Promise<SystemOption[]> {\n return listOf(await list(transport, DESIGN_LIST_SYSTEMS_ACTION, 'List design systems'), 'systems')\n .filter((s) => s.id)\n .map((s) => ({\n id: String(s.id),\n title: String(s.name ?? s.id),\n ...(s.category ? { category: String(s.category) } : {}),\n ...(s.description ? { description: String(s.description) } : {}),\n }));\n}\n\nexport async function listTools(transport: ExecTransport): Promise<ToolOption[]> {\n return listOf(await list(transport, DESIGN_LIST_TOOLS_ACTION, 'List design tools'), 'tools')\n .filter((t) => t.id && t.skill)\n .map((t) => ({\n id: String(t.id),\n title: String(t.title ?? t.name ?? t.id),\n ...(t.description ? { description: String(t.description) } : {}),\n skill: String(t.skill),\n ...(t.category ? { category: String(t.category) } : {}),\n ...(t.prompt ? { prompt: String(t.prompt) } : {}),\n editsCurrent: Boolean(t.editsCurrent),\n }));\n}\n\n/** EXTRACT_SYSTEM: palette, type and spacing read off a live site, persisted as a new design system. */\nexport async function extractSystem(transport: ExecTransport, url: string): Promise<SystemOption> {\n const result = await transport.run(\n execBody(WEB_DESIGN_CONNECTOR_ID, DESIGN_EXTRACT_SYSTEM_ACTION, { url }, EXTRACT_SYSTEM_TIMEOUT_MS),\n 'Extract design system',\n );\n const data = (result.data ?? result) as Record<string, unknown>;\n const system = (data.system ?? data ?? {}) as Record<string, unknown>;\n if (!system.id) throw new Error(`No design system could be read from ${url}.`);\n return {\n id: String(system.id),\n title: String(system.name ?? system.id),\n ...(system.category ? { category: String(system.category) } : {}),\n ...(system.description ? { description: String(system.description) } : {}),\n };\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ function looksLikeDocument(html) {
2
+ return /^\s*(?:<!doctype\s+html\b|<html\b)/i.test(html);
3
+ }
4
+ function isComplete(html) {
5
+ return /<\/html>\s*$/i.test(html.trim());
6
+ }
7
+ function extractDocument(streamed) {
8
+ var _a;
9
+ const fenced = streamed.replace(/^[\s\S]*?```(?:html)?\s*/i, "");
10
+ const src = /<(?:!doctype|html|body)\b/i.test(fenced) ? fenced : streamed;
11
+ const roots = /<!doctype\s+html|<html\b|<body\b/gi;
12
+ for (const m of src.matchAll(roots)) {
13
+ if (m.index === void 0) continue;
14
+ const doc = src.slice(m.index).replace(/```\s*$/, "").trim();
15
+ const unescaped = unescapeJsonDocument(doc);
16
+ if (unescaped !== doc) return unescaped;
17
+ if (/[`'"]/.test((_a = src[m.index - 1]) != null ? _a : "")) continue;
18
+ if (/^\s*(?:<!doctype\s+html\b|<html\b|<body\b)/i.test(doc)) return doc;
19
+ }
20
+ return "";
21
+ }
22
+ const ESCAPED_ROOT = /^(?:<!doctype\s+html\s*>|<(?:html|body)\b[^>]*>)\\[nrt]|^<(?:html|body)\b[^>\n]*\\"/i;
23
+ function unescapeJsonDocument(doc) {
24
+ if (!ESCAPED_ROOT.test(doc)) return doc;
25
+ const end = doc.search(new RegExp('(?<!\\\\)"'));
26
+ try {
27
+ const out = JSON.parse(`"${end === -1 ? doc : doc.slice(0, end)}"`);
28
+ return /^<html\b/i.test(out) ? `<!doctype html>
29
+ ${out}` : out;
30
+ } catch (e) {
31
+ return doc;
32
+ }
33
+ }
34
+ function renderableHtml(streamed) {
35
+ const fenced = streamed.replace(/^[\s\S]*?```(?:html)?\s*/i, "");
36
+ const src = /<(?:!doctype|html|body)\b/i.test(fenced) ? fenced : streamed;
37
+ const m = src.match(/<!doctype\s+html|<html\b|<body\b/i);
38
+ if (!m || m.index === void 0) return null;
39
+ return src.slice(m.index).replace(/```\s*$/, "");
40
+ }export{extractDocument,isComplete,looksLikeDocument,renderableHtml,unescapeJsonDocument};//# sourceMappingURL=designDocument.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"designDocument.js","sources":["../../../../src/features/design/surface/designDocument.ts"],"sourcesContent":["/**\n * Reading a design document out of raw text — a streamed generation, or an agent\n * reply that carries the page inline. Native twin of design-surface\n * `state/designDocument.ts`, copied verbatim (pure string work), plus\n * `renderableHtml` from `standalone/designMachine.ts` for the live tile.\n *\n * Pure: runs under jest as-is.\n */\n\n/** A document opens with its root; prose that quotes `<!doctype html>` does not. */\nexport function looksLikeDocument(html: string): boolean {\n return /^\\s*(?:<!doctype\\s+html\\b|<html\\b)/i.test(html);\n}\n\n/** Ends where a document ends. Anything else is cut off — see `partial`. */\nexport function isComplete(html: string): boolean {\n return /<\\/html>\\s*$/i.test(html.trim());\n}\n\n/**\n * Pull the renderable HTML document out of a raw model stream — trims any\n * preamble / ```html fence and starts at the first HTML root. The streamed\n * progress IS the page, so this recovers it when the result frame is missing.\n * A root preceded by a backtick or quote is a mention inside prose, never a page.\n */\nexport function extractDocument(streamed: string): string {\n const fenced = streamed.replace(/^[\\s\\S]*?```(?:html)?\\s*/i, '');\n const src = /<(?:!doctype|html|body)\\b/i.test(fenced) ? fenced : streamed;\n const roots = /<!doctype\\s+html|<html\\b|<body\\b/gi;\n for (const m of src.matchAll(roots)) {\n if (m.index === undefined) continue;\n // `<body` counts here but not in the strict gate: a stream can be cut before its head.\n const doc = src\n .slice(m.index)\n .replace(/```\\s*$/, '')\n .trim();\n // Checked before the quote rule: a page inside a JSON string opens right after a quote.\n const unescaped = unescapeJsonDocument(doc);\n if (unescaped !== doc) return unescaped;\n if (/[`'\"]/.test(src[m.index - 1] ?? '')) continue;\n if (/^\\s*(?:<!doctype\\s+html\\b|<html\\b|<body\\b)/i.test(doc)) return doc;\n }\n return '';\n}\n\n/** A root still JSON-escaped: doctype or root tag followed by a literal `\\n`, or a root tag holding `\\\"`. */\nconst ESCAPED_ROOT = /^(?:<!doctype\\s+html\\s*>|<(?:html|body)\\b[^>]*>)\\\\[nrt]|^<(?:html|body)\\b[^>\\n]*\\\\\"/i;\n\n/**\n * A page lifted out of a JSON string (`\"html\":\"<!doctype html>\\n<html lang=\\\"en\\\">…\"`) keeps\n * every escape, so `width=\\\"16\\\"` reaches the parser verbatim. Unescape up to the string's\n * closing quote; anything that is not such a page comes back unchanged.\n */\nexport function unescapeJsonDocument(doc: string): string {\n if (!ESCAPED_ROOT.test(doc)) return doc;\n const end = doc.search(/(?<!\\\\)\"/);\n try {\n const out = JSON.parse(`\"${end === -1 ? doc : doc.slice(0, end)}\"`) as string;\n // Rows saved before this fix were cut at `<html`, past the doctype; restore standards mode.\n return /^<html\\b/i.test(out) ? `<!doctype html>\\n${out}` : out;\n } catch {\n return doc;\n }\n}\n\n/** HTML-attribute escape for the media wrapper below. */\nfunction escapeAttr(value: string): string {\n return value.replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\n\n/**\n * Wrap one generated asset as a complete, self-contained design document — the\n * landing for a turn that produced an image or video instead of a page (the\n * user asked for a photo, the agent generated it). Wrapping keeps the board's\n * one creation shape (`html`), so tiles, previews and edits need no media case.\n */\nexport function mediaCreationDocument(media: { type: string; src: string; label?: string }, brief: string): string {\n const title = escapeAttr((media.label ?? brief).slice(0, 120) || 'Generated media');\n const src = escapeAttr(media.src);\n const body =\n media.type === 'video'\n ? `<video src=\"${src}\" controls autoplay muted loop playsinline></video>`\n : `<img src=\"${src}\" alt=\"${title}\">`;\n return [\n '<!doctype html>',\n '<html lang=\"en\">',\n '<head>',\n '<meta charset=\"utf-8\">',\n '<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">',\n `<title>${title}</title>`,\n '<style>',\n 'body{margin:0;min-height:100vh;display:grid;place-items:center;background:#101014}',\n 'img,video{max-width:100vw;max-height:100vh;object-fit:contain;display:block}',\n '</style>',\n '</head>',\n `<body>${body}</body>`,\n '</html>',\n ].join('\\n');\n}\n\n/**\n * The renderable page in a stream so far, or null until its root arrives - the\n * generating tile draws this as it grows (open-design's incremental page load).\n */\nexport function renderableHtml(streamed: string): string | null {\n const fenced = streamed.replace(/^[\\s\\S]*?```(?:html)?\\s*/i, '');\n const src = /<(?:!doctype|html|body)\\b/i.test(fenced) ? fenced : streamed;\n const m = src.match(/<!doctype\\s+html|<html\\b|<body\\b/i);\n if (!m || m.index === undefined) return null;\n return src.slice(m.index).replace(/```\\s*$/, '');\n}\n"],"names":[],"mappings":"AAUO,SAAS,kBAAkB,IAAuB,EAAA;AACvD,EAAO,OAAA,qCAAA,CAAsC,KAAK,IAAI,CAAA;AACxD;AAGO,SAAS,WAAW,IAAuB,EAAA;AAChD,EAAA,OAAO,eAAgB,CAAA,IAAA,CAAK,IAAK,CAAA,IAAA,EAAM,CAAA;AACzC;AAQO,SAAS,gBAAgB,QAA0B,EAAA;AAzB1D,EAAA,IAAA,EAAA;AA0BE,EAAA,MAAM,MAAS,GAAA,QAAA,CAAS,OAAQ,CAAA,2BAAA,EAA6B,EAAE,CAAA;AAC/D,EAAA,MAAM,GAAM,GAAA,4BAAA,CAA6B,IAAK,CAAA,MAAM,IAAI,MAAS,GAAA,QAAA;AACjE,EAAA,MAAM,KAAQ,GAAA,oCAAA;AACd,EAAA,KAAA,MAAW,CAAK,IAAA,GAAA,CAAI,QAAS,CAAA,KAAK,CAAG,EAAA;AACnC,IAAI,IAAA,CAAA,CAAE,UAAU,MAAW,EAAA;AAE3B,IAAM,MAAA,GAAA,GAAM,GAAI,CAAA,KAAA,CAAM,CAAE,CAAA,KAAK,EAAE,OAAQ,CAAA,SAAA,EAAW,EAAE,CAAA,CAAE,IAAK,EAAA;AAE3D,IAAM,MAAA,SAAA,GAAY,qBAAqB,GAAG,CAAA;AAC1C,IAAI,IAAA,SAAA,KAAc,KAAY,OAAA,SAAA;AAC9B,IAAI,IAAA,OAAA,CAAQ,MAAK,EAAI,GAAA,GAAA,CAAA,CAAA,CAAE,QAAQ,CAAC,CAAA,KAAf,IAAoB,GAAA,EAAA,GAAA,EAAE,CAAG,EAAA;AAC1C,IAAA,IAAI,6CAA8C,CAAA,IAAA,CAAK,GAAG,CAAA,EAAU,OAAA,GAAA;AAAA;AAEtE,EAAO,OAAA,EAAA;AACT;AAGA,MAAM,YAAe,GAAA,sFAAA;AAOd,SAAS,qBAAqB,GAAqB,EAAA;AACxD,EAAA,IAAI,CAAC,YAAA,CAAa,IAAK,CAAA,GAAG,GAAU,OAAA,GAAA;AACpC,EAAA,MAAM,GAAM,GAAA,GAAA,CAAI,MAAO,CAAA,IAAA,MAAA,CAAC,YAAS,CAAA,CAAA;AACjC,EAAI,IAAA;AACF,IAAA,MAAM,GAAM,GAAA,IAAA,CAAK,KAAM,CAAA,CAAA,CAAA,EAAI,GAAQ,KAAA,CAAA,CAAA,GAAK,GAAM,GAAA,GAAA,CAAI,KAAM,CAAA,CAAA,EAAG,GAAG,CAAC,CAAG,CAAA,CAAA,CAAA;AAElE,IAAO,OAAA,WAAA,CAAY,IAAK,CAAA,GAAG,CAAI,GAAA,CAAA;AAAA,EAAoB,GAAG,CAAK,CAAA,GAAA,GAAA;AAAA,GACrD,CAAA,OAAA,CAAA,EAAA;AACN,IAAO,OAAA,GAAA;AAAA;AAEX;AA4BO,SAAS,eAAe,QAAiC,EAAA;AAC9D,EAAA,MAAM,MAAS,GAAA,QAAA,CAAS,OAAQ,CAAA,2BAAA,EAA6B,EAAE,CAAA;AAC/D,EAAA,MAAM,GAAM,GAAA,4BAAA,CAA6B,IAAK,CAAA,MAAM,IAAI,MAAS,GAAA,QAAA;AACjE,EAAM,MAAA,CAAA,GAAI,GAAI,CAAA,KAAA,CAAM,mCAAmC,CAAA;AACvD,EAAA,IAAI,CAAC,CAAA,IAAK,CAAE,CAAA,KAAA,KAAU,QAAkB,OAAA,IAAA;AACxC,EAAA,OAAO,IAAI,KAAM,CAAA,CAAA,CAAE,KAAK,CAAE,CAAA,OAAA,CAAQ,WAAW,EAAE,CAAA;AACjD"}
@@ -0,0 +1,55 @@
1
+ import {Platform,Share}from'react-native';import {designFileName}from'./designChat.js';const UI_HOST_BASE = "https://ui-host.cdebase.dev";
2
+ const HTMLPLAN_CONNECTOR = "yantra-ai-htmlplan";
3
+ async function downloadDesign(creation) {
4
+ var _a;
5
+ const FileSystem = require("expo-file-system");
6
+ const name = designFileName(creation);
7
+ if (Platform.OS === "android") {
8
+ const saf = FileSystem.StorageAccessFramework;
9
+ const permission = await saf.requestDirectoryPermissionsAsync();
10
+ if (!permission.granted) return "cancelled";
11
+ const target = await saf.createFileAsync(permission.directoryUri, name.replace(/\.html$/, ""), "text/html");
12
+ await FileSystem.writeAsStringAsync(target, creation.html, {
13
+ encoding: FileSystem.EncodingType.UTF8
14
+ });
15
+ return "saved";
16
+ }
17
+ const dir = `${(_a = FileSystem.cacheDirectory) != null ? _a : ""}design-exports/`;
18
+ await FileSystem.makeDirectoryAsync(dir, {
19
+ intermediates: true
20
+ }).catch(() => void 0);
21
+ const uri = `${dir}${Date.now()}-${name}`;
22
+ await FileSystem.writeAsStringAsync(uri, creation.html, {
23
+ encoding: FileSystem.EncodingType.UTF8
24
+ });
25
+ const result = await Share.share({
26
+ url: uri,
27
+ title: creation.title
28
+ });
29
+ return result.action === Share.dismissedAction ? "cancelled" : "shared";
30
+ }
31
+ async function publishDesign(html, token) {
32
+ const doc = html.trim();
33
+ if (!doc) throw new Error("Nothing to publish.");
34
+ const resp = await fetch(`${UI_HOST_BASE}/ui/register`, {
35
+ method: "POST",
36
+ headers: {
37
+ "Content-Type": "application/json",
38
+ Authorization: `Bearer ${token}`
39
+ },
40
+ // `agentSessionId` is required by the schema; empty means no bridged chat session.
41
+ body: JSON.stringify({
42
+ html: doc,
43
+ agentSessionId: "",
44
+ skill: HTMLPLAN_CONNECTOR
45
+ })
46
+ });
47
+ if (!resp.ok) {
48
+ const detail = (await resp.text().catch(() => "")).slice(0, 160);
49
+ throw new Error(`Publishing failed (HTTP ${resp.status})${detail ? `: ${detail}` : ""}`);
50
+ }
51
+ const result = await resp.json();
52
+ const key = (result.key || "").trim();
53
+ if (!key) throw new Error("Published, but no page key came back.");
54
+ return `${UI_HOST_BASE}/ui/${key}/raw`;
55
+ }export{downloadDesign,publishDesign};//# sourceMappingURL=designExport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"designExport.js","sources":["../../../../src/features/design/surface/designExport.ts"],"sourcesContent":["/**\n * Getting a design out of the app - native twins of the web CreationView's\n * Download and \"Use in code\".\n *\n * Download the page as `<template>-<system>.html` (the web's file name):\n * iOS shares the file, Android saves it into a folder the person\n * picks (the Study export's pattern)\n * Use in code publish the page to ui-host and hand back its RAW url - the\n * form Codezen's Design panel and a sandboxed agent fetch (web\n * `pushHtmlPage` + `rawPageUrl`, registered directly as the web does)\n */\nimport { Platform, Share } from 'react-native';\nimport type { DesignArtifact } from './designBoard';\nimport { designFileName } from './designChat';\n\ntype FileSystemModule = typeof import('expo-file-system');\n\n/** ui-host's public base - the same default the web surfaces use. */\nconst UI_HOST_BASE = 'https://ui-host.cdebase.dev';\nconst HTMLPLAN_CONNECTOR = 'yantra-ai-htmlplan';\n\nexport async function downloadDesign(creation: DesignArtifact): Promise<'shared' | 'saved' | 'cancelled'> {\n // eslint-disable-next-line @typescript-eslint/no-var-requires, global-require\n const FileSystem = require('expo-file-system') as FileSystemModule;\n const name = designFileName(creation);\n if (Platform.OS === 'android') {\n const saf = FileSystem.StorageAccessFramework;\n const permission = await saf.requestDirectoryPermissionsAsync();\n if (!permission.granted) return 'cancelled';\n const target = await saf.createFileAsync(permission.directoryUri, name.replace(/\\.html$/, ''), 'text/html');\n await FileSystem.writeAsStringAsync(target, creation.html, { encoding: FileSystem.EncodingType.UTF8 });\n return 'saved';\n }\n const dir = `${FileSystem.cacheDirectory ?? ''}design-exports/`;\n await FileSystem.makeDirectoryAsync(dir, { intermediates: true }).catch(() => undefined);\n const uri = `${dir}${Date.now()}-${name}`;\n await FileSystem.writeAsStringAsync(uri, creation.html, { encoding: FileSystem.EncodingType.UTF8 });\n const result = await Share.share({ url: uri, title: creation.title });\n return result.action === Share.dismissedAction ? 'cancelled' : 'shared';\n}\n\n/** Publish a page; resolves to its RAW url (`…/ui/<key>/raw`). */\nexport async function publishDesign(html: string, token: string): Promise<string> {\n const doc = html.trim();\n if (!doc) throw new Error('Nothing to publish.');\n const resp = await fetch(`${UI_HOST_BASE}/ui/register`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` },\n // `agentSessionId` is required by the schema; empty means no bridged chat session.\n body: JSON.stringify({ html: doc, agentSessionId: '', skill: HTMLPLAN_CONNECTOR }),\n });\n if (!resp.ok) {\n const detail = (await resp.text().catch(() => '')).slice(0, 160);\n throw new Error(`Publishing failed (HTTP ${resp.status})${detail ? `: ${detail}` : ''}`);\n }\n const result = (await resp.json()) as { key?: string };\n const key = (result.key || '').trim();\n if (!key) throw new Error('Published, but no page key came back.');\n return `${UI_HOST_BASE}/ui/${key}/raw`;\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+ const DESIGN_TEMPLATES_GROUP = "designTemplates";
18
+ const DESIGN_SURFACE_URL_RE = /^https:\/\/design-surface\.[a-z0-9-]+(?:\.[a-z0-9-]+)+(?::\d{1,5})?(?:[/?#]\S*)?$/i;
19
+ function isDesignSurfaceUrl(url) {
20
+ return typeof url === "string" && DESIGN_SURFACE_URL_RE.test(url.trim());
21
+ }
22
+ function queryParams(url) {
23
+ var _a;
24
+ const out = /* @__PURE__ */ new Map();
25
+ const q = (_a = url.split("#")[0].split("?")[1]) != null ? _a : "";
26
+ for (const pair of q.split("&")) {
27
+ if (!pair) continue;
28
+ const at = pair.indexOf("=");
29
+ const key = decodeURIComponent((at < 0 ? pair : pair.slice(0, at)).replace(/\+/g, " "));
30
+ let value = "";
31
+ try {
32
+ value = at < 0 ? "" : decodeURIComponent(pair.slice(at + 1).replace(/\+/g, " "));
33
+ } catch (e) {
34
+ value = pair.slice(at + 1);
35
+ }
36
+ out.set(key, value);
37
+ }
38
+ return out;
39
+ }
40
+ function designOpeningFromUrl(url) {
41
+ var _a, _b, _c, _d;
42
+ if (!isDesignSurfaceUrl(url)) return null;
43
+ const params = queryParams(url.trim());
44
+ const asked = (_b = (_a = params.get("templates")) != null ? _a : params.get("category")) != null ? _b : "";
45
+ const templates = params.has("ys") || asked.toLowerCase() === DESIGN_TEMPLATES_GROUP.toLowerCase();
46
+ const query = ((_d = (_c = params.get("templatesQuery")) != null ? _c : params.get("q")) != null ? _d : "").trim().slice(0, 120);
47
+ return templates ? __spreadValues({
48
+ templates: true
49
+ }, query ? {
50
+ templatesQuery: query
51
+ } : {}) : {
52
+ templates: false
53
+ };
54
+ }
55
+ function designOpeningFromCard(opening) {
56
+ var _a;
57
+ if ((opening == null ? void 0 : opening.group) !== DESIGN_TEMPLATES_GROUP) return null;
58
+ const query = (_a = opening.query) == null ? void 0 : _a.trim();
59
+ return __spreadValues({
60
+ templates: true
61
+ }, query ? {
62
+ templatesQuery: query
63
+ } : {});
64
+ }export{DESIGN_TEMPLATES_GROUP,designOpeningFromCard,designOpeningFromUrl,isDesignSurfaceUrl};//# sourceMappingURL=designLinks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"designLinks.js","sources":["../../../../src/features/design/surface/designLinks.ts"],"sourcesContent":["/**\n * Links and chat cards that point at the web Design surface, opened natively.\n *\n * The web Design surface opens on its design templates when a chat card or a\n * link asked for them (`?ys=<snapshot>` from the messenger gateway, or\n * `?templates=designTemplates`, with an optional search in `templatesQuery` /\n * `q`) - design-surface `templatesOpening`. On the phone the same link opens\n * Native Design: on its template gallery when the link asks for templates,\n * else on its boards. Nothing opens the web surface.\n *\n * Pure (no `URL`: RN's polyfill throws on most getters): runs under jest.\n */\n\n/** The Templates protocol's group for the design surface's catalog (common TEMPLATES_CHAT_PROTOCOL). */\nexport const DESIGN_TEMPLATES_GROUP = 'designTemplates';\n\nconst DESIGN_SURFACE_URL_RE = /^https:\\/\\/design-surface\\.[a-z0-9-]+(?:\\.[a-z0-9-]+)+(?::\\d{1,5})?(?:[/?#]\\S*)?$/i;\n\n/** A page of the web Design surface: https on a `design-surface.<domain>` host. */\nexport function isDesignSurfaceUrl(url: string | null | undefined): boolean {\n return typeof url === 'string' && DESIGN_SURFACE_URL_RE.test(url.trim());\n}\n\n/** Where Native Design opens for a link or card. */\nexport interface DesignOpening {\n /** Open on the template gallery. */\n templates: boolean;\n /** The gallery's search. */\n templatesQuery?: string;\n}\n\nfunction queryParams(url: string): Map<string, string> {\n const out = new Map<string, string>();\n const q = url.split('#')[0].split('?')[1] ?? '';\n for (const pair of q.split('&')) {\n if (!pair) continue;\n const at = pair.indexOf('=');\n const key = decodeURIComponent((at < 0 ? pair : pair.slice(0, at)).replace(/\\+/g, ' '));\n let value = '';\n try {\n value = at < 0 ? '' : decodeURIComponent(pair.slice(at + 1).replace(/\\+/g, ' '));\n } catch {\n value = pair.slice(at + 1);\n }\n out.set(key, value);\n }\n return out;\n}\n\n/** The native opening for a Design surface link, or null when the link is not one. */\nexport function designOpeningFromUrl(url: string | null | undefined): DesignOpening | null {\n if (!isDesignSurfaceUrl(url)) return null;\n const params = queryParams(url!.trim());\n const asked = params.get('templates') ?? params.get('category') ?? '';\n const templates = params.has('ys') || asked.toLowerCase() === DESIGN_TEMPLATES_GROUP.toLowerCase();\n const query = (params.get('templatesQuery') ?? params.get('q') ?? '').trim().slice(0, 120);\n return templates ? { templates: true, ...(query ? { templatesQuery: query } : {}) } : { templates: false };\n}\n\n/** The native opening for a chat `templates` card, or null when it names another catalog. */\nexport function designOpeningFromCard(\n opening: { group?: string; query?: string } | null | undefined,\n): DesignOpening | null {\n if (opening?.group !== DESIGN_TEMPLATES_GROUP) return null;\n const query = opening.query?.trim();\n return { templates: true, ...(query ? { templatesQuery: query } : {}) };\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import {canvasPalette}from'../../canvas/canvasTheme.js';import {DESIGN_DARK,DESIGN_LIGHT}from'./designTheme.js';var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+ const cache = {};
18
+ function designPalette(mode) {
19
+ const hit = cache[mode];
20
+ if (hit) return hit;
21
+ const palette = __spreadValues(__spreadValues({}, canvasPalette(mode)), mode === "dark" ? DESIGN_DARK : DESIGN_LIGHT);
22
+ cache[mode] = palette;
23
+ return palette;
24
+ }export{designPalette};//# sourceMappingURL=designPalette.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"designPalette.js","sources":["../../../../src/features/design/surface/designPalette.ts"],"sourcesContent":["/**\n * The full palette the Design surface's screens read: the canvas palette for\n * the mode (it carries the editor grades and helpers), with the surface's own\n * tokens (designTheme.ts) laid over it. One object per mode, so styles built\n * from it are cached.\n */\nimport { canvasPalette, type CanvasPalette, type CanvasThemeMode } from '../../canvas/canvasTheme';\nimport { DESIGN_DARK, DESIGN_LIGHT } from './designTheme';\n\nconst cache: Partial<Record<CanvasThemeMode, CanvasPalette>> = {};\n\nexport function designPalette(mode: CanvasThemeMode): CanvasPalette {\n const hit = cache[mode];\n if (hit) return hit;\n const palette = { ...canvasPalette(mode), ...(mode === 'dark' ? DESIGN_DARK : DESIGN_LIGHT) } as CanvasPalette;\n cache[mode] = palette;\n return palette;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAQA,MAAM,QAAyD,EAAC;AACzD,SAAS,cAAc,IAAsC,EAAA;AAClE,EAAM,MAAA,GAAA,GAAM,MAAM,IAAI,CAAA;AACtB,EAAA,IAAI,KAAY,OAAA,GAAA;AAChB,EAAA,MAAM,UAAU,cACX,CAAA,cAAA,CAAA,EAAA,EAAA,aAAA,CAAc,IAAI,CACjB,CAAA,EAAA,IAAA,KAAS,SAAS,WAAc,GAAA,YAAA,CAAA;AAEtC,EAAA,KAAA,CAAM,IAAI,CAAI,GAAA,OAAA;AACd,EAAO,OAAA,OAAA;AACT"}