@takazudo/zudo-doc 1.2.0 → 2.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.
Files changed (52) hide show
  1. package/dist/chrome/derive.d.ts +68 -0
  2. package/dist/chrome/derive.js +231 -0
  3. package/dist/chrome/index.d.ts +37 -0
  4. package/dist/chrome/index.js +43 -0
  5. package/dist/content.css +25 -9
  6. package/dist/doc-body-end/index.d.ts +9 -11
  7. package/dist/doc-body-end/index.js +4 -2
  8. package/dist/doc-content-header/index.d.ts +10 -2
  9. package/dist/doc-content-header/index.js +8 -8
  10. package/dist/doc-history-area/index.d.ts +10 -25
  11. package/dist/doc-history-area/index.js +14 -10
  12. package/dist/doc-metainfo-area/index.d.ts +9 -15
  13. package/dist/doc-metainfo-area/index.js +6 -2
  14. package/dist/doc-page-renderer/index.d.ts +11 -2
  15. package/dist/doc-page-renderer/index.js +22 -15
  16. package/dist/doc-page-shell/index.d.ts +11 -3
  17. package/dist/doc-page-shell/index.js +21 -14
  18. package/dist/doc-pager/index.d.ts +6 -7
  19. package/dist/doc-pager/index.js +2 -2
  20. package/dist/doc-route-entries/index.d.ts +22 -46
  21. package/dist/doc-route-entries/index.js +15 -10
  22. package/dist/doc-tags-area/index.d.ts +9 -19
  23. package/dist/doc-tags-area/index.js +12 -2
  24. package/dist/factory-context/index.d.ts +163 -1
  25. package/dist/footer-with-defaults/index.d.ts +12 -13
  26. package/dist/footer-with-defaults/index.js +8 -10
  27. package/dist/head-with-defaults/index.d.ts +12 -16
  28. package/dist/head-with-defaults/index.js +7 -9
  29. package/dist/header-with-defaults/index.d.ts +10 -31
  30. package/dist/header-with-defaults/index.js +15 -18
  31. package/dist/integrations/claude-resources/generate.js +48 -11
  32. package/dist/nav-source-docs/index.d.ts +20 -54
  33. package/dist/nav-source-docs/index.js +9 -10
  34. package/dist/route-context/index.d.ts +24 -0
  35. package/dist/route-context/index.js +147 -0
  36. package/dist/route-enumerators/index.d.ts +25 -74
  37. package/dist/route-enumerators/index.js +17 -18
  38. package/dist/routes/_chrome.d.ts +6 -25
  39. package/dist/routes/_chrome.js +14 -387
  40. package/dist/routes/_context.d.ts +10 -43
  41. package/dist/routes/_context.js +29 -157
  42. package/dist/safelist.css +1 -1
  43. package/dist/sidebar-with-defaults/index.d.ts +8 -15
  44. package/dist/sidebar-with-defaults/index.js +6 -10
  45. package/dist/tag-pages/index.d.ts +12 -3
  46. package/dist/tag-pages/index.js +24 -19
  47. package/dist/versions-page/index.d.ts +10 -3
  48. package/dist/versions-page/index.js +18 -14
  49. package/eject/doc-pager/index.tsx +8 -10
  50. package/package.json +14 -6
  51. package/routes-src/_chrome.tsx +31 -552
  52. package/routes-src/_context.ts +37 -269
@@ -1,50 +1,19 @@
1
1
  import type { Settings } from "../settings.js";
2
2
  import type { ColorScheme } from "../color-scheme-utils.js";
3
- import type { FactoryI18n } from "../factory-context/index.js";
4
- import { type UrlHelpers } from "../url-helpers/index.js";
5
- import { toRouteSlug, toSlugParams } from "../slug/index.js";
6
- import { type TagVocabularyEntry } from "../tag-helpers/index.js";
7
- import type { DocNavNode } from "../doc-page-props/index.js";
8
- import type { HeadingItem } from "../extract-headings/index.js";
9
- import { stableDocs, isNavVisible, buildNavTree, collectAutoIndexNodes, groupSatelliteNodes, findNode, firstRoutedHref } from "./_docs-helpers.js";
10
- export interface RouteContextPayload {
11
- settings: Settings;
12
- translations: Record<string, Record<string, string>>;
13
- tagVocabulary: readonly TagVocabularyEntry[];
14
- colorSchemes: Record<string, ColorScheme> | null;
15
- }
16
- /** The serializable route-context (from the virtual module). */
3
+ import { type RouteContextPayload } from "../route-context/index.js";
4
+ export type { RouteContextPayload, TagInfo } from "../route-context/index.js";
5
+ /** The serializable route-context payload (from the virtual module). */
17
6
  export declare const ctx: RouteContextPayload;
7
+ declare const routeCtx: import("../factory-context/index.js").RouteContext<Settings>;
8
+ export { routeCtx };
18
9
  export declare const settings: Settings;
19
10
  /** Host color-scheme palette map. `null` when not supplied — `_chrome.tsx`
20
11
  * falls back to `DEFAULT_SCHEME` in that case. */
21
12
  export declare const colorSchemes: Record<string, ColorScheme> | null;
22
- export declare const defaultLocale: string;
23
- export declare const locales: readonly string[];
24
- export declare function getLocaleConfig(locale: string): {
13
+ export declare const i18n: import("../factory-context/index.js").FactoryI18n, defaultLocale: string, locales: readonly string[], getLocaleConfig: (locale: string) => {
25
14
  label: string;
26
15
  dir: string;
27
- } | undefined;
28
- export declare function getLocaleLabel(locale: string): string;
29
- export declare function t(key: string, locale?: string): string;
30
- export declare const i18n: FactoryI18n;
31
- export declare const urlHelpers: UrlHelpers;
32
- export declare const withBase: (path: string) => string, stripBase: (path: string) => string, docsUrl: (slug: string, lang?: string) => string, versionedDocsUrl: (slug: string, versionSlug: string, lang?: string) => string, navHref: (path: string, lang: string | undefined, currentVersion: string | undefined) => string, isDefaultLocaleOnlyPath: (path: string) => boolean, absoluteUrl: (pageUrl: string) => string | undefined, isExternal: (href: string) => boolean, resolveHref: (href: string) => string, buildLocaleLinks: (currentPath: string, currentLang: string) => import("../url-helpers/index.js").LocaleLink[];
33
- export declare function getCategoryOrder(): string[];
34
- export declare function getNavSectionForSlug(slug: string): string | undefined;
35
- export declare function getNavSubtree(tree: DocNavNode[], categoryMatch?: string): DocNavNode[];
36
- export declare function extractHeadings(body: string): HeadingItem[];
37
- export interface TagInfo {
38
- tag: string;
39
- count: number;
40
- docs: {
41
- slug: string;
42
- title: string;
43
- description?: string;
44
- }[];
45
- }
46
- export declare function resolveTagBound(raw: string): import("../tag-helpers/index.js").ResolvedTag;
47
- export declare function collectTags(entries: ReadonlyArray<{
16
+ } | undefined, getLocaleLabel: (locale: string) => string, t: (key: string, locale?: string) => string, urlHelpers: import("../url-helpers/index.js").UrlHelpers, withBase: (path: string) => string, stripBase: (path: string) => string, docsUrl: (slug: string, lang?: string) => string, versionedDocsUrl: (slug: string, versionSlug: string, lang?: string) => string, navHref: (path: string, lang: string | undefined, currentVersion: string | undefined) => string, isDefaultLocaleOnlyPath: (path: string) => boolean, absoluteUrl: (pageUrl: string) => string | undefined, isExternal: (href: string) => boolean, resolveHref: (href: string) => string, buildLocaleLinks: (currentPath: string, currentLang: string) => import("../url-helpers/index.js").LocaleLink[], getCategoryOrder: () => string[], getNavSectionForSlug: (slug: string) => string | undefined, getNavSubtree: (tree: import("./_docs-helpers.js").DocNavNode[], categoryMatch?: string) => import("./_docs-helpers.js").DocNavNode[], extractHeadings: (body: string) => import("../extract-headings/index.js").HeadingItem[], resolveTagBound: (raw: string) => import("../tag-helpers/index.js").ResolvedTag, collectTags: (entries: ReadonlyArray<{
48
17
  id: string;
49
18
  data: {
50
19
  slug?: string;
@@ -54,8 +23,6 @@ export declare function collectTags(entries: ReadonlyArray<{
54
23
  };
55
24
  }>, slugFn: (id: string, data: {
56
25
  slug?: string;
57
- }) => string): Map<string, TagInfo>;
58
- export declare const resolveNavSource: (lang: string, currentVersion: string | undefined, options?: import("../nav-source-docs/index.js").NavSourceOptions) => import("../nav-source-docs/index.js").NavSourceDocs, resolveVersionedLocaleSource: (versionSlug: string, versionDocsDir: string | undefined, lang: string, localeDir: string | undefined, options?: import("../nav-source-docs/index.js").NavSourceOptions) => import("../nav-source-docs/index.js").NavSourceDocs, loadNavSourceDocs: (lang: string, currentVersion: string | undefined) => import("../nav-source-docs/index.js").NavSourceDocs;
59
- export declare const buildDocRouteEntries: (args: import("../doc-route-entries/index.js").BuildDocRouteEntriesArgs) => import("../doc-route-entries/index.js").DocRouteEntry[];
60
- export declare const enumerateDocsRoutes: (locale: string) => string[], enumerateTagsRoutes: (locale: string) => string[], enumerateVersionedRoutes: (version: import("../route-enumerators/index.js").VersionConfigForEnum, locale: string) => string[], enumerateAllRoutes: () => Map<string, string>;
61
- export { buildNavTree, groupSatelliteNodes, findNode, firstRoutedHref, collectAutoIndexNodes, isNavVisible, stableDocs, toRouteSlug, toSlugParams, };
26
+ }) => string) => Map<string, import("./_context.js").TagInfo>, resolveNavSource: (lang: string, currentVersion: string | undefined, options?: import("../nav-source-docs/index.js").NavSourceOptions) => import("../nav-source-docs/index.js").NavSourceDocs, resolveVersionedLocaleSource: (versionSlug: string, versionDocsDir: string | undefined, lang: string, localeDir: string | undefined, options?: import("../nav-source-docs/index.js").NavSourceOptions) => import("../nav-source-docs/index.js").NavSourceDocs, loadNavSourceDocs: (lang: string, currentVersion: string | undefined) => import("../nav-source-docs/index.js").NavSourceDocs, buildDocRouteEntries: (args: import("../doc-route-entries/index.js").BuildDocRouteEntriesArgs) => import("../doc-route-entries/index.js").DocRouteEntry[], enumerateDocsRoutes: (locale: string) => string[], enumerateTagsRoutes: (locale: string) => string[], enumerateVersionedRoutes: (version: import("../route-enumerators/index.js").VersionConfigForEnum, locale: string) => string[], enumerateAllRoutes: () => Map<string, string>, buildNavTree: (docs: import("./_docs-helpers.js").DocPageEntry[], locale: string, categoryMeta: Map<string, import("./_docs-helpers.js").CategoryMeta> | undefined, buildHref: import("../factory-context/index.js").RouteHrefBuilder, options?: {
27
+ buildHref?: import("../factory-context/index.js").RouteHrefBuilder;
28
+ }) => import("./_docs-helpers.js").DocNavNode[], groupSatelliteNodes: (tree: import("./_docs-helpers.js").DocNavNode[], prefixes: string[]) => import("./_docs-helpers.js").DocNavNode[], findNode: (nodes: import("./_docs-helpers.js").DocNavNode[], slug: string) => import("./_docs-helpers.js").DocNavNode | undefined, firstRoutedHref: (node: import("./_docs-helpers.js").DocNavNode) => string | undefined, collectAutoIndexNodes: (nodes: import("./_docs-helpers.js").DocNavNode[]) => import("./_docs-helpers.js").DocNavNode[], isNavVisible: (doc: import("./_docs-helpers.js").DocPageEntry) => boolean, stableDocs: (collectionName: string) => import("./_docs-helpers.js").DocPageEntry[], toRouteSlug: (id: string) => string, toSlugParams: (routeSlug: string) => string[];
@@ -1,64 +1,19 @@
1
1
  import { routeContext } from "virtual:zudo-doc-route-context";
2
- import { makeUrlHelpers } from "../url-helpers/index.js";
3
2
  import {
4
- loadCategoryMeta
5
- } from "../sidebar-tree/index.js";
6
- import { extractHeadings as extractHeadingsBase } from "../extract-headings/index.js";
7
- import { toRouteSlug, toSlugParams } from "../slug/index.js";
8
- import { resolveTag } from "../tag-helpers/index.js";
9
- import {
10
- getCategoryOrder as getCategoryOrderBase,
11
- getNavSectionForSlug as getNavSectionForSlugBase,
12
- getNavSubtree as getNavSubtreeBase
13
- } from "../nav-scope/index.js";
14
- import { mergeLocaleDocs } from "../locale-merge/index.js";
15
- import {
16
- createNavSourceDocs
17
- } from "../nav-source-docs/index.js";
18
- import {
19
- createDocRouteEntries
20
- } from "../doc-route-entries/index.js";
21
- import {
22
- createRouteEnumerators
23
- } from "../route-enumerators/index.js";
24
- import {
25
- stableDocs,
26
- isNavVisible,
27
- buildNavTree,
28
- buildBreadcrumbs,
29
- collectAutoIndexNodes,
30
- groupSatelliteNodes,
31
- findNode,
32
- firstRoutedHref
33
- } from "./_docs-helpers.js";
3
+ createRouteContext
4
+ } from "../route-context/index.js";
34
5
  const ctx = routeContext;
35
- const settings = ctx.settings;
36
- const translations = ctx.translations;
37
- const tagVocabulary = ctx.tagVocabulary;
38
- const colorSchemes = ctx.colorSchemes;
39
- const defaultLocale = settings.defaultLocale;
40
- const locales = [
41
- defaultLocale,
42
- ...Object.keys(settings.locales)
43
- ];
44
- function getLocaleConfig(locale) {
45
- return settings.locales[locale];
46
- }
47
- function getLocaleLabel(locale) {
48
- if (locale === defaultLocale) return defaultLocale.toUpperCase();
49
- return getLocaleConfig(locale)?.label ?? locale.toUpperCase();
50
- }
51
- function t(key, locale = defaultLocale) {
52
- return translations[locale]?.[key] ?? translations[defaultLocale]?.[key] ?? key;
53
- }
54
- const i18n = {
6
+ const routeCtx = createRouteContext(ctx);
7
+ const settings = routeCtx.settings;
8
+ const colorSchemes = routeCtx.colorSchemes;
9
+ const {
10
+ i18n,
55
11
  defaultLocale,
56
12
  locales,
13
+ getLocaleConfig,
57
14
  getLocaleLabel,
58
- t
59
- };
60
- const urlHelpers = makeUrlHelpers(settings, i18n);
61
- const {
15
+ t,
16
+ urlHelpers,
62
17
  withBase,
63
18
  stripBase,
64
19
  docsUrl,
@@ -68,115 +23,31 @@ const {
68
23
  absoluteUrl,
69
24
  isExternal,
70
25
  resolveHref,
71
- buildLocaleLinks
72
- } = urlHelpers;
73
- function getCategoryOrder() {
74
- return getCategoryOrderBase(settings.headerNav);
75
- }
76
- function getNavSectionForSlug(slug) {
77
- return getNavSectionForSlugBase(slug, settings.headerNav);
78
- }
79
- function getNavSubtree(tree, categoryMatch) {
80
- return getNavSubtreeBase(tree, categoryMatch, settings.headerNav);
81
- }
82
- function extractHeadings(body) {
83
- return extractHeadingsBase(body, {
84
- tocMinDepth: settings.tocMinDepth,
85
- tocMaxDepth: settings.tocMaxDepth,
86
- strategy: settings.headingIdStrategy
87
- });
88
- }
89
- function getVocab() {
90
- return settings.tagVocabulary ? tagVocabulary : false;
91
- }
92
- function resolveTagBound(raw) {
93
- return resolveTag(raw, getVocab(), settings.tagGovernance);
94
- }
95
- function collectTags(entries, slugFn) {
96
- const tagMap = /* @__PURE__ */ new Map();
97
- for (const entry of entries) {
98
- const rawTags = entry.data.tags ?? [];
99
- const slug = slugFn(entry.id, entry.data);
100
- const seen = /* @__PURE__ */ new Set();
101
- for (const raw of rawTags) {
102
- const resolved = resolveTagBound(raw);
103
- if (resolved.deprecated) continue;
104
- if (seen.has(resolved.canonical)) continue;
105
- seen.add(resolved.canonical);
106
- if (!tagMap.has(resolved.canonical)) {
107
- tagMap.set(resolved.canonical, { tag: resolved.canonical, count: 0, docs: [] });
108
- }
109
- const info = tagMap.get(resolved.canonical);
110
- info.count++;
111
- info.docs.push({
112
- slug,
113
- title: entry.data.title ?? "",
114
- description: entry.data.description
115
- });
116
- }
117
- }
118
- return tagMap;
119
- }
120
- const navSourceDocs = createNavSourceDocs({
121
- defaultLocale,
122
- docsDir: settings.docsDir,
123
- getVersions: () => settings.versions,
124
- getLocaleConfig,
125
- loadCategoryMeta,
126
- isNavVisible,
127
- isDefaultLocaleOnlyPath,
128
- stableDocs
129
- });
130
- const {
131
- resolveNavSource,
132
- resolveVersionedLocaleSource,
133
- loadNavSourceDocs
134
- } = navSourceDocs;
135
- const docRouteEntries = createDocRouteEntries({
136
- buildNavTree: (docs, locale, categoryMeta) => buildNavTree(
137
- docs,
138
- locale,
139
- categoryMeta,
140
- (slug, loc) => docsUrl(slug, loc)
141
- ),
142
- buildBreadcrumbs: (tree, slug, locale, urlFor) => buildBreadcrumbs(
143
- tree,
144
- slug,
145
- locale === defaultLocale ? withBase("/") : withBase(`/${locale}/`),
146
- urlFor
147
- ),
148
- collectAutoIndexNodes,
26
+ buildLocaleLinks,
27
+ getCategoryOrder,
149
28
  getNavSectionForSlug,
150
29
  getNavSubtree,
151
- toRouteSlug,
152
- toSlugParams,
153
- extractHeadings
154
- });
155
- const { buildDocRouteEntries } = docRouteEntries;
156
- const routeEnumerators = createRouteEnumerators({
157
- defaultLocale,
158
- getLocaleKeys: () => Object.keys(settings.locales),
159
- getVersions: () => settings.versions,
160
- getDocTags: () => settings.docTags,
161
- docsUrl,
162
- versionedDocsUrl,
163
- withBase,
164
- loadDocs: (collectionName) => stableDocs(collectionName),
165
- isDefaultLocaleOnlyPath,
166
- collectTags: (docs, slugFn) => collectTags(docs, slugFn),
167
- toRouteSlug,
168
- buildNavTree: (docs, locale, categoryMeta) => buildNavTree(docs, locale, categoryMeta, (slug, loc) => docsUrl(slug, loc)),
169
- collectAutoIndexNodes,
30
+ extractHeadings,
31
+ resolveTagBound,
32
+ collectTags,
170
33
  resolveNavSource,
171
34
  resolveVersionedLocaleSource,
172
- mergeLocaleDocs
173
- });
174
- const {
35
+ loadNavSourceDocs,
36
+ buildDocRouteEntries,
175
37
  enumerateDocsRoutes,
176
38
  enumerateTagsRoutes,
177
39
  enumerateVersionedRoutes,
178
- enumerateAllRoutes
179
- } = routeEnumerators;
40
+ enumerateAllRoutes,
41
+ buildNavTree,
42
+ groupSatelliteNodes,
43
+ findNode,
44
+ firstRoutedHref,
45
+ collectAutoIndexNodes,
46
+ isNavVisible,
47
+ stableDocs,
48
+ toRouteSlug,
49
+ toSlugParams
50
+ } = routeCtx;
180
51
  export {
181
52
  absoluteUrl,
182
53
  buildDocRouteEntries,
@@ -212,6 +83,7 @@ export {
212
83
  resolveNavSource,
213
84
  resolveTagBound,
214
85
  resolveVersionedLocaleSource,
86
+ routeCtx,
215
87
  settings,
216
88
  stableDocs,
217
89
  stripBase,
package/dist/safelist.css CHANGED
@@ -1,2 +1,2 @@
1
1
  /* generated by gen-safelist.mjs — do not edit by hand */
2
- @source inline("-mb-px -ml-hsp-sm -translate-x-full 2xl:w-[24px] [&::-webkit-details-marker]:hidden [&_a]:text-accent [&_a]:underline [&_nav]:mb-0 [data-kbd-shortcut] [doc-history-meta] [doc-history] [doc-layout] [llms-txt] a a2 abbr about above absent absolute across activated active actual added admonition admonition- admonition-body admonition-title after after-breadcrumb after-content after-navigate after-sidebar after-title against agent agents ai-chat ai-chat-md ai-chat-trigger alert align-top all allow-same-origin allow-scripts alone already already-executed an anchor anchored and and/or animate-spin announce antialiased any application/json application/xml applies apply-css-vars approach are area arg aria-atomic aria-busy aria-controls aria-current aria-disabled aria-expanded aria-haspopup aria-hidden aria-label aria-live aria-orientation aria-pressed aria-selected aria-valuemax aria-valuemin aria-valuenow arrive arrows article as asc aside aspect-[1200/630] aspect-square assets assigning assistant async at attach attribute attributes auto autogenerated available avoid await away b back backdrop:bg-bg/30 backdrop:bg-bg/80 backdrop:bg-overlay/60 backdrop:z-modal-backdrop background backtick backticks baked banner bare base base64 based batch be because before below best between bg bg-[#fff] bg-accent bg-bg bg-chat-assistant-bg bg-chat-user-bg bg-code-bg bg-fg bg-info/10 bg-info/5 bg-muted bg-overlay/30 bg-surface bg-transparent bg-warning/10 bg-warning/5 bi bigint bin blank blanks blob block blockquote blocks blur body body-end-components body-end-scripts boolean bootstrap border border-accent border-b border-b-2 border-b-[5px] border-bg/30 border-collapse border-danger border-dashed border-fg border-info/30 border-l border-l-0 border-l-[3px] border-muted border-none border-r border-solid border-t border-t-[2px] border-t-[3px] border-transparent border-warning/30 border-y both bottom-vsp-xl box-border br breadcrumb:end breadcrumb:start break-words browser browsers btn bug build bundler but button buttons by bypassed cached call caller can cancellation cannot canonical caption carry cases cat-nav- catch category catppuccin-latte caught caution center center/contain change changed changes checkbox child ci circle cite class class-less claude claude-agents claude-commands claude-md claude-skills cleaned clear clear-css-vars clearing click client client-router client-side clip clobbering close closed closing code code-block-sr-announce code-group code-group-panel col col-resize colgroup collision color color-scheme color-scheme-changed color-scheme-provider color-tweak colorization colors command commands commit compare component component:github-link component:language-switcher component:search component:theme-toggle component:version-switcher compute computed concrete configuration configure configured connect const consumer consumes container containers containing content content-admonition content-type content-wrapper:end content-wrapper:start contents context controller controls converts copy correct correctly corrupt count covered covers cp crashes created cross-component crumb- cs css cur current cursor cursor-not-allowed cursor-pointer custom danger dark data data-active data-admonition data-base data-close-search data-group-id data-header data-header-logo data-header-nav data-header-right data-kbd-shortcut data-loading-index data-mermaid-enlarge-ready data-mermaid-rendered data-mermaid-src data-nav-item data-nav-item-dropdown data-nav-more data-nav-more-menu data-nav-more-toggle data-no-results data-open-search data-pan-active data-processed data-result-count-template data-search-count data-search-count-narrow data-search-dialog data-search-input data-search-placeholder data-search-results data-search-unavailable data-sidebar-hidden data-sidebar-resizer data-site-nav data-tab-btn data-tab-default data-tab-label data-tab-value data-tabs data-taglist-group data-testid data-theme data-theme/style data-variant data-version-banner data-version-menu data-version-switcher data-version-toggle data-zfb-transition-persist dd debounced decimal declare decoration-muted default defaults del delegated desc description design design-token-panel design-token-trigger desktop desktop-sidebar desktop-sidebar-toggle desktop-sidebar-toggle-island destructive detach detached details deterministic develop dfn diagram diagrams dialog dieser diff diff-line-added diff-line-content diff-line-empty diff-line-num diff-line-removed diff-row dir directly directories directory disabled disabled:opacity-50 disc display:none dist div dl do doc doc-card- doc-history doc-history-generate doc-history-panel doc-history-trigger doc-pager docs docs- docs-v- document document-level does double-registration drag draggable drop dropdown dropdown-child dropdown-parent dropdowns dt duration-150 duration-200 during dynamically e e2e each earlier ease-in-out edge eject ejected el element elements els else em emit emitting empty empty/undefined en enable end enlarged entire entities entries entry error escape escaped even eventually every exactly excerpt existing exists exit expected export extends failed fall fallback fallbacks falls false fast feature feed fg fields fieldset figcaption figure file fill fills finally find fire fires first fixed fixtures flag flash flat flex flex-1 flex-col flex-wrap flip flipping flips focus focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2 focus-visible:underline focus:border-accent focus:outline-none focus:underline font font-bold font-medium font-mono font-semibold footer footer- for form found free fresh from frontmatter frontmatter-preview frozen fs-extra full fully function further g gap-[0.3em] gap-[clamp(1.5rem,3vw,4rem)] gap-hsp-2xs gap-hsp-md gap-hsp-sm gap-hsp-xl gap-hsp-xs gap-vsp-2xs gap-vsp-lg gap-vsp-md gap-vsp-xs gap-x-hsp-2xs gap-x-hsp-lg gap-x-hsp-md gap-x-hsp-sm gap-x-hsp-xs gap-y-vsp-2xs gap-y-vsp-lg gap-y-vsp-md gap-y-vsp-xs gaps gate generate generation genuine geometry get github github-link go got graph gray-matter grid grid-cols-1 grid-cols-2 group group-focus-visible:text-accent group-focus-visible:underline group-focus-within:block group-hover:bg-fg group-hover:block group-hover:text-accent group-hover:text-bg group-hover:underline group-open:rotate-90 guard h-[0.5rem] h-[0.625rem] h-[0.875rem] h-[1.125rem] h-[1.25rem] h-[1.575rem] h-[14px] h-[1lh] h-[2rem] h-[3.5rem] h-[3rem] h-[90vh] h-[calc(100%-3rem)] h-[calc(100vh-3.5rem)] h-dvh h-full h-icon-lg h-icon-md h-icon-sm h-icon-xs h1 h2 h3 h4 h5 h6 half hand handle handled handler handlers has hash-link have head head-links head-scripts header header- header-call:end header-call:start height here hex hidden highlight highlighter history hit horizontal host hover:bg-[color-mix(in_srgb,var(--color-surface)_80%,var(--color-fg)_20%)] hover:bg-accent-hover hover:bg-accent/10 hover:bg-surface hover:border-accent hover:border-accent-hover hover:border-fg hover:text-accent hover:text-accent-hover hover:text-fg hover:underline hr href hrefs html i i18n/theme. i2 i3 i4 icon identical idle idx if iframe image image-enlarge image/png img import important imports in inactive inbox includes index index-load info inherit initial initialised injected inline inline-block inline-flex input input-clear ins inset-0 inside install instance instanceof instead instructions intended intent into invalid inverse invoke is issues it italic item item- items items-baseline items-center items-start its itself javascript justify-between justify-center justify-end justify-start katex kbd keep keeps kept keyboard keyboard-shortcut keydown keystroke keywords khroma label landing language-switcher last:border-b-0 later launch leading-relaxed leading-snug leading-tight leaf- leak leaves leaving left left-0 left:calc legend legitimate lg lg:block lg:border lg:border-fg lg:border-solid lg:flex lg:flex-col lg:flex-row lg:gap-hsp-xl lg:grid-cols-[repeat(auto-fit,minmax(12rem,1fr))] lg:h-[90vh] lg:hidden lg:justify-start lg:m-auto lg:max-h-[90vh] lg:max-w-[52.5rem] lg:ml-[var(--zd-sidebar-w)] lg:pt-vsp-2xl lg:px-hsp-2xl lg:py-vsp-2xl lg:text-left lg:w-[90vw] lg:w-[clamp(16rem,25%,22rem)] li li2 light like likely line linger link link- links list-disc list-none listener literal literals lives llms llms-txt load local locale locales log longest-match look lostpointercapture lower lowercased luminance m m-0 m21 m6 main make malformed malicious maps mark marks matches matching math math-display math-inline max max-h-[80vh] max-h-[85vh] max-h-[90vh] max-h-full max-h-none max-w-[46rem] max-w-[80rem] max-w-[85%] max-w-[85vw] max-w-[90vw] max-w-[clamp(50rem,75vw,90rem)] max-w-full max-w-none may mb-0 mb-vsp-2xs mb-vsp-lg mb-vsp-md mb-vsp-sm mb-vsp-xl mb-vsp-xs measures measuring mechanism menu merged mermaid message messages meta metadata min-h-[60vh] min-h-[calc(100vh-3.5rem)] min-h-screen min-w-0 min-w-[10rem] min-w-[8rem] mirror mirrors missing ml-auto ml-hsp-2xl ml-hsp-lg ml-hsp-sm ml-hsp-xl mod mode mounted mouseenter mouseleave mr-hsp-sm mt-0 mt-vsp-2xl mt-vsp-2xs mt-vsp-3xs mt-vsp-lg mt-vsp-md mt-vsp-sm mt-vsp-xl must mutates mutation mutations mx-auto my-vsp-lg my-vsp-md name named native nav nav-card- navigating navigation navigations near needs new newly-swapped next no no-enlarge no-op no-repeat no-underline node node:buffer node:fs node:fs/promises node:module node:path nodes nofollow noindex non-empty non-persisted non-string none noopener noreferrer normal not not-object note now null number numeric object object-contain observe observer occurred of off og:description og:image og:image:alt og:image:height og:image:width og:title og:type og:url ol old older on once one only opacity-60 open open/close option or original other others out outline-none over overflow overflow-auto overflow-hidden overflow-x-auto overflow-y-auto overflow-y:auto overwrite own p p-0 p-hsp-lg p-hsp-md p-hsp-sm p-hsp-xl package package-owned packages padding page page-loading page-loading-overlay page-loading-spinner page-navigate-end pages pages/. paint pan panel panels parent parse parsed pass passed path paths pattern pb-[50vh] pb-vsp-md pb-vsp-xl pb-vsp-xs per per-call per-link permanently persisted pi pick picked picks picocolors pins pipelines pl-[1.25rem] pl-hsp-lg pl-hsp-sm pl-hsp-xl place placeholder placeholder:text-muted plain plural plus pnpm pointer-events-none pointercancel pointerdown pointermove pointerup polite polygon polyline populates port position position:fixed pr-[4px] pr-hsp-lg pr-hsp-md pr-hsp-sm pr-hsp-xl pre pre-lowercased preact preact/compat preact/hooks preact/jsx-runtime preload pres preserved produce produced produces production project propagating properties property props provided proxy pt-[0.15rem] pt-[2px] pt-vsp-3xs pt-vsp-md pt-vsp-sm pt-vsp-xl pt-vsp-xs ptag- public purely px px-hsp-2xl px-hsp-2xs px-hsp-lg px-hsp-md px-hsp-sm px-hsp-xl px-hsp-xs py-0 py-[2px] py-[calc(var(--spacing-vsp-xs)+0.15rem)] py-hsp-2xs py-hsp-sm py-hsp-xs py-vsp-2xs py-vsp-3xs py-vsp-lg py-vsp-md py-vsp-sm py-vsp-xl py-vsp-xs q query question r raw re-encode/decode re-lowercase re-querying re-render re-renders re-run re-running re-selects reach reached reaches read reading reads ready real real-value recorded recovers references refetch refreshes regenerate regenerates reinit reinits relative reload remains remove removed render rendered renders reorder repaint repeated repeating replaced replaces repopulate requires reserved resize resize-x resolve resolved resolves response restore restores result result-click results results-area retry return returns revision revisions rewrite right- right-0 ro robots role root rotate-180 rotate-90 round round-trip rounded rounded-[0.75rem] rounded-bl-[0.25rem] rounded-bl-[1rem] rounded-br-[0.25rem] rounded-br-[1rem] rounded-full rounded-lg rounded-t-[1rem] route router routes routes-src running runs runtime s safe safer same same-locale samp scanned schema-mismatch schema-missing scheme score scored script script-eval script-evaluation script-injection scripts scroll scrollbar scrolled scrollend search search-index searched section section- see sel-bg sel-fg select select-none self self-start sentinel separator server server-rendered set sets setup shadow-[0_1px_3px_color-mix(in_srgb,var(--color-fg)_8%,transparent)] shadow-lg shared shiki ship ships short shortcut should show shown shrink-0 sidebar sidebar- sidebar-toggle-island sidebar-tree-island signal similarity single singular site-search site-tree-nav-island sitemap- sites size skill skills skipping skips slash slug sm:border sm:border-muted sm:flex-row sm:grid-cols-2 sm:h-auto sm:items-center sm:justify-between sm:max-h-[80vh] sm:max-w-[52rem] sm:mx-auto sm:my-[10vh] sm:rounded-lg small smooth snapshot snapshots so soft soft-nav solid some somehow source sources space-y-vsp-2xs spacing span spans spec specifier specifiers sr-only src stale start state status stay sticky still stop stored stray string strings strip stroke-linecap stroke-linejoin stroke-width strong style style-attribute styles stylesheet sub subagents subsequent success successful summary sup support survives svg swap swapped swaps synchronous synchronously syntactically syntect t tab tab-item tab-panel tabindex table tablist tabpanel tabs tabs-container tabs-content tabs-nav tag tag- tag-item- tags tags:audit tbody td temp temp-element template temporary temporary-element terminal terms test-results text text-accent text-bg text-body text-caption text-center text-chat-assistant-text text-chat-user-text text-code-fg text-danger text-display text-fg text-heading text-info text-left text-micro text-muted text-muted/50 text-right text-small text-title text-warning text/plain textarea tfoot th that the thead their them theme theme-color theme-toggle theme/token then there these they this through throw time tip title to toggle toggle-ai-chat toggle-design-token-panel toggles token tokens tolerates too toolbar top-0 top-[3.5rem] top-full top-level total touches tp tr tracked tracking-wider trade-off transition transition-[background,color,border-color] transition-[left,color] transition-colors transition-transform translate-x-0 translations transparent treats tree tree-child- tree-item- tree-top- trick trigger trigger:ai-chat trigger:design-token-panel triggers true truncate truncated try turn twitter:card twitter:creator twitter:description twitter:image twitter:site twitter:title two type u ul unavailable unchanged undefined under underline understand unknown unmaintained unobserve unreadable unrelated unreleased unreliable unset unsupported up uppercase usage use used user uses utf-8 utf8 utilities v v2 val value value-reader values var variable version version- version-menu version-switcher vertical via video viewport virtual:zudo-doc-route-context visible vitesse-dark vocabulary w w-1/2 w-[0.5rem] w-[0.625rem] w-[0.875rem] w-[1.125rem] w-[1.575rem] w-[1.5rem] w-[1.75rem] w-[14px] w-[16px] w-[16rem] w-[18px] w-[280px] w-[2rem] w-[320px] w-[90vw] w-[var(--zd-sidebar-w)] w-dvw w-full w-icon-lg w-icon-md w-icon-sm w-icon-xs want warning was watching wbr wbr- we website went were what when where whereas whether which while whitespace-nowrap whitespace-pre whole will with without word working worktrees would wrap wrapper wrappers written wrong wrote xl:flex xl:hidden y-scrollbar yet you your z-dropdown z-local-1 z-modal z-modal-backdrop z-sidebar z-toolbar zd-content zd-desktop-sidebar-toggle zd-doc-content-band zd-enlarge-btn zd-enlarge-dialog zd-enlarge-dialog-close zd-enlargeable zd-html-preview-code zd-mermaid-dialog zd-mermaid-enlargeable zd-mermaid-tool-btn zd-mermaid-toolbar zd-mermaid-transform zd-mermaid-viewport zd-sidebar-content-wrapper zd-sidebar-open zfb zfb:after-swap zfb:before-preparation zod zoom zudo-doc-design-tokens/v1 zudo-doc-sidebar-visible zudo-doc-sidebar-width zudo-doc-theme zudo-doc-theme-bridge");
2
+ @source inline("-mb-px -ml-hsp-sm -translate-x-full 2xl:w-[24px] [&::-webkit-details-marker]:hidden [&_a]:text-accent [&_a]:underline [&_nav]:mb-0 [data-kbd-shortcut] [doc-history-meta] [doc-history] [doc-layout] [llms-txt] a a2 abbr about above absent absolute across activated active actual added admonition admonition- admonition-body admonition-title after after-breadcrumb after-content after-navigate after-sidebar after-title against agent agents ai-chat ai-chat-md ai-chat-trigger alert align-top all allow-same-origin allow-scripts alone already already-executed an anchor anchored and and/or animate-spin announce antialiased any application/json application/xml applies apply-css-vars approach are area arg aria-atomic aria-busy aria-controls aria-current aria-disabled aria-expanded aria-haspopup aria-hidden aria-label aria-live aria-orientation aria-pressed aria-selected aria-valuemax aria-valuemin aria-valuenow arrive arrows article as asc aside aspect-[1200/630] aspect-square asset- assets assigning assistant async at attach attribute attributes auto autogenerated available avoid await away b back backdrop:bg-bg/30 backdrop:bg-bg/80 backdrop:bg-overlay/60 backdrop:z-modal-backdrop background backtick backticks baked banner bare base base64 based batch be because before below best between bg bg-[#fff] bg-accent bg-bg bg-chat-assistant-bg bg-chat-user-bg bg-code-bg bg-fg bg-info/10 bg-info/5 bg-muted bg-overlay/30 bg-surface bg-transparent bg-warning/10 bg-warning/5 bi bigint bin blank blanks blob block blockquote blocks blur body body-end-components body-end-scripts boolean bootstrap border border-accent border-b border-b-2 border-b-[5px] border-bg/30 border-collapse border-danger border-dashed border-fg border-info/30 border-l border-l-0 border-l-[3px] border-muted border-none border-r border-solid border-t border-t-[2px] border-t-[3px] border-transparent border-warning/30 border-y both bottom-vsp-xl box-border br breadcrumb:end breadcrumb:start break-words browser browsers btn bug build bundler but button buttons by bypassed cached call caller can cancellation cannot canonical caption carry cases cat-nav- catch category catppuccin-latte caught caution center center/contain change changed changes checkbox child ci circle cite class class-less claude claude-agents claude-commands claude-md claude-skills cleaned clear clear-css-vars clearing click client client-router client-side clip clobbering close closed closing code code-block-sr-announce code-group code-group-panel col col-resize colgroup collision color color-scheme color-scheme-changed color-scheme-provider color-tweak colorization colors command commands commit compare component component:github-link component:language-switcher component:search component:theme-toggle component:version-switcher compute computed concrete configuration configure configured connect const consumer consumes container containers containing content content-admonition content-type content-wrapper:end content-wrapper:start contents context controller controls converts copy correct correctly corrupt count covered covers cp crashes created cross-component crumb- cs css cur current cursor cursor-not-allowed cursor-pointer custom danger dark data data-active data-admonition data-base data-close-search data-group-id data-header data-header-logo data-header-nav data-header-right data-kbd-shortcut data-loading-index data-mermaid-enlarge-ready data-mermaid-rendered data-mermaid-src data-nav-item data-nav-item-dropdown data-nav-more data-nav-more-menu data-nav-more-toggle data-no-results data-open-search data-pan-active data-processed data-result-count-template data-search-count data-search-count-narrow data-search-dialog data-search-input data-search-placeholder data-search-results data-search-unavailable data-sidebar-hidden data-sidebar-resizer data-site-nav data-tab-btn data-tab-default data-tab-label data-tab-value data-tabs data-taglist-group data-testid data-theme data-theme/style data-variant data-version-banner data-version-menu data-version-switcher data-version-toggle data-zfb-transition-persist dd debounced decimal declare decoration-muted default defaults del delegated desc description design design-token-panel design-token-trigger desktop desktop-sidebar desktop-sidebar-toggle desktop-sidebar-toggle-island destructive detach detached details deterministic develop dfn diagram diagrams dialog dieser diff diff-line-added diff-line-content diff-line-empty diff-line-num diff-line-removed diff-row dir directly directories directory disabled disabled:opacity-50 disc display:none dist div dl do doc doc-card- doc-history doc-history-generate doc-history-panel doc-history-trigger doc-pager docs docs- docs-v- document document-level does double-registration drag draggable drop dropdown dropdown-child dropdown-parent dropdowns dt duration-150 duration-200 during dynamically e e2e each earlier ease-in-out edge eject ejected el element elements els else em emit emitting empty empty/undefined en enable end enlarged entire entities entries entry error escape escaped even eventually every exactly excerpt existing exists exit expected export extends failed fall fallback fallbacks falls false fast feature feed fg fields fieldset figcaption figure file fill fills finally find fire fires first fixed fixtures flag flash flat flex flex-1 flex-col flex-wrap flip flipping flips focus focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2 focus-visible:underline focus:border-accent focus:outline-none focus:underline font font-bold font-medium font-mono font-semibold footer footer- for form found free fresh from frontmatter frontmatter-preview frozen fs-extra full fully function further g gap-[0.3em] gap-[clamp(1.5rem,3vw,4rem)] gap-hsp-2xs gap-hsp-md gap-hsp-sm gap-hsp-xl gap-hsp-xs gap-vsp-2xs gap-vsp-lg gap-vsp-md gap-vsp-xs gap-x-hsp-2xs gap-x-hsp-lg gap-x-hsp-md gap-x-hsp-sm gap-x-hsp-xs gap-y-vsp-2xs gap-y-vsp-lg gap-y-vsp-md gap-y-vsp-xs gaps gate generate generation genuine geometry get github github-link go got graph gray-matter grid grid-cols-1 grid-cols-2 group group-focus-visible:text-accent group-focus-visible:underline group-focus-within:block group-hover:bg-fg group-hover:block group-hover:text-accent group-hover:text-bg group-hover:underline group-open:rotate-90 guard h-[0.5rem] h-[0.625rem] h-[0.875rem] h-[1.125rem] h-[1.25rem] h-[1.575rem] h-[14px] h-[1lh] h-[2rem] h-[3.5rem] h-[3rem] h-[90vh] h-[calc(100%-3rem)] h-[calc(100vh-3.5rem)] h-dvh h-full h-icon-lg h-icon-md h-icon-sm h-icon-xs h1 h2 h3 h4 h5 h6 half hand handle handled handler handlers has hash-link have head head-links head-scripts header header- header-call:end header-call:start height here hex hidden highlight highlighter history hit horizontal host hover:bg-[color-mix(in_srgb,var(--color-surface)_80%,var(--color-fg)_20%)] hover:bg-accent-hover hover:bg-accent/10 hover:bg-surface hover:border-accent hover:border-accent-hover hover:border-fg hover:text-accent hover:text-accent-hover hover:text-fg hover:underline hr href hrefs html i i18n/theme. i2 i3 i4 icon identical idle idx if iframe image image-enlarge image/png img import important imports in inactive inbox includes index index-load info inherit initial initialised injected inline inline-block inline-flex input input-clear ins inset-0 inside install instance instanceof instead instructions intended intent into invalid inverse invoke is issues it italic item item- items items-baseline items-center items-start its itself javascript justify-between justify-center justify-end justify-start katex kbd keep keeps kept keyboard keyboard-shortcut keydown keystroke keywords khroma label landing language-switcher last:border-b-0 later launch leading-relaxed leading-snug leading-tight leaf- leak leaves leaving left left-0 left:calc legend legitimate lg lg:block lg:border lg:border-fg lg:border-solid lg:flex lg:flex-col lg:flex-row lg:gap-hsp-xl lg:grid-cols-[repeat(auto-fit,minmax(12rem,1fr))] lg:h-[90vh] lg:hidden lg:justify-start lg:m-auto lg:max-h-[90vh] lg:max-w-[52.5rem] lg:ml-[var(--zd-sidebar-w)] lg:pt-vsp-2xl lg:px-hsp-2xl lg:py-vsp-2xl lg:text-left lg:w-[90vw] lg:w-[clamp(16rem,25%,22rem)] li li2 light like likely line linger link link- links list-disc list-none listener literal literals lives llms llms-txt load local locale locales log longest-match look lostpointercapture lower lowercased luminance m m-0 m21 m6 main make malformed malicious maps mark marks matches matching math math-display math-inline max max-h-[80vh] max-h-[85vh] max-h-[90vh] max-h-full max-h-none max-w-[46rem] max-w-[80rem] max-w-[85%] max-w-[85vw] max-w-[90vw] max-w-[clamp(50rem,75vw,90rem)] max-w-full max-w-none may mb-0 mb-vsp-2xs mb-vsp-lg mb-vsp-md mb-vsp-sm mb-vsp-xl mb-vsp-xs measures measuring mechanism menu merged mermaid message messages meta metadata min-h-[60vh] min-h-[calc(100vh-3.5rem)] min-h-screen min-w-0 min-w-[10rem] min-w-[8rem] mirror mirrors missing ml-auto ml-hsp-2xl ml-hsp-lg ml-hsp-sm ml-hsp-xl mod mode mounted mouseenter mouseleave mr-hsp-sm mt-0 mt-vsp-2xl mt-vsp-2xs mt-vsp-3xs mt-vsp-lg mt-vsp-md mt-vsp-sm mt-vsp-xl must mutates mutation mutations mx-auto my-vsp-lg my-vsp-md name named native nav nav-card- navigating navigation navigations near needs new newly-swapped next no no-enlarge no-op no-repeat no-underline node node:buffer node:fs node:fs/promises node:module node:path nodes nofollow noindex non-empty non-persisted non-string none noopener noreferrer normal not not-object note now null number numeric object object-contain observe observer occurred of off og:description og:image og:image:alt og:image:height og:image:width og:title og:type og:url ol old older on once one only opacity-60 open open/close option or original other others out outline-none over overflow overflow-auto overflow-hidden overflow-x-auto overflow-y-auto overflow-y:auto overwrite own p p-0 p-hsp-lg p-hsp-md p-hsp-sm p-hsp-xl package package-owned packages padding page page-loading page-loading-overlay page-loading-spinner page-navigate-end pages pages/. paint pan panel panels parent parse parsed pass passed path paths pattern pb-[50vh] pb-vsp-md pb-vsp-xl pb-vsp-xs per per-call per-link permanently persisted pi pick picked picks picocolors pins pipelines pl-[1.25rem] pl-hsp-lg pl-hsp-sm pl-hsp-xl place placeholder placeholder:text-muted plain plural plus pnpm pointer-events-none pointercancel pointerdown pointermove pointerup polite polygon polyline populates port position position:fixed pr-[4px] pr-hsp-lg pr-hsp-md pr-hsp-sm pr-hsp-xl pre pre-lowercased preact preact/compat preact/hooks preact/jsx-runtime preload pres preserved produce produced produces production project propagating properties property props provided proxy pt-[0.15rem] pt-[2px] pt-vsp-3xs pt-vsp-md pt-vsp-sm pt-vsp-xl pt-vsp-xs ptag- public purely px px-hsp-2xl px-hsp-2xs px-hsp-lg px-hsp-md px-hsp-sm px-hsp-xl px-hsp-xs py-0 py-[2px] py-[calc(var(--spacing-vsp-xs)+0.15rem)] py-hsp-2xs py-hsp-sm py-hsp-xs py-vsp-2xs py-vsp-3xs py-vsp-lg py-vsp-md py-vsp-sm py-vsp-xl py-vsp-xs q query question r raw re-encode/decode re-lowercase re-querying re-render re-renders re-run re-running re-selects reach reached reaches read reading reads ready real real-value recorded recovers ref- references refetch refreshes regenerate regenerates reinit reinits relative reload remains remove removed render rendered renders reorder repaint repeated repeating replaced replaces repopulate requires reserved resize resize-x resolve resolved resolves response restore restores result result-click results results-area retry return returns revision revisions rewrite right- right-0 ro robots role root rotate-180 rotate-90 round round-trip rounded rounded-[0.75rem] rounded-bl-[0.25rem] rounded-bl-[1rem] rounded-br-[0.25rem] rounded-br-[1rem] rounded-full rounded-lg rounded-t-[1rem] route router routes routes-src running runs runtime s safe safer same same-locale samp scanned schema-mismatch schema-missing scheme score scored script script- script-eval script-evaluation script-injection scripts scroll scrollbar scrolled scrollend search search-index searched section section- see sel-bg sel-fg select select-none self self-start sentinel separator server server-rendered set sets setup shadow-[0_1px_3px_color-mix(in_srgb,var(--color-fg)_8%,transparent)] shadow-lg shared shiki ship ships short shortcut should show shown shrink-0 sidebar sidebar- sidebar-toggle-island sidebar-tree-island signal similarity single singular site-search site-tree-nav-island sitemap- sites size skill skills skipping skips slash slug sm:border sm:border-muted sm:flex-row sm:grid-cols-2 sm:h-auto sm:items-center sm:justify-between sm:max-h-[80vh] sm:max-w-[52rem] sm:mx-auto sm:my-[10vh] sm:rounded-lg small smooth snapshot snapshots so soft soft-nav solid some somehow source sources space-y-vsp-2xs spacing span spans spec specifier specifiers sr-only src stale start state status stay sticky still stop stored stray string strings strip stroke-linecap stroke-linejoin stroke-width strong style style-attribute styles stylesheet sub subagents subsequent success successful summary sup support survives svg swap swapped swaps synchronous synchronously syntactically syntect t tab tab-item tab-panel tabindex table tablist tabpanel tabs tabs-container tabs-content tabs-nav tag tag- tag-item- tags tags:audit tbody td temp temp-element template temporary temporary-element terminal terms test-results text text-accent text-bg text-body text-caption text-center text-chat-assistant-text text-chat-user-text text-code-fg text-danger text-display text-fg text-heading text-info text-left text-micro text-muted text-muted/50 text-right text-small text-title text-warning text/plain textarea tfoot th that the thead their them theme theme-color theme-toggle theme/token then there these they this through throw time tip title to toggle toggle-ai-chat toggle-design-token-panel toggles token tokens tolerates too toolbar top-0 top-[3.5rem] top-full top-level total touches tp tr tracked tracking-wider trade-off transition transition-[background,color,border-color] transition-[left,color] transition-colors transition-transform translate-x-0 translations transparent treats tree tree-child- tree-item- tree-top- trick trigger trigger:ai-chat trigger:design-token-panel triggers true truncate truncated try turn twitter:card twitter:creator twitter:description twitter:image twitter:site twitter:title two type u ul unavailable unchanged undefined under underline understand unknown unmaintained unobserve unreadable unrelated unreleased unreliable unset unsupported up uppercase usage use used user uses utf-8 utf8 utilities v v2 val value value-reader values var variable version version- version-menu version-switcher vertical via video viewport virtual:zudo-doc-route-context visible vitesse-dark vocabulary w w-1/2 w-[0.5rem] w-[0.625rem] w-[0.875rem] w-[1.125rem] w-[1.575rem] w-[1.5rem] w-[1.75rem] w-[14px] w-[16px] w-[16rem] w-[18px] w-[280px] w-[2rem] w-[320px] w-[90vw] w-[var(--zd-sidebar-w)] w-dvw w-full w-icon-lg w-icon-md w-icon-sm w-icon-xs want warning was watching wbr wbr- we website went were what when where whereas whether which while whitespace-nowrap whitespace-pre whole will with without word working worktrees would wrap wrapper wrappers written wrong wrote xl:flex xl:hidden y-scrollbar yet you your z-dropdown z-local-1 z-modal z-modal-backdrop z-sidebar z-toolbar zd-content zd-desktop-sidebar-toggle zd-doc-content-band zd-enlarge-btn zd-enlarge-dialog zd-enlarge-dialog-close zd-enlargeable zd-html-preview-code zd-mermaid-dialog zd-mermaid-enlargeable zd-mermaid-tool-btn zd-mermaid-toolbar zd-mermaid-transform zd-mermaid-viewport zd-sidebar-content-wrapper zd-sidebar-open zfb zfb:after-swap zfb:before-preparation zod zoom zudo-doc-design-tokens/v1 zudo-doc-sidebar-visible zudo-doc-sidebar-width zudo-doc-theme zudo-doc-theme-bridge");
@@ -2,7 +2,8 @@
2
2
  /** @jsxImportSource preact */
3
3
  import type { JSX } from "preact";
4
4
  import type { SidebarNavNode, SidebarRootMenuItem } from "../sidebar/types.js";
5
- import type { LocaleLink } from "../url-helpers/index.js";
5
+ import type { ChromeContext } from "../factory-context/index.js";
6
+ import type { Settings } from "../settings.js";
6
7
  export type { SidebarNavNode, SidebarRootMenuItem };
7
8
  export interface SidebarWithDefaultsProps {
8
9
  /** Slug of the active doc page, used to highlight the current entry. */
@@ -19,20 +20,12 @@ export interface SidebarWithDefaultsProps {
19
20
  */
20
21
  currentPath?: string;
21
22
  }
22
- /** Dependencies injected by the host stub. */
23
- export interface SidebarWithDefaultsDeps {
24
- defaultLocale: string;
25
- localeCount: number;
26
- buildRootMenuItems: (lang: string, currentVersion: string | undefined) => SidebarRootMenuItem[];
27
- buildLocaleLinksForNav: (currentPath: string, lang: string, localeCount: number) => LocaleLink[] | undefined;
28
- buildSidebarNodes: (lang: string, navSection: string | undefined, currentVersion: string | undefined, emptyWhenUnsectioned?: boolean) => SidebarNavNode[];
29
- getThemeDefaultMode: () => "light" | "dark" | undefined;
30
- t: (key: string, lang: string) => string;
31
- }
32
23
  /**
33
- * Create a `SidebarWithDefaults` component bound to the host's nav builders.
24
+ * Create a `SidebarWithDefaults` component from the unified {@link ChromeContext}
25
+ * (epic Collapse Wiring Shells #2420, FACTORIES #2424 — breaking signature).
34
26
  *
35
- * The host stub calls this once with its concrete dependencies and re-exports
36
- * the result.
27
+ * Derives its old nav-builder bag from the context: `defaultLocale`/`localeCount`
28
+ * (= `locales.length`)/`t` read directly; the four nav data-prep builders come
29
+ * from the shared `chrome/derive` helper (identical to the pre-collapse wiring).
37
30
  */
38
- export declare function createSidebarWithDefaults(deps: SidebarWithDefaultsDeps): (props: SidebarWithDefaultsProps) => JSX.Element;
31
+ export declare function createSidebarWithDefaults<S extends Settings = Settings>(ctx: ChromeContext<S>): (props: SidebarWithDefaultsProps) => JSX.Element;
@@ -1,16 +1,12 @@
1
1
  import { jsx } from "preact/jsx-runtime";
2
2
  import { Island } from "@takazudo/zfb";
3
3
  import { SidebarTree } from "../sidebar-tree-island/index.js";
4
- function createSidebarWithDefaults(deps) {
5
- const {
6
- defaultLocale,
7
- localeCount,
8
- buildRootMenuItems,
9
- buildLocaleLinksForNav,
10
- buildSidebarNodes,
11
- getThemeDefaultMode,
12
- t
13
- } = deps;
4
+ import { deriveNavDataPrep } from "../chrome/derive.js";
5
+ function createSidebarWithDefaults(ctx) {
6
+ const defaultLocale = ctx.defaultLocale;
7
+ const localeCount = ctx.locales.length;
8
+ const t = ctx.t;
9
+ const { buildRootMenuItems, buildLocaleLinksForNav, buildSidebarNodes, getThemeDefaultMode } = deriveNavDataPrep(ctx);
14
10
  function SidebarWithDefaults(props) {
15
11
  const {
16
12
  currentSlug,
@@ -1,6 +1,8 @@
1
1
  /** @jsxRuntime automatic */
2
2
  /** @jsxImportSource preact */
3
3
  import type { ComponentChildren, JSX } from "preact";
4
+ import type { ChromeContext } from "../factory-context/index.js";
5
+ import type { Settings } from "../settings.js";
4
6
  /** Minimal docs entry shape needed by the tag-pages factory. */
5
7
  export interface TagPagesDocsEntry {
6
8
  id: string;
@@ -108,7 +110,14 @@ export interface TagPagesAPI {
108
110
  }) => JSX.Element;
109
111
  }
110
112
  /**
111
- * Create the tag-pages functions bound to the host's settings and
112
- * component dependencies.
113
+ * Create the tag-pages functions from the unified {@link ChromeContext}
114
+ * (epic Collapse Wiring Shells #2420, FACTORIES #2424 — breaking signature).
115
+ *
116
+ * Reads `settings`/`defaultLocale`/`t`/`withBase`/`docsUrl`/`collectTags`/
117
+ * `stableDocs` off the context, derives `composeMetaTitle`, and rebuilds the
118
+ * Head / Header / Footer / BodyEndIslands / DocHistoryArea chrome from the SAME
119
+ * context. `isDefaultLocaleOnlyPath` is left `undefined` to reproduce the
120
+ * pre-collapse injected wiring (`routes/_chrome.tsx` passed `undefined`) — the
121
+ * frozen baseline's tag pages are rendered through that path BYTE-FOR-BYTE.
113
122
  */
114
- export declare function createTagPages(deps: TagPagesDeps): TagPagesAPI;
123
+ export declare function createTagPages<S extends Settings = Settings>(ctx: ChromeContext<S>): TagPagesAPI;
@@ -5,25 +5,30 @@ import { DocCardGrid, TagNav } from "../nav-indexing/index.js";
5
5
  import { memoizeDerived } from "../nav-source-cache/index.js";
6
6
  import { mergeLocaleDocs } from "../locale-merge/index.js";
7
7
  import { toRouteSlug } from "../slug/index.js";
8
- function createTagPages(deps) {
9
- const {
10
- settings,
11
- defaultLocale,
12
- t,
13
- withBase,
14
- docsUrl,
15
- composeMetaTitle,
16
- collectTags,
17
- stableDocs,
18
- isDefaultLocaleOnlyPath,
19
- components: {
20
- HeadWithDefaults,
21
- HeaderWithDefaults,
22
- FooterWithDefaults,
23
- BodyEndIslands,
24
- DocHistoryArea
25
- }
26
- } = deps;
8
+ import { createHeadWithDefaults } from "../head-with-defaults/index.js";
9
+ import { createHeaderWithDefaults } from "../header-with-defaults/index.js";
10
+ import { createFooterWithDefaults } from "../footer-with-defaults/index.js";
11
+ import { createDocHistoryArea } from "../doc-history-area/index.js";
12
+ import { deriveComposeMetaTitle, deriveBodyEndIslands } from "../chrome/derive.js";
13
+ function createTagPages(ctx) {
14
+ const settings = ctx.settings;
15
+ const defaultLocale = ctx.defaultLocale;
16
+ const t = ctx.t;
17
+ const withBase = ctx.withBase;
18
+ const docsUrl = ctx.docsUrl;
19
+ const composeMetaTitle = deriveComposeMetaTitle(ctx);
20
+ const collectTags = ctx.collectTags;
21
+ const stableDocs = ctx.stableDocs;
22
+ const isDefaultLocaleOnlyPath = void 0;
23
+ const HeadWithDefaults = createHeadWithDefaults(ctx);
24
+ const HeaderWithDefaults = createHeaderWithDefaults(
25
+ ctx
26
+ );
27
+ const FooterWithDefaults = createFooterWithDefaults(
28
+ ctx
29
+ );
30
+ const BodyEndIslands = deriveBodyEndIslands(ctx);
31
+ const DocHistoryArea = createDocHistoryArea(ctx);
27
32
  function localePrefix(locale) {
28
33
  return locale === defaultLocale ? "" : `/${locale}`;
29
34
  }
@@ -1,6 +1,8 @@
1
1
  /** @jsxRuntime automatic */
2
2
  /** @jsxImportSource preact */
3
3
  import type { ComponentChildren, JSX } from "preact";
4
+ import type { ChromeContext } from "../factory-context/index.js";
5
+ import type { Settings } from "../settings.js";
4
6
  /** Minimal version config entry needed by the versions page. */
5
7
  export interface VersionsPageVersionEntry {
6
8
  slug: string;
@@ -49,7 +51,12 @@ export interface VersionsPageViewProps {
49
51
  children?: ComponentChildren;
50
52
  }
51
53
  /**
52
- * Create a `VersionsPageView` component bound to the host's settings and
53
- * component dependencies.
54
+ * Create a `VersionsPageView` component from the unified {@link ChromeContext}
55
+ * (epic Collapse Wiring Shells #2420, FACTORIES #2424 — breaking signature).
56
+ *
57
+ * Reads `settings`/`defaultLocale`/`t`/`withBase` off the context, derives
58
+ * `composeMetaTitle`, and rebuilds the Head / Header / Footer / BodyEndIslands
59
+ * chrome from the SAME context (so the injected stub path and a host-bound
60
+ * context both render byte-identically).
54
61
  */
55
- export declare function createVersionsPageView(deps: VersionsPageDeps): (props: VersionsPageViewProps) => JSX.Element;
62
+ export declare function createVersionsPageView<S extends Settings = Settings>(ctx: ChromeContext<S>): (props: VersionsPageViewProps) => JSX.Element;
@@ -1,20 +1,24 @@
1
1
  import { Fragment, jsx } from "preact/jsx-runtime";
2
2
  import { DocLayoutWithDefaults } from "../doclayout/index.js";
3
3
  import { VersionsPageContent } from "../nav-indexing/index.js";
4
- function createVersionsPageView(deps) {
5
- const {
6
- settings,
7
- defaultLocale,
8
- t,
9
- withBase,
10
- composeMetaTitle,
11
- components: {
12
- HeadWithDefaults,
13
- HeaderWithDefaults,
14
- FooterWithDefaults,
15
- BodyEndIslands
16
- }
17
- } = deps;
4
+ import { createHeadWithDefaults } from "../head-with-defaults/index.js";
5
+ import { createHeaderWithDefaults } from "../header-with-defaults/index.js";
6
+ import { createFooterWithDefaults } from "../footer-with-defaults/index.js";
7
+ import { deriveComposeMetaTitle, deriveBodyEndIslands } from "../chrome/derive.js";
8
+ function createVersionsPageView(ctx) {
9
+ const settings = ctx.settings;
10
+ const defaultLocale = ctx.defaultLocale;
11
+ const t = ctx.t;
12
+ const withBase = ctx.withBase;
13
+ const composeMetaTitle = deriveComposeMetaTitle(ctx);
14
+ const HeadWithDefaults = createHeadWithDefaults(ctx);
15
+ const HeaderWithDefaults = createHeaderWithDefaults(
16
+ ctx
17
+ );
18
+ const FooterWithDefaults = createFooterWithDefaults(
19
+ ctx
20
+ );
21
+ const BodyEndIslands = deriveBodyEndIslands(ctx);
18
22
  function VersionsPageView({ locale }) {
19
23
  const isDefault = locale === defaultLocale;
20
24
  const prefix = isDefault ? "" : `/${locale}`;
@@ -9,6 +9,8 @@
9
9
 
10
10
  import type { JSX } from "preact";
11
11
  import { ChevronLeft, ChevronRight } from "../icons/index.js";
12
+ import type { ChromeContext } from "../factory-context/index.js";
13
+ import type { Settings } from "../settings.js";
12
14
 
13
15
  // NavNode is a superset; we only need the fields the pager uses.
14
16
  interface PagerNode {
@@ -25,19 +27,15 @@ export interface DocPagerProps {
25
27
  locale: string;
26
28
  }
27
29
 
28
- /** Dependencies injected by the host stub. */
29
- export interface DocPagerDeps {
30
- /** Translate a UI string key for a locale. */
31
- t: (key: string, locale: string) => string;
32
- }
33
-
34
30
  /**
35
- * Create a `DocPager` component bound to the host's injected `t` translator.
31
+ * Create a `DocPager` component from the unified {@link ChromeContext}
32
+ * (epic Collapse Wiring Shells #2420, FACTORIES #2424 — breaking signature).
33
+ * Reads only the `t` translator off the context.
36
34
  */
37
- export function createDocPager(
38
- deps: DocPagerDeps,
35
+ export function createDocPager<S extends Settings = Settings>(
36
+ ctx: ChromeContext<S>,
39
37
  ): (props: DocPagerProps) => JSX.Element {
40
- const { t } = deps;
38
+ const t = ctx.t;
41
39
 
42
40
  /**
43
41
  * Prev/next pagination nav shared by all four doc-route page components.