@gardenfi/garden-book 0.2.31 → 0.3.0-beta.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/dist/BulletList/BulletList.d.ts +21 -0
- package/dist/BulletList/index.d.ts +2 -0
- package/dist/BulletList/index.js +31 -0
- package/dist/CardList/CardList.d.ts +32 -0
- package/dist/CardList/index.d.ts +2 -0
- package/dist/CardList/index.js +141 -0
- package/dist/Checkbox/Checkbox.js +7 -0
- package/dist/Checkbox/RadixCheckbox.d.ts +3 -0
- package/dist/Checkbox/RadixCheckbox.js +27 -0
- package/dist/Checkbox/index.d.ts +1 -0
- package/dist/Checkbox/index.js +4 -5
- package/dist/DashboardLayout/DashboardLayout.d.ts +23 -0
- package/dist/DashboardLayout/DashboardNavbar.d.ts +11 -0
- package/dist/DashboardLayout/DashboardNavbar.js +32 -0
- package/dist/DashboardLayout/DashboardSidebar.d.ts +30 -0
- package/dist/DashboardLayout/DashboardSidebar.js +139 -0
- package/dist/DashboardLayout/MobileMenu.d.ts +11 -0
- package/dist/DashboardLayout/MobileMenu.js +126 -0
- package/dist/DashboardLayout/PageHeader.d.ts +13 -0
- package/dist/DashboardLayout/PageHeader.js +47 -0
- package/dist/DashboardLayout/index.d.ts +10 -0
- package/dist/DashboardLayout/index.js +93 -0
- package/dist/DataTable/DataTable.d.ts +50 -0
- package/dist/DataTable/Table.d.ts +7 -0
- package/dist/DataTable/Table.js +57 -0
- package/dist/DataTable/index.d.ts +2 -0
- package/dist/DataTable/index.js +269 -0
- package/dist/DataTable/useAnimatedTable.d.ts +8 -0
- package/dist/DataTable/useAnimatedTable.js +44 -0
- package/dist/DirectionalIconHover/DirectionalIconHover.d.ts +12 -0
- package/dist/DirectionalIconHover/index.d.ts +2 -0
- package/dist/DirectionalIconHover/index.js +72 -0
- package/dist/EmptyState/EmptyState.d.ts +20 -0
- package/dist/EmptyState/index.d.ts +2 -0
- package/dist/EmptyState/index.js +35 -0
- package/dist/ErrorState/ErrorState.d.ts +17 -0
- package/dist/ErrorState/errorMessages.d.ts +2 -0
- package/dist/ErrorState/errorMessages.js +13 -0
- package/dist/ErrorState/index.d.ts +2 -0
- package/dist/ErrorState/index.js +37 -0
- package/dist/Field/Field.d.ts +14 -0
- package/dist/Field/index.d.ts +2 -0
- package/dist/Field/index.js +14 -0
- package/dist/HamburgerIcon/HamburgerIcon.d.ts +5 -0
- package/dist/HamburgerIcon/index.d.ts +2 -0
- package/dist/HamburgerIcon/index.js +47 -0
- package/dist/InfoTooltip/InfoTooltip.d.ts +22 -0
- package/dist/InfoTooltip/index.d.ts +2 -0
- package/dist/InfoTooltip/index.js +81 -0
- package/dist/Input/Input.d.ts +19 -0
- package/dist/Input/index.d.ts +2 -0
- package/dist/Input/index.js +113 -0
- package/dist/Logo/index.d.ts +0 -1
- package/dist/Logo/index.js +8 -10
- package/dist/OTPInput/OTPInput.d.ts +11 -0
- package/dist/OTPInput/index.d.ts +2 -0
- package/dist/OTPInput/index.js +88 -0
- package/dist/Pagination/Pagination.d.ts +16 -0
- package/dist/Pagination/index.d.ts +2 -0
- package/dist/Pagination/index.js +111 -0
- package/dist/Portal/Portal.d.ts +8 -0
- package/dist/Portal/index.d.ts +2 -0
- package/dist/Portal/index.js +11 -0
- package/dist/ResponsiveModal/ResponsiveModal.d.ts +14 -0
- package/dist/ResponsiveModal/index.d.ts +2 -0
- package/dist/ResponsiveModal/index.js +62 -0
- package/dist/SelectDropdown/SelectDropdown.d.ts +41 -0
- package/dist/SelectDropdown/index.d.ts +2 -0
- package/dist/SelectDropdown/index.js +195 -0
- package/dist/Skeleton/Skeleton.d.ts +3 -0
- package/dist/Skeleton/index.d.ts +2 -0
- package/dist/Skeleton/index.js +12 -0
- package/dist/StatCard/StatCard.d.ts +20 -0
- package/dist/StatCard/index.d.ts +2 -0
- package/dist/StatCard/index.js +42 -0
- package/dist/StateContainer/StateContainer.d.ts +8 -0
- package/dist/StateContainer/index.d.ts +2 -0
- package/dist/StateContainer/index.js +15 -0
- package/dist/StatusChip/StatusChip.d.ts +11 -0
- package/dist/StatusChip/index.d.ts +2 -0
- package/dist/StatusChip/index.js +33 -0
- package/dist/Switch/Switch.d.ts +3 -0
- package/dist/Switch/index.d.ts +1 -0
- package/dist/Switch/index.js +31 -0
- package/dist/Toast/Toast.d.ts +15 -0
- package/dist/Toast/Toast.js +93 -0
- package/dist/Toast/Toaster.d.ts +5 -0
- package/dist/Toast/Toaster.js +30 -0
- package/dist/Toast/index.d.ts +5 -0
- package/dist/Toast/index.js +16 -0
- package/dist/Toast/useToast.d.ts +46 -0
- package/dist/Toast/useToast.js +76 -0
- package/dist/ToggleGroup/ToggleGroup.d.ts +15 -0
- package/dist/ToggleGroup/index.d.ts +2 -0
- package/dist/ToggleGroup/index.js +57 -0
- package/dist/Typography/Typography.d.ts +2 -2
- package/dist/Viewport/Viewport.d.ts +11 -0
- package/dist/Viewport/index.d.ts +2 -0
- package/dist/Viewport/index.js +7 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.js +386 -314
- package/dist/node_modules/@floating-ui/core/dist/floating-ui.core.js +532 -0
- package/dist/node_modules/@floating-ui/dom/dist/floating-ui.dom.js +403 -0
- package/dist/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.js +232 -0
- package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js +136 -0
- package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.js +128 -0
- package/dist/node_modules/@radix-ui/react-arrow/dist/index.js +24 -0
- package/dist/node_modules/@radix-ui/react-checkbox/dist/index.js +251 -0
- package/dist/node_modules/@radix-ui/react-collection/dist/index.js +48 -0
- package/dist/node_modules/@radix-ui/{react-slot → react-collection/node_modules/@radix-ui/react-slot}/dist/index.js +1 -1
- package/dist/node_modules/@radix-ui/react-dialog/dist/index.js +1 -1
- package/dist/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot/dist/index.js +50 -0
- package/dist/node_modules/@radix-ui/react-direction/dist/index.js +10 -0
- package/dist/node_modules/@radix-ui/react-dismissable-layer/dist/index.js +29 -26
- package/dist/node_modules/@radix-ui/react-dropdown-menu/dist/index.js +208 -0
- package/dist/node_modules/@radix-ui/react-menu/dist/index.js +624 -0
- package/dist/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot/dist/index.js +50 -0
- package/dist/node_modules/@radix-ui/react-popper/dist/index.js +221 -0
- package/dist/node_modules/@radix-ui/react-primitive/dist/index.js +1 -1
- package/dist/node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot/dist/index.js +50 -0
- package/dist/node_modules/@radix-ui/react-roving-focus/dist/index.js +183 -0
- package/dist/node_modules/@radix-ui/react-switch/dist/index.js +132 -0
- package/dist/node_modules/@radix-ui/react-toast/dist/index.js +446 -0
- package/dist/node_modules/@radix-ui/react-tooltip/dist/index.js +330 -0
- package/dist/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot/dist/index.js +11 -0
- package/dist/node_modules/@radix-ui/react-use-previous/dist/index.js +8 -0
- package/dist/node_modules/@radix-ui/react-use-size/dist/index.js +27 -0
- package/dist/node_modules/@radix-ui/react-visually-hidden/dist/index.js +32 -0
- package/dist/node_modules/lucide-react/dist/esm/Icon.js +40 -0
- package/dist/node_modules/lucide-react/dist/esm/createLucideIcon.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/defaultAttributes.js +20 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/arrow-down.js +14 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/arrow-up-down.js +16 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/arrow-up.js +14 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/check.js +11 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-down.js +13 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js +11 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-alert.js +15 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/eye-off.js +28 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.js +20 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/log-out.js +15 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/x.js +14 -0
- package/dist/node_modules/lucide-react/dist/esm/shared/src/utils.js +11 -0
- package/dist/style.css +1 -1
- package/package.json +12 -3
- package/dist/Logo/Code4renaLogo.d.ts +0 -5
- package/dist/Logo/Code4renaLogo.js +0 -45
package/dist/Logo/index.js
CHANGED
|
@@ -3,9 +3,9 @@ import { BTCLogo as m } from "./BTCLogo.js";
|
|
|
3
3
|
import { CatalogLogo as p } from "./CatalogLogo.js";
|
|
4
4
|
import { Coinbase as a } from "./Coinbase.js";
|
|
5
5
|
import { EthereumLogo as g } from "./EthereumLogo.js";
|
|
6
|
-
import { GardenExplorer as
|
|
6
|
+
import { GardenExplorer as l } from "./GardenExplorer.js";
|
|
7
7
|
import { GardenFullLogo as G } from "./GardenFullLogo.js";
|
|
8
|
-
import { GardenLogo as
|
|
8
|
+
import { GardenLogo as c } from "./GardenLogo.js";
|
|
9
9
|
import { GardenLogoText as T } from "./GardenLogoText.js";
|
|
10
10
|
import { GardenStrokeIcon as D } from "./GardenStrokeIcon.js";
|
|
11
11
|
import { GMXLogo as I } from "./GMXLogo.js";
|
|
@@ -30,18 +30,16 @@ import { GardenIcon as mo } from "./GardenIcon.js";
|
|
|
30
30
|
import { GardenIconOutline as po } from "./GardenIconOutline.js";
|
|
31
31
|
import { NFTIcon as ao } from "./NFTIcon.js";
|
|
32
32
|
import { GardenExplorerAlt as go } from "./GardenExplorerAlt.js";
|
|
33
|
-
import { GardenDocs as
|
|
33
|
+
import { GardenDocs as Lo } from "./GardenDocs.js";
|
|
34
34
|
import { GardenLogoMarkDark as io } from "./GardenLogoMarkDark.js";
|
|
35
|
-
import { GardenLogoMarkLight as
|
|
35
|
+
import { GardenLogoMarkLight as Co } from "./GardenLogoMarkLight.js";
|
|
36
36
|
import { GardenLogoDark as ko } from "./GardenLogoDark.js";
|
|
37
37
|
import { GardenLogoLight as uo } from "./GardenLogoLight.js";
|
|
38
|
-
import { Code4renaLogo as ho } from "./Code4renaLogo.js";
|
|
39
38
|
export {
|
|
40
39
|
e as ArbitrumLogo,
|
|
41
40
|
m as BTCLogo,
|
|
42
41
|
q as Camelot,
|
|
43
42
|
p as CatalogLogo,
|
|
44
|
-
ho as Code4renaLogo,
|
|
45
43
|
a as Coinbase,
|
|
46
44
|
v as DLCBTC,
|
|
47
45
|
V as Debridge,
|
|
@@ -49,17 +47,17 @@ export {
|
|
|
49
47
|
g as EthereumLogo,
|
|
50
48
|
H as GMX,
|
|
51
49
|
I as GMXLogo,
|
|
52
|
-
|
|
53
|
-
|
|
50
|
+
Lo as GardenDocs,
|
|
51
|
+
l as GardenExplorer,
|
|
54
52
|
go as GardenExplorerAlt,
|
|
55
53
|
G as GardenFullLogo,
|
|
56
54
|
mo as GardenIcon,
|
|
57
55
|
po as GardenIconOutline,
|
|
58
|
-
|
|
56
|
+
c as GardenLogo,
|
|
59
57
|
ko as GardenLogoDark,
|
|
60
58
|
uo as GardenLogoLight,
|
|
61
59
|
io as GardenLogoMarkDark,
|
|
62
|
-
|
|
60
|
+
Co as GardenLogoMarkLight,
|
|
63
61
|
T as GardenLogoText,
|
|
64
62
|
D as GardenStrokeIcon,
|
|
65
63
|
ao as NFTIcon,
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type OTPInputProps = {
|
|
2
|
+
value: string;
|
|
3
|
+
onChange: (value: string) => void;
|
|
4
|
+
onComplete?: (value: string) => void;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
autoFocus?: boolean;
|
|
7
|
+
className?: string;
|
|
8
|
+
length?: number;
|
|
9
|
+
white?: boolean;
|
|
10
|
+
};
|
|
11
|
+
export declare const OTPInput: ({ value, onChange, onComplete, disabled, autoFocus, className, length, white, }: OTPInputProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { jsx as R } from "react/jsx-runtime";
|
|
2
|
+
import { useState as T, useRef as l, useEffect as m } from "react";
|
|
3
|
+
import { cn as h } from "../utils/index.js";
|
|
4
|
+
const L = ({
|
|
5
|
+
value: p,
|
|
6
|
+
onChange: g,
|
|
7
|
+
onComplete: w,
|
|
8
|
+
disabled: a = !1,
|
|
9
|
+
autoFocus: y = !0,
|
|
10
|
+
className: k,
|
|
11
|
+
length: c = 6,
|
|
12
|
+
white: A = !1
|
|
13
|
+
}) => {
|
|
14
|
+
const [o, i] = T(Array(c).fill("")), s = l([]), D = l(!1), O = l(p), j = l(w);
|
|
15
|
+
m(() => {
|
|
16
|
+
j.current = w;
|
|
17
|
+
}, [w]), m(() => {
|
|
18
|
+
if (p === "" && O.current !== "" && o.some((t) => t !== "")) {
|
|
19
|
+
const t = setTimeout(() => {
|
|
20
|
+
i(Array(c).fill("")), D.current = !1;
|
|
21
|
+
}, 0);
|
|
22
|
+
return () => clearTimeout(t);
|
|
23
|
+
}
|
|
24
|
+
O.current = p;
|
|
25
|
+
}, [p, c, o]), m(() => {
|
|
26
|
+
var t;
|
|
27
|
+
y && s.current[0] && !a && ((t = s.current[0]) == null || t.focus());
|
|
28
|
+
}, [y, a]), m(() => {
|
|
29
|
+
const t = o.join("");
|
|
30
|
+
t.length === c && j.current && !a && !D.current && (D.current = !0, j.current(t));
|
|
31
|
+
}, [o, c, a]);
|
|
32
|
+
const I = (t, r) => {
|
|
33
|
+
var u;
|
|
34
|
+
const e = r.replace(/\D/g, "");
|
|
35
|
+
if (e.length > 1) return;
|
|
36
|
+
const n = [...o];
|
|
37
|
+
n[t] = e, i(n), g(n.join("")), e && t < c - 1 && ((u = s.current[t + 1]) == null || u.focus());
|
|
38
|
+
}, P = (t, r) => {
|
|
39
|
+
var e, n, u;
|
|
40
|
+
if (r.key === "Backspace") {
|
|
41
|
+
if (o[t]) {
|
|
42
|
+
const f = [...o];
|
|
43
|
+
f[t] = "", i(f), g(f.join(""));
|
|
44
|
+
} else if (t > 0) {
|
|
45
|
+
const f = [...o];
|
|
46
|
+
f[t - 1] = "", i(f), g(f.join("")), (e = s.current[t - 1]) == null || e.focus();
|
|
47
|
+
}
|
|
48
|
+
} else r.key === "ArrowLeft" && t > 0 ? (n = s.current[t - 1]) == null || n.focus() : r.key === "ArrowRight" && t < c - 1 && ((u = s.current[t + 1]) == null || u.focus());
|
|
49
|
+
}, S = (t) => {
|
|
50
|
+
var u;
|
|
51
|
+
t.preventDefault();
|
|
52
|
+
const r = t.clipboardData.getData("text").replace(/\D/g, "").slice(0, c);
|
|
53
|
+
if (r.length === 0) return;
|
|
54
|
+
const e = [...o];
|
|
55
|
+
for (let f = 0; f < c; f++)
|
|
56
|
+
e[f] = r[f] || "";
|
|
57
|
+
i(e), g(e.join(""));
|
|
58
|
+
const n = Math.min(r.length - 1, c - 1);
|
|
59
|
+
(u = s.current[n]) == null || u.focus();
|
|
60
|
+
};
|
|
61
|
+
return /* @__PURE__ */ R("div", { className: h("gf-flex gf-gap-3 gf-items-center gf-w-full", k), children: o.map((t, r) => /* @__PURE__ */ R(
|
|
62
|
+
"input",
|
|
63
|
+
{
|
|
64
|
+
ref: (e) => {
|
|
65
|
+
s.current[r] = e;
|
|
66
|
+
},
|
|
67
|
+
type: "text",
|
|
68
|
+
inputMode: "numeric",
|
|
69
|
+
maxLength: 1,
|
|
70
|
+
value: t,
|
|
71
|
+
onChange: (e) => I(r, e.target.value),
|
|
72
|
+
onKeyDown: (e) => P(r, e),
|
|
73
|
+
onPaste: S,
|
|
74
|
+
disabled: a,
|
|
75
|
+
autoFocus: y && r === 0,
|
|
76
|
+
className: h(
|
|
77
|
+
"gf-flex-1 gf-min-w-0 gf-h-11 gf-text-center gf-text-[20px] gf-text-primaryIris gf-rounded-lg gf-bg-white/70",
|
|
78
|
+
"focus:gf-outline-none focus:gf-ring-0 focus:gf-ring-offset-0",
|
|
79
|
+
"disabled:gf-opacity-50 disabled:gf-cursor-not-allowed",
|
|
80
|
+
A && "gf-bg-white/50"
|
|
81
|
+
)
|
|
82
|
+
},
|
|
83
|
+
r
|
|
84
|
+
)) });
|
|
85
|
+
};
|
|
86
|
+
export {
|
|
87
|
+
L as OTPInput
|
|
88
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
|
|
3
|
+
export type PaginationProps = {
|
|
4
|
+
currentPage: number;
|
|
5
|
+
totalPages: number;
|
|
6
|
+
onPageChange: (page: number) => void;
|
|
7
|
+
/** Disables all controls (e.g. while a page request is in flight). */
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
/** Max numbered buttons to show before ellipsis. Default 5. */
|
|
10
|
+
maxVisiblePages?: number;
|
|
11
|
+
className?: string;
|
|
12
|
+
};
|
|
13
|
+
/** Page navigation with prev/next arrows, numbered buttons, and ellipsis for large ranges. Returns null when `totalPages ≤ 1`. */
|
|
14
|
+
export declare const Pagination: ({ currentPage, totalPages, onPageChange, disabled, maxVisiblePages, className, }: PaginationProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
15
|
+
/** Skeleton placeholder matching the Pagination layout while page data loads. */
|
|
16
|
+
export declare const SkeletonPagination: FC;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { jsxs as p, jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import { KeyboardLeftIcon as d } from "../Icons/KeyboardLeftIcon.js";
|
|
3
|
+
import { KeyboardRightIcon as a } from "../Icons/KeyboardRightIcon.js";
|
|
4
|
+
import { Typography as o } from "../Typography/index.js";
|
|
5
|
+
import { cn as c } from "../utils/index.js";
|
|
6
|
+
const x = (f, g, s = 5) => {
|
|
7
|
+
if (f <= s)
|
|
8
|
+
return Array.from({ length: f }, (t, h) => h + 1);
|
|
9
|
+
const i = [], l = Math.floor(s / 2);
|
|
10
|
+
let r = Math.max(1, g - l), n = Math.min(f, g + l);
|
|
11
|
+
g <= l ? n = s : g > f - l && (r = f - s + 1), r > 1 && (i.push(1), r > 2 && i.push("..."));
|
|
12
|
+
for (let t = r; t <= n; t++) i.push(t);
|
|
13
|
+
return n < f && (n < f - 1 && i.push("..."), i.push(f)), i;
|
|
14
|
+
}, M = ({
|
|
15
|
+
currentPage: f,
|
|
16
|
+
totalPages: g,
|
|
17
|
+
onPageChange: s,
|
|
18
|
+
disabled: i = !1,
|
|
19
|
+
maxVisiblePages: l = 5,
|
|
20
|
+
className: r
|
|
21
|
+
}) => {
|
|
22
|
+
if (g <= 1) return null;
|
|
23
|
+
const n = f <= 1 || i, t = f >= g || i, h = x(g, f, l), y = () => {
|
|
24
|
+
n || s(f - 1);
|
|
25
|
+
}, u = () => {
|
|
26
|
+
t || s(f + 1);
|
|
27
|
+
};
|
|
28
|
+
return /* @__PURE__ */ p(
|
|
29
|
+
"div",
|
|
30
|
+
{
|
|
31
|
+
className: c(
|
|
32
|
+
"gf-flex gf-gap-1 gf-justify-center gf-items-center sm:gf-mt-1 gf-mb-8",
|
|
33
|
+
r
|
|
34
|
+
),
|
|
35
|
+
children: [
|
|
36
|
+
/* @__PURE__ */ e(
|
|
37
|
+
d,
|
|
38
|
+
{
|
|
39
|
+
className: c(
|
|
40
|
+
"gf-w-5 sm:gf-w-6 gf-h-5 sm:gf-h-6 gf-py-[5px] sm:gf-py-1.5 gf-cursor-pointer",
|
|
41
|
+
n && "gf-opacity-50 gf-cursor-not-allowed"
|
|
42
|
+
),
|
|
43
|
+
onClick: y
|
|
44
|
+
}
|
|
45
|
+
),
|
|
46
|
+
/* @__PURE__ */ e("div", { className: "gf-flex gf-gap-px", children: h.map(
|
|
47
|
+
(m, w) => m === "..." ? /* @__PURE__ */ e(
|
|
48
|
+
o,
|
|
49
|
+
{
|
|
50
|
+
size: "h5",
|
|
51
|
+
breakpoints: { sm: "h4", md: "h3" },
|
|
52
|
+
className: "gf-p-1.5 gf-min-w-6 sm:gf-min-w-7 gf-h-6 sm:gf-h-7 gf-flex gf-items-center gf-justify-center",
|
|
53
|
+
children: "..."
|
|
54
|
+
},
|
|
55
|
+
`ellipsis-${w}`
|
|
56
|
+
) : /* @__PURE__ */ e(
|
|
57
|
+
"button",
|
|
58
|
+
{
|
|
59
|
+
onClick: () => m !== f && s(m),
|
|
60
|
+
disabled: i,
|
|
61
|
+
className: c(
|
|
62
|
+
"gf-p-1.5 gf-min-w-6 sm:gf-min-w-7 gf-h-6 sm:gf-h-7 gf-rounded-full gf-flex gf-items-center gf-justify-center",
|
|
63
|
+
f === m && "gf-bg-white/50"
|
|
64
|
+
),
|
|
65
|
+
children: /* @__PURE__ */ e(
|
|
66
|
+
o,
|
|
67
|
+
{
|
|
68
|
+
size: "h5",
|
|
69
|
+
breakpoints: { sm: "h4", md: "h3" },
|
|
70
|
+
weight: f === m ? "medium" : "regular",
|
|
71
|
+
children: m
|
|
72
|
+
}
|
|
73
|
+
)
|
|
74
|
+
},
|
|
75
|
+
m
|
|
76
|
+
)
|
|
77
|
+
) }),
|
|
78
|
+
/* @__PURE__ */ e(
|
|
79
|
+
a,
|
|
80
|
+
{
|
|
81
|
+
className: c(
|
|
82
|
+
"gf-w-5 sm:gf-w-6 gf-h-5 sm:gf-h-6 gf-py-[5px] sm:gf-py-1.5 gf-cursor-pointer",
|
|
83
|
+
t && "gf-opacity-50 gf-cursor-not-allowed"
|
|
84
|
+
),
|
|
85
|
+
onClick: u
|
|
86
|
+
}
|
|
87
|
+
)
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
);
|
|
91
|
+
}, z = () => /* @__PURE__ */ p("div", { className: "gf-flex gf-gap-1 gf-justify-center gf-items-center gf-mt-1 gf-mb-8", children: [
|
|
92
|
+
/* @__PURE__ */ e(d, { className: "gf-w-6 gf-h-6 gf-py-1.5 gf-opacity-50" }),
|
|
93
|
+
/* @__PURE__ */ p("div", { className: "gf-flex gf-gap-1", children: [
|
|
94
|
+
/* @__PURE__ */ e("div", { className: "gf-p-1.5 gf-min-w-7 gf-min-h-7 gf-rounded-full gf-flex gf-items-center gf-justify-center gf-bg-white/30 gf-animate-pulse" }),
|
|
95
|
+
/* @__PURE__ */ e("span", { className: "gf-py-1.5 gf-min-w-[22px] gf-h-7 gf-flex gf-items-center gf-justify-center", children: "..." }),
|
|
96
|
+
[0, 1, 2].map((f) => /* @__PURE__ */ e(
|
|
97
|
+
"div",
|
|
98
|
+
{
|
|
99
|
+
className: "gf-p-1.5 gf-min-w-7 gf-min-h-7 gf-rounded-full gf-flex gf-items-center gf-justify-center gf-bg-white/30 gf-animate-pulse"
|
|
100
|
+
},
|
|
101
|
+
f
|
|
102
|
+
)),
|
|
103
|
+
/* @__PURE__ */ e("span", { className: "gf-py-1.5 gf-min-w-[22px] gf-h-7 gf-flex gf-items-center gf-justify-center", children: "..." }),
|
|
104
|
+
/* @__PURE__ */ e("div", { className: "gf-p-1.5 gf-min-w-7 gf-min-h-7 gf-rounded-full gf-flex gf-items-center gf-justify-center gf-bg-white/30 gf-animate-pulse" })
|
|
105
|
+
] }),
|
|
106
|
+
/* @__PURE__ */ e(a, { className: "gf-w-6 gf-h-6 gf-py-1.5 gf-opacity-50" })
|
|
107
|
+
] });
|
|
108
|
+
export {
|
|
109
|
+
M as Pagination,
|
|
110
|
+
z as SkeletonPagination
|
|
111
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
export type PortalProps = {
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
container?: HTMLElement | null;
|
|
6
|
+
};
|
|
7
|
+
/** SSR-safe React portal. Delays mount until after hydration to avoid document access on the server. */
|
|
8
|
+
export declare const Portal: ({ children, container }: PortalProps) => import('react').ReactPortal | null;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { useState as u, useEffect as n } from "react";
|
|
2
|
+
import { createPortal as f } from "react-dom";
|
|
3
|
+
const a = ({ children: t, container: e }) => {
|
|
4
|
+
const [o, r] = u(!1);
|
|
5
|
+
return n(() => {
|
|
6
|
+
r(!0);
|
|
7
|
+
}, []), o ? f(t, e ?? document.body) : null;
|
|
8
|
+
};
|
|
9
|
+
export {
|
|
10
|
+
a as Portal
|
|
11
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { FC, ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
type OpacityVariants = "extra-light" | "light" | "medium" | "semi-dark" | "full";
|
|
4
|
+
export type ResponsiveModalProps = {
|
|
5
|
+
open: boolean;
|
|
6
|
+
onClose: () => void;
|
|
7
|
+
label?: string;
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
opacityLevel?: OpacityVariants;
|
|
10
|
+
className?: string;
|
|
11
|
+
};
|
|
12
|
+
/** Modal on desktop, vaul BottomSheet on mobile. Reads viewport from `ViewportProvider`. Portals into `document.body`. */
|
|
13
|
+
export declare const ResponsiveModal: FC<ResponsiveModalProps>;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { jsx as e, jsxs as f } from "react/jsx-runtime";
|
|
2
|
+
import { useState as u, useEffect as d } from "react";
|
|
3
|
+
import { createPortal as m } from "react-dom";
|
|
4
|
+
import { Modal as s } from "../Modal/index.js";
|
|
5
|
+
import { BottomSheet as h } from "../BottomSheet/index.js";
|
|
6
|
+
import { Typography as w } from "../Typography/index.js";
|
|
7
|
+
import { CloseIcon as n } from "../Icons/CloseIcon.js";
|
|
8
|
+
import { useViewport as x } from "../Viewport/index.js";
|
|
9
|
+
import { cn as b } from "../utils/index.js";
|
|
10
|
+
const B = ({
|
|
11
|
+
open: t,
|
|
12
|
+
onClose: r,
|
|
13
|
+
label: o,
|
|
14
|
+
children: i,
|
|
15
|
+
opacityLevel: l = "medium",
|
|
16
|
+
className: g
|
|
17
|
+
}) => {
|
|
18
|
+
const c = x() === "mobile", [a, p] = u(!1);
|
|
19
|
+
return d(() => {
|
|
20
|
+
p(!0);
|
|
21
|
+
}, []), a ? c ? t ? m(
|
|
22
|
+
/* @__PURE__ */ e(h, { open: t, onOpenChange: r, children: i }),
|
|
23
|
+
document.body
|
|
24
|
+
) : null : m(
|
|
25
|
+
/* @__PURE__ */ e(s, { open: t, onClose: r, children: /* @__PURE__ */ f(
|
|
26
|
+
s.Children,
|
|
27
|
+
{
|
|
28
|
+
opacityLevel: l,
|
|
29
|
+
className: b(
|
|
30
|
+
"gf-relative gf-flex gf-w-[500px] gf-flex-col gf-gap-4 gf-rounded-2xl gf-p-4",
|
|
31
|
+
g
|
|
32
|
+
),
|
|
33
|
+
children: [
|
|
34
|
+
o && /* @__PURE__ */ f("div", { className: "gf-flex gf-items-center gf-justify-between", children: [
|
|
35
|
+
/* @__PURE__ */ e(w, { size: "h4", weight: "medium", children: o }),
|
|
36
|
+
/* @__PURE__ */ e(
|
|
37
|
+
n,
|
|
38
|
+
{
|
|
39
|
+
className: "gf-h-3 gf-w-3 gf-fill-primaryIris gf-cursor-pointer",
|
|
40
|
+
onClick: r
|
|
41
|
+
}
|
|
42
|
+
)
|
|
43
|
+
] }),
|
|
44
|
+
!o && /* @__PURE__ */ e(
|
|
45
|
+
"button",
|
|
46
|
+
{
|
|
47
|
+
onClick: r,
|
|
48
|
+
className: "gf-absolute gf-right-4 gf-top-4 gf-cursor-pointer gf-text-white/50 gf-transition-colors hover:gf-text-white",
|
|
49
|
+
"aria-label": "Close",
|
|
50
|
+
children: /* @__PURE__ */ e(n, { className: "gf-h-4 gf-w-4" })
|
|
51
|
+
}
|
|
52
|
+
),
|
|
53
|
+
i
|
|
54
|
+
]
|
|
55
|
+
}
|
|
56
|
+
) }),
|
|
57
|
+
document.body
|
|
58
|
+
) : null;
|
|
59
|
+
};
|
|
60
|
+
export {
|
|
61
|
+
B as ResponsiveModal
|
|
62
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
export type SelectDropdownItem<V extends string> = {
|
|
4
|
+
value: V;
|
|
5
|
+
label: ReactNode;
|
|
6
|
+
icon?: ReactNode;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
};
|
|
9
|
+
export type SelectDropdownProps<V extends string> = {
|
|
10
|
+
items: SelectDropdownItem<V>[];
|
|
11
|
+
value: V;
|
|
12
|
+
onChange: (value: V) => void;
|
|
13
|
+
placeholder?: string;
|
|
14
|
+
/** Insert a 1px separator after each listed value. */
|
|
15
|
+
separatorsAfter?: V[];
|
|
16
|
+
/** Reset action rendered as a pill at the top of the panel (e.g. "Clear filter"). */
|
|
17
|
+
clearAction?: {
|
|
18
|
+
label: string;
|
|
19
|
+
value: V;
|
|
20
|
+
};
|
|
21
|
+
align?: "start" | "end";
|
|
22
|
+
disabled?: boolean;
|
|
23
|
+
/** Extra classes for the floating panel (width / max-height / min-width). */
|
|
24
|
+
contentClassName?: string;
|
|
25
|
+
/** Extra classes for the trigger button. */
|
|
26
|
+
triggerClassName?: string;
|
|
27
|
+
/** Extra classes for the outer wrapper (e.g. "w-full" to make the trigger fill its row). */
|
|
28
|
+
wrapperClassName?: string;
|
|
29
|
+
/** Optional leading icon rendered inside the trigger before the label. */
|
|
30
|
+
triggerIcon?: ReactNode;
|
|
31
|
+
/** Typography size for trigger + item labels. Default `"h5"`. */
|
|
32
|
+
labelSize?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
|
|
33
|
+
/** Tailwind `from-*` class for the scroll-overflow gradient fades. Default `"gf-from-white"`. */
|
|
34
|
+
scrollGradientColor?: string;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Glassmorphic select — no background, no border, just backdrop-blur on the
|
|
38
|
+
* panel. Built from scratch (no shadcn DropdownMenu) so the blur actually
|
|
39
|
+
* shows through to the page content behind it.
|
|
40
|
+
*/
|
|
41
|
+
export declare const SelectDropdown: <V extends string>({ items, value, onChange, placeholder, separatorsAfter, clearAction, align, disabled, contentClassName, triggerClassName, wrapperClassName, triggerIcon, labelSize, scrollGradientColor, }: SelectDropdownProps<V>) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { jsxs as c, jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import { useState as m, useRef as w, useCallback as J, useLayoutEffect as M, useEffect as B, Fragment as Q } from "react";
|
|
3
|
+
import { AnimatePresence as U, motion as V } from "framer-motion";
|
|
4
|
+
import { Typography as E } from "../Typography/index.js";
|
|
5
|
+
import { Portal as X } from "../Portal/index.js";
|
|
6
|
+
import { cn as f } from "../utils/index.js";
|
|
7
|
+
import Y from "../node_modules/lucide-react/dist/esm/icons/chevron-down.js";
|
|
8
|
+
const ie = ({
|
|
9
|
+
items: d,
|
|
10
|
+
value: b,
|
|
11
|
+
onChange: L,
|
|
12
|
+
placeholder: H = "",
|
|
13
|
+
separatorsAfter: v,
|
|
14
|
+
clearAction: u,
|
|
15
|
+
align: x = "start",
|
|
16
|
+
disabled: $,
|
|
17
|
+
contentClassName: D,
|
|
18
|
+
triggerClassName: O,
|
|
19
|
+
wrapperClassName: W,
|
|
20
|
+
triggerIcon: z,
|
|
21
|
+
labelSize: R = "h5",
|
|
22
|
+
scrollGradientColor: S = "gf-from-white"
|
|
23
|
+
}) => {
|
|
24
|
+
const [n, l] = m(!1), T = w(null), P = w(null), a = w(null), C = w(null), [p, F] = m({ top: 0, width: 0 }), [K, G] = m(!1), [q, _] = m(!1), y = d.find((e) => e.value === b) ?? null, I = (y == null ? void 0 : y.label) ?? H, h = J(() => {
|
|
25
|
+
const e = C.current;
|
|
26
|
+
e && (G(e.scrollTop > 0), _(e.scrollTop + e.clientHeight < e.scrollHeight - 1));
|
|
27
|
+
}, []);
|
|
28
|
+
return M(() => {
|
|
29
|
+
if (!n) return;
|
|
30
|
+
const e = (g = !1) => {
|
|
31
|
+
const s = P.current;
|
|
32
|
+
if (!s) return;
|
|
33
|
+
const r = s.getBoundingClientRect();
|
|
34
|
+
if (r.bottom < 0 || r.top > window.innerHeight) {
|
|
35
|
+
l(!1);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const j = r.bottom + 6, N = x === "end" ? void 0 : r.left, k = x === "end" ? window.innerWidth - r.right : void 0;
|
|
39
|
+
g && a.current ? (a.current.style.top = `${j}px`, N !== void 0 && (a.current.style.left = `${N}px`), k !== void 0 && (a.current.style.right = `${k}px`)) : F({ top: j, left: N, right: k, width: r.width });
|
|
40
|
+
};
|
|
41
|
+
e();
|
|
42
|
+
const i = () => e(!1), o = () => e(!0);
|
|
43
|
+
return window.addEventListener("resize", i), window.addEventListener("scroll", o, !0), () => {
|
|
44
|
+
window.removeEventListener("resize", i), window.removeEventListener("scroll", o, !0);
|
|
45
|
+
};
|
|
46
|
+
}, [n, x]), B(() => {
|
|
47
|
+
if (!n) {
|
|
48
|
+
G(!1), _(!1);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
h();
|
|
52
|
+
const e = setTimeout(h, 50);
|
|
53
|
+
return () => clearTimeout(e);
|
|
54
|
+
}, [n, d, h]), B(() => {
|
|
55
|
+
if (!n) return;
|
|
56
|
+
const e = (o) => {
|
|
57
|
+
var s, r;
|
|
58
|
+
const g = o.target;
|
|
59
|
+
(s = T.current) != null && s.contains(g) || (r = a.current) != null && r.contains(g) || l(!1);
|
|
60
|
+
}, i = (o) => {
|
|
61
|
+
o.key === "Escape" && l(!1);
|
|
62
|
+
};
|
|
63
|
+
return document.addEventListener("mousedown", e), document.addEventListener("keydown", i), () => {
|
|
64
|
+
document.removeEventListener("mousedown", e), document.removeEventListener("keydown", i);
|
|
65
|
+
};
|
|
66
|
+
}, [n]), /* @__PURE__ */ c("div", { ref: T, className: f("gf-relative gf-inline-block", W), children: [
|
|
67
|
+
/* @__PURE__ */ c(
|
|
68
|
+
"button",
|
|
69
|
+
{
|
|
70
|
+
ref: P,
|
|
71
|
+
type: "button",
|
|
72
|
+
disabled: $,
|
|
73
|
+
onClick: () => l((e) => !e),
|
|
74
|
+
"aria-haspopup": "listbox",
|
|
75
|
+
"aria-expanded": n,
|
|
76
|
+
className: f(
|
|
77
|
+
"gf-flex gf-items-center gf-gap-1.5 gf-py-2 gf-px-3 gf-rounded-full gf-bg-white/70 focus:gf-outline-none gf-transition-colors disabled:gf-cursor-not-allowed",
|
|
78
|
+
O
|
|
79
|
+
),
|
|
80
|
+
children: [
|
|
81
|
+
z && /* @__PURE__ */ t("span", { className: "gf-flex gf-items-center gf-shrink-0", children: z }),
|
|
82
|
+
/* @__PURE__ */ t(
|
|
83
|
+
E,
|
|
84
|
+
{
|
|
85
|
+
size: R,
|
|
86
|
+
weight: "regular",
|
|
87
|
+
className: "gf-truncate gf-flex-1 gf-text-left",
|
|
88
|
+
children: I
|
|
89
|
+
}
|
|
90
|
+
),
|
|
91
|
+
/* @__PURE__ */ t(
|
|
92
|
+
Y,
|
|
93
|
+
{
|
|
94
|
+
className: f(
|
|
95
|
+
"gf-h-3.5 gf-w-3.5 gf-text-primaryIris gf-flex-shrink-0 gf-transition-transform",
|
|
96
|
+
n && "gf-rotate-180"
|
|
97
|
+
)
|
|
98
|
+
}
|
|
99
|
+
)
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
),
|
|
103
|
+
/* @__PURE__ */ t(X, { children: /* @__PURE__ */ t(U, { children: n && /* @__PURE__ */ t(
|
|
104
|
+
V.div,
|
|
105
|
+
{
|
|
106
|
+
ref: a,
|
|
107
|
+
role: "listbox",
|
|
108
|
+
initial: { opacity: 0, y: -4 },
|
|
109
|
+
animate: { opacity: 1, y: 0 },
|
|
110
|
+
exit: { opacity: 0, y: -4 },
|
|
111
|
+
transition: { duration: 0.15, ease: "easeOut" },
|
|
112
|
+
style: {
|
|
113
|
+
position: "fixed",
|
|
114
|
+
top: p.top,
|
|
115
|
+
left: p.left,
|
|
116
|
+
right: p.right,
|
|
117
|
+
minWidth: p.width || void 0
|
|
118
|
+
},
|
|
119
|
+
className: "gf-z-[60] gf-rounded-xl gf-min-w-28 gf-bg-white/30 gf-backdrop-blur-lg [-webkit-backdrop-filter:blur(12px)] gf-overflow-hidden gf-shadow-[0_8px_24px_-12px_rgba(71,60,117,0.2)]",
|
|
120
|
+
children: /* @__PURE__ */ c("div", { className: "gf-relative", children: [
|
|
121
|
+
K && /* @__PURE__ */ t(
|
|
122
|
+
"div",
|
|
123
|
+
{
|
|
124
|
+
className: f("gf-absolute gf-top-0 gf-left-0 gf-right-0 gf-h-8 gf-pointer-events-none gf-z-10 gf-bg-gradient-to-b gf-to-transparent", S)
|
|
125
|
+
}
|
|
126
|
+
),
|
|
127
|
+
/* @__PURE__ */ c("div", { className: "gf-relative", children: [
|
|
128
|
+
/* @__PURE__ */ t(
|
|
129
|
+
"div",
|
|
130
|
+
{
|
|
131
|
+
ref: C,
|
|
132
|
+
onScroll: h,
|
|
133
|
+
className: f("gf-py-2 gf-overflow-y-auto gf-max-h-96 [scrollbar-width:none] [&::-webkit-scrollbar]:gf-hidden", D),
|
|
134
|
+
children: d.map((e, i) => {
|
|
135
|
+
const o = e.value === b, g = i === d.length - 1, s = (v == null ? void 0 : v.includes(e.value)) && !g;
|
|
136
|
+
return /* @__PURE__ */ c(Q, { children: [
|
|
137
|
+
/* @__PURE__ */ c(
|
|
138
|
+
"button",
|
|
139
|
+
{
|
|
140
|
+
type: "button",
|
|
141
|
+
role: "option",
|
|
142
|
+
"aria-selected": o,
|
|
143
|
+
disabled: e.disabled,
|
|
144
|
+
onClick: () => {
|
|
145
|
+
e.disabled || (L(e.value), l(!1));
|
|
146
|
+
},
|
|
147
|
+
className: f(
|
|
148
|
+
"gf-w-full gf-flex gf-items-center gf-gap-3 gf-px-4 gf-py-2 gf-text-sm gf-transition-colors",
|
|
149
|
+
e.disabled ? "gf-opacity-35 gf-cursor-default gf-pointer-events-none" : "hover:gf-bg-white/50 gf-cursor-pointer"
|
|
150
|
+
),
|
|
151
|
+
children: [
|
|
152
|
+
e.icon && /* @__PURE__ */ t("span", { className: "gf-flex-shrink-0 gf-flex gf-items-center", children: e.icon }),
|
|
153
|
+
/* @__PURE__ */ t(
|
|
154
|
+
E,
|
|
155
|
+
{
|
|
156
|
+
size: R,
|
|
157
|
+
weight: "regular",
|
|
158
|
+
className: "gf-truncate gf-flex-1 gf-text-left",
|
|
159
|
+
children: e.label
|
|
160
|
+
}
|
|
161
|
+
)
|
|
162
|
+
]
|
|
163
|
+
}
|
|
164
|
+
),
|
|
165
|
+
s && /* @__PURE__ */ t("div", { className: "gf-h-px gf-bg-white/40 gf-my-1 gf-mx-3" })
|
|
166
|
+
] }, e.value);
|
|
167
|
+
})
|
|
168
|
+
}
|
|
169
|
+
),
|
|
170
|
+
q && /* @__PURE__ */ t(
|
|
171
|
+
"div",
|
|
172
|
+
{
|
|
173
|
+
className: f("gf-absolute gf-bottom-0 gf-left-0 gf-right-0 gf-h-8 gf-pointer-events-none gf-z-10 gf-bg-gradient-to-t gf-to-transparent", S)
|
|
174
|
+
}
|
|
175
|
+
)
|
|
176
|
+
] }),
|
|
177
|
+
u && b !== u.value && /* @__PURE__ */ t("div", { className: "gf-px-2.5 gf-pb-2 gf-pt-1", children: /* @__PURE__ */ t(
|
|
178
|
+
"button",
|
|
179
|
+
{
|
|
180
|
+
type: "button",
|
|
181
|
+
onClick: () => {
|
|
182
|
+
L(u.value), l(!1);
|
|
183
|
+
},
|
|
184
|
+
className: "gf-flex gf-items-center gf-justify-center gf-w-full gf-rounded-full gf-bg-white/70 hover:gf-bg-white/80 gf-py-1.5 gf-px-3 gf-cursor-pointer gf-transition-colors",
|
|
185
|
+
children: /* @__PURE__ */ t(E, { size: "h5", weight: "regular", children: u.label })
|
|
186
|
+
}
|
|
187
|
+
) })
|
|
188
|
+
] })
|
|
189
|
+
}
|
|
190
|
+
) }) })
|
|
191
|
+
] });
|
|
192
|
+
};
|
|
193
|
+
export {
|
|
194
|
+
ie as SelectDropdown
|
|
195
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import { cn as t } from "../utils/index.js";
|
|
3
|
+
const n = ({ className: e, ...r }) => /* @__PURE__ */ o(
|
|
4
|
+
"div",
|
|
5
|
+
{
|
|
6
|
+
className: t("gf-animate-pulse gf-rounded-md gf-bg-light-grey/50", e),
|
|
7
|
+
...r
|
|
8
|
+
}
|
|
9
|
+
);
|
|
10
|
+
export {
|
|
11
|
+
n as Skeleton
|
|
12
|
+
};
|