@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.
Files changed (511) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +49 -16
  3. package/bin/gen-z-index.mjs +18 -18
  4. package/dist/agent-docs/identity.d.ts +4 -0
  5. package/dist/agent-docs/identity.js +24 -0
  6. package/dist/agent-docs/index.d.ts +5 -0
  7. package/dist/agent-docs/index.js +5 -0
  8. package/dist/agent-docs/limits.d.ts +11 -0
  9. package/dist/agent-docs/limits.js +24 -0
  10. package/dist/agent-docs/search.d.ts +14 -0
  11. package/dist/agent-docs/search.js +82 -0
  12. package/dist/agent-docs/tokenize.d.ts +2 -0
  13. package/dist/agent-docs/tokenize.js +22 -0
  14. package/dist/agent-docs/types.d.ts +68 -0
  15. package/dist/agent-docs/types.js +0 -0
  16. package/dist/ai-chat-modal/index.d.ts +1 -4
  17. package/dist/ai-chat-modal/index.js +183 -123
  18. package/dist/asset-components/asset-card.d.ts +1 -2
  19. package/dist/asset-components/asset-card.js +12 -12
  20. package/dist/asset-components/asset-code.d.ts +1 -2
  21. package/dist/asset-components/asset-code.js +10 -10
  22. package/dist/asset-components/shared.d.ts +3 -4
  23. package/dist/asset-components/shared.js +4 -4
  24. package/dist/asset-index-page/body.d.ts +5 -6
  25. package/dist/asset-index-page/body.js +6 -6
  26. package/dist/asset-index-page/index.d.ts +1 -2
  27. package/dist/asset-index-page/index.js +1 -1
  28. package/dist/asset-page/body.d.ts +5 -9
  29. package/dist/asset-page/body.js +3 -3
  30. package/dist/asset-page/components.d.ts +16 -17
  31. package/dist/asset-page/components.js +10 -9
  32. package/dist/asset-page/index.d.ts +1 -2
  33. package/dist/asset-page/index.js +1 -1
  34. package/dist/auto-logo/index.d.ts +1 -2
  35. package/dist/auto-logo/index.js +2 -2
  36. package/dist/body-foot-util/body-foot-util-area.d.ts +3 -4
  37. package/dist/body-foot-util/body-foot-util-area.js +1 -2
  38. package/dist/body-foot-util/edit-link.d.ts +2 -3
  39. package/dist/body-foot-util/edit-link.js +1 -2
  40. package/dist/breadcrumb/breadcrumb.d.ts +6 -6
  41. package/dist/breadcrumb/breadcrumb.js +3 -4
  42. package/dist/catalog.js +1 -1
  43. package/dist/category-nav/index.d.ts +1 -2
  44. package/dist/category-nav/index.js +11 -5
  45. package/dist/category-tree-nav/index.d.ts +1 -2
  46. package/dist/category-tree-nav/index.js +3 -3
  47. package/dist/chrome/derive.d.ts +18 -27
  48. package/dist/chrome/derive.js +47 -29
  49. package/dist/chrome/index.d.ts +5 -5
  50. package/dist/chrome/index.js +1 -1
  51. package/dist/chrome/island-data.d.ts +4 -0
  52. package/dist/chrome/island-data.js +52 -0
  53. package/dist/chrome/primary-slots.d.ts +2 -3
  54. package/dist/chrome-bindings.d.ts +30 -22
  55. package/dist/code-group/index.d.ts +3 -4
  56. package/dist/code-group/index.js +3 -7
  57. package/dist/code-syntax/code-block-enhancer.d.ts +1 -2
  58. package/dist/code-syntax/code-block-enhancer.js +2 -2
  59. package/dist/code-syntax/mermaid-init.d.ts +1 -2
  60. package/dist/code-syntax/mermaid-init.js +5 -2
  61. package/dist/code-syntax/tabs-init-script.js +1 -1
  62. package/dist/code-syntax/tabs-init.d.ts +1 -2
  63. package/dist/code-syntax/tabs-init.js +2 -2
  64. package/dist/code-syntax/tabs.d.ts +6 -6
  65. package/dist/code-syntax/tabs.js +8 -8
  66. package/dist/compiled.css +2937 -2942
  67. package/dist/config/component-tokens.d.ts +1 -1
  68. package/dist/config/component-tokens.js +22 -0
  69. package/dist/config-assertions/index.d.ts +13 -0
  70. package/dist/config-assertions/index.js +14 -0
  71. package/dist/config.d.ts +36 -17
  72. package/dist/config.js +23 -95
  73. package/dist/content/content-blockquote.d.ts +2 -3
  74. package/dist/content/content-blockquote.js +3 -3
  75. package/dist/content/content-code.d.ts +3 -4
  76. package/dist/content/content-code.js +5 -5
  77. package/dist/content/content-link.d.ts +3 -4
  78. package/dist/content/content-link.js +10 -10
  79. package/dist/content/content-ol.d.ts +2 -3
  80. package/dist/content/content-ol.js +5 -4
  81. package/dist/content/content-paragraph.d.ts +2 -3
  82. package/dist/content/content-paragraph.js +1 -1
  83. package/dist/content/content-strong.d.ts +2 -3
  84. package/dist/content/content-strong.js +3 -3
  85. package/dist/content/content-table.d.ts +2 -3
  86. package/dist/content/content-table.js +4 -4
  87. package/dist/content/content-ul.d.ts +2 -3
  88. package/dist/content/content-ul.js +4 -4
  89. package/dist/content/heading-h2.d.ts +2 -3
  90. package/dist/content/heading-h2.js +4 -4
  91. package/dist/content/heading-h3.d.ts +2 -3
  92. package/dist/content/heading-h3.js +4 -4
  93. package/dist/content/heading-h4.d.ts +2 -3
  94. package/dist/content/heading-h4.js +4 -4
  95. package/dist/content-admonition/index.d.ts +3 -4
  96. package/dist/content-admonition/index.js +2 -2
  97. package/dist/content.css +35 -33
  98. package/dist/design-token-panel-bootstrap-controller.d.ts +178 -0
  99. package/dist/design-token-panel-bootstrap-controller.js +359 -0
  100. package/dist/design-token-panel-bootstrap-island.d.ts +5 -0
  101. package/dist/design-token-panel-bootstrap-island.js +19 -0
  102. package/dist/design-token-panel-bootstrap.d.ts +5 -195
  103. package/dist/design-token-panel-bootstrap.js +3 -288
  104. package/dist/desktop-sidebar-toggle-island/index.d.ts +2 -7
  105. package/dist/desktop-sidebar-toggle-island/index.js +2 -58
  106. package/dist/desktop-sidebar-toggle-island/island.d.ts +4 -0
  107. package/dist/desktop-sidebar-toggle-island/island.js +43 -0
  108. package/dist/desktop-sidebar-toggle-island/storage.d.ts +4 -0
  109. package/dist/desktop-sidebar-toggle-island/storage.js +29 -0
  110. package/dist/desktop-toc-toggle-island/index.d.ts +2 -7
  111. package/dist/desktop-toc-toggle-island/index.js +2 -58
  112. package/dist/desktop-toc-toggle-island/island.d.ts +4 -0
  113. package/dist/desktop-toc-toggle-island/island.js +43 -0
  114. package/dist/desktop-toc-toggle-island/storage.d.ts +4 -0
  115. package/dist/desktop-toc-toggle-island/storage.js +29 -0
  116. package/dist/details/details.d.ts +3 -4
  117. package/dist/details/details.js +1 -1
  118. package/dist/doc-body-end/index.d.ts +1 -2
  119. package/dist/doc-body-end/index.js +1 -1
  120. package/dist/doc-body-end-islands/design-token-panel-island.d.ts +2 -2
  121. package/dist/doc-body-end-islands/design-token-panel-island.js +3 -7
  122. package/dist/doc-body-end-islands/index.d.ts +4 -21
  123. package/dist/doc-body-end-islands/index.js +5 -3
  124. package/dist/doc-body-end-islands/theme-pack-switcher-island.d.ts +3 -13
  125. package/dist/doc-body-end-islands/theme-pack-switcher-island.js +11 -13
  126. package/dist/doc-content-header/index.d.ts +1 -2
  127. package/dist/doc-content-header/index.js +1 -1
  128. package/dist/doc-history/index.d.ts +1 -1
  129. package/dist/doc-history/index.js +166 -141
  130. package/dist/doc-history-area/index.d.ts +6 -4
  131. package/dist/doc-history-area/index.js +17 -16
  132. package/dist/doc-metainfo-area/index.d.ts +2 -3
  133. package/dist/doc-metainfo-area/index.js +1 -1
  134. package/dist/doc-page-renderer/index.d.ts +13 -7
  135. package/dist/doc-page-renderer/index.js +10 -1
  136. package/dist/doc-page-shell/index.d.ts +20 -7
  137. package/dist/doc-page-shell/index.js +17 -6
  138. package/dist/doc-pager/index.d.ts +1 -2
  139. package/dist/doc-pager/index.js +3 -3
  140. package/dist/doc-tags-area/index.d.ts +2 -3
  141. package/dist/doc-tags-area/index.js +1 -1
  142. package/dist/doclayout/doc-layout-with-defaults.d.ts +9 -9
  143. package/dist/doclayout/doc-layout-with-defaults.js +5 -15
  144. package/dist/doclayout/doc-layout.d.ts +26 -27
  145. package/dist/doclayout/doc-layout.js +23 -14
  146. package/dist/docs-schema/index.d.ts +4 -0
  147. package/dist/docs-schema/index.js +1 -0
  148. package/dist/extract-headings/index.js +43 -12
  149. package/dist/factory-context/index.d.ts +22 -19
  150. package/dist/features.css +75 -8
  151. package/dist/find-in-page/find-bar.d.ts +4 -2
  152. package/dist/find-in-page/find-bar.js +58 -69
  153. package/dist/find-in-page/index.d.ts +2 -8
  154. package/dist/find-in-page/index.js +33 -30
  155. package/dist/footer/footer.d.ts +3 -4
  156. package/dist/footer/footer.js +3 -3
  157. package/dist/footer-with-defaults/index.d.ts +2 -3
  158. package/dist/footer-with-defaults/index.js +1 -1
  159. package/dist/frontmatter-preview-defaults/index.js +1 -0
  160. package/dist/head/doc-head.d.ts +1 -1
  161. package/dist/head/doc-head.js +24 -32
  162. package/dist/head/og-tags.d.ts +1 -1
  163. package/dist/head/og-tags.js +8 -7
  164. package/dist/head/twitter-card.d.ts +1 -1
  165. package/dist/head/twitter-card.js +1 -1
  166. package/dist/head-with-defaults/index.d.ts +7 -2
  167. package/dist/head-with-defaults/index.js +46 -32
  168. package/dist/header/header.d.ts +8 -8
  169. package/dist/header/header.js +9 -11
  170. package/dist/header/types.d.ts +7 -7
  171. package/dist/header-with-defaults/index.d.ts +3 -4
  172. package/dist/header-with-defaults/index.js +27 -14
  173. package/dist/home-intro/index.d.ts +2 -5
  174. package/dist/home-intro/index.js +7 -5
  175. package/dist/home-intro/prepare.js +4 -3
  176. package/dist/home-page/index.d.ts +3 -3
  177. package/dist/home-page/index.js +19 -17
  178. package/dist/html-preview-wrapper/highlighted-code.d.ts +3 -4
  179. package/dist/html-preview-wrapper/highlighted-code.js +19 -17
  180. package/dist/html-preview-wrapper/html-preview-wrapper.d.ts +4 -25
  181. package/dist/html-preview-wrapper/html-preview-wrapper.js +2 -87
  182. package/dist/html-preview-wrapper/html-preview.d.ts +3 -10
  183. package/dist/html-preview-wrapper/html-preview.js +13 -37
  184. package/dist/html-preview-wrapper/index.d.ts +2 -1
  185. package/dist/html-preview-wrapper/index.js +1 -1
  186. package/dist/html-preview-wrapper/preview-base.d.ts +3 -5
  187. package/dist/html-preview-wrapper/preview-base.js +56 -59
  188. package/dist/html-preview-wrapper/wrapper.d.ts +20 -0
  189. package/dist/html-preview-wrapper/wrapper.js +37 -0
  190. package/dist/hydration-pending.d.ts +3 -5
  191. package/dist/hydration-pending.js +7 -5
  192. package/dist/i18n-version/language-switcher.d.ts +5 -32
  193. package/dist/i18n-version/language-switcher.js +5 -106
  194. package/dist/i18n-version/switcher-generated-scripts.d.ts +2 -0
  195. package/dist/i18n-version/switcher-generated-scripts.js +107 -0
  196. package/dist/i18n-version/switcher-url-state.d.ts +76 -0
  197. package/dist/i18n-version/switcher-url-state.js +103 -0
  198. package/dist/i18n-version/version-banner.d.ts +2 -3
  199. package/dist/i18n-version/version-banner.js +1 -1
  200. package/dist/i18n-version/version-switcher.d.ts +5 -50
  201. package/dist/i18n-version/version-switcher.js +5 -157
  202. package/dist/icons/index.d.ts +18 -19
  203. package/dist/icons/index.js +17 -33
  204. package/dist/image-enlarge/index.d.ts +1 -10
  205. package/dist/image-enlarge/index.js +80 -55
  206. package/dist/image-enlarge/public.d.ts +2 -0
  207. package/dist/image-enlarge/public.js +6 -0
  208. package/dist/image-enlarge/ssr-fallback.d.ts +2 -0
  209. package/dist/image-enlarge/ssr-fallback.js +8 -0
  210. package/dist/index.d.ts +11 -4
  211. package/dist/inline-version-switcher/index.d.ts +1 -2
  212. package/dist/inline-version-switcher/index.js +1 -1
  213. package/dist/island-types/index.d.ts +2 -2
  214. package/dist/island-types/index.js +1 -5
  215. package/dist/math-block/index.d.ts +4 -7
  216. package/dist/math-block/index.js +5 -5
  217. package/dist/mcp/handler.d.ts +8 -0
  218. package/dist/mcp/handler.js +129 -0
  219. package/dist/mcp/index.d.ts +4 -0
  220. package/dist/mcp/index.js +7 -0
  221. package/dist/mcp/loader.d.ts +19 -0
  222. package/dist/mcp/loader.js +202 -0
  223. package/dist/mdx-components/index.js +40 -108
  224. package/dist/mermaid-enlarge/index.d.ts +1 -8
  225. package/dist/mermaid-enlarge/index.js +174 -158
  226. package/dist/mermaid-enlarge/public.d.ts +2 -0
  227. package/dist/mermaid-enlarge/public.js +6 -0
  228. package/dist/mermaid-enlarge/ssr-fallback.d.ts +2 -0
  229. package/dist/mermaid-enlarge/ssr-fallback.js +8 -0
  230. package/dist/metainfo/doc-metainfo.d.ts +2 -3
  231. package/dist/metainfo/doc-metainfo.js +1 -4
  232. package/dist/metainfo/doc-tags.d.ts +2 -3
  233. package/dist/metainfo/doc-tags.js +1 -1
  234. package/dist/metainfo/frontmatter-preview.d.ts +3 -4
  235. package/dist/metainfo/frontmatter-preview.js +1 -1
  236. package/dist/nav-data-prep/index.js +6 -4
  237. package/dist/nav-indexing/category-nav.d.ts +2 -3
  238. package/dist/nav-indexing/category-nav.js +1 -2
  239. package/dist/nav-indexing/category-tree-nav.d.ts +2 -3
  240. package/dist/nav-indexing/category-tree-nav.js +1 -1
  241. package/dist/nav-indexing/doc-card-grid.d.ts +2 -3
  242. package/dist/nav-indexing/doc-card-grid.js +1 -2
  243. package/dist/nav-indexing/docs-sitemap.d.ts +2 -3
  244. package/dist/nav-indexing/docs-sitemap.js +2 -2
  245. package/dist/nav-indexing/index.d.ts +1 -1
  246. package/dist/nav-indexing/nav-card-grid.d.ts +2 -3
  247. package/dist/nav-indexing/nav-card-grid.js +1 -2
  248. package/dist/nav-indexing/note-tray-index-parts/card-list.d.ts +1 -2
  249. package/dist/nav-indexing/note-tray-index-parts/card-list.js +4 -4
  250. package/dist/nav-indexing/note-tray-index-parts/date-line.d.ts +2 -3
  251. package/dist/nav-indexing/note-tray-index-parts/date-line.js +1 -1
  252. package/dist/nav-indexing/note-tray-index-parts/index-list.d.ts +1 -2
  253. package/dist/nav-indexing/note-tray-index-parts/index-list.js +2 -2
  254. package/dist/nav-indexing/note-tray-index-parts/timeline.d.ts +1 -2
  255. package/dist/nav-indexing/note-tray-index-parts/timeline.js +2 -2
  256. package/dist/nav-indexing/note-tray-index.d.ts +1 -2
  257. package/dist/nav-indexing/note-tray-index.js +1 -1
  258. package/dist/nav-indexing/site-tree-nav-demo.d.ts +2 -3
  259. package/dist/nav-indexing/site-tree-nav-demo.js +2 -2
  260. package/dist/nav-indexing/tag-nav.d.ts +1 -2
  261. package/dist/nav-indexing/tag-nav.js +1 -1
  262. package/dist/nav-indexing/types.d.ts +2 -2
  263. package/dist/nav-indexing/versions-page-content.d.ts +2 -3
  264. package/dist/nav-indexing/versions-page-content.js +8 -8
  265. package/dist/note-tray-index/index.d.ts +1 -2
  266. package/dist/note-tray-index/index.js +1 -1
  267. package/dist/page-loading/page-loading-overlay.d.ts +1 -2
  268. package/dist/page-loading/page-loading-overlay.js +3 -5
  269. package/dist/plugins/agent-export.d.ts +3 -0
  270. package/dist/plugins/agent-export.js +34 -0
  271. package/dist/plugins/internal/agent-export/chunk.d.ts +5 -0
  272. package/dist/plugins/internal/agent-export/chunk.js +90 -0
  273. package/dist/plugins/internal/agent-export/index.d.ts +24 -0
  274. package/dist/plugins/internal/agent-export/index.js +123 -0
  275. package/dist/plugins/internal/agent-export/normalize.d.ts +5 -0
  276. package/dist/plugins/internal/agent-export/normalize.js +73 -0
  277. package/dist/plugins/internal/llms-txt/dev-middleware.d.ts +6 -0
  278. package/dist/plugins/internal/llms-txt/dev-middleware.js +8 -3
  279. package/dist/plugins/internal/llms-txt/emit.js +23 -6
  280. package/dist/plugins/internal/llms-txt/generate.d.ts +7 -1
  281. package/dist/plugins/internal/llms-txt/generate.js +9 -2
  282. package/dist/plugins/internal/llms-txt/load.d.ts +2 -0
  283. package/dist/plugins/internal/llms-txt/load.js +20 -4
  284. package/dist/plugins/internal/llms-txt/types.d.ts +10 -0
  285. package/dist/plugins/routes.js +4 -0
  286. package/dist/preset.d.ts +19 -9
  287. package/dist/preset.js +20 -1
  288. package/dist/route-context-payload/index.js +1 -1
  289. package/dist/routes/404.d.ts +2 -3
  290. package/dist/routes/404.js +1 -1
  291. package/dist/routes/_chrome.d.ts +5 -5
  292. package/dist/routes/_chrome.js +7 -2
  293. package/dist/routes/_context.d.ts +4 -4
  294. package/dist/routes/_design-token-panel-bootstrap.d.ts +1 -4
  295. package/dist/routes/_design-token-panel-bootstrap.js +9 -1
  296. package/dist/routes/docs-slug.d.ts +2 -3
  297. package/dist/routes/docs-tags-index.d.ts +2 -3
  298. package/dist/routes/docs-tags-index.js +1 -1
  299. package/dist/routes/docs-tags-tag.d.ts +2 -3
  300. package/dist/routes/docs-tags-tag.js +1 -1
  301. package/dist/routes/docs-versions.d.ts +2 -3
  302. package/dist/routes/docs-versions.js +1 -1
  303. package/dist/routes/files-path.d.ts +2 -3
  304. package/dist/routes/files-path.js +1 -1
  305. package/dist/routes/index.d.ts +2 -3
  306. package/dist/routes/index.js +1 -1
  307. package/dist/routes/locale-docs-slug.d.ts +2 -3
  308. package/dist/routes/locale-docs-tags-index.d.ts +2 -3
  309. package/dist/routes/locale-docs-tags-index.js +1 -1
  310. package/dist/routes/locale-docs-tags-tag.d.ts +2 -3
  311. package/dist/routes/locale-docs-tags-tag.js +1 -1
  312. package/dist/routes/locale-docs-versions.d.ts +2 -3
  313. package/dist/routes/locale-docs-versions.js +1 -1
  314. package/dist/routes/locale-files-path.d.ts +2 -3
  315. package/dist/routes/locale-files-path.js +1 -1
  316. package/dist/routes/locale-index.d.ts +2 -3
  317. package/dist/routes/locale-index.js +1 -1
  318. package/dist/routes/mcp.d.ts +5 -0
  319. package/dist/routes/mcp.js +25 -0
  320. package/dist/routes/v-docs-slug.d.ts +2 -3
  321. package/dist/routes/v-locale-docs-slug.d.ts +2 -3
  322. package/dist/search-widget/index.d.ts +1 -2
  323. package/dist/search-widget/index.js +4 -7
  324. package/dist/search-widget-script/generated-script.js +12 -5
  325. package/dist/settings-defaults.d.ts +2 -0
  326. package/dist/settings-defaults.js +93 -0
  327. package/dist/settings.d.ts +8 -2
  328. package/dist/sidebar/client-data.d.ts +18 -0
  329. package/dist/sidebar/client-data.js +47 -0
  330. package/dist/sidebar/index.d.ts +3 -1
  331. package/dist/sidebar/index.js +3 -1
  332. package/dist/sidebar/sidebar.d.ts +12 -44
  333. package/dist/sidebar/sidebar.js +4 -3
  334. package/dist/sidebar/types.d.ts +14 -0
  335. package/dist/sidebar-prepaint/index.d.ts +1 -2
  336. package/dist/sidebar-prepaint/index.js +4 -6
  337. package/dist/sidebar-resizer/sidebar-resizer-init.d.ts +2 -3
  338. package/dist/sidebar-resizer/sidebar-resizer-init.js +3 -3
  339. package/dist/sidebar-toggle-island/index.d.ts +8 -11
  340. package/dist/sidebar-toggle-island/index.js +75 -62
  341. package/dist/sidebar-tree/build-tree.js +5 -6
  342. package/dist/sidebar-tree/types.d.ts +2 -0
  343. package/dist/sidebar-tree-island/index.d.ts +4 -19
  344. package/dist/sidebar-tree-island/index.js +782 -436
  345. package/dist/sidebar-tree-island/scope-state.d.ts +38 -0
  346. package/dist/sidebar-tree-island/scope-state.js +151 -0
  347. package/dist/sidebar-tree-island/sidebar-scroll-preserve.js +6 -2
  348. package/dist/sidebar-utils/index.d.ts +17 -19
  349. package/dist/sidebar-utils/index.js +100 -3
  350. package/dist/sidebar-utils/scope.d.ts +11 -0
  351. package/dist/sidebar-utils/scope.js +67 -0
  352. package/dist/sidebar-with-defaults/index.d.ts +1 -2
  353. package/dist/sidebar-with-defaults/index.js +19 -18
  354. package/dist/site-schema/nav-tree.js +15 -15
  355. package/dist/site-schema/types.d.ts +1 -0
  356. package/dist/site-tree-nav/index.d.ts +2 -3
  357. package/dist/site-tree-nav/index.js +11 -12
  358. package/dist/site-tree-nav/normalize-island-props.d.ts +16 -0
  359. package/dist/site-tree-nav/normalize-island-props.js +122 -0
  360. package/dist/site-tree-nav-island/index.d.ts +3 -3
  361. package/dist/site-tree-nav-island/index.js +243 -144
  362. package/dist/smart-break/index.d.ts +3 -4
  363. package/dist/smart-break/index.js +1 -1
  364. package/dist/tab-item/tab-item.d.ts +3 -4
  365. package/dist/tab-item/tab-item.js +1 -1
  366. package/dist/tag-pages/index.d.ts +3 -3
  367. package/dist/tag-pages/index.js +10 -10
  368. package/dist/theme/color-scheme-provider.d.ts +3 -3
  369. package/dist/theme/color-scheme-provider.js +3 -3
  370. package/dist/theme/theme-pack-provider.d.ts +1 -1
  371. package/dist/theme/theme-pack-provider.js +3 -3
  372. package/dist/theme/theme-toggle.d.ts +2 -3
  373. package/dist/theme/theme-toggle.js +1 -1
  374. package/dist/theme-pack-dialog/index.d.ts +1 -1
  375. package/dist/theme-pack-dialog/index.js +69 -75
  376. package/dist/theme-pack-dialog/theme-pack-card.d.ts +3 -4
  377. package/dist/theme-pack-dialog/theme-pack-card.js +19 -17
  378. package/dist/theme-pack-switcher/index.d.ts +4 -5
  379. package/dist/theme-pack-switcher/index.js +52 -49
  380. package/dist/theme-packs/academia/meta.json +1 -1
  381. package/dist/theme-packs/academia/pack.css +1 -1
  382. package/dist/theme-packs/bauhaus/meta.json +1 -1
  383. package/dist/theme-packs/bauhaus/pack.css +2 -2
  384. package/dist/theme-packs/blueprint/meta.json +1 -1
  385. package/dist/theme-packs/blueprint/pack.css +2 -2
  386. package/dist/theme-packs/botanica/meta.json +1 -1
  387. package/dist/theme-packs/botanica/pack.css +2 -2
  388. package/dist/theme-packs/broadsheet/meta.json +1 -1
  389. package/dist/theme-packs/broadsheet/pack.css +2 -2
  390. package/dist/theme-packs/brutalist/meta.json +1 -1
  391. package/dist/theme-packs/brutalist/pack.css +2 -2
  392. package/dist/theme-packs/eink/meta.json +1 -1
  393. package/dist/theme-packs/eink/pack.css +1 -1
  394. package/dist/theme-packs/futura-editorial/meta.json +1 -1
  395. package/dist/theme-packs/futura-editorial/pack.css +2 -2
  396. package/dist/theme-packs/hearth/meta.json +1 -1
  397. package/dist/theme-packs/hearth/pack.css +2 -2
  398. package/dist/theme-packs/ledger/meta.json +1 -1
  399. package/dist/theme-packs/ledger/pack.css +1 -1
  400. package/dist/theme-packs/manuscript/meta.json +1 -1
  401. package/dist/theme-packs/manuscript/pack.css +1 -1
  402. package/dist/theme-packs/matcha/meta.json +1 -1
  403. package/dist/theme-packs/matcha/pack.css +2 -2
  404. package/dist/theme-packs/nocturne/meta.json +1 -1
  405. package/dist/theme-packs/nocturne/pack.css +2 -2
  406. package/dist/theme-packs/observatory/meta.json +1 -1
  407. package/dist/theme-packs/observatory/pack.css +2 -2
  408. package/dist/theme-packs/onyx/meta.json +1 -1
  409. package/dist/theme-packs/onyx/pack.css +2 -2
  410. package/dist/theme-packs/phosphor/meta.json +1 -1
  411. package/dist/theme-packs/phosphor/pack.css +2 -2
  412. package/dist/theme-packs/riso/meta.json +1 -1
  413. package/dist/theme-packs/riso/pack.css +2 -2
  414. package/dist/theme-packs/sakura/meta.json +1 -1
  415. package/dist/theme-packs/sakura/pack.css +2 -2
  416. package/dist/theme-packs/scandi/meta.json +1 -1
  417. package/dist/theme-packs/scandi/pack.css +1 -1
  418. package/dist/theme-packs/solar/meta.json +1 -1
  419. package/dist/theme-packs/solar/pack.css +1 -1
  420. package/dist/theme-packs/sumi/meta.json +1 -1
  421. package/dist/theme-packs/sumi/pack.css +2 -2
  422. package/dist/theme-packs/swissgrid/meta.json +1 -1
  423. package/dist/theme-packs/swissgrid/pack.css +1 -1
  424. package/dist/theme-packs/timberline/meta.json +1 -1
  425. package/dist/theme-packs/timberline/pack.css +2 -2
  426. package/dist/theme-packs/washi/meta.json +1 -1
  427. package/dist/theme-packs/washi/pack.css +2 -2
  428. package/dist/theme-toggle/index.d.ts +1 -1
  429. package/dist/theme-toggle/index.js +154 -167
  430. package/dist/theme.css +47 -121
  431. package/dist/toc/mobile-toc.d.ts +3 -5
  432. package/dist/toc/mobile-toc.js +29 -27
  433. package/dist/toc/toc.d.ts +3 -4
  434. package/dist/toc/toc.js +18 -18
  435. package/dist/toc/use-active-heading.d.ts +5 -4
  436. package/dist/toc/use-active-heading.js +36 -30
  437. package/dist/toc-prepaint/index.d.ts +1 -2
  438. package/dist/toc-prepaint/index.js +4 -6
  439. package/dist/transitions/nested-island-props-refresh.d.ts +3 -16
  440. package/dist/transitions/nested-island-props-refresh.js +133 -151
  441. package/dist/transitions/page-events.d.ts +8 -13
  442. package/dist/tree-nav-shared/index.d.ts +4 -5
  443. package/dist/tree-nav-shared/index.js +6 -7
  444. package/dist/use-modal-dialog/index.d.ts +9 -63
  445. package/dist/use-modal-dialog/index.js +41 -59
  446. package/dist/versions-page/index.d.ts +3 -3
  447. package/dist/versions-page/index.js +5 -5
  448. package/dist/wind/index.d.ts +5 -0
  449. package/dist/wind/index.js +169 -0
  450. package/dist/wind.json +498 -0
  451. package/dist/z-index-defaults/index.d.ts +4 -4
  452. package/dist/zdtp-loader.d.ts +7 -0
  453. package/dist/zdtp-loader.js +8 -0
  454. package/eject/asset-components/asset-card.tsx +14 -16
  455. package/eject/asset-components/asset-code.tsx +10 -12
  456. package/eject/asset-components/shared.tsx +5 -7
  457. package/eject/breadcrumb/breadcrumb.tsx +15 -16
  458. package/eject/code-group/index.tsx +4 -10
  459. package/eject/content-admonition/index.tsx +5 -6
  460. package/eject/desktop-sidebar-toggle-island/index.ts +4 -0
  461. package/eject/desktop-sidebar-toggle-island/island.tsx +50 -0
  462. package/eject/desktop-sidebar-toggle-island/storage.ts +27 -0
  463. package/eject/details/details.tsx +3 -5
  464. package/eject/doc-history/index.tsx +193 -179
  465. package/eject/doc-pager/index.tsx +3 -4
  466. package/eject/footer/footer.tsx +7 -9
  467. package/eject/header/header.tsx +42 -54
  468. package/eject/header/nav-overflow-script.ts +1 -1
  469. package/eject/header/types.ts +12 -13
  470. package/eject/image-enlarge/index.tsx +84 -69
  471. package/eject/image-enlarge/public.ts +2 -0
  472. package/eject/image-enlarge/ssr-fallback.tsx +7 -0
  473. package/eject/page-loading/page-loading-overlay.tsx +8 -15
  474. package/eject/sidebar/client-data.ts +68 -0
  475. package/eject/sidebar/index.ts +3 -0
  476. package/eject/sidebar/sidebar.tsx +16 -97
  477. package/eject/sidebar/types.ts +15 -0
  478. package/eject/sidebar-toggle-island/index.tsx +103 -102
  479. package/eject/sidebar-tree-island/index.tsx +827 -615
  480. package/eject/sidebar-tree-island/scope-state.ts +154 -0
  481. package/eject/sidebar-tree-island/sidebar-scroll-preserve.ts +8 -2
  482. package/eject/site-tree-nav-island/index.tsx +349 -222
  483. package/eject/tab-item/tab-item.tsx +2 -4
  484. package/eject/theme-toggle/hydration-pending.ts +6 -10
  485. package/eject/theme-toggle/index.tsx +133 -173
  486. package/eject/toc/mobile-toc.tsx +27 -31
  487. package/eject/toc/toc.tsx +21 -24
  488. package/eject/toc/use-active-heading.ts +43 -38
  489. package/package.json +40 -22
  490. package/routes-src/404.tsx +2 -3
  491. package/routes-src/_chrome.tsx +7 -2
  492. package/routes-src/_design-token-panel-bootstrap.tsx +1 -63
  493. package/routes-src/docs-slug.tsx +2 -3
  494. package/routes-src/docs-tags-index.tsx +2 -3
  495. package/routes-src/docs-tags-tag.tsx +2 -3
  496. package/routes-src/docs-versions.tsx +2 -3
  497. package/routes-src/files-path.tsx +2 -4
  498. package/routes-src/index.tsx +2 -3
  499. package/routes-src/locale-docs-slug.tsx +2 -3
  500. package/routes-src/locale-docs-tags-index.tsx +2 -3
  501. package/routes-src/locale-docs-tags-tag.tsx +2 -3
  502. package/routes-src/locale-docs-versions.tsx +2 -3
  503. package/routes-src/locale-files-path.tsx +2 -4
  504. package/routes-src/locale-index.tsx +2 -3
  505. package/routes-src/mcp.tsx +25 -0
  506. package/routes-src/v-docs-slug.tsx +2 -3
  507. package/routes-src/v-locale-docs-slug.tsx +2 -3
  508. package/tsconfig.base.json +1 -1
  509. package/dist/safelist.css +0 -2
  510. package/dist/theme-no-reset.css +0 -379
  511. package/eject/desktop-sidebar-toggle-island/index.tsx +0 -110
@@ -0,0 +1,93 @@
1
+ const DEFAULT_SETTINGS = {
2
+ colorScheme: "Default Dark",
3
+ colorMode: {
4
+ defaultMode: "dark",
5
+ lightScheme: "Default Light",
6
+ darkScheme: "Default Dark",
7
+ respectPrefersColorScheme: true
8
+ },
9
+ siteName: "Docs",
10
+ siteDescription: "",
11
+ logo: "auto",
12
+ favicon: void 0,
13
+ base: "/",
14
+ trailingSlash: false,
15
+ home: { wide: false, introMarkdown: "", sitemapHeading: "" },
16
+ siteTreeNavIgnore: [],
17
+ siteTreeNavSecondary: [],
18
+ minifyHtml: true,
19
+ docsDir: "src/content/docs",
20
+ entryDocSlug: "getting-started",
21
+ dateFormat: "locale",
22
+ defaultLocale: "en",
23
+ locales: {},
24
+ mermaid: true,
25
+ transclude: false,
26
+ noindex: false,
27
+ editUrl: false,
28
+ githubUrl: false,
29
+ siteUrl: "",
30
+ metaTags: {
31
+ description: true,
32
+ keywords: false,
33
+ ogImage: false,
34
+ ogSiteName: true,
35
+ twitterCard: false
36
+ },
37
+ sitemap: false,
38
+ docMetainfo: false,
39
+ docMetainfoFields: ["created", "updated", "author"],
40
+ docTags: false,
41
+ tagPlacement: "after-title",
42
+ tagGovernance: "off",
43
+ tagVocabulary: false,
44
+ agentExport: false,
45
+ mcp: false,
46
+ llmsTxt: false,
47
+ changelogs: false,
48
+ math: false,
49
+ cjkFriendly: false,
50
+ onBrokenMarkdownLinks: "warn",
51
+ aiAssistant: false,
52
+ aiChatDemoMode: false,
53
+ aiChatAllowedOrigins: [],
54
+ // Exact UTC-day paid-call admission cap; false disables it. An admission is
55
+ // consumed before provider fetch and is not provider-confirmed accounting.
56
+ aiChatGlobalDailyLimit: false,
57
+ designTokenPanel: false,
58
+ tocMinDepth: 2,
59
+ tocMaxDepth: 4,
60
+ searchMaxBodyLength: 3e3,
61
+ sidebarResizer: false,
62
+ sidebarToggle: false,
63
+ tocToggle: false,
64
+ imageEnlarge: false,
65
+ findInPage: false,
66
+ dynamicPageTransition: false,
67
+ frontmatterPreview: false,
68
+ docHistory: false,
69
+ docHistoryUi: true,
70
+ docHistoryExclude: [],
71
+ assetViewer: false,
72
+ assetViewerDir: "assets",
73
+ assetViewerRoutePrefix: "files",
74
+ assetViewerExclude: [],
75
+ assetViewerIndex: false,
76
+ assetViewerIndexing: false,
77
+ bodyFootUtilArea: false,
78
+ htmlPreview: void 0,
79
+ versions: false,
80
+ claudeResources: false,
81
+ codexResources: false,
82
+ defaultLocaleOnlyPrefixes: [],
83
+ footer: false,
84
+ headerNav: [],
85
+ headerRightItems: [{ type: "component", component: "theme-toggle" }],
86
+ packageOwnedRoutes: true,
87
+ themePack: "default",
88
+ themePackSwitcher: false,
89
+ themePacks: void 0
90
+ };
91
+ export {
92
+ DEFAULT_SETTINGS
93
+ };
@@ -398,6 +398,10 @@ export interface Settings {
398
398
  tagGovernance: TagGovernanceMode;
399
399
  tagVocabulary: boolean;
400
400
  llmsTxt: boolean;
401
+ /** Generate the package-owned static agent documentation feed. */
402
+ agentExport?: boolean;
403
+ /** Add the stateless read-only MCP endpoint; requires agentExport. */
404
+ mcp?: boolean;
401
405
  changelogs?: ChangelogConfig[] | false;
402
406
  math: boolean;
403
407
  cjkFriendly: boolean;
@@ -555,8 +559,10 @@ export interface Settings {
555
559
  * `chromeBindings.DesignTokenPanelBootstrap`, stub-rendered pages now mount
556
560
  * NO panel island at all (the injected routes still get the configured one,
557
561
  * from any entry page). To get a panel on stub-rendered pages too, thread
558
- * your builder through `chromeBindings.DesignTokenPanelBootstrap` — that
559
- * binding wins everywhere and is unaffected by this rule. See
562
+ * your builder through a client bootstrap and expose its fixed-target,
563
+ * Fragment-wrapped Island server boundary as
564
+ * `chromeBindings.DesignTokenPanelBootstrap` — that boundary wins everywhere
565
+ * and is unaffected by this rule. Do not supply a raw client component. See
560
566
  * `docs/adr/route-injection-seam.md`.
561
567
  *
562
568
  * EDGE CASE (zudolab/zudo-doc#3420, diagnostic added #3428, scoped by
@@ -0,0 +1,18 @@
1
+ import type { SidebarNavNode, SidebarNavigationContext } from "./types.js";
2
+ /** Navigation data needed by the native sidebar islands, without server prose. */
3
+ export type SidebarClientNode = Omit<SidebarNavNode, "description" | "children"> & {
4
+ children: SidebarClientNode[];
5
+ };
6
+ export type SidebarClientNavigation = Omit<SidebarNavigationContext, "roots"> & {
7
+ roots: SidebarClientNode[];
8
+ };
9
+ /**
10
+ * Copy navigation for SSR and hydration at an island boundary. Server builders
11
+ * retain descriptions; custom island hosts can opt into this same projection.
12
+ * Validate before selecting fields so discarded data cannot conceal invalid
13
+ * transport values. Preserve the opaque scope ID and editorial topology.
14
+ */
15
+ export declare function toSidebarClientData(nodes: SidebarNavNode[], navigation?: SidebarNavigationContext): {
16
+ nodes: SidebarClientNode[];
17
+ navigation?: SidebarClientNavigation;
18
+ };
@@ -0,0 +1,47 @@
1
+ import { normalizeIslandData } from "../chrome/island-data.js";
2
+ const nodeFields = {
3
+ occurrenceId: true,
4
+ slug: true,
5
+ label: true,
6
+ description: false,
7
+ position: true,
8
+ href: true,
9
+ hasPage: true,
10
+ children: true,
11
+ sortOrder: true,
12
+ collapsed: true,
13
+ shape: true,
14
+ noteTrayDated: true,
15
+ noteTraySidebar: true,
16
+ date: true,
17
+ updated: true,
18
+ rank: true
19
+ };
20
+ function toSidebarClientData(nodes, navigation) {
21
+ const source = normalizeIslandData({ nodes, navigation });
22
+ function project(node) {
23
+ const result = {};
24
+ for (const key of Object.keys(nodeFields)) {
25
+ if (nodeFields[key] && key !== "children" && node[key] !== void 0) {
26
+ result[key] = node[key];
27
+ }
28
+ }
29
+ result.children = node.children.map(project);
30
+ return result;
31
+ }
32
+ return {
33
+ nodes: source.nodes.map(project),
34
+ ...source.navigation ? {
35
+ navigation: {
36
+ id: source.navigation.id,
37
+ roots: source.navigation.roots.map(project),
38
+ parents: source.navigation.parents,
39
+ ...source.navigation.initialExpansion !== void 0 ? { initialExpansion: source.navigation.initialExpansion } : {},
40
+ ...source.navigation.localParentId !== void 0 ? { localParentId: source.navigation.localParentId } : {}
41
+ }
42
+ } : {}
43
+ };
44
+ }
45
+ export {
46
+ toSidebarClientData
47
+ };
@@ -17,5 +17,7 @@
17
17
  * `treeComponent` prop (or rendered as `children`).
18
18
  */
19
19
  export { Sidebar } from "./sidebar.js";
20
+ export { toSidebarClientData } from "./client-data.js";
21
+ export type { SidebarClientNode, SidebarClientNavigation } from "./client-data.js";
20
22
  export type { SidebarProps } from "./sidebar.js";
21
- export type { SidebarLocaleLink, SidebarNavNode, SidebarRootMenuItem, SidebarTreeIslandProps, } from "./types.js";
23
+ export type { SidebarLocaleLink, SidebarNavNode, SidebarNavigationContext, SidebarRootMenuItem, SidebarTreeIslandProps, } from "./types.js";
@@ -1,4 +1,6 @@
1
1
  import { Sidebar } from "./sidebar.js";
2
+ import { toSidebarClientData } from "./client-data.js";
2
3
  export {
3
- Sidebar
4
+ Sidebar,
5
+ toSidebarClientData
4
6
  };
@@ -1,50 +1,18 @@
1
1
  /** @jsxRuntime automatic */
2
- /** @jsxImportSource preact */
3
- import type { ComponentChildren, FunctionComponent, VNode } from "preact";
2
+ import type { Child, Component } from "@takazudo/zfb/zudo-react";
4
3
  import type { SidebarTreeIslandProps } from "./types.js";
4
+ /**
5
+ * Props for the server-rendered Sidebar shell. Data preparation stays with the
6
+ * caller, which may supply a tree component or already-rendered children.
7
+ */
5
8
  export interface SidebarProps extends SidebarTreeIslandProps {
6
- /**
7
- * The host's SidebarTree component. When present, the shell renders
8
- * `<TreeComponent {...islandProps} />` with the typed props below.
9
- * Mutually exclusive with `children`: prefer this form so v2 owns the
10
- * prop forwarding contract.
11
- */
12
- treeComponent?: FunctionComponent<SidebarTreeIslandProps>;
13
- /**
14
- * Pre-rendered tree content — falls back to this when
15
- * `treeComponent` is omitted. Useful for tests and for layouts that
16
- * compose the tree separately (e.g. inside a host wrapper
17
- * that needs `client:load` on the actual island element).
18
- */
19
- children?: ComponentChildren;
9
+ /** Component used to render the prepared tree. */
10
+ treeComponent?: Component<SidebarTreeIslandProps>;
11
+ /** Pre-rendered tree content for callers that compose the tree separately. */
12
+ children?: Child;
20
13
  }
21
14
  /**
22
- * Sidebar shell — typed wrapper around the SidebarTree island.
23
- *
24
- * Two usage shapes (matching the breadcrumb shell's pattern):
25
- *
26
- * 1. Pass `treeComponent` plus the data props (`nodes`,
27
- * `rootMenuItems`, `localeLinks`, …). The shell forwards them all
28
- * to the supplied component.
29
- *
30
- * 2. Pass `children` (e.g. a pre-instantiated `<SidebarTree
31
- * client:load … />` from an Astro wrapper). The shell renders
32
- * them as-is — the typed island props are then unused but kept on
33
- * the type signature so call-sites stay self-documenting.
34
- *
35
- * **The caller is responsible for wrapping this in `<Island when="load">`**
36
- * so the SSG output emits the `data-zfb-island="Sidebar"` hydration
37
- * marker around the rendered tree. `<DocLayoutWithDefaults>` does this
38
- * for you; consumers who render `<Sidebar>` outside the default layout
39
- * (e.g. via the `sidebarOverride` prop or in a custom layout) must
40
- * apply the wrapper themselves — otherwise no hydration marker is
41
- * emitted, and the runtime walks past the SSR'd tree without claiming
42
- * it as an island. Either way the actual user-facing interactivity
43
- * comes from the `treeComponent`'s own island registration; the
44
- * `<Island>` wrapper here exists so the shell can host data-only
45
- * variants in the future without losing the marker contract.
15
+ * Server-rendered shell around prepared navigation content. An empty node list
16
+ * has no sidebar output and returns null without creating an island boundary.
46
17
  */
47
- export declare function Sidebar(props: SidebarProps): VNode | null;
48
- export declare namespace Sidebar {
49
- var displayName: string;
50
- }
18
+ export declare function Sidebar(props: SidebarProps): Child;
@@ -1,21 +1,23 @@
1
- "use client";
2
- import { Fragment, jsx } from "preact/jsx-runtime";
1
+ import { Fragment, jsx } from "@takazudo/zfb/zudo-react/jsx-runtime";
3
2
  function Sidebar(props) {
4
3
  const {
5
4
  treeComponent: TreeComponent,
6
5
  children,
7
6
  nodes,
7
+ navigation,
8
8
  currentSlug,
9
9
  rootMenuItems,
10
10
  backToMenuLabel,
11
11
  localeLinks,
12
12
  themeDefaultMode
13
13
  } = props;
14
+ if (nodes.length === 0) return null;
14
15
  if (TreeComponent) {
15
16
  return /* @__PURE__ */ jsx(
16
17
  TreeComponent,
17
18
  {
18
19
  nodes,
20
+ navigation,
19
21
  currentSlug,
20
22
  rootMenuItems,
21
23
  backToMenuLabel,
@@ -29,7 +31,6 @@ function Sidebar(props) {
29
31
  }
30
32
  return null;
31
33
  }
32
- Sidebar.displayName = "Sidebar";
33
34
  export {
34
35
  Sidebar
35
36
  };
@@ -25,6 +25,8 @@
25
25
  * Matches `NavNode` in the host project's `src/utils/docs.ts`.
26
26
  */
27
27
  export interface SidebarNavNode {
28
+ /** Stable identity of this editorial occurrence, independent of the page slug. */
29
+ occurrenceId?: string;
28
30
  slug: string;
29
31
  label: string;
30
32
  description?: string;
@@ -67,9 +69,21 @@ export interface SidebarLocaleLink {
67
69
  */
68
70
  export interface SidebarTreeIslandProps {
69
71
  nodes: SidebarNavNode[];
72
+ navigation?: SidebarNavigationContext;
70
73
  currentSlug?: string;
71
74
  rootMenuItems?: SidebarRootMenuItem[];
72
75
  backToMenuLabel?: string;
73
76
  localeLinks?: SidebarLocaleLink[];
74
77
  themeDefaultMode?: "light" | "dark";
75
78
  }
79
+ /** Complete editorial topology, captured before local scoping or filtering. */
80
+ export interface SidebarNavigationContext {
81
+ /** Locale/version/document-context identity including the topology revision. */
82
+ id: string;
83
+ roots: SidebarNavNode[];
84
+ /** Explicit page/index author defaults; resolved against the current destination. */
85
+ initialExpansion?: Record<string, "collapsed" | "expanded">;
86
+ parents: Record<string, string | null>;
87
+ /** Explicit enclosing occurrence for a local forest spanning emitted children. */
88
+ localParentId?: string;
89
+ }
@@ -1,6 +1,5 @@
1
1
  /** @jsxRuntime automatic */
2
- /** @jsxImportSource preact */
3
- import type { JSX } from "preact";
2
+ import type { JSX } from "@takazudo/zfb/zudo-react/jsx-runtime";
4
3
  export interface SidebarPrepaintProps {
5
4
  /**
6
5
  * Mirrors the page's `hide_sidebar: true` frontmatter. When true the desktop
@@ -1,9 +1,7 @@
1
- import { Fragment, jsx } from "preact/jsx-runtime";
1
+ import { Fragment, jsx } from "@takazudo/zfb/zudo-react/jsx-runtime";
2
2
  import { Island } from "@takazudo/zfb";
3
- import {
4
- DesktopSidebarToggle,
5
- SIDEBAR_STORAGE_KEY
6
- } from "../desktop-sidebar-toggle-island/index.js";
3
+ import { DesktopSidebarToggle } from "../desktop-sidebar-toggle-island/index.js";
4
+ import { SIDEBAR_STORAGE_KEY } from "../desktop-sidebar-toggle-island/storage.js";
7
5
  function sidebarPrepaintActive(settings, hideSidebar) {
8
6
  return Boolean(settings.sidebarToggle) && !hideSidebar;
9
7
  }
@@ -18,7 +16,7 @@ function createSidebarVisibilityPrepaint(settings) {
18
16
  return /* @__PURE__ */ jsx(
19
17
  "script",
20
18
  {
21
- dangerouslySetInnerHTML: { __html: SIDEBAR_VISIBILITY_PREPAINT_SCRIPT }
19
+ rawHtml: SIDEBAR_VISIBILITY_PREPAINT_SCRIPT
22
20
  }
23
21
  );
24
22
  }
@@ -1,12 +1,11 @@
1
- /** @jsxImportSource preact */
2
- import type { JSX } from "preact";
1
+ import type { JSX } from "@takazudo/zfb/zudo-react/jsx-runtime";
3
2
  export declare const SIDEBAR_RESIZER_INIT_SCRIPT: string;
4
3
  /**
5
4
  * Drop-in JSX body-end script for sidebar resize initialization.
6
5
  *
7
6
  * Include once in the layout (gated on `settings.sidebarResizer`). Emits
8
7
  * the full `initSidebarResizer` implementation as an inline
9
- * `dangerouslySetInnerHTML` script so it runs without a module import.
8
+ * static rawHtml script so it runs without a module import.
10
9
  *
11
10
  * - Calls `initSidebarResizer()` once on first paint.
12
11
  * - Re-runs on `AFTER_NAVIGATE_EVENT` (`zfb:after-swap`) for
@@ -1,4 +1,4 @@
1
- import { jsx } from "preact/jsx-runtime";
1
+ import { jsx } from "@takazudo/zfb/zudo-react/jsx-runtime";
2
2
  import { AFTER_NAVIGATE_EVENT } from "../transitions/page-events.js";
3
3
  const SIDEBAR_RESIZER_INIT_SCRIPT = `(function(){
4
4
  var SIDEBAR_ID="desktop-sidebar";
@@ -141,7 +141,7 @@ const SIDEBAR_RESIZER_INIT_SCRIPT = `(function(){
141
141
  document.addEventListener(${JSON.stringify(AFTER_NAVIGATE_EVENT)},initSidebarResizer);
142
142
  })();`;
143
143
  function SidebarResizerInit() {
144
- return /* @__PURE__ */ jsx("script", { dangerouslySetInnerHTML: { __html: SIDEBAR_RESIZER_INIT_SCRIPT } });
144
+ return /* @__PURE__ */ jsx("script", { rawHtml: SIDEBAR_RESIZER_INIT_SCRIPT });
145
145
  }
146
146
  var sidebar_resizer_init_default = SidebarResizerInit;
147
147
  const SIDEBAR_RESIZER_RESTORE_SCRIPT = `(function(){try{var w=localStorage.getItem("zudo-doc-sidebar-width");if(!w)return;var n=parseFloat(w);if(!isFinite(n))return;if(n<192)n=192;else if(n>448)n=448;document.documentElement.style.setProperty("--zd-sidebar-w",n+"px");}catch(e){}})();`;
@@ -149,7 +149,7 @@ function SidebarResizerRestore() {
149
149
  return /* @__PURE__ */ jsx(
150
150
  "script",
151
151
  {
152
- dangerouslySetInnerHTML: { __html: SIDEBAR_RESIZER_RESTORE_SCRIPT }
152
+ rawHtml: SIDEBAR_RESIZER_RESTORE_SCRIPT
153
153
  }
154
154
  );
155
155
  }
@@ -1,8 +1,9 @@
1
1
  import type { ThemeToggleLabels } from "../theme-toggle/index.js";
2
- import type { SidebarNavNode, SidebarRootMenuItem, SidebarLocaleLink } from "../sidebar/types.js";
2
+ import type { SidebarNavNode, SidebarRootMenuItem, SidebarLocaleLink, SidebarNavigationContext } from "../sidebar/types.js";
3
3
  import type { ResolvedDateFormats } from "../settings.js";
4
4
  export interface SidebarToggleProps {
5
5
  nodes: SidebarNavNode[];
6
+ navigation?: SidebarNavigationContext;
6
7
  currentSlug?: string;
7
8
  rootMenuItems?: SidebarRootMenuItem[];
8
9
  backToMenuLabel?: string;
@@ -13,19 +14,15 @@ export interface SidebarToggleProps {
13
14
  themeLabels?: ThemeToggleLabels;
14
15
  themeRespectSystem?: boolean;
15
16
  /**
16
- * Forwarded verbatim to the hosted `<SidebarTree>`. This island is the one
17
- * nested under the persisted `<header>`, so on a same-locale soft navigation
18
- * its serialized `data-props` is lifted from the previous page and refreshed
19
- * wholesale by `nested-island-props-refresh` — which carries the resolved
20
- * patterns along with `nodes`, at no extra cost, because that helper copies
21
- * the blob rather than enumerating prop names (#4075). The patterns cannot
22
- * actually differ across such a swap (the persist key is `header-${lang}`,
23
- * so a locale change is never a persisted swap); what matters is that they
24
- * are not LOST from the lifted island.
17
+ * Forwarded verbatim to the hosted `<SidebarTree>`. The same-locale header
18
+ * may persist across a soft navigation; zfb 3.1 keeps this island live when
19
+ * its effective props are unchanged and recreates it from incoming props
20
+ * when page data changes. The locale-keyed header persistence key prevents
21
+ * locale-specific props from crossing locales.
25
22
  */
26
23
  dateFormats?: ResolvedDateFormats;
27
24
  }
28
- export declare function SidebarToggle({ nodes, currentSlug, rootMenuItems, backToMenuLabel, locale, localeLinks, themeDefaultMode, themeLabels, themeRespectSystem, dateFormats, }: SidebarToggleProps): import("preact").JSX.Element;
25
+ export declare function SidebarToggle({ nodes, navigation, currentSlug, rootMenuItems, backToMenuLabel, locale, localeLinks, themeDefaultMode, themeLabels, themeRespectSystem, dateFormats, }: SidebarToggleProps): import("@takazudo/zfb").Description;
29
26
  export declare namespace SidebarToggle {
30
27
  var displayName: string;
31
28
  }
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import { Fragment, jsx, jsxs } from "preact/jsx-runtime";
3
- import { useState, useEffect, useRef } from "preact/hooks";
2
+ import { Fragment, jsx, jsxs } from "@takazudo/zfb/zudo-react/jsx-runtime";
3
+ import { computed, getScope, signal } from "@takazudo/zfb/zudo-react";
4
4
  import { AFTER_NAVIGATE_EVENT, ensureNestedIslandPropsRefresh } from "../transitions/index.js";
5
5
  import { SidebarTree } from "../sidebar-tree-island/index.js";
6
6
  ensureNestedIslandPropsRefresh();
@@ -8,6 +8,7 @@ const cx = (...classes) => classes.filter(Boolean).join(" ");
8
8
  const HIDDEN_ICON_STYLE = "display:none";
9
9
  function SidebarToggle({
10
10
  nodes,
11
+ navigation,
11
12
  currentSlug,
12
13
  rootMenuItems,
13
14
  backToMenuLabel,
@@ -18,78 +19,93 @@ function SidebarToggle({
18
19
  themeRespectSystem,
19
20
  dateFormats
20
21
  }) {
21
- const [open, setOpen] = useState(false);
22
- const hamburgerRef = useRef(null);
23
- useEffect(() => {
24
- if (open) {
25
- document.body.style.overflow = "hidden";
26
- } else {
27
- document.body.style.overflow = "";
28
- }
22
+ const open = signal(false);
23
+ const hamburgerRef = { current: null };
24
+ const closeIconRef = { current: null };
25
+ const menuIconRef = { current: null };
26
+ const scope = getScope();
27
+ scope.effect(() => {
28
+ const isOpen = open.value;
29
+ document.body.style.overflow = isOpen ? "hidden" : "";
30
+ if (isOpen) closeIconRef.current?.style.removeProperty("display");
31
+ else closeIconRef.current?.style.setProperty("display", "none");
32
+ if (isOpen) menuIconRef.current?.style.setProperty("display", "none");
33
+ else menuIconRef.current?.style.removeProperty("display");
29
34
  return () => {
30
35
  document.body.style.overflow = "";
31
36
  };
32
- }, [open]);
33
- useEffect(() => {
34
- function handleSwap() {
35
- setOpen(false);
36
- }
37
+ });
38
+ scope.onActivate(() => {
39
+ const handleSwap = () => {
40
+ open.value = false;
41
+ };
37
42
  document.addEventListener(AFTER_NAVIGATE_EVENT, handleSwap);
38
43
  return () => document.removeEventListener(AFTER_NAVIGATE_EVENT, handleSwap);
39
- }, []);
40
- useEffect(() => {
41
- if (!open) return;
44
+ });
45
+ scope.effect(() => {
46
+ if (!open.value) return;
42
47
  function handleKeyDown(event) {
43
- if (event.isComposing) return;
44
- if (event.defaultPrevented) return;
45
- if (event.key === "Escape") {
46
- setOpen(false);
48
+ const keyboard = event;
49
+ if (keyboard.isComposing) return;
50
+ if (keyboard.defaultPrevented) return;
51
+ if (keyboard.key === "Escape") {
52
+ open.value = false;
47
53
  hamburgerRef.current?.focus();
48
54
  }
49
55
  }
50
56
  document.addEventListener("keydown", handleKeyDown);
51
57
  return () => document.removeEventListener("keydown", handleKeyDown);
52
- }, [open]);
58
+ });
59
+ const isClosed = computed(() => !open.value);
60
+ const toggleClass = computed(
61
+ () => cx(
62
+ "lg:hidden shrink-0 px-hsp-sm py-vsp-xs -ml-hsp-sm mr-hsp-sm text-muted hover:text-fg",
63
+ open.value && "relative z-modal"
64
+ )
65
+ );
66
+ const backdropClass = computed(
67
+ () => cx(
68
+ "fixed inset-0 z-modal-backdrop bg-overlay/30 lg:hidden",
69
+ !open.value && "hidden"
70
+ )
71
+ );
72
+ const panelClass = computed(() => `
73
+ fixed top-[3.5rem] left-0 z-modal h-[calc(100vh_-_3.5rem)] w-[16rem] flex flex-col
74
+ border-r border-muted bg-bg transition-transform duration-200
75
+ lg:hidden
76
+ ${open.value ? "translate-x-0" : "-translate-x-full"}
77
+ `);
53
78
  return /* @__PURE__ */ jsxs(Fragment, { children: [
54
79
  /* @__PURE__ */ jsxs(
55
80
  "button",
56
81
  {
57
82
  ref: hamburgerRef,
58
83
  type: "button",
59
- onClick: () => setOpen(!open),
60
- className: cx(
61
- "lg:hidden shrink-0 px-hsp-sm py-vsp-xs -ml-hsp-sm mr-hsp-sm text-muted hover:text-fg",
62
- // While open, the button IS the close control (it shows the X), so it
63
- // has to sit in the drawer's own tier rather than under the backdrop —
64
- // `z-modal-backdrop` (50) otherwise intercepts every pointer event at
65
- // the button's own centre and the X is unclickable
66
- // (zudolab/zudo-doc#4369). `relative` is required: a bare `z-index`
67
- // has no effect on a statically-positioned element.
68
- // Conditioning on `open` is load-bearing, not cosmetic: SSR always
69
- // renders `open=false`, so the closed-state markup stays
70
- // byte-identical (hydration-stable, and the A2 no-stub parity hashes
71
- // for this directory do not move).
72
- open && "relative z-modal"
84
+ "on:click": () => {
85
+ open.value = !open.value;
86
+ },
87
+ class: toggleClass,
88
+ "aria-label": computed(
89
+ () => open.value ? "Close sidebar" : "Open sidebar"
73
90
  ),
74
- "aria-label": open ? "Close sidebar" : "Open sidebar",
75
- "aria-expanded": open,
91
+ "aria-expanded": computed(() => open.value ? "true" : "false"),
76
92
  children: [
77
93
  /* @__PURE__ */ jsx(
78
94
  "svg",
79
95
  {
80
- xmlns: "http://www.w3.org/2000/svg",
81
- className: "h-icon-lg w-icon-lg",
82
- style: open ? void 0 : HIDDEN_ICON_STYLE,
96
+ ref: closeIconRef,
97
+ class: "h-icon-lg w-icon-lg",
98
+ style: HIDDEN_ICON_STYLE,
83
99
  "aria-hidden": "true",
84
100
  fill: "none",
85
101
  viewBox: "0 0 24 24",
86
102
  stroke: "currentColor",
87
- strokeWidth: 2,
103
+ "stroke-width": 2,
88
104
  children: /* @__PURE__ */ jsx(
89
105
  "path",
90
106
  {
91
- strokeLinecap: "round",
92
- strokeLinejoin: "round",
107
+ "stroke-linecap": "round",
108
+ "stroke-linejoin": "round",
93
109
  d: "M6 18L18 6M6 6l12 12"
94
110
  }
95
111
  )
@@ -98,19 +114,18 @@ function SidebarToggle({
98
114
  /* @__PURE__ */ jsx(
99
115
  "svg",
100
116
  {
101
- xmlns: "http://www.w3.org/2000/svg",
102
- className: "h-icon-lg w-icon-lg",
103
- style: open ? HIDDEN_ICON_STYLE : void 0,
117
+ ref: menuIconRef,
118
+ class: "h-icon-lg w-icon-lg",
104
119
  "aria-hidden": "true",
105
120
  fill: "none",
106
121
  viewBox: "0 0 24 24",
107
122
  stroke: "currentColor",
108
- strokeWidth: 2,
123
+ "stroke-width": 2,
109
124
  children: /* @__PURE__ */ jsx(
110
125
  "path",
111
126
  {
112
- strokeLinecap: "round",
113
- strokeLinejoin: "round",
127
+ "stroke-linecap": "round",
128
+ "stroke-linejoin": "round",
114
129
  d: "M4 6h16M4 12h16M4 18h16"
115
130
  }
116
131
  )
@@ -122,26 +137,24 @@ function SidebarToggle({
122
137
  /* @__PURE__ */ jsx(
123
138
  "div",
124
139
  {
125
- className: cx("fixed inset-0 z-modal-backdrop bg-overlay/30 lg:hidden", !open && "hidden"),
126
- "aria-hidden": !open,
127
- onClick: () => setOpen(false)
140
+ class: backdropClass,
141
+ "aria-hidden": isClosed,
142
+ "on:click": () => {
143
+ open.value = false;
144
+ }
128
145
  }
129
146
  ),
130
147
  /* @__PURE__ */ jsx(
131
148
  "aside",
132
149
  {
133
- inert: !open,
150
+ inert: isClosed,
134
151
  "data-zd-mobile-sidebar": true,
135
- className: `
136
- fixed top-[3.5rem] left-0 z-modal h-[calc(100vh-3.5rem)] w-[16rem] flex flex-col
137
- border-r border-muted bg-bg transition-transform duration-200
138
- lg:hidden
139
- ${open ? "translate-x-0" : "-translate-x-full"}
140
- `,
141
- children: /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto", children: /* @__PURE__ */ jsx(
152
+ class: panelClass,
153
+ children: /* @__PURE__ */ jsx("div", { class: "flex-1 overflow-y-auto", children: /* @__PURE__ */ jsx(
142
154
  SidebarTree,
143
155
  {
144
156
  nodes,
157
+ navigation,
145
158
  currentSlug,
146
159
  rootMenuItems,
147
160
  backToMenuLabel,