@bendyline/squisq 1.3.0 → 1.4.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 (533) 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/{chunk-CYQHG27J.js → chunk-2TMAWB4Y.js} +74 -1
  4. package/dist/chunk-2TMAWB4Y.js.map +1 -0
  5. package/dist/{chunk-OASJKWO5.js → chunk-3K5OG6KI.js} +92 -7
  6. package/dist/chunk-3K5OG6KI.js.map +1 -0
  7. package/dist/chunk-57CVQCFX.js +193 -0
  8. package/dist/chunk-57CVQCFX.js.map +1 -0
  9. package/dist/{chunk-QM5PKNPW.js → chunk-5WFRKURX.js} +1 -1
  10. package/dist/chunk-5WFRKURX.js.map +1 -0
  11. package/dist/chunk-B4EEON3N.js +1317 -0
  12. package/dist/chunk-B4EEON3N.js.map +1 -0
  13. package/dist/chunk-DBS6RIFL.js +81 -0
  14. package/dist/chunk-DBS6RIFL.js.map +1 -0
  15. package/dist/{chunk-MIBRIRGJ.js → chunk-FR2RBTKO.js} +3 -3
  16. package/dist/{chunk-MIBRIRGJ.js.map → chunk-FR2RBTKO.js.map} +1 -1
  17. package/dist/chunk-H3AXU4MJ.js +179 -0
  18. package/dist/chunk-H3AXU4MJ.js.map +1 -0
  19. package/dist/chunk-JELIRVDP.js +24 -0
  20. package/dist/chunk-JELIRVDP.js.map +1 -0
  21. package/dist/chunk-K32VJONL.js +193 -0
  22. package/dist/chunk-K32VJONL.js.map +1 -0
  23. package/dist/{chunk-6BAVXFYC.js → chunk-KSWJR66U.js} +218 -42
  24. package/dist/chunk-KSWJR66U.js.map +1 -0
  25. package/dist/{chunk-TSG2OSE6.js → chunk-MYIH7FWD.js} +3 -3
  26. package/dist/chunk-MYIH7FWD.js.map +1 -0
  27. package/dist/chunk-VLJJHDAC.js +218 -0
  28. package/dist/chunk-VLJJHDAC.js.map +1 -0
  29. package/dist/chunk-WMOI7FN3.js +182 -0
  30. package/dist/chunk-WMOI7FN3.js.map +1 -0
  31. package/dist/chunk-ZTX4PFFT.js +520 -0
  32. package/dist/chunk-ZTX4PFFT.js.map +1 -0
  33. package/dist/doc/index.d.ts +5 -10
  34. package/dist/doc/index.js +145 -7
  35. package/dist/doc/index.js.map +1 -1
  36. package/dist/generate/index.d.ts +99 -7
  37. package/dist/generate/index.js +16 -3
  38. package/dist/generate/index.js.map +1 -1
  39. package/dist/icons/index.d.ts +87 -0
  40. package/dist/icons/index.js +17 -0
  41. package/dist/icons/index.js.map +1 -0
  42. package/dist/imageEdit/index.d.ts +216 -0
  43. package/dist/imageEdit/index.js +54 -0
  44. package/dist/imageEdit/index.js.map +1 -0
  45. package/dist/index.d.ts +21 -9
  46. package/dist/index.js +461 -8
  47. package/dist/index.js.map +1 -1
  48. package/dist/jsonForm/index.d.ts +191 -0
  49. package/dist/jsonForm/index.js +27 -0
  50. package/dist/jsonForm/index.js.map +1 -0
  51. package/dist/markdown/index.d.ts +265 -19
  52. package/dist/markdown/index.js +39 -33
  53. package/dist/markdown/index.js.map +1 -1
  54. package/dist/random/index.d.ts +51 -2
  55. package/dist/random/index.js +9 -1
  56. package/dist/random/index.js.map +1 -1
  57. package/dist/recommend/index.d.ts +42 -0
  58. package/dist/recommend/index.js +10 -0
  59. package/dist/recommend/index.js.map +1 -0
  60. package/dist/schemas/index.d.ts +188 -10
  61. package/dist/schemas/index.js +120 -7
  62. package/dist/schemas/index.js.map +1 -1
  63. package/dist/spatial/index.d.ts +111 -3
  64. package/dist/spatial/index.js +24 -2
  65. package/dist/spatial/index.js.map +1 -1
  66. package/dist/storage/index.d.ts +159 -9
  67. package/dist/storage/index.js +20 -5
  68. package/dist/storage/index.js.map +1 -1
  69. package/dist/story/index.d.ts +53 -13
  70. package/dist/story/index.js +12 -4
  71. package/dist/themeLibrary-BHjJ0Qx6.d.ts +40 -0
  72. package/dist/timing/index.d.ts +109 -4
  73. package/dist/timing/index.js +23 -2
  74. package/dist/timing/index.js.map +1 -1
  75. package/dist/transform/index.d.ts +175 -6
  76. package/dist/transform/index.js +490 -3
  77. package/dist/transform/index.js.map +1 -1
  78. package/dist/{types-CkNttVSF.d.ts → types-BdZkdJ3z.d.ts} +17 -2
  79. package/dist/types-D98li1gV.d.ts +93 -0
  80. package/dist/versions/index.d.ts +128 -0
  81. package/dist/versions/index.js +35 -0
  82. package/dist/versions/index.js.map +1 -0
  83. package/package.json +28 -1
  84. package/src/__tests__/colorUtils.test.ts +112 -0
  85. package/src/__tests__/getLayers.test.ts +32 -7
  86. package/src/__tests__/iconResolve.test.ts +122 -0
  87. package/src/__tests__/imageEditState.test.ts +74 -0
  88. package/src/__tests__/imageEditVersions.test.ts +169 -0
  89. package/src/__tests__/inferDocumentTitle.test.ts +50 -0
  90. package/src/__tests__/jsonForm.chooseControl.test.ts +86 -0
  91. package/src/__tests__/jsonForm.evaluateWhen.test.ts +59 -0
  92. package/src/__tests__/jsonForm.inferSchema.test.ts +25 -0
  93. package/src/__tests__/jsonForm.pointer.test.ts +103 -0
  94. package/src/__tests__/markdownIcons.test.ts +104 -0
  95. package/src/__tests__/markdownToDoc.test.ts +19 -4
  96. package/src/__tests__/recommendTemplates.test.ts +183 -0
  97. package/src/__tests__/scopedContentContainer.test.ts +89 -0
  98. package/src/__tests__/slideshowGenerator.test.ts +1 -1
  99. package/src/__tests__/templateAnnotationParse.test.ts +42 -0
  100. package/src/__tests__/templates.test.ts +93 -9
  101. package/src/__tests__/themeCompile.test.ts +156 -0
  102. package/src/__tests__/themeValidator.test.ts +125 -0
  103. package/src/__tests__/versions.test.ts +415 -0
  104. package/src/doc/audioMapping.ts +55 -11
  105. package/src/doc/getLayers.ts +32 -21
  106. package/src/doc/markdownToDoc.ts +45 -7
  107. package/src/doc/templates/featureBlock.ts +202 -0
  108. package/src/doc/templates/fullBleedQuote.ts +13 -0
  109. package/src/doc/templates/index.ts +50 -16
  110. package/src/doc/templates/listBlock.ts +24 -5
  111. package/src/doc/templates/statHighlight.ts +13 -0
  112. package/src/doc/templates/titleBlock.ts +9 -0
  113. package/src/doc/utils/themeUtils.ts +8 -7
  114. package/src/generate/slideshowGenerator.ts +1 -1
  115. package/src/generate/templateMapper.ts +2 -2
  116. package/src/icons/iconData.ts +31 -0
  117. package/src/icons/index.ts +18 -0
  118. package/src/icons/resolve.ts +139 -0
  119. package/src/imageEdit/ImageEditVersionManager.ts +73 -0
  120. package/src/imageEdit/export.ts +326 -0
  121. package/src/imageEdit/index.ts +71 -0
  122. package/src/imageEdit/persistence.ts +62 -0
  123. package/src/imageEdit/state.ts +112 -0
  124. package/src/imageEdit/versionPaths.ts +57 -0
  125. package/src/imageEdit/versions.ts +231 -0
  126. package/src/index.ts +4 -0
  127. package/src/jsonForm/chooseControl.ts +88 -0
  128. package/src/jsonForm/evaluateWhen.ts +59 -0
  129. package/src/jsonForm/index.ts +22 -0
  130. package/src/jsonForm/inferSchema.ts +25 -0
  131. package/src/jsonForm/pointer.ts +109 -0
  132. package/src/jsonForm/types.ts +167 -0
  133. package/src/markdown/convert.ts +145 -5
  134. package/src/markdown/index.ts +3 -0
  135. package/src/markdown/types.ts +19 -2
  136. package/src/markdown/utils.ts +159 -0
  137. package/src/recommend/index.ts +16 -0
  138. package/src/recommend/templates.ts +273 -0
  139. package/src/schemas/BlockTemplates.ts +50 -7
  140. package/src/schemas/ImageEditDoc.ts +95 -0
  141. package/src/schemas/Theme.ts +98 -31
  142. package/src/schemas/colorUtils.ts +186 -0
  143. package/src/schemas/fontStacks.ts +257 -0
  144. package/src/schemas/index.ts +12 -0
  145. package/src/schemas/themeCompile.ts +203 -0
  146. package/src/schemas/themeLibrary.ts +18 -597
  147. package/src/schemas/themeValidator.ts +388 -0
  148. package/src/schemas/themes/bold.json +48 -0
  149. package/src/schemas/themes/cinematic.json +54 -0
  150. package/src/schemas/themes/documentary.json +49 -0
  151. package/src/schemas/themes/gezellig.json +44 -0
  152. package/src/schemas/themes/index.ts +53 -0
  153. package/src/schemas/themes/magazine.json +44 -0
  154. package/src/schemas/themes/minimalist.json +45 -0
  155. package/src/schemas/themes/morning-light.json +42 -0
  156. package/src/schemas/themes/standard-dark.json +50 -0
  157. package/src/schemas/themes/standard.json +42 -0
  158. package/src/schemas/themes/tech-dark.json +48 -0
  159. package/src/schemas/themes/warm-earth.json +50 -0
  160. package/src/storage/ScopedContentContainer.ts +113 -0
  161. package/src/storage/index.ts +1 -0
  162. package/src/versions/DocumentVersionManager.ts +70 -0
  163. package/src/versions/index.ts +54 -0
  164. package/src/versions/operations.ts +230 -0
  165. package/src/versions/paths.ts +66 -0
  166. package/src/versions/timestamp.ts +48 -0
  167. package/src/versions/types.ts +91 -0
  168. package/dist/__tests__/animationUtils.test.d.ts +0 -2
  169. package/dist/__tests__/animationUtils.test.d.ts.map +0 -1
  170. package/dist/__tests__/animationUtils.test.js +0 -60
  171. package/dist/__tests__/animationUtils.test.js.map +0 -1
  172. package/dist/__tests__/contentContainer.test.d.ts +0 -2
  173. package/dist/__tests__/contentContainer.test.d.ts.map +0 -1
  174. package/dist/__tests__/contentContainer.test.js +0 -234
  175. package/dist/__tests__/contentContainer.test.js.map +0 -1
  176. package/dist/__tests__/contentExtractor.test.d.ts +0 -2
  177. package/dist/__tests__/contentExtractor.test.d.ts.map +0 -1
  178. package/dist/__tests__/contentExtractor.test.js +0 -151
  179. package/dist/__tests__/contentExtractor.test.js.map +0 -1
  180. package/dist/__tests__/coverBlock.test.d.ts +0 -2
  181. package/dist/__tests__/coverBlock.test.d.ts.map +0 -1
  182. package/dist/__tests__/coverBlock.test.js +0 -197
  183. package/dist/__tests__/coverBlock.test.js.map +0 -1
  184. package/dist/__tests__/dataTable.test.d.ts +0 -2
  185. package/dist/__tests__/dataTable.test.d.ts.map +0 -1
  186. package/dist/__tests__/dataTable.test.js +0 -110
  187. package/dist/__tests__/dataTable.test.js.map +0 -1
  188. package/dist/__tests__/geohash.test.d.ts +0 -2
  189. package/dist/__tests__/geohash.test.d.ts.map +0 -1
  190. package/dist/__tests__/geohash.test.js +0 -87
  191. package/dist/__tests__/geohash.test.js.map +0 -1
  192. package/dist/__tests__/getLayers.test.d.ts +0 -2
  193. package/dist/__tests__/getLayers.test.d.ts.map +0 -1
  194. package/dist/__tests__/getLayers.test.js +0 -167
  195. package/dist/__tests__/getLayers.test.js.map +0 -1
  196. package/dist/__tests__/haversine.test.d.ts +0 -2
  197. package/dist/__tests__/haversine.test.d.ts.map +0 -1
  198. package/dist/__tests__/haversine.test.js +0 -56
  199. package/dist/__tests__/haversine.test.js.map +0 -1
  200. package/dist/__tests__/localForageAdapter.test.d.ts +0 -8
  201. package/dist/__tests__/localForageAdapter.test.d.ts.map +0 -1
  202. package/dist/__tests__/localForageAdapter.test.js +0 -130
  203. package/dist/__tests__/localForageAdapter.test.js.map +0 -1
  204. package/dist/__tests__/markdown.test.d.ts +0 -2
  205. package/dist/__tests__/markdown.test.d.ts.map +0 -1
  206. package/dist/__tests__/markdown.test.js +0 -715
  207. package/dist/__tests__/markdown.test.js.map +0 -1
  208. package/dist/__tests__/markdownToDoc.test.d.ts +0 -2
  209. package/dist/__tests__/markdownToDoc.test.d.ts.map +0 -1
  210. package/dist/__tests__/markdownToDoc.test.js +0 -447
  211. package/dist/__tests__/markdownToDoc.test.js.map +0 -1
  212. package/dist/__tests__/seededRandom.test.d.ts +0 -2
  213. package/dist/__tests__/seededRandom.test.d.ts.map +0 -1
  214. package/dist/__tests__/seededRandom.test.js +0 -125
  215. package/dist/__tests__/seededRandom.test.js.map +0 -1
  216. package/dist/__tests__/slideshowGenerator.test.d.ts +0 -2
  217. package/dist/__tests__/slideshowGenerator.test.d.ts.map +0 -1
  218. package/dist/__tests__/slideshowGenerator.test.js +0 -114
  219. package/dist/__tests__/slideshowGenerator.test.js.map +0 -1
  220. package/dist/__tests__/storage.test.d.ts +0 -2
  221. package/dist/__tests__/storage.test.d.ts.map +0 -1
  222. package/dist/__tests__/storage.test.js +0 -51
  223. package/dist/__tests__/storage.test.js.map +0 -1
  224. package/dist/__tests__/surface.test.d.ts +0 -2
  225. package/dist/__tests__/surface.test.d.ts.map +0 -1
  226. package/dist/__tests__/surface.test.js +0 -57
  227. package/dist/__tests__/surface.test.js.map +0 -1
  228. package/dist/__tests__/templates.test.d.ts +0 -2
  229. package/dist/__tests__/templates.test.d.ts.map +0 -1
  230. package/dist/__tests__/templates.test.js +0 -217
  231. package/dist/__tests__/templates.test.js.map +0 -1
  232. package/dist/__tests__/timing.test.d.ts +0 -2
  233. package/dist/__tests__/timing.test.d.ts.map +0 -1
  234. package/dist/__tests__/timing.test.js +0 -131
  235. package/dist/__tests__/timing.test.js.map +0 -1
  236. package/dist/chunk-6BAVXFYC.js.map +0 -1
  237. package/dist/chunk-7GF6RDED.js +0 -82
  238. package/dist/chunk-7GF6RDED.js.map +0 -1
  239. package/dist/chunk-CYQHG27J.js.map +0 -1
  240. package/dist/chunk-F22AE6BY.js +0 -121
  241. package/dist/chunk-F22AE6BY.js.map +0 -1
  242. package/dist/chunk-FIQR4AJG.js +0 -517
  243. package/dist/chunk-FIQR4AJG.js.map +0 -1
  244. package/dist/chunk-OASJKWO5.js.map +0 -1
  245. package/dist/chunk-QM5PKNPW.js.map +0 -1
  246. package/dist/chunk-TSG2OSE6.js.map +0 -1
  247. package/dist/doc/audioMapping.d.ts +0 -36
  248. package/dist/doc/audioMapping.d.ts.map +0 -1
  249. package/dist/doc/audioMapping.js +0 -315
  250. package/dist/doc/audioMapping.js.map +0 -1
  251. package/dist/doc/docToMarkdown.d.ts +0 -41
  252. package/dist/doc/docToMarkdown.d.ts.map +0 -1
  253. package/dist/doc/docToMarkdown.js +0 -88
  254. package/dist/doc/docToMarkdown.js.map +0 -1
  255. package/dist/doc/getLayers.d.ts +0 -65
  256. package/dist/doc/getLayers.d.ts.map +0 -1
  257. package/dist/doc/getLayers.js +0 -103
  258. package/dist/doc/getLayers.js.map +0 -1
  259. package/dist/doc/index.d.ts.map +0 -1
  260. package/dist/doc/markdownToDoc.d.ts +0 -75
  261. package/dist/doc/markdownToDoc.d.ts.map +0 -1
  262. package/dist/doc/markdownToDoc.js +0 -398
  263. package/dist/doc/markdownToDoc.js.map +0 -1
  264. package/dist/doc/templates/accentImage.d.ts +0 -59
  265. package/dist/doc/templates/accentImage.d.ts.map +0 -1
  266. package/dist/doc/templates/accentImage.js +0 -275
  267. package/dist/doc/templates/accentImage.js.map +0 -1
  268. package/dist/doc/templates/captionUtils.d.ts +0 -20
  269. package/dist/doc/templates/captionUtils.d.ts.map +0 -1
  270. package/dist/doc/templates/captionUtils.js +0 -29
  271. package/dist/doc/templates/captionUtils.js.map +0 -1
  272. package/dist/doc/templates/comparisonBar.d.ts +0 -13
  273. package/dist/doc/templates/comparisonBar.d.ts.map +0 -1
  274. package/dist/doc/templates/comparisonBar.js +0 -145
  275. package/dist/doc/templates/comparisonBar.js.map +0 -1
  276. package/dist/doc/templates/coverBlock.d.ts +0 -51
  277. package/dist/doc/templates/coverBlock.d.ts.map +0 -1
  278. package/dist/doc/templates/coverBlock.js +0 -153
  279. package/dist/doc/templates/coverBlock.js.map +0 -1
  280. package/dist/doc/templates/dataTable.d.ts +0 -14
  281. package/dist/doc/templates/dataTable.d.ts.map +0 -1
  282. package/dist/doc/templates/dataTable.js +0 -73
  283. package/dist/doc/templates/dataTable.js.map +0 -1
  284. package/dist/doc/templates/dateEvent.d.ts +0 -15
  285. package/dist/doc/templates/dateEvent.d.ts.map +0 -1
  286. package/dist/doc/templates/dateEvent.js +0 -114
  287. package/dist/doc/templates/dateEvent.js.map +0 -1
  288. package/dist/doc/templates/definitionCard.d.ts +0 -13
  289. package/dist/doc/templates/definitionCard.d.ts.map +0 -1
  290. package/dist/doc/templates/definitionCard.js +0 -117
  291. package/dist/doc/templates/definitionCard.js.map +0 -1
  292. package/dist/doc/templates/factCard.d.ts +0 -15
  293. package/dist/doc/templates/factCard.d.ts.map +0 -1
  294. package/dist/doc/templates/factCard.js +0 -104
  295. package/dist/doc/templates/factCard.js.map +0 -1
  296. package/dist/doc/templates/fullBleedQuote.d.ts +0 -13
  297. package/dist/doc/templates/fullBleedQuote.d.ts.map +0 -1
  298. package/dist/doc/templates/fullBleedQuote.js +0 -55
  299. package/dist/doc/templates/fullBleedQuote.js.map +0 -1
  300. package/dist/doc/templates/imageWithCaption.d.ts +0 -13
  301. package/dist/doc/templates/imageWithCaption.d.ts.map +0 -1
  302. package/dist/doc/templates/imageWithCaption.js +0 -146
  303. package/dist/doc/templates/imageWithCaption.js.map +0 -1
  304. package/dist/doc/templates/index.d.ts +0 -105
  305. package/dist/doc/templates/index.d.ts.map +0 -1
  306. package/dist/doc/templates/index.js +0 -445
  307. package/dist/doc/templates/index.js.map +0 -1
  308. package/dist/doc/templates/listBlock.d.ts +0 -13
  309. package/dist/doc/templates/listBlock.d.ts.map +0 -1
  310. package/dist/doc/templates/listBlock.js +0 -92
  311. package/dist/doc/templates/listBlock.js.map +0 -1
  312. package/dist/doc/templates/mapBlock.d.ts +0 -17
  313. package/dist/doc/templates/mapBlock.d.ts.map +0 -1
  314. package/dist/doc/templates/mapBlock.js +0 -115
  315. package/dist/doc/templates/mapBlock.js.map +0 -1
  316. package/dist/doc/templates/persistentLayers.d.ts +0 -39
  317. package/dist/doc/templates/persistentLayers.d.ts.map +0 -1
  318. package/dist/doc/templates/persistentLayers.js +0 -447
  319. package/dist/doc/templates/persistentLayers.js.map +0 -1
  320. package/dist/doc/templates/photoGrid.d.ts +0 -20
  321. package/dist/doc/templates/photoGrid.d.ts.map +0 -1
  322. package/dist/doc/templates/photoGrid.js +0 -175
  323. package/dist/doc/templates/photoGrid.js.map +0 -1
  324. package/dist/doc/templates/pullQuote.d.ts +0 -13
  325. package/dist/doc/templates/pullQuote.d.ts.map +0 -1
  326. package/dist/doc/templates/pullQuote.js +0 -113
  327. package/dist/doc/templates/pullQuote.js.map +0 -1
  328. package/dist/doc/templates/quoteBlock.d.ts +0 -15
  329. package/dist/doc/templates/quoteBlock.d.ts.map +0 -1
  330. package/dist/doc/templates/quoteBlock.js +0 -101
  331. package/dist/doc/templates/quoteBlock.js.map +0 -1
  332. package/dist/doc/templates/sectionHeader.d.ts +0 -14
  333. package/dist/doc/templates/sectionHeader.d.ts.map +0 -1
  334. package/dist/doc/templates/sectionHeader.js +0 -97
  335. package/dist/doc/templates/sectionHeader.js.map +0 -1
  336. package/dist/doc/templates/statHighlight.d.ts +0 -15
  337. package/dist/doc/templates/statHighlight.d.ts.map +0 -1
  338. package/dist/doc/templates/statHighlight.js +0 -102
  339. package/dist/doc/templates/statHighlight.js.map +0 -1
  340. package/dist/doc/templates/titleBlock.d.ts +0 -13
  341. package/dist/doc/templates/titleBlock.d.ts.map +0 -1
  342. package/dist/doc/templates/titleBlock.js +0 -95
  343. package/dist/doc/templates/titleBlock.js.map +0 -1
  344. package/dist/doc/templates/twoColumn.d.ts +0 -15
  345. package/dist/doc/templates/twoColumn.d.ts.map +0 -1
  346. package/dist/doc/templates/twoColumn.js +0 -225
  347. package/dist/doc/templates/twoColumn.js.map +0 -1
  348. package/dist/doc/templates/videoPullQuote.d.ts +0 -20
  349. package/dist/doc/templates/videoPullQuote.d.ts.map +0 -1
  350. package/dist/doc/templates/videoPullQuote.js +0 -122
  351. package/dist/doc/templates/videoPullQuote.js.map +0 -1
  352. package/dist/doc/templates/videoWithCaption.d.ts +0 -20
  353. package/dist/doc/templates/videoWithCaption.d.ts.map +0 -1
  354. package/dist/doc/templates/videoWithCaption.js +0 -107
  355. package/dist/doc/templates/videoWithCaption.js.map +0 -1
  356. package/dist/doc/utils/animationUtils.d.ts +0 -34
  357. package/dist/doc/utils/animationUtils.d.ts.map +0 -1
  358. package/dist/doc/utils/animationUtils.js +0 -110
  359. package/dist/doc/utils/animationUtils.js.map +0 -1
  360. package/dist/doc/utils/themeUtils.d.ts +0 -64
  361. package/dist/doc/utils/themeUtils.d.ts.map +0 -1
  362. package/dist/doc/utils/themeUtils.js +0 -135
  363. package/dist/doc/utils/themeUtils.js.map +0 -1
  364. package/dist/generate/contentExtractor.d.ts +0 -112
  365. package/dist/generate/contentExtractor.d.ts.map +0 -1
  366. package/dist/generate/contentExtractor.js +0 -638
  367. package/dist/generate/contentExtractor.js.map +0 -1
  368. package/dist/generate/index.d.ts.map +0 -1
  369. package/dist/generate/slideshowGenerator.d.ts +0 -72
  370. package/dist/generate/slideshowGenerator.d.ts.map +0 -1
  371. package/dist/generate/slideshowGenerator.js +0 -159
  372. package/dist/generate/slideshowGenerator.js.map +0 -1
  373. package/dist/generate/templateMapper.d.ts +0 -23
  374. package/dist/generate/templateMapper.d.ts.map +0 -1
  375. package/dist/generate/templateMapper.js +0 -114
  376. package/dist/generate/templateMapper.js.map +0 -1
  377. package/dist/index.d.ts.map +0 -1
  378. package/dist/markdown/convert.d.ts +0 -71
  379. package/dist/markdown/convert.d.ts.map +0 -1
  380. package/dist/markdown/convert.js +0 -845
  381. package/dist/markdown/convert.js.map +0 -1
  382. package/dist/markdown/htmlParse.d.ts +0 -26
  383. package/dist/markdown/htmlParse.d.ts.map +0 -1
  384. package/dist/markdown/htmlParse.js +0 -195
  385. package/dist/markdown/htmlParse.js.map +0 -1
  386. package/dist/markdown/index.d.ts.map +0 -1
  387. package/dist/markdown/parse.d.ts +0 -27
  388. package/dist/markdown/parse.d.ts.map +0 -1
  389. package/dist/markdown/parse.js +0 -90
  390. package/dist/markdown/parse.js.map +0 -1
  391. package/dist/markdown/stringify.d.ts +0 -32
  392. package/dist/markdown/stringify.d.ts.map +0 -1
  393. package/dist/markdown/stringify.js +0 -108
  394. package/dist/markdown/stringify.js.map +0 -1
  395. package/dist/markdown/types.d.ts +0 -516
  396. package/dist/markdown/types.d.ts.map +0 -1
  397. package/dist/markdown/types.js +0 -17
  398. package/dist/markdown/types.js.map +0 -1
  399. package/dist/markdown/utils.d.ts +0 -78
  400. package/dist/markdown/utils.d.ts.map +0 -1
  401. package/dist/markdown/utils.js +0 -153
  402. package/dist/markdown/utils.js.map +0 -1
  403. package/dist/random/SeededRandom.d.ts +0 -50
  404. package/dist/random/SeededRandom.d.ts.map +0 -1
  405. package/dist/random/SeededRandom.js +0 -115
  406. package/dist/random/SeededRandom.js.map +0 -1
  407. package/dist/random/index.d.ts.map +0 -1
  408. package/dist/schemas/BlockTemplates.d.ts +0 -600
  409. package/dist/schemas/BlockTemplates.d.ts.map +0 -1
  410. package/dist/schemas/BlockTemplates.js +0 -72
  411. package/dist/schemas/BlockTemplates.js.map +0 -1
  412. package/dist/schemas/Doc.d.ts +0 -503
  413. package/dist/schemas/Doc.d.ts.map +0 -1
  414. package/dist/schemas/Doc.js +0 -90
  415. package/dist/schemas/Doc.js.map +0 -1
  416. package/dist/schemas/LayoutStrategy.d.ts +0 -84
  417. package/dist/schemas/LayoutStrategy.d.ts.map +0 -1
  418. package/dist/schemas/LayoutStrategy.js +0 -123
  419. package/dist/schemas/LayoutStrategy.js.map +0 -1
  420. package/dist/schemas/MediaProvider.d.ts +0 -65
  421. package/dist/schemas/MediaProvider.d.ts.map +0 -1
  422. package/dist/schemas/MediaProvider.js +0 -13
  423. package/dist/schemas/MediaProvider.js.map +0 -1
  424. package/dist/schemas/Theme.d.ts +0 -194
  425. package/dist/schemas/Theme.d.ts.map +0 -1
  426. package/dist/schemas/Theme.js +0 -97
  427. package/dist/schemas/Theme.js.map +0 -1
  428. package/dist/schemas/Types.d.ts +0 -14
  429. package/dist/schemas/Types.d.ts.map +0 -1
  430. package/dist/schemas/Types.js +0 -5
  431. package/dist/schemas/Types.js.map +0 -1
  432. package/dist/schemas/Viewport.d.ts +0 -74
  433. package/dist/schemas/Viewport.d.ts.map +0 -1
  434. package/dist/schemas/Viewport.js +0 -63
  435. package/dist/schemas/Viewport.js.map +0 -1
  436. package/dist/schemas/index.d.ts.map +0 -1
  437. package/dist/schemas/themeLibrary.d.ts +0 -41
  438. package/dist/schemas/themeLibrary.d.ts.map +0 -1
  439. package/dist/schemas/themeLibrary.js +0 -597
  440. package/dist/schemas/themeLibrary.js.map +0 -1
  441. package/dist/spatial/Geohash.d.ts +0 -85
  442. package/dist/spatial/Geohash.d.ts.map +0 -1
  443. package/dist/spatial/Geohash.js +0 -142
  444. package/dist/spatial/Geohash.js.map +0 -1
  445. package/dist/spatial/Haversine.d.ts +0 -24
  446. package/dist/spatial/Haversine.d.ts.map +0 -1
  447. package/dist/spatial/Haversine.js +0 -48
  448. package/dist/spatial/Haversine.js.map +0 -1
  449. package/dist/spatial/index.d.ts.map +0 -1
  450. package/dist/storage/ContentContainer.d.ts +0 -87
  451. package/dist/storage/ContentContainer.d.ts.map +0 -1
  452. package/dist/storage/ContentContainer.js +0 -131
  453. package/dist/storage/ContentContainer.js.map +0 -1
  454. package/dist/storage/LocalForageAdapter.d.ts +0 -36
  455. package/dist/storage/LocalForageAdapter.d.ts.map +0 -1
  456. package/dist/storage/LocalForageAdapter.js +0 -82
  457. package/dist/storage/LocalForageAdapter.js.map +0 -1
  458. package/dist/storage/LocalStorageAdapter.d.ts +0 -16
  459. package/dist/storage/LocalStorageAdapter.d.ts.map +0 -1
  460. package/dist/storage/LocalStorageAdapter.js +0 -50
  461. package/dist/storage/LocalStorageAdapter.js.map +0 -1
  462. package/dist/storage/MediaProviderFromContainer.d.ts +0 -21
  463. package/dist/storage/MediaProviderFromContainer.d.ts.map +0 -1
  464. package/dist/storage/MediaProviderFromContainer.js +0 -79
  465. package/dist/storage/MediaProviderFromContainer.js.map +0 -1
  466. package/dist/storage/MemoryStorageAdapter.d.ts +0 -15
  467. package/dist/storage/MemoryStorageAdapter.d.ts.map +0 -1
  468. package/dist/storage/MemoryStorageAdapter.js +0 -34
  469. package/dist/storage/MemoryStorageAdapter.js.map +0 -1
  470. package/dist/storage/Storage.d.ts +0 -23
  471. package/dist/storage/Storage.d.ts.map +0 -1
  472. package/dist/storage/Storage.js +0 -9
  473. package/dist/storage/Storage.js.map +0 -1
  474. package/dist/storage/index.d.ts.map +0 -1
  475. package/dist/themeLibrary-CEo2D4b6.d.ts +0 -44
  476. package/dist/timing/index.d.ts.map +0 -1
  477. package/dist/timing/narrationTiming.d.ts +0 -54
  478. package/dist/timing/narrationTiming.d.ts.map +0 -1
  479. package/dist/timing/narrationTiming.js +0 -190
  480. package/dist/timing/narrationTiming.js.map +0 -1
  481. package/dist/timing/readingTime.d.ts +0 -54
  482. package/dist/timing/readingTime.d.ts.map +0 -1
  483. package/dist/timing/readingTime.js +0 -49
  484. package/dist/timing/readingTime.js.map +0 -1
  485. package/dist/transform/applyTransform.d.ts +0 -22
  486. package/dist/transform/applyTransform.d.ts.map +0 -1
  487. package/dist/transform/applyTransform.js +0 -68
  488. package/dist/transform/applyTransform.js.map +0 -1
  489. package/dist/transform/blockAnalyzer.d.ts +0 -48
  490. package/dist/transform/blockAnalyzer.d.ts.map +0 -1
  491. package/dist/transform/blockAnalyzer.js +0 -135
  492. package/dist/transform/blockAnalyzer.js.map +0 -1
  493. package/dist/transform/index.d.ts.map +0 -1
  494. package/dist/transform/registry.d.ts +0 -19
  495. package/dist/transform/registry.d.ts.map +0 -1
  496. package/dist/transform/registry.js +0 -41
  497. package/dist/transform/registry.js.map +0 -1
  498. package/dist/transform/styles/dataDriven.d.ts +0 -4
  499. package/dist/transform/styles/dataDriven.d.ts.map +0 -1
  500. package/dist/transform/styles/dataDriven.js +0 -15
  501. package/dist/transform/styles/dataDriven.js.map +0 -1
  502. package/dist/transform/styles/documentary.d.ts +0 -4
  503. package/dist/transform/styles/documentary.d.ts.map +0 -1
  504. package/dist/transform/styles/documentary.js +0 -15
  505. package/dist/transform/styles/documentary.js.map +0 -1
  506. package/dist/transform/styles/index.d.ts +0 -6
  507. package/dist/transform/styles/index.d.ts.map +0 -1
  508. package/dist/transform/styles/index.js +0 -6
  509. package/dist/transform/styles/index.js.map +0 -1
  510. package/dist/transform/styles/magazine.d.ts +0 -4
  511. package/dist/transform/styles/magazine.d.ts.map +0 -1
  512. package/dist/transform/styles/magazine.js +0 -15
  513. package/dist/transform/styles/magazine.js.map +0 -1
  514. package/dist/transform/styles/minimal.d.ts +0 -4
  515. package/dist/transform/styles/minimal.d.ts.map +0 -1
  516. package/dist/transform/styles/minimal.js +0 -15
  517. package/dist/transform/styles/minimal.js.map +0 -1
  518. package/dist/transform/styles/narrative.d.ts +0 -4
  519. package/dist/transform/styles/narrative.d.ts.map +0 -1
  520. package/dist/transform/styles/narrative.js +0 -15
  521. package/dist/transform/styles/narrative.js.map +0 -1
  522. package/dist/transform/templateSelector.d.ts +0 -30
  523. package/dist/transform/templateSelector.d.ts.map +0 -1
  524. package/dist/transform/templateSelector.js +0 -218
  525. package/dist/transform/templateSelector.js.map +0 -1
  526. package/dist/transform/timingAllocator.d.ts +0 -21
  527. package/dist/transform/timingAllocator.d.ts.map +0 -1
  528. package/dist/transform/timingAllocator.js +0 -111
  529. package/dist/transform/timingAllocator.js.map +0 -1
  530. package/dist/transform/types.d.ts +0 -86
  531. package/dist/transform/types.d.ts.map +0 -1
  532. package/dist/transform/types.js +0 -9
  533. package/dist/transform/types.js.map +0 -1
@@ -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
+ }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=animationUtils.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"animationUtils.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/animationUtils.test.ts"],"names":[],"mappings":""}
@@ -1,60 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { getAnimationStyle, getDefaultAnimationDuration, getTransitionClass, getAnimationProgress, } from '../doc/utils/animationUtils';
3
- describe('getAnimationStyle', () => {
4
- it('returns empty for undefined animation', () => {
5
- const result = getAnimationStyle(undefined);
6
- expect(result.className).toBe('');
7
- expect(result.style).toEqual({});
8
- });
9
- it('returns empty for type "none"', () => {
10
- const result = getAnimationStyle({ type: 'none' });
11
- expect(result.className).toBe('');
12
- });
13
- it('returns correct class for fadeIn', () => {
14
- const result = getAnimationStyle({ type: 'fadeIn' });
15
- expect(result.className).toBe('anim-fadeIn');
16
- });
17
- it('returns correct class for slowZoom with pan', () => {
18
- const result = getAnimationStyle({ type: 'slowZoom', panDirection: 'left' });
19
- expect(result.className).toBe('anim-slowZoom-panLeft');
20
- });
21
- it('includes CSS custom properties for duration and delay', () => {
22
- const result = getAnimationStyle({ type: 'fadeIn', duration: 2, delay: 0.5 });
23
- expect(result.style['--anim-duration']).toBe('2s');
24
- expect(result.style['--anim-delay']).toBe('0.5s');
25
- });
26
- });
27
- describe('getDefaultAnimationDuration', () => {
28
- it('returns 8 for slowZoom', () => {
29
- expect(getDefaultAnimationDuration('slowZoom')).toBe(8);
30
- });
31
- it('returns 1 for fadeIn', () => {
32
- expect(getDefaultAnimationDuration('fadeIn')).toBe(1);
33
- });
34
- it('returns 0.5 for zoomIn', () => {
35
- expect(getDefaultAnimationDuration('zoomIn')).toBe(0.5);
36
- });
37
- });
38
- describe('getTransitionClass', () => {
39
- it('returns enter class', () => {
40
- expect(getTransitionClass('fade', true)).toBe('transition-fade-enter');
41
- });
42
- it('returns exit class', () => {
43
- expect(getTransitionClass('dissolve', false)).toBe('transition-dissolve-exit');
44
- });
45
- });
46
- describe('getAnimationProgress', () => {
47
- it('returns 0 before delay', () => {
48
- const progress = getAnimationProgress({ type: 'fadeIn', delay: 1, duration: 2 }, 0.5, 5);
49
- expect(progress).toBe(0);
50
- });
51
- it('returns 1 after completion', () => {
52
- const progress = getAnimationProgress({ type: 'fadeIn', delay: 0, duration: 2 }, 3, 5);
53
- expect(progress).toBe(1);
54
- });
55
- it('returns 0.5 at midpoint', () => {
56
- const progress = getAnimationProgress({ type: 'fadeIn', delay: 0, duration: 2 }, 1, 5);
57
- expect(progress).toBeCloseTo(0.5);
58
- });
59
- });
60
- //# sourceMappingURL=animationUtils.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"animationUtils.test.js","sourceRoot":"","sources":["../../src/__tests__/animationUtils.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=contentContainer.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"contentContainer.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/contentContainer.test.ts"],"names":[],"mappings":""}