@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,129 @@
1
+ import {channelsMatching,decodeMetadata,newArtifactId,isDocArtifactId,gql}from'../design/doc/artifacts.js';import {parseBlocks}from'./blocks.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 UNTITLED_DOC = "Untitled doc";
21
+ function newDocId() {
22
+ return newArtifactId("doc");
23
+ }
24
+ function coerceDocsDoc(doc) {
25
+ const d = doc;
26
+ if (!d || typeof d !== "object" || d.version !== 2 || !Array.isArray(d.blocks)) return null;
27
+ return __spreadProps(__spreadValues({}, d), {
28
+ version: 2,
29
+ title: typeof d.title === "string" ? d.title : "",
30
+ blocks: parseBlocks(d.blocks),
31
+ updatedAt: typeof d.updatedAt === "number" ? d.updatedAt : 0
32
+ });
33
+ }
34
+ function coerceDocArtifact(metadata) {
35
+ const meta = decodeMetadata(metadata);
36
+ const artifact = meta == null ? void 0 : meta.artifact;
37
+ if (!artifact || typeof artifact.id !== "string" || !artifact.id || artifact.kind !== "doc") return null;
38
+ const doc = coerceDocsDoc(artifact.doc);
39
+ if (!doc) return null;
40
+ return __spreadProps(__spreadValues({}, artifact), {
41
+ doc
42
+ });
43
+ }
44
+ function buildDocArtifact(id, doc, keep = {}) {
45
+ var _a;
46
+ return __spreadValues(__spreadValues(__spreadProps(__spreadValues({
47
+ id,
48
+ kind: "doc"
49
+ }, keep.sessionId ? {
50
+ sessionId: keep.sessionId
51
+ } : {}), {
52
+ title: ((_a = doc.title) == null ? void 0 : _a.trim()) || UNTITLED_DOC,
53
+ updatedAt: doc.updatedAt,
54
+ doc
55
+ }), keep.thumbUrl ? {
56
+ thumbUrl: keep.thumbUrl
57
+ } : {}), keep.exportUrl ? {
58
+ exportUrl: keep.exportUrl
59
+ } : {});
60
+ }
61
+ const ROW_FIELDS = "channelId title metadata updatedAt";
62
+ async function saveDocArtifact(opts, artifact) {
63
+ var _a;
64
+ const {
65
+ data,
66
+ error
67
+ } = await gql(opts, `mutation RegisterSurfaceChannel($input: RegisterSurfaceChannelInput!) {
68
+ registerSurfaceChannel(input: $input) { ${ROW_FIELDS} }
69
+ }`, {
70
+ input: __spreadProps(__spreadValues(__spreadValues({
71
+ surface: "canvas",
72
+ channelId: artifact.id
73
+ }, artifact.sessionId ? {
74
+ sessionId: artifact.sessionId
75
+ } : {}), artifact.title ? {
76
+ title: artifact.title
77
+ } : {}), {
78
+ metadata: {
79
+ artifact
80
+ }
81
+ })
82
+ });
83
+ if (error) return {
84
+ ok: false,
85
+ error
86
+ };
87
+ return ((_a = data == null ? void 0 : data.registerSurfaceChannel) == null ? void 0 : _a.channelId) ? {
88
+ ok: true,
89
+ error: null
90
+ } : {
91
+ ok: false,
92
+ error: "Could not save. Recent edits are not stored yet."
93
+ };
94
+ }
95
+ async function listDocArtifacts(opts, limit = 24) {
96
+ const page = await channelsMatching(opts, "doc:", limit);
97
+ const docs = [];
98
+ for (const row of page.rows) {
99
+ const artifact = coerceDocArtifact(row.metadata);
100
+ if (artifact && artifact.id === row.channelId) docs.push(artifact);
101
+ }
102
+ docs.sort((a, b) => {
103
+ var _a, _b;
104
+ return ((_a = b.updatedAt) != null ? _a : 0) - ((_b = a.updatedAt) != null ? _b : 0);
105
+ });
106
+ return {
107
+ docs: docs.slice(0, limit),
108
+ more: page.total > limit || docs.length > limit,
109
+ error: docs.length === 0 ? page.error : null
110
+ };
111
+ }
112
+ async function loadOwnedDocArtifact(opts, id) {
113
+ if (!isDocArtifactId(id)) return {
114
+ artifact: null,
115
+ error: null
116
+ };
117
+ const key = id.trim();
118
+ const page = await channelsMatching(opts, key, 5);
119
+ const row = page.rows.find((r) => r.channelId === key);
120
+ if (!row) return {
121
+ artifact: null,
122
+ error: page.error
123
+ };
124
+ const artifact = coerceDocArtifact(row.metadata);
125
+ return {
126
+ artifact: artifact && artifact.id === key ? artifact : null,
127
+ error: null
128
+ };
129
+ }export{UNTITLED_DOC,buildDocArtifact,coerceDocArtifact,coerceDocsDoc,isDocArtifactId,listDocArtifacts,loadOwnedDocArtifact,newDocId,saveDocArtifact};//# sourceMappingURL=docArtifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docArtifacts.js","sources":["../../../src/features/docs/docArtifacts.ts"],"sourcesContent":["/**\n * Saved docs - native twin of the web docs editor's `persistence.ts` over\n * canvas-surface `state/artifacts.ts`.\n *\n * One SurfaceChannel row per document on the `canvas` surface, keyed\n * `doc:<uuid>`, `{ artifact }` in metadata where `artifact.doc` is\n * `{ version: 2, title, blocks (BlockNote JSON), updatedAt }`. That is exactly\n * what the web writes and lists, so a doc written on the phone opens in the\n * web editor and the reverse.\n *\n * The transport is the design index's (`design/doc/artifacts.ts`): a save\n * is the idempotent upsert and replaces metadata wholesale, so it always\n * sends the whole document.\n *\n * Pure apart from `fetch`: runs under jest as-is.\n */\nimport {\n channelsMatching,\n decodeMetadata,\n gql,\n isDocArtifactId,\n newArtifactId,\n type IndexOptions,\n} from '../design/doc/artifacts';\nimport { parseBlocks, type DocBlock } from './blocks';\n\nexport { isDocArtifactId };\n\n/** The editor payload (web `DocsDoc`). v1 (tiptap HTML) is gone: it fails the guard and opens blank. */\nexport interface DocsDoc {\n version: 2;\n title: string;\n /** BlockNote's block JSON (`editor.document`). */\n blocks: DocBlock[];\n updatedAt: number;\n}\n\n/** One saved doc row (web `CanvasArtifact<DocsDoc>`). */\nexport interface DocArtifact {\n /** Row id AND artifact id: `doc:<uuid>`. */\n id: string;\n kind: 'doc';\n sessionId?: string;\n title: string;\n updatedAt: number;\n doc: DocsDoc;\n /** Written by web; kept through native saves. */\n thumbUrl?: string;\n exportUrl?: string;\n}\n\nexport const UNTITLED_DOC = 'Untitled doc';\n\n/** Mint the row id a brand-new document saves under (web `newDocId`). */\nexport function newDocId(): string {\n return newArtifactId('doc');\n}\n\n/** Validate a doc payload (web `coerceDoc`); blocks are parsed, unknown block types kept. */\nexport function coerceDocsDoc(doc: unknown): DocsDoc | null {\n const d = doc as Partial<DocsDoc> | null | undefined;\n if (!d || typeof d !== 'object' || d.version !== 2 || !Array.isArray(d.blocks)) return null;\n return {\n ...(d as DocsDoc),\n version: 2,\n title: typeof d.title === 'string' ? d.title : '',\n blocks: parseBlocks(d.blocks),\n updatedAt: typeof d.updatedAt === 'number' ? d.updatedAt : 0,\n };\n}\n\n/** Validate a decoded row (untrusted JSON from the index); null for anything but a v2 doc. */\nexport function coerceDocArtifact(metadata: unknown): DocArtifact | null {\n const meta = decodeMetadata(metadata) as { artifact?: DocArtifact } | null;\n const artifact = meta?.artifact;\n if (!artifact || typeof artifact.id !== 'string' || !artifact.id || artifact.kind !== 'doc') return null;\n const doc = coerceDocsDoc(artifact.doc);\n if (!doc) return null;\n return { ...artifact, doc };\n}\n\n/** The row a save writes (web `saveDocById`). */\nexport function buildDocArtifact(\n id: string,\n doc: DocsDoc,\n keep: Pick<DocArtifact, 'sessionId' | 'thumbUrl' | 'exportUrl'> = {},\n): DocArtifact {\n return {\n id,\n kind: 'doc',\n ...(keep.sessionId ? { sessionId: keep.sessionId } : {}),\n title: doc.title?.trim() || UNTITLED_DOC,\n updatedAt: doc.updatedAt,\n doc,\n ...(keep.thumbUrl ? { thumbUrl: keep.thumbUrl } : {}),\n ...(keep.exportUrl ? { exportUrl: keep.exportUrl } : {}),\n };\n}\n\nconst ROW_FIELDS = 'channelId title metadata updatedAt';\n\n/** Write one doc. `ok: false` is lost work: say so. */\nexport async function saveDocArtifact(\n opts: IndexOptions,\n artifact: DocArtifact,\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) { ${ROW_FIELDS} }\n }`,\n {\n input: {\n surface: 'canvas',\n channelId: artifact.id,\n // Top-level AND inside the payload, as web: the column is what lists\n // filter on, the metadata copy is what the reader validates.\n ...(artifact.sessionId ? { sessionId: artifact.sessionId } : {}),\n ...(artifact.title ? { title: artifact.title } : {}),\n metadata: { artifact },\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. Recent edits are not stored yet.' };\n}\n\nexport interface DocListResult {\n docs: DocArtifact[];\n more: boolean;\n error: string | null;\n}\n\n/** The caller's docs, newest first (web `listArtifactsOfKinds(['doc'])`). */\nexport async function listDocArtifacts(opts: IndexOptions, limit = 24): Promise<DocListResult> {\n const page = await channelsMatching(opts, 'doc:', limit);\n const docs: DocArtifact[] = [];\n for (const row of page.rows) {\n const artifact = coerceDocArtifact(row.metadata);\n // The search also matches titles, so the kind and id are checked again.\n if (artifact && artifact.id === row.channelId) docs.push(artifact);\n }\n docs.sort((a, b) => (b.updatedAt ?? 0) - (a.updatedAt ?? 0));\n return {\n docs: docs.slice(0, limit),\n more: page.total > limit || docs.length > limit,\n error: docs.length === 0 ? page.error : null,\n };\n}\n\n/**\n * One of the CALLER'S OWN docs (web `loadOwnedArtifact`): only an id the\n * bearer-scoped list returns opens, so a link cannot open someone else's.\n */\nexport async function loadOwnedDocArtifact(\n opts: IndexOptions,\n id: string,\n): Promise<{ artifact: DocArtifact | null; error: string | null }> {\n if (!isDocArtifactId(id)) return { artifact: null, error: null };\n const key = id.trim();\n const page = await channelsMatching(opts, key, 5);\n const row = page.rows.find((r) => r.channelId === key);\n if (!row) return { artifact: null, error: page.error };\n const artifact = coerceDocArtifact(row.metadata);\n return { artifact: artifact && artifact.id === key ? artifact : null, error: null };\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,201 @@
1
+ import {flattenBlocks,isTextBlock,outdentBlock,inlineToRuns,removeBlock,runsText,normaliseRuns,findBlock,splitRuns,newBlock,runsToInline,updateBlock,insertAfter,defaultProps}from'./blocks.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 CARRIED_PROPS = ["textColor", "backgroundColor", "textAlignment"];
21
+ const LIST_TYPES = ["bulletListItem", "numberedListItem", "checkListItem"];
22
+ function setBlockType(blocks, id, type, extra = {}) {
23
+ return updateBlock(blocks, id, (block) => {
24
+ var _a;
25
+ if (!isTextBlock(block)) return block;
26
+ const carried = {};
27
+ if (type !== "codeBlock") {
28
+ for (const key of CARRIED_PROPS) if (key in ((_a = block.props) != null ? _a : {})) carried[key] = block.props[key];
29
+ }
30
+ let runs = inlineToRuns(block.content);
31
+ if (type === "codeBlock") runs = normaliseRuns(runs.map((r) => ({
32
+ text: r.text,
33
+ styles: {}
34
+ })));
35
+ return __spreadProps(__spreadValues({}, block), {
36
+ type,
37
+ props: __spreadValues(__spreadValues(__spreadValues({}, defaultProps(type)), carried), extra),
38
+ content: runsToInline(runs)
39
+ });
40
+ });
41
+ }
42
+ function setBlockRuns(blocks, id, runs) {
43
+ return updateBlock(blocks, id, (block) => __spreadProps(__spreadValues({}, block), {
44
+ content: runsToInline(runs)
45
+ }));
46
+ }
47
+ function nextTypeAfter(block) {
48
+ var _a;
49
+ if (LIST_TYPES.includes(block.type)) {
50
+ const carried = {};
51
+ for (const key of CARRIED_PROPS) if (key in ((_a = block.props) != null ? _a : {})) carried[key] = block.props[key];
52
+ return {
53
+ type: block.type,
54
+ props: carried
55
+ };
56
+ }
57
+ return {
58
+ type: "paragraph",
59
+ props: {}
60
+ };
61
+ }
62
+ function applyLines(blocks, id, runs, tailLength = 0) {
63
+ var _a, _b, _c;
64
+ const block = findBlock(blocks, id);
65
+ if (!block) return {
66
+ blocks
67
+ };
68
+ const text = runsText(runs);
69
+ if (block.type === "codeBlock" || !text.includes("\n")) {
70
+ return {
71
+ blocks: setBlockRuns(blocks, id, runs)
72
+ };
73
+ }
74
+ if (LIST_TYPES.includes(block.type) && text === "\n" && runsText(inlineToRuns(block.content)) === "") {
75
+ const depth = (_b = (_a = flattenBlocks(blocks).find((f) => f.block.id === id)) == null ? void 0 : _a.depth) != null ? _b : 0;
76
+ const cleared = setBlockRuns(blocks, id, []);
77
+ return {
78
+ blocks: depth > 0 ? outdentBlock(cleared, id) : setBlockType(cleared, id, "paragraph"),
79
+ focus: {
80
+ id,
81
+ at: 0
82
+ }
83
+ };
84
+ }
85
+ const lines = [];
86
+ let rest = runs;
87
+ for (; ; ) {
88
+ const idx = runsText(rest).indexOf("\n");
89
+ if (idx < 0) {
90
+ lines.push(rest);
91
+ break;
92
+ }
93
+ const [head, tail] = splitRuns(rest, idx);
94
+ lines.push(head);
95
+ rest = splitRuns(tail, 1)[1];
96
+ }
97
+ const next = nextTypeAfter(block);
98
+ const added = lines.slice(1).map((line) => newBlock(next.type, next.props, runsToInline(line)));
99
+ if (added.length && ((_c = block.children) == null ? void 0 : _c.length)) {
100
+ added[added.length - 1] = __spreadProps(__spreadValues({}, added[added.length - 1]), {
101
+ children: block.children
102
+ });
103
+ }
104
+ let out = updateBlock(blocks, id, (b) => {
105
+ var _a2;
106
+ return __spreadValues(__spreadProps(__spreadValues({}, b), {
107
+ content: runsToInline(lines[0])
108
+ }), added.length && ((_a2 = b.children) == null ? void 0 : _a2.length) ? {
109
+ children: []
110
+ } : {});
111
+ });
112
+ out = insertAfter(out, id, added);
113
+ const last = added[added.length - 1];
114
+ const lastText = runsText(lines[lines.length - 1]);
115
+ return {
116
+ blocks: out,
117
+ focus: last ? {
118
+ id: last.id,
119
+ at: Math.max(0, lastText.length - tailLength)
120
+ } : void 0
121
+ };
122
+ }
123
+ function backspaceAtStart(blocks, id) {
124
+ const flat = flattenBlocks(blocks);
125
+ const index = flat.findIndex((f) => f.block.id === id);
126
+ if (index < 0) return null;
127
+ const {
128
+ block,
129
+ depth
130
+ } = flat[index];
131
+ if (!isTextBlock(block)) return null;
132
+ if (block.type !== "paragraph") {
133
+ return {
134
+ blocks: setBlockType(blocks, id, "paragraph"),
135
+ focus: {
136
+ id,
137
+ at: 0
138
+ }
139
+ };
140
+ }
141
+ if (depth > 0) return {
142
+ blocks: outdentBlock(blocks, id),
143
+ focus: {
144
+ id,
145
+ at: 0
146
+ }
147
+ };
148
+ if (index === 0) return null;
149
+ const prev = flat[index - 1].block;
150
+ const runs = inlineToRuns(block.content);
151
+ if (!isTextBlock(prev)) {
152
+ if (runs.length) return null;
153
+ return {
154
+ blocks: removeBlock(blocks, id),
155
+ focus: void 0
156
+ };
157
+ }
158
+ const prevRuns = inlineToRuns(prev.content);
159
+ const at = runsText(prevRuns).length;
160
+ let out = setBlockRuns(blocks, prev.id, normaliseRuns([...prevRuns, ...runs]));
161
+ out = removeBlock(out, id);
162
+ return {
163
+ blocks: out,
164
+ focus: {
165
+ id: prev.id,
166
+ at
167
+ }
168
+ };
169
+ }
170
+ function insertBlockAfter(blocks, afterId, added) {
171
+ if (afterId && findBlock(blocks, afterId)) return insertAfter(blocks, afterId, [added]);
172
+ return [...blocks, added];
173
+ }
174
+ function deleteBlock(blocks, id) {
175
+ var _a, _b, _c, _d;
176
+ const flat = flattenBlocks(blocks);
177
+ const index = flat.findIndex((f) => f.block.id === id);
178
+ let out = removeBlock(blocks, id);
179
+ if (out.length === 0) out = [newBlock("paragraph")];
180
+ const neighbour = (_c = (_a = flat[index - 1]) == null ? void 0 : _a.block) != null ? _c : (_b = flat[index + 1]) == null ? void 0 : _b.block;
181
+ const focusId = neighbour && findBlock(out, neighbour.id) && isTextBlock(neighbour) ? neighbour.id : void 0;
182
+ return {
183
+ blocks: out,
184
+ focus: focusId ? {
185
+ id: focusId,
186
+ at: runsText(inlineToRuns((_d = findBlock(out, focusId)) == null ? void 0 : _d.content)).length
187
+ } : void 0
188
+ };
189
+ }
190
+ function duplicateBlock(blocks, id) {
191
+ const block = findBlock(blocks, id);
192
+ if (!block) return blocks;
193
+ const fresh = (b) => {
194
+ var _a;
195
+ return __spreadProps(__spreadValues({}, JSON.parse(JSON.stringify(b))), {
196
+ id: newBlock("paragraph").id,
197
+ children: ((_a = b.children) != null ? _a : []).map(fresh)
198
+ });
199
+ };
200
+ return insertAfter(blocks, id, [fresh(block)]);
201
+ }export{applyLines,backspaceAtStart,deleteBlock,duplicateBlock,insertBlockAfter,setBlockRuns,setBlockType};//# sourceMappingURL=docEdits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docEdits.js","sources":["../../../src/features/docs/docEdits.ts"],"sourcesContent":["/**\n * Structural edits the native docs editor makes - what BlockNote does on\n * Enter, Backspace at a block's start, a paste with line breaks, or a turn\n * into another block type. Block-level ops over the tree live in `blocks.ts`;\n * these combine them with the runs of the block being typed into.\n *\n * Pure: no RN imports, so it runs under jest as-is.\n */\nimport {\n defaultProps,\n findBlock,\n flattenBlocks,\n inlineToRuns,\n insertAfter,\n isTextBlock,\n newBlock,\n normaliseRuns,\n outdentBlock,\n removeBlock,\n runsText,\n runsToInline,\n splitRuns,\n updateBlock,\n type DocBlock,\n type Run,\n} from './blocks';\n\n/** Props that survive a type change (color and alignment are every text block's). */\nconst CARRIED_PROPS = ['textColor', 'backgroundColor', 'textAlignment'];\n\nconst LIST_TYPES = ['bulletListItem', 'numberedListItem', 'checkListItem'];\n\n/** Turn a text block into another text type (a heading level rides in `extra`). */\nexport function setBlockType(\n blocks: readonly DocBlock[],\n id: string,\n type: string,\n extra: Record<string, unknown> = {},\n): DocBlock[] {\n return updateBlock(blocks, id, (block) => {\n if (!isTextBlock(block)) return block;\n const carried: Record<string, unknown> = {};\n if (type !== 'codeBlock') {\n for (const key of CARRIED_PROPS) if (key in (block.props ?? {})) carried[key] = block.props[key];\n }\n let runs = inlineToRuns(block.content);\n // A code block is plain text: marks and links do not carry into it.\n if (type === 'codeBlock') runs = normaliseRuns(runs.map((r) => ({ text: r.text, styles: {} })));\n return { ...block, type, props: { ...defaultProps(type), ...carried, ...extra }, content: runsToInline(runs) };\n });\n}\n\n/** Write a text block's runs. */\nexport function setBlockRuns(blocks: readonly DocBlock[], id: string, runs: Run[]): DocBlock[] {\n return updateBlock(blocks, id, (block) => ({ ...block, content: runsToInline(runs) }));\n}\n\n/** What follows a block on Enter: lists continue, everything else becomes a paragraph. */\nfunction nextTypeAfter(block: DocBlock): { type: string; props: Record<string, unknown> } {\n if (LIST_TYPES.includes(block.type)) {\n const carried: Record<string, unknown> = {};\n for (const key of CARRIED_PROPS) if (key in (block.props ?? {})) carried[key] = block.props[key];\n return { type: block.type, props: carried };\n }\n return { type: 'paragraph', props: {} };\n}\n\nexport interface EditResult {\n blocks: DocBlock[];\n /** Block to put the cursor in, and where. */\n focus?: { id: string; at: number };\n}\n\n/**\n * A text block's new runs, where the text may hold line breaks (Enter, or a\n * paste). The first line stays; each further line becomes a block after it,\n * of the type Enter makes. Enter on an empty list item ends the list instead\n * (it becomes a paragraph, or lifts out a level when nested), as in BlockNote.\n * A code block keeps its line breaks. `tailLength` is how much text sat\n * after the cursor, so the cursor lands before it in the last new block.\n */\nexport function applyLines(blocks: readonly DocBlock[], id: string, runs: Run[], tailLength = 0): EditResult {\n const block = findBlock(blocks, id);\n if (!block) return { blocks: blocks as DocBlock[] };\n const text = runsText(runs);\n if (block.type === 'codeBlock' || !text.includes('\\n')) {\n return { blocks: setBlockRuns(blocks, id, runs) };\n }\n // Enter on an empty list item: leave the list.\n if (LIST_TYPES.includes(block.type) && text === '\\n' && runsText(inlineToRuns(block.content)) === '') {\n const depth = flattenBlocks(blocks).find((f) => f.block.id === id)?.depth ?? 0;\n const cleared = setBlockRuns(blocks, id, []);\n return {\n blocks: depth > 0 ? outdentBlock(cleared, id) : setBlockType(cleared, id, 'paragraph'),\n focus: { id, at: 0 },\n };\n }\n const lines: Run[][] = [];\n let rest = runs;\n for (;;) {\n const idx = runsText(rest).indexOf('\\n');\n if (idx < 0) {\n lines.push(rest);\n break;\n }\n const [head, tail] = splitRuns(rest, idx);\n lines.push(head);\n rest = splitRuns(tail, 1)[1];\n }\n const next = nextTypeAfter(block);\n const added = lines.slice(1).map((line) => newBlock(next.type, next.props, runsToInline(line)));\n // The new block takes the old one's children, so a split item keeps its sub-list below the cursor's line.\n if (added.length && block.children?.length) {\n added[added.length - 1] = { ...added[added.length - 1], children: block.children };\n }\n let out = updateBlock(blocks, id, (b) => ({\n ...b,\n content: runsToInline(lines[0]),\n ...(added.length && b.children?.length ? { children: [] } : {}),\n }));\n out = insertAfter(out, id, added);\n const last = added[added.length - 1];\n // The cursor lands before the text that followed it (`tailLength` characters), as typed.\n const lastText = runsText(lines[lines.length - 1]);\n return { blocks: out, focus: last ? { id: last.id, at: Math.max(0, lastText.length - tailLength) } : undefined };\n}\n\n/**\n * Backspace with the cursor at a block's start (BlockNote's behaviour):\n * a list item, heading, quote or code block turns into a paragraph first; a\n * nested paragraph lifts a level; otherwise the block joins the text block\n * before it. An empty block after a picture or table just goes.\n * Null: nothing to do (the first block of the doc).\n */\nexport function backspaceAtStart(blocks: readonly DocBlock[], id: string): EditResult | null {\n const flat = flattenBlocks(blocks);\n const index = flat.findIndex((f) => f.block.id === id);\n if (index < 0) return null;\n const { block, depth } = flat[index];\n if (!isTextBlock(block)) return null;\n if (block.type !== 'paragraph') {\n return { blocks: setBlockType(blocks, id, 'paragraph'), focus: { id, at: 0 } };\n }\n if (depth > 0) return { blocks: outdentBlock(blocks, id), focus: { id, at: 0 } };\n if (index === 0) return null;\n const prev = flat[index - 1].block;\n const runs = inlineToRuns(block.content);\n if (!isTextBlock(prev)) {\n if (runs.length) return null;\n return { blocks: removeBlock(blocks, id), focus: undefined };\n }\n const prevRuns = inlineToRuns(prev.content);\n const at = runsText(prevRuns).length;\n let out = setBlockRuns(blocks, prev.id, normaliseRuns([...prevRuns, ...runs]));\n out = removeBlock(out, id);\n return { blocks: out, focus: { id: prev.id, at } };\n}\n\n/** Insert a block after `afterId` (or at the end) and say where the cursor goes. */\nexport function insertBlockAfter(blocks: readonly DocBlock[], afterId: string | null, added: DocBlock): DocBlock[] {\n if (afterId && findBlock(blocks, afterId)) return insertAfter(blocks, afterId, [added]);\n return [...blocks, added];\n}\n\n/** Delete a block; a doc never ends up with nothing to type into. */\nexport function deleteBlock(blocks: readonly DocBlock[], id: string): EditResult {\n const flat = flattenBlocks(blocks);\n const index = flat.findIndex((f) => f.block.id === id);\n let out = removeBlock(blocks, id);\n if (out.length === 0) out = [newBlock('paragraph')];\n const neighbour = flat[index - 1]?.block ?? flat[index + 1]?.block;\n const focusId = neighbour && findBlock(out, neighbour.id) && isTextBlock(neighbour) ? neighbour.id : undefined;\n return {\n blocks: out,\n focus: focusId\n ? { id: focusId, at: runsText(inlineToRuns(findBlock(out, focusId)?.content)).length }\n : undefined,\n };\n}\n\n/** A copy of a block (and its children) with fresh ids, placed after it. */\nexport function duplicateBlock(blocks: readonly DocBlock[], id: string): DocBlock[] {\n const block = findBlock(blocks, id);\n if (!block) return blocks as DocBlock[];\n const fresh = (b: DocBlock): DocBlock => ({\n ...(JSON.parse(JSON.stringify(b)) as DocBlock),\n id: newBlock('paragraph').id,\n children: (b.children ?? []).map(fresh),\n });\n return insertAfter(blocks, id, [fresh(block)]);\n}\n"],"names":["_a"],"mappings":"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"}
@@ -0,0 +1,235 @@
1
+ import {flattenBlocks,inlineToRuns,isObject,tableCellRuns}from'./blocks.js';const escapeHtml = (s) => s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
2
+ const TEXT_COLORS = {
3
+ gray: "#9b9a97",
4
+ brown: "#64473a",
5
+ red: "#e03e3e",
6
+ orange: "#d9730d",
7
+ yellow: "#dfab01",
8
+ green: "#4d6461",
9
+ blue: "#0b6e99",
10
+ purple: "#6940a5",
11
+ pink: "#ad1a72"
12
+ };
13
+ const BACKGROUND_COLORS = {
14
+ gray: "#ebeced",
15
+ brown: "#e9e5e3",
16
+ red: "#fbe4e4",
17
+ orange: "#f6e9d9",
18
+ yellow: "#fbf3db",
19
+ green: "#ddedea",
20
+ blue: "#ddebf1",
21
+ purple: "#eae4f2",
22
+ pink: "#f4dfeb"
23
+ };
24
+ const safeHref = (href) => /^(https?:|mailto:|tel:)/i.test(href.trim()) ? href.trim() : null;
25
+ function runsHtml(runs) {
26
+ return runs.map((run) => {
27
+ let html = escapeHtml(run.text).replace(/\n/g, "<br>");
28
+ const s = run.styles;
29
+ if (s.code) html = `<code>${html}</code>`;
30
+ if (s.bold) html = `<strong>${html}</strong>`;
31
+ if (s.italic) html = `<em>${html}</em>`;
32
+ if (s.underline) html = `<u>${html}</u>`;
33
+ if (s.strike) html = `<s>${html}</s>`;
34
+ const css = [s.textColor && TEXT_COLORS[s.textColor] ? `color:${TEXT_COLORS[s.textColor]}` : "", s.backgroundColor && BACKGROUND_COLORS[s.backgroundColor] ? `background-color:${BACKGROUND_COLORS[s.backgroundColor]}` : ""].filter(Boolean);
35
+ if (css.length) html = `<span style="${css.join(";")}">${html}</span>`;
36
+ const href = run.href ? safeHref(run.href) : null;
37
+ if (href) html = `<a href="${escapeHtml(href)}">${html}</a>`;
38
+ return html;
39
+ }).join("");
40
+ }
41
+ function alignAttr(block) {
42
+ var _a;
43
+ const align = (_a = block.props) == null ? void 0 : _a.textAlignment;
44
+ return align === "center" || align === "right" || align === "justify" ? ` style="text-align:${align}"` : "";
45
+ }
46
+ function tableHtml(content) {
47
+ const table = content;
48
+ if (!isObject(table) || !Array.isArray(table.rows)) return "";
49
+ const headerRows = Number(table.headerRows) || 0;
50
+ const rows = table.rows.map((row, r) => {
51
+ const tag = r < headerRows ? "th" : "td";
52
+ const cells = (Array.isArray(row == null ? void 0 : row.cells) ? row.cells : []).map((cell) => `<${tag}>${runsHtml(tableCellRuns(cell))}</${tag}>`).join("");
53
+ return `<tr>${cells}</tr>`;
54
+ }).join("");
55
+ return `<table>${rows}</table>`;
56
+ }
57
+ function blockHtml(block) {
58
+ var _a, _b, _c, _d, _e, _f, _g, _h;
59
+ const inner = runsHtml(inlineToRuns(block.content));
60
+ const align = alignAttr(block);
61
+ switch (block.type) {
62
+ case "heading": {
63
+ const level = [1, 2, 3].includes(Number((_a = block.props) == null ? void 0 : _a.level)) ? Number((_b = block.props) == null ? void 0 : _b.level) : 1;
64
+ return `<h${level}${align}>${inner}</h${level}>`;
65
+ }
66
+ case "quote":
67
+ return `<blockquote${align}>${inner}</blockquote>`;
68
+ case "codeBlock":
69
+ return `<pre><code>${escapeHtml(inlineToRuns(block.content).map((r) => r.text).join(""))}</code></pre>`;
70
+ case "image": {
71
+ const url = typeof ((_c = block.props) == null ? void 0 : _c.url) === "string" ? block.props.url : "";
72
+ if (!/^https?:/i.test(url)) return "";
73
+ const caption = typeof ((_d = block.props) == null ? void 0 : _d.caption) === "string" ? block.props.caption : "";
74
+ const width = Number((_e = block.props) == null ? void 0 : _e.previewWidth);
75
+ const img = `<img src="${escapeHtml(url)}" alt="${escapeHtml(caption || String((_g = (_f = block.props) == null ? void 0 : _f.name) != null ? _g : ""))}"${width > 0 ? ` width="${Math.round(width)}"` : ""}>`;
76
+ return caption ? `<figure>${img}<figcaption>${escapeHtml(caption)}</figcaption></figure>` : `<p>${img}</p>`;
77
+ }
78
+ case "table":
79
+ return tableHtml(block.content);
80
+ case "checkListItem":
81
+ return `<p${align}>${((_h = block.props) == null ? void 0 : _h.checked) ? "&#9745;" : "&#9744;"} ${inner}</p>`;
82
+ default:
83
+ return inner || block.type === "paragraph" ? `<p${align}>${inner}</p>` : "";
84
+ }
85
+ }
86
+ const LIST_TAG = {
87
+ bulletListItem: "ul",
88
+ numberedListItem: "ol"
89
+ };
90
+ function blocksToHtml(blocks) {
91
+ var _a, _b, _c;
92
+ let html = "";
93
+ let i = 0;
94
+ while (i < blocks.length) {
95
+ const block = blocks[i];
96
+ const tag = LIST_TAG[block.type];
97
+ if (tag) {
98
+ const start = Number((_a = block.props) == null ? void 0 : _a.start);
99
+ html += tag === "ol" && start > 1 ? `<ol start="${start}">` : `<${tag}>`;
100
+ while (i < blocks.length && blocks[i].type === block.type) {
101
+ const item = blocks[i];
102
+ html += `<li${alignAttr(item)}>${runsHtml(inlineToRuns(item.content))}${blocksToHtml((_b = item.children) != null ? _b : [])}</li>`;
103
+ i += 1;
104
+ }
105
+ html += `</${tag}>`;
106
+ continue;
107
+ }
108
+ html += blockHtml(block);
109
+ if ((_c = block.children) == null ? void 0 : _c.length) html += `<div style="margin-left:1.5em">${blocksToHtml(block.children)}</div>`;
110
+ i += 1;
111
+ }
112
+ return html;
113
+ }
114
+ const PAGE_CSS = `
115
+ @page { size: letter; margin: 1in; }
116
+ :root { color-scheme: light; }
117
+ body {
118
+ margin: 0 auto; max-width: 6.5in; padding: 1in 0;
119
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
120
+ font-size: 11pt; line-height: 1.6; color: #18181b;
121
+ }
122
+ h1, h2, h3 { line-height: 1.25; margin: 1.6em 0 0.5em; }
123
+ h1 { font-size: 1.9em } h2 { font-size: 1.45em } h3 { font-size: 1.15em }
124
+ p, ul, ol, blockquote, pre, table, figure { margin: 0 0 0.85em }
125
+ ul, ol { padding-left: 1.4em }
126
+ blockquote { border-left: 3px solid #d4d4d8; margin-left: 0; padding-left: 1em; color: #52525b }
127
+ pre, code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0.9em }
128
+ pre { background: #f4f4f5; padding: 0.8em 1em; border-radius: 6px; white-space: pre-wrap }
129
+ img { max-width: 100%; height: auto }
130
+ figcaption { font-size: 0.9em; color: #71717a; text-align: center }
131
+ table { border-collapse: collapse; width: 100% }
132
+ th, td { border: 1px solid #d4d4d8; padding: 0.4em 0.6em; text-align: left }
133
+ th { background: #f4f4f5; font-weight: 600 }
134
+ @media print { body { padding: 0 } a { color: inherit; text-decoration: none } }
135
+ `;
136
+ function standaloneHtml(title, bodyHtml) {
137
+ return `<!doctype html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>${escapeHtml(title)}</title><style>${PAGE_CSS}</style></head><body>${bodyHtml}</body></html>`;
138
+ }
139
+ function toWordHtml(title, bodyHtml) {
140
+ return `<!doctype html>
141
+ <html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40">
142
+ <head>
143
+ <meta charset="utf-8">
144
+ <title>${escapeHtml(title)}</title>
145
+ </head>
146
+ <body>
147
+ ${bodyHtml}
148
+ </body>
149
+ </html>`;
150
+ }
151
+ function fileSafe(title) {
152
+ const cleaned = title.replace(/[/\\?%*:|"<>]/g, "-").trim().slice(0, 80);
153
+ return cleaned || "document";
154
+ }
155
+ const mdEscape = (s) => s.replace(/([\\`*_[\]])/g, "\\$1");
156
+ function runsMarkdown(runs) {
157
+ return runs.map((run) => {
158
+ const s = run.styles;
159
+ if (s.code) {
160
+ const code = `\`${run.text}\``;
161
+ return run.href && safeHref(run.href) ? `[${code}](${safeHref(run.href)})` : code;
162
+ }
163
+ const match = /^(\s*)([\s\S]*?)(\s*)$/.exec(run.text);
164
+ const [lead, body, trail] = match ? [match[1], match[2], match[3]] : ["", run.text, ""];
165
+ if (!body) return run.text;
166
+ let md = mdEscape(body);
167
+ if (s.bold) md = `**${md}**`;
168
+ if (s.italic) md = `_${md}_`;
169
+ if (s.strike) md = `~~${md}~~`;
170
+ if (s.underline) md = `<u>${md}</u>`;
171
+ const href = run.href ? safeHref(run.href) : null;
172
+ if (href) md = `[${md}](${href})`;
173
+ return `${lead}${md}${trail}`;
174
+ }).join("");
175
+ }
176
+ function blocksToMarkdown(blocks) {
177
+ var _a, _b, _c, _d, _e, _f;
178
+ const lines = [];
179
+ for (const {
180
+ block,
181
+ depth,
182
+ number
183
+ } of flattenBlocks(blocks)) {
184
+ const indent = " ".repeat(depth);
185
+ const text = runsMarkdown(inlineToRuns(block.content));
186
+ switch (block.type) {
187
+ case "heading": {
188
+ const level = [1, 2, 3].includes(Number((_a = block.props) == null ? void 0 : _a.level)) ? Number((_b = block.props) == null ? void 0 : _b.level) : 1;
189
+ lines.push(`${"#".repeat(level)} ${text}`, "");
190
+ break;
191
+ }
192
+ case "bulletListItem":
193
+ lines.push(`${indent}- ${text}`);
194
+ break;
195
+ case "numberedListItem":
196
+ lines.push(`${indent}${number != null ? number : 1}. ${text}`);
197
+ break;
198
+ case "checkListItem":
199
+ lines.push(`${indent}- [${((_c = block.props) == null ? void 0 : _c.checked) ? "x" : " "}] ${text}`);
200
+ break;
201
+ case "quote":
202
+ lines.push(`> ${text}`, "");
203
+ break;
204
+ case "codeBlock": {
205
+ const lang = typeof ((_d = block.props) == null ? void 0 : _d.language) === "string" && block.props.language !== "text" ? block.props.language : "";
206
+ const code = inlineToRuns(block.content).map((r) => r.text).join("");
207
+ lines.push(`\`\`\`${lang}`, code, "```", "");
208
+ break;
209
+ }
210
+ case "image": {
211
+ const url = typeof ((_e = block.props) == null ? void 0 : _e.url) === "string" ? block.props.url : "";
212
+ if (/^https?:/i.test(url)) {
213
+ const caption = typeof ((_f = block.props) == null ? void 0 : _f.caption) === "string" ? block.props.caption : "";
214
+ lines.push(`![${mdEscape(caption)}](${url})`, "");
215
+ }
216
+ break;
217
+ }
218
+ case "table": {
219
+ const table = block.content;
220
+ const rows = isObject(table) && Array.isArray(table.rows) ? table.rows : [];
221
+ rows.forEach((row, r) => {
222
+ const cells = (Array.isArray(row == null ? void 0 : row.cells) ? row.cells : []).map((cell) => runsMarkdown(tableCellRuns(cell)).replace(/\|/g, "\\|").replace(/\n/g, " "));
223
+ lines.push(`| ${cells.join(" | ")} |`);
224
+ if (r === 0) lines.push(`|${cells.map(() => " --- ").join("|")}|`);
225
+ });
226
+ lines.push("");
227
+ break;
228
+ }
229
+ default:
230
+ lines.push(text, "");
231
+ }
232
+ }
233
+ return `${lines.join("\n").replace(/\n{3,}/g, "\n\n").trim()}
234
+ `;
235
+ }export{BACKGROUND_COLORS,TEXT_COLORS,blocksToHtml,blocksToMarkdown,escapeHtml,fileSafe,standaloneHtml,toWordHtml};//# sourceMappingURL=docExport.js.map