@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
@@ -59,4 +59,55 @@ function assertImageEditDoc(value: unknown, filename: string): asserts value is
59
59
  if (!Array.isArray(v.layers)) {
60
60
  throw new Error(`readImageEditDoc: ${filename} layers must be an array`);
61
61
  }
62
+ v.layers.forEach((layer, i) => assertLayer(layer, i, filename));
63
+ }
64
+
65
+ const VALID_LAYER_TYPES = new Set(['image', 'text', 'shape', 'path']);
66
+
67
+ function assertLayer(value: unknown, index: number, filename: string): void {
68
+ const ctx = `${filename} layers[${index}]`;
69
+ if (!value || typeof value !== 'object') {
70
+ throw new Error(`readImageEditDoc: ${ctx} must be an object`);
71
+ }
72
+ const layer = value as Record<string, unknown>;
73
+
74
+ if (typeof layer['id'] !== 'string') {
75
+ throw new Error(`readImageEditDoc: ${ctx} must have a string id`);
76
+ }
77
+ if (typeof layer['type'] !== 'string' || !VALID_LAYER_TYPES.has(layer['type'])) {
78
+ throw new Error(
79
+ `readImageEditDoc: ${ctx} type must be one of image|text|shape, got ${String(layer['type'])}`,
80
+ );
81
+ }
82
+
83
+ const pos = layer['position'];
84
+ if (
85
+ !pos ||
86
+ typeof pos !== 'object' ||
87
+ (typeof (pos as Record<string, unknown>)['x'] !== 'number' &&
88
+ typeof (pos as Record<string, unknown>)['x'] !== 'string') ||
89
+ (typeof (pos as Record<string, unknown>)['y'] !== 'number' &&
90
+ typeof (pos as Record<string, unknown>)['y'] !== 'string')
91
+ ) {
92
+ throw new Error(`readImageEditDoc: ${ctx} position must have numeric or string x and y`);
93
+ }
94
+
95
+ const content = layer['content'];
96
+ if (!content || typeof content !== 'object') {
97
+ throw new Error(`readImageEditDoc: ${ctx} content must be an object`);
98
+ }
99
+ const c = content as Record<string, unknown>;
100
+
101
+ if (layer['type'] === 'image' && typeof c['src'] !== 'string') {
102
+ throw new Error(`readImageEditDoc: ${ctx} (image) content.src must be a string`);
103
+ }
104
+ if (layer['type'] === 'text' && typeof c['text'] !== 'string') {
105
+ throw new Error(`readImageEditDoc: ${ctx} (text) content.text must be a string`);
106
+ }
107
+ if (layer['type'] === 'shape' && typeof c['shape'] !== 'string') {
108
+ throw new Error(`readImageEditDoc: ${ctx} (shape) content.shape must be a string`);
109
+ }
110
+ if (layer['type'] === 'path' && typeof c['d'] !== 'string') {
111
+ throw new Error(`readImageEditDoc: ${ctx} (path) content.d must be a string`);
112
+ }
62
113
  }
package/src/index.ts CHANGED
@@ -6,7 +6,9 @@ export * from './markdown/index.js';
6
6
  export * from './timing/index.js';
7
7
  export * from './random/index.js';
8
8
  export * from './generate/index.js';
9
+ export * from './transform/index.js';
9
10
  export * from './versions/index.js';
10
11
  export * from './jsonForm/index.js';
11
12
  export * from './imageEdit/index.js';
13
+ export * from './icons/index.js';
12
14
  export * from './recommend/index.js';
@@ -0,0 +1,295 @@
1
+ /**
2
+ * Heading-attribute value coercion.
3
+ *
4
+ * The Pandoc-style heading attribute block `{#id .class key=value}` parses
5
+ * to a flat `Record<string, string>` of `key → raw value`. This module
6
+ * coerces a known subset of keys to typed values (numbers, time-in-seconds,
7
+ * `BlockConnection[]`) so downstream consumers don't have to re-parse them.
8
+ *
9
+ * Unknown keys are returned in `metadata` as raw strings. Malformed known-key
10
+ * values are dropped from the typed result and reported via `warnings` (the
11
+ * raw string is preserved in `params` upstream for lossless round-tripping —
12
+ * coercion failures do not corrupt the source).
13
+ */
14
+
15
+ import type { BlockConnection } from './types.js';
16
+ import type { TransitionDirection, TransitionType } from '../schemas/Transitions.js';
17
+ import {
18
+ normalizeTransitionDirection,
19
+ normalizeTransitionType,
20
+ TRANSITION_TYPES,
21
+ TRANSITION_DIRECTIONS,
22
+ } from '../schemas/Transitions.js';
23
+
24
+ /**
25
+ * Registry of known block-meta keys and their coercion strategies.
26
+ *
27
+ * Adding a new typed key: add an entry here, add the typed field to
28
+ * `HeadingAttributes.blockMeta` in `types.ts`, and apply the coerced value
29
+ * in `markdownToDoc.ts`.
30
+ */
31
+ export const KNOWN_BLOCK_META_KEYS = {
32
+ x: 'number',
33
+ y: 'number',
34
+ startTime: 'time',
35
+ duration: 'time',
36
+ connectsTo: 'connectionList',
37
+ transition: 'transition',
38
+ transitionDuration: 'time',
39
+ transitionDirection: 'transitionDirection',
40
+ } as const;
41
+
42
+ export type KnownBlockMetaKey = keyof typeof KNOWN_BLOCK_META_KEYS;
43
+
44
+ /**
45
+ * Editor-facing description of a known block-meta key: what it does, and
46
+ * either its closed set of valid values or a free-form format hint. This is
47
+ * the single source the markdown editor's `{[name key=value]}` attribute
48
+ * autocomplete reads from, so the suggestion list stays in lockstep with
49
+ * `KNOWN_BLOCK_META_KEYS` and the transition vocabulary rather than drifting
50
+ * in a hand-maintained copy. `values`/`valueHint` are mutually exclusive: a
51
+ * key has a closed enum (`values`) or a format hint (`valueHint`), not both.
52
+ */
53
+ export interface BlockMetaKeyDescriptor {
54
+ key: KnownBlockMetaKey;
55
+ /** One-line description, shown as the completion item's detail. */
56
+ description: string;
57
+ /** Closed set of valid values, for keys backed by an enum. */
58
+ values?: readonly string[];
59
+ /** Format hint shown when the value is free-form (no closed set). */
60
+ valueHint?: string;
61
+ }
62
+
63
+ /**
64
+ * Ordered descriptors for every key in `KNOWN_BLOCK_META_KEYS`. Order is the
65
+ * suggestion display order: the transition family first (the most common
66
+ * authoring case), then timeline timing, then diagram geometry/links.
67
+ */
68
+ export const BLOCK_META_KEY_DESCRIPTORS: readonly BlockMetaKeyDescriptor[] = [
69
+ {
70
+ key: 'transition',
71
+ description: 'Block-to-block transition effect',
72
+ values: TRANSITION_TYPES,
73
+ },
74
+ {
75
+ key: 'transitionDuration',
76
+ description: 'How long the transition lasts',
77
+ valueHint: 'seconds — e.g. 0.7, 700ms',
78
+ },
79
+ {
80
+ key: 'transitionDirection',
81
+ description: 'Directional variant for the transition',
82
+ values: TRANSITION_DIRECTIONS,
83
+ },
84
+ {
85
+ key: 'startTime',
86
+ description: 'Timeline start time of this block',
87
+ valueHint: 'mm:ss or seconds — e.g. 01:30, 5, 1500ms',
88
+ },
89
+ {
90
+ key: 'duration',
91
+ description: 'How long this block lasts',
92
+ valueHint: 'mm:ss or seconds — e.g. 45, 1500ms',
93
+ },
94
+ {
95
+ key: 'x',
96
+ description: 'Horizontal position on the diagram canvas',
97
+ valueHint: 'number — e.g. 600',
98
+ },
99
+ {
100
+ key: 'y',
101
+ description: 'Vertical position on the diagram canvas',
102
+ valueHint: 'number — e.g. 300',
103
+ },
104
+ {
105
+ key: 'connectsTo',
106
+ description: 'Diagram connections to other blocks',
107
+ valueHint: 'comma-separated target or target:type — e.g. foo,bar:flow',
108
+ },
109
+ ];
110
+
111
+ /**
112
+ * The shape of the typed values produced by coercion. Mirrors
113
+ * `HeadingAttributes.blockMeta` in `types.ts`.
114
+ */
115
+ export interface CoercedBlockMeta {
116
+ x?: number;
117
+ y?: number;
118
+ startTime?: number;
119
+ duration?: number;
120
+ connectsTo?: BlockConnection[];
121
+ transition?: {
122
+ type: TransitionType;
123
+ duration?: number;
124
+ direction?: TransitionDirection;
125
+ };
126
+ }
127
+
128
+ export interface CoerceResult {
129
+ /** Typed values for known keys whose coercion succeeded. */
130
+ blockMeta: CoercedBlockMeta;
131
+ /** Raw string values for keys not in the known-key registry. */
132
+ metadata: Record<string, string>;
133
+ /** Human-readable diagnostics — currently emitted for coercion failures. */
134
+ warnings: string[];
135
+ }
136
+
137
+ /**
138
+ * Coerce a flat `key → raw string` map into typed block-meta + an
139
+ * untyped metadata bag, per the `KNOWN_BLOCK_META_KEYS` registry.
140
+ */
141
+ export function coerceAnnotationValues(params: Record<string, string>): CoerceResult {
142
+ const blockMeta: CoercedBlockMeta = {};
143
+ const metadata: Record<string, string> = {};
144
+ const warnings: string[] = [];
145
+ let transitionType: TransitionType | null = null;
146
+ let transitionDuration: number | undefined;
147
+ let transitionDirection: TransitionDirection | undefined;
148
+
149
+ for (const [key, raw] of Object.entries(params)) {
150
+ const kind = (KNOWN_BLOCK_META_KEYS as Record<string, string>)[key];
151
+ if (!kind) {
152
+ metadata[key] = raw;
153
+ continue;
154
+ }
155
+ if (kind === 'number') {
156
+ const n = parseNumber(raw);
157
+ if (n == null) {
158
+ warnings.push(`Invalid number for "${key}": ${JSON.stringify(raw)}`);
159
+ } else {
160
+ (blockMeta as Record<string, unknown>)[key] = n;
161
+ }
162
+ } else if (kind === 'time') {
163
+ const s = parseTimeSeconds(raw);
164
+ if (s == null) {
165
+ warnings.push(`Invalid time for "${key}": ${JSON.stringify(raw)}`);
166
+ } else if (key === 'transitionDuration') {
167
+ transitionDuration = s;
168
+ } else {
169
+ (blockMeta as Record<string, unknown>)[key] = s;
170
+ }
171
+ } else if (kind === 'connectionList') {
172
+ const { list, warning } = parseConnectionList(raw);
173
+ if (warning) warnings.push(`"${key}": ${warning}`);
174
+ blockMeta.connectsTo = list;
175
+ } else if (kind === 'transition') {
176
+ const transition = normalizeTransitionType(raw);
177
+ if (transition == null) {
178
+ warnings.push(`Invalid transition for "${key}": ${JSON.stringify(raw)}`);
179
+ } else {
180
+ transitionType = transition;
181
+ }
182
+ } else if (kind === 'transitionDirection') {
183
+ const direction = normalizeTransitionDirection(raw);
184
+ if (direction == null) {
185
+ warnings.push(`Invalid transition direction for "${key}": ${JSON.stringify(raw)}`);
186
+ } else {
187
+ transitionDirection = direction;
188
+ }
189
+ }
190
+ }
191
+
192
+ if (transitionType) {
193
+ blockMeta.transition = {
194
+ type: transitionType,
195
+ ...(transitionDuration !== undefined ? { duration: transitionDuration } : {}),
196
+ ...(transitionDirection !== undefined ? { direction: transitionDirection } : {}),
197
+ };
198
+ }
199
+
200
+ return { blockMeta, metadata, warnings };
201
+ }
202
+
203
+ // ============================================
204
+ // Coercers
205
+ // ============================================
206
+
207
+ /** Parse a finite number from a string. Returns null on failure. */
208
+ function parseNumber(raw: string): number | null {
209
+ if (raw.trim() === '') return null;
210
+ const n = Number(raw);
211
+ return Number.isFinite(n) ? n : null;
212
+ }
213
+
214
+ const TIME_BARE_RE = /^\d+(?:\.\d+)?$/;
215
+ const TIME_MS_RE = /^(\d+(?:\.\d+)?)ms$/;
216
+ const TIME_MMSS_RE = /^(\d+):(\d{1,2})(?:\.(\d+))?$/;
217
+
218
+ /**
219
+ * Parse a time value to seconds. Accepts:
220
+ * - bare number: `5` → 5, `5.5` → 5.5
221
+ * - `mm:ss`: `01:30` → 90
222
+ * - `mm:ss.ms`: `01:30.500` → 90.5
223
+ * - `1500ms` → 1.5
224
+ *
225
+ * Returns null on malformed input.
226
+ */
227
+ export function parseTimeSeconds(raw: string): number | null {
228
+ const trimmed = raw.trim();
229
+ if (!trimmed) return null;
230
+
231
+ if (TIME_BARE_RE.test(trimmed)) {
232
+ const n = Number(trimmed);
233
+ return Number.isFinite(n) ? n : null;
234
+ }
235
+
236
+ const msMatch = trimmed.match(TIME_MS_RE);
237
+ if (msMatch) {
238
+ const n = Number(msMatch[1]);
239
+ return Number.isFinite(n) ? n / 1000 : null;
240
+ }
241
+
242
+ const mmssMatch = trimmed.match(TIME_MMSS_RE);
243
+ if (mmssMatch) {
244
+ const mins = Number(mmssMatch[1]);
245
+ const secs = Number(mmssMatch[2]);
246
+ const frac = mmssMatch[3] ? Number(`0.${mmssMatch[3]}`) : 0;
247
+ if (!Number.isFinite(mins) || !Number.isFinite(secs) || !Number.isFinite(frac)) {
248
+ return null;
249
+ }
250
+ if (secs >= 60) return null;
251
+ return mins * 60 + secs + frac;
252
+ }
253
+
254
+ return null;
255
+ }
256
+
257
+ /**
258
+ * Parse a comma-separated connection list. Each entry is `target` or
259
+ * `target:type`. Empty entries (`a,,b`) are filtered with a warning; an
260
+ * entirely empty input yields an empty list with no warning.
261
+ */
262
+ export function parseConnectionList(raw: string): {
263
+ list: BlockConnection[];
264
+ warning: string | null;
265
+ } {
266
+ const trimmed = raw.trim();
267
+ if (!trimmed) return { list: [], warning: null };
268
+
269
+ const list: BlockConnection[] = [];
270
+ let droppedEmpty = false;
271
+ for (const part of trimmed.split(',')) {
272
+ const entry = part.trim();
273
+ if (!entry) {
274
+ droppedEmpty = true;
275
+ continue;
276
+ }
277
+ const colonIdx = entry.indexOf(':');
278
+ if (colonIdx < 0) {
279
+ list.push({ target: entry });
280
+ } else {
281
+ const target = entry.slice(0, colonIdx).trim();
282
+ const type = entry.slice(colonIdx + 1).trim();
283
+ if (!target) {
284
+ droppedEmpty = true;
285
+ continue;
286
+ }
287
+ list.push(type ? { target, type } : { target });
288
+ }
289
+ }
290
+
291
+ return {
292
+ list,
293
+ warning: droppedEmpty ? 'dropped empty connection entries' : null,
294
+ };
295
+ }
@@ -0,0 +1,222 @@
1
+ /**
2
+ * Shared key=value attribute machinery for the two heading annotation forms:
3
+ * the squisq-native `{[templateName key=value …]}` template annotation and
4
+ * the Pandoc-style `{#id .class key=value}` attribute block.
5
+ *
6
+ * Both forms share one interior grammar — whitespace-separated tokens whose
7
+ * values may be quoted (double or single) to include spaces, brackets, or
8
+ * quote characters. This module is the single implementation of that
9
+ * grammar: one tokenizer, one value un/escaper, one quoting rule. The
10
+ * trailing-annotation recognizers live here too so the editor bridge
11
+ * (packages/editor-react/src/tiptapBridge.ts) stays in sync by importing
12
+ * them rather than copying regexes.
13
+ *
14
+ * Value syntax:
15
+ * - Unquoted: no whitespace, quotes, or `[ ] { }` (those would collide with
16
+ * the surrounding annotation delimiters), e.g. `columns=3`, `name=O'Brien`
17
+ * (a quote *inside* an unquoted value is literal).
18
+ * - Quoted: `key="value with spaces"` or `key='…'`. Inside a quoted run,
19
+ * `\` escapes the active quote character and itself; any other `\` is
20
+ * literal. Quoted values may contain `]` and `}`.
21
+ * - Serialization emits double quotes, switching to single quotes when the
22
+ * value contains a double quote (markdown character-escape resolution
23
+ * makes backslash-escaped quotes fragile in `.md` source, so picking the
24
+ * other quote character is preferred over escaping). A value containing
25
+ * BOTH quote characters falls back to double quotes with `\"` escapes —
26
+ * that survives the API path but is best avoided in markdown source.
27
+ */
28
+
29
+ // ============================================
30
+ // Trailing-annotation recognizers
31
+ // ============================================
32
+
33
+ /** Regex source for a double-quoted run with `\"` / `\\` escapes. */
34
+ const DQ_RUN = `"(?:[^"\\\\]|\\\\.)*"`;
35
+ /** Regex source for a single-quoted run with `\'` / `\\` escapes. */
36
+ const SQ_RUN = `'(?:[^'\\\\]|\\\\.)*'`;
37
+
38
+ /**
39
+ * Quote-aware match for a trailing `{[…]}` annotation: the interior is any
40
+ * mix of quoted runs and characters other than `]` and quotes, so quoted
41
+ * values may contain `]`. The trailing `[\s\]}]*` tolerates an accidental
42
+ * doubled `]}` that users sometimes type when learning the syntax.
43
+ */
44
+ const TEMPLATE_STRICT_RE = new RegExp(
45
+ `\\s*\\{\\[((?:[^\\]"']|${DQ_RUN}|${SQ_RUN})+)\\]\\}[\\s\\]}]*$`,
46
+ );
47
+
48
+ /**
49
+ * Legacy fallback matching the pre-quote-aware grammar (`[^\]]+` interior).
50
+ * Tried after the strict form so inputs with unbalanced quotes keep parsing
51
+ * exactly as they did before quote support landed.
52
+ */
53
+ const TEMPLATE_LEGACY_RE = /\s*\{\[([^\]]+)\]\}[\s\]}]*$/;
54
+
55
+ /**
56
+ * Quote-aware match for a trailing Pandoc `{…}` block. The negative
57
+ * lookahead `(?!\[)` keeps it from colliding with the `{[…]}` template
58
+ * form. Quoted values may contain `}`.
59
+ */
60
+ const PANDOC_STRICT_RE = new RegExp(`\\s*\\{(?!\\[)((?:[^}"']|${DQ_RUN}|${SQ_RUN})*)\\}\\s*$`);
61
+
62
+ /** Legacy fallback for the Pandoc block (`[^}]*` interior). */
63
+ const PANDOC_LEGACY_RE = /\s*\{(?!\[)([^}]*)\}\s*$/;
64
+
65
+ /** Result of matching a trailing annotation against a text run. */
66
+ export interface TrailingAnnotationMatch {
67
+ /** Interior of the brace block (between `{[`/`{` and `]}`/`}`), untrimmed. */
68
+ inner: string;
69
+ /** Offset of the match start (including leading whitespace) in the input. */
70
+ index: number;
71
+ }
72
+
73
+ function matchTrailing(
74
+ text: string,
75
+ strict: RegExp,
76
+ legacy: RegExp,
77
+ ): TrailingAnnotationMatch | null {
78
+ const m = strict.exec(text) ?? legacy.exec(text);
79
+ return m ? { inner: m[1], index: m.index } : null;
80
+ }
81
+
82
+ /**
83
+ * Match a trailing `{[templateName key=value …]}` annotation. Quote-aware
84
+ * (values may contain `]` when quoted), with a legacy fallback so inputs
85
+ * the old `[^\]]+` grammar accepted still match.
86
+ */
87
+ export function matchTrailingTemplateAnnotation(text: string): TrailingAnnotationMatch | null {
88
+ return matchTrailing(text, TEMPLATE_STRICT_RE, TEMPLATE_LEGACY_RE);
89
+ }
90
+
91
+ /**
92
+ * Match a trailing Pandoc `{#id .class key=value}` block. Quote-aware
93
+ * (values may contain `}` when quoted), with a legacy fallback.
94
+ */
95
+ export function matchTrailingPandocAttr(text: string): TrailingAnnotationMatch | null {
96
+ return matchTrailing(text, PANDOC_STRICT_RE, PANDOC_LEGACY_RE);
97
+ }
98
+
99
+ // ============================================
100
+ // Tokenizer
101
+ // ============================================
102
+
103
+ const WHITESPACE_RE = /\s/;
104
+
105
+ /**
106
+ * Quote-aware whitespace tokenizer for the interior of either annotation
107
+ * form.
108
+ *
109
+ * A quote run starts only at the beginning of a token or immediately after
110
+ * `=` — a quote elsewhere (e.g. `name=O'Brien`) is a literal character.
111
+ * Inside a run, `\` escapes the active quote character and itself; the
112
+ * escape pair is preserved in the returned token (callers strip and
113
+ * unescape via {@link splitKeyValueToken} / {@link unquoteAttrValue}).
114
+ * An unbalanced opening quote is tolerated: the run extends to the end of
115
+ * the input.
116
+ */
117
+ export function tokenizeAttrTokens(input: string): string[] {
118
+ const tokens: string[] = [];
119
+ let i = 0;
120
+ const n = input.length;
121
+ while (i < n) {
122
+ while (i < n && WHITESPACE_RE.test(input[i])) i++;
123
+ if (i >= n) break;
124
+
125
+ let token = '';
126
+ while (i < n && !WHITESPACE_RE.test(input[i])) {
127
+ const ch = input[i];
128
+ const atValueStart = token === '' || token.endsWith('=');
129
+ if ((ch === '"' || ch === "'") && atValueStart) {
130
+ token += ch;
131
+ i++;
132
+ while (i < n && input[i] !== ch) {
133
+ if (input[i] === '\\' && i + 1 < n && (input[i + 1] === ch || input[i + 1] === '\\')) {
134
+ token += input[i] + input[i + 1];
135
+ i += 2;
136
+ } else {
137
+ token += input[i];
138
+ i++;
139
+ }
140
+ }
141
+ if (i < n && input[i] === ch) {
142
+ token += ch;
143
+ i++;
144
+ }
145
+ } else {
146
+ token += ch;
147
+ i++;
148
+ }
149
+ }
150
+ if (token) tokens.push(token);
151
+ }
152
+ return tokens;
153
+ }
154
+
155
+ // ============================================
156
+ // Value un/escaping
157
+ // ============================================
158
+
159
+ const DQ_UNESCAPE_RE = /\\([\\"])/g;
160
+ const SQ_UNESCAPE_RE = /\\([\\'])/g;
161
+
162
+ /**
163
+ * Strip surrounding quotes from a raw token value and unescape the active
164
+ * quote character and backslash. Values not wrapped in matching quotes are
165
+ * returned verbatim (including any interior quotes or backslashes).
166
+ */
167
+ export function unquoteAttrValue(raw: string): string {
168
+ if (raw.length >= 2) {
169
+ const q = raw[0];
170
+ if ((q === '"' || q === "'") && raw.endsWith(q)) {
171
+ const body = raw.slice(1, -1);
172
+ return body.replace(q === '"' ? DQ_UNESCAPE_RE : SQ_UNESCAPE_RE, '$1');
173
+ }
174
+ }
175
+ return raw;
176
+ }
177
+
178
+ /**
179
+ * Split a `key=value` token into its parts, unquoting/unescaping the value.
180
+ * Returns null for tokens with no `=` past the first character (bare words,
181
+ * `#id`, `.class`, or a leading `=`).
182
+ */
183
+ export function splitKeyValueToken(token: string): { key: string; value: string } | null {
184
+ const eqIdx = token.indexOf('=');
185
+ if (eqIdx <= 0) return null;
186
+ return { key: token.slice(0, eqIdx), value: unquoteAttrValue(token.slice(eqIdx + 1)) };
187
+ }
188
+
189
+ // ============================================
190
+ // Serialization
191
+ // ============================================
192
+
193
+ const NEEDS_QUOTING_RE = /[\s"'[\]{}]/;
194
+ const DQ_ESCAPE_RE = /[\\"]/g;
195
+ const SQ_ESCAPE_RE = /[\\']/g;
196
+
197
+ /**
198
+ * Whether a value must be quoted to survive tokenization and the outer
199
+ * annotation regexes: any whitespace, quote character, bracket, or brace —
200
+ * or an empty value, which would otherwise serialize as a bare `key=`.
201
+ */
202
+ export function needsQuoting(value: string): boolean {
203
+ return value === '' || NEEDS_QUOTING_RE.test(value);
204
+ }
205
+
206
+ /**
207
+ * Serialize an attribute value, quoting when {@link needsQuoting} says the
208
+ * bare form would not round-trip.
209
+ *
210
+ * Double quotes are canonical; a value containing a double quote (but no
211
+ * single quote) is single-quoted instead, because markdown resolves
212
+ * backslash escapes in text runs before our parser sees them — switching
213
+ * the quote character round-trips through `.md` source where `\"` would
214
+ * not. Backslashes and the active quote character are escaped.
215
+ */
216
+ export function quoteAttrValue(value: string): string {
217
+ if (!needsQuoting(value)) return value;
218
+ if (value.includes('"') && !value.includes("'")) {
219
+ return `'${value.replace(SQ_ESCAPE_RE, (ch) => `\\${ch}`)}'`;
220
+ }
221
+ return `"${value.replace(DQ_ESCAPE_RE, (ch) => `\\${ch}`)}"`;
222
+ }