@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,5 +1,4 @@
1
1
  /** @jsxRuntime automatic */
2
- /** @jsxImportSource preact */
3
2
  // doc-pager — factory for the shared prev/next pager <nav> (epic #2344, S7).
4
3
  //
5
4
  // The host's `pages/lib/_doc-pager.tsx` previously read the `t` function
@@ -7,7 +6,7 @@
7
6
  // injected dependency so the logic lives in the package while the host stub
8
7
  // keeps the singleton imports.
9
8
 
10
- import type { JSX } from "preact";
9
+ import type { JSX } from "@takazudo/zfb/zudo-react/jsx-runtime";
11
10
  import { ChevronLeft, ChevronRight } from "../icons/index.js";
12
11
  import type { ChromeContext } from "../factory-context/index.js";
13
12
  import type { Settings } from "../settings.js";
@@ -66,7 +65,7 @@ export function createDocPager<S extends Settings = Settings>(
66
65
  class="group border border-muted rounded-lg p-hsp-lg hover:border-accent"
67
66
  >
68
67
  <div class="flex items-center gap-hsp-xs text-caption text-muted mb-vsp-2xs group-hover:text-accent group-focus-visible:text-accent">
69
- <ChevronLeft className="h-[1.125rem] w-[1.125rem]" />
68
+ <ChevronLeft class="h-[1.125rem] w-[1.125rem]" />
70
69
  <span class="no-underline">{t("nav.previous", locale)}</span>
71
70
  </div>
72
71
  <p class="text-small font-semibold text-fg group-hover:text-accent group-hover:underline group-focus-visible:text-accent group-focus-visible:underline">
@@ -88,7 +87,7 @@ export function createDocPager<S extends Settings = Settings>(
88
87
  >
89
88
  <div class="flex items-center justify-end gap-hsp-xs text-caption text-muted mb-vsp-2xs group-hover:text-accent group-focus-visible:text-accent">
90
89
  <span class="no-underline">{t("nav.next", locale)}</span>
91
- <ChevronRight className="h-[1.125rem] w-[1.125rem]" />
90
+ <ChevronRight class="h-[1.125rem] w-[1.125rem]" />
92
91
  </div>
93
92
  <p class="text-small font-semibold text-fg group-hover:text-accent group-hover:underline group-focus-visible:text-accent group-focus-visible:underline">
94
93
  {next.label}
@@ -1,6 +1,4 @@
1
1
  /** @jsxRuntime automatic */
2
- /** @jsxImportSource preact */
3
-
4
2
  // Footer presentational shell for the documentation layout.
5
3
  //
6
4
  // The original template mixed data-prep (settings + getDocsCollection
@@ -22,7 +20,7 @@
22
20
  // - The link/tag column grid is only emitted when at least one column is
23
21
  // present (mirrors the Astro `hasColumns &&` guard).
24
22
  //
25
- // - The copyright block is rendered as-is via `dangerouslySetInnerHTML`
23
+ // - The copyright block is rendered as-is via `rawHtml`
26
24
  // because the original template used `<Fragment set:html={copyright} />`
27
25
  // to allow inline anchors. Callers are responsible for sanitising
28
26
  // the string (the Astro version did the same — it trusted
@@ -33,7 +31,7 @@
33
31
  // `mt-vsp-lg border-t border-muted pt-vsp-md` that the Astro template
34
32
  // applied via `class:list` conditional.
35
33
 
36
- import type { VNode } from "preact";
34
+ import type { Child } from "@takazudo/zfb/zudo-react";
37
35
 
38
36
  import type { FooterLinkColumn, FooterTagColumn } from "./types.js";
39
37
 
@@ -50,7 +48,7 @@ export interface FooterProps {
50
48
  */
51
49
  tagColumns?: FooterTagColumn[];
52
50
  /**
53
- * Copyright HTML. Rendered via `dangerouslySetInnerHTML` so embedded
51
+ * Copyright HTML. Rendered via `rawHtml` so embedded
54
52
  * anchors work. The caller is responsible for the contents.
55
53
  */
56
54
  copyright?: string;
@@ -71,7 +69,7 @@ export interface FooterProps {
71
69
  * configured. The inner content (link grid, copyright) is only emitted
72
70
  * when the respective slots carry data.
73
71
  */
74
- export function Footer(props: FooterProps): VNode {
72
+ export function Footer(props: FooterProps): Child {
75
73
  const linkColumns = props.linkColumns ?? [];
76
74
  const tagColumns = props.tagColumns ?? [];
77
75
  const copyright = props.copyright ?? "";
@@ -81,8 +79,8 @@ export function Footer(props: FooterProps): VNode {
81
79
  const hasCopyright = copyright.length > 0;
82
80
 
83
81
  const copyrightClass = hasColumns
84
- ? "text-center text-caption text-muted [&_a]:underline [&_a:hover]:text-accent [&_a:focus-visible]:text-accent mt-vsp-lg border-t border-muted pt-vsp-md"
85
- : "text-center text-caption text-muted [&_a]:underline [&_a:hover]:text-accent [&_a:focus-visible]:text-accent";
82
+ ? "text-center text-caption text-muted zd-footer-copyright-links mt-vsp-lg border-t border-muted pt-vsp-md"
83
+ : "text-center text-caption text-muted zd-footer-copyright-links";
86
84
 
87
85
  return (
88
86
  <footer
@@ -159,7 +157,7 @@ export function Footer(props: FooterProps): VNode {
159
157
  {hasCopyright && (
160
158
  <div
161
159
  class={copyrightClass}
162
- dangerouslySetInnerHTML={{ __html: copyright }}
160
+ rawHtml={copyright}
163
161
  />
164
162
  )}
165
163
  </div>
@@ -1,23 +1,18 @@
1
1
  /** @jsxRuntime automatic */
2
- /** @jsxImportSource preact */
3
-
4
2
  // Layout-level JSX port of `src/components/header` for the
5
3
  // zudo-doc framework primitives layer (super-epic #473, sub-issue
6
4
  // #476). The component is intentionally server-render-friendly: it
7
5
  // emits the same markup the legacy Astro template did, leaving the two
8
6
  // interactive child islands (the mobile sidebar toggle and the dropdown
9
7
  // "..." overflow controller) as either consumer-supplied slots or an
10
- // inline-script `<script dangerouslySetInnerHTML>`.
8
+ // inline-script `<script rawHtml>`.
11
9
  //
12
10
  // Why this shape:
13
- // * The Astro template embeds three Astro-only sub-components
14
- // (`<LanguageSwitcher />`, `<VersionSwitcher />`, `<Search />`).
15
- // None of those have a JSX equivalent yet (Task #3 ports them), so
16
- // they are exposed as `languageSwitcher` / `versionSwitcher` /
17
- // `search` slot props. The host project keeps using
18
- // `header` until the sibling ports land — this file exists
19
- // so consumers of the v2 package can opt into the JSX path early.
20
- // * The two Preact islands (`SidebarToggle`, `ThemeToggle`) are also
11
+ // * The Astro template embeds locale/version switchers and a search
12
+ // widget. Their ports remain injectable through `languageSwitcher` /
13
+ // `versionSwitcher` / `search` slot props so this host-agnostic header
14
+ // does not depend on the concrete widget configuration.
15
+ // * The two interactive islands (`SidebarToggle`, `ThemeToggle`) are also
21
16
  // accepted as slots so consumers control hydration boundaries
22
17
  // (e.g. wrap them in zfb's `<Island when="media">` / `<Island
23
18
  // when="load">`). The matching `<slot name="sidebar" />` in the
@@ -32,12 +27,13 @@
32
27
  // `./nav-active.ts` so they stay unit-testable without booting the
33
28
  // host config.
34
29
  // * The inline overflow script is a pure-JS string emitted via
35
- // `dangerouslySetInnerHTML` (see `./nav-overflow-script.ts`). The
30
+ // `rawHtml` (see `./nav-overflow-script.ts`). The
36
31
  // behaviour is identical to the original `<script>` block — only
37
32
  // the TypeScript syntax was stripped because a raw `<script>` tag
38
33
  // ships its body to the browser as-is.
39
34
 
40
- import type { ComponentChildren, JSX, VNode } from "preact";
35
+ import type { Child } from "@takazudo/zfb/zudo-react";
36
+ import type { JSX } from "@takazudo/zfb/zudo-react/jsx-runtime";
41
37
  import {
42
38
  computeActiveNavPath,
43
39
  isNavItemActive,
@@ -120,7 +116,7 @@ export interface HeaderProps {
120
116
  * replaces the legacy `<slot name="sidebar" />`. Consumers pass the
121
117
  * sidebar tree they want to surface in the mobile sheet.
122
118
  */
123
- sidebarSlot?: ComponentChildren;
119
+ sidebarSlot?: Child;
124
120
 
125
121
  /**
126
122
  * Replacement for the `<SidebarToggle client:media="...">` element in
@@ -130,23 +126,23 @@ export interface HeaderProps {
130
126
  * that slot — the layout is still valid (e.g. doc pages with
131
127
  * `hide_sidebar`).
132
128
  */
133
- sidebarToggle?: ComponentChildren;
129
+ sidebarToggle?: Child;
134
130
 
135
131
  /**
136
132
  * Replacement for `<ThemeToggle client:load />`. Rendered only when
137
133
  * `colorModeEnabled` is `true` AND a `theme-toggle` entry survives
138
134
  * `filterHeaderRightItems` — matching the original template.
139
135
  */
140
- themeToggle?: ComponentChildren;
136
+ themeToggle?: Child;
141
137
 
142
138
  /** Replacement for the `<LanguageSwitcher />` Astro child. */
143
- languageSwitcher?: ComponentChildren;
139
+ languageSwitcher?: Child;
144
140
 
145
141
  /** Replacement for the `<VersionSwitcher />` Astro child. */
146
- versionSwitcher?: ComponentChildren;
142
+ versionSwitcher?: Child;
147
143
 
148
144
  /** Replacement for the `<Search />` Astro child. */
149
- search?: ComponentChildren;
145
+ search?: Child;
150
146
 
151
147
  /**
152
148
  * Emits `data-zfb-transition-persist={persistKey}` on the
@@ -314,9 +310,9 @@ export function Header(props: HeaderProps): JSX.Element {
314
310
  rightItemDispatch,
315
311
  ),
316
312
  }))
317
- .filter((entry): entry is typeof entry & { node: VNode } => entry.node !== null);
318
- const rightGroups: VNode[] = [];
319
- let iconGroup: VNode[] = [];
313
+ .filter((entry): entry is typeof entry & { node: Child } => entry.node !== null);
314
+ const rightGroups: Child[] = [];
315
+ let iconGroup: Child[] = [];
320
316
 
321
317
  const flushIconGroup = () => {
322
318
  if (iconGroup.length === 0) return;
@@ -358,20 +354,14 @@ export function Header(props: HeaderProps): JSX.Element {
358
354
  // re-binds the dropdown toggle on AFTER_NAVIGATE_EVENT, and
359
355
  // VERSION_SWITCHER_REWIRE_SCRIPT recomputes the menu from
360
356
  // window.location on the same event (zudolab/zudo-doc#2553).
361
- // - Search: <site-search> custom element re-registers on
362
- // AFTER_NAVIGATE_EVENT (_search-widget-script.ts:184, verified (a))
357
+ // - Search: the persisted <site-search> instance refreshes its
358
+ // page-level state on AFTER_NAVIGATE_EVENT.
363
359
  // - SidebarToggle (mobile): closes on AFTER_NAVIGATE_EVENT
364
- // (sidebar-toggle-island/index.tsx, verified (a)). Its section tree
365
- // rides the Island's serialised data-props, and re-hydration alone
366
- // does NOT correct it — the header is lifted verbatim, so the Island
367
- // re-mounts from the OLD props (zudolab/zudo-doc#3525). What corrects
368
- // it is `ensureNestedIslandPropsRefresh`
369
- // (transitions/nested-island-props-refresh.ts, registered from the
370
- // island module): on BEFORE_SWAP_EVENT it copies the incoming
371
- // document's data-props onto the live nested islands, and
372
- // mountNewIslands re-reads the attribute at mount time (#3530)
373
- // Host islands can opt out with data-zd-props-preserve on the live
374
- // island or an ancestor inside this persisted root (#3555).
360
+ // (sidebar-toggle-island/index.tsx). zfb 3.1 keeps unchanged island
361
+ // roots live and applies changed incoming props natively. The
362
+ // transition adapter copies old props only for islands opted into
363
+ // host preservation with data-zd-props-preserve; unsafe incoming
364
+ // structure drops persistence before native reconciliation.
375
365
  // - Header nav + aria-current: NAV_OVERFLOW_SCRIPT re-runs on
376
366
  // AFTER_NAVIGATE_EVENT (frozen by zudolab/zudo-doc#3534 — the
377
367
  // `addEventListener(${afterNavigateEventLiteral}, initNavOverflow)`
@@ -458,14 +448,14 @@ export function Header(props: HeaderProps): JSX.Element {
458
448
  {rightGroups}
459
449
  </div>
460
450
 
461
- <script dangerouslySetInnerHTML={{ __html: NAV_OVERFLOW_SCRIPT }} />
451
+ <script rawHtml={NAV_OVERFLOW_SCRIPT} />
462
452
  {hasLocales ? (
463
453
  // Keeps the persisted header's language-switcher hrefs pointing at the
464
454
  // current page's equivalent in each other locale across same-locale SPA
465
455
  // navigation (#2551). Registers a document-level AFTER_NAVIGATE_EVENT
466
456
  // listener once; idempotent across re-execution.
467
457
  <script
468
- dangerouslySetInnerHTML={{ __html: LANGUAGE_SWITCHER_INIT_SCRIPT }}
458
+ rawHtml={LANGUAGE_SWITCHER_INIT_SCRIPT}
469
459
  />
470
460
  ) : null}
471
461
  {hasVersions ? (
@@ -474,7 +464,7 @@ export function Header(props: HeaderProps): JSX.Element {
474
464
  // navigation (#2553). Registers a document-level AFTER_NAVIGATE_EVENT
475
465
  // listener once; idempotent across re-execution.
476
466
  <script
477
- dangerouslySetInnerHTML={{ __html: VERSION_SWITCHER_REWIRE_SCRIPT }}
467
+ rawHtml={VERSION_SWITCHER_REWIRE_SCRIPT}
478
468
  />
479
469
  ) : null}
480
470
  </header>
@@ -488,8 +478,8 @@ export function Header(props: HeaderProps): JSX.Element {
488
478
  function SidebarSlotFallback({
489
479
  children,
490
480
  }: {
491
- children?: ComponentChildren;
492
- }): VNode | null {
481
+ children?: Child;
482
+ }): Child {
493
483
  if (children === undefined || children === null) return null;
494
484
  return <span hidden>{children}</span>;
495
485
  }
@@ -502,7 +492,7 @@ function renderNavItem(
502
492
  currentVersion: string | undefined,
503
493
  urlHelpers: HeaderUrlHelpers,
504
494
  i18n: HeaderI18n,
505
- ): VNode {
495
+ ): Child {
506
496
  // Category matching (the page's resolved big category) is the primary
507
497
  // signal; URL-path matching stays as a secondary fallback so items that
508
498
  // declare no `categoryMatch`, and pages with no resolved section (home,
@@ -527,7 +517,7 @@ function renderNavItem(
527
517
  aria-haspopup="true"
528
518
  aria-expanded="false"
529
519
  class={[
530
- "flex items-center gap-x-hsp-xs px-hsp-md py-vsp-2xs text-small font-medium transition-colors",
520
+ "flex items-center gap-x-hsp-xs px-hsp-md py-vsp-2xs text-small font-medium transition-colors duration-0",
531
521
  isActive
532
522
  ? NAV_TOP_ACTIVE.join(" ")
533
523
  : NAV_TOP_INACTIVE.join(" "),
@@ -589,7 +579,7 @@ function renderNavItem(
589
579
  data-nav-category={item.categoryMatch}
590
580
  data-nav-item
591
581
  class={[
592
- "px-hsp-md py-vsp-2xs text-small font-medium transition-colors shrink-0",
582
+ "px-hsp-md py-vsp-2xs text-small font-medium transition-colors duration-0 shrink-0",
593
583
  isActive
594
584
  ? NAV_TOP_ACTIVE.join(" ")
595
585
  : NAV_TOP_INACTIVE.join(" "),
@@ -645,8 +635,8 @@ function TriggerButton({
645
635
  id: string;
646
636
  ariaLabel: string;
647
637
  event: string;
648
- children: ComponentChildren;
649
- }): VNode {
638
+ children: Child;
639
+ }): Child {
650
640
  const inlineOnclick: Record<string, string> = {
651
641
  onclick: `window.dispatchEvent(new CustomEvent('${event}'))`,
652
642
  };
@@ -655,7 +645,7 @@ function TriggerButton({
655
645
  key={`right-${index}`}
656
646
  id={id}
657
647
  type="button"
658
- class="flex h-[40px] w-[40px] shrink-0 items-center justify-center text-muted transition-colors hover:text-fg focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2"
648
+ class="flex h-[40px] w-[40px] shrink-0 items-center justify-center text-muted transition-colors duration-0 hover:text-fg focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2"
659
649
  aria-label={ariaLabel}
660
650
  {...inlineOnclick}
661
651
  >
@@ -676,8 +666,8 @@ function SlotWrapper({
676
666
  }: {
677
667
  index: number;
678
668
  className?: string;
679
- children: ComponentChildren;
680
- }): VNode {
669
+ children: Child;
670
+ }): Child {
681
671
  return (
682
672
  <div key={`right-${index}`} class={className}>
683
673
  {children}
@@ -689,7 +679,7 @@ type RightItemHandler = (
689
679
  item: HeaderRightItem,
690
680
  index: number,
691
681
  ctx: RightItemContext,
692
- ) => VNode | null;
682
+ ) => Child;
693
683
 
694
684
  // Dispatch table keyed by `${type}:${trigger|component}`, or just `type`
695
685
  // for link/html items that carry no sub-type discriminant.
@@ -710,7 +700,6 @@ const BASE_RIGHT_ITEM_DISPATCH: Readonly<Record<string, RightItemHandler>> = {
710
700
  event="toggle-design-token-panel"
711
701
  >
712
702
  <svg
713
- xmlns="http://www.w3.org/2000/svg"
714
703
  width="20"
715
704
  height="20"
716
705
  viewBox="0 0 24 24"
@@ -738,7 +727,6 @@ const BASE_RIGHT_ITEM_DISPATCH: Readonly<Record<string, RightItemHandler>> = {
738
727
  event="toggle-ai-chat"
739
728
  >
740
729
  <svg
741
- xmlns="http://www.w3.org/2000/svg"
742
730
  width="20"
743
731
  height="20"
744
732
  viewBox="0 0 24 24"
@@ -765,7 +753,7 @@ const BASE_RIGHT_ITEM_DISPATCH: Readonly<Record<string, RightItemHandler>> = {
765
753
  href={ctx.githubRepoUrl}
766
754
  target="_blank"
767
755
  rel="noopener noreferrer"
768
- class="flex h-[40px] w-[40px] shrink-0 items-center justify-center text-muted transition-colors hover:text-fg focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2"
756
+ class="flex h-[40px] w-[40px] shrink-0 items-center justify-center text-muted transition-colors duration-0 hover:text-fg focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2"
769
757
  aria-label={ctx.githubLabel}
770
758
  title={ctx.githubLabel}
771
759
  >
@@ -843,7 +831,7 @@ const BASE_RIGHT_ITEM_DISPATCH: Readonly<Record<string, RightItemHandler>> = {
843
831
  // Mirrors `<Fragment set:html={item.html} />` from the Astro
844
832
  // template — the legacy code already trusts this string, and
845
833
  // this port preserves that contract.
846
- dangerouslySetInnerHTML={{ __html: item.html }}
834
+ rawHtml={item.html}
847
835
  />
848
836
  );
849
837
  },
@@ -898,7 +886,7 @@ function renderRightItem(
898
886
  index: number,
899
887
  ctx: RightItemContext,
900
888
  dispatch: ReadonlyMap<string, RightItemHandler>,
901
- ): VNode | null {
889
+ ): Child {
902
890
  const key =
903
891
  item.type === "trigger"
904
892
  ? `trigger:${item.trigger}`
@@ -3,7 +3,7 @@
3
3
  // In the original `header` template the script lived directly
4
4
  // inside a `<script>` tag (which Astro pipes through the bundler). For
5
5
  // the JSX port we emit the same logic verbatim via
6
- // `dangerouslySetInnerHTML`, so the value below is plain ECMAScript —
6
+ // `rawHtml`, so the value below is plain ECMAScript —
7
7
  // any TypeScript-only constructs (generic params, type casts, parameter
8
8
  // type annotations) have been dropped so the browser can parse it
9
9
  // directly.
@@ -1,21 +1,20 @@
1
- // Boundary types for the v2 `<Header />` shell.
1
+ // Boundary types for the package-owned `<Header />` shell.
2
2
  //
3
3
  // The host project (`src/config/settings-types.ts`) owns the canonical
4
- // shapes for these structures. We copy them here so v2 has its own
4
+ // shapes for these structures. We copy them here so the package has its own
5
5
  // self-contained type surface — consumers import `HeaderNavItem` /
6
6
  // `HeaderRightItem` from `@takazudo/zudo-doc/header` and don't reach
7
7
  // into the host's `@/config` alias.
8
8
  //
9
- // Structural-only: the v2 copies are intentionally simple and broad. If
10
- // the host extends a field (e.g. adds a new `HeaderRightTriggerName`),
11
- // downstream consumers may continue to use the v2 types until the v2
12
- // package itself widens them. Changes here are v2 breaking changes.
9
+ // Structural-only: these package types stay independent of host config
10
+ // aliases. They preserve the serialized header-data contract while using
11
+ // zfb's `Component` and `Child` types for render callbacks and slots.
13
12
 
14
- import type { ComponentChildren } from "preact";
13
+ import type { Child, Component } from "@takazudo/zfb/zudo-react";
15
14
 
16
15
  /**
17
16
  * Locale code as seen by the header. Widened from the host's literal
18
- * union (`"en" | "ja" | …`) to plain `string` at the v2 boundary so the
17
+ * union (`"en" | "ja" | …`) to plain `string` at the package boundary so the
19
18
  * package can render for any project's locale set without a generic
20
19
  * parameter (super-epic #1724, sub-issue #1729).
21
20
  */
@@ -75,10 +74,10 @@ export interface HeaderRightComponentProps {
75
74
  lang: Locale | undefined;
76
75
  githubRepoUrl: string | null;
77
76
  githubLabel: string;
78
- themeToggle: ComponentChildren;
79
- languageSwitcher: ComponentChildren;
80
- versionSwitcher: ComponentChildren;
81
- search: ComponentChildren;
77
+ themeToggle: Child;
78
+ languageSwitcher: Child;
79
+ versionSwitcher: Child;
80
+ search: Child;
82
81
  colorModeEnabled: boolean;
83
82
  hasLocales: boolean;
84
83
  }
@@ -86,7 +85,7 @@ export interface HeaderRightComponentProps {
86
85
  /** A callable-only host registry keyed by serialized component name. */
87
86
  export type HeaderRightComponentRegistry = Record<
88
87
  string,
89
- (props: HeaderRightComponentProps) => ComponentChildren
88
+ Component<HeaderRightComponentProps>
90
89
  >;
91
90
 
92
91
  export interface HeaderRightTriggerItem {