@takazudo/zudo-doc 3.2.0 → 4.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 (439) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/README.md +2 -2
  3. package/bin/tag-cli-config.ts +126 -0
  4. package/bin/tags-audit-runner.ts +60 -76
  5. package/bin/tags-audit.mjs +17 -36
  6. package/bin/tags-suggest-runner.ts +429 -0
  7. package/bin/tags-suggest.mjs +30 -0
  8. package/bin/zudo-doc.mjs +78 -25
  9. package/dist/breadcrumb/breadcrumb.d.ts +4 -4
  10. package/dist/breadcrumb/find-path.d.ts +2 -2
  11. package/dist/breadcrumb/index.d.ts +1 -1
  12. package/dist/breadcrumb/types.d.ts +0 -5
  13. package/dist/chrome/derive.d.ts +16 -4
  14. package/dist/chrome/derive.js +64 -4
  15. package/dist/chrome/index.d.ts +13 -10
  16. package/dist/chrome/index.js +12 -6
  17. package/dist/chrome/primary-slots.d.ts +21 -0
  18. package/dist/chrome/primary-slots.js +59 -0
  19. package/dist/chrome-bindings.d.ts +227 -0
  20. package/dist/chrome-bindings.js +6 -0
  21. package/dist/code-syntax/code-block-enhancer-script.d.ts +4 -0
  22. package/dist/code-syntax/code-block-enhancer-script.js +7 -4
  23. package/dist/code-syntax/code-block-enhancer.d.ts +2 -2
  24. package/dist/code-syntax/code-block-enhancer.js +1 -3
  25. package/dist/code-syntax/index.d.ts +5 -5
  26. package/dist/code-syntax/index.js +4 -13
  27. package/dist/code-syntax/mermaid-init-script.d.ts +1 -22
  28. package/dist/code-syntax/mermaid-init-script.js +0 -2
  29. package/dist/code-syntax/mermaid-init.d.ts +0 -1
  30. package/dist/code-syntax/mermaid-init.js +3 -4
  31. package/dist/code-syntax/tabs-init.d.ts +0 -1
  32. package/dist/code-syntax/tabs-init.js +1 -3
  33. package/dist/code-syntax/tabs.d.ts +0 -1
  34. package/dist/code-syntax/tabs.js +1 -3
  35. package/dist/color-scheme-utils.d.ts +72 -4
  36. package/dist/color-scheme-utils.js +137 -0
  37. package/dist/color-schemes-defaults/index.d.ts +23 -0
  38. package/dist/color-schemes-defaults/index.js +134 -0
  39. package/dist/config.d.ts +459 -0
  40. package/dist/config.js +125 -0
  41. package/dist/content/component-map.d.ts +0 -16
  42. package/dist/content/component-map.js +2 -4
  43. package/dist/content/index.d.ts +1 -1
  44. package/dist/content/index.js +2 -3
  45. package/dist/content.css +1 -1
  46. package/dist/design-token-panel-bootstrap.d.ts +82 -27
  47. package/dist/design-token-panel-bootstrap.js +110 -21
  48. package/dist/design-token-panel-config/index.d.ts +49 -0
  49. package/dist/design-token-panel-config/index.js +211 -0
  50. package/dist/design-token-panel-config/manifest.d.ts +46 -0
  51. package/dist/design-token-panel-config/manifest.js +105 -0
  52. package/dist/directive-vocabulary-defaults/index.d.ts +16 -0
  53. package/dist/directive-vocabulary-defaults/index.js +12 -0
  54. package/dist/doc-body-end-islands/design-token-panel-island.d.ts +15 -0
  55. package/dist/doc-body-end-islands/design-token-panel-island.js +31 -0
  56. package/dist/doc-body-end-islands/index.d.ts +52 -7
  57. package/dist/doc-body-end-islands/index.js +19 -0
  58. package/dist/doc-body-end-islands/theme-pack-switcher-island.d.ts +37 -0
  59. package/dist/doc-body-end-islands/theme-pack-switcher-island.js +18 -0
  60. package/dist/doc-content-header/index.js +1 -1
  61. package/dist/doc-history-area/index.d.ts +10 -4
  62. package/dist/doc-history-area/index.js +3 -2
  63. package/dist/doc-metainfo-area/index.d.ts +1 -0
  64. package/dist/doc-page-props/index.d.ts +7 -23
  65. package/dist/doc-page-renderer/index.d.ts +1 -0
  66. package/dist/doc-page-renderer/index.js +1 -0
  67. package/dist/doc-page-shell/index.js +19 -12
  68. package/dist/doc-pager/index.js +1 -1
  69. package/dist/doc-route-entries/index.d.ts +2 -2
  70. package/dist/doclayout/doc-layout-with-defaults.js +4 -4
  71. package/dist/doclayout/doc-layout.d.ts +8 -0
  72. package/dist/doclayout/doc-layout.js +10 -1
  73. package/dist/docs-schema/index.d.ts +67 -0
  74. package/dist/docs-schema/index.js +43 -0
  75. package/dist/eject/index.d.ts +16 -0
  76. package/dist/eject/index.js +122 -28
  77. package/dist/extract-headings/index.d.ts +5 -8
  78. package/dist/extract-headings/index.js +2 -9
  79. package/dist/factory-context/index.d.ts +56 -4
  80. package/dist/features.css +65 -43
  81. package/dist/find-in-page/find-bar.d.ts +9 -0
  82. package/dist/find-in-page/find-bar.js +114 -0
  83. package/dist/find-in-page/find-in-page.d.ts +17 -0
  84. package/dist/find-in-page/find-in-page.js +131 -0
  85. package/dist/find-in-page/index.d.ts +11 -0
  86. package/dist/find-in-page/index.js +49 -0
  87. package/dist/footer/footer.js +1 -0
  88. package/dist/frontmatter-preview-defaults/index.d.ts +16 -0
  89. package/dist/frontmatter-preview-defaults/index.js +25 -0
  90. package/dist/head-with-defaults/index.d.ts +2 -0
  91. package/dist/head-with-defaults/index.js +16 -0
  92. package/dist/header/header.d.ts +10 -5
  93. package/dist/header/header.js +45 -5
  94. package/dist/header/index.d.ts +1 -1
  95. package/dist/header/types.d.ts +30 -1
  96. package/dist/header-with-defaults/index.js +1 -0
  97. package/dist/home-page/index.d.ts +2 -0
  98. package/dist/home-page/index.js +11 -5
  99. package/dist/home-page/prepare-home-data.js +1 -1
  100. package/dist/i18n-defaults/index.d.ts +22 -0
  101. package/dist/i18n-defaults/index.js +167 -0
  102. package/dist/locale-merge/index.d.ts +9 -14
  103. package/dist/locale-merge/index.js +6 -4
  104. package/dist/mdx-components/index.js +4 -4
  105. package/dist/plugins/claude-resources.d.ts +1 -0
  106. package/dist/plugins/claude-resources.js +4 -2
  107. package/dist/plugins/doc-history.js +1 -1
  108. package/dist/{integrations → plugins/internal}/claude-resources/index.d.ts +1 -16
  109. package/dist/{integrations → plugins/internal}/claude-resources/index.js +0 -9
  110. package/dist/{integrations → plugins/internal}/doc-history/index.d.ts +0 -17
  111. package/dist/{integrations → plugins/internal}/doc-history/index.js +0 -4
  112. package/dist/{integrations → plugins/internal}/doc-history/pre-build.d.ts +2 -4
  113. package/dist/plugins/internal/llms-txt/index.d.ts +7 -0
  114. package/dist/{integrations → plugins/internal}/llms-txt/load.d.ts +1 -1
  115. package/dist/{integrations → plugins/internal}/llms-txt/load.js +2 -2
  116. package/dist/{integrations → plugins/internal}/llms-txt/strip.d.ts +2 -3
  117. package/dist/{integrations → plugins/internal}/llms-txt/strip.js +1 -1
  118. package/dist/{integrations → plugins/internal}/llms-txt/types.d.ts +13 -22
  119. package/dist/{integrations → plugins/internal}/search-index/collect.js +1 -1
  120. package/dist/plugins/internal/theme-packs/copy.d.ts +32 -0
  121. package/dist/plugins/internal/theme-packs/copy.js +45 -0
  122. package/dist/plugins/internal/theme-packs/dev-middleware.d.ts +22 -0
  123. package/dist/plugins/internal/theme-packs/dev-middleware.js +80 -0
  124. package/dist/plugins/internal/theme-packs/index.d.ts +6 -0
  125. package/dist/plugins/internal/theme-packs/index.js +9 -0
  126. package/dist/plugins/internal/theme-packs/resolve.d.ts +17 -0
  127. package/dist/plugins/internal/theme-packs/resolve.js +17 -0
  128. package/dist/plugins/internal/theme-packs/types.d.ts +22 -0
  129. package/dist/plugins/internal/theme-packs/types.js +0 -0
  130. package/dist/plugins/llms-txt.js +1 -1
  131. package/dist/plugins/routes.js +55 -21
  132. package/dist/plugins/search-index.js +1 -1
  133. package/dist/plugins/theme-packs.d.ts +3 -0
  134. package/dist/plugins/theme-packs.js +40 -0
  135. package/dist/preset.d.ts +28 -14
  136. package/dist/preset.js +24 -9
  137. package/dist/route-context/index.js +4 -6
  138. package/dist/route-enumerators/index.d.ts +6 -18
  139. package/dist/route-enumerators/index.js +8 -6
  140. package/dist/routes/404.js +3 -1
  141. package/dist/routes/_chrome.js +3 -2
  142. package/dist/routes/_context.d.ts +7 -3
  143. package/dist/routes/_context.js +2 -0
  144. package/dist/routes/_docs-helpers.js +9 -21
  145. package/dist/safelist.css +1 -1
  146. package/dist/settings.d.ts +64 -12
  147. package/dist/sidebar-tree/build-tree.d.ts +3 -4
  148. package/dist/sidebar-tree/build-tree.js +4 -3
  149. package/dist/sidebar-tree/index.d.ts +2 -2
  150. package/dist/sidebar-tree/types.d.ts +6 -17
  151. package/dist/site-tree-nav-island/index.d.ts +3 -1
  152. package/dist/site-tree-nav-island/index.js +17 -5
  153. package/dist/site-tree-nav-island/state.d.ts +4 -0
  154. package/dist/site-tree-nav-island/state.js +10 -0
  155. package/dist/tag-helpers/index.d.ts +6 -13
  156. package/dist/tag-helpers/index.js +5 -23
  157. package/dist/tag-pages/index.d.ts +8 -21
  158. package/dist/tag-pages/index.js +14 -10
  159. package/dist/tags-audit.d.ts +16 -44
  160. package/dist/tags-audit.js +9 -172
  161. package/dist/theme/color-scheme-provider.d.ts +2 -3
  162. package/dist/theme/color-scheme-provider.js +2 -10
  163. package/dist/theme/index.d.ts +1 -4
  164. package/dist/theme/index.js +2 -30
  165. package/dist/theme/theme-pack-provider.d.ts +42 -0
  166. package/dist/theme/theme-pack-provider.js +75 -0
  167. package/dist/theme-cli/apply.d.ts +16 -0
  168. package/dist/theme-cli/apply.js +61 -0
  169. package/dist/theme-cli/config-io.d.ts +15 -0
  170. package/dist/theme-cli/config-io.js +51 -0
  171. package/dist/theme-cli/config-rewriter.d.ts +21 -0
  172. package/dist/theme-cli/config-rewriter.js +141 -0
  173. package/dist/theme-cli/config-scanner.d.ts +63 -0
  174. package/dist/theme-cli/config-scanner.js +288 -0
  175. package/dist/theme-cli/index.d.ts +7 -0
  176. package/dist/theme-cli/index.js +38 -0
  177. package/dist/theme-cli/list.d.ts +27 -0
  178. package/dist/theme-cli/list.js +64 -0
  179. package/dist/theme-cli/provenance.d.ts +17 -0
  180. package/dist/theme-cli/provenance.js +35 -0
  181. package/dist/theme-cli/registry.d.ts +14 -0
  182. package/dist/theme-cli/registry.js +13 -0
  183. package/dist/theme-pack-dialog/dialog-state.d.ts +25 -0
  184. package/dist/theme-pack-dialog/dialog-state.js +40 -0
  185. package/dist/theme-pack-dialog/index.d.ts +5 -0
  186. package/dist/theme-pack-dialog/index.js +152 -0
  187. package/dist/theme-pack-dialog/theme-pack-card.d.ts +25 -0
  188. package/dist/theme-pack-dialog/theme-pack-card.js +72 -0
  189. package/dist/theme-pack-switcher/index.d.ts +49 -0
  190. package/dist/theme-pack-switcher/index.js +205 -0
  191. package/dist/theme-pack-switcher/switcher-state.d.ts +56 -0
  192. package/dist/theme-pack-switcher/switcher-state.js +43 -0
  193. package/dist/theme-pack-switcher/theme-pack-sync.d.ts +85 -0
  194. package/dist/theme-pack-switcher/theme-pack-sync.js +121 -0
  195. package/dist/theme-packs/beacon/fonts/AtkinsonHyperlegible-400-latin.woff2 +0 -0
  196. package/dist/theme-packs/beacon/fonts/AtkinsonHyperlegible-700-latin.woff2 +0 -0
  197. package/dist/theme-packs/beacon/fonts/AtkinsonHyperlegible-italic-400-latin.woff2 +0 -0
  198. package/dist/theme-packs/beacon/fonts/AtkinsonHyperlegible-italic-700-latin.woff2 +0 -0
  199. package/dist/theme-packs/beacon/fonts/AtkinsonHyperlegibleMono-italic-latin.woff2 +0 -0
  200. package/dist/theme-packs/beacon/fonts/AtkinsonHyperlegibleMono-latin.woff2 +0 -0
  201. package/dist/theme-packs/beacon/fonts/OFL.txt +94 -0
  202. package/dist/theme-packs/beacon/meta.json +37 -0
  203. package/dist/theme-packs/beacon/pack.css +442 -0
  204. package/dist/theme-packs/broadsheet/fonts/CourierPrime-400-latin.woff2 +0 -0
  205. package/dist/theme-packs/broadsheet/fonts/CourierPrime-700-latin.woff2 +0 -0
  206. package/dist/theme-packs/broadsheet/fonts/OFL.txt +95 -0
  207. package/dist/theme-packs/broadsheet/fonts/PlayfairDisplay-italic-latin.woff2 +0 -0
  208. package/dist/theme-packs/broadsheet/fonts/PlayfairDisplay-latin.woff2 +0 -0
  209. package/dist/theme-packs/broadsheet/fonts/SourceSerif4-italic-latin.woff2 +0 -0
  210. package/dist/theme-packs/broadsheet/fonts/SourceSerif4-latin.woff2 +0 -0
  211. package/dist/theme-packs/broadsheet/meta.json +38 -0
  212. package/dist/theme-packs/broadsheet/pack.css +448 -0
  213. package/dist/theme-packs/brutalist/fonts/ArchivoBlack-latin.woff2 +0 -0
  214. package/dist/theme-packs/brutalist/fonts/IBMPlexMono-400-latin.woff2 +0 -0
  215. package/dist/theme-packs/brutalist/fonts/IBMPlexMono-500-latin.woff2 +0 -0
  216. package/dist/theme-packs/brutalist/fonts/IBMPlexMono-700-latin.woff2 +0 -0
  217. package/dist/theme-packs/brutalist/fonts/OFL.txt +95 -0
  218. package/dist/theme-packs/brutalist/fonts/SpaceGrotesk-latin.woff2 +0 -0
  219. package/dist/theme-packs/brutalist/meta.json +38 -0
  220. package/dist/theme-packs/brutalist/pack.css +546 -0
  221. package/dist/theme-packs/default/meta.json +37 -0
  222. package/dist/theme-packs/drift/fonts/IBMPlexMono-400-latin-ext.woff2 +0 -0
  223. package/dist/theme-packs/drift/fonts/IBMPlexMono-400-latin.woff2 +0 -0
  224. package/dist/theme-packs/drift/fonts/IBMPlexMono-500-latin-ext.woff2 +0 -0
  225. package/dist/theme-packs/drift/fonts/IBMPlexMono-500-latin.woff2 +0 -0
  226. package/dist/theme-packs/drift/fonts/IBMPlexSans-italic-latin.woff2 +0 -0
  227. package/dist/theme-packs/drift/fonts/IBMPlexSans-latin-ext.woff2 +0 -0
  228. package/dist/theme-packs/drift/fonts/IBMPlexSans-latin.woff2 +0 -0
  229. package/dist/theme-packs/drift/fonts/OFL.txt +93 -0
  230. package/dist/theme-packs/drift/meta.json +37 -0
  231. package/dist/theme-packs/drift/pack.css +478 -0
  232. package/dist/theme-packs/fjord/fonts/Inter-latin-ext.woff2 +0 -0
  233. package/dist/theme-packs/fjord/fonts/Inter-latin.woff2 +0 -0
  234. package/dist/theme-packs/fjord/fonts/JetBrainsMono-latin-ext.woff2 +0 -0
  235. package/dist/theme-packs/fjord/fonts/JetBrainsMono-latin.woff2 +0 -0
  236. package/dist/theme-packs/fjord/fonts/OFL.txt +94 -0
  237. package/dist/theme-packs/fjord/meta.json +37 -0
  238. package/dist/theme-packs/fjord/pack.css +375 -0
  239. package/dist/theme-packs/foundry/fonts/Inter-latin-ext.woff2 +0 -0
  240. package/dist/theme-packs/foundry/fonts/Inter-latin.woff2 +0 -0
  241. package/dist/theme-packs/foundry/fonts/OFL.txt +93 -0
  242. package/dist/theme-packs/foundry/meta.json +37 -0
  243. package/dist/theme-packs/foundry/pack.css +202 -0
  244. package/dist/theme-packs/futura-editorial/fonts/Jost-latin.woff2 +0 -0
  245. package/dist/theme-packs/futura-editorial/fonts/NotoSans-italic-latin.woff2 +0 -0
  246. package/dist/theme-packs/futura-editorial/fonts/NotoSans-latin.woff2 +0 -0
  247. package/dist/theme-packs/futura-editorial/fonts/OFL.txt +95 -0
  248. package/dist/theme-packs/futura-editorial/fonts/SpaceMono-400-latin.woff2 +0 -0
  249. package/dist/theme-packs/futura-editorial/fonts/SpaceMono-700-latin.woff2 +0 -0
  250. package/dist/theme-packs/futura-editorial/meta.json +38 -0
  251. package/dist/theme-packs/futura-editorial/pack.css +313 -0
  252. package/dist/theme-packs/hearth/fonts/Fraunces-italic-latin.woff2 +0 -0
  253. package/dist/theme-packs/hearth/fonts/Fraunces-latin.woff2 +0 -0
  254. package/dist/theme-packs/hearth/fonts/Nunito-latin.woff2 +0 -0
  255. package/dist/theme-packs/hearth/fonts/OFL.txt +95 -0
  256. package/dist/theme-packs/hearth/fonts/SplineSansMono-latin.woff2 +0 -0
  257. package/dist/theme-packs/hearth/meta.json +38 -0
  258. package/dist/theme-packs/hearth/pack.css +385 -0
  259. package/dist/theme-packs/hollow/fonts/OFL.txt +94 -0
  260. package/dist/theme-packs/hollow/fonts/SpaceGrotesk-latin.woff2 +0 -0
  261. package/dist/theme-packs/hollow/fonts/SpaceMono-400-italic-latin.woff2 +0 -0
  262. package/dist/theme-packs/hollow/fonts/SpaceMono-400-latin.woff2 +0 -0
  263. package/dist/theme-packs/hollow/fonts/SpaceMono-700-latin.woff2 +0 -0
  264. package/dist/theme-packs/hollow/meta.json +37 -0
  265. package/dist/theme-packs/hollow/pack.css +428 -0
  266. package/dist/theme-packs/ledger/fonts/CrimsonPro-latin-ext-italic.woff2 +0 -0
  267. package/dist/theme-packs/ledger/fonts/CrimsonPro-latin-ext.woff2 +0 -0
  268. package/dist/theme-packs/ledger/fonts/CrimsonPro-latin-italic.woff2 +0 -0
  269. package/dist/theme-packs/ledger/fonts/CrimsonPro-latin.woff2 +0 -0
  270. package/dist/theme-packs/ledger/fonts/IBMPlexMono-400-latin-ext.woff2 +0 -0
  271. package/dist/theme-packs/ledger/fonts/IBMPlexMono-400-latin.woff2 +0 -0
  272. package/dist/theme-packs/ledger/fonts/IBMPlexMono-500-latin-ext.woff2 +0 -0
  273. package/dist/theme-packs/ledger/fonts/IBMPlexMono-500-latin.woff2 +0 -0
  274. package/dist/theme-packs/ledger/fonts/OFL.txt +94 -0
  275. package/dist/theme-packs/ledger/meta.json +37 -0
  276. package/dist/theme-packs/ledger/pack.css +463 -0
  277. package/dist/theme-packs/manuscript/fonts/CourierPrime-400-latin-ext.woff2 +0 -0
  278. package/dist/theme-packs/manuscript/fonts/CourierPrime-400-latin.woff2 +0 -0
  279. package/dist/theme-packs/manuscript/fonts/CourierPrime-700-latin-ext.woff2 +0 -0
  280. package/dist/theme-packs/manuscript/fonts/CourierPrime-700-latin.woff2 +0 -0
  281. package/dist/theme-packs/manuscript/fonts/EBGaramond-latin-italic.woff2 +0 -0
  282. package/dist/theme-packs/manuscript/fonts/EBGaramond-latin.woff2 +0 -0
  283. package/dist/theme-packs/manuscript/fonts/OFL.txt +94 -0
  284. package/dist/theme-packs/manuscript/meta.json +37 -0
  285. package/dist/theme-packs/manuscript/pack.css +376 -0
  286. package/dist/theme-packs/matcha/fonts/MPLUS1Code-latin.woff2 +0 -0
  287. package/dist/theme-packs/matcha/fonts/OFL.txt +95 -0
  288. package/dist/theme-packs/matcha/fonts/ShipporiMincho-500-latin.woff2 +0 -0
  289. package/dist/theme-packs/matcha/fonts/ShipporiMincho-700-latin.woff2 +0 -0
  290. package/dist/theme-packs/matcha/fonts/ZenKakuGothicNew-400-latin.woff2 +0 -0
  291. package/dist/theme-packs/matcha/fonts/ZenKakuGothicNew-500-latin.woff2 +0 -0
  292. package/dist/theme-packs/matcha/meta.json +38 -0
  293. package/dist/theme-packs/matcha/pack.css +409 -0
  294. package/dist/theme-packs/nocturne/fonts/CormorantGaramond-italic-latin.woff2 +0 -0
  295. package/dist/theme-packs/nocturne/fonts/CormorantGaramond-latin.woff2 +0 -0
  296. package/dist/theme-packs/nocturne/fonts/IBMPlexMono-400-latin.woff2 +0 -0
  297. package/dist/theme-packs/nocturne/fonts/IBMPlexMono-500-latin.woff2 +0 -0
  298. package/dist/theme-packs/nocturne/fonts/IBMPlexMono-italic-latin.woff2 +0 -0
  299. package/dist/theme-packs/nocturne/fonts/Manrope-latin.woff2 +0 -0
  300. package/dist/theme-packs/nocturne/fonts/OFL.txt +95 -0
  301. package/dist/theme-packs/nocturne/meta.json +38 -0
  302. package/dist/theme-packs/nocturne/pack.css +502 -0
  303. package/dist/theme-packs/observatory/fonts/JosefinSans-latin.woff2 +0 -0
  304. package/dist/theme-packs/observatory/fonts/Jost-italic-latin.woff2 +0 -0
  305. package/dist/theme-packs/observatory/fonts/Jost-latin.woff2 +0 -0
  306. package/dist/theme-packs/observatory/fonts/OFL.txt +95 -0
  307. package/dist/theme-packs/observatory/fonts/SpaceMono-400-latin.woff2 +0 -0
  308. package/dist/theme-packs/observatory/fonts/SpaceMono-700-latin.woff2 +0 -0
  309. package/dist/theme-packs/observatory/fonts/SpaceMono-italic-latin.woff2 +0 -0
  310. package/dist/theme-packs/observatory/meta.json +38 -0
  311. package/dist/theme-packs/observatory/pack.css +728 -0
  312. package/dist/theme-packs/onyx/fonts/CormorantGaramond-italic-latin.woff2 +0 -0
  313. package/dist/theme-packs/onyx/fonts/CormorantGaramond-latin.woff2 +0 -0
  314. package/dist/theme-packs/onyx/fonts/IBMPlexMono-400-latin-ext.woff2 +0 -0
  315. package/dist/theme-packs/onyx/fonts/IBMPlexMono-400-latin.woff2 +0 -0
  316. package/dist/theme-packs/onyx/fonts/IBMPlexMono-500-latin-ext.woff2 +0 -0
  317. package/dist/theme-packs/onyx/fonts/IBMPlexMono-500-latin.woff2 +0 -0
  318. package/dist/theme-packs/onyx/fonts/Jost-latin.woff2 +0 -0
  319. package/dist/theme-packs/onyx/fonts/OFL.txt +95 -0
  320. package/dist/theme-packs/onyx/meta.json +38 -0
  321. package/dist/theme-packs/onyx/pack.css +497 -0
  322. package/dist/theme-packs/phosphor/fonts/JetBrainsMono-latin-ext.woff2 +0 -0
  323. package/dist/theme-packs/phosphor/fonts/JetBrainsMono-latin.woff2 +0 -0
  324. package/dist/theme-packs/phosphor/fonts/OFL.txt +94 -0
  325. package/dist/theme-packs/phosphor/fonts/VT323-latin-ext.woff2 +0 -0
  326. package/dist/theme-packs/phosphor/fonts/VT323-latin.woff2 +0 -0
  327. package/dist/theme-packs/phosphor/meta.json +38 -0
  328. package/dist/theme-packs/phosphor/pack.css +493 -0
  329. package/dist/theme-packs/solar/fonts/OFL.txt +94 -0
  330. package/dist/theme-packs/solar/fonts/SourceCodePro-italic-latin.woff2 +0 -0
  331. package/dist/theme-packs/solar/fonts/SourceCodePro-latin.woff2 +0 -0
  332. package/dist/theme-packs/solar/fonts/SourceSans3-italic-latin.woff2 +0 -0
  333. package/dist/theme-packs/solar/fonts/SourceSans3-latin.woff2 +0 -0
  334. package/dist/theme-packs/solar/meta.json +37 -0
  335. package/dist/theme-packs/solar/pack.css +380 -0
  336. package/dist/theme-packs/sumi/fonts/IBMPlexMono-400-latin-ext.woff2 +0 -0
  337. package/dist/theme-packs/sumi/fonts/IBMPlexMono-400-latin.woff2 +0 -0
  338. package/dist/theme-packs/sumi/fonts/IBMPlexMono-500-latin-ext.woff2 +0 -0
  339. package/dist/theme-packs/sumi/fonts/IBMPlexMono-500-latin.woff2 +0 -0
  340. package/dist/theme-packs/sumi/fonts/OFL.txt +95 -0
  341. package/dist/theme-packs/sumi/fonts/ShipporiMinchoB1-600-latin.woff2 +0 -0
  342. package/dist/theme-packs/sumi/fonts/ShipporiMinchoB1-700-latin.woff2 +0 -0
  343. package/dist/theme-packs/sumi/fonts/ShipporiMinchoB1-800-latin.woff2 +0 -0
  344. package/dist/theme-packs/sumi/fonts/ZenKakuGothicNew-400-latin.woff2 +0 -0
  345. package/dist/theme-packs/sumi/fonts/ZenKakuGothicNew-500-latin.woff2 +0 -0
  346. package/dist/theme-packs/sumi/meta.json +38 -0
  347. package/dist/theme-packs/sumi/pack.css +502 -0
  348. package/dist/theme-packs/swissgrid/fonts/IBMPlexMono-400-latin-ext.woff2 +0 -0
  349. package/dist/theme-packs/swissgrid/fonts/IBMPlexMono-400-latin.woff2 +0 -0
  350. package/dist/theme-packs/swissgrid/fonts/IBMPlexMono-600-latin.woff2 +0 -0
  351. package/dist/theme-packs/swissgrid/fonts/Inter-latin-ext.woff2 +0 -0
  352. package/dist/theme-packs/swissgrid/fonts/Inter-latin.woff2 +0 -0
  353. package/dist/theme-packs/swissgrid/fonts/InterTight-latin.woff2 +0 -0
  354. package/dist/theme-packs/swissgrid/fonts/OFL.txt +95 -0
  355. package/dist/theme-packs/swissgrid/meta.json +38 -0
  356. package/dist/theme-packs/swissgrid/pack.css +518 -0
  357. package/dist/theme-packs/washi/fonts/MPlus1Code-400-latin.woff2 +0 -0
  358. package/dist/theme-packs/washi/fonts/MPlus1Code-500-latin.woff2 +0 -0
  359. package/dist/theme-packs/washi/fonts/OFL.txt +95 -0
  360. package/dist/theme-packs/washi/fonts/ShipporiMincho-500-latin.woff2 +0 -0
  361. package/dist/theme-packs/washi/fonts/ShipporiMincho-600-latin.woff2 +0 -0
  362. package/dist/theme-packs/washi/fonts/ShipporiMincho-700-latin.woff2 +0 -0
  363. package/dist/theme-packs/washi/fonts/ZenKakuGothicNew-400-latin.woff2 +0 -0
  364. package/dist/theme-packs/washi/fonts/ZenKakuGothicNew-500-latin.woff2 +0 -0
  365. package/dist/theme-packs/washi/fonts/ZenKakuGothicNew-700-latin.woff2 +0 -0
  366. package/dist/theme-packs/washi/meta.json +38 -0
  367. package/dist/theme-packs/washi/pack.css +479 -0
  368. package/dist/theme-packs-registry/index.d.ts +5 -0
  369. package/dist/theme-packs-registry/index.js +30 -0
  370. package/dist/theme-packs-registry/load-registry.d.ts +23 -0
  371. package/dist/theme-packs-registry/load-registry.js +64 -0
  372. package/dist/theme-packs-registry/meta-schema.d.ts +70 -0
  373. package/dist/theme-packs-registry/meta-schema.js +38 -0
  374. package/dist/theme-packs-registry/resolve-enabled-packs.d.ts +25 -0
  375. package/dist/theme-packs-registry/resolve-enabled-packs.js +43 -0
  376. package/dist/theme-packs-registry/token-manifest.d.ts +19 -0
  377. package/dist/theme-packs-registry/token-manifest.js +57 -0
  378. package/dist/theme-packs-registry/validator.d.ts +35 -0
  379. package/dist/theme-packs-registry/validator.js +284 -0
  380. package/dist/theme-toggle/color-scheme-sync.d.ts +2 -4
  381. package/dist/theme.css +319 -0
  382. package/dist/versions-page/index.d.ts +2 -2
  383. package/dist/versions-page/index.js +8 -8
  384. package/dist/z-index-defaults/index.d.ts +45 -0
  385. package/dist/z-index-defaults/index.js +34 -0
  386. package/eject/breadcrumb/breadcrumb.tsx +4 -4
  387. package/eject/breadcrumb/find-path.ts +2 -2
  388. package/eject/breadcrumb/index.ts +1 -1
  389. package/eject/breadcrumb/types.ts +0 -6
  390. package/eject/code-group/index.tsx +2 -2
  391. package/eject/doc-history/index.tsx +1 -1
  392. package/eject/doc-pager/index.tsx +1 -1
  393. package/eject/footer/footer.tsx +1 -0
  394. package/eject/header/header.tsx +86 -21
  395. package/eject/header/index.ts +3 -0
  396. package/eject/header/types.ts +39 -1
  397. package/eject/site-tree-nav-island/index.tsx +15 -3
  398. package/eject/site-tree-nav-island/state.ts +9 -0
  399. package/eject/theme-toggle/color-scheme-sync.ts +2 -4
  400. package/package.json +82 -29
  401. package/routes-src/404.tsx +4 -1
  402. package/routes-src/_chrome.tsx +31 -8
  403. package/routes-src/_context.ts +4 -0
  404. package/routes-src/_docs-helpers.ts +9 -29
  405. package/routes-src/_virtual.d.ts +38 -2
  406. package/tsconfig.base.json +29 -0
  407. package/virtual-modules.d.ts +83 -0
  408. package/zfb-config-shim.d.ts +210 -0
  409. package/dist/integrations/llms-txt/index.d.ts +0 -33
  410. package/dist/theme/color-tweak-export-modal.d.ts +0 -16
  411. package/dist/theme/color-tweak-export-modal.js +0 -138
  412. package/dist/theme/design-token-serde.d.ts +0 -183
  413. package/dist/theme/design-token-serde.js +0 -346
  414. package/dist/theme/design-token-types.d.ts +0 -13
  415. package/dist/theme/design-token-types.js +0 -6
  416. package/dist/theme/iframe-bridge.d.ts +0 -42
  417. package/dist/theme/iframe-bridge.js +0 -72
  418. /package/dist/{integrations → plugins/internal}/claude-resources/escape-for-mdx.d.ts +0 -0
  419. /package/dist/{integrations → plugins/internal}/claude-resources/escape-for-mdx.js +0 -0
  420. /package/dist/{integrations → plugins/internal}/claude-resources/generate.d.ts +0 -0
  421. /package/dist/{integrations → plugins/internal}/claude-resources/generate.js +0 -0
  422. /package/dist/{integrations → plugins/internal}/doc-history/pre-build.js +0 -0
  423. /package/dist/{integrations → plugins/internal}/llms-txt/dev-middleware.d.ts +0 -0
  424. /package/dist/{integrations → plugins/internal}/llms-txt/dev-middleware.js +0 -0
  425. /package/dist/{integrations → plugins/internal}/llms-txt/emit.d.ts +0 -0
  426. /package/dist/{integrations → plugins/internal}/llms-txt/emit.js +0 -0
  427. /package/dist/{integrations → plugins/internal}/llms-txt/generate.d.ts +0 -0
  428. /package/dist/{integrations → plugins/internal}/llms-txt/generate.js +0 -0
  429. /package/dist/{integrations → plugins/internal}/llms-txt/index.js +0 -0
  430. /package/dist/{integrations → plugins/internal}/llms-txt/types.js +0 -0
  431. /package/dist/{integrations → plugins/internal}/search-index/build-emitter.d.ts +0 -0
  432. /package/dist/{integrations → plugins/internal}/search-index/build-emitter.js +0 -0
  433. /package/dist/{integrations → plugins/internal}/search-index/collect.d.ts +0 -0
  434. /package/dist/{integrations → plugins/internal}/search-index/dev-middleware.d.ts +0 -0
  435. /package/dist/{integrations → plugins/internal}/search-index/dev-middleware.js +0 -0
  436. /package/dist/{integrations → plugins/internal}/search-index/index.d.ts +0 -0
  437. /package/dist/{integrations → plugins/internal}/search-index/index.js +0 -0
  438. /package/dist/{integrations → plugins/internal}/search-index/types.d.ts +0 -0
  439. /package/dist/{integrations → plugins/internal}/search-index/types.js +0 -0
@@ -25,6 +25,7 @@ function Header(props) {
25
25
  siteName,
26
26
  headerNav,
27
27
  headerRightItems,
28
+ headerRightComponents,
28
29
  colorModeEnabled,
29
30
  hasLocales,
30
31
  hasVersions,
@@ -37,6 +38,7 @@ function Header(props) {
37
38
  const pathWithoutBase = urlHelpers.stripBase(currentPath);
38
39
  const matchPath = pathForMatch(pathWithoutBase, lang, i18n.defaultLocale);
39
40
  const activeNavPath = computeActiveNavPath(headerNav, matchPath);
41
+ const rightItemDispatch = createRightItemDispatch(headerRightComponents);
40
42
  return /* @__PURE__ */ jsxs(
41
43
  "header",
42
44
  {
@@ -114,7 +116,8 @@ function Header(props) {
114
116
  search,
115
117
  colorModeEnabled,
116
118
  hasLocales
117
- }
119
+ },
120
+ rightItemDispatch
118
121
  ))
119
122
  }
120
123
  ),
@@ -268,7 +271,14 @@ function SlotWrapper({
268
271
  }) {
269
272
  return /* @__PURE__ */ jsx("div", { class: className, children }, `right-${index}`);
270
273
  }
271
- const RIGHT_ITEM_DISPATCH = {
274
+ const BUILTIN_COMPONENT_NAMES = [
275
+ "theme-toggle",
276
+ "language-switcher",
277
+ "version-switcher",
278
+ "github-link",
279
+ "search"
280
+ ];
281
+ const BASE_RIGHT_ITEM_DISPATCH = {
272
282
  "trigger:design-token-panel": (_item, index) => /* @__PURE__ */ jsx(
273
283
  TriggerButton,
274
284
  {
@@ -385,10 +395,40 @@ const RIGHT_ITEM_DISPATCH = {
385
395
  );
386
396
  }
387
397
  };
388
- function renderRightItem(item, index, ctx) {
398
+ function createRightItemDispatch(hostRegistry) {
399
+ const dispatch = new Map(
400
+ Object.entries(BASE_RIGHT_ITEM_DISPATCH)
401
+ );
402
+ if (hostRegistry === void 0) return dispatch;
403
+ for (const [name, component] of Object.entries(hostRegistry)) {
404
+ if (BUILTIN_COMPONENT_NAMES.includes(name)) {
405
+ throw new Error(
406
+ `[zudo-doc] Duplicate header-right component name "${name}" at chromeBindings.headerRightComponents[${JSON.stringify(name)}]: built-in names are reserved and cannot be shadowed. Remove this registry entry or choose a project-owned name.`
407
+ );
408
+ }
409
+ if (typeof component !== "function") {
410
+ throw new TypeError(
411
+ `[zudo-doc] Invalid header-right component "${name}" at chromeBindings.headerRightComponents[${JSON.stringify(name)}]: expected a callable renderer.`
412
+ );
413
+ }
414
+ dispatch.set(`component:${name}`, (item, index, ctx) => {
415
+ if (item.type !== "component") return null;
416
+ const CustomComponent = component;
417
+ return /* @__PURE__ */ jsx(SlotWrapper, { index, children: /* @__PURE__ */ jsx(CustomComponent, { item, index, ...ctx }) });
418
+ });
419
+ }
420
+ return dispatch;
421
+ }
422
+ function renderRightItem(item, index, ctx, dispatch) {
389
423
  const key = item.type === "trigger" ? `trigger:${item.trigger}` : item.type === "component" ? `component:${item.component}` : item.type;
390
- const handler = RIGHT_ITEM_DISPATCH[key];
391
- return handler ? handler(item, index, ctx) : null;
424
+ const handler = dispatch.get(key);
425
+ if (handler) return handler(item, index, ctx);
426
+ if (item.type === "component") {
427
+ throw new Error(
428
+ `[zudo-doc] Unknown header-right component "${item.component}" at Header.headerRightItems[${index}].component. Register a callable renderer as chromeBindings.headerRightComponents["${item.component}"] through settings.chromeBindingsModule, or use a built-in name: ${BUILTIN_COMPONENT_NAMES.join(", ")}.`
429
+ );
430
+ }
431
+ return null;
392
432
  }
393
433
  export {
394
434
  Header
@@ -9,7 +9,7 @@
9
9
  * so downstream tests / custom layouts can reuse them without rebuilding
10
10
  * the `pathForMatch` / `computeActiveNavPath` regex logic.
11
11
  */
12
- export type { Locale, HeaderNavChildItem, HeaderNavItem, HeaderRightComponentItem, HeaderRightComponentName, HeaderRightHtmlItem, HeaderRightItem, HeaderRightLinkItem, HeaderRightTriggerItem, HeaderRightTriggerName, } from "./types.js";
12
+ export type { Locale, HeaderNavChildItem, HeaderNavItem, HeaderRightBuiltinComponentName, HeaderRightComponentItem, HeaderRightComponentName, HeaderRightComponentProps, HeaderRightComponentRegistry, HeaderRightHtmlItem, HeaderRightItem, HeaderRightLinkItem, HeaderRightTriggerItem, HeaderRightTriggerName, } from "./types.js";
13
13
  export { filterHeaderRightItems, type HeaderRightItemFlags, } from "./right-items.js";
14
14
  export { Header, type HeaderProps } from "./header.js";
15
15
  export { computeActiveNavPath, isNavItemActive, pathForMatch, type NavItemLike, } from "./nav-active.js";
@@ -1,3 +1,4 @@
1
+ import type { ComponentChildren } from "preact";
1
2
  /**
2
3
  * Locale code as seen by the header. Widened from the host's literal
3
4
  * union (`"en" | "ja" | …`) to plain `string` at the v2 boundary so the
@@ -14,12 +15,40 @@ export interface HeaderNavChildItem {
14
15
  export interface HeaderNavItem extends HeaderNavChildItem {
15
16
  children?: HeaderNavChildItem[];
16
17
  }
17
- export type HeaderRightComponentName = "theme-toggle" | "language-switcher" | "version-switcher" | "github-link" | "search";
18
+ export type HeaderRightBuiltinComponentName = "theme-toggle" | "language-switcher" | "version-switcher" | "github-link" | "search";
19
+ /**
20
+ * A serializable name resolved against the package built-ins plus the host's
21
+ * `headerRightComponents` chrome-binding registry. The intersection preserves
22
+ * built-in autocomplete while allowing project-owned names.
23
+ */
24
+ export type HeaderRightComponentName = HeaderRightBuiltinComponentName | (string & {});
18
25
  export type HeaderRightTriggerName = "design-token-panel" | "ai-chat";
19
26
  export interface HeaderRightComponentItem {
20
27
  type: "component";
21
28
  component: HeaderRightComponentName;
22
29
  }
30
+ /**
31
+ * Exact props passed to a host `headerRightComponents` renderer. They mirror
32
+ * the existing header-right dispatch context; no callable enters the
33
+ * serialized {@link HeaderRightComponentItem}.
34
+ */
35
+ export interface HeaderRightComponentProps {
36
+ /** The serialized item that selected this renderer. */
37
+ item: HeaderRightComponentItem;
38
+ /** Zero-based position in the rendered `headerRightItems` array. */
39
+ index: number;
40
+ lang: Locale | undefined;
41
+ githubRepoUrl: string | null;
42
+ githubLabel: string;
43
+ themeToggle: ComponentChildren;
44
+ languageSwitcher: ComponentChildren;
45
+ versionSwitcher: ComponentChildren;
46
+ search: ComponentChildren;
47
+ colorModeEnabled: boolean;
48
+ hasLocales: boolean;
49
+ }
50
+ /** A callable-only host registry keyed by serialized component name. */
51
+ export type HeaderRightComponentRegistry = Record<string, (props: HeaderRightComponentProps) => ComponentChildren>;
23
52
  export interface HeaderRightTriggerItem {
24
53
  type: "trigger";
25
54
  trigger: HeaderRightTriggerName;
@@ -149,6 +149,7 @@ function createHeaderWithDefaults(ctx) {
149
149
  siteName: settings.siteName,
150
150
  headerNav: settings.headerNav,
151
151
  headerRightItems,
152
+ headerRightComponents: ctx.hostBindings.headerRightComponents,
152
153
  colorModeEnabled: Boolean(settings.colorMode),
153
154
  hasLocales: locales.length > 1,
154
155
  hasVersions: Boolean(settings.versions),
@@ -30,6 +30,8 @@ export interface HomePageViewProps {
30
30
  tree: DocNavNode[];
31
31
  /** Ordered category prefixes, passed through to `SiteTreeNav`. */
32
32
  categoryOrder: string[];
33
+ /** Root-category slugs that should start collapsed in `SiteTreeNav`. */
34
+ initiallyCollapsedCategorySlugs?: string[];
33
35
  /** Unique tag count for the current locale — gates the "all tags" section
34
36
  * together with `settings.docTags`. */
35
37
  tagCount: number;
@@ -3,9 +3,9 @@ import { Island } from "@takazudo/zfb";
3
3
  import { DocLayoutWithDefaults } from "../doclayout/index.js";
4
4
  import { SiteTreeNav } from "../site-tree-nav-island/index.js";
5
5
  import { createHeadWithDefaults } from "../head-with-defaults/index.js";
6
- import { createHeaderWithDefaults } from "../header-with-defaults/index.js";
7
- import { createFooterWithDefaults } from "../footer-with-defaults/index.js";
6
+ import { resolveThemePackSsrSlug } from "../theme/theme-pack-provider.js";
8
7
  import { deriveComposeMetaTitle, deriveBodyEndIslands } from "../chrome/derive.js";
8
+ import { derivePrimaryChromeSlots } from "../chrome/primary-slots.js";
9
9
  import { assertChromeContext } from "../chrome/assert-chrome-context.js";
10
10
  import { prepareHomeData } from "./prepare-home-data.js";
11
11
  function createHomePageView(ctx) {
@@ -16,15 +16,19 @@ function createHomePageView(ctx) {
16
16
  const defaultLocale = ctx.defaultLocale;
17
17
  const composeMetaTitle = deriveComposeMetaTitle(ctx);
18
18
  const HeadWithDefaults = createHeadWithDefaults(ctx);
19
- const HeaderWithDefaults = createHeaderWithDefaults(ctx);
20
- const FooterWithDefaults = createFooterWithDefaults(ctx);
19
+ const { Header: HeaderWithDefaults, Footer: FooterWithDefaults } = derivePrimaryChromeSlots(ctx);
21
20
  const BodyEndIslands = deriveBodyEndIslands(ctx);
22
21
  const homeExtras = ctx.hostBindings.homeExtras;
22
+ const dataThemePack = resolveThemePackSsrSlug(
23
+ ctx.themePackRegistry,
24
+ ctx.settings
25
+ );
23
26
  function HomePageView({
24
27
  locale,
25
28
  extras,
26
29
  tree,
27
30
  categoryOrder,
31
+ initiallyCollapsedCategorySlugs,
28
32
  tagCount,
29
33
  wide
30
34
  }) {
@@ -39,6 +43,7 @@ function createHomePageView(ctx) {
39
43
  title: composeMetaTitle(settings.siteName),
40
44
  head: /* @__PURE__ */ jsx(HeadWithDefaults, { title: settings.siteName }),
41
45
  lang: locale,
46
+ dataThemePack,
42
47
  noindex: settings.noindex,
43
48
  hideSidebar: true,
44
49
  hideToc: true,
@@ -99,7 +104,8 @@ function createHomePageView(ctx) {
99
104
  {
100
105
  tree,
101
106
  categoryOrder,
102
- categoryIgnore: ["inbox", "develop"]
107
+ categoryIgnore: ["inbox", "develop"],
108
+ initiallyCollapsedCategorySlugs
103
109
  }
104
110
  )
105
111
  }),
@@ -28,7 +28,7 @@ function prepareHomeData(ctx, locale, options) {
28
28
  const grouped = ctx.groupSatelliteNodes(tree, categoryOrder);
29
29
  const tagCount = ctx.collectTags(
30
30
  navDocs.filter((d) => !d.data.category_no_page),
31
- (id, data) => data.slug ?? ctx.toRouteSlug(id)
31
+ (entrySlug, data) => data.slug ?? ctx.toRouteSlug(entrySlug)
32
32
  ).size;
33
33
  return { tree: grouped, categoryOrder, tagCount };
34
34
  }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Default UI-string translation table.
3
+ *
4
+ * Ported verbatim from the `create-zudo-doc` base template's
5
+ * `src/config/i18n.ts` `translations` export (epic zudolab/zudo-doc#2651,
6
+ * S4 #2654) so a generated project needs no i18n config file of its own.
7
+ *
8
+ * Locale code → key → translated string. Fully populated for `en`, `ja`, and
9
+ * `de`; the other locales in the generator's `SUPPORTED_LANGS` list
10
+ * (zh-cn/zh-tw/ko/es/fr/pt) fall back to `en` at lookup time (the template's
11
+ * `t()` helper does `translations[locale]?.[key] ?? translations[defaultLocale]?.[key] ?? key`)
12
+ * rather than shipping their own fully-translated table here.
13
+ *
14
+ * Locale label/derivation (mapping a locale code to its display label,
15
+ * detecting the active locale from a URL, etc.) stays settings-driven and is
16
+ * reconstructed by `route-context`/`url-helpers` — this module is DATA only.
17
+ * A project's `ZudoDocConfig.translations` override is merged over this
18
+ * default by `zudoDoc()` (#2657); the merge/lookup helper itself is not part
19
+ * of this module.
20
+ */
21
+ import type { PresetTranslations } from "../preset.js";
22
+ export declare const defaultTranslations: PresetTranslations;
@@ -0,0 +1,167 @@
1
+ const defaultTranslations = {
2
+ en: {
3
+ "nav.gettingStarted": "Getting Started",
4
+ "nav.learn": "Learn",
5
+ "nav.guides": "Guides",
6
+ "nav.components": "Components",
7
+ "nav.reference": "Reference",
8
+ "nav.claude": "Claude",
9
+ "nav.changelog": "Changelog",
10
+ "nav.develop": "Develop",
11
+ "nav.previous": "Previous",
12
+ "nav.next": "Next",
13
+ "nav.overview": "Overview",
14
+ "toc.title": "On this page",
15
+ "docs.browseAll": "Browse all documentation sections.",
16
+ "search.label": "Search",
17
+ "search.placeholder": "Type to search...",
18
+ "search.shortcutHint": "to open search from anywhere",
19
+ "search.resultCount": "{count} results",
20
+ "search.unavailable": "Search unavailable",
21
+ "search.loadingIndex": "Loading search index\u2026",
22
+ "search.noResults": "No results found.",
23
+ "code.copy": "Copy code",
24
+ "code.copied": "Copied!",
25
+ "code.wrapToggle": "Toggle word wrap",
26
+ "doc.editPage": "Edit this page",
27
+ "doc.viewSource": "View source on GitHub",
28
+ "header.github": "GitHub repository",
29
+ "doc.tags": "Tags",
30
+ "doc.taggedWith": "Pages tagged with",
31
+ "doc.allTags": "All Tags",
32
+ "doc.created": "Created",
33
+ "doc.updated": "Updated",
34
+ "doc.noTags": "No tags found.",
35
+ "doc.pageCount": "{count} pages",
36
+ "doc.pageCountSingle": "{count} page",
37
+ "nav.backToMenu": "Back to main menu",
38
+ "doc.fallbackNotice": "This page has not been translated yet and is shown in the original language.",
39
+ "frontmatter.preview.title": "Frontmatter",
40
+ "frontmatter.preview.keyCol": "Key",
41
+ "frontmatter.preview.valueCol": "Value",
42
+ "version.latest": "Latest",
43
+ "version.switcher.label": "Version",
44
+ "version.banner.unmaintained": "You are viewing documentation for an older version.",
45
+ "version.banner.unreleased": "You are viewing unreleased documentation.",
46
+ "version.banner.latestLink": "View the latest version",
47
+ "version.switcher.unavailable": "Not available in this version",
48
+ "version.switcher.allVersions": "All versions",
49
+ "version.page.title": "Documentation Versions",
50
+ "version.page.latest.title": "Latest Version (Current)",
51
+ "version.page.latest.description": "The most up-to-date documentation for the latest stable release.",
52
+ "version.page.latest.link": "View latest docs",
53
+ "version.page.past.title": "Past Versions",
54
+ "version.page.past.description": "Documentation for previously released versions.",
55
+ "version.page.unmaintained": "Unmaintained",
56
+ "version.page.unreleased": "Unreleased",
57
+ "version.page.status": "Status",
58
+ "version.page.docs": "Docs"
59
+ },
60
+ ja: {
61
+ "nav.gettingStarted": "\u306F\u3058\u3081\u306B",
62
+ "nav.learn": "\u5B66\u3076",
63
+ "nav.guides": "\u30AC\u30A4\u30C9",
64
+ "nav.components": "\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8",
65
+ "nav.reference": "\u30EA\u30D5\u30A1\u30EC\u30F3\u30B9",
66
+ "nav.claude": "Claude",
67
+ "nav.changelog": "\u5909\u66F4\u5C65\u6B74",
68
+ "nav.develop": "\u958B\u767A",
69
+ "nav.previous": "\u524D\u3078",
70
+ "nav.next": "\u6B21\u3078",
71
+ "nav.overview": "\u6982\u8981",
72
+ "toc.title": "\u76EE\u6B21",
73
+ "docs.browseAll": "\u3059\u3079\u3066\u306E\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u30BB\u30AF\u30B7\u30E7\u30F3\u3092\u95B2\u89A7",
74
+ "search.label": "\u691C\u7D22",
75
+ "search.placeholder": "\u691C\u7D22\u3057\u305F\u3044\u5358\u8A9E\u3092\u5165\u529B",
76
+ "search.shortcutHint": "\u3044\u3064\u3067\u3082\u691C\u7D22\u30D0\u30FC\u3092\u958B\u3051\u308B",
77
+ "search.resultCount": "{count} \u4EF6",
78
+ "search.unavailable": "\u691C\u7D22\u3092\u5229\u7528\u3067\u304D\u307E\u305B\u3093",
79
+ "search.loadingIndex": "\u691C\u7D22\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u3092\u8AAD\u307F\u8FBC\u307F\u4E2D\u2026",
80
+ "search.noResults": "\u691C\u7D22\u7D50\u679C\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002",
81
+ "code.copy": "\u30B3\u30FC\u30C9\u3092\u30B3\u30D4\u30FC",
82
+ "code.copied": "\u30B3\u30D4\u30FC\u3057\u307E\u3057\u305F\uFF01",
83
+ "code.wrapToggle": "\u6298\u308A\u8FD4\u3057\u5207\u66FF",
84
+ "doc.editPage": "\u3053\u306E\u30DA\u30FC\u30B8\u3092\u7DE8\u96C6",
85
+ "doc.viewSource": "GitHub \u3067\u30BD\u30FC\u30B9\u3092\u898B\u308B",
86
+ "header.github": "GitHub \u30EA\u30DD\u30B8\u30C8\u30EA",
87
+ "doc.tags": "\u30BF\u30B0",
88
+ "doc.taggedWith": "\u30BF\u30B0\u4ED8\u304D\u30DA\u30FC\u30B8",
89
+ "doc.allTags": "\u3059\u3079\u3066\u306E\u30BF\u30B0",
90
+ "doc.created": "\u4F5C\u6210",
91
+ "doc.updated": "\u66F4\u65B0",
92
+ "doc.noTags": "\u30BF\u30B0\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002",
93
+ "doc.pageCount": "{count}\u30DA\u30FC\u30B8",
94
+ "doc.pageCountSingle": "{count}\u30DA\u30FC\u30B8",
95
+ "nav.backToMenu": "\u30E1\u30A4\u30F3\u30E1\u30CB\u30E5\u30FC\u306B\u623B\u308B",
96
+ "doc.fallbackNotice": "\u3053\u306E\u30DA\u30FC\u30B8\u306F\u307E\u3060\u7FFB\u8A33\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u539F\u6587\u306E\u307E\u307E\u8868\u793A\u3057\u3066\u3044\u307E\u3059\u3002",
97
+ "frontmatter.preview.title": "\u30D5\u30ED\u30F3\u30C8\u30DE\u30BF\u30FC",
98
+ "frontmatter.preview.keyCol": "\u30AD\u30FC",
99
+ "frontmatter.preview.valueCol": "\u5024",
100
+ "version.latest": "\u6700\u65B0",
101
+ "version.switcher.label": "\u30D0\u30FC\u30B8\u30E7\u30F3",
102
+ "version.banner.unmaintained": "\u3053\u308C\u306F\u65E7\u30D0\u30FC\u30B8\u30E7\u30F3\u306E\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3067\u3059\u3002",
103
+ "version.banner.unreleased": "\u3053\u308C\u306F\u672A\u30EA\u30EA\u30FC\u30B9\u306E\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3067\u3059\u3002",
104
+ "version.banner.latestLink": "\u6700\u65B0\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u898B\u308B",
105
+ "version.switcher.unavailable": "\u3053\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3067\u306F\u5229\u7528\u3067\u304D\u307E\u305B\u3093",
106
+ "version.switcher.allVersions": "\u3059\u3079\u3066\u306E\u30D0\u30FC\u30B8\u30E7\u30F3",
107
+ "version.page.title": "\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u30D0\u30FC\u30B8\u30E7\u30F3",
108
+ "version.page.latest.title": "\u6700\u65B0\u30D0\u30FC\u30B8\u30E7\u30F3\uFF08\u73FE\u5728\uFF09",
109
+ "version.page.latest.description": "\u6700\u65B0\u306E\u5B89\u5B9A\u7248\u30EA\u30EA\u30FC\u30B9\u306E\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3067\u3059\u3002",
110
+ "version.page.latest.link": "\u6700\u65B0\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u898B\u308B",
111
+ "version.page.past.title": "\u904E\u53BB\u306E\u30D0\u30FC\u30B8\u30E7\u30F3",
112
+ "version.page.past.description": "\u4EE5\u524D\u306B\u30EA\u30EA\u30FC\u30B9\u3055\u308C\u305F\u30D0\u30FC\u30B8\u30E7\u30F3\u306E\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3067\u3059\u3002",
113
+ "version.page.unmaintained": "\u30E1\u30F3\u30C6\u30CA\u30F3\u30B9\u7D42\u4E86",
114
+ "version.page.unreleased": "\u672A\u30EA\u30EA\u30FC\u30B9",
115
+ "version.page.status": "\u30B9\u30C6\u30FC\u30BF\u30B9",
116
+ "version.page.docs": "\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8"
117
+ },
118
+ de: {
119
+ "nav.gettingStarted": "Erste Schritte",
120
+ "nav.learn": "Lernen",
121
+ "nav.guides": "Anleitungen",
122
+ "nav.components": "Komponenten",
123
+ "nav.reference": "Referenz",
124
+ "nav.claude": "Claude",
125
+ "nav.changelog": "Changelog",
126
+ "nav.develop": "Entwicklung",
127
+ "nav.previous": "Zur\xFCck",
128
+ "nav.next": "Weiter",
129
+ "nav.overview": "\xDCberblick",
130
+ "toc.title": "Auf dieser Seite",
131
+ "docs.browseAll": "Alle Dokumentationsabschnitte durchsuchen.",
132
+ "search.label": "Suche",
133
+ "search.placeholder": "Suchbegriff eingeben...",
134
+ "search.shortcutHint": "Suche von \xFCberall \xF6ffnen",
135
+ "search.resultCount": "{count} Ergebnisse",
136
+ "search.unavailable": "Suche nicht verf\xFCgbar",
137
+ "search.loadingIndex": "Suchindex wird geladen\u2026",
138
+ "search.noResults": "Keine Ergebnisse gefunden.",
139
+ "code.copy": "Code kopieren",
140
+ "code.copied": "Kopiert!",
141
+ "code.wrapToggle": "Zeilenumbruch umschalten",
142
+ "nav.backToMenu": "Zur\xFCck zum Hauptmen\xFC",
143
+ "doc.editPage": "Diese Seite bearbeiten",
144
+ "doc.viewSource": "Quellcode auf GitHub ansehen",
145
+ "header.github": "GitHub-Repository",
146
+ "doc.tags": "Tags",
147
+ "doc.taggedWith": "Seiten mit Tag",
148
+ "doc.allTags": "Alle Tags",
149
+ "doc.created": "Erstellt",
150
+ "doc.updated": "Aktualisiert",
151
+ "doc.noTags": "Keine Tags gefunden.",
152
+ "doc.pageCount": "{count} Seiten",
153
+ "doc.pageCountSingle": "{count} Seite",
154
+ "doc.fallbackNotice": "Diese Seite wurde noch nicht \xFCbersetzt und wird in der Originalsprache angezeigt.",
155
+ "frontmatter.preview.title": "Frontmatter",
156
+ "frontmatter.preview.keyCol": "Schl\xFCssel",
157
+ "frontmatter.preview.valueCol": "Wert",
158
+ "version.latest": "Neueste",
159
+ "version.switcher.label": "Version",
160
+ "version.banner.unmaintained": "Sie sehen die Dokumentation einer \xE4lteren Version.",
161
+ "version.banner.unreleased": "Sie sehen unver\xF6ffentlichte Dokumentation.",
162
+ "version.banner.latestLink": "Neueste Version anzeigen"
163
+ }
164
+ };
165
+ export {
166
+ defaultTranslations
167
+ };
@@ -1,12 +1,11 @@
1
1
  /**
2
2
  * Minimal structural interface for a docs entry.
3
3
  *
4
- * Structurally compatible with the host's `DocsEntry` from
5
- * `@/types/docs-entry`. Callers pass their concrete entry arrays and
6
- * TypeScript's structural typing ensures compatibility.
4
+ * Structurally compatible with a current zfb collection entry. Callers pass
5
+ * concrete entry arrays and TypeScript preserves the subtype in the result.
7
6
  */
8
7
  export interface MergeDocsEntry {
9
- id: string;
8
+ slug: string;
10
9
  data: {
11
10
  slug?: string;
12
11
  unlisted?: boolean;
@@ -58,13 +57,10 @@ export interface MergeLocaleDocsOptions<T extends MergeDocsEntry = MergeDocsEntr
58
57
  * Only called when `applyDefaultLocaleOnlyFilter` is true. The host stub
59
58
  * passes `isDefaultLocaleOnlyPath` from `@/utils/base`.
60
59
  *
61
- * When omitted (or when `applyDefaultLocaleOnlyFilter` is false), no path
62
- * filtering is applied.
63
- *
64
- * Example: host passes `(path) => isDefaultLocaleOnlyPath(path)` where
65
- * `isDefaultLocaleOnlyPath` is from `src/utils/base.ts`.
60
+ * Required explicitly so the merge never silently omits the current
61
+ * default-locale-only path contract.
66
62
  */
67
- isDefaultLocaleOnlyPath?: (path: string) => boolean;
63
+ isDefaultLocaleOnlyPath: (path: string) => boolean;
68
64
  }
69
65
  /**
70
66
  * Result of mergeLocaleDocs.
@@ -103,10 +99,9 @@ export interface MergeLocaleDocsResult<T extends MergeDocsEntry = MergeDocsEntry
103
99
  * Locale docs take priority; base docs fill in slugs not covered by the locale
104
100
  * collection. Optionally excludes default-locale-only paths and/or unlisted pages.
105
101
  *
106
- * **Slug keying**: slug identity uses `d.data.slug ?? d.id`. Since `loadDocs`
107
- * already strips the `/index` suffix (via `stripIndexSuffix` in `pages/_data.ts`),
108
- * this key is consistent across all call sites regardless of whether they
109
- * loaded docs via `loadDocs` or `bridgeEntries`.
102
+ * **Slug keying**: slug identity uses the explicit frontmatter override or
103
+ * the canonical route form of the current zfb `entry.slug`. This preserves
104
+ * root `index` and nested index-page behavior without mutating the entries.
110
105
  *
111
106
  * **Array identity**: returns a fresh array on each call — see
112
107
  * {@link MergeLocaleDocsResult} for caching guidance.
@@ -1,3 +1,4 @@
1
+ import { toRouteSlug } from "../slug/index.js";
1
2
  function mergeLocaleDocs(options) {
2
3
  const {
3
4
  baseDocs,
@@ -8,13 +9,14 @@ function mergeLocaleDocs(options) {
8
9
  } = options;
9
10
  const filteredLocale = keepUnlisted ? localeDocs : localeDocs.filter((d) => !d.data.unlisted);
10
11
  const filteredBase = keepUnlisted ? baseDocs : baseDocs.filter((d) => !d.data.unlisted);
11
- const localeSlugSet = new Set(filteredLocale.map((d) => d.data.slug ?? d.id));
12
+ const routeSlug = (entry) => entry.data.slug ?? toRouteSlug(entry.slug);
13
+ const localeSlugSet = new Set(filteredLocale.map(routeSlug));
12
14
  let fallbackDocs = filteredBase.filter(
13
- (d) => !localeSlugSet.has(d.data.slug ?? d.id)
15
+ (entry) => !localeSlugSet.has(routeSlug(entry))
14
16
  );
15
- if (applyDefaultLocaleOnlyFilter && isDefaultLocaleOnlyPath) {
17
+ if (applyDefaultLocaleOnlyFilter) {
16
18
  fallbackDocs = fallbackDocs.filter(
17
- (d) => !isDefaultLocaleOnlyPath(`/docs/${d.data.slug ?? d.id}`)
19
+ (entry) => !isDefaultLocaleOnlyPath("/docs/" + routeSlug(entry))
18
20
  );
19
21
  }
20
22
  return {
@@ -1,5 +1,5 @@
1
1
  import { toChildArray } from "preact";
2
- import { htmlOverrides } from "../content/index.js";
2
+ import { defaultComponents } from "../content/index.js";
3
3
  import { makeAdmonition } from "../content-admonition/index.js";
4
4
  import { CodeGroup } from "../code-group/index.js";
5
5
  import { Tabs } from "../code-syntax/index.js";
@@ -105,7 +105,7 @@ function makeEnlargeableParagraph(imageEnlarge, ContentImg) {
105
105
  }
106
106
  }
107
107
  }
108
- return htmlOverrides.p(props);
108
+ return defaultComponents.p(props);
109
109
  };
110
110
  }
111
111
  function createMdxComponents(options) {
@@ -119,11 +119,11 @@ function createMdxComponents(options) {
119
119
  const CategoryTreeNavBound = (props) => navData.CategoryTreeNav({ ...props, lang: locale });
120
120
  const SiteTreeNavBound = (props) => navData.SiteTreeNav({ ...props, lang: locale });
121
121
  return {
122
- ...htmlOverrides,
122
+ ...defaultComponents,
123
123
  // img override: rewrites root-relative src to include settings.base.
124
124
  img: ContentImg,
125
125
  // p override: wraps block-level images in <figure class="zd-enlargeable">.
126
- // Must come AFTER ...htmlOverrides to override ContentParagraph.
126
+ // Must come AFTER ...defaultComponents to override ContentParagraph.
127
127
  p: EnlargeableParagraph,
128
128
  // Admonitions — real typed Preact components emitting the
129
129
  // `.admonition` / `data-admonition` structure the design-system CSS
@@ -1,3 +1,4 @@
1
1
  import type { ZfbPlugin } from "@takazudo/zfb/plugins";
2
+ export { runClaudeResourcesPreStep } from "./internal/claude-resources/index.js";
2
3
  declare const plugin: ZfbPlugin;
3
4
  export default plugin;
@@ -1,4 +1,5 @@
1
- import { runClaudeResourcesPreStep } from "../integrations/claude-resources/index.js";
1
+ import { runClaudeResourcesPreStep } from "./internal/claude-resources/index.js";
2
+ import { runClaudeResourcesPreStep as runClaudeResourcesPreStep2 } from "./internal/claude-resources/index.js";
2
3
  const PLUGIN_NAME = "@takazudo/zudo-doc-claude-resources";
3
4
  const plugin = {
4
5
  name: PLUGIN_NAME,
@@ -25,5 +26,6 @@ const plugin = {
25
26
  };
26
27
  var claude_resources_default = plugin;
27
28
  export {
28
- claude_resources_default as default
29
+ claude_resources_default as default,
30
+ runClaudeResourcesPreStep2 as runClaudeResourcesPreStep
29
31
  };
@@ -2,7 +2,7 @@ import {
2
2
  runDocHistoryMetaStep,
3
3
  runDocHistoryPostBuild,
4
4
  createDocHistoryDevMiddleware
5
- } from "../integrations/doc-history/index.js";
5
+ } from "./internal/doc-history/index.js";
6
6
  import { connectToZfbHandler } from "./connect-adapter.js";
7
7
  import { getBasePrefix } from "./plugin-utils.js";
8
8
  const plugin = {
@@ -1,10 +1,5 @@
1
1
  import { generateClaudeResourcesDocs, type ClaudeResourcesConfig } from "./generate.js";
2
- export interface ZfbPluginConfig {
3
- name: string;
4
- options?: Record<string, unknown>;
5
- }
6
- export declare const CLAUDE_RESOURCES_PLUGIN_NAME = "@takazudo/zudo-doc-claude-resources";
7
- /** Options accepted by both the plugin entry and the imperative runner. */
2
+ /** Options accepted by the plugin's generator runner. */
8
3
  export interface ClaudeResourcesPluginOptions {
9
4
  /**
10
5
  * Path to the project's `.claude/` directory holding `commands/`,
@@ -40,16 +35,6 @@ export interface ClaudeResourcesPluginOptions {
40
35
  */
41
36
  docsDir?: string;
42
37
  }
43
- /**
44
- * Declarative plugin entry for `zfb.config.ts`. Returns the
45
- * `{ name, options }` shape that zfb's plugins array consumes.
46
- *
47
- * v0 note: zfb does not yet invoke plugin lifecycles, so registering the
48
- * plugin alone does not run generation today. Pair it with a call to
49
- * `runClaudeResourcesPreStep` from a `prebuild`-style script until the
50
- * lifecycle hook lands. The plugin entry itself is forward-compatible.
51
- */
52
- export declare function claudeResourcesPlugin(options: ClaudeResourcesPluginOptions): ZfbPluginConfig;
53
38
  /**
54
39
  * Imperative pre-step runner. Resolves relative paths against
55
40
  * `projectRoot` (defaults to `process.cwd()`) and invokes the underlying
@@ -2,13 +2,6 @@ import path from "node:path";
2
2
  import {
3
3
  generateClaudeResourcesDocs
4
4
  } from "./generate.js";
5
- const CLAUDE_RESOURCES_PLUGIN_NAME = "@takazudo/zudo-doc-claude-resources";
6
- function claudeResourcesPlugin(options) {
7
- return {
8
- name: CLAUDE_RESOURCES_PLUGIN_NAME,
9
- options: { ...options }
10
- };
11
- }
12
5
  function runClaudeResourcesPreStep(options) {
13
6
  const projectRoot = path.resolve(options.projectRoot ?? process.cwd());
14
7
  const claudeDir = path.isAbsolute(options.claudeDir) ? options.claudeDir : path.resolve(projectRoot, options.claudeDir);
@@ -18,8 +11,6 @@ function runClaudeResourcesPreStep(options) {
18
11
  return generateClaudeResourcesDocs({ claudeDir, projectRoot: scanRoot, docsDir });
19
12
  }
20
13
  export {
21
- CLAUDE_RESOURCES_PLUGIN_NAME,
22
- claudeResourcesPlugin,
23
14
  generateClaudeResourcesDocs,
24
15
  runClaudeResourcesPreStep
25
16
  };
@@ -24,13 +24,6 @@ export interface DocHistoryOptions {
24
24
  */
25
25
  maxEntries?: number;
26
26
  }
27
- /** zfb v0 plugin descriptor — mirrors `PluginConfig` in `zfb/config`. */
28
- export interface DocHistoryPluginDescriptor {
29
- /** Stable plugin id used by the future zfb plugin runtime to dispatch hooks. */
30
- name: "doc-history";
31
- /** Options forwarded verbatim into the zfb config; must be JSON-serialisable. */
32
- options: DocHistoryOptions;
33
- }
34
27
  /** Default doc-history-server port — matches `@takazudo/zudo-doc-history-server`. */
35
28
  export declare const DEFAULT_SERVER_PORT = 4322;
36
29
  /** Default git history depth — matches `@takazudo/zudo-doc-history-server`. */
@@ -41,16 +34,6 @@ export declare const DOC_HISTORY_ROUTE_PREFIX = "/doc-history/";
41
34
  export declare const DOC_HISTORY_OUTPUT_DIRNAME = "doc-history";
42
35
  /** CLI bin name exposed by `@takazudo/zudo-doc-history-server` for inline generation. */
43
36
  export declare const DOC_HISTORY_GENERATE_BIN = "doc-history-generate";
44
- /**
45
- * Build the zfb config-side descriptor. Add the return value to the
46
- * `plugins: [...]` array in `zfb.config.ts`.
47
- *
48
- * The shape is intentionally limited to `{ name, options }` because
49
- * that is the only thing today's zfb config loader consumes (see the
50
- * Rust `PluginConfig` struct in zfb's `config.rs`). Runtime wiring is
51
- * done through the sibling helpers in this module.
52
- */
53
- export declare function docHistoryPlugin(options: DocHistoryOptions): DocHistoryPluginDescriptor;
54
37
  /** Connect-style middleware signature — works as a Vite plugin middleware. */
55
38
  export type ConnectMiddleware = (req: IncomingMessage, res: ServerResponse, next: (err?: unknown) => void) => void;
56
39
  /** Minimal logger surface used by the middleware on proxy failure. */