fumadocs-ui 15.0.9 → 15.0.11
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/css/preset.css +6 -0
- package/dist/components/layout/nav.d.ts.map +1 -1
- package/dist/components/layout/nav.js +2 -2
- package/dist/components/layout/root-toggle.js +1 -1
- package/dist/components/layout/toc.js +1 -1
- package/dist/components/ui/collapsible.d.ts.map +1 -1
- package/dist/components/ui/collapsible.js +8 -2
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +20 -18
- package/dist/layouts/docs/sidebar.d.ts +1 -1
- package/dist/layouts/docs/sidebar.d.ts.map +1 -1
- package/dist/layouts/docs/sidebar.js +11 -11
- package/dist/layouts/docs.d.ts +1 -1
- package/dist/layouts/docs.d.ts.map +1 -1
- package/dist/layouts/docs.js +6 -12
- package/dist/layouts/notebook.client.js +3 -3
- package/dist/layouts/notebook.d.ts.map +1 -1
- package/dist/layouts/notebook.js +17 -7
- package/dist/page.client.d.ts.map +1 -1
- package/dist/page.client.js +4 -4
- package/dist/page.js +1 -1
- package/dist/style.css +36 -29
- package/package.json +8 -8
package/css/preset.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nav.d.ts","sourceRoot":"","sources":["../../../src/components/layout/nav.tsx"],"names":[],"mappings":"AACA,OAAa,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAEL,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"nav.d.ts","sourceRoot":"","sources":["../../../src/components/layout/nav.tsx"],"names":[],"mappings":"AACA,OAAa,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAEL,KAAK,SAAS,EAKf,MAAM,OAAO,CAAC;AAIf,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,eAAe,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;CAC7C;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,UAAU,cAAc;IACtB,aAAa,EAAE,OAAO,CAAC;CACxB;AAMD,wBAAgB,WAAW,CAAC,EAC1B,eAAwB,EACxB,QAAQ,GACT,EAAE,gBAAgB,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAwB5C;AAED,wBAAgB,MAAM,IAAI,cAAc,CAEvC;AAED,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,2CAevC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import Link from 'fumadocs-core/link';
|
|
4
|
-
import { createContext, useContext, useEffect, useState, } from 'react';
|
|
4
|
+
import { createContext, useContext, useEffect, useMemo, useState, } from 'react';
|
|
5
5
|
import { cn } from '../../utils/cn.js';
|
|
6
6
|
import { useI18n } from '../../contexts/i18n.js';
|
|
7
7
|
const NavContext = createContext({
|
|
@@ -21,7 +21,7 @@ export function NavProvider({ transparentMode = 'none', children, }) {
|
|
|
21
21
|
window.removeEventListener('scroll', listener);
|
|
22
22
|
};
|
|
23
23
|
}, [transparentMode]);
|
|
24
|
-
return (_jsx(NavContext.Provider, { value: { isTransparent: transparent }, children: children }));
|
|
24
|
+
return (_jsx(NavContext.Provider, { value: useMemo(() => ({ isTransparent: transparent }), [transparent]), children: children }));
|
|
25
25
|
}
|
|
26
26
|
export function useNav() {
|
|
27
27
|
return useContext(NavContext);
|
|
@@ -22,7 +22,7 @@ export function RootToggle({ options, placeholder, ...props }) {
|
|
|
22
22
|
setOpen(false);
|
|
23
23
|
};
|
|
24
24
|
const item = selected ? _jsx(Item, { ...selected }) : placeholder;
|
|
25
|
-
return (_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [item ? (_jsxs(PopoverTrigger, { ...props, className: cn('flex flex-row items-center gap-2 rounded-lg ps-2 pe-4 py-1.5 hover:bg-fd-accent/50 hover:text-fd-accent-foreground', props.className), children: [item, _jsx(ChevronsUpDown, { className: "size-4 text-fd-muted-foreground" })] })) : null, _jsx(PopoverContent, { className: "w-(--radix-popover-trigger-width) overflow-hidden p-0", children: options.map((item) => (_jsx(Link, { href: item.url, onClick: onClick, ...item.props, className: cn('flex w-full flex-row items-center gap-2 px-2 py-1.5', selected === item
|
|
25
|
+
return (_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [item ? (_jsxs(PopoverTrigger, { ...props, className: cn('flex flex-row items-center gap-2.5 rounded-lg ps-2 pe-4 py-1.5 hover:bg-fd-accent/50 hover:text-fd-accent-foreground', props.className), children: [item, _jsx(ChevronsUpDown, { className: "size-4 text-fd-muted-foreground" })] })) : null, _jsx(PopoverContent, { className: "w-(--radix-popover-trigger-width) overflow-hidden p-0", children: options.map((item) => (_jsx(Link, { href: item.url, onClick: onClick, ...item.props, className: cn('flex w-full flex-row items-center gap-2 px-2 py-1.5', selected === item
|
|
26
26
|
? 'bg-fd-accent text-fd-accent-foreground'
|
|
27
27
|
: 'hover:bg-fd-accent/50', item.props?.className), children: _jsx(Item, { ...item }) }, item.url))) })] }));
|
|
28
28
|
}
|
|
@@ -48,7 +48,7 @@ export function TocPopoverTrigger({ items, ...props }) {
|
|
|
48
48
|
const current = useMemo(() => {
|
|
49
49
|
return items.find((item) => active === item.url.slice(1))?.title;
|
|
50
50
|
}, [items, active]);
|
|
51
|
-
return (_jsxs(CollapsibleTrigger, { ...props, className: cn('inline-flex items-center text-sm gap-2 text-nowrap px-4 py-2 text-start md:px-6
|
|
51
|
+
return (_jsxs(CollapsibleTrigger, { ...props, className: cn('inline-flex items-center text-sm gap-2 text-nowrap px-4 py-2.5 text-start md:px-6 focus-visible:outline-none', props.className), children: [_jsx(Text, { className: "size-4 shrink-0" }), text.toc, _jsx(ChevronRight, { className: cn('size-4 shrink-0 text-fd-muted-foreground transition-all', !current && 'opacity-0', open ? 'rotate-90' : '-ms-1.5') }), _jsx("span", { className: cn('truncate text-fd-muted-foreground transition-opacity -ms-1.5', (!current || open) && 'opacity-0'), children: current })] }));
|
|
52
52
|
}
|
|
53
53
|
export function TocPopoverContent(props) {
|
|
54
54
|
return (_jsx(CollapsibleContent, { "data-toc-popover": "", className: "flex flex-col max-h-[50vh]", ...props, children: props.children }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collapsible.d.ts","sourceRoot":"","sources":["../../../src/components/ui/collapsible.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"collapsible.d.ts","sourceRoot":"","sources":["../../../src/components/ui/collapsible.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,oBAAoB,MAAM,6BAA6B,CAAC;AAIpE,QAAA,MAAM,WAAW,kIAA4B,CAAC;AAE9C,QAAA,MAAM,kBAAkB,4IAA0C,CAAC;AAEnE,QAAA,MAAM,kBAAkB,sMAwBtB,CAAC;AAKH,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -1,11 +1,17 @@
|
|
|
1
|
+
'use client';
|
|
1
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
3
|
import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
|
|
3
|
-
import { forwardRef } from 'react';
|
|
4
|
+
import { forwardRef, useEffect, useState } from 'react';
|
|
4
5
|
import { cn } from '../../utils/cn.js';
|
|
5
6
|
const Collapsible = CollapsiblePrimitive.Root;
|
|
6
7
|
const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger;
|
|
7
8
|
const CollapsibleContent = forwardRef(({ children, ...props }, ref) => {
|
|
8
|
-
|
|
9
|
+
const [mounted, setMounted] = useState(false);
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
setMounted(true);
|
|
12
|
+
}, []);
|
|
13
|
+
return (_jsx(CollapsiblePrimitive.CollapsibleContent, { ref: ref, ...props, className: cn('overflow-hidden', mounted &&
|
|
14
|
+
'data-[state=closed]:animate-fd-collapsible-up data-[state=open]:animate-fd-collapsible-down', props.className), children: children }));
|
|
9
15
|
});
|
|
10
16
|
CollapsibleContent.displayName =
|
|
11
17
|
CollapsiblePrimitive.CollapsibleContent.displayName;
|
package/dist/i18n.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;AAEhD,OAAO,EACL,KAAK,YAAY,EAEjB,mBAAmB,EACnB,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AAGzB,UAAU,iBAAiB;IACzB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAErC;;OAEG;IACH,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IAEvB;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAE/B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,YAAY,CAAC,EAC3B,OAAY,EACZ,MAAM,EACN,GAAG,KAAK,EACT,EAAE,iBAAiB,2CAuCnB;AAED,OAAO,EAAE,mBAAmB,EAAE,KAAK,YAAY,EAAE,CAAC"}
|
package/dist/i18n.js
CHANGED
|
@@ -1,32 +1,34 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useMemo } from 'react';
|
|
3
4
|
import { useRouter, usePathname } from 'next/navigation';
|
|
4
|
-
import {
|
|
5
|
+
import { I18nContext, defaultTranslations, } from './contexts/i18n.js';
|
|
5
6
|
import { useEffectEvent } from 'fumadocs-core/utils/use-effect-event';
|
|
6
7
|
export function I18nProvider({ locales = [], locale, ...props }) {
|
|
7
|
-
const context = useI18n();
|
|
8
8
|
const router = useRouter();
|
|
9
9
|
const pathname = usePathname();
|
|
10
|
-
const onChange =
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
10
|
+
const onChange = props.onChange ??
|
|
11
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks -- always controlled
|
|
12
|
+
useEffectEvent((value) => {
|
|
13
|
+
const segments = pathname.split('/').filter((v) => v.length > 0);
|
|
14
|
+
// If locale prefix hidden
|
|
15
|
+
if (segments[0] !== locale) {
|
|
16
|
+
segments.unshift(value);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
segments[0] = value;
|
|
20
|
+
}
|
|
21
|
+
router.push(`/${segments.join('/')}`);
|
|
22
|
+
router.refresh();
|
|
23
|
+
});
|
|
24
|
+
return (_jsx(I18nContext.Provider, { value: useMemo(() => ({
|
|
23
25
|
locale,
|
|
24
26
|
locales,
|
|
25
27
|
text: {
|
|
26
|
-
...
|
|
28
|
+
...defaultTranslations,
|
|
27
29
|
...props.translations,
|
|
28
30
|
},
|
|
29
|
-
onChange
|
|
30
|
-
}, children: props.children }));
|
|
31
|
+
onChange,
|
|
32
|
+
}), [locale, locales, onChange, props.translations]), children: props.children }));
|
|
31
33
|
}
|
|
32
34
|
export { defaultTranslations };
|
|
@@ -41,5 +41,5 @@ export declare function SidebarCollapseTrigger(props: ButtonHTMLAttributes<HTMLB
|
|
|
41
41
|
*/
|
|
42
42
|
export declare function SidebarPageTree(props: {
|
|
43
43
|
components?: Partial<SidebarComponents>;
|
|
44
|
-
}):
|
|
44
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
45
45
|
//# sourceMappingURL=sidebar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/layouts/docs/sidebar.tsx"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,oBAAoB,
|
|
1
|
+
{"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/layouts/docs/sidebar.tsx"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,oBAAoB,EAGzB,KAAK,cAAc,EAEnB,KAAK,SAAS,EAMf,MAAM,OAAO,CAAC;AACf,OAAa,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAU1D,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAGnE,OAAO,KAAK,EACV,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,MAAM,WAAW,YAAa,SAAQ,cAAc,CAAC,WAAW,CAAC;IAC/D;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA2BD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,2CAqDrD;AAED,wBAAgB,OAAO,CAAC,EACtB,gBAAoB,EACpB,QAAe,EACf,KAAK,EACL,GAAG,KAAK,EACT,EAAE,YAAY,GAAG;IAAE,KAAK,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAA;CAAE,2CAwC3D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,2CASlE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,2CAYlE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,2CAarD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,CAAC,oBAAoB,CAAC,2CAkB3E;AAED,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,GAAG,KAAK,EACT,EAAE,SAAS,GAAG;IACb,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB,2CAsBA;AAED,wBAAgB,aAAa,CAAC,EAC5B,WAAmB,EACnB,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,2CAgBA;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,uBAAuB,2CAqBlE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,2CAmCjD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,uBAAuB,2CAmBlE;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,2CAiB/C;AAgBD;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE;IACrC,UAAU,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACzC,2CA0DA"}
|
|
@@ -3,7 +3,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import { ChevronDown, ExternalLink, SidebarIcon } from 'lucide-react';
|
|
4
4
|
import * as Base from 'fumadocs-core/sidebar';
|
|
5
5
|
import { usePathname } from 'next/navigation';
|
|
6
|
-
import { createContext, useCallback, useContext, useMemo, useRef, useState, } from 'react';
|
|
6
|
+
import { createContext, Fragment, useCallback, useContext, useMemo, useRef, useState, } from 'react';
|
|
7
7
|
import Link from 'fumadocs-core/link';
|
|
8
8
|
import { useOnChange } from 'fumadocs-core/utils/use-on-change';
|
|
9
9
|
import { cn } from '../../utils/cn.js';
|
|
@@ -68,13 +68,13 @@ export function Sidebar({ defaultOpenLevel = 0, prefetch = true, inner, ...props
|
|
|
68
68
|
}, children: _jsx("div", { ...inner, className: cn('flex size-full max-w-full flex-col pt-2 md:ms-auto md:w-(--fd-sidebar-width) md:border-e md:pt-4', inner?.className), children: props.children }) }) }));
|
|
69
69
|
}
|
|
70
70
|
export function SidebarHeader(props) {
|
|
71
|
-
return (_jsx("div", { ...props, className: cn('flex flex-col gap-2 px-4 empty:hidden
|
|
71
|
+
return (_jsx("div", { ...props, className: cn('flex flex-col gap-2 px-4 empty:hidden', props.className), children: props.children }));
|
|
72
72
|
}
|
|
73
73
|
export function SidebarFooter(props) {
|
|
74
|
-
return (_jsx("div", { ...props, className: cn('flex flex-col border-t px-4 py-3 empty:hidden
|
|
74
|
+
return (_jsx("div", { ...props, className: cn('flex flex-col border-t px-4 py-3 empty:hidden', props.className), children: props.children }));
|
|
75
75
|
}
|
|
76
76
|
export function SidebarViewport(props) {
|
|
77
|
-
return (_jsx(ScrollArea, { ...props, className: cn('h-full', props.className), children: _jsx(ScrollViewport, { className: "p-4
|
|
77
|
+
return (_jsx(ScrollArea, { ...props, className: cn('h-full', props.className), children: _jsx(ScrollViewport, { className: "p-4", style: {
|
|
78
78
|
maskImage: 'linear-gradient(to bottom, transparent, white 12px)',
|
|
79
79
|
}, children: props.children }) }));
|
|
80
80
|
}
|
|
@@ -158,29 +158,29 @@ function useInternalContext() {
|
|
|
158
158
|
*/
|
|
159
159
|
export function SidebarPageTree(props) {
|
|
160
160
|
const { root } = useTreeContext();
|
|
161
|
+
const idRef = useRef(0);
|
|
161
162
|
return useMemo(() => {
|
|
162
163
|
const { Separator, Item, Folder } = props.components ?? {};
|
|
163
164
|
function renderSidebarList(items, level) {
|
|
164
165
|
return items.map((item, i) => {
|
|
165
|
-
const id = `${item.type}_${i}`;
|
|
166
166
|
if (item.type === 'separator') {
|
|
167
167
|
if (Separator)
|
|
168
|
-
return _jsx(Separator, { item: item },
|
|
169
|
-
return (_jsxs(SidebarSeparator, { className: cn(i !== 0 && 'mt-8'), children: [item.icon, item.name] },
|
|
168
|
+
return _jsx(Separator, { item: item }, i);
|
|
169
|
+
return (_jsxs(SidebarSeparator, { className: cn(i !== 0 && 'mt-8'), children: [item.icon, item.name] }, i));
|
|
170
170
|
}
|
|
171
171
|
if (item.type === 'folder') {
|
|
172
172
|
const children = renderSidebarList(item.children, level + 1);
|
|
173
173
|
if (Folder)
|
|
174
|
-
return (_jsx(Folder, { item: item, level: level, children: children },
|
|
175
|
-
return (_jsx(PageTreeFolder, { item: item, children: children },
|
|
174
|
+
return (_jsx(Folder, { item: item, level: level, children: children }, i));
|
|
175
|
+
return (_jsx(PageTreeFolder, { item: item, children: children }, i));
|
|
176
176
|
}
|
|
177
177
|
if (Item)
|
|
178
178
|
return _jsx(Item, { item: item }, item.url);
|
|
179
179
|
return (_jsx(SidebarItem, { href: item.url, external: item.external, icon: item.icon, children: item.name }, item.url));
|
|
180
180
|
});
|
|
181
181
|
}
|
|
182
|
-
return renderSidebarList(root.children, 1);
|
|
183
|
-
}, [
|
|
182
|
+
return (_jsx(Fragment, { children: renderSidebarList(root.children, 1) }, idRef.current++));
|
|
183
|
+
}, [props.components, root.children]);
|
|
184
184
|
}
|
|
185
185
|
function PageTreeFolder({ item, ...props }) {
|
|
186
186
|
const { defaultOpenLevel, level } = useInternalContext();
|
package/dist/layouts/docs.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export interface DocsLayoutProps extends BaseLayoutProps {
|
|
|
8
8
|
sidebar?: Partial<SidebarOptions>;
|
|
9
9
|
containerProps?: HTMLAttributes<HTMLDivElement>;
|
|
10
10
|
}
|
|
11
|
-
export declare function DocsLayout({ nav: { enabled: navEnabled, component: navReplace, transparentMode, ...nav }, sidebar: { enabled: sidebarEnabled, collapsible, component: sidebarReplace, tabs: tabOptions, banner: sidebarBanner, footer: sidebarFooter, components: sidebarComponents, hideSearch: sidebarHideSearch, ...sidebar }, i18n, ...props }: DocsLayoutProps): ReactNode;
|
|
11
|
+
export declare function DocsLayout({ nav: { enabled: navEnabled, component: navReplace, transparentMode, ...nav }, sidebar: { enabled: sidebarEnabled, collapsible, component: sidebarReplace, tabs: tabOptions, banner: sidebarBanner, footer: sidebarFooter, components: sidebarComponents, hideSearch: sidebarHideSearch, ...sidebar }, i18n, children, ...props }: DocsLayoutProps): ReactNode;
|
|
12
12
|
export { getSidebarTabsFromOptions, type TabOptions } from './docs/shared.js';
|
|
13
13
|
export { type LinkItemType };
|
|
14
14
|
//# sourceMappingURL=docs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/layouts/docs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AAe5D,OAAO,EAAE,KAAK,YAAY,EAAgB,MAAM,iBAAiB,CAAC;AAElE,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,UAAU,CAAC;AAa1D,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAG/B,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IAEpB,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAElC,cAAc,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;CACjD;AAED,wBAAgB,UAAU,CAAC,EACzB,GAAG,EAAE,EACH,OAAO,EAAE,UAAiB,EAC1B,SAAS,EAAE,UAAU,EACrB,eAAe,EACf,GAAG,GAAG,EACF,EACN,OAAO,EAAE,EACP,OAAO,EAAE,cAAqB,EAC9B,WAAkB,EAClB,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,iBAAiB,EAC7B,UAAU,EAAE,iBAAiB,EAC7B,GAAG,OAAO,EACN,EACN,IAAY,EACZ,GAAG,KAAK,EACT,EAAE,eAAe,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/layouts/docs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AAe5D,OAAO,EAAE,KAAK,YAAY,EAAgB,MAAM,iBAAiB,CAAC;AAElE,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,UAAU,CAAC;AAa1D,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAG/B,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IAEpB,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAElC,cAAc,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;CACjD;AAED,wBAAgB,UAAU,CAAC,EACzB,GAAG,EAAE,EACH,OAAO,EAAE,UAAiB,EAC1B,SAAS,EAAE,UAAU,EACrB,eAAe,EACf,GAAG,GAAG,EACF,EACN,OAAO,EAAE,EACP,OAAO,EAAE,cAAqB,EAC9B,WAAkB,EAClB,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,iBAAiB,EAC7B,UAAU,EAAE,iBAAiB,EAC7B,GAAG,OAAO,EACN,EACN,IAAY,EACZ,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,eAAe,GAAG,SAAS,CA8H7B;AA2CD,OAAO,EAAE,yBAAyB,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,KAAK,YAAY,EAAE,CAAC"}
|
package/dist/layouts/docs.js
CHANGED
|
@@ -16,7 +16,7 @@ import { ThemeToggle } from '../components/layout/theme-toggle.js';
|
|
|
16
16
|
import { LargeSearchToggle, SearchToggle, } from '../components/layout/search-toggle.js';
|
|
17
17
|
import { checkPageTree, getSidebarTabsFromOptions, layoutVariables, SidebarLinkItem, } from '../layouts/docs/shared.js';
|
|
18
18
|
import { StylesProvider } from '../contexts/layout.js';
|
|
19
|
-
export function DocsLayout({ nav: { enabled: navEnabled = true, component: navReplace, transparentMode, ...nav } = {}, sidebar: { enabled: sidebarEnabled = true, collapsible = true, component: sidebarReplace, tabs: tabOptions, banner: sidebarBanner, footer: sidebarFooter, components: sidebarComponents, hideSearch: sidebarHideSearch, ...sidebar } = {}, i18n = false, ...props }) {
|
|
19
|
+
export function DocsLayout({ nav: { enabled: navEnabled = true, component: navReplace, transparentMode, ...nav } = {}, sidebar: { enabled: sidebarEnabled = true, collapsible = true, component: sidebarReplace, tabs: tabOptions, banner: sidebarBanner, footer: sidebarFooter, components: sidebarComponents, hideSearch: sidebarHideSearch, ...sidebar } = {}, i18n = false, children, ...props }) {
|
|
20
20
|
checkPageTree(props.tree);
|
|
21
21
|
const links = getLinks(props.links ?? [], props.githubUrl);
|
|
22
22
|
const Aside = collapsible ? CollapsibleSidebar : Sidebar;
|
|
@@ -34,21 +34,15 @@ export function DocsLayout({ nav: { enabled: navEnabled = true, component: navRe
|
|
|
34
34
|
}, children: [collapsible ? (_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
|
|
35
35
|
color: 'secondary',
|
|
36
36
|
size: 'icon',
|
|
37
|
-
}), 'fixed top-1/2 -translate-y-1/2 start-0 z-40 text-fd-muted-foreground border-s-0 rounded-s-none shadow-md data-[collapsed=false]:hidden max-md:hidden'), children: _jsx(ChevronRight, {}) })) : null, replaceOrDefault({ enabled: sidebarEnabled, component: sidebarReplace }, _jsxs(Aside, { ...sidebar, className: cn('md:ps-(--fd-layout-offset)', sidebar.className), children: [_jsxs(SidebarHeader, { children: [
|
|
37
|
+
}), 'fixed top-1/2 -translate-y-1/2 start-0 z-40 text-fd-muted-foreground border-s-0 rounded-s-none shadow-md data-[collapsed=false]:hidden max-md:hidden'), children: _jsx(ChevronRight, {}) })) : null, replaceOrDefault({ enabled: sidebarEnabled, component: sidebarReplace }, _jsxs(Aside, { ...sidebar, className: cn('md:ps-(--fd-layout-offset)', sidebar.className), children: [_jsxs(SidebarHeader, { children: [_jsxs("div", { className: "flex flex-row pt-1 max-md:hidden", children: [_jsx(Link, { href: nav.url ?? '/', className: "inline-flex text-[15px] items-center gap-2.5 font-medium", children: nav.title }), nav.children, collapsible && (_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
|
|
38
|
+
color: 'ghost',
|
|
39
|
+
size: 'icon-sm',
|
|
40
|
+
}), 'ms-auto mb-auto text-fd-muted-foreground max-md:hidden') }))] }), sidebarBanner, tabs.length > 0 ? (_jsx(RootToggle, { options: tabs, className: "-mx-2" })) : null, !sidebarHideSearch ? (_jsx(LargeSearchToggle, { hideIfDisabled: true, className: "rounded-lg max-md:hidden" })) : null] }), _jsxs(SidebarViewport, { children: [_jsx("div", { className: "mb-4 empty:hidden md:hidden", children: links
|
|
38
41
|
.filter((v) => v.type !== 'icon')
|
|
39
42
|
.map((item, i) => (_jsx(SidebarLinkItem, { item: item }, i))) }), _jsx(SidebarPageTree, { components: sidebarComponents })] }), _jsxs(SidebarFooter, { children: [_jsx(SidebarFooterItems, { links: links, i18n: i18n, disableThemeSwitch: props.disableThemeSwitch ?? false }), sidebarFooter] })] }), {
|
|
40
43
|
...sidebar,
|
|
41
44
|
tabs,
|
|
42
|
-
}), _jsx(StylesProvider, { ...pageStyles, children:
|
|
43
|
-
}
|
|
44
|
-
function SidebarHeaderItems({ links, sidebarCollapsible, ...props }) {
|
|
45
|
-
const isEmpty = !props.title && !props.children && links.length === 0;
|
|
46
|
-
if (isEmpty)
|
|
47
|
-
return null;
|
|
48
|
-
return (_jsxs("div", { className: "flex flex-row items-center max-md:hidden", children: [props.title ? (_jsx(Link, { href: props.url ?? '/', className: "inline-flex text-[15px] items-center gap-2.5 py-1 font-medium", children: props.title })) : null, props.children, sidebarCollapsible && (_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
|
|
49
|
-
color: 'ghost',
|
|
50
|
-
size: 'icon-sm',
|
|
51
|
-
}), 'ms-auto text-fd-muted-foreground max-md:hidden') }))] }));
|
|
45
|
+
}), _jsx(StylesProvider, { ...pageStyles, children: children })] })] }) }));
|
|
52
46
|
}
|
|
53
47
|
function SidebarFooterItems({ i18n, disableThemeSwitch, links, }) {
|
|
54
48
|
const iconItems = links.filter((v) => v.type === 'icon');
|
|
@@ -12,7 +12,7 @@ import { isActive } from '../utils/is-active.js';
|
|
|
12
12
|
export function Navbar(props) {
|
|
13
13
|
const { open, collapsed } = useSidebar();
|
|
14
14
|
const { isTransparent } = useNav();
|
|
15
|
-
return (_jsx("header", { id: "nd-subnav", ...props, className: cn('fixed inset-x-0 top-(--fd-banner-height) z-10
|
|
15
|
+
return (_jsx("header", { id: "nd-subnav", ...props, className: cn('fixed inset-x-0 top-(--fd-banner-height) z-10 pe-(--fd-layout-offset) backdrop-blur-lg transition-colors', (!isTransparent || open) && 'bg-fd-background/80', props.className), style: {
|
|
16
16
|
paddingInlineStart: collapsed
|
|
17
17
|
? 'var(--fd-layout-offset)'
|
|
18
18
|
: 'calc(var(--fd-layout-offset) + var(--fd-sidebar-width))',
|
|
@@ -38,13 +38,13 @@ function useIsSelected(item) {
|
|
|
38
38
|
export function LayoutTab(item) {
|
|
39
39
|
const { closeOnRedirect } = useSidebar();
|
|
40
40
|
const selected = useIsSelected(item);
|
|
41
|
-
return (_jsx(Link, { className: cn('inline-flex items-center py-2.5 border-b
|
|
41
|
+
return (_jsx(Link, { className: cn('inline-flex items-center py-2.5 border-b border-transparent gap-2 text-fd-muted-foreground text-sm text-nowrap', selected && 'text-fd-foreground font-medium border-fd-primary'), href: item.url, onClick: () => {
|
|
42
42
|
closeOnRedirect.current = false;
|
|
43
43
|
}, children: item.title }));
|
|
44
44
|
}
|
|
45
45
|
export function SidebarLayoutTab({ item, ...props }) {
|
|
46
46
|
const selected = useIsSelected(item);
|
|
47
|
-
return (_jsxs(Link, { ...props, className: cn('flex flex-row items-center px-2 py-1.5 gap-2.5 text-fd-muted-foreground [&_svg]:!size-4.5', selected
|
|
47
|
+
return (_jsxs(Link, { ...props, className: cn('flex flex-row items-center px-2 -mx-2 py-1.5 gap-2.5 text-fd-muted-foreground [&_svg]:!size-4.5', selected
|
|
48
48
|
? 'text-fd-primary font-medium'
|
|
49
49
|
: 'hover:text-fd-accent-foreground', props.className), "data-active": selected, href: item.url, children: [item.icon, item.title] }));
|
|
50
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notebook.d.ts","sourceRoot":"","sources":["../../src/layouts/notebook.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,kBAAkB,CAAC;AA4BlE,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAWrD,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAE/B,GAAG,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,GAAG;QAC7B,IAAI,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;KACvB,CAAC;IAEF,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC,CAAC;IAEjE,cAAc,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;CACjD;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAmB,EACnB,GAAG,EAAE,EAAE,eAAe,EAAE,GAAG,GAAG,EAAO,EACrC,OAAO,EAAE,EACP,WAAW,EAAE,kBAAyB,EACtC,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,iBAAiB,EAC7B,GAAG,OAAO,EACN,EACN,IAAY,EACZ,GAAG,KAAK,EACT,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"notebook.d.ts","sourceRoot":"","sources":["../../src/layouts/notebook.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,kBAAkB,CAAC;AA4BlE,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAWrD,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAE/B,GAAG,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,GAAG;QAC7B,IAAI,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;KACvB,CAAC;IAEF,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC,CAAC;IAEjE,cAAc,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;CACjD;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAmB,EACnB,GAAG,EAAE,EAAE,eAAe,EAAE,GAAG,GAAG,EAAO,EACrC,OAAO,EAAE,EACP,WAAW,EAAE,kBAAyB,EACtC,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,iBAAiB,EAC7B,GAAG,OAAO,EACN,EACN,IAAY,EACZ,GAAG,KAAK,EACT,EAAE,eAAe,2CA4HjB"}
|
package/dist/layouts/notebook.js
CHANGED
|
@@ -25,7 +25,7 @@ export function DocsLayout({ tabMode = 'sidebar', nav: { transparentMode, ...nav
|
|
|
25
25
|
const tabs = getSidebarTabsFromOptions(tabOptions, props.tree) ?? [];
|
|
26
26
|
const variables = cn('[--fd-nav-height:calc(var(--spacing)*14)] [--fd-tocnav-height:36px] md:[--fd-sidebar-width:286px] xl:[--fd-toc-width:286px] xl:[--fd-tocnav-height:0px]', tabs.length > 0 &&
|
|
27
27
|
tabMode === 'navbar' &&
|
|
28
|
-
'lg:[--fd-nav-height:calc(var(--spacing)*
|
|
28
|
+
'lg:[--fd-nav-height:calc(var(--spacing)*24)]');
|
|
29
29
|
const pageStyles = {
|
|
30
30
|
tocNav: cn('xl:hidden'),
|
|
31
31
|
toc: cn('max-xl:hidden'),
|
|
@@ -34,23 +34,33 @@ export function DocsLayout({ tabMode = 'sidebar', nav: { transparentMode, ...nav
|
|
|
34
34
|
return (_jsx(TreeContextProvider, { tree: props.tree, children: _jsx(NavProvider, { transparentMode: transparentMode, children: _jsxs("main", { id: "nd-docs-layout", ...props.containerProps, className: cn('flex w-full flex-1 flex-row pe-(--fd-layout-offset)', variables, props.containerProps?.className), style: {
|
|
35
35
|
...layoutVariables,
|
|
36
36
|
...props.containerProps?.style,
|
|
37
|
-
}, children: [_jsxs(Aside, { ...sidebar, className: cn('md:ps-(--fd-layout-offset)', navMode === 'top' ? 'bg-transparent' : 'md:[--fd-nav-height:0px]', sidebar.className),
|
|
37
|
+
}, children: [_jsxs(Aside, { ...sidebar, className: cn('md:ps-(--fd-layout-offset)', navMode === 'top' ? 'bg-transparent' : 'md:[--fd-nav-height:0px]', sidebar.className), inner: {
|
|
38
|
+
className: cn(navMode === 'top' ? 'md:pt-2.5' : 'md:pt-3.5', tabMode === 'navbar' && 'md:pt-0'),
|
|
39
|
+
}, children: [_jsxs(SidebarHeader, { children: [navMode === 'auto' && (_jsxs("div", { className: "flex flex-row justify-between max-md:hidden", children: [_jsx(Link, { href: nav.url ?? '/', className: "inline-flex items-center gap-2.5 font-medium", children: nav.title }), _jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
|
|
40
|
+
color: 'ghost',
|
|
41
|
+
size: 'icon-sm',
|
|
42
|
+
}), 'text-fd-muted-foreground mb-auto') })] })), nav.children, sidebarBanner, tabMode === 'sidebar' && tabs.length > 0 ? (_jsx(RootToggle, { options: tabs, className: "-mx-2" })) : null] }), _jsxs(SidebarViewport, { children: [tabMode === 'navbar' &&
|
|
38
43
|
tabs.map((tab, i) => (_jsx(SidebarLayoutTab, { item: tab, className: cn('lg:hidden', i === tabs.length - 1 && 'mb-4') }, tab.url))), links.map((item, i) => (_jsx(SidebarLinkItem, { item: item, className: cn('lg:hidden', i === links.length - 1 && 'mb-4') }, i))), _jsx(SidebarPageTree, { components: sidebarComponents })] }), _jsxs(SidebarFooter, { className: cn('flex flex-row items-center', !sidebarFooter && 'md:hidden'), children: [i18n ? (_jsx(LanguageToggle, { className: "me-auto md:hidden", children: _jsx(Languages, { className: "size-5 text-fd-muted-foreground" }) })) : null, !props.disableThemeSwitch ? (_jsx(ThemeToggle, { className: "md:hidden", mode: "light-dark-system" })) : null, sidebarFooter] })] }), _jsx(DocsNavbar, { nav: nav, links: links, i18n: i18n, sidebarCollapsible: sidebarCollapsible, tabs: tabMode == 'navbar' ? tabs : [] }), _jsx(StylesProvider, { ...pageStyles, children: props.children })] }) }) }));
|
|
39
44
|
}
|
|
40
45
|
function DocsNavbar({ sidebarCollapsible, links, nav = {}, i18n, tabs, }) {
|
|
41
46
|
const navMode = nav.mode ?? 'auto';
|
|
42
|
-
return (_jsxs(Navbar, {
|
|
47
|
+
return (_jsxs(Navbar, { style: navMode === 'top'
|
|
43
48
|
? {
|
|
44
49
|
paddingInlineStart: 'var(--fd-layout-offset)',
|
|
45
50
|
}
|
|
46
|
-
: undefined, children: [_jsxs("div", { className:
|
|
51
|
+
: undefined, children: [_jsxs("div", { className: cn('flex flex-row border-b border-fd-foreground/10 px-4 h-14', navMode === 'auto' && 'md:px-6'), children: [_jsxs("div", { className: cn('flex flex-row items-center', navMode === 'top' && 'flex-1 pe-4'), children: [sidebarCollapsible && navMode === 'auto' ? (_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
|
|
47
52
|
color: 'ghost',
|
|
48
|
-
size: 'icon',
|
|
49
|
-
}), 'text-fd-muted-foreground data-[collapsed=false]:hidden max-md:hidden') })) : null
|
|
53
|
+
size: 'icon-sm',
|
|
54
|
+
}), 'text-fd-muted-foreground -ms-1.5 me-2 data-[collapsed=false]:hidden max-md:hidden') })) : null, _jsx(Title, { url: nav.url, title: nav.title, className: cn(
|
|
55
|
+
// show on sidebar on above md
|
|
56
|
+
navMode === 'auto' && 'md:hidden') })] }), _jsx(LargeSearchToggle, { hideIfDisabled: true, className: cn('w-full my-auto rounded-xl max-md:hidden', navMode === 'top' ? 'max-w-sm px-2' : 'max-w-[240px]') }), _jsxs("div", { className: "flex flex-1 flex-row items-center justify-end", children: [_jsx("div", { className: "flex flex-row items-center gap-6 px-4 empty:hidden max-lg:hidden", children: links
|
|
50
57
|
.filter((item) => item.type !== 'icon')
|
|
51
58
|
.map((item, i) => (_jsx(NavbarLinkItem, { item: item, className: "text-sm text-fd-muted-foreground transition-colors hover:text-fd-accent-foreground" }, i))) }), nav.children, _jsx(SearchToggle, { hideIfDisabled: true, className: "md:hidden" }), _jsx(NavbarSidebarTrigger, { className: "md:hidden" }), links
|
|
52
59
|
.filter((item) => item.type === 'icon')
|
|
53
|
-
.map((item, i) => (_jsx(BaseLinkItem, { item: item, className: cn(buttonVariants({ size: 'icon-sm', color: 'ghost' }), 'text-fd-muted-foreground max-lg:hidden'), "aria-label": item.label, children: item.icon }, i))), i18n ? (_jsx(LanguageToggle, { className: "max-md:hidden", children: _jsx(Languages, { className: "size-4.5 text-fd-muted-foreground" }) })) : null, _jsx(ThemeToggle, { className: "ms-2 max-md:hidden", mode: "light-dark-system" })
|
|
60
|
+
.map((item, i) => (_jsx(BaseLinkItem, { item: item, className: cn(buttonVariants({ size: 'icon-sm', color: 'ghost' }), 'text-fd-muted-foreground max-lg:hidden'), "aria-label": item.label, children: item.icon }, i))), i18n ? (_jsx(LanguageToggle, { className: "max-md:hidden", children: _jsx(Languages, { className: "size-4.5 text-fd-muted-foreground" }) })) : null, _jsx(ThemeToggle, { className: "ms-2 max-md:hidden", mode: "light-dark-system" }), sidebarCollapsible && navMode === 'top' ? (_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
|
|
61
|
+
color: 'secondary',
|
|
62
|
+
size: 'icon-sm',
|
|
63
|
+
}), 'ms-2 text-fd-muted-foreground rounded-full max-md:hidden') })) : null] })] }), tabs.length > 0 ? (_jsx(LayoutTabs, { className: "px-6 border-b border-fd-foreground/10 h-10 max-lg:hidden", children: tabs.map((tab) => (_jsx(LayoutTab, { ...tab }, tab.url))) })) : null] }));
|
|
54
64
|
}
|
|
55
65
|
function NavbarLinkItem({ item, ...props }) {
|
|
56
66
|
if (item.type === 'menu') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page.client.d.ts","sourceRoot":"","sources":["../src/page.client.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,cAAc,EAKpB,MAAM,OAAO,CAAC;AAWf,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAMlC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"page.client.d.ts","sourceRoot":"","sources":["../src/page.client.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,cAAc,EAKpB,MAAM,OAAO,CAAC;AAWf,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAMlC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,2CA8CrE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,2CAY7D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,WAAW,CAAC,2CAe7D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,2CAc/C;AAED,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,KAAK,CAAC,EAAE;QACN,QAAQ,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC;QACzC,IAAI,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC;KACtC,CAAC;CACH;AAiCD,wBAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,WAAW,2CA8C5C;AAED,MAAM,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAEhD,wBAAgB,UAAU,CAAC,OAAO,EAAE,eAAe,kDAsClD"}
|
package/dist/page.client.js
CHANGED
|
@@ -33,9 +33,9 @@ export function TocPopoverHeader(props) {
|
|
|
33
33
|
window.removeEventListener('click', onClick);
|
|
34
34
|
};
|
|
35
35
|
}, [onClick]);
|
|
36
|
-
return (_jsx("div", { className: cn('sticky overflow-visible z-10
|
|
36
|
+
return (_jsx("div", { className: cn('sticky overflow-visible z-10', tocNav, props.className), style: {
|
|
37
37
|
top: 'calc(var(--fd-banner-height) + var(--fd-nav-height))',
|
|
38
|
-
}, children: _jsx(TocPopover, { open: open, onOpenChange: setOpen, asChild: true, children: _jsx("header", { ref: ref, id: "nd-tocnav", ...props, className: cn('border-b border-fd-foreground/10 backdrop-blur-md transition-colors', (!isTransparent || open) && 'bg-fd-background/80', open && 'shadow-lg', sidebar.open && '
|
|
38
|
+
}, children: _jsx(TocPopover, { open: open, onOpenChange: setOpen, asChild: true, children: _jsx("header", { ref: ref, id: "nd-tocnav", ...props, className: cn('border-b border-fd-foreground/10 backdrop-blur-md transition-colors', (!isTransparent || open) && 'bg-fd-background/80', open && 'shadow-lg', sidebar.open && 'max-md:hidden'), children: props.children }) }) }));
|
|
39
39
|
}
|
|
40
40
|
export function PageBody(props) {
|
|
41
41
|
const { page } = usePageStyles();
|
|
@@ -54,7 +54,7 @@ export function LastUpdate(props) {
|
|
|
54
54
|
}, [props.date]);
|
|
55
55
|
return (_jsxs("p", { className: "text-sm text-fd-muted-foreground", children: [text.lastUpdate, " ", date] }));
|
|
56
56
|
}
|
|
57
|
-
const itemVariants = cva('flex w-full flex-col gap-2 rounded-lg border
|
|
57
|
+
const itemVariants = cva('flex w-full flex-col gap-2 rounded-lg border p-4 text-sm transition-colors hover:bg-fd-accent/80 hover:text-fd-accent-foreground');
|
|
58
58
|
const itemLabel = cva('inline-flex items-center gap-0.5 text-fd-muted-foreground');
|
|
59
59
|
function scanNavigationList(tree) {
|
|
60
60
|
const list = [];
|
|
@@ -91,7 +91,7 @@ export function Footer({ items }) {
|
|
|
91
91
|
next: list[idx + 1],
|
|
92
92
|
};
|
|
93
93
|
}, [items, pathname, root]);
|
|
94
|
-
return (_jsxs("div", { className: "grid grid-cols-2 gap-4 pb-6", children: [previous ? (_jsxs(Link, { href: previous.url, className: cn(itemVariants()), children: [_jsxs("div", { className: cn(itemLabel()), children: [_jsx(ChevronLeft, { className: "-ms-1 size-4 shrink-0 rtl:rotate-180" }), _jsx("p", { children: text.previousPage })] }), _jsx("p", { className: "font-medium", children: previous.name })] })) : null, next ? (_jsxs(Link, { href: next.url, className: cn(itemVariants({ className: 'col-start-2 text-end' })), children: [_jsxs("div", { className: cn(itemLabel({ className: 'flex-row-reverse' })), children: [_jsx(ChevronRight, { className: "-me-1 size-4 shrink-0 rtl:rotate-180" }), _jsx("p", { children: text.nextPage })] }), _jsx("p", { className: "font-medium", children: next.name })] })) : null] }));
|
|
94
|
+
return (_jsxs("div", { className: "grid grid-cols-2 gap-4 pb-6", children: [previous ? (_jsxs(Link, { href: previous.url, className: cn(itemVariants()), children: [_jsxs("div", { className: cn(itemLabel()), children: [_jsx(ChevronLeft, { className: "-ms-1 size-4 shrink-0 rtl:rotate-180" }), _jsx("p", { children: text.previousPage })] }), _jsx("p", { className: "font-medium md:text-[15px]", children: previous.name })] })) : null, next ? (_jsxs(Link, { href: next.url, className: cn(itemVariants({ className: 'col-start-2 text-end' })), children: [_jsxs("div", { className: cn(itemLabel({ className: 'flex-row-reverse' })), children: [_jsx(ChevronRight, { className: "-me-1 size-4 shrink-0 rtl:rotate-180" }), _jsx("p", { children: text.nextPage })] }), _jsx("p", { className: "font-medium md:text-[15px]", children: next.name })] })) : null] }));
|
|
95
95
|
}
|
|
96
96
|
export function Breadcrumb(options) {
|
|
97
97
|
const path = useTreePath();
|
package/dist/page.js
CHANGED
|
@@ -22,7 +22,7 @@ export function DocsPage({ toc = [], full = false, tableOfContentPopover: { enab
|
|
|
22
22
|
return (_jsxs(AnchorProvider, { toc: toc, single: tocOptions.single, children: [_jsxs(PageBody, { ...props.container, className: cn(props.container?.className), style: {
|
|
23
23
|
'--fd-tocnav-height': !tocPopoverEnabled ? '0px' : undefined,
|
|
24
24
|
...props.container?.style,
|
|
25
|
-
}, children: [replaceOrDefault({ enabled: tocPopoverEnabled, component: tocPopoverReplace }, _jsxs(TocPopoverHeader, { children: [_jsx(TocPopoverTrigger, { className: "w-full", items: toc }), _jsxs(TocPopoverContent, { children: [tocPopoverOptions.header, _jsx(TOCScrollArea, { isMenu: true, children: tocPopoverOptions.style === 'clerk' ? (_jsx(ClerkTOCItems, { items: toc })) : (_jsx(TOCItems, { items: toc })) }), tocPopoverOptions.footer] })] }), {
|
|
25
|
+
}, children: [replaceOrDefault({ enabled: tocPopoverEnabled, component: tocPopoverReplace }, _jsxs(TocPopoverHeader, { className: "h-10", children: [_jsx(TocPopoverTrigger, { className: "w-full", items: toc }), _jsxs(TocPopoverContent, { children: [tocPopoverOptions.header, _jsx(TOCScrollArea, { isMenu: true, children: tocPopoverOptions.style === 'clerk' ? (_jsx(ClerkTOCItems, { items: toc })) : (_jsx(TOCItems, { items: toc })) }), tocPopoverOptions.footer] })] }), {
|
|
26
26
|
items: toc,
|
|
27
27
|
...tocPopoverOptions,
|
|
28
28
|
}), _jsxs(PageArticle, { ...props.article, className: cn(full || !tocEnabled ? 'max-w-[1120px]' : 'max-w-[860px]', props.article?.className), children: [replaceOrDefault(props.breadcrumb, _jsx(Breadcrumb, { ...props.breadcrumb })), props.children, _jsx("div", { role: "none", className: "flex-1" }), _jsxs("div", { className: "flex flex-row flex-wrap items-center justify-between gap-4 empty:hidden", children: [props.editOnGithub ? (_jsx(EditOnGitHub, { ...props.editOnGithub })) : null, props.lastUpdate ? (_jsx(LastUpdate, { date: new Date(props.lastUpdate) })) : null] }), replaceOrDefault(props.footer, _jsx(Footer, { items: props.footer?.items }))] })] }), replaceOrDefault({ enabled: tocEnabled, component: tocReplace }, _jsxs(Toc, { children: [tocOptions.header, _jsxs("h3", { className: "inline-flex items-center gap-1.5 text-sm text-fd-muted-foreground", children: [_jsx(Text, { className: "size-4" }), _jsx(I18nLabel, { label: "toc" })] }), _jsx(TOCScrollArea, { children: tocOptions.style === 'clerk' ? (_jsx(ClerkTOCItems, { items: toc })) : (_jsx(TOCItems, { items: toc })) }), tocOptions.footer] }), {
|
package/dist/style.css
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! tailwindcss v4.0.
|
|
1
|
+
/*! tailwindcss v4.0.7 | MIT License | https://tailwindcss.com */
|
|
2
2
|
@layer theme, base, components, utilities;
|
|
3
3
|
@layer theme {
|
|
4
4
|
:root, :host {
|
|
@@ -1117,6 +1117,9 @@
|
|
|
1117
1117
|
.mb-8 {
|
|
1118
1118
|
margin-bottom: calc(var(--spacing) * 8);
|
|
1119
1119
|
}
|
|
1120
|
+
.mb-auto {
|
|
1121
|
+
margin-bottom: auto;
|
|
1122
|
+
}
|
|
1120
1123
|
.box-content {
|
|
1121
1124
|
box-sizing: content-box;
|
|
1122
1125
|
}
|
|
@@ -1181,8 +1184,8 @@
|
|
|
1181
1184
|
.h-1\.5 {
|
|
1182
1185
|
height: calc(var(--spacing) * 1.5);
|
|
1183
1186
|
}
|
|
1184
|
-
.h-
|
|
1185
|
-
height: calc(var(--spacing) *
|
|
1187
|
+
.h-10 {
|
|
1188
|
+
height: calc(var(--spacing) * 10);
|
|
1186
1189
|
}
|
|
1187
1190
|
.h-14 {
|
|
1188
1191
|
height: calc(var(--spacing) * 14);
|
|
@@ -1455,10 +1458,6 @@
|
|
|
1455
1458
|
border-bottom-style: var(--tw-border-style);
|
|
1456
1459
|
border-bottom-width: 1px;
|
|
1457
1460
|
}
|
|
1458
|
-
.border-b-2 {
|
|
1459
|
-
border-bottom-style: var(--tw-border-style);
|
|
1460
|
-
border-bottom-width: 2px;
|
|
1461
|
-
}
|
|
1462
1461
|
.border-l {
|
|
1463
1462
|
border-left-style: var(--tw-border-style);
|
|
1464
1463
|
border-left-width: 1px;
|
|
@@ -1577,9 +1576,6 @@
|
|
|
1577
1576
|
.py-0\.5 {
|
|
1578
1577
|
padding-block: calc(var(--spacing) * 0.5);
|
|
1579
1578
|
}
|
|
1580
|
-
.py-1 {
|
|
1581
|
-
padding-block: calc(var(--spacing) * 1);
|
|
1582
|
-
}
|
|
1583
1579
|
.py-1\.5 {
|
|
1584
1580
|
padding-block: calc(var(--spacing) * 1.5);
|
|
1585
1581
|
}
|
|
@@ -1616,12 +1612,12 @@
|
|
|
1616
1612
|
.pe-4 {
|
|
1617
1613
|
padding-inline-end: calc(var(--spacing) * 4);
|
|
1618
1614
|
}
|
|
1619
|
-
.pe-6 {
|
|
1620
|
-
padding-inline-end: calc(var(--spacing) * 6);
|
|
1621
|
-
}
|
|
1622
1615
|
.pt-0 {
|
|
1623
1616
|
padding-top: calc(var(--spacing) * 0);
|
|
1624
1617
|
}
|
|
1618
|
+
.pt-1 {
|
|
1619
|
+
padding-top: calc(var(--spacing) * 1);
|
|
1620
|
+
}
|
|
1625
1621
|
.pt-2 {
|
|
1626
1622
|
padding-top: calc(var(--spacing) * 2);
|
|
1627
1623
|
}
|
|
@@ -1816,9 +1812,6 @@
|
|
|
1816
1812
|
.\[--fd-tocnav-height\:36px\] {
|
|
1817
1813
|
--fd-tocnav-height: 36px;
|
|
1818
1814
|
}
|
|
1819
|
-
.\[--radix-collapsible-content-height\:0px\] {
|
|
1820
|
-
--radix-collapsible-content-height: 0px;
|
|
1821
|
-
}
|
|
1822
1815
|
.select-none {
|
|
1823
1816
|
-webkit-user-select: none;
|
|
1824
1817
|
user-select: none;
|
|
@@ -2225,19 +2218,24 @@
|
|
|
2225
2218
|
padding-block: calc(var(--spacing) * 1.5);
|
|
2226
2219
|
}
|
|
2227
2220
|
}
|
|
2228
|
-
.md\:
|
|
2221
|
+
.md\:ps-\(--fd-layout-offset\) {
|
|
2229
2222
|
@media (width >= 48rem) {
|
|
2230
|
-
padding-
|
|
2223
|
+
padding-inline-start: var(--fd-layout-offset);
|
|
2231
2224
|
}
|
|
2232
2225
|
}
|
|
2233
|
-
.md\:
|
|
2226
|
+
.md\:pt-0 {
|
|
2234
2227
|
@media (width >= 48rem) {
|
|
2235
|
-
padding-
|
|
2228
|
+
padding-top: calc(var(--spacing) * 0);
|
|
2229
|
+
}
|
|
2230
|
+
}
|
|
2231
|
+
.md\:pt-2\.5 {
|
|
2232
|
+
@media (width >= 48rem) {
|
|
2233
|
+
padding-top: calc(var(--spacing) * 2.5);
|
|
2236
2234
|
}
|
|
2237
2235
|
}
|
|
2238
|
-
.md\:
|
|
2236
|
+
.md\:pt-3\.5 {
|
|
2239
2237
|
@media (width >= 48rem) {
|
|
2240
|
-
padding-
|
|
2238
|
+
padding-top: calc(var(--spacing) * 3.5);
|
|
2241
2239
|
}
|
|
2242
2240
|
}
|
|
2243
2241
|
.md\:pt-4 {
|
|
@@ -2250,6 +2248,11 @@
|
|
|
2250
2248
|
padding-top: calc(var(--spacing) * 12);
|
|
2251
2249
|
}
|
|
2252
2250
|
}
|
|
2251
|
+
.md\:text-\[15px\] {
|
|
2252
|
+
@media (width >= 48rem) {
|
|
2253
|
+
font-size: 15px;
|
|
2254
|
+
}
|
|
2255
|
+
}
|
|
2253
2256
|
.md\:opacity-0 {
|
|
2254
2257
|
@media (width >= 48rem) {
|
|
2255
2258
|
opacity: 0%;
|
|
@@ -2292,11 +2295,6 @@
|
|
|
2292
2295
|
height: calc(var(--spacing) * 12);
|
|
2293
2296
|
}
|
|
2294
2297
|
}
|
|
2295
|
-
.lg\:h-26 {
|
|
2296
|
-
@media (width >= 64rem) {
|
|
2297
|
-
height: calc(var(--spacing) * 26);
|
|
2298
|
-
}
|
|
2299
|
-
}
|
|
2300
2298
|
.lg\:w-\[calc\(100\%-1rem\)\] {
|
|
2301
2299
|
@media (width >= 64rem) {
|
|
2302
2300
|
width: calc(100% - 1rem);
|
|
@@ -2318,9 +2316,9 @@
|
|
|
2318
2316
|
border-width: 1px;
|
|
2319
2317
|
}
|
|
2320
2318
|
}
|
|
2321
|
-
.lg\:\[--fd-nav-height\:calc\(var\(--spacing\)\*
|
|
2319
|
+
.lg\:\[--fd-nav-height\:calc\(var\(--spacing\)\*24\)\] {
|
|
2322
2320
|
@media (width >= 64rem) {
|
|
2323
|
-
--fd-nav-height: calc(var(--spacing) *
|
|
2321
|
+
--fd-nav-height: calc(var(--spacing) * 24);
|
|
2324
2322
|
}
|
|
2325
2323
|
}
|
|
2326
2324
|
.lg\:\[--fd-sidebar-width\:286px\] {
|
|
@@ -2554,6 +2552,11 @@
|
|
|
2554
2552
|
margin-bottom: 0;
|
|
2555
2553
|
}
|
|
2556
2554
|
}
|
|
2555
|
+
@property --radix-collapsible-content-height {
|
|
2556
|
+
syntax: '<length>';
|
|
2557
|
+
inherits: false;
|
|
2558
|
+
initial-value: 0px;
|
|
2559
|
+
}
|
|
2557
2560
|
@layer base {
|
|
2558
2561
|
body {
|
|
2559
2562
|
display: flex;
|
|
@@ -2905,6 +2908,10 @@
|
|
|
2905
2908
|
syntax: "*";
|
|
2906
2909
|
inherits: false;
|
|
2907
2910
|
}
|
|
2911
|
+
@property --tw-drop-shadow {
|
|
2912
|
+
syntax: "*";
|
|
2913
|
+
inherits: false;
|
|
2914
|
+
}
|
|
2908
2915
|
@property --tw-backdrop-blur {
|
|
2909
2916
|
syntax: "*";
|
|
2910
2917
|
inherits: false;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fumadocs-ui",
|
|
3
|
-
"version": "15.0.
|
|
3
|
+
"version": "15.0.11",
|
|
4
4
|
"description": "The framework for building a documentation website in Next.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"NextJs",
|
|
@@ -67,21 +67,21 @@
|
|
|
67
67
|
"lucide-react": "^0.475.0",
|
|
68
68
|
"next-themes": "^0.4.4",
|
|
69
69
|
"postcss-selector-parser": "^7.1.0",
|
|
70
|
-
"react-medium-image-zoom": "^5.2.
|
|
70
|
+
"react-medium-image-zoom": "^5.2.14",
|
|
71
71
|
"tailwind-merge": "^3.0.1"
|
|
72
72
|
},
|
|
73
73
|
"devDependencies": {
|
|
74
74
|
"@next/eslint-plugin-next": "^15.1.7",
|
|
75
|
-
"@tailwindcss/cli": "^4.0.
|
|
75
|
+
"@tailwindcss/cli": "^4.0.7",
|
|
76
76
|
"@types/lodash.merge": "^4.6.9",
|
|
77
|
-
"@types/react": "^19.0.
|
|
78
|
-
"@types/react-dom": "^19.0.
|
|
77
|
+
"@types/react": "^19.0.10",
|
|
78
|
+
"@types/react-dom": "^19.0.4",
|
|
79
79
|
"next": "15.1.7",
|
|
80
|
-
"tailwindcss": "^4.0.
|
|
80
|
+
"tailwindcss": "^4.0.7",
|
|
81
81
|
"tsc-alias": "^1.8.10",
|
|
82
82
|
"@fumadocs/cli": "0.0.8",
|
|
83
83
|
"eslint-config-custom": "0.0.0",
|
|
84
|
-
"fumadocs-core": "15.0.
|
|
84
|
+
"fumadocs-core": "15.0.11",
|
|
85
85
|
"tsconfig": "0.0.0"
|
|
86
86
|
},
|
|
87
87
|
"peerDependencies": {
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
"react": "18.x.x || 19.x.x",
|
|
90
90
|
"react-dom": "18.x.x || 19.x.x",
|
|
91
91
|
"tailwindcss": "^3.4.14 || ^4.0.0",
|
|
92
|
-
"fumadocs-core": "15.0.
|
|
92
|
+
"fumadocs-core": "15.0.11"
|
|
93
93
|
},
|
|
94
94
|
"peerDependenciesMeta": {
|
|
95
95
|
"tailwindcss": {
|