fumadocs-ui 15.2.8 → 16.0.3

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 (202) hide show
  1. package/README.md +1 -1
  2. package/css/black.css +4 -2
  3. package/css/catppuccin.css +2 -0
  4. package/css/default.css +33 -0
  5. package/css/dusk.css +2 -0
  6. package/css/neutral.css +11 -8
  7. package/css/ocean.css +5 -3
  8. package/css/preset.css +237 -16
  9. package/css/purple.css +12 -10
  10. package/css/shadcn.css +31 -0
  11. package/css/shiki.css +78 -51
  12. package/css/solar.css +48 -0
  13. package/css/vitepress.css +3 -4
  14. package/dist/components/accordion.d.ts +6 -3
  15. package/dist/components/accordion.d.ts.map +1 -1
  16. package/dist/components/accordion.js +19 -11
  17. package/dist/components/banner.d.ts +8 -2
  18. package/dist/components/banner.d.ts.map +1 -1
  19. package/dist/components/banner.js +25 -30
  20. package/dist/components/callout.d.ts +2 -2
  21. package/dist/components/callout.d.ts.map +1 -1
  22. package/dist/components/callout.js +15 -18
  23. package/dist/components/card.d.ts.map +1 -1
  24. package/dist/components/card.js +2 -2
  25. package/dist/components/codeblock.d.ts +19 -23
  26. package/dist/components/codeblock.d.ts.map +1 -1
  27. package/dist/components/codeblock.js +55 -24
  28. package/dist/components/dialog/search-algolia.d.ts +5 -4
  29. package/dist/components/dialog/search-algolia.d.ts.map +1 -1
  30. package/dist/components/dialog/search-algolia.js +21 -7
  31. package/dist/components/dialog/search-default.d.ts +4 -2
  32. package/dist/components/dialog/search-default.d.ts.map +1 -1
  33. package/dist/components/dialog/search-default.js +22 -6
  34. package/dist/components/dialog/search-orama.d.ts +5 -3
  35. package/dist/components/dialog/search-orama.d.ts.map +1 -1
  36. package/dist/components/dialog/search-orama.js +21 -6
  37. package/dist/components/dialog/search.d.ts +61 -27
  38. package/dist/components/dialog/search.d.ts.map +1 -1
  39. package/dist/components/dialog/search.js +155 -67
  40. package/dist/components/dynamic-codeblock.d.ts +16 -2
  41. package/dist/components/dynamic-codeblock.d.ts.map +1 -1
  42. package/dist/components/dynamic-codeblock.js +22 -10
  43. package/dist/components/files.d.ts.map +1 -1
  44. package/dist/components/files.js +1 -1
  45. package/dist/components/github-info.js +1 -1
  46. package/dist/components/heading.js +1 -1
  47. package/dist/components/image-zoom.css +4 -0
  48. package/dist/components/inline-toc.d.ts +2 -2
  49. package/dist/components/inline-toc.d.ts.map +1 -1
  50. package/dist/components/inline-toc.js +1 -1
  51. package/dist/components/layout/language-toggle.js +1 -1
  52. package/dist/components/layout/root-toggle.d.ts +5 -15
  53. package/dist/components/layout/root-toggle.d.ts.map +1 -1
  54. package/dist/components/layout/root-toggle.js +10 -12
  55. package/dist/components/layout/search-toggle.d.ts +6 -4
  56. package/dist/components/layout/search-toggle.d.ts.map +1 -1
  57. package/dist/components/layout/search-toggle.js +5 -5
  58. package/dist/components/layout/sidebar.d.ts +21 -13
  59. package/dist/components/layout/sidebar.d.ts.map +1 -1
  60. package/dist/components/layout/sidebar.js +67 -65
  61. package/dist/components/layout/theme-toggle.js +1 -1
  62. package/dist/components/layout/toc-clerk.d.ts +2 -4
  63. package/dist/components/layout/toc-clerk.d.ts.map +1 -1
  64. package/dist/components/layout/toc-clerk.js +9 -5
  65. package/dist/components/layout/toc-thumb.js +1 -1
  66. package/dist/components/layout/toc.d.ts +6 -22
  67. package/dist/components/layout/toc.d.ts.map +1 -1
  68. package/dist/components/layout/toc.js +14 -18
  69. package/dist/components/tabs.d.ts +18 -18
  70. package/dist/components/tabs.d.ts.map +1 -1
  71. package/dist/components/tabs.js +44 -105
  72. package/dist/components/tabs.unstyled.d.ts +24 -0
  73. package/dist/components/tabs.unstyled.d.ts.map +1 -0
  74. package/dist/components/tabs.unstyled.js +89 -0
  75. package/dist/components/type-table.d.ts +19 -10
  76. package/dist/components/type-table.d.ts.map +1 -1
  77. package/dist/components/type-table.js +19 -10
  78. package/dist/components/ui/button.d.ts +2 -1
  79. package/dist/components/ui/button.d.ts.map +1 -1
  80. package/dist/components/ui/button.js +12 -8
  81. package/dist/components/ui/navigation-menu.js +2 -2
  82. package/dist/components/ui/popover.js +1 -1
  83. package/dist/components/ui/scroll-area.d.ts.map +1 -1
  84. package/dist/components/ui/scroll-area.js +1 -1
  85. package/dist/contexts/search.d.ts +10 -2
  86. package/dist/contexts/search.d.ts.map +1 -1
  87. package/dist/contexts/search.js +7 -1
  88. package/dist/contexts/sidebar.d.ts.map +1 -1
  89. package/dist/contexts/sidebar.js +2 -3
  90. package/dist/contexts/tree.d.ts +2 -1
  91. package/dist/contexts/tree.d.ts.map +1 -1
  92. package/dist/contexts/tree.js +9 -2
  93. package/dist/i18n.d.ts +13 -11
  94. package/dist/i18n.d.ts.map +1 -1
  95. package/dist/i18n.js +14 -37
  96. package/dist/icons.d.ts +49 -0
  97. package/dist/icons.d.ts.map +1 -0
  98. package/dist/icons.js +282 -0
  99. package/dist/layouts/docs/client.d.ts +9 -0
  100. package/dist/layouts/docs/client.d.ts.map +1 -0
  101. package/dist/layouts/docs/client.js +46 -0
  102. package/dist/layouts/docs/index.d.ts +36 -0
  103. package/dist/layouts/docs/index.d.ts.map +1 -0
  104. package/dist/layouts/docs/index.js +77 -0
  105. package/dist/layouts/docs/page-client.d.ts +25 -0
  106. package/dist/layouts/docs/page-client.d.ts.map +1 -0
  107. package/dist/layouts/docs/page-client.js +157 -0
  108. package/dist/layouts/docs/page.d.ts +17 -0
  109. package/dist/layouts/docs/page.d.ts.map +1 -0
  110. package/dist/layouts/docs/page.js +26 -0
  111. package/dist/layouts/{home.d.ts → home/index.d.ts} +2 -3
  112. package/dist/layouts/home/index.d.ts.map +1 -0
  113. package/dist/layouts/home/index.js +56 -0
  114. package/dist/layouts/home/menu.d.ts +1 -1
  115. package/dist/layouts/home/menu.d.ts.map +1 -1
  116. package/dist/layouts/home/menu.js +3 -6
  117. package/dist/layouts/home/navbar.d.ts +4 -4
  118. package/dist/layouts/home/navbar.d.ts.map +1 -1
  119. package/dist/layouts/home/navbar.js +3 -4
  120. package/dist/layouts/notebook/client.d.ts +11 -0
  121. package/dist/layouts/notebook/client.d.ts.map +1 -0
  122. package/dist/layouts/notebook/client.js +45 -0
  123. package/dist/layouts/notebook/index.d.ts +34 -0
  124. package/dist/layouts/notebook/index.d.ts.map +1 -0
  125. package/dist/layouts/notebook/index.js +112 -0
  126. package/dist/layouts/shared/client.d.ts +6 -0
  127. package/dist/layouts/shared/client.d.ts.map +1 -0
  128. package/dist/layouts/{links.js → shared/client.js} +4 -6
  129. package/dist/layouts/shared/index.d.ts +122 -0
  130. package/dist/layouts/shared/index.d.ts.map +1 -0
  131. package/dist/layouts/{shared.js → shared/index.js} +1 -15
  132. package/dist/mdx.d.ts +7 -2
  133. package/dist/mdx.d.ts.map +1 -1
  134. package/dist/mdx.js +5 -1
  135. package/dist/mdx.server.d.ts.map +1 -1
  136. package/dist/mdx.server.js +10 -3
  137. package/dist/page.d.ts +33 -35
  138. package/dist/page.d.ts.map +1 -1
  139. package/dist/page.js +28 -32
  140. package/dist/provider/base.d.ts +1 -1
  141. package/dist/provider/base.d.ts.map +1 -1
  142. package/dist/provider/base.js +9 -9
  143. package/dist/provider/index.d.ts +5 -3
  144. package/dist/provider/index.d.ts.map +1 -1
  145. package/dist/provider/index.js +6 -6
  146. package/dist/provider/next.d.ts +4 -0
  147. package/dist/provider/next.d.ts.map +1 -0
  148. package/dist/provider/next.js +7 -0
  149. package/dist/provider/react-router.d.ts +4 -0
  150. package/dist/provider/react-router.d.ts.map +1 -0
  151. package/dist/provider/react-router.js +7 -0
  152. package/dist/provider/tanstack.d.ts +4 -0
  153. package/dist/provider/tanstack.d.ts.map +1 -0
  154. package/dist/provider/tanstack.js +7 -0
  155. package/dist/provider/waku.d.ts +4 -0
  156. package/dist/provider/waku.d.ts.map +1 -0
  157. package/dist/provider/waku.js +7 -0
  158. package/dist/style.css +944 -470
  159. package/dist/utils/get-sidebar-tabs.d.ts +18 -4
  160. package/dist/utils/get-sidebar-tabs.d.ts.map +1 -1
  161. package/dist/utils/get-sidebar-tabs.js +11 -8
  162. package/dist/utils/is-active.d.ts +2 -0
  163. package/dist/utils/is-active.d.ts.map +1 -1
  164. package/dist/utils/is-active.js +12 -4
  165. package/dist/utils/merge-refs.d.ts +3 -0
  166. package/dist/utils/merge-refs.d.ts.map +1 -0
  167. package/dist/utils/merge-refs.js +12 -0
  168. package/dist/utils/use-copy-button.d.ts +1 -1
  169. package/dist/utils/use-copy-button.d.ts.map +1 -1
  170. package/dist/utils/use-copy-button.js +9 -7
  171. package/package.json +76 -32
  172. package/css/animations.css +0 -199
  173. package/dist/components/ui/tabs.d.ts +0 -8
  174. package/dist/components/ui/tabs.d.ts.map +0 -1
  175. package/dist/components/ui/tabs.js +0 -16
  176. package/dist/layouts/docs/shared.d.ts +0 -25
  177. package/dist/layouts/docs/shared.d.ts.map +0 -1
  178. package/dist/layouts/docs/shared.js +0 -24
  179. package/dist/layouts/docs-client.d.ts +0 -5
  180. package/dist/layouts/docs-client.d.ts.map +0 -1
  181. package/dist/layouts/docs-client.js +0 -33
  182. package/dist/layouts/docs.d.ts +0 -30
  183. package/dist/layouts/docs.d.ts.map +0 -1
  184. package/dist/layouts/docs.js +0 -50
  185. package/dist/layouts/home.d.ts.map +0 -1
  186. package/dist/layouts/home.js +0 -44
  187. package/dist/layouts/links.d.ts +0 -79
  188. package/dist/layouts/links.d.ts.map +0 -1
  189. package/dist/layouts/notebook-client.d.ts +0 -12
  190. package/dist/layouts/notebook-client.d.ts.map +0 -1
  191. package/dist/layouts/notebook-client.js +0 -47
  192. package/dist/layouts/notebook.d.ts +0 -17
  193. package/dist/layouts/notebook.d.ts.map +0 -1
  194. package/dist/layouts/notebook.js +0 -68
  195. package/dist/layouts/shared.d.ts +0 -65
  196. package/dist/layouts/shared.d.ts.map +0 -1
  197. package/dist/page-client.d.ts +0 -28
  198. package/dist/page-client.d.ts.map +0 -1
  199. package/dist/page-client.js +0 -150
  200. package/dist/page.server.d.ts +0 -13
  201. package/dist/page.server.d.ts.map +0 -1
  202. package/dist/page.server.js +0 -36
@@ -1,33 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { Menu, SidebarIcon, X } from 'lucide-react';
4
- import { cn } from '../utils/cn.js';
5
- import { buttonVariants } from '../components/ui/button.js';
6
- import { useSidebar } from '../contexts/sidebar.js';
7
- import { useNav } from '../contexts/layout.js';
8
- import { SidebarTrigger } from 'fumadocs-core/sidebar';
9
- import { SidebarCollapseTrigger } from '../components/layout/sidebar.js';
10
- import { SearchToggle } from '../components/layout/search-toggle.js';
11
- export function Navbar(props) {
12
- const { open } = useSidebar();
13
- const { isTransparent } = useNav();
14
- return (_jsx("header", { id: "nd-subnav", ...props, className: cn('sticky top-(--fd-banner-height) z-30 flex h-14 items-center px-4 border-b border-fd-foreground/10 transition-colors backdrop-blur-sm md:px-6', (!isTransparent || open) && 'bg-fd-background/80', props.className), children: props.children }));
15
- }
16
- export function NavbarSidebarTrigger(props) {
17
- const { open } = useSidebar();
18
- return (_jsx(SidebarTrigger, { ...props, className: cn(buttonVariants({
19
- color: 'ghost',
20
- size: 'icon',
21
- }), props.className), children: open ? _jsx(X, {}) : _jsx(Menu, {}) }));
22
- }
23
- export function CollapsibleControl() {
24
- const { collapsed } = useSidebar();
25
- if (!collapsed)
26
- return;
27
- return (_jsxs("div", { className: "fixed flex flex-row animate-fd-fade-in rounded-xl p-0.5 border bg-fd-muted text-fd-muted-foreground z-10 xl:start-4 max-xl:end-4", style: {
28
- top: 'calc(var(--fd-banner-height) + var(--fd-tocnav-height) + var(--spacing) * 4)',
29
- }, children: [_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
30
- color: 'ghost',
31
- size: 'icon-sm',
32
- }), 'rounded-lg'), children: _jsx(SidebarIcon, {}) }), _jsx(SearchToggle, { size: "icon-sm", className: "rounded-lg" })] }));
33
- }
@@ -1,30 +0,0 @@
1
- import type { PageTree } from 'fumadocs-core/server';
2
- import { type ReactNode, type HTMLAttributes } from 'react';
3
- import { type LinkItemType, type IconItemType } from '../layouts/links.js';
4
- import { type BaseLayoutProps } from './shared.js';
5
- import { CollapsibleControl, Navbar, NavbarSidebarTrigger } from '../layouts/docs-client.js';
6
- import { type SidebarOptions } from '../layouts/docs/shared.js';
7
- export interface DocsLayoutProps extends BaseLayoutProps {
8
- tree: PageTree.Root;
9
- sidebar?: Partial<SidebarOptions> & {
10
- enabled?: boolean;
11
- component?: ReactNode;
12
- };
13
- /**
14
- * Props for the `div` container
15
- */
16
- containerProps?: HTMLAttributes<HTMLDivElement>;
17
- }
18
- export declare function DocsLayout({ nav: { transparentMode, ...nav }, searchToggle, disableThemeSwitch, themeSwitch, sidebar: { tabs: tabOptions, ...sidebar }, i18n, children, ...props }: DocsLayoutProps): ReactNode;
19
- export declare function DocsLayoutSidebar({ collapsible, components, nav, links, footer, banner, ...props }: Omit<SidebarOptions, 'tabs'> & {
20
- links?: LinkItemType[];
21
- nav?: ReactNode;
22
- }): import("react/jsx-runtime").JSX.Element;
23
- export declare function DocsLayoutSidebarFooter({ i18n, themeSwitch, links, }: {
24
- i18n?: DocsLayoutProps['i18n'];
25
- links?: IconItemType[];
26
- themeSwitch?: DocsLayoutProps['themeSwitch'];
27
- }): import("react/jsx-runtime").JSX.Element | null;
28
- export { CollapsibleControl, Navbar, NavbarSidebarTrigger, type LinkItemType };
29
- export { getSidebarTabsFromOptions } from './docs/shared.js';
30
- //# sourceMappingURL=docs.d.ts.map
@@ -1 +0,0 @@
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,EAAW,MAAM,OAAO,CAAC;AAcrE,OAAO,EACL,KAAK,YAAY,EAEjB,KAAK,YAAY,EAClB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,UAAU,CAAC;AAK1D,OAAO,EACL,kBAAkB,EAClB,MAAM,EACN,oBAAoB,EACrB,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAQ/B,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IAEpB,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG;QAClC,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,SAAS,CAAC;KACvB,CAAC;IAEF;;OAEG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;CACjD;AAED,wBAAgB,UAAU,CAAC,EACzB,GAAG,EAAE,EAAE,eAAe,EAAE,GAAG,GAAG,EAAO,EACrC,YAAY,EACZ,kBAA0B,EAC1B,WAA8C,EAC9C,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,OAAO,EAAO,EAC9C,IAAY,EACZ,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,eAAe,GAAG,SAAS,CAoG7B;AAED,wBAAgB,iBAAiB,CAAC,EAChC,WAAkB,EAClB,UAAU,EACV,GAAG,EACH,KAAU,EACV,MAAM,EACN,MAAM,EACN,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG;IAChC,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB,GAAG,CAAC,EAAE,SAAS,CAAC;CACjB,2CA2CA;AAED,wBAAgB,uBAAuB,CAAC,EACtC,IAAI,EACJ,WAAW,EACX,KAAU,GACX,EAAE;IACD,IAAI,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAC/B,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC;CAC9C,kDAiCA;AAED,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,oBAAoB,EAAE,KAAK,YAAY,EAAE,CAAC;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC"}
@@ -1,50 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useMemo } from 'react';
3
- import { Languages, SidebarIcon } from 'lucide-react';
4
- import { cn } from '../utils/cn.js';
5
- import { buttonVariants } from '../components/ui/button.js';
6
- import { CollapsibleSidebar, Sidebar, SidebarFooter, SidebarHeader, SidebarCollapseTrigger, SidebarViewport, SidebarPageTree, } from '../components/layout/sidebar.js';
7
- import { slot, slots } from '../layouts/shared.js';
8
- import { BaseLinkItem, } from '../layouts/links.js';
9
- import { RootToggle } from '../components/layout/root-toggle.js';
10
- import { getLinks } from './shared.js';
11
- import { LanguageToggle, LanguageToggleText, } from '../components/layout/language-toggle.js';
12
- import { CollapsibleControl, Navbar, NavbarSidebarTrigger, } from '../layouts/docs-client.js';
13
- import { TreeContextProvider } from '../contexts/tree.js';
14
- import { ThemeToggle } from '../components/layout/theme-toggle.js';
15
- import { LargeSearchToggle, SearchToggle, } from '../components/layout/search-toggle.js';
16
- import { getSidebarTabsFromOptions, layoutVariables, SidebarLinkItem, } from '../layouts/docs/shared.js';
17
- import { StylesProvider, NavProvider, } from '../contexts/layout.js';
18
- import Link from 'fumadocs-core/link';
19
- export function DocsLayout({ nav: { transparentMode, ...nav } = {}, searchToggle, disableThemeSwitch = false, themeSwitch = { enabled: !disableThemeSwitch }, sidebar: { tabs: tabOptions, ...sidebar } = {}, i18n = false, children, ...props }) {
20
- const tabs = useMemo(() => getSidebarTabsFromOptions(tabOptions, props.tree) ?? [], [tabOptions, props.tree]);
21
- const links = getLinks(props.links ?? [], props.githubUrl);
22
- const variables = cn('[--fd-tocnav-height:36px] md:[--fd-sidebar-width:268px] lg:[--fd-sidebar-width:286px] xl:[--fd-toc-width:286px] xl:[--fd-tocnav-height:0px]', !nav.component && nav.enabled !== false
23
- ? '[--fd-nav-height:calc(var(--spacing)*14)] md:[--fd-nav-height:0px]'
24
- : undefined);
25
- const pageStyles = {
26
- tocNav: cn('xl:hidden'),
27
- toc: cn('max-xl:hidden'),
28
- };
29
- return (_jsx(TreeContextProvider, { tree: props.tree, children: _jsxs(NavProvider, { transparentMode: transparentMode, children: [slot(nav, _jsxs(Navbar, { className: "md:hidden", children: [_jsx(Link, { href: nav.url ?? '/', className: "inline-flex items-center gap-2.5 font-semibold", children: nav.title }), _jsx("div", { className: "flex flex-1 flex-row items-center gap-1", children: nav.children }), slots('sm', searchToggle, _jsx(SearchToggle, { hideIfDisabled: true })), _jsx(NavbarSidebarTrigger, { className: "-me-2 md:hidden" })] })), _jsxs("main", { id: "nd-docs-layout", ...props.containerProps, className: cn('flex flex-1 flex-row pe-(--fd-layout-offset)', variables, props.containerProps?.className), style: {
30
- ...layoutVariables,
31
- ...props.containerProps?.style,
32
- }, children: [slot(sidebar, _jsx(DocsLayoutSidebar, { ...sidebar, links: links, nav: _jsxs(_Fragment, { children: [_jsx(Link, { href: nav.url ?? '/', className: "inline-flex text-[15px] items-center gap-2.5 font-medium", children: nav.title }), nav.children] }), banner: _jsxs(_Fragment, { children: [tabs.length > 0 ? (_jsx(RootToggle, { options: tabs, className: "-mx-2" })) : null, slots('lg', searchToggle, _jsx(LargeSearchToggle, { hideIfDisabled: true, className: "rounded-lg max-md:hidden" })), sidebar.banner] }), footer: _jsxs(_Fragment, { children: [_jsx(DocsLayoutSidebarFooter, { links: links.filter((item) => item.type === 'icon'), i18n: i18n, themeSwitch: themeSwitch }), sidebar.footer] }) })), _jsx(StylesProvider, { ...pageStyles, children: children })] })] }) }));
33
- }
34
- export function DocsLayoutSidebar({ collapsible = true, components, nav, links = [], footer, banner, ...props }) {
35
- const Aside = collapsible ? CollapsibleSidebar : Sidebar;
36
- return (_jsxs(_Fragment, { children: [collapsible ? _jsx(CollapsibleControl, {}) : null, _jsxs(Aside, { ...props, className: cn('md:ps-(--fd-layout-offset)', props.className), children: [_jsxs(SidebarHeader, { children: [_jsxs("div", { className: "flex flex-row pt-1 max-md:hidden", children: [nav, collapsible && (_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
37
- color: 'ghost',
38
- size: 'icon-sm',
39
- }), 'ms-auto mb-auto text-fd-muted-foreground max-md:hidden'), children: _jsx(SidebarIcon, {}) }))] }), banner] }), _jsxs(SidebarViewport, { children: [_jsx("div", { className: "mb-4 empty:hidden", children: links
40
- .filter((v) => v.type !== 'icon')
41
- .map((item, i) => (_jsx(SidebarLinkItem, { item: item }, i))) }), _jsx(SidebarPageTree, { components: components })] }), _jsx(SidebarFooter, { children: footer })] })] }));
42
- }
43
- export function DocsLayoutSidebarFooter({ i18n, themeSwitch, links = [], }) {
44
- // empty footer items
45
- if (links.length === 0 && !i18n && themeSwitch?.enabled === false)
46
- return null;
47
- return (_jsxs("div", { className: "flex flex-row items-center", children: [links.map((item, i) => (_jsx(BaseLinkItem, { item: item, className: cn(buttonVariants({ size: 'icon', color: 'ghost' }), 'text-fd-muted-foreground md:[&_svg]:size-4.5'), "aria-label": item.label, children: item.icon }, i))), _jsx("div", { role: "separator", className: "flex-1" }), i18n ? (_jsxs(LanguageToggle, { className: "me-1.5", children: [_jsx(Languages, { className: "size-4.5" }), _jsx(LanguageToggleText, { className: "md:hidden" })] })) : null, slot(themeSwitch, _jsx(ThemeToggle, { className: "p-0", mode: themeSwitch?.mode }))] }));
48
- }
49
- export { CollapsibleControl, Navbar, NavbarSidebarTrigger };
50
- export { getSidebarTabsFromOptions } from './docs/shared.js';
@@ -1 +0,0 @@
1
- {"version":3,"file":"home.d.ts","sourceRoot":"","sources":["../../src/layouts/home.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,cAAc,EAAW,MAAM,OAAO,CAAC;AAC/D,OAAO,EAAE,KAAK,UAAU,EAAe,MAAM,kBAAkB,CAAC;AAEhE,OAAO,EAAY,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;AA6B1D,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,GAAG,CAAC,EAAE,OAAO,CACX,UAAU,GAAG;QACX;;WAEG;QACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,CACF,CAAC;CACH;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,eAAe,GAAG,cAAc,CAAC,WAAW,CAAC,2CAmCrD;AAED,wBAAgB,MAAM,CAAC,EACrB,GAAQ,EACR,IAAY,EACZ,KAAK,EACL,SAAS,EACT,WAAW,EACX,YAAY,GACb,EAAE,eAAe,2CA8FjB"}
@@ -1,44 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { Fragment, useMemo } from 'react';
3
- import { slot, slots } from '../layouts/shared.js';
4
- import { cn } from '../utils/cn.js';
5
- import { getLinks } from './shared.js';
6
- import { NavProvider } from '../contexts/layout.js';
7
- import { Navbar, NavbarLink, NavbarMenu, NavbarMenuContent, NavbarMenuLink, NavbarMenuTrigger, } from '../layouts/home/navbar.js';
8
- import { LargeSearchToggle, SearchToggle, } from '../components/layout/search-toggle.js';
9
- import { ThemeToggle } from '../components/layout/theme-toggle.js';
10
- import { LanguageToggle, LanguageToggleText, } from '../components/layout/language-toggle.js';
11
- import { ChevronDown, Languages } from 'lucide-react';
12
- import Link from 'fumadocs-core/link';
13
- import { Menu, MenuContent, MenuLinkItem, MenuTrigger, } from '../layouts/home/menu.js';
14
- export function HomeLayout(props) {
15
- const { nav, links, githubUrl, i18n, disableThemeSwitch = false, themeSwitch = { enabled: !disableThemeSwitch }, searchToggle, ...rest } = props;
16
- return (_jsx(NavProvider, { transparentMode: nav?.transparentMode, children: _jsxs("main", { id: "nd-home-layout", ...rest, className: cn('flex flex-1 flex-col pt-14', rest.className), children: [slot(nav, _jsx(Header, { links: links, nav: nav, themeSwitch: themeSwitch, searchToggle: searchToggle, i18n: i18n, githubUrl: githubUrl })), props.children] }) }));
17
- }
18
- export function Header({ nav = {}, i18n = false, links, githubUrl, themeSwitch, searchToggle, }) {
19
- const finalLinks = useMemo(() => getLinks(links, githubUrl), [links, githubUrl]);
20
- const navItems = finalLinks.filter((item) => ['nav', 'all'].includes(item.on ?? 'all'));
21
- const menuItems = finalLinks.filter((item) => ['menu', 'all'].includes(item.on ?? 'all'));
22
- return (_jsxs(Navbar, { children: [_jsx(Link, { href: nav.url ?? '/', className: "inline-flex items-center gap-2.5 font-semibold", children: nav.title }), nav.children, _jsx("ul", { className: "flex flex-row items-center gap-2 px-6 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-row items-center justify-end gap-1.5 flex-1", children: [slots('sm', searchToggle, _jsx(SearchToggle, { className: "lg:hidden", hideIfDisabled: true })), slots('lg', searchToggle, _jsx(LargeSearchToggle, { className: "w-full max-w-[240px] max-lg:hidden", hideIfDisabled: true })), slot(themeSwitch, _jsx(ThemeToggle, { className: "max-lg:hidden", mode: themeSwitch?.mode })), i18n ? (_jsx(LanguageToggle, { className: "max-lg:hidden", children: _jsx(Languages, { className: "size-5" }) })) : null] }), _jsxs("ul", { className: "flex flex-row items-center", children: [navItems.filter(isSecondary).map((item, i) => (_jsx(NavbarLinkItem, { item: item, className: "-me-1.5 max-lg:hidden" }, i))), _jsxs(Menu, { className: "lg:hidden", children: [_jsx(MenuTrigger, { "aria-label": "Toggle Menu", className: "group -me-2", enableHover: nav.enableHoverToOpen, children: _jsx(ChevronDown, { className: "size-3 transition-transform duration-300 group-data-[state=open]:rotate-180" }) }), _jsxs(MenuContent, { className: "sm:flex-row sm:items-center sm:justify-end", children: [menuItems
25
- .filter((item) => !isSecondary(item))
26
- .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, slot(themeSwitch, _jsx(ThemeToggle, { mode: themeSwitch?.mode }))] })] })] })] })] }));
27
- }
28
- function NavbarLinkItem({ item, ...props }) {
29
- if (item.type === 'custom')
30
- return _jsx("div", { ...props, children: item.children });
31
- if (item.type === 'menu') {
32
- const children = item.items.map((child, j) => {
33
- if (child.type === 'custom')
34
- return _jsx(Fragment, { children: child.children }, j);
35
- const { banner = child.icon ? (_jsx("div", { className: "w-fit rounded-md border bg-fd-muted p-1 [&_svg]:size-4", children: child.icon })) : null, ...rest } = child.menu ?? {};
36
- return (_jsx(NavbarMenuLink, { href: child.url, ...rest, children: rest.children ?? (_jsxs(_Fragment, { children: [banner, _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] })) }, j));
37
- });
38
- return (_jsxs(NavbarMenu, { children: [_jsx(NavbarMenuTrigger, { ...props, children: item.url ? _jsx(Link, { href: item.url, children: item.text }) : item.text }), _jsx(NavbarMenuContent, { children: children })] }));
39
- }
40
- 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 }));
41
- }
42
- function isSecondary(item) {
43
- return (('secondary' in item && item.secondary === true) || item.type === 'icon');
44
- }
@@ -1,79 +0,0 @@
1
- import { type AnchorHTMLAttributes, type HTMLAttributes, type ReactNode } from 'react';
2
- interface BaseItem {
3
- /**
4
- * Restrict where the item is displayed
5
- *
6
- * @defaultValue 'all'
7
- */
8
- on?: 'menu' | 'nav' | 'all';
9
- }
10
- export interface BaseLinkType extends BaseItem {
11
- url: string;
12
- /**
13
- * When the item is marked as active
14
- *
15
- * @defaultValue 'url'
16
- */
17
- active?: 'url' | 'nested-url' | 'none';
18
- external?: boolean;
19
- }
20
- export interface MainItemType extends BaseLinkType {
21
- type?: 'main';
22
- icon?: ReactNode;
23
- text: ReactNode;
24
- description?: ReactNode;
25
- }
26
- export interface IconItemType extends BaseLinkType {
27
- type: 'icon';
28
- /**
29
- * `aria-label` of icon button
30
- */
31
- label?: string;
32
- icon: ReactNode;
33
- text: ReactNode;
34
- /**
35
- * @defaultValue true
36
- */
37
- secondary?: boolean;
38
- }
39
- interface ButtonItem extends BaseLinkType {
40
- type: 'button';
41
- icon?: ReactNode;
42
- text: ReactNode;
43
- /**
44
- * @defaultValue false
45
- */
46
- secondary?: boolean;
47
- }
48
- export interface MenuItemType extends BaseItem {
49
- type: 'menu';
50
- icon?: ReactNode;
51
- text: ReactNode;
52
- url?: string;
53
- items: ((MainItemType & {
54
- /**
55
- * Options when displayed on navigation menu
56
- */
57
- menu?: HTMLAttributes<HTMLElement> & {
58
- banner?: ReactNode;
59
- };
60
- }) | CustomItem)[];
61
- /**
62
- * @defaultValue false
63
- */
64
- secondary?: boolean;
65
- }
66
- interface CustomItem extends BaseItem {
67
- type: 'custom';
68
- /**
69
- * @defaultValue false
70
- */
71
- secondary?: boolean;
72
- children: ReactNode;
73
- }
74
- export type LinkItemType = MainItemType | IconItemType | ButtonItem | MenuItemType | CustomItem;
75
- export declare const BaseLinkItem: import("react").ForwardRefExoticComponent<Omit<AnchorHTMLAttributes<HTMLAnchorElement>, "href"> & {
76
- item: BaseLinkType;
77
- } & import("react").RefAttributes<HTMLAnchorElement>>;
78
- export {};
79
- //# sourceMappingURL=links.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../../src/layouts/links.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,oBAAoB,EAEzB,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,UAAU,QAAQ;IAChB;;;;OAIG;IACH,EAAE,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;CAC7B;AAED,MAAM,WAAW,YAAa,SAAQ,QAAQ;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ;;;;OAIG;IACH,MAAM,CAAC,EAAE,KAAK,GAAG,YAAY,GAAG,MAAM,CAAC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,YAAa,SAAQ,YAAY;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,CAAC,EAAE,SAAS,CAAC;CACzB;AAED,MAAM,WAAW,YAAa,SAAQ,YAAY;IAChD,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,UAAU,UAAW,SAAQ,YAAY;IACvC,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,YAAa,SAAQ,QAAQ;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC;IAEhB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CACH,CAAC,YAAY,GAAG;QACd;;WAEG;QACH,IAAI,CAAC,EAAE,cAAc,CAAC,WAAW,CAAC,GAAG;YACnC,MAAM,CAAC,EAAE,SAAS,CAAC;SACpB,CAAC;KACH,CAAC,GACF,UAAU,CACb,EAAE,CAAC;IAEJ;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,UAAU,UAAW,SAAQ,QAAQ;IACnC,IAAI,EAAE,QAAQ,CAAC;IACf;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,MAAM,YAAY,GACpB,YAAY,GACZ,YAAY,GACZ,UAAU,GACV,YAAY,GACZ,UAAU,CAAC;AAEf,eAAO,MAAM,YAAY;UAEyC,YAAY;qDAmB5E,CAAC"}
@@ -1,12 +0,0 @@
1
- import { type ButtonHTMLAttributes, type HTMLAttributes } from 'react';
2
- import type { Option } from '../components/layout/root-toggle.js';
3
- export declare function Navbar({ mode, ...props }: HTMLAttributes<HTMLElement> & {
4
- mode: 'top' | 'auto';
5
- }): import("react/jsx-runtime").JSX.Element;
6
- export declare function NavbarSidebarTrigger(props: ButtonHTMLAttributes<HTMLButtonElement>): import("react/jsx-runtime").JSX.Element;
7
- export declare function LayoutTabs(props: HTMLAttributes<HTMLElement>): import("react/jsx-runtime").JSX.Element;
8
- export declare function LayoutTab(item: Option): import("react/jsx-runtime").JSX.Element;
9
- export declare function SidebarLayoutTab({ item, ...props }: {
10
- item: Option;
11
- } & HTMLAttributes<HTMLElement>): import("react/jsx-runtime").JSX.Element;
12
- //# sourceMappingURL=notebook-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"notebook-client.d.ts","sourceRoot":"","sources":["../../src/layouts/notebook-client.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AASvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAE9D,wBAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,WAAW,CAAC,GAAG;IAAE,IAAI,EAAE,KAAK,GAAG,MAAM,CAAA;CAAE,2CAoBxD;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,2CAkB/C;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,CAAC,WAAW,CAAC,2CAY5D;AAUD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,2CAkBrC;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,GAAG,KAAK,EACT,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,cAAc,CAAC,WAAW,CAAC,2CAoBhD"}
@@ -1,47 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { cn } from '../utils/cn.js';
4
- import { useSidebar } from '../contexts/sidebar.js';
5
- import { useNav } from '../contexts/layout.js';
6
- import { SidebarTrigger } from 'fumadocs-core/sidebar';
7
- import { buttonVariants } from '../components/ui/button.js';
8
- import { Menu, X } from 'lucide-react';
9
- import Link from 'fumadocs-core/link';
10
- import { usePathname } from 'fumadocs-core/framework';
11
- import { isActive } from '../utils/is-active.js';
12
- export function Navbar({ mode, ...props }) {
13
- const { open, collapsed } = useSidebar();
14
- const { isTransparent } = useNav();
15
- return (_jsx("header", { id: "nd-subnav", ...props, className: cn('fixed inset-x-0 top-(--fd-banner-height) z-10 px-(--fd-layout-offset) backdrop-blur-sm transition-colors', (!isTransparent || open) && 'bg-fd-background/80', mode === 'auto' &&
16
- !collapsed &&
17
- 'ps-[calc(var(--fd-layout-offset)+var(--fd-sidebar-width))]', props.className), children: props.children }));
18
- }
19
- export function NavbarSidebarTrigger(props) {
20
- const { open } = useSidebar();
21
- return (_jsx(SidebarTrigger, { ...props, className: cn(buttonVariants({
22
- color: 'ghost',
23
- size: 'icon',
24
- }), props.className), children: open ? _jsx(X, {}) : _jsx(Menu, {}) }));
25
- }
26
- export function LayoutTabs(props) {
27
- return (_jsx("div", { ...props, className: cn('flex flex-row items-end gap-6 overflow-auto', props.className), children: props.children }));
28
- }
29
- function useIsSelected(item) {
30
- const pathname = usePathname();
31
- return item.urls
32
- ? item.urls.has(pathname.endsWith('/') ? pathname.slice(0, -1) : pathname)
33
- : isActive(item.url, pathname, true);
34
- }
35
- export function LayoutTab(item) {
36
- const { closeOnRedirect } = useSidebar();
37
- const selected = useIsSelected(item);
38
- return (_jsx(Link, { className: cn('inline-flex items-center py-2.5 border-b border-transparent gap-2 text-fd-muted-foreground text-sm text-nowrap', selected && 'text-fd-foreground font-medium border-fd-primary'), href: item.url, onClick: () => {
39
- closeOnRedirect.current = false;
40
- }, children: item.title }));
41
- }
42
- export function SidebarLayoutTab({ item, ...props }) {
43
- const selected = useIsSelected(item);
44
- return (_jsxs(Link, { ...props, className: cn('flex flex-row items-center px-2 -mx-2 py-1.5 gap-2.5 text-fd-muted-foreground [&_svg]:!size-4.5', selected
45
- ? 'text-fd-primary font-medium'
46
- : 'hover:text-fd-accent-foreground', props.className), "data-active": selected, href: item.url, children: [item.icon, item.title] }));
47
- }
@@ -1,17 +0,0 @@
1
- import { type HTMLAttributes } from 'react';
2
- import { type BaseLayoutProps } from '../layouts/shared.js';
3
- import { type SidebarOptions } from '../layouts/docs/shared.js';
4
- import type { PageTree } from 'fumadocs-core/server';
5
- import { Navbar, NavbarSidebarTrigger } from './notebook-client.js';
6
- export interface DocsLayoutProps extends BaseLayoutProps {
7
- tree: PageTree.Root;
8
- tabMode?: 'sidebar' | 'navbar';
9
- nav?: BaseLayoutProps['nav'] & {
10
- mode?: 'top' | 'auto';
11
- };
12
- sidebar?: Omit<Partial<SidebarOptions>, 'component' | 'enabled'>;
13
- containerProps?: HTMLAttributes<HTMLDivElement>;
14
- }
15
- export declare function DocsLayout({ tabMode, nav: { transparentMode, ...nav }, sidebar: { collapsible: sidebarCollapsible, tabs: tabOptions, banner: sidebarBanner, footer: sidebarFooter, components: sidebarComponents, ...sidebar }, i18n, disableThemeSwitch, themeSwitch, searchToggle, ...props }: DocsLayoutProps): import("react/jsx-runtime").JSX.Element;
16
- export { Navbar, NavbarSidebarTrigger };
17
- //# sourceMappingURL=notebook.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"notebook.d.ts","sourceRoot":"","sources":["../../src/layouts/notebook.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,cAAc,EAA2B,MAAM,OAAO,CAAC;AAC/E,OAAO,EAAE,KAAK,eAAe,EAAyB,MAAM,kBAAkB,CAAC;AAsB/E,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAGL,MAAM,EACN,oBAAoB,EAErB,MAAM,mBAAmB,CAAC;AAa3B,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAE/B,GAAG,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,GAAG;QAC7B,IAAI,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;KACvB,CAAC;IAEF,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC,CAAC;IAEjE,cAAc,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;CACjD;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAmB,EACnB,GAAG,EAAE,EAAE,eAAe,EAAE,GAAG,GAAG,EAAO,EACrC,OAAO,EAAE,EACP,WAAW,EAAE,kBAAyB,EACtC,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,iBAAiB,EAC7B,GAAG,OAAO,EACN,EACN,IAAY,EACZ,kBAA0B,EAC1B,WAA8C,EAC9C,YAAY,EACZ,GAAG,KAAK,EACT,EAAE,eAAe,2CAmJjB;AAqLD,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC"}
@@ -1,68 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Fragment, useMemo } from 'react';
3
- import { getLinks, slot, slots } from '../layouts/shared.js';
4
- import { CollapsibleSidebar, Sidebar, SidebarCollapseTrigger, SidebarFooter, SidebarHeader, SidebarViewport, SidebarPageTree, } from '../components/layout/sidebar.js';
5
- import { TreeContextProvider } from '../contexts/tree.js';
6
- import { cn } from '../utils/cn.js';
7
- import { buttonVariants } from '../components/ui/button.js';
8
- import { ChevronDown, Languages, SidebarIcon } from 'lucide-react';
9
- import { BaseLinkItem } from '../layouts/links.js';
10
- import { LanguageToggle } from '../components/layout/language-toggle.js';
11
- import { ThemeToggle } from '../components/layout/theme-toggle.js';
12
- import { Popover, PopoverContent, PopoverTrigger, } from '../components/ui/popover.js';
13
- import { getSidebarTabsFromOptions, layoutVariables, SidebarLinkItem, } from '../layouts/docs/shared.js';
14
- import { LayoutTab, LayoutTabs, Navbar, NavbarSidebarTrigger, SidebarLayoutTab, } from './notebook-client.js';
15
- import { StylesProvider, NavProvider, } from '../contexts/layout.js';
16
- import { RootToggle } from '../components/layout/root-toggle.js';
17
- import Link from 'fumadocs-core/link';
18
- import { LargeSearchToggle, SearchToggle, } from '../components/layout/search-toggle.js';
19
- export function DocsLayout({ tabMode = 'sidebar', nav: { transparentMode, ...nav } = {}, sidebar: { collapsible: sidebarCollapsible = true, tabs: tabOptions, banner: sidebarBanner, footer: sidebarFooter, components: sidebarComponents, ...sidebar } = {}, i18n = false, disableThemeSwitch = false, themeSwitch = { enabled: !disableThemeSwitch }, searchToggle, ...props }) {
20
- const navMode = nav.mode ?? 'auto';
21
- const links = getLinks(props.links ?? [], props.githubUrl);
22
- const tabs = useMemo(() => getSidebarTabsFromOptions(tabOptions, props.tree) ?? [], [tabOptions, props.tree]);
23
- const Aside = sidebarCollapsible ? CollapsibleSidebar : Sidebar;
24
- const variables = cn('[--fd-nav-height:calc(var(--spacing)*14)] [--fd-tocnav-height:36px] md:[--fd-sidebar-width:286px] xl:[--fd-toc-width:286px] xl:[--fd-tocnav-height:0px]', tabs.length > 0 &&
25
- tabMode === 'navbar' &&
26
- 'lg:[--fd-nav-height:calc(var(--spacing)*24)]');
27
- const pageStyles = {
28
- tocNav: cn('xl:hidden'),
29
- toc: cn('max-xl:hidden'),
30
- page: cn('mt-(--fd-nav-height)'),
31
- };
32
- return (_jsx(TreeContextProvider, { tree: props.tree, children: _jsx(NavProvider, { transparentMode: transparentMode, children: _jsxs("main", { id: "nd-docs-layout", ...props.containerProps, className: cn('flex w-full flex-1 flex-row pe-(--fd-layout-offset)', variables, props.containerProps?.className), style: {
33
- ...layoutVariables,
34
- ...props.containerProps?.style,
35
- }, children: [_jsxs(Aside, { ...sidebar, className: cn('md:ps-(--fd-layout-offset)', navMode === 'top' ? 'bg-transparent' : 'md:[--fd-nav-height:0px]', sidebar.className), inner: {
36
- className: cn(navMode === 'top' ? 'md:pt-2.5' : 'md:pt-3.5', tabMode === 'navbar' && 'md:pt-0'),
37
- }, children: [_jsxs(SidebarHeader, { children: [navMode === 'auto' && (_jsxs("div", { className: "flex flex-row justify-between max-md:hidden", children: [_jsx(Link, { href: nav.url ?? '/', className: "inline-flex items-center gap-2.5 font-medium", children: nav.title }), _jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
38
- color: 'ghost',
39
- size: 'icon-sm',
40
- }), 'text-fd-muted-foreground mb-auto'), children: _jsx(SidebarIcon, {}) })] })), nav.children, sidebarBanner, tabMode === 'sidebar' && tabs.length > 0 ? (_jsx(RootToggle, { options: tabs, className: "-mx-2" })) : null] }), _jsxs(SidebarViewport, { children: [tabMode === 'navbar' &&
41
- tabs.map((tab, i) => (_jsx(SidebarLayoutTab, { item: tab, className: cn('lg:hidden', i === tabs.length - 1 && 'mb-4') }, tab.url))), links.map((item, i) => (_jsx(SidebarLinkItem, { item: item, className: cn('lg:hidden', i === links.length - 1 && 'mb-4') }, i))), _jsx(SidebarPageTree, { components: sidebarComponents })] }), _jsxs(SidebarFooter, { className: cn('flex flex-row items-center', !sidebarFooter && 'md:hidden'), children: [i18n ? (_jsx(LanguageToggle, { className: "me-auto md:hidden", children: _jsx(Languages, { className: "size-5 text-fd-muted-foreground" }) })) : null, slot(themeSwitch, _jsx(ThemeToggle, { className: "md:hidden", mode: themeSwitch?.mode ?? 'light-dark-system' })), sidebarFooter] })] }), _jsx(DocsNavbar, { mode: nav.mode, nav: _jsx(Link, { href: nav.url ?? '/', className: cn('inline-flex items-center gap-2.5 font-semibold', navMode === 'auto' && 'md:hidden'), children: nav.title }), links: links, i18n: i18n, sidebarCollapsible: sidebarCollapsible, searchToggle: searchToggle, tabs: tabMode == 'navbar' ? tabs : [], children: nav.children }), _jsx(StylesProvider, { ...pageStyles, children: props.children })] }) }) }));
42
- }
43
- function DocsNavbar({ mode: navMode = 'auto', nav, sidebarCollapsible = false, links, themeSwitch, searchToggle, i18n = false, tabs, children, }) {
44
- return (_jsxs(Navbar, { mode: navMode, children: [_jsxs("div", { className: cn('flex flex-row border-b border-fd-foreground/10 px-4 h-14', navMode === 'auto' && 'md:px-6'), children: [_jsxs("div", { className: cn('flex flex-row items-center', navMode === 'top' && 'flex-1 pe-4'), children: [sidebarCollapsible && navMode === 'auto' ? (_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
45
- color: 'ghost',
46
- size: 'icon-sm',
47
- }), 'text-fd-muted-foreground -ms-1.5 me-2 data-[collapsed=false]:hidden max-md:hidden'), children: _jsx(SidebarIcon, {}) })) : null, nav] }), slots('lg', searchToggle, _jsx(LargeSearchToggle, { hideIfDisabled: true, className: cn('w-full my-auto rounded-xl max-md:hidden', navMode === 'top' ? 'max-w-sm px-2' : 'max-w-[240px]') })), _jsxs("div", { className: "flex flex-1 flex-row items-center justify-end", children: [_jsx("div", { className: "flex flex-row items-center gap-6 px-4 empty:hidden max-lg:hidden", children: links
48
- .filter((item) => item.type !== 'icon')
49
- .map((item, i) => (_jsx(NavbarLinkItem, { item: item, className: "text-sm text-fd-muted-foreground transition-colors hover:text-fd-accent-foreground" }, i))) }), children, slots('sm', searchToggle, _jsx(SearchToggle, { hideIfDisabled: true, className: "md:hidden" })), _jsx(NavbarSidebarTrigger, { className: "md:hidden" }), links
50
- .filter((item) => item.type === 'icon')
51
- .map((item, i) => (_jsx(BaseLinkItem, { item: item, className: cn(buttonVariants({ size: 'icon-sm', color: 'ghost' }), 'text-fd-muted-foreground max-lg:hidden'), "aria-label": item.label, children: item.icon }, i))), i18n ? (_jsx(LanguageToggle, { className: "max-md:hidden", children: _jsx(Languages, { className: "size-4.5 text-fd-muted-foreground" }) })) : null, slot(themeSwitch, _jsx(ThemeToggle, { className: "ms-2 max-md:hidden", mode: themeSwitch?.mode ?? 'light-dark-system' })), sidebarCollapsible && navMode === 'top' ? (_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
52
- color: 'secondary',
53
- size: 'icon-sm',
54
- }), 'ms-2 text-fd-muted-foreground rounded-full max-md:hidden'), children: _jsx(SidebarIcon, {}) })) : null] })] }), tabs.length > 0 ? (_jsx(LayoutTabs, { className: "px-6 border-b border-fd-foreground/10 h-10 max-lg:hidden", children: tabs.map((tab) => (_jsx(LayoutTab, { ...tab }, tab.url))) })) : null] }));
55
- }
56
- function NavbarLinkItem({ item, ...props }) {
57
- if (item.type === 'menu') {
58
- return (_jsxs(Popover, { children: [_jsxs(PopoverTrigger, { ...props, className: cn('inline-flex items-center gap-1.5', props.className), children: [item.text, _jsx(ChevronDown, { className: "size-3" })] }), _jsx(PopoverContent, { className: "flex flex-col", children: item.items.map((child, i) => {
59
- if (child.type === 'custom')
60
- return _jsx(Fragment, { children: child.children }, i);
61
- return (_jsxs(BaseLinkItem, { item: child, className: "inline-flex items-center gap-2 rounded-md p-2 text-start hover:bg-fd-accent hover:text-fd-accent-foreground data-[active=true]:text-fd-primary [&_svg]:size-4", children: [child.icon, child.text] }, i));
62
- }) })] }));
63
- }
64
- if (item.type === 'custom')
65
- return item.children;
66
- return (_jsx(BaseLinkItem, { item: item, ...props, children: item.text }));
67
- }
68
- export { Navbar, NavbarSidebarTrigger };
@@ -1,65 +0,0 @@
1
- import type { ReactNode } from 'react';
2
- import type { LinkItemType } from '../layouts/links.js';
3
- import type { NavProviderProps } from '../contexts/layout.js';
4
- import type { I18nConfig } from 'fumadocs-core/i18n';
5
- export interface NavOptions extends NavProviderProps {
6
- enabled: boolean;
7
- component: ReactNode;
8
- title?: ReactNode;
9
- /**
10
- * Redirect url of title
11
- * @defaultValue '/'
12
- */
13
- url?: string;
14
- children?: ReactNode;
15
- }
16
- export interface BaseLayoutProps {
17
- themeSwitch?: {
18
- enabled?: boolean;
19
- component?: ReactNode;
20
- mode?: 'light-dark' | 'light-dark-system';
21
- };
22
- searchToggle?: Partial<{
23
- enabled: boolean;
24
- components: Partial<{
25
- sm: ReactNode;
26
- lg: ReactNode;
27
- }>;
28
- }>;
29
- /**
30
- * Remove theme switcher component
31
- *
32
- * @deprecated Use `themeSwitch.enabled` instead.
33
- */
34
- disableThemeSwitch?: boolean;
35
- /**
36
- * I18n options
37
- *
38
- * @defaultValue false
39
- */
40
- i18n?: boolean | I18nConfig;
41
- /**
42
- * GitHub url
43
- */
44
- githubUrl?: string;
45
- links?: LinkItemType[];
46
- /**
47
- * Replace or disable navbar
48
- */
49
- nav?: Partial<NavOptions>;
50
- children?: ReactNode;
51
- }
52
- export { type LinkItemType };
53
- /**
54
- * Get Links Items with shortcuts
55
- */
56
- export declare function getLinks(links?: LinkItemType[], githubUrl?: string): LinkItemType[];
57
- export declare function slot(obj: {
58
- enabled?: boolean;
59
- component?: ReactNode;
60
- } | undefined, def: ReactNode, customComponentProps?: object, disabled?: ReactNode): ReactNode;
61
- export declare function slots<Comp extends Record<string, ReactNode>>(variant: keyof Comp, obj: {
62
- enabled?: boolean;
63
- components?: Comp;
64
- } | undefined, def: ReactNode): ReactNode;
65
- //# sourceMappingURL=shared.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/layouts/shared.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,WAAW,UAAW,SAAQ,gBAAgB;IAClD,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IAErB,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE;QACZ,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB,IAAI,CAAC,EAAE,YAAY,GAAG,mBAAmB,CAAC;KAC3C,CAAC;IAEF,YAAY,CAAC,EAAE,OAAO,CAAC;QACrB,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,EAAE,OAAO,CAAC;YAClB,EAAE,EAAE,SAAS,CAAC;YACd,EAAE,EAAE,SAAS,CAAC;SACf,CAAC,CAAC;KACJ,CAAC,CAAC;IAEH;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IAE5B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB;;OAEG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAE1B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,OAAO,EAAE,KAAK,YAAY,EAAE,CAAC;AAE7B;;GAEG;AACH,wBAAgB,QAAQ,CACtB,KAAK,GAAE,YAAY,EAAO,EAC1B,SAAS,CAAC,EAAE,MAAM,GACjB,YAAY,EAAE,CAqBhB;AAED,wBAAgB,IAAI,CAClB,GAAG,EACC;IACE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,GACD,SAAS,EACb,GAAG,EAAE,SAAS,EACd,oBAAoB,CAAC,EAAE,MAAM,EAC7B,QAAQ,CAAC,EAAE,SAAS,GACnB,SAAS,CAMX;AAED,wBAAgB,KAAK,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAC1D,OAAO,EAAE,MAAM,IAAI,EACnB,GAAG,EACC;IACE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,IAAI,CAAC;CACnB,GACD,SAAS,EACb,GAAG,EAAE,SAAS,GACb,SAAS,CAMX"}
@@ -1,28 +0,0 @@
1
- import { type ComponentProps, type HTMLAttributes } from 'react';
2
- import type { PageTree, TOCItemType } from 'fumadocs-core/server';
3
- import { type BreadcrumbOptions } from 'fumadocs-core/breadcrumb';
4
- export declare function TocPopoverTrigger({ items, ...props }: ComponentProps<'button'> & {
5
- items: TOCItemType[];
6
- }): import("react/jsx-runtime").JSX.Element;
7
- export declare function TocPopoverContent(props: ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
8
- export declare function TocPopover(props: HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
9
- export declare function PageBody(props: HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
10
- export declare function PageArticle(props: HTMLAttributes<HTMLElement>): import("react/jsx-runtime").JSX.Element;
11
- export declare function LastUpdate(props: {
12
- date: Date;
13
- }): import("react/jsx-runtime").JSX.Element;
14
- type Item = Pick<PageTree.Item, 'name' | 'description' | 'url'>;
15
- export interface FooterProps {
16
- /**
17
- * Items including information for the next and previous page
18
- */
19
- items?: {
20
- previous?: Item;
21
- next?: Item;
22
- };
23
- }
24
- export declare function Footer({ items }: FooterProps): import("react/jsx-runtime").JSX.Element;
25
- export type BreadcrumbProps = BreadcrumbOptions;
26
- export declare function Breadcrumb(options: BreadcrumbProps): import("react/jsx-runtime").JSX.Element | null;
27
- export {};
28
- //# sourceMappingURL=page-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-client.d.ts","sourceRoot":"","sources":["../src/page-client.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,cAAc,EAKpB,MAAM,OAAO,CAAC;AAOf,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAElE,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAgBlC,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG;IAAE,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,2CAoDrD;AA4DD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,2CAU7D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,2CA0D/D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,2CAY7D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,WAAW,CAAC,2CAe7D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,2CAc/C;AAED,KAAK,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,KAAK,CAAC,CAAC;AAChE,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,KAAK,CAAC,EAAE;QACN,QAAQ,CAAC,EAAE,IAAI,CAAC;QAChB,IAAI,CAAC,EAAE,IAAI,CAAC;KACb,CAAC;CACH;AAyBD,wBAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,WAAW,2CA+B5C;AA8BD,MAAM,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAEhD,wBAAgB,UAAU,CAAC,OAAO,EAAE,eAAe,kDAsClD"}