@bendyline/squisq 2.1.0 → 2.3.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 (442) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE.md +24 -0
  3. package/README.md +8 -8
  4. package/dist/{ContentContainer-BXUlIf18.d.ts → ContentContainer-B2w9sUoL.d.ts} +15 -0
  5. package/dist/{Doc-DynJleo-.d.ts → Doc-COe-rPQB.d.ts} +7 -5
  6. package/dist/{ImageEditDoc-Ca4Tr9uN.d.ts → ImageEditDoc-dtKahVyD.d.ts} +1 -1
  7. package/dist/{annotationCoercion-Dr_DY9Hx.d.ts → annotationCoercion-PtRQhk5V.d.ts} +1 -1
  8. package/dist/{chunk-VWCJ2WXC.js → chunk-2ZWIXGAC.js} +0 -1
  9. package/dist/{chunk-VYFRI7R6.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-DBS6RIFL.js → chunk-7N4G32LG.js} +0 -1
  15. package/dist/{chunk-JOQYPRDZ.js → chunk-7YEZFHLS.js} +10 -8
  16. package/dist/{chunk-2UQOHYE2.js → chunk-7ZAAICW4.js} +0 -1
  17. package/dist/{chunk-66QO7XFB.js → chunk-ACZOVWX3.js} +117 -7
  18. package/dist/{chunk-5J4HKRJF.js → chunk-BAOV476U.js} +0 -1
  19. package/dist/chunk-BCCXTMN5.js +699 -0
  20. package/dist/{chunk-JHZWYRSW.js → chunk-C33GTPUZ.js} +11 -4
  21. package/dist/{chunk-XNLB57UD.js → chunk-EK446BUE.js} +18 -2
  22. package/dist/{chunk-VR7UPJ7C.js → chunk-FCG3BIZN.js} +12 -1
  23. package/dist/{chunk-JI77MGAK.js → chunk-GIIOY6XR.js} +2178 -1291
  24. package/dist/{chunk-Q7LROV2H.js → chunk-NKNMGIIN.js} +0 -1
  25. package/dist/chunk-OPO5K4DZ.js +241 -0
  26. package/dist/{chunk-TUWMK62B.js → chunk-PUS54YU6.js} +45 -2
  27. package/dist/{chunk-OTKVFVL6.js → chunk-QNTQIEIV.js} +130 -47
  28. package/dist/{chunk-5UYI3RJB.js → chunk-QWCFK5FN.js} +55 -40
  29. package/dist/{chunk-GZY66SDN.js → chunk-R3KTTOMS.js} +0 -1
  30. package/dist/{chunk-ILWDXLUK.js → chunk-RS5AP3J4.js} +49 -10
  31. package/dist/{chunk-QUUPYOSP.js → chunk-SPTY4C6F.js} +136 -5
  32. package/dist/{chunk-4X3JQXNM.js → chunk-XOFT65EX.js} +1 -2
  33. package/dist/{chunk-FVTQSNR7.js → chunk-XRW6P7IF.js} +13 -5
  34. package/dist/{chunk-R2YZTCLO.js → chunk-ZQKZSJAX.js} +1 -2
  35. package/dist/doc/index.d.ts +311 -13
  36. package/dist/doc/index.js +25 -17
  37. package/dist/generate/index.d.ts +2 -2
  38. package/dist/generate/index.js +1 -3
  39. package/dist/icons/index.js +2 -4
  40. package/dist/icons/inlineIconMarker.js +1 -2
  41. package/dist/imageEdit/index.d.ts +48 -17
  42. package/dist/imageEdit/index.js +3 -4
  43. package/dist/index.d.ts +13 -13
  44. package/dist/index.js +67 -33
  45. package/dist/jsonForm/index.d.ts +10 -3
  46. package/dist/jsonForm/index.js +8 -7
  47. package/dist/markdown/index.d.ts +75 -11
  48. package/dist/markdown/index.js +32 -7
  49. package/dist/{materializePageSection-DDzubQXo.d.ts → materializePageSection-BSMOocve.d.ts} +2 -2
  50. package/dist/narration/index.d.ts +16 -3
  51. package/dist/narration/index.js +12 -14
  52. package/dist/random/index.d.ts +11 -2
  53. package/dist/random/index.js +1 -3
  54. package/dist/recommend/index.d.ts +1 -1
  55. package/dist/recommend/index.js +2 -4
  56. package/dist/schemas/index.d.ts +18 -6
  57. package/dist/schemas/index.js +7 -6
  58. package/dist/spatial/index.d.ts +2 -1
  59. package/dist/spatial/index.js +1 -2
  60. package/dist/storage/index.d.ts +4 -2
  61. package/dist/storage/index.js +1 -2
  62. package/dist/{themeLibrary-B72m0W1y.d.ts → themeLibrary-BUTWjufL.d.ts} +1 -1
  63. package/dist/timing/index.js +2 -4
  64. package/dist/transform/index.d.ts +3 -3
  65. package/dist/transform/index.js +6 -7
  66. package/dist/{types-C4kiRn_k.d.ts → types-8QjefM9J.d.ts} +38 -2
  67. package/dist/{types-BwMPl2CB.d.ts → types-CUNc9biN.d.ts} +24 -1
  68. package/dist/versions/index.d.ts +14 -11
  69. package/dist/versions/index.js +2 -3
  70. package/package.json +8 -3
  71. package/dist/chunk-2UQOHYE2.js.map +0 -1
  72. package/dist/chunk-3E5F2XMR.js.map +0 -1
  73. package/dist/chunk-4X3JQXNM.js.map +0 -1
  74. package/dist/chunk-5DKBFXPY.js.map +0 -1
  75. package/dist/chunk-5J4HKRJF.js.map +0 -1
  76. package/dist/chunk-5UYI3RJB.js.map +0 -1
  77. package/dist/chunk-66QO7XFB.js.map +0 -1
  78. package/dist/chunk-AMIR72JP.js +0 -380
  79. package/dist/chunk-AMIR72JP.js.map +0 -1
  80. package/dist/chunk-DBS6RIFL.js.map +0 -1
  81. package/dist/chunk-DNJKBAI7.js +0 -1
  82. package/dist/chunk-DNJKBAI7.js.map +0 -1
  83. package/dist/chunk-ET53IIEP.js +0 -1
  84. package/dist/chunk-ET53IIEP.js.map +0 -1
  85. package/dist/chunk-FVTQSNR7.js.map +0 -1
  86. package/dist/chunk-GZY66SDN.js.map +0 -1
  87. package/dist/chunk-ILWDXLUK.js.map +0 -1
  88. package/dist/chunk-JHZWYRSW.js.map +0 -1
  89. package/dist/chunk-JI77MGAK.js.map +0 -1
  90. package/dist/chunk-JOQYPRDZ.js.map +0 -1
  91. package/dist/chunk-OTKVFVL6.js.map +0 -1
  92. package/dist/chunk-PGGGKYWG.js +0 -1
  93. package/dist/chunk-PGGGKYWG.js.map +0 -1
  94. package/dist/chunk-Q7LROV2H.js.map +0 -1
  95. package/dist/chunk-QE7TWGVT.js.map +0 -1
  96. package/dist/chunk-QUUPYOSP.js.map +0 -1
  97. package/dist/chunk-R2GC6RLD.js +0 -344
  98. package/dist/chunk-R2GC6RLD.js.map +0 -1
  99. package/dist/chunk-R2YZTCLO.js.map +0 -1
  100. package/dist/chunk-S7A5D7ZJ.js +0 -174
  101. package/dist/chunk-S7A5D7ZJ.js.map +0 -1
  102. package/dist/chunk-TUWMK62B.js.map +0 -1
  103. package/dist/chunk-V543AI2F.js +0 -1
  104. package/dist/chunk-V543AI2F.js.map +0 -1
  105. package/dist/chunk-VR7UPJ7C.js.map +0 -1
  106. package/dist/chunk-VWCJ2WXC.js.map +0 -1
  107. package/dist/chunk-VYFRI7R6.js.map +0 -1
  108. package/dist/chunk-XNLB57UD.js.map +0 -1
  109. package/dist/chunk-ZLQKNOZQ.js +0 -1
  110. package/dist/chunk-ZLQKNOZQ.js.map +0 -1
  111. package/dist/doc/index.js.map +0 -1
  112. package/dist/generate/index.js.map +0 -1
  113. package/dist/icons/index.js.map +0 -1
  114. package/dist/icons/inlineIconMarker.js.map +0 -1
  115. package/dist/imageEdit/index.js.map +0 -1
  116. package/dist/index.js.map +0 -1
  117. package/dist/jsonForm/index.js.map +0 -1
  118. package/dist/markdown/index.js.map +0 -1
  119. package/dist/narration/index.js.map +0 -1
  120. package/dist/random/index.js.map +0 -1
  121. package/dist/recommend/index.js.map +0 -1
  122. package/dist/schemas/index.js.map +0 -1
  123. package/dist/spatial/index.js.map +0 -1
  124. package/dist/storage/index.js.map +0 -1
  125. package/dist/timing/index.js.map +0 -1
  126. package/dist/transform/index.js.map +0 -1
  127. package/dist/versions/index.js.map +0 -1
  128. package/src/__tests__/animationUtils.test.ts +0 -117
  129. package/src/__tests__/annotationCoercion.test.ts +0 -243
  130. package/src/__tests__/applyNarrationTiming.test.ts +0 -190
  131. package/src/__tests__/applyRenderStyle.test.ts +0 -146
  132. package/src/__tests__/asciiDiagramBattle.test.ts +0 -246
  133. package/src/__tests__/asciiDiagramDetect.test.ts +0 -162
  134. package/src/__tests__/asciiDiagramMapping.test.ts +0 -38
  135. package/src/__tests__/asciiDiagramParse.test.ts +0 -233
  136. package/src/__tests__/asciiDiagramPipeline.test.ts +0 -273
  137. package/src/__tests__/asciiDiagramRender.test.ts +0 -162
  138. package/src/__tests__/asciiDiagramRepair.test.ts +0 -84
  139. package/src/__tests__/asciiTimelineDetect.test.ts +0 -157
  140. package/src/__tests__/asciiTimelineParse.test.ts +0 -205
  141. package/src/__tests__/asciiTimelinePipeline.test.ts +0 -349
  142. package/src/__tests__/asciiTimelineRender.test.ts +0 -376
  143. package/src/__tests__/atmosphereLayers.test.ts +0 -108
  144. package/src/__tests__/attrTokens.test.ts +0 -167
  145. package/src/__tests__/colorUtils.test.ts +0 -112
  146. package/src/__tests__/contentContainer.test.ts +0 -325
  147. package/src/__tests__/contentExtractor.test.ts +0 -243
  148. package/src/__tests__/coverBlock.test.ts +0 -310
  149. package/src/__tests__/customTemplateSample.test.ts +0 -144
  150. package/src/__tests__/customTemplatesFrontmatter.test.ts +0 -221
  151. package/src/__tests__/customThemesFrontmatter.test.ts +0 -146
  152. package/src/__tests__/dataTable.test.ts +0 -145
  153. package/src/__tests__/diagramBlock.test.ts +0 -122
  154. package/src/__tests__/diagramLayout.test.ts +0 -134
  155. package/src/__tests__/diagramText.test.ts +0 -26
  156. package/src/__tests__/docToMarkdownMedia.test.ts +0 -83
  157. package/src/__tests__/drawing.test.ts +0 -109
  158. package/src/__tests__/drawingBlock.test.ts +0 -124
  159. package/src/__tests__/drawingLayout.test.ts +0 -171
  160. package/src/__tests__/fixtures/asciiDiagramBattle.ts +0 -512
  161. package/src/__tests__/fixtures/asciiDiagrams.ts +0 -287
  162. package/src/__tests__/fixtures/asciiTimelines.ts +0 -35
  163. package/src/__tests__/fixtures/treeviewFixtures.ts +0 -243
  164. package/src/__tests__/geohash.test.ts +0 -110
  165. package/src/__tests__/getLayers.test.ts +0 -243
  166. package/src/__tests__/getLayersFallback.test.ts +0 -103
  167. package/src/__tests__/haversine.test.ts +0 -63
  168. package/src/__tests__/iconResolve.test.ts +0 -122
  169. package/src/__tests__/imageEditExportSvg.test.ts +0 -70
  170. package/src/__tests__/imageEditState.test.ts +0 -74
  171. package/src/__tests__/imageEditVersions.test.ts +0 -243
  172. package/src/__tests__/inferDocumentTitle.test.ts +0 -50
  173. package/src/__tests__/inlineIconMarker.test.ts +0 -36
  174. package/src/__tests__/inputDescriptors.test.ts +0 -162
  175. package/src/__tests__/jsonForm.chooseControl.test.ts +0 -86
  176. package/src/__tests__/jsonForm.evaluateWhen.test.ts +0 -59
  177. package/src/__tests__/jsonForm.inferSchema.test.ts +0 -25
  178. package/src/__tests__/jsonForm.pointer.test.ts +0 -149
  179. package/src/__tests__/jsonForm.tokens.test.ts +0 -84
  180. package/src/__tests__/layoutBlock.test.ts +0 -83
  181. package/src/__tests__/layoutLayout.test.ts +0 -169
  182. package/src/__tests__/localForageAdapter.test.ts +0 -155
  183. package/src/__tests__/majorApiTypes.test.ts +0 -18
  184. package/src/__tests__/markdown.test.ts +0 -1009
  185. package/src/__tests__/markdownIcons.test.ts +0 -104
  186. package/src/__tests__/markdownSanitize.test.ts +0 -81
  187. package/src/__tests__/markdownToDoc.test.ts +0 -957
  188. package/src/__tests__/matchFontFamily.test.ts +0 -114
  189. package/src/__tests__/materializeBlockLayers.test.ts +0 -167
  190. package/src/__tests__/materializePageSections.test.ts +0 -404
  191. package/src/__tests__/materializeTestUtils.ts +0 -17
  192. package/src/__tests__/mediaAnnotations.test.ts +0 -91
  193. package/src/__tests__/mediaSchedule.test.ts +0 -118
  194. package/src/__tests__/narrationAlign.test.ts +0 -150
  195. package/src/__tests__/narrationFeatures.test.ts +0 -71
  196. package/src/__tests__/narrationNuclei.test.ts +0 -45
  197. package/src/__tests__/narrationPacing.test.ts +0 -189
  198. package/src/__tests__/narrationScript.test.ts +0 -149
  199. package/src/__tests__/narrationSessionRepro.test.ts +0 -62
  200. package/src/__tests__/narrationSidecar.test.ts +0 -88
  201. package/src/__tests__/narrationSyllables.test.ts +0 -65
  202. package/src/__tests__/narrationTestSignals.ts +0 -167
  203. package/src/__tests__/narrationVad.test.ts +0 -66
  204. package/src/__tests__/pageStyle.test.ts +0 -258
  205. package/src/__tests__/pandocAttrParse.test.ts +0 -187
  206. package/src/__tests__/recommendTemplates.test.ts +0 -183
  207. package/src/__tests__/resolveDocTheme.test.ts +0 -69
  208. package/src/__tests__/rootExports.test.ts +0 -61
  209. package/src/__tests__/scopedContentContainer.test.ts +0 -109
  210. package/src/__tests__/seededRandom.test.ts +0 -142
  211. package/src/__tests__/shapeGeometry.test.ts +0 -138
  212. package/src/__tests__/shapeVocabulary.test.ts +0 -133
  213. package/src/__tests__/storage.test.ts +0 -60
  214. package/src/__tests__/structuredData.test.ts +0 -249
  215. package/src/__tests__/surface.test.ts +0 -68
  216. package/src/__tests__/templateAnnotationParse.test.ts +0 -173
  217. package/src/__tests__/templateInputs.test.ts +0 -69
  218. package/src/__tests__/templateMetadata.test.ts +0 -32
  219. package/src/__tests__/templates.test.ts +0 -710
  220. package/src/__tests__/themeCompile.test.ts +0 -225
  221. package/src/__tests__/themeValidator.test.ts +0 -131
  222. package/src/__tests__/timing.test.ts +0 -167
  223. package/src/__tests__/transformProvenance.test.ts +0 -160
  224. package/src/__tests__/transformV2.test.ts +0 -163
  225. package/src/__tests__/transitionNormalize.test.ts +0 -61
  226. package/src/__tests__/treeviewBattle.test.ts +0 -76
  227. package/src/__tests__/treeviewDetect.test.ts +0 -168
  228. package/src/__tests__/treeviewParse.test.ts +0 -118
  229. package/src/__tests__/treeviewPipeline.test.ts +0 -183
  230. package/src/__tests__/treeviewRender.test.ts +0 -91
  231. package/src/__tests__/validateDoc.test.ts +0 -260
  232. package/src/__tests__/versions.test.ts +0 -459
  233. package/src/doc/annotationBlocks.ts +0 -117
  234. package/src/doc/applyNarrationTiming.ts +0 -244
  235. package/src/doc/asciiDiagram/chars.ts +0 -210
  236. package/src/doc/asciiDiagram/detect.ts +0 -175
  237. package/src/doc/asciiDiagram/index.ts +0 -38
  238. package/src/doc/asciiDiagram/mapping.ts +0 -225
  239. package/src/doc/asciiDiagram/parse.ts +0 -1095
  240. package/src/doc/asciiDiagram/render.ts +0 -963
  241. package/src/doc/asciiDiagram/repair.ts +0 -400
  242. package/src/doc/asciiDiagram/types.ts +0 -65
  243. package/src/doc/asciiTimeline/detect.ts +0 -138
  244. package/src/doc/asciiTimeline/index.ts +0 -26
  245. package/src/doc/asciiTimeline/mapping.ts +0 -43
  246. package/src/doc/asciiTimeline/parse.ts +0 -870
  247. package/src/doc/asciiTimeline/render.ts +0 -427
  248. package/src/doc/asciiTimeline/types.ts +0 -73
  249. package/src/doc/asciiTimeline/wrappedFlow.ts +0 -427
  250. package/src/doc/audioMapping.ts +0 -442
  251. package/src/doc/customTemplatesFrontmatter.ts +0 -273
  252. package/src/doc/customThemesFrontmatter.ts +0 -95
  253. package/src/doc/docToMarkdown.ts +0 -284
  254. package/src/doc/index.ts +0 -161
  255. package/src/doc/markdownToDoc.ts +0 -1054
  256. package/src/doc/materializeBlockLayers.ts +0 -465
  257. package/src/doc/mediaAnnotations.ts +0 -120
  258. package/src/doc/page/PageSection.ts +0 -174
  259. package/src/doc/page/materializePageSection.ts +0 -616
  260. package/src/doc/page/resolvePageBlock.ts +0 -108
  261. package/src/doc/page/sectionExtractors.ts +0 -466
  262. package/src/doc/pageCss.ts +0 -628
  263. package/src/doc/resolveDocTheme.ts +0 -56
  264. package/src/doc/standaloneAnnotation.ts +0 -58
  265. package/src/doc/structuredData.ts +0 -301
  266. package/src/doc/templateInputs.ts +0 -424
  267. package/src/doc/templates/__tests__/customTemplate.test.ts +0 -170
  268. package/src/doc/templates/__tests__/customTemplateRegistry.test.ts +0 -124
  269. package/src/doc/templates/__tests__/listBlock.test.ts +0 -64
  270. package/src/doc/templates/accentImage.ts +0 -362
  271. package/src/doc/templates/captionUtils.ts +0 -56
  272. package/src/doc/templates/comparisonBar.ts +0 -173
  273. package/src/doc/templates/coverBlock.ts +0 -255
  274. package/src/doc/templates/customTemplate.ts +0 -51
  275. package/src/doc/templates/dataTable.ts +0 -102
  276. package/src/doc/templates/dateEvent.ts +0 -147
  277. package/src/doc/templates/definitionCard.ts +0 -140
  278. package/src/doc/templates/diagramBlock.ts +0 -403
  279. package/src/doc/templates/diagramLayout.ts +0 -159
  280. package/src/doc/templates/drawingBlock.ts +0 -325
  281. package/src/doc/templates/drawingLayout.ts +0 -539
  282. package/src/doc/templates/factCard.ts +0 -146
  283. package/src/doc/templates/fallbackBlock.ts +0 -123
  284. package/src/doc/templates/featureBlock.ts +0 -209
  285. package/src/doc/templates/fullBleedQuote.ts +0 -83
  286. package/src/doc/templates/imageWithCaption.ts +0 -186
  287. package/src/doc/templates/index.ts +0 -642
  288. package/src/doc/templates/inputDescriptors.ts +0 -451
  289. package/src/doc/templates/layoutBlock.ts +0 -43
  290. package/src/doc/templates/layoutLayout.ts +0 -243
  291. package/src/doc/templates/listBlock.ts +0 -207
  292. package/src/doc/templates/mapBlock.ts +0 -138
  293. package/src/doc/templates/metadata.ts +0 -130
  294. package/src/doc/templates/persistentLayers.ts +0 -526
  295. package/src/doc/templates/photoGrid.ts +0 -190
  296. package/src/doc/templates/pullQuote.ts +0 -141
  297. package/src/doc/templates/quoteBlock.ts +0 -141
  298. package/src/doc/templates/registry.ts +0 -88
  299. package/src/doc/templates/sectionHeader.ts +0 -120
  300. package/src/doc/templates/statHighlight.ts +0 -146
  301. package/src/doc/templates/templateNames.ts +0 -22
  302. package/src/doc/templates/timelineBlock.ts +0 -613
  303. package/src/doc/templates/titleBlock.ts +0 -150
  304. package/src/doc/templates/tokens/__tests__/resolveTokens.test.ts +0 -487
  305. package/src/doc/templates/tokens/resolveTokens.ts +0 -453
  306. package/src/doc/templates/treeBlock.ts +0 -131
  307. package/src/doc/templates/twoColumn.ts +0 -263
  308. package/src/doc/templates/videoPullQuote.ts +0 -142
  309. package/src/doc/templates/videoWithCaption.ts +0 -135
  310. package/src/doc/treeview/chars.ts +0 -72
  311. package/src/doc/treeview/detect.ts +0 -145
  312. package/src/doc/treeview/index.ts +0 -30
  313. package/src/doc/treeview/mapping.ts +0 -95
  314. package/src/doc/treeview/parse.ts +0 -201
  315. package/src/doc/treeview/render.ts +0 -41
  316. package/src/doc/treeview/types.ts +0 -43
  317. package/src/doc/utils/animationUtils.ts +0 -399
  318. package/src/doc/utils/applyRenderStyle.ts +0 -106
  319. package/src/doc/utils/diagramText.ts +0 -78
  320. package/src/doc/utils/imageTreatment.ts +0 -70
  321. package/src/doc/utils/nearest.ts +0 -59
  322. package/src/doc/utils/shapeGeometry.ts +0 -614
  323. package/src/doc/utils/themeUtils.ts +0 -243
  324. package/src/doc/validate.ts +0 -575
  325. package/src/generate/contentExtractor.ts +0 -921
  326. package/src/generate/index.ts +0 -18
  327. package/src/generate/templateMapper.ts +0 -177
  328. package/src/icons/iconData.ts +0 -31
  329. package/src/icons/index.ts +0 -26
  330. package/src/icons/inlineIconMarker.ts +0 -73
  331. package/src/icons/resolve.ts +0 -139
  332. package/src/imageEdit/ImageEditVersionManager.ts +0 -73
  333. package/src/imageEdit/export.ts +0 -410
  334. package/src/imageEdit/index.ts +0 -72
  335. package/src/imageEdit/persistence.ts +0 -113
  336. package/src/imageEdit/state.ts +0 -112
  337. package/src/imageEdit/versionPaths.ts +0 -44
  338. package/src/imageEdit/versions.ts +0 -152
  339. package/src/index.ts +0 -15
  340. package/src/internal/immutable.ts +0 -58
  341. package/src/jsonForm/chooseControl.ts +0 -88
  342. package/src/jsonForm/evaluateWhen.ts +0 -59
  343. package/src/jsonForm/index.ts +0 -32
  344. package/src/jsonForm/inferSchema.ts +0 -25
  345. package/src/jsonForm/pointer.ts +0 -154
  346. package/src/jsonForm/tokens.ts +0 -78
  347. package/src/jsonForm/types.ts +0 -167
  348. package/src/markdown/annotationCoercion.ts +0 -295
  349. package/src/markdown/attrTokens.ts +0 -243
  350. package/src/markdown/convert.ts +0 -1353
  351. package/src/markdown/htmlParse.ts +0 -212
  352. package/src/markdown/index.ts +0 -152
  353. package/src/markdown/parse.ts +0 -103
  354. package/src/markdown/sanitize.ts +0 -318
  355. package/src/markdown/stringify.ts +0 -207
  356. package/src/markdown/types.ts +0 -710
  357. package/src/markdown/utils.ts +0 -459
  358. package/src/narration/align.ts +0 -514
  359. package/src/narration/features.ts +0 -231
  360. package/src/narration/index.ts +0 -86
  361. package/src/narration/nuclei.ts +0 -118
  362. package/src/narration/pacing.ts +0 -211
  363. package/src/narration/script.ts +0 -239
  364. package/src/narration/session.ts +0 -100
  365. package/src/narration/sidecar.ts +0 -187
  366. package/src/narration/syllables.ts +0 -85
  367. package/src/narration/trace.ts +0 -50
  368. package/src/narration/types.ts +0 -299
  369. package/src/narration/vad.ts +0 -131
  370. package/src/ngeohash.d.ts +0 -11
  371. package/src/random/SeededRandom.ts +0 -127
  372. package/src/random/index.ts +0 -1
  373. package/src/recommend/index.ts +0 -16
  374. package/src/recommend/numberHighlight.ts +0 -25
  375. package/src/recommend/templates.ts +0 -393
  376. package/src/schemas/BlockTemplates.ts +0 -1046
  377. package/src/schemas/CustomTemplates.ts +0 -126
  378. package/src/schemas/Doc.ts +0 -1073
  379. package/src/schemas/ImageEditDoc.ts +0 -102
  380. package/src/schemas/LayoutStrategy.ts +0 -178
  381. package/src/schemas/Media.ts +0 -179
  382. package/src/schemas/MediaProvider.ts +0 -70
  383. package/src/schemas/PageStyle.ts +0 -213
  384. package/src/schemas/Theme.ts +0 -413
  385. package/src/schemas/Transitions.ts +0 -224
  386. package/src/schemas/Types.ts +0 -15
  387. package/src/schemas/Viewport.ts +0 -91
  388. package/src/schemas/colorUtils.ts +0 -219
  389. package/src/schemas/fontStacks.ts +0 -339
  390. package/src/schemas/index.ts +0 -31
  391. package/src/schemas/pageStyleDefaults.ts +0 -204
  392. package/src/schemas/themeCompile.ts +0 -244
  393. package/src/schemas/themeConstants.ts +0 -2
  394. package/src/schemas/themeLibrary.ts +0 -60
  395. package/src/schemas/themeValidator.ts +0 -609
  396. package/src/schemas/themes/bold.json +0 -77
  397. package/src/schemas/themes/cinematic.json +0 -143
  398. package/src/schemas/themes/documentary.json +0 -125
  399. package/src/schemas/themes/gezellig.json +0 -123
  400. package/src/schemas/themes/index.ts +0 -53
  401. package/src/schemas/themes/magazine.json +0 -126
  402. package/src/schemas/themes/minimalist.json +0 -74
  403. package/src/schemas/themes/morning-light.json +0 -117
  404. package/src/schemas/themes/standard-dark.json +0 -109
  405. package/src/schemas/themes/standard.json +0 -98
  406. package/src/schemas/themes/tech-dark.json +0 -143
  407. package/src/schemas/themes/warm-earth.json +0 -74
  408. package/src/spatial/Geohash.ts +0 -196
  409. package/src/spatial/Haversine.ts +0 -59
  410. package/src/spatial/index.ts +0 -2
  411. package/src/storage/ContentContainer.ts +0 -220
  412. package/src/storage/LocalForageAdapter.ts +0 -103
  413. package/src/storage/LocalStorageAdapter.ts +0 -57
  414. package/src/storage/MediaProviderFromContainer.ts +0 -92
  415. package/src/storage/MemoryStorageAdapter.ts +0 -37
  416. package/src/storage/ScopedContentContainer.ts +0 -143
  417. package/src/storage/Storage.ts +0 -28
  418. package/src/storage/index.ts +0 -9
  419. package/src/timing/index.ts +0 -17
  420. package/src/timing/narrationTiming.ts +0 -220
  421. package/src/timing/readingTime.ts +0 -94
  422. package/src/transform/applyTransform.ts +0 -122
  423. package/src/transform/blockAnalyzer.ts +0 -181
  424. package/src/transform/index.ts +0 -23
  425. package/src/transform/registry.ts +0 -217
  426. package/src/transform/styles/dataDriven.ts +0 -18
  427. package/src/transform/styles/documentary.ts +0 -18
  428. package/src/transform/styles/index.ts +0 -5
  429. package/src/transform/styles/magazine.ts +0 -19
  430. package/src/transform/styles/minimal.ts +0 -18
  431. package/src/transform/styles/narrative.ts +0 -19
  432. package/src/transform/templateSelector.ts +0 -389
  433. package/src/transform/timingAllocator.ts +0 -257
  434. package/src/transform/types.ts +0 -158
  435. package/src/versions/DocumentVersionManager.ts +0 -70
  436. package/src/versions/gitignore.ts +0 -34
  437. package/src/versions/index.ts +0 -56
  438. package/src/versions/operations.ts +0 -144
  439. package/src/versions/paths.ts +0 -51
  440. package/src/versions/snapshotStore.ts +0 -202
  441. package/src/versions/timestamp.ts +0 -48
  442. package/src/versions/types.ts +0 -93
@@ -24,24 +24,27 @@ import {
24
24
  templateRegistry,
25
25
  writeCustomTemplatesToFrontmatter,
26
26
  writeCustomThemesToFrontmatter
27
- } from "./chunk-JI77MGAK.js";
27
+ } from "./chunk-GIIOY6XR.js";
28
28
  import {
29
29
  ASCII_TREE_VOCAB,
30
30
  ASCII_VOCAB,
31
+ MAX_BRIDGE_GAP,
31
32
  UNICODE_TREE_VOCAB,
32
33
  UNICODE_VOCAB,
33
34
  arrowDirection,
35
+ cellWidth,
34
36
  detectAsciiDiagram,
35
37
  isHoriz,
36
38
  isJunction,
37
39
  isVert,
40
+ toCells,
38
41
  toGrid,
39
42
  traceBoxes
40
- } from "./chunk-5UYI3RJB.js";
43
+ } from "./chunk-QWCFK5FN.js";
41
44
  import {
42
45
  defaultPageStyle,
43
46
  resolveMediaSchedule
44
- } from "./chunk-VWCJ2WXC.js";
47
+ } from "./chunk-2ZWIXGAC.js";
45
48
  import {
46
49
  DEFAULT_THEME,
47
50
  FRONTMATTER_CUSTOM_TEMPLATES_KEY,
@@ -49,27 +52,27 @@ import {
49
52
  hexHueDegrees,
50
53
  resolveFontFamily,
51
54
  resolveTheme
52
- } from "./chunk-JHZWYRSW.js";
55
+ } from "./chunk-C33GTPUZ.js";
53
56
  import {
54
57
  VIEWPORT_PRESETS,
55
58
  isTemplateBlock
56
- } from "./chunk-5J4HKRJF.js";
59
+ } from "./chunk-BAOV476U.js";
57
60
  import {
58
61
  parseMarkdown
59
- } from "./chunk-66QO7XFB.js";
62
+ } from "./chunk-ACZOVWX3.js";
60
63
  import {
61
64
  KNOWN_BLOCK_META_KEYS,
62
65
  coerceAnnotationValues,
63
66
  serializeAnnotation
64
- } from "./chunk-R2YZTCLO.js";
67
+ } from "./chunk-ZQKZSJAX.js";
65
68
  import {
66
69
  extractPlainText,
67
70
  getChildren,
68
71
  readFrontmatterThemeId
69
- } from "./chunk-AMIR72JP.js";
72
+ } from "./chunk-BCCXTMN5.js";
70
73
  import {
71
74
  estimateTimeFromText
72
- } from "./chunk-3E5F2XMR.js";
75
+ } from "./chunk-67L6WRJN.js";
73
76
 
74
77
  // src/doc/utils/animationUtils.ts
75
78
  function getAnimationStyle(animation, _currentTime = 0) {
@@ -330,7 +333,9 @@ function cssFilterForTreatment(treatment, blur) {
330
333
 
331
334
  // src/doc/docToMarkdown.ts
332
335
  var TRANSITION_PARAM_KEYS = ["transition", "transitionDuration", "transitionDirection"];
333
- function docToMarkdown(doc) {
336
+ var DEFAULT_TEMPLATE = "sectionHeader";
337
+ function docToMarkdown(doc, options = {}) {
338
+ const defaultTemplate = resolveTemplateName(options.defaultTemplate ?? DEFAULT_TEMPLATE);
334
339
  const children = [];
335
340
  const blockIds = new Set(flattenBlocks(doc.blocks).map((b) => b.id));
336
341
  const docMediaByBlock = /* @__PURE__ */ new Map();
@@ -349,7 +354,7 @@ function docToMarkdown(doc) {
349
354
  }
350
355
  function emitBlock(block) {
351
356
  if (block.sourceHeading) {
352
- const heading = ensureAnnotation(block, block.sourceHeading);
357
+ const heading = ensureAnnotation(block, block.sourceHeading, defaultTemplate);
353
358
  children.push(heading);
354
359
  } else if (block.standaloneAnnotation) {
355
360
  children.push(synthesizeAnnotationParagraph(block));
@@ -423,15 +428,16 @@ function synthesizeMediaParagraph(clip) {
423
428
  children: [{ type: "text", value: serializeAnnotation(clip.kind, params) }]
424
429
  };
425
430
  }
426
- function ensureAnnotation(block, heading) {
431
+ function ensureAnnotation(block, heading, defaultTemplate) {
427
432
  const { attributes, transitionParams } = ensureTransitionMetadata(block, heading);
428
- const hasExplicitTemplate = block.template && block.template !== "sectionHeader" && block.autoTemplate !== true;
429
- const hasOverrides = block.templateOverrides && Object.keys(block.templateOverrides).length > 0;
430
- let templateAnnotation = heading.templateAnnotation;
431
- if (!templateAnnotation && (hasExplicitTemplate || hasOverrides || transitionParams)) {
433
+ const existing = heading.templateAnnotation;
434
+ const template = resolveAnnotationTemplate(block, existing, defaultTemplate);
435
+ const overrides = block.templateOverrides && Object.keys(block.templateOverrides).length > 0 ? block.templateOverrides : void 0;
436
+ let templateAnnotation;
437
+ if (template !== void 0 || overrides !== void 0) {
432
438
  templateAnnotation = {
433
- ...hasExplicitTemplate ? { template: block.template ?? "sectionHeader" } : {},
434
- ...hasOverrides ? { params: block.templateOverrides } : {}
439
+ ...template !== void 0 ? { template } : {},
440
+ ...overrides ? { params: overrides } : {}
435
441
  };
436
442
  }
437
443
  if (transitionParams) {
@@ -443,11 +449,33 @@ function ensureAnnotation(block, heading) {
443
449
  }
444
450
  };
445
451
  }
452
+ if (annotationsEqual(existing, templateAnnotation)) templateAnnotation = existing;
446
453
  if (attributes === heading.attributes && templateAnnotation === heading.templateAnnotation) {
447
454
  return heading;
448
455
  }
449
456
  return { ...heading, children: [...heading.children], attributes, templateAnnotation };
450
457
  }
458
+ function resolveAnnotationTemplate(block, existing, defaultTemplate) {
459
+ if (!block.template || block.autoTemplate === true) return existing?.template;
460
+ const template = resolveTemplateName(block.template);
461
+ if (existing?.template && resolveTemplateName(existing.template) === template) {
462
+ return existing.template;
463
+ }
464
+ if (template === defaultTemplate) return void 0;
465
+ return block.template;
466
+ }
467
+ function annotationsEqual(a, b) {
468
+ if (a === b) return true;
469
+ if (!a || !b) return false;
470
+ return a.template === b.template && paramsEqual(a.params, b.params);
471
+ }
472
+ function paramsEqual(a, b) {
473
+ if (a === b) return true;
474
+ if (!a || !b) return false;
475
+ const keys = Object.keys(a);
476
+ if (keys.length !== Object.keys(b).length) return false;
477
+ return keys.every((key) => Object.prototype.hasOwnProperty.call(b, key) && a[key] === b[key]);
478
+ }
451
479
  function ensureTransitionMetadata(block, heading) {
452
480
  const transition = block.transition;
453
481
  if (!transition) {
@@ -509,8 +537,12 @@ function resolvePageBlock(block) {
509
537
  };
510
538
  const coercedParams = coerceTemplateParams(rawName, rawParams).input;
511
539
  let base;
540
+ let derivedInputs = null;
512
541
  if (annotation) {
513
542
  const headingText = extractPlainText(block.sourceHeading);
543
+ derivedInputs = deriveTemplateInputs(rawName, headingText, block.contents, {
544
+ placeholders: true
545
+ });
514
546
  base = {
515
547
  id: block.id,
516
548
  template: rawName,
@@ -520,9 +552,7 @@ function resolvePageBlock(block) {
520
552
  title: headingText,
521
553
  contents: block.contents,
522
554
  children: block.children,
523
- ...deriveTemplateInputs(rawName, headingText, block.contents, {
524
- placeholders: true
525
- }) ?? {}
555
+ ...derivedInputs ?? {}
526
556
  };
527
557
  } else {
528
558
  base = {
@@ -538,6 +568,14 @@ function resolvePageBlock(block) {
538
568
  ...block.templateData ?? {},
539
569
  ...coercedParams
540
570
  };
571
+ const explicitQuote = Object.prototype.hasOwnProperty.call(coercedParams, "quote") ? coercedParams.quote : block.templateData?.quote;
572
+ if (templateName === "quote" && derivedInputs && !Object.prototype.hasOwnProperty.call(derivedInputs, "title") && !(typeof explicitQuote === "string" && explicitQuote.trim())) {
573
+ const quoteInput = templateBlock;
574
+ quoteInput.quote = derivedInputs.quote;
575
+ if (!Object.prototype.hasOwnProperty.call(block.templateData ?? {}, "title") && !Object.prototype.hasOwnProperty.call(coercedParams, "title")) {
576
+ delete quoteInput.title;
577
+ }
578
+ }
541
579
  return { templated: true, templateName, templateBlock };
542
580
  }
543
581
 
@@ -614,6 +652,7 @@ var quote = (input) => {
614
652
  kind: "quote-band",
615
653
  variant: "plain",
616
654
  slots: {
655
+ title: q.title,
617
656
  body: { text: q.quote ?? "" },
618
657
  attribution: q.attribution,
619
658
  media: accentImageMedia(q.accentImage)
@@ -2068,10 +2107,11 @@ async function discoverNarrationAudio(container) {
2068
2107
  let timing = null;
2069
2108
  if (consolidatedSections) {
2070
2109
  const audioBase = stripAudioExtension(filename);
2110
+ let matchedName = "";
2071
2111
  for (const [sectionName, sectionTiming] of Object.entries(consolidatedSections)) {
2072
- if (audioBase.endsWith(`-${sectionName}`)) {
2112
+ if (audioBase.endsWith(`-${sectionName}`) && sectionName.length > matchedName.length) {
2113
+ matchedName = sectionName;
2073
2114
  timing = sectionTiming;
2074
- break;
2075
2115
  }
2076
2116
  }
2077
2117
  }
@@ -2508,6 +2548,17 @@ function truncate(text, max = 40) {
2508
2548
  }
2509
2549
 
2510
2550
  // src/doc/asciiDiagram/render.ts
2551
+ function normalizeLabelLines(label) {
2552
+ return label.split("\n").map((line) => line.trim()).filter((line) => line.length > 0);
2553
+ }
2554
+ function normalizeEdgeLabel(label) {
2555
+ if (label === void 0) return void 0;
2556
+ const collapsed = label.replace(/\s+/gu, " ").trim();
2557
+ return collapsed.length > 0 ? collapsed : void 0;
2558
+ }
2559
+ function edgeLabelFitsBridge(text) {
2560
+ return text.length <= MAX_BRIDGE_GAP;
2561
+ }
2511
2562
  var SIDE_MARGIN = 1;
2512
2563
  function renderAsciiDiagram(diagram2, options = {}) {
2513
2564
  const vocab = (options.style ?? diagram2.style) === "ascii" ? ASCII_VOCAB : UNICODE_VOCAB;
@@ -2591,10 +2642,10 @@ function layoutNodes(nodes, edges) {
2591
2642
  };
2592
2643
  const layoutSubtree = (id, depth) => {
2593
2644
  const node = byId.get(id);
2594
- const labelLines = node.label.length > 0 ? node.label.split("\n") : [];
2645
+ const labelLines = normalizeLabelLines(node.label);
2595
2646
  const children = childIds.get(id) ?? [];
2596
2647
  if (children.length === 0) {
2597
- const innerW = labelLines.reduce((w, l) => Math.max(w, l.length), 0);
2648
+ const innerW = labelLines.reduce((w, l) => Math.max(w, cellWidth(l)), 0);
2598
2649
  const deg = sideDeg.get(id) ?? { top: 0, bottom: 0, left: 0, right: 0 };
2599
2650
  const horizDeg = Math.max(deg.top, deg.bottom);
2600
2651
  const vertDeg = Math.max(deg.left, deg.right);
@@ -2617,14 +2668,15 @@ function layoutNodes(nodes, edges) {
2617
2668
  const childRects = placeSiblings(children, (childId) => layoutSubtree(childId, depth + 1));
2618
2669
  const bbox = unionRects(childRects);
2619
2670
  const extraRows = Math.max(0, labelLines.length - 1);
2620
- const titleLen = (labelLines[0] ?? "").length;
2671
+ const titleLen = cellWidth(labelLines[0] ?? "");
2621
2672
  const rect = {
2622
2673
  r0: bbox.r0 - 2 - extraRows,
2623
2674
  c0: bbox.c0 - 2,
2624
2675
  r1: bbox.r1 + 2,
2625
2676
  c1: bbox.c1 + 2
2626
2677
  };
2627
- const minW = titleLen > 0 ? titleLen + 6 : 3;
2678
+ const innerLinesW = labelLines.slice(1).reduce((w, l) => Math.max(w, cellWidth(l)), 0);
2679
+ const minW = Math.max(titleLen > 0 ? titleLen + 6 : 3, innerLinesW > 0 ? innerLinesW + 4 : 3);
2628
2680
  if (rect.c1 - rect.c0 + 1 < minW) rect.c1 = rect.c0 + minW - 1;
2629
2681
  if (rect.c1 - rect.c0 + 1 < node.wCols) rect.c1 = rect.c0 + node.wCols - 1;
2630
2682
  placed.set(id, { node, rect, labelLines, isContainer: true, depth });
@@ -2718,7 +2770,7 @@ function drawBox(canvas, p, vocab) {
2718
2770
  const innerW = rect.c1 - rect.c0 - 1;
2719
2771
  canvas.set(rect.r0, rect.c0, vocab.tl, "border");
2720
2772
  canvas.set(rect.r0, rect.c1, vocab.tr, "border");
2721
- const title2 = isContainer && labelLines.length > 0 ? ` ${labelLines[0]} ` : null;
2773
+ const title2 = isContainer && labelLines.length > 0 ? toCells(` ${labelLines[0]} `) : null;
2722
2774
  if (title2 && title2.length <= innerW - 2) {
2723
2775
  const left = Math.floor((innerW - title2.length) / 2);
2724
2776
  for (let i = 0; i < innerW; i++) {
@@ -2741,9 +2793,10 @@ function drawBox(canvas, p, vocab) {
2741
2793
  const innerH = rect.r1 - rect.r0 - 1;
2742
2794
  const startRow = isContainer ? rect.r0 + 1 : rect.r0 + 1 + Math.max(0, Math.floor((innerH - interiorLines.length) / 2));
2743
2795
  interiorLines.forEach((line, i) => {
2744
- const pad = Math.max(0, Math.floor((innerW - line.length) / 2));
2745
- for (let j = 0; j < line.length && pad + j < innerW; j++) {
2746
- canvas.set(startRow + i, rect.c0 + 1 + pad + j, line[j], "label");
2796
+ const cells = toCells(line);
2797
+ const pad = Math.max(0, Math.floor((innerW - cells.length) / 2));
2798
+ for (let j = 0; j < cells.length && pad + j < innerW; j++) {
2799
+ canvas.set(startRow + i, rect.c0 + 1 + pad + j, cells[j], "label");
2747
2800
  }
2748
2801
  });
2749
2802
  }
@@ -2795,24 +2848,25 @@ function drawEdges(canvas, edges, placed, vocab) {
2795
2848
  )
2796
2849
  );
2797
2850
  for (const req of sideLabelRequests) {
2851
+ const cells = toCells(req.label);
2798
2852
  let done = false;
2799
2853
  for (const side of ["right", "left"]) {
2800
2854
  if (done) break;
2801
2855
  for (const { row, col } of req.candidates) {
2802
2856
  if (canvas.kindAt(row, col) !== "line-v") continue;
2803
- const startCol = side === "right" ? col + 2 : col - 1 - req.label.length;
2857
+ const startCol = side === "right" ? col + 2 : col - 1 - cells.length;
2804
2858
  if (startCol < 0) continue;
2805
2859
  const gapCol = side === "right" ? col + 1 : col - 1;
2806
2860
  let free = canvas.kindAt(row, gapCol) === "empty";
2807
- for (let i = 0; free && i < req.label.length; i++) {
2861
+ for (let i = 0; free && i < cells.length; i++) {
2808
2862
  if (canvas.kindAt(row, startCol + i) !== "empty") free = false;
2809
2863
  }
2810
2864
  if (free && side === "left" && startCol > 0) {
2811
2865
  free = canvas.kindAt(row, startCol - 1) === "empty";
2812
2866
  }
2813
2867
  if (!free) continue;
2814
- for (let i = 0; i < req.label.length; i++) {
2815
- canvas.set(row, startCol + i, req.label[i], "label");
2868
+ for (let i = 0; i < cells.length; i++) {
2869
+ canvas.set(row, startCol + i, cells[i], "label");
2816
2870
  }
2817
2871
  done = true;
2818
2872
  break;
@@ -2891,7 +2945,7 @@ function routeEdge(canvas, plan, planIdx, placed, attachment, vocab, deferSideLa
2891
2945
  canvas,
2892
2946
  directed: plan.edge.directed,
2893
2947
  biDir: plan.biDir,
2894
- label: plan.edge.label,
2948
+ label: normalizeEdgeLabel(plan.edge.label),
2895
2949
  vocab,
2896
2950
  junction,
2897
2951
  stagger,
@@ -2989,8 +3043,8 @@ function drawVertical(args, s, t, exitCol, enterCol, dir) {
2989
3043
  const hi = Math.max(exitCol, enterCol);
2990
3044
  let segment = [];
2991
3045
  for (let c = lo + 1; c <= hi - 1; c++) segment.push(vocab.h);
2992
- if (label && segment.length >= label.length + 4) {
2993
- const text = ` ${label} `;
3046
+ const text = label ? toCells(` ${label} `) : null;
3047
+ if (text && edgeLabelFitsBridge(text) && segment.length >= text.length + 2) {
2994
3048
  const left = Math.floor((segment.length - text.length) / 2);
2995
3049
  segment = segment.map((ch, i) => i >= left && i < left + text.length ? text[i - left] : ch);
2996
3050
  labelEmbedded = true;
@@ -3045,15 +3099,22 @@ function drawHorizontal(args, s, t, exitRow, enterRow, dir) {
3045
3099
  const firstFree = exitCol + dir;
3046
3100
  const lastFree = enterCol - dir;
3047
3101
  const gap = (lastFree - firstFree) * dir + 1;
3048
- const drawH = (row, cA, cB, hostLabel) => {
3102
+ const drawH = (row, cA, cB, hostLabel, reserveLo = 0, reserveHi = 0) => {
3049
3103
  const lo = Math.min(cA, cB);
3050
3104
  const hi = Math.max(cA, cB);
3051
3105
  let segment = [];
3052
3106
  for (let c = lo; c <= hi; c++) segment.push(vocab.h);
3053
- if (hostLabel && label && segment.length >= label.length + 4) {
3054
- const text = ` ${label} `;
3055
- const left = Math.floor((segment.length - text.length) / 2);
3056
- segment = segment.map((ch, i) => i >= left && i < left + text.length ? text[i - left] : ch);
3107
+ const text = hostLabel && label ? toCells(` ${label} `) : null;
3108
+ if (text && edgeLabelFitsBridge(text)) {
3109
+ const from = reserveLo;
3110
+ const to = segment.length - 1 - reserveHi;
3111
+ const room = to - from + 1;
3112
+ if (room >= text.length + 2) {
3113
+ const left = from + Math.floor((room - text.length) / 2);
3114
+ segment = segment.map(
3115
+ (ch, i) => i >= left && i < left + text.length ? text[i - left] : ch
3116
+ );
3117
+ }
3057
3118
  }
3058
3119
  segment.forEach((ch, i) => {
3059
3120
  canvas.drawEdgeCell(row, lo + i, ch, ch === vocab.h ? "line-h" : "label", vocab);
@@ -3066,7 +3127,14 @@ function drawHorizontal(args, s, t, exitRow, enterRow, dir) {
3066
3127
  junction(sRow, exitCol, dir === 1 ? "right" : "left");
3067
3128
  junction(tRow, enterCol, dir === 1 ? "left" : "right");
3068
3129
  if (sRow === tRow && gap >= 1) {
3069
- drawH(sRow, firstFree, lastFree, true);
3130
+ drawH(
3131
+ sRow,
3132
+ firstFree,
3133
+ lastFree,
3134
+ true,
3135
+ (dir === 1 ? biDir : directed) ? 1 : 0,
3136
+ (dir === 1 ? directed : biDir) ? 1 : 0
3137
+ );
3070
3138
  if (directed) {
3071
3139
  canvas.drawEdgeCell(
3072
3140
  sRow,
@@ -3095,7 +3163,16 @@ function drawHorizontal(args, s, t, exitRow, enterRow, dir) {
3095
3163
  );
3096
3164
  junction(exitRow, exitCol, dir === 1 ? "right" : "left");
3097
3165
  junction(enterRow, enterCol, dir === 1 ? "left" : "right");
3098
- if (Math.abs(midCol - exitCol) >= 2) drawH(exitRow, firstFree, midCol - dir, true);
3166
+ if (Math.abs(midCol - exitCol) >= 2) {
3167
+ drawH(
3168
+ exitRow,
3169
+ firstFree,
3170
+ midCol - dir,
3171
+ true,
3172
+ dir === 1 && biDir ? 1 : 0,
3173
+ dir === -1 && biDir ? 1 : 0
3174
+ );
3175
+ }
3099
3176
  if (Math.abs(enterCol - midCol) >= 2) drawH(enterRow, midCol + dir, lastFree, false);
3100
3177
  if (exitRow === enterRow) {
3101
3178
  canvas.drawEdgeCell(exitRow, midCol, vocab.h, "line-h", vocab);
@@ -3670,10 +3747,17 @@ function formatCoordinate(value) {
3670
3747
  }
3671
3748
 
3672
3749
  // src/doc/treeview/render.ts
3750
+ function normalizeText(text) {
3751
+ return text.replace(/\s+/gu, " ").trim();
3752
+ }
3673
3753
  function renderTree(tree2, options = {}) {
3674
3754
  const vocab = (options.style ?? tree2.style) === "ascii" ? ASCII_TREE_VOCAB : UNICODE_TREE_VOCAB;
3675
3755
  const lines = [];
3676
- const label = (node) => node.comment ? `${node.label} # ${node.comment}` : node.label;
3756
+ const label = (node) => {
3757
+ const text = normalizeText(node.label);
3758
+ const comment = node.comment ? normalizeText(node.comment) : "";
3759
+ return comment ? `${text} # ${comment}` : text;
3760
+ };
3677
3761
  const walk = (nodes, prefix) => {
3678
3762
  nodes.forEach((node, i) => {
3679
3763
  const last = i === nodes.length - 1;
@@ -3717,4 +3801,3 @@ export {
3717
3801
  renderAsciiTimeline,
3718
3802
  renderTree
3719
3803
  };
3720
- //# sourceMappingURL=chunk-OTKVFVL6.js.map
@@ -2,9 +2,15 @@ import {
2
2
  extractPlainText,
3
3
  findNodesByType,
4
4
  walkMarkdownTree
5
- } from "./chunk-AMIR72JP.js";
5
+ } from "./chunk-BCCXTMN5.js";
6
6
 
7
7
  // src/doc/asciiDiagram/chars.ts
8
+ function toCells(s) {
9
+ return Array.from(s);
10
+ }
11
+ function cellWidth(s) {
12
+ return toCells(s).length;
13
+ }
8
14
  var TL_CORNERS = /* @__PURE__ */ new Set(["\u250C", "\u256D", "\u250F", "\u2554"]);
9
15
  var TR_CORNERS = /* @__PURE__ */ new Set(["\u2510", "\u256E", "\u2513", "\u2557"]);
10
16
  var BL_CORNERS = /* @__PURE__ */ new Set(["\u2514", "\u2570", "\u2517", "\u255A"]);
@@ -326,39 +332,14 @@ function traceBoxFrom(grid, r0, c0, repair = false) {
326
332
  const H = grid.length;
327
333
  const W = grid[0]?.length ?? 0;
328
334
  const trCandidates = [];
329
- let titleRun = null;
330
- let c = c0 + 1;
331
- while (c < W) {
335
+ for (let c = c0 + 1; c < W; c++) {
332
336
  const ch = grid[r0][c];
333
337
  if (isTrCorner(ch)) {
334
338
  trCandidates.push(c);
335
- break;
336
- }
337
- if (isPlus(ch) || isJunction(ch)) {
338
- trCandidates.push(c);
339
- c++;
340
- continue;
341
- }
342
- if (isFlatBorderChar(ch)) {
343
- c++;
339
+ if (isSideBorderChar(grid[r0 + 1]?.[c] ?? " ")) break;
344
340
  continue;
345
341
  }
346
- if (arrowDirection(ch) !== null) {
347
- c++;
348
- continue;
349
- }
350
- if (titleRun) break;
351
- let end = c;
352
- let sawText = false;
353
- while (end < W && end - c <= MAX_TITLE_RUN) {
354
- const tch = grid[r0][end];
355
- if (isFlatBorderChar(tch) || isTrCorner(tch) || arrowDirection(tch) !== null) break;
356
- if (tch !== " ") sawText = true;
357
- end++;
358
- }
359
- if (end >= W || end - c > MAX_TITLE_RUN || !sawText || end === c) break;
360
- titleRun = { from: c, to: end - 1 };
361
- c = end;
342
+ if (isPlus(ch) || isJunction(ch)) trCandidates.push(c);
362
343
  }
363
344
  if (trCandidates.length === 0) return null;
364
345
  const leftCandidates = walkSideWall(grid, c0, r0, H, isBlCorner, repair);
@@ -366,6 +347,8 @@ function traceBoxFrom(grid, r0, c0, repair = false) {
366
347
  const leftSet = new Set(leftCandidates);
367
348
  for (const c1 of trCandidates) {
368
349
  if (c1 < c0 + 2) continue;
350
+ const titleScan = scanBorderTitle(grid[r0], c0, c1);
351
+ if (!titleScan.ok) continue;
369
352
  const rightCandidates = walkSideWall(grid, c1, r0, H, isBrCorner, repair);
370
353
  for (const r1 of rightCandidates) {
371
354
  if (r1 < r0 + 2) continue;
@@ -386,12 +369,22 @@ function traceBoxFrom(grid, r0, c0, repair = false) {
386
369
  if (hasSideBorderNear(grid[ir], c1, win)) rightBorders++;
387
370
  }
388
371
  if (leftBorders === 0 || rightBorders === 0) continue;
389
- const title = titleRun && titleRun.to < c1 ? grid[r0].slice(titleRun.from, titleRun.to + 1).join("").trim() : void 0;
390
- return { r0, c0, r1, c1, ...title ? { borderTitle: title } : {} };
372
+ return { r0, c0, r1, c1, ...titleScan.title ? { borderTitle: titleScan.title } : {} };
391
373
  }
392
374
  }
393
375
  return null;
394
376
  }
377
+ function scanBorderTitle(row, c0, c1) {
378
+ const isFiller = (ch) => isFlatBorderChar(ch) || arrowDirection(ch) !== null;
379
+ let lo = c0 + 1;
380
+ let hi = c1 - 1;
381
+ while (lo <= hi && isFiller(row[lo])) lo++;
382
+ while (hi >= lo && isFiller(row[hi])) hi--;
383
+ if (lo > hi) return { ok: true };
384
+ if (hi - lo + 1 > MAX_TITLE_RUN) return { ok: false };
385
+ const title = row.slice(lo, hi + 1).join("").trim();
386
+ return title.length > 0 ? { ok: true, title } : { ok: true };
387
+ }
395
388
  function hasSideBorderNear(row, col, win) {
396
389
  for (let c = col - win; c <= col + win; c++) {
397
390
  const ch = row[c];
@@ -488,6 +481,7 @@ function buildBoxes(grid, rects, warnings) {
488
481
  return boxes;
489
482
  }
490
483
  function isDividerRow(rowText) {
484
+ if (rowText.length === 0 || rowText !== rowText.trim()) return false;
491
485
  let sawLine = false;
492
486
  for (const ch of rowText) {
493
487
  if (ch === " ") continue;
@@ -543,17 +537,17 @@ function extractEdges(grid, mask, perimeterOwners, boxes, warnings) {
543
537
  while (g < W && g - runEnd - 1 <= MAX_BRIDGE_GAP) {
544
538
  const gch = grid[r][g];
545
539
  const gidx = r * W + g;
546
- if (mask[gidx] || isVert(gch)) {
540
+ if (mask[gidx]) {
547
541
  failed = true;
548
542
  break;
549
543
  }
550
- if (isHoriz(gch)) break;
551
- if (isLineChar(gch) || arrowDirection(gch) !== null) {
552
- failed = true;
553
- break;
544
+ if (isHoriz(gch)) {
545
+ if (horizRunReachesStructure(grid, mask, r, g, W)) break;
546
+ while (g < W && isHoriz(grid[r][g])) g++;
547
+ sawText = true;
548
+ continue;
554
549
  }
555
- const asc = asciiArrowDirection(gch);
556
- if (asc && asciiArrowGate(grid, r, g, asc)) {
550
+ if (isStructuralInGap(grid, r, g)) {
557
551
  failed = true;
558
552
  break;
559
553
  }
@@ -816,6 +810,24 @@ function extractEdges(grid, mask, perimeterOwners, boxes, warnings) {
816
810
  for (const idx of sideLabelCells) edgeCells.add(idx);
817
811
  return { edges, edgeCells };
818
812
  }
813
+ function horizRunReachesStructure(grid, mask, r, c, W) {
814
+ let end = c;
815
+ while (end < W && isHoriz(grid[r][end]) && !mask[r * W + end]) end++;
816
+ if (end >= W || mask[r * W + end]) return true;
817
+ const ch = grid[r][end];
818
+ if (isLineChar(ch) || arrowDirection(ch) !== null) return true;
819
+ const asc = asciiArrowDirection(ch);
820
+ return asc !== null && asciiArrowGate(grid, r, end, asc);
821
+ }
822
+ function isStructuralInGap(grid, r, c) {
823
+ const ch = grid[r][c];
824
+ if (arrowDirection(ch) !== null) return true;
825
+ const asc = asciiArrowDirection(ch);
826
+ if (asc !== null && asciiArrowGate(grid, r, c, asc)) return true;
827
+ if (!isLineChar(ch)) return false;
828
+ const isDrawing = (x) => x !== void 0 && (isLineChar(x) || arrowDirection(x) !== null);
829
+ return isDrawing(grid[r - 1]?.[c]) || isDrawing(grid[r + 1]?.[c]);
830
+ }
819
831
  function asciiArrowGate(grid, r, c, dir) {
820
832
  const behind = dir === "down" ? grid[r - 1]?.[c] : dir === "up" ? grid[r + 1]?.[c] : dir === "right" ? grid[r]?.[c - 1] : grid[r]?.[c + 1];
821
833
  if (behind === void 0) return false;
@@ -2122,7 +2134,7 @@ function analyzeLine(line) {
2122
2134
  let label = chars.slice(i).join("").replace(/\s+$/u, "");
2123
2135
  if (label.length === 0) return null;
2124
2136
  let comment;
2125
- const commentMatch = /\s+(?:#|<--|\/\/)\s?(.*)$/.exec(label);
2137
+ const commentMatch = /\s{2,}(?:#|<--|\/\/)\s?(.*)$/.exec(label);
2126
2138
  if (commentMatch) {
2127
2139
  comment = commentMatch[1].trim() || void 0;
2128
2140
  label = label.slice(0, commentMatch.index).replace(/\s+$/u, "");
@@ -2445,6 +2457,7 @@ function pickAutoTemplate(profile, blockIndex = 0) {
2445
2457
  if (profile.hasTimeline) return "timeline";
2446
2458
  if (profile.hasTree) return "tree";
2447
2459
  if (profile.hasTable) return "dataTable";
2460
+ if (profile.hasVideo) return "videoWithCaption";
2448
2461
  if (profile.imageCount >= 2) return "photoGrid";
2449
2462
  if (profile.hasImage) return blockIndex % 2 === 0 ? "leftFeature" : "rightFeature";
2450
2463
  if (profile.hasBlockquote) return "quote";
@@ -2465,12 +2478,15 @@ function recommendTemplatesForBlock(profile, allNames) {
2465
2478
 
2466
2479
  export {
2467
2480
  matchNumberHighlight,
2481
+ toCells,
2482
+ cellWidth,
2468
2483
  isHoriz,
2469
2484
  isVert,
2470
2485
  isJunction,
2471
2486
  arrowDirection,
2472
2487
  UNICODE_VOCAB,
2473
2488
  ASCII_VOCAB,
2489
+ MAX_BRIDGE_GAP,
2474
2490
  parseAsciiDiagram,
2475
2491
  traceBoxes,
2476
2492
  toGrid,
@@ -2500,4 +2516,3 @@ export {
2500
2516
  pickAutoTemplate,
2501
2517
  recommendTemplatesForBlock
2502
2518
  };
2503
- //# sourceMappingURL=chunk-5UYI3RJB.js.map
@@ -121,4 +121,3 @@ export {
121
121
  getGeohashPath,
122
122
  geohashOverlapsBounds
123
123
  };
124
- //# sourceMappingURL=chunk-GZY66SDN.js.map