fumadocs-ui 15.5.1 → 15.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/css/preset.css +6 -14
- package/dist/components/dialog/search-algolia.d.ts.map +1 -1
- package/dist/components/dialog/search-algolia.js +11 -7
- package/dist/components/dialog/search-default.d.ts.map +1 -1
- package/dist/components/dialog/search-default.js +11 -7
- package/dist/components/dialog/search-orama.d.ts.map +1 -1
- package/dist/components/dialog/search-orama.js +11 -7
- package/dist/components/dialog/search.d.ts +2 -2
- package/dist/components/dialog/search.d.ts.map +1 -1
- package/dist/components/dialog/search.js +37 -18
- package/dist/components/ui/popover.js +1 -1
- package/dist/layouts/docs.d.ts +1 -1
- package/dist/layouts/docs.d.ts.map +1 -1
- package/dist/layouts/docs.js +8 -9
- package/dist/mdx.server.d.ts.map +1 -1
- package/dist/mdx.server.js +2 -1
- package/dist/page.server.d.ts.map +1 -1
- package/dist/page.server.js +3 -2
- package/dist/style.css +43 -26
- package/package.json +20 -13
package/css/preset.css
CHANGED
|
@@ -21,11 +21,11 @@
|
|
|
21
21
|
--animate-fd-fade-in: fd-fade-in 300ms ease;
|
|
22
22
|
--animate-fd-fade-out: fd-fade-out 300ms ease;
|
|
23
23
|
|
|
24
|
-
--animate-fd-dialog-in: fd-dialog-in
|
|
25
|
-
--animate-fd-dialog-out: fd-dialog-out
|
|
24
|
+
--animate-fd-dialog-in: fd-dialog-in 300ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
25
|
+
--animate-fd-dialog-out: fd-dialog-out 300ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
26
26
|
|
|
27
|
-
--animate-fd-popover-in: fd-popover-in
|
|
28
|
-
--animate-fd-popover-out: fd-popover-out
|
|
27
|
+
--animate-fd-popover-in: fd-popover-in 130ms ease;
|
|
28
|
+
--animate-fd-popover-out: fd-popover-out 130ms ease;
|
|
29
29
|
|
|
30
30
|
--animate-fd-collapsible-down: fd-collapsible-down 150ms
|
|
31
31
|
cubic-bezier(0.45, 0, 0.55, 1);
|
|
@@ -110,22 +110,14 @@
|
|
|
110
110
|
@keyframes fd-popover-in {
|
|
111
111
|
from {
|
|
112
112
|
opacity: 0;
|
|
113
|
-
transform: translateY(-12px);
|
|
114
|
-
}
|
|
115
|
-
to {
|
|
116
|
-
opacity: 1;
|
|
117
|
-
transform: translateY(0);
|
|
113
|
+
transform: translateY(-12px) scale(0.9);
|
|
118
114
|
}
|
|
119
115
|
}
|
|
120
116
|
|
|
121
117
|
@keyframes fd-popover-out {
|
|
122
|
-
from {
|
|
123
|
-
opacity: 1;
|
|
124
|
-
transform: translateY(0);
|
|
125
|
-
}
|
|
126
118
|
to {
|
|
127
119
|
opacity: 0;
|
|
128
|
-
transform: translateY(-12px);
|
|
120
|
+
transform: translateY(-12px) scale(0.9);
|
|
129
121
|
}
|
|
130
122
|
}
|
|
131
123
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-algolia.d.ts","sourceRoot":"","sources":["../../../src/components/dialog/search-algolia.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,cAAc,EAEpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,OAAO,CAAC;AAgB1D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAG1E,MAAM,WAAW,wBAAyB,SAAQ,WAAW;IAC3D,aAAa,EAAE,cAAc,CAAC;IAC9B,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IAErB,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IAEjB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,aAAa,EACb,IAAS,EACT,UAAU,EACV,WAAmB,EACnB,UAAkB,EAClB,KAAU,EACV,MAAM,EACN,GAAG,KAAK,EACT,EAAE,wBAAwB,
|
|
1
|
+
{"version":3,"file":"search-algolia.d.ts","sourceRoot":"","sources":["../../../src/components/dialog/search-algolia.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,cAAc,EAEpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,OAAO,CAAC;AAgB1D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAG1E,MAAM,WAAW,wBAAyB,SAAQ,WAAW;IAC3D,aAAa,EAAE,cAAc,CAAC;IAC9B,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IAErB,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IAEjB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,aAAa,EACb,IAAS,EACT,UAAU,EACV,WAAmB,EACnB,UAAkB,EAClB,KAAU,EACV,MAAM,EACN,GAAG,KAAK,EACT,EAAE,wBAAwB,2CA4D1B"}
|
|
@@ -14,17 +14,21 @@ export default function AlgoliaSearchDialog({ searchOptions, tags = [], defaultT
|
|
|
14
14
|
locale,
|
|
15
15
|
...searchOptions,
|
|
16
16
|
});
|
|
17
|
-
const defaultItems = useMemo(() =>
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
17
|
+
const defaultItems = useMemo(() => {
|
|
18
|
+
if (links.length === 0)
|
|
19
|
+
return null;
|
|
20
|
+
return links.map(([name, link]) => ({
|
|
21
|
+
type: 'page',
|
|
22
|
+
id: name,
|
|
23
|
+
content: name,
|
|
24
|
+
url: link,
|
|
25
|
+
}));
|
|
26
|
+
}, [links]);
|
|
23
27
|
useOnChange(defaultTag, (v) => {
|
|
24
28
|
setTag(v);
|
|
25
29
|
});
|
|
26
30
|
const label = showAlgolia && _jsx(AlgoliaTitle, {});
|
|
27
|
-
return (_jsxs(SearchDialog, { search: search, onSearchChange: setSearch, isLoading: query.isLoading, ...props, children: [_jsx(SearchDialogOverlay, {}), _jsxs(SearchDialogContent, { children: [_jsxs(SearchDialogHeader, { children: [_jsx(SearchDialogIcon, {}), _jsx(SearchDialogInput, {}), _jsx(SearchDialogClose, {})] }),
|
|
31
|
+
return (_jsxs(SearchDialog, { search: search, onSearchChange: setSearch, isLoading: query.isLoading, ...props, children: [_jsx(SearchDialogOverlay, {}), _jsxs(SearchDialogContent, { children: [_jsxs(SearchDialogHeader, { children: [_jsx(SearchDialogIcon, {}), _jsx(SearchDialogInput, {}), _jsx(SearchDialogClose, {})] }), _jsx(SearchDialogList, { items: query.data !== 'empty' ? query.data : defaultItems })] }), _jsxs(SearchDialogFooter, { children: [tags.length > 0 ? (_jsxs(TagsList, { tag: tag, onTagChange: setTag, allowClear: allowClear, children: [tags.map((tag) => (_jsx(TagsListItem, { value: tag.value, children: tag.name }, tag.value))), label] })) : (label), footer] })] }));
|
|
28
32
|
}
|
|
29
33
|
function AlgoliaTitle() {
|
|
30
34
|
return (_jsx("a", { href: "https://algolia.com", rel: "noreferrer noopener", className: "ms-auto text-xs text-fd-muted-foreground", children: "Search powered by Algolia" }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-default.d.ts","sourceRoot":"","sources":["../../../src/components/dialog/search-default.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,OAAO,CAAC;AAiB1D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE1E,MAAM,WAAW,wBAAyB,SAAQ,WAAW;IAC3D,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IAErB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAE1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IAEjB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,UAAU,EACV,IAAS,EACT,GAAG,EACH,OAAO,EACP,IAAc,EACd,UAAkB,EAClB,KAAU,EACV,MAAM,EACN,GAAG,KAAK,EACT,EAAE,wBAAwB,
|
|
1
|
+
{"version":3,"file":"search-default.d.ts","sourceRoot":"","sources":["../../../src/components/dialog/search-default.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,OAAO,CAAC;AAiB1D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE1E,MAAM,WAAW,wBAAyB,SAAQ,WAAW;IAC3D,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IAErB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAE1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IAEjB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,UAAU,EACV,IAAS,EACT,GAAG,EACH,OAAO,EACP,IAAc,EACd,UAAkB,EAClB,KAAU,EACV,MAAM,EACN,GAAG,KAAK,EACT,EAAE,wBAAwB,2CAkE1B"}
|
|
@@ -23,14 +23,18 @@ export default function DefaultSearchDialog({ defaultTag, tags = [], api, delayM
|
|
|
23
23
|
tag,
|
|
24
24
|
delayMs,
|
|
25
25
|
});
|
|
26
|
-
const defaultItems = useMemo(() =>
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
26
|
+
const defaultItems = useMemo(() => {
|
|
27
|
+
if (links.length === 0)
|
|
28
|
+
return null;
|
|
29
|
+
return links.map(([name, link]) => ({
|
|
30
|
+
type: 'page',
|
|
31
|
+
id: name,
|
|
32
|
+
content: name,
|
|
33
|
+
url: link,
|
|
34
|
+
}));
|
|
35
|
+
}, [links]);
|
|
32
36
|
useOnChange(defaultTag, (v) => {
|
|
33
37
|
setTag(v);
|
|
34
38
|
});
|
|
35
|
-
return (_jsxs(SearchDialog, { search: search, onSearchChange: setSearch, isLoading: query.isLoading, ...props, children: [_jsx(SearchDialogOverlay, {}), _jsxs(SearchDialogContent, { children: [_jsxs(SearchDialogHeader, { children: [_jsx(SearchDialogIcon, {}), _jsx(SearchDialogInput, {}), _jsx(SearchDialogClose, {})] }),
|
|
39
|
+
return (_jsxs(SearchDialog, { search: search, onSearchChange: setSearch, isLoading: query.isLoading, ...props, children: [_jsx(SearchDialogOverlay, {}), _jsxs(SearchDialogContent, { children: [_jsxs(SearchDialogHeader, { children: [_jsx(SearchDialogIcon, {}), _jsx(SearchDialogInput, {}), _jsx(SearchDialogClose, {})] }), _jsx(SearchDialogList, { items: query.data !== 'empty' ? query.data : defaultItems })] }), _jsxs(SearchDialogFooter, { children: [tags.length > 0 && (_jsx(TagsList, { tag: tag, onTagChange: setTag, allowClear: allowClear, children: tags.map((tag) => (_jsx(TagsListItem, { value: tag.value, children: tag.name }, tag.value))) })), footer] })] }));
|
|
36
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-orama.d.ts","sourceRoot":"","sources":["../../../src/components/dialog/search-orama.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,OAAO,CAAC;AAgB1D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAG1E,MAAM,WAAW,sBAAuB,SAAQ,WAAW;IACzD,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACpC,aAAa,CAAC,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC5C,KAAK,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAEnC,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IAEjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EACxC,MAAM,EACN,aAAa,EACb,IAAS,EACT,UAAU,EACV,SAAiB,EACjB,UAAkB,EAClB,KAAK,EACL,MAAM,EACN,KAAU,EACV,GAAG,KAAK,EACT,EAAE,sBAAsB,
|
|
1
|
+
{"version":3,"file":"search-orama.d.ts","sourceRoot":"","sources":["../../../src/components/dialog/search-orama.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,OAAO,CAAC;AAgB1D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAG1E,MAAM,WAAW,sBAAuB,SAAQ,WAAW;IACzD,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACpC,aAAa,CAAC,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC5C,KAAK,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAEnC,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IAEjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EACxC,MAAM,EACN,aAAa,EACb,IAAS,EACT,UAAU,EACV,SAAiB,EACjB,UAAkB,EAClB,KAAK,EACL,MAAM,EACN,KAAU,EACV,GAAG,KAAK,EACT,EAAE,sBAAsB,2CAgExB"}
|
|
@@ -19,17 +19,21 @@ export default function OramaSearchDialog({ client, searchOptions, tags = [], de
|
|
|
19
19
|
locale,
|
|
20
20
|
tag,
|
|
21
21
|
});
|
|
22
|
-
const defaultItems = useMemo(() =>
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
const defaultItems = useMemo(() => {
|
|
23
|
+
if (links.length === 0)
|
|
24
|
+
return null;
|
|
25
|
+
return links.map(([name, link]) => ({
|
|
26
|
+
type: 'page',
|
|
27
|
+
id: name,
|
|
28
|
+
content: name,
|
|
29
|
+
url: link,
|
|
30
|
+
}));
|
|
31
|
+
}, [links]);
|
|
28
32
|
useOnChange(defaultTag, (v) => {
|
|
29
33
|
setTag(v);
|
|
30
34
|
});
|
|
31
35
|
const label = showOrama && _jsx(Label, {});
|
|
32
|
-
return (_jsxs(SearchDialog, { search: search, onSearchChange: setSearch, isLoading: query.isLoading, ...props, children: [_jsx(SearchDialogOverlay, {}), _jsxs(SearchDialogContent, { children: [_jsxs(SearchDialogHeader, { children: [_jsx(SearchDialogIcon, {}), _jsx(SearchDialogInput, {}), _jsx(SearchDialogClose, {})] }),
|
|
36
|
+
return (_jsxs(SearchDialog, { search: search, onSearchChange: setSearch, isLoading: query.isLoading, ...props, children: [_jsx(SearchDialogOverlay, {}), _jsxs(SearchDialogContent, { children: [_jsxs(SearchDialogHeader, { children: [_jsx(SearchDialogIcon, {}), _jsx(SearchDialogInput, {}), _jsx(SearchDialogClose, {})] }), _jsx(SearchDialogList, { items: query.data !== 'empty' ? query.data : defaultItems }), _jsxs(SearchDialogFooter, { children: [tags.length > 0 ? (_jsxs(TagsList, { tag: tag, onTagChange: setTag, allowClear: allowClear, children: [tags.map((tag) => (_jsx(TagsListItem, { value: tag.value, children: tag.name }, tag.value))), label] })) : (label), footer] })] })] }));
|
|
33
37
|
}
|
|
34
38
|
function Label() {
|
|
35
39
|
return (_jsx("a", { href: "https://orama.com", rel: "noreferrer noopener", className: "ms-auto text-xs text-fd-muted-foreground", children: "Search powered by Orama" }));
|
|
@@ -21,7 +21,7 @@ export declare function SearchDialogFooter(props: ComponentProps<'div'>): import
|
|
|
21
21
|
export declare function SearchDialogOverlay(props: ComponentProps<typeof DialogOverlay>): import("react/jsx-runtime").JSX.Element;
|
|
22
22
|
export declare function SearchDialogContent({ children, ...props }: ComponentProps<typeof DialogContent>): import("react/jsx-runtime").JSX.Element;
|
|
23
23
|
export declare function SearchDialogList({ items, Empty, Item, ...props }: Omit<ComponentProps<'div'>, 'children'> & {
|
|
24
|
-
items: ReactSortedResult[];
|
|
24
|
+
items: ReactSortedResult[] | null | undefined;
|
|
25
25
|
/**
|
|
26
26
|
* Renderer for empty list UI
|
|
27
27
|
*/
|
|
@@ -37,7 +37,7 @@ export declare function SearchDialogList({ items, Empty, Item, ...props }: Omit<
|
|
|
37
37
|
export declare function SearchDialogListItem({ item, className, children, ...props }: ComponentProps<'button'> & {
|
|
38
38
|
item: ReactSortedResult;
|
|
39
39
|
}): import("react/jsx-runtime").JSX.Element;
|
|
40
|
-
export declare function SearchDialogIcon(props: ComponentProps<'
|
|
40
|
+
export declare function SearchDialogIcon(props: ComponentProps<'svg'>): import("react/jsx-runtime").JSX.Element;
|
|
41
41
|
export interface TagsListProps extends ComponentProps<'div'> {
|
|
42
42
|
tag?: string;
|
|
43
43
|
onTagChange: (tag: string | undefined) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/components/dialog/search.tsx"],"names":[],"mappings":"
|
|
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 } from "react/jsx-runtime";
|
|
3
|
-
import { FileText, Hash,
|
|
4
|
-
import { createContext, Fragment, useCallback, useContext, useEffect, useMemo, useState, } from 'react';
|
|
3
|
+
import { FileText, Hash, Search as SearchIcon, Text, X } from '../../icons.js';
|
|
4
|
+
import { createContext, Fragment, useCallback, useContext, useEffect, useMemo, useRef, useState, } from 'react';
|
|
5
5
|
import { I18nLabel, useI18n } from '../../contexts/i18n.js';
|
|
6
6
|
import { cn } from '../../utils/cn.js';
|
|
7
7
|
import { buttonVariants } from '../../components/ui/button.js';
|
|
@@ -33,30 +33,32 @@ export function SearchDialogInput(props) {
|
|
|
33
33
|
const { search, onSearchChange } = useSearch();
|
|
34
34
|
return (_jsx("input", { ...props, value: search, onChange: (e) => onSearchChange(e.target.value), placeholder: text.search, className: "w-0 flex-1 bg-transparent py-3 text-base placeholder:text-fd-muted-foreground focus-visible:outline-none" }));
|
|
35
35
|
}
|
|
36
|
-
export function SearchDialogClose({ children =
|
|
36
|
+
export function SearchDialogClose({ children = _jsx(X, {}), className, ...props }) {
|
|
37
37
|
const { onOpenChange } = useSearch();
|
|
38
|
-
return (_jsx("button", { type: "button", onClick: () => onOpenChange(false), className: cn(buttonVariants({
|
|
39
|
-
color: '
|
|
40
|
-
|
|
38
|
+
return (_jsx("button", { type: "button", "aria-label": "Close", onClick: () => onOpenChange(false), className: cn(buttonVariants({
|
|
39
|
+
color: 'ghost',
|
|
40
|
+
size: 'icon-sm',
|
|
41
|
+
className: 'text-fd-muted-foreground -me-2',
|
|
41
42
|
}), className), ...props, children: children }));
|
|
42
43
|
}
|
|
43
44
|
export function SearchDialogFooter(props) {
|
|
44
|
-
return (_jsx("div", { ...props, className: cn('
|
|
45
|
+
return (_jsx("div", { ...props, className: cn('border-t bg-fd-secondary/50 p-3 empty:hidden', props.className) }));
|
|
45
46
|
}
|
|
46
47
|
export function SearchDialogOverlay(props) {
|
|
47
|
-
return (_jsx(DialogOverlay, { ...props, className: cn('fixed inset-0 z-50
|
|
48
|
+
return (_jsx(DialogOverlay, { ...props, className: cn('fixed inset-0 z-50 data-[state=open]:animate-fd-fade-in data-[state=closed]:animate-fd-fade-out', props.className) }));
|
|
48
49
|
}
|
|
49
50
|
export function SearchDialogContent({ children, ...props }) {
|
|
50
51
|
const { text } = useI18n();
|
|
51
|
-
return (_jsxs(DialogContent, { "aria-describedby": undefined, ...props, className: cn('fixed left-1/2 top-[10vh] z-50 w-[98vw] max-w-screen-sm -translate-x-1/2 rounded-
|
|
52
|
+
return (_jsxs(DialogContent, { "aria-describedby": undefined, ...props, className: cn('fixed left-1/2 top-[10vh] z-50 w-[98vw] max-w-screen-sm -translate-x-1/2 rounded-xl border bg-fd-popover/60 backdrop-blur-sm text-fd-popover-foreground shadow-2xl overflow-hidden shadow-black/20 data-[state=closed]:animate-fd-dialog-out data-[state=open]:animate-fd-dialog-in', props.className), children: [_jsx(DialogTitle, { className: "hidden", children: text.search }), children] }));
|
|
52
53
|
}
|
|
53
54
|
const icons = {
|
|
54
55
|
text: _jsx(Text, { className: "size-4 text-fd-muted-foreground" }),
|
|
55
56
|
heading: _jsx(Hash, { className: "size-4 text-fd-muted-foreground" }),
|
|
56
57
|
page: _jsx(FileText, { className: "size-4 text-fd-muted-foreground" }),
|
|
57
58
|
};
|
|
58
|
-
export function SearchDialogList({ items, Empty = () => (_jsx("div", { className: "py-12 text-center text-sm", children: _jsx(I18nLabel, { label: "searchNoResult" }) })), Item = (props) => _jsx(SearchDialogListItem, { ...props }), ...props }) {
|
|
59
|
-
const
|
|
59
|
+
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 }) {
|
|
60
|
+
const ref = useRef(null);
|
|
61
|
+
const [active, setActive] = useState(() => items && items.length > 0 ? items[0].id : null);
|
|
60
62
|
const { onOpenChange } = useSearch();
|
|
61
63
|
const router = useRouter();
|
|
62
64
|
const onOpen = ({ external, url }) => {
|
|
@@ -67,6 +69,8 @@ export function SearchDialogList({ items, Empty = () => (_jsx("div", { className
|
|
|
67
69
|
onOpenChange(false);
|
|
68
70
|
};
|
|
69
71
|
const onKey = useEffectEvent((e) => {
|
|
72
|
+
if (!items)
|
|
73
|
+
return;
|
|
70
74
|
if (e.key === 'ArrowDown' || e.key == 'ArrowUp') {
|
|
71
75
|
let idx = items.findIndex((item) => item.id === active);
|
|
72
76
|
if (idx === -1)
|
|
@@ -86,19 +90,34 @@ export function SearchDialogList({ items, Empty = () => (_jsx("div", { className
|
|
|
86
90
|
}
|
|
87
91
|
});
|
|
88
92
|
useEffect(() => {
|
|
93
|
+
const element = ref.current;
|
|
94
|
+
if (!element)
|
|
95
|
+
return;
|
|
96
|
+
const observer = new ResizeObserver(() => {
|
|
97
|
+
const viewport = element.firstElementChild;
|
|
98
|
+
element.style.setProperty('--fd-animated-height', `${viewport.clientHeight}px`);
|
|
99
|
+
});
|
|
100
|
+
const viewport = element.firstElementChild;
|
|
101
|
+
if (viewport)
|
|
102
|
+
observer.observe(viewport);
|
|
89
103
|
window.addEventListener('keydown', onKey);
|
|
90
104
|
return () => {
|
|
105
|
+
observer.disconnect();
|
|
91
106
|
window.removeEventListener('keydown', onKey);
|
|
92
107
|
};
|
|
93
108
|
}, [onKey]);
|
|
94
109
|
useOnChange(items, () => {
|
|
95
|
-
if (items.length > 0)
|
|
110
|
+
if (items && items.length > 0) {
|
|
96
111
|
setActive(items[0].id);
|
|
112
|
+
}
|
|
97
113
|
});
|
|
98
|
-
return (_jsx("div", { ...props, className: cn('
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
114
|
+
return (_jsx("div", { ...props, ref: ref, className: cn('overflow-hidden h-(--fd-animated-height) transition-[height]', items && 'border-t', props.className), style: {
|
|
115
|
+
...props.style,
|
|
116
|
+
'--fd-animated-height': '0px',
|
|
117
|
+
}, children: _jsx("div", { className: cn('w-full flex flex-col overflow-y-auto max-h-[460px]', !items && 'hidden'), children: _jsxs(ListContext.Provider, { value: useMemo(() => ({
|
|
118
|
+
active,
|
|
119
|
+
setActive,
|
|
120
|
+
}), [active]), children: [items?.length === 0 && Empty(), items?.map((item) => (_jsx(Fragment, { children: Item({ item, onClick: () => onOpen(item) }) }, item.id)))] }) }) }));
|
|
102
121
|
}
|
|
103
122
|
export function SearchDialogListItem({ item, className, children, ...props }) {
|
|
104
123
|
const { active: activeId, setActive } = useSearchList();
|
|
@@ -109,11 +128,11 @@ export function SearchDialogListItem({ item, className, children, ...props }) {
|
|
|
109
128
|
block: 'nearest',
|
|
110
129
|
});
|
|
111
130
|
}
|
|
112
|
-
}, [active]), "aria-selected": active, className: cn('flex min-h-10 select-none flex-row items-center gap-2.5
|
|
131
|
+
}, [active]), "aria-selected": active, className: cn('flex min-h-10 select-none flex-row items-center gap-2.5 px-3 text-start text-sm', active && 'bg-fd-accent text-fd-accent-foreground', className), onPointerMove: () => setActive(item.id), ...props, children: [item.type !== 'page' && (_jsx("div", { role: "none", className: "ms-2 h-full min-h-10 w-px bg-fd-border" })), icons[item.type], _jsx("p", { className: "w-0 flex-1 truncate", children: children ?? item.content })] }));
|
|
113
132
|
}
|
|
114
133
|
export function SearchDialogIcon(props) {
|
|
115
134
|
const { isLoading } = useSearch();
|
|
116
|
-
return (
|
|
135
|
+
return (_jsx(SearchIcon, { ...props, className: cn('size-4.5 text-fd-muted-foreground', isLoading && 'animate-pulse duration-400', props.className) }));
|
|
117
136
|
}
|
|
118
137
|
const itemVariants = cva('rounded-md border px-2 py-0.5 text-xs font-medium text-fd-muted-foreground transition-colors', {
|
|
119
138
|
variants: {
|
|
@@ -5,7 +5,7 @@ import * as React from 'react';
|
|
|
5
5
|
import { cn } from '../../utils/cn.js';
|
|
6
6
|
const Popover = PopoverPrimitive.Root;
|
|
7
7
|
const PopoverTrigger = PopoverPrimitive.Trigger;
|
|
8
|
-
const PopoverContent = React.forwardRef(({ className, align = 'center', sideOffset = 4, ...props }, ref) => (_jsx(PopoverPrimitive.Portal, { children: _jsx(PopoverPrimitive.Content, { ref: ref, align: align, sideOffset: sideOffset, side: "bottom", className: cn('z-50 min-w-[220px] max-w-[98vw] rounded-
|
|
8
|
+
const PopoverContent = React.forwardRef(({ className, align = 'center', sideOffset = 4, ...props }, ref) => (_jsx(PopoverPrimitive.Portal, { children: _jsx(PopoverPrimitive.Content, { ref: ref, align: align, sideOffset: sideOffset, side: "bottom", className: cn('z-50 origin-(--radix-popover-content-transform-origin) min-w-[220px] max-w-[98vw] rounded-xl border bg-fd-popover/60 backdrop-blur-sm p-2 text-sm text-fd-popover-foreground shadow-lg focus-visible:outline-none data-[state=closed]:animate-fd-popover-out data-[state=open]:animate-fd-popover-in', className), ...props }) })));
|
|
9
9
|
PopoverContent.displayName = PopoverPrimitive.Content.displayName;
|
|
10
10
|
const PopoverClose = PopoverPrimitive.PopoverClose;
|
|
11
11
|
export { Popover, PopoverTrigger, PopoverContent, PopoverClose };
|
package/dist/layouts/docs.d.ts
CHANGED
|
@@ -15,6 +15,6 @@ export interface DocsLayoutProps extends BaseLayoutProps {
|
|
|
15
15
|
*/
|
|
16
16
|
containerProps?: HTMLAttributes<HTMLDivElement>;
|
|
17
17
|
}
|
|
18
|
-
export declare function DocsLayout({ nav: { transparentMode, ...nav }, sidebar: { tabs: sidebarTabs, enabled: sidebarEnabled, collapsible: sidebarCollapsible, component: sidebarComponent, components: sidebarComponents, ...
|
|
18
|
+
export declare function DocsLayout({ nav: { transparentMode, ...nav }, sidebar: { tabs: sidebarTabs, footer: sidebarFooter, banner: sidebarBanner, enabled: sidebarEnabled, collapsible: sidebarCollapsible, component: sidebarComponent, components: sidebarComponents, ...sidebarProps }, searchToggle, disableThemeSwitch, themeSwitch, i18n, children, ...props }: DocsLayoutProps): import("react/jsx-runtime").JSX.Element;
|
|
19
19
|
export { CollapsibleControl, Navbar, NavbarSidebarTrigger, type LinkItemType };
|
|
20
20
|
//# 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,cAAc,EAAE,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;AAYrE,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAElE,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,UAAU,CAAC;AAK1D,OAAO,EACL,kBAAkB,EAElB,MAAM,EACN,oBAAoB,EACrB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAS/B,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IAEpB,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG;QAClC,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,SAAS,CAAC;KACvB,CAAC;IAEF;;OAEG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;CACjD;AAED,wBAAgB,UAAU,CAAC,EACzB,GAAG,EAAE,EAAE,eAAe,EAAE,GAAG,GAAG,EAAO,EACrC,OAAO,EAAE,EACP,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,cAAqB,EAC9B,WAAW,EAAE,kBAAyB,EACtC,SAAS,EAAE,gBAAgB,EAC3B,UAAU,EAAE,iBAAiB,EAC7B,GAAG,
|
|
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,cAAc,EAAE,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;AAYrE,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAElE,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,UAAU,CAAC;AAK1D,OAAO,EACL,kBAAkB,EAElB,MAAM,EACN,oBAAoB,EACrB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAS/B,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IAEpB,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG;QAClC,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,SAAS,CAAC;KACvB,CAAC;IAEF;;OAEG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;CACjD;AAED,wBAAgB,UAAU,CAAC,EACzB,GAAG,EAAE,EAAE,eAAe,EAAE,GAAG,GAAG,EAAO,EACrC,OAAO,EAAE,EACP,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,cAAqB,EAC9B,WAAW,EAAE,kBAAyB,EACtC,SAAS,EAAE,gBAAgB,EAC3B,UAAU,EAAE,iBAAiB,EAC7B,GAAG,YAAY,EACX,EACN,YAAiB,EACjB,kBAA0B,EAC1B,WAA8C,EAC9C,IAAY,EACZ,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,eAAe,2CAkIjB;AAED,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,oBAAoB,EAAE,KAAK,YAAY,EAAE,CAAC"}
|
package/dist/layouts/docs.js
CHANGED
|
@@ -16,26 +16,25 @@ import { NavProvider } from '../contexts/layout.js';
|
|
|
16
16
|
import Link from 'fumadocs-core/link';
|
|
17
17
|
import { LargeSearchToggle, SearchToggle, } from '../components/layout/search-toggle.js';
|
|
18
18
|
import { HideIfEmpty } from 'fumadocs-core/hide-if-empty';
|
|
19
|
-
export function DocsLayout({ nav: { transparentMode, ...nav } = {}, sidebar: { tabs: sidebarTabs, enabled: sidebarEnabled = true, collapsible: sidebarCollapsible = true, component: sidebarComponent, components: sidebarComponents, ...
|
|
19
|
+
export function DocsLayout({ nav: { transparentMode, ...nav } = {}, sidebar: { tabs: sidebarTabs, footer: sidebarFooter, banner: sidebarBanner, enabled: sidebarEnabled = true, collapsible: sidebarCollapsible = true, component: sidebarComponent, components: sidebarComponents, ...sidebarProps } = {}, searchToggle = {}, disableThemeSwitch = false, themeSwitch = { enabled: !disableThemeSwitch }, i18n = false, children, ...props }) {
|
|
20
20
|
const tabs = useMemo(() => getSidebarTabsFromOptions(sidebarTabs, props.tree) ?? [], [sidebarTabs, props.tree]);
|
|
21
21
|
const links = getLinks(props.links ?? [], props.githubUrl);
|
|
22
22
|
const variables = cn('md:[--fd-sidebar-width:268px] lg:[--fd-sidebar-width:286px] xl:[--fd-toc-width:286px]', !nav.component && nav.enabled !== false
|
|
23
23
|
? '[--fd-nav-height:56px] md:[--fd-nav-height:0px]'
|
|
24
24
|
: undefined);
|
|
25
|
-
const
|
|
26
|
-
.filter((item) => item.type === 'icon')
|
|
27
|
-
.map((item, i) => (_jsx(BaseLinkItem, { item: item, className: cn(buttonVariants({ size: 'icon', color: 'ghost' }), 'text-fd-muted-foreground md:[&_svg]:size-4.5'), "aria-label": item.label, children: item.icon }, i))) }), i18n ? (_jsxs(LanguageToggle, { className: "me-1.5", children: [_jsx(Languages, { className: "size-4.5" }), _jsx(LanguageToggleText, { className: "md:hidden" })] })) : null, themeSwitch.enabled !== false &&
|
|
28
|
-
(themeSwitch.component ?? (_jsx(ThemeToggle, { className: "p-0", mode: themeSwitch.mode })))] }) }));
|
|
29
|
-
sidebarComponent ?? (sidebarComponent = _jsxs(_Fragment, { children: [sidebarCollapsible ? _jsx(CollapsibleControl, {}) : null, _jsxs(Sidebar, { ...sidebar, collapsible: sidebarCollapsible, children: [_jsx(HideIfEmpty, { children: _jsxs(SidebarHeader, { children: [_jsxs("div", { className: "flex 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, sidebarCollapsible && (_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
|
|
25
|
+
const sidebar = sidebarComponent ?? (_jsxs(_Fragment, { children: [sidebarCollapsible ? _jsx(CollapsibleControl, {}) : null, _jsxs(Sidebar, { ...sidebarProps, collapsible: sidebarCollapsible, children: [_jsx(HideIfEmpty, { children: _jsxs(SidebarHeader, { children: [_jsxs("div", { className: "flex 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, sidebarCollapsible && (_jsx(SidebarCollapseTrigger, { className: cn(buttonVariants({
|
|
30
26
|
color: 'ghost',
|
|
31
27
|
size: 'icon-sm',
|
|
32
28
|
className: 'ms-auto mb-auto text-fd-muted-foreground max-md:hidden',
|
|
33
29
|
})), children: _jsx(SidebarIcon, {}) }))] }), tabs.length > 0 && _jsx(RootToggle, { options: tabs }), searchToggle.enabled !== false &&
|
|
34
|
-
(searchToggle.components?.lg ?? (_jsx(LargeSearchToggle, { hideIfDisabled: true, className: "max-md:hidden" }))),
|
|
30
|
+
(searchToggle.components?.lg ?? (_jsx(LargeSearchToggle, { hideIfDisabled: true, className: "max-md:hidden" }))), sidebarBanner] }) }), _jsxs(SidebarViewport, { children: [links
|
|
35
31
|
.filter((v) => v.type !== 'icon')
|
|
36
|
-
.map((item, i, list) => (_jsx(SidebarLinkItem, { item: item, className: cn(i === list.length - 1 && 'mb-4') }, i))), _jsx(SidebarPageTree, { components: sidebarComponents })] }), _jsx(HideIfEmpty, { children: _jsxs(
|
|
32
|
+
.map((item, i, list) => (_jsx(SidebarLinkItem, { item: item, className: cn(i === list.length - 1 && 'mb-4') }, i))), _jsx(SidebarPageTree, { components: sidebarComponents })] }), _jsxs(SidebarFooter, { className: "empty:hidden", children: [_jsx(HideIfEmpty, { children: _jsxs("div", { className: "flex items-center justify-end", children: [links
|
|
33
|
+
.filter((item) => item.type === 'icon')
|
|
34
|
+
.map((item, i) => (_jsx(BaseLinkItem, { item: item, className: cn(buttonVariants({ size: 'icon', color: 'ghost' }), 'text-fd-muted-foreground md:[&_svg]:size-4.5', i === links.length - 1 && 'me-auto'), "aria-label": item.label, children: item.icon }, i))), i18n ? (_jsxs(LanguageToggle, { className: "me-1.5", children: [_jsx(Languages, { className: "size-4.5" }), _jsx(LanguageToggleText, { className: "md:hidden" })] })) : null, themeSwitch.enabled !== false &&
|
|
35
|
+
(themeSwitch.component ?? (_jsx(ThemeToggle, { className: "p-0", mode: themeSwitch.mode })))] }) }), sidebarFooter] })] })] }));
|
|
37
36
|
return (_jsx(TreeContextProvider, { tree: props.tree, children: _jsxs(NavProvider, { transparentMode: transparentMode, children: [nav.enabled !== false &&
|
|
38
37
|
(nav.component ?? (_jsxs(Navbar, { className: "h-14 md:hidden", children: [_jsx(Link, { href: nav.url ?? '/', className: "inline-flex items-center gap-2.5 font-semibold", children: nav.title }), _jsx("div", { className: "flex-1", children: nav.children }), searchToggle?.enabled !== false &&
|
|
39
|
-
(searchToggle.components?.sm ?? (_jsx(SearchToggle, { className: "p-2", hideIfDisabled: true }))), _jsx(NavbarSidebarTrigger, { className: "p-2 -me-1.5 md:hidden" })] }))), _jsxs(LayoutBody, { ...props.containerProps, className: cn(variables, props.containerProps?.className), children: [sidebarEnabled &&
|
|
38
|
+
(searchToggle.components?.sm ?? (_jsx(SearchToggle, { className: "p-2", hideIfDisabled: true }))), _jsx(NavbarSidebarTrigger, { className: "p-2 -me-1.5 md:hidden" })] }))), _jsxs(LayoutBody, { ...props.containerProps, className: cn(variables, props.containerProps?.className), children: [sidebarEnabled && sidebar, children] })] }) }));
|
|
40
39
|
}
|
|
41
40
|
export { CollapsibleControl, Navbar, NavbarSidebarTrigger };
|
package/dist/mdx.server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mdx.server.d.ts","sourceRoot":"","sources":["../src/mdx.server.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,oBAAoB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"mdx.server.d.ts","sourceRoot":"","sources":["../src/mdx.server.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,oBAAoB,MAAM,OAAO,CAAC;AAGzC;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,YAAY,CAAC,YAAY,CAAC,EAClC,IAAI,EAAE,IAAI,EACV,YAAY,GAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAA0B,GAC7D,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAkBzB;AAED,OAAO,EAAE,oBAAoB,IAAI,OAAO,EAAE,CAAC"}
|
package/dist/mdx.server.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import defaultMdxComponents from './mdx.js';
|
|
3
|
+
import * as path from 'node:path';
|
|
3
4
|
/**
|
|
4
5
|
* Extend the default Link component to resolve relative file paths in `href`.
|
|
5
6
|
*
|
|
@@ -12,7 +13,7 @@ export function createRelativeLink(source, page, OverrideLink = defaultMdxCompon
|
|
|
12
13
|
// resolve relative href
|
|
13
14
|
if (href && href.startsWith('.')) {
|
|
14
15
|
const target = source.getPageByHref(href, {
|
|
15
|
-
dir: page.
|
|
16
|
+
dir: path.dirname(page.path),
|
|
16
17
|
language: page.locale,
|
|
17
18
|
});
|
|
18
19
|
if (target) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page.server.d.ts","sourceRoot":"","sources":["../src/page.server.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"page.server.d.ts","sourceRoot":"","sources":["../src/page.server.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAIvE;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,IAAI,EACJ,IAAI,EAAE,UAAU,EAChB,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG;IAClC,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,YAAY,CAAC,YAAY,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC;CACtB,kDA+CA;AAED,cAAc,QAAQ,CAAC"}
|
package/dist/page.server.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { getPageTreePeers } from 'fumadocs-core/server';
|
|
3
3
|
import { Card, Cards } from './components/card.js';
|
|
4
|
+
import * as path from 'node:path';
|
|
4
5
|
/**
|
|
5
6
|
* @deprecated use https://fumadocs.vercel.app/docs/ui/markdown#further-reading-section instead
|
|
6
7
|
*/
|
|
@@ -20,8 +21,8 @@ export function DocsCategory({ page, from, tree: forcedTree, ...props }) {
|
|
|
20
21
|
if (items.length === 0) {
|
|
21
22
|
const pages = from.getPages(page.locale);
|
|
22
23
|
items = pages
|
|
23
|
-
.filter((item) => item.
|
|
24
|
-
item.
|
|
24
|
+
.filter((item) => path.dirname(item.path) === path.dirname(page.path) &&
|
|
25
|
+
item.path !== page.path)
|
|
25
26
|
.map((page) => ({
|
|
26
27
|
type: 'page',
|
|
27
28
|
name: page.data.title,
|
package/dist/style.css
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! tailwindcss v4.1.
|
|
1
|
+
/*! tailwindcss v4.1.10 | MIT License | https://tailwindcss.com */
|
|
2
2
|
@layer properties;
|
|
3
3
|
@layer theme, base, components, utilities;
|
|
4
4
|
@layer theme {
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
--radius-lg: 0.5rem;
|
|
33
33
|
--radius-xl: 0.75rem;
|
|
34
34
|
--radius-2xl: 1rem;
|
|
35
|
-
--animate-
|
|
35
|
+
--animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
|
|
36
36
|
--blur-sm: 8px;
|
|
37
37
|
--blur-md: 12px;
|
|
38
38
|
--blur-lg: 16px;
|
|
@@ -69,10 +69,10 @@
|
|
|
69
69
|
--color-fd-diff-add-symbol: rgb(10, 200, 100);
|
|
70
70
|
--animate-fd-fade-in: fd-fade-in 300ms ease;
|
|
71
71
|
--animate-fd-fade-out: fd-fade-out 300ms ease;
|
|
72
|
-
--animate-fd-dialog-in: fd-dialog-in
|
|
73
|
-
--animate-fd-dialog-out: fd-dialog-out
|
|
74
|
-
--animate-fd-popover-in: fd-popover-in
|
|
75
|
-
--animate-fd-popover-out: fd-popover-out
|
|
72
|
+
--animate-fd-dialog-in: fd-dialog-in 300ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
73
|
+
--animate-fd-dialog-out: fd-dialog-out 300ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
74
|
+
--animate-fd-popover-in: fd-popover-in 130ms ease;
|
|
75
|
+
--animate-fd-popover-out: fd-popover-out 130ms ease;
|
|
76
76
|
--animate-fd-collapsible-down: fd-collapsible-down 150ms
|
|
77
77
|
cubic-bezier(0.45, 0, 0.55, 1);
|
|
78
78
|
--animate-fd-collapsible-up: fd-collapsible-up 150ms
|
|
@@ -841,9 +841,6 @@
|
|
|
841
841
|
.mt-6 {
|
|
842
842
|
margin-top: calc(var(--spacing) * 6);
|
|
843
843
|
}
|
|
844
|
-
.mt-auto {
|
|
845
|
-
margin-top: auto;
|
|
846
|
-
}
|
|
847
844
|
.mt-px {
|
|
848
845
|
margin-top: 1px;
|
|
849
846
|
}
|
|
@@ -937,6 +934,9 @@
|
|
|
937
934
|
width: 100%;
|
|
938
935
|
height: 100%;
|
|
939
936
|
}
|
|
937
|
+
.h-\(--fd-animated-height\) {
|
|
938
|
+
height: var(--fd-animated-height);
|
|
939
|
+
}
|
|
940
940
|
.h-\(--fd-height\) {
|
|
941
941
|
height: var(--fd-height);
|
|
942
942
|
}
|
|
@@ -1072,6 +1072,9 @@
|
|
|
1072
1072
|
.shrink-0 {
|
|
1073
1073
|
flex-shrink: 0;
|
|
1074
1074
|
}
|
|
1075
|
+
.origin-\(--radix-popover-content-transform-origin\) {
|
|
1076
|
+
transform-origin: var(--radix-popover-content-transform-origin);
|
|
1077
|
+
}
|
|
1075
1078
|
.origin-\[top_center\] {
|
|
1076
1079
|
transform-origin: top center;
|
|
1077
1080
|
}
|
|
@@ -1117,8 +1120,8 @@
|
|
|
1117
1120
|
.animate-fd-fade-in {
|
|
1118
1121
|
animation: var(--animate-fd-fade-in);
|
|
1119
1122
|
}
|
|
1120
|
-
.animate-
|
|
1121
|
-
animation: var(--animate-
|
|
1123
|
+
.animate-pulse {
|
|
1124
|
+
animation: var(--animate-pulse);
|
|
1122
1125
|
}
|
|
1123
1126
|
.scroll-m-24 {
|
|
1124
1127
|
scroll-margin: calc(var(--spacing) * 24);
|
|
@@ -1339,8 +1342,11 @@
|
|
|
1339
1342
|
.bg-fd-muted {
|
|
1340
1343
|
background-color: var(--color-fd-muted);
|
|
1341
1344
|
}
|
|
1342
|
-
.bg-fd-popover {
|
|
1343
|
-
background-color:
|
|
1345
|
+
.bg-fd-popover\/60 {
|
|
1346
|
+
background-color: color-mix(in srgb, hsl(0, 0%, 98%) 60%, transparent);
|
|
1347
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
1348
|
+
background-color: color-mix(in oklab, var(--color-fd-popover) 60%, transparent);
|
|
1349
|
+
}
|
|
1344
1350
|
}
|
|
1345
1351
|
.bg-fd-primary {
|
|
1346
1352
|
background-color: var(--color-fd-primary);
|
|
@@ -1610,6 +1616,10 @@
|
|
|
1610
1616
|
.opacity-0 {
|
|
1611
1617
|
opacity: 0%;
|
|
1612
1618
|
}
|
|
1619
|
+
.shadow-2xl {
|
|
1620
|
+
--tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));
|
|
1621
|
+
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
1622
|
+
}
|
|
1613
1623
|
.shadow-lg {
|
|
1614
1624
|
--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
|
|
1615
1625
|
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
@@ -1622,6 +1632,12 @@
|
|
|
1622
1632
|
--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
|
|
1623
1633
|
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
1624
1634
|
}
|
|
1635
|
+
.shadow-black\/20 {
|
|
1636
|
+
--tw-shadow-color: color-mix(in srgb, #000 20%, transparent);
|
|
1637
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
1638
|
+
--tw-shadow-color: color-mix(in oklab, color-mix(in oklab, var(--color-black) 20%, transparent) var(--tw-shadow-alpha), transparent);
|
|
1639
|
+
}
|
|
1640
|
+
}
|
|
1625
1641
|
.outline {
|
|
1626
1642
|
outline-style: var(--tw-outline-style);
|
|
1627
1643
|
outline-width: 1px;
|
|
@@ -1649,6 +1665,11 @@
|
|
|
1649
1665
|
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
|
|
1650
1666
|
transition-duration: var(--tw-duration, var(--default-transition-duration));
|
|
1651
1667
|
}
|
|
1668
|
+
.transition-\[height\] {
|
|
1669
|
+
transition-property: height;
|
|
1670
|
+
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
|
|
1671
|
+
transition-duration: var(--tw-duration, var(--default-transition-duration));
|
|
1672
|
+
}
|
|
1652
1673
|
.transition-\[margin\] {
|
|
1653
1674
|
transition-property: margin;
|
|
1654
1675
|
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
|
|
@@ -1691,6 +1712,10 @@
|
|
|
1691
1712
|
--tw-duration: 300ms;
|
|
1692
1713
|
transition-duration: 300ms;
|
|
1693
1714
|
}
|
|
1715
|
+
.duration-400 {
|
|
1716
|
+
--tw-duration: 400ms;
|
|
1717
|
+
transition-duration: 400ms;
|
|
1718
|
+
}
|
|
1694
1719
|
.outline-none {
|
|
1695
1720
|
--tw-outline-style: none;
|
|
1696
1721
|
outline-style: none;
|
|
@@ -2694,9 +2719,9 @@
|
|
|
2694
2719
|
syntax: "*";
|
|
2695
2720
|
inherits: false;
|
|
2696
2721
|
}
|
|
2697
|
-
@keyframes
|
|
2698
|
-
|
|
2699
|
-
|
|
2722
|
+
@keyframes pulse {
|
|
2723
|
+
50% {
|
|
2724
|
+
opacity: 0.5;
|
|
2700
2725
|
}
|
|
2701
2726
|
}
|
|
2702
2727
|
@keyframes fd-collapsible-down {
|
|
@@ -2756,21 +2781,13 @@
|
|
|
2756
2781
|
@keyframes fd-popover-in {
|
|
2757
2782
|
from {
|
|
2758
2783
|
opacity: 0;
|
|
2759
|
-
transform: translateY(-12px);
|
|
2760
|
-
}
|
|
2761
|
-
to {
|
|
2762
|
-
opacity: 1;
|
|
2763
|
-
transform: translateY(0);
|
|
2784
|
+
transform: translateY(-12px) scale(0.9);
|
|
2764
2785
|
}
|
|
2765
2786
|
}
|
|
2766
2787
|
@keyframes fd-popover-out {
|
|
2767
|
-
from {
|
|
2768
|
-
opacity: 1;
|
|
2769
|
-
transform: translateY(0);
|
|
2770
|
-
}
|
|
2771
2788
|
to {
|
|
2772
2789
|
opacity: 0;
|
|
2773
|
-
transform: translateY(-12px);
|
|
2790
|
+
transform: translateY(-12px) scale(0.9);
|
|
2774
2791
|
}
|
|
2775
2792
|
}
|
|
2776
2793
|
@keyframes fd-fade-in {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fumadocs-ui",
|
|
3
|
-
"version": "15.5.
|
|
3
|
+
"version": "15.5.2",
|
|
4
4
|
"description": "The framework for building a documentation website in Next.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"NextJs",
|
|
@@ -87,31 +87,38 @@
|
|
|
87
87
|
"next-themes": "^0.4.6",
|
|
88
88
|
"postcss-selector-parser": "^7.1.0",
|
|
89
89
|
"react-medium-image-zoom": "^5.2.14",
|
|
90
|
-
"react-remove-scroll": "^2.
|
|
91
|
-
"tailwind-merge": "^3.3.
|
|
92
|
-
"fumadocs-core": "15.5.
|
|
90
|
+
"react-remove-scroll": "^2.7.1",
|
|
91
|
+
"tailwind-merge": "^3.3.1",
|
|
92
|
+
"fumadocs-core": "15.5.2"
|
|
93
93
|
},
|
|
94
94
|
"devDependencies": {
|
|
95
95
|
"@next/eslint-plugin-next": "^15.3.3",
|
|
96
|
-
"@tailwindcss/cli": "^4.1.
|
|
96
|
+
"@tailwindcss/cli": "^4.1.10",
|
|
97
97
|
"@types/lodash.merge": "^4.6.9",
|
|
98
|
-
"@types/react": "^19.1.
|
|
99
|
-
"@types/react-dom": "^19.1.
|
|
98
|
+
"@types/react": "^19.1.8",
|
|
99
|
+
"@types/react-dom": "^19.1.6",
|
|
100
100
|
"next": "15.3.3",
|
|
101
|
-
"tailwindcss": "^4.1.
|
|
101
|
+
"tailwindcss": "^4.1.10",
|
|
102
102
|
"tsc-alias": "^1.8.16",
|
|
103
|
-
"@fumadocs/cli": "0.2.
|
|
104
|
-
"
|
|
105
|
-
"
|
|
106
|
-
"
|
|
103
|
+
"@fumadocs/cli": "0.2.1",
|
|
104
|
+
"fumadocs-core": "15.5.2",
|
|
105
|
+
"tsconfig": "0.0.0",
|
|
106
|
+
"eslint-config-custom": "0.0.0"
|
|
107
107
|
},
|
|
108
108
|
"peerDependencies": {
|
|
109
109
|
"next": "14.x.x || 15.x.x",
|
|
110
110
|
"react": "18.x.x || 19.x.x",
|
|
111
111
|
"react-dom": "18.x.x || 19.x.x",
|
|
112
|
-
"tailwindcss": "^3.4.14 || ^4.0.0"
|
|
112
|
+
"tailwindcss": "^3.4.14 || ^4.0.0",
|
|
113
|
+
"@types/react": "*"
|
|
113
114
|
},
|
|
114
115
|
"peerDependenciesMeta": {
|
|
116
|
+
"next": {
|
|
117
|
+
"optional": true
|
|
118
|
+
},
|
|
119
|
+
"@types/react": {
|
|
120
|
+
"optional": true
|
|
121
|
+
},
|
|
115
122
|
"tailwindcss": {
|
|
116
123
|
"optional": true
|
|
117
124
|
}
|