@bendyline/squisq 1.4.0 → 1.5.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 (782) hide show
  1. package/dist/{Doc-BeSeH2iX.d.ts → Doc-BsMkmzH8.d.ts} +838 -268
  2. package/dist/{ImageEditDoc-BTIvw0oq.d.ts → ImageEditDoc-DvoeHMP9.d.ts} +11 -4
  3. package/dist/{chunk-ZTX4PFFT.js → chunk-2OIBZYKP.js} +75 -2
  4. package/dist/chunk-2OIBZYKP.js.map +1 -0
  5. package/dist/chunk-2UQOHYE2.js +45 -0
  6. package/dist/chunk-2UQOHYE2.js.map +1 -0
  7. package/dist/{chunk-B4EEON3N.js → chunk-4AKUQPEE.js} +536 -103
  8. package/dist/chunk-4AKUQPEE.js.map +1 -0
  9. package/dist/chunk-4ZFRZBU2.js +6582 -0
  10. package/dist/chunk-4ZFRZBU2.js.map +1 -0
  11. package/dist/{chunk-57CVQCFX.js → chunk-7MQGNR76.js} +79 -3
  12. package/dist/chunk-7MQGNR76.js.map +1 -0
  13. package/dist/{chunk-5WFRKURX.js → chunk-DLXZMS5K.js} +4 -2
  14. package/dist/chunk-DLXZMS5K.js.map +1 -0
  15. package/dist/{chunk-MYIH7FWD.js → chunk-FBKP5CAO.js} +1 -1
  16. package/dist/chunk-FBKP5CAO.js.map +1 -0
  17. package/dist/chunk-KZNXZ5SM.js +333 -0
  18. package/dist/chunk-KZNXZ5SM.js.map +1 -0
  19. package/dist/{chunk-WMOI7FN3.js → chunk-LRCV7N7F.js} +12 -2
  20. package/dist/{chunk-WMOI7FN3.js.map → chunk-LRCV7N7F.js.map} +1 -1
  21. package/dist/{chunk-3K5OG6KI.js → chunk-OH43RPTP.js} +403 -187
  22. package/dist/chunk-OH43RPTP.js.map +1 -0
  23. package/dist/{chunk-H3AXU4MJ.js → chunk-OKJOQXK4.js} +149 -2
  24. package/dist/chunk-OKJOQXK4.js.map +1 -0
  25. package/dist/chunk-PGGGKYWG.js +1 -0
  26. package/dist/chunk-PGGGKYWG.js.map +1 -0
  27. package/dist/{chunk-7UDSRZKG.js → chunk-Q3ROPT5H.js} +35 -14
  28. package/dist/chunk-Q3ROPT5H.js.map +1 -0
  29. package/dist/chunk-QE7TWGVT.js +178 -0
  30. package/dist/chunk-QE7TWGVT.js.map +1 -0
  31. package/dist/chunk-RUDYOTA6.js +345 -0
  32. package/dist/chunk-RUDYOTA6.js.map +1 -0
  33. package/dist/chunk-TVSGLUID.js +596 -0
  34. package/dist/chunk-TVSGLUID.js.map +1 -0
  35. package/dist/chunk-ZLQKNOZQ.js +1 -0
  36. package/dist/chunk-ZLQKNOZQ.js.map +1 -0
  37. package/dist/doc/index.d.ts +5 -10
  38. package/dist/doc/index.js +263 -7
  39. package/dist/doc/index.js.map +1 -1
  40. package/dist/generate/index.d.ts +106 -7
  41. package/dist/generate/index.js +16 -3
  42. package/dist/generate/index.js.map +1 -1
  43. package/dist/icons/index.d.ts +62 -10
  44. package/dist/icons/index.js +29 -9
  45. package/dist/icons/index.js.map +1 -1
  46. package/dist/icons/inlineIconMarker.d.ts +1 -0
  47. package/dist/icons/inlineIconMarker.js +15 -0
  48. package/dist/icons/inlineIconMarker.js.map +1 -0
  49. package/dist/imageEdit/index.d.ts +219 -11
  50. package/dist/imageEdit/index.js +56 -21
  51. package/dist/imageEdit/index.js.map +1 -1
  52. package/dist/index.d.ts +24 -13
  53. package/dist/index.js +680 -12
  54. package/dist/index.js.map +1 -1
  55. package/dist/inlineIconMarker-CiE8Hlvz.d.ts +59 -0
  56. package/dist/jsonForm/index.d.ts +189 -12
  57. package/dist/jsonForm/index.js +26 -11
  58. package/dist/jsonForm/index.js.map +1 -1
  59. package/dist/markdown/index.d.ts +474 -19
  60. package/dist/markdown/index.js +72 -33
  61. package/dist/markdown/index.js.map +1 -1
  62. package/dist/random/index.d.ts +51 -2
  63. package/dist/random/index.js +9 -1
  64. package/dist/random/index.js.map +1 -1
  65. package/dist/recommend/index.d.ts +39 -13
  66. package/dist/recommend/index.js +10 -14
  67. package/dist/recommend/index.js.map +1 -1
  68. package/dist/schemas/index.d.ts +208 -15
  69. package/dist/schemas/index.js +150 -11
  70. package/dist/schemas/index.js.map +1 -1
  71. package/dist/spatial/index.d.ts +116 -3
  72. package/dist/spatial/index.js +24 -2
  73. package/dist/spatial/index.js.map +1 -1
  74. package/dist/storage/index.d.ts +159 -10
  75. package/dist/storage/index.js +20 -6
  76. package/dist/storage/index.js.map +1 -1
  77. package/dist/story/index.d.ts +906 -40
  78. package/dist/story/index.js +124 -6
  79. package/dist/{themeLibrary-BHjJ0Qx6.d.ts → themeLibrary-DQQKuRMx.d.ts} +1 -1
  80. package/dist/timing/index.d.ts +109 -4
  81. package/dist/timing/index.js +23 -2
  82. package/dist/timing/index.js.map +1 -1
  83. package/dist/transform/index.d.ts +213 -6
  84. package/dist/transform/index.js +26 -3
  85. package/dist/transform/index.js.map +1 -1
  86. package/dist/{types-BdZkdJ3z.d.ts → types-DlAZ7MW4.d.ts} +115 -1
  87. package/dist/versions/index.d.ts +123 -24
  88. package/dist/versions/index.js +34 -27
  89. package/dist/versions/index.js.map +1 -1
  90. package/package.json +6 -1
  91. package/src/__tests__/animationUtils.test.ts +40 -0
  92. package/src/__tests__/annotationCoercion.test.ts +243 -0
  93. package/src/__tests__/applyRenderStyle.test.ts +146 -0
  94. package/src/__tests__/atmosphereLayers.test.ts +108 -0
  95. package/src/__tests__/attrTokens.test.ts +162 -0
  96. package/src/__tests__/customTemplateSample.test.ts +83 -0
  97. package/src/__tests__/customTemplatesFrontmatter.test.ts +205 -0
  98. package/src/__tests__/customThemesFrontmatter.test.ts +118 -0
  99. package/src/__tests__/diagramBlock.test.ts +122 -0
  100. package/src/__tests__/diagramLayout.test.ts +134 -0
  101. package/src/__tests__/drawing.test.ts +109 -0
  102. package/src/__tests__/drawingBlock.test.ts +124 -0
  103. package/src/__tests__/drawingLayout.test.ts +171 -0
  104. package/src/__tests__/geohash.test.ts +6 -5
  105. package/src/__tests__/getLayers.test.ts +6 -2
  106. package/src/__tests__/getLayersFallback.test.ts +103 -0
  107. package/src/__tests__/imageEditExportSvg.test.ts +70 -0
  108. package/src/__tests__/imageEditVersions.test.ts +72 -0
  109. package/src/__tests__/inlineIconMarker.test.ts +36 -0
  110. package/src/__tests__/layoutBlock.test.ts +83 -0
  111. package/src/__tests__/layoutLayout.test.ts +169 -0
  112. package/src/__tests__/markdown.test.ts +23 -0
  113. package/src/__tests__/markdownSanitize.test.ts +64 -0
  114. package/src/__tests__/markdownToDoc.test.ts +223 -2
  115. package/src/__tests__/mediaAnnotations.test.ts +64 -0
  116. package/src/__tests__/mediaSchedule.test.ts +118 -0
  117. package/src/__tests__/pandocAttrParse.test.ts +187 -0
  118. package/src/__tests__/resolveDocTheme.test.ts +55 -0
  119. package/src/__tests__/rootExports.test.ts +43 -0
  120. package/src/__tests__/shapeGeometry.test.ts +89 -0
  121. package/src/__tests__/shapeVocabulary.test.ts +133 -0
  122. package/src/__tests__/structuredData.test.ts +179 -0
  123. package/src/__tests__/templateAnnotationParse.test.ts +108 -0
  124. package/src/__tests__/templateMetadata.test.ts +21 -0
  125. package/src/__tests__/templates.test.ts +145 -4
  126. package/src/__tests__/themeCompile.test.ts +42 -0
  127. package/src/__tests__/themeValidator.test.ts +6 -0
  128. package/src/__tests__/transformV2.test.ts +137 -0
  129. package/src/__tests__/transitionNormalize.test.ts +61 -0
  130. package/src/__tests__/validateDoc.test.ts +100 -0
  131. package/src/doc/customTemplatesFrontmatter.ts +308 -0
  132. package/src/doc/customThemesFrontmatter.ts +90 -0
  133. package/src/doc/docToMarkdown.ts +73 -4
  134. package/src/doc/getLayers.ts +40 -17
  135. package/src/doc/index.ts +35 -1
  136. package/src/doc/markdownToDoc.ts +333 -12
  137. package/src/doc/mediaAnnotations.ts +118 -0
  138. package/src/doc/resolveDocTheme.ts +55 -0
  139. package/src/doc/structuredData.ts +230 -0
  140. package/src/doc/templateInputs.ts +240 -0
  141. package/src/doc/templates/__tests__/customTemplate.test.ts +151 -0
  142. package/src/doc/templates/__tests__/customTemplateRegistry.test.ts +110 -0
  143. package/src/doc/templates/accentImage.ts +30 -6
  144. package/src/doc/templates/captionUtils.ts +23 -0
  145. package/src/doc/templates/comparisonBar.ts +26 -18
  146. package/src/doc/templates/coverBlock.ts +7 -4
  147. package/src/doc/templates/customTemplate.ts +45 -0
  148. package/src/doc/templates/dataTable.ts +37 -19
  149. package/src/doc/templates/dateEvent.ts +41 -20
  150. package/src/doc/templates/definitionCard.ts +26 -18
  151. package/src/doc/templates/diagramBlock.ts +204 -0
  152. package/src/doc/templates/diagramLayout.ts +159 -0
  153. package/src/doc/templates/drawingBlock.ts +325 -0
  154. package/src/doc/templates/drawingLayout.ts +539 -0
  155. package/src/doc/templates/factCard.ts +51 -25
  156. package/src/doc/templates/fallbackBlock.ts +123 -0
  157. package/src/doc/templates/featureBlock.ts +20 -13
  158. package/src/doc/templates/fullBleedQuote.ts +18 -8
  159. package/src/doc/templates/imageWithCaption.ts +22 -9
  160. package/src/doc/templates/index.ts +215 -46
  161. package/src/doc/templates/layoutBlock.ts +43 -0
  162. package/src/doc/templates/layoutLayout.ts +243 -0
  163. package/src/doc/templates/listBlock.ts +56 -30
  164. package/src/doc/templates/mapBlock.ts +15 -12
  165. package/src/doc/templates/metadata.ts +120 -0
  166. package/src/doc/templates/persistentLayers.ts +129 -11
  167. package/src/doc/templates/photoGrid.ts +23 -12
  168. package/src/doc/templates/pullQuote.ts +30 -12
  169. package/src/doc/templates/quoteBlock.ts +54 -29
  170. package/src/doc/templates/sectionHeader.ts +25 -11
  171. package/src/doc/templates/statHighlight.ts +39 -22
  172. package/src/doc/templates/titleBlock.ts +59 -21
  173. package/src/doc/templates/tokens/__tests__/resolveTokens.test.ts +221 -0
  174. package/src/doc/templates/tokens/resolveTokens.ts +0 -0
  175. package/src/doc/templates/twoColumn.ts +48 -30
  176. package/src/doc/templates/videoPullQuote.ts +22 -12
  177. package/src/doc/templates/videoWithCaption.ts +13 -8
  178. package/src/doc/utils/animationUtils.ts +267 -3
  179. package/src/doc/utils/applyRenderStyle.ts +113 -0
  180. package/src/doc/utils/imageTreatment.ts +70 -0
  181. package/src/doc/utils/shapeGeometry.ts +464 -0
  182. package/src/doc/utils/themeUtils.ts +75 -1
  183. package/src/doc/validate.ts +476 -0
  184. package/src/generate/slideshowGenerator.ts +7 -0
  185. package/src/icons/index.ts +8 -0
  186. package/src/icons/inlineIconMarker.ts +73 -0
  187. package/src/imageEdit/export.ts +85 -2
  188. package/src/imageEdit/index.ts +1 -0
  189. package/src/imageEdit/persistence.ts +51 -0
  190. package/src/index.ts +2 -0
  191. package/src/markdown/annotationCoercion.ts +295 -0
  192. package/src/markdown/attrTokens.ts +222 -0
  193. package/src/markdown/convert.ts +229 -26
  194. package/src/markdown/index.ts +36 -0
  195. package/src/markdown/sanitize.ts +298 -0
  196. package/src/markdown/stringify.ts +84 -3
  197. package/src/markdown/types.ts +66 -0
  198. package/src/markdown/utils.ts +49 -1
  199. package/src/recommend/templates.ts +24 -0
  200. package/src/schemas/BlockTemplates.ts +133 -4
  201. package/src/schemas/CustomTemplates.ts +74 -0
  202. package/src/schemas/Doc.ts +353 -29
  203. package/src/schemas/ImageEditDoc.ts +11 -4
  204. package/src/schemas/Media.ts +169 -0
  205. package/src/schemas/Theme.ts +23 -1
  206. package/src/schemas/Transitions.ts +224 -0
  207. package/src/schemas/colorUtils.ts +33 -0
  208. package/src/schemas/fontStacks.ts +5 -2
  209. package/src/schemas/index.ts +3 -0
  210. package/src/schemas/themeCompile.ts +23 -4
  211. package/src/schemas/themeValidator.ts +49 -11
  212. package/src/schemas/themes/cinematic.json +69 -12
  213. package/src/schemas/themes/documentary.json +58 -11
  214. package/src/schemas/themes/gezellig.json +60 -11
  215. package/src/schemas/themes/magazine.json +54 -9
  216. package/src/schemas/themes/morning-light.json +52 -9
  217. package/src/schemas/themes/standard-dark.json +48 -13
  218. package/src/schemas/themes/standard.json +44 -12
  219. package/src/schemas/themes/tech-dark.json +65 -12
  220. package/src/spatial/Geohash.ts +52 -21
  221. package/src/transform/applyTransform.ts +43 -4
  222. package/src/transform/index.ts +1 -0
  223. package/src/transform/registry.ts +44 -13
  224. package/src/transform/styles/dataDriven.ts +2 -1
  225. package/src/transform/styles/documentary.ts +2 -1
  226. package/src/transform/styles/magazine.ts +3 -1
  227. package/src/transform/styles/minimal.ts +2 -1
  228. package/src/transform/styles/narrative.ts +3 -1
  229. package/src/transform/templateSelector.ts +87 -11
  230. package/src/transform/types.ts +35 -2
  231. package/dist/__tests__/animationUtils.test.d.ts +0 -2
  232. package/dist/__tests__/animationUtils.test.d.ts.map +0 -1
  233. package/dist/__tests__/animationUtils.test.js +0 -60
  234. package/dist/__tests__/animationUtils.test.js.map +0 -1
  235. package/dist/__tests__/colorUtils.test.d.ts +0 -2
  236. package/dist/__tests__/colorUtils.test.d.ts.map +0 -1
  237. package/dist/__tests__/colorUtils.test.js +0 -94
  238. package/dist/__tests__/colorUtils.test.js.map +0 -1
  239. package/dist/__tests__/contentContainer.test.d.ts +0 -2
  240. package/dist/__tests__/contentContainer.test.d.ts.map +0 -1
  241. package/dist/__tests__/contentContainer.test.js +0 -234
  242. package/dist/__tests__/contentContainer.test.js.map +0 -1
  243. package/dist/__tests__/contentExtractor.test.d.ts +0 -2
  244. package/dist/__tests__/contentExtractor.test.d.ts.map +0 -1
  245. package/dist/__tests__/contentExtractor.test.js +0 -151
  246. package/dist/__tests__/contentExtractor.test.js.map +0 -1
  247. package/dist/__tests__/coverBlock.test.d.ts +0 -2
  248. package/dist/__tests__/coverBlock.test.d.ts.map +0 -1
  249. package/dist/__tests__/coverBlock.test.js +0 -197
  250. package/dist/__tests__/coverBlock.test.js.map +0 -1
  251. package/dist/__tests__/dataTable.test.d.ts +0 -2
  252. package/dist/__tests__/dataTable.test.d.ts.map +0 -1
  253. package/dist/__tests__/dataTable.test.js +0 -110
  254. package/dist/__tests__/dataTable.test.js.map +0 -1
  255. package/dist/__tests__/geohash.test.d.ts +0 -2
  256. package/dist/__tests__/geohash.test.d.ts.map +0 -1
  257. package/dist/__tests__/geohash.test.js +0 -87
  258. package/dist/__tests__/geohash.test.js.map +0 -1
  259. package/dist/__tests__/getLayers.test.d.ts +0 -2
  260. package/dist/__tests__/getLayers.test.d.ts.map +0 -1
  261. package/dist/__tests__/getLayers.test.js +0 -191
  262. package/dist/__tests__/getLayers.test.js.map +0 -1
  263. package/dist/__tests__/haversine.test.d.ts +0 -2
  264. package/dist/__tests__/haversine.test.d.ts.map +0 -1
  265. package/dist/__tests__/haversine.test.js +0 -56
  266. package/dist/__tests__/haversine.test.js.map +0 -1
  267. package/dist/__tests__/iconResolve.test.d.ts +0 -2
  268. package/dist/__tests__/iconResolve.test.d.ts.map +0 -1
  269. package/dist/__tests__/iconResolve.test.js +0 -99
  270. package/dist/__tests__/iconResolve.test.js.map +0 -1
  271. package/dist/__tests__/imageEditState.test.d.ts +0 -2
  272. package/dist/__tests__/imageEditState.test.d.ts.map +0 -1
  273. package/dist/__tests__/imageEditState.test.js +0 -61
  274. package/dist/__tests__/imageEditState.test.js.map +0 -1
  275. package/dist/__tests__/imageEditVersions.test.d.ts +0 -2
  276. package/dist/__tests__/imageEditVersions.test.d.ts.map +0 -1
  277. package/dist/__tests__/imageEditVersions.test.js +0 -141
  278. package/dist/__tests__/imageEditVersions.test.js.map +0 -1
  279. package/dist/__tests__/inferDocumentTitle.test.d.ts +0 -2
  280. package/dist/__tests__/inferDocumentTitle.test.d.ts.map +0 -1
  281. package/dist/__tests__/inferDocumentTitle.test.js +0 -42
  282. package/dist/__tests__/inferDocumentTitle.test.js.map +0 -1
  283. package/dist/__tests__/jsonForm.chooseControl.test.d.ts +0 -2
  284. package/dist/__tests__/jsonForm.chooseControl.test.d.ts.map +0 -1
  285. package/dist/__tests__/jsonForm.chooseControl.test.js +0 -74
  286. package/dist/__tests__/jsonForm.chooseControl.test.js.map +0 -1
  287. package/dist/__tests__/jsonForm.evaluateWhen.test.d.ts +0 -2
  288. package/dist/__tests__/jsonForm.evaluateWhen.test.d.ts.map +0 -1
  289. package/dist/__tests__/jsonForm.evaluateWhen.test.js +0 -51
  290. package/dist/__tests__/jsonForm.evaluateWhen.test.js.map +0 -1
  291. package/dist/__tests__/jsonForm.inferSchema.test.d.ts +0 -2
  292. package/dist/__tests__/jsonForm.inferSchema.test.d.ts.map +0 -1
  293. package/dist/__tests__/jsonForm.inferSchema.test.js +0 -23
  294. package/dist/__tests__/jsonForm.inferSchema.test.js.map +0 -1
  295. package/dist/__tests__/jsonForm.pointer.test.d.ts +0 -2
  296. package/dist/__tests__/jsonForm.pointer.test.d.ts.map +0 -1
  297. package/dist/__tests__/jsonForm.pointer.test.js +0 -94
  298. package/dist/__tests__/jsonForm.pointer.test.js.map +0 -1
  299. package/dist/__tests__/localForageAdapter.test.d.ts +0 -8
  300. package/dist/__tests__/localForageAdapter.test.d.ts.map +0 -1
  301. package/dist/__tests__/localForageAdapter.test.js +0 -130
  302. package/dist/__tests__/localForageAdapter.test.js.map +0 -1
  303. package/dist/__tests__/markdown.test.d.ts +0 -2
  304. package/dist/__tests__/markdown.test.d.ts.map +0 -1
  305. package/dist/__tests__/markdown.test.js +0 -715
  306. package/dist/__tests__/markdown.test.js.map +0 -1
  307. package/dist/__tests__/markdownIcons.test.d.ts +0 -2
  308. package/dist/__tests__/markdownIcons.test.d.ts.map +0 -1
  309. package/dist/__tests__/markdownIcons.test.js +0 -93
  310. package/dist/__tests__/markdownIcons.test.js.map +0 -1
  311. package/dist/__tests__/markdownToDoc.test.d.ts +0 -2
  312. package/dist/__tests__/markdownToDoc.test.d.ts.map +0 -1
  313. package/dist/__tests__/markdownToDoc.test.js +0 -458
  314. package/dist/__tests__/markdownToDoc.test.js.map +0 -1
  315. package/dist/__tests__/recommendTemplates.test.d.ts +0 -2
  316. package/dist/__tests__/recommendTemplates.test.d.ts.map +0 -1
  317. package/dist/__tests__/recommendTemplates.test.js +0 -158
  318. package/dist/__tests__/recommendTemplates.test.js.map +0 -1
  319. package/dist/__tests__/scopedContentContainer.test.d.ts +0 -2
  320. package/dist/__tests__/scopedContentContainer.test.d.ts.map +0 -1
  321. package/dist/__tests__/scopedContentContainer.test.js +0 -74
  322. package/dist/__tests__/scopedContentContainer.test.js.map +0 -1
  323. package/dist/__tests__/seededRandom.test.d.ts +0 -2
  324. package/dist/__tests__/seededRandom.test.d.ts.map +0 -1
  325. package/dist/__tests__/seededRandom.test.js +0 -125
  326. package/dist/__tests__/seededRandom.test.js.map +0 -1
  327. package/dist/__tests__/slideshowGenerator.test.d.ts +0 -2
  328. package/dist/__tests__/slideshowGenerator.test.d.ts.map +0 -1
  329. package/dist/__tests__/slideshowGenerator.test.js +0 -114
  330. package/dist/__tests__/slideshowGenerator.test.js.map +0 -1
  331. package/dist/__tests__/storage.test.d.ts +0 -2
  332. package/dist/__tests__/storage.test.d.ts.map +0 -1
  333. package/dist/__tests__/storage.test.js +0 -51
  334. package/dist/__tests__/storage.test.js.map +0 -1
  335. package/dist/__tests__/surface.test.d.ts +0 -2
  336. package/dist/__tests__/surface.test.d.ts.map +0 -1
  337. package/dist/__tests__/surface.test.js +0 -57
  338. package/dist/__tests__/surface.test.js.map +0 -1
  339. package/dist/__tests__/templateAnnotationParse.test.d.ts +0 -2
  340. package/dist/__tests__/templateAnnotationParse.test.d.ts.map +0 -1
  341. package/dist/__tests__/templateAnnotationParse.test.js +0 -42
  342. package/dist/__tests__/templateAnnotationParse.test.js.map +0 -1
  343. package/dist/__tests__/templates.test.d.ts +0 -2
  344. package/dist/__tests__/templates.test.d.ts.map +0 -1
  345. package/dist/__tests__/templates.test.js +0 -298
  346. package/dist/__tests__/templates.test.js.map +0 -1
  347. package/dist/__tests__/themeCompile.test.d.ts +0 -2
  348. package/dist/__tests__/themeCompile.test.d.ts.map +0 -1
  349. package/dist/__tests__/themeCompile.test.js +0 -134
  350. package/dist/__tests__/themeCompile.test.js.map +0 -1
  351. package/dist/__tests__/themeValidator.test.d.ts +0 -2
  352. package/dist/__tests__/themeValidator.test.d.ts.map +0 -1
  353. package/dist/__tests__/themeValidator.test.js +0 -107
  354. package/dist/__tests__/themeValidator.test.js.map +0 -1
  355. package/dist/__tests__/timing.test.d.ts +0 -2
  356. package/dist/__tests__/timing.test.d.ts.map +0 -1
  357. package/dist/__tests__/timing.test.js +0 -131
  358. package/dist/__tests__/timing.test.js.map +0 -1
  359. package/dist/__tests__/versions.test.d.ts +0 -2
  360. package/dist/__tests__/versions.test.d.ts.map +0 -1
  361. package/dist/__tests__/versions.test.js +0 -339
  362. package/dist/__tests__/versions.test.js.map +0 -1
  363. package/dist/chunk-3K5OG6KI.js.map +0 -1
  364. package/dist/chunk-57CVQCFX.js.map +0 -1
  365. package/dist/chunk-5WFRKURX.js.map +0 -1
  366. package/dist/chunk-7UDSRZKG.js.map +0 -1
  367. package/dist/chunk-B4EEON3N.js.map +0 -1
  368. package/dist/chunk-H3AXU4MJ.js.map +0 -1
  369. package/dist/chunk-KSWJR66U.js +0 -3706
  370. package/dist/chunk-KSWJR66U.js.map +0 -1
  371. package/dist/chunk-MYIH7FWD.js.map +0 -1
  372. package/dist/chunk-ZTX4PFFT.js.map +0 -1
  373. package/dist/doc/audioMapping.d.ts +0 -36
  374. package/dist/doc/audioMapping.d.ts.map +0 -1
  375. package/dist/doc/audioMapping.js +0 -350
  376. package/dist/doc/audioMapping.js.map +0 -1
  377. package/dist/doc/docToMarkdown.d.ts +0 -41
  378. package/dist/doc/docToMarkdown.d.ts.map +0 -1
  379. package/dist/doc/docToMarkdown.js +0 -88
  380. package/dist/doc/docToMarkdown.js.map +0 -1
  381. package/dist/doc/getLayers.d.ts +0 -65
  382. package/dist/doc/getLayers.d.ts.map +0 -1
  383. package/dist/doc/getLayers.js +0 -114
  384. package/dist/doc/getLayers.js.map +0 -1
  385. package/dist/doc/index.d.ts.map +0 -1
  386. package/dist/doc/markdownToDoc.d.ts +0 -75
  387. package/dist/doc/markdownToDoc.d.ts.map +0 -1
  388. package/dist/doc/markdownToDoc.js +0 -432
  389. package/dist/doc/markdownToDoc.js.map +0 -1
  390. package/dist/doc/templates/accentImage.d.ts +0 -59
  391. package/dist/doc/templates/accentImage.d.ts.map +0 -1
  392. package/dist/doc/templates/accentImage.js +0 -275
  393. package/dist/doc/templates/accentImage.js.map +0 -1
  394. package/dist/doc/templates/captionUtils.d.ts +0 -20
  395. package/dist/doc/templates/captionUtils.d.ts.map +0 -1
  396. package/dist/doc/templates/captionUtils.js +0 -29
  397. package/dist/doc/templates/captionUtils.js.map +0 -1
  398. package/dist/doc/templates/comparisonBar.d.ts +0 -13
  399. package/dist/doc/templates/comparisonBar.d.ts.map +0 -1
  400. package/dist/doc/templates/comparisonBar.js +0 -145
  401. package/dist/doc/templates/comparisonBar.js.map +0 -1
  402. package/dist/doc/templates/coverBlock.d.ts +0 -51
  403. package/dist/doc/templates/coverBlock.d.ts.map +0 -1
  404. package/dist/doc/templates/coverBlock.js +0 -153
  405. package/dist/doc/templates/coverBlock.js.map +0 -1
  406. package/dist/doc/templates/dataTable.d.ts +0 -14
  407. package/dist/doc/templates/dataTable.d.ts.map +0 -1
  408. package/dist/doc/templates/dataTable.js +0 -73
  409. package/dist/doc/templates/dataTable.js.map +0 -1
  410. package/dist/doc/templates/dateEvent.d.ts +0 -15
  411. package/dist/doc/templates/dateEvent.d.ts.map +0 -1
  412. package/dist/doc/templates/dateEvent.js +0 -114
  413. package/dist/doc/templates/dateEvent.js.map +0 -1
  414. package/dist/doc/templates/definitionCard.d.ts +0 -13
  415. package/dist/doc/templates/definitionCard.d.ts.map +0 -1
  416. package/dist/doc/templates/definitionCard.js +0 -117
  417. package/dist/doc/templates/definitionCard.js.map +0 -1
  418. package/dist/doc/templates/factCard.d.ts +0 -15
  419. package/dist/doc/templates/factCard.d.ts.map +0 -1
  420. package/dist/doc/templates/factCard.js +0 -104
  421. package/dist/doc/templates/factCard.js.map +0 -1
  422. package/dist/doc/templates/featureBlock.d.ts +0 -18
  423. package/dist/doc/templates/featureBlock.d.ts.map +0 -1
  424. package/dist/doc/templates/featureBlock.js +0 -180
  425. package/dist/doc/templates/featureBlock.js.map +0 -1
  426. package/dist/doc/templates/fullBleedQuote.d.ts +0 -25
  427. package/dist/doc/templates/fullBleedQuote.d.ts.map +0 -1
  428. package/dist/doc/templates/fullBleedQuote.js +0 -67
  429. package/dist/doc/templates/fullBleedQuote.js.map +0 -1
  430. package/dist/doc/templates/imageWithCaption.d.ts +0 -13
  431. package/dist/doc/templates/imageWithCaption.d.ts.map +0 -1
  432. package/dist/doc/templates/imageWithCaption.js +0 -146
  433. package/dist/doc/templates/imageWithCaption.js.map +0 -1
  434. package/dist/doc/templates/index.d.ts +0 -129
  435. package/dist/doc/templates/index.d.ts.map +0 -1
  436. package/dist/doc/templates/index.js +0 -478
  437. package/dist/doc/templates/index.js.map +0 -1
  438. package/dist/doc/templates/listBlock.d.ts +0 -13
  439. package/dist/doc/templates/listBlock.d.ts.map +0 -1
  440. package/dist/doc/templates/listBlock.js +0 -109
  441. package/dist/doc/templates/listBlock.js.map +0 -1
  442. package/dist/doc/templates/mapBlock.d.ts +0 -17
  443. package/dist/doc/templates/mapBlock.d.ts.map +0 -1
  444. package/dist/doc/templates/mapBlock.js +0 -115
  445. package/dist/doc/templates/mapBlock.js.map +0 -1
  446. package/dist/doc/templates/persistentLayers.d.ts +0 -39
  447. package/dist/doc/templates/persistentLayers.d.ts.map +0 -1
  448. package/dist/doc/templates/persistentLayers.js +0 -447
  449. package/dist/doc/templates/persistentLayers.js.map +0 -1
  450. package/dist/doc/templates/photoGrid.d.ts +0 -20
  451. package/dist/doc/templates/photoGrid.d.ts.map +0 -1
  452. package/dist/doc/templates/photoGrid.js +0 -175
  453. package/dist/doc/templates/photoGrid.js.map +0 -1
  454. package/dist/doc/templates/pullQuote.d.ts +0 -13
  455. package/dist/doc/templates/pullQuote.d.ts.map +0 -1
  456. package/dist/doc/templates/pullQuote.js +0 -113
  457. package/dist/doc/templates/pullQuote.js.map +0 -1
  458. package/dist/doc/templates/quoteBlock.d.ts +0 -15
  459. package/dist/doc/templates/quoteBlock.d.ts.map +0 -1
  460. package/dist/doc/templates/quoteBlock.js +0 -101
  461. package/dist/doc/templates/quoteBlock.js.map +0 -1
  462. package/dist/doc/templates/sectionHeader.d.ts +0 -14
  463. package/dist/doc/templates/sectionHeader.d.ts.map +0 -1
  464. package/dist/doc/templates/sectionHeader.js +0 -97
  465. package/dist/doc/templates/sectionHeader.js.map +0 -1
  466. package/dist/doc/templates/statHighlight.d.ts +0 -27
  467. package/dist/doc/templates/statHighlight.d.ts.map +0 -1
  468. package/dist/doc/templates/statHighlight.js +0 -114
  469. package/dist/doc/templates/statHighlight.js.map +0 -1
  470. package/dist/doc/templates/titleBlock.d.ts +0 -24
  471. package/dist/doc/templates/titleBlock.d.ts.map +0 -1
  472. package/dist/doc/templates/titleBlock.js +0 -103
  473. package/dist/doc/templates/titleBlock.js.map +0 -1
  474. package/dist/doc/templates/twoColumn.d.ts +0 -15
  475. package/dist/doc/templates/twoColumn.d.ts.map +0 -1
  476. package/dist/doc/templates/twoColumn.js +0 -225
  477. package/dist/doc/templates/twoColumn.js.map +0 -1
  478. package/dist/doc/templates/videoPullQuote.d.ts +0 -20
  479. package/dist/doc/templates/videoPullQuote.d.ts.map +0 -1
  480. package/dist/doc/templates/videoPullQuote.js +0 -122
  481. package/dist/doc/templates/videoPullQuote.js.map +0 -1
  482. package/dist/doc/templates/videoWithCaption.d.ts +0 -20
  483. package/dist/doc/templates/videoWithCaption.d.ts.map +0 -1
  484. package/dist/doc/templates/videoWithCaption.js +0 -107
  485. package/dist/doc/templates/videoWithCaption.js.map +0 -1
  486. package/dist/doc/utils/animationUtils.d.ts +0 -34
  487. package/dist/doc/utils/animationUtils.d.ts.map +0 -1
  488. package/dist/doc/utils/animationUtils.js +0 -110
  489. package/dist/doc/utils/animationUtils.js.map +0 -1
  490. package/dist/doc/utils/themeUtils.d.ts +0 -64
  491. package/dist/doc/utils/themeUtils.d.ts.map +0 -1
  492. package/dist/doc/utils/themeUtils.js +0 -136
  493. package/dist/doc/utils/themeUtils.js.map +0 -1
  494. package/dist/generate/contentExtractor.d.ts +0 -112
  495. package/dist/generate/contentExtractor.d.ts.map +0 -1
  496. package/dist/generate/contentExtractor.js +0 -638
  497. package/dist/generate/contentExtractor.js.map +0 -1
  498. package/dist/generate/index.d.ts.map +0 -1
  499. package/dist/generate/slideshowGenerator.d.ts +0 -72
  500. package/dist/generate/slideshowGenerator.d.ts.map +0 -1
  501. package/dist/generate/slideshowGenerator.js +0 -159
  502. package/dist/generate/slideshowGenerator.js.map +0 -1
  503. package/dist/generate/templateMapper.d.ts +0 -23
  504. package/dist/generate/templateMapper.d.ts.map +0 -1
  505. package/dist/generate/templateMapper.js +0 -114
  506. package/dist/generate/templateMapper.js.map +0 -1
  507. package/dist/icons/iconData.d.ts +0 -26
  508. package/dist/icons/iconData.d.ts.map +0 -1
  509. package/dist/icons/iconData.js +0 -12
  510. package/dist/icons/iconData.js.map +0 -1
  511. package/dist/icons/index.d.ts.map +0 -1
  512. package/dist/icons/resolve.d.ts +0 -61
  513. package/dist/icons/resolve.d.ts.map +0 -1
  514. package/dist/icons/resolve.js +0 -130
  515. package/dist/icons/resolve.js.map +0 -1
  516. package/dist/imageEdit/ImageEditVersionManager.d.ts +0 -31
  517. package/dist/imageEdit/ImageEditVersionManager.d.ts.map +0 -1
  518. package/dist/imageEdit/ImageEditVersionManager.js +0 -39
  519. package/dist/imageEdit/ImageEditVersionManager.js.map +0 -1
  520. package/dist/imageEdit/export.d.ts +0 -33
  521. package/dist/imageEdit/export.d.ts.map +0 -1
  522. package/dist/imageEdit/export.js +0 -253
  523. package/dist/imageEdit/export.js.map +0 -1
  524. package/dist/imageEdit/index.d.ts.map +0 -1
  525. package/dist/imageEdit/persistence.d.ts +0 -15
  526. package/dist/imageEdit/persistence.d.ts.map +0 -1
  527. package/dist/imageEdit/persistence.js +0 -49
  528. package/dist/imageEdit/persistence.js.map +0 -1
  529. package/dist/imageEdit/state.d.ts +0 -42
  530. package/dist/imageEdit/state.d.ts.map +0 -1
  531. package/dist/imageEdit/state.js +0 -98
  532. package/dist/imageEdit/state.js.map +0 -1
  533. package/dist/imageEdit/versionPaths.d.ts +0 -27
  534. package/dist/imageEdit/versionPaths.d.ts.map +0 -1
  535. package/dist/imageEdit/versionPaths.js +0 -57
  536. package/dist/imageEdit/versionPaths.js.map +0 -1
  537. package/dist/imageEdit/versions.d.ts +0 -67
  538. package/dist/imageEdit/versions.d.ts.map +0 -1
  539. package/dist/imageEdit/versions.js +0 -161
  540. package/dist/imageEdit/versions.js.map +0 -1
  541. package/dist/index.d.ts.map +0 -1
  542. package/dist/jsonForm/chooseControl.d.ts +0 -20
  543. package/dist/jsonForm/chooseControl.d.ts.map +0 -1
  544. package/dist/jsonForm/chooseControl.js +0 -82
  545. package/dist/jsonForm/chooseControl.js.map +0 -1
  546. package/dist/jsonForm/evaluateWhen.d.ts +0 -12
  547. package/dist/jsonForm/evaluateWhen.d.ts.map +0 -1
  548. package/dist/jsonForm/evaluateWhen.js +0 -65
  549. package/dist/jsonForm/evaluateWhen.js.map +0 -1
  550. package/dist/jsonForm/index.d.ts.map +0 -1
  551. package/dist/jsonForm/inferSchema.d.ts +0 -12
  552. package/dist/jsonForm/inferSchema.d.ts.map +0 -1
  553. package/dist/jsonForm/inferSchema.js +0 -15
  554. package/dist/jsonForm/inferSchema.js.map +0 -1
  555. package/dist/jsonForm/pointer.d.ts +0 -26
  556. package/dist/jsonForm/pointer.d.ts.map +0 -1
  557. package/dist/jsonForm/pointer.js +0 -102
  558. package/dist/jsonForm/pointer.js.map +0 -1
  559. package/dist/jsonForm/types.d.ts +0 -120
  560. package/dist/jsonForm/types.d.ts.map +0 -1
  561. package/dist/jsonForm/types.js +0 -10
  562. package/dist/jsonForm/types.js.map +0 -1
  563. package/dist/markdown/convert.d.ts +0 -81
  564. package/dist/markdown/convert.d.ts.map +0 -1
  565. package/dist/markdown/convert.js +0 -975
  566. package/dist/markdown/convert.js.map +0 -1
  567. package/dist/markdown/htmlParse.d.ts +0 -26
  568. package/dist/markdown/htmlParse.d.ts.map +0 -1
  569. package/dist/markdown/htmlParse.js +0 -195
  570. package/dist/markdown/htmlParse.js.map +0 -1
  571. package/dist/markdown/index.d.ts.map +0 -1
  572. package/dist/markdown/parse.d.ts +0 -27
  573. package/dist/markdown/parse.d.ts.map +0 -1
  574. package/dist/markdown/parse.js +0 -90
  575. package/dist/markdown/parse.js.map +0 -1
  576. package/dist/markdown/stringify.d.ts +0 -32
  577. package/dist/markdown/stringify.d.ts.map +0 -1
  578. package/dist/markdown/stringify.js +0 -108
  579. package/dist/markdown/stringify.js.map +0 -1
  580. package/dist/markdown/types.d.ts +0 -531
  581. package/dist/markdown/types.d.ts.map +0 -1
  582. package/dist/markdown/types.js +0 -17
  583. package/dist/markdown/types.js.map +0 -1
  584. package/dist/markdown/utils.d.ts +0 -118
  585. package/dist/markdown/utils.d.ts.map +0 -1
  586. package/dist/markdown/utils.js +0 -308
  587. package/dist/markdown/utils.js.map +0 -1
  588. package/dist/random/SeededRandom.d.ts +0 -50
  589. package/dist/random/SeededRandom.d.ts.map +0 -1
  590. package/dist/random/SeededRandom.js +0 -115
  591. package/dist/random/SeededRandom.js.map +0 -1
  592. package/dist/random/index.d.ts.map +0 -1
  593. package/dist/recommend/index.d.ts.map +0 -1
  594. package/dist/recommend/templates.d.ts +0 -39
  595. package/dist/recommend/templates.d.ts.map +0 -1
  596. package/dist/recommend/templates.js +0 -235
  597. package/dist/recommend/templates.js.map +0 -1
  598. package/dist/schemas/BlockTemplates.d.ts +0 -638
  599. package/dist/schemas/BlockTemplates.d.ts.map +0 -1
  600. package/dist/schemas/BlockTemplates.js +0 -72
  601. package/dist/schemas/BlockTemplates.js.map +0 -1
  602. package/dist/schemas/Doc.d.ts +0 -503
  603. package/dist/schemas/Doc.d.ts.map +0 -1
  604. package/dist/schemas/Doc.js +0 -90
  605. package/dist/schemas/Doc.js.map +0 -1
  606. package/dist/schemas/ImageEditDoc.d.ts +0 -81
  607. package/dist/schemas/ImageEditDoc.d.ts.map +0 -1
  608. package/dist/schemas/ImageEditDoc.js +0 -20
  609. package/dist/schemas/ImageEditDoc.js.map +0 -1
  610. package/dist/schemas/LayoutStrategy.d.ts +0 -84
  611. package/dist/schemas/LayoutStrategy.d.ts.map +0 -1
  612. package/dist/schemas/LayoutStrategy.js +0 -123
  613. package/dist/schemas/LayoutStrategy.js.map +0 -1
  614. package/dist/schemas/MediaProvider.d.ts +0 -65
  615. package/dist/schemas/MediaProvider.d.ts.map +0 -1
  616. package/dist/schemas/MediaProvider.js +0 -13
  617. package/dist/schemas/MediaProvider.js.map +0 -1
  618. package/dist/schemas/Theme.d.ts +0 -233
  619. package/dist/schemas/Theme.d.ts.map +0 -1
  620. package/dist/schemas/Theme.js +0 -129
  621. package/dist/schemas/Theme.js.map +0 -1
  622. package/dist/schemas/Types.d.ts +0 -14
  623. package/dist/schemas/Types.d.ts.map +0 -1
  624. package/dist/schemas/Types.js +0 -5
  625. package/dist/schemas/Types.js.map +0 -1
  626. package/dist/schemas/Viewport.d.ts +0 -74
  627. package/dist/schemas/Viewport.d.ts.map +0 -1
  628. package/dist/schemas/Viewport.js +0 -63
  629. package/dist/schemas/Viewport.js.map +0 -1
  630. package/dist/schemas/colorUtils.d.ts +0 -51
  631. package/dist/schemas/colorUtils.d.ts.map +0 -1
  632. package/dist/schemas/colorUtils.js +0 -154
  633. package/dist/schemas/colorUtils.js.map +0 -1
  634. package/dist/schemas/fontStacks.d.ts +0 -57
  635. package/dist/schemas/fontStacks.d.ts.map +0 -1
  636. package/dist/schemas/fontStacks.js +0 -227
  637. package/dist/schemas/fontStacks.js.map +0 -1
  638. package/dist/schemas/index.d.ts.map +0 -1
  639. package/dist/schemas/themeCompile.d.ts +0 -45
  640. package/dist/schemas/themeCompile.d.ts.map +0 -1
  641. package/dist/schemas/themeCompile.js +0 -160
  642. package/dist/schemas/themeCompile.js.map +0 -1
  643. package/dist/schemas/themeLibrary.d.ts +0 -37
  644. package/dist/schemas/themeLibrary.d.ts.map +0 -1
  645. package/dist/schemas/themeLibrary.js +0 -49
  646. package/dist/schemas/themeLibrary.js.map +0 -1
  647. package/dist/schemas/themeValidator.d.ts +0 -26
  648. package/dist/schemas/themeValidator.d.ts.map +0 -1
  649. package/dist/schemas/themeValidator.js +0 -352
  650. package/dist/schemas/themeValidator.js.map +0 -1
  651. package/dist/schemas/themes/bold.json +0 -48
  652. package/dist/schemas/themes/cinematic.json +0 -54
  653. package/dist/schemas/themes/documentary.json +0 -49
  654. package/dist/schemas/themes/gezellig.json +0 -44
  655. package/dist/schemas/themes/index.d.ts +0 -26
  656. package/dist/schemas/themes/index.d.ts.map +0 -1
  657. package/dist/schemas/themes/index.js +0 -49
  658. package/dist/schemas/themes/index.js.map +0 -1
  659. package/dist/schemas/themes/magazine.json +0 -44
  660. package/dist/schemas/themes/minimalist.json +0 -45
  661. package/dist/schemas/themes/morning-light.json +0 -42
  662. package/dist/schemas/themes/standard-dark.json +0 -50
  663. package/dist/schemas/themes/standard.json +0 -42
  664. package/dist/schemas/themes/tech-dark.json +0 -48
  665. package/dist/schemas/themes/warm-earth.json +0 -50
  666. package/dist/spatial/Geohash.d.ts +0 -85
  667. package/dist/spatial/Geohash.d.ts.map +0 -1
  668. package/dist/spatial/Geohash.js +0 -142
  669. package/dist/spatial/Geohash.js.map +0 -1
  670. package/dist/spatial/Haversine.d.ts +0 -24
  671. package/dist/spatial/Haversine.d.ts.map +0 -1
  672. package/dist/spatial/Haversine.js +0 -48
  673. package/dist/spatial/Haversine.js.map +0 -1
  674. package/dist/spatial/index.d.ts.map +0 -1
  675. package/dist/storage/ContentContainer.d.ts +0 -87
  676. package/dist/storage/ContentContainer.d.ts.map +0 -1
  677. package/dist/storage/ContentContainer.js +0 -131
  678. package/dist/storage/ContentContainer.js.map +0 -1
  679. package/dist/storage/LocalForageAdapter.d.ts +0 -36
  680. package/dist/storage/LocalForageAdapter.d.ts.map +0 -1
  681. package/dist/storage/LocalForageAdapter.js +0 -82
  682. package/dist/storage/LocalForageAdapter.js.map +0 -1
  683. package/dist/storage/LocalStorageAdapter.d.ts +0 -16
  684. package/dist/storage/LocalStorageAdapter.d.ts.map +0 -1
  685. package/dist/storage/LocalStorageAdapter.js +0 -50
  686. package/dist/storage/LocalStorageAdapter.js.map +0 -1
  687. package/dist/storage/MediaProviderFromContainer.d.ts +0 -21
  688. package/dist/storage/MediaProviderFromContainer.d.ts.map +0 -1
  689. package/dist/storage/MediaProviderFromContainer.js +0 -79
  690. package/dist/storage/MediaProviderFromContainer.js.map +0 -1
  691. package/dist/storage/MemoryStorageAdapter.d.ts +0 -15
  692. package/dist/storage/MemoryStorageAdapter.d.ts.map +0 -1
  693. package/dist/storage/MemoryStorageAdapter.js +0 -34
  694. package/dist/storage/MemoryStorageAdapter.js.map +0 -1
  695. package/dist/storage/ScopedContentContainer.d.ts +0 -44
  696. package/dist/storage/ScopedContentContainer.d.ts.map +0 -1
  697. package/dist/storage/ScopedContentContainer.js +0 -94
  698. package/dist/storage/ScopedContentContainer.js.map +0 -1
  699. package/dist/storage/Storage.d.ts +0 -23
  700. package/dist/storage/Storage.d.ts.map +0 -1
  701. package/dist/storage/Storage.js +0 -9
  702. package/dist/storage/Storage.js.map +0 -1
  703. package/dist/storage/index.d.ts.map +0 -1
  704. package/dist/timing/index.d.ts.map +0 -1
  705. package/dist/timing/narrationTiming.d.ts +0 -54
  706. package/dist/timing/narrationTiming.d.ts.map +0 -1
  707. package/dist/timing/narrationTiming.js +0 -190
  708. package/dist/timing/narrationTiming.js.map +0 -1
  709. package/dist/timing/readingTime.d.ts +0 -54
  710. package/dist/timing/readingTime.d.ts.map +0 -1
  711. package/dist/timing/readingTime.js +0 -49
  712. package/dist/timing/readingTime.js.map +0 -1
  713. package/dist/transform/applyTransform.d.ts +0 -22
  714. package/dist/transform/applyTransform.d.ts.map +0 -1
  715. package/dist/transform/applyTransform.js +0 -68
  716. package/dist/transform/applyTransform.js.map +0 -1
  717. package/dist/transform/blockAnalyzer.d.ts +0 -48
  718. package/dist/transform/blockAnalyzer.d.ts.map +0 -1
  719. package/dist/transform/blockAnalyzer.js +0 -135
  720. package/dist/transform/blockAnalyzer.js.map +0 -1
  721. package/dist/transform/index.d.ts.map +0 -1
  722. package/dist/transform/registry.d.ts +0 -19
  723. package/dist/transform/registry.d.ts.map +0 -1
  724. package/dist/transform/registry.js +0 -41
  725. package/dist/transform/registry.js.map +0 -1
  726. package/dist/transform/styles/dataDriven.d.ts +0 -4
  727. package/dist/transform/styles/dataDriven.d.ts.map +0 -1
  728. package/dist/transform/styles/dataDriven.js +0 -15
  729. package/dist/transform/styles/dataDriven.js.map +0 -1
  730. package/dist/transform/styles/documentary.d.ts +0 -4
  731. package/dist/transform/styles/documentary.d.ts.map +0 -1
  732. package/dist/transform/styles/documentary.js +0 -15
  733. package/dist/transform/styles/documentary.js.map +0 -1
  734. package/dist/transform/styles/index.d.ts +0 -6
  735. package/dist/transform/styles/index.d.ts.map +0 -1
  736. package/dist/transform/styles/index.js +0 -6
  737. package/dist/transform/styles/index.js.map +0 -1
  738. package/dist/transform/styles/magazine.d.ts +0 -4
  739. package/dist/transform/styles/magazine.d.ts.map +0 -1
  740. package/dist/transform/styles/magazine.js +0 -15
  741. package/dist/transform/styles/magazine.js.map +0 -1
  742. package/dist/transform/styles/minimal.d.ts +0 -4
  743. package/dist/transform/styles/minimal.d.ts.map +0 -1
  744. package/dist/transform/styles/minimal.js +0 -15
  745. package/dist/transform/styles/minimal.js.map +0 -1
  746. package/dist/transform/styles/narrative.d.ts +0 -4
  747. package/dist/transform/styles/narrative.d.ts.map +0 -1
  748. package/dist/transform/styles/narrative.js +0 -15
  749. package/dist/transform/styles/narrative.js.map +0 -1
  750. package/dist/transform/templateSelector.d.ts +0 -30
  751. package/dist/transform/templateSelector.d.ts.map +0 -1
  752. package/dist/transform/templateSelector.js +0 -218
  753. package/dist/transform/templateSelector.js.map +0 -1
  754. package/dist/transform/timingAllocator.d.ts +0 -21
  755. package/dist/transform/timingAllocator.d.ts.map +0 -1
  756. package/dist/transform/timingAllocator.js +0 -111
  757. package/dist/transform/timingAllocator.js.map +0 -1
  758. package/dist/transform/types.d.ts +0 -86
  759. package/dist/transform/types.d.ts.map +0 -1
  760. package/dist/transform/types.js +0 -9
  761. package/dist/transform/types.js.map +0 -1
  762. package/dist/versions/DocumentVersionManager.d.ts +0 -31
  763. package/dist/versions/DocumentVersionManager.d.ts.map +0 -1
  764. package/dist/versions/DocumentVersionManager.js +0 -33
  765. package/dist/versions/DocumentVersionManager.js.map +0 -1
  766. package/dist/versions/index.d.ts.map +0 -1
  767. package/dist/versions/operations.d.ts +0 -44
  768. package/dist/versions/operations.d.ts.map +0 -1
  769. package/dist/versions/operations.js +0 -190
  770. package/dist/versions/operations.js.map +0 -1
  771. package/dist/versions/paths.d.ts +0 -29
  772. package/dist/versions/paths.d.ts.map +0 -1
  773. package/dist/versions/paths.js +0 -66
  774. package/dist/versions/paths.js.map +0 -1
  775. package/dist/versions/timestamp.d.ts +0 -22
  776. package/dist/versions/timestamp.d.ts.map +0 -1
  777. package/dist/versions/timestamp.js +0 -44
  778. package/dist/versions/timestamp.js.map +0 -1
  779. package/dist/versions/types.d.ts +0 -92
  780. package/dist/versions/types.d.ts.map +0 -1
  781. package/dist/versions/types.js +0 -11
  782. package/dist/versions/types.js.map +0 -1
@@ -4,6 +4,13 @@ import type { MarkdownText } from '../markdown/types';
4
4
  import { markdownToDoc, flattenBlocks, countBlocks, getBlockDepth } from '../doc/markdownToDoc';
5
5
  import { docToMarkdown } from '../doc/docToMarkdown';
6
6
 
7
+ // Helper: parse markdown and return the first top-level block.
8
+ function firstHeadingBlock(md: string) {
9
+ const parsed = parseMarkdown(md);
10
+ const doc = markdownToDoc(parsed, { articleId: 'test', generateCoverBlock: false });
11
+ return doc.blocks[0];
12
+ }
13
+
7
14
  // Helper: strip positions from markdown nodes for cleaner assertions
8
15
  function stripPositions(obj: unknown): unknown {
9
16
  if (obj === null || obj === undefined) return obj;
@@ -362,6 +369,16 @@ describe('template annotation in markdownToDoc', () => {
362
369
  expect(output).toContain('{[factCard style=minimal]}');
363
370
  });
364
371
 
372
+ it('docToMarkdown injects transition attributes from block metadata', () => {
373
+ const md = parseMarkdown('## Section\n\nBody');
374
+ const doc = markdownToDoc(md);
375
+ doc.blocks[0].transition = { type: 'wipe', duration: 0.8, direction: 'left' };
376
+
377
+ const output = stringifyMarkdown(docToMarkdown(doc));
378
+
379
+ expect(output).toContain('{transition=wipe transitionDuration=0.8 transitionDirection=left}');
380
+ });
381
+
365
382
  it('nested headings preserve their own annotations', () => {
366
383
  const input = '# Chapter {[title]}\n\nIntro\n\n## Section {[chart]}\n\nData';
367
384
  const md = parseMarkdown(input);
@@ -448,12 +465,16 @@ describe('caption generation', () => {
448
465
  expect(doc.captions).toBeUndefined();
449
466
  });
450
467
 
451
- it('generates captions version and timestamp', () => {
468
+ it('generates captions version; timestamp only when supplied (deterministic default)', () => {
452
469
  const md = parseMarkdown('# Title\n\nHello world and more text.');
453
470
  const doc = markdownToDoc(md);
454
471
 
455
472
  expect(doc.captions!.version).toBe(1);
456
- expect(doc.captions!.generatedAt).toBeTruthy();
473
+ // No clock reads during conversion — generatedAt is opt-in.
474
+ expect(doc.captions!.generatedAt).toBeUndefined();
475
+
476
+ const stamped = markdownToDoc(md, { captionsGeneratedAt: '2026-01-01T00:00:00.000Z' });
477
+ expect(stamped.captions!.generatedAt).toBe('2026-01-01T00:00:00.000Z');
457
478
  });
458
479
 
459
480
  it('caption phrases have sequential non-overlapping times', () => {
@@ -563,3 +584,203 @@ describe('auto cover block generation', () => {
563
584
  expect(doc.startBlock!.subtitle).toBeUndefined();
564
585
  });
565
586
  });
587
+
588
+ describe('markdownToDoc with Pandoc attributes', () => {
589
+ it('overrides block id from {#id}', () => {
590
+ const block = firstHeadingBlock('## Section title {#intro}');
591
+ expect(block.id).toBe('intro');
592
+ });
593
+
594
+ it('applies x / y to typed Block fields', () => {
595
+ // `diagramNode` is a legacy alias for the canonical `diagram` template;
596
+ // the alias resolves at template-resolution time.
597
+ const block = firstHeadingBlock('## Step 1 {#step1 x=400 y=200} {[diagramNode]}');
598
+ expect(block.id).toBe('step1');
599
+ expect(block.x).toBe(400);
600
+ expect(block.y).toBe(200);
601
+ expect(block.template).toBe('diagram');
602
+ });
603
+
604
+ it('applies multiple connectsTo entries with mixed types', () => {
605
+ const block = firstHeadingBlock(
606
+ '## Architecture {#arch x=600 y=300 connectsTo=foo:veryImportant,bar:requires,baz:requires} {[diagramNode]}',
607
+ );
608
+ expect(block.connectsTo).toEqual([
609
+ { target: 'foo', type: 'veryImportant' },
610
+ { target: 'bar', type: 'requires' },
611
+ { target: 'baz', type: 'requires' },
612
+ ]);
613
+ });
614
+
615
+ it('parses connections without types', () => {
616
+ const block = firstHeadingBlock('## Summary {#summary connectsTo=intro,middle,end}');
617
+ expect(block.connectsTo).toEqual([
618
+ { target: 'intro' },
619
+ { target: 'middle' },
620
+ { target: 'end' },
621
+ ]);
622
+ });
623
+
624
+ it('parses mix of typed and untyped connections in one list', () => {
625
+ const block = firstHeadingBlock(
626
+ '## Decision {#decision connectsTo=alt1,alt2:rejected,alt3:chosen}',
627
+ );
628
+ expect(block.connectsTo).toEqual([
629
+ { target: 'alt1' },
630
+ { target: 'alt2', type: 'rejected' },
631
+ { target: 'alt3', type: 'chosen' },
632
+ ]);
633
+ });
634
+
635
+ it('overrides startTime / duration with attribute values (seconds)', () => {
636
+ const block = firstHeadingBlock('## Closing {#closing startTime=02:30 duration=00:45}');
637
+ expect(block.startTime).toBe(150);
638
+ expect(block.duration).toBe(45);
639
+ });
640
+
641
+ it('sets transition metadata from Pandoc attributes', () => {
642
+ const block = firstHeadingBlock(
643
+ '## Closing {#closing transition=checkerboard transitionDuration=1.2 transitionDirection=vertical}',
644
+ );
645
+ expect(block.transition).toEqual({
646
+ type: 'checkerboard',
647
+ duration: 1.2,
648
+ direction: 'vertical',
649
+ });
650
+ });
651
+
652
+ it('puts unknown keys into block.metadata', () => {
653
+ const block = firstHeadingBlock('## X {#x priority=high status=draft}');
654
+ expect(block.metadata).toEqual({ priority: 'high', status: 'draft' });
655
+ });
656
+
657
+ it('routes template params separately from block-level metadata', () => {
658
+ const block = firstHeadingBlock(
659
+ '## X {#big x=400 priority=high} {[diagramNode colorScheme=blue]}',
660
+ );
661
+ expect(block.templateOverrides).toEqual({ colorScheme: 'blue' });
662
+ expect(block.metadata).toEqual({ priority: 'high' });
663
+ expect(block.x).toBe(400);
664
+ });
665
+
666
+ it('stores Pandoc classes on block.classes', () => {
667
+ const block = firstHeadingBlock('## X {#x .alpha .beta}');
668
+ expect(block.classes).toEqual(['alpha', 'beta']);
669
+ });
670
+
671
+ it('backward compat: plain {[…]}-only heading is unchanged', () => {
672
+ const block = firstHeadingBlock('## X {[chart colorScheme=blue]}');
673
+ expect(block.template).toBe('chart');
674
+ expect(block.templateOverrides).toEqual({ colorScheme: 'blue' });
675
+ expect(block.x).toBeUndefined();
676
+ expect(block.metadata).toBeUndefined();
677
+ expect(block.classes).toBeUndefined();
678
+ });
679
+ });
680
+
681
+ describe('markdownToDoc block-meta in the squiggly {[…]} form', () => {
682
+ it('reads duration from a pure key-value {[duration=N]} annotation', () => {
683
+ const block = firstHeadingBlock('## Closing {[duration=8]}\n\nSome body text here.\n');
684
+ expect(block.duration).toBe(8);
685
+ });
686
+
687
+ it('does not let reading-time overwrite a squiggly-pinned duration', () => {
688
+ // Body long enough that the reading-time estimate would exceed 8s if it ran.
689
+ const body = Array(80).fill('word').join(' ');
690
+ const block = firstHeadingBlock(`## Closing {[duration=8]}\n\n${body}\n`);
691
+ expect(block.duration).toBe(8);
692
+ });
693
+
694
+ it('folds duration alongside a template name', () => {
695
+ const block = firstHeadingBlock('## Hero {[sectionHeader duration=6]}');
696
+ expect(block.template).toBe('sectionHeader');
697
+ expect(block.duration).toBe(6);
698
+ });
699
+
700
+ it('folds transition alongside a template name', () => {
701
+ const block = firstHeadingBlock(
702
+ '## Hero {[sectionHeader transition=fly-through transitionDuration=750ms]}',
703
+ );
704
+ expect(block.template).toBe('sectionHeader');
705
+ expect(block.transition).toEqual({
706
+ type: 'flyThrough',
707
+ duration: 0.75,
708
+ });
709
+ });
710
+
711
+ it('accepts startTime in the squiggly form too', () => {
712
+ const block = firstHeadingBlock('## Closing {[startTime=02:30 duration=45]}');
713
+ expect(block.startTime).toBe(150);
714
+ expect(block.duration).toBe(45);
715
+ });
716
+
717
+ it('Pandoc attrs win when a key appears in both forms', () => {
718
+ const block = firstHeadingBlock('## X {duration=3} {[duration=9]}');
719
+ expect(block.duration).toBe(3);
720
+ });
721
+ });
722
+
723
+ describe('auto template picking (autoTemplates, default on)', () => {
724
+ const toDocFromMd = (md: string, options?: Parameters<typeof markdownToDoc>[1]) =>
725
+ markdownToDoc(parseMarkdown(md), options);
726
+
727
+ it('picks quote for a blockquote-bearing section and derives the quote text', () => {
728
+ const doc = toDocFromMd('# Wisdom\n\n> The best template feels obvious.\n');
729
+ const block = doc.blocks[0];
730
+ expect(block.template).toBe('quote');
731
+ expect(block.autoTemplate).toBe(true);
732
+ expect(block.templateData?.quote).toBe('The best template feels obvious.');
733
+ });
734
+
735
+ it('picks dataTable for a table-bearing section with derived headers/rows', () => {
736
+ const doc = toDocFromMd('# Results\n\n| A | B |\n| - | - |\n| 1 | 2 |\n');
737
+ const block = doc.blocks[0];
738
+ expect(block.template).toBe('dataTable');
739
+ expect(block.templateData?.headers).toEqual(['A', 'B']);
740
+ expect(block.templateData?.rows).toEqual([['1', '2']]);
741
+ });
742
+
743
+ it('picks list for list-bearing sections and photoGrid for multi-image sections', () => {
744
+ const doc = toDocFromMd('# Steps\n\n- one\n- two\n\n# Gallery\n\n![a](a.jpg)\n\n![b](b.jpg)\n');
745
+ expect(doc.blocks[0].template).toBe('list');
746
+ expect(doc.blocks[0].templateData?.items).toEqual(['one', 'two']);
747
+ expect(doc.blocks[1].template).toBe('photoGrid');
748
+ });
749
+
750
+ it('alternates left/right feature for consecutive single-image sections', () => {
751
+ const doc = toDocFromMd('# One\n\n![a](a.jpg)\n\n# Two\n\n![b](b.jpg)\n');
752
+ expect(doc.blocks[0].template).toBe('leftFeature');
753
+ expect(doc.blocks[1].template).toBe('rightFeature');
754
+ expect(doc.blocks[0].templateData?.imageSrc).toBe('a.jpg');
755
+ });
756
+
757
+ it('leaves plain prose sections on the structural default', () => {
758
+ const doc = toDocFromMd('# About\n\nJust a paragraph of prose.\n');
759
+ expect(doc.blocks[0].template).toBe('sectionHeader');
760
+ expect(doc.blocks[0].autoTemplate).toBeUndefined();
761
+ });
762
+
763
+ it('never overrides an explicit annotation', () => {
764
+ const doc = toDocFromMd('# Wisdom {[factCard fact="F"]}\n\n> quoted\n');
765
+ expect(doc.blocks[0].template).toBe('factCard');
766
+ });
767
+
768
+ it('is disabled by the option and by frontmatter', () => {
769
+ const md = '# Wisdom\n\n> quoted\n';
770
+ const viaOption = toDocFromMd(md, { autoTemplates: false });
771
+ expect(viaOption.blocks[0].template).toBe('sectionHeader');
772
+
773
+ const viaFrontmatter = markdownToDoc(
774
+ parseMarkdown('---\nsquisq-auto-templates: false\n---\n\n' + md),
775
+ );
776
+ expect(viaFrontmatter.blocks[0].template).toBe('sectionHeader');
777
+ });
778
+
779
+ it('keeps the round-trip lossless (no materialized annotations)', () => {
780
+ const md = '# Wisdom\n\n> The best template feels obvious.\n';
781
+ const doc = toDocFromMd(md);
782
+ expect(doc.blocks[0].template).toBe('quote');
783
+ const roundTripped = stringifyMarkdown(docToMarkdown(doc));
784
+ expect(roundTripped).not.toContain('{[quote');
785
+ });
786
+ });
@@ -0,0 +1,64 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { parseMarkdown } from '../markdown/parse.js';
3
+ import { markdownToDoc } from '../doc/markdownToDoc.js';
4
+ import { resolveMediaSchedule } from '../schemas/Media.js';
5
+
6
+ function toDoc(md: string) {
7
+ return markdownToDoc(parseMarkdown(md), { articleId: 't' });
8
+ }
9
+
10
+ describe('markdownToDoc media annotations', () => {
11
+ it('lifts a block-level audio annotation into block.media', () => {
12
+ const doc = toDoc(
13
+ '# One {duration=10}\n\nIntro.\n\n{[audio src=narration.mp3 startAt=5 clipEnd=8 spillover=true]}\n',
14
+ );
15
+ const block = doc.blocks[0];
16
+ expect(block.media).toHaveLength(1);
17
+ expect(block.media![0]).toMatchObject({
18
+ src: 'narration.mp3',
19
+ kind: 'audio',
20
+ startAt: 5,
21
+ clipEnd: 8,
22
+ spillover: true,
23
+ anchor: 'block',
24
+ });
25
+ // The annotation paragraph is removed from the visible contents.
26
+ expect(JSON.stringify(block.contents)).not.toContain('narration.mp3');
27
+ });
28
+
29
+ it('routes anchor=document annotations to doc.documentMedia', () => {
30
+ const doc = toDoc('{[audio src=voice.mp3 anchor=document]}\n\n# First\n\nBody.\n');
31
+ expect(doc.documentMedia).toHaveLength(1);
32
+ expect(doc.documentMedia![0]).toMatchObject({ src: 'voice.mp3', anchor: 'document' });
33
+ // It is not also attached to the preamble block's media.
34
+ expect(doc.blocks[0].media).toBeUndefined();
35
+ });
36
+
37
+ it('recognizes a video annotation as kind video', () => {
38
+ const doc = toDoc('# B {duration=20}\n\n{[video src=clip.mp4 clipStart=2 clipEnd=8]}\n');
39
+ expect(doc.blocks[0].media![0]).toMatchObject({
40
+ src: 'clip.mp4',
41
+ kind: 'video',
42
+ clipStart: 2,
43
+ clipEnd: 8,
44
+ });
45
+ });
46
+
47
+ it('media annotation text does not inflate block duration', () => {
48
+ // No explicit duration; body is only the annotation → default (5s), not reading-time of the annotation text.
49
+ const doc = toDoc('# B\n\n{[audio src=a.mp3]}\n');
50
+ expect(doc.blocks[0].duration).toBe(5);
51
+ });
52
+
53
+ it('feeds resolveMediaSchedule end to end', () => {
54
+ const doc = toDoc(
55
+ '{[audio src=voice.mp3 anchor=document]}\n\n# One {duration=30}\n\n# Two {duration=20}\n\n{[audio src=a.mp3 startAt=5 clipEnd=8]}\n',
56
+ );
57
+ const sched = resolveMediaSchedule(doc);
58
+ const doc1 = sched.find((c) => c.anchor === 'document')!;
59
+ const block = sched.find((c) => c.anchor === 'block')!;
60
+ expect(doc1.absoluteStart).toBe(0);
61
+ expect(doc1.absoluteEnd).toBe(50); // spans both blocks
62
+ expect(block.absoluteStart).toBe(35); // block Two at 30 + startAt 5
63
+ });
64
+ });
@@ -0,0 +1,118 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { resolveMediaSchedule, getDocPlaybackDuration } from '../schemas/Media.js';
3
+ import type { Doc, Block } from '../schemas/Doc.js';
4
+
5
+ function block(partial: Partial<Block>): Block {
6
+ return {
7
+ id: partial.id ?? 'b',
8
+ startTime: partial.startTime ?? 0,
9
+ duration: partial.duration ?? 10,
10
+ audioSegment: 0,
11
+ ...partial,
12
+ };
13
+ }
14
+
15
+ function doc(blocks: Block[], extra?: Partial<Doc>): Doc {
16
+ const lastEnd = blocks.reduce((m, b) => Math.max(m, b.startTime + b.duration), 0);
17
+ return { articleId: 't', duration: lastEnd, blocks, audio: { segments: [] }, ...extra };
18
+ }
19
+
20
+ describe('resolveMediaSchedule', () => {
21
+ it('offsets a block clip by startAt relative to the block start', () => {
22
+ // Block #2 starts at 30s; a clip with startAt=5 plays at 35s.
23
+ const d = doc([
24
+ block({ id: 'one', startTime: 0, duration: 30 }),
25
+ block({
26
+ id: 'two',
27
+ startTime: 30,
28
+ duration: 20,
29
+ media: [{ id: 'm1', src: 'a.mp3', kind: 'audio', startAt: 5, clipEnd: 8, anchor: 'block' }],
30
+ }),
31
+ ]);
32
+ const [clip] = resolveMediaSchedule(d);
33
+ expect(clip.absoluteStart).toBe(35);
34
+ expect(clip.absoluteEnd).toBe(43); // 35 + (clipEnd 8 - clipStart 0)
35
+ expect(clip.sourceIn).toBe(0);
36
+ expect(clip.blockId).toBe('two');
37
+ });
38
+
39
+ it('clamps a non-spillover clip to the block end', () => {
40
+ const d = doc([
41
+ block({
42
+ id: 'b',
43
+ startTime: 0,
44
+ duration: 10,
45
+ media: [
46
+ { id: 'm', src: 'a.mp3', kind: 'audio', startAt: 2, clipEnd: 100, anchor: 'block' },
47
+ ],
48
+ }),
49
+ ]);
50
+ const [clip] = resolveMediaSchedule(d);
51
+ expect(clip.absoluteEnd).toBe(10); // clamped to block end, not 2 + 100
52
+ });
53
+
54
+ it('lets a spillover clip run past the block end', () => {
55
+ const d = doc([
56
+ block({
57
+ id: 'b',
58
+ startTime: 0,
59
+ duration: 10,
60
+ media: [
61
+ {
62
+ id: 'm',
63
+ src: 'a.mp3',
64
+ kind: 'audio',
65
+ startAt: 2,
66
+ clipEnd: 100,
67
+ spillover: true,
68
+ anchor: 'block',
69
+ },
70
+ ],
71
+ }),
72
+ block({ id: 'b2', startTime: 10, duration: 10 }),
73
+ ]);
74
+ const [clip] = resolveMediaSchedule(d);
75
+ expect(clip.absoluteEnd).toBe(102); // 2 + 100, past the block end
76
+ });
77
+
78
+ it('spans the whole document for an anchor=document clip', () => {
79
+ const d = doc([block({ id: 'b', startTime: 0, duration: 40 })], {
80
+ documentMedia: [
81
+ { id: 'narr', src: 'voice.mp3', kind: 'audio', startAt: 0, anchor: 'document' },
82
+ ],
83
+ });
84
+ const [clip] = resolveMediaSchedule(d);
85
+ expect(clip.absoluteStart).toBe(0);
86
+ expect(clip.absoluteEnd).toBe(40);
87
+ expect(clip.anchor).toBe('document');
88
+ });
89
+ });
90
+
91
+ describe('getDocPlaybackDuration', () => {
92
+ it('extends total duration to include media spillover', () => {
93
+ const d = doc([
94
+ block({
95
+ id: 'b',
96
+ startTime: 0,
97
+ duration: 10,
98
+ media: [
99
+ {
100
+ id: 'm',
101
+ src: 'a.mp3',
102
+ kind: 'audio',
103
+ startAt: 0,
104
+ clipEnd: 25,
105
+ spillover: true,
106
+ anchor: 'block',
107
+ },
108
+ ],
109
+ }),
110
+ ]);
111
+ expect(getDocPlaybackDuration(d)).toBe(25);
112
+ });
113
+
114
+ it('falls back to the block timeline when there is no media', () => {
115
+ const d = doc([block({ id: 'b', startTime: 0, duration: 12 })]);
116
+ expect(getDocPlaybackDuration(d)).toBe(12);
117
+ });
118
+ });
@@ -0,0 +1,187 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { parseMarkdown, stringifyMarkdown } from '../markdown/index.js';
3
+
4
+ function getHeading(md: string) {
5
+ const doc = parseMarkdown(md);
6
+ const heading = doc.children[0];
7
+ if (heading.type !== 'heading') throw new Error('expected heading');
8
+ return heading;
9
+ }
10
+
11
+ describe('Pandoc heading attribute parse', () => {
12
+ it('extracts an id-only block', () => {
13
+ const h = getHeading('## Section title {#intro}');
14
+ expect(h.attributes).toEqual({ id: 'intro' });
15
+ expect(h.templateAnnotation).toBeUndefined();
16
+ });
17
+
18
+ it('extracts classes', () => {
19
+ const h = getHeading('## X {.alpha .beta}');
20
+ expect(h.attributes?.classes).toEqual(['alpha', 'beta']);
21
+ });
22
+
23
+ it('extracts id + classes + params', () => {
24
+ const h = getHeading('## X {#abc .v1 .v2 x=400 y=200}');
25
+ expect(h.attributes?.id).toBe('abc');
26
+ expect(h.attributes?.classes).toEqual(['v1', 'v2']);
27
+ expect(h.attributes?.params).toEqual({ x: '400', y: '200' });
28
+ expect(h.attributes?.blockMeta).toEqual({ x: 400, y: 200 });
29
+ });
30
+
31
+ it('coerces connectsTo to a typed list', () => {
32
+ const h = getHeading('## X {connectsTo=foo:veryImportant,bar:requires,baz:requires}');
33
+ expect(h.attributes?.blockMeta?.connectsTo).toEqual([
34
+ { target: 'foo', type: 'veryImportant' },
35
+ { target: 'bar', type: 'requires' },
36
+ { target: 'baz', type: 'requires' },
37
+ ]);
38
+ });
39
+
40
+ it('coerces startTime/duration to seconds', () => {
41
+ const h = getHeading('## X {startTime=01:30 duration=00:45}');
42
+ expect(h.attributes?.blockMeta?.startTime).toBe(90);
43
+ expect(h.attributes?.blockMeta?.duration).toBe(45);
44
+ });
45
+
46
+ it('routes unknown keys to metadata', () => {
47
+ const h = getHeading('## X {#a priority=high level=info}');
48
+ expect(h.attributes?.metadata).toEqual({ priority: 'high', level: 'info' });
49
+ expect(h.attributes?.blockMeta).toBeUndefined();
50
+ });
51
+
52
+ it('handles quoted values with spaces', () => {
53
+ const h = getHeading('## X {caption="hello world"}');
54
+ expect(h.attributes?.params).toEqual({ caption: 'hello world' });
55
+ expect(h.attributes?.metadata).toEqual({ caption: 'hello world' });
56
+ });
57
+
58
+ it('preserves commas inside quoted values', () => {
59
+ const h = getHeading('## X {caption="hello, friend"}');
60
+ expect(h.attributes?.metadata).toEqual({ caption: 'hello, friend' });
61
+ });
62
+
63
+ it('escaped quotes inside quoted values', () => {
64
+ const h = getHeading('## X {label="he said \\"hi\\""}');
65
+ expect(h.attributes?.metadata?.label).toBe('he said "hi"');
66
+ });
67
+
68
+ it('handles single-quoted values with spaces', () => {
69
+ const h = getHeading("## X {caption='hello world'}");
70
+ expect(h.attributes?.params).toEqual({ caption: 'hello world' });
71
+ });
72
+
73
+ it('allows } inside a quoted value', () => {
74
+ const h = getHeading('## X {caption="a } b"}');
75
+ expect(h.attributes?.params).toEqual({ caption: 'a } b' });
76
+ });
77
+
78
+ it('treats an apostrophe inside an unquoted value as literal', () => {
79
+ const h = getHeading("## X {name=O'Brien x=4}");
80
+ expect(h.attributes?.metadata).toEqual({ name: "O'Brien" });
81
+ expect(h.attributes?.blockMeta?.x).toBe(4);
82
+ });
83
+
84
+ it('duplicate id: last wins', () => {
85
+ const h = getHeading('## X {#a #b}');
86
+ expect(h.attributes?.id).toBe('b');
87
+ });
88
+
89
+ it('duplicate key: last wins', () => {
90
+ const h = getHeading('## X {x=1 x=2}');
91
+ expect(h.attributes?.blockMeta?.x).toBe(2);
92
+ });
93
+
94
+ it('does NOT match a non-trailing brace block', () => {
95
+ const h = getHeading('## The {#wrong} section');
96
+ expect(h.attributes).toBeUndefined();
97
+ });
98
+
99
+ it('does NOT collide with {[…]} template annotation', () => {
100
+ const h = getHeading('## X {[chart]}');
101
+ expect(h.templateAnnotation).toEqual({ template: 'chart' });
102
+ expect(h.attributes).toBeUndefined();
103
+ });
104
+ });
105
+
106
+ describe('Coexistence of {#…} and {[…]}', () => {
107
+ it('Pandoc first, then template', () => {
108
+ const h = getHeading('## X {#abc} {[chart]}');
109
+ expect(h.attributes?.id).toBe('abc');
110
+ expect(h.templateAnnotation?.template).toBe('chart');
111
+ });
112
+
113
+ it('Template first, then Pandoc (order-agnostic)', () => {
114
+ const h = getHeading('## X {[chart]} {#abc}');
115
+ expect(h.attributes?.id).toBe('abc');
116
+ expect(h.templateAnnotation?.template).toBe('chart');
117
+ });
118
+
119
+ it('both with params on each side', () => {
120
+ const h = getHeading('## X {#a x=400 y=200} {[chart colorScheme=blue]}');
121
+ expect(h.attributes?.id).toBe('a');
122
+ expect(h.attributes?.blockMeta?.x).toBe(400);
123
+ expect(h.attributes?.blockMeta?.y).toBe(200);
124
+ expect(h.templateAnnotation?.template).toBe('chart');
125
+ expect(h.templateAnnotation?.params).toEqual({ colorScheme: 'blue' });
126
+ });
127
+
128
+ it('Pandoc block-meta does not leak into templateOverrides', () => {
129
+ const h = getHeading('## X {#a x=400} {[chart colorScheme=blue]}');
130
+ expect(h.templateAnnotation?.params).toEqual({ colorScheme: 'blue' });
131
+ expect(h.attributes?.params).toEqual({ x: '400' });
132
+ });
133
+ });
134
+
135
+ describe('Markdown round-trip with attributes', () => {
136
+ it('Pandoc-only id round-trips', () => {
137
+ const src = '## Section title {#intro}\n';
138
+ const md = parseMarkdown(src);
139
+ expect(stringifyMarkdown(md).trim()).toBe(src.trim());
140
+ });
141
+
142
+ it('canonicalizes order: Pandoc first, then template', () => {
143
+ const input = '## X {[chart]} {#abc}\n';
144
+ const md = parseMarkdown(input);
145
+ const out = stringifyMarkdown(md).trim();
146
+ expect(out).toBe('## X {#abc} {[chart]}');
147
+ });
148
+
149
+ it('full attribute set round-trips', () => {
150
+ const src =
151
+ '## Architecture {#arch x=600 y=300 connectsTo=foo:veryImportant,bar:requires,baz:requires} {[diagramNode]}\n';
152
+ const md = parseMarkdown(src);
153
+ const out = stringifyMarkdown(md).trim();
154
+ expect(out).toBe(src.trim());
155
+ });
156
+
157
+ it('quoted value round-trips with quoting preserved', () => {
158
+ const src = '## X {caption="hello world"}\n';
159
+ const md = parseMarkdown(src);
160
+ const out = stringifyMarkdown(md).trim();
161
+ expect(out).toBe(src.trim());
162
+ });
163
+
164
+ it('existing {[…]}-only docs are unchanged', () => {
165
+ const src = '## Getting Started {[chart colorScheme=blue]}\n';
166
+ const md = parseMarkdown(src);
167
+ const out = stringifyMarkdown(md).trim();
168
+ expect(out).toBe(src.trim());
169
+ });
170
+
171
+ it('single-quoted values canonicalize to double quotes', () => {
172
+ const md = parseMarkdown("## X {caption='hello world'}");
173
+ expect(stringifyMarkdown(md).trim()).toBe('## X {caption="hello world"}');
174
+ });
175
+
176
+ it('a value containing a double quote round-trips via single quotes', () => {
177
+ const src = '## X {label=\'say "hi"\'}';
178
+ const md = parseMarkdown(src);
179
+ expect(stringifyMarkdown(md).trim()).toBe(src);
180
+ });
181
+
182
+ it('a quoted } round-trips', () => {
183
+ const src = '## X {caption="a } b"}';
184
+ const md = parseMarkdown(src);
185
+ expect(stringifyMarkdown(md).trim()).toBe(src);
186
+ });
187
+ });
@@ -0,0 +1,55 @@
1
+ /**
2
+ * resolveThemeForDoc — pure, doc-scoped theme resolution.
3
+ *
4
+ * The theme analog of buildRegistry: an inline custom theme resolves from the
5
+ * doc's own `customThemes` list, with no global `registerTheme` call. Falls
6
+ * back to built-ins for non-inline ids.
7
+ */
8
+
9
+ import { describe, it, expect } from 'vitest';
10
+ import { resolveThemeForDoc } from '../doc/resolveDocTheme';
11
+ import { compileTheme } from '../schemas/themeCompile';
12
+ import { DEFAULT_THEME } from '../schemas/themeLibrary';
13
+ import type { Doc } from '../schemas/Doc.js';
14
+
15
+ const brand = compileTheme({
16
+ id: 'my-brand',
17
+ name: 'My Brand',
18
+ seedColors: { primary: '#3182ce' },
19
+ });
20
+
21
+ function docWith(partial: Partial<Doc>): Doc {
22
+ return {
23
+ articleId: 'd',
24
+ duration: 0,
25
+ blocks: [],
26
+ audio: { segments: [] },
27
+ ...partial,
28
+ } as Doc;
29
+ }
30
+
31
+ describe('resolveThemeForDoc', () => {
32
+ it('resolves an inline custom theme doc-scoped (no global registration)', () => {
33
+ const doc = docWith({ customThemes: [brand], frontmatter: { 'squisq-theme': 'my-brand' } });
34
+ expect(resolveThemeForDoc(doc)).toEqual(brand);
35
+ });
36
+
37
+ it('honors an explicit id over the frontmatter selection', () => {
38
+ const doc = docWith({ customThemes: [brand], frontmatter: { 'squisq-theme': 'cinematic' } });
39
+ expect(resolveThemeForDoc(doc, 'my-brand')).toEqual(brand);
40
+ });
41
+
42
+ it('falls back to a built-in when the id is not an inline theme', () => {
43
+ const doc = docWith({ customThemes: [brand], frontmatter: { 'squisq-theme': 'cinematic' } });
44
+ expect(resolveThemeForDoc(doc).id).toBe('cinematic');
45
+ });
46
+
47
+ it('uses Doc.themeId when there is no explicit or frontmatter id', () => {
48
+ const doc = docWith({ customThemes: [brand], themeId: 'my-brand' });
49
+ expect(resolveThemeForDoc(doc)).toEqual(brand);
50
+ });
51
+
52
+ it('returns the default theme for a null doc', () => {
53
+ expect(resolveThemeForDoc(null).id).toBe(DEFAULT_THEME.id);
54
+ });
55
+ });