@bendyline/squisq 1.4.0 → 1.5.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/dist/{Doc-BeSeH2iX.d.ts → Doc-BsMkmzH8.d.ts} +838 -268
- package/dist/{ImageEditDoc-BTIvw0oq.d.ts → ImageEditDoc-DvoeHMP9.d.ts} +11 -4
- package/dist/{chunk-ZTX4PFFT.js → chunk-2OIBZYKP.js} +75 -2
- package/dist/chunk-2OIBZYKP.js.map +1 -0
- package/dist/chunk-2UQOHYE2.js +45 -0
- package/dist/chunk-2UQOHYE2.js.map +1 -0
- package/dist/{chunk-B4EEON3N.js → chunk-4AKUQPEE.js} +536 -103
- package/dist/chunk-4AKUQPEE.js.map +1 -0
- package/dist/chunk-4ZFRZBU2.js +6582 -0
- package/dist/chunk-4ZFRZBU2.js.map +1 -0
- package/dist/{chunk-57CVQCFX.js → chunk-7MQGNR76.js} +79 -3
- package/dist/chunk-7MQGNR76.js.map +1 -0
- package/dist/{chunk-5WFRKURX.js → chunk-DLXZMS5K.js} +4 -2
- package/dist/chunk-DLXZMS5K.js.map +1 -0
- package/dist/{chunk-MYIH7FWD.js → chunk-FBKP5CAO.js} +1 -1
- package/dist/chunk-FBKP5CAO.js.map +1 -0
- package/dist/chunk-KZNXZ5SM.js +333 -0
- package/dist/chunk-KZNXZ5SM.js.map +1 -0
- package/dist/{chunk-WMOI7FN3.js → chunk-LRCV7N7F.js} +12 -2
- package/dist/{chunk-WMOI7FN3.js.map → chunk-LRCV7N7F.js.map} +1 -1
- package/dist/{chunk-3K5OG6KI.js → chunk-OH43RPTP.js} +403 -187
- package/dist/chunk-OH43RPTP.js.map +1 -0
- package/dist/{chunk-H3AXU4MJ.js → chunk-OKJOQXK4.js} +149 -2
- package/dist/chunk-OKJOQXK4.js.map +1 -0
- package/dist/chunk-PGGGKYWG.js +1 -0
- package/dist/chunk-PGGGKYWG.js.map +1 -0
- package/dist/{chunk-7UDSRZKG.js → chunk-Q3ROPT5H.js} +35 -14
- package/dist/chunk-Q3ROPT5H.js.map +1 -0
- package/dist/chunk-QE7TWGVT.js +178 -0
- package/dist/chunk-QE7TWGVT.js.map +1 -0
- package/dist/chunk-RUDYOTA6.js +345 -0
- package/dist/chunk-RUDYOTA6.js.map +1 -0
- package/dist/chunk-TVSGLUID.js +596 -0
- package/dist/chunk-TVSGLUID.js.map +1 -0
- package/dist/chunk-ZLQKNOZQ.js +1 -0
- package/dist/chunk-ZLQKNOZQ.js.map +1 -0
- package/dist/doc/index.d.ts +5 -10
- package/dist/doc/index.js +263 -7
- package/dist/doc/index.js.map +1 -1
- package/dist/generate/index.d.ts +106 -7
- package/dist/generate/index.js +16 -3
- package/dist/generate/index.js.map +1 -1
- package/dist/icons/index.d.ts +62 -10
- package/dist/icons/index.js +29 -9
- package/dist/icons/index.js.map +1 -1
- package/dist/icons/inlineIconMarker.d.ts +1 -0
- package/dist/icons/inlineIconMarker.js +15 -0
- package/dist/icons/inlineIconMarker.js.map +1 -0
- package/dist/imageEdit/index.d.ts +219 -11
- package/dist/imageEdit/index.js +56 -21
- package/dist/imageEdit/index.js.map +1 -1
- package/dist/index.d.ts +24 -13
- package/dist/index.js +680 -12
- package/dist/index.js.map +1 -1
- package/dist/inlineIconMarker-CiE8Hlvz.d.ts +59 -0
- package/dist/jsonForm/index.d.ts +189 -12
- package/dist/jsonForm/index.js +26 -11
- package/dist/jsonForm/index.js.map +1 -1
- package/dist/markdown/index.d.ts +474 -19
- package/dist/markdown/index.js +72 -33
- package/dist/markdown/index.js.map +1 -1
- package/dist/random/index.d.ts +51 -2
- package/dist/random/index.js +9 -1
- package/dist/random/index.js.map +1 -1
- package/dist/recommend/index.d.ts +39 -13
- package/dist/recommend/index.js +10 -14
- package/dist/recommend/index.js.map +1 -1
- package/dist/schemas/index.d.ts +208 -15
- package/dist/schemas/index.js +150 -11
- package/dist/schemas/index.js.map +1 -1
- package/dist/spatial/index.d.ts +116 -3
- package/dist/spatial/index.js +24 -2
- package/dist/spatial/index.js.map +1 -1
- package/dist/storage/index.d.ts +159 -10
- package/dist/storage/index.js +20 -6
- package/dist/storage/index.js.map +1 -1
- package/dist/story/index.d.ts +906 -40
- package/dist/story/index.js +124 -6
- package/dist/{themeLibrary-BHjJ0Qx6.d.ts → themeLibrary-DQQKuRMx.d.ts} +1 -1
- package/dist/timing/index.d.ts +109 -4
- package/dist/timing/index.js +23 -2
- package/dist/timing/index.js.map +1 -1
- package/dist/transform/index.d.ts +213 -6
- package/dist/transform/index.js +26 -3
- package/dist/transform/index.js.map +1 -1
- package/dist/{types-BdZkdJ3z.d.ts → types-DlAZ7MW4.d.ts} +115 -1
- package/dist/versions/index.d.ts +123 -24
- package/dist/versions/index.js +34 -27
- package/dist/versions/index.js.map +1 -1
- package/package.json +6 -1
- package/src/__tests__/animationUtils.test.ts +40 -0
- package/src/__tests__/annotationCoercion.test.ts +243 -0
- package/src/__tests__/applyRenderStyle.test.ts +146 -0
- package/src/__tests__/atmosphereLayers.test.ts +108 -0
- package/src/__tests__/attrTokens.test.ts +162 -0
- package/src/__tests__/customTemplateSample.test.ts +83 -0
- package/src/__tests__/customTemplatesFrontmatter.test.ts +205 -0
- package/src/__tests__/customThemesFrontmatter.test.ts +118 -0
- package/src/__tests__/diagramBlock.test.ts +122 -0
- package/src/__tests__/diagramLayout.test.ts +134 -0
- package/src/__tests__/drawing.test.ts +109 -0
- package/src/__tests__/drawingBlock.test.ts +124 -0
- package/src/__tests__/drawingLayout.test.ts +171 -0
- package/src/__tests__/geohash.test.ts +6 -5
- package/src/__tests__/getLayers.test.ts +6 -2
- package/src/__tests__/getLayersFallback.test.ts +103 -0
- package/src/__tests__/imageEditExportSvg.test.ts +70 -0
- package/src/__tests__/imageEditVersions.test.ts +72 -0
- package/src/__tests__/inlineIconMarker.test.ts +36 -0
- package/src/__tests__/layoutBlock.test.ts +83 -0
- package/src/__tests__/layoutLayout.test.ts +169 -0
- package/src/__tests__/markdown.test.ts +23 -0
- package/src/__tests__/markdownSanitize.test.ts +64 -0
- package/src/__tests__/markdownToDoc.test.ts +223 -2
- package/src/__tests__/mediaAnnotations.test.ts +64 -0
- package/src/__tests__/mediaSchedule.test.ts +118 -0
- package/src/__tests__/pandocAttrParse.test.ts +187 -0
- package/src/__tests__/resolveDocTheme.test.ts +55 -0
- package/src/__tests__/rootExports.test.ts +43 -0
- package/src/__tests__/shapeGeometry.test.ts +89 -0
- package/src/__tests__/shapeVocabulary.test.ts +133 -0
- package/src/__tests__/structuredData.test.ts +179 -0
- package/src/__tests__/templateAnnotationParse.test.ts +108 -0
- package/src/__tests__/templateMetadata.test.ts +21 -0
- package/src/__tests__/templates.test.ts +145 -4
- package/src/__tests__/themeCompile.test.ts +42 -0
- package/src/__tests__/themeValidator.test.ts +6 -0
- package/src/__tests__/transformV2.test.ts +137 -0
- package/src/__tests__/transitionNormalize.test.ts +61 -0
- package/src/__tests__/validateDoc.test.ts +100 -0
- package/src/doc/customTemplatesFrontmatter.ts +308 -0
- package/src/doc/customThemesFrontmatter.ts +90 -0
- package/src/doc/docToMarkdown.ts +73 -4
- package/src/doc/getLayers.ts +40 -17
- package/src/doc/index.ts +35 -1
- package/src/doc/markdownToDoc.ts +333 -12
- package/src/doc/mediaAnnotations.ts +118 -0
- package/src/doc/resolveDocTheme.ts +55 -0
- package/src/doc/structuredData.ts +230 -0
- package/src/doc/templateInputs.ts +240 -0
- package/src/doc/templates/__tests__/customTemplate.test.ts +151 -0
- package/src/doc/templates/__tests__/customTemplateRegistry.test.ts +110 -0
- package/src/doc/templates/accentImage.ts +30 -6
- package/src/doc/templates/captionUtils.ts +23 -0
- package/src/doc/templates/comparisonBar.ts +26 -18
- package/src/doc/templates/coverBlock.ts +7 -4
- package/src/doc/templates/customTemplate.ts +45 -0
- package/src/doc/templates/dataTable.ts +37 -19
- package/src/doc/templates/dateEvent.ts +41 -20
- package/src/doc/templates/definitionCard.ts +26 -18
- package/src/doc/templates/diagramBlock.ts +204 -0
- package/src/doc/templates/diagramLayout.ts +159 -0
- package/src/doc/templates/drawingBlock.ts +325 -0
- package/src/doc/templates/drawingLayout.ts +539 -0
- package/src/doc/templates/factCard.ts +51 -25
- package/src/doc/templates/fallbackBlock.ts +123 -0
- package/src/doc/templates/featureBlock.ts +20 -13
- package/src/doc/templates/fullBleedQuote.ts +18 -8
- package/src/doc/templates/imageWithCaption.ts +22 -9
- package/src/doc/templates/index.ts +215 -46
- package/src/doc/templates/layoutBlock.ts +43 -0
- package/src/doc/templates/layoutLayout.ts +243 -0
- package/src/doc/templates/listBlock.ts +56 -30
- package/src/doc/templates/mapBlock.ts +15 -12
- package/src/doc/templates/metadata.ts +120 -0
- package/src/doc/templates/persistentLayers.ts +129 -11
- package/src/doc/templates/photoGrid.ts +23 -12
- package/src/doc/templates/pullQuote.ts +30 -12
- package/src/doc/templates/quoteBlock.ts +54 -29
- package/src/doc/templates/sectionHeader.ts +25 -11
- package/src/doc/templates/statHighlight.ts +39 -22
- package/src/doc/templates/titleBlock.ts +59 -21
- package/src/doc/templates/tokens/__tests__/resolveTokens.test.ts +221 -0
- package/src/doc/templates/tokens/resolveTokens.ts +0 -0
- package/src/doc/templates/twoColumn.ts +48 -30
- package/src/doc/templates/videoPullQuote.ts +22 -12
- package/src/doc/templates/videoWithCaption.ts +13 -8
- package/src/doc/utils/animationUtils.ts +267 -3
- package/src/doc/utils/applyRenderStyle.ts +113 -0
- package/src/doc/utils/imageTreatment.ts +70 -0
- package/src/doc/utils/shapeGeometry.ts +464 -0
- package/src/doc/utils/themeUtils.ts +75 -1
- package/src/doc/validate.ts +476 -0
- package/src/generate/slideshowGenerator.ts +7 -0
- package/src/icons/index.ts +8 -0
- package/src/icons/inlineIconMarker.ts +73 -0
- package/src/imageEdit/export.ts +85 -2
- package/src/imageEdit/index.ts +1 -0
- package/src/imageEdit/persistence.ts +51 -0
- package/src/index.ts +2 -0
- package/src/markdown/annotationCoercion.ts +295 -0
- package/src/markdown/attrTokens.ts +222 -0
- package/src/markdown/convert.ts +229 -26
- package/src/markdown/index.ts +36 -0
- package/src/markdown/sanitize.ts +298 -0
- package/src/markdown/stringify.ts +84 -3
- package/src/markdown/types.ts +66 -0
- package/src/markdown/utils.ts +49 -1
- package/src/recommend/templates.ts +24 -0
- package/src/schemas/BlockTemplates.ts +133 -4
- package/src/schemas/CustomTemplates.ts +74 -0
- package/src/schemas/Doc.ts +353 -29
- package/src/schemas/ImageEditDoc.ts +11 -4
- package/src/schemas/Media.ts +169 -0
- package/src/schemas/Theme.ts +23 -1
- package/src/schemas/Transitions.ts +224 -0
- package/src/schemas/colorUtils.ts +33 -0
- package/src/schemas/fontStacks.ts +5 -2
- package/src/schemas/index.ts +3 -0
- package/src/schemas/themeCompile.ts +23 -4
- package/src/schemas/themeValidator.ts +49 -11
- package/src/schemas/themes/cinematic.json +69 -12
- package/src/schemas/themes/documentary.json +58 -11
- package/src/schemas/themes/gezellig.json +60 -11
- package/src/schemas/themes/magazine.json +54 -9
- package/src/schemas/themes/morning-light.json +52 -9
- package/src/schemas/themes/standard-dark.json +48 -13
- package/src/schemas/themes/standard.json +44 -12
- package/src/schemas/themes/tech-dark.json +65 -12
- package/src/spatial/Geohash.ts +52 -21
- package/src/transform/applyTransform.ts +43 -4
- package/src/transform/index.ts +1 -0
- package/src/transform/registry.ts +44 -13
- package/src/transform/styles/dataDriven.ts +2 -1
- package/src/transform/styles/documentary.ts +2 -1
- package/src/transform/styles/magazine.ts +3 -1
- package/src/transform/styles/minimal.ts +2 -1
- package/src/transform/styles/narrative.ts +3 -1
- package/src/transform/templateSelector.ts +87 -11
- package/src/transform/types.ts +35 -2
- package/dist/__tests__/animationUtils.test.d.ts +0 -2
- package/dist/__tests__/animationUtils.test.d.ts.map +0 -1
- package/dist/__tests__/animationUtils.test.js +0 -60
- package/dist/__tests__/animationUtils.test.js.map +0 -1
- package/dist/__tests__/colorUtils.test.d.ts +0 -2
- package/dist/__tests__/colorUtils.test.d.ts.map +0 -1
- package/dist/__tests__/colorUtils.test.js +0 -94
- package/dist/__tests__/colorUtils.test.js.map +0 -1
- package/dist/__tests__/contentContainer.test.d.ts +0 -2
- package/dist/__tests__/contentContainer.test.d.ts.map +0 -1
- package/dist/__tests__/contentContainer.test.js +0 -234
- package/dist/__tests__/contentContainer.test.js.map +0 -1
- package/dist/__tests__/contentExtractor.test.d.ts +0 -2
- package/dist/__tests__/contentExtractor.test.d.ts.map +0 -1
- package/dist/__tests__/contentExtractor.test.js +0 -151
- package/dist/__tests__/contentExtractor.test.js.map +0 -1
- package/dist/__tests__/coverBlock.test.d.ts +0 -2
- package/dist/__tests__/coverBlock.test.d.ts.map +0 -1
- package/dist/__tests__/coverBlock.test.js +0 -197
- package/dist/__tests__/coverBlock.test.js.map +0 -1
- package/dist/__tests__/dataTable.test.d.ts +0 -2
- package/dist/__tests__/dataTable.test.d.ts.map +0 -1
- package/dist/__tests__/dataTable.test.js +0 -110
- package/dist/__tests__/dataTable.test.js.map +0 -1
- package/dist/__tests__/geohash.test.d.ts +0 -2
- package/dist/__tests__/geohash.test.d.ts.map +0 -1
- package/dist/__tests__/geohash.test.js +0 -87
- package/dist/__tests__/geohash.test.js.map +0 -1
- package/dist/__tests__/getLayers.test.d.ts +0 -2
- package/dist/__tests__/getLayers.test.d.ts.map +0 -1
- package/dist/__tests__/getLayers.test.js +0 -191
- package/dist/__tests__/getLayers.test.js.map +0 -1
- package/dist/__tests__/haversine.test.d.ts +0 -2
- package/dist/__tests__/haversine.test.d.ts.map +0 -1
- package/dist/__tests__/haversine.test.js +0 -56
- package/dist/__tests__/haversine.test.js.map +0 -1
- package/dist/__tests__/iconResolve.test.d.ts +0 -2
- package/dist/__tests__/iconResolve.test.d.ts.map +0 -1
- package/dist/__tests__/iconResolve.test.js +0 -99
- package/dist/__tests__/iconResolve.test.js.map +0 -1
- package/dist/__tests__/imageEditState.test.d.ts +0 -2
- package/dist/__tests__/imageEditState.test.d.ts.map +0 -1
- package/dist/__tests__/imageEditState.test.js +0 -61
- package/dist/__tests__/imageEditState.test.js.map +0 -1
- package/dist/__tests__/imageEditVersions.test.d.ts +0 -2
- package/dist/__tests__/imageEditVersions.test.d.ts.map +0 -1
- package/dist/__tests__/imageEditVersions.test.js +0 -141
- package/dist/__tests__/imageEditVersions.test.js.map +0 -1
- package/dist/__tests__/inferDocumentTitle.test.d.ts +0 -2
- package/dist/__tests__/inferDocumentTitle.test.d.ts.map +0 -1
- package/dist/__tests__/inferDocumentTitle.test.js +0 -42
- package/dist/__tests__/inferDocumentTitle.test.js.map +0 -1
- package/dist/__tests__/jsonForm.chooseControl.test.d.ts +0 -2
- package/dist/__tests__/jsonForm.chooseControl.test.d.ts.map +0 -1
- package/dist/__tests__/jsonForm.chooseControl.test.js +0 -74
- package/dist/__tests__/jsonForm.chooseControl.test.js.map +0 -1
- package/dist/__tests__/jsonForm.evaluateWhen.test.d.ts +0 -2
- package/dist/__tests__/jsonForm.evaluateWhen.test.d.ts.map +0 -1
- package/dist/__tests__/jsonForm.evaluateWhen.test.js +0 -51
- package/dist/__tests__/jsonForm.evaluateWhen.test.js.map +0 -1
- package/dist/__tests__/jsonForm.inferSchema.test.d.ts +0 -2
- package/dist/__tests__/jsonForm.inferSchema.test.d.ts.map +0 -1
- package/dist/__tests__/jsonForm.inferSchema.test.js +0 -23
- package/dist/__tests__/jsonForm.inferSchema.test.js.map +0 -1
- package/dist/__tests__/jsonForm.pointer.test.d.ts +0 -2
- package/dist/__tests__/jsonForm.pointer.test.d.ts.map +0 -1
- package/dist/__tests__/jsonForm.pointer.test.js +0 -94
- package/dist/__tests__/jsonForm.pointer.test.js.map +0 -1
- package/dist/__tests__/localForageAdapter.test.d.ts +0 -8
- package/dist/__tests__/localForageAdapter.test.d.ts.map +0 -1
- package/dist/__tests__/localForageAdapter.test.js +0 -130
- package/dist/__tests__/localForageAdapter.test.js.map +0 -1
- package/dist/__tests__/markdown.test.d.ts +0 -2
- package/dist/__tests__/markdown.test.d.ts.map +0 -1
- package/dist/__tests__/markdown.test.js +0 -715
- package/dist/__tests__/markdown.test.js.map +0 -1
- package/dist/__tests__/markdownIcons.test.d.ts +0 -2
- package/dist/__tests__/markdownIcons.test.d.ts.map +0 -1
- package/dist/__tests__/markdownIcons.test.js +0 -93
- package/dist/__tests__/markdownIcons.test.js.map +0 -1
- package/dist/__tests__/markdownToDoc.test.d.ts +0 -2
- package/dist/__tests__/markdownToDoc.test.d.ts.map +0 -1
- package/dist/__tests__/markdownToDoc.test.js +0 -458
- package/dist/__tests__/markdownToDoc.test.js.map +0 -1
- package/dist/__tests__/recommendTemplates.test.d.ts +0 -2
- package/dist/__tests__/recommendTemplates.test.d.ts.map +0 -1
- package/dist/__tests__/recommendTemplates.test.js +0 -158
- package/dist/__tests__/recommendTemplates.test.js.map +0 -1
- package/dist/__tests__/scopedContentContainer.test.d.ts +0 -2
- package/dist/__tests__/scopedContentContainer.test.d.ts.map +0 -1
- package/dist/__tests__/scopedContentContainer.test.js +0 -74
- package/dist/__tests__/scopedContentContainer.test.js.map +0 -1
- package/dist/__tests__/seededRandom.test.d.ts +0 -2
- package/dist/__tests__/seededRandom.test.d.ts.map +0 -1
- package/dist/__tests__/seededRandom.test.js +0 -125
- package/dist/__tests__/seededRandom.test.js.map +0 -1
- package/dist/__tests__/slideshowGenerator.test.d.ts +0 -2
- package/dist/__tests__/slideshowGenerator.test.d.ts.map +0 -1
- package/dist/__tests__/slideshowGenerator.test.js +0 -114
- package/dist/__tests__/slideshowGenerator.test.js.map +0 -1
- package/dist/__tests__/storage.test.d.ts +0 -2
- package/dist/__tests__/storage.test.d.ts.map +0 -1
- package/dist/__tests__/storage.test.js +0 -51
- package/dist/__tests__/storage.test.js.map +0 -1
- package/dist/__tests__/surface.test.d.ts +0 -2
- package/dist/__tests__/surface.test.d.ts.map +0 -1
- package/dist/__tests__/surface.test.js +0 -57
- package/dist/__tests__/surface.test.js.map +0 -1
- package/dist/__tests__/templateAnnotationParse.test.d.ts +0 -2
- package/dist/__tests__/templateAnnotationParse.test.d.ts.map +0 -1
- package/dist/__tests__/templateAnnotationParse.test.js +0 -42
- package/dist/__tests__/templateAnnotationParse.test.js.map +0 -1
- package/dist/__tests__/templates.test.d.ts +0 -2
- package/dist/__tests__/templates.test.d.ts.map +0 -1
- package/dist/__tests__/templates.test.js +0 -298
- package/dist/__tests__/templates.test.js.map +0 -1
- package/dist/__tests__/themeCompile.test.d.ts +0 -2
- package/dist/__tests__/themeCompile.test.d.ts.map +0 -1
- package/dist/__tests__/themeCompile.test.js +0 -134
- package/dist/__tests__/themeCompile.test.js.map +0 -1
- package/dist/__tests__/themeValidator.test.d.ts +0 -2
- package/dist/__tests__/themeValidator.test.d.ts.map +0 -1
- package/dist/__tests__/themeValidator.test.js +0 -107
- package/dist/__tests__/themeValidator.test.js.map +0 -1
- package/dist/__tests__/timing.test.d.ts +0 -2
- package/dist/__tests__/timing.test.d.ts.map +0 -1
- package/dist/__tests__/timing.test.js +0 -131
- package/dist/__tests__/timing.test.js.map +0 -1
- package/dist/__tests__/versions.test.d.ts +0 -2
- package/dist/__tests__/versions.test.d.ts.map +0 -1
- package/dist/__tests__/versions.test.js +0 -339
- package/dist/__tests__/versions.test.js.map +0 -1
- package/dist/chunk-3K5OG6KI.js.map +0 -1
- package/dist/chunk-57CVQCFX.js.map +0 -1
- package/dist/chunk-5WFRKURX.js.map +0 -1
- package/dist/chunk-7UDSRZKG.js.map +0 -1
- package/dist/chunk-B4EEON3N.js.map +0 -1
- package/dist/chunk-H3AXU4MJ.js.map +0 -1
- package/dist/chunk-KSWJR66U.js +0 -3706
- package/dist/chunk-KSWJR66U.js.map +0 -1
- package/dist/chunk-MYIH7FWD.js.map +0 -1
- package/dist/chunk-ZTX4PFFT.js.map +0 -1
- package/dist/doc/audioMapping.d.ts +0 -36
- package/dist/doc/audioMapping.d.ts.map +0 -1
- package/dist/doc/audioMapping.js +0 -350
- package/dist/doc/audioMapping.js.map +0 -1
- package/dist/doc/docToMarkdown.d.ts +0 -41
- package/dist/doc/docToMarkdown.d.ts.map +0 -1
- package/dist/doc/docToMarkdown.js +0 -88
- package/dist/doc/docToMarkdown.js.map +0 -1
- package/dist/doc/getLayers.d.ts +0 -65
- package/dist/doc/getLayers.d.ts.map +0 -1
- package/dist/doc/getLayers.js +0 -114
- package/dist/doc/getLayers.js.map +0 -1
- package/dist/doc/index.d.ts.map +0 -1
- package/dist/doc/markdownToDoc.d.ts +0 -75
- package/dist/doc/markdownToDoc.d.ts.map +0 -1
- package/dist/doc/markdownToDoc.js +0 -432
- package/dist/doc/markdownToDoc.js.map +0 -1
- package/dist/doc/templates/accentImage.d.ts +0 -59
- package/dist/doc/templates/accentImage.d.ts.map +0 -1
- package/dist/doc/templates/accentImage.js +0 -275
- package/dist/doc/templates/accentImage.js.map +0 -1
- package/dist/doc/templates/captionUtils.d.ts +0 -20
- package/dist/doc/templates/captionUtils.d.ts.map +0 -1
- package/dist/doc/templates/captionUtils.js +0 -29
- package/dist/doc/templates/captionUtils.js.map +0 -1
- package/dist/doc/templates/comparisonBar.d.ts +0 -13
- package/dist/doc/templates/comparisonBar.d.ts.map +0 -1
- package/dist/doc/templates/comparisonBar.js +0 -145
- package/dist/doc/templates/comparisonBar.js.map +0 -1
- package/dist/doc/templates/coverBlock.d.ts +0 -51
- package/dist/doc/templates/coverBlock.d.ts.map +0 -1
- package/dist/doc/templates/coverBlock.js +0 -153
- package/dist/doc/templates/coverBlock.js.map +0 -1
- package/dist/doc/templates/dataTable.d.ts +0 -14
- package/dist/doc/templates/dataTable.d.ts.map +0 -1
- package/dist/doc/templates/dataTable.js +0 -73
- package/dist/doc/templates/dataTable.js.map +0 -1
- package/dist/doc/templates/dateEvent.d.ts +0 -15
- package/dist/doc/templates/dateEvent.d.ts.map +0 -1
- package/dist/doc/templates/dateEvent.js +0 -114
- package/dist/doc/templates/dateEvent.js.map +0 -1
- package/dist/doc/templates/definitionCard.d.ts +0 -13
- package/dist/doc/templates/definitionCard.d.ts.map +0 -1
- package/dist/doc/templates/definitionCard.js +0 -117
- package/dist/doc/templates/definitionCard.js.map +0 -1
- package/dist/doc/templates/factCard.d.ts +0 -15
- package/dist/doc/templates/factCard.d.ts.map +0 -1
- package/dist/doc/templates/factCard.js +0 -104
- package/dist/doc/templates/factCard.js.map +0 -1
- package/dist/doc/templates/featureBlock.d.ts +0 -18
- package/dist/doc/templates/featureBlock.d.ts.map +0 -1
- package/dist/doc/templates/featureBlock.js +0 -180
- package/dist/doc/templates/featureBlock.js.map +0 -1
- package/dist/doc/templates/fullBleedQuote.d.ts +0 -25
- package/dist/doc/templates/fullBleedQuote.d.ts.map +0 -1
- package/dist/doc/templates/fullBleedQuote.js +0 -67
- package/dist/doc/templates/fullBleedQuote.js.map +0 -1
- package/dist/doc/templates/imageWithCaption.d.ts +0 -13
- package/dist/doc/templates/imageWithCaption.d.ts.map +0 -1
- package/dist/doc/templates/imageWithCaption.js +0 -146
- package/dist/doc/templates/imageWithCaption.js.map +0 -1
- package/dist/doc/templates/index.d.ts +0 -129
- package/dist/doc/templates/index.d.ts.map +0 -1
- package/dist/doc/templates/index.js +0 -478
- package/dist/doc/templates/index.js.map +0 -1
- package/dist/doc/templates/listBlock.d.ts +0 -13
- package/dist/doc/templates/listBlock.d.ts.map +0 -1
- package/dist/doc/templates/listBlock.js +0 -109
- package/dist/doc/templates/listBlock.js.map +0 -1
- package/dist/doc/templates/mapBlock.d.ts +0 -17
- package/dist/doc/templates/mapBlock.d.ts.map +0 -1
- package/dist/doc/templates/mapBlock.js +0 -115
- package/dist/doc/templates/mapBlock.js.map +0 -1
- package/dist/doc/templates/persistentLayers.d.ts +0 -39
- package/dist/doc/templates/persistentLayers.d.ts.map +0 -1
- package/dist/doc/templates/persistentLayers.js +0 -447
- package/dist/doc/templates/persistentLayers.js.map +0 -1
- package/dist/doc/templates/photoGrid.d.ts +0 -20
- package/dist/doc/templates/photoGrid.d.ts.map +0 -1
- package/dist/doc/templates/photoGrid.js +0 -175
- package/dist/doc/templates/photoGrid.js.map +0 -1
- package/dist/doc/templates/pullQuote.d.ts +0 -13
- package/dist/doc/templates/pullQuote.d.ts.map +0 -1
- package/dist/doc/templates/pullQuote.js +0 -113
- package/dist/doc/templates/pullQuote.js.map +0 -1
- package/dist/doc/templates/quoteBlock.d.ts +0 -15
- package/dist/doc/templates/quoteBlock.d.ts.map +0 -1
- package/dist/doc/templates/quoteBlock.js +0 -101
- package/dist/doc/templates/quoteBlock.js.map +0 -1
- package/dist/doc/templates/sectionHeader.d.ts +0 -14
- package/dist/doc/templates/sectionHeader.d.ts.map +0 -1
- package/dist/doc/templates/sectionHeader.js +0 -97
- package/dist/doc/templates/sectionHeader.js.map +0 -1
- package/dist/doc/templates/statHighlight.d.ts +0 -27
- package/dist/doc/templates/statHighlight.d.ts.map +0 -1
- package/dist/doc/templates/statHighlight.js +0 -114
- package/dist/doc/templates/statHighlight.js.map +0 -1
- package/dist/doc/templates/titleBlock.d.ts +0 -24
- package/dist/doc/templates/titleBlock.d.ts.map +0 -1
- package/dist/doc/templates/titleBlock.js +0 -103
- package/dist/doc/templates/titleBlock.js.map +0 -1
- package/dist/doc/templates/twoColumn.d.ts +0 -15
- package/dist/doc/templates/twoColumn.d.ts.map +0 -1
- package/dist/doc/templates/twoColumn.js +0 -225
- package/dist/doc/templates/twoColumn.js.map +0 -1
- package/dist/doc/templates/videoPullQuote.d.ts +0 -20
- package/dist/doc/templates/videoPullQuote.d.ts.map +0 -1
- package/dist/doc/templates/videoPullQuote.js +0 -122
- package/dist/doc/templates/videoPullQuote.js.map +0 -1
- package/dist/doc/templates/videoWithCaption.d.ts +0 -20
- package/dist/doc/templates/videoWithCaption.d.ts.map +0 -1
- package/dist/doc/templates/videoWithCaption.js +0 -107
- package/dist/doc/templates/videoWithCaption.js.map +0 -1
- package/dist/doc/utils/animationUtils.d.ts +0 -34
- package/dist/doc/utils/animationUtils.d.ts.map +0 -1
- package/dist/doc/utils/animationUtils.js +0 -110
- package/dist/doc/utils/animationUtils.js.map +0 -1
- package/dist/doc/utils/themeUtils.d.ts +0 -64
- package/dist/doc/utils/themeUtils.d.ts.map +0 -1
- package/dist/doc/utils/themeUtils.js +0 -136
- package/dist/doc/utils/themeUtils.js.map +0 -1
- package/dist/generate/contentExtractor.d.ts +0 -112
- package/dist/generate/contentExtractor.d.ts.map +0 -1
- package/dist/generate/contentExtractor.js +0 -638
- package/dist/generate/contentExtractor.js.map +0 -1
- package/dist/generate/index.d.ts.map +0 -1
- package/dist/generate/slideshowGenerator.d.ts +0 -72
- package/dist/generate/slideshowGenerator.d.ts.map +0 -1
- package/dist/generate/slideshowGenerator.js +0 -159
- package/dist/generate/slideshowGenerator.js.map +0 -1
- package/dist/generate/templateMapper.d.ts +0 -23
- package/dist/generate/templateMapper.d.ts.map +0 -1
- package/dist/generate/templateMapper.js +0 -114
- package/dist/generate/templateMapper.js.map +0 -1
- package/dist/icons/iconData.d.ts +0 -26
- package/dist/icons/iconData.d.ts.map +0 -1
- package/dist/icons/iconData.js +0 -12
- package/dist/icons/iconData.js.map +0 -1
- package/dist/icons/index.d.ts.map +0 -1
- package/dist/icons/resolve.d.ts +0 -61
- package/dist/icons/resolve.d.ts.map +0 -1
- package/dist/icons/resolve.js +0 -130
- package/dist/icons/resolve.js.map +0 -1
- package/dist/imageEdit/ImageEditVersionManager.d.ts +0 -31
- package/dist/imageEdit/ImageEditVersionManager.d.ts.map +0 -1
- package/dist/imageEdit/ImageEditVersionManager.js +0 -39
- package/dist/imageEdit/ImageEditVersionManager.js.map +0 -1
- package/dist/imageEdit/export.d.ts +0 -33
- package/dist/imageEdit/export.d.ts.map +0 -1
- package/dist/imageEdit/export.js +0 -253
- package/dist/imageEdit/export.js.map +0 -1
- package/dist/imageEdit/index.d.ts.map +0 -1
- package/dist/imageEdit/persistence.d.ts +0 -15
- package/dist/imageEdit/persistence.d.ts.map +0 -1
- package/dist/imageEdit/persistence.js +0 -49
- package/dist/imageEdit/persistence.js.map +0 -1
- package/dist/imageEdit/state.d.ts +0 -42
- package/dist/imageEdit/state.d.ts.map +0 -1
- package/dist/imageEdit/state.js +0 -98
- package/dist/imageEdit/state.js.map +0 -1
- package/dist/imageEdit/versionPaths.d.ts +0 -27
- package/dist/imageEdit/versionPaths.d.ts.map +0 -1
- package/dist/imageEdit/versionPaths.js +0 -57
- package/dist/imageEdit/versionPaths.js.map +0 -1
- package/dist/imageEdit/versions.d.ts +0 -67
- package/dist/imageEdit/versions.d.ts.map +0 -1
- package/dist/imageEdit/versions.js +0 -161
- package/dist/imageEdit/versions.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/jsonForm/chooseControl.d.ts +0 -20
- package/dist/jsonForm/chooseControl.d.ts.map +0 -1
- package/dist/jsonForm/chooseControl.js +0 -82
- package/dist/jsonForm/chooseControl.js.map +0 -1
- package/dist/jsonForm/evaluateWhen.d.ts +0 -12
- package/dist/jsonForm/evaluateWhen.d.ts.map +0 -1
- package/dist/jsonForm/evaluateWhen.js +0 -65
- package/dist/jsonForm/evaluateWhen.js.map +0 -1
- package/dist/jsonForm/index.d.ts.map +0 -1
- package/dist/jsonForm/inferSchema.d.ts +0 -12
- package/dist/jsonForm/inferSchema.d.ts.map +0 -1
- package/dist/jsonForm/inferSchema.js +0 -15
- package/dist/jsonForm/inferSchema.js.map +0 -1
- package/dist/jsonForm/pointer.d.ts +0 -26
- package/dist/jsonForm/pointer.d.ts.map +0 -1
- package/dist/jsonForm/pointer.js +0 -102
- package/dist/jsonForm/pointer.js.map +0 -1
- package/dist/jsonForm/types.d.ts +0 -120
- package/dist/jsonForm/types.d.ts.map +0 -1
- package/dist/jsonForm/types.js +0 -10
- package/dist/jsonForm/types.js.map +0 -1
- package/dist/markdown/convert.d.ts +0 -81
- package/dist/markdown/convert.d.ts.map +0 -1
- package/dist/markdown/convert.js +0 -975
- package/dist/markdown/convert.js.map +0 -1
- package/dist/markdown/htmlParse.d.ts +0 -26
- package/dist/markdown/htmlParse.d.ts.map +0 -1
- package/dist/markdown/htmlParse.js +0 -195
- package/dist/markdown/htmlParse.js.map +0 -1
- package/dist/markdown/index.d.ts.map +0 -1
- package/dist/markdown/parse.d.ts +0 -27
- package/dist/markdown/parse.d.ts.map +0 -1
- package/dist/markdown/parse.js +0 -90
- package/dist/markdown/parse.js.map +0 -1
- package/dist/markdown/stringify.d.ts +0 -32
- package/dist/markdown/stringify.d.ts.map +0 -1
- package/dist/markdown/stringify.js +0 -108
- package/dist/markdown/stringify.js.map +0 -1
- package/dist/markdown/types.d.ts +0 -531
- package/dist/markdown/types.d.ts.map +0 -1
- package/dist/markdown/types.js +0 -17
- package/dist/markdown/types.js.map +0 -1
- package/dist/markdown/utils.d.ts +0 -118
- package/dist/markdown/utils.d.ts.map +0 -1
- package/dist/markdown/utils.js +0 -308
- package/dist/markdown/utils.js.map +0 -1
- package/dist/random/SeededRandom.d.ts +0 -50
- package/dist/random/SeededRandom.d.ts.map +0 -1
- package/dist/random/SeededRandom.js +0 -115
- package/dist/random/SeededRandom.js.map +0 -1
- package/dist/random/index.d.ts.map +0 -1
- package/dist/recommend/index.d.ts.map +0 -1
- package/dist/recommend/templates.d.ts +0 -39
- package/dist/recommend/templates.d.ts.map +0 -1
- package/dist/recommend/templates.js +0 -235
- package/dist/recommend/templates.js.map +0 -1
- package/dist/schemas/BlockTemplates.d.ts +0 -638
- package/dist/schemas/BlockTemplates.d.ts.map +0 -1
- package/dist/schemas/BlockTemplates.js +0 -72
- package/dist/schemas/BlockTemplates.js.map +0 -1
- package/dist/schemas/Doc.d.ts +0 -503
- package/dist/schemas/Doc.d.ts.map +0 -1
- package/dist/schemas/Doc.js +0 -90
- package/dist/schemas/Doc.js.map +0 -1
- package/dist/schemas/ImageEditDoc.d.ts +0 -81
- package/dist/schemas/ImageEditDoc.d.ts.map +0 -1
- package/dist/schemas/ImageEditDoc.js +0 -20
- package/dist/schemas/ImageEditDoc.js.map +0 -1
- package/dist/schemas/LayoutStrategy.d.ts +0 -84
- package/dist/schemas/LayoutStrategy.d.ts.map +0 -1
- package/dist/schemas/LayoutStrategy.js +0 -123
- package/dist/schemas/LayoutStrategy.js.map +0 -1
- package/dist/schemas/MediaProvider.d.ts +0 -65
- package/dist/schemas/MediaProvider.d.ts.map +0 -1
- package/dist/schemas/MediaProvider.js +0 -13
- package/dist/schemas/MediaProvider.js.map +0 -1
- package/dist/schemas/Theme.d.ts +0 -233
- package/dist/schemas/Theme.d.ts.map +0 -1
- package/dist/schemas/Theme.js +0 -129
- package/dist/schemas/Theme.js.map +0 -1
- package/dist/schemas/Types.d.ts +0 -14
- package/dist/schemas/Types.d.ts.map +0 -1
- package/dist/schemas/Types.js +0 -5
- package/dist/schemas/Types.js.map +0 -1
- package/dist/schemas/Viewport.d.ts +0 -74
- package/dist/schemas/Viewport.d.ts.map +0 -1
- package/dist/schemas/Viewport.js +0 -63
- package/dist/schemas/Viewport.js.map +0 -1
- package/dist/schemas/colorUtils.d.ts +0 -51
- package/dist/schemas/colorUtils.d.ts.map +0 -1
- package/dist/schemas/colorUtils.js +0 -154
- package/dist/schemas/colorUtils.js.map +0 -1
- package/dist/schemas/fontStacks.d.ts +0 -57
- package/dist/schemas/fontStacks.d.ts.map +0 -1
- package/dist/schemas/fontStacks.js +0 -227
- package/dist/schemas/fontStacks.js.map +0 -1
- package/dist/schemas/index.d.ts.map +0 -1
- package/dist/schemas/themeCompile.d.ts +0 -45
- package/dist/schemas/themeCompile.d.ts.map +0 -1
- package/dist/schemas/themeCompile.js +0 -160
- package/dist/schemas/themeCompile.js.map +0 -1
- package/dist/schemas/themeLibrary.d.ts +0 -37
- package/dist/schemas/themeLibrary.d.ts.map +0 -1
- package/dist/schemas/themeLibrary.js +0 -49
- package/dist/schemas/themeLibrary.js.map +0 -1
- package/dist/schemas/themeValidator.d.ts +0 -26
- package/dist/schemas/themeValidator.d.ts.map +0 -1
- package/dist/schemas/themeValidator.js +0 -352
- package/dist/schemas/themeValidator.js.map +0 -1
- package/dist/schemas/themes/bold.json +0 -48
- package/dist/schemas/themes/cinematic.json +0 -54
- package/dist/schemas/themes/documentary.json +0 -49
- package/dist/schemas/themes/gezellig.json +0 -44
- package/dist/schemas/themes/index.d.ts +0 -26
- package/dist/schemas/themes/index.d.ts.map +0 -1
- package/dist/schemas/themes/index.js +0 -49
- package/dist/schemas/themes/index.js.map +0 -1
- package/dist/schemas/themes/magazine.json +0 -44
- package/dist/schemas/themes/minimalist.json +0 -45
- package/dist/schemas/themes/morning-light.json +0 -42
- package/dist/schemas/themes/standard-dark.json +0 -50
- package/dist/schemas/themes/standard.json +0 -42
- package/dist/schemas/themes/tech-dark.json +0 -48
- package/dist/schemas/themes/warm-earth.json +0 -50
- package/dist/spatial/Geohash.d.ts +0 -85
- package/dist/spatial/Geohash.d.ts.map +0 -1
- package/dist/spatial/Geohash.js +0 -142
- package/dist/spatial/Geohash.js.map +0 -1
- package/dist/spatial/Haversine.d.ts +0 -24
- package/dist/spatial/Haversine.d.ts.map +0 -1
- package/dist/spatial/Haversine.js +0 -48
- package/dist/spatial/Haversine.js.map +0 -1
- package/dist/spatial/index.d.ts.map +0 -1
- package/dist/storage/ContentContainer.d.ts +0 -87
- package/dist/storage/ContentContainer.d.ts.map +0 -1
- package/dist/storage/ContentContainer.js +0 -131
- package/dist/storage/ContentContainer.js.map +0 -1
- package/dist/storage/LocalForageAdapter.d.ts +0 -36
- package/dist/storage/LocalForageAdapter.d.ts.map +0 -1
- package/dist/storage/LocalForageAdapter.js +0 -82
- package/dist/storage/LocalForageAdapter.js.map +0 -1
- package/dist/storage/LocalStorageAdapter.d.ts +0 -16
- package/dist/storage/LocalStorageAdapter.d.ts.map +0 -1
- package/dist/storage/LocalStorageAdapter.js +0 -50
- package/dist/storage/LocalStorageAdapter.js.map +0 -1
- package/dist/storage/MediaProviderFromContainer.d.ts +0 -21
- package/dist/storage/MediaProviderFromContainer.d.ts.map +0 -1
- package/dist/storage/MediaProviderFromContainer.js +0 -79
- package/dist/storage/MediaProviderFromContainer.js.map +0 -1
- package/dist/storage/MemoryStorageAdapter.d.ts +0 -15
- package/dist/storage/MemoryStorageAdapter.d.ts.map +0 -1
- package/dist/storage/MemoryStorageAdapter.js +0 -34
- package/dist/storage/MemoryStorageAdapter.js.map +0 -1
- package/dist/storage/ScopedContentContainer.d.ts +0 -44
- package/dist/storage/ScopedContentContainer.d.ts.map +0 -1
- package/dist/storage/ScopedContentContainer.js +0 -94
- package/dist/storage/ScopedContentContainer.js.map +0 -1
- package/dist/storage/Storage.d.ts +0 -23
- package/dist/storage/Storage.d.ts.map +0 -1
- package/dist/storage/Storage.js +0 -9
- package/dist/storage/Storage.js.map +0 -1
- package/dist/storage/index.d.ts.map +0 -1
- package/dist/timing/index.d.ts.map +0 -1
- package/dist/timing/narrationTiming.d.ts +0 -54
- package/dist/timing/narrationTiming.d.ts.map +0 -1
- package/dist/timing/narrationTiming.js +0 -190
- package/dist/timing/narrationTiming.js.map +0 -1
- package/dist/timing/readingTime.d.ts +0 -54
- package/dist/timing/readingTime.d.ts.map +0 -1
- package/dist/timing/readingTime.js +0 -49
- package/dist/timing/readingTime.js.map +0 -1
- package/dist/transform/applyTransform.d.ts +0 -22
- package/dist/transform/applyTransform.d.ts.map +0 -1
- package/dist/transform/applyTransform.js +0 -68
- package/dist/transform/applyTransform.js.map +0 -1
- package/dist/transform/blockAnalyzer.d.ts +0 -48
- package/dist/transform/blockAnalyzer.d.ts.map +0 -1
- package/dist/transform/blockAnalyzer.js +0 -135
- package/dist/transform/blockAnalyzer.js.map +0 -1
- package/dist/transform/index.d.ts.map +0 -1
- package/dist/transform/registry.d.ts +0 -19
- package/dist/transform/registry.d.ts.map +0 -1
- package/dist/transform/registry.js +0 -41
- package/dist/transform/registry.js.map +0 -1
- package/dist/transform/styles/dataDriven.d.ts +0 -4
- package/dist/transform/styles/dataDriven.d.ts.map +0 -1
- package/dist/transform/styles/dataDriven.js +0 -15
- package/dist/transform/styles/dataDriven.js.map +0 -1
- package/dist/transform/styles/documentary.d.ts +0 -4
- package/dist/transform/styles/documentary.d.ts.map +0 -1
- package/dist/transform/styles/documentary.js +0 -15
- package/dist/transform/styles/documentary.js.map +0 -1
- package/dist/transform/styles/index.d.ts +0 -6
- package/dist/transform/styles/index.d.ts.map +0 -1
- package/dist/transform/styles/index.js +0 -6
- package/dist/transform/styles/index.js.map +0 -1
- package/dist/transform/styles/magazine.d.ts +0 -4
- package/dist/transform/styles/magazine.d.ts.map +0 -1
- package/dist/transform/styles/magazine.js +0 -15
- package/dist/transform/styles/magazine.js.map +0 -1
- package/dist/transform/styles/minimal.d.ts +0 -4
- package/dist/transform/styles/minimal.d.ts.map +0 -1
- package/dist/transform/styles/minimal.js +0 -15
- package/dist/transform/styles/minimal.js.map +0 -1
- package/dist/transform/styles/narrative.d.ts +0 -4
- package/dist/transform/styles/narrative.d.ts.map +0 -1
- package/dist/transform/styles/narrative.js +0 -15
- package/dist/transform/styles/narrative.js.map +0 -1
- package/dist/transform/templateSelector.d.ts +0 -30
- package/dist/transform/templateSelector.d.ts.map +0 -1
- package/dist/transform/templateSelector.js +0 -218
- package/dist/transform/templateSelector.js.map +0 -1
- package/dist/transform/timingAllocator.d.ts +0 -21
- package/dist/transform/timingAllocator.d.ts.map +0 -1
- package/dist/transform/timingAllocator.js +0 -111
- package/dist/transform/timingAllocator.js.map +0 -1
- package/dist/transform/types.d.ts +0 -86
- package/dist/transform/types.d.ts.map +0 -1
- package/dist/transform/types.js +0 -9
- package/dist/transform/types.js.map +0 -1
- package/dist/versions/DocumentVersionManager.d.ts +0 -31
- package/dist/versions/DocumentVersionManager.d.ts.map +0 -1
- package/dist/versions/DocumentVersionManager.js +0 -33
- package/dist/versions/DocumentVersionManager.js.map +0 -1
- package/dist/versions/index.d.ts.map +0 -1
- package/dist/versions/operations.d.ts +0 -44
- package/dist/versions/operations.d.ts.map +0 -1
- package/dist/versions/operations.js +0 -190
- package/dist/versions/operations.js.map +0 -1
- package/dist/versions/paths.d.ts +0 -29
- package/dist/versions/paths.d.ts.map +0 -1
- package/dist/versions/paths.js +0 -66
- package/dist/versions/paths.js.map +0 -1
- package/dist/versions/timestamp.d.ts +0 -22
- package/dist/versions/timestamp.d.ts.map +0 -1
- package/dist/versions/timestamp.js +0 -44
- package/dist/versions/timestamp.js.map +0 -1
- package/dist/versions/types.d.ts +0 -92
- package/dist/versions/types.d.ts.map +0 -1
- package/dist/versions/types.js +0 -11
- package/dist/versions/types.js.map +0 -1
|
@@ -0,0 +1,476 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown document validation.
|
|
3
|
+
*
|
|
4
|
+
* `validateMarkdownSource()` gives authors and agents fast, structural
|
|
5
|
+
* feedback on a squisq markdown document — the same checks the renderer
|
|
6
|
+
* applies, surfaced as diagnostics instead of degraded slides:
|
|
7
|
+
*
|
|
8
|
+
* - unknown template names (with a did-you-mean suggestion)
|
|
9
|
+
* - unknown drawing shapes, and shape annotations used outside a `{[drawing]}`
|
|
10
|
+
* - `{[…]}` text that was not recognized as an annotation (bad quoting,
|
|
11
|
+
* non-heading placement, unknown inline icon)
|
|
12
|
+
* - malformed heading-attribute values (`x=abc`, bad `startTime`) and
|
|
13
|
+
* non-numeric drawing-shape geometry
|
|
14
|
+
* - `connectsTo` / drawing `from`/`to` targets that don't resolve,
|
|
15
|
+
* duplicate block ids, unparseable data fences (reported by `markdownToDoc`)
|
|
16
|
+
* - image references missing from the provided asset set (.dbk contents)
|
|
17
|
+
*
|
|
18
|
+
* The CLI exposes this as `squisq validate <input>`; agents can also call
|
|
19
|
+
* it directly and iterate until the diagnostics list is empty.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import type { Doc, Block, DocDiagnostic } from '../schemas/Doc.js';
|
|
23
|
+
import type {
|
|
24
|
+
MarkdownDocument,
|
|
25
|
+
MarkdownHeading,
|
|
26
|
+
MarkdownNode,
|
|
27
|
+
HtmlNode,
|
|
28
|
+
} from '../markdown/types.js';
|
|
29
|
+
import { parseMarkdown } from '../markdown/parse.js';
|
|
30
|
+
import { getChildren, extractPlainText } from '../markdown/utils.js';
|
|
31
|
+
import { coerceAnnotationValues } from '../markdown/annotationCoercion.js';
|
|
32
|
+
import { markdownToDoc, flattenBlocks } from './markdownToDoc.js';
|
|
33
|
+
import {
|
|
34
|
+
templateRegistry,
|
|
35
|
+
TEMPLATE_ALIASES,
|
|
36
|
+
resolveTemplateName,
|
|
37
|
+
isShapeName,
|
|
38
|
+
normalizeShapeKind,
|
|
39
|
+
SHAPE_NAMES,
|
|
40
|
+
} from './templates/index.js';
|
|
41
|
+
|
|
42
|
+
// ============================================
|
|
43
|
+
// Options & result
|
|
44
|
+
// ============================================
|
|
45
|
+
|
|
46
|
+
export interface ValidateOptions {
|
|
47
|
+
/**
|
|
48
|
+
* Known asset paths for image/video reference checks — typically the
|
|
49
|
+
* file list of a .dbk container or the document's folder. Relative
|
|
50
|
+
* references not present here produce a `missing-asset` warning.
|
|
51
|
+
* When omitted, asset checks are skipped.
|
|
52
|
+
*/
|
|
53
|
+
assets?: ReadonlySet<string> | ((path: string) => boolean);
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Additional template names to accept beyond the built-in registry and
|
|
57
|
+
* the document's own `customTemplates` (e.g. app-registered templates).
|
|
58
|
+
*/
|
|
59
|
+
extraTemplates?: readonly string[];
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export interface MarkdownValidationResult {
|
|
63
|
+
/** All findings, in source order where line information exists. */
|
|
64
|
+
diagnostics: DocDiagnostic[];
|
|
65
|
+
errorCount: number;
|
|
66
|
+
warningCount: number;
|
|
67
|
+
/** The converted Doc (conversion diagnostics are included above). */
|
|
68
|
+
doc: Doc;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// ============================================
|
|
72
|
+
// Entry points
|
|
73
|
+
// ============================================
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Validate a squisq markdown source string. Parses, converts (collecting
|
|
77
|
+
* the conversion's own diagnostics), and runs the structural checks above.
|
|
78
|
+
*/
|
|
79
|
+
export function validateMarkdownSource(
|
|
80
|
+
source: string,
|
|
81
|
+
options?: ValidateOptions,
|
|
82
|
+
): MarkdownValidationResult {
|
|
83
|
+
return validateMarkdownDoc(parseMarkdown(source), options);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Validate an already-parsed MarkdownDocument. See {@link validateMarkdownSource}.
|
|
88
|
+
*/
|
|
89
|
+
export function validateMarkdownDoc(
|
|
90
|
+
markdownDoc: MarkdownDocument,
|
|
91
|
+
options?: ValidateOptions,
|
|
92
|
+
): MarkdownValidationResult {
|
|
93
|
+
const doc = markdownToDoc(markdownDoc);
|
|
94
|
+
const diagnostics: DocDiagnostic[] = [...(doc.diagnostics ?? [])];
|
|
95
|
+
const blocks = flattenBlocks(doc.blocks);
|
|
96
|
+
|
|
97
|
+
const knownTemplates = collectKnownTemplates(doc, options);
|
|
98
|
+
|
|
99
|
+
// Parent-aware walk: a `{[shape]}` annotation is only meaningful on the
|
|
100
|
+
// direct child of a `{[drawing]}` block, so the template check needs each
|
|
101
|
+
// block's parent. Drawing connectors are validated against their siblings.
|
|
102
|
+
const visit = (block: Block, parent: Block | undefined): void => {
|
|
103
|
+
checkTemplate(block, parent, knownTemplates, diagnostics);
|
|
104
|
+
checkAttributeCoercion(block, parent, diagnostics);
|
|
105
|
+
if (isDrawingBlock(block)) checkDrawingConnectors(block, diagnostics);
|
|
106
|
+
for (const child of block.children ?? []) visit(child, block);
|
|
107
|
+
};
|
|
108
|
+
for (const block of doc.blocks) visit(block, undefined);
|
|
109
|
+
|
|
110
|
+
checkUnrecognizedAnnotations(markdownDoc, diagnostics);
|
|
111
|
+
|
|
112
|
+
if (options?.assets) {
|
|
113
|
+
const hasAsset = normalizeAssetCheck(options.assets);
|
|
114
|
+
checkAssets(markdownDoc, blocks, hasAsset, diagnostics);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
diagnostics.sort(
|
|
118
|
+
(a, b) => (a.line ?? Number.MAX_SAFE_INTEGER) - (b.line ?? Number.MAX_SAFE_INTEGER),
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
return {
|
|
122
|
+
diagnostics,
|
|
123
|
+
errorCount: diagnostics.filter((d) => d.severity === 'error').length,
|
|
124
|
+
warningCount: diagnostics.filter((d) => d.severity === 'warning').length,
|
|
125
|
+
doc,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// ============================================
|
|
130
|
+
// Template checks
|
|
131
|
+
// ============================================
|
|
132
|
+
|
|
133
|
+
function collectKnownTemplates(doc: Doc, options?: ValidateOptions): Set<string> {
|
|
134
|
+
return new Set<string>([
|
|
135
|
+
...Object.keys(templateRegistry),
|
|
136
|
+
...Object.keys(TEMPLATE_ALIASES),
|
|
137
|
+
...(doc.customTemplates?.map((t) => t.name) ?? []),
|
|
138
|
+
...(options?.extraTemplates ?? []),
|
|
139
|
+
]);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/** True when `block` is a `{[drawing]}` container (after alias resolution). */
|
|
143
|
+
function isDrawingBlock(block: Block): boolean {
|
|
144
|
+
return resolveTemplateName(block.template ?? '') === 'drawing';
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function checkTemplate(
|
|
148
|
+
block: Block,
|
|
149
|
+
parent: Block | undefined,
|
|
150
|
+
known: Set<string>,
|
|
151
|
+
diagnostics: DocDiagnostic[],
|
|
152
|
+
): void {
|
|
153
|
+
const requested = block.sourceHeading?.templateAnnotation?.template;
|
|
154
|
+
if (!requested) return;
|
|
155
|
+
|
|
156
|
+
// Inside a drawing, the annotation names a shape primitive, not a template.
|
|
157
|
+
if (parent && isDrawingBlock(parent)) {
|
|
158
|
+
if (isShapeName(requested)) return;
|
|
159
|
+
const suggestion = nearestName(requested, new Set(SHAPE_NAMES));
|
|
160
|
+
diagnostics.push({
|
|
161
|
+
severity: 'warning',
|
|
162
|
+
code: 'unknown-shape',
|
|
163
|
+
message:
|
|
164
|
+
`Unknown shape "${requested}" in drawing — the child will be skipped` +
|
|
165
|
+
(suggestion ? `. Did you mean "${suggestion}"?` : ''),
|
|
166
|
+
blockId: block.id,
|
|
167
|
+
...lineOf(block),
|
|
168
|
+
});
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// A shape annotation outside a drawing has no parent to interpret it.
|
|
173
|
+
if (isShapeName(requested)) {
|
|
174
|
+
diagnostics.push({
|
|
175
|
+
severity: 'warning',
|
|
176
|
+
code: 'shape-outside-drawing',
|
|
177
|
+
message: `Shape "${requested}" is only recognized on a child heading of a {[drawing]} block`,
|
|
178
|
+
blockId: block.id,
|
|
179
|
+
...lineOf(block),
|
|
180
|
+
});
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
if (known.has(requested) || known.has(resolveTemplateName(requested))) return;
|
|
185
|
+
|
|
186
|
+
const suggestion = nearestName(requested, known);
|
|
187
|
+
diagnostics.push({
|
|
188
|
+
severity: 'warning',
|
|
189
|
+
code: 'unknown-template',
|
|
190
|
+
message:
|
|
191
|
+
`Unknown template "${requested}" — the block will render as a plain fallback card` +
|
|
192
|
+
(suggestion ? `. Did you mean "${suggestion}"?` : ''),
|
|
193
|
+
blockId: block.id,
|
|
194
|
+
...lineOf(block),
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/** Numeric geometry keys carried in a shape's `{[…]}` params. */
|
|
199
|
+
const NUMERIC_SHAPE_KEYS = ['x', 'y', 'width', 'height', 'w', 'h', 'strokeWidth', 'borderRadius'];
|
|
200
|
+
|
|
201
|
+
/** Re-run heading-attribute coercion to surface its warnings with context. */
|
|
202
|
+
function checkAttributeCoercion(
|
|
203
|
+
block: Block,
|
|
204
|
+
parent: Block | undefined,
|
|
205
|
+
diagnostics: DocDiagnostic[],
|
|
206
|
+
): void {
|
|
207
|
+
// Pandoc `{#id key=value}` params (x/y/connectsTo/startTime/duration).
|
|
208
|
+
const params = block.sourceHeading?.attributes?.params;
|
|
209
|
+
if (params) {
|
|
210
|
+
const { warnings } = coerceAnnotationValues(params);
|
|
211
|
+
for (const warning of warnings) {
|
|
212
|
+
diagnostics.push({
|
|
213
|
+
severity: 'warning',
|
|
214
|
+
code: 'invalid-attribute',
|
|
215
|
+
message: `Block "${block.id}": ${warning}`,
|
|
216
|
+
blockId: block.id,
|
|
217
|
+
...lineOf(block),
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// A drawing shape's geometry lives in its `{[shape …]}` params
|
|
223
|
+
// (templateOverrides), not the Pandoc block — validate those numerics too.
|
|
224
|
+
if (parent && isDrawingBlock(parent) && isShapeName(block.template)) {
|
|
225
|
+
const overrides = block.templateOverrides ?? {};
|
|
226
|
+
for (const key of NUMERIC_SHAPE_KEYS) {
|
|
227
|
+
const raw = overrides[key];
|
|
228
|
+
if (raw == null) continue;
|
|
229
|
+
const value = raw.replace(/,\s*$/, '').trim();
|
|
230
|
+
if (value !== '' && !Number.isFinite(Number(value))) {
|
|
231
|
+
diagnostics.push({
|
|
232
|
+
severity: 'warning',
|
|
233
|
+
code: 'invalid-attribute',
|
|
234
|
+
message: `Drawing shape "${block.id}": "${key}" is not a number (${JSON.stringify(raw)})`,
|
|
235
|
+
blockId: block.id,
|
|
236
|
+
...lineOf(block),
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* A drawing's `line`/`arrow` connectors reference sibling shapes by id via
|
|
245
|
+
* `from`/`to`; flag any that don't resolve (mirrors the `connectsTo`
|
|
246
|
+
* unresolved-connection check, but for the `{[…]}` param form).
|
|
247
|
+
*/
|
|
248
|
+
function checkDrawingConnectors(block: Block, diagnostics: DocDiagnostic[]): void {
|
|
249
|
+
const children = block.children ?? [];
|
|
250
|
+
const ids = new Set(children.map((c) => c.id));
|
|
251
|
+
for (const child of children) {
|
|
252
|
+
const kind = normalizeShapeKind(child.sourceHeading?.templateAnnotation?.template);
|
|
253
|
+
if (kind !== 'line' && kind !== 'arrow') continue;
|
|
254
|
+
const overrides = child.templateOverrides ?? {};
|
|
255
|
+
for (const key of ['from', 'to'] as const) {
|
|
256
|
+
const raw = overrides[key];
|
|
257
|
+
if (raw == null) continue;
|
|
258
|
+
const ref = raw.replace(/,\s*$/, '').trim();
|
|
259
|
+
if (ref && !ids.has(ref)) {
|
|
260
|
+
diagnostics.push({
|
|
261
|
+
severity: 'warning',
|
|
262
|
+
code: 'unresolved-connection',
|
|
263
|
+
message: `Drawing connector "${child.id}" references unknown ${key} "${ref}"`,
|
|
264
|
+
blockId: child.id,
|
|
265
|
+
...lineOf(child),
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// ============================================
|
|
273
|
+
// Unrecognized `{[…]}` text
|
|
274
|
+
// ============================================
|
|
275
|
+
|
|
276
|
+
const ANNOTATION_LIKE_RE = /\{\[/;
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Flag literal `{[` text that survived parsing. On a heading this usually
|
|
280
|
+
* means broken quoting; in body content it usually means the author
|
|
281
|
+
* expected list-item/paragraph annotations, which only headings support
|
|
282
|
+
* (or referenced an unknown inline icon).
|
|
283
|
+
*/
|
|
284
|
+
function checkUnrecognizedAnnotations(
|
|
285
|
+
markdownDoc: MarkdownDocument,
|
|
286
|
+
diagnostics: DocDiagnostic[],
|
|
287
|
+
): void {
|
|
288
|
+
const walk = (node: MarkdownNode, headingLine: number | undefined): void => {
|
|
289
|
+
if (node.type === 'heading') {
|
|
290
|
+
const heading = node as MarkdownHeading;
|
|
291
|
+
const text = extractPlainText(heading);
|
|
292
|
+
if (ANNOTATION_LIKE_RE.test(text)) {
|
|
293
|
+
diagnostics.push({
|
|
294
|
+
severity: 'warning',
|
|
295
|
+
code: 'unparsed-annotation',
|
|
296
|
+
message:
|
|
297
|
+
`Heading "${truncate(text)}" contains "{[…]}" text that was not recognized — ` +
|
|
298
|
+
`check the quoting, or whether the token is a known inline icon`,
|
|
299
|
+
...(heading.position ? { line: heading.position.start.line } : {}),
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
return; // heading inline children already covered by extractPlainText
|
|
303
|
+
}
|
|
304
|
+
if (node.type === 'text' && ANNOTATION_LIKE_RE.test(node.value)) {
|
|
305
|
+
diagnostics.push({
|
|
306
|
+
severity: 'warning',
|
|
307
|
+
code: 'unparsed-annotation',
|
|
308
|
+
message:
|
|
309
|
+
`Body text contains "{[…]}" — template annotations are only recognized on ` +
|
|
310
|
+
`headings (or the token is not a known inline icon)`,
|
|
311
|
+
...(node.position
|
|
312
|
+
? { line: node.position.start.line }
|
|
313
|
+
: headingLine != null
|
|
314
|
+
? { line: headingLine }
|
|
315
|
+
: {}),
|
|
316
|
+
});
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
if (node.type === 'code') return; // code blocks legitimately contain {[
|
|
320
|
+
for (const child of getChildren(node)) {
|
|
321
|
+
walk(child, headingLine);
|
|
322
|
+
}
|
|
323
|
+
};
|
|
324
|
+
|
|
325
|
+
for (const child of markdownDoc.children) {
|
|
326
|
+
walk(child, child.position?.start.line);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
// ============================================
|
|
331
|
+
// Asset checks
|
|
332
|
+
// ============================================
|
|
333
|
+
|
|
334
|
+
function normalizeAssetCheck(
|
|
335
|
+
assets: ReadonlySet<string> | ((path: string) => boolean),
|
|
336
|
+
): (path: string) => boolean {
|
|
337
|
+
if (typeof assets === 'function') return assets;
|
|
338
|
+
return (path: string) => assets.has(path) || assets.has(path.replace(/^\.\//, ''));
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
const URL_SCHEME_RE = /^[a-z][a-z0-9+.-]*:/i;
|
|
342
|
+
|
|
343
|
+
/** A reference that should resolve inside the bundle: relative, no scheme. */
|
|
344
|
+
function isBundleRelative(url: string): boolean {
|
|
345
|
+
return (
|
|
346
|
+
url.length > 0 && !URL_SCHEME_RE.test(url) && !url.startsWith('//') && !url.startsWith('#')
|
|
347
|
+
);
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/** Template param keys whose values reference media assets. */
|
|
351
|
+
const ASSET_PARAM_KEYS = ['src', 'imageSrc', 'videoSrc', 'poster', 'backgroundImage'];
|
|
352
|
+
|
|
353
|
+
function checkAssets(
|
|
354
|
+
markdownDoc: MarkdownDocument,
|
|
355
|
+
blocks: Block[],
|
|
356
|
+
hasAsset: (path: string) => boolean,
|
|
357
|
+
diagnostics: DocDiagnostic[],
|
|
358
|
+
): void {
|
|
359
|
+
const report = (url: string, line?: number, blockId?: string) => {
|
|
360
|
+
if (!isBundleRelative(url) || hasAsset(url)) return;
|
|
361
|
+
diagnostics.push({
|
|
362
|
+
severity: 'warning',
|
|
363
|
+
code: 'missing-asset',
|
|
364
|
+
message: `Referenced asset "${url}" was not found in the bundle`,
|
|
365
|
+
...(blockId ? { blockId } : {}),
|
|
366
|
+
...(line != null ? { line } : {}),
|
|
367
|
+
});
|
|
368
|
+
};
|
|
369
|
+
|
|
370
|
+
// Markdown image nodes + raw-HTML <img src>.
|
|
371
|
+
const walk = (node: MarkdownNode): void => {
|
|
372
|
+
if (node.type === 'image') {
|
|
373
|
+
report(node.url, node.position?.start.line);
|
|
374
|
+
}
|
|
375
|
+
if (node.type === 'htmlBlock' || node.type === 'htmlInline') {
|
|
376
|
+
walkHtmlImages(node.htmlChildren, (src) => report(src, node.position?.start.line));
|
|
377
|
+
}
|
|
378
|
+
for (const child of getChildren(node)) walk(child);
|
|
379
|
+
};
|
|
380
|
+
for (const child of markdownDoc.children) walk(child);
|
|
381
|
+
|
|
382
|
+
// Media references in template params / structured data.
|
|
383
|
+
for (const block of blocks) {
|
|
384
|
+
const sources: Array<Record<string, unknown> | undefined> = [
|
|
385
|
+
block.templateOverrides,
|
|
386
|
+
block.templateData,
|
|
387
|
+
];
|
|
388
|
+
for (const source of sources) {
|
|
389
|
+
if (!source) continue;
|
|
390
|
+
for (const key of ASSET_PARAM_KEYS) {
|
|
391
|
+
const value = source[key];
|
|
392
|
+
if (typeof value === 'string') {
|
|
393
|
+
report(value, block.sourceHeading?.position?.start.line, block.id);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
const images = source['images'];
|
|
397
|
+
const list =
|
|
398
|
+
typeof images === 'string'
|
|
399
|
+
? images.split(',').map((s) => s.trim())
|
|
400
|
+
: Array.isArray(images)
|
|
401
|
+
? images.filter((i): i is string => typeof i === 'string')
|
|
402
|
+
: [];
|
|
403
|
+
for (const img of list) {
|
|
404
|
+
report(img, block.sourceHeading?.position?.start.line, block.id);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
function walkHtmlImages(nodes: HtmlNode[], report: (src: string) => void): void {
|
|
411
|
+
for (const node of nodes) {
|
|
412
|
+
if (node.type !== 'htmlElement') continue;
|
|
413
|
+
if (node.tagName === 'img' && node.attributes.src) {
|
|
414
|
+
report(node.attributes.src);
|
|
415
|
+
}
|
|
416
|
+
walkHtmlImages(node.children, report);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
// ============================================
|
|
421
|
+
// Did-you-mean
|
|
422
|
+
// ============================================
|
|
423
|
+
|
|
424
|
+
/**
|
|
425
|
+
* Nearest known name by edit distance. Returns undefined when nothing is
|
|
426
|
+
* plausibly close (distance > 2 and > 40% of the input length).
|
|
427
|
+
*/
|
|
428
|
+
function nearestName(input: string, candidates: Set<string>): string | undefined {
|
|
429
|
+
let best: string | undefined;
|
|
430
|
+
let bestDist = Infinity;
|
|
431
|
+
const lower = input.toLowerCase();
|
|
432
|
+
for (const candidate of candidates) {
|
|
433
|
+
const dist = levenshtein(lower, candidate.toLowerCase());
|
|
434
|
+
if (dist < bestDist) {
|
|
435
|
+
bestDist = dist;
|
|
436
|
+
best = candidate;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
if (best && (bestDist <= 2 || bestDist <= Math.ceil(input.length * 0.4))) {
|
|
440
|
+
return resolveTemplateName(best);
|
|
441
|
+
}
|
|
442
|
+
return undefined;
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
function levenshtein(a: string, b: string): number {
|
|
446
|
+
if (a === b) return 0;
|
|
447
|
+
const m = a.length;
|
|
448
|
+
const n = b.length;
|
|
449
|
+
if (m === 0) return n;
|
|
450
|
+
if (n === 0) return m;
|
|
451
|
+
let prev = new Array<number>(n + 1);
|
|
452
|
+
let curr = new Array<number>(n + 1);
|
|
453
|
+
for (let j = 0; j <= n; j++) prev[j] = j;
|
|
454
|
+
for (let i = 1; i <= m; i++) {
|
|
455
|
+
curr[0] = i;
|
|
456
|
+
for (let j = 1; j <= n; j++) {
|
|
457
|
+
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
458
|
+
curr[j] = Math.min(prev[j] + 1, curr[j - 1] + 1, prev[j - 1] + cost);
|
|
459
|
+
}
|
|
460
|
+
[prev, curr] = [curr, prev];
|
|
461
|
+
}
|
|
462
|
+
return prev[n];
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
// ============================================
|
|
466
|
+
// Helpers
|
|
467
|
+
// ============================================
|
|
468
|
+
|
|
469
|
+
function lineOf(block: Block): { line: number } | Record<string, never> {
|
|
470
|
+
const line = block.sourceHeading?.position?.start.line;
|
|
471
|
+
return line != null ? { line } : {};
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
function truncate(text: string, max = 40): string {
|
|
475
|
+
return text.length <= max ? text : `${text.slice(0, max)}…`;
|
|
476
|
+
}
|
|
@@ -89,6 +89,13 @@ const DEFAULT_ACCENT_POSITIONS: AccentPosition[] = ['left-strip', 'right-strip',
|
|
|
89
89
|
/**
|
|
90
90
|
* Generate a slideshow `Doc` from text and optional images.
|
|
91
91
|
*
|
|
92
|
+
* @deprecated Prefer the transform pipeline: convert content with
|
|
93
|
+
* `markdownToDoc` (content-aware auto templates are on by default) and
|
|
94
|
+
* shape it with `applyTransform` from `@bendyline/squisq/transform` —
|
|
95
|
+
* one engine for text→slides, with styles, theme pairing, pacing, and a
|
|
96
|
+
* duration budget (`TransformStyleConfig.budget`). This standalone
|
|
97
|
+
* generator is kept for API stability but no longer gains features.
|
|
98
|
+
*
|
|
92
99
|
* ```ts
|
|
93
100
|
* const doc = generateSlideshow(articleText, myImages, {
|
|
94
101
|
* title: 'Mount Rainier',
|
package/src/icons/index.ts
CHANGED
|
@@ -16,3 +16,11 @@ export {
|
|
|
16
16
|
iconGlyph,
|
|
17
17
|
} from './resolve.js';
|
|
18
18
|
export type { IconSuggestion } from './resolve.js';
|
|
19
|
+
export {
|
|
20
|
+
iconMarker,
|
|
21
|
+
hasIconMarker,
|
|
22
|
+
stripIconMarkers,
|
|
23
|
+
splitIconMarkers,
|
|
24
|
+
iconClass,
|
|
25
|
+
} from './inlineIconMarker.js';
|
|
26
|
+
export type { IconTextRun } from './inlineIconMarker.js';
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inline-icon markers for template text.
|
|
3
|
+
*
|
|
4
|
+
* Slide templates flatten rich markdown body content into strings before
|
|
5
|
+
* rendering. Inline icons need to survive that flattening step, so we encode
|
|
6
|
+
* them as sentinel-delimited text markers and let `TextLayer` turn them back
|
|
7
|
+
* into FontAwesome glyphs when rendering.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { IconFamily } from './iconData.js';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Private-Use-Area sentinel that brackets an encoded icon.
|
|
14
|
+
* Kept as an escape sequence so the source remains valid TypeScript text.
|
|
15
|
+
*/
|
|
16
|
+
const SENTINEL = '\uE000';
|
|
17
|
+
|
|
18
|
+
/** Matches one encoded marker: `<sentinel><family>:<name><sentinel>`. */
|
|
19
|
+
const MARKER_RE = new RegExp(`${SENTINEL}([a-z]+):([a-zA-Z0-9-]+)${SENTINEL}`, 'g');
|
|
20
|
+
|
|
21
|
+
/** Encode a resolved icon (family + name) as an embeddable text marker. */
|
|
22
|
+
export function iconMarker(family: IconFamily, name: string): string {
|
|
23
|
+
return `${SENTINEL}${family}:${name}${SENTINEL}`;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** True when a string contains at least one encoded icon marker. */
|
|
27
|
+
export function hasIconMarker(value: string): boolean {
|
|
28
|
+
return value.includes(SENTINEL);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** Remove every icon marker, leaving a clean plain-text projection. */
|
|
32
|
+
export function stripIconMarkers(value: string): string {
|
|
33
|
+
return value.replace(MARKER_RE, '');
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** A run of a marker-bearing string: literal text or a resolved icon. */
|
|
37
|
+
export type IconTextRun =
|
|
38
|
+
| { type: 'text'; text: string }
|
|
39
|
+
| { type: 'icon'; family: IconFamily; name: string };
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Split a string into ordered text/icon runs. Text between markers is
|
|
43
|
+
* preserved verbatim, including whitespace; each marker becomes an icon run.
|
|
44
|
+
*/
|
|
45
|
+
export function splitIconMarkers(value: string): IconTextRun[] {
|
|
46
|
+
const runs: IconTextRun[] = [];
|
|
47
|
+
let lastIndex = 0;
|
|
48
|
+
MARKER_RE.lastIndex = 0;
|
|
49
|
+
|
|
50
|
+
let match: RegExpExecArray | null;
|
|
51
|
+
while ((match = MARKER_RE.exec(value)) !== null) {
|
|
52
|
+
if (match.index > lastIndex) {
|
|
53
|
+
runs.push({ type: 'text', text: value.slice(lastIndex, match.index) });
|
|
54
|
+
}
|
|
55
|
+
runs.push({
|
|
56
|
+
type: 'icon',
|
|
57
|
+
family: match[1] as IconFamily,
|
|
58
|
+
name: match[2],
|
|
59
|
+
});
|
|
60
|
+
lastIndex = match.index + match[0].length;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (lastIndex < value.length) {
|
|
64
|
+
runs.push({ type: 'text', text: value.slice(lastIndex) });
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return runs;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** FontAwesome CSS class for a resolved icon, e.g. `fa-solid fa-rocket`. */
|
|
71
|
+
export function iconClass(family: IconFamily, name: string): string {
|
|
72
|
+
return `fa-${family} fa-${name}`;
|
|
73
|
+
}
|
package/src/imageEdit/export.ts
CHANGED
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
|
|
16
16
|
import type { ContentContainer } from '../storage/ContentContainer.js';
|
|
17
17
|
import type { ImageEditCanvas, ImageEditDoc, ImageEditLayer } from '../schemas/ImageEditDoc.js';
|
|
18
|
-
import type { Position } from '../schemas/Doc.js';
|
|
18
|
+
import type { MarkerStyle, Position } from '../schemas/Doc.js';
|
|
19
|
+
import { markerPath, shapePath } from '../doc/utils/shapeGeometry.js';
|
|
19
20
|
|
|
20
21
|
/** Supported export formats. */
|
|
21
22
|
export type ImageEditExportFormat = 'png' | 'jpeg' | 'webp';
|
|
@@ -78,7 +79,15 @@ export async function exportImageEditDoc(
|
|
|
78
79
|
// SVG construction
|
|
79
80
|
// ============================================
|
|
80
81
|
|
|
81
|
-
|
|
82
|
+
/**
|
|
83
|
+
* Build the standalone SVG string that mirrors the canvas + layers. Exposed
|
|
84
|
+
* for tests (the raster step needs a browser); shape/text/path layers don't
|
|
85
|
+
* touch `container`, only image layers do (to inline asset bytes).
|
|
86
|
+
*/
|
|
87
|
+
export async function buildSvgString(
|
|
88
|
+
doc: ImageEditDoc,
|
|
89
|
+
container: ContentContainer,
|
|
90
|
+
): Promise<string> {
|
|
82
91
|
const { width, height, background } = doc.canvas;
|
|
83
92
|
const bgRect =
|
|
84
93
|
background && background !== 'transparent'
|
|
@@ -145,6 +154,10 @@ async function renderLayerInner(
|
|
|
145
154
|
return `<line x1="${x}" y1="${y}" x2="${x + w}" y2="${y + h}"${stroke}${strokeWidth}/>`;
|
|
146
155
|
}
|
|
147
156
|
|
|
157
|
+
if (layer.type === 'path') {
|
|
158
|
+
return renderPathToSvg(layer, x, y, w, h);
|
|
159
|
+
}
|
|
160
|
+
|
|
148
161
|
// text
|
|
149
162
|
const c = layer.content;
|
|
150
163
|
const style = c.style;
|
|
@@ -169,6 +182,76 @@ async function renderLayerInner(
|
|
|
169
182
|
);
|
|
170
183
|
}
|
|
171
184
|
|
|
185
|
+
/**
|
|
186
|
+
* Serialize a `path` layer to SVG. Mirrors the runtime
|
|
187
|
+
* `react/src/layers/PathLayer.tsx`: when `shapeKind` is set, `d` is
|
|
188
|
+
* re-derived from the position box via `shapePath` (so named shapes scale);
|
|
189
|
+
* otherwise the stored absolute `d` is used. Start/end markers are emitted
|
|
190
|
+
* as `<marker>` defs scoped to the layer id, matching `markerPath` geometry.
|
|
191
|
+
*/
|
|
192
|
+
function renderPathToSvg(
|
|
193
|
+
layer: ImageEditLayer & { type: 'path' },
|
|
194
|
+
x: number,
|
|
195
|
+
y: number,
|
|
196
|
+
w: number,
|
|
197
|
+
h: number,
|
|
198
|
+
): string {
|
|
199
|
+
const c = layer.content;
|
|
200
|
+
const d = c.shapeKind ? (shapePath(c.shapeKind, x, y, w, h) ?? c.d) : c.d;
|
|
201
|
+
const stroke = c.stroke ?? '#1e293b';
|
|
202
|
+
const strokeWidth = c.strokeWidth ?? 2;
|
|
203
|
+
const fill = c.fill ?? 'none';
|
|
204
|
+
const dash = c.dasharray ? ` stroke-dasharray="${escapeAttr(c.dasharray)}"` : '';
|
|
205
|
+
|
|
206
|
+
// Markers: explicit start/end win; otherwise derive from the legacy `arrow` flag.
|
|
207
|
+
const startStyle = effectiveExportMarker(c.startMarker, c.arrow, 'start');
|
|
208
|
+
const endStyle = effectiveExportMarker(c.endMarker, c.arrow, 'end');
|
|
209
|
+
const start = markerPath(startStyle, 'start');
|
|
210
|
+
const end = markerPath(endStyle, 'end');
|
|
211
|
+
const startId = `marker-start-${layer.id}`;
|
|
212
|
+
const endId = `marker-end-${layer.id}`;
|
|
213
|
+
const defs =
|
|
214
|
+
start || end
|
|
215
|
+
? `<defs>${start ? markerDefSvg(startId, 'start', start, stroke) : ''}${
|
|
216
|
+
end ? markerDefSvg(endId, 'end', end, stroke) : ''
|
|
217
|
+
}</defs>`
|
|
218
|
+
: '';
|
|
219
|
+
const markerStart = start ? ` marker-start="url(#${startId})"` : '';
|
|
220
|
+
const markerEnd = end ? ` marker-end="url(#${endId})"` : '';
|
|
221
|
+
|
|
222
|
+
return (
|
|
223
|
+
defs +
|
|
224
|
+
`<path d="${escapeAttr(d)}" fill="${escapeAttr(fill)}"` +
|
|
225
|
+
` stroke="${escapeAttr(stroke)}" stroke-width="${strokeWidth}"${dash}${markerStart}${markerEnd}/>`
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
function effectiveExportMarker(
|
|
230
|
+
explicit: MarkerStyle | undefined,
|
|
231
|
+
arrow: (ImageEditLayer & { type: 'path' })['content']['arrow'],
|
|
232
|
+
end: 'start' | 'end',
|
|
233
|
+
): MarkerStyle {
|
|
234
|
+
if (explicit) return explicit;
|
|
235
|
+
return arrow === 'both' || arrow === end ? 'arrow' : 'none';
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
function markerDefSvg(
|
|
239
|
+
id: string,
|
|
240
|
+
dir: 'start' | 'end',
|
|
241
|
+
marker: { d: string; filled: boolean },
|
|
242
|
+
stroke: string,
|
|
243
|
+
): string {
|
|
244
|
+
const refX = dir === 'end' ? 9 : 1;
|
|
245
|
+
const paint = marker.filled
|
|
246
|
+
? `fill="${escapeAttr(stroke)}"`
|
|
247
|
+
: `fill="none" stroke="${escapeAttr(stroke)}" stroke-width="1.5"`;
|
|
248
|
+
return (
|
|
249
|
+
`<marker id="${escapeAttr(id)}" viewBox="0 0 10 10" refX="${refX}" refY="5"` +
|
|
250
|
+
` markerWidth="4" markerHeight="4" orient="auto-start-reverse" markerUnits="strokeWidth">` +
|
|
251
|
+
`<path d="${escapeAttr(marker.d)}" ${paint}/></marker>`
|
|
252
|
+
);
|
|
253
|
+
}
|
|
254
|
+
|
|
172
255
|
function preserveAspectRatioFor(fit?: 'cover' | 'contain' | 'fill'): string {
|
|
173
256
|
if (fit === 'cover') return 'xMidYMid slice';
|
|
174
257
|
if (fit === 'fill') return 'none';
|