@bendyline/docblocks-react 1.1.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/README.md +50 -15
  2. package/dist/AppMenu/AppMenu.d.ts +29 -2
  3. package/dist/AppMenu/AppMenu.d.ts.map +1 -1
  4. package/dist/AppMenu/AppMenu.js +41 -2
  5. package/dist/AppMenu/AppMenu.js.map +1 -1
  6. package/dist/AppMenu/index.d.ts +1 -1
  7. package/dist/AppMenu/index.d.ts.map +1 -1
  8. package/dist/DocBlocksShell/DocBlocksShell.d.ts +17 -4
  9. package/dist/DocBlocksShell/DocBlocksShell.d.ts.map +1 -1
  10. package/dist/DocBlocksShell/DocBlocksShell.js +1710 -299
  11. package/dist/DocBlocksShell/DocBlocksShell.js.map +1 -1
  12. package/dist/DocBlocksShell/LazyEditorShell.d.ts +3 -0
  13. package/dist/DocBlocksShell/LazyEditorShell.d.ts.map +1 -0
  14. package/dist/DocBlocksShell/LazyEditorShell.js +3 -0
  15. package/dist/DocBlocksShell/LazyEditorShell.js.map +1 -0
  16. package/dist/DocBlocksShell/UpdateAvailableNotice.d.ts +13 -0
  17. package/dist/DocBlocksShell/UpdateAvailableNotice.d.ts.map +1 -0
  18. package/dist/DocBlocksShell/UpdateAvailableNotice.js +16 -0
  19. package/dist/DocBlocksShell/UpdateAvailableNotice.js.map +1 -0
  20. package/dist/DocBlocksShell/document-title.d.ts +3 -0
  21. package/dist/DocBlocksShell/document-title.d.ts.map +1 -0
  22. package/dist/DocBlocksShell/document-title.js +17 -0
  23. package/dist/DocBlocksShell/document-title.js.map +1 -0
  24. package/dist/DocBlocksShell/workspace-authority-barrier.d.ts +14 -0
  25. package/dist/DocBlocksShell/workspace-authority-barrier.d.ts.map +1 -0
  26. package/dist/DocBlocksShell/workspace-authority-barrier.js +23 -0
  27. package/dist/DocBlocksShell/workspace-authority-barrier.js.map +1 -0
  28. package/dist/Export/DeferredExportToolbarControls.d.ts +5 -0
  29. package/dist/Export/DeferredExportToolbarControls.d.ts.map +1 -0
  30. package/dist/Export/DeferredExportToolbarControls.js +10 -0
  31. package/dist/Export/DeferredExportToolbarControls.js.map +1 -0
  32. package/dist/Export/ExportDialog.d.ts +10 -1
  33. package/dist/Export/ExportDialog.d.ts.map +1 -1
  34. package/dist/Export/ExportDialog.js +39 -20
  35. package/dist/Export/ExportDialog.js.map +1 -1
  36. package/dist/Export/ExportToolbarControls.d.ts +21 -1
  37. package/dist/Export/ExportToolbarControls.d.ts.map +1 -1
  38. package/dist/Export/ExportToolbarControls.js +161 -26
  39. package/dist/Export/ExportToolbarControls.js.map +1 -1
  40. package/dist/Export/export-destination.d.ts +3 -0
  41. package/dist/Export/export-destination.d.ts.map +1 -0
  42. package/dist/Export/export-destination.js +32 -0
  43. package/dist/Export/export-destination.js.map +1 -0
  44. package/dist/Export/index.d.ts +8 -4
  45. package/dist/Export/index.d.ts.map +1 -1
  46. package/dist/Export/index.js +4 -1
  47. package/dist/Export/index.js.map +1 -1
  48. package/dist/Export/public-api.d.ts +12 -0
  49. package/dist/Export/public-api.d.ts.map +1 -0
  50. package/dist/Export/public-api.js +9 -0
  51. package/dist/Export/public-api.js.map +1 -0
  52. package/dist/Export/run-export.d.ts +3 -1
  53. package/dist/Export/run-export.d.ts.map +1 -1
  54. package/dist/Export/run-export.js +58 -25
  55. package/dist/Export/run-export.js.map +1 -1
  56. package/dist/Export/transform-summaries.d.ts +7 -0
  57. package/dist/Export/transform-summaries.d.ts.map +1 -0
  58. package/dist/Export/transform-summaries.js +6 -0
  59. package/dist/Export/transform-summaries.js.map +1 -0
  60. package/dist/ExportDialog-MEUISWZX.js +9 -0
  61. package/dist/ExportDialog-MEUISWZX.js.map +1 -0
  62. package/dist/ExportToolbarControls-D2YDWOXW.js +373 -0
  63. package/dist/ExportToolbarControls-D2YDWOXW.js.map +1 -0
  64. package/dist/FileExplorer/FileExplorer.d.ts +26 -4
  65. package/dist/FileExplorer/FileExplorer.d.ts.map +1 -1
  66. package/dist/FileExplorer/FileExplorer.js +204 -29
  67. package/dist/FileExplorer/FileExplorer.js.map +1 -1
  68. package/dist/FileExplorer/FileTreeNode.d.ts +24 -3
  69. package/dist/FileExplorer/FileTreeNode.d.ts.map +1 -1
  70. package/dist/FileExplorer/FileTreeNode.js +27 -8
  71. package/dist/FileExplorer/FileTreeNode.js.map +1 -1
  72. package/dist/FileExplorer/index.d.ts +1 -1
  73. package/dist/FileExplorer/index.d.ts.map +1 -1
  74. package/dist/FileExplorer/useFileTree.d.ts +5 -3
  75. package/dist/FileExplorer/useFileTree.d.ts.map +1 -1
  76. package/dist/FileExplorer/useFileTree.js +173 -13
  77. package/dist/FileExplorer/useFileTree.js.map +1 -1
  78. package/dist/Git/GitAuthGuidanceDialog.d.ts +18 -0
  79. package/dist/Git/GitAuthGuidanceDialog.d.ts.map +1 -0
  80. package/dist/Git/GitAuthGuidanceDialog.js +27 -0
  81. package/dist/Git/GitAuthGuidanceDialog.js.map +1 -0
  82. package/dist/Git/GitBranchesDialog.d.ts +13 -0
  83. package/dist/Git/GitBranchesDialog.d.ts.map +1 -0
  84. package/dist/Git/GitBranchesDialog.js +59 -0
  85. package/dist/Git/GitBranchesDialog.js.map +1 -0
  86. package/dist/Git/GitCloneDialog.d.ts +14 -0
  87. package/dist/Git/GitCloneDialog.d.ts.map +1 -0
  88. package/dist/Git/GitCloneDialog.js +79 -0
  89. package/dist/Git/GitCloneDialog.js.map +1 -0
  90. package/dist/Git/GitCommitDialog.d.ts +12 -0
  91. package/dist/Git/GitCommitDialog.d.ts.map +1 -0
  92. package/dist/Git/GitCommitDialog.js +38 -0
  93. package/dist/Git/GitCommitDialog.js.map +1 -0
  94. package/dist/Git/GitConflictsDialog.d.ts +12 -0
  95. package/dist/Git/GitConflictsDialog.d.ts.map +1 -0
  96. package/dist/Git/GitConflictsDialog.js +17 -0
  97. package/dist/Git/GitConflictsDialog.js.map +1 -0
  98. package/dist/Git/GitContext.d.ts +89 -0
  99. package/dist/Git/GitContext.d.ts.map +1 -0
  100. package/dist/Git/GitContext.js +15 -0
  101. package/dist/Git/GitContext.js.map +1 -0
  102. package/dist/Git/GitDiffDialog.d.ts +20 -0
  103. package/dist/Git/GitDiffDialog.d.ts.map +1 -0
  104. package/dist/Git/GitDiffDialog.js +100 -0
  105. package/dist/Git/GitDiffDialog.js.map +1 -0
  106. package/dist/Git/GitDiffView.d.ts +23 -0
  107. package/dist/Git/GitDiffView.d.ts.map +1 -0
  108. package/dist/Git/GitDiffView.js +77 -0
  109. package/dist/Git/GitDiffView.js.map +1 -0
  110. package/dist/Git/GitHistoryDialog.d.ts +15 -0
  111. package/dist/Git/GitHistoryDialog.d.ts.map +1 -0
  112. package/dist/Git/GitHistoryDialog.js +107 -0
  113. package/dist/Git/GitHistoryDialog.js.map +1 -0
  114. package/dist/Git/GitStatusBar.d.ts +8 -0
  115. package/dist/Git/GitStatusBar.d.ts.map +1 -0
  116. package/dist/Git/GitStatusBar.js +49 -0
  117. package/dist/Git/GitStatusBar.js.map +1 -0
  118. package/dist/Git/GitToolbarControl.d.ts +15 -0
  119. package/dist/Git/GitToolbarControl.d.ts.map +1 -0
  120. package/dist/Git/GitToolbarControl.js +51 -0
  121. package/dist/Git/GitToolbarControl.js.map +1 -0
  122. package/dist/Git/GitUI.d.ts +14 -0
  123. package/dist/Git/GitUI.d.ts.map +1 -0
  124. package/dist/Git/GitUI.js +21 -0
  125. package/dist/Git/GitUI.js.map +1 -0
  126. package/dist/Git/commit-selection.d.ts +22 -0
  127. package/dist/Git/commit-selection.d.ts.map +1 -0
  128. package/dist/Git/commit-selection.js +47 -0
  129. package/dist/Git/commit-selection.js.map +1 -0
  130. package/dist/Git/git-clone-utils.d.ts +8 -0
  131. package/dist/Git/git-clone-utils.d.ts.map +1 -0
  132. package/dist/Git/git-clone-utils.js +26 -0
  133. package/dist/Git/git-clone-utils.js.map +1 -0
  134. package/dist/Git/git-status.d.ts +24 -0
  135. package/dist/Git/git-status.d.ts.map +1 -0
  136. package/dist/Git/git-status.js +105 -0
  137. package/dist/Git/git-status.js.map +1 -0
  138. package/dist/Git/useGit.d.ts +15 -0
  139. package/dist/Git/useGit.d.ts.map +1 -0
  140. package/dist/Git/useGit.js +206 -0
  141. package/dist/Git/useGit.js.map +1 -0
  142. package/dist/Git/useGitStatus.d.ts +17 -0
  143. package/dist/Git/useGitStatus.d.ts.map +1 -0
  144. package/dist/Git/useGitStatus.js +63 -0
  145. package/dist/Git/useGitStatus.js.map +1 -0
  146. package/dist/GitToolbarControl-LMIR4R7I.js +117 -0
  147. package/dist/GitToolbarControl-LMIR4R7I.js.map +1 -0
  148. package/dist/GitUI-KGF5MSNV.js +1048 -0
  149. package/dist/GitUI-KGF5MSNV.js.map +1 -0
  150. package/dist/LazyEditorShell-EF2BWRXU.js +6 -0
  151. package/dist/LazyEditorShell-EF2BWRXU.js.map +1 -0
  152. package/dist/Settings/Settings.d.ts +23 -0
  153. package/dist/Settings/Settings.d.ts.map +1 -0
  154. package/dist/Settings/Settings.js +22 -0
  155. package/dist/Settings/Settings.js.map +1 -0
  156. package/dist/Settings/public-api.d.ts +3 -0
  157. package/dist/Settings/public-api.d.ts.map +1 -0
  158. package/dist/Settings/public-api.js +2 -0
  159. package/dist/Settings/public-api.js.map +1 -0
  160. package/dist/WorkspacePicker/WorkspacePicker.d.ts +6 -1
  161. package/dist/WorkspacePicker/WorkspacePicker.d.ts.map +1 -1
  162. package/dist/WorkspacePicker/WorkspacePicker.js +16 -5
  163. package/dist/WorkspacePicker/WorkspacePicker.js.map +1 -1
  164. package/dist/chunk-3SAXDU2U.js +157 -0
  165. package/dist/chunk-3SAXDU2U.js.map +1 -0
  166. package/dist/chunk-4XXSWN3T.js +13 -0
  167. package/dist/chunk-4XXSWN3T.js.map +1 -0
  168. package/dist/chunk-5A4KEWKT.js +97 -0
  169. package/dist/chunk-5A4KEWKT.js.map +1 -0
  170. package/dist/chunk-AOVTHZU7.js +321 -0
  171. package/dist/chunk-AOVTHZU7.js.map +1 -0
  172. package/dist/chunk-DD4VFJQI.js +51 -0
  173. package/dist/chunk-DD4VFJQI.js.map +1 -0
  174. package/dist/chunk-GSNZSCIK.js +55 -0
  175. package/dist/chunk-GSNZSCIK.js.map +1 -0
  176. package/dist/chunk-VHDP4IPL.js +70 -0
  177. package/dist/chunk-VHDP4IPL.js.map +1 -0
  178. package/dist/chunk-ZI56BNB7.js +270 -0
  179. package/dist/chunk-ZI56BNB7.js.map +1 -0
  180. package/dist/components/Dialog.d.ts +22 -0
  181. package/dist/components/Dialog.d.ts.map +1 -0
  182. package/dist/components/Dialog.js +33 -0
  183. package/dist/components/Dialog.js.map +1 -0
  184. package/dist/editor.d.ts +10 -0
  185. package/dist/editor.d.ts.map +1 -0
  186. package/dist/editor.js +70 -0
  187. package/dist/editor.js.map +1 -0
  188. package/dist/export/index.d.ts +87 -0
  189. package/dist/export/index.js +26 -0
  190. package/dist/export/index.js.map +1 -0
  191. package/dist/hooks/index.d.ts +2 -1
  192. package/dist/hooks/index.d.ts.map +1 -1
  193. package/dist/hooks/index.js +1 -1
  194. package/dist/hooks/index.js.map +1 -1
  195. package/dist/hooks/useDocumentSession.d.ts +16 -0
  196. package/dist/hooks/useDocumentSession.d.ts.map +1 -0
  197. package/dist/hooks/useDocumentSession.js +18 -0
  198. package/dist/hooks/useDocumentSession.js.map +1 -0
  199. package/dist/icons.d.ts +11 -6
  200. package/dist/icons.d.ts.map +1 -1
  201. package/dist/icons.js +21 -20
  202. package/dist/icons.js.map +1 -1
  203. package/dist/index.d.ts +8 -5
  204. package/dist/index.d.ts.map +1 -1
  205. package/dist/index.js +4 -2
  206. package/dist/index.js.map +1 -1
  207. package/dist/preferences/theme.d.ts +18 -0
  208. package/dist/preferences/theme.d.ts.map +1 -0
  209. package/dist/preferences/theme.js +63 -0
  210. package/dist/preferences/theme.js.map +1 -0
  211. package/dist/provider-lease.d.ts +10 -0
  212. package/dist/provider-lease.d.ts.map +1 -0
  213. package/dist/provider-lease.js +42 -0
  214. package/dist/provider-lease.js.map +1 -0
  215. package/dist/run-export-ICTZITXC.js +10 -0
  216. package/dist/run-export-ICTZITXC.js.map +1 -0
  217. package/dist/settings/index.d.ts +28 -0
  218. package/dist/settings/index.js +12 -0
  219. package/dist/settings/index.js.map +1 -0
  220. package/package.json +27 -10
  221. package/src/AppMenu/AppMenu.tsx +169 -99
  222. package/src/AppMenu/index.ts +1 -1
  223. package/src/DocBlocksShell/DocBlocksShell.tsx +2183 -516
  224. package/src/DocBlocksShell/LazyEditorShell.ts +2 -0
  225. package/src/DocBlocksShell/UpdateAvailableNotice.tsx +60 -0
  226. package/src/DocBlocksShell/document-title.ts +19 -0
  227. package/src/DocBlocksShell/workspace-authority-barrier.ts +26 -0
  228. package/src/Export/DeferredExportToolbarControls.tsx +23 -0
  229. package/src/Export/ExportDialog.tsx +102 -27
  230. package/src/Export/ExportToolbarControls.tsx +343 -57
  231. package/src/Export/export-destination.ts +30 -0
  232. package/src/Export/index.ts +18 -4
  233. package/src/Export/public-api.ts +17 -0
  234. package/src/Export/run-export.ts +66 -29
  235. package/src/Export/transform-summaries.ts +14 -0
  236. package/src/FileExplorer/FileExplorer.tsx +284 -38
  237. package/src/FileExplorer/FileTreeNode.tsx +100 -8
  238. package/src/FileExplorer/index.ts +1 -1
  239. package/src/FileExplorer/useFileTree.ts +190 -16
  240. package/src/Git/GitAuthGuidanceDialog.tsx +84 -0
  241. package/src/Git/GitBranchesDialog.tsx +144 -0
  242. package/src/Git/GitCloneDialog.tsx +200 -0
  243. package/src/Git/GitCommitDialog.tsx +119 -0
  244. package/src/Git/GitConflictsDialog.tsx +62 -0
  245. package/src/Git/GitContext.tsx +88 -0
  246. package/src/Git/GitDiffDialog.tsx +147 -0
  247. package/src/Git/GitDiffView.tsx +105 -0
  248. package/src/Git/GitHistoryDialog.tsx +195 -0
  249. package/src/Git/GitStatusBar.tsx +157 -0
  250. package/src/Git/GitToolbarControl.tsx +123 -0
  251. package/src/Git/GitUI.tsx +68 -0
  252. package/src/Git/commit-selection.ts +63 -0
  253. package/src/Git/git-clone-utils.ts +23 -0
  254. package/src/Git/git-status.ts +113 -0
  255. package/src/Git/useGit.ts +279 -0
  256. package/src/Git/useGitStatus.ts +78 -0
  257. package/src/Settings/Settings.tsx +118 -0
  258. package/src/Settings/public-api.ts +8 -0
  259. package/src/WorkspacePicker/WorkspacePicker.tsx +62 -8
  260. package/src/components/Dialog.tsx +81 -0
  261. package/src/editor.ts +72 -0
  262. package/src/hooks/index.ts +2 -1
  263. package/src/hooks/useDocumentSession.ts +37 -0
  264. package/src/icons.tsx +33 -55
  265. package/src/index.ts +35 -5
  266. package/src/preferences/theme.ts +67 -0
  267. package/src/provider-lease.ts +52 -0
  268. package/src/styles/docblocks.css +2247 -77
  269. package/src/types/pwa-dom.d.ts +31 -0
  270. package/dist/hooks/useAutoSave.d.ts +0 -15
  271. package/dist/hooks/useAutoSave.d.ts.map +0 -1
  272. package/dist/hooks/useAutoSave.js +0 -83
  273. package/dist/hooks/useAutoSave.js.map +0 -1
  274. package/src/fonts/fonts.css +0 -362
  275. package/src/fonts/licenses/LICENSE-cormorant-garamond.txt +0 -93
  276. package/src/fonts/licenses/LICENSE-crimson-text.txt +0 -93
  277. package/src/fonts/licenses/LICENSE-dm-sans.txt +0 -93
  278. package/src/fonts/licenses/LICENSE-dm-serif-display.txt +0 -93
  279. package/src/fonts/licenses/LICENSE-hanken-grotesk.txt +0 -94
  280. package/src/fonts/licenses/LICENSE-ibm-plex-sans.txt +0 -93
  281. package/src/fonts/licenses/LICENSE-inter.txt +0 -93
  282. package/src/fonts/licenses/LICENSE-jetbrains-mono.txt +0 -93
  283. package/src/fonts/licenses/LICENSE-lora.txt +0 -93
  284. package/src/fonts/licenses/LICENSE-merriweather.txt +0 -93
  285. package/src/fonts/licenses/LICENSE-oswald.txt +0 -93
  286. package/src/fonts/licenses/LICENSE-playfair-display.txt +0 -93
  287. package/src/fonts/licenses/LICENSE-pt-serif.txt +0 -93
  288. package/src/fonts/licenses/LICENSE-roboto.txt +0 -93
  289. package/src/fonts/licenses/LICENSE-source-serif-4.txt +0 -93
  290. package/src/fonts/woff2/cormorant-garamond-400.woff2 +0 -0
  291. package/src/fonts/woff2/cormorant-garamond-700.woff2 +0 -0
  292. package/src/fonts/woff2/crimson-text-400.woff2 +0 -0
  293. package/src/fonts/woff2/crimson-text-400i.woff2 +0 -0
  294. package/src/fonts/woff2/crimson-text-700.woff2 +0 -0
  295. package/src/fonts/woff2/dm-sans-400.woff2 +0 -0
  296. package/src/fonts/woff2/dm-sans-400i.woff2 +0 -0
  297. package/src/fonts/woff2/dm-sans-500.woff2 +0 -0
  298. package/src/fonts/woff2/dm-sans-700.woff2 +0 -0
  299. package/src/fonts/woff2/dm-serif-display-400.woff2 +0 -0
  300. package/src/fonts/woff2/hanken-grotesk-400.woff2 +0 -0
  301. package/src/fonts/woff2/hanken-grotesk-400i.woff2 +0 -0
  302. package/src/fonts/woff2/hanken-grotesk-500.woff2 +0 -0
  303. package/src/fonts/woff2/hanken-grotesk-600.woff2 +0 -0
  304. package/src/fonts/woff2/hanken-grotesk-700.woff2 +0 -0
  305. package/src/fonts/woff2/ibm-plex-sans-400.woff2 +0 -0
  306. package/src/fonts/woff2/ibm-plex-sans-400i.woff2 +0 -0
  307. package/src/fonts/woff2/ibm-plex-sans-500.woff2 +0 -0
  308. package/src/fonts/woff2/ibm-plex-sans-600.woff2 +0 -0
  309. package/src/fonts/woff2/ibm-plex-sans-700.woff2 +0 -0
  310. package/src/fonts/woff2/inter-400.woff2 +0 -0
  311. package/src/fonts/woff2/inter-400i.woff2 +0 -0
  312. package/src/fonts/woff2/inter-500.woff2 +0 -0
  313. package/src/fonts/woff2/inter-600.woff2 +0 -0
  314. package/src/fonts/woff2/inter-700.woff2 +0 -0
  315. package/src/fonts/woff2/jetbrains-mono-400.woff2 +0 -0
  316. package/src/fonts/woff2/jetbrains-mono-400i.woff2 +0 -0
  317. package/src/fonts/woff2/jetbrains-mono-700.woff2 +0 -0
  318. package/src/fonts/woff2/lora-400.woff2 +0 -0
  319. package/src/fonts/woff2/lora-400i.woff2 +0 -0
  320. package/src/fonts/woff2/lora-700.woff2 +0 -0
  321. package/src/fonts/woff2/merriweather-400.woff2 +0 -0
  322. package/src/fonts/woff2/merriweather-700.woff2 +0 -0
  323. package/src/fonts/woff2/oswald-400.woff2 +0 -0
  324. package/src/fonts/woff2/oswald-700.woff2 +0 -0
  325. package/src/fonts/woff2/playfair-display-400.woff2 +0 -0
  326. package/src/fonts/woff2/playfair-display-700.woff2 +0 -0
  327. package/src/fonts/woff2/pt-serif-400.woff2 +0 -0
  328. package/src/fonts/woff2/pt-serif-700.woff2 +0 -0
  329. package/src/fonts/woff2/roboto-400.woff2 +0 -0
  330. package/src/fonts/woff2/roboto-400i.woff2 +0 -0
  331. package/src/fonts/woff2/roboto-700.woff2 +0 -0
  332. package/src/fonts/woff2/source-serif-4-400.woff2 +0 -0
  333. package/src/fonts/woff2/source-serif-4-400i.woff2 +0 -0
  334. package/src/fonts/woff2/source-serif-4-700.woff2 +0 -0
  335. package/src/hooks/useAutoSave.ts +0 -116
@@ -8,27 +8,13 @@ import type {
8
8
  MarkdownInlineNode,
9
9
  } from '@bendyline/squisq/markdown';
10
10
  import { parseMarkdown } from '@bendyline/squisq/markdown';
11
- import { markdownToDoc } from '@bendyline/squisq/doc';
12
11
  import type { Doc } from '@bendyline/squisq/schemas';
13
- import { applyTransform } from '@bendyline/squisq/transform';
14
- import { markdownDocToDocx } from '@bendyline/squisq-formats/docx';
15
- import { markdownDocToPdf } from '@bendyline/squisq-formats/pdf';
16
- import { docToPptx } from '@bendyline/squisq-formats/pptx';
17
- import {
18
- docToHtml,
19
- docToHtmlZip,
20
- collectImagePaths,
21
- markdownDocsToPlainHtmlBundle,
22
- markdownDocsToHtmlBundle,
23
- markdownDocToPlainHtml,
24
- } from '@bendyline/squisq-formats/html';
25
- import { containerToZip } from '@bendyline/squisq-formats/container';
26
- import { MemoryContentContainer } from '@bendyline/squisq/storage';
27
- import { PLAYER_BUNDLE } from '@bendyline/squisq-react/standalone-source';
28
12
  import type { ContentContainer } from '@bendyline/squisq/storage';
29
13
  import type { ExportOptions, ExportFormat } from './export-options.js';
30
14
  import { FORMAT_EXTENSIONS } from './export-options.js';
31
15
 
16
+ export type ExportBlobSaver = (blob: Blob, filename: string) => Promise<void> | void;
17
+
32
18
  const MIME_TYPES: Record<ExportFormat, string> = {
33
19
  docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
34
20
  pdf: 'application/pdf',
@@ -47,52 +33,81 @@ function downloadBlob(blob: Blob, filename: string): void {
47
33
  URL.revokeObjectURL(url);
48
34
  }
49
35
 
36
+ async function saveExportBlob(
37
+ blob: Blob,
38
+ filename: string,
39
+ saveBlob?: ExportBlobSaver,
40
+ ): Promise<void> {
41
+ if (saveBlob) {
42
+ await saveBlob(blob, filename);
43
+ return;
44
+ }
45
+ downloadBlob(blob, filename);
46
+ }
47
+
50
48
  /** Derive a filename from the selected file path and export format. */
51
49
  function buildFilename(selectedFile: string | null, format: ExportFormat): string {
52
50
  const base = selectedFile ? selectedFile.replace(/^\//, '').replace(/\.[^.]+$/, '') : 'document';
53
51
  return base + FORMAT_EXTENSIONS[format];
54
52
  }
55
53
 
54
+ export function buildExportFilename(selectedFile: string | null, options: ExportOptions): string {
55
+ const base = selectedFile ? selectedFile.replace(/^\//, '').replace(/\.[^.]+$/, '') : 'document';
56
+ if (options.format === 'html') {
57
+ if (options.includeLinkedDocs || options.htmlBundle === 'zip') return `${base}.zip`;
58
+ if (options.entryAsIndex) return 'index.html';
59
+ }
60
+ return base + FORMAT_EXTENSIONS[options.format];
61
+ }
62
+
56
63
  /** Run the export and trigger a download. */
57
64
  export async function runExport(
58
65
  markdown: string,
59
66
  selectedFile: string | null,
60
67
  options: ExportOptions,
61
68
  mediaContainer?: ContentContainer | null,
69
+ saveBlob?: ExportBlobSaver,
62
70
  ): Promise<void> {
63
71
  const filename = buildFilename(selectedFile, options.format);
64
72
  const themeId = options.themeId !== 'standard' ? options.themeId : undefined;
65
73
 
66
74
  if (options.format === 'md') {
67
- downloadBlob(new Blob([markdown], { type: MIME_TYPES.md }), filename);
75
+ await saveExportBlob(new Blob([markdown], { type: MIME_TYPES.md }), filename, saveBlob);
68
76
  return;
69
77
  }
70
78
 
71
79
  if (options.format === 'html') {
72
- await runHtmlExport(markdown, filename, options, mediaContainer, selectedFile);
80
+ await runHtmlExport(markdown, filename, options, mediaContainer, selectedFile, saveBlob);
73
81
  return;
74
82
  }
75
83
 
76
84
  const doc = parseMarkdown(markdown);
77
85
 
78
86
  if (options.format === 'docx') {
87
+ const { markdownDocToDocx } = await import('@bendyline/squisq-formats/docx');
79
88
  const images = mediaContainer ? await resolveImages(doc, mediaContainer) : undefined;
80
89
  const buf = await markdownDocToDocx(doc, { themeId, images });
81
- downloadBlob(new Blob([buf], { type: MIME_TYPES.docx }), filename);
90
+ await saveExportBlob(new Blob([buf], { type: MIME_TYPES.docx }), filename, saveBlob);
82
91
  return;
83
92
  }
84
93
 
85
94
  if (options.format === 'pdf') {
95
+ const { markdownDocToPdf } = await import('@bendyline/squisq-formats/pdf');
86
96
  const buf = await markdownDocToPdf(doc, {
87
97
  themeId,
88
98
  pageSize: options.pageSize,
89
99
  });
90
- downloadBlob(new Blob([buf], { type: MIME_TYPES.pdf }), filename);
100
+ await saveExportBlob(new Blob([buf], { type: MIME_TYPES.pdf }), filename, saveBlob);
91
101
  return;
92
102
  }
93
103
 
94
104
  if (options.format === 'pptx') {
95
- // Use the full transform pipeline: markdown Doc transform PPTX
105
+ const [{ markdownToDoc }, { applyTransform }, { docToPptx }] = await Promise.all([
106
+ import('@bendyline/squisq/doc'),
107
+ import('@bendyline/squisq/transform'),
108
+ import('@bendyline/squisq-formats/pptx'),
109
+ ]);
110
+ // Use the full transform pipeline: markdown -> Doc -> transform -> PPTX
96
111
  const baseDoc = markdownToDoc(doc);
97
112
  const transformed = applyTransform(baseDoc, options.transformStyle);
98
113
  const enrichedDoc = transformed.doc;
@@ -100,7 +115,7 @@ export async function runExport(
100
115
  enrichedDoc.themeId = themeId;
101
116
  }
102
117
  const buf = await docToPptx(enrichedDoc, { themeId });
103
- downloadBlob(new Blob([buf], { type: MIME_TYPES.pptx }), filename);
118
+ await saveExportBlob(new Blob([buf], { type: MIME_TYPES.pptx }), filename, saveBlob);
104
119
  return;
105
120
  }
106
121
  }
@@ -112,6 +127,7 @@ async function runHtmlExport(
112
127
  options: ExportOptions,
113
128
  mediaContainer?: ContentContainer | null,
114
129
  selectedFile?: string | null,
130
+ saveBlob?: ExportBlobSaver,
115
131
  ): Promise<void> {
116
132
  const baseName = htmlFilename.replace(/\.html$/, '');
117
133
  const zipName = `${baseName}.zip`;
@@ -136,6 +152,10 @@ async function runHtmlExport(
136
152
  if (options.includeLinkedDocs && mediaContainer && selectedFile) {
137
153
  const entryPath = basenameForBundle(selectedFile);
138
154
  if (options.htmlStyle === 'rendered') {
155
+ const [{ markdownDocsToHtmlBundle }, { PLAYER_BUNDLE }] = await Promise.all([
156
+ import('@bendyline/squisq-formats/html'),
157
+ import('@bendyline/squisq-react/standalone-source'),
158
+ ]);
139
159
  const blob = await markdownDocsToHtmlBundle({
140
160
  entryPath,
141
161
  readDocument: (path) => readDocumentFromContainer(mediaContainer, path),
@@ -146,9 +166,10 @@ async function runHtmlExport(
146
166
  mode: 'static',
147
167
  entryAsIndex: options.entryAsIndex,
148
168
  });
149
- downloadBlob(blob, zipName);
169
+ await saveExportBlob(blob, zipName, saveBlob);
150
170
  return;
151
171
  }
172
+ const { markdownDocsToPlainHtmlBundle } = await import('@bendyline/squisq-formats/html');
152
173
  const blob = await markdownDocsToPlainHtmlBundle({
153
174
  entryPath,
154
175
  readDocument: (path) => readDocumentFromContainer(mediaContainer, path),
@@ -157,16 +178,24 @@ async function runHtmlExport(
157
178
  themeId,
158
179
  entryAsIndex: options.entryAsIndex,
159
180
  });
160
- downloadBlob(blob, zipName);
181
+ await saveExportBlob(blob, zipName, saveBlob);
161
182
  return;
162
183
  }
163
184
 
164
185
  if (options.htmlStyle === 'rendered') {
186
+ const [{ markdownToDoc }, { docToHtml, docToHtmlZip, collectImagePaths }, { PLAYER_BUNDLE }] =
187
+ await Promise.all([
188
+ import('@bendyline/squisq/doc'),
189
+ import('@bendyline/squisq-formats/html'),
190
+ import('@bendyline/squisq-react/standalone-source'),
191
+ ]);
165
192
  const mdDoc = parseMarkdown(markdown);
166
193
  const baseDoc = markdownToDoc(mdDoc);
167
194
  if (themeId) baseDoc.themeId = themeId;
168
195
 
169
- const images = mediaContainer ? await resolveDocImages(baseDoc, mediaContainer) : undefined;
196
+ const images = mediaContainer
197
+ ? await resolveDocImages(baseDoc, mediaContainer, collectImagePaths)
198
+ : undefined;
170
199
 
171
200
  if (options.htmlBundle === 'zip') {
172
201
  const blob = await docToHtmlZip(baseDoc, {
@@ -175,7 +204,7 @@ async function runHtmlExport(
175
204
  mode: 'static',
176
205
  title: baseName,
177
206
  });
178
- downloadBlob(blob, zipName);
207
+ await saveExportBlob(blob, zipName, saveBlob);
179
208
  return;
180
209
  }
181
210
 
@@ -185,7 +214,7 @@ async function runHtmlExport(
185
214
  mode: 'static',
186
215
  title: baseName,
187
216
  });
188
- downloadBlob(new Blob([html], { type: MIME_TYPES.html }), singleHtmlFilename);
217
+ await saveExportBlob(new Blob([html], { type: MIME_TYPES.html }), singleHtmlFilename, saveBlob);
189
218
  return;
190
219
  }
191
220
 
@@ -195,6 +224,12 @@ async function runHtmlExport(
195
224
  const localImages = referencedImages.filter((u) => !isExternalUrl(u));
196
225
 
197
226
  if (options.htmlBundle === 'zip' && mediaContainer && localImages.length > 0) {
227
+ const [{ markdownDocToPlainHtml }, { MemoryContentContainer }, { containerToZip }] =
228
+ await Promise.all([
229
+ import('@bendyline/squisq-formats/html'),
230
+ import('@bendyline/squisq/storage'),
231
+ import('@bendyline/squisq-formats/container'),
232
+ ]);
198
233
  // Mirror the markdown's relative paths inside the zip so <img src="..."> still resolves.
199
234
  const html = markdownDocToPlainHtml(mdDoc, { title: baseName, themeId });
200
235
  const container = new MemoryContentContainer();
@@ -206,10 +241,11 @@ async function runHtmlExport(
206
241
  await container.writeFile(cleanPath, new Uint8Array(data));
207
242
  }
208
243
  const blob = await containerToZip(container);
209
- downloadBlob(blob, zipName);
244
+ await saveExportBlob(blob, zipName, saveBlob);
210
245
  return;
211
246
  }
212
247
 
248
+ const { markdownDocToPlainHtml } = await import('@bendyline/squisq-formats/html');
213
249
  // Single-file plain HTML — embed local images as base64 data URIs.
214
250
  const inlineMap = new Map<string, string>();
215
251
  if (mediaContainer) {
@@ -224,7 +260,7 @@ async function runHtmlExport(
224
260
  images: inlineMap.size > 0 ? inlineMap : undefined,
225
261
  themeId,
226
262
  });
227
- downloadBlob(new Blob([html], { type: MIME_TYPES.html }), singleHtmlFilename);
263
+ await saveExportBlob(new Blob([html], { type: MIME_TYPES.html }), singleHtmlFilename, saveBlob);
228
264
  }
229
265
 
230
266
  const IMAGE_MIME: Record<string, string> = {
@@ -325,6 +361,7 @@ async function readDocumentFromContainer(
325
361
  async function resolveDocImages(
326
362
  doc: Doc,
327
363
  container: ContentContainer,
364
+ collectImagePaths: (doc: Doc) => Iterable<string>,
328
365
  ): Promise<Map<string, ArrayBuffer>> {
329
366
  const paths = collectImagePaths(doc);
330
367
  const map = new Map<string, ArrayBuffer>();
@@ -0,0 +1,14 @@
1
+ export interface ExportSummaryOption {
2
+ id: string;
3
+ name: string;
4
+ description?: string;
5
+ }
6
+
7
+ let transformStyleSummariesPromise: Promise<ExportSummaryOption[]> | null = null;
8
+
9
+ export function loadTransformStyleSummaries(): Promise<ExportSummaryOption[]> {
10
+ transformStyleSummariesPromise ??= import('@bendyline/squisq/transform').then(
11
+ ({ getTransformStyleSummaries }) => getTransformStyleSummaries(),
12
+ );
13
+ return transformStyleSummariesPromise;
14
+ }