fumadocs-ui 16.2.1 → 16.2.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.
- package/dist/components/sidebar/base.d.ts +12 -4
- package/dist/components/sidebar/base.d.ts.map +1 -1
- package/dist/components/sidebar/base.js +19 -11
- package/dist/components/sidebar/page-tree.js +1 -1
- package/dist/components/sidebar/{tabs.d.ts → tabs/dropdown.d.ts} +3 -3
- package/dist/components/sidebar/tabs/dropdown.d.ts.map +1 -0
- package/dist/components/sidebar/{tabs.js → tabs/dropdown.js} +6 -6
- package/dist/{utils/get-sidebar-tabs.d.ts → components/sidebar/tabs/index.d.ts} +1 -1
- package/dist/components/sidebar/tabs/index.d.ts.map +1 -0
- package/dist/components/tabs.d.ts.map +1 -1
- package/dist/layouts/docs/client.d.ts +1 -1
- package/dist/layouts/docs/client.d.ts.map +1 -1
- package/dist/layouts/docs/index.d.ts +2 -2
- package/dist/layouts/docs/index.d.ts.map +1 -1
- package/dist/layouts/docs/index.js +4 -4
- package/dist/layouts/docs/page/client.d.ts.map +1 -1
- package/dist/layouts/docs/sidebar.d.ts.map +1 -1
- package/dist/layouts/docs/sidebar.js +5 -4
- package/dist/layouts/notebook/client.d.ts +1 -1
- package/dist/layouts/notebook/client.d.ts.map +1 -1
- package/dist/layouts/notebook/client.js +42 -7
- package/dist/layouts/notebook/index.d.ts +2 -2
- package/dist/layouts/notebook/index.d.ts.map +1 -1
- package/dist/layouts/notebook/index.js +8 -8
- package/dist/layouts/notebook/page/client.d.ts.map +1 -1
- package/dist/layouts/notebook/sidebar.d.ts.map +1 -1
- package/dist/layouts/notebook/sidebar.js +5 -4
- package/dist/layouts/shared/search-toggle.d.ts.map +1 -1
- package/dist/page.d.ts.map +1 -1
- package/dist/provider/base.d.ts.map +1 -1
- package/dist/utils/is-active.d.ts +1 -1
- package/dist/utils/is-active.d.ts.map +1 -1
- package/package.json +11 -7
- package/dist/components/sidebar/tabs.d.ts.map +0 -1
- package/dist/utils/get-sidebar-tabs.d.ts.map +0 -1
- /package/dist/{utils/get-sidebar-tabs.js → components/sidebar/tabs/index.js} +0 -0
|
@@ -35,6 +35,12 @@ type Mode = 'drawer' | 'full';
|
|
|
35
35
|
declare const SidebarContext: import("react").Context<SidebarContext | null>;
|
|
36
36
|
export declare function SidebarProvider({ defaultOpenLevel, prefetch, children, }: SidebarProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
37
37
|
export declare function useSidebar(): SidebarContext;
|
|
38
|
+
export declare function useFolder(): {
|
|
39
|
+
open: boolean;
|
|
40
|
+
setOpen: React.Dispatch<React.SetStateAction<boolean>>;
|
|
41
|
+
depth: number;
|
|
42
|
+
collapsible: boolean;
|
|
43
|
+
} | null;
|
|
38
44
|
export declare function useFolderDepth(): number;
|
|
39
45
|
export declare function SidebarContent({ children, }: {
|
|
40
46
|
children: (state: {
|
|
@@ -52,11 +58,13 @@ export declare function SidebarSeparator(props: ComponentProps<'p'>): import("re
|
|
|
52
58
|
export declare function SidebarItem({ icon, children, ...props }: LinkProps & {
|
|
53
59
|
icon?: ReactNode;
|
|
54
60
|
}): import("react/jsx-runtime").JSX.Element;
|
|
55
|
-
export declare function SidebarFolder({ defaultOpen:
|
|
56
|
-
|
|
61
|
+
export declare function SidebarFolder({ defaultOpen: defaultOpenProp, collapsible, active, children, ...props }: ComponentProps<'div'> & {
|
|
62
|
+
active?: boolean;
|
|
63
|
+
defaultOpen?: boolean;
|
|
64
|
+
collapsible?: boolean;
|
|
57
65
|
}): import("react/jsx-runtime").JSX.Element;
|
|
58
|
-
export declare function SidebarFolderTrigger(props: CollapsibleTriggerProps): import("react/jsx-runtime").JSX.Element;
|
|
59
|
-
export declare function SidebarFolderLink(props: LinkProps): import("react/jsx-runtime").JSX.Element;
|
|
66
|
+
export declare function SidebarFolderTrigger({ children, ...props }: CollapsibleTriggerProps): import("react/jsx-runtime").JSX.Element;
|
|
67
|
+
export declare function SidebarFolderLink({ children, ...props }: LinkProps): import("react/jsx-runtime").JSX.Element;
|
|
60
68
|
export declare function SidebarFolderContent(props: CollapsibleContentProps): import("react/jsx-runtime").JSX.Element;
|
|
61
69
|
export declare function SidebarTrigger({ children, ...props }: ComponentProps<'button'>): import("react/jsx-runtime").JSX.Element;
|
|
62
70
|
export declare function SidebarCollapseTrigger(props: ComponentProps<'button'>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/base.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,SAAS,EAMf,MAAM,OAAO,CAAC;AACf,OAAa,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAU1D,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EACV,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,6BAA6B,CAAC;AAMrC,UAAU,cAAc;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACvD,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IAE5D;;OAEG;IACH,eAAe,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,KAAK,IAAI,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE9B,QAAA,MAAM,cAAc,gDAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/base.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,SAAS,EAMf,MAAM,OAAO,CAAC;AACf,OAAa,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAU1D,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EACV,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,6BAA6B,CAAC;AAMrC,UAAU,cAAc;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACvD,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IAE5D;;OAEG;IACH,eAAe,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,KAAK,IAAI,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE9B,QAAA,MAAM,cAAc,gDAA6C,CAAC;AASlE,wBAAgB,eAAe,CAAC,EAC9B,gBAAoB,EACpB,QAAe,EACf,QAAQ,GACT,EAAE,oBAAoB,2CAiCtB;AAED,wBAAgB,UAAU,IAAI,cAAc,CAQ3C;AAED,wBAAgB,SAAS;UAvDjB,OAAO;aACJ,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;WAC/C,MAAM;iBACA,OAAO;SAsDrB;AAED,wBAAgB,cAAc,WAE7B;AAED,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,CAAC,KAAK,EAAE;QAChB,GAAG,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;QACnC,SAAS,EAAE,OAAO,CAAC;QACnB,OAAO,EAAE,OAAO,CAAC;QACjB,cAAc,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;QAC9C,cAAc,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;KAC/C,KAAK,SAAS,CAAC;CACjB,aA6CA;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,uDAahE;AAED,wBAAgB,oBAAoB,CAAC,EACnC,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,CAAC,uDAmBzB;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,2CAgBrD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,2CAc1D;AAED,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,SAAS,GAAG;IACb,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB,2CAeA;AAED,wBAAgB,aAAa,CAAC,EAC5B,WAAW,EAAE,eAAe,EAC5B,WAAkB,EAClB,MAAc,EACd,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,2CA8BA;AAED,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,uBAAuB,2CAgBzB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,SAAS,2CAuClE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,uBAAuB,2CAElE;AAED,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,QAAQ,CAAC,2CAY1B;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,CAAC,QAAQ,CAAC,2CAgBrE"}
|
|
@@ -43,6 +43,9 @@ export function useSidebar() {
|
|
|
43
43
|
throw new Error('Missing SidebarContext, make sure you have wrapped the component in <DocsLayout /> and the context is available.');
|
|
44
44
|
return ctx;
|
|
45
45
|
}
|
|
46
|
+
export function useFolder() {
|
|
47
|
+
return use(FolderContext);
|
|
48
|
+
}
|
|
46
49
|
export function useFolderDepth() {
|
|
47
50
|
return use(FolderContext)?.depth ?? 0;
|
|
48
51
|
}
|
|
@@ -117,31 +120,36 @@ export function SidebarItem({ icon, children, ...props }) {
|
|
|
117
120
|
useAutoScroll(active, ref);
|
|
118
121
|
return (_jsxs(Link, { ref: ref, "data-active": active, prefetch: prefetch, ...props, children: [icon ?? (props.external ? _jsx(ExternalLink, {}) : null), children] }));
|
|
119
122
|
}
|
|
120
|
-
export function SidebarFolder({ defaultOpen:
|
|
123
|
+
export function SidebarFolder({ defaultOpen: defaultOpenProp, collapsible = true, active = false, children, ...props }) {
|
|
121
124
|
const { defaultOpenLevel } = useSidebar();
|
|
122
125
|
const depth = useFolderDepth() + 1;
|
|
123
|
-
const defaultOpen =
|
|
124
|
-
|
|
125
|
-
|
|
126
|
+
const defaultOpen = collapsible === false ||
|
|
127
|
+
active ||
|
|
128
|
+
(defaultOpenProp ?? defaultOpenLevel >= depth);
|
|
126
129
|
const [open, setOpen] = useState(defaultOpen);
|
|
127
130
|
useOnChange(defaultOpen, (v) => {
|
|
128
131
|
if (v)
|
|
129
132
|
setOpen(v);
|
|
130
133
|
});
|
|
131
|
-
return (_jsx(Collapsible, { open: open, onOpenChange: setOpen, ...props, children: _jsx(FolderContext, { value: useMemo(() => ({ open, setOpen, depth }), [depth, open]), children:
|
|
134
|
+
return (_jsx(Collapsible, { open: open, onOpenChange: setOpen, disabled: !collapsible, ...props, children: _jsx(FolderContext, { value: useMemo(() => ({ open, setOpen, depth, collapsible }), [collapsible, depth, open]), children: children }) }));
|
|
132
135
|
}
|
|
133
|
-
export function SidebarFolderTrigger(props) {
|
|
134
|
-
const { open } = use(FolderContext);
|
|
135
|
-
|
|
136
|
+
export function SidebarFolderTrigger({ children, ...props }) {
|
|
137
|
+
const { open, collapsible } = use(FolderContext);
|
|
138
|
+
if (collapsible) {
|
|
139
|
+
return (_jsxs(CollapsibleTrigger, { ...props, children: [children, _jsx(ChevronDown, { "data-icon": true, className: cn('ms-auto transition-transform', !open && '-rotate-90') })] }));
|
|
140
|
+
}
|
|
141
|
+
return _jsx("div", { ...props, children: children });
|
|
136
142
|
}
|
|
137
|
-
export function SidebarFolderLink(props) {
|
|
143
|
+
export function SidebarFolderLink({ children, ...props }) {
|
|
138
144
|
const ref = useRef(null);
|
|
139
|
-
const { open, setOpen } = use(FolderContext);
|
|
145
|
+
const { open, setOpen, collapsible } = use(FolderContext);
|
|
140
146
|
const { prefetch } = useSidebar();
|
|
141
147
|
const pathname = usePathname();
|
|
142
148
|
const active = props.href !== undefined && isActive(props.href, pathname, false);
|
|
143
149
|
useAutoScroll(active, ref);
|
|
144
150
|
return (_jsxs(Link, { ref: ref, "data-active": active, onClick: (e) => {
|
|
151
|
+
if (!collapsible)
|
|
152
|
+
return;
|
|
145
153
|
if (e.target instanceof Element &&
|
|
146
154
|
e.target.matches('[data-icon], [data-icon] *')) {
|
|
147
155
|
setOpen(!open);
|
|
@@ -150,7 +158,7 @@ export function SidebarFolderLink(props) {
|
|
|
150
158
|
else {
|
|
151
159
|
setOpen(active ? !open : true);
|
|
152
160
|
}
|
|
153
|
-
}, prefetch: prefetch, ...props, children: [
|
|
161
|
+
}, prefetch: prefetch, ...props, children: [children, collapsible && (_jsx(ChevronDown, { "data-icon": true, className: cn('ms-auto transition-transform', !open && '-rotate-90') }))] }));
|
|
154
162
|
}
|
|
155
163
|
export function SidebarFolderContent(props) {
|
|
156
164
|
return _jsx(CollapsibleContent, { ...props, children: props.children });
|
|
@@ -4,7 +4,7 @@ import { useMemo, Fragment } from 'react';
|
|
|
4
4
|
export function createPageTreeRenderer({ SidebarFolder, SidebarFolderContent, SidebarFolderLink, SidebarFolderTrigger, SidebarSeparator, SidebarItem, }) {
|
|
5
5
|
function PageTreeFolder({ item, children, }) {
|
|
6
6
|
const path = useTreePath();
|
|
7
|
-
return (_jsxs(SidebarFolder, {
|
|
7
|
+
return (_jsxs(SidebarFolder, { collapsible: item.collapsible, active: path.includes(item), defaultOpen: item.defaultOpen, children: [item.index ? (_jsxs(SidebarFolderLink, { href: item.index.url, external: item.index.external, children: [item.icon, item.name] })) : (_jsxs(SidebarFolderTrigger, { children: [item.icon, item.name] })), _jsx(SidebarFolderContent, { children: children })] }));
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
10
|
* Render sidebar items from page tree
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { type ComponentProps, type ReactNode } from 'react';
|
|
2
|
-
import type { SidebarTab } from '
|
|
2
|
+
import type { SidebarTab } from './index.js';
|
|
3
3
|
export interface SidebarTabWithProps extends SidebarTab {
|
|
4
4
|
props?: ComponentProps<'a'>;
|
|
5
5
|
}
|
|
6
|
-
export declare function
|
|
6
|
+
export declare function SidebarTabsDropdown({ options, placeholder, ...props }: {
|
|
7
7
|
placeholder?: ReactNode;
|
|
8
8
|
options: SidebarTabWithProps[];
|
|
9
9
|
} & ComponentProps<'button'>): import("react/jsx-runtime").JSX.Element;
|
|
10
|
-
//# sourceMappingURL=
|
|
10
|
+
//# sourceMappingURL=dropdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dropdown.d.ts","sourceRoot":"","sources":["../../../../src/components/sidebar/tabs/dropdown.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAqB,MAAM,OAAO,CAAC;AAW/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC;AAEpC,MAAM,WAAW,mBAAoB,SAAQ,UAAU;IACrD,KAAK,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;CAC7B;AAED,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,WAAW,EACX,GAAG,KAAK,EACT,EAAE;IACD,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC,GAAG,cAAc,CAAC,QAAQ,CAAC,2CAkF3B"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
-
import { Check, ChevronsUpDown } from '
|
|
3
|
+
import { Check, ChevronsUpDown } from '../../../icons.js';
|
|
4
4
|
import { useMemo, useState } from 'react';
|
|
5
5
|
import Link from 'fumadocs-core/link';
|
|
6
6
|
import { usePathname } from 'fumadocs-core/framework';
|
|
7
|
-
import { cn } from '
|
|
8
|
-
import { isTabActive } from '
|
|
9
|
-
import { useSidebar } from '
|
|
10
|
-
import { Popover, PopoverContent, PopoverTrigger, } from '
|
|
11
|
-
export function
|
|
7
|
+
import { cn } from '../../../utils/cn.js';
|
|
8
|
+
import { isTabActive } from '../../../utils/is-active.js';
|
|
9
|
+
import { useSidebar } from '../../../components/sidebar/base.js';
|
|
10
|
+
import { Popover, PopoverContent, PopoverTrigger, } from '../../../components/ui/popover.js';
|
|
11
|
+
export function SidebarTabsDropdown({ options, placeholder, ...props }) {
|
|
12
12
|
const [open, setOpen] = useState(false);
|
|
13
13
|
const { closeOnRedirect } = useSidebar();
|
|
14
14
|
const pathname = usePathname();
|
|
@@ -18,4 +18,4 @@ export interface GetSidebarTabsOptions {
|
|
|
18
18
|
transform?: (option: SidebarTab, node: PageTree.Folder) => SidebarTab | null;
|
|
19
19
|
}
|
|
20
20
|
export declare function getSidebarTabs(tree: PageTree.Root, { transform }?: GetSidebarTabsOptions): SidebarTab[];
|
|
21
|
-
//# sourceMappingURL=
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/sidebar/tabs/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB;;OAEG;IACH,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,KAAK,UAAU,GAAG,IAAI,CAAC;CAC9E;AAeD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,QAAQ,CAAC,IAAI,EACnB,EAAE,SAA4B,EAAE,GAAE,qBAA0B,GAC3D,UAAU,EAAE,CAkCd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../src/components/tabs.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,SAAS,EAMf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAI5C,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../src/components/tabs.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,SAAS,EAMf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAI5C,MAAM,WAAW,SAAU,SAAQ,IAAI,CACrC,cAAc,CAAC,OAAO,QAAQ,CAAC,IAAI,CAAC,EACpC,OAAO,GAAG,eAAe,CAC1B;IACC;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAEjB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAaD,eAAO,MAAM,QAAQ,wKAYnB,CAAC;AAGH,eAAO,MAAM,WAAW,iLAYtB,CAAC;AAGH,wBAAgB,IAAI,CAAC,EACnB,GAAG,EACH,SAAS,EACT,KAAK,EACL,KAAK,EACL,YAAgB,EAChB,YAAmE,EACnE,GAAG,KAAK,EACT,EAAE,SAAS,2CAqCX;AAED,MAAM,WAAW,QAAS,SAAQ,IAAI,CACpC,cAAc,CAAC,OAAO,QAAQ,CAAC,WAAW,CAAC,EAC3C,OAAO,CACR;IACC;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,QAAQ,2CAgBhD;AAED,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,SAAS,EACT,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,QAAQ,CAAC,WAAW,CAAC,2CAc7C"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ComponentProps, type ReactNode } from 'react';
|
|
2
|
-
import type { SidebarTab } from '../../
|
|
2
|
+
import type { SidebarTab } from '../../components/sidebar/tabs/index.js';
|
|
3
3
|
export declare const LayoutContext: import("react").Context<{
|
|
4
4
|
isNavTransparent: boolean;
|
|
5
5
|
} | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/layouts/docs/client.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,SAAS,EAGf,MAAM,OAAO,CAAC;AAMf,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/layouts/docs/client.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,SAAS,EAGf,MAAM,OAAO,CAAC;AAMf,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAG5D,eAAO,MAAM,aAAa;sBACN,OAAO;SACZ,CAAC;AAEhB,wBAAgB,qBAAqB,CAAC,EACpC,kBAA2B,EAC3B,QAAQ,GACT,EAAE;IACD,kBAAkB,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IAC/C,QAAQ,EAAE,SAAS,CAAC;CACrB,2CAkBA;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,cAAc,CAAC,QAAQ,CAAC,2CAQ3D;AAED,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,KAAK,EACL,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,KAAK,CAAC,2CA8BvB;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG;IACzB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB,2CA6BA"}
|
|
@@ -2,9 +2,9 @@ import type * as PageTree from 'fumadocs-core/page-tree';
|
|
|
2
2
|
import { type ComponentProps, type HTMLAttributes, type ReactNode } from 'react';
|
|
3
3
|
import { Sidebar } from './sidebar.js';
|
|
4
4
|
import { type BaseLayoutProps } from '../../layouts/shared/index.js';
|
|
5
|
-
import { type GetSidebarTabsOptions } from '../../
|
|
5
|
+
import { type GetSidebarTabsOptions } from '../../components/sidebar/tabs/index.js';
|
|
6
6
|
import type { SidebarPageTreeComponents } from '../../components/sidebar/page-tree.js';
|
|
7
|
-
import { type SidebarTabWithProps } from '../../components/sidebar/tabs.js';
|
|
7
|
+
import { type SidebarTabWithProps } from '../../components/sidebar/tabs/dropdown.js';
|
|
8
8
|
export interface DocsLayoutProps extends BaseLayoutProps {
|
|
9
9
|
tree: PageTree.Root;
|
|
10
10
|
sidebar?: SidebarOptions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layouts/docs/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACzD,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAIf,OAAO,EACL,OAAO,EAQR,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,KAAK,eAAe,EAAoB,MAAM,kBAAkB,CAAC;AAmB1E,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layouts/docs/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACzD,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAIf,OAAO,EACL,OAAO,EAQR,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,KAAK,eAAe,EAAoB,MAAM,kBAAkB,CAAC;AAmB1E,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,oCAAoC,CAAC;AAE5C,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IAEpB,OAAO,CAAC,EAAE,cAAc,CAAC;IAEzB,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAEzB;;OAEG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;CACjD;AAED,UAAU,cACR,SACE,cAAc,CAAC,OAAO,CAAC,EACvB,IAAI,CAAC,cAAc,CAAC,OAAO,OAAO,CAAC,EAAE,kBAAkB,GAAG,UAAU,CAAC;IACvE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAEhD;;OAEG;IACH,IAAI,CAAC,EAAE,mBAAmB,EAAE,GAAG,qBAAqB,GAAG,KAAK,CAAC;IAE7D,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,gBAAgB,EAChB,QAAQ,EACR,GAAG,YAAY,EACX,EACN,YAAiB,EACjB,WAAgB,EAChB,OAAgB,EAChB,IAAY,EACZ,QAAQ,EACR,IAAI,EACJ,GAAG,KAAK,EACT,EAAE,eAAe,2CA0NjB"}
|
|
@@ -12,8 +12,8 @@ import { TreeContextProvider } from '../../contexts/tree.js';
|
|
|
12
12
|
import { ThemeToggle } from '../shared/theme-toggle.js';
|
|
13
13
|
import Link from 'fumadocs-core/link';
|
|
14
14
|
import { LargeSearchToggle, SearchToggle, } from '../../layouts/shared/search-toggle.js';
|
|
15
|
-
import { getSidebarTabs, } from '../../
|
|
16
|
-
import {
|
|
15
|
+
import { getSidebarTabs, } from '../../components/sidebar/tabs/index.js';
|
|
16
|
+
import { SidebarTabsDropdown, } from '../../components/sidebar/tabs/dropdown.js';
|
|
17
17
|
export function DocsLayout({ nav: { transparentMode, ...nav } = {}, sidebar: { tabs: sidebarTabs, enabled: sidebarEnabled = true, defaultOpenLevel, prefetch, ...sidebarProps } = {}, searchToggle = {}, themeSwitch = {}, tabMode = 'auto', i18n = false, children, tree, ...props }) {
|
|
18
18
|
const tabs = useMemo(() => {
|
|
19
19
|
if (Array.isArray(sidebarTabs)) {
|
|
@@ -41,7 +41,7 @@ export function DocsLayout({ nav: { transparentMode, ...nav } = {}, sidebar: { t
|
|
|
41
41
|
size: 'icon-sm',
|
|
42
42
|
className: 'mb-auto text-fd-muted-foreground',
|
|
43
43
|
})), children: _jsx(SidebarIcon, {}) }))] }), searchToggle.enabled !== false &&
|
|
44
|
-
(searchToggle.components?.lg ?? (_jsx(LargeSearchToggle, { hideIfDisabled: true }))), tabs.length > 0 && tabMode === 'auto' && (_jsx(
|
|
44
|
+
(searchToggle.components?.lg ?? (_jsx(LargeSearchToggle, { hideIfDisabled: true }))), tabs.length > 0 && tabMode === 'auto' && (_jsx(SidebarTabsDropdown, { options: tabs })), banner] }), viewport, (i18n ||
|
|
45
45
|
iconLinks.length > 0 ||
|
|
46
46
|
themeSwitch?.enabled !== false ||
|
|
47
47
|
footer) && (_jsxs("div", { className: "flex flex-col border-t p-4 pt-2 empty:hidden", children: [_jsxs("div", { className: "flex text-fd-muted-foreground items-center empty:hidden", children: [i18n && (_jsx(LanguageToggle, { children: _jsx(Languages, { className: "size-4.5" }) })), iconLinks.map((item, i) => (_jsx(LinkItem, { item: item, className: cn(buttonVariants({ size: 'icon-sm', color: 'ghost' })), "aria-label": item.label, children: item.icon }, i))), themeSwitch.enabled !== false &&
|
|
@@ -54,7 +54,7 @@ export function DocsLayout({ nav: { transparentMode, ...nav } = {}, sidebar: { t
|
|
|
54
54
|
color: 'ghost',
|
|
55
55
|
size: 'icon-sm',
|
|
56
56
|
className: 'p-2',
|
|
57
|
-
})), children: _jsx(SidebarIcon, {}) })] }), tabs.length > 0 && _jsx(
|
|
57
|
+
})), children: _jsx(SidebarIcon, {}) })] }), tabs.length > 0 && _jsx(SidebarTabsDropdown, { options: tabs }), banner] }), viewport, _jsx("div", { className: "flex flex-col border-t p-4 pt-2 empty:hidden", children: footer })] })] }));
|
|
58
58
|
}
|
|
59
59
|
return (_jsx(TreeContextProvider, { tree: tree, children: _jsx(LayoutContextProvider, { navTransparentMode: transparentMode, children: _jsx(Sidebar, { defaultOpenLevel: defaultOpenLevel, prefetch: prefetch, children: _jsxs(LayoutBody, { ...props.containerProps, children: [nav.enabled !== false &&
|
|
60
60
|
(nav.component ?? (_jsxs(LayoutHeader, { id: "nd-subnav", className: "[grid-area:header] sticky top-(--fd-docs-row-1) z-30 flex items-center ps-4 pe-2.5 border-b transition-colors backdrop-blur-sm h-(--fd-header-height) md:hidden max-md:layout:[--fd-header-height:--spacing(14)] data-[transparent=false]:bg-fd-background/80", children: [_jsx(Link, { href: nav.url ?? '/', className: "inline-flex items-center gap-2.5 font-semibold", children: nav.title }), _jsx("div", { className: "flex-1", children: nav.children }), searchToggle.enabled !== false &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/layouts/docs/page/client.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,cAAc,EASpB,MAAM,OAAO,CAAC;AAMf,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAiBlC,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACR,EAAE,cAAc,CAAC,KAAK,CAAC,2CAqDvB;AAED,wBAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,QAAQ,CAAC,2CAqD1B;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/layouts/docs/page/client.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,cAAc,EASpB,MAAM,OAAO,CAAC;AAMf,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAiBlC,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACR,EAAE,cAAc,CAAC,KAAK,CAAC,2CAqDvB;AAED,wBAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,QAAQ,CAAC,2CAqD1B;AA8DD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,2CAUjE;AAED,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EAAE,KAAK,EACX,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,2CAiBxD;AAED,KAAK,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,KAAK,CAAC,CAAC;AAChE,MAAM,WAAW,WAAY,SAAQ,cAAc,CAAC,KAAK,CAAC;IACxD;;OAEG;IACH,KAAK,CAAC,EAAE;QACN,QAAQ,CAAC,EAAE,IAAI,CAAC;QAChB,IAAI,CAAC,EAAE,IAAI,CAAC;KACb,CAAC;CACH;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,WAAW,2CA+B1D;AA8BD,MAAM,MAAM,eAAe,GAAG,iBAAiB,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAExE,wBAAgB,cAAc,CAAC,EAC7B,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,GAAG,KAAK,EACT,EAAE,eAAe,kDA6CjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/layouts/docs/sidebar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,2BAA2B,CAAC;AAElD,OAAO,EAAU,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/layouts/docs/sidebar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,2BAA2B,CAAC;AAElD,OAAO,EAAU,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AA6BpD,eAAO,MACY,OAAO,+BACxB,aAAa,6BACb,sBAAsB,sCACtB,eAAe,+BACf,cAAc,4BACR,CAAC;AAET,wBAAgB,cAAc,CAAC,EAC7B,GAAG,EAAE,OAAO,EACZ,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,CAAC,2CA+DzB;AAED,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,IAAI,CAAC,oBAAoB,CAAC,2CAelD;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACT,KAAK,EACL,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,GAAG,CAAC,2CAerB;AAED,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,KAAK,EACL,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,2CAkBzC;AAED,wBAAgB,oBAAoB,CAAC,EACnC,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,IAAI,CAAC,oBAAoB,CAAC,2CAmBlD;AAED,wBAAgB,iBAAiB,CAAC,EAChC,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,IAAI,CAAC,iBAAiB,CAAC,2CAmB/C;AAED,wBAAgB,oBAAoB,CAAC,EACnC,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,IAAI,CAAC,oBAAoB,CAAC,2CAgBlD;AAED,eAAO,MAAM,eAAe,sIAO1B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;6CAM1B,CAAC"}
|
|
@@ -10,10 +10,11 @@ import { buttonVariants } from '../../components/ui/button.js';
|
|
|
10
10
|
import { SearchToggle } from '../../layouts/shared/search-toggle.js';
|
|
11
11
|
import { Sidebar as SidebarIcon } from '../../icons.js';
|
|
12
12
|
import { mergeRefs } from '../../utils/merge-refs.js';
|
|
13
|
-
const itemVariants = cva('relative flex flex-row items-center gap-2 rounded-lg p-2 text-start text-fd-muted-foreground wrap-anywhere
|
|
13
|
+
const itemVariants = cva('relative flex flex-row items-center gap-2 rounded-lg p-2 text-start text-fd-muted-foreground wrap-anywhere [&_svg]:size-4 [&_svg]:shrink-0', {
|
|
14
14
|
variants: {
|
|
15
15
|
variant: {
|
|
16
|
-
link: 'data-[active=true]:bg-fd-primary/10 data-[active=true]:text-fd-primary data-[active=true]:hover:transition-colors',
|
|
16
|
+
link: 'transition-colors hover:bg-fd-accent/50 hover:text-fd-accent-foreground/80 hover:transition-none data-[active=true]:bg-fd-primary/10 data-[active=true]:text-fd-primary data-[active=true]:hover:transition-colors',
|
|
17
|
+
button: 'transition-colors hover:bg-fd-accent/50 hover:text-fd-accent-foreground/80 hover:transition-none',
|
|
17
18
|
},
|
|
18
19
|
highlight: {
|
|
19
20
|
true: "data-[active=true]:before:content-[''] data-[active=true]:before:bg-fd-primary data-[active=true]:before:absolute data-[active=true]:before:w-px data-[active=true]:before:inset-y-2.5 data-[active=true]:before:start-2.5",
|
|
@@ -58,8 +59,8 @@ export function SidebarItem({ className, style, children, ...props }) {
|
|
|
58
59
|
}, ...props, children: children }));
|
|
59
60
|
}
|
|
60
61
|
export function SidebarFolderTrigger({ className, style, ...props }) {
|
|
61
|
-
const depth = Base.
|
|
62
|
-
return (_jsx(Base.SidebarFolderTrigger, { className: cn(itemVariants(), 'w-full', className), style: {
|
|
62
|
+
const { depth, collapsible } = Base.useFolder();
|
|
63
|
+
return (_jsx(Base.SidebarFolderTrigger, { className: cn(itemVariants({ variant: collapsible ? 'button' : null }), 'w-full', className), style: {
|
|
63
64
|
paddingInlineStart: getItemOffset(depth - 1),
|
|
64
65
|
...style,
|
|
65
66
|
}, ...props, children: props.children }));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type ComponentProps, type HTMLAttributes, type ReactNode } from 'react';
|
|
2
2
|
import { type LinkItemType } from '../shared/link-item.js';
|
|
3
|
-
import type { SidebarTabWithProps } from '../../components/sidebar/tabs.js';
|
|
3
|
+
import type { SidebarTabWithProps } from '../../components/sidebar/tabs/dropdown.js';
|
|
4
4
|
export declare const LayoutContext: import("react").Context<(LayoutInfo & {
|
|
5
5
|
isNavTransparent: boolean;
|
|
6
6
|
}) | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/layouts/notebook/client.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,cAAc,EAGnB,KAAK,cAAc,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/layouts/notebook/client.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,cAAc,EAGnB,KAAK,cAAc,EAEnB,KAAK,SAAS,EAKf,MAAM,OAAO,CAAC;AAOf,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAC;AAM7B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAE9E,eAAO,MAAM,aAAa;sBAEF,OAAO;UAGxB,CAAC;AAER,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC9B,OAAO,EAAE,KAAK,GAAG,MAAM,CAAC;CACzB;AAED,wBAAgB,qBAAqB,CAAC,EACpC,kBAA2B,EAC3B,OAAO,EACP,OAAO,EACP,QAAQ,GACT,EAAE,UAAU,GAAG;IACd,kBAAkB,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IAC/C,QAAQ,EAAE,SAAS,CAAC;CACrB,2CAoBA;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,cAAc,CAAC,QAAQ,CAAC,2CAS3D;AAED,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,KAAK,EACL,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,KAAK,CAAC,2CAqCvB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,SAAS,EACT,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG;IACzB,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC,2CAmCA;AAED,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,SAAS,EACT,GAAG,KAAK,EACT,EAAE;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GAAG,cAAc,CAAC,WAAW,CAAC,2UAmBtD"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { cn } from '../../utils/cn.js';
|
|
4
|
-
import { createContext, Fragment, use, useMemo, } from 'react';
|
|
4
|
+
import { createContext, Fragment, use, useMemo, useRef, useState, } from 'react';
|
|
5
5
|
import { useSidebar } from '../../components/sidebar/base.js';
|
|
6
6
|
import { ChevronDown } from '../../icons.js';
|
|
7
7
|
import Link from 'fumadocs-core/link';
|
|
8
8
|
import { usePathname } from 'fumadocs-core/framework';
|
|
9
9
|
import { isTabActive } from '../../utils/is-active.js';
|
|
10
10
|
import { useIsScrollTop } from '../../utils/use-is-scroll-top.js';
|
|
11
|
-
import { LinkItem } from '../shared/link-item.js';
|
|
11
|
+
import { LinkItem, } from '../shared/link-item.js';
|
|
12
12
|
import { Popover, PopoverContent, PopoverTrigger, } from '../../components/ui/popover.js';
|
|
13
13
|
export const LayoutContext = createContext(null);
|
|
14
14
|
export function LayoutContextProvider({ navTransparentMode = 'none', navMode, tabMode, children, }) {
|
|
@@ -59,11 +59,46 @@ export function NavbarLinkItem({ item, className, ...props }) {
|
|
|
59
59
|
if (item.type === 'custom')
|
|
60
60
|
return item.children;
|
|
61
61
|
if (item.type === 'menu') {
|
|
62
|
-
return (
|
|
63
|
-
if (child.type === 'custom')
|
|
64
|
-
return _jsx(Fragment, { children: child.children }, i);
|
|
65
|
-
return (_jsxs(LinkItem, { 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));
|
|
66
|
-
}) })] }));
|
|
62
|
+
return _jsx(NavbarLinkItemMenu, { item: item, className: className, ...props });
|
|
67
63
|
}
|
|
68
64
|
return (_jsx(LinkItem, { item: item, className: cn('text-sm text-fd-muted-foreground transition-colors hover:text-fd-accent-foreground data-[active=true]:text-fd-primary', className), ...props, children: item.text }));
|
|
69
65
|
}
|
|
66
|
+
function NavbarLinkItemMenu({ item, hoverDelay = 50, className, ...props }) {
|
|
67
|
+
const [open, setOpen] = useState(false);
|
|
68
|
+
const timeoutRef = useRef(null);
|
|
69
|
+
const freezeUntil = useRef(null);
|
|
70
|
+
const delaySetOpen = (value) => {
|
|
71
|
+
if (timeoutRef.current) {
|
|
72
|
+
clearTimeout(timeoutRef.current);
|
|
73
|
+
timeoutRef.current = null;
|
|
74
|
+
}
|
|
75
|
+
timeoutRef.current = window.setTimeout(() => {
|
|
76
|
+
setOpen(value);
|
|
77
|
+
freezeUntil.current = Date.now() + 300;
|
|
78
|
+
}, hoverDelay);
|
|
79
|
+
};
|
|
80
|
+
const onPointerEnter = (e) => {
|
|
81
|
+
if (e.pointerType === 'touch')
|
|
82
|
+
return;
|
|
83
|
+
delaySetOpen(true);
|
|
84
|
+
};
|
|
85
|
+
const onPointerLeave = (e) => {
|
|
86
|
+
if (e.pointerType === 'touch')
|
|
87
|
+
return;
|
|
88
|
+
delaySetOpen(false);
|
|
89
|
+
};
|
|
90
|
+
function isTouchDevice() {
|
|
91
|
+
return 'ontouchstart' in window || navigator.maxTouchPoints > 0;
|
|
92
|
+
}
|
|
93
|
+
return (_jsxs(Popover, { open: open, onOpenChange: (value) => {
|
|
94
|
+
if (freezeUntil.current === null || Date.now() >= freezeUntil.current)
|
|
95
|
+
setOpen(value);
|
|
96
|
+
}, children: [_jsxs(PopoverTrigger, { className: cn('inline-flex items-center gap-1.5 p-1 text-sm text-fd-muted-foreground transition-colors has-data-[active=true]:text-fd-primary data-[state=open]:text-fd-accent-foreground focus-visible:outline-none', className), onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, ...props, children: [item.url ? (_jsx(LinkItem, { item: item, children: item.text })) : (item.text), _jsx(ChevronDown, { className: "size-3" })] }), _jsx(PopoverContent, { className: "flex flex-col p-1 text-fd-muted-foreground text-start", onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, children: item.items.map((child, i) => {
|
|
97
|
+
if (child.type === 'custom')
|
|
98
|
+
return _jsx(Fragment, { children: child.children }, i);
|
|
99
|
+
return (_jsxs(LinkItem, { item: child, className: "inline-flex items-center gap-2 rounded-md p-2 transition-colors hover:bg-fd-accent hover:text-fd-accent-foreground data-[active=true]:text-fd-primary [&_svg]:size-4", onClick: () => {
|
|
100
|
+
if (isTouchDevice())
|
|
101
|
+
setOpen(false);
|
|
102
|
+
}, children: [child.icon, child.text] }, i));
|
|
103
|
+
}) })] }));
|
|
104
|
+
}
|
|
@@ -2,9 +2,9 @@ import { type ComponentProps, type FC, type HTMLAttributes, type ReactNode } fro
|
|
|
2
2
|
import { type BaseLayoutProps } from '../../layouts/shared/index.js';
|
|
3
3
|
import { Sidebar } from './sidebar.js';
|
|
4
4
|
import type * as PageTree from 'fumadocs-core/page-tree';
|
|
5
|
-
import { type GetSidebarTabsOptions } from '../../utils/get-sidebar-tabs.js';
|
|
6
5
|
import type { SidebarPageTreeComponents } from '../../components/sidebar/page-tree.js';
|
|
7
|
-
import { type
|
|
6
|
+
import { type GetSidebarTabsOptions } from '../../components/sidebar/tabs/index.js';
|
|
7
|
+
import { type SidebarTabWithProps } from '../../components/sidebar/tabs/dropdown.js';
|
|
8
8
|
export interface DocsLayoutProps extends BaseLayoutProps {
|
|
9
9
|
tree: PageTree.Root;
|
|
10
10
|
tabMode?: 'sidebar' | 'navbar';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layouts/notebook/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,EAAE,EACP,KAAK,cAAc,EACnB,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,KAAK,eAAe,EAAoB,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EACL,OAAO,EAQR,MAAM,WAAW,CAAC;AAOnB,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layouts/notebook/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,EAAE,EACP,KAAK,cAAc,EACnB,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,KAAK,eAAe,EAAoB,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EACL,OAAO,EAQR,MAAM,WAAW,CAAC;AAOnB,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AAczD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,oCAAoC,CAAC;AAE5C,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,SACE,cAAc,CAAC,OAAO,CAAC,EACvB,IAAI,CAAC,cAAc,CAAC,OAAO,OAAO,CAAC,EAAE,kBAAkB,GAAG,UAAU,CAAC;IACvE,UAAU,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAEhD;;OAEG;IACH,IAAI,CAAC,EAAE,mBAAmB,EAAE,GAAG,qBAAqB,GAAG,KAAK,CAAC;IAE7D,MAAM,CAAC,EAAE,SAAS,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/C,MAAM,CAAC,EAAE,SAAS,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IAE/C;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,2CAyNhD"}
|
|
@@ -11,9 +11,9 @@ import { ThemeToggle } from '../../layouts/shared/theme-toggle.js';
|
|
|
11
11
|
import { LayoutBody, LayoutContextProvider, LayoutHeaderTabs, LayoutHeader, NavbarLinkItem, } from '../../layouts/notebook/client.js';
|
|
12
12
|
import Link from 'fumadocs-core/link';
|
|
13
13
|
import { LargeSearchToggle, SearchToggle, } from '../../layouts/shared/search-toggle.js';
|
|
14
|
-
import { getSidebarTabs, } from '../../utils/get-sidebar-tabs.js';
|
|
15
14
|
import { LinkItem } from '../../layouts/shared/link-item.js';
|
|
16
|
-
import {
|
|
15
|
+
import { getSidebarTabs, } from '../../components/sidebar/tabs/index.js';
|
|
16
|
+
import { SidebarTabsDropdown, } from '../../components/sidebar/tabs/dropdown.js';
|
|
17
17
|
export function DocsLayout(props) {
|
|
18
18
|
const { tabMode = 'sidebar', nav = {}, sidebar: { tabs: tabOptions, defaultOpenLevel, prefetch, ...sidebarProps } = {}, i18n = false, themeSwitch = {}, tree, } = props;
|
|
19
19
|
const navMode = nav.mode ?? 'auto';
|
|
@@ -32,21 +32,21 @@ export function DocsLayout(props) {
|
|
|
32
32
|
}, [tabOptions, tree]);
|
|
33
33
|
function sidebar() {
|
|
34
34
|
const { banner, footer, components, collapsible = true, ...rest } = sidebarProps;
|
|
35
|
+
const iconLinks = links.filter((item) => item.type === 'icon');
|
|
35
36
|
const Header = typeof banner === 'function'
|
|
36
37
|
? banner
|
|
37
|
-
: ({ className, ...props }) => (_jsxs("div", { className: cn('flex flex-col gap-3 p-4 pb-2', className), ...props, children: [props.children, banner] }));
|
|
38
|
+
: ({ className, ...props }) => (_jsxs("div", { className: cn('flex flex-col gap-3 p-4 pb-2 empty:hidden', className), ...props, children: [props.children, banner] }));
|
|
38
39
|
const Footer = typeof footer === 'function'
|
|
39
40
|
? footer
|
|
40
|
-
: ({ className, ...props }) => (_jsxs("div", { className: cn('
|
|
41
|
-
const iconLinks = links.filter((item) => item.type === 'icon');
|
|
41
|
+
: ({ className, ...props }) => (_jsxs("div", { className: cn('hidden flex-row text-fd-muted-foreground items-center border-t p-4 pt-2', iconLinks.length > 0 && 'max-lg:flex', className), ...props, children: [props.children, footer] }));
|
|
42
42
|
const viewport = (_jsxs(SidebarViewport, { children: [links
|
|
43
43
|
.filter((item) => item.type !== 'icon')
|
|
44
44
|
.map((item, i, arr) => (_jsx(SidebarLinkItem, { item: item, className: cn('lg:hidden', i === arr.length - 1 && 'mb-4') }, i))), _jsx(SidebarPageTree, { ...components })] }));
|
|
45
|
-
return (_jsxs(_Fragment, { children: [_jsxs(SidebarContent, { ...rest, children: [_jsxs(Header, {
|
|
45
|
+
return (_jsxs(_Fragment, { children: [_jsxs(SidebarContent, { ...rest, children: [_jsxs(Header, { children: [navMode === 'auto' && (_jsxs("div", { className: "flex justify-between", children: [_jsx(Link, { href: nav.url ?? '/', className: "inline-flex items-center gap-2.5 font-medium", children: nav.title }), collapsible && (_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
|
|
46
46
|
color: 'ghost',
|
|
47
47
|
size: 'icon-sm',
|
|
48
48
|
className: 'mt-px mb-auto text-fd-muted-foreground',
|
|
49
|
-
})), children: _jsx(SidebarIcon, {}) }))] })), nav.children, tabs.length > 0 && (_jsx(
|
|
49
|
+
})), children: _jsx(SidebarIcon, {}) }))] })), nav.children, tabs.length > 0 && (_jsx(SidebarTabsDropdown, { options: tabs, className: cn(tabMode === 'navbar' && 'lg:hidden') }))] }), viewport, _jsx(Footer, { children: iconLinks.map((item, i) => (_jsx(LinkItem, { item: item, className: cn(buttonVariants({
|
|
50
50
|
size: 'icon-sm',
|
|
51
51
|
color: 'ghost',
|
|
52
52
|
className: 'lg:hidden',
|
|
@@ -54,7 +54,7 @@ export function DocsLayout(props) {
|
|
|
54
54
|
size: 'icon-sm',
|
|
55
55
|
color: 'ghost',
|
|
56
56
|
className: 'ms-auto text-fd-muted-foreground',
|
|
57
|
-
})), children: _jsx(X, {}) }), tabs.length > 0 && _jsx(
|
|
57
|
+
})), children: _jsx(X, {}) }), tabs.length > 0 && _jsx(SidebarTabsDropdown, { options: tabs })] }), viewport, _jsxs(Footer, { className: cn('hidden flex-row items-center justify-end', (i18n || themeSwitch.enabled !== false) && 'flex', iconLinks.length > 0 && 'max-lg:flex'), children: [iconLinks.map((item, i) => (_jsx(LinkItem, { item: item, className: cn(buttonVariants({
|
|
58
58
|
size: 'icon-sm',
|
|
59
59
|
color: 'ghost',
|
|
60
60
|
}), 'text-fd-muted-foreground lg:hidden', i === iconLinks.length - 1 && 'me-auto'), "aria-label": item.label, children: item.icon }, i))), i18n && (_jsx(LanguageToggle, { children: _jsx(Languages, { className: "size-4.5 text-fd-muted-foreground" }) })), themeSwitch.enabled !== false &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/layouts/notebook/page/client.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,cAAc,EASpB,MAAM,OAAO,CAAC;AAMf,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAiBlC,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACR,EAAE,cAAc,CAAC,KAAK,CAAC,2CAqDvB;AAED,wBAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,QAAQ,CAAC,2CAqD1B;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/layouts/notebook/page/client.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,cAAc,EASpB,MAAM,OAAO,CAAC;AAMf,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAiBlC,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACR,EAAE,cAAc,CAAC,KAAK,CAAC,2CAqDvB;AAED,wBAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,QAAQ,CAAC,2CAqD1B;AA8DD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,2CAUjE;AAED,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EAAE,KAAK,EACX,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,2CAiBxD;AAED,KAAK,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,KAAK,CAAC,CAAC;AAChE,MAAM,WAAW,WAAY,SAAQ,cAAc,CAAC,KAAK,CAAC;IACxD;;OAEG;IACH,KAAK,CAAC,EAAE;QACN,QAAQ,CAAC,EAAE,IAAI,CAAC;QAChB,IAAI,CAAC,EAAE,IAAI,CAAC;KACb,CAAC;CACH;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,WAAW,2CA8B1D;AA8BD,MAAM,MAAM,eAAe,GAAG,iBAAiB,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAExE,wBAAgB,cAAc,CAAC,EAC7B,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,GAAG,KAAK,EACT,EAAE,eAAe,kDA6CjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/layouts/notebook/sidebar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,2BAA2B,CAAC;AAElD,OAAO,EAAE,KAAK,cAAc,EAAe,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/layouts/notebook/sidebar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,2BAA2B,CAAC;AAElD,OAAO,EAAE,KAAK,cAAc,EAAe,MAAM,OAAO,CAAC;AA2BzD,eAAO,MACY,OAAO,+BACxB,aAAa,6BACb,sBAAsB,sCACtB,eAAe,+BACf,cAAc,4BACR,CAAC;AAET,wBAAgB,cAAc,CAAC,EAC7B,GAAG,EAAE,OAAO,EACZ,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,CAAC,2CAgDzB;AAED,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,IAAI,CAAC,oBAAoB,CAAC,2CAelD;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACT,KAAK,EACL,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,GAAG,CAAC,2CAerB;AAED,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,KAAK,EACL,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,2CAkBzC;AAED,wBAAgB,oBAAoB,CAAC,EACnC,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,IAAI,CAAC,oBAAoB,CAAC,2CAmBlD;AAED,wBAAgB,iBAAiB,CAAC,EAChC,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,IAAI,CAAC,iBAAiB,CAAC,2CAmB/C;AAED,wBAAgB,oBAAoB,CAAC,EACnC,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,IAAI,CAAC,oBAAoB,CAAC,2CAgBlD;AACD,eAAO,MAAM,eAAe,sIAO1B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;6CAM1B,CAAC"}
|
|
@@ -8,10 +8,11 @@ import { LayoutContext } from './client.js';
|
|
|
8
8
|
import { createPageTreeRenderer } from '../../components/sidebar/page-tree.js';
|
|
9
9
|
import { createLinkItemRenderer } from '../../components/sidebar/link-item.js';
|
|
10
10
|
import { mergeRefs } from '../../utils/merge-refs.js';
|
|
11
|
-
const itemVariants = cva('relative flex flex-row items-center gap-2 rounded-lg p-2 text-start text-fd-muted-foreground wrap-anywhere
|
|
11
|
+
const itemVariants = cva('relative flex flex-row items-center gap-2 rounded-lg p-2 text-start text-fd-muted-foreground wrap-anywhere [&_svg]:size-4 [&_svg]:shrink-0', {
|
|
12
12
|
variants: {
|
|
13
13
|
variant: {
|
|
14
|
-
link: 'data-[active=true]:bg-fd-primary/10 data-[active=true]:text-fd-primary data-[active=true]:hover:transition-colors',
|
|
14
|
+
link: 'transition-colors hover:bg-fd-accent/50 hover:text-fd-accent-foreground/80 hover:transition-none data-[active=true]:bg-fd-primary/10 data-[active=true]:text-fd-primary data-[active=true]:hover:transition-colors',
|
|
15
|
+
button: 'transition-colors hover:bg-fd-accent/50 hover:text-fd-accent-foreground/80 hover:transition-none',
|
|
15
16
|
},
|
|
16
17
|
highlight: {
|
|
17
18
|
true: "data-[active=true]:before:content-[''] data-[active=true]:before:bg-fd-primary data-[active=true]:before:absolute data-[active=true]:before:w-px data-[active=true]:before:inset-y-2.5 data-[active=true]:before:start-2.5",
|
|
@@ -55,8 +56,8 @@ export function SidebarItem({ className, style, children, ...props }) {
|
|
|
55
56
|
}, ...props, children: children }));
|
|
56
57
|
}
|
|
57
58
|
export function SidebarFolderTrigger({ className, style, ...props }) {
|
|
58
|
-
const depth = Base.
|
|
59
|
-
return (_jsx(Base.SidebarFolderTrigger, { className: cn(itemVariants(), 'w-full', className), style: {
|
|
59
|
+
const { depth, collapsible } = Base.useFolder();
|
|
60
|
+
return (_jsx(Base.SidebarFolderTrigger, { className: cn(itemVariants({ variant: collapsible ? 'button' : null }), 'w-full', className), style: {
|
|
60
61
|
paddingInlineStart: getItemOffset(depth - 1),
|
|
61
62
|
...style,
|
|
62
63
|
}, ...props, children: props.children }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-toggle.d.ts","sourceRoot":"","sources":["../../../src/layouts/shared/search-toggle.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAK5C,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,wBAAwB,CAAC;AAE1E,UAAU,iBACR,SAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"search-toggle.d.ts","sourceRoot":"","sources":["../../../src/layouts/shared/search-toggle.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAK5C,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,wBAAwB,CAAC;AAE1E,UAAU,iBACR,SAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,EAAE,WAAW;IAC5D,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,YAAY,CAAC,EAC3B,cAAc,EACd,IAAgB,EAChB,KAAe,EACf,GAAG,KAAK,EACT,EAAE,iBAAiB,kDAuBnB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,cAAc,EACd,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,kDA6BA"}
|
package/dist/page.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../src/page.tsx"],"names":[],"mappings":"AACA,OAAO,EAAO,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AAEjD,OAAO,KAAK,IAAI,MAAM,qBAAqB,CAAC;AAM5C,OAAO,EACL,eAAe,EACf,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,cAAc,GACf,MAAM,qBAAqB,CAAC;AAE7B,UAAU,
|
|
1
|
+
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../src/page.tsx"],"names":[],"mappings":"AACA,OAAO,EAAO,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AAEjD,OAAO,KAAK,IAAI,MAAM,qBAAqB,CAAC;AAM5C,OAAO,EACL,eAAe,EACf,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,cAAc,GACf,MAAM,qBAAqB,CAAC;AAE7B,UAAU,mBAAoB,SAAQ,IAAI,CACxC,cAAc,CAAC,GAAG,CAAC,EACnB,MAAM,GAAG,UAAU,CACpB;IACC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IAEb;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,aAAa;IACvD,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,UAAU,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;CACrC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,2CAYxD;AAED,wBAAgB,QAAQ,CAAC,EACvB,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,aAAa,2CAmBf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/provider/base.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EACL,KAAK,wBAAwB,EAE7B,KAAK,SAAS,EAGf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAkB,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,YAAY,EAClB,MAAM,iBAAiB,CAAC;AAGzB,UAAU,
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/provider/base.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EACL,KAAK,wBAAwB,EAE7B,KAAK,SAAS,EAGf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAkB,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,YAAY,EAClB,MAAM,iBAAiB,CAAC;AAGzB,UAAU,aAAc,SAAQ,IAAI,CAClC,mBAAmB,EACnB,SAAS,GAAG,UAAU,CACvB;IACC,OAAO,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAE5C;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAEpB;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAEhC;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,OAAO,aAAa,CAAC,CAAC,GAAG;QAChE;;;;WAIG;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;IAEF,IAAI,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;IAE3C,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAErC;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAErC;;OAEG;IACH,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IAEvB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAMD,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,GAAW,EACX,KAAU,EACV,MAAM,EACN,IAAI,GACL,EAAE,iBAAiB,2CA4BnB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { SidebarTab } from '../
|
|
1
|
+
import type { SidebarTab } from '../components/sidebar/tabs/index.js';
|
|
2
2
|
export declare function isActive(url: string, pathname: string, nested?: boolean): boolean;
|
|
3
3
|
export declare function isTabActive(tab: SidebarTab, pathname: string): boolean;
|
|
4
4
|
//# sourceMappingURL=is-active.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-active.d.ts","sourceRoot":"","sources":["../../src/utils/is-active.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"is-active.d.ts","sourceRoot":"","sources":["../../src/utils/is-active.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAO5D,wBAAgB,QAAQ,CACtB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,MAAM,UAAO,GACZ,OAAO,CAKT;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,WAI5D"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fumadocs-ui",
|
|
3
|
-
"version": "16.2.
|
|
3
|
+
"version": "16.2.3",
|
|
4
4
|
"description": "The React.js documentation framework",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"NextJs",
|
|
@@ -77,6 +77,10 @@
|
|
|
77
77
|
"import": "./dist/theme/*.js",
|
|
78
78
|
"types": "./dist/theme/*.d.ts"
|
|
79
79
|
},
|
|
80
|
+
"./utils/get-sidebar-tabs": {
|
|
81
|
+
"import": "./dist/components/sidebar/tabs/index.js",
|
|
82
|
+
"types": "./dist/components/sidebar/tabs/index.d.ts"
|
|
83
|
+
},
|
|
80
84
|
"./utils/*": {
|
|
81
85
|
"import": "./dist/utils/*.js",
|
|
82
86
|
"types": "./dist/utils/*.d.ts"
|
|
@@ -104,25 +108,25 @@
|
|
|
104
108
|
"class-variance-authority": "^0.7.1",
|
|
105
109
|
"lodash.merge": "^4.6.2",
|
|
106
110
|
"next-themes": "^0.4.6",
|
|
107
|
-
"postcss-selector-parser": "^7.1.
|
|
111
|
+
"postcss-selector-parser": "^7.1.1",
|
|
108
112
|
"react-medium-image-zoom": "^5.4.0",
|
|
109
113
|
"scroll-into-view-if-needed": "^3.1.0",
|
|
110
114
|
"tailwind-merge": "^3.4.0",
|
|
111
|
-
"fumadocs-core": "16.2.
|
|
115
|
+
"fumadocs-core": "16.2.3"
|
|
112
116
|
},
|
|
113
117
|
"devDependencies": {
|
|
114
|
-
"@next/eslint-plugin-next": "16.0.
|
|
118
|
+
"@next/eslint-plugin-next": "16.0.7",
|
|
115
119
|
"@tailwindcss/cli": "^4.1.17",
|
|
116
120
|
"@types/lodash.merge": "^4.6.9",
|
|
117
121
|
"@types/node": "^24.10.1",
|
|
118
|
-
"@types/react": "^19.2.
|
|
122
|
+
"@types/react": "^19.2.7",
|
|
119
123
|
"@types/react-dom": "^19.2.3",
|
|
120
|
-
"next": "16.0.
|
|
124
|
+
"next": "16.0.7",
|
|
121
125
|
"tailwindcss": "^4.1.17",
|
|
122
126
|
"tsc-alias": "^1.8.16",
|
|
123
127
|
"@fumadocs/cli": "1.1.0",
|
|
124
128
|
"eslint-config-custom": "0.0.0",
|
|
125
|
-
"fumadocs-core": "16.2.
|
|
129
|
+
"fumadocs-core": "16.2.3",
|
|
126
130
|
"tsconfig": "0.0.0"
|
|
127
131
|
},
|
|
128
132
|
"peerDependencies": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/tabs.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAqB,MAAM,OAAO,CAAC;AAW/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,WAAW,mBAAoB,SAAQ,UAAU;IACrD,KAAK,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;CAC7B;AAED,wBAAgB,iBAAiB,CAAC,EAChC,OAAO,EACP,WAAW,EACX,GAAG,KAAK,EACT,EAAE;IACD,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC,GAAG,cAAc,CAAC,QAAQ,CAAC,2CAkF3B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-sidebar-tabs.d.ts","sourceRoot":"","sources":["../../src/utils/get-sidebar-tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB;;OAEG;IACH,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,KAAK,UAAU,GAAG,IAAI,CAAC;CAC9E;AAeD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,QAAQ,CAAC,IAAI,EACnB,EAAE,SAA4B,EAAE,GAAE,qBAA0B,GAC3D,UAAU,EAAE,CAkCd"}
|
|
File without changes
|