@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,6 +1,5 @@
1
1
  /** @jsxRuntime automatic */
2
- /** @jsxImportSource preact */
3
- import type { VNode } from "preact";
2
+ import type { Child } from "@takazudo/zfb/zudo-react";
4
3
  /**
5
4
  * Heuristic: does `text` look like a URL, filesystem path, or similar
6
5
  * structure where inserting <wbr> after delimiters aids line-wrapping?
@@ -20,14 +19,14 @@ export declare function isPathLike(text: string): boolean;
20
19
  * the input string unchanged so callers can trust non-path prose passes
21
20
  * through untouched.
22
21
  */
23
- export declare function smartBreak(text: string): VNode | string;
22
+ export declare function smartBreak(text: string): Child;
24
23
  /**
25
24
  * Preact function component wrapper — pure, server-renderable.
26
25
  * Stringifies children and defers to smartBreak.
27
26
  */
28
27
  export declare function SmartBreak({ children }: {
29
28
  children?: unknown;
30
- }): VNode;
29
+ }): Child;
31
30
  /**
32
31
  * HTML-escape `text` and inject a literal "<wbr>" tag after every
33
32
  * delimiter character. Unlike smartBreakToHtml, this does NOT check
@@ -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
  function isPathLike(text) {
3
3
  if (!text) return false;
4
4
  if (text.includes("://")) return true;
@@ -1,6 +1,5 @@
1
1
  /** @jsxRuntime automatic */
2
- /** @jsxImportSource preact */
3
- import type { ComponentChildren } from "preact";
2
+ import type { Child } from "@takazudo/zfb/zudo-react";
4
3
  export interface TabItemProps {
5
4
  /** Human-readable label rendered by the parent Tabs trigger row. */
6
5
  label: string;
@@ -16,7 +15,7 @@ export interface TabItemProps {
16
15
  */
17
16
  default?: boolean;
18
17
  /** Panel body. */
19
- children?: ComponentChildren;
18
+ children?: Child;
20
19
  }
21
20
  /**
22
21
  * One tab panel.
@@ -33,5 +32,5 @@ export interface TabItemProps {
33
32
  * `[data-tab-default]` and reapplies `hidden` / `aria-selected` so
34
33
  * the SSR-rendered defaults survive group sync and View Transitions.
35
34
  */
36
- export declare function TabItem({ label, value, default: isDefault, children, }: TabItemProps): import("preact").JSX.Element;
35
+ export declare function TabItem({ label, value, default: isDefault, children, }: TabItemProps): import("@takazudo/zfb").Description;
37
36
  export default TabItem;
@@ -1,4 +1,4 @@
1
- import { jsx } from "preact/jsx-runtime";
1
+ import { jsx } from "@takazudo/zfb/zudo-react/jsx-runtime";
2
2
  function TabItem({
3
3
  label,
4
4
  value,
@@ -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 { ChromeContext } from "../factory-context/index.js";
5
5
  import type { Settings } from "../settings.js";
6
6
  import type { DocPageEntry } from "../doc-page-props/index.js";
@@ -95,7 +95,7 @@ export interface TagPagesAPI {
95
95
  /** "All Tags" index page — computes the tag map at render time. */
96
96
  TagsIndexPageView: (props: {
97
97
  locale: string;
98
- children?: ComponentChildren;
98
+ children?: Child;
99
99
  }) => JSX.Element;
100
100
  }
101
101
  /**
@@ -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 { DocLayoutWithDefaults } from "../doclayout/index.js";
3
3
  import { DocCardGrid, TagNav } from "../nav-indexing/index.js";
4
4
  import { memoizeDerived } from "../nav-source-cache/index.js";
@@ -76,16 +76,16 @@ function createTagPages(ctx) {
76
76
  const cardItems = tagInfo.docs.map((doc) => ({
77
77
  href: docsUrl(doc.slug, locale),
78
78
  title: doc.title,
79
- description: doc.description
79
+ ...doc.description !== void 0 ? { description: doc.description } : {}
80
80
  }));
81
81
  return /* @__PURE__ */ jsxs(
82
82
  DocLayoutWithDefaults,
83
83
  {
84
84
  title: composeMetaTitle(pageTitle),
85
85
  head: /* @__PURE__ */ jsx(HeadWithDefaults, { title: pageTitle }),
86
- lang: isDefault ? void 0 : locale,
87
- dataThemePack,
88
- noindex: settings.noindex,
86
+ ...isDefault ? {} : { lang: locale },
87
+ ...dataThemePack !== void 0 ? { dataThemePack } : {},
88
+ ...settings.noindex !== void 0 ? { noindex: settings.noindex } : {},
89
89
  hideSidebar: true,
90
90
  hideToc: true,
91
91
  sidebarOverride: /* @__PURE__ */ jsx(Fragment, {}),
@@ -93,7 +93,7 @@ function createTagPages(ctx) {
93
93
  breadcrumbOverride: /* @__PURE__ */ jsx(Breadcrumb, { items: breadcrumbItems }),
94
94
  footerOverride: /* @__PURE__ */ jsx(FooterWithDefaults, { lang: locale }),
95
95
  bodyEndComponents: /* @__PURE__ */ jsx(BodyEndIslands, { basePath: settings.base ?? "/" }),
96
- enableClientRouter: settings.dynamicPageTransition,
96
+ ...settings.dynamicPageTransition !== void 0 ? { enableClientRouter: settings.dynamicPageTransition } : {},
97
97
  children: [
98
98
  /* @__PURE__ */ jsx("h1", { class: "text-heading font-bold mb-vsp-xs break-words", children: pageTitle }),
99
99
  /* @__PURE__ */ jsx("p", { class: "text-muted mb-vsp-lg", children: countText }),
@@ -127,9 +127,9 @@ function createTagPages(ctx) {
127
127
  {
128
128
  title: composeMetaTitle(pageTitle),
129
129
  head: /* @__PURE__ */ jsx(HeadWithDefaults, { title: pageTitle }),
130
- lang: isDefault ? void 0 : locale,
131
- dataThemePack,
132
- noindex: settings.noindex,
130
+ ...isDefault ? {} : { lang: locale },
131
+ ...dataThemePack !== void 0 ? { dataThemePack } : {},
132
+ ...settings.noindex !== void 0 ? { noindex: settings.noindex } : {},
133
133
  hideSidebar: true,
134
134
  hideToc: true,
135
135
  sidebarOverride: /* @__PURE__ */ jsx(Fragment, {}),
@@ -137,7 +137,7 @@ function createTagPages(ctx) {
137
137
  breadcrumbOverride: /* @__PURE__ */ jsx(Breadcrumb, { items: breadcrumbItems }),
138
138
  footerOverride: /* @__PURE__ */ jsx(FooterWithDefaults, { lang: locale }),
139
139
  bodyEndComponents: /* @__PURE__ */ jsx(BodyEndIslands, { basePath: settings.base ?? "/" }),
140
- enableClientRouter: settings.dynamicPageTransition,
140
+ ...settings.dynamicPageTransition !== void 0 ? { enableClientRouter: settings.dynamicPageTransition } : {},
141
141
  children: [
142
142
  /* @__PURE__ */ jsx("h1", { class: "text-heading font-bold mb-vsp-lg break-words", children: pageTitle }),
143
143
  !settings.docTags || tags.length === 0 ? /* @__PURE__ */ jsx("p", { class: "text-muted", children: t("doc.noTags", locale) }) : /* @__PURE__ */ jsx(TagNav, { variant: "all", tags, labels }),
@@ -1,4 +1,4 @@
1
- import type { ComponentChildren } from "preact";
1
+ import type { Child } from "@takazudo/zfb/zudo-react";
2
2
  /**
3
3
  * Subset of the host's `ColorModeConfig` that the v2 provider actually
4
4
  * consumes. Kept locally so the v2 package does not need to import a host
@@ -22,6 +22,6 @@ export interface ColorSchemeProviderProps {
22
22
  */
23
23
  colorMode: ColorSchemeProviderColorMode | null;
24
24
  /** Optional children; preserved for forward compatibility. */
25
- children?: ComponentChildren;
25
+ children?: Child;
26
26
  }
27
- export default function ColorSchemeProvider({ cssText, colorMode, }: ColorSchemeProviderProps): import("preact").JSX.Element;
27
+ export default function ColorSchemeProvider({ cssText, colorMode, }: ColorSchemeProviderProps): import("@takazudo/zfb").Description;
@@ -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 { AFTER_NAVIGATE_EVENT } from "../transitions/page-events.js";
3
3
  import {
4
4
  COLOR_SCHEME_CHANGED_EVENT,
@@ -56,8 +56,8 @@ function ColorSchemeProvider({
56
56
  Boolean(colorMode.respectPrefersColorScheme)
57
57
  ) : null;
58
58
  return /* @__PURE__ */ jsxs(Fragment, { children: [
59
- /* @__PURE__ */ jsx("style", { dangerouslySetInnerHTML: { __html: cssText } }),
60
- bootstrap !== null && /* @__PURE__ */ jsx("script", { dangerouslySetInnerHTML: { __html: bootstrap } })
59
+ /* @__PURE__ */ jsx("style", { rawHtml: cssText }),
60
+ bootstrap !== null && /* @__PURE__ */ jsx("script", { rawHtml: bootstrap })
61
61
  ] });
62
62
  }
63
63
  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 { ThemePackRegistry } from "../theme-packs-registry/index.js";
3
3
  /**
4
4
  * Transient `<html>` attribute the bootstrap sets while the pack stylesheet
@@ -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
  AFTER_NAVIGATE_EVENT,
4
4
  BEFORE_SWAP_EVENT
@@ -105,8 +105,8 @@ function ThemePackProvider({
105
105
  const configuredVersion = enabled[configuredSlug];
106
106
  const noscriptHref = configuredSlug !== DEFAULT_THEME_PACK_SLUG && configuredVersion !== void 0 ? buildPackCssUrl(base, configuredSlug, configuredVersion) : null;
107
107
  return /* @__PURE__ */ jsxs(Fragment, { children: [
108
- /* @__PURE__ */ jsx("style", { dangerouslySetInnerHTML: { __html: THEME_PACK_LATCH_CSS } }),
109
- /* @__PURE__ */ jsx("script", { dangerouslySetInnerHTML: { __html: bootstrap } }),
108
+ /* @__PURE__ */ jsx("style", { rawHtml: THEME_PACK_LATCH_CSS }),
109
+ /* @__PURE__ */ jsx("script", { rawHtml: bootstrap }),
110
110
  noscriptHref !== null && /* @__PURE__ */ jsx("noscript", { children: /* @__PURE__ */ jsx("link", { rel: "stylesheet", href: noscriptHref }) })
111
111
  ] });
112
112
  }
@@ -1,6 +1,5 @@
1
1
  /** @jsxRuntime automatic */
2
- /** @jsxImportSource preact */
3
- import type { VNode } from "preact";
2
+ import type { Description } from "@takazudo/zfb/zudo-react";
4
3
  import { type ThemeToggleProps } from "../theme-toggle/index.js";
5
4
  /**
6
5
  * Default-export appearance menu for theme preference. Wraps the bare
@@ -10,4 +9,4 @@ import { type ThemeToggleProps } from "../theme-toggle/index.js";
10
9
  * want to control hydration timing themselves) should import the bare
11
10
  * component from `@takazudo/zudo-doc/theme-toggle` instead.
12
11
  */
13
- export default function ThemeToggle(props?: ThemeToggleProps): VNode;
12
+ export default function ThemeToggle(props?: ThemeToggleProps): Description;
@@ -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 {
4
4
  ThemeToggle as ThemeToggleBare
@@ -1,5 +1,5 @@
1
1
  import type { ThemePackDialogProps } from "../theme-pack-switcher/index.js";
2
- export declare function ThemePackDialog({ open, onClose, order, active, base }: ThemePackDialogProps): import("preact").JSX.Element;
2
+ export declare function ThemePackDialog({ open, onClose, order, active, base }: ThemePackDialogProps): import("@takazudo/zfb").Description;
3
3
  export declare namespace ThemePackDialog {
4
4
  var displayName: string;
5
5
  }
@@ -1,69 +1,70 @@
1
1
  "use client";
2
- import { Fragment, jsx, jsxs } from "preact/jsx-runtime";
3
- import { useCallback, useEffect, useRef, useState } from "preact/compat";
2
+ import { Fragment, jsx, jsxs } from "@takazudo/zfb/zudo-react/jsx-runtime";
3
+ import { computed, For, getScope, Show, signal } from "@takazudo/zfb/zudo-react";
4
4
  import { Close } from "../icons/index.js";
5
5
  import { AFTER_NAVIGATE_EVENT } from "../transitions/index.js";
6
6
  import { applyThemePack, DEFAULT_THEME_PACK_SLUG } from "../theme-pack-switcher/theme-pack-sync.js";
7
7
  import { connectActivePackSync } from "../theme-pack-switcher/switcher-state.js";
8
- import { useModalDialog } from "../use-modal-dialog/index.js";
8
+ import { modalDialog } from "../use-modal-dialog/index.js";
9
9
  import { parseThemePackRegistryPayload, resolveDialogMode } from "./dialog-state.js";
10
10
  import { ThemePackCard } from "./theme-pack-card.js";
11
11
  const COLOR_SCHEME_CHANGED_EVENT = "color-scheme-changed";
12
12
  const LAUNCHER_SELECTOR = "[data-switcher-launcher]";
13
13
  function ThemePackDialog({ open, onClose, order, active, base }) {
14
- const [registryState, setRegistryState] = useState("idle");
15
- const [packs, setPacks] = useState(null);
16
- const [mode, setMode] = useState(
17
- () => typeof document === "undefined" ? "light" : resolveDialogMode(document.documentElement.getAttribute("data-theme"))
18
- );
19
- const [activeSlug, setActiveSlug] = useState(active);
20
- const launcherFocusRef = useRef(null);
14
+ const scope = getScope();
15
+ const registryState = signal("idle");
16
+ const packs = signal(null);
17
+ const mode = signal("light");
18
+ const activeSlug = signal(active);
19
+ const retryToken = signal(0);
20
+ const launcherFocusRef = { current: null };
21
21
  const hasBrowsablePacks = order.some((entry) => entry.slug !== DEFAULT_THEME_PACK_SLUG);
22
- useEffect(() => connectActivePackSync(setActiveSlug), []);
23
- useEffect(() => {
24
- function sync() {
25
- setMode(resolveDialogMode(document.documentElement.getAttribute("data-theme")));
26
- }
22
+ scope.onActivate(() => connectActivePackSync((slug) => {
23
+ activeSlug.value = slug;
24
+ }));
25
+ scope.onActivate(() => {
26
+ const sync = () => {
27
+ mode.value = resolveDialogMode(document.documentElement.getAttribute("data-theme"));
28
+ };
29
+ sync();
27
30
  window.addEventListener(COLOR_SCHEME_CHANGED_EVENT, sync);
28
31
  return () => window.removeEventListener(COLOR_SCHEME_CHANGED_EVENT, sync);
29
- }, []);
30
- useEffect(() => {
31
- if (!open) return;
32
- launcherFocusRef.current = document.querySelector(LAUNCHER_SELECTOR);
33
- }, [open]);
34
- const hasOpenedRef = useRef(false);
35
- const [fetchToken, setFetchToken] = useState(0);
36
- useEffect(() => {
37
- if (open && !hasOpenedRef.current) {
38
- hasOpenedRef.current = true;
39
- if (hasBrowsablePacks) setFetchToken((t) => t + 1);
40
- }
41
- }, [open, hasBrowsablePacks]);
42
- useEffect(() => {
43
- if (fetchToken === 0) return;
44
- let cancelled = false;
45
- setRegistryState("loading");
46
- fetch(`${base}theme-packs/index.json`).then((res) => {
32
+ });
33
+ scope.effect(() => {
34
+ if (open.value) launcherFocusRef.current = document.querySelector(LAUNCHER_SELECTOR);
35
+ });
36
+ scope.effect(() => {
37
+ if (!open.value || !hasBrowsablePacks || packs.value !== null) return;
38
+ retryToken.value;
39
+ const controller = new AbortController();
40
+ const abortFromScope = () => controller.abort();
41
+ scope.abortSignal.addEventListener("abort", abortFromScope, { once: true });
42
+ registryState.value = "loading";
43
+ void fetch(`${base}theme-packs/index.json`, { signal: controller.signal }).then((res) => {
47
44
  if (!res.ok) throw new Error(`theme-packs/index.json responded ${res.status}`);
48
45
  return res.json();
49
46
  }).then((data) => {
50
- if (cancelled) return;
47
+ if (controller.signal.aborted || scope.abortSignal.aborted) return;
51
48
  const parsed = parseThemePackRegistryPayload(data);
52
49
  if (parsed === null) {
53
- setRegistryState("error");
50
+ registryState.value = "error";
54
51
  return;
55
52
  }
56
- setPacks(parsed);
57
- setRegistryState("loaded");
53
+ packs.value = parsed;
54
+ registryState.value = "loaded";
58
55
  }).catch(() => {
59
- if (!cancelled) setRegistryState("error");
56
+ if (!controller.signal.aborted && !scope.abortSignal.aborted) registryState.value = "error";
60
57
  });
61
58
  return () => {
62
- cancelled = true;
59
+ controller.abort();
60
+ scope.abortSignal.removeEventListener("abort", abortFromScope);
61
+ if (registryState.value === "loading") registryState.value = "idle";
63
62
  };
64
- }, [fetchToken, base]);
65
- const retry = useCallback(() => setFetchToken((t) => t + 1), []);
66
- const { dialogRef, handleBackdropClick } = useModalDialog({
63
+ });
64
+ const retry = () => {
65
+ retryToken.value++;
66
+ };
67
+ const { dialogRef, handleBackdropClick } = modalDialog(scope, {
67
68
  isOpen: open,
68
69
  onClose,
69
70
  navigateEvent: AFTER_NAVIGATE_EVENT,
@@ -75,72 +76,65 @@ function ThemePackDialog({ open, onClose, order, active, base }) {
75
76
  "dialog",
76
77
  {
77
78
  ref: dialogRef,
78
- onClick: handleBackdropClick,
79
+ "on:click": handleBackdropClick,
79
80
  "aria-labelledby": "zd-theme-pack-dialog-title",
80
- className: "z-modal m-auto max-h-[85vh] w-[calc(100vw-2rem)] max-w-[64rem] rounded-lg border border-muted bg-surface p-0 text-fg backdrop:z-modal-backdrop backdrop:bg-bg/80",
81
- children: /* @__PURE__ */ jsxs("div", { className: "flex max-h-[85vh] flex-col", children: [
82
- /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center justify-between gap-hsp-sm border-b border-muted px-hsp-lg py-vsp-sm", children: [
83
- /* @__PURE__ */ jsx("h2", { id: "zd-theme-pack-dialog-title", className: "text-title font-bold text-fg", children: "Preview theme" }),
81
+ class: "z-modal m-auto max-h-[85vh] w-[calc(100vw_-_2rem)] max-w-[64rem] rounded-lg border border-muted bg-surface p-0 text-fg backdrop:z-modal-backdrop backdrop:bg-bg/80",
82
+ children: /* @__PURE__ */ jsxs("div", { class: "flex max-h-[85vh] flex-col", children: [
83
+ /* @__PURE__ */ jsxs("div", { class: "flex shrink-0 items-center justify-between gap-hsp-sm border-b border-muted px-hsp-lg py-vsp-sm", children: [
84
+ /* @__PURE__ */ jsx("h2", { id: "zd-theme-pack-dialog-title", class: "text-title font-bold text-fg", children: "Preview theme" }),
84
85
  /* @__PURE__ */ jsx(
85
86
  "button",
86
87
  {
87
88
  type: "button",
88
- onClick: () => dialogRef.current?.close(),
89
+ "on:click": () => dialogRef.current?.close(),
89
90
  "aria-label": "Close",
90
- className: "flex items-center justify-center text-muted transition-colors hover:text-fg",
91
- children: /* @__PURE__ */ jsx(Close, { className: "h-icon-sm w-icon-sm" })
91
+ class: "flex items-center justify-center text-muted transition-colors duration-0 hover:text-fg",
92
+ children: /* @__PURE__ */ jsx(Close, { class: "h-icon-sm w-icon-sm" })
92
93
  }
93
94
  )
94
95
  ] }),
95
- /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-y-auto overscroll-contain px-hsp-lg py-vsp-lg", children: !hasBrowsablePacks ? /* @__PURE__ */ jsx("p", { className: "py-vsp-xl text-center text-small text-muted", children: "No other theme packs are configured \u2014 only the default look is available." }) : /* @__PURE__ */ jsxs(Fragment, { children: [
96
- registryState === "error" && /* @__PURE__ */ jsxs(
96
+ /* @__PURE__ */ jsx("div", { class: "min-h-0 flex-1 overflow-y-auto overscroll-contain px-hsp-lg py-vsp-lg", children: !hasBrowsablePacks ? /* @__PURE__ */ jsx("p", { class: "py-vsp-xl text-center text-small text-muted", children: "No other theme packs are configured \u2014 only the default look is available." }) : /* @__PURE__ */ jsxs(Fragment, { children: [
97
+ /* @__PURE__ */ jsx(Show, { when: computed(() => registryState.value === "error"), children: () => /* @__PURE__ */ jsxs(
97
98
  "div",
98
99
  {
99
100
  role: "alert",
100
- className: "mx-auto flex max-w-sm flex-col items-center gap-vsp-xs rounded-[0.75rem] border border-danger bg-bg px-hsp-lg py-vsp-lg text-center text-small text-danger",
101
+ class: "mx-auto flex flex-col items-center gap-vsp-xs rounded-[0.75rem] border border-danger bg-bg px-hsp-lg py-vsp-lg text-center text-small text-danger",
101
102
  children: [
102
103
  /* @__PURE__ */ jsx("p", { children: "Could not load theme previews." }),
103
104
  /* @__PURE__ */ jsx(
104
105
  "button",
105
106
  {
106
107
  type: "button",
107
- onClick: retry,
108
- className: "rounded border border-danger px-hsp-md py-hsp-2xs text-caption text-danger transition-colors hover:bg-danger/10",
108
+ "on:click": retry,
109
+ class: "rounded border border-danger px-hsp-md py-hsp-2xs text-caption text-danger transition-colors hover:bg-danger/10",
109
110
  children: "Retry"
110
111
  }
111
112
  )
112
113
  ]
113
114
  }
114
- ),
115
- (registryState === "idle" || registryState === "loading") && /* @__PURE__ */ jsxs(Fragment, { children: [
116
- /* @__PURE__ */ jsx("p", { role: "status", className: "sr-only", children: "Loading theme previews\u2026" }),
115
+ ) }),
116
+ /* @__PURE__ */ jsx(Show, { when: computed(() => registryState.value === "idle" || registryState.value === "loading"), children: () => /* @__PURE__ */ jsxs(Fragment, { children: [
117
+ /* @__PURE__ */ jsx("p", { role: "status", class: "sr-only", children: "Loading theme previews\u2026" }),
117
118
  /* @__PURE__ */ jsx(
118
119
  "div",
119
120
  {
120
121
  "aria-hidden": "true",
121
- className: "grid grid-cols-1 gap-hsp-lg sm:grid-cols-2 lg:grid-cols-3",
122
- children: order.map((entry) => /* @__PURE__ */ jsx(
123
- "div",
124
- {
125
- className: "h-[10rem] animate-pulse rounded-lg border border-muted bg-surface/50"
126
- },
127
- entry.slug
128
- ))
122
+ class: "grid grid-cols-1 gap-hsp-lg sm:grid-cols-2 lg:grid-cols-3",
123
+ children: /* @__PURE__ */ jsx(For, { each: computed(() => order), by: (entry) => entry.slug, children: () => /* @__PURE__ */ jsx("div", { class: "h-[10rem] rounded-lg border border-muted bg-surface/50" }) })
129
124
  }
130
125
  )
131
- ] }),
132
- packs !== null && /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-hsp-lg sm:grid-cols-2 lg:grid-cols-3", children: packs.map((meta) => /* @__PURE__ */ jsx(
126
+ ] }) }),
127
+ /* @__PURE__ */ jsx(Show, { when: computed(() => packs.value !== null), children: () => /* @__PURE__ */ jsx("div", { class: "grid grid-cols-1 gap-hsp-lg sm:grid-cols-2 lg:grid-cols-3", children: /* @__PURE__ */ jsx(For, { each: computed(() => (packs.value ?? []).map((meta) => ({ meta, key: `${meta.slug}:${mode.value}` }))), by: (item) => item.key, children: (item) => /* @__PURE__ */ jsx(
133
128
  ThemePackCard,
134
129
  {
135
- meta,
136
- mode,
137
- isActive: meta.slug === activeSlug,
130
+ meta: item.value.meta,
131
+ mode: mode.value,
132
+ isActive: computed(() => item.value.meta.slug === activeSlug.value),
138
133
  onSelect: () => {
139
- void applyThemePack(meta.slug);
134
+ void applyThemePack(item.value.meta.slug);
140
135
  }
141
- },
142
- meta.slug
143
- )) })
136
+ }
137
+ ) }) }) })
144
138
  ] }) })
145
139
  ] })
146
140
  }
@@ -1,6 +1,5 @@
1
1
  /** @jsxRuntime automatic */
2
- /** @jsxImportSource preact */
3
- import type { VNode } from "preact";
2
+ import { type Child, type ReadonlySignal } from "@takazudo/zfb/zudo-react";
4
3
  import type { ThemePackMeta } from "../theme-packs-registry/index.js";
5
4
  export interface ThemePackCardProps {
6
5
  /** Full pack meta (incl. resolved preview swatches) for one registry entry. */
@@ -10,7 +9,7 @@ export interface ThemePackCardProps {
10
9
  * badge shown alongside the name). */
11
10
  mode: "light" | "dark";
12
11
  /** Whether this card's pack is the currently active one (selected ring). */
13
- isActive: boolean;
12
+ isActive: boolean | ReadonlySignal<boolean>;
14
13
  /** Apply this pack — the caller wires this to `applyThemePack(meta.slug)`;
15
14
  * this component stays a plain presentational click forwarder. */
16
15
  onSelect: () => void;
@@ -22,4 +21,4 @@ export interface ThemePackCardProps {
22
21
  * — ADR Decision 7 — so the selected ring is driven by `isActive`, not by
23
22
  * the click itself).
24
23
  */
25
- export declare function ThemePackCard({ meta, mode, isActive, onSelect }: ThemePackCardProps): VNode;
24
+ export declare function ThemePackCard({ meta, mode, isActive, onSelect }: ThemePackCardProps): Child;
@@ -1,39 +1,41 @@
1
- import { jsx, jsxs } from "preact/jsx-runtime";
1
+ import { jsx, jsxs } from "@takazudo/zfb/zudo-react/jsx-runtime";
2
+ import { computed } from "@takazudo/zfb/zudo-react";
2
3
  function ThemePackCard({ meta, mode, isActive, onSelect }) {
3
4
  const swatches = meta.preview[mode];
5
+ const selected = computed(() => typeof isActive === "boolean" ? isActive : isActive.value);
4
6
  const fontCaption = meta.fonts.display ?? meta.fonts.sans;
5
7
  return /* @__PURE__ */ jsxs(
6
8
  "button",
7
9
  {
8
10
  type: "button",
9
- onClick: onSelect,
10
- "aria-pressed": isActive,
11
+ "on:click": onSelect,
12
+ "aria-pressed": selected,
11
13
  "aria-label": `Apply ${meta.name} theme pack \u2014 ${meta.mode === "dark" ? "Dark" : "Light"}. ${meta.description}`,
12
- className: `flex flex-col gap-vsp-2xs rounded-lg border p-hsp-sm text-left transition-colors focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2 ${isActive ? "border-accent ring-2 ring-accent" : "border-muted hover:border-accent"}`,
14
+ class: computed(() => `flex flex-col gap-vsp-2xs rounded-lg border p-hsp-sm text-left transition-colors duration-0 focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2 ${selected.value ? "border-accent zd-theme-pack-active-ring" : "border-muted hover:border-accent"}`),
13
15
  children: [
14
16
  /* @__PURE__ */ jsxs(
15
17
  "div",
16
18
  {
17
19
  "aria-hidden": "true",
18
- className: "flex flex-col gap-vsp-3xs rounded-md border p-hsp-sm",
20
+ class: "flex flex-col gap-vsp-3xs border p-hsp-sm",
19
21
  style: {
20
- backgroundColor: swatches.bg,
22
+ "background-color": swatches.bg,
21
23
  color: swatches.fg,
22
- borderColor: `color-mix(in oklch, ${swatches.fg} 15%, transparent)`
24
+ "border-color": `color-mix(in oklch, ${swatches.fg} 15%, transparent)`
23
25
  },
24
26
  children: [
25
- /* @__PURE__ */ jsx("p", { className: "text-title font-bold", children: "Aa Heading" }),
26
- /* @__PURE__ */ jsxs("p", { className: "text-small", children: [
27
+ /* @__PURE__ */ jsx("p", { class: "text-title font-bold", children: "Aa Heading" }),
28
+ /* @__PURE__ */ jsxs("p", { class: "text-small", children: [
27
29
  "The quick brown fox jumps over",
28
30
  " ",
29
- /* @__PURE__ */ jsx("span", { className: "underline", style: { color: swatches.accent }, children: "the lazy dog" }),
31
+ /* @__PURE__ */ jsx("span", { class: "underline", style: { color: swatches.accent }, children: "the lazy dog" }),
30
32
  "."
31
33
  ] }),
32
34
  /* @__PURE__ */ jsxs(
33
35
  "p",
34
36
  {
35
- className: "rounded px-hsp-2xs py-hsp-3xs font-mono text-caption",
36
- style: { backgroundColor: `color-mix(in oklch, ${swatches.fg} 8%, transparent)` },
37
+ class: "rounded px-hsp-2xs font-mono text-caption",
38
+ style: { "background-color": `color-mix(in oklch, ${swatches.fg} 8%, transparent)` },
37
39
  children: [
38
40
  /* @__PURE__ */ jsx("span", { style: { color: swatches.syntax.keyword }, children: "const" }),
39
41
  " ",
@@ -57,12 +59,12 @@ function ThemePackCard({ meta, mode, isActive, onSelect }) {
57
59
  ]
58
60
  }
59
61
  ),
60
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-hsp-sm", children: [
61
- /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate text-body font-bold text-fg", children: meta.name }),
62
- /* @__PURE__ */ jsx("span", { className: "shrink-0 rounded-full border border-muted px-hsp-sm text-micro tracking-wide text-muted uppercase", children: meta.mode === "dark" ? "Dark" : "Light" })
62
+ /* @__PURE__ */ jsxs("div", { class: "flex items-center justify-between gap-hsp-sm", children: [
63
+ /* @__PURE__ */ jsx("span", { class: "min-w-0 truncate text-body font-bold text-fg", children: meta.name }),
64
+ /* @__PURE__ */ jsx("span", { class: "shrink-0 rounded-full border border-muted px-hsp-sm text-micro tracking-wide text-muted uppercase", children: meta.mode === "dark" ? "Dark" : "Light" })
63
65
  ] }),
64
- /* @__PURE__ */ jsx("p", { className: "text-caption text-muted", children: meta.description }),
65
- /* @__PURE__ */ jsx("p", { className: "text-micro text-muted", children: fontCaption })
66
+ /* @__PURE__ */ jsx("p", { class: "text-caption text-muted", children: meta.description }),
67
+ /* @__PURE__ */ jsx("p", { class: "text-micro text-muted", children: fontCaption })
66
68
  ]
67
69
  }
68
70
  );
@@ -1,6 +1,5 @@
1
1
  /** @jsxRuntime automatic */
2
- /** @jsxImportSource preact */
3
- import type { JSX } from "preact";
2
+ import { type Component, type Child, type ReadonlySignal } from "@takazudo/zfb/zudo-react";
4
3
  import { type ThemePackOrderEntry } from "./switcher-state.js";
5
4
  export type { ThemePackOrderEntry } from "./switcher-state.js";
6
5
  /**
@@ -27,7 +26,7 @@ export interface ThemePackSwitcherProps {
27
26
  * via `applyThemePack(slug)` and the dialog stays open (ADR Decision 7). */
28
27
  export interface ThemePackDialogProps {
29
28
  /** Whether the dialog is currently open. */
30
- open: boolean;
29
+ open: ReadonlySignal<boolean>;
31
30
  /** Close callback (Esc / ✕ / backdrop — the dialog's own close paths). */
32
31
  onClose: () => void;
33
32
  /** The switcher order — also the dialog grid order. */
@@ -38,14 +37,14 @@ export interface ThemePackDialogProps {
38
37
  base: string;
39
38
  }
40
39
  /** The browse-all dialog component contract (#2825). */
41
- export type ThemePackDialogComponent = (props: ThemePackDialogProps) => JSX.Element | null;
40
+ export type ThemePackDialogComponent = Component<ThemePackDialogProps>;
42
41
  /**
43
42
  * The bottom-right theme-pack switcher flyout. Mounted (settings-gated on
44
43
  * `themePackSwitcher`) by the package body-end islands via
45
44
  * `Island({ when: "load" })` — see
46
45
  * `../doc-body-end-islands/theme-pack-switcher-island.tsx`.
47
46
  */
48
- export declare function ThemePackSwitcher({ active, order, base, pendingUntilHydrated, }: ThemePackSwitcherProps): JSX.Element;
47
+ export declare function ThemePackSwitcher({ active, order, base, pendingUntilHydrated, }: ThemePackSwitcherProps): Child;
49
48
  export declare namespace ThemePackSwitcher {
50
49
  var displayName: string;
51
50
  }