@takazudo/zudo-doc 5.28.2 → 6.0.1
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 +33 -0
- package/README.md +49 -16
- package/bin/gen-z-index.mjs +18 -18
- package/dist/agent-docs/identity.d.ts +4 -0
- package/dist/agent-docs/identity.js +24 -0
- package/dist/agent-docs/index.d.ts +5 -0
- package/dist/agent-docs/index.js +5 -0
- package/dist/agent-docs/limits.d.ts +11 -0
- package/dist/agent-docs/limits.js +24 -0
- package/dist/agent-docs/search.d.ts +14 -0
- package/dist/agent-docs/search.js +82 -0
- package/dist/agent-docs/tokenize.d.ts +2 -0
- package/dist/agent-docs/tokenize.js +22 -0
- package/dist/agent-docs/types.d.ts +68 -0
- package/dist/agent-docs/types.js +0 -0
- package/dist/ai-chat-modal/index.d.ts +1 -4
- package/dist/ai-chat-modal/index.js +183 -123
- package/dist/asset-components/asset-card.d.ts +1 -2
- package/dist/asset-components/asset-card.js +12 -12
- package/dist/asset-components/asset-code.d.ts +1 -2
- package/dist/asset-components/asset-code.js +10 -10
- package/dist/asset-components/shared.d.ts +3 -4
- package/dist/asset-components/shared.js +4 -4
- package/dist/asset-index-page/body.d.ts +5 -6
- package/dist/asset-index-page/body.js +6 -6
- package/dist/asset-index-page/index.d.ts +1 -2
- package/dist/asset-index-page/index.js +1 -1
- package/dist/asset-page/body.d.ts +5 -9
- package/dist/asset-page/body.js +3 -3
- package/dist/asset-page/components.d.ts +16 -17
- package/dist/asset-page/components.js +10 -9
- package/dist/asset-page/index.d.ts +1 -2
- package/dist/asset-page/index.js +1 -1
- package/dist/auto-logo/index.d.ts +1 -2
- package/dist/auto-logo/index.js +2 -2
- package/dist/body-foot-util/body-foot-util-area.d.ts +3 -4
- package/dist/body-foot-util/body-foot-util-area.js +1 -2
- package/dist/body-foot-util/edit-link.d.ts +2 -3
- package/dist/body-foot-util/edit-link.js +1 -2
- package/dist/breadcrumb/breadcrumb.d.ts +6 -6
- package/dist/breadcrumb/breadcrumb.js +3 -4
- package/dist/catalog.js +1 -1
- package/dist/category-nav/index.d.ts +1 -2
- package/dist/category-nav/index.js +11 -5
- package/dist/category-tree-nav/index.d.ts +1 -2
- package/dist/category-tree-nav/index.js +3 -3
- package/dist/chrome/derive.d.ts +18 -27
- package/dist/chrome/derive.js +47 -29
- package/dist/chrome/index.d.ts +5 -5
- package/dist/chrome/index.js +1 -1
- package/dist/chrome/island-data.d.ts +4 -0
- package/dist/chrome/island-data.js +52 -0
- package/dist/chrome/primary-slots.d.ts +2 -3
- package/dist/chrome-bindings.d.ts +30 -22
- package/dist/code-group/index.d.ts +3 -4
- package/dist/code-group/index.js +3 -7
- package/dist/code-syntax/code-block-enhancer.d.ts +1 -2
- package/dist/code-syntax/code-block-enhancer.js +2 -2
- package/dist/code-syntax/mermaid-init.d.ts +1 -2
- package/dist/code-syntax/mermaid-init.js +5 -2
- package/dist/code-syntax/tabs-init-script.js +1 -1
- package/dist/code-syntax/tabs-init.d.ts +1 -2
- package/dist/code-syntax/tabs-init.js +2 -2
- package/dist/code-syntax/tabs.d.ts +6 -6
- package/dist/code-syntax/tabs.js +8 -8
- package/dist/compiled.css +2937 -2942
- package/dist/config/component-tokens.d.ts +1 -1
- package/dist/config/component-tokens.js +22 -0
- package/dist/config-assertions/index.d.ts +13 -0
- package/dist/config-assertions/index.js +14 -0
- package/dist/config.d.ts +36 -17
- package/dist/config.js +23 -95
- package/dist/content/content-blockquote.d.ts +2 -3
- package/dist/content/content-blockquote.js +3 -3
- package/dist/content/content-code.d.ts +3 -4
- package/dist/content/content-code.js +5 -5
- package/dist/content/content-link.d.ts +3 -4
- package/dist/content/content-link.js +10 -10
- package/dist/content/content-ol.d.ts +2 -3
- package/dist/content/content-ol.js +5 -4
- package/dist/content/content-paragraph.d.ts +2 -3
- package/dist/content/content-paragraph.js +1 -1
- package/dist/content/content-strong.d.ts +2 -3
- package/dist/content/content-strong.js +3 -3
- package/dist/content/content-table.d.ts +2 -3
- package/dist/content/content-table.js +4 -4
- package/dist/content/content-ul.d.ts +2 -3
- package/dist/content/content-ul.js +4 -4
- package/dist/content/heading-h2.d.ts +2 -3
- package/dist/content/heading-h2.js +4 -4
- package/dist/content/heading-h3.d.ts +2 -3
- package/dist/content/heading-h3.js +4 -4
- package/dist/content/heading-h4.d.ts +2 -3
- package/dist/content/heading-h4.js +4 -4
- package/dist/content-admonition/index.d.ts +3 -4
- package/dist/content-admonition/index.js +2 -2
- package/dist/content.css +35 -33
- package/dist/design-token-panel-bootstrap-controller.d.ts +178 -0
- package/dist/design-token-panel-bootstrap-controller.js +359 -0
- package/dist/design-token-panel-bootstrap-island.d.ts +5 -0
- package/dist/design-token-panel-bootstrap-island.js +19 -0
- package/dist/design-token-panel-bootstrap.d.ts +5 -195
- package/dist/design-token-panel-bootstrap.js +3 -288
- package/dist/desktop-sidebar-toggle-island/index.d.ts +2 -7
- package/dist/desktop-sidebar-toggle-island/index.js +2 -58
- package/dist/desktop-sidebar-toggle-island/island.d.ts +4 -0
- package/dist/desktop-sidebar-toggle-island/island.js +43 -0
- package/dist/desktop-sidebar-toggle-island/storage.d.ts +4 -0
- package/dist/desktop-sidebar-toggle-island/storage.js +29 -0
- package/dist/desktop-toc-toggle-island/index.d.ts +2 -7
- package/dist/desktop-toc-toggle-island/index.js +2 -58
- package/dist/desktop-toc-toggle-island/island.d.ts +4 -0
- package/dist/desktop-toc-toggle-island/island.js +43 -0
- package/dist/desktop-toc-toggle-island/storage.d.ts +4 -0
- package/dist/desktop-toc-toggle-island/storage.js +29 -0
- package/dist/details/details.d.ts +3 -4
- package/dist/details/details.js +1 -1
- package/dist/doc-body-end/index.d.ts +1 -2
- package/dist/doc-body-end/index.js +1 -1
- package/dist/doc-body-end-islands/design-token-panel-island.d.ts +2 -2
- package/dist/doc-body-end-islands/design-token-panel-island.js +3 -7
- package/dist/doc-body-end-islands/index.d.ts +4 -21
- package/dist/doc-body-end-islands/index.js +5 -3
- package/dist/doc-body-end-islands/theme-pack-switcher-island.d.ts +3 -13
- package/dist/doc-body-end-islands/theme-pack-switcher-island.js +11 -13
- package/dist/doc-content-header/index.d.ts +1 -2
- package/dist/doc-content-header/index.js +1 -1
- package/dist/doc-history/index.d.ts +1 -1
- package/dist/doc-history/index.js +166 -141
- package/dist/doc-history-area/index.d.ts +6 -4
- package/dist/doc-history-area/index.js +17 -16
- package/dist/doc-metainfo-area/index.d.ts +2 -3
- package/dist/doc-metainfo-area/index.js +1 -1
- package/dist/doc-page-renderer/index.d.ts +13 -7
- package/dist/doc-page-renderer/index.js +10 -1
- package/dist/doc-page-shell/index.d.ts +20 -7
- package/dist/doc-page-shell/index.js +17 -6
- package/dist/doc-pager/index.d.ts +1 -2
- package/dist/doc-pager/index.js +3 -3
- package/dist/doc-tags-area/index.d.ts +2 -3
- package/dist/doc-tags-area/index.js +1 -1
- package/dist/doclayout/doc-layout-with-defaults.d.ts +9 -9
- package/dist/doclayout/doc-layout-with-defaults.js +5 -15
- package/dist/doclayout/doc-layout.d.ts +26 -27
- package/dist/doclayout/doc-layout.js +23 -14
- package/dist/docs-schema/index.d.ts +4 -0
- package/dist/docs-schema/index.js +1 -0
- package/dist/extract-headings/index.js +43 -12
- package/dist/factory-context/index.d.ts +22 -19
- package/dist/features.css +75 -8
- package/dist/find-in-page/find-bar.d.ts +4 -2
- package/dist/find-in-page/find-bar.js +58 -69
- package/dist/find-in-page/index.d.ts +2 -8
- package/dist/find-in-page/index.js +33 -30
- package/dist/footer/footer.d.ts +3 -4
- package/dist/footer/footer.js +3 -3
- package/dist/footer-with-defaults/index.d.ts +2 -3
- package/dist/footer-with-defaults/index.js +1 -1
- package/dist/frontmatter-preview-defaults/index.js +1 -0
- package/dist/head/doc-head.d.ts +1 -1
- package/dist/head/doc-head.js +24 -32
- package/dist/head/og-tags.d.ts +1 -1
- package/dist/head/og-tags.js +8 -7
- package/dist/head/twitter-card.d.ts +1 -1
- package/dist/head/twitter-card.js +1 -1
- package/dist/head-with-defaults/index.d.ts +7 -2
- package/dist/head-with-defaults/index.js +46 -32
- package/dist/header/header.d.ts +8 -8
- package/dist/header/header.js +9 -11
- package/dist/header/types.d.ts +7 -7
- package/dist/header-with-defaults/index.d.ts +3 -4
- package/dist/header-with-defaults/index.js +27 -14
- package/dist/home-intro/index.d.ts +2 -5
- package/dist/home-intro/index.js +7 -5
- package/dist/home-intro/prepare.js +4 -3
- package/dist/home-page/index.d.ts +3 -3
- package/dist/home-page/index.js +19 -17
- package/dist/html-preview-wrapper/highlighted-code.d.ts +3 -4
- package/dist/html-preview-wrapper/highlighted-code.js +19 -17
- package/dist/html-preview-wrapper/html-preview-wrapper.d.ts +4 -25
- package/dist/html-preview-wrapper/html-preview-wrapper.js +2 -87
- package/dist/html-preview-wrapper/html-preview.d.ts +3 -10
- package/dist/html-preview-wrapper/html-preview.js +13 -37
- package/dist/html-preview-wrapper/index.d.ts +2 -1
- package/dist/html-preview-wrapper/index.js +1 -1
- package/dist/html-preview-wrapper/preview-base.d.ts +3 -5
- package/dist/html-preview-wrapper/preview-base.js +56 -59
- package/dist/html-preview-wrapper/wrapper.d.ts +20 -0
- package/dist/html-preview-wrapper/wrapper.js +37 -0
- package/dist/hydration-pending.d.ts +3 -5
- package/dist/hydration-pending.js +7 -5
- package/dist/i18n-version/language-switcher.d.ts +5 -32
- package/dist/i18n-version/language-switcher.js +5 -106
- package/dist/i18n-version/switcher-generated-scripts.d.ts +2 -0
- package/dist/i18n-version/switcher-generated-scripts.js +107 -0
- package/dist/i18n-version/switcher-url-state.d.ts +76 -0
- package/dist/i18n-version/switcher-url-state.js +103 -0
- package/dist/i18n-version/version-banner.d.ts +2 -3
- package/dist/i18n-version/version-banner.js +1 -1
- package/dist/i18n-version/version-switcher.d.ts +5 -50
- package/dist/i18n-version/version-switcher.js +5 -157
- package/dist/icons/index.d.ts +18 -19
- package/dist/icons/index.js +17 -33
- package/dist/image-enlarge/index.d.ts +1 -10
- package/dist/image-enlarge/index.js +80 -55
- package/dist/image-enlarge/public.d.ts +2 -0
- package/dist/image-enlarge/public.js +6 -0
- package/dist/image-enlarge/ssr-fallback.d.ts +2 -0
- package/dist/image-enlarge/ssr-fallback.js +8 -0
- package/dist/index.d.ts +11 -4
- package/dist/inline-version-switcher/index.d.ts +1 -2
- package/dist/inline-version-switcher/index.js +1 -1
- package/dist/island-types/index.d.ts +2 -2
- package/dist/island-types/index.js +1 -5
- package/dist/math-block/index.d.ts +4 -7
- package/dist/math-block/index.js +5 -5
- package/dist/mcp/handler.d.ts +8 -0
- package/dist/mcp/handler.js +129 -0
- package/dist/mcp/index.d.ts +4 -0
- package/dist/mcp/index.js +7 -0
- package/dist/mcp/loader.d.ts +19 -0
- package/dist/mcp/loader.js +202 -0
- package/dist/mdx-components/index.js +40 -108
- package/dist/mermaid-enlarge/index.d.ts +1 -8
- package/dist/mermaid-enlarge/index.js +174 -158
- package/dist/mermaid-enlarge/public.d.ts +2 -0
- package/dist/mermaid-enlarge/public.js +6 -0
- package/dist/mermaid-enlarge/ssr-fallback.d.ts +2 -0
- package/dist/mermaid-enlarge/ssr-fallback.js +8 -0
- package/dist/metainfo/doc-metainfo.d.ts +2 -3
- package/dist/metainfo/doc-metainfo.js +1 -4
- package/dist/metainfo/doc-tags.d.ts +2 -3
- package/dist/metainfo/doc-tags.js +1 -1
- package/dist/metainfo/frontmatter-preview.d.ts +3 -4
- package/dist/metainfo/frontmatter-preview.js +1 -1
- package/dist/nav-data-prep/index.js +6 -4
- package/dist/nav-indexing/category-nav.d.ts +2 -3
- package/dist/nav-indexing/category-nav.js +1 -2
- package/dist/nav-indexing/category-tree-nav.d.ts +2 -3
- package/dist/nav-indexing/category-tree-nav.js +1 -1
- package/dist/nav-indexing/doc-card-grid.d.ts +2 -3
- package/dist/nav-indexing/doc-card-grid.js +1 -2
- package/dist/nav-indexing/docs-sitemap.d.ts +2 -3
- package/dist/nav-indexing/docs-sitemap.js +2 -2
- package/dist/nav-indexing/index.d.ts +1 -1
- package/dist/nav-indexing/nav-card-grid.d.ts +2 -3
- package/dist/nav-indexing/nav-card-grid.js +1 -2
- package/dist/nav-indexing/note-tray-index-parts/card-list.d.ts +1 -2
- package/dist/nav-indexing/note-tray-index-parts/card-list.js +4 -4
- package/dist/nav-indexing/note-tray-index-parts/date-line.d.ts +2 -3
- package/dist/nav-indexing/note-tray-index-parts/date-line.js +1 -1
- package/dist/nav-indexing/note-tray-index-parts/index-list.d.ts +1 -2
- package/dist/nav-indexing/note-tray-index-parts/index-list.js +2 -2
- package/dist/nav-indexing/note-tray-index-parts/timeline.d.ts +1 -2
- package/dist/nav-indexing/note-tray-index-parts/timeline.js +2 -2
- package/dist/nav-indexing/note-tray-index.d.ts +1 -2
- package/dist/nav-indexing/note-tray-index.js +1 -1
- package/dist/nav-indexing/site-tree-nav-demo.d.ts +2 -3
- package/dist/nav-indexing/site-tree-nav-demo.js +2 -2
- package/dist/nav-indexing/tag-nav.d.ts +1 -2
- package/dist/nav-indexing/tag-nav.js +1 -1
- package/dist/nav-indexing/types.d.ts +2 -2
- package/dist/nav-indexing/versions-page-content.d.ts +2 -3
- package/dist/nav-indexing/versions-page-content.js +8 -8
- package/dist/note-tray-index/index.d.ts +1 -2
- package/dist/note-tray-index/index.js +1 -1
- package/dist/page-loading/page-loading-overlay.d.ts +1 -2
- package/dist/page-loading/page-loading-overlay.js +3 -5
- package/dist/plugins/agent-export.d.ts +3 -0
- package/dist/plugins/agent-export.js +34 -0
- package/dist/plugins/internal/agent-export/chunk.d.ts +5 -0
- package/dist/plugins/internal/agent-export/chunk.js +90 -0
- package/dist/plugins/internal/agent-export/index.d.ts +24 -0
- package/dist/plugins/internal/agent-export/index.js +123 -0
- package/dist/plugins/internal/agent-export/normalize.d.ts +5 -0
- package/dist/plugins/internal/agent-export/normalize.js +73 -0
- package/dist/plugins/internal/llms-txt/dev-middleware.d.ts +6 -0
- package/dist/plugins/internal/llms-txt/dev-middleware.js +8 -3
- package/dist/plugins/internal/llms-txt/emit.js +23 -6
- package/dist/plugins/internal/llms-txt/generate.d.ts +7 -1
- package/dist/plugins/internal/llms-txt/generate.js +9 -2
- package/dist/plugins/internal/llms-txt/load.d.ts +2 -0
- package/dist/plugins/internal/llms-txt/load.js +20 -4
- package/dist/plugins/internal/llms-txt/types.d.ts +10 -0
- package/dist/plugins/routes.js +4 -0
- package/dist/preset.d.ts +19 -9
- package/dist/preset.js +20 -1
- package/dist/route-context-payload/index.js +1 -1
- package/dist/routes/404.d.ts +2 -3
- package/dist/routes/404.js +1 -1
- package/dist/routes/_chrome.d.ts +5 -5
- package/dist/routes/_chrome.js +7 -2
- package/dist/routes/_context.d.ts +4 -4
- package/dist/routes/_design-token-panel-bootstrap.d.ts +1 -4
- package/dist/routes/_design-token-panel-bootstrap.js +9 -1
- package/dist/routes/docs-slug.d.ts +2 -3
- package/dist/routes/docs-tags-index.d.ts +2 -3
- package/dist/routes/docs-tags-index.js +1 -1
- package/dist/routes/docs-tags-tag.d.ts +2 -3
- package/dist/routes/docs-tags-tag.js +1 -1
- package/dist/routes/docs-versions.d.ts +2 -3
- package/dist/routes/docs-versions.js +1 -1
- package/dist/routes/files-path.d.ts +2 -3
- package/dist/routes/files-path.js +1 -1
- package/dist/routes/index.d.ts +2 -3
- package/dist/routes/index.js +1 -1
- package/dist/routes/locale-docs-slug.d.ts +2 -3
- package/dist/routes/locale-docs-tags-index.d.ts +2 -3
- package/dist/routes/locale-docs-tags-index.js +1 -1
- package/dist/routes/locale-docs-tags-tag.d.ts +2 -3
- package/dist/routes/locale-docs-tags-tag.js +1 -1
- package/dist/routes/locale-docs-versions.d.ts +2 -3
- package/dist/routes/locale-docs-versions.js +1 -1
- package/dist/routes/locale-files-path.d.ts +2 -3
- package/dist/routes/locale-files-path.js +1 -1
- package/dist/routes/locale-index.d.ts +2 -3
- package/dist/routes/locale-index.js +1 -1
- package/dist/routes/mcp.d.ts +5 -0
- package/dist/routes/mcp.js +25 -0
- package/dist/routes/v-docs-slug.d.ts +2 -3
- package/dist/routes/v-locale-docs-slug.d.ts +2 -3
- package/dist/search-widget/index.d.ts +1 -2
- package/dist/search-widget/index.js +4 -7
- package/dist/search-widget-script/generated-script.js +12 -5
- package/dist/settings-defaults.d.ts +2 -0
- package/dist/settings-defaults.js +93 -0
- package/dist/settings.d.ts +8 -2
- package/dist/sidebar/client-data.d.ts +18 -0
- package/dist/sidebar/client-data.js +47 -0
- package/dist/sidebar/index.d.ts +3 -1
- package/dist/sidebar/index.js +3 -1
- package/dist/sidebar/sidebar.d.ts +12 -44
- package/dist/sidebar/sidebar.js +4 -3
- package/dist/sidebar/types.d.ts +14 -0
- package/dist/sidebar-prepaint/index.d.ts +1 -2
- package/dist/sidebar-prepaint/index.js +4 -6
- package/dist/sidebar-resizer/sidebar-resizer-init.d.ts +2 -3
- package/dist/sidebar-resizer/sidebar-resizer-init.js +3 -3
- package/dist/sidebar-toggle-island/index.d.ts +8 -11
- package/dist/sidebar-toggle-island/index.js +75 -62
- package/dist/sidebar-tree/build-tree.js +5 -6
- package/dist/sidebar-tree/types.d.ts +2 -0
- package/dist/sidebar-tree-island/index.d.ts +4 -19
- package/dist/sidebar-tree-island/index.js +782 -436
- package/dist/sidebar-tree-island/scope-state.d.ts +38 -0
- package/dist/sidebar-tree-island/scope-state.js +151 -0
- package/dist/sidebar-tree-island/sidebar-scroll-preserve.js +6 -2
- package/dist/sidebar-utils/index.d.ts +17 -19
- package/dist/sidebar-utils/index.js +100 -3
- package/dist/sidebar-utils/scope.d.ts +11 -0
- package/dist/sidebar-utils/scope.js +67 -0
- package/dist/sidebar-with-defaults/index.d.ts +1 -2
- package/dist/sidebar-with-defaults/index.js +19 -18
- package/dist/site-schema/nav-tree.js +15 -15
- package/dist/site-schema/types.d.ts +1 -0
- package/dist/site-tree-nav/index.d.ts +2 -3
- package/dist/site-tree-nav/index.js +11 -12
- package/dist/site-tree-nav/normalize-island-props.d.ts +16 -0
- package/dist/site-tree-nav/normalize-island-props.js +122 -0
- package/dist/site-tree-nav-island/index.d.ts +3 -3
- package/dist/site-tree-nav-island/index.js +243 -144
- package/dist/smart-break/index.d.ts +3 -4
- package/dist/smart-break/index.js +1 -1
- package/dist/tab-item/tab-item.d.ts +3 -4
- package/dist/tab-item/tab-item.js +1 -1
- package/dist/tag-pages/index.d.ts +3 -3
- package/dist/tag-pages/index.js +10 -10
- package/dist/theme/color-scheme-provider.d.ts +3 -3
- package/dist/theme/color-scheme-provider.js +3 -3
- package/dist/theme/theme-pack-provider.d.ts +1 -1
- package/dist/theme/theme-pack-provider.js +3 -3
- package/dist/theme/theme-toggle.d.ts +2 -3
- package/dist/theme/theme-toggle.js +1 -1
- package/dist/theme-pack-dialog/index.d.ts +1 -1
- package/dist/theme-pack-dialog/index.js +69 -75
- package/dist/theme-pack-dialog/theme-pack-card.d.ts +3 -4
- package/dist/theme-pack-dialog/theme-pack-card.js +19 -17
- package/dist/theme-pack-switcher/index.d.ts +4 -5
- package/dist/theme-pack-switcher/index.js +52 -49
- package/dist/theme-packs/academia/meta.json +1 -1
- package/dist/theme-packs/academia/pack.css +1 -1
- package/dist/theme-packs/bauhaus/meta.json +1 -1
- package/dist/theme-packs/bauhaus/pack.css +2 -2
- package/dist/theme-packs/blueprint/meta.json +1 -1
- package/dist/theme-packs/blueprint/pack.css +2 -2
- package/dist/theme-packs/botanica/meta.json +1 -1
- package/dist/theme-packs/botanica/pack.css +2 -2
- package/dist/theme-packs/broadsheet/meta.json +1 -1
- package/dist/theme-packs/broadsheet/pack.css +2 -2
- package/dist/theme-packs/brutalist/meta.json +1 -1
- package/dist/theme-packs/brutalist/pack.css +2 -2
- package/dist/theme-packs/eink/meta.json +1 -1
- package/dist/theme-packs/eink/pack.css +1 -1
- package/dist/theme-packs/futura-editorial/meta.json +1 -1
- package/dist/theme-packs/futura-editorial/pack.css +2 -2
- package/dist/theme-packs/hearth/meta.json +1 -1
- package/dist/theme-packs/hearth/pack.css +2 -2
- package/dist/theme-packs/ledger/meta.json +1 -1
- package/dist/theme-packs/ledger/pack.css +1 -1
- package/dist/theme-packs/manuscript/meta.json +1 -1
- package/dist/theme-packs/manuscript/pack.css +1 -1
- package/dist/theme-packs/matcha/meta.json +1 -1
- package/dist/theme-packs/matcha/pack.css +2 -2
- package/dist/theme-packs/nocturne/meta.json +1 -1
- package/dist/theme-packs/nocturne/pack.css +2 -2
- package/dist/theme-packs/observatory/meta.json +1 -1
- package/dist/theme-packs/observatory/pack.css +2 -2
- package/dist/theme-packs/onyx/meta.json +1 -1
- package/dist/theme-packs/onyx/pack.css +2 -2
- package/dist/theme-packs/phosphor/meta.json +1 -1
- package/dist/theme-packs/phosphor/pack.css +2 -2
- package/dist/theme-packs/riso/meta.json +1 -1
- package/dist/theme-packs/riso/pack.css +2 -2
- package/dist/theme-packs/sakura/meta.json +1 -1
- package/dist/theme-packs/sakura/pack.css +2 -2
- package/dist/theme-packs/scandi/meta.json +1 -1
- package/dist/theme-packs/scandi/pack.css +1 -1
- package/dist/theme-packs/solar/meta.json +1 -1
- package/dist/theme-packs/solar/pack.css +1 -1
- package/dist/theme-packs/sumi/meta.json +1 -1
- package/dist/theme-packs/sumi/pack.css +2 -2
- package/dist/theme-packs/swissgrid/meta.json +1 -1
- package/dist/theme-packs/swissgrid/pack.css +1 -1
- package/dist/theme-packs/timberline/meta.json +1 -1
- package/dist/theme-packs/timberline/pack.css +2 -2
- package/dist/theme-packs/washi/meta.json +1 -1
- package/dist/theme-packs/washi/pack.css +2 -2
- package/dist/theme-toggle/index.d.ts +1 -1
- package/dist/theme-toggle/index.js +154 -167
- package/dist/theme.css +47 -121
- package/dist/toc/mobile-toc.d.ts +3 -5
- package/dist/toc/mobile-toc.js +29 -27
- package/dist/toc/toc.d.ts +3 -4
- package/dist/toc/toc.js +18 -18
- package/dist/toc/use-active-heading.d.ts +5 -4
- package/dist/toc/use-active-heading.js +36 -30
- package/dist/toc-prepaint/index.d.ts +1 -2
- package/dist/toc-prepaint/index.js +4 -6
- package/dist/transitions/nested-island-props-refresh.d.ts +3 -16
- package/dist/transitions/nested-island-props-refresh.js +133 -151
- package/dist/transitions/page-events.d.ts +8 -13
- package/dist/tree-nav-shared/index.d.ts +4 -5
- package/dist/tree-nav-shared/index.js +6 -7
- package/dist/use-modal-dialog/index.d.ts +9 -63
- package/dist/use-modal-dialog/index.js +41 -59
- package/dist/versions-page/index.d.ts +3 -3
- package/dist/versions-page/index.js +5 -5
- package/dist/wind/index.d.ts +5 -0
- package/dist/wind/index.js +169 -0
- package/dist/wind.json +498 -0
- package/dist/z-index-defaults/index.d.ts +4 -4
- package/dist/zdtp-loader.d.ts +7 -0
- package/dist/zdtp-loader.js +8 -0
- package/eject/asset-components/asset-card.tsx +14 -16
- package/eject/asset-components/asset-code.tsx +10 -12
- package/eject/asset-components/shared.tsx +5 -7
- package/eject/breadcrumb/breadcrumb.tsx +15 -16
- package/eject/code-group/index.tsx +4 -10
- package/eject/content-admonition/index.tsx +5 -6
- package/eject/desktop-sidebar-toggle-island/index.ts +4 -0
- package/eject/desktop-sidebar-toggle-island/island.tsx +50 -0
- package/eject/desktop-sidebar-toggle-island/storage.ts +27 -0
- package/eject/details/details.tsx +3 -5
- package/eject/doc-history/index.tsx +193 -179
- package/eject/doc-pager/index.tsx +3 -4
- package/eject/footer/footer.tsx +7 -9
- package/eject/header/header.tsx +42 -54
- package/eject/header/nav-overflow-script.ts +1 -1
- package/eject/header/types.ts +12 -13
- package/eject/image-enlarge/index.tsx +84 -69
- package/eject/image-enlarge/public.ts +2 -0
- package/eject/image-enlarge/ssr-fallback.tsx +7 -0
- package/eject/page-loading/page-loading-overlay.tsx +8 -15
- package/eject/sidebar/client-data.ts +68 -0
- package/eject/sidebar/index.ts +3 -0
- package/eject/sidebar/sidebar.tsx +16 -97
- package/eject/sidebar/types.ts +15 -0
- package/eject/sidebar-toggle-island/index.tsx +103 -102
- package/eject/sidebar-tree-island/index.tsx +827 -615
- package/eject/sidebar-tree-island/scope-state.ts +154 -0
- package/eject/sidebar-tree-island/sidebar-scroll-preserve.ts +8 -2
- package/eject/site-tree-nav-island/index.tsx +349 -222
- package/eject/tab-item/tab-item.tsx +2 -4
- package/eject/theme-toggle/hydration-pending.ts +6 -10
- package/eject/theme-toggle/index.tsx +133 -173
- package/eject/toc/mobile-toc.tsx +27 -31
- package/eject/toc/toc.tsx +21 -24
- package/eject/toc/use-active-heading.ts +43 -38
- package/package.json +40 -22
- package/routes-src/404.tsx +2 -3
- package/routes-src/_chrome.tsx +7 -2
- package/routes-src/_design-token-panel-bootstrap.tsx +1 -63
- package/routes-src/docs-slug.tsx +2 -3
- package/routes-src/docs-tags-index.tsx +2 -3
- package/routes-src/docs-tags-tag.tsx +2 -3
- package/routes-src/docs-versions.tsx +2 -3
- package/routes-src/files-path.tsx +2 -4
- package/routes-src/index.tsx +2 -3
- package/routes-src/locale-docs-slug.tsx +2 -3
- package/routes-src/locale-docs-tags-index.tsx +2 -3
- package/routes-src/locale-docs-tags-tag.tsx +2 -3
- package/routes-src/locale-docs-versions.tsx +2 -3
- package/routes-src/locale-files-path.tsx +2 -4
- package/routes-src/locale-index.tsx +2 -3
- package/routes-src/mcp.tsx +25 -0
- package/routes-src/v-docs-slug.tsx +2 -3
- package/routes-src/v-locale-docs-slug.tsx +2 -3
- package/tsconfig.base.json +1 -1
- package/dist/safelist.css +0 -2
- package/dist/theme-no-reset.css +0 -379
- package/eject/desktop-sidebar-toggle-island/index.tsx +0 -110
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type ReadonlySignal, type Ref } from "@takazudo/zfb/zudo-react";
|
|
2
|
+
import type { SidebarNavNode, SidebarNavigationContext } from "../sidebar/types.js";
|
|
3
|
+
export interface ScopeControls {
|
|
4
|
+
focus: (node: SidebarNavNode) => void;
|
|
5
|
+
focusLabel: string;
|
|
6
|
+
expansion: {
|
|
7
|
+
value: Record<string, boolean>;
|
|
8
|
+
};
|
|
9
|
+
reveal: ReadonlySignal<number>;
|
|
10
|
+
save: () => void;
|
|
11
|
+
defaultOpen: (node: SidebarNavNode) => boolean;
|
|
12
|
+
defaultGroupOpen: (items: SidebarNavNode[]) => boolean;
|
|
13
|
+
}
|
|
14
|
+
/** One controller shared by the real desktop tree and mobile drawer. SSR always
|
|
15
|
+
* starts with configured roots; session state is applied only on activation. */
|
|
16
|
+
export declare function useSidebarScope({ nodes, navigation, activeSlug, query, locale }: {
|
|
17
|
+
nodes: SidebarNavNode[];
|
|
18
|
+
navigation?: SidebarNavigationContext;
|
|
19
|
+
activeSlug: ReadonlySignal<string | undefined>;
|
|
20
|
+
query: {
|
|
21
|
+
value: string;
|
|
22
|
+
};
|
|
23
|
+
locale: string;
|
|
24
|
+
}): {
|
|
25
|
+
selected: import("@takazudo/zfb/zudo-react").Signal<string | null>;
|
|
26
|
+
selectedNodes: ReadonlySignal<SidebarNavNode[]>;
|
|
27
|
+
broader: ReadonlySignal<string | null>;
|
|
28
|
+
labels: {
|
|
29
|
+
broaden: string;
|
|
30
|
+
restore: string;
|
|
31
|
+
focus: string;
|
|
32
|
+
};
|
|
33
|
+
canRestore: ReadonlySignal<boolean>;
|
|
34
|
+
changeScope: (id: string | null) => void;
|
|
35
|
+
save: () => void;
|
|
36
|
+
navRef: Ref<HTMLElement>;
|
|
37
|
+
scopeControls: ScopeControls | undefined;
|
|
38
|
+
};
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { computed, getScope, signal } from "@takazudo/zfb/zudo-react";
|
|
2
|
+
import { broaderSidebarScope, sidebarScopeNodes, reconcileSidebarScope, indexSidebarOccurrences, sidebarInitialExpansion, sidebarBaselineOpen, SIDEBAR_FOREST_SCOPE } from "../sidebar-utils/index.js";
|
|
3
|
+
import { getNoteTrayItems, groupItems } from "../note-tray-model/index.js";
|
|
4
|
+
import { AFTER_NAVIGATE_EVENT } from "../transitions/index.js";
|
|
5
|
+
function useSidebarScope({ nodes, navigation, activeSlug, query, locale }) {
|
|
6
|
+
const selected = signal(null);
|
|
7
|
+
const expansion = signal({});
|
|
8
|
+
const reveal = signal(0);
|
|
9
|
+
let lastPage = activeSlug.value;
|
|
10
|
+
const navRef = { current: null };
|
|
11
|
+
const stateKey = "zd-sidebar-scope";
|
|
12
|
+
const syncEvent = "zd:sidebar-scope";
|
|
13
|
+
const labels = locale === "ja" ? {
|
|
14
|
+
broaden: "\u30C4\u30EA\u30FC\u3092\u5E83\u3052\u308B",
|
|
15
|
+
restore: "\u73FE\u5728\u306E\u30DA\u30FC\u30B8\u306E\u30C4\u30EA\u30FC\u306B\u623B\u3059",
|
|
16
|
+
focus: "\u3053\u306E\u679D\u3060\u3051\u3092\u8868\u793A"
|
|
17
|
+
} : {
|
|
18
|
+
broaden: "Broaden tree",
|
|
19
|
+
restore: "Restore current page\u2019s local tree",
|
|
20
|
+
focus: "Show only this branch"
|
|
21
|
+
};
|
|
22
|
+
const selectedNodes = computed(() => navigation ? sidebarScopeNodes(navigation, nodes, selected.value) : nodes);
|
|
23
|
+
const broader = computed(() => navigation ? broaderSidebarScope(navigation, nodes, selected.value) : null);
|
|
24
|
+
const occurrenceIndex = navigation ? indexSidebarOccurrences(navigation.roots) : /* @__PURE__ */ new Map();
|
|
25
|
+
const trayGroups = [...occurrenceIndex].flatMap(([id, node]) => {
|
|
26
|
+
const grouping = node.noteTraySidebar;
|
|
27
|
+
if (node.shape !== "note-tray" || !grouping || grouping === "index") return [];
|
|
28
|
+
return groupItems(getNoteTrayItems(node), grouping, node.sortOrder ?? "asc").map((group) => ({ key: `${id}#${group.key}`, items: group.items }));
|
|
29
|
+
});
|
|
30
|
+
const groupKeys = new Set(trayGroups.map((group) => group.key));
|
|
31
|
+
const defaultOpen = (node) => sidebarBaselineOpen(node, navigation ? sidebarInitialExpansion(navigation, activeSlug.value) : void 0, activeSlug.value);
|
|
32
|
+
const defaultGroupOpen = (items) => items.some((item) => item.slug === activeSlug.value) || !!navigation && sidebarInitialExpansion(navigation, activeSlug.value) === "expanded";
|
|
33
|
+
const canRestore = computed(() => {
|
|
34
|
+
if (JSON.stringify(selectedNodes.value) !== JSON.stringify(nodes)) return true;
|
|
35
|
+
for (const [id, node] of occurrenceIndex) {
|
|
36
|
+
if (node.children.length && (expansion.value[id] ?? defaultOpen(node)) !== defaultOpen(node)) return true;
|
|
37
|
+
}
|
|
38
|
+
return trayGroups.some((group) => (expansion.value[group.key] ?? defaultGroupOpen(group.items)) !== defaultGroupOpen(group.items));
|
|
39
|
+
});
|
|
40
|
+
const revealPath = (id) => {
|
|
41
|
+
if (!navigation) return;
|
|
42
|
+
const next = { ...expansion.value };
|
|
43
|
+
for (const [key, node] of occurrenceIndex) {
|
|
44
|
+
if (node.slug !== activeSlug.value && key !== id) continue;
|
|
45
|
+
let ancestor = key;
|
|
46
|
+
while (ancestor) {
|
|
47
|
+
next[ancestor] = true;
|
|
48
|
+
ancestor = navigation.parents[ancestor];
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
for (const group of trayGroups) {
|
|
52
|
+
if (group.items.some((item) => item.slug === activeSlug.value)) next[group.key] = true;
|
|
53
|
+
}
|
|
54
|
+
expansion.value = next;
|
|
55
|
+
reveal.value++;
|
|
56
|
+
};
|
|
57
|
+
const save = () => {
|
|
58
|
+
if (!navigation) return;
|
|
59
|
+
try {
|
|
60
|
+
sessionStorage.setItem(stateKey, JSON.stringify({ context: navigation.id, page: activeSlug.value, selected: selected.value, query: query.value, expansion: expansion.value }));
|
|
61
|
+
} catch {
|
|
62
|
+
}
|
|
63
|
+
document.dispatchEvent(new CustomEvent(syncEvent, { detail: { context: navigation.id, page: activeSlug.value, selected: selected.value, query: query.value, expansion: expansion.value } }));
|
|
64
|
+
};
|
|
65
|
+
const changeScope = (id) => {
|
|
66
|
+
const previous = selected.value;
|
|
67
|
+
selected.value = navigation && JSON.stringify(sidebarScopeNodes(navigation, nodes, id)) === JSON.stringify(nodes) ? null : id;
|
|
68
|
+
if (id === null) {
|
|
69
|
+
expansion.value = {};
|
|
70
|
+
revealPath();
|
|
71
|
+
} else {
|
|
72
|
+
revealPath(previous);
|
|
73
|
+
revealPath(id);
|
|
74
|
+
}
|
|
75
|
+
save();
|
|
76
|
+
queueMicrotask(() => {
|
|
77
|
+
const nav = navRef.current;
|
|
78
|
+
const controls = [...nav?.querySelectorAll("[data-sidebar-focus]") ?? []];
|
|
79
|
+
const activeBranch = controls.reverse().find((button) => {
|
|
80
|
+
const node = occurrenceIndex.get(button.dataset.sidebarFocusScope ?? "");
|
|
81
|
+
const contains = (n) => n.slug === activeSlug.value || n.children.some(contains);
|
|
82
|
+
return node && contains(node);
|
|
83
|
+
});
|
|
84
|
+
const rootLink = id && id !== SIDEBAR_FOREST_SCOPE && broader.value !== null ? nav?.querySelector("[data-sidebar-tree-root] a") : null;
|
|
85
|
+
const currentLink = nav?.querySelector('[aria-current="page"]');
|
|
86
|
+
const control = (id === null ? currentLink : rootLink) ?? nav?.querySelector("[data-sidebar-broaden]") ?? activeBranch ?? currentLink ?? nav?.querySelector("[data-sidebar-focus], [data-sidebar-tree-root] a, input");
|
|
87
|
+
const target = control;
|
|
88
|
+
let viewport = nav?.parentElement;
|
|
89
|
+
while (viewport && viewport !== document.body && viewport.scrollHeight <= viewport.clientHeight) viewport = viewport.parentElement;
|
|
90
|
+
if (target && viewport && viewport !== document.body) {
|
|
91
|
+
const row = target.getBoundingClientRect();
|
|
92
|
+
const bounds = viewport.getBoundingClientRect();
|
|
93
|
+
if (row.top < bounds.top) viewport.scrollTop += row.top - bounds.top - 8;
|
|
94
|
+
else if (row.bottom > bounds.bottom) viewport.scrollTop += row.bottom - bounds.bottom + 8;
|
|
95
|
+
}
|
|
96
|
+
control?.focus({ preventScroll: true });
|
|
97
|
+
});
|
|
98
|
+
};
|
|
99
|
+
const scopeControls = navigation ? {
|
|
100
|
+
focus: (node) => {
|
|
101
|
+
if (node.occurrenceId) changeScope(node.occurrenceId);
|
|
102
|
+
},
|
|
103
|
+
focusLabel: labels.focus,
|
|
104
|
+
expansion,
|
|
105
|
+
reveal,
|
|
106
|
+
defaultOpen,
|
|
107
|
+
defaultGroupOpen,
|
|
108
|
+
save
|
|
109
|
+
} : void 0;
|
|
110
|
+
getScope().onActivate(() => {
|
|
111
|
+
if (!navigation) return;
|
|
112
|
+
lastPage = activeSlug.value;
|
|
113
|
+
try {
|
|
114
|
+
const stored = JSON.parse(sessionStorage.getItem(stateKey) ?? "null");
|
|
115
|
+
if (stored?.context === navigation.id) {
|
|
116
|
+
const candidate = typeof stored.selected === "string" ? stored.selected : null;
|
|
117
|
+
const valid = candidate === SIDEBAR_FOREST_SCOPE || candidate !== null && occurrenceIndex.has(candidate) ? candidate : null;
|
|
118
|
+
selected.value = stored.page === activeSlug.value ? valid : reconcileSidebarScope(navigation, nodes, valid, activeSlug.value);
|
|
119
|
+
query.value = typeof stored.query === "string" ? stored.query : "";
|
|
120
|
+
if (stored.expansion && typeof stored.expansion === "object") expansion.value = Object.fromEntries(Object.entries(stored.expansion).filter(([id, value]) => (occurrenceIndex.has(id) || groupKeys.has(id)) && typeof value === "boolean"));
|
|
121
|
+
if (stored.page !== activeSlug.value) revealPath(selected.value);
|
|
122
|
+
}
|
|
123
|
+
} catch {
|
|
124
|
+
}
|
|
125
|
+
save();
|
|
126
|
+
const sync = (event) => {
|
|
127
|
+
const state = event.detail;
|
|
128
|
+
if (state?.context !== navigation.id || state.page !== activeSlug.value) return;
|
|
129
|
+
selected.value = state.selected;
|
|
130
|
+
query.value = state.query;
|
|
131
|
+
expansion.value = state.expansion;
|
|
132
|
+
};
|
|
133
|
+
const navigate = () => {
|
|
134
|
+
if (lastPage === activeSlug.value) return;
|
|
135
|
+
lastPage = activeSlug.value;
|
|
136
|
+
selected.value = reconcileSidebarScope(navigation, nodes, selected.value, activeSlug.value);
|
|
137
|
+
revealPath(selected.value);
|
|
138
|
+
save();
|
|
139
|
+
};
|
|
140
|
+
document.addEventListener(syncEvent, sync);
|
|
141
|
+
document.addEventListener(AFTER_NAVIGATE_EVENT, navigate);
|
|
142
|
+
return () => {
|
|
143
|
+
document.removeEventListener(syncEvent, sync);
|
|
144
|
+
document.removeEventListener(AFTER_NAVIGATE_EVENT, navigate);
|
|
145
|
+
};
|
|
146
|
+
});
|
|
147
|
+
return { selected, selectedNodes, broader, labels, canRestore, changeScope, save, navRef, scopeControls };
|
|
148
|
+
}
|
|
149
|
+
export {
|
|
150
|
+
useSidebarScope
|
|
151
|
+
};
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
AFTER_NAVIGATE_EVENT,
|
|
3
|
+
BEFORE_NAVIGATE_EVENT
|
|
4
|
+
} from "../transitions/index.js";
|
|
2
5
|
const installedControllers = /* @__PURE__ */ new WeakMap();
|
|
3
6
|
function installSidebarScrollPreserve({
|
|
4
7
|
document: document2,
|
|
@@ -45,7 +48,8 @@ function ensureSidebarScrollPreserve(options) {
|
|
|
45
48
|
);
|
|
46
49
|
}
|
|
47
50
|
function resolveBrowserOptions() {
|
|
48
|
-
if (typeof document === "undefined" || typeof window === "undefined")
|
|
51
|
+
if (typeof document === "undefined" || typeof window === "undefined")
|
|
52
|
+
return void 0;
|
|
49
53
|
return {
|
|
50
54
|
document,
|
|
51
55
|
requestAnimationFrame: window.requestAnimationFrame.bind(window),
|
|
@@ -25,28 +25,20 @@ export interface SidebarAutogenerated {
|
|
|
25
25
|
* A sidebar item — string shorthand is equivalent to `{ type: "doc", id: slug }`.
|
|
26
26
|
*/
|
|
27
27
|
export type SidebarItem = SidebarDoc | SidebarLink | SidebarCategory | SidebarAutogenerated | string;
|
|
28
|
+
/** An explicit editorial tree with an optional local view of a category's children. */
|
|
29
|
+
export interface SidebarDefinition {
|
|
30
|
+
items: SidebarItem[];
|
|
31
|
+
/** Resolved occurrence indexes from the forest to a category (not URL segments). */
|
|
32
|
+
initialPath?: number[];
|
|
33
|
+
/** Share across sections using the same editorial tree. Locale/version are added by chrome. */
|
|
34
|
+
contextId?: string;
|
|
35
|
+
}
|
|
28
36
|
/** Sidebar config keyed by section (categoryMatch value). */
|
|
29
37
|
export type SidebarsConfig = {
|
|
30
|
-
[sectionKey: string]: SidebarItem[] | undefined;
|
|
38
|
+
[sectionKey: string]: SidebarItem[] | SidebarDefinition | undefined;
|
|
31
39
|
};
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
slug: string;
|
|
35
|
-
label: string;
|
|
36
|
-
description?: string;
|
|
37
|
-
position: number;
|
|
38
|
-
href?: string;
|
|
39
|
-
hasPage: boolean;
|
|
40
|
-
children: SidebarNavNode[];
|
|
41
|
-
sortOrder?: "asc" | "desc";
|
|
42
|
-
collapsed?: boolean;
|
|
43
|
-
shape?: "note-tray";
|
|
44
|
-
noteTrayDated?: boolean;
|
|
45
|
-
noteTraySidebar?: "index" | "year" | "month";
|
|
46
|
-
date?: string;
|
|
47
|
-
updated?: string;
|
|
48
|
-
rank?: number;
|
|
49
|
-
}
|
|
40
|
+
export type { SidebarNavNode, SidebarNavigationContext } from "../sidebar/types.js";
|
|
41
|
+
import type { SidebarNavNode, SidebarNavigationContext } from "../sidebar/types.js";
|
|
50
42
|
/** Category metadata shape (mirrors host's CategoryMeta). */
|
|
51
43
|
export interface SidebarCategoryMeta {
|
|
52
44
|
label?: string;
|
|
@@ -68,3 +60,9 @@ export interface SidebarCategoryMeta {
|
|
|
68
60
|
* values from headerNav, used for the `"!"` fallback category filter.
|
|
69
61
|
*/
|
|
70
62
|
export declare function buildSidebarForSection(docs: unknown[], lang: string, categoryMatch: string | undefined, categoryMeta: Map<string, SidebarCategoryMeta> | undefined, sidebars: SidebarsConfig, buildNavTree: (docs: unknown[], lang: string, categoryMeta?: Map<string, SidebarCategoryMeta>) => SidebarNavNode[], explicitCategoryPrefixes: string[]): SidebarNavNode[];
|
|
63
|
+
/** Builder-owned provenance keeps omitted autogenerated roots and duplicate links distinct. */
|
|
64
|
+
export declare function buildSidebarNavigation(...args: Parameters<typeof buildSidebarForSection>): {
|
|
65
|
+
nodes: SidebarNavNode[];
|
|
66
|
+
navigation: SidebarNavigationContext;
|
|
67
|
+
};
|
|
68
|
+
export { sidebarInitialExpansion, sidebarBaselineOpen, SIDEBAR_FOREST_SCOPE, indexSidebarOccurrences, sidebarScopeNodes, broaderSidebarScope, reconcileSidebarScope } from "./scope.js";
|
|
@@ -78,11 +78,108 @@ function buildSidebarForSection(docs, lang, categoryMatch, categoryMeta, sidebar
|
|
|
78
78
|
const tree = buildNavTree(docs, lang, categoryMeta);
|
|
79
79
|
const sectionKey = categoryMatch ?? "default";
|
|
80
80
|
const config = sidebars[sectionKey];
|
|
81
|
-
if (!config || config.length === 0) {
|
|
81
|
+
if (!config || (Array.isArray(config) ? config.length === 0 : config.items.length === 0)) {
|
|
82
82
|
return filterByCategory(tree, categoryMatch, explicitCategoryPrefixes);
|
|
83
83
|
}
|
|
84
|
-
return resolveItems(config, tree, lang);
|
|
84
|
+
if (Array.isArray(config)) return resolveItems(config, tree, lang);
|
|
85
|
+
let nodes = resolveItems(config.items, tree, lang);
|
|
86
|
+
for (const index of config.initialPath ?? []) {
|
|
87
|
+
if (!Number.isInteger(index) || index < 0 || !nodes[index]) throw new Error(`Invalid sidebar initialPath for ${sectionKey}`);
|
|
88
|
+
nodes = nodes[index].children;
|
|
89
|
+
}
|
|
90
|
+
return nodes;
|
|
91
|
+
}
|
|
92
|
+
function buildSidebarNavigation(...args) {
|
|
93
|
+
const [docs, lang, categoryMatch, meta, sidebars, buildTree, prefixes] = args;
|
|
94
|
+
const initialExpansion = {};
|
|
95
|
+
for (const entry of docs) {
|
|
96
|
+
const doc = entry;
|
|
97
|
+
const value = doc.data?.sidebar_initial_expansion;
|
|
98
|
+
if (typeof doc.slug === "string" && (value === "collapsed" || value === "expanded")) {
|
|
99
|
+
const slug = doc.data?.slug ?? (doc.slug === "index" ? "" : doc.slug.replace(/\/index$/, ""));
|
|
100
|
+
initialExpansion[slug] = value;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const tree = buildTree(docs, lang, meta);
|
|
104
|
+
const config = sidebars[categoryMatch ?? "default"];
|
|
105
|
+
const definition = config && !Array.isArray(config) ? config : void 0;
|
|
106
|
+
const items = Array.isArray(config) ? config : definition?.items;
|
|
107
|
+
const parents = {};
|
|
108
|
+
function identify(nodes2, prefix, parent) {
|
|
109
|
+
return nodes2.map((node, index) => {
|
|
110
|
+
const occurrenceId = `${prefix}/${index}`;
|
|
111
|
+
parents[occurrenceId] = parent;
|
|
112
|
+
return { ...node, occurrenceId, children: identify(node.children, occurrenceId, occurrenceId) };
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
const automatic = identify(tree, "auto", null);
|
|
116
|
+
let roots;
|
|
117
|
+
let nodes;
|
|
118
|
+
if (!items?.length) {
|
|
119
|
+
roots = automatic;
|
|
120
|
+
nodes = filterByCategory(roots, categoryMatch, prefixes);
|
|
121
|
+
} else if (items.length === 1 && typeof items[0] !== "string" && items[0]?.type === "autogenerated") {
|
|
122
|
+
roots = automatic;
|
|
123
|
+
nodes = items[0].dirName ? findNode(roots, items[0].dirName)?.children ?? [] : roots;
|
|
124
|
+
} else {
|
|
125
|
+
let resolve2 = function(entries, prefix, parent) {
|
|
126
|
+
const canonical = [];
|
|
127
|
+
const visible = [];
|
|
128
|
+
entries.forEach((item, index) => {
|
|
129
|
+
const id = `${prefix}/${index}`;
|
|
130
|
+
if (typeof item !== "string" && item.type === "category") {
|
|
131
|
+
const children = resolve2(item.items, id, id);
|
|
132
|
+
if (item.sortOrder === "desc") {
|
|
133
|
+
children.canonical.reverse();
|
|
134
|
+
children.visible.reverse();
|
|
135
|
+
}
|
|
136
|
+
const node = { occurrenceId: id, slug: `__category__${item.label}`, label: item.label, position: 0, hasPage: false, collapsed: item.collapsed, sortOrder: item.sortOrder, children: children.canonical };
|
|
137
|
+
parents[id] = parent;
|
|
138
|
+
canonical.push(node);
|
|
139
|
+
visible.push({ ...node, children: children.visible });
|
|
140
|
+
} else if (typeof item !== "string" && item.type === "autogenerated" && item.dirName) {
|
|
141
|
+
const source = findNode(tree, item.dirName);
|
|
142
|
+
if (source) {
|
|
143
|
+
const identified = identify([source], id, parent)[0];
|
|
144
|
+
canonical.push(identified);
|
|
145
|
+
visible.push(...identified.children);
|
|
146
|
+
}
|
|
147
|
+
} else {
|
|
148
|
+
const resolved = identify(resolveItem(item, tree, lang), id, parent);
|
|
149
|
+
canonical.push(...resolved);
|
|
150
|
+
visible.push(...resolved);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
return { canonical, visible };
|
|
154
|
+
};
|
|
155
|
+
var resolve = resolve2;
|
|
156
|
+
for (const id of Object.keys(parents)) delete parents[id];
|
|
157
|
+
const result = resolve2(items, "custom", null);
|
|
158
|
+
roots = result.canonical;
|
|
159
|
+
nodes = result.visible;
|
|
160
|
+
}
|
|
161
|
+
let localParentId;
|
|
162
|
+
for (const index of definition?.initialPath ?? []) {
|
|
163
|
+
const node = nodes[index];
|
|
164
|
+
if (!Number.isInteger(index) || index < 0 || !node) throw new Error(`Invalid sidebar initialPath for ${categoryMatch ?? "default"}`);
|
|
165
|
+
localParentId = node.occurrenceId;
|
|
166
|
+
nodes = node.children;
|
|
167
|
+
}
|
|
168
|
+
let hash = 2166136261;
|
|
169
|
+
const serialized = JSON.stringify(Object.keys(initialExpansion).length ? [roots, initialExpansion] : roots);
|
|
170
|
+
for (let i = 0; i < serialized.length; i++) hash = Math.imul(hash ^ serialized.charCodeAt(i), 16777619);
|
|
171
|
+
const kind = !items?.length || items.length === 1 && typeof items[0] !== "string" && items[0]?.type === "autogenerated" ? "automatic" : definition?.contextId ?? categoryMatch ?? "default";
|
|
172
|
+
return { nodes, navigation: { id: `${lang}:${kind}:${hash >>> 0}`, roots, parents, ...Object.keys(initialExpansion).length ? { initialExpansion } : {}, ...localParentId ? { localParentId } : {} } };
|
|
85
173
|
}
|
|
174
|
+
import { sidebarInitialExpansion, sidebarBaselineOpen, SIDEBAR_FOREST_SCOPE, indexSidebarOccurrences, sidebarScopeNodes, broaderSidebarScope, reconcileSidebarScope } from "./scope.js";
|
|
86
175
|
export {
|
|
87
|
-
|
|
176
|
+
SIDEBAR_FOREST_SCOPE,
|
|
177
|
+
broaderSidebarScope,
|
|
178
|
+
buildSidebarForSection,
|
|
179
|
+
buildSidebarNavigation,
|
|
180
|
+
indexSidebarOccurrences,
|
|
181
|
+
reconcileSidebarScope,
|
|
182
|
+
sidebarBaselineOpen,
|
|
183
|
+
sidebarInitialExpansion,
|
|
184
|
+
sidebarScopeNodes
|
|
88
185
|
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { SidebarNavNode, SidebarNavigationContext } from "../sidebar/types.js";
|
|
2
|
+
export declare const SIDEBAR_FOREST_SCOPE = "@forest";
|
|
3
|
+
export declare function indexSidebarOccurrences(roots: SidebarNavNode[]): Map<string, SidebarNavNode>;
|
|
4
|
+
export declare function sidebarScopeNodes(context: SidebarNavigationContext, baseline: SidebarNavNode[], selected: string | null): SidebarNavNode[];
|
|
5
|
+
/** Only an actual shared parent can enclose a configured forest. */
|
|
6
|
+
export declare function broaderSidebarScope(context: SidebarNavigationContext, baseline: SidebarNavNode[], selected: string | null): string | null;
|
|
7
|
+
/** On navigation, widen only to the nearest common editorial ancestor. */
|
|
8
|
+
export declare function reconcileSidebarScope(context: SidebarNavigationContext, baseline: SidebarNavNode[], selected: string | null, slug?: string): string | null;
|
|
9
|
+
/** Leaf override, nearest index default, then legacy undefined behavior. */
|
|
10
|
+
export declare function sidebarInitialExpansion(context: SidebarNavigationContext, slug?: string): "collapsed" | "expanded" | undefined;
|
|
11
|
+
export declare function sidebarBaselineOpen(node: SidebarNavNode, mode: "collapsed" | "expanded" | undefined, currentSlug?: string): boolean;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
const SIDEBAR_FOREST_SCOPE = "@forest";
|
|
2
|
+
function indexSidebarOccurrences(roots) {
|
|
3
|
+
const result = /* @__PURE__ */ new Map();
|
|
4
|
+
const visit = (nodes) => nodes.forEach((node) => {
|
|
5
|
+
if (node.occurrenceId) result.set(node.occurrenceId, node);
|
|
6
|
+
visit(node.children);
|
|
7
|
+
});
|
|
8
|
+
visit(roots);
|
|
9
|
+
return result;
|
|
10
|
+
}
|
|
11
|
+
function sidebarScopeNodes(context, baseline, selected) {
|
|
12
|
+
if (selected === null) return baseline;
|
|
13
|
+
if (selected === SIDEBAR_FOREST_SCOPE) return context.roots;
|
|
14
|
+
const node = indexSidebarOccurrences(context.roots).get(selected);
|
|
15
|
+
return node ? [node] : baseline;
|
|
16
|
+
}
|
|
17
|
+
function broaderSidebarScope(context, baseline, selected) {
|
|
18
|
+
if (selected === SIDEBAR_FOREST_SCOPE) return null;
|
|
19
|
+
if (selected !== null) {
|
|
20
|
+
const parent = context.parents[selected];
|
|
21
|
+
if (parent) return parent;
|
|
22
|
+
if (context.roots.length === 1 && context.roots[0]?.occurrenceId === selected) return null;
|
|
23
|
+
return SIDEBAR_FOREST_SCOPE;
|
|
24
|
+
}
|
|
25
|
+
if (!baseline.length) return null;
|
|
26
|
+
const parents = baseline.map((node) => node.occurrenceId ? context.parents[node.occurrenceId] : void 0);
|
|
27
|
+
if (parents.some((parent) => parent === void 0 || parent !== parents[0])) return context.localParentId ?? null;
|
|
28
|
+
if (parents[0]) return parents[0];
|
|
29
|
+
const rootIds = context.roots.map((node) => node.occurrenceId);
|
|
30
|
+
return baseline.length === rootIds.length && baseline.every((node, i) => node.occurrenceId === rootIds[i]) ? null : SIDEBAR_FOREST_SCOPE;
|
|
31
|
+
}
|
|
32
|
+
function reconcileSidebarScope(context, baseline, selected, slug) {
|
|
33
|
+
if (selected === null || slug === void 0) return selected;
|
|
34
|
+
const index = indexSidebarOccurrences(context.roots);
|
|
35
|
+
if (selected !== SIDEBAR_FOREST_SCOPE && !index.has(selected)) return null;
|
|
36
|
+
const contains = (nodes) => nodes.some((node) => node.slug === slug || contains(node.children));
|
|
37
|
+
if (!contains(context.roots)) return null;
|
|
38
|
+
let candidate = selected;
|
|
39
|
+
while (candidate !== null) {
|
|
40
|
+
if (contains(sidebarScopeNodes(context, baseline, candidate))) return candidate;
|
|
41
|
+
candidate = broaderSidebarScope(context, baseline, candidate);
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
function sidebarInitialExpansion(context, slug = "") {
|
|
46
|
+
let candidate = slug;
|
|
47
|
+
while (true) {
|
|
48
|
+
const value = context.initialExpansion?.[candidate];
|
|
49
|
+
if (value) return value;
|
|
50
|
+
if (!candidate) return void 0;
|
|
51
|
+
const slash = candidate.lastIndexOf("/");
|
|
52
|
+
candidate = slash < 0 ? "" : candidate.slice(0, slash);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function sidebarBaselineOpen(node, mode, currentSlug) {
|
|
56
|
+
const contains = (n) => currentSlug !== void 0 && (n.slug === currentSlug || n.children.some(contains));
|
|
57
|
+
return contains(node) || (node.collapsed !== void 0 ? !node.collapsed : mode !== "collapsed");
|
|
58
|
+
}
|
|
59
|
+
export {
|
|
60
|
+
SIDEBAR_FOREST_SCOPE,
|
|
61
|
+
broaderSidebarScope,
|
|
62
|
+
indexSidebarOccurrences,
|
|
63
|
+
reconcileSidebarScope,
|
|
64
|
+
sidebarBaselineOpen,
|
|
65
|
+
sidebarInitialExpansion,
|
|
66
|
+
sidebarScopeNodes
|
|
67
|
+
};
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
/** @jsxRuntime automatic */
|
|
2
|
-
|
|
3
|
-
import type { JSX } from "preact";
|
|
2
|
+
import type { JSX } from "@takazudo/zfb/zudo-react/jsx-runtime";
|
|
4
3
|
import type { SidebarNavNode, SidebarRootMenuItem } from "../sidebar/types.js";
|
|
5
4
|
import type { ChromeContext } from "../factory-context/index.js";
|
|
6
5
|
import type { Settings } from "../settings.js";
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import { jsx } from "
|
|
1
|
+
import { jsx } from "@takazudo/zfb/zudo-react/jsx-runtime";
|
|
2
2
|
import { Island } from "@takazudo/zfb";
|
|
3
3
|
import { SidebarTree } from "../sidebar-tree-island/index.js";
|
|
4
4
|
import { themeToggleLabels } from "../theme-toggle/labels.js";
|
|
5
5
|
import { deriveDateFormats, deriveNavDataPrep } from "../chrome/derive.js";
|
|
6
|
+
import { normalizeIslandData } from "../chrome/island-data.js";
|
|
7
|
+
import { toSidebarClientData } from "../sidebar/client-data.js";
|
|
6
8
|
import { assertChromeContext } from "../chrome/assert-chrome-context.js";
|
|
7
9
|
function createSidebarWithDefaults(ctx) {
|
|
8
10
|
assertChromeContext(ctx, "createSidebarWithDefaults");
|
|
9
11
|
const defaultLocale = ctx.defaultLocale;
|
|
10
12
|
const localeCount = ctx.locales.length;
|
|
11
13
|
const t = ctx.t;
|
|
12
|
-
const { buildRootMenuItems, buildLocaleLinksForNav,
|
|
14
|
+
const { buildRootMenuItems, buildLocaleLinksForNav, buildSidebarContext, getThemeDefaultMode } = deriveNavDataPrep(ctx);
|
|
13
15
|
const dateFormatsFor = deriveDateFormats(ctx);
|
|
14
16
|
function SidebarWithDefaults(props) {
|
|
15
17
|
const {
|
|
@@ -21,25 +23,24 @@ function createSidebarWithDefaults(ctx) {
|
|
|
21
23
|
} = props;
|
|
22
24
|
const rootMenuItems = buildRootMenuItems(lang, currentVersion);
|
|
23
25
|
const backToMenuLabel = navSection ? t("nav.backToMenu", lang) : void 0;
|
|
24
|
-
const nodes =
|
|
26
|
+
const { nodes, navigation } = buildSidebarContext(lang, navSection, currentVersion, false);
|
|
25
27
|
const localeLinks = buildLocaleLinksForNav(currentPath, lang, localeCount);
|
|
28
|
+
const themeDefaultMode = getThemeDefaultMode();
|
|
29
|
+
const treeProps = normalizeIslandData({
|
|
30
|
+
...toSidebarClientData(nodes, navigation),
|
|
31
|
+
...currentSlug !== void 0 ? { currentSlug } : {},
|
|
32
|
+
rootMenuItems,
|
|
33
|
+
...backToMenuLabel !== void 0 ? { backToMenuLabel } : {},
|
|
34
|
+
locale: lang,
|
|
35
|
+
...localeLinks !== void 0 ? { localeLinks } : {},
|
|
36
|
+
...themeDefaultMode !== void 0 ? { themeDefaultMode } : {},
|
|
37
|
+
themeLabels: themeToggleLabels(t, lang),
|
|
38
|
+
themeRespectSystem: (ctx.settings.colorMode && ctx.settings.colorMode.respectPrefersColorScheme) ?? true,
|
|
39
|
+
dateFormats: dateFormatsFor(lang)
|
|
40
|
+
});
|
|
26
41
|
return Island({
|
|
27
42
|
when: "load",
|
|
28
|
-
children: /* @__PURE__ */ jsx(
|
|
29
|
-
SidebarTree,
|
|
30
|
-
{
|
|
31
|
-
nodes,
|
|
32
|
-
currentSlug,
|
|
33
|
-
rootMenuItems,
|
|
34
|
-
backToMenuLabel,
|
|
35
|
-
locale: lang,
|
|
36
|
-
localeLinks,
|
|
37
|
-
themeDefaultMode: getThemeDefaultMode(),
|
|
38
|
-
themeLabels: themeToggleLabels(t, lang),
|
|
39
|
-
themeRespectSystem: (ctx.settings.colorMode && ctx.settings.colorMode.respectPrefersColorScheme) ?? true,
|
|
40
|
-
dateFormats: dateFormatsFor(lang)
|
|
41
|
-
}
|
|
42
|
-
)
|
|
43
|
+
children: /* @__PURE__ */ jsx(SidebarTree, { ...treeProps })
|
|
43
44
|
});
|
|
44
45
|
}
|
|
45
46
|
return SidebarWithDefaults;
|
|
@@ -7,18 +7,18 @@ function toNavNode(node) {
|
|
|
7
7
|
return {
|
|
8
8
|
slug: node.id,
|
|
9
9
|
label: node.label,
|
|
10
|
-
description: node.description,
|
|
10
|
+
...node.description !== void 0 ? { description: node.description } : {},
|
|
11
11
|
position: node.sidebar_position ?? 999,
|
|
12
|
-
href: node.href,
|
|
12
|
+
...node.href !== void 0 ? { href: node.href } : {},
|
|
13
13
|
hasPage: node.hasPage,
|
|
14
14
|
children: node.children.map(toNavNode),
|
|
15
15
|
sortOrder: node.sortOrder ?? "asc",
|
|
16
|
-
shape: node.shape,
|
|
17
|
-
noteTrayDated: node.noteTrayDated,
|
|
18
|
-
noteTraySidebar: node.noteTraySidebar,
|
|
19
|
-
date: node.date,
|
|
20
|
-
updated: node.updated,
|
|
21
|
-
rank: node.rank
|
|
16
|
+
...node.shape !== void 0 ? { shape: node.shape } : {},
|
|
17
|
+
...node.noteTrayDated !== void 0 ? { noteTrayDated: node.noteTrayDated } : {},
|
|
18
|
+
...node.noteTraySidebar !== void 0 ? { noteTraySidebar: node.noteTraySidebar } : {},
|
|
19
|
+
...node.date !== void 0 ? { date: node.date } : {},
|
|
20
|
+
...node.updated !== void 0 ? { updated: node.updated } : {},
|
|
21
|
+
...node.rank !== void 0 ? { rank: node.rank } : {}
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
24
|
function findRootIndexDoc(docs) {
|
|
@@ -36,17 +36,17 @@ function toRootNavNode(doc, locale, buildHref, categoryMeta) {
|
|
|
36
36
|
return {
|
|
37
37
|
slug: "",
|
|
38
38
|
label: doc.data.sidebar_label ?? doc.data.title ?? meta?.label ?? "",
|
|
39
|
-
description: doc.data.description ?? meta?.description,
|
|
39
|
+
...(doc.data.description ?? meta?.description) !== void 0 ? { description: doc.data.description ?? meta?.description } : {},
|
|
40
40
|
position: doc.data.sidebar_position ?? meta?.position ?? 999,
|
|
41
|
-
|
|
41
|
+
...noPage ? {} : { href: buildHref("", locale) },
|
|
42
42
|
hasPage: noPage !== true,
|
|
43
43
|
children: [],
|
|
44
44
|
sortOrder,
|
|
45
|
-
shape: doc.data.category_shape,
|
|
46
|
-
noteTrayDated: doc.data.note_tray_dated,
|
|
47
|
-
noteTraySidebar: doc.data.note_tray_sidebar,
|
|
48
|
-
date: doc.data.date,
|
|
49
|
-
updated: doc.data.updated,
|
|
45
|
+
...doc.data.category_shape !== void 0 ? { shape: doc.data.category_shape } : {},
|
|
46
|
+
...doc.data.note_tray_dated !== void 0 ? { noteTrayDated: doc.data.note_tray_dated } : {},
|
|
47
|
+
...doc.data.note_tray_sidebar !== void 0 ? { noteTraySidebar: doc.data.note_tray_sidebar } : {},
|
|
48
|
+
...doc.data.date !== void 0 ? { date: doc.data.date } : {},
|
|
49
|
+
...doc.data.updated !== void 0 ? { updated: doc.data.updated } : {},
|
|
50
50
|
rank: 1
|
|
51
51
|
};
|
|
52
52
|
}
|
|
@@ -46,6 +46,7 @@ export interface DocPageFrontmatter {
|
|
|
46
46
|
standalone?: boolean;
|
|
47
47
|
sidebar_position?: number;
|
|
48
48
|
sidebar_label?: string;
|
|
49
|
+
sidebar_initial_expansion?: "collapsed" | "expanded";
|
|
49
50
|
category_no_page?: boolean;
|
|
50
51
|
category_sort_order?: "asc" | "desc";
|
|
51
52
|
category_shape?: "note-tray";
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
/** @jsxRuntime automatic */
|
|
2
|
-
|
|
3
|
-
import type { JSX } from "preact";
|
|
2
|
+
import type { JSX } from "@takazudo/zfb/zudo-react/jsx-runtime";
|
|
4
3
|
import type { SidebarNavNode } from "../sidebar/types.js";
|
|
5
4
|
import type { DateFormatSetting } from "../settings.js";
|
|
6
5
|
/**
|
|
@@ -21,7 +20,7 @@ export interface SiteTreeNavWrapperProps {
|
|
|
21
20
|
lang?: string;
|
|
22
21
|
/**
|
|
23
22
|
* Optional aria-label for the wrapping <nav> element.
|
|
24
|
-
* Forwarded to the
|
|
23
|
+
* Forwarded to the interactive SiteTreeNav island.
|
|
25
24
|
*/
|
|
26
25
|
ariaLabel?: string;
|
|
27
26
|
/**
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { jsx } from "
|
|
1
|
+
import { jsx } from "@takazudo/zfb/zudo-react/jsx-runtime";
|
|
2
2
|
import { Island } from "@takazudo/zfb";
|
|
3
3
|
import { SiteTreeNav } from "../site-tree-nav-island/index.js";
|
|
4
4
|
import { remapVersionedHrefs } from "../nav-data-prep/index.js";
|
|
5
5
|
import { resolveDateFormats } from "../date-format-resolve/index.js";
|
|
6
|
+
import { normalizeSiteTreeNavProps } from "./normalize-island-props.js";
|
|
6
7
|
function createSiteTreeNavWrapper(deps) {
|
|
7
8
|
const {
|
|
8
9
|
defaultLocale,
|
|
@@ -38,19 +39,17 @@ function createSiteTreeNavWrapper(deps) {
|
|
|
38
39
|
}
|
|
39
40
|
}
|
|
40
41
|
if (tree.length === 0) return null;
|
|
42
|
+
const islandProps = normalizeSiteTreeNavProps({
|
|
43
|
+
tree,
|
|
44
|
+
categoryOrder,
|
|
45
|
+
...categoryIgnore !== void 0 ? { categoryIgnore } : {},
|
|
46
|
+
...ariaLabel !== void 0 ? { ariaLabel } : {},
|
|
47
|
+
locale,
|
|
48
|
+
dateFormats: resolveDateFormats(dateFormat, locale)
|
|
49
|
+
});
|
|
41
50
|
return Island({
|
|
42
51
|
when: "idle",
|
|
43
|
-
children: /* @__PURE__ */ jsx(
|
|
44
|
-
SiteTreeNav,
|
|
45
|
-
{
|
|
46
|
-
tree,
|
|
47
|
-
categoryOrder,
|
|
48
|
-
categoryIgnore,
|
|
49
|
-
ariaLabel,
|
|
50
|
-
locale,
|
|
51
|
-
dateFormats: resolveDateFormats(dateFormat, locale)
|
|
52
|
-
}
|
|
53
|
-
)
|
|
52
|
+
children: /* @__PURE__ */ jsx(SiteTreeNav, { ...islandProps })
|
|
54
53
|
});
|
|
55
54
|
}
|
|
56
55
|
return SiteTreeNavWrapper;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ResolvedDateFormats } from "../settings.js";
|
|
2
|
+
import type { SidebarNavNode } from "../sidebar/types.js";
|
|
3
|
+
export interface SiteTreeNavIslandProps {
|
|
4
|
+
tree: SidebarNavNode[];
|
|
5
|
+
categoryOrder: string[];
|
|
6
|
+
categoryIgnore?: string[];
|
|
7
|
+
ariaLabel?: string;
|
|
8
|
+
locale: string;
|
|
9
|
+
dateFormats: ResolvedDateFormats;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Copy the host nav payload through the island's finite JSON shape. Optional
|
|
13
|
+
* fields are added only when present, so neither node records nor top-level
|
|
14
|
+
* props carry own `undefined` values across SSR and hydration.
|
|
15
|
+
*/
|
|
16
|
+
export declare function normalizeSiteTreeNavProps(input: SiteTreeNavIslandProps): SiteTreeNavIslandProps;
|