@misael703/ui 1.6.0 → 1.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -0
- package/dist/{chunk-3OVWAAGP.mjs → chunk-3EFZU6GX.mjs} +5 -5
- package/dist/{chunk-3OVWAAGP.mjs.map → chunk-3EFZU6GX.mjs.map} +1 -1
- package/dist/{chunk-W37Y2YFM.mjs → chunk-3MOVUNRA.mjs} +3 -3
- package/dist/{chunk-W37Y2YFM.mjs.map → chunk-3MOVUNRA.mjs.map} +1 -1
- package/dist/{chunk-LKBYMAGV.js → chunk-3VVQIWWG.js} +4 -4
- package/dist/{chunk-LKBYMAGV.js.map → chunk-3VVQIWWG.js.map} +1 -1
- package/dist/{chunk-ZRBVYPKN.js → chunk-3XXTCTFO.js} +7 -7
- package/dist/{chunk-ZRBVYPKN.js.map → chunk-3XXTCTFO.js.map} +1 -1
- package/dist/{chunk-4P52GDMN.js → chunk-4TUK7DGZ.js} +16 -16
- package/dist/{chunk-4P52GDMN.js.map → chunk-4TUK7DGZ.js.map} +1 -1
- package/dist/{chunk-DW3XAXHR.mjs → chunk-4Z63PIAZ.mjs} +4 -4
- package/dist/{chunk-DW3XAXHR.mjs.map → chunk-4Z63PIAZ.mjs.map} +1 -1
- package/dist/{chunk-QI4JT3V3.mjs → chunk-6EGXSTPR.mjs} +5 -5
- package/dist/{chunk-QI4JT3V3.mjs.map → chunk-6EGXSTPR.mjs.map} +1 -1
- package/dist/{chunk-WVN5JJVV.js → chunk-6FXXZZQV.js} +7 -7
- package/dist/{chunk-WVN5JJVV.js.map → chunk-6FXXZZQV.js.map} +1 -1
- package/dist/{chunk-PROKTOL7.js → chunk-6JA4KQU2.js} +5 -5
- package/dist/{chunk-PROKTOL7.js.map → chunk-6JA4KQU2.js.map} +1 -1
- package/dist/{chunk-LIGJBHXU.js → chunk-6TYPG7MA.js} +2 -2
- package/dist/{chunk-LIGJBHXU.js.map → chunk-6TYPG7MA.js.map} +1 -1
- package/dist/{chunk-7D6Y33UY.mjs → chunk-7AD35TKY.mjs} +19 -7
- package/dist/chunk-7AD35TKY.mjs.map +1 -0
- package/dist/{chunk-YAORRBMU.js → chunk-AJ32TAHG.js} +7 -7
- package/dist/{chunk-YAORRBMU.js.map → chunk-AJ32TAHG.js.map} +1 -1
- package/dist/{chunk-S5BIOB34.js → chunk-AYQ7FM6O.js} +21 -9
- package/dist/chunk-AYQ7FM6O.js.map +1 -0
- package/dist/{chunk-QW2CSXPH.mjs → chunk-B4AIJWH5.mjs} +3 -3
- package/dist/{chunk-QW2CSXPH.mjs.map → chunk-B4AIJWH5.mjs.map} +1 -1
- package/dist/{chunk-V7MK42GX.js → chunk-B67HZ45M.js} +7 -7
- package/dist/{chunk-V7MK42GX.js.map → chunk-B67HZ45M.js.map} +1 -1
- package/dist/{chunk-TEQ67JKX.js → chunk-CBHWPIHM.js} +8 -2
- package/dist/chunk-CBHWPIHM.js.map +1 -0
- package/dist/{chunk-Z67IZS4P.mjs → chunk-CCZOHDVF.mjs} +4 -4
- package/dist/{chunk-Z67IZS4P.mjs.map → chunk-CCZOHDVF.mjs.map} +1 -1
- package/dist/{chunk-OCLBAGNF.mjs → chunk-CFAX3HUT.mjs} +5 -5
- package/dist/{chunk-OCLBAGNF.mjs.map → chunk-CFAX3HUT.mjs.map} +1 -1
- package/dist/{chunk-M3Y2AH7S.mjs → chunk-CXEQ56RU.mjs} +4 -4
- package/dist/{chunk-M3Y2AH7S.mjs.map → chunk-CXEQ56RU.mjs.map} +1 -1
- package/dist/{chunk-2JTBLDMK.js → chunk-FEDQKTCX.js} +6 -6
- package/dist/{chunk-2JTBLDMK.js.map → chunk-FEDQKTCX.js.map} +1 -1
- package/dist/{chunk-QX5GGPV5.mjs → chunk-FKBQYQQD.mjs} +2 -2
- package/dist/{chunk-QX5GGPV5.mjs.map → chunk-FKBQYQQD.mjs.map} +1 -1
- package/dist/{chunk-HVUNNL3A.mjs → chunk-GBHP5WAB.mjs} +4 -4
- package/dist/{chunk-HVUNNL3A.mjs.map → chunk-GBHP5WAB.mjs.map} +1 -1
- package/dist/{chunk-H3PRT76O.mjs → chunk-GD7MI7OT.mjs} +4 -4
- package/dist/chunk-GD7MI7OT.mjs.map +1 -0
- package/dist/{chunk-DJ6MS2WW.js → chunk-HKERJFKW.js} +6 -6
- package/dist/{chunk-DJ6MS2WW.js.map → chunk-HKERJFKW.js.map} +1 -1
- package/dist/{chunk-L3TX6KPP.mjs → chunk-I3Z3MH72.mjs} +5 -5
- package/dist/{chunk-L3TX6KPP.mjs.map → chunk-I3Z3MH72.mjs.map} +1 -1
- package/dist/{chunk-MUL2FKYF.js → chunk-I5V54YCS.js} +7 -7
- package/dist/{chunk-MUL2FKYF.js.map → chunk-I5V54YCS.js.map} +1 -1
- package/dist/{chunk-KKOJI25C.mjs → chunk-IUL73666.mjs} +2 -2
- package/dist/{chunk-KKOJI25C.mjs.map → chunk-IUL73666.mjs.map} +1 -1
- package/dist/{chunk-TI5QCUAV.js → chunk-J3J6LCHJ.js} +7 -7
- package/dist/{chunk-TI5QCUAV.js.map → chunk-J3J6LCHJ.js.map} +1 -1
- package/dist/{chunk-5KSE4OLY.js → chunk-JL73XCFX.js} +6 -6
- package/dist/{chunk-5KSE4OLY.js.map → chunk-JL73XCFX.js.map} +1 -1
- package/dist/{chunk-UNOPDYA7.js → chunk-JPPRP5R7.js} +8 -8
- package/dist/{chunk-UNOPDYA7.js.map → chunk-JPPRP5R7.js.map} +1 -1
- package/dist/{chunk-3TNBETXR.js → chunk-KJ7UNUTB.js} +6 -6
- package/dist/{chunk-3TNBETXR.js.map → chunk-KJ7UNUTB.js.map} +1 -1
- package/dist/{chunk-JWGK5HKF.mjs → chunk-KOZUEK6V.mjs} +5 -5
- package/dist/{chunk-JWGK5HKF.mjs.map → chunk-KOZUEK6V.mjs.map} +1 -1
- package/dist/{chunk-YRACSKAT.js → chunk-LZ4RGZJM.js} +10 -10
- package/dist/{chunk-YRACSKAT.js.map → chunk-LZ4RGZJM.js.map} +1 -1
- package/dist/{chunk-63HJVJ7O.mjs → chunk-NY467B35.mjs} +8 -8
- package/dist/{chunk-63HJVJ7O.mjs.map → chunk-NY467B35.mjs.map} +1 -1
- package/dist/{chunk-WUTBLHEB.mjs → chunk-PTHUKX2I.mjs} +200 -8
- package/dist/chunk-PTHUKX2I.mjs.map +1 -0
- package/dist/{chunk-PCRNKITV.mjs → chunk-PWAIOLZH.mjs} +4 -4
- package/dist/{chunk-PCRNKITV.mjs.map → chunk-PWAIOLZH.mjs.map} +1 -1
- package/dist/{chunk-ZRFSTYRL.mjs → chunk-Q4BKGBTV.mjs} +8 -2
- package/dist/chunk-Q4BKGBTV.mjs.map +1 -0
- package/dist/{chunk-6RVCYULF.mjs → chunk-Q6C2KXLO.mjs} +5 -5
- package/dist/{chunk-6RVCYULF.mjs.map → chunk-Q6C2KXLO.mjs.map} +1 -1
- package/dist/{chunk-2S6JJYN7.js → chunk-QEDJJAKV.js} +7 -7
- package/dist/{chunk-2S6JJYN7.js.map → chunk-QEDJJAKV.js.map} +1 -1
- package/dist/{chunk-UB2XEZ7C.mjs → chunk-QQ5PBPAB.mjs} +4 -4
- package/dist/{chunk-UB2XEZ7C.mjs.map → chunk-QQ5PBPAB.mjs.map} +1 -1
- package/dist/{chunk-YXSKREHS.mjs → chunk-RJMMD7CG.mjs} +5 -5
- package/dist/{chunk-YXSKREHS.mjs.map → chunk-RJMMD7CG.mjs.map} +1 -1
- package/dist/{chunk-X6VCY7MD.mjs → chunk-S6BMFQ6C.mjs} +3 -3
- package/dist/{chunk-X6VCY7MD.mjs.map → chunk-S6BMFQ6C.mjs.map} +1 -1
- package/dist/{chunk-DPMUWQHL.js → chunk-SW3ACUKK.js} +4 -4
- package/dist/chunk-SW3ACUKK.js.map +1 -0
- package/dist/{chunk-N2Y2KWX5.mjs → chunk-TDVFNHQZ.mjs} +5 -5
- package/dist/{chunk-N2Y2KWX5.mjs.map → chunk-TDVFNHQZ.mjs.map} +1 -1
- package/dist/{chunk-VR4OXVKE.js → chunk-UK54DHNM.js} +7 -7
- package/dist/{chunk-VR4OXVKE.js.map → chunk-UK54DHNM.js.map} +1 -1
- package/dist/{chunk-TZG34EYW.js → chunk-VMC5ZD4O.js} +6 -6
- package/dist/{chunk-TZG34EYW.js.map → chunk-VMC5ZD4O.js.map} +1 -1
- package/dist/{chunk-EG2NDZDC.js → chunk-VTDXEY26.js} +9 -9
- package/dist/{chunk-EG2NDZDC.js.map → chunk-VTDXEY26.js.map} +1 -1
- package/dist/{chunk-IALAIASX.js → chunk-VUJMOT6K.js} +9 -9
- package/dist/{chunk-IALAIASX.js.map → chunk-VUJMOT6K.js.map} +1 -1
- package/dist/{chunk-LK2PFMDU.js → chunk-VXKEX7T2.js} +13 -13
- package/dist/{chunk-LK2PFMDU.js.map → chunk-VXKEX7T2.js.map} +1 -1
- package/dist/{chunk-GLYGO7WX.js → chunk-WAGWB35Q.js} +2 -2
- package/dist/{chunk-GLYGO7WX.js.map → chunk-WAGWB35Q.js.map} +1 -1
- package/dist/{chunk-WLDQP4KD.mjs → chunk-WPSZ7N2K.mjs} +5 -5
- package/dist/{chunk-WLDQP4KD.mjs.map → chunk-WPSZ7N2K.mjs.map} +1 -1
- package/dist/{chunk-6PEC4RRO.mjs → chunk-WQFNJVKU.mjs} +4 -4
- package/dist/{chunk-6PEC4RRO.mjs.map → chunk-WQFNJVKU.mjs.map} +1 -1
- package/dist/{chunk-5A3MDLEZ.js → chunk-WWJK2R2B.js} +208 -14
- package/dist/chunk-WWJK2R2B.js.map +1 -0
- package/dist/{chunk-IMFQ55KO.js → chunk-X7O37QLL.js} +7 -7
- package/dist/{chunk-IMFQ55KO.js.map → chunk-X7O37QLL.js.map} +1 -1
- package/dist/{chunk-PXCH5Z76.mjs → chunk-XYKOXQUS.mjs} +4 -4
- package/dist/{chunk-PXCH5Z76.mjs.map → chunk-XYKOXQUS.mjs.map} +1 -1
- package/dist/{chunk-IMHLJKYR.mjs → chunk-Y2B4XXTO.mjs} +5 -5
- package/dist/{chunk-IMHLJKYR.mjs.map → chunk-Y2B4XXTO.mjs.map} +1 -1
- package/dist/components/AdvancedPickers.js +9 -9
- package/dist/components/AdvancedPickers.mjs +5 -5
- package/dist/components/AppShell.js +4 -4
- package/dist/components/AppShell.mjs +2 -2
- package/dist/components/Comments.js +9 -9
- package/dist/components/Comments.mjs +6 -6
- package/dist/components/Commerce.js +15 -15
- package/dist/components/Commerce.mjs +4 -4
- package/dist/components/ContextMenu.js +4 -4
- package/dist/components/ContextMenu.mjs +3 -3
- package/dist/components/DataTable.js +10 -10
- package/dist/components/DataTable.mjs +4 -4
- package/dist/components/Display.js +13 -13
- package/dist/components/Display.mjs +2 -2
- package/dist/components/Display2.js +7 -7
- package/dist/components/Display2.mjs +3 -3
- package/dist/components/Display3.js +11 -11
- package/dist/components/Display3.mjs +5 -5
- package/dist/components/Editing.js +8 -8
- package/dist/components/Editing.mjs +3 -3
- package/dist/components/Filters.js +7 -7
- package/dist/components/Filters.mjs +3 -3
- package/dist/components/Gallery.js +5 -5
- package/dist/components/Gallery.mjs +3 -3
- package/dist/components/HoverCard.js +4 -4
- package/dist/components/HoverCard.mjs +3 -3
- package/dist/components/Inputs.js +7 -7
- package/dist/components/Inputs.mjs +3 -3
- package/dist/components/InputsExtra.js +12 -12
- package/dist/components/InputsExtra.mjs +3 -3
- package/dist/components/Layout.js +20 -20
- package/dist/components/Layout.mjs +3 -3
- package/dist/components/Menubar.js +4 -4
- package/dist/components/Menubar.mjs +3 -3
- package/dist/components/NavigationMenu.js +4 -4
- package/dist/components/NavigationMenu.mjs +3 -3
- package/dist/components/Notifications.js +4 -4
- package/dist/components/Notifications.mjs +3 -3
- package/dist/components/Overlay.js +4 -4
- package/dist/components/Overlay.mjs +2 -2
- package/dist/components/Permissions.js +4 -4
- package/dist/components/Permissions.mjs +3 -3
- package/dist/components/Pickers.d.mts +25 -1
- package/dist/components/Pickers.d.ts +25 -1
- package/dist/components/Pickers.js +15 -7
- package/dist/components/Pickers.mjs +4 -4
- package/dist/components/Popover.js +4 -4
- package/dist/components/Popover.mjs +3 -3
- package/dist/components/Portal.d.mts +1 -1
- package/dist/components/Portal.d.ts +1 -1
- package/dist/components/Portal.js +2 -2
- package/dist/components/Portal.mjs +1 -1
- package/dist/components/Toast.js +4 -4
- package/dist/components/Toast.mjs +2 -2
- package/dist/hooks/index.js +2 -2
- package/dist/hooks/index.mjs +1 -1
- package/dist/hooks/usePopoverPosition.d.mts +7 -4
- package/dist/hooks/usePopoverPosition.d.ts +7 -4
- package/dist/hooks/usePopoverPosition.js +2 -2
- package/dist/hooks/usePopoverPosition.mjs +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +144 -136
- package/dist/index.mjs +28 -28
- package/dist/locale/index.d.mts +6 -0
- package/dist/locale/index.d.ts +6 -0
- package/dist/locale/index.js +6 -6
- package/dist/locale/index.mjs +2 -2
- package/dist/styles.css +1 -1
- package/package.json +1 -1
- package/dist/chunk-5A3MDLEZ.js.map +0 -1
- package/dist/chunk-7D6Y33UY.mjs.map +0 -1
- package/dist/chunk-DPMUWQHL.js.map +0 -1
- package/dist/chunk-H3PRT76O.mjs.map +0 -1
- package/dist/chunk-S5BIOB34.js.map +0 -1
- package/dist/chunk-TEQ67JKX.js.map +0 -1
- package/dist/chunk-WUTBLHEB.mjs.map +0 -1
- package/dist/chunk-ZRFSTYRL.mjs.map +0 -1
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
var chunkHHEYTMBY_js = require('./chunk-HHEYTMBY.js');
|
|
4
4
|
var chunkXMLBKK7X_js = require('./chunk-XMLBKK7X.js');
|
|
5
|
-
var
|
|
6
|
-
var
|
|
7
|
-
var
|
|
5
|
+
var chunkSW3ACUKK_js = require('./chunk-SW3ACUKK.js');
|
|
6
|
+
var chunkWAGWB35Q_js = require('./chunk-WAGWB35Q.js');
|
|
7
|
+
var chunkCBHWPIHM_js = require('./chunk-CBHWPIHM.js');
|
|
8
8
|
var chunkRQOTH7I7_js = require('./chunk-RQOTH7I7.js');
|
|
9
9
|
var chunkPASF6T4H_js = require('./chunk-PASF6T4H.js');
|
|
10
10
|
var React = require('react');
|
|
@@ -43,7 +43,7 @@ function Combobox({
|
|
|
43
43
|
disabled,
|
|
44
44
|
id
|
|
45
45
|
}) {
|
|
46
|
-
const locale =
|
|
46
|
+
const locale = chunkCBHWPIHM_js.useLocale();
|
|
47
47
|
const ph = placeholder ?? locale["common.search"];
|
|
48
48
|
const empty = emptyMessage ?? locale["common.noResults"];
|
|
49
49
|
const [open, setOpen] = React__namespace.useState(false);
|
|
@@ -62,7 +62,7 @@ function Combobox({
|
|
|
62
62
|
() => query ? options.filter((o) => filter(o, query)) : options,
|
|
63
63
|
[options, query, filter]
|
|
64
64
|
);
|
|
65
|
-
const pos =
|
|
65
|
+
const pos = chunkSW3ACUKK_js.usePopoverPosition(wrapRef, listRef, {
|
|
66
66
|
open,
|
|
67
67
|
side: "bottom",
|
|
68
68
|
align: "start",
|
|
@@ -134,7 +134,7 @@ function Combobox({
|
|
|
134
134
|
children: /* @__PURE__ */ jsxRuntime.jsx(chunkRQOTH7I7_js.X, { size: 16 })
|
|
135
135
|
}
|
|
136
136
|
),
|
|
137
|
-
open && /* @__PURE__ */ jsxRuntime.jsx(
|
|
137
|
+
open && /* @__PURE__ */ jsxRuntime.jsx(chunkWAGWB35Q_js.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
138
138
|
"ul",
|
|
139
139
|
{
|
|
140
140
|
ref: listRef,
|
|
@@ -142,7 +142,7 @@ function Combobox({
|
|
|
142
142
|
role: "listbox",
|
|
143
143
|
className: chunkPASF6T4H_js.cx("combobox__list", "is-floating"),
|
|
144
144
|
style: {
|
|
145
|
-
position: "
|
|
145
|
+
position: "fixed",
|
|
146
146
|
top: pos.top,
|
|
147
147
|
left: pos.left,
|
|
148
148
|
width: pos.width,
|
|
@@ -186,7 +186,7 @@ function DatePicker({
|
|
|
186
186
|
id,
|
|
187
187
|
format = "auto"
|
|
188
188
|
}) {
|
|
189
|
-
const locale =
|
|
189
|
+
const locale = chunkCBHWPIHM_js.useLocale();
|
|
190
190
|
const fmt = chunkHHEYTMBY_js.resolveDateFormat(format);
|
|
191
191
|
const ph = placeholder ?? chunkHHEYTMBY_js.dateFormatPlaceholder(fmt);
|
|
192
192
|
const weekdays = locale["picker.weekdaysShort"];
|
|
@@ -195,7 +195,7 @@ function DatePicker({
|
|
|
195
195
|
const [view, setView] = React__namespace.useState(() => chunkHHEYTMBY_js.startOfMonth(value ?? /* @__PURE__ */ new Date()));
|
|
196
196
|
const wrapRef = React__namespace.useRef(null);
|
|
197
197
|
const popoverRef = React__namespace.useRef(null);
|
|
198
|
-
const pos =
|
|
198
|
+
const pos = chunkSW3ACUKK_js.usePopoverPosition(wrapRef, popoverRef, {
|
|
199
199
|
open,
|
|
200
200
|
side: "bottom",
|
|
201
201
|
align: "start",
|
|
@@ -240,14 +240,14 @@ function DatePicker({
|
|
|
240
240
|
children: /* @__PURE__ */ jsxRuntime.jsx(chunkRQOTH7I7_js.CalendarIcon, { size: 16 })
|
|
241
241
|
}
|
|
242
242
|
),
|
|
243
|
-
open && /* @__PURE__ */ jsxRuntime.jsx(
|
|
243
|
+
open && /* @__PURE__ */ jsxRuntime.jsx(chunkWAGWB35Q_js.Portal, { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
244
244
|
"div",
|
|
245
245
|
{
|
|
246
246
|
ref: popoverRef,
|
|
247
247
|
className: chunkPASF6T4H_js.cx("datepicker__popover", "is-floating"),
|
|
248
248
|
role: "dialog",
|
|
249
249
|
style: {
|
|
250
|
-
position: "
|
|
250
|
+
position: "fixed",
|
|
251
251
|
top: pos.top,
|
|
252
252
|
left: pos.left,
|
|
253
253
|
visibility: pos.ready ? "visible" : "hidden"
|
|
@@ -303,7 +303,7 @@ function FileUpload({
|
|
|
303
303
|
const [drag, setDrag] = React__namespace.useState(false);
|
|
304
304
|
const inputRef = React__namespace.useRef(null);
|
|
305
305
|
const hintId = React__namespace.useId();
|
|
306
|
-
const locale =
|
|
306
|
+
const locale = chunkCBHWPIHM_js.useLocale();
|
|
307
307
|
const handle = (list) => {
|
|
308
308
|
if (!list) return;
|
|
309
309
|
let arr = Array.from(list);
|
|
@@ -353,9 +353,203 @@ function FileUpload({
|
|
|
353
353
|
}
|
|
354
354
|
);
|
|
355
355
|
}
|
|
356
|
+
function GridPickerField({
|
|
357
|
+
rootClass,
|
|
358
|
+
displayValue,
|
|
359
|
+
placeholder,
|
|
360
|
+
ariaLabel,
|
|
361
|
+
navTitle,
|
|
362
|
+
prevLabel,
|
|
363
|
+
nextLabel,
|
|
364
|
+
onPrev,
|
|
365
|
+
onNext,
|
|
366
|
+
cells,
|
|
367
|
+
disabled,
|
|
368
|
+
invalid,
|
|
369
|
+
id,
|
|
370
|
+
className
|
|
371
|
+
}) {
|
|
372
|
+
const [open, setOpen] = React__namespace.useState(false);
|
|
373
|
+
const wrapRef = React__namespace.useRef(null);
|
|
374
|
+
const popoverRef = React__namespace.useRef(null);
|
|
375
|
+
const pos = chunkSW3ACUKK_js.usePopoverPosition(wrapRef, popoverRef, {
|
|
376
|
+
open,
|
|
377
|
+
side: "bottom",
|
|
378
|
+
align: "start",
|
|
379
|
+
offset: 4
|
|
380
|
+
});
|
|
381
|
+
chunkXMLBKK7X_js.useDismiss({ open, onDismiss: () => setOpen(false), refs: [wrapRef, popoverRef] });
|
|
382
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
383
|
+
"div",
|
|
384
|
+
{
|
|
385
|
+
ref: wrapRef,
|
|
386
|
+
className: chunkPASF6T4H_js.cx(rootClass, "gridpicker", invalid && "is-invalid", disabled && "is-disabled", className),
|
|
387
|
+
children: [
|
|
388
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
389
|
+
"input",
|
|
390
|
+
{
|
|
391
|
+
id,
|
|
392
|
+
type: "text",
|
|
393
|
+
readOnly: true,
|
|
394
|
+
className: "gridpicker__input",
|
|
395
|
+
placeholder,
|
|
396
|
+
disabled,
|
|
397
|
+
value: displayValue,
|
|
398
|
+
onFocus: () => setOpen(true),
|
|
399
|
+
onClick: () => setOpen(true),
|
|
400
|
+
"aria-invalid": invalid || void 0
|
|
401
|
+
}
|
|
402
|
+
),
|
|
403
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
404
|
+
"button",
|
|
405
|
+
{
|
|
406
|
+
type: "button",
|
|
407
|
+
className: "gridpicker__toggle",
|
|
408
|
+
onClick: () => setOpen((o) => !o),
|
|
409
|
+
disabled,
|
|
410
|
+
"aria-label": ariaLabel,
|
|
411
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(chunkRQOTH7I7_js.CalendarIcon, { size: 16 })
|
|
412
|
+
}
|
|
413
|
+
),
|
|
414
|
+
open && /* @__PURE__ */ jsxRuntime.jsx(chunkWAGWB35Q_js.Portal, { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
415
|
+
"div",
|
|
416
|
+
{
|
|
417
|
+
ref: popoverRef,
|
|
418
|
+
className: chunkPASF6T4H_js.cx("gridpicker__popover", "is-floating"),
|
|
419
|
+
role: "dialog",
|
|
420
|
+
style: {
|
|
421
|
+
position: "fixed",
|
|
422
|
+
top: pos.top,
|
|
423
|
+
left: pos.left,
|
|
424
|
+
visibility: pos.ready ? "visible" : "hidden"
|
|
425
|
+
},
|
|
426
|
+
children: [
|
|
427
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gridpicker__nav", children: [
|
|
428
|
+
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: onPrev, "aria-label": prevLabel, children: /* @__PURE__ */ jsxRuntime.jsx(chunkRQOTH7I7_js.ChevronLeft, { size: 16 }) }),
|
|
429
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "gridpicker__title", children: navTitle }),
|
|
430
|
+
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: onNext, "aria-label": nextLabel, children: /* @__PURE__ */ jsxRuntime.jsx(chunkRQOTH7I7_js.ChevronRight, { size: 16 }) })
|
|
431
|
+
] }),
|
|
432
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "gridpicker__grid", children: cells.map((c) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
433
|
+
"button",
|
|
434
|
+
{
|
|
435
|
+
type: "button",
|
|
436
|
+
className: chunkPASF6T4H_js.cx("gridpicker__cell", c.selected && "is-selected", c.outside && "is-out"),
|
|
437
|
+
disabled: c.disabled,
|
|
438
|
+
onClick: () => {
|
|
439
|
+
c.onSelect();
|
|
440
|
+
setOpen(false);
|
|
441
|
+
},
|
|
442
|
+
children: c.label
|
|
443
|
+
},
|
|
444
|
+
c.key
|
|
445
|
+
)) })
|
|
446
|
+
]
|
|
447
|
+
}
|
|
448
|
+
) })
|
|
449
|
+
]
|
|
450
|
+
}
|
|
451
|
+
);
|
|
452
|
+
}
|
|
453
|
+
function YearPicker({
|
|
454
|
+
value,
|
|
455
|
+
onChange,
|
|
456
|
+
minYear,
|
|
457
|
+
maxYear,
|
|
458
|
+
placeholder,
|
|
459
|
+
disabled,
|
|
460
|
+
invalid,
|
|
461
|
+
id,
|
|
462
|
+
className
|
|
463
|
+
}) {
|
|
464
|
+
const t = chunkCBHWPIHM_js.useLocale();
|
|
465
|
+
const base = value ?? (/* @__PURE__ */ new Date()).getFullYear();
|
|
466
|
+
const [decade, setDecade] = React__namespace.useState(Math.floor(base / 10) * 10);
|
|
467
|
+
React__namespace.useEffect(() => {
|
|
468
|
+
if (value != null) setDecade(Math.floor(value / 10) * 10);
|
|
469
|
+
}, [value]);
|
|
470
|
+
const cells = Array.from({ length: 12 }, (_, i) => {
|
|
471
|
+
const year = decade - 1 + i;
|
|
472
|
+
return {
|
|
473
|
+
key: String(year),
|
|
474
|
+
label: year,
|
|
475
|
+
selected: value === year,
|
|
476
|
+
outside: year < decade || year > decade + 9,
|
|
477
|
+
disabled: minYear != null && year < minYear || maxYear != null && year > maxYear,
|
|
478
|
+
onSelect: () => onChange(year)
|
|
479
|
+
};
|
|
480
|
+
});
|
|
481
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
482
|
+
GridPickerField,
|
|
483
|
+
{
|
|
484
|
+
rootClass: "yearpicker",
|
|
485
|
+
displayValue: value != null ? String(value) : "",
|
|
486
|
+
placeholder: placeholder ?? t["picker.selectYear"],
|
|
487
|
+
ariaLabel: t["picker.openCalendar"],
|
|
488
|
+
navTitle: `${decade}-${decade + 9}`,
|
|
489
|
+
prevLabel: t["picker.prevDecade"],
|
|
490
|
+
nextLabel: t["picker.nextDecade"],
|
|
491
|
+
onPrev: () => setDecade((d) => d - 10),
|
|
492
|
+
onNext: () => setDecade((d) => d + 10),
|
|
493
|
+
cells,
|
|
494
|
+
disabled,
|
|
495
|
+
invalid,
|
|
496
|
+
id,
|
|
497
|
+
className
|
|
498
|
+
}
|
|
499
|
+
);
|
|
500
|
+
}
|
|
501
|
+
function MonthPicker({
|
|
502
|
+
value,
|
|
503
|
+
onChange,
|
|
504
|
+
minDate,
|
|
505
|
+
maxDate,
|
|
506
|
+
placeholder,
|
|
507
|
+
disabled,
|
|
508
|
+
invalid,
|
|
509
|
+
id,
|
|
510
|
+
className
|
|
511
|
+
}) {
|
|
512
|
+
const t = chunkCBHWPIHM_js.useLocale();
|
|
513
|
+
const months = t["calendar.months"];
|
|
514
|
+
const base = value ?? /* @__PURE__ */ new Date();
|
|
515
|
+
const [year, setYear] = React__namespace.useState(base.getFullYear());
|
|
516
|
+
React__namespace.useEffect(() => {
|
|
517
|
+
if (value) setYear(value.getFullYear());
|
|
518
|
+
}, [value]);
|
|
519
|
+
const monthStart = (y, m) => new Date(y, m, 1);
|
|
520
|
+
const outOfRange = (m) => minDate != null && monthStart(year, m) < monthStart(minDate.getFullYear(), minDate.getMonth()) || maxDate != null && monthStart(year, m) > monthStart(maxDate.getFullYear(), maxDate.getMonth());
|
|
521
|
+
const cells = months.map((name, m) => ({
|
|
522
|
+
key: String(m),
|
|
523
|
+
label: name,
|
|
524
|
+
selected: !!value && value.getFullYear() === year && value.getMonth() === m,
|
|
525
|
+
disabled: outOfRange(m),
|
|
526
|
+
onSelect: () => onChange(new Date(year, m, 1))
|
|
527
|
+
}));
|
|
528
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
529
|
+
GridPickerField,
|
|
530
|
+
{
|
|
531
|
+
rootClass: "monthpicker",
|
|
532
|
+
displayValue: value ? `${months[value.getMonth()]} ${value.getFullYear()}` : "",
|
|
533
|
+
placeholder: placeholder ?? t["picker.selectMonth"],
|
|
534
|
+
ariaLabel: t["picker.openCalendar"],
|
|
535
|
+
navTitle: String(year),
|
|
536
|
+
prevLabel: t["picker.prevYear"],
|
|
537
|
+
nextLabel: t["picker.nextYear"],
|
|
538
|
+
onPrev: () => setYear((y) => y - 1),
|
|
539
|
+
onNext: () => setYear((y) => y + 1),
|
|
540
|
+
cells,
|
|
541
|
+
disabled,
|
|
542
|
+
invalid,
|
|
543
|
+
id,
|
|
544
|
+
className
|
|
545
|
+
}
|
|
546
|
+
);
|
|
547
|
+
}
|
|
356
548
|
|
|
357
549
|
exports.Combobox = Combobox;
|
|
358
550
|
exports.DatePicker = DatePicker;
|
|
359
551
|
exports.FileUpload = FileUpload;
|
|
360
|
-
|
|
361
|
-
|
|
552
|
+
exports.MonthPicker = MonthPicker;
|
|
553
|
+
exports.YearPicker = YearPicker;
|
|
554
|
+
//# sourceMappingURL=chunk-WWJK2R2B.js.map
|
|
555
|
+
//# sourceMappingURL=chunk-WWJK2R2B.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Pickers.tsx"],"names":["useLocale","React","usePopoverPosition","useDismiss","jsxs","cx","jsx","X","Portal","resolveDateFormat","dateFormatPlaceholder","startOfMonth","buildMonthGrid","formatDate","parseDate","CalendarIcon","addMonths","ChevronLeft","ChevronRight","isSameDay"],"mappings":"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","file":"chunk-WWJK2R2B.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { CalendarIcon, ChevronLeft, ChevronRight, X } from './Icons';\nimport { resolveDateFormat, formatDate, parseDate, dateFormatPlaceholder, startOfMonth, addMonths, isSameDay, buildMonthGrid, type DateFormat } from '../utils/dateFormat';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { Portal } from './Portal';\nimport { usePopoverPosition } from '../hooks/usePopoverPosition';\nimport { useDismiss } from '../hooks/useDismiss';\n\n// ---------- Combobox -----------------------------------------------------\nexport interface ComboboxOption<T = string> {\n value: T;\n label: string;\n description?: string;\n disabled?: boolean;\n}\n\nexport interface ComboboxProps<T = string> {\n value: T | null;\n onChange: (value: T | null) => void;\n options: ComboboxOption<T>[];\n placeholder?: string;\n emptyMessage?: string;\n filter?: (option: ComboboxOption<T>, query: string) => boolean;\n className?: string;\n invalid?: boolean;\n disabled?: boolean;\n id?: string;\n}\n\nconst defaultFilter = <T,>(o: ComboboxOption<T>, q: string) =>\n o.label.toLowerCase().includes(q.toLowerCase());\n\nexport function Combobox<T = string>({\n value, onChange, options, placeholder,\n emptyMessage, filter = defaultFilter,\n className, invalid, disabled, id,\n}: ComboboxProps<T>) {\n const locale = useLocale();\n const ph = placeholder ?? locale['common.search'];\n const empty = emptyMessage ?? locale['common.noResults'];\n const [open, setOpen] = React.useState(false);\n const [query, setQuery] = React.useState('');\n const [active, setActive] = React.useState(0);\n const wrapRef = React.useRef<HTMLDivElement>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const listRef = React.useRef<HTMLUListElement>(null);\n // Stable per-instance listbox id so multiple Comboboxes don't collide on aria-controls.\n const reactId = React.useId();\n const listboxId = `${id ?? reactId}-listbox`;\n\n const selected = React.useMemo(\n () => options.find((o) => o.value === value) ?? null,\n [options, value]\n );\n const filtered = React.useMemo(\n () => (query ? options.filter((o) => filter(o, query)) : options),\n [options, query, filter]\n );\n\n const pos = usePopoverPosition(wrapRef, listRef, {\n open,\n side: 'bottom',\n align: 'start',\n offset: 4,\n matchAnchorWidth: true,\n });\n\n // Escape is handled by the input's onKeyDown; here we only need\n // outside-click (closeOnEscape: false avoids a double close).\n useDismiss({\n open,\n onDismiss: () => setOpen(false),\n refs: [wrapRef, listRef],\n closeOnEscape: false,\n });\n\n React.useEffect(() => { setActive(0); }, [query, open]);\n\n const onKey = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setOpen(true);\n setActive((a) => Math.min(filtered.length - 1, a + 1));\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n setActive((a) => Math.max(0, a - 1));\n } else if (e.key === 'Enter') {\n e.preventDefault();\n const opt = filtered[active];\n if (opt && !opt.disabled) {\n onChange(opt.value);\n setQuery('');\n setOpen(false);\n }\n } else if (e.key === 'Escape') {\n setOpen(false);\n }\n };\n\n return (\n <div ref={wrapRef} className={cx('combobox', invalid && 'is-invalid', disabled && 'is-disabled', className)}>\n <input\n ref={inputRef}\n id={id}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={listboxId}\n className=\"combobox__input\"\n placeholder={ph}\n disabled={disabled}\n value={open ? query : selected?.label ?? ''}\n onFocus={() => setOpen(true)}\n onChange={(e) => { setQuery(e.target.value); setOpen(true); }}\n onKeyDown={onKey}\n />\n {selected && !open && (\n <button\n type=\"button\"\n className=\"combobox__clear\"\n onClick={() => { onChange(null); setQuery(''); inputRef.current?.focus(); }}\n aria-label={locale['picker.clearSelection']}\n ><X size={16} /></button>\n )}\n {open && (\n <Portal>\n <ul\n ref={listRef}\n id={listboxId}\n role=\"listbox\"\n className={cx('combobox__list', 'is-floating')}\n style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n width: pos.width,\n visibility: pos.ready ? 'visible' : 'hidden',\n }}\n >\n {filtered.length === 0 ? (\n <li className=\"combobox__empty\">{empty}</li>\n ) : (\n filtered.map((o, i) => (\n <li\n key={String(o.value)}\n role=\"option\"\n aria-selected={o.value === value}\n aria-disabled={o.disabled}\n className={cx('combobox__option', i === active && 'is-active', o.value === value && 'is-selected', o.disabled && 'is-disabled')}\n onMouseEnter={() => setActive(i)}\n onMouseDown={(e) => {\n e.preventDefault();\n if (o.disabled) return;\n onChange(o.value);\n setQuery('');\n setOpen(false);\n }}\n >\n <span className=\"combobox__option-label\">{o.label}</span>\n {o.description && <span className=\"combobox__option-desc\">{o.description}</span>}\n </li>\n ))\n )}\n </ul>\n </Portal>\n )}\n </div>\n );\n}\n\n// ---------- DatePicker (text + calendar popover) -------------------------\nexport interface DatePickerProps {\n value: Date | null;\n onChange: (date: Date | null) => void;\n minDate?: Date;\n maxDate?: Date;\n placeholder?: string;\n disabled?: boolean;\n invalid?: boolean;\n className?: string;\n id?: string;\n /**\n * Display & parse format. Default `'auto'` derives from `configureBrand().locale`\n * (e.g. `es-CL` → `dd-mm-aaaa`, `en-US` → `mm-dd-aaaa`, `ja-JP` → `aaaa-mm-dd`).\n */\n format?: DateFormat;\n}\n\nexport function DatePicker({\n value, onChange, minDate, maxDate, placeholder,\n disabled, invalid, className, id, format = 'auto',\n}: DatePickerProps) {\n const locale = useLocale();\n const fmt = resolveDateFormat(format);\n const ph = placeholder ?? dateFormatPlaceholder(fmt);\n const weekdays = locale['picker.weekdaysShort'];\n const months = locale['calendar.months'];\n const [open, setOpen] = React.useState(false);\n const [view, setView] = React.useState(() => startOfMonth(value ?? new Date()));\n const wrapRef = React.useRef<HTMLDivElement>(null);\n const popoverRef = React.useRef<HTMLDivElement>(null);\n\n // Portaled to body (escapes overflow ancestors) with flip/clamp and\n // scroll/resize reposition — same primitive as Combobox above. No\n // returnFocusRef: the input opens on focus, so refocusing it on close\n // would immediately reopen the calendar (Combobox omits it for the same\n // reason). Escape still closes via useDismiss's default handler.\n const pos = usePopoverPosition(wrapRef, popoverRef, {\n open,\n side: 'bottom',\n align: 'start',\n offset: 4,\n });\n\n useDismiss({\n open,\n onDismiss: () => setOpen(false),\n refs: [wrapRef, popoverRef],\n });\n\n React.useEffect(() => {\n if (value) setView(startOfMonth(value));\n }, [value]);\n\n const { cells } = buildMonthGrid(view, 0);\n\n const isDisabled = (d: Date) =>\n (minDate && d < new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate())) ||\n (maxDate && d > new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()));\n\n return (\n <div ref={wrapRef} className={cx('datepicker', invalid && 'is-invalid', disabled && 'is-disabled', className)}>\n <input\n id={id}\n type=\"text\"\n className=\"datepicker__input\"\n placeholder={ph}\n disabled={disabled}\n value={value ? formatDate(value, fmt) : ''}\n onChange={(e) => {\n const d = parseDate(e.target.value, fmt);\n onChange(d);\n }}\n onFocus={() => setOpen(true)}\n aria-invalid={invalid || undefined}\n />\n <button\n type=\"button\"\n className=\"datepicker__toggle\"\n onClick={() => setOpen((o) => !o)}\n disabled={disabled}\n aria-label={locale['picker.openCalendar']}\n ><CalendarIcon size={16} /></button>\n {open && (\n <Portal>\n <div\n ref={popoverRef}\n className={cx('datepicker__popover', 'is-floating')}\n role=\"dialog\"\n style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n visibility: pos.ready ? 'visible' : 'hidden',\n }}\n >\n <div className=\"datepicker__nav\">\n <button type=\"button\" onClick={() => setView((v) => addMonths(v, -1))} aria-label={locale['calendar.prevMonth']}><ChevronLeft size={16} /></button>\n <span className=\"datepicker__title\">{months[view.getMonth()]} {view.getFullYear()}</span>\n <button type=\"button\" onClick={() => setView((v) => addMonths(v, 1))} aria-label={locale['calendar.nextMonth']}><ChevronRight size={16} /></button>\n </div>\n <div className=\"datepicker__grid\">\n {weekdays.map((w, i) => <span key={i} className=\"datepicker__dow\">{w}</span>)}\n {cells.map((d, i) => {\n if (!d) return <span key={`b${i}`} />;\n const sel = value && isSameDay(d, value);\n const today = isSameDay(d, new Date());\n const off = isDisabled(d);\n return (\n <button\n key={i}\n type=\"button\"\n className={cx('datepicker__day', sel && 'is-selected', today && 'is-today', off && 'is-disabled')}\n disabled={!!off}\n onClick={() => { onChange(d); setOpen(false); }}\n >\n {d.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n </Portal>\n )}\n </div>\n );\n}\n\n// ---------- FileUpload (drop zone) ---------------------------------------\nexport interface FileUploadProps {\n onFiles: (files: File[]) => void;\n accept?: string;\n multiple?: boolean;\n maxSize?: number; // bytes\n disabled?: boolean;\n className?: string;\n hint?: React.ReactNode;\n /** Accessible name for the drop zone (e.g. \"Subir foto de perfil\"). */\n 'aria-label'?: string;\n}\n\nexport function FileUpload({\n onFiles, accept, multiple = false, maxSize, disabled, className, hint,\n 'aria-label': ariaLabel,\n}: FileUploadProps) {\n const [drag, setDrag] = React.useState(false);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const hintId = React.useId();\n const locale = useLocale();\n const handle = (list: FileList | null) => {\n if (!list) return;\n let arr = Array.from(list);\n if (maxSize) arr = arr.filter((f) => f.size <= maxSize);\n if (!multiple) arr = arr.slice(0, 1);\n onFiles(arr);\n };\n return (\n <div\n className={cx('file-upload', drag && 'is-drag', disabled && 'is-disabled', className)}\n onDragOver={(e) => { e.preventDefault(); if (!disabled) setDrag(true); }}\n onDragLeave={() => setDrag(false)}\n onDrop={(e) => { e.preventDefault(); setDrag(false); if (!disabled) handle(e.dataTransfer.files); }}\n onClick={() => !disabled && inputRef.current?.click()}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-label={ariaLabel}\n aria-describedby={hint ? hintId : undefined}\n onKeyDown={(e) => { if ((e.key === 'Enter' || e.key === ' ') && !disabled) inputRef.current?.click(); }}\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n hidden\n onChange={(e) => handle(e.target.files)}\n />\n <div className=\"file-upload__icon\" aria-hidden=\"true\">⤴</div>\n <div className=\"file-upload__title\">{locale['fileUpload.title']}</div>\n {hint && <div id={hintId} className=\"file-upload__hint\">{hint}</div>}\n </div>\n );\n}\n\n// ---------- GridPickerField (shared shell: YearPicker / MonthPicker) ------\ninterface GridCell {\n key: string;\n label: React.ReactNode;\n selected?: boolean;\n /** Dimmed (outside the current decade) — YearPicker only. */\n outside?: boolean;\n disabled?: boolean;\n onSelect: () => void;\n}\n\ninterface GridPickerFieldProps {\n rootClass: string;\n displayValue: string;\n placeholder: string;\n ariaLabel: string;\n navTitle: React.ReactNode;\n prevLabel: string;\n nextLabel: string;\n onPrev: () => void;\n onNext: () => void;\n cells: GridCell[];\n disabled?: boolean;\n invalid?: boolean;\n id?: string;\n className?: string;\n}\n\nfunction GridPickerField({\n rootClass, displayValue, placeholder, ariaLabel, navTitle,\n prevLabel, nextLabel, onPrev, onNext, cells,\n disabled, invalid, id, className,\n}: GridPickerFieldProps) {\n const [open, setOpen] = React.useState(false);\n const wrapRef = React.useRef<HTMLDivElement>(null);\n const popoverRef = React.useRef<HTMLDivElement>(null);\n\n // Same floating primitive as DatePicker (Portal + flip/clamp + dismiss).\n const pos = usePopoverPosition(wrapRef, popoverRef, {\n open,\n side: 'bottom',\n align: 'start',\n offset: 4,\n });\n useDismiss({ open, onDismiss: () => setOpen(false), refs: [wrapRef, popoverRef] });\n\n return (\n <div\n ref={wrapRef}\n className={cx(rootClass, 'gridpicker', invalid && 'is-invalid', disabled && 'is-disabled', className)}\n >\n <input\n id={id}\n type=\"text\"\n readOnly\n className=\"gridpicker__input\"\n placeholder={placeholder}\n disabled={disabled}\n value={displayValue}\n onFocus={() => setOpen(true)}\n onClick={() => setOpen(true)}\n aria-invalid={invalid || undefined}\n />\n <button\n type=\"button\"\n className=\"gridpicker__toggle\"\n onClick={() => setOpen((o) => !o)}\n disabled={disabled}\n aria-label={ariaLabel}\n >\n <CalendarIcon size={16} />\n </button>\n {open && (\n <Portal>\n <div\n ref={popoverRef}\n className={cx('gridpicker__popover', 'is-floating')}\n role=\"dialog\"\n style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n visibility: pos.ready ? 'visible' : 'hidden',\n }}\n >\n <div className=\"gridpicker__nav\">\n <button type=\"button\" onClick={onPrev} aria-label={prevLabel}><ChevronLeft size={16} /></button>\n <span className=\"gridpicker__title\">{navTitle}</span>\n <button type=\"button\" onClick={onNext} aria-label={nextLabel}><ChevronRight size={16} /></button>\n </div>\n <div className=\"gridpicker__grid\">\n {cells.map((c) => (\n <button\n key={c.key}\n type=\"button\"\n className={cx('gridpicker__cell', c.selected && 'is-selected', c.outside && 'is-out')}\n disabled={c.disabled}\n onClick={() => { c.onSelect(); setOpen(false); }}\n >\n {c.label}\n </button>\n ))}\n </div>\n </div>\n </Portal>\n )}\n </div>\n );\n}\n\n// ---------- YearPicker ---------------------------------------------------\nexport interface YearPickerProps {\n value: number | null;\n onChange: (year: number | null) => void;\n minYear?: number;\n maxYear?: number;\n placeholder?: string;\n disabled?: boolean;\n invalid?: boolean;\n id?: string;\n className?: string;\n}\n\nexport function YearPicker({\n value, onChange, minYear, maxYear, placeholder,\n disabled, invalid, id, className,\n}: YearPickerProps) {\n const t = useLocale();\n const base = value ?? new Date().getFullYear();\n const [decade, setDecade] = React.useState(Math.floor(base / 10) * 10);\n\n React.useEffect(() => {\n if (value != null) setDecade(Math.floor(value / 10) * 10);\n }, [value]);\n\n const cells: GridCell[] = Array.from({ length: 12 }, (_, i) => {\n const year = decade - 1 + i;\n return {\n key: String(year),\n label: year,\n selected: value === year,\n outside: year < decade || year > decade + 9,\n disabled: (minYear != null && year < minYear) || (maxYear != null && year > maxYear),\n onSelect: () => onChange(year),\n };\n });\n\n return (\n <GridPickerField\n rootClass=\"yearpicker\"\n displayValue={value != null ? String(value) : ''}\n placeholder={placeholder ?? t['picker.selectYear']}\n ariaLabel={t['picker.openCalendar']}\n navTitle={`${decade}-${decade + 9}`}\n prevLabel={t['picker.prevDecade']}\n nextLabel={t['picker.nextDecade']}\n onPrev={() => setDecade((d) => d - 10)}\n onNext={() => setDecade((d) => d + 10)}\n cells={cells}\n disabled={disabled}\n invalid={invalid}\n id={id}\n className={className}\n />\n );\n}\n\n// ---------- MonthPicker --------------------------------------------------\nexport interface MonthPickerProps {\n value: Date | null;\n onChange: (date: Date | null) => void;\n minDate?: Date;\n maxDate?: Date;\n placeholder?: string;\n disabled?: boolean;\n invalid?: boolean;\n id?: string;\n className?: string;\n}\n\nexport function MonthPicker({\n value, onChange, minDate, maxDate, placeholder,\n disabled, invalid, id, className,\n}: MonthPickerProps) {\n const t = useLocale();\n const months = t['calendar.months'];\n const base = value ?? new Date();\n const [year, setYear] = React.useState(base.getFullYear());\n\n React.useEffect(() => {\n if (value) setYear(value.getFullYear());\n }, [value]);\n\n const monthStart = (y: number, m: number) => new Date(y, m, 1);\n const outOfRange = (m: number) =>\n (minDate != null && monthStart(year, m) < monthStart(minDate.getFullYear(), minDate.getMonth())) ||\n (maxDate != null && monthStart(year, m) > monthStart(maxDate.getFullYear(), maxDate.getMonth()));\n\n const cells: GridCell[] = months.map((name, m) => ({\n key: String(m),\n label: name,\n selected: !!value && value.getFullYear() === year && value.getMonth() === m,\n disabled: outOfRange(m),\n onSelect: () => onChange(new Date(year, m, 1)),\n }));\n\n return (\n <GridPickerField\n rootClass=\"monthpicker\"\n displayValue={value ? `${months[value.getMonth()]} ${value.getFullYear()}` : ''}\n placeholder={placeholder ?? t['picker.selectMonth']}\n ariaLabel={t['picker.openCalendar']}\n navTitle={String(year)}\n prevLabel={t['picker.prevYear']}\n nextLabel={t['picker.nextYear']}\n onPrev={() => setYear((y) => y - 1)}\n onNext={() => setYear((y) => y + 1)}\n cells={cells}\n disabled={disabled}\n invalid={invalid}\n id={id}\n className={className}\n />\n );\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunk6TYPG7MA_js = require('./chunk-6TYPG7MA.js');
|
|
4
|
+
var chunkCBHWPIHM_js = require('./chunk-CBHWPIHM.js');
|
|
5
5
|
var chunkRQOTH7I7_js = require('./chunk-RQOTH7I7.js');
|
|
6
6
|
var chunkPASF6T4H_js = require('./chunk-PASF6T4H.js');
|
|
7
7
|
var React = require('react');
|
|
@@ -28,7 +28,7 @@ function _interopNamespace(e) {
|
|
|
28
28
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
29
29
|
|
|
30
30
|
var NumberInput = React__namespace.forwardRef(function NumberInput2({ value, onChange, min, max, step = 1, invalid, prefix, suffix, className, disabled, ...rest }, ref) {
|
|
31
|
-
const t =
|
|
31
|
+
const t = chunkCBHWPIHM_js.useLocale();
|
|
32
32
|
const set = (next) => {
|
|
33
33
|
if (next == null) return onChange?.(null);
|
|
34
34
|
let v = next;
|
|
@@ -73,13 +73,13 @@ function pageList(current, total, siblings) {
|
|
|
73
73
|
return out;
|
|
74
74
|
}
|
|
75
75
|
function Pagination({ page, pageSize, total, onPageChange, siblings = 1, className }) {
|
|
76
|
-
const t =
|
|
76
|
+
const t = chunkCBHWPIHM_js.useLocale();
|
|
77
77
|
const totalPages = Math.max(1, Math.ceil(total / pageSize));
|
|
78
78
|
const pages = pageList(page, totalPages, siblings);
|
|
79
79
|
const from = total === 0 ? 0 : (page - 1) * pageSize + 1;
|
|
80
80
|
const to = Math.min(total, page * pageSize);
|
|
81
81
|
return /* @__PURE__ */ jsxRuntime.jsxs("nav", { className: chunkPASF6T4H_js.cx("pagination", className), "aria-label": t["pagination.label"], children: [
|
|
82
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "pagination__info", children:
|
|
82
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "pagination__info", children: chunk6TYPG7MA_js.format(t["pagination.range"], { from, to, total }) }),
|
|
83
83
|
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "pagination__btn", onClick: () => onPageChange(Math.max(1, page - 1)), disabled: page <= 1, "aria-label": t["pagination.prev"], children: /* @__PURE__ */ jsxRuntime.jsx(chunkRQOTH7I7_js.ChevronLeft, { size: 14 }) }),
|
|
84
84
|
pages.map(
|
|
85
85
|
(p, i) => p === "..." ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "pagination__ellipsis", children: "\u2026" }, `e${i}`) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -127,5 +127,5 @@ exports.EmptyState = EmptyState;
|
|
|
127
127
|
exports.Kpi = Kpi;
|
|
128
128
|
exports.NumberInput = NumberInput;
|
|
129
129
|
exports.Pagination = Pagination;
|
|
130
|
-
//# sourceMappingURL=chunk-
|
|
131
|
-
//# sourceMappingURL=chunk-
|
|
130
|
+
//# sourceMappingURL=chunk-X7O37QLL.js.map
|
|
131
|
+
//# sourceMappingURL=chunk-X7O37QLL.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Inputs.tsx"],"names":["React","NumberInput","useLocale","jsxs","cx","jsx","format","ChevronLeft","ChevronRight","ChevronUp","ChevronDown"],"mappings":"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","file":"chunk-IMFQ55KO.js","sourcesContent":["import * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronLeft, ChevronRight, ChevronUp, ChevronDown } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\n// ---------- NumberInput --------------------------------------------------\nexport interface NumberInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'value' | 'type' | 'prefix'> {\n value?: number | null;\n onChange?: (v: number | null) => void;\n min?: number;\n max?: number;\n step?: number;\n invalid?: boolean;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n}\n\nexport const NumberInput = React.forwardRef<HTMLInputElement, NumberInputProps>(function NumberInput(\n { value, onChange, min, max, step = 1, invalid, prefix, suffix, className, disabled, ...rest },\n ref\n) {\n const t = useLocale();\n const set = (next: number | null) => {\n if (next == null) return onChange?.(null);\n let v = next;\n if (typeof min === 'number') v = Math.max(min, v);\n if (typeof max === 'number') v = Math.min(max, v);\n onChange?.(v);\n };\n const incr = (mult: number) => set((value ?? 0) + step * mult);\n return (\n <div className={cx('number-input', invalid && 'is-invalid', disabled && 'is-disabled', className)}>\n <button type=\"button\" className=\"number-input__btn\" tabIndex={-1} aria-label={t['numberInput.decrement']} onClick={() => incr(-1)} disabled={disabled}>−</button>\n {prefix && <span className=\"number-input__affix\">{prefix}</span>}\n <input\n ref={ref}\n type=\"number\"\n className=\"number-input__field\"\n value={value ?? ''}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n onChange={(e) => set(e.target.value === '' ? null : Number(e.target.value))}\n aria-invalid={invalid || undefined}\n {...rest}\n />\n {suffix && <span className=\"number-input__affix\">{suffix}</span>}\n <button type=\"button\" className=\"number-input__btn\" tabIndex={-1} aria-label={t['numberInput.increment']} onClick={() => incr(1)} disabled={disabled}>+</button>\n </div>\n );\n});\n\n// ---------- Pagination ---------------------------------------------------\nexport interface PaginationProps {\n page: number; // 1-indexed\n pageSize: number;\n total: number;\n onPageChange: (page: number) => void;\n siblings?: number;\n className?: string;\n}\n\nfunction pageList(current: number, total: number, siblings: number): (number | '...')[] {\n if (total <= 1) return [1];\n const range = (s: number, e: number) => Array.from({ length: e - s + 1 }, (_, i) => s + i);\n const start = Math.max(2, current - siblings);\n const end = Math.min(total - 1, current + siblings);\n const out: (number | '...')[] = [1];\n if (start > 2) out.push('...');\n out.push(...range(start, end));\n if (end < total - 1) out.push('...');\n if (total > 1) out.push(total);\n return out;\n}\n\nexport function Pagination({ page, pageSize, total, onPageChange, siblings = 1, className }: PaginationProps) {\n const t = useLocale();\n const totalPages = Math.max(1, Math.ceil(total / pageSize));\n const pages = pageList(page, totalPages, siblings);\n const from = total === 0 ? 0 : (page - 1) * pageSize + 1;\n const to = Math.min(total, page * pageSize);\n return (\n <nav className={cx('pagination', className)} aria-label={t['pagination.label']}>\n <span className=\"pagination__info\">{format(t['pagination.range'], { from, to, total })}</span>\n <button type=\"button\" className=\"pagination__btn\" onClick={() => onPageChange(Math.max(1, page - 1))} disabled={page <= 1} aria-label={t['pagination.prev']}><ChevronLeft size={14} /></button>\n {pages.map((p, i) =>\n p === '...' ? (\n <span key={`e${i}`} className=\"pagination__ellipsis\">…</span>\n ) : (\n <button\n key={p}\n type=\"button\"\n className={cx('pagination__btn', p === page && 'is-active')}\n aria-current={p === page ? 'page' : undefined}\n onClick={() => onPageChange(p)}\n >\n {p}\n </button>\n )\n )}\n <button type=\"button\" className=\"pagination__btn\" onClick={() => onPageChange(Math.min(totalPages, page + 1))} disabled={page >= totalPages} aria-label={t['pagination.next']}><ChevronRight size={14} /></button>\n </nav>\n );\n}\n\n// ---------- EmptyState ---------------------------------------------------\nexport interface EmptyStateProps {\n icon?: React.ReactNode;\n title: React.ReactNode;\n description?: React.ReactNode;\n action?: React.ReactNode;\n className?: string;\n}\n\nexport function EmptyState({ icon, title, description, action, className }: EmptyStateProps) {\n return (\n <div className={cx('empty', className)} role=\"status\">\n {icon && <div className=\"empty__icon\" aria-hidden=\"true\">{icon}</div>}\n <div className=\"empty__title\">{title}</div>\n {description && <div className=\"empty__desc\">{description}</div>}\n {action}\n </div>\n );\n}\n\n// ---------- KPI / Stat card ----------------------------------------------\nexport interface KpiProps {\n label: React.ReactNode;\n value: React.ReactNode;\n delta?: { value: string; trend: 'up' | 'down' | 'flat' };\n hint?: React.ReactNode;\n icon?: React.ReactNode;\n className?: string;\n}\n\nexport function Kpi({ label, value, delta, hint, icon, className }: KpiProps) {\n return (\n <div className={cx('kpi', className)}>\n <div className=\"kpi__head\">\n <span className=\"kpi__label\">{label}</span>\n {icon && <span className=\"kpi__icon\" aria-hidden=\"true\">{icon}</span>}\n </div>\n <div className=\"kpi__value\">{value}</div>\n <div className=\"kpi__foot\">\n {delta && (\n <span className={cx('kpi__delta', `kpi__delta--${delta.trend}`)}>\n {delta.trend === 'up' ? <ChevronUp size={12} /> : delta.trend === 'down' ? <ChevronDown size={12} /> : '–'} {delta.value}\n </span>\n )}\n {hint && <span className=\"kpi__hint\">{hint}</span>}\n </div>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Inputs.tsx"],"names":["React","NumberInput","useLocale","jsxs","cx","jsx","format","ChevronLeft","ChevronRight","ChevronUp","ChevronDown"],"mappings":"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","file":"chunk-X7O37QLL.js","sourcesContent":["import * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronLeft, ChevronRight, ChevronUp, ChevronDown } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\n// ---------- NumberInput --------------------------------------------------\nexport interface NumberInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'value' | 'type' | 'prefix'> {\n value?: number | null;\n onChange?: (v: number | null) => void;\n min?: number;\n max?: number;\n step?: number;\n invalid?: boolean;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n}\n\nexport const NumberInput = React.forwardRef<HTMLInputElement, NumberInputProps>(function NumberInput(\n { value, onChange, min, max, step = 1, invalid, prefix, suffix, className, disabled, ...rest },\n ref\n) {\n const t = useLocale();\n const set = (next: number | null) => {\n if (next == null) return onChange?.(null);\n let v = next;\n if (typeof min === 'number') v = Math.max(min, v);\n if (typeof max === 'number') v = Math.min(max, v);\n onChange?.(v);\n };\n const incr = (mult: number) => set((value ?? 0) + step * mult);\n return (\n <div className={cx('number-input', invalid && 'is-invalid', disabled && 'is-disabled', className)}>\n <button type=\"button\" className=\"number-input__btn\" tabIndex={-1} aria-label={t['numberInput.decrement']} onClick={() => incr(-1)} disabled={disabled}>−</button>\n {prefix && <span className=\"number-input__affix\">{prefix}</span>}\n <input\n ref={ref}\n type=\"number\"\n className=\"number-input__field\"\n value={value ?? ''}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n onChange={(e) => set(e.target.value === '' ? null : Number(e.target.value))}\n aria-invalid={invalid || undefined}\n {...rest}\n />\n {suffix && <span className=\"number-input__affix\">{suffix}</span>}\n <button type=\"button\" className=\"number-input__btn\" tabIndex={-1} aria-label={t['numberInput.increment']} onClick={() => incr(1)} disabled={disabled}>+</button>\n </div>\n );\n});\n\n// ---------- Pagination ---------------------------------------------------\nexport interface PaginationProps {\n page: number; // 1-indexed\n pageSize: number;\n total: number;\n onPageChange: (page: number) => void;\n siblings?: number;\n className?: string;\n}\n\nfunction pageList(current: number, total: number, siblings: number): (number | '...')[] {\n if (total <= 1) return [1];\n const range = (s: number, e: number) => Array.from({ length: e - s + 1 }, (_, i) => s + i);\n const start = Math.max(2, current - siblings);\n const end = Math.min(total - 1, current + siblings);\n const out: (number | '...')[] = [1];\n if (start > 2) out.push('...');\n out.push(...range(start, end));\n if (end < total - 1) out.push('...');\n if (total > 1) out.push(total);\n return out;\n}\n\nexport function Pagination({ page, pageSize, total, onPageChange, siblings = 1, className }: PaginationProps) {\n const t = useLocale();\n const totalPages = Math.max(1, Math.ceil(total / pageSize));\n const pages = pageList(page, totalPages, siblings);\n const from = total === 0 ? 0 : (page - 1) * pageSize + 1;\n const to = Math.min(total, page * pageSize);\n return (\n <nav className={cx('pagination', className)} aria-label={t['pagination.label']}>\n <span className=\"pagination__info\">{format(t['pagination.range'], { from, to, total })}</span>\n <button type=\"button\" className=\"pagination__btn\" onClick={() => onPageChange(Math.max(1, page - 1))} disabled={page <= 1} aria-label={t['pagination.prev']}><ChevronLeft size={14} /></button>\n {pages.map((p, i) =>\n p === '...' ? (\n <span key={`e${i}`} className=\"pagination__ellipsis\">…</span>\n ) : (\n <button\n key={p}\n type=\"button\"\n className={cx('pagination__btn', p === page && 'is-active')}\n aria-current={p === page ? 'page' : undefined}\n onClick={() => onPageChange(p)}\n >\n {p}\n </button>\n )\n )}\n <button type=\"button\" className=\"pagination__btn\" onClick={() => onPageChange(Math.min(totalPages, page + 1))} disabled={page >= totalPages} aria-label={t['pagination.next']}><ChevronRight size={14} /></button>\n </nav>\n );\n}\n\n// ---------- EmptyState ---------------------------------------------------\nexport interface EmptyStateProps {\n icon?: React.ReactNode;\n title: React.ReactNode;\n description?: React.ReactNode;\n action?: React.ReactNode;\n className?: string;\n}\n\nexport function EmptyState({ icon, title, description, action, className }: EmptyStateProps) {\n return (\n <div className={cx('empty', className)} role=\"status\">\n {icon && <div className=\"empty__icon\" aria-hidden=\"true\">{icon}</div>}\n <div className=\"empty__title\">{title}</div>\n {description && <div className=\"empty__desc\">{description}</div>}\n {action}\n </div>\n );\n}\n\n// ---------- KPI / Stat card ----------------------------------------------\nexport interface KpiProps {\n label: React.ReactNode;\n value: React.ReactNode;\n delta?: { value: string; trend: 'up' | 'down' | 'flat' };\n hint?: React.ReactNode;\n icon?: React.ReactNode;\n className?: string;\n}\n\nexport function Kpi({ label, value, delta, hint, icon, className }: KpiProps) {\n return (\n <div className={cx('kpi', className)}>\n <div className=\"kpi__head\">\n <span className=\"kpi__label\">{label}</span>\n {icon && <span className=\"kpi__icon\" aria-hidden=\"true\">{icon}</span>}\n </div>\n <div className=\"kpi__value\">{value}</div>\n <div className=\"kpi__foot\">\n {delta && (\n <span className={cx('kpi__delta', `kpi__delta--${delta.trend}`)}>\n {delta.trend === 'up' ? <ChevronUp size={12} /> : delta.trend === 'down' ? <ChevronDown size={12} /> : '–'} {delta.value}\n </span>\n )}\n {hint && <span className=\"kpi__hint\">{hint}</span>}\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { format } from './chunk-
|
|
2
|
-
import { useLocale } from './chunk-
|
|
1
|
+
import { format } from './chunk-IUL73666.mjs';
|
|
2
|
+
import { useLocale } from './chunk-Q4BKGBTV.mjs';
|
|
3
3
|
import { ChevronUp, ChevronDown, X } from './chunk-CIBJKJV3.mjs';
|
|
4
4
|
import { cx } from './chunk-IEPCH3JB.mjs';
|
|
5
5
|
import * as React from 'react';
|
|
@@ -78,5 +78,5 @@ function SortDropdown({
|
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
export { BulkActionBar, FilterPanel, FilterSection, SortDropdown };
|
|
81
|
-
//# sourceMappingURL=chunk-
|
|
82
|
-
//# sourceMappingURL=chunk-
|
|
81
|
+
//# sourceMappingURL=chunk-XYKOXQUS.mjs.map
|
|
82
|
+
//# sourceMappingURL=chunk-XYKOXQUS.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Filters.tsx"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/Filters.tsx"],"names":[],"mappings":"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","file":"chunk-XYKOXQUS.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronDown, ChevronUp, X } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\n// ---------- FilterPanel -------------------------------------------------\nexport interface FilterPanelProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n title?: React.ReactNode;\n onClearAll?: () => void;\n activeCount?: number;\n}\n\nexport function FilterPanel({ title, onClearAll, activeCount, className, children, ...rest }: FilterPanelProps) {\n const t = useLocale();\n const heading = title ?? t['filters.panel'];\n return (\n <aside className={cx('filter-panel', className)} aria-label={t['filters.panel']} {...rest}>\n <div className=\"filter-panel__head\">\n <span className=\"filter-panel__title\">\n {heading}\n {typeof activeCount === 'number' && activeCount > 0 && (\n <span className=\"filter-panel__count\">{activeCount}</span>\n )}\n </span>\n {onClearAll && activeCount !== undefined && activeCount > 0 && (\n <button type=\"button\" className=\"filter-panel__clear\" onClick={onClearAll}>\n {t['filters.clear']}\n </button>\n )}\n </div>\n <div className=\"filter-panel__body\">{children}</div>\n </aside>\n );\n}\n\nexport interface FilterSectionProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n title: React.ReactNode;\n defaultOpen?: boolean;\n}\n\nexport function FilterSection({ title, defaultOpen = true, children, className, ...rest }: FilterSectionProps) {\n const [open, setOpen] = React.useState(defaultOpen);\n return (\n <div className={cx('filter-section', className)} {...rest}>\n <button\n type=\"button\"\n className=\"filter-section__head\"\n aria-expanded={open}\n onClick={() => setOpen((o) => !o)}\n >\n <span>{title}</span>\n {open ? <ChevronUp size={14} /> : <ChevronDown size={14} />}\n </button>\n {open && <div className=\"filter-section__body\">{children}</div>}\n </div>\n );\n}\n\n// ---------- BulkActionBar ----------------------------------------------\nexport interface BulkActionBarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Cantidad de items seleccionados. La barra se oculta si es 0. */\n selectedCount: number;\n /** Texto opcional, default: \"{N} seleccionado(s)\". */\n label?: React.ReactNode;\n onClear?: () => void;\n}\n\nexport function BulkActionBar({ selectedCount, label, onClear, className, children, ...rest }: BulkActionBarProps) {\n const t = useLocale();\n if (selectedCount <= 0) return null;\n const countText = format(\n selectedCount === 1 ? t['filters.selectedOne'] : t['filters.selectedMany'],\n { n: selectedCount }\n );\n return (\n <div className={cx('bulk-bar', className)} role=\"region\" aria-label={t['filters.bulkActions']} {...rest}>\n <div className=\"bulk-bar__count\">\n {label ?? countText}\n {onClear && (\n <button type=\"button\" className=\"bulk-bar__clear\" aria-label={t['filters.deselectAll']} onClick={onClear}>\n <X size={14} />\n </button>\n )}\n </div>\n <div className=\"bulk-bar__actions\">{children}</div>\n </div>\n );\n}\n\n// ---------- SortDropdown -----------------------------------------------\nexport interface SortOption<T = string> {\n value: T;\n label: React.ReactNode;\n}\n\nexport interface SortDropdownProps<T = string> {\n value: T;\n options: SortOption<T>[];\n onChange: (value: T) => void;\n label?: React.ReactNode;\n className?: string;\n id?: string;\n}\n\nexport function SortDropdown<T extends string = string>({\n value, options, onChange, label, className, id,\n}: SortDropdownProps<T>) {\n const t = useLocale();\n return (\n <label className={cx('sort-dropdown', className)}>\n <span className=\"sort-dropdown__label\">{label ?? t['filters.sortBy']}</span>\n <select\n id={id}\n className=\"sort-dropdown__select select\"\n value={value}\n onChange={(e) => onChange(e.target.value as T)}\n >\n {options.map((o) => (\n <option key={String(o.value)} value={String(o.value)}>\n {typeof o.label === 'string' ? o.label : String(o.value)}\n </option>\n ))}\n </select>\n </label>\n );\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useDismiss } from './chunk-6P2TKRTL.mjs';
|
|
2
|
-
import { usePopoverPosition } from './chunk-
|
|
3
|
-
import { Portal } from './chunk-
|
|
2
|
+
import { usePopoverPosition } from './chunk-GD7MI7OT.mjs';
|
|
3
|
+
import { Portal } from './chunk-FKBQYQQD.mjs';
|
|
4
4
|
import { ChevronDown } from './chunk-CIBJKJV3.mjs';
|
|
5
5
|
import { cx } from './chunk-IEPCH3JB.mjs';
|
|
6
6
|
import * as React from 'react';
|
|
@@ -127,7 +127,7 @@ function NavigationMenu({ items, className, ariaLabel = "Navegaci\xF3n principal
|
|
|
127
127
|
"aria-label": typeof item.label === "string" ? item.label : void 0,
|
|
128
128
|
onKeyDown: onPanelKeyDown,
|
|
129
129
|
style: {
|
|
130
|
-
position: "
|
|
130
|
+
position: "fixed",
|
|
131
131
|
top: pos.top,
|
|
132
132
|
left: pos.left,
|
|
133
133
|
visibility: pos.ready ? "visible" : "hidden"
|
|
@@ -172,5 +172,5 @@ function NavigationMenu({ items, className, ariaLabel = "Navegaci\xF3n principal
|
|
|
172
172
|
}
|
|
173
173
|
|
|
174
174
|
export { NavigationMenu };
|
|
175
|
-
//# sourceMappingURL=chunk-
|
|
176
|
-
//# sourceMappingURL=chunk-
|
|
175
|
+
//# sourceMappingURL=chunk-Y2B4XXTO.mjs.map
|
|
176
|
+
//# sourceMappingURL=chunk-Y2B4XXTO.mjs.map
|