@takazudo/zudo-doc 5.28.2 → 6.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 +22 -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/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 +28 -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 +2933 -2943
- 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 +70 -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 +1 -2
- package/dist/header-with-defaults/index.js +18 -8
- 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/index.d.ts +1 -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-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/index.ts +1 -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,93 @@
|
|
|
1
|
+
const DEFAULT_SETTINGS = {
|
|
2
|
+
colorScheme: "Default Dark",
|
|
3
|
+
colorMode: {
|
|
4
|
+
defaultMode: "dark",
|
|
5
|
+
lightScheme: "Default Light",
|
|
6
|
+
darkScheme: "Default Dark",
|
|
7
|
+
respectPrefersColorScheme: true
|
|
8
|
+
},
|
|
9
|
+
siteName: "Docs",
|
|
10
|
+
siteDescription: "",
|
|
11
|
+
logo: "auto",
|
|
12
|
+
favicon: void 0,
|
|
13
|
+
base: "/",
|
|
14
|
+
trailingSlash: false,
|
|
15
|
+
home: { wide: false, introMarkdown: "", sitemapHeading: "" },
|
|
16
|
+
siteTreeNavIgnore: [],
|
|
17
|
+
siteTreeNavSecondary: [],
|
|
18
|
+
minifyHtml: true,
|
|
19
|
+
docsDir: "src/content/docs",
|
|
20
|
+
entryDocSlug: "getting-started",
|
|
21
|
+
dateFormat: "locale",
|
|
22
|
+
defaultLocale: "en",
|
|
23
|
+
locales: {},
|
|
24
|
+
mermaid: true,
|
|
25
|
+
transclude: false,
|
|
26
|
+
noindex: false,
|
|
27
|
+
editUrl: false,
|
|
28
|
+
githubUrl: false,
|
|
29
|
+
siteUrl: "",
|
|
30
|
+
metaTags: {
|
|
31
|
+
description: true,
|
|
32
|
+
keywords: false,
|
|
33
|
+
ogImage: false,
|
|
34
|
+
ogSiteName: true,
|
|
35
|
+
twitterCard: false
|
|
36
|
+
},
|
|
37
|
+
sitemap: false,
|
|
38
|
+
docMetainfo: false,
|
|
39
|
+
docMetainfoFields: ["created", "updated", "author"],
|
|
40
|
+
docTags: false,
|
|
41
|
+
tagPlacement: "after-title",
|
|
42
|
+
tagGovernance: "off",
|
|
43
|
+
tagVocabulary: false,
|
|
44
|
+
agentExport: false,
|
|
45
|
+
mcp: false,
|
|
46
|
+
llmsTxt: false,
|
|
47
|
+
changelogs: false,
|
|
48
|
+
math: false,
|
|
49
|
+
cjkFriendly: false,
|
|
50
|
+
onBrokenMarkdownLinks: "warn",
|
|
51
|
+
aiAssistant: false,
|
|
52
|
+
aiChatDemoMode: false,
|
|
53
|
+
aiChatAllowedOrigins: [],
|
|
54
|
+
// Exact UTC-day paid-call admission cap; false disables it. An admission is
|
|
55
|
+
// consumed before provider fetch and is not provider-confirmed accounting.
|
|
56
|
+
aiChatGlobalDailyLimit: false,
|
|
57
|
+
designTokenPanel: false,
|
|
58
|
+
tocMinDepth: 2,
|
|
59
|
+
tocMaxDepth: 4,
|
|
60
|
+
searchMaxBodyLength: 3e3,
|
|
61
|
+
sidebarResizer: false,
|
|
62
|
+
sidebarToggle: false,
|
|
63
|
+
tocToggle: false,
|
|
64
|
+
imageEnlarge: false,
|
|
65
|
+
findInPage: false,
|
|
66
|
+
dynamicPageTransition: false,
|
|
67
|
+
frontmatterPreview: false,
|
|
68
|
+
docHistory: false,
|
|
69
|
+
docHistoryUi: true,
|
|
70
|
+
docHistoryExclude: [],
|
|
71
|
+
assetViewer: false,
|
|
72
|
+
assetViewerDir: "assets",
|
|
73
|
+
assetViewerRoutePrefix: "files",
|
|
74
|
+
assetViewerExclude: [],
|
|
75
|
+
assetViewerIndex: false,
|
|
76
|
+
assetViewerIndexing: false,
|
|
77
|
+
bodyFootUtilArea: false,
|
|
78
|
+
htmlPreview: void 0,
|
|
79
|
+
versions: false,
|
|
80
|
+
claudeResources: false,
|
|
81
|
+
codexResources: false,
|
|
82
|
+
defaultLocaleOnlyPrefixes: [],
|
|
83
|
+
footer: false,
|
|
84
|
+
headerNav: [],
|
|
85
|
+
headerRightItems: [{ type: "component", component: "theme-toggle" }],
|
|
86
|
+
packageOwnedRoutes: true,
|
|
87
|
+
themePack: "default",
|
|
88
|
+
themePackSwitcher: false,
|
|
89
|
+
themePacks: void 0
|
|
90
|
+
};
|
|
91
|
+
export {
|
|
92
|
+
DEFAULT_SETTINGS
|
|
93
|
+
};
|
package/dist/settings.d.ts
CHANGED
|
@@ -398,6 +398,10 @@ export interface Settings {
|
|
|
398
398
|
tagGovernance: TagGovernanceMode;
|
|
399
399
|
tagVocabulary: boolean;
|
|
400
400
|
llmsTxt: boolean;
|
|
401
|
+
/** Generate the package-owned static agent documentation feed. */
|
|
402
|
+
agentExport?: boolean;
|
|
403
|
+
/** Add the stateless read-only MCP endpoint; requires agentExport. */
|
|
404
|
+
mcp?: boolean;
|
|
401
405
|
changelogs?: ChangelogConfig[] | false;
|
|
402
406
|
math: boolean;
|
|
403
407
|
cjkFriendly: boolean;
|
|
@@ -555,8 +559,10 @@ export interface Settings {
|
|
|
555
559
|
* `chromeBindings.DesignTokenPanelBootstrap`, stub-rendered pages now mount
|
|
556
560
|
* NO panel island at all (the injected routes still get the configured one,
|
|
557
561
|
* from any entry page). To get a panel on stub-rendered pages too, thread
|
|
558
|
-
* your builder through
|
|
559
|
-
*
|
|
562
|
+
* your builder through a client bootstrap and expose its fixed-target,
|
|
563
|
+
* Fragment-wrapped Island server boundary as
|
|
564
|
+
* `chromeBindings.DesignTokenPanelBootstrap` — that boundary wins everywhere
|
|
565
|
+
* and is unaffected by this rule. Do not supply a raw client component. See
|
|
560
566
|
* `docs/adr/route-injection-seam.md`.
|
|
561
567
|
*
|
|
562
568
|
* EDGE CASE (zudolab/zudo-doc#3420, diagnostic added #3428, scoped by
|
package/dist/sidebar/index.d.ts
CHANGED
|
@@ -18,4 +18,4 @@
|
|
|
18
18
|
*/
|
|
19
19
|
export { Sidebar } from "./sidebar.js";
|
|
20
20
|
export type { SidebarProps } from "./sidebar.js";
|
|
21
|
-
export type { SidebarLocaleLink, SidebarNavNode, SidebarRootMenuItem, SidebarTreeIslandProps, } from "./types.js";
|
|
21
|
+
export type { SidebarLocaleLink, SidebarNavNode, SidebarNavigationContext, SidebarRootMenuItem, SidebarTreeIslandProps, } from "./types.js";
|
|
@@ -1,50 +1,18 @@
|
|
|
1
1
|
/** @jsxRuntime automatic */
|
|
2
|
-
|
|
3
|
-
import type { ComponentChildren, FunctionComponent, VNode } from "preact";
|
|
2
|
+
import type { Child, Component } from "@takazudo/zfb/zudo-react";
|
|
4
3
|
import type { SidebarTreeIslandProps } from "./types.js";
|
|
4
|
+
/**
|
|
5
|
+
* Props for the server-rendered Sidebar shell. Data preparation stays with the
|
|
6
|
+
* caller, which may supply a tree component or already-rendered children.
|
|
7
|
+
*/
|
|
5
8
|
export interface SidebarProps extends SidebarTreeIslandProps {
|
|
6
|
-
/**
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
* prop forwarding contract.
|
|
11
|
-
*/
|
|
12
|
-
treeComponent?: FunctionComponent<SidebarTreeIslandProps>;
|
|
13
|
-
/**
|
|
14
|
-
* Pre-rendered tree content — falls back to this when
|
|
15
|
-
* `treeComponent` is omitted. Useful for tests and for layouts that
|
|
16
|
-
* compose the tree separately (e.g. inside a host wrapper
|
|
17
|
-
* that needs `client:load` on the actual island element).
|
|
18
|
-
*/
|
|
19
|
-
children?: ComponentChildren;
|
|
9
|
+
/** Component used to render the prepared tree. */
|
|
10
|
+
treeComponent?: Component<SidebarTreeIslandProps>;
|
|
11
|
+
/** Pre-rendered tree content for callers that compose the tree separately. */
|
|
12
|
+
children?: Child;
|
|
20
13
|
}
|
|
21
14
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* Two usage shapes (matching the breadcrumb shell's pattern):
|
|
25
|
-
*
|
|
26
|
-
* 1. Pass `treeComponent` plus the data props (`nodes`,
|
|
27
|
-
* `rootMenuItems`, `localeLinks`, …). The shell forwards them all
|
|
28
|
-
* to the supplied component.
|
|
29
|
-
*
|
|
30
|
-
* 2. Pass `children` (e.g. a pre-instantiated `<SidebarTree
|
|
31
|
-
* client:load … />` from an Astro wrapper). The shell renders
|
|
32
|
-
* them as-is — the typed island props are then unused but kept on
|
|
33
|
-
* the type signature so call-sites stay self-documenting.
|
|
34
|
-
*
|
|
35
|
-
* **The caller is responsible for wrapping this in `<Island when="load">`**
|
|
36
|
-
* so the SSG output emits the `data-zfb-island="Sidebar"` hydration
|
|
37
|
-
* marker around the rendered tree. `<DocLayoutWithDefaults>` does this
|
|
38
|
-
* for you; consumers who render `<Sidebar>` outside the default layout
|
|
39
|
-
* (e.g. via the `sidebarOverride` prop or in a custom layout) must
|
|
40
|
-
* apply the wrapper themselves — otherwise no hydration marker is
|
|
41
|
-
* emitted, and the runtime walks past the SSR'd tree without claiming
|
|
42
|
-
* it as an island. Either way the actual user-facing interactivity
|
|
43
|
-
* comes from the `treeComponent`'s own island registration; the
|
|
44
|
-
* `<Island>` wrapper here exists so the shell can host data-only
|
|
45
|
-
* variants in the future without losing the marker contract.
|
|
15
|
+
* Server-rendered shell around prepared navigation content. An empty node list
|
|
16
|
+
* has no sidebar output and returns null without creating an island boundary.
|
|
46
17
|
*/
|
|
47
|
-
export declare function Sidebar(props: SidebarProps):
|
|
48
|
-
export declare namespace Sidebar {
|
|
49
|
-
var displayName: string;
|
|
50
|
-
}
|
|
18
|
+
export declare function Sidebar(props: SidebarProps): Child;
|
package/dist/sidebar/sidebar.js
CHANGED
|
@@ -1,21 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
import { Fragment, jsx } from "preact/jsx-runtime";
|
|
1
|
+
import { Fragment, jsx } from "@takazudo/zfb/zudo-react/jsx-runtime";
|
|
3
2
|
function Sidebar(props) {
|
|
4
3
|
const {
|
|
5
4
|
treeComponent: TreeComponent,
|
|
6
5
|
children,
|
|
7
6
|
nodes,
|
|
7
|
+
navigation,
|
|
8
8
|
currentSlug,
|
|
9
9
|
rootMenuItems,
|
|
10
10
|
backToMenuLabel,
|
|
11
11
|
localeLinks,
|
|
12
12
|
themeDefaultMode
|
|
13
13
|
} = props;
|
|
14
|
+
if (nodes.length === 0) return null;
|
|
14
15
|
if (TreeComponent) {
|
|
15
16
|
return /* @__PURE__ */ jsx(
|
|
16
17
|
TreeComponent,
|
|
17
18
|
{
|
|
18
19
|
nodes,
|
|
20
|
+
navigation,
|
|
19
21
|
currentSlug,
|
|
20
22
|
rootMenuItems,
|
|
21
23
|
backToMenuLabel,
|
|
@@ -29,7 +31,6 @@ function Sidebar(props) {
|
|
|
29
31
|
}
|
|
30
32
|
return null;
|
|
31
33
|
}
|
|
32
|
-
Sidebar.displayName = "Sidebar";
|
|
33
34
|
export {
|
|
34
35
|
Sidebar
|
|
35
36
|
};
|
package/dist/sidebar/types.d.ts
CHANGED
|
@@ -25,6 +25,8 @@
|
|
|
25
25
|
* Matches `NavNode` in the host project's `src/utils/docs.ts`.
|
|
26
26
|
*/
|
|
27
27
|
export interface SidebarNavNode {
|
|
28
|
+
/** Stable identity of this editorial occurrence, independent of the page slug. */
|
|
29
|
+
occurrenceId?: string;
|
|
28
30
|
slug: string;
|
|
29
31
|
label: string;
|
|
30
32
|
description?: string;
|
|
@@ -67,9 +69,21 @@ export interface SidebarLocaleLink {
|
|
|
67
69
|
*/
|
|
68
70
|
export interface SidebarTreeIslandProps {
|
|
69
71
|
nodes: SidebarNavNode[];
|
|
72
|
+
navigation?: SidebarNavigationContext;
|
|
70
73
|
currentSlug?: string;
|
|
71
74
|
rootMenuItems?: SidebarRootMenuItem[];
|
|
72
75
|
backToMenuLabel?: string;
|
|
73
76
|
localeLinks?: SidebarLocaleLink[];
|
|
74
77
|
themeDefaultMode?: "light" | "dark";
|
|
75
78
|
}
|
|
79
|
+
/** Complete editorial topology, captured before local scoping or filtering. */
|
|
80
|
+
export interface SidebarNavigationContext {
|
|
81
|
+
/** Locale/version/document-context identity including the topology revision. */
|
|
82
|
+
id: string;
|
|
83
|
+
roots: SidebarNavNode[];
|
|
84
|
+
/** Explicit page/index author defaults; resolved against the current destination. */
|
|
85
|
+
initialExpansion?: Record<string, "collapsed" | "expanded">;
|
|
86
|
+
parents: Record<string, string | null>;
|
|
87
|
+
/** Explicit enclosing occurrence for a local forest spanning emitted children. */
|
|
88
|
+
localParentId?: string;
|
|
89
|
+
}
|
|
@@ -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
|
export interface SidebarPrepaintProps {
|
|
5
4
|
/**
|
|
6
5
|
* Mirrors the page's `hide_sidebar: true` frontmatter. When true the desktop
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { Fragment, jsx } from "
|
|
1
|
+
import { Fragment, jsx } from "@takazudo/zfb/zudo-react/jsx-runtime";
|
|
2
2
|
import { Island } from "@takazudo/zfb";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
SIDEBAR_STORAGE_KEY
|
|
6
|
-
} from "../desktop-sidebar-toggle-island/index.js";
|
|
3
|
+
import { DesktopSidebarToggle } from "../desktop-sidebar-toggle-island/index.js";
|
|
4
|
+
import { SIDEBAR_STORAGE_KEY } from "../desktop-sidebar-toggle-island/storage.js";
|
|
7
5
|
function sidebarPrepaintActive(settings, hideSidebar) {
|
|
8
6
|
return Boolean(settings.sidebarToggle) && !hideSidebar;
|
|
9
7
|
}
|
|
@@ -18,7 +16,7 @@ function createSidebarVisibilityPrepaint(settings) {
|
|
|
18
16
|
return /* @__PURE__ */ jsx(
|
|
19
17
|
"script",
|
|
20
18
|
{
|
|
21
|
-
|
|
19
|
+
rawHtml: SIDEBAR_VISIBILITY_PREPAINT_SCRIPT
|
|
22
20
|
}
|
|
23
21
|
);
|
|
24
22
|
}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
import type { JSX } from "preact";
|
|
1
|
+
import type { JSX } from "@takazudo/zfb/zudo-react/jsx-runtime";
|
|
3
2
|
export declare const SIDEBAR_RESIZER_INIT_SCRIPT: string;
|
|
4
3
|
/**
|
|
5
4
|
* Drop-in JSX body-end script for sidebar resize initialization.
|
|
6
5
|
*
|
|
7
6
|
* Include once in the layout (gated on `settings.sidebarResizer`). Emits
|
|
8
7
|
* the full `initSidebarResizer` implementation as an inline
|
|
9
|
-
*
|
|
8
|
+
* static rawHtml script so it runs without a module import.
|
|
10
9
|
*
|
|
11
10
|
* - Calls `initSidebarResizer()` once on first paint.
|
|
12
11
|
* - Re-runs on `AFTER_NAVIGATE_EVENT` (`zfb:after-swap`) for
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx } from "
|
|
1
|
+
import { jsx } from "@takazudo/zfb/zudo-react/jsx-runtime";
|
|
2
2
|
import { AFTER_NAVIGATE_EVENT } from "../transitions/page-events.js";
|
|
3
3
|
const SIDEBAR_RESIZER_INIT_SCRIPT = `(function(){
|
|
4
4
|
var SIDEBAR_ID="desktop-sidebar";
|
|
@@ -141,7 +141,7 @@ const SIDEBAR_RESIZER_INIT_SCRIPT = `(function(){
|
|
|
141
141
|
document.addEventListener(${JSON.stringify(AFTER_NAVIGATE_EVENT)},initSidebarResizer);
|
|
142
142
|
})();`;
|
|
143
143
|
function SidebarResizerInit() {
|
|
144
|
-
return /* @__PURE__ */ jsx("script", {
|
|
144
|
+
return /* @__PURE__ */ jsx("script", { rawHtml: SIDEBAR_RESIZER_INIT_SCRIPT });
|
|
145
145
|
}
|
|
146
146
|
var sidebar_resizer_init_default = SidebarResizerInit;
|
|
147
147
|
const SIDEBAR_RESIZER_RESTORE_SCRIPT = `(function(){try{var w=localStorage.getItem("zudo-doc-sidebar-width");if(!w)return;var n=parseFloat(w);if(!isFinite(n))return;if(n<192)n=192;else if(n>448)n=448;document.documentElement.style.setProperty("--zd-sidebar-w",n+"px");}catch(e){}})();`;
|
|
@@ -149,7 +149,7 @@ function SidebarResizerRestore() {
|
|
|
149
149
|
return /* @__PURE__ */ jsx(
|
|
150
150
|
"script",
|
|
151
151
|
{
|
|
152
|
-
|
|
152
|
+
rawHtml: SIDEBAR_RESIZER_RESTORE_SCRIPT
|
|
153
153
|
}
|
|
154
154
|
);
|
|
155
155
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { ThemeToggleLabels } from "../theme-toggle/index.js";
|
|
2
|
-
import type { SidebarNavNode, SidebarRootMenuItem, SidebarLocaleLink } from "../sidebar/types.js";
|
|
2
|
+
import type { SidebarNavNode, SidebarRootMenuItem, SidebarLocaleLink, SidebarNavigationContext } from "../sidebar/types.js";
|
|
3
3
|
import type { ResolvedDateFormats } from "../settings.js";
|
|
4
4
|
export interface SidebarToggleProps {
|
|
5
5
|
nodes: SidebarNavNode[];
|
|
6
|
+
navigation?: SidebarNavigationContext;
|
|
6
7
|
currentSlug?: string;
|
|
7
8
|
rootMenuItems?: SidebarRootMenuItem[];
|
|
8
9
|
backToMenuLabel?: string;
|
|
@@ -13,19 +14,15 @@ export interface SidebarToggleProps {
|
|
|
13
14
|
themeLabels?: ThemeToggleLabels;
|
|
14
15
|
themeRespectSystem?: boolean;
|
|
15
16
|
/**
|
|
16
|
-
* Forwarded verbatim to the hosted `<SidebarTree>`.
|
|
17
|
-
*
|
|
18
|
-
* its
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* the blob rather than enumerating prop names (#4075). The patterns cannot
|
|
22
|
-
* actually differ across such a swap (the persist key is `header-${lang}`,
|
|
23
|
-
* so a locale change is never a persisted swap); what matters is that they
|
|
24
|
-
* are not LOST from the lifted island.
|
|
17
|
+
* Forwarded verbatim to the hosted `<SidebarTree>`. The same-locale header
|
|
18
|
+
* may persist across a soft navigation; zfb 3.1 keeps this island live when
|
|
19
|
+
* its effective props are unchanged and recreates it from incoming props
|
|
20
|
+
* when page data changes. The locale-keyed header persistence key prevents
|
|
21
|
+
* locale-specific props from crossing locales.
|
|
25
22
|
*/
|
|
26
23
|
dateFormats?: ResolvedDateFormats;
|
|
27
24
|
}
|
|
28
|
-
export declare function SidebarToggle({ nodes, currentSlug, rootMenuItems, backToMenuLabel, locale, localeLinks, themeDefaultMode, themeLabels, themeRespectSystem, dateFormats, }: SidebarToggleProps): import("
|
|
25
|
+
export declare function SidebarToggle({ nodes, navigation, currentSlug, rootMenuItems, backToMenuLabel, locale, localeLinks, themeDefaultMode, themeLabels, themeRespectSystem, dateFormats, }: SidebarToggleProps): import("@takazudo/zfb").Description;
|
|
29
26
|
export declare namespace SidebarToggle {
|
|
30
27
|
var displayName: string;
|
|
31
28
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { Fragment, jsx, jsxs } from "
|
|
3
|
-
import {
|
|
2
|
+
import { Fragment, jsx, jsxs } from "@takazudo/zfb/zudo-react/jsx-runtime";
|
|
3
|
+
import { computed, getScope, signal } from "@takazudo/zfb/zudo-react";
|
|
4
4
|
import { AFTER_NAVIGATE_EVENT, ensureNestedIslandPropsRefresh } from "../transitions/index.js";
|
|
5
5
|
import { SidebarTree } from "../sidebar-tree-island/index.js";
|
|
6
6
|
ensureNestedIslandPropsRefresh();
|
|
@@ -8,6 +8,7 @@ const cx = (...classes) => classes.filter(Boolean).join(" ");
|
|
|
8
8
|
const HIDDEN_ICON_STYLE = "display:none";
|
|
9
9
|
function SidebarToggle({
|
|
10
10
|
nodes,
|
|
11
|
+
navigation,
|
|
11
12
|
currentSlug,
|
|
12
13
|
rootMenuItems,
|
|
13
14
|
backToMenuLabel,
|
|
@@ -18,78 +19,93 @@ function SidebarToggle({
|
|
|
18
19
|
themeRespectSystem,
|
|
19
20
|
dateFormats
|
|
20
21
|
}) {
|
|
21
|
-
const
|
|
22
|
-
const hamburgerRef =
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
22
|
+
const open = signal(false);
|
|
23
|
+
const hamburgerRef = { current: null };
|
|
24
|
+
const closeIconRef = { current: null };
|
|
25
|
+
const menuIconRef = { current: null };
|
|
26
|
+
const scope = getScope();
|
|
27
|
+
scope.effect(() => {
|
|
28
|
+
const isOpen = open.value;
|
|
29
|
+
document.body.style.overflow = isOpen ? "hidden" : "";
|
|
30
|
+
if (isOpen) closeIconRef.current?.style.removeProperty("display");
|
|
31
|
+
else closeIconRef.current?.style.setProperty("display", "none");
|
|
32
|
+
if (isOpen) menuIconRef.current?.style.setProperty("display", "none");
|
|
33
|
+
else menuIconRef.current?.style.removeProperty("display");
|
|
29
34
|
return () => {
|
|
30
35
|
document.body.style.overflow = "";
|
|
31
36
|
};
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
+
});
|
|
38
|
+
scope.onActivate(() => {
|
|
39
|
+
const handleSwap = () => {
|
|
40
|
+
open.value = false;
|
|
41
|
+
};
|
|
37
42
|
document.addEventListener(AFTER_NAVIGATE_EVENT, handleSwap);
|
|
38
43
|
return () => document.removeEventListener(AFTER_NAVIGATE_EVENT, handleSwap);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
if (!open) return;
|
|
44
|
+
});
|
|
45
|
+
scope.effect(() => {
|
|
46
|
+
if (!open.value) return;
|
|
42
47
|
function handleKeyDown(event) {
|
|
43
|
-
|
|
44
|
-
if (
|
|
45
|
-
if (
|
|
46
|
-
|
|
48
|
+
const keyboard = event;
|
|
49
|
+
if (keyboard.isComposing) return;
|
|
50
|
+
if (keyboard.defaultPrevented) return;
|
|
51
|
+
if (keyboard.key === "Escape") {
|
|
52
|
+
open.value = false;
|
|
47
53
|
hamburgerRef.current?.focus();
|
|
48
54
|
}
|
|
49
55
|
}
|
|
50
56
|
document.addEventListener("keydown", handleKeyDown);
|
|
51
57
|
return () => document.removeEventListener("keydown", handleKeyDown);
|
|
52
|
-
}
|
|
58
|
+
});
|
|
59
|
+
const isClosed = computed(() => !open.value);
|
|
60
|
+
const toggleClass = computed(
|
|
61
|
+
() => cx(
|
|
62
|
+
"lg:hidden shrink-0 px-hsp-sm py-vsp-xs -ml-hsp-sm mr-hsp-sm text-muted hover:text-fg",
|
|
63
|
+
open.value && "relative z-modal"
|
|
64
|
+
)
|
|
65
|
+
);
|
|
66
|
+
const backdropClass = computed(
|
|
67
|
+
() => cx(
|
|
68
|
+
"fixed inset-0 z-modal-backdrop bg-overlay/30 lg:hidden",
|
|
69
|
+
!open.value && "hidden"
|
|
70
|
+
)
|
|
71
|
+
);
|
|
72
|
+
const panelClass = computed(() => `
|
|
73
|
+
fixed top-[3.5rem] left-0 z-modal h-[calc(100vh_-_3.5rem)] w-[16rem] flex flex-col
|
|
74
|
+
border-r border-muted bg-bg transition-transform duration-200
|
|
75
|
+
lg:hidden
|
|
76
|
+
${open.value ? "translate-x-0" : "-translate-x-full"}
|
|
77
|
+
`);
|
|
53
78
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
54
79
|
/* @__PURE__ */ jsxs(
|
|
55
80
|
"button",
|
|
56
81
|
{
|
|
57
82
|
ref: hamburgerRef,
|
|
58
83
|
type: "button",
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
// the button's own centre and the X is unclickable
|
|
66
|
-
// (zudolab/zudo-doc#4369). `relative` is required: a bare `z-index`
|
|
67
|
-
// has no effect on a statically-positioned element.
|
|
68
|
-
// Conditioning on `open` is load-bearing, not cosmetic: SSR always
|
|
69
|
-
// renders `open=false`, so the closed-state markup stays
|
|
70
|
-
// byte-identical (hydration-stable, and the A2 no-stub parity hashes
|
|
71
|
-
// for this directory do not move).
|
|
72
|
-
open && "relative z-modal"
|
|
84
|
+
"on:click": () => {
|
|
85
|
+
open.value = !open.value;
|
|
86
|
+
},
|
|
87
|
+
class: toggleClass,
|
|
88
|
+
"aria-label": computed(
|
|
89
|
+
() => open.value ? "Close sidebar" : "Open sidebar"
|
|
73
90
|
),
|
|
74
|
-
"aria-
|
|
75
|
-
"aria-expanded": open,
|
|
91
|
+
"aria-expanded": computed(() => open.value ? "true" : "false"),
|
|
76
92
|
children: [
|
|
77
93
|
/* @__PURE__ */ jsx(
|
|
78
94
|
"svg",
|
|
79
95
|
{
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
style:
|
|
96
|
+
ref: closeIconRef,
|
|
97
|
+
class: "h-icon-lg w-icon-lg",
|
|
98
|
+
style: HIDDEN_ICON_STYLE,
|
|
83
99
|
"aria-hidden": "true",
|
|
84
100
|
fill: "none",
|
|
85
101
|
viewBox: "0 0 24 24",
|
|
86
102
|
stroke: "currentColor",
|
|
87
|
-
|
|
103
|
+
"stroke-width": 2,
|
|
88
104
|
children: /* @__PURE__ */ jsx(
|
|
89
105
|
"path",
|
|
90
106
|
{
|
|
91
|
-
|
|
92
|
-
|
|
107
|
+
"stroke-linecap": "round",
|
|
108
|
+
"stroke-linejoin": "round",
|
|
93
109
|
d: "M6 18L18 6M6 6l12 12"
|
|
94
110
|
}
|
|
95
111
|
)
|
|
@@ -98,19 +114,18 @@ function SidebarToggle({
|
|
|
98
114
|
/* @__PURE__ */ jsx(
|
|
99
115
|
"svg",
|
|
100
116
|
{
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
style: open ? HIDDEN_ICON_STYLE : void 0,
|
|
117
|
+
ref: menuIconRef,
|
|
118
|
+
class: "h-icon-lg w-icon-lg",
|
|
104
119
|
"aria-hidden": "true",
|
|
105
120
|
fill: "none",
|
|
106
121
|
viewBox: "0 0 24 24",
|
|
107
122
|
stroke: "currentColor",
|
|
108
|
-
|
|
123
|
+
"stroke-width": 2,
|
|
109
124
|
children: /* @__PURE__ */ jsx(
|
|
110
125
|
"path",
|
|
111
126
|
{
|
|
112
|
-
|
|
113
|
-
|
|
127
|
+
"stroke-linecap": "round",
|
|
128
|
+
"stroke-linejoin": "round",
|
|
114
129
|
d: "M4 6h16M4 12h16M4 18h16"
|
|
115
130
|
}
|
|
116
131
|
)
|
|
@@ -122,26 +137,24 @@ function SidebarToggle({
|
|
|
122
137
|
/* @__PURE__ */ jsx(
|
|
123
138
|
"div",
|
|
124
139
|
{
|
|
125
|
-
|
|
126
|
-
"aria-hidden":
|
|
127
|
-
|
|
140
|
+
class: backdropClass,
|
|
141
|
+
"aria-hidden": isClosed,
|
|
142
|
+
"on:click": () => {
|
|
143
|
+
open.value = false;
|
|
144
|
+
}
|
|
128
145
|
}
|
|
129
146
|
),
|
|
130
147
|
/* @__PURE__ */ jsx(
|
|
131
148
|
"aside",
|
|
132
149
|
{
|
|
133
|
-
inert:
|
|
150
|
+
inert: isClosed,
|
|
134
151
|
"data-zd-mobile-sidebar": true,
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
border-r border-muted bg-bg transition-transform duration-200
|
|
138
|
-
lg:hidden
|
|
139
|
-
${open ? "translate-x-0" : "-translate-x-full"}
|
|
140
|
-
`,
|
|
141
|
-
children: /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto", children: /* @__PURE__ */ jsx(
|
|
152
|
+
class: panelClass,
|
|
153
|
+
children: /* @__PURE__ */ jsx("div", { class: "flex-1 overflow-y-auto", children: /* @__PURE__ */ jsx(
|
|
142
154
|
SidebarTree,
|
|
143
155
|
{
|
|
144
156
|
nodes,
|
|
157
|
+
navigation,
|
|
145
158
|
currentSlug,
|
|
146
159
|
rootMenuItems,
|
|
147
160
|
backToMenuLabel,
|
|
@@ -57,6 +57,7 @@ function buildSidebarTree(entries, locale, options = {}) {
|
|
|
57
57
|
}
|
|
58
58
|
function toSidebarNodes(parent, locale, buildHref, categoryMeta, parentSortOrder) {
|
|
59
59
|
const nodes = [];
|
|
60
|
+
const sortPositions = /* @__PURE__ */ new WeakMap();
|
|
60
61
|
for (const child of parent.children.values()) {
|
|
61
62
|
const doc = child.doc;
|
|
62
63
|
const meta = categoryMeta?.get(child.fullPath);
|
|
@@ -86,6 +87,7 @@ function toSidebarNodes(parent, locale, buildHref, categoryMeta, parentSortOrder
|
|
|
86
87
|
...href !== void 0 ? { href } : {},
|
|
87
88
|
hasPage,
|
|
88
89
|
...hasSortOrder ? { sortOrder } : {},
|
|
90
|
+
...meta?.collapsed !== void 0 ? { collapsed: meta.collapsed } : {},
|
|
89
91
|
...doc?.data.category_shape !== void 0 ? { shape: doc.data.category_shape } : {},
|
|
90
92
|
...doc?.data.note_tray_dated !== void 0 ? { noteTrayDated: doc.data.note_tray_dated } : {},
|
|
91
93
|
...doc?.data.note_tray_sidebar !== void 0 ? { noteTraySidebar: doc.data.note_tray_sidebar } : {},
|
|
@@ -93,15 +95,12 @@ function toSidebarNodes(parent, locale, buildHref, categoryMeta, parentSortOrder
|
|
|
93
95
|
...doc?.data.updated !== void 0 ? { updated: doc.data.updated } : {},
|
|
94
96
|
children
|
|
95
97
|
});
|
|
96
|
-
|
|
97
|
-
value: position,
|
|
98
|
-
enumerable: false
|
|
99
|
-
});
|
|
98
|
+
sortPositions.set(nodes[nodes.length - 1], position);
|
|
100
99
|
}
|
|
101
100
|
const order = parentSortOrder ?? "asc";
|
|
102
101
|
nodes.sort((a, b) => {
|
|
103
|
-
const aPos = a
|
|
104
|
-
const bPos = b
|
|
102
|
+
const aPos = sortPositions.get(a);
|
|
103
|
+
const bPos = sortPositions.get(b);
|
|
105
104
|
const posCompare = aPos - bPos;
|
|
106
105
|
if (posCompare !== 0) return order === "desc" ? -posCompare : posCompare;
|
|
107
106
|
const slugCompare = a.id.localeCompare(b.id);
|
|
@@ -14,6 +14,7 @@ export interface SidebarFrontmatter {
|
|
|
14
14
|
description?: string;
|
|
15
15
|
sidebar_position?: number;
|
|
16
16
|
sidebar_label?: string;
|
|
17
|
+
sidebar_initial_expansion?: "collapsed" | "expanded";
|
|
17
18
|
draft?: boolean;
|
|
18
19
|
unlisted?: boolean;
|
|
19
20
|
hide_sidebar?: boolean;
|
|
@@ -64,6 +65,7 @@ export interface CollectionEntryLike<T extends SidebarFrontmatter = SidebarFront
|
|
|
64
65
|
* Metadata supplied by a directory's `_category_.json` file.
|
|
65
66
|
*/
|
|
66
67
|
export interface CategoryMeta {
|
|
68
|
+
collapsed?: boolean;
|
|
67
69
|
label?: string;
|
|
68
70
|
position?: number;
|
|
69
71
|
description?: string;
|