@fumadocs/base-ui 16.6.17 → 16.7.1

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 (368) hide show
  1. package/css/generated/docs.css +64 -34
  2. package/css/generated/flux.css +36 -32
  3. package/css/generated/home.css +39 -55
  4. package/css/generated/notebook.css +58 -33
  5. package/css/generated/shared.css +42 -24
  6. package/dist/components/accordion.d.ts +1 -2
  7. package/dist/components/accordion.js +2 -4
  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 +2 -4
  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 +3 -5
  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 +2 -4
  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 +3 -8
  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 +4 -3
  59. package/dist/components/toc/index.js +3 -4
  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 +43 -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.d.ts +55 -0
  99. package/dist/layouts/docs/page/slots/toc.js +161 -0
  100. package/dist/layouts/docs/slots/container.d.ts +7 -0
  101. package/dist/layouts/docs/slots/container.js +28 -0
  102. package/dist/layouts/docs/slots/header.d.ts +8 -0
  103. package/dist/layouts/docs/slots/header.js +37 -0
  104. package/dist/layouts/docs/slots/sidebar.d.ts +30 -0
  105. package/dist/layouts/docs/slots/sidebar.js +329 -0
  106. package/dist/layouts/flux/index.d.ts +34 -38
  107. package/dist/layouts/flux/index.js +71 -95
  108. package/dist/layouts/flux/page/client.d.ts +72 -35
  109. package/dist/layouts/flux/page/client.js +60 -219
  110. package/dist/layouts/flux/page/index.d.ts +6 -75
  111. package/dist/layouts/flux/page/index.js +5 -30
  112. package/dist/layouts/flux/page/slots/breadcrumb.d.ts +14 -0
  113. package/dist/layouts/flux/page/slots/breadcrumb.js +43 -0
  114. package/dist/layouts/flux/page/slots/container.d.ts +7 -0
  115. package/dist/layouts/flux/page/slots/container.js +16 -0
  116. package/dist/layouts/flux/page/slots/footer.d.ts +23 -0
  117. package/dist/layouts/flux/page/slots/footer.js +55 -0
  118. package/dist/layouts/flux/page/slots/toc.d.ts +31 -0
  119. package/dist/layouts/flux/page/slots/toc.js +169 -0
  120. package/dist/layouts/flux/slots/container.d.ts +7 -0
  121. package/dist/layouts/flux/slots/container.js +12 -0
  122. package/dist/layouts/flux/slots/sidebar.d.ts +23 -0
  123. package/dist/layouts/flux/{sidebar.js → slots/sidebar.js} +68 -25
  124. package/dist/layouts/flux/slots/tab-dropdown.d.ts +17 -0
  125. package/dist/layouts/flux/{tab-dropdown.js → slots/tab-dropdown.js} +11 -20
  126. package/dist/layouts/home/index.d.ts +24 -7
  127. package/dist/layouts/home/index.js +36 -18
  128. package/dist/layouts/home/navbar.d.ts +3 -10
  129. package/dist/layouts/home/navbar.js +17 -14
  130. package/dist/layouts/home/not-found.d.ts +1 -2
  131. package/dist/layouts/home/not-found.js +0 -2
  132. package/dist/layouts/home/slots/container.d.ts +7 -0
  133. package/dist/layouts/home/slots/container.js +12 -0
  134. package/dist/layouts/home/slots/header.d.ts +12 -0
  135. package/dist/layouts/home/slots/header.js +232 -0
  136. package/dist/layouts/notebook/client.d.ts +31 -43
  137. package/dist/layouts/notebook/client.js +54 -144
  138. package/dist/layouts/notebook/index.d.ts +25 -24
  139. package/dist/layouts/notebook/index.js +16 -211
  140. package/dist/layouts/notebook/page/client.d.ts +87 -37
  141. package/dist/layouts/notebook/page/client.js +76 -191
  142. package/dist/layouts/notebook/page/index.d.ts +6 -82
  143. package/dist/layouts/notebook/page/index.js +12 -51
  144. package/dist/layouts/notebook/page/slots/breadcrumb.d.ts +14 -0
  145. package/dist/layouts/notebook/page/slots/breadcrumb.js +43 -0
  146. package/dist/layouts/notebook/page/slots/container.d.ts +7 -0
  147. package/dist/layouts/notebook/page/slots/container.js +16 -0
  148. package/dist/layouts/notebook/page/slots/footer.d.ts +23 -0
  149. package/dist/layouts/notebook/page/slots/footer.js +55 -0
  150. package/dist/layouts/notebook/page/slots/toc.d.ts +55 -0
  151. package/dist/layouts/notebook/page/slots/toc.js +160 -0
  152. package/dist/layouts/notebook/slots/container.d.ts +7 -0
  153. package/dist/layouts/notebook/slots/container.js +30 -0
  154. package/dist/layouts/notebook/slots/header.d.ts +8 -0
  155. package/dist/layouts/notebook/slots/header.js +194 -0
  156. package/dist/layouts/notebook/slots/sidebar.d.ts +40 -0
  157. package/dist/layouts/notebook/slots/sidebar.js +307 -0
  158. package/dist/layouts/shared/client.d.ts +45 -0
  159. package/dist/layouts/shared/client.js +84 -0
  160. package/dist/layouts/shared/index.d.ts +134 -32
  161. package/dist/layouts/shared/index.js +49 -16
  162. package/dist/layouts/shared/page-actions.d.ts +1 -2
  163. package/dist/layouts/shared/page-actions.js +10 -6
  164. package/dist/layouts/shared/slots/language-select.d.ts +10 -0
  165. package/dist/layouts/shared/{language-toggle.js → slots/language-select.js} +10 -12
  166. package/dist/layouts/shared/slots/search-trigger.d.ts +23 -0
  167. package/dist/layouts/shared/{search-toggle.js → slots/search-trigger.js} +9 -11
  168. package/dist/layouts/shared/slots/theme-switch.d.ts +14 -0
  169. package/dist/layouts/shared/{theme-toggle.js → slots/theme-switch.js} +4 -6
  170. package/dist/mdx.d.ts +1 -2
  171. package/dist/mdx.js +0 -2
  172. package/dist/mdx.server.d.ts +1 -2
  173. package/dist/mdx.server.js +0 -2
  174. package/dist/og/takumi.d.ts +1 -2
  175. package/dist/og/takumi.js +0 -2
  176. package/dist/og.d.ts +1 -2
  177. package/dist/og.js +0 -2
  178. package/dist/page.d.ts +4 -4
  179. package/dist/page.js +5 -7
  180. package/dist/provider/base.d.ts +1 -2
  181. package/dist/provider/base.js +1 -3
  182. package/dist/provider/next.d.ts +1 -2
  183. package/dist/provider/next.js +0 -2
  184. package/dist/provider/react-router.d.ts +1 -2
  185. package/dist/provider/react-router.js +0 -2
  186. package/dist/provider/tanstack.d.ts +1 -2
  187. package/dist/provider/tanstack.js +0 -2
  188. package/dist/provider/waku.d.ts +1 -2
  189. package/dist/provider/waku.js +0 -2
  190. package/dist/style.css +83 -89
  191. package/dist/utils/merge-refs.js +0 -2
  192. package/dist/utils/urls.js +0 -2
  193. package/dist/utils/use-copy-button.d.ts +1 -2
  194. package/dist/utils/use-copy-button.js +0 -2
  195. package/dist/utils/use-footer-items.d.ts +1 -2
  196. package/dist/utils/use-footer-items.js +0 -2
  197. package/dist/utils/use-is-scroll-top.d.ts +1 -2
  198. package/dist/utils/use-is-scroll-top.js +0 -2
  199. package/package.json +103 -85
  200. package/dist/components/accordion.d.ts.map +0 -1
  201. package/dist/components/accordion.js.map +0 -1
  202. package/dist/components/banner.d.ts.map +0 -1
  203. package/dist/components/banner.js.map +0 -1
  204. package/dist/components/callout.d.ts.map +0 -1
  205. package/dist/components/callout.js.map +0 -1
  206. package/dist/components/card.d.ts.map +0 -1
  207. package/dist/components/card.js.map +0 -1
  208. package/dist/components/codeblock.d.ts.map +0 -1
  209. package/dist/components/codeblock.js.map +0 -1
  210. package/dist/components/codeblock.rsc.d.ts.map +0 -1
  211. package/dist/components/codeblock.rsc.js.map +0 -1
  212. package/dist/components/dialog/search-algolia.d.ts.map +0 -1
  213. package/dist/components/dialog/search-algolia.js.map +0 -1
  214. package/dist/components/dialog/search-default.d.ts.map +0 -1
  215. package/dist/components/dialog/search-default.js.map +0 -1
  216. package/dist/components/dialog/search-orama.d.ts.map +0 -1
  217. package/dist/components/dialog/search-orama.js.map +0 -1
  218. package/dist/components/dialog/search.d.ts.map +0 -1
  219. package/dist/components/dialog/search.js.map +0 -1
  220. package/dist/components/dynamic-codeblock.core.d.ts.map +0 -1
  221. package/dist/components/dynamic-codeblock.core.js.map +0 -1
  222. package/dist/components/dynamic-codeblock.d.ts.map +0 -1
  223. package/dist/components/dynamic-codeblock.js.map +0 -1
  224. package/dist/components/files.d.ts.map +0 -1
  225. package/dist/components/files.js.map +0 -1
  226. package/dist/components/github-info.d.ts.map +0 -1
  227. package/dist/components/github-info.js.map +0 -1
  228. package/dist/components/heading.d.ts.map +0 -1
  229. package/dist/components/heading.js.map +0 -1
  230. package/dist/components/image-zoom.d.ts.map +0 -1
  231. package/dist/components/image-zoom.js.map +0 -1
  232. package/dist/components/inline-toc.d.ts.map +0 -1
  233. package/dist/components/inline-toc.js.map +0 -1
  234. package/dist/components/sidebar/base.d.ts.map +0 -1
  235. package/dist/components/sidebar/base.js.map +0 -1
  236. package/dist/components/sidebar/link-item.d.ts.map +0 -1
  237. package/dist/components/sidebar/link-item.js.map +0 -1
  238. package/dist/components/sidebar/page-tree.d.ts.map +0 -1
  239. package/dist/components/sidebar/page-tree.js.map +0 -1
  240. package/dist/components/sidebar/tabs/dropdown.d.ts.map +0 -1
  241. package/dist/components/sidebar/tabs/dropdown.js.map +0 -1
  242. package/dist/components/sidebar/tabs/index.d.ts.map +0 -1
  243. package/dist/components/sidebar/tabs/index.js.map +0 -1
  244. package/dist/components/steps.d.ts.map +0 -1
  245. package/dist/components/steps.js.map +0 -1
  246. package/dist/components/tabs.d.ts.map +0 -1
  247. package/dist/components/tabs.js.map +0 -1
  248. package/dist/components/toc/clerk.d.ts.map +0 -1
  249. package/dist/components/toc/clerk.js.map +0 -1
  250. package/dist/components/toc/default.d.ts.map +0 -1
  251. package/dist/components/toc/default.js.map +0 -1
  252. package/dist/components/toc/index.d.ts.map +0 -1
  253. package/dist/components/toc/index.js.map +0 -1
  254. package/dist/components/type-table.d.ts.map +0 -1
  255. package/dist/components/type-table.js.map +0 -1
  256. package/dist/components/ui/accordion.d.ts.map +0 -1
  257. package/dist/components/ui/accordion.js.map +0 -1
  258. package/dist/components/ui/button.d.ts.map +0 -1
  259. package/dist/components/ui/button.js.map +0 -1
  260. package/dist/components/ui/collapsible.d.ts.map +0 -1
  261. package/dist/components/ui/collapsible.js.map +0 -1
  262. package/dist/components/ui/navigation-menu.d.ts.map +0 -1
  263. package/dist/components/ui/navigation-menu.js.map +0 -1
  264. package/dist/components/ui/popover.d.ts.map +0 -1
  265. package/dist/components/ui/popover.js.map +0 -1
  266. package/dist/components/ui/scroll-area.d.ts.map +0 -1
  267. package/dist/components/ui/scroll-area.js.map +0 -1
  268. package/dist/components/ui/tabs.d.ts.map +0 -1
  269. package/dist/components/ui/tabs.js.map +0 -1
  270. package/dist/contexts/i18n.d.ts.map +0 -1
  271. package/dist/contexts/i18n.js.map +0 -1
  272. package/dist/contexts/search.d.ts.map +0 -1
  273. package/dist/contexts/search.js.map +0 -1
  274. package/dist/contexts/tree.d.ts.map +0 -1
  275. package/dist/contexts/tree.js.map +0 -1
  276. package/dist/i18n.d.ts.map +0 -1
  277. package/dist/i18n.js.map +0 -1
  278. package/dist/layouts/docs/client.d.ts.map +0 -1
  279. package/dist/layouts/docs/client.js.map +0 -1
  280. package/dist/layouts/docs/index.d.ts.map +0 -1
  281. package/dist/layouts/docs/index.js.map +0 -1
  282. package/dist/layouts/docs/page/client.d.ts.map +0 -1
  283. package/dist/layouts/docs/page/client.js.map +0 -1
  284. package/dist/layouts/docs/page/index.d.ts.map +0 -1
  285. package/dist/layouts/docs/page/index.js.map +0 -1
  286. package/dist/layouts/docs/sidebar.d.ts +0 -63
  287. package/dist/layouts/docs/sidebar.d.ts.map +0 -1
  288. package/dist/layouts/docs/sidebar.js +0 -160
  289. package/dist/layouts/docs/sidebar.js.map +0 -1
  290. package/dist/layouts/flux/index.d.ts.map +0 -1
  291. package/dist/layouts/flux/index.js.map +0 -1
  292. package/dist/layouts/flux/page/client.d.ts.map +0 -1
  293. package/dist/layouts/flux/page/client.js.map +0 -1
  294. package/dist/layouts/flux/page/index.d.ts.map +0 -1
  295. package/dist/layouts/flux/page/index.js.map +0 -1
  296. package/dist/layouts/flux/sidebar.d.ts +0 -58
  297. package/dist/layouts/flux/sidebar.d.ts.map +0 -1
  298. package/dist/layouts/flux/sidebar.js.map +0 -1
  299. package/dist/layouts/flux/tab-dropdown.d.ts +0 -21
  300. package/dist/layouts/flux/tab-dropdown.d.ts.map +0 -1
  301. package/dist/layouts/flux/tab-dropdown.js.map +0 -1
  302. package/dist/layouts/home/client.d.ts +0 -19
  303. package/dist/layouts/home/client.d.ts.map +0 -1
  304. package/dist/layouts/home/client.js +0 -262
  305. package/dist/layouts/home/client.js.map +0 -1
  306. package/dist/layouts/home/index.d.ts.map +0 -1
  307. package/dist/layouts/home/index.js.map +0 -1
  308. package/dist/layouts/home/navbar.d.ts.map +0 -1
  309. package/dist/layouts/home/navbar.js.map +0 -1
  310. package/dist/layouts/home/not-found.d.ts.map +0 -1
  311. package/dist/layouts/home/not-found.js.map +0 -1
  312. package/dist/layouts/notebook/client.d.ts.map +0 -1
  313. package/dist/layouts/notebook/client.js.map +0 -1
  314. package/dist/layouts/notebook/index.d.ts.map +0 -1
  315. package/dist/layouts/notebook/index.js.map +0 -1
  316. package/dist/layouts/notebook/page/client.d.ts.map +0 -1
  317. package/dist/layouts/notebook/page/client.js.map +0 -1
  318. package/dist/layouts/notebook/page/index.d.ts.map +0 -1
  319. package/dist/layouts/notebook/page/index.js.map +0 -1
  320. package/dist/layouts/notebook/sidebar.d.ts +0 -59
  321. package/dist/layouts/notebook/sidebar.d.ts.map +0 -1
  322. package/dist/layouts/notebook/sidebar.js +0 -131
  323. package/dist/layouts/notebook/sidebar.js.map +0 -1
  324. package/dist/layouts/shared/index.d.ts.map +0 -1
  325. package/dist/layouts/shared/index.js.map +0 -1
  326. package/dist/layouts/shared/language-toggle.d.ts +0 -10
  327. package/dist/layouts/shared/language-toggle.d.ts.map +0 -1
  328. package/dist/layouts/shared/language-toggle.js.map +0 -1
  329. package/dist/layouts/shared/page-actions.d.ts.map +0 -1
  330. package/dist/layouts/shared/page-actions.js.map +0 -1
  331. package/dist/layouts/shared/search-toggle.d.ts +0 -23
  332. package/dist/layouts/shared/search-toggle.d.ts.map +0 -1
  333. package/dist/layouts/shared/search-toggle.js.map +0 -1
  334. package/dist/layouts/shared/theme-toggle.d.ts +0 -14
  335. package/dist/layouts/shared/theme-toggle.d.ts.map +0 -1
  336. package/dist/layouts/shared/theme-toggle.js.map +0 -1
  337. package/dist/mdx.d.ts.map +0 -1
  338. package/dist/mdx.js.map +0 -1
  339. package/dist/mdx.server.d.ts.map +0 -1
  340. package/dist/mdx.server.js.map +0 -1
  341. package/dist/og/takumi.d.ts.map +0 -1
  342. package/dist/og/takumi.js.map +0 -1
  343. package/dist/og.d.ts.map +0 -1
  344. package/dist/og.js.map +0 -1
  345. package/dist/page.d.ts.map +0 -1
  346. package/dist/page.js.map +0 -1
  347. package/dist/provider/base.d.ts.map +0 -1
  348. package/dist/provider/base.js.map +0 -1
  349. package/dist/provider/next.d.ts.map +0 -1
  350. package/dist/provider/next.js.map +0 -1
  351. package/dist/provider/react-router.d.ts.map +0 -1
  352. package/dist/provider/react-router.js.map +0 -1
  353. package/dist/provider/tanstack.d.ts.map +0 -1
  354. package/dist/provider/tanstack.js.map +0 -1
  355. package/dist/provider/waku.d.ts.map +0 -1
  356. package/dist/provider/waku.js.map +0 -1
  357. package/dist/utils/link-item.d.ts +0 -87
  358. package/dist/utils/link-item.d.ts.map +0 -1
  359. package/dist/utils/link-item.js +0 -27
  360. package/dist/utils/link-item.js.map +0 -1
  361. package/dist/utils/merge-refs.js.map +0 -1
  362. package/dist/utils/urls.js.map +0 -1
  363. package/dist/utils/use-copy-button.d.ts.map +0 -1
  364. package/dist/utils/use-copy-button.js.map +0 -1
  365. package/dist/utils/use-footer-items.d.ts.map +0 -1
  366. package/dist/utils/use-footer-items.js.map +0 -1
  367. package/dist/utils/use-is-scroll-top.d.ts.map +0 -1
  368. package/dist/utils/use-is-scroll-top.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","names":[],"sources":["../../../../src/layouts/flux/page/client.tsx"],"sourcesContent":["'use client';\n\nimport {\n type ComponentProps,\n createContext,\n Fragment,\n use,\n useEffect,\n useEffectEvent,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { ChevronDown, ChevronLeft, ChevronRight } from 'lucide-react';\nimport Link from 'fumadocs-core/link';\nimport { cn } from '@/utils/cn';\nimport { useI18n } from '@/contexts/i18n';\nimport { useTreeContext, useTreePath } from '@/contexts/tree';\nimport type * as PageTree from 'fumadocs-core/page-tree';\nimport { usePathname } from 'fumadocs-core/framework';\nimport { type BreadcrumbOptions, getBreadcrumbItemsFromPath } from 'fumadocs-core/breadcrumb';\nimport { isActive } from '@/utils/urls';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible';\nimport { useTOCItems } from '@/components/toc';\nimport { useActiveAnchor } from 'fumadocs-core/toc';\nimport { useFooterItems } from '@/utils/use-footer-items';\nimport { createPortal } from 'react-dom';\nimport { AnimatePresence, motion } from 'motion/react';\n\nconst TocPopoverContext = createContext<{\n open: boolean;\n setOpen: (open: boolean) => void;\n} | null>(null);\n\nexport function PageTOCPopover(props: ComponentProps<'div'>) {\n const [container, setContainer] = useState<HTMLElement | null>(null);\n\n useEffect(() => {\n const element = document.getElementById('flux-layout-slot');\n if (!element) return;\n setContainer(element);\n }, []);\n\n if (!container) return;\n return createPortal(<PageTOCPopoverPhysical {...props} />, container);\n}\n\nfunction PageTOCPopoverPhysical({ className, children, ...rest }: ComponentProps<'div'>) {\n const ref = useRef<HTMLElement>(null);\n const [open, setOpen] = useState(false);\n\n const onClick = useEffectEvent((e: Event) => {\n if (!open) return;\n\n if (ref.current && !ref.current.contains(e.target as HTMLElement)) setOpen(false);\n });\n\n useEffect(() => {\n window.addEventListener('click', onClick);\n\n return () => {\n window.removeEventListener('click', onClick);\n };\n }, []);\n\n return (\n <TocPopoverContext\n value={useMemo(\n () => ({\n open,\n setOpen,\n }),\n [setOpen, open],\n )}\n >\n <Collapsible\n open={open}\n onOpenChange={setOpen}\n data-toc-popover=\"\"\n className={cn('relative h-9 animate-fd-fade-in', className)}\n {...rest}\n >\n <header\n ref={ref}\n className={cn(\n 'absolute w-full bottom-0 border rounded-xl transition-colors bg-fd-secondary text-fd-secondary-foreground backdrop-blur-sm',\n open && 'shadow-lg bg-fd-popover/80 text-fd-popover-foreground',\n )}\n >\n {children}\n </header>\n </Collapsible>\n </TocPopoverContext>\n );\n}\n\nexport function PageTOCPopoverTrigger({ className, ...props }: ComponentProps<'button'>) {\n const { text } = useI18n();\n const { open } = use(TocPopoverContext)!;\n const items = useTOCItems();\n const active = useActiveAnchor();\n const selected = useMemo(\n () => items.findIndex((item) => active === item.url.slice(1)),\n [items, active],\n );\n const path = useTreePath().at(-1);\n const spanProps = {\n transition: {\n duration: 0.1,\n },\n initial: {\n opacity: 0,\n y: 10,\n },\n animate: {\n opacity: 1,\n y: 0,\n },\n exit: {\n opacity: 0,\n y: -10,\n },\n className: cn(open && 'text-fd-popover-foreground'),\n };\n\n return (\n <CollapsibleTrigger\n className={cn(\n 'flex w-full h-8.5 items-center text-sm text-fd-muted-foreground gap-2.5 px-2 text-start focus-visible:outline-none [&_svg]:size-4',\n className,\n )}\n data-toc-popover-trigger=\"\"\n {...props}\n >\n <ProgressCircle\n value={(selected + 1) / Math.max(1, items.length)}\n max={1}\n className={cn('shrink-0', open && 'text-fd-primary')}\n />\n <AnimatePresence mode=\"wait\">\n {items[selected] && selected !== -1 && !open ? (\n <motion.span key={selected} {...spanProps}>\n {items[selected].title}\n </motion.span>\n ) : path ? (\n <motion.span key={path.$id ?? ':pathId'} {...spanProps}>\n {path.name}\n </motion.span>\n ) : (\n <motion.span key=\":toc\" {...spanProps}>\n {text.toc}\n </motion.span>\n )}\n </AnimatePresence>\n\n <ChevronDown className={cn('ms-auto shrink-0 transition-transform', open && 'rotate-180')} />\n </CollapsibleTrigger>\n );\n}\n\ninterface ProgressCircleProps extends Omit<React.ComponentProps<'svg'>, 'strokeWidth'> {\n value: number;\n strokeWidth?: number;\n size?: number;\n min?: number;\n max?: number;\n}\n\nfunction clamp(input: number, min: number, max: number): number {\n if (input < min) return min;\n if (input > max) return max;\n return input;\n}\n\nfunction ProgressCircle({\n value,\n strokeWidth = 2,\n size = 24,\n min = 0,\n max = 100,\n ...restSvgProps\n}: ProgressCircleProps) {\n const normalizedValue = clamp(value, min, max);\n const radius = (size - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const progress = (normalizedValue / max) * circumference;\n const circleProps = {\n cx: size / 2,\n cy: size / 2,\n r: radius,\n fill: 'none',\n strokeWidth,\n };\n\n return (\n <svg\n role=\"progressbar\"\n viewBox={`0 0 ${size} ${size}`}\n aria-valuenow={normalizedValue}\n aria-valuemin={min}\n aria-valuemax={max}\n {...restSvgProps}\n >\n <circle {...circleProps} className=\"stroke-current/25\" />\n <circle\n {...circleProps}\n stroke=\"currentColor\"\n strokeDasharray={circumference}\n strokeDashoffset={circumference - progress}\n strokeLinecap=\"round\"\n transform={`rotate(-90 ${size / 2} ${size / 2})`}\n className=\"transition-all\"\n />\n </svg>\n );\n}\n\nexport function PageTOCPopoverContent(props: ComponentProps<'div'>) {\n return (\n <CollapsibleContent\n data-toc-popover-content=\"\"\n {...props}\n className={cn('flex flex-col px-2 max-h-[50vh]', props.className)}\n >\n {props.children}\n </CollapsibleContent>\n );\n}\n\nexport function PageLastUpdate({\n date: value,\n ...props\n}: Omit<ComponentProps<'p'>, 'children'> & { date: Date }) {\n const { text } = useI18n();\n const [date, setDate] = useState('');\n\n useEffect(() => {\n // to the timezone of client\n setDate(value.toLocaleDateString());\n }, [value]);\n\n return (\n <p {...props} className={cn('text-sm text-fd-muted-foreground', props.className)}>\n {text.lastUpdate} {date}\n </p>\n );\n}\n\ntype Item = Pick<PageTree.Item, 'name' | 'description' | 'url'>;\nexport interface FooterProps extends ComponentProps<'div'> {\n /**\n * Items including information for the next and previous page\n */\n items?: {\n previous?: Item;\n next?: Item;\n };\n}\n\nexport function PageFooter({ items, children, className, ...props }: FooterProps) {\n const footerList = useFooterItems();\n const pathname = usePathname();\n const { previous, next } = useMemo(() => {\n if (items) return items;\n\n const idx = footerList.findIndex((item) => isActive(item.url, pathname));\n\n if (idx === -1) return {};\n return {\n previous: footerList[idx - 1],\n next: footerList[idx + 1],\n };\n }, [footerList, items, pathname]);\n\n return (\n <>\n <div\n className={cn(\n '@container grid gap-4',\n previous && next ? 'grid-cols-2' : 'grid-cols-1',\n className,\n )}\n {...props}\n >\n {previous && <FooterItem item={previous} index={0} />}\n {next && <FooterItem item={next} index={1} />}\n </div>\n {children}\n </>\n );\n}\n\nfunction FooterItem({ item, index }: { item: Item; index: 0 | 1 }) {\n const { text } = useI18n();\n const Icon = index === 0 ? ChevronLeft : ChevronRight;\n\n return (\n <Link\n href={item.url}\n className={cn(\n 'flex flex-col gap-2 rounded-lg border p-4 text-sm transition-colors hover:bg-fd-accent/80 hover:text-fd-accent-foreground @max-lg:col-span-full',\n index === 1 && 'text-end',\n )}\n >\n <div\n className={cn(\n 'inline-flex items-center gap-1.5 font-medium',\n index === 1 && 'flex-row-reverse',\n )}\n >\n <Icon className=\"-mx-1 size-4 shrink-0 rtl:rotate-180\" />\n <p>{item.name}</p>\n </div>\n <p className=\"text-fd-muted-foreground truncate\">\n {item.description ?? (index === 0 ? text.previousPage : text.nextPage)}\n </p>\n </Link>\n );\n}\n\nexport type BreadcrumbProps = BreadcrumbOptions & ComponentProps<'div'>;\n\nexport function PageBreadcrumb({\n includeRoot,\n includeSeparator,\n includePage,\n ...props\n}: BreadcrumbProps) {\n const path = useTreePath();\n const { root } = useTreeContext();\n const items = useMemo(() => {\n return getBreadcrumbItemsFromPath(root, path, {\n includePage,\n includeSeparator,\n includeRoot,\n });\n }, [includePage, includeRoot, includeSeparator, path, root]);\n\n if (items.length === 0) return null;\n\n return (\n <div\n {...props}\n className={cn('flex items-center gap-1.5 text-sm text-fd-muted-foreground', props.className)}\n >\n {items.map((item, i) => {\n const className = cn('truncate', i === items.length - 1 && 'text-fd-primary font-medium');\n\n return (\n <Fragment key={i}>\n {i !== 0 && <ChevronRight className=\"size-3.5 shrink-0\" />}\n {item.url ? (\n <Link\n href={item.url}\n className={cn(className, 'transition-opacity hover:opacity-80')}\n >\n {item.name}\n </Link>\n ) : (\n <span className={className}>{item.name}</span>\n )}\n </Fragment>\n );\n })}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/layouts/flux/page/index.tsx"],"mappings":";;;;;;UAmBU,iBAAA,SAA0B,eAAA;EAClC,OAAA;EACA,SAAA,EAAW,SAAA;AAAA;AAAA,UAGH,aAAA,SAAsB,WAAA;EAC9B,OAAA;EACA,SAAA,EAAW,SAAA;AAAA;AAAA,UAGI,aAAA;EACf,GAAA,GAAM,WAAA;EACN,cAAA,GAAiB,OAAA,CAAQ,qBAAA;EAVL;;AAAA;;;EAiBpB,IAAA;EAd8B;;;EAmB9B,UAAA,GAAa,OAAA,CAAQ,iBAAA;EAjBD;;AAGtB;;;EAqBE,MAAA,GAAS,OAAA,CAAQ,aAAA;EAEjB,QAAA,GAAW,SAAA;EArBM;;;EA0BjB,SAAA;AAAA;AAAA,UAGQ,qBAAA,SAA8B,IAAA,CAAK,mBAAA;EARvB;;;EAYpB,MAAA,GAAS,SAAA;EAjCT;;;EAsCA,MAAA,GAAS,SAAA;EAET,OAAA;EACA,SAAA,EAAW,SAAA;EA7BU;;;EAkCrB,KAAA;AAAA;AAAA,iBAGc,QAAA,CAAA;EACd,UAAA;IAAc,OAAA,EAAS,iBAAA;IAA0B,SAAA,EAAW,UAAA;IAAA,GAAe;EAAA;EAC3E,MAAA;IAAU,OAAA,EAAS,aAAA;IAAe,SAAA,EAAW,aAAA;IAAA,GAAkB;EAAA;EAC/D,IAAA;EACA,cAAA;IAAkB,OAAA,EAAS,iBAAA;IAAmB,SAAA,EAAW,UAAA;IAAA,GAAe;EAAA;EACxE,GAAA;EACA,QAAA;EACA;AAAA,GACC,aAAA,GAAa,SAAA;AAAA,iBA8CA,YAAA,CAAa,KAAA,EAAO,cAAA,QAAmB,kBAAA,CAAA,GAAA,CAAA,OAAA;;;AA5EtD;iBAwGe,QAAA,CAAA;EAAW,QAAA;EAAU,SAAA;EAAA,GAAc;AAAA,GAAS,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAQjE,eAAA,CAAA;EAAkB,QAAA;EAAU,SAAA;EAAA,GAAc;AAAA,GAAS,cAAA,QAAmB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAWtE,SAAA,CAAA;EAAY,QAAA;EAAU,SAAA;EAAA,GAAc;AAAA,GAAS,cAAA,SAAoB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["TocClerk.TOCItems","TocDefault.TOCItems"],"sources":["../../../../src/layouts/flux/page/index.tsx"],"sourcesContent":["import type { ComponentProps, ReactNode } from 'react';\nimport { cn } from '@/utils/cn';\nimport { buttonVariants } from '@/components/ui/button';\nimport { Edit } from 'lucide-react';\nimport { I18nLabel } from '@/contexts/i18n';\nimport {\n type BreadcrumbProps,\n type FooterProps,\n PageBreadcrumb,\n PageFooter,\n PageTOCPopover,\n PageTOCPopoverContent,\n PageTOCPopoverTrigger,\n} from './client';\nimport type { AnchorProviderProps, TOCItemType } from 'fumadocs-core/toc';\nimport * as TocDefault from '@/components/toc/default';\nimport * as TocClerk from '@/components/toc/clerk';\nimport { TOCProvider, TOCScrollArea } from '@/components/toc';\n\ninterface BreadcrumbOptions extends BreadcrumbProps {\n enabled: boolean;\n component: ReactNode;\n}\n\ninterface FooterOptions extends FooterProps {\n enabled: boolean;\n component: ReactNode;\n}\n\nexport interface DocsPageProps {\n toc?: TOCItemType[];\n tableOfContent?: Partial<TableOfContentOptions>;\n\n /**\n * Extend the page to fill all available space\n *\n * @defaultValue false\n */\n full?: boolean;\n\n /**\n * Replace or disable breadcrumb\n */\n breadcrumb?: Partial<BreadcrumbOptions>;\n\n /**\n * Footer navigation, located under the page body.\n *\n * You can specify `footer.children` to add extra components under the footer.\n */\n footer?: Partial<FooterOptions>;\n\n children?: ReactNode;\n\n /**\n * Apply class names to the `#nd-page` container.\n */\n className?: string;\n}\n\ninterface TableOfContentOptions extends Pick<AnchorProviderProps, 'single'> {\n /**\n * Custom content in TOC container, before the main TOC\n */\n header?: ReactNode;\n\n /**\n * Custom content in TOC container, after the main TOC\n */\n footer?: ReactNode;\n\n enabled: boolean;\n component: ReactNode;\n\n /**\n * @defaultValue 'normal'\n */\n style?: 'normal' | 'clerk';\n}\n\nexport function DocsPage({\n breadcrumb: { enabled: breadcrumbEnabled = true, component: breadcrumb, ...breadcrumbProps } = {},\n footer: { enabled: footerEnabled, component: footerReplace, ...footerProps } = {},\n full = false,\n tableOfContent: { enabled: tocPopoverEnabled, component: tocPopover, ...tocOptions } = {},\n toc = [],\n children,\n className,\n}: DocsPageProps) {\n tocPopoverEnabled ??=\n toc.length > 0 || tocOptions.header !== undefined || tocOptions.footer !== undefined;\n\n let wrapper = (children: ReactNode) => children;\n\n if (tocPopoverEnabled) {\n wrapper = (children) => (\n <TOCProvider single={tocOptions.single} toc={toc}>\n {children}\n </TOCProvider>\n );\n }\n\n return wrapper(\n <>\n {tocPopoverEnabled &&\n (tocPopover ?? (\n <PageTOCPopover>\n <PageTOCPopoverContent>\n {tocOptions.header}\n <TOCScrollArea>\n {tocOptions.style === 'clerk' ? <TocClerk.TOCItems /> : <TocDefault.TOCItems />}\n </TOCScrollArea>\n {tocOptions.footer}\n </PageTOCPopoverContent>\n <PageTOCPopoverTrigger />\n </PageTOCPopover>\n ))}\n <article\n id=\"nd-page\"\n data-full={full}\n className={cn(\n 'flex flex-col w-full max-w-[900px] mx-auto [grid-area:main] px-4 py-6 gap-4 md:px-6 md:pt-8 xl:px-8 xl:pt-14',\n full ? 'max-w-[1200px]' : 'xl:layout:[--fd-toc-width:268px]',\n className,\n )}\n >\n {breadcrumbEnabled && (breadcrumb ?? <PageBreadcrumb {...breadcrumbProps} />)}\n {children}\n {footerEnabled !== false && (footerReplace ?? <PageFooter {...footerProps} />)}\n </article>\n </>,\n );\n}\n\nexport function EditOnGitHub(props: ComponentProps<'a'>) {\n return (\n <a\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n {...props}\n className={cn(\n buttonVariants({\n color: 'secondary',\n size: 'sm',\n className: 'gap-1.5 not-prose',\n }),\n props.className,\n )}\n >\n {props.children ?? (\n <>\n <Edit className=\"size-3.5\" />\n <I18nLabel label=\"editOnGithub\" />\n </>\n )}\n </a>\n );\n}\n\n/**\n * Add typography styles\n */\nexport function DocsBody({ children, className, ...props }: ComponentProps<'div'>) {\n return (\n <div {...props} className={cn('prose flex-1', className)}>\n {children}\n </div>\n );\n}\n\nexport function DocsDescription({ children, className, ...props }: ComponentProps<'p'>) {\n // Don't render if no description provided\n if (children === undefined) return null;\n\n return (\n <p {...props} className={cn('mb-8 text-lg text-fd-muted-foreground', className)}>\n {children}\n </p>\n );\n}\n\nexport function DocsTitle({ children, className, ...props }: ComponentProps<'h1'>) {\n return (\n <h1 {...props} className={cn('text-[1.75em] font-semibold', className)}>\n {children}\n </h1>\n );\n}\n\nexport { PageLastUpdate, PageBreadcrumb } from './client';\n"],"mappings":";;;;;;;;;;AAgFA,SAAgB,SAAS,EACvB,YAAY,EAAE,SAAS,oBAAoB,MAAM,WAAW,YAAY,GAAG,oBAAoB,EAAE,EACjG,QAAQ,EAAE,SAAS,eAAe,WAAW,eAAe,GAAG,gBAAgB,EAAE,EACjF,OAAO,OACP,gBAAgB,EAAE,SAAS,mBAAmB,WAAW,YAAY,GAAG,eAAe,EAAE,EACzF,MAAM,EAAE,EACR,UACA,aACgB;AAChB,uBACE,IAAI,SAAS,KAAK,WAAW,WAAW,KAAA,KAAa,WAAW,WAAW,KAAA;CAE7E,IAAI,WAAW,aAAwB;AAEvC,KAAI,kBACF,YAAW,aACT,oBAAC,aAAD;EAAa,QAAQ,WAAW;EAAa;EAC1C;EACW,CAAA;AAIlB,QAAO,QACL,qBAAA,UAAA,EAAA,UAAA,CACG,sBACE,cACC,qBAAC,gBAAD,EAAA,UAAA,CACE,qBAAC,uBAAD,EAAA,UAAA;EACG,WAAW;EACZ,oBAAC,eAAD,EAAA,UACG,WAAW,UAAU,UAAU,oBAACA,YAAD,EAAqB,CAAA,GAAG,oBAACC,UAAD,EAAuB,CAAA,EACjE,CAAA;EACf,WAAW;EACU,EAAA,CAAA,EACxB,oBAAC,uBAAD,EAAyB,CAAA,CACV,EAAA,CAAA,GAErB,qBAAC,WAAD;EACE,IAAG;EACH,aAAW;EACX,WAAW,GACT,gHACA,OAAO,mBAAmB,oCAC1B,UACD;YAPH;GASG,sBAAsB,cAAc,oBAAC,gBAAD,EAAgB,GAAI,iBAAmB,CAAA;GAC3E;GACA,kBAAkB,UAAU,iBAAiB,oBAAC,YAAD,EAAY,GAAI,aAAe,CAAA;GACrE;IACT,EAAA,CAAA,CACJ;;AAGH,SAAgB,aAAa,OAA4B;AACvD,QACE,oBAAC,KAAD;EACE,QAAO;EACP,KAAI;EACJ,GAAI;EACJ,WAAW,GACT,eAAe;GACb,OAAO;GACP,MAAM;GACN,WAAW;GACZ,CAAC,EACF,MAAM,UACP;YAEA,MAAM,YACL,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,MAAD,EAAM,WAAU,YAAa,CAAA,EAC7B,oBAAC,WAAD,EAAW,OAAM,gBAAiB,CAAA,CACjC,EAAA,CAAA;EAEH,CAAA;;;;;AAOR,SAAgB,SAAS,EAAE,UAAU,WAAW,GAAG,SAAgC;AACjF,QACE,oBAAC,OAAD;EAAK,GAAI;EAAO,WAAW,GAAG,gBAAgB,UAAU;EACrD;EACG,CAAA;;AAIV,SAAgB,gBAAgB,EAAE,UAAU,WAAW,GAAG,SAA8B;AAEtF,KAAI,aAAa,KAAA,EAAW,QAAO;AAEnC,QACE,oBAAC,KAAD;EAAG,GAAI;EAAO,WAAW,GAAG,yCAAyC,UAAU;EAC5E;EACC,CAAA;;AAIR,SAAgB,UAAU,EAAE,UAAU,WAAW,GAAG,SAA+B;AACjF,QACE,oBAAC,MAAD;EAAI,GAAI;EAAO,WAAW,GAAG,+BAA+B,UAAU;EACnE;EACE,CAAA"}
@@ -1,58 +0,0 @@
1
- import { SidebarCollapseTrigger as SidebarCollapseTrigger$1, SidebarFolder as SidebarFolder$1, SidebarFolderContent as SidebarFolderContent$1, SidebarFolderLink as SidebarFolderLink$1, SidebarFolderTrigger as SidebarFolderTrigger$1, SidebarItem as SidebarItem$1, SidebarProvider, SidebarTrigger as SidebarTrigger$1, SidebarViewport as SidebarViewport$1 } from "../../components/sidebar/base.js";
2
- import { LinkItemType } from "../../utils/link-item.js";
3
- import { SidebarPageTreeComponents } from "../../components/sidebar/page-tree.js";
4
- import * as react from "react";
5
- import { ComponentProps } from "react";
6
- import * as react_jsx_runtime0 from "react/jsx-runtime";
7
-
8
- //#region src/layouts/flux/sidebar.d.ts
9
- declare function Sidebar(props: ComponentProps<typeof SidebarProvider>): react_jsx_runtime0.JSX.Element;
10
- declare function SidebarFolder(props: ComponentProps<typeof SidebarFolder$1>): react_jsx_runtime0.JSX.Element;
11
- declare function SidebarCollapseTrigger(props: ComponentProps<typeof SidebarCollapseTrigger$1>): react_jsx_runtime0.JSX.Element;
12
- declare function SidebarViewport(props: ComponentProps<typeof SidebarViewport$1>): react_jsx_runtime0.JSX.Element;
13
- declare function SidebarTrigger(props: ComponentProps<typeof SidebarTrigger$1>): react_jsx_runtime0.JSX.Element;
14
- declare function SidebarContent({
15
- ref: refProp,
16
- className,
17
- children,
18
- ...props
19
- }: ComponentProps<'aside'>): react_jsx_runtime0.JSX.Element;
20
- declare function SidebarSeparator({
21
- className,
22
- style,
23
- children,
24
- ...props
25
- }: ComponentProps<'p'>): react_jsx_runtime0.JSX.Element;
26
- declare function SidebarItem({
27
- className,
28
- style,
29
- children,
30
- ...props
31
- }: ComponentProps<typeof SidebarItem$1>): react_jsx_runtime0.JSX.Element;
32
- declare function SidebarFolderTrigger({
33
- className,
34
- style,
35
- ...props
36
- }: ComponentProps<typeof SidebarFolderTrigger$1>): react_jsx_runtime0.JSX.Element;
37
- declare function SidebarFolderLink({
38
- className,
39
- style,
40
- ...props
41
- }: ComponentProps<typeof SidebarFolderLink$1>): react_jsx_runtime0.JSX.Element;
42
- declare function SidebarFolderContent({
43
- className,
44
- children,
45
- ...props
46
- }: ComponentProps<typeof SidebarFolderContent$1>): react_jsx_runtime0.JSX.Element;
47
- declare const SidebarPageTree: (components: Partial<SidebarPageTreeComponents>) => react_jsx_runtime0.JSX.Element;
48
- declare const SidebarLinkItem: ({
49
- item,
50
- ...props
51
- }: react.HTMLAttributes<HTMLElement> & {
52
- item: Exclude<LinkItemType, {
53
- type: "icon";
54
- }>;
55
- }) => react_jsx_runtime0.JSX.Element;
56
- //#endregion
57
- export { Sidebar, SidebarCollapseTrigger, SidebarContent, SidebarFolder, SidebarFolderContent, SidebarFolderLink, SidebarFolderTrigger, SidebarItem, SidebarLinkItem, SidebarPageTree, SidebarSeparator, SidebarTrigger, SidebarViewport };
58
- //# sourceMappingURL=sidebar.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sidebar.d.ts","names":[],"sources":["../../../src/layouts/flux/sidebar.tsx"],"mappings":";;;;;;;;iBAoCgB,OAAA,CAAQ,KAAA,EAAO,cAAA,QAAsB,eAAA,IAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAI1D,aAAA,CAAc,KAAA,EAAO,cAAA,QAAsB,eAAA,IAAmB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAI9D,sBAAA,CAAuB,KAAA,EAAO,cAAA,QAAsB,wBAAA,IAA4B,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAIhF,eAAA,CAAgB,KAAA,EAAO,cAAA,QAAsB,iBAAA,IAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAIlE,cAAA,CAAe,KAAA,EAAO,cAAA,QAAsB,gBAAA,IAAoB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAIhE,cAAA,CAAA;EACd,GAAA,EAAK,OAAA;EACL,SAAA;EACA,QAAA;EAAA,GACG;AAAA,GACF,cAAA,YAAuB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBA6EV,gBAAA,CAAA;EAAmB,SAAA;EAAW,KAAA;EAAO,QAAA;EAAA,GAAa;AAAA,GAAS,cAAA,QAAmB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAiB9E,WAAA,CAAA;EACd,SAAA;EACA,KAAA;EACA,QAAA;EAAA,GACG;AAAA,GACF,cAAA,QAAsB,aAAA,IAAiB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAiB1B,oBAAA,CAAA;EACd,SAAA;EACA,KAAA;EAAA,GACG;AAAA,GACF,cAAA,QAAsB,sBAAA,IAA0B,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAuBnC,iBAAA,CAAA;EACd,SAAA;EACA,KAAA;EAAA,GACG;AAAA,GACF,cAAA,QAAsB,mBAAA,IAAuB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAiBhC,oBAAA,CAAA;EACd,SAAA;EACA,QAAA;EAAA,GACG;AAAA,GACF,cAAA,QAAsB,sBAAA,IAA0B,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,cAoCtC,eAAA,GAAe,UAAA,EAAA,OAAA,CAO1B,yBAAA,MAP0B,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,cASf,eAAA;EAAe,IAAA;EAAA,GAAA;AAAA,GAAA,KAAA,CAAA,cAAA,CAAA,WAAA;gBAAA,YAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"sidebar.js","names":["Base.SidebarItem","Base.SidebarFolderTrigger","Base.SidebarFolderLink","Base.SidebarFolderContent","Base.SidebarProvider","Base.SidebarFolder","Base.SidebarCollapseTrigger","Base.SidebarViewport","Base.SidebarTrigger","Base.useSidebar","Base.useFolderDepth","Base.SidebarSeparator","Base.useFolder"],"sources":["../../../src/layouts/flux/sidebar.tsx"],"sourcesContent":["'use client';\nimport * as Base from '@/components/sidebar/base';\nimport { cn } from '@/utils/cn';\nimport { type ComponentProps, useEffect, useEffectEvent, useRef, useState } from 'react';\nimport { cva } from 'class-variance-authority';\nimport { createPageTreeRenderer } from '@/components/sidebar/page-tree';\nimport { createLinkItemRenderer } from '@/components/sidebar/link-item';\nimport { mergeRefs } from '@/utils/merge-refs';\nimport { motion } from 'motion/react';\nimport { RemoveScroll } from 'react-remove-scroll';\n\nconst MotionSidebarItem = motion.create(Base.SidebarItem);\nconst MotionSidebarFolderTrigger = motion.create(Base.SidebarFolderTrigger);\nconst MotionSidebarFolderLink = motion.create(Base.SidebarFolderLink);\nconst MotionSidebarFolderContent = motion.create(Base.SidebarFolderContent);\n\nconst itemVariants = cva(\n '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',\n {\n variants: {\n variant: {\n 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',\n button:\n 'transition-colors hover:bg-fd-accent/50 hover:text-fd-accent-foreground/80 hover:transition-none',\n },\n highlight: {\n 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\",\n },\n },\n },\n);\n\nfunction getItemOffset(depth: number) {\n return `calc(${2 + 3 * depth} * var(--spacing))`;\n}\n\nexport function Sidebar(props: ComponentProps<typeof Base.SidebarProvider>) {\n return <Base.SidebarProvider {...props} />;\n}\n\nexport function SidebarFolder(props: ComponentProps<typeof Base.SidebarFolder>) {\n return <Base.SidebarFolder {...props} />;\n}\n\nexport function SidebarCollapseTrigger(props: ComponentProps<typeof Base.SidebarCollapseTrigger>) {\n return <Base.SidebarCollapseTrigger {...props} />;\n}\n\nexport function SidebarViewport(props: ComponentProps<typeof Base.SidebarViewport>) {\n return <Base.SidebarViewport {...props} />;\n}\n\nexport function SidebarTrigger(props: ComponentProps<typeof Base.SidebarTrigger>) {\n return <Base.SidebarTrigger {...props} />;\n}\n\nexport function SidebarContent({\n ref: refProp,\n className,\n children,\n ...props\n}: ComponentProps<'aside'>) {\n const ref = useRef<HTMLElement>(null);\n const [blockScroll, setBlockScroll] = useState(false);\n const { open, setOpen } = Base.useSidebar();\n\n const listener = useEffectEvent((e: KeyboardEvent) => {\n if (open && e.key === 'Escape') {\n setOpen(false);\n e.preventDefault();\n }\n });\n useEffect(() => {\n window.addEventListener('keydown', listener);\n return () => {\n window.removeEventListener('keydown', listener);\n };\n }, []);\n\n if (open && !blockScroll) setBlockScroll(true);\n\n return (\n <RemoveScroll enabled={blockScroll}>\n <motion.div\n className={cn(\n 'fixed inset-0 py-10 z-30 backdrop-blur-md bg-fd-background/60',\n !open && 'pointer-events-none',\n )}\n initial=\"hide\"\n variants={{\n show: {\n opacity: 1,\n },\n hide: {\n opacity: 0,\n },\n }}\n animate={open ? 'show' : 'hide'}\n exit=\"hide\"\n onClick={() => {\n setOpen(false);\n }}\n onAnimationComplete={(definition) => {\n if (definition === 'hide') setBlockScroll(false);\n }}\n >\n <motion.div\n className=\"absolute top-0 min-h-0 inset-x-0 bottom-26 overflow-y-auto fd-scroll-container pr-(--removed-body-scroll-bar-size,0) py-16 mask-[linear-gradient(to_bottom,transparent,white_--spacing(14),white_calc(100%---spacing(14)),transparent)] lg:text-sm\"\n variants={{\n show: {\n y: 0,\n opacity: 1,\n },\n hide: {\n y: '80%',\n opacity: 0,\n },\n }}\n transition={{\n duration: 0.4,\n ease: [0.16, 1, 0.3, 1],\n }}\n >\n <motion.aside\n id=\"nd-sidebar\"\n ref={mergeRefs(ref, refProp)}\n className={cn('mx-auto sm:max-w-[400px]', className)}\n onClick={(e) => e.stopPropagation()}\n {...(props as ComponentProps<typeof motion.aside>)}\n >\n {children}\n </motion.aside>\n </motion.div>\n </motion.div>\n </RemoveScroll>\n );\n}\n\nexport function SidebarSeparator({ className, style, children, ...props }: ComponentProps<'p'>) {\n const depth = Base.useFolderDepth();\n\n return (\n <Base.SidebarSeparator\n className={cn('[&_svg]:size-4 [&_svg]:shrink-0', className)}\n style={{\n paddingInlineStart: getItemOffset(depth),\n ...style,\n }}\n {...props}\n >\n {children}\n </Base.SidebarSeparator>\n );\n}\n\nexport function SidebarItem({\n className,\n style,\n children,\n ...props\n}: ComponentProps<typeof Base.SidebarItem>) {\n const depth = Base.useFolderDepth();\n\n return (\n <MotionSidebarItem\n className={cn(itemVariants({ variant: 'link', highlight: depth >= 1 }), className)}\n style={{\n paddingInlineStart: getItemOffset(depth),\n ...style,\n }}\n {...(props as object)}\n >\n {children}\n </MotionSidebarItem>\n );\n}\n\nexport function SidebarFolderTrigger({\n className,\n style,\n ...props\n}: ComponentProps<typeof Base.SidebarFolderTrigger>) {\n const { depth, collapsible } = Base.useFolder()!;\n\n return (\n <MotionSidebarFolderTrigger\n className={(s) =>\n cn(\n itemVariants({ variant: collapsible ? 'button' : null }),\n 'w-full',\n typeof className === 'function' ? className(s) : className,\n )\n }\n style={{\n paddingInlineStart: getItemOffset(depth - 1),\n ...style,\n }}\n {...(props as ComponentProps<typeof MotionSidebarFolderTrigger>)}\n >\n {props.children}\n </MotionSidebarFolderTrigger>\n );\n}\n\nexport function SidebarFolderLink({\n className,\n style,\n ...props\n}: ComponentProps<typeof Base.SidebarFolderLink>) {\n const depth = Base.useFolderDepth();\n\n return (\n <MotionSidebarFolderLink\n className={cn(itemVariants({ variant: 'link', highlight: depth > 1 }), 'w-full', className)}\n style={{\n paddingInlineStart: getItemOffset(depth - 1),\n ...style,\n }}\n {...(props as ComponentProps<typeof MotionSidebarFolderLink>)}\n >\n {props.children}\n </MotionSidebarFolderLink>\n );\n}\n\nexport function SidebarFolderContent({\n className,\n children,\n ...props\n}: ComponentProps<typeof Base.SidebarFolderContent>) {\n const depth = Base.useFolderDepth();\n const { open } = Base.useFolder()!;\n\n return (\n <MotionSidebarFolderContent\n className={(s) =>\n cn(\n 'relative',\n depth === 1 &&\n \"before:content-[''] before:absolute before:w-px before:inset-y-1 before:bg-fd-border before:start-2.5\",\n\n typeof className === 'function' ? className(s) : className,\n )\n }\n {...(props as ComponentProps<typeof MotionSidebarFolderContent>)}\n >\n <motion.div\n initial=\"hide\"\n animate={open ? 'show' : 'hide'}\n exit=\"hide\"\n variants={{\n show: {\n opacity: 1,\n },\n hide: {\n opacity: 0,\n },\n }}\n >\n {children}\n </motion.div>\n </MotionSidebarFolderContent>\n );\n}\n\nexport const SidebarPageTree = createPageTreeRenderer({\n SidebarFolder,\n SidebarFolderContent,\n SidebarSeparator,\n SidebarFolderLink,\n SidebarFolderTrigger,\n SidebarItem,\n});\n\nexport const SidebarLinkItem = createLinkItemRenderer({\n SidebarFolder,\n SidebarFolderContent,\n SidebarFolderLink,\n SidebarFolderTrigger,\n SidebarItem,\n});\n"],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- import { SidebarTab } from "../../components/sidebar/tabs/index.js";
2
- import { ComponentProps, ReactNode } from "react";
3
- import * as react_jsx_runtime0 from "react/jsx-runtime";
4
-
5
- //#region src/layouts/flux/tab-dropdown.d.ts
6
- interface SidebarTabWithProps extends SidebarTab {
7
- props?: ComponentProps<'a'>;
8
- }
9
- declare function SidebarTabsDropdown({
10
- options,
11
- placeholder,
12
- className,
13
- ...props
14
- }: {
15
- placeholder?: ReactNode;
16
- options: SidebarTabWithProps[];
17
- } & ComponentProps<'button'>): react_jsx_runtime0.JSX.Element;
18
- declare function isTabActive(tab: SidebarTab, pathname: string): boolean;
19
- //#endregion
20
- export { SidebarTabWithProps, SidebarTabsDropdown, isTabActive };
21
- //# sourceMappingURL=tab-dropdown.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tab-dropdown.d.ts","names":[],"sources":["../../../src/layouts/flux/tab-dropdown.tsx"],"mappings":";;;;;UAYiB,mBAAA,SAA4B,UAAA;EAC3C,KAAA,GAAQ,cAAA;AAAA;AAAA,iBAGM,mBAAA,CAAA;EACd,OAAA;EACA,WAAA;EACA,SAAA;EAAA,GACG;AAAA;EAEH,WAAA,GAAc,SAAA;EACd,OAAA,EAAS,mBAAA;AAAA,IACP,cAAA,aAAwB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAiGZ,WAAA,CAAY,GAAA,EAAK,UAAA,EAAY,QAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tab-dropdown.js","names":[],"sources":["../../../src/layouts/flux/tab-dropdown.tsx"],"sourcesContent":["'use client';\nimport { Check, ChevronsUpDown } from 'lucide-react';\nimport { type ComponentProps, type ReactNode, useMemo, useState } from 'react';\nimport Link from 'fumadocs-core/link';\nimport { usePathname } from 'fumadocs-core/framework';\nimport { cn } from '@/utils/cn';\nimport { isActive, normalize } from '@/utils/urls';\nimport { useSidebar } from '@/components/sidebar/base';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\nimport type { SidebarTab } from '@/components/sidebar/tabs';\nimport { AnimatePresence, motion } from 'motion/react';\n\nexport interface SidebarTabWithProps extends SidebarTab {\n props?: ComponentProps<'a'>;\n}\n\nexport function SidebarTabsDropdown({\n options,\n placeholder,\n className,\n ...props\n}: {\n placeholder?: ReactNode;\n options: SidebarTabWithProps[];\n} & ComponentProps<'button'>) {\n const [open, setOpen] = useState(false);\n const { closeOnRedirect } = useSidebar();\n const pathname = usePathname();\n const selectedIdx = useMemo(() => {\n return options.findLastIndex((item) => isTabActive(item, pathname));\n }, [options, pathname]);\n const selected = selectedIdx !== -1 ? options[selectedIdx] : undefined;\n\n const onClick = () => {\n closeOnRedirect.current = false;\n setOpen(false);\n };\n\n const item = selected ? (\n <>\n <div className=\"size-4.5 shrink-0 empty:hidden\">{selected.icon}</div>\n <p className=\"font-medium\">{selected.title}</p>\n </>\n ) : (\n placeholder\n );\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n {item && (\n <PopoverTrigger\n className={cn(\n 'flex items-center gap-2 rounded-full p-1.5 border shadow-sm text-sm text-start transition-colors hover:bg-fd-accent hover:text-fd-accent-foreground data-open:bg-fd-accent data-open:text-fd-accent-foreground',\n className,\n )}\n {...props}\n >\n <AnimatePresence mode=\"popLayout\">\n <motion.span\n key={selectedIdx}\n className=\"flex w-full min-w-0 overflow-hidden items-center text-nowrap gap-1.5\"\n initial={{\n opacity: 0,\n y: '100%',\n }}\n animate={{\n opacity: 1,\n y: 0,\n }}\n exit={{\n opacity: 0,\n y: '-100%',\n }}\n >\n {item}\n </motion.span>\n </AnimatePresence>\n <ChevronsUpDown className=\"shrink-0 ms-auto size-4 text-fd-muted-foreground\" />\n </PopoverTrigger>\n )}\n <PopoverContent\n align=\"start\"\n className=\"flex flex-col gap-1 max-w-svw p-1 fd-scroll-container\"\n >\n {options.map((item, i) => {\n const isActive = i === selectedIdx;\n if (!isActive && item.unlisted) return;\n\n return (\n <Link\n key={item.url}\n href={item.url}\n onClick={onClick}\n {...item.props}\n className={cn(\n 'flex items-center gap-1.5 rounded-lg p-1.5 hover:bg-fd-accent hover:text-fd-accent-foreground',\n item.props?.className,\n )}\n >\n <div className=\"shrink-0 mb-auto size-4.5 empty:hidden\">{item.icon}</div>\n <div>\n <p className=\"text-sm font-medium leading-none\">{item.title}</p>\n <p className=\"text-[0.8125rem] text-fd-muted-foreground mt-1 empty:hidden\">\n {item.description}\n </p>\n </div>\n\n <Check\n className={cn(\n 'shrink-0 ms-auto size-3.5 text-fd-primary',\n !isActive && 'invisible',\n )}\n />\n </Link>\n );\n })}\n </PopoverContent>\n </Popover>\n );\n}\n\nexport function isTabActive(tab: SidebarTab, pathname: string) {\n if (tab.urls) return tab.urls.has(normalize(pathname));\n\n return isActive(tab.url, pathname, true);\n}\n"],"mappings":";;;;;;;;;;;;AAgBA,SAAgB,oBAAoB,EAClC,SACA,aACA,WACA,GAAG,SAIyB;CAC5B,MAAM,CAAC,MAAM,WAAW,SAAS,MAAM;CACvC,MAAM,EAAE,oBAAoB,YAAY;CACxC,MAAM,WAAW,aAAa;CAC9B,MAAM,cAAc,cAAc;AAChC,SAAO,QAAQ,eAAe,SAAS,YAAY,MAAM,SAAS,CAAC;IAClE,CAAC,SAAS,SAAS,CAAC;CACvB,MAAM,WAAW,gBAAgB,KAAK,QAAQ,eAAe,KAAA;CAE7D,MAAM,gBAAgB;AACpB,kBAAgB,UAAU;AAC1B,UAAQ,MAAM;;CAGhB,MAAM,OAAO,WACX,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,OAAD;EAAK,WAAU;YAAkC,SAAS;EAAW,CAAA,EACrE,oBAAC,KAAD;EAAG,WAAU;YAAe,SAAS;EAAU,CAAA,CAC9C,EAAA,CAAA,GAEH;AAGF,QACE,qBAAC,SAAD;EAAe;EAAM,cAAc;YAAnC,CACG,QACC,qBAAC,gBAAD;GACE,WAAW,GACT,kNACA,UACD;GACD,GAAI;aALN,CAOE,oBAAC,iBAAD;IAAiB,MAAK;cACpB,oBAAC,OAAO,MAAR;KAEE,WAAU;KACV,SAAS;MACP,SAAS;MACT,GAAG;MACJ;KACD,SAAS;MACP,SAAS;MACT,GAAG;MACJ;KACD,MAAM;MACJ,SAAS;MACT,GAAG;MACJ;eAEA;KACW,EAhBP,YAgBO;IACE,CAAA,EAClB,oBAAC,gBAAD,EAAgB,WAAU,oDAAqD,CAAA,CAChE;MAEnB,oBAAC,gBAAD;GACE,OAAM;GACN,WAAU;aAET,QAAQ,KAAK,MAAM,MAAM;IACxB,MAAM,WAAW,MAAM;AACvB,QAAI,CAAC,YAAY,KAAK,SAAU;AAEhC,WACE,qBAAC,MAAD;KAEE,MAAM,KAAK;KACF;KACT,GAAI,KAAK;KACT,WAAW,GACT,iGACA,KAAK,OAAO,UACb;eARH;MAUE,oBAAC,OAAD;OAAK,WAAU;iBAA0C,KAAK;OAAW,CAAA;MACzE,qBAAC,OAAD,EAAA,UAAA,CACE,oBAAC,KAAD;OAAG,WAAU;iBAAoC,KAAK;OAAU,CAAA,EAChE,oBAAC,KAAD;OAAG,WAAU;iBACV,KAAK;OACJ,CAAA,CACA,EAAA,CAAA;MAEN,oBAAC,OAAD,EACE,WAAW,GACT,6CACA,CAAC,YAAY,YACd,EACD,CAAA;MACG;OAvBA,KAAK,IAuBL;KAET;GACa,CAAA,CACT;;;AAId,SAAgB,YAAY,KAAiB,UAAkB;AAC7D,KAAI,IAAI,KAAM,QAAO,IAAI,KAAK,IAAI,UAAU,SAAS,CAAC;AAEtD,QAAO,SAAS,IAAI,KAAK,UAAU,KAAK"}
@@ -1,19 +0,0 @@
1
- import { HomeLayoutProps } from "./index.js";
2
- import * as react_jsx_runtime0 from "react/jsx-runtime";
3
- import * as class_variance_authority_types0 from "class-variance-authority/types";
4
-
5
- //#region src/layouts/home/client.d.ts
6
- declare const navItemVariants: (props?: ({
7
- variant?: "icon" | "main" | "button" | null | undefined;
8
- } & class_variance_authority_types0.ClassProp) | undefined) => string;
9
- declare function Header({
10
- nav,
11
- i18n,
12
- links,
13
- githubUrl,
14
- themeSwitch,
15
- searchToggle
16
- }: HomeLayoutProps): react_jsx_runtime0.JSX.Element;
17
- //#endregion
18
- export { Header, navItemVariants };
19
- //# sourceMappingURL=client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.ts","names":[],"sources":["../../../src/layouts/home/client.tsx"],"mappings":";;;;;cAuCa,eAAA,GAAe,KAAA;;IAiB1B,+BAAA,CAAA,SAAA;AAAA,iBAEc,MAAA,CAAA;EACd,GAAA;EACA,IAAA;EACA,KAAA;EACA,SAAA;EACA,WAAA;EACA;AAAA,GACC,eAAA,GAAe,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1,262 +0,0 @@
1
- "use client";
2
- import { cn } from "../../utils/cn.js";
3
- import { buttonVariants } from "../../components/ui/button.js";
4
- import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "../../components/ui/collapsible.js";
5
- import { useIsScrollTop } from "../../utils/use-is-scroll-top.js";
6
- import { LinkItem } from "../../utils/link-item.js";
7
- import { NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuRoot, NavigationMenuTrigger } from "../../components/ui/navigation-menu.js";
8
- import { LargeSearchToggle, SearchToggle } from "../shared/search-toggle.js";
9
- import { renderTitleNav, useLinkItems } from "../shared/index.js";
10
- import { LanguageToggle, LanguageToggleText } from "../shared/language-toggle.js";
11
- import { ThemeToggle } from "../shared/theme-toggle.js";
12
- import { Fragment, createContext, use, useEffect, useEffectEvent, useMemo, useState } from "react";
13
- import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
14
- import Link from "fumadocs-core/link";
15
- import { ChevronDown, Languages } from "lucide-react";
16
- import { cva } from "class-variance-authority";
17
- import { NavigationMenu } from "@base-ui/react";
18
- //#region src/layouts/home/client.tsx
19
- const MobileMenuContext = createContext(null);
20
- const navItemVariants = cva("[&_svg]:size-4", {
21
- variants: { variant: {
22
- 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 data-popup-open:text-fd-primary",
23
- button: buttonVariants({
24
- color: "secondary",
25
- className: "gap-1.5"
26
- }),
27
- icon: buttonVariants({
28
- color: "ghost",
29
- size: "icon"
30
- })
31
- } },
32
- defaultVariants: { variant: "main" }
33
- });
34
- function Header({ nav = {}, i18n = false, links, githubUrl, themeSwitch = {}, searchToggle = {} }) {
35
- const { menuItems, navItems } = useLinkItems({
36
- links,
37
- githubUrl
38
- });
39
- return /* @__PURE__ */ jsx(MobileMenuCollapsible, { render: (_, s) => /* @__PURE__ */ jsxs(HeaderRoot, {
40
- transparentMode: nav.transparentMode,
41
- className: cn(s.open && "shadow-lg rounded-b-2xl"),
42
- children: [
43
- /* @__PURE__ */ jsxs("div", {
44
- className: "flex h-14 w-full items-center px-4 mx-auto max-w-(--fd-layout-width)",
45
- children: [
46
- renderTitleNav(nav, { className: "inline-flex items-center gap-2.5 font-semibold" }),
47
- nav.children,
48
- /* @__PURE__ */ jsx(NavigationMenuList, {
49
- className: "flex flex-row items-center gap-2 px-6 max-sm:hidden",
50
- children: navItems.filter((item) => !isSecondary(item)).map((item, i) => /* @__PURE__ */ jsx(NavigationMenuLinkItem, {
51
- item,
52
- className: "text-sm"
53
- }, i))
54
- }),
55
- /* @__PURE__ */ jsxs("div", {
56
- className: "flex flex-row items-center justify-end gap-1.5 flex-1 max-lg:hidden",
57
- children: [
58
- searchToggle.enabled !== false && (searchToggle.components?.lg ?? /* @__PURE__ */ jsx(LargeSearchToggle, {
59
- className: "w-full rounded-full ps-2.5 max-w-[240px]",
60
- hideIfDisabled: true
61
- })),
62
- themeSwitch.enabled !== false && (themeSwitch.component ?? /* @__PURE__ */ jsx(ThemeToggle, { mode: themeSwitch?.mode })),
63
- i18n && /* @__PURE__ */ jsx(LanguageToggle, { children: /* @__PURE__ */ jsx(Languages, { className: "size-5" }) }),
64
- /* @__PURE__ */ jsx(NavigationMenuList, {
65
- className: "flex flex-row gap-2 items-center empty:hidden",
66
- children: navItems.filter(isSecondary).map((item, i) => /* @__PURE__ */ jsx(NavigationMenuLinkItem, {
67
- className: cn(item.type === "icon" && "-mx-1 first:ms-0 last:me-0"),
68
- item
69
- }, i))
70
- })
71
- ]
72
- }),
73
- /* @__PURE__ */ jsxs("div", {
74
- className: "flex flex-row items-center ms-auto -me-1.5 lg:hidden",
75
- children: [searchToggle.enabled !== false && (searchToggle.components?.sm ?? /* @__PURE__ */ jsx(SearchToggle, {
76
- className: "p-2",
77
- hideIfDisabled: true
78
- })), /* @__PURE__ */ jsx(CollapsibleTrigger, {
79
- "aria-label": "Toggle Menu",
80
- className: cn(buttonVariants({
81
- size: "icon",
82
- color: "ghost",
83
- className: "group [&_svg]:size-5.5"
84
- })),
85
- children: /* @__PURE__ */ jsx(ChevronDown, { className: "transition-transform duration-300 group-data-panel-open:rotate-180" })
86
- })]
87
- })
88
- ]
89
- }),
90
- /* @__PURE__ */ jsxs(CollapsibleContent, {
91
- className: "flex flex-col px-4",
92
- children: [menuItems.filter((item) => !isSecondary(item)).map((item, i) => /* @__PURE__ */ jsx(MobileMenuLinkItem, {
93
- item,
94
- className: "first:mt-4 sm:hidden"
95
- }, i)), /* @__PURE__ */ jsxs("div", {
96
- className: "-ms-1.5 flex flex-row pt-2 pb-4 items-center justify-end gap-2",
97
- children: [
98
- menuItems.filter(isSecondary).map((item, i) => /* @__PURE__ */ jsx(MobileMenuLinkItem, {
99
- item,
100
- className: cn(item.type === "icon" && "-mx-1 first:ms-0")
101
- }, i)),
102
- /* @__PURE__ */ jsx("div", {
103
- role: "separator",
104
- className: "flex-1 sm:hidden"
105
- }),
106
- i18n && /* @__PURE__ */ jsxs(LanguageToggle, { children: [
107
- /* @__PURE__ */ jsx(Languages, { className: "size-5" }),
108
- /* @__PURE__ */ jsx(LanguageToggleText, {}),
109
- /* @__PURE__ */ jsx(ChevronDown, { className: "size-3 text-fd-muted-foreground" })
110
- ] }),
111
- themeSwitch.enabled !== false && (themeSwitch.component ?? /* @__PURE__ */ jsx(ThemeToggle, { mode: themeSwitch?.mode }))
112
- ]
113
- })]
114
- }),
115
- /* @__PURE__ */ jsx(NavigationMenu.Portal, { children: /* @__PURE__ */ jsx(NavigationMenu.Positioner, {
116
- sideOffset: 10,
117
- className: "z-20 h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[left,right] duration-(--duration) ease-(--easing) data-instant:transition-none",
118
- style: {
119
- ["--duration"]: "0.35s",
120
- ["--easing"]: "cubic-bezier(0.22, 1, 0.36, 1)"
121
- },
122
- children: /* @__PURE__ */ jsx(NavigationMenu.Popup, {
123
- className: "relative w-(--popup-width) h-(--popup-height) max-w-(--fd-layout-width,1400px) origin-(--transform-origin) rounded-xl bg-fd-background/80 border backdrop-blur-lg shadow-lg transition-[opacity,transform,width,height,scale,translate] duration-(--duration) ease-(--easing) data-ending-style:scale-90 data-ending-style:opacity-0 data-ending-style:duration-150 data-starting-style:scale-90 data-starting-style:opacity-0",
124
- children: /* @__PURE__ */ jsx(NavigationMenu.Viewport, { className: "relative size-full overflow-hidden" })
125
- })
126
- }) })
127
- ]
128
- }) });
129
- }
130
- function MobileMenuCollapsible(props) {
131
- const [open, setOpen] = useState(false);
132
- const onClick = useEffectEvent((e) => {
133
- if (!open) return;
134
- const header = document.getElementById("nd-nav");
135
- if (header && !header.contains(e.target)) setOpen(false);
136
- });
137
- useEffect(() => {
138
- window.addEventListener("click", onClick);
139
- return () => {
140
- window.removeEventListener("click", onClick);
141
- };
142
- }, []);
143
- return /* @__PURE__ */ jsx(MobileMenuContext, {
144
- value: useMemo(() => ({
145
- open,
146
- setOpen
147
- }), [open]),
148
- children: /* @__PURE__ */ jsx(Collapsible, {
149
- open,
150
- onOpenChange: setOpen,
151
- ...props
152
- })
153
- });
154
- }
155
- function isSecondary(item) {
156
- if ("secondary" in item && item.secondary != null) return item.secondary;
157
- return item.type === "icon";
158
- }
159
- function HeaderRoot({ transparentMode = "none", children, className, ...props }) {
160
- const isTop = useIsScrollTop({ enabled: transparentMode === "top" }) ?? true;
161
- const isTransparent = transparentMode === "top" ? isTop : transparentMode === "always";
162
- return /* @__PURE__ */ jsx("header", {
163
- id: "nd-nav",
164
- className: "sticky h-14 top-0 z-40",
165
- children: /* @__PURE__ */ jsx(NavigationMenuRoot, { render: (_, s) => /* @__PURE__ */ jsx("nav", {
166
- className: cn("backdrop-blur-lg border-b transition-colors", (!isTransparent || s.open) && "bg-fd-background/80", className),
167
- ...props,
168
- children
169
- }) })
170
- });
171
- }
172
- function NavigationMenuLinkItem({ item, ...props }) {
173
- if (item.type === "custom") return item.children;
174
- if (item.type === "menu") {
175
- const children = item.items.map((child, j) => {
176
- if (child.type === "custom") return /* @__PURE__ */ jsx(Fragment, { children: child.children }, j);
177
- const { banner = child.icon ? /* @__PURE__ */ jsx("div", {
178
- className: "w-fit rounded-md border bg-fd-muted p-1 [&_svg]:size-4",
179
- children: child.icon
180
- }) : null, ...rest } = child.menu ?? {};
181
- return /* @__PURE__ */ jsx(NavigationMenuLink, { render: /* @__PURE__ */ jsx(Link, {
182
- href: child.url,
183
- external: child.external,
184
- ...rest,
185
- 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),
186
- children: rest.children ?? /* @__PURE__ */ jsxs(Fragment$1, { children: [
187
- banner,
188
- /* @__PURE__ */ jsx("p", {
189
- className: "text-base font-medium",
190
- children: child.text
191
- }),
192
- /* @__PURE__ */ jsx("p", {
193
- className: "text-sm text-fd-muted-foreground empty:hidden",
194
- children: child.description
195
- })
196
- ] })
197
- }) }, `${j}-${child.url}`);
198
- });
199
- return /* @__PURE__ */ jsxs(NavigationMenuItem, {
200
- ...props,
201
- children: [/* @__PURE__ */ jsx(NavigationMenuTrigger, {
202
- className: cn(navItemVariants(), "rounded-md"),
203
- children: item.url ? /* @__PURE__ */ jsx(Link, {
204
- href: item.url,
205
- external: item.external,
206
- children: item.text
207
- }) : item.text
208
- }), /* @__PURE__ */ jsx(NavigationMenuContent, {
209
- className: "grid grid-cols-1 gap-2 p-4 md:grid-cols-2 lg:grid-cols-3",
210
- children
211
- })]
212
- });
213
- }
214
- return /* @__PURE__ */ jsx(NavigationMenuItem, {
215
- ...props,
216
- children: /* @__PURE__ */ jsx(NavigationMenuLink, { render: /* @__PURE__ */ jsx(LinkItem, {
217
- item,
218
- "aria-label": item.type === "icon" ? item.label : void 0,
219
- className: cn(navItemVariants({ variant: item.type })),
220
- children: item.type === "icon" ? item.icon : item.text
221
- }) })
222
- });
223
- }
224
- function MobileMenuLinkItem({ item, className }) {
225
- if (item.type === "custom") return /* @__PURE__ */ jsx("div", {
226
- className: cn("grid", className),
227
- children: item.children
228
- });
229
- const { setOpen } = use(MobileMenuContext);
230
- if (item.type === "menu") {
231
- const header = /* @__PURE__ */ jsxs(Fragment$1, { children: [item.icon, item.text] });
232
- return /* @__PURE__ */ jsxs("div", {
233
- className: cn("mb-4 flex flex-col", className),
234
- children: [/* @__PURE__ */ jsx("p", {
235
- className: "mb-1 text-sm text-fd-muted-foreground",
236
- children: item.url ? /* @__PURE__ */ jsx(Link, {
237
- href: item.url,
238
- external: item.external,
239
- onClick: () => setOpen(false),
240
- children: header
241
- }) : header
242
- }), item.items.map((child, i) => /* @__PURE__ */ jsx(MobileMenuLinkItem, { item: child }, i))]
243
- });
244
- }
245
- return /* @__PURE__ */ jsxs(LinkItem, {
246
- item,
247
- className: cn((!item.type || item.type === "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", item.type === "icon" && buttonVariants({
248
- size: "icon",
249
- color: "ghost"
250
- }), item.type === "button" && buttonVariants({
251
- color: "secondary",
252
- className: "gap-1.5 [&_svg]:size-4"
253
- }), className),
254
- "aria-label": item.type === "icon" ? item.label : void 0,
255
- onClick: () => setOpen(false),
256
- children: [item.icon, item.type !== "icon" && item.text]
257
- });
258
- }
259
- //#endregion
260
- export { Header, navItemVariants };
261
-
262
- //# sourceMappingURL=client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","names":[],"sources":["../../../src/layouts/home/client.tsx"],"sourcesContent":["'use client';\nimport {\n type ComponentProps,\n createContext,\n Fragment,\n use,\n useEffect,\n useEffectEvent,\n useMemo,\n useState,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport Link from 'fumadocs-core/link';\nimport { cn } from '@/utils/cn';\nimport { type LinkItemType, type NavOptions, renderTitleNav, useLinkItems } from '@/layouts/shared';\nimport { LinkItem } from '@/utils/link-item';\nimport {\n NavigationMenuRoot,\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuTrigger,\n} from '@/components/ui/navigation-menu';\nimport { buttonVariants } from '@/components/ui/button';\nimport type { HomeLayoutProps } from '.';\nimport { LargeSearchToggle, SearchToggle } from '@/layouts/shared/search-toggle';\nimport { ThemeToggle } from '@/layouts/shared/theme-toggle';\nimport { LanguageToggle, LanguageToggleText } from '@/layouts/shared/language-toggle';\nimport { ChevronDown, Languages } from 'lucide-react';\nimport { useIsScrollTop } from '@/utils/use-is-scroll-top';\nimport { NavigationMenu } from '@base-ui/react';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible';\n\nconst MobileMenuContext = createContext<{\n open: boolean;\n setOpen: (open: boolean) => void;\n} | null>(null);\n\nexport const navItemVariants = cva('[&_svg]:size-4', {\n variants: {\n variant: {\n 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 data-popup-open:text-fd-primary',\n button: buttonVariants({\n color: 'secondary',\n className: 'gap-1.5',\n }),\n icon: buttonVariants({\n color: 'ghost',\n size: 'icon',\n }),\n },\n },\n defaultVariants: {\n variant: 'main',\n },\n});\n\nexport function Header({\n nav = {},\n i18n = false,\n links,\n githubUrl,\n themeSwitch = {},\n searchToggle = {},\n}: HomeLayoutProps) {\n const { menuItems, navItems } = useLinkItems({ links, githubUrl });\n\n return (\n <MobileMenuCollapsible\n render={(_, s) => (\n <HeaderRoot\n transparentMode={nav.transparentMode}\n className={cn(s.open && 'shadow-lg rounded-b-2xl')}\n >\n <div className=\"flex h-14 w-full items-center px-4 mx-auto max-w-(--fd-layout-width)\">\n {renderTitleNav(nav, {\n className: 'inline-flex items-center gap-2.5 font-semibold',\n })}\n {nav.children}\n <NavigationMenuList className=\"flex flex-row items-center gap-2 px-6 max-sm:hidden\">\n {navItems\n .filter((item) => !isSecondary(item))\n .map((item, i) => (\n <NavigationMenuLinkItem key={i} item={item} className=\"text-sm\" />\n ))}\n </NavigationMenuList>\n <div className=\"flex flex-row items-center justify-end gap-1.5 flex-1 max-lg:hidden\">\n {searchToggle.enabled !== false &&\n (searchToggle.components?.lg ?? (\n <LargeSearchToggle\n className=\"w-full rounded-full ps-2.5 max-w-[240px]\"\n hideIfDisabled\n />\n ))}\n {themeSwitch.enabled !== false &&\n (themeSwitch.component ?? <ThemeToggle mode={themeSwitch?.mode} />)}\n {i18n && (\n <LanguageToggle>\n <Languages className=\"size-5\" />\n </LanguageToggle>\n )}\n <NavigationMenuList className=\"flex flex-row gap-2 items-center empty:hidden\">\n {navItems.filter(isSecondary).map((item, i) => (\n <NavigationMenuLinkItem\n key={i}\n className={cn(item.type === 'icon' && '-mx-1 first:ms-0 last:me-0')}\n item={item}\n />\n ))}\n </NavigationMenuList>\n </div>\n <div className=\"flex flex-row items-center ms-auto -me-1.5 lg:hidden\">\n {searchToggle.enabled !== false &&\n (searchToggle.components?.sm ?? <SearchToggle className=\"p-2\" hideIfDisabled />)}\n <CollapsibleTrigger\n aria-label=\"Toggle Menu\"\n className={cn(\n buttonVariants({\n size: 'icon',\n color: 'ghost',\n className: 'group [&_svg]:size-5.5',\n }),\n )}\n >\n <ChevronDown className=\"transition-transform duration-300 group-data-panel-open:rotate-180\" />\n </CollapsibleTrigger>\n </div>\n </div>\n <CollapsibleContent className=\"flex flex-col px-4\">\n {menuItems\n .filter((item) => !isSecondary(item))\n .map((item, i) => (\n <MobileMenuLinkItem key={i} item={item} className=\"first:mt-4 sm:hidden\" />\n ))}\n <div className=\"-ms-1.5 flex flex-row pt-2 pb-4 items-center justify-end gap-2\">\n {menuItems.filter(isSecondary).map((item, i) => (\n <MobileMenuLinkItem\n key={i}\n item={item}\n className={cn(item.type === 'icon' && '-mx-1 first:ms-0')}\n />\n ))}\n <div role=\"separator\" className=\"flex-1 sm:hidden\" />\n {i18n && (\n <LanguageToggle>\n <Languages className=\"size-5\" />\n <LanguageToggleText />\n <ChevronDown className=\"size-3 text-fd-muted-foreground\" />\n </LanguageToggle>\n )}\n {themeSwitch.enabled !== false &&\n (themeSwitch.component ?? <ThemeToggle mode={themeSwitch?.mode} />)}\n </div>\n </CollapsibleContent>\n <NavigationMenu.Portal>\n <NavigationMenu.Positioner\n sideOffset={10}\n className=\"z-20 h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[left,right] duration-(--duration) ease-(--easing) data-instant:transition-none\"\n style={{\n ['--duration' as string]: '0.35s',\n ['--easing' as string]: 'cubic-bezier(0.22, 1, 0.36, 1)',\n }}\n >\n <NavigationMenu.Popup className=\"relative w-(--popup-width) h-(--popup-height) max-w-(--fd-layout-width,1400px) origin-(--transform-origin) rounded-xl bg-fd-background/80 border backdrop-blur-lg shadow-lg transition-[opacity,transform,width,height,scale,translate] duration-(--duration) ease-(--easing) data-ending-style:scale-90 data-ending-style:opacity-0 data-ending-style:duration-150 data-starting-style:scale-90 data-starting-style:opacity-0\">\n <NavigationMenu.Viewport className=\"relative size-full overflow-hidden\" />\n </NavigationMenu.Popup>\n </NavigationMenu.Positioner>\n </NavigationMenu.Portal>\n </HeaderRoot>\n )}\n />\n );\n}\n\nfunction MobileMenuCollapsible(props: ComponentProps<typeof Collapsible>) {\n const [open, setOpen] = useState(false);\n\n const onClick = useEffectEvent((e: Event) => {\n if (!open) return;\n const header = document.getElementById('nd-nav');\n if (header && !header.contains(e.target as HTMLElement)) setOpen(false);\n });\n\n useEffect(() => {\n window.addEventListener('click', onClick);\n\n return () => {\n window.removeEventListener('click', onClick);\n };\n }, []);\n\n return (\n <MobileMenuContext\n value={useMemo(\n () => ({\n open,\n setOpen,\n }),\n [open],\n )}\n >\n <Collapsible open={open} onOpenChange={setOpen} {...props} />\n </MobileMenuContext>\n );\n}\n\nfunction isSecondary(item: LinkItemType): boolean {\n if ('secondary' in item && item.secondary != null) return item.secondary;\n\n return item.type === 'icon';\n}\n\nfunction HeaderRoot({\n transparentMode = 'none',\n children,\n className,\n ...props\n}: ComponentProps<'div'> & {\n transparentMode?: NavOptions['transparentMode'];\n}) {\n const isTop = useIsScrollTop({ enabled: transparentMode === 'top' }) ?? true;\n const isTransparent = transparentMode === 'top' ? isTop : transparentMode === 'always';\n\n return (\n <header id=\"nd-nav\" className=\"sticky h-14 top-0 z-40\">\n <NavigationMenuRoot\n render={(_, s) => (\n <nav\n className={cn(\n 'backdrop-blur-lg border-b transition-colors',\n (!isTransparent || s.open) && 'bg-fd-background/80',\n className,\n )}\n {...props}\n >\n {children}\n </nav>\n )}\n />\n </header>\n );\n}\n\nfunction NavigationMenuLinkItem({ item, ...props }: { item: LinkItemType; className?: string }) {\n if (item.type === 'custom') return item.children;\n\n if (item.type === 'menu') {\n const children = item.items.map((child, j) => {\n if (child.type === 'custom') {\n return <Fragment key={j}>{child.children}</Fragment>;\n }\n\n const {\n banner = child.icon ? (\n <div className=\"w-fit rounded-md border bg-fd-muted p-1 [&_svg]:size-4\">{child.icon}</div>\n ) : null,\n ...rest\n } = child.menu ?? {};\n\n return (\n <NavigationMenuLink\n key={`${j}-${child.url}`}\n render={\n <Link\n href={child.url}\n external={child.external}\n {...rest}\n className={cn(\n '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',\n rest.className,\n )}\n >\n {rest.children ?? (\n <>\n {banner}\n <p className=\"text-base font-medium\">{child.text}</p>\n <p className=\"text-sm text-fd-muted-foreground empty:hidden\">\n {child.description}\n </p>\n </>\n )}\n </Link>\n }\n />\n );\n });\n\n return (\n <NavigationMenuItem {...props}>\n <NavigationMenuTrigger className={cn(navItemVariants(), 'rounded-md')}>\n {item.url ? (\n <Link href={item.url} external={item.external}>\n {item.text}\n </Link>\n ) : (\n item.text\n )}\n </NavigationMenuTrigger>\n <NavigationMenuContent className=\"grid grid-cols-1 gap-2 p-4 md:grid-cols-2 lg:grid-cols-3\">\n {children}\n </NavigationMenuContent>\n </NavigationMenuItem>\n );\n }\n\n return (\n <NavigationMenuItem {...props}>\n <NavigationMenuLink\n render={\n <LinkItem\n item={item}\n aria-label={item.type === 'icon' ? item.label : undefined}\n className={cn(navItemVariants({ variant: item.type }))}\n >\n {item.type === 'icon' ? item.icon : item.text}\n </LinkItem>\n }\n />\n </NavigationMenuItem>\n );\n}\n\nfunction MobileMenuLinkItem({ item, className }: { item: LinkItemType; className?: string }) {\n if (item.type === 'custom') return <div className={cn('grid', className)}>{item.children}</div>;\n const { setOpen } = use(MobileMenuContext)!;\n\n if (item.type === 'menu') {\n const header = (\n <>\n {item.icon}\n {item.text}\n </>\n );\n\n return (\n <div className={cn('mb-4 flex flex-col', className)}>\n <p className=\"mb-1 text-sm text-fd-muted-foreground\">\n {item.url ? (\n <Link href={item.url} external={item.external} onClick={() => setOpen(false)}>\n {header}\n </Link>\n ) : (\n header\n )}\n </p>\n {item.items.map((child, i) => (\n <MobileMenuLinkItem key={i} item={child} />\n ))}\n </div>\n );\n }\n\n return (\n <LinkItem\n item={item}\n className={cn(\n (!item.type || item.type === 'main') &&\n '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',\n item.type === 'icon' &&\n buttonVariants({\n size: 'icon',\n color: 'ghost',\n }),\n item.type === 'button' &&\n buttonVariants({\n color: 'secondary',\n className: 'gap-1.5 [&_svg]:size-4',\n }),\n className,\n )}\n aria-label={item.type === 'icon' ? item.label : undefined}\n onClick={() => setOpen(false)}\n >\n {item.icon}\n {item.type !== 'icon' && item.text}\n </LinkItem>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/layouts/home/index.tsx"],"mappings":";;;;;UAKiB,eAAA,SAAwB,eAAA;EACvC,GAAA,GAAM,OAAA,CAAQ,UAAA;AAAA;AAAA,iBAGA,UAAA,CAAW,KAAA,EAAO,eAAA,GAAkB,cAAA,WAAsB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/layouts/home/index.tsx"],"sourcesContent":["import type { ComponentProps } from 'react';\nimport { cn } from '@/utils/cn';\nimport { type BaseLayoutProps, type NavOptions } from '@/layouts/shared';\nimport { Header } from '@/layouts/home/client';\n\nexport interface HomeLayoutProps extends BaseLayoutProps {\n nav?: Partial<NavOptions>;\n}\n\nexport function HomeLayout(props: HomeLayoutProps & ComponentProps<'main'>) {\n const { nav = {}, links, githubUrl, i18n, themeSwitch = {}, searchToggle, ...rest } = props;\n\n return (\n <main\n id=\"nd-home-layout\"\n {...rest}\n className={cn('flex flex-1 flex-col [--fd-layout-width:1400px]', rest.className)}\n >\n {nav.enabled !== false &&\n (nav.component ?? (\n <Header\n links={links}\n nav={nav}\n themeSwitch={themeSwitch}\n searchToggle={searchToggle}\n i18n={i18n}\n githubUrl={githubUrl}\n />\n ))}\n {props.children}\n </main>\n );\n}\n"],"mappings":";;;;AASA,SAAgB,WAAW,OAAiD;CAC1E,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,WAAW,MAAM,cAAc,EAAE,EAAE,cAAc,GAAG,SAAS;AAEtF,QACE,qBAAC,QAAD;EACE,IAAG;EACH,GAAI;EACJ,WAAW,GAAG,mDAAmD,KAAK,UAAU;YAHlF,CAKG,IAAI,YAAY,UACd,IAAI,aACH,oBAAC,QAAD;GACS;GACF;GACQ;GACC;GACR;GACK;GACX,CAAA,GAEL,MAAM,SACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"navbar.d.ts","names":[],"sources":["../../../src/layouts/home/navbar.tsx"],"mappings":";;;;;;;cAaa,UAAA,EAAU,KAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,IAAA,CAAqB,eAAA,CAArB,uBAAA,WAAA,KAAA,CAAA,aAAA,CAAA,aAAA,YAAA,KAAA,CAAA,aAAA,CAAA,aAAA;AAAA,iBAEP,iBAAA,CAAA;EAAoB,SAAA;EAAA,GAAc;AAAA,GAAS,0BAAA,GAA0B,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAgBrE,iBAAA,CAAA;EAAoB,SAAA;EAAA,GAAc;AAAA,GAAS,0BAAA,GAA0B,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAiBrE,cAAA,CAAe,KAAA,EAAO,SAAA,GAAS,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"navbar.js","names":[],"sources":["../../../src/layouts/home/navbar.tsx"],"sourcesContent":["'use client';\nimport Link, { type LinkProps } from 'fumadocs-core/link';\nimport { cn } from '@/utils/cn';\nimport {\n NavigationMenuContent,\n type NavigationMenuContentProps,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuTrigger,\n type NavigationMenuTriggerProps,\n} from '@/components/ui/navigation-menu';\nimport { navItemVariants } from './client';\n\nexport const NavbarMenu = NavigationMenuItem;\n\nexport function NavbarMenuContent({ className, ...props }: NavigationMenuContentProps) {\n return (\n <NavigationMenuContent\n className={(s) =>\n cn(\n 'grid grid-cols-1 gap-2 p-4 md:grid-cols-2 lg:grid-cols-3',\n typeof className === 'function' ? className(s) : className,\n )\n }\n {...props}\n >\n {props.children}\n </NavigationMenuContent>\n );\n}\n\nexport function NavbarMenuTrigger({ className, ...props }: NavigationMenuTriggerProps) {\n return (\n <NavigationMenuTrigger\n {...props}\n className={(s) =>\n cn(\n navItemVariants(),\n 'text-sm rounded-md',\n typeof className === 'function' ? className(s) : className,\n )\n }\n >\n {props.children}\n </NavigationMenuTrigger>\n );\n}\n\nexport function NavbarMenuLink(props: LinkProps) {\n return (\n <NavigationMenuLink\n render={\n <Link\n {...props}\n className={cn(\n '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',\n props.className,\n )}\n >\n {props.children}\n </Link>\n }\n />\n );\n}\n"],"mappings":";;;;;;;AAaA,MAAa,aAAa;AAE1B,SAAgB,kBAAkB,EAAE,WAAW,GAAG,SAAqC;AACrF,QACE,oBAAC,uBAAD;EACE,YAAY,MACV,GACE,4DACA,OAAO,cAAc,aAAa,UAAU,EAAE,GAAG,UAClD;EAEH,GAAI;YAEH,MAAM;EACe,CAAA;;AAI5B,SAAgB,kBAAkB,EAAE,WAAW,GAAG,SAAqC;AACrF,QACE,oBAAC,uBAAD;EACE,GAAI;EACJ,YAAY,MACV,GACE,iBAAiB,EACjB,sBACA,OAAO,cAAc,aAAa,UAAU,EAAE,GAAG,UAClD;YAGF,MAAM;EACe,CAAA;;AAI5B,SAAgB,eAAe,OAAkB;AAC/C,QACE,oBAAC,oBAAD,EACE,QACE,oBAAC,MAAD;EACE,GAAI;EACJ,WAAW,GACT,gIACA,MAAM,UACP;YAEA,MAAM;EACF,CAAA,EAET,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"not-found.d.ts","names":[],"sources":["../../../src/layouts/home/not-found.tsx"],"mappings":";;;;;;iBAQgB,eAAA,CAAA,GAAe,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"not-found.js","names":[],"sources":["../../../src/layouts/home/not-found.tsx"],"sourcesContent":["import { buttonVariants } from '@/components/ui/button';\nimport { cn } from '@/utils/cn';\nimport Link from 'fumadocs-core/link';\nimport { HomeIcon } from 'lucide-react';\n\n/**\n * the default not found page content, please make your own if you want to customise it.\n */\nexport function DefaultNotFound() {\n return (\n <div className=\"flex flex-col px-8 justify-center flex-1 text-center items-center gap-4\">\n <h1 className=\"text-6xl font-bold text-fd-muted-foreground\">404</h1>\n <h2 className=\"text-2xl font-semibold\">Page Not Found</h2>\n <p className=\"text-fd-muted-foreground max-w-md\">\n The page you are looking for might have been removed, had its name changed, or is\n temporarily unavailable.\n </p>\n <Link\n href=\"/\"\n className={cn(\n buttonVariants({\n className: 'mt-4 gap-1.5',\n variant: 'primary',\n }),\n )}\n >\n <HomeIcon className=\"size-4\" />\n Back to Home\n </Link>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AAQA,SAAgB,kBAAkB;AAChC,QACE,qBAAC,OAAD;EAAK,WAAU;YAAf;GACE,oBAAC,MAAD;IAAI,WAAU;cAA8C;IAAQ,CAAA;GACpE,oBAAC,MAAD;IAAI,WAAU;cAAyB;IAAmB,CAAA;GAC1D,oBAAC,KAAD;IAAG,WAAU;cAAoC;IAG7C,CAAA;GACJ,qBAAC,MAAD;IACE,MAAK;IACL,WAAW,GACT,eAAe;KACb,WAAW;KACX,SAAS;KACV,CAAC,CACH;cAPH,CASE,oBAAC,UAAD,EAAU,WAAU,UAAW,CAAA,EAAA,eAE1B;;GACH"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.ts","names":[],"sources":["../../../src/layouts/notebook/client.tsx"],"mappings":";;;;;;;iBA8BgB,iBAAA,CAAA,GAAiB,UAAA;EAAA,gBAAA;AAAA;AAAA,UAShB,UAAA;EACf,OAAA;EACA,OAAA;AAAA;AAAA,iBAGc,qBAAA,CAAA;EACd,kBAAA;EACA,OAAA;EACA,OAAA;EACA;AAAA,GACC,UAAA;EACD,kBAAA;EACA,QAAA,EAAU,SAAA;AAAA,IACX,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAoBe,YAAA,CAAa,KAAA,EAAO,cAAA,aAAwB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAW5C,UAAA,CAAA;EAAa,SAAA;EAAW,KAAA;EAAO,QAAA;EAAA,GAAa;AAAA,GAAS,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAqC1E,gBAAA,CAAA;EACd,OAAA;EACA,SAAA;EAAA,GACG;AAAA,GACF,cAAA;EACD,OAAA,EAAS,mBAAA;AAAA,IACV,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAgCe,cAAA,CAAA;EACd,IAAA;EACA,SAAA;EAAA,GACG;AAAA;EACA,IAAA,EAAM,YAAA;AAAA,IAAiB,cAAA,CAAe,WAAA,yCAAY,kBAAA,CAAA,GAAA,CAAA,OAAA,GAAA,QAAA,CAAA,SAAA,IAAA,OAAA,sCAAA,KAAA,CAAA,WAAA,GAAA,KAAA,CAAA,YAAA,mBAAA,KAAA,CAAA,qBAAA,SAAA,QAAA,CAAA,SAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","names":[],"sources":["../../../src/layouts/notebook/client.tsx"],"sourcesContent":["'use client';\nimport { cn } from '@/utils/cn';\nimport {\n type ComponentProps,\n createContext,\n Fragment,\n type HTMLAttributes,\n type PointerEvent,\n type ReactNode,\n use,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useSidebar } from '@/components/sidebar/base';\nimport { ChevronDown } from 'lucide-react';\nimport Link from 'fumadocs-core/link';\nimport { usePathname } from 'fumadocs-core/framework';\nimport { isTabActive, type SidebarTabWithProps } from '@/components/sidebar/tabs/dropdown';\nimport { useIsScrollTop } from '@/utils/use-is-scroll-top';\nimport { LinkItem, type LinkItemType, type MenuItemType } from '@/utils/link-item';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\n\nconst LayoutContext = createContext<\n | (LayoutInfo & {\n isNavTransparent: boolean;\n })\n | null\n>(null);\n\nexport function useNotebookLayout() {\n const context = use(LayoutContext);\n if (!context)\n throw new Error(\n 'Please use <DocsPage /> (`fumadocs-ui/layouts/notebook/page`) under <DocsLayout /> (`fumadocs-ui/layouts/notebook`).',\n );\n return context;\n}\n\nexport interface LayoutInfo {\n tabMode: 'sidebar' | 'navbar';\n navMode: 'top' | 'auto';\n}\n\nexport function LayoutContextProvider({\n navTransparentMode = 'none',\n navMode,\n tabMode,\n children,\n}: LayoutInfo & {\n navTransparentMode?: 'always' | 'top' | 'none';\n children: ReactNode;\n}) {\n const isTop = useIsScrollTop({ enabled: navTransparentMode === 'top' }) ?? true;\n const isNavTransparent = navTransparentMode === 'top' ? isTop : navTransparentMode === 'always';\n\n return (\n <LayoutContext\n value={useMemo(\n () => ({\n isNavTransparent,\n navMode,\n tabMode,\n }),\n [isNavTransparent, navMode, tabMode],\n )}\n >\n {children}\n </LayoutContext>\n );\n}\n\nexport function LayoutHeader(props: ComponentProps<'header'>) {\n const { open } = useSidebar();\n const { isNavTransparent } = useNotebookLayout();\n\n return (\n <header data-transparent={isNavTransparent && !open} {...props}>\n {props.children}\n </header>\n );\n}\n\nexport function LayoutBody({ className, style, children, ...props }: ComponentProps<'div'>) {\n const { navMode } = useNotebookLayout();\n const { collapsed } = useSidebar();\n const pageCol =\n 'calc(var(--fd-layout-width,97rem) - var(--fd-sidebar-col) - var(--fd-toc-width))';\n\n return (\n <div\n id=\"nd-notebook-layout\"\n className={cn(\n '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]',\n className,\n )}\n style={\n {\n gridTemplate:\n navMode === 'top'\n ? `\". header header header .\"\n \"sidebar sidebar toc-popover toc-popover .\"\n \"sidebar sidebar main toc .\" 1fr / minmax(min-content, 1fr) var(--fd-sidebar-col) minmax(0, ${pageCol}) var(--fd-toc-width) minmax(min-content, 1fr)`\n : `\"sidebar sidebar header header .\"\n \"sidebar sidebar toc-popover toc-popover .\"\n \"sidebar sidebar main toc .\" 1fr / minmax(min-content, 1fr) var(--fd-sidebar-col) minmax(0, ${pageCol}) var(--fd-toc-width) minmax(min-content, 1fr)`,\n '--fd-docs-row-1': 'var(--fd-banner-height, 0px)',\n '--fd-docs-row-2': 'calc(var(--fd-docs-row-1) + var(--fd-header-height))',\n '--fd-docs-row-3': 'calc(var(--fd-docs-row-2) + var(--fd-toc-popover-height))',\n '--fd-sidebar-col': collapsed ? '0px' : 'var(--fd-sidebar-width)',\n ...style,\n } as object\n }\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport function LayoutHeaderTabs({\n options,\n className,\n ...props\n}: ComponentProps<'div'> & {\n options: SidebarTabWithProps[];\n}) {\n const pathname = usePathname();\n const selectedIdx = useMemo(() => {\n return options.findLastIndex((option) => isTabActive(option, pathname));\n }, [options, pathname]);\n\n return (\n <div className={cn('flex flex-row items-end gap-6', className)} {...props}>\n {options.map((option, i) => {\n const { title, url, unlisted, props: { className, ...rest } = {} } = option;\n const isSelected = selectedIdx === i;\n\n return (\n <Link\n key={i}\n href={url}\n className={cn(\n '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',\n unlisted && !isSelected && 'hidden',\n isSelected && 'border-fd-primary text-fd-primary',\n className,\n )}\n {...rest}\n >\n {title}\n </Link>\n );\n })}\n </div>\n );\n}\n\nexport function NavbarLinkItem({\n item,\n className,\n ...props\n}: { item: LinkItemType } & HTMLAttributes<HTMLElement>) {\n if (item.type === 'custom') return item.children;\n\n if (item.type === 'menu') {\n return <NavbarLinkItemMenu item={item} className={className} {...props} />;\n }\n\n return (\n <LinkItem\n item={item}\n className={cn(\n 'text-sm text-fd-muted-foreground transition-colors hover:text-fd-accent-foreground data-[active=true]:text-fd-primary',\n className,\n )}\n {...props}\n >\n {item.text}\n </LinkItem>\n );\n}\n\nfunction NavbarLinkItemMenu({\n item,\n hoverDelay = 50,\n className,\n ...props\n}: { item: MenuItemType; hoverDelay?: number } & HTMLAttributes<HTMLElement>) {\n const [open, setOpen] = useState(false);\n const timeoutRef = useRef<number>(null);\n const freezeUntil = useRef<number>(null);\n\n const delaySetOpen = (value: boolean) => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n\n timeoutRef.current = window.setTimeout(() => {\n setOpen(value);\n freezeUntil.current = Date.now() + 300;\n }, hoverDelay);\n };\n const onPointerEnter = (e: PointerEvent) => {\n if (e.pointerType === 'touch') return;\n delaySetOpen(true);\n };\n const onPointerLeave = (e: PointerEvent) => {\n if (e.pointerType === 'touch') return;\n delaySetOpen(false);\n };\n function isTouchDevice() {\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n }\n\n return (\n <Popover\n open={open}\n onOpenChange={(value) => {\n if (freezeUntil.current === null || Date.now() >= freezeUntil.current) setOpen(value);\n }}\n >\n <PopoverTrigger\n className={cn(\n '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',\n className,\n )}\n onPointerEnter={onPointerEnter}\n onPointerLeave={onPointerLeave}\n {...props}\n >\n {item.url ? <LinkItem item={item as never}>{item.text}</LinkItem> : item.text}\n <ChevronDown className=\"size-3\" />\n </PopoverTrigger>\n <PopoverContent\n className=\"flex flex-col p-1 text-fd-muted-foreground text-start\"\n onPointerEnter={onPointerEnter}\n onPointerLeave={onPointerLeave}\n >\n {item.items.map((child, i) => {\n if (child.type === 'custom') return <Fragment key={i}>{child.children}</Fragment>;\n\n return (\n <LinkItem\n key={i}\n item={child}\n 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\"\n onClick={() => {\n if (isTouchDevice()) setOpen(false);\n }}\n >\n {child.icon}\n {child.text}\n </LinkItem>\n );\n })}\n </PopoverContent>\n </Popover>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/layouts/notebook/index.tsx"],"mappings":";;;;;;;;;;UAgCiB,eAAA,SAAwB,eAAA;EACvC,IAAA,EAAM,QAAA,CAAS,IAAA;EACf,OAAA;EAEA,GAAA,GAAM,eAAA;IACJ,IAAA;EAAA;EAGF,OAAA,GAAU,cAAA;EAEV,cAAA,GAAiB,cAAA,CAAe,cAAA;AAAA;AAAA,UAGxB,cAAA,SAEN,cAAA,WACA,IAAA,CAAK,cAAA,QAAsB,OAAA;EAC7B,UAAA,GAAa,OAAA,CAAQ,yBAAA;EAjBkB;;;EAsBvC,IAAA,GAAO,mBAAA,KAAwB,qBAAA;EAE/B,MAAA,GAAS,SAAA,GAAY,EAAA,CAAG,cAAA;EACxB,MAAA,GAAS,SAAA,GAAY,EAAA,CAAG,cAAA;EAxBT;;;;;EA+Bf,WAAA;AAAA;AAAA,iBAGc,UAAA,CAAW,KAAA,EAAO,eAAA,GAAe,kBAAA,CAAA,GAAA,CAAA,OAAA"}