@takazudo/zudo-doc 5.28.1 → 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 +28 -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 { Island } from "@takazudo/zfb";
2
3
  import { createComposeMetaTitle } from "../compose-meta-title/index.js";
3
4
  import {
4
5
  generateCssCustomProperties,
@@ -30,8 +31,10 @@ import {
30
31
  remapVersionedHrefs,
31
32
  getThemeDefaultMode as getThemeDefaultModeBase
32
33
  } from "../nav-data-prep/index.js";
33
- import { buildSidebarForSection } from "../sidebar-utils/index.js";
34
+ import { buildSidebarNavigation } from "../sidebar-utils/index.js";
34
35
  import { resolveDateFormats } from "../date-format-resolve/index.js";
36
+ import { normalizeIslandData } from "./island-data.js";
37
+ import { normalizeIslandData as normalizeIslandData2 } from "./island-data.js";
35
38
  const GREY_RAMPS = {
36
39
  base: [
37
40
  "oklch(0.965 0.000 0)",
@@ -113,28 +116,32 @@ function deriveColorSchemeGenerators(ctx) {
113
116
  }
114
117
  function deriveNavDataPrep(ctx) {
115
118
  function buildRootMenuItems(lang, currentVersion) {
116
- return buildRootMenuItemsBase(
117
- lang,
118
- currentVersion,
119
- ctx.settings.headerNav,
120
- (key, l) => ctx.t(key, l),
121
- (path, l, v, versioned) => ctx.navHref(path, l, v, versioned)
119
+ return normalizeIslandData(
120
+ buildRootMenuItemsBase(
121
+ lang,
122
+ currentVersion,
123
+ ctx.settings.headerNav,
124
+ (key, l) => ctx.t(key, l),
125
+ (path, l, v, versioned) => ctx.navHref(path, l, v, versioned)
126
+ )
122
127
  );
123
128
  }
124
129
  function buildLocaleLinksForNav(currentPath, lang, localeCount) {
125
- return buildLocaleLinksForNavBase(
126
- currentPath,
127
- lang,
128
- localeCount,
129
- (path, l) => ctx.buildLocaleLinks(path, l)
130
+ return normalizeIslandData(
131
+ buildLocaleLinksForNavBase(
132
+ currentPath,
133
+ lang,
134
+ localeCount,
135
+ (path, l) => ctx.buildLocaleLinks(path, l)
136
+ )
130
137
  );
131
138
  }
132
139
  const sidebarsConfig = ctx.hostBindings.sidebarsConfig ?? {};
133
- function buildSidebarNodes(lang, navSection, currentVersion, emptyWhenUnsectioned = true) {
134
- if (navSection === void 0 && emptyWhenUnsectioned) return [];
140
+ function buildSidebarContext(lang, navSection, currentVersion, emptyWhenUnsectioned = true) {
141
+ if (navSection === void 0 && emptyWhenUnsectioned) return { nodes: [], navigation: void 0 };
135
142
  const { navDocs, categoryMeta } = ctx.loadNavSourceDocs(lang, currentVersion);
136
143
  const explicitPrefixes = ctx.getCategoryOrder().filter((cm) => cm !== "!");
137
- const rawNodes = buildSidebarForSection(
144
+ const result = buildSidebarNavigation(
138
145
  navDocs,
139
146
  lang,
140
147
  navSection,
@@ -148,17 +155,20 @@ function deriveNavDataPrep(ctx) {
148
155
  ),
149
156
  explicitPrefixes
150
157
  );
151
- return currentVersion ? remapVersionedHrefs(
152
- rawNodes,
153
- currentVersion,
154
- lang,
155
- (slug, v, l) => ctx.versionedDocsUrl(slug, v, l)
156
- ) : rawNodes;
158
+ const remap = (nodes) => currentVersion ? remapVersionedHrefs(nodes, currentVersion, lang, (slug, v, l) => ctx.versionedDocsUrl(slug, v, l)) : nodes;
159
+ return normalizeIslandData({
160
+ nodes: remap(result.nodes),
161
+ navigation: { ...result.navigation, id: `${currentVersion ?? "current"}:${result.navigation.id}`, roots: remap(result.navigation.roots) }
162
+ });
163
+ }
164
+ function buildSidebarNodes(...args) {
165
+ const withoutIdentity = (nodes) => nodes.map(({ occurrenceId: _id, children, ...node }) => ({ ...node, children: withoutIdentity(children) }));
166
+ return withoutIdentity(buildSidebarContext(...args).nodes);
157
167
  }
158
168
  function getThemeDefaultMode() {
159
169
  return getThemeDefaultModeBase(ctx.settings.colorMode);
160
170
  }
161
- return { buildRootMenuItems, buildLocaleLinksForNav, buildSidebarNodes, getThemeDefaultMode };
171
+ return { buildRootMenuItems, buildLocaleLinksForNav, buildSidebarNodes, buildSidebarContext, getThemeDefaultMode };
162
172
  }
163
173
  function deriveSearchWidgetSlot(ctx) {
164
174
  function SearchWidgetBound(props) {
@@ -185,13 +195,19 @@ function deriveThemePackSwitcherProps(ctx) {
185
195
  function skipsPackageDefaultDesignTokenPanel(settings) {
186
196
  return Boolean(settings.designTokenPanelConfigModule) && settings.packageOwnedRoutes !== false;
187
197
  }
198
+ function DefaultDesignTokenPanelBoundary() {
199
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(Island, { when: "load", children: /* @__PURE__ */ jsx(DesignTokenPanelBootstrap, {}) }) });
200
+ }
201
+ function DefaultThemePackSwitcherBoundary(props) {
202
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(Island, { when: "load", children: /* @__PURE__ */ jsx(ThemePackSwitcher, { ...props }) }) });
203
+ }
188
204
  function deriveBodyEndIslands(ctx) {
189
205
  const designTokenPanelDeps = {
190
- DesignTokenPanelBootstrap: ctx.hostBindings.DesignTokenPanelBootstrap ?? (skipsPackageDefaultDesignTokenPanel(ctx.settings) ? void 0 : DesignTokenPanelBootstrap)
206
+ DesignTokenPanelBootstrap: ctx.hostBindings.DesignTokenPanelBootstrap ?? (skipsPackageDefaultDesignTokenPanel(ctx.settings) ? void 0 : DefaultDesignTokenPanelBoundary)
191
207
  };
192
208
  const themePackSwitcherDeps = {
193
209
  themePackSwitcherProps: deriveThemePackSwitcherProps(ctx),
194
- ThemePackSwitcher
210
+ ThemePackSwitcher: DefaultThemePackSwitcherBoundary
195
211
  };
196
212
  const HostBodyEndIslands = ctx.hostBindings.BodyEndIslands;
197
213
  if (!HostBodyEndIslands) {
@@ -351,11 +367,12 @@ function deriveMdxComponents(ctx) {
351
367
  preview: ctx.t("htmlPreview.iframe.title", lang)
352
368
  };
353
369
  function HtmlPreviewBound(props) {
354
- const labels = props.labels;
355
- const effectiveLang = props.lang?.trim() ? props.lang : lang.trim() ? lang : "en";
370
+ const definedProps = normalizeIslandData(props);
371
+ const labels = definedProps.labels;
372
+ const effectiveLang = definedProps.lang?.trim() ? definedProps.lang : lang.trim() ? lang : "en";
356
373
  return HtmlPreviewWrapper({
357
- globalConfig: ctx.settings.htmlPreview ?? null,
358
- ...props,
374
+ globalConfig: normalizeIslandData(ctx.settings.htmlPreview ?? null),
375
+ ...definedProps,
359
376
  lang: effectiveLang,
360
377
  labels: {
361
378
  mobile: labels?.mobile ?? localizedHtmlPreviewLabels.mobile,
@@ -416,5 +433,6 @@ export {
416
433
  deriveMdxComponents,
417
434
  deriveNavDataPrep,
418
435
  deriveSearchWidgetSlot,
436
+ normalizeIslandData2 as normalizeIslandData,
419
437
  skipsPackageDefaultDesignTokenPanel
420
438
  };
@@ -1,8 +1,8 @@
1
1
  /** @jsxRuntime automatic */
2
- /** @jsxImportSource preact */
3
2
  import type { RouteContext, ChromeHostBindings } from "../factory-context/index.js";
4
3
  import type { Settings } from "../settings.js";
5
- import type { JSX, VNode } from "preact";
4
+ import type { Child } from "@takazudo/zfb/zudo-react";
5
+ import type { JSX } from "@takazudo/zfb/zudo-react/jsx-runtime";
6
6
  import type { HeaderWithDefaultsProps } from "../header-with-defaults/index.js";
7
7
  import type { SidebarWithDefaultsProps } from "../sidebar-with-defaults/index.js";
8
8
  /**
@@ -19,7 +19,7 @@ export declare function createChrome<S extends Settings = Settings>(context: Rou
19
19
  HeaderWithDefaults: (props: HeaderWithDefaultsProps) => JSX.Element;
20
20
  FooterWithDefaults: (props: {
21
21
  lang?: string;
22
- }) => VNode;
22
+ }) => Child;
23
23
  SidebarWithDefaults: (props: SidebarWithDefaultsProps) => JSX.Element;
24
24
  renderDocPage: (props: import("../doc-page-props/index.js").DocPageBaseProps, opts: import("../doc-page-renderer/index.js").RenderDocPageOptions) => JSX.Element;
25
25
  VersionsPageView: (props: import("../versions-page/index.js").VersionsPageViewProps) => JSX.Element;
@@ -31,9 +31,9 @@ export declare function createChrome<S extends Settings = Settings>(context: Rou
31
31
  }) => JSX.Element;
32
32
  TagsIndexPageView: (props: {
33
33
  locale: string;
34
- children?: import("preact").ComponentChildren;
34
+ children?: Child;
35
35
  }) => JSX.Element;
36
- SiteTreeNavWrapper: import("../factory-context/index.js").FactoryComponent;
36
+ SiteTreeNavWrapper: import("../index.js").FactoryComponent;
37
37
  BodyEndIslands: (props: import("../doc-body-end-islands/index.js").BodyEndIslandsProps) => JSX.Element;
38
38
  HomePageView: (props: import("../home-page/index.js").HomePageViewProps) => JSX.Element;
39
39
  AssetPageView: (props: import("../asset-page/index.js").AssetPageViewProps) => JSX.Element;
@@ -1,4 +1,4 @@
1
- import { Fragment, jsx } from "preact/jsx-runtime";
1
+ import { Fragment, jsx } from "@takazudo/zfb/zudo-react/jsx-runtime";
2
2
  import { createHeadWithDefaults } from "../head-with-defaults/index.js";
3
3
  import { createRenderDocPage } from "../doc-page-renderer/index.js";
4
4
  import { createVersionsPageView } from "../versions-page/index.js";
@@ -0,0 +1,4 @@
1
+ /** Copy transport data before constructing descriptions so SSR and the island
2
+ * serializer observe the same own keys. Optional record members are omitted;
3
+ * malformed arrays and runtime objects fail at the boundary. */
4
+ export declare function normalizeIslandData<T>(value: T): T;
@@ -0,0 +1,52 @@
1
+ function normalizeIslandData(value) {
2
+ const active = /* @__PURE__ */ new WeakSet();
3
+ function copy(input, path) {
4
+ if (input === void 0 && path === "$island") return input;
5
+ if (input === null || typeof input === "string" || typeof input === "boolean") {
6
+ return input;
7
+ }
8
+ if (typeof input === "number" && Number.isFinite(input)) return input;
9
+ if (typeof input !== "object") throw new TypeError(`Invalid island data at ${path}`);
10
+ if (active.has(input)) throw new TypeError(`Cyclic island data at ${path}`);
11
+ const prototype = Object.getPrototypeOf(input);
12
+ if (!Array.isArray(input) && prototype !== Object.prototype && prototype !== null) {
13
+ throw new TypeError(`Invalid island record at ${path}`);
14
+ }
15
+ active.add(input);
16
+ try {
17
+ if (Array.isArray(input)) {
18
+ for (const key of Reflect.ownKeys(input)) {
19
+ if (key !== "length" && (typeof key !== "string" || !/^(0|[1-9][0-9]*)$/.test(key) || Number(key) >= input.length)) {
20
+ throw new TypeError(`Invalid island array key at ${path}`);
21
+ }
22
+ }
23
+ return Array.from({ length: input.length }, (_, index) => {
24
+ const descriptor = Object.getOwnPropertyDescriptor(input, index);
25
+ if (!descriptor) throw new TypeError(`Sparse island array at ${path}[${index}]`);
26
+ if (!("value" in descriptor)) {
27
+ throw new TypeError(`Accessor island data at ${path}[${index}]`);
28
+ }
29
+ return copy(descriptor.value, `${path}[${index}]`);
30
+ });
31
+ }
32
+ const output = {};
33
+ for (const key of Reflect.ownKeys(input)) {
34
+ if (typeof key !== "string" || key === "__proto__" || key === "constructor" || key === "prototype") {
35
+ throw new TypeError(`Invalid island key at ${path}`);
36
+ }
37
+ const descriptor = Object.getOwnPropertyDescriptor(input, key);
38
+ if (!descriptor || !("value" in descriptor)) {
39
+ throw new TypeError(`Accessor island data at ${path}.${key}`);
40
+ }
41
+ if (descriptor.value !== void 0) output[key] = copy(descriptor.value, `${path}.${key}`);
42
+ }
43
+ return output;
44
+ } finally {
45
+ active.delete(input);
46
+ }
47
+ }
48
+ return copy(value, "$island");
49
+ }
50
+ export {
51
+ normalizeIslandData
52
+ };
@@ -1,10 +1,9 @@
1
1
  /** @jsxRuntime automatic */
2
- /** @jsxImportSource preact */
3
- import type { ComponentChildren } from "preact";
2
+ import type { Child } from "@takazudo/zfb/zudo-react";
4
3
  import type { ChromeContext } from "../factory-context/index.js";
5
4
  import type { BreadcrumbSlotProps, DocPagerSlotProps, FooterSlotProps, HeaderSlotProps, SidebarSlotProps, TocSlotProps } from "../chrome-bindings.js";
6
5
  import type { Settings } from "../settings.js";
7
- type PrimarySlot<P> = (props: P) => ComponentChildren;
6
+ type PrimarySlot<P> = (props: P) => Child;
8
7
  /**
9
8
  * Resolve all six primary chrome components through one binding object.
10
9
  * Accessors keep package defaults lazy: a home view that only reads Header and
@@ -1,4 +1,4 @@
1
- import type { ComponentChildren } from "preact";
1
+ import type { Child, Component } from "@takazudo/zfb/zudo-react";
2
2
  import type { BreadcrumbItem } from "./breadcrumb/index.js";
3
3
  import type { DocPageNavNode } from "./doc-page-shell/index.js";
4
4
  import type { HeadingItem } from "./toc/index.js";
@@ -34,12 +34,14 @@ export interface BodyEndIslandsSlotProps {
34
34
  forceImageEnlarge?: boolean;
35
35
  }
36
36
  /**
37
- * Props the chrome passes to the `DocHistory` island slot — matches
37
+ * Props the chrome passes to the `DocHistory` server boundary slot — matches
38
38
  * `DocHistoryProps` (`doc-history/index.tsx`) / `DocHistoryComponent`
39
39
  * (`doc-history-area`), rendered as
40
40
  * `<DocHistory slug=… locale=… basePath=… displayLocale=… dateFormats=… />`.
41
41
  */
42
42
  export interface DocHistorySlotProps {
43
+ /** Server-only fallback consumed by the boundary, never serialized as client props. */
44
+ ssrFallback?: Child;
43
45
  slug: string;
44
46
  locale?: string;
45
47
  basePath?: string;
@@ -50,8 +52,11 @@ export interface DocHistorySlotProps {
50
52
  }
51
53
  /**
52
54
  * Props the chrome passes to the `DesignTokenPanelBootstrap` slot — NONE. It is
53
- * rendered as `<DesignTokenPanelBootstrap />` (zero props) inside
54
- * `createBodyEndIslands`. An empty object type (no index signature) so a
55
+ * a server boundary rendered with zero props behind the package settings gate.
56
+ * Return a Fragment containing an Island with a statically imported client
57
+ * target; do not pass the raw client component. The package owns the toggle
58
+ * shim but does not add an Island around this boundary.
59
+ * An empty object type (no index signature) so a
55
60
  * zero-prop or all-optional-prop component is accepted while a component that
56
61
  * REQUIRES any prop is drift.
57
62
  */
@@ -120,7 +125,7 @@ export interface TocSlotProps {
120
125
  */
121
126
  export interface BreadcrumbSlotProps {
122
127
  items: BreadcrumbItem[];
123
- rightSlot?: ComponentChildren;
128
+ rightSlot?: Child;
124
129
  }
125
130
  /** Props supplied to the doc-route `DocPager` replacement. */
126
131
  export interface DocPagerSlotProps {
@@ -134,30 +139,30 @@ export interface DocPagerSlotProps {
134
139
  */
135
140
  export interface ChromeBindingsInput {
136
141
  /** Primary header replacement — see {@link HeaderSlotProps}. */
137
- Header?: (props: HeaderSlotProps) => unknown;
142
+ Header?: Component<HeaderSlotProps>;
138
143
  /** Primary footer replacement — see {@link FooterSlotProps}. */
139
- Footer?: (props: FooterSlotProps) => unknown;
144
+ Footer?: Component<FooterSlotProps>;
140
145
  /** Primary doc-sidebar replacement — see {@link SidebarSlotProps}. */
141
- Sidebar?: (props: SidebarSlotProps) => unknown;
146
+ Sidebar?: Component<SidebarSlotProps>;
142
147
  /** Primary desktop TOC replacement — see {@link TocSlotProps}. */
143
- Toc?: (props: TocSlotProps) => unknown;
148
+ Toc?: Component<TocSlotProps>;
144
149
  /** Primary breadcrumb replacement — see {@link BreadcrumbSlotProps}. */
145
- Breadcrumb?: (props: BreadcrumbSlotProps) => unknown;
150
+ Breadcrumb?: Component<BreadcrumbSlotProps>;
146
151
  /** Primary previous/next pager replacement — see {@link DocPagerSlotProps}. */
147
- DocPager?: (props: DocPagerSlotProps) => unknown;
152
+ DocPager?: Component<DocPagerSlotProps>;
148
153
  /** Header search widget — see {@link SearchWidgetSlotProps}. */
149
- SearchWidget?: (props: SearchWidgetSlotProps) => unknown;
154
+ SearchWidget?: Component<SearchWidgetSlotProps>;
150
155
  /**
151
156
  * Named header-right renderers. Values are callable-only and receive the
152
157
  * exact `HeaderRightComponentProps` used by the header renderer.
153
158
  */
154
159
  headerRightComponents?: HeaderRightComponentRegistry;
155
160
  /** Body-end bootstrap islands — see {@link BodyEndIslandsSlotProps}. */
156
- BodyEndIslands?: (props: BodyEndIslandsSlotProps) => unknown;
157
- /** DocHistory island — see {@link DocHistorySlotProps}. */
158
- DocHistory?: (props: DocHistorySlotProps) => unknown;
159
- /** Design-token-panel bootstrap island — see {@link DesignTokenPanelBootstrapSlotProps}. */
160
- DesignTokenPanelBootstrap?: (props: DesignTokenPanelBootstrapSlotProps) => unknown;
161
+ BodyEndIslands?: Component<BodyEndIslandsSlotProps>;
162
+ /** Fixed-target DocHistory server boundary — see {@link DocHistorySlotProps}. */
163
+ DocHistory?: Component<DocHistorySlotProps>;
164
+ /** Server boundary for the design-token-panel bootstrap — see {@link DesignTokenPanelBootstrapSlotProps}. */
165
+ DesignTokenPanelBootstrap?: Component<DesignTokenPanelBootstrapSlotProps>;
161
166
  /**
162
167
  * Per-page git-history meta manifest (data slot). Read as
163
168
  * `Record<string, DocHistoryMetaEntry>` inside `doc-metainfo-area` /
@@ -181,13 +186,14 @@ export interface ChromeBindingsInput {
181
186
  * (parameter contravariance). Unlike `mdxExtras`, this slot has a fixed call
182
187
  * site, so it carries the real contract rather than a loose `Record`.
183
188
  */
184
- frontmatterRenderers?: Record<string, (props: FrontmatterRendererSlotProps) => unknown>;
189
+ frontmatterRenderers?: Record<string, Component<FrontmatterRendererSlotProps>>;
185
190
  /**
186
- * MDX content-component overrides (renderer record). Same loose value type as
187
- * `frontmatterRenderers`; the showcase's `MdxStub = (_props: unknown) => null`
188
- * is accepted deliberately (`unknown` props are a safe supertype).
191
+ * MDX content-component overrides (renderer record). Component props are a
192
+ * broad record because each MDX component has its own authored prop shape;
193
+ * the showcase's `MdxStub = (_props: unknown) => null` is accepted because
194
+ * `unknown` safely accepts that record.
189
195
  */
190
- mdxExtras?: Record<string, unknown>;
196
+ mdxExtras?: Record<string, Component<Record<string, unknown>>>;
191
197
  /**
192
198
  * Frontmatter preview entry builder. `doc-content-header` calls it with the
193
199
  * page `data` (`Record<string, unknown>`) and spreads the result into
@@ -1,10 +1,9 @@
1
1
  /** @jsxRuntime automatic */
2
- /** @jsxImportSource preact */
3
- import type { ComponentChildren } from "preact";
2
+ import type { Child } from "@takazudo/zfb/zudo-react";
4
3
  type Props = {
5
4
  tabs?: string[];
6
- children?: ComponentChildren;
5
+ children?: Child;
7
6
  [key: string]: unknown;
8
7
  };
9
- export declare function CodeGroup({ tabs, children, name }: Props): import("preact").JSX.Element;
8
+ export declare function CodeGroup({ tabs, children, name }: Props): import("@takazudo/zfb").Description;
10
9
  export {};
@@ -1,13 +1,9 @@
1
- import { Fragment, jsx } from "preact/jsx-runtime";
1
+ import { Fragment, jsx } from "@takazudo/zfb/zudo-react/jsx-runtime";
2
+ import { flattenChildren } from "@takazudo/zfb/zudo-react";
2
3
  import { Tabs } from "../code-syntax/index.js";
3
4
  import { TabItem } from "../tab-item/index.js";
4
- function toArray(children) {
5
- if (!children) return [];
6
- if (Array.isArray(children)) return children;
7
- return [children];
8
- }
9
5
  function CodeGroup({ tabs = [], children, name }) {
10
- const childArray = toArray(children);
6
+ const childArray = flattenChildren(children);
11
7
  const items = tabs.map((label, i) => {
12
8
  const child = childArray[i];
13
9
  return { label, child };
@@ -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
  /**
5
4
  * Drop-in JSX replacement for the legacy `code-block-enhancer` component.
6
5
  *
@@ -1,9 +1,9 @@
1
- import { Fragment, jsx, jsxs } from "preact/jsx-runtime";
1
+ import { Fragment, jsx, jsxs } from "@takazudo/zfb/zudo-react/jsx-runtime";
2
2
  import { CODE_BLOCK_ENHANCER_SCRIPT } from "./code-block-enhancer-script.js";
3
3
  function CodeBlockEnhancer() {
4
4
  return /* @__PURE__ */ jsxs(Fragment, { children: [
5
5
  /* @__PURE__ */ jsx("div", { class: "code-block-sr-announce", "aria-live": "polite" }),
6
- /* @__PURE__ */ jsx("script", { dangerouslySetInnerHTML: { __html: CODE_BLOCK_ENHANCER_SCRIPT } })
6
+ /* @__PURE__ */ jsx("script", { rawHtml: CODE_BLOCK_ENHANCER_SCRIPT })
7
7
  ] });
8
8
  }
9
9
  export {
@@ -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
  /**
5
4
  * Props for `<MermaidInit/>`.
6
5
  *
@@ -1,4 +1,4 @@
1
- import { jsx } from "preact/jsx-runtime";
1
+ import { jsx } from "@takazudo/zfb/zudo-react/jsx-runtime";
2
2
  import {
3
3
  MERMAID_CDN_MODULE_URL,
4
4
  buildMermaidInitScript
@@ -6,7 +6,10 @@ import {
6
6
  const MERMAID_INIT_SCRIPT = buildMermaidInitScript(MERMAID_CDN_MODULE_URL);
7
7
  function MermaidInit(props = {}) {
8
8
  const script = props.script ?? (props.cdnUrl ? buildMermaidInitScript(props.cdnUrl) : MERMAID_INIT_SCRIPT);
9
- return /* @__PURE__ */ jsx("script", { dangerouslySetInnerHTML: { __html: script } });
9
+ if (/<\/script\b/i.test(script)) {
10
+ throw new Error("MermaidInit script must not contain a closing script tag");
11
+ }
12
+ return /* @__PURE__ */ jsx("script", { rawHtml: script });
10
13
  }
11
14
  export {
12
15
  MermaidInit
@@ -1,6 +1,6 @@
1
1
  import { AFTER_NAVIGATE_EVENT } from "../transitions/page-events.js";
2
2
  const TABS_INIT_SCRIPT = `(function () {
3
- var BASE_BTN = "px-hsp-lg py-vsp-xs text-small font-medium border-b-[5px] -mb-px transition-colors";
3
+ var BASE_BTN = "px-hsp-lg py-vsp-xs text-small font-medium border-b-[5px] -mb-px transition-colors duration-0";
4
4
  var ACTIVE_BTN = BASE_BTN + " text-accent border-accent";
5
5
  var INACTIVE_BTN = BASE_BTN + " text-muted border-transparent hover:text-fg";
6
6
 
@@ -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
  /**
5
4
  * Drop-in JSX replacement for the legacy `tabs-init` component.
6
5
  *
@@ -1,7 +1,7 @@
1
- import { jsx } from "preact/jsx-runtime";
1
+ import { jsx } from "@takazudo/zfb/zudo-react/jsx-runtime";
2
2
  import { TABS_INIT_SCRIPT } from "./tabs-init-script.js";
3
3
  function TabsInit() {
4
- return /* @__PURE__ */ jsx("script", { dangerouslySetInnerHTML: { __html: TABS_INIT_SCRIPT } });
4
+ return /* @__PURE__ */ jsx("script", { rawHtml: TABS_INIT_SCRIPT });
5
5
  }
6
6
  export {
7
7
  TabsInit
@@ -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
  export interface TabsProps {
5
5
  /**
6
6
  * When set, clicking a tab in this group persists the chosen value to
@@ -9,15 +9,15 @@ export interface TabsProps {
9
9
  */
10
10
  groupId?: string;
11
11
  /** `<TabItem>` children (and any other content). */
12
- children?: ComponentChildren;
12
+ children?: Child;
13
13
  }
14
14
  /**
15
15
  * Server-rendered tab container — JSX port of the legacy `tabs` component.
16
16
  *
17
- * Iterates `children` via `toChildArray` to discover `<TabItem>` elements
17
+ * Iterates `children` via `flattenChildren` to discover `<TabItem>` elements
18
18
  * and renders their labels as `<button>` elements in the tab nav bar.
19
- * All panels remain `hidden` on first paint; `<TabsInit>` (the companion
20
- * script component) activates the default/stored tab after hydration.
19
+ * The default panel is visible on first paint; `<TabsInit>` (the companion
20
+ * script component) activates a stored tab after hydration.
21
21
  *
22
22
  * Place `<TabsInit>` once in the layout — NOT inside each `<Tabs>`.
23
23
  *
@@ -1,11 +1,11 @@
1
- import { jsx, jsxs } from "preact/jsx-runtime";
2
- import { cloneElement, toChildArray } from "preact";
1
+ import { jsx, jsxs } from "@takazudo/zfb/zudo-react/jsx-runtime";
2
+ import { h, flattenChildren } from "@takazudo/zfb/zudo-react";
3
3
  import { TabItem } from "../tab-item/tab-item.js";
4
- const BASE_BTN_CLASS = "px-hsp-lg py-vsp-xs text-small font-medium border-b-[5px] -mb-px transition-colors";
4
+ const BASE_BTN_CLASS = "px-hsp-lg py-vsp-xs text-small font-medium border-b-[5px] -mb-px transition-colors duration-0";
5
5
  const ACTIVE_BTN_CLASS = `${BASE_BTN_CLASS} text-accent border-accent`;
6
6
  const INACTIVE_BTN_CLASS = `${BASE_BTN_CLASS} text-muted border-transparent hover:text-fg`;
7
7
  function Tabs({ groupId, children }) {
8
- const childArray = toChildArray(children);
8
+ const childArray = flattenChildren(children);
9
9
  const tabItemNodes = childArray.filter(
10
10
  (child) => typeof child === "object" && child !== null && child.type === TabItem
11
11
  );
@@ -23,18 +23,18 @@ function Tabs({ groupId, children }) {
23
23
  const props = node.props;
24
24
  const value = props.value ?? props.label;
25
25
  const isDefault = value === defaultValue;
26
- return cloneElement(node, { default: isDefault });
26
+ return h(node.type, { ...node.props, default: isDefault, key: node.key });
27
27
  }
28
28
  return child;
29
29
  });
30
30
  return /* @__PURE__ */ jsxs(
31
31
  "div",
32
32
  {
33
- class: "tabs-container my-vsp-md",
33
+ class: "my-vsp-md",
34
34
  "data-tabs": true,
35
35
  "data-group-id": groupId,
36
36
  children: [
37
- /* @__PURE__ */ jsx("div", { class: "tabs-nav flex border-b border-muted", role: "tablist", children: tabItems.map((item) => {
37
+ /* @__PURE__ */ jsx("div", { class: "flex border-b border-muted", role: "tablist", "data-tabs-nav": true, children: tabItems.map((item) => {
38
38
  const value = item.props.value ?? item.props.label;
39
39
  const isActive = value === defaultValue;
40
40
  return /* @__PURE__ */ jsx(
@@ -50,7 +50,7 @@ function Tabs({ groupId, children }) {
50
50
  value
51
51
  );
52
52
  }) }),
53
- /* @__PURE__ */ jsx("div", { class: "tabs-content", children: renderedChildren })
53
+ /* @__PURE__ */ jsx("div", { "data-tabs-content": true, children: renderedChildren })
54
54
  ]
55
55
  }
56
56
  );