@takazudo/zudo-doc 5.28.2 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (456) hide show
  1. package/CHANGELOG.md +22 -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/category-nav/index.d.ts +1 -2
  43. package/dist/category-nav/index.js +11 -5
  44. package/dist/category-tree-nav/index.d.ts +1 -2
  45. package/dist/category-tree-nav/index.js +3 -3
  46. package/dist/chrome/derive.d.ts +18 -27
  47. package/dist/chrome/derive.js +47 -29
  48. package/dist/chrome/index.d.ts +5 -5
  49. package/dist/chrome/index.js +1 -1
  50. package/dist/chrome/island-data.d.ts +4 -0
  51. package/dist/chrome/island-data.js +52 -0
  52. package/dist/chrome/primary-slots.d.ts +2 -3
  53. package/dist/chrome-bindings.d.ts +28 -22
  54. package/dist/code-group/index.d.ts +3 -4
  55. package/dist/code-group/index.js +3 -7
  56. package/dist/code-syntax/code-block-enhancer.d.ts +1 -2
  57. package/dist/code-syntax/code-block-enhancer.js +2 -2
  58. package/dist/code-syntax/mermaid-init.d.ts +1 -2
  59. package/dist/code-syntax/mermaid-init.js +5 -2
  60. package/dist/code-syntax/tabs-init-script.js +1 -1
  61. package/dist/code-syntax/tabs-init.d.ts +1 -2
  62. package/dist/code-syntax/tabs-init.js +2 -2
  63. package/dist/code-syntax/tabs.d.ts +6 -6
  64. package/dist/code-syntax/tabs.js +8 -8
  65. package/dist/compiled.css +2933 -2943
  66. package/dist/config-assertions/index.d.ts +13 -0
  67. package/dist/config-assertions/index.js +14 -0
  68. package/dist/config.d.ts +36 -17
  69. package/dist/config.js +23 -95
  70. package/dist/content/content-blockquote.d.ts +2 -3
  71. package/dist/content/content-blockquote.js +3 -3
  72. package/dist/content/content-code.d.ts +3 -4
  73. package/dist/content/content-code.js +5 -5
  74. package/dist/content/content-link.d.ts +3 -4
  75. package/dist/content/content-link.js +10 -10
  76. package/dist/content/content-ol.d.ts +2 -3
  77. package/dist/content/content-ol.js +5 -4
  78. package/dist/content/content-paragraph.d.ts +2 -3
  79. package/dist/content/content-paragraph.js +1 -1
  80. package/dist/content/content-strong.d.ts +2 -3
  81. package/dist/content/content-strong.js +3 -3
  82. package/dist/content/content-table.d.ts +2 -3
  83. package/dist/content/content-table.js +4 -4
  84. package/dist/content/content-ul.d.ts +2 -3
  85. package/dist/content/content-ul.js +4 -4
  86. package/dist/content/heading-h2.d.ts +2 -3
  87. package/dist/content/heading-h2.js +4 -4
  88. package/dist/content/heading-h3.d.ts +2 -3
  89. package/dist/content/heading-h3.js +4 -4
  90. package/dist/content/heading-h4.d.ts +2 -3
  91. package/dist/content/heading-h4.js +4 -4
  92. package/dist/content-admonition/index.d.ts +3 -4
  93. package/dist/content-admonition/index.js +2 -2
  94. package/dist/content.css +35 -33
  95. package/dist/design-token-panel-bootstrap-controller.d.ts +178 -0
  96. package/dist/design-token-panel-bootstrap-controller.js +359 -0
  97. package/dist/design-token-panel-bootstrap-island.d.ts +5 -0
  98. package/dist/design-token-panel-bootstrap-island.js +19 -0
  99. package/dist/design-token-panel-bootstrap.d.ts +5 -195
  100. package/dist/design-token-panel-bootstrap.js +3 -288
  101. package/dist/desktop-sidebar-toggle-island/index.d.ts +2 -7
  102. package/dist/desktop-sidebar-toggle-island/index.js +2 -58
  103. package/dist/desktop-sidebar-toggle-island/island.d.ts +4 -0
  104. package/dist/desktop-sidebar-toggle-island/island.js +43 -0
  105. package/dist/desktop-sidebar-toggle-island/storage.d.ts +4 -0
  106. package/dist/desktop-sidebar-toggle-island/storage.js +29 -0
  107. package/dist/desktop-toc-toggle-island/index.d.ts +2 -7
  108. package/dist/desktop-toc-toggle-island/index.js +2 -58
  109. package/dist/desktop-toc-toggle-island/island.d.ts +4 -0
  110. package/dist/desktop-toc-toggle-island/island.js +43 -0
  111. package/dist/desktop-toc-toggle-island/storage.d.ts +4 -0
  112. package/dist/desktop-toc-toggle-island/storage.js +29 -0
  113. package/dist/details/details.d.ts +3 -4
  114. package/dist/details/details.js +1 -1
  115. package/dist/doc-body-end/index.d.ts +1 -2
  116. package/dist/doc-body-end/index.js +1 -1
  117. package/dist/doc-body-end-islands/design-token-panel-island.d.ts +2 -2
  118. package/dist/doc-body-end-islands/design-token-panel-island.js +3 -7
  119. package/dist/doc-body-end-islands/index.d.ts +4 -21
  120. package/dist/doc-body-end-islands/index.js +5 -3
  121. package/dist/doc-body-end-islands/theme-pack-switcher-island.d.ts +3 -13
  122. package/dist/doc-body-end-islands/theme-pack-switcher-island.js +11 -13
  123. package/dist/doc-content-header/index.d.ts +1 -2
  124. package/dist/doc-content-header/index.js +1 -1
  125. package/dist/doc-history/index.d.ts +1 -1
  126. package/dist/doc-history/index.js +166 -141
  127. package/dist/doc-history-area/index.d.ts +6 -4
  128. package/dist/doc-history-area/index.js +17 -16
  129. package/dist/doc-metainfo-area/index.d.ts +2 -3
  130. package/dist/doc-metainfo-area/index.js +1 -1
  131. package/dist/doc-page-renderer/index.d.ts +13 -7
  132. package/dist/doc-page-renderer/index.js +10 -1
  133. package/dist/doc-page-shell/index.d.ts +20 -7
  134. package/dist/doc-page-shell/index.js +17 -6
  135. package/dist/doc-pager/index.d.ts +1 -2
  136. package/dist/doc-pager/index.js +3 -3
  137. package/dist/doc-tags-area/index.d.ts +2 -3
  138. package/dist/doc-tags-area/index.js +1 -1
  139. package/dist/doclayout/doc-layout-with-defaults.d.ts +9 -9
  140. package/dist/doclayout/doc-layout-with-defaults.js +5 -15
  141. package/dist/doclayout/doc-layout.d.ts +26 -27
  142. package/dist/doclayout/doc-layout.js +23 -14
  143. package/dist/docs-schema/index.d.ts +4 -0
  144. package/dist/docs-schema/index.js +1 -0
  145. package/dist/extract-headings/index.js +43 -12
  146. package/dist/factory-context/index.d.ts +22 -19
  147. package/dist/features.css +70 -8
  148. package/dist/find-in-page/find-bar.d.ts +4 -2
  149. package/dist/find-in-page/find-bar.js +58 -69
  150. package/dist/find-in-page/index.d.ts +2 -8
  151. package/dist/find-in-page/index.js +33 -30
  152. package/dist/footer/footer.d.ts +3 -4
  153. package/dist/footer/footer.js +3 -3
  154. package/dist/footer-with-defaults/index.d.ts +2 -3
  155. package/dist/footer-with-defaults/index.js +1 -1
  156. package/dist/frontmatter-preview-defaults/index.js +1 -0
  157. package/dist/head/doc-head.d.ts +1 -1
  158. package/dist/head/doc-head.js +24 -32
  159. package/dist/head/og-tags.d.ts +1 -1
  160. package/dist/head/og-tags.js +8 -7
  161. package/dist/head/twitter-card.d.ts +1 -1
  162. package/dist/head/twitter-card.js +1 -1
  163. package/dist/head-with-defaults/index.d.ts +7 -2
  164. package/dist/head-with-defaults/index.js +46 -32
  165. package/dist/header/header.d.ts +8 -8
  166. package/dist/header/header.js +9 -11
  167. package/dist/header/types.d.ts +7 -7
  168. package/dist/header-with-defaults/index.d.ts +1 -2
  169. package/dist/header-with-defaults/index.js +18 -8
  170. package/dist/home-intro/index.d.ts +2 -5
  171. package/dist/home-intro/index.js +7 -5
  172. package/dist/home-intro/prepare.js +4 -3
  173. package/dist/home-page/index.d.ts +3 -3
  174. package/dist/home-page/index.js +19 -17
  175. package/dist/html-preview-wrapper/highlighted-code.d.ts +3 -4
  176. package/dist/html-preview-wrapper/highlighted-code.js +19 -17
  177. package/dist/html-preview-wrapper/html-preview-wrapper.d.ts +4 -25
  178. package/dist/html-preview-wrapper/html-preview-wrapper.js +2 -87
  179. package/dist/html-preview-wrapper/html-preview.d.ts +3 -10
  180. package/dist/html-preview-wrapper/html-preview.js +13 -37
  181. package/dist/html-preview-wrapper/index.d.ts +2 -1
  182. package/dist/html-preview-wrapper/index.js +1 -1
  183. package/dist/html-preview-wrapper/preview-base.d.ts +3 -5
  184. package/dist/html-preview-wrapper/preview-base.js +56 -59
  185. package/dist/html-preview-wrapper/wrapper.d.ts +20 -0
  186. package/dist/html-preview-wrapper/wrapper.js +37 -0
  187. package/dist/hydration-pending.d.ts +3 -5
  188. package/dist/hydration-pending.js +7 -5
  189. package/dist/i18n-version/language-switcher.d.ts +5 -32
  190. package/dist/i18n-version/language-switcher.js +5 -106
  191. package/dist/i18n-version/switcher-generated-scripts.d.ts +2 -0
  192. package/dist/i18n-version/switcher-generated-scripts.js +107 -0
  193. package/dist/i18n-version/switcher-url-state.d.ts +76 -0
  194. package/dist/i18n-version/switcher-url-state.js +103 -0
  195. package/dist/i18n-version/version-banner.d.ts +2 -3
  196. package/dist/i18n-version/version-banner.js +1 -1
  197. package/dist/i18n-version/version-switcher.d.ts +5 -50
  198. package/dist/i18n-version/version-switcher.js +5 -157
  199. package/dist/icons/index.d.ts +18 -19
  200. package/dist/icons/index.js +17 -33
  201. package/dist/image-enlarge/index.d.ts +1 -10
  202. package/dist/image-enlarge/index.js +80 -55
  203. package/dist/image-enlarge/public.d.ts +2 -0
  204. package/dist/image-enlarge/public.js +6 -0
  205. package/dist/image-enlarge/ssr-fallback.d.ts +2 -0
  206. package/dist/image-enlarge/ssr-fallback.js +8 -0
  207. package/dist/index.d.ts +11 -4
  208. package/dist/inline-version-switcher/index.d.ts +1 -2
  209. package/dist/inline-version-switcher/index.js +1 -1
  210. package/dist/island-types/index.d.ts +2 -2
  211. package/dist/island-types/index.js +1 -5
  212. package/dist/math-block/index.d.ts +4 -7
  213. package/dist/math-block/index.js +5 -5
  214. package/dist/mcp/handler.d.ts +8 -0
  215. package/dist/mcp/handler.js +129 -0
  216. package/dist/mcp/index.d.ts +4 -0
  217. package/dist/mcp/index.js +7 -0
  218. package/dist/mcp/loader.d.ts +19 -0
  219. package/dist/mcp/loader.js +202 -0
  220. package/dist/mdx-components/index.js +40 -108
  221. package/dist/mermaid-enlarge/index.d.ts +1 -8
  222. package/dist/mermaid-enlarge/index.js +174 -158
  223. package/dist/mermaid-enlarge/public.d.ts +2 -0
  224. package/dist/mermaid-enlarge/public.js +6 -0
  225. package/dist/mermaid-enlarge/ssr-fallback.d.ts +2 -0
  226. package/dist/mermaid-enlarge/ssr-fallback.js +8 -0
  227. package/dist/metainfo/doc-metainfo.d.ts +2 -3
  228. package/dist/metainfo/doc-metainfo.js +1 -4
  229. package/dist/metainfo/doc-tags.d.ts +2 -3
  230. package/dist/metainfo/doc-tags.js +1 -1
  231. package/dist/metainfo/frontmatter-preview.d.ts +3 -4
  232. package/dist/metainfo/frontmatter-preview.js +1 -1
  233. package/dist/nav-data-prep/index.js +6 -4
  234. package/dist/nav-indexing/category-nav.d.ts +2 -3
  235. package/dist/nav-indexing/category-nav.js +1 -2
  236. package/dist/nav-indexing/category-tree-nav.d.ts +2 -3
  237. package/dist/nav-indexing/category-tree-nav.js +1 -1
  238. package/dist/nav-indexing/doc-card-grid.d.ts +2 -3
  239. package/dist/nav-indexing/doc-card-grid.js +1 -2
  240. package/dist/nav-indexing/docs-sitemap.d.ts +2 -3
  241. package/dist/nav-indexing/docs-sitemap.js +2 -2
  242. package/dist/nav-indexing/index.d.ts +1 -1
  243. package/dist/nav-indexing/nav-card-grid.d.ts +2 -3
  244. package/dist/nav-indexing/nav-card-grid.js +1 -2
  245. package/dist/nav-indexing/note-tray-index-parts/card-list.d.ts +1 -2
  246. package/dist/nav-indexing/note-tray-index-parts/card-list.js +4 -4
  247. package/dist/nav-indexing/note-tray-index-parts/date-line.d.ts +2 -3
  248. package/dist/nav-indexing/note-tray-index-parts/date-line.js +1 -1
  249. package/dist/nav-indexing/note-tray-index-parts/index-list.d.ts +1 -2
  250. package/dist/nav-indexing/note-tray-index-parts/index-list.js +2 -2
  251. package/dist/nav-indexing/note-tray-index-parts/timeline.d.ts +1 -2
  252. package/dist/nav-indexing/note-tray-index-parts/timeline.js +2 -2
  253. package/dist/nav-indexing/note-tray-index.d.ts +1 -2
  254. package/dist/nav-indexing/note-tray-index.js +1 -1
  255. package/dist/nav-indexing/site-tree-nav-demo.d.ts +2 -3
  256. package/dist/nav-indexing/site-tree-nav-demo.js +2 -2
  257. package/dist/nav-indexing/tag-nav.d.ts +1 -2
  258. package/dist/nav-indexing/tag-nav.js +1 -1
  259. package/dist/nav-indexing/types.d.ts +2 -2
  260. package/dist/nav-indexing/versions-page-content.d.ts +2 -3
  261. package/dist/nav-indexing/versions-page-content.js +8 -8
  262. package/dist/note-tray-index/index.d.ts +1 -2
  263. package/dist/note-tray-index/index.js +1 -1
  264. package/dist/page-loading/page-loading-overlay.d.ts +1 -2
  265. package/dist/page-loading/page-loading-overlay.js +3 -5
  266. package/dist/plugins/agent-export.d.ts +3 -0
  267. package/dist/plugins/agent-export.js +34 -0
  268. package/dist/plugins/internal/agent-export/chunk.d.ts +5 -0
  269. package/dist/plugins/internal/agent-export/chunk.js +90 -0
  270. package/dist/plugins/internal/agent-export/index.d.ts +24 -0
  271. package/dist/plugins/internal/agent-export/index.js +123 -0
  272. package/dist/plugins/internal/agent-export/normalize.d.ts +5 -0
  273. package/dist/plugins/internal/agent-export/normalize.js +73 -0
  274. package/dist/plugins/internal/llms-txt/dev-middleware.d.ts +6 -0
  275. package/dist/plugins/internal/llms-txt/dev-middleware.js +8 -3
  276. package/dist/plugins/internal/llms-txt/emit.js +23 -6
  277. package/dist/plugins/internal/llms-txt/generate.d.ts +7 -1
  278. package/dist/plugins/internal/llms-txt/generate.js +9 -2
  279. package/dist/plugins/internal/llms-txt/load.d.ts +2 -0
  280. package/dist/plugins/internal/llms-txt/load.js +20 -4
  281. package/dist/plugins/internal/llms-txt/types.d.ts +10 -0
  282. package/dist/plugins/routes.js +4 -0
  283. package/dist/preset.d.ts +19 -9
  284. package/dist/preset.js +20 -1
  285. package/dist/route-context-payload/index.js +1 -1
  286. package/dist/routes/404.d.ts +2 -3
  287. package/dist/routes/404.js +1 -1
  288. package/dist/routes/_chrome.d.ts +5 -5
  289. package/dist/routes/_chrome.js +7 -2
  290. package/dist/routes/_context.d.ts +4 -4
  291. package/dist/routes/_design-token-panel-bootstrap.d.ts +1 -4
  292. package/dist/routes/_design-token-panel-bootstrap.js +9 -1
  293. package/dist/routes/docs-slug.d.ts +2 -3
  294. package/dist/routes/docs-tags-index.d.ts +2 -3
  295. package/dist/routes/docs-tags-index.js +1 -1
  296. package/dist/routes/docs-tags-tag.d.ts +2 -3
  297. package/dist/routes/docs-tags-tag.js +1 -1
  298. package/dist/routes/docs-versions.d.ts +2 -3
  299. package/dist/routes/docs-versions.js +1 -1
  300. package/dist/routes/files-path.d.ts +2 -3
  301. package/dist/routes/files-path.js +1 -1
  302. package/dist/routes/index.d.ts +2 -3
  303. package/dist/routes/index.js +1 -1
  304. package/dist/routes/locale-docs-slug.d.ts +2 -3
  305. package/dist/routes/locale-docs-tags-index.d.ts +2 -3
  306. package/dist/routes/locale-docs-tags-index.js +1 -1
  307. package/dist/routes/locale-docs-tags-tag.d.ts +2 -3
  308. package/dist/routes/locale-docs-tags-tag.js +1 -1
  309. package/dist/routes/locale-docs-versions.d.ts +2 -3
  310. package/dist/routes/locale-docs-versions.js +1 -1
  311. package/dist/routes/locale-files-path.d.ts +2 -3
  312. package/dist/routes/locale-files-path.js +1 -1
  313. package/dist/routes/locale-index.d.ts +2 -3
  314. package/dist/routes/locale-index.js +1 -1
  315. package/dist/routes/mcp.d.ts +5 -0
  316. package/dist/routes/mcp.js +25 -0
  317. package/dist/routes/v-docs-slug.d.ts +2 -3
  318. package/dist/routes/v-locale-docs-slug.d.ts +2 -3
  319. package/dist/search-widget/index.d.ts +1 -2
  320. package/dist/search-widget/index.js +4 -7
  321. package/dist/search-widget-script/generated-script.js +12 -5
  322. package/dist/settings-defaults.d.ts +2 -0
  323. package/dist/settings-defaults.js +93 -0
  324. package/dist/settings.d.ts +8 -2
  325. package/dist/sidebar/index.d.ts +1 -1
  326. package/dist/sidebar/sidebar.d.ts +12 -44
  327. package/dist/sidebar/sidebar.js +4 -3
  328. package/dist/sidebar/types.d.ts +14 -0
  329. package/dist/sidebar-prepaint/index.d.ts +1 -2
  330. package/dist/sidebar-prepaint/index.js +4 -6
  331. package/dist/sidebar-resizer/sidebar-resizer-init.d.ts +2 -3
  332. package/dist/sidebar-resizer/sidebar-resizer-init.js +3 -3
  333. package/dist/sidebar-toggle-island/index.d.ts +8 -11
  334. package/dist/sidebar-toggle-island/index.js +75 -62
  335. package/dist/sidebar-tree/build-tree.js +5 -6
  336. package/dist/sidebar-tree/types.d.ts +2 -0
  337. package/dist/sidebar-tree-island/index.d.ts +4 -19
  338. package/dist/sidebar-tree-island/index.js +782 -436
  339. package/dist/sidebar-tree-island/scope-state.d.ts +38 -0
  340. package/dist/sidebar-tree-island/scope-state.js +151 -0
  341. package/dist/sidebar-tree-island/sidebar-scroll-preserve.js +6 -2
  342. package/dist/sidebar-utils/index.d.ts +17 -19
  343. package/dist/sidebar-utils/index.js +100 -3
  344. package/dist/sidebar-utils/scope.d.ts +11 -0
  345. package/dist/sidebar-utils/scope.js +67 -0
  346. package/dist/sidebar-with-defaults/index.d.ts +1 -2
  347. package/dist/sidebar-with-defaults/index.js +19 -18
  348. package/dist/site-schema/nav-tree.js +15 -15
  349. package/dist/site-schema/types.d.ts +1 -0
  350. package/dist/site-tree-nav/index.d.ts +2 -3
  351. package/dist/site-tree-nav/index.js +11 -12
  352. package/dist/site-tree-nav/normalize-island-props.d.ts +16 -0
  353. package/dist/site-tree-nav/normalize-island-props.js +122 -0
  354. package/dist/site-tree-nav-island/index.d.ts +3 -3
  355. package/dist/site-tree-nav-island/index.js +243 -144
  356. package/dist/smart-break/index.d.ts +3 -4
  357. package/dist/smart-break/index.js +1 -1
  358. package/dist/tab-item/tab-item.d.ts +3 -4
  359. package/dist/tab-item/tab-item.js +1 -1
  360. package/dist/tag-pages/index.d.ts +3 -3
  361. package/dist/tag-pages/index.js +10 -10
  362. package/dist/theme/color-scheme-provider.d.ts +3 -3
  363. package/dist/theme/color-scheme-provider.js +3 -3
  364. package/dist/theme/theme-pack-provider.d.ts +1 -1
  365. package/dist/theme/theme-pack-provider.js +3 -3
  366. package/dist/theme/theme-toggle.d.ts +2 -3
  367. package/dist/theme/theme-toggle.js +1 -1
  368. package/dist/theme-pack-dialog/index.d.ts +1 -1
  369. package/dist/theme-pack-dialog/index.js +69 -75
  370. package/dist/theme-pack-dialog/theme-pack-card.d.ts +3 -4
  371. package/dist/theme-pack-dialog/theme-pack-card.js +19 -17
  372. package/dist/theme-pack-switcher/index.d.ts +4 -5
  373. package/dist/theme-pack-switcher/index.js +52 -49
  374. package/dist/theme-toggle/index.d.ts +1 -1
  375. package/dist/theme-toggle/index.js +154 -167
  376. package/dist/theme.css +47 -121
  377. package/dist/toc/mobile-toc.d.ts +3 -5
  378. package/dist/toc/mobile-toc.js +29 -27
  379. package/dist/toc/toc.d.ts +3 -4
  380. package/dist/toc/toc.js +18 -18
  381. package/dist/toc/use-active-heading.d.ts +5 -4
  382. package/dist/toc/use-active-heading.js +36 -30
  383. package/dist/toc-prepaint/index.d.ts +1 -2
  384. package/dist/toc-prepaint/index.js +4 -6
  385. package/dist/transitions/nested-island-props-refresh.d.ts +3 -16
  386. package/dist/transitions/nested-island-props-refresh.js +133 -151
  387. package/dist/transitions/page-events.d.ts +8 -13
  388. package/dist/tree-nav-shared/index.d.ts +4 -5
  389. package/dist/tree-nav-shared/index.js +6 -7
  390. package/dist/use-modal-dialog/index.d.ts +9 -63
  391. package/dist/use-modal-dialog/index.js +41 -59
  392. package/dist/versions-page/index.d.ts +3 -3
  393. package/dist/versions-page/index.js +5 -5
  394. package/dist/wind/index.d.ts +5 -0
  395. package/dist/wind/index.js +169 -0
  396. package/dist/wind.json +498 -0
  397. package/dist/z-index-defaults/index.d.ts +4 -4
  398. package/dist/zdtp-loader.d.ts +7 -0
  399. package/dist/zdtp-loader.js +8 -0
  400. package/eject/asset-components/asset-card.tsx +14 -16
  401. package/eject/asset-components/asset-code.tsx +10 -12
  402. package/eject/asset-components/shared.tsx +5 -7
  403. package/eject/breadcrumb/breadcrumb.tsx +15 -16
  404. package/eject/code-group/index.tsx +4 -10
  405. package/eject/content-admonition/index.tsx +5 -6
  406. package/eject/desktop-sidebar-toggle-island/index.ts +4 -0
  407. package/eject/desktop-sidebar-toggle-island/island.tsx +50 -0
  408. package/eject/desktop-sidebar-toggle-island/storage.ts +27 -0
  409. package/eject/details/details.tsx +3 -5
  410. package/eject/doc-history/index.tsx +193 -179
  411. package/eject/doc-pager/index.tsx +3 -4
  412. package/eject/footer/footer.tsx +7 -9
  413. package/eject/header/header.tsx +42 -54
  414. package/eject/header/nav-overflow-script.ts +1 -1
  415. package/eject/header/types.ts +12 -13
  416. package/eject/image-enlarge/index.tsx +84 -69
  417. package/eject/image-enlarge/public.ts +2 -0
  418. package/eject/image-enlarge/ssr-fallback.tsx +7 -0
  419. package/eject/page-loading/page-loading-overlay.tsx +8 -15
  420. package/eject/sidebar/index.ts +1 -0
  421. package/eject/sidebar/sidebar.tsx +16 -97
  422. package/eject/sidebar/types.ts +15 -0
  423. package/eject/sidebar-toggle-island/index.tsx +103 -102
  424. package/eject/sidebar-tree-island/index.tsx +827 -615
  425. package/eject/sidebar-tree-island/scope-state.ts +154 -0
  426. package/eject/sidebar-tree-island/sidebar-scroll-preserve.ts +8 -2
  427. package/eject/site-tree-nav-island/index.tsx +349 -222
  428. package/eject/tab-item/tab-item.tsx +2 -4
  429. package/eject/theme-toggle/hydration-pending.ts +6 -10
  430. package/eject/theme-toggle/index.tsx +133 -173
  431. package/eject/toc/mobile-toc.tsx +27 -31
  432. package/eject/toc/toc.tsx +21 -24
  433. package/eject/toc/use-active-heading.ts +43 -38
  434. package/package.json +40 -22
  435. package/routes-src/404.tsx +2 -3
  436. package/routes-src/_chrome.tsx +7 -2
  437. package/routes-src/_design-token-panel-bootstrap.tsx +1 -63
  438. package/routes-src/docs-slug.tsx +2 -3
  439. package/routes-src/docs-tags-index.tsx +2 -3
  440. package/routes-src/docs-tags-tag.tsx +2 -3
  441. package/routes-src/docs-versions.tsx +2 -3
  442. package/routes-src/files-path.tsx +2 -4
  443. package/routes-src/index.tsx +2 -3
  444. package/routes-src/locale-docs-slug.tsx +2 -3
  445. package/routes-src/locale-docs-tags-index.tsx +2 -3
  446. package/routes-src/locale-docs-tags-tag.tsx +2 -3
  447. package/routes-src/locale-docs-versions.tsx +2 -3
  448. package/routes-src/locale-files-path.tsx +2 -4
  449. package/routes-src/locale-index.tsx +2 -3
  450. package/routes-src/mcp.tsx +25 -0
  451. package/routes-src/v-docs-slug.tsx +2 -3
  452. package/routes-src/v-locale-docs-slug.tsx +2 -3
  453. package/tsconfig.base.json +1 -1
  454. package/dist/safelist.css +0 -2
  455. package/dist/theme-no-reset.css +0 -379
  456. package/eject/desktop-sidebar-toggle-island/index.tsx +0 -110
@@ -1,4 +1,5 @@
1
- import { Fragment, jsx, jsxs } from "preact/jsx-runtime";
1
+ import { Fragment, jsx, jsxs } from "@takazudo/zfb/zudo-react/jsx-runtime";
2
+ import { h } from "@takazudo/zfb/zudo-react";
2
3
  import { OgTags } from "./og-tags.js";
3
4
  import { TwitterCard } from "./twitter-card.js";
4
5
  function DocHead(props) {
@@ -52,37 +53,28 @@ function DocHead(props) {
52
53
  image: twitterImage
53
54
  }
54
55
  ),
55
- stylesheets?.map((s) => /* @__PURE__ */ jsx(
56
- "link",
57
- {
58
- rel: "stylesheet",
59
- href: s.href,
60
- ...s.integrity !== void 0 ? { integrity: s.integrity } : {},
61
- ...s.crossorigin !== void 0 ? { crossorigin: s.crossorigin } : {}
62
- },
63
- `stylesheet:${s.href}`
64
- )),
65
- alternateLinks?.map((l) => /* @__PURE__ */ jsx(
66
- "link",
67
- {
68
- rel: l.rel,
69
- ...l.type !== void 0 ? { type: l.type } : {},
70
- href: l.href,
71
- ...l.title !== void 0 ? { title: l.title } : {}
72
- },
73
- `${l.rel}:${l.type ?? ""}:${l.href}`
74
- )),
75
- preload?.map((p) => /* @__PURE__ */ jsx(
76
- "link",
77
- {
78
- rel: "preload",
79
- as: p.as,
80
- href: p.href,
81
- ...p.type !== void 0 ? { type: p.type } : {},
82
- ...p.crossorigin !== void 0 ? { crossorigin: p.crossorigin } : {}
83
- },
84
- `preload:${p.as}:${p.href}`
85
- ))
56
+ stylesheets?.map((s) => h("link", {
57
+ key: `stylesheet:${s.href}`,
58
+ rel: "stylesheet",
59
+ href: s.href,
60
+ ...s.integrity !== void 0 ? { integrity: s.integrity } : {},
61
+ ...s.crossorigin !== void 0 ? { crossorigin: s.crossorigin } : {}
62
+ })),
63
+ alternateLinks?.map((l) => h("link", {
64
+ key: `${l.rel}:${l.type ?? ""}:${l.href}`,
65
+ rel: l.rel,
66
+ ...l.type !== void 0 ? { type: l.type } : {},
67
+ href: l.href,
68
+ ...l.title !== void 0 ? { title: l.title } : {}
69
+ })),
70
+ preload?.map((p) => h("link", {
71
+ key: `preload:${p.as}:${p.href}`,
72
+ rel: "preload",
73
+ as: p.as,
74
+ href: p.href,
75
+ ...p.type !== void 0 ? { type: p.type } : {},
76
+ ...p.crossorigin !== void 0 ? { crossorigin: p.crossorigin } : {}
77
+ }))
86
78
  ] });
87
79
  }
88
80
  export {
@@ -1,4 +1,4 @@
1
- import type { JSX } from "preact";
1
+ import type { JSX } from "@takazudo/zfb/zudo-react/jsx-runtime";
2
2
  import type { HeadProps } from "./types.js";
3
3
  /**
4
4
  * Open Graph meta tags. Emits og:title (always — defaults to `title`) plus
@@ -1,14 +1,15 @@
1
- import { Fragment, jsx, jsxs } from "preact/jsx-runtime";
1
+ import { Fragment, jsxs } from "@takazudo/zfb/zudo-react/jsx-runtime";
2
+ import { h } from "@takazudo/zfb/zudo-react";
2
3
  function OgTags(props) {
3
4
  const ogTitle = props.ogTitle ?? props.title;
4
5
  const ogDescription = props.ogDescription ?? props.description;
5
6
  return /* @__PURE__ */ jsxs(Fragment, { children: [
6
- /* @__PURE__ */ jsx("meta", { property: "og:title", content: ogTitle }),
7
- ogDescription !== void 0 && /* @__PURE__ */ jsx("meta", { property: "og:description", content: ogDescription }),
8
- props.ogType !== void 0 && /* @__PURE__ */ jsx("meta", { property: "og:type", content: props.ogType }),
9
- props.ogUrl !== void 0 && /* @__PURE__ */ jsx("meta", { property: "og:url", content: props.ogUrl }),
10
- props.ogImage !== void 0 && /* @__PURE__ */ jsx("meta", { property: "og:image", content: props.ogImage }),
11
- props.ogSiteName !== void 0 && /* @__PURE__ */ jsx("meta", { property: "og:site_name", content: props.ogSiteName })
7
+ h("meta", { property: "og:title", content: ogTitle }),
8
+ ogDescription !== void 0 && h("meta", { property: "og:description", content: ogDescription }),
9
+ props.ogType !== void 0 && h("meta", { property: "og:type", content: props.ogType }),
10
+ props.ogUrl !== void 0 && h("meta", { property: "og:url", content: props.ogUrl }),
11
+ props.ogImage !== void 0 && h("meta", { property: "og:image", content: props.ogImage }),
12
+ props.ogSiteName !== void 0 && h("meta", { property: "og:site_name", content: props.ogSiteName })
12
13
  ] });
13
14
  }
14
15
  export {
@@ -1,4 +1,4 @@
1
- import type { JSX } from "preact";
1
+ import type { JSX } from "@takazudo/zfb/zudo-react/jsx-runtime";
2
2
  import type { HeadProps } from "./types.js";
3
3
  /**
4
4
  * Twitter card meta tags. The host renders this only when a card type is
@@ -1,4 +1,4 @@
1
- import { Fragment, jsx, jsxs } from "preact/jsx-runtime";
1
+ import { Fragment, jsx, jsxs } from "@takazudo/zfb/zudo-react/jsx-runtime";
2
2
  function TwitterCard(props) {
3
3
  return /* @__PURE__ */ jsxs(Fragment, { children: [
4
4
  /* @__PURE__ */ jsx("meta", { name: "twitter:card", content: props.card }),
@@ -1,6 +1,5 @@
1
1
  /** @jsxRuntime automatic */
2
- /** @jsxImportSource preact */
3
- import type { JSX } from "preact";
2
+ import type { JSX } from "@takazudo/zfb/zudo-react/jsx-runtime";
4
3
  import type { HeadProps } from "../head/types.js";
5
4
  import type { ColorSchemeProviderColorMode } from "../theme/color-scheme-provider.js";
6
5
  import type { ChromeContext } from "../factory-context/index.js";
@@ -15,6 +14,8 @@ export interface HeadWithDefaultsProps {
15
14
  * `<link rel="canonical" href="...">`.
16
15
  */
17
16
  canonical?: string;
17
+ /** Page-specific alternate links, such as an exported Markdown version. */
18
+ alternateLinks?: HeadProps["alternateLinks"];
18
19
  }
19
20
  /** Settings subset read by {@link createHeadWithDefaults}. Retained for the
20
21
  * `HeadProps`/`ColorSchemeProviderColorMode` type references it documents. */
@@ -29,6 +30,10 @@ export interface HeadWithDefaultsSettings {
29
30
  twitterCreator?: string;
30
31
  };
31
32
  siteName: string;
33
+ /** Emit agent-discovery links only when the opt-in static export is enabled. */
34
+ agentExport?: boolean;
35
+ /** Existing llms.txt output setting; retained independently from agent export. */
36
+ llmsTxt?: boolean;
32
37
  colorMode?: ColorSchemeProviderColorMode | null | false;
33
38
  sidebarResizer?: boolean;
34
39
  /** Configured theme-pack slug (ADR `docs/adr/theme-packs.md`, #2822). */
@@ -1,4 +1,5 @@
1
- import { Fragment, jsx, jsxs } from "preact/jsx-runtime";
1
+ import { Fragment, jsx, jsxs } from "@takazudo/zfb/zudo-react/jsx-runtime";
2
+ import { h } from "@takazudo/zfb/zudo-react";
2
3
  import { OgTags, TwitterCard } from "../head/index.js";
3
4
  import { SIDEBAR_RESIZER_RESTORE_SCRIPT } from "../sidebar-resizer/index.js";
4
5
  import ColorSchemeProvider from "../theme/color-scheme-provider.js";
@@ -9,6 +10,13 @@ import { DEFAULT_THEME_PACK_SLUG } from "../theme-pack-switcher/theme-pack-sync.
9
10
  import { renderAutoLogoIconSvg } from "../auto-logo/icon.js";
10
11
  import { deriveComposeMetaTitle, deriveColorSchemeGenerators } from "../chrome/derive.js";
11
12
  import { assertChromeContext } from "../chrome/assert-chrome-context.js";
13
+ function mediaSwapHandler(media) {
14
+ const handler = `this.media='${media ?? "all"}'`;
15
+ if (!/^this\.media='[a-z\d\s(),:.%+\-/*<>=]*'$/i.test(handler)) {
16
+ throw new TypeError("Async stylesheet media cannot form a safe onload handler");
17
+ }
18
+ return handler;
19
+ }
12
20
  const FAVICON_AUTO = "auto";
13
21
  const DEFAULT_FAVICON = {
14
22
  svg: "/favicon.svg",
@@ -97,7 +105,8 @@ function createHeadWithDefaults(ctx) {
97
105
  function HeadWithDefaults({
98
106
  title,
99
107
  description,
100
- canonical
108
+ canonical,
109
+ alternateLinks
101
110
  }) {
102
111
  const { metaTags } = settings;
103
112
  const ogImageUrl = metaTags.ogImage != null && metaTags.ogImage !== false ? absoluteUrl(withBase(metaTags.ogImage)) : void 0;
@@ -117,9 +126,9 @@ function createHeadWithDefaults(ctx) {
117
126
  ),
118
127
  metaTags.keywords !== false && metaTags.keywords && metaTags.keywords.length > 0 && /* @__PURE__ */ jsx("meta", { name: "keywords", content: metaTags.keywords }),
119
128
  ogImageUrl !== void 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
120
- /* @__PURE__ */ jsx("meta", { property: "og:image:width", content: "1200" }),
121
- /* @__PURE__ */ jsx("meta", { property: "og:image:height", content: "630" }),
122
- /* @__PURE__ */ jsx("meta", { property: "og:image:alt", content: composeMetaTitle(title) })
129
+ h("meta", { property: "og:image:width", content: "1200" }),
130
+ h("meta", { property: "og:image:height", content: "630" }),
131
+ h("meta", { property: "og:image:alt", content: composeMetaTitle(title) })
123
132
  ] }),
124
133
  metaTags.twitterCard !== false && metaTags.twitterCard !== void 0 && /* @__PURE__ */ jsx(
125
134
  TwitterCard,
@@ -139,9 +148,20 @@ function createHeadWithDefaults(ctx) {
139
148
  base: themePackBase
140
149
  }
141
150
  ),
142
- settings.sidebarResizer && /* @__PURE__ */ jsx("script", { dangerouslySetInnerHTML: { __html: SIDEBAR_RESIZER_RESTORE_SCRIPT } }),
151
+ settings.sidebarResizer && /* @__PURE__ */ jsx("script", { rawHtml: SIDEBAR_RESIZER_RESTORE_SCRIPT }),
143
152
  faviconLinks.map((attrs, i) => /* @__PURE__ */ jsx("link", { ...attrs }, i)),
144
153
  canonical !== void 0 && /* @__PURE__ */ jsx("link", { rel: "canonical", href: canonical }),
154
+ alternateLinks?.map((alternate, i) => /* @__PURE__ */ jsx(
155
+ "link",
156
+ {
157
+ rel: alternate.rel,
158
+ href: alternate.href,
159
+ ...alternate.type ? { type: alternate.type } : {},
160
+ ...alternate.title ? { title: alternate.title } : {}
161
+ },
162
+ `page-alternate:${i}`
163
+ )),
164
+ settings.agentExport && settings.llmsTxt && /* @__PURE__ */ jsx("link", { rel: "alternate", href: withBase("/llms.txt"), type: "text/plain" }),
145
165
  ctx.settings.head && /* @__PURE__ */ jsxs(Fragment, { children: [
146
166
  ctx.settings.head.preconnect?.map((p, i) => /* @__PURE__ */ jsx(
147
167
  "link",
@@ -152,28 +172,23 @@ function createHeadWithDefaults(ctx) {
152
172
  },
153
173
  i
154
174
  )),
155
- ctx.settings.head.preload?.map((p, i) => /* @__PURE__ */ jsx(
156
- "link",
157
- {
175
+ ctx.settings.head.preload?.map(
176
+ (p, i) => h("link", {
177
+ key: i,
158
178
  rel: "preload",
159
179
  as: p.as,
160
180
  href: p.href,
161
181
  ...p.type ? { type: p.type } : {},
162
182
  ...p.crossorigin ? { crossorigin: p.crossorigin } : {}
163
- },
164
- i
165
- )),
183
+ })
184
+ ),
166
185
  ctx.settings.head.stylesheets?.map(
167
186
  (s, i) => s.async ? (
168
187
  // Non-render-blocking async stylesheet:
169
188
  // <link rel="stylesheet" href media="print" onload="this.media='all'">
170
189
  // <noscript><link rel="stylesheet" href></noscript>
171
190
  //
172
- // SSR note: preact-render-to-string emits string-valued on* props as
173
- // literal HTML attributes (only function-valued event handlers are
174
- // stripped). We use `as any` to bypass Preact's JSX types, which
175
- // expect a function for onload. The new unit test pins the exact
176
- // emitted string to guard this contract.
191
+ // Preserve the bounded media swap before native JSX rendering.
177
192
  /* @__PURE__ */ jsxs(Fragment, { children: [
178
193
  /* @__PURE__ */ jsx(
179
194
  "link",
@@ -182,19 +197,19 @@ function createHeadWithDefaults(ctx) {
182
197
  href: s.href,
183
198
  ...s.crossorigin ? { crossorigin: s.crossorigin } : {},
184
199
  media: "print",
185
- ...{ onload: `this.media='${s.media ?? "all"}'` }
200
+ onload: mediaSwapHandler(s.media)
186
201
  },
187
202
  `${i}-link`
188
203
  ),
189
- /* @__PURE__ */ jsx(
190
- "noscript",
204
+ /* @__PURE__ */ jsx("noscript", { children: /* @__PURE__ */ jsx(
205
+ "link",
191
206
  {
192
- dangerouslySetInnerHTML: {
193
- __html: `<link rel="stylesheet" href="${s.href.replace(/"/g, "&quot;")}"${s.media ? ` media="${s.media}"` : ""}${s.crossorigin ? ` crossorigin="${s.crossorigin}"` : ""}>`
194
- }
195
- },
196
- `${i}-noscript`
197
- )
207
+ rel: "stylesheet",
208
+ href: s.href,
209
+ ...s.media ? { media: s.media } : {},
210
+ ...s.crossorigin ? { crossorigin: s.crossorigin } : {}
211
+ }
212
+ ) }, `${i}-noscript`)
198
213
  ] })
199
214
  ) : /* @__PURE__ */ jsx(
200
215
  "link",
@@ -217,15 +232,14 @@ function createHeadWithDefaults(ctx) {
217
232
  },
218
233
  i
219
234
  )),
220
- ctx.settings.head.meta?.map((m, i) => /* @__PURE__ */ jsx(
221
- "meta",
222
- {
235
+ ctx.settings.head.meta?.map(
236
+ (m, i) => h("meta", {
237
+ key: i,
223
238
  ...m.name ? { name: m.name } : {},
224
239
  ...m.property ? { property: m.property } : {},
225
240
  content: m.content
226
- },
227
- i
228
- ))
241
+ })
242
+ )
229
243
  ] })
230
244
  ] });
231
245
  }
@@ -1,6 +1,6 @@
1
1
  /** @jsxRuntime automatic */
2
- /** @jsxImportSource preact */
3
- import type { ComponentChildren, JSX } from "preact";
2
+ import type { Child } from "@takazudo/zfb/zudo-react";
3
+ import type { JSX } from "@takazudo/zfb/zudo-react/jsx-runtime";
4
4
  import type { HeaderNavItem, HeaderRightComponentRegistry, HeaderRightItem, Locale } from "./types.js";
5
5
  /**
6
6
  * Boundary helpers the host injects into `<Header>`. These are the URL
@@ -48,7 +48,7 @@ export interface HeaderProps {
48
48
  * replaces the legacy `<slot name="sidebar" />`. Consumers pass the
49
49
  * sidebar tree they want to surface in the mobile sheet.
50
50
  */
51
- sidebarSlot?: ComponentChildren;
51
+ sidebarSlot?: Child;
52
52
  /**
53
53
  * Replacement for the `<SidebarToggle client:media="...">` element in
54
54
  * the legacy template. Consumers wrap their preferred Preact /
@@ -57,19 +57,19 @@ export interface HeaderProps {
57
57
  * that slot — the layout is still valid (e.g. doc pages with
58
58
  * `hide_sidebar`).
59
59
  */
60
- sidebarToggle?: ComponentChildren;
60
+ sidebarToggle?: Child;
61
61
  /**
62
62
  * Replacement for `<ThemeToggle client:load />`. Rendered only when
63
63
  * `colorModeEnabled` is `true` AND a `theme-toggle` entry survives
64
64
  * `filterHeaderRightItems` — matching the original template.
65
65
  */
66
- themeToggle?: ComponentChildren;
66
+ themeToggle?: Child;
67
67
  /** Replacement for the `<LanguageSwitcher />` Astro child. */
68
- languageSwitcher?: ComponentChildren;
68
+ languageSwitcher?: Child;
69
69
  /** Replacement for the `<VersionSwitcher />` Astro child. */
70
- versionSwitcher?: ComponentChildren;
70
+ versionSwitcher?: Child;
71
71
  /** Replacement for the `<Search />` Astro child. */
72
- search?: ComponentChildren;
72
+ search?: Child;
73
73
  /**
74
74
  * Emits `data-zfb-transition-persist={persistKey}` on the
75
75
  * `<header>` element so zfb's client-router preserves DOM-node identity
@@ -1,4 +1,4 @@
1
- import { Fragment, jsx, jsxs } from "preact/jsx-runtime";
1
+ import { Fragment, jsx, jsxs } from "@takazudo/zfb/zudo-react/jsx-runtime";
2
2
  import {
3
3
  computeActiveNavPath,
4
4
  isNavItemActive,
@@ -163,7 +163,7 @@ function Header(props) {
163
163
  children: rightGroups
164
164
  }
165
165
  ),
166
- /* @__PURE__ */ jsx("script", { dangerouslySetInnerHTML: { __html: NAV_OVERFLOW_SCRIPT } }),
166
+ /* @__PURE__ */ jsx("script", { rawHtml: NAV_OVERFLOW_SCRIPT }),
167
167
  hasLocales ? (
168
168
  // Keeps the persisted header's language-switcher hrefs pointing at the
169
169
  // current page's equivalent in each other locale across same-locale SPA
@@ -172,7 +172,7 @@ function Header(props) {
172
172
  /* @__PURE__ */ jsx(
173
173
  "script",
174
174
  {
175
- dangerouslySetInnerHTML: { __html: LANGUAGE_SWITCHER_INIT_SCRIPT }
175
+ rawHtml: LANGUAGE_SWITCHER_INIT_SCRIPT
176
176
  }
177
177
  )
178
178
  ) : null,
@@ -184,7 +184,7 @@ function Header(props) {
184
184
  /* @__PURE__ */ jsx(
185
185
  "script",
186
186
  {
187
- dangerouslySetInnerHTML: { __html: VERSION_SWITCHER_REWIRE_SCRIPT }
187
+ rawHtml: VERSION_SWITCHER_REWIRE_SCRIPT
188
188
  }
189
189
  )
190
190
  ) : null
@@ -219,7 +219,7 @@ function renderNavItem(item, activeNavPath, activeCategory, lang, currentVersion
219
219
  "aria-haspopup": "true",
220
220
  "aria-expanded": "false",
221
221
  class: [
222
- "flex items-center gap-x-hsp-xs px-hsp-md py-vsp-2xs text-small font-medium transition-colors",
222
+ "flex items-center gap-x-hsp-xs px-hsp-md py-vsp-2xs text-small font-medium transition-colors duration-0",
223
223
  isActive ? NAV_TOP_ACTIVE.join(" ") : NAV_TOP_INACTIVE.join(" ")
224
224
  ].join(" "),
225
225
  children: [
@@ -279,7 +279,7 @@ function renderNavItem(item, activeNavPath, activeCategory, lang, currentVersion
279
279
  "data-nav-category": item.categoryMatch,
280
280
  "data-nav-item": true,
281
281
  class: [
282
- "px-hsp-md py-vsp-2xs text-small font-medium transition-colors shrink-0",
282
+ "px-hsp-md py-vsp-2xs text-small font-medium transition-colors duration-0 shrink-0",
283
283
  isActive ? NAV_TOP_ACTIVE.join(" ") : NAV_TOP_INACTIVE.join(" ")
284
284
  ].join(" "),
285
285
  children: label
@@ -314,7 +314,7 @@ function TriggerButton({
314
314
  {
315
315
  id,
316
316
  type: "button",
317
- 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",
317
+ 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",
318
318
  "aria-label": ariaLabel,
319
319
  ...inlineOnclick,
320
320
  children
@@ -347,7 +347,6 @@ const BASE_RIGHT_ITEM_DISPATCH = {
347
347
  children: /* @__PURE__ */ jsxs(
348
348
  "svg",
349
349
  {
350
- xmlns: "http://www.w3.org/2000/svg",
351
350
  width: "20",
352
351
  height: "20",
353
352
  viewBox: "0 0 24 24",
@@ -378,7 +377,6 @@ const BASE_RIGHT_ITEM_DISPATCH = {
378
377
  children: /* @__PURE__ */ jsxs(
379
378
  "svg",
380
379
  {
381
- xmlns: "http://www.w3.org/2000/svg",
382
380
  width: "20",
383
381
  height: "20",
384
382
  viewBox: "0 0 24 24",
@@ -401,7 +399,7 @@ const BASE_RIGHT_ITEM_DISPATCH = {
401
399
  href: ctx.githubRepoUrl,
402
400
  target: "_blank",
403
401
  rel: "noopener noreferrer",
404
- 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",
402
+ 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",
405
403
  "aria-label": ctx.githubLabel,
406
404
  title: ctx.githubLabel,
407
405
  children: [
@@ -447,7 +445,7 @@ const BASE_RIGHT_ITEM_DISPATCH = {
447
445
  return /* @__PURE__ */ jsx(
448
446
  "span",
449
447
  {
450
- dangerouslySetInnerHTML: { __html: item.html }
448
+ rawHtml: item.html
451
449
  },
452
450
  `right-${index}`
453
451
  );
@@ -1,7 +1,7 @@
1
- import type { ComponentChildren } from "preact";
1
+ import type { Child, Component } from "@takazudo/zfb/zudo-react";
2
2
  /**
3
3
  * Locale code as seen by the header. Widened from the host's literal
4
- * union (`"en" | "ja" | …`) to plain `string` at the v2 boundary so the
4
+ * union (`"en" | "ja" | …`) to plain `string` at the package boundary so the
5
5
  * package can render for any project's locale set without a generic
6
6
  * parameter (super-epic #1724, sub-issue #1729).
7
7
  */
@@ -47,15 +47,15 @@ export interface HeaderRightComponentProps {
47
47
  lang: Locale | undefined;
48
48
  githubRepoUrl: string | null;
49
49
  githubLabel: string;
50
- themeToggle: ComponentChildren;
51
- languageSwitcher: ComponentChildren;
52
- versionSwitcher: ComponentChildren;
53
- search: ComponentChildren;
50
+ themeToggle: Child;
51
+ languageSwitcher: Child;
52
+ versionSwitcher: Child;
53
+ search: Child;
54
54
  colorModeEnabled: boolean;
55
55
  hasLocales: boolean;
56
56
  }
57
57
  /** A callable-only host registry keyed by serialized component name. */
58
- export type HeaderRightComponentRegistry = Record<string, (props: HeaderRightComponentProps) => ComponentChildren>;
58
+ export type HeaderRightComponentRegistry = Record<string, Component<HeaderRightComponentProps>>;
59
59
  export interface HeaderRightTriggerItem {
60
60
  type: "trigger";
61
61
  trigger: HeaderRightTriggerName;
@@ -1,6 +1,5 @@
1
1
  /** @jsxRuntime automatic */
2
- /** @jsxImportSource preact */
3
- import type { JSX } from "preact";
2
+ import type { JSX } from "@takazudo/zfb/zudo-react/jsx-runtime";
4
3
  import type { ChromeContext } from "../factory-context/index.js";
5
4
  import type { Settings } from "../settings.js";
6
5
  import type { SidebarNavNode } from "../sidebar/types.js";
@@ -1,4 +1,4 @@
1
- import { jsx } from "preact/jsx-runtime";
1
+ import { jsx } from "@takazudo/zfb/zudo-react/jsx-runtime";
2
2
  import { Island } from "@takazudo/zfb";
3
3
  import { Header, filterHeaderRightItems } from "../header/index.js";
4
4
  import {
@@ -29,7 +29,7 @@ function createHeaderWithDefaults(ctx) {
29
29
  const docsUrl = ctx.docsUrl;
30
30
  const navHref = ctx.navHref;
31
31
  const versionedDocsUrl = ctx.versionedDocsUrl;
32
- const { buildRootMenuItems, buildLocaleLinksForNav, buildSidebarNodes, getThemeDefaultMode } = deriveNavDataPrep(ctx);
32
+ const { buildRootMenuItems, buildLocaleLinksForNav, buildSidebarNodes, buildSidebarContext, getThemeDefaultMode } = deriveNavDataPrep(ctx);
33
33
  const buildGitHubRepoUrl = () => buildGitHubRepoUrlBase(ctx.settings.githubUrl);
34
34
  const SearchWidget = deriveSearchWidgetSlot(ctx);
35
35
  const getUnavailableVersions = deriveGetUnavailableVersions(ctx);
@@ -50,7 +50,8 @@ function createHeaderWithDefaults(ctx) {
50
50
  const themeDefaultMode = getThemeDefaultMode();
51
51
  const themeRespectSystem = (ctx.settings.colorMode && ctx.settings.colorMode.respectPrefersColorScheme) ?? true;
52
52
  const buildDefaultSidebarNodes = () => buildSidebarNodes(lang, navSection, currentVersion);
53
- const sidebarNodes = sidebarNodesProp === void 0 ? buildDefaultSidebarNodes() : typeof sidebarNodesProp === "function" ? sidebarNodesProp({
53
+ const defaultSidebar = sidebarNodesProp === void 0 ? buildSidebarContext(lang, navSection, currentVersion) : void 0;
54
+ const sidebarNodes = sidebarNodesProp === void 0 ? defaultSidebar.nodes : typeof sidebarNodesProp === "function" ? sidebarNodesProp({
54
55
  lang,
55
56
  navSection,
56
57
  currentVersion,
@@ -62,12 +63,13 @@ function createHeaderWithDefaults(ctx) {
62
63
  SidebarToggle,
63
64
  {
64
65
  nodes: sidebarNodes,
65
- currentSlug,
66
+ ...defaultSidebar?.navigation ? { navigation: defaultSidebar.navigation } : {},
67
+ ...currentSlug !== void 0 ? { currentSlug } : {},
66
68
  rootMenuItems,
67
- backToMenuLabel,
69
+ ...backToMenuLabel !== void 0 ? { backToMenuLabel } : {},
68
70
  locale: lang,
69
- localeLinks,
70
- themeDefaultMode,
71
+ ...localeLinks !== void 0 ? { localeLinks } : {},
72
+ ...themeDefaultMode !== void 0 ? { themeDefaultMode } : {},
71
73
  themeLabels: themeToggleLabels(t, lang),
72
74
  themeRespectSystem,
73
75
  dateFormats: dateFormatsFor(lang)
@@ -76,7 +78,15 @@ function createHeaderWithDefaults(ctx) {
76
78
  });
77
79
  const themeToggle = Island({
78
80
  when: "load",
79
- children: /* @__PURE__ */ jsx(ThemeToggle, { defaultMode: themeDefaultMode, labels: themeToggleLabels(t, lang), respectPrefersColorScheme: themeRespectSystem, pendingUntilHydrated: true })
81
+ children: /* @__PURE__ */ jsx(
82
+ ThemeToggle,
83
+ {
84
+ ...themeDefaultMode !== void 0 ? { defaultMode: themeDefaultMode } : {},
85
+ labels: themeToggleLabels(t, lang),
86
+ respectPrefersColorScheme: themeRespectSystem,
87
+ pendingUntilHydrated: true
88
+ }
89
+ )
80
90
  });
81
91
  const searchWidget = /* @__PURE__ */ jsx(
82
92
  SearchWidget,
@@ -1,6 +1,3 @@
1
- /** @jsxRuntime automatic */
2
- /** @jsxImportSource preact */
3
- import { h } from "preact";
4
1
  import type { PreparedHomeIntro } from "./types.js";
5
2
  export type { IntroNode, PreparedHomeIntro, PreparedHomeIntros } from "./types.js";
6
3
  export { resolveHomeIntro } from "./resolve.js";
@@ -13,7 +10,7 @@ export { resolveHomeIntro } from "./resolve.js";
13
10
  * double up against them.
14
11
  */
15
12
  export declare const HOME_SECTION_HEADING_CLASS = "zd-home-heading text-title font-bold leading-tight";
16
- /** Synchronous SSR view of output produced by home-intro/prepare. No raw HTML sink. */
13
+ /** Synchronous SSR view of output produced by home-intro/prepare. Ruby uses the native zudo-react vocabulary. */
17
14
  export declare function CompactProse({ intro }: {
18
15
  intro: PreparedHomeIntro | null | undefined;
19
- }): h.JSX.Element | null;
16
+ }): import("@takazudo/zfb").Description | null;
@@ -1,20 +1,22 @@
1
- import { jsx } from "preact/jsx-runtime";
2
- import { h } from "preact";
1
+ import { jsx } from "@takazudo/zfb/zudo-react/jsx-runtime";
2
+ import { h } from "@takazudo/zfb/zudo-react";
3
3
  import { defaultComponents } from "../content/index.js";
4
4
  import { makeAdmonition } from "../content-admonition/index.js";
5
5
  import { resolveHomeIntro } from "./resolve.js";
6
6
  const HOME_SECTION_HEADING_CLASS = "zd-home-heading text-title font-bold leading-tight";
7
7
  const { h2: _h2, h3: _h3, h4: _h4, ...typography } = defaultComponents;
8
8
  const components = { ...typography };
9
- components.h2 = ({ class: klass, className, children, ...rest }) => h(
9
+ components.h2 = ({ class: klass, children, ...rest }) => h(
10
10
  "h2",
11
- { ...rest, class: [HOME_SECTION_HEADING_CLASS, klass, className].filter(Boolean).join(" ") },
11
+ { ...rest, class: [HOME_SECTION_HEADING_CLASS, klass].filter(Boolean).join(" ") },
12
12
  children
13
13
  );
14
14
  for (const variant of ["note", "tip", "info", "warning", "danger", "caution", "important"]) components[variant] = makeAdmonition(variant);
15
+ const voidTags = /* @__PURE__ */ new Set(["br", "hr", "img", "input"]);
15
16
  function renderNode(node) {
16
17
  if (typeof node === "string") return node;
17
- return h(components[node.tag] ?? node.tag, node.attrs, node.children.map(renderNode));
18
+ const type = components[node.tag] ?? node.tag;
19
+ return voidTags.has(node.tag) ? h(type, node.attrs) : h(type, node.attrs, ...node.children.map(renderNode));
18
20
  }
19
21
  function CompactProse({ intro }) {
20
22
  if (!intro?.nodes.length) return null;
@@ -37,7 +37,7 @@ function inspect(node, settings, locale, source = "") {
37
37
  if ("children" in node && Array.isArray(node.children)) for (const child of node.children) inspect(child, settings, locale, source);
38
38
  }
39
39
  const allowedTags = new Set("p h1 h2 h3 h4 h5 h6 a img em strong del ul ol li blockquote pre code span br hr table thead tbody tr th td input div ruby rb rt rp note tip info warning danger caution important".split(" "));
40
- const plainAttrs = /* @__PURE__ */ new Set(["title", "alt", "class", "id", "start", "align", "width", "height", "data-mermaid", "data-lang"]);
40
+ const plainAttrs = /* @__PURE__ */ new Set(["title", "alt", "class", "id", "start", "width", "height", "data-mermaid", "data-lang"]);
41
41
  function prepareNode(node, settings, locale) {
42
42
  if (node.nodeName === "#text") return node.value;
43
43
  if (!("tagName" in node)) return null;
@@ -47,8 +47,9 @@ function prepareNode(node, settings, locale) {
47
47
  for (const { name, value } of node.attrs) {
48
48
  if (name === "href" && node.tagName === "a") attrs.href = resolveIntroUrl(value, settings, locale);
49
49
  else if (name === "src" && node.tagName === "img") attrs.src = resolveIntroUrl(value, settings, locale, true);
50
- else if (name === "style" && ["th", "td"].includes(node.tagName) && ["text-align: left", "text-align: center", "text-align: right"].includes(value)) attrs.style = value;
51
- else if (plainAttrs.has(name)) attrs[name === "class" ? "className" : name] = value;
50
+ else if (name === "style" && ["th", "td"].includes(node.tagName) && /^text-align: (left|center|right);?$/u.test(value)) attrs.style = value;
51
+ else if (name === "align" && ["th", "td"].includes(node.tagName) && ["left", "center", "right"].includes(value)) attrs.style = `text-align: ${value}`;
52
+ else if (plainAttrs.has(name)) attrs[name] = value;
52
53
  else if (node.tagName === "input" && name === "type" && value === "checkbox") attrs.type = value;
53
54
  else if (node.tagName === "input" && (name === "checked" || name === "disabled")) attrs[name] = true;
54
55
  else throw new Error(`home.introMarkdown: unsupported rendered attribute ${name}`);
@@ -1,6 +1,6 @@
1
1
  /** @jsxRuntime automatic */
2
- /** @jsxImportSource preact */
3
- import type { ComponentChildren, JSX } from "preact";
2
+ import type { Child } from "@takazudo/zfb/zudo-react";
3
+ import type { JSX } from "@takazudo/zfb/zudo-react/jsx-runtime";
4
4
  import type { TagItem } from "../nav-indexing/types.js";
5
5
  import type { DocNavNode } from "../doc-page-props/index.js";
6
6
  import type { ChromeContext } from "../factory-context/index.js";
@@ -25,7 +25,7 @@ export interface HomePageViewProps {
25
25
  * from it (a renderer). Resolved as `extras ?? hostBindings.homeExtras?.({
26
26
  * locale })`.
27
27
  */
28
- extras?: ComponentChildren;
28
+ extras?: Child;
29
29
  /**
30
30
  * Overrides the default first hero link, which is otherwise
31
31
  * `settings.headerNav[0]` + `t("nav.overview", locale)`. `path` is