@takazudo/zudo-doc 5.28.2 → 6.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/README.md +49 -16
- package/bin/gen-z-index.mjs +18 -18
- package/dist/agent-docs/identity.d.ts +4 -0
- package/dist/agent-docs/identity.js +24 -0
- package/dist/agent-docs/index.d.ts +5 -0
- package/dist/agent-docs/index.js +5 -0
- package/dist/agent-docs/limits.d.ts +11 -0
- package/dist/agent-docs/limits.js +24 -0
- package/dist/agent-docs/search.d.ts +14 -0
- package/dist/agent-docs/search.js +82 -0
- package/dist/agent-docs/tokenize.d.ts +2 -0
- package/dist/agent-docs/tokenize.js +22 -0
- package/dist/agent-docs/types.d.ts +68 -0
- package/dist/agent-docs/types.js +0 -0
- package/dist/ai-chat-modal/index.d.ts +1 -4
- package/dist/ai-chat-modal/index.js +183 -123
- package/dist/asset-components/asset-card.d.ts +1 -2
- package/dist/asset-components/asset-card.js +12 -12
- package/dist/asset-components/asset-code.d.ts +1 -2
- package/dist/asset-components/asset-code.js +10 -10
- package/dist/asset-components/shared.d.ts +3 -4
- package/dist/asset-components/shared.js +4 -4
- package/dist/asset-index-page/body.d.ts +5 -6
- package/dist/asset-index-page/body.js +6 -6
- package/dist/asset-index-page/index.d.ts +1 -2
- package/dist/asset-index-page/index.js +1 -1
- package/dist/asset-page/body.d.ts +5 -9
- package/dist/asset-page/body.js +3 -3
- package/dist/asset-page/components.d.ts +16 -17
- package/dist/asset-page/components.js +10 -9
- package/dist/asset-page/index.d.ts +1 -2
- package/dist/asset-page/index.js +1 -1
- package/dist/auto-logo/index.d.ts +1 -2
- package/dist/auto-logo/index.js +2 -2
- package/dist/body-foot-util/body-foot-util-area.d.ts +3 -4
- package/dist/body-foot-util/body-foot-util-area.js +1 -2
- package/dist/body-foot-util/edit-link.d.ts +2 -3
- package/dist/body-foot-util/edit-link.js +1 -2
- package/dist/breadcrumb/breadcrumb.d.ts +6 -6
- package/dist/breadcrumb/breadcrumb.js +3 -4
- package/dist/catalog.js +1 -1
- package/dist/category-nav/index.d.ts +1 -2
- package/dist/category-nav/index.js +11 -5
- package/dist/category-tree-nav/index.d.ts +1 -2
- package/dist/category-tree-nav/index.js +3 -3
- package/dist/chrome/derive.d.ts +18 -27
- package/dist/chrome/derive.js +47 -29
- package/dist/chrome/index.d.ts +5 -5
- package/dist/chrome/index.js +1 -1
- package/dist/chrome/island-data.d.ts +4 -0
- package/dist/chrome/island-data.js +52 -0
- package/dist/chrome/primary-slots.d.ts +2 -3
- package/dist/chrome-bindings.d.ts +30 -22
- package/dist/code-group/index.d.ts +3 -4
- package/dist/code-group/index.js +3 -7
- package/dist/code-syntax/code-block-enhancer.d.ts +1 -2
- package/dist/code-syntax/code-block-enhancer.js +2 -2
- package/dist/code-syntax/mermaid-init.d.ts +1 -2
- package/dist/code-syntax/mermaid-init.js +5 -2
- package/dist/code-syntax/tabs-init-script.js +1 -1
- package/dist/code-syntax/tabs-init.d.ts +1 -2
- package/dist/code-syntax/tabs-init.js +2 -2
- package/dist/code-syntax/tabs.d.ts +6 -6
- package/dist/code-syntax/tabs.js +8 -8
- package/dist/compiled.css +2937 -2942
- package/dist/config/component-tokens.d.ts +1 -1
- package/dist/config/component-tokens.js +22 -0
- package/dist/config-assertions/index.d.ts +13 -0
- package/dist/config-assertions/index.js +14 -0
- package/dist/config.d.ts +36 -17
- package/dist/config.js +23 -95
- package/dist/content/content-blockquote.d.ts +2 -3
- package/dist/content/content-blockquote.js +3 -3
- package/dist/content/content-code.d.ts +3 -4
- package/dist/content/content-code.js +5 -5
- package/dist/content/content-link.d.ts +3 -4
- package/dist/content/content-link.js +10 -10
- package/dist/content/content-ol.d.ts +2 -3
- package/dist/content/content-ol.js +5 -4
- package/dist/content/content-paragraph.d.ts +2 -3
- package/dist/content/content-paragraph.js +1 -1
- package/dist/content/content-strong.d.ts +2 -3
- package/dist/content/content-strong.js +3 -3
- package/dist/content/content-table.d.ts +2 -3
- package/dist/content/content-table.js +4 -4
- package/dist/content/content-ul.d.ts +2 -3
- package/dist/content/content-ul.js +4 -4
- package/dist/content/heading-h2.d.ts +2 -3
- package/dist/content/heading-h2.js +4 -4
- package/dist/content/heading-h3.d.ts +2 -3
- package/dist/content/heading-h3.js +4 -4
- package/dist/content/heading-h4.d.ts +2 -3
- package/dist/content/heading-h4.js +4 -4
- package/dist/content-admonition/index.d.ts +3 -4
- package/dist/content-admonition/index.js +2 -2
- package/dist/content.css +35 -33
- package/dist/design-token-panel-bootstrap-controller.d.ts +178 -0
- package/dist/design-token-panel-bootstrap-controller.js +359 -0
- package/dist/design-token-panel-bootstrap-island.d.ts +5 -0
- package/dist/design-token-panel-bootstrap-island.js +19 -0
- package/dist/design-token-panel-bootstrap.d.ts +5 -195
- package/dist/design-token-panel-bootstrap.js +3 -288
- package/dist/desktop-sidebar-toggle-island/index.d.ts +2 -7
- package/dist/desktop-sidebar-toggle-island/index.js +2 -58
- package/dist/desktop-sidebar-toggle-island/island.d.ts +4 -0
- package/dist/desktop-sidebar-toggle-island/island.js +43 -0
- package/dist/desktop-sidebar-toggle-island/storage.d.ts +4 -0
- package/dist/desktop-sidebar-toggle-island/storage.js +29 -0
- package/dist/desktop-toc-toggle-island/index.d.ts +2 -7
- package/dist/desktop-toc-toggle-island/index.js +2 -58
- package/dist/desktop-toc-toggle-island/island.d.ts +4 -0
- package/dist/desktop-toc-toggle-island/island.js +43 -0
- package/dist/desktop-toc-toggle-island/storage.d.ts +4 -0
- package/dist/desktop-toc-toggle-island/storage.js +29 -0
- package/dist/details/details.d.ts +3 -4
- package/dist/details/details.js +1 -1
- package/dist/doc-body-end/index.d.ts +1 -2
- package/dist/doc-body-end/index.js +1 -1
- package/dist/doc-body-end-islands/design-token-panel-island.d.ts +2 -2
- package/dist/doc-body-end-islands/design-token-panel-island.js +3 -7
- package/dist/doc-body-end-islands/index.d.ts +4 -21
- package/dist/doc-body-end-islands/index.js +5 -3
- package/dist/doc-body-end-islands/theme-pack-switcher-island.d.ts +3 -13
- package/dist/doc-body-end-islands/theme-pack-switcher-island.js +11 -13
- package/dist/doc-content-header/index.d.ts +1 -2
- package/dist/doc-content-header/index.js +1 -1
- package/dist/doc-history/index.d.ts +1 -1
- package/dist/doc-history/index.js +166 -141
- package/dist/doc-history-area/index.d.ts +6 -4
- package/dist/doc-history-area/index.js +17 -16
- package/dist/doc-metainfo-area/index.d.ts +2 -3
- package/dist/doc-metainfo-area/index.js +1 -1
- package/dist/doc-page-renderer/index.d.ts +13 -7
- package/dist/doc-page-renderer/index.js +10 -1
- package/dist/doc-page-shell/index.d.ts +20 -7
- package/dist/doc-page-shell/index.js +17 -6
- package/dist/doc-pager/index.d.ts +1 -2
- package/dist/doc-pager/index.js +3 -3
- package/dist/doc-tags-area/index.d.ts +2 -3
- package/dist/doc-tags-area/index.js +1 -1
- package/dist/doclayout/doc-layout-with-defaults.d.ts +9 -9
- package/dist/doclayout/doc-layout-with-defaults.js +5 -15
- package/dist/doclayout/doc-layout.d.ts +26 -27
- package/dist/doclayout/doc-layout.js +23 -14
- package/dist/docs-schema/index.d.ts +4 -0
- package/dist/docs-schema/index.js +1 -0
- package/dist/extract-headings/index.js +43 -12
- package/dist/factory-context/index.d.ts +22 -19
- package/dist/features.css +75 -8
- package/dist/find-in-page/find-bar.d.ts +4 -2
- package/dist/find-in-page/find-bar.js +58 -69
- package/dist/find-in-page/index.d.ts +2 -8
- package/dist/find-in-page/index.js +33 -30
- package/dist/footer/footer.d.ts +3 -4
- package/dist/footer/footer.js +3 -3
- package/dist/footer-with-defaults/index.d.ts +2 -3
- package/dist/footer-with-defaults/index.js +1 -1
- package/dist/frontmatter-preview-defaults/index.js +1 -0
- package/dist/head/doc-head.d.ts +1 -1
- package/dist/head/doc-head.js +24 -32
- package/dist/head/og-tags.d.ts +1 -1
- package/dist/head/og-tags.js +8 -7
- package/dist/head/twitter-card.d.ts +1 -1
- package/dist/head/twitter-card.js +1 -1
- package/dist/head-with-defaults/index.d.ts +7 -2
- package/dist/head-with-defaults/index.js +46 -32
- package/dist/header/header.d.ts +8 -8
- package/dist/header/header.js +9 -11
- package/dist/header/types.d.ts +7 -7
- package/dist/header-with-defaults/index.d.ts +3 -4
- package/dist/header-with-defaults/index.js +27 -14
- package/dist/home-intro/index.d.ts +2 -5
- package/dist/home-intro/index.js +7 -5
- package/dist/home-intro/prepare.js +4 -3
- package/dist/home-page/index.d.ts +3 -3
- package/dist/home-page/index.js +19 -17
- package/dist/html-preview-wrapper/highlighted-code.d.ts +3 -4
- package/dist/html-preview-wrapper/highlighted-code.js +19 -17
- package/dist/html-preview-wrapper/html-preview-wrapper.d.ts +4 -25
- package/dist/html-preview-wrapper/html-preview-wrapper.js +2 -87
- package/dist/html-preview-wrapper/html-preview.d.ts +3 -10
- package/dist/html-preview-wrapper/html-preview.js +13 -37
- package/dist/html-preview-wrapper/index.d.ts +2 -1
- package/dist/html-preview-wrapper/index.js +1 -1
- package/dist/html-preview-wrapper/preview-base.d.ts +3 -5
- package/dist/html-preview-wrapper/preview-base.js +56 -59
- package/dist/html-preview-wrapper/wrapper.d.ts +20 -0
- package/dist/html-preview-wrapper/wrapper.js +37 -0
- package/dist/hydration-pending.d.ts +3 -5
- package/dist/hydration-pending.js +7 -5
- package/dist/i18n-version/language-switcher.d.ts +5 -32
- package/dist/i18n-version/language-switcher.js +5 -106
- package/dist/i18n-version/switcher-generated-scripts.d.ts +2 -0
- package/dist/i18n-version/switcher-generated-scripts.js +107 -0
- package/dist/i18n-version/switcher-url-state.d.ts +76 -0
- package/dist/i18n-version/switcher-url-state.js +103 -0
- package/dist/i18n-version/version-banner.d.ts +2 -3
- package/dist/i18n-version/version-banner.js +1 -1
- package/dist/i18n-version/version-switcher.d.ts +5 -50
- package/dist/i18n-version/version-switcher.js +5 -157
- package/dist/icons/index.d.ts +18 -19
- package/dist/icons/index.js +17 -33
- package/dist/image-enlarge/index.d.ts +1 -10
- package/dist/image-enlarge/index.js +80 -55
- package/dist/image-enlarge/public.d.ts +2 -0
- package/dist/image-enlarge/public.js +6 -0
- package/dist/image-enlarge/ssr-fallback.d.ts +2 -0
- package/dist/image-enlarge/ssr-fallback.js +8 -0
- package/dist/index.d.ts +11 -4
- package/dist/inline-version-switcher/index.d.ts +1 -2
- package/dist/inline-version-switcher/index.js +1 -1
- package/dist/island-types/index.d.ts +2 -2
- package/dist/island-types/index.js +1 -5
- package/dist/math-block/index.d.ts +4 -7
- package/dist/math-block/index.js +5 -5
- package/dist/mcp/handler.d.ts +8 -0
- package/dist/mcp/handler.js +129 -0
- package/dist/mcp/index.d.ts +4 -0
- package/dist/mcp/index.js +7 -0
- package/dist/mcp/loader.d.ts +19 -0
- package/dist/mcp/loader.js +202 -0
- package/dist/mdx-components/index.js +40 -108
- package/dist/mermaid-enlarge/index.d.ts +1 -8
- package/dist/mermaid-enlarge/index.js +174 -158
- package/dist/mermaid-enlarge/public.d.ts +2 -0
- package/dist/mermaid-enlarge/public.js +6 -0
- package/dist/mermaid-enlarge/ssr-fallback.d.ts +2 -0
- package/dist/mermaid-enlarge/ssr-fallback.js +8 -0
- package/dist/metainfo/doc-metainfo.d.ts +2 -3
- package/dist/metainfo/doc-metainfo.js +1 -4
- package/dist/metainfo/doc-tags.d.ts +2 -3
- package/dist/metainfo/doc-tags.js +1 -1
- package/dist/metainfo/frontmatter-preview.d.ts +3 -4
- package/dist/metainfo/frontmatter-preview.js +1 -1
- package/dist/nav-data-prep/index.js +6 -4
- package/dist/nav-indexing/category-nav.d.ts +2 -3
- package/dist/nav-indexing/category-nav.js +1 -2
- package/dist/nav-indexing/category-tree-nav.d.ts +2 -3
- package/dist/nav-indexing/category-tree-nav.js +1 -1
- package/dist/nav-indexing/doc-card-grid.d.ts +2 -3
- package/dist/nav-indexing/doc-card-grid.js +1 -2
- package/dist/nav-indexing/docs-sitemap.d.ts +2 -3
- package/dist/nav-indexing/docs-sitemap.js +2 -2
- package/dist/nav-indexing/index.d.ts +1 -1
- package/dist/nav-indexing/nav-card-grid.d.ts +2 -3
- package/dist/nav-indexing/nav-card-grid.js +1 -2
- package/dist/nav-indexing/note-tray-index-parts/card-list.d.ts +1 -2
- package/dist/nav-indexing/note-tray-index-parts/card-list.js +4 -4
- package/dist/nav-indexing/note-tray-index-parts/date-line.d.ts +2 -3
- package/dist/nav-indexing/note-tray-index-parts/date-line.js +1 -1
- package/dist/nav-indexing/note-tray-index-parts/index-list.d.ts +1 -2
- package/dist/nav-indexing/note-tray-index-parts/index-list.js +2 -2
- package/dist/nav-indexing/note-tray-index-parts/timeline.d.ts +1 -2
- package/dist/nav-indexing/note-tray-index-parts/timeline.js +2 -2
- package/dist/nav-indexing/note-tray-index.d.ts +1 -2
- package/dist/nav-indexing/note-tray-index.js +1 -1
- package/dist/nav-indexing/site-tree-nav-demo.d.ts +2 -3
- package/dist/nav-indexing/site-tree-nav-demo.js +2 -2
- package/dist/nav-indexing/tag-nav.d.ts +1 -2
- package/dist/nav-indexing/tag-nav.js +1 -1
- package/dist/nav-indexing/types.d.ts +2 -2
- package/dist/nav-indexing/versions-page-content.d.ts +2 -3
- package/dist/nav-indexing/versions-page-content.js +8 -8
- package/dist/note-tray-index/index.d.ts +1 -2
- package/dist/note-tray-index/index.js +1 -1
- package/dist/page-loading/page-loading-overlay.d.ts +1 -2
- package/dist/page-loading/page-loading-overlay.js +3 -5
- package/dist/plugins/agent-export.d.ts +3 -0
- package/dist/plugins/agent-export.js +34 -0
- package/dist/plugins/internal/agent-export/chunk.d.ts +5 -0
- package/dist/plugins/internal/agent-export/chunk.js +90 -0
- package/dist/plugins/internal/agent-export/index.d.ts +24 -0
- package/dist/plugins/internal/agent-export/index.js +123 -0
- package/dist/plugins/internal/agent-export/normalize.d.ts +5 -0
- package/dist/plugins/internal/agent-export/normalize.js +73 -0
- package/dist/plugins/internal/llms-txt/dev-middleware.d.ts +6 -0
- package/dist/plugins/internal/llms-txt/dev-middleware.js +8 -3
- package/dist/plugins/internal/llms-txt/emit.js +23 -6
- package/dist/plugins/internal/llms-txt/generate.d.ts +7 -1
- package/dist/plugins/internal/llms-txt/generate.js +9 -2
- package/dist/plugins/internal/llms-txt/load.d.ts +2 -0
- package/dist/plugins/internal/llms-txt/load.js +20 -4
- package/dist/plugins/internal/llms-txt/types.d.ts +10 -0
- package/dist/plugins/routes.js +4 -0
- package/dist/preset.d.ts +19 -9
- package/dist/preset.js +20 -1
- package/dist/route-context-payload/index.js +1 -1
- package/dist/routes/404.d.ts +2 -3
- package/dist/routes/404.js +1 -1
- package/dist/routes/_chrome.d.ts +5 -5
- package/dist/routes/_chrome.js +7 -2
- package/dist/routes/_context.d.ts +4 -4
- package/dist/routes/_design-token-panel-bootstrap.d.ts +1 -4
- package/dist/routes/_design-token-panel-bootstrap.js +9 -1
- package/dist/routes/docs-slug.d.ts +2 -3
- package/dist/routes/docs-tags-index.d.ts +2 -3
- package/dist/routes/docs-tags-index.js +1 -1
- package/dist/routes/docs-tags-tag.d.ts +2 -3
- package/dist/routes/docs-tags-tag.js +1 -1
- package/dist/routes/docs-versions.d.ts +2 -3
- package/dist/routes/docs-versions.js +1 -1
- package/dist/routes/files-path.d.ts +2 -3
- package/dist/routes/files-path.js +1 -1
- package/dist/routes/index.d.ts +2 -3
- package/dist/routes/index.js +1 -1
- package/dist/routes/locale-docs-slug.d.ts +2 -3
- package/dist/routes/locale-docs-tags-index.d.ts +2 -3
- package/dist/routes/locale-docs-tags-index.js +1 -1
- package/dist/routes/locale-docs-tags-tag.d.ts +2 -3
- package/dist/routes/locale-docs-tags-tag.js +1 -1
- package/dist/routes/locale-docs-versions.d.ts +2 -3
- package/dist/routes/locale-docs-versions.js +1 -1
- package/dist/routes/locale-files-path.d.ts +2 -3
- package/dist/routes/locale-files-path.js +1 -1
- package/dist/routes/locale-index.d.ts +2 -3
- package/dist/routes/locale-index.js +1 -1
- package/dist/routes/mcp.d.ts +5 -0
- package/dist/routes/mcp.js +25 -0
- package/dist/routes/v-docs-slug.d.ts +2 -3
- package/dist/routes/v-locale-docs-slug.d.ts +2 -3
- package/dist/search-widget/index.d.ts +1 -2
- package/dist/search-widget/index.js +4 -7
- package/dist/search-widget-script/generated-script.js +12 -5
- package/dist/settings-defaults.d.ts +2 -0
- package/dist/settings-defaults.js +93 -0
- package/dist/settings.d.ts +8 -2
- package/dist/sidebar/client-data.d.ts +18 -0
- package/dist/sidebar/client-data.js +47 -0
- package/dist/sidebar/index.d.ts +3 -1
- package/dist/sidebar/index.js +3 -1
- package/dist/sidebar/sidebar.d.ts +12 -44
- package/dist/sidebar/sidebar.js +4 -3
- package/dist/sidebar/types.d.ts +14 -0
- package/dist/sidebar-prepaint/index.d.ts +1 -2
- package/dist/sidebar-prepaint/index.js +4 -6
- package/dist/sidebar-resizer/sidebar-resizer-init.d.ts +2 -3
- package/dist/sidebar-resizer/sidebar-resizer-init.js +3 -3
- package/dist/sidebar-toggle-island/index.d.ts +8 -11
- package/dist/sidebar-toggle-island/index.js +75 -62
- package/dist/sidebar-tree/build-tree.js +5 -6
- package/dist/sidebar-tree/types.d.ts +2 -0
- package/dist/sidebar-tree-island/index.d.ts +4 -19
- package/dist/sidebar-tree-island/index.js +782 -436
- package/dist/sidebar-tree-island/scope-state.d.ts +38 -0
- package/dist/sidebar-tree-island/scope-state.js +151 -0
- package/dist/sidebar-tree-island/sidebar-scroll-preserve.js +6 -2
- package/dist/sidebar-utils/index.d.ts +17 -19
- package/dist/sidebar-utils/index.js +100 -3
- package/dist/sidebar-utils/scope.d.ts +11 -0
- package/dist/sidebar-utils/scope.js +67 -0
- package/dist/sidebar-with-defaults/index.d.ts +1 -2
- package/dist/sidebar-with-defaults/index.js +19 -18
- package/dist/site-schema/nav-tree.js +15 -15
- package/dist/site-schema/types.d.ts +1 -0
- package/dist/site-tree-nav/index.d.ts +2 -3
- package/dist/site-tree-nav/index.js +11 -12
- package/dist/site-tree-nav/normalize-island-props.d.ts +16 -0
- package/dist/site-tree-nav/normalize-island-props.js +122 -0
- package/dist/site-tree-nav-island/index.d.ts +3 -3
- package/dist/site-tree-nav-island/index.js +243 -144
- package/dist/smart-break/index.d.ts +3 -4
- package/dist/smart-break/index.js +1 -1
- package/dist/tab-item/tab-item.d.ts +3 -4
- package/dist/tab-item/tab-item.js +1 -1
- package/dist/tag-pages/index.d.ts +3 -3
- package/dist/tag-pages/index.js +10 -10
- package/dist/theme/color-scheme-provider.d.ts +3 -3
- package/dist/theme/color-scheme-provider.js +3 -3
- package/dist/theme/theme-pack-provider.d.ts +1 -1
- package/dist/theme/theme-pack-provider.js +3 -3
- package/dist/theme/theme-toggle.d.ts +2 -3
- package/dist/theme/theme-toggle.js +1 -1
- package/dist/theme-pack-dialog/index.d.ts +1 -1
- package/dist/theme-pack-dialog/index.js +69 -75
- package/dist/theme-pack-dialog/theme-pack-card.d.ts +3 -4
- package/dist/theme-pack-dialog/theme-pack-card.js +19 -17
- package/dist/theme-pack-switcher/index.d.ts +4 -5
- package/dist/theme-pack-switcher/index.js +52 -49
- package/dist/theme-packs/academia/meta.json +1 -1
- package/dist/theme-packs/academia/pack.css +1 -1
- package/dist/theme-packs/bauhaus/meta.json +1 -1
- package/dist/theme-packs/bauhaus/pack.css +2 -2
- package/dist/theme-packs/blueprint/meta.json +1 -1
- package/dist/theme-packs/blueprint/pack.css +2 -2
- package/dist/theme-packs/botanica/meta.json +1 -1
- package/dist/theme-packs/botanica/pack.css +2 -2
- package/dist/theme-packs/broadsheet/meta.json +1 -1
- package/dist/theme-packs/broadsheet/pack.css +2 -2
- package/dist/theme-packs/brutalist/meta.json +1 -1
- package/dist/theme-packs/brutalist/pack.css +2 -2
- package/dist/theme-packs/eink/meta.json +1 -1
- package/dist/theme-packs/eink/pack.css +1 -1
- package/dist/theme-packs/futura-editorial/meta.json +1 -1
- package/dist/theme-packs/futura-editorial/pack.css +2 -2
- package/dist/theme-packs/hearth/meta.json +1 -1
- package/dist/theme-packs/hearth/pack.css +2 -2
- package/dist/theme-packs/ledger/meta.json +1 -1
- package/dist/theme-packs/ledger/pack.css +1 -1
- package/dist/theme-packs/manuscript/meta.json +1 -1
- package/dist/theme-packs/manuscript/pack.css +1 -1
- package/dist/theme-packs/matcha/meta.json +1 -1
- package/dist/theme-packs/matcha/pack.css +2 -2
- package/dist/theme-packs/nocturne/meta.json +1 -1
- package/dist/theme-packs/nocturne/pack.css +2 -2
- package/dist/theme-packs/observatory/meta.json +1 -1
- package/dist/theme-packs/observatory/pack.css +2 -2
- package/dist/theme-packs/onyx/meta.json +1 -1
- package/dist/theme-packs/onyx/pack.css +2 -2
- package/dist/theme-packs/phosphor/meta.json +1 -1
- package/dist/theme-packs/phosphor/pack.css +2 -2
- package/dist/theme-packs/riso/meta.json +1 -1
- package/dist/theme-packs/riso/pack.css +2 -2
- package/dist/theme-packs/sakura/meta.json +1 -1
- package/dist/theme-packs/sakura/pack.css +2 -2
- package/dist/theme-packs/scandi/meta.json +1 -1
- package/dist/theme-packs/scandi/pack.css +1 -1
- package/dist/theme-packs/solar/meta.json +1 -1
- package/dist/theme-packs/solar/pack.css +1 -1
- package/dist/theme-packs/sumi/meta.json +1 -1
- package/dist/theme-packs/sumi/pack.css +2 -2
- package/dist/theme-packs/swissgrid/meta.json +1 -1
- package/dist/theme-packs/swissgrid/pack.css +1 -1
- package/dist/theme-packs/timberline/meta.json +1 -1
- package/dist/theme-packs/timberline/pack.css +2 -2
- package/dist/theme-packs/washi/meta.json +1 -1
- package/dist/theme-packs/washi/pack.css +2 -2
- package/dist/theme-toggle/index.d.ts +1 -1
- package/dist/theme-toggle/index.js +154 -167
- package/dist/theme.css +47 -121
- package/dist/toc/mobile-toc.d.ts +3 -5
- package/dist/toc/mobile-toc.js +29 -27
- package/dist/toc/toc.d.ts +3 -4
- package/dist/toc/toc.js +18 -18
- package/dist/toc/use-active-heading.d.ts +5 -4
- package/dist/toc/use-active-heading.js +36 -30
- package/dist/toc-prepaint/index.d.ts +1 -2
- package/dist/toc-prepaint/index.js +4 -6
- package/dist/transitions/nested-island-props-refresh.d.ts +3 -16
- package/dist/transitions/nested-island-props-refresh.js +133 -151
- package/dist/transitions/page-events.d.ts +8 -13
- package/dist/tree-nav-shared/index.d.ts +4 -5
- package/dist/tree-nav-shared/index.js +6 -7
- package/dist/use-modal-dialog/index.d.ts +9 -63
- package/dist/use-modal-dialog/index.js +41 -59
- package/dist/versions-page/index.d.ts +3 -3
- package/dist/versions-page/index.js +5 -5
- package/dist/wind/index.d.ts +5 -0
- package/dist/wind/index.js +169 -0
- package/dist/wind.json +498 -0
- package/dist/z-index-defaults/index.d.ts +4 -4
- package/dist/zdtp-loader.d.ts +7 -0
- package/dist/zdtp-loader.js +8 -0
- package/eject/asset-components/asset-card.tsx +14 -16
- package/eject/asset-components/asset-code.tsx +10 -12
- package/eject/asset-components/shared.tsx +5 -7
- package/eject/breadcrumb/breadcrumb.tsx +15 -16
- package/eject/code-group/index.tsx +4 -10
- package/eject/content-admonition/index.tsx +5 -6
- package/eject/desktop-sidebar-toggle-island/index.ts +4 -0
- package/eject/desktop-sidebar-toggle-island/island.tsx +50 -0
- package/eject/desktop-sidebar-toggle-island/storage.ts +27 -0
- package/eject/details/details.tsx +3 -5
- package/eject/doc-history/index.tsx +193 -179
- package/eject/doc-pager/index.tsx +3 -4
- package/eject/footer/footer.tsx +7 -9
- package/eject/header/header.tsx +42 -54
- package/eject/header/nav-overflow-script.ts +1 -1
- package/eject/header/types.ts +12 -13
- package/eject/image-enlarge/index.tsx +84 -69
- package/eject/image-enlarge/public.ts +2 -0
- package/eject/image-enlarge/ssr-fallback.tsx +7 -0
- package/eject/page-loading/page-loading-overlay.tsx +8 -15
- package/eject/sidebar/client-data.ts +68 -0
- package/eject/sidebar/index.ts +3 -0
- package/eject/sidebar/sidebar.tsx +16 -97
- package/eject/sidebar/types.ts +15 -0
- package/eject/sidebar-toggle-island/index.tsx +103 -102
- package/eject/sidebar-tree-island/index.tsx +827 -615
- package/eject/sidebar-tree-island/scope-state.ts +154 -0
- package/eject/sidebar-tree-island/sidebar-scroll-preserve.ts +8 -2
- package/eject/site-tree-nav-island/index.tsx +349 -222
- package/eject/tab-item/tab-item.tsx +2 -4
- package/eject/theme-toggle/hydration-pending.ts +6 -10
- package/eject/theme-toggle/index.tsx +133 -173
- package/eject/toc/mobile-toc.tsx +27 -31
- package/eject/toc/toc.tsx +21 -24
- package/eject/toc/use-active-heading.ts +43 -38
- package/package.json +40 -22
- package/routes-src/404.tsx +2 -3
- package/routes-src/_chrome.tsx +7 -2
- package/routes-src/_design-token-panel-bootstrap.tsx +1 -63
- package/routes-src/docs-slug.tsx +2 -3
- package/routes-src/docs-tags-index.tsx +2 -3
- package/routes-src/docs-tags-tag.tsx +2 -3
- package/routes-src/docs-versions.tsx +2 -3
- package/routes-src/files-path.tsx +2 -4
- package/routes-src/index.tsx +2 -3
- package/routes-src/locale-docs-slug.tsx +2 -3
- package/routes-src/locale-docs-tags-index.tsx +2 -3
- package/routes-src/locale-docs-tags-tag.tsx +2 -3
- package/routes-src/locale-docs-versions.tsx +2 -3
- package/routes-src/locale-files-path.tsx +2 -4
- package/routes-src/locale-index.tsx +2 -3
- package/routes-src/mcp.tsx +25 -0
- package/routes-src/v-docs-slug.tsx +2 -3
- package/routes-src/v-locale-docs-slug.tsx +2 -3
- package/tsconfig.base.json +1 -1
- package/dist/safelist.css +0 -2
- package/dist/theme-no-reset.css +0 -379
- package/eject/desktop-sidebar-toggle-island/index.tsx +0 -110
|
@@ -1,183 +1,165 @@
|
|
|
1
1
|
import { BEFORE_SWAP_EVENT } from "./page-events.js";
|
|
2
|
-
const
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
2
|
+
const PERSIST = "data-zfb-transition-persist";
|
|
3
|
+
const PRESERVE = "data-zd-props-preserve";
|
|
4
|
+
const PROPS = "data-props";
|
|
5
|
+
const MARKERS = ["data-zfb-island", "data-zfb-island-skip-ssr"];
|
|
6
|
+
const IDENTITY = [
|
|
7
|
+
...MARKERS,
|
|
8
|
+
"data-zfb-transport",
|
|
9
|
+
"data-zfb-protocol",
|
|
10
|
+
"data-zfb-build"
|
|
11
|
+
];
|
|
12
|
+
const SCHEDULE = ["data-when", "data-media"];
|
|
13
|
+
const ISLAND_SELECTOR = MARKERS.map((attr) => `[${attr}]`).join(",");
|
|
14
|
+
const installed = /* @__PURE__ */ new WeakMap();
|
|
15
|
+
function installNestedIslandPropsRefresh({ document: document2, reportError }) {
|
|
16
|
+
const listener = (event) => {
|
|
17
|
+
const navigation = event;
|
|
18
|
+
const incoming = navigation.newDocument;
|
|
19
|
+
if (!isDocument(incoming) || incoming === document2 || typeof navigation.swap !== "function") return;
|
|
20
|
+
try {
|
|
21
|
+
prepareIncoming(document2, incoming);
|
|
22
|
+
} catch (error) {
|
|
23
|
+
for (const root of incoming.querySelectorAll(`[${PERSIST}]`)) root.removeAttribute(PERSIST);
|
|
24
|
+
try {
|
|
25
|
+
if (reportError) reportError(error);
|
|
26
|
+
else queueMicrotask(() => {
|
|
27
|
+
throw error;
|
|
28
|
+
});
|
|
29
|
+
} catch (reporterError) {
|
|
30
|
+
queueMicrotask(() => {
|
|
31
|
+
throw reporterError;
|
|
32
|
+
});
|
|
33
|
+
}
|
|
18
34
|
}
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
let
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
if (!
|
|
26
|
-
|
|
27
|
-
return commitOutcome.value;
|
|
35
|
+
const delegate = navigation.swap;
|
|
36
|
+
let started = false;
|
|
37
|
+
let outcome;
|
|
38
|
+
const composed = function(...args) {
|
|
39
|
+
if (started) {
|
|
40
|
+
if (!outcome) return void 0;
|
|
41
|
+
if (!outcome.ok) throw outcome.error;
|
|
42
|
+
return outcome.value;
|
|
28
43
|
}
|
|
29
|
-
|
|
44
|
+
started = true;
|
|
30
45
|
try {
|
|
31
|
-
const value =
|
|
32
|
-
|
|
33
|
-
capturedSwap,
|
|
34
|
-
this,
|
|
35
|
-
args,
|
|
36
|
-
reportError
|
|
37
|
-
);
|
|
38
|
-
commitOutcome = { ok: true, value };
|
|
46
|
+
const value = delegate.apply(this, args);
|
|
47
|
+
outcome = { ok: true, value };
|
|
39
48
|
return value;
|
|
40
49
|
} catch (error) {
|
|
41
|
-
|
|
50
|
+
outcome = { ok: false, error };
|
|
42
51
|
throw error;
|
|
43
52
|
}
|
|
44
53
|
};
|
|
45
54
|
try {
|
|
46
|
-
|
|
55
|
+
navigation.swap = composed;
|
|
47
56
|
} catch {
|
|
48
|
-
return;
|
|
49
57
|
}
|
|
50
|
-
if (swapEvent.swap !== composedSwap) return;
|
|
51
58
|
};
|
|
52
|
-
document2.addEventListener(BEFORE_SWAP_EVENT,
|
|
53
|
-
return () => document2.removeEventListener(BEFORE_SWAP_EVENT,
|
|
59
|
+
document2.addEventListener(BEFORE_SWAP_EVENT, listener);
|
|
60
|
+
return () => document2.removeEventListener(BEFORE_SWAP_EVENT, listener);
|
|
54
61
|
}
|
|
55
62
|
function ensureNestedIslandPropsRefresh(options) {
|
|
56
|
-
const resolved = options ??
|
|
57
|
-
if (!resolved ||
|
|
58
|
-
|
|
59
|
-
resolved.document,
|
|
60
|
-
installNestedIslandPropsRefresh(resolved)
|
|
61
|
-
);
|
|
63
|
+
const resolved = options ?? (typeof document === "undefined" ? void 0 : { document });
|
|
64
|
+
if (!resolved || installed.has(resolved.document)) return;
|
|
65
|
+
installed.set(resolved.document, installNestedIslandPropsRefresh(resolved));
|
|
62
66
|
}
|
|
63
67
|
function disposeNestedIslandPropsRefresh(document2) {
|
|
64
|
-
|
|
65
|
-
|
|
68
|
+
installed.get(document2)?.();
|
|
69
|
+
installed.delete(document2);
|
|
66
70
|
}
|
|
67
|
-
function
|
|
68
|
-
|
|
69
|
-
const liveRoots = collectRefreshableRoots(liveDocument);
|
|
70
|
-
if (liveRoots.size === 0) return Object.freeze(plan);
|
|
71
|
-
const incomingRoots = collectRefreshableRoots(incomingDocument);
|
|
72
|
-
for (const [persistKey, liveRoot] of liveRoots) {
|
|
73
|
-
const incomingRoot = incomingRoots.get(persistKey);
|
|
74
|
-
if (!incomingRoot) continue;
|
|
75
|
-
const incomingIslands = collectUniqueOwnedIslands(incomingRoot);
|
|
76
|
-
if (incomingIslands.size === 0) continue;
|
|
77
|
-
for (const [name, liveIsland] of collectUniqueOwnedIslands(liveRoot, true)) {
|
|
78
|
-
const incomingIsland = incomingIslands.get(name);
|
|
79
|
-
if (!incomingIsland) continue;
|
|
80
|
-
const incomingProps = incomingIsland.getAttribute(PROPS_ATTR);
|
|
81
|
-
if (incomingProps === liveIsland.getAttribute(PROPS_ATTR)) continue;
|
|
82
|
-
plan.push(Object.freeze({ liveIsland, incomingProps }));
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
return Object.freeze(plan);
|
|
71
|
+
function isDocument(value) {
|
|
72
|
+
return typeof value === "object" && value !== null && value.nodeType === 9 && typeof value.querySelectorAll === "function";
|
|
86
73
|
}
|
|
87
|
-
function
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
let delegateResult;
|
|
97
|
-
try {
|
|
98
|
-
delegateResult = delegate.apply(receiver, args);
|
|
99
|
-
} catch (delegateError) {
|
|
100
|
-
reportRefreshErrors(helperErrors, reportError);
|
|
101
|
-
throw delegateError;
|
|
74
|
+
function uniqueRoots(doc) {
|
|
75
|
+
const roots = /* @__PURE__ */ new Map();
|
|
76
|
+
const duplicates = /* @__PURE__ */ new Set();
|
|
77
|
+
for (const root of doc.querySelectorAll(`[${PERSIST}]`)) {
|
|
78
|
+
if (root.parentElement?.closest(`[${PERSIST}]`)) continue;
|
|
79
|
+
const key = root.getAttribute(PERSIST);
|
|
80
|
+
if (!key) continue;
|
|
81
|
+
if (roots.has(key)) duplicates.add(key);
|
|
82
|
+
else roots.set(key, root);
|
|
102
83
|
}
|
|
103
|
-
|
|
104
|
-
return
|
|
84
|
+
for (const key of duplicates) roots.delete(key);
|
|
85
|
+
return roots;
|
|
105
86
|
}
|
|
106
|
-
function
|
|
107
|
-
const
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
roots.delete(persistKey);
|
|
114
|
-
}
|
|
87
|
+
function ownedIslands(root) {
|
|
88
|
+
const islands = /* @__PURE__ */ new Map();
|
|
89
|
+
for (const element of root.querySelectorAll(ISLAND_SELECTOR)) {
|
|
90
|
+
if (element.closest(`[${PERSIST}]`) !== root) continue;
|
|
91
|
+
const name = element.getAttribute(MARKERS[0]) ?? element.getAttribute(MARKERS[1]);
|
|
92
|
+
if (!name || islands.has(name)) return void 0;
|
|
93
|
+
islands.set(name, element);
|
|
115
94
|
}
|
|
116
|
-
return
|
|
95
|
+
return islands;
|
|
117
96
|
}
|
|
118
|
-
function
|
|
119
|
-
|
|
120
|
-
(island) => {
|
|
121
|
-
if (island.closest(`[${PERSIST_ATTR}]`) !== root) return false;
|
|
122
|
-
if (!excludePreserved) return true;
|
|
123
|
-
const preserveBoundary = island.closest(`[${PROPS_PRESERVE_ATTR}]`);
|
|
124
|
-
return preserveBoundary === null || !root.contains(preserveBoundary);
|
|
125
|
-
}
|
|
126
|
-
);
|
|
127
|
-
return indexUniquely(owned, ISLAND_ATTR);
|
|
97
|
+
function sameAttributes(a, b, names) {
|
|
98
|
+
return names.every((name) => a.getAttribute(name) === b.getAttribute(name));
|
|
128
99
|
}
|
|
129
|
-
function
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
if (byValue.has(value)) {
|
|
136
|
-
duplicated.add(value);
|
|
137
|
-
continue;
|
|
138
|
-
}
|
|
139
|
-
byValue.set(value, element);
|
|
140
|
-
}
|
|
141
|
-
for (const value of duplicated) byValue.delete(value);
|
|
142
|
-
return byValue;
|
|
100
|
+
function sameStructure(a, b) {
|
|
101
|
+
if (a.tagName !== b.tagName || a.getAttribute(PERSIST) !== b.getAttribute(PERSIST) || a.id !== b.id) return false;
|
|
102
|
+
if (a !== b && (MARKERS.some((attr) => a.hasAttribute(attr)) || MARKERS.some((attr) => b.hasAttribute(attr)))) return true;
|
|
103
|
+
const left = Array.from(a.children);
|
|
104
|
+
const right = Array.from(b.children);
|
|
105
|
+
return left.length === right.length && left.every((child, index) => right[index] !== void 0 && sameStructure(child, right[index]));
|
|
143
106
|
}
|
|
144
|
-
function
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
}) {
|
|
148
|
-
if (incomingProps === null) {
|
|
149
|
-
liveIsland.removeAttribute(PROPS_ATTR);
|
|
150
|
-
} else {
|
|
151
|
-
liveIsland.setAttribute(PROPS_ATTR, incomingProps);
|
|
152
|
-
}
|
|
153
|
-
liveIsland.setAttribute(ISLAND_REMOUNT_ATTR, "");
|
|
107
|
+
function preserved(island, root) {
|
|
108
|
+
const boundary = island.closest(`[${PRESERVE}]`);
|
|
109
|
+
return boundary !== null && (boundary === root || root.contains(boundary));
|
|
154
110
|
}
|
|
155
|
-
function
|
|
156
|
-
|
|
157
|
-
const
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
111
|
+
function prepareIncoming(live, incoming) {
|
|
112
|
+
const liveRoots = uniqueRoots(live);
|
|
113
|
+
const incomingRoots = uniqueRoots(incoming);
|
|
114
|
+
const liveCounts = countKeys(live);
|
|
115
|
+
const incomingCounts = countKeys(incoming);
|
|
116
|
+
for (const root of incoming.querySelectorAll(`[${PERSIST}]`)) {
|
|
117
|
+
if (root.parentElement?.closest(`[${PERSIST}]`)) continue;
|
|
118
|
+
const key = root.getAttribute(PERSIST);
|
|
119
|
+
if (!key || incomingCounts.get(key) !== 1) {
|
|
120
|
+
root.removeAttribute(PERSIST);
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
const liveCount = liveCounts.get(key) ?? 0;
|
|
124
|
+
if (liveCount === 0) {
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
if (liveCount !== 1) {
|
|
128
|
+
root.removeAttribute(PERSIST);
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
const oldRoot = liveRoots.get(key);
|
|
132
|
+
const newRoot = incomingRoots.get(key);
|
|
133
|
+
if (!oldRoot || newRoot !== root || !sameStructure(oldRoot, root)) {
|
|
134
|
+
root.removeAttribute(PERSIST);
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
const oldIslands = ownedIslands(oldRoot);
|
|
138
|
+
const newIslands = ownedIslands(root);
|
|
139
|
+
if (!oldIslands || !newIslands || oldIslands.size !== newIslands.size || [...oldIslands.keys()].some((name) => !newIslands.has(name))) {
|
|
140
|
+
root.removeAttribute(PERSIST);
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
if ([...oldIslands].some(([name, oldIsland]) => !sameAttributes(oldIsland, newIslands.get(name), SCHEDULE))) {
|
|
144
|
+
root.removeAttribute(PERSIST);
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
for (const [name, oldIsland] of oldIslands) {
|
|
148
|
+
const newIsland = newIslands.get(name);
|
|
149
|
+
if (!preserved(oldIsland, oldRoot) || !sameAttributes(oldIsland, newIsland, IDENTITY)) continue;
|
|
150
|
+
const value = oldIsland.getAttribute(PROPS);
|
|
151
|
+
if (value === null) newIsland.removeAttribute(PROPS);
|
|
152
|
+
else newIsland.setAttribute(PROPS, value);
|
|
163
153
|
}
|
|
164
|
-
return;
|
|
165
154
|
}
|
|
166
|
-
surfaceAsynchronously(error);
|
|
167
155
|
}
|
|
168
|
-
function
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
const candidate = value;
|
|
176
|
-
return candidate.nodeType === DOCUMENT_NODE && typeof candidate.querySelectorAll === "function";
|
|
177
|
-
}
|
|
178
|
-
function resolveBrowserOptions() {
|
|
179
|
-
if (typeof document === "undefined") return void 0;
|
|
180
|
-
return { document };
|
|
156
|
+
function countKeys(doc) {
|
|
157
|
+
const counts = /* @__PURE__ */ new Map();
|
|
158
|
+
for (const root of doc.querySelectorAll(`[${PERSIST}]`)) {
|
|
159
|
+
const key = root.getAttribute(PERSIST);
|
|
160
|
+
if (key) counts.set(key, (counts.get(key) ?? 0) + 1);
|
|
161
|
+
}
|
|
162
|
+
return counts;
|
|
181
163
|
}
|
|
182
164
|
export {
|
|
183
165
|
disposeNestedIslandPropsRefresh,
|
|
@@ -8,12 +8,9 @@
|
|
|
8
8
|
*/
|
|
9
9
|
export declare const BEFORE_NAVIGATE_EVENT = "zfb:before-preparation";
|
|
10
10
|
/**
|
|
11
|
-
* Event name fired
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* the initial page load, so consumers register one listener and get
|
|
15
|
-
* both first-paint and post-swap behavior). Direct successor to
|
|
16
|
-
* Astro's `astro:page-load`.
|
|
11
|
+
* Event name fired after a SPA body swap. Today resolves to
|
|
12
|
+
* `"zfb:after-swap"`. The initial page load uses `zfb:page-load` instead;
|
|
13
|
+
* callers needing both paths initialize on first paint as well.
|
|
17
14
|
*/
|
|
18
15
|
export declare const AFTER_NAVIGATE_EVENT = "zfb:after-swap";
|
|
19
16
|
/**
|
|
@@ -22,15 +19,14 @@ export declare const AFTER_NAVIGATE_EVENT = "zfb:after-swap";
|
|
|
22
19
|
* dispatched by zfb's client-router with a mutable `event.newDocument`
|
|
23
20
|
* carrying the incoming document that is about to replace the live one
|
|
24
21
|
* (zudolab/zudo-doc#3136 / #3137). Consumers that need to influence the
|
|
25
|
-
* incoming document BEFORE zfb's head
|
|
22
|
+
* incoming document BEFORE zfb's island teardown and head/body swap run (e.g.
|
|
26
23
|
* injecting a `<link>` so an href-matching stylesheet survives the swap
|
|
27
24
|
* instead of being removed and re-fetched) must mutate `event.newDocument`
|
|
28
25
|
* synchronously from a handler registered on this event — by the time
|
|
29
26
|
* `AFTER_NAVIGATE_EVENT` fires the swap has already completed. This module
|
|
30
27
|
* does not export a subscribe helper for it (unlike `onBeforeNavigate` /
|
|
31
|
-
* `onAfterNavigate`) because the
|
|
32
|
-
*
|
|
33
|
-
* not just a bare notification.
|
|
28
|
+
* `onAfterNavigate`) because its consumers need the raw event object's
|
|
29
|
+
* `newDocument`, not just a bare notification.
|
|
34
30
|
*/
|
|
35
31
|
export declare const BEFORE_SWAP_EVENT = "zfb:before-swap";
|
|
36
32
|
/**
|
|
@@ -46,9 +42,8 @@ export declare const BEFORE_SWAP_EVENT = "zfb:before-swap";
|
|
|
46
42
|
export declare function onBeforeNavigate(handler: () => void): () => void;
|
|
47
43
|
/**
|
|
48
44
|
* Subscribe to "navigation end" — runs `handler` after each page-body
|
|
49
|
-
* swap.
|
|
50
|
-
*
|
|
51
|
-
* dispatches `zfb:after-swap` on the document for both cases).
|
|
45
|
+
* swap. The first page load is signaled separately by `zfb:page-load`;
|
|
46
|
+
* callers that need initial setup must also initialize on first paint.
|
|
52
47
|
*
|
|
53
48
|
* Returns an unsubscribe function. SSR-safe: returns a no-op when
|
|
54
49
|
* called outside a browser.
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
/** @jsxRuntime automatic */
|
|
2
|
-
/** @jsxImportSource preact */
|
|
3
2
|
export declare const INDENT = "clamp(0.8rem, 1.2vw, 1.625rem)";
|
|
4
3
|
export declare const CONNECTOR_OFFSET = "clamp(0.2rem, 0.3vw, 0.5rem)";
|
|
5
4
|
export declare const CONNECTOR_WIDTH = "clamp(0.4rem, 0.6vw, 1rem)";
|
|
6
5
|
export declare const BASE_PAD = "clamp(0.4rem, 0.8vw, 1.3rem)";
|
|
7
6
|
export declare function connectorLeft(depth: number): string;
|
|
8
|
-
export declare function CategoryLinkIcon({ className }: {
|
|
9
|
-
|
|
10
|
-
}): import("
|
|
7
|
+
export declare function CategoryLinkIcon({ class: className }: {
|
|
8
|
+
class?: string;
|
|
9
|
+
}): import("@takazudo/zfb").Description;
|
|
11
10
|
export declare function ConnectorLines({ depth, isLast, widthScale, topPad, }: {
|
|
12
11
|
depth: number;
|
|
13
12
|
isLast: boolean;
|
|
@@ -19,4 +18,4 @@ export declare function ConnectorLines({ depth, isLast, widthScale, topPad, }: {
|
|
|
19
18
|
* aligned with the first line instead of the row's vertical center.
|
|
20
19
|
*/
|
|
21
20
|
topPad?: string;
|
|
22
|
-
}): import("
|
|
21
|
+
}): import("@takazudo/zfb").Description | null;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Fragment, jsx, jsxs } from "
|
|
1
|
+
import { Fragment, jsx, jsxs } from "@takazudo/zfb/zudo-react/jsx-runtime";
|
|
2
2
|
const INDENT = "clamp(0.8rem, 1.2vw, 1.625rem)";
|
|
3
3
|
const CONNECTOR_OFFSET = "clamp(0.2rem, 0.3vw, 0.5rem)";
|
|
4
4
|
const CONNECTOR_WIDTH = "clamp(0.4rem, 0.6vw, 1rem)";
|
|
@@ -7,15 +7,14 @@ function connectorLeft(depth) {
|
|
|
7
7
|
return `calc(${depth} * ${INDENT} + ${CONNECTOR_OFFSET})`;
|
|
8
8
|
}
|
|
9
9
|
const CATEGORY_LINK_PATH = "M5.746 5.74 0 11.49l20.987 20.96C34.126 45.572 41.963 53.45 41.948 53.523c-.012.062-9.456 9.544-20.986 21.07L0 95.55l5.714 5.715c3.142 3.143 5.748 5.715 5.79 5.715s2.63-2.563 5.75-5.696l17.939-18.001c21.867-21.94 29.443-29.599 29.443-29.768 0-.114-.665-.804-5.084-5.275C51.872 40.47 11.71.125 11.565.036 11.525.01 8.906 2.578 5.746 5.74m38.345-.066c-3.132 3.13-5.696 5.71-5.696 5.732-.001.022 2.16 2.185 4.8 4.807 2.641 2.623 8.382 8.338 12.758 12.702 15.38 15.337 23.763 23.641 24.314 24.086.19.153.346.336.346.405 0 .07-1.738 1.847-3.887 3.976a17515 17515 0 0 0-20.35 20.264 19555 19555 0 0 1-17.223 17.158c-.416.409-.757.77-.757.8 0 .083 11.415 11.485 11.457 11.445.235-.22 53.542-53.528 53.542-53.543C103.395 53.472 49.891.02 49.837 0c-.028-.01-2.613 2.543-5.746 5.674";
|
|
10
|
-
function CategoryLinkIcon({ className }) {
|
|
10
|
+
function CategoryLinkIcon({ class: className }) {
|
|
11
11
|
return /* @__PURE__ */ jsx(
|
|
12
12
|
"svg",
|
|
13
13
|
{
|
|
14
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
15
14
|
fill: "currentColor",
|
|
16
15
|
viewBox: "0 0 103.395 107.049",
|
|
17
16
|
"aria-hidden": "true",
|
|
18
|
-
|
|
17
|
+
class: `shrink-0 ${className ?? ""}`,
|
|
19
18
|
children: /* @__PURE__ */ jsx("path", { d: CATEGORY_LINK_PATH })
|
|
20
19
|
}
|
|
21
20
|
);
|
|
@@ -34,10 +33,10 @@ function ConnectorLines({
|
|
|
34
33
|
/* @__PURE__ */ jsx(
|
|
35
34
|
"div",
|
|
36
35
|
{
|
|
37
|
-
|
|
36
|
+
class: "absolute border-l border-dashed border-muted",
|
|
38
37
|
style: {
|
|
39
38
|
left,
|
|
40
|
-
top:
|
|
39
|
+
top: "0px",
|
|
41
40
|
bottom: isLast ? `calc(100% - ${firstLineMid})` : 0
|
|
42
41
|
}
|
|
43
42
|
}
|
|
@@ -45,7 +44,7 @@ function ConnectorLines({
|
|
|
45
44
|
/* @__PURE__ */ jsx(
|
|
46
45
|
"div",
|
|
47
46
|
{
|
|
48
|
-
|
|
47
|
+
class: "absolute border-t border-dashed border-muted",
|
|
49
48
|
style: {
|
|
50
49
|
left,
|
|
51
50
|
width,
|
|
@@ -1,70 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
isOpen: boolean
|
|
4
|
-
/** Called when the dialog is closed for any reason (Escape, backdrop, navigation). */
|
|
1
|
+
import type { Listener, ReadonlySignal, Ref, Scope } from "@takazudo/zfb/zudo-react";
|
|
2
|
+
export interface ModalDialogOptions {
|
|
3
|
+
isOpen: ReadonlySignal<boolean>;
|
|
5
4
|
onClose: () => void;
|
|
6
|
-
/**
|
|
7
|
-
* DOM event name that triggers a close-and-reset. Pass the host's SPA
|
|
8
|
-
* after-navigate event name (e.g. `AFTER_NAVIGATE_EVENT`); pass `undefined`
|
|
9
|
-
* to skip navigation-close wiring entirely.
|
|
10
|
-
*/
|
|
11
5
|
navigateEvent?: string;
|
|
12
|
-
/**
|
|
13
|
-
* When `true`, enable backdrop-click-to-close. The caller must forward the
|
|
14
|
-
* click handler returned by this hook to the `<dialog>` element's `onClick`.
|
|
15
|
-
* Defaults to `false` so opt-in only.
|
|
16
|
-
*/
|
|
17
6
|
backdropClickClose?: boolean;
|
|
18
|
-
/**
|
|
19
|
-
* When `true`, enable focus management:
|
|
20
|
-
* - On open: capture `document.activeElement` as the return target (unless
|
|
21
|
-
* `returnFocusRef` is provided), then move focus to the first focusable
|
|
22
|
-
* element inside the dialog (or the dialog itself as a fallback).
|
|
23
|
-
* - On close: restore focus to the captured element.
|
|
24
|
-
*
|
|
25
|
-
* When a caller already manages focus internally (e.g. ai-chat-modal focuses
|
|
26
|
-
* its input in its own effect), pass `restoreFocusOnly: true` instead to get
|
|
27
|
-
* trigger-capture + restore without the "move into dialog" step.
|
|
28
|
-
*/
|
|
29
7
|
manageFocus?: boolean;
|
|
30
|
-
/**
|
|
31
|
-
* Like `manageFocus` but skips the "focus first element in dialog" step —
|
|
32
|
-
* use when the caller has its own focus-on-open logic and only needs
|
|
33
|
-
* trigger-capture + focus restore on close.
|
|
34
|
-
*/
|
|
35
8
|
restoreFocusOnly?: boolean;
|
|
36
|
-
|
|
37
|
-
* Optional ref holding the element to return focus to on close. When
|
|
38
|
-
* provided and non-null, this takes precedence over the internally captured
|
|
39
|
-
* `document.activeElement`. Useful when the trigger element is conditionally
|
|
40
|
-
* rendered and therefore removed from the DOM before the open effect fires
|
|
41
|
-
* (e.g. the doc-history trigger button, which is unmounted when `isOpen`
|
|
42
|
-
* is true). The caller should set `returnFocusRef.current` to the trigger
|
|
43
|
-
* element in its click handler, before calling `setState`.
|
|
44
|
-
*/
|
|
45
|
-
returnFocusRef?: React.RefObject<HTMLElement | null>;
|
|
9
|
+
returnFocusRef?: Ref<HTMLElement>;
|
|
46
10
|
}
|
|
47
|
-
interface
|
|
48
|
-
dialogRef:
|
|
49
|
-
|
|
50
|
-
* Pass this to `<dialog onClick={handleBackdropClick}>`.
|
|
51
|
-
* Only wired when `backdropClickClose` is true; otherwise a no-op.
|
|
52
|
-
*/
|
|
53
|
-
handleBackdropClick: (e: React.MouseEvent<HTMLDialogElement>) => void;
|
|
11
|
+
export interface ModalDialogResult {
|
|
12
|
+
dialogRef: Ref<HTMLDialogElement>;
|
|
13
|
+
handleBackdropClick: Listener<Event>;
|
|
54
14
|
}
|
|
55
|
-
/**
|
|
56
|
-
|
|
57
|
-
*
|
|
58
|
-
* Usage:
|
|
59
|
-
* ```tsx
|
|
60
|
-
* const { dialogRef, handleBackdropClick } = useModalDialog({
|
|
61
|
-
* isOpen,
|
|
62
|
-
* onClose: handleClose,
|
|
63
|
-
* navigateEvent: AFTER_NAVIGATE_EVENT,
|
|
64
|
-
* backdropClickClose: true,
|
|
65
|
-
* });
|
|
66
|
-
* return <dialog ref={dialogRef} onClick={handleBackdropClick} ... />;
|
|
67
|
-
* ```
|
|
68
|
-
*/
|
|
69
|
-
export declare function useModalDialog({ isOpen, onClose, navigateEvent, backdropClickClose, manageFocus, restoreFocusOnly, returnFocusRef, }: UseModalDialogOptions): UseModalDialogResult;
|
|
70
|
-
export {};
|
|
15
|
+
/** Call during setup in the scope that owns the dialog element. */
|
|
16
|
+
export declare function modalDialog(scope: Scope, options: ModalDialogOptions): ModalDialogResult;
|
|
@@ -1,73 +1,55 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
backdropClickClose = false,
|
|
8
|
-
manageFocus = false,
|
|
9
|
-
restoreFocusOnly = false,
|
|
10
|
-
returnFocusRef
|
|
11
|
-
}) {
|
|
12
|
-
const dialogRef = useRef(null);
|
|
13
|
-
const internalTriggerRef = useRef(null);
|
|
14
|
-
useEffect(() => {
|
|
1
|
+
function modalDialog(scope, options) {
|
|
2
|
+
const dialogRef = { current: null };
|
|
3
|
+
let capturedTrigger = null;
|
|
4
|
+
let closingFromNavigation = false;
|
|
5
|
+
const ownsFocus = options.manageFocus || options.restoreFocusOnly;
|
|
6
|
+
scope.effect(() => {
|
|
15
7
|
const dialog = dialogRef.current;
|
|
16
8
|
if (!dialog) return;
|
|
17
|
-
if (isOpen && !dialog.open) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
9
|
+
if (options.isOpen.value && !dialog.open) {
|
|
10
|
+
closingFromNavigation = false;
|
|
11
|
+
if (ownsFocus && !options.returnFocusRef) capturedTrigger = document.activeElement;
|
|
21
12
|
dialog.showModal();
|
|
22
|
-
if (manageFocus && !restoreFocusOnly) {
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
} else {
|
|
28
|
-
dialog.focus();
|
|
29
|
-
}
|
|
13
|
+
if (options.manageFocus && !options.restoreFocusOnly) {
|
|
14
|
+
const focusable = dialog.querySelector(
|
|
15
|
+
'button:not([disabled]),a[href],[tabindex]:not([tabindex="-1"]),input:not([disabled]),select:not([disabled]),textarea:not([disabled])'
|
|
16
|
+
);
|
|
17
|
+
(focusable ?? dialog).focus();
|
|
30
18
|
}
|
|
31
|
-
} else if (!isOpen && dialog.open) {
|
|
19
|
+
} else if (!options.isOpen.value && dialog.open) {
|
|
32
20
|
dialog.close();
|
|
33
21
|
}
|
|
34
|
-
}
|
|
35
|
-
|
|
22
|
+
});
|
|
23
|
+
scope.onActivate(() => {
|
|
36
24
|
const dialog = dialogRef.current;
|
|
37
25
|
if (!dialog) return;
|
|
38
|
-
|
|
39
|
-
if (
|
|
40
|
-
const trigger = returnFocusRef
|
|
41
|
-
if (trigger instanceof HTMLElement)
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
internalTriggerRef.current = null;
|
|
26
|
+
const onDialogClose = () => {
|
|
27
|
+
if (ownsFocus) {
|
|
28
|
+
const trigger = options.returnFocusRef?.current ?? capturedTrigger;
|
|
29
|
+
if (trigger instanceof HTMLElement) trigger.focus();
|
|
30
|
+
capturedTrigger = null;
|
|
45
31
|
}
|
|
46
|
-
if (isOpen) onClose();
|
|
47
|
-
|
|
32
|
+
if (options.isOpen.value && !closingFromNavigation) options.onClose();
|
|
33
|
+
closingFromNavigation = false;
|
|
34
|
+
};
|
|
35
|
+
const onNavigation = () => {
|
|
36
|
+
if (!dialog.open) return;
|
|
37
|
+
closingFromNavigation = true;
|
|
38
|
+
dialog.close();
|
|
39
|
+
options.onClose();
|
|
40
|
+
};
|
|
48
41
|
dialog.addEventListener("close", onDialogClose);
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
document.addEventListener(navigateEvent, handleNavigation);
|
|
61
|
-
return () => document.removeEventListener(navigateEvent, handleNavigation);
|
|
62
|
-
}, [navigateEvent, onClose]);
|
|
63
|
-
function handleBackdropClick(e) {
|
|
64
|
-
if (!backdropClickClose) return;
|
|
65
|
-
const dialog = dialogRef.current;
|
|
66
|
-
if (!dialog) return;
|
|
67
|
-
if (e.target === dialog) dialog.close();
|
|
68
|
-
}
|
|
42
|
+
if (options.navigateEvent) document.addEventListener(options.navigateEvent, onNavigation);
|
|
43
|
+
return () => {
|
|
44
|
+
dialog.removeEventListener("close", onDialogClose);
|
|
45
|
+
if (options.navigateEvent) document.removeEventListener(options.navigateEvent, onNavigation);
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
const handleBackdropClick = (event) => {
|
|
49
|
+
if (options.backdropClickClose && event.target === dialogRef.current) dialogRef.current?.close();
|
|
50
|
+
};
|
|
69
51
|
return { dialogRef, handleBackdropClick };
|
|
70
52
|
}
|
|
71
53
|
export {
|
|
72
|
-
|
|
54
|
+
modalDialog
|
|
73
55
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** @jsxRuntime automatic */
|
|
2
|
-
|
|
3
|
-
import type {
|
|
2
|
+
import type { Child } from "@takazudo/zfb/zudo-react";
|
|
3
|
+
import type { JSX } from "@takazudo/zfb/zudo-react/jsx-runtime";
|
|
4
4
|
import type { ChromeContext } from "../factory-context/index.js";
|
|
5
5
|
import type { Settings } from "../settings.js";
|
|
6
6
|
/** Minimal version config entry needed by the versions page. */
|
|
@@ -56,7 +56,7 @@ export interface VersionsPageDeps {
|
|
|
56
56
|
/** Props for the VersionsPageView component. */
|
|
57
57
|
export interface VersionsPageViewProps {
|
|
58
58
|
locale: string;
|
|
59
|
-
children?:
|
|
59
|
+
children?: Child;
|
|
60
60
|
}
|
|
61
61
|
/**
|
|
62
62
|
* Create a `VersionsPageView` component from the unified {@link ChromeContext}
|