@bendyline/squisq 1.3.0 → 1.4.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 (419) hide show
  1. package/dist/{Doc-Ch4tc3vv.d.ts → Doc-BeSeH2iX.d.ts} +118 -41
  2. package/dist/ImageEditDoc-BTIvw0oq.d.ts +84 -0
  3. package/dist/__tests__/colorUtils.test.d.ts +2 -0
  4. package/dist/__tests__/colorUtils.test.d.ts.map +1 -0
  5. package/dist/__tests__/colorUtils.test.js +94 -0
  6. package/dist/__tests__/colorUtils.test.js.map +1 -0
  7. package/dist/__tests__/getLayers.test.js +31 -7
  8. package/dist/__tests__/getLayers.test.js.map +1 -1
  9. package/dist/__tests__/iconResolve.test.d.ts +2 -0
  10. package/dist/__tests__/iconResolve.test.d.ts.map +1 -0
  11. package/dist/__tests__/iconResolve.test.js +99 -0
  12. package/dist/__tests__/iconResolve.test.js.map +1 -0
  13. package/dist/__tests__/imageEditState.test.d.ts +2 -0
  14. package/dist/__tests__/imageEditState.test.d.ts.map +1 -0
  15. package/dist/__tests__/imageEditState.test.js +61 -0
  16. package/dist/__tests__/imageEditState.test.js.map +1 -0
  17. package/dist/__tests__/imageEditVersions.test.d.ts +2 -0
  18. package/dist/__tests__/imageEditVersions.test.d.ts.map +1 -0
  19. package/dist/__tests__/imageEditVersions.test.js +141 -0
  20. package/dist/__tests__/imageEditVersions.test.js.map +1 -0
  21. package/dist/__tests__/inferDocumentTitle.test.d.ts +2 -0
  22. package/dist/__tests__/inferDocumentTitle.test.d.ts.map +1 -0
  23. package/dist/__tests__/inferDocumentTitle.test.js +42 -0
  24. package/dist/__tests__/inferDocumentTitle.test.js.map +1 -0
  25. package/dist/__tests__/jsonForm.chooseControl.test.d.ts +2 -0
  26. package/dist/__tests__/jsonForm.chooseControl.test.d.ts.map +1 -0
  27. package/dist/__tests__/jsonForm.chooseControl.test.js +74 -0
  28. package/dist/__tests__/jsonForm.chooseControl.test.js.map +1 -0
  29. package/dist/__tests__/jsonForm.evaluateWhen.test.d.ts +2 -0
  30. package/dist/__tests__/jsonForm.evaluateWhen.test.d.ts.map +1 -0
  31. package/dist/__tests__/jsonForm.evaluateWhen.test.js +51 -0
  32. package/dist/__tests__/jsonForm.evaluateWhen.test.js.map +1 -0
  33. package/dist/__tests__/jsonForm.inferSchema.test.d.ts +2 -0
  34. package/dist/__tests__/jsonForm.inferSchema.test.d.ts.map +1 -0
  35. package/dist/__tests__/jsonForm.inferSchema.test.js +23 -0
  36. package/dist/__tests__/jsonForm.inferSchema.test.js.map +1 -0
  37. package/dist/__tests__/jsonForm.pointer.test.d.ts +2 -0
  38. package/dist/__tests__/jsonForm.pointer.test.d.ts.map +1 -0
  39. package/dist/__tests__/jsonForm.pointer.test.js +94 -0
  40. package/dist/__tests__/jsonForm.pointer.test.js.map +1 -0
  41. package/dist/__tests__/markdownIcons.test.d.ts +2 -0
  42. package/dist/__tests__/markdownIcons.test.d.ts.map +1 -0
  43. package/dist/__tests__/markdownIcons.test.js +93 -0
  44. package/dist/__tests__/markdownIcons.test.js.map +1 -0
  45. package/dist/__tests__/markdownToDoc.test.js +15 -4
  46. package/dist/__tests__/markdownToDoc.test.js.map +1 -1
  47. package/dist/__tests__/recommendTemplates.test.d.ts +2 -0
  48. package/dist/__tests__/recommendTemplates.test.d.ts.map +1 -0
  49. package/dist/__tests__/recommendTemplates.test.js +158 -0
  50. package/dist/__tests__/recommendTemplates.test.js.map +1 -0
  51. package/dist/__tests__/scopedContentContainer.test.d.ts +2 -0
  52. package/dist/__tests__/scopedContentContainer.test.d.ts.map +1 -0
  53. package/dist/__tests__/scopedContentContainer.test.js +74 -0
  54. package/dist/__tests__/scopedContentContainer.test.js.map +1 -0
  55. package/dist/__tests__/slideshowGenerator.test.js +1 -1
  56. package/dist/__tests__/slideshowGenerator.test.js.map +1 -1
  57. package/dist/__tests__/templateAnnotationParse.test.d.ts +2 -0
  58. package/dist/__tests__/templateAnnotationParse.test.d.ts.map +1 -0
  59. package/dist/__tests__/templateAnnotationParse.test.js +42 -0
  60. package/dist/__tests__/templateAnnotationParse.test.js.map +1 -0
  61. package/dist/__tests__/templates.test.js +90 -9
  62. package/dist/__tests__/templates.test.js.map +1 -1
  63. package/dist/__tests__/themeCompile.test.d.ts +2 -0
  64. package/dist/__tests__/themeCompile.test.d.ts.map +1 -0
  65. package/dist/__tests__/themeCompile.test.js +134 -0
  66. package/dist/__tests__/themeCompile.test.js.map +1 -0
  67. package/dist/__tests__/themeValidator.test.d.ts +2 -0
  68. package/dist/__tests__/themeValidator.test.d.ts.map +1 -0
  69. package/dist/__tests__/themeValidator.test.js +107 -0
  70. package/dist/__tests__/themeValidator.test.js.map +1 -0
  71. package/dist/__tests__/versions.test.d.ts +2 -0
  72. package/dist/__tests__/versions.test.d.ts.map +1 -0
  73. package/dist/__tests__/versions.test.js +339 -0
  74. package/dist/__tests__/versions.test.js.map +1 -0
  75. package/dist/{chunk-CYQHG27J.js → chunk-2TMAWB4Y.js} +74 -1
  76. package/dist/chunk-2TMAWB4Y.js.map +1 -0
  77. package/dist/{chunk-OASJKWO5.js → chunk-3K5OG6KI.js} +92 -7
  78. package/dist/chunk-3K5OG6KI.js.map +1 -0
  79. package/dist/chunk-57CVQCFX.js +193 -0
  80. package/dist/chunk-57CVQCFX.js.map +1 -0
  81. package/dist/{chunk-QM5PKNPW.js → chunk-5WFRKURX.js} +1 -1
  82. package/dist/chunk-5WFRKURX.js.map +1 -0
  83. package/dist/chunk-B4EEON3N.js +1317 -0
  84. package/dist/chunk-B4EEON3N.js.map +1 -0
  85. package/dist/chunk-DBS6RIFL.js +81 -0
  86. package/dist/chunk-DBS6RIFL.js.map +1 -0
  87. package/dist/{chunk-MIBRIRGJ.js → chunk-FR2RBTKO.js} +3 -3
  88. package/dist/{chunk-MIBRIRGJ.js.map → chunk-FR2RBTKO.js.map} +1 -1
  89. package/dist/chunk-H3AXU4MJ.js +179 -0
  90. package/dist/chunk-H3AXU4MJ.js.map +1 -0
  91. package/dist/chunk-JELIRVDP.js +24 -0
  92. package/dist/chunk-JELIRVDP.js.map +1 -0
  93. package/dist/chunk-K32VJONL.js +193 -0
  94. package/dist/chunk-K32VJONL.js.map +1 -0
  95. package/dist/{chunk-6BAVXFYC.js → chunk-KSWJR66U.js} +218 -42
  96. package/dist/chunk-KSWJR66U.js.map +1 -0
  97. package/dist/{chunk-TSG2OSE6.js → chunk-MYIH7FWD.js} +3 -3
  98. package/dist/chunk-MYIH7FWD.js.map +1 -0
  99. package/dist/chunk-VLJJHDAC.js +218 -0
  100. package/dist/chunk-VLJJHDAC.js.map +1 -0
  101. package/dist/chunk-WMOI7FN3.js +182 -0
  102. package/dist/chunk-WMOI7FN3.js.map +1 -0
  103. package/dist/chunk-ZTX4PFFT.js +520 -0
  104. package/dist/chunk-ZTX4PFFT.js.map +1 -0
  105. package/dist/doc/audioMapping.d.ts.map +1 -1
  106. package/dist/doc/audioMapping.js +42 -7
  107. package/dist/doc/audioMapping.js.map +1 -1
  108. package/dist/doc/getLayers.d.ts.map +1 -1
  109. package/dist/doc/getLayers.js +29 -18
  110. package/dist/doc/getLayers.js.map +1 -1
  111. package/dist/doc/markdownToDoc.d.ts.map +1 -1
  112. package/dist/doc/markdownToDoc.js +40 -6
  113. package/dist/doc/markdownToDoc.js.map +1 -1
  114. package/dist/doc/templates/featureBlock.d.ts +18 -0
  115. package/dist/doc/templates/featureBlock.d.ts.map +1 -0
  116. package/dist/doc/templates/featureBlock.js +180 -0
  117. package/dist/doc/templates/featureBlock.js.map +1 -0
  118. package/dist/doc/templates/fullBleedQuote.d.ts +12 -0
  119. package/dist/doc/templates/fullBleedQuote.d.ts.map +1 -1
  120. package/dist/doc/templates/fullBleedQuote.js +12 -0
  121. package/dist/doc/templates/fullBleedQuote.js.map +1 -1
  122. package/dist/doc/templates/index.d.ts +28 -4
  123. package/dist/doc/templates/index.d.ts.map +1 -1
  124. package/dist/doc/templates/index.js +45 -12
  125. package/dist/doc/templates/index.js.map +1 -1
  126. package/dist/doc/templates/listBlock.d.ts.map +1 -1
  127. package/dist/doc/templates/listBlock.js +22 -5
  128. package/dist/doc/templates/listBlock.js.map +1 -1
  129. package/dist/doc/templates/statHighlight.d.ts +12 -0
  130. package/dist/doc/templates/statHighlight.d.ts.map +1 -1
  131. package/dist/doc/templates/statHighlight.js +12 -0
  132. package/dist/doc/templates/statHighlight.js.map +1 -1
  133. package/dist/doc/templates/titleBlock.d.ts +11 -0
  134. package/dist/doc/templates/titleBlock.d.ts.map +1 -1
  135. package/dist/doc/templates/titleBlock.js +8 -0
  136. package/dist/doc/templates/titleBlock.js.map +1 -1
  137. package/dist/doc/utils/themeUtils.d.ts +4 -4
  138. package/dist/doc/utils/themeUtils.d.ts.map +1 -1
  139. package/dist/doc/utils/themeUtils.js +8 -7
  140. package/dist/doc/utils/themeUtils.js.map +1 -1
  141. package/dist/generate/slideshowGenerator.js +1 -1
  142. package/dist/generate/slideshowGenerator.js.map +1 -1
  143. package/dist/generate/templateMapper.js +2 -2
  144. package/dist/generate/templateMapper.js.map +1 -1
  145. package/dist/icons/iconData.d.ts +26 -0
  146. package/dist/icons/iconData.d.ts.map +1 -0
  147. package/dist/icons/iconData.js +12 -0
  148. package/dist/icons/iconData.js.map +1 -0
  149. package/dist/icons/index.d.ts +12 -0
  150. package/dist/icons/index.d.ts.map +1 -0
  151. package/dist/icons/index.js +10 -0
  152. package/dist/icons/index.js.map +1 -0
  153. package/dist/icons/resolve.d.ts +61 -0
  154. package/dist/icons/resolve.d.ts.map +1 -0
  155. package/dist/icons/resolve.js +130 -0
  156. package/dist/icons/resolve.js.map +1 -0
  157. package/dist/imageEdit/ImageEditVersionManager.d.ts +31 -0
  158. package/dist/imageEdit/ImageEditVersionManager.d.ts.map +1 -0
  159. package/dist/imageEdit/ImageEditVersionManager.js +39 -0
  160. package/dist/imageEdit/ImageEditVersionManager.js.map +1 -0
  161. package/dist/imageEdit/export.d.ts +33 -0
  162. package/dist/imageEdit/export.d.ts.map +1 -0
  163. package/dist/imageEdit/export.js +253 -0
  164. package/dist/imageEdit/export.js.map +1 -0
  165. package/dist/imageEdit/index.d.ts +14 -0
  166. package/dist/imageEdit/index.d.ts.map +1 -0
  167. package/dist/imageEdit/index.js +22 -0
  168. package/dist/imageEdit/index.js.map +1 -0
  169. package/dist/imageEdit/persistence.d.ts +15 -0
  170. package/dist/imageEdit/persistence.d.ts.map +1 -0
  171. package/dist/imageEdit/persistence.js +49 -0
  172. package/dist/imageEdit/persistence.js.map +1 -0
  173. package/dist/imageEdit/state.d.ts +42 -0
  174. package/dist/imageEdit/state.d.ts.map +1 -0
  175. package/dist/imageEdit/state.js +98 -0
  176. package/dist/imageEdit/state.js.map +1 -0
  177. package/dist/imageEdit/versionPaths.d.ts +27 -0
  178. package/dist/imageEdit/versionPaths.d.ts.map +1 -0
  179. package/dist/imageEdit/versionPaths.js +57 -0
  180. package/dist/imageEdit/versionPaths.js.map +1 -0
  181. package/dist/imageEdit/versions.d.ts +67 -0
  182. package/dist/imageEdit/versions.d.ts.map +1 -0
  183. package/dist/imageEdit/versions.js +161 -0
  184. package/dist/imageEdit/versions.js.map +1 -0
  185. package/dist/index.d.ts +4 -0
  186. package/dist/index.d.ts.map +1 -1
  187. package/dist/index.js +4 -0
  188. package/dist/index.js.map +1 -1
  189. package/dist/jsonForm/chooseControl.d.ts +20 -0
  190. package/dist/jsonForm/chooseControl.d.ts.map +1 -0
  191. package/dist/jsonForm/chooseControl.js +82 -0
  192. package/dist/jsonForm/chooseControl.js.map +1 -0
  193. package/dist/jsonForm/evaluateWhen.d.ts +12 -0
  194. package/dist/jsonForm/evaluateWhen.d.ts.map +1 -0
  195. package/dist/jsonForm/evaluateWhen.js +65 -0
  196. package/dist/jsonForm/evaluateWhen.js.map +1 -0
  197. package/dist/jsonForm/index.d.ts +14 -0
  198. package/dist/jsonForm/index.d.ts.map +1 -0
  199. package/dist/jsonForm/index.js +12 -0
  200. package/dist/jsonForm/index.js.map +1 -0
  201. package/dist/jsonForm/inferSchema.d.ts +12 -0
  202. package/dist/jsonForm/inferSchema.d.ts.map +1 -0
  203. package/dist/jsonForm/inferSchema.js +15 -0
  204. package/dist/jsonForm/inferSchema.js.map +1 -0
  205. package/dist/jsonForm/pointer.d.ts +26 -0
  206. package/dist/jsonForm/pointer.d.ts.map +1 -0
  207. package/dist/jsonForm/pointer.js +102 -0
  208. package/dist/jsonForm/pointer.js.map +1 -0
  209. package/dist/jsonForm/types.d.ts +120 -0
  210. package/dist/jsonForm/types.d.ts.map +1 -0
  211. package/dist/jsonForm/types.js +10 -0
  212. package/dist/jsonForm/types.js.map +1 -0
  213. package/dist/markdown/convert.d.ts +11 -1
  214. package/dist/markdown/convert.d.ts.map +1 -1
  215. package/dist/markdown/convert.js +135 -5
  216. package/dist/markdown/convert.js.map +1 -1
  217. package/dist/markdown/index.d.ts +1 -1
  218. package/dist/markdown/index.d.ts.map +1 -1
  219. package/dist/markdown/index.js +1 -1
  220. package/dist/markdown/index.js.map +1 -1
  221. package/dist/markdown/types.d.ts +17 -2
  222. package/dist/markdown/types.d.ts.map +1 -1
  223. package/dist/markdown/utils.d.ts +40 -0
  224. package/dist/markdown/utils.d.ts.map +1 -1
  225. package/dist/markdown/utils.js +155 -0
  226. package/dist/markdown/utils.js.map +1 -1
  227. package/dist/recommend/index.d.ts +16 -0
  228. package/dist/recommend/index.d.ts.map +1 -0
  229. package/dist/recommend/index.js +15 -0
  230. package/dist/recommend/index.js.map +1 -0
  231. package/dist/recommend/templates.d.ts +39 -0
  232. package/dist/recommend/templates.d.ts.map +1 -0
  233. package/dist/recommend/templates.js +235 -0
  234. package/dist/recommend/templates.js.map +1 -0
  235. package/dist/schemas/BlockTemplates.d.ts +46 -8
  236. package/dist/schemas/BlockTemplates.d.ts.map +1 -1
  237. package/dist/schemas/BlockTemplates.js +3 -3
  238. package/dist/schemas/BlockTemplates.js.map +1 -1
  239. package/dist/schemas/ImageEditDoc.d.ts +81 -0
  240. package/dist/schemas/ImageEditDoc.d.ts.map +1 -0
  241. package/dist/schemas/ImageEditDoc.js +20 -0
  242. package/dist/schemas/ImageEditDoc.js.map +1 -0
  243. package/dist/schemas/Theme.d.ts +70 -31
  244. package/dist/schemas/Theme.d.ts.map +1 -1
  245. package/dist/schemas/Theme.js +48 -16
  246. package/dist/schemas/Theme.js.map +1 -1
  247. package/dist/schemas/colorUtils.d.ts +51 -0
  248. package/dist/schemas/colorUtils.d.ts.map +1 -0
  249. package/dist/schemas/colorUtils.js +154 -0
  250. package/dist/schemas/colorUtils.js.map +1 -0
  251. package/dist/schemas/fontStacks.d.ts +57 -0
  252. package/dist/schemas/fontStacks.d.ts.map +1 -0
  253. package/dist/schemas/fontStacks.js +227 -0
  254. package/dist/schemas/fontStacks.js.map +1 -0
  255. package/dist/schemas/index.d.ts +5 -0
  256. package/dist/schemas/index.d.ts.map +1 -1
  257. package/dist/schemas/index.js +4 -0
  258. package/dist/schemas/index.js.map +1 -1
  259. package/dist/schemas/themeCompile.d.ts +45 -0
  260. package/dist/schemas/themeCompile.d.ts.map +1 -0
  261. package/dist/schemas/themeCompile.js +160 -0
  262. package/dist/schemas/themeCompile.js.map +1 -0
  263. package/dist/schemas/themeLibrary.d.ts +11 -15
  264. package/dist/schemas/themeLibrary.d.ts.map +1 -1
  265. package/dist/schemas/themeLibrary.js +18 -566
  266. package/dist/schemas/themeLibrary.js.map +1 -1
  267. package/dist/schemas/themeValidator.d.ts +26 -0
  268. package/dist/schemas/themeValidator.d.ts.map +1 -0
  269. package/dist/schemas/themeValidator.js +352 -0
  270. package/dist/schemas/themeValidator.js.map +1 -0
  271. package/dist/schemas/themes/bold.json +48 -0
  272. package/dist/schemas/themes/cinematic.json +54 -0
  273. package/dist/schemas/themes/documentary.json +49 -0
  274. package/dist/schemas/themes/gezellig.json +44 -0
  275. package/dist/schemas/themes/index.d.ts +26 -0
  276. package/dist/schemas/themes/index.d.ts.map +1 -0
  277. package/dist/schemas/themes/index.js +49 -0
  278. package/dist/schemas/themes/index.js.map +1 -0
  279. package/dist/schemas/themes/magazine.json +44 -0
  280. package/dist/schemas/themes/minimalist.json +45 -0
  281. package/dist/schemas/themes/morning-light.json +42 -0
  282. package/dist/schemas/themes/standard-dark.json +50 -0
  283. package/dist/schemas/themes/standard.json +42 -0
  284. package/dist/schemas/themes/tech-dark.json +48 -0
  285. package/dist/schemas/themes/warm-earth.json +50 -0
  286. package/dist/storage/ScopedContentContainer.d.ts +44 -0
  287. package/dist/storage/ScopedContentContainer.d.ts.map +1 -0
  288. package/dist/storage/ScopedContentContainer.js +94 -0
  289. package/dist/storage/ScopedContentContainer.js.map +1 -0
  290. package/dist/storage/index.d.ts +1 -0
  291. package/dist/storage/index.d.ts.map +1 -1
  292. package/dist/storage/index.js +1 -0
  293. package/dist/storage/index.js.map +1 -1
  294. package/dist/story/index.d.ts +53 -13
  295. package/dist/story/index.js +12 -4
  296. package/dist/themeLibrary-BHjJ0Qx6.d.ts +40 -0
  297. package/dist/{types-CkNttVSF.d.ts → types-BdZkdJ3z.d.ts} +17 -2
  298. package/dist/types-D98li1gV.d.ts +93 -0
  299. package/dist/versions/DocumentVersionManager.d.ts +31 -0
  300. package/dist/versions/DocumentVersionManager.d.ts.map +1 -0
  301. package/dist/versions/DocumentVersionManager.js +33 -0
  302. package/dist/versions/DocumentVersionManager.js.map +1 -0
  303. package/dist/versions/index.d.ts +29 -0
  304. package/dist/versions/index.d.ts.map +1 -0
  305. package/dist/versions/index.js +28 -0
  306. package/dist/versions/index.js.map +1 -0
  307. package/dist/versions/operations.d.ts +44 -0
  308. package/dist/versions/operations.d.ts.map +1 -0
  309. package/dist/versions/operations.js +190 -0
  310. package/dist/versions/operations.js.map +1 -0
  311. package/dist/versions/paths.d.ts +29 -0
  312. package/dist/versions/paths.d.ts.map +1 -0
  313. package/dist/versions/paths.js +66 -0
  314. package/dist/versions/paths.js.map +1 -0
  315. package/dist/versions/timestamp.d.ts +22 -0
  316. package/dist/versions/timestamp.d.ts.map +1 -0
  317. package/dist/versions/timestamp.js +44 -0
  318. package/dist/versions/timestamp.js.map +1 -0
  319. package/dist/versions/types.d.ts +92 -0
  320. package/dist/versions/types.d.ts.map +1 -0
  321. package/dist/versions/types.js +11 -0
  322. package/dist/versions/types.js.map +1 -0
  323. package/package.json +28 -1
  324. package/src/__tests__/colorUtils.test.ts +112 -0
  325. package/src/__tests__/getLayers.test.ts +32 -7
  326. package/src/__tests__/iconResolve.test.ts +122 -0
  327. package/src/__tests__/imageEditState.test.ts +74 -0
  328. package/src/__tests__/imageEditVersions.test.ts +169 -0
  329. package/src/__tests__/inferDocumentTitle.test.ts +50 -0
  330. package/src/__tests__/jsonForm.chooseControl.test.ts +86 -0
  331. package/src/__tests__/jsonForm.evaluateWhen.test.ts +59 -0
  332. package/src/__tests__/jsonForm.inferSchema.test.ts +25 -0
  333. package/src/__tests__/jsonForm.pointer.test.ts +103 -0
  334. package/src/__tests__/markdownIcons.test.ts +104 -0
  335. package/src/__tests__/markdownToDoc.test.ts +19 -4
  336. package/src/__tests__/recommendTemplates.test.ts +183 -0
  337. package/src/__tests__/scopedContentContainer.test.ts +89 -0
  338. package/src/__tests__/slideshowGenerator.test.ts +1 -1
  339. package/src/__tests__/templateAnnotationParse.test.ts +42 -0
  340. package/src/__tests__/templates.test.ts +93 -9
  341. package/src/__tests__/themeCompile.test.ts +156 -0
  342. package/src/__tests__/themeValidator.test.ts +125 -0
  343. package/src/__tests__/versions.test.ts +415 -0
  344. package/src/doc/audioMapping.ts +55 -11
  345. package/src/doc/getLayers.ts +32 -21
  346. package/src/doc/markdownToDoc.ts +45 -7
  347. package/src/doc/templates/featureBlock.ts +202 -0
  348. package/src/doc/templates/fullBleedQuote.ts +13 -0
  349. package/src/doc/templates/index.ts +50 -16
  350. package/src/doc/templates/listBlock.ts +24 -5
  351. package/src/doc/templates/statHighlight.ts +13 -0
  352. package/src/doc/templates/titleBlock.ts +9 -0
  353. package/src/doc/utils/themeUtils.ts +8 -7
  354. package/src/generate/slideshowGenerator.ts +1 -1
  355. package/src/generate/templateMapper.ts +2 -2
  356. package/src/icons/iconData.ts +31 -0
  357. package/src/icons/index.ts +18 -0
  358. package/src/icons/resolve.ts +139 -0
  359. package/src/imageEdit/ImageEditVersionManager.ts +73 -0
  360. package/src/imageEdit/export.ts +326 -0
  361. package/src/imageEdit/index.ts +71 -0
  362. package/src/imageEdit/persistence.ts +62 -0
  363. package/src/imageEdit/state.ts +112 -0
  364. package/src/imageEdit/versionPaths.ts +57 -0
  365. package/src/imageEdit/versions.ts +231 -0
  366. package/src/index.ts +4 -0
  367. package/src/jsonForm/chooseControl.ts +88 -0
  368. package/src/jsonForm/evaluateWhen.ts +59 -0
  369. package/src/jsonForm/index.ts +22 -0
  370. package/src/jsonForm/inferSchema.ts +25 -0
  371. package/src/jsonForm/pointer.ts +109 -0
  372. package/src/jsonForm/types.ts +167 -0
  373. package/src/markdown/convert.ts +145 -5
  374. package/src/markdown/index.ts +3 -0
  375. package/src/markdown/types.ts +19 -2
  376. package/src/markdown/utils.ts +159 -0
  377. package/src/recommend/index.ts +16 -0
  378. package/src/recommend/templates.ts +273 -0
  379. package/src/schemas/BlockTemplates.ts +50 -7
  380. package/src/schemas/ImageEditDoc.ts +95 -0
  381. package/src/schemas/Theme.ts +98 -31
  382. package/src/schemas/colorUtils.ts +186 -0
  383. package/src/schemas/fontStacks.ts +257 -0
  384. package/src/schemas/index.ts +12 -0
  385. package/src/schemas/themeCompile.ts +203 -0
  386. package/src/schemas/themeLibrary.ts +18 -597
  387. package/src/schemas/themeValidator.ts +388 -0
  388. package/src/schemas/themes/bold.json +48 -0
  389. package/src/schemas/themes/cinematic.json +54 -0
  390. package/src/schemas/themes/documentary.json +49 -0
  391. package/src/schemas/themes/gezellig.json +44 -0
  392. package/src/schemas/themes/index.ts +53 -0
  393. package/src/schemas/themes/magazine.json +44 -0
  394. package/src/schemas/themes/minimalist.json +45 -0
  395. package/src/schemas/themes/morning-light.json +42 -0
  396. package/src/schemas/themes/standard-dark.json +50 -0
  397. package/src/schemas/themes/standard.json +42 -0
  398. package/src/schemas/themes/tech-dark.json +48 -0
  399. package/src/schemas/themes/warm-earth.json +50 -0
  400. package/src/storage/ScopedContentContainer.ts +113 -0
  401. package/src/storage/index.ts +1 -0
  402. package/src/versions/DocumentVersionManager.ts +70 -0
  403. package/src/versions/index.ts +54 -0
  404. package/src/versions/operations.ts +230 -0
  405. package/src/versions/paths.ts +66 -0
  406. package/src/versions/timestamp.ts +48 -0
  407. package/src/versions/types.ts +91 -0
  408. package/dist/chunk-6BAVXFYC.js.map +0 -1
  409. package/dist/chunk-7GF6RDED.js +0 -82
  410. package/dist/chunk-7GF6RDED.js.map +0 -1
  411. package/dist/chunk-CYQHG27J.js.map +0 -1
  412. package/dist/chunk-F22AE6BY.js +0 -121
  413. package/dist/chunk-F22AE6BY.js.map +0 -1
  414. package/dist/chunk-FIQR4AJG.js +0 -517
  415. package/dist/chunk-FIQR4AJG.js.map +0 -1
  416. package/dist/chunk-OASJKWO5.js.map +0 -1
  417. package/dist/chunk-QM5PKNPW.js.map +0 -1
  418. package/dist/chunk-TSG2OSE6.js.map +0 -1
  419. package/dist/themeLibrary-CEo2D4b6.d.ts +0 -44
@@ -0,0 +1,230 @@
1
+ /**
2
+ * Pure-ish version operations against a {@link ContentContainer}.
3
+ *
4
+ * These functions are the canonical implementation. {@link DocumentVersionManager}
5
+ * is a thin wrapper that captures a container reference for ergonomics.
6
+ */
7
+
8
+ import type { ContentContainer } from '../storage/ContentContainer.js';
9
+ import { buildVersionPath, getDocBasename, parseVersionPath, VERSIONS_PREFIX } from './paths.js';
10
+ import type {
11
+ CoalesceOptions,
12
+ PrunePolicy,
13
+ RevertOptions,
14
+ SaveVersionOptions,
15
+ SaveVersionResult,
16
+ Version,
17
+ } from './types.js';
18
+
19
+ const decoder = new TextDecoder();
20
+ const encoder = new TextEncoder();
21
+
22
+ async function resolveBasename(
23
+ container: ContentContainer,
24
+ override: string | undefined,
25
+ ): Promise<string | null> {
26
+ if (override) return override;
27
+ const docPath = await container.getDocumentPath();
28
+ if (!docPath) return null;
29
+ return getDocBasename(docPath);
30
+ }
31
+
32
+ async function resolveDocPath(container: ContentContainer): Promise<string> {
33
+ // Default to `index.md` when the container has no document yet — matches
34
+ // `MemoryContentContainer.writeDocument`'s default.
35
+ const docPath = await container.getDocumentPath();
36
+ return docPath ?? 'index.md';
37
+ }
38
+
39
+ /**
40
+ * List all snapshots in the container, newest-first.
41
+ *
42
+ * @param basename Optional filter: when set, only versions whose basename
43
+ * matches are returned.
44
+ */
45
+ export async function listVersions(
46
+ container: ContentContainer,
47
+ basename?: string,
48
+ ): Promise<Version[]> {
49
+ const entries = await container.listFiles(VERSIONS_PREFIX);
50
+ const versions: Version[] = [];
51
+ for (const entry of entries) {
52
+ const parsed = parseVersionPath(entry.path);
53
+ if (!parsed) continue;
54
+ if (basename !== undefined && parsed.basename !== basename) continue;
55
+ versions.push({
56
+ path: entry.path,
57
+ basename: parsed.basename,
58
+ timestamp: parsed.timestamp,
59
+ size: entry.size,
60
+ collision: parsed.collision,
61
+ });
62
+ }
63
+ // Newest first. Tie-break on collision (higher = newer). Compare the
64
+ // numeric collision rather than the path string: lexicographically a path
65
+ // with no suffix sorts *after* one with `-N`, because `.` (0x2E) is
66
+ // greater than `-` (0x2D), which would invert the order.
67
+ versions.sort((a, b) => {
68
+ const dt = b.timestamp.getTime() - a.timestamp.getTime();
69
+ if (dt !== 0) return dt;
70
+ return b.collision - a.collision;
71
+ });
72
+ return versions;
73
+ }
74
+
75
+ /**
76
+ * Read the markdown content of a snapshot. Returns null if the snapshot
77
+ * doesn't exist.
78
+ */
79
+ export async function readVersion(
80
+ container: ContentContainer,
81
+ version: Version | string,
82
+ ): Promise<string | null> {
83
+ const path = typeof version === 'string' ? version : version.path;
84
+ const data = await container.readFile(path);
85
+ if (!data) return null;
86
+ return decoder.decode(data);
87
+ }
88
+
89
+ /**
90
+ * Save a new snapshot of the document if its content differs from the
91
+ * latest existing snapshot.
92
+ */
93
+ export async function saveVersion(
94
+ container: ContentContainer,
95
+ options: SaveVersionOptions = {},
96
+ ): Promise<SaveVersionResult> {
97
+ const content = options.content ?? (await container.readDocument());
98
+ if (content === null || content === undefined) {
99
+ return { saved: false, version: null, reason: 'no-document' };
100
+ }
101
+ if (content.length === 0) {
102
+ return { saved: false, version: null, reason: 'empty' };
103
+ }
104
+
105
+ const basename = await resolveBasename(container, options.basename);
106
+ if (!basename) {
107
+ return { saved: false, version: null, reason: 'no-document' };
108
+ }
109
+
110
+ const versions = await listVersions(container, basename);
111
+ if (!options.force && versions.length > 0) {
112
+ const latest = versions[0]!;
113
+ const existing = await readVersion(container, latest);
114
+ if (existing === content) {
115
+ return { saved: false, version: null, reason: 'unchanged' };
116
+ }
117
+ }
118
+
119
+ const now = options.now ?? new Date();
120
+ let collision = 0;
121
+ let path = buildVersionPath(basename, now, collision);
122
+ while (await container.exists(path)) {
123
+ collision += 1;
124
+ path = buildVersionPath(basename, now, collision);
125
+ }
126
+
127
+ const data = encoder.encode(content);
128
+ await container.writeFile(path, data, 'text/markdown');
129
+
130
+ const version: Version = {
131
+ path,
132
+ basename,
133
+ timestamp: now,
134
+ size: data.byteLength,
135
+ collision,
136
+ };
137
+ return { saved: true, version, reason: 'saved' };
138
+ }
139
+
140
+ /**
141
+ * Revert the document to a prior snapshot. By default, the *current*
142
+ * document is snapshotted first so the revert is itself recoverable.
143
+ */
144
+ export async function revertToVersion(
145
+ container: ContentContainer,
146
+ version: Version | string,
147
+ options: RevertOptions = {},
148
+ ): Promise<{ reverted: boolean; snapshotted: Version | null }> {
149
+ const content = await readVersion(container, version);
150
+ if (content === null) {
151
+ return { reverted: false, snapshotted: null };
152
+ }
153
+
154
+ let snapshotted: Version | null = null;
155
+ if (options.snapshotCurrent !== false) {
156
+ const result = await saveVersion(container);
157
+ snapshotted = result.version;
158
+ }
159
+
160
+ const docPath = await resolveDocPath(container);
161
+ await container.writeDocument(content, docPath);
162
+ return { reverted: true, snapshotted };
163
+ }
164
+
165
+ /**
166
+ * Delete snapshots that don't satisfy the policy. Returns the deleted
167
+ * versions in their original (newest-first) order.
168
+ */
169
+ export async function pruneVersions(
170
+ container: ContentContainer,
171
+ policy: PrunePolicy,
172
+ basename?: string,
173
+ ): Promise<Version[]> {
174
+ const versions = await listVersions(container, basename);
175
+ const toDelete: Version[] = [];
176
+
177
+ if (policy.type === 'keep-last-n') {
178
+ const n = Math.max(0, Math.floor(policy.n));
179
+ toDelete.push(...versions.slice(n));
180
+ } else if (policy.type === 'older-than') {
181
+ const cutoff = policy.date.getTime();
182
+ for (const v of versions) {
183
+ if (v.timestamp.getTime() < cutoff) toDelete.push(v);
184
+ }
185
+ } else {
186
+ for (const v of versions) {
187
+ if (!policy.keep(v, versions)) toDelete.push(v);
188
+ }
189
+ }
190
+
191
+ for (const v of toDelete) {
192
+ await container.removeFile(v.path);
193
+ }
194
+ return toDelete;
195
+ }
196
+
197
+ /**
198
+ * Collapse adjacent snapshots that occurred close together — keeping the
199
+ * newer one — to keep history readable across rapid edits.
200
+ */
201
+ export async function coalesceVersions(
202
+ container: ContentContainer,
203
+ options: CoalesceOptions = {},
204
+ basename?: string,
205
+ ): Promise<Version[]> {
206
+ const windowMs = options.windowMs ?? 60_000;
207
+ const versions = await listVersions(container, basename);
208
+ const toDelete: Version[] = [];
209
+ // Walk newest -> oldest, anchored to the last *kept* snapshot. Any
210
+ // candidate within `windowMs` of the anchor is dropped; the first one
211
+ // outside the window becomes the new anchor. Comparing each pair against
212
+ // its previous neighbor instead would chain through deleted snapshots
213
+ // and over-prune any tightly-clustered run (e.g. 30s apart with a 60s
214
+ // window collapses to a single survivor).
215
+ if (versions.length > 0) {
216
+ let anchor = versions[0]!;
217
+ for (let i = 1; i < versions.length; i++) {
218
+ const candidate = versions[i]!;
219
+ if (anchor.timestamp.getTime() - candidate.timestamp.getTime() <= windowMs) {
220
+ toDelete.push(candidate);
221
+ } else {
222
+ anchor = candidate;
223
+ }
224
+ }
225
+ }
226
+ for (const v of toDelete) {
227
+ await container.removeFile(v.path);
228
+ }
229
+ return toDelete;
230
+ }
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Path conventions for version snapshots.
3
+ *
4
+ * Snapshots live at `<VERSIONS_PREFIX><basename>.<timestamp>[<-suffix>].md`.
5
+ * The optional numeric suffix (`-2`, `-3`, ...) is appended only when two
6
+ * snapshots collide on the same UTC second.
7
+ */
8
+
9
+ import { formatVersionTimestamp, parseVersionTimestamp } from './timestamp.js';
10
+
11
+ /** Subfolder (inside the ContentContainer) that holds version snapshots. */
12
+ export const VERSIONS_PREFIX = '.versions/';
13
+
14
+ /**
15
+ * Strip the directory and extension from a document path to produce the
16
+ * basename used in version filenames. `subdir/index.md` -> `index`.
17
+ */
18
+ export function getDocBasename(documentPath: string): string {
19
+ const slash = documentPath.lastIndexOf('/');
20
+ const file = slash >= 0 ? documentPath.slice(slash + 1) : documentPath;
21
+ const dot = file.lastIndexOf('.');
22
+ return dot > 0 ? file.slice(0, dot) : file;
23
+ }
24
+
25
+ /**
26
+ * Build a version snapshot path. Optionally append a collision suffix
27
+ * (e.g. `2`, `3`) when two saves land on the same UTC second.
28
+ */
29
+ export function buildVersionPath(basename: string, date: Date, collision = 0): string {
30
+ const stamp = formatVersionTimestamp(date);
31
+ const suffix = collision > 0 ? `-${collision + 1}` : '';
32
+ return `${VERSIONS_PREFIX}${basename}.${stamp}${suffix}.md`;
33
+ }
34
+
35
+ /**
36
+ * Parse a version snapshot path. Returns null if it doesn't match the
37
+ * convention (so unrelated files stored under `.versions/` are ignored).
38
+ */
39
+ export function parseVersionPath(
40
+ path: string,
41
+ ): { basename: string; timestamp: Date; collision: number } | null {
42
+ if (!path.startsWith(VERSIONS_PREFIX)) return null;
43
+ const rest = path.slice(VERSIONS_PREFIX.length);
44
+ if (!rest.endsWith('.md')) return null;
45
+ const stem = rest.slice(0, -'.md'.length);
46
+ // basename can contain dots; the timestamp is always the *last* dot-segment
47
+ // (optionally followed by a `-N` collision suffix).
48
+ const lastDot = stem.lastIndexOf('.');
49
+ if (lastDot <= 0) return null;
50
+ const basename = stem.slice(0, lastDot);
51
+ const tail = stem.slice(lastDot + 1);
52
+ const dash = tail.indexOf('-');
53
+ let stamp: string;
54
+ let collision = 0;
55
+ if (dash >= 0) {
56
+ stamp = tail.slice(0, dash);
57
+ const n = Number(tail.slice(dash + 1));
58
+ if (!Number.isInteger(n) || n < 2) return null;
59
+ collision = n - 1;
60
+ } else {
61
+ stamp = tail;
62
+ }
63
+ const timestamp = parseVersionTimestamp(stamp);
64
+ if (!timestamp) return null;
65
+ return { basename, timestamp, collision };
66
+ }
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Sortable, human-readable timestamps for version filenames.
3
+ *
4
+ * Format: ISO 8601 basic, UTC, second precision, `Z` suffix —
5
+ * e.g. `20260430T152030Z`. Lexicographic order matches chronological order,
6
+ * so `listFiles` returns versions in time order without parsing.
7
+ */
8
+
9
+ const TIMESTAMP_RE = /^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})Z$/;
10
+
11
+ function pad2(n: number): string {
12
+ return n < 10 ? `0${n}` : String(n);
13
+ }
14
+
15
+ /**
16
+ * Format a Date as a sortable, filename-safe UTC timestamp string.
17
+ */
18
+ export function formatVersionTimestamp(date: Date): string {
19
+ return (
20
+ String(date.getUTCFullYear()).padStart(4, '0') +
21
+ pad2(date.getUTCMonth() + 1) +
22
+ pad2(date.getUTCDate()) +
23
+ 'T' +
24
+ pad2(date.getUTCHours()) +
25
+ pad2(date.getUTCMinutes()) +
26
+ pad2(date.getUTCSeconds()) +
27
+ 'Z'
28
+ );
29
+ }
30
+
31
+ /**
32
+ * Parse a version timestamp string back to a Date. Returns null if the input
33
+ * doesn't match the expected format.
34
+ */
35
+ export function parseVersionTimestamp(stamp: string): Date | null {
36
+ const m = TIMESTAMP_RE.exec(stamp);
37
+ if (!m) return null;
38
+ const [, y, mo, d, h, mi, s] = m;
39
+ const ms = Date.UTC(Number(y), Number(mo) - 1, Number(d), Number(h), Number(mi), Number(s));
40
+ if (Number.isNaN(ms)) return null;
41
+ return new Date(ms);
42
+ }
43
+
44
+ /**
45
+ * The pattern a valid version timestamp matches. Exported so other modules
46
+ * can validate filenames without re-deriving the regex.
47
+ */
48
+ export const VERSION_TIMESTAMP_PATTERN = TIMESTAMP_RE;
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Public types for the document version-history feature.
3
+ *
4
+ * Versions are snapshots of the primary markdown document stored alongside
5
+ * the document inside the same {@link ContentContainer}. They live under
6
+ * `.versions/<docBasename>.<sortableTimestamp>.md`. The container is the
7
+ * unit of persistence — when the host serializes the container to a ZIP,
8
+ * a real folder, or anywhere else, the version snapshots ride along.
9
+ */
10
+
11
+ /**
12
+ * A single version snapshot record.
13
+ */
14
+ export interface Version {
15
+ /** Container-relative path, e.g. `.versions/index.20260430T152030Z.md`. */
16
+ path: string;
17
+ /** Document basename without extension, e.g. `index`. */
18
+ basename: string;
19
+ /** Parsed timestamp from the filename, in UTC. */
20
+ timestamp: Date;
21
+ /** Snapshot size in bytes. */
22
+ size: number;
23
+ /**
24
+ * Collision suffix index. `0` for a path with no `-N` suffix, `1` for `-2`,
25
+ * `2` for `-3`, and so on. Used as the tie-break for ordering snapshots
26
+ * that share the same UTC second.
27
+ */
28
+ collision: number;
29
+ }
30
+
31
+ /**
32
+ * Result of a {@link saveVersion} call.
33
+ */
34
+ export interface SaveVersionResult {
35
+ /** True when a new snapshot file was actually written. */
36
+ saved: boolean;
37
+ /** The newly stamped version (only when `saved` is true). */
38
+ version: Version | null;
39
+ /**
40
+ * Why the save behaved the way it did:
41
+ * - `'saved'` — a new snapshot was written.
42
+ * - `'unchanged'` — current content matches the latest snapshot byte-for-byte.
43
+ * - `'no-document'` — the container has no primary markdown document.
44
+ * - `'empty'` — the resolved content was empty.
45
+ */
46
+ reason: 'saved' | 'unchanged' | 'no-document' | 'empty';
47
+ }
48
+
49
+ /**
50
+ * Options for {@link saveVersion}.
51
+ */
52
+ export interface SaveVersionOptions {
53
+ /** Override the document content; otherwise the container's primary doc is read. */
54
+ content?: string;
55
+ /** Override the timestamp; defaults to `new Date()`. Useful for tests. */
56
+ now?: Date;
57
+ /** Skip the diff-vs-latest check and force a write. */
58
+ force?: boolean;
59
+ /** Override the document basename used to build the version filename. */
60
+ basename?: string;
61
+ }
62
+
63
+ /**
64
+ * Pruning policy passed to {@link pruneVersions}.
65
+ */
66
+ export type PrunePolicy =
67
+ | { type: 'keep-last-n'; n: number }
68
+ | { type: 'older-than'; date: Date }
69
+ | { type: 'predicate'; keep: (v: Version, all: Version[]) => boolean };
70
+
71
+ /**
72
+ * Options for {@link revertToVersion}.
73
+ */
74
+ export interface RevertOptions {
75
+ /**
76
+ * Whether to snapshot the current document content before replacing it.
77
+ * Defaults to `true` so a revert is always recoverable.
78
+ */
79
+ snapshotCurrent?: boolean;
80
+ }
81
+
82
+ /**
83
+ * Options for {@link coalesceVersions}.
84
+ */
85
+ export interface CoalesceOptions {
86
+ /**
87
+ * Two adjacent snapshots whose timestamps are within `windowMs` collapse
88
+ * to the newer one. Defaults to 60_000 (one minute).
89
+ */
90
+ windowMs?: number;
91
+ }