@hanzo/docs-base-ui 16.5.0 → 16.7.5

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 (351) hide show
  1. package/README.md +3 -3
  2. package/css/aspen.css +39 -0
  3. package/css/black.css +39 -1
  4. package/css/catppuccin.css +49 -1
  5. package/css/dusk.css +47 -1
  6. package/css/emerald.css +39 -0
  7. package/css/generated/docs.css +490 -0
  8. package/css/generated/flux.css +429 -0
  9. package/css/generated/home.css +285 -0
  10. package/css/generated/notebook.css +526 -0
  11. package/css/generated/shared.css +1173 -0
  12. package/css/lib/base.css +214 -0
  13. package/css/lib/default-colors.css +51 -0
  14. package/css/lib/shiki.css +98 -0
  15. package/css/neutral.css +7 -1
  16. package/css/ocean.css +44 -1
  17. package/css/preset.css +9 -7
  18. package/css/purple.css +39 -1
  19. package/css/ruby.css +39 -0
  20. package/css/shadcn.css +36 -1
  21. package/css/solar.css +75 -1
  22. package/css/vitepress.css +65 -1
  23. package/dist/_virtual/_rolldown/runtime.js +13 -0
  24. package/dist/components/accordion.d.ts +2 -3
  25. package/dist/components/accordion.js +9 -13
  26. package/dist/components/banner.d.ts +3 -4
  27. package/dist/components/banner.js +5 -9
  28. package/dist/components/callout.d.ts +6 -7
  29. package/dist/components/callout.js +1 -4
  30. package/dist/components/card.d.ts +4 -5
  31. package/dist/components/card.js +2 -5
  32. package/dist/components/codeblock.d.ts +8 -9
  33. package/dist/components/codeblock.js +9 -13
  34. package/dist/components/codeblock.rsc.d.ts +21 -0
  35. package/dist/components/codeblock.rsc.js +22 -0
  36. package/dist/components/dialog/search-algolia.d.ts +7 -9
  37. package/dist/components/dialog/search-algolia.js +8 -12
  38. package/dist/components/dialog/search-default.d.ts +7 -9
  39. package/dist/components/dialog/search-default.js +8 -12
  40. package/dist/components/dialog/search-orama.d.ts +7 -9
  41. package/dist/components/dialog/search-orama.js +8 -12
  42. package/dist/components/dialog/search.d.ts +21 -21
  43. package/dist/components/dialog/search.js +137 -60
  44. package/dist/components/dynamic-codeblock.core.d.ts +35 -0
  45. package/dist/components/dynamic-codeblock.core.js +51 -0
  46. package/dist/components/dynamic-codeblock.d.ts +7 -29
  47. package/dist/components/dynamic-codeblock.js +11 -60
  48. package/dist/components/files.d.ts +1 -2
  49. package/dist/components/files.js +6 -10
  50. package/dist/components/github-info.d.ts +23 -10
  51. package/dist/components/github-info.js +34 -29
  52. package/dist/components/heading.d.ts +1 -2
  53. package/dist/components/heading.js +3 -6
  54. package/dist/components/image-zoom.d.ts +4 -5
  55. package/dist/components/image-zoom.js +2 -5
  56. package/dist/components/inline-toc.d.ts +3 -4
  57. package/dist/components/inline-toc.js +2 -6
  58. package/dist/components/sidebar/base.d.ts +29 -23
  59. package/dist/components/sidebar/base.js +16 -22
  60. package/dist/components/sidebar/link-item.d.ts +3 -4
  61. package/dist/components/sidebar/link-item.js +6 -3
  62. package/dist/components/sidebar/page-tree.d.ts +3 -4
  63. package/dist/components/sidebar/page-tree.js +56 -45
  64. package/dist/components/sidebar/tabs/dropdown.d.ts +6 -9
  65. package/dist/components/sidebar/tabs/dropdown.js +22 -29
  66. package/dist/components/sidebar/tabs/index.d.ts +3 -17
  67. package/dist/components/sidebar/tabs/index.js +0 -3
  68. package/dist/components/steps.d.ts +4 -5
  69. package/dist/components/steps.js +0 -3
  70. package/dist/components/tabs.d.ts +15 -11
  71. package/dist/components/tabs.js +15 -20
  72. package/dist/components/toc/clerk.d.ts +19 -1
  73. package/dist/components/toc/clerk.js +165 -10
  74. package/dist/components/toc/default.d.ts +19 -1
  75. package/dist/components/toc/default.js +45 -10
  76. package/dist/components/toc/index.d.ts +29 -1
  77. package/dist/components/toc/index.js +105 -10
  78. package/dist/components/type-table.d.ts +11 -6
  79. package/dist/components/type-table.js +28 -23
  80. package/dist/components/ui/accordion.d.ts +7 -8
  81. package/dist/components/ui/accordion.js +2 -6
  82. package/dist/components/ui/button.d.ts +1 -2
  83. package/dist/components/ui/button.js +0 -3
  84. package/dist/components/ui/collapsible.d.ts +6 -7
  85. package/dist/components/ui/collapsible.js +3 -7
  86. package/dist/components/ui/navigation-menu.d.ts +27 -13
  87. package/dist/components/ui/navigation-menu.js +53 -31
  88. package/dist/components/ui/popover.d.ts +11 -6
  89. package/dist/components/ui/popover.js +15 -19
  90. package/dist/components/ui/scroll-area.d.ts +17 -7
  91. package/dist/components/ui/scroll-area.js +27 -31
  92. package/dist/components/ui/tabs.d.ts +8 -9
  93. package/dist/components/ui/tabs.js +5 -9
  94. package/dist/contexts/i18n.d.ts +62 -1
  95. package/dist/contexts/i18n.js +53 -10
  96. package/dist/contexts/search.d.ts +71 -5
  97. package/dist/contexts/search.js +64 -10
  98. package/dist/contexts/tree.d.ts +21 -1
  99. package/dist/contexts/tree.js +36 -10
  100. package/dist/i18n.d.ts +21 -1
  101. package/dist/i18n.js +20 -3
  102. package/dist/layouts/docs/client.d.ts +30 -29
  103. package/dist/layouts/docs/client.js +76 -52
  104. package/dist/layouts/docs/index.d.ts +21 -35
  105. package/dist/layouts/docs/index.js +16 -172
  106. package/dist/layouts/docs/page/index.d.ts +75 -52
  107. package/dist/layouts/docs/page/index.js +76 -56
  108. package/dist/layouts/docs/page/slots/breadcrumb.d.ts +14 -0
  109. package/dist/layouts/docs/page/slots/breadcrumb.js +44 -0
  110. package/dist/layouts/docs/page/slots/container.d.ts +7 -0
  111. package/dist/layouts/docs/page/slots/container.js +17 -0
  112. package/dist/layouts/docs/page/slots/footer.d.ts +23 -0
  113. package/dist/layouts/docs/page/slots/footer.js +56 -0
  114. package/dist/layouts/docs/page/slots/toc.d.ts +55 -0
  115. package/dist/layouts/docs/page/slots/toc.js +166 -0
  116. package/dist/layouts/docs/slots/container.d.ts +7 -0
  117. package/dist/layouts/docs/slots/container.js +29 -0
  118. package/dist/layouts/docs/slots/header.d.ts +8 -0
  119. package/dist/layouts/docs/slots/header.js +38 -0
  120. package/dist/layouts/docs/slots/sidebar.d.ts +30 -0
  121. package/dist/layouts/docs/slots/sidebar.js +319 -0
  122. package/dist/layouts/flux/index.d.ts +74 -0
  123. package/dist/layouts/flux/index.js +146 -0
  124. package/dist/layouts/flux/page/index.d.ts +105 -0
  125. package/dist/layouts/flux/page/index.js +104 -0
  126. package/dist/layouts/flux/page/slots/breadcrumb.d.ts +14 -0
  127. package/dist/layouts/flux/page/slots/breadcrumb.js +44 -0
  128. package/dist/layouts/flux/page/slots/container.d.ts +7 -0
  129. package/dist/layouts/flux/page/slots/container.js +17 -0
  130. package/dist/layouts/flux/page/slots/footer.d.ts +23 -0
  131. package/dist/layouts/flux/page/slots/footer.js +56 -0
  132. package/dist/layouts/flux/page/slots/toc.d.ts +34 -0
  133. package/dist/layouts/flux/page/slots/toc.js +172 -0
  134. package/dist/layouts/flux/slots/container.d.ts +7 -0
  135. package/dist/layouts/flux/slots/container.js +13 -0
  136. package/dist/layouts/flux/slots/sidebar.d.ts +23 -0
  137. package/dist/layouts/flux/slots/sidebar.js +237 -0
  138. package/dist/layouts/flux/slots/tab-dropdown.d.ts +17 -0
  139. package/dist/layouts/flux/slots/tab-dropdown.js +85 -0
  140. package/dist/layouts/home/index.d.ts +25 -8
  141. package/dist/layouts/home/index.js +39 -19
  142. package/dist/layouts/home/navbar.d.ts +7 -16
  143. package/dist/layouts/home/navbar.js +12 -14
  144. package/dist/layouts/home/not-found.d.ts +9 -0
  145. package/dist/layouts/home/not-found.js +38 -0
  146. package/dist/layouts/home/slots/container.d.ts +7 -0
  147. package/dist/layouts/home/slots/container.js +13 -0
  148. package/dist/layouts/home/slots/header.d.ts +11 -0
  149. package/dist/layouts/home/slots/header.js +242 -0
  150. package/dist/layouts/notebook/client.d.ts +32 -44
  151. package/dist/layouts/notebook/client.js +58 -148
  152. package/dist/layouts/notebook/index.d.ts +26 -25
  153. package/dist/layouts/notebook/index.js +16 -213
  154. package/dist/layouts/notebook/page/index.d.ts +75 -52
  155. package/dist/layouts/notebook/page/index.js +76 -56
  156. package/dist/layouts/notebook/page/slots/breadcrumb.d.ts +14 -0
  157. package/dist/layouts/notebook/page/slots/breadcrumb.js +44 -0
  158. package/dist/layouts/notebook/page/slots/container.d.ts +7 -0
  159. package/dist/layouts/notebook/page/slots/container.js +17 -0
  160. package/dist/layouts/notebook/page/slots/footer.d.ts +23 -0
  161. package/dist/layouts/notebook/page/slots/footer.js +56 -0
  162. package/dist/layouts/notebook/page/slots/toc.d.ts +55 -0
  163. package/dist/layouts/notebook/page/slots/toc.js +165 -0
  164. package/dist/layouts/notebook/slots/container.d.ts +7 -0
  165. package/dist/layouts/notebook/slots/container.js +31 -0
  166. package/dist/layouts/notebook/slots/header.d.ts +8 -0
  167. package/dist/layouts/notebook/slots/header.js +194 -0
  168. package/dist/layouts/notebook/slots/sidebar.d.ts +40 -0
  169. package/dist/layouts/notebook/slots/sidebar.js +297 -0
  170. package/dist/layouts/shared/client.d.ts +45 -0
  171. package/dist/layouts/shared/client.js +84 -0
  172. package/dist/layouts/shared/index.d.ts +144 -35
  173. package/dist/layouts/shared/index.js +74 -15
  174. package/dist/layouts/shared/page-actions.d.ts +36 -0
  175. package/dist/layouts/shared/page-actions.js +190 -0
  176. package/dist/layouts/shared/slots/language-select.d.ts +10 -0
  177. package/dist/layouts/shared/{language-toggle.js → slots/language-select.js} +12 -16
  178. package/dist/layouts/shared/slots/search-trigger.d.ts +23 -0
  179. package/dist/layouts/shared/{search-toggle.js → slots/search-trigger.js} +12 -16
  180. package/dist/layouts/shared/slots/theme-switch.d.ts +14 -0
  181. package/dist/layouts/shared/{theme-toggle.js → slots/theme-switch.js} +11 -15
  182. package/dist/mdx.d.ts +23 -13
  183. package/dist/mdx.js +2 -6
  184. package/dist/mdx.server.d.ts +1 -3
  185. package/dist/mdx.server.js +0 -3
  186. package/dist/og/takumi.d.ts +21 -0
  187. package/dist/og/takumi.js +70 -0
  188. package/dist/og.d.ts +22 -1
  189. package/dist/og.js +70 -3
  190. package/dist/page.d.ts +6 -7
  191. package/dist/page.js +9 -14
  192. package/dist/provider/base.d.ts +5 -6
  193. package/dist/provider/base.js +5 -9
  194. package/dist/provider/next.d.ts +4 -5
  195. package/dist/provider/next.js +1 -5
  196. package/dist/provider/react-router.d.ts +4 -5
  197. package/dist/provider/react-router.js +1 -5
  198. package/dist/provider/tanstack.d.ts +4 -5
  199. package/dist/provider/tanstack.js +1 -5
  200. package/dist/provider/waku.d.ts +4 -5
  201. package/dist/provider/waku.js +1 -5
  202. package/dist/style.css +594 -192
  203. package/dist/tailwind/typography.d.ts +2 -0
  204. package/dist/tailwind/typography.js +2 -0
  205. package/dist/utils/cn.js +2 -0
  206. package/dist/utils/merge-refs.js +11 -0
  207. package/dist/utils/urls.js +15 -0
  208. package/dist/utils/use-copy-button.d.ts +6 -1
  209. package/dist/utils/use-copy-button.js +26 -3
  210. package/dist/utils/use-footer-items.d.ts +9 -1
  211. package/dist/utils/use-footer-items.js +24 -3
  212. package/dist/utils/use-is-scroll-top.d.ts +8 -1
  213. package/dist/utils/use-is-scroll-top.js +20 -3
  214. package/package.json +133 -81
  215. package/css/layouts/docs.css +0 -1
  216. package/css/layouts/home.css +0 -1
  217. package/css/layouts/notebook.css +0 -1
  218. package/dist/_virtual/rolldown_runtime.js +0 -36
  219. package/dist/components/accordion.d.ts.map +0 -1
  220. package/dist/components/accordion.js.map +0 -1
  221. package/dist/components/banner.d.ts.map +0 -1
  222. package/dist/components/banner.js.map +0 -1
  223. package/dist/components/callout.d.ts.map +0 -1
  224. package/dist/components/callout.js.map +0 -1
  225. package/dist/components/card.d.ts.map +0 -1
  226. package/dist/components/card.js.map +0 -1
  227. package/dist/components/codeblock.d.ts.map +0 -1
  228. package/dist/components/codeblock.js.map +0 -1
  229. package/dist/components/dialog/search-algolia.d.ts.map +0 -1
  230. package/dist/components/dialog/search-algolia.js.map +0 -1
  231. package/dist/components/dialog/search-default.d.ts.map +0 -1
  232. package/dist/components/dialog/search-default.js.map +0 -1
  233. package/dist/components/dialog/search-orama.d.ts.map +0 -1
  234. package/dist/components/dialog/search-orama.js.map +0 -1
  235. package/dist/components/dialog/search.d.ts.map +0 -1
  236. package/dist/components/dialog/search.js.map +0 -1
  237. package/dist/components/dynamic-codeblock.d.ts.map +0 -1
  238. package/dist/components/dynamic-codeblock.js.map +0 -1
  239. package/dist/components/files.d.ts.map +0 -1
  240. package/dist/components/files.js.map +0 -1
  241. package/dist/components/github-info.d.ts.map +0 -1
  242. package/dist/components/github-info.js.map +0 -1
  243. package/dist/components/heading.d.ts.map +0 -1
  244. package/dist/components/heading.js.map +0 -1
  245. package/dist/components/image-zoom-CtfZieBH.css +0 -80
  246. package/dist/components/image-zoom-CtfZieBH.css.map +0 -1
  247. package/dist/components/image-zoom.d.ts.map +0 -1
  248. package/dist/components/image-zoom.js.map +0 -1
  249. package/dist/components/image-zoom2.js +0 -1
  250. package/dist/components/inline-toc.d.ts.map +0 -1
  251. package/dist/components/inline-toc.js.map +0 -1
  252. package/dist/components/sidebar/base.d.ts.map +0 -1
  253. package/dist/components/sidebar/base.js.map +0 -1
  254. package/dist/components/sidebar/link-item.d.ts.map +0 -1
  255. package/dist/components/sidebar/link-item.js.map +0 -1
  256. package/dist/components/sidebar/page-tree.d.ts.map +0 -1
  257. package/dist/components/sidebar/page-tree.js.map +0 -1
  258. package/dist/components/sidebar/tabs/dropdown.d.ts.map +0 -1
  259. package/dist/components/sidebar/tabs/dropdown.js.map +0 -1
  260. package/dist/components/sidebar/tabs/index.d.ts.map +0 -1
  261. package/dist/components/sidebar/tabs/index.js.map +0 -1
  262. package/dist/components/steps.d.ts.map +0 -1
  263. package/dist/components/steps.js.map +0 -1
  264. package/dist/components/tabs.d.ts.map +0 -1
  265. package/dist/components/tabs.js.map +0 -1
  266. package/dist/components/toc/clerk.js.map +0 -1
  267. package/dist/components/toc/default.js.map +0 -1
  268. package/dist/components/toc/index.js.map +0 -1
  269. package/dist/components/type-table.d.ts.map +0 -1
  270. package/dist/components/type-table.js.map +0 -1
  271. package/dist/components/ui/accordion.d.ts.map +0 -1
  272. package/dist/components/ui/accordion.js.map +0 -1
  273. package/dist/components/ui/button.d.ts.map +0 -1
  274. package/dist/components/ui/button.js.map +0 -1
  275. package/dist/components/ui/collapsible.d.ts.map +0 -1
  276. package/dist/components/ui/collapsible.js.map +0 -1
  277. package/dist/components/ui/navigation-menu.d.ts.map +0 -1
  278. package/dist/components/ui/navigation-menu.js.map +0 -1
  279. package/dist/components/ui/popover.d.ts.map +0 -1
  280. package/dist/components/ui/popover.js.map +0 -1
  281. package/dist/components/ui/scroll-area.d.ts.map +0 -1
  282. package/dist/components/ui/scroll-area.js.map +0 -1
  283. package/dist/components/ui/tabs.d.ts.map +0 -1
  284. package/dist/components/ui/tabs.js.map +0 -1
  285. package/dist/contexts/i18n.js.map +0 -1
  286. package/dist/contexts/search.d.ts.map +0 -1
  287. package/dist/contexts/search.js.map +0 -1
  288. package/dist/contexts/tree.js.map +0 -1
  289. package/dist/layouts/docs/client.d.ts.map +0 -1
  290. package/dist/layouts/docs/client.js.map +0 -1
  291. package/dist/layouts/docs/index.d.ts.map +0 -1
  292. package/dist/layouts/docs/index.js.map +0 -1
  293. package/dist/layouts/docs/page/client.d.ts +0 -46
  294. package/dist/layouts/docs/page/client.d.ts.map +0 -1
  295. package/dist/layouts/docs/page/client.js +0 -227
  296. package/dist/layouts/docs/page/client.js.map +0 -1
  297. package/dist/layouts/docs/page/index.d.ts.map +0 -1
  298. package/dist/layouts/docs/page/index.js.map +0 -1
  299. package/dist/layouts/docs/sidebar.d.ts +0 -63
  300. package/dist/layouts/docs/sidebar.d.ts.map +0 -1
  301. package/dist/layouts/docs/sidebar.js +0 -162
  302. package/dist/layouts/docs/sidebar.js.map +0 -1
  303. package/dist/layouts/home/client.d.ts +0 -19
  304. package/dist/layouts/home/client.d.ts.map +0 -1
  305. package/dist/layouts/home/client.js +0 -285
  306. package/dist/layouts/home/client.js.map +0 -1
  307. package/dist/layouts/home/index.d.ts.map +0 -1
  308. package/dist/layouts/home/index.js.map +0 -1
  309. package/dist/layouts/home/navbar.d.ts.map +0 -1
  310. package/dist/layouts/home/navbar.js.map +0 -1
  311. package/dist/layouts/notebook/client.d.ts.map +0 -1
  312. package/dist/layouts/notebook/client.js.map +0 -1
  313. package/dist/layouts/notebook/index.d.ts.map +0 -1
  314. package/dist/layouts/notebook/index.js.map +0 -1
  315. package/dist/layouts/notebook/page/client.d.ts +0 -46
  316. package/dist/layouts/notebook/page/client.d.ts.map +0 -1
  317. package/dist/layouts/notebook/page/client.js +0 -227
  318. package/dist/layouts/notebook/page/client.js.map +0 -1
  319. package/dist/layouts/notebook/page/index.d.ts.map +0 -1
  320. package/dist/layouts/notebook/page/index.js.map +0 -1
  321. package/dist/layouts/notebook/sidebar.d.ts +0 -59
  322. package/dist/layouts/notebook/sidebar.d.ts.map +0 -1
  323. package/dist/layouts/notebook/sidebar.js +0 -133
  324. package/dist/layouts/notebook/sidebar.js.map +0 -1
  325. package/dist/layouts/shared/index.d.ts.map +0 -1
  326. package/dist/layouts/shared/index.js.map +0 -1
  327. package/dist/layouts/shared/language-toggle.d.ts +0 -10
  328. package/dist/layouts/shared/language-toggle.d.ts.map +0 -1
  329. package/dist/layouts/shared/language-toggle.js.map +0 -1
  330. package/dist/layouts/shared/search-toggle.d.ts +0 -23
  331. package/dist/layouts/shared/search-toggle.d.ts.map +0 -1
  332. package/dist/layouts/shared/search-toggle.js.map +0 -1
  333. package/dist/layouts/shared/theme-toggle.d.ts +0 -14
  334. package/dist/layouts/shared/theme-toggle.d.ts.map +0 -1
  335. package/dist/layouts/shared/theme-toggle.js.map +0 -1
  336. package/dist/mdx.d.ts.map +0 -1
  337. package/dist/mdx.js.map +0 -1
  338. package/dist/mdx.server.d.ts.map +0 -1
  339. package/dist/mdx.server.js.map +0 -1
  340. package/dist/page.d.ts.map +0 -1
  341. package/dist/page.js.map +0 -1
  342. package/dist/provider/base.d.ts.map +0 -1
  343. package/dist/provider/base.js.map +0 -1
  344. package/dist/provider/next.d.ts.map +0 -1
  345. package/dist/provider/next.js.map +0 -1
  346. package/dist/provider/react-router.d.ts.map +0 -1
  347. package/dist/provider/react-router.js.map +0 -1
  348. package/dist/provider/tanstack.d.ts.map +0 -1
  349. package/dist/provider/tanstack.js.map +0 -1
  350. package/dist/provider/waku.d.ts.map +0 -1
  351. package/dist/provider/waku.js.map +0 -1
@@ -0,0 +1,30 @@
1
+ import { SidebarProviderProps as SidebarProviderProps$1, useSidebar as useSidebar$1 } from "../../../components/sidebar/base.js";
2
+ import { SidebarPageTreeComponents } from "../../../components/sidebar/page-tree.js";
3
+ import { ComponentProps, ReactNode } from "react";
4
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
5
+
6
+ //#region src/layouts/docs/slots/sidebar.d.ts
7
+ interface SidebarProps extends ComponentProps<'aside'> {
8
+ components?: Partial<SidebarPageTreeComponents>;
9
+ banner?: ReactNode;
10
+ footer?: ReactNode;
11
+ /**
12
+ * Support collapsing the sidebar on desktop mode
13
+ *
14
+ * @defaultValue true
15
+ */
16
+ collapsible?: boolean;
17
+ }
18
+ type SidebarProviderProps = SidebarProviderProps$1;
19
+ declare const useSidebar: typeof useSidebar$1;
20
+ declare function SidebarProvider(props: SidebarProviderProps): react_jsx_runtime0.JSX.Element;
21
+ declare function Sidebar({
22
+ footer,
23
+ banner,
24
+ collapsible,
25
+ components,
26
+ ...rest
27
+ }: SidebarProps): react_jsx_runtime0.JSX.Element;
28
+ declare function SidebarTrigger(props: ComponentProps<'button'>): react_jsx_runtime0.JSX.Element;
29
+ //#endregion
30
+ export { Sidebar, SidebarProps, SidebarProvider, SidebarProviderProps, SidebarTrigger, useSidebar };
@@ -0,0 +1,319 @@
1
+ "use client";
2
+ import { cn } from "../../../utils/cn.js";
3
+ import { buttonVariants } from "../../../components/ui/button.js";
4
+ import { mergeRefs } from "../../../utils/merge-refs.js";
5
+ import { Popover, PopoverContent, PopoverTrigger } from "../../../components/ui/popover.js";
6
+ import { SearchTrigger } from "../../shared/slots/search-trigger.js";
7
+ import { LinkItem } from "../../shared/client.js";
8
+ import { isLayoutTabActive } from "../../shared/index.js";
9
+ import { SidebarCollapseTrigger as SidebarCollapseTrigger$1, SidebarContent as SidebarContent$1, SidebarDrawerContent, SidebarDrawerOverlay, SidebarFolder as SidebarFolder$1, SidebarFolderContent as SidebarFolderContent$1, SidebarFolderLink as SidebarFolderLink$1, SidebarFolderTrigger as SidebarFolderTrigger$1, SidebarItem as SidebarItem$1, SidebarProvider as SidebarProvider$1, SidebarSeparator as SidebarSeparator$1, SidebarTrigger as SidebarTrigger$1, SidebarViewport, base_exports, useFolder, useFolderDepth } from "../../../components/sidebar/base.js";
10
+ import { createPageTreeRenderer } from "../../../components/sidebar/page-tree.js";
11
+ import { createLinkItemRenderer } from "../../../components/sidebar/link-item.js";
12
+ import { useDocsLayout } from "../client.js";
13
+ import { useMemo, useRef, useState } from "react";
14
+ import { usePathname } from "@hanzo/docs-core/framework";
15
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
16
+ import Link from "@hanzo/docs-core/link";
17
+ import { Check, ChevronsUpDown, Languages, SidebarIcon } from "lucide-react";
18
+ import { cva } from "class-variance-authority";
19
+ //#region src/layouts/docs/slots/sidebar.tsx
20
+ const itemVariants = cva("relative flex flex-row items-center gap-2 rounded-lg p-2 text-start text-fd-muted-foreground wrap-anywhere [&_svg]:size-4 [&_svg]:shrink-0", { variants: {
21
+ variant: {
22
+ link: "transition-colors hover:bg-fd-accent/50 hover:text-fd-accent-foreground/80 hover:transition-none data-[active=true]:bg-fd-primary/10 data-[active=true]:text-fd-primary data-[active=true]:hover:transition-colors",
23
+ button: "transition-colors hover:bg-fd-accent/50 hover:text-fd-accent-foreground/80 hover:transition-none"
24
+ },
25
+ highlight: { true: "data-[active=true]:before:content-[''] data-[active=true]:before:bg-fd-primary data-[active=true]:before:absolute data-[active=true]:before:w-px data-[active=true]:before:inset-y-2.5 data-[active=true]:before:start-2.5" }
26
+ } });
27
+ const { useSidebar } = base_exports;
28
+ function SidebarProvider(props) {
29
+ return /* @__PURE__ */ jsx(SidebarProvider$1, { ...props });
30
+ }
31
+ function Sidebar({ footer, banner, collapsible = true, components, ...rest }) {
32
+ const { menuItems, slots, props: { tabs, nav, tabMode } } = useDocsLayout();
33
+ const iconLinks = menuItems.filter((item) => item.type === "icon");
34
+ const viewport = /* @__PURE__ */ jsx(SidebarViewport, { children: /* @__PURE__ */ jsxs("div", {
35
+ className: "flex flex-col gap-0.5",
36
+ children: [menuItems.filter((v) => v.type !== "icon").map((item, i, list) => /* @__PURE__ */ jsx(SidebarLinkItem, {
37
+ item,
38
+ className: cn(i === list.length - 1 && "mb-4")
39
+ }, i)), /* @__PURE__ */ jsx(SidebarPageTree, { ...components })]
40
+ }) });
41
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs(SidebarContent, {
42
+ ...rest,
43
+ children: [
44
+ /* @__PURE__ */ jsxs("div", {
45
+ className: "flex flex-col gap-3 p-4 pb-2",
46
+ children: [
47
+ /* @__PURE__ */ jsxs("div", {
48
+ className: "flex",
49
+ children: [
50
+ slots.navTitle && /* @__PURE__ */ jsx(slots.navTitle, { className: "inline-flex text-[0.9375rem] items-center gap-2.5 font-medium me-auto" }),
51
+ nav?.children,
52
+ collapsible && /* @__PURE__ */ jsx(SidebarCollapseTrigger, {
53
+ className: cn(buttonVariants({
54
+ color: "ghost",
55
+ size: "icon-sm",
56
+ className: "mb-auto text-fd-muted-foreground"
57
+ })),
58
+ children: /* @__PURE__ */ jsx(SidebarIcon, {})
59
+ })
60
+ ]
61
+ }),
62
+ slots.searchTrigger && /* @__PURE__ */ jsx(slots.searchTrigger.full, { hideIfDisabled: true }),
63
+ tabs.length > 0 && tabMode === "auto" && /* @__PURE__ */ jsx(SidebarTabsDropdown, { tabs }),
64
+ banner
65
+ ]
66
+ }),
67
+ viewport,
68
+ (slots.languageSelect || iconLinks.length > 0 || slots.themeSwitch || footer) && /* @__PURE__ */ jsxs("div", {
69
+ className: "flex flex-col border-t p-4 pt-2 empty:hidden",
70
+ children: [/* @__PURE__ */ jsxs("div", {
71
+ className: "flex text-fd-muted-foreground items-center empty:hidden",
72
+ children: [
73
+ slots.languageSelect && /* @__PURE__ */ jsx(slots.languageSelect.root, { children: /* @__PURE__ */ jsx(Languages, { className: "size-4.5" }) }),
74
+ iconLinks.map((item, i) => /* @__PURE__ */ jsx(LinkItem, {
75
+ item,
76
+ className: cn(buttonVariants({
77
+ size: "icon-sm",
78
+ color: "ghost"
79
+ })),
80
+ "aria-label": item.label,
81
+ children: item.icon
82
+ }, i)),
83
+ slots.themeSwitch && /* @__PURE__ */ jsx(slots.themeSwitch, { className: "ms-auto p-0" })
84
+ ]
85
+ }), footer]
86
+ })
87
+ ]
88
+ }), /* @__PURE__ */ jsxs(SidebarDrawer, { children: [
89
+ /* @__PURE__ */ jsxs("div", {
90
+ className: "flex flex-col gap-3 p-4 pb-2",
91
+ children: [
92
+ /* @__PURE__ */ jsxs("div", {
93
+ className: "flex text-fd-muted-foreground items-center gap-1.5",
94
+ children: [
95
+ /* @__PURE__ */ jsx("div", {
96
+ className: "flex flex-1",
97
+ children: iconLinks.map((item, i) => /* @__PURE__ */ jsx(LinkItem, {
98
+ item,
99
+ className: cn(buttonVariants({
100
+ size: "icon-sm",
101
+ color: "ghost",
102
+ className: "p-2"
103
+ })),
104
+ "aria-label": item.label,
105
+ children: item.icon
106
+ }, i))
107
+ }),
108
+ slots.languageSelect && /* @__PURE__ */ jsxs(slots.languageSelect.root, { children: [/* @__PURE__ */ jsx(Languages, { className: "size-4.5" }), /* @__PURE__ */ jsx(slots.languageSelect.text, {})] }),
109
+ slots.themeSwitch && /* @__PURE__ */ jsx(slots.themeSwitch, { className: "p-0" }),
110
+ /* @__PURE__ */ jsx(SidebarTrigger, {
111
+ className: cn(buttonVariants({
112
+ color: "ghost",
113
+ size: "icon-sm",
114
+ className: "p-2"
115
+ })),
116
+ children: /* @__PURE__ */ jsx(SidebarIcon, {})
117
+ })
118
+ ]
119
+ }),
120
+ tabs.length > 0 && /* @__PURE__ */ jsx(SidebarTabsDropdown, { tabs }),
121
+ banner
122
+ ]
123
+ }),
124
+ viewport,
125
+ /* @__PURE__ */ jsx("div", {
126
+ className: "flex flex-col border-t p-4 pt-2 empty:hidden",
127
+ children: footer
128
+ })
129
+ ] })] });
130
+ }
131
+ function SidebarFolder(props) {
132
+ return /* @__PURE__ */ jsx(SidebarFolder$1, { ...props });
133
+ }
134
+ function SidebarCollapseTrigger(props) {
135
+ return /* @__PURE__ */ jsx(SidebarCollapseTrigger$1, { ...props });
136
+ }
137
+ function SidebarTrigger(props) {
138
+ return /* @__PURE__ */ jsx(SidebarTrigger$1, { ...props });
139
+ }
140
+ function SidebarContent({ ref: refProp, className, children, ...props }) {
141
+ const ref = useRef(null);
142
+ return /* @__PURE__ */ jsx(SidebarContent$1, { children: ({ collapsed, hovered, ref: asideRef, ...rest }) => /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs("div", {
143
+ "data-sidebar-placeholder": "",
144
+ className: "sticky top-(--fd-docs-row-1) z-20 [grid-area:sidebar] pointer-events-none *:pointer-events-auto h-[calc(var(--fd-docs-height)-var(--fd-docs-row-1))] md:layout:[--fd-sidebar-width:268px] max-md:hidden",
145
+ children: [collapsed && /* @__PURE__ */ jsx("div", {
146
+ className: "absolute start-0 inset-y-0 w-4",
147
+ ...rest
148
+ }), /* @__PURE__ */ jsx("aside", {
149
+ id: "nd-sidebar",
150
+ ref: mergeRefs(ref, refProp, asideRef),
151
+ "data-collapsed": collapsed,
152
+ "data-hovered": collapsed && hovered,
153
+ className: cn("absolute flex flex-col w-full start-0 inset-y-0 items-end bg-fd-card text-sm border-e duration-250 *:w-(--fd-sidebar-width)", collapsed && ["inset-y-2 rounded-xl transition-transform border w-(--fd-sidebar-width)", hovered ? "shadow-lg translate-x-2 rtl:-translate-x-2" : "-translate-x-(--fd-sidebar-width) rtl:translate-x-full"], ref.current && ref.current.getAttribute("data-collapsed") === "true" !== collapsed && "transition-[width,inset-block,translate,background-color]", className),
154
+ ...props,
155
+ ...rest,
156
+ children
157
+ })]
158
+ }), /* @__PURE__ */ jsxs("div", {
159
+ "data-sidebar-panel": "",
160
+ className: cn("fixed flex top-[calc(--spacing(4)+var(--fd-docs-row-3))] start-4 shadow-lg transition-opacity rounded-xl p-0.5 border bg-fd-muted text-fd-muted-foreground z-10", (!collapsed || hovered) && "pointer-events-none opacity-0"),
161
+ children: [/* @__PURE__ */ jsx(SidebarCollapseTrigger$1, {
162
+ className: cn(buttonVariants({
163
+ color: "ghost",
164
+ size: "icon-sm",
165
+ className: "rounded-lg"
166
+ })),
167
+ children: /* @__PURE__ */ jsx(SidebarIcon, {})
168
+ }), /* @__PURE__ */ jsx(SearchTrigger, {
169
+ className: "rounded-lg",
170
+ hideIfDisabled: true
171
+ })]
172
+ })] }) });
173
+ }
174
+ function SidebarDrawer({ children, className, ...props }) {
175
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(SidebarDrawerOverlay, { className: "fixed z-40 inset-0 backdrop-blur-xs data-[state=open]:animate-fd-fade-in data-[state=closed]:animate-fd-fade-out" }), /* @__PURE__ */ jsx(SidebarDrawerContent, {
176
+ className: cn("fixed text-[0.9375rem] flex flex-col shadow-lg border-s end-0 inset-y-0 w-[85%] max-w-[380px] z-40 bg-fd-background data-[state=open]:animate-fd-sidebar-in data-[state=closed]:animate-fd-sidebar-out", className),
177
+ ...props,
178
+ children
179
+ })] });
180
+ }
181
+ function SidebarSeparator({ className, style, children, ...props }) {
182
+ const depth = useFolderDepth();
183
+ return /* @__PURE__ */ jsx(SidebarSeparator$1, {
184
+ className: cn("inline-flex items-center gap-2 mb-1 px-2 mt-6 empty:mb-0 [&_svg]:size-4 [&_svg]:shrink-0", depth === 0 && "first:mt-0", className),
185
+ style: {
186
+ paddingInlineStart: getItemOffset(depth),
187
+ ...style
188
+ },
189
+ ...props,
190
+ children
191
+ });
192
+ }
193
+ function SidebarItem({ className, style, children, ...props }) {
194
+ const depth = useFolderDepth();
195
+ return /* @__PURE__ */ jsx(SidebarItem$1, {
196
+ className: cn(itemVariants({
197
+ variant: "link",
198
+ highlight: depth >= 1
199
+ }), className),
200
+ style: {
201
+ paddingInlineStart: getItemOffset(depth),
202
+ ...style
203
+ },
204
+ ...props,
205
+ children
206
+ });
207
+ }
208
+ function SidebarFolderTrigger({ className, style, ...props }) {
209
+ const { depth, collapsible } = useFolder();
210
+ return /* @__PURE__ */ jsx(SidebarFolderTrigger$1, {
211
+ className: (state) => cn(itemVariants({ variant: collapsible ? "button" : null }), "w-full", typeof className === "function" ? className(state) : className),
212
+ style: {
213
+ paddingInlineStart: getItemOffset(depth - 1),
214
+ ...style
215
+ },
216
+ ...props,
217
+ children: props.children
218
+ });
219
+ }
220
+ function SidebarFolderLink({ className, style, ...props }) {
221
+ const depth = useFolderDepth();
222
+ return /* @__PURE__ */ jsx(SidebarFolderLink$1, {
223
+ className: cn(itemVariants({
224
+ variant: "link",
225
+ highlight: depth > 1
226
+ }), "w-full", className),
227
+ style: {
228
+ paddingInlineStart: getItemOffset(depth - 1),
229
+ ...style
230
+ },
231
+ ...props,
232
+ children: props.children
233
+ });
234
+ }
235
+ function SidebarFolderContent({ className, children, ...props }) {
236
+ const depth = useFolderDepth();
237
+ return /* @__PURE__ */ jsx(SidebarFolderContent$1, {
238
+ className: (state) => cn("relative flex flex-col gap-0.5 pt-0.5", depth === 1 && "before:content-[''] before:absolute before:w-px before:inset-y-1 before:bg-fd-border before:start-2.5", typeof className === "function" ? className(state) : className),
239
+ ...props,
240
+ children
241
+ });
242
+ }
243
+ function SidebarTabsDropdown({ tabs, placeholder, ...props }) {
244
+ const [open, setOpen] = useState(false);
245
+ const { closeOnRedirect } = useSidebar();
246
+ const pathname = usePathname();
247
+ const selected = useMemo(() => {
248
+ return tabs.findLast((item) => isLayoutTabActive(item, pathname));
249
+ }, [tabs, pathname]);
250
+ const onClick = () => {
251
+ closeOnRedirect.current = false;
252
+ setOpen(false);
253
+ };
254
+ const item = selected ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("div", {
255
+ className: "size-9 shrink-0 empty:hidden md:size-5",
256
+ children: selected.icon
257
+ }), /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", {
258
+ className: "text-sm font-medium",
259
+ children: selected.title
260
+ }), /* @__PURE__ */ jsx("p", {
261
+ className: "text-sm text-fd-muted-foreground empty:hidden md:hidden",
262
+ children: selected.description
263
+ })] })] }) : placeholder;
264
+ return /* @__PURE__ */ jsxs(Popover, {
265
+ open,
266
+ onOpenChange: setOpen,
267
+ children: [item && /* @__PURE__ */ jsxs(PopoverTrigger, {
268
+ ...props,
269
+ className: cn("flex items-center gap-2 rounded-lg p-2 border bg-fd-secondary/50 text-start text-fd-secondary-foreground transition-colors hover:bg-fd-accent data-[state=open]:bg-fd-accent data-[state=open]:text-fd-accent-foreground", props.className),
270
+ children: [item, /* @__PURE__ */ jsx(ChevronsUpDown, { className: "shrink-0 ms-auto size-4 text-fd-muted-foreground" })]
271
+ }), /* @__PURE__ */ jsx(PopoverContent, {
272
+ className: "flex flex-col gap-1 w-(--radix-popover-trigger-width) p-1 fd-scroll-container",
273
+ children: tabs.map((item) => {
274
+ const isActive = selected && item.url === selected.url;
275
+ if (!isActive && item.unlisted) return;
276
+ return /* @__PURE__ */ jsxs(Link, {
277
+ href: item.url,
278
+ onClick,
279
+ ...item.props,
280
+ className: cn("flex items-center gap-2 rounded-lg p-1.5 hover:bg-fd-accent hover:text-fd-accent-foreground", item.props?.className),
281
+ children: [
282
+ /* @__PURE__ */ jsx("div", {
283
+ className: "shrink-0 size-9 md:mb-auto md:size-5 empty:hidden",
284
+ children: item.icon
285
+ }),
286
+ /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", {
287
+ className: "text-sm font-medium leading-none",
288
+ children: item.title
289
+ }), /* @__PURE__ */ jsx("p", {
290
+ className: "text-[0.8125rem] text-fd-muted-foreground mt-1 empty:hidden",
291
+ children: item.description
292
+ })] }),
293
+ /* @__PURE__ */ jsx(Check, { className: cn("shrink-0 ms-auto size-3.5 text-fd-primary", !isActive && "invisible") })
294
+ ]
295
+ }, item.url);
296
+ })
297
+ })]
298
+ });
299
+ }
300
+ function getItemOffset(depth) {
301
+ return `calc(${2 + 3 * depth} * var(--spacing))`;
302
+ }
303
+ const SidebarPageTree = createPageTreeRenderer({
304
+ SidebarFolder,
305
+ SidebarFolderContent,
306
+ SidebarFolderLink,
307
+ SidebarFolderTrigger,
308
+ SidebarItem,
309
+ SidebarSeparator
310
+ });
311
+ const SidebarLinkItem = createLinkItemRenderer({
312
+ SidebarFolder,
313
+ SidebarFolderContent,
314
+ SidebarFolderLink,
315
+ SidebarFolderTrigger,
316
+ SidebarItem
317
+ });
318
+ //#endregion
319
+ export { Sidebar, SidebarProvider, SidebarTrigger, useSidebar };
@@ -0,0 +1,74 @@
1
+ import { BaseSlots, BaseSlotsProps } from "../shared/client.js";
2
+ import { BaseLayoutProps, GetLayoutTabsOptions, LayoutTab, LinkItemType } from "../shared/index.js";
3
+ import { TabDropdownProps } from "./slots/tab-dropdown.js";
4
+ import { SidebarProps, SidebarProviderProps } from "./slots/sidebar.js";
5
+ import { ComponentProps, FC, ReactNode } from "react";
6
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
7
+ import * as PageTree from "@hanzo/docs-core/page-tree";
8
+ import { motion } from "motion/react";
9
+
10
+ //#region src/layouts/flux/index.d.ts
11
+ interface DocsSlots extends BaseSlots {
12
+ container: FC<ComponentProps<'div'>>;
13
+ tabDropdown: FC<TabDropdownProps>;
14
+ sidebar: {
15
+ provider: FC<SidebarProviderProps>;
16
+ trigger: FC<ComponentProps<'button'>>;
17
+ root: FC<SidebarProps>;
18
+ useSidebar: () => {
19
+ collapsed: boolean;
20
+ open: boolean;
21
+ setOpen: (v: boolean) => void;
22
+ };
23
+ };
24
+ }
25
+ interface DocsLayoutProps extends BaseLayoutProps {
26
+ tree: PageTree.Root;
27
+ sidebar?: SidebarOptions;
28
+ tabs?: LayoutTab[] | GetLayoutTabsOptions | false;
29
+ slots?: Partial<DocsSlots>;
30
+ renderNavigationPanel?: (props: NavigationPanelProps) => ReactNode;
31
+ containerProps?: ComponentProps<'div'>;
32
+ }
33
+ interface SidebarOptions extends SidebarProps, SidebarProviderProps {
34
+ enabled?: boolean;
35
+ /**
36
+ * @deprecated use layout-level `tabs` instead.
37
+ */
38
+ tabs?: LayoutTab[] | GetLayoutTabsOptions | false;
39
+ }
40
+ declare function useFluxLayout(): {
41
+ props: BaseSlotsProps;
42
+ menuItems: LinkItemType[];
43
+ navItems: LinkItemType[];
44
+ slots: DocsSlots;
45
+ };
46
+ declare function DocsLayout(props: DocsLayoutProps): react_jsx_runtime0.JSX.Element;
47
+ interface NavigationPanelProps {
48
+ head: ReactNode;
49
+ tabDropdown: ReactNode;
50
+ tool: ReactNode;
51
+ link: ReactNode;
52
+ }
53
+ declare function NavigationPanel({
54
+ head,
55
+ tabDropdown,
56
+ tool,
57
+ link,
58
+ children,
59
+ ...props
60
+ }: NavigationPanelProps & Omit<ComponentProps<typeof motion.div>, 'children'> & {
61
+ /**
62
+ * replace default children
63
+ */
64
+ children?: (defaultChildren: ReactNode) => ReactNode;
65
+ }): react_jsx_runtime0.JSX.Element;
66
+ declare function NavigationPanelOverlay({
67
+ enabled,
68
+ className,
69
+ ...props
70
+ }: ComponentProps<typeof motion.div> & {
71
+ enabled?: boolean;
72
+ }): react_jsx_runtime0.JSX.Element;
73
+ //#endregion
74
+ export { DocsLayout, DocsLayoutProps, DocsSlots, NavigationPanel, NavigationPanelOverlay, NavigationPanelProps, useFluxLayout };
@@ -0,0 +1,146 @@
1
+ "use client";
2
+ import { cn } from "../../utils/cn.js";
3
+ import { buttonVariants } from "../../components/ui/button.js";
4
+ import { TreeContextProvider } from "../../contexts/tree.js";
5
+ import { useSearchContext } from "../../contexts/search.js";
6
+ import { LinkItem, baseSlots } from "../shared/client.js";
7
+ import { getLayoutTabs, useLinkItems } from "../shared/index.js";
8
+ import { TabDropdown } from "./slots/tab-dropdown.js";
9
+ import { Sidebar as Sidebar$1, SidebarProvider, SidebarTrigger, useSidebar } from "./slots/sidebar.js";
10
+ import { Container } from "./slots/container.js";
11
+ import { createContext, use, useMemo } from "react";
12
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
13
+ import { Languages } from "lucide-react";
14
+ import { motion } from "motion/react";
15
+ import { RemoveScroll } from "react-remove-scroll";
16
+ //#region src/layouts/flux/index.tsx
17
+ const LayoutContext = createContext(null);
18
+ function useFluxLayout() {
19
+ const context = use(LayoutContext);
20
+ if (!context) throw new Error("Please use Flux layout components under <DocsLayout /> (`@hanzo/docs-ui/layouts/flux`).");
21
+ return context;
22
+ }
23
+ const { useProvider } = baseSlots({ useProps() {
24
+ return useFluxLayout().props;
25
+ } });
26
+ function DocsLayout(props) {
27
+ const { tree, nav = {}, sidebar: { enabled: sidebarEnabled = true, tabs: _tabs, defaultOpenLevel, prefetch, ...sidebarProps } = {}, tabs: defaultTabs = _tabs, children, containerProps, renderNavigationPanel = (props) => /* @__PURE__ */ jsx(NavigationPanel, { ...props }), slots: defaultSlots = {} } = props;
28
+ const linkItems = useLinkItems(props);
29
+ const { baseSlots, baseProps } = useProvider(props);
30
+ const tabs = useMemo(() => {
31
+ if (Array.isArray(defaultTabs)) return defaultTabs;
32
+ if (typeof defaultTabs === "object") return getLayoutTabs(tree, defaultTabs);
33
+ if (defaultTabs !== false) return getLayoutTabs(tree);
34
+ return [];
35
+ }, [tree, defaultTabs]);
36
+ const slots = {
37
+ ...baseSlots,
38
+ container: defaultSlots.container ?? Container,
39
+ tabDropdown: defaultSlots.tabDropdown ?? TabDropdown,
40
+ sidebar: defaultSlots.sidebar ?? {
41
+ root: Sidebar$1,
42
+ provider: SidebarProvider,
43
+ trigger: SidebarTrigger,
44
+ useSidebar
45
+ }
46
+ };
47
+ return /* @__PURE__ */ jsx(LayoutContext, {
48
+ value: {
49
+ props: baseProps,
50
+ slots,
51
+ ...linkItems
52
+ },
53
+ children: /* @__PURE__ */ jsxs(TreeContextProvider, {
54
+ tree,
55
+ children: [/* @__PURE__ */ jsx(slots.sidebar.provider, {
56
+ defaultOpenLevel,
57
+ prefetch,
58
+ children: /* @__PURE__ */ jsxs(slots.container, {
59
+ ...containerProps,
60
+ children: [sidebarEnabled && /* @__PURE__ */ jsx(slots.sidebar.root, { ...sidebarProps }), children]
61
+ })
62
+ }), renderNavigationPanel({
63
+ head: /* @__PURE__ */ jsxs(Fragment$1, { children: [slots.navTitle && /* @__PURE__ */ jsx(slots.navTitle, { className: "inline-flex items-center gap-2.5 text-sm font-semibold" }), nav.children] }),
64
+ tabDropdown: slots.tabDropdown && tabs.length > 0 && /* @__PURE__ */ jsx(slots.tabDropdown, {
65
+ className: "flex-1",
66
+ tabs
67
+ }),
68
+ tool: /* @__PURE__ */ jsxs(Fragment$1, { children: [
69
+ slots.languageSelect && /* @__PURE__ */ jsx(slots.languageSelect.root, { children: /* @__PURE__ */ jsx(Languages, { className: "size-4.5" }) }),
70
+ slots.searchTrigger && /* @__PURE__ */ jsx(slots.searchTrigger.sm, {
71
+ hideIfDisabled: true,
72
+ className: "rounded-lg"
73
+ }),
74
+ slots.sidebar && /* @__PURE__ */ jsx(slots.sidebar.trigger, { className: cn(buttonVariants({
75
+ variant: "ghost",
76
+ size: "icon-sm",
77
+ className: "overflow-hidden"
78
+ })) }),
79
+ slots.themeSwitch && /* @__PURE__ */ jsx(slots.themeSwitch, { className: "p-1 h-full ms-1 rounded-xl bg-fd-muted *:rounded-lg" })
80
+ ] }),
81
+ link: linkItems.menuItems.filter((item) => item.type === "icon").map((item, i) => /* @__PURE__ */ jsx(LinkItem, {
82
+ item,
83
+ className: cn(buttonVariants({
84
+ size: "icon-sm",
85
+ color: "ghost"
86
+ })),
87
+ "aria-label": item.label,
88
+ children: item.icon
89
+ }, i))
90
+ })]
91
+ })
92
+ });
93
+ }
94
+ function NavigationPanel({ head, tabDropdown, tool, link, children = (v) => v, ...props }) {
95
+ const { open } = useSearchContext();
96
+ return /* @__PURE__ */ jsx(motion.div, {
97
+ ...props,
98
+ className: cn("fixed left-1/2 w-[calc(100%-var(--removed-body-scroll-bar-size,0px))] translate-x-[calc(-50%-var(--removed-body-scroll-bar-size,0px)/2)] bottom-0 z-40 bg-fd-popover text-fd-popover-foreground border-t shadow-lg sm:bottom-6 sm:rounded-2xl sm:border sm:max-w-[380px]", props.className),
99
+ animate: props.animate ?? {
100
+ scale: open ? .9 : 1,
101
+ translateY: open ? 20 : 0,
102
+ opacity: open ? .8 : 1
103
+ },
104
+ children: children(/* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs("div", {
105
+ className: "flex flex-row items-center ps-2.5 p-1 gap-2 min-h-11",
106
+ children: [head, /* @__PURE__ */ jsx("div", {
107
+ id: "flux-layout-slot",
108
+ className: "flex-1"
109
+ })]
110
+ }), /* @__PURE__ */ jsxs("div", {
111
+ className: "flex flex-row gap-1.5 overflow-x-auto overflow-y-hidden p-2 sm:p-1",
112
+ children: [
113
+ /* @__PURE__ */ jsx("div", {
114
+ className: "flex flex-row items-center gap-2 min-w-0 flex-1",
115
+ children: tabDropdown
116
+ }),
117
+ /* @__PURE__ */ jsx("div", {
118
+ className: "flex flex-row items-center text-fd-muted-foreground border-x px-0.5 empty:hidden",
119
+ children: link
120
+ }),
121
+ /* @__PURE__ */ jsx("div", {
122
+ className: "flex flex-row items-center text-fd-muted-foreground empty:hidden",
123
+ children: tool
124
+ })
125
+ ]
126
+ })] }))
127
+ });
128
+ }
129
+ function NavigationPanelOverlay({ enabled = false, className, ...props }) {
130
+ return /* @__PURE__ */ jsx(RemoveScroll, {
131
+ enabled,
132
+ children: /* @__PURE__ */ jsx(motion.div, {
133
+ className: cn("fixed inset-0 z-30 pr-(--removed-body-scroll-bar-size,0) backdrop-blur-md bg-fd-background/60", !enabled && "pointer-events-none", className),
134
+ initial: "hide",
135
+ variants: {
136
+ show: { opacity: 1 },
137
+ hide: { opacity: 0 }
138
+ },
139
+ animate: enabled ? "show" : "hide",
140
+ exit: "hide",
141
+ ...props
142
+ })
143
+ });
144
+ }
145
+ //#endregion
146
+ export { DocsLayout, NavigationPanel, NavigationPanelOverlay, useFluxLayout };
@@ -0,0 +1,105 @@
1
+ import { MarkdownCopyButton, ViewOptionsPopover } from "../../shared/page-actions.js";
2
+ import { TOCProps, TOCProviderProps } from "./slots/toc.js";
3
+ import { Footer, FooterProps } from "./slots/footer.js";
4
+ import { Breadcrumb, BreadcrumbProps } from "./slots/breadcrumb.js";
5
+ import { ComponentProps, FC, ReactNode } from "react";
6
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
7
+ import { TOCItemType } from "@hanzo/docs-core/toc";
8
+
9
+ //#region src/layouts/flux/page/index.d.ts
10
+ interface DocsPageProps extends ComponentProps<'article'> {
11
+ toc?: TOCItemType[];
12
+ /**
13
+ * Extend the page to fill all available space
14
+ *
15
+ * @defaultValue false
16
+ */
17
+ full?: boolean;
18
+ children?: ReactNode;
19
+ slots?: Partial<DocsPageSlots>;
20
+ footer?: FooterOptions;
21
+ breadcrumb?: BreadcrumbOptions;
22
+ tableOfContent?: TableOfContentOptions;
23
+ }
24
+ interface TableOfContentOptions extends Pick<TOCProviderProps, 'single'>, TOCProps {
25
+ enabled?: boolean;
26
+ /**
27
+ * @deprecated use `slots.toc` instead.
28
+ */
29
+ component?: ReactNode;
30
+ }
31
+ interface BreadcrumbOptions extends BreadcrumbProps {
32
+ enabled?: boolean;
33
+ /**
34
+ * @deprecated use `slots.breadcrumb` instead.
35
+ */
36
+ component?: ReactNode;
37
+ }
38
+ interface FooterOptions extends FooterProps {
39
+ enabled?: boolean;
40
+ /**
41
+ * @deprecated use `slots.footer` instead.
42
+ */
43
+ component?: ReactNode;
44
+ }
45
+ interface DocsPageSlots {
46
+ toc: {
47
+ provider: FC<TOCProviderProps>;
48
+ main: FC<TOCProps>;
49
+ };
50
+ container: FC<ComponentProps<'article'>>;
51
+ footer: FC<FooterProps>;
52
+ breadcrumb: FC<BreadcrumbProps>;
53
+ }
54
+ type PageSlotsProps = Pick<DocsPageProps, 'full'>;
55
+ declare function useDocsPage(): {
56
+ props: PageSlotsProps;
57
+ slots: DocsPageSlots;
58
+ };
59
+ declare function DocsPage({
60
+ tableOfContent: {
61
+ enabled: tocEnabled,
62
+ single,
63
+ ...tocProps
64
+ },
65
+ breadcrumb: {
66
+ enabled: breadcrumbEnabled,
67
+ ...breadcrumb
68
+ },
69
+ footer: {
70
+ enabled: footerEnabled,
71
+ ...footer
72
+ },
73
+ full,
74
+ toc,
75
+ slots: defaultSlots,
76
+ children,
77
+ ...containerProps
78
+ }: DocsPageProps): react_jsx_runtime0.JSX.Element;
79
+ declare function EditOnGitHub(props: ComponentProps<'a'>): react_jsx_runtime0.JSX.Element;
80
+ /**
81
+ * Add typography styles
82
+ */
83
+ declare function DocsBody({
84
+ children,
85
+ className,
86
+ ...props
87
+ }: ComponentProps<'div'>): react_jsx_runtime0.JSX.Element;
88
+ declare function DocsDescription({
89
+ children,
90
+ className,
91
+ ...props
92
+ }: ComponentProps<'p'>): react_jsx_runtime0.JSX.Element | null;
93
+ declare function DocsTitle({
94
+ children,
95
+ className,
96
+ ...props
97
+ }: ComponentProps<'h1'>): react_jsx_runtime0.JSX.Element;
98
+ declare function PageLastUpdate({
99
+ date: value,
100
+ ...props
101
+ }: Omit<ComponentProps<'p'>, 'children'> & {
102
+ date: Date;
103
+ }): react_jsx_runtime0.JSX.Element;
104
+ //#endregion
105
+ export { type BreadcrumbProps, DocsBody, DocsDescription, DocsPage, DocsPageProps, DocsTitle, EditOnGitHub, type FooterProps, MarkdownCopyButton, Breadcrumb as PageBreadcrumb, Footer as PageFooter, PageLastUpdate, ViewOptionsPopover, useDocsPage };