@takazudo/zudo-doc 3.3.0 → 4.1.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 +51 -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 -10
- package/dist/chrome/derive.js +53 -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 +68 -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 +71 -3
- package/dist/color-scheme-utils.js +137 -0
- package/dist/color-schemes-defaults/index.js +13 -0
- package/dist/config/component-tokens.d.ts +1 -1
- package/dist/config/component-tokens.js +104 -5
- package/dist/config.d.ts +28 -12
- package/dist/config.js +11 -2
- 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 +45 -40
- package/dist/design-token-panel-bootstrap.js +98 -21
- package/dist/design-token-panel-config/index.js +1 -4
- 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 +39 -17
- package/dist/doc-body-end-islands/index.js +13 -21
- 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.js +1 -5
- 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 +42 -4
- package/dist/features.css +80 -45
- package/dist/footer/footer.js +1 -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/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 +11 -1
- 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 +19 -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 +2 -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 +27 -12
- package/dist/sidebar-toggle-island/index.js +1 -0
- 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/toc/mobile-toc.js +1 -1
- package/dist/versions-page/index.d.ts +2 -2
- package/dist/versions-page/index.js +8 -8
- 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/sidebar-toggle-island/index.tsx +7 -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/eject/toc/mobile-toc.tsx +9 -1
- package/package.json +35 -29
- package/routes-src/404.tsx +4 -1
- package/routes-src/_chrome.tsx +6 -5
- package/routes-src/_context.ts +4 -0
- package/routes-src/_docs-helpers.ts +9 -29
- package/routes-src/_virtual.d.ts +4 -0
- package/virtual-modules.d.ts +4 -0
- package/zfb-config-shim.d.ts +40 -18
- 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
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export type { HeadingItem } from "../extract-headings/index.js";
|
|
2
2
|
import type { HeadingItem } from "../extract-headings/index.js";
|
|
3
3
|
import type { BreadcrumbItem } from "../breadcrumb/types.js";
|
|
4
|
+
import type { CollectionEntry } from "@takazudo/zfb/content";
|
|
4
5
|
/**
|
|
5
6
|
* Nav tree node shape as consumed by doc-route pages.
|
|
6
7
|
*
|
|
@@ -35,37 +36,20 @@ export interface DocPageFrontmatter {
|
|
|
35
36
|
draft?: boolean;
|
|
36
37
|
unlisted?: boolean;
|
|
37
38
|
standalone?: boolean;
|
|
39
|
+
sidebar_position?: number;
|
|
40
|
+
sidebar_label?: string;
|
|
38
41
|
category_no_page?: boolean;
|
|
42
|
+
category_sort_order?: "asc" | "desc";
|
|
39
43
|
pagination_prev?: string | null;
|
|
40
44
|
pagination_next?: string | null;
|
|
41
45
|
tags?: string[];
|
|
42
46
|
[key: string]: unknown;
|
|
43
47
|
}
|
|
44
48
|
/**
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
* renderer surface.
|
|
48
|
-
*
|
|
49
|
-
* Structural counterpart of the host's `DocPageEntry` (from
|
|
50
|
-
* `pages/lib/doc-page-props.ts`). The host stub re-exports this type under
|
|
51
|
-
* the original name.
|
|
49
|
+
* The native zfb collection entry with docs frontmatter. Route consumers
|
|
50
|
+
* derive canonical route slugs from `entry.data.slug ?? toRouteSlug(entry.slug)`.
|
|
52
51
|
*/
|
|
53
|
-
export
|
|
54
|
-
/** zfb content engine slug (filename without `.md`/`.mdx`). */
|
|
55
|
-
slug: string;
|
|
56
|
-
/** Bridged from `slug` for host `@/utils/docs` compat. */
|
|
57
|
-
id: string;
|
|
58
|
-
/** Collection name, e.g. "docs", "docs-ja", "docs-v-1.0". */
|
|
59
|
-
collection: string;
|
|
60
|
-
/** Parsed frontmatter. Structural superset of `DocPageFrontmatter`. */
|
|
61
|
-
data: DocPageFrontmatter;
|
|
62
|
-
/** Raw MDX body (for heading extraction). */
|
|
63
|
-
body?: string;
|
|
64
|
-
/** zfb module specifier (for Content bridge). */
|
|
65
|
-
module_specifier: string;
|
|
66
|
-
/** zfb content renderer — callable Preact component. */
|
|
67
|
-
Content: unknown;
|
|
68
|
-
}
|
|
52
|
+
export type DocPageEntry = CollectionEntry<DocPageFrontmatter>;
|
|
69
53
|
export interface AutoIndexNode extends DocNavNode {
|
|
70
54
|
children: DocNavNode[];
|
|
71
55
|
}
|
|
@@ -102,6 +102,7 @@ function createRenderDocPage(ctx) {
|
|
|
102
102
|
slug,
|
|
103
103
|
locale,
|
|
104
104
|
entrySlug: props.entry.slug,
|
|
105
|
+
sourceFileExt: props.entry.module_specifier.endsWith(".mdx") ? ".mdx" : props.entry.module_specifier.endsWith(".md") ? ".md" : void 0,
|
|
105
106
|
contentDir: opts.docHistoryContentDir,
|
|
106
107
|
isFallback
|
|
107
108
|
}
|
|
@@ -1,29 +1,32 @@
|
|
|
1
1
|
import { Fragment, jsx, jsxs } from "preact/jsx-runtime";
|
|
2
2
|
import { Island } from "@takazudo/zfb";
|
|
3
3
|
import { DocLayoutWithDefaults } from "../doclayout/index.js";
|
|
4
|
-
import {
|
|
5
|
-
import { Breadcrumb } from "../breadcrumb/index.js";
|
|
4
|
+
import { MobileToc, getTocTitle } from "../toc/index.js";
|
|
6
5
|
import { NavCardGrid } from "../nav-indexing/index.js";
|
|
7
6
|
import {
|
|
8
7
|
createSidebarPrepaint,
|
|
9
8
|
createSidebarVisibilityPrepaint
|
|
10
9
|
} from "../sidebar-prepaint/index.js";
|
|
11
10
|
import { createHeadWithDefaults } from "../head-with-defaults/index.js";
|
|
12
|
-
import {
|
|
13
|
-
import { createHeaderWithDefaults } from "../header-with-defaults/index.js";
|
|
14
|
-
import { createFooterWithDefaults } from "../footer-with-defaults/index.js";
|
|
11
|
+
import { resolveThemePackSsrSlug } from "../theme/theme-pack-provider.js";
|
|
15
12
|
import { createDocBodyEnd } from "../doc-body-end/index.js";
|
|
16
|
-
import { createDocPager } from "../doc-pager/index.js";
|
|
17
13
|
import { deriveComposeMetaTitle } from "../chrome/derive.js";
|
|
14
|
+
import { derivePrimaryChromeSlots } from "../chrome/primary-slots.js";
|
|
18
15
|
import { assertChromeContext } from "../chrome/assert-chrome-context.js";
|
|
19
16
|
function createDocPageShell(ctx) {
|
|
20
17
|
assertChromeContext(ctx, "createDocPageShell");
|
|
21
18
|
const settings = ctx.settings;
|
|
22
19
|
const composeMetaTitle = deriveComposeMetaTitle(ctx);
|
|
23
20
|
const HeadWithDefaults = createHeadWithDefaults(ctx);
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
const {
|
|
22
|
+
Header: HeaderWithDefaults,
|
|
23
|
+
Footer: FooterWithDefaults,
|
|
24
|
+
Sidebar: SidebarWithDefaults,
|
|
25
|
+
Toc,
|
|
26
|
+
Breadcrumb,
|
|
27
|
+
DocPager
|
|
28
|
+
} = derivePrimaryChromeSlots(ctx);
|
|
29
|
+
const customTocIsPresent = ctx.hostBindings.Toc !== void 0;
|
|
27
30
|
const sidebarToggleEnabled = Boolean(
|
|
28
31
|
ctx.settings.sidebarToggle
|
|
29
32
|
);
|
|
@@ -34,7 +37,10 @@ function createDocPageShell(ctx) {
|
|
|
34
37
|
sidebarToggle: sidebarToggleEnabled
|
|
35
38
|
});
|
|
36
39
|
const DocBodyEnd = createDocBodyEnd(ctx);
|
|
37
|
-
const
|
|
40
|
+
const dataThemePack = resolveThemePackSsrSlug(
|
|
41
|
+
ctx.themePackRegistry,
|
|
42
|
+
ctx.settings
|
|
43
|
+
);
|
|
38
44
|
function DocPageShell(props) {
|
|
39
45
|
const {
|
|
40
46
|
kind,
|
|
@@ -66,7 +72,7 @@ function createDocPageShell(ctx) {
|
|
|
66
72
|
} = props;
|
|
67
73
|
const tocTitle = getTocTitle(locale);
|
|
68
74
|
const shouldRenderToc = !hideToc && headings.length > 0;
|
|
69
|
-
const tocOverride = shouldRenderToc ? Island({
|
|
75
|
+
const tocOverride = shouldRenderToc ? customTocIsPresent ? /* @__PURE__ */ jsx(Toc, { headings, title: tocTitle }) : Island({
|
|
70
76
|
when: "load",
|
|
71
77
|
children: /* @__PURE__ */ jsx(Toc, { headings, title: tocTitle })
|
|
72
78
|
}) : void 0;
|
|
@@ -84,6 +90,7 @@ function createDocPageShell(ctx) {
|
|
|
84
90
|
/* @__PURE__ */ jsx(SidebarVisibilityPrepaint, { hideSidebar })
|
|
85
91
|
] }),
|
|
86
92
|
lang: locale,
|
|
93
|
+
dataThemePack,
|
|
87
94
|
noindex: settings.noindex,
|
|
88
95
|
hideSidebar,
|
|
89
96
|
hideToc,
|
|
@@ -128,7 +135,7 @@ function createDocPageShell(ctx) {
|
|
|
128
135
|
/* @__PURE__ */ jsxs(Fragment, { children: [
|
|
129
136
|
/* @__PURE__ */ jsx("h1", { class: "text-heading font-bold mb-vsp-xs", children: autoIndexLabel }),
|
|
130
137
|
metainfoSlot,
|
|
131
|
-
description && /* @__PURE__ */ jsx("p", { class: "mb-vsp-lg text-title text-muted", children: description }),
|
|
138
|
+
description && /* @__PURE__ */ jsx("p", { class: "mb-vsp-lg text-title text-muted", "data-doc-description": true, children: description }),
|
|
132
139
|
/* @__PURE__ */ jsx(NavCardGrid, { children: autoIndexChildren ?? [] })
|
|
133
140
|
] })
|
|
134
141
|
) : (
|
package/dist/doc-pager/index.js
CHANGED
|
@@ -5,7 +5,7 @@ function createDocPager(ctx) {
|
|
|
5
5
|
assertChromeContext(ctx, "createDocPager");
|
|
6
6
|
const t = ctx.t;
|
|
7
7
|
function DocPager({ prev, next, locale }) {
|
|
8
|
-
return /* @__PURE__ */ jsxs("nav", { class: "mt-vsp-2xl grid grid-cols-2 gap-hsp-xl", children: [
|
|
8
|
+
return /* @__PURE__ */ jsxs("nav", { class: "mt-vsp-2xl grid grid-cols-2 gap-hsp-xl", "data-doc-pager": true, children: [
|
|
9
9
|
prev ? /* @__PURE__ */ jsxs(
|
|
10
10
|
"a",
|
|
11
11
|
{
|
|
@@ -63,7 +63,7 @@ export interface DocRouteEntriesContext {
|
|
|
63
63
|
/** Filter top-level nav nodes by a categoryMatch value. */
|
|
64
64
|
getNavSubtree: (tree: DocNavNode[], categoryMatch?: string) => DocNavNode[];
|
|
65
65
|
/** Convert a content entry slug to a canonical route slug. */
|
|
66
|
-
toRouteSlug: (
|
|
66
|
+
toRouteSlug: (entrySlug: string) => string;
|
|
67
67
|
/** Convert a canonical route slug to an optional-catchall params array. */
|
|
68
68
|
toSlugParams: (slug: string) => string[];
|
|
69
69
|
/** Extract headings from a raw MDX body (bound to settings depth/strategy). */
|
|
@@ -91,7 +91,7 @@ export interface DocRouteEntriesAPI {
|
|
|
91
91
|
* import { createDocRouteEntries } from "@takazudo/zudo-doc/doc-route-entries";
|
|
92
92
|
* import { buildNavTree, buildBreadcrumbs, collectAutoIndexNodes } from "@/utils/docs";
|
|
93
93
|
* import { getNavSectionForSlug, getNavSubtree } from "@/utils/nav-scope";
|
|
94
|
-
* import { toRouteSlug, toSlugParams } from "
|
|
94
|
+
* import { toRouteSlug, toSlugParams } from "@takazudo/zudo-doc/slug";
|
|
95
95
|
* import { extractHeadings } from "./_extract-headings";
|
|
96
96
|
*
|
|
97
97
|
* export const { buildDocRouteEntries } = createDocRouteEntries(routeContext);
|
|
@@ -120,10 +120,10 @@ function DocLayoutWithDefaults(props) {
|
|
|
120
120
|
footer: footerOverride ?? /* @__PURE__ */ jsx(Footer, {}),
|
|
121
121
|
bodyEndComponents,
|
|
122
122
|
bodyEndScripts: bodyEndScripts ?? // Default body-end scripts:
|
|
123
|
-
// - CodeBlockEnhancer wraps every <pre
|
|
124
|
-
// copy + word-wrap controls and emits an SR-announce live
|
|
125
|
-
// region for clipboard feedback.
|
|
126
|
-
// fenced code.
|
|
123
|
+
// - CodeBlockEnhancer wraps every highlighted <pre> (`.hi-root`)
|
|
124
|
+
// with copy + word-wrap controls and emits an SR-announce live
|
|
125
|
+
// region for clipboard feedback.
|
|
126
|
+
// Idempotent on pages with no fenced code.
|
|
127
127
|
// - TabsInit activates the correct tab panel and wires click
|
|
128
128
|
// handlers for <Tabs> components.
|
|
129
129
|
// - MermaidInit lazily imports the mermaid library from
|
|
@@ -12,6 +12,14 @@ export interface DocLayoutHtmlAttrs {
|
|
|
12
12
|
* Set per `<html>`-level color-scheme strategy.
|
|
13
13
|
*/
|
|
14
14
|
dataTheme?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Optional `data-theme-pack` attribute value — the CONFIGURED theme-pack
|
|
17
|
+
* slug (ADR `docs/adr/theme-packs.md`, Decision 3 DOM contract, #2822).
|
|
18
|
+
* Unlike `data-theme` (user-preference-only, client-set) the configured
|
|
19
|
+
* pack is build-static, so SSR can and must emit it for the no-JS path;
|
|
20
|
+
* the pre-paint bootstrap re-asserts the user's persisted slug on load.
|
|
21
|
+
*/
|
|
22
|
+
dataThemePack?: string;
|
|
15
23
|
/**
|
|
16
24
|
* Optional inline `style` value to apply to `<html>` — in practice this
|
|
17
25
|
* is `color-scheme: light` / `color-scheme: dark`.
|
|
@@ -8,6 +8,7 @@ function DocLayout(props) {
|
|
|
8
8
|
noindex,
|
|
9
9
|
lang = "en",
|
|
10
10
|
dataTheme,
|
|
11
|
+
dataThemePack,
|
|
11
12
|
htmlStyle,
|
|
12
13
|
head,
|
|
13
14
|
header,
|
|
@@ -35,6 +36,9 @@ function DocLayout(props) {
|
|
|
35
36
|
if (dataTheme !== void 0) {
|
|
36
37
|
htmlAttrs["data-theme"] = dataTheme;
|
|
37
38
|
}
|
|
39
|
+
if (dataThemePack !== void 0) {
|
|
40
|
+
htmlAttrs["data-theme-pack"] = dataThemePack;
|
|
41
|
+
}
|
|
38
42
|
if (htmlStyle !== void 0) {
|
|
39
43
|
htmlAttrs.style = htmlStyle;
|
|
40
44
|
}
|
|
@@ -46,7 +50,12 @@ function DocLayout(props) {
|
|
|
46
50
|
description !== void 0 && /* @__PURE__ */ jsx("meta", { name: "description", content: description }),
|
|
47
51
|
noindex && /* @__PURE__ */ jsx("meta", { name: "robots", content: "noindex, nofollow" }),
|
|
48
52
|
enableClientRouter !== false ? ClientRouter({
|
|
49
|
-
preserveHtmlAttrs: [
|
|
53
|
+
preserveHtmlAttrs: [
|
|
54
|
+
"data-sidebar-hidden",
|
|
55
|
+
"data-theme",
|
|
56
|
+
"data-theme-pack",
|
|
57
|
+
"style"
|
|
58
|
+
]
|
|
50
59
|
}) : null,
|
|
51
60
|
head
|
|
52
61
|
] }),
|
|
@@ -3,11 +3,7 @@ function buildTagsSchema(opts) {
|
|
|
3
3
|
const vocabulary = opts?.tagVocabulary ?? [];
|
|
4
4
|
const vocabularyActive = vocabulary.length > 0 && opts?.tagGovernance === "strict";
|
|
5
5
|
if (!vocabularyActive) return z.array(z.string()).optional();
|
|
6
|
-
const allowed =
|
|
7
|
-
for (const entry of vocabulary) {
|
|
8
|
-
allowed.add(entry.id);
|
|
9
|
-
for (const alias of entry.aliases ?? []) allowed.add(alias);
|
|
10
|
-
}
|
|
6
|
+
const allowed = new Set(vocabulary.map((entry) => entry.id));
|
|
11
7
|
const allowedList = [...allowed];
|
|
12
8
|
if (allowedList.length === 0) return z.array(z.string()).optional();
|
|
13
9
|
const [first, ...rest] = allowedList;
|
package/dist/eject/index.d.ts
CHANGED
|
@@ -1,8 +1,24 @@
|
|
|
1
|
+
export type PrimaryChromeSlot = "Header" | "Footer" | "Sidebar" | "Toc" | "Breadcrumb" | "DocPager";
|
|
2
|
+
export type EjectableClassification = {
|
|
3
|
+
kind: "primary";
|
|
4
|
+
/** The matching primary replacement key in `ChromeHostBindings`. */
|
|
5
|
+
slot: PrimaryChromeSlot;
|
|
6
|
+
} | {
|
|
7
|
+
kind: "nested";
|
|
8
|
+
/** Exact supported binding or owner-replacement instructions. */
|
|
9
|
+
remediation: string;
|
|
10
|
+
} | {
|
|
11
|
+
kind: "content";
|
|
12
|
+
/** Exact project-owned MDX registration instructions. */
|
|
13
|
+
remediation: string;
|
|
14
|
+
};
|
|
1
15
|
export interface EjectableEntry {
|
|
2
16
|
/** Package subpath, e.g. `@takazudo/zudo-doc/header` */
|
|
3
17
|
packageSubpath: string;
|
|
4
18
|
/** Local destination dir, project-relative POSIX (no trailing slash) */
|
|
5
19
|
localDir: string;
|
|
20
|
+
/** Static rendering/binding class. Never infer this from host call sites. */
|
|
21
|
+
classification: EjectableClassification;
|
|
6
22
|
}
|
|
7
23
|
export declare const EJECTABLE: Record<string, EjectableEntry>;
|
|
8
24
|
export interface ZudoDocJson {
|
package/dist/eject/index.js
CHANGED
|
@@ -4,77 +4,171 @@ import pc from "picocolors";
|
|
|
4
4
|
const EJECTABLE = {
|
|
5
5
|
header: {
|
|
6
6
|
packageSubpath: "@takazudo/zudo-doc/header",
|
|
7
|
-
localDir: "src/components/zudo-doc/header"
|
|
7
|
+
localDir: "src/components/zudo-doc/header",
|
|
8
|
+
classification: { kind: "primary", slot: "Header" }
|
|
8
9
|
},
|
|
9
10
|
footer: {
|
|
10
11
|
packageSubpath: "@takazudo/zudo-doc/footer",
|
|
11
|
-
localDir: "src/components/zudo-doc/footer"
|
|
12
|
+
localDir: "src/components/zudo-doc/footer",
|
|
13
|
+
classification: { kind: "primary", slot: "Footer" }
|
|
12
14
|
},
|
|
13
15
|
breadcrumb: {
|
|
14
16
|
packageSubpath: "@takazudo/zudo-doc/breadcrumb",
|
|
15
|
-
localDir: "src/components/zudo-doc/breadcrumb"
|
|
17
|
+
localDir: "src/components/zudo-doc/breadcrumb",
|
|
18
|
+
classification: { kind: "primary", slot: "Breadcrumb" }
|
|
16
19
|
},
|
|
17
20
|
toc: {
|
|
18
21
|
packageSubpath: "@takazudo/zudo-doc/toc",
|
|
19
|
-
localDir: "src/components/zudo-doc/toc"
|
|
22
|
+
localDir: "src/components/zudo-doc/toc",
|
|
23
|
+
classification: { kind: "primary", slot: "Toc" }
|
|
20
24
|
},
|
|
21
25
|
sidebar: {
|
|
22
26
|
packageSubpath: "@takazudo/zudo-doc/sidebar",
|
|
23
|
-
localDir: "src/components/zudo-doc/sidebar"
|
|
27
|
+
localDir: "src/components/zudo-doc/sidebar",
|
|
28
|
+
classification: { kind: "primary", slot: "Sidebar" }
|
|
24
29
|
},
|
|
25
30
|
"theme-toggle": {
|
|
26
31
|
packageSubpath: "@takazudo/zudo-doc/theme-toggle",
|
|
27
|
-
localDir: "src/components/zudo-doc/theme-toggle"
|
|
32
|
+
localDir: "src/components/zudo-doc/theme-toggle",
|
|
33
|
+
classification: {
|
|
34
|
+
kind: "nested",
|
|
35
|
+
remediation: 'Register the local ThemeToggle under a new name in chromeBindings.headerRightComponents, then use that same name in settings.headerRightItems. The built-in name "theme-toggle" is reserved.'
|
|
36
|
+
}
|
|
28
37
|
},
|
|
29
38
|
"page-loading": {
|
|
30
39
|
packageSubpath: "@takazudo/zudo-doc/page-loading",
|
|
31
|
-
localDir: "src/components/zudo-doc/page-loading"
|
|
40
|
+
localDir: "src/components/zudo-doc/page-loading",
|
|
41
|
+
classification: {
|
|
42
|
+
kind: "nested",
|
|
43
|
+
remediation: "Replace chromeBindings.BodyEndIslands with a project-owned composition that imports the local PageLoadingOverlay."
|
|
44
|
+
}
|
|
32
45
|
},
|
|
33
46
|
"tab-item": {
|
|
34
47
|
packageSubpath: "@takazudo/zudo-doc/tab-item",
|
|
35
|
-
localDir: "src/components/zudo-doc/tab-item"
|
|
48
|
+
localDir: "src/components/zudo-doc/tab-item",
|
|
49
|
+
classification: {
|
|
50
|
+
kind: "content",
|
|
51
|
+
remediation: "Set chromeBindings.mdxExtras.TabItem to the local TabItem."
|
|
52
|
+
}
|
|
36
53
|
},
|
|
37
54
|
"doc-pager": {
|
|
38
55
|
packageSubpath: "@takazudo/zudo-doc/doc-pager",
|
|
39
|
-
localDir: "src/components/zudo-doc/doc-pager"
|
|
56
|
+
localDir: "src/components/zudo-doc/doc-pager",
|
|
57
|
+
classification: { kind: "primary", slot: "DocPager" }
|
|
40
58
|
},
|
|
41
59
|
"content-admonition": {
|
|
42
60
|
packageSubpath: "@takazudo/zudo-doc/content-admonition",
|
|
43
|
-
localDir: "src/components/zudo-doc/content-admonition"
|
|
61
|
+
localDir: "src/components/zudo-doc/content-admonition",
|
|
62
|
+
classification: {
|
|
63
|
+
kind: "content",
|
|
64
|
+
remediation: "Create the local admonition renderers with makeAdmonition, then set the matching chromeBindings.mdxExtras keys (Note, Tip, Info, Warning, and Danger)."
|
|
65
|
+
}
|
|
44
66
|
},
|
|
45
67
|
"code-group": {
|
|
46
68
|
packageSubpath: "@takazudo/zudo-doc/code-group",
|
|
47
|
-
localDir: "src/components/zudo-doc/code-group"
|
|
69
|
+
localDir: "src/components/zudo-doc/code-group",
|
|
70
|
+
classification: {
|
|
71
|
+
kind: "content",
|
|
72
|
+
remediation: "Set chromeBindings.mdxExtras.CodeGroup to the local CodeGroup."
|
|
73
|
+
}
|
|
48
74
|
},
|
|
49
75
|
details: {
|
|
50
76
|
packageSubpath: "@takazudo/zudo-doc/details",
|
|
51
|
-
localDir: "src/components/zudo-doc/details"
|
|
77
|
+
localDir: "src/components/zudo-doc/details",
|
|
78
|
+
classification: {
|
|
79
|
+
kind: "content",
|
|
80
|
+
remediation: "Set chromeBindings.mdxExtras.Details to the local Details component."
|
|
81
|
+
}
|
|
52
82
|
},
|
|
53
83
|
"sidebar-tree-island": {
|
|
54
84
|
packageSubpath: "@takazudo/zudo-doc/sidebar-tree-island",
|
|
55
|
-
localDir: "src/components/zudo-doc/sidebar-tree-island"
|
|
85
|
+
localDir: "src/components/zudo-doc/sidebar-tree-island",
|
|
86
|
+
classification: {
|
|
87
|
+
kind: "nested",
|
|
88
|
+
remediation: "Replace the chromeBindings.Sidebar primary component with a project-owned sidebar composition that imports the local SidebarTree island."
|
|
89
|
+
}
|
|
56
90
|
},
|
|
57
91
|
"sidebar-toggle-island": {
|
|
58
92
|
packageSubpath: "@takazudo/zudo-doc/sidebar-toggle-island",
|
|
59
|
-
localDir: "src/components/zudo-doc/sidebar-toggle-island"
|
|
93
|
+
localDir: "src/components/zudo-doc/sidebar-toggle-island",
|
|
94
|
+
classification: {
|
|
95
|
+
kind: "nested",
|
|
96
|
+
remediation: "Replace the chromeBindings.Header primary component with a project-owned header composition that imports the local SidebarToggle island."
|
|
97
|
+
}
|
|
60
98
|
},
|
|
61
99
|
"desktop-sidebar-toggle-island": {
|
|
62
100
|
packageSubpath: "@takazudo/zudo-doc/desktop-sidebar-toggle-island",
|
|
63
|
-
localDir: "src/components/zudo-doc/desktop-sidebar-toggle-island"
|
|
101
|
+
localDir: "src/components/zudo-doc/desktop-sidebar-toggle-island",
|
|
102
|
+
classification: {
|
|
103
|
+
kind: "nested",
|
|
104
|
+
remediation: "Disable settings.sidebarToggle, then replace the chromeBindings.Sidebar primary component with a project-owned composition that imports the local DesktopSidebarToggle island."
|
|
105
|
+
}
|
|
64
106
|
},
|
|
65
107
|
"image-enlarge": {
|
|
66
108
|
packageSubpath: "@takazudo/zudo-doc/image-enlarge",
|
|
67
|
-
localDir: "src/components/zudo-doc/image-enlarge"
|
|
109
|
+
localDir: "src/components/zudo-doc/image-enlarge",
|
|
110
|
+
classification: {
|
|
111
|
+
kind: "nested",
|
|
112
|
+
remediation: "Replace chromeBindings.BodyEndIslands with a project-owned composition that imports the local ImageEnlarge island."
|
|
113
|
+
}
|
|
68
114
|
},
|
|
69
115
|
"doc-history": {
|
|
70
116
|
packageSubpath: "@takazudo/zudo-doc/doc-history",
|
|
71
|
-
localDir: "src/components/zudo-doc/doc-history"
|
|
117
|
+
localDir: "src/components/zudo-doc/doc-history",
|
|
118
|
+
classification: {
|
|
119
|
+
kind: "nested",
|
|
120
|
+
remediation: "Set chromeBindings.DocHistory to the local DocHistory component."
|
|
121
|
+
}
|
|
72
122
|
},
|
|
73
123
|
"site-tree-nav-island": {
|
|
74
124
|
packageSubpath: "@takazudo/zudo-doc/site-tree-nav-island",
|
|
75
|
-
localDir: "src/components/zudo-doc/site-tree-nav-island"
|
|
125
|
+
localDir: "src/components/zudo-doc/site-tree-nav-island",
|
|
126
|
+
classification: {
|
|
127
|
+
kind: "nested",
|
|
128
|
+
remediation: "Set chromeBindings.mdxExtras.SiteTreeNav to a project-owned wrapper that imports the local SiteTreeNav island. A project-owned home route must also use that wrapper if its home grid should change."
|
|
129
|
+
}
|
|
76
130
|
}
|
|
77
131
|
};
|
|
132
|
+
const CUSTOMIZING_GUIDE_URL = "https://zudo-doc.takazudomodular.com/docs/reference/customizing/";
|
|
133
|
+
const MDX_EXTRAS_GUIDE_URL = "https://zudo-doc.takazudomodular.com/docs/guides/custom-components/#global-registration-mdxextras";
|
|
134
|
+
function assertNeverClassification(value) {
|
|
135
|
+
throw new Error(`Unknown ejectable classification: ${JSON.stringify(value)}`);
|
|
136
|
+
}
|
|
137
|
+
function chromeRemediation(classification) {
|
|
138
|
+
switch (classification.kind) {
|
|
139
|
+
case "primary":
|
|
140
|
+
return `Export the local component as chromeBindings.${classification.slot} (the ${classification.slot} primary replacement slot) from your chromeBindingsModule.`;
|
|
141
|
+
case "nested":
|
|
142
|
+
return classification.remediation;
|
|
143
|
+
case "content":
|
|
144
|
+
throw new Error("Content-layer ejectables do not use chrome remediation.");
|
|
145
|
+
default:
|
|
146
|
+
return assertNeverClassification(classification);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
function printNoCallSiteGuidance(entry, component) {
|
|
150
|
+
const classification = entry.classification;
|
|
151
|
+
if (classification.kind === "content") {
|
|
152
|
+
console.log(
|
|
153
|
+
pc.dim(
|
|
154
|
+
` No host call sites found for ${entry.packageSubpath}.
|
|
155
|
+
This is expected for a content-layer copy. ${classification.remediation}
|
|
156
|
+
Guide: ${MDX_EXTRAS_GUIDE_URL}`
|
|
157
|
+
)
|
|
158
|
+
);
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
console.warn(
|
|
162
|
+
pc.bold(pc.red(`
|
|
163
|
+
WARNING: the ejected ${component} copy is not wired into your site.`)) + `
|
|
164
|
+
This component is rendered by package chrome. The source was copied to ${entry.localDir}, but no host import referenced ${entry.packageSubpath}.
|
|
165
|
+
` + pc.bold("Editing the copy will not change your site until you bind it.") + `
|
|
166
|
+
Remediation: ${chromeRemediation(classification)}
|
|
167
|
+
Customization guide: ${CUSTOMIZING_GUIDE_URL}
|
|
168
|
+
`
|
|
169
|
+
);
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
78
172
|
async function rewireImports(dir) {
|
|
79
173
|
const re = /(from\s+)(["'])\.\.\/([\w-]+)\/[^"']+\2/g;
|
|
80
174
|
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
@@ -93,6 +187,7 @@ async function rewireImports(dir) {
|
|
|
93
187
|
}
|
|
94
188
|
async function rewireHostCallSites(projectRoot, component, localDir) {
|
|
95
189
|
const packageSubpath = EJECTABLE[component].packageSubpath;
|
|
190
|
+
const destinationDir = path.resolve(projectRoot, localDir);
|
|
96
191
|
const escapedSubpath = packageSubpath.replace(/[/\\^$*+?.()|[\]{}]/g, "\\$&");
|
|
97
192
|
const re = new RegExp(`(from\\s+)(["'])${escapedSubpath}\\2`, "g");
|
|
98
193
|
const searchDirs = [
|
|
@@ -106,6 +201,10 @@ async function rewireHostCallSites(projectRoot, component, localDir) {
|
|
|
106
201
|
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
107
202
|
for (const entry of entries) {
|
|
108
203
|
const abs = path.join(dir, entry.name);
|
|
204
|
+
const resolvedAbs = path.resolve(abs);
|
|
205
|
+
if (resolvedAbs === destinationDir || resolvedAbs.startsWith(`${destinationDir}${path.sep}`)) {
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
109
208
|
if (entry.isDirectory()) {
|
|
110
209
|
await rewriteDir(abs, path.join(relFromProject, entry.name));
|
|
111
210
|
continue;
|
|
@@ -114,8 +213,7 @@ async function rewireHostCallSites(projectRoot, component, localDir) {
|
|
|
114
213
|
const original = await fs.readFile(abs, "utf8");
|
|
115
214
|
if (!original.includes(packageSubpath)) continue;
|
|
116
215
|
const fileDir = path.join(projectRoot, relFromProject);
|
|
117
|
-
|
|
118
|
-
let rel = path.relative(fileDir, destAbs).split(path.sep).join("/");
|
|
216
|
+
let rel = path.relative(fileDir, destinationDir).split(path.sep).join("/");
|
|
119
217
|
if (!rel.startsWith(".")) rel = `./${rel}`;
|
|
120
218
|
const rewritten = original.replace(re, (_, from, quote) => {
|
|
121
219
|
return `${from}${quote}${rel}${quote}`;
|
|
@@ -219,27 +317,23 @@ Bump @takazudo/zudo-doc to a version that includes the eject/ tree and retry.`
|
|
|
219
317
|
await rewireImports(destAbs);
|
|
220
318
|
console.log(pc.dim(` Rewired cross-component imports in ${localDir}`));
|
|
221
319
|
const rewroteCount = await rewireHostCallSites(cwd, component, localDir);
|
|
320
|
+
let unwiredChrome = false;
|
|
222
321
|
if (rewroteCount > 0) {
|
|
223
322
|
console.log(
|
|
224
323
|
pc.dim(` Rewrote ${rewroteCount} host file(s) to import from ${localDir}`)
|
|
225
324
|
);
|
|
226
325
|
} else {
|
|
227
|
-
|
|
228
|
-
pc.dim(
|
|
229
|
-
` No host call sites found for ${entry.packageSubpath}.
|
|
230
|
-
Update your imports manually: change the \`"${entry.packageSubpath}"\`
|
|
231
|
-
specifier to a local one, e.g. \`"@/${localDir}/index.js"\` or a relative path.`
|
|
232
|
-
)
|
|
233
|
-
);
|
|
326
|
+
unwiredChrome = printNoCallSiteGuidance(entry, component);
|
|
234
327
|
}
|
|
235
328
|
provenance.packageVersion = installedVersion;
|
|
236
329
|
provenance.ejected[component] = localDir;
|
|
237
330
|
await fs.writeJson(provenancePath, provenance, { spaces: 2 });
|
|
238
331
|
console.log(pc.green(`Updated .zudo-doc.json`));
|
|
332
|
+
const status = unwiredChrome ? `${pc.yellow("\u26A0")} Copied ${component}, but it is not wired into the rendered site` : `${pc.green("\u2713")} Ejected ${component}`;
|
|
239
333
|
console.log(
|
|
240
334
|
pc.bold(
|
|
241
335
|
`
|
|
242
|
-
${
|
|
336
|
+
${status} from @takazudo/zudo-doc@${installedVersion}
|
|
243
337
|
Source: node_modules/@takazudo/zudo-doc/eject/${component}/
|
|
244
338
|
Destination: ${localDir}/
|
|
245
339
|
Provenance: .zudo-doc.json
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
/** Heading-ID (anchor) strategy. Mirrors `settings.headingIdStrategy`. */
|
|
2
|
-
export type HeadingIdStrategy = "flat" | "hierarchical";
|
|
3
1
|
/**
|
|
4
2
|
* Slugify one heading's text — a byte-faithful TS port of zfb's Rust `slugify`
|
|
5
3
|
* (`crates/zfb-content/src/plugins/heading_links.rs`). Using the exact upstream
|
|
@@ -20,9 +18,9 @@ export interface HeadingItem {
|
|
|
20
18
|
/**
|
|
21
19
|
* Extract TOC headings from a raw MDX/markdown body.
|
|
22
20
|
*
|
|
23
|
-
* Uses the same slugging algorithm as zfb's `HeadingLinks` plugin
|
|
24
|
-
*
|
|
25
|
-
*
|
|
21
|
+
* Uses the same hierarchical slugging algorithm as zfb's `HeadingLinks` plugin
|
|
22
|
+
* so the `href="#slug"` values in the TOC match the rendered heading element
|
|
23
|
+
* IDs. Allocates over ALL matched h2–h6 (keeping the dedup
|
|
26
24
|
* counter and hierarchical ancestor stack in sync with the renderer) but only
|
|
27
25
|
* pushes depth 2–4 items into the result (configurable via opts). h1 is not
|
|
28
26
|
* matched — the renderer does not assign ids to h1.
|
|
@@ -32,12 +30,11 @@ export interface HeadingItem {
|
|
|
32
30
|
* This keeps the package import-graph free of project singletons.
|
|
33
31
|
*
|
|
34
32
|
* @param body - Raw markdown body string (frontmatter already stripped).
|
|
35
|
-
* @param opts - Settings for heading depth window
|
|
36
|
-
*
|
|
33
|
+
* @param opts - Settings for the heading depth window. Production call sites
|
|
34
|
+
* should pass values from the project's `settings` object.
|
|
37
35
|
* @returns Array of `{ depth, slug, text }` items in document order.
|
|
38
36
|
*/
|
|
39
37
|
export declare function extractHeadings(body: string, opts?: {
|
|
40
38
|
tocMinDepth?: number;
|
|
41
39
|
tocMaxDepth?: number;
|
|
42
|
-
strategy?: HeadingIdStrategy;
|
|
43
40
|
}): HeadingItem[];
|
|
@@ -21,19 +21,12 @@ function slugify(input) {
|
|
|
21
21
|
return out;
|
|
22
22
|
}
|
|
23
23
|
class SlugAllocator {
|
|
24
|
-
strategy;
|
|
25
24
|
/** Dedup counter, keyed by the (possibly ancestor-prefixed) slug path. */
|
|
26
25
|
seen = /* @__PURE__ */ new Map();
|
|
27
|
-
/** Hierarchical ancestor stack of `{ depth, final id }
|
|
26
|
+
/** Hierarchical ancestor stack of `{ depth, final id }`. */
|
|
28
27
|
stack = [];
|
|
29
|
-
constructor(strategy) {
|
|
30
|
-
this.strategy = strategy;
|
|
31
|
-
}
|
|
32
28
|
allocate(depth, text) {
|
|
33
29
|
const base = slugify(text);
|
|
34
|
-
if (this.strategy === "flat") {
|
|
35
|
-
return this.nextSlug(base);
|
|
36
|
-
}
|
|
37
30
|
if (base === "") return "";
|
|
38
31
|
for (let top = this.stack.at(-1); top !== void 0 && top.depth >= depth; top = this.stack.at(-1)) {
|
|
39
32
|
this.stack.pop();
|
|
@@ -74,7 +67,7 @@ function extractHeadings(body, opts) {
|
|
|
74
67
|
opts?.tocMinDepth ?? 2,
|
|
75
68
|
opts?.tocMaxDepth ?? 4
|
|
76
69
|
);
|
|
77
|
-
const allocator = new SlugAllocator(
|
|
70
|
+
const allocator = new SlugAllocator();
|
|
78
71
|
const headings = [];
|
|
79
72
|
let codeFenceOpener = null;
|
|
80
73
|
for (const line of body.split("\n")) {
|