@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
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Bendyline LLC
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/NOTICE.md ADDED
@@ -0,0 +1,24 @@
1
+ # Third-Party Notices for @bendyline/squisq
2
+
3
+ This notice applies to the `@bendyline/squisq` npm package. Squisq-authored
4
+ code is licensed under the MIT license in `LICENSE`. Third-party components
5
+ remain under their respective license terms.
6
+
7
+ ## Runtime dependencies
8
+
9
+ | Package | Version | License | Repository |
10
+ | ------------------- | ------- | ---------- | ---------------------------------------------------------------------- |
11
+ | genson-js | 0.0.8 | Apache-2.0 | https://github.com/aspecto-io/genson-js |
12
+ | hast-util-from-html | 2.0.3 | MIT | https://github.com/syntax-tree/hast-util-from-html |
13
+ | localforage | 1.10.0 | Apache-2.0 | https://github.com/localForage/localForage |
14
+ | ngeohash | 0.6.3 | MIT | https://github.com/sunng87/node-geohash |
15
+ | remark-directive | 3.0.1 | MIT | https://github.com/remarkjs/remark-directive |
16
+ | remark-frontmatter | 5.0.0 | MIT | https://github.com/remarkjs/remark-frontmatter |
17
+ | remark-gfm | 4.0.1 | MIT | https://github.com/remarkjs/remark-gfm |
18
+ | remark-math | 6.0.0 | MIT | https://github.com/remarkjs/remark-math |
19
+ | remark-parse | 11.0.0 | MIT | https://github.com/remarkjs/remark/tree/main/packages/remark-parse |
20
+ | remark-stringify | 11.0.0 | MIT | https://github.com/remarkjs/remark/tree/main/packages/remark-stringify |
21
+ | unified | 11.0.5 | MIT | https://unifiedjs.com |
22
+
23
+ Copyright and complete license texts for these dependencies are included in
24
+ their respective npm distributions and source repositories.
@@ -31,10 +31,23 @@ interface ContentEntry {
31
31
  * with no leading slash. Example: 'images/hero.jpg', 'index.md'.
32
32
  */
33
33
  interface ContentContainer {
34
+ /**
35
+ * Shared identity used to serialize in-process mutations across multiple
36
+ * scoped views of the same backing store. Implementations may omit it; the
37
+ * container object itself is then used.
38
+ */
39
+ readonly mutationLock?: object;
34
40
  /** Read a file's binary content. Returns null if the file does not exist. */
35
41
  readFile(path: string): Promise<ArrayBuffer | null>;
36
42
  /** Write a file. Creates or overwrites. */
37
43
  writeFile(path: string, data: ArrayBuffer | Uint8Array, mimeType?: string): Promise<void>;
44
+ /**
45
+ * Atomically create a file only when the path does not already exist.
46
+ * Returns false on collision. Persistent adapters should implement this
47
+ * with their datastore/filesystem's exclusive-create primitive so callers
48
+ * are safe across tabs and processes.
49
+ */
50
+ writeFileExclusive?(path: string, data: ArrayBuffer | Uint8Array, mimeType?: string): Promise<boolean>;
38
51
  /** Remove a file. No-op if the file does not exist. */
39
52
  removeFile(path: string): Promise<void>;
40
53
  /**
@@ -79,8 +92,10 @@ declare function findDocumentPath(entries: ContentEntry[]): string | null;
79
92
  */
80
93
  declare class MemoryContentContainer implements ContentContainer {
81
94
  private files;
95
+ readonly mutationLock: object;
82
96
  readFile(path: string): Promise<ArrayBuffer | null>;
83
97
  writeFile(path: string, data: ArrayBuffer | Uint8Array, mimeType?: string): Promise<void>;
98
+ writeFileExclusive(path: string, data: ArrayBuffer | Uint8Array, mimeType?: string): Promise<boolean>;
84
99
  removeFile(path: string): Promise<void>;
85
100
  listFiles(prefix?: string): Promise<ContentEntry[]>;
86
101
  exists(path: string): Promise<boolean>;
@@ -1,4 +1,4 @@
1
- import { Z as Transition, $ as TransitionType, M as MarkdownBlockNode, q as MarkdownHeading } from './types-BwMPl2CB.js';
1
+ import { a0 as Transition, a2 as TransitionType, M as MarkdownBlockNode, r as MarkdownHeading } from './types-CUNc9biN.js';
2
2
 
3
3
  /**
4
4
  * Media-clip timing model.
@@ -1142,6 +1142,138 @@ interface ProgressIndicatorConfig {
1142
1142
  color?: string;
1143
1143
  }
1144
1144
 
1145
+ /**
1146
+ * Page Style — the theme's art-direction layer for Page (linear) mode.
1147
+ *
1148
+ * Slides render through fixed-viewport SVG templates; pages render through
1149
+ * a small closed vocabulary of variable-height HTML section layouts
1150
+ * (`PageSectionKind`). A `ThemePageStyle` is how a theme art-directs that
1151
+ * page rendition: it picks a design family, sets page-wide tokens
1152
+ * (column widths, spacing, dividers, hero treatment, image framing …),
1153
+ * and can override how individual section kinds or block templates map
1154
+ * onto the section vocabulary.
1155
+ *
1156
+ * Design principles (mirrors the rest of the Theme schema):
1157
+ * - Fully JSON-serializable — rides the `squisq-custom-themes` frontmatter
1158
+ * codec unchanged.
1159
+ * - Closed enums everywhere so renderers can switch exhaustively and the
1160
+ * validator can reject typos.
1161
+ * - Optional on `Theme`; `resolvePageStyle`/`defaultPageStyle` derive a
1162
+ * complete style from existing theme fields when absent, so legacy and
1163
+ * customizer themes keep working without edits.
1164
+ */
1165
+ /**
1166
+ * The closed set of page section layouts. Every block template maps onto
1167
+ * one of these kinds (see `doc/page/sectionExtractors.ts`); themes may
1168
+ * remap via `ThemePageStyle.sections` / `.templates`.
1169
+ */
1170
+ declare const PAGE_SECTION_KINDS: readonly ["hero", "banner", "stat-band", "quote-band", "feature-split", "media-figure", "gallery", "callout", "card-grid", "item-list", "timeline-rail", "table-section", "canvas-embed", "prose", "footer"];
1171
+ type PageSectionKind = (typeof PAGE_SECTION_KINDS)[number];
1172
+ /** Relative visual weight of a section within the page. */
1173
+ type PageEmphasis = 'lead' | 'strong' | 'standard' | 'quiet';
1174
+ /** Which background treatment a section sits on. */
1175
+ type PageBackground = 'base' | 'alternate' | 'accent' | 'media';
1176
+ /**
1177
+ * Broad page design personalities. A family selects the structural
1178
+ * skeleton (how sections compose); tokens parameterize it per theme.
1179
+ */
1180
+ declare const PAGE_DESIGN_FAMILIES: readonly ["clean", "editorial", "brutalist", "terminal", "cinematic", "documentary", "organic", "soft"];
1181
+ type PageDesignFamily = (typeof PAGE_DESIGN_FAMILIES)[number];
1182
+ /** How headings announce themselves across the page. */
1183
+ interface PageHeadingTreatment {
1184
+ /** Small label above headings: none, plain kicker, "01 —" numbering, or a mono tag. */
1185
+ eyebrow: 'none' | 'kicker' | 'numbered' | 'mono-tag';
1186
+ /** Overall heading size register. */
1187
+ scale: 'regular' | 'display' | 'oversized';
1188
+ /** Optional case transform for headings/eyebrows. */
1189
+ case?: 'none' | 'uppercase';
1190
+ /** Optional decoration under headings. */
1191
+ underline?: 'none' | 'accent-bar' | 'full-rule';
1192
+ }
1193
+ /**
1194
+ * Page-wide design tokens. Structural CSS reads these via
1195
+ * `--squisq-page-*` custom properties (see `doc/pageCss.ts`).
1196
+ */
1197
+ interface PageTokens {
1198
+ /** Reading-column max width in px (prose, callouts, quotes). */
1199
+ contentMaxWidth: number;
1200
+ /** Wide-band inner max width in px (figures, tables, feature splits). */
1201
+ wideMaxWidth: number;
1202
+ /** Vertical rhythm between sections. */
1203
+ sectionSpacing: 'compact' | 'comfortable' | 'generous';
1204
+ /** Corner radius for cards, media frames, panels (px). */
1205
+ cornerRadius: number;
1206
+ /** Divider treatment between sections. */
1207
+ divider: 'none' | 'gap-only' | 'hairline' | 'thick-rule' | 'double-rule' | 'dotted';
1208
+ /** How section backgrounds vary down the page. */
1209
+ backgroundRhythm: 'flat' | 'alternate' | 'accent-bands' | 'tinted-panels';
1210
+ /** Hero (cover/title) composition. */
1211
+ heroStyle: 'stacked' | 'split' | 'full-bleed' | 'letterbox' | 'oversized-type';
1212
+ /** Heading voice across the page. */
1213
+ headingTreatment: PageHeadingTreatment;
1214
+ /** Frame treatment for photographic media. */
1215
+ imageFraming: 'flush' | 'rounded' | 'bordered' | 'polaroid' | 'letterboxed' | 'circle-accent';
1216
+ /** Shadow language for elevated elements. */
1217
+ shadow: 'none' | 'soft' | 'crisp' | 'heavy';
1218
+ /** Decoration on quote sections. */
1219
+ quoteMark: 'none' | 'oversized-glyph' | 'accent-bar';
1220
+ /** Treatment of large stat numerals. */
1221
+ numeralStyle: 'plain' | 'oversized' | 'boxed' | 'mono';
1222
+ /** Optional page background pattern. */
1223
+ pattern?: 'none' | 'dots' | 'grid' | 'diagonal' | 'noise';
1224
+ }
1225
+ /**
1226
+ * A theme's override for one section kind or one block template —
1227
+ * remap the kind, force a variant, adjust emphasis/background, or pass
1228
+ * freeform scalar hints the section renderer understands.
1229
+ */
1230
+ interface PageSectionOverride {
1231
+ kind?: PageSectionKind;
1232
+ variant?: string;
1233
+ emphasis?: PageEmphasis;
1234
+ background?: PageBackground;
1235
+ /** Freeform scalar hints (e.g. `dropCap: true`, `frame: "terminal"`). */
1236
+ hints?: Record<string, string | number | boolean>;
1237
+ }
1238
+ /** How named color schemes rotate across accent-bearing sections. */
1239
+ interface PageAccentRotation {
1240
+ strategy: 'primary-only' | 'cycle' | 'alternate-two' | 'none';
1241
+ /**
1242
+ * ColorScheme names (keys of `theme.colorSchemes`) to rotate through.
1243
+ * Defaults to all schemes in insertion order.
1244
+ */
1245
+ schemes?: string[];
1246
+ }
1247
+ /**
1248
+ * The complete page art direction for a theme. Optional on `Theme`;
1249
+ * `defaultPageStyle(theme)` derives one from existing theme fields.
1250
+ */
1251
+ interface ThemePageStyle {
1252
+ family: PageDesignFamily;
1253
+ tokens: PageTokens;
1254
+ /** Per-section-kind overrides. */
1255
+ sections?: Partial<Record<PageSectionKind, PageSectionOverride>>;
1256
+ /** Per-template overrides (canonical template ids); win over `sections`. */
1257
+ templates?: Record<string, PageSectionOverride>;
1258
+ accentRotation: PageAccentRotation;
1259
+ }
1260
+ declare const PAGE_SECTION_SPACINGS: readonly ["compact", "comfortable", "generous"];
1261
+ declare const PAGE_DIVIDERS: readonly ["none", "gap-only", "hairline", "thick-rule", "double-rule", "dotted"];
1262
+ declare const PAGE_BACKGROUND_RHYTHMS: readonly ["flat", "alternate", "accent-bands", "tinted-panels"];
1263
+ declare const PAGE_HERO_STYLES: readonly ["stacked", "split", "full-bleed", "letterbox", "oversized-type"];
1264
+ declare const PAGE_EYEBROWS: readonly ["none", "kicker", "numbered", "mono-tag"];
1265
+ declare const PAGE_HEADING_SCALES: readonly ["regular", "display", "oversized"];
1266
+ declare const PAGE_HEADING_CASES: readonly ["none", "uppercase"];
1267
+ declare const PAGE_HEADING_UNDERLINES: readonly ["none", "accent-bar", "full-rule"];
1268
+ declare const PAGE_IMAGE_FRAMINGS: readonly ["flush", "rounded", "bordered", "polaroid", "letterboxed", "circle-accent"];
1269
+ declare const PAGE_SHADOWS: readonly ["none", "soft", "crisp", "heavy"];
1270
+ declare const PAGE_QUOTE_MARKS: readonly ["none", "oversized-glyph", "accent-bar"];
1271
+ declare const PAGE_NUMERAL_STYLES: readonly ["plain", "oversized", "boxed", "mono"];
1272
+ declare const PAGE_PATTERNS: readonly ["none", "dots", "grid", "diagonal", "noise"];
1273
+ declare const PAGE_EMPHASES: readonly ["lead", "strong", "standard", "quiet"];
1274
+ declare const PAGE_BACKGROUNDS: readonly ["base", "alternate", "accent", "media"];
1275
+ declare const PAGE_ACCENT_STRATEGIES: readonly ["primary-only", "cycle", "alternate-two", "none"];
1276
+
1145
1277
  /** Current Theme schema version. Bump on breaking changes; loader migrates. */
1146
1278
  declare const THEME_SCHEMA_VERSION: "1";
1147
1279
 
@@ -1344,6 +1476,12 @@ interface Theme {
1344
1476
  colorSchemes: Record<string, ThemeColorScheme>;
1345
1477
  /** Optional persistent layers baked into the theme */
1346
1478
  persistentLayers?: PersistentLayerConfig;
1479
+ /**
1480
+ * Optional page art direction for Page (linear) mode. When absent,
1481
+ * `resolvePageStyle`/`defaultPageStyle` derive one from the fields above,
1482
+ * so legacy themes render pages without declaring this.
1483
+ */
1484
+ pageStyle?: ThemePageStyle;
1347
1485
  }
1348
1486
  /**
1349
1487
  * Recursively makes every property optional.
@@ -1819,7 +1957,7 @@ interface Block {
1819
1957
  * A visual element within a block.
1820
1958
  * Layers are composited back-to-front (first layer is background).
1821
1959
  */
1822
- type Layer = ImageLayer | TextLayer | ShapeLayer | PathLayer | MapLayer | VideoLayer | TableLayer | TreeLayer;
1960
+ type Layer = ImageLayer | TextLayer | ShapeLayer | PathLayer | MapLayer | VideoLayer | TableLayer | TreeLayer | MermaidLayer;
1823
1961
  interface BaseLayer {
1824
1962
  /** Unique identifier for this layer */
1825
1963
  id: string;
@@ -2176,6 +2314,25 @@ interface TreeLayerStyle {
2176
2314
  /** FontAwesome icon token for leaves (default `file`). */
2177
2315
  fileIcon?: string;
2178
2316
  }
2317
+ /**
2318
+ * Mermaid diagram layer — renders an authored `mermaid` code fence through
2319
+ * the official Mermaid runtime while keeping the fence source authoritative.
2320
+ * Like video/table/tree layers, the browser renderer hosts the diagram in an
2321
+ * SVG `<foreignObject>` so it participates in slide layout and frame capture.
2322
+ */
2323
+ interface MermaidLayer extends BaseLayer {
2324
+ type: 'mermaid';
2325
+ content: {
2326
+ /** Complete Mermaid source, excluding the Markdown fence delimiters. */
2327
+ source: string;
2328
+ /** Theme-derived panel color behind the generated SVG. */
2329
+ background?: string;
2330
+ /** Theme-derived foreground used by loading/error states. */
2331
+ foreground?: string;
2332
+ /** Inner panel padding in pixels. */
2333
+ padding?: number;
2334
+ };
2335
+ }
2179
2336
  /**
2180
2337
  * Available map tile styles from free/open-source providers.
2181
2338
  */
@@ -2385,4 +2542,4 @@ declare function getBlockAtTime(blocks: Block[], time: number): Block | null;
2385
2542
  */
2386
2543
  declare function getCaptionAtTime(captions: CaptionTrack | undefined, time: number): CaptionPhrase | null;
2387
2544
 
2388
- export { type MapBlockInput as $, type AccentImage as A, type Block as B, type CaptionPhrase as C, DARK_SURFACE as D, type DiagramTemplateNode as E, type Doc as F, type DocBlock as G, type DocDiagnostic as H, type DrawingBlockInput as I, FRONTMATTER_CUSTOM_TEMPLATES_KEY as J, FRONTMATTER_CUSTOM_THEMES_KEY as K, type FactCardInput as L, type FontFamily as M, type FontFamilyKind as N, type FullBleedQuoteInput as O, type GradientBackgroundConfig as P, type ImageBackgroundConfig as Q, type ImageLayer as R, type ImageTreatment as S, type ImageWithCaptionInput as T, LIGHT_SURFACE as U, type Layer as V, type LayerRepeat as W, type LayoutHints as X, type LeftFeatureInput as Y, type LinearGradient as Z, type ListBlockInput as _, type AccentPosition as a, type ViewportOrientation as a$, type MapLayer as a0, type MapMarker as a1, type MapTileStyle as a2, type MarkerStyle as a3, type MediaClip as a4, type PathLayer as a5, type PatternBackgroundConfig as a6, type PersistentLayer as a7, type PersistentLayerConfig as a8, type PersistentLayerTemplate as a9, type TextLayer as aA, type TextStyle as aB, type Theme as aC, type ThemeColorPalette as aD, type ThemeColorScheme as aE, type ThemeRegistry as aF, type ThemeSchemaVersion as aG, type ThemeSeedColors as aH, type ThemeStyle as aI, type ThemeTypography as aJ, type TimelineBlockInput as aK, type TimelineTemplateEvent as aL, type TimelineTemplateLink as aM, type TimelineTemplateTrack as aN, type TitleBlockInput as aO, type TitleCaptionConfig as aP, type TreeBlockInput as aQ, type TreeLayer as aR, type TreeLayerItem as aS, type TreeLayerStyle as aT, type TreeTemplateItem as aU, type TwoColumnInput as aV, VIEWPORT_PRESETS as aW, type VideoLayer as aX, type VideoPullQuoteInput as aY, type VideoWithCaptionInput as aZ, type ViewportConfig as a_, type PersistentLayerTemplateConfig as aa, type PersistentLayerTemplateType as ab, type PhotoGridInput as ac, type Position as ad, type ProgressIndicatorConfig as ae, type PullQuoteInput as af, type QuoteBlockInput as ag, type RawLayersInput as ah, type RenderStyle as ai, type RightFeatureInput as aj, type ScheduledClip as ak, type SectionHeaderInput as al, type ShapeFilter as am, type ShapeLayer as an, type ShapePattern as ao, type SolidBackgroundConfig as ap, type StartBlockConfig as aq, type StatHighlightInput as ar, type SurfaceScheme as as, THEME_SCHEMA_VERSION as at, type TableLayer as au, type TableLayerStyle as av, type TemplateBlock as aw, type TemplateContext as ax, type TemplateFunction as ay, type TemplateRegistry as az, type AmbientGradientConfig as b, type ViewportPreset as b0, type VignetteConfig as b1, applySurface as b2, calculateDuration as b3, calculateFontScale as b4, createTemplateContext as b5, createTheme as b6, createThemeRegistry as b7, getAspectRatioString as b8, getBlockAtTime as b9, getCaptionAtTime as ba, getDocPlaybackDuration as bb, getLayoutHints as bc, getSafeTextBounds as bd, getSegmentAtTime as be, getTwoColumnPositions as bf, getViewport as bg, getViewportOrientation as bh, isPersistentLayerTemplate as bi, isTemplateBlock as bj, scaledFontSize$1 as bk, resolveMediaSchedule as bl, scaledFontSize as bm, type Animation as c, type AnimationType as d, type AudioBookmark as e, type AudioSegment as f, type AudioTimingData as g, type AudioTrack as h, type BlockConnection as i, type BorderStyle as j, type CaptionTrack as k, type CaptionWord as l, type ColorScheme as m, type ComparisonBarInput as n, type CornerBrandingConfig as o, type CustomTemplateDefinition as p, type CustomTemplateLayer as q, DEFAULT_DOC_FONT as r, DEFAULT_TITLE_FONT as s, type DataTableInput as t, type DateEventInput as u, type DeepPartial as v, type DefinitionCardInput as w, type DiagramBlockInput as x, type DiagramEdgeAnchor as y, type DiagramTemplateEdge as z };
2545
+ export { type MapBlockInput as $, type AccentImage as A, type Block as B, type CaptionPhrase as C, DARK_SURFACE as D, type DiagramTemplateNode as E, type Doc as F, type DocBlock as G, type DocDiagnostic as H, type DrawingBlockInput as I, FRONTMATTER_CUSTOM_TEMPLATES_KEY as J, FRONTMATTER_CUSTOM_THEMES_KEY as K, type FactCardInput as L, type FontFamily as M, type FontFamilyKind as N, type FullBleedQuoteInput as O, type GradientBackgroundConfig as P, type ImageBackgroundConfig as Q, type ImageLayer as R, type ImageTreatment as S, type ImageWithCaptionInput as T, LIGHT_SURFACE as U, type Layer as V, type LayerRepeat as W, type LayoutHints as X, type LeftFeatureInput as Y, type LinearGradient as Z, type ListBlockInput as _, type AccentPosition as a, type TextLayer as a$, type MapLayer as a0, type MapMarker as a1, type MapTileStyle as a2, type MarkerStyle as a3, type MediaClip as a4, type MermaidLayer as a5, PAGE_ACCENT_STRATEGIES as a6, PAGE_BACKGROUNDS as a7, PAGE_BACKGROUND_RHYTHMS as a8, PAGE_DESIGN_FAMILIES as a9, type PersistentLayerTemplate as aA, type PersistentLayerTemplateConfig as aB, type PersistentLayerTemplateType as aC, type PhotoGridInput as aD, type Position as aE, type ProgressIndicatorConfig as aF, type PullQuoteInput as aG, type QuoteBlockInput as aH, type RawLayersInput as aI, type RenderStyle as aJ, type RightFeatureInput as aK, type ScheduledClip as aL, type SectionHeaderInput as aM, type ShapeFilter as aN, type ShapeLayer as aO, type ShapePattern as aP, type SolidBackgroundConfig as aQ, type StartBlockConfig as aR, type StatHighlightInput as aS, type SurfaceScheme as aT, THEME_SCHEMA_VERSION as aU, type TableLayer as aV, type TableLayerStyle as aW, type TemplateBlock as aX, type TemplateContext as aY, type TemplateFunction as aZ, type TemplateRegistry as a_, PAGE_DIVIDERS as aa, PAGE_EMPHASES as ab, PAGE_EYEBROWS as ac, PAGE_HEADING_CASES as ad, PAGE_HEADING_SCALES as ae, PAGE_HEADING_UNDERLINES as af, PAGE_HERO_STYLES as ag, PAGE_IMAGE_FRAMINGS as ah, PAGE_NUMERAL_STYLES as ai, PAGE_PATTERNS as aj, PAGE_QUOTE_MARKS as ak, PAGE_SECTION_KINDS as al, PAGE_SECTION_SPACINGS as am, PAGE_SHADOWS as an, type PageAccentRotation as ao, type PageBackground as ap, type PageDesignFamily as aq, type PageEmphasis as ar, type PageHeadingTreatment as as, type PageSectionKind as at, type PageSectionOverride as au, type PageTokens as av, type PathLayer as aw, type PatternBackgroundConfig as ax, type PersistentLayer as ay, type PersistentLayerConfig as az, type AmbientGradientConfig as b, type TextStyle as b0, type Theme as b1, type ThemeColorPalette as b2, type ThemeColorScheme as b3, type ThemePageStyle as b4, type ThemeRegistry as b5, type ThemeSchemaVersion as b6, type ThemeSeedColors as b7, type ThemeStyle as b8, type ThemeTypography as b9, getAspectRatioString as bA, getBlockAtTime as bB, getCaptionAtTime as bC, getDocPlaybackDuration as bD, getLayoutHints as bE, getSafeTextBounds as bF, getSegmentAtTime as bG, getTwoColumnPositions as bH, getViewport as bI, getViewportOrientation as bJ, isPersistentLayerTemplate as bK, isTemplateBlock as bL, scaledFontSize$1 as bM, resolveMediaSchedule as bN, scaledFontSize as bO, type TimelineBlockInput as ba, type TimelineTemplateEvent as bb, type TimelineTemplateLink as bc, type TimelineTemplateTrack as bd, type TitleBlockInput as be, type TitleCaptionConfig as bf, type TreeBlockInput as bg, type TreeLayer as bh, type TreeLayerItem as bi, type TreeLayerStyle as bj, type TreeTemplateItem as bk, type TwoColumnInput as bl, VIEWPORT_PRESETS as bm, type VideoLayer as bn, type VideoPullQuoteInput as bo, type VideoWithCaptionInput as bp, type ViewportConfig as bq, type ViewportOrientation as br, type ViewportPreset as bs, type VignetteConfig as bt, applySurface as bu, calculateDuration as bv, calculateFontScale as bw, createTemplateContext as bx, createTheme as by, createThemeRegistry as bz, type Animation as c, type AnimationType as d, type AudioBookmark as e, type AudioSegment as f, type AudioTimingData as g, type AudioTrack as h, type BlockConnection as i, type BorderStyle as j, type CaptionTrack as k, type CaptionWord as l, type ColorScheme as m, type ComparisonBarInput as n, type CornerBrandingConfig as o, type CustomTemplateDefinition as p, type CustomTemplateLayer as q, DEFAULT_DOC_FONT as r, DEFAULT_TITLE_FONT as s, type DataTableInput as t, type DateEventInput as u, type DeepPartial as v, type DefinitionCardInput as w, type DiagramBlockInput as x, type DiagramEdgeAnchor as y, type DiagramTemplateEdge as z };
@@ -1,4 +1,4 @@
1
- import { R as ImageLayer, aA as TextLayer, an as ShapeLayer, a5 as PathLayer } from './Doc-ylqWKDc_.js';
1
+ import { R as ImageLayer, a$ as TextLayer, aO as ShapeLayer, aw as PathLayer } from './Doc-BubIpWsp.js';
2
2
 
3
3
  /**
4
4
  * ImageEditDoc — JSON document describing a layered, editable image.
@@ -1,4 +1,4 @@
1
- import { a5 as BlockConnection, $ as TransitionType, _ as TransitionDirection } from './types-BwMPl2CB.js';
1
+ import { ab as BlockConnection, a2 as TransitionType, a1 as TransitionDirection } from './types-CUNc9biN.js';
2
2
 
3
3
  /**
4
4
  * Heading-attribute value coercion.
File without changes
@@ -0,0 +1,214 @@
1
+ // src/schemas/Media.ts
2
+ function flatten(blocks, out = []) {
3
+ for (const b of blocks) {
4
+ out.push(b);
5
+ if (b.children && b.children.length > 0) flatten(b.children, out);
6
+ }
7
+ return out;
8
+ }
9
+ function clipLength(clip) {
10
+ if (clip.clipEnd == null) return null;
11
+ return Math.max(0, clip.clipEnd - (clip.clipStart ?? 0));
12
+ }
13
+ function baseTimelineEnd(doc) {
14
+ const blockEnd = flatten(doc.blocks).reduce(
15
+ (max, b) => Math.max(max, b.startTime + b.duration),
16
+ 0
17
+ );
18
+ return Math.max(doc.duration ?? 0, blockEnd);
19
+ }
20
+ function resolveMediaSchedule(doc) {
21
+ const out = [];
22
+ const docEnd = baseTimelineEnd(doc);
23
+ for (const block of flatten(doc.blocks)) {
24
+ const blockEnd = block.startTime + block.duration;
25
+ for (const clip of block.media ?? []) {
26
+ const start = block.startTime + clip.startAt;
27
+ const len = clipLength(clip);
28
+ let end;
29
+ if (clip.spillover) {
30
+ end = len != null ? start + len : blockEnd;
31
+ } else {
32
+ end = len != null ? Math.min(start + len, blockEnd) : blockEnd;
33
+ }
34
+ out.push({
35
+ id: clip.id,
36
+ src: clip.src,
37
+ kind: clip.kind,
38
+ absoluteStart: start,
39
+ absoluteEnd: Math.max(start, end),
40
+ sourceIn: clip.clipStart ?? 0,
41
+ anchor: "block",
42
+ blockId: block.id,
43
+ ...clip.sourceLine != null ? { sourceLine: clip.sourceLine } : {}
44
+ });
45
+ }
46
+ }
47
+ for (const clip of doc.documentMedia ?? []) {
48
+ const start = clip.startAt;
49
+ const len = clipLength(clip);
50
+ const end = len != null ? start + len : docEnd;
51
+ out.push({
52
+ id: clip.id,
53
+ src: clip.src,
54
+ kind: clip.kind,
55
+ absoluteStart: start,
56
+ absoluteEnd: Math.max(start, end),
57
+ sourceIn: clip.clipStart ?? 0,
58
+ anchor: "document",
59
+ ...clip.sourceLine != null ? { sourceLine: clip.sourceLine } : {}
60
+ });
61
+ }
62
+ return out;
63
+ }
64
+ function getDocPlaybackDuration(doc) {
65
+ const base = baseTimelineEnd(doc);
66
+ const mediaEnd = resolveMediaSchedule(doc).reduce((max, c) => Math.max(max, c.absoluteEnd), 0);
67
+ return Math.max(base, mediaEnd);
68
+ }
69
+
70
+ // src/schemas/pageStyleDefaults.ts
71
+ var FAMILY_BY_RENDER_STYLE = {
72
+ standard: "clean",
73
+ minimalist: "clean",
74
+ documentary: "documentary",
75
+ magazine: "editorial",
76
+ bold: "brutalist",
77
+ "tech-dark": "terminal",
78
+ cinematic: "cinematic",
79
+ "warm-earth": "organic",
80
+ "morning-light": "soft",
81
+ gezellig: "soft"
82
+ };
83
+ var FAMILY_DEFAULTS = {
84
+ clean: {
85
+ sectionSpacing: "comfortable",
86
+ divider: "hairline",
87
+ backgroundRhythm: "alternate",
88
+ heroStyle: "stacked",
89
+ headingTreatment: { eyebrow: "kicker", scale: "regular", underline: "none" },
90
+ quoteMark: "accent-bar",
91
+ numeralStyle: "plain",
92
+ accentStrategy: "cycle"
93
+ },
94
+ editorial: {
95
+ sectionSpacing: "comfortable",
96
+ divider: "double-rule",
97
+ backgroundRhythm: "flat",
98
+ heroStyle: "split",
99
+ headingTreatment: { eyebrow: "kicker", scale: "display", underline: "none" },
100
+ quoteMark: "oversized-glyph",
101
+ numeralStyle: "oversized",
102
+ accentStrategy: "alternate-two"
103
+ },
104
+ brutalist: {
105
+ sectionSpacing: "compact",
106
+ divider: "thick-rule",
107
+ backgroundRhythm: "accent-bands",
108
+ heroStyle: "oversized-type",
109
+ headingTreatment: { eyebrow: "kicker", scale: "oversized", case: "uppercase" },
110
+ quoteMark: "none",
111
+ numeralStyle: "oversized",
112
+ accentStrategy: "cycle"
113
+ },
114
+ terminal: {
115
+ sectionSpacing: "compact",
116
+ divider: "hairline",
117
+ backgroundRhythm: "tinted-panels",
118
+ heroStyle: "stacked",
119
+ headingTreatment: { eyebrow: "mono-tag", scale: "regular", underline: "none" },
120
+ quoteMark: "none",
121
+ numeralStyle: "mono",
122
+ accentStrategy: "primary-only"
123
+ },
124
+ cinematic: {
125
+ sectionSpacing: "generous",
126
+ divider: "gap-only",
127
+ backgroundRhythm: "flat",
128
+ heroStyle: "full-bleed",
129
+ headingTreatment: { eyebrow: "kicker", scale: "display", case: "uppercase" },
130
+ quoteMark: "none",
131
+ numeralStyle: "oversized",
132
+ accentStrategy: "primary-only"
133
+ },
134
+ documentary: {
135
+ sectionSpacing: "generous",
136
+ divider: "thick-rule",
137
+ backgroundRhythm: "flat",
138
+ heroStyle: "letterbox",
139
+ headingTreatment: { eyebrow: "numbered", scale: "display", underline: "none" },
140
+ quoteMark: "accent-bar",
141
+ numeralStyle: "boxed",
142
+ accentStrategy: "primary-only"
143
+ },
144
+ organic: {
145
+ sectionSpacing: "comfortable",
146
+ divider: "thick-rule",
147
+ backgroundRhythm: "tinted-panels",
148
+ heroStyle: "stacked",
149
+ headingTreatment: { eyebrow: "kicker", scale: "regular", underline: "accent-bar" },
150
+ quoteMark: "oversized-glyph",
151
+ numeralStyle: "boxed",
152
+ accentStrategy: "alternate-two"
153
+ },
154
+ soft: {
155
+ sectionSpacing: "comfortable",
156
+ divider: "dotted",
157
+ backgroundRhythm: "tinted-panels",
158
+ heroStyle: "split",
159
+ headingTreatment: { eyebrow: "kicker", scale: "regular", underline: "none" },
160
+ quoteMark: "oversized-glyph",
161
+ numeralStyle: "plain",
162
+ accentStrategy: "alternate-two"
163
+ }
164
+ };
165
+ function derivePattern(theme) {
166
+ const layers = [
167
+ ...theme.persistentLayers?.bottomLayers ?? [],
168
+ ...theme.persistentLayers?.topLayers ?? []
169
+ ];
170
+ for (const layer of layers) {
171
+ if (typeof layer === "object" && layer !== null && "template" in layer && layer.template === "patternBackground") {
172
+ const config = layer.config;
173
+ const pattern = config?.pattern;
174
+ if (pattern === "dots" || pattern === "grid" || pattern === "diagonal" || pattern === "noise") {
175
+ return pattern;
176
+ }
177
+ }
178
+ }
179
+ return void 0;
180
+ }
181
+ function defaultPageStyle(theme) {
182
+ const family = FAMILY_BY_RENDER_STYLE[theme.renderStyle?.name ?? ""] ?? "clean";
183
+ const defaults = FAMILY_DEFAULTS[family];
184
+ const cornerRadius = theme.style?.borderRadius ?? 6;
185
+ const treatmentType = theme.style?.imageTreatment?.type;
186
+ const imageFraming = treatmentType === "mono" || treatmentType === "duotone" ? "letterboxed" : cornerRadius > 0 ? "rounded" : "flush";
187
+ const tokens = {
188
+ contentMaxWidth: 760,
189
+ wideMaxWidth: 1100,
190
+ sectionSpacing: defaults.sectionSpacing,
191
+ cornerRadius,
192
+ divider: defaults.divider,
193
+ backgroundRhythm: defaults.backgroundRhythm,
194
+ heroStyle: defaults.heroStyle,
195
+ headingTreatment: { ...defaults.headingTreatment },
196
+ imageFraming,
197
+ shadow: theme.style?.textShadow ? "soft" : "none",
198
+ quoteMark: defaults.quoteMark,
199
+ numeralStyle: defaults.numeralStyle
200
+ };
201
+ const pattern = derivePattern(theme);
202
+ if (pattern) tokens.pattern = pattern;
203
+ return {
204
+ family,
205
+ tokens,
206
+ accentRotation: { strategy: defaults.accentStrategy }
207
+ };
208
+ }
209
+
210
+ export {
211
+ resolveMediaSchedule,
212
+ getDocPlaybackDuration,
213
+ defaultPageStyle
214
+ };
@@ -2,7 +2,7 @@ import {
2
2
  DEFAULT_THEME,
3
3
  applySurface,
4
4
  resolveFontFamily
5
- } from "./chunk-W4O2TX5I.js";
5
+ } from "./chunk-C33GTPUZ.js";
6
6
 
7
7
  // src/jsonForm/chooseControl.ts
8
8
  var ENUM_SEGMENTED_LIMIT = 4;
@@ -169,6 +169,74 @@ function resolveRef(schema, root) {
169
169
  }
170
170
 
171
171
  // src/jsonForm/evaluateWhen.ts
172
+ var MAX_CONDITION_REGEX_LENGTH = 256;
173
+ function isSafeConditionRegex(pattern) {
174
+ if (pattern.length === 0 || pattern.length > MAX_CONDITION_REGEX_LENGTH) return false;
175
+ if (/\\[1-9]|\(\?[=!<]/.test(pattern)) return false;
176
+ const groups = [];
177
+ let escaped = false;
178
+ let inClass = false;
179
+ let unboundedQuantifiers = 0;
180
+ for (let index = 0; index < pattern.length; index++) {
181
+ const ch = pattern[index];
182
+ if (escaped) {
183
+ escaped = false;
184
+ continue;
185
+ }
186
+ if (ch === "\\") {
187
+ escaped = true;
188
+ continue;
189
+ }
190
+ if (ch === "[") {
191
+ inClass = true;
192
+ continue;
193
+ }
194
+ if (ch === "]" && inClass) {
195
+ inClass = false;
196
+ continue;
197
+ }
198
+ if (inClass) continue;
199
+ if (ch === "(") {
200
+ groups.push({ hasQuantifier: false, hasAlternation: false });
201
+ continue;
202
+ }
203
+ if (ch === "|") {
204
+ const group = groups[groups.length - 1];
205
+ if (group) group.hasAlternation = true;
206
+ continue;
207
+ }
208
+ if (ch === ")") {
209
+ const group = groups.pop();
210
+ if (!group) return false;
211
+ const next = pattern[index + 1];
212
+ if (next && "*+?{".includes(next) && (group.hasQuantifier || group.hasAlternation)) {
213
+ return false;
214
+ }
215
+ if (next && "*+?{".includes(next)) {
216
+ const parent = groups[groups.length - 1];
217
+ if (parent) parent.hasQuantifier = true;
218
+ }
219
+ continue;
220
+ }
221
+ if ("*+?".includes(ch) || ch === "{") {
222
+ if (ch === "*" || ch === "+") unboundedQuantifiers += 1;
223
+ if (ch === "{") {
224
+ const close = pattern.indexOf("}", index + 1);
225
+ if (close < 0) return false;
226
+ const bounds = pattern.slice(index + 1, close);
227
+ if (!/^\d+(?:,\d*)?$/.test(bounds)) return false;
228
+ const values = bounds.split(",").filter(Boolean).map(Number);
229
+ if (values.some((value) => value > 1e3)) return false;
230
+ if (bounds.endsWith(",")) unboundedQuantifiers += 1;
231
+ index = close;
232
+ }
233
+ if (unboundedQuantifiers > 1) return false;
234
+ const group = groups[groups.length - 1];
235
+ if (group) group.hasQuantifier = true;
236
+ }
237
+ }
238
+ return !escaped && !inClass && groups.length === 0;
239
+ }
172
240
  function evaluateWhen(when, rootData) {
173
241
  const actual = getByPointer(rootData, when.field);
174
242
  if (when.equals !== void 0) {
@@ -178,7 +246,8 @@ function evaluateWhen(when, rootData) {
178
246
  return when.oneOf.some((v) => deepEqual(actual, v));
179
247
  }
180
248
  if (when.matches !== void 0) {
181
- if (typeof actual !== "string") return false;
249
+ if (typeof actual !== "string" || actual.length > 1e5) return false;
250
+ if (!isSafeConditionRegex(when.matches)) return false;
182
251
  try {
183
252
  return new RegExp(when.matches).test(actual);
184
253
  } catch {
@@ -266,10 +335,10 @@ export {
266
335
  getByPointer,
267
336
  setByPointer,
268
337
  resolveRef,
338
+ isSafeConditionRegex,
269
339
  evaluateWhen,
270
340
  resolveFlag,
271
341
  inferSchema,
272
342
  buildJsonFormTokens,
273
343
  resolveJsonFormTheme
274
344
  };
275
- //# sourceMappingURL=chunk-2PWOO4ZE.js.map