@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
|
@@ -1,290 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
DEFAULT_STORAGE_PREFIX,
|
|
4
|
-
DEFAULT_TOGGLE_EVENT,
|
|
5
|
-
EAGER_LOAD_GATE_KEY_SUFFIXES,
|
|
6
|
-
EAGER_LOAD_GATE_STATE_FAMILY,
|
|
7
|
-
resolveToggleEventName
|
|
8
|
-
} from "./design-token-panel-constants.js";
|
|
9
|
-
import {
|
|
10
|
-
BEFORE_NAVIGATE_EVENT,
|
|
11
|
-
AFTER_NAVIGATE_EVENT
|
|
12
|
-
} from "./transitions/page-events.js";
|
|
13
|
-
import {
|
|
14
|
-
DEFAULT_THEME_PACK_SLUG,
|
|
15
|
-
THEME_PACK_CHANGED_EVENT,
|
|
16
|
-
readThemePackFromDom
|
|
17
|
-
} from "./theme-pack-switcher/theme-pack-sync.js";
|
|
18
|
-
import { buildDesignTokenPanelConfig } from "./design-token-panel-config/index.js";
|
|
19
|
-
const COLOR_SCHEME_CHANGED_EVENT = "color-scheme-changed";
|
|
20
|
-
function openStateKey(instancePrefix) {
|
|
21
|
-
return `${instancePrefix}-open`;
|
|
22
|
-
}
|
|
23
|
-
function readOpenState(instancePrefix) {
|
|
24
|
-
try {
|
|
25
|
-
return localStorage.getItem(openStateKey(instancePrefix)) === "1";
|
|
26
|
-
} catch {
|
|
27
|
-
return false;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
function isEmptyEnvelope(raw) {
|
|
31
|
-
if (raw === null || raw === "") return true;
|
|
32
|
-
let parsed;
|
|
33
|
-
try {
|
|
34
|
-
parsed = JSON.parse(raw);
|
|
35
|
-
} catch {
|
|
36
|
-
return false;
|
|
37
|
-
}
|
|
38
|
-
if (parsed === null) return true;
|
|
39
|
-
if (Array.isArray(parsed)) return parsed.length === 0;
|
|
40
|
-
if (typeof parsed === "object") return Object.keys(parsed).length === 0;
|
|
41
|
-
return false;
|
|
42
|
-
}
|
|
43
|
-
function hasPersistedPanelState(config) {
|
|
44
|
-
const instancePrefix = config.storagePrefix ?? DEFAULT_STORAGE_PREFIX;
|
|
45
|
-
try {
|
|
46
|
-
for (const [suffix, gate] of Object.entries(EAGER_LOAD_GATE_KEY_SUFFIXES)) {
|
|
47
|
-
if (gate.requiredConfig !== null && config[gate.requiredConfig] === void 0) {
|
|
48
|
-
continue;
|
|
49
|
-
}
|
|
50
|
-
const value = localStorage.getItem(`${instancePrefix}${suffix}`);
|
|
51
|
-
if (suffix === ":autoload" && value !== "1") continue;
|
|
52
|
-
if (gate.acceptedValues.some((accepted) => accepted === value)) return true;
|
|
53
|
-
}
|
|
54
|
-
for (let i = 0; i < localStorage.length; i++) {
|
|
55
|
-
const key = localStorage.key(i);
|
|
56
|
-
if (key === null || !EAGER_LOAD_GATE_STATE_FAMILY.matchesKey(instancePrefix, key)) {
|
|
57
|
-
continue;
|
|
58
|
-
}
|
|
59
|
-
if (!isEmptyEnvelope(localStorage.getItem(key))) return true;
|
|
60
|
-
}
|
|
61
|
-
} catch {
|
|
62
|
-
}
|
|
63
|
-
return false;
|
|
64
|
-
}
|
|
65
|
-
function readMode() {
|
|
66
|
-
return document.documentElement.getAttribute("data-theme") === "dark" ? "dark" : "light";
|
|
67
|
-
}
|
|
68
|
-
function withPackScopedStoragePrefix(config, activePack) {
|
|
69
|
-
if (activePack === DEFAULT_THEME_PACK_SLUG) return config;
|
|
70
|
-
return { ...config, storagePrefix: `${config.storagePrefix}--${activePack}` };
|
|
71
|
-
}
|
|
72
|
-
function collectDeclaredTokenNames(config) {
|
|
73
|
-
const names = [];
|
|
74
|
-
for (const tab of config.tabs ?? []) {
|
|
75
|
-
for (const tier of tab.tiers ?? []) {
|
|
76
|
-
for (const item of tier.items ?? []) {
|
|
77
|
-
names.push(item.cssVar);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
const baseRoles = tab.colorExtras?.baseRoles;
|
|
81
|
-
if (baseRoles) {
|
|
82
|
-
for (const cssVar of Object.values(baseRoles)) {
|
|
83
|
-
if (typeof cssVar === "string" && cssVar.length > 0) {
|
|
84
|
-
names.push(cssVar);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
return names;
|
|
90
|
-
}
|
|
91
|
-
function clearAppliedTokenOverrides(config) {
|
|
92
|
-
const names = collectDeclaredTokenNames(config);
|
|
93
|
-
if (config.applySink) {
|
|
94
|
-
try {
|
|
95
|
-
config.applySink.clear(names);
|
|
96
|
-
} catch (err) {
|
|
97
|
-
console.warn(
|
|
98
|
-
"[zudo-doc] applySink.clear threw during theme-pack switch; outgoing overrides may linger.",
|
|
99
|
-
err
|
|
100
|
-
);
|
|
101
|
-
}
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
const style = document.documentElement.style;
|
|
105
|
-
for (const name of names) {
|
|
106
|
-
style.removeProperty(name);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
function bootstrapDesignTokenPanel(buildConfig) {
|
|
110
|
-
if (typeof window === "undefined" || typeof document === "undefined") {
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
let zdtpImport = null;
|
|
114
|
-
let activationInFlight = false;
|
|
115
|
-
let configurePhase = "pending";
|
|
116
|
-
let pendingToggles = 0;
|
|
117
|
-
function loadZdtp() {
|
|
118
|
-
if (zdtpImport === null) {
|
|
119
|
-
zdtpImport = import("@takazudo/zudo-doc/zdtp-loader").catch((err) => {
|
|
120
|
-
zdtpImport = null;
|
|
121
|
-
throw err;
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
return zdtpImport;
|
|
125
|
-
}
|
|
126
|
-
function configureAndWire(zdtp) {
|
|
127
|
-
const {
|
|
128
|
-
configurePanel,
|
|
129
|
-
reapplyPersistedOverrides,
|
|
130
|
-
setLifecycleAdapter,
|
|
131
|
-
showDesignTokenPanel
|
|
132
|
-
} = zdtp;
|
|
133
|
-
let currentConfig = withPackScopedStoragePrefix(
|
|
134
|
-
buildConfig(readMode()),
|
|
135
|
-
readThemePackFromDom()
|
|
136
|
-
);
|
|
137
|
-
let handle = configurePanel(currentConfig);
|
|
138
|
-
let pendingMode = readMode();
|
|
139
|
-
let timer = null;
|
|
140
|
-
window.addEventListener(COLOR_SCHEME_CHANGED_EVENT, () => {
|
|
141
|
-
pendingMode = readMode();
|
|
142
|
-
if (timer !== null) return;
|
|
143
|
-
timer = setTimeout(() => {
|
|
144
|
-
timer = null;
|
|
145
|
-
const mode = pendingMode;
|
|
146
|
-
const wasOpen = readOpenState(handle.instanceId);
|
|
147
|
-
handle.destroy();
|
|
148
|
-
currentConfig = withPackScopedStoragePrefix(
|
|
149
|
-
buildConfig(mode),
|
|
150
|
-
readThemePackFromDom()
|
|
151
|
-
);
|
|
152
|
-
handle = configurePanel(currentConfig);
|
|
153
|
-
if (wasOpen) showDesignTokenPanel();
|
|
154
|
-
}, 0);
|
|
155
|
-
});
|
|
156
|
-
let pendingPack = readThemePackFromDom();
|
|
157
|
-
let packTimer = null;
|
|
158
|
-
window.addEventListener(THEME_PACK_CHANGED_EVENT, () => {
|
|
159
|
-
pendingPack = readThemePackFromDom();
|
|
160
|
-
if (packTimer !== null) return;
|
|
161
|
-
packTimer = setTimeout(() => {
|
|
162
|
-
packTimer = null;
|
|
163
|
-
const pack = pendingPack;
|
|
164
|
-
const wasOpen = readOpenState(handle.instanceId);
|
|
165
|
-
const outgoingConfig = currentConfig;
|
|
166
|
-
handle.destroy();
|
|
167
|
-
clearAppliedTokenOverrides(outgoingConfig);
|
|
168
|
-
currentConfig = withPackScopedStoragePrefix(buildConfig(readMode()), pack);
|
|
169
|
-
handle = configurePanel(currentConfig);
|
|
170
|
-
reapplyPersistedOverrides();
|
|
171
|
-
if (wasOpen) showDesignTokenPanel();
|
|
172
|
-
}, 0);
|
|
173
|
-
});
|
|
174
|
-
reapplyPersistedOverrides();
|
|
175
|
-
const adapter = {
|
|
176
|
-
onBeforeSwap(cb) {
|
|
177
|
-
const handler = () => cb();
|
|
178
|
-
document.addEventListener(BEFORE_NAVIGATE_EVENT, handler);
|
|
179
|
-
return () => document.removeEventListener(BEFORE_NAVIGATE_EVENT, handler);
|
|
180
|
-
},
|
|
181
|
-
onPageLoad(cb) {
|
|
182
|
-
const handler = () => cb();
|
|
183
|
-
document.addEventListener(AFTER_NAVIGATE_EVENT, handler);
|
|
184
|
-
return () => document.removeEventListener(AFTER_NAVIGATE_EVENT, handler);
|
|
185
|
-
}
|
|
186
|
-
};
|
|
187
|
-
setLifecycleAdapter(adapter);
|
|
188
|
-
}
|
|
189
|
-
async function activate() {
|
|
190
|
-
if (activationInFlight || configurePhase !== "pending") return;
|
|
191
|
-
activationInFlight = true;
|
|
192
|
-
let zdtp;
|
|
193
|
-
try {
|
|
194
|
-
zdtp = await loadZdtp();
|
|
195
|
-
} catch (err) {
|
|
196
|
-
activationInFlight = false;
|
|
197
|
-
pendingToggles = 0;
|
|
198
|
-
console.error(
|
|
199
|
-
"[zudo-doc] design-token-panel: loading @takazudo/zdtp failed; the next toggle retries.",
|
|
200
|
-
err
|
|
201
|
-
);
|
|
202
|
-
return;
|
|
203
|
-
}
|
|
204
|
-
try {
|
|
205
|
-
configureAndWire(zdtp);
|
|
206
|
-
configurePhase = "configured";
|
|
207
|
-
} catch (err) {
|
|
208
|
-
configurePhase = "failed";
|
|
209
|
-
console.error(
|
|
210
|
-
"[zudo-doc] design-token-panel: configure failed; the panel is disabled until the next full page load.",
|
|
211
|
-
err
|
|
212
|
-
);
|
|
213
|
-
return;
|
|
214
|
-
} finally {
|
|
215
|
-
activationInFlight = false;
|
|
216
|
-
}
|
|
217
|
-
if (pendingToggles % 2 === 1) zdtp.showDesignTokenPanel();
|
|
218
|
-
pendingToggles = 0;
|
|
219
|
-
}
|
|
220
|
-
function readActiveConfig() {
|
|
221
|
-
return withPackScopedStoragePrefix(
|
|
222
|
-
buildConfig(readMode()),
|
|
223
|
-
readThemePackFromDom()
|
|
224
|
-
);
|
|
225
|
-
}
|
|
226
|
-
const onInterimToggle = () => {
|
|
227
|
-
if (configurePhase !== "pending") return;
|
|
228
|
-
pendingToggles += 1;
|
|
229
|
-
void activate();
|
|
230
|
-
};
|
|
231
|
-
const boundToggleChannels = /* @__PURE__ */ new Set();
|
|
232
|
-
let instanceToggleChannel = null;
|
|
233
|
-
function bindToggleChannel(name) {
|
|
234
|
-
if (boundToggleChannels.has(name)) return;
|
|
235
|
-
boundToggleChannels.add(name);
|
|
236
|
-
window.addEventListener(name, onInterimToggle);
|
|
237
|
-
}
|
|
238
|
-
function refreshInstanceToggleChannel(config) {
|
|
239
|
-
const resolved = resolveToggleEventName(config);
|
|
240
|
-
if (resolved === instanceToggleChannel) return;
|
|
241
|
-
if (instanceToggleChannel !== null && instanceToggleChannel !== DEFAULT_TOGGLE_EVENT) {
|
|
242
|
-
window.removeEventListener(instanceToggleChannel, onInterimToggle);
|
|
243
|
-
boundToggleChannels.delete(instanceToggleChannel);
|
|
244
|
-
}
|
|
245
|
-
instanceToggleChannel = resolved;
|
|
246
|
-
bindToggleChannel(resolved);
|
|
247
|
-
}
|
|
248
|
-
const bootConfig = readActiveConfig();
|
|
249
|
-
bindToggleChannel(DEFAULT_TOGGLE_EVENT);
|
|
250
|
-
refreshInstanceToggleChannel(bootConfig);
|
|
251
|
-
window.__zdtpReadyClicks?.();
|
|
252
|
-
if (hasPersistedPanelState(bootConfig)) void activate();
|
|
253
|
-
window.addEventListener(THEME_PACK_CHANGED_EVENT, () => {
|
|
254
|
-
if (configurePhase !== "pending") return;
|
|
255
|
-
const activeConfig = readActiveConfig();
|
|
256
|
-
refreshInstanceToggleChannel(activeConfig);
|
|
257
|
-
if (hasPersistedPanelState(activeConfig)) void activate();
|
|
258
|
-
});
|
|
259
|
-
window.addEventListener(COLOR_SCHEME_CHANGED_EVENT, () => {
|
|
260
|
-
if (configurePhase !== "pending") return;
|
|
261
|
-
refreshInstanceToggleChannel(readActiveConfig());
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
let bootstrapWinner = null;
|
|
265
|
-
let warnedLostRace = false;
|
|
266
|
-
function warnLostBootstrapRace(winnerOrigin, loserOrigin) {
|
|
267
|
-
if (typeof window === "undefined" || warnedLostRace) return;
|
|
268
|
-
warnedLostRace = true;
|
|
269
|
-
const detail = loserOrigin === "configured" && winnerOrigin === "default" ? "The package-default island configured the panel earlier in this browser session, so `designTokenPanelConfigModule` did not apply on this page. This happens when the session first hard-loaded a page rendered by a self-contained `pages/` stub, which reaches the package default instead of the package-injected route. Thread your builder through `chromeBindings.DesignTokenPanelBootstrap` to make it apply on every page regardless of entry point." : `The ${winnerOrigin} island configured the panel first; this ${loserOrigin} island's builder was ignored. zdtp is configured once per session \u2014 mount exactly one design-token-panel bootstrap, e.g. via \`chromeBindings.DesignTokenPanelBootstrap\`.`;
|
|
270
|
-
console.warn(`[zudo-doc] design-token panel already configured. ${detail}`);
|
|
271
|
-
}
|
|
272
|
-
function runDesignTokenPanelBootstrapOnce(build, origin = "default") {
|
|
273
|
-
if (bootstrapWinner) {
|
|
274
|
-
if (bootstrapWinner.build !== build) warnLostBootstrapRace(bootstrapWinner.origin, origin);
|
|
275
|
-
return;
|
|
276
|
-
}
|
|
277
|
-
bootstrapWinner = { origin, build };
|
|
278
|
-
bootstrapDesignTokenPanel(build);
|
|
279
|
-
}
|
|
280
|
-
function DesignTokenPanelBootstrap() {
|
|
281
|
-
runDesignTokenPanelBootstrapOnce(buildDesignTokenPanelConfig, "default");
|
|
282
|
-
return null;
|
|
283
|
-
}
|
|
284
|
-
DesignTokenPanelBootstrap.displayName = "DesignTokenPanelBootstrap";
|
|
1
|
+
export * from "./design-token-panel-bootstrap-controller.js";
|
|
2
|
+
import { DesignTokenPanelBootstrap } from "./design-token-panel-bootstrap-island.js";
|
|
285
3
|
export {
|
|
286
|
-
DesignTokenPanelBootstrap
|
|
287
|
-
bootstrapDesignTokenPanel,
|
|
288
|
-
runDesignTokenPanelBootstrapOnce,
|
|
289
|
-
withPackScopedStoragePrefix
|
|
4
|
+
DesignTokenPanelBootstrap
|
|
290
5
|
};
|
|
@@ -1,7 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export declare function setDataAttribute(isVisible: boolean): void;
|
|
4
|
-
export declare function DesktopSidebarToggle(): import("preact").JSX.Element;
|
|
5
|
-
export declare namespace DesktopSidebarToggle {
|
|
6
|
-
var displayName: string;
|
|
7
|
-
}
|
|
1
|
+
export { DesktopSidebarToggle } from "./island.js";
|
|
2
|
+
export { SIDEBAR_STORAGE_KEY, readState, setDataAttribute } from "./storage.js";
|
|
@@ -1,61 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import { useState, useEffect, useRef } from "preact/hooks";
|
|
4
|
-
import { ChevronRight, ChevronLeft } from "../icons/index.js";
|
|
5
|
-
import { AFTER_NAVIGATE_EVENT } from "../transitions/index.js";
|
|
6
|
-
const SIDEBAR_STORAGE_KEY = "zudo-doc-sidebar-visible";
|
|
7
|
-
function readState() {
|
|
8
|
-
if (typeof window === "undefined") return true;
|
|
9
|
-
try {
|
|
10
|
-
return localStorage.getItem(SIDEBAR_STORAGE_KEY) !== "false";
|
|
11
|
-
} catch {
|
|
12
|
-
return true;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
function setDataAttribute(isVisible) {
|
|
16
|
-
if (isVisible) {
|
|
17
|
-
document.documentElement.removeAttribute("data-sidebar-hidden");
|
|
18
|
-
} else {
|
|
19
|
-
document.documentElement.setAttribute("data-sidebar-hidden", "");
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
function DesktopSidebarToggle() {
|
|
23
|
-
const [visible, setVisible] = useState(true);
|
|
24
|
-
const hydrated = useRef(false);
|
|
25
|
-
useEffect(() => {
|
|
26
|
-
if (!hydrated.current) return;
|
|
27
|
-
setDataAttribute(visible);
|
|
28
|
-
try {
|
|
29
|
-
localStorage.setItem(SIDEBAR_STORAGE_KEY, String(visible));
|
|
30
|
-
} catch {
|
|
31
|
-
}
|
|
32
|
-
}, [visible]);
|
|
33
|
-
useEffect(() => {
|
|
34
|
-
hydrated.current = true;
|
|
35
|
-
const actual = readState();
|
|
36
|
-
if (actual !== visible) {
|
|
37
|
-
setVisible(actual);
|
|
38
|
-
}
|
|
39
|
-
}, []);
|
|
40
|
-
useEffect(() => {
|
|
41
|
-
const handler = () => setDataAttribute(readState());
|
|
42
|
-
document.addEventListener(AFTER_NAVIGATE_EVENT, handler);
|
|
43
|
-
return () => document.removeEventListener(AFTER_NAVIGATE_EVENT, handler);
|
|
44
|
-
}, []);
|
|
45
|
-
return /* @__PURE__ */ jsx(
|
|
46
|
-
"button",
|
|
47
|
-
{
|
|
48
|
-
type: "button",
|
|
49
|
-
onClick: () => setVisible((v) => !v),
|
|
50
|
-
className: "zd-desktop-sidebar-toggle hidden lg:flex fixed bottom-vsp-xl z-sidebar items-center justify-center w-[1.5rem] h-[3rem] bg-surface border border-muted border-l-0 rounded-r-DEFAULT text-muted cursor-pointer transition-[left,color] duration-200 ease-in-out hover:text-fg",
|
|
51
|
-
"aria-label": visible ? "Hide sidebar" : "Show sidebar",
|
|
52
|
-
"aria-pressed": visible,
|
|
53
|
-
"data-zfb-transition-persist": "desktop-sidebar-toggle",
|
|
54
|
-
children: visible ? /* @__PURE__ */ jsx(ChevronLeft, { className: "h-icon-sm w-icon-sm" }) : /* @__PURE__ */ jsx(ChevronRight, { className: "h-icon-sm w-icon-sm" })
|
|
55
|
-
}
|
|
56
|
-
);
|
|
57
|
-
}
|
|
58
|
-
DesktopSidebarToggle.displayName = "DesktopSidebarToggle";
|
|
1
|
+
import { DesktopSidebarToggle } from "./island.js";
|
|
2
|
+
import { SIDEBAR_STORAGE_KEY, readState, setDataAttribute } from "./storage.js";
|
|
59
3
|
export {
|
|
60
4
|
DesktopSidebarToggle,
|
|
61
5
|
SIDEBAR_STORAGE_KEY,
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "@takazudo/zfb/zudo-react/jsx-runtime";
|
|
3
|
+
import { computed, getScope, Show, signal } from "@takazudo/zfb/zudo-react";
|
|
4
|
+
import { ChevronLeft, ChevronRight } from "../icons/index.js";
|
|
5
|
+
import { AFTER_NAVIGATE_EVENT } from "../transitions/index.js";
|
|
6
|
+
import { readState, setDataAttribute, writeState } from "./storage.js";
|
|
7
|
+
function DesktopSidebarToggle() {
|
|
8
|
+
const visible = signal(true);
|
|
9
|
+
const scope = getScope();
|
|
10
|
+
scope.onActivate(() => {
|
|
11
|
+
const initialVisibility = readState();
|
|
12
|
+
visible.value = initialVisibility;
|
|
13
|
+
setDataAttribute(initialVisibility);
|
|
14
|
+
const restoreDocumentAttribute = () => setDataAttribute(readState());
|
|
15
|
+
document.addEventListener(AFTER_NAVIGATE_EVENT, restoreDocumentAttribute);
|
|
16
|
+
return () => document.removeEventListener(AFTER_NAVIGATE_EVENT, restoreDocumentAttribute);
|
|
17
|
+
});
|
|
18
|
+
const toggle = () => {
|
|
19
|
+
const next = !visible.value;
|
|
20
|
+
visible.value = next;
|
|
21
|
+
writeState(next);
|
|
22
|
+
setDataAttribute(next);
|
|
23
|
+
};
|
|
24
|
+
return /* @__PURE__ */ jsxs(
|
|
25
|
+
"button",
|
|
26
|
+
{
|
|
27
|
+
type: "button",
|
|
28
|
+
"on:click": toggle,
|
|
29
|
+
class: "zd-desktop-sidebar-toggle hidden lg:flex fixed bottom-vsp-xl z-sidebar items-center justify-center w-[1.5rem] h-[3rem] bg-surface border border-muted border-l-0 text-muted cursor-pointer transition-[left,color] duration-200 hover:text-fg",
|
|
30
|
+
style: "border-radius:0 var(--radius-DEFAULT) var(--radius-DEFAULT) 0",
|
|
31
|
+
"aria-label": computed(() => visible.value ? "Hide sidebar" : "Show sidebar"),
|
|
32
|
+
"aria-pressed": visible,
|
|
33
|
+
children: [
|
|
34
|
+
/* @__PURE__ */ jsx(Show, { when: computed(() => visible.value), children: () => /* @__PURE__ */ jsx(ChevronLeft, { class: "h-icon-sm w-icon-sm" }) }),
|
|
35
|
+
/* @__PURE__ */ jsx(Show, { when: computed(() => !visible.value), children: () => /* @__PURE__ */ jsx(ChevronRight, { class: "h-icon-sm w-icon-sm" }) })
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
DesktopSidebarToggle.displayName = "DesktopSidebarToggle";
|
|
41
|
+
export {
|
|
42
|
+
DesktopSidebarToggle
|
|
43
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const SIDEBAR_STORAGE_KEY = "zudo-doc-sidebar-visible";
|
|
2
|
+
function readState() {
|
|
3
|
+
if (typeof window === "undefined") return true;
|
|
4
|
+
try {
|
|
5
|
+
return localStorage.getItem(SIDEBAR_STORAGE_KEY) !== "false";
|
|
6
|
+
} catch {
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
function writeState(isVisible) {
|
|
11
|
+
try {
|
|
12
|
+
localStorage.setItem(SIDEBAR_STORAGE_KEY, String(isVisible));
|
|
13
|
+
} catch {
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function setDataAttribute(isVisible) {
|
|
17
|
+
if (typeof document === "undefined") return;
|
|
18
|
+
if (isVisible) {
|
|
19
|
+
document.documentElement.removeAttribute("data-sidebar-hidden");
|
|
20
|
+
} else {
|
|
21
|
+
document.documentElement.setAttribute("data-sidebar-hidden", "");
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export {
|
|
25
|
+
SIDEBAR_STORAGE_KEY,
|
|
26
|
+
readState,
|
|
27
|
+
setDataAttribute,
|
|
28
|
+
writeState
|
|
29
|
+
};
|
|
@@ -1,7 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export declare function setTocDataAttribute(isVisible: boolean): void;
|
|
4
|
-
export declare function DesktopTocToggle(): import("preact").JSX.Element;
|
|
5
|
-
export declare namespace DesktopTocToggle {
|
|
6
|
-
var displayName: string;
|
|
7
|
-
}
|
|
1
|
+
export { DesktopTocToggle } from "./island.js";
|
|
2
|
+
export { TOC_STORAGE_KEY, readTocState, setTocDataAttribute } from "./storage.js";
|
|
@@ -1,61 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import { useState, useEffect, useRef } from "preact/hooks";
|
|
4
|
-
import { ChevronRight, ChevronLeft } from "../icons/index.js";
|
|
5
|
-
import { AFTER_NAVIGATE_EVENT } from "../transitions/index.js";
|
|
6
|
-
const TOC_STORAGE_KEY = "zudo-doc-toc-visible";
|
|
7
|
-
function readTocState() {
|
|
8
|
-
if (typeof window === "undefined") return true;
|
|
9
|
-
try {
|
|
10
|
-
return localStorage.getItem(TOC_STORAGE_KEY) !== "false";
|
|
11
|
-
} catch {
|
|
12
|
-
return true;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
function setTocDataAttribute(isVisible) {
|
|
16
|
-
if (isVisible) {
|
|
17
|
-
document.documentElement.removeAttribute("data-toc-hidden");
|
|
18
|
-
} else {
|
|
19
|
-
document.documentElement.setAttribute("data-toc-hidden", "");
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
function DesktopTocToggle() {
|
|
23
|
-
const [visible, setVisible] = useState(true);
|
|
24
|
-
const hydrated = useRef(false);
|
|
25
|
-
useEffect(() => {
|
|
26
|
-
if (!hydrated.current) return;
|
|
27
|
-
setTocDataAttribute(visible);
|
|
28
|
-
try {
|
|
29
|
-
localStorage.setItem(TOC_STORAGE_KEY, String(visible));
|
|
30
|
-
} catch {
|
|
31
|
-
}
|
|
32
|
-
}, [visible]);
|
|
33
|
-
useEffect(() => {
|
|
34
|
-
hydrated.current = true;
|
|
35
|
-
const actual = readTocState();
|
|
36
|
-
if (actual !== visible) {
|
|
37
|
-
setVisible(actual);
|
|
38
|
-
}
|
|
39
|
-
}, []);
|
|
40
|
-
useEffect(() => {
|
|
41
|
-
const handler = () => setTocDataAttribute(readTocState());
|
|
42
|
-
document.addEventListener(AFTER_NAVIGATE_EVENT, handler);
|
|
43
|
-
return () => document.removeEventListener(AFTER_NAVIGATE_EVENT, handler);
|
|
44
|
-
}, []);
|
|
45
|
-
return /* @__PURE__ */ jsx(
|
|
46
|
-
"button",
|
|
47
|
-
{
|
|
48
|
-
type: "button",
|
|
49
|
-
onClick: () => setVisible((v) => !v),
|
|
50
|
-
className: "zd-desktop-toc-toggle hidden xl:flex fixed bottom-vsp-xl z-sidebar items-center justify-center w-[1.5rem] h-[3rem] bg-surface border border-muted border-r-0 rounded-l-DEFAULT text-muted cursor-pointer transition-[right,color] duration-200 ease-in-out hover:text-fg",
|
|
51
|
-
"aria-label": visible ? "Hide table of contents" : "Show table of contents",
|
|
52
|
-
"aria-pressed": visible,
|
|
53
|
-
"data-zfb-transition-persist": "desktop-toc-toggle",
|
|
54
|
-
children: visible ? /* @__PURE__ */ jsx(ChevronRight, { className: "h-icon-sm w-icon-sm" }) : /* @__PURE__ */ jsx(ChevronLeft, { className: "h-icon-sm w-icon-sm" })
|
|
55
|
-
}
|
|
56
|
-
);
|
|
57
|
-
}
|
|
58
|
-
DesktopTocToggle.displayName = "DesktopTocToggle";
|
|
1
|
+
import { DesktopTocToggle } from "./island.js";
|
|
2
|
+
import { TOC_STORAGE_KEY, readTocState, setTocDataAttribute } from "./storage.js";
|
|
59
3
|
export {
|
|
60
4
|
DesktopTocToggle,
|
|
61
5
|
TOC_STORAGE_KEY,
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "@takazudo/zfb/zudo-react/jsx-runtime";
|
|
3
|
+
import { computed, getScope, Show, signal } from "@takazudo/zfb/zudo-react";
|
|
4
|
+
import { ChevronLeft, ChevronRight } from "../icons/index.js";
|
|
5
|
+
import { AFTER_NAVIGATE_EVENT } from "../transitions/index.js";
|
|
6
|
+
import { readTocState, setTocDataAttribute, writeTocState } from "./storage.js";
|
|
7
|
+
function DesktopTocToggle() {
|
|
8
|
+
const visible = signal(true);
|
|
9
|
+
const scope = getScope();
|
|
10
|
+
scope.onActivate(() => {
|
|
11
|
+
const initialVisibility = readTocState();
|
|
12
|
+
visible.value = initialVisibility;
|
|
13
|
+
setTocDataAttribute(initialVisibility);
|
|
14
|
+
const restoreDocumentAttribute = () => setTocDataAttribute(readTocState());
|
|
15
|
+
document.addEventListener(AFTER_NAVIGATE_EVENT, restoreDocumentAttribute);
|
|
16
|
+
return () => document.removeEventListener(AFTER_NAVIGATE_EVENT, restoreDocumentAttribute);
|
|
17
|
+
});
|
|
18
|
+
const toggle = () => {
|
|
19
|
+
const next = !visible.value;
|
|
20
|
+
visible.value = next;
|
|
21
|
+
writeTocState(next);
|
|
22
|
+
setTocDataAttribute(next);
|
|
23
|
+
};
|
|
24
|
+
return /* @__PURE__ */ jsxs(
|
|
25
|
+
"button",
|
|
26
|
+
{
|
|
27
|
+
type: "button",
|
|
28
|
+
"on:click": toggle,
|
|
29
|
+
class: "zd-desktop-toc-toggle hidden xl:flex fixed bottom-vsp-xl z-sidebar items-center justify-center w-[1.5rem] h-[3rem] bg-surface border border-muted border-r-0 text-muted cursor-pointer transition-[right,color] duration-200 hover:text-fg",
|
|
30
|
+
style: "border-radius:var(--radius-DEFAULT) 0 0 var(--radius-DEFAULT)",
|
|
31
|
+
"aria-label": computed(() => visible.value ? "Hide table of contents" : "Show table of contents"),
|
|
32
|
+
"aria-pressed": visible,
|
|
33
|
+
children: [
|
|
34
|
+
/* @__PURE__ */ jsx(Show, { when: computed(() => visible.value), children: () => /* @__PURE__ */ jsx(ChevronRight, { class: "h-icon-sm w-icon-sm" }) }),
|
|
35
|
+
/* @__PURE__ */ jsx(Show, { when: computed(() => !visible.value), children: () => /* @__PURE__ */ jsx(ChevronLeft, { class: "h-icon-sm w-icon-sm" }) })
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
DesktopTocToggle.displayName = "DesktopTocToggle";
|
|
41
|
+
export {
|
|
42
|
+
DesktopTocToggle
|
|
43
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const TOC_STORAGE_KEY = "zudo-doc-toc-visible";
|
|
2
|
+
function readTocState() {
|
|
3
|
+
if (typeof window === "undefined") return true;
|
|
4
|
+
try {
|
|
5
|
+
return localStorage.getItem(TOC_STORAGE_KEY) !== "false";
|
|
6
|
+
} catch {
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
function writeTocState(isVisible) {
|
|
11
|
+
try {
|
|
12
|
+
localStorage.setItem(TOC_STORAGE_KEY, String(isVisible));
|
|
13
|
+
} catch {
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function setTocDataAttribute(isVisible) {
|
|
17
|
+
if (typeof document === "undefined") return;
|
|
18
|
+
if (isVisible) {
|
|
19
|
+
document.documentElement.removeAttribute("data-toc-hidden");
|
|
20
|
+
} else {
|
|
21
|
+
document.documentElement.setAttribute("data-toc-hidden", "");
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export {
|
|
25
|
+
TOC_STORAGE_KEY,
|
|
26
|
+
readTocState,
|
|
27
|
+
setTocDataAttribute,
|
|
28
|
+
writeTocState
|
|
29
|
+
};
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
/** @jsxRuntime automatic */
|
|
2
|
-
|
|
3
|
-
import type { ComponentChildren, VNode } from "preact";
|
|
2
|
+
import type { Child } from "@takazudo/zfb/zudo-react";
|
|
4
3
|
export interface DetailsProps {
|
|
5
4
|
/**
|
|
6
5
|
* Summary / toggle label shown in the `<summary>` element.
|
|
@@ -9,7 +8,7 @@ export interface DetailsProps {
|
|
|
9
8
|
*/
|
|
10
9
|
title?: string;
|
|
11
10
|
/** Slot content rendered inside the collapsed body. */
|
|
12
|
-
children?:
|
|
11
|
+
children?: Child;
|
|
13
12
|
}
|
|
14
13
|
/**
|
|
15
14
|
* Collapsible `<details>` / `<summary>` block — JSX port of
|
|
@@ -19,4 +18,4 @@ export interface DetailsProps {
|
|
|
19
18
|
* The legacy component used Astro's `<slot />`; v2 accepts standard
|
|
20
19
|
* Preact `children`.
|
|
21
20
|
*/
|
|
22
|
-
export declare function Details({ title, children }: DetailsProps):
|
|
21
|
+
export declare function Details({ title, children }: DetailsProps): Child;
|
package/dist/details/details.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx, jsxs } from "
|
|
1
|
+
import { jsx, jsxs } from "@takazudo/zfb/zudo-react/jsx-runtime";
|
|
2
2
|
function Details({ title = "Details", children }) {
|
|
3
3
|
return /* @__PURE__ */ jsxs("details", { class: "my-vsp-md border border-muted rounded-lg overflow-hidden", children: [
|
|
4
4
|
/* @__PURE__ */ jsx("summary", { class: "cursor-pointer px-hsp-lg py-vsp-sm bg-surface font-medium text-fg select-none hover:text-accent", children: title }),
|
|
@@ -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 { ChromeContext } from "../factory-context/index.js";
|
|
5
4
|
import type { Settings } from "../settings.js";
|
|
6
5
|
/** Settings subset read by the DocBodyEnd factory. */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Fragment, jsx, jsxs } from "
|
|
1
|
+
import { Fragment, jsx, jsxs } from "@takazudo/zfb/zudo-react/jsx-runtime";
|
|
2
2
|
import { SidebarResizerInit } from "../sidebar-resizer/index.js";
|
|
3
3
|
import { deriveBodyEndIslands } from "../chrome/derive.js";
|
|
4
4
|
import { assertChromeContext } from "../chrome/assert-chrome-context.js";
|
|
@@ -1,9 +1,9 @@
|
|
|
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 { FactoryComponent } from "../factory-context/index.js";
|
|
5
4
|
export interface DesignTokenPanelIslandDeps {
|
|
6
5
|
designTokenPanel: boolean;
|
|
6
|
+
/** Server boundary with a fixed client target, not a raw client component. */
|
|
7
7
|
DesignTokenPanelBootstrap?: FactoryComponent;
|
|
8
8
|
}
|
|
9
9
|
/**
|