@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
@@ -0,0 +1,307 @@
1
+ "use client";
2
+ import { cn } from "../../../utils/cn.js";
3
+ import { buttonVariants } from "../../../components/ui/button.js";
4
+ import { mergeRefs } from "../../../utils/merge-refs.js";
5
+ import { ScrollArea, ScrollViewport } from "../../../components/ui/scroll-area.js";
6
+ import { SidebarCollapseTrigger as SidebarCollapseTrigger$1, SidebarContent as SidebarContent$1, SidebarDrawerContent, SidebarDrawerOverlay, SidebarFolder as SidebarFolder$1, SidebarFolderContent as SidebarFolderContent$1, SidebarFolderLink as SidebarFolderLink$1, SidebarFolderTrigger as SidebarFolderTrigger$1, SidebarItem as SidebarItem$1, SidebarProvider as SidebarProvider$1, SidebarSeparator as SidebarSeparator$1, SidebarTrigger as SidebarTrigger$1, base_exports, useFolder, useFolderDepth } from "../../../components/sidebar/base.js";
7
+ import { createPageTreeRenderer } from "../../../components/sidebar/page-tree.js";
8
+ import { Popover, PopoverContent, PopoverTrigger } from "../../../components/ui/popover.js";
9
+ import { LinkItem } from "../../shared/client.js";
10
+ import { isLayoutTabActive } from "../../shared/index.js";
11
+ import { createLinkItemRenderer } from "../../../components/sidebar/link-item.js";
12
+ import { useNotebookLayout } from "../client.js";
13
+ import { createElement, useMemo, useRef, useState } from "react";
14
+ import { usePathname } from "fumadocs-core/framework";
15
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
16
+ import Link from "fumadocs-core/link";
17
+ import { Check, ChevronsUpDown, Languages, Sidebar as Sidebar$1, X } from "lucide-react";
18
+ import { cva } from "class-variance-authority";
19
+ //#region src/layouts/notebook/slots/sidebar.tsx
20
+ const itemVariants = cva("relative flex flex-row items-center gap-2 rounded-lg p-2 text-start text-fd-muted-foreground wrap-anywhere [&_svg]:size-4 [&_svg]:shrink-0", { variants: {
21
+ variant: {
22
+ link: "transition-colors hover:bg-fd-accent/50 hover:text-fd-accent-foreground/80 hover:transition-none data-[active=true]:bg-fd-primary/10 data-[active=true]:text-fd-primary data-[active=true]:hover:transition-colors",
23
+ button: "transition-colors hover:bg-fd-accent/50 hover:text-fd-accent-foreground/80 hover:transition-none"
24
+ },
25
+ highlight: { true: "data-[active=true]:before:content-[''] data-[active=true]:before:bg-fd-primary data-[active=true]:before:absolute data-[active=true]:before:w-px data-[active=true]:before:inset-y-2.5 data-[active=true]:before:start-2.5" }
26
+ } });
27
+ function getItemOffset(depth) {
28
+ return `calc(${2 + 3 * depth} * var(--spacing))`;
29
+ }
30
+ const { useSidebar } = base_exports;
31
+ function SidebarProvider(props) {
32
+ return /* @__PURE__ */ jsx(SidebarProvider$1, { ...props });
33
+ }
34
+ function SidebarTrigger(props) {
35
+ return /* @__PURE__ */ jsx(SidebarTrigger$1, { ...props });
36
+ }
37
+ function SidebarCollapseTrigger(props) {
38
+ return /* @__PURE__ */ jsx(SidebarCollapseTrigger$1, { ...props });
39
+ }
40
+ function SidebarViewport(props) {
41
+ const { className, ...rest } = props;
42
+ return /* @__PURE__ */ jsx(ScrollArea, {
43
+ ...rest,
44
+ className: (state) => cn("min-h-0 flex-1", typeof className === "function" ? className(state) : className),
45
+ children: /* @__PURE__ */ jsx(ScrollViewport, {
46
+ className: "p-4 overscroll-contain",
47
+ style: { maskImage: "linear-gradient(to bottom, transparent, white 12px, white calc(100% - 12px), transparent)" },
48
+ children: props.children
49
+ })
50
+ });
51
+ }
52
+ function SidebarContent({ ref: refProp, className, children, ...props }) {
53
+ const { props: { nav } } = useNotebookLayout();
54
+ const navMode = nav?.mode ?? "auto";
55
+ const ref = useRef(null);
56
+ return /* @__PURE__ */ jsx(SidebarContent$1, { children: ({ collapsed, hovered, ref: asideRef, ...rest }) => /* @__PURE__ */ jsxs("div", {
57
+ "data-sidebar-placeholder": "",
58
+ className: cn("sticky z-20 [grid-area:sidebar] pointer-events-none *:pointer-events-auto md:layout:[--fd-sidebar-width:268px] max-md:hidden", navMode === "auto" ? "top-(--fd-docs-row-1) h-[calc(var(--fd-docs-height)-var(--fd-docs-row-1))]" : "top-(--fd-docs-row-2) h-[calc(var(--fd-docs-height)-var(--fd-docs-row-2))]"),
59
+ children: [collapsed && /* @__PURE__ */ jsx("div", {
60
+ className: "absolute start-0 inset-y-0 w-4",
61
+ ...rest
62
+ }), /* @__PURE__ */ jsx("aside", {
63
+ id: "nd-sidebar",
64
+ ref: mergeRefs(ref, refProp, asideRef),
65
+ "data-collapsed": collapsed,
66
+ "data-hovered": collapsed && hovered,
67
+ className: cn("absolute flex flex-col w-full start-0 inset-y-0 items-end text-sm duration-250 *:w-(--fd-sidebar-width)", navMode === "auto" && "bg-fd-card border-e", collapsed && ["inset-y-2 rounded-xl bg-fd-card transition-transform border w-(--fd-sidebar-width)", hovered ? "shadow-lg translate-x-2 rtl:-translate-x-2" : "-translate-x-(--fd-sidebar-width) rtl:translate-x-full"], ref.current && ref.current.getAttribute("data-collapsed") === "true" !== collapsed && "transition-[width,inset-block,translate,background-color]", className),
68
+ ...props,
69
+ ...rest,
70
+ children
71
+ })]
72
+ }) });
73
+ }
74
+ function SidebarDrawer({ children, className, ...props }) {
75
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(SidebarDrawerOverlay, { className: "fixed z-40 inset-0 backdrop-blur-xs data-[state=open]:animate-fd-fade-in data-[state=closed]:animate-fd-fade-out" }), /* @__PURE__ */ jsx(SidebarDrawerContent, {
76
+ className: cn("fixed text-[0.9375rem] flex flex-col shadow-lg border-s end-0 inset-y-0 w-[85%] max-w-[380px] z-40 bg-fd-background data-[state=open]:animate-fd-sidebar-in data-[state=closed]:animate-fd-sidebar-out", className),
77
+ ...props,
78
+ children
79
+ })] });
80
+ }
81
+ function SidebarFolder(props) {
82
+ return /* @__PURE__ */ jsx(SidebarFolder$1, { ...props });
83
+ }
84
+ function SidebarSeparator({ className, style, children, ...props }) {
85
+ const depth = useFolderDepth();
86
+ return /* @__PURE__ */ jsx(SidebarSeparator$1, {
87
+ className: cn("inline-flex items-center gap-2 mb-1.5 px-2 mt-6 empty:mb-0 [&_svg]:size-4 [&_svg]:shrink-0", depth === 0 && "first:mt-0", className),
88
+ style: {
89
+ paddingInlineStart: getItemOffset(depth),
90
+ ...style
91
+ },
92
+ ...props,
93
+ children
94
+ });
95
+ }
96
+ function SidebarItem({ className, style, children, ...props }) {
97
+ const depth = useFolderDepth();
98
+ return /* @__PURE__ */ jsx(SidebarItem$1, {
99
+ className: cn(itemVariants({
100
+ variant: "link",
101
+ highlight: depth >= 1
102
+ }), className),
103
+ style: {
104
+ paddingInlineStart: getItemOffset(depth),
105
+ ...style
106
+ },
107
+ ...props,
108
+ children
109
+ });
110
+ }
111
+ function SidebarFolderTrigger({ className, style, ...props }) {
112
+ const { depth, collapsible } = useFolder();
113
+ return /* @__PURE__ */ jsx(SidebarFolderTrigger$1, {
114
+ className: (state) => cn(itemVariants({ variant: collapsible ? "button" : null }), "w-full", typeof className === "function" ? className(state) : className),
115
+ style: {
116
+ paddingInlineStart: getItemOffset(depth - 1),
117
+ ...style
118
+ },
119
+ ...props,
120
+ children: props.children
121
+ });
122
+ }
123
+ function SidebarFolderLink({ className, style, ...props }) {
124
+ const depth = useFolderDepth();
125
+ return /* @__PURE__ */ jsx(SidebarFolderLink$1, {
126
+ className: cn(itemVariants({
127
+ variant: "link",
128
+ highlight: depth > 1
129
+ }), "w-full", className),
130
+ style: {
131
+ paddingInlineStart: getItemOffset(depth - 1),
132
+ ...style
133
+ },
134
+ ...props,
135
+ children: props.children
136
+ });
137
+ }
138
+ function SidebarFolderContent({ className, children, ...props }) {
139
+ const depth = useFolderDepth();
140
+ return /* @__PURE__ */ jsx(SidebarFolderContent$1, {
141
+ className: (state) => cn("relative", depth === 1 && "before:content-[''] before:absolute before:w-px before:inset-y-1 before:bg-fd-border before:start-2.5", typeof className === "function" ? className(state) : className),
142
+ ...props,
143
+ children
144
+ });
145
+ }
146
+ const SidebarPageTree = createPageTreeRenderer({
147
+ SidebarFolder,
148
+ SidebarFolderContent,
149
+ SidebarFolderLink,
150
+ SidebarFolderTrigger,
151
+ SidebarItem,
152
+ SidebarSeparator
153
+ });
154
+ const SidebarLinkItem = createLinkItemRenderer({
155
+ SidebarFolder,
156
+ SidebarFolderContent,
157
+ SidebarFolderLink,
158
+ SidebarFolderTrigger,
159
+ SidebarItem
160
+ });
161
+ function Sidebar({ banner, footer, components, collapsible = true, ...rest }) {
162
+ const { menuItems, slots, props: { nav, tabs, tabMode } } = useNotebookLayout();
163
+ const navMode = nav?.mode ?? "auto";
164
+ const iconLinks = menuItems.filter((item) => item.type === "icon");
165
+ function renderHeader(props) {
166
+ if (typeof banner === "function") return createElement(banner, props);
167
+ return /* @__PURE__ */ jsxs("div", {
168
+ ...props,
169
+ className: cn("flex flex-col gap-3 p-4 pb-2 empty:hidden", props.className),
170
+ children: [props.children, banner]
171
+ });
172
+ }
173
+ function renderFooter(props) {
174
+ if (typeof footer === "function") return createElement(footer, props);
175
+ return /* @__PURE__ */ jsxs("div", {
176
+ ...props,
177
+ className: cn("hidden flex-row text-fd-muted-foreground items-center border-t p-4 pt-2", iconLinks.length > 0 && "max-lg:flex", props.className),
178
+ children: [props.children, footer]
179
+ });
180
+ }
181
+ const viewport = /* @__PURE__ */ jsxs(SidebarViewport, { children: [menuItems.filter((item) => item.type !== "icon").map((item, i, arr) => /* @__PURE__ */ jsx(SidebarLinkItem, {
182
+ item,
183
+ className: cn("lg:hidden", i === arr.length - 1 && "mb-4")
184
+ }, i)), /* @__PURE__ */ jsx(SidebarPageTree, { ...components })] });
185
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs(SidebarContent, {
186
+ ...rest,
187
+ children: [
188
+ renderHeader({ children: /* @__PURE__ */ jsxs(Fragment$1, { children: [navMode === "auto" && /* @__PURE__ */ jsxs("div", {
189
+ className: "flex justify-between",
190
+ children: [
191
+ slots.navTitle && /* @__PURE__ */ jsx(slots.navTitle, { className: "inline-flex items-center gap-2.5 font-medium" }),
192
+ nav?.children,
193
+ collapsible && /* @__PURE__ */ jsx(SidebarCollapseTrigger, {
194
+ className: cn(buttonVariants({
195
+ color: "ghost",
196
+ size: "icon-sm",
197
+ className: "mt-px mb-auto text-fd-muted-foreground"
198
+ })),
199
+ children: /* @__PURE__ */ jsx(Sidebar$1, {})
200
+ })
201
+ ]
202
+ }), tabs.length > 0 && /* @__PURE__ */ jsx(SidebarTabsDropdown, {
203
+ options: tabs,
204
+ className: cn(tabMode === "navbar" && "lg:hidden")
205
+ })] }) }),
206
+ viewport,
207
+ renderFooter({ children: iconLinks.map((item, i) => /* @__PURE__ */ jsx(LinkItem, {
208
+ item,
209
+ className: cn(buttonVariants({
210
+ size: "icon-sm",
211
+ color: "ghost",
212
+ className: "lg:hidden"
213
+ })),
214
+ "aria-label": item.label,
215
+ children: item.icon
216
+ }, i)) })
217
+ ]
218
+ }), /* @__PURE__ */ jsxs(SidebarDrawer, {
219
+ ...rest,
220
+ children: [
221
+ renderHeader({ children: /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(SidebarTrigger, {
222
+ className: cn(buttonVariants({
223
+ size: "icon-sm",
224
+ color: "ghost",
225
+ className: "ms-auto text-fd-muted-foreground"
226
+ })),
227
+ children: /* @__PURE__ */ jsx(X, {})
228
+ }), tabs.length > 0 && /* @__PURE__ */ jsx(SidebarTabsDropdown, { options: tabs })] }) }),
229
+ viewport,
230
+ renderFooter({
231
+ className: cn("hidden flex-row items-center justify-end", (slots.languageSelect || slots.themeSwitch) && "flex", iconLinks.length > 0 && "max-lg:flex"),
232
+ children: /* @__PURE__ */ jsxs(Fragment$1, { children: [
233
+ iconLinks.map((item, i) => /* @__PURE__ */ jsx(LinkItem, {
234
+ item,
235
+ className: cn(buttonVariants({
236
+ size: "icon-sm",
237
+ color: "ghost"
238
+ }), "text-fd-muted-foreground lg:hidden", i === iconLinks.length - 1 && "me-auto"),
239
+ "aria-label": item.label,
240
+ children: item.icon
241
+ }, i)),
242
+ slots.languageSelect && /* @__PURE__ */ jsx(slots.languageSelect.root, { children: /* @__PURE__ */ jsx(Languages, { className: "size-4.5 text-fd-muted-foreground" }) }),
243
+ slots.themeSwitch && /* @__PURE__ */ jsx(slots.themeSwitch, {})
244
+ ] })
245
+ })
246
+ ]
247
+ })] });
248
+ }
249
+ function SidebarTabsDropdown({ options, placeholder, ...props }) {
250
+ const [open, setOpen] = useState(false);
251
+ const { closeOnRedirect } = useSidebar();
252
+ const pathname = usePathname();
253
+ const selected = useMemo(() => {
254
+ return options.findLast((item) => isLayoutTabActive(item, pathname));
255
+ }, [options, pathname]);
256
+ const onClick = () => {
257
+ closeOnRedirect.current = false;
258
+ setOpen(false);
259
+ };
260
+ const item = selected ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("div", {
261
+ className: "size-9 shrink-0 empty:hidden md:size-5",
262
+ children: selected.icon
263
+ }), /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", {
264
+ className: "text-sm font-medium",
265
+ children: selected.title
266
+ }), /* @__PURE__ */ jsx("p", {
267
+ className: "text-sm text-fd-muted-foreground empty:hidden md:hidden",
268
+ children: selected.description
269
+ })] })] }) : placeholder;
270
+ return /* @__PURE__ */ jsxs(Popover, {
271
+ open,
272
+ onOpenChange: setOpen,
273
+ children: [item && /* @__PURE__ */ jsxs(PopoverTrigger, {
274
+ ...props,
275
+ className: cn("flex items-center gap-2 rounded-lg p-2 border bg-fd-secondary/50 text-start text-fd-secondary-foreground transition-colors hover:bg-fd-accent data-[state=open]:bg-fd-accent data-[state=open]:text-fd-accent-foreground", props.className),
276
+ children: [item, /* @__PURE__ */ jsx(ChevronsUpDown, { className: "shrink-0 ms-auto size-4 text-fd-muted-foreground" })]
277
+ }), /* @__PURE__ */ jsx(PopoverContent, {
278
+ className: "flex flex-col gap-1 w-(--radix-popover-trigger-width) p-1 fd-scroll-container",
279
+ children: options.map((item) => {
280
+ const isActive = selected && item.url === selected.url;
281
+ if (!isActive && item.unlisted) return;
282
+ return /* @__PURE__ */ jsxs(Link, {
283
+ href: item.url,
284
+ onClick,
285
+ ...item.props,
286
+ className: cn("flex items-center gap-2 rounded-lg p-1.5 hover:bg-fd-accent hover:text-fd-accent-foreground", item.props?.className),
287
+ children: [
288
+ /* @__PURE__ */ jsx("div", {
289
+ className: "shrink-0 size-9 md:mb-auto md:size-5 empty:hidden",
290
+ children: item.icon
291
+ }),
292
+ /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", {
293
+ className: "text-sm font-medium leading-none",
294
+ children: item.title
295
+ }), /* @__PURE__ */ jsx("p", {
296
+ className: "text-[0.8125rem] text-fd-muted-foreground mt-1 empty:hidden",
297
+ children: item.description
298
+ })] }),
299
+ /* @__PURE__ */ jsx(Check, { className: cn("shrink-0 ms-auto size-3.5 text-fd-primary", !isActive && "invisible") })
300
+ ]
301
+ }, item.url);
302
+ })
303
+ })]
304
+ });
305
+ }
306
+ //#endregion
307
+ export { Sidebar, SidebarCollapseTrigger, SidebarProvider, SidebarTabsDropdown, SidebarTrigger, useSidebar };
@@ -0,0 +1,45 @@
1
+ import { LanguageSelectProps, LanguageSelectTextProps } from "./slots/language-select.js";
2
+ import { FullSearchTriggeProps, SearchTriggerProps } from "./slots/search-trigger.js";
3
+ import { ThemeSwitchProps } from "./slots/theme-switch.js";
4
+ import { BaseLayoutProps, LinkItemType } from "./index.js";
5
+ import { ComponentProps, FC } from "react";
6
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
7
+
8
+ //#region src/layouts/shared/client.d.ts
9
+ declare function LinkItem({
10
+ ref,
11
+ item,
12
+ ...props
13
+ }: Omit<ComponentProps<'a'>, 'href'> & {
14
+ item: Extract<LinkItemType, {
15
+ url: string;
16
+ }>;
17
+ }): react_jsx_runtime0.JSX.Element;
18
+ interface BaseSlots {
19
+ navTitle?: FC<ComponentProps<'a'>>;
20
+ searchTrigger?: {
21
+ sm: FC<SearchTriggerProps>;
22
+ full: FC<FullSearchTriggeProps>;
23
+ };
24
+ languageSelect?: {
25
+ root: FC<LanguageSelectProps>;
26
+ text: FC<LanguageSelectTextProps>;
27
+ };
28
+ themeSwitch?: FC<ThemeSwitchProps>;
29
+ }
30
+ interface BaseSlotsProps<P extends BaseLayoutProps = BaseLayoutProps> extends Pick<P, 'nav'> {
31
+ themeSwitch: Omit<NonNullable<P['themeSwitch']>, 'enabled'>;
32
+ searchToggle: Omit<NonNullable<P['searchToggle']>, 'enabled'>;
33
+ }
34
+ declare function baseSlots({
35
+ useProps
36
+ }: {
37
+ useProps: () => BaseSlotsProps;
38
+ }): {
39
+ useProvider(options: BaseLayoutProps): {
40
+ baseSlots: BaseSlots;
41
+ baseProps: BaseSlotsProps;
42
+ };
43
+ };
44
+ //#endregion
45
+ export { BaseSlots, BaseSlotsProps, LinkItem, baseSlots };
@@ -0,0 +1,84 @@
1
+ "use client";
2
+ import { useI18n } from "../../contexts/i18n.js";
3
+ import { LanguageSelect, LanguageSelectText } from "./slots/language-select.js";
4
+ import { FullSearchTrigger, SearchTrigger } from "./slots/search-trigger.js";
5
+ import { ThemeSwitch } from "./slots/theme-switch.js";
6
+ import { isLinkItemActive } from "./index.js";
7
+ import { usePathname } from "fumadocs-core/framework";
8
+ import { jsx } from "react/jsx-runtime";
9
+ import Link from "fumadocs-core/link";
10
+ //#region src/layouts/shared/client.tsx
11
+ function LinkItem({ ref, item, ...props }) {
12
+ const active = isLinkItemActive(item, usePathname());
13
+ return /* @__PURE__ */ jsx(Link, {
14
+ ref,
15
+ href: item.url,
16
+ external: item.external,
17
+ ...props,
18
+ "data-active": active,
19
+ children: props.children
20
+ });
21
+ }
22
+ function baseSlots({ useProps }) {
23
+ function InlineThemeSwitch(props) {
24
+ const { themeSwitch } = useProps();
25
+ if (themeSwitch.component) return themeSwitch.component;
26
+ return /* @__PURE__ */ jsx(ThemeSwitch, {
27
+ ...props,
28
+ ...themeSwitch
29
+ });
30
+ }
31
+ function InlineSearchTrigger(props) {
32
+ const { searchToggle } = useProps();
33
+ if (searchToggle.components?.sm) return searchToggle.components.sm;
34
+ return /* @__PURE__ */ jsx(SearchTrigger, {
35
+ ...props,
36
+ ...searchToggle.sm
37
+ });
38
+ }
39
+ function InlineSearchTriggerFull(props) {
40
+ const { searchToggle } = useProps();
41
+ if (searchToggle.components?.lg) return searchToggle.components.lg;
42
+ return /* @__PURE__ */ jsx(FullSearchTrigger, {
43
+ ...props,
44
+ ...searchToggle.full
45
+ });
46
+ }
47
+ function InlineNavTitle({ href: defaultUrl = "/", ...props }) {
48
+ const { url = defaultUrl, title } = useProps().nav ?? {};
49
+ if (typeof title === "function") return title({
50
+ href: url,
51
+ ...props
52
+ });
53
+ return /* @__PURE__ */ jsx(Link, {
54
+ href: url,
55
+ ...props,
56
+ children: title
57
+ });
58
+ }
59
+ return { useProvider(options) {
60
+ const { locales = [] } = useI18n();
61
+ const { nav, slots = {}, i18n = locales.length > 1, searchToggle: { enabled: searchToggleEnabled = true, ...searchToggle } = {}, themeSwitch: { enabled: themeSwitchEnabled = true, ...themeSwitch } = {} } = options;
62
+ return {
63
+ baseSlots: {
64
+ navTitle: slots.navTitle ?? InlineNavTitle,
65
+ themeSwitch: themeSwitchEnabled ? slots.themeSwitch ?? InlineThemeSwitch : void 0,
66
+ languageSelect: i18n ? slots.languageSelect ?? {
67
+ root: LanguageSelect,
68
+ text: LanguageSelectText
69
+ } : void 0,
70
+ searchTrigger: searchToggleEnabled ? slots.searchTrigger ?? {
71
+ sm: InlineSearchTrigger,
72
+ full: InlineSearchTriggerFull
73
+ } : void 0
74
+ },
75
+ baseProps: {
76
+ nav,
77
+ searchToggle,
78
+ themeSwitch
79
+ }
80
+ };
81
+ } };
82
+ }
83
+ //#endregion
84
+ export { LinkItem, baseSlots };
@@ -1,13 +1,14 @@
1
- import { ButtonItemType, CustomItemType, IconItemType, LinkItem, LinkItemType, MainItemType, MenuItemType, useLinkItemActive } from "../../utils/link-item.js";
2
- import * as react from "react";
1
+ import { FullSearchTriggeProps, SearchTriggerProps } from "./slots/search-trigger.js";
2
+ import { ThemeSwitchProps } from "./slots/theme-switch.js";
3
+ import { BaseSlots, BaseSlotsProps, LinkItem, baseSlots } from "./client.js";
3
4
  import { ComponentProps, ReactNode } from "react";
4
- import * as react_jsx_runtime0 from "react/jsx-runtime";
5
+ import * as PageTree from "fumadocs-core/page-tree";
5
6
  import { I18nConfig } from "fumadocs-core/i18n";
6
7
 
7
8
  //#region src/layouts/shared/index.d.ts
8
9
  interface NavOptions {
9
- enabled: boolean;
10
- component: ReactNode;
10
+ enabled?: boolean;
11
+ children?: ReactNode;
11
12
  title?: ReactNode | ((props: ComponentProps<'a'>) => ReactNode);
12
13
  /**
13
14
  * Redirect url of title
@@ -20,38 +21,143 @@ interface NavOptions {
20
21
  * @defaultValue none
21
22
  */
22
23
  transparentMode?: 'always' | 'top' | 'none';
23
- children?: ReactNode;
24
+ /**
25
+ * @deprecated use `slots.header` instead.
26
+ */
27
+ component?: ReactNode;
24
28
  }
25
29
  interface BaseLayoutProps {
26
- themeSwitch?: {
27
- enabled?: boolean;
28
- component?: ReactNode;
29
- mode?: 'light-dark' | 'light-dark-system';
30
- };
31
- searchToggle?: Partial<{
32
- enabled: boolean;
33
- components: Partial<{
34
- sm: ReactNode;
35
- lg: ReactNode;
36
- }>;
37
- }>;
38
- /**
39
- * I18n options
40
- *
41
- * @defaultValue false
42
- */
43
- i18n?: boolean | I18nConfig;
44
30
  /**
45
31
  * GitHub url
46
32
  */
47
33
  githubUrl?: string;
48
34
  links?: LinkItemType[];
49
35
  /**
50
- * Replace or disable navbar
36
+ * navigation config
51
37
  */
52
- nav?: Partial<NavOptions>;
38
+ nav?: NavOptions;
39
+ slots?: BaseSlots;
53
40
  children?: ReactNode;
41
+ themeSwitch?: ThemeSwitchOptions;
42
+ searchToggle?: SearchToggleOptions;
43
+ /**
44
+ * @deprecated this is now optional for i18n setups, you can still customise language switch from `slots`.
45
+ */
46
+ i18n?: boolean | I18nConfig;
47
+ }
48
+ interface SearchToggleOptions {
49
+ enabled?: boolean;
50
+ sm?: SearchTriggerProps;
51
+ full?: FullSearchTriggeProps;
52
+ /** @deprecated use `slots.searchTrigger` instead */
53
+ components?: {
54
+ sm?: ReactNode;
55
+ lg?: ReactNode;
56
+ };
57
+ }
58
+ interface ThemeSwitchOptions extends ThemeSwitchProps {
59
+ enabled?: boolean;
60
+ /** @deprecated use `slots.themeSwitch` instead */
61
+ component?: ReactNode;
62
+ }
63
+ interface LayoutTab {
64
+ /**
65
+ * Redirect URL of the folder, usually the index page
66
+ */
67
+ url: string;
68
+ icon?: ReactNode;
69
+ title: ReactNode;
70
+ description?: ReactNode;
71
+ unlisted?: boolean;
72
+ props?: ComponentProps<'a'>;
73
+ /**
74
+ * bind to a page tree node.
75
+ */
76
+ $folder?: PageTree.Folder;
77
+ /**
78
+ * Detect from a list of urls (when not binded to page tree).
79
+ */
80
+ urls?: Set<string>;
81
+ }
82
+ interface GetLayoutTabsOptions {
83
+ transform?: (option: LayoutTab, node: PageTree.Folder) => LayoutTab | null;
84
+ }
85
+ declare function getLayoutTabs(tree: PageTree.Root, {
86
+ transform
87
+ }?: GetLayoutTabsOptions): LayoutTab[];
88
+ declare function isLayoutTabActive(tab: LayoutTab, pathname: string): boolean;
89
+ interface Filterable {
90
+ /**
91
+ * Restrict where the item is displayed
92
+ *
93
+ * @defaultValue 'all'
94
+ */
95
+ on?: 'menu' | 'nav' | 'all';
96
+ }
97
+ interface WithHref {
98
+ url: string;
99
+ /**
100
+ * When the item is marked as active
101
+ *
102
+ * @defaultValue 'url'
103
+ */
104
+ active?: 'url' | 'nested-url' | 'none';
105
+ external?: boolean;
106
+ }
107
+ interface MainItemType extends WithHref, Filterable {
108
+ type?: 'main';
109
+ icon?: ReactNode;
110
+ text: ReactNode;
111
+ description?: ReactNode;
112
+ }
113
+ interface IconItemType extends WithHref, Filterable {
114
+ type: 'icon';
115
+ /**
116
+ * `aria-label` of icon button
117
+ */
118
+ label?: string;
119
+ icon: ReactNode;
120
+ text: ReactNode;
121
+ /**
122
+ * @defaultValue true
123
+ */
124
+ secondary?: boolean;
125
+ }
126
+ interface ButtonItemType extends WithHref, Filterable {
127
+ type: 'button';
128
+ icon?: ReactNode;
129
+ text: ReactNode;
130
+ /**
131
+ * @defaultValue false
132
+ */
133
+ secondary?: boolean;
134
+ }
135
+ interface MenuItemType extends Partial<WithHref>, Filterable {
136
+ type: 'menu';
137
+ icon?: ReactNode;
138
+ text: ReactNode;
139
+ items: ((MainItemType & {
140
+ /**
141
+ * Options when displayed on navigation menu
142
+ */
143
+ menu?: ComponentProps<'a'> & {
144
+ banner?: ReactNode;
145
+ };
146
+ }) | CustomItemType)[];
147
+ /**
148
+ * @defaultValue false
149
+ */
150
+ secondary?: boolean;
151
+ }
152
+ interface CustomItemType extends Filterable {
153
+ type: 'custom';
154
+ /**
155
+ * @defaultValue false
156
+ */
157
+ secondary?: boolean;
158
+ children: ReactNode;
54
159
  }
160
+ type LinkItemType = MainItemType | IconItemType | ButtonItemType | MenuItemType | CustomItemType;
55
161
  /**
56
162
  * Get link items with shortcuts
57
163
  */
@@ -59,10 +165,6 @@ declare function resolveLinkItems({
59
165
  links,
60
166
  githubUrl
61
167
  }: Pick<BaseLayoutProps, 'links' | 'githubUrl'>): LinkItemType[];
62
- declare function renderTitleNav({
63
- title,
64
- url
65
- }: Partial<NavOptions>, props: ComponentProps<'a'>): 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;
66
168
  declare function useLinkItems({
67
169
  githubUrl,
68
170
  links
@@ -71,6 +173,6 @@ declare function useLinkItems({
71
173
  menuItems: LinkItemType[];
72
174
  all: LinkItemType[];
73
175
  };
176
+ declare function isLinkItemActive(link: LinkItemType, pathname: string): boolean;
74
177
  //#endregion
75
- export { BaseLayoutProps, ButtonItemType, CustomItemType, IconItemType, LinkItem, LinkItemType, MainItemType, MenuItemType, NavOptions, renderTitleNav, resolveLinkItems, useLinkItemActive, useLinkItems };
76
- //# sourceMappingURL=index.d.ts.map
178
+ export { BaseLayoutProps, type BaseSlots, type BaseSlotsProps, ButtonItemType, CustomItemType, GetLayoutTabsOptions, IconItemType, LayoutTab, LinkItem, LinkItemType, MainItemType, MenuItemType, NavOptions, baseSlots, getLayoutTabs, isLayoutTabActive, isLinkItemActive, resolveLinkItems, useLinkItems };