@bendyline/squisq 1.3.0 → 1.4.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-Ch4tc3vv.d.ts → Doc-BeSeH2iX.d.ts} +118 -41
- package/dist/ImageEditDoc-BTIvw0oq.d.ts +84 -0
- package/dist/__tests__/colorUtils.test.d.ts +2 -0
- package/dist/__tests__/colorUtils.test.d.ts.map +1 -0
- package/dist/__tests__/colorUtils.test.js +94 -0
- package/dist/__tests__/colorUtils.test.js.map +1 -0
- package/dist/__tests__/getLayers.test.js +31 -7
- package/dist/__tests__/getLayers.test.js.map +1 -1
- package/dist/__tests__/iconResolve.test.d.ts +2 -0
- package/dist/__tests__/iconResolve.test.d.ts.map +1 -0
- package/dist/__tests__/iconResolve.test.js +99 -0
- package/dist/__tests__/iconResolve.test.js.map +1 -0
- package/dist/__tests__/imageEditState.test.d.ts +2 -0
- package/dist/__tests__/imageEditState.test.d.ts.map +1 -0
- package/dist/__tests__/imageEditState.test.js +61 -0
- package/dist/__tests__/imageEditState.test.js.map +1 -0
- package/dist/__tests__/imageEditVersions.test.d.ts +2 -0
- package/dist/__tests__/imageEditVersions.test.d.ts.map +1 -0
- package/dist/__tests__/imageEditVersions.test.js +141 -0
- package/dist/__tests__/imageEditVersions.test.js.map +1 -0
- package/dist/__tests__/inferDocumentTitle.test.d.ts +2 -0
- package/dist/__tests__/inferDocumentTitle.test.d.ts.map +1 -0
- package/dist/__tests__/inferDocumentTitle.test.js +42 -0
- package/dist/__tests__/inferDocumentTitle.test.js.map +1 -0
- package/dist/__tests__/jsonForm.chooseControl.test.d.ts +2 -0
- package/dist/__tests__/jsonForm.chooseControl.test.d.ts.map +1 -0
- package/dist/__tests__/jsonForm.chooseControl.test.js +74 -0
- package/dist/__tests__/jsonForm.chooseControl.test.js.map +1 -0
- package/dist/__tests__/jsonForm.evaluateWhen.test.d.ts +2 -0
- package/dist/__tests__/jsonForm.evaluateWhen.test.d.ts.map +1 -0
- package/dist/__tests__/jsonForm.evaluateWhen.test.js +51 -0
- package/dist/__tests__/jsonForm.evaluateWhen.test.js.map +1 -0
- package/dist/__tests__/jsonForm.inferSchema.test.d.ts +2 -0
- package/dist/__tests__/jsonForm.inferSchema.test.d.ts.map +1 -0
- package/dist/__tests__/jsonForm.inferSchema.test.js +23 -0
- package/dist/__tests__/jsonForm.inferSchema.test.js.map +1 -0
- package/dist/__tests__/jsonForm.pointer.test.d.ts +2 -0
- package/dist/__tests__/jsonForm.pointer.test.d.ts.map +1 -0
- package/dist/__tests__/jsonForm.pointer.test.js +94 -0
- package/dist/__tests__/jsonForm.pointer.test.js.map +1 -0
- package/dist/__tests__/markdownIcons.test.d.ts +2 -0
- package/dist/__tests__/markdownIcons.test.d.ts.map +1 -0
- package/dist/__tests__/markdownIcons.test.js +93 -0
- package/dist/__tests__/markdownIcons.test.js.map +1 -0
- package/dist/__tests__/markdownToDoc.test.js +15 -4
- package/dist/__tests__/markdownToDoc.test.js.map +1 -1
- package/dist/__tests__/recommendTemplates.test.d.ts +2 -0
- package/dist/__tests__/recommendTemplates.test.d.ts.map +1 -0
- package/dist/__tests__/recommendTemplates.test.js +158 -0
- package/dist/__tests__/recommendTemplates.test.js.map +1 -0
- package/dist/__tests__/scopedContentContainer.test.d.ts +2 -0
- package/dist/__tests__/scopedContentContainer.test.d.ts.map +1 -0
- package/dist/__tests__/scopedContentContainer.test.js +74 -0
- package/dist/__tests__/scopedContentContainer.test.js.map +1 -0
- package/dist/__tests__/slideshowGenerator.test.js +1 -1
- package/dist/__tests__/slideshowGenerator.test.js.map +1 -1
- package/dist/__tests__/templateAnnotationParse.test.d.ts +2 -0
- package/dist/__tests__/templateAnnotationParse.test.d.ts.map +1 -0
- package/dist/__tests__/templateAnnotationParse.test.js +42 -0
- package/dist/__tests__/templateAnnotationParse.test.js.map +1 -0
- package/dist/__tests__/templates.test.js +90 -9
- package/dist/__tests__/templates.test.js.map +1 -1
- package/dist/__tests__/themeCompile.test.d.ts +2 -0
- package/dist/__tests__/themeCompile.test.d.ts.map +1 -0
- package/dist/__tests__/themeCompile.test.js +134 -0
- package/dist/__tests__/themeCompile.test.js.map +1 -0
- package/dist/__tests__/themeValidator.test.d.ts +2 -0
- package/dist/__tests__/themeValidator.test.d.ts.map +1 -0
- package/dist/__tests__/themeValidator.test.js +107 -0
- package/dist/__tests__/themeValidator.test.js.map +1 -0
- package/dist/__tests__/versions.test.d.ts +2 -0
- package/dist/__tests__/versions.test.d.ts.map +1 -0
- package/dist/__tests__/versions.test.js +339 -0
- package/dist/__tests__/versions.test.js.map +1 -0
- package/dist/{chunk-CYQHG27J.js → chunk-2TMAWB4Y.js} +74 -1
- package/dist/chunk-2TMAWB4Y.js.map +1 -0
- package/dist/{chunk-OASJKWO5.js → chunk-3K5OG6KI.js} +92 -7
- package/dist/chunk-3K5OG6KI.js.map +1 -0
- package/dist/chunk-57CVQCFX.js +193 -0
- package/dist/chunk-57CVQCFX.js.map +1 -0
- package/dist/{chunk-QM5PKNPW.js → chunk-5WFRKURX.js} +1 -1
- package/dist/chunk-5WFRKURX.js.map +1 -0
- package/dist/chunk-B4EEON3N.js +1317 -0
- package/dist/chunk-B4EEON3N.js.map +1 -0
- package/dist/chunk-DBS6RIFL.js +81 -0
- package/dist/chunk-DBS6RIFL.js.map +1 -0
- package/dist/{chunk-MIBRIRGJ.js → chunk-FR2RBTKO.js} +3 -3
- package/dist/{chunk-MIBRIRGJ.js.map → chunk-FR2RBTKO.js.map} +1 -1
- package/dist/chunk-H3AXU4MJ.js +179 -0
- package/dist/chunk-H3AXU4MJ.js.map +1 -0
- package/dist/chunk-JELIRVDP.js +24 -0
- package/dist/chunk-JELIRVDP.js.map +1 -0
- package/dist/chunk-K32VJONL.js +193 -0
- package/dist/chunk-K32VJONL.js.map +1 -0
- package/dist/{chunk-6BAVXFYC.js → chunk-KSWJR66U.js} +218 -42
- package/dist/chunk-KSWJR66U.js.map +1 -0
- package/dist/{chunk-TSG2OSE6.js → chunk-MYIH7FWD.js} +3 -3
- package/dist/chunk-MYIH7FWD.js.map +1 -0
- package/dist/chunk-VLJJHDAC.js +218 -0
- package/dist/chunk-VLJJHDAC.js.map +1 -0
- package/dist/chunk-WMOI7FN3.js +182 -0
- package/dist/chunk-WMOI7FN3.js.map +1 -0
- package/dist/chunk-ZTX4PFFT.js +520 -0
- package/dist/chunk-ZTX4PFFT.js.map +1 -0
- package/dist/doc/audioMapping.d.ts.map +1 -1
- package/dist/doc/audioMapping.js +42 -7
- package/dist/doc/audioMapping.js.map +1 -1
- package/dist/doc/getLayers.d.ts.map +1 -1
- package/dist/doc/getLayers.js +29 -18
- package/dist/doc/getLayers.js.map +1 -1
- package/dist/doc/markdownToDoc.d.ts.map +1 -1
- package/dist/doc/markdownToDoc.js +40 -6
- package/dist/doc/markdownToDoc.js.map +1 -1
- package/dist/doc/templates/featureBlock.d.ts +18 -0
- package/dist/doc/templates/featureBlock.d.ts.map +1 -0
- package/dist/doc/templates/featureBlock.js +180 -0
- package/dist/doc/templates/featureBlock.js.map +1 -0
- package/dist/doc/templates/fullBleedQuote.d.ts +12 -0
- package/dist/doc/templates/fullBleedQuote.d.ts.map +1 -1
- package/dist/doc/templates/fullBleedQuote.js +12 -0
- package/dist/doc/templates/fullBleedQuote.js.map +1 -1
- package/dist/doc/templates/index.d.ts +28 -4
- package/dist/doc/templates/index.d.ts.map +1 -1
- package/dist/doc/templates/index.js +45 -12
- package/dist/doc/templates/index.js.map +1 -1
- package/dist/doc/templates/listBlock.d.ts.map +1 -1
- package/dist/doc/templates/listBlock.js +22 -5
- package/dist/doc/templates/listBlock.js.map +1 -1
- package/dist/doc/templates/statHighlight.d.ts +12 -0
- package/dist/doc/templates/statHighlight.d.ts.map +1 -1
- package/dist/doc/templates/statHighlight.js +12 -0
- package/dist/doc/templates/statHighlight.js.map +1 -1
- package/dist/doc/templates/titleBlock.d.ts +11 -0
- package/dist/doc/templates/titleBlock.d.ts.map +1 -1
- package/dist/doc/templates/titleBlock.js +8 -0
- package/dist/doc/templates/titleBlock.js.map +1 -1
- package/dist/doc/utils/themeUtils.d.ts +4 -4
- package/dist/doc/utils/themeUtils.d.ts.map +1 -1
- package/dist/doc/utils/themeUtils.js +8 -7
- package/dist/doc/utils/themeUtils.js.map +1 -1
- package/dist/generate/slideshowGenerator.js +1 -1
- package/dist/generate/slideshowGenerator.js.map +1 -1
- package/dist/generate/templateMapper.js +2 -2
- package/dist/generate/templateMapper.js.map +1 -1
- package/dist/icons/iconData.d.ts +26 -0
- package/dist/icons/iconData.d.ts.map +1 -0
- package/dist/icons/iconData.js +12 -0
- package/dist/icons/iconData.js.map +1 -0
- package/dist/icons/index.d.ts +12 -0
- package/dist/icons/index.d.ts.map +1 -0
- package/dist/icons/index.js +10 -0
- package/dist/icons/index.js.map +1 -0
- package/dist/icons/resolve.d.ts +61 -0
- package/dist/icons/resolve.d.ts.map +1 -0
- package/dist/icons/resolve.js +130 -0
- package/dist/icons/resolve.js.map +1 -0
- package/dist/imageEdit/ImageEditVersionManager.d.ts +31 -0
- package/dist/imageEdit/ImageEditVersionManager.d.ts.map +1 -0
- package/dist/imageEdit/ImageEditVersionManager.js +39 -0
- package/dist/imageEdit/ImageEditVersionManager.js.map +1 -0
- package/dist/imageEdit/export.d.ts +33 -0
- package/dist/imageEdit/export.d.ts.map +1 -0
- package/dist/imageEdit/export.js +253 -0
- package/dist/imageEdit/export.js.map +1 -0
- package/dist/imageEdit/index.d.ts +14 -0
- package/dist/imageEdit/index.d.ts.map +1 -0
- package/dist/imageEdit/index.js +22 -0
- package/dist/imageEdit/index.js.map +1 -0
- package/dist/imageEdit/persistence.d.ts +15 -0
- package/dist/imageEdit/persistence.d.ts.map +1 -0
- package/dist/imageEdit/persistence.js +49 -0
- package/dist/imageEdit/persistence.js.map +1 -0
- package/dist/imageEdit/state.d.ts +42 -0
- package/dist/imageEdit/state.d.ts.map +1 -0
- package/dist/imageEdit/state.js +98 -0
- package/dist/imageEdit/state.js.map +1 -0
- package/dist/imageEdit/versionPaths.d.ts +27 -0
- package/dist/imageEdit/versionPaths.d.ts.map +1 -0
- package/dist/imageEdit/versionPaths.js +57 -0
- package/dist/imageEdit/versionPaths.js.map +1 -0
- package/dist/imageEdit/versions.d.ts +67 -0
- package/dist/imageEdit/versions.d.ts.map +1 -0
- package/dist/imageEdit/versions.js +161 -0
- package/dist/imageEdit/versions.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/jsonForm/chooseControl.d.ts +20 -0
- package/dist/jsonForm/chooseControl.d.ts.map +1 -0
- package/dist/jsonForm/chooseControl.js +82 -0
- package/dist/jsonForm/chooseControl.js.map +1 -0
- package/dist/jsonForm/evaluateWhen.d.ts +12 -0
- package/dist/jsonForm/evaluateWhen.d.ts.map +1 -0
- package/dist/jsonForm/evaluateWhen.js +65 -0
- package/dist/jsonForm/evaluateWhen.js.map +1 -0
- package/dist/jsonForm/index.d.ts +14 -0
- package/dist/jsonForm/index.d.ts.map +1 -0
- package/dist/jsonForm/index.js +12 -0
- package/dist/jsonForm/index.js.map +1 -0
- package/dist/jsonForm/inferSchema.d.ts +12 -0
- package/dist/jsonForm/inferSchema.d.ts.map +1 -0
- package/dist/jsonForm/inferSchema.js +15 -0
- package/dist/jsonForm/inferSchema.js.map +1 -0
- package/dist/jsonForm/pointer.d.ts +26 -0
- package/dist/jsonForm/pointer.d.ts.map +1 -0
- package/dist/jsonForm/pointer.js +102 -0
- package/dist/jsonForm/pointer.js.map +1 -0
- package/dist/jsonForm/types.d.ts +120 -0
- package/dist/jsonForm/types.d.ts.map +1 -0
- package/dist/jsonForm/types.js +10 -0
- package/dist/jsonForm/types.js.map +1 -0
- package/dist/markdown/convert.d.ts +11 -1
- package/dist/markdown/convert.d.ts.map +1 -1
- package/dist/markdown/convert.js +135 -5
- package/dist/markdown/convert.js.map +1 -1
- package/dist/markdown/index.d.ts +1 -1
- package/dist/markdown/index.d.ts.map +1 -1
- package/dist/markdown/index.js +1 -1
- package/dist/markdown/index.js.map +1 -1
- package/dist/markdown/types.d.ts +17 -2
- package/dist/markdown/types.d.ts.map +1 -1
- package/dist/markdown/utils.d.ts +40 -0
- package/dist/markdown/utils.d.ts.map +1 -1
- package/dist/markdown/utils.js +155 -0
- package/dist/markdown/utils.js.map +1 -1
- package/dist/recommend/index.d.ts +16 -0
- package/dist/recommend/index.d.ts.map +1 -0
- package/dist/recommend/index.js +15 -0
- package/dist/recommend/index.js.map +1 -0
- package/dist/recommend/templates.d.ts +39 -0
- package/dist/recommend/templates.d.ts.map +1 -0
- package/dist/recommend/templates.js +235 -0
- package/dist/recommend/templates.js.map +1 -0
- package/dist/schemas/BlockTemplates.d.ts +46 -8
- package/dist/schemas/BlockTemplates.d.ts.map +1 -1
- package/dist/schemas/BlockTemplates.js +3 -3
- package/dist/schemas/BlockTemplates.js.map +1 -1
- package/dist/schemas/ImageEditDoc.d.ts +81 -0
- package/dist/schemas/ImageEditDoc.d.ts.map +1 -0
- package/dist/schemas/ImageEditDoc.js +20 -0
- package/dist/schemas/ImageEditDoc.js.map +1 -0
- package/dist/schemas/Theme.d.ts +70 -31
- package/dist/schemas/Theme.d.ts.map +1 -1
- package/dist/schemas/Theme.js +48 -16
- package/dist/schemas/Theme.js.map +1 -1
- package/dist/schemas/colorUtils.d.ts +51 -0
- package/dist/schemas/colorUtils.d.ts.map +1 -0
- package/dist/schemas/colorUtils.js +154 -0
- package/dist/schemas/colorUtils.js.map +1 -0
- package/dist/schemas/fontStacks.d.ts +57 -0
- package/dist/schemas/fontStacks.d.ts.map +1 -0
- package/dist/schemas/fontStacks.js +227 -0
- package/dist/schemas/fontStacks.js.map +1 -0
- package/dist/schemas/index.d.ts +5 -0
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +4 -0
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/themeCompile.d.ts +45 -0
- package/dist/schemas/themeCompile.d.ts.map +1 -0
- package/dist/schemas/themeCompile.js +160 -0
- package/dist/schemas/themeCompile.js.map +1 -0
- package/dist/schemas/themeLibrary.d.ts +11 -15
- package/dist/schemas/themeLibrary.d.ts.map +1 -1
- package/dist/schemas/themeLibrary.js +18 -566
- package/dist/schemas/themeLibrary.js.map +1 -1
- package/dist/schemas/themeValidator.d.ts +26 -0
- package/dist/schemas/themeValidator.d.ts.map +1 -0
- package/dist/schemas/themeValidator.js +352 -0
- package/dist/schemas/themeValidator.js.map +1 -0
- package/dist/schemas/themes/bold.json +48 -0
- package/dist/schemas/themes/cinematic.json +54 -0
- package/dist/schemas/themes/documentary.json +49 -0
- package/dist/schemas/themes/gezellig.json +44 -0
- package/dist/schemas/themes/index.d.ts +26 -0
- package/dist/schemas/themes/index.d.ts.map +1 -0
- package/dist/schemas/themes/index.js +49 -0
- package/dist/schemas/themes/index.js.map +1 -0
- package/dist/schemas/themes/magazine.json +44 -0
- package/dist/schemas/themes/minimalist.json +45 -0
- package/dist/schemas/themes/morning-light.json +42 -0
- package/dist/schemas/themes/standard-dark.json +50 -0
- package/dist/schemas/themes/standard.json +42 -0
- package/dist/schemas/themes/tech-dark.json +48 -0
- package/dist/schemas/themes/warm-earth.json +50 -0
- package/dist/storage/ScopedContentContainer.d.ts +44 -0
- package/dist/storage/ScopedContentContainer.d.ts.map +1 -0
- package/dist/storage/ScopedContentContainer.js +94 -0
- package/dist/storage/ScopedContentContainer.js.map +1 -0
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +1 -0
- package/dist/storage/index.js.map +1 -1
- package/dist/story/index.d.ts +53 -13
- package/dist/story/index.js +12 -4
- package/dist/themeLibrary-BHjJ0Qx6.d.ts +40 -0
- package/dist/{types-CkNttVSF.d.ts → types-BdZkdJ3z.d.ts} +17 -2
- package/dist/types-D98li1gV.d.ts +93 -0
- package/dist/versions/DocumentVersionManager.d.ts +31 -0
- package/dist/versions/DocumentVersionManager.d.ts.map +1 -0
- package/dist/versions/DocumentVersionManager.js +33 -0
- package/dist/versions/DocumentVersionManager.js.map +1 -0
- package/dist/versions/index.d.ts +29 -0
- package/dist/versions/index.d.ts.map +1 -0
- package/dist/versions/index.js +28 -0
- package/dist/versions/index.js.map +1 -0
- package/dist/versions/operations.d.ts +44 -0
- package/dist/versions/operations.d.ts.map +1 -0
- package/dist/versions/operations.js +190 -0
- package/dist/versions/operations.js.map +1 -0
- package/dist/versions/paths.d.ts +29 -0
- package/dist/versions/paths.d.ts.map +1 -0
- package/dist/versions/paths.js +66 -0
- package/dist/versions/paths.js.map +1 -0
- package/dist/versions/timestamp.d.ts +22 -0
- package/dist/versions/timestamp.d.ts.map +1 -0
- package/dist/versions/timestamp.js +44 -0
- package/dist/versions/timestamp.js.map +1 -0
- package/dist/versions/types.d.ts +92 -0
- package/dist/versions/types.d.ts.map +1 -0
- package/dist/versions/types.js +11 -0
- package/dist/versions/types.js.map +1 -0
- package/package.json +28 -1
- package/src/__tests__/colorUtils.test.ts +112 -0
- package/src/__tests__/getLayers.test.ts +32 -7
- package/src/__tests__/iconResolve.test.ts +122 -0
- package/src/__tests__/imageEditState.test.ts +74 -0
- package/src/__tests__/imageEditVersions.test.ts +169 -0
- package/src/__tests__/inferDocumentTitle.test.ts +50 -0
- package/src/__tests__/jsonForm.chooseControl.test.ts +86 -0
- package/src/__tests__/jsonForm.evaluateWhen.test.ts +59 -0
- package/src/__tests__/jsonForm.inferSchema.test.ts +25 -0
- package/src/__tests__/jsonForm.pointer.test.ts +103 -0
- package/src/__tests__/markdownIcons.test.ts +104 -0
- package/src/__tests__/markdownToDoc.test.ts +19 -4
- package/src/__tests__/recommendTemplates.test.ts +183 -0
- package/src/__tests__/scopedContentContainer.test.ts +89 -0
- package/src/__tests__/slideshowGenerator.test.ts +1 -1
- package/src/__tests__/templateAnnotationParse.test.ts +42 -0
- package/src/__tests__/templates.test.ts +93 -9
- package/src/__tests__/themeCompile.test.ts +156 -0
- package/src/__tests__/themeValidator.test.ts +125 -0
- package/src/__tests__/versions.test.ts +415 -0
- package/src/doc/audioMapping.ts +55 -11
- package/src/doc/getLayers.ts +32 -21
- package/src/doc/markdownToDoc.ts +45 -7
- package/src/doc/templates/featureBlock.ts +202 -0
- package/src/doc/templates/fullBleedQuote.ts +13 -0
- package/src/doc/templates/index.ts +50 -16
- package/src/doc/templates/listBlock.ts +24 -5
- package/src/doc/templates/statHighlight.ts +13 -0
- package/src/doc/templates/titleBlock.ts +9 -0
- package/src/doc/utils/themeUtils.ts +8 -7
- package/src/generate/slideshowGenerator.ts +1 -1
- package/src/generate/templateMapper.ts +2 -2
- package/src/icons/iconData.ts +31 -0
- package/src/icons/index.ts +18 -0
- package/src/icons/resolve.ts +139 -0
- package/src/imageEdit/ImageEditVersionManager.ts +73 -0
- package/src/imageEdit/export.ts +326 -0
- package/src/imageEdit/index.ts +71 -0
- package/src/imageEdit/persistence.ts +62 -0
- package/src/imageEdit/state.ts +112 -0
- package/src/imageEdit/versionPaths.ts +57 -0
- package/src/imageEdit/versions.ts +231 -0
- package/src/index.ts +4 -0
- package/src/jsonForm/chooseControl.ts +88 -0
- package/src/jsonForm/evaluateWhen.ts +59 -0
- package/src/jsonForm/index.ts +22 -0
- package/src/jsonForm/inferSchema.ts +25 -0
- package/src/jsonForm/pointer.ts +109 -0
- package/src/jsonForm/types.ts +167 -0
- package/src/markdown/convert.ts +145 -5
- package/src/markdown/index.ts +3 -0
- package/src/markdown/types.ts +19 -2
- package/src/markdown/utils.ts +159 -0
- package/src/recommend/index.ts +16 -0
- package/src/recommend/templates.ts +273 -0
- package/src/schemas/BlockTemplates.ts +50 -7
- package/src/schemas/ImageEditDoc.ts +95 -0
- package/src/schemas/Theme.ts +98 -31
- package/src/schemas/colorUtils.ts +186 -0
- package/src/schemas/fontStacks.ts +257 -0
- package/src/schemas/index.ts +12 -0
- package/src/schemas/themeCompile.ts +203 -0
- package/src/schemas/themeLibrary.ts +18 -597
- package/src/schemas/themeValidator.ts +388 -0
- package/src/schemas/themes/bold.json +48 -0
- package/src/schemas/themes/cinematic.json +54 -0
- package/src/schemas/themes/documentary.json +49 -0
- package/src/schemas/themes/gezellig.json +44 -0
- package/src/schemas/themes/index.ts +53 -0
- package/src/schemas/themes/magazine.json +44 -0
- package/src/schemas/themes/minimalist.json +45 -0
- package/src/schemas/themes/morning-light.json +42 -0
- package/src/schemas/themes/standard-dark.json +50 -0
- package/src/schemas/themes/standard.json +42 -0
- package/src/schemas/themes/tech-dark.json +48 -0
- package/src/schemas/themes/warm-earth.json +50 -0
- package/src/storage/ScopedContentContainer.ts +113 -0
- package/src/storage/index.ts +1 -0
- package/src/versions/DocumentVersionManager.ts +70 -0
- package/src/versions/index.ts +54 -0
- package/src/versions/operations.ts +230 -0
- package/src/versions/paths.ts +66 -0
- package/src/versions/timestamp.ts +48 -0
- package/src/versions/types.ts +91 -0
- package/dist/chunk-6BAVXFYC.js.map +0 -1
- package/dist/chunk-7GF6RDED.js +0 -82
- package/dist/chunk-7GF6RDED.js.map +0 -1
- package/dist/chunk-CYQHG27J.js.map +0 -1
- package/dist/chunk-F22AE6BY.js +0 -121
- package/dist/chunk-F22AE6BY.js.map +0 -1
- package/dist/chunk-FIQR4AJG.js +0 -517
- package/dist/chunk-FIQR4AJG.js.map +0 -1
- package/dist/chunk-OASJKWO5.js.map +0 -1
- package/dist/chunk-QM5PKNPW.js.map +0 -1
- package/dist/chunk-TSG2OSE6.js.map +0 -1
- package/dist/themeLibrary-CEo2D4b6.d.ts +0 -44
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { M as MarkdownBlockNode, p as MarkdownHeading } from './types-
|
|
1
|
+
import { M as MarkdownBlockNode, p as MarkdownHeading } from './types-BdZkdJ3z.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Viewport Configuration
|
|
@@ -163,17 +163,28 @@ declare function getSafeTextBounds(orientation: ViewportOrientation): {
|
|
|
163
163
|
*
|
|
164
164
|
* A Theme bundles color palette, typography, visual style, render-style
|
|
165
165
|
* algorithm, and per-block color schemes into one JSON-serializable object.
|
|
166
|
-
*
|
|
167
|
-
*
|
|
166
|
+
*
|
|
167
|
+
* Built-in themes and customizer-authored themes share this exact schema.
|
|
168
|
+
* Customizer-authored themes additionally specify `seedColors` so the few
|
|
169
|
+
* fields the user picked can be re-edited later; built-ins typically omit
|
|
170
|
+
* `seedColors` and ship with explicit `colors` already filled in.
|
|
168
171
|
*
|
|
169
172
|
* Design principles:
|
|
170
|
-
* - Fully JSON-serializable
|
|
171
|
-
* -
|
|
172
|
-
*
|
|
173
|
+
* - Fully JSON-serializable. No functions; no raw CSS font strings.
|
|
174
|
+
* - Font families are structured `FontFamily` references resolved by
|
|
175
|
+
* `resolveFontFamily()` at render time.
|
|
176
|
+
* - Doc carries an optional `themeId`; resolution happens at render time
|
|
177
|
+
* via `resolveTheme(id)`.
|
|
178
|
+
* - `createTheme` deep-merges a base theme with partial overrides;
|
|
179
|
+
* `compileTheme` fills in defaults and derives missing color slots from
|
|
180
|
+
* `seedColors`; both produce a complete `Theme`.
|
|
173
181
|
*/
|
|
174
182
|
|
|
183
|
+
/** Current Theme schema version. Bump on breaking changes; loader migrates. */
|
|
184
|
+
declare const THEME_SCHEMA_VERSION: "1";
|
|
185
|
+
type ThemeSchemaVersion = typeof THEME_SCHEMA_VERSION;
|
|
175
186
|
/**
|
|
176
|
-
* Core color palette for a theme. Every color is a
|
|
187
|
+
* Core color palette for a theme. Every color is a `#rrggbb` hex string.
|
|
177
188
|
*/
|
|
178
189
|
interface ThemeColorPalette {
|
|
179
190
|
/** Primary accent color */
|
|
@@ -205,16 +216,44 @@ interface ThemeColorScheme {
|
|
|
205
216
|
/** Accent / secondary tint */
|
|
206
217
|
accent: string;
|
|
207
218
|
}
|
|
219
|
+
/**
|
|
220
|
+
* Optional authoring metadata. When present and `colors` is partial,
|
|
221
|
+
* `compileTheme` derives missing color slots from these seeds via OKLCh
|
|
222
|
+
* lightening / darkening. Round-trips a customizer-authored theme back
|
|
223
|
+
* into editable form.
|
|
224
|
+
*/
|
|
225
|
+
interface ThemeSeedColors {
|
|
226
|
+
primary: string;
|
|
227
|
+
secondary?: string;
|
|
228
|
+
accent?: string;
|
|
229
|
+
background?: string;
|
|
230
|
+
text?: string;
|
|
231
|
+
}
|
|
232
|
+
/** Categorical bucket for a font family — drives default fallback. */
|
|
233
|
+
type FontFamilyKind = 'sans' | 'serif' | 'mono' | 'display';
|
|
234
|
+
/**
|
|
235
|
+
* Structured reference to a font family. Either a curated stack id (looked
|
|
236
|
+
* up in `AVAILABLE_FONT_STACKS`) or a custom user-supplied name with a
|
|
237
|
+
* structured fallback bucket. Themes never carry raw CSS family strings.
|
|
238
|
+
*/
|
|
239
|
+
type FontFamily = {
|
|
240
|
+
stackId: string;
|
|
241
|
+
} | {
|
|
242
|
+
custom: {
|
|
243
|
+
name: string;
|
|
244
|
+
fallback: 'serif' | 'sans-serif' | 'monospace' | 'system-ui';
|
|
245
|
+
};
|
|
246
|
+
};
|
|
208
247
|
/**
|
|
209
248
|
* Typography settings for a theme.
|
|
210
249
|
*/
|
|
211
250
|
interface ThemeTypography {
|
|
212
251
|
/** Font family for body / description text */
|
|
213
|
-
|
|
252
|
+
bodyFont: FontFamily;
|
|
214
253
|
/** Font family for titles and headings */
|
|
215
|
-
|
|
254
|
+
titleFont: FontFamily;
|
|
216
255
|
/** Font family for code / monospaced text (optional) */
|
|
217
|
-
|
|
256
|
+
monoFont?: FontFamily;
|
|
218
257
|
/** Multiplier applied to LayoutHints.titleScale (default 1.0) */
|
|
219
258
|
titleScale?: number;
|
|
220
259
|
/** Multiplier applied to LayoutHints.bodyScale (default 1.0) */
|
|
@@ -264,24 +303,26 @@ interface RenderStyle {
|
|
|
264
303
|
/**
|
|
265
304
|
* Per-template behavioral hints. Keys are template names, values are
|
|
266
305
|
* string/number/boolean maps that templates can read to vary their output.
|
|
267
|
-
*
|
|
268
|
-
*
|
|
269
|
-
* ```
|
|
270
|
-
* { statHighlight: { entrance: 'dramatic' }, titleBlock: { showAccentLine: false } }
|
|
271
|
-
* ```
|
|
306
|
+
* Templates that consume hints publish a `hintSchema` export documenting
|
|
307
|
+
* the keys they recognise.
|
|
272
308
|
*/
|
|
273
309
|
templateHints?: Record<string, Record<string, string | number | boolean>>;
|
|
274
310
|
}
|
|
275
311
|
/**
|
|
276
|
-
* A complete, JSON-serializable theme definition.
|
|
312
|
+
* A complete, JSON-serializable theme definition. Built-in and customizer-
|
|
313
|
+
* authored themes share this exact shape.
|
|
277
314
|
*/
|
|
278
315
|
interface Theme {
|
|
316
|
+
/** Schema version. Always '1' for now. */
|
|
317
|
+
schemaVersion: ThemeSchemaVersion;
|
|
279
318
|
/** Unique identifier (e.g. "documentary") */
|
|
280
319
|
id: string;
|
|
281
320
|
/** Human-readable display name */
|
|
282
321
|
name: string;
|
|
283
322
|
/** Short description for theme pickers */
|
|
284
323
|
description?: string;
|
|
324
|
+
/** Optional authoring seeds (customizer fills these; built-ins typically omit) */
|
|
325
|
+
seedColors?: ThemeSeedColors;
|
|
285
326
|
/** Color palette */
|
|
286
327
|
colors: ThemeColorPalette;
|
|
287
328
|
/** Typography settings */
|
|
@@ -308,14 +349,6 @@ type DeepPartial<T> = {
|
|
|
308
349
|
* Create a new theme by deep-merging overrides onto a base theme.
|
|
309
350
|
* The returned theme gets its own `id` if one is provided in overrides,
|
|
310
351
|
* otherwise keeps the base theme's `id` suffixed with "-custom".
|
|
311
|
-
*
|
|
312
|
-
* @example
|
|
313
|
-
* ```ts
|
|
314
|
-
* const myTheme = createTheme(THEMES.documentary, {
|
|
315
|
-
* colors: { primary: '#ff0000' },
|
|
316
|
-
* typography: { bodyFontFamily: '"Inter", sans-serif' },
|
|
317
|
-
* });
|
|
318
|
-
* ```
|
|
319
352
|
*/
|
|
320
353
|
declare function createTheme(base: Theme, overrides: DeepPartial<Theme>): Theme;
|
|
321
354
|
/**
|
|
@@ -323,11 +356,6 @@ declare function createTheme(base: Theme, overrides: DeepPartial<Theme>): Theme;
|
|
|
323
356
|
* identity of a Theme. A Theme chooses voice (serif vs sans, muted vs
|
|
324
357
|
* bold, documentary vs magazine); a SurfaceScheme chooses what the paper
|
|
325
358
|
* looks like. Any theme can render on either surface.
|
|
326
|
-
*
|
|
327
|
-
* When a SurfaceScheme is applied to a Theme (via `applySurface`), these
|
|
328
|
-
* fields override the corresponding entries in `ThemeColorPalette` —
|
|
329
|
-
* everything else (primary, highlight, warning, etc.) stays as the theme
|
|
330
|
-
* defined it.
|
|
331
359
|
*/
|
|
332
360
|
interface SurfaceScheme {
|
|
333
361
|
/** Identifier — 'light', 'dark', or a custom id. */
|
|
@@ -344,28 +372,39 @@ declare const DARK_SURFACE: SurfaceScheme;
|
|
|
344
372
|
/**
|
|
345
373
|
* Overlay a SurfaceScheme's surface colors onto a Theme's palette,
|
|
346
374
|
* leaving everything else (primary, highlight, warning, typography,
|
|
347
|
-
* style, renderStyle, colorSchemes) untouched.
|
|
348
|
-
* callers that want to preserve the original's id should set it
|
|
349
|
-
* explicitly in the overrides.
|
|
375
|
+
* style, renderStyle, colorSchemes) untouched.
|
|
350
376
|
*/
|
|
351
377
|
declare function applySurface(theme: Theme, surface: SurfaceScheme): Theme;
|
|
378
|
+
/**
|
|
379
|
+
* Register a Theme so it can be looked up by id via `resolveTheme(id)`.
|
|
380
|
+
* Lets `Doc.themeId` round-trip through Doc serialization for custom themes.
|
|
381
|
+
*
|
|
382
|
+
* Registered themes take precedence over built-ins with the same id.
|
|
383
|
+
*/
|
|
384
|
+
declare function registerTheme(theme: Theme): void;
|
|
385
|
+
/** Remove a previously registered theme. */
|
|
386
|
+
declare function unregisterTheme(id: string): void;
|
|
387
|
+
/** Snapshot of all currently registered (non-built-in) themes. */
|
|
388
|
+
declare function getRegisteredThemes(): Theme[];
|
|
389
|
+
/** @internal — used by themeLibrary's `resolveTheme` to check the registry first. */
|
|
390
|
+
declare function lookupRegisteredTheme(id: string | undefined): Theme | undefined;
|
|
352
391
|
|
|
353
392
|
/**
|
|
354
393
|
* Block Templates Schema
|
|
355
394
|
*
|
|
356
395
|
* Defines a template system for AI-generated doc blocks. Instead of
|
|
357
396
|
* specifying low-level layers, positions, and animations, AI can use
|
|
358
|
-
* high-level templates like "
|
|
397
|
+
* high-level templates like "title" or "statHighlight" with simple
|
|
359
398
|
* content parameters.
|
|
360
399
|
*
|
|
361
400
|
* Templates are expanded into full Block structures at render time,
|
|
362
401
|
* ensuring consistent styling and reducing AI generation errors.
|
|
363
402
|
*
|
|
364
403
|
* Template Types:
|
|
365
|
-
* -
|
|
404
|
+
* - title: Doc intro with title + subtitle
|
|
366
405
|
* - sectionHeader: Colored section divider
|
|
367
406
|
* - statHighlight: Big number/stat with description
|
|
368
|
-
* -
|
|
407
|
+
* - quote: Large centered quote
|
|
369
408
|
* - factCard: Key fact with explanation
|
|
370
409
|
* - twoColumn: Side-by-side comparison
|
|
371
410
|
* - dateEvent: Timeline-style date + description
|
|
@@ -443,7 +482,7 @@ interface BaseTemplateBlock {
|
|
|
443
482
|
* Title block - doc intro with large title and subtitle.
|
|
444
483
|
*/
|
|
445
484
|
interface TitleBlockInput extends BaseTemplateBlock {
|
|
446
|
-
template: '
|
|
485
|
+
template: 'title';
|
|
447
486
|
/** Main title text */
|
|
448
487
|
title: string;
|
|
449
488
|
/** Subtitle or tagline (supports \n for line breaks) */
|
|
@@ -488,7 +527,7 @@ interface StatHighlightInput extends BaseTemplateBlock {
|
|
|
488
527
|
* Quote block - large centered quote text.
|
|
489
528
|
*/
|
|
490
529
|
interface QuoteBlockInput extends BaseTemplateBlock {
|
|
491
|
-
template: '
|
|
530
|
+
template: 'quote';
|
|
492
531
|
/** The quote text (supports \n for line breaks) */
|
|
493
532
|
quote: string;
|
|
494
533
|
/** Attribution (author, source) */
|
|
@@ -571,6 +610,44 @@ interface ImageWithCaptionInput extends BaseTemplateBlock {
|
|
|
571
610
|
/** License identifier (e.g., 'CC BY-SA 4.0') */
|
|
572
611
|
imageLicense?: string;
|
|
573
612
|
}
|
|
613
|
+
/**
|
|
614
|
+
* Shared fields for left/right feature blocks. A "feature" pairs an
|
|
615
|
+
* image on one side of the block with a title and body paragraph on
|
|
616
|
+
* the other — a common editorial layout for product highlights,
|
|
617
|
+
* profile callouts, or section intros.
|
|
618
|
+
*/
|
|
619
|
+
interface FeatureInputBase extends BaseTemplateBlock {
|
|
620
|
+
/** Path to the feature image. */
|
|
621
|
+
imageSrc: string;
|
|
622
|
+
/** Alt text for accessibility. */
|
|
623
|
+
imageAlt?: string;
|
|
624
|
+
/**
|
|
625
|
+
* Explicit display width of the image, in pixels (typically pulled
|
|
626
|
+
* from a `<img width>` attribute when the WYSIWYG editor resized it).
|
|
627
|
+
* When set, the renderer treats the image as a sized asset and
|
|
628
|
+
* centers it inside its half with padding instead of stretching it
|
|
629
|
+
* to fill the cell.
|
|
630
|
+
*/
|
|
631
|
+
imageWidth?: number;
|
|
632
|
+
/** Explicit display height of the image, in pixels. */
|
|
633
|
+
imageHeight?: number;
|
|
634
|
+
/** Heading / title text shown next to the image. */
|
|
635
|
+
title?: string;
|
|
636
|
+
/** Body text shown below the title. */
|
|
637
|
+
body?: string;
|
|
638
|
+
}
|
|
639
|
+
/**
|
|
640
|
+
* Left feature — image on the left, title + body stacked on the right.
|
|
641
|
+
*/
|
|
642
|
+
interface LeftFeatureInput extends FeatureInputBase {
|
|
643
|
+
template: 'leftFeature';
|
|
644
|
+
}
|
|
645
|
+
/**
|
|
646
|
+
* Right feature — image on the right, title + body stacked on the left.
|
|
647
|
+
*/
|
|
648
|
+
interface RightFeatureInput extends FeatureInputBase {
|
|
649
|
+
template: 'rightFeature';
|
|
650
|
+
}
|
|
574
651
|
/**
|
|
575
652
|
* Map block - geographic map showing article location.
|
|
576
653
|
*
|
|
@@ -579,7 +656,7 @@ interface ImageWithCaptionInput extends BaseTemplateBlock {
|
|
|
579
656
|
* See docs/MAP_TILES.md for available tile styles and attribution.
|
|
580
657
|
*/
|
|
581
658
|
interface MapBlockInput extends BaseTemplateBlock {
|
|
582
|
-
template: '
|
|
659
|
+
template: 'map';
|
|
583
660
|
/** Map center coordinates */
|
|
584
661
|
center: {
|
|
585
662
|
lat: number;
|
|
@@ -616,7 +693,7 @@ interface FullBleedQuoteInput extends BaseTemplateBlock {
|
|
|
616
693
|
* Good for enumerations like "things to see" or "key features".
|
|
617
694
|
*/
|
|
618
695
|
interface ListBlockInput extends BaseTemplateBlock {
|
|
619
|
-
template: '
|
|
696
|
+
template: 'list';
|
|
620
697
|
/** List items (3-5 recommended) */
|
|
621
698
|
items: string[];
|
|
622
699
|
/** Optional header above the list */
|
|
@@ -769,7 +846,7 @@ interface DataTableInput extends BaseTemplateBlock {
|
|
|
769
846
|
/**
|
|
770
847
|
* Union of all template block types.
|
|
771
848
|
*/
|
|
772
|
-
type TemplateBlock = TitleBlockInput | SectionHeaderInput | StatHighlightInput | QuoteBlockInput | FactCardInput | TwoColumnInput | DateEventInput | ImageWithCaptionInput | MapBlockInput | FullBleedQuoteInput | ListBlockInput | PhotoGridInput | DefinitionCardInput | ComparisonBarInput | PullQuoteInput | VideoWithCaptionInput | VideoPullQuoteInput | DataTableInput;
|
|
849
|
+
type TemplateBlock = TitleBlockInput | SectionHeaderInput | StatHighlightInput | QuoteBlockInput | FactCardInput | TwoColumnInput | DateEventInput | ImageWithCaptionInput | LeftFeatureInput | RightFeatureInput | MapBlockInput | FullBleedQuoteInput | ListBlockInput | PhotoGridInput | DefinitionCardInput | ComparisonBarInput | PullQuoteInput | VideoWithCaptionInput | VideoPullQuoteInput | DataTableInput;
|
|
773
850
|
/**
|
|
774
851
|
* A block can be either a raw Block or a TemplateBlock.
|
|
775
852
|
*/
|
|
@@ -1448,4 +1525,4 @@ declare function getCaptionAtTime(captions: CaptionTrack | undefined, time: numb
|
|
|
1448
1525
|
*/
|
|
1449
1526
|
declare function validateDoc(script: Doc): string[];
|
|
1450
1527
|
|
|
1451
|
-
export { type
|
|
1528
|
+
export { type RightFeatureInput as $, type AccentImage as A, type Block as B, type CaptionPhrase as C, DARK_SURFACE as D, type LayoutHints as E, type FactCardInput as F, type GradientBackgroundConfig as G, type LeftFeatureInput as H, type ImageBackgroundConfig as I, type ListBlockInput as J, type MapLayer as K, LIGHT_SURFACE as L, type MapBlockInput as M, type MapMarker as N, type MapTileStyle as O, type PatternBackgroundConfig as P, type PersistentLayer as Q, type PersistentLayerConfig as R, type PersistentLayerTemplate as S, type PersistentLayerTemplateConfig as T, type PersistentLayerTemplateType as U, type PhotoGridInput as V, type Position as W, type ProgressIndicatorConfig as X, type PullQuoteInput as Y, type QuoteBlockInput as Z, type RenderStyle as _, type AccentPosition as a, type SectionHeaderInput as a0, type ShapeLayer as a1, type SolidBackgroundConfig as a2, type StartBlockConfig as a3, type StatHighlightInput as a4, type SurfaceScheme as a5, THEME_SCHEMA_VERSION as a6, type TableLayer as a7, type TableLayerStyle as a8, type TemplateBlock as a9, calculateFontScale as aA, createTemplateContext as aB, createTheme as aC, getAspectRatioString as aD, getBlockAtTime as aE, getCaptionAtTime as aF, getLayoutHints as aG, getRegisteredThemes as aH, getSafeTextBounds as aI, getSegmentAtTime as aJ, getTwoColumnPositions as aK, getViewport as aL, getViewportOrientation as aM, isPersistentLayerTemplate as aN, isTemplateBlock as aO, scaledFontSize$1 as aP, lookupRegisteredTheme as aQ, registerTheme as aR, scaledFontSize as aS, unregisterTheme as aT, validateDoc as aU, type TemplateContext as aa, type TemplateFunction as ab, type TemplateRegistry as ac, type TextLayer as ad, type TextStyle as ae, type Theme as af, type ThemeColorPalette as ag, type ThemeColorScheme as ah, type ThemeSchemaVersion as ai, type ThemeSeedColors as aj, type ThemeStyle as ak, type ThemeTypography as al, type TitleBlockInput as am, type TitleCaptionConfig as an, type Transition as ao, type TransitionType as ap, type TwoColumnInput as aq, VIEWPORT_PRESETS as ar, type VideoLayer as as, type VideoPullQuoteInput as at, type VideoWithCaptionInput as au, type ViewportConfig as av, type ViewportOrientation as aw, type ViewportPreset as ax, applySurface as ay, calculateDuration as az, type Animation as b, type AnimationType as c, type AudioBookmark as d, type AudioSegment as e, type AudioTimingData as f, type AudioTrack as g, type CaptionTrack as h, type CaptionWord as i, type ColorScheme as j, type ComparisonBarInput as k, type CornerBrandingConfig as l, DEFAULT_DOC_FONT as m, DEFAULT_TITLE_FONT as n, type DataTableInput as o, type DateEventInput as p, type DeepPartial as q, type DefinitionCardInput as r, type Doc as s, type DocBlock as t, type FontFamily as u, type FontFamilyKind as v, type FullBleedQuoteInput as w, type ImageLayer as x, type ImageWithCaptionInput as y, type Layer as z };
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { x as ImageLayer, ad as TextLayer, a1 as ShapeLayer } from './Doc-BeSeH2iX.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* ImageEditDoc — JSON document describing a layered, editable image.
|
|
5
|
+
*
|
|
6
|
+
* This is the persistent state of the `<ImageEditor>` component. It lives
|
|
7
|
+
* inside a `<imagebasename>_files/` sidecar folder (exposed as a
|
|
8
|
+
* {@link ContentContainer}) at `state.json`, alongside referenced asset
|
|
9
|
+
* bytes in `assets/` and version snapshots in `.versions/`.
|
|
10
|
+
*
|
|
11
|
+
* Layers compose the existing core {@link Layer} types (image / text /
|
|
12
|
+
* shape) so renderers can share infrastructure with the doc system.
|
|
13
|
+
* Editor-specific metadata (name, visibility, lock, opacity, blendMode)
|
|
14
|
+
* lives in {@link EditorLayerMeta} and is merged onto each layer. The
|
|
15
|
+
* {@link Layer.animation} field is permitted but ignored by the image
|
|
16
|
+
* editor — animations are a slideshow concept.
|
|
17
|
+
*
|
|
18
|
+
* All asset paths in layers (e.g. `ImageLayer.content.src`) are
|
|
19
|
+
* relative to the sidecar root, keeping the document portable.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Per-layer editor metadata. Merged into each layer so the persisted
|
|
24
|
+
* shape is a single object. All fields optional; sensible defaults
|
|
25
|
+
* apply when absent (visible: true, locked: false, opacity: 1).
|
|
26
|
+
*/
|
|
27
|
+
interface EditorLayerMeta {
|
|
28
|
+
/** Human-readable name shown in the layers panel. */
|
|
29
|
+
name?: string;
|
|
30
|
+
/** When false, the layer is hidden from rendering. Default true. */
|
|
31
|
+
visible?: boolean;
|
|
32
|
+
/** When true, the layer cannot be selected/edited. Default false. */
|
|
33
|
+
locked?: boolean;
|
|
34
|
+
/** 0..1 multiplier on the layer's alpha. Default 1. */
|
|
35
|
+
opacity?: number;
|
|
36
|
+
/**
|
|
37
|
+
* Canvas blend mode (matches the CSS / Canvas2D vocabulary).
|
|
38
|
+
* Default 'source-over' (normal compositing).
|
|
39
|
+
*/
|
|
40
|
+
blendMode?: GlobalCompositeOperation;
|
|
41
|
+
}
|
|
42
|
+
/** A layer in an {@link ImageEditDoc}. */
|
|
43
|
+
type ImageEditLayer = (ImageLayer | TextLayer | ShapeLayer) & EditorLayerMeta;
|
|
44
|
+
/** The layer kinds the image editor supports. */
|
|
45
|
+
type ImageEditLayerKind = ImageEditLayer['type'];
|
|
46
|
+
/** Canvas dimensions and background. */
|
|
47
|
+
interface ImageEditCanvas {
|
|
48
|
+
/** Canvas width in pixels. */
|
|
49
|
+
width: number;
|
|
50
|
+
/** Canvas height in pixels. */
|
|
51
|
+
height: number;
|
|
52
|
+
/**
|
|
53
|
+
* Background fill (CSS color, or `'transparent'` for an alpha canvas).
|
|
54
|
+
* Default: `'transparent'`.
|
|
55
|
+
*/
|
|
56
|
+
background?: string;
|
|
57
|
+
}
|
|
58
|
+
/** Optional document metadata. */
|
|
59
|
+
interface ImageEditMeta {
|
|
60
|
+
/** Path to the original source image (sidecar-relative). Set when the doc is seeded from an existing image. */
|
|
61
|
+
sourcePath?: string;
|
|
62
|
+
/** ISO timestamp set on first save. */
|
|
63
|
+
createdAt?: string;
|
|
64
|
+
/** ISO timestamp updated on every save. */
|
|
65
|
+
updatedAt?: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* The persisted image-editor document.
|
|
69
|
+
*
|
|
70
|
+
* Layers are composited back-to-front: `layers[0]` is the bottom of the stack
|
|
71
|
+
* (typically the base raster), `layers[layers.length - 1]` is the top.
|
|
72
|
+
*/
|
|
73
|
+
interface ImageEditDoc {
|
|
74
|
+
/** Schema version. Bumped on breaking changes. */
|
|
75
|
+
version: 1;
|
|
76
|
+
/** Canvas configuration. */
|
|
77
|
+
canvas: ImageEditCanvas;
|
|
78
|
+
/** Layers, back-to-front. */
|
|
79
|
+
layers: ImageEditLayer[];
|
|
80
|
+
/** Optional metadata. */
|
|
81
|
+
meta?: ImageEditMeta;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export type { EditorLayerMeta as E, ImageEditCanvas as I, ImageEditDoc as a, ImageEditLayer as b, ImageEditLayerKind as c, ImageEditMeta as d };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colorUtils.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/colorUtils.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { isHex, oklchLighten, oklchDarken, oklchSetChroma, contrastRatio, pickContrastingText, deriveScale, relativeLuminance, } from '../schemas/colorUtils.js';
|
|
3
|
+
describe('isHex', () => {
|
|
4
|
+
it('accepts #rgb and #rrggbb', () => {
|
|
5
|
+
expect(isHex('#fff')).toBe(true);
|
|
6
|
+
expect(isHex('#123abc')).toBe(true);
|
|
7
|
+
expect(isHex('#FF0080')).toBe(true);
|
|
8
|
+
});
|
|
9
|
+
it('rejects malformed strings', () => {
|
|
10
|
+
expect(isHex('fff')).toBe(false);
|
|
11
|
+
expect(isHex('#1234')).toBe(false);
|
|
12
|
+
expect(isHex('#xyz')).toBe(false);
|
|
13
|
+
expect(isHex('rgb(0,0,0)')).toBe(false);
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
describe('oklchLighten / oklchDarken', () => {
|
|
17
|
+
it('lighten produces a lighter color (higher luminance)', () => {
|
|
18
|
+
const dark = '#101010';
|
|
19
|
+
const lighter = oklchLighten(dark, 0.2);
|
|
20
|
+
expect(relativeLuminance(lighter)).toBeGreaterThan(relativeLuminance(dark));
|
|
21
|
+
});
|
|
22
|
+
it('darken produces a darker color (lower luminance)', () => {
|
|
23
|
+
const light = '#e0e0e0';
|
|
24
|
+
const darker = oklchDarken(light, 0.2);
|
|
25
|
+
expect(relativeLuminance(darker)).toBeLessThan(relativeLuminance(light));
|
|
26
|
+
});
|
|
27
|
+
it('round-trips approximately stable for moderate adjustments', () => {
|
|
28
|
+
const seed = '#3182ce';
|
|
29
|
+
const round = oklchDarken(oklchLighten(seed, 0.1), 0.1);
|
|
30
|
+
// sRGB gamut clamping prevents perfect round-trip; expect within a small epsilon.
|
|
31
|
+
expect(round).toMatch(/^#[0-9a-f]{6}$/);
|
|
32
|
+
const lumDiff = Math.abs(relativeLuminance(seed) - relativeLuminance(round));
|
|
33
|
+
expect(lumDiff).toBeLessThan(0.05);
|
|
34
|
+
});
|
|
35
|
+
it('returns a hex string', () => {
|
|
36
|
+
expect(oklchLighten('#3182ce', 0.1)).toMatch(/^#[0-9a-f]{6}$/);
|
|
37
|
+
expect(oklchDarken('#3182ce', 0.1)).toMatch(/^#[0-9a-f]{6}$/);
|
|
38
|
+
});
|
|
39
|
+
it('falls back to input on parse failure', () => {
|
|
40
|
+
expect(oklchLighten('not-a-color', 0.1)).toBe('not-a-color');
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe('oklchSetChroma', () => {
|
|
44
|
+
it('reducing chroma toward 0 desaturates a color', () => {
|
|
45
|
+
const vivid = '#ff3366';
|
|
46
|
+
const muted = oklchSetChroma(vivid, 0.1);
|
|
47
|
+
// Muted version's R/G/B channels should be much closer to each other than vivid.
|
|
48
|
+
const parse = (h) => [
|
|
49
|
+
parseInt(h.slice(1, 3), 16),
|
|
50
|
+
parseInt(h.slice(3, 5), 16),
|
|
51
|
+
parseInt(h.slice(5, 7), 16),
|
|
52
|
+
];
|
|
53
|
+
const [vr, vg, vb] = parse(vivid);
|
|
54
|
+
const [mr, mg, mb] = parse(muted);
|
|
55
|
+
const vSpread = Math.max(vr, vg, vb) - Math.min(vr, vg, vb);
|
|
56
|
+
const mSpread = Math.max(mr, mg, mb) - Math.min(mr, mg, mb);
|
|
57
|
+
expect(mSpread).toBeLessThan(vSpread);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
describe('contrastRatio', () => {
|
|
61
|
+
it('white-on-black is the maximum (≈21)', () => {
|
|
62
|
+
expect(contrastRatio('#ffffff', '#000000')).toBeCloseTo(21, 0);
|
|
63
|
+
});
|
|
64
|
+
it('same-color is 1', () => {
|
|
65
|
+
expect(contrastRatio('#aabbcc', '#aabbcc')).toBeCloseTo(1, 5);
|
|
66
|
+
});
|
|
67
|
+
it('is symmetric', () => {
|
|
68
|
+
expect(contrastRatio('#222', '#ddd')).toBeCloseTo(contrastRatio('#ddd', '#222'), 5);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
describe('pickContrastingText', () => {
|
|
72
|
+
it('returns dark text for light backgrounds', () => {
|
|
73
|
+
expect(pickContrastingText('#ffffff')).toBe('#1a202c');
|
|
74
|
+
expect(pickContrastingText('#f7fafc')).toBe('#1a202c');
|
|
75
|
+
});
|
|
76
|
+
it('returns light text for dark backgrounds', () => {
|
|
77
|
+
expect(pickContrastingText('#000000')).toBe('#f7fafc');
|
|
78
|
+
expect(pickContrastingText('#1a202c')).toBe('#f7fafc');
|
|
79
|
+
});
|
|
80
|
+
it('respects custom light/dark options', () => {
|
|
81
|
+
expect(pickContrastingText('#000000', '#fefefe', '#020202')).toBe('#fefefe');
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
describe('deriveScale', () => {
|
|
85
|
+
it('produces 5 stops with base in the middle', () => {
|
|
86
|
+
const scale = deriveScale('#3182ce', 0.15);
|
|
87
|
+
expect(scale.base).toBe('#3182ce');
|
|
88
|
+
expect(relativeLuminance(scale.lighter2)).toBeGreaterThan(relativeLuminance(scale.lighter1));
|
|
89
|
+
expect(relativeLuminance(scale.lighter1)).toBeGreaterThan(relativeLuminance(scale.base));
|
|
90
|
+
expect(relativeLuminance(scale.base)).toBeGreaterThan(relativeLuminance(scale.darker1));
|
|
91
|
+
expect(relativeLuminance(scale.darker1)).toBeGreaterThan(relativeLuminance(scale.darker2));
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
//# sourceMappingURL=colorUtils.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colorUtils.test.js","sourceRoot":"","sources":["../../src/__tests__/colorUtils.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ import { VIEWPORT_PRESETS } from '../schemas/Viewport.js';
|
|
|
7
7
|
// ---------------------------------------------------------------------------
|
|
8
8
|
function makeTemplateBlock(overrides = {}) {
|
|
9
9
|
return {
|
|
10
|
-
template: '
|
|
10
|
+
template: 'title',
|
|
11
11
|
id: 'test-title-1',
|
|
12
12
|
duration: 5,
|
|
13
13
|
audioSegment: 0,
|
|
@@ -35,7 +35,7 @@ const defaultContext = {
|
|
|
35
35
|
// ---------------------------------------------------------------------------
|
|
36
36
|
describe('getLayers', () => {
|
|
37
37
|
it('generates layers for a known template block', () => {
|
|
38
|
-
const block = makeTemplateBlock({ template: '
|
|
38
|
+
const block = makeTemplateBlock({ template: 'title', title: 'Test Title' });
|
|
39
39
|
const layers = getLayers(block, defaultContext);
|
|
40
40
|
expect(Array.isArray(layers)).toBe(true);
|
|
41
41
|
expect(layers.length).toBeGreaterThan(0);
|
|
@@ -68,6 +68,30 @@ describe('getLayers', () => {
|
|
|
68
68
|
const layers = getLayers(block, defaultContext);
|
|
69
69
|
expect(layers).toEqual(existingLayers);
|
|
70
70
|
});
|
|
71
|
+
it('resolves legacy template aliases through TEMPLATE_ALIASES', () => {
|
|
72
|
+
// Regression: `getLayers` previously did `block.template in templateRegistry`
|
|
73
|
+
// without alias resolution, so docs authored with the legacy long ids
|
|
74
|
+
// (`titleBlock`, `quoteBlock`, `mapBlock`, `listBlock`) rendered as
|
|
75
|
+
// empty SVG cards in the linear/document view — `hasTemplate()` accepts
|
|
76
|
+
// the alias, so `isAnnotatedBlock` returns true and the card wrapper
|
|
77
|
+
// renders, but the registry lookup below would miss the alias and the
|
|
78
|
+
// layer array came back empty.
|
|
79
|
+
const aliasedToCanonical = [
|
|
80
|
+
['titleBlock', 'title'],
|
|
81
|
+
['quoteBlock', 'quote'],
|
|
82
|
+
['listBlock', 'list'],
|
|
83
|
+
];
|
|
84
|
+
for (const [alias] of aliasedToCanonical) {
|
|
85
|
+
const block = makeTemplateBlock({
|
|
86
|
+
template: alias,
|
|
87
|
+
title: 'Aliased',
|
|
88
|
+
items: ['a', 'b', 'c'],
|
|
89
|
+
quote: 'q',
|
|
90
|
+
});
|
|
91
|
+
const layers = getLayers(block, defaultContext);
|
|
92
|
+
expect(layers.length).toBeGreaterThan(0);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
71
95
|
it('returns empty array for unknown template', () => {
|
|
72
96
|
const block = {
|
|
73
97
|
template: 'totally_nonexistent',
|
|
@@ -84,7 +108,7 @@ describe('getLayers', () => {
|
|
|
84
108
|
expect(layers).toEqual([]);
|
|
85
109
|
});
|
|
86
110
|
it('uses default context values when context is omitted', () => {
|
|
87
|
-
const block = makeTemplateBlock({ template: '
|
|
111
|
+
const block = makeTemplateBlock({ template: 'title', title: 'Defaults' });
|
|
88
112
|
const layers = getLayers(block);
|
|
89
113
|
expect(Array.isArray(layers)).toBe(true);
|
|
90
114
|
expect(layers.length).toBeGreaterThan(0);
|
|
@@ -120,7 +144,7 @@ describe('getLayers', () => {
|
|
|
120
144
|
topLayers: [topLayer],
|
|
121
145
|
};
|
|
122
146
|
it('injects persistent bottom and top layers around block layers', () => {
|
|
123
|
-
const block = makeTemplateBlock({ template: '
|
|
147
|
+
const block = makeTemplateBlock({ template: 'title', title: 'With Persistent' });
|
|
124
148
|
const layers = getLayers(block, { ...defaultContext, persistentLayers: persistentConfig });
|
|
125
149
|
// First layer should be the bottom persistent layer
|
|
126
150
|
expect(layers[0]).toEqual(bottomLayer);
|
|
@@ -131,7 +155,7 @@ describe('getLayers', () => {
|
|
|
131
155
|
});
|
|
132
156
|
it('respects useBottomLayer: false opt-out', () => {
|
|
133
157
|
const block = makeTemplateBlock({
|
|
134
|
-
template: '
|
|
158
|
+
template: 'title',
|
|
135
159
|
title: 'No Bottom',
|
|
136
160
|
useBottomLayer: false,
|
|
137
161
|
});
|
|
@@ -143,7 +167,7 @@ describe('getLayers', () => {
|
|
|
143
167
|
});
|
|
144
168
|
it('respects useTopLayer: false opt-out', () => {
|
|
145
169
|
const block = makeTemplateBlock({
|
|
146
|
-
template: '
|
|
170
|
+
template: 'title',
|
|
147
171
|
title: 'No Top',
|
|
148
172
|
useTopLayer: false,
|
|
149
173
|
});
|
|
@@ -154,7 +178,7 @@ describe('getLayers', () => {
|
|
|
154
178
|
expect(layers[layers.length - 1]).not.toEqual(topLayer);
|
|
155
179
|
});
|
|
156
180
|
it('skips injection when no persistent layers are configured', () => {
|
|
157
|
-
const block = makeTemplateBlock({ template: '
|
|
181
|
+
const block = makeTemplateBlock({ template: 'title', title: 'No Persistent' });
|
|
158
182
|
const withoutPersistent = getLayers(block, defaultContext);
|
|
159
183
|
const withEmptyPersistent = getLayers(block, {
|
|
160
184
|
...defaultContext,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getLayers.test.js","sourceRoot":"","sources":["../../src/__tests__/getLayers.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,SAAS,EAAiB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,iBAAiB,CAAC,YAAoC,EAAE;IAC/D,OAAO;QACL,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"getLayers.test.js","sourceRoot":"","sources":["../../src/__tests__/getLayers.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iconResolve.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/iconResolve.test.ts"],"names":[],"mappings":""}
|