fumadocs-ui 14.2.1 → 14.3.1
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/accordion.d.ts +4 -7
- package/dist/components/accordion.d.ts.map +1 -0
- package/dist/components/accordion.js +32 -104
- package/dist/components/api.d.ts +4 -13
- package/dist/components/api.d.ts.map +1 -0
- package/dist/components/api.js +3 -16
- package/dist/components/banner.d.ts +3 -5
- package/dist/components/banner.d.ts.map +1 -0
- package/dist/components/banner.js +53 -120
- package/dist/components/callout.d.ts +4 -7
- package/dist/components/callout.d.ts.map +1 -0
- package/dist/components/callout.js +13 -9
- package/dist/components/card.d.ts +5 -7
- package/dist/components/card.d.ts.map +1 -0
- package/dist/components/card.js +10 -10
- package/dist/components/codeblock.d.ts +6 -9
- package/dist/components/codeblock.d.ts.map +1 -0
- package/dist/components/codeblock.js +41 -15
- package/dist/components/dialog/search-algolia.d.ts +7 -11
- package/dist/components/dialog/search-algolia.d.ts.map +1 -0
- package/dist/components/dialog/search-algolia.js +19 -79
- package/dist/components/dialog/search-default.d.ts +6 -10
- package/dist/components/dialog/search-default.d.ts.map +1 -0
- package/dist/components/dialog/search-default.js +24 -73
- package/dist/components/dialog/search-orama.d.ts +7 -11
- package/dist/components/dialog/search-orama.d.ts.map +1 -0
- package/dist/components/dialog/search-orama.js +22 -79
- package/dist/components/dialog/search.d.ts +7 -9
- package/dist/components/dialog/search.d.ts.map +1 -0
- package/dist/components/dialog/search.js +98 -13
- package/dist/components/dialog/tag-list.d.ts +13 -0
- package/dist/components/dialog/tag-list.d.ts.map +1 -0
- package/dist/components/dialog/tag-list.js +20 -0
- package/dist/components/files.d.ts +7 -9
- package/dist/components/files.d.ts.map +1 -0
- package/dist/components/files.js +15 -63
- package/dist/components/heading.d.ts +4 -5
- package/dist/components/heading.d.ts.map +1 -0
- package/dist/components/heading.js +9 -9
- package/dist/components/image-zoom.d.ts +7 -8
- package/dist/components/image-zoom.d.ts.map +1 -0
- package/dist/components/image-zoom.js +16 -40
- package/dist/components/inline-toc.d.ts +4 -6
- package/dist/components/inline-toc.d.ts.map +1 -0
- package/dist/components/inline-toc.js +8 -46
- package/dist/components/layout/breadcrumb.d.ts +11 -0
- package/dist/components/layout/breadcrumb.d.ts.map +1 -0
- package/dist/components/layout/breadcrumb.js +20 -0
- package/dist/components/layout/language-toggle.d.ts +5 -7
- package/dist/components/layout/language-toggle.d.ts.map +1 -0
- package/dist/components/layout/language-toggle.js +24 -14
- package/dist/components/layout/nav.d.ts +28 -0
- package/dist/components/layout/nav.d.ts.map +1 -0
- package/dist/components/layout/nav.js +29 -0
- package/dist/components/layout/root-toggle.d.ts +5 -7
- package/dist/components/layout/root-toggle.d.ts.map +1 -0
- package/dist/components/layout/root-toggle.js +28 -13
- package/dist/components/layout/search-toggle.d.ts +4 -0
- package/dist/components/layout/search-toggle.d.ts.map +1 -0
- package/dist/components/layout/search-toggle.js +24 -0
- package/dist/components/layout/theme-toggle.d.ts +3 -0
- package/dist/components/layout/theme-toggle.d.ts.map +1 -0
- package/dist/components/layout/theme-toggle.js +21 -0
- package/dist/components/layout/toc-clerk.d.ts +6 -0
- package/dist/components/layout/toc-clerk.d.ts.map +1 -0
- package/dist/components/layout/toc-clerk.js +76 -0
- package/dist/components/layout/toc-popover.d.ts +8 -0
- package/dist/components/layout/toc-popover.d.ts.map +1 -0
- package/dist/components/layout/toc-popover.js +20 -0
- package/dist/components/layout/toc-thumb.d.ts +6 -0
- package/dist/components/layout/toc-thumb.d.ts.map +1 -0
- package/dist/components/layout/toc-thumb.js +53 -0
- package/dist/components/layout/toc.d.ts +19 -0
- package/dist/components/layout/toc.d.ts.map +1 -0
- package/dist/components/layout/toc.js +25 -0
- package/dist/components/registry.d.ts +3 -0
- package/dist/components/registry.d.ts.map +1 -0
- package/dist/components/registry.js +70 -0
- package/dist/components/steps.d.ts +4 -6
- package/dist/components/steps.d.ts.map +1 -0
- package/dist/components/steps.js +5 -16
- package/dist/components/tabs.d.ts +7 -21
- package/dist/components/tabs.d.ts.map +1 -0
- package/dist/components/tabs.js +61 -171
- package/dist/components/type-table.d.ts +5 -6
- package/dist/components/type-table.d.ts.map +1 -0
- package/dist/components/type-table.js +18 -59
- package/dist/components/ui/button.d.ts +5 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +14 -0
- package/dist/components/ui/collapsible.d.ts +6 -0
- package/dist/components/ui/collapsible.d.ts.map +1 -0
- package/dist/components/ui/collapsible.js +12 -0
- package/dist/components/ui/navigation-menu.d.ts +11 -0
- package/dist/components/ui/navigation-menu.d.ts.map +1 -0
- package/dist/components/ui/navigation-menu.js +15 -0
- package/dist/components/ui/popover.d.ts +8 -0
- package/dist/components/ui/popover.d.ts.map +1 -0
- package/dist/components/ui/popover.js +11 -0
- package/dist/components/ui/scroll-area.d.ts +7 -0
- package/dist/components/ui/scroll-area.d.ts.map +1 -0
- package/dist/components/ui/scroll-area.js +11 -0
- package/dist/components/ui/tabs.d.ts +8 -0
- package/dist/components/ui/tabs.d.ts.map +1 -0
- package/dist/components/ui/tabs.js +16 -0
- package/dist/{i18n-Db2HAPOu.d.ts → contexts/i18n.d.ts} +9 -5
- package/dist/contexts/i18n.d.ts.map +1 -0
- package/dist/contexts/i18n.js +23 -0
- package/dist/contexts/search.d.ts +50 -0
- package/dist/contexts/search.d.ts.map +1 -0
- package/dist/contexts/search.js +50 -0
- package/dist/contexts/sidebar.d.ts +18 -0
- package/dist/contexts/sidebar.d.ts.map +1 -0
- package/dist/contexts/sidebar.js +31 -0
- package/dist/contexts/tree.d.ts +13 -0
- package/dist/contexts/tree.d.ts.map +1 -0
- package/dist/contexts/tree.js +25 -0
- package/dist/i18n.d.ts +5 -6
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +31 -49
- package/dist/layouts/docs/navbar.d.ts +4 -0
- package/dist/layouts/docs/navbar.d.ts.map +1 -0
- package/dist/layouts/docs/navbar.js +22 -0
- package/dist/layouts/docs/sidebar.d.ts +40 -0
- package/dist/layouts/docs/sidebar.d.ts.map +1 -0
- package/dist/layouts/docs/sidebar.js +146 -0
- package/dist/layouts/docs.client.d.ts +14 -25
- package/dist/layouts/docs.client.d.ts.map +1 -0
- package/dist/layouts/docs.client.js +53 -195
- package/dist/layouts/docs.d.ts +34 -19
- package/dist/layouts/docs.d.ts.map +1 -0
- package/dist/layouts/docs.js +67 -202
- package/dist/layouts/home/menu.d.ts +6 -0
- package/dist/layouts/home/menu.d.ts.map +1 -0
- package/dist/layouts/home/menu.js +33 -0
- package/dist/layouts/home/navbar.d.ts +16 -0
- package/dist/layouts/home/navbar.d.ts.map +1 -0
- package/dist/layouts/home/navbar.js +48 -0
- package/dist/layouts/home.d.ts +5 -7
- package/dist/layouts/home.d.ts.map +1 -0
- package/dist/layouts/home.js +51 -59
- package/dist/layouts/links.d.ts +80 -0
- package/dist/layouts/links.d.ts.map +1 -0
- package/dist/layouts/links.js +14 -0
- package/dist/layouts/shared.d.ts +48 -2
- package/dist/layouts/shared.d.ts.map +1 -0
- package/dist/layouts/shared.js +27 -9
- package/dist/mdx.client.d.ts +3 -6
- package/dist/mdx.client.d.ts.map +1 -0
- package/dist/mdx.client.js +12 -19
- package/dist/mdx.d.ts +18 -20
- package/dist/mdx.d.ts.map +1 -0
- package/dist/mdx.js +47 -56
- package/dist/og.d.ts +6 -7
- package/dist/og.d.ts.map +1 -0
- package/dist/og.js +43 -102
- package/dist/page.client.d.ts +8 -41
- package/dist/page.client.d.ts.map +1 -0
- package/dist/page.client.js +71 -261
- package/dist/page.d.ts +28 -30
- package/dist/page.d.ts.map +1 -0
- package/dist/page.js +80 -168
- package/dist/provider.d.ts +12 -72
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +19 -55
- package/dist/style.css +1 -1
- package/dist/tailwind-plugin.d.ts +9 -20
- package/dist/tailwind-plugin.d.ts.map +1 -0
- package/dist/tailwind-plugin.js +191 -699
- package/dist/theme/animations.d.ts +170 -0
- package/dist/theme/animations.d.ts.map +1 -0
- package/dist/theme/animations.js +95 -0
- package/dist/theme/colors.d.ts +11 -0
- package/dist/theme/colors.d.ts.map +1 -0
- package/dist/theme/colors.js +327 -0
- package/dist/theme/typography.d.ts +70 -0
- package/dist/theme/typography.d.ts.map +1 -0
- package/dist/theme/typography.js +71 -0
- package/dist/utils/cn.d.ts +2 -0
- package/dist/utils/cn.d.ts.map +1 -0
- package/dist/utils/cn.js +1 -0
- package/dist/utils/get-sidebar-tabs.d.ts +7 -0
- package/dist/utils/get-sidebar-tabs.d.ts.map +1 -0
- package/dist/utils/get-sidebar-tabs.js +20 -0
- package/dist/utils/is-active.d.ts +2 -0
- package/dist/utils/is-active.d.ts.map +1 -0
- package/dist/utils/is-active.js +3 -0
- package/dist/utils/use-copy-button.d.ts +3 -0
- package/dist/utils/use-copy-button.d.ts.map +1 -0
- package/dist/utils/use-copy-button.js +25 -0
- package/package.json +9 -9
- package/dist/chunk-27HFSL7N.js +0 -53
- package/dist/chunk-2FLZOPQN.js +0 -54
- package/dist/chunk-2KMKNVSN.js +0 -29
- package/dist/chunk-AFMXKA2S.js +0 -125
- package/dist/chunk-CDPVENXR.js +0 -8
- package/dist/chunk-CLF6ZVYS.js +0 -259
- package/dist/chunk-DGKCMOIC.js +0 -56
- package/dist/chunk-DN6Z5VW6.js +0 -61
- package/dist/chunk-E3VO2QQT.js +0 -29
- package/dist/chunk-EFMHXXHW.js +0 -24
- package/dist/chunk-F534DZID.js +0 -43
- package/dist/chunk-GHOAONNQ.js +0 -48
- package/dist/chunk-IL64LMKR.js +0 -82
- package/dist/chunk-ILBYBJ5C.js +0 -38
- package/dist/chunk-IVBHRX3O.js +0 -31
- package/dist/chunk-J6XGK6ZG.js +0 -212
- package/dist/chunk-KZTWSBYY.js +0 -68
- package/dist/chunk-MCX7E6ZW.js +0 -57
- package/dist/chunk-MLKGABMK.js +0 -9
- package/dist/chunk-QKOA6KEZ.js +0 -22
- package/dist/chunk-TK3TM3MR.js +0 -6
- package/dist/chunk-TQJ6YPJ3.js +0 -31
- package/dist/chunk-UUGCW3UP.js +0 -84
- package/dist/chunk-VPJMNIJX.js +0 -542
- package/dist/chunk-W36BQGMB.js +0 -69
- package/dist/chunk-YL3MZH7N.js +0 -66
- package/dist/chunk-ZBOI25UW.js +0 -139
- package/dist/components/api.client.d.ts +0 -5
- package/dist/components/api.client.js +0 -8
- package/dist/dynamic-sidebar-SYEETGZL.js +0 -129
- package/dist/edit-on-github-FIYOWWPQ.js +0 -49
- package/dist/layouts/home.client.d.ts +0 -11
- package/dist/layouts/home.client.js +0 -274
- package/dist/shared-SScCiV7b.d.ts +0 -152
- package/dist/sidebar-CQ4HmzQl.d.ts +0 -50
- package/dist/tag-list-BsEgfE3x.d.ts +0 -6
- package/dist/toc-clerk-SKE4LBT7.js +0 -158
- package/dist/tree-06ley65N.d.ts +0 -21
|
@@ -1,82 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
} from
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
} from
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
} from "fumadocs-core/search/client";
|
|
20
|
-
import { useState } from "react";
|
|
21
|
-
import { useOnChange } from "fumadocs-core/utils/use-on-change";
|
|
22
|
-
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
23
|
-
function AlgoliaSearchDialog({
|
|
24
|
-
index,
|
|
25
|
-
searchOptions,
|
|
26
|
-
tags,
|
|
27
|
-
defaultTag,
|
|
28
|
-
showAlgolia = false,
|
|
29
|
-
allowClear = false,
|
|
30
|
-
...props
|
|
31
|
-
}) {
|
|
32
|
-
const [tag, setTag] = useState(defaultTag);
|
|
33
|
-
const { search, setSearch, query } = useDocsSearch(
|
|
34
|
-
{
|
|
35
|
-
type: "algolia",
|
|
36
|
-
index,
|
|
37
|
-
...searchOptions
|
|
38
|
-
},
|
|
39
|
-
void 0,
|
|
40
|
-
tag
|
|
41
|
-
);
|
|
42
|
-
useOnChange(defaultTag, (v) => {
|
|
43
|
-
setTag(v);
|
|
44
|
-
});
|
|
45
|
-
return /* @__PURE__ */ jsx(
|
|
46
|
-
SearchDialog,
|
|
47
|
-
{
|
|
48
|
-
search,
|
|
49
|
-
onSearchChange: setSearch,
|
|
50
|
-
results: query.data ?? [],
|
|
51
|
-
isLoading: query.isLoading,
|
|
52
|
-
...props,
|
|
53
|
-
footer: tags ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
54
|
-
/* @__PURE__ */ jsx(
|
|
55
|
-
TagsList,
|
|
56
|
-
{
|
|
57
|
-
tag,
|
|
58
|
-
onTagChange: setTag,
|
|
59
|
-
items: tags,
|
|
60
|
-
allowClear,
|
|
61
|
-
children: showAlgolia ? /* @__PURE__ */ jsx(AlgoliaTitle, {}) : null
|
|
62
|
-
}
|
|
63
|
-
),
|
|
64
|
-
props.footer
|
|
65
|
-
] }) : props.footer
|
|
66
|
-
}
|
|
67
|
-
);
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useDocsSearch, } from 'fumadocs-core/search/client';
|
|
4
|
+
import { useState } from 'react';
|
|
5
|
+
import { useOnChange } from 'fumadocs-core/utils/use-on-change';
|
|
6
|
+
import { SearchDialog } from './search';
|
|
7
|
+
import { TagsList } from './tag-list';
|
|
8
|
+
export default function AlgoliaSearchDialog({ index, searchOptions, tags, defaultTag, showAlgolia = false, allowClear = false, ...props }) {
|
|
9
|
+
const [tag, setTag] = useState(defaultTag);
|
|
10
|
+
const { search, setSearch, query } = useDocsSearch({
|
|
11
|
+
type: 'algolia',
|
|
12
|
+
index,
|
|
13
|
+
...searchOptions,
|
|
14
|
+
}, undefined, tag);
|
|
15
|
+
useOnChange(defaultTag, (v) => {
|
|
16
|
+
setTag(v);
|
|
17
|
+
});
|
|
18
|
+
return (_jsx(SearchDialog, { search: search, onSearchChange: setSearch, results: query.data ?? [], isLoading: query.isLoading, ...props, footer: tags ? (_jsxs(_Fragment, { children: [_jsx(TagsList, { tag: tag, onTagChange: setTag, items: tags, allowClear: allowClear, children: showAlgolia ? _jsx(AlgoliaTitle, {}) : null }), props.footer] })) : (props.footer) }));
|
|
68
19
|
}
|
|
69
20
|
function AlgoliaTitle() {
|
|
70
|
-
|
|
71
|
-
"a",
|
|
72
|
-
{
|
|
73
|
-
href: "https://algolia.com",
|
|
74
|
-
rel: "noreferrer noopener",
|
|
75
|
-
className: "ms-auto text-xs text-fd-muted-foreground",
|
|
76
|
-
children: "Search powered by Algolia"
|
|
77
|
-
}
|
|
78
|
-
);
|
|
21
|
+
return (_jsx("a", { href: "https://algolia.com", rel: "noreferrer noopener", className: "ms-auto text-xs text-fd-muted-foreground", children: "Search powered by Algolia" }));
|
|
79
22
|
}
|
|
80
|
-
export {
|
|
81
|
-
AlgoliaSearchDialog as default
|
|
82
|
-
};
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
import { ReactNode } from 'react';
|
|
2
|
-
import { SharedProps } from './search
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
import 'fumadocs-core/server';
|
|
6
|
-
|
|
7
|
-
interface DefaultSearchDialogProps extends SharedProps {
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import { type SharedProps } from './search';
|
|
3
|
+
import { type TagItem } from './tag-list';
|
|
4
|
+
export interface DefaultSearchDialogProps extends SharedProps {
|
|
8
5
|
/**
|
|
9
6
|
* @defaultValue 'fetch'
|
|
10
7
|
*/
|
|
@@ -27,6 +24,5 @@ interface DefaultSearchDialogProps extends SharedProps {
|
|
|
27
24
|
*/
|
|
28
25
|
allowClear?: boolean;
|
|
29
26
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
export { type DefaultSearchDialogProps, DefaultSearchDialog as default };
|
|
27
|
+
export default function DefaultSearchDialog({ defaultTag, tags, api, delayMs, type, allowClear, ...props }: DefaultSearchDialogProps): ReactNode;
|
|
28
|
+
//# sourceMappingURL=search-default.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-default.d.ts","sourceRoot":"","sources":["../../../src/components/dialog/search-default.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,SAAS,EAAY,MAAM,OAAO,CAAC;AAGjD,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,KAAK,OAAO,EAAY,MAAM,YAAY,CAAC;AAEpD,MAAM,WAAW,wBAAyB,SAAQ,WAAW;IAC3D;;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,IAAI,EACJ,GAAG,EACH,OAAO,EACP,IAAc,EACd,UAAkB,EAClB,GAAG,KAAK,EACT,EAAE,wBAAwB,GAAG,SAAS,CA8CtC"}
|
|
@@ -1,74 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
} from
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
} from
|
|
8
|
-
import
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
tags,
|
|
26
|
-
api,
|
|
27
|
-
delayMs,
|
|
28
|
-
type = "fetch",
|
|
29
|
-
allowClear = false,
|
|
30
|
-
...props
|
|
31
|
-
}) {
|
|
32
|
-
const { locale } = useI18n();
|
|
33
|
-
const [tag, setTag] = useState(defaultTag);
|
|
34
|
-
const { search, setSearch, query } = useDocsSearch(
|
|
35
|
-
type === "fetch" ? {
|
|
36
|
-
type: "fetch",
|
|
37
|
-
api
|
|
38
|
-
} : {
|
|
39
|
-
type: "static",
|
|
40
|
-
from: api
|
|
41
|
-
},
|
|
42
|
-
locale,
|
|
43
|
-
tag,
|
|
44
|
-
delayMs
|
|
45
|
-
);
|
|
46
|
-
useOnChange(defaultTag, (v) => {
|
|
47
|
-
setTag(v);
|
|
48
|
-
});
|
|
49
|
-
return /* @__PURE__ */ jsx(
|
|
50
|
-
SearchDialog,
|
|
51
|
-
{
|
|
52
|
-
search,
|
|
53
|
-
onSearchChange: setSearch,
|
|
54
|
-
isLoading: query.isLoading,
|
|
55
|
-
results: query.data ?? [],
|
|
56
|
-
...props,
|
|
57
|
-
footer: tags ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
58
|
-
/* @__PURE__ */ jsx(
|
|
59
|
-
TagsList,
|
|
60
|
-
{
|
|
61
|
-
tag,
|
|
62
|
-
onTagChange: setTag,
|
|
63
|
-
items: tags,
|
|
64
|
-
allowClear
|
|
65
|
-
}
|
|
66
|
-
),
|
|
67
|
-
props.footer
|
|
68
|
-
] }) : props.footer
|
|
69
|
-
}
|
|
70
|
-
);
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useDocsSearch } from 'fumadocs-core/search/client';
|
|
4
|
+
import { useState } from 'react';
|
|
5
|
+
import { useOnChange } from 'fumadocs-core/utils/use-on-change';
|
|
6
|
+
import { useI18n } from '../../contexts/i18n';
|
|
7
|
+
import { SearchDialog } from './search';
|
|
8
|
+
import { TagsList } from './tag-list';
|
|
9
|
+
export default function DefaultSearchDialog({ defaultTag, tags, api, delayMs, type = 'fetch', allowClear = false, ...props }) {
|
|
10
|
+
const { locale } = useI18n();
|
|
11
|
+
const [tag, setTag] = useState(defaultTag);
|
|
12
|
+
const { search, setSearch, query } = useDocsSearch(type === 'fetch'
|
|
13
|
+
? {
|
|
14
|
+
type: 'fetch',
|
|
15
|
+
api,
|
|
16
|
+
}
|
|
17
|
+
: {
|
|
18
|
+
type: 'static',
|
|
19
|
+
from: api,
|
|
20
|
+
}, locale, tag, delayMs);
|
|
21
|
+
useOnChange(defaultTag, (v) => {
|
|
22
|
+
setTag(v);
|
|
23
|
+
});
|
|
24
|
+
return (_jsx(SearchDialog, { search: search, onSearchChange: setSearch, isLoading: query.isLoading, results: query.data ?? [], ...props, footer: tags ? (_jsxs(_Fragment, { children: [_jsx(TagsList, { tag: tag, onTagChange: setTag, items: tags, allowClear: allowClear }), props.footer] })) : (props.footer) }));
|
|
71
25
|
}
|
|
72
|
-
export {
|
|
73
|
-
DefaultSearchDialog as default
|
|
74
|
-
};
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
import { OramaCloudOptions } from 'fumadocs-core/search/client';
|
|
2
|
-
import { ReactNode } from 'react';
|
|
3
|
-
import { SharedProps } from './search
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
import 'fumadocs-core/server';
|
|
7
|
-
|
|
8
|
-
interface OramaSearchDialogProps extends SharedProps {
|
|
1
|
+
import { type OramaCloudOptions } from 'fumadocs-core/search/client';
|
|
2
|
+
import { type ReactNode } from 'react';
|
|
3
|
+
import { type SharedProps } from './search';
|
|
4
|
+
import { type TagItem } from './tag-list';
|
|
5
|
+
export interface OramaSearchDialogProps extends SharedProps {
|
|
9
6
|
client: OramaCloudOptions['client'];
|
|
10
7
|
searchOptions?: OramaCloudOptions['params'];
|
|
11
8
|
footer?: ReactNode;
|
|
@@ -27,6 +24,5 @@ interface OramaSearchDialogProps extends SharedProps {
|
|
|
27
24
|
/**
|
|
28
25
|
* Orama Cloud integration
|
|
29
26
|
*/
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
export { type OramaSearchDialogProps, OramaSearchDialog as default };
|
|
27
|
+
export default function OramaSearchDialog({ client, searchOptions, tags, defaultTag, showOrama, allowClear, ...props }: OramaSearchDialogProps): ReactNode;
|
|
28
|
+
//# sourceMappingURL=search-orama.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-orama.d.ts","sourceRoot":"","sources":["../../../src/components/dialog/search-orama.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,KAAK,SAAS,EAAY,MAAM,OAAO,CAAC;AAEjD,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,KAAK,OAAO,EAAY,MAAM,YAAY,CAAC;AAEpD,MAAM,WAAW,sBAAuB,SAAQ,WAAW;IACzD,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACpC,aAAa,CAAC,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC5C,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,IAAI,EACJ,UAAU,EACV,SAAiB,EACjB,UAAkB,EAClB,GAAG,KAAK,EACT,EAAE,sBAAsB,GAAG,SAAS,CA0CpC"}
|
|
@@ -1,82 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
} from
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
} from
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
23
|
-
function OramaSearchDialog({
|
|
24
|
-
client,
|
|
25
|
-
searchOptions,
|
|
26
|
-
tags,
|
|
27
|
-
defaultTag,
|
|
28
|
-
showOrama = false,
|
|
29
|
-
allowClear = false,
|
|
30
|
-
...props
|
|
31
|
-
}) {
|
|
32
|
-
const [tag, setTag] = useState(defaultTag);
|
|
33
|
-
const { search, setSearch, query } = useDocsSearch(
|
|
34
|
-
{
|
|
35
|
-
type: "orama-cloud",
|
|
36
|
-
client,
|
|
37
|
-
params: searchOptions
|
|
38
|
-
},
|
|
39
|
-
void 0,
|
|
40
|
-
tag
|
|
41
|
-
);
|
|
42
|
-
useOnChange(defaultTag, (v) => {
|
|
43
|
-
setTag(v);
|
|
44
|
-
});
|
|
45
|
-
return /* @__PURE__ */ jsx(
|
|
46
|
-
SearchDialog,
|
|
47
|
-
{
|
|
48
|
-
search,
|
|
49
|
-
onSearchChange: setSearch,
|
|
50
|
-
results: query.data ?? [],
|
|
51
|
-
isLoading: query.isLoading,
|
|
52
|
-
...props,
|
|
53
|
-
footer: tags ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
54
|
-
/* @__PURE__ */ jsx(
|
|
55
|
-
TagsList,
|
|
56
|
-
{
|
|
57
|
-
tag,
|
|
58
|
-
onTagChange: setTag,
|
|
59
|
-
items: tags,
|
|
60
|
-
allowClear,
|
|
61
|
-
children: showOrama ? /* @__PURE__ */ jsx(Label, {}) : null
|
|
62
|
-
}
|
|
63
|
-
),
|
|
64
|
-
props.footer
|
|
65
|
-
] }) : props.footer
|
|
66
|
-
}
|
|
67
|
-
);
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useDocsSearch, } from 'fumadocs-core/search/client';
|
|
4
|
+
import { useState } from 'react';
|
|
5
|
+
import { useOnChange } from 'fumadocs-core/utils/use-on-change';
|
|
6
|
+
import { SearchDialog } from './search';
|
|
7
|
+
import { TagsList } from './tag-list';
|
|
8
|
+
/**
|
|
9
|
+
* Orama Cloud integration
|
|
10
|
+
*/
|
|
11
|
+
export default function OramaSearchDialog({ client, searchOptions, tags, defaultTag, showOrama = false, allowClear = false, ...props }) {
|
|
12
|
+
const [tag, setTag] = useState(defaultTag);
|
|
13
|
+
const { search, setSearch, query } = useDocsSearch({
|
|
14
|
+
type: 'orama-cloud',
|
|
15
|
+
client,
|
|
16
|
+
params: searchOptions,
|
|
17
|
+
}, undefined, tag);
|
|
18
|
+
useOnChange(defaultTag, (v) => {
|
|
19
|
+
setTag(v);
|
|
20
|
+
});
|
|
21
|
+
return (_jsx(SearchDialog, { search: search, onSearchChange: setSearch, results: query.data ?? [], isLoading: query.isLoading, ...props, footer: tags ? (_jsxs(_Fragment, { children: [_jsx(TagsList, { tag: tag, onTagChange: setTag, items: tags, allowClear: allowClear, children: showOrama ? _jsx(Label, {}) : null }), props.footer] })) : (props.footer) }));
|
|
68
22
|
}
|
|
69
23
|
function Label() {
|
|
70
|
-
|
|
71
|
-
"a",
|
|
72
|
-
{
|
|
73
|
-
href: "https://orama.com",
|
|
74
|
-
rel: "noreferrer noopener",
|
|
75
|
-
className: "ms-auto text-xs text-fd-muted-foreground",
|
|
76
|
-
children: "Search powered by Orama"
|
|
77
|
-
}
|
|
78
|
-
);
|
|
24
|
+
return (_jsx("a", { href: "https://orama.com", rel: "noreferrer noopener", className: "ms-auto text-xs text-fd-muted-foreground", children: "Search powered by Orama" }));
|
|
79
25
|
}
|
|
80
|
-
export {
|
|
81
|
-
OramaSearchDialog as default
|
|
82
|
-
};
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
type SearchLink = [name: string, href: string];
|
|
6
|
-
interface SharedProps {
|
|
1
|
+
import type { SortedResult } from 'fumadocs-core/server';
|
|
2
|
+
import { type ReactNode } from 'react';
|
|
3
|
+
export type SearchLink = [name: string, href: string];
|
|
4
|
+
export interface SharedProps {
|
|
7
5
|
open: boolean;
|
|
8
6
|
onOpenChange: (open: boolean) => void;
|
|
9
7
|
/**
|
|
@@ -24,6 +22,6 @@ interface SearchResultProps {
|
|
|
24
22
|
items: SortedResult[];
|
|
25
23
|
hideResults?: boolean;
|
|
26
24
|
}
|
|
27
|
-
declare function SearchDialog({ open, onOpenChange, footer, links, ...props }: SearchDialogProps):
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
export declare function SearchDialog({ open, onOpenChange, footer, links, ...props }: SearchDialogProps): import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/components/dialog/search.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EAEL,KAAK,SAAS,EAKf,MAAM,OAAO,CAAC;AAaf,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAEtC;;OAEG;IACH,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;CACtB;AAED,KAAK,iBAAiB,GAAG,WAAW,GAClC,gBAAgB,GAChB,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,GAAG;IACjC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IAElC,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB,CAAC;AAEJ,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,UAAU,iBAAiB;IACzB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,KAAU,EACV,GAAG,KAAK,EACT,EAAE,iBAAiB,2CAoCnB"}
|
|
@@ -1,14 +1,99 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
} from
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
export {
|
|
13
|
-
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { FileText, Hash, Loader2, SearchIcon, Text } from 'lucide-react';
|
|
4
|
+
import { useRouter } from 'next/navigation';
|
|
5
|
+
import { useMemo, useEffect, useState, useRef, } from 'react';
|
|
6
|
+
import { useI18n } from '../../contexts/i18n';
|
|
7
|
+
import { cn } from '../../utils/cn';
|
|
8
|
+
import { useSearchContext } from '../../contexts/search';
|
|
9
|
+
import { useSidebar } from '../../contexts/sidebar';
|
|
10
|
+
import { buttonVariants } from '../../components/ui/button';
|
|
11
|
+
import { Dialog, DialogContent, DialogOverlay, DialogTitle, } from '@radix-ui/react-dialog';
|
|
12
|
+
export function SearchDialog({ open, onOpenChange, footer, links = [], ...props }) {
|
|
13
|
+
const { text } = useI18n();
|
|
14
|
+
const defaultItems = useMemo(() => links.map(([name, link]) => ({
|
|
15
|
+
type: 'page',
|
|
16
|
+
id: name,
|
|
17
|
+
content: name,
|
|
18
|
+
url: link,
|
|
19
|
+
})), [links]);
|
|
20
|
+
return (_jsxs(Dialog, { open: open, onOpenChange: onOpenChange, children: [_jsx(DialogOverlay, { className: "fixed inset-0 z-50 bg-fd-background/50 backdrop-blur-sm data-[state=closed]:animate-fd-fade-out data-[state=open]:animate-fd-fade-in" }), _jsxs(DialogContent, { "aria-describedby": undefined, className: "fixed left-1/2 top-[10vh] z-50 w-[98vw] max-w-screen-sm origin-left -translate-x-1/2 rounded-lg border bg-fd-popover text-fd-popover-foreground shadow-lg data-[state=closed]:animate-fd-dialog-out data-[state=open]:animate-fd-dialog-in", children: [_jsx(DialogTitle, { className: "hidden", children: text.search }), _jsx(SearchInput, { search: props.search, onSearchChange: props.onSearchChange, isLoading: props.isLoading }), _jsx(SearchList, { items: props.results === 'empty' ? defaultItems : props.results, hideResults: props.results === 'empty' && defaultItems.length === 0 }), footer ? (_jsx("div", { className: "mt-auto flex flex-col border-t p-3", children: footer })) : null] })] }));
|
|
21
|
+
}
|
|
22
|
+
const icons = {
|
|
23
|
+
text: _jsx(Text, { className: "size-4 text-fd-muted-foreground" }),
|
|
24
|
+
heading: _jsx(Hash, { className: "size-4 text-fd-muted-foreground" }),
|
|
25
|
+
page: _jsx(FileText, { className: "size-4 text-fd-muted-foreground" }),
|
|
14
26
|
};
|
|
27
|
+
function SearchInput({ search, onSearchChange, isLoading }) {
|
|
28
|
+
const { text } = useI18n();
|
|
29
|
+
const { setOpenSearch } = useSearchContext();
|
|
30
|
+
return (_jsxs("div", { className: "flex flex-row items-center gap-2 px-3", children: [_jsx(LoadingIndicator, { isLoading: isLoading ?? false }), _jsx("input", { value: search, onChange: (e) => {
|
|
31
|
+
onSearchChange(e.target.value);
|
|
32
|
+
}, placeholder: text.search, className: "w-0 flex-1 bg-transparent py-3 text-base placeholder:text-fd-muted-foreground focus-visible:outline-none" }), _jsx("button", { type: "button", "aria-label": "Close Search", onClick: () => {
|
|
33
|
+
setOpenSearch(false);
|
|
34
|
+
}, className: cn(buttonVariants({
|
|
35
|
+
color: 'outline',
|
|
36
|
+
className: 'text-xs p-1.5',
|
|
37
|
+
})), children: "Esc" })] }));
|
|
38
|
+
}
|
|
39
|
+
function SearchList({ items, hideResults = false }) {
|
|
40
|
+
const [active, setActive] = useState();
|
|
41
|
+
const { text } = useI18n();
|
|
42
|
+
const router = useRouter();
|
|
43
|
+
const sidebar = useSidebar();
|
|
44
|
+
const { setOpenSearch } = useSearchContext();
|
|
45
|
+
if (items.length > 0 &&
|
|
46
|
+
(!active || items.every((item) => item.id !== active))) {
|
|
47
|
+
setActive(items[0].id);
|
|
48
|
+
}
|
|
49
|
+
const listenerRef = useRef();
|
|
50
|
+
listenerRef.current = (e) => {
|
|
51
|
+
if (e.key === 'ArrowDown' || e.key == 'ArrowUp') {
|
|
52
|
+
setActive((cur) => {
|
|
53
|
+
const idx = items.findIndex((item) => item.id === cur);
|
|
54
|
+
if (idx === -1)
|
|
55
|
+
return items.at(0)?.id;
|
|
56
|
+
return items.at((e.key === 'ArrowDown' ? idx + 1 : idx - 1) % items.length)?.id;
|
|
57
|
+
});
|
|
58
|
+
e.preventDefault();
|
|
59
|
+
}
|
|
60
|
+
if (e.key === 'Enter') {
|
|
61
|
+
const selected = items.find((item) => item.id === active);
|
|
62
|
+
if (selected)
|
|
63
|
+
onOpen(selected.url);
|
|
64
|
+
e.preventDefault();
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
useEffect(() => {
|
|
68
|
+
const listener = (e) => {
|
|
69
|
+
listenerRef.current?.(e);
|
|
70
|
+
};
|
|
71
|
+
window.addEventListener('keydown', listener);
|
|
72
|
+
return () => {
|
|
73
|
+
window.removeEventListener('keydown', listener);
|
|
74
|
+
};
|
|
75
|
+
}, []);
|
|
76
|
+
const onOpen = (url) => {
|
|
77
|
+
router.push(url);
|
|
78
|
+
setOpenSearch(false);
|
|
79
|
+
sidebar.setOpen(false);
|
|
80
|
+
};
|
|
81
|
+
return (_jsxs("div", { className: cn('flex max-h-[460px] flex-col overflow-y-auto border-t p-2', hideResults && 'hidden'), children: [items.length === 0 ? (_jsx("div", { className: "py-12 text-center text-sm", children: text.searchNoResult })) : null, items.map((item) => (_jsxs(CommandItem, { value: item.id, active: active, onActiveChange: setActive, onClick: () => {
|
|
82
|
+
onOpen(item.url);
|
|
83
|
+
}, children: [item.type !== 'page' ? (_jsx("div", { role: "none", className: "ms-2 h-full min-h-10 w-px bg-fd-border" })) : null, icons[item.type], _jsx("p", { className: "w-0 flex-1 truncate", children: item.content })] }, item.id)))] }));
|
|
84
|
+
}
|
|
85
|
+
function LoadingIndicator({ isLoading }) {
|
|
86
|
+
return (_jsxs("div", { className: "relative size-4", children: [_jsx(Loader2, { className: cn('absolute size-full animate-spin text-fd-primary transition-opacity', !isLoading && 'opacity-0') }), _jsx(SearchIcon, { className: cn('absolute size-full text-fd-muted-foreground transition-opacity', isLoading && 'opacity-0') })] }));
|
|
87
|
+
}
|
|
88
|
+
function CommandItem({ active, onActiveChange, value, ...props }) {
|
|
89
|
+
const ref = useRef(null);
|
|
90
|
+
useEffect(() => {
|
|
91
|
+
const element = ref.current;
|
|
92
|
+
if (active === value && element) {
|
|
93
|
+
element.scrollIntoView({
|
|
94
|
+
block: 'nearest',
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}, [active, value]);
|
|
98
|
+
return (_jsx("button", { ref: ref, type: "button", "aria-selected": active === value, onPointerMove: () => onActiveChange(value), ...props, className: cn('flex min-h-10 select-none flex-row items-center gap-2.5 rounded-lg px-2 text-start text-sm aria-disabled:pointer-events-none aria-disabled:opacity-50 aria-selected:bg-fd-accent aria-selected:text-fd-accent-foreground', props.className), children: props.children }));
|
|
99
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { HTMLAttributes } from 'react';
|
|
2
|
+
export interface TagItem {
|
|
3
|
+
name: string;
|
|
4
|
+
value: string | undefined;
|
|
5
|
+
}
|
|
6
|
+
export interface TagsListProps extends HTMLAttributes<HTMLDivElement> {
|
|
7
|
+
tag?: string;
|
|
8
|
+
onTagChange: (tag: string | undefined) => void;
|
|
9
|
+
allowClear?: boolean;
|
|
10
|
+
items: TagItem[];
|
|
11
|
+
}
|
|
12
|
+
export declare function TagsList({ tag, onTagChange, items, allowClear, ...props }: TagsListProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
//# sourceMappingURL=tag-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tag-list.d.ts","sourceRoot":"","sources":["../../../src/components/dialog/tag-list.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAI5C,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,aAAc,SAAQ,cAAc,CAAC,cAAc,CAAC;IACnE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAC/C,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB;AAaD,wBAAgB,QAAQ,CAAC,EACvB,GAAG,EACH,WAAW,EACX,KAAK,EACL,UAAU,EACV,GAAG,KAAK,EACT,EAAE,aAAa,2CA0Bf"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cva } from 'class-variance-authority';
|
|
3
|
+
import { cn } from '../../utils/cn';
|
|
4
|
+
const itemVariants = cva('rounded-md border px-2 py-0.5 text-xs font-medium text-fd-muted-foreground transition-colors', {
|
|
5
|
+
variants: {
|
|
6
|
+
active: {
|
|
7
|
+
true: 'bg-fd-accent text-fd-accent-foreground',
|
|
8
|
+
},
|
|
9
|
+
},
|
|
10
|
+
});
|
|
11
|
+
export function TagsList({ tag, onTagChange, items, allowClear, ...props }) {
|
|
12
|
+
return (_jsxs("div", { ...props, className: cn('flex flex-row items-center gap-1', props.className), children: [items.map((item) => (_jsx("button", { type: "button", className: cn(itemVariants({ active: tag === item.value })), onClick: () => {
|
|
13
|
+
if (tag === item.value && allowClear) {
|
|
14
|
+
onTagChange(undefined);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
onTagChange(item.value);
|
|
18
|
+
}
|
|
19
|
+
}, tabIndex: -1, children: item.name }, item.value))), props.children] }));
|
|
20
|
+
}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { HTMLAttributes, ReactNode } from 'react';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
interface FileProps extends HTMLAttributes<HTMLDivElement> {
|
|
1
|
+
import { type HTMLAttributes, type ReactNode } from 'react';
|
|
2
|
+
export declare function Files({ className, ...props }: HTMLAttributes<HTMLDivElement>): React.ReactElement;
|
|
3
|
+
export interface FileProps extends HTMLAttributes<HTMLDivElement> {
|
|
5
4
|
name: string;
|
|
6
5
|
icon?: ReactNode;
|
|
7
6
|
}
|
|
8
|
-
interface FolderProps extends HTMLAttributes<HTMLDivElement> {
|
|
7
|
+
export interface FolderProps extends HTMLAttributes<HTMLDivElement> {
|
|
9
8
|
name: string;
|
|
10
9
|
disabled?: boolean;
|
|
11
10
|
/**
|
|
@@ -15,7 +14,6 @@ interface FolderProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
15
14
|
*/
|
|
16
15
|
defaultOpen?: boolean;
|
|
17
16
|
}
|
|
18
|
-
declare function File({ name, icon, className, ...rest }: FileProps): React.ReactElement;
|
|
19
|
-
declare function Folder({ name, defaultOpen, ...props }: FolderProps): React.ReactElement;
|
|
20
|
-
|
|
21
|
-
export { File, type FileProps, Files, Folder, type FolderProps };
|
|
17
|
+
export declare function File({ name, icon, className, ...rest }: FileProps): React.ReactElement;
|
|
18
|
+
export declare function Folder({ name, defaultOpen, ...props }: FolderProps): React.ReactElement;
|
|
19
|
+
//# sourceMappingURL=files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/components/files.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAY,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAYtE,wBAAgB,KAAK,CAAC,EACpB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC,YAAY,CASrD;AAED,MAAM,WAAW,SAAU,SAAQ,cAAc,CAAC,cAAc,CAAC;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,MAAM,WAAW,WAAY,SAAQ,cAAc,CAAC,cAAc,CAAC;IACjE,IAAI,EAAE,MAAM,CAAC;IAEb,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,IAAI,CAAC,EACnB,IAAI,EACJ,IAAmB,EACnB,SAAS,EACT,GAAG,IAAI,EACR,EAAE,SAAS,GAAG,KAAK,CAAC,YAAY,CAOhC;AAED,wBAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,WAAmB,EACnB,GAAG,KAAK,EACT,EAAE,WAAW,GAAG,KAAK,CAAC,YAAY,CAclC"}
|