@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
@@ -22,7 +22,16 @@
22
22
  * ```
23
23
  */
24
24
 
25
- import type { Doc, Block, CaptionTrack, CaptionPhrase, StartBlockConfig } from '../schemas/Doc.js';
25
+ import type {
26
+ Doc,
27
+ Block,
28
+ CaptionTrack,
29
+ CaptionPhrase,
30
+ StartBlockConfig,
31
+ DocDiagnostic,
32
+ } from '../schemas/Doc.js';
33
+ import { readCustomTemplatesFromFrontmatter } from './customTemplatesFrontmatter.js';
34
+ import { readCustomThemesFromFrontmatter } from './customThemesFrontmatter.js';
26
35
  import type {
27
36
  MarkdownDocument,
28
37
  MarkdownBlockNode,
@@ -31,8 +40,14 @@ import type {
31
40
  HtmlNode,
32
41
  } from '../markdown/types.js';
33
42
  import { extractPlainText } from '../markdown/utils.js';
43
+ import { coerceAnnotationValues, type CoercedBlockMeta } from '../markdown/annotationCoercion.js';
34
44
  import { estimateReadingTime } from '../timing/readingTime.js';
35
- import { resolveTemplateName } from './templates/index.js';
45
+ import { resolveTemplateName, isContainerTemplate } from './templates/index.js';
46
+ import { isDataFence, parseDataFence, findFirstTable, extractTableData } from './structuredData.js';
47
+ import { extractMediaFromContents } from './mediaAnnotations.js';
48
+ import { profileBlockContents, pickAutoTemplate } from '../recommend/templates.js';
49
+ import { deriveTemplateInputs } from './templateInputs.js';
50
+ import type { MediaClip } from '../schemas/Media.js';
36
51
 
37
52
  // ============================================
38
53
  // Options
@@ -61,6 +76,25 @@ export interface MarkdownToDocOptions {
61
76
  * is used as the hero. Set to false to suppress automatic cover generation.
62
77
  */
63
78
  generateCoverBlock?: boolean;
79
+
80
+ /**
81
+ * Timestamp recorded as `captions.generatedAt`. When omitted, the field
82
+ * is left unset so that conversion is fully deterministic — the same
83
+ * markdown always converts to an identical Doc (important for snapshot
84
+ * tests, caching, and agents that verify their output by re-converting).
85
+ */
86
+ captionsGeneratedAt?: string;
87
+
88
+ /**
89
+ * Content-aware template auto-picking for unannotated headings
90
+ * (default: true). When a heading block carries a strong content signal
91
+ * — a table, images, a blockquote, a list, a stat-looking line — the
92
+ * matching template is applied (with inputs derived from the body)
93
+ * instead of the structural `defaultTemplate`. Explicit `{[template]}`
94
+ * annotations always win. Authors can also disable per document with
95
+ * frontmatter `squisq-auto-templates: false`.
96
+ */
97
+ autoTemplates?: boolean;
64
98
  }
65
99
 
66
100
  // ============================================
@@ -90,12 +124,14 @@ function slugify(text: string): string {
90
124
 
91
125
  /**
92
126
  * Creates an ID generator that produces unique slugified IDs.
93
- * Appends -2, -3, etc. for duplicate headings.
127
+ * Appends -2, -3, etc. for duplicate headings. `reserve()` registers an
128
+ * author-pinned `{#id}` so a later heading whose slug matches doesn't
129
+ * collide with it.
94
130
  */
95
131
  function createIdGenerator() {
96
132
  const used = new Map<string, number>();
97
133
 
98
- return (heading: MarkdownHeading, _index: number): string => {
134
+ const generate = (heading: MarkdownHeading, _index: number): string => {
99
135
  const text = extractPlainText(heading);
100
136
  const base = slugify(text);
101
137
  const count = used.get(base) ?? 0;
@@ -104,6 +140,12 @@ function createIdGenerator() {
104
140
  if (count === 0) return base;
105
141
  return `${base}-${count + 1}`;
106
142
  };
143
+
144
+ generate.reserve = (id: string): void => {
145
+ used.set(id, Math.max(used.get(id) ?? 0, 1));
146
+ };
147
+
148
+ return generate;
107
149
  }
108
150
 
109
151
  // ============================================
@@ -125,13 +167,44 @@ function createIdGenerator() {
125
167
  * @param options - Conversion options
126
168
  * @returns A Doc whose blocks mirror the markdown heading structure
127
169
  */
170
+ /**
171
+ * Apply coerced block-meta values onto a block's typed fields. Only keys
172
+ * actually present are written, so a later caller (the Pandoc attribute
173
+ * block) can override values supplied by the squiggly `{[…]}` annotation.
174
+ */
175
+ function applyBlockMeta(block: Block, m: CoercedBlockMeta): void {
176
+ if (m.x != null) block.x = m.x;
177
+ if (m.y != null) block.y = m.y;
178
+ if (m.startTime != null) block.startTime = m.startTime;
179
+ if (m.duration != null) block.duration = m.duration;
180
+ if (m.connectsTo) block.connectsTo = m.connectsTo;
181
+ if (m.transition) block.transition = m.transition;
182
+ }
183
+
184
+ /**
185
+ * The block-meta an author pinned on a heading, drawn from either the
186
+ * Pandoc `{key=value}` block or the squiggly `{[key=value]}` annotation
187
+ * (Pandoc wins on conflict — same precedence as {@link makeBlock}). Used by
188
+ * the timing passes to tell "author pinned this" from "derive it".
189
+ */
190
+ function pinnedHeadingMeta(heading: MarkdownHeading | undefined): CoercedBlockMeta {
191
+ if (!heading) return {};
192
+ const fromAnnotation = heading.templateAnnotation?.params
193
+ ? coerceAnnotationValues(heading.templateAnnotation.params).blockMeta
194
+ : {};
195
+ const fromPandoc = heading.attributes?.blockMeta ?? {};
196
+ return { ...fromAnnotation, ...fromPandoc };
197
+ }
198
+
128
199
  export function markdownToDoc(markdownDoc: MarkdownDocument, options?: MarkdownToDocOptions): Doc {
129
200
  const articleId = options?.articleId ?? 'markdown-doc';
130
201
  const defaultTemplate = options?.defaultTemplate ?? 'sectionHeader';
131
202
  const defaultDuration = options?.defaultDuration ?? 5;
132
- const generateId = options?.generateId ?? createIdGenerator();
203
+ const idGenerator = options?.generateId ? null : createIdGenerator();
204
+ const generateId = options?.generateId ?? idGenerator!;
133
205
 
134
206
  const rootBlocks: Block[] = [];
207
+ const diagnostics: DocDiagnostic[] = [];
135
208
  let headingIndex = 0;
136
209
 
137
210
  // Stack tracks the nesting context: each entry is a block and its heading depth.
@@ -151,7 +224,14 @@ export function markdownToDoc(markdownDoc: MarkdownDocument, options?: MarkdownT
151
224
  }
152
225
 
153
226
  function makeBlock(heading: MarkdownHeading | null): Block {
154
- const id = heading ? generateId(heading, headingIndex++) : 'preamble';
227
+ // Pandoc `{#id}` overrides slug-from-heading when present. Pinned ids
228
+ // are reserved in the slug generator so a later un-pinned heading with
229
+ // the same slugified text doesn't collide.
230
+ const pandocId = heading?.attributes?.id;
231
+ const id = pandocId ? pandocId : heading ? generateId(heading, headingIndex++) : 'preamble';
232
+ if (pandocId && idGenerator) {
233
+ idGenerator.reserve(pandocId);
234
+ }
155
235
 
156
236
  // Use template from annotation if present, otherwise fall back to default.
157
237
  // Legacy template ids (e.g. `titleBlock`) are normalized to their canonical
@@ -175,9 +255,29 @@ export function markdownToDoc(markdownDoc: MarkdownDocument, options?: MarkdownT
175
255
  ...(title ? { title } : {}),
176
256
  };
177
257
 
178
- // Propagate key-value params from annotation to templateOverrides
258
+ // {[…]} template params templateOverrides (template-specific overrides).
259
+ // Known block-meta keys (duration, startTime, x, y, connectsTo) are *also*
260
+ // honored in the squiggly form, so an author — or the timeline editor —
261
+ // can write `{[duration=8]}` instead of the Pandoc `{duration=8}` block.
262
+ // The raw params still flow to `templateOverrides` for round-tripping; the
263
+ // Pandoc attribute block applied below wins when a key appears in both.
179
264
  if (annotation?.params) {
180
265
  block.templateOverrides = annotation.params;
266
+ applyBlockMeta(block, coerceAnnotationValues(annotation.params).blockMeta);
267
+ }
268
+
269
+ // Pandoc {#id .class key=value} attributes → block-level fields.
270
+ const attrs = heading?.attributes;
271
+ if (attrs) {
272
+ if (attrs.blockMeta) {
273
+ applyBlockMeta(block, attrs.blockMeta);
274
+ }
275
+ if (attrs.classes && attrs.classes.length > 0) {
276
+ block.classes = attrs.classes;
277
+ }
278
+ if (attrs.metadata && Object.keys(attrs.metadata).length > 0) {
279
+ block.metadata = attrs.metadata;
280
+ }
181
281
  }
182
282
 
183
283
  return block;
@@ -242,13 +342,100 @@ export function markdownToDoc(markdownDoc: MarkdownDocument, options?: MarkdownT
242
342
  rootBlocks.push(currentBlock);
243
343
  }
244
344
 
245
- // Calculate reading-time-based durations and generate captions
345
+ // Lift standalone body-level media annotations (`{[audio …]}` / `{[video …]}`)
346
+ // into typed clips: block-anchored clips ride on `block.media`; clips flagged
347
+ // `anchor=document` collect into the doc-level `documentMedia`. Done before
348
+ // the reading-time pass so annotation text doesn't inflate block durations.
349
+ const documentMedia: MediaClip[] = [];
350
+ for (const block of flattenBlocks(rootBlocks)) {
351
+ const {
352
+ media,
353
+ documentMedia: docMedia,
354
+ remaining,
355
+ } = extractMediaFromContents(
356
+ block.contents,
357
+ (src, i) => `${block.id}-media-${i}-${src.replace(/[^a-zA-Z0-9]+/g, '-')}`,
358
+ );
359
+ if (media.length > 0) block.media = media;
360
+ if (docMedia.length > 0) documentMedia.push(...docMedia);
361
+ if (block.contents) block.contents = remaining;
362
+ }
363
+
364
+ // A preamble block that held only document-media annotations is now empty —
365
+ // drop it so a doc-spanning narration doesn't leave a phantom 5s block at the
366
+ // top of the timeline. Only the heading-less preamble (rootBlocks[0]) can be
367
+ // emptied this way.
368
+ if (
369
+ rootBlocks.length > 0 &&
370
+ !rootBlocks[0].sourceHeading &&
371
+ (rootBlocks[0].contents?.length ?? 0) === 0 &&
372
+ (rootBlocks[0].children?.length ?? 0) === 0 &&
373
+ !rootBlocks[0].media
374
+ ) {
375
+ rootBlocks.shift();
376
+ }
377
+
246
378
  const allBlocks = flattenBlocks(rootBlocks);
379
+
380
+ // Structured template data: ```json data / ```yaml data fences in a
381
+ // block's body parse into `templateData`; for dataTable blocks the first
382
+ // GFM table supplies headers/rows when not explicitly provided. Parse
383
+ // failures degrade gracefully (the fence stays visible as code) and are
384
+ // recorded as diagnostics.
385
+ for (const block of allBlocks) {
386
+ applyStructuredData(block, diagnostics);
387
+ }
388
+
389
+ // Content-aware template auto-pick (default on): unannotated heading
390
+ // blocks whose body carries a strong signal get the matching template
391
+ // plus inputs derived from that body. Strict derivation — when the
392
+ // essential input can't be built (e.g. feature without an image src),
393
+ // the block keeps the structural default.
394
+ if ((options?.autoTemplates ?? true) && !frontmatterDisablesAutoTemplates(markdownDoc)) {
395
+ applyAutoTemplates(rootBlocks, resolveTemplateName(defaultTemplate), { featureIndex: 0 });
396
+ }
397
+
398
+ // Duplicate ids make connections and navigation ambiguous. Generated
399
+ // slugs are already deduped; this catches author-pinned `{#id}` clashes.
400
+ const seenIds = new Map<string, Block>();
401
+ for (const block of allBlocks) {
402
+ if (seenIds.has(block.id)) {
403
+ diagnostics.push({
404
+ severity: 'error',
405
+ code: 'duplicate-id',
406
+ message: `Duplicate block id "${block.id}" — later connections and links are ambiguous`,
407
+ blockId: block.id,
408
+ ...lineOf(block),
409
+ });
410
+ } else {
411
+ seenIds.set(block.id, block);
412
+ }
413
+ }
414
+
415
+ // connectsTo targets must resolve to a block id in this doc.
416
+ for (const block of allBlocks) {
417
+ for (const conn of block.connectsTo ?? []) {
418
+ if (!seenIds.has(conn.target)) {
419
+ diagnostics.push({
420
+ severity: 'warning',
421
+ code: 'unresolved-connection',
422
+ message: `Block "${block.id}" connects to unknown target "${conn.target}"`,
423
+ blockId: block.id,
424
+ ...lineOf(block),
425
+ });
426
+ }
427
+ }
428
+ }
429
+
430
+ // Calculate reading-time-based durations and generate captions
247
431
  const minDuration = 3; // seconds — minimum for blocks with little/no text
248
432
  const phrases: CaptionPhrase[] = [];
249
433
 
250
- // First pass: compute duration from body-content reading time
434
+ // First pass: compute duration from body-content reading time.
435
+ // Skip blocks that pinned an explicit duration via a heading attribute —
436
+ // author intent wins over reading-time heuristics.
251
437
  for (const block of allBlocks) {
438
+ if (pinnedHeadingMeta(block.sourceHeading).duration != null) continue;
252
439
  const bodyText = getBlockBodyText(block);
253
440
  if (bodyText.length > 0) {
254
441
  const estimate = estimateReadingTime(bodyText);
@@ -258,10 +445,16 @@ export function markdownToDoc(markdownDoc: MarkdownDocument, options?: MarkdownT
258
445
  }
259
446
  }
260
447
 
261
- // Second pass: assign start times sequentially and build caption phrases
448
+ // Second pass: assign start times sequentially and build caption phrases.
449
+ // Blocks with an explicit `startTime` attribute keep their pinned value;
450
+ // the running cursor still advances by their duration so following blocks
451
+ // sequence after them.
262
452
  let currentTime = 0;
263
453
  for (const block of allBlocks) {
264
- block.startTime = currentTime;
454
+ const explicitStart = pinnedHeadingMeta(block.sourceHeading).startTime;
455
+ if (explicitStart == null) {
456
+ block.startTime = currentTime;
457
+ }
265
458
 
266
459
  // Generate caption phrases from the block's body content
267
460
  const bodyText = getBlockBodyText(block);
@@ -283,9 +476,20 @@ export function markdownToDoc(markdownDoc: MarkdownDocument, options?: MarkdownT
283
476
  currentTime += block.duration;
284
477
  }
285
478
 
479
+ // `generatedAt` is only stamped when the caller provides a timestamp —
480
+ // conversion itself never reads the clock, so identical markdown always
481
+ // converts to an identical Doc.
286
482
  const captions: CaptionTrack | undefined =
287
- phrases.length > 0 ? { phrases, generatedAt: new Date().toISOString(), version: 1 } : undefined;
483
+ phrases.length > 0
484
+ ? {
485
+ phrases,
486
+ ...(options?.captionsGeneratedAt ? { generatedAt: options.captionsGeneratedAt } : {}),
487
+ version: 1,
488
+ }
489
+ : undefined;
288
490
 
491
+ const customTemplates = readCustomTemplatesFromFrontmatter(markdownDoc.frontmatter);
492
+ const customThemes = readCustomThemesFromFrontmatter(markdownDoc.frontmatter);
289
493
  const doc: Doc = {
290
494
  articleId,
291
495
  duration: currentTime,
@@ -295,6 +499,10 @@ export function markdownToDoc(markdownDoc: MarkdownDocument, options?: MarkdownT
295
499
  },
296
500
  ...(captions ? { captions } : {}),
297
501
  ...(markdownDoc.frontmatter ? { frontmatter: markdownDoc.frontmatter } : {}),
502
+ ...(customTemplates ? { customTemplates } : {}),
503
+ ...(customThemes ? { customThemes } : {}),
504
+ ...(diagnostics.length > 0 ? { diagnostics } : {}),
505
+ ...(documentMedia.length > 0 ? { documentMedia } : {}),
298
506
  };
299
507
 
300
508
  // Auto-generate cover startBlock from the first H1 heading
@@ -327,6 +535,29 @@ export function flattenBlocks(blocks: Block[]): Block[] {
327
535
  return result;
328
536
  }
329
537
 
538
+ /**
539
+ * Flatten the block tree into the list of *independently renderable*
540
+ * blocks — like {@link flattenBlocks}, but it does NOT descend into the
541
+ * children of a container template (`diagram`, `drawing`; see
542
+ * `isContainerTemplate`). Those children are consumed by the parent's
543
+ * render (as nodes / shapes), so they must not also surface as their own
544
+ * slides or sections.
545
+ *
546
+ * Use this anywhere a doc is flattened for rendering (slideshow, video,
547
+ * static pages). Use {@link flattenBlocks} when you genuinely need every
548
+ * block regardless of role — validation, timing, duplicate-id checks.
549
+ */
550
+ export function flattenRenderableBlocks(blocks: Block[]): Block[] {
551
+ const result: Block[] = [];
552
+ for (const block of blocks) {
553
+ result.push(block);
554
+ if (block.children && !isContainerTemplate(block.template)) {
555
+ result.push(...flattenRenderableBlocks(block.children));
556
+ }
557
+ }
558
+ return result;
559
+ }
560
+
330
561
  /**
331
562
  * Count the total number of blocks in a nested tree (including children at all levels).
332
563
  */
@@ -352,6 +583,96 @@ export function getBlockDepth(block: Block): number {
352
583
  // Internal helpers
353
584
  // ============================================
354
585
 
586
+ /** Source line of a block's heading, when position info is available. */
587
+ function lineOf(block: Block): { line: number } | Record<string, never> {
588
+ const line = block.sourceHeading?.position?.start.line;
589
+ return line != null ? { line } : {};
590
+ }
591
+
592
+ /**
593
+ * Populate `block.templateData` from structured body content:
594
+ * 1. Every ```json data / ```yaml data fence in the body merges its parsed
595
+ * object in (later fences override earlier keys).
596
+ * 2. For `dataTable` blocks, the first GFM table supplies headers/rows/align
597
+ * unless the author already provided them via a fence or `{[…]}` params.
598
+ * Parse failures are recorded on `diagnostics` and skip the fence.
599
+ */
600
+ function applyStructuredData(block: Block, diagnostics: DocDiagnostic[]): void {
601
+ let data: Record<string, unknown> | undefined;
602
+
603
+ for (const node of block.contents ?? []) {
604
+ if (node.type !== 'code' || !isDataFence(node)) continue;
605
+ const result = parseDataFence(node);
606
+ if (result.error) {
607
+ diagnostics.push({
608
+ severity: 'error',
609
+ code: 'data-fence-parse',
610
+ message: `Data fence in block "${block.id}": ${result.error}`,
611
+ blockId: block.id,
612
+ ...(node.position ? { line: node.position.start.line } : lineOf(block)),
613
+ });
614
+ continue;
615
+ }
616
+ data = { ...data, ...result.data };
617
+ }
618
+
619
+ if (block.template === 'dataTable') {
620
+ const provided = (key: string) =>
621
+ (data && key in data) || (block.templateOverrides && key in block.templateOverrides);
622
+ if (!provided('headers') && !provided('rows')) {
623
+ const table = findFirstTable(block.contents);
624
+ if (table) {
625
+ data = { ...extractTableData(table), ...data };
626
+ }
627
+ }
628
+ }
629
+
630
+ if (data && Object.keys(data).length > 0) {
631
+ block.templateData = data;
632
+ }
633
+ }
634
+
635
+ /** Truthiness of the `squisq-auto-templates` frontmatter kill-switch. */
636
+ function frontmatterDisablesAutoTemplates(markdownDoc: MarkdownDocument): boolean {
637
+ const v = markdownDoc.frontmatter?.['squisq-auto-templates'];
638
+ return v === false || v === 'false' || v === 'off' || v === 'no' || v === 0;
639
+ }
640
+
641
+ /**
642
+ * Walk heading blocks and apply content-aware templates to the ones that
643
+ * still hold the structural default. Children of container templates
644
+ * (diagram/drawing/layout) are consumed by their parent and never
645
+ * re-templated. `state.featureIndex` alternates left/right feature
646
+ * composition across the document.
647
+ */
648
+ function applyAutoTemplates(
649
+ blocks: Block[],
650
+ resolvedDefault: string,
651
+ state: { featureIndex: number },
652
+ ): void {
653
+ for (const block of blocks) {
654
+ const annotated = !!block.sourceHeading?.templateAnnotation?.template;
655
+ if (block.sourceHeading && !annotated && block.template === resolvedDefault) {
656
+ const profile = profileBlockContents(block.contents ?? []);
657
+ const picked = pickAutoTemplate(profile, state.featureIndex);
658
+ if (picked) {
659
+ const inputs = deriveTemplateInputs(picked, block.title ?? '', block.contents);
660
+ if (inputs) {
661
+ if (picked === 'leftFeature' || picked === 'rightFeature') state.featureIndex += 1;
662
+ block.template = picked;
663
+ block.autoTemplate = true;
664
+ // Author-provided structured data (```json data fences) wins
665
+ // over derived inputs.
666
+ block.templateData = { ...inputs, ...block.templateData };
667
+ }
668
+ }
669
+ }
670
+ if (block.children && block.children.length > 0 && !isContainerTemplate(block.template)) {
671
+ applyAutoTemplates(block.children, resolvedDefault, state);
672
+ }
673
+ }
674
+ }
675
+
355
676
  /**
356
677
  * Extract the plain text from a block's body contents (excluding heading text).
357
678
  */
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Media-annotation extraction.
3
+ *
4
+ * Lifts standalone body-level media annotations — `{[audio …]}` / `{[video …]}`
5
+ * — out of a block's markdown contents into typed {@link MediaClip}s. A block
6
+ * can hold several clips (unlike the single heading annotation). An annotation
7
+ * flagged `anchor=document` (or `span=document`) becomes a document-spanning
8
+ * clip instead. The annotation grammar is the shared one used for heading
9
+ * annotations, so quoting/escaping behave identically.
10
+ */
11
+
12
+ import {
13
+ matchTrailingTemplateAnnotation,
14
+ tokenizeAttrTokens,
15
+ splitKeyValueToken,
16
+ } from '../markdown/attrTokens.js';
17
+ import { parseTimeSeconds } from '../markdown/annotationCoercion.js';
18
+ import type { MarkdownBlockNode } from '../markdown/types.js';
19
+ import type { MediaClip } from '../schemas/Media.js';
20
+
21
+ /** Annotation template names that produce a timed media clip. */
22
+ const MEDIA_TEMPLATES = new Set(['audio', 'video', 'media']);
23
+
24
+ interface ParsedAnnotation {
25
+ template?: string;
26
+ params: Record<string, string>;
27
+ }
28
+
29
+ /**
30
+ * Parse a paragraph node that is *exactly* a `{[…]}` annotation (nothing
31
+ * before or after). Returns the template + params, or null when the node
32
+ * isn't a standalone annotation.
33
+ */
34
+ function parseStandaloneAnnotation(node: MarkdownBlockNode): ParsedAnnotation | null {
35
+ if (node.type !== 'paragraph') return null;
36
+ const children = node.children ?? [];
37
+ if (children.length !== 1 || children[0].type !== 'text') return null;
38
+ const text = children[0].value.trim();
39
+ const match = matchTrailingTemplateAnnotation(text);
40
+ // index 0 means the whole (trimmed) paragraph is the annotation.
41
+ if (!match || match.index !== 0) return null;
42
+
43
+ const tokens = tokenizeAttrTokens(match.inner.trim());
44
+ const firstIsParam = tokens.length > 0 && tokens[0].indexOf('=') > 0;
45
+ const template = firstIsParam || tokens.length === 0 ? undefined : tokens[0];
46
+ const startIdx = firstIsParam ? 0 : 1;
47
+ const params: Record<string, string> = {};
48
+ for (let i = startIdx; i < tokens.length; i++) {
49
+ const kv = splitKeyValueToken(tokens[i]);
50
+ if (kv) params[kv.key] = kv.value;
51
+ }
52
+ return { template, params };
53
+ }
54
+
55
+ function time(raw: string | undefined): number | null {
56
+ if (raw == null) return null;
57
+ return parseTimeSeconds(raw);
58
+ }
59
+
60
+ /** Build a {@link MediaClip} from a parsed media annotation, or null if invalid. */
61
+ function toMediaClip(parsed: ParsedAnnotation, id: string): MediaClip | null {
62
+ const { template, params } = parsed;
63
+ if (!template || !MEDIA_TEMPLATES.has(template)) return null;
64
+ const src = params.src;
65
+ if (!src) return null;
66
+
67
+ const kind: MediaClip['kind'] = template === 'video' ? 'video' : 'audio';
68
+ const anchor: MediaClip['anchor'] =
69
+ params.anchor === 'document' || params.span === 'document' ? 'document' : 'block';
70
+ const clip: MediaClip = { id, src, kind, startAt: time(params.startAt) ?? 0, anchor };
71
+
72
+ const clipStart = time(params.clipStart);
73
+ const clipEnd = time(params.clipEnd);
74
+ if (clipStart != null) clip.clipStart = clipStart;
75
+ if (clipEnd != null) clip.clipEnd = clipEnd;
76
+ // `spillover` or `spillover=true` → true; absent/`false` → omitted.
77
+ if (params.spillover === 'true' || params.spillover === '') clip.spillover = true;
78
+
79
+ return clip;
80
+ }
81
+
82
+ export interface MediaExtraction {
83
+ /** Block-anchored clips (anchor='block'). */
84
+ media: MediaClip[];
85
+ /** Document-spanning clips (anchor='document'). */
86
+ documentMedia: MediaClip[];
87
+ /** Contents with the lifted media-annotation paragraphs removed. */
88
+ remaining: MarkdownBlockNode[];
89
+ }
90
+
91
+ /**
92
+ * Walk `contents`, lifting every standalone media annotation into a
93
+ * {@link MediaClip}. `makeId(src, index)` produces stable clip ids.
94
+ */
95
+ export function extractMediaFromContents(
96
+ contents: MarkdownBlockNode[] | undefined,
97
+ makeId: (src: string, index: number) => string,
98
+ ): MediaExtraction {
99
+ const media: MediaClip[] = [];
100
+ const documentMedia: MediaClip[] = [];
101
+ const remaining: MarkdownBlockNode[] = [];
102
+ let index = 0;
103
+
104
+ for (const node of contents ?? []) {
105
+ const parsed = parseStandaloneAnnotation(node);
106
+ const clip = parsed ? toMediaClip(parsed, '') : null;
107
+ if (parsed && clip) {
108
+ clip.id = makeId(clip.src, index++);
109
+ const line = node.position?.start.line;
110
+ if (line != null) clip.sourceLine = line;
111
+ (clip.anchor === 'document' ? documentMedia : media).push(clip);
112
+ } else {
113
+ remaining.push(node);
114
+ }
115
+ }
116
+
117
+ return { media, documentMedia, remaining };
118
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Doc-scoped theme resolution.
3
+ *
4
+ * The theme analog of how `buildRegistry` resolves custom templates: pure and
5
+ * doc-scoped, with no global state. `resolveThemeForDoc` looks up the active
6
+ * theme id in the doc's own custom themes first, then falls back to the
7
+ * built-in / globally-registered themes via `resolveTheme`.
8
+ *
9
+ * It accepts either a squisq `Doc` (which carries a typed `customThemes`
10
+ * array) or anything with raw `frontmatter` — notably a `MarkdownDocument`,
11
+ * which is the shape every export pipeline pivots through. In the latter case
12
+ * the inline themes are decoded from the `squisq-custom-themes` frontmatter
13
+ * payload. Either way, resolution needs no `registerTheme` call — an inline
14
+ * custom theme ships with the doc, exactly like custom templates.
15
+ */
16
+
17
+ import type { Theme } from '../schemas/Theme.js';
18
+ import { resolveTheme } from '../schemas/themeLibrary.js';
19
+ import { readFrontmatterThemeId } from '../markdown/utils.js';
20
+ import { readCustomThemesFromFrontmatter } from './customThemesFrontmatter.js';
21
+
22
+ /**
23
+ * The minimal shape `resolveThemeForDoc` needs. Satisfied by both the squisq
24
+ * `Doc` (typed `customThemes` + `themeId`) and a `MarkdownDocument` (raw
25
+ * `frontmatter` carrying the encoded payload).
26
+ */
27
+ export interface ThemeResolvable {
28
+ themeId?: string;
29
+ customThemes?: Theme[];
30
+ frontmatter?: Record<string, unknown>;
31
+ }
32
+
33
+ /**
34
+ * Resolve the Theme a document should render with.
35
+ *
36
+ * @param doc - the document (may carry inline custom themes plus a `themeId`
37
+ * / `squisq-theme` frontmatter selector).
38
+ * @param explicitId - an id that overrides the doc's own selection (e.g. the
39
+ * editor's theme dropdown, or an export `--theme` option). When omitted, the
40
+ * doc's `themeId` / frontmatter theme id is used.
41
+ * @returns the matching inline custom theme (doc-scoped) when present, else
42
+ * the built-in / registered theme for that id, else the default theme.
43
+ */
44
+ export function resolveThemeForDoc(
45
+ doc: ThemeResolvable | null | undefined,
46
+ explicitId?: string,
47
+ ): Theme {
48
+ const id = explicitId ?? doc?.themeId ?? readFrontmatterThemeId(doc?.frontmatter);
49
+ // Prefer the already-parsed list on a squisq Doc; otherwise decode the
50
+ // frontmatter payload (the shape exports see on a MarkdownDocument).
51
+ const inline = doc?.customThemes ?? readCustomThemesFromFrontmatter(doc?.frontmatter);
52
+ const custom = id ? inline?.find((t) => t.id === id) : undefined;
53
+ if (custom) return custom;
54
+ return resolveTheme(id);
55
+ }