@bendyline/squisq 2.0.1 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/NOTICE.md +24 -0
- package/dist/{ContentContainer-BXUlIf18.d.ts → ContentContainer-B2w9sUoL.d.ts} +15 -0
- package/dist/{Doc-ylqWKDc_.d.ts → Doc-BubIpWsp.d.ts} +160 -3
- package/dist/{ImageEditDoc-D828IXJ1.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-2ZWIXGAC.js +214 -0
- package/dist/{chunk-2PWOO4ZE.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-X6DUONGT.js → chunk-7ARJZYQY.js} +280 -128
- 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-W4O2TX5I.js → chunk-C33GTPUZ.js} +579 -4
- package/dist/{chunk-MMPBOUK7.js → chunk-CB45YGAM.js} +7 -2
- package/dist/{chunk-CY2R2VPR.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-TFJVXUHH.js → chunk-I2O6W7DX.js} +1513 -79
- 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-PXLVXTLW.js → chunk-RS5AP3J4.js} +72 -15
- 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 +166 -12
- package/dist/doc/index.js +36 -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 +13 -12
- package/dist/index.js +118 -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-wSLA2A1g.d.ts +223 -0
- 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 +31 -6
- package/dist/schemas/index.js +43 -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-RjVgLpUi.d.ts → themeLibrary-DU9mUmVl.d.ts} +1 -1
- package/dist/timing/index.js +3 -4
- package/dist/transform/index.d.ts +9 -10
- 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-2PWOO4ZE.js.map +0 -1
- 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-CY2R2VPR.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-FVJUUTEM.js +0 -74
- package/dist/chunk-FVJUUTEM.js.map +0 -1
- package/dist/chunk-FVTQSNR7.js.map +0 -1
- package/dist/chunk-GZY66SDN.js.map +0 -1
- package/dist/chunk-JOQYPRDZ.js.map +0 -1
- package/dist/chunk-MMPBOUK7.js.map +0 -1
- package/dist/chunk-PGGGKYWG.js +0 -1
- package/dist/chunk-PGGGKYWG.js.map +0 -1
- package/dist/chunk-PXLVXTLW.js.map +0 -1
- package/dist/chunk-Q7LROV2H.js.map +0 -1
- package/dist/chunk-QE7TWGVT.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-TFJVXUHH.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-W4O2TX5I.js.map +0 -1
- package/dist/chunk-X6DUONGT.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 -135
- 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__/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 -160
- 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 -127
- package/src/doc/markdownToDoc.ts +0 -1054
- package/src/doc/materializeBlockLayers.ts +0 -304
- package/src/doc/mediaAnnotations.ts +0 -120
- 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 -423
- 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 -1052
- 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/Theme.ts +0 -406
- 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 -29
- package/src/schemas/themeCompile.ts +0 -237
- package/src/schemas/themeConstants.ts +0 -2
- package/src/schemas/themeLibrary.ts +0 -60
- package/src/schemas/themeValidator.ts +0 -426
- package/src/schemas/themes/bold.json +0 -48
- package/src/schemas/themes/cinematic.json +0 -111
- package/src/schemas/themes/documentary.json +0 -96
- package/src/schemas/themes/gezellig.json +0 -93
- package/src/schemas/themes/index.ts +0 -53
- package/src/schemas/themes/magazine.json +0 -89
- package/src/schemas/themes/minimalist.json +0 -45
- package/src/schemas/themes/morning-light.json +0 -85
- package/src/schemas/themes/standard-dark.json +0 -85
- package/src/schemas/themes/standard.json +0 -74
- package/src/schemas/themes/tech-dark.json +0 -101
- package/src/schemas/themes/warm-earth.json +0 -50
- 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 -198
- package/src/transform/styles/dataDriven.ts +0 -17
- package/src/transform/styles/documentary.ts +0 -17
- package/src/transform/styles/index.ts +0 -5
- package/src/transform/styles/magazine.ts +0 -18
- package/src/transform/styles/minimal.ts +0 -17
- package/src/transform/styles/narrative.ts +0 -18
- package/src/transform/templateSelector.ts +0 -389
- package/src/transform/timingAllocator.ts +0 -257
- package/src/transform/types.ts +0 -151
- 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
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Internal storage engine shared by document and image-editor histories.
|
|
3
|
-
* Public APIs keep their domain-specific names and result reasons; this module
|
|
4
|
-
* owns the mechanics that must behave identically across both histories.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import type { ContentContainer } from '../storage/ContentContainer.js';
|
|
8
|
-
import { ensureVersionsGitIgnored } from './gitignore.js';
|
|
9
|
-
import { formatVersionTimestamp, parseVersionTimestamp } from './timestamp.js';
|
|
10
|
-
import type { CoalesceOptions, PrunePolicy, Version } from './types.js';
|
|
11
|
-
|
|
12
|
-
const decoder = new TextDecoder();
|
|
13
|
-
const encoder = new TextEncoder();
|
|
14
|
-
|
|
15
|
-
export interface SnapshotPathStrategy {
|
|
16
|
-
readonly prefix: string;
|
|
17
|
-
readonly extension: string;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export interface SaveTextSnapshotOptions {
|
|
21
|
-
content: string;
|
|
22
|
-
basename: string;
|
|
23
|
-
mimeType: string;
|
|
24
|
-
now?: Date;
|
|
25
|
-
force?: boolean;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export interface SaveTextSnapshotResult {
|
|
29
|
-
saved: boolean;
|
|
30
|
-
version: Version | null;
|
|
31
|
-
reason: 'saved' | 'unchanged';
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export function buildSnapshotPath(
|
|
35
|
-
strategy: SnapshotPathStrategy,
|
|
36
|
-
basename: string,
|
|
37
|
-
date: Date,
|
|
38
|
-
collision = 0,
|
|
39
|
-
): string {
|
|
40
|
-
const stamp = formatVersionTimestamp(date);
|
|
41
|
-
const suffix = collision > 0 ? `-${collision + 1}` : '';
|
|
42
|
-
return `${strategy.prefix}${basename}.${stamp}${suffix}.${strategy.extension}`;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export function parseSnapshotPath(
|
|
46
|
-
strategy: SnapshotPathStrategy,
|
|
47
|
-
path: string,
|
|
48
|
-
): { basename: string; timestamp: Date; collision: number } | null {
|
|
49
|
-
if (!path.startsWith(strategy.prefix)) return null;
|
|
50
|
-
const extension = `.${strategy.extension}`;
|
|
51
|
-
const rest = path.slice(strategy.prefix.length);
|
|
52
|
-
if (!rest.endsWith(extension)) return null;
|
|
53
|
-
const stem = rest.slice(0, -extension.length);
|
|
54
|
-
const lastDot = stem.lastIndexOf('.');
|
|
55
|
-
if (lastDot <= 0) return null;
|
|
56
|
-
|
|
57
|
-
const basename = stem.slice(0, lastDot);
|
|
58
|
-
const tail = stem.slice(lastDot + 1);
|
|
59
|
-
const dash = tail.indexOf('-');
|
|
60
|
-
let stamp = tail;
|
|
61
|
-
let collision = 0;
|
|
62
|
-
if (dash >= 0) {
|
|
63
|
-
stamp = tail.slice(0, dash);
|
|
64
|
-
const suffix = Number(tail.slice(dash + 1));
|
|
65
|
-
if (!Number.isInteger(suffix) || suffix < 2) return null;
|
|
66
|
-
collision = suffix - 1;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
const timestamp = parseVersionTimestamp(stamp);
|
|
70
|
-
return timestamp ? { basename, timestamp, collision } : null;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export async function listSnapshots(
|
|
74
|
-
container: ContentContainer,
|
|
75
|
-
strategy: SnapshotPathStrategy,
|
|
76
|
-
basename?: string,
|
|
77
|
-
): Promise<Version[]> {
|
|
78
|
-
const entries = await container.listFiles(strategy.prefix);
|
|
79
|
-
const versions: Version[] = [];
|
|
80
|
-
for (const entry of entries) {
|
|
81
|
-
const parsed = parseSnapshotPath(strategy, entry.path);
|
|
82
|
-
if (!parsed || (basename !== undefined && parsed.basename !== basename)) continue;
|
|
83
|
-
versions.push({
|
|
84
|
-
path: entry.path,
|
|
85
|
-
basename: parsed.basename,
|
|
86
|
-
timestamp: parsed.timestamp,
|
|
87
|
-
size: entry.size,
|
|
88
|
-
collision: parsed.collision,
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
versions.sort((a, b) => {
|
|
93
|
-
const timestampDelta = b.timestamp.getTime() - a.timestamp.getTime();
|
|
94
|
-
return timestampDelta || b.collision - a.collision;
|
|
95
|
-
});
|
|
96
|
-
return versions;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
export async function readTextSnapshot(
|
|
100
|
-
container: ContentContainer,
|
|
101
|
-
version: Version | string,
|
|
102
|
-
): Promise<string | null> {
|
|
103
|
-
const path = typeof version === 'string' ? version : version.path;
|
|
104
|
-
const data = await container.readFile(path);
|
|
105
|
-
return data ? decoder.decode(data) : null;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
export async function saveTextSnapshot(
|
|
109
|
-
container: ContentContainer,
|
|
110
|
-
strategy: SnapshotPathStrategy,
|
|
111
|
-
options: SaveTextSnapshotOptions,
|
|
112
|
-
): Promise<SaveTextSnapshotResult> {
|
|
113
|
-
const versions = await listSnapshots(container, strategy, options.basename);
|
|
114
|
-
if (!options.force && versions.length > 0) {
|
|
115
|
-
const existing = await readTextSnapshot(container, versions[0]!);
|
|
116
|
-
if (existing === options.content) {
|
|
117
|
-
// Backfill containers written before history owned its ignore rule.
|
|
118
|
-
await ensureVersionsGitIgnored(container);
|
|
119
|
-
return { saved: false, version: null, reason: 'unchanged' };
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
const now = options.now ?? new Date();
|
|
124
|
-
let collision = 0;
|
|
125
|
-
let path = buildSnapshotPath(strategy, options.basename, now, collision);
|
|
126
|
-
while (await container.exists(path)) {
|
|
127
|
-
collision += 1;
|
|
128
|
-
path = buildSnapshotPath(strategy, options.basename, now, collision);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
const data = encoder.encode(options.content);
|
|
132
|
-
await ensureVersionsGitIgnored(container);
|
|
133
|
-
await container.writeFile(path, data, options.mimeType);
|
|
134
|
-
return {
|
|
135
|
-
saved: true,
|
|
136
|
-
version: {
|
|
137
|
-
path,
|
|
138
|
-
basename: options.basename,
|
|
139
|
-
timestamp: now,
|
|
140
|
-
size: data.byteLength,
|
|
141
|
-
collision,
|
|
142
|
-
},
|
|
143
|
-
reason: 'saved',
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
export async function pruneSnapshots(
|
|
148
|
-
container: ContentContainer,
|
|
149
|
-
strategy: SnapshotPathStrategy,
|
|
150
|
-
policy: PrunePolicy,
|
|
151
|
-
basename?: string,
|
|
152
|
-
): Promise<Version[]> {
|
|
153
|
-
const versions = await listSnapshots(container, strategy, basename);
|
|
154
|
-
let toDelete: Version[];
|
|
155
|
-
|
|
156
|
-
if (policy.type === 'keep-last-n') {
|
|
157
|
-
toDelete = versions.slice(Math.max(0, Math.floor(policy.n)));
|
|
158
|
-
} else if (policy.type === 'older-than') {
|
|
159
|
-
const cutoff = policy.date.getTime();
|
|
160
|
-
toDelete = versions.filter((version) => version.timestamp.getTime() < cutoff);
|
|
161
|
-
} else {
|
|
162
|
-
toDelete = versions.filter((version) => !policy.keep(version, versions));
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
await removeSnapshots(container, toDelete);
|
|
166
|
-
return toDelete;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
export async function coalesceSnapshots(
|
|
170
|
-
container: ContentContainer,
|
|
171
|
-
strategy: SnapshotPathStrategy,
|
|
172
|
-
options: CoalesceOptions = {},
|
|
173
|
-
basename?: string,
|
|
174
|
-
): Promise<Version[]> {
|
|
175
|
-
const windowMs = options.windowMs ?? 60_000;
|
|
176
|
-
const versions = await listSnapshots(container, strategy, basename);
|
|
177
|
-
const toDelete: Version[] = [];
|
|
178
|
-
|
|
179
|
-
// Compare against the last kept snapshot. Pairwise comparison against a
|
|
180
|
-
// deleted neighbor would chain through a dense run and over-prune it.
|
|
181
|
-
if (versions.length > 0) {
|
|
182
|
-
let anchor = versions[0]!;
|
|
183
|
-
for (let index = 1; index < versions.length; index++) {
|
|
184
|
-
const candidate = versions[index]!;
|
|
185
|
-
if (anchor.timestamp.getTime() - candidate.timestamp.getTime() <= windowMs) {
|
|
186
|
-
toDelete.push(candidate);
|
|
187
|
-
} else {
|
|
188
|
-
anchor = candidate;
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
await removeSnapshots(container, toDelete);
|
|
194
|
-
return toDelete;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
async function removeSnapshots(
|
|
198
|
-
container: ContentContainer,
|
|
199
|
-
versions: readonly Version[],
|
|
200
|
-
): Promise<void> {
|
|
201
|
-
for (const version of versions) await container.removeFile(version.path);
|
|
202
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Sortable, human-readable timestamps for version filenames.
|
|
3
|
-
*
|
|
4
|
-
* Format: ISO 8601 basic, UTC, second precision, `Z` suffix —
|
|
5
|
-
* e.g. `20260430T152030Z`. Lexicographic order matches chronological order,
|
|
6
|
-
* so `listFiles` returns versions in time order without parsing.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
const TIMESTAMP_RE = /^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})Z$/;
|
|
10
|
-
|
|
11
|
-
function pad2(n: number): string {
|
|
12
|
-
return n < 10 ? `0${n}` : String(n);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Format a Date as a sortable, filename-safe UTC timestamp string.
|
|
17
|
-
*/
|
|
18
|
-
export function formatVersionTimestamp(date: Date): string {
|
|
19
|
-
return (
|
|
20
|
-
String(date.getUTCFullYear()).padStart(4, '0') +
|
|
21
|
-
pad2(date.getUTCMonth() + 1) +
|
|
22
|
-
pad2(date.getUTCDate()) +
|
|
23
|
-
'T' +
|
|
24
|
-
pad2(date.getUTCHours()) +
|
|
25
|
-
pad2(date.getUTCMinutes()) +
|
|
26
|
-
pad2(date.getUTCSeconds()) +
|
|
27
|
-
'Z'
|
|
28
|
-
);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Parse a version timestamp string back to a Date. Returns null if the input
|
|
33
|
-
* doesn't match the expected format.
|
|
34
|
-
*/
|
|
35
|
-
export function parseVersionTimestamp(stamp: string): Date | null {
|
|
36
|
-
const m = TIMESTAMP_RE.exec(stamp);
|
|
37
|
-
if (!m) return null;
|
|
38
|
-
const [, y, mo, d, h, mi, s] = m;
|
|
39
|
-
const ms = Date.UTC(Number(y), Number(mo) - 1, Number(d), Number(h), Number(mi), Number(s));
|
|
40
|
-
if (Number.isNaN(ms)) return null;
|
|
41
|
-
return new Date(ms);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* The pattern a valid version timestamp matches. Exported so other modules
|
|
46
|
-
* can validate filenames without re-deriving the regex.
|
|
47
|
-
*/
|
|
48
|
-
export const VERSION_TIMESTAMP_PATTERN = TIMESTAMP_RE;
|
package/src/versions/types.ts
DELETED
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Public types for the document version-history feature.
|
|
3
|
-
*
|
|
4
|
-
* Versions are snapshots of the primary markdown document stored alongside
|
|
5
|
-
* the document inside the same {@link ContentContainer}. They live under
|
|
6
|
-
* `.versions/<docBasename>.<sortableTimestamp>.md`. The container is the
|
|
7
|
-
* unit of persistence — when the host serializes the container to a ZIP,
|
|
8
|
-
* a real folder, or anywhere else, the version snapshots ride along. When
|
|
9
|
-
* snapshots are retained, a container-root `.gitignore` rule excludes the
|
|
10
|
-
* `.versions/` folder from Git.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* A single version snapshot record.
|
|
15
|
-
*/
|
|
16
|
-
export interface Version {
|
|
17
|
-
/** Container-relative path, e.g. `.versions/index.20260430T152030Z.md`. */
|
|
18
|
-
path: string;
|
|
19
|
-
/** Document basename without extension, e.g. `index`. */
|
|
20
|
-
basename: string;
|
|
21
|
-
/** Parsed timestamp from the filename, in UTC. */
|
|
22
|
-
timestamp: Date;
|
|
23
|
-
/** Snapshot size in bytes. */
|
|
24
|
-
size: number;
|
|
25
|
-
/**
|
|
26
|
-
* Collision suffix index. `0` for a path with no `-N` suffix, `1` for `-2`,
|
|
27
|
-
* `2` for `-3`, and so on. Used as the tie-break for ordering snapshots
|
|
28
|
-
* that share the same UTC second.
|
|
29
|
-
*/
|
|
30
|
-
collision: number;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Result of a {@link saveVersion} call.
|
|
35
|
-
*/
|
|
36
|
-
export interface SaveVersionResult {
|
|
37
|
-
/** True when a new snapshot file was actually written. */
|
|
38
|
-
saved: boolean;
|
|
39
|
-
/** The newly stamped version (only when `saved` is true). */
|
|
40
|
-
version: Version | null;
|
|
41
|
-
/**
|
|
42
|
-
* Why the save behaved the way it did:
|
|
43
|
-
* - `'saved'` — a new snapshot was written.
|
|
44
|
-
* - `'unchanged'` — current content matches the latest snapshot byte-for-byte.
|
|
45
|
-
* - `'no-document'` — the container has no primary markdown document.
|
|
46
|
-
* - `'empty'` — the resolved content was empty.
|
|
47
|
-
*/
|
|
48
|
-
reason: 'saved' | 'unchanged' | 'no-document' | 'empty';
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Options for {@link saveVersion}.
|
|
53
|
-
*/
|
|
54
|
-
export interface SaveVersionOptions {
|
|
55
|
-
/** Override the document content; otherwise the container's primary doc is read. */
|
|
56
|
-
content?: string;
|
|
57
|
-
/** Override the timestamp; defaults to `new Date()`. Useful for tests. */
|
|
58
|
-
now?: Date;
|
|
59
|
-
/** Skip the diff-vs-latest check and force a write. */
|
|
60
|
-
force?: boolean;
|
|
61
|
-
/** Override the document basename used to build the version filename. */
|
|
62
|
-
basename?: string;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Pruning policy passed to {@link pruneVersions}.
|
|
67
|
-
*/
|
|
68
|
-
export type PrunePolicy =
|
|
69
|
-
| { type: 'keep-last-n'; n: number }
|
|
70
|
-
| { type: 'older-than'; date: Date }
|
|
71
|
-
| { type: 'predicate'; keep: (v: Version, all: Version[]) => boolean };
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Options for {@link revertToVersion}.
|
|
75
|
-
*/
|
|
76
|
-
export interface RevertOptions {
|
|
77
|
-
/**
|
|
78
|
-
* Whether to snapshot the current document content before replacing it.
|
|
79
|
-
* Defaults to `true` so a revert is always recoverable.
|
|
80
|
-
*/
|
|
81
|
-
snapshotCurrent?: boolean;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Options for {@link coalesceVersions}.
|
|
86
|
-
*/
|
|
87
|
-
export interface CoalesceOptions {
|
|
88
|
-
/**
|
|
89
|
-
* Two adjacent snapshots whose timestamps are within `windowMs` collapse
|
|
90
|
-
* to the newer one. Defaults to 60_000 (one minute).
|
|
91
|
-
*/
|
|
92
|
-
windowMs?: number;
|
|
93
|
-
}
|