fumadocs-ui 14.2.1 → 14.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. package/dist/components/accordion.d.ts +4 -7
  2. package/dist/components/accordion.d.ts.map +1 -0
  3. package/dist/components/accordion.js +32 -104
  4. package/dist/components/api.d.ts +4 -13
  5. package/dist/components/api.d.ts.map +1 -0
  6. package/dist/components/api.js +3 -16
  7. package/dist/components/banner.d.ts +3 -5
  8. package/dist/components/banner.d.ts.map +1 -0
  9. package/dist/components/banner.js +53 -120
  10. package/dist/components/callout.d.ts +4 -7
  11. package/dist/components/callout.d.ts.map +1 -0
  12. package/dist/components/callout.js +13 -9
  13. package/dist/components/card.d.ts +5 -7
  14. package/dist/components/card.d.ts.map +1 -0
  15. package/dist/components/card.js +10 -10
  16. package/dist/components/codeblock.d.ts +6 -9
  17. package/dist/components/codeblock.d.ts.map +1 -0
  18. package/dist/components/codeblock.js +41 -15
  19. package/dist/components/dialog/search-algolia.d.ts +7 -11
  20. package/dist/components/dialog/search-algolia.d.ts.map +1 -0
  21. package/dist/components/dialog/search-algolia.js +19 -79
  22. package/dist/components/dialog/search-default.d.ts +6 -10
  23. package/dist/components/dialog/search-default.d.ts.map +1 -0
  24. package/dist/components/dialog/search-default.js +24 -73
  25. package/dist/components/dialog/search-orama.d.ts +7 -11
  26. package/dist/components/dialog/search-orama.d.ts.map +1 -0
  27. package/dist/components/dialog/search-orama.js +22 -79
  28. package/dist/components/dialog/search.d.ts +7 -9
  29. package/dist/components/dialog/search.d.ts.map +1 -0
  30. package/dist/components/dialog/search.js +98 -13
  31. package/dist/components/dialog/tag-list.d.ts +13 -0
  32. package/dist/components/dialog/tag-list.d.ts.map +1 -0
  33. package/dist/components/dialog/tag-list.js +20 -0
  34. package/dist/components/files.d.ts +7 -9
  35. package/dist/components/files.d.ts.map +1 -0
  36. package/dist/components/files.js +15 -63
  37. package/dist/components/heading.d.ts +4 -5
  38. package/dist/components/heading.d.ts.map +1 -0
  39. package/dist/components/heading.js +9 -9
  40. package/dist/components/image-zoom.d.ts +7 -8
  41. package/dist/components/image-zoom.d.ts.map +1 -0
  42. package/dist/components/image-zoom.js +16 -40
  43. package/dist/components/inline-toc.d.ts +4 -6
  44. package/dist/components/inline-toc.d.ts.map +1 -0
  45. package/dist/components/inline-toc.js +8 -46
  46. package/dist/components/layout/breadcrumb.d.ts +11 -0
  47. package/dist/components/layout/breadcrumb.d.ts.map +1 -0
  48. package/dist/components/layout/breadcrumb.js +20 -0
  49. package/dist/components/layout/language-toggle.d.ts +5 -7
  50. package/dist/components/layout/language-toggle.d.ts.map +1 -0
  51. package/dist/components/layout/language-toggle.js +24 -14
  52. package/dist/components/layout/nav.d.ts +28 -0
  53. package/dist/components/layout/nav.d.ts.map +1 -0
  54. package/dist/components/layout/nav.js +29 -0
  55. package/dist/components/layout/root-toggle.d.ts +5 -7
  56. package/dist/components/layout/root-toggle.d.ts.map +1 -0
  57. package/dist/components/layout/root-toggle.js +28 -13
  58. package/dist/components/layout/search-toggle.d.ts +4 -0
  59. package/dist/components/layout/search-toggle.d.ts.map +1 -0
  60. package/dist/components/layout/search-toggle.js +24 -0
  61. package/dist/components/layout/theme-toggle.d.ts +3 -0
  62. package/dist/components/layout/theme-toggle.d.ts.map +1 -0
  63. package/dist/components/layout/theme-toggle.js +21 -0
  64. package/dist/components/layout/toc-clerk.d.ts +6 -0
  65. package/dist/components/layout/toc-clerk.d.ts.map +1 -0
  66. package/dist/components/layout/toc-clerk.js +76 -0
  67. package/dist/components/layout/toc-popover.d.ts +8 -0
  68. package/dist/components/layout/toc-popover.d.ts.map +1 -0
  69. package/dist/components/layout/toc-popover.js +20 -0
  70. package/dist/components/layout/toc-thumb.d.ts +6 -0
  71. package/dist/components/layout/toc-thumb.d.ts.map +1 -0
  72. package/dist/components/layout/toc-thumb.js +53 -0
  73. package/dist/components/layout/toc.d.ts +19 -0
  74. package/dist/components/layout/toc.d.ts.map +1 -0
  75. package/dist/components/layout/toc.js +25 -0
  76. package/dist/components/registry.d.ts +3 -0
  77. package/dist/components/registry.d.ts.map +1 -0
  78. package/dist/components/registry.js +70 -0
  79. package/dist/components/steps.d.ts +4 -6
  80. package/dist/components/steps.d.ts.map +1 -0
  81. package/dist/components/steps.js +5 -16
  82. package/dist/components/tabs.d.ts +7 -21
  83. package/dist/components/tabs.d.ts.map +1 -0
  84. package/dist/components/tabs.js +61 -171
  85. package/dist/components/type-table.d.ts +5 -6
  86. package/dist/components/type-table.d.ts.map +1 -0
  87. package/dist/components/type-table.js +18 -59
  88. package/dist/components/ui/button.d.ts +5 -0
  89. package/dist/components/ui/button.d.ts.map +1 -0
  90. package/dist/components/ui/button.js +14 -0
  91. package/dist/components/ui/collapsible.d.ts +6 -0
  92. package/dist/components/ui/collapsible.d.ts.map +1 -0
  93. package/dist/components/ui/collapsible.js +12 -0
  94. package/dist/components/ui/navigation-menu.d.ts +11 -0
  95. package/dist/components/ui/navigation-menu.d.ts.map +1 -0
  96. package/dist/components/ui/navigation-menu.js +15 -0
  97. package/dist/components/ui/popover.d.ts +8 -0
  98. package/dist/components/ui/popover.d.ts.map +1 -0
  99. package/dist/components/ui/popover.js +11 -0
  100. package/dist/components/ui/scroll-area.d.ts +7 -0
  101. package/dist/components/ui/scroll-area.d.ts.map +1 -0
  102. package/dist/components/ui/scroll-area.js +11 -0
  103. package/dist/components/ui/tabs.d.ts +8 -0
  104. package/dist/components/ui/tabs.d.ts.map +1 -0
  105. package/dist/components/ui/tabs.js +16 -0
  106. package/dist/{i18n-Db2HAPOu.d.ts → contexts/i18n.d.ts} +9 -5
  107. package/dist/contexts/i18n.d.ts.map +1 -0
  108. package/dist/contexts/i18n.js +23 -0
  109. package/dist/contexts/search.d.ts +50 -0
  110. package/dist/contexts/search.d.ts.map +1 -0
  111. package/dist/contexts/search.js +50 -0
  112. package/dist/contexts/sidebar.d.ts +18 -0
  113. package/dist/contexts/sidebar.d.ts.map +1 -0
  114. package/dist/contexts/sidebar.js +31 -0
  115. package/dist/contexts/tree.d.ts +13 -0
  116. package/dist/contexts/tree.d.ts.map +1 -0
  117. package/dist/contexts/tree.js +25 -0
  118. package/dist/i18n.d.ts +5 -6
  119. package/dist/i18n.d.ts.map +1 -0
  120. package/dist/i18n.js +31 -49
  121. package/dist/layouts/docs/navbar.d.ts +4 -0
  122. package/dist/layouts/docs/navbar.d.ts.map +1 -0
  123. package/dist/layouts/docs/navbar.js +22 -0
  124. package/dist/layouts/docs/sidebar.d.ts +40 -0
  125. package/dist/layouts/docs/sidebar.d.ts.map +1 -0
  126. package/dist/layouts/docs/sidebar.js +146 -0
  127. package/dist/layouts/docs.client.d.ts +14 -25
  128. package/dist/layouts/docs.client.d.ts.map +1 -0
  129. package/dist/layouts/docs.client.js +53 -195
  130. package/dist/layouts/docs.d.ts +34 -19
  131. package/dist/layouts/docs.d.ts.map +1 -0
  132. package/dist/layouts/docs.js +67 -202
  133. package/dist/layouts/home/menu.d.ts +6 -0
  134. package/dist/layouts/home/menu.d.ts.map +1 -0
  135. package/dist/layouts/home/menu.js +33 -0
  136. package/dist/layouts/home/navbar.d.ts +16 -0
  137. package/dist/layouts/home/navbar.d.ts.map +1 -0
  138. package/dist/layouts/home/navbar.js +48 -0
  139. package/dist/layouts/home.d.ts +5 -7
  140. package/dist/layouts/home.d.ts.map +1 -0
  141. package/dist/layouts/home.js +51 -59
  142. package/dist/layouts/links.d.ts +80 -0
  143. package/dist/layouts/links.d.ts.map +1 -0
  144. package/dist/layouts/links.js +14 -0
  145. package/dist/layouts/shared.d.ts +48 -2
  146. package/dist/layouts/shared.d.ts.map +1 -0
  147. package/dist/layouts/shared.js +27 -9
  148. package/dist/mdx.client.d.ts +3 -6
  149. package/dist/mdx.client.d.ts.map +1 -0
  150. package/dist/mdx.client.js +12 -19
  151. package/dist/mdx.d.ts +18 -20
  152. package/dist/mdx.d.ts.map +1 -0
  153. package/dist/mdx.js +47 -56
  154. package/dist/og.d.ts +6 -7
  155. package/dist/og.d.ts.map +1 -0
  156. package/dist/og.js +43 -102
  157. package/dist/page.client.d.ts +8 -41
  158. package/dist/page.client.d.ts.map +1 -0
  159. package/dist/page.client.js +71 -261
  160. package/dist/page.d.ts +28 -30
  161. package/dist/page.d.ts.map +1 -0
  162. package/dist/page.js +80 -168
  163. package/dist/provider.d.ts +12 -72
  164. package/dist/provider.d.ts.map +1 -0
  165. package/dist/provider.js +19 -55
  166. package/dist/style.css +1 -1
  167. package/dist/tailwind-plugin.d.ts +9 -20
  168. package/dist/tailwind-plugin.d.ts.map +1 -0
  169. package/dist/tailwind-plugin.js +191 -699
  170. package/dist/theme/animations.d.ts +170 -0
  171. package/dist/theme/animations.d.ts.map +1 -0
  172. package/dist/theme/animations.js +95 -0
  173. package/dist/theme/colors.d.ts +11 -0
  174. package/dist/theme/colors.d.ts.map +1 -0
  175. package/dist/theme/colors.js +327 -0
  176. package/dist/theme/typography.d.ts +70 -0
  177. package/dist/theme/typography.d.ts.map +1 -0
  178. package/dist/theme/typography.js +71 -0
  179. package/dist/utils/cn.d.ts +2 -0
  180. package/dist/utils/cn.d.ts.map +1 -0
  181. package/dist/utils/cn.js +1 -0
  182. package/dist/utils/get-sidebar-tabs.d.ts +7 -0
  183. package/dist/utils/get-sidebar-tabs.d.ts.map +1 -0
  184. package/dist/utils/get-sidebar-tabs.js +20 -0
  185. package/dist/utils/is-active.d.ts +2 -0
  186. package/dist/utils/is-active.d.ts.map +1 -0
  187. package/dist/utils/is-active.js +3 -0
  188. package/dist/utils/use-copy-button.d.ts +3 -0
  189. package/dist/utils/use-copy-button.d.ts.map +1 -0
  190. package/dist/utils/use-copy-button.js +25 -0
  191. package/package.json +9 -9
  192. package/dist/chunk-27HFSL7N.js +0 -53
  193. package/dist/chunk-2FLZOPQN.js +0 -54
  194. package/dist/chunk-2KMKNVSN.js +0 -29
  195. package/dist/chunk-AFMXKA2S.js +0 -125
  196. package/dist/chunk-CDPVENXR.js +0 -8
  197. package/dist/chunk-CLF6ZVYS.js +0 -259
  198. package/dist/chunk-DGKCMOIC.js +0 -56
  199. package/dist/chunk-DN6Z5VW6.js +0 -61
  200. package/dist/chunk-E3VO2QQT.js +0 -29
  201. package/dist/chunk-EFMHXXHW.js +0 -24
  202. package/dist/chunk-F534DZID.js +0 -43
  203. package/dist/chunk-GHOAONNQ.js +0 -48
  204. package/dist/chunk-IL64LMKR.js +0 -82
  205. package/dist/chunk-ILBYBJ5C.js +0 -38
  206. package/dist/chunk-IVBHRX3O.js +0 -31
  207. package/dist/chunk-J6XGK6ZG.js +0 -212
  208. package/dist/chunk-KZTWSBYY.js +0 -68
  209. package/dist/chunk-MCX7E6ZW.js +0 -57
  210. package/dist/chunk-MLKGABMK.js +0 -9
  211. package/dist/chunk-QKOA6KEZ.js +0 -22
  212. package/dist/chunk-TK3TM3MR.js +0 -6
  213. package/dist/chunk-TQJ6YPJ3.js +0 -31
  214. package/dist/chunk-UUGCW3UP.js +0 -84
  215. package/dist/chunk-VPJMNIJX.js +0 -542
  216. package/dist/chunk-W36BQGMB.js +0 -69
  217. package/dist/chunk-YL3MZH7N.js +0 -66
  218. package/dist/chunk-ZBOI25UW.js +0 -139
  219. package/dist/components/api.client.d.ts +0 -5
  220. package/dist/components/api.client.js +0 -8
  221. package/dist/dynamic-sidebar-SYEETGZL.js +0 -129
  222. package/dist/edit-on-github-FIYOWWPQ.js +0 -49
  223. package/dist/layouts/home.client.d.ts +0 -11
  224. package/dist/layouts/home.client.js +0 -274
  225. package/dist/shared-SScCiV7b.d.ts +0 -152
  226. package/dist/sidebar-CQ4HmzQl.d.ts +0 -50
  227. package/dist/tag-list-BsEgfE3x.d.ts +0 -6
  228. package/dist/toc-clerk-SKE4LBT7.js +0 -158
  229. package/dist/tree-06ley65N.d.ts +0 -21
@@ -1,30 +1,45 @@
1
- import { PageTree } from 'fumadocs-core/server';
2
- import { HTMLAttributes, ReactNode } from 'react';
3
- import { S as SidebarProps } from '../sidebar-CQ4HmzQl.js';
4
- import { B as BaseLayoutProps } from '../shared-SScCiV7b.js';
5
- export { L as LinkItemType } from '../shared-SScCiV7b.js';
6
- import { Option } from '../components/layout/root-toggle.js';
7
- import 'react/jsx-runtime';
8
-
9
- interface TabOptions {
10
- transform?: (option: Option, node: PageTree.Folder) => Option | null;
11
- }
12
- declare function getSidebarTabs(pageTree: PageTree.Root, { transform }?: TabOptions): Option[];
13
-
14
- interface SidebarOptions extends Omit<SidebarProps, 'children'> {
1
+ import type { PageTree } from 'fumadocs-core/server';
2
+ import { type ReactNode, type HTMLAttributes, type FC } from 'react';
3
+ import { type SidebarProps } from '../layouts/docs/sidebar';
4
+ import { type LinkItemType } from '../layouts/links';
5
+ import { getSidebarTabs, type TabOptions } from '../utils/get-sidebar-tabs';
6
+ import { type Option } from '../components/layout/root-toggle';
7
+ import { type BaseLayoutProps } from './shared';
8
+ interface SidebarOptions extends SidebarProps {
15
9
  enabled: boolean;
16
10
  component: ReactNode;
17
- collapsible: boolean;
11
+ collapsible?: boolean;
12
+ components?: Partial<SidebarComponents>;
18
13
  /**
19
14
  * Root Toggle options
20
15
  */
21
16
  tabs?: Option[] | TabOptions | false;
17
+ banner?: ReactNode;
18
+ footer?: ReactNode;
19
+ /**
20
+ * Hide search trigger
21
+ *
22
+ * @defaultValue false
23
+ */
24
+ hideSearch?: boolean;
25
+ }
26
+ export interface SidebarComponents {
27
+ Item: FC<{
28
+ item: PageTree.Item;
29
+ }>;
30
+ Folder: FC<{
31
+ item: PageTree.Folder;
32
+ level: number;
33
+ }>;
34
+ Separator: FC<{
35
+ item: PageTree.Separator;
36
+ }>;
22
37
  }
23
- interface DocsLayoutProps extends BaseLayoutProps {
38
+ export interface DocsLayoutProps extends BaseLayoutProps {
24
39
  tree: PageTree.Root;
25
40
  sidebar?: Partial<SidebarOptions>;
26
41
  containerProps?: HTMLAttributes<HTMLDivElement>;
27
42
  }
28
- declare function DocsLayout({ nav: { enabled: navEnabled, component: navReplace, transparentMode, ...nav }, sidebar: { enabled: sidebarEnabled, collapsible, component: sidebarReplace, tabs: tabOptions, ...sidebar }, i18n, ...props }: DocsLayoutProps): ReactNode;
29
-
30
- export { DocsLayout, type DocsLayoutProps, type TabOptions, getSidebarTabs };
43
+ export declare function DocsLayout({ nav: { enabled: navEnabled, component: navReplace, transparentMode, ...nav }, sidebar: { enabled: sidebarEnabled, collapsible, component: sidebarReplace, tabs: tabOptions, banner: sidebarBanner, footer: sidebarFooter, components: sidebarComponents, ...sidebar }, i18n, ...props }: DocsLayoutProps): ReactNode;
44
+ export { getSidebarTabs, type TabOptions, type LinkItemType };
45
+ //# sourceMappingURL=docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/layouts/docs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,cAAc,EAAY,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAM/E,OAAO,EAML,KAAK,YAAY,EAOlB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,KAAK,YAAY,EAGlB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,KAAK,MAAM,EAAc,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,UAAU,CAAC;AAgB1D,UAAU,cAAe,SAAQ,YAAY;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IAErB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAExC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,KAAK,CAAC;IAErC,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,EAAE,CAAC;QAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAA;KAAE,CAAC,CAAC;IAClC,MAAM,EAAE,EAAE,CAAC;QAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,SAAS,EAAE,EAAE,CAAC;QAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAA;KAAE,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IAEpB,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAElC,cAAc,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;CACjD;AAED,wBAAgB,UAAU,CAAC,EACzB,GAAG,EAAE,EACH,OAAO,EAAE,UAAiB,EAC1B,SAAS,EAAE,UAAU,EACrB,eAAe,EACf,GAAG,GAAG,EACF,EACN,OAAO,EAAE,EACP,OAAO,EAAE,cAAqB,EAC9B,WAAkB,EAClB,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,iBAAiB,EAC7B,GAAG,OAAO,EACN,EACN,IAAY,EACZ,GAAG,KAAK,EACT,EAAE,eAAe,GAAG,SAAS,CAqF7B;AAiID,OAAO,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,CAAC"}
@@ -1,207 +1,72 @@
1
- import {
2
- TreeContextProvider,
3
- SidebarCollapseTrigger,
4
- ThemeToggle,
5
- SubNav,
6
- LanguageToggle,
7
- LanguageToggleText,
8
- LinksMenu,
9
- RootToggle,
10
- Sidebar,
11
- IconItem,
12
- MenuItem,
13
- NavProvider,
14
- } from "./docs.client"
15
- import {
16
- buttonVariants
17
- } from "../chunk-QKOA6KEZ.js";
18
- import {
19
- Ellipsis,
20
- Languages
21
- } from "../chunk-VPJMNIJX.js";
22
- import {
23
- getLinks,
24
- replaceOrDefault
25
- } from "../chunk-E3VO2QQT.js";
26
- import {
27
- twMerge
28
- } from "../chunk-TK3TM3MR.js";
29
- import "../chunk-MLKGABMK.js";
30
-
31
- // src/layouts/docs.tsx
32
- import Link from "next/link";
33
- import { notFound } from "next/navigation";
34
- import dynamic from "next/dynamic";
35
-
36
- // src/utils/get-sidebar-tabs.tsx
37
- function getSidebarTabs(pageTree, { transform } = {}) {
38
- const options = [];
39
- function traverse(node) {
40
- if (node.type === "folder" && node.root && node.index) {
41
- const option = {
42
- url: node.index.url,
43
- title: node.name,
44
- icon: node.icon,
45
- description: node.description
46
- };
47
- const mapped = transform ? transform(option, node) : option;
48
- if (mapped) options.push(mapped);
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Fragment } from 'react';
3
+ import Link from 'next/link';
4
+ import { Languages, MoreHorizontal } from 'lucide-react';
5
+ import { notFound } from 'next/navigation';
6
+ import { cn } from '../utils/cn';
7
+ import { buttonVariants } from '../components/ui/button';
8
+ import { CollapsibleSidebar, Sidebar, SidebarFooter, SidebarHeader, SidebarCollapseTrigger, SidebarViewport, SidebarItem, SidebarFolder, SidebarFolderLink, SidebarFolderTrigger, SidebarFolderContent, } from '../layouts/docs/sidebar';
9
+ import { replaceOrDefault } from '../layouts/shared';
10
+ import { BaseLinkItem, } from '../layouts/links';
11
+ import { getSidebarTabs } from '../utils/get-sidebar-tabs';
12
+ import { RootToggle } from '../components/layout/root-toggle';
13
+ import { getLinks } from './shared';
14
+ import { LanguageToggle, LanguageToggleText, } from '../components/layout/language-toggle';
15
+ import { SidebarItems, LinksMenu } from '../layouts/docs.client';
16
+ import { TreeContextProvider } from '../contexts/tree';
17
+ import { NavProvider, Title } from '../components/layout/nav';
18
+ import { ThemeToggle } from '../components/layout/theme-toggle';
19
+ import { Navbar, NavbarSidebarTrigger } from '../layouts/docs/navbar';
20
+ import { LargeSearchToggle, SearchToggle, } from '../components/layout/search-toggle';
21
+ import { SearchOnly } from '../contexts/search';
22
+ export function DocsLayout({ nav: { enabled: navEnabled = true, component: navReplace, transparentMode, ...nav } = {}, sidebar: { enabled: sidebarEnabled = true, collapsible = true, component: sidebarReplace, tabs: tabOptions, banner: sidebarBanner, footer: sidebarFooter, components: sidebarComponents, ...sidebar } = {}, i18n = false, ...props }) {
23
+ const links = getLinks(props.links ?? [], props.githubUrl);
24
+ const Aside = collapsible ? CollapsibleSidebar : Sidebar;
25
+ if (props.tree === undefined)
26
+ notFound();
27
+ let tabs = [];
28
+ if (Array.isArray(tabOptions)) {
29
+ tabs = tabOptions;
49
30
  }
50
- if (node.type === "folder") node.children.forEach(traverse);
51
- }
52
- pageTree.children.forEach(traverse);
53
- return options;
31
+ else if (typeof tabOptions === 'object') {
32
+ tabs = getSidebarTabs(props.tree, tabOptions);
33
+ }
34
+ else if (tabOptions !== false) {
35
+ tabs = getSidebarTabs(props.tree);
36
+ }
37
+ return (_jsx(TreeContextProvider, { tree: props.tree, children: _jsxs(NavProvider, { transparentMode: transparentMode, children: [replaceOrDefault({ enabled: navEnabled, component: navReplace }, _jsxs(Navbar, { className: "h-14 md:hidden", children: [_jsx(Title, { url: nav.url, title: nav.title }), _jsx("div", { className: "flex flex-1 flex-row items-center gap-1", children: nav.children }), _jsx(SearchOnly, { children: _jsx(SearchToggle, {}) }), _jsx(NavbarSidebarTrigger, {})] }), nav), _jsxs("main", { id: "nd-docs-layout", ...props.containerProps, className: cn('flex flex-1 flex-row', !navReplace && navEnabled
38
+ ? '[--fd-nav-height:3.5rem] md:[--fd-nav-height:0px]'
39
+ : null, props.containerProps?.className), children: [replaceOrDefault({ enabled: sidebarEnabled, component: sidebarReplace }, _jsxs(Aside, { ...sidebar, children: [_jsxs(SidebarHeader, { children: [_jsx(SidebarHeaderItems, { ...nav, links: links }), sidebarBanner, tabs.length > 0 ? (_jsx(RootToggle, { options: tabs, className: "-mx-2" })) : null, _jsx(SearchOnly, { children: _jsx(LargeSearchToggle, { className: "rounded-lg max-md:hidden" }) })] }), _jsxs(SidebarViewport, { children: [_jsx("div", { className: "px-2 pt-4 empty:hidden md:hidden", children: links
40
+ .filter((v) => v.type !== 'icon')
41
+ .map((item, i) => (_jsx(Fragment, { children: renderLinkItem(item) }, i))) }), _jsx(SidebarItems, { components: sidebarComponents })] }), _jsxs(SidebarFooter, { children: [_jsx(SidebarFooterItems, { sidebarCollapsible: collapsible, i18n: i18n, disableThemeSwitch: props.disableThemeSwitch ?? false, iconItems: links.filter((v) => v.type === 'icon') }), sidebarFooter] })] }), {
42
+ ...sidebar,
43
+ tabs,
44
+ }), props.children] })] }) }));
54
45
  }
55
-
56
- // src/layouts/docs.tsx
57
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
58
- var DynamicSidebar = dynamic(
59
- () => import("../dynamic-sidebar-SYEETGZL.js")
60
- );
61
- function DocsLayout({
62
- nav: {
63
- enabled: navEnabled = true,
64
- component: navReplace,
65
- transparentMode,
66
- ...nav
67
- } = {},
68
- sidebar: {
69
- enabled: sidebarEnabled = true,
70
- collapsible = true,
71
- component: sidebarReplace,
72
- tabs: tabOptions,
73
- ...sidebar
74
- } = {},
75
- i18n = false,
76
- ...props
77
- }) {
78
- const links = getLinks(props.links ?? [], props.githubUrl);
79
- const Aside = collapsible ? DynamicSidebar : Sidebar;
80
- if (props.tree === void 0) notFound();
81
- let tabs = [];
82
- if (Array.isArray(tabOptions)) {
83
- tabs = tabOptions;
84
- } else if (typeof tabOptions === "object") {
85
- tabs = getSidebarTabs(props.tree, tabOptions);
86
- } else if (tabOptions !== false) {
87
- tabs = getSidebarTabs(props.tree);
88
- }
89
- const banner = /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1 px-4 empty:hidden md:px-3 md:pb-2", children: [
90
- /* @__PURE__ */ jsx(SidebarHeader, { ...nav, links }),
91
- tabs.length > 0 ? /* @__PURE__ */ jsx(RootToggle, { className: "-mx-1", options: tabs }) : null,
92
- sidebar.banner
93
- ] });
94
- const footer = /* @__PURE__ */ jsxs(Fragment, { children: [
95
- /* @__PURE__ */ jsx("div", { className: "flex flex-row items-center border-t py-2 empty:hidden max-md:gap-1.5 max-md:px-3 md:mx-3", children: /* @__PURE__ */ jsx(
96
- SidebarFooter,
97
- {
98
- sidebarCollapsible: collapsible,
99
- i18n,
100
- disableThemeSwitch: props.disableThemeSwitch ?? false,
101
- iconItems: links.filter((v) => v.type === "icon")
102
- }
103
- ) }),
104
- sidebar.footer
105
- ] });
106
- return /* @__PURE__ */ jsx(TreeContextProvider, { tree: props.tree, children: /* @__PURE__ */ jsxs(NavProvider, { transparentMode, children: [
107
- replaceOrDefault(
108
- { enabled: navEnabled, component: navReplace },
109
- /* @__PURE__ */ jsx(SubNav, { className: "h-14 md:hidden", ...nav }),
110
- nav
111
- ),
112
- /* @__PURE__ */ jsxs(
113
- "main",
114
- {
115
- id: "nd-docs-layout",
116
- ...props.containerProps,
117
- className: twMerge(
118
- "flex flex-1 flex-row",
119
- !navReplace && navEnabled ? "[--fd-nav-height:3.5rem] md:[--fd-nav-height:0px]" : null,
120
- props.containerProps?.className
121
- ),
122
- children: [
123
- replaceOrDefault(
124
- { enabled: sidebarEnabled, component: sidebarReplace },
125
- /* @__PURE__ */ jsx(Aside, { ...sidebar, banner, footer, children: /* @__PURE__ */ jsx("div", { className: "flex flex-col px-2 pt-4 empty:hidden md:hidden", children: links.filter((v) => v.type !== "icon").map((item, i) => /* @__PURE__ */ jsx(MenuItem, { item }, i)) }) }),
126
- {
127
- ...sidebar,
128
- banner,
129
- footer
130
- }
131
- ),
132
- props.children
133
- ]
134
- }
135
- )
136
- ] }) });
46
+ function renderLinkItem(item) {
47
+ if (!item.type || item.type === 'main' || item.type === 'icon')
48
+ return (_jsx(SidebarItem, { href: item.url, icon: item.icon, external: item.external, children: item.text }));
49
+ if (item.type === 'menu')
50
+ return (_jsxs(SidebarFolder, { level: 1, children: [item.url ? (_jsxs(SidebarFolderLink, { href: item.url, children: [item.icon, item.text] })) : (_jsxs(SidebarFolderTrigger, { children: [item.icon, item.text] })), _jsx(SidebarFolderContent, { children: item.items.map((child, i) => (_jsx(Fragment, { children: renderLinkItem(child) }, i))) })] }));
51
+ if (item.type === 'button') {
52
+ return (_jsxs(BaseLinkItem, { item: item, className: cn(buttonVariants({
53
+ color: 'secondary',
54
+ className: 'gap-1.5 [&_svg]:size-4',
55
+ })), children: [item.icon, item.text] }));
56
+ }
57
+ if (item.type === 'custom')
58
+ return item.children;
137
59
  }
138
- function SidebarHeader({
139
- links,
140
- ...props
141
- }) {
142
- if (!props.title && !props.children && links.length === 0) return null;
143
- return /* @__PURE__ */ jsxs("div", { className: "flex flex-row items-center border-b pb-2 max-md:hidden", children: [
144
- props.title ? /* @__PURE__ */ jsx(
145
- Link,
146
- {
147
- href: props.url ?? "/",
148
- className: "inline-flex items-center gap-2.5 py-1 font-medium",
149
- children: props.title
150
- }
151
- ) : null,
152
- props.children,
153
- links.length > 0 ? /* @__PURE__ */ jsx(
154
- LinksMenu,
155
- {
156
- items: links.map((item, i) => /* @__PURE__ */ jsx(MenuItem, { item }, i)),
157
- className: twMerge(
158
- buttonVariants({
159
- size: "icon",
160
- color: "ghost"
161
- }),
162
- "ms-auto"
163
- ),
164
- children: /* @__PURE__ */ jsx(Ellipsis, {})
165
- }
166
- ) : null
167
- ] });
60
+ function SidebarHeaderItems({ links, ...props }) {
61
+ const isEmpty = !props.title && !props.children && links.length === 0;
62
+ if (isEmpty)
63
+ return null;
64
+ return (_jsxs("div", { className: "flex flex-row items-center max-md:hidden", children: [props.title ? (_jsx(Link, { href: props.url ?? '/', className: "inline-flex items-center gap-2.5 py-1 font-medium", children: props.title })) : null, props.children, links.length > 0 ? (_jsx(LinksMenu, { items: links, className: cn(buttonVariants({
65
+ size: 'icon',
66
+ color: 'ghost',
67
+ }), 'ms-auto'), children: _jsx(MoreHorizontal, {}) })) : null] }));
168
68
  }
169
- function SidebarFooter({
170
- iconItems,
171
- ...props
172
- }) {
173
- if (props.i18n) {
174
- return /* @__PURE__ */ jsxs(Fragment, { children: [
175
- iconItems.length > 0 ? /* @__PURE__ */ jsx("div", { className: "flex flex-row items-center md:hidden", children: iconItems.map((item, i) => /* @__PURE__ */ jsx(
176
- IconItem,
177
- {
178
- item,
179
- className: "text-fd-muted-foreground"
180
- },
181
- i
182
- )) }) : null,
183
- !props.disableThemeSwitch ? /* @__PURE__ */ jsx(ThemeToggle, {}) : null,
184
- /* @__PURE__ */ jsxs(LanguageToggle, { className: "max-md:order-first max-md:me-auto md:ms-auto", children: [
185
- /* @__PURE__ */ jsx(Languages, { className: "size-5" }),
186
- /* @__PURE__ */ jsx(LanguageToggleText, { className: "md:hidden" })
187
- ] }),
188
- props.sidebarCollapsible ? /* @__PURE__ */ jsx(SidebarCollapseTrigger, { className: "max-md:hidden" }) : null
189
- ] });
190
- }
191
- return /* @__PURE__ */ jsxs(Fragment, { children: [
192
- iconItems.length > 0 ? /* @__PURE__ */ jsx("div", { className: "flex flex-row items-center md:hidden", children: iconItems.map((item, i) => /* @__PURE__ */ jsx(
193
- IconItem,
194
- {
195
- item,
196
- className: "text-fd-muted-foreground"
197
- },
198
- i
199
- )) }) : null,
200
- !props.disableThemeSwitch ? /* @__PURE__ */ jsx(ThemeToggle, { className: "max-md:ms-auto" }) : null,
201
- props.sidebarCollapsible ? /* @__PURE__ */ jsx(SidebarCollapseTrigger, { className: "ms-auto max-md:hidden" }) : null
202
- ] });
69
+ function SidebarFooterItems({ iconItems, ...props }) {
70
+ return (_jsxs("div", { className: "flex flex-row items-center", children: [iconItems.map((item, i) => (_jsx(BaseLinkItem, { item: item, className: cn(buttonVariants({ size: 'icon', color: 'ghost' }), 'text-fd-muted-foreground md:hidden'), "aria-label": item.label, children: item.icon }, i))), _jsx("div", { role: "separator", className: "flex-1" }), props.i18n ? (_jsxs(LanguageToggle, { className: "me-1.5", children: [_jsx(Languages, { className: "size-5" }), _jsx(LanguageToggleText, { className: "md:hidden" })] })) : null, !props.disableThemeSwitch ? (_jsx(ThemeToggle, { className: "p-0 md:order-first" })) : null, props.sidebarCollapsible ? (_jsx(SidebarCollapseTrigger, { className: "-me-1.5 max-md:hidden" })) : null] }));
203
71
  }
204
- export {
205
- DocsLayout,
206
- getSidebarTabs
207
- };
72
+ export { getSidebarTabs };
@@ -0,0 +1,6 @@
1
+ import { type LinkItemType } from '../../layouts/links';
2
+ export declare function MenuLinkItem({ item, ...props }: {
3
+ item: LinkItemType;
4
+ className?: string;
5
+ }): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../../src/layouts/home/menu.tsx"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AA0BlE,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,GAAG,KAAK,EACT,EAAE;IACD,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CA2CA"}
@@ -0,0 +1,33 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { BaseLinkItem } from '../../layouts/links';
4
+ import { cn } from '../../utils/cn';
5
+ import { NavigationMenuLink } from '../../components/ui/navigation-menu';
6
+ import Link from 'fumadocs-core/link';
7
+ import { cva } from 'class-variance-authority';
8
+ import { buttonVariants } from '../../components/ui/button';
9
+ const menuItemVariants = cva('', {
10
+ variants: {
11
+ variant: {
12
+ 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',
13
+ icon: buttonVariants({
14
+ size: 'icon',
15
+ color: 'ghost',
16
+ }),
17
+ button: buttonVariants({
18
+ color: 'secondary',
19
+ className: 'gap-1.5 [&_svg]:size-4',
20
+ }),
21
+ },
22
+ },
23
+ defaultVariants: {
24
+ variant: 'main',
25
+ },
26
+ });
27
+ export function MenuLinkItem({ item, ...props }) {
28
+ if (item.type === 'custom')
29
+ return _jsx("div", { className: cn('grid', props.className), children: item.children });
30
+ if (item.type === 'menu')
31
+ return (_jsxs("div", { className: cn('mb-4 flex flex-col', props.className), children: [_jsx("p", { className: "mb-1 text-sm text-fd-muted-foreground", children: item.url ? (_jsx(NavigationMenuLink, { asChild: true, children: _jsxs(Link, { href: item.url, children: [item.icon, item.text] }) })) : (_jsxs(_Fragment, { children: [item.icon, item.text] })) }), item.items.map((child, i) => (_jsx(MenuLinkItem, { item: child }, i)))] }));
32
+ return (_jsx(NavigationMenuLink, { asChild: true, children: _jsxs(BaseLinkItem, { item: item, className: cn(menuItemVariants({ variant: item.type }), props.className), "aria-label": item.type === 'icon' ? item.label : undefined, children: [item.icon, item.type === 'icon' ? undefined : item.text] }) }));
33
+ }
@@ -0,0 +1,16 @@
1
+ import { type ComponentProps, type HTMLAttributes } from 'react';
2
+ import { type VariantProps } from 'class-variance-authority';
3
+ import { type LinkProps } from 'fumadocs-core/link';
4
+ import { BaseLinkItem } from '../../layouts/links';
5
+ import type { NavigationMenuContentProps, NavigationMenuTriggerProps } from '@radix-ui/react-navigation-menu';
6
+ export declare function Navbar(props: HTMLAttributes<HTMLElement>): import("react/jsx-runtime").JSX.Element;
7
+ export declare const NavbarMenu: import("react").ForwardRefExoticComponent<import("@radix-ui/react-navigation-menu").NavigationMenuItemProps & import("react").RefAttributes<HTMLLIElement>>;
8
+ export declare function NavbarMenuContent(props: NavigationMenuContentProps): import("react/jsx-runtime").JSX.Element;
9
+ export declare function NavbarMenuTrigger(props: NavigationMenuTriggerProps): import("react/jsx-runtime").JSX.Element;
10
+ declare const linkVariants: (props?: ({
11
+ variant?: "button" | "main" | "icon" | null | undefined;
12
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
13
+ export declare function NavbarLink({ item, variant, ...props }: ComponentProps<typeof BaseLinkItem> & VariantProps<typeof linkVariants>): import("react/jsx-runtime").JSX.Element;
14
+ export declare function NavbarMenuItem(props: LinkProps): import("react/jsx-runtime").JSX.Element;
15
+ export {};
16
+ //# sourceMappingURL=navbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navbar.d.ts","sourceRoot":"","sources":["../../../src/layouts/home/navbar.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,cAAc,EAGpB,MAAM,OAAO,CAAC;AACf,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAa,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAU/C,OAAO,KAAK,EACV,0BAA0B,EAC1B,0BAA0B,EAC3B,MAAM,iCAAiC,CAAC;AAOzC,wBAAgB,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,WAAW,CAAC,2CAwBxD;AAED,eAAO,MAAM,UAAU,6JAAqB,CAAC;AAE7C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,0BAA0B,2CAYlE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,0BAA0B,2CASlE;AAED,QAAA,MAAM,YAAY;;8EAiBhB,CAAC;AAEH,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,OAAO,EACP,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,YAAY,CAAC,GAAG,YAAY,CAAC,OAAO,YAAY,CAAC,2CAczE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,2CAY9C"}
@@ -0,0 +1,48 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useContext, useState, } from 'react';
4
+ import { cva } from 'class-variance-authority';
5
+ import Link from 'fumadocs-core/link';
6
+ import { cn } from '../../utils/cn';
7
+ import { BaseLinkItem } from '../../layouts/links';
8
+ import { NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuTrigger, NavigationMenuViewport, } from '../../components/ui/navigation-menu';
9
+ import { NavContext } from '../../components/layout/nav';
10
+ import { buttonVariants } from '../../components/ui/button';
11
+ const navItemVariants = cva('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 [&_svg]:size-4');
12
+ export function Navbar(props) {
13
+ const [value, setValue] = useState('');
14
+ const { isTransparent } = useContext(NavContext);
15
+ return (_jsx(NavigationMenu, { value: value, onValueChange: setValue, asChild: true, children: _jsxs("header", { id: "nd-nav", ...props, className: cn('fixed left-1/2 top-[var(--fd-banner-height)] z-40 w-full max-w-fd-container -translate-x-1/2 border-b border-fd-foreground/10 transition-colors lg:mt-2 lg:w-[calc(100%-1rem)] lg:rounded-2xl lg:border', value.length > 0 ? 'shadow-lg' : 'shadow-sm', (!isTransparent || value.length > 0) &&
16
+ 'bg-fd-background/80 backdrop-blur-lg', props.className), children: [_jsx("nav", { className: "flex h-14 w-full flex-row items-center gap-6 px-4 lg:h-12", children: props.children }), _jsx(NavigationMenuViewport, {})] }) }));
17
+ }
18
+ export const NavbarMenu = NavigationMenuItem;
19
+ export function NavbarMenuContent(props) {
20
+ return (_jsx(NavigationMenuContent, { ...props, className: cn('grid grid-cols-1 gap-3 px-4 pb-4 md:grid-cols-2 lg:grid-cols-3', props.className), children: props.children }));
21
+ }
22
+ export function NavbarMenuTrigger(props) {
23
+ return (_jsx(NavigationMenuTrigger, { ...props, className: cn(navItemVariants(), 'rounded-md', props.className), children: props.children }));
24
+ }
25
+ const linkVariants = cva(undefined, {
26
+ variants: {
27
+ variant: {
28
+ main: navItemVariants(),
29
+ button: buttonVariants({
30
+ color: 'secondary',
31
+ className: 'gap-1.5 [&_svg]:size-4',
32
+ }),
33
+ icon: buttonVariants({
34
+ color: 'ghost',
35
+ size: 'icon',
36
+ }),
37
+ },
38
+ },
39
+ defaultVariants: {
40
+ variant: 'main',
41
+ },
42
+ });
43
+ export function NavbarLink({ item, variant, ...props }) {
44
+ return (_jsx(NavigationMenuItem, { className: "list-none", children: _jsx(NavigationMenuLink, { asChild: true, children: _jsx(BaseLinkItem, { ...props, item: item, className: cn(linkVariants({ variant }), props.className), children: props.children }) }) }));
45
+ }
46
+ export function NavbarMenuItem(props) {
47
+ return (_jsx(NavigationMenuLink, { asChild: true, children: _jsx(Link, { ...props, className: cn('flex flex-col gap-2 rounded-lg border bg-fd-card p-3 transition-colors hover:bg-fd-accent/80 hover:text-fd-accent-foreground', props.className) }) }));
48
+ }
@@ -1,7 +1,5 @@
1
- import { HTMLAttributes } from 'react';
2
- import { B as BaseLayoutProps } from '../shared-SScCiV7b.js';
3
-
4
- type HomeLayoutProps = BaseLayoutProps & HTMLAttributes<HTMLElement>;
5
- declare function HomeLayout({ nav: { transparentMode, ...nav }, links, githubUrl, i18n, disableThemeSwitch, ...props }: HomeLayoutProps): React.ReactElement;
6
-
7
- export { HomeLayout, type HomeLayoutProps };
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ import { type BaseLayoutProps } from './shared';
3
+ export type HomeLayoutProps = BaseLayoutProps & HTMLAttributes<HTMLElement>;
4
+ export declare function HomeLayout({ nav: { transparentMode, enableSearch, ...nav }, links, githubUrl, i18n, disableThemeSwitch, ...props }: HomeLayoutProps): ReactNode;
5
+ //# sourceMappingURL=home.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"home.d.ts","sourceRoot":"","sources":["../../src/layouts/home.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvD,OAAO,EAAY,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;AAgC1D,MAAM,MAAM,eAAe,GAAG,eAAe,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;AAE5E,wBAAgB,UAAU,CAAC,EACzB,GAAG,EAAE,EAAE,eAAe,EAAE,YAAmB,EAAE,GAAG,GAAG,EAAO,EAC1D,KAAU,EACV,SAAS,EACT,IAAY,EACZ,kBAAkB,EAClB,GAAG,KAAK,EACT,EAAE,eAAe,GAAG,SAAS,CAkH7B"}
@@ -1,61 +1,53 @@
1
- import { Nav, NavProvider } from "./home.client"
2
- import {
3
- getLinks,
4
- replaceOrDefault
5
- } from "../chunk-E3VO2QQT.js";
6
- import {
7
- twMerge
8
- } from "../chunk-TK3TM3MR.js";
9
- import "../chunk-MLKGABMK.js";
10
-
11
- // src/layouts/home.tsx
12
- import { jsx, jsxs } from "react/jsx-runtime";
13
- function HomeLayout({
14
- nav: { transparentMode, ...nav } = {},
15
- links = [],
16
- githubUrl,
17
- i18n,
18
- disableThemeSwitch,
19
- ...props
20
- }) {
21
- const finalLinks = getLinks(links, githubUrl);
22
- return /* @__PURE__ */ jsx(NavProvider, { transparentMode, children: /* @__PURE__ */ jsxs(
23
- "main",
24
- {
25
- id: "nd-home-layout",
26
- ...props,
27
- className: twMerge(
28
- "flex flex-1 flex-col pt-[var(--fd-nav-height)]",
29
- props.className
30
- ),
31
- style: {
32
- "--fd-nav-height": "54px",
33
- ...props.style
34
- },
35
- children: [
36
- replaceOrDefault(
37
- nav,
38
- /* @__PURE__ */ jsx(
39
- Nav,
40
- {
41
- items: finalLinks,
42
- i18n,
43
- disableThemeSwitch,
44
- ...nav
45
- }
46
- ),
47
- {
48
- items: finalLinks,
49
- i18n,
50
- disableThemeSwitch,
51
- ...nav
52
- }
53
- ),
54
- props.children
55
- ]
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { replaceOrDefault } from '../layouts/shared';
3
+ import { cn } from '../utils/cn';
4
+ import { getLinks } from './shared';
5
+ import { NavProvider, Title } from '../components/layout/nav';
6
+ import { NavigationMenuContent, NavigationMenuItem, NavigationMenuList, NavigationMenuTrigger, } from '../components/ui/navigation-menu';
7
+ import { Navbar, NavbarLink, NavbarMenu, NavbarMenuContent, NavbarMenuItem, NavbarMenuTrigger, } from '../layouts/home/navbar';
8
+ import { LargeSearchToggle, SearchToggle, } from '../components/layout/search-toggle';
9
+ import { ThemeToggle } from '../components/layout/theme-toggle';
10
+ import { LanguageToggle, LanguageToggleText, } from '../components/layout/language-toggle';
11
+ import { ChevronDown, Languages } from 'lucide-react';
12
+ import { buttonVariants } from '../components/ui/button';
13
+ import { SearchOnly } from '../contexts/search';
14
+ import Link from 'fumadocs-core/link';
15
+ import { MenuLinkItem } from '../layouts/home/menu';
16
+ export function HomeLayout({ nav: { transparentMode, enableSearch = true, ...nav } = {}, links = [], githubUrl, i18n = false, disableThemeSwitch, ...props }) {
17
+ const finalLinks = getLinks(links, githubUrl);
18
+ const navItems = finalLinks.filter((item) => ['nav', 'all'].includes(item.on ?? 'all'));
19
+ const menuItems = finalLinks.filter((item) => ['menu', 'all'].includes(item.on ?? 'all'));
20
+ return (_jsx(NavProvider, { transparentMode: transparentMode, children: _jsxs("main", { id: "nd-home-layout", ...props, className: cn('flex flex-1 flex-col pt-[var(--fd-nav-height)] [--fd-nav-height:56px]', props.className), children: [replaceOrDefault(nav, _jsxs(_Fragment, { children: [_jsx("div", { "aria-hidden": "true", className: "fixed inset-x-0 top-[var(--fd-banner-height)] z-40 h-6 bg-fd-background", style: {
21
+ maskImage: 'linear-gradient(to bottom,white,transparent)',
22
+ } }), _jsxs(Navbar, { children: [_jsx(Title, { title: nav.title, url: nav.url }), nav.children, _jsx(NavigationMenuList, { className: "flex flex-row items-center gap-2 max-sm:hidden", children: navItems
23
+ .filter((item) => !isSecondary(item))
24
+ .map((item, i) => (_jsx(NavbarLinkItem, { item: item, className: "text-sm" }, i))) }), _jsxs("div", { className: "flex flex-1 flex-row items-center justify-end lg:gap-1.5", children: [enableSearch ? (_jsxs(SearchOnly, { children: [_jsx(SearchToggle, { className: "lg:hidden" }), _jsx(LargeSearchToggle, { className: "w-full max-w-[240px] max-lg:hidden" })] })) : null, !disableThemeSwitch ? (_jsx(ThemeToggle, { className: "max-lg:hidden" })) : null, i18n ? (_jsx(LanguageToggle, { className: "-me-1.5 max-lg:hidden", children: _jsx(Languages, { className: "size-5" }) })) : null, navItems.filter(isSecondary).map((item, i) => (_jsx(NavbarLinkItem, { item: item, className: "-me-1.5 list-none max-lg:hidden" }, i))), _jsxs(NavigationMenuItem, { className: "list-none lg:hidden", children: [_jsx(NavigationMenuTrigger, { className: cn(buttonVariants({
25
+ size: 'icon',
26
+ color: 'ghost',
27
+ }), 'group -me-2'), children: _jsx(ChevronDown, { className: "size-3 transition-transform duration-300 group-data-[state=open]:rotate-180" }) }), _jsxs(NavigationMenuContent, { className: "flex flex-col p-4 sm:flex-row sm:items-center sm:justify-end", children: [menuItems
28
+ .filter((item) => !isSecondary(item))
29
+ .map((item, i) => (_jsx(MenuLinkItem, { item: item, className: "sm:hidden" }, i))), _jsxs("div", { className: "-ms-1.5 flex flex-row items-center gap-1.5 max-sm:mt-2", children: [menuItems.filter(isSecondary).map((item, i) => (_jsx(MenuLinkItem, { item: item, className: "-me-1.5" }, i))), _jsx("div", { role: "separator", className: "flex-1" }), i18n ? (_jsxs(LanguageToggle, { children: [_jsx(Languages, { className: "size-5" }), _jsx(LanguageToggleText, {}), _jsx(ChevronDown, { className: "size-3 text-fd-muted-foreground" })] })) : null, !disableThemeSwitch ? _jsx(ThemeToggle, {}) : null] })] })] })] })] })] }), {
30
+ items: finalLinks,
31
+ i18n,
32
+ enableSearch,
33
+ disableThemeSwitch,
34
+ ...nav,
35
+ }), props.children] }) }));
36
+ }
37
+ function NavbarLinkItem({ item, ...props }) {
38
+ if (item.type === 'custom')
39
+ return _jsx("div", { ...props, children: item.children });
40
+ if (item.type === 'menu') {
41
+ return (_jsxs(NavbarMenu, { children: [_jsx(NavbarMenuTrigger, { ...props, children: item.url ? _jsx(Link, { href: item.url, children: item.text }) : item.text }), _jsx(NavbarMenuContent, { children: item.items.map((child, j) => {
42
+ if (child.type === 'custom')
43
+ return _jsx("div", { children: child.children }, j);
44
+ const { banner, footer, ...rest } = child.menu ?? {};
45
+ return (_jsxs(NavbarMenuItem, { href: child.url, ...rest, children: [banner ??
46
+ (child.icon ? (_jsx("div", { className: "w-fit rounded-md border bg-fd-muted p-1 [&_svg]:size-4", children: child.icon })) : null), _jsx("p", { className: "-mb-1 text-sm font-medium", children: child.text }), child.description ? (_jsx("p", { className: "text-[13px] text-fd-muted-foreground", children: child.description })) : null, footer] }, j));
47
+ }) })] }));
56
48
  }
57
- ) });
49
+ return (_jsx(NavbarLink, { ...props, item: item, variant: item.type, "aria-label": item.type === 'icon' ? item.label : undefined, children: item.type === 'icon' ? item.icon : item.text }));
50
+ }
51
+ function isSecondary(item) {
52
+ return (('secondary' in item && item.secondary === true) || item.type === 'icon');
58
53
  }
59
- export {
60
- HomeLayout
61
- };