fumadocs-ui 16.3.1 → 16.4.0
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/dialog/search.d.ts +3 -1
- package/dist/components/dialog/search.d.ts.map +1 -1
- package/dist/components/dialog/search.js +26 -26
- package/dist/contexts/i18n.d.ts.map +1 -1
- package/dist/contexts/i18n.js +0 -1
- package/dist/contexts/search.d.ts.map +1 -1
- package/dist/contexts/search.js +0 -1
- package/dist/contexts/tree.d.ts.map +1 -1
- package/dist/contexts/tree.js +0 -1
- package/dist/layouts/docs/index.d.ts.map +1 -1
- package/dist/layouts/docs/index.js +7 -4
- package/dist/layouts/home/client.d.ts.map +1 -1
- package/dist/layouts/home/client.js +4 -2
- package/dist/layouts/notebook/index.d.ts.map +1 -1
- package/dist/layouts/notebook/index.js +7 -4
- package/dist/layouts/shared/index.d.ts +3 -2
- package/dist/layouts/shared/index.d.ts.map +1 -1
- package/dist/layouts/shared/index.js +6 -0
- package/package.json +5 -5
|
@@ -14,10 +14,11 @@ export type { SharedProps };
|
|
|
14
14
|
export interface SearchDialogProps extends SharedProps {
|
|
15
15
|
search: string;
|
|
16
16
|
onSearchChange: (v: string) => void;
|
|
17
|
+
onSelect?: (item: SearchItemType) => void;
|
|
17
18
|
isLoading?: boolean;
|
|
18
19
|
children: ReactNode;
|
|
19
20
|
}
|
|
20
|
-
export declare function SearchDialog({ open, onOpenChange, search, onSearchChange, isLoading, children, }: SearchDialogProps): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
export declare function SearchDialog({ open, onOpenChange, search, onSearchChange, isLoading, onSelect: onSelectProp, children, }: SearchDialogProps): import("react/jsx-runtime").JSX.Element;
|
|
21
22
|
export declare function SearchDialogHeader(props: ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
|
|
22
23
|
export declare function SearchDialogInput(props: ComponentProps<'input'>): import("react/jsx-runtime").JSX.Element;
|
|
23
24
|
export declare function SearchDialogClose({ children, className, ...props }: ComponentProps<'button'>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -58,6 +59,7 @@ export declare function useSearch(): {
|
|
|
58
59
|
onOpenChange: (open: boolean) => void;
|
|
59
60
|
search: string;
|
|
60
61
|
onSearchChange: (v: string) => void;
|
|
62
|
+
onSelect: (item: SearchItemType) => void;
|
|
61
63
|
isLoading: boolean;
|
|
62
64
|
};
|
|
63
65
|
export declare function useTagsList(): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/components/dialog/search.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,cAAc,EAGnB,KAAK,SAAS,EAQf,MAAM,OAAO,CAAC;AAGf,OAAO,EAEL,aAAa,EACb,aAAa,EAEd,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,IAAI,cAAc,EACpC,MAAM,sBAAsB,CAAC;AAG9B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKrD,MAAM,MAAM,cAAc,GACtB,CAAC,cAAc,GAAG;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC,GACF;IACE,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAGN,YAAY,EAAE,WAAW,EAAE,CAAC;AAE5B,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAsBD,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,cAAc,EACd,SAAiB,EACjB,QAAQ,GACT,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/components/dialog/search.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
import { ChevronRight, Hash, Search as SearchIcon } from '@fumadocs/ui/icons';
|
|
4
|
-
import { createContext, Fragment,
|
|
4
|
+
import { createContext, Fragment, use, useCallback, useEffect, useEffectEvent, useMemo, useRef, useState, } from 'react';
|
|
5
5
|
import { I18nLabel, useI18n } from '../../contexts/i18n.js';
|
|
6
6
|
import { cn } from '@fumadocs/ui/cn';
|
|
7
7
|
import { Dialog, DialogContent, DialogOverlay, DialogTitle, } from '@radix-ui/react-dialog';
|
|
@@ -13,17 +13,30 @@ import { buttonVariants } from '../../components/ui/button.js';
|
|
|
13
13
|
const Context = createContext(null);
|
|
14
14
|
const ListContext = createContext(null);
|
|
15
15
|
const TagsListContext = createContext(null);
|
|
16
|
-
export function SearchDialog({ open, onOpenChange, search, onSearchChange, isLoading = false, children, }) {
|
|
17
|
-
const
|
|
16
|
+
export function SearchDialog({ open, onOpenChange, search, onSearchChange, isLoading = false, onSelect: onSelectProp, children, }) {
|
|
17
|
+
const router = useRouter();
|
|
18
|
+
const onSelect = useEffectEvent((item) => {
|
|
19
|
+
if (item.type === 'action') {
|
|
20
|
+
item.onSelect();
|
|
21
|
+
}
|
|
22
|
+
else if (item.external) {
|
|
23
|
+
window.open(item.url, '_blank')?.focus();
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
router.push(item.url);
|
|
27
|
+
}
|
|
28
|
+
onOpenChange(false);
|
|
29
|
+
onSelectProp?.(item);
|
|
30
|
+
});
|
|
18
31
|
return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsx(Context.Provider, { value: useMemo(() => ({
|
|
19
32
|
open,
|
|
20
33
|
onOpenChange,
|
|
21
34
|
search,
|
|
22
35
|
onSearchChange,
|
|
23
|
-
|
|
24
|
-
|
|
36
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks -- used in child components
|
|
37
|
+
onSelect,
|
|
25
38
|
isLoading,
|
|
26
|
-
}), [
|
|
39
|
+
}), [isLoading, onOpenChange, onSearchChange, open, search]), children: children }) }));
|
|
27
40
|
}
|
|
28
41
|
export function SearchDialogHeader(props) {
|
|
29
42
|
return (_jsx("div", { ...props, className: cn('flex flex-row items-center gap-2 p-3', props.className) }));
|
|
@@ -53,21 +66,8 @@ export function SearchDialogContent({ children, ...props }) {
|
|
|
53
66
|
}
|
|
54
67
|
export function SearchDialogList({ items = null, Empty = () => (_jsx("div", { className: "py-12 text-center text-sm text-fd-muted-foreground", children: _jsx(I18nLabel, { label: "searchNoResult" }) })), Item = (props) => _jsx(SearchDialogListItem, { ...props }), ...props }) {
|
|
55
68
|
const ref = useRef(null);
|
|
69
|
+
const { onSelect } = useSearch();
|
|
56
70
|
const [active, setActive] = useState(() => items && items.length > 0 ? items[0].id : null);
|
|
57
|
-
const { onOpenChange } = useSearch();
|
|
58
|
-
const router = useRouter();
|
|
59
|
-
const onOpen = (item) => {
|
|
60
|
-
if (item.type === 'action') {
|
|
61
|
-
item.onSelect();
|
|
62
|
-
}
|
|
63
|
-
else if (item.external) {
|
|
64
|
-
window.open(item.url, '_blank')?.focus();
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
router.push(item.url);
|
|
68
|
-
}
|
|
69
|
-
onOpenChange(false);
|
|
70
|
-
};
|
|
71
71
|
const onKey = useEffectEvent((e) => {
|
|
72
72
|
if (!items || e.isComposing)
|
|
73
73
|
return;
|
|
@@ -85,7 +85,7 @@ export function SearchDialogList({ items = null, Empty = () => (_jsx("div", { cl
|
|
|
85
85
|
if (e.key === 'Enter') {
|
|
86
86
|
const selected = items.find((item) => item.id === active);
|
|
87
87
|
if (selected)
|
|
88
|
-
|
|
88
|
+
onSelect(selected);
|
|
89
89
|
e.preventDefault();
|
|
90
90
|
}
|
|
91
91
|
});
|
|
@@ -114,7 +114,7 @@ export function SearchDialogList({ items = null, Empty = () => (_jsx("div", { cl
|
|
|
114
114
|
return (_jsx("div", { ...props, ref: ref, "data-empty": items === null, className: cn('overflow-hidden h-(--fd-animated-height) transition-[height]', props.className), children: _jsx("div", { className: cn('w-full flex flex-col overflow-y-auto max-h-[460px] p-1', !items && 'hidden'), children: _jsxs(ListContext.Provider, { value: useMemo(() => ({
|
|
115
115
|
active,
|
|
116
116
|
setActive,
|
|
117
|
-
}), [active]), children: [items?.length === 0 && Empty(), items?.map((item) => (_jsx(Fragment, { children: Item({ item, onClick: () =>
|
|
117
|
+
}), [active]), children: [items?.length === 0 && Empty(), items?.map((item) => (_jsx(Fragment, { children: Item({ item, onClick: () => onSelect(item) }) }, item.id)))] }) }) }));
|
|
118
118
|
}
|
|
119
119
|
export function SearchDialogListItem({ item, className, children, renderHighlights: render = renderHighlights, ...props }) {
|
|
120
120
|
const { active: activeId, setActive } = useSearchList();
|
|
@@ -123,7 +123,7 @@ export function SearchDialogListItem({ item, className, children, renderHighligh
|
|
|
123
123
|
children ?? (children = item.node);
|
|
124
124
|
}
|
|
125
125
|
else {
|
|
126
|
-
children ?? (children = _jsxs(_Fragment, { children: [_jsx("div", { className: "inline-flex items-center text-fd-muted-foreground text-xs empty:hidden", children: item.breadcrumbs?.map((item, i) => (_jsxs(Fragment, { children: [i > 0 && _jsx(ChevronRight, { className: "size-4" }), item] }, i))) }), item.type !== 'page' && (_jsx("div", { role: "none", className: "absolute start-3 inset-y-0 w-px bg-fd-border" })), _jsxs("p", { className: cn('min-w-0 truncate', item.type !== 'page' && 'ps-4', item.type === 'page' || item.type === 'heading'
|
|
126
|
+
children ?? (children = _jsxs(_Fragment, { children: [_jsx("div", { className: "inline-flex items-center text-fd-muted-foreground text-xs empty:hidden", children: item.breadcrumbs?.map((item, i) => (_jsxs(Fragment, { children: [i > 0 && _jsx(ChevronRight, { className: "size-4 rtl:rotate-180" }), item] }, i))) }), item.type !== 'page' && (_jsx("div", { role: "none", className: "absolute start-3 inset-y-0 w-px bg-fd-border" })), _jsxs("p", { className: cn('min-w-0 truncate', item.type !== 'page' && 'ps-4', item.type === 'page' || item.type === 'heading'
|
|
127
127
|
? 'font-medium'
|
|
128
128
|
: 'text-fd-popover-foreground/80'), children: [item.type === 'heading' && (_jsx(Hash, { className: "inline me-1 size-4 text-fd-muted-foreground" })), item.contentWithHighlights
|
|
129
129
|
? render(item.contentWithHighlights)
|
|
@@ -173,19 +173,19 @@ function renderHighlights(highlights) {
|
|
|
173
173
|
});
|
|
174
174
|
}
|
|
175
175
|
export function useSearch() {
|
|
176
|
-
const ctx =
|
|
176
|
+
const ctx = use(Context);
|
|
177
177
|
if (!ctx)
|
|
178
178
|
throw new Error('Missing <SearchDialog />');
|
|
179
179
|
return ctx;
|
|
180
180
|
}
|
|
181
181
|
export function useTagsList() {
|
|
182
|
-
const ctx =
|
|
182
|
+
const ctx = use(TagsListContext);
|
|
183
183
|
if (!ctx)
|
|
184
184
|
throw new Error('Missing <TagsList />');
|
|
185
185
|
return ctx;
|
|
186
186
|
}
|
|
187
187
|
export function useSearchList() {
|
|
188
|
-
const ctx =
|
|
188
|
+
const ctx = use(ListContext);
|
|
189
189
|
if (!ctx)
|
|
190
190
|
throw new Error('Missing <SearchDialogList />');
|
|
191
191
|
return ctx;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/contexts/i18n.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/contexts/i18n.tsx"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC"}
|
package/dist/contexts/i18n.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/contexts/search.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/contexts/search.tsx"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC"}
|
package/dist/contexts/search.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../src/contexts/tree.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../src/contexts/tree.tsx"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC"}
|
package/dist/contexts/tree.js
CHANGED
|
@@ -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,
|
|
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,EACL,KAAK,eAAe,EAGrB,MAAM,kBAAkB,CAAC;AAkB1B,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,2CAqNjB"}
|
|
@@ -4,13 +4,12 @@ import { Languages, Sidebar as SidebarIcon } from '@fumadocs/ui/icons';
|
|
|
4
4
|
import { cn } from '@fumadocs/ui/cn';
|
|
5
5
|
import { buttonVariants } from '../../components/ui/button.js';
|
|
6
6
|
import { Sidebar, SidebarCollapseTrigger, SidebarContent, SidebarDrawer, SidebarLinkItem, SidebarPageTree, SidebarTrigger, SidebarViewport, } from './sidebar.js';
|
|
7
|
-
import { resolveLinkItems } from '../../layouts/shared/index.js';
|
|
7
|
+
import { renderTitleNav, resolveLinkItems, } from '../../layouts/shared/index.js';
|
|
8
8
|
import { LinkItem } from '@fumadocs/ui/link-item';
|
|
9
9
|
import { LanguageToggle, LanguageToggleText, } from '../../layouts/shared/language-toggle.js';
|
|
10
10
|
import { LayoutBody, LayoutContextProvider, LayoutHeader, LayoutTabs, } from './client.js';
|
|
11
11
|
import { TreeContextProvider } from '../../contexts/tree.js';
|
|
12
12
|
import { ThemeToggle } from '../shared/theme-toggle.js';
|
|
13
|
-
import Link from 'fumadocs-core/link';
|
|
14
13
|
import { LargeSearchToggle, SearchToggle, } from '../../layouts/shared/search-toggle.js';
|
|
15
14
|
import { getSidebarTabs, } from '../../components/sidebar/tabs/index.js';
|
|
16
15
|
import { SidebarTabsDropdown, } from '../../components/sidebar/tabs/dropdown.js';
|
|
@@ -36,7 +35,9 @@ export function DocsLayout({ nav: { transparentMode, ...nav } = {}, sidebar: { t
|
|
|
36
35
|
const viewport = (_jsxs(SidebarViewport, { children: [links
|
|
37
36
|
.filter((v) => v.type !== 'icon')
|
|
38
37
|
.map((item, i, list) => (_jsx(SidebarLinkItem, { item: item, className: cn(i === list.length - 1 && 'mb-4') }, i))), _jsx(SidebarPageTree, { ...components })] }));
|
|
39
|
-
return (_jsxs(_Fragment, { children: [_jsxs(SidebarContent, { ...rest, children: [_jsxs("div", { className: "flex flex-col gap-3 p-4 pb-2", children: [_jsxs("div", { className: "flex", children: [
|
|
38
|
+
return (_jsxs(_Fragment, { children: [_jsxs(SidebarContent, { ...rest, children: [_jsxs("div", { className: "flex flex-col gap-3 p-4 pb-2", children: [_jsxs("div", { className: "flex", children: [renderTitleNav(nav, {
|
|
39
|
+
className: 'inline-flex text-[0.9375rem] items-center gap-2.5 font-medium me-auto',
|
|
40
|
+
}), nav.children, collapsible && (_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
|
|
40
41
|
color: 'ghost',
|
|
41
42
|
size: 'icon-sm',
|
|
42
43
|
className: 'mb-auto text-fd-muted-foreground',
|
|
@@ -57,7 +58,9 @@ export function DocsLayout({ nav: { transparentMode, ...nav } = {}, sidebar: { t
|
|
|
57
58
|
})), 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
59
|
}
|
|
59
60
|
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
|
-
(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: [
|
|
61
|
+
(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: [renderTitleNav(nav, {
|
|
62
|
+
className: 'inline-flex items-center gap-2.5 font-semibold',
|
|
63
|
+
}), _jsx("div", { className: "flex-1", children: nav.children }), searchToggle.enabled !== false &&
|
|
61
64
|
(searchToggle.components?.sm ?? (_jsx(SearchToggle, { className: "p-2", hideIfDisabled: true }))), sidebarEnabled && (_jsx(SidebarTrigger, { className: cn(buttonVariants({
|
|
62
65
|
color: 'ghost',
|
|
63
66
|
size: 'icon-sm',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/layouts/home/client.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/layouts/home/client.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,GAAG,CAAC;AAazC,eAAO,MAAM,eAAe;;8EAiB1B,CAAC;AAEH,wBAAgB,MAAM,CAAC,EACrB,GAAQ,EACR,IAAY,EACZ,KAAK,EACL,SAAS,EACT,WAAgB,EAChB,YAAiB,GAClB,EAAE,eAAe,2CAuHjB"}
|
|
@@ -4,7 +4,7 @@ import { Fragment, useMemo, useState } from 'react';
|
|
|
4
4
|
import { cva } from 'class-variance-authority';
|
|
5
5
|
import Link from 'fumadocs-core/link';
|
|
6
6
|
import { cn } from '@fumadocs/ui/cn';
|
|
7
|
-
import { resolveLinkItems, } from '../../layouts/shared/index.js';
|
|
7
|
+
import { renderTitleNav, resolveLinkItems, } from '../../layouts/shared/index.js';
|
|
8
8
|
import { LinkItem } from '@fumadocs/ui/link-item';
|
|
9
9
|
import { NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, } from '../../components/ui/navigation-menu.js';
|
|
10
10
|
import { buttonVariants } from '../../components/ui/button.js';
|
|
@@ -50,7 +50,9 @@ export function Header({ nav = {}, i18n = false, links, githubUrl, themeSwitch =
|
|
|
50
50
|
}
|
|
51
51
|
return { navItems, menuItems };
|
|
52
52
|
}, [links, githubUrl]);
|
|
53
|
-
return (_jsxs(HeaderNavigationMenu, { transparentMode: nav.transparentMode, children: [
|
|
53
|
+
return (_jsxs(HeaderNavigationMenu, { transparentMode: nav.transparentMode, children: [renderTitleNav(nav, {
|
|
54
|
+
className: 'inline-flex items-center gap-2.5 font-semibold',
|
|
55
|
+
}), nav.children, _jsx("ul", { className: "flex flex-row items-center gap-2 px-6 max-sm:hidden", children: navItems
|
|
54
56
|
.filter((item) => !isSecondary(item))
|
|
55
57
|
.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 &&
|
|
56
58
|
(searchToggle.components?.lg ?? (_jsx(LargeSearchToggle, { className: "w-full rounded-full ps-2.5 max-w-[240px]", hideIfDisabled: true }))), themeSwitch.enabled !== false &&
|
|
@@ -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,
|
|
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,EACL,KAAK,eAAe,EAGrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,OAAO,EAQR,MAAM,WAAW,CAAC;AAOnB,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AAazD,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,2CAsNhD"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useMemo, } from 'react';
|
|
3
|
-
import { resolveLinkItems } from '../../layouts/shared/index.js';
|
|
3
|
+
import { renderTitleNav, resolveLinkItems, } from '../../layouts/shared/index.js';
|
|
4
4
|
import { Sidebar, SidebarCollapseTrigger, SidebarContent, SidebarDrawer, SidebarLinkItem, SidebarPageTree, SidebarTrigger, SidebarViewport, } from './sidebar.js';
|
|
5
5
|
import { TreeContextProvider } from '../../contexts/tree.js';
|
|
6
6
|
import { cn } from '@fumadocs/ui/cn';
|
|
@@ -9,7 +9,6 @@ import { Languages, Sidebar as SidebarIcon, X } from '@fumadocs/ui/icons';
|
|
|
9
9
|
import { LanguageToggle } from '../../layouts/shared/language-toggle.js';
|
|
10
10
|
import { ThemeToggle } from '../../layouts/shared/theme-toggle.js';
|
|
11
11
|
import { LayoutBody, LayoutContextProvider, LayoutHeader, LayoutHeaderTabs, NavbarLinkItem, } from '../../layouts/notebook/client.js';
|
|
12
|
-
import Link from 'fumadocs-core/link';
|
|
13
12
|
import { LargeSearchToggle, SearchToggle, } from '../../layouts/shared/search-toggle.js';
|
|
14
13
|
import { LinkItem } from '@fumadocs/ui/link-item';
|
|
15
14
|
import { getSidebarTabs, } from '../../components/sidebar/tabs/index.js';
|
|
@@ -42,7 +41,9 @@ export function DocsLayout(props) {
|
|
|
42
41
|
const viewport = (_jsxs(SidebarViewport, { children: [links
|
|
43
42
|
.filter((item) => item.type !== 'icon')
|
|
44
43
|
.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, { children: [navMode === 'auto' && (_jsxs("div", { className: "flex justify-between", children: [
|
|
44
|
+
return (_jsxs(_Fragment, { children: [_jsxs(SidebarContent, { ...rest, children: [_jsxs(Header, { children: [navMode === 'auto' && (_jsxs("div", { className: "flex justify-between", children: [renderTitleNav(nav, {
|
|
45
|
+
className: 'inline-flex items-center gap-2.5 font-medium',
|
|
46
|
+
}), collapsible && (_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
|
|
46
47
|
color: 'ghost',
|
|
47
48
|
size: 'icon-sm',
|
|
48
49
|
className: 'mt-px mb-auto text-fd-muted-foreground',
|
|
@@ -69,7 +70,9 @@ function DocsNavbar({ links, tabs, tabMode = 'sidebar', sidebar: { collapsible:
|
|
|
69
70
|
'hidden has-data-[collapsed=true]:md:flex max-md:flex'), children: [sidebarCollapsible && navMode === 'auto' && (_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
|
|
70
71
|
color: 'ghost',
|
|
71
72
|
size: 'icon-sm',
|
|
72
|
-
}), 'text-fd-muted-foreground data-[collapsed=false]:hidden max-md:hidden'), children: _jsx(SidebarIcon, {}) })),
|
|
73
|
+
}), 'text-fd-muted-foreground data-[collapsed=false]:hidden max-md:hidden'), children: _jsx(SidebarIcon, {}) })), renderTitleNav(nav, {
|
|
74
|
+
className: cn('inline-flex items-center gap-2.5 font-semibold', navMode === 'auto' && 'md:hidden'),
|
|
75
|
+
})] }), searchToggle.enabled !== false &&
|
|
73
76
|
(searchToggle.components?.lg ? (_jsx("div", { className: cn('w-full my-auto max-md:hidden', navMode === 'top' ? 'rounded-xl max-w-sm' : 'max-w-[240px]'), children: searchToggle.components.lg })) : (_jsx(LargeSearchToggle, { hideIfDisabled: true, className: cn('w-full my-auto max-md:hidden', navMode === 'top'
|
|
74
77
|
? 'rounded-xl max-w-sm ps-2.5'
|
|
75
78
|
: 'max-w-[240px]') }))), _jsxs("div", { className: "flex flex-1 items-center justify-end md:gap-2", children: [_jsx("div", { className: "flex items-center gap-6 empty:hidden max-lg:hidden", children: links
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type { ReactNode } from 'react';
|
|
1
|
+
import type { ComponentProps, ReactNode } from 'react';
|
|
2
2
|
import type { I18nConfig } from 'fumadocs-core/i18n';
|
|
3
3
|
import type { LinkItemType } from '@fumadocs/ui/link-item';
|
|
4
4
|
export interface NavOptions {
|
|
5
5
|
enabled: boolean;
|
|
6
6
|
component: ReactNode;
|
|
7
|
-
title?: ReactNode;
|
|
7
|
+
title?: ReactNode | ((props: ComponentProps<'a'>) => ReactNode);
|
|
8
8
|
/**
|
|
9
9
|
* Redirect url of title
|
|
10
10
|
* @defaultValue '/'
|
|
@@ -52,5 +52,6 @@ export interface BaseLayoutProps {
|
|
|
52
52
|
* Get link items with shortcuts
|
|
53
53
|
*/
|
|
54
54
|
export declare function resolveLinkItems({ links, githubUrl, }: Pick<BaseLayoutProps, 'links' | 'githubUrl'>): LinkItemType[];
|
|
55
|
+
export declare function renderTitleNav({ title, url }: Partial<NavOptions>, props: ComponentProps<'a'>): string | number | bigint | boolean | import("react/jsx-runtime").JSX.Element | Iterable<ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | null | undefined;
|
|
55
56
|
export type * from '@fumadocs/ui/link-item';
|
|
56
57
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layouts/shared/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layouts/shared/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAG3D,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IAErB,KAAK,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC;IAEhE;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;;OAIG;IACH,eAAe,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IAE5C,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE;QACZ,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB,IAAI,CAAC,EAAE,YAAY,GAAG,mBAAmB,CAAC;KAC3C,CAAC;IAEF,YAAY,CAAC,EAAE,OAAO,CAAC;QACrB,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,EAAE,OAAO,CAAC;YAClB,EAAE,EAAE,SAAS,CAAC;YACd,EAAE,EAAE,SAAS,CAAC;SACf,CAAC,CAAC;KACJ,CAAC,CAAC;IAEH;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IAE5B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB;;OAEG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAE1B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,KAAU,EACV,SAAS,GACV,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,GAAG,WAAW,CAAC,GAAG,YAAY,EAAE,CAkB/D;AAED,wBAAgB,cAAc,CAC5B,EAAE,KAAK,EAAE,GAAS,EAAE,EAAE,OAAO,CAAC,UAAU,CAAC,EACzC,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,2UAQ3B;AAED,mBAAmB,wBAAwB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import Link from 'fumadocs-core/link';
|
|
2
3
|
/**
|
|
3
4
|
* Get link items with shortcuts
|
|
4
5
|
*/
|
|
@@ -15,3 +16,8 @@ export function resolveLinkItems({ links = [], githubUrl, }) {
|
|
|
15
16
|
});
|
|
16
17
|
return result;
|
|
17
18
|
}
|
|
19
|
+
export function renderTitleNav({ title, url = '/' }, props) {
|
|
20
|
+
if (typeof title === 'function')
|
|
21
|
+
return title({ href: url, ...props });
|
|
22
|
+
return (_jsx(Link, { href: url, ...props, children: title }));
|
|
23
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fumadocs-ui",
|
|
3
|
-
"version": "16.
|
|
3
|
+
"version": "16.4.0",
|
|
4
4
|
"description": "The Radix UI version of Fumadocs UI",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Fumadocs",
|
|
@@ -105,8 +105,8 @@
|
|
|
105
105
|
"next-themes": "^0.4.6",
|
|
106
106
|
"react-medium-image-zoom": "^5.4.0",
|
|
107
107
|
"scroll-into-view-if-needed": "^3.1.0",
|
|
108
|
-
"@fumadocs/ui": "16.
|
|
109
|
-
"fumadocs-core": "16.
|
|
108
|
+
"@fumadocs/ui": "16.4.0",
|
|
109
|
+
"fumadocs-core": "16.4.0"
|
|
110
110
|
},
|
|
111
111
|
"devDependencies": {
|
|
112
112
|
"@tailwindcss/cli": "^4.1.18",
|
|
@@ -115,9 +115,9 @@
|
|
|
115
115
|
"@types/react-dom": "^19.2.3",
|
|
116
116
|
"tailwindcss": "^4.1.18",
|
|
117
117
|
"tsc-alias": "^1.8.16",
|
|
118
|
-
"@fumadocs/cli": "1.
|
|
118
|
+
"@fumadocs/cli": "1.2.0",
|
|
119
119
|
"eslint-config-custom": "0.0.0",
|
|
120
|
-
"fumadocs-core": "16.
|
|
120
|
+
"fumadocs-core": "16.4.0",
|
|
121
121
|
"tsconfig": "0.0.0"
|
|
122
122
|
},
|
|
123
123
|
"peerDependencies": {
|