@bendyline/squisq 2.1.0 → 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.
- package/LICENSE +21 -0
- package/NOTICE.md +24 -0
- package/dist/{ContentContainer-BXUlIf18.d.ts → ContentContainer-B2w9sUoL.d.ts} +15 -0
- package/dist/{Doc-DynJleo-.d.ts → Doc-BubIpWsp.d.ts} +1 -1
- package/dist/{ImageEditDoc-Ca4Tr9uN.d.ts → ImageEditDoc-CGxk5CHc.d.ts} +1 -1
- package/dist/{annotationCoercion-Dr_DY9Hx.d.ts → annotationCoercion-PtRQhk5V.d.ts} +1 -1
- package/dist/chunk-2L55443L.js +0 -0
- package/dist/{chunk-VWCJ2WXC.js → chunk-2ZWIXGAC.js} +0 -1
- package/dist/{chunk-VYFRI7R6.js → chunk-32R2RZAO.js} +72 -3
- package/dist/chunk-3IGPAPQ7.js +645 -0
- package/dist/{chunk-QE7TWGVT.js → chunk-4VOD55SX.js} +0 -1
- package/dist/{chunk-3E5F2XMR.js → chunk-67L6WRJN.js} +0 -1
- package/dist/{chunk-5DKBFXPY.js → chunk-6ECMNUIP.js} +26 -18
- package/dist/{chunk-JI77MGAK.js → chunk-7ARJZYQY.js} +159 -120
- package/dist/{chunk-DBS6RIFL.js → chunk-7N4G32LG.js} +0 -1
- package/dist/{chunk-JOQYPRDZ.js → chunk-7YEZFHLS.js} +10 -8
- package/dist/{chunk-2UQOHYE2.js → chunk-7ZAAICW4.js} +0 -1
- package/dist/{chunk-66QO7XFB.js → chunk-ACZOVWX3.js} +117 -7
- package/dist/{chunk-5J4HKRJF.js → chunk-BAOV476U.js} +0 -1
- package/dist/chunk-BCCXTMN5.js +699 -0
- package/dist/{chunk-JHZWYRSW.js → chunk-C33GTPUZ.js} +11 -4
- package/dist/{chunk-QUUPYOSP.js → chunk-CB45YGAM.js} +2 -3
- package/dist/{chunk-XNLB57UD.js → chunk-DYPMOPIW.js} +18 -2
- package/dist/{chunk-VR7UPJ7C.js → chunk-FCG3BIZN.js} +12 -1
- package/dist/{chunk-5UYI3RJB.js → chunk-FDYDYL77.js} +54 -40
- package/dist/{chunk-OTKVFVL6.js → chunk-I2O6W7DX.js} +116 -44
- package/dist/{chunk-Q7LROV2H.js → chunk-NKNMGIIN.js} +0 -1
- package/dist/chunk-OPO5K4DZ.js +241 -0
- package/dist/{chunk-TUWMK62B.js → chunk-PUS54YU6.js} +45 -2
- package/dist/chunk-QKPXHDLR.js +0 -0
- package/dist/{chunk-GZY66SDN.js → chunk-R3KTTOMS.js} +0 -1
- package/dist/{chunk-ILWDXLUK.js → chunk-RS5AP3J4.js} +49 -10
- package/dist/chunk-WV5ARNDA.js +0 -0
- package/dist/{chunk-4X3JQXNM.js → chunk-XOFT65EX.js} +1 -2
- package/dist/{chunk-FVTQSNR7.js → chunk-XRW6P7IF.js} +13 -5
- package/dist/chunk-XWNNA3KE.js +0 -0
- package/dist/chunk-YZNGMV3G.js +0 -0
- package/dist/{chunk-R2YZTCLO.js → chunk-ZQKZSJAX.js} +1 -2
- package/dist/doc/index.d.ts +27 -12
- package/dist/doc/index.js +16 -17
- package/dist/generate/index.d.ts +2 -2
- package/dist/generate/index.js +2 -3
- package/dist/icons/index.js +3 -4
- package/dist/icons/inlineIconMarker.js +1 -2
- package/dist/imageEdit/index.d.ts +48 -17
- package/dist/imageEdit/index.js +3 -4
- package/dist/index.d.ts +11 -11
- package/dist/index.js +60 -33
- package/dist/jsonForm/index.d.ts +10 -3
- package/dist/jsonForm/index.js +8 -7
- package/dist/markdown/index.d.ts +75 -11
- package/dist/markdown/index.js +32 -7
- package/dist/{materializePageSection-DDzubQXo.d.ts → materializePageSection-wSLA2A1g.d.ts} +2 -2
- package/dist/narration/index.d.ts +16 -3
- package/dist/narration/index.js +13 -14
- package/dist/random/index.d.ts +11 -2
- package/dist/random/index.js +2 -3
- package/dist/recommend/index.d.ts +1 -1
- package/dist/recommend/index.js +3 -4
- package/dist/schemas/index.d.ts +5 -5
- package/dist/schemas/index.js +5 -6
- package/dist/spatial/index.d.ts +2 -1
- package/dist/spatial/index.js +1 -2
- package/dist/storage/index.d.ts +4 -2
- package/dist/storage/index.js +1 -2
- package/dist/{themeLibrary-B72m0W1y.d.ts → themeLibrary-DU9mUmVl.d.ts} +1 -1
- package/dist/timing/index.js +3 -4
- package/dist/transform/index.d.ts +3 -3
- package/dist/transform/index.js +6 -7
- package/dist/{types-C4kiRn_k.d.ts → types-8QjefM9J.d.ts} +38 -2
- package/dist/{types-BwMPl2CB.d.ts → types-CUNc9biN.d.ts} +24 -1
- package/dist/versions/index.d.ts +14 -11
- package/dist/versions/index.js +2 -3
- package/package.json +4 -2
- package/dist/chunk-2UQOHYE2.js.map +0 -1
- package/dist/chunk-3E5F2XMR.js.map +0 -1
- package/dist/chunk-4X3JQXNM.js.map +0 -1
- package/dist/chunk-5DKBFXPY.js.map +0 -1
- package/dist/chunk-5J4HKRJF.js.map +0 -1
- package/dist/chunk-5UYI3RJB.js.map +0 -1
- package/dist/chunk-66QO7XFB.js.map +0 -1
- package/dist/chunk-AMIR72JP.js +0 -380
- package/dist/chunk-AMIR72JP.js.map +0 -1
- package/dist/chunk-DBS6RIFL.js.map +0 -1
- package/dist/chunk-DNJKBAI7.js +0 -1
- package/dist/chunk-DNJKBAI7.js.map +0 -1
- package/dist/chunk-ET53IIEP.js +0 -1
- package/dist/chunk-ET53IIEP.js.map +0 -1
- package/dist/chunk-FVTQSNR7.js.map +0 -1
- package/dist/chunk-GZY66SDN.js.map +0 -1
- package/dist/chunk-ILWDXLUK.js.map +0 -1
- package/dist/chunk-JHZWYRSW.js.map +0 -1
- package/dist/chunk-JI77MGAK.js.map +0 -1
- package/dist/chunk-JOQYPRDZ.js.map +0 -1
- package/dist/chunk-OTKVFVL6.js.map +0 -1
- package/dist/chunk-PGGGKYWG.js +0 -1
- package/dist/chunk-PGGGKYWG.js.map +0 -1
- package/dist/chunk-Q7LROV2H.js.map +0 -1
- package/dist/chunk-QE7TWGVT.js.map +0 -1
- package/dist/chunk-QUUPYOSP.js.map +0 -1
- package/dist/chunk-R2GC6RLD.js +0 -344
- package/dist/chunk-R2GC6RLD.js.map +0 -1
- package/dist/chunk-R2YZTCLO.js.map +0 -1
- package/dist/chunk-S7A5D7ZJ.js +0 -174
- package/dist/chunk-S7A5D7ZJ.js.map +0 -1
- package/dist/chunk-TUWMK62B.js.map +0 -1
- package/dist/chunk-V543AI2F.js +0 -1
- package/dist/chunk-V543AI2F.js.map +0 -1
- package/dist/chunk-VR7UPJ7C.js.map +0 -1
- package/dist/chunk-VWCJ2WXC.js.map +0 -1
- package/dist/chunk-VYFRI7R6.js.map +0 -1
- package/dist/chunk-XNLB57UD.js.map +0 -1
- package/dist/chunk-ZLQKNOZQ.js +0 -1
- package/dist/chunk-ZLQKNOZQ.js.map +0 -1
- package/dist/doc/index.js.map +0 -1
- package/dist/generate/index.js.map +0 -1
- package/dist/icons/index.js.map +0 -1
- package/dist/icons/inlineIconMarker.js.map +0 -1
- package/dist/imageEdit/index.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/jsonForm/index.js.map +0 -1
- package/dist/markdown/index.js.map +0 -1
- package/dist/narration/index.js.map +0 -1
- package/dist/random/index.js.map +0 -1
- package/dist/recommend/index.js.map +0 -1
- package/dist/schemas/index.js.map +0 -1
- package/dist/spatial/index.js.map +0 -1
- package/dist/storage/index.js.map +0 -1
- package/dist/timing/index.js.map +0 -1
- package/dist/transform/index.js.map +0 -1
- package/dist/versions/index.js.map +0 -1
- package/src/__tests__/animationUtils.test.ts +0 -117
- package/src/__tests__/annotationCoercion.test.ts +0 -243
- package/src/__tests__/applyNarrationTiming.test.ts +0 -190
- package/src/__tests__/applyRenderStyle.test.ts +0 -146
- package/src/__tests__/asciiDiagramBattle.test.ts +0 -246
- package/src/__tests__/asciiDiagramDetect.test.ts +0 -162
- package/src/__tests__/asciiDiagramMapping.test.ts +0 -38
- package/src/__tests__/asciiDiagramParse.test.ts +0 -233
- package/src/__tests__/asciiDiagramPipeline.test.ts +0 -273
- package/src/__tests__/asciiDiagramRender.test.ts +0 -162
- package/src/__tests__/asciiDiagramRepair.test.ts +0 -84
- package/src/__tests__/asciiTimelineDetect.test.ts +0 -157
- package/src/__tests__/asciiTimelineParse.test.ts +0 -205
- package/src/__tests__/asciiTimelinePipeline.test.ts +0 -349
- package/src/__tests__/asciiTimelineRender.test.ts +0 -376
- package/src/__tests__/atmosphereLayers.test.ts +0 -108
- package/src/__tests__/attrTokens.test.ts +0 -167
- package/src/__tests__/colorUtils.test.ts +0 -112
- package/src/__tests__/contentContainer.test.ts +0 -325
- package/src/__tests__/contentExtractor.test.ts +0 -243
- package/src/__tests__/coverBlock.test.ts +0 -310
- package/src/__tests__/customTemplateSample.test.ts +0 -144
- package/src/__tests__/customTemplatesFrontmatter.test.ts +0 -221
- package/src/__tests__/customThemesFrontmatter.test.ts +0 -146
- package/src/__tests__/dataTable.test.ts +0 -145
- package/src/__tests__/diagramBlock.test.ts +0 -122
- package/src/__tests__/diagramLayout.test.ts +0 -134
- package/src/__tests__/diagramText.test.ts +0 -26
- package/src/__tests__/docToMarkdownMedia.test.ts +0 -83
- package/src/__tests__/drawing.test.ts +0 -109
- package/src/__tests__/drawingBlock.test.ts +0 -124
- package/src/__tests__/drawingLayout.test.ts +0 -171
- package/src/__tests__/fixtures/asciiDiagramBattle.ts +0 -512
- package/src/__tests__/fixtures/asciiDiagrams.ts +0 -287
- package/src/__tests__/fixtures/asciiTimelines.ts +0 -35
- package/src/__tests__/fixtures/treeviewFixtures.ts +0 -243
- package/src/__tests__/geohash.test.ts +0 -110
- package/src/__tests__/getLayers.test.ts +0 -243
- package/src/__tests__/getLayersFallback.test.ts +0 -103
- package/src/__tests__/haversine.test.ts +0 -63
- package/src/__tests__/iconResolve.test.ts +0 -122
- package/src/__tests__/imageEditExportSvg.test.ts +0 -70
- package/src/__tests__/imageEditState.test.ts +0 -74
- package/src/__tests__/imageEditVersions.test.ts +0 -243
- package/src/__tests__/inferDocumentTitle.test.ts +0 -50
- package/src/__tests__/inlineIconMarker.test.ts +0 -36
- package/src/__tests__/inputDescriptors.test.ts +0 -162
- package/src/__tests__/jsonForm.chooseControl.test.ts +0 -86
- package/src/__tests__/jsonForm.evaluateWhen.test.ts +0 -59
- package/src/__tests__/jsonForm.inferSchema.test.ts +0 -25
- package/src/__tests__/jsonForm.pointer.test.ts +0 -149
- package/src/__tests__/jsonForm.tokens.test.ts +0 -84
- package/src/__tests__/layoutBlock.test.ts +0 -83
- package/src/__tests__/layoutLayout.test.ts +0 -169
- package/src/__tests__/localForageAdapter.test.ts +0 -155
- package/src/__tests__/majorApiTypes.test.ts +0 -18
- package/src/__tests__/markdown.test.ts +0 -1009
- package/src/__tests__/markdownIcons.test.ts +0 -104
- package/src/__tests__/markdownSanitize.test.ts +0 -81
- package/src/__tests__/markdownToDoc.test.ts +0 -957
- package/src/__tests__/matchFontFamily.test.ts +0 -114
- package/src/__tests__/materializeBlockLayers.test.ts +0 -167
- package/src/__tests__/materializePageSections.test.ts +0 -404
- package/src/__tests__/materializeTestUtils.ts +0 -17
- package/src/__tests__/mediaAnnotations.test.ts +0 -91
- package/src/__tests__/mediaSchedule.test.ts +0 -118
- package/src/__tests__/narrationAlign.test.ts +0 -150
- package/src/__tests__/narrationFeatures.test.ts +0 -71
- package/src/__tests__/narrationNuclei.test.ts +0 -45
- package/src/__tests__/narrationPacing.test.ts +0 -189
- package/src/__tests__/narrationScript.test.ts +0 -149
- package/src/__tests__/narrationSessionRepro.test.ts +0 -62
- package/src/__tests__/narrationSidecar.test.ts +0 -88
- package/src/__tests__/narrationSyllables.test.ts +0 -65
- package/src/__tests__/narrationTestSignals.ts +0 -167
- package/src/__tests__/narrationVad.test.ts +0 -66
- package/src/__tests__/pageStyle.test.ts +0 -258
- package/src/__tests__/pandocAttrParse.test.ts +0 -187
- package/src/__tests__/recommendTemplates.test.ts +0 -183
- package/src/__tests__/resolveDocTheme.test.ts +0 -69
- package/src/__tests__/rootExports.test.ts +0 -61
- package/src/__tests__/scopedContentContainer.test.ts +0 -109
- package/src/__tests__/seededRandom.test.ts +0 -142
- package/src/__tests__/shapeGeometry.test.ts +0 -138
- package/src/__tests__/shapeVocabulary.test.ts +0 -133
- package/src/__tests__/storage.test.ts +0 -60
- package/src/__tests__/structuredData.test.ts +0 -249
- package/src/__tests__/surface.test.ts +0 -68
- package/src/__tests__/templateAnnotationParse.test.ts +0 -173
- package/src/__tests__/templateInputs.test.ts +0 -69
- package/src/__tests__/templateMetadata.test.ts +0 -32
- package/src/__tests__/templates.test.ts +0 -710
- package/src/__tests__/themeCompile.test.ts +0 -225
- package/src/__tests__/themeValidator.test.ts +0 -131
- package/src/__tests__/timing.test.ts +0 -167
- package/src/__tests__/transformProvenance.test.ts +0 -160
- package/src/__tests__/transformV2.test.ts +0 -163
- package/src/__tests__/transitionNormalize.test.ts +0 -61
- package/src/__tests__/treeviewBattle.test.ts +0 -76
- package/src/__tests__/treeviewDetect.test.ts +0 -168
- package/src/__tests__/treeviewParse.test.ts +0 -118
- package/src/__tests__/treeviewPipeline.test.ts +0 -183
- package/src/__tests__/treeviewRender.test.ts +0 -91
- package/src/__tests__/validateDoc.test.ts +0 -260
- package/src/__tests__/versions.test.ts +0 -459
- package/src/doc/annotationBlocks.ts +0 -117
- package/src/doc/applyNarrationTiming.ts +0 -244
- package/src/doc/asciiDiagram/chars.ts +0 -210
- package/src/doc/asciiDiagram/detect.ts +0 -175
- package/src/doc/asciiDiagram/index.ts +0 -38
- package/src/doc/asciiDiagram/mapping.ts +0 -225
- package/src/doc/asciiDiagram/parse.ts +0 -1095
- package/src/doc/asciiDiagram/render.ts +0 -963
- package/src/doc/asciiDiagram/repair.ts +0 -400
- package/src/doc/asciiDiagram/types.ts +0 -65
- package/src/doc/asciiTimeline/detect.ts +0 -138
- package/src/doc/asciiTimeline/index.ts +0 -26
- package/src/doc/asciiTimeline/mapping.ts +0 -43
- package/src/doc/asciiTimeline/parse.ts +0 -870
- package/src/doc/asciiTimeline/render.ts +0 -427
- package/src/doc/asciiTimeline/types.ts +0 -73
- package/src/doc/asciiTimeline/wrappedFlow.ts +0 -427
- package/src/doc/audioMapping.ts +0 -442
- package/src/doc/customTemplatesFrontmatter.ts +0 -273
- package/src/doc/customThemesFrontmatter.ts +0 -95
- package/src/doc/docToMarkdown.ts +0 -284
- package/src/doc/index.ts +0 -161
- package/src/doc/markdownToDoc.ts +0 -1054
- package/src/doc/materializeBlockLayers.ts +0 -465
- package/src/doc/mediaAnnotations.ts +0 -120
- package/src/doc/page/PageSection.ts +0 -174
- package/src/doc/page/materializePageSection.ts +0 -616
- package/src/doc/page/resolvePageBlock.ts +0 -108
- package/src/doc/page/sectionExtractors.ts +0 -466
- package/src/doc/pageCss.ts +0 -628
- package/src/doc/resolveDocTheme.ts +0 -56
- package/src/doc/standaloneAnnotation.ts +0 -58
- package/src/doc/structuredData.ts +0 -301
- package/src/doc/templateInputs.ts +0 -424
- package/src/doc/templates/__tests__/customTemplate.test.ts +0 -170
- package/src/doc/templates/__tests__/customTemplateRegistry.test.ts +0 -124
- package/src/doc/templates/__tests__/listBlock.test.ts +0 -64
- package/src/doc/templates/accentImage.ts +0 -362
- package/src/doc/templates/captionUtils.ts +0 -56
- package/src/doc/templates/comparisonBar.ts +0 -173
- package/src/doc/templates/coverBlock.ts +0 -255
- package/src/doc/templates/customTemplate.ts +0 -51
- package/src/doc/templates/dataTable.ts +0 -102
- package/src/doc/templates/dateEvent.ts +0 -147
- package/src/doc/templates/definitionCard.ts +0 -140
- package/src/doc/templates/diagramBlock.ts +0 -403
- package/src/doc/templates/diagramLayout.ts +0 -159
- package/src/doc/templates/drawingBlock.ts +0 -325
- package/src/doc/templates/drawingLayout.ts +0 -539
- package/src/doc/templates/factCard.ts +0 -146
- package/src/doc/templates/fallbackBlock.ts +0 -123
- package/src/doc/templates/featureBlock.ts +0 -209
- package/src/doc/templates/fullBleedQuote.ts +0 -83
- package/src/doc/templates/imageWithCaption.ts +0 -186
- package/src/doc/templates/index.ts +0 -642
- package/src/doc/templates/inputDescriptors.ts +0 -451
- package/src/doc/templates/layoutBlock.ts +0 -43
- package/src/doc/templates/layoutLayout.ts +0 -243
- package/src/doc/templates/listBlock.ts +0 -207
- package/src/doc/templates/mapBlock.ts +0 -138
- package/src/doc/templates/metadata.ts +0 -130
- package/src/doc/templates/persistentLayers.ts +0 -526
- package/src/doc/templates/photoGrid.ts +0 -190
- package/src/doc/templates/pullQuote.ts +0 -141
- package/src/doc/templates/quoteBlock.ts +0 -141
- package/src/doc/templates/registry.ts +0 -88
- package/src/doc/templates/sectionHeader.ts +0 -120
- package/src/doc/templates/statHighlight.ts +0 -146
- package/src/doc/templates/templateNames.ts +0 -22
- package/src/doc/templates/timelineBlock.ts +0 -613
- package/src/doc/templates/titleBlock.ts +0 -150
- package/src/doc/templates/tokens/__tests__/resolveTokens.test.ts +0 -487
- package/src/doc/templates/tokens/resolveTokens.ts +0 -453
- package/src/doc/templates/treeBlock.ts +0 -131
- package/src/doc/templates/twoColumn.ts +0 -263
- package/src/doc/templates/videoPullQuote.ts +0 -142
- package/src/doc/templates/videoWithCaption.ts +0 -135
- package/src/doc/treeview/chars.ts +0 -72
- package/src/doc/treeview/detect.ts +0 -145
- package/src/doc/treeview/index.ts +0 -30
- package/src/doc/treeview/mapping.ts +0 -95
- package/src/doc/treeview/parse.ts +0 -201
- package/src/doc/treeview/render.ts +0 -41
- package/src/doc/treeview/types.ts +0 -43
- package/src/doc/utils/animationUtils.ts +0 -399
- package/src/doc/utils/applyRenderStyle.ts +0 -106
- package/src/doc/utils/diagramText.ts +0 -78
- package/src/doc/utils/imageTreatment.ts +0 -70
- package/src/doc/utils/nearest.ts +0 -59
- package/src/doc/utils/shapeGeometry.ts +0 -614
- package/src/doc/utils/themeUtils.ts +0 -243
- package/src/doc/validate.ts +0 -575
- package/src/generate/contentExtractor.ts +0 -921
- package/src/generate/index.ts +0 -18
- package/src/generate/templateMapper.ts +0 -177
- package/src/icons/iconData.ts +0 -31
- package/src/icons/index.ts +0 -26
- package/src/icons/inlineIconMarker.ts +0 -73
- package/src/icons/resolve.ts +0 -139
- package/src/imageEdit/ImageEditVersionManager.ts +0 -73
- package/src/imageEdit/export.ts +0 -410
- package/src/imageEdit/index.ts +0 -72
- package/src/imageEdit/persistence.ts +0 -113
- package/src/imageEdit/state.ts +0 -112
- package/src/imageEdit/versionPaths.ts +0 -44
- package/src/imageEdit/versions.ts +0 -152
- package/src/index.ts +0 -15
- package/src/internal/immutable.ts +0 -58
- package/src/jsonForm/chooseControl.ts +0 -88
- package/src/jsonForm/evaluateWhen.ts +0 -59
- package/src/jsonForm/index.ts +0 -32
- package/src/jsonForm/inferSchema.ts +0 -25
- package/src/jsonForm/pointer.ts +0 -154
- package/src/jsonForm/tokens.ts +0 -78
- package/src/jsonForm/types.ts +0 -167
- package/src/markdown/annotationCoercion.ts +0 -295
- package/src/markdown/attrTokens.ts +0 -243
- package/src/markdown/convert.ts +0 -1353
- package/src/markdown/htmlParse.ts +0 -212
- package/src/markdown/index.ts +0 -152
- package/src/markdown/parse.ts +0 -103
- package/src/markdown/sanitize.ts +0 -318
- package/src/markdown/stringify.ts +0 -207
- package/src/markdown/types.ts +0 -710
- package/src/markdown/utils.ts +0 -459
- package/src/narration/align.ts +0 -514
- package/src/narration/features.ts +0 -231
- package/src/narration/index.ts +0 -86
- package/src/narration/nuclei.ts +0 -118
- package/src/narration/pacing.ts +0 -211
- package/src/narration/script.ts +0 -239
- package/src/narration/session.ts +0 -100
- package/src/narration/sidecar.ts +0 -187
- package/src/narration/syllables.ts +0 -85
- package/src/narration/trace.ts +0 -50
- package/src/narration/types.ts +0 -299
- package/src/narration/vad.ts +0 -131
- package/src/ngeohash.d.ts +0 -11
- package/src/random/SeededRandom.ts +0 -127
- package/src/random/index.ts +0 -1
- package/src/recommend/index.ts +0 -16
- package/src/recommend/numberHighlight.ts +0 -25
- package/src/recommend/templates.ts +0 -393
- package/src/schemas/BlockTemplates.ts +0 -1046
- package/src/schemas/CustomTemplates.ts +0 -126
- package/src/schemas/Doc.ts +0 -1073
- package/src/schemas/ImageEditDoc.ts +0 -102
- package/src/schemas/LayoutStrategy.ts +0 -178
- package/src/schemas/Media.ts +0 -179
- package/src/schemas/MediaProvider.ts +0 -70
- package/src/schemas/PageStyle.ts +0 -213
- package/src/schemas/Theme.ts +0 -413
- package/src/schemas/Transitions.ts +0 -224
- package/src/schemas/Types.ts +0 -15
- package/src/schemas/Viewport.ts +0 -91
- package/src/schemas/colorUtils.ts +0 -219
- package/src/schemas/fontStacks.ts +0 -339
- package/src/schemas/index.ts +0 -31
- package/src/schemas/pageStyleDefaults.ts +0 -204
- package/src/schemas/themeCompile.ts +0 -244
- package/src/schemas/themeConstants.ts +0 -2
- package/src/schemas/themeLibrary.ts +0 -60
- package/src/schemas/themeValidator.ts +0 -609
- package/src/schemas/themes/bold.json +0 -77
- package/src/schemas/themes/cinematic.json +0 -143
- package/src/schemas/themes/documentary.json +0 -125
- package/src/schemas/themes/gezellig.json +0 -123
- package/src/schemas/themes/index.ts +0 -53
- package/src/schemas/themes/magazine.json +0 -126
- package/src/schemas/themes/minimalist.json +0 -74
- package/src/schemas/themes/morning-light.json +0 -117
- package/src/schemas/themes/standard-dark.json +0 -109
- package/src/schemas/themes/standard.json +0 -98
- package/src/schemas/themes/tech-dark.json +0 -143
- package/src/schemas/themes/warm-earth.json +0 -74
- package/src/spatial/Geohash.ts +0 -196
- package/src/spatial/Haversine.ts +0 -59
- package/src/spatial/index.ts +0 -2
- package/src/storage/ContentContainer.ts +0 -220
- package/src/storage/LocalForageAdapter.ts +0 -103
- package/src/storage/LocalStorageAdapter.ts +0 -57
- package/src/storage/MediaProviderFromContainer.ts +0 -92
- package/src/storage/MemoryStorageAdapter.ts +0 -37
- package/src/storage/ScopedContentContainer.ts +0 -143
- package/src/storage/Storage.ts +0 -28
- package/src/storage/index.ts +0 -9
- package/src/timing/index.ts +0 -17
- package/src/timing/narrationTiming.ts +0 -220
- package/src/timing/readingTime.ts +0 -94
- package/src/transform/applyTransform.ts +0 -122
- package/src/transform/blockAnalyzer.ts +0 -181
- package/src/transform/index.ts +0 -23
- package/src/transform/registry.ts +0 -217
- package/src/transform/styles/dataDriven.ts +0 -18
- package/src/transform/styles/documentary.ts +0 -18
- package/src/transform/styles/index.ts +0 -5
- package/src/transform/styles/magazine.ts +0 -19
- package/src/transform/styles/minimal.ts +0 -18
- package/src/transform/styles/narrative.ts +0 -19
- package/src/transform/templateSelector.ts +0 -389
- package/src/transform/timingAllocator.ts +0 -257
- package/src/transform/types.ts +0 -158
- package/src/versions/DocumentVersionManager.ts +0 -70
- package/src/versions/gitignore.ts +0 -34
- package/src/versions/index.ts +0 -56
- package/src/versions/operations.ts +0 -144
- package/src/versions/paths.ts +0 -51
- package/src/versions/snapshotStore.ts +0 -202
- package/src/versions/timestamp.ts +0 -48
- package/src/versions/types.ts +0 -93
|
@@ -24,24 +24,27 @@ import {
|
|
|
24
24
|
templateRegistry,
|
|
25
25
|
writeCustomTemplatesToFrontmatter,
|
|
26
26
|
writeCustomThemesToFrontmatter
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-7ARJZYQY.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-
|
|
43
|
+
} from "./chunk-FDYDYL77.js";
|
|
41
44
|
import {
|
|
42
45
|
defaultPageStyle,
|
|
43
46
|
resolveMediaSchedule
|
|
44
|
-
} from "./chunk-
|
|
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-
|
|
55
|
+
} from "./chunk-C33GTPUZ.js";
|
|
53
56
|
import {
|
|
54
57
|
VIEWPORT_PRESETS,
|
|
55
58
|
isTemplateBlock
|
|
56
|
-
} from "./chunk-
|
|
59
|
+
} from "./chunk-BAOV476U.js";
|
|
57
60
|
import {
|
|
58
61
|
parseMarkdown
|
|
59
|
-
} from "./chunk-
|
|
62
|
+
} from "./chunk-ACZOVWX3.js";
|
|
60
63
|
import {
|
|
61
64
|
KNOWN_BLOCK_META_KEYS,
|
|
62
65
|
coerceAnnotationValues,
|
|
63
66
|
serializeAnnotation
|
|
64
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-ZQKZSJAX.js";
|
|
65
68
|
import {
|
|
66
69
|
extractPlainText,
|
|
67
70
|
getChildren,
|
|
68
71
|
readFrontmatterThemeId
|
|
69
|
-
} from "./chunk-
|
|
72
|
+
} from "./chunk-BCCXTMN5.js";
|
|
70
73
|
import {
|
|
71
74
|
estimateTimeFromText
|
|
72
|
-
} from "./chunk-
|
|
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
|
-
|
|
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
|
|
429
|
-
const
|
|
430
|
-
|
|
431
|
-
|
|
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
|
-
...
|
|
434
|
-
...
|
|
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) {
|
|
@@ -2068,10 +2096,11 @@ async function discoverNarrationAudio(container) {
|
|
|
2068
2096
|
let timing = null;
|
|
2069
2097
|
if (consolidatedSections) {
|
|
2070
2098
|
const audioBase = stripAudioExtension(filename);
|
|
2099
|
+
let matchedName = "";
|
|
2071
2100
|
for (const [sectionName, sectionTiming] of Object.entries(consolidatedSections)) {
|
|
2072
|
-
if (audioBase.endsWith(`-${sectionName}`)) {
|
|
2101
|
+
if (audioBase.endsWith(`-${sectionName}`) && sectionName.length > matchedName.length) {
|
|
2102
|
+
matchedName = sectionName;
|
|
2073
2103
|
timing = sectionTiming;
|
|
2074
|
-
break;
|
|
2075
2104
|
}
|
|
2076
2105
|
}
|
|
2077
2106
|
}
|
|
@@ -2508,6 +2537,17 @@ function truncate(text, max = 40) {
|
|
|
2508
2537
|
}
|
|
2509
2538
|
|
|
2510
2539
|
// src/doc/asciiDiagram/render.ts
|
|
2540
|
+
function normalizeLabelLines(label) {
|
|
2541
|
+
return label.split("\n").map((line) => line.trim()).filter((line) => line.length > 0);
|
|
2542
|
+
}
|
|
2543
|
+
function normalizeEdgeLabel(label) {
|
|
2544
|
+
if (label === void 0) return void 0;
|
|
2545
|
+
const collapsed = label.replace(/\s+/gu, " ").trim();
|
|
2546
|
+
return collapsed.length > 0 ? collapsed : void 0;
|
|
2547
|
+
}
|
|
2548
|
+
function edgeLabelFitsBridge(text) {
|
|
2549
|
+
return text.length <= MAX_BRIDGE_GAP;
|
|
2550
|
+
}
|
|
2511
2551
|
var SIDE_MARGIN = 1;
|
|
2512
2552
|
function renderAsciiDiagram(diagram2, options = {}) {
|
|
2513
2553
|
const vocab = (options.style ?? diagram2.style) === "ascii" ? ASCII_VOCAB : UNICODE_VOCAB;
|
|
@@ -2591,10 +2631,10 @@ function layoutNodes(nodes, edges) {
|
|
|
2591
2631
|
};
|
|
2592
2632
|
const layoutSubtree = (id, depth) => {
|
|
2593
2633
|
const node = byId.get(id);
|
|
2594
|
-
const labelLines = node.label
|
|
2634
|
+
const labelLines = normalizeLabelLines(node.label);
|
|
2595
2635
|
const children = childIds.get(id) ?? [];
|
|
2596
2636
|
if (children.length === 0) {
|
|
2597
|
-
const innerW = labelLines.reduce((w, l) => Math.max(w, l
|
|
2637
|
+
const innerW = labelLines.reduce((w, l) => Math.max(w, cellWidth(l)), 0);
|
|
2598
2638
|
const deg = sideDeg.get(id) ?? { top: 0, bottom: 0, left: 0, right: 0 };
|
|
2599
2639
|
const horizDeg = Math.max(deg.top, deg.bottom);
|
|
2600
2640
|
const vertDeg = Math.max(deg.left, deg.right);
|
|
@@ -2617,14 +2657,15 @@ function layoutNodes(nodes, edges) {
|
|
|
2617
2657
|
const childRects = placeSiblings(children, (childId) => layoutSubtree(childId, depth + 1));
|
|
2618
2658
|
const bbox = unionRects(childRects);
|
|
2619
2659
|
const extraRows = Math.max(0, labelLines.length - 1);
|
|
2620
|
-
const titleLen = (labelLines[0] ?? "")
|
|
2660
|
+
const titleLen = cellWidth(labelLines[0] ?? "");
|
|
2621
2661
|
const rect = {
|
|
2622
2662
|
r0: bbox.r0 - 2 - extraRows,
|
|
2623
2663
|
c0: bbox.c0 - 2,
|
|
2624
2664
|
r1: bbox.r1 + 2,
|
|
2625
2665
|
c1: bbox.c1 + 2
|
|
2626
2666
|
};
|
|
2627
|
-
const
|
|
2667
|
+
const innerLinesW = labelLines.slice(1).reduce((w, l) => Math.max(w, cellWidth(l)), 0);
|
|
2668
|
+
const minW = Math.max(titleLen > 0 ? titleLen + 6 : 3, innerLinesW > 0 ? innerLinesW + 4 : 3);
|
|
2628
2669
|
if (rect.c1 - rect.c0 + 1 < minW) rect.c1 = rect.c0 + minW - 1;
|
|
2629
2670
|
if (rect.c1 - rect.c0 + 1 < node.wCols) rect.c1 = rect.c0 + node.wCols - 1;
|
|
2630
2671
|
placed.set(id, { node, rect, labelLines, isContainer: true, depth });
|
|
@@ -2718,7 +2759,7 @@ function drawBox(canvas, p, vocab) {
|
|
|
2718
2759
|
const innerW = rect.c1 - rect.c0 - 1;
|
|
2719
2760
|
canvas.set(rect.r0, rect.c0, vocab.tl, "border");
|
|
2720
2761
|
canvas.set(rect.r0, rect.c1, vocab.tr, "border");
|
|
2721
|
-
const title2 = isContainer && labelLines.length > 0 ? ` ${labelLines[0]} ` : null;
|
|
2762
|
+
const title2 = isContainer && labelLines.length > 0 ? toCells(` ${labelLines[0]} `) : null;
|
|
2722
2763
|
if (title2 && title2.length <= innerW - 2) {
|
|
2723
2764
|
const left = Math.floor((innerW - title2.length) / 2);
|
|
2724
2765
|
for (let i = 0; i < innerW; i++) {
|
|
@@ -2741,9 +2782,10 @@ function drawBox(canvas, p, vocab) {
|
|
|
2741
2782
|
const innerH = rect.r1 - rect.r0 - 1;
|
|
2742
2783
|
const startRow = isContainer ? rect.r0 + 1 : rect.r0 + 1 + Math.max(0, Math.floor((innerH - interiorLines.length) / 2));
|
|
2743
2784
|
interiorLines.forEach((line, i) => {
|
|
2744
|
-
const
|
|
2745
|
-
|
|
2746
|
-
|
|
2785
|
+
const cells = toCells(line);
|
|
2786
|
+
const pad = Math.max(0, Math.floor((innerW - cells.length) / 2));
|
|
2787
|
+
for (let j = 0; j < cells.length && pad + j < innerW; j++) {
|
|
2788
|
+
canvas.set(startRow + i, rect.c0 + 1 + pad + j, cells[j], "label");
|
|
2747
2789
|
}
|
|
2748
2790
|
});
|
|
2749
2791
|
}
|
|
@@ -2795,24 +2837,25 @@ function drawEdges(canvas, edges, placed, vocab) {
|
|
|
2795
2837
|
)
|
|
2796
2838
|
);
|
|
2797
2839
|
for (const req of sideLabelRequests) {
|
|
2840
|
+
const cells = toCells(req.label);
|
|
2798
2841
|
let done = false;
|
|
2799
2842
|
for (const side of ["right", "left"]) {
|
|
2800
2843
|
if (done) break;
|
|
2801
2844
|
for (const { row, col } of req.candidates) {
|
|
2802
2845
|
if (canvas.kindAt(row, col) !== "line-v") continue;
|
|
2803
|
-
const startCol = side === "right" ? col + 2 : col - 1 -
|
|
2846
|
+
const startCol = side === "right" ? col + 2 : col - 1 - cells.length;
|
|
2804
2847
|
if (startCol < 0) continue;
|
|
2805
2848
|
const gapCol = side === "right" ? col + 1 : col - 1;
|
|
2806
2849
|
let free = canvas.kindAt(row, gapCol) === "empty";
|
|
2807
|
-
for (let i = 0; free && i <
|
|
2850
|
+
for (let i = 0; free && i < cells.length; i++) {
|
|
2808
2851
|
if (canvas.kindAt(row, startCol + i) !== "empty") free = false;
|
|
2809
2852
|
}
|
|
2810
2853
|
if (free && side === "left" && startCol > 0) {
|
|
2811
2854
|
free = canvas.kindAt(row, startCol - 1) === "empty";
|
|
2812
2855
|
}
|
|
2813
2856
|
if (!free) continue;
|
|
2814
|
-
for (let i = 0; i <
|
|
2815
|
-
canvas.set(row, startCol + i,
|
|
2857
|
+
for (let i = 0; i < cells.length; i++) {
|
|
2858
|
+
canvas.set(row, startCol + i, cells[i], "label");
|
|
2816
2859
|
}
|
|
2817
2860
|
done = true;
|
|
2818
2861
|
break;
|
|
@@ -2891,7 +2934,7 @@ function routeEdge(canvas, plan, planIdx, placed, attachment, vocab, deferSideLa
|
|
|
2891
2934
|
canvas,
|
|
2892
2935
|
directed: plan.edge.directed,
|
|
2893
2936
|
biDir: plan.biDir,
|
|
2894
|
-
label: plan.edge.label,
|
|
2937
|
+
label: normalizeEdgeLabel(plan.edge.label),
|
|
2895
2938
|
vocab,
|
|
2896
2939
|
junction,
|
|
2897
2940
|
stagger,
|
|
@@ -2989,8 +3032,8 @@ function drawVertical(args, s, t, exitCol, enterCol, dir) {
|
|
|
2989
3032
|
const hi = Math.max(exitCol, enterCol);
|
|
2990
3033
|
let segment = [];
|
|
2991
3034
|
for (let c = lo + 1; c <= hi - 1; c++) segment.push(vocab.h);
|
|
2992
|
-
|
|
2993
|
-
|
|
3035
|
+
const text = label ? toCells(` ${label} `) : null;
|
|
3036
|
+
if (text && edgeLabelFitsBridge(text) && segment.length >= text.length + 2) {
|
|
2994
3037
|
const left = Math.floor((segment.length - text.length) / 2);
|
|
2995
3038
|
segment = segment.map((ch, i) => i >= left && i < left + text.length ? text[i - left] : ch);
|
|
2996
3039
|
labelEmbedded = true;
|
|
@@ -3045,15 +3088,22 @@ function drawHorizontal(args, s, t, exitRow, enterRow, dir) {
|
|
|
3045
3088
|
const firstFree = exitCol + dir;
|
|
3046
3089
|
const lastFree = enterCol - dir;
|
|
3047
3090
|
const gap = (lastFree - firstFree) * dir + 1;
|
|
3048
|
-
const drawH = (row, cA, cB, hostLabel) => {
|
|
3091
|
+
const drawH = (row, cA, cB, hostLabel, reserveLo = 0, reserveHi = 0) => {
|
|
3049
3092
|
const lo = Math.min(cA, cB);
|
|
3050
3093
|
const hi = Math.max(cA, cB);
|
|
3051
3094
|
let segment = [];
|
|
3052
3095
|
for (let c = lo; c <= hi; c++) segment.push(vocab.h);
|
|
3053
|
-
|
|
3054
|
-
|
|
3055
|
-
const
|
|
3056
|
-
|
|
3096
|
+
const text = hostLabel && label ? toCells(` ${label} `) : null;
|
|
3097
|
+
if (text && edgeLabelFitsBridge(text)) {
|
|
3098
|
+
const from = reserveLo;
|
|
3099
|
+
const to = segment.length - 1 - reserveHi;
|
|
3100
|
+
const room = to - from + 1;
|
|
3101
|
+
if (room >= text.length + 2) {
|
|
3102
|
+
const left = from + Math.floor((room - text.length) / 2);
|
|
3103
|
+
segment = segment.map(
|
|
3104
|
+
(ch, i) => i >= left && i < left + text.length ? text[i - left] : ch
|
|
3105
|
+
);
|
|
3106
|
+
}
|
|
3057
3107
|
}
|
|
3058
3108
|
segment.forEach((ch, i) => {
|
|
3059
3109
|
canvas.drawEdgeCell(row, lo + i, ch, ch === vocab.h ? "line-h" : "label", vocab);
|
|
@@ -3066,7 +3116,14 @@ function drawHorizontal(args, s, t, exitRow, enterRow, dir) {
|
|
|
3066
3116
|
junction(sRow, exitCol, dir === 1 ? "right" : "left");
|
|
3067
3117
|
junction(tRow, enterCol, dir === 1 ? "left" : "right");
|
|
3068
3118
|
if (sRow === tRow && gap >= 1) {
|
|
3069
|
-
drawH(
|
|
3119
|
+
drawH(
|
|
3120
|
+
sRow,
|
|
3121
|
+
firstFree,
|
|
3122
|
+
lastFree,
|
|
3123
|
+
true,
|
|
3124
|
+
(dir === 1 ? biDir : directed) ? 1 : 0,
|
|
3125
|
+
(dir === 1 ? directed : biDir) ? 1 : 0
|
|
3126
|
+
);
|
|
3070
3127
|
if (directed) {
|
|
3071
3128
|
canvas.drawEdgeCell(
|
|
3072
3129
|
sRow,
|
|
@@ -3095,7 +3152,16 @@ function drawHorizontal(args, s, t, exitRow, enterRow, dir) {
|
|
|
3095
3152
|
);
|
|
3096
3153
|
junction(exitRow, exitCol, dir === 1 ? "right" : "left");
|
|
3097
3154
|
junction(enterRow, enterCol, dir === 1 ? "left" : "right");
|
|
3098
|
-
if (Math.abs(midCol - exitCol) >= 2)
|
|
3155
|
+
if (Math.abs(midCol - exitCol) >= 2) {
|
|
3156
|
+
drawH(
|
|
3157
|
+
exitRow,
|
|
3158
|
+
firstFree,
|
|
3159
|
+
midCol - dir,
|
|
3160
|
+
true,
|
|
3161
|
+
dir === 1 && biDir ? 1 : 0,
|
|
3162
|
+
dir === -1 && biDir ? 1 : 0
|
|
3163
|
+
);
|
|
3164
|
+
}
|
|
3099
3165
|
if (Math.abs(enterCol - midCol) >= 2) drawH(enterRow, midCol + dir, lastFree, false);
|
|
3100
3166
|
if (exitRow === enterRow) {
|
|
3101
3167
|
canvas.drawEdgeCell(exitRow, midCol, vocab.h, "line-h", vocab);
|
|
@@ -3670,10 +3736,17 @@ function formatCoordinate(value) {
|
|
|
3670
3736
|
}
|
|
3671
3737
|
|
|
3672
3738
|
// src/doc/treeview/render.ts
|
|
3739
|
+
function normalizeText(text) {
|
|
3740
|
+
return text.replace(/\s+/gu, " ").trim();
|
|
3741
|
+
}
|
|
3673
3742
|
function renderTree(tree2, options = {}) {
|
|
3674
3743
|
const vocab = (options.style ?? tree2.style) === "ascii" ? ASCII_TREE_VOCAB : UNICODE_TREE_VOCAB;
|
|
3675
3744
|
const lines = [];
|
|
3676
|
-
const label = (node) =>
|
|
3745
|
+
const label = (node) => {
|
|
3746
|
+
const text = normalizeText(node.label);
|
|
3747
|
+
const comment = node.comment ? normalizeText(node.comment) : "";
|
|
3748
|
+
return comment ? `${text} # ${comment}` : text;
|
|
3749
|
+
};
|
|
3677
3750
|
const walk = (nodes, prefix) => {
|
|
3678
3751
|
nodes.forEach((node, i) => {
|
|
3679
3752
|
const last = i === nodes.length - 1;
|
|
@@ -3717,4 +3790,3 @@ export {
|
|
|
3717
3790
|
renderAsciiTimeline,
|
|
3718
3791
|
renderTree
|
|
3719
3792
|
};
|
|
3720
|
-
//# sourceMappingURL=chunk-OTKVFVL6.js.map
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
// src/versions/timestamp.ts
|
|
2
|
+
var TIMESTAMP_RE = /^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})Z$/;
|
|
3
|
+
function pad2(n) {
|
|
4
|
+
return n < 10 ? `0${n}` : String(n);
|
|
5
|
+
}
|
|
6
|
+
function formatVersionTimestamp(date) {
|
|
7
|
+
return String(date.getUTCFullYear()).padStart(4, "0") + pad2(date.getUTCMonth() + 1) + pad2(date.getUTCDate()) + "T" + pad2(date.getUTCHours()) + pad2(date.getUTCMinutes()) + pad2(date.getUTCSeconds()) + "Z";
|
|
8
|
+
}
|
|
9
|
+
function parseVersionTimestamp(stamp) {
|
|
10
|
+
const m = TIMESTAMP_RE.exec(stamp);
|
|
11
|
+
if (!m) return null;
|
|
12
|
+
const [, y, mo, d, h, mi, s] = m;
|
|
13
|
+
const ms = Date.UTC(Number(y), Number(mo) - 1, Number(d), Number(h), Number(mi), Number(s));
|
|
14
|
+
if (Number.isNaN(ms)) return null;
|
|
15
|
+
return new Date(ms);
|
|
16
|
+
}
|
|
17
|
+
var VERSION_TIMESTAMP_PATTERN = TIMESTAMP_RE;
|
|
18
|
+
|
|
19
|
+
// src/versions/gitignore.ts
|
|
20
|
+
var decoder = new TextDecoder();
|
|
21
|
+
var encoder = new TextEncoder();
|
|
22
|
+
var GITIGNORE_PATH = ".gitignore";
|
|
23
|
+
var VERSIONS_IGNORE_RULE = ".versions/";
|
|
24
|
+
var EQUIVALENT_VERSIONS_RULE = /^(!?)\/?\.versions\/?$/;
|
|
25
|
+
async function ensureVersionsGitIgnored(container) {
|
|
26
|
+
const data = await container.readFile(GITIGNORE_PATH);
|
|
27
|
+
const existing = data ? decoder.decode(data) : "";
|
|
28
|
+
for (const line of existing.split(/\r?\n/)) {
|
|
29
|
+
if (EQUIVALENT_VERSIONS_RULE.test(line.trim())) return;
|
|
30
|
+
}
|
|
31
|
+
const newline = existing.includes("\r\n") ? "\r\n" : "\n";
|
|
32
|
+
const separator = existing.length > 0 && !existing.endsWith("\n") ? newline : "";
|
|
33
|
+
const next = `${existing}${separator}${VERSIONS_IGNORE_RULE}${newline}`;
|
|
34
|
+
await container.writeFile(GITIGNORE_PATH, encoder.encode(next), "text/plain");
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// src/versions/snapshotStore.ts
|
|
38
|
+
var decoder2 = new TextDecoder();
|
|
39
|
+
var encoder2 = new TextEncoder();
|
|
40
|
+
var INVALID_BASENAME_CHARS = /[<>:"/\\|?*]/;
|
|
41
|
+
var WINDOWS_DEVICE_NAME = /^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\.|$)/i;
|
|
42
|
+
var mutationQueues = /* @__PURE__ */ new WeakMap();
|
|
43
|
+
function assertSafeBasename(basename) {
|
|
44
|
+
if (basename.length === 0 || basename.length > 200 || basename === "." || basename === ".." || basename.endsWith(".") || basename.endsWith(" ") || INVALID_BASENAME_CHARS.test(basename) || [...basename].some((char) => {
|
|
45
|
+
const code = char.codePointAt(0);
|
|
46
|
+
return code < 32 || code === 127;
|
|
47
|
+
}) || WINDOWS_DEVICE_NAME.test(basename)) {
|
|
48
|
+
throw new TypeError(`Invalid snapshot basename: ${JSON.stringify(basename)}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function buildSnapshotPath(strategy, basename, date, collision = 0) {
|
|
52
|
+
assertSafeBasename(basename);
|
|
53
|
+
if (!Number.isFinite(date.getTime())) throw new TypeError("Snapshot date must be valid");
|
|
54
|
+
if (!Number.isInteger(collision) || collision < 0) {
|
|
55
|
+
throw new RangeError("Snapshot collision must be a non-negative integer");
|
|
56
|
+
}
|
|
57
|
+
const stamp = formatVersionTimestamp(date);
|
|
58
|
+
const suffix = collision > 0 ? `-${collision + 1}` : "";
|
|
59
|
+
return `${strategy.prefix}${basename}.${stamp}${suffix}.${strategy.extension}`;
|
|
60
|
+
}
|
|
61
|
+
function parseSnapshotPath(strategy, path) {
|
|
62
|
+
if (!path.startsWith(strategy.prefix)) return null;
|
|
63
|
+
const extension = `.${strategy.extension}`;
|
|
64
|
+
const rest = path.slice(strategy.prefix.length);
|
|
65
|
+
if (!rest.endsWith(extension)) return null;
|
|
66
|
+
const stem = rest.slice(0, -extension.length);
|
|
67
|
+
const lastDot = stem.lastIndexOf(".");
|
|
68
|
+
if (lastDot <= 0) return null;
|
|
69
|
+
const basename = stem.slice(0, lastDot);
|
|
70
|
+
const tail = stem.slice(lastDot + 1);
|
|
71
|
+
const dash = tail.indexOf("-");
|
|
72
|
+
let stamp = tail;
|
|
73
|
+
let collision = 0;
|
|
74
|
+
if (dash >= 0) {
|
|
75
|
+
stamp = tail.slice(0, dash);
|
|
76
|
+
const suffix = Number(tail.slice(dash + 1));
|
|
77
|
+
if (!Number.isInteger(suffix) || suffix < 2) return null;
|
|
78
|
+
collision = suffix - 1;
|
|
79
|
+
}
|
|
80
|
+
const timestamp = parseVersionTimestamp(stamp);
|
|
81
|
+
return timestamp ? { basename, timestamp, collision } : null;
|
|
82
|
+
}
|
|
83
|
+
async function listSnapshots(container, strategy, basename) {
|
|
84
|
+
const entries = await container.listFiles(strategy.prefix);
|
|
85
|
+
const versions = [];
|
|
86
|
+
for (const entry of entries) {
|
|
87
|
+
const parsed = parseSnapshotPath(strategy, entry.path);
|
|
88
|
+
if (!parsed || basename !== void 0 && parsed.basename !== basename) continue;
|
|
89
|
+
versions.push({
|
|
90
|
+
path: entry.path,
|
|
91
|
+
basename: parsed.basename,
|
|
92
|
+
timestamp: parsed.timestamp,
|
|
93
|
+
size: entry.size,
|
|
94
|
+
collision: parsed.collision
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
versions.sort((a, b) => {
|
|
98
|
+
const timestampDelta = b.timestamp.getTime() - a.timestamp.getTime();
|
|
99
|
+
return timestampDelta || b.collision - a.collision;
|
|
100
|
+
});
|
|
101
|
+
return versions;
|
|
102
|
+
}
|
|
103
|
+
async function readTextSnapshot(container, version) {
|
|
104
|
+
const path = typeof version === "string" ? version : version.path;
|
|
105
|
+
const data = await container.readFile(path);
|
|
106
|
+
return data ? decoder2.decode(data) : null;
|
|
107
|
+
}
|
|
108
|
+
async function saveTextSnapshot(container, strategy, options) {
|
|
109
|
+
return withContainerMutationLock(container, async () => {
|
|
110
|
+
const versions = await listSnapshots(container, strategy, options.basename);
|
|
111
|
+
if (!options.force && versions.length > 0) {
|
|
112
|
+
const existing = await readTextSnapshot(container, versions[0]);
|
|
113
|
+
if (existing === options.content) {
|
|
114
|
+
await ensureVersionsGitIgnored(container);
|
|
115
|
+
return { saved: false, version: null, reason: "unchanged" };
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const now = options.now ?? /* @__PURE__ */ new Date();
|
|
119
|
+
const data = encoder2.encode(options.content);
|
|
120
|
+
await ensureVersionsGitIgnored(container);
|
|
121
|
+
let collision = 0;
|
|
122
|
+
let path = buildSnapshotPath(strategy, options.basename, now, collision);
|
|
123
|
+
if (container.writeFileExclusive) {
|
|
124
|
+
while (!await container.writeFileExclusive(path, data, options.mimeType)) {
|
|
125
|
+
collision += 1;
|
|
126
|
+
path = buildSnapshotPath(strategy, options.basename, now, collision);
|
|
127
|
+
}
|
|
128
|
+
} else {
|
|
129
|
+
while (await container.exists(path)) {
|
|
130
|
+
collision += 1;
|
|
131
|
+
path = buildSnapshotPath(strategy, options.basename, now, collision);
|
|
132
|
+
}
|
|
133
|
+
await container.writeFile(path, data, options.mimeType);
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
saved: true,
|
|
137
|
+
version: {
|
|
138
|
+
path,
|
|
139
|
+
basename: options.basename,
|
|
140
|
+
timestamp: now,
|
|
141
|
+
size: data.byteLength,
|
|
142
|
+
collision
|
|
143
|
+
},
|
|
144
|
+
reason: "saved"
|
|
145
|
+
};
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
async function withContainerMutationLock(container, operation) {
|
|
149
|
+
const key = container.mutationLock ?? container;
|
|
150
|
+
const previous = mutationQueues.get(key) ?? Promise.resolve();
|
|
151
|
+
let release;
|
|
152
|
+
const gate = new Promise((resolve) => {
|
|
153
|
+
release = resolve;
|
|
154
|
+
});
|
|
155
|
+
const queued = previous.catch(() => void 0).then(() => gate);
|
|
156
|
+
mutationQueues.set(key, queued);
|
|
157
|
+
await previous.catch(() => void 0);
|
|
158
|
+
try {
|
|
159
|
+
return await operation();
|
|
160
|
+
} finally {
|
|
161
|
+
release();
|
|
162
|
+
if (mutationQueues.get(key) === queued) mutationQueues.delete(key);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function groupByBasename(versions) {
|
|
166
|
+
const groups = /* @__PURE__ */ new Map();
|
|
167
|
+
for (const version of versions) {
|
|
168
|
+
const group = groups.get(version.basename);
|
|
169
|
+
if (group) group.push(version);
|
|
170
|
+
else groups.set(version.basename, [version]);
|
|
171
|
+
}
|
|
172
|
+
return groups;
|
|
173
|
+
}
|
|
174
|
+
function inListOrder(versions, toDelete) {
|
|
175
|
+
return versions.filter((version) => toDelete.has(version));
|
|
176
|
+
}
|
|
177
|
+
async function pruneSnapshots(container, strategy, policy, basename) {
|
|
178
|
+
if (policy.type === "keep-last-n" && (!Number.isSafeInteger(policy.n) || policy.n < 0)) {
|
|
179
|
+
throw new RangeError("keep-last-n requires a non-negative safe integer");
|
|
180
|
+
}
|
|
181
|
+
if (policy.type === "older-than" && !Number.isFinite(policy.date.getTime())) {
|
|
182
|
+
throw new TypeError("older-than requires a valid date");
|
|
183
|
+
}
|
|
184
|
+
const versions = await listSnapshots(container, strategy, basename);
|
|
185
|
+
const toDelete = /* @__PURE__ */ new Set();
|
|
186
|
+
for (const group of groupByBasename(versions).values()) {
|
|
187
|
+
if (policy.type === "keep-last-n") {
|
|
188
|
+
for (const version of group.slice(policy.n)) toDelete.add(version);
|
|
189
|
+
} else if (policy.type === "older-than") {
|
|
190
|
+
const cutoff = policy.date.getTime();
|
|
191
|
+
for (const version of group) {
|
|
192
|
+
if (version.timestamp.getTime() < cutoff) toDelete.add(version);
|
|
193
|
+
}
|
|
194
|
+
} else {
|
|
195
|
+
for (const version of group) {
|
|
196
|
+
if (!policy.keep(version, group)) toDelete.add(version);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
const deleted = inListOrder(versions, toDelete);
|
|
201
|
+
await removeSnapshots(container, deleted);
|
|
202
|
+
return deleted;
|
|
203
|
+
}
|
|
204
|
+
async function coalesceSnapshots(container, strategy, options = {}, basename) {
|
|
205
|
+
const windowMs = options.windowMs ?? 6e4;
|
|
206
|
+
if (!Number.isFinite(windowMs) || windowMs < 0) {
|
|
207
|
+
throw new RangeError("windowMs must be a non-negative finite number");
|
|
208
|
+
}
|
|
209
|
+
const versions = await listSnapshots(container, strategy, basename);
|
|
210
|
+
const toDelete = /* @__PURE__ */ new Set();
|
|
211
|
+
for (const group of groupByBasename(versions).values()) {
|
|
212
|
+
let anchor = group[0];
|
|
213
|
+
for (let index = 1; index < group.length; index++) {
|
|
214
|
+
const candidate = group[index];
|
|
215
|
+
if (anchor.timestamp.getTime() - candidate.timestamp.getTime() <= windowMs) {
|
|
216
|
+
toDelete.add(candidate);
|
|
217
|
+
} else {
|
|
218
|
+
anchor = candidate;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
const deleted = inListOrder(versions, toDelete);
|
|
223
|
+
await removeSnapshots(container, deleted);
|
|
224
|
+
return deleted;
|
|
225
|
+
}
|
|
226
|
+
async function removeSnapshots(container, versions) {
|
|
227
|
+
for (const version of versions) await container.removeFile(version.path);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
export {
|
|
231
|
+
formatVersionTimestamp,
|
|
232
|
+
parseVersionTimestamp,
|
|
233
|
+
VERSION_TIMESTAMP_PATTERN,
|
|
234
|
+
buildSnapshotPath,
|
|
235
|
+
parseSnapshotPath,
|
|
236
|
+
listSnapshots,
|
|
237
|
+
readTextSnapshot,
|
|
238
|
+
saveTextSnapshot,
|
|
239
|
+
pruneSnapshots,
|
|
240
|
+
coalesceSnapshots
|
|
241
|
+
};
|
|
@@ -435,6 +435,48 @@ function lineStyleDasharray(style) {
|
|
|
435
435
|
}
|
|
436
436
|
}
|
|
437
437
|
|
|
438
|
+
// src/base64.ts
|
|
439
|
+
var ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
440
|
+
function bytesToBase64(bytes) {
|
|
441
|
+
let output = "";
|
|
442
|
+
for (let index = 0; index < bytes.length; index += 3) {
|
|
443
|
+
const first = bytes[index];
|
|
444
|
+
const hasSecond = index + 1 < bytes.length;
|
|
445
|
+
const hasThird = index + 2 < bytes.length;
|
|
446
|
+
const second = hasSecond ? bytes[index + 1] : 0;
|
|
447
|
+
const third = hasThird ? bytes[index + 2] : 0;
|
|
448
|
+
const value = first << 16 | second << 8 | third;
|
|
449
|
+
output += ALPHABET[value >>> 18 & 63];
|
|
450
|
+
output += ALPHABET[value >>> 12 & 63];
|
|
451
|
+
output += hasSecond ? ALPHABET[value >>> 6 & 63] : "=";
|
|
452
|
+
output += hasThird ? ALPHABET[value & 63] : "=";
|
|
453
|
+
}
|
|
454
|
+
return output;
|
|
455
|
+
}
|
|
456
|
+
function base64ToBytes(value) {
|
|
457
|
+
const normalized = value.replace(/[\t\n\r ]/g, "");
|
|
458
|
+
if (normalized.length % 4 !== 0 || !/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(normalized)) {
|
|
459
|
+
throw new TypeError("Invalid base64 data");
|
|
460
|
+
}
|
|
461
|
+
const padding = normalized.endsWith("==") ? 2 : normalized.endsWith("=") ? 1 : 0;
|
|
462
|
+
const output = new Uint8Array(normalized.length / 4 * 3 - padding);
|
|
463
|
+
let outputIndex = 0;
|
|
464
|
+
for (let index = 0; index < normalized.length; index += 4) {
|
|
465
|
+
const a = ALPHABET.indexOf(normalized[index]);
|
|
466
|
+
const b = ALPHABET.indexOf(normalized[index + 1]);
|
|
467
|
+
const c = normalized[index + 2] === "=" ? 0 : ALPHABET.indexOf(normalized[index + 2]);
|
|
468
|
+
const d = normalized[index + 3] === "=" ? 0 : ALPHABET.indexOf(normalized[index + 3]);
|
|
469
|
+
const packed = a << 18 | b << 12 | c << 6 | d;
|
|
470
|
+
if (outputIndex < output.length) output[outputIndex++] = packed >>> 16 & 255;
|
|
471
|
+
if (outputIndex < output.length) output[outputIndex++] = packed >>> 8 & 255;
|
|
472
|
+
if (outputIndex < output.length) output[outputIndex++] = packed & 255;
|
|
473
|
+
}
|
|
474
|
+
return output;
|
|
475
|
+
}
|
|
476
|
+
function base64ToUtf8(value) {
|
|
477
|
+
return new TextDecoder().decode(base64ToBytes(value));
|
|
478
|
+
}
|
|
479
|
+
|
|
438
480
|
export {
|
|
439
481
|
PATH_SHAPE_KINDS,
|
|
440
482
|
shapePath,
|
|
@@ -446,6 +488,7 @@ export {
|
|
|
446
488
|
nearestSnapPoint,
|
|
447
489
|
snapEndpoints,
|
|
448
490
|
connectorPath,
|
|
449
|
-
lineStyleDasharray
|
|
491
|
+
lineStyleDasharray,
|
|
492
|
+
bytesToBase64,
|
|
493
|
+
base64ToUtf8
|
|
450
494
|
};
|
|
451
|
-
//# sourceMappingURL=chunk-TUWMK62B.js.map
|
|
File without changes
|