@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
|
@@ -59,4 +59,55 @@ function assertImageEditDoc(value: unknown, filename: string): asserts value is
|
|
|
59
59
|
if (!Array.isArray(v.layers)) {
|
|
60
60
|
throw new Error(`readImageEditDoc: ${filename} layers must be an array`);
|
|
61
61
|
}
|
|
62
|
+
v.layers.forEach((layer, i) => assertLayer(layer, i, filename));
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const VALID_LAYER_TYPES = new Set(['image', 'text', 'shape', 'path']);
|
|
66
|
+
|
|
67
|
+
function assertLayer(value: unknown, index: number, filename: string): void {
|
|
68
|
+
const ctx = `${filename} layers[${index}]`;
|
|
69
|
+
if (!value || typeof value !== 'object') {
|
|
70
|
+
throw new Error(`readImageEditDoc: ${ctx} must be an object`);
|
|
71
|
+
}
|
|
72
|
+
const layer = value as Record<string, unknown>;
|
|
73
|
+
|
|
74
|
+
if (typeof layer['id'] !== 'string') {
|
|
75
|
+
throw new Error(`readImageEditDoc: ${ctx} must have a string id`);
|
|
76
|
+
}
|
|
77
|
+
if (typeof layer['type'] !== 'string' || !VALID_LAYER_TYPES.has(layer['type'])) {
|
|
78
|
+
throw new Error(
|
|
79
|
+
`readImageEditDoc: ${ctx} type must be one of image|text|shape, got ${String(layer['type'])}`,
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const pos = layer['position'];
|
|
84
|
+
if (
|
|
85
|
+
!pos ||
|
|
86
|
+
typeof pos !== 'object' ||
|
|
87
|
+
(typeof (pos as Record<string, unknown>)['x'] !== 'number' &&
|
|
88
|
+
typeof (pos as Record<string, unknown>)['x'] !== 'string') ||
|
|
89
|
+
(typeof (pos as Record<string, unknown>)['y'] !== 'number' &&
|
|
90
|
+
typeof (pos as Record<string, unknown>)['y'] !== 'string')
|
|
91
|
+
) {
|
|
92
|
+
throw new Error(`readImageEditDoc: ${ctx} position must have numeric or string x and y`);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const content = layer['content'];
|
|
96
|
+
if (!content || typeof content !== 'object') {
|
|
97
|
+
throw new Error(`readImageEditDoc: ${ctx} content must be an object`);
|
|
98
|
+
}
|
|
99
|
+
const c = content as Record<string, unknown>;
|
|
100
|
+
|
|
101
|
+
if (layer['type'] === 'image' && typeof c['src'] !== 'string') {
|
|
102
|
+
throw new Error(`readImageEditDoc: ${ctx} (image) content.src must be a string`);
|
|
103
|
+
}
|
|
104
|
+
if (layer['type'] === 'text' && typeof c['text'] !== 'string') {
|
|
105
|
+
throw new Error(`readImageEditDoc: ${ctx} (text) content.text must be a string`);
|
|
106
|
+
}
|
|
107
|
+
if (layer['type'] === 'shape' && typeof c['shape'] !== 'string') {
|
|
108
|
+
throw new Error(`readImageEditDoc: ${ctx} (shape) content.shape must be a string`);
|
|
109
|
+
}
|
|
110
|
+
if (layer['type'] === 'path' && typeof c['d'] !== 'string') {
|
|
111
|
+
throw new Error(`readImageEditDoc: ${ctx} (path) content.d must be a string`);
|
|
112
|
+
}
|
|
62
113
|
}
|
package/src/index.ts
CHANGED
|
@@ -6,7 +6,9 @@ export * from './markdown/index.js';
|
|
|
6
6
|
export * from './timing/index.js';
|
|
7
7
|
export * from './random/index.js';
|
|
8
8
|
export * from './generate/index.js';
|
|
9
|
+
export * from './transform/index.js';
|
|
9
10
|
export * from './versions/index.js';
|
|
10
11
|
export * from './jsonForm/index.js';
|
|
11
12
|
export * from './imageEdit/index.js';
|
|
13
|
+
export * from './icons/index.js';
|
|
12
14
|
export * from './recommend/index.js';
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Heading-attribute value coercion.
|
|
3
|
+
*
|
|
4
|
+
* The Pandoc-style heading attribute block `{#id .class key=value}` parses
|
|
5
|
+
* to a flat `Record<string, string>` of `key → raw value`. This module
|
|
6
|
+
* coerces a known subset of keys to typed values (numbers, time-in-seconds,
|
|
7
|
+
* `BlockConnection[]`) so downstream consumers don't have to re-parse them.
|
|
8
|
+
*
|
|
9
|
+
* Unknown keys are returned in `metadata` as raw strings. Malformed known-key
|
|
10
|
+
* values are dropped from the typed result and reported via `warnings` (the
|
|
11
|
+
* raw string is preserved in `params` upstream for lossless round-tripping —
|
|
12
|
+
* coercion failures do not corrupt the source).
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import type { BlockConnection } from './types.js';
|
|
16
|
+
import type { TransitionDirection, TransitionType } from '../schemas/Transitions.js';
|
|
17
|
+
import {
|
|
18
|
+
normalizeTransitionDirection,
|
|
19
|
+
normalizeTransitionType,
|
|
20
|
+
TRANSITION_TYPES,
|
|
21
|
+
TRANSITION_DIRECTIONS,
|
|
22
|
+
} from '../schemas/Transitions.js';
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Registry of known block-meta keys and their coercion strategies.
|
|
26
|
+
*
|
|
27
|
+
* Adding a new typed key: add an entry here, add the typed field to
|
|
28
|
+
* `HeadingAttributes.blockMeta` in `types.ts`, and apply the coerced value
|
|
29
|
+
* in `markdownToDoc.ts`.
|
|
30
|
+
*/
|
|
31
|
+
export const KNOWN_BLOCK_META_KEYS = {
|
|
32
|
+
x: 'number',
|
|
33
|
+
y: 'number',
|
|
34
|
+
startTime: 'time',
|
|
35
|
+
duration: 'time',
|
|
36
|
+
connectsTo: 'connectionList',
|
|
37
|
+
transition: 'transition',
|
|
38
|
+
transitionDuration: 'time',
|
|
39
|
+
transitionDirection: 'transitionDirection',
|
|
40
|
+
} as const;
|
|
41
|
+
|
|
42
|
+
export type KnownBlockMetaKey = keyof typeof KNOWN_BLOCK_META_KEYS;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Editor-facing description of a known block-meta key: what it does, and
|
|
46
|
+
* either its closed set of valid values or a free-form format hint. This is
|
|
47
|
+
* the single source the markdown editor's `{[name key=value]}` attribute
|
|
48
|
+
* autocomplete reads from, so the suggestion list stays in lockstep with
|
|
49
|
+
* `KNOWN_BLOCK_META_KEYS` and the transition vocabulary rather than drifting
|
|
50
|
+
* in a hand-maintained copy. `values`/`valueHint` are mutually exclusive: a
|
|
51
|
+
* key has a closed enum (`values`) or a format hint (`valueHint`), not both.
|
|
52
|
+
*/
|
|
53
|
+
export interface BlockMetaKeyDescriptor {
|
|
54
|
+
key: KnownBlockMetaKey;
|
|
55
|
+
/** One-line description, shown as the completion item's detail. */
|
|
56
|
+
description: string;
|
|
57
|
+
/** Closed set of valid values, for keys backed by an enum. */
|
|
58
|
+
values?: readonly string[];
|
|
59
|
+
/** Format hint shown when the value is free-form (no closed set). */
|
|
60
|
+
valueHint?: string;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Ordered descriptors for every key in `KNOWN_BLOCK_META_KEYS`. Order is the
|
|
65
|
+
* suggestion display order: the transition family first (the most common
|
|
66
|
+
* authoring case), then timeline timing, then diagram geometry/links.
|
|
67
|
+
*/
|
|
68
|
+
export const BLOCK_META_KEY_DESCRIPTORS: readonly BlockMetaKeyDescriptor[] = [
|
|
69
|
+
{
|
|
70
|
+
key: 'transition',
|
|
71
|
+
description: 'Block-to-block transition effect',
|
|
72
|
+
values: TRANSITION_TYPES,
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
key: 'transitionDuration',
|
|
76
|
+
description: 'How long the transition lasts',
|
|
77
|
+
valueHint: 'seconds — e.g. 0.7, 700ms',
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
key: 'transitionDirection',
|
|
81
|
+
description: 'Directional variant for the transition',
|
|
82
|
+
values: TRANSITION_DIRECTIONS,
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
key: 'startTime',
|
|
86
|
+
description: 'Timeline start time of this block',
|
|
87
|
+
valueHint: 'mm:ss or seconds — e.g. 01:30, 5, 1500ms',
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
key: 'duration',
|
|
91
|
+
description: 'How long this block lasts',
|
|
92
|
+
valueHint: 'mm:ss or seconds — e.g. 45, 1500ms',
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
key: 'x',
|
|
96
|
+
description: 'Horizontal position on the diagram canvas',
|
|
97
|
+
valueHint: 'number — e.g. 600',
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
key: 'y',
|
|
101
|
+
description: 'Vertical position on the diagram canvas',
|
|
102
|
+
valueHint: 'number — e.g. 300',
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
key: 'connectsTo',
|
|
106
|
+
description: 'Diagram connections to other blocks',
|
|
107
|
+
valueHint: 'comma-separated target or target:type — e.g. foo,bar:flow',
|
|
108
|
+
},
|
|
109
|
+
];
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* The shape of the typed values produced by coercion. Mirrors
|
|
113
|
+
* `HeadingAttributes.blockMeta` in `types.ts`.
|
|
114
|
+
*/
|
|
115
|
+
export interface CoercedBlockMeta {
|
|
116
|
+
x?: number;
|
|
117
|
+
y?: number;
|
|
118
|
+
startTime?: number;
|
|
119
|
+
duration?: number;
|
|
120
|
+
connectsTo?: BlockConnection[];
|
|
121
|
+
transition?: {
|
|
122
|
+
type: TransitionType;
|
|
123
|
+
duration?: number;
|
|
124
|
+
direction?: TransitionDirection;
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export interface CoerceResult {
|
|
129
|
+
/** Typed values for known keys whose coercion succeeded. */
|
|
130
|
+
blockMeta: CoercedBlockMeta;
|
|
131
|
+
/** Raw string values for keys not in the known-key registry. */
|
|
132
|
+
metadata: Record<string, string>;
|
|
133
|
+
/** Human-readable diagnostics — currently emitted for coercion failures. */
|
|
134
|
+
warnings: string[];
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Coerce a flat `key → raw string` map into typed block-meta + an
|
|
139
|
+
* untyped metadata bag, per the `KNOWN_BLOCK_META_KEYS` registry.
|
|
140
|
+
*/
|
|
141
|
+
export function coerceAnnotationValues(params: Record<string, string>): CoerceResult {
|
|
142
|
+
const blockMeta: CoercedBlockMeta = {};
|
|
143
|
+
const metadata: Record<string, string> = {};
|
|
144
|
+
const warnings: string[] = [];
|
|
145
|
+
let transitionType: TransitionType | null = null;
|
|
146
|
+
let transitionDuration: number | undefined;
|
|
147
|
+
let transitionDirection: TransitionDirection | undefined;
|
|
148
|
+
|
|
149
|
+
for (const [key, raw] of Object.entries(params)) {
|
|
150
|
+
const kind = (KNOWN_BLOCK_META_KEYS as Record<string, string>)[key];
|
|
151
|
+
if (!kind) {
|
|
152
|
+
metadata[key] = raw;
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
if (kind === 'number') {
|
|
156
|
+
const n = parseNumber(raw);
|
|
157
|
+
if (n == null) {
|
|
158
|
+
warnings.push(`Invalid number for "${key}": ${JSON.stringify(raw)}`);
|
|
159
|
+
} else {
|
|
160
|
+
(blockMeta as Record<string, unknown>)[key] = n;
|
|
161
|
+
}
|
|
162
|
+
} else if (kind === 'time') {
|
|
163
|
+
const s = parseTimeSeconds(raw);
|
|
164
|
+
if (s == null) {
|
|
165
|
+
warnings.push(`Invalid time for "${key}": ${JSON.stringify(raw)}`);
|
|
166
|
+
} else if (key === 'transitionDuration') {
|
|
167
|
+
transitionDuration = s;
|
|
168
|
+
} else {
|
|
169
|
+
(blockMeta as Record<string, unknown>)[key] = s;
|
|
170
|
+
}
|
|
171
|
+
} else if (kind === 'connectionList') {
|
|
172
|
+
const { list, warning } = parseConnectionList(raw);
|
|
173
|
+
if (warning) warnings.push(`"${key}": ${warning}`);
|
|
174
|
+
blockMeta.connectsTo = list;
|
|
175
|
+
} else if (kind === 'transition') {
|
|
176
|
+
const transition = normalizeTransitionType(raw);
|
|
177
|
+
if (transition == null) {
|
|
178
|
+
warnings.push(`Invalid transition for "${key}": ${JSON.stringify(raw)}`);
|
|
179
|
+
} else {
|
|
180
|
+
transitionType = transition;
|
|
181
|
+
}
|
|
182
|
+
} else if (kind === 'transitionDirection') {
|
|
183
|
+
const direction = normalizeTransitionDirection(raw);
|
|
184
|
+
if (direction == null) {
|
|
185
|
+
warnings.push(`Invalid transition direction for "${key}": ${JSON.stringify(raw)}`);
|
|
186
|
+
} else {
|
|
187
|
+
transitionDirection = direction;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
if (transitionType) {
|
|
193
|
+
blockMeta.transition = {
|
|
194
|
+
type: transitionType,
|
|
195
|
+
...(transitionDuration !== undefined ? { duration: transitionDuration } : {}),
|
|
196
|
+
...(transitionDirection !== undefined ? { direction: transitionDirection } : {}),
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return { blockMeta, metadata, warnings };
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// ============================================
|
|
204
|
+
// Coercers
|
|
205
|
+
// ============================================
|
|
206
|
+
|
|
207
|
+
/** Parse a finite number from a string. Returns null on failure. */
|
|
208
|
+
function parseNumber(raw: string): number | null {
|
|
209
|
+
if (raw.trim() === '') return null;
|
|
210
|
+
const n = Number(raw);
|
|
211
|
+
return Number.isFinite(n) ? n : null;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
const TIME_BARE_RE = /^\d+(?:\.\d+)?$/;
|
|
215
|
+
const TIME_MS_RE = /^(\d+(?:\.\d+)?)ms$/;
|
|
216
|
+
const TIME_MMSS_RE = /^(\d+):(\d{1,2})(?:\.(\d+))?$/;
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Parse a time value to seconds. Accepts:
|
|
220
|
+
* - bare number: `5` → 5, `5.5` → 5.5
|
|
221
|
+
* - `mm:ss`: `01:30` → 90
|
|
222
|
+
* - `mm:ss.ms`: `01:30.500` → 90.5
|
|
223
|
+
* - `1500ms` → 1.5
|
|
224
|
+
*
|
|
225
|
+
* Returns null on malformed input.
|
|
226
|
+
*/
|
|
227
|
+
export function parseTimeSeconds(raw: string): number | null {
|
|
228
|
+
const trimmed = raw.trim();
|
|
229
|
+
if (!trimmed) return null;
|
|
230
|
+
|
|
231
|
+
if (TIME_BARE_RE.test(trimmed)) {
|
|
232
|
+
const n = Number(trimmed);
|
|
233
|
+
return Number.isFinite(n) ? n : null;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
const msMatch = trimmed.match(TIME_MS_RE);
|
|
237
|
+
if (msMatch) {
|
|
238
|
+
const n = Number(msMatch[1]);
|
|
239
|
+
return Number.isFinite(n) ? n / 1000 : null;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
const mmssMatch = trimmed.match(TIME_MMSS_RE);
|
|
243
|
+
if (mmssMatch) {
|
|
244
|
+
const mins = Number(mmssMatch[1]);
|
|
245
|
+
const secs = Number(mmssMatch[2]);
|
|
246
|
+
const frac = mmssMatch[3] ? Number(`0.${mmssMatch[3]}`) : 0;
|
|
247
|
+
if (!Number.isFinite(mins) || !Number.isFinite(secs) || !Number.isFinite(frac)) {
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
250
|
+
if (secs >= 60) return null;
|
|
251
|
+
return mins * 60 + secs + frac;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
return null;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Parse a comma-separated connection list. Each entry is `target` or
|
|
259
|
+
* `target:type`. Empty entries (`a,,b`) are filtered with a warning; an
|
|
260
|
+
* entirely empty input yields an empty list with no warning.
|
|
261
|
+
*/
|
|
262
|
+
export function parseConnectionList(raw: string): {
|
|
263
|
+
list: BlockConnection[];
|
|
264
|
+
warning: string | null;
|
|
265
|
+
} {
|
|
266
|
+
const trimmed = raw.trim();
|
|
267
|
+
if (!trimmed) return { list: [], warning: null };
|
|
268
|
+
|
|
269
|
+
const list: BlockConnection[] = [];
|
|
270
|
+
let droppedEmpty = false;
|
|
271
|
+
for (const part of trimmed.split(',')) {
|
|
272
|
+
const entry = part.trim();
|
|
273
|
+
if (!entry) {
|
|
274
|
+
droppedEmpty = true;
|
|
275
|
+
continue;
|
|
276
|
+
}
|
|
277
|
+
const colonIdx = entry.indexOf(':');
|
|
278
|
+
if (colonIdx < 0) {
|
|
279
|
+
list.push({ target: entry });
|
|
280
|
+
} else {
|
|
281
|
+
const target = entry.slice(0, colonIdx).trim();
|
|
282
|
+
const type = entry.slice(colonIdx + 1).trim();
|
|
283
|
+
if (!target) {
|
|
284
|
+
droppedEmpty = true;
|
|
285
|
+
continue;
|
|
286
|
+
}
|
|
287
|
+
list.push(type ? { target, type } : { target });
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
return {
|
|
292
|
+
list,
|
|
293
|
+
warning: droppedEmpty ? 'dropped empty connection entries' : null,
|
|
294
|
+
};
|
|
295
|
+
}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared key=value attribute machinery for the two heading annotation forms:
|
|
3
|
+
* the squisq-native `{[templateName key=value …]}` template annotation and
|
|
4
|
+
* the Pandoc-style `{#id .class key=value}` attribute block.
|
|
5
|
+
*
|
|
6
|
+
* Both forms share one interior grammar — whitespace-separated tokens whose
|
|
7
|
+
* values may be quoted (double or single) to include spaces, brackets, or
|
|
8
|
+
* quote characters. This module is the single implementation of that
|
|
9
|
+
* grammar: one tokenizer, one value un/escaper, one quoting rule. The
|
|
10
|
+
* trailing-annotation recognizers live here too so the editor bridge
|
|
11
|
+
* (packages/editor-react/src/tiptapBridge.ts) stays in sync by importing
|
|
12
|
+
* them rather than copying regexes.
|
|
13
|
+
*
|
|
14
|
+
* Value syntax:
|
|
15
|
+
* - Unquoted: no whitespace, quotes, or `[ ] { }` (those would collide with
|
|
16
|
+
* the surrounding annotation delimiters), e.g. `columns=3`, `name=O'Brien`
|
|
17
|
+
* (a quote *inside* an unquoted value is literal).
|
|
18
|
+
* - Quoted: `key="value with spaces"` or `key='…'`. Inside a quoted run,
|
|
19
|
+
* `\` escapes the active quote character and itself; any other `\` is
|
|
20
|
+
* literal. Quoted values may contain `]` and `}`.
|
|
21
|
+
* - Serialization emits double quotes, switching to single quotes when the
|
|
22
|
+
* value contains a double quote (markdown character-escape resolution
|
|
23
|
+
* makes backslash-escaped quotes fragile in `.md` source, so picking the
|
|
24
|
+
* other quote character is preferred over escaping). A value containing
|
|
25
|
+
* BOTH quote characters falls back to double quotes with `\"` escapes —
|
|
26
|
+
* that survives the API path but is best avoided in markdown source.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
// ============================================
|
|
30
|
+
// Trailing-annotation recognizers
|
|
31
|
+
// ============================================
|
|
32
|
+
|
|
33
|
+
/** Regex source for a double-quoted run with `\"` / `\\` escapes. */
|
|
34
|
+
const DQ_RUN = `"(?:[^"\\\\]|\\\\.)*"`;
|
|
35
|
+
/** Regex source for a single-quoted run with `\'` / `\\` escapes. */
|
|
36
|
+
const SQ_RUN = `'(?:[^'\\\\]|\\\\.)*'`;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Quote-aware match for a trailing `{[…]}` annotation: the interior is any
|
|
40
|
+
* mix of quoted runs and characters other than `]` and quotes, so quoted
|
|
41
|
+
* values may contain `]`. The trailing `[\s\]}]*` tolerates an accidental
|
|
42
|
+
* doubled `]}` that users sometimes type when learning the syntax.
|
|
43
|
+
*/
|
|
44
|
+
const TEMPLATE_STRICT_RE = new RegExp(
|
|
45
|
+
`\\s*\\{\\[((?:[^\\]"']|${DQ_RUN}|${SQ_RUN})+)\\]\\}[\\s\\]}]*$`,
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Legacy fallback matching the pre-quote-aware grammar (`[^\]]+` interior).
|
|
50
|
+
* Tried after the strict form so inputs with unbalanced quotes keep parsing
|
|
51
|
+
* exactly as they did before quote support landed.
|
|
52
|
+
*/
|
|
53
|
+
const TEMPLATE_LEGACY_RE = /\s*\{\[([^\]]+)\]\}[\s\]}]*$/;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Quote-aware match for a trailing Pandoc `{…}` block. The negative
|
|
57
|
+
* lookahead `(?!\[)` keeps it from colliding with the `{[…]}` template
|
|
58
|
+
* form. Quoted values may contain `}`.
|
|
59
|
+
*/
|
|
60
|
+
const PANDOC_STRICT_RE = new RegExp(`\\s*\\{(?!\\[)((?:[^}"']|${DQ_RUN}|${SQ_RUN})*)\\}\\s*$`);
|
|
61
|
+
|
|
62
|
+
/** Legacy fallback for the Pandoc block (`[^}]*` interior). */
|
|
63
|
+
const PANDOC_LEGACY_RE = /\s*\{(?!\[)([^}]*)\}\s*$/;
|
|
64
|
+
|
|
65
|
+
/** Result of matching a trailing annotation against a text run. */
|
|
66
|
+
export interface TrailingAnnotationMatch {
|
|
67
|
+
/** Interior of the brace block (between `{[`/`{` and `]}`/`}`), untrimmed. */
|
|
68
|
+
inner: string;
|
|
69
|
+
/** Offset of the match start (including leading whitespace) in the input. */
|
|
70
|
+
index: number;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function matchTrailing(
|
|
74
|
+
text: string,
|
|
75
|
+
strict: RegExp,
|
|
76
|
+
legacy: RegExp,
|
|
77
|
+
): TrailingAnnotationMatch | null {
|
|
78
|
+
const m = strict.exec(text) ?? legacy.exec(text);
|
|
79
|
+
return m ? { inner: m[1], index: m.index } : null;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Match a trailing `{[templateName key=value …]}` annotation. Quote-aware
|
|
84
|
+
* (values may contain `]` when quoted), with a legacy fallback so inputs
|
|
85
|
+
* the old `[^\]]+` grammar accepted still match.
|
|
86
|
+
*/
|
|
87
|
+
export function matchTrailingTemplateAnnotation(text: string): TrailingAnnotationMatch | null {
|
|
88
|
+
return matchTrailing(text, TEMPLATE_STRICT_RE, TEMPLATE_LEGACY_RE);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Match a trailing Pandoc `{#id .class key=value}` block. Quote-aware
|
|
93
|
+
* (values may contain `}` when quoted), with a legacy fallback.
|
|
94
|
+
*/
|
|
95
|
+
export function matchTrailingPandocAttr(text: string): TrailingAnnotationMatch | null {
|
|
96
|
+
return matchTrailing(text, PANDOC_STRICT_RE, PANDOC_LEGACY_RE);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// ============================================
|
|
100
|
+
// Tokenizer
|
|
101
|
+
// ============================================
|
|
102
|
+
|
|
103
|
+
const WHITESPACE_RE = /\s/;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Quote-aware whitespace tokenizer for the interior of either annotation
|
|
107
|
+
* form.
|
|
108
|
+
*
|
|
109
|
+
* A quote run starts only at the beginning of a token or immediately after
|
|
110
|
+
* `=` — a quote elsewhere (e.g. `name=O'Brien`) is a literal character.
|
|
111
|
+
* Inside a run, `\` escapes the active quote character and itself; the
|
|
112
|
+
* escape pair is preserved in the returned token (callers strip and
|
|
113
|
+
* unescape via {@link splitKeyValueToken} / {@link unquoteAttrValue}).
|
|
114
|
+
* An unbalanced opening quote is tolerated: the run extends to the end of
|
|
115
|
+
* the input.
|
|
116
|
+
*/
|
|
117
|
+
export function tokenizeAttrTokens(input: string): string[] {
|
|
118
|
+
const tokens: string[] = [];
|
|
119
|
+
let i = 0;
|
|
120
|
+
const n = input.length;
|
|
121
|
+
while (i < n) {
|
|
122
|
+
while (i < n && WHITESPACE_RE.test(input[i])) i++;
|
|
123
|
+
if (i >= n) break;
|
|
124
|
+
|
|
125
|
+
let token = '';
|
|
126
|
+
while (i < n && !WHITESPACE_RE.test(input[i])) {
|
|
127
|
+
const ch = input[i];
|
|
128
|
+
const atValueStart = token === '' || token.endsWith('=');
|
|
129
|
+
if ((ch === '"' || ch === "'") && atValueStart) {
|
|
130
|
+
token += ch;
|
|
131
|
+
i++;
|
|
132
|
+
while (i < n && input[i] !== ch) {
|
|
133
|
+
if (input[i] === '\\' && i + 1 < n && (input[i + 1] === ch || input[i + 1] === '\\')) {
|
|
134
|
+
token += input[i] + input[i + 1];
|
|
135
|
+
i += 2;
|
|
136
|
+
} else {
|
|
137
|
+
token += input[i];
|
|
138
|
+
i++;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (i < n && input[i] === ch) {
|
|
142
|
+
token += ch;
|
|
143
|
+
i++;
|
|
144
|
+
}
|
|
145
|
+
} else {
|
|
146
|
+
token += ch;
|
|
147
|
+
i++;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (token) tokens.push(token);
|
|
151
|
+
}
|
|
152
|
+
return tokens;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// ============================================
|
|
156
|
+
// Value un/escaping
|
|
157
|
+
// ============================================
|
|
158
|
+
|
|
159
|
+
const DQ_UNESCAPE_RE = /\\([\\"])/g;
|
|
160
|
+
const SQ_UNESCAPE_RE = /\\([\\'])/g;
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Strip surrounding quotes from a raw token value and unescape the active
|
|
164
|
+
* quote character and backslash. Values not wrapped in matching quotes are
|
|
165
|
+
* returned verbatim (including any interior quotes or backslashes).
|
|
166
|
+
*/
|
|
167
|
+
export function unquoteAttrValue(raw: string): string {
|
|
168
|
+
if (raw.length >= 2) {
|
|
169
|
+
const q = raw[0];
|
|
170
|
+
if ((q === '"' || q === "'") && raw.endsWith(q)) {
|
|
171
|
+
const body = raw.slice(1, -1);
|
|
172
|
+
return body.replace(q === '"' ? DQ_UNESCAPE_RE : SQ_UNESCAPE_RE, '$1');
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return raw;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Split a `key=value` token into its parts, unquoting/unescaping the value.
|
|
180
|
+
* Returns null for tokens with no `=` past the first character (bare words,
|
|
181
|
+
* `#id`, `.class`, or a leading `=`).
|
|
182
|
+
*/
|
|
183
|
+
export function splitKeyValueToken(token: string): { key: string; value: string } | null {
|
|
184
|
+
const eqIdx = token.indexOf('=');
|
|
185
|
+
if (eqIdx <= 0) return null;
|
|
186
|
+
return { key: token.slice(0, eqIdx), value: unquoteAttrValue(token.slice(eqIdx + 1)) };
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// ============================================
|
|
190
|
+
// Serialization
|
|
191
|
+
// ============================================
|
|
192
|
+
|
|
193
|
+
const NEEDS_QUOTING_RE = /[\s"'[\]{}]/;
|
|
194
|
+
const DQ_ESCAPE_RE = /[\\"]/g;
|
|
195
|
+
const SQ_ESCAPE_RE = /[\\']/g;
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Whether a value must be quoted to survive tokenization and the outer
|
|
199
|
+
* annotation regexes: any whitespace, quote character, bracket, or brace —
|
|
200
|
+
* or an empty value, which would otherwise serialize as a bare `key=`.
|
|
201
|
+
*/
|
|
202
|
+
export function needsQuoting(value: string): boolean {
|
|
203
|
+
return value === '' || NEEDS_QUOTING_RE.test(value);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Serialize an attribute value, quoting when {@link needsQuoting} says the
|
|
208
|
+
* bare form would not round-trip.
|
|
209
|
+
*
|
|
210
|
+
* Double quotes are canonical; a value containing a double quote (but no
|
|
211
|
+
* single quote) is single-quoted instead, because markdown resolves
|
|
212
|
+
* backslash escapes in text runs before our parser sees them — switching
|
|
213
|
+
* the quote character round-trips through `.md` source where `\"` would
|
|
214
|
+
* not. Backslashes and the active quote character are escaped.
|
|
215
|
+
*/
|
|
216
|
+
export function quoteAttrValue(value: string): string {
|
|
217
|
+
if (!needsQuoting(value)) return value;
|
|
218
|
+
if (value.includes('"') && !value.includes("'")) {
|
|
219
|
+
return `'${value.replace(SQ_ESCAPE_RE, (ch) => `\\${ch}`)}'`;
|
|
220
|
+
}
|
|
221
|
+
return `"${value.replace(DQ_ESCAPE_RE, (ch) => `\\${ch}`)}"`;
|
|
222
|
+
}
|