@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
|
@@ -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
|
] }),
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default docs-frontmatter zod schema builder.
|
|
3
|
+
*
|
|
4
|
+
* Ported (and parameterized) from the `create-zudo-doc` base template's
|
|
5
|
+
* `src/config/docs-schema.ts` `buildDocsSchema` export (epic
|
|
6
|
+
* zudolab/zudo-doc#2651, S4 #2654).
|
|
7
|
+
*
|
|
8
|
+
* Unlike the template original — which read the host `settings` and
|
|
9
|
+
* `tag-vocabulary` singletons directly — this package default NEVER imports
|
|
10
|
+
* host singletons: governance mode and the vocabulary entries are passed in
|
|
11
|
+
* as `opts`. `zudoDoc()` (#2657) calls this with the project's merged
|
|
12
|
+
* governance config; a project may also override `buildDocsSchema` entirely
|
|
13
|
+
* via `ZudoDocConfig.buildDocsSchema`.
|
|
14
|
+
*/
|
|
15
|
+
import { z } from "zod";
|
|
16
|
+
import type { PresetTagVocabularyEntry } from "../preset.js";
|
|
17
|
+
export interface BuildDocsSchemaOptions {
|
|
18
|
+
tagGovernance?: "off" | "warn" | "strict";
|
|
19
|
+
tagVocabulary?: readonly PresetTagVocabularyEntry[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Build the docs frontmatter zod schema.
|
|
23
|
+
*
|
|
24
|
+
* Returns a single `z.object(...).passthrough()` reused for every docs
|
|
25
|
+
* collection (default + per-locale + per-version + per-version-per-locale).
|
|
26
|
+
* The `tags` field is governance-aware: `buildTagsSchema()` returns a plain
|
|
27
|
+
* `z.array(z.string())` when governance is off (or `opts` is omitted), or a
|
|
28
|
+
* restricted `z.enum` when `opts.tagGovernance: "strict"` plus a non-empty
|
|
29
|
+
* `opts.tagVocabulary` is supplied.
|
|
30
|
+
*
|
|
31
|
+
* `.passthrough()` keeps custom frontmatter keys (e.g. `author`, `status`)
|
|
32
|
+
* available downstream — the frontmatter-preview UI relies on this to
|
|
33
|
+
* surface arbitrary keys without declaring each one here.
|
|
34
|
+
*/
|
|
35
|
+
export declare function buildDocsSchema(opts?: BuildDocsSchemaOptions): z.ZodObject<{
|
|
36
|
+
title: z.ZodString;
|
|
37
|
+
description: z.ZodOptional<z.ZodString>;
|
|
38
|
+
category: z.ZodOptional<z.ZodString>;
|
|
39
|
+
sidebar_position: z.ZodOptional<z.ZodNumber>;
|
|
40
|
+
sidebar_label: z.ZodOptional<z.ZodString>;
|
|
41
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString>> | z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
42
|
+
[x: string]: string;
|
|
43
|
+
}>>>;
|
|
44
|
+
search_exclude: z.ZodOptional<z.ZodBoolean>;
|
|
45
|
+
pagination_next: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
46
|
+
pagination_prev: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
47
|
+
draft: z.ZodOptional<z.ZodBoolean>;
|
|
48
|
+
unlisted: z.ZodOptional<z.ZodBoolean>;
|
|
49
|
+
hide_sidebar: z.ZodOptional<z.ZodBoolean>;
|
|
50
|
+
hide_toc: z.ZodOptional<z.ZodBoolean>;
|
|
51
|
+
wide: z.ZodOptional<z.ZodBoolean>;
|
|
52
|
+
doc_history: z.ZodOptional<z.ZodBoolean>;
|
|
53
|
+
standalone: z.ZodOptional<z.ZodBoolean>;
|
|
54
|
+
slug: z.ZodOptional<z.ZodString>;
|
|
55
|
+
generated: z.ZodOptional<z.ZodBoolean>;
|
|
56
|
+
category_no_page: z.ZodOptional<z.ZodBoolean>;
|
|
57
|
+
category_sort_order: z.ZodOptional<z.ZodEnum<{
|
|
58
|
+
asc: "asc";
|
|
59
|
+
desc: "desc";
|
|
60
|
+
}>>;
|
|
61
|
+
}, z.core.$loose>;
|
|
62
|
+
/**
|
|
63
|
+
* TypeScript type inferred from the default docs frontmatter zod schema.
|
|
64
|
+
* A project overriding `buildDocsSchema` via `ZudoDocConfig` should derive
|
|
65
|
+
* its own `DocsData` type from its own builder instead of this one.
|
|
66
|
+
*/
|
|
67
|
+
export type DocsData = z.infer<ReturnType<typeof buildDocsSchema>>;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
function buildTagsSchema(opts) {
|
|
3
|
+
const vocabulary = opts?.tagVocabulary ?? [];
|
|
4
|
+
const vocabularyActive = vocabulary.length > 0 && opts?.tagGovernance === "strict";
|
|
5
|
+
if (!vocabularyActive) return z.array(z.string()).optional();
|
|
6
|
+
const allowed = new Set(vocabulary.map((entry) => entry.id));
|
|
7
|
+
const allowedList = [...allowed];
|
|
8
|
+
if (allowedList.length === 0) return z.array(z.string()).optional();
|
|
9
|
+
const [first, ...rest] = allowedList;
|
|
10
|
+
return z.array(z.enum([first, ...rest])).optional();
|
|
11
|
+
}
|
|
12
|
+
function buildDocsSchema(opts) {
|
|
13
|
+
return z.object({
|
|
14
|
+
title: z.string(),
|
|
15
|
+
description: z.string().optional(),
|
|
16
|
+
category: z.string().optional(),
|
|
17
|
+
sidebar_position: z.number().optional(),
|
|
18
|
+
sidebar_label: z.string().optional(),
|
|
19
|
+
tags: buildTagsSchema(opts),
|
|
20
|
+
search_exclude: z.boolean().optional(),
|
|
21
|
+
pagination_next: z.string().nullable().optional(),
|
|
22
|
+
pagination_prev: z.string().nullable().optional(),
|
|
23
|
+
draft: z.boolean().optional(),
|
|
24
|
+
unlisted: z.boolean().optional(),
|
|
25
|
+
hide_sidebar: z.boolean().optional(),
|
|
26
|
+
hide_toc: z.boolean().optional(),
|
|
27
|
+
wide: z.boolean().optional(),
|
|
28
|
+
doc_history: z.boolean().optional(),
|
|
29
|
+
standalone: z.boolean().optional(),
|
|
30
|
+
slug: z.string().optional(),
|
|
31
|
+
generated: z.boolean().optional(),
|
|
32
|
+
// Category metadata expressed as a directory index.mdx's frontmatter — the
|
|
33
|
+
// frontmatter form of `_category_.json`. `category_no_page` makes the index
|
|
34
|
+
// a non-linked sidebar header excluded from routes/sitemap/search;
|
|
35
|
+
// `category_sort_order` sets the child sort direction. Frontmatter wins
|
|
36
|
+
// over the sidecar.
|
|
37
|
+
category_no_page: z.boolean().optional(),
|
|
38
|
+
category_sort_order: z.enum(["asc", "desc"]).optional()
|
|
39
|
+
}).passthrough();
|
|
40
|
+
}
|
|
41
|
+
export {
|
|
42
|
+
buildDocsSchema
|
|
43
|
+
};
|
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")) {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Settings, TagVocabularyEntry } from "../settings.js";
|
|
2
2
|
import type { ColorScheme } from "../color-scheme-utils.js";
|
|
3
|
+
import type { ThemePackRegistry } from "../theme-packs-registry/index.js";
|
|
3
4
|
import type { UrlHelpers } from "../url-helpers/index.js";
|
|
4
5
|
import type { NavSourceDocsAPI } from "../nav-source-docs/index.js";
|
|
5
6
|
import type { DocRouteEntriesAPI } from "../doc-route-entries/index.js";
|
|
@@ -8,6 +9,7 @@ import type { ResolvedTag } from "../tag-helpers/index.js";
|
|
|
8
9
|
import type { DocNavNode, DocPageEntry } from "../doc-page-props/index.js";
|
|
9
10
|
import type { HeadingItem } from "../extract-headings/index.js";
|
|
10
11
|
import type { CategoryMeta } from "../sidebar-tree/index.js";
|
|
12
|
+
import type { HeaderRightComponentRegistry } from "../header/types.js";
|
|
11
13
|
/**
|
|
12
14
|
* The i18n surface a factory may read. Parameterizes what `base.ts` used to read
|
|
13
15
|
* off the project's `@/config/i18n` singleton directly, so URL/locale logic moves
|
|
@@ -103,6 +105,21 @@ export interface RouteContextPayload<S = Settings> {
|
|
|
103
105
|
/** Host color-scheme palette map; `null` when the host passed none (chrome
|
|
104
106
|
* then falls back to a neutral default scheme). */
|
|
105
107
|
colorSchemes: Record<string, ColorScheme> | null;
|
|
108
|
+
/**
|
|
109
|
+
* Resolved, enabled, ordered theme-pack registry (ADR
|
|
110
|
+
* `docs/adr/theme-packs.md`, Decision 2 "Registry threading to
|
|
111
|
+
* SSR/islands") — settings ∩ the bundled `theme-packs/` directories, in
|
|
112
|
+
* switcher order. `null` (or omitted) renders the whole feature inert (same
|
|
113
|
+
* accepted coupling class as {@link colorSchemes} for a
|
|
114
|
+
* `packageOwnedRoutes: false` host that builds its own payload without
|
|
115
|
+
* threading one).
|
|
116
|
+
*
|
|
117
|
+
* OPTIONAL on purpose: this field was added after the payload shape
|
|
118
|
+
* shipped, so an existing `packageOwnedRoutes: false` host that constructs
|
|
119
|
+
* its own payload predates it. `createRouteContext` normalizes an omitted
|
|
120
|
+
* value to `null` (→ inert) so upgrading such a host does not throw at SSR.
|
|
121
|
+
*/
|
|
122
|
+
themePackRegistry?: ThemePackRegistry | null;
|
|
106
123
|
}
|
|
107
124
|
/** Aggregated `tag → docs` index entry built by `collectTags`. */
|
|
108
125
|
export interface TagInfo {
|
|
@@ -133,6 +150,9 @@ export interface RouteContext<S = Settings> extends UrlHelpers, NavSourceDocsAPI
|
|
|
133
150
|
settings: S;
|
|
134
151
|
/** Host color-scheme palette map (or `null`); threaded to chrome head CSS. */
|
|
135
152
|
colorSchemes: Record<string, ColorScheme> | null;
|
|
153
|
+
/** Resolved, enabled, ordered theme-pack registry (or `null`) — see
|
|
154
|
+
* {@link RouteContextPayload.themePackRegistry}. */
|
|
155
|
+
themePackRegistry: ThemePackRegistry | null;
|
|
136
156
|
/** The reconstructed i18n surface. */
|
|
137
157
|
i18n: FactoryI18n;
|
|
138
158
|
/** Default locale code (un-prefixed `/docs/...`). */
|
|
@@ -162,14 +182,14 @@ export interface RouteContext<S = Settings> extends UrlHelpers, NavSourceDocsAPI
|
|
|
162
182
|
resolveTagBound(raw: string): ResolvedTag;
|
|
163
183
|
/** Aggregate a `tag → docs` index from a doc collection. */
|
|
164
184
|
collectTags(entries: ReadonlyArray<{
|
|
165
|
-
|
|
185
|
+
slug: string;
|
|
166
186
|
data: {
|
|
167
187
|
slug?: string;
|
|
168
188
|
title?: string;
|
|
169
189
|
description?: string;
|
|
170
190
|
tags?: string[];
|
|
171
191
|
};
|
|
172
|
-
}>, slugFn: (
|
|
192
|
+
}>, slugFn: (entrySlug: string, data: {
|
|
173
193
|
slug?: string;
|
|
174
194
|
}) => string): Map<string, TagInfo>;
|
|
175
195
|
/** Build a recursive nav tree from a flat doc collection. */
|
|
@@ -188,8 +208,8 @@ export interface RouteContext<S = Settings> extends UrlHelpers, NavSourceDocsAPI
|
|
|
188
208
|
isNavVisible(doc: DocPageEntry): boolean;
|
|
189
209
|
/** The content-bridge handle: identity-stable, draft-filtered docs loader. */
|
|
190
210
|
stableDocs(collectionName: string): DocPageEntry[];
|
|
191
|
-
/** Canonical route slug for a
|
|
192
|
-
toRouteSlug(
|
|
211
|
+
/** Canonical route slug for a zfb content slug. */
|
|
212
|
+
toRouteSlug(entrySlug: string): string;
|
|
193
213
|
/** Split a route slug into path params. */
|
|
194
214
|
toSlugParams(routeSlug: string): string[];
|
|
195
215
|
}
|
|
@@ -202,8 +222,26 @@ export interface RouteContext<S = Settings> extends UrlHelpers, NavSourceDocsAPI
|
|
|
202
222
|
* (HOSTCOLLAPSE wave) later passes the real bindings.
|
|
203
223
|
*/
|
|
204
224
|
export interface ChromeHostBindings {
|
|
225
|
+
/** Primary header chrome. Default: the package HeaderWithDefaults component. */
|
|
226
|
+
Header?: FactoryComponent;
|
|
227
|
+
/** Primary footer chrome. Default: the package FooterWithDefaults component. */
|
|
228
|
+
Footer?: FactoryComponent;
|
|
229
|
+
/** Primary doc sidebar chrome. Default: the package SidebarWithDefaults component. */
|
|
230
|
+
Sidebar?: FactoryComponent;
|
|
231
|
+
/** Primary desktop table of contents. Default: the package Toc component. */
|
|
232
|
+
Toc?: FactoryComponent;
|
|
233
|
+
/** Primary breadcrumb trail. Default: the package Breadcrumb component. */
|
|
234
|
+
Breadcrumb?: FactoryComponent;
|
|
235
|
+
/** Primary previous/next document pager. Default: the package DocPager component. */
|
|
236
|
+
DocPager?: FactoryComponent;
|
|
205
237
|
/** Header search widget. Default: the package SearchWidget bound to the site base. */
|
|
206
238
|
SearchWidget?: FactoryComponent;
|
|
239
|
+
/**
|
|
240
|
+
* Project-owned header-right renderers keyed by the serializable component
|
|
241
|
+
* name in `settings.headerRightItems`. Built-in names are reserved and may
|
|
242
|
+
* not be shadowed. Default: `{}`.
|
|
243
|
+
*/
|
|
244
|
+
headerRightComponents?: HeaderRightComponentRegistry;
|
|
207
245
|
/** Per-page git-history meta manifest. Default: `{}` (no Created/Updated block). */
|
|
208
246
|
docHistoryMeta?: Record<string, unknown>;
|
|
209
247
|
/** Sidebar section config. Default: `{}` (auto-generated tree only). */
|
|
@@ -221,6 +259,20 @@ export interface ChromeHostBindings {
|
|
|
221
259
|
BodyEndIslands?: FactoryComponent;
|
|
222
260
|
/** DocHistory island. Default: a no-op stub rendering an empty fragment. */
|
|
223
261
|
DocHistory?: FactoryComponent;
|
|
262
|
+
/**
|
|
263
|
+
* Design-token panel bootstrap island (#2658). Default: the PACKAGE-DEFAULT
|
|
264
|
+
* `DesignTokenPanelBootstrap` from
|
|
265
|
+
* `@takazudo/zudo-doc/design-token-panel-bootstrap`, statically imported by
|
|
266
|
+
* `chrome/derive.tsx` (`deriveBodyEndIslands`) so EVERY `createChrome`
|
|
267
|
+
* consumer — the injected `routes/_chrome.tsx` path and the locked-manifest
|
|
268
|
+
* self-contained doc stub alike — gets the settings-gated panel island with
|
|
269
|
+
* no explicit wiring (#2659 gate-2 fix; scanner reachability holds through
|
|
270
|
+
* the static route → chrome → derive → bootstrap chain, the #2480
|
|
271
|
+
* contract). Supply this slot only to REPLACE the island with a host's own
|
|
272
|
+
* bootstrap component. Mounting is still gated on
|
|
273
|
+
* `settings.designTokenPanel` inside `createBodyEndIslands` either way.
|
|
274
|
+
*/
|
|
275
|
+
DesignTokenPanelBootstrap?: FactoryComponent;
|
|
224
276
|
/** MDX content-component overrides (Details / HtmlPreview / Island /
|
|
225
277
|
* PresetGenerator). Default: package SSR impls + a `PresetGenerator` stub. */
|
|
226
278
|
mdxExtras?: Record<string, FactoryComponent>;
|