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/Dropdown.d.mts
CHANGED
|
@@ -32,11 +32,8 @@ declare function Item({ children, icon, kbd, danger, disabled, require, hideIfUn
|
|
|
32
32
|
kbd?: string;
|
|
33
33
|
danger?: boolean;
|
|
34
34
|
disabled?: boolean;
|
|
35
|
-
/** Permiso(s) requerido(s) para ver/ejecutar este item */
|
|
36
35
|
require?: string | string[];
|
|
37
|
-
/** Si no tiene permisos, ocultar por completo (default true, o el del Dropdown) */
|
|
38
36
|
hideIfUnauthorized?: boolean;
|
|
39
|
-
/** Si no tiene permisos, deshabilitar (default true si no se oculta) */
|
|
40
37
|
disableIfUnauthorized?: boolean;
|
|
41
38
|
onSelect?: () => void;
|
|
42
39
|
} & HTMLAttributes<HTMLButtonElement>): react_jsx_runtime.JSX.Element | null;
|
package/dist/Dropdown.d.ts
CHANGED
|
@@ -32,11 +32,8 @@ declare function Item({ children, icon, kbd, danger, disabled, require, hideIfUn
|
|
|
32
32
|
kbd?: string;
|
|
33
33
|
danger?: boolean;
|
|
34
34
|
disabled?: boolean;
|
|
35
|
-
/** Permiso(s) requerido(s) para ver/ejecutar este item */
|
|
36
35
|
require?: string | string[];
|
|
37
|
-
/** Si no tiene permisos, ocultar por completo (default true, o el del Dropdown) */
|
|
38
36
|
hideIfUnauthorized?: boolean;
|
|
39
|
-
/** Si no tiene permisos, deshabilitar (default true si no se oculta) */
|
|
40
37
|
disableIfUnauthorized?: boolean;
|
|
41
38
|
onSelect?: () => void;
|
|
42
39
|
} & HTMLAttributes<HTMLButtonElement>): react_jsx_runtime.JSX.Element | null;
|
package/dist/Dropdown.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
"use client";
|
|
3
|
+
var __create = Object.create;
|
|
3
4
|
var __defProp = Object.defineProperty;
|
|
4
5
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
6
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
8
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
9
|
var __export = (target, all) => {
|
|
8
10
|
for (var name in all)
|
|
@@ -16,6 +18,14 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
18
|
}
|
|
17
19
|
return to;
|
|
18
20
|
};
|
|
21
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
24
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
25
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
26
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
27
|
+
mod
|
|
28
|
+
));
|
|
19
29
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
30
|
var Dropdown_exports = {};
|
|
21
31
|
__export(Dropdown_exports, {
|
|
@@ -32,6 +42,7 @@ var import_jsx_runtime = require("react/jsx-runtime");
|
|
|
32
42
|
var import_react = require("react");
|
|
33
43
|
var import_react_dom = require("react-dom");
|
|
34
44
|
var import_iconos = require("./iconos/index");
|
|
45
|
+
var import_Button = __toESM(require("./Button"));
|
|
35
46
|
const DropdownCtx = (0, import_react.createContext)(null);
|
|
36
47
|
const useDropdown = () => {
|
|
37
48
|
const ctx = (0, import_react.useContext)(DropdownCtx);
|
|
@@ -125,25 +136,29 @@ function Trigger({
|
|
|
125
136
|
setOpen(true);
|
|
126
137
|
}
|
|
127
138
|
};
|
|
128
|
-
return
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
139
|
+
return (() => {
|
|
140
|
+
const { color: _c, ...safe } = btnProps;
|
|
141
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
142
|
+
import_Button.default,
|
|
143
|
+
{
|
|
144
|
+
unstyled: true,
|
|
145
|
+
ref: triggerRef,
|
|
146
|
+
"aria-haspopup": "menu",
|
|
147
|
+
"aria-controls": menuId,
|
|
148
|
+
"aria-expanded": open,
|
|
149
|
+
onClick,
|
|
150
|
+
onKeyDown,
|
|
151
|
+
className: [
|
|
152
|
+
"inline-flex items-center gap-2 rounded-xl border border-slate-300/70 bg-white px-3 py-2",
|
|
153
|
+
"text-sm font-medium text-slate-700 shadow-sm hover:bg-slate-50 active:scale-[0.98]",
|
|
154
|
+
"dark:border-white/10 dark:bg-white/5 dark:text-slate-200 dark:hover:bg-white/10",
|
|
155
|
+
className
|
|
156
|
+
].join(" "),
|
|
157
|
+
...safe,
|
|
158
|
+
children
|
|
159
|
+
}
|
|
160
|
+
);
|
|
161
|
+
})();
|
|
147
162
|
}
|
|
148
163
|
function Content({
|
|
149
164
|
children,
|
|
@@ -289,29 +304,33 @@ function Item({
|
|
|
289
304
|
setOpen(false);
|
|
290
305
|
}
|
|
291
306
|
};
|
|
292
|
-
return
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
className
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
307
|
+
return (() => {
|
|
308
|
+
const { color: _c, ...safe } = rest;
|
|
309
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
310
|
+
import_Button.default,
|
|
311
|
+
{
|
|
312
|
+
unstyled: true,
|
|
313
|
+
role: "menuitem",
|
|
314
|
+
"data-disabled": disabled || shouldDisable ? "true" : "false",
|
|
315
|
+
disabled: disabled || shouldDisable,
|
|
316
|
+
onClick,
|
|
317
|
+
onKeyDown,
|
|
318
|
+
className: [
|
|
319
|
+
"group flex w-full items-center justify-between gap-3 rounded-xl px-2.5 py-2 text-left text-sm",
|
|
320
|
+
disabled || shouldDisable ? "text-slate-400 dark:text-slate-500 cursor-not-allowed" : danger ? "text-blue-600 hover:bg-blue-50 dark:text-blue-400 dark:hover:bg-blue-500/10" : "text-slate-700 hover:bg-slate-100 dark:text-slate-200 dark:hover:bg-white/10",
|
|
321
|
+
className
|
|
322
|
+
].join(" "),
|
|
323
|
+
...safe,
|
|
324
|
+
children: [
|
|
325
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "flex min-w-0 items-center gap-2", children: [
|
|
326
|
+
icon && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "shrink-0 flex items-center justify-center h-4 w-4 text-slate-500 dark:text-slate-400", children: icon }),
|
|
327
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "truncate leading-none", children })
|
|
328
|
+
] }),
|
|
329
|
+
kbd && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "shrink-0 rounded-md border border-slate-200/80 bg-white px-1.5 py-0.5 text-[11px] text-slate-500 dark:border-white/10 dark:bg-white/5 dark:text-slate-400", children: kbd })
|
|
330
|
+
]
|
|
331
|
+
}
|
|
332
|
+
);
|
|
333
|
+
})();
|
|
315
334
|
}
|
|
316
335
|
const DropdownExport = Object.assign(Dropdown, {
|
|
317
336
|
Trigger,
|
package/dist/Dropdown.mjs
CHANGED
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
} from "react";
|
|
13
13
|
import { createPortal } from "react-dom";
|
|
14
14
|
import { MenuPuntosVerticalIcon } from "./iconos/index";
|
|
15
|
+
import Button from "./Button";
|
|
15
16
|
const DropdownCtx = createContext(null);
|
|
16
17
|
const useDropdown = () => {
|
|
17
18
|
const ctx = useContext(DropdownCtx);
|
|
@@ -105,25 +106,29 @@ function Trigger({
|
|
|
105
106
|
setOpen(true);
|
|
106
107
|
}
|
|
107
108
|
};
|
|
108
|
-
return
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
109
|
+
return (() => {
|
|
110
|
+
const { color: _c, ...safe } = btnProps;
|
|
111
|
+
return /* @__PURE__ */ jsx(
|
|
112
|
+
Button,
|
|
113
|
+
{
|
|
114
|
+
unstyled: true,
|
|
115
|
+
ref: triggerRef,
|
|
116
|
+
"aria-haspopup": "menu",
|
|
117
|
+
"aria-controls": menuId,
|
|
118
|
+
"aria-expanded": open,
|
|
119
|
+
onClick,
|
|
120
|
+
onKeyDown,
|
|
121
|
+
className: [
|
|
122
|
+
"inline-flex items-center gap-2 rounded-xl border border-slate-300/70 bg-white px-3 py-2",
|
|
123
|
+
"text-sm font-medium text-slate-700 shadow-sm hover:bg-slate-50 active:scale-[0.98]",
|
|
124
|
+
"dark:border-white/10 dark:bg-white/5 dark:text-slate-200 dark:hover:bg-white/10",
|
|
125
|
+
className
|
|
126
|
+
].join(" "),
|
|
127
|
+
...safe,
|
|
128
|
+
children
|
|
129
|
+
}
|
|
130
|
+
);
|
|
131
|
+
})();
|
|
127
132
|
}
|
|
128
133
|
function Content({
|
|
129
134
|
children,
|
|
@@ -269,29 +274,33 @@ function Item({
|
|
|
269
274
|
setOpen(false);
|
|
270
275
|
}
|
|
271
276
|
};
|
|
272
|
-
return
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
className
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
277
|
+
return (() => {
|
|
278
|
+
const { color: _c, ...safe } = rest;
|
|
279
|
+
return /* @__PURE__ */ jsxs(
|
|
280
|
+
Button,
|
|
281
|
+
{
|
|
282
|
+
unstyled: true,
|
|
283
|
+
role: "menuitem",
|
|
284
|
+
"data-disabled": disabled || shouldDisable ? "true" : "false",
|
|
285
|
+
disabled: disabled || shouldDisable,
|
|
286
|
+
onClick,
|
|
287
|
+
onKeyDown,
|
|
288
|
+
className: [
|
|
289
|
+
"group flex w-full items-center justify-between gap-3 rounded-xl px-2.5 py-2 text-left text-sm",
|
|
290
|
+
disabled || shouldDisable ? "text-slate-400 dark:text-slate-500 cursor-not-allowed" : danger ? "text-blue-600 hover:bg-blue-50 dark:text-blue-400 dark:hover:bg-blue-500/10" : "text-slate-700 hover:bg-slate-100 dark:text-slate-200 dark:hover:bg-white/10",
|
|
291
|
+
className
|
|
292
|
+
].join(" "),
|
|
293
|
+
...safe,
|
|
294
|
+
children: [
|
|
295
|
+
/* @__PURE__ */ jsxs("span", { className: "flex min-w-0 items-center gap-2", children: [
|
|
296
|
+
icon && /* @__PURE__ */ jsx("span", { className: "shrink-0 flex items-center justify-center h-4 w-4 text-slate-500 dark:text-slate-400", children: icon }),
|
|
297
|
+
/* @__PURE__ */ jsx("span", { className: "truncate leading-none", children })
|
|
298
|
+
] }),
|
|
299
|
+
kbd && /* @__PURE__ */ jsx("span", { className: "shrink-0 rounded-md border border-slate-200/80 bg-white px-1.5 py-0.5 text-[11px] text-slate-500 dark:border-white/10 dark:bg-white/5 dark:text-slate-400", children: kbd })
|
|
300
|
+
]
|
|
301
|
+
}
|
|
302
|
+
);
|
|
303
|
+
})();
|
|
295
304
|
}
|
|
296
305
|
const DropdownExport = Object.assign(Dropdown, {
|
|
297
306
|
Trigger,
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import React__default from 'react';
|
|
3
|
+
import { PillsOption, CheckboxPillsGroupProps } from './CheckboxPillsGroup.mjs';
|
|
4
|
+
|
|
5
|
+
type FilterGroup = {
|
|
6
|
+
key: string;
|
|
7
|
+
label?: React__default.ReactNode;
|
|
8
|
+
options: PillsOption[];
|
|
9
|
+
value: string[];
|
|
10
|
+
multiple?: boolean;
|
|
11
|
+
pillsProps?: Omit<CheckboxPillsGroupProps, "options" | "value" | "onChange" | "multiple" | "label">;
|
|
12
|
+
onChange?: (next: string[]) => void;
|
|
13
|
+
};
|
|
14
|
+
type FiltersMultiSelectProps = {
|
|
15
|
+
groups: FilterGroup[];
|
|
16
|
+
onChange?: (nextByKey: Record<string, string[]>, changedKey: string) => void;
|
|
17
|
+
className?: string;
|
|
18
|
+
gap?: number | string;
|
|
19
|
+
color?: "rose" | "sky" | "violet" | "emerald" | "indigo" | "amber" | "slate";
|
|
20
|
+
open?: boolean;
|
|
21
|
+
onToggleOpen?: React__default.Dispatch<React__default.SetStateAction<boolean>>;
|
|
22
|
+
triggerLabel?: React__default.ReactNode;
|
|
23
|
+
showActiveCount?: boolean;
|
|
24
|
+
align?: "start" | "end";
|
|
25
|
+
};
|
|
26
|
+
declare function FiltersMultiSelect({ groups, onChange, className, gap, color, open: controlledOpen, onToggleOpen, triggerLabel, showActiveCount, align, }: FiltersMultiSelectProps): react_jsx_runtime.JSX.Element;
|
|
27
|
+
|
|
28
|
+
export { type FilterGroup, type FiltersMultiSelectProps, FiltersMultiSelect as default };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import React__default from 'react';
|
|
3
|
+
import { PillsOption, CheckboxPillsGroupProps } from './CheckboxPillsGroup.js';
|
|
4
|
+
|
|
5
|
+
type FilterGroup = {
|
|
6
|
+
key: string;
|
|
7
|
+
label?: React__default.ReactNode;
|
|
8
|
+
options: PillsOption[];
|
|
9
|
+
value: string[];
|
|
10
|
+
multiple?: boolean;
|
|
11
|
+
pillsProps?: Omit<CheckboxPillsGroupProps, "options" | "value" | "onChange" | "multiple" | "label">;
|
|
12
|
+
onChange?: (next: string[]) => void;
|
|
13
|
+
};
|
|
14
|
+
type FiltersMultiSelectProps = {
|
|
15
|
+
groups: FilterGroup[];
|
|
16
|
+
onChange?: (nextByKey: Record<string, string[]>, changedKey: string) => void;
|
|
17
|
+
className?: string;
|
|
18
|
+
gap?: number | string;
|
|
19
|
+
color?: "rose" | "sky" | "violet" | "emerald" | "indigo" | "amber" | "slate";
|
|
20
|
+
open?: boolean;
|
|
21
|
+
onToggleOpen?: React__default.Dispatch<React__default.SetStateAction<boolean>>;
|
|
22
|
+
triggerLabel?: React__default.ReactNode;
|
|
23
|
+
showActiveCount?: boolean;
|
|
24
|
+
align?: "start" | "end";
|
|
25
|
+
};
|
|
26
|
+
declare function FiltersMultiSelect({ groups, onChange, className, gap, color, open: controlledOpen, onToggleOpen, triggerLabel, showActiveCount, align, }: FiltersMultiSelectProps): react_jsx_runtime.JSX.Element;
|
|
27
|
+
|
|
28
|
+
export { type FilterGroup, type FiltersMultiSelectProps, FiltersMultiSelect as default };
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
var __create = Object.create;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
8
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __export = (target, all) => {
|
|
10
|
+
for (var name in all)
|
|
11
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from))
|
|
16
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
17
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
18
|
+
}
|
|
19
|
+
return to;
|
|
20
|
+
};
|
|
21
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
24
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
25
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
26
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
27
|
+
mod
|
|
28
|
+
));
|
|
29
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
|
+
var FiltersMultiSelect_exports = {};
|
|
31
|
+
__export(FiltersMultiSelect_exports, {
|
|
32
|
+
default: () => FiltersMultiSelect
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(FiltersMultiSelect_exports);
|
|
35
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
36
|
+
var import_react = __toESM(require("react"));
|
|
37
|
+
var import_react2 = require("motion/react");
|
|
38
|
+
var import_CheckboxPillsGroup = __toESM(require("./CheckboxPillsGroup"));
|
|
39
|
+
var import_Button = __toESM(require("./Button"));
|
|
40
|
+
const clsx = (...a) => a.filter(Boolean).join(" ");
|
|
41
|
+
function FiltersMultiSelect({
|
|
42
|
+
groups,
|
|
43
|
+
onChange,
|
|
44
|
+
className,
|
|
45
|
+
gap = 12,
|
|
46
|
+
color,
|
|
47
|
+
open: controlledOpen,
|
|
48
|
+
onToggleOpen,
|
|
49
|
+
triggerLabel = "Filtros",
|
|
50
|
+
showActiveCount = true,
|
|
51
|
+
align = "start"
|
|
52
|
+
}) {
|
|
53
|
+
const currentMap = import_react.default.useMemo(() => {
|
|
54
|
+
const m = {};
|
|
55
|
+
for (const g of groups) m[g.key] = Array.isArray(g.value) ? g.value : [];
|
|
56
|
+
return m;
|
|
57
|
+
}, [groups]);
|
|
58
|
+
const [uncontrolledOpen, setUncontrolledOpen] = import_react.default.useState(false);
|
|
59
|
+
const isControlled = typeof controlledOpen === "boolean" && typeof onToggleOpen === "function";
|
|
60
|
+
const open = isControlled ? controlledOpen : uncontrolledOpen;
|
|
61
|
+
const setOpen = isControlled ? onToggleOpen : setUncontrolledOpen;
|
|
62
|
+
const rootRef = import_react.default.useRef(null);
|
|
63
|
+
import_react.default.useEffect(() => {
|
|
64
|
+
const onDocClick = (e) => {
|
|
65
|
+
if (!open) return;
|
|
66
|
+
if (!rootRef.current) return;
|
|
67
|
+
if (!rootRef.current.contains(e.target)) setOpen(false);
|
|
68
|
+
};
|
|
69
|
+
window.addEventListener("click", onDocClick);
|
|
70
|
+
return () => window.removeEventListener("click", onDocClick);
|
|
71
|
+
}, [open, setOpen]);
|
|
72
|
+
const onGroupChange = (key, next, cb) => {
|
|
73
|
+
cb == null ? void 0 : cb(next);
|
|
74
|
+
if (onChange) {
|
|
75
|
+
const m = { ...currentMap, [key]: next };
|
|
76
|
+
onChange(m, key);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
const activeCount = import_react.default.useMemo(
|
|
80
|
+
() => Object.values(currentMap).reduce((acc, arr) => acc + (Array.isArray(arr) ? arr.length : 0), 0),
|
|
81
|
+
[currentMap]
|
|
82
|
+
);
|
|
83
|
+
const panelStyle = typeof gap === "number" ? { gap } : { gap: void 0 };
|
|
84
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { ref: rootRef, className: clsx("relative inline-block", className), children: [
|
|
85
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
86
|
+
import_Button.default,
|
|
87
|
+
{
|
|
88
|
+
unstyled: true,
|
|
89
|
+
onClick: (e) => {
|
|
90
|
+
e.stopPropagation();
|
|
91
|
+
setOpen((v) => !v);
|
|
92
|
+
},
|
|
93
|
+
className: clsx(
|
|
94
|
+
"relative inline-flex items-center gap-2 min-h-[44px] rounded-2xl border border-slate-200 bg-white px-3 pr-9 text-sm text-slate-900 shadow-sm outline-none transition",
|
|
95
|
+
"hover:bg-white focus:ring-4 focus:ring-slate-900/5 focus:border-slate-300",
|
|
96
|
+
"dark:border-white/10 dark:bg-white/10 dark:text-slate-100 dark:focus:ring-white/10"
|
|
97
|
+
),
|
|
98
|
+
children: [
|
|
99
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: triggerLabel }),
|
|
100
|
+
showActiveCount && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "rounded-full bg-slate-100 px-2 py-0.5 text-xs text-slate-700 dark:bg-white/10 dark:text-slate-200", children: activeCount }),
|
|
101
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "pointer-events-none absolute right-2 top-1/2 -translate-y-1/2 inline-flex h-7 w-7 items-center justify-center rounded-lg border border-slate-200 bg-white text-slate-600 dark:border-white/10 dark:bg-white/5", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { viewBox: "0 0 24 24", className: clsx("h-4 w-4 transition", open && "rotate-180"), fill: "none", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "m6 9 6 6 6-6" }) }) })
|
|
102
|
+
]
|
|
103
|
+
}
|
|
104
|
+
),
|
|
105
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react2.AnimatePresence, { children: open && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
106
|
+
import_react2.motion.div,
|
|
107
|
+
{
|
|
108
|
+
initial: { opacity: 0, y: 6 },
|
|
109
|
+
animate: { opacity: 1, y: 0 },
|
|
110
|
+
exit: { opacity: 0, y: -6 },
|
|
111
|
+
className: clsx(
|
|
112
|
+
"absolute z-20 mt-2 w-[min(96vw,720px)] overflow-hidden rounded-2xl border border-slate-200 bg-white p-3 shadow-xl dark:border-white/10 dark:bg-[#0e0d0e]",
|
|
113
|
+
align === "end" ? "right-0" : "left-0"
|
|
114
|
+
),
|
|
115
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex flex-wrap", style: panelStyle, children: groups.map((g) => {
|
|
116
|
+
var _a, _b, _c;
|
|
117
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
118
|
+
import_CheckboxPillsGroup.default,
|
|
119
|
+
{
|
|
120
|
+
size: "sm",
|
|
121
|
+
options: g.options,
|
|
122
|
+
value: g.value,
|
|
123
|
+
onChange: (next) => onGroupChange(g.key, next, g.onChange),
|
|
124
|
+
multiple: (_a = g.multiple) != null ? _a : true,
|
|
125
|
+
label: g.label,
|
|
126
|
+
...{
|
|
127
|
+
...g.pillsProps,
|
|
128
|
+
color: (_c = (_b = g.pillsProps) == null ? void 0 : _b.color) != null ? _c : color
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
) }, g.key);
|
|
132
|
+
}) })
|
|
133
|
+
}
|
|
134
|
+
) })
|
|
135
|
+
] });
|
|
136
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import React from "react";
|
|
4
|
+
import { AnimatePresence, motion } from "motion/react";
|
|
5
|
+
import CheckboxPillsGroup from "./CheckboxPillsGroup";
|
|
6
|
+
import Button from "./Button";
|
|
7
|
+
const clsx = (...a) => a.filter(Boolean).join(" ");
|
|
8
|
+
function FiltersMultiSelect({
|
|
9
|
+
groups,
|
|
10
|
+
onChange,
|
|
11
|
+
className,
|
|
12
|
+
gap = 12,
|
|
13
|
+
color,
|
|
14
|
+
open: controlledOpen,
|
|
15
|
+
onToggleOpen,
|
|
16
|
+
triggerLabel = "Filtros",
|
|
17
|
+
showActiveCount = true,
|
|
18
|
+
align = "start"
|
|
19
|
+
}) {
|
|
20
|
+
const currentMap = React.useMemo(() => {
|
|
21
|
+
const m = {};
|
|
22
|
+
for (const g of groups) m[g.key] = Array.isArray(g.value) ? g.value : [];
|
|
23
|
+
return m;
|
|
24
|
+
}, [groups]);
|
|
25
|
+
const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false);
|
|
26
|
+
const isControlled = typeof controlledOpen === "boolean" && typeof onToggleOpen === "function";
|
|
27
|
+
const open = isControlled ? controlledOpen : uncontrolledOpen;
|
|
28
|
+
const setOpen = isControlled ? onToggleOpen : setUncontrolledOpen;
|
|
29
|
+
const rootRef = React.useRef(null);
|
|
30
|
+
React.useEffect(() => {
|
|
31
|
+
const onDocClick = (e) => {
|
|
32
|
+
if (!open) return;
|
|
33
|
+
if (!rootRef.current) return;
|
|
34
|
+
if (!rootRef.current.contains(e.target)) setOpen(false);
|
|
35
|
+
};
|
|
36
|
+
window.addEventListener("click", onDocClick);
|
|
37
|
+
return () => window.removeEventListener("click", onDocClick);
|
|
38
|
+
}, [open, setOpen]);
|
|
39
|
+
const onGroupChange = (key, next, cb) => {
|
|
40
|
+
cb == null ? void 0 : cb(next);
|
|
41
|
+
if (onChange) {
|
|
42
|
+
const m = { ...currentMap, [key]: next };
|
|
43
|
+
onChange(m, key);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
const activeCount = React.useMemo(
|
|
47
|
+
() => Object.values(currentMap).reduce((acc, arr) => acc + (Array.isArray(arr) ? arr.length : 0), 0),
|
|
48
|
+
[currentMap]
|
|
49
|
+
);
|
|
50
|
+
const panelStyle = typeof gap === "number" ? { gap } : { gap: void 0 };
|
|
51
|
+
return /* @__PURE__ */ jsxs("div", { ref: rootRef, className: clsx("relative inline-block", className), children: [
|
|
52
|
+
/* @__PURE__ */ jsxs(
|
|
53
|
+
Button,
|
|
54
|
+
{
|
|
55
|
+
unstyled: true,
|
|
56
|
+
onClick: (e) => {
|
|
57
|
+
e.stopPropagation();
|
|
58
|
+
setOpen((v) => !v);
|
|
59
|
+
},
|
|
60
|
+
className: clsx(
|
|
61
|
+
"relative inline-flex items-center gap-2 min-h-[44px] rounded-2xl border border-slate-200 bg-white px-3 pr-9 text-sm text-slate-900 shadow-sm outline-none transition",
|
|
62
|
+
"hover:bg-white focus:ring-4 focus:ring-slate-900/5 focus:border-slate-300",
|
|
63
|
+
"dark:border-white/10 dark:bg-white/10 dark:text-slate-100 dark:focus:ring-white/10"
|
|
64
|
+
),
|
|
65
|
+
children: [
|
|
66
|
+
/* @__PURE__ */ jsx("span", { children: triggerLabel }),
|
|
67
|
+
showActiveCount && /* @__PURE__ */ jsx("span", { className: "rounded-full bg-slate-100 px-2 py-0.5 text-xs text-slate-700 dark:bg-white/10 dark:text-slate-200", children: activeCount }),
|
|
68
|
+
/* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute right-2 top-1/2 -translate-y-1/2 inline-flex h-7 w-7 items-center justify-center rounded-lg border border-slate-200 bg-white text-slate-600 dark:border-white/10 dark:bg-white/5", children: /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", className: clsx("h-4 w-4 transition", open && "rotate-180"), fill: "none", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ jsx("path", { d: "m6 9 6 6 6-6" }) }) })
|
|
69
|
+
]
|
|
70
|
+
}
|
|
71
|
+
),
|
|
72
|
+
/* @__PURE__ */ jsx(AnimatePresence, { children: open && /* @__PURE__ */ jsx(
|
|
73
|
+
motion.div,
|
|
74
|
+
{
|
|
75
|
+
initial: { opacity: 0, y: 6 },
|
|
76
|
+
animate: { opacity: 1, y: 0 },
|
|
77
|
+
exit: { opacity: 0, y: -6 },
|
|
78
|
+
className: clsx(
|
|
79
|
+
"absolute z-20 mt-2 w-[min(96vw,720px)] overflow-hidden rounded-2xl border border-slate-200 bg-white p-3 shadow-xl dark:border-white/10 dark:bg-[#0e0d0e]",
|
|
80
|
+
align === "end" ? "right-0" : "left-0"
|
|
81
|
+
),
|
|
82
|
+
children: /* @__PURE__ */ jsx("div", { className: "flex flex-wrap", style: panelStyle, children: groups.map((g) => {
|
|
83
|
+
var _a, _b, _c;
|
|
84
|
+
return /* @__PURE__ */ jsx("div", { className: "w-full", children: /* @__PURE__ */ jsx(
|
|
85
|
+
CheckboxPillsGroup,
|
|
86
|
+
{
|
|
87
|
+
size: "sm",
|
|
88
|
+
options: g.options,
|
|
89
|
+
value: g.value,
|
|
90
|
+
onChange: (next) => onGroupChange(g.key, next, g.onChange),
|
|
91
|
+
multiple: (_a = g.multiple) != null ? _a : true,
|
|
92
|
+
label: g.label,
|
|
93
|
+
...{
|
|
94
|
+
...g.pillsProps,
|
|
95
|
+
color: (_c = (_b = g.pillsProps) == null ? void 0 : _b.color) != null ? _c : color
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
) }, g.key);
|
|
99
|
+
}) })
|
|
100
|
+
}
|
|
101
|
+
) })
|
|
102
|
+
] });
|
|
103
|
+
}
|
|
104
|
+
export {
|
|
105
|
+
FiltersMultiSelect as default
|
|
106
|
+
};
|
package/dist/Input.d.mts
CHANGED
|
@@ -7,6 +7,7 @@ type InputProps = Omit<React__default.InputHTMLAttributes<HTMLInputElement>, "si
|
|
|
7
7
|
clearable?: boolean;
|
|
8
8
|
onClear?: () => void;
|
|
9
9
|
tone?: "default" | "danger";
|
|
10
|
+
unstyled?: boolean;
|
|
10
11
|
};
|
|
11
12
|
declare const Input: React__default.ForwardRefExoticComponent<Omit<React__default.InputHTMLAttributes<HTMLInputElement>, "size"> & {
|
|
12
13
|
error?: boolean;
|
|
@@ -15,6 +16,7 @@ declare const Input: React__default.ForwardRefExoticComponent<Omit<React__defaul
|
|
|
15
16
|
clearable?: boolean;
|
|
16
17
|
onClear?: () => void;
|
|
17
18
|
tone?: "default" | "danger";
|
|
19
|
+
unstyled?: boolean;
|
|
18
20
|
} & React__default.RefAttributes<HTMLInputElement>>;
|
|
19
21
|
|
|
20
22
|
export { type InputProps, Input as default };
|
package/dist/Input.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ type InputProps = Omit<React__default.InputHTMLAttributes<HTMLInputElement>, "si
|
|
|
7
7
|
clearable?: boolean;
|
|
8
8
|
onClear?: () => void;
|
|
9
9
|
tone?: "default" | "danger";
|
|
10
|
+
unstyled?: boolean;
|
|
10
11
|
};
|
|
11
12
|
declare const Input: React__default.ForwardRefExoticComponent<Omit<React__default.InputHTMLAttributes<HTMLInputElement>, "size"> & {
|
|
12
13
|
error?: boolean;
|
|
@@ -15,6 +16,7 @@ declare const Input: React__default.ForwardRefExoticComponent<Omit<React__defaul
|
|
|
15
16
|
clearable?: boolean;
|
|
16
17
|
onClear?: () => void;
|
|
17
18
|
tone?: "default" | "danger";
|
|
19
|
+
unstyled?: boolean;
|
|
18
20
|
} & React__default.RefAttributes<HTMLInputElement>>;
|
|
19
21
|
|
|
20
22
|
export { type InputProps, Input as default };
|