@bendyline/squisq 2.0.1 → 2.2.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 (438) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE.md +24 -0
  3. package/dist/{ContentContainer-BXUlIf18.d.ts → ContentContainer-B2w9sUoL.d.ts} +15 -0
  4. package/dist/{Doc-ylqWKDc_.d.ts → Doc-BubIpWsp.d.ts} +160 -3
  5. package/dist/{ImageEditDoc-D828IXJ1.d.ts → ImageEditDoc-CGxk5CHc.d.ts} +1 -1
  6. package/dist/{annotationCoercion-Dr_DY9Hx.d.ts → annotationCoercion-PtRQhk5V.d.ts} +1 -1
  7. package/dist/chunk-2L55443L.js +0 -0
  8. package/dist/chunk-2ZWIXGAC.js +214 -0
  9. package/dist/{chunk-2PWOO4ZE.js → chunk-32R2RZAO.js} +72 -3
  10. package/dist/chunk-3IGPAPQ7.js +645 -0
  11. package/dist/{chunk-QE7TWGVT.js → chunk-4VOD55SX.js} +0 -1
  12. package/dist/{chunk-3E5F2XMR.js → chunk-67L6WRJN.js} +0 -1
  13. package/dist/{chunk-5DKBFXPY.js → chunk-6ECMNUIP.js} +26 -18
  14. package/dist/{chunk-X6DUONGT.js → chunk-7ARJZYQY.js} +280 -128
  15. package/dist/{chunk-DBS6RIFL.js → chunk-7N4G32LG.js} +0 -1
  16. package/dist/{chunk-JOQYPRDZ.js → chunk-7YEZFHLS.js} +10 -8
  17. package/dist/{chunk-2UQOHYE2.js → chunk-7ZAAICW4.js} +0 -1
  18. package/dist/{chunk-66QO7XFB.js → chunk-ACZOVWX3.js} +117 -7
  19. package/dist/{chunk-5J4HKRJF.js → chunk-BAOV476U.js} +0 -1
  20. package/dist/chunk-BCCXTMN5.js +699 -0
  21. package/dist/{chunk-W4O2TX5I.js → chunk-C33GTPUZ.js} +579 -4
  22. package/dist/{chunk-MMPBOUK7.js → chunk-CB45YGAM.js} +7 -2
  23. package/dist/{chunk-CY2R2VPR.js → chunk-DYPMOPIW.js} +18 -2
  24. package/dist/{chunk-VR7UPJ7C.js → chunk-FCG3BIZN.js} +12 -1
  25. package/dist/{chunk-5UYI3RJB.js → chunk-FDYDYL77.js} +54 -40
  26. package/dist/{chunk-TFJVXUHH.js → chunk-I2O6W7DX.js} +1513 -79
  27. package/dist/{chunk-Q7LROV2H.js → chunk-NKNMGIIN.js} +0 -1
  28. package/dist/chunk-OPO5K4DZ.js +241 -0
  29. package/dist/{chunk-TUWMK62B.js → chunk-PUS54YU6.js} +45 -2
  30. package/dist/chunk-QKPXHDLR.js +0 -0
  31. package/dist/{chunk-GZY66SDN.js → chunk-R3KTTOMS.js} +0 -1
  32. package/dist/{chunk-PXLVXTLW.js → chunk-RS5AP3J4.js} +72 -15
  33. package/dist/chunk-WV5ARNDA.js +0 -0
  34. package/dist/{chunk-4X3JQXNM.js → chunk-XOFT65EX.js} +1 -2
  35. package/dist/{chunk-FVTQSNR7.js → chunk-XRW6P7IF.js} +13 -5
  36. package/dist/chunk-XWNNA3KE.js +0 -0
  37. package/dist/chunk-YZNGMV3G.js +0 -0
  38. package/dist/{chunk-R2YZTCLO.js → chunk-ZQKZSJAX.js} +1 -2
  39. package/dist/doc/index.d.ts +166 -12
  40. package/dist/doc/index.js +36 -17
  41. package/dist/generate/index.d.ts +2 -2
  42. package/dist/generate/index.js +2 -3
  43. package/dist/icons/index.js +3 -4
  44. package/dist/icons/inlineIconMarker.js +1 -2
  45. package/dist/imageEdit/index.d.ts +48 -17
  46. package/dist/imageEdit/index.js +3 -4
  47. package/dist/index.d.ts +13 -12
  48. package/dist/index.js +118 -33
  49. package/dist/jsonForm/index.d.ts +10 -3
  50. package/dist/jsonForm/index.js +8 -7
  51. package/dist/markdown/index.d.ts +75 -11
  52. package/dist/markdown/index.js +32 -7
  53. package/dist/materializePageSection-wSLA2A1g.d.ts +223 -0
  54. package/dist/narration/index.d.ts +16 -3
  55. package/dist/narration/index.js +13 -14
  56. package/dist/random/index.d.ts +11 -2
  57. package/dist/random/index.js +2 -3
  58. package/dist/recommend/index.d.ts +1 -1
  59. package/dist/recommend/index.js +3 -4
  60. package/dist/schemas/index.d.ts +31 -6
  61. package/dist/schemas/index.js +43 -6
  62. package/dist/spatial/index.d.ts +2 -1
  63. package/dist/spatial/index.js +1 -2
  64. package/dist/storage/index.d.ts +4 -2
  65. package/dist/storage/index.js +1 -2
  66. package/dist/{themeLibrary-RjVgLpUi.d.ts → themeLibrary-DU9mUmVl.d.ts} +1 -1
  67. package/dist/timing/index.js +3 -4
  68. package/dist/transform/index.d.ts +9 -10
  69. package/dist/transform/index.js +6 -7
  70. package/dist/{types-C4kiRn_k.d.ts → types-8QjefM9J.d.ts} +38 -2
  71. package/dist/{types-BwMPl2CB.d.ts → types-CUNc9biN.d.ts} +24 -1
  72. package/dist/versions/index.d.ts +14 -11
  73. package/dist/versions/index.js +2 -3
  74. package/package.json +4 -2
  75. package/dist/chunk-2PWOO4ZE.js.map +0 -1
  76. package/dist/chunk-2UQOHYE2.js.map +0 -1
  77. package/dist/chunk-3E5F2XMR.js.map +0 -1
  78. package/dist/chunk-4X3JQXNM.js.map +0 -1
  79. package/dist/chunk-5DKBFXPY.js.map +0 -1
  80. package/dist/chunk-5J4HKRJF.js.map +0 -1
  81. package/dist/chunk-5UYI3RJB.js.map +0 -1
  82. package/dist/chunk-66QO7XFB.js.map +0 -1
  83. package/dist/chunk-AMIR72JP.js +0 -380
  84. package/dist/chunk-AMIR72JP.js.map +0 -1
  85. package/dist/chunk-CY2R2VPR.js.map +0 -1
  86. package/dist/chunk-DBS6RIFL.js.map +0 -1
  87. package/dist/chunk-DNJKBAI7.js +0 -1
  88. package/dist/chunk-DNJKBAI7.js.map +0 -1
  89. package/dist/chunk-ET53IIEP.js +0 -1
  90. package/dist/chunk-ET53IIEP.js.map +0 -1
  91. package/dist/chunk-FVJUUTEM.js +0 -74
  92. package/dist/chunk-FVJUUTEM.js.map +0 -1
  93. package/dist/chunk-FVTQSNR7.js.map +0 -1
  94. package/dist/chunk-GZY66SDN.js.map +0 -1
  95. package/dist/chunk-JOQYPRDZ.js.map +0 -1
  96. package/dist/chunk-MMPBOUK7.js.map +0 -1
  97. package/dist/chunk-PGGGKYWG.js +0 -1
  98. package/dist/chunk-PGGGKYWG.js.map +0 -1
  99. package/dist/chunk-PXLVXTLW.js.map +0 -1
  100. package/dist/chunk-Q7LROV2H.js.map +0 -1
  101. package/dist/chunk-QE7TWGVT.js.map +0 -1
  102. package/dist/chunk-R2GC6RLD.js +0 -344
  103. package/dist/chunk-R2GC6RLD.js.map +0 -1
  104. package/dist/chunk-R2YZTCLO.js.map +0 -1
  105. package/dist/chunk-S7A5D7ZJ.js +0 -174
  106. package/dist/chunk-S7A5D7ZJ.js.map +0 -1
  107. package/dist/chunk-TFJVXUHH.js.map +0 -1
  108. package/dist/chunk-TUWMK62B.js.map +0 -1
  109. package/dist/chunk-V543AI2F.js +0 -1
  110. package/dist/chunk-V543AI2F.js.map +0 -1
  111. package/dist/chunk-VR7UPJ7C.js.map +0 -1
  112. package/dist/chunk-W4O2TX5I.js.map +0 -1
  113. package/dist/chunk-X6DUONGT.js.map +0 -1
  114. package/dist/chunk-ZLQKNOZQ.js +0 -1
  115. package/dist/chunk-ZLQKNOZQ.js.map +0 -1
  116. package/dist/doc/index.js.map +0 -1
  117. package/dist/generate/index.js.map +0 -1
  118. package/dist/icons/index.js.map +0 -1
  119. package/dist/icons/inlineIconMarker.js.map +0 -1
  120. package/dist/imageEdit/index.js.map +0 -1
  121. package/dist/index.js.map +0 -1
  122. package/dist/jsonForm/index.js.map +0 -1
  123. package/dist/markdown/index.js.map +0 -1
  124. package/dist/narration/index.js.map +0 -1
  125. package/dist/random/index.js.map +0 -1
  126. package/dist/recommend/index.js.map +0 -1
  127. package/dist/schemas/index.js.map +0 -1
  128. package/dist/spatial/index.js.map +0 -1
  129. package/dist/storage/index.js.map +0 -1
  130. package/dist/timing/index.js.map +0 -1
  131. package/dist/transform/index.js.map +0 -1
  132. package/dist/versions/index.js.map +0 -1
  133. package/src/__tests__/animationUtils.test.ts +0 -117
  134. package/src/__tests__/annotationCoercion.test.ts +0 -243
  135. package/src/__tests__/applyNarrationTiming.test.ts +0 -190
  136. package/src/__tests__/applyRenderStyle.test.ts +0 -146
  137. package/src/__tests__/asciiDiagramBattle.test.ts +0 -246
  138. package/src/__tests__/asciiDiagramDetect.test.ts +0 -162
  139. package/src/__tests__/asciiDiagramMapping.test.ts +0 -38
  140. package/src/__tests__/asciiDiagramParse.test.ts +0 -233
  141. package/src/__tests__/asciiDiagramPipeline.test.ts +0 -273
  142. package/src/__tests__/asciiDiagramRender.test.ts +0 -162
  143. package/src/__tests__/asciiDiagramRepair.test.ts +0 -84
  144. package/src/__tests__/asciiTimelineDetect.test.ts +0 -157
  145. package/src/__tests__/asciiTimelineParse.test.ts +0 -205
  146. package/src/__tests__/asciiTimelinePipeline.test.ts +0 -349
  147. package/src/__tests__/asciiTimelineRender.test.ts +0 -376
  148. package/src/__tests__/atmosphereLayers.test.ts +0 -108
  149. package/src/__tests__/attrTokens.test.ts +0 -167
  150. package/src/__tests__/colorUtils.test.ts +0 -112
  151. package/src/__tests__/contentContainer.test.ts +0 -325
  152. package/src/__tests__/contentExtractor.test.ts +0 -243
  153. package/src/__tests__/coverBlock.test.ts +0 -310
  154. package/src/__tests__/customTemplateSample.test.ts +0 -144
  155. package/src/__tests__/customTemplatesFrontmatter.test.ts +0 -221
  156. package/src/__tests__/customThemesFrontmatter.test.ts +0 -146
  157. package/src/__tests__/dataTable.test.ts +0 -145
  158. package/src/__tests__/diagramBlock.test.ts +0 -122
  159. package/src/__tests__/diagramLayout.test.ts +0 -134
  160. package/src/__tests__/diagramText.test.ts +0 -26
  161. package/src/__tests__/docToMarkdownMedia.test.ts +0 -83
  162. package/src/__tests__/drawing.test.ts +0 -109
  163. package/src/__tests__/drawingBlock.test.ts +0 -124
  164. package/src/__tests__/drawingLayout.test.ts +0 -171
  165. package/src/__tests__/fixtures/asciiDiagramBattle.ts +0 -512
  166. package/src/__tests__/fixtures/asciiDiagrams.ts +0 -287
  167. package/src/__tests__/fixtures/asciiTimelines.ts +0 -35
  168. package/src/__tests__/fixtures/treeviewFixtures.ts +0 -243
  169. package/src/__tests__/geohash.test.ts +0 -110
  170. package/src/__tests__/getLayers.test.ts +0 -243
  171. package/src/__tests__/getLayersFallback.test.ts +0 -103
  172. package/src/__tests__/haversine.test.ts +0 -63
  173. package/src/__tests__/iconResolve.test.ts +0 -122
  174. package/src/__tests__/imageEditExportSvg.test.ts +0 -70
  175. package/src/__tests__/imageEditState.test.ts +0 -74
  176. package/src/__tests__/imageEditVersions.test.ts +0 -243
  177. package/src/__tests__/inferDocumentTitle.test.ts +0 -50
  178. package/src/__tests__/inlineIconMarker.test.ts +0 -36
  179. package/src/__tests__/inputDescriptors.test.ts +0 -162
  180. package/src/__tests__/jsonForm.chooseControl.test.ts +0 -86
  181. package/src/__tests__/jsonForm.evaluateWhen.test.ts +0 -59
  182. package/src/__tests__/jsonForm.inferSchema.test.ts +0 -25
  183. package/src/__tests__/jsonForm.pointer.test.ts +0 -149
  184. package/src/__tests__/jsonForm.tokens.test.ts +0 -84
  185. package/src/__tests__/layoutBlock.test.ts +0 -83
  186. package/src/__tests__/layoutLayout.test.ts +0 -169
  187. package/src/__tests__/localForageAdapter.test.ts +0 -155
  188. package/src/__tests__/majorApiTypes.test.ts +0 -18
  189. package/src/__tests__/markdown.test.ts +0 -1009
  190. package/src/__tests__/markdownIcons.test.ts +0 -104
  191. package/src/__tests__/markdownSanitize.test.ts +0 -81
  192. package/src/__tests__/markdownToDoc.test.ts +0 -957
  193. package/src/__tests__/matchFontFamily.test.ts +0 -114
  194. package/src/__tests__/materializeBlockLayers.test.ts +0 -135
  195. package/src/__tests__/materializeTestUtils.ts +0 -17
  196. package/src/__tests__/mediaAnnotations.test.ts +0 -91
  197. package/src/__tests__/mediaSchedule.test.ts +0 -118
  198. package/src/__tests__/narrationAlign.test.ts +0 -150
  199. package/src/__tests__/narrationFeatures.test.ts +0 -71
  200. package/src/__tests__/narrationNuclei.test.ts +0 -45
  201. package/src/__tests__/narrationPacing.test.ts +0 -189
  202. package/src/__tests__/narrationScript.test.ts +0 -149
  203. package/src/__tests__/narrationSessionRepro.test.ts +0 -62
  204. package/src/__tests__/narrationSidecar.test.ts +0 -88
  205. package/src/__tests__/narrationSyllables.test.ts +0 -65
  206. package/src/__tests__/narrationTestSignals.ts +0 -167
  207. package/src/__tests__/narrationVad.test.ts +0 -66
  208. package/src/__tests__/pandocAttrParse.test.ts +0 -187
  209. package/src/__tests__/recommendTemplates.test.ts +0 -183
  210. package/src/__tests__/resolveDocTheme.test.ts +0 -69
  211. package/src/__tests__/rootExports.test.ts +0 -61
  212. package/src/__tests__/scopedContentContainer.test.ts +0 -109
  213. package/src/__tests__/seededRandom.test.ts +0 -142
  214. package/src/__tests__/shapeGeometry.test.ts +0 -138
  215. package/src/__tests__/shapeVocabulary.test.ts +0 -133
  216. package/src/__tests__/storage.test.ts +0 -60
  217. package/src/__tests__/structuredData.test.ts +0 -249
  218. package/src/__tests__/surface.test.ts +0 -68
  219. package/src/__tests__/templateAnnotationParse.test.ts +0 -160
  220. package/src/__tests__/templateInputs.test.ts +0 -69
  221. package/src/__tests__/templateMetadata.test.ts +0 -32
  222. package/src/__tests__/templates.test.ts +0 -710
  223. package/src/__tests__/themeCompile.test.ts +0 -225
  224. package/src/__tests__/themeValidator.test.ts +0 -131
  225. package/src/__tests__/timing.test.ts +0 -167
  226. package/src/__tests__/transformProvenance.test.ts +0 -160
  227. package/src/__tests__/transformV2.test.ts +0 -163
  228. package/src/__tests__/transitionNormalize.test.ts +0 -61
  229. package/src/__tests__/treeviewBattle.test.ts +0 -76
  230. package/src/__tests__/treeviewDetect.test.ts +0 -168
  231. package/src/__tests__/treeviewParse.test.ts +0 -118
  232. package/src/__tests__/treeviewPipeline.test.ts +0 -183
  233. package/src/__tests__/treeviewRender.test.ts +0 -91
  234. package/src/__tests__/validateDoc.test.ts +0 -260
  235. package/src/__tests__/versions.test.ts +0 -459
  236. package/src/doc/annotationBlocks.ts +0 -117
  237. package/src/doc/applyNarrationTiming.ts +0 -244
  238. package/src/doc/asciiDiagram/chars.ts +0 -210
  239. package/src/doc/asciiDiagram/detect.ts +0 -175
  240. package/src/doc/asciiDiagram/index.ts +0 -38
  241. package/src/doc/asciiDiagram/mapping.ts +0 -225
  242. package/src/doc/asciiDiagram/parse.ts +0 -1095
  243. package/src/doc/asciiDiagram/render.ts +0 -963
  244. package/src/doc/asciiDiagram/repair.ts +0 -400
  245. package/src/doc/asciiDiagram/types.ts +0 -65
  246. package/src/doc/asciiTimeline/detect.ts +0 -138
  247. package/src/doc/asciiTimeline/index.ts +0 -26
  248. package/src/doc/asciiTimeline/mapping.ts +0 -43
  249. package/src/doc/asciiTimeline/parse.ts +0 -870
  250. package/src/doc/asciiTimeline/render.ts +0 -427
  251. package/src/doc/asciiTimeline/types.ts +0 -73
  252. package/src/doc/asciiTimeline/wrappedFlow.ts +0 -427
  253. package/src/doc/audioMapping.ts +0 -442
  254. package/src/doc/customTemplatesFrontmatter.ts +0 -273
  255. package/src/doc/customThemesFrontmatter.ts +0 -95
  256. package/src/doc/docToMarkdown.ts +0 -284
  257. package/src/doc/index.ts +0 -127
  258. package/src/doc/markdownToDoc.ts +0 -1054
  259. package/src/doc/materializeBlockLayers.ts +0 -304
  260. package/src/doc/mediaAnnotations.ts +0 -120
  261. package/src/doc/resolveDocTheme.ts +0 -56
  262. package/src/doc/standaloneAnnotation.ts +0 -58
  263. package/src/doc/structuredData.ts +0 -301
  264. package/src/doc/templateInputs.ts +0 -423
  265. package/src/doc/templates/__tests__/customTemplate.test.ts +0 -170
  266. package/src/doc/templates/__tests__/customTemplateRegistry.test.ts +0 -124
  267. package/src/doc/templates/__tests__/listBlock.test.ts +0 -64
  268. package/src/doc/templates/accentImage.ts +0 -362
  269. package/src/doc/templates/captionUtils.ts +0 -56
  270. package/src/doc/templates/comparisonBar.ts +0 -173
  271. package/src/doc/templates/coverBlock.ts +0 -255
  272. package/src/doc/templates/customTemplate.ts +0 -51
  273. package/src/doc/templates/dataTable.ts +0 -102
  274. package/src/doc/templates/dateEvent.ts +0 -147
  275. package/src/doc/templates/definitionCard.ts +0 -140
  276. package/src/doc/templates/diagramBlock.ts +0 -403
  277. package/src/doc/templates/diagramLayout.ts +0 -159
  278. package/src/doc/templates/drawingBlock.ts +0 -325
  279. package/src/doc/templates/drawingLayout.ts +0 -539
  280. package/src/doc/templates/factCard.ts +0 -146
  281. package/src/doc/templates/fallbackBlock.ts +0 -123
  282. package/src/doc/templates/featureBlock.ts +0 -209
  283. package/src/doc/templates/fullBleedQuote.ts +0 -83
  284. package/src/doc/templates/imageWithCaption.ts +0 -186
  285. package/src/doc/templates/index.ts +0 -642
  286. package/src/doc/templates/inputDescriptors.ts +0 -451
  287. package/src/doc/templates/layoutBlock.ts +0 -43
  288. package/src/doc/templates/layoutLayout.ts +0 -243
  289. package/src/doc/templates/listBlock.ts +0 -207
  290. package/src/doc/templates/mapBlock.ts +0 -138
  291. package/src/doc/templates/metadata.ts +0 -130
  292. package/src/doc/templates/persistentLayers.ts +0 -526
  293. package/src/doc/templates/photoGrid.ts +0 -190
  294. package/src/doc/templates/pullQuote.ts +0 -141
  295. package/src/doc/templates/quoteBlock.ts +0 -141
  296. package/src/doc/templates/registry.ts +0 -88
  297. package/src/doc/templates/sectionHeader.ts +0 -120
  298. package/src/doc/templates/statHighlight.ts +0 -146
  299. package/src/doc/templates/templateNames.ts +0 -22
  300. package/src/doc/templates/timelineBlock.ts +0 -613
  301. package/src/doc/templates/titleBlock.ts +0 -150
  302. package/src/doc/templates/tokens/__tests__/resolveTokens.test.ts +0 -487
  303. package/src/doc/templates/tokens/resolveTokens.ts +0 -453
  304. package/src/doc/templates/treeBlock.ts +0 -131
  305. package/src/doc/templates/twoColumn.ts +0 -263
  306. package/src/doc/templates/videoPullQuote.ts +0 -142
  307. package/src/doc/templates/videoWithCaption.ts +0 -135
  308. package/src/doc/treeview/chars.ts +0 -72
  309. package/src/doc/treeview/detect.ts +0 -145
  310. package/src/doc/treeview/index.ts +0 -30
  311. package/src/doc/treeview/mapping.ts +0 -95
  312. package/src/doc/treeview/parse.ts +0 -201
  313. package/src/doc/treeview/render.ts +0 -41
  314. package/src/doc/treeview/types.ts +0 -43
  315. package/src/doc/utils/animationUtils.ts +0 -399
  316. package/src/doc/utils/applyRenderStyle.ts +0 -106
  317. package/src/doc/utils/diagramText.ts +0 -78
  318. package/src/doc/utils/imageTreatment.ts +0 -70
  319. package/src/doc/utils/nearest.ts +0 -59
  320. package/src/doc/utils/shapeGeometry.ts +0 -614
  321. package/src/doc/utils/themeUtils.ts +0 -243
  322. package/src/doc/validate.ts +0 -575
  323. package/src/generate/contentExtractor.ts +0 -921
  324. package/src/generate/index.ts +0 -18
  325. package/src/generate/templateMapper.ts +0 -177
  326. package/src/icons/iconData.ts +0 -31
  327. package/src/icons/index.ts +0 -26
  328. package/src/icons/inlineIconMarker.ts +0 -73
  329. package/src/icons/resolve.ts +0 -139
  330. package/src/imageEdit/ImageEditVersionManager.ts +0 -73
  331. package/src/imageEdit/export.ts +0 -410
  332. package/src/imageEdit/index.ts +0 -72
  333. package/src/imageEdit/persistence.ts +0 -113
  334. package/src/imageEdit/state.ts +0 -112
  335. package/src/imageEdit/versionPaths.ts +0 -44
  336. package/src/imageEdit/versions.ts +0 -152
  337. package/src/index.ts +0 -15
  338. package/src/internal/immutable.ts +0 -58
  339. package/src/jsonForm/chooseControl.ts +0 -88
  340. package/src/jsonForm/evaluateWhen.ts +0 -59
  341. package/src/jsonForm/index.ts +0 -32
  342. package/src/jsonForm/inferSchema.ts +0 -25
  343. package/src/jsonForm/pointer.ts +0 -154
  344. package/src/jsonForm/tokens.ts +0 -78
  345. package/src/jsonForm/types.ts +0 -167
  346. package/src/markdown/annotationCoercion.ts +0 -295
  347. package/src/markdown/attrTokens.ts +0 -243
  348. package/src/markdown/convert.ts +0 -1353
  349. package/src/markdown/htmlParse.ts +0 -212
  350. package/src/markdown/index.ts +0 -152
  351. package/src/markdown/parse.ts +0 -103
  352. package/src/markdown/sanitize.ts +0 -318
  353. package/src/markdown/stringify.ts +0 -207
  354. package/src/markdown/types.ts +0 -710
  355. package/src/markdown/utils.ts +0 -459
  356. package/src/narration/align.ts +0 -514
  357. package/src/narration/features.ts +0 -231
  358. package/src/narration/index.ts +0 -86
  359. package/src/narration/nuclei.ts +0 -118
  360. package/src/narration/pacing.ts +0 -211
  361. package/src/narration/script.ts +0 -239
  362. package/src/narration/session.ts +0 -100
  363. package/src/narration/sidecar.ts +0 -187
  364. package/src/narration/syllables.ts +0 -85
  365. package/src/narration/trace.ts +0 -50
  366. package/src/narration/types.ts +0 -299
  367. package/src/narration/vad.ts +0 -131
  368. package/src/ngeohash.d.ts +0 -11
  369. package/src/random/SeededRandom.ts +0 -127
  370. package/src/random/index.ts +0 -1
  371. package/src/recommend/index.ts +0 -16
  372. package/src/recommend/numberHighlight.ts +0 -25
  373. package/src/recommend/templates.ts +0 -393
  374. package/src/schemas/BlockTemplates.ts +0 -1046
  375. package/src/schemas/CustomTemplates.ts +0 -126
  376. package/src/schemas/Doc.ts +0 -1052
  377. package/src/schemas/ImageEditDoc.ts +0 -102
  378. package/src/schemas/LayoutStrategy.ts +0 -178
  379. package/src/schemas/Media.ts +0 -179
  380. package/src/schemas/MediaProvider.ts +0 -70
  381. package/src/schemas/Theme.ts +0 -406
  382. package/src/schemas/Transitions.ts +0 -224
  383. package/src/schemas/Types.ts +0 -15
  384. package/src/schemas/Viewport.ts +0 -91
  385. package/src/schemas/colorUtils.ts +0 -219
  386. package/src/schemas/fontStacks.ts +0 -339
  387. package/src/schemas/index.ts +0 -29
  388. package/src/schemas/themeCompile.ts +0 -237
  389. package/src/schemas/themeConstants.ts +0 -2
  390. package/src/schemas/themeLibrary.ts +0 -60
  391. package/src/schemas/themeValidator.ts +0 -426
  392. package/src/schemas/themes/bold.json +0 -48
  393. package/src/schemas/themes/cinematic.json +0 -111
  394. package/src/schemas/themes/documentary.json +0 -96
  395. package/src/schemas/themes/gezellig.json +0 -93
  396. package/src/schemas/themes/index.ts +0 -53
  397. package/src/schemas/themes/magazine.json +0 -89
  398. package/src/schemas/themes/minimalist.json +0 -45
  399. package/src/schemas/themes/morning-light.json +0 -85
  400. package/src/schemas/themes/standard-dark.json +0 -85
  401. package/src/schemas/themes/standard.json +0 -74
  402. package/src/schemas/themes/tech-dark.json +0 -101
  403. package/src/schemas/themes/warm-earth.json +0 -50
  404. package/src/spatial/Geohash.ts +0 -196
  405. package/src/spatial/Haversine.ts +0 -59
  406. package/src/spatial/index.ts +0 -2
  407. package/src/storage/ContentContainer.ts +0 -220
  408. package/src/storage/LocalForageAdapter.ts +0 -103
  409. package/src/storage/LocalStorageAdapter.ts +0 -57
  410. package/src/storage/MediaProviderFromContainer.ts +0 -92
  411. package/src/storage/MemoryStorageAdapter.ts +0 -37
  412. package/src/storage/ScopedContentContainer.ts +0 -143
  413. package/src/storage/Storage.ts +0 -28
  414. package/src/storage/index.ts +0 -9
  415. package/src/timing/index.ts +0 -17
  416. package/src/timing/narrationTiming.ts +0 -220
  417. package/src/timing/readingTime.ts +0 -94
  418. package/src/transform/applyTransform.ts +0 -122
  419. package/src/transform/blockAnalyzer.ts +0 -181
  420. package/src/transform/index.ts +0 -23
  421. package/src/transform/registry.ts +0 -198
  422. package/src/transform/styles/dataDriven.ts +0 -17
  423. package/src/transform/styles/documentary.ts +0 -17
  424. package/src/transform/styles/index.ts +0 -5
  425. package/src/transform/styles/magazine.ts +0 -18
  426. package/src/transform/styles/minimal.ts +0 -17
  427. package/src/transform/styles/narrative.ts +0 -18
  428. package/src/transform/templateSelector.ts +0 -389
  429. package/src/transform/timingAllocator.ts +0 -257
  430. package/src/transform/types.ts +0 -151
  431. package/src/versions/DocumentVersionManager.ts +0 -70
  432. package/src/versions/gitignore.ts +0 -34
  433. package/src/versions/index.ts +0 -56
  434. package/src/versions/operations.ts +0 -144
  435. package/src/versions/paths.ts +0 -51
  436. package/src/versions/snapshotStore.ts +0 -202
  437. package/src/versions/timestamp.ts +0 -48
  438. package/src/versions/types.ts +0 -93
@@ -1,10 +1,11 @@
1
1
  import {
2
2
  anchorPoint,
3
+ base64ToUtf8,
3
4
  connectorPath,
4
5
  lineStyleDasharray,
5
6
  shapePath,
6
7
  snapEndpoints
7
- } from "./chunk-TUWMK62B.js";
8
+ } from "./chunk-PUS54YU6.js";
8
9
  import {
9
10
  detectAsciiDiagram,
10
11
  detectAsciiTimeline,
@@ -19,7 +20,7 @@ import {
19
20
  parseAsciiTimeline,
20
21
  pickAutoTemplate,
21
22
  profileBlockContents
22
- } from "./chunk-5UYI3RJB.js";
23
+ } from "./chunk-FDYDYL77.js";
23
24
  import {
24
25
  DEFAULT_THEME,
25
26
  FRONTMATTER_CUSTOM_TEMPLATES_KEY,
@@ -30,7 +31,7 @@ import {
30
31
  resolveFontFamily,
31
32
  validateTheme,
32
33
  withAlpha
33
- } from "./chunk-W4O2TX5I.js";
34
+ } from "./chunk-C33GTPUZ.js";
34
35
  import {
35
36
  VIEWPORT_PRESETS,
36
37
  cloneData,
@@ -39,7 +40,7 @@ import {
39
40
  isPersistentLayerTemplate,
40
41
  isTemplateBlock,
41
42
  scaledFontSize2 as scaledFontSize
42
- } from "./chunk-5J4HKRJF.js";
43
+ } from "./chunk-BAOV476U.js";
43
44
  import {
44
45
  KNOWN_BLOCK_META_KEYS,
45
46
  coerceAnnotationValues,
@@ -48,25 +49,25 @@ import {
48
49
  parseTimeSeconds,
49
50
  splitKeyValueToken,
50
51
  tokenizeAttrTokens
51
- } from "./chunk-R2YZTCLO.js";
52
+ } from "./chunk-ZQKZSJAX.js";
52
53
  import {
53
54
  extractPlainText,
54
55
  readFrontmatterThemeId,
55
56
  walkMarkdownTree
56
- } from "./chunk-AMIR72JP.js";
57
+ } from "./chunk-BCCXTMN5.js";
57
58
  import {
58
59
  resolveBlockTransition
59
- } from "./chunk-QE7TWGVT.js";
60
+ } from "./chunk-4VOD55SX.js";
60
61
  import {
61
62
  estimateReadingTime
62
- } from "./chunk-4X3JQXNM.js";
63
+ } from "./chunk-XOFT65EX.js";
63
64
  import {
64
65
  estimateSpokenWordCount
65
- } from "./chunk-3E5F2XMR.js";
66
+ } from "./chunk-67L6WRJN.js";
66
67
  import {
67
68
  SeededRandom,
68
69
  hashString
69
- } from "./chunk-FVTQSNR7.js";
70
+ } from "./chunk-XRW6P7IF.js";
70
71
 
71
72
  // src/doc/templates/persistentLayers.ts
72
73
  var GRADIENT_PRESETS = {
@@ -198,14 +199,19 @@ function expandTitleCaption(config) {
198
199
  const isBottom = config.position.includes("bottom");
199
200
  const isLeft = config.position.includes("left");
200
201
  const pad = 3;
202
+ const thumbPad = 1.5;
201
203
  const pillHeight = hasSubtitle ? "15%" : "7%";
202
204
  const bgYPos = isBottom ? hasSubtitle ? "78%" : "84%" : "2%";
203
- const bgXPos = isLeft ? `${pad}%` : "68%";
204
- const thumbW = hasSubtitle ? "6%" : "5%";
205
+ const pillW = config.showThumbnail ? 30 : 28;
206
+ const pillX = isLeft ? pad : 100 - pad - pillW;
207
+ const bgXPos = `${pillX}%`;
208
+ const thumbWNum = hasSubtitle ? 6 : 5;
209
+ const thumbW = `${thumbWNum}%`;
205
210
  const thumbH = hasSubtitle ? "10%" : "5%";
206
- const thumbPad = 1.5;
207
- const textX = config.showThumbnail && isLeft ? `${pad + thumbPad + 6 + thumbPad}%` : `${pad + thumbPad}%`;
208
- const textWidth = config.showThumbnail ? "19%" : "24%";
211
+ const innerX = pillX + thumbPad;
212
+ const innerW = pillW - thumbPad * 2;
213
+ const textX = config.showThumbnail && isLeft ? `${innerX + thumbWNum + thumbPad}%` : `${innerX}%`;
214
+ const textWidth = config.showThumbnail ? `${innerW - thumbWNum - thumbPad}%` : `${innerW}%`;
209
215
  const titleYPos = isBottom ? hasSubtitle ? "80%" : "86%" : "4%";
210
216
  layers.push({
211
217
  type: "shape",
@@ -218,12 +224,12 @@ function expandTitleCaption(config) {
218
224
  position: {
219
225
  x: bgXPos,
220
226
  y: bgYPos,
221
- width: config.showThumbnail ? "30%" : "28%",
227
+ width: `${pillW}%`,
222
228
  height: pillHeight
223
229
  }
224
230
  });
225
231
  if (config.showThumbnail && config.thumbnailSrc) {
226
- const thumbX = isLeft ? `${pad + thumbPad}%` : "93%";
232
+ const thumbX = isLeft ? `${innerX}%` : `${pillX + pillW - thumbPad - thumbWNum}%`;
227
233
  const thumbY = isBottom ? hasSubtitle ? `${78 + thumbPad}%` : "85%" : "3%";
228
234
  layers.push({
229
235
  type: "image",
@@ -620,84 +626,6 @@ function titleBlock(input, context) {
620
626
  return layers;
621
627
  }
622
628
 
623
- // src/doc/templates/sectionHeader.ts
624
- function sectionHeader(input, context) {
625
- const { title = "", colorScheme = "blue", imageSrc, imageAlt, ambientMotion } = input;
626
- const { theme, layout } = context;
627
- const treatment = themedImageTreatment(context, input.imageTreatment);
628
- const colors = resolveColorScheme(context, colorScheme);
629
- const titleFontSize = themedFontSize(84, context, true);
630
- const layers = [];
631
- if (imageSrc) {
632
- layers.push({
633
- type: "image",
634
- id: "bg-image",
635
- content: {
636
- src: imageSrc,
637
- alt: imageAlt || title,
638
- fit: "cover",
639
- ...treatment ? { treatment } : {}
640
- },
641
- position: { x: 0, y: 0, width: "100%", height: "100%" },
642
- animation: ambientMotion ? { type: ambientMotion, duration: 8 } : { type: "slowZoom", duration: 8, direction: "in" }
643
- });
644
- layers.push({
645
- type: "shape",
646
- id: "overlay",
647
- content: {
648
- shape: "rect",
649
- fill: themedScrim(context)
650
- },
651
- position: { x: 0, y: 0, width: "100%", height: "100%" }
652
- });
653
- } else {
654
- layers.push({
655
- type: "shape",
656
- id: "bg",
657
- content: {
658
- shape: "rect",
659
- fill: colors.bg
660
- },
661
- position: { x: 0, y: 0, width: "100%", height: "100%" }
662
- });
663
- layers.push({
664
- type: "shape",
665
- id: "line-top",
666
- content: { shape: "rect", fill: `${colors.text}33` },
667
- position: { x: "50%", y: "40%", width: "20%", height: "2px", anchor: "center" }
668
- });
669
- layers.push({
670
- type: "shape",
671
- id: "line-bottom",
672
- content: { shape: "rect", fill: `${colors.text}33` },
673
- position: { x: "50%", y: "60%", width: "20%", height: "2px", anchor: "center" }
674
- });
675
- }
676
- layers.push({
677
- type: "text",
678
- id: "title",
679
- content: {
680
- text: title,
681
- style: {
682
- fontSize: titleFontSize,
683
- fontFamily: getThemeFont(context, "title"),
684
- fontWeight: "bold",
685
- color: imageSrc ? theme.colors.text : colors.text,
686
- textAlign: "center",
687
- shadow: shouldUseShadow(context)
688
- }
689
- },
690
- position: {
691
- x: "50%",
692
- y: "50%",
693
- anchor: "center",
694
- width: layout.maxTextWidth
695
- },
696
- animation: themedEntrance(context, "text", { type: "fadeIn", duration: 1.5 })
697
- });
698
- return layers;
699
- }
700
-
701
629
  // src/doc/templates/accentImage.ts
702
630
  var PERCENTAGE_RE = /^(\d+(?:\.\d+)?)\s*%?$/;
703
631
  var DEFAULT_LAYOUT = {
@@ -928,6 +856,92 @@ function adjustY(originalY, layout) {
928
856
  return yStr;
929
857
  }
930
858
 
859
+ // src/doc/templates/sectionHeader.ts
860
+ function sectionHeader(input, context) {
861
+ const { title = "", colorScheme = "blue", imageSrc, imageAlt, ambientMotion } = input;
862
+ const { theme, layout } = context;
863
+ const treatment = themedImageTreatment(context, input.imageTreatment);
864
+ const colors = resolveColorScheme(context, colorScheme);
865
+ const titleFontSize = themedFontSize(84, context, true);
866
+ const layers = [];
867
+ if (imageSrc) {
868
+ layers.push({
869
+ type: "image",
870
+ id: "bg-image",
871
+ content: {
872
+ src: imageSrc,
873
+ alt: imageAlt || title,
874
+ fit: "cover",
875
+ ...treatment ? { treatment } : {}
876
+ },
877
+ position: { x: 0, y: 0, width: "100%", height: "100%" },
878
+ // Route through mapAmbientMotion like every other image template: the
879
+ // authored vocabulary (`zoomIn`/`panLeft`/…) are NOT AnimationTypes, so
880
+ // passing them raw produced an unknown animation here while the same
881
+ // input animated correctly on imageWithCaption/coverBlock/accentImage.
882
+ animation: mapAmbientMotion(ambientMotion, 8) ?? {
883
+ type: "slowZoom",
884
+ duration: 8,
885
+ direction: "in"
886
+ }
887
+ });
888
+ layers.push({
889
+ type: "shape",
890
+ id: "overlay",
891
+ content: {
892
+ shape: "rect",
893
+ fill: themedScrim(context)
894
+ },
895
+ position: { x: 0, y: 0, width: "100%", height: "100%" }
896
+ });
897
+ } else {
898
+ layers.push({
899
+ type: "shape",
900
+ id: "bg",
901
+ content: {
902
+ shape: "rect",
903
+ fill: colors.bg
904
+ },
905
+ position: { x: 0, y: 0, width: "100%", height: "100%" }
906
+ });
907
+ layers.push({
908
+ type: "shape",
909
+ id: "line-top",
910
+ content: { shape: "rect", fill: withAlpha(colors.text, 0.2) },
911
+ position: { x: "50%", y: "40%", width: "20%", height: "2px", anchor: "center" }
912
+ });
913
+ layers.push({
914
+ type: "shape",
915
+ id: "line-bottom",
916
+ content: { shape: "rect", fill: withAlpha(colors.text, 0.2) },
917
+ position: { x: "50%", y: "60%", width: "20%", height: "2px", anchor: "center" }
918
+ });
919
+ }
920
+ layers.push({
921
+ type: "text",
922
+ id: "title",
923
+ content: {
924
+ text: title,
925
+ style: {
926
+ fontSize: titleFontSize,
927
+ fontFamily: getThemeFont(context, "title"),
928
+ fontWeight: "bold",
929
+ color: imageSrc ? theme.colors.text : colors.text,
930
+ textAlign: "center",
931
+ shadow: shouldUseShadow(context)
932
+ }
933
+ },
934
+ position: {
935
+ x: "50%",
936
+ y: "50%",
937
+ anchor: "center",
938
+ width: layout.maxTextWidth
939
+ },
940
+ animation: themedEntrance(context, "text", { type: "fadeIn", duration: 1.5 })
941
+ });
942
+ return layers;
943
+ }
944
+
931
945
  // src/doc/templates/statHighlight.ts
932
946
  function statHighlight(input, context) {
933
947
  const { stat, description, detail, colorScheme = "blue", accentImage } = input;
@@ -1520,7 +1534,7 @@ function imageWithCaption(input, context) {
1520
1534
  imageSrc,
1521
1535
  imageAlt,
1522
1536
  caption: rawCaption,
1523
- captionPosition: _captionPosition = "bottom",
1537
+ captionPosition = "bottom",
1524
1538
  ambientMotion,
1525
1539
  isTitle,
1526
1540
  subtitle,
@@ -1612,6 +1626,8 @@ function imageWithCaption(input, context) {
1612
1626
  return layers;
1613
1627
  }
1614
1628
  if (caption) {
1629
+ const captionBgY = captionPosition === "top" ? "7%" : captionPosition === "center" ? "42%" : "68%";
1630
+ const captionY = captionPosition === "top" ? "13%" : captionPosition === "center" ? "48%" : "74%";
1615
1631
  layers.push({
1616
1632
  type: "shape",
1617
1633
  id: "caption-gradient",
@@ -1621,7 +1637,7 @@ function imageWithCaption(input, context) {
1621
1637
  },
1622
1638
  position: {
1623
1639
  x: 0,
1624
- y: "68%",
1640
+ y: captionBgY,
1625
1641
  width: "100%",
1626
1642
  height: "16%"
1627
1643
  }
@@ -1643,7 +1659,7 @@ function imageWithCaption(input, context) {
1643
1659
  },
1644
1660
  position: {
1645
1661
  x: "50%",
1646
- y: "74%",
1662
+ y: captionY,
1647
1663
  anchor: "center",
1648
1664
  width: "78%"
1649
1665
  },
@@ -2158,6 +2174,8 @@ function getGridPositions(count, gridHeight, stacked) {
2158
2174
  const halfW = 50 - GAP / 2;
2159
2175
  const halfH = gridHeight / 2 - GAP / 2;
2160
2176
  switch (count) {
2177
+ case 1:
2178
+ return [{ x: 0, y: 0, w: 100, h: gridHeight }];
2161
2179
  case 2:
2162
2180
  if (stacked) {
2163
2181
  return [
@@ -2322,12 +2340,14 @@ function comparisonBar(input, context) {
2322
2340
  const barHeight = 6;
2323
2341
  const topBarY = 36;
2324
2342
  const bottomBarY = 58;
2325
- const maxValue = Math.max(leftValue, rightValue, 1);
2343
+ const leftExtent = Math.max(0, leftValue);
2344
+ const rightExtent = Math.max(0, rightValue);
2345
+ const maxValue = Math.max(leftExtent, rightExtent, 1);
2326
2346
  const longestLabelPx = Math.max(leftDisplay.length, rightDisplay.length) * valueFontSize * 0.58;
2327
2347
  const labelWidthPct = longestLabelPx / viewport.width * 100;
2328
2348
  const maxBarWidth = Math.max(20, Math.min(65, 96 - barStartX - labelWidthPct - 2));
2329
- const leftBarWidth = leftValue / maxValue * maxBarWidth;
2330
- const rightBarWidth = rightValue / maxValue * maxBarWidth;
2349
+ const leftBarWidth = leftExtent / maxValue * maxBarWidth;
2350
+ const rightBarWidth = rightExtent / maxValue * maxBarWidth;
2331
2351
  return [
2332
2352
  // Background
2333
2353
  {
@@ -2461,7 +2481,10 @@ function pullQuote(input, context) {
2461
2481
  ...treatment ? { treatment } : {}
2462
2482
  },
2463
2483
  position: { x: 0, y: 0, width: "100%", height: "100%" },
2464
- animation: ambientMotion ? { type: ambientMotion, duration: 15 } : void 0
2484
+ // Same authored `ambientMotion` vocabulary as every other image
2485
+ // template — map it to a real Ken Burns animation rather than passing
2486
+ // the token straight through as an animation type.
2487
+ animation: mapAmbientMotion(ambientMotion, 15)
2465
2488
  },
2466
2489
  // Dark overlay for text readability
2467
2490
  {
@@ -5227,7 +5250,7 @@ function fallbackBlockLayers(block, context, notice) {
5227
5250
  style: {
5228
5251
  fontSize: themedFontSize(18, context),
5229
5252
  fontFamily: getThemeFont(context, "body"),
5230
- color: `${colors.text}99`,
5253
+ color: withAlpha(colors.text, 0.6),
5231
5254
  textAlign: "center"
5232
5255
  }
5233
5256
  },
@@ -5255,9 +5278,10 @@ function materializeBlockLayersWithRuntime(block, options, runtime) {
5255
5278
  const effectivePersistentLayers = options.persistentLayers === false ? void 0 : options.persistentLayers ?? theme.persistentLayers;
5256
5279
  const existingLayers = block.layers;
5257
5280
  if (existingLayers && existingLayers.length > 0 && !isTemplateBlock(block)) {
5281
+ const layers = appendMermaidLayers(cloneData(existingLayers), block, theme, viewport);
5258
5282
  return {
5259
5283
  layers: injectPersistentLayers(
5260
- cloneData(existingLayers),
5284
+ layers,
5261
5285
  block,
5262
5286
  theme,
5263
5287
  effectivePersistentLayers,
@@ -5267,15 +5291,16 @@ function materializeBlockLayersWithRuntime(block, options, runtime) {
5267
5291
  };
5268
5292
  }
5269
5293
  if (!isTemplateBlock(block)) {
5294
+ const layers = appendMermaidLayers([], block, theme, viewport);
5270
5295
  return {
5271
5296
  layers: injectPersistentLayers(
5272
- [],
5297
+ layers,
5273
5298
  block,
5274
5299
  theme,
5275
5300
  effectivePersistentLayers,
5276
5301
  runtime.expandedPersistentLayers
5277
5302
  ),
5278
- source: "empty"
5303
+ source: layers.length > 0 ? "rich-content" : "empty"
5279
5304
  };
5280
5305
  }
5281
5306
  const context = runtime.templateContext ? cloneData(runtime.templateContext) : createTemplateContext(theme, blockIndex, totalBlocks, viewport);
@@ -5283,9 +5308,10 @@ function materializeBlockLayersWithRuntime(block, options, runtime) {
5283
5308
  const execution = executeTemplateMaterialization(block, context, runtime.registry);
5284
5309
  if (execution.status === "ok") {
5285
5310
  const styledLayers = runtime.applyRenderStyle !== false ? applyRenderStyleToLayers(execution.layers, block, theme) : execution.layers;
5311
+ const layers = appendMermaidLayers(styledLayers, block, theme, viewport);
5286
5312
  return {
5287
5313
  layers: injectPersistentLayers(
5288
- styledLayers,
5314
+ layers,
5289
5315
  block,
5290
5316
  theme,
5291
5317
  effectivePersistentLayers,
@@ -5296,21 +5322,28 @@ function materializeBlockLayersWithRuntime(block, options, runtime) {
5296
5322
  }
5297
5323
  const diagnostic = toLayerMaterializationDiagnostic(block.template, execution);
5298
5324
  if ((options.failureMode ?? "fallback") === "empty") {
5325
+ const layers = appendMermaidLayers([], block, theme, viewport);
5299
5326
  return {
5300
5327
  layers: injectPersistentLayers(
5301
- [],
5328
+ layers,
5302
5329
  block,
5303
5330
  theme,
5304
5331
  effectivePersistentLayers,
5305
5332
  runtime.expandedPersistentLayers
5306
5333
  ),
5307
- source: "empty",
5334
+ source: layers.length > 0 ? "rich-content" : "empty",
5308
5335
  diagnostic
5309
5336
  };
5310
5337
  }
5338
+ const fallbackLayers = appendMermaidLayers(
5339
+ fallbackBlockLayers(block, context, diagnostic.message),
5340
+ block,
5341
+ theme,
5342
+ viewport
5343
+ );
5311
5344
  return {
5312
5345
  layers: injectPersistentLayers(
5313
- fallbackBlockLayers(block, context, diagnostic.message),
5346
+ fallbackLayers,
5314
5347
  block,
5315
5348
  theme,
5316
5349
  effectivePersistentLayers,
@@ -5320,6 +5353,109 @@ function materializeBlockLayersWithRuntime(block, options, runtime) {
5320
5353
  diagnostic
5321
5354
  };
5322
5355
  }
5356
+ function mermaidSources(block) {
5357
+ return (block.contents ?? []).filter(
5358
+ (node) => node.type === "code" && node.lang?.trim().toLowerCase() === "mermaid"
5359
+ ).map((node) => node.value).filter((source) => source.trim().length > 0);
5360
+ }
5361
+ function resolvePositionValue(value, dimension) {
5362
+ if (value === void 0) return 0;
5363
+ if (typeof value === "number") return value;
5364
+ const percent = value.match(/^\s*(-?\d+(?:\.\d+)?)%\s*$/);
5365
+ if (percent) return Number(percent[1]) / 100 * dimension;
5366
+ const numeric = Number.parseFloat(value);
5367
+ return Number.isFinite(numeric) ? numeric : 0;
5368
+ }
5369
+ function positionRect(position, viewport, fallbackWidth, fallbackHeight) {
5370
+ const width = position.width ? resolvePositionValue(position.width, viewport.width) : fallbackWidth;
5371
+ const height = position.height ? resolvePositionValue(position.height, viewport.height) : fallbackHeight;
5372
+ let x = resolvePositionValue(position.x, viewport.width);
5373
+ let y = resolvePositionValue(position.y, viewport.height);
5374
+ const anchor = position.anchor ?? "top-left";
5375
+ if (anchor === "center") {
5376
+ x -= width / 2;
5377
+ y -= height / 2;
5378
+ } else {
5379
+ if (anchor.endsWith("right")) x -= width;
5380
+ if (anchor.startsWith("bottom")) y -= height;
5381
+ }
5382
+ return { x, y, width, height };
5383
+ }
5384
+ function overlapArea(a, b) {
5385
+ const width = Math.max(0, Math.min(a.x + a.width, b.x + b.width) - Math.max(a.x, b.x));
5386
+ const height = Math.max(0, Math.min(a.y + a.height, b.y + b.height) - Math.max(a.y, b.y));
5387
+ return width * height;
5388
+ }
5389
+ function mermaidRegion(layers, viewport) {
5390
+ const occupied = layers.filter((layer) => layer.type !== "shape" && layer.type !== "path" && layer.type !== "mermaid").map(
5391
+ (layer) => positionRect(
5392
+ layer.position,
5393
+ viewport,
5394
+ layer.type === "text" ? viewport.width * 0.45 : viewport.width * 0.5,
5395
+ layer.type === "text" ? viewport.height * 0.2 : viewport.height * 0.55
5396
+ )
5397
+ );
5398
+ if (occupied.length === 0) {
5399
+ return {
5400
+ x: viewport.width * 0.06,
5401
+ y: viewport.height * 0.08,
5402
+ width: viewport.width * 0.88,
5403
+ height: viewport.height * 0.84
5404
+ };
5405
+ }
5406
+ const candidates = [
5407
+ {
5408
+ x: viewport.width * 0.52,
5409
+ y: viewport.height * 0.12,
5410
+ width: viewport.width * 0.44,
5411
+ height: viewport.height * 0.76
5412
+ },
5413
+ {
5414
+ x: viewport.width * 0.04,
5415
+ y: viewport.height * 0.12,
5416
+ width: viewport.width * 0.44,
5417
+ height: viewport.height * 0.76
5418
+ },
5419
+ {
5420
+ x: viewport.width * 0.15,
5421
+ y: viewport.height * 0.53,
5422
+ width: viewport.width * 0.7,
5423
+ height: viewport.height * 0.41
5424
+ }
5425
+ ];
5426
+ return candidates.reduce((best, candidate) => {
5427
+ const score = occupied.reduce((sum, rect) => sum + overlapArea(candidate, rect), 0);
5428
+ const bestScore = occupied.reduce((sum, rect) => sum + overlapArea(best, rect), 0);
5429
+ return score < bestScore ? candidate : best;
5430
+ });
5431
+ }
5432
+ function appendMermaidLayers(layers, block, theme, viewport) {
5433
+ const sources = mermaidSources(block);
5434
+ if (sources.length === 0 || layers.some((layer) => layer.type === "mermaid")) return layers;
5435
+ const region = mermaidRegion(layers, viewport);
5436
+ const columns = sources.length === 1 ? 1 : 2;
5437
+ const rows = Math.ceil(sources.length / columns);
5438
+ const gap = Math.min(viewport.width, viewport.height) * 0.018;
5439
+ const width = (region.width - gap * (columns - 1)) / columns;
5440
+ const height = (region.height - gap * (rows - 1)) / rows;
5441
+ const mermaidLayers = sources.map((source, index) => ({
5442
+ id: `${block.id}-mermaid-${index + 1}`,
5443
+ type: "mermaid",
5444
+ position: {
5445
+ x: region.x + index % columns * (width + gap),
5446
+ y: region.y + Math.floor(index / columns) * (height + gap),
5447
+ width,
5448
+ height
5449
+ },
5450
+ content: {
5451
+ source,
5452
+ background: theme.colors.backgroundLight,
5453
+ foreground: theme.colors.text,
5454
+ padding: Math.max(12, Math.round(Math.min(width, height) * 0.025))
5455
+ }
5456
+ }));
5457
+ return [...layers, ...mermaidLayers];
5458
+ }
5323
5459
  function executeTemplateMaterialization(templateBlock, context, registry) {
5324
5460
  const safeTemplateBlock = cloneData(templateBlock);
5325
5461
  const safeContext = cloneData(context);
@@ -5497,6 +5633,17 @@ function isStandardLightCover(context) {
5497
5633
  const { theme } = context;
5498
5634
  return theme.id === "standard" && relativeLuminance(theme.colors.background) > 0.85;
5499
5635
  }
5636
+ var COVER_SCRIM_STOPS = [
5637
+ { pos: 0, alpha: 0.95 },
5638
+ { pos: 38, alpha: 0.86 },
5639
+ { pos: 58, alpha: 0.4 },
5640
+ { pos: 78, alpha: 0.1 },
5641
+ { pos: 100, alpha: 0 }
5642
+ ];
5643
+ function coverScrimGradient(background) {
5644
+ const stops = COVER_SCRIM_STOPS.map((s) => `${withAlpha(background, s.alpha)} ${s.pos}%`);
5645
+ return `linear-gradient(0deg, ${stops.join(", ")})`;
5646
+ }
5500
5647
  function coverBlock(input, context) {
5501
5648
  const treatment = themedImageTreatment(context, input.imageTreatment);
5502
5649
  const { heroSrc, heroAlt, title, subtitle, ambientMotion, heroCredit, heroLicense } = input;
@@ -5527,7 +5674,7 @@ function coverBlock(input, context) {
5527
5674
  id: "cover-gradient",
5528
5675
  content: {
5529
5676
  shape: "rect",
5530
- fill: "linear-gradient(0deg, rgba(0,0,0,0.8) 0%, rgba(0,0,0,0.4) 40%, rgba(0,0,0,0.1) 70%, transparent 100%)"
5677
+ fill: coverScrimGradient(theme.colors.background)
5531
5678
  },
5532
5679
  position: { x: 0, y: 0, width: "100%", height: "100%" }
5533
5680
  }
@@ -6152,7 +6299,7 @@ function findFirstList(contents) {
6152
6299
  // src/doc/templateInputs.ts
6153
6300
  function extractBodyPlainText(contents) {
6154
6301
  if (!contents || contents.length === 0) return "";
6155
- return contents.map((n) => extractPlainText(n)).join("\n").trim();
6302
+ return contents.filter((node) => !(node.type === "code" && node.lang?.trim().toLowerCase() === "mermaid")).map((n) => extractPlainText(n)).join("\n").trim();
6156
6303
  }
6157
6304
  function extractListItems(contents) {
6158
6305
  if (!contents) return [];
@@ -6489,15 +6636,6 @@ function renameKeys(value, map) {
6489
6636
  function isDefaultViewport(v) {
6490
6637
  return !v || v.width === DEFAULT_VIEWPORT.width && v.height === DEFAULT_VIEWPORT.height;
6491
6638
  }
6492
- function base64ToUtf8(b64) {
6493
- if (typeof globalThis.atob === "function") {
6494
- const binary = globalThis.atob(b64);
6495
- const bytes = new Uint8Array(binary.length);
6496
- for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);
6497
- return new TextDecoder().decode(bytes);
6498
- }
6499
- return Buffer.from(b64, "base64").toString("utf-8");
6500
- }
6501
6639
  function readCustomTemplatesFromFrontmatter(frontmatter) {
6502
6640
  if (!frontmatter) return void 0;
6503
6641
  const candidates = normalizeCandidates(frontmatter[FRONTMATTER_CUSTOM_TEMPLATES_KEY]);
@@ -6977,10 +7115,18 @@ function expandStandaloneAnnotations(blocks, makeId, defaultDuration) {
6977
7115
  makeId,
6978
7116
  defaultDuration
6979
7117
  });
6980
- if (produced.length > 0) {
6981
- block.contents = leading;
7118
+ if (produced.length === 0) {
7119
+ out.push(block);
7120
+ continue;
7121
+ }
7122
+ block.contents = leading;
7123
+ const nestable = (block.children?.length ?? 0) > 0 && !isContainerTemplate(block.template);
7124
+ if (nestable) {
7125
+ block.children = [...produced, ...block.children];
7126
+ out.push(block);
7127
+ } else {
7128
+ out.push(block, ...produced);
6982
7129
  }
6983
- out.push(block, ...produced);
6984
7130
  }
6985
7131
  return out;
6986
7132
  }
@@ -7701,7 +7847,11 @@ function buildNarrationTimingJson(script, alignment, durationSec, options) {
7701
7847
  duration: Number.isFinite(durationSec) && durationSec >= 0 ? durationSec : 0,
7702
7848
  bookmarks,
7703
7849
  blocks,
7704
- ...options?.cameraOffsetSec !== void 0 ? { cameraOffsetSec: options.cameraOffsetSec } : {},
7850
+ // Write only what `parseNarrationTimingJson` will read back, so the codec
7851
+ // is a round-trip pair. A non-finite value would serialize to `null`
7852
+ // (JSON has no NaN) and be dropped on parse anyway — omitting it here
7853
+ // keeps the emitted sidecar honest rather than carrying a dead field.
7854
+ ...finiteNumber(options?.cameraOffsetSec) ? { cameraOffsetSec: options.cameraOffsetSec } : {},
7705
7855
  generator: {
7706
7856
  name: "squisq-teleprompter",
7707
7857
  method: "dsp-align",
@@ -7712,6 +7862,9 @@ function buildNarrationTimingJson(script, alignment, durationSec, options) {
7712
7862
  function finiteNonNegative(value) {
7713
7863
  return typeof value === "number" && Number.isFinite(value) && value >= 0;
7714
7864
  }
7865
+ function finiteNumber(value) {
7866
+ return typeof value === "number" && Number.isFinite(value);
7867
+ }
7715
7868
  function parseNarrationTimingJson(data) {
7716
7869
  try {
7717
7870
  const text = typeof data === "string" ? data : new TextDecoder().decode(data instanceof Uint8Array ? data : new Uint8Array(data));
@@ -7765,7 +7918,7 @@ function parseNarrationTimingJson(data) {
7765
7918
  duration: raw.duration,
7766
7919
  bookmarks,
7767
7920
  blocks,
7768
- ...finiteNonNegative(raw.cameraOffsetSec) ? { cameraOffsetSec: raw.cameraOffsetSec } : {},
7921
+ ...finiteNumber(raw.cameraOffsetSec) ? { cameraOffsetSec: raw.cameraOffsetSec } : {},
7769
7922
  ...typeof raw.generator === "object" && raw.generator !== null ? { generator: raw.generator } : {}
7770
7923
  };
7771
7924
  } catch {
@@ -7795,11 +7948,11 @@ export {
7795
7948
  themedScrim,
7796
7949
  getTemplateHint,
7797
7950
  titleBlock,
7798
- sectionHeader,
7799
7951
  DEFAULT_LAYOUT,
7800
7952
  getAccentLayout,
7801
7953
  createAccentLayers,
7802
7954
  adjustY,
7955
+ sectionHeader,
7803
7956
  statHighlight,
7804
7957
  quoteBlock,
7805
7958
  factCard,
@@ -7897,4 +8050,3 @@ export {
7897
8050
  buildNarrationTimingJson,
7898
8051
  parseNarrationTimingJson
7899
8052
  };
7900
- //# sourceMappingURL=chunk-X6DUONGT.js.map
@@ -78,4 +78,3 @@ export {
78
78
  iconGlyph,
79
79
  suggestIcons
80
80
  };
81
- //# sourceMappingURL=chunk-DBS6RIFL.js.map