fumadocs-ui 15.7.1 → 15.7.2

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.
@@ -1,21 +1,35 @@
1
1
  import type { PageTree } from 'fumadocs-core/server';
2
2
  import { type ComponentProps, type HTMLAttributes, type ReactNode } from 'react';
3
- import { SidebarTrigger } from '../../components/layout/sidebar.js';
4
- import { type LinkItemType } from '../../layouts/links.js';
5
- import { type BaseLayoutProps } from '../../layouts/shared.js';
3
+ import { type SidebarComponents, type SidebarProps, SidebarTrigger } from '../../components/layout/sidebar.js';
4
+ import { type Option } from '../../components/layout/root-toggle.js';
5
+ import { type BaseLayoutProps, type LinkItemType } from '../../layouts/shared/index.js';
6
6
  import { CollapsibleControl, Navbar } from '../../layouts/docs/client.js';
7
- import { type SidebarOptions } from '../../layouts/docs/shared.js';
7
+ import { type GetSidebarTabsOptions } from '../../utils/get-sidebar-tabs.js';
8
8
  export interface DocsLayoutProps extends BaseLayoutProps {
9
9
  tree: PageTree.Root;
10
- sidebar?: SidebarOptions & ComponentProps<'aside'> & {
11
- enabled?: boolean;
12
- component?: ReactNode;
13
- };
10
+ sidebar?: SidebarOptions;
14
11
  /**
15
12
  * Props for the `div` container
16
13
  */
17
14
  containerProps?: HTMLAttributes<HTMLDivElement>;
18
15
  }
16
+ interface SidebarOptions extends ComponentProps<'aside'>, Pick<SidebarProps, 'defaultOpenLevel' | 'prefetch'> {
17
+ enabled?: boolean;
18
+ component?: ReactNode;
19
+ components?: Partial<SidebarComponents>;
20
+ /**
21
+ * Root Toggle options
22
+ */
23
+ tabs?: Option[] | GetSidebarTabsOptions | false;
24
+ banner?: ReactNode;
25
+ footer?: ReactNode;
26
+ /**
27
+ * Support collapsing the sidebar on desktop mode
28
+ *
29
+ * @defaultValue true
30
+ */
31
+ collapsible?: boolean;
32
+ }
19
33
  export declare function DocsLayout({ nav: { transparentMode, ...nav }, sidebar: { tabs: sidebarTabs, enabled: sidebarEnabled, ...sidebarProps }, searchToggle, disableThemeSwitch, themeSwitch, i18n, children, ...props }: DocsLayoutProps): import("react/jsx-runtime").JSX.Element;
20
34
  export { CollapsibleControl, Navbar, SidebarTrigger, type LinkItemType };
21
35
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layouts/docs/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAIf,OAAO,EAQL,cAAc,EAEf,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,kBAAkB,CAAC;AAKlE,OAAO,EAAE,kBAAkB,EAAc,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAG/E,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAS/B,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IAEpB,OAAO,CAAC,EAAE,cAAc,GACtB,cAAc,CAAC,OAAO,CAAC,GAAG;QACxB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,SAAS,CAAC;KACvB,CAAC;IAEJ;;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,OAAO,EAAE,EACP,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,cAAqB,EAC9B,GAAG,YAAY,EACX,EACN,YAAiB,EACjB,kBAA0B,EAC1B,WAA8C,EAC9C,IAAY,EACZ,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,eAAe,2CA6NjB;AAED,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layouts/docs/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAIf,OAAO,EAGL,KAAK,iBAAiB,EAWtB,KAAK,YAAY,EACjB,cAAc,EAEf,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,KAAK,MAAM,EAAc,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EACL,KAAK,eAAe,EAIpB,KAAK,YAAY,EAClB,MAAM,kBAAkB,CAAC;AAK1B,OAAO,EAAE,kBAAkB,EAAc,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAU/E,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IAEpB,OAAO,CAAC,EAAE,cAAc,CAAC;IAEzB;;OAEG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;CACjD;AAED,UAAU,cACR,SAAQ,cAAc,CAAC,OAAO,CAAC,EAC7B,IAAI,CAAC,YAAY,EAAE,kBAAkB,GAAG,UAAU,CAAC;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAExC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,qBAAqB,GAAG,KAAK,CAAC;IAEhD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,UAAU,CAAC,EACzB,GAAG,EAAE,EAAE,eAAe,EAAE,GAAG,GAAG,EAAO,EACrC,OAAO,EAAE,EACP,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,cAAqB,EAC9B,GAAG,YAAY,EACX,EACN,YAAiB,EACjB,kBAA0B,EAC1B,WAA8C,EAC9C,IAAY,EACZ,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,eAAe,2CAqOjB;AA6CD,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,CAAC"}
@@ -3,21 +3,31 @@ import { useMemo, } from 'react';
3
3
  import { Languages, Sidebar as SidebarIcon } from '../../icons.js';
4
4
  import { cn } from '../../utils/cn.js';
5
5
  import { buttonVariants } from '../../components/ui/button.js';
6
- import { Sidebar, SidebarCollapseTrigger, SidebarContent, SidebarContentMobile, SidebarFooter, SidebarHeader, SidebarPageTree, SidebarTrigger, SidebarViewport, } from '../../components/layout/sidebar.js';
7
- import { BaseLinkItem, } from '../../layouts/links.js';
6
+ import { Sidebar, SidebarCollapseTrigger, SidebarContent, SidebarContentMobile, SidebarFolder, SidebarFolderContent, SidebarFolderLink, SidebarFolderTrigger, SidebarFooter, SidebarHeader, SidebarItem, SidebarPageTree, SidebarTrigger, SidebarViewport, } from '../../components/layout/sidebar.js';
8
7
  import { RootToggle } from '../../components/layout/root-toggle.js';
9
- import { getLinks } from '../../layouts/shared.js';
8
+ import { BaseLinkItem, getLinks, } from '../../layouts/shared/index.js';
10
9
  import { LanguageToggle, LanguageToggleText, } from '../../components/layout/language-toggle.js';
11
10
  import { CollapsibleControl, LayoutBody, Navbar } from '../../layouts/docs/client.js';
12
11
  import { TreeContextProvider } from '../../contexts/tree.js';
13
12
  import { ThemeToggle } from '../../components/layout/theme-toggle.js';
14
- import { getSidebarTabsFromOptions, SidebarLinkItem, } from '../../layouts/docs/shared.js';
15
13
  import { NavProvider } from '../../contexts/layout.js';
16
14
  import Link from 'fumadocs-core/link';
17
15
  import { LargeSearchToggle, SearchToggle, } from '../../components/layout/search-toggle.js';
18
16
  import { HideIfEmpty } from 'fumadocs-core/hide-if-empty';
17
+ import { getSidebarTabs, } from '../../utils/get-sidebar-tabs.js';
19
18
  export function DocsLayout({ nav: { transparentMode, ...nav } = {}, sidebar: { tabs: sidebarTabs, enabled: sidebarEnabled = true, ...sidebarProps } = {}, searchToggle = {}, disableThemeSwitch = false, themeSwitch = { enabled: !disableThemeSwitch }, i18n = false, children, ...props }) {
20
- const tabs = useMemo(() => getSidebarTabsFromOptions(sidebarTabs, props.tree) ?? [], [sidebarTabs, props.tree]);
19
+ const tabs = useMemo(() => {
20
+ if (Array.isArray(sidebarTabs)) {
21
+ return sidebarTabs;
22
+ }
23
+ if (typeof sidebarTabs === 'object') {
24
+ return getSidebarTabs(props.tree, sidebarTabs);
25
+ }
26
+ if (sidebarTabs !== false) {
27
+ return getSidebarTabs(props.tree);
28
+ }
29
+ return [];
30
+ }, [sidebarTabs, props.tree]);
21
31
  const links = getLinks(props.links ?? [], props.githubUrl);
22
32
  const sidebarVariables = cn('md:[--fd-sidebar-width:268px] lg:[--fd-sidebar-width:286px]');
23
33
  function sidebar() {
@@ -57,4 +67,11 @@ export function DocsLayout({ nav: { transparentMode, ...nav } = {}, sidebar: { t
57
67
  nav.enabled !== false &&
58
68
  '[--fd-nav-height:56px] md:[--fd-nav-height:0px]', props.containerProps?.className), children: [sidebarEnabled && sidebar(), children] })] }) }));
59
69
  }
70
+ function SidebarLinkItem({ item, ...props }) {
71
+ if (item.type === 'menu')
72
+ return (_jsxs(SidebarFolder, { ...props, 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(SidebarLinkItem, { item: child }, i))) })] }));
73
+ if (item.type === 'custom')
74
+ return _jsx("div", { ...props, children: item.children });
75
+ return (_jsx(SidebarItem, { href: item.url, icon: item.icon, external: item.external, ...props, children: item.text }));
76
+ }
60
77
  export { CollapsibleControl, Navbar, SidebarTrigger };
@@ -1,5 +1,5 @@
1
1
  import { type HTMLAttributes } from 'react';
2
- import { type BaseLayoutProps, type NavOptions } from '../../layouts/shared.js';
2
+ import { type BaseLayoutProps, type NavOptions } from '../../layouts/shared/index.js';
3
3
  export interface HomeLayoutProps extends BaseLayoutProps {
4
4
  nav?: Partial<NavOptions & {
5
5
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layouts/home/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,cAAc,EAAW,MAAM,OAAO,CAAC;AAE/D,OAAO,EACL,KAAK,eAAe,EAEpB,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAC;AA8B1B,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,WAAgB,EAChB,YAAiB,GAClB,EAAE,eAAe,2CAiGjB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layouts/home/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,cAAc,EAAW,MAAM,OAAO,CAAC;AAE/D,OAAO,EACL,KAAK,eAAe,EAGpB,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAC;AA6B1B,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,WAAgB,EAChB,YAAiB,GAClB,EAAE,eAAe,2CAiGjB"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { Fragment, useMemo } from 'react';
3
3
  import { cn } from '../../utils/cn.js';
4
- import { getLinks, } from '../../layouts/shared.js';
4
+ import { getLinks, } from '../../layouts/shared/index.js';
5
5
  import { NavProvider } from '../../contexts/layout.js';
6
6
  import { Navbar, NavbarLink, NavbarMenu, NavbarMenuContent, NavbarMenuLink, NavbarMenuTrigger, } from '../../layouts/home/navbar.js';
7
7
  import { LargeSearchToggle, SearchToggle, } from '../../components/layout/search-toggle.js';
@@ -1,4 +1,4 @@
1
- import { type LinkItemType } from '../../layouts/links.js';
1
+ import { type LinkItemType } from '../../layouts/shared/index.js';
2
2
  import { NavigationMenuContent, NavigationMenuTrigger } from '../../components/ui/navigation-menu.js';
3
3
  import type { ComponentPropsWithoutRef } from 'react';
4
4
  export declare function MenuLinkItem({ item, ...props }: {
@@ -1 +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;AAElE,OAAO,EACL,qBAAqB,EAGrB,qBAAqB,EACtB,MAAM,iCAAiC,CAAC;AAIzC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,OAAO,CAAC;AAqBtD,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,GAAG,KAAK,EACT,EAAE;IACD,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CA6CA;AAED,eAAO,MAAM,IAAI,yNAAqB,CAAC;AAEvC,wBAAgB,WAAW,CAAC,EAC1B,WAAmB,EACnB,GAAG,KAAK,EACT,EAAE,wBAAwB,CAAC,OAAO,qBAAqB,CAAC,GAAG;IAC1D;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,2CASA;AAED,wBAAgB,WAAW,CACzB,KAAK,EAAE,wBAAwB,CAAC,OAAO,qBAAqB,CAAC,2CAU9D"}
1
+ {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../../src/layouts/home/menu.tsx"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEnE,OAAO,EACL,qBAAqB,EAGrB,qBAAqB,EACtB,MAAM,iCAAiC,CAAC;AAIzC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,OAAO,CAAC;AAqBtD,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,GAAG,KAAK,EACT,EAAE;IACD,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CA6CA;AAED,eAAO,MAAM,IAAI,yNAAqB,CAAC;AAEvC,wBAAgB,WAAW,CAAC,EAC1B,WAAmB,EACnB,GAAG,KAAK,EACT,EAAE,wBAAwB,CAAC,OAAO,qBAAqB,CAAC,GAAG;IAC1D;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,2CASA;AAED,wBAAgB,WAAW,CACzB,KAAK,EAAE,wBAAwB,CAAC,OAAO,qBAAqB,CAAC,2CAU9D"}
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { BaseLinkItem } from '../../layouts/links.js';
3
+ import { BaseLinkItem } from '../../layouts/shared/index.js';
4
4
  import { cn } from '../../utils/cn.js';
5
5
  import { NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuTrigger, } from '../../components/ui/navigation-menu.js';
6
6
  import Link from 'fumadocs-core/link';
@@ -1,7 +1,7 @@
1
1
  import { type ComponentProps } from 'react';
2
2
  import { type VariantProps } from 'class-variance-authority';
3
3
  import { type LinkProps } from 'fumadocs-core/link';
4
- import { BaseLinkItem } from '../../layouts/links.js';
4
+ import { BaseLinkItem } from '../../layouts/shared/index.js';
5
5
  import type { NavigationMenuContentProps, NavigationMenuTriggerProps } from '@radix-ui/react-navigation-menu';
6
6
  export declare function Navbar(props: ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
7
7
  export declare const NavbarMenu: import("react").ForwardRefExoticComponent<Omit<import("@radix-ui/react-navigation-menu").NavigationMenuItemProps & import("react").RefAttributes<HTMLLIElement>, "ref"> & import("react").RefAttributes<HTMLLIElement>>;
@@ -1 +1 @@
1
- {"version":3,"file":"navbar.d.ts","sourceRoot":"","sources":["../../../src/layouts/home/navbar.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAY,MAAM,OAAO,CAAC;AACtD,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;AAW/C,OAAO,KAAK,EACV,0BAA0B,EAC1B,0BAA0B,EAC3B,MAAM,iCAAiC,CAAC;AAOzC,wBAAgB,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,2CA8BlD;AAED,eAAO,MAAM,UAAU,yNAAqB,CAAC;AAE7C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,0BAA0B,2CAYlE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,0BAA0B,2CASlE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,2CAc9C;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"}
1
+ {"version":3,"file":"navbar.d.ts","sourceRoot":"","sources":["../../../src/layouts/home/navbar.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAY,MAAM,OAAO,CAAC;AACtD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAa,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAWhD,OAAO,KAAK,EACV,0BAA0B,EAC1B,0BAA0B,EAC3B,MAAM,iCAAiC,CAAC;AAOzC,wBAAgB,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,2CA8BlD;AAED,eAAO,MAAM,UAAU,yNAAqB,CAAC;AAE7C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,0BAA0B,2CAYlE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,0BAA0B,2CASlE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,2CAc9C;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"}
@@ -4,7 +4,7 @@ import { useState } from 'react';
4
4
  import { cva } from 'class-variance-authority';
5
5
  import Link from 'fumadocs-core/link';
6
6
  import { cn } from '../../utils/cn.js';
7
- import { BaseLinkItem } from '../../layouts/links.js';
7
+ import { BaseLinkItem } from '../../layouts/shared/index.js';
8
8
  import { NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, } from '../../components/ui/navigation-menu.js';
9
9
  import { useNav } from '../../contexts/layout.js';
10
10
  import { buttonVariants } from '../../components/ui/button.js';
@@ -1,17 +1,34 @@
1
- import { type ComponentProps, type HTMLAttributes } from 'react';
2
- import { type BaseLayoutProps } from '../../layouts/shared.js';
3
- import { type SidebarOptions } from '../../layouts/docs/shared.js';
1
+ import { type ComponentProps, type HTMLAttributes, type ReactNode } from 'react';
2
+ import { type BaseLayoutProps } from '../../layouts/shared/index.js';
3
+ import { type SidebarComponents, type SidebarProps } from '../../components/layout/sidebar.js';
4
4
  import type { PageTree } from 'fumadocs-core/server';
5
5
  import { Navbar, NavbarSidebarTrigger } from '../../layouts/notebook/client.js';
6
+ import { type Option } from '../../components/layout/root-toggle.js';
7
+ import { type GetSidebarTabsOptions } from '../../utils/get-sidebar-tabs.js';
6
8
  export interface DocsLayoutProps extends BaseLayoutProps {
7
9
  tree: PageTree.Root;
8
10
  tabMode?: 'sidebar' | 'navbar';
9
11
  nav?: BaseLayoutProps['nav'] & {
10
12
  mode?: 'top' | 'auto';
11
13
  };
12
- sidebar?: SidebarOptions & ComponentProps<'aside'>;
14
+ sidebar?: SidebarOptions;
13
15
  containerProps?: HTMLAttributes<HTMLDivElement>;
14
16
  }
17
+ interface SidebarOptions extends ComponentProps<'aside'>, Pick<SidebarProps, 'defaultOpenLevel' | 'prefetch'> {
18
+ components?: Partial<SidebarComponents>;
19
+ /**
20
+ * Root Toggle options
21
+ */
22
+ tabs?: Option[] | GetSidebarTabsOptions | false;
23
+ banner?: ReactNode;
24
+ footer?: ReactNode;
25
+ /**
26
+ * Support collapsing the sidebar on desktop mode
27
+ *
28
+ * @defaultValue true
29
+ */
30
+ collapsible?: boolean;
31
+ }
15
32
  export declare function DocsLayout(props: DocsLayoutProps): import("react/jsx-runtime").JSX.Element;
16
33
  export { Navbar, NavbarSidebarTrigger };
17
34
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layouts/notebook/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,cAAc,EAEpB,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,kBAAkB,CAAC;AA6BlE,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAGL,MAAM,EACN,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AAUnC,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,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAEnD,cAAc,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;CACjD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,2CAgNhD;AAsMD,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layouts/notebook/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,cAAc,EACnB,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AACf,OAAO,EACL,KAAK,eAAe,EAIrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAGL,KAAK,iBAAiB,EAWtB,KAAK,YAAY,EAGlB,MAAM,6BAA6B,CAAC;AAiBrC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAGL,MAAM,EACN,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,KAAK,MAAM,EAAc,MAAM,iCAAiC,CAAC;AAO1E,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,0BAA0B,CAAC;AAElC,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,cAAc,CAAC;IAEzB,cAAc,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;CACjD;AAED,UAAU,cACR,SAAQ,cAAc,CAAC,OAAO,CAAC,EAC7B,IAAI,CAAC,YAAY,EAAE,kBAAkB,GAAG,UAAU,CAAC;IACrD,UAAU,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAExC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,qBAAqB,GAAG,KAAK,CAAC;IAEhD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,2CA2NhD;AAiPD,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC"}
@@ -1,27 +1,37 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Fragment, useMemo, } from 'react';
3
- import { getLinks } from '../../layouts/shared.js';
4
- import { Sidebar, SidebarCollapseTrigger, SidebarContent, SidebarContentMobile, SidebarFooter, SidebarHeader, SidebarPageTree, SidebarTrigger, SidebarViewport, } from '../../components/layout/sidebar.js';
3
+ import { BaseLinkItem, getLinks, } from '../../layouts/shared/index.js';
4
+ import { Sidebar, SidebarCollapseTrigger, SidebarContent, SidebarContentMobile, SidebarFolder, SidebarFolderContent, SidebarFolderLink, SidebarFolderTrigger, SidebarFooter, SidebarHeader, SidebarItem, SidebarPageTree, SidebarTrigger, SidebarViewport, } from '../../components/layout/sidebar.js';
5
5
  import { TreeContextProvider } from '../../contexts/tree.js';
6
6
  import { cn } from '../../utils/cn.js';
7
7
  import { buttonVariants } from '../../components/ui/button.js';
8
8
  import { ChevronDown, Languages, Sidebar as SidebarIcon, X, } from '../../icons.js';
9
- import { BaseLinkItem } from '../../layouts/links.js';
10
9
  import { LanguageToggle } from '../../components/layout/language-toggle.js';
11
10
  import { ThemeToggle } from '../../components/layout/theme-toggle.js';
12
11
  import { Popover, PopoverContent, PopoverTrigger, } from '../../components/ui/popover.js';
13
- import { getSidebarTabsFromOptions, SidebarLinkItem, } from '../../layouts/docs/shared.js';
14
12
  import { LayoutBody, LayoutTabs, Navbar, NavbarSidebarTrigger, } from '../../layouts/notebook/client.js';
15
13
  import { NavProvider } from '../../contexts/layout.js';
16
14
  import { RootToggle } from '../../components/layout/root-toggle.js';
17
15
  import Link from 'fumadocs-core/link';
18
16
  import { LargeSearchToggle, SearchToggle, } from '../../components/layout/search-toggle.js';
19
17
  import { HideIfEmpty } from 'fumadocs-core/hide-if-empty';
18
+ import { getSidebarTabs, } from '../../utils/get-sidebar-tabs.js';
20
19
  export function DocsLayout(props) {
21
20
  const { tabMode = 'sidebar', nav: { transparentMode, ...nav } = {}, sidebar: { tabs: tabOptions, ...sidebarProps } = {}, i18n = false, disableThemeSwitch = false, themeSwitch = { enabled: !disableThemeSwitch }, } = props;
22
21
  const navMode = nav.mode ?? 'auto';
23
22
  const links = getLinks(props.links ?? [], props.githubUrl);
24
- const tabs = useMemo(() => getSidebarTabsFromOptions(tabOptions, props.tree) ?? [], [tabOptions, props.tree]);
23
+ const tabs = useMemo(() => {
24
+ if (Array.isArray(tabOptions)) {
25
+ return tabOptions;
26
+ }
27
+ if (typeof tabOptions === 'object') {
28
+ return getSidebarTabs(props.tree, tabOptions);
29
+ }
30
+ if (tabOptions !== false) {
31
+ return getSidebarTabs(props.tree);
32
+ }
33
+ return [];
34
+ }, [tabOptions, props.tree]);
25
35
  const variables = cn('[--fd-nav-height:56px] md:[--fd-sidebar-width:286px] md:[--fd-nav-height:64px] xl:[--fd-toc-width:286px]', tabs.length > 0 && tabMode === 'navbar' && 'lg:[--fd-nav-height:104px]');
26
36
  function sidebar() {
27
37
  const { banner, footer, components, collapsible = true, prefetch, defaultOpenLevel, ...rest } = sidebarProps;
@@ -90,4 +100,11 @@ function NavbarLinkItem({ item, ...props }) {
90
100
  return item.children;
91
101
  return (_jsx(BaseLinkItem, { item: item, ...props, children: item.text }));
92
102
  }
103
+ function SidebarLinkItem({ item, ...props }) {
104
+ if (item.type === 'menu')
105
+ return (_jsxs(SidebarFolder, { ...props, 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(SidebarLinkItem, { item: child }, i))) })] }));
106
+ if (item.type === 'custom')
107
+ return _jsx("div", { ...props, children: item.children });
108
+ return (_jsx(SidebarItem, { href: item.url, icon: item.icon, external: item.external, ...props, children: item.text }));
109
+ }
93
110
  export { Navbar, NavbarSidebarTrigger };
@@ -0,0 +1,6 @@
1
+ import type { ComponentProps } from 'react';
2
+ import type { BaseLinkType } from '../../layouts/shared/index.js';
3
+ export declare function BaseLinkItem({ ref, item, ...props }: Omit<ComponentProps<'a'>, 'href'> & {
4
+ item: BaseLinkType;
5
+ }): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/layouts/shared/client.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAI5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,wBAAgB,YAAY,CAAC,EAC3B,GAAG,EACH,IAAI,EACJ,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,2CAkB5D"}
@@ -1,14 +1,12 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import Link from 'fumadocs-core/link';
4
3
  import { usePathname } from 'fumadocs-core/framework';
5
- import { forwardRef, } from 'react';
6
- import { isActive } from '../utils/is-active.js';
7
- export const BaseLinkItem = forwardRef(({ item, ...props }, ref) => {
4
+ import { isActive } from '../../utils/is-active.js';
5
+ import Link from 'fumadocs-core/link';
6
+ export function BaseLinkItem({ ref, item, ...props }) {
8
7
  const pathname = usePathname();
9
8
  const activeType = item.active ?? 'url';
10
9
  const active = activeType !== 'none' &&
11
10
  isActive(item.url, pathname, activeType === 'nested-url');
12
11
  return (_jsx(Link, { ref: ref, href: item.url, external: item.external, ...props, "data-active": active, children: props.children }));
13
- });
14
- BaseLinkItem.displayName = 'BaseLinkItem';
12
+ }
@@ -0,0 +1,129 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ import type { NavProviderProps } from '../../contexts/layout.js';
3
+ import type { I18nConfig } from 'fumadocs-core/i18n';
4
+ export interface NavOptions extends NavProviderProps {
5
+ enabled: boolean;
6
+ component: ReactNode;
7
+ title?: ReactNode;
8
+ /**
9
+ * Redirect url of title
10
+ * @defaultValue '/'
11
+ */
12
+ url?: string;
13
+ children?: ReactNode;
14
+ }
15
+ export interface BaseLayoutProps {
16
+ themeSwitch?: {
17
+ enabled?: boolean;
18
+ component?: ReactNode;
19
+ mode?: 'light-dark' | 'light-dark-system';
20
+ };
21
+ searchToggle?: Partial<{
22
+ enabled: boolean;
23
+ components: Partial<{
24
+ sm: ReactNode;
25
+ lg: ReactNode;
26
+ }>;
27
+ }>;
28
+ /**
29
+ * Remove theme switcher component
30
+ *
31
+ * @deprecated Use `themeSwitch.enabled` instead.
32
+ */
33
+ disableThemeSwitch?: boolean;
34
+ /**
35
+ * I18n options
36
+ *
37
+ * @defaultValue false
38
+ */
39
+ i18n?: boolean | I18nConfig;
40
+ /**
41
+ * GitHub url
42
+ */
43
+ githubUrl?: string;
44
+ links?: LinkItemType[];
45
+ /**
46
+ * Replace or disable navbar
47
+ */
48
+ nav?: Partial<NavOptions>;
49
+ children?: ReactNode;
50
+ }
51
+ interface BaseItem {
52
+ /**
53
+ * Restrict where the item is displayed
54
+ *
55
+ * @defaultValue 'all'
56
+ */
57
+ on?: 'menu' | 'nav' | 'all';
58
+ }
59
+ export interface BaseLinkType extends BaseItem {
60
+ url: string;
61
+ /**
62
+ * When the item is marked as active
63
+ *
64
+ * @defaultValue 'url'
65
+ */
66
+ active?: 'url' | 'nested-url' | 'none';
67
+ external?: boolean;
68
+ }
69
+ export interface MainItemType extends BaseLinkType {
70
+ type?: 'main';
71
+ icon?: ReactNode;
72
+ text: ReactNode;
73
+ description?: ReactNode;
74
+ }
75
+ export interface IconItemType extends BaseLinkType {
76
+ type: 'icon';
77
+ /**
78
+ * `aria-label` of icon button
79
+ */
80
+ label?: string;
81
+ icon: ReactNode;
82
+ text: ReactNode;
83
+ /**
84
+ * @defaultValue true
85
+ */
86
+ secondary?: boolean;
87
+ }
88
+ export interface ButtonItemType extends BaseLinkType {
89
+ type: 'button';
90
+ icon?: ReactNode;
91
+ text: ReactNode;
92
+ /**
93
+ * @defaultValue false
94
+ */
95
+ secondary?: boolean;
96
+ }
97
+ export interface MenuItemType extends BaseItem {
98
+ type: 'menu';
99
+ icon?: ReactNode;
100
+ text: ReactNode;
101
+ url?: string;
102
+ items: ((MainItemType & {
103
+ /**
104
+ * Options when displayed on navigation menu
105
+ */
106
+ menu?: HTMLAttributes<HTMLElement> & {
107
+ banner?: ReactNode;
108
+ };
109
+ }) | CustomItemType)[];
110
+ /**
111
+ * @defaultValue false
112
+ */
113
+ secondary?: boolean;
114
+ }
115
+ export interface CustomItemType extends BaseItem {
116
+ type: 'custom';
117
+ /**
118
+ * @defaultValue false
119
+ */
120
+ secondary?: boolean;
121
+ children: ReactNode;
122
+ }
123
+ export type LinkItemType = MainItemType | IconItemType | ButtonItemType | MenuItemType | CustomItemType;
124
+ /**
125
+ * Get Links Items with shortcuts
126
+ */
127
+ export declare function getLinks(links?: LinkItemType[], githubUrl?: string): LinkItemType[];
128
+ export { BaseLinkItem } from './client.js';
129
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layouts/shared/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,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,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,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,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,cAAc,CACjB,EAAE,CAAC;IAEJ;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,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,cAAc,GACd,YAAY,GACZ,cAAc,CAAC;AAEnB;;GAEG;AACH,wBAAgB,QAAQ,CACtB,KAAK,GAAE,YAAY,EAAO,EAC1B,SAAS,CAAC,EAAE,MAAM,GACjB,YAAY,EAAE,CAqBhB;AAED,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC"}
@@ -18,3 +18,4 @@ export function getLinks(links = [], githubUrl) {
18
18
  ];
19
19
  return result;
20
20
  }
21
+ export { BaseLinkItem } from './client.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fumadocs-ui",
3
- "version": "15.7.1",
3
+ "version": "15.7.2",
4
4
  "description": "The framework for building a documentation website in Next.js",
5
5
  "keywords": [
6
6
  "NextJs",
@@ -53,12 +53,12 @@
53
53
  "types": "./dist/layouts/notebook/client.d.ts"
54
54
  },
55
55
  "./layouts/links": {
56
- "import": "./dist/layouts/links.js",
57
- "types": "./dist/layouts/links.d.ts"
56
+ "import": "./dist/layouts/shared/index.js",
57
+ "types": "./dist/layouts/shared/index.d.ts"
58
58
  },
59
59
  "./layouts/shared": {
60
- "import": "./dist/layouts/shared.js",
61
- "types": "./dist/layouts/shared.d.ts"
60
+ "import": "./dist/layouts/shared/index.js",
61
+ "types": "./dist/layouts/shared/index.d.ts"
62
62
  },
63
63
  "./page": {
64
64
  "node": "./dist/page.server.js",
@@ -121,21 +121,21 @@
121
121
  "react-medium-image-zoom": "^5.3.0",
122
122
  "scroll-into-view-if-needed": "^3.1.0",
123
123
  "tailwind-merge": "^3.3.1",
124
- "fumadocs-core": "15.7.1"
124
+ "fumadocs-core": "15.7.2"
125
125
  },
126
126
  "devDependencies": {
127
127
  "@next/eslint-plugin-next": "^15.5.0",
128
128
  "@tailwindcss/cli": "^4.1.12",
129
129
  "@types/lodash.merge": "^4.6.9",
130
- "@types/react": "^19.1.10",
130
+ "@types/react": "^19.1.11",
131
131
  "@types/react-dom": "^19.1.7",
132
132
  "next": "15.5.0",
133
133
  "tailwindcss": "^4.1.12",
134
134
  "tsc-alias": "^1.8.16",
135
+ "@fumadocs/cli": "1.0.0",
135
136
  "eslint-config-custom": "0.0.0",
136
- "tsconfig": "0.0.0",
137
- "fumadocs-core": "15.7.1",
138
- "@fumadocs/cli": "1.0.0"
137
+ "fumadocs-core": "15.7.2",
138
+ "tsconfig": "0.0.0"
139
139
  },
140
140
  "peerDependencies": {
141
141
  "@types/react": "*",
@@ -1,27 +0,0 @@
1
- import type { LinkItemType } from '../../layouts/links.js';
2
- import { type SidebarComponents, type SidebarProps } from '../../components/layout/sidebar.js';
3
- import type { PageTree } from 'fumadocs-core/server';
4
- import type { ReactNode } from 'react';
5
- import type { Option } from '../../components/layout/root-toggle.js';
6
- import { type GetSidebarTabsOptions } from '../../utils/get-sidebar-tabs.js';
7
- export interface SidebarOptions extends Pick<SidebarProps, 'defaultOpenLevel' | 'prefetch'> {
8
- components?: Partial<SidebarComponents>;
9
- /**
10
- * Root Toggle options
11
- */
12
- tabs?: Option[] | GetSidebarTabsOptions | false;
13
- banner?: ReactNode;
14
- footer?: ReactNode;
15
- /**
16
- * Support collapsing the sidebar on desktop mode
17
- *
18
- * @defaultValue true
19
- */
20
- collapsible?: boolean;
21
- }
22
- export declare function SidebarLinkItem({ item, ...props }: {
23
- item: LinkItemType;
24
- className?: string;
25
- }): import("react/jsx-runtime").JSX.Element;
26
- export declare function getSidebarTabsFromOptions(options: SidebarOptions['tabs'], tree: PageTree.Root): Option[] | undefined;
27
- //# sourceMappingURL=shared.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/layouts/docs/shared.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EACL,KAAK,iBAAiB,EAMtB,KAAK,YAAY,EAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,cACf,SAAQ,IAAI,CAAC,YAAY,EAAE,kBAAkB,GAAG,UAAU,CAAC;IAC3D,UAAU,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAExC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,qBAAqB,GAAG,KAAK,CAAC;IAEhD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,GAAG,KAAK,EACT,EAAE;IACD,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CAmCA;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,EAC/B,IAAI,EAAE,QAAQ,CAAC,IAAI,wBASpB"}
@@ -1,21 +0,0 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
- import { SidebarFolder, SidebarFolderContent, SidebarFolderLink, SidebarFolderTrigger, SidebarItem, } from '../../components/layout/sidebar.js';
3
- import { getSidebarTabs, } from '../../utils/get-sidebar-tabs.js';
4
- export function SidebarLinkItem({ item, ...props }) {
5
- if (item.type === 'menu')
6
- return (_jsxs(SidebarFolder, { ...props, 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(SidebarLinkItem, { item: child }, i))) })] }));
7
- if (item.type === 'custom')
8
- return _jsx("div", { ...props, children: item.children });
9
- return (_jsx(SidebarItem, { href: item.url, icon: item.icon, external: item.external, ...props, children: item.text }));
10
- }
11
- export function getSidebarTabsFromOptions(options, tree) {
12
- if (Array.isArray(options)) {
13
- return options;
14
- }
15
- else if (typeof options === 'object') {
16
- return getSidebarTabs(tree, options);
17
- }
18
- else if (options !== false) {
19
- return getSidebarTabs(tree);
20
- }
21
- }
@@ -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,57 +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
- //# 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;AAC1D,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"}