@takazudo/zudo-doc 5.28.2 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (456) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +49 -16
  3. package/bin/gen-z-index.mjs +18 -18
  4. package/dist/agent-docs/identity.d.ts +4 -0
  5. package/dist/agent-docs/identity.js +24 -0
  6. package/dist/agent-docs/index.d.ts +5 -0
  7. package/dist/agent-docs/index.js +5 -0
  8. package/dist/agent-docs/limits.d.ts +11 -0
  9. package/dist/agent-docs/limits.js +24 -0
  10. package/dist/agent-docs/search.d.ts +14 -0
  11. package/dist/agent-docs/search.js +82 -0
  12. package/dist/agent-docs/tokenize.d.ts +2 -0
  13. package/dist/agent-docs/tokenize.js +22 -0
  14. package/dist/agent-docs/types.d.ts +68 -0
  15. package/dist/agent-docs/types.js +0 -0
  16. package/dist/ai-chat-modal/index.d.ts +1 -4
  17. package/dist/ai-chat-modal/index.js +183 -123
  18. package/dist/asset-components/asset-card.d.ts +1 -2
  19. package/dist/asset-components/asset-card.js +12 -12
  20. package/dist/asset-components/asset-code.d.ts +1 -2
  21. package/dist/asset-components/asset-code.js +10 -10
  22. package/dist/asset-components/shared.d.ts +3 -4
  23. package/dist/asset-components/shared.js +4 -4
  24. package/dist/asset-index-page/body.d.ts +5 -6
  25. package/dist/asset-index-page/body.js +6 -6
  26. package/dist/asset-index-page/index.d.ts +1 -2
  27. package/dist/asset-index-page/index.js +1 -1
  28. package/dist/asset-page/body.d.ts +5 -9
  29. package/dist/asset-page/body.js +3 -3
  30. package/dist/asset-page/components.d.ts +16 -17
  31. package/dist/asset-page/components.js +10 -9
  32. package/dist/asset-page/index.d.ts +1 -2
  33. package/dist/asset-page/index.js +1 -1
  34. package/dist/auto-logo/index.d.ts +1 -2
  35. package/dist/auto-logo/index.js +2 -2
  36. package/dist/body-foot-util/body-foot-util-area.d.ts +3 -4
  37. package/dist/body-foot-util/body-foot-util-area.js +1 -2
  38. package/dist/body-foot-util/edit-link.d.ts +2 -3
  39. package/dist/body-foot-util/edit-link.js +1 -2
  40. package/dist/breadcrumb/breadcrumb.d.ts +6 -6
  41. package/dist/breadcrumb/breadcrumb.js +3 -4
  42. package/dist/category-nav/index.d.ts +1 -2
  43. package/dist/category-nav/index.js +11 -5
  44. package/dist/category-tree-nav/index.d.ts +1 -2
  45. package/dist/category-tree-nav/index.js +3 -3
  46. package/dist/chrome/derive.d.ts +18 -27
  47. package/dist/chrome/derive.js +47 -29
  48. package/dist/chrome/index.d.ts +5 -5
  49. package/dist/chrome/index.js +1 -1
  50. package/dist/chrome/island-data.d.ts +4 -0
  51. package/dist/chrome/island-data.js +52 -0
  52. package/dist/chrome/primary-slots.d.ts +2 -3
  53. package/dist/chrome-bindings.d.ts +28 -22
  54. package/dist/code-group/index.d.ts +3 -4
  55. package/dist/code-group/index.js +3 -7
  56. package/dist/code-syntax/code-block-enhancer.d.ts +1 -2
  57. package/dist/code-syntax/code-block-enhancer.js +2 -2
  58. package/dist/code-syntax/mermaid-init.d.ts +1 -2
  59. package/dist/code-syntax/mermaid-init.js +5 -2
  60. package/dist/code-syntax/tabs-init-script.js +1 -1
  61. package/dist/code-syntax/tabs-init.d.ts +1 -2
  62. package/dist/code-syntax/tabs-init.js +2 -2
  63. package/dist/code-syntax/tabs.d.ts +6 -6
  64. package/dist/code-syntax/tabs.js +8 -8
  65. package/dist/compiled.css +2933 -2943
  66. package/dist/config-assertions/index.d.ts +13 -0
  67. package/dist/config-assertions/index.js +14 -0
  68. package/dist/config.d.ts +36 -17
  69. package/dist/config.js +23 -95
  70. package/dist/content/content-blockquote.d.ts +2 -3
  71. package/dist/content/content-blockquote.js +3 -3
  72. package/dist/content/content-code.d.ts +3 -4
  73. package/dist/content/content-code.js +5 -5
  74. package/dist/content/content-link.d.ts +3 -4
  75. package/dist/content/content-link.js +10 -10
  76. package/dist/content/content-ol.d.ts +2 -3
  77. package/dist/content/content-ol.js +5 -4
  78. package/dist/content/content-paragraph.d.ts +2 -3
  79. package/dist/content/content-paragraph.js +1 -1
  80. package/dist/content/content-strong.d.ts +2 -3
  81. package/dist/content/content-strong.js +3 -3
  82. package/dist/content/content-table.d.ts +2 -3
  83. package/dist/content/content-table.js +4 -4
  84. package/dist/content/content-ul.d.ts +2 -3
  85. package/dist/content/content-ul.js +4 -4
  86. package/dist/content/heading-h2.d.ts +2 -3
  87. package/dist/content/heading-h2.js +4 -4
  88. package/dist/content/heading-h3.d.ts +2 -3
  89. package/dist/content/heading-h3.js +4 -4
  90. package/dist/content/heading-h4.d.ts +2 -3
  91. package/dist/content/heading-h4.js +4 -4
  92. package/dist/content-admonition/index.d.ts +3 -4
  93. package/dist/content-admonition/index.js +2 -2
  94. package/dist/content.css +35 -33
  95. package/dist/design-token-panel-bootstrap-controller.d.ts +178 -0
  96. package/dist/design-token-panel-bootstrap-controller.js +359 -0
  97. package/dist/design-token-panel-bootstrap-island.d.ts +5 -0
  98. package/dist/design-token-panel-bootstrap-island.js +19 -0
  99. package/dist/design-token-panel-bootstrap.d.ts +5 -195
  100. package/dist/design-token-panel-bootstrap.js +3 -288
  101. package/dist/desktop-sidebar-toggle-island/index.d.ts +2 -7
  102. package/dist/desktop-sidebar-toggle-island/index.js +2 -58
  103. package/dist/desktop-sidebar-toggle-island/island.d.ts +4 -0
  104. package/dist/desktop-sidebar-toggle-island/island.js +43 -0
  105. package/dist/desktop-sidebar-toggle-island/storage.d.ts +4 -0
  106. package/dist/desktop-sidebar-toggle-island/storage.js +29 -0
  107. package/dist/desktop-toc-toggle-island/index.d.ts +2 -7
  108. package/dist/desktop-toc-toggle-island/index.js +2 -58
  109. package/dist/desktop-toc-toggle-island/island.d.ts +4 -0
  110. package/dist/desktop-toc-toggle-island/island.js +43 -0
  111. package/dist/desktop-toc-toggle-island/storage.d.ts +4 -0
  112. package/dist/desktop-toc-toggle-island/storage.js +29 -0
  113. package/dist/details/details.d.ts +3 -4
  114. package/dist/details/details.js +1 -1
  115. package/dist/doc-body-end/index.d.ts +1 -2
  116. package/dist/doc-body-end/index.js +1 -1
  117. package/dist/doc-body-end-islands/design-token-panel-island.d.ts +2 -2
  118. package/dist/doc-body-end-islands/design-token-panel-island.js +3 -7
  119. package/dist/doc-body-end-islands/index.d.ts +4 -21
  120. package/dist/doc-body-end-islands/index.js +5 -3
  121. package/dist/doc-body-end-islands/theme-pack-switcher-island.d.ts +3 -13
  122. package/dist/doc-body-end-islands/theme-pack-switcher-island.js +11 -13
  123. package/dist/doc-content-header/index.d.ts +1 -2
  124. package/dist/doc-content-header/index.js +1 -1
  125. package/dist/doc-history/index.d.ts +1 -1
  126. package/dist/doc-history/index.js +166 -141
  127. package/dist/doc-history-area/index.d.ts +6 -4
  128. package/dist/doc-history-area/index.js +17 -16
  129. package/dist/doc-metainfo-area/index.d.ts +2 -3
  130. package/dist/doc-metainfo-area/index.js +1 -1
  131. package/dist/doc-page-renderer/index.d.ts +13 -7
  132. package/dist/doc-page-renderer/index.js +10 -1
  133. package/dist/doc-page-shell/index.d.ts +20 -7
  134. package/dist/doc-page-shell/index.js +17 -6
  135. package/dist/doc-pager/index.d.ts +1 -2
  136. package/dist/doc-pager/index.js +3 -3
  137. package/dist/doc-tags-area/index.d.ts +2 -3
  138. package/dist/doc-tags-area/index.js +1 -1
  139. package/dist/doclayout/doc-layout-with-defaults.d.ts +9 -9
  140. package/dist/doclayout/doc-layout-with-defaults.js +5 -15
  141. package/dist/doclayout/doc-layout.d.ts +26 -27
  142. package/dist/doclayout/doc-layout.js +23 -14
  143. package/dist/docs-schema/index.d.ts +4 -0
  144. package/dist/docs-schema/index.js +1 -0
  145. package/dist/extract-headings/index.js +43 -12
  146. package/dist/factory-context/index.d.ts +22 -19
  147. package/dist/features.css +70 -8
  148. package/dist/find-in-page/find-bar.d.ts +4 -2
  149. package/dist/find-in-page/find-bar.js +58 -69
  150. package/dist/find-in-page/index.d.ts +2 -8
  151. package/dist/find-in-page/index.js +33 -30
  152. package/dist/footer/footer.d.ts +3 -4
  153. package/dist/footer/footer.js +3 -3
  154. package/dist/footer-with-defaults/index.d.ts +2 -3
  155. package/dist/footer-with-defaults/index.js +1 -1
  156. package/dist/frontmatter-preview-defaults/index.js +1 -0
  157. package/dist/head/doc-head.d.ts +1 -1
  158. package/dist/head/doc-head.js +24 -32
  159. package/dist/head/og-tags.d.ts +1 -1
  160. package/dist/head/og-tags.js +8 -7
  161. package/dist/head/twitter-card.d.ts +1 -1
  162. package/dist/head/twitter-card.js +1 -1
  163. package/dist/head-with-defaults/index.d.ts +7 -2
  164. package/dist/head-with-defaults/index.js +46 -32
  165. package/dist/header/header.d.ts +8 -8
  166. package/dist/header/header.js +9 -11
  167. package/dist/header/types.d.ts +7 -7
  168. package/dist/header-with-defaults/index.d.ts +1 -2
  169. package/dist/header-with-defaults/index.js +18 -8
  170. package/dist/home-intro/index.d.ts +2 -5
  171. package/dist/home-intro/index.js +7 -5
  172. package/dist/home-intro/prepare.js +4 -3
  173. package/dist/home-page/index.d.ts +3 -3
  174. package/dist/home-page/index.js +19 -17
  175. package/dist/html-preview-wrapper/highlighted-code.d.ts +3 -4
  176. package/dist/html-preview-wrapper/highlighted-code.js +19 -17
  177. package/dist/html-preview-wrapper/html-preview-wrapper.d.ts +4 -25
  178. package/dist/html-preview-wrapper/html-preview-wrapper.js +2 -87
  179. package/dist/html-preview-wrapper/html-preview.d.ts +3 -10
  180. package/dist/html-preview-wrapper/html-preview.js +13 -37
  181. package/dist/html-preview-wrapper/index.d.ts +2 -1
  182. package/dist/html-preview-wrapper/index.js +1 -1
  183. package/dist/html-preview-wrapper/preview-base.d.ts +3 -5
  184. package/dist/html-preview-wrapper/preview-base.js +56 -59
  185. package/dist/html-preview-wrapper/wrapper.d.ts +20 -0
  186. package/dist/html-preview-wrapper/wrapper.js +37 -0
  187. package/dist/hydration-pending.d.ts +3 -5
  188. package/dist/hydration-pending.js +7 -5
  189. package/dist/i18n-version/language-switcher.d.ts +5 -32
  190. package/dist/i18n-version/language-switcher.js +5 -106
  191. package/dist/i18n-version/switcher-generated-scripts.d.ts +2 -0
  192. package/dist/i18n-version/switcher-generated-scripts.js +107 -0
  193. package/dist/i18n-version/switcher-url-state.d.ts +76 -0
  194. package/dist/i18n-version/switcher-url-state.js +103 -0
  195. package/dist/i18n-version/version-banner.d.ts +2 -3
  196. package/dist/i18n-version/version-banner.js +1 -1
  197. package/dist/i18n-version/version-switcher.d.ts +5 -50
  198. package/dist/i18n-version/version-switcher.js +5 -157
  199. package/dist/icons/index.d.ts +18 -19
  200. package/dist/icons/index.js +17 -33
  201. package/dist/image-enlarge/index.d.ts +1 -10
  202. package/dist/image-enlarge/index.js +80 -55
  203. package/dist/image-enlarge/public.d.ts +2 -0
  204. package/dist/image-enlarge/public.js +6 -0
  205. package/dist/image-enlarge/ssr-fallback.d.ts +2 -0
  206. package/dist/image-enlarge/ssr-fallback.js +8 -0
  207. package/dist/index.d.ts +11 -4
  208. package/dist/inline-version-switcher/index.d.ts +1 -2
  209. package/dist/inline-version-switcher/index.js +1 -1
  210. package/dist/island-types/index.d.ts +2 -2
  211. package/dist/island-types/index.js +1 -5
  212. package/dist/math-block/index.d.ts +4 -7
  213. package/dist/math-block/index.js +5 -5
  214. package/dist/mcp/handler.d.ts +8 -0
  215. package/dist/mcp/handler.js +129 -0
  216. package/dist/mcp/index.d.ts +4 -0
  217. package/dist/mcp/index.js +7 -0
  218. package/dist/mcp/loader.d.ts +19 -0
  219. package/dist/mcp/loader.js +202 -0
  220. package/dist/mdx-components/index.js +40 -108
  221. package/dist/mermaid-enlarge/index.d.ts +1 -8
  222. package/dist/mermaid-enlarge/index.js +174 -158
  223. package/dist/mermaid-enlarge/public.d.ts +2 -0
  224. package/dist/mermaid-enlarge/public.js +6 -0
  225. package/dist/mermaid-enlarge/ssr-fallback.d.ts +2 -0
  226. package/dist/mermaid-enlarge/ssr-fallback.js +8 -0
  227. package/dist/metainfo/doc-metainfo.d.ts +2 -3
  228. package/dist/metainfo/doc-metainfo.js +1 -4
  229. package/dist/metainfo/doc-tags.d.ts +2 -3
  230. package/dist/metainfo/doc-tags.js +1 -1
  231. package/dist/metainfo/frontmatter-preview.d.ts +3 -4
  232. package/dist/metainfo/frontmatter-preview.js +1 -1
  233. package/dist/nav-data-prep/index.js +6 -4
  234. package/dist/nav-indexing/category-nav.d.ts +2 -3
  235. package/dist/nav-indexing/category-nav.js +1 -2
  236. package/dist/nav-indexing/category-tree-nav.d.ts +2 -3
  237. package/dist/nav-indexing/category-tree-nav.js +1 -1
  238. package/dist/nav-indexing/doc-card-grid.d.ts +2 -3
  239. package/dist/nav-indexing/doc-card-grid.js +1 -2
  240. package/dist/nav-indexing/docs-sitemap.d.ts +2 -3
  241. package/dist/nav-indexing/docs-sitemap.js +2 -2
  242. package/dist/nav-indexing/index.d.ts +1 -1
  243. package/dist/nav-indexing/nav-card-grid.d.ts +2 -3
  244. package/dist/nav-indexing/nav-card-grid.js +1 -2
  245. package/dist/nav-indexing/note-tray-index-parts/card-list.d.ts +1 -2
  246. package/dist/nav-indexing/note-tray-index-parts/card-list.js +4 -4
  247. package/dist/nav-indexing/note-tray-index-parts/date-line.d.ts +2 -3
  248. package/dist/nav-indexing/note-tray-index-parts/date-line.js +1 -1
  249. package/dist/nav-indexing/note-tray-index-parts/index-list.d.ts +1 -2
  250. package/dist/nav-indexing/note-tray-index-parts/index-list.js +2 -2
  251. package/dist/nav-indexing/note-tray-index-parts/timeline.d.ts +1 -2
  252. package/dist/nav-indexing/note-tray-index-parts/timeline.js +2 -2
  253. package/dist/nav-indexing/note-tray-index.d.ts +1 -2
  254. package/dist/nav-indexing/note-tray-index.js +1 -1
  255. package/dist/nav-indexing/site-tree-nav-demo.d.ts +2 -3
  256. package/dist/nav-indexing/site-tree-nav-demo.js +2 -2
  257. package/dist/nav-indexing/tag-nav.d.ts +1 -2
  258. package/dist/nav-indexing/tag-nav.js +1 -1
  259. package/dist/nav-indexing/types.d.ts +2 -2
  260. package/dist/nav-indexing/versions-page-content.d.ts +2 -3
  261. package/dist/nav-indexing/versions-page-content.js +8 -8
  262. package/dist/note-tray-index/index.d.ts +1 -2
  263. package/dist/note-tray-index/index.js +1 -1
  264. package/dist/page-loading/page-loading-overlay.d.ts +1 -2
  265. package/dist/page-loading/page-loading-overlay.js +3 -5
  266. package/dist/plugins/agent-export.d.ts +3 -0
  267. package/dist/plugins/agent-export.js +34 -0
  268. package/dist/plugins/internal/agent-export/chunk.d.ts +5 -0
  269. package/dist/plugins/internal/agent-export/chunk.js +90 -0
  270. package/dist/plugins/internal/agent-export/index.d.ts +24 -0
  271. package/dist/plugins/internal/agent-export/index.js +123 -0
  272. package/dist/plugins/internal/agent-export/normalize.d.ts +5 -0
  273. package/dist/plugins/internal/agent-export/normalize.js +73 -0
  274. package/dist/plugins/internal/llms-txt/dev-middleware.d.ts +6 -0
  275. package/dist/plugins/internal/llms-txt/dev-middleware.js +8 -3
  276. package/dist/plugins/internal/llms-txt/emit.js +23 -6
  277. package/dist/plugins/internal/llms-txt/generate.d.ts +7 -1
  278. package/dist/plugins/internal/llms-txt/generate.js +9 -2
  279. package/dist/plugins/internal/llms-txt/load.d.ts +2 -0
  280. package/dist/plugins/internal/llms-txt/load.js +20 -4
  281. package/dist/plugins/internal/llms-txt/types.d.ts +10 -0
  282. package/dist/plugins/routes.js +4 -0
  283. package/dist/preset.d.ts +19 -9
  284. package/dist/preset.js +20 -1
  285. package/dist/route-context-payload/index.js +1 -1
  286. package/dist/routes/404.d.ts +2 -3
  287. package/dist/routes/404.js +1 -1
  288. package/dist/routes/_chrome.d.ts +5 -5
  289. package/dist/routes/_chrome.js +7 -2
  290. package/dist/routes/_context.d.ts +4 -4
  291. package/dist/routes/_design-token-panel-bootstrap.d.ts +1 -4
  292. package/dist/routes/_design-token-panel-bootstrap.js +9 -1
  293. package/dist/routes/docs-slug.d.ts +2 -3
  294. package/dist/routes/docs-tags-index.d.ts +2 -3
  295. package/dist/routes/docs-tags-index.js +1 -1
  296. package/dist/routes/docs-tags-tag.d.ts +2 -3
  297. package/dist/routes/docs-tags-tag.js +1 -1
  298. package/dist/routes/docs-versions.d.ts +2 -3
  299. package/dist/routes/docs-versions.js +1 -1
  300. package/dist/routes/files-path.d.ts +2 -3
  301. package/dist/routes/files-path.js +1 -1
  302. package/dist/routes/index.d.ts +2 -3
  303. package/dist/routes/index.js +1 -1
  304. package/dist/routes/locale-docs-slug.d.ts +2 -3
  305. package/dist/routes/locale-docs-tags-index.d.ts +2 -3
  306. package/dist/routes/locale-docs-tags-index.js +1 -1
  307. package/dist/routes/locale-docs-tags-tag.d.ts +2 -3
  308. package/dist/routes/locale-docs-tags-tag.js +1 -1
  309. package/dist/routes/locale-docs-versions.d.ts +2 -3
  310. package/dist/routes/locale-docs-versions.js +1 -1
  311. package/dist/routes/locale-files-path.d.ts +2 -3
  312. package/dist/routes/locale-files-path.js +1 -1
  313. package/dist/routes/locale-index.d.ts +2 -3
  314. package/dist/routes/locale-index.js +1 -1
  315. package/dist/routes/mcp.d.ts +5 -0
  316. package/dist/routes/mcp.js +25 -0
  317. package/dist/routes/v-docs-slug.d.ts +2 -3
  318. package/dist/routes/v-locale-docs-slug.d.ts +2 -3
  319. package/dist/search-widget/index.d.ts +1 -2
  320. package/dist/search-widget/index.js +4 -7
  321. package/dist/search-widget-script/generated-script.js +12 -5
  322. package/dist/settings-defaults.d.ts +2 -0
  323. package/dist/settings-defaults.js +93 -0
  324. package/dist/settings.d.ts +8 -2
  325. package/dist/sidebar/index.d.ts +1 -1
  326. package/dist/sidebar/sidebar.d.ts +12 -44
  327. package/dist/sidebar/sidebar.js +4 -3
  328. package/dist/sidebar/types.d.ts +14 -0
  329. package/dist/sidebar-prepaint/index.d.ts +1 -2
  330. package/dist/sidebar-prepaint/index.js +4 -6
  331. package/dist/sidebar-resizer/sidebar-resizer-init.d.ts +2 -3
  332. package/dist/sidebar-resizer/sidebar-resizer-init.js +3 -3
  333. package/dist/sidebar-toggle-island/index.d.ts +8 -11
  334. package/dist/sidebar-toggle-island/index.js +75 -62
  335. package/dist/sidebar-tree/build-tree.js +5 -6
  336. package/dist/sidebar-tree/types.d.ts +2 -0
  337. package/dist/sidebar-tree-island/index.d.ts +4 -19
  338. package/dist/sidebar-tree-island/index.js +782 -436
  339. package/dist/sidebar-tree-island/scope-state.d.ts +38 -0
  340. package/dist/sidebar-tree-island/scope-state.js +151 -0
  341. package/dist/sidebar-tree-island/sidebar-scroll-preserve.js +6 -2
  342. package/dist/sidebar-utils/index.d.ts +17 -19
  343. package/dist/sidebar-utils/index.js +100 -3
  344. package/dist/sidebar-utils/scope.d.ts +11 -0
  345. package/dist/sidebar-utils/scope.js +67 -0
  346. package/dist/sidebar-with-defaults/index.d.ts +1 -2
  347. package/dist/sidebar-with-defaults/index.js +19 -18
  348. package/dist/site-schema/nav-tree.js +15 -15
  349. package/dist/site-schema/types.d.ts +1 -0
  350. package/dist/site-tree-nav/index.d.ts +2 -3
  351. package/dist/site-tree-nav/index.js +11 -12
  352. package/dist/site-tree-nav/normalize-island-props.d.ts +16 -0
  353. package/dist/site-tree-nav/normalize-island-props.js +122 -0
  354. package/dist/site-tree-nav-island/index.d.ts +3 -3
  355. package/dist/site-tree-nav-island/index.js +243 -144
  356. package/dist/smart-break/index.d.ts +3 -4
  357. package/dist/smart-break/index.js +1 -1
  358. package/dist/tab-item/tab-item.d.ts +3 -4
  359. package/dist/tab-item/tab-item.js +1 -1
  360. package/dist/tag-pages/index.d.ts +3 -3
  361. package/dist/tag-pages/index.js +10 -10
  362. package/dist/theme/color-scheme-provider.d.ts +3 -3
  363. package/dist/theme/color-scheme-provider.js +3 -3
  364. package/dist/theme/theme-pack-provider.d.ts +1 -1
  365. package/dist/theme/theme-pack-provider.js +3 -3
  366. package/dist/theme/theme-toggle.d.ts +2 -3
  367. package/dist/theme/theme-toggle.js +1 -1
  368. package/dist/theme-pack-dialog/index.d.ts +1 -1
  369. package/dist/theme-pack-dialog/index.js +69 -75
  370. package/dist/theme-pack-dialog/theme-pack-card.d.ts +3 -4
  371. package/dist/theme-pack-dialog/theme-pack-card.js +19 -17
  372. package/dist/theme-pack-switcher/index.d.ts +4 -5
  373. package/dist/theme-pack-switcher/index.js +52 -49
  374. package/dist/theme-toggle/index.d.ts +1 -1
  375. package/dist/theme-toggle/index.js +154 -167
  376. package/dist/theme.css +47 -121
  377. package/dist/toc/mobile-toc.d.ts +3 -5
  378. package/dist/toc/mobile-toc.js +29 -27
  379. package/dist/toc/toc.d.ts +3 -4
  380. package/dist/toc/toc.js +18 -18
  381. package/dist/toc/use-active-heading.d.ts +5 -4
  382. package/dist/toc/use-active-heading.js +36 -30
  383. package/dist/toc-prepaint/index.d.ts +1 -2
  384. package/dist/toc-prepaint/index.js +4 -6
  385. package/dist/transitions/nested-island-props-refresh.d.ts +3 -16
  386. package/dist/transitions/nested-island-props-refresh.js +133 -151
  387. package/dist/transitions/page-events.d.ts +8 -13
  388. package/dist/tree-nav-shared/index.d.ts +4 -5
  389. package/dist/tree-nav-shared/index.js +6 -7
  390. package/dist/use-modal-dialog/index.d.ts +9 -63
  391. package/dist/use-modal-dialog/index.js +41 -59
  392. package/dist/versions-page/index.d.ts +3 -3
  393. package/dist/versions-page/index.js +5 -5
  394. package/dist/wind/index.d.ts +5 -0
  395. package/dist/wind/index.js +169 -0
  396. package/dist/wind.json +498 -0
  397. package/dist/z-index-defaults/index.d.ts +4 -4
  398. package/dist/zdtp-loader.d.ts +7 -0
  399. package/dist/zdtp-loader.js +8 -0
  400. package/eject/asset-components/asset-card.tsx +14 -16
  401. package/eject/asset-components/asset-code.tsx +10 -12
  402. package/eject/asset-components/shared.tsx +5 -7
  403. package/eject/breadcrumb/breadcrumb.tsx +15 -16
  404. package/eject/code-group/index.tsx +4 -10
  405. package/eject/content-admonition/index.tsx +5 -6
  406. package/eject/desktop-sidebar-toggle-island/index.ts +4 -0
  407. package/eject/desktop-sidebar-toggle-island/island.tsx +50 -0
  408. package/eject/desktop-sidebar-toggle-island/storage.ts +27 -0
  409. package/eject/details/details.tsx +3 -5
  410. package/eject/doc-history/index.tsx +193 -179
  411. package/eject/doc-pager/index.tsx +3 -4
  412. package/eject/footer/footer.tsx +7 -9
  413. package/eject/header/header.tsx +42 -54
  414. package/eject/header/nav-overflow-script.ts +1 -1
  415. package/eject/header/types.ts +12 -13
  416. package/eject/image-enlarge/index.tsx +84 -69
  417. package/eject/image-enlarge/public.ts +2 -0
  418. package/eject/image-enlarge/ssr-fallback.tsx +7 -0
  419. package/eject/page-loading/page-loading-overlay.tsx +8 -15
  420. package/eject/sidebar/index.ts +1 -0
  421. package/eject/sidebar/sidebar.tsx +16 -97
  422. package/eject/sidebar/types.ts +15 -0
  423. package/eject/sidebar-toggle-island/index.tsx +103 -102
  424. package/eject/sidebar-tree-island/index.tsx +827 -615
  425. package/eject/sidebar-tree-island/scope-state.ts +154 -0
  426. package/eject/sidebar-tree-island/sidebar-scroll-preserve.ts +8 -2
  427. package/eject/site-tree-nav-island/index.tsx +349 -222
  428. package/eject/tab-item/tab-item.tsx +2 -4
  429. package/eject/theme-toggle/hydration-pending.ts +6 -10
  430. package/eject/theme-toggle/index.tsx +133 -173
  431. package/eject/toc/mobile-toc.tsx +27 -31
  432. package/eject/toc/toc.tsx +21 -24
  433. package/eject/toc/use-active-heading.ts +43 -38
  434. package/package.json +40 -22
  435. package/routes-src/404.tsx +2 -3
  436. package/routes-src/_chrome.tsx +7 -2
  437. package/routes-src/_design-token-panel-bootstrap.tsx +1 -63
  438. package/routes-src/docs-slug.tsx +2 -3
  439. package/routes-src/docs-tags-index.tsx +2 -3
  440. package/routes-src/docs-tags-tag.tsx +2 -3
  441. package/routes-src/docs-versions.tsx +2 -3
  442. package/routes-src/files-path.tsx +2 -4
  443. package/routes-src/index.tsx +2 -3
  444. package/routes-src/locale-docs-slug.tsx +2 -3
  445. package/routes-src/locale-docs-tags-index.tsx +2 -3
  446. package/routes-src/locale-docs-tags-tag.tsx +2 -3
  447. package/routes-src/locale-docs-versions.tsx +2 -3
  448. package/routes-src/locale-files-path.tsx +2 -4
  449. package/routes-src/locale-index.tsx +2 -3
  450. package/routes-src/mcp.tsx +25 -0
  451. package/routes-src/v-docs-slug.tsx +2 -3
  452. package/routes-src/v-locale-docs-slug.tsx +2 -3
  453. package/tsconfig.base.json +1 -1
  454. package/dist/safelist.css +0 -2
  455. package/dist/theme-no-reset.css +0 -379
  456. package/eject/desktop-sidebar-toggle-island/index.tsx +0 -110
@@ -0,0 +1,122 @@
1
+ function normalizeSiteTreeNavProps(input) {
2
+ const tree = normalizeNodeArray(input.tree, /* @__PURE__ */ new Set());
3
+ const normalized = {
4
+ tree,
5
+ categoryOrder: normalizeStringArray(input.categoryOrder, "categoryOrder"),
6
+ locale: requireString(input.locale, "locale"),
7
+ dateFormats: normalizeDateFormats(input.dateFormats)
8
+ };
9
+ if (input.categoryIgnore !== void 0) {
10
+ normalized.categoryIgnore = normalizeStringArray(
11
+ input.categoryIgnore,
12
+ "categoryIgnore"
13
+ );
14
+ }
15
+ if (input.ariaLabel !== void 0) {
16
+ normalized.ariaLabel = requireString(input.ariaLabel, "ariaLabel");
17
+ }
18
+ return normalized;
19
+ }
20
+ function normalizeNodeArray(nodes, ancestors) {
21
+ if (!Array.isArray(nodes)) {
22
+ throw new TypeError("[zudo-doc] SiteTreeNav island tree must be an array.");
23
+ }
24
+ return Array.from(nodes, (node) => normalizeNode(node, ancestors));
25
+ }
26
+ function normalizeNode(node, ancestors) {
27
+ if (typeof node !== "object" || node === null || Array.isArray(node) || Object.getPrototypeOf(node) !== Object.prototype && Object.getPrototypeOf(node) !== null) {
28
+ throw new TypeError("[zudo-doc] SiteTreeNav island node must be a plain object.");
29
+ }
30
+ if (ancestors.has(node)) {
31
+ throw new TypeError("[zudo-doc] SiteTreeNav island tree must not contain cycles.");
32
+ }
33
+ if (typeof node.slug !== "string" || typeof node.label !== "string") {
34
+ throw new TypeError("[zudo-doc] SiteTreeNav island node slug and label must be strings.");
35
+ }
36
+ if (typeof node.hasPage !== "boolean") {
37
+ throw new TypeError("[zudo-doc] SiteTreeNav island node hasPage must be boolean.");
38
+ }
39
+ if (!Array.isArray(node.children)) {
40
+ throw new TypeError("[zudo-doc] SiteTreeNav island node children must be an array.");
41
+ }
42
+ if (!Number.isFinite(node.position)) {
43
+ throw new TypeError("[zudo-doc] SiteTreeNav island node position must be finite.");
44
+ }
45
+ if (node.rank !== void 0 && !Number.isFinite(node.rank)) {
46
+ throw new TypeError("[zudo-doc] SiteTreeNav island node rank must be finite.");
47
+ }
48
+ ancestors.add(node);
49
+ try {
50
+ const normalized = {
51
+ slug: node.slug,
52
+ label: node.label,
53
+ position: node.position,
54
+ hasPage: node.hasPage,
55
+ children: normalizeNodeArray(node.children, ancestors)
56
+ };
57
+ if (node.description !== void 0) {
58
+ normalized.description = requireString(node.description, "description");
59
+ }
60
+ if (node.href !== void 0) normalized.href = requireString(node.href, "href");
61
+ if (node.sortOrder !== void 0) {
62
+ if (node.sortOrder !== "asc" && node.sortOrder !== "desc") {
63
+ throw new TypeError("[zudo-doc] SiteTreeNav island node sortOrder is invalid.");
64
+ }
65
+ normalized.sortOrder = node.sortOrder;
66
+ }
67
+ if (node.collapsed !== void 0) {
68
+ normalized.collapsed = requireBoolean(node.collapsed, "collapsed");
69
+ }
70
+ if (node.shape !== void 0) {
71
+ if (node.shape !== "note-tray") {
72
+ throw new TypeError("[zudo-doc] SiteTreeNav island node shape is invalid.");
73
+ }
74
+ normalized.shape = node.shape;
75
+ }
76
+ if (node.noteTrayDated !== void 0) {
77
+ normalized.noteTrayDated = requireBoolean(node.noteTrayDated, "noteTrayDated");
78
+ }
79
+ if (node.noteTraySidebar !== void 0) {
80
+ if (node.noteTraySidebar !== "index" && node.noteTraySidebar !== "year" && node.noteTraySidebar !== "month") {
81
+ throw new TypeError("[zudo-doc] SiteTreeNav island node noteTraySidebar is invalid.");
82
+ }
83
+ normalized.noteTraySidebar = node.noteTraySidebar;
84
+ }
85
+ if (node.date !== void 0) normalized.date = requireString(node.date, "date");
86
+ if (node.updated !== void 0) normalized.updated = requireString(node.updated, "updated");
87
+ if (node.rank !== void 0) normalized.rank = node.rank;
88
+ return normalized;
89
+ } finally {
90
+ ancestors.delete(node);
91
+ }
92
+ }
93
+ function normalizeStringArray(values, name) {
94
+ if (!Array.isArray(values)) {
95
+ throw new TypeError(`[zudo-doc] SiteTreeNav island ${name} must be an array.`);
96
+ }
97
+ return Array.from(values, (value) => requireString(value, name));
98
+ }
99
+ function normalizeDateFormats(value) {
100
+ return {
101
+ full: requireString(value.full, "dateFormats.full"),
102
+ monthDay: requireString(value.monthDay, "dateFormats.monthDay"),
103
+ year: requireString(value.year, "dateFormats.year"),
104
+ yearMonth: requireString(value.yearMonth, "dateFormats.yearMonth"),
105
+ numericMonthDay: requireString(value.numericMonthDay, "dateFormats.numericMonthDay")
106
+ };
107
+ }
108
+ function requireString(value, name) {
109
+ if (typeof value !== "string") {
110
+ throw new TypeError(`[zudo-doc] SiteTreeNav island ${name} must be a string.`);
111
+ }
112
+ return value;
113
+ }
114
+ function requireBoolean(value, name) {
115
+ if (typeof value !== "boolean") {
116
+ throw new TypeError(`[zudo-doc] SiteTreeNav island ${name} must be boolean.`);
117
+ }
118
+ return value;
119
+ }
120
+ export {
121
+ normalizeSiteTreeNavProps
122
+ };
@@ -10,16 +10,16 @@ export interface SiteTreeNavProps {
10
10
  /** Locale used by dated note-tray rows. */
11
11
  locale?: string;
12
12
  /**
13
- * Per-role date patterns already resolved for this page's locale, serialized
13
+ * Per-role date patterns already resolved for the page's locale, serialized
14
14
  * into the island's `data-props` by the SSR wrapper (`site-tree-nav`,
15
15
  * `home-page`). Optional and absent-safe: an omitted value means every role
16
- * behaves as `"locale"` — today's `Intl` output (#4075).
16
+ * behaves as "locale" — today's `Intl` output (#4075).
17
17
  */
18
18
  dateFormats?: ResolvedDateFormats;
19
19
  /** @deprecated — no longer rendered (created date only). */
20
20
  updatedLabel?: string;
21
21
  }
22
- export declare function SiteTreeNav({ tree, ariaLabel, categoryOrder, categoryIgnore, initiallyCollapsedCategorySlugs, locale, dateFormats, updatedLabel, }: SiteTreeNavProps): import("preact").JSX.Element;
22
+ export declare function SiteTreeNav({ tree, ariaLabel, categoryOrder, categoryIgnore, initiallyCollapsedCategorySlugs, locale, dateFormats, updatedLabel, }: SiteTreeNavProps): import("@takazudo/zfb").Description;
23
23
  export declare namespace SiteTreeNav {
24
24
  var displayName: string;
25
25
  }
@@ -1,6 +1,11 @@
1
1
  "use client";
2
- import { Fragment, jsx, jsxs } from "preact/jsx-runtime";
3
- import { useState } from "preact/hooks";
2
+ import { Fragment, jsx, jsxs } from "@takazudo/zfb/zudo-react/jsx-runtime";
3
+ import {
4
+ computed,
5
+ For,
6
+ Show,
7
+ signal
8
+ } from "@takazudo/zfb/zudo-react";
4
9
  import {
5
10
  INDENT,
6
11
  connectorLeft,
@@ -56,58 +61,66 @@ function SiteTreeNav({
56
61
  if (categoryOrder) {
57
62
  processedTree = reorderTree(processedTree, categoryOrder);
58
63
  }
64
+ const roots = signal(processedTree);
59
65
  const initiallyCollapsed = new Set(initiallyCollapsedCategorySlugs);
60
66
  return /* @__PURE__ */ jsx(
61
67
  "nav",
62
68
  {
63
69
  "aria-label": ariaLabel,
64
70
  "data-site-nav": true,
65
- className: "grid gap-vsp-md",
71
+ class: "grid gap-vsp-md",
66
72
  style: {
67
- gridTemplateColumns: "repeat(auto-fill, minmax(min(18rem, 100%), 1fr))"
73
+ "grid-template-columns": "repeat(auto-fill, minmax(min(18rem, 100%), 1fr))"
68
74
  },
69
- children: processedTree.map((node) => {
70
- if (node.shape === "note-tray" && getNoteTrayItems(node).length === 0) {
71
- return null;
72
- }
73
- return /* @__PURE__ */ jsx("div", { className: "min-w-0 border border-muted pl-hsp-sm py-vsp-2xs", children: node.children.length > 0 ? /* @__PURE__ */ jsx(
74
- CategoryNode,
75
+ children: /* @__PURE__ */ jsx(For, { each: roots, by: (node) => node.slug, children: (node, index) => {
76
+ const isLast = computed(() => index.value === roots.value.length - 1);
77
+ return /* @__PURE__ */ jsx(
78
+ Show,
75
79
  {
76
- node,
77
- depth: 0,
78
- isLast: true,
79
- initiallyCollapsed: initiallyCollapsed.has(node.slug),
80
- locale,
81
- dateFormats,
82
- updatedLabel
80
+ when: computed(
81
+ () => node.value.shape !== "note-tray" || getNoteTrayItems(node.value).length > 0
82
+ ),
83
+ children: () => /* @__PURE__ */ jsx("div", { class: "min-w-0 border border-muted pl-hsp-sm py-vsp-2xs", children: /* @__PURE__ */ jsx(
84
+ Show,
85
+ {
86
+ when: computed(() => node.value.children.length > 0),
87
+ fallback: () => /* @__PURE__ */ jsx(LeafNode, { node, depth: 0, isLast }),
88
+ children: () => /* @__PURE__ */ jsx(
89
+ CategoryNode,
90
+ {
91
+ node,
92
+ depth: 0,
93
+ isLast,
94
+ initiallyCollapsed: initiallyCollapsed.has(node.value.slug),
95
+ locale,
96
+ dateFormats,
97
+ updatedLabel
98
+ }
99
+ )
100
+ }
101
+ ) })
83
102
  }
84
- ) : /* @__PURE__ */ jsx(LeafNode, { node, depth: 0, isLast: true }) }, node.slug);
85
- })
103
+ );
104
+ } })
86
105
  }
87
106
  );
88
107
  }
89
108
  SiteTreeNav.displayName = "SiteTreeNav";
90
- function NodeList({ nodes, depth }) {
91
- return /* @__PURE__ */ jsx(Fragment, { children: nodes.map((node, index) => {
92
- const isLast = index === nodes.length - 1;
93
- return node.children.length > 0 ? /* @__PURE__ */ jsx(
94
- CategoryNode,
95
- {
96
- node,
97
- depth,
98
- isLast
99
- },
100
- node.slug
101
- ) : /* @__PURE__ */ jsx(
102
- LeafNode,
109
+ function NodeList({
110
+ nodes,
111
+ depth
112
+ }) {
113
+ return /* @__PURE__ */ jsx(For, { each: nodes, by: (node) => node.slug, children: (node, index) => {
114
+ const isLast = computed(() => index.value === nodes.value.length - 1);
115
+ return /* @__PURE__ */ jsx(
116
+ Show,
103
117
  {
104
- node,
105
- depth,
106
- isLast
107
- },
108
- node.slug
118
+ when: computed(() => node.value.children.length > 0),
119
+ fallback: () => /* @__PURE__ */ jsx(LeafNode, { node, depth, isLast }),
120
+ children: () => /* @__PURE__ */ jsx(CategoryNode, { node, depth, isLast })
121
+ }
109
122
  );
110
- }) });
123
+ } });
111
124
  }
112
125
  function CategoryNode({
113
126
  node,
@@ -118,80 +131,121 @@ function CategoryNode({
118
131
  dateFormats,
119
132
  updatedLabel = "Updated"
120
133
  }) {
121
- const [open, setOpen] = useState(() => initialCategoryOpenState(initiallyCollapsed));
122
- const toggle = () => setOpen(toggleCategoryOpenState);
134
+ const open = signal(initialCategoryOpenState(initiallyCollapsed));
135
+ const toggle = () => {
136
+ open.value = toggleCategoryOpenState(open.value);
137
+ };
138
+ const label = computed(() => node.value.label);
139
+ const href = computed(() => node.value.href);
140
+ const children = computed(() => node.value.children);
123
141
  const paddingLeft = padLeft(depth);
124
- return /* @__PURE__ */ jsxs("div", { className: `${depth >= 1 && !isLast ? "relative" : ""}`, children: [
125
- depth >= 1 && !isLast && open && /* @__PURE__ */ jsx(
142
+ return /* @__PURE__ */ jsxs("div", { class: computed(() => depth >= 1 && !isLast.value ? "relative" : ""), children: [
143
+ /* @__PURE__ */ jsx(Show, { when: computed(() => depth >= 1 && !isLast.value && open.value), children: () => /* @__PURE__ */ jsx(
126
144
  "div",
127
145
  {
128
- className: "absolute border-l border-dashed border-muted z-local-1",
146
+ class: "absolute border-l border-dashed border-muted z-local-1",
129
147
  style: {
130
148
  left: connectorLeft(depth),
131
- top: 0,
132
- bottom: 0
149
+ top: "0px",
150
+ bottom: "0px"
133
151
  }
134
152
  }
135
- ),
136
- /* @__PURE__ */ jsxs("div", { className: "relative", children: [
137
- /* @__PURE__ */ jsx(
153
+ ) }),
154
+ /* @__PURE__ */ jsxs("div", { class: "relative", children: [
155
+ /* @__PURE__ */ jsx(Show, { when: isLast, children: () => /* @__PURE__ */ jsx(
138
156
  ConnectorLines,
139
157
  {
140
158
  depth,
141
- isLast,
159
+ isLast: true,
142
160
  widthScale: 2,
143
161
  topPad: "calc(0.15rem + var(--spacing-vsp-xs))"
144
162
  }
145
- ),
163
+ ) }),
164
+ /* @__PURE__ */ jsx(Show, { when: computed(() => !isLast.value), children: () => /* @__PURE__ */ jsx(
165
+ ConnectorLines,
166
+ {
167
+ depth,
168
+ isLast: false,
169
+ widthScale: 2,
170
+ topPad: "calc(0.15rem + var(--spacing-vsp-xs))"
171
+ }
172
+ ) }),
146
173
  /* @__PURE__ */ jsxs(
147
174
  "div",
148
175
  {
149
- className: "flex w-full items-center justify-between text-small font-semibold pt-[0.15rem] text-fg",
150
- style: { paddingLeft },
176
+ class: "flex w-full items-center justify-between text-small font-semibold pt-[0.15rem] text-fg",
177
+ style: { "padding-left": paddingLeft },
151
178
  children: [
152
- node.href ? /* @__PURE__ */ jsxs(
153
- "a",
154
- {
155
- href: node.href,
156
- className: "flex-1 flex items-start gap-hsp-xs py-vsp-xs text-fg hover:text-accent hover:underline focus:underline focus-visible:text-accent",
157
- children: [
158
- depth === 0 && /* @__PURE__ */ jsx("span", { className: "flex h-[1lh] items-center", children: /* @__PURE__ */ jsx(CategoryLinkIcon, { className: "w-[18px] 2xl:w-[24px]" }) }),
159
- node.label
160
- ]
161
- }
162
- ) : /* @__PURE__ */ jsx(
163
- "button",
179
+ /* @__PURE__ */ jsx(
180
+ Show,
164
181
  {
165
- type: "button",
166
- onClick: toggle,
167
- className: "flex-1 min-w-0 break-words py-vsp-xs text-left hover:text-accent hover:underline focus:underline",
168
- children: node.label
182
+ when: computed(() => Boolean(href.value)),
183
+ fallback: () => /* @__PURE__ */ jsx(
184
+ "button",
185
+ {
186
+ type: "button",
187
+ "on:click": toggle,
188
+ class: "flex-1 min-w-0 break-words py-vsp-xs text-left hover:text-accent hover:underline focus:underline",
189
+ children: label
190
+ }
191
+ ),
192
+ children: () => /* @__PURE__ */ jsxs(
193
+ "a",
194
+ {
195
+ href: computed(() => href.value ?? ""),
196
+ class: "flex-1 flex items-start gap-hsp-xs py-vsp-xs text-fg hover:text-accent hover:underline focus:underline focus-visible:text-accent",
197
+ children: [
198
+ depth === 0 && /* @__PURE__ */ jsx("span", { class: "flex h-[1lh] items-center", children: /* @__PURE__ */ jsx(CategoryLinkIcon, { class: "w-[18px]" }) }),
199
+ label
200
+ ]
201
+ }
202
+ )
169
203
  }
170
204
  ),
171
205
  /* @__PURE__ */ jsx(
172
206
  "button",
173
207
  {
174
208
  type: "button",
175
- onClick: toggle,
176
- className: "aspect-square flex items-center justify-center w-[1.75rem] border-y border-l border-muted hover:underline focus:underline",
177
- "aria-expanded": open,
178
- "aria-label": open ? `Collapse ${node.label}` : `Expand ${node.label}`,
179
- children: /* @__PURE__ */ jsx(ChevronRight, { className: `h-icon-xs w-icon-xs transition-transform duration-150 ${open ? "rotate-90" : ""} text-muted` })
209
+ "on:click": toggle,
210
+ class: "aspect-square flex items-center justify-center w-[1.75rem] border-y border-l border-muted hover:underline focus:underline",
211
+ "aria-expanded": computed(() => open.value ? "true" : "false"),
212
+ "aria-label": computed(
213
+ () => `${open.value ? "Collapse" : "Expand"} ${label.value}`
214
+ ),
215
+ children: /* @__PURE__ */ jsx(
216
+ "span",
217
+ {
218
+ class: "inline-flex transition-transform duration-150",
219
+ style: computed(
220
+ () => `transform:rotate(${open.value ? "90deg" : "0deg"})`
221
+ ),
222
+ children: /* @__PURE__ */ jsx(ChevronRight, { class: "h-icon-xs w-icon-xs text-muted" })
223
+ }
224
+ )
180
225
  }
181
226
  )
182
227
  ]
183
228
  }
184
229
  )
185
230
  ] }),
186
- open && /* @__PURE__ */ jsx("div", { children: node.shape === "note-tray" && depth === 0 ? /* @__PURE__ */ jsx(
187
- NoteTrayNodeList,
231
+ /* @__PURE__ */ jsx(Show, { when: open, children: () => /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(
232
+ Show,
188
233
  {
189
- node,
190
- locale,
191
- dateFormats,
192
- updatedLabel
234
+ when: computed(
235
+ () => node.value.shape === "note-tray" && depth === 0
236
+ ),
237
+ fallback: () => /* @__PURE__ */ jsx(NodeList, { nodes: children, depth: depth + 1 }),
238
+ children: () => /* @__PURE__ */ jsx(
239
+ NoteTrayNodeList,
240
+ {
241
+ node,
242
+ locale,
243
+ dateFormats,
244
+ updatedLabel
245
+ }
246
+ )
193
247
  }
194
- ) : /* @__PURE__ */ jsx(NodeList, { nodes: node.children, depth: depth + 1 }) })
248
+ ) }) })
195
249
  ] });
196
250
  }
197
251
  function NoteTrayNodeList({
@@ -200,104 +254,149 @@ function NoteTrayNodeList({
200
254
  dateFormats,
201
255
  updatedLabel
202
256
  }) {
203
- const items = getNoteTrayItems(node);
204
- const width = rankWidth(items);
205
- const showDate = node.noteTrayDated === true;
206
- const grouping = showDate && node.noteTraySidebar !== "index" ? node.noteTraySidebar : void 0;
207
- if (grouping === "year" || grouping === "month") {
208
- return /* @__PURE__ */ jsx("div", { className: "pl-hsp-md pr-hsp-sm", children: groupItems(items, grouping, node.sortOrder ?? "asc").map((group) => /* @__PURE__ */ jsxs("div", { "data-note-tray-group": group.key, children: [
209
- /* @__PURE__ */ jsx("div", { className: "pt-vsp-sm pb-vsp-2xs text-micro tracking-wide uppercase text-muted", children: grouping === "year" ? formatYearLabel(group.key, locale, dateFormats?.year) : formatYearMonthLabel(group.key, locale, dateFormats?.yearMonth) }),
210
- group.items.map((item) => /* @__PURE__ */ jsx(
211
- NoteTrayRow,
212
- {
213
- item,
214
- locale,
215
- dateFormats,
216
- updatedLabel,
217
- rankWidth: width,
218
- showDate,
219
- groupedDate: true
220
- },
221
- item.slug
222
- ))
223
- ] }, group.key)) });
224
- }
225
- return /* @__PURE__ */ jsx("div", { className: "pl-hsp-md pr-hsp-sm", children: items.map((item) => /* @__PURE__ */ jsx(
226
- NoteTrayRow,
227
- {
228
- item,
229
- locale,
230
- dateFormats,
231
- updatedLabel,
232
- rankWidth: width,
233
- showDate,
234
- groupedDate: false
235
- },
236
- item.slug
237
- )) });
257
+ const items = computed(() => getNoteTrayItems(node.value));
258
+ const width = computed(() => rankWidth(items.value));
259
+ const showDate = computed(() => node.value.noteTrayDated === true);
260
+ const grouping = computed(() => {
261
+ const mode = node.value.noteTraySidebar;
262
+ return showDate.value && mode !== "index" ? mode : void 0;
263
+ });
264
+ const groups = computed(() => {
265
+ const mode = grouping.value;
266
+ if (mode !== "year" && mode !== "month") return [];
267
+ return groupItems(items.value, mode, node.value.sortOrder ?? "asc");
268
+ });
269
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
270
+ /* @__PURE__ */ jsx(Show, { when: computed(() => grouping.value === "year" || grouping.value === "month"), children: () => /* @__PURE__ */ jsx("div", { class: "pl-hsp-md pr-hsp-sm", children: /* @__PURE__ */ jsx(For, { each: groups, by: (group) => group.key, children: (group) => {
271
+ const groupItemsSignal = computed(() => group.value.items);
272
+ const heading = computed(() => {
273
+ const mode = grouping.value;
274
+ return mode === "year" ? formatYearLabel(group.value.key, locale, dateFormats?.year) : formatYearMonthLabel(group.value.key, locale, dateFormats?.yearMonth);
275
+ });
276
+ return /* @__PURE__ */ jsxs("div", { "data-note-tray-group": computed(() => group.value.key), children: [
277
+ /* @__PURE__ */ jsx("div", { class: "pt-vsp-sm pb-vsp-2xs text-micro tracking-wide uppercase text-muted", children: heading }),
278
+ /* @__PURE__ */ jsx(For, { each: groupItemsSignal, by: (item) => item.slug, children: (item) => /* @__PURE__ */ jsx(
279
+ NoteTrayRow,
280
+ {
281
+ item,
282
+ locale,
283
+ dateFormats,
284
+ updatedLabel,
285
+ rankWidth: width,
286
+ showDate,
287
+ groupedDate: true
288
+ }
289
+ ) })
290
+ ] });
291
+ } }) }) }),
292
+ /* @__PURE__ */ jsx(Show, { when: computed(() => grouping.value !== "year" && grouping.value !== "month"), children: () => /* @__PURE__ */ jsx("div", { class: "pl-hsp-md pr-hsp-sm", children: /* @__PURE__ */ jsx(For, { each: items, by: (item) => item.slug, children: (item) => /* @__PURE__ */ jsx(
293
+ NoteTrayRow,
294
+ {
295
+ item,
296
+ locale,
297
+ dateFormats,
298
+ updatedLabel,
299
+ rankWidth: width,
300
+ showDate,
301
+ groupedDate: false
302
+ }
303
+ ) }) }) })
304
+ ] });
238
305
  }
239
306
  function NoteTrayRow({
240
307
  item,
241
308
  locale,
242
309
  dateFormats,
243
- updatedLabel,
244
310
  rankWidth: width,
245
311
  showDate,
246
312
  groupedDate
247
313
  }) {
248
- if (!item.href) return null;
249
- const dateLabel = showDate && item.date ? groupedDate ? formatMonthDay(item.date, dateFormats?.numericMonthDay, locale) : formatDate(item.date, locale, dateFormats?.full) : void 0;
250
- return /* @__PURE__ */ jsxs(
314
+ const href = computed(() => item.value.href);
315
+ const dateLabel = computed(() => {
316
+ if (!showDate.value || !item.value.date) return void 0;
317
+ return groupedDate ? formatMonthDay(item.value.date, dateFormats?.numericMonthDay, locale) : formatDate(item.value.date, locale, dateFormats?.full);
318
+ });
319
+ const rankLabel = computed(
320
+ () => item.value.rank === void 0 ? "" : String(item.value.rank).padStart(width.value, "0")
321
+ );
322
+ return /* @__PURE__ */ jsx(Show, { when: computed(() => Boolean(href.value)), children: () => /* @__PURE__ */ jsxs(
251
323
  "a",
252
324
  {
253
- href: item.href,
325
+ href: computed(() => href.value ?? ""),
254
326
  "data-note-tray-row": true,
255
- className: "flex items-start gap-hsp-sm py-vsp-2xs text-small text-fg hover:text-accent hover:underline focus:underline focus-visible:text-accent",
327
+ class: "flex items-start gap-hsp-sm py-vsp-2xs text-small text-fg hover:text-accent hover:underline focus:underline focus-visible:text-accent",
256
328
  children: [
257
- dateLabel ? /* @__PURE__ */ jsx(
258
- "time",
329
+ /* @__PURE__ */ jsx(
330
+ Show,
259
331
  {
260
- dateTime: item.date,
261
- className: "shrink-0 font-mono tabular-nums text-caption text-muted",
262
- children: dateLabel
263
- }
264
- ) : /* @__PURE__ */ jsx(
265
- "span",
266
- {
267
- className: "shrink-0 font-mono tabular-nums text-caption text-muted",
268
- style: { width: `${width}ch` },
269
- children: item.rank === void 0 ? "" : String(item.rank).padStart(width, "0")
332
+ when: computed(() => Boolean(dateLabel.value)),
333
+ fallback: () => /* @__PURE__ */ jsx(
334
+ "span",
335
+ {
336
+ class: "shrink-0 font-mono tabular-nums text-caption text-muted",
337
+ style: computed(() => ({ width: `${width.value}ch` })),
338
+ children: rankLabel
339
+ }
340
+ ),
341
+ children: () => /* @__PURE__ */ jsx(
342
+ "time",
343
+ {
344
+ datetime: computed(() => item.value.date ?? ""),
345
+ class: "shrink-0 font-mono tabular-nums text-caption text-muted",
346
+ children: computed(() => dateLabel.value ?? "")
347
+ }
348
+ )
270
349
  }
271
350
  ),
272
- /* @__PURE__ */ jsx("span", { className: "min-w-0 break-words", children: /* @__PURE__ */ jsx("span", { children: item.label }) })
351
+ /* @__PURE__ */ jsx("span", { class: "min-w-0 break-words", children: /* @__PURE__ */ jsx("span", { children: computed(() => item.value.label) }) })
273
352
  ]
274
353
  }
275
- );
354
+ ) });
276
355
  }
277
356
  function LeafNode({
278
357
  node,
279
358
  depth,
280
359
  isLast
281
360
  }) {
282
- if (!node.href) return null;
361
+ const href = computed(() => node.value.href);
362
+ const label = computed(() => node.value.label);
283
363
  const isRoot = depth === 0;
284
364
  const paddingLeft = padLeft(depth);
285
365
  const topPad = isRoot ? "calc(var(--spacing-vsp-xs) + 0.15rem)" : "var(--spacing-vsp-2xs)";
286
- return /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs("div", { className: "relative", children: [
287
- /* @__PURE__ */ jsx(ConnectorLines, { depth, isLast, widthScale: 2, topPad }),
366
+ return /* @__PURE__ */ jsx(Show, { when: computed(() => Boolean(href.value)), children: () => /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs("div", { class: "relative", children: [
367
+ /* @__PURE__ */ jsx(Show, { when: isLast, children: () => /* @__PURE__ */ jsx(
368
+ ConnectorLines,
369
+ {
370
+ depth,
371
+ isLast: true,
372
+ widthScale: 2,
373
+ topPad
374
+ }
375
+ ) }),
376
+ /* @__PURE__ */ jsx(Show, { when: computed(() => !isLast.value), children: () => /* @__PURE__ */ jsx(
377
+ ConnectorLines,
378
+ {
379
+ depth,
380
+ isLast: false,
381
+ widthScale: 2,
382
+ topPad
383
+ }
384
+ ) }),
288
385
  /* @__PURE__ */ jsxs(
289
386
  "a",
290
387
  {
291
- href: node.href,
292
- className: isRoot ? "flex items-start gap-hsp-xs py-[calc(var(--spacing-vsp-xs)+0.15rem)] pr-hsp-sm text-small font-semibold text-fg break-words hover:text-accent hover:underline focus:underline focus-visible:text-accent" : `block py-vsp-2xs pr-hsp-sm ${isLast ? "pb-vsp-xs" : ""} text-small text-fg break-words hover:text-accent hover:underline focus:underline focus-visible:text-accent`,
293
- style: { paddingLeft },
388
+ href: computed(() => href.value ?? ""),
389
+ class: computed(
390
+ () => isRoot ? "flex items-start gap-hsp-xs py-[calc(var(--spacing-vsp-xs)_+_0.15rem)] pr-hsp-sm text-small font-semibold text-fg break-words hover:text-accent hover:underline focus:underline focus-visible:text-accent" : `block py-vsp-2xs pr-hsp-sm ${isLast.value ? "pb-vsp-xs" : ""} text-small text-fg break-words hover:text-accent hover:underline focus:underline focus-visible:text-accent`
391
+ ),
392
+ style: { "padding-left": paddingLeft },
294
393
  children: [
295
- isRoot && /* @__PURE__ */ jsx("span", { className: "flex h-[1lh] items-center", children: /* @__PURE__ */ jsx(CategoryLinkIcon, { className: "w-[18px] 2xl:w-[24px]" }) }),
296
- isRoot ? /* @__PURE__ */ jsx("span", { className: "min-w-0", children: node.label }) : node.label
394
+ isRoot && /* @__PURE__ */ jsx("span", { class: "flex h-[1lh] items-center", children: /* @__PURE__ */ jsx(CategoryLinkIcon, { class: "w-[18px]" }) }),
395
+ isRoot ? /* @__PURE__ */ jsx("span", { class: "min-w-0", children: label }) : label
297
396
  ]
298
397
  }
299
398
  )
300
- ] }) });
399
+ ] }) }) });
301
400
  }
302
401
  export {
303
402
  SiteTreeNav