@takazudo/zudo-doc 0.2.21 → 1.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 (373) hide show
  1. package/bin/gen-z-index.mjs +164 -0
  2. package/bin/tags-audit-runner.ts +126 -0
  3. package/bin/tags-audit.mjs +64 -0
  4. package/bin/zudo-doc.mjs +83 -0
  5. package/dist/ai-chat-modal/index.d.ts +8 -0
  6. package/dist/ai-chat-modal/index.js +243 -0
  7. package/dist/body-foot-util/body-foot-util-area.d.ts +4 -8
  8. package/dist/body-foot-util/edit-link.d.ts +4 -8
  9. package/dist/body-foot-util/index.d.ts +4 -3
  10. package/dist/breadcrumb/breadcrumb.d.ts +5 -9
  11. package/dist/breadcrumb/find-path.d.ts +2 -5
  12. package/dist/breadcrumb/index.d.ts +4 -4
  13. package/dist/breadcrumb/types.d.ts +3 -5
  14. package/dist/category-nav/index.d.ts +86 -0
  15. package/dist/category-nav/index.js +44 -0
  16. package/dist/category-tree-nav/index.d.ts +65 -0
  17. package/dist/category-tree-nav/index.js +24 -0
  18. package/dist/code-group/index.d.ts +10 -0
  19. package/dist/code-group/index.js +37 -0
  20. package/dist/code-syntax/code-block-enhancer-script.d.ts +1 -3
  21. package/dist/code-syntax/code-block-enhancer.d.ts +3 -6
  22. package/dist/code-syntax/index.d.ts +9 -8
  23. package/dist/code-syntax/mermaid-init-script.d.ts +3 -5
  24. package/dist/code-syntax/mermaid-init.d.ts +4 -7
  25. package/dist/code-syntax/tabs-init-script.d.ts +1 -3
  26. package/dist/code-syntax/tabs-init.d.ts +3 -6
  27. package/dist/code-syntax/tabs.d.ts +4 -7
  28. package/dist/color-scheme-utils.d.ts +125 -0
  29. package/dist/color-scheme-utils.js +151 -0
  30. package/dist/compose-meta-title/index.d.ts +7 -0
  31. package/dist/compose-meta-title/index.js +10 -0
  32. package/dist/content/component-map.d.ts +13 -17
  33. package/dist/content/content-blockquote.d.ts +3 -6
  34. package/dist/content/content-code.d.ts +3 -6
  35. package/dist/content/content-code.js +1 -1
  36. package/dist/content/content-link.d.ts +3 -6
  37. package/dist/content/content-link.js +1 -1
  38. package/dist/content/content-ol.d.ts +3 -6
  39. package/dist/content/content-paragraph.d.ts +3 -6
  40. package/dist/content/content-strong.d.ts +3 -6
  41. package/dist/content/content-table.d.ts +3 -6
  42. package/dist/content/content-ul.d.ts +3 -6
  43. package/dist/content/heading-h2.d.ts +3 -6
  44. package/dist/content/heading-h3.d.ts +3 -6
  45. package/dist/content/heading-h4.d.ts +3 -6
  46. package/dist/content/index.d.ts +29 -13
  47. package/dist/content-admonition/index.d.ts +15 -0
  48. package/dist/content-admonition/index.js +14 -0
  49. package/dist/design-token-panel-bootstrap.d.ts +38 -0
  50. package/dist/design-token-panel-bootstrap.js +29 -0
  51. package/dist/desktop-sidebar-toggle-island/index.d.ts +5 -0
  52. package/dist/desktop-sidebar-toggle-island/index.js +62 -0
  53. package/dist/details/details.d.ts +3 -7
  54. package/dist/details/index.d.ts +2 -2
  55. package/dist/doc-body-end/index.d.ts +21 -0
  56. package/dist/doc-body-end/index.js +15 -0
  57. package/dist/doc-content-header/index.d.ts +69 -0
  58. package/dist/doc-content-header/index.js +49 -0
  59. package/dist/doc-history/index.d.ts +10 -0
  60. package/dist/doc-history/index.js +407 -0
  61. package/dist/doc-history-area/index.d.ts +84 -0
  62. package/dist/doc-history-area/index.js +76 -0
  63. package/dist/doc-metainfo-area/index.d.ts +46 -0
  64. package/dist/doc-metainfo-area/index.js +41 -0
  65. package/dist/doc-page-props/index.d.ts +93 -0
  66. package/dist/doc-page-props/index.js +0 -0
  67. package/dist/doc-page-renderer/index.d.ts +128 -0
  68. package/dist/doc-page-renderer/index.js +103 -0
  69. package/dist/doc-page-shell/index.d.ts +136 -0
  70. package/dist/doc-page-shell/index.js +127 -0
  71. package/dist/doc-pager/index.d.ts +25 -0
  72. package/dist/doc-pager/index.js +41 -0
  73. package/dist/doc-route-entries/index.d.ts +125 -0
  74. package/dist/doc-route-entries/index.js +76 -0
  75. package/dist/doc-route-paths/index.d.ts +54 -0
  76. package/dist/doc-route-paths/index.js +61 -0
  77. package/dist/doc-tags-area/index.d.ts +38 -0
  78. package/dist/doc-tags-area/index.js +30 -0
  79. package/dist/doclayout/anchors.d.ts +7 -9
  80. package/dist/doclayout/doc-layout-with-defaults.d.ts +16 -12
  81. package/dist/doclayout/doc-layout.d.ts +5 -9
  82. package/dist/doclayout/index.d.ts +6 -6
  83. package/dist/eject/index.d.ts +33 -0
  84. package/dist/eject/index.js +229 -0
  85. package/dist/extract-headings/index.d.ts +43 -0
  86. package/dist/extract-headings/index.js +111 -0
  87. package/dist/factory-context/index.d.ts +80 -0
  88. package/dist/factory-context/index.js +0 -0
  89. package/dist/features.css +882 -0
  90. package/dist/footer/footer.d.ts +4 -8
  91. package/dist/footer/index.d.ts +13 -3
  92. package/dist/footer/types.d.ts +4 -6
  93. package/dist/footer-with-defaults/index.d.ts +63 -0
  94. package/dist/footer-with-defaults/index.js +128 -0
  95. package/dist/frontmatter-preview-data/index.d.ts +26 -0
  96. package/dist/frontmatter-preview-data/index.js +23 -0
  97. package/dist/github-helpers/index.d.ts +17 -0
  98. package/dist/github-helpers/index.js +16 -0
  99. package/dist/head/doc-head.d.ts +3 -6
  100. package/dist/head/index.d.ts +9 -5
  101. package/dist/head/og-tags.d.ts +4 -7
  102. package/dist/head/twitter-card.d.ts +3 -6
  103. package/dist/head/types.d.ts +1 -3
  104. package/dist/head-with-defaults/index.d.ts +49 -0
  105. package/dist/head-with-defaults/index.js +62 -0
  106. package/dist/header/header.d.ts +6 -10
  107. package/dist/header/index.d.ts +16 -6
  108. package/dist/header/nav-active.d.ts +5 -7
  109. package/dist/header/nav-overflow-script.d.ts +1 -3
  110. package/dist/header/right-items.d.ts +3 -6
  111. package/dist/header/types.d.ts +10 -12
  112. package/dist/header-with-defaults/index.d.ts +77 -0
  113. package/dist/header-with-defaults/index.js +163 -0
  114. package/dist/html-preview-wrapper/dedent.d.ts +1 -3
  115. package/dist/html-preview-wrapper/highlighted-code.d.ts +3 -7
  116. package/dist/html-preview-wrapper/html-preview-wrapper.d.ts +6 -10
  117. package/dist/html-preview-wrapper/html-preview.d.ts +5 -9
  118. package/dist/html-preview-wrapper/index.d.ts +8 -5
  119. package/dist/html-preview-wrapper/preflight.d.ts +1 -3
  120. package/dist/html-preview-wrapper/preview-base.d.ts +4 -8
  121. package/dist/i18n-version/index.d.ts +7 -5
  122. package/dist/i18n-version/language-switcher.d.ts +5 -8
  123. package/dist/i18n-version/types.d.ts +3 -5
  124. package/dist/i18n-version/version-banner.d.ts +4 -8
  125. package/dist/i18n-version/version-switcher.d.ts +7 -10
  126. package/dist/icons/index.d.ts +9 -13
  127. package/dist/image-enlarge/index.d.ts +13 -0
  128. package/dist/image-enlarge/index.js +176 -0
  129. package/dist/index.d.ts +26 -2
  130. package/dist/inline-version-switcher/index.d.ts +31 -0
  131. package/dist/inline-version-switcher/index.js +44 -0
  132. package/dist/integrations/claude-resources/escape-for-mdx.d.ts +1 -3
  133. package/dist/integrations/claude-resources/generate.d.ts +2 -4
  134. package/dist/integrations/claude-resources/index.d.ts +7 -10
  135. package/dist/integrations/doc-history/index.d.ts +21 -24
  136. package/dist/integrations/doc-history/pre-build.d.ts +7 -9
  137. package/dist/integrations/llms-txt/dev-middleware.d.ts +7 -11
  138. package/dist/integrations/llms-txt/emit.d.ts +2 -7
  139. package/dist/integrations/llms-txt/generate.d.ts +3 -8
  140. package/dist/integrations/llms-txt/index.d.ts +33 -8
  141. package/dist/integrations/llms-txt/load.d.ts +3 -7
  142. package/dist/integrations/llms-txt/strip.d.ts +2 -6
  143. package/dist/integrations/llms-txt/types.d.ts +9 -13
  144. package/dist/integrations/search-index/build-emitter.d.ts +4 -7
  145. package/dist/integrations/search-index/collect.d.ts +2 -5
  146. package/dist/integrations/search-index/dev-middleware.d.ts +5 -8
  147. package/dist/integrations/search-index/index.d.ts +7 -5
  148. package/dist/integrations/search-index/types.d.ts +5 -7
  149. package/dist/island-types/index.d.ts +44 -0
  150. package/dist/island-types/index.js +12 -0
  151. package/dist/locale-merge/index.d.ts +114 -0
  152. package/dist/locale-merge/index.js +27 -0
  153. package/dist/math-block/index.d.ts +18 -0
  154. package/dist/math-block/index.js +29 -0
  155. package/dist/md-utils/index.d.ts +6 -8
  156. package/dist/md-utils/index.js +2 -1
  157. package/dist/mdx-components/index.d.ts +46 -0
  158. package/dist/mdx-components/index.js +161 -0
  159. package/dist/mermaid-enlarge/index.d.ts +11 -0
  160. package/dist/mermaid-enlarge/index.js +290 -0
  161. package/dist/metainfo/doc-metainfo.d.ts +5 -9
  162. package/dist/metainfo/doc-tags.d.ts +7 -11
  163. package/dist/metainfo/frontmatter-preview.d.ts +8 -12
  164. package/dist/metainfo/index.d.ts +6 -4
  165. package/dist/nav-data-prep/index.d.ts +72 -0
  166. package/dist/nav-data-prep/index.js +34 -0
  167. package/dist/nav-indexing/category-nav.d.ts +4 -8
  168. package/dist/nav-indexing/category-tree-nav.d.ts +4 -8
  169. package/dist/nav-indexing/doc-card-grid.d.ts +4 -8
  170. package/dist/nav-indexing/docs-sitemap.d.ts +4 -8
  171. package/dist/nav-indexing/index.d.ts +37 -10
  172. package/dist/nav-indexing/nav-card-grid.d.ts +4 -8
  173. package/dist/nav-indexing/site-tree-nav-demo.d.ts +4 -8
  174. package/dist/nav-indexing/tag-nav.d.ts +6 -10
  175. package/dist/nav-indexing/types.d.ts +6 -8
  176. package/dist/nav-indexing/versions-page-content.d.ts +4 -8
  177. package/dist/nav-scope/index.d.ts +41 -0
  178. package/dist/nav-scope/index.js +41 -0
  179. package/dist/nav-source-cache/index.d.ts +13 -0
  180. package/dist/nav-source-cache/index.js +28 -0
  181. package/dist/nav-source-docs/index.d.ts +169 -0
  182. package/dist/nav-source-docs/index.js +123 -0
  183. package/dist/page-loading/index.d.ts +1 -2
  184. package/dist/page-loading/page-loading-overlay.d.ts +4 -8
  185. package/dist/plugins/claude-resources.d.ts +3 -0
  186. package/dist/plugins/claude-resources.js +27 -0
  187. package/dist/plugins/connect-adapter.d.ts +31 -0
  188. package/dist/plugins/connect-adapter.js +78 -0
  189. package/dist/plugins/doc-history.d.ts +3 -0
  190. package/dist/plugins/doc-history.js +54 -0
  191. package/dist/plugins/llms-txt.d.ts +3 -0
  192. package/dist/plugins/llms-txt.js +48 -0
  193. package/dist/plugins/plugin-utils.d.ts +17 -0
  194. package/dist/plugins/plugin-utils.js +11 -0
  195. package/dist/plugins/routes.d.ts +2 -0
  196. package/dist/plugins/routes.js +100 -0
  197. package/dist/plugins/search-index.d.ts +3 -0
  198. package/dist/plugins/search-index.js +24 -0
  199. package/dist/preset.d.ts +198 -0
  200. package/dist/preset.js +185 -0
  201. package/dist/render-markdown/index.d.ts +5 -0
  202. package/dist/render-markdown/index.js +115 -0
  203. package/dist/robots.d.ts +36 -0
  204. package/dist/robots.js +17 -0
  205. package/dist/route-enumerators/index.d.ts +204 -0
  206. package/dist/route-enumerators/index.js +156 -0
  207. package/dist/routes/404.d.ts +7 -0
  208. package/dist/routes/404.js +47 -0
  209. package/dist/routes/_chrome.d.ts +32 -0
  210. package/dist/routes/_chrome.js +365 -0
  211. package/dist/routes/_context.d.ts +56 -0
  212. package/dist/routes/_context.js +222 -0
  213. package/dist/routes/_docs-helpers.d.ts +43 -0
  214. package/dist/routes/_docs-helpers.js +173 -0
  215. package/dist/routes/_virtual.d.js +0 -0
  216. package/dist/routes/api-ai-chat.d.ts +5 -0
  217. package/dist/routes/api-ai-chat.js +24 -0
  218. package/dist/routes/docs-slug.d.ts +21 -0
  219. package/dist/routes/docs-slug.js +26 -0
  220. package/dist/routes/docs-tags-index.d.ts +7 -0
  221. package/dist/routes/docs-tags-index.js +11 -0
  222. package/dist/routes/docs-tags-tag.d.ts +23 -0
  223. package/dist/routes/docs-tags-tag.js +19 -0
  224. package/dist/routes/docs-versions.d.ts +7 -0
  225. package/dist/routes/docs-versions.js +11 -0
  226. package/dist/routes/index.d.ts +7 -0
  227. package/dist/routes/index.js +117 -0
  228. package/dist/routes/locale-docs-slug.d.ts +27 -0
  229. package/dist/routes/locale-docs-slug.js +40 -0
  230. package/dist/routes/locale-docs-tags-index.d.ts +18 -0
  231. package/dist/routes/locale-docs-tags-index.js +15 -0
  232. package/dist/routes/locale-docs-tags-tag.d.ts +25 -0
  233. package/dist/routes/locale-docs-tags-tag.js +22 -0
  234. package/dist/routes/locale-docs-versions.d.ts +18 -0
  235. package/dist/routes/locale-docs-versions.js +15 -0
  236. package/dist/routes/locale-index.d.ts +24 -0
  237. package/dist/routes/locale-index.js +132 -0
  238. package/dist/routes/robots.txt.d.ts +3 -0
  239. package/dist/routes/robots.txt.js +8 -0
  240. package/dist/routes/sitemap.xml.d.ts +5 -0
  241. package/dist/routes/sitemap.xml.js +31 -0
  242. package/dist/routes/v-docs-slug.d.ts +27 -0
  243. package/dist/routes/v-docs-slug.js +34 -0
  244. package/dist/routes/v-locale-docs-slug.d.ts +31 -0
  245. package/dist/routes/v-locale-docs-slug.js +50 -0
  246. package/dist/safelist.css +1 -1
  247. package/dist/search-widget/index.d.ts +38 -0
  248. package/dist/search-widget/index.js +169 -0
  249. package/dist/search-widget-script/index.d.ts +18 -0
  250. package/dist/search-widget-script/index.js +465 -0
  251. package/dist/settings.d.ts +270 -0
  252. package/dist/settings.js +0 -0
  253. package/dist/sidebar/index.d.ts +21 -3
  254. package/dist/sidebar/sidebar.d.ts +5 -9
  255. package/dist/sidebar/types.d.ts +4 -6
  256. package/dist/sidebar-prepaint/index.d.ts +21 -0
  257. package/dist/sidebar-prepaint/index.js +23 -0
  258. package/dist/sidebar-resizer/index.d.ts +2 -6
  259. package/dist/sidebar-resizer/sidebar-resizer-init.d.ts +6 -10
  260. package/dist/sidebar-toggle-island/index.d.ts +13 -0
  261. package/dist/sidebar-toggle-island/index.js +122 -0
  262. package/dist/sidebar-tree/build-tree.d.ts +4 -8
  263. package/dist/sidebar-tree/category-meta.d.ts +3 -6
  264. package/dist/sidebar-tree/index.d.ts +18 -3
  265. package/dist/sidebar-tree/types.d.ts +6 -8
  266. package/dist/sidebar-tree-island/index.d.ts +13 -0
  267. package/dist/sidebar-tree-island/index.js +454 -0
  268. package/dist/sidebar-utils/index.d.ts +64 -0
  269. package/dist/sidebar-utils/index.js +88 -0
  270. package/dist/sidebar-with-defaults/index.d.ts +38 -0
  271. package/dist/sidebar-with-defaults/index.js +45 -0
  272. package/dist/site-tree-nav/index.d.ts +71 -0
  273. package/dist/site-tree-nav/index.js +36 -0
  274. package/dist/site-tree-nav-island/index.d.ts +11 -0
  275. package/dist/site-tree-nav-island/index.js +176 -0
  276. package/dist/slug/index.d.ts +4 -0
  277. package/dist/slug/index.js +19 -0
  278. package/dist/smart-break/index.d.ts +55 -0
  279. package/dist/{toc/smart-break.js → smart-break/index.js} +30 -3
  280. package/dist/tab-item/index.d.ts +2 -2
  281. package/dist/tab-item/tab-item.d.ts +6 -7
  282. package/dist/tag-helpers/index.d.ts +40 -0
  283. package/dist/tag-helpers/index.js +54 -0
  284. package/dist/tag-pages/index.d.ts +114 -0
  285. package/dist/tag-pages/index.js +146 -0
  286. package/dist/tags-audit.d.ts +107 -0
  287. package/dist/tags-audit.js +321 -0
  288. package/dist/theme/color-scheme-provider.d.ts +4 -8
  289. package/dist/theme/color-tweak-export-modal.d.ts +4 -7
  290. package/dist/theme/design-token-serde.d.ts +14 -17
  291. package/dist/theme/design-token-types.d.ts +4 -6
  292. package/dist/theme/iframe-bridge.d.ts +12 -14
  293. package/dist/theme/index.d.ts +7 -9
  294. package/dist/theme/theme-toggle.d.ts +3 -8
  295. package/dist/theme-toggle/color-scheme-sync.d.ts +5 -7
  296. package/dist/theme-toggle/index.d.ts +4 -8
  297. package/dist/toc/cx.d.ts +2 -3
  298. package/dist/toc/index.d.ts +8 -6
  299. package/dist/toc/mobile-toc.d.ts +5 -9
  300. package/dist/toc/mobile-toc.js +1 -1
  301. package/dist/toc/toc-title.d.ts +1 -3
  302. package/dist/toc/toc.d.ts +5 -9
  303. package/dist/toc/toc.js +1 -1
  304. package/dist/toc/types.d.ts +1 -3
  305. package/dist/toc/use-active-heading.d.ts +4 -7
  306. package/dist/transitions/index.d.ts +1 -1
  307. package/dist/transitions/page-events.d.ts +4 -6
  308. package/dist/tree-nav-shared/index.d.ts +22 -0
  309. package/dist/tree-nav-shared/index.js +66 -0
  310. package/dist/url-helpers/index.d.ts +37 -0
  311. package/dist/url-helpers/index.js +106 -0
  312. package/dist/url-normalizer/index.d.ts +39 -1
  313. package/dist/url-normalizer/normalize.d.ts +3 -5
  314. package/dist/use-modal-dialog/index.d.ts +70 -0
  315. package/dist/use-modal-dialog/index.js +73 -0
  316. package/dist/versions-page/index.d.ts +55 -0
  317. package/dist/versions-page/index.js +73 -0
  318. package/eject/breadcrumb/breadcrumb.tsx +194 -0
  319. package/eject/breadcrumb/find-path.ts +26 -0
  320. package/eject/breadcrumb/index.ts +4 -0
  321. package/eject/breadcrumb/types.ts +32 -0
  322. package/eject/code-group/index.tsx +78 -0
  323. package/eject/content-admonition/index.tsx +50 -0
  324. package/eject/details/details.tsx +34 -0
  325. package/eject/details/index.ts +4 -0
  326. package/eject/doc-pager/index.tsx +91 -0
  327. package/eject/footer/footer.tsx +167 -0
  328. package/eject/footer/index.ts +19 -0
  329. package/eject/footer/types.ts +60 -0
  330. package/eject/header/header.tsx +725 -0
  331. package/eject/header/index.ts +36 -0
  332. package/eject/header/nav-active.ts +122 -0
  333. package/eject/header/nav-overflow-script.ts +302 -0
  334. package/eject/header/right-items.ts +78 -0
  335. package/eject/header/types.ts +69 -0
  336. package/eject/page-loading/index.ts +10 -0
  337. package/eject/page-loading/page-loading-overlay.tsx +103 -0
  338. package/eject/sidebar/index.ts +27 -0
  339. package/eject/sidebar/sidebar.tsx +137 -0
  340. package/eject/sidebar/types.ts +73 -0
  341. package/eject/tab-item/index.ts +7 -0
  342. package/eject/tab-item/tab-item.tsx +70 -0
  343. package/eject/theme-toggle/color-scheme-sync.ts +73 -0
  344. package/eject/theme-toggle/index.tsx +120 -0
  345. package/eject/toc/cx.ts +38 -0
  346. package/eject/toc/index.ts +11 -0
  347. package/eject/toc/mobile-toc.tsx +133 -0
  348. package/eject/toc/toc-title.ts +33 -0
  349. package/eject/toc/toc.tsx +119 -0
  350. package/eject/toc/types.ts +14 -0
  351. package/eject/toc/use-active-heading.ts +162 -0
  352. package/package.json +371 -11
  353. package/routes-src/404.tsx +49 -0
  354. package/routes-src/_chrome.tsx +470 -0
  355. package/routes-src/_context.ts +314 -0
  356. package/routes-src/_docs-helpers.ts +284 -0
  357. package/routes-src/_virtual.d.ts +15 -0
  358. package/routes-src/api-ai-chat.tsx +46 -0
  359. package/routes-src/docs-slug.tsx +43 -0
  360. package/routes-src/docs-tags-index.tsx +14 -0
  361. package/routes-src/docs-tags-tag.tsx +29 -0
  362. package/routes-src/docs-versions.tsx +15 -0
  363. package/routes-src/index.tsx +134 -0
  364. package/routes-src/locale-docs-slug.tsx +69 -0
  365. package/routes-src/locale-docs-tags-index.tsx +23 -0
  366. package/routes-src/locale-docs-tags-tag.tsx +39 -0
  367. package/routes-src/locale-docs-versions.tsx +23 -0
  368. package/routes-src/locale-index.tsx +150 -0
  369. package/routes-src/robots.txt.tsx +13 -0
  370. package/routes-src/sitemap.xml.tsx +48 -0
  371. package/routes-src/v-docs-slug.tsx +64 -0
  372. package/routes-src/v-locale-docs-slug.tsx +85 -0
  373. package/dist/toc/smart-break.d.ts +0 -27
@@ -0,0 +1,204 @@
1
+ import type { NavSourceDocs } from "../nav-source-docs/index.js";
2
+ import type { DocPageEntry, DocNavNode } from "../doc-page-props/index.js";
3
+ export type { DocPageEntry, DocNavNode, NavSourceDocs };
4
+ /**
5
+ * Minimal docs entry shape needed for tag enumeration (no Content/module_specifier).
6
+ */
7
+ export interface DocsEntryForTags {
8
+ id: string;
9
+ data: {
10
+ slug?: string;
11
+ draft?: boolean;
12
+ unlisted?: boolean;
13
+ category_no_page?: boolean;
14
+ tags?: string[];
15
+ [key: string]: unknown;
16
+ };
17
+ }
18
+ /**
19
+ * Minimal version config shape needed for route enumeration.
20
+ */
21
+ export interface VersionConfigForEnum {
22
+ slug: string;
23
+ docsDir?: string;
24
+ locales?: Record<string, {
25
+ dir?: string;
26
+ }>;
27
+ }
28
+ /**
29
+ * Minimal tag info shape — only the keys the tag URL enumerator needs.
30
+ */
31
+ export interface TagInfoForEnum {
32
+ tag: string;
33
+ count: number;
34
+ }
35
+ /**
36
+ * Injected context for `createRouteEnumerators`.
37
+ *
38
+ * All host-specific singletons and utilities are passed in so the package
39
+ * factory never imports `@/` aliases.
40
+ */
41
+ export interface RouteEnumeratorsContext {
42
+ /** Default locale code. Host passes `defaultLocale` from `@/config/i18n`. */
43
+ defaultLocale: string;
44
+ /**
45
+ * Getter for all non-default locale codes.
46
+ * Host passes `() => Object.keys(settings.locales)`.
47
+ * Called per invocation so mutations to settings.locales are picked up.
48
+ */
49
+ getLocaleKeys: () => readonly string[];
50
+ /**
51
+ * Getter for the configured versions list (or false/undefined).
52
+ * Host passes `() => settings.versions`.
53
+ * Called per invocation so mutations to settings.versions are picked up.
54
+ */
55
+ getVersions: () => VersionConfigForEnum[] | false | undefined;
56
+ /**
57
+ * Getter for whether tag pages are enabled.
58
+ * Host passes `() => settings.docTags`.
59
+ */
60
+ getDocTags: () => boolean | undefined;
61
+ /** `docsUrl(slug, lang)` from `@/utils/base` (resolved with settings). */
62
+ docsUrl: (slug: string, lang?: string) => string;
63
+ /** `versionedDocsUrl(slug, versionSlug, lang)` from `@/utils/base`. */
64
+ versionedDocsUrl: (slug: string, versionSlug: string, lang?: string) => string;
65
+ /** `withBase(path)` from `@/utils/base`. */
66
+ withBase: (path: string) => string;
67
+ /**
68
+ * Load docs from a named collection.
69
+ * Host passes `loadDocs` from `pages/_data.ts`.
70
+ */
71
+ loadDocs: (collectionName: string) => DocsEntryForTags[];
72
+ /**
73
+ * Returns true for paths that are only shown in the default locale.
74
+ * Host passes `isDefaultLocaleOnlyPath` from `@/utils/base`.
75
+ */
76
+ isDefaultLocaleOnlyPath: (path: string) => boolean;
77
+ /**
78
+ * Collect tags from a docs array.
79
+ * Host passes `collectTags` from `@/utils/tags`.
80
+ */
81
+ collectTags: (docs: DocsEntryForTags[], slugFn: (id: string, data: {
82
+ slug?: string;
83
+ }) => string) => Map<string, TagInfoForEnum>;
84
+ /**
85
+ * Convert a content entry slug to a canonical route slug.
86
+ * Host passes `toRouteSlug` from `@/utils/slug`.
87
+ */
88
+ toRouteSlug: (id: string) => string;
89
+ /**
90
+ * Build the nav tree for a locale.
91
+ * Host passes `buildNavTree` from `@/utils/docs`.
92
+ */
93
+ buildNavTree: (docs: DocPageEntry[], locale: string, categoryMeta: Map<string, unknown>) => DocNavNode[];
94
+ /**
95
+ * Collect auto-generated index nodes.
96
+ * Host passes `collectAutoIndexNodes` from `@/utils/docs`.
97
+ */
98
+ collectAutoIndexNodes: (tree: DocNavNode[]) => DocNavNode[];
99
+ /**
100
+ * Resolve the identity-stable nav source for an EN/locale context.
101
+ * Host passes `resolveNavSource` from `pages/lib/_nav-source-docs.ts`.
102
+ */
103
+ resolveNavSource: (lang: string, currentVersion: string | undefined, options?: {
104
+ applyDefaultLocaleOnlyFilter?: boolean;
105
+ keepUnlisted?: boolean;
106
+ }) => NavSourceDocs;
107
+ /**
108
+ * Resolve the identity-stable nav source for a versioned non-default-locale
109
+ * context.
110
+ * Host passes `resolveVersionedLocaleSource` from `pages/lib/_nav-source-docs.ts`.
111
+ */
112
+ resolveVersionedLocaleSource: (versionSlug: string, versionDocsDir: string | undefined, lang: string, localeDir: string | undefined, options?: {
113
+ applyDefaultLocaleOnlyFilter?: boolean;
114
+ keepUnlisted?: boolean;
115
+ }) => NavSourceDocs;
116
+ /**
117
+ * Merge locale docs with base-locale fallbacks.
118
+ * Host passes `mergeLocaleDocs` from `pages/lib/locale-merge.ts`.
119
+ */
120
+ mergeLocaleDocs: (options: {
121
+ baseDocs: DocsEntryForTags[];
122
+ localeDocs: DocsEntryForTags[];
123
+ applyDefaultLocaleOnlyFilter?: boolean;
124
+ keepUnlisted?: boolean;
125
+ isDefaultLocaleOnlyPath?: (path: string) => boolean;
126
+ }) => {
127
+ docs: DocsEntryForTags[];
128
+ localeSlugSet: ReadonlySet<string>;
129
+ };
130
+ }
131
+ export interface RouteEnumeratorsAPI {
132
+ /**
133
+ * Enumerate all doc page URLs for a locale.
134
+ *
135
+ * For the default locale: loads the "docs" collection directly.
136
+ * For non-default locales: locale-first merge with EN fallback, with
137
+ * default-locale-only paths excluded. A nav-tree pass adds auto-generated
138
+ * category index pages.
139
+ */
140
+ enumerateDocsRoutes: (locale: string) => string[];
141
+ /**
142
+ * Enumerate tag-index and per-tag URLs for a locale.
143
+ *
144
+ * Returns `/docs/tags/` and `/docs/tags/{tag}/` for each unique tag.
145
+ */
146
+ enumerateTagsRoutes: (locale: string) => string[];
147
+ /**
148
+ * Enumerate doc URLs for a single (version, locale) combination.
149
+ *
150
+ * For the default locale: loads the versioned EN collection.
151
+ * For non-default locales: locale-first merge over the version's EN base.
152
+ */
153
+ enumerateVersionedRoutes: (version: VersionConfigForEnum, locale: string) => string[];
154
+ /**
155
+ * Compose all route enumerators into a deduped Map<url, lastmod>.
156
+ *
157
+ * Covers site root, default-locale docs + tags, per-locale docs + tags,
158
+ * versioned EN docs, and versioned locale docs.
159
+ */
160
+ enumerateAllRoutes: () => Map<string, string>;
161
+ }
162
+ /**
163
+ * Create the route-enumeration functions bound to the host's injected context.
164
+ *
165
+ * @example
166
+ * ```ts
167
+ * // pages/lib/route-enumerators.ts (thin stub)
168
+ * import { createRouteEnumerators } from "@takazudo/zudo-doc/route-enumerators";
169
+ * import { settings } from "@/config/settings";
170
+ * import { defaultLocale } from "@/config/i18n";
171
+ * import { docsUrl, versionedDocsUrl, withBase, isDefaultLocaleOnlyPath } from "@/utils/base";
172
+ * import { buildNavTree, collectAutoIndexNodes } from "@/utils/docs";
173
+ * import { collectTags } from "@/utils/tags";
174
+ * import { toRouteSlug } from "@/utils/slug";
175
+ * import { loadDocs } from "../_data";
176
+ * import { resolveNavSource, resolveVersionedLocaleSource } from "./_nav-source-docs";
177
+ * import { mergeLocaleDocs } from "./locale-merge";
178
+ *
179
+ * export const {
180
+ * enumerateDocsRoutes,
181
+ * enumerateTagsRoutes,
182
+ * enumerateVersionedRoutes,
183
+ * enumerateAllRoutes,
184
+ * } = createRouteEnumerators({
185
+ * defaultLocale,
186
+ * getLocaleKeys: () => Object.keys(settings.locales),
187
+ * getVersions: () => settings.versions,
188
+ * getDocTags: () => settings.docTags,
189
+ * docsUrl,
190
+ * versionedDocsUrl,
191
+ * withBase,
192
+ * loadDocs,
193
+ * isDefaultLocaleOnlyPath,
194
+ * collectTags,
195
+ * toRouteSlug,
196
+ * buildNavTree,
197
+ * collectAutoIndexNodes,
198
+ * resolveNavSource,
199
+ * resolveVersionedLocaleSource,
200
+ * mergeLocaleDocs,
201
+ * });
202
+ * ```
203
+ */
204
+ export declare function createRouteEnumerators(ctx: RouteEnumeratorsContext): RouteEnumeratorsAPI;
@@ -0,0 +1,156 @@
1
+ function createRouteEnumerators(ctx) {
2
+ const {
3
+ defaultLocale,
4
+ getLocaleKeys,
5
+ getVersions,
6
+ getDocTags,
7
+ docsUrl,
8
+ versionedDocsUrl,
9
+ withBase,
10
+ loadDocs,
11
+ isDefaultLocaleOnlyPath,
12
+ collectTags,
13
+ toRouteSlug,
14
+ buildNavTree,
15
+ collectAutoIndexNodes,
16
+ resolveNavSource,
17
+ resolveVersionedLocaleSource,
18
+ mergeLocaleDocs
19
+ } = ctx;
20
+ function enumerateDocsRoutes(locale) {
21
+ const urls = [];
22
+ const { docs: allDocs, navDocs, categoryMeta } = resolveNavSource(
23
+ locale,
24
+ void 0,
25
+ { applyDefaultLocaleOnlyFilter: true, keepUnlisted: true }
26
+ );
27
+ const tree = buildNavTree(navDocs, locale, categoryMeta);
28
+ for (const doc of allDocs) {
29
+ if (doc.data.category_no_page === true) continue;
30
+ urls.push(docsUrl(doc.data.slug ?? toRouteSlug(doc.id), locale));
31
+ }
32
+ for (const node of collectAutoIndexNodes(tree)) {
33
+ urls.push(docsUrl(node.slug, locale));
34
+ }
35
+ return [...new Set(urls)];
36
+ }
37
+ function enumerateTagsRoutes(locale) {
38
+ if (!getDocTags()) return [];
39
+ const urls = [];
40
+ const tagsBase = locale === defaultLocale ? "/docs/tags" : `/${locale}/docs/tags`;
41
+ urls.push(withBase(tagsBase));
42
+ let docs;
43
+ if (locale === defaultLocale) {
44
+ docs = loadDocs("docs").filter(
45
+ (d) => !d.data.unlisted && !d.data.draft && !d.data.category_no_page
46
+ );
47
+ } else {
48
+ const result = mergeLocaleDocs({
49
+ baseDocs: loadDocs("docs").filter((d) => !d.data.draft),
50
+ localeDocs: loadDocs(`docs-${locale}`).filter((d) => !d.data.draft),
51
+ applyDefaultLocaleOnlyFilter: true,
52
+ isDefaultLocaleOnlyPath
53
+ });
54
+ docs = result.docs.filter((d) => !d.data.category_no_page);
55
+ }
56
+ const tagMap = collectTags(docs, (id, data) => data.slug ?? toRouteSlug(id));
57
+ for (const tag of tagMap.keys()) {
58
+ const encoded = encodeURIComponent(tag);
59
+ const tagPath = locale === defaultLocale ? `/docs/tags/${encoded}` : `/${locale}/docs/tags/${encoded}`;
60
+ urls.push(withBase(tagPath));
61
+ }
62
+ return urls;
63
+ }
64
+ function enumerateVersionedRoutes(version, locale) {
65
+ const urls = [];
66
+ if (locale === defaultLocale) {
67
+ const { docs: allDocs, navDocs, categoryMeta } = resolveNavSource(
68
+ defaultLocale,
69
+ version.slug
70
+ );
71
+ const tree = buildNavTree(navDocs, defaultLocale, categoryMeta);
72
+ for (const doc of allDocs) {
73
+ if (doc.data.category_no_page === true) continue;
74
+ const slug = doc.data.slug ?? toRouteSlug(doc.id);
75
+ urls.push(versionedDocsUrl(slug, version.slug));
76
+ }
77
+ for (const node of collectAutoIndexNodes(tree)) {
78
+ urls.push(versionedDocsUrl(node.slug, version.slug));
79
+ }
80
+ } else {
81
+ const localeDir = version.locales?.[locale]?.dir;
82
+ const { docs: allDocs, navDocs, categoryMeta } = resolveVersionedLocaleSource(
83
+ version.slug,
84
+ version.docsDir,
85
+ locale,
86
+ localeDir,
87
+ { applyDefaultLocaleOnlyFilter: true, keepUnlisted: true }
88
+ );
89
+ const tree = buildNavTree(navDocs, locale, categoryMeta);
90
+ for (const doc of allDocs) {
91
+ if (doc.data.category_no_page === true) continue;
92
+ const slug = doc.data.slug ?? toRouteSlug(doc.id);
93
+ urls.push(versionedDocsUrl(slug, version.slug, locale));
94
+ }
95
+ for (const node of collectAutoIndexNodes(tree)) {
96
+ urls.push(versionedDocsUrl(node.slug, version.slug, locale));
97
+ }
98
+ }
99
+ return [...new Set(urls)];
100
+ }
101
+ function enumerateAllRoutes() {
102
+ const today = (/* @__PURE__ */ new Date()).toISOString().split("T")[0] ?? "";
103
+ const routes = /* @__PURE__ */ new Map();
104
+ const localeKeys = getLocaleKeys();
105
+ const versions = getVersions();
106
+ function add(url) {
107
+ if (!routes.has(url)) {
108
+ routes.set(url, today);
109
+ }
110
+ }
111
+ add(withBase("/"));
112
+ for (const url of enumerateDocsRoutes(defaultLocale)) {
113
+ add(url);
114
+ }
115
+ for (const url of enumerateTagsRoutes(defaultLocale)) {
116
+ add(url);
117
+ }
118
+ for (const locale of localeKeys) {
119
+ add(withBase(`/${locale}`));
120
+ for (const url of enumerateDocsRoutes(locale)) {
121
+ add(url);
122
+ }
123
+ for (const url of enumerateTagsRoutes(locale)) {
124
+ add(url);
125
+ }
126
+ }
127
+ if (versions) {
128
+ add(withBase("/docs/versions"));
129
+ for (const locale of localeKeys) {
130
+ add(withBase(`/${locale}/docs/versions`));
131
+ }
132
+ }
133
+ if (versions) {
134
+ for (const version of versions) {
135
+ for (const url of enumerateVersionedRoutes(version, defaultLocale)) {
136
+ add(url);
137
+ }
138
+ for (const locale of localeKeys) {
139
+ for (const url of enumerateVersionedRoutes(version, locale)) {
140
+ add(url);
141
+ }
142
+ }
143
+ }
144
+ }
145
+ return routes;
146
+ }
147
+ return {
148
+ enumerateDocsRoutes,
149
+ enumerateTagsRoutes,
150
+ enumerateVersionedRoutes,
151
+ enumerateAllRoutes
152
+ };
153
+ }
154
+ export {
155
+ createRouteEnumerators
156
+ };
@@ -0,0 +1,7 @@
1
+ /** @jsxRuntime automatic */
2
+ /** @jsxImportSource preact */
3
+ import type { JSX } from "preact";
4
+ export declare const frontmatter: {
5
+ title: string;
6
+ };
7
+ export default function NotFoundPage(): JSX.Element;
@@ -0,0 +1,47 @@
1
+ import { Fragment, jsx, jsxs } from "preact/jsx-runtime";
2
+ import { DocLayoutWithDefaults } from "../doclayout/index.js";
3
+ import { settings, defaultLocale, withBase } from "./_context.js";
4
+ import {
5
+ HeadWithDefaults,
6
+ HeaderWithDefaults,
7
+ FooterWithDefaults,
8
+ BodyEndIslandsStub,
9
+ composeMetaTitle
10
+ } from "./_chrome.js";
11
+ const frontmatter = { title: "404" };
12
+ function NotFoundPage() {
13
+ const locale = defaultLocale;
14
+ const title = "Page Not Found";
15
+ return /* @__PURE__ */ jsx(
16
+ DocLayoutWithDefaults,
17
+ {
18
+ title: composeMetaTitle(title),
19
+ head: /* @__PURE__ */ jsx(HeadWithDefaults, { title }),
20
+ lang: locale,
21
+ noindex: true,
22
+ hideSidebar: true,
23
+ hideToc: true,
24
+ sidebarOverride: /* @__PURE__ */ jsx(Fragment, {}),
25
+ headerOverride: /* @__PURE__ */ jsx(HeaderWithDefaults, { lang: locale }),
26
+ footerOverride: /* @__PURE__ */ jsx(FooterWithDefaults, { lang: locale }),
27
+ bodyEndComponents: /* @__PURE__ */ jsx(BodyEndIslandsStub, { basePath: settings.base ?? "/" }),
28
+ enableClientRouter: settings.dynamicPageTransition,
29
+ children: /* @__PURE__ */ jsxs("div", { class: "min-h-[60vh] flex flex-col items-center justify-center px-hsp-2xl py-vsp-xl", children: [
30
+ /* @__PURE__ */ jsx("h1", { class: "text-display font-bold mb-vsp-md", children: "404" }),
31
+ /* @__PURE__ */ jsx("p", { class: "text-title text-muted mb-vsp-xl", children: "Page not found." }),
32
+ /* @__PURE__ */ jsx(
33
+ "a",
34
+ {
35
+ href: withBase("/"),
36
+ class: "bg-accent px-hsp-lg py-vsp-xs font-medium text-bg hover:bg-accent-hover",
37
+ children: "Back to Home"
38
+ }
39
+ )
40
+ ] })
41
+ }
42
+ );
43
+ }
44
+ export {
45
+ NotFoundPage as default,
46
+ frontmatter
47
+ };
@@ -0,0 +1,32 @@
1
+ /** @jsxRuntime automatic */
2
+ /** @jsxImportSource preact */
3
+ import type { JSX, VNode } from "preact";
4
+ import type { DocNavNode } from "./_docs-helpers.js";
5
+ /** Package no-op body-end islands. The host's `BodyEndIslands` wires project
6
+ * island bootstraps (client-router / design-token-panel) that cannot live in
7
+ * the package; the package default renders nothing. */
8
+ declare function BodyEndIslandsStub(_props: {
9
+ basePath: string;
10
+ }): JSX.Element;
11
+ export declare const composeMetaTitle: (title: string) => string;
12
+ export declare const HeadWithDefaults: (props: import("../head-with-defaults/index.js").HeadWithDefaultsProps) => JSX.Element;
13
+ export declare const HeaderWithDefaults: (props: import("../header-with-defaults/index.js").HeaderWithDefaultsProps) => JSX.Element;
14
+ export declare const FooterWithDefaults: (props: {
15
+ lang?: string;
16
+ }) => VNode;
17
+ export declare const SidebarWithDefaults: (props: import("../sidebar-with-defaults/index.js").SidebarWithDefaultsProps) => JSX.Element;
18
+ declare const SiteTreeNavWrapper: (props: import("../site-tree-nav/index.js").SiteTreeNavWrapperProps) => JSX.Element | null;
19
+ export declare function createMdxComponentsBound(lang?: string): Record<string, unknown>;
20
+ export declare const renderDocPage: (props: import("../doc-page-props/index.js").DocPageBaseProps, opts: import("../doc-page-renderer/index.js").RenderDocPageOptions) => JSX.Element;
21
+ export declare const VersionsPageView: (props: import("../versions-page/index.js").VersionsPageViewProps) => JSX.Element;
22
+ export declare const collectTagMapForLocale: (locale: string) => Map<string, import("../tag-pages/index.js").TagInfo>, TagDetailPageView: (props: {
23
+ locale: string;
24
+ tag: string;
25
+ tagInfo: import("../tag-pages/index.js").TagInfo;
26
+ }) => JSX.Element, TagsIndexPageView: (props: {
27
+ locale: string;
28
+ children?: import("preact").ComponentChildren;
29
+ }) => JSX.Element;
30
+ export { SiteTreeNavWrapper, BodyEndIslandsStub };
31
+ export { buildDocRouteEntries, } from "./_context.js";
32
+ export type { DocNavNode };