@bendyline/squisq 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/NOTICE.md +24 -0
- package/dist/{ContentContainer-BXUlIf18.d.ts → ContentContainer-B2w9sUoL.d.ts} +15 -0
- package/dist/{Doc-DynJleo-.d.ts → Doc-BubIpWsp.d.ts} +1 -1
- package/dist/{ImageEditDoc-Ca4Tr9uN.d.ts → ImageEditDoc-CGxk5CHc.d.ts} +1 -1
- package/dist/{annotationCoercion-Dr_DY9Hx.d.ts → annotationCoercion-PtRQhk5V.d.ts} +1 -1
- package/dist/chunk-2L55443L.js +0 -0
- package/dist/{chunk-VWCJ2WXC.js → chunk-2ZWIXGAC.js} +0 -1
- package/dist/{chunk-VYFRI7R6.js → chunk-32R2RZAO.js} +72 -3
- package/dist/chunk-3IGPAPQ7.js +645 -0
- package/dist/{chunk-QE7TWGVT.js → chunk-4VOD55SX.js} +0 -1
- package/dist/{chunk-3E5F2XMR.js → chunk-67L6WRJN.js} +0 -1
- package/dist/{chunk-5DKBFXPY.js → chunk-6ECMNUIP.js} +26 -18
- package/dist/{chunk-JI77MGAK.js → chunk-7ARJZYQY.js} +159 -120
- package/dist/{chunk-DBS6RIFL.js → chunk-7N4G32LG.js} +0 -1
- package/dist/{chunk-JOQYPRDZ.js → chunk-7YEZFHLS.js} +10 -8
- package/dist/{chunk-2UQOHYE2.js → chunk-7ZAAICW4.js} +0 -1
- package/dist/{chunk-66QO7XFB.js → chunk-ACZOVWX3.js} +117 -7
- package/dist/{chunk-5J4HKRJF.js → chunk-BAOV476U.js} +0 -1
- package/dist/chunk-BCCXTMN5.js +699 -0
- package/dist/{chunk-JHZWYRSW.js → chunk-C33GTPUZ.js} +11 -4
- package/dist/{chunk-QUUPYOSP.js → chunk-CB45YGAM.js} +2 -3
- package/dist/{chunk-XNLB57UD.js → chunk-DYPMOPIW.js} +18 -2
- package/dist/{chunk-VR7UPJ7C.js → chunk-FCG3BIZN.js} +12 -1
- package/dist/{chunk-5UYI3RJB.js → chunk-FDYDYL77.js} +54 -40
- package/dist/{chunk-OTKVFVL6.js → chunk-I2O6W7DX.js} +116 -44
- package/dist/{chunk-Q7LROV2H.js → chunk-NKNMGIIN.js} +0 -1
- package/dist/chunk-OPO5K4DZ.js +241 -0
- package/dist/{chunk-TUWMK62B.js → chunk-PUS54YU6.js} +45 -2
- package/dist/chunk-QKPXHDLR.js +0 -0
- package/dist/{chunk-GZY66SDN.js → chunk-R3KTTOMS.js} +0 -1
- package/dist/{chunk-ILWDXLUK.js → chunk-RS5AP3J4.js} +49 -10
- package/dist/chunk-WV5ARNDA.js +0 -0
- package/dist/{chunk-4X3JQXNM.js → chunk-XOFT65EX.js} +1 -2
- package/dist/{chunk-FVTQSNR7.js → chunk-XRW6P7IF.js} +13 -5
- package/dist/chunk-XWNNA3KE.js +0 -0
- package/dist/chunk-YZNGMV3G.js +0 -0
- package/dist/{chunk-R2YZTCLO.js → chunk-ZQKZSJAX.js} +1 -2
- package/dist/doc/index.d.ts +27 -12
- package/dist/doc/index.js +16 -17
- package/dist/generate/index.d.ts +2 -2
- package/dist/generate/index.js +2 -3
- package/dist/icons/index.js +3 -4
- package/dist/icons/inlineIconMarker.js +1 -2
- package/dist/imageEdit/index.d.ts +48 -17
- package/dist/imageEdit/index.js +3 -4
- package/dist/index.d.ts +11 -11
- package/dist/index.js +60 -33
- package/dist/jsonForm/index.d.ts +10 -3
- package/dist/jsonForm/index.js +8 -7
- package/dist/markdown/index.d.ts +75 -11
- package/dist/markdown/index.js +32 -7
- package/dist/{materializePageSection-DDzubQXo.d.ts → materializePageSection-wSLA2A1g.d.ts} +2 -2
- package/dist/narration/index.d.ts +16 -3
- package/dist/narration/index.js +13 -14
- package/dist/random/index.d.ts +11 -2
- package/dist/random/index.js +2 -3
- package/dist/recommend/index.d.ts +1 -1
- package/dist/recommend/index.js +3 -4
- package/dist/schemas/index.d.ts +5 -5
- package/dist/schemas/index.js +5 -6
- package/dist/spatial/index.d.ts +2 -1
- package/dist/spatial/index.js +1 -2
- package/dist/storage/index.d.ts +4 -2
- package/dist/storage/index.js +1 -2
- package/dist/{themeLibrary-B72m0W1y.d.ts → themeLibrary-DU9mUmVl.d.ts} +1 -1
- package/dist/timing/index.js +3 -4
- package/dist/transform/index.d.ts +3 -3
- package/dist/transform/index.js +6 -7
- package/dist/{types-C4kiRn_k.d.ts → types-8QjefM9J.d.ts} +38 -2
- package/dist/{types-BwMPl2CB.d.ts → types-CUNc9biN.d.ts} +24 -1
- package/dist/versions/index.d.ts +14 -11
- package/dist/versions/index.js +2 -3
- package/package.json +4 -2
- package/dist/chunk-2UQOHYE2.js.map +0 -1
- package/dist/chunk-3E5F2XMR.js.map +0 -1
- package/dist/chunk-4X3JQXNM.js.map +0 -1
- package/dist/chunk-5DKBFXPY.js.map +0 -1
- package/dist/chunk-5J4HKRJF.js.map +0 -1
- package/dist/chunk-5UYI3RJB.js.map +0 -1
- package/dist/chunk-66QO7XFB.js.map +0 -1
- package/dist/chunk-AMIR72JP.js +0 -380
- package/dist/chunk-AMIR72JP.js.map +0 -1
- package/dist/chunk-DBS6RIFL.js.map +0 -1
- package/dist/chunk-DNJKBAI7.js +0 -1
- package/dist/chunk-DNJKBAI7.js.map +0 -1
- package/dist/chunk-ET53IIEP.js +0 -1
- package/dist/chunk-ET53IIEP.js.map +0 -1
- package/dist/chunk-FVTQSNR7.js.map +0 -1
- package/dist/chunk-GZY66SDN.js.map +0 -1
- package/dist/chunk-ILWDXLUK.js.map +0 -1
- package/dist/chunk-JHZWYRSW.js.map +0 -1
- package/dist/chunk-JI77MGAK.js.map +0 -1
- package/dist/chunk-JOQYPRDZ.js.map +0 -1
- package/dist/chunk-OTKVFVL6.js.map +0 -1
- package/dist/chunk-PGGGKYWG.js +0 -1
- package/dist/chunk-PGGGKYWG.js.map +0 -1
- package/dist/chunk-Q7LROV2H.js.map +0 -1
- package/dist/chunk-QE7TWGVT.js.map +0 -1
- package/dist/chunk-QUUPYOSP.js.map +0 -1
- package/dist/chunk-R2GC6RLD.js +0 -344
- package/dist/chunk-R2GC6RLD.js.map +0 -1
- package/dist/chunk-R2YZTCLO.js.map +0 -1
- package/dist/chunk-S7A5D7ZJ.js +0 -174
- package/dist/chunk-S7A5D7ZJ.js.map +0 -1
- package/dist/chunk-TUWMK62B.js.map +0 -1
- package/dist/chunk-V543AI2F.js +0 -1
- package/dist/chunk-V543AI2F.js.map +0 -1
- package/dist/chunk-VR7UPJ7C.js.map +0 -1
- package/dist/chunk-VWCJ2WXC.js.map +0 -1
- package/dist/chunk-VYFRI7R6.js.map +0 -1
- package/dist/chunk-XNLB57UD.js.map +0 -1
- package/dist/chunk-ZLQKNOZQ.js +0 -1
- package/dist/chunk-ZLQKNOZQ.js.map +0 -1
- package/dist/doc/index.js.map +0 -1
- package/dist/generate/index.js.map +0 -1
- package/dist/icons/index.js.map +0 -1
- package/dist/icons/inlineIconMarker.js.map +0 -1
- package/dist/imageEdit/index.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/jsonForm/index.js.map +0 -1
- package/dist/markdown/index.js.map +0 -1
- package/dist/narration/index.js.map +0 -1
- package/dist/random/index.js.map +0 -1
- package/dist/recommend/index.js.map +0 -1
- package/dist/schemas/index.js.map +0 -1
- package/dist/spatial/index.js.map +0 -1
- package/dist/storage/index.js.map +0 -1
- package/dist/timing/index.js.map +0 -1
- package/dist/transform/index.js.map +0 -1
- package/dist/versions/index.js.map +0 -1
- package/src/__tests__/animationUtils.test.ts +0 -117
- package/src/__tests__/annotationCoercion.test.ts +0 -243
- package/src/__tests__/applyNarrationTiming.test.ts +0 -190
- package/src/__tests__/applyRenderStyle.test.ts +0 -146
- package/src/__tests__/asciiDiagramBattle.test.ts +0 -246
- package/src/__tests__/asciiDiagramDetect.test.ts +0 -162
- package/src/__tests__/asciiDiagramMapping.test.ts +0 -38
- package/src/__tests__/asciiDiagramParse.test.ts +0 -233
- package/src/__tests__/asciiDiagramPipeline.test.ts +0 -273
- package/src/__tests__/asciiDiagramRender.test.ts +0 -162
- package/src/__tests__/asciiDiagramRepair.test.ts +0 -84
- package/src/__tests__/asciiTimelineDetect.test.ts +0 -157
- package/src/__tests__/asciiTimelineParse.test.ts +0 -205
- package/src/__tests__/asciiTimelinePipeline.test.ts +0 -349
- package/src/__tests__/asciiTimelineRender.test.ts +0 -376
- package/src/__tests__/atmosphereLayers.test.ts +0 -108
- package/src/__tests__/attrTokens.test.ts +0 -167
- package/src/__tests__/colorUtils.test.ts +0 -112
- package/src/__tests__/contentContainer.test.ts +0 -325
- package/src/__tests__/contentExtractor.test.ts +0 -243
- package/src/__tests__/coverBlock.test.ts +0 -310
- package/src/__tests__/customTemplateSample.test.ts +0 -144
- package/src/__tests__/customTemplatesFrontmatter.test.ts +0 -221
- package/src/__tests__/customThemesFrontmatter.test.ts +0 -146
- package/src/__tests__/dataTable.test.ts +0 -145
- package/src/__tests__/diagramBlock.test.ts +0 -122
- package/src/__tests__/diagramLayout.test.ts +0 -134
- package/src/__tests__/diagramText.test.ts +0 -26
- package/src/__tests__/docToMarkdownMedia.test.ts +0 -83
- package/src/__tests__/drawing.test.ts +0 -109
- package/src/__tests__/drawingBlock.test.ts +0 -124
- package/src/__tests__/drawingLayout.test.ts +0 -171
- package/src/__tests__/fixtures/asciiDiagramBattle.ts +0 -512
- package/src/__tests__/fixtures/asciiDiagrams.ts +0 -287
- package/src/__tests__/fixtures/asciiTimelines.ts +0 -35
- package/src/__tests__/fixtures/treeviewFixtures.ts +0 -243
- package/src/__tests__/geohash.test.ts +0 -110
- package/src/__tests__/getLayers.test.ts +0 -243
- package/src/__tests__/getLayersFallback.test.ts +0 -103
- package/src/__tests__/haversine.test.ts +0 -63
- package/src/__tests__/iconResolve.test.ts +0 -122
- package/src/__tests__/imageEditExportSvg.test.ts +0 -70
- package/src/__tests__/imageEditState.test.ts +0 -74
- package/src/__tests__/imageEditVersions.test.ts +0 -243
- package/src/__tests__/inferDocumentTitle.test.ts +0 -50
- package/src/__tests__/inlineIconMarker.test.ts +0 -36
- package/src/__tests__/inputDescriptors.test.ts +0 -162
- package/src/__tests__/jsonForm.chooseControl.test.ts +0 -86
- package/src/__tests__/jsonForm.evaluateWhen.test.ts +0 -59
- package/src/__tests__/jsonForm.inferSchema.test.ts +0 -25
- package/src/__tests__/jsonForm.pointer.test.ts +0 -149
- package/src/__tests__/jsonForm.tokens.test.ts +0 -84
- package/src/__tests__/layoutBlock.test.ts +0 -83
- package/src/__tests__/layoutLayout.test.ts +0 -169
- package/src/__tests__/localForageAdapter.test.ts +0 -155
- package/src/__tests__/majorApiTypes.test.ts +0 -18
- package/src/__tests__/markdown.test.ts +0 -1009
- package/src/__tests__/markdownIcons.test.ts +0 -104
- package/src/__tests__/markdownSanitize.test.ts +0 -81
- package/src/__tests__/markdownToDoc.test.ts +0 -957
- package/src/__tests__/matchFontFamily.test.ts +0 -114
- package/src/__tests__/materializeBlockLayers.test.ts +0 -167
- package/src/__tests__/materializePageSections.test.ts +0 -404
- package/src/__tests__/materializeTestUtils.ts +0 -17
- package/src/__tests__/mediaAnnotations.test.ts +0 -91
- package/src/__tests__/mediaSchedule.test.ts +0 -118
- package/src/__tests__/narrationAlign.test.ts +0 -150
- package/src/__tests__/narrationFeatures.test.ts +0 -71
- package/src/__tests__/narrationNuclei.test.ts +0 -45
- package/src/__tests__/narrationPacing.test.ts +0 -189
- package/src/__tests__/narrationScript.test.ts +0 -149
- package/src/__tests__/narrationSessionRepro.test.ts +0 -62
- package/src/__tests__/narrationSidecar.test.ts +0 -88
- package/src/__tests__/narrationSyllables.test.ts +0 -65
- package/src/__tests__/narrationTestSignals.ts +0 -167
- package/src/__tests__/narrationVad.test.ts +0 -66
- package/src/__tests__/pageStyle.test.ts +0 -258
- package/src/__tests__/pandocAttrParse.test.ts +0 -187
- package/src/__tests__/recommendTemplates.test.ts +0 -183
- package/src/__tests__/resolveDocTheme.test.ts +0 -69
- package/src/__tests__/rootExports.test.ts +0 -61
- package/src/__tests__/scopedContentContainer.test.ts +0 -109
- package/src/__tests__/seededRandom.test.ts +0 -142
- package/src/__tests__/shapeGeometry.test.ts +0 -138
- package/src/__tests__/shapeVocabulary.test.ts +0 -133
- package/src/__tests__/storage.test.ts +0 -60
- package/src/__tests__/structuredData.test.ts +0 -249
- package/src/__tests__/surface.test.ts +0 -68
- package/src/__tests__/templateAnnotationParse.test.ts +0 -173
- package/src/__tests__/templateInputs.test.ts +0 -69
- package/src/__tests__/templateMetadata.test.ts +0 -32
- package/src/__tests__/templates.test.ts +0 -710
- package/src/__tests__/themeCompile.test.ts +0 -225
- package/src/__tests__/themeValidator.test.ts +0 -131
- package/src/__tests__/timing.test.ts +0 -167
- package/src/__tests__/transformProvenance.test.ts +0 -160
- package/src/__tests__/transformV2.test.ts +0 -163
- package/src/__tests__/transitionNormalize.test.ts +0 -61
- package/src/__tests__/treeviewBattle.test.ts +0 -76
- package/src/__tests__/treeviewDetect.test.ts +0 -168
- package/src/__tests__/treeviewParse.test.ts +0 -118
- package/src/__tests__/treeviewPipeline.test.ts +0 -183
- package/src/__tests__/treeviewRender.test.ts +0 -91
- package/src/__tests__/validateDoc.test.ts +0 -260
- package/src/__tests__/versions.test.ts +0 -459
- package/src/doc/annotationBlocks.ts +0 -117
- package/src/doc/applyNarrationTiming.ts +0 -244
- package/src/doc/asciiDiagram/chars.ts +0 -210
- package/src/doc/asciiDiagram/detect.ts +0 -175
- package/src/doc/asciiDiagram/index.ts +0 -38
- package/src/doc/asciiDiagram/mapping.ts +0 -225
- package/src/doc/asciiDiagram/parse.ts +0 -1095
- package/src/doc/asciiDiagram/render.ts +0 -963
- package/src/doc/asciiDiagram/repair.ts +0 -400
- package/src/doc/asciiDiagram/types.ts +0 -65
- package/src/doc/asciiTimeline/detect.ts +0 -138
- package/src/doc/asciiTimeline/index.ts +0 -26
- package/src/doc/asciiTimeline/mapping.ts +0 -43
- package/src/doc/asciiTimeline/parse.ts +0 -870
- package/src/doc/asciiTimeline/render.ts +0 -427
- package/src/doc/asciiTimeline/types.ts +0 -73
- package/src/doc/asciiTimeline/wrappedFlow.ts +0 -427
- package/src/doc/audioMapping.ts +0 -442
- package/src/doc/customTemplatesFrontmatter.ts +0 -273
- package/src/doc/customThemesFrontmatter.ts +0 -95
- package/src/doc/docToMarkdown.ts +0 -284
- package/src/doc/index.ts +0 -161
- package/src/doc/markdownToDoc.ts +0 -1054
- package/src/doc/materializeBlockLayers.ts +0 -465
- package/src/doc/mediaAnnotations.ts +0 -120
- package/src/doc/page/PageSection.ts +0 -174
- package/src/doc/page/materializePageSection.ts +0 -616
- package/src/doc/page/resolvePageBlock.ts +0 -108
- package/src/doc/page/sectionExtractors.ts +0 -466
- package/src/doc/pageCss.ts +0 -628
- package/src/doc/resolveDocTheme.ts +0 -56
- package/src/doc/standaloneAnnotation.ts +0 -58
- package/src/doc/structuredData.ts +0 -301
- package/src/doc/templateInputs.ts +0 -424
- package/src/doc/templates/__tests__/customTemplate.test.ts +0 -170
- package/src/doc/templates/__tests__/customTemplateRegistry.test.ts +0 -124
- package/src/doc/templates/__tests__/listBlock.test.ts +0 -64
- package/src/doc/templates/accentImage.ts +0 -362
- package/src/doc/templates/captionUtils.ts +0 -56
- package/src/doc/templates/comparisonBar.ts +0 -173
- package/src/doc/templates/coverBlock.ts +0 -255
- package/src/doc/templates/customTemplate.ts +0 -51
- package/src/doc/templates/dataTable.ts +0 -102
- package/src/doc/templates/dateEvent.ts +0 -147
- package/src/doc/templates/definitionCard.ts +0 -140
- package/src/doc/templates/diagramBlock.ts +0 -403
- package/src/doc/templates/diagramLayout.ts +0 -159
- package/src/doc/templates/drawingBlock.ts +0 -325
- package/src/doc/templates/drawingLayout.ts +0 -539
- package/src/doc/templates/factCard.ts +0 -146
- package/src/doc/templates/fallbackBlock.ts +0 -123
- package/src/doc/templates/featureBlock.ts +0 -209
- package/src/doc/templates/fullBleedQuote.ts +0 -83
- package/src/doc/templates/imageWithCaption.ts +0 -186
- package/src/doc/templates/index.ts +0 -642
- package/src/doc/templates/inputDescriptors.ts +0 -451
- package/src/doc/templates/layoutBlock.ts +0 -43
- package/src/doc/templates/layoutLayout.ts +0 -243
- package/src/doc/templates/listBlock.ts +0 -207
- package/src/doc/templates/mapBlock.ts +0 -138
- package/src/doc/templates/metadata.ts +0 -130
- package/src/doc/templates/persistentLayers.ts +0 -526
- package/src/doc/templates/photoGrid.ts +0 -190
- package/src/doc/templates/pullQuote.ts +0 -141
- package/src/doc/templates/quoteBlock.ts +0 -141
- package/src/doc/templates/registry.ts +0 -88
- package/src/doc/templates/sectionHeader.ts +0 -120
- package/src/doc/templates/statHighlight.ts +0 -146
- package/src/doc/templates/templateNames.ts +0 -22
- package/src/doc/templates/timelineBlock.ts +0 -613
- package/src/doc/templates/titleBlock.ts +0 -150
- package/src/doc/templates/tokens/__tests__/resolveTokens.test.ts +0 -487
- package/src/doc/templates/tokens/resolveTokens.ts +0 -453
- package/src/doc/templates/treeBlock.ts +0 -131
- package/src/doc/templates/twoColumn.ts +0 -263
- package/src/doc/templates/videoPullQuote.ts +0 -142
- package/src/doc/templates/videoWithCaption.ts +0 -135
- package/src/doc/treeview/chars.ts +0 -72
- package/src/doc/treeview/detect.ts +0 -145
- package/src/doc/treeview/index.ts +0 -30
- package/src/doc/treeview/mapping.ts +0 -95
- package/src/doc/treeview/parse.ts +0 -201
- package/src/doc/treeview/render.ts +0 -41
- package/src/doc/treeview/types.ts +0 -43
- package/src/doc/utils/animationUtils.ts +0 -399
- package/src/doc/utils/applyRenderStyle.ts +0 -106
- package/src/doc/utils/diagramText.ts +0 -78
- package/src/doc/utils/imageTreatment.ts +0 -70
- package/src/doc/utils/nearest.ts +0 -59
- package/src/doc/utils/shapeGeometry.ts +0 -614
- package/src/doc/utils/themeUtils.ts +0 -243
- package/src/doc/validate.ts +0 -575
- package/src/generate/contentExtractor.ts +0 -921
- package/src/generate/index.ts +0 -18
- package/src/generate/templateMapper.ts +0 -177
- package/src/icons/iconData.ts +0 -31
- package/src/icons/index.ts +0 -26
- package/src/icons/inlineIconMarker.ts +0 -73
- package/src/icons/resolve.ts +0 -139
- package/src/imageEdit/ImageEditVersionManager.ts +0 -73
- package/src/imageEdit/export.ts +0 -410
- package/src/imageEdit/index.ts +0 -72
- package/src/imageEdit/persistence.ts +0 -113
- package/src/imageEdit/state.ts +0 -112
- package/src/imageEdit/versionPaths.ts +0 -44
- package/src/imageEdit/versions.ts +0 -152
- package/src/index.ts +0 -15
- package/src/internal/immutable.ts +0 -58
- package/src/jsonForm/chooseControl.ts +0 -88
- package/src/jsonForm/evaluateWhen.ts +0 -59
- package/src/jsonForm/index.ts +0 -32
- package/src/jsonForm/inferSchema.ts +0 -25
- package/src/jsonForm/pointer.ts +0 -154
- package/src/jsonForm/tokens.ts +0 -78
- package/src/jsonForm/types.ts +0 -167
- package/src/markdown/annotationCoercion.ts +0 -295
- package/src/markdown/attrTokens.ts +0 -243
- package/src/markdown/convert.ts +0 -1353
- package/src/markdown/htmlParse.ts +0 -212
- package/src/markdown/index.ts +0 -152
- package/src/markdown/parse.ts +0 -103
- package/src/markdown/sanitize.ts +0 -318
- package/src/markdown/stringify.ts +0 -207
- package/src/markdown/types.ts +0 -710
- package/src/markdown/utils.ts +0 -459
- package/src/narration/align.ts +0 -514
- package/src/narration/features.ts +0 -231
- package/src/narration/index.ts +0 -86
- package/src/narration/nuclei.ts +0 -118
- package/src/narration/pacing.ts +0 -211
- package/src/narration/script.ts +0 -239
- package/src/narration/session.ts +0 -100
- package/src/narration/sidecar.ts +0 -187
- package/src/narration/syllables.ts +0 -85
- package/src/narration/trace.ts +0 -50
- package/src/narration/types.ts +0 -299
- package/src/narration/vad.ts +0 -131
- package/src/ngeohash.d.ts +0 -11
- package/src/random/SeededRandom.ts +0 -127
- package/src/random/index.ts +0 -1
- package/src/recommend/index.ts +0 -16
- package/src/recommend/numberHighlight.ts +0 -25
- package/src/recommend/templates.ts +0 -393
- package/src/schemas/BlockTemplates.ts +0 -1046
- package/src/schemas/CustomTemplates.ts +0 -126
- package/src/schemas/Doc.ts +0 -1073
- package/src/schemas/ImageEditDoc.ts +0 -102
- package/src/schemas/LayoutStrategy.ts +0 -178
- package/src/schemas/Media.ts +0 -179
- package/src/schemas/MediaProvider.ts +0 -70
- package/src/schemas/PageStyle.ts +0 -213
- package/src/schemas/Theme.ts +0 -413
- package/src/schemas/Transitions.ts +0 -224
- package/src/schemas/Types.ts +0 -15
- package/src/schemas/Viewport.ts +0 -91
- package/src/schemas/colorUtils.ts +0 -219
- package/src/schemas/fontStacks.ts +0 -339
- package/src/schemas/index.ts +0 -31
- package/src/schemas/pageStyleDefaults.ts +0 -204
- package/src/schemas/themeCompile.ts +0 -244
- package/src/schemas/themeConstants.ts +0 -2
- package/src/schemas/themeLibrary.ts +0 -60
- package/src/schemas/themeValidator.ts +0 -609
- package/src/schemas/themes/bold.json +0 -77
- package/src/schemas/themes/cinematic.json +0 -143
- package/src/schemas/themes/documentary.json +0 -125
- package/src/schemas/themes/gezellig.json +0 -123
- package/src/schemas/themes/index.ts +0 -53
- package/src/schemas/themes/magazine.json +0 -126
- package/src/schemas/themes/minimalist.json +0 -74
- package/src/schemas/themes/morning-light.json +0 -117
- package/src/schemas/themes/standard-dark.json +0 -109
- package/src/schemas/themes/standard.json +0 -98
- package/src/schemas/themes/tech-dark.json +0 -143
- package/src/schemas/themes/warm-earth.json +0 -74
- package/src/spatial/Geohash.ts +0 -196
- package/src/spatial/Haversine.ts +0 -59
- package/src/spatial/index.ts +0 -2
- package/src/storage/ContentContainer.ts +0 -220
- package/src/storage/LocalForageAdapter.ts +0 -103
- package/src/storage/LocalStorageAdapter.ts +0 -57
- package/src/storage/MediaProviderFromContainer.ts +0 -92
- package/src/storage/MemoryStorageAdapter.ts +0 -37
- package/src/storage/ScopedContentContainer.ts +0 -143
- package/src/storage/Storage.ts +0 -28
- package/src/storage/index.ts +0 -9
- package/src/timing/index.ts +0 -17
- package/src/timing/narrationTiming.ts +0 -220
- package/src/timing/readingTime.ts +0 -94
- package/src/transform/applyTransform.ts +0 -122
- package/src/transform/blockAnalyzer.ts +0 -181
- package/src/transform/index.ts +0 -23
- package/src/transform/registry.ts +0 -217
- package/src/transform/styles/dataDriven.ts +0 -18
- package/src/transform/styles/documentary.ts +0 -18
- package/src/transform/styles/index.ts +0 -5
- package/src/transform/styles/magazine.ts +0 -19
- package/src/transform/styles/minimal.ts +0 -18
- package/src/transform/styles/narrative.ts +0 -19
- package/src/transform/templateSelector.ts +0 -389
- package/src/transform/timingAllocator.ts +0 -257
- package/src/transform/types.ts +0 -158
- package/src/versions/DocumentVersionManager.ts +0 -70
- package/src/versions/gitignore.ts +0 -34
- package/src/versions/index.ts +0 -56
- package/src/versions/operations.ts +0 -144
- package/src/versions/paths.ts +0 -51
- package/src/versions/snapshotStore.ts +0 -202
- package/src/versions/timestamp.ts +0 -48
- package/src/versions/types.ts +0 -93
|
@@ -1,339 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Font Stacks
|
|
3
|
-
*
|
|
4
|
-
* Curated registry of font families used by built-in themes and offered in
|
|
5
|
-
* the theme customizer. Each stack has a stable `id` (referenced by JSON
|
|
6
|
-
* theme files via `{ stackId }`) and a CSS `family` string that resolves
|
|
7
|
-
* to the actual font when rendered.
|
|
8
|
-
*
|
|
9
|
-
* Themes never carry raw CSS font strings — they reference a `stackId` or
|
|
10
|
-
* specify a `{ custom: { name, fallback } }` form, both of which resolve
|
|
11
|
-
* here at render time.
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
import type { FontFamily, FontFamilyKind } from './Theme.js';
|
|
15
|
-
|
|
16
|
-
export interface FontStack {
|
|
17
|
-
/** Stable identifier referenced by Theme JSON. */
|
|
18
|
-
id: string;
|
|
19
|
-
/** Display label for pickers. */
|
|
20
|
-
label: string;
|
|
21
|
-
/** Full CSS font-family string with safe fallbacks. */
|
|
22
|
-
family: string;
|
|
23
|
-
/** Categorical bucket for the picker UI. */
|
|
24
|
-
kind: FontFamilyKind;
|
|
25
|
-
/**
|
|
26
|
-
* Google Fonts family name, when this stack is served by Google Fonts.
|
|
27
|
-
* Used by exports that bundle a `<link>` to fonts.googleapis.com so the
|
|
28
|
-
* face renders correctly even when the host page doesn't preload it.
|
|
29
|
-
* Omit (or set to undefined) for purely system stacks.
|
|
30
|
-
*/
|
|
31
|
-
googleFontFamily?: string;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/** All curated stacks, in the order they should appear in pickers. */
|
|
35
|
-
export const AVAILABLE_FONT_STACKS: FontStack[] = [
|
|
36
|
-
// System defaults
|
|
37
|
-
{
|
|
38
|
-
id: 'system-sans',
|
|
39
|
-
label: 'System Sans',
|
|
40
|
-
family: 'system-ui, -apple-system, "Segoe UI", Roboto, sans-serif',
|
|
41
|
-
kind: 'sans',
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
id: 'system-serif',
|
|
45
|
-
label: 'System Serif',
|
|
46
|
-
family: 'Georgia, "Times New Roman", serif',
|
|
47
|
-
kind: 'serif',
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
id: 'system-mono',
|
|
51
|
-
label: 'System Mono',
|
|
52
|
-
family: 'Consolas, "Courier New", monospace',
|
|
53
|
-
kind: 'mono',
|
|
54
|
-
},
|
|
55
|
-
// Curated Google Fonts. `googleFontFamily` is the canonical family
|
|
56
|
-
// name Google serves the face under (used by exports that emit a
|
|
57
|
-
// `<link rel="stylesheet" href="https://fonts.googleapis.com/...">`
|
|
58
|
-
// so the face renders even when the host doesn't preload it).
|
|
59
|
-
{
|
|
60
|
-
id: 'inter',
|
|
61
|
-
label: 'Inter',
|
|
62
|
-
family: '"Inter", "Segoe UI", Roboto, sans-serif',
|
|
63
|
-
kind: 'sans',
|
|
64
|
-
googleFontFamily: 'Inter',
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
id: 'ibm-plex-sans',
|
|
68
|
-
label: 'IBM Plex Sans',
|
|
69
|
-
family: '"IBM Plex Sans", "Segoe UI", Roboto, sans-serif',
|
|
70
|
-
kind: 'sans',
|
|
71
|
-
googleFontFamily: 'IBM Plex Sans',
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
id: 'roboto',
|
|
75
|
-
label: 'Roboto',
|
|
76
|
-
family: '"Roboto", "Segoe UI", Arial, sans-serif',
|
|
77
|
-
kind: 'sans',
|
|
78
|
-
googleFontFamily: 'Roboto',
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
id: 'dm-sans',
|
|
82
|
-
label: 'DM Sans',
|
|
83
|
-
family: '"DM Sans", "Segoe UI", Roboto, sans-serif',
|
|
84
|
-
kind: 'sans',
|
|
85
|
-
googleFontFamily: 'DM Sans',
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
id: 'oswald',
|
|
89
|
-
label: 'Oswald',
|
|
90
|
-
// Condensed grotesques make a far better stand-in for Oswald than
|
|
91
|
-
// Impact/Arial Black, whose extreme weight distorts every layout
|
|
92
|
-
// tuned for the real face.
|
|
93
|
-
family: '"Oswald", "Arial Narrow", "Helvetica Neue Condensed", "Roboto Condensed", sans-serif',
|
|
94
|
-
kind: 'display',
|
|
95
|
-
googleFontFamily: 'Oswald',
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
id: 'playfair',
|
|
99
|
-
label: 'Playfair Display',
|
|
100
|
-
family: '"Playfair Display", Georgia, serif',
|
|
101
|
-
kind: 'serif',
|
|
102
|
-
googleFontFamily: 'Playfair Display',
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
id: 'source-serif',
|
|
106
|
-
label: 'Source Serif',
|
|
107
|
-
family: '"Source Serif 4", "PT Serif", Georgia, serif',
|
|
108
|
-
kind: 'serif',
|
|
109
|
-
googleFontFamily: 'Source Serif 4',
|
|
110
|
-
},
|
|
111
|
-
{
|
|
112
|
-
id: 'merriweather',
|
|
113
|
-
label: 'Merriweather',
|
|
114
|
-
family: '"Merriweather", Georgia, serif',
|
|
115
|
-
kind: 'serif',
|
|
116
|
-
googleFontFamily: 'Merriweather',
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
id: 'lora',
|
|
120
|
-
label: 'Lora',
|
|
121
|
-
family: '"Lora", "Merriweather", Georgia, serif',
|
|
122
|
-
kind: 'serif',
|
|
123
|
-
googleFontFamily: 'Lora',
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
id: 'pt-serif',
|
|
127
|
-
label: 'PT Serif',
|
|
128
|
-
family: '"PT Serif", Georgia, serif',
|
|
129
|
-
kind: 'serif',
|
|
130
|
-
googleFontFamily: 'PT Serif',
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
id: 'crimson',
|
|
134
|
-
label: 'Crimson Text',
|
|
135
|
-
family: '"Crimson Text", Georgia, serif',
|
|
136
|
-
kind: 'serif',
|
|
137
|
-
googleFontFamily: 'Crimson Text',
|
|
138
|
-
},
|
|
139
|
-
{
|
|
140
|
-
id: 'cormorant',
|
|
141
|
-
label: 'Cormorant Garamond',
|
|
142
|
-
family: '"Cormorant Garamond", Garamond, Georgia, serif',
|
|
143
|
-
kind: 'serif',
|
|
144
|
-
googleFontFamily: 'Cormorant Garamond',
|
|
145
|
-
},
|
|
146
|
-
{
|
|
147
|
-
id: 'dm-serif',
|
|
148
|
-
label: 'DM Serif Display',
|
|
149
|
-
family: '"DM Serif Display", Georgia, serif',
|
|
150
|
-
kind: 'display',
|
|
151
|
-
googleFontFamily: 'DM Serif Display',
|
|
152
|
-
},
|
|
153
|
-
{
|
|
154
|
-
id: 'jetbrains-mono',
|
|
155
|
-
label: 'JetBrains Mono',
|
|
156
|
-
family: '"JetBrains Mono", "Fira Code", Consolas, monospace',
|
|
157
|
-
kind: 'mono',
|
|
158
|
-
googleFontFamily: 'JetBrains Mono',
|
|
159
|
-
},
|
|
160
|
-
// Themed system stacks with emoji fallbacks (used by gezellig)
|
|
161
|
-
{
|
|
162
|
-
id: 'system-sans-emoji',
|
|
163
|
-
label: 'System Sans + Emoji',
|
|
164
|
-
family:
|
|
165
|
-
'system-ui, -apple-system, "Segoe UI", Roboto, "OpenMoji Color", "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji", sans-serif',
|
|
166
|
-
kind: 'sans',
|
|
167
|
-
},
|
|
168
|
-
{
|
|
169
|
-
id: 'system-serif-emoji',
|
|
170
|
-
label: 'System Serif + Emoji',
|
|
171
|
-
family:
|
|
172
|
-
'Georgia, "Times New Roman", "OpenMoji Color", "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji", serif',
|
|
173
|
-
kind: 'serif',
|
|
174
|
-
},
|
|
175
|
-
];
|
|
176
|
-
|
|
177
|
-
const STACKS_BY_ID: Record<string, FontStack> = Object.fromEntries(
|
|
178
|
-
AVAILABLE_FONT_STACKS.map((s) => [s.id, s]),
|
|
179
|
-
);
|
|
180
|
-
|
|
181
|
-
/** Look up a stack by id. Returns undefined if not registered. */
|
|
182
|
-
export function getFontStack(id: string): FontStack | undefined {
|
|
183
|
-
return STACKS_BY_ID[id];
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
/** Default fallback CSS family per kind, used when a custom font has no fallback specified. */
|
|
187
|
-
const FALLBACK_BY_KIND: Record<FontFamilyKind, string> = {
|
|
188
|
-
sans: 'system-ui, sans-serif',
|
|
189
|
-
serif: 'Georgia, serif',
|
|
190
|
-
mono: 'Consolas, monospace',
|
|
191
|
-
display: '"Arial Narrow", "Helvetica Neue", Arial, sans-serif',
|
|
192
|
-
};
|
|
193
|
-
|
|
194
|
-
/**
|
|
195
|
-
* Resolve a `FontFamily` reference (or legacy raw string) to a CSS family string.
|
|
196
|
-
* Used by `getThemeFont` at render time. Never returns an empty string —
|
|
197
|
-
* unrecognized stackIds fall back to the requested role's default.
|
|
198
|
-
*/
|
|
199
|
-
export function resolveFontFamily(
|
|
200
|
-
family: FontFamily | string | undefined,
|
|
201
|
-
roleFallback: string,
|
|
202
|
-
): string {
|
|
203
|
-
if (!family) return roleFallback;
|
|
204
|
-
if (typeof family === 'string') return family;
|
|
205
|
-
if ('stackId' in family) {
|
|
206
|
-
const stack = STACKS_BY_ID[family.stackId];
|
|
207
|
-
return stack ? stack.family : roleFallback;
|
|
208
|
-
}
|
|
209
|
-
if ('custom' in family) {
|
|
210
|
-
const { name, fallback } = family.custom;
|
|
211
|
-
const fb =
|
|
212
|
-
fallback === 'system-ui'
|
|
213
|
-
? 'system-ui, sans-serif'
|
|
214
|
-
: fallback === 'serif'
|
|
215
|
-
? 'Georgia, serif'
|
|
216
|
-
: fallback === 'monospace'
|
|
217
|
-
? 'Consolas, monospace'
|
|
218
|
-
: 'system-ui, sans-serif';
|
|
219
|
-
const safeName = name.includes(' ') || name.includes(',') ? `"${name}"` : name;
|
|
220
|
-
return `${safeName}, ${fb}`;
|
|
221
|
-
}
|
|
222
|
-
return roleFallback;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
/** Convenience: quick `{ stackId }` factory for code that constructs themes. */
|
|
226
|
-
export function fontStack(id: string): FontFamily {
|
|
227
|
-
return { stackId: id };
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
/**
|
|
231
|
-
* Build a `https://fonts.googleapis.com/css2?...` URL that loads the
|
|
232
|
-
* subset of supplied `FontFamily` references that are served by Google
|
|
233
|
-
* Fonts. Returns `null` when nothing in the list needs Google hosting
|
|
234
|
-
* (system stacks, custom fonts, or unknown stack ids) — callers can use
|
|
235
|
-
* that to skip emitting a `<link>` entirely.
|
|
236
|
-
*
|
|
237
|
-
* The URL requests regular + bold (400/700) for each family, which is
|
|
238
|
-
* what the templates use. `display=swap` keeps the fallback visible
|
|
239
|
-
* while the web font streams in.
|
|
240
|
-
*/
|
|
241
|
-
export function buildGoogleFontsUrl(families: Array<FontFamily | undefined>): string | null {
|
|
242
|
-
const names = new Set<string>();
|
|
243
|
-
for (const f of families) {
|
|
244
|
-
if (!f || typeof f === 'string') continue;
|
|
245
|
-
if ('stackId' in f) {
|
|
246
|
-
const stack = STACKS_BY_ID[f.stackId];
|
|
247
|
-
if (stack?.googleFontFamily) names.add(stack.googleFontFamily);
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
if (names.size === 0) return null;
|
|
251
|
-
// css2 syntax: ?family=Name+With+Spaces:wght@400;700&family=Other:wght@400;700&display=swap
|
|
252
|
-
const params = Array.from(names)
|
|
253
|
-
.sort()
|
|
254
|
-
.map((name) => `family=${encodeURIComponent(name).replace(/%20/g, '+')}:wght@400;700`)
|
|
255
|
-
.join('&');
|
|
256
|
-
return `https://fonts.googleapis.com/css2?${params}&display=swap`;
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
/** Default fallback families exposed for tools that need them. */
|
|
260
|
-
export const FONT_FALLBACKS = FALLBACK_BY_KIND;
|
|
261
|
-
|
|
262
|
-
// ── Arbitrary font-name matching ─────────────────────────────────────
|
|
263
|
-
//
|
|
264
|
-
// Used by file-import theme inference (OOXML fontScheme → FontFamily):
|
|
265
|
-
// a typeface name from an office document either matches a curated stack
|
|
266
|
-
// or becomes a `{ custom }` reference that preserves the original face.
|
|
267
|
-
|
|
268
|
-
/** Normalize a raw typeface name for lookup: trim, unquote, lowercase, collapse whitespace. */
|
|
269
|
-
function normalizeFontName(name: string): string {
|
|
270
|
-
return name
|
|
271
|
-
.trim()
|
|
272
|
-
.replace(/^["']+|["']+$/g, '')
|
|
273
|
-
.replace(/\s+/g, ' ')
|
|
274
|
-
.toLowerCase();
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
/**
|
|
278
|
-
* Normalized name → stackId. Seeded from every stack's label and Google
|
|
279
|
-
* Fonts family name, plus explicit aliases for common variants and the
|
|
280
|
-
* web-safe faces that already anchor the system stacks' CSS families.
|
|
281
|
-
*/
|
|
282
|
-
const STACK_NAME_ALIASES: Record<string, string> = (() => {
|
|
283
|
-
const aliases: Record<string, string> = {};
|
|
284
|
-
for (const stack of AVAILABLE_FONT_STACKS) {
|
|
285
|
-
aliases[normalizeFontName(stack.label)] = stack.id;
|
|
286
|
-
if (stack.googleFontFamily) aliases[normalizeFontName(stack.googleFontFamily)] = stack.id;
|
|
287
|
-
}
|
|
288
|
-
Object.assign(aliases, {
|
|
289
|
-
playfair: 'playfair',
|
|
290
|
-
'source serif': 'source-serif',
|
|
291
|
-
'source serif pro': 'source-serif',
|
|
292
|
-
'crimson pro': 'crimson',
|
|
293
|
-
cormorant: 'cormorant',
|
|
294
|
-
georgia: 'system-serif',
|
|
295
|
-
'times new roman': 'system-serif',
|
|
296
|
-
times: 'system-serif',
|
|
297
|
-
consolas: 'system-mono',
|
|
298
|
-
'courier new': 'system-mono',
|
|
299
|
-
courier: 'system-mono',
|
|
300
|
-
'segoe ui': 'system-sans',
|
|
301
|
-
'system-ui': 'system-sans',
|
|
302
|
-
});
|
|
303
|
-
return aliases;
|
|
304
|
-
})();
|
|
305
|
-
|
|
306
|
-
const MONO_NAME_RE =
|
|
307
|
-
/\b(mono|monospace|consolas|courier|menlo|inconsolata|cascadia|fira code|source code|code)\b/;
|
|
308
|
-
const SERIF_NAME_RE =
|
|
309
|
-
/\b(georgia|times|garamond|cambria|caslon|baskerville|bodoni|didot|palatino|book antiqua|goudy|minion|charter|constantia|century schoolbook|antiqua|roman)\b/;
|
|
310
|
-
|
|
311
|
-
/**
|
|
312
|
-
* Guess the structured fallback bucket for an arbitrary typeface name.
|
|
313
|
-
* Deliberately never guesses `system-ui` — a wrong serif/sans guess is
|
|
314
|
-
* recoverable in the customizer; `system-ui` erases the signal entirely.
|
|
315
|
-
*/
|
|
316
|
-
export function guessFontFallback(
|
|
317
|
-
name: string,
|
|
318
|
-
): 'serif' | 'sans-serif' | 'monospace' | 'system-ui' {
|
|
319
|
-
const n = normalizeFontName(name);
|
|
320
|
-
if (MONO_NAME_RE.test(n)) return 'monospace';
|
|
321
|
-
if ((n.includes('serif') && !n.includes('sans')) || SERIF_NAME_RE.test(n)) return 'serif';
|
|
322
|
-
return 'sans-serif';
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
/**
|
|
326
|
-
* Map an arbitrary typeface name (e.g. from an imported office document's
|
|
327
|
-
* fontScheme) to a `FontFamily`: a curated `{ stackId }` when the name
|
|
328
|
-
* matches a known stack, else `{ custom }` preserving the original name
|
|
329
|
-
* (original casing, quotes stripped) with a heuristic fallback bucket.
|
|
330
|
-
* Empty/blank names resolve to the system sans stack.
|
|
331
|
-
*/
|
|
332
|
-
export function matchFontFamily(name: string): FontFamily {
|
|
333
|
-
const normalized = normalizeFontName(name);
|
|
334
|
-
if (!normalized) return { stackId: 'system-sans' };
|
|
335
|
-
const stackId = STACK_NAME_ALIASES[normalized];
|
|
336
|
-
if (stackId) return { stackId };
|
|
337
|
-
const displayName = name.trim().replace(/^["']+|["']+$/g, '');
|
|
338
|
-
return { custom: { name: displayName, fallback: guessFontFallback(name) } };
|
|
339
|
-
}
|
package/src/schemas/index.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
export * from './Types.js';
|
|
2
|
-
export * from './Doc.js';
|
|
3
|
-
export * from './Transitions.js';
|
|
4
|
-
export * from './Media.js';
|
|
5
|
-
export * from './BlockTemplates.js';
|
|
6
|
-
export * from './CustomTemplates.js';
|
|
7
|
-
export * from './Theme.js';
|
|
8
|
-
export * from './PageStyle.js';
|
|
9
|
-
export * from './pageStyleDefaults.js';
|
|
10
|
-
export * from './themeLibrary.js';
|
|
11
|
-
export * from './themeValidator.js';
|
|
12
|
-
export * from './themeCompile.js';
|
|
13
|
-
export * from './fontStacks.js';
|
|
14
|
-
export * from './colorUtils.js';
|
|
15
|
-
export * from './Viewport.js';
|
|
16
|
-
export {
|
|
17
|
-
getLayoutHints,
|
|
18
|
-
getTwoColumnPositions,
|
|
19
|
-
getSafeTextBounds,
|
|
20
|
-
scaledFontSize as layoutScaledFontSize,
|
|
21
|
-
} from './LayoutStrategy.js';
|
|
22
|
-
export type { LayoutHints } from './LayoutStrategy.js';
|
|
23
|
-
export type { MediaProvider, MediaEntry } from './MediaProvider.js';
|
|
24
|
-
export type {
|
|
25
|
-
ImageEditDoc,
|
|
26
|
-
ImageEditLayer,
|
|
27
|
-
ImageEditLayerKind,
|
|
28
|
-
ImageEditCanvas,
|
|
29
|
-
ImageEditMeta,
|
|
30
|
-
EditorLayerMeta,
|
|
31
|
-
} from './ImageEditDoc.js';
|
|
@@ -1,204 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Page Style Defaults
|
|
3
|
-
*
|
|
4
|
-
* Derives a complete `ThemePageStyle` from a theme's existing fields so
|
|
5
|
-
* legacy themes, customizer themes, and file-inferred themes get a
|
|
6
|
-
* coherent page art direction without declaring one. Built-in themes
|
|
7
|
-
* ship explicit `pageStyle` blocks in their JSON; this derivation is the
|
|
8
|
-
* fallback used by `compileTheme` and by `resolvePageStyle` at read time.
|
|
9
|
-
*
|
|
10
|
-
* Derivation signals:
|
|
11
|
-
* - `renderStyle.name` → design family (documentary → documentary,
|
|
12
|
-
* magazine → editorial, bold → brutalist, tech-dark → terminal, …)
|
|
13
|
-
* - `style.borderRadius` → cornerRadius + rounded vs flush image framing
|
|
14
|
-
* - `style.imageTreatment` (mono/duotone) → letterboxed framing
|
|
15
|
-
* - `style.textShadow` → shadow language
|
|
16
|
-
* - `persistentLayers` patternBackground → page pattern
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
import type { Theme } from './Theme.js';
|
|
20
|
-
import type {
|
|
21
|
-
PageDesignFamily,
|
|
22
|
-
PageTokens,
|
|
23
|
-
ThemePageStyle,
|
|
24
|
-
PageHeadingTreatment,
|
|
25
|
-
} from './PageStyle.js';
|
|
26
|
-
|
|
27
|
-
/** renderStyle.name → design family. Unknown names fall back to 'clean'. */
|
|
28
|
-
const FAMILY_BY_RENDER_STYLE: Record<string, PageDesignFamily> = {
|
|
29
|
-
standard: 'clean',
|
|
30
|
-
minimalist: 'clean',
|
|
31
|
-
documentary: 'documentary',
|
|
32
|
-
magazine: 'editorial',
|
|
33
|
-
bold: 'brutalist',
|
|
34
|
-
'tech-dark': 'terminal',
|
|
35
|
-
cinematic: 'cinematic',
|
|
36
|
-
'warm-earth': 'organic',
|
|
37
|
-
'morning-light': 'soft',
|
|
38
|
-
gezellig: 'soft',
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
interface FamilyDefaults {
|
|
42
|
-
sectionSpacing: PageTokens['sectionSpacing'];
|
|
43
|
-
divider: PageTokens['divider'];
|
|
44
|
-
backgroundRhythm: PageTokens['backgroundRhythm'];
|
|
45
|
-
heroStyle: PageTokens['heroStyle'];
|
|
46
|
-
headingTreatment: PageHeadingTreatment;
|
|
47
|
-
quoteMark: PageTokens['quoteMark'];
|
|
48
|
-
numeralStyle: PageTokens['numeralStyle'];
|
|
49
|
-
accentStrategy: ThemePageStyle['accentRotation']['strategy'];
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const FAMILY_DEFAULTS: Record<PageDesignFamily, FamilyDefaults> = {
|
|
53
|
-
clean: {
|
|
54
|
-
sectionSpacing: 'comfortable',
|
|
55
|
-
divider: 'hairline',
|
|
56
|
-
backgroundRhythm: 'alternate',
|
|
57
|
-
heroStyle: 'stacked',
|
|
58
|
-
headingTreatment: { eyebrow: 'kicker', scale: 'regular', underline: 'none' },
|
|
59
|
-
quoteMark: 'accent-bar',
|
|
60
|
-
numeralStyle: 'plain',
|
|
61
|
-
accentStrategy: 'cycle',
|
|
62
|
-
},
|
|
63
|
-
editorial: {
|
|
64
|
-
sectionSpacing: 'comfortable',
|
|
65
|
-
divider: 'double-rule',
|
|
66
|
-
backgroundRhythm: 'flat',
|
|
67
|
-
heroStyle: 'split',
|
|
68
|
-
headingTreatment: { eyebrow: 'kicker', scale: 'display', underline: 'none' },
|
|
69
|
-
quoteMark: 'oversized-glyph',
|
|
70
|
-
numeralStyle: 'oversized',
|
|
71
|
-
accentStrategy: 'alternate-two',
|
|
72
|
-
},
|
|
73
|
-
brutalist: {
|
|
74
|
-
sectionSpacing: 'compact',
|
|
75
|
-
divider: 'thick-rule',
|
|
76
|
-
backgroundRhythm: 'accent-bands',
|
|
77
|
-
heroStyle: 'oversized-type',
|
|
78
|
-
headingTreatment: { eyebrow: 'kicker', scale: 'oversized', case: 'uppercase' },
|
|
79
|
-
quoteMark: 'none',
|
|
80
|
-
numeralStyle: 'oversized',
|
|
81
|
-
accentStrategy: 'cycle',
|
|
82
|
-
},
|
|
83
|
-
terminal: {
|
|
84
|
-
sectionSpacing: 'compact',
|
|
85
|
-
divider: 'hairline',
|
|
86
|
-
backgroundRhythm: 'tinted-panels',
|
|
87
|
-
heroStyle: 'stacked',
|
|
88
|
-
headingTreatment: { eyebrow: 'mono-tag', scale: 'regular', underline: 'none' },
|
|
89
|
-
quoteMark: 'none',
|
|
90
|
-
numeralStyle: 'mono',
|
|
91
|
-
accentStrategy: 'primary-only',
|
|
92
|
-
},
|
|
93
|
-
cinematic: {
|
|
94
|
-
sectionSpacing: 'generous',
|
|
95
|
-
divider: 'gap-only',
|
|
96
|
-
backgroundRhythm: 'flat',
|
|
97
|
-
heroStyle: 'full-bleed',
|
|
98
|
-
headingTreatment: { eyebrow: 'kicker', scale: 'display', case: 'uppercase' },
|
|
99
|
-
quoteMark: 'none',
|
|
100
|
-
numeralStyle: 'oversized',
|
|
101
|
-
accentStrategy: 'primary-only',
|
|
102
|
-
},
|
|
103
|
-
documentary: {
|
|
104
|
-
sectionSpacing: 'generous',
|
|
105
|
-
divider: 'thick-rule',
|
|
106
|
-
backgroundRhythm: 'flat',
|
|
107
|
-
heroStyle: 'letterbox',
|
|
108
|
-
headingTreatment: { eyebrow: 'numbered', scale: 'display', underline: 'none' },
|
|
109
|
-
quoteMark: 'accent-bar',
|
|
110
|
-
numeralStyle: 'boxed',
|
|
111
|
-
accentStrategy: 'primary-only',
|
|
112
|
-
},
|
|
113
|
-
organic: {
|
|
114
|
-
sectionSpacing: 'comfortable',
|
|
115
|
-
divider: 'thick-rule',
|
|
116
|
-
backgroundRhythm: 'tinted-panels',
|
|
117
|
-
heroStyle: 'stacked',
|
|
118
|
-
headingTreatment: { eyebrow: 'kicker', scale: 'regular', underline: 'accent-bar' },
|
|
119
|
-
quoteMark: 'oversized-glyph',
|
|
120
|
-
numeralStyle: 'boxed',
|
|
121
|
-
accentStrategy: 'alternate-two',
|
|
122
|
-
},
|
|
123
|
-
soft: {
|
|
124
|
-
sectionSpacing: 'comfortable',
|
|
125
|
-
divider: 'dotted',
|
|
126
|
-
backgroundRhythm: 'tinted-panels',
|
|
127
|
-
heroStyle: 'split',
|
|
128
|
-
headingTreatment: { eyebrow: 'kicker', scale: 'regular', underline: 'none' },
|
|
129
|
-
quoteMark: 'oversized-glyph',
|
|
130
|
-
numeralStyle: 'plain',
|
|
131
|
-
accentStrategy: 'alternate-two',
|
|
132
|
-
},
|
|
133
|
-
};
|
|
134
|
-
|
|
135
|
-
/** Read the first patternBackground pattern from a theme's persistent layers. */
|
|
136
|
-
function derivePattern(theme: Theme): PageTokens['pattern'] {
|
|
137
|
-
const layers = [
|
|
138
|
-
...(theme.persistentLayers?.bottomLayers ?? []),
|
|
139
|
-
...(theme.persistentLayers?.topLayers ?? []),
|
|
140
|
-
];
|
|
141
|
-
for (const layer of layers) {
|
|
142
|
-
if (
|
|
143
|
-
typeof layer === 'object' &&
|
|
144
|
-
layer !== null &&
|
|
145
|
-
'template' in layer &&
|
|
146
|
-
(layer as { template?: unknown }).template === 'patternBackground'
|
|
147
|
-
) {
|
|
148
|
-
const config = (layer as { config?: { pattern?: unknown } }).config;
|
|
149
|
-
const pattern = config?.pattern;
|
|
150
|
-
if (
|
|
151
|
-
pattern === 'dots' ||
|
|
152
|
-
pattern === 'grid' ||
|
|
153
|
-
pattern === 'diagonal' ||
|
|
154
|
-
pattern === 'noise'
|
|
155
|
-
) {
|
|
156
|
-
return pattern;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
return undefined;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
/**
|
|
164
|
-
* Derive a complete `ThemePageStyle` from a theme's existing fields.
|
|
165
|
-
* Deterministic and read-only; explicit `theme.pageStyle` always wins
|
|
166
|
-
* (callers check before deriving — see `resolvePageStyle`).
|
|
167
|
-
*/
|
|
168
|
-
export function defaultPageStyle(theme: Theme): ThemePageStyle {
|
|
169
|
-
const family = FAMILY_BY_RENDER_STYLE[theme.renderStyle?.name ?? ''] ?? 'clean';
|
|
170
|
-
const defaults = FAMILY_DEFAULTS[family];
|
|
171
|
-
|
|
172
|
-
const cornerRadius = theme.style?.borderRadius ?? 6;
|
|
173
|
-
const treatmentType = theme.style?.imageTreatment?.type;
|
|
174
|
-
const imageFraming: PageTokens['imageFraming'] =
|
|
175
|
-
treatmentType === 'mono' || treatmentType === 'duotone'
|
|
176
|
-
? 'letterboxed'
|
|
177
|
-
: cornerRadius > 0
|
|
178
|
-
? 'rounded'
|
|
179
|
-
: 'flush';
|
|
180
|
-
|
|
181
|
-
const tokens: PageTokens = {
|
|
182
|
-
contentMaxWidth: 760,
|
|
183
|
-
wideMaxWidth: 1100,
|
|
184
|
-
sectionSpacing: defaults.sectionSpacing,
|
|
185
|
-
cornerRadius,
|
|
186
|
-
divider: defaults.divider,
|
|
187
|
-
backgroundRhythm: defaults.backgroundRhythm,
|
|
188
|
-
heroStyle: defaults.heroStyle,
|
|
189
|
-
headingTreatment: { ...defaults.headingTreatment },
|
|
190
|
-
imageFraming,
|
|
191
|
-
shadow: theme.style?.textShadow ? 'soft' : 'none',
|
|
192
|
-
quoteMark: defaults.quoteMark,
|
|
193
|
-
numeralStyle: defaults.numeralStyle,
|
|
194
|
-
};
|
|
195
|
-
|
|
196
|
-
const pattern = derivePattern(theme);
|
|
197
|
-
if (pattern) tokens.pattern = pattern;
|
|
198
|
-
|
|
199
|
-
return {
|
|
200
|
-
family,
|
|
201
|
-
tokens,
|
|
202
|
-
accentRotation: { strategy: defaults.accentStrategy },
|
|
203
|
-
};
|
|
204
|
-
}
|