@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
@@ -1,12 +1,7 @@
1
1
  "use client";
2
2
 
3
3
  /** @jsxRuntime automatic */
4
- /** @jsxImportSource preact */
5
- // Use preact hook entrypoints directly — the "react" → "preact/compat" alias
6
- // lets us consume React-typed components in this Preact app.
7
- import { useState, useEffect, useRef } from "preact/hooks";
8
- // After zudolab/zudo-doc#1335 the host components pull lifecycle event names
9
- // from the v2 transitions module rather than hard-coding `astro:*` literals.
4
+ import { computed, getScope, signal, type Ref } from "@takazudo/zfb/zudo-react";
10
5
  // `ensureNestedIslandPropsRefresh` is imported through the barrel (not the
11
6
  // deep `./nested-island-props-refresh.js` path) on purpose: eject rewrites
12
7
  // EVERY `../transitions/<anything>.js` import to the single specifier
@@ -15,20 +10,19 @@ import { useState, useEffect, useRef } from "preact/hooks";
15
10
  import { AFTER_NAVIGATE_EVENT, ensureNestedIslandPropsRefresh } from "../transitions/index.js";
16
11
  import { SidebarTree } from "../sidebar-tree-island/index.js";
17
12
  import type { ThemeToggleLabels } from "../theme-toggle/index.js";
18
- import type { SidebarNavNode, SidebarRootMenuItem, SidebarLocaleLink } from "../sidebar/types.js";
13
+ import type { SidebarNavNode, SidebarRootMenuItem, SidebarLocaleLink, SidebarNavigationContext } from "../sidebar/types.js";
19
14
  import type { ResolvedDateFormats } from "../settings.js";
20
15
 
21
- // This island lives INSIDE the persisted `<header>`, so a same-locale swap
22
- // lifts it verbatim and would re-mount it from the previous page's serialized
23
- // props (zudolab/zudo-doc#3525). The refresh has to outlive the island's own
24
- // mount/unmount cycle across a swap, so it is installed at document lifetime
25
- // here rather than from an effect. SSR evaluation is a safe no-op.
16
+ // This island lives inside the persisted `<header>`. Install the shared
17
+ // document-lifetime preparation helper eagerly and idempotently so the native
18
+ // zfb 3.1 lifecycle can retain unchanged nested islands and recreate this one
19
+ // when its serialized page props change. SSR evaluation is a safe no-op.
26
20
  ensureNestedIslandPropsRefresh();
27
21
 
28
22
  const cx = (...classes: Array<string | false | null | undefined>) =>
29
23
  classes.filter(Boolean).join(" ");
30
24
 
31
- // Icon visibility deliberately does NOT ride on Tailwind's `.hidden` utility.
25
+ // Icon visibility deliberately does NOT ride on the `.hidden` utility.
32
26
  // `.hidden` is emitted inside `@layer utilities`, and a consumer component pack
33
27
  // that ships an UNLAYERED media reset — `img, svg, video, … { display: block }`
34
28
  // — outranks every layered rule by cascade-layer precedence, no matter the
@@ -41,16 +35,16 @@ const HIDDEN_ICON_STYLE = "display:none";
41
35
 
42
36
  // Mobile drawer hosts the SidebarTree directly (rather than receiving it as
43
37
  // JSX children) so the tree's data props ride across the SSR → hydrate
44
- // boundary inside the Island marker's `data-props` attribute. zfb's
45
- // `Island()` only serialises a child component's *own* props (excluding
46
- // `children`); when SidebarTree was passed as `children`, its data was
47
- // dropped during hydration and Preact wiped the SSR-rendered tree DOM.
38
+ // boundary inside this island's `data-props` attribute. The island marker
39
+ // serializes the component's own props, not a child's props hidden inside
40
+ // `children`; passing SidebarTree that way drops its data at hydration.
48
41
  // Mirroring the desktop `<Sidebar treeComponent={SidebarTree} ...>` shape
49
42
  // keeps the data attached to the wrapping island. zudolab/zudo-doc#1355
50
43
  // wave 13.5.
51
44
 
52
45
  export interface SidebarToggleProps {
53
46
  nodes: SidebarNavNode[];
47
+ navigation?: SidebarNavigationContext;
54
48
  currentSlug?: string;
55
49
  rootMenuItems?: SidebarRootMenuItem[];
56
50
  backToMenuLabel?: string;
@@ -61,21 +55,18 @@ export interface SidebarToggleProps {
61
55
  themeLabels?: ThemeToggleLabels;
62
56
  themeRespectSystem?: boolean;
63
57
  /**
64
- * Forwarded verbatim to the hosted `<SidebarTree>`. This island is the one
65
- * nested under the persisted `<header>`, so on a same-locale soft navigation
66
- * its serialized `data-props` is lifted from the previous page and refreshed
67
- * wholesale by `nested-island-props-refresh` — which carries the resolved
68
- * patterns along with `nodes`, at no extra cost, because that helper copies
69
- * the blob rather than enumerating prop names (#4075). The patterns cannot
70
- * actually differ across such a swap (the persist key is `header-${lang}`,
71
- * so a locale change is never a persisted swap); what matters is that they
72
- * are not LOST from the lifted island.
58
+ * Forwarded verbatim to the hosted `<SidebarTree>`. The same-locale header
59
+ * may persist across a soft navigation; zfb 3.1 keeps this island live when
60
+ * its effective props are unchanged and recreates it from incoming props
61
+ * when page data changes. The locale-keyed header persistence key prevents
62
+ * locale-specific props from crossing locales.
73
63
  */
74
64
  dateFormats?: ResolvedDateFormats;
75
65
  }
76
66
 
77
67
  export function SidebarToggle({
78
68
  nodes,
69
+ navigation,
79
70
  currentSlug,
80
71
  rootMenuItems,
81
72
  backToMenuLabel,
@@ -86,35 +77,37 @@ export function SidebarToggle({
86
77
  themeRespectSystem,
87
78
  dateFormats,
88
79
  }: SidebarToggleProps) {
89
- // Initial state must match SSR (`open=false`) so the hydration DOM
90
- // matches the SSG output byte-for-byte. The backdrop and toggle-icon
91
- // are rendered unconditionally below so the hydration tree has the
92
- // same shape regardless of `open`, preventing Preact from re-mounting
93
- // the subtree (which can drop click handlers on the hamburger button).
94
- const [open, setOpen] = useState(false);
95
- // Focus-restore target for the Escape handler below. A `ref` does not
96
- // serialise, so SSR/hydration markup is unaffected (zudolab/zudo-doc#4366).
97
- const hamburgerRef = useRef<HTMLButtonElement>(null);
80
+ // State starts closed on the server and client so the hydration markup is
81
+ // byte-stable. The tree stays mounted inside this island and receives the
82
+ // page props directly; it is not wrapped in another Island.
83
+ const open = signal(false);
84
+ const hamburgerRef: Ref<HTMLButtonElement> = { current: null };
85
+ const closeIconRef: Ref<SVGSVGElement> = { current: null };
86
+ const menuIconRef: Ref<SVGSVGElement> = { current: null };
87
+ const scope = getScope();
98
88
 
99
- useEffect(() => {
100
- if (open) {
101
- document.body.style.overflow = "hidden";
102
- } else {
103
- document.body.style.overflow = "";
104
- }
89
+ // Keep the v2 body-scroll behavior and always release the lock when this
90
+ // scope closes or is disposed.
91
+ scope.effect(() => {
92
+ const isOpen = open.value;
93
+ document.body.style.overflow = isOpen ? "hidden" : "";
94
+ if (isOpen) closeIconRef.current?.style.removeProperty("display");
95
+ else closeIconRef.current?.style.setProperty("display", "none");
96
+ if (isOpen) menuIconRef.current?.style.setProperty("display", "none");
97
+ else menuIconRef.current?.style.removeProperty("display");
105
98
  return () => {
106
99
  document.body.style.overflow = "";
107
100
  };
108
- }, [open]);
101
+ });
109
102
 
110
- // Close mobile sidebar on View Transition navigation
111
- useEffect(() => {
112
- function handleSwap() {
113
- setOpen(false);
114
- }
103
+ // Close the mobile drawer after a client-side route swap.
104
+ scope.onActivate(() => {
105
+ const handleSwap = () => {
106
+ open.value = false;
107
+ };
115
108
  document.addEventListener(AFTER_NAVIGATE_EVENT, handleSwap);
116
109
  return () => document.removeEventListener(AFTER_NAVIGATE_EVENT, handleSwap);
117
- }, []);
110
+ });
118
111
 
119
112
  // Escape-to-close (zudolab/zudo-doc#4366). Deliberately inlined rather than
120
113
  // reusing `connectEscapeToClose` from theme-pack-switcher/switcher-state.js
@@ -127,91 +120,101 @@ export function SidebarToggle({
127
120
  // the hamburger synchronously in the handler — the `<aside>` goes `inert`
128
121
  // on close, so without this, focus left inside the drawer would strand on
129
122
  // `<body>` and defeat the point of the fix for keyboard/AT users.
130
- useEffect(() => {
131
- if (!open) return;
132
- function handleKeyDown(event: KeyboardEvent) {
123
+ scope.effect(() => {
124
+ if (!open.value) return;
125
+ function handleKeyDown(event: Event) {
126
+ const keyboard = event as KeyboardEvent;
133
127
  // An Escape that ends an IME composition belongs to the composition, not
134
128
  // to the drawer: cancelling a Japanese conversion in the drawer's own
135
129
  // "Filter navigation" input would otherwise dismiss the whole drawer and
136
130
  // yank focus to the hamburger. Same guard the sibling document-level
137
131
  // shortcut in `sidebar-tree-island/index.tsx` already uses.
138
- if (event.isComposing) return;
132
+ if (keyboard.isComposing) return;
139
133
  // A nested popover (the Appearance menu, or its trigger button) that
140
134
  // owns this Escape already called preventDefault() + stopPropagation()
141
135
  // to consume it for itself — see theme-toggle/index.tsx. Respecting
142
136
  // defaultPrevented here establishes layered Escape ownership: the first
143
137
  // Escape closes only the nested layer, and only a second, unconsumed
144
138
  // Escape reaches the drawer (zudolab/zudo-doc#4393).
145
- if (event.defaultPrevented) return;
146
- if (event.key === "Escape") {
147
- setOpen(false);
139
+ if (keyboard.defaultPrevented) return;
140
+ if (keyboard.key === "Escape") {
141
+ open.value = false;
148
142
  hamburgerRef.current?.focus();
149
143
  }
150
144
  }
151
145
  document.addEventListener("keydown", handleKeyDown);
152
146
  return () => document.removeEventListener("keydown", handleKeyDown);
153
- }, [open]);
147
+ });
154
148
 
149
+ const isClosed = computed(() => !open.value);
150
+ const toggleClass = computed(() =>
151
+ cx(
152
+ "lg:hidden shrink-0 px-hsp-sm py-vsp-xs -ml-hsp-sm mr-hsp-sm text-muted hover:text-fg",
153
+ open.value && "relative z-modal",
154
+ ),
155
+ );
156
+ const backdropClass = computed(() =>
157
+ cx(
158
+ "fixed inset-0 z-modal-backdrop bg-overlay/30 lg:hidden",
159
+ !open.value && "hidden",
160
+ ),
161
+ );
162
+ const panelClass = computed(() => `
163
+ fixed top-[3.5rem] left-0 z-modal h-[calc(100vh_-_3.5rem)] w-[16rem] flex flex-col
164
+ border-r border-muted bg-bg transition-transform duration-200
165
+ lg:hidden
166
+ ${open.value ? "translate-x-0" : "-translate-x-full"}
167
+ `);
155
168
  return (
156
169
  <>
157
170
  {/* Hamburger button - visible only on mobile.
158
171
  Both icons are always rendered so the SSR output has the same
159
- DOM shape as the post-hydration tree. The inactive one is hidden
172
+ DOM shape as the hydrated tree. The inactive one is hidden
160
173
  via an inline `display:none` (see HIDDEN_ICON_STYLE above), so
161
- Preact's hydration walk sees byte-stable markup and keeps the
162
- click handler attached. */}
174
+ zudo-react hydrates byte-stable markup and keeps the click handler
175
+ attached. */}
163
176
  <button
164
177
  ref={hamburgerRef}
165
178
  type="button"
166
- onClick={() => setOpen(!open)}
167
- className={cx(
168
- "lg:hidden shrink-0 px-hsp-sm py-vsp-xs -ml-hsp-sm mr-hsp-sm text-muted hover:text-fg",
169
- // While open, the button IS the close control (it shows the X), so it
170
- // has to sit in the drawer's own tier rather than under the backdrop —
171
- // `z-modal-backdrop` (50) otherwise intercepts every pointer event at
172
- // the button's own centre and the X is unclickable
173
- // (zudolab/zudo-doc#4369). `relative` is required: a bare `z-index`
174
- // has no effect on a statically-positioned element.
175
- // Conditioning on `open` is load-bearing, not cosmetic: SSR always
176
- // renders `open=false`, so the closed-state markup stays
177
- // byte-identical (hydration-stable, and the A2 no-stub parity hashes
178
- // for this directory do not move).
179
- open && "relative z-modal",
179
+ on:click={() => {
180
+ open.value = !open.value;
181
+ }}
182
+ class={toggleClass}
183
+ aria-label={computed(() =>
184
+ open.value ? "Close sidebar" : "Open sidebar",
180
185
  )}
181
- aria-label={open ? "Close sidebar" : "Open sidebar"}
182
- aria-expanded={open}
186
+ aria-expanded={computed(() => (open.value ? "true" : "false"))}
183
187
  >
184
188
  {/* X icon — visible only when open */}
185
189
  <svg
186
- xmlns="http://www.w3.org/2000/svg"
187
- className="h-icon-lg w-icon-lg"
188
- style={open ? undefined : HIDDEN_ICON_STYLE}
190
+ ref={closeIconRef}
191
+ class="h-icon-lg w-icon-lg"
192
+ style={HIDDEN_ICON_STYLE}
189
193
  aria-hidden="true"
190
194
  fill="none"
191
195
  viewBox="0 0 24 24"
192
196
  stroke="currentColor"
193
- strokeWidth={2}
197
+ stroke-width={2}
194
198
  >
195
199
  <path
196
- strokeLinecap="round"
197
- strokeLinejoin="round"
200
+ stroke-linecap="round"
201
+ stroke-linejoin="round"
198
202
  d="M6 18L18 6M6 6l12 12"
199
203
  />
200
204
  </svg>
201
205
  {/* Hamburger icon — visible only when closed */}
202
206
  <svg
203
- xmlns="http://www.w3.org/2000/svg"
204
- className="h-icon-lg w-icon-lg"
205
- style={open ? HIDDEN_ICON_STYLE : undefined}
207
+ ref={menuIconRef}
208
+ class="h-icon-lg w-icon-lg"
206
209
  aria-hidden="true"
207
210
  fill="none"
208
211
  viewBox="0 0 24 24"
209
212
  stroke="currentColor"
210
- strokeWidth={2}
213
+ stroke-width={2}
211
214
  >
212
215
  <path
213
- strokeLinecap="round"
214
- strokeLinejoin="round"
216
+ stroke-linecap="round"
217
+ stroke-linejoin="round"
215
218
  d="M4 6h16M4 12h16M4 18h16"
216
219
  />
217
220
  </svg>
@@ -226,14 +229,16 @@ export function SidebarToggle({
226
229
  dims the whole viewport, header included. The toggle button is the
227
230
  one exception — while open it renders the X and advertises itself as
228
231
  the close control, so it is lifted to `z-modal` (60) for exactly as
229
- long as the drawer is open (see its className above). Everything else
230
- in the header stays dimmed and non-interactive underneath.
231
- Backdrop tapping (onClick below) remains a valid dismissal, as does
232
- Escape (zudolab/zudo-doc#4366). */}
232
+ long as the drawer is open (see the button class above). Everything
233
+ else in the header stays dimmed and non-interactive underneath.
234
+ Backdrop tapping and Escape remain valid dismissals
235
+ (zudolab/zudo-doc#4366). */}
233
236
  <div
234
- className={cx("fixed inset-0 z-modal-backdrop bg-overlay/30 lg:hidden", !open && "hidden")}
235
- aria-hidden={!open}
236
- onClick={() => setOpen(false)}
237
+ class={backdropClass}
238
+ aria-hidden={isClosed}
239
+ on:click={() => {
240
+ open.value = false;
241
+ }}
237
242
  />
238
243
 
239
244
  {/* Sidebar panel - mobile only (desktop sidebar is in doc-layout).
@@ -249,18 +254,14 @@ export function SidebarToggle({
249
254
  `inert` it is UNCONDITIONAL, so it is hydration-stable by
250
255
  construction: it does not vary with `open`. */}
251
256
  <aside
252
- inert={!open}
257
+ inert={isClosed}
253
258
  data-zd-mobile-sidebar
254
- className={`
255
- fixed top-[3.5rem] left-0 z-modal h-[calc(100vh-3.5rem)] w-[16rem] flex flex-col
256
- border-r border-muted bg-bg transition-transform duration-200
257
- lg:hidden
258
- ${open ? "translate-x-0" : "-translate-x-full"}
259
- `}
259
+ class={panelClass}
260
260
  >
261
- <div className="flex-1 overflow-y-auto">
261
+ <div class="flex-1 overflow-y-auto">
262
262
  <SidebarTree
263
263
  nodes={nodes}
264
+ navigation={navigation}
264
265
  currentSlug={currentSlug}
265
266
  rootMenuItems={rootMenuItems}
266
267
  backToMenuLabel={backToMenuLabel}