@fumadocs/base-ui 16.6.17 → 16.7.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 (372) hide show
  1. package/css/generated/docs.css +64 -32
  2. package/css/generated/flux.css +36 -32
  3. package/css/generated/home.css +39 -55
  4. package/css/generated/notebook.css +58 -31
  5. package/css/generated/shared.css +41 -24
  6. package/dist/components/accordion.d.ts +1 -2
  7. package/dist/components/accordion.js +0 -2
  8. package/dist/components/banner.d.ts +1 -2
  9. package/dist/components/banner.js +0 -2
  10. package/dist/components/callout.d.ts +1 -2
  11. package/dist/components/callout.js +0 -2
  12. package/dist/components/card.d.ts +1 -2
  13. package/dist/components/card.js +0 -2
  14. package/dist/components/codeblock.d.ts +1 -2
  15. package/dist/components/codeblock.js +0 -2
  16. package/dist/components/codeblock.rsc.d.ts +1 -2
  17. package/dist/components/codeblock.rsc.js +1 -2
  18. package/dist/components/dialog/search-algolia.d.ts +1 -2
  19. package/dist/components/dialog/search-algolia.js +0 -2
  20. package/dist/components/dialog/search-default.d.ts +1 -2
  21. package/dist/components/dialog/search-default.js +0 -2
  22. package/dist/components/dialog/search-orama.d.ts +1 -2
  23. package/dist/components/dialog/search-orama.js +0 -2
  24. package/dist/components/dialog/search.d.ts +1 -2
  25. package/dist/components/dialog/search.js +0 -2
  26. package/dist/components/dynamic-codeblock.core.d.ts +7 -5
  27. package/dist/components/dynamic-codeblock.core.js +16 -29
  28. package/dist/components/dynamic-codeblock.d.ts +5 -3
  29. package/dist/components/dynamic-codeblock.js +7 -10
  30. package/dist/components/files.d.ts +1 -2
  31. package/dist/components/files.js +0 -2
  32. package/dist/components/github-info.d.ts +22 -9
  33. package/dist/components/github-info.js +33 -27
  34. package/dist/components/heading.d.ts +1 -2
  35. package/dist/components/heading.js +0 -2
  36. package/dist/components/image-zoom.d.ts +1 -2
  37. package/dist/components/image-zoom.js +0 -2
  38. package/dist/components/inline-toc.d.ts +1 -2
  39. package/dist/components/inline-toc.js +0 -2
  40. package/dist/components/sidebar/base.d.ts +1 -2
  41. package/dist/components/sidebar/base.js +0 -2
  42. package/dist/components/sidebar/link-item.d.ts +2 -3
  43. package/dist/components/sidebar/link-item.js +3 -4
  44. package/dist/components/sidebar/page-tree.d.ts +1 -2
  45. package/dist/components/sidebar/page-tree.js +0 -2
  46. package/dist/components/sidebar/tabs/dropdown.d.ts +4 -7
  47. package/dist/components/sidebar/tabs/dropdown.js +2 -7
  48. package/dist/components/sidebar/tabs/index.d.ts +3 -17
  49. package/dist/components/sidebar/tabs/index.js +0 -2
  50. package/dist/components/steps.d.ts +1 -2
  51. package/dist/components/steps.js +0 -2
  52. package/dist/components/tabs.d.ts +1 -2
  53. package/dist/components/tabs.js +0 -2
  54. package/dist/components/toc/clerk.d.ts +1 -2
  55. package/dist/components/toc/clerk.js +0 -2
  56. package/dist/components/toc/default.d.ts +1 -2
  57. package/dist/components/toc/default.js +0 -2
  58. package/dist/components/toc/index.d.ts +3 -3
  59. package/dist/components/toc/index.js +0 -2
  60. package/dist/components/type-table.d.ts +1 -2
  61. package/dist/components/type-table.js +0 -2
  62. package/dist/components/ui/accordion.d.ts +1 -2
  63. package/dist/components/ui/accordion.js +0 -2
  64. package/dist/components/ui/button.d.ts +1 -2
  65. package/dist/components/ui/button.js +0 -2
  66. package/dist/components/ui/collapsible.d.ts +1 -2
  67. package/dist/components/ui/collapsible.js +0 -2
  68. package/dist/components/ui/navigation-menu.d.ts +5 -3
  69. package/dist/components/ui/navigation-menu.js +13 -4
  70. package/dist/components/ui/popover.d.ts +1 -2
  71. package/dist/components/ui/popover.js +0 -2
  72. package/dist/components/ui/scroll-area.d.ts +1 -2
  73. package/dist/components/ui/scroll-area.js +0 -2
  74. package/dist/components/ui/tabs.d.ts +1 -2
  75. package/dist/components/ui/tabs.js +0 -2
  76. package/dist/contexts/i18n.d.ts +7 -5
  77. package/dist/contexts/i18n.js +2 -5
  78. package/dist/contexts/search.d.ts +1 -2
  79. package/dist/contexts/search.js +0 -2
  80. package/dist/contexts/tree.d.ts +1 -2
  81. package/dist/contexts/tree.js +0 -2
  82. package/dist/i18n.d.ts +11 -8
  83. package/dist/i18n.js +2 -4
  84. package/dist/layouts/docs/client.d.ts +28 -30
  85. package/dist/layouts/docs/client.js +66 -42
  86. package/dist/layouts/docs/index.d.ts +19 -33
  87. package/dist/layouts/docs/index.js +16 -171
  88. package/dist/layouts/docs/page/client.d.ts +87 -37
  89. package/dist/layouts/docs/page/client.js +76 -191
  90. package/dist/layouts/docs/page/index.d.ts +5 -82
  91. package/dist/layouts/docs/page/index.js +9 -51
  92. package/dist/layouts/docs/page/slots/breadcrumb.d.ts +14 -0
  93. package/dist/layouts/docs/page/slots/breadcrumb.js +42 -0
  94. package/dist/layouts/docs/page/slots/container.d.ts +7 -0
  95. package/dist/layouts/docs/page/slots/container.js +16 -0
  96. package/dist/layouts/docs/page/slots/footer.d.ts +23 -0
  97. package/dist/layouts/docs/page/slots/footer.js +55 -0
  98. package/dist/layouts/docs/page/slots/toc-popover.d.ts +31 -0
  99. package/dist/layouts/docs/page/slots/toc-popover.js +141 -0
  100. package/dist/layouts/docs/page/slots/toc.d.ts +27 -0
  101. package/dist/layouts/docs/page/slots/toc.js +28 -0
  102. package/dist/layouts/docs/slots/container.d.ts +7 -0
  103. package/dist/layouts/docs/slots/container.js +28 -0
  104. package/dist/layouts/docs/slots/header.d.ts +8 -0
  105. package/dist/layouts/docs/slots/header.js +37 -0
  106. package/dist/layouts/docs/slots/sidebar.d.ts +30 -0
  107. package/dist/layouts/docs/slots/sidebar.js +329 -0
  108. package/dist/layouts/flux/index.d.ts +34 -38
  109. package/dist/layouts/flux/index.js +71 -95
  110. package/dist/layouts/flux/page/client.d.ts +72 -35
  111. package/dist/layouts/flux/page/client.js +60 -219
  112. package/dist/layouts/flux/page/index.d.ts +6 -75
  113. package/dist/layouts/flux/page/index.js +5 -30
  114. package/dist/layouts/flux/page/slots/breadcrumb.d.ts +14 -0
  115. package/dist/layouts/flux/page/slots/breadcrumb.js +43 -0
  116. package/dist/layouts/flux/page/slots/container.d.ts +7 -0
  117. package/dist/layouts/flux/page/slots/container.js +16 -0
  118. package/dist/layouts/flux/page/slots/footer.d.ts +23 -0
  119. package/dist/layouts/flux/page/slots/footer.js +55 -0
  120. package/dist/layouts/flux/page/slots/toc.d.ts +31 -0
  121. package/dist/layouts/flux/page/slots/toc.js +169 -0
  122. package/dist/layouts/flux/slots/container.d.ts +7 -0
  123. package/dist/layouts/flux/slots/container.js +12 -0
  124. package/dist/layouts/flux/slots/sidebar.d.ts +23 -0
  125. package/dist/layouts/flux/{sidebar.js → slots/sidebar.js} +68 -25
  126. package/dist/layouts/flux/slots/tab-dropdown.d.ts +17 -0
  127. package/dist/layouts/flux/{tab-dropdown.js → slots/tab-dropdown.js} +11 -20
  128. package/dist/layouts/home/index.d.ts +24 -7
  129. package/dist/layouts/home/index.js +36 -18
  130. package/dist/layouts/home/navbar.d.ts +3 -10
  131. package/dist/layouts/home/navbar.js +17 -14
  132. package/dist/layouts/home/not-found.d.ts +1 -2
  133. package/dist/layouts/home/not-found.js +0 -2
  134. package/dist/layouts/home/slots/container.d.ts +7 -0
  135. package/dist/layouts/home/slots/container.js +12 -0
  136. package/dist/layouts/home/slots/header.d.ts +12 -0
  137. package/dist/layouts/home/slots/header.js +232 -0
  138. package/dist/layouts/notebook/client.d.ts +31 -43
  139. package/dist/layouts/notebook/client.js +54 -144
  140. package/dist/layouts/notebook/index.d.ts +25 -24
  141. package/dist/layouts/notebook/index.js +16 -211
  142. package/dist/layouts/notebook/page/client.d.ts +87 -37
  143. package/dist/layouts/notebook/page/client.js +76 -191
  144. package/dist/layouts/notebook/page/index.d.ts +6 -82
  145. package/dist/layouts/notebook/page/index.js +12 -51
  146. package/dist/layouts/notebook/page/slots/breadcrumb.d.ts +14 -0
  147. package/dist/layouts/notebook/page/slots/breadcrumb.js +43 -0
  148. package/dist/layouts/notebook/page/slots/container.d.ts +7 -0
  149. package/dist/layouts/notebook/page/slots/container.js +16 -0
  150. package/dist/layouts/notebook/page/slots/footer.d.ts +23 -0
  151. package/dist/layouts/notebook/page/slots/footer.js +55 -0
  152. package/dist/layouts/notebook/page/slots/toc-popover.d.ts +31 -0
  153. package/dist/layouts/notebook/page/slots/toc-popover.js +141 -0
  154. package/dist/layouts/notebook/page/slots/toc.d.ts +27 -0
  155. package/dist/layouts/notebook/page/slots/toc.js +28 -0
  156. package/dist/layouts/notebook/slots/container.d.ts +7 -0
  157. package/dist/layouts/notebook/slots/container.js +30 -0
  158. package/dist/layouts/notebook/slots/header.d.ts +8 -0
  159. package/dist/layouts/notebook/slots/header.js +194 -0
  160. package/dist/layouts/notebook/slots/sidebar.d.ts +40 -0
  161. package/dist/layouts/notebook/slots/sidebar.js +307 -0
  162. package/dist/layouts/shared/client.d.ts +45 -0
  163. package/dist/layouts/shared/client.js +84 -0
  164. package/dist/layouts/shared/index.d.ts +134 -32
  165. package/dist/layouts/shared/index.js +49 -16
  166. package/dist/layouts/shared/page-actions.d.ts +1 -2
  167. package/dist/layouts/shared/page-actions.js +10 -6
  168. package/dist/layouts/shared/slots/language-select.d.ts +10 -0
  169. package/dist/layouts/shared/{language-toggle.js → slots/language-select.js} +10 -12
  170. package/dist/layouts/shared/slots/search-trigger.d.ts +23 -0
  171. package/dist/layouts/shared/{search-toggle.js → slots/search-trigger.js} +9 -11
  172. package/dist/layouts/shared/slots/theme-switch.d.ts +14 -0
  173. package/dist/layouts/shared/{theme-toggle.js → slots/theme-switch.js} +4 -6
  174. package/dist/mdx.d.ts +1 -2
  175. package/dist/mdx.js +0 -2
  176. package/dist/mdx.server.d.ts +1 -2
  177. package/dist/mdx.server.js +0 -2
  178. package/dist/og/takumi.d.ts +1 -2
  179. package/dist/og/takumi.js +0 -2
  180. package/dist/og.d.ts +1 -2
  181. package/dist/og.js +0 -2
  182. package/dist/page.d.ts +4 -4
  183. package/dist/page.js +5 -7
  184. package/dist/provider/base.d.ts +1 -2
  185. package/dist/provider/base.js +1 -3
  186. package/dist/provider/next.d.ts +1 -2
  187. package/dist/provider/next.js +0 -2
  188. package/dist/provider/react-router.d.ts +1 -2
  189. package/dist/provider/react-router.js +0 -2
  190. package/dist/provider/tanstack.d.ts +1 -2
  191. package/dist/provider/tanstack.js +0 -2
  192. package/dist/provider/waku.d.ts +1 -2
  193. package/dist/provider/waku.js +0 -2
  194. package/dist/style.css +83 -89
  195. package/dist/utils/merge-refs.js +0 -2
  196. package/dist/utils/urls.js +0 -2
  197. package/dist/utils/use-copy-button.d.ts +1 -2
  198. package/dist/utils/use-copy-button.js +0 -2
  199. package/dist/utils/use-footer-items.d.ts +1 -2
  200. package/dist/utils/use-footer-items.js +0 -2
  201. package/dist/utils/use-is-scroll-top.d.ts +1 -2
  202. package/dist/utils/use-is-scroll-top.js +0 -2
  203. package/package.json +105 -85
  204. package/dist/components/accordion.d.ts.map +0 -1
  205. package/dist/components/accordion.js.map +0 -1
  206. package/dist/components/banner.d.ts.map +0 -1
  207. package/dist/components/banner.js.map +0 -1
  208. package/dist/components/callout.d.ts.map +0 -1
  209. package/dist/components/callout.js.map +0 -1
  210. package/dist/components/card.d.ts.map +0 -1
  211. package/dist/components/card.js.map +0 -1
  212. package/dist/components/codeblock.d.ts.map +0 -1
  213. package/dist/components/codeblock.js.map +0 -1
  214. package/dist/components/codeblock.rsc.d.ts.map +0 -1
  215. package/dist/components/codeblock.rsc.js.map +0 -1
  216. package/dist/components/dialog/search-algolia.d.ts.map +0 -1
  217. package/dist/components/dialog/search-algolia.js.map +0 -1
  218. package/dist/components/dialog/search-default.d.ts.map +0 -1
  219. package/dist/components/dialog/search-default.js.map +0 -1
  220. package/dist/components/dialog/search-orama.d.ts.map +0 -1
  221. package/dist/components/dialog/search-orama.js.map +0 -1
  222. package/dist/components/dialog/search.d.ts.map +0 -1
  223. package/dist/components/dialog/search.js.map +0 -1
  224. package/dist/components/dynamic-codeblock.core.d.ts.map +0 -1
  225. package/dist/components/dynamic-codeblock.core.js.map +0 -1
  226. package/dist/components/dynamic-codeblock.d.ts.map +0 -1
  227. package/dist/components/dynamic-codeblock.js.map +0 -1
  228. package/dist/components/files.d.ts.map +0 -1
  229. package/dist/components/files.js.map +0 -1
  230. package/dist/components/github-info.d.ts.map +0 -1
  231. package/dist/components/github-info.js.map +0 -1
  232. package/dist/components/heading.d.ts.map +0 -1
  233. package/dist/components/heading.js.map +0 -1
  234. package/dist/components/image-zoom.d.ts.map +0 -1
  235. package/dist/components/image-zoom.js.map +0 -1
  236. package/dist/components/inline-toc.d.ts.map +0 -1
  237. package/dist/components/inline-toc.js.map +0 -1
  238. package/dist/components/sidebar/base.d.ts.map +0 -1
  239. package/dist/components/sidebar/base.js.map +0 -1
  240. package/dist/components/sidebar/link-item.d.ts.map +0 -1
  241. package/dist/components/sidebar/link-item.js.map +0 -1
  242. package/dist/components/sidebar/page-tree.d.ts.map +0 -1
  243. package/dist/components/sidebar/page-tree.js.map +0 -1
  244. package/dist/components/sidebar/tabs/dropdown.d.ts.map +0 -1
  245. package/dist/components/sidebar/tabs/dropdown.js.map +0 -1
  246. package/dist/components/sidebar/tabs/index.d.ts.map +0 -1
  247. package/dist/components/sidebar/tabs/index.js.map +0 -1
  248. package/dist/components/steps.d.ts.map +0 -1
  249. package/dist/components/steps.js.map +0 -1
  250. package/dist/components/tabs.d.ts.map +0 -1
  251. package/dist/components/tabs.js.map +0 -1
  252. package/dist/components/toc/clerk.d.ts.map +0 -1
  253. package/dist/components/toc/clerk.js.map +0 -1
  254. package/dist/components/toc/default.d.ts.map +0 -1
  255. package/dist/components/toc/default.js.map +0 -1
  256. package/dist/components/toc/index.d.ts.map +0 -1
  257. package/dist/components/toc/index.js.map +0 -1
  258. package/dist/components/type-table.d.ts.map +0 -1
  259. package/dist/components/type-table.js.map +0 -1
  260. package/dist/components/ui/accordion.d.ts.map +0 -1
  261. package/dist/components/ui/accordion.js.map +0 -1
  262. package/dist/components/ui/button.d.ts.map +0 -1
  263. package/dist/components/ui/button.js.map +0 -1
  264. package/dist/components/ui/collapsible.d.ts.map +0 -1
  265. package/dist/components/ui/collapsible.js.map +0 -1
  266. package/dist/components/ui/navigation-menu.d.ts.map +0 -1
  267. package/dist/components/ui/navigation-menu.js.map +0 -1
  268. package/dist/components/ui/popover.d.ts.map +0 -1
  269. package/dist/components/ui/popover.js.map +0 -1
  270. package/dist/components/ui/scroll-area.d.ts.map +0 -1
  271. package/dist/components/ui/scroll-area.js.map +0 -1
  272. package/dist/components/ui/tabs.d.ts.map +0 -1
  273. package/dist/components/ui/tabs.js.map +0 -1
  274. package/dist/contexts/i18n.d.ts.map +0 -1
  275. package/dist/contexts/i18n.js.map +0 -1
  276. package/dist/contexts/search.d.ts.map +0 -1
  277. package/dist/contexts/search.js.map +0 -1
  278. package/dist/contexts/tree.d.ts.map +0 -1
  279. package/dist/contexts/tree.js.map +0 -1
  280. package/dist/i18n.d.ts.map +0 -1
  281. package/dist/i18n.js.map +0 -1
  282. package/dist/layouts/docs/client.d.ts.map +0 -1
  283. package/dist/layouts/docs/client.js.map +0 -1
  284. package/dist/layouts/docs/index.d.ts.map +0 -1
  285. package/dist/layouts/docs/index.js.map +0 -1
  286. package/dist/layouts/docs/page/client.d.ts.map +0 -1
  287. package/dist/layouts/docs/page/client.js.map +0 -1
  288. package/dist/layouts/docs/page/index.d.ts.map +0 -1
  289. package/dist/layouts/docs/page/index.js.map +0 -1
  290. package/dist/layouts/docs/sidebar.d.ts +0 -63
  291. package/dist/layouts/docs/sidebar.d.ts.map +0 -1
  292. package/dist/layouts/docs/sidebar.js +0 -160
  293. package/dist/layouts/docs/sidebar.js.map +0 -1
  294. package/dist/layouts/flux/index.d.ts.map +0 -1
  295. package/dist/layouts/flux/index.js.map +0 -1
  296. package/dist/layouts/flux/page/client.d.ts.map +0 -1
  297. package/dist/layouts/flux/page/client.js.map +0 -1
  298. package/dist/layouts/flux/page/index.d.ts.map +0 -1
  299. package/dist/layouts/flux/page/index.js.map +0 -1
  300. package/dist/layouts/flux/sidebar.d.ts +0 -58
  301. package/dist/layouts/flux/sidebar.d.ts.map +0 -1
  302. package/dist/layouts/flux/sidebar.js.map +0 -1
  303. package/dist/layouts/flux/tab-dropdown.d.ts +0 -21
  304. package/dist/layouts/flux/tab-dropdown.d.ts.map +0 -1
  305. package/dist/layouts/flux/tab-dropdown.js.map +0 -1
  306. package/dist/layouts/home/client.d.ts +0 -19
  307. package/dist/layouts/home/client.d.ts.map +0 -1
  308. package/dist/layouts/home/client.js +0 -262
  309. package/dist/layouts/home/client.js.map +0 -1
  310. package/dist/layouts/home/index.d.ts.map +0 -1
  311. package/dist/layouts/home/index.js.map +0 -1
  312. package/dist/layouts/home/navbar.d.ts.map +0 -1
  313. package/dist/layouts/home/navbar.js.map +0 -1
  314. package/dist/layouts/home/not-found.d.ts.map +0 -1
  315. package/dist/layouts/home/not-found.js.map +0 -1
  316. package/dist/layouts/notebook/client.d.ts.map +0 -1
  317. package/dist/layouts/notebook/client.js.map +0 -1
  318. package/dist/layouts/notebook/index.d.ts.map +0 -1
  319. package/dist/layouts/notebook/index.js.map +0 -1
  320. package/dist/layouts/notebook/page/client.d.ts.map +0 -1
  321. package/dist/layouts/notebook/page/client.js.map +0 -1
  322. package/dist/layouts/notebook/page/index.d.ts.map +0 -1
  323. package/dist/layouts/notebook/page/index.js.map +0 -1
  324. package/dist/layouts/notebook/sidebar.d.ts +0 -59
  325. package/dist/layouts/notebook/sidebar.d.ts.map +0 -1
  326. package/dist/layouts/notebook/sidebar.js +0 -131
  327. package/dist/layouts/notebook/sidebar.js.map +0 -1
  328. package/dist/layouts/shared/index.d.ts.map +0 -1
  329. package/dist/layouts/shared/index.js.map +0 -1
  330. package/dist/layouts/shared/language-toggle.d.ts +0 -10
  331. package/dist/layouts/shared/language-toggle.d.ts.map +0 -1
  332. package/dist/layouts/shared/language-toggle.js.map +0 -1
  333. package/dist/layouts/shared/page-actions.d.ts.map +0 -1
  334. package/dist/layouts/shared/page-actions.js.map +0 -1
  335. package/dist/layouts/shared/search-toggle.d.ts +0 -23
  336. package/dist/layouts/shared/search-toggle.d.ts.map +0 -1
  337. package/dist/layouts/shared/search-toggle.js.map +0 -1
  338. package/dist/layouts/shared/theme-toggle.d.ts +0 -14
  339. package/dist/layouts/shared/theme-toggle.d.ts.map +0 -1
  340. package/dist/layouts/shared/theme-toggle.js.map +0 -1
  341. package/dist/mdx.d.ts.map +0 -1
  342. package/dist/mdx.js.map +0 -1
  343. package/dist/mdx.server.d.ts.map +0 -1
  344. package/dist/mdx.server.js.map +0 -1
  345. package/dist/og/takumi.d.ts.map +0 -1
  346. package/dist/og/takumi.js.map +0 -1
  347. package/dist/og.d.ts.map +0 -1
  348. package/dist/og.js.map +0 -1
  349. package/dist/page.d.ts.map +0 -1
  350. package/dist/page.js.map +0 -1
  351. package/dist/provider/base.d.ts.map +0 -1
  352. package/dist/provider/base.js.map +0 -1
  353. package/dist/provider/next.d.ts.map +0 -1
  354. package/dist/provider/next.js.map +0 -1
  355. package/dist/provider/react-router.d.ts.map +0 -1
  356. package/dist/provider/react-router.js.map +0 -1
  357. package/dist/provider/tanstack.d.ts.map +0 -1
  358. package/dist/provider/tanstack.js.map +0 -1
  359. package/dist/provider/waku.d.ts.map +0 -1
  360. package/dist/provider/waku.js.map +0 -1
  361. package/dist/utils/link-item.d.ts +0 -87
  362. package/dist/utils/link-item.d.ts.map +0 -1
  363. package/dist/utils/link-item.js +0 -27
  364. package/dist/utils/link-item.js.map +0 -1
  365. package/dist/utils/merge-refs.js.map +0 -1
  366. package/dist/utils/urls.js.map +0 -1
  367. package/dist/utils/use-copy-button.d.ts.map +0 -1
  368. package/dist/utils/use-copy-button.js.map +0 -1
  369. package/dist/utils/use-footer-items.d.ts.map +0 -1
  370. package/dist/utils/use-footer-items.js.map +0 -1
  371. package/dist/utils/use-is-scroll-top.d.ts.map +0 -1
  372. package/dist/utils/use-is-scroll-top.js.map +0 -1
@@ -1,33 +1,36 @@
1
1
  "use client";
2
2
  import { cn } from "../../utils/cn.js";
3
3
  import { NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuTrigger } from "../../components/ui/navigation-menu.js";
4
- import { navItemVariants } from "./client.js";
4
+ import { navItemVariants } from "./slots/header.js";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
  import Link from "fumadocs-core/link";
7
7
  //#region src/layouts/home/navbar.tsx
8
8
  const NavbarMenu = NavigationMenuItem;
9
- function NavbarMenuContent({ className, ...props }) {
9
+ function NavbarMenuContent(props) {
10
+ const { className, ...rest } = props;
10
11
  return /* @__PURE__ */ jsx(NavigationMenuContent, {
11
- className: (s) => cn("grid grid-cols-1 gap-2 p-4 md:grid-cols-2 lg:grid-cols-3", typeof className === "function" ? className(s) : className),
12
- ...props,
12
+ ...rest,
13
+ className: (state) => cn("grid grid-cols-1 gap-2 p-4 md:grid-cols-2 lg:grid-cols-3", typeof className === "function" ? className(state) : className),
13
14
  children: props.children
14
15
  });
15
16
  }
16
- function NavbarMenuTrigger({ className, ...props }) {
17
+ function NavbarMenuTrigger(props) {
18
+ const { className, ...rest } = props;
17
19
  return /* @__PURE__ */ jsx(NavigationMenuTrigger, {
18
- ...props,
19
- className: (s) => cn(navItemVariants(), "text-sm rounded-md", typeof className === "function" ? className(s) : className),
20
+ ...rest,
21
+ className: (state) => cn(navItemVariants(), "text-sm rounded-md", typeof className === "function" ? className(state) : className),
20
22
  children: props.children
21
23
  });
22
24
  }
23
25
  function NavbarMenuLink(props) {
24
- return /* @__PURE__ */ jsx(NavigationMenuLink, { render: /* @__PURE__ */ jsx(Link, {
25
- ...props,
26
- className: cn("flex flex-col gap-2 rounded-lg border bg-fd-card p-3 transition-colors hover:bg-fd-accent/80 hover:text-fd-accent-foreground", props.className),
27
- children: props.children
28
- }) });
26
+ return /* @__PURE__ */ jsx(NavigationMenuLink, {
27
+ asChild: true,
28
+ children: /* @__PURE__ */ jsx(Link, {
29
+ ...props,
30
+ className: cn("flex flex-col gap-2 rounded-lg border bg-fd-card p-3 transition-colors hover:bg-fd-accent/80 hover:text-fd-accent-foreground", props.className),
31
+ children: props.children
32
+ })
33
+ });
29
34
  }
30
35
  //#endregion
31
36
  export { NavbarMenu, NavbarMenuContent, NavbarMenuLink, NavbarMenuTrigger };
32
-
33
- //# sourceMappingURL=navbar.js.map
@@ -6,5 +6,4 @@ import * as react_jsx_runtime0 from "react/jsx-runtime";
6
6
  */
7
7
  declare function DefaultNotFound(): react_jsx_runtime0.JSX.Element;
8
8
  //#endregion
9
- export { DefaultNotFound };
10
- //# sourceMappingURL=not-found.d.ts.map
9
+ export { DefaultNotFound };
@@ -36,5 +36,3 @@ function DefaultNotFound() {
36
36
  }
37
37
  //#endregion
38
38
  export { DefaultNotFound };
39
-
40
- //# sourceMappingURL=not-found.js.map
@@ -0,0 +1,7 @@
1
+ import { ComponentProps } from "react";
2
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
3
+
4
+ //#region src/layouts/home/slots/container.d.ts
5
+ declare function Container(props: ComponentProps<'main'>): react_jsx_runtime0.JSX.Element;
6
+ //#endregion
7
+ export { Container };
@@ -0,0 +1,12 @@
1
+ import { cn } from "../../../utils/cn.js";
2
+ import { jsx } from "react/jsx-runtime";
3
+ //#region src/layouts/home/slots/container.tsx
4
+ function Container(props) {
5
+ return /* @__PURE__ */ jsx("main", {
6
+ id: "nd-home-layout",
7
+ ...props,
8
+ className: cn("flex flex-1 flex-col [--fd-layout-width:1400px]", props.className)
9
+ });
10
+ }
11
+ //#endregion
12
+ export { Container };
@@ -0,0 +1,12 @@
1
+ import * as react from "react";
2
+ import { ComponentProps } from "react";
3
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
4
+ import * as class_variance_authority_types0 from "class-variance-authority/types";
5
+
6
+ //#region src/layouts/home/slots/header.d.ts
7
+ declare const navItemVariants: (props?: ({
8
+ variant?: "button" | "main" | "icon" | null | undefined;
9
+ } & class_variance_authority_types0.ClassProp) | undefined) => string;
10
+ declare function Header(props: ComponentProps<'header'>): string | number | bigint | true | react_jsx_runtime0.JSX.Element | Iterable<react.ReactNode> | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<react.ReactNode> | null | undefined>;
11
+ //#endregion
12
+ export { Header, navItemVariants };
@@ -0,0 +1,232 @@
1
+ "use client";
2
+ import { cn } from "../../../utils/cn.js";
3
+ import { buttonVariants } from "../../../components/ui/button.js";
4
+ import { useIsScrollTop } from "../../../utils/use-is-scroll-top.js";
5
+ import { LinkItem } from "../../shared/client.js";
6
+ import "../../shared/index.js";
7
+ import { NavigationMenu as NavigationMenuRoot, NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport } from "../../../components/ui/navigation-menu.js";
8
+ import { useHomeLayout } from "../index.js";
9
+ import { Fragment, useState } from "react";
10
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
11
+ import Link from "fumadocs-core/link";
12
+ import { ChevronDown, Languages } from "lucide-react";
13
+ import { cva } from "class-variance-authority";
14
+ //#region src/layouts/home/slots/header.tsx
15
+ const navItemVariants = cva("[&_svg]:size-4", {
16
+ variants: { variant: {
17
+ main: "inline-flex items-center gap-1 p-2 text-fd-muted-foreground transition-colors hover:text-fd-accent-foreground data-[active=true]:text-fd-primary",
18
+ button: buttonVariants({
19
+ color: "secondary",
20
+ className: "gap-1.5"
21
+ }),
22
+ icon: buttonVariants({
23
+ color: "ghost",
24
+ size: "icon"
25
+ })
26
+ } },
27
+ defaultVariants: { variant: "main" }
28
+ });
29
+ function Header(props) {
30
+ const { navItems, menuItems, slots, props: { nav } } = useHomeLayout();
31
+ if (nav?.component) return nav.component;
32
+ return /* @__PURE__ */ jsxs(HeaderNavigationMenu, {
33
+ transparentMode: nav?.transparentMode,
34
+ ...props,
35
+ children: [
36
+ slots.navTitle && /* @__PURE__ */ jsx(slots.navTitle, { className: "inline-flex items-center gap-2.5 font-semibold" }),
37
+ nav?.children,
38
+ /* @__PURE__ */ jsx("ul", {
39
+ className: "flex flex-row items-center gap-2 px-6 max-sm:hidden",
40
+ children: navItems.filter((item) => !isSecondary(item)).map((item, i) => /* @__PURE__ */ jsx(NavigationMenuLinkItem, {
41
+ item,
42
+ className: "text-sm"
43
+ }, i))
44
+ }),
45
+ /* @__PURE__ */ jsxs("div", {
46
+ className: "flex flex-row items-center justify-end gap-1.5 flex-1 max-lg:hidden",
47
+ children: [
48
+ slots.searchTrigger?.full && /* @__PURE__ */ jsx(slots.searchTrigger.full, {
49
+ hideIfDisabled: true,
50
+ className: "w-full rounded-full ps-2.5 max-w-[240px]"
51
+ }),
52
+ slots.themeSwitch && /* @__PURE__ */ jsx(slots.themeSwitch, {}),
53
+ slots.languageSelect?.root && /* @__PURE__ */ jsx(slots.languageSelect.root, { children: /* @__PURE__ */ jsx(Languages, { className: "size-5" }) }),
54
+ /* @__PURE__ */ jsx("ul", {
55
+ className: "flex flex-row gap-2 items-center empty:hidden",
56
+ children: navItems.filter(isSecondary).map((item, i) => /* @__PURE__ */ jsx(NavigationMenuLinkItem, {
57
+ className: cn(item.type === "icon" && "-mx-1 first:ms-0 last:me-0"),
58
+ item
59
+ }, i))
60
+ })
61
+ ]
62
+ }),
63
+ /* @__PURE__ */ jsxs("div", {
64
+ className: "flex flex-row items-center ms-auto -me-1.5 lg:hidden",
65
+ children: [slots.searchTrigger?.sm && /* @__PURE__ */ jsx(slots.searchTrigger.sm, {
66
+ hideIfDisabled: true,
67
+ className: "p-2"
68
+ }), /* @__PURE__ */ jsx(NavigationMenuItem, { children: /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx(NavigationMenuTrigger, {
69
+ "aria-label": "Toggle Menu",
70
+ className: cn(buttonVariants({
71
+ size: "icon",
72
+ color: "ghost",
73
+ className: "group [&_svg]:size-5.5"
74
+ })),
75
+ onPointerMove: nav?.enableHoverToOpen ? void 0 : (e) => e.preventDefault(),
76
+ children: /* @__PURE__ */ jsx(ChevronDown, { className: "transition-transform duration-300 group-data-[state=open]:rotate-180" })
77
+ }), /* @__PURE__ */ jsxs(NavigationMenuContent, {
78
+ className: "flex flex-col p-4 sm:flex-row sm:items-center sm:justify-end",
79
+ children: [menuItems.filter((item) => !isSecondary(item)).map((item, i) => /* @__PURE__ */ jsx(MobileNavigationMenuLinkItem, {
80
+ item,
81
+ className: "sm:hidden"
82
+ }, i)), /* @__PURE__ */ jsxs("div", {
83
+ className: "-ms-1.5 flex flex-row items-center gap-2 max-sm:mt-2",
84
+ children: [
85
+ menuItems.filter(isSecondary).map((item, i) => /* @__PURE__ */ jsx(MobileNavigationMenuLinkItem, {
86
+ item,
87
+ className: cn(item.type === "icon" && "-mx-1 first:ms-0")
88
+ }, i)),
89
+ /* @__PURE__ */ jsx("div", {
90
+ role: "separator",
91
+ className: "flex-1"
92
+ }),
93
+ slots.languageSelect?.root && /* @__PURE__ */ jsxs(slots.languageSelect.root, { children: [
94
+ /* @__PURE__ */ jsx(Languages, { className: "size-5" }),
95
+ slots.languageSelect.text && /* @__PURE__ */ jsx(slots.languageSelect.text, {}),
96
+ /* @__PURE__ */ jsx(ChevronDown, { className: "size-3 text-fd-muted-foreground" })
97
+ ] }),
98
+ slots.themeSwitch && /* @__PURE__ */ jsx(slots.themeSwitch, {})
99
+ ]
100
+ })]
101
+ })] }) })]
102
+ })
103
+ ]
104
+ });
105
+ }
106
+ function isSecondary(item) {
107
+ if ("secondary" in item && item.secondary != null) return item.secondary;
108
+ return item.type === "icon";
109
+ }
110
+ function HeaderNavigationMenu({ transparentMode = "none", ...props }) {
111
+ const [value, setValue] = useState("");
112
+ const isTop = useIsScrollTop({ enabled: transparentMode === "top" }) ?? true;
113
+ const isTransparent = transparentMode === "top" ? isTop : transparentMode === "always";
114
+ return /* @__PURE__ */ jsx("header", {
115
+ id: "nd-nav",
116
+ ...props,
117
+ className: cn("sticky h-14 top-0 z-40", props.className),
118
+ children: /* @__PURE__ */ jsx(NavigationMenuRoot, {
119
+ value,
120
+ onValueChange: setValue,
121
+ children: /* @__PURE__ */ jsxs("div", {
122
+ className: cn("backdrop-blur-lg border-b transition-colors *:mx-auto *:max-w-(--fd-layout-width)", value.length > 0 && "max-lg:shadow-lg max-lg:rounded-b-2xl", (!isTransparent || value.length > 0) && "bg-fd-background/80"),
123
+ children: [/* @__PURE__ */ jsx(NavigationMenuList, {
124
+ className: "flex h-14 w-full items-center px-4",
125
+ children: props.children
126
+ }), /* @__PURE__ */ jsx(NavigationMenuViewport, {})]
127
+ })
128
+ })
129
+ });
130
+ }
131
+ function NavigationMenuLinkItem({ item, ...props }) {
132
+ if (item.type === "custom") return item.children;
133
+ if (item.type === "menu") {
134
+ const children = item.items.map((child, j) => {
135
+ if (child.type === "custom") return /* @__PURE__ */ jsx(Fragment, { children: child.children }, j);
136
+ const { banner = child.icon ? /* @__PURE__ */ jsx("div", {
137
+ className: "w-fit rounded-md border bg-fd-muted p-1 [&_svg]:size-4",
138
+ children: child.icon
139
+ }) : null, ...rest } = child.menu ?? {};
140
+ return /* @__PURE__ */ jsx(NavigationMenuLink, {
141
+ asChild: true,
142
+ children: /* @__PURE__ */ jsx(Link, {
143
+ href: child.url,
144
+ external: child.external,
145
+ ...rest,
146
+ className: cn("flex flex-col gap-2 rounded-lg border bg-fd-card p-3 transition-colors hover:bg-fd-accent/80 hover:text-fd-accent-foreground", rest.className),
147
+ children: rest.children ?? /* @__PURE__ */ jsxs(Fragment$1, { children: [
148
+ banner,
149
+ /* @__PURE__ */ jsx("p", {
150
+ className: "text-base font-medium",
151
+ children: child.text
152
+ }),
153
+ /* @__PURE__ */ jsx("p", {
154
+ className: "text-sm text-fd-muted-foreground empty:hidden",
155
+ children: child.description
156
+ })
157
+ ] })
158
+ })
159
+ }, `${j}-${child.url}`);
160
+ });
161
+ return /* @__PURE__ */ jsxs(NavigationMenuItem, {
162
+ ...props,
163
+ children: [/* @__PURE__ */ jsx(NavigationMenuTrigger, {
164
+ className: cn(navItemVariants(), "rounded-md"),
165
+ children: item.url ? /* @__PURE__ */ jsx(Link, {
166
+ href: item.url,
167
+ external: item.external,
168
+ children: item.text
169
+ }) : item.text
170
+ }), /* @__PURE__ */ jsx(NavigationMenuContent, {
171
+ className: "grid grid-cols-1 gap-2 p-4 md:grid-cols-2 lg:grid-cols-3",
172
+ children
173
+ })]
174
+ });
175
+ }
176
+ return /* @__PURE__ */ jsx(NavigationMenuItem, {
177
+ ...props,
178
+ children: /* @__PURE__ */ jsx(NavigationMenuLink, {
179
+ asChild: true,
180
+ children: /* @__PURE__ */ jsx(LinkItem, {
181
+ item,
182
+ "aria-label": item.type === "icon" ? item.label : void 0,
183
+ className: cn(navItemVariants({ variant: item.type })),
184
+ children: item.type === "icon" ? item.icon : item.text
185
+ })
186
+ })
187
+ });
188
+ }
189
+ function MobileNavigationMenuLinkItem({ item, ...props }) {
190
+ if (item.type === "custom") return /* @__PURE__ */ jsx("div", {
191
+ className: cn("grid", props.className),
192
+ children: item.children
193
+ });
194
+ if (item.type === "menu") {
195
+ const header = /* @__PURE__ */ jsxs(Fragment$1, { children: [item.icon, item.text] });
196
+ return /* @__PURE__ */ jsxs("div", {
197
+ className: cn("mb-4 flex flex-col", props.className),
198
+ children: [/* @__PURE__ */ jsx("p", {
199
+ className: "mb-1 text-sm text-fd-muted-foreground",
200
+ children: item.url ? /* @__PURE__ */ jsx(NavigationMenuLink, {
201
+ asChild: true,
202
+ children: /* @__PURE__ */ jsx(Link, {
203
+ href: item.url,
204
+ external: item.external,
205
+ children: header
206
+ })
207
+ }) : header
208
+ }), item.items.map((child, i) => /* @__PURE__ */ jsx(MobileNavigationMenuLinkItem, { item: child }, i))]
209
+ });
210
+ }
211
+ return /* @__PURE__ */ jsx(NavigationMenuLink, {
212
+ asChild: true,
213
+ children: /* @__PURE__ */ jsxs(LinkItem, {
214
+ item,
215
+ className: cn({
216
+ main: "inline-flex items-center gap-2 py-1.5 transition-colors hover:text-fd-popover-foreground/50 data-[active=true]:font-medium data-[active=true]:text-fd-primary [&_svg]:size-4",
217
+ icon: buttonVariants({
218
+ size: "icon",
219
+ color: "ghost"
220
+ }),
221
+ button: buttonVariants({
222
+ color: "secondary",
223
+ className: "gap-1.5 [&_svg]:size-4"
224
+ })
225
+ }[item.type ?? "main"], props.className),
226
+ "aria-label": item.type === "icon" ? item.label : void 0,
227
+ children: [item.icon, item.type === "icon" ? void 0 : item.text]
228
+ })
229
+ });
230
+ }
231
+ //#endregion
232
+ export { Header, navItemVariants };
@@ -1,47 +1,35 @@
1
- import { LinkItemType } from "../../utils/link-item.js";
2
- import { SidebarTabWithProps } from "../../components/sidebar/tabs/dropdown.js";
3
- import * as react from "react";
4
- import { ComponentProps, HTMLAttributes, ReactNode } from "react";
5
- import * as react_jsx_runtime0 from "react/jsx-runtime";
6
-
1
+ import { BaseSlots, BaseSlotsProps } from "../shared/client.js";
2
+ import { LayoutTab, LinkItemType } from "../shared/index.js";
3
+ import { SidebarProps, SidebarProviderProps } from "./slots/sidebar.js";
4
+ import { DocsLayoutProps } from "./index.js";
5
+ import { ComponentProps, FC } from "react";
7
6
  //#region src/layouts/notebook/client.d.ts
8
- declare function useNotebookLayout(): LayoutInfo & {
7
+ interface DocsSlots extends BaseSlots {
8
+ container?: FC<ComponentProps<'div'>>;
9
+ header?: FC<ComponentProps<'header'>>;
10
+ sidebar?: {
11
+ provider: FC<SidebarProviderProps>;
12
+ root: FC<SidebarProps>;
13
+ trigger: FC<ComponentProps<'button'>>;
14
+ collapseTrigger: FC<ComponentProps<'button'>>;
15
+ useSidebar: () => {
16
+ collapsed: boolean;
17
+ open: boolean;
18
+ setOpen: (V: boolean) => void;
19
+ };
20
+ };
21
+ }
22
+ interface SlotsProps extends BaseSlotsProps<DocsLayoutProps> {
23
+ sidebar: SidebarProps;
24
+ tabMode: NonNullable<DocsLayoutProps['tabMode']>;
25
+ tabs: LayoutTab[];
26
+ }
27
+ declare function useNotebookLayout(): {
28
+ props: SlotsProps;
9
29
  isNavTransparent: boolean;
30
+ navItems: LinkItemType[];
31
+ menuItems: LinkItemType[];
32
+ slots: DocsSlots;
10
33
  };
11
- interface LayoutInfo {
12
- tabMode: 'sidebar' | 'navbar';
13
- navMode: 'top' | 'auto';
14
- }
15
- declare function LayoutContextProvider({
16
- navTransparentMode,
17
- navMode,
18
- tabMode,
19
- children
20
- }: LayoutInfo & {
21
- navTransparentMode?: 'always' | 'top' | 'none';
22
- children: ReactNode;
23
- }): react_jsx_runtime0.JSX.Element;
24
- declare function LayoutHeader(props: ComponentProps<'header'>): react_jsx_runtime0.JSX.Element;
25
- declare function LayoutBody({
26
- className,
27
- style,
28
- children,
29
- ...props
30
- }: ComponentProps<'div'>): react_jsx_runtime0.JSX.Element;
31
- declare function LayoutHeaderTabs({
32
- options,
33
- className,
34
- ...props
35
- }: ComponentProps<'div'> & {
36
- options: SidebarTabWithProps[];
37
- }): react_jsx_runtime0.JSX.Element;
38
- declare function NavbarLinkItem({
39
- item,
40
- className,
41
- ...props
42
- }: {
43
- item: LinkItemType;
44
- } & HTMLAttributes<HTMLElement>): string | number | bigint | boolean | react_jsx_runtime0.JSX.Element | Iterable<ReactNode> | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | null | undefined;
45
34
  //#endregion
46
- export { LayoutBody, LayoutContextProvider, LayoutHeader, LayoutHeaderTabs, LayoutInfo, NavbarLinkItem, useNotebookLayout };
47
- //# sourceMappingURL=client.d.ts.map
35
+ export { DocsSlots, useNotebookLayout };
@@ -1,162 +1,72 @@
1
1
  "use client";
2
- import { cn } from "../../utils/cn.js";
3
- import { useSidebar } from "../../components/sidebar/base.js";
4
- import { Popover, PopoverContent, PopoverTrigger } from "../../components/ui/popover.js";
5
- import { isTabActive } from "../../components/sidebar/tabs/dropdown.js";
2
+ import { TreeContextProvider } from "../../contexts/tree.js";
6
3
  import { useIsScrollTop } from "../../utils/use-is-scroll-top.js";
7
- import { LinkItem } from "../../utils/link-item.js";
8
- import { Fragment, createContext, use, useMemo, useRef, useState } from "react";
9
- import { usePathname } from "fumadocs-core/framework";
10
- import { jsx, jsxs } from "react/jsx-runtime";
11
- import Link from "fumadocs-core/link";
12
- import { ChevronDown } from "lucide-react";
4
+ import { baseSlots } from "../shared/client.js";
5
+ import { useLinkItems } from "../shared/index.js";
6
+ import { Container } from "./slots/container.js";
7
+ import { Sidebar, SidebarCollapseTrigger, SidebarProvider, SidebarTrigger, useSidebar } from "./slots/sidebar.js";
8
+ import { Header } from "./slots/header.js";
9
+ import { createContext, use } from "react";
10
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
13
11
  //#region src/layouts/notebook/client.tsx
12
+ const { useProvider } = baseSlots({ useProps() {
13
+ return useNotebookLayout().props;
14
+ } });
14
15
  const LayoutContext = createContext(null);
15
16
  function useNotebookLayout() {
16
17
  const context = use(LayoutContext);
17
18
  if (!context) throw new Error("Please use <DocsPage /> (`fumadocs-ui/layouts/notebook/page`) under <DocsLayout /> (`fumadocs-ui/layouts/notebook`).");
18
19
  return context;
19
20
  }
20
- function LayoutContextProvider({ navTransparentMode = "none", navMode, tabMode, children }) {
21
+ function LayoutBody(props) {
22
+ const { nav: { enabled: navEnabled = true, transparentMode: navTransparentMode = "none" } = {}, sidebar: { defaultOpenLevel, prefetch, ...sidebarProps } = {}, slots: defaultSlots, tabMode = "sidebar", tabs, tree, containerProps, children } = props;
21
23
  const isTop = useIsScrollTop({ enabled: navTransparentMode === "top" }) ?? true;
22
24
  const isNavTransparent = navTransparentMode === "top" ? isTop : navTransparentMode === "always";
23
- return /* @__PURE__ */ jsx(LayoutContext, {
24
- value: useMemo(() => ({
25
- isNavTransparent,
26
- navMode,
27
- tabMode
28
- }), [
29
- isNavTransparent,
30
- navMode,
31
- tabMode
32
- ]),
25
+ const { baseSlots, baseProps } = useProvider(props);
26
+ const linkItems = useLinkItems(props);
27
+ const slots = {
28
+ ...baseSlots,
29
+ header: navEnabled ? defaultSlots?.header ?? Header : void 0,
30
+ container: defaultSlots?.container ?? Container,
31
+ sidebar: defaultSlots?.sidebar ?? {
32
+ provider: SidebarProvider,
33
+ root: Sidebar,
34
+ trigger: SidebarTrigger,
35
+ collapseTrigger: SidebarCollapseTrigger,
36
+ useSidebar
37
+ }
38
+ };
39
+ let content = /* @__PURE__ */ jsxs(Fragment$1, { children: [
40
+ slots.header && /* @__PURE__ */ jsx(slots.header, {}),
41
+ slots.sidebar && /* @__PURE__ */ jsx(slots.sidebar.root, { ...sidebarProps }),
33
42
  children
43
+ ] });
44
+ if (slots.container) content = /* @__PURE__ */ jsx(slots.container, {
45
+ ...containerProps,
46
+ children: content
34
47
  });
35
- }
36
- function LayoutHeader(props) {
37
- const { open } = useSidebar();
38
- const { isNavTransparent } = useNotebookLayout();
39
- return /* @__PURE__ */ jsx("header", {
40
- "data-transparent": isNavTransparent && !open,
41
- ...props,
42
- children: props.children
43
- });
44
- }
45
- function LayoutBody({ className, style, children, ...props }) {
46
- const { navMode } = useNotebookLayout();
47
- const { collapsed } = useSidebar();
48
- const pageCol = "calc(var(--fd-layout-width,97rem) - var(--fd-sidebar-col) - var(--fd-toc-width))";
49
- return /* @__PURE__ */ jsx("div", {
50
- id: "nd-notebook-layout",
51
- className: cn("grid overflow-x-clip min-h-(--fd-docs-height) transition-[grid-template-columns] auto-cols-auto auto-rows-auto [--fd-docs-height:100dvh] [--fd-header-height:0px] [--fd-toc-popover-height:0px] [--fd-sidebar-width:0px] [--fd-toc-width:0px]", className),
52
- style: {
53
- gridTemplate: navMode === "top" ? `". header header header ."
54
- "sidebar sidebar toc-popover toc-popover ."
55
- "sidebar sidebar main toc ." 1fr / minmax(min-content, 1fr) var(--fd-sidebar-col) minmax(0, ${pageCol}) var(--fd-toc-width) minmax(min-content, 1fr)` : `"sidebar sidebar header header ."
56
- "sidebar sidebar toc-popover toc-popover ."
57
- "sidebar sidebar main toc ." 1fr / minmax(min-content, 1fr) var(--fd-sidebar-col) minmax(0, ${pageCol}) var(--fd-toc-width) minmax(min-content, 1fr)`,
58
- "--fd-docs-row-1": "var(--fd-banner-height, 0px)",
59
- "--fd-docs-row-2": "calc(var(--fd-docs-row-1) + var(--fd-header-height))",
60
- "--fd-docs-row-3": "calc(var(--fd-docs-row-2) + var(--fd-toc-popover-height))",
61
- "--fd-sidebar-col": collapsed ? "0px" : "var(--fd-sidebar-width)",
62
- ...style
63
- },
64
- ...props,
65
- children
48
+ if (slots.sidebar) content = /* @__PURE__ */ jsx(slots.sidebar.provider, {
49
+ defaultOpenLevel,
50
+ prefetch,
51
+ children: content
66
52
  });
67
- }
68
- function LayoutHeaderTabs({ options, className, ...props }) {
69
- const pathname = usePathname();
70
- const selectedIdx = useMemo(() => {
71
- return options.findLastIndex((option) => isTabActive(option, pathname));
72
- }, [options, pathname]);
73
- return /* @__PURE__ */ jsx("div", {
74
- className: cn("flex flex-row items-end gap-6", className),
75
- ...props,
76
- children: options.map((option, i) => {
77
- const { title, url, unlisted, props: { className, ...rest } = {} } = option;
78
- const isSelected = selectedIdx === i;
79
- return /* @__PURE__ */ jsx(Link, {
80
- href: url,
81
- className: cn("inline-flex border-b-2 border-transparent transition-colors items-center pb-1.5 font-medium gap-2 text-fd-muted-foreground text-sm text-nowrap hover:text-fd-accent-foreground", unlisted && !isSelected && "hidden", isSelected && "border-fd-primary text-fd-primary", className),
82
- ...rest,
83
- children: title
84
- }, i);
53
+ return /* @__PURE__ */ jsx(TreeContextProvider, {
54
+ tree,
55
+ children: /* @__PURE__ */ jsx(LayoutContext, {
56
+ value: {
57
+ props: {
58
+ tabs,
59
+ tabMode,
60
+ sidebar: sidebarProps,
61
+ ...baseProps
62
+ },
63
+ isNavTransparent,
64
+ slots,
65
+ ...linkItems
66
+ },
67
+ children: content
85
68
  })
86
69
  });
87
70
  }
88
- function NavbarLinkItem({ item, className, ...props }) {
89
- if (item.type === "custom") return item.children;
90
- if (item.type === "menu") return /* @__PURE__ */ jsx(NavbarLinkItemMenu, {
91
- item,
92
- className,
93
- ...props
94
- });
95
- return /* @__PURE__ */ jsx(LinkItem, {
96
- item,
97
- className: cn("text-sm text-fd-muted-foreground transition-colors hover:text-fd-accent-foreground data-[active=true]:text-fd-primary", className),
98
- ...props,
99
- children: item.text
100
- });
101
- }
102
- function NavbarLinkItemMenu({ item, hoverDelay = 50, className, ...props }) {
103
- const [open, setOpen] = useState(false);
104
- const timeoutRef = useRef(null);
105
- const freezeUntil = useRef(null);
106
- const delaySetOpen = (value) => {
107
- if (timeoutRef.current) {
108
- clearTimeout(timeoutRef.current);
109
- timeoutRef.current = null;
110
- }
111
- timeoutRef.current = window.setTimeout(() => {
112
- setOpen(value);
113
- freezeUntil.current = Date.now() + 300;
114
- }, hoverDelay);
115
- };
116
- const onPointerEnter = (e) => {
117
- if (e.pointerType === "touch") return;
118
- delaySetOpen(true);
119
- };
120
- const onPointerLeave = (e) => {
121
- if (e.pointerType === "touch") return;
122
- delaySetOpen(false);
123
- };
124
- function isTouchDevice() {
125
- return "ontouchstart" in window || navigator.maxTouchPoints > 0;
126
- }
127
- return /* @__PURE__ */ jsxs(Popover, {
128
- open,
129
- onOpenChange: (value) => {
130
- if (freezeUntil.current === null || Date.now() >= freezeUntil.current) setOpen(value);
131
- },
132
- children: [/* @__PURE__ */ jsxs(PopoverTrigger, {
133
- className: cn("inline-flex items-center gap-1.5 p-1 text-sm text-fd-muted-foreground transition-colors has-data-[active=true]:text-fd-primary data-[state=open]:text-fd-accent-foreground focus-visible:outline-none", className),
134
- onPointerEnter,
135
- onPointerLeave,
136
- ...props,
137
- children: [item.url ? /* @__PURE__ */ jsx(LinkItem, {
138
- item,
139
- children: item.text
140
- }) : item.text, /* @__PURE__ */ jsx(ChevronDown, { className: "size-3" })]
141
- }), /* @__PURE__ */ jsx(PopoverContent, {
142
- className: "flex flex-col p-1 text-fd-muted-foreground text-start",
143
- onPointerEnter,
144
- onPointerLeave,
145
- children: item.items.map((child, i) => {
146
- if (child.type === "custom") return /* @__PURE__ */ jsx(Fragment, { children: child.children }, i);
147
- return /* @__PURE__ */ jsxs(LinkItem, {
148
- item: child,
149
- className: "inline-flex items-center gap-2 rounded-md p-2 transition-colors hover:bg-fd-accent hover:text-fd-accent-foreground data-[active=true]:text-fd-primary [&_svg]:size-4",
150
- onClick: () => {
151
- if (isTouchDevice()) setOpen(false);
152
- },
153
- children: [child.icon, child.text]
154
- }, i);
155
- })
156
- })]
157
- });
158
- }
159
71
  //#endregion
160
- export { LayoutBody, LayoutContextProvider, LayoutHeader, LayoutHeaderTabs, NavbarLinkItem, useNotebookLayout };
161
-
162
- //# sourceMappingURL=client.js.map
72
+ export { LayoutBody, useNotebookLayout };