fumadocs-ui 16.0.11 → 16.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import { type ComponentProps } from 'react';
|
|
2
2
|
import { LinkItemType } from '../../layouts/shared/index.js';
|
|
3
|
-
import { NavigationMenuContent, NavigationMenuTrigger } from '../../components/ui/navigation-menu.js';
|
|
3
|
+
import { NavigationMenuContent, NavigationMenuItem, NavigationMenuTrigger } from '../../components/ui/navigation-menu.js';
|
|
4
4
|
export declare const navItemVariants: (props?: ({
|
|
5
5
|
variant?: "button" | "main" | "icon" | null | undefined;
|
|
6
6
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
7
7
|
export declare function Navbar(props: ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
|
|
8
|
-
export
|
|
8
|
+
export { NavigationMenuItem };
|
|
9
|
+
export declare function NavigationMenuLinkItem({ item, ...props }: {
|
|
9
10
|
item: LinkItemType;
|
|
10
11
|
className?: string;
|
|
11
12
|
}): import("react/jsx-runtime").JSX.Element;
|
|
12
|
-
export declare
|
|
13
|
-
export declare function MenuLinkItem({ item, ...props }: {
|
|
13
|
+
export declare function MobileNavigationMenuLinkItem({ item, ...props }: {
|
|
14
14
|
item: LinkItemType;
|
|
15
15
|
className?: string;
|
|
16
16
|
}): import("react/jsx-runtime").JSX.Element;
|
|
17
|
-
export declare function
|
|
17
|
+
export declare function MobileNavigationMenuTrigger({ enableHover, ...props }: ComponentProps<typeof NavigationMenuTrigger> & {
|
|
18
18
|
/**
|
|
19
19
|
* Enable hover to trigger
|
|
20
20
|
*/
|
|
21
21
|
enableHover?: boolean;
|
|
22
22
|
}): import("react/jsx-runtime").JSX.Element;
|
|
23
|
-
export declare function
|
|
23
|
+
export declare function MobileNavigationMenuContent(props: ComponentProps<typeof NavigationMenuContent>): import("react/jsx-runtime").JSX.Element;
|
|
24
24
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/layouts/home/client.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAsB,MAAM,OAAO,CAAC;AAIhE,OAAO,EAAgB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAEL,qBAAqB,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/layouts/home/client.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAsB,MAAM,OAAO,CAAC;AAIhE,OAAO,EAAgB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAEL,qBAAqB,EACrB,kBAAkB,EAGlB,qBAAqB,EAEtB,MAAM,iCAAiC,CAAC;AAIzC,eAAO,MAAM,eAAe;;8EAiB1B,CAAC;AAEH,wBAAgB,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,2CA2BlD;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,wBAAgB,sBAAsB,CAAC,EACrC,IAAI,EACJ,GAAG,KAAK,EACT,EAAE;IACD,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CA0EA;AAED,wBAAgB,4BAA4B,CAAC,EAC3C,IAAI,EACJ,GAAG,KAAK,EACT,EAAE;IACD,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CAyDA;AAED,wBAAgB,2BAA2B,CAAC,EAC1C,WAAmB,EACnB,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,qBAAqB,CAAC,GAAG;IAChD;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,2CASA;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,cAAc,CAAC,OAAO,qBAAqB,CAAC,2CAUpD"}
|
|
@@ -31,7 +31,8 @@ export function Navbar(props) {
|
|
|
31
31
|
const { isTransparent } = useNav();
|
|
32
32
|
return (_jsx(NavigationMenu, { value: value, onValueChange: setValue, asChild: true, children: _jsxs("header", { id: "nd-nav", ...props, className: cn('fixed top-(--fd-banner-height) z-40 left-0 right-(--removed-body-scroll-bar-size,0) backdrop-blur-lg border-b transition-colors *:mx-auto *:max-w-fd-container', value.length > 0 && 'max-lg:shadow-lg max-lg:rounded-b-2xl', (!isTransparent || value.length > 0) && 'bg-fd-background/80', props.className), children: [_jsx(NavigationMenuList, { className: "flex h-14 w-full items-center px-4", asChild: true, children: _jsx("nav", { children: props.children }) }), _jsx(NavigationMenuViewport, {})] }) }));
|
|
33
33
|
}
|
|
34
|
-
export
|
|
34
|
+
export { NavigationMenuItem };
|
|
35
|
+
export function NavigationMenuLinkItem({ item, ...props }) {
|
|
35
36
|
if (item.type === 'custom')
|
|
36
37
|
return _jsx("div", { ...props, children: item.children });
|
|
37
38
|
if (item.type === 'menu') {
|
|
@@ -42,17 +43,16 @@ export function NavbarLinkItem({ item, ...props }) {
|
|
|
42
43
|
const { banner = child.icon ? (_jsx("div", { className: "w-fit rounded-md border bg-fd-muted p-1 [&_svg]:size-4", children: child.icon })) : null, ...rest } = child.menu ?? {};
|
|
43
44
|
return (_jsx(NavigationMenuLink, { asChild: true, children: _jsx(Link, { href: child.url, external: child.external, ...rest, className: cn('flex flex-col gap-2 rounded-lg border bg-fd-card p-3 transition-colors hover:bg-fd-accent/80 hover:text-fd-accent-foreground', rest.className), children: rest.children ?? (_jsxs(_Fragment, { children: [banner, _jsx("p", { className: "text-[15px] font-medium", children: child.text }), _jsx("p", { className: "text-sm text-fd-muted-foreground empty:hidden", children: child.description })] })) }) }, `${j}-${child.url}`));
|
|
44
45
|
});
|
|
45
|
-
return (_jsxs(NavigationMenuItem, { children: [_jsx(NavigationMenuTrigger, {
|
|
46
|
+
return (_jsxs(NavigationMenuItem, { ...props, children: [_jsx(NavigationMenuTrigger, { className: cn(navItemVariants(), 'rounded-md'), children: item.url ? (_jsx(Link, { href: item.url, external: item.external, children: item.text })) : (item.text) }), _jsx(NavigationMenuContent, { className: "grid grid-cols-1 gap-2 p-4 md:grid-cols-2 lg:grid-cols-3", children: children })] }));
|
|
46
47
|
}
|
|
47
|
-
return (_jsx(NavigationMenuItem, { children: _jsx(NavigationMenuLink, { asChild: true, children: _jsx(BaseLinkItem, { item: item, "aria-label": item.type === 'icon' ? item.label : undefined,
|
|
48
|
+
return (_jsx(NavigationMenuItem, { ...props, children: _jsx(NavigationMenuLink, { asChild: true, children: _jsx(BaseLinkItem, { item: item, "aria-label": item.type === 'icon' ? item.label : undefined, className: cn(navItemVariants({ variant: item.type })), children: item.type === 'icon' ? item.icon : item.text }) }) }));
|
|
48
49
|
}
|
|
49
|
-
export
|
|
50
|
-
export function MenuLinkItem({ item, ...props }) {
|
|
50
|
+
export function MobileNavigationMenuLinkItem({ item, ...props }) {
|
|
51
51
|
if (item.type === 'custom')
|
|
52
52
|
return _jsx("div", { className: cn('grid', props.className), children: item.children });
|
|
53
53
|
if (item.type === 'menu') {
|
|
54
54
|
const header = (_jsxs(_Fragment, { children: [item.icon, item.text] }));
|
|
55
|
-
return (_jsxs("div", { className: cn('mb-4 flex flex-col', props.className), children: [_jsx("p", { className: "mb-1 text-sm text-fd-muted-foreground", children: item.url ? (_jsx(NavigationMenuLink, { asChild: true, children: _jsx(Link, { href: item.url, external: item.external, children: header }) })) : (header) }), item.items.map((child, i) => (_jsx(
|
|
55
|
+
return (_jsxs("div", { className: cn('mb-4 flex flex-col', props.className), children: [_jsx("p", { className: "mb-1 text-sm text-fd-muted-foreground", children: item.url ? (_jsx(NavigationMenuLink, { asChild: true, children: _jsx(Link, { href: item.url, external: item.external, children: header }) })) : (header) }), item.items.map((child, i) => (_jsx(MobileNavigationMenuLinkItem, { item: child }, i)))] }));
|
|
56
56
|
}
|
|
57
57
|
return (_jsx(NavigationMenuLink, { asChild: true, children: _jsxs(BaseLinkItem, { item: item, className: cn({
|
|
58
58
|
main: 'inline-flex items-center gap-2 py-1.5 transition-colors hover:text-fd-popover-foreground/50 data-[active=true]:font-medium data-[active=true]:text-fd-primary [&_svg]:size-4',
|
|
@@ -66,9 +66,9 @@ export function MenuLinkItem({ item, ...props }) {
|
|
|
66
66
|
}),
|
|
67
67
|
}[item.type ?? 'main'], props.className), "aria-label": item.type === 'icon' ? item.label : undefined, children: [item.icon, item.type === 'icon' ? undefined : item.text] }) }));
|
|
68
68
|
}
|
|
69
|
-
export function
|
|
69
|
+
export function MobileNavigationMenuTrigger({ enableHover = false, ...props }) {
|
|
70
70
|
return (_jsx(NavigationMenuTrigger, { ...props, onPointerMove: enableHover ? undefined : (e) => e.preventDefault(), children: props.children }));
|
|
71
71
|
}
|
|
72
|
-
export function
|
|
72
|
+
export function MobileNavigationMenuContent(props) {
|
|
73
73
|
return (_jsx(NavigationMenuContent, { ...props, className: cn('flex flex-col p-4', props.className), children: props.children }));
|
|
74
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layouts/home/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAW,MAAM,OAAO,CAAC;AAErD,OAAO,EACL,KAAK,eAAe,EAGpB,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAC;AAuB1B,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,GAAG,CAAC,EAAE,OAAO,CACX,UAAU,GAAG;QACX;;WAEG;QACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,CACF,CAAC;CACH;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,eAAe,GAAG,cAAc,CAAC,WAAW,CAAC,2CAkCrD;AAED,wBAAgB,MAAM,CAAC,EACrB,GAAQ,EACR,IAAY,EACZ,KAAK,EACL,SAAS,EACT,WAAgB,EAChB,YAAiB,GAClB,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layouts/home/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAW,MAAM,OAAO,CAAC;AAErD,OAAO,EACL,KAAK,eAAe,EAGpB,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAC;AAuB1B,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,GAAG,CAAC,EAAE,OAAO,CACX,UAAU,GAAG;QACX;;WAEG;QACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,CACF,CAAC;CACH;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,eAAe,GAAG,cAAc,CAAC,WAAW,CAAC,2CAkCrD;AAED,wBAAgB,MAAM,CAAC,EACrB,GAAQ,EACR,IAAY,EACZ,KAAK,EACL,SAAS,EACT,WAAgB,EAChB,YAAiB,GAClB,EAAE,eAAe,2CA+GjB"}
|
|
@@ -8,7 +8,7 @@ import { ThemeToggle } from '../../components/layout/theme-toggle.js';
|
|
|
8
8
|
import { LanguageToggle, LanguageToggleText, } from '../../components/layout/language-toggle.js';
|
|
9
9
|
import { ChevronDown, Languages } from '../../icons.js';
|
|
10
10
|
import Link from 'fumadocs-core/link';
|
|
11
|
-
import { Navbar,
|
|
11
|
+
import { Navbar, NavigationMenuLinkItem, MobileNavigationMenuContent, MobileNavigationMenuLinkItem, MobileNavigationMenuTrigger, NavigationMenuItem, } from '../../layouts/home/client.js';
|
|
12
12
|
import { buttonVariants } from '../../components/ui/button.js';
|
|
13
13
|
export function HomeLayout(props) {
|
|
14
14
|
const { nav = {}, links, githubUrl, i18n, themeSwitch = {}, searchToggle, ...rest } = props;
|
|
@@ -21,20 +21,16 @@ export function Header({ nav = {}, i18n = false, links, githubUrl, themeSwitch =
|
|
|
21
21
|
const menuItems = finalLinks.filter((item) => ['menu', 'all'].includes(item.on ?? 'all'));
|
|
22
22
|
return (_jsxs(Navbar, { children: [_jsx(Link, { href: nav.url ?? '/', className: "inline-flex items-center gap-2.5 font-semibold", children: nav.title }), nav.children, _jsx("ul", { className: "flex flex-row items-center gap-2 px-6 max-sm:hidden", children: navItems
|
|
23
23
|
.filter((item) => !isSecondary(item))
|
|
24
|
-
.map((item, i) => (_jsx(
|
|
24
|
+
.map((item, i) => (_jsx(NavigationMenuLinkItem, { item: item, className: "text-sm" }, i))) }), _jsxs("div", { className: "flex flex-row items-center justify-end gap-1.5 flex-1 max-lg:hidden", children: [searchToggle.enabled !== false &&
|
|
25
25
|
(searchToggle.components?.lg ?? (_jsx(LargeSearchToggle, { className: "w-full rounded-full ps-2.5 max-w-[240px]", hideIfDisabled: true }))), themeSwitch.enabled !== false &&
|
|
26
|
-
(themeSwitch.component ?? _jsx(ThemeToggle, { mode: themeSwitch?.mode })), i18n && (_jsx(LanguageToggle, { children: _jsx(Languages, { className: "size-5" }) })), _jsx("ul", { className: "flex flex-row gap-2 items-center empty:hidden", children: navItems.filter(isSecondary).map((item, i) => (_jsx(
|
|
27
|
-
|
|
28
|
-
i === 0 && 'ms-0',
|
|
29
|
-
i === navItems.length - 1 && 'me-0',
|
|
30
|
-
]) }, i))) })] }), _jsxs("ul", { className: "flex flex-row items-center ms-auto -me-1.5 lg:hidden", children: [searchToggle.enabled !== false &&
|
|
31
|
-
(searchToggle.components?.sm ?? (_jsx(SearchToggle, { className: "p-2", hideIfDisabled: true }))), _jsxs(Menu, { children: [_jsx(MenuTrigger, { "aria-label": "Toggle Menu", className: cn(buttonVariants({
|
|
26
|
+
(themeSwitch.component ?? _jsx(ThemeToggle, { mode: themeSwitch?.mode })), i18n && (_jsx(LanguageToggle, { children: _jsx(Languages, { className: "size-5" }) })), _jsx("ul", { className: "flex flex-row gap-2 items-center empty:hidden", children: navItems.filter(isSecondary).map((item, i) => (_jsx(NavigationMenuLinkItem, { className: cn(item.type === 'icon' && '-mx-1 first:ms-0 last:me-0'), item: item }, i))) })] }), _jsxs("ul", { className: "flex flex-row items-center ms-auto -me-1.5 lg:hidden", children: [searchToggle.enabled !== false &&
|
|
27
|
+
(searchToggle.components?.sm ?? (_jsx(SearchToggle, { className: "p-2", hideIfDisabled: true }))), _jsxs(NavigationMenuItem, { children: [_jsx(MobileNavigationMenuTrigger, { "aria-label": "Toggle Menu", className: cn(buttonVariants({
|
|
32
28
|
size: 'icon',
|
|
33
29
|
color: 'ghost',
|
|
34
30
|
className: 'group [&_svg]:size-5.5',
|
|
35
|
-
})), enableHover: nav.enableHoverToOpen, children: _jsx(ChevronDown, { className: "transition-transform duration-300 group-data-[state=open]:rotate-180" }) }), _jsxs(
|
|
31
|
+
})), enableHover: nav.enableHoverToOpen, children: _jsx(ChevronDown, { className: "transition-transform duration-300 group-data-[state=open]:rotate-180" }) }), _jsxs(MobileNavigationMenuContent, { className: "sm:flex-row sm:items-center sm:justify-end", children: [menuItems
|
|
36
32
|
.filter((item) => !isSecondary(item))
|
|
37
|
-
.map((item, i) => (_jsx(
|
|
33
|
+
.map((item, i) => (_jsx(MobileNavigationMenuLinkItem, { item: item, className: "sm:hidden" }, i))), _jsxs("div", { className: "-ms-1.5 flex flex-row items-center gap-2 max-sm:mt-2", children: [menuItems.filter(isSecondary).map((item, i) => (_jsx(MobileNavigationMenuLinkItem, { item: item, className: cn(item.type === 'icon' && '-mx-1 first:ms-0') }, i))), _jsx("div", { role: "separator", className: "flex-1" }), i18n && (_jsxs(LanguageToggle, { children: [_jsx(Languages, { className: "size-5" }), _jsx(LanguageToggleText, {}), _jsx(ChevronDown, { className: "size-3 text-fd-muted-foreground" })] })), themeSwitch.enabled !== false &&
|
|
38
34
|
(themeSwitch.component ?? (_jsx(ThemeToggle, { mode: themeSwitch?.mode })))] })] })] })] })] }));
|
|
39
35
|
}
|
|
40
36
|
function isSecondary(item) {
|
package/dist/style.css
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! tailwindcss v4.1.
|
|
1
|
+
/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */
|
|
2
2
|
@layer properties;
|
|
3
3
|
@layer theme, base, components, utilities;
|
|
4
4
|
@layer theme {
|
|
@@ -465,9 +465,6 @@
|
|
|
465
465
|
.-ms-1\.5 {
|
|
466
466
|
margin-inline-start: calc(var(--spacing) * -1.5);
|
|
467
467
|
}
|
|
468
|
-
.ms-0 {
|
|
469
|
-
margin-inline-start: calc(var(--spacing) * 0);
|
|
470
|
-
}
|
|
471
468
|
.ms-2 {
|
|
472
469
|
margin-inline-start: calc(var(--spacing) * 2);
|
|
473
470
|
}
|
|
@@ -486,9 +483,6 @@
|
|
|
486
483
|
.-me-2 {
|
|
487
484
|
margin-inline-end: calc(var(--spacing) * -2);
|
|
488
485
|
}
|
|
489
|
-
.me-0 {
|
|
490
|
-
margin-inline-end: calc(var(--spacing) * 0);
|
|
491
|
-
}
|
|
492
486
|
.me-1 {
|
|
493
487
|
margin-inline-end: calc(var(--spacing) * 1);
|
|
494
488
|
}
|
|
@@ -1921,6 +1915,11 @@
|
|
|
1921
1915
|
content: var(--tw-content);
|
|
1922
1916
|
}
|
|
1923
1917
|
}
|
|
1918
|
+
.first\:ms-0 {
|
|
1919
|
+
&:first-child {
|
|
1920
|
+
margin-inline-start: calc(var(--spacing) * 0);
|
|
1921
|
+
}
|
|
1922
|
+
}
|
|
1924
1923
|
.first\:mt-0 {
|
|
1925
1924
|
&:first-child {
|
|
1926
1925
|
margin-top: calc(var(--spacing) * 0);
|
|
@@ -1931,6 +1930,11 @@
|
|
|
1931
1930
|
padding-top: calc(var(--spacing) * 0);
|
|
1932
1931
|
}
|
|
1933
1932
|
}
|
|
1933
|
+
.last\:me-0 {
|
|
1934
|
+
&:last-child {
|
|
1935
|
+
margin-inline-end: calc(var(--spacing) * 0);
|
|
1936
|
+
}
|
|
1937
|
+
}
|
|
1934
1938
|
.last\:rounded-b-xl {
|
|
1935
1939
|
&:last-child {
|
|
1936
1940
|
border-bottom-right-radius: var(--radius-xl);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fumadocs-ui",
|
|
3
|
-
"version": "16.0.
|
|
3
|
+
"version": "16.0.12",
|
|
4
4
|
"description": "The framework for building a documentation website in Next.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"NextJs",
|
|
@@ -120,22 +120,22 @@
|
|
|
120
120
|
"postcss-selector-parser": "^7.1.0",
|
|
121
121
|
"react-medium-image-zoom": "^5.4.0",
|
|
122
122
|
"scroll-into-view-if-needed": "^3.1.0",
|
|
123
|
-
"tailwind-merge": "^3.
|
|
124
|
-
"fumadocs-core": "16.0.
|
|
123
|
+
"tailwind-merge": "^3.4.0",
|
|
124
|
+
"fumadocs-core": "16.0.12"
|
|
125
125
|
},
|
|
126
126
|
"devDependencies": {
|
|
127
|
-
"@next/eslint-plugin-next": "16.0.
|
|
128
|
-
"@tailwindcss/cli": "^4.1.
|
|
127
|
+
"@next/eslint-plugin-next": "16.0.3",
|
|
128
|
+
"@tailwindcss/cli": "^4.1.17",
|
|
129
129
|
"@types/lodash.merge": "^4.6.9",
|
|
130
|
-
"@types/node": "^24.10.
|
|
131
|
-
"@types/react": "^19.2.
|
|
132
|
-
"@types/react-dom": "^19.2.
|
|
133
|
-
"next": "16.0.
|
|
134
|
-
"tailwindcss": "^4.1.
|
|
130
|
+
"@types/node": "^24.10.1",
|
|
131
|
+
"@types/react": "^19.2.5",
|
|
132
|
+
"@types/react-dom": "^19.2.3",
|
|
133
|
+
"next": "16.0.3",
|
|
134
|
+
"tailwindcss": "^4.1.17",
|
|
135
135
|
"tsc-alias": "^1.8.16",
|
|
136
136
|
"@fumadocs/cli": "1.0.3",
|
|
137
137
|
"eslint-config-custom": "0.0.0",
|
|
138
|
-
"fumadocs-core": "16.0.
|
|
138
|
+
"fumadocs-core": "16.0.12",
|
|
139
139
|
"tsconfig": "0.0.0"
|
|
140
140
|
},
|
|
141
141
|
"peerDependencies": {
|