@takazudo/zudo-doc 3.2.0 → 4.0.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/CHANGELOG.md +61 -0
- package/README.md +2 -2
- package/bin/tag-cli-config.ts +126 -0
- package/bin/tags-audit-runner.ts +60 -76
- package/bin/tags-audit.mjs +17 -36
- package/bin/tags-suggest-runner.ts +429 -0
- package/bin/tags-suggest.mjs +30 -0
- package/bin/zudo-doc.mjs +78 -25
- package/dist/breadcrumb/breadcrumb.d.ts +4 -4
- package/dist/breadcrumb/find-path.d.ts +2 -2
- package/dist/breadcrumb/index.d.ts +1 -1
- package/dist/breadcrumb/types.d.ts +0 -5
- package/dist/chrome/derive.d.ts +16 -4
- package/dist/chrome/derive.js +64 -4
- package/dist/chrome/index.d.ts +13 -10
- package/dist/chrome/index.js +12 -6
- package/dist/chrome/primary-slots.d.ts +21 -0
- package/dist/chrome/primary-slots.js +59 -0
- package/dist/chrome-bindings.d.ts +227 -0
- package/dist/chrome-bindings.js +6 -0
- package/dist/code-syntax/code-block-enhancer-script.d.ts +4 -0
- package/dist/code-syntax/code-block-enhancer-script.js +7 -4
- package/dist/code-syntax/code-block-enhancer.d.ts +2 -2
- package/dist/code-syntax/code-block-enhancer.js +1 -3
- package/dist/code-syntax/index.d.ts +5 -5
- package/dist/code-syntax/index.js +4 -13
- package/dist/code-syntax/mermaid-init-script.d.ts +1 -22
- package/dist/code-syntax/mermaid-init-script.js +0 -2
- package/dist/code-syntax/mermaid-init.d.ts +0 -1
- package/dist/code-syntax/mermaid-init.js +3 -4
- package/dist/code-syntax/tabs-init.d.ts +0 -1
- package/dist/code-syntax/tabs-init.js +1 -3
- package/dist/code-syntax/tabs.d.ts +0 -1
- package/dist/code-syntax/tabs.js +1 -3
- package/dist/color-scheme-utils.d.ts +72 -4
- package/dist/color-scheme-utils.js +137 -0
- package/dist/color-schemes-defaults/index.d.ts +23 -0
- package/dist/color-schemes-defaults/index.js +134 -0
- package/dist/config.d.ts +459 -0
- package/dist/config.js +125 -0
- package/dist/content/component-map.d.ts +0 -16
- package/dist/content/component-map.js +2 -4
- package/dist/content/index.d.ts +1 -1
- package/dist/content/index.js +2 -3
- package/dist/content.css +1 -1
- package/dist/design-token-panel-bootstrap.d.ts +82 -27
- package/dist/design-token-panel-bootstrap.js +110 -21
- package/dist/design-token-panel-config/index.d.ts +49 -0
- package/dist/design-token-panel-config/index.js +211 -0
- package/dist/design-token-panel-config/manifest.d.ts +46 -0
- package/dist/design-token-panel-config/manifest.js +105 -0
- package/dist/directive-vocabulary-defaults/index.d.ts +16 -0
- package/dist/directive-vocabulary-defaults/index.js +12 -0
- package/dist/doc-body-end-islands/design-token-panel-island.d.ts +15 -0
- package/dist/doc-body-end-islands/design-token-panel-island.js +31 -0
- package/dist/doc-body-end-islands/index.d.ts +52 -7
- package/dist/doc-body-end-islands/index.js +19 -0
- package/dist/doc-body-end-islands/theme-pack-switcher-island.d.ts +37 -0
- package/dist/doc-body-end-islands/theme-pack-switcher-island.js +18 -0
- package/dist/doc-content-header/index.js +1 -1
- package/dist/doc-history-area/index.d.ts +10 -4
- package/dist/doc-history-area/index.js +3 -2
- package/dist/doc-metainfo-area/index.d.ts +1 -0
- package/dist/doc-page-props/index.d.ts +7 -23
- package/dist/doc-page-renderer/index.d.ts +1 -0
- package/dist/doc-page-renderer/index.js +1 -0
- package/dist/doc-page-shell/index.js +19 -12
- package/dist/doc-pager/index.js +1 -1
- package/dist/doc-route-entries/index.d.ts +2 -2
- package/dist/doclayout/doc-layout-with-defaults.js +4 -4
- package/dist/doclayout/doc-layout.d.ts +8 -0
- package/dist/doclayout/doc-layout.js +10 -1
- package/dist/docs-schema/index.d.ts +67 -0
- package/dist/docs-schema/index.js +43 -0
- package/dist/eject/index.d.ts +16 -0
- package/dist/eject/index.js +122 -28
- package/dist/extract-headings/index.d.ts +5 -8
- package/dist/extract-headings/index.js +2 -9
- package/dist/factory-context/index.d.ts +56 -4
- package/dist/features.css +65 -43
- package/dist/find-in-page/find-bar.d.ts +9 -0
- package/dist/find-in-page/find-bar.js +114 -0
- package/dist/find-in-page/find-in-page.d.ts +17 -0
- package/dist/find-in-page/find-in-page.js +131 -0
- package/dist/find-in-page/index.d.ts +11 -0
- package/dist/find-in-page/index.js +49 -0
- package/dist/footer/footer.js +1 -0
- package/dist/frontmatter-preview-defaults/index.d.ts +16 -0
- package/dist/frontmatter-preview-defaults/index.js +25 -0
- package/dist/head-with-defaults/index.d.ts +2 -0
- package/dist/head-with-defaults/index.js +16 -0
- package/dist/header/header.d.ts +10 -5
- package/dist/header/header.js +45 -5
- package/dist/header/index.d.ts +1 -1
- package/dist/header/types.d.ts +30 -1
- package/dist/header-with-defaults/index.js +1 -0
- package/dist/home-page/index.d.ts +2 -0
- package/dist/home-page/index.js +11 -5
- package/dist/home-page/prepare-home-data.js +1 -1
- package/dist/i18n-defaults/index.d.ts +22 -0
- package/dist/i18n-defaults/index.js +167 -0
- package/dist/locale-merge/index.d.ts +9 -14
- package/dist/locale-merge/index.js +6 -4
- package/dist/mdx-components/index.js +4 -4
- package/dist/plugins/claude-resources.d.ts +1 -0
- package/dist/plugins/claude-resources.js +4 -2
- package/dist/plugins/doc-history.js +1 -1
- package/dist/{integrations → plugins/internal}/claude-resources/index.d.ts +1 -16
- package/dist/{integrations → plugins/internal}/claude-resources/index.js +0 -9
- package/dist/{integrations → plugins/internal}/doc-history/index.d.ts +0 -17
- package/dist/{integrations → plugins/internal}/doc-history/index.js +0 -4
- package/dist/{integrations → plugins/internal}/doc-history/pre-build.d.ts +2 -4
- package/dist/plugins/internal/llms-txt/index.d.ts +7 -0
- package/dist/{integrations → plugins/internal}/llms-txt/load.d.ts +1 -1
- package/dist/{integrations → plugins/internal}/llms-txt/load.js +2 -2
- package/dist/{integrations → plugins/internal}/llms-txt/strip.d.ts +2 -3
- package/dist/{integrations → plugins/internal}/llms-txt/strip.js +1 -1
- package/dist/{integrations → plugins/internal}/llms-txt/types.d.ts +13 -22
- package/dist/{integrations → plugins/internal}/search-index/collect.js +1 -1
- package/dist/plugins/internal/theme-packs/copy.d.ts +32 -0
- package/dist/plugins/internal/theme-packs/copy.js +45 -0
- package/dist/plugins/internal/theme-packs/dev-middleware.d.ts +22 -0
- package/dist/plugins/internal/theme-packs/dev-middleware.js +80 -0
- package/dist/plugins/internal/theme-packs/index.d.ts +6 -0
- package/dist/plugins/internal/theme-packs/index.js +9 -0
- package/dist/plugins/internal/theme-packs/resolve.d.ts +17 -0
- package/dist/plugins/internal/theme-packs/resolve.js +17 -0
- package/dist/plugins/internal/theme-packs/types.d.ts +22 -0
- package/dist/plugins/internal/theme-packs/types.js +0 -0
- package/dist/plugins/llms-txt.js +1 -1
- package/dist/plugins/routes.js +55 -21
- package/dist/plugins/search-index.js +1 -1
- package/dist/plugins/theme-packs.d.ts +3 -0
- package/dist/plugins/theme-packs.js +40 -0
- package/dist/preset.d.ts +28 -14
- package/dist/preset.js +24 -9
- package/dist/route-context/index.js +4 -6
- package/dist/route-enumerators/index.d.ts +6 -18
- package/dist/route-enumerators/index.js +8 -6
- package/dist/routes/404.js +3 -1
- package/dist/routes/_chrome.js +3 -2
- package/dist/routes/_context.d.ts +7 -3
- package/dist/routes/_context.js +2 -0
- package/dist/routes/_docs-helpers.js +9 -21
- package/dist/safelist.css +1 -1
- package/dist/settings.d.ts +64 -12
- package/dist/sidebar-tree/build-tree.d.ts +3 -4
- package/dist/sidebar-tree/build-tree.js +4 -3
- package/dist/sidebar-tree/index.d.ts +2 -2
- package/dist/sidebar-tree/types.d.ts +6 -17
- package/dist/site-tree-nav-island/index.d.ts +3 -1
- package/dist/site-tree-nav-island/index.js +17 -5
- package/dist/site-tree-nav-island/state.d.ts +4 -0
- package/dist/site-tree-nav-island/state.js +10 -0
- package/dist/tag-helpers/index.d.ts +6 -13
- package/dist/tag-helpers/index.js +5 -23
- package/dist/tag-pages/index.d.ts +8 -21
- package/dist/tag-pages/index.js +14 -10
- package/dist/tags-audit.d.ts +16 -44
- package/dist/tags-audit.js +9 -172
- package/dist/theme/color-scheme-provider.d.ts +2 -3
- package/dist/theme/color-scheme-provider.js +2 -10
- package/dist/theme/index.d.ts +1 -4
- package/dist/theme/index.js +2 -30
- package/dist/theme/theme-pack-provider.d.ts +42 -0
- package/dist/theme/theme-pack-provider.js +75 -0
- package/dist/theme-cli/apply.d.ts +16 -0
- package/dist/theme-cli/apply.js +61 -0
- package/dist/theme-cli/config-io.d.ts +15 -0
- package/dist/theme-cli/config-io.js +51 -0
- package/dist/theme-cli/config-rewriter.d.ts +21 -0
- package/dist/theme-cli/config-rewriter.js +141 -0
- package/dist/theme-cli/config-scanner.d.ts +63 -0
- package/dist/theme-cli/config-scanner.js +288 -0
- package/dist/theme-cli/index.d.ts +7 -0
- package/dist/theme-cli/index.js +38 -0
- package/dist/theme-cli/list.d.ts +27 -0
- package/dist/theme-cli/list.js +64 -0
- package/dist/theme-cli/provenance.d.ts +17 -0
- package/dist/theme-cli/provenance.js +35 -0
- package/dist/theme-cli/registry.d.ts +14 -0
- package/dist/theme-cli/registry.js +13 -0
- package/dist/theme-pack-dialog/dialog-state.d.ts +25 -0
- package/dist/theme-pack-dialog/dialog-state.js +40 -0
- package/dist/theme-pack-dialog/index.d.ts +5 -0
- package/dist/theme-pack-dialog/index.js +152 -0
- package/dist/theme-pack-dialog/theme-pack-card.d.ts +25 -0
- package/dist/theme-pack-dialog/theme-pack-card.js +72 -0
- package/dist/theme-pack-switcher/index.d.ts +49 -0
- package/dist/theme-pack-switcher/index.js +205 -0
- package/dist/theme-pack-switcher/switcher-state.d.ts +56 -0
- package/dist/theme-pack-switcher/switcher-state.js +43 -0
- package/dist/theme-pack-switcher/theme-pack-sync.d.ts +85 -0
- package/dist/theme-pack-switcher/theme-pack-sync.js +121 -0
- package/dist/theme-packs/beacon/fonts/AtkinsonHyperlegible-400-latin.woff2 +0 -0
- package/dist/theme-packs/beacon/fonts/AtkinsonHyperlegible-700-latin.woff2 +0 -0
- package/dist/theme-packs/beacon/fonts/AtkinsonHyperlegible-italic-400-latin.woff2 +0 -0
- package/dist/theme-packs/beacon/fonts/AtkinsonHyperlegible-italic-700-latin.woff2 +0 -0
- package/dist/theme-packs/beacon/fonts/AtkinsonHyperlegibleMono-italic-latin.woff2 +0 -0
- package/dist/theme-packs/beacon/fonts/AtkinsonHyperlegibleMono-latin.woff2 +0 -0
- package/dist/theme-packs/beacon/fonts/OFL.txt +94 -0
- package/dist/theme-packs/beacon/meta.json +37 -0
- package/dist/theme-packs/beacon/pack.css +442 -0
- package/dist/theme-packs/broadsheet/fonts/CourierPrime-400-latin.woff2 +0 -0
- package/dist/theme-packs/broadsheet/fonts/CourierPrime-700-latin.woff2 +0 -0
- package/dist/theme-packs/broadsheet/fonts/OFL.txt +95 -0
- package/dist/theme-packs/broadsheet/fonts/PlayfairDisplay-italic-latin.woff2 +0 -0
- package/dist/theme-packs/broadsheet/fonts/PlayfairDisplay-latin.woff2 +0 -0
- package/dist/theme-packs/broadsheet/fonts/SourceSerif4-italic-latin.woff2 +0 -0
- package/dist/theme-packs/broadsheet/fonts/SourceSerif4-latin.woff2 +0 -0
- package/dist/theme-packs/broadsheet/meta.json +38 -0
- package/dist/theme-packs/broadsheet/pack.css +448 -0
- package/dist/theme-packs/brutalist/fonts/ArchivoBlack-latin.woff2 +0 -0
- package/dist/theme-packs/brutalist/fonts/IBMPlexMono-400-latin.woff2 +0 -0
- package/dist/theme-packs/brutalist/fonts/IBMPlexMono-500-latin.woff2 +0 -0
- package/dist/theme-packs/brutalist/fonts/IBMPlexMono-700-latin.woff2 +0 -0
- package/dist/theme-packs/brutalist/fonts/OFL.txt +95 -0
- package/dist/theme-packs/brutalist/fonts/SpaceGrotesk-latin.woff2 +0 -0
- package/dist/theme-packs/brutalist/meta.json +38 -0
- package/dist/theme-packs/brutalist/pack.css +546 -0
- package/dist/theme-packs/default/meta.json +37 -0
- package/dist/theme-packs/drift/fonts/IBMPlexMono-400-latin-ext.woff2 +0 -0
- package/dist/theme-packs/drift/fonts/IBMPlexMono-400-latin.woff2 +0 -0
- package/dist/theme-packs/drift/fonts/IBMPlexMono-500-latin-ext.woff2 +0 -0
- package/dist/theme-packs/drift/fonts/IBMPlexMono-500-latin.woff2 +0 -0
- package/dist/theme-packs/drift/fonts/IBMPlexSans-italic-latin.woff2 +0 -0
- package/dist/theme-packs/drift/fonts/IBMPlexSans-latin-ext.woff2 +0 -0
- package/dist/theme-packs/drift/fonts/IBMPlexSans-latin.woff2 +0 -0
- package/dist/theme-packs/drift/fonts/OFL.txt +93 -0
- package/dist/theme-packs/drift/meta.json +37 -0
- package/dist/theme-packs/drift/pack.css +478 -0
- package/dist/theme-packs/fjord/fonts/Inter-latin-ext.woff2 +0 -0
- package/dist/theme-packs/fjord/fonts/Inter-latin.woff2 +0 -0
- package/dist/theme-packs/fjord/fonts/JetBrainsMono-latin-ext.woff2 +0 -0
- package/dist/theme-packs/fjord/fonts/JetBrainsMono-latin.woff2 +0 -0
- package/dist/theme-packs/fjord/fonts/OFL.txt +94 -0
- package/dist/theme-packs/fjord/meta.json +37 -0
- package/dist/theme-packs/fjord/pack.css +375 -0
- package/dist/theme-packs/foundry/fonts/Inter-latin-ext.woff2 +0 -0
- package/dist/theme-packs/foundry/fonts/Inter-latin.woff2 +0 -0
- package/dist/theme-packs/foundry/fonts/OFL.txt +93 -0
- package/dist/theme-packs/foundry/meta.json +37 -0
- package/dist/theme-packs/foundry/pack.css +202 -0
- package/dist/theme-packs/futura-editorial/fonts/Jost-latin.woff2 +0 -0
- package/dist/theme-packs/futura-editorial/fonts/NotoSans-italic-latin.woff2 +0 -0
- package/dist/theme-packs/futura-editorial/fonts/NotoSans-latin.woff2 +0 -0
- package/dist/theme-packs/futura-editorial/fonts/OFL.txt +95 -0
- package/dist/theme-packs/futura-editorial/fonts/SpaceMono-400-latin.woff2 +0 -0
- package/dist/theme-packs/futura-editorial/fonts/SpaceMono-700-latin.woff2 +0 -0
- package/dist/theme-packs/futura-editorial/meta.json +38 -0
- package/dist/theme-packs/futura-editorial/pack.css +313 -0
- package/dist/theme-packs/hearth/fonts/Fraunces-italic-latin.woff2 +0 -0
- package/dist/theme-packs/hearth/fonts/Fraunces-latin.woff2 +0 -0
- package/dist/theme-packs/hearth/fonts/Nunito-latin.woff2 +0 -0
- package/dist/theme-packs/hearth/fonts/OFL.txt +95 -0
- package/dist/theme-packs/hearth/fonts/SplineSansMono-latin.woff2 +0 -0
- package/dist/theme-packs/hearth/meta.json +38 -0
- package/dist/theme-packs/hearth/pack.css +385 -0
- package/dist/theme-packs/hollow/fonts/OFL.txt +94 -0
- package/dist/theme-packs/hollow/fonts/SpaceGrotesk-latin.woff2 +0 -0
- package/dist/theme-packs/hollow/fonts/SpaceMono-400-italic-latin.woff2 +0 -0
- package/dist/theme-packs/hollow/fonts/SpaceMono-400-latin.woff2 +0 -0
- package/dist/theme-packs/hollow/fonts/SpaceMono-700-latin.woff2 +0 -0
- package/dist/theme-packs/hollow/meta.json +37 -0
- package/dist/theme-packs/hollow/pack.css +428 -0
- package/dist/theme-packs/ledger/fonts/CrimsonPro-latin-ext-italic.woff2 +0 -0
- package/dist/theme-packs/ledger/fonts/CrimsonPro-latin-ext.woff2 +0 -0
- package/dist/theme-packs/ledger/fonts/CrimsonPro-latin-italic.woff2 +0 -0
- package/dist/theme-packs/ledger/fonts/CrimsonPro-latin.woff2 +0 -0
- package/dist/theme-packs/ledger/fonts/IBMPlexMono-400-latin-ext.woff2 +0 -0
- package/dist/theme-packs/ledger/fonts/IBMPlexMono-400-latin.woff2 +0 -0
- package/dist/theme-packs/ledger/fonts/IBMPlexMono-500-latin-ext.woff2 +0 -0
- package/dist/theme-packs/ledger/fonts/IBMPlexMono-500-latin.woff2 +0 -0
- package/dist/theme-packs/ledger/fonts/OFL.txt +94 -0
- package/dist/theme-packs/ledger/meta.json +37 -0
- package/dist/theme-packs/ledger/pack.css +463 -0
- package/dist/theme-packs/manuscript/fonts/CourierPrime-400-latin-ext.woff2 +0 -0
- package/dist/theme-packs/manuscript/fonts/CourierPrime-400-latin.woff2 +0 -0
- package/dist/theme-packs/manuscript/fonts/CourierPrime-700-latin-ext.woff2 +0 -0
- package/dist/theme-packs/manuscript/fonts/CourierPrime-700-latin.woff2 +0 -0
- package/dist/theme-packs/manuscript/fonts/EBGaramond-latin-italic.woff2 +0 -0
- package/dist/theme-packs/manuscript/fonts/EBGaramond-latin.woff2 +0 -0
- package/dist/theme-packs/manuscript/fonts/OFL.txt +94 -0
- package/dist/theme-packs/manuscript/meta.json +37 -0
- package/dist/theme-packs/manuscript/pack.css +376 -0
- package/dist/theme-packs/matcha/fonts/MPLUS1Code-latin.woff2 +0 -0
- package/dist/theme-packs/matcha/fonts/OFL.txt +95 -0
- package/dist/theme-packs/matcha/fonts/ShipporiMincho-500-latin.woff2 +0 -0
- package/dist/theme-packs/matcha/fonts/ShipporiMincho-700-latin.woff2 +0 -0
- package/dist/theme-packs/matcha/fonts/ZenKakuGothicNew-400-latin.woff2 +0 -0
- package/dist/theme-packs/matcha/fonts/ZenKakuGothicNew-500-latin.woff2 +0 -0
- package/dist/theme-packs/matcha/meta.json +38 -0
- package/dist/theme-packs/matcha/pack.css +409 -0
- package/dist/theme-packs/nocturne/fonts/CormorantGaramond-italic-latin.woff2 +0 -0
- package/dist/theme-packs/nocturne/fonts/CormorantGaramond-latin.woff2 +0 -0
- package/dist/theme-packs/nocturne/fonts/IBMPlexMono-400-latin.woff2 +0 -0
- package/dist/theme-packs/nocturne/fonts/IBMPlexMono-500-latin.woff2 +0 -0
- package/dist/theme-packs/nocturne/fonts/IBMPlexMono-italic-latin.woff2 +0 -0
- package/dist/theme-packs/nocturne/fonts/Manrope-latin.woff2 +0 -0
- package/dist/theme-packs/nocturne/fonts/OFL.txt +95 -0
- package/dist/theme-packs/nocturne/meta.json +38 -0
- package/dist/theme-packs/nocturne/pack.css +502 -0
- package/dist/theme-packs/observatory/fonts/JosefinSans-latin.woff2 +0 -0
- package/dist/theme-packs/observatory/fonts/Jost-italic-latin.woff2 +0 -0
- package/dist/theme-packs/observatory/fonts/Jost-latin.woff2 +0 -0
- package/dist/theme-packs/observatory/fonts/OFL.txt +95 -0
- package/dist/theme-packs/observatory/fonts/SpaceMono-400-latin.woff2 +0 -0
- package/dist/theme-packs/observatory/fonts/SpaceMono-700-latin.woff2 +0 -0
- package/dist/theme-packs/observatory/fonts/SpaceMono-italic-latin.woff2 +0 -0
- package/dist/theme-packs/observatory/meta.json +38 -0
- package/dist/theme-packs/observatory/pack.css +728 -0
- package/dist/theme-packs/onyx/fonts/CormorantGaramond-italic-latin.woff2 +0 -0
- package/dist/theme-packs/onyx/fonts/CormorantGaramond-latin.woff2 +0 -0
- package/dist/theme-packs/onyx/fonts/IBMPlexMono-400-latin-ext.woff2 +0 -0
- package/dist/theme-packs/onyx/fonts/IBMPlexMono-400-latin.woff2 +0 -0
- package/dist/theme-packs/onyx/fonts/IBMPlexMono-500-latin-ext.woff2 +0 -0
- package/dist/theme-packs/onyx/fonts/IBMPlexMono-500-latin.woff2 +0 -0
- package/dist/theme-packs/onyx/fonts/Jost-latin.woff2 +0 -0
- package/dist/theme-packs/onyx/fonts/OFL.txt +95 -0
- package/dist/theme-packs/onyx/meta.json +38 -0
- package/dist/theme-packs/onyx/pack.css +497 -0
- package/dist/theme-packs/phosphor/fonts/JetBrainsMono-latin-ext.woff2 +0 -0
- package/dist/theme-packs/phosphor/fonts/JetBrainsMono-latin.woff2 +0 -0
- package/dist/theme-packs/phosphor/fonts/OFL.txt +94 -0
- package/dist/theme-packs/phosphor/fonts/VT323-latin-ext.woff2 +0 -0
- package/dist/theme-packs/phosphor/fonts/VT323-latin.woff2 +0 -0
- package/dist/theme-packs/phosphor/meta.json +38 -0
- package/dist/theme-packs/phosphor/pack.css +493 -0
- package/dist/theme-packs/solar/fonts/OFL.txt +94 -0
- package/dist/theme-packs/solar/fonts/SourceCodePro-italic-latin.woff2 +0 -0
- package/dist/theme-packs/solar/fonts/SourceCodePro-latin.woff2 +0 -0
- package/dist/theme-packs/solar/fonts/SourceSans3-italic-latin.woff2 +0 -0
- package/dist/theme-packs/solar/fonts/SourceSans3-latin.woff2 +0 -0
- package/dist/theme-packs/solar/meta.json +37 -0
- package/dist/theme-packs/solar/pack.css +380 -0
- package/dist/theme-packs/sumi/fonts/IBMPlexMono-400-latin-ext.woff2 +0 -0
- package/dist/theme-packs/sumi/fonts/IBMPlexMono-400-latin.woff2 +0 -0
- package/dist/theme-packs/sumi/fonts/IBMPlexMono-500-latin-ext.woff2 +0 -0
- package/dist/theme-packs/sumi/fonts/IBMPlexMono-500-latin.woff2 +0 -0
- package/dist/theme-packs/sumi/fonts/OFL.txt +95 -0
- package/dist/theme-packs/sumi/fonts/ShipporiMinchoB1-600-latin.woff2 +0 -0
- package/dist/theme-packs/sumi/fonts/ShipporiMinchoB1-700-latin.woff2 +0 -0
- package/dist/theme-packs/sumi/fonts/ShipporiMinchoB1-800-latin.woff2 +0 -0
- package/dist/theme-packs/sumi/fonts/ZenKakuGothicNew-400-latin.woff2 +0 -0
- package/dist/theme-packs/sumi/fonts/ZenKakuGothicNew-500-latin.woff2 +0 -0
- package/dist/theme-packs/sumi/meta.json +38 -0
- package/dist/theme-packs/sumi/pack.css +502 -0
- package/dist/theme-packs/swissgrid/fonts/IBMPlexMono-400-latin-ext.woff2 +0 -0
- package/dist/theme-packs/swissgrid/fonts/IBMPlexMono-400-latin.woff2 +0 -0
- package/dist/theme-packs/swissgrid/fonts/IBMPlexMono-600-latin.woff2 +0 -0
- package/dist/theme-packs/swissgrid/fonts/Inter-latin-ext.woff2 +0 -0
- package/dist/theme-packs/swissgrid/fonts/Inter-latin.woff2 +0 -0
- package/dist/theme-packs/swissgrid/fonts/InterTight-latin.woff2 +0 -0
- package/dist/theme-packs/swissgrid/fonts/OFL.txt +95 -0
- package/dist/theme-packs/swissgrid/meta.json +38 -0
- package/dist/theme-packs/swissgrid/pack.css +518 -0
- package/dist/theme-packs/washi/fonts/MPlus1Code-400-latin.woff2 +0 -0
- package/dist/theme-packs/washi/fonts/MPlus1Code-500-latin.woff2 +0 -0
- package/dist/theme-packs/washi/fonts/OFL.txt +95 -0
- package/dist/theme-packs/washi/fonts/ShipporiMincho-500-latin.woff2 +0 -0
- package/dist/theme-packs/washi/fonts/ShipporiMincho-600-latin.woff2 +0 -0
- package/dist/theme-packs/washi/fonts/ShipporiMincho-700-latin.woff2 +0 -0
- package/dist/theme-packs/washi/fonts/ZenKakuGothicNew-400-latin.woff2 +0 -0
- package/dist/theme-packs/washi/fonts/ZenKakuGothicNew-500-latin.woff2 +0 -0
- package/dist/theme-packs/washi/fonts/ZenKakuGothicNew-700-latin.woff2 +0 -0
- package/dist/theme-packs/washi/meta.json +38 -0
- package/dist/theme-packs/washi/pack.css +479 -0
- package/dist/theme-packs-registry/index.d.ts +5 -0
- package/dist/theme-packs-registry/index.js +30 -0
- package/dist/theme-packs-registry/load-registry.d.ts +23 -0
- package/dist/theme-packs-registry/load-registry.js +64 -0
- package/dist/theme-packs-registry/meta-schema.d.ts +70 -0
- package/dist/theme-packs-registry/meta-schema.js +38 -0
- package/dist/theme-packs-registry/resolve-enabled-packs.d.ts +25 -0
- package/dist/theme-packs-registry/resolve-enabled-packs.js +43 -0
- package/dist/theme-packs-registry/token-manifest.d.ts +19 -0
- package/dist/theme-packs-registry/token-manifest.js +57 -0
- package/dist/theme-packs-registry/validator.d.ts +35 -0
- package/dist/theme-packs-registry/validator.js +284 -0
- package/dist/theme-toggle/color-scheme-sync.d.ts +2 -4
- package/dist/theme.css +319 -0
- package/dist/versions-page/index.d.ts +2 -2
- package/dist/versions-page/index.js +8 -8
- package/dist/z-index-defaults/index.d.ts +45 -0
- package/dist/z-index-defaults/index.js +34 -0
- package/eject/breadcrumb/breadcrumb.tsx +4 -4
- package/eject/breadcrumb/find-path.ts +2 -2
- package/eject/breadcrumb/index.ts +1 -1
- package/eject/breadcrumb/types.ts +0 -6
- package/eject/code-group/index.tsx +2 -2
- package/eject/doc-history/index.tsx +1 -1
- package/eject/doc-pager/index.tsx +1 -1
- package/eject/footer/footer.tsx +1 -0
- package/eject/header/header.tsx +86 -21
- package/eject/header/index.ts +3 -0
- package/eject/header/types.ts +39 -1
- package/eject/site-tree-nav-island/index.tsx +15 -3
- package/eject/site-tree-nav-island/state.ts +9 -0
- package/eject/theme-toggle/color-scheme-sync.ts +2 -4
- package/package.json +82 -29
- package/routes-src/404.tsx +4 -1
- package/routes-src/_chrome.tsx +31 -8
- package/routes-src/_context.ts +4 -0
- package/routes-src/_docs-helpers.ts +9 -29
- package/routes-src/_virtual.d.ts +38 -2
- package/tsconfig.base.json +29 -0
- package/virtual-modules.d.ts +83 -0
- package/zfb-config-shim.d.ts +210 -0
- package/dist/integrations/llms-txt/index.d.ts +0 -33
- package/dist/theme/color-tweak-export-modal.d.ts +0 -16
- package/dist/theme/color-tweak-export-modal.js +0 -138
- package/dist/theme/design-token-serde.d.ts +0 -183
- package/dist/theme/design-token-serde.js +0 -346
- package/dist/theme/design-token-types.d.ts +0 -13
- package/dist/theme/design-token-types.js +0 -6
- package/dist/theme/iframe-bridge.d.ts +0 -42
- package/dist/theme/iframe-bridge.js +0 -72
- /package/dist/{integrations → plugins/internal}/claude-resources/escape-for-mdx.d.ts +0 -0
- /package/dist/{integrations → plugins/internal}/claude-resources/escape-for-mdx.js +0 -0
- /package/dist/{integrations → plugins/internal}/claude-resources/generate.d.ts +0 -0
- /package/dist/{integrations → plugins/internal}/claude-resources/generate.js +0 -0
- /package/dist/{integrations → plugins/internal}/doc-history/pre-build.js +0 -0
- /package/dist/{integrations → plugins/internal}/llms-txt/dev-middleware.d.ts +0 -0
- /package/dist/{integrations → plugins/internal}/llms-txt/dev-middleware.js +0 -0
- /package/dist/{integrations → plugins/internal}/llms-txt/emit.d.ts +0 -0
- /package/dist/{integrations → plugins/internal}/llms-txt/emit.js +0 -0
- /package/dist/{integrations → plugins/internal}/llms-txt/generate.d.ts +0 -0
- /package/dist/{integrations → plugins/internal}/llms-txt/generate.js +0 -0
- /package/dist/{integrations → plugins/internal}/llms-txt/index.js +0 -0
- /package/dist/{integrations → plugins/internal}/llms-txt/types.js +0 -0
- /package/dist/{integrations → plugins/internal}/search-index/build-emitter.d.ts +0 -0
- /package/dist/{integrations → plugins/internal}/search-index/build-emitter.js +0 -0
- /package/dist/{integrations → plugins/internal}/search-index/collect.d.ts +0 -0
- /package/dist/{integrations → plugins/internal}/search-index/dev-middleware.d.ts +0 -0
- /package/dist/{integrations → plugins/internal}/search-index/dev-middleware.js +0 -0
- /package/dist/{integrations → plugins/internal}/search-index/index.d.ts +0 -0
- /package/dist/{integrations → plugins/internal}/search-index/index.js +0 -0
- /package/dist/{integrations → plugins/internal}/search-index/types.d.ts +0 -0
- /package/dist/{integrations → plugins/internal}/search-index/types.js +0 -0
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
/* ============================================================
|
|
2
|
+
Washi — zudo-doc theme pack (ADR docs/adr/theme-packs.md)
|
|
3
|
+
|
|
4
|
+
Warm washi paper, sumi ink, and ai-iro indigo seals — quiet
|
|
5
|
+
Japanese stationery for calm documentation. Zen Kaku Gothic New
|
|
6
|
+
prose over a CSS-only paper grain, Shippori Mincho headings, an
|
|
7
|
+
indigo hanko (判子) stamp language: a tilted 藍 seal on the h1,
|
|
8
|
+
kanji seal chips on admonitions, an asymmetric two-tone h2 rule.
|
|
9
|
+
Everything is cut square (washi is cut straight — no rounding),
|
|
10
|
+
with a generous 1.95 prose leading. Light = raw warm paper;
|
|
11
|
+
dark = aizome night — the same sheet dyed indigo-charcoal, warm
|
|
12
|
+
paper-white ink, asagi (pale indigo) seals.
|
|
13
|
+
|
|
14
|
+
Every rule below is scoped under html[data-theme-pack="washi"]
|
|
15
|
+
— this is what makes the runtime pack swap atomic (Decision 3)
|
|
16
|
+
and lets the validator prove a pack can never leak styles while
|
|
17
|
+
inactive (Decision 6.7). The @font-face blocks are the sole
|
|
18
|
+
exception (at-rules can't be selector-scoped).
|
|
19
|
+
|
|
20
|
+
CJK font rule (Decision 5): packs do NOT ship CJK subsets. All
|
|
21
|
+
three families load their latin subset only; every family stack
|
|
22
|
+
ends in the correct bare generic (sans-serif / serif / monospace)
|
|
23
|
+
so the platform's own Japanese fonts carry CJK glyphs. The 藍 and
|
|
24
|
+
kanji chip glyphs below are decorative CSS content characters
|
|
25
|
+
rendered by that platform CJK fallback — intentional.
|
|
26
|
+
|
|
27
|
+
Prototype-selector adaptations against the REAL DOM (tokens-dump
|
|
28
|
+
§6 + component sources), noted inline where they matter:
|
|
29
|
+
- `.lead` → `.zd-content > p[data-doc-description]`
|
|
30
|
+
(retargeted onto the stable hook,
|
|
31
|
+
zudolab/zudo-doc#2879 — was
|
|
32
|
+
`.zd-content > p:first-of-type`, which fell
|
|
33
|
+
back to the first body paragraph on
|
|
34
|
+
description-less pages; that fallback deck
|
|
35
|
+
is intentionally gone now, same rationale as
|
|
36
|
+
broadsheet's own retarget)
|
|
37
|
+
- `.sb-group > p::before` (sidebar group-label seal squares) →
|
|
38
|
+
NOT ported — sidebar group labels have no
|
|
39
|
+
stable hook; the sidebar keeps its
|
|
40
|
+
vertical-fiber sheet + accent hover
|
|
41
|
+
- `.toc-active` → `nav[data-zd-toc] a[aria-current="true"]`
|
|
42
|
+
- `.doc-pager` → `.zd-content > nav[data-doc-pager]`
|
|
43
|
+
(retargeted onto the stable hook,
|
|
44
|
+
zudolab/zudo-doc#2879 — was
|
|
45
|
+
`.zd-content > nav:last-of-type:not([aria-label])`)
|
|
46
|
+
- `footer[data-footer]` → `footer[data-footer]` (retargeted onto the
|
|
47
|
+
stable hook, zudolab/zudo-doc#2879 — was
|
|
48
|
+
`.zd-sidebar-content-wrapper > footer`)
|
|
49
|
+
- the theme-switcher flyout/launcher (the square indigo hanko
|
|
50
|
+
launcher + 和紙 stamp) — `[data-switcher-card]` /
|
|
51
|
+
`[data-switcher-launcher]` are stable hooks now too, but stay
|
|
52
|
+
unstyled — pack choice (broadsheet precedent), not a
|
|
53
|
+
missing-hook limitation
|
|
54
|
+
- prototype `--radius`/`--radius-lg` were structural mock tokens,
|
|
55
|
+
not part of the pack token contract — squareness lands via
|
|
56
|
+
`--zdc-admonition-radius: 0`, `--zdc-card-radius: 0`, and
|
|
57
|
+
explicit border-radius: 0 on pager cards + inline code
|
|
58
|
+
- prototype `p { margin-bottom: 1.3rem }` rhythm → NOT ported;
|
|
59
|
+
the real DOM's flow-space owl owns vertical rhythm (margin-top
|
|
60
|
+
based) — the 1.95 leading alone carries the airy feel
|
|
61
|
+
============================================================ */
|
|
62
|
+
|
|
63
|
+
/* ---- Zen Kaku Gothic New — body/prose gothic (static 400/500/700;
|
|
64
|
+
500 keeps chrome "medium" weights true, 700 for bold prose).
|
|
65
|
+
Latin subsets only (all three families) — the platform's own
|
|
66
|
+
Japanese fonts render CJK via the bare generic. ---- */
|
|
67
|
+
|
|
68
|
+
@font-face {
|
|
69
|
+
font-family: "Zen Kaku Gothic New";
|
|
70
|
+
font-style: normal;
|
|
71
|
+
font-weight: 400;
|
|
72
|
+
font-display: swap;
|
|
73
|
+
src: url("./fonts/ZenKakuGothicNew-400-latin.woff2") format("woff2");
|
|
74
|
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
|
|
75
|
+
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
|
|
76
|
+
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
@font-face {
|
|
80
|
+
font-family: "Zen Kaku Gothic New";
|
|
81
|
+
font-style: normal;
|
|
82
|
+
font-weight: 500;
|
|
83
|
+
font-display: swap;
|
|
84
|
+
src: url("./fonts/ZenKakuGothicNew-500-latin.woff2") format("woff2");
|
|
85
|
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
|
|
86
|
+
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
|
|
87
|
+
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
@font-face {
|
|
91
|
+
font-family: "Zen Kaku Gothic New";
|
|
92
|
+
font-style: normal;
|
|
93
|
+
font-weight: 700;
|
|
94
|
+
font-display: swap;
|
|
95
|
+
src: url("./fonts/ZenKakuGothicNew-700-latin.woff2") format("woff2");
|
|
96
|
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
|
|
97
|
+
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
|
|
98
|
+
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/* ---- Shippori Mincho — heading/display serif (static 500/600/700;
|
|
102
|
+
600 is the heading weight, 700 the logo, 500 catches the
|
|
103
|
+
normal-weight mincho voices: lead, blockquote). ---- */
|
|
104
|
+
|
|
105
|
+
@font-face {
|
|
106
|
+
font-family: "Shippori Mincho";
|
|
107
|
+
font-style: normal;
|
|
108
|
+
font-weight: 500;
|
|
109
|
+
font-display: swap;
|
|
110
|
+
src: url("./fonts/ShipporiMincho-500-latin.woff2") format("woff2");
|
|
111
|
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
|
|
112
|
+
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
|
|
113
|
+
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
@font-face {
|
|
117
|
+
font-family: "Shippori Mincho";
|
|
118
|
+
font-style: normal;
|
|
119
|
+
font-weight: 600;
|
|
120
|
+
font-display: swap;
|
|
121
|
+
src: url("./fonts/ShipporiMincho-600-latin.woff2") format("woff2");
|
|
122
|
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
|
|
123
|
+
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
|
|
124
|
+
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
@font-face {
|
|
128
|
+
font-family: "Shippori Mincho";
|
|
129
|
+
font-style: normal;
|
|
130
|
+
font-weight: 700;
|
|
131
|
+
font-display: swap;
|
|
132
|
+
src: url("./fonts/ShipporiMincho-700-latin.woff2") format("woff2");
|
|
133
|
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
|
|
134
|
+
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
|
|
135
|
+
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/* ---- M PLUS 1 Code — code face (static 400 + 500; 500 keeps the
|
|
139
|
+
inline-code medium weight true). ---- */
|
|
140
|
+
|
|
141
|
+
@font-face {
|
|
142
|
+
font-family: "M PLUS 1 Code";
|
|
143
|
+
font-style: normal;
|
|
144
|
+
font-weight: 400;
|
|
145
|
+
font-display: swap;
|
|
146
|
+
src: url("./fonts/MPlus1Code-400-latin.woff2") format("woff2");
|
|
147
|
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
|
|
148
|
+
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
|
|
149
|
+
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
@font-face {
|
|
153
|
+
font-family: "M PLUS 1 Code";
|
|
154
|
+
font-style: normal;
|
|
155
|
+
font-weight: 500;
|
|
156
|
+
font-display: swap;
|
|
157
|
+
src: url("./fonts/MPlus1Code-500-latin.woff2") format("woff2");
|
|
158
|
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
|
|
159
|
+
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
|
|
160
|
+
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
html[data-theme-pack="washi"] {
|
|
164
|
+
/* Tier-2 semantic roles — warm off-white washi + sumi ink + ai-iro
|
|
165
|
+
indigo (#274a78). Dark: aizome night — indigo-dyed charcoal paper,
|
|
166
|
+
warm paper-white ink, asagi (pale indigo) seals. Same paper, dyed
|
|
167
|
+
instead of raw. Both modes always via light-dark(). */
|
|
168
|
+
--zd-bg: light-dark(#f6f1e4, #1b212c);
|
|
169
|
+
--zd-fg: light-dark(#2b2822, #eae3d2);
|
|
170
|
+
--zd-selection-bg: light-dark(#274a78, #8ab0dd);
|
|
171
|
+
--zd-selection-fg: light-dark(#f6f1e4, #161b24);
|
|
172
|
+
--zd-surface: light-dark(#faf6ec, #202836);
|
|
173
|
+
--zd-muted: light-dark(#6d6553, #98a2b0);
|
|
174
|
+
--zd-accent: light-dark(#274a78, #8ab0dd);
|
|
175
|
+
--zd-accent-hover: light-dark(#1c3a62, #aecaec);
|
|
176
|
+
--zd-code-bg: light-dark(#efe9d8, #222a38);
|
|
177
|
+
--zd-code-fg: light-dark(#2b2822, #ece5d5);
|
|
178
|
+
--zd-success: light-dark(#3f6237, #a3c98e);
|
|
179
|
+
--zd-danger: light-dark(#a03a2e, #e0968a);
|
|
180
|
+
--zd-warning: light-dark(#875c12, #d9ac60);
|
|
181
|
+
--zd-info: light-dark(#31608f, #8ab0dd);
|
|
182
|
+
|
|
183
|
+
/* syntax — all 9 roles, both modes: sumi ink annotated with mineral
|
|
184
|
+
pigments. Moss (strings), kuchiba ochre (numbers), ai indigo
|
|
185
|
+
(keywords), muted shu vermilion (callables), asagi teal (types);
|
|
186
|
+
inserted/deleted reuse the moss and vermilion state hues. */
|
|
187
|
+
/* dark comment nudged from the prototype's #828f9f to keep AA
|
|
188
|
+
contrast on the aizome code sheet (4.68:1 vs 4.38:1) */
|
|
189
|
+
--zd-syntax-comment: light-dark(#6f6654, #8894a4);
|
|
190
|
+
--zd-syntax-string: light-dark(#41653a, #a9cb90);
|
|
191
|
+
--zd-syntax-number: light-dark(#8f5716, #ddaa6e);
|
|
192
|
+
--zd-syntax-keyword: light-dark(#274a78, #97b9e6);
|
|
193
|
+
--zd-syntax-callable: light-dark(#963f34, #e0a49a);
|
|
194
|
+
--zd-syntax-type: light-dark(#2a6167, #85c7cc);
|
|
195
|
+
--zd-syntax-name: light-dark(#2b2822, #ece5d5);
|
|
196
|
+
--zd-syntax-inserted: light-dark(#3f6237, #a3c98e);
|
|
197
|
+
--zd-syntax-deleted: light-dark(#a03a2e, #e0968a);
|
|
198
|
+
|
|
199
|
+
/* fonts — JP-friendly gothic prose, mincho display face for
|
|
200
|
+
headings, M PLUS 1 Code for code. Latin subsets loaded; each
|
|
201
|
+
stack ends in its bare generic so platform CJK fonts carry
|
|
202
|
+
Japanese glyphs (Decision 5). */
|
|
203
|
+
--font-sans: "Zen Kaku Gothic New", system-ui, sans-serif;
|
|
204
|
+
--font-mono: "M PLUS 1 Code", ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
205
|
+
--font-display: "Shippori Mincho", serif;
|
|
206
|
+
|
|
207
|
+
/* Tier-3 component seams — mincho headings at 600, gently opened
|
|
208
|
+
tracking, indigo active-nav seal. Washi is cut straight: zero
|
|
209
|
+
radii on admonitions and cards. */
|
|
210
|
+
--zdc-doc-title-font: var(--font-display);
|
|
211
|
+
--zdc-doc-title-weight: 600;
|
|
212
|
+
--zdc-doc-title-tracking: 0.02em;
|
|
213
|
+
--zdc-doc-h2-font: var(--font-display);
|
|
214
|
+
--zdc-doc-h2-weight: 600;
|
|
215
|
+
--zdc-doc-h2-tracking: 0.015em;
|
|
216
|
+
--zdc-admonition-radius: 0;
|
|
217
|
+
--zdc-admonition-border-width: 3px;
|
|
218
|
+
--zdc-card-radius: 0;
|
|
219
|
+
--zdc-nav-active-indicator-color: var(--zd-accent);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/* ---- Washi extras ---- */
|
|
223
|
+
|
|
224
|
+
/* signature move #1 — CSS-only paper grain: two fleck sizes + faint
|
|
225
|
+
horizontal fiber lines on the page sheet */
|
|
226
|
+
html[data-theme-pack="washi"] body {
|
|
227
|
+
background-image:
|
|
228
|
+
radial-gradient(
|
|
229
|
+
light-dark(rgb(101 78 42 / 0.05), rgb(214 205 180 / 0.035)) 1px,
|
|
230
|
+
transparent 1.2px
|
|
231
|
+
),
|
|
232
|
+
radial-gradient(
|
|
233
|
+
light-dark(rgb(101 78 42 / 0.033), rgb(214 205 180 / 0.022)) 1px,
|
|
234
|
+
transparent 1.2px
|
|
235
|
+
),
|
|
236
|
+
repeating-linear-gradient(
|
|
237
|
+
0deg,
|
|
238
|
+
transparent 0 3px,
|
|
239
|
+
light-dark(rgb(80 60 30 / 0.014), rgb(220 210 185 / 0.012)) 3px 4px
|
|
240
|
+
);
|
|
241
|
+
background-size:
|
|
242
|
+
9px 11px,
|
|
243
|
+
17px 13px,
|
|
244
|
+
auto;
|
|
245
|
+
background-position:
|
|
246
|
+
0 0,
|
|
247
|
+
6px 7px,
|
|
248
|
+
0 0;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/* header and footer: single-fleck grain over the surface tone */
|
|
252
|
+
html[data-theme-pack="washi"] header[data-header],
|
|
253
|
+
html[data-theme-pack="washi"] footer[data-footer] {
|
|
254
|
+
background-image: radial-gradient(
|
|
255
|
+
light-dark(rgb(101 78 42 / 0.04), rgb(214 205 180 / 0.028)) 1px,
|
|
256
|
+
transparent 1.2px
|
|
257
|
+
);
|
|
258
|
+
background-size: 11px 13px;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/* sidebar: a second sheet of paper — slightly deeper tone, vertical
|
|
262
|
+
fibers (distinct from the page sheet's horizontal ones) */
|
|
263
|
+
html[data-theme-pack="washi"] #desktop-sidebar {
|
|
264
|
+
background-color: light-dark(#f2ecdc, #191f29);
|
|
265
|
+
background-image: repeating-linear-gradient(
|
|
266
|
+
90deg,
|
|
267
|
+
transparent 0 5px,
|
|
268
|
+
light-dark(rgb(90 70 40 / 0.025), rgb(225 215 190 / 0.018)) 5px 6px
|
|
269
|
+
);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/* a thin indigo band across the top of the page — the binding edge */
|
|
273
|
+
html[data-theme-pack="washi"] header[data-header] {
|
|
274
|
+
border-top: 3px solid var(--zd-accent);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/* header logo: mincho wordmark with a small square indigo mark */
|
|
278
|
+
html[data-theme-pack="washi"] [data-header-logo] {
|
|
279
|
+
font-family: var(--font-display);
|
|
280
|
+
font-weight: 700;
|
|
281
|
+
letter-spacing: 0.02em;
|
|
282
|
+
}
|
|
283
|
+
html[data-theme-pack="washi"] [data-header-logo]::before {
|
|
284
|
+
content: "";
|
|
285
|
+
display: inline-block;
|
|
286
|
+
width: 0.5em;
|
|
287
|
+
height: 0.5em;
|
|
288
|
+
background: var(--zd-accent);
|
|
289
|
+
margin-right: 0.55em;
|
|
290
|
+
vertical-align: 0.06em;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/* vertical rhythm: generous JP-friendly 1.95 leading */
|
|
294
|
+
html[data-theme-pack="washi"] .zd-content {
|
|
295
|
+
line-height: 1.95;
|
|
296
|
+
letter-spacing: 0.01em;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/* the lead: mincho standfirst — the description paragraph
|
|
300
|
+
DocContentHeader renders, targeted via the stable
|
|
301
|
+
`data-doc-description` hook. Description-less pages no longer get
|
|
302
|
+
a fallback deck (the prior `:first-of-type` selector fell back to
|
|
303
|
+
the first body paragraph; that soft-fail behavior is intentionally
|
|
304
|
+
gone, same rationale as broadsheet's own retarget). */
|
|
305
|
+
html[data-theme-pack="washi"] .zd-content > p[data-doc-description] {
|
|
306
|
+
font-family: var(--font-display);
|
|
307
|
+
font-size: 1.2rem;
|
|
308
|
+
line-height: 1.8;
|
|
309
|
+
color: color-mix(in srgb, var(--zd-fg) 72%, var(--zd-bg));
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/* signature move #2 — the h1 carries a small tilted 藍 seal, like a
|
|
313
|
+
maker's hanko stamp on the sheet (platform CJK font renders the
|
|
314
|
+
glyph — decorative content character, Decision 5 CJK rule) */
|
|
315
|
+
html[data-theme-pack="washi"] .zd-content h1::after {
|
|
316
|
+
content: "藍";
|
|
317
|
+
display: inline-block;
|
|
318
|
+
font-family: var(--font-display);
|
|
319
|
+
font-size: 1rem;
|
|
320
|
+
font-weight: 600;
|
|
321
|
+
line-height: 1;
|
|
322
|
+
color: light-dark(#f6f1e4, #161b24);
|
|
323
|
+
background: var(--zd-accent);
|
|
324
|
+
padding: 0.3em 0.32em 0.24em;
|
|
325
|
+
margin-left: 0.8rem;
|
|
326
|
+
vertical-align: 0.5em;
|
|
327
|
+
border-radius: 2px;
|
|
328
|
+
transform: rotate(-4deg);
|
|
329
|
+
box-shadow: 0 1px 2px light-dark(rgb(43 40 34 / 0.25), rgb(0 0 0 / 0.5));
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/* signature move #3 — quiet asymmetry: the h2 rule is two-tone, a
|
|
333
|
+
short indigo stroke then a long faded one. Replaces the
|
|
334
|
+
SSR-inlined `style="border-image:linear-gradient(...)"` — the
|
|
335
|
+
border-image !important carve-out (Decision 6.6), here re-pointing
|
|
336
|
+
the gradient rather than clearing it. */
|
|
337
|
+
html[data-theme-pack="washi"] .zd-content h2 {
|
|
338
|
+
border-top-width: 2px;
|
|
339
|
+
border-image: linear-gradient(
|
|
340
|
+
to right,
|
|
341
|
+
var(--zd-accent) 0 3.5rem,
|
|
342
|
+
color-mix(in srgb, var(--zd-muted) 38%, transparent) 3.5rem 100%
|
|
343
|
+
)
|
|
344
|
+
1 !important;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/* h3: an unstamped (outline) seal square */
|
|
348
|
+
html[data-theme-pack="washi"] .zd-content h3::before {
|
|
349
|
+
content: "";
|
|
350
|
+
display: inline-block;
|
|
351
|
+
width: 0.5em;
|
|
352
|
+
height: 0.5em;
|
|
353
|
+
border: 1px solid var(--zd-accent);
|
|
354
|
+
margin-right: 0.5em;
|
|
355
|
+
vertical-align: 0.05em;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
/* links: patient underlines */
|
|
359
|
+
html[data-theme-pack="washi"] .zd-content a {
|
|
360
|
+
text-underline-offset: 3px;
|
|
361
|
+
text-decoration-thickness: 1px;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/* blockquote: mincho voice on an indigo thread */
|
|
365
|
+
html[data-theme-pack="washi"] .zd-content blockquote {
|
|
366
|
+
font-family: var(--font-display);
|
|
367
|
+
border-left: 2px solid var(--zd-accent);
|
|
368
|
+
padding-left: 1.2rem;
|
|
369
|
+
color: color-mix(in srgb, var(--zd-fg) 76%, var(--zd-bg));
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/* hr: a torn deckle edge */
|
|
373
|
+
html[data-theme-pack="washi"] .zd-content hr {
|
|
374
|
+
border-top: 1px dashed color-mix(in srgb, var(--zd-muted) 65%, transparent);
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
/* code blocks: an annotated margin with an indigo rule; faint top
|
|
378
|
+
sheen like a pressed sheet */
|
|
379
|
+
html[data-theme-pack="washi"] pre.hi-root {
|
|
380
|
+
border-left: 3px solid color-mix(in srgb, var(--zd-accent) 75%, transparent);
|
|
381
|
+
box-shadow: inset 0 1px 0 light-dark(rgb(255 255 255 / 0.5), rgb(255 255 255 / 0.04));
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
/* inline code: hairline-framed square chip */
|
|
385
|
+
html[data-theme-pack="washi"] .zd-content code:not(pre code) {
|
|
386
|
+
border: 1px solid color-mix(in srgb, var(--zd-muted) 28%, transparent);
|
|
387
|
+
padding: 1px 0.35rem;
|
|
388
|
+
border-radius: 0;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
/* signature move #4 — admonitions: kanji seal chips instead of emoji,
|
|
392
|
+
across all seven variants; mincho titles */
|
|
393
|
+
html[data-theme-pack="washi"] [data-admonition] .admonition-title {
|
|
394
|
+
font-family: var(--font-display);
|
|
395
|
+
letter-spacing: 0.04em;
|
|
396
|
+
}
|
|
397
|
+
html[data-theme-pack="washi"] [data-admonition] .admonition-title::before {
|
|
398
|
+
display: inline-flex;
|
|
399
|
+
align-items: center;
|
|
400
|
+
justify-content: center;
|
|
401
|
+
width: 1.4em;
|
|
402
|
+
height: 1.4em;
|
|
403
|
+
margin-right: 0.55em;
|
|
404
|
+
font-family: var(--font-display);
|
|
405
|
+
font-size: 0.82em;
|
|
406
|
+
font-weight: 600;
|
|
407
|
+
line-height: 1;
|
|
408
|
+
border: 1px solid currentColor;
|
|
409
|
+
border-radius: 2px;
|
|
410
|
+
vertical-align: -0.22em;
|
|
411
|
+
}
|
|
412
|
+
html[data-theme-pack="washi"] [data-admonition="note"] .admonition-title::before {
|
|
413
|
+
content: "註"; /* annotation */
|
|
414
|
+
}
|
|
415
|
+
html[data-theme-pack="washi"] [data-admonition="tip"] .admonition-title::before {
|
|
416
|
+
content: "智"; /* wisdom */
|
|
417
|
+
}
|
|
418
|
+
html[data-theme-pack="washi"] [data-admonition="info"] .admonition-title::before {
|
|
419
|
+
content: "報"; /* information */
|
|
420
|
+
}
|
|
421
|
+
html[data-theme-pack="washi"] [data-admonition="warning"] .admonition-title::before {
|
|
422
|
+
content: "警"; /* warning */
|
|
423
|
+
}
|
|
424
|
+
html[data-theme-pack="washi"] [data-admonition="important"] .admonition-title::before {
|
|
425
|
+
content: "要"; /* essential */
|
|
426
|
+
}
|
|
427
|
+
html[data-theme-pack="washi"] [data-admonition="danger"] .admonition-title::before {
|
|
428
|
+
content: "危"; /* danger */
|
|
429
|
+
}
|
|
430
|
+
html[data-theme-pack="washi"] [data-admonition="caution"] .admonition-title::before {
|
|
431
|
+
content: "注"; /* attention */
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
/* table: indigo-threaded header row */
|
|
435
|
+
html[data-theme-pack="washi"] .zd-content th {
|
|
436
|
+
background: color-mix(in srgb, var(--zd-accent) 8%, transparent);
|
|
437
|
+
border-bottom-color: color-mix(in srgb, var(--zd-accent) 55%, transparent);
|
|
438
|
+
letter-spacing: 0.04em;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
/* sidebar: indigo hover ink. The active link's background is already
|
|
442
|
+
the indigo seal (--zdc-nav-active-indicator-color) with bg-colored
|
|
443
|
+
text — exclude it so hover never paints accent-on-accent. */
|
|
444
|
+
html[data-theme-pack="washi"] #desktop-sidebar a:not([data-nav-active]):hover {
|
|
445
|
+
color: var(--zd-accent);
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
/* TOC: indigo thread rail, indigo hover, solid indigo seal on the
|
|
449
|
+
active entry (real DOM marks it aria-current="true"; its text-bg
|
|
450
|
+
utility keeps paper-colored text on the seal) */
|
|
451
|
+
html[data-theme-pack="washi"] nav[data-zd-toc] ul {
|
|
452
|
+
border-left-color: color-mix(in srgb, var(--zd-accent) 35%, transparent);
|
|
453
|
+
}
|
|
454
|
+
html[data-theme-pack="washi"] nav[data-zd-toc] a:not([aria-current="true"]):hover {
|
|
455
|
+
color: var(--zd-accent);
|
|
456
|
+
}
|
|
457
|
+
html[data-theme-pack="washi"] nav[data-zd-toc] a[aria-current="true"] {
|
|
458
|
+
background: var(--zd-accent);
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
/* pager: flat square paper cards with the sheet grain; hover slides
|
|
462
|
+
an indigo binding edge in from the reading direction (prev = left
|
|
463
|
+
card = left edge; next = right card = right edge — DocPager always
|
|
464
|
+
renders two grid children, so :first/:last-child are stable) */
|
|
465
|
+
html[data-theme-pack="washi"] .zd-content > nav[data-doc-pager] > a {
|
|
466
|
+
background-color: var(--zd-surface);
|
|
467
|
+
background-image: radial-gradient(
|
|
468
|
+
light-dark(rgb(101 78 42 / 0.04), rgb(214 205 180 / 0.028)) 1px,
|
|
469
|
+
transparent 1.2px
|
|
470
|
+
);
|
|
471
|
+
background-size: 11px 13px;
|
|
472
|
+
border-radius: 0;
|
|
473
|
+
}
|
|
474
|
+
html[data-theme-pack="washi"] .zd-content > nav[data-doc-pager] > a:first-child:hover {
|
|
475
|
+
box-shadow: inset 3px 0 0 var(--zd-accent);
|
|
476
|
+
}
|
|
477
|
+
html[data-theme-pack="washi"] .zd-content > nav[data-doc-pager] > a:last-child:hover {
|
|
478
|
+
box-shadow: inset -3px 0 0 var(--zd-accent);
|
|
479
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { THEME_PACK_SLUG_RE, DEFAULT_THEME_PACK_SLUG, themePackMetaSchema, type ThemePackMeta, type ThemePackSwatches, } from "./meta-schema.js";
|
|
2
|
+
export { KNOWN_THEME_PACK_TOKEN_NAMES, COMMERCIAL_FONT_DENYLIST, THEME_PACK_SOFT_BUDGET_BYTES, } from "./token-manifest.js";
|
|
3
|
+
export { validateThemePack, type ThemePackValidationInput, type ThemePackValidationIssue, type ThemePackValidationResult, type ThemePackValidationSeverity, } from "./validator.js";
|
|
4
|
+
export { loadThemePackRegistry, type ThemePackRegistry, type ThemePackRegistryEntry, } from "./load-registry.js";
|
|
5
|
+
export { resolveEnabledPacks, type ResolveEnabledPacksSettings, } from "./resolve-enabled-packs.js";
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import {
|
|
2
|
+
THEME_PACK_SLUG_RE,
|
|
3
|
+
DEFAULT_THEME_PACK_SLUG,
|
|
4
|
+
themePackMetaSchema
|
|
5
|
+
} from "./meta-schema.js";
|
|
6
|
+
import {
|
|
7
|
+
KNOWN_THEME_PACK_TOKEN_NAMES,
|
|
8
|
+
COMMERCIAL_FONT_DENYLIST,
|
|
9
|
+
THEME_PACK_SOFT_BUDGET_BYTES
|
|
10
|
+
} from "./token-manifest.js";
|
|
11
|
+
import {
|
|
12
|
+
validateThemePack
|
|
13
|
+
} from "./validator.js";
|
|
14
|
+
import {
|
|
15
|
+
loadThemePackRegistry
|
|
16
|
+
} from "./load-registry.js";
|
|
17
|
+
import {
|
|
18
|
+
resolveEnabledPacks
|
|
19
|
+
} from "./resolve-enabled-packs.js";
|
|
20
|
+
export {
|
|
21
|
+
COMMERCIAL_FONT_DENYLIST,
|
|
22
|
+
DEFAULT_THEME_PACK_SLUG,
|
|
23
|
+
KNOWN_THEME_PACK_TOKEN_NAMES,
|
|
24
|
+
THEME_PACK_SLUG_RE,
|
|
25
|
+
THEME_PACK_SOFT_BUDGET_BYTES,
|
|
26
|
+
loadThemePackRegistry,
|
|
27
|
+
resolveEnabledPacks,
|
|
28
|
+
themePackMetaSchema,
|
|
29
|
+
validateThemePack
|
|
30
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ThemePackMeta } from "./meta-schema.js";
|
|
2
|
+
/** One entry in the aggregated, canonically-ordered bundled registry. */
|
|
3
|
+
export interface ThemePackRegistryEntry {
|
|
4
|
+
/** The pack's directory name (equals `meta.slug`). */
|
|
5
|
+
slug: string;
|
|
6
|
+
/** The pack's schema-validated `meta.json`. */
|
|
7
|
+
meta: ThemePackMeta;
|
|
8
|
+
/** Whether this pack ships a `pack.css` (always `false` for `"default"`). */
|
|
9
|
+
hasStylesheet: boolean;
|
|
10
|
+
}
|
|
11
|
+
/** The full bundled registry, or a subset of it (after `resolveEnabledPacks`)
|
|
12
|
+
* — an ordered array; order carries meaning (canonical / switcher order). */
|
|
13
|
+
export type ThemePackRegistry = ThemePackRegistryEntry[];
|
|
14
|
+
/**
|
|
15
|
+
* Scan `dir` (a `theme-packs/` directory — `src/theme-packs/` in the
|
|
16
|
+
* workspace, `dist/theme-packs/` once shipped) for per-slug pack directories,
|
|
17
|
+
* validate each with {@link validateThemePack}, and return them in canonical
|
|
18
|
+
* (alphabetical-by-slug) order. Throws — naming the offending pack and the
|
|
19
|
+
* failed rule(s) — on any pack that fails validation; this is the package's
|
|
20
|
+
* OWN bundled packs, so a failure here means the package itself shipped a
|
|
21
|
+
* broken pack, not a consumer misconfiguration.
|
|
22
|
+
*/
|
|
23
|
+
export declare function loadThemePackRegistry(dir: string | URL): ThemePackRegistry;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { validateThemePack } from "./validator.js";
|
|
5
|
+
function readFontFiles(fontsDir) {
|
|
6
|
+
if (!existsSync(fontsDir)) return [];
|
|
7
|
+
return readdirSync(fontsDir, { withFileTypes: true }).filter((e) => e.isFile()).map((e) => e.name);
|
|
8
|
+
}
|
|
9
|
+
function computeTotalPayloadBytes(packDir, cssContent) {
|
|
10
|
+
let total = cssContent ? Buffer.byteLength(cssContent, "utf8") : 0;
|
|
11
|
+
const fontsDir = join(packDir, "fonts");
|
|
12
|
+
if (existsSync(fontsDir)) {
|
|
13
|
+
for (const entry of readdirSync(fontsDir, { withFileTypes: true })) {
|
|
14
|
+
if (!entry.isFile() || entry.name.toUpperCase() === "OFL.TXT") continue;
|
|
15
|
+
total += statSync(join(fontsDir, entry.name)).size;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return total;
|
|
19
|
+
}
|
|
20
|
+
function loadThemePackRegistry(dir) {
|
|
21
|
+
const dirPath = dir instanceof URL ? fileURLToPath(dir) : dir;
|
|
22
|
+
if (!existsSync(dirPath)) {
|
|
23
|
+
throw new Error(
|
|
24
|
+
`zudo-doc: theme-packs directory not found at "${dirPath}" \u2014 the @takazudo/zudo-doc package installation may be incomplete or corrupted.`
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
const slugs = readdirSync(dirPath, { withFileTypes: true }).filter((e) => e.isDirectory()).map((e) => e.name).sort();
|
|
28
|
+
const entries = [];
|
|
29
|
+
for (const slug of slugs) {
|
|
30
|
+
const packDir = join(dirPath, slug);
|
|
31
|
+
const metaPath = join(packDir, "meta.json");
|
|
32
|
+
if (!existsSync(metaPath)) {
|
|
33
|
+
throw new Error(`zudo-doc: theme pack "${slug}" is missing meta.json at "${metaPath}".`);
|
|
34
|
+
}
|
|
35
|
+
let metaRaw;
|
|
36
|
+
try {
|
|
37
|
+
metaRaw = JSON.parse(readFileSync(metaPath, "utf8"));
|
|
38
|
+
} catch (err) {
|
|
39
|
+
throw new Error(
|
|
40
|
+
`zudo-doc: theme pack "${slug}" has invalid JSON in meta.json: ${err.message}`
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
const cssPath = join(packDir, "pack.css");
|
|
44
|
+
const cssContent = existsSync(cssPath) ? readFileSync(cssPath, "utf8") : null;
|
|
45
|
+
const fontFiles = readFontFiles(join(packDir, "fonts"));
|
|
46
|
+
const totalPayloadBytes = computeTotalPayloadBytes(packDir, cssContent);
|
|
47
|
+
const result = validateThemePack({ dirName: slug, metaRaw, cssContent, fontFiles, totalPayloadBytes });
|
|
48
|
+
for (const issue of result.issues) {
|
|
49
|
+
if (issue.severity === "warning") {
|
|
50
|
+
console.warn(`[zudo-doc] theme pack "${slug}": ${issue.message}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (!result.valid || !result.meta) {
|
|
54
|
+
const errorLines = result.issues.filter((i) => i.severity === "error").map((i) => ` - [${i.rule}] ${i.message}`).join("\n");
|
|
55
|
+
throw new Error(`zudo-doc: theme pack "${slug}" failed validation:
|
|
56
|
+
${errorLines}`);
|
|
57
|
+
}
|
|
58
|
+
entries.push({ slug, meta: result.meta, hasStylesheet: cssContent !== null });
|
|
59
|
+
}
|
|
60
|
+
return entries;
|
|
61
|
+
}
|
|
62
|
+
export {
|
|
63
|
+
loadThemePackRegistry
|
|
64
|
+
};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** `[a-z0-9][a-z0-9-]*` — a pack's slug MUST equal its directory name
|
|
3
|
+
* (Decision 6.7 "slug regex + dir-name parity"). */
|
|
4
|
+
export declare const THEME_PACK_SLUG_RE: RegExp;
|
|
5
|
+
/** The reserved slug meaning "the stock zudo-doc look" — ships `meta.json`
|
|
6
|
+
* ONLY (no `pack.css`); the runtime never inserts a stylesheet link for it
|
|
7
|
+
* (ADR Decision 1, "The reserved `default` pack"). */
|
|
8
|
+
export declare const DEFAULT_THEME_PACK_SLUG = "default";
|
|
9
|
+
declare const themePackSwatchesSchema: z.ZodObject<{
|
|
10
|
+
bg: z.ZodString;
|
|
11
|
+
fg: z.ZodString;
|
|
12
|
+
accent: z.ZodString;
|
|
13
|
+
syntax: z.ZodObject<{
|
|
14
|
+
keyword: z.ZodString;
|
|
15
|
+
string: z.ZodString;
|
|
16
|
+
comment: z.ZodString;
|
|
17
|
+
callable: z.ZodString;
|
|
18
|
+
}, z.core.$strip>;
|
|
19
|
+
}, z.core.$strip>;
|
|
20
|
+
/** Preview swatches for the dialog grid — RESOLVED plain CSS colors, one set
|
|
21
|
+
* per mode. See {@link themePackMetaSchema}'s `preview` field. */
|
|
22
|
+
export type ThemePackSwatches = z.infer<typeof themePackSwatchesSchema>;
|
|
23
|
+
export declare const themePackMetaSchema: z.ZodObject<{
|
|
24
|
+
schemaVersion: z.ZodLiteral<1>;
|
|
25
|
+
slug: z.ZodString;
|
|
26
|
+
name: z.ZodString;
|
|
27
|
+
description: z.ZodString;
|
|
28
|
+
mode: z.ZodEnum<{
|
|
29
|
+
light: "light";
|
|
30
|
+
dark: "dark";
|
|
31
|
+
}>;
|
|
32
|
+
version: z.ZodString;
|
|
33
|
+
fonts: z.ZodObject<{
|
|
34
|
+
sans: z.ZodString;
|
|
35
|
+
mono: z.ZodString;
|
|
36
|
+
display: z.ZodOptional<z.ZodString>;
|
|
37
|
+
loaded: z.ZodArray<z.ZodString>;
|
|
38
|
+
}, z.core.$strip>;
|
|
39
|
+
preview: z.ZodObject<{
|
|
40
|
+
light: z.ZodObject<{
|
|
41
|
+
bg: z.ZodString;
|
|
42
|
+
fg: z.ZodString;
|
|
43
|
+
accent: z.ZodString;
|
|
44
|
+
syntax: z.ZodObject<{
|
|
45
|
+
keyword: z.ZodString;
|
|
46
|
+
string: z.ZodString;
|
|
47
|
+
comment: z.ZodString;
|
|
48
|
+
callable: z.ZodString;
|
|
49
|
+
}, z.core.$strip>;
|
|
50
|
+
}, z.core.$strip>;
|
|
51
|
+
dark: z.ZodObject<{
|
|
52
|
+
bg: z.ZodString;
|
|
53
|
+
fg: z.ZodString;
|
|
54
|
+
accent: z.ZodString;
|
|
55
|
+
syntax: z.ZodObject<{
|
|
56
|
+
keyword: z.ZodString;
|
|
57
|
+
string: z.ZodString;
|
|
58
|
+
comment: z.ZodString;
|
|
59
|
+
callable: z.ZodString;
|
|
60
|
+
}, z.core.$strip>;
|
|
61
|
+
}, z.core.$strip>;
|
|
62
|
+
}, z.core.$strip>;
|
|
63
|
+
}, z.core.$strip>;
|
|
64
|
+
/**
|
|
65
|
+
* A pack's `meta.json`, schema-validated (ADR Decision 1). `mode` is a
|
|
66
|
+
* designed-primary badge only — every pack still defines BOTH modes via
|
|
67
|
+
* `light-dark()` in `pack.css`.
|
|
68
|
+
*/
|
|
69
|
+
export type ThemePackMeta = z.infer<typeof themePackMetaSchema>;
|
|
70
|
+
export {};
|