framepexls-ui-lib 0.1.13 → 0.1.15
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/ActionIconButton.d.mts +1 -0
- package/dist/ActionIconButton.d.ts +1 -0
- package/dist/ActionIconButton.js +12 -9
- package/dist/ActionIconButton.mjs +13 -10
- package/dist/AppTopbar.js +23 -6
- package/dist/AppTopbar.mjs +13 -6
- package/dist/AvatarGroup.d.mts +14 -0
- package/dist/AvatarGroup.d.ts +14 -0
- package/dist/AvatarGroup.js +77 -0
- package/dist/AvatarGroup.mjs +47 -0
- package/dist/AvatarSquare.d.mts +2 -5
- package/dist/AvatarSquare.d.ts +2 -5
- package/dist/AvatarSquare.js +52 -3
- package/dist/AvatarSquare.mjs +52 -3
- package/dist/Badge.d.mts +2 -1
- package/dist/Badge.d.ts +2 -1
- package/dist/Badge.js +3 -1
- package/dist/Badge.mjs +3 -1
- package/dist/BadgeCluster.js +3 -3
- package/dist/BadgeCluster.mjs +3 -3
- package/dist/Button.d.mts +3 -4
- package/dist/Button.d.ts +3 -4
- package/dist/Button.js +96 -8
- package/dist/Button.mjs +86 -8
- package/dist/CalendarPanel.js +20 -3
- package/dist/CalendarPanel.mjs +10 -3
- package/dist/Card.d.mts +6 -0
- package/dist/Card.d.ts +6 -0
- package/dist/Card.js +52 -0
- package/dist/Card.mjs +22 -0
- package/dist/CheckboxPillsGroup.d.mts +2 -1
- package/dist/CheckboxPillsGroup.d.ts +2 -1
- package/dist/CheckboxPillsGroup.js +16 -12
- package/dist/CheckboxPillsGroup.mjs +16 -12
- package/dist/ColumnSelector.js +16 -2
- package/dist/ColumnSelector.mjs +6 -2
- package/dist/ComboSelect.d.mts +0 -2
- package/dist/ComboSelect.d.ts +0 -2
- package/dist/ComboSelect.js +8 -4
- package/dist/ComboSelect.mjs +8 -4
- package/dist/DateTimeField.d.mts +0 -5
- package/dist/DateTimeField.d.ts +0 -5
- package/dist/DateTimeField.js +17 -8
- package/dist/DateTimeField.mjs +17 -8
- package/dist/Dialog.d.mts +2 -5
- package/dist/Dialog.d.ts +2 -5
- package/dist/Dialog.js +21 -22
- package/dist/Dialog.mjs +21 -22
- package/dist/Drawer.d.mts +38 -0
- package/dist/Drawer.d.ts +38 -0
- package/dist/Drawer.js +139 -0
- package/dist/Drawer.mjs +102 -0
- package/dist/Dropdown.d.mts +0 -3
- package/dist/Dropdown.d.ts +0 -3
- package/dist/Dropdown.js +61 -42
- package/dist/Dropdown.mjs +51 -42
- package/dist/FiltersMultiSelect.d.mts +28 -0
- package/dist/FiltersMultiSelect.d.ts +28 -0
- package/dist/FiltersMultiSelect.js +136 -0
- package/dist/FiltersMultiSelect.mjs +106 -0
- package/dist/Input.d.mts +2 -0
- package/dist/Input.d.ts +2 -0
- package/dist/Input.js +20 -5
- package/dist/Input.mjs +20 -5
- package/dist/Link.d.mts +15 -0
- package/dist/Link.d.ts +15 -0
- package/dist/Link.js +93 -0
- package/dist/Link.mjs +63 -0
- package/dist/MediaCard.d.mts +15 -0
- package/dist/MediaCard.d.ts +15 -0
- package/dist/MediaCard.js +153 -0
- package/dist/MediaCard.mjs +123 -0
- package/dist/MediaSelector.d.mts +48 -0
- package/dist/MediaSelector.d.ts +48 -0
- package/dist/MediaSelector.js +225 -0
- package/dist/MediaSelector.mjs +195 -0
- package/dist/Money.d.mts +2 -1
- package/dist/Money.d.ts +2 -1
- package/dist/Money.js +26 -2
- package/dist/Money.mjs +26 -2
- package/dist/MultiComboSelect.js +6 -11
- package/dist/MultiComboSelect.mjs +6 -11
- package/dist/OrderButton.js +13 -1
- package/dist/OrderButton.mjs +3 -1
- package/dist/Pagination.d.mts +2 -1
- package/dist/Pagination.d.ts +2 -1
- package/dist/Pagination.js +40 -3
- package/dist/Pagination.mjs +30 -3
- package/dist/ReviewHistory.js +3 -9
- package/dist/ReviewHistory.mjs +3 -9
- package/dist/SearchInput.js +17 -42
- package/dist/SearchInput.mjs +17 -42
- package/dist/Select.js +5 -2
- package/dist/Select.mjs +5 -2
- package/dist/Sidebar.d.mts +2 -3
- package/dist/Sidebar.d.ts +2 -3
- package/dist/Sidebar.js +132 -24
- package/dist/Sidebar.mjs +132 -24
- package/dist/Steps.d.mts +0 -2
- package/dist/Steps.d.ts +0 -2
- package/dist/Steps.js +19 -6
- package/dist/Steps.mjs +9 -6
- package/dist/Table.js +3 -1
- package/dist/Table.mjs +3 -1
- package/dist/TimePanel.js +21 -7
- package/dist/TimePanel.mjs +11 -7
- package/dist/TimePopover.js +32 -15
- package/dist/TimePopover.mjs +32 -15
- package/dist/TimeRangeField.js +13 -6
- package/dist/TimeRangeField.mjs +13 -6
- package/dist/Toast.d.mts +53 -0
- package/dist/Toast.d.ts +53 -0
- package/dist/Toast.js +273 -0
- package/dist/Toast.mjs +238 -0
- package/dist/Tooltip.d.mts +15 -0
- package/dist/Tooltip.d.ts +15 -0
- package/dist/Tooltip.js +135 -0
- package/dist/Tooltip.mjs +105 -0
- package/dist/UploadCard.d.mts +27 -0
- package/dist/UploadCard.d.ts +27 -0
- package/dist/UploadCard.js +143 -0
- package/dist/UploadCard.mjs +113 -0
- package/dist/index.d.mts +11 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.js +33 -1
- package/dist/index.mjs +78 -57
- package/package.json +1 -1
package/dist/Card.mjs
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import React from "react";
|
|
4
|
+
const base = "rounded-2xl border border-slate-200 bg-white p-4 shadow-sm dark:border-white/10 dark:bg-[#0f0d0e]";
|
|
5
|
+
const Card = React.forwardRef(
|
|
6
|
+
({ className, children, ...rest }, ref) => {
|
|
7
|
+
return /* @__PURE__ */ jsx(
|
|
8
|
+
"div",
|
|
9
|
+
{
|
|
10
|
+
ref,
|
|
11
|
+
className: [base, className].filter(Boolean).join(" "),
|
|
12
|
+
...rest,
|
|
13
|
+
children
|
|
14
|
+
}
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
);
|
|
18
|
+
Card.displayName = "Card";
|
|
19
|
+
var Card_default = Card;
|
|
20
|
+
export {
|
|
21
|
+
Card_default as default
|
|
22
|
+
};
|
|
@@ -22,7 +22,8 @@ type CheckboxPillsGroupProps = {
|
|
|
22
22
|
withIcon?: boolean;
|
|
23
23
|
maxSelected?: number;
|
|
24
24
|
className?: string;
|
|
25
|
+
color?: "rose" | "sky" | "violet" | "emerald" | "indigo" | "amber" | "slate";
|
|
25
26
|
};
|
|
26
|
-
declare function CheckboxPillsGroup({ options, value, onChange, multiple, name, label, emptyText, size, accent, variant, rounded, withIcon, maxSelected, className, }: CheckboxPillsGroupProps): react_jsx_runtime.JSX.Element;
|
|
27
|
+
declare function CheckboxPillsGroup({ options, value, onChange, multiple, name, label, emptyText, size, accent, variant, rounded, withIcon, maxSelected, className, color, }: CheckboxPillsGroupProps): react_jsx_runtime.JSX.Element;
|
|
27
28
|
|
|
28
29
|
export { type CheckboxPillsGroupProps, type PillsOption, CheckboxPillsGroup as default };
|
|
@@ -22,7 +22,8 @@ type CheckboxPillsGroupProps = {
|
|
|
22
22
|
withIcon?: boolean;
|
|
23
23
|
maxSelected?: number;
|
|
24
24
|
className?: string;
|
|
25
|
+
color?: "rose" | "sky" | "violet" | "emerald" | "indigo" | "amber" | "slate";
|
|
25
26
|
};
|
|
26
|
-
declare function CheckboxPillsGroup({ options, value, onChange, multiple, name, label, emptyText, size, accent, variant, rounded, withIcon, maxSelected, className, }: CheckboxPillsGroupProps): react_jsx_runtime.JSX.Element;
|
|
27
|
+
declare function CheckboxPillsGroup({ options, value, onChange, multiple, name, label, emptyText, size, accent, variant, rounded, withIcon, maxSelected, className, color, }: CheckboxPillsGroupProps): react_jsx_runtime.JSX.Element;
|
|
27
28
|
|
|
28
29
|
export { type CheckboxPillsGroupProps, type PillsOption, CheckboxPillsGroup as default };
|
|
@@ -34,6 +34,7 @@ __export(CheckboxPillsGroup_exports, {
|
|
|
34
34
|
module.exports = __toCommonJS(CheckboxPillsGroup_exports);
|
|
35
35
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
36
36
|
var import_react = __toESM(require("react"));
|
|
37
|
+
var import_Input = __toESM(require("./Input"));
|
|
37
38
|
const cx = (...a) => a.filter(Boolean).join(" ");
|
|
38
39
|
function toObj(opt) {
|
|
39
40
|
var _a, _b;
|
|
@@ -50,27 +51,27 @@ const SIZE = {
|
|
|
50
51
|
md: { text: "text-sm", padX: "px-3.5", padY: "py-2", height: "h-9", icon: "h-4 w-4" }
|
|
51
52
|
};
|
|
52
53
|
const ACTIVE_SOFT = {
|
|
53
|
-
rose: "border-
|
|
54
|
+
rose: "border-rose-300 bg-rose-50/80 text-rose-700 dark:border-rose-400/40 dark:bg-rose-500/10 dark:text-rose-200",
|
|
54
55
|
sky: "border-sky-300 bg-sky-50/80 text-sky-700 dark:border-sky-400/40 dark:bg-sky-500/10 dark:text-sky-200",
|
|
55
|
-
violet: "border-
|
|
56
|
+
violet: "border-violet-300 bg-violet-50/80 text-violet-700 dark:border-violet-400/40 dark:bg-violet-500/10 dark:text-violet-200",
|
|
56
57
|
emerald: "border-emerald-300 bg-emerald-50/80 text-emerald-700 dark:border-emerald-400/40 dark:bg-emerald-500/10 dark:text-emerald-200",
|
|
57
58
|
indigo: "border-indigo-300 bg-indigo-50/80 text-indigo-700 dark:border-indigo-400/40 dark:bg-indigo-500/10 dark:text-indigo-200",
|
|
58
59
|
amber: "border-amber-300 bg-amber-50/80 text-amber-700 dark:border-amber-400/40 dark:bg-amber-500/10 dark:text-amber-200",
|
|
59
60
|
slate: "border-slate-300 bg-slate-50/80 text-slate-700 dark:border-slate-400/40 dark:bg-slate-500/10 dark:text-slate-200"
|
|
60
61
|
};
|
|
61
62
|
const ACTIVE_OUTLINE = {
|
|
62
|
-
rose: "border-
|
|
63
|
+
rose: "border-rose-400 text-rose-700 dark:text-rose-200",
|
|
63
64
|
sky: "border-sky-400 text-sky-700 dark:text-sky-200",
|
|
64
|
-
violet: "border-
|
|
65
|
+
violet: "border-violet-400 text-violet-700 dark:text-violet-200",
|
|
65
66
|
emerald: "border-emerald-400 text-emerald-700 dark:text-emerald-200",
|
|
66
67
|
indigo: "border-indigo-400 text-indigo-700 dark:text-indigo-200",
|
|
67
68
|
amber: "border-amber-400 text-amber-700 dark:text-amber-200",
|
|
68
69
|
slate: "border-slate-400 text-slate-700 dark:text-slate-200"
|
|
69
70
|
};
|
|
70
71
|
const ACTIVE_GLASS = {
|
|
71
|
-
rose: "border-
|
|
72
|
+
rose: "border-rose-300 bg-gradient-to-br from-rose-50 to-rose-50/0 text-rose-700 dark:from-rose-400/10 dark:text-rose-200",
|
|
72
73
|
sky: "border-sky-300 bg-gradient-to-br from-sky-50 to-sky-50/0 text-sky-700 dark:from-sky-400/10 dark:text-sky-200",
|
|
73
|
-
violet: "border-
|
|
74
|
+
violet: "border-violet-300 bg-gradient-to-br from-violet-50 to-violet-50/0 text-violet-700 dark:from-violet-400/10 dark:text-violet-200",
|
|
74
75
|
emerald: "border-emerald-300 bg-gradient-to-br from-emerald-50 to-emerald-50/0 text-emerald-700 dark:from-emerald-400/10 dark:text-emerald-200",
|
|
75
76
|
indigo: "border-indigo-300 bg-gradient-to-br from-indigo-50 to-indigo-50/0 text-indigo-700 dark:from-indigo-400/10 dark:text-indigo-200",
|
|
76
77
|
amber: "border-amber-300 bg-gradient-to-br from-amber-50 to-amber-50/0 text-amber-700 dark:from-amber-400/10 dark:text-amber-200",
|
|
@@ -96,10 +97,12 @@ function CheckboxPillsGroup({
|
|
|
96
97
|
rounded = "full",
|
|
97
98
|
withIcon = true,
|
|
98
99
|
maxSelected,
|
|
99
|
-
className
|
|
100
|
+
className,
|
|
101
|
+
color
|
|
100
102
|
}) {
|
|
101
103
|
const opts = import_react.default.useMemo(() => options.map(toObj), [options]);
|
|
102
104
|
const sz = SIZE[size];
|
|
105
|
+
const selectedAccent = color != null ? color : accent;
|
|
103
106
|
const radius = rounded === "full" ? "rounded-full" : rounded === "2xl" ? "rounded-2xl" : rounded === "md" ? "rounded-md" : "rounded-xl";
|
|
104
107
|
const baseChip = cx(
|
|
105
108
|
"relative inline-flex items-center whitespace-nowrap select-none",
|
|
@@ -140,13 +143,14 @@ function CheckboxPillsGroup({
|
|
|
140
143
|
title: o.title,
|
|
141
144
|
className: cx(
|
|
142
145
|
baseChip,
|
|
143
|
-
active ? activeClasses(
|
|
146
|
+
active ? activeClasses(selectedAccent, variant) : NEUTRAL,
|
|
144
147
|
(disabled || !canSelectMore) && !active && "cursor-not-allowed opacity-60"
|
|
145
148
|
),
|
|
146
149
|
children: [
|
|
147
150
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
148
|
-
|
|
151
|
+
import_Input.default,
|
|
149
152
|
{
|
|
153
|
+
unstyled: true,
|
|
150
154
|
type: multiple ? "checkbox" : "radio",
|
|
151
155
|
name: !multiple ? name != null ? name : "pills-group" : void 0,
|
|
152
156
|
className: "sr-only",
|
|
@@ -163,14 +167,14 @@ function CheckboxPillsGroup({
|
|
|
163
167
|
className: cx(
|
|
164
168
|
"grid place-items-center rounded-full",
|
|
165
169
|
{
|
|
166
|
-
rose: "bg-
|
|
170
|
+
rose: "bg-rose-500/10 text-rose-600",
|
|
167
171
|
sky: "bg-sky-500/10 text-sky-600",
|
|
168
|
-
violet: "bg-
|
|
172
|
+
violet: "bg-violet-500/10 text-violet-600",
|
|
169
173
|
emerald: "bg-emerald-500/10 text-emerald-600",
|
|
170
174
|
indigo: "bg-indigo-500/10 text-indigo-600",
|
|
171
175
|
amber: "bg-amber-500/10 text-amber-600",
|
|
172
176
|
slate: "bg-slate-500/10 text-slate-600"
|
|
173
|
-
}[
|
|
177
|
+
}[selectedAccent]
|
|
174
178
|
),
|
|
175
179
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { viewBox: "0 0 24 24", className: sz.icon, fill: "none", stroke: "currentColor", strokeWidth: 3, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "m5 12 4 4 10-10" }) })
|
|
176
180
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import React from "react";
|
|
4
|
+
import Input from "./Input";
|
|
4
5
|
const cx = (...a) => a.filter(Boolean).join(" ");
|
|
5
6
|
function toObj(opt) {
|
|
6
7
|
var _a, _b;
|
|
@@ -17,27 +18,27 @@ const SIZE = {
|
|
|
17
18
|
md: { text: "text-sm", padX: "px-3.5", padY: "py-2", height: "h-9", icon: "h-4 w-4" }
|
|
18
19
|
};
|
|
19
20
|
const ACTIVE_SOFT = {
|
|
20
|
-
rose: "border-
|
|
21
|
+
rose: "border-rose-300 bg-rose-50/80 text-rose-700 dark:border-rose-400/40 dark:bg-rose-500/10 dark:text-rose-200",
|
|
21
22
|
sky: "border-sky-300 bg-sky-50/80 text-sky-700 dark:border-sky-400/40 dark:bg-sky-500/10 dark:text-sky-200",
|
|
22
|
-
violet: "border-
|
|
23
|
+
violet: "border-violet-300 bg-violet-50/80 text-violet-700 dark:border-violet-400/40 dark:bg-violet-500/10 dark:text-violet-200",
|
|
23
24
|
emerald: "border-emerald-300 bg-emerald-50/80 text-emerald-700 dark:border-emerald-400/40 dark:bg-emerald-500/10 dark:text-emerald-200",
|
|
24
25
|
indigo: "border-indigo-300 bg-indigo-50/80 text-indigo-700 dark:border-indigo-400/40 dark:bg-indigo-500/10 dark:text-indigo-200",
|
|
25
26
|
amber: "border-amber-300 bg-amber-50/80 text-amber-700 dark:border-amber-400/40 dark:bg-amber-500/10 dark:text-amber-200",
|
|
26
27
|
slate: "border-slate-300 bg-slate-50/80 text-slate-700 dark:border-slate-400/40 dark:bg-slate-500/10 dark:text-slate-200"
|
|
27
28
|
};
|
|
28
29
|
const ACTIVE_OUTLINE = {
|
|
29
|
-
rose: "border-
|
|
30
|
+
rose: "border-rose-400 text-rose-700 dark:text-rose-200",
|
|
30
31
|
sky: "border-sky-400 text-sky-700 dark:text-sky-200",
|
|
31
|
-
violet: "border-
|
|
32
|
+
violet: "border-violet-400 text-violet-700 dark:text-violet-200",
|
|
32
33
|
emerald: "border-emerald-400 text-emerald-700 dark:text-emerald-200",
|
|
33
34
|
indigo: "border-indigo-400 text-indigo-700 dark:text-indigo-200",
|
|
34
35
|
amber: "border-amber-400 text-amber-700 dark:text-amber-200",
|
|
35
36
|
slate: "border-slate-400 text-slate-700 dark:text-slate-200"
|
|
36
37
|
};
|
|
37
38
|
const ACTIVE_GLASS = {
|
|
38
|
-
rose: "border-
|
|
39
|
+
rose: "border-rose-300 bg-gradient-to-br from-rose-50 to-rose-50/0 text-rose-700 dark:from-rose-400/10 dark:text-rose-200",
|
|
39
40
|
sky: "border-sky-300 bg-gradient-to-br from-sky-50 to-sky-50/0 text-sky-700 dark:from-sky-400/10 dark:text-sky-200",
|
|
40
|
-
violet: "border-
|
|
41
|
+
violet: "border-violet-300 bg-gradient-to-br from-violet-50 to-violet-50/0 text-violet-700 dark:from-violet-400/10 dark:text-violet-200",
|
|
41
42
|
emerald: "border-emerald-300 bg-gradient-to-br from-emerald-50 to-emerald-50/0 text-emerald-700 dark:from-emerald-400/10 dark:text-emerald-200",
|
|
42
43
|
indigo: "border-indigo-300 bg-gradient-to-br from-indigo-50 to-indigo-50/0 text-indigo-700 dark:from-indigo-400/10 dark:text-indigo-200",
|
|
43
44
|
amber: "border-amber-300 bg-gradient-to-br from-amber-50 to-amber-50/0 text-amber-700 dark:from-amber-400/10 dark:text-amber-200",
|
|
@@ -63,10 +64,12 @@ function CheckboxPillsGroup({
|
|
|
63
64
|
rounded = "full",
|
|
64
65
|
withIcon = true,
|
|
65
66
|
maxSelected,
|
|
66
|
-
className
|
|
67
|
+
className,
|
|
68
|
+
color
|
|
67
69
|
}) {
|
|
68
70
|
const opts = React.useMemo(() => options.map(toObj), [options]);
|
|
69
71
|
const sz = SIZE[size];
|
|
72
|
+
const selectedAccent = color != null ? color : accent;
|
|
70
73
|
const radius = rounded === "full" ? "rounded-full" : rounded === "2xl" ? "rounded-2xl" : rounded === "md" ? "rounded-md" : "rounded-xl";
|
|
71
74
|
const baseChip = cx(
|
|
72
75
|
"relative inline-flex items-center whitespace-nowrap select-none",
|
|
@@ -107,13 +110,14 @@ function CheckboxPillsGroup({
|
|
|
107
110
|
title: o.title,
|
|
108
111
|
className: cx(
|
|
109
112
|
baseChip,
|
|
110
|
-
active ? activeClasses(
|
|
113
|
+
active ? activeClasses(selectedAccent, variant) : NEUTRAL,
|
|
111
114
|
(disabled || !canSelectMore) && !active && "cursor-not-allowed opacity-60"
|
|
112
115
|
),
|
|
113
116
|
children: [
|
|
114
117
|
/* @__PURE__ */ jsx(
|
|
115
|
-
|
|
118
|
+
Input,
|
|
116
119
|
{
|
|
120
|
+
unstyled: true,
|
|
117
121
|
type: multiple ? "checkbox" : "radio",
|
|
118
122
|
name: !multiple ? name != null ? name : "pills-group" : void 0,
|
|
119
123
|
className: "sr-only",
|
|
@@ -130,14 +134,14 @@ function CheckboxPillsGroup({
|
|
|
130
134
|
className: cx(
|
|
131
135
|
"grid place-items-center rounded-full",
|
|
132
136
|
{
|
|
133
|
-
rose: "bg-
|
|
137
|
+
rose: "bg-rose-500/10 text-rose-600",
|
|
134
138
|
sky: "bg-sky-500/10 text-sky-600",
|
|
135
|
-
violet: "bg-
|
|
139
|
+
violet: "bg-violet-500/10 text-violet-600",
|
|
136
140
|
emerald: "bg-emerald-500/10 text-emerald-600",
|
|
137
141
|
indigo: "bg-indigo-500/10 text-indigo-600",
|
|
138
142
|
amber: "bg-amber-500/10 text-amber-600",
|
|
139
143
|
slate: "bg-slate-500/10 text-slate-600"
|
|
140
|
-
}[
|
|
144
|
+
}[selectedAccent]
|
|
141
145
|
),
|
|
142
146
|
children: /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", className: sz.icon, fill: "none", stroke: "currentColor", strokeWidth: 3, children: /* @__PURE__ */ jsx("path", { d: "m5 12 4 4 10-10" }) })
|
|
143
147
|
}
|
package/dist/ColumnSelector.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
2
3
|
var __defProp = Object.defineProperty;
|
|
3
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
5
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
8
|
var __export = (target, all) => {
|
|
7
9
|
for (var name in all)
|
|
@@ -15,6 +17,14 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
15
17
|
}
|
|
16
18
|
return to;
|
|
17
19
|
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
18
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
29
|
var ColumnSelector_exports = {};
|
|
20
30
|
__export(ColumnSelector_exports, {
|
|
@@ -23,6 +33,8 @@ __export(ColumnSelector_exports, {
|
|
|
23
33
|
module.exports = __toCommonJS(ColumnSelector_exports);
|
|
24
34
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
25
35
|
var import_react = require("motion/react");
|
|
36
|
+
var import_Button = __toESM(require("./Button"));
|
|
37
|
+
var import_Input = __toESM(require("./Input"));
|
|
26
38
|
function ColumnSelector({
|
|
27
39
|
open,
|
|
28
40
|
onToggleOpen,
|
|
@@ -32,8 +44,9 @@ function ColumnSelector({
|
|
|
32
44
|
}) {
|
|
33
45
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "relative", children: [
|
|
34
46
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
35
|
-
|
|
47
|
+
import_Button.default,
|
|
36
48
|
{
|
|
49
|
+
unstyled: true,
|
|
37
50
|
onClick: (e) => {
|
|
38
51
|
e.stopPropagation();
|
|
39
52
|
onToggleOpen((v) => !v);
|
|
@@ -56,8 +69,9 @@ function ColumnSelector({
|
|
|
56
69
|
children: [
|
|
57
70
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "font-medium text-slate-800 dark:text-slate-100", children: label }),
|
|
58
71
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
59
|
-
|
|
72
|
+
import_Input.default,
|
|
60
73
|
{
|
|
74
|
+
unstyled: true,
|
|
61
75
|
type: "checkbox",
|
|
62
76
|
checked: visible[key],
|
|
63
77
|
onChange: (e) => setVisible(key, e.target.checked),
|
package/dist/ColumnSelector.mjs
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { AnimatePresence, motion } from "motion/react";
|
|
3
|
+
import Button from "./Button";
|
|
4
|
+
import Input from "./Input";
|
|
3
5
|
function ColumnSelector({
|
|
4
6
|
open,
|
|
5
7
|
onToggleOpen,
|
|
@@ -9,8 +11,9 @@ function ColumnSelector({
|
|
|
9
11
|
}) {
|
|
10
12
|
return /* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
11
13
|
/* @__PURE__ */ jsx(
|
|
12
|
-
|
|
14
|
+
Button,
|
|
13
15
|
{
|
|
16
|
+
unstyled: true,
|
|
14
17
|
onClick: (e) => {
|
|
15
18
|
e.stopPropagation();
|
|
16
19
|
onToggleOpen((v) => !v);
|
|
@@ -33,8 +36,9 @@ function ColumnSelector({
|
|
|
33
36
|
children: [
|
|
34
37
|
/* @__PURE__ */ jsx("span", { className: "font-medium text-slate-800 dark:text-slate-100", children: label }),
|
|
35
38
|
/* @__PURE__ */ jsx(
|
|
36
|
-
|
|
39
|
+
Input,
|
|
37
40
|
{
|
|
41
|
+
unstyled: true,
|
|
38
42
|
type: "checkbox",
|
|
39
43
|
checked: visible[key],
|
|
40
44
|
onChange: (e) => setVisible(key, e.target.checked),
|
package/dist/ComboSelect.d.mts
CHANGED
|
@@ -36,9 +36,7 @@ type ComboSelectProps = {
|
|
|
36
36
|
keepFocusOnSelect?: boolean;
|
|
37
37
|
clearQueryOnSelect?: boolean;
|
|
38
38
|
renderTags?: React__default.ReactNode;
|
|
39
|
-
/** Si true, las filas pueden tener inputs/botones y el click de fondo dispara onChange */
|
|
40
39
|
interactiveOptions?: boolean;
|
|
41
|
-
/** 🔹 Nuevo: notifica cambios en el texto de búsqueda */
|
|
42
40
|
onQueryChange?: (q: string) => void;
|
|
43
41
|
};
|
|
44
42
|
declare function ComboSelect({ options, sections, value, onChange, placeholder, disabled, loading, allowClear, searchable, maxItems, className, noResultsText, renderOption, renderSectionHeader, portalTarget, closeOnSelect, keepFocusOnSelect, clearQueryOnSelect, renderTags, interactiveOptions, onQueryChange, }: ComboSelectProps): react_jsx_runtime.JSX.Element;
|
package/dist/ComboSelect.d.ts
CHANGED
|
@@ -36,9 +36,7 @@ type ComboSelectProps = {
|
|
|
36
36
|
keepFocusOnSelect?: boolean;
|
|
37
37
|
clearQueryOnSelect?: boolean;
|
|
38
38
|
renderTags?: React__default.ReactNode;
|
|
39
|
-
/** Si true, las filas pueden tener inputs/botones y el click de fondo dispara onChange */
|
|
40
39
|
interactiveOptions?: boolean;
|
|
41
|
-
/** 🔹 Nuevo: notifica cambios en el texto de búsqueda */
|
|
42
40
|
onQueryChange?: (q: string) => void;
|
|
43
41
|
};
|
|
44
42
|
declare function ComboSelect({ options, sections, value, onChange, placeholder, disabled, loading, allowClear, searchable, maxItems, className, noResultsText, renderOption, renderSectionHeader, portalTarget, closeOnSelect, keepFocusOnSelect, clearQueryOnSelect, renderTags, interactiveOptions, onQueryChange, }: ComboSelectProps): react_jsx_runtime.JSX.Element;
|
package/dist/ComboSelect.js
CHANGED
|
@@ -36,6 +36,8 @@ var import_jsx_runtime = require("react/jsx-runtime");
|
|
|
36
36
|
var import_react = __toESM(require("react"));
|
|
37
37
|
var import_react_dom = require("react-dom");
|
|
38
38
|
var import_AvatarSquare = __toESM(require("./AvatarSquare"));
|
|
39
|
+
var import_Input = __toESM(require("./Input"));
|
|
40
|
+
var import_Button = __toESM(require("./Button"));
|
|
39
41
|
const cx = (...a) => a.filter(Boolean).join(" ");
|
|
40
42
|
const controlShell = "relative w-full rounded-2xl border border-slate-200 bg-white text-sm text-slate-900 placeholder:text-slate-400 shadow-sm outline-none transition focus-within:ring-4 focus-within:ring-slate-900/5 focus-within:border-slate-300 disabled:opacity-60 disabled:cursor-not-allowed dark:border-white/10 dark:bg-white/10 dark:text-slate-100 dark:placeholder:text-slate-400 dark:focus-within:ring-white/10";
|
|
41
43
|
const isFocusableOrInteractive = (el) => {
|
|
@@ -66,7 +68,6 @@ function ComboSelect({
|
|
|
66
68
|
renderTags,
|
|
67
69
|
interactiveOptions = false,
|
|
68
70
|
onQueryChange
|
|
69
|
-
// 🔹 nuevo
|
|
70
71
|
}) {
|
|
71
72
|
var _a;
|
|
72
73
|
const [query, _setQuery] = import_react.default.useState("");
|
|
@@ -360,8 +361,9 @@ function ComboSelect({
|
|
|
360
361
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: cx(controlShell, "pr-20 pl-3 py-2 min-h-[44px] flex flex-wrap items-center gap-2"), children: [
|
|
361
362
|
renderTags,
|
|
362
363
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
363
|
-
|
|
364
|
+
import_Input.default,
|
|
364
365
|
{
|
|
366
|
+
unstyled: true,
|
|
365
367
|
ref: inputRef,
|
|
366
368
|
role: "combobox",
|
|
367
369
|
"aria-haspopup": "listbox",
|
|
@@ -388,8 +390,9 @@ function ComboSelect({
|
|
|
388
390
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "absolute right-2 top-1/2 -translate-y-1/2 flex items-center gap-1.5 pointer-events-none", children: [
|
|
389
391
|
loading && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "pointer-events-none text-xs text-slate-400", children: "cargando\u2026" }),
|
|
390
392
|
allowClear && value != null && !disabled && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
391
|
-
|
|
393
|
+
import_Button.default,
|
|
392
394
|
{
|
|
395
|
+
unstyled: true,
|
|
393
396
|
type: "button",
|
|
394
397
|
title: "Limpiar",
|
|
395
398
|
className: "pointer-events-auto inline-flex h-7 w-7 items-center justify-center rounded-lg border border-slate-200 bg-white text-slate-600 hover:bg-slate-50 active:scale-95 dark:border-white/10 dark:bg-white/5",
|
|
@@ -413,8 +416,9 @@ function ComboSelect({
|
|
|
413
416
|
}
|
|
414
417
|
),
|
|
415
418
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
416
|
-
|
|
419
|
+
import_Button.default,
|
|
417
420
|
{
|
|
421
|
+
unstyled: true,
|
|
418
422
|
type: "button",
|
|
419
423
|
title: open ? "Cerrar" : "Abrir",
|
|
420
424
|
className: "pointer-events-auto inline-flex h-7 w-7 items-center justify-center rounded-lg border border-slate-200 bg-white text-slate-600 hover:bg-slate-50 active:scale-95 dark:border-white/10 dark:bg-white/5",
|
package/dist/ComboSelect.mjs
CHANGED
|
@@ -3,6 +3,8 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import React from "react";
|
|
4
4
|
import { createPortal } from "react-dom";
|
|
5
5
|
import AvatarSquare from "./AvatarSquare";
|
|
6
|
+
import Input from "./Input";
|
|
7
|
+
import Button from "./Button";
|
|
6
8
|
const cx = (...a) => a.filter(Boolean).join(" ");
|
|
7
9
|
const controlShell = "relative w-full rounded-2xl border border-slate-200 bg-white text-sm text-slate-900 placeholder:text-slate-400 shadow-sm outline-none transition focus-within:ring-4 focus-within:ring-slate-900/5 focus-within:border-slate-300 disabled:opacity-60 disabled:cursor-not-allowed dark:border-white/10 dark:bg-white/10 dark:text-slate-100 dark:placeholder:text-slate-400 dark:focus-within:ring-white/10";
|
|
8
10
|
const isFocusableOrInteractive = (el) => {
|
|
@@ -33,7 +35,6 @@ function ComboSelect({
|
|
|
33
35
|
renderTags,
|
|
34
36
|
interactiveOptions = false,
|
|
35
37
|
onQueryChange
|
|
36
|
-
// 🔹 nuevo
|
|
37
38
|
}) {
|
|
38
39
|
var _a;
|
|
39
40
|
const [query, _setQuery] = React.useState("");
|
|
@@ -327,8 +328,9 @@ function ComboSelect({
|
|
|
327
328
|
/* @__PURE__ */ jsxs("div", { className: cx(controlShell, "pr-20 pl-3 py-2 min-h-[44px] flex flex-wrap items-center gap-2"), children: [
|
|
328
329
|
renderTags,
|
|
329
330
|
/* @__PURE__ */ jsx(
|
|
330
|
-
|
|
331
|
+
Input,
|
|
331
332
|
{
|
|
333
|
+
unstyled: true,
|
|
332
334
|
ref: inputRef,
|
|
333
335
|
role: "combobox",
|
|
334
336
|
"aria-haspopup": "listbox",
|
|
@@ -355,8 +357,9 @@ function ComboSelect({
|
|
|
355
357
|
/* @__PURE__ */ jsxs("div", { className: "absolute right-2 top-1/2 -translate-y-1/2 flex items-center gap-1.5 pointer-events-none", children: [
|
|
356
358
|
loading && /* @__PURE__ */ jsx("span", { className: "pointer-events-none text-xs text-slate-400", children: "cargando\u2026" }),
|
|
357
359
|
allowClear && value != null && !disabled && /* @__PURE__ */ jsx(
|
|
358
|
-
|
|
360
|
+
Button,
|
|
359
361
|
{
|
|
362
|
+
unstyled: true,
|
|
360
363
|
type: "button",
|
|
361
364
|
title: "Limpiar",
|
|
362
365
|
className: "pointer-events-auto inline-flex h-7 w-7 items-center justify-center rounded-lg border border-slate-200 bg-white text-slate-600 hover:bg-slate-50 active:scale-95 dark:border-white/10 dark:bg-white/5",
|
|
@@ -380,8 +383,9 @@ function ComboSelect({
|
|
|
380
383
|
}
|
|
381
384
|
),
|
|
382
385
|
/* @__PURE__ */ jsx(
|
|
383
|
-
|
|
386
|
+
Button,
|
|
384
387
|
{
|
|
388
|
+
unstyled: true,
|
|
385
389
|
type: "button",
|
|
386
390
|
title: open ? "Cerrar" : "Abrir",
|
|
387
391
|
className: "pointer-events-auto inline-flex h-7 w-7 items-center justify-center rounded-lg border border-slate-200 bg-white text-slate-600 hover:bg-slate-50 active:scale-95 dark:border-white/10 dark:bg-white/5",
|
package/dist/DateTimeField.d.mts
CHANGED
|
@@ -4,17 +4,12 @@ import React__default from 'react';
|
|
|
4
4
|
type PickerMode = "date" | "datetime-local" | "time";
|
|
5
5
|
type DateTimeFieldProps = Omit<React__default.InputHTMLAttributes<HTMLInputElement>, "type" | "value" | "onChange"> & {
|
|
6
6
|
type?: PickerMode;
|
|
7
|
-
/** ISO para date/datetime-local, HH:mm para time; o null */
|
|
8
7
|
value?: string | null;
|
|
9
8
|
min?: string;
|
|
10
9
|
max?: string;
|
|
11
|
-
/** Cambio por valor (recomendado) */
|
|
12
10
|
onValueChange?: (next: string | null) => void;
|
|
13
|
-
/** Si true, usa portal (document.body o portalId) */
|
|
14
11
|
portal?: boolean;
|
|
15
|
-
/** id del contenedor de portal (opcional) */
|
|
16
12
|
portalId?: string;
|
|
17
|
-
/** muestra botón de limpiar en el Input */
|
|
18
13
|
clearable?: boolean;
|
|
19
14
|
};
|
|
20
15
|
declare function DateTimeField({ type, value, min, max, onValueChange, portal, portalId, clearable, ...inputProps }: DateTimeFieldProps): react_jsx_runtime.JSX.Element;
|
package/dist/DateTimeField.d.ts
CHANGED
|
@@ -4,17 +4,12 @@ import React__default from 'react';
|
|
|
4
4
|
type PickerMode = "date" | "datetime-local" | "time";
|
|
5
5
|
type DateTimeFieldProps = Omit<React__default.InputHTMLAttributes<HTMLInputElement>, "type" | "value" | "onChange"> & {
|
|
6
6
|
type?: PickerMode;
|
|
7
|
-
/** ISO para date/datetime-local, HH:mm para time; o null */
|
|
8
7
|
value?: string | null;
|
|
9
8
|
min?: string;
|
|
10
9
|
max?: string;
|
|
11
|
-
/** Cambio por valor (recomendado) */
|
|
12
10
|
onValueChange?: (next: string | null) => void;
|
|
13
|
-
/** Si true, usa portal (document.body o portalId) */
|
|
14
11
|
portal?: boolean;
|
|
15
|
-
/** id del contenedor de portal (opcional) */
|
|
16
12
|
portalId?: string;
|
|
17
|
-
/** muestra botón de limpiar en el Input */
|
|
18
13
|
clearable?: boolean;
|
|
19
14
|
};
|
|
20
15
|
declare function DateTimeField({ type, value, min, max, onValueChange, portal, portalId, clearable, ...inputProps }: DateTimeFieldProps): react_jsx_runtime.JSX.Element;
|
package/dist/DateTimeField.js
CHANGED
|
@@ -36,6 +36,7 @@ var import_jsx_runtime = require("react/jsx-runtime");
|
|
|
36
36
|
var import_react = require("react");
|
|
37
37
|
var import_react_dom = require("react-dom");
|
|
38
38
|
var import_Input = __toESM(require("./Input"));
|
|
39
|
+
var import_Button = __toESM(require("./Button"));
|
|
39
40
|
var import_CalendarPanel = __toESM(require("./CalendarPanel"));
|
|
40
41
|
var import_TimePopover = __toESM(require("./TimePopover"));
|
|
41
42
|
const pad2 = (n) => n < 10 ? `0${n}` : String(n);
|
|
@@ -269,8 +270,9 @@ function DateTimeField({
|
|
|
269
270
|
(type === "time" || type === "datetime-local") && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between gap-2 border-t border-slate-100 px-3 py-2 text-sm dark:border-white/10", children: [
|
|
270
271
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
271
272
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
272
|
-
|
|
273
|
+
import_Button.default,
|
|
273
274
|
{
|
|
275
|
+
unstyled: true,
|
|
274
276
|
ref: timeBtnRef,
|
|
275
277
|
type: "button",
|
|
276
278
|
className: "rounded-xl ring-1 ring-slate-200 px-2.5 py-1.5 font-medium tracking-wide hover:bg-slate-50 active:scale-[0.98] dark:ring-white/10 dark:hover:bg-white/10",
|
|
@@ -282,8 +284,9 @@ function DateTimeField({
|
|
|
282
284
|
}
|
|
283
285
|
),
|
|
284
286
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
285
|
-
|
|
287
|
+
import_Button.default,
|
|
286
288
|
{
|
|
289
|
+
unstyled: true,
|
|
287
290
|
type: "button",
|
|
288
291
|
className: "rounded-xl ring-1 ring-slate-200 px-2.5 py-1.5 hover:bg-slate-50 active:scale-[0.98] dark:ring-white/10 dark:hover:bg-white/10",
|
|
289
292
|
onClick: () => {
|
|
@@ -299,8 +302,9 @@ function DateTimeField({
|
|
|
299
302
|
)
|
|
300
303
|
] }),
|
|
301
304
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
302
|
-
|
|
305
|
+
import_Button.default,
|
|
303
306
|
{
|
|
307
|
+
unstyled: true,
|
|
304
308
|
type: "button",
|
|
305
309
|
className: "rounded-xl bg-slate-900 px-3 py-1.5 text-white hover:opacity-95 active:scale-[0.98] dark:bg-white dark:text-slate-900",
|
|
306
310
|
onClick: () => setOpen(false),
|
|
@@ -311,8 +315,9 @@ function DateTimeField({
|
|
|
311
315
|
type !== "time" && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between gap-2 border-t border-slate-100 px-3 py-2 text-sm dark:border-white/10", children: [
|
|
312
316
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex gap-1.5", children: [
|
|
313
317
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
314
|
-
|
|
318
|
+
import_Button.default,
|
|
315
319
|
{
|
|
320
|
+
unstyled: true,
|
|
316
321
|
className: "rounded-lg px-2 py-1 hover:bg-slate-100 dark:hover:bg-white/10",
|
|
317
322
|
onClick: () => {
|
|
318
323
|
const t = /* @__PURE__ */ new Date();
|
|
@@ -324,8 +329,9 @@ function DateTimeField({
|
|
|
324
329
|
}
|
|
325
330
|
),
|
|
326
331
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
327
|
-
|
|
332
|
+
import_Button.default,
|
|
328
333
|
{
|
|
334
|
+
unstyled: true,
|
|
329
335
|
className: "rounded-lg px-2 py-1 hover:bg-slate-100 dark:hover:bg-white/10",
|
|
330
336
|
onClick: () => {
|
|
331
337
|
const t = /* @__PURE__ */ new Date();
|
|
@@ -338,8 +344,9 @@ function DateTimeField({
|
|
|
338
344
|
}
|
|
339
345
|
),
|
|
340
346
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
341
|
-
|
|
347
|
+
import_Button.default,
|
|
342
348
|
{
|
|
349
|
+
unstyled: true,
|
|
343
350
|
className: "rounded-lg px-2 py-1 hover:bg-slate-100 dark:hover:bg-white/10",
|
|
344
351
|
onClick: () => {
|
|
345
352
|
const t = /* @__PURE__ */ new Date();
|
|
@@ -353,8 +360,9 @@ function DateTimeField({
|
|
|
353
360
|
)
|
|
354
361
|
] }),
|
|
355
362
|
value && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
356
|
-
|
|
363
|
+
import_Button.default,
|
|
357
364
|
{
|
|
365
|
+
unstyled: true,
|
|
358
366
|
className: "rounded-lg px-2 py-1 text-blue-600 hover:bg-blue-50 dark:hover:bg-blue-500/10",
|
|
359
367
|
onClick: () => {
|
|
360
368
|
emit(null);
|
|
@@ -374,8 +382,9 @@ function DateTimeField({
|
|
|
374
382
|
{
|
|
375
383
|
leftSlot: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CalendarIcon, {}),
|
|
376
384
|
rightSlot: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
377
|
-
|
|
385
|
+
import_Button.default,
|
|
378
386
|
{
|
|
387
|
+
unstyled: true,
|
|
379
388
|
type: "button",
|
|
380
389
|
className: "pointer-events-auto inline-flex h-7 w-7 items-center justify-center rounded-lg border border-slate-200 bg-white text-slate-600 hover:bg-slate-50 active:scale-95 dark:border-white/10 dark:bg-white/5",
|
|
381
390
|
onClick: (e) => {
|