@misael703/ui 1.60.0 → 1.62.0
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/{chunk-UQJU332W.mjs → chunk-2UW2K5MV.mjs} +3 -3
- package/dist/{chunk-UQJU332W.mjs.map → chunk-2UW2K5MV.mjs.map} +1 -1
- package/dist/{chunk-X4EESFGG.js → chunk-324O7B3R.js} +3 -3
- package/dist/{chunk-X4EESFGG.js.map → chunk-324O7B3R.js.map} +1 -1
- package/dist/{chunk-TGSGUOSP.mjs → chunk-4Z5GFOIU.mjs} +3 -3
- package/dist/{chunk-TGSGUOSP.mjs.map → chunk-4Z5GFOIU.mjs.map} +1 -1
- package/dist/{chunk-GL5C55DU.mjs → chunk-5G3DVB5B.mjs} +3 -3
- package/dist/{chunk-GL5C55DU.mjs.map → chunk-5G3DVB5B.mjs.map} +1 -1
- package/dist/{chunk-QRXFKIQF.mjs → chunk-B6PQAH5C.mjs} +101 -20
- package/dist/chunk-B6PQAH5C.mjs.map +1 -0
- package/dist/{chunk-NHSPQDB2.mjs → chunk-DLPTIVZB.mjs} +3 -3
- package/dist/{chunk-NHSPQDB2.mjs.map → chunk-DLPTIVZB.mjs.map} +1 -1
- package/dist/{chunk-V7MNWM6L.js → chunk-E6BTT4I7.js} +4 -4
- package/dist/{chunk-V7MNWM6L.js.map → chunk-E6BTT4I7.js.map} +1 -1
- package/dist/{chunk-ADNQFZ33.js → chunk-F2MD6DAE.js} +117 -35
- package/dist/chunk-F2MD6DAE.js.map +1 -0
- package/dist/{chunk-YKFZCOOB.mjs → chunk-GNI5MH36.mjs} +3 -3
- package/dist/{chunk-YKFZCOOB.mjs.map → chunk-GNI5MH36.mjs.map} +1 -1
- package/dist/{chunk-PUZNB62R.mjs → chunk-HGS3ATU2.mjs} +6 -6
- package/dist/chunk-HGS3ATU2.mjs.map +1 -0
- package/dist/{chunk-KDNO3TOM.js → chunk-HYB7EXRB.js} +9 -9
- package/dist/{chunk-KDNO3TOM.js.map → chunk-HYB7EXRB.js.map} +1 -1
- package/dist/{chunk-2ET7IM4U.js → chunk-IKMKQUUR.js} +42 -18
- package/dist/chunk-IKMKQUUR.js.map +1 -0
- package/dist/{chunk-O4TKMQEY.js → chunk-M7QZCHMM.js} +3 -3
- package/dist/{chunk-O4TKMQEY.js.map → chunk-M7QZCHMM.js.map} +1 -1
- package/dist/{chunk-MVJITG75.js → chunk-MUXOT5KS.js} +16 -2
- package/dist/chunk-MUXOT5KS.js.map +1 -0
- package/dist/{chunk-JNISZPSL.js → chunk-NUTHJQYH.js} +4 -4
- package/dist/{chunk-JNISZPSL.js.map → chunk-NUTHJQYH.js.map} +1 -1
- package/dist/{chunk-4QHE5H36.mjs → chunk-ODE2ROR2.mjs} +16 -3
- package/dist/chunk-ODE2ROR2.mjs.map +1 -0
- package/dist/{chunk-EJY4QWHT.mjs → chunk-ORQPCZNF.mjs} +42 -18
- package/dist/chunk-ORQPCZNF.mjs.map +1 -0
- package/dist/{chunk-V6DNE6RE.js → chunk-VFZ7VMU2.js} +16 -16
- package/dist/chunk-VFZ7VMU2.js.map +1 -0
- package/dist/components/AdvancedPickers.d.mts +29 -2
- package/dist/components/AdvancedPickers.d.ts +29 -2
- package/dist/components/AdvancedPickers.js +10 -6
- package/dist/components/AdvancedPickers.mjs +2 -2
- package/dist/components/AppShell.js +4 -4
- package/dist/components/AppShell.mjs +2 -2
- package/dist/components/Charts.d.mts +18 -4
- package/dist/components/Charts.d.ts +18 -4
- package/dist/components/Charts.js +6 -6
- package/dist/components/Charts.mjs +1 -1
- package/dist/components/Commerce.js +14 -14
- package/dist/components/Commerce.mjs +3 -3
- package/dist/components/Display3.js +8 -8
- package/dist/components/Display3.mjs +2 -2
- package/dist/components/Editing.js +9 -9
- package/dist/components/Editing.mjs +3 -3
- package/dist/components/Overlay.js +4 -4
- package/dist/components/Overlay.mjs +2 -2
- package/dist/components/Pickers.js +7 -7
- package/dist/components/Pickers.mjs +2 -2
- package/dist/hooks/index.js +5 -5
- package/dist/hooks/index.mjs +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +73 -65
- package/dist/index.mjs +11 -11
- package/dist/styles.css +1 -1
- package/dist/utils/dateFormat.d.mts +17 -1
- package/dist/utils/dateFormat.d.ts +17 -1
- package/dist/utils/dateFormat.js +18 -14
- package/dist/utils/dateFormat.mjs +1 -1
- package/package.json +1 -1
- package/dist/chunk-2ET7IM4U.js.map +0 -1
- package/dist/chunk-4QHE5H36.mjs.map +0 -1
- package/dist/chunk-ADNQFZ33.js.map +0 -1
- package/dist/chunk-EJY4QWHT.mjs.map +0 -1
- package/dist/chunk-MVJITG75.js.map +0 -1
- package/dist/chunk-PUZNB62R.mjs.map +0 -1
- package/dist/chunk-QRXFKIQF.mjs.map +0 -1
- package/dist/chunk-V6DNE6RE.js.map +0 -1
|
@@ -50,6 +50,22 @@ declare function buildMonthGrid(view: Date, offset?: number): {
|
|
|
50
50
|
month: Date;
|
|
51
51
|
cells: (Date | null)[];
|
|
52
52
|
};
|
|
53
|
+
interface MonthGridCell {
|
|
54
|
+
date: Date;
|
|
55
|
+
/** True for the leading/trailing days that belong to the adjacent month. */
|
|
56
|
+
outside: boolean;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Fixed 6-row (42-cell) month grid: leading days from the previous month and
|
|
60
|
+
* trailing days from the next month fill every cell, each tagged `outside`. The
|
|
61
|
+
* row count is constant, so the picker's height never jumps between months with
|
|
62
|
+
* 4, 5 or 6 weeks. Monday-first. Used by the DatePicker/DateRangePicker; the
|
|
63
|
+
* legacy `buildMonthGrid` (ragged, `null`-padded) stays for back-compat.
|
|
64
|
+
*/
|
|
65
|
+
declare function buildMonthGrid6(view: Date, offset?: number): {
|
|
66
|
+
month: Date;
|
|
67
|
+
cells: MonthGridCell[];
|
|
68
|
+
};
|
|
53
69
|
/** True if `iso` is the same calendar day as `now` (default today, local). */
|
|
54
70
|
declare function isToday(iso: string | Date, now?: Date): boolean;
|
|
55
71
|
/** True if `iso` is the calendar day after `now` (default today, local). */
|
|
@@ -74,4 +90,4 @@ interface RelativeDayOptions {
|
|
|
74
90
|
*/
|
|
75
91
|
declare function formatRelativeDay(iso: string | Date, opts?: RelativeDayOptions): string;
|
|
76
92
|
|
|
77
|
-
export { type DateFormat, type RelativeDayOptions, type ResolvedDateFormat, addMonths, buildMonthGrid, dateFormatPlaceholder, detectFormatFromLocale, formatDate, formatRelativeDay, isSameDay, isToday, isTomorrow, isYesterday, parseDate, resolveDateFormat, startOfMonth };
|
|
93
|
+
export { type DateFormat, type MonthGridCell, type RelativeDayOptions, type ResolvedDateFormat, addMonths, buildMonthGrid, buildMonthGrid6, dateFormatPlaceholder, detectFormatFromLocale, formatDate, formatRelativeDay, isSameDay, isToday, isTomorrow, isYesterday, parseDate, resolveDateFormat, startOfMonth };
|
|
@@ -50,6 +50,22 @@ declare function buildMonthGrid(view: Date, offset?: number): {
|
|
|
50
50
|
month: Date;
|
|
51
51
|
cells: (Date | null)[];
|
|
52
52
|
};
|
|
53
|
+
interface MonthGridCell {
|
|
54
|
+
date: Date;
|
|
55
|
+
/** True for the leading/trailing days that belong to the adjacent month. */
|
|
56
|
+
outside: boolean;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Fixed 6-row (42-cell) month grid: leading days from the previous month and
|
|
60
|
+
* trailing days from the next month fill every cell, each tagged `outside`. The
|
|
61
|
+
* row count is constant, so the picker's height never jumps between months with
|
|
62
|
+
* 4, 5 or 6 weeks. Monday-first. Used by the DatePicker/DateRangePicker; the
|
|
63
|
+
* legacy `buildMonthGrid` (ragged, `null`-padded) stays for back-compat.
|
|
64
|
+
*/
|
|
65
|
+
declare function buildMonthGrid6(view: Date, offset?: number): {
|
|
66
|
+
month: Date;
|
|
67
|
+
cells: MonthGridCell[];
|
|
68
|
+
};
|
|
53
69
|
/** True if `iso` is the same calendar day as `now` (default today, local). */
|
|
54
70
|
declare function isToday(iso: string | Date, now?: Date): boolean;
|
|
55
71
|
/** True if `iso` is the calendar day after `now` (default today, local). */
|
|
@@ -74,4 +90,4 @@ interface RelativeDayOptions {
|
|
|
74
90
|
*/
|
|
75
91
|
declare function formatRelativeDay(iso: string | Date, opts?: RelativeDayOptions): string;
|
|
76
92
|
|
|
77
|
-
export { type DateFormat, type RelativeDayOptions, type ResolvedDateFormat, addMonths, buildMonthGrid, dateFormatPlaceholder, detectFormatFromLocale, formatDate, formatRelativeDay, isSameDay, isToday, isTomorrow, isYesterday, parseDate, resolveDateFormat, startOfMonth };
|
|
93
|
+
export { type DateFormat, type MonthGridCell, type RelativeDayOptions, type ResolvedDateFormat, addMonths, buildMonthGrid, buildMonthGrid6, dateFormatPlaceholder, detectFormatFromLocale, formatDate, formatRelativeDay, isSameDay, isToday, isTomorrow, isYesterday, parseDate, resolveDateFormat, startOfMonth };
|
package/dist/utils/dateFormat.js
CHANGED
|
@@ -1,62 +1,66 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkMUXOT5KS_js = require('../chunk-MUXOT5KS.js');
|
|
5
5
|
require('../chunk-3PXYCXDW.js');
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
Object.defineProperty(exports, "addMonths", {
|
|
10
10
|
enumerable: true,
|
|
11
|
-
get: function () { return
|
|
11
|
+
get: function () { return chunkMUXOT5KS_js.addMonths; }
|
|
12
12
|
});
|
|
13
13
|
Object.defineProperty(exports, "buildMonthGrid", {
|
|
14
14
|
enumerable: true,
|
|
15
|
-
get: function () { return
|
|
15
|
+
get: function () { return chunkMUXOT5KS_js.buildMonthGrid; }
|
|
16
|
+
});
|
|
17
|
+
Object.defineProperty(exports, "buildMonthGrid6", {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
get: function () { return chunkMUXOT5KS_js.buildMonthGrid6; }
|
|
16
20
|
});
|
|
17
21
|
Object.defineProperty(exports, "dateFormatPlaceholder", {
|
|
18
22
|
enumerable: true,
|
|
19
|
-
get: function () { return
|
|
23
|
+
get: function () { return chunkMUXOT5KS_js.dateFormatPlaceholder; }
|
|
20
24
|
});
|
|
21
25
|
Object.defineProperty(exports, "detectFormatFromLocale", {
|
|
22
26
|
enumerable: true,
|
|
23
|
-
get: function () { return
|
|
27
|
+
get: function () { return chunkMUXOT5KS_js.detectFormatFromLocale; }
|
|
24
28
|
});
|
|
25
29
|
Object.defineProperty(exports, "formatDate", {
|
|
26
30
|
enumerable: true,
|
|
27
|
-
get: function () { return
|
|
31
|
+
get: function () { return chunkMUXOT5KS_js.formatDate; }
|
|
28
32
|
});
|
|
29
33
|
Object.defineProperty(exports, "formatRelativeDay", {
|
|
30
34
|
enumerable: true,
|
|
31
|
-
get: function () { return
|
|
35
|
+
get: function () { return chunkMUXOT5KS_js.formatRelativeDay; }
|
|
32
36
|
});
|
|
33
37
|
Object.defineProperty(exports, "isSameDay", {
|
|
34
38
|
enumerable: true,
|
|
35
|
-
get: function () { return
|
|
39
|
+
get: function () { return chunkMUXOT5KS_js.isSameDay; }
|
|
36
40
|
});
|
|
37
41
|
Object.defineProperty(exports, "isToday", {
|
|
38
42
|
enumerable: true,
|
|
39
|
-
get: function () { return
|
|
43
|
+
get: function () { return chunkMUXOT5KS_js.isToday; }
|
|
40
44
|
});
|
|
41
45
|
Object.defineProperty(exports, "isTomorrow", {
|
|
42
46
|
enumerable: true,
|
|
43
|
-
get: function () { return
|
|
47
|
+
get: function () { return chunkMUXOT5KS_js.isTomorrow; }
|
|
44
48
|
});
|
|
45
49
|
Object.defineProperty(exports, "isYesterday", {
|
|
46
50
|
enumerable: true,
|
|
47
|
-
get: function () { return
|
|
51
|
+
get: function () { return chunkMUXOT5KS_js.isYesterday; }
|
|
48
52
|
});
|
|
49
53
|
Object.defineProperty(exports, "parseDate", {
|
|
50
54
|
enumerable: true,
|
|
51
|
-
get: function () { return
|
|
55
|
+
get: function () { return chunkMUXOT5KS_js.parseDate; }
|
|
52
56
|
});
|
|
53
57
|
Object.defineProperty(exports, "resolveDateFormat", {
|
|
54
58
|
enumerable: true,
|
|
55
|
-
get: function () { return
|
|
59
|
+
get: function () { return chunkMUXOT5KS_js.resolveDateFormat; }
|
|
56
60
|
});
|
|
57
61
|
Object.defineProperty(exports, "startOfMonth", {
|
|
58
62
|
enumerable: true,
|
|
59
|
-
get: function () { return
|
|
63
|
+
get: function () { return chunkMUXOT5KS_js.startOfMonth; }
|
|
60
64
|
});
|
|
61
65
|
//# sourceMappingURL=dateFormat.js.map
|
|
62
66
|
//# sourceMappingURL=dateFormat.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
export { addMonths, buildMonthGrid, dateFormatPlaceholder, detectFormatFromLocale, formatDate, formatRelativeDay, isSameDay, isToday, isTomorrow, isYesterday, parseDate, resolveDateFormat, startOfMonth } from '../chunk-
|
|
2
|
+
export { addMonths, buildMonthGrid, buildMonthGrid6, dateFormatPlaceholder, detectFormatFromLocale, formatDate, formatRelativeDay, isSameDay, isToday, isTomorrow, isYesterday, parseDate, resolveDateFormat, startOfMonth } from '../chunk-ODE2ROR2.mjs';
|
|
3
3
|
import '../chunk-5GEWIK4T.mjs';
|
|
4
4
|
//# sourceMappingURL=dateFormat.mjs.map
|
|
5
5
|
//# sourceMappingURL=dateFormat.mjs.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@misael703/ui",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.62.0",
|
|
4
4
|
"description": "Generic React + TypeScript UI kit, optimized for Next.js. Tokens, accessible components, runtime-configurable theming via presets.",
|
|
5
5
|
"author": "Misael Ocas <misael.ocas@gmail.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Charts.tsx"],"names":["jsx","cx","jsxs","Fragment"],"mappings":";;;;;AA2CA,IAAM,OAAA,GAAU;AAAA,EACd,sBAAA;AAAA,EACA,wBAAA;AAAA,EACA,0BAAA;AAAA,EACA,sBAAA;AAAA,EACA,sBAAA;AAAA,EACA,qBAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA;AAqCA,IAAM,kBAAA,GAAmC,kBAAA;AAKzC,SAAS,iBAAA,CACP,IAAA,EACA,MAAA,GAAS,IAAA,EACgB;AACzB,EAAA,MAAM,KAAA,GAAiC,EAAE,QAAA,EAAU,IAAA,CAAK,iBAAiB,kBAAA,EAAmB;AAC5F,EAAA,IAAI,IAAA,CAAK,cAAA,EAAgB,KAAA,CAAM,aAAA,GAAgB,IAAA,CAAK,cAAA;AACpD,EAAA,IAAI,MAAA,IAAU,KAAK,UAAA,EAAY;AAC7B,IAAA,KAAA,CAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,IAAA,KAAA,CAAM,UAAA,GAAa,KAAA;AACnB,IAAA,KAAA,CAAM,MAAA,GAAS,EAAA;AAAA,EACjB;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,eAAe,cAAA,EAAiE;AACvF,EAAA,OAAO,cAAA,GAAiB,EAAE,aAAA,EAAe,CAAC,CAAA,KAAc,cAAA,CAAe,MAAA,CAAO,CAAC,CAAC,CAAA,EAAE,GAAI,EAAC;AACzF;AAEA,SAAS,kBAAkB,cAAA,EAAiE;AAC1F,EAAA,OAAO,cAAA,GAAiB,EAAE,SAAA,EAAW,CAAC,CAAA,KAAe,cAAA,CAAe,MAAA,CAAO,CAAC,CAAC,CAAA,EAAE,GAAI,EAAC;AACtF;AAUO,SAAS,SAAA,CAAmB;AAAA,EACjC,QAAA,EAAU,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,WAAA;AAAA,EAAa,MAAA;AAAA,EAChC,MAAA,GAAS,GAAA;AAAA,EAAK,SAAA;AAAA,EAAW,SAAA;AAAA,EACzB,QAAA,GAAW,IAAA;AAAA,EAAM,UAAA,GAAa,IAAA;AAAA,EAAM,MAAA,GAAS,IAAA;AAAA,EAAM,KAAA;AAAA,EACnD,cAAA;AAAA,EAAgB,aAAA;AAAA,EAAe,UAAA;AAAA,EAAY;AAC7C,CAAA,EAAsB;AACpB,EAAA,MAAM,QAAA,GAAW,KAAA,KAAU,MAAA,GAAS,UAAA,GAAa,QAAA,CAAA;AACjD,EAAA,uBACEA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWC,mBAAA,CAAG,SAAS,SAAS,CAAA,EAAG,IAAA,EAAK,KAAA,EAAM,YAAA,EAAY,SAAA,EAC7D,QAAA,kBAAAD,cAAA,CAAC,CAAA,CAAE,qBAAF,EAAsB,KAAA,EAAM,MAAA,EAAO,MAAA,EAClC,QAAA,kBAAAE,eAAA,CAAC,CAAA,CAAE,SAAA,EAAF,EAAY,MAAY,MAAA,EAAQ,EAAE,GAAA,EAAK,CAAA,EAAG,OAAO,EAAA,EAAI,MAAA,EAAQ,CAAA,EAAG,IAAA,EAAM,GAAE,EACtE,QAAA,EAAA;AAAA,IAAA,QAAA,oBAAYF,cAAA,CAAC,EAAE,aAAA,EAAF,EAAgB,QAAO,uBAAA,EAAwB,eAAA,EAAgB,KAAA,EAAM,QAAA,EAAU,KAAA,EAAO,CAAA;AAAA,oBACpGA,cAAA,CAAC,EAAE,KAAA,EAAF,EAAQ,SAAS,WAAA,EAAa,MAAA,EAAO,oBAAmB,QAAA,EAAU,EAAA,EAAI,UAAU,KAAA,EAAO,QAAA,EAAU,OAAQ,GAAG,iBAAA,CAAkB,EAAE,cAAA,EAAgB,aAAA,EAAe,UAAA,EAAY,CAAA,EAAG,CAAA;AAAA,oBAC/KA,cAAA,CAAC,CAAA,CAAE,KAAA,EAAF,EAAQ,QAAO,kBAAA,EAAmB,QAAA,EAAU,EAAA,EAAI,QAAA,EAAU,OAAO,QAAA,EAAU,KAAA,EAAQ,GAAG,cAAA,CAAe,cAAc,CAAA,EAAG,CAAA;AAAA,mCACtH,CAAA,CAAE,OAAA,EAAF,EAAU,YAAA,EAAc,EAAE,YAAY,mBAAA,EAAqB,MAAA,EAAQ,iCAAA,EAAmC,YAAA,EAAc,GAAG,QAAA,EAAU,EAAA,IAAO,GAAG,iBAAA,CAAkB,cAAc,CAAA,EAAG,CAAA;AAAA,IAC9K,UAAA,mCAAe,CAAA,CAAE,MAAA,EAAF,EAAS,YAAA,EAAc,EAAE,QAAA,EAAU,EAAA,EAAG,EAAG,CAAA;AAAA,IACxD,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBACdA,cAAA;AAAA,MAAC,CAAA,CAAE,IAAA;AAAA,MAAF;AAAA,QAEC,IAAA,EAAM,QAAA;AAAA,QACN,SAAS,CAAA,CAAE,GAAA;AAAA,QACX,IAAA,EAAM,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,GAAA;AAAA,QACnB,QAAQ,CAAA,CAAE,KAAA,IAAS,OAAA,CAAQ,CAAA,GAAI,QAAQ,MAAM,CAAA;AAAA,QAC7C,WAAA,EAAa,CAAA;AAAA,QACb,GAAA,EAAK,KAAA;AAAA,QACL,SAAA,EAAW,EAAE,CAAA,EAAG,CAAA;AAAE,OAAA;AAAA,MAPb,CAAA,CAAE;AAAA,KASV;AAAA,GAAA,EACH,GACF,CAAA,EACF,CAAA;AAEJ;AAOO,SAAS,SAAA,CAAmB;AAAA,EACjC,QAAA,EAAU,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,WAAA;AAAA,EAAa,MAAA;AAAA,EAChC,MAAA,GAAS,GAAA;AAAA,EAAK,SAAA;AAAA,EAAW,SAAA;AAAA,EACzB,QAAA,GAAW,IAAA;AAAA,EAAM,UAAA,GAAa,IAAA;AAAA,EAAM,MAAA,GAAS,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,OAAA;AAAA,EAC1D,cAAA;AAAA,EAAgB,aAAA;AAAA,EAAe,UAAA;AAAA,EAAY;AAC7C,CAAA,EAAsB;AACpB,EAAA,MAAM,QAAA,GAAW,KAAA,KAAU,MAAA,GAAS,UAAA,GAAa,QAAA,CAAA;AACjD,EAAA,uBACEA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWC,mBAAA,CAAG,SAAS,SAAS,CAAA,EAAG,IAAA,EAAK,KAAA,EAAM,YAAA,EAAY,SAAA,EAC7D,QAAA,kBAAAD,cAAA,CAAC,CAAA,CAAE,qBAAF,EAAsB,KAAA,EAAM,MAAA,EAAO,MAAA,EAClC,QAAA,kBAAAE,eAAA,CAAC,CAAA,CAAE,SAAA,EAAF,EAAY,MAAY,MAAA,EAAQ,EAAE,GAAA,EAAK,CAAA,EAAG,OAAO,EAAA,EAAI,MAAA,EAAQ,CAAA,EAAG,IAAA,EAAM,GAAE,EACtE,QAAA,EAAA;AAAA,IAAA,QAAA,oBAAYF,cAAA,CAAC,EAAE,aAAA,EAAF,EAAgB,QAAO,uBAAA,EAAwB,eAAA,EAAgB,KAAA,EAAM,QAAA,EAAU,KAAA,EAAO,CAAA;AAAA,oBACpGA,cAAA,CAAC,EAAE,KAAA,EAAF,EAAQ,SAAS,WAAA,EAAa,MAAA,EAAO,oBAAmB,QAAA,EAAU,EAAA,EAAI,UAAU,KAAA,EAAO,QAAA,EAAU,OAAQ,GAAG,iBAAA,CAAkB,EAAE,cAAA,EAAgB,aAAA,EAAe,UAAA,EAAY,CAAA,EAAG,CAAA;AAAA,oBAC/KA,cAAA,CAAC,CAAA,CAAE,KAAA,EAAF,EAAQ,QAAO,kBAAA,EAAmB,QAAA,EAAU,EAAA,EAAI,QAAA,EAAU,OAAO,QAAA,EAAU,KAAA,EAAQ,GAAG,cAAA,CAAe,cAAc,CAAA,EAAG,CAAA;AAAA,mCACtH,CAAA,CAAE,OAAA,EAAF,EAAU,YAAA,EAAc,EAAE,YAAY,mBAAA,EAAqB,MAAA,EAAQ,iCAAA,EAAmC,YAAA,EAAc,GAAG,QAAA,EAAU,EAAA,IAAO,GAAG,iBAAA,CAAkB,cAAc,CAAA,EAAG,CAAA;AAAA,IAC9K,UAAA,mCAAe,CAAA,CAAE,MAAA,EAAF,EAAS,YAAA,EAAc,EAAE,QAAA,EAAU,EAAA,EAAG,EAAG,CAAA;AAAA,IACxD,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBACdA,cAAA;AAAA,MAAC,CAAA,CAAE,IAAA;AAAA,MAAF;AAAA,QAEC,IAAA,EAAM,QAAA;AAAA,QACN,SAAS,CAAA,CAAE,GAAA;AAAA,QACX,IAAA,EAAM,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,GAAA;AAAA,QACnB,OAAA,EAAS,UAAU,GAAA,GAAM,MAAA;AAAA,QACzB,QAAQ,CAAA,CAAE,KAAA,IAAS,OAAA,CAAQ,CAAA,GAAI,QAAQ,MAAM,CAAA;AAAA,QAC7C,MAAM,CAAA,CAAE,KAAA,IAAS,OAAA,CAAQ,CAAA,GAAI,QAAQ,MAAM,CAAA;AAAA,QAC3C,WAAA,EAAa,IAAA;AAAA,QACb,WAAA,EAAa;AAAA,OAAA;AAAA,MARR,CAAA,CAAE;AAAA,KAUV;AAAA,GAAA,EACH,GACF,CAAA,EACF,CAAA;AAEJ;AAQA,IAAM,UAAA,GAAa,CAAA;AAEZ,SAAS,QAAA,CAAkB;AAAA,EAChC,QAAA,EAAU,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,WAAA;AAAA,EAAa,MAAA;AAAA,EAChC,MAAA,GAAS,GAAA;AAAA,EAAK,SAAA;AAAA,EAAW,SAAA;AAAA,EACzB,MAAA,GAAS,UAAA;AAAA,EAAY,OAAA;AAAA,EAAS,QAAA,GAAW,IAAA;AAAA,EAAM,UAAA,GAAa,IAAA;AAAA,EAC5D,cAAA;AAAA,EAAgB,aAAA;AAAA,EAAe,UAAA;AAAA,EAAY;AAC7C,CAAA,EAAqB;AACnB,EAAA,MAAM,eAAe,MAAA,KAAW,YAAA;AAIhC,EAAA,MAAM,SAAA,GAAY,YAAA,GAAe,CAAC,CAAA,EAAG,UAAA,EAAY,UAAA,EAAY,CAAC,CAAA,GAAI,CAAC,UAAA,EAAY,UAAA,EAAY,CAAA,EAAG,CAAC,CAAA;AAC/F,EAAA,MAAM,OAAA,GAAU,OAAO,MAAA,GAAS,CAAA;AAChC,EAAA,MAAM,WAAW,iBAAA,CAAkB,EAAE,cAAA,EAAgB,aAAA,EAAe,YAAY,CAAA;AAChF,EAAA,MAAM,mBAAmB,iBAAA,CAAkB,EAAE,gBAAgB,aAAA,EAAe,UAAA,IAAc,KAAK,CAAA;AAC/F,EAAA,sCACG,KAAA,EAAA,EAAI,SAAA,EAAWC,mBAAA,CAAG,OAAA,EAAS,SAAS,CAAA,EAAG,IAAA,EAAK,KAAA,EAAM,YAAA,EAAY,WAC7D,QAAA,kBAAAD,cAAA,CAAC,CAAA,CAAE,mBAAA,EAAF,EAAsB,OAAM,MAAA,EAAO,MAAA,EAClC,QAAA,kBAAAE,eAAA,CAAC,CAAA,CAAE,UAAF,EAAW,IAAA,EAAY,MAAA,EAAQ,YAAA,GAAe,aAAa,YAAA,EAAc,MAAA,EAAQ,EAAE,GAAA,EAAK,GAAG,KAAA,EAAO,EAAA,EAAI,QAAQ,CAAA,EAAG,IAAA,EAAM,GAAE,EACvH,QAAA,EAAA;AAAA,IAAA,QAAA,oBAAYF,cAAA,CAAC,CAAA,CAAE,aAAA,EAAF,EAAgB,MAAA,EAAO,uBAAA,EAAwB,eAAA,EAAgB,KAAA,EAAM,QAAA,EAAU,YAAA,EAAc,UAAA,EAAY,CAAC,YAAA,EAAc,CAAA;AAAA,IACrI,+BACCE,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAH,cAAA,CAAC,EAAE,KAAA,EAAF,EAAQ,IAAA,EAAK,QAAA,EAAS,QAAO,kBAAA,EAAmB,QAAA,EAAU,EAAA,EAAI,QAAA,EAAU,OAAO,QAAA,EAAU,KAAA,EAAQ,GAAG,cAAA,CAAe,cAAc,CAAA,EAAG,CAAA;AAAA,qCACpI,CAAA,CAAE,KAAA,EAAF,EAAQ,OAAA,EAAS,WAAA,EAAa,MAAK,UAAA,EAAW,MAAA,EAAO,oBAAmB,QAAA,EAAU,EAAA,EAAI,UAAU,KAAA,EAAO,QAAA,EAAU,OAAO,KAAA,EAAO,EAAA,EAAK,GAAG,gBAAA,EAAkB;AAAA,KAAA,EAC5J,oBAEAE,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAH,cAAA,CAAC,CAAA,CAAE,KAAA,EAAF,EAAQ,OAAA,EAAS,aAAa,MAAA,EAAO,kBAAA,EAAmB,QAAA,EAAU,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,KAAA,EAAQ,GAAG,QAAA,EAAU,CAAA;AAAA,sBACvHA,cAAA,CAAC,CAAA,CAAE,KAAA,EAAF,EAAQ,QAAO,kBAAA,EAAmB,QAAA,EAAU,EAAA,EAAI,QAAA,EAAU,OAAO,QAAA,EAAU,KAAA,EAAQ,GAAG,cAAA,CAAe,cAAc,CAAA,EAAG;AAAA,KAAA,EACzH,CAAA;AAAA,oBAEFA,cAAA,CAAC,EAAE,OAAA,EAAF,EAAU,cAAc,EAAE,UAAA,EAAY,mBAAA,EAAqB,MAAA,EAAQ,iCAAA,EAAmC,YAAA,EAAc,GAAG,QAAA,EAAU,EAAA,EAAG,EAAG,MAAA,EAAQ,EAAE,IAAA,EAAM,oBAAmB,EAAI,GAAG,iBAAA,CAAkB,cAAc,CAAA,EAAG,CAAA;AAAA,IACpN,UAAA,mCAAe,CAAA,CAAE,MAAA,EAAF,EAAS,YAAA,EAAc,EAAE,QAAA,EAAU,EAAA,EAAG,EAAG,CAAA;AAAA,IACxD,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM;AAGpB,MAAA,MAAM,SAAA,GAAY,OAAA,GAAW,CAAA,KAAM,OAAA,GAAU,SAAA,GAAY,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAK,SAAA;AACzE,MAAA,uBACEA,cAAA;AAAA,QAAC,CAAA,CAAE,GAAA;AAAA,QAAF;AAAA,UAEC,SAAS,CAAA,CAAE,GAAA;AAAA,UACX,IAAA,EAAM,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,GAAA;AAAA,UACnB,OAAA,EAAS,UAAU,GAAA,GAAM,MAAA;AAAA,UACzB,MAAM,CAAA,CAAE,KAAA,IAAS,OAAA,CAAQ,CAAA,GAAI,QAAQ,MAAM,CAAA;AAAA,UAC3C,MAAA,EAAQ,SAAA;AAAA,UACR,UAAA,EAAY;AAAA,SAAA;AAAA,QANP,CAAA,CAAE;AAAA,OAOT;AAAA,IAEJ,CAAC;AAAA,GAAA,EACH,GACF,CAAA,EACF,CAAA;AAEJ;AAeO,SAAS,UAAA,CAAW;AAAA,EACzB,QAAA,EAAU,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,MAAA,GAAS,GAAA;AAAA,EAAK,SAAA;AAAA,EAAW,SAAA;AAAA,EAC5C,WAAA;AAAA,EAAa,UAAA,GAAa,IAAA;AAAA,EAAM,WAAA,GAAc,EAAA;AAAA,EAAI,WAAA,GAAc,EAAA;AAAA,EAChE,aAAA;AAAA,EAAe;AACjB,CAAA,EAAoB;AAElB,EAAA,MAAM,YAAA,GAAgB,aAAA,IAAiB,cAAA,GACnC,EAAE,SAAA,EAAW,CAAC,CAAA,EAAY,CAAA,KAAe,CAAC,cAAA,GAAiB,cAAA,CAAe,MAAA,CAAO,CAAC,CAAC,CAAA,GAAI,CAAA,EAAG,aAAA,GAAgB,aAAA,CAAc,MAAA,CAAO,CAAC,CAAC,CAAA,GAAI,CAAC,CAAA,EAAE,GACxI,EAAC;AACL,EAAA,uBACEE,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWD,mBAAA,CAAG,oBAAA,EAAsB,SAAS,CAAA,EAAG,IAAA,EAAK,KAAA,EAAM,YAAA,EAAY,SAAA,EAC1E,QAAA,EAAA;AAAA,oBAAAC,eAAA,CAAC,SAAI,SAAA,EAAU,mBAAA,EAAoB,KAAA,EAAO,EAAE,QAAO,EACjD,QAAA,EAAA;AAAA,sBAAAF,cAAA,CAAC,CAAA,CAAE,mBAAA,EAAF,EAAsB,KAAA,EAAM,MAAA,EAAO,QAAO,MAAA,EACzC,QAAA,kBAAAE,eAAA,CAAC,CAAA,CAAE,QAAA,EAAF,EACC,QAAA,EAAA;AAAA,wBAAAF,cAAA,CAAC,CAAA,CAAE,OAAA,EAAF,EAAU,YAAA,EAAc,EAAE,UAAA,EAAY,mBAAA,EAAqB,MAAA,EAAQ,iCAAA,EAAmC,cAAc,CAAA,EAAG,QAAA,EAAU,EAAA,EAAG,EAAI,GAAG,YAAA,EAAc,CAAA;AAAA,wBAC1JA,cAAA;AAAA,UAAC,CAAA,CAAE,GAAA;AAAA,UAAF;AAAA,YACC,IAAA;AAAA,YACA,OAAA,EAAQ,OAAA;AAAA,YACR,OAAA,EAAQ,MAAA;AAAA,YACR,WAAA;AAAA,YACA,WAAA;AAAA,YACA,YAAA,EAAc,CAAA;AAAA,YACd,MAAA,EAAO,mBAAA;AAAA,YAEN,eAAK,GAAA,CAAI,CAAC,GAAG,CAAA,qBAAMA,cAAA,CAAC,EAAE,IAAA,EAAF,EAAe,IAAA,EAAM,CAAA,CAAE,SAAS,OAAA,CAAQ,CAAA,GAAI,QAAQ,MAAM,CAAA,EAAA,EAA9C,CAAiD,CAAE;AAAA;AAAA;AACtF,OAAA,EACF,CAAA,EACF,CAAA;AAAA,MACC,WAAA,oBAAeA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAiB,QAAA,EAAA,WAAA,EAAY;AAAA,KAAA,EAC9D,CAAA;AAAA,IACC,UAAA,oBACCA,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,iBAAgB,aAAA,EAAY,MAAA,EACvC,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBACZE,eAAA,CAAC,IAAA,EAAA,EAAgB,WAAU,oBAAA,EACzB,QAAA,EAAA;AAAA,sBAAAF,cAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,sBAAA;AAAA,UACV,KAAA,EAAO,EAAE,UAAA,EAAY,CAAA,CAAE,SAAS,OAAA,CAAQ,CAAA,GAAI,OAAA,CAAQ,MAAM,CAAA;AAAE;AAAA,OAC9D;AAAA,sBACAA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,aAAA,GAAgB,cAAc,CAAA,CAAE,IAAI,CAAA,GAAI,CAAA,CAAE,IAAA,EAAK;AAAA,KAAA,EAAA,EAL/E,CAAA,CAAE,IAMX,CACD,CAAA,EACH;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAeO,SAAS,SAAA,CAAmB;AAAA,EACjC,QAAA,EAAU,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,OAAA;AAAA,EACnB,KAAA,GAAQ,GAAA;AAAA,EAAK,MAAA,GAAS,EAAA;AAAA,EAAI,KAAA,GAAQ,sBAAA;AAAA,EAClC,IAAA,GAAO,IAAA;AAAA,EAAM,SAAA;AAAA,EAAW;AAC1B,CAAA,EAAsB;AACpB,EAAA,sCACG,KAAA,EAAA,EAAI,SAAA,EAAWC,mBAAA,CAAG,WAAA,EAAa,SAAS,CAAA,EAAG,IAAA,EAAK,KAAA,EAAM,YAAA,EAAY,WAAW,KAAA,EAAO,EAAE,OAAO,MAAA,EAAO,EACnG,yCAAC,CAAA,CAAE,mBAAA,EAAF,EAAsB,KAAA,EAAM,QAAO,MAAA,EAAO,MAAA,EACzC,yCAAC,CAAA,CAAE,SAAA,EAAF,EAAY,IAAA,EAAY,MAAA,EAAQ,EAAE,GAAA,EAAK,GAAG,KAAA,EAAO,CAAA,EAAG,QAAQ,CAAA,EAAG,IAAA,EAAM,GAAE,EACtE,QAAA,kBAAAD,cAAA;AAAA,IAAC,CAAA,CAAE,IAAA;AAAA,IAAF;AAAA,MACC,IAAA,EAAK,UAAA;AAAA,MACL,OAAA;AAAA,MACA,MAAA,EAAQ,KAAA;AAAA,MACR,WAAA,EAAa,GAAA;AAAA,MACb,IAAA,EAAM,OAAO,KAAA,GAAQ,MAAA;AAAA,MACrB,WAAA,EAAa,OAAO,IAAA,GAAO,CAAA;AAAA,MAC3B,iBAAA,EAAmB;AAAA;AAAA,GACrB,EACF,GACF,CAAA,EACF,CAAA;AAEJ","file":"chunk-2ET7IM4U.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\n\n/**\n * Lightweight chart wrappers. We do NOT bundle Recharts — the host app provides it\n * and passes the modules in via the `recharts` prop so consumers only pay for what they use.\n *\n * Recharts is treated as an implicit peer dependency: install it in the host\n * app if you use any chart component.\n *\n * Usage in a Next.js client component:\n *\n * import * as Recharts from 'recharts';\n * import { LineChart } from '@misael703/elalba-ui';\n * <LineChart recharts={Recharts} data={...} dataKey=\"value\" categoryKey=\"month\" />\n */\n\n// Structural mirror of the Recharts public API. `any` is intentional here:\n// each Recharts component has a different prop shape, and typing them\n// exhaustively would mean depending on `recharts` types — which would force\n// consumers to install recharts even when they don't use any chart.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype RechartsComp = React.ComponentType<any>;\n\nexport type RechartsLike = {\n ResponsiveContainer: RechartsComp;\n LineChart: RechartsComp;\n AreaChart: RechartsComp;\n BarChart: RechartsComp;\n PieChart: RechartsComp;\n Line: RechartsComp;\n Area: RechartsComp;\n Bar: RechartsComp;\n Pie: RechartsComp;\n Cell: RechartsComp;\n CartesianGrid: RechartsComp;\n XAxis: RechartsComp;\n YAxis: RechartsComp;\n Tooltip: RechartsComp;\n Legend: RechartsComp;\n};\n\nconst PALETTE = [\n 'var(--color-primary)',\n 'var(--color-secondary)',\n 'var(--color-primary-900)',\n 'var(--color-success)',\n 'var(--color-warning)',\n 'var(--color-danger)',\n '#6b7e95',\n '#d4a574',\n];\n\nexport interface BaseChartProps<D = any> {\n recharts: RechartsLike;\n data: D[];\n height?: number;\n className?: string;\n ariaLabel?: string;\n}\n\n// Mirror of Recharts' AxisInterval. Controls how category ticks thin on\n// collision so dense series (e.g. daily points) don't crowd the axis.\nexport type AxisInterval =\n | number\n | 'preserveStart'\n | 'preserveEnd'\n | 'preserveStartEnd'\n | 'equidistantPreserveStart'\n | 'equidistantPreserveEnd';\n\n// Shared cartesian controls (Line/Area/Bar). DonutChart/Sparkline don't have a\n// category axis, so they keep BaseChartProps.\nexport interface CartesianChartProps<D = any> extends BaseChartProps<D> {\n categoryKey: keyof D & string;\n series: Array<{ key: keyof D & string; label?: string; color?: string }>;\n showGrid?: boolean;\n showLegend?: boolean;\n /** Format each category-axis tick label, e.g. shorten `2026-05-23`. → XAxis.tickFormatter */\n xTickFormatter?: (value: string) => string;\n /** Thin out category ticks on collision. → XAxis.interval. Default `preserveStartEnd`. */\n xTickInterval?: AxisInterval;\n /** Rotate category-axis labels N degrees (anchors end + reserves height so they don't clip). */\n xTickAngle?: number;\n /** Format numeric values (value-axis ticks + tooltip). */\n valueFormatter?: (value: number) => string;\n}\n\nconst DEFAULT_X_INTERVAL: AxisInterval = 'preserveStartEnd';\n\n// Recharts XAxis/YAxis are `any`-typed (structural mirror), so tick controls go\n// in as a spread. `rotate` is off when the category axis is the Y axis\n// (horizontal bars: those labels are already horizontal).\nfunction categoryTickProps(\n opts: Pick<CartesianChartProps, 'xTickFormatter' | 'xTickInterval' | 'xTickAngle'>,\n rotate = true,\n): Record<string, unknown> {\n const props: Record<string, unknown> = { interval: opts.xTickInterval ?? DEFAULT_X_INTERVAL };\n if (opts.xTickFormatter) props.tickFormatter = opts.xTickFormatter;\n if (rotate && opts.xTickAngle) {\n props.angle = opts.xTickAngle;\n props.textAnchor = 'end';\n props.height = 56; // reserve room so the rotated label isn't clipped\n }\n return props;\n}\n\nfunction valueTickProps(valueFormatter?: (v: number) => string): Record<string, unknown> {\n return valueFormatter ? { tickFormatter: (v: number) => valueFormatter(Number(v)) } : {};\n}\n\nfunction tooltipValueProps(valueFormatter?: (v: number) => string): Record<string, unknown> {\n return valueFormatter ? { formatter: (v: unknown) => valueFormatter(Number(v)) } : {};\n}\n\n// ---------- LineChart ---------------------------------------------------\nexport interface LineChartProps<D = any> extends CartesianChartProps<D> {\n smooth?: boolean;\n /** Interpolation. `monotone` smooths (default, back-compat); `linear` draws honest\n * straight segments — recommended for counts/stepped series (no phantom humps over zeros). */\n curve?: 'linear' | 'monotone';\n}\n\nexport function LineChart<D = any>({\n recharts: R, data, categoryKey, series,\n height = 280, className, ariaLabel,\n showGrid = true, showLegend = true, smooth = true, curve,\n xTickFormatter, xTickInterval, xTickAngle, valueFormatter,\n}: LineChartProps<D>) {\n const lineType = curve ?? (smooth ? 'monotone' : 'linear');\n return (\n <div className={cx('chart', className)} role=\"img\" aria-label={ariaLabel}>\n <R.ResponsiveContainer width=\"100%\" height={height}>\n <R.LineChart data={data} margin={{ top: 8, right: 16, bottom: 0, left: 0 }}>\n {showGrid && <R.CartesianGrid stroke=\"var(--border-default)\" strokeDasharray=\"3 3\" vertical={false} />}\n <R.XAxis dataKey={categoryKey} stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...categoryTickProps({ xTickFormatter, xTickInterval, xTickAngle })} />\n <R.YAxis stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...valueTickProps(valueFormatter)} />\n <R.Tooltip contentStyle={{ background: 'var(--bg-surface)', border: '1px solid var(--border-default)', borderRadius: 8, fontSize: 12 }} {...tooltipValueProps(valueFormatter)} />\n {showLegend && <R.Legend wrapperStyle={{ fontSize: 12 }} />}\n {series.map((s, i) => (\n <R.Line\n key={s.key}\n type={lineType}\n dataKey={s.key}\n name={s.label ?? s.key}\n stroke={s.color ?? PALETTE[i % PALETTE.length]}\n strokeWidth={2}\n dot={false}\n activeDot={{ r: 4 }}\n />\n ))}\n </R.LineChart>\n </R.ResponsiveContainer>\n </div>\n );\n}\n\n// ---------- AreaChart ---------------------------------------------------\nexport interface AreaChartProps<D = any> extends LineChartProps<D> {\n stacked?: boolean;\n}\n\nexport function AreaChart<D = any>({\n recharts: R, data, categoryKey, series,\n height = 280, className, ariaLabel,\n showGrid = true, showLegend = true, smooth = true, curve, stacked,\n xTickFormatter, xTickInterval, xTickAngle, valueFormatter,\n}: AreaChartProps<D>) {\n const lineType = curve ?? (smooth ? 'monotone' : 'linear');\n return (\n <div className={cx('chart', className)} role=\"img\" aria-label={ariaLabel}>\n <R.ResponsiveContainer width=\"100%\" height={height}>\n <R.AreaChart data={data} margin={{ top: 8, right: 16, bottom: 0, left: 0 }}>\n {showGrid && <R.CartesianGrid stroke=\"var(--border-default)\" strokeDasharray=\"3 3\" vertical={false} />}\n <R.XAxis dataKey={categoryKey} stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...categoryTickProps({ xTickFormatter, xTickInterval, xTickAngle })} />\n <R.YAxis stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...valueTickProps(valueFormatter)} />\n <R.Tooltip contentStyle={{ background: 'var(--bg-surface)', border: '1px solid var(--border-default)', borderRadius: 8, fontSize: 12 }} {...tooltipValueProps(valueFormatter)} />\n {showLegend && <R.Legend wrapperStyle={{ fontSize: 12 }} />}\n {series.map((s, i) => (\n <R.Area\n key={s.key}\n type={lineType}\n dataKey={s.key}\n name={s.label ?? s.key}\n stackId={stacked ? '1' : undefined}\n stroke={s.color ?? PALETTE[i % PALETTE.length]}\n fill={s.color ?? PALETTE[i % PALETTE.length]}\n fillOpacity={0.18}\n strokeWidth={2}\n />\n ))}\n </R.AreaChart>\n </R.ResponsiveContainer>\n </div>\n );\n}\n\n// ---------- BarChart ----------------------------------------------------\nexport interface BarChartProps<D = any> extends CartesianChartProps<D> {\n layout?: 'vertical' | 'horizontal';\n stacked?: boolean;\n}\n\nconst BAR_RADIUS = 4;\n\nexport function BarChart<D = any>({\n recharts: R, data, categoryKey, series,\n height = 280, className, ariaLabel,\n layout = 'vertical', stacked, showGrid = true, showLegend = true,\n xTickFormatter, xTickInterval, xTickAngle, valueFormatter,\n}: BarChartProps<D>) {\n const isHorizontal = layout === 'horizontal';\n // Radius must round the VALUE end: top for columns ([tl,tr,br,bl] → [R,R,0,0]),\n // right for horizontal bars ([0,R,R,0]). The old hardcoded [4,4,0,0] left\n // horizontal bars rounded-top / pointed-bottom.\n const endRadius = isHorizontal ? [0, BAR_RADIUS, BAR_RADIUS, 0] : [BAR_RADIUS, BAR_RADIUS, 0, 0];\n const lastIdx = series.length - 1;\n const catTicks = categoryTickProps({ xTickFormatter, xTickInterval, xTickAngle });\n const catTicksNoRotate = categoryTickProps({ xTickFormatter, xTickInterval, xTickAngle }, false);\n return (\n <div className={cx('chart', className)} role=\"img\" aria-label={ariaLabel}>\n <R.ResponsiveContainer width=\"100%\" height={height}>\n <R.BarChart data={data} layout={isHorizontal ? 'vertical' : 'horizontal'} margin={{ top: 8, right: 16, bottom: 0, left: 0 }}>\n {showGrid && <R.CartesianGrid stroke=\"var(--border-default)\" strokeDasharray=\"3 3\" vertical={isHorizontal} horizontal={!isHorizontal} />}\n {isHorizontal ? (\n <>\n <R.XAxis type=\"number\" stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...valueTickProps(valueFormatter)} />\n <R.YAxis dataKey={categoryKey} type=\"category\" stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} width={96} {...catTicksNoRotate} />\n </>\n ) : (\n <>\n <R.XAxis dataKey={categoryKey} stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...catTicks} />\n <R.YAxis stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...valueTickProps(valueFormatter)} />\n </>\n )}\n <R.Tooltip contentStyle={{ background: 'var(--bg-surface)', border: '1px solid var(--border-default)', borderRadius: 8, fontSize: 12 }} cursor={{ fill: 'var(--bg-subtle)' }} {...tooltipValueProps(valueFormatter)} />\n {showLegend && <R.Legend wrapperStyle={{ fontSize: 12 }} />}\n {series.map((s, i) => {\n // Stacked: only the outermost (last) segment carries the end radius;\n // inner segments stay square so the stack reads as one bar.\n const barRadius = stacked ? (i === lastIdx ? endRadius : [0, 0, 0, 0]) : endRadius;\n return (\n <R.Bar\n key={s.key}\n dataKey={s.key}\n name={s.label ?? s.key}\n stackId={stacked ? '1' : undefined}\n fill={s.color ?? PALETTE[i % PALETTE.length]}\n radius={barRadius}\n maxBarSize={48}\n />\n );\n })}\n </R.BarChart>\n </R.ResponsiveContainer>\n </div>\n );\n}\n\n// ---------- DonutChart --------------------------------------------------\nexport interface DonutChartProps extends Omit<BaseChartProps, 'data'> {\n data: Array<{ name: string; value: number; color?: string }>;\n centerLabel?: React.ReactNode;\n showLegend?: boolean;\n innerRadius?: number;\n outerRadius?: number;\n /** Format slice names in tooltip + legend, e.g. `V_REGION` → `V Región` (no need to pre-map the data). */\n nameFormatter?: (name: string) => string;\n /** Format slice values in the tooltip. */\n valueFormatter?: (value: number) => string;\n}\n\nexport function DonutChart({\n recharts: R, data, height = 240, className, ariaLabel,\n centerLabel, showLegend = true, innerRadius = 60, outerRadius = 88,\n nameFormatter, valueFormatter,\n}: DonutChartProps) {\n // Recharts Tooltip formatter returns [formattedValue, formattedName].\n const tooltipProps = (nameFormatter || valueFormatter)\n ? { formatter: (v: unknown, n: unknown) => [valueFormatter ? valueFormatter(Number(v)) : v, nameFormatter ? nameFormatter(String(n)) : n] }\n : {};\n return (\n <div className={cx('chart chart--donut', className)} role=\"img\" aria-label={ariaLabel}>\n <div className=\"chart__donut-area\" style={{ height }}>\n <R.ResponsiveContainer width=\"100%\" height=\"100%\">\n <R.PieChart>\n <R.Tooltip contentStyle={{ background: 'var(--bg-surface)', border: '1px solid var(--border-default)', borderRadius: 8, fontSize: 12 }} {...tooltipProps} />\n <R.Pie\n data={data}\n dataKey=\"value\"\n nameKey=\"name\"\n innerRadius={innerRadius}\n outerRadius={outerRadius}\n paddingAngle={2}\n stroke=\"var(--bg-surface)\"\n >\n {data.map((d, i) => <R.Cell key={i} fill={d.color ?? PALETTE[i % PALETTE.length]} />)}\n </R.Pie>\n </R.PieChart>\n </R.ResponsiveContainer>\n {centerLabel && <div className=\"chart__center\">{centerLabel}</div>}\n </div>\n {showLegend && (\n <ul className=\"chart__legend\" aria-hidden=\"true\">\n {data.map((d, i) => (\n <li key={d.name} className=\"chart__legend-item\">\n <span\n className=\"chart__legend-swatch\"\n style={{ background: d.color ?? PALETTE[i % PALETTE.length] }}\n />\n <span className=\"chart__legend-label\">{nameFormatter ? nameFormatter(d.name) : d.name}</span>\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n\n// ---------- Sparkline ---------------------------------------------------\nexport interface SparklineProps<D = any> {\n recharts: RechartsLike;\n data: D[];\n dataKey: keyof D & string;\n width?: number;\n height?: number;\n color?: string;\n fill?: boolean;\n className?: string;\n ariaLabel?: string;\n}\n\nexport function Sparkline<D = any>({\n recharts: R, data, dataKey,\n width = 120, height = 32, color = 'var(--color-primary)',\n fill = true, className, ariaLabel,\n}: SparklineProps<D>) {\n return (\n <div className={cx('sparkline', className)} role=\"img\" aria-label={ariaLabel} style={{ width, height }}>\n <R.ResponsiveContainer width=\"100%\" height=\"100%\">\n <R.AreaChart data={data} margin={{ top: 2, right: 0, bottom: 2, left: 0 }}>\n <R.Area\n type=\"monotone\"\n dataKey={dataKey}\n stroke={color}\n strokeWidth={1.5}\n fill={fill ? color : 'none'}\n fillOpacity={fill ? 0.18 : 0}\n isAnimationActive={false}\n />\n </R.AreaChart>\n </R.ResponsiveContainer>\n </div>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/dateFormat.ts"],"names":[],"mappings":"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","file":"chunk-4QHE5H36.mjs","sourcesContent":["import { getBrand } from '../brand';\n\n/**\n * Date display formats supported by the kit's date pickers.\n *\n * - `iso` → `2026-05-02` (ISO 8601, year-month-day)\n * - `dmy` → `02-05-2026` (day-month-year, common in es-CL, es-ES, en-GB, pt-BR)\n * - `mdy` → `05-02-2026` (month-day-year, en-US)\n * - `auto` → derived from `configureBrand().locale` via Intl.DateTimeFormat\n */\nexport type DateFormat = 'iso' | 'dmy' | 'mdy' | 'auto';\n\n/** A concrete (non-`auto`) format. */\nexport type ResolvedDateFormat = Exclude<DateFormat, 'auto'>;\n\n/**\n * Inspects the locale's date-part order using `Intl.DateTimeFormat.formatToParts`.\n * No hardcoded country lists — uses the runtime's CLDR data.\n */\nexport function detectFormatFromLocale(locale: string): ResolvedDateFormat {\n try {\n const parts = new Intl.DateTimeFormat(locale).formatToParts(new Date(2024, 0, 2));\n const order: string[] = [];\n for (const p of parts) {\n if (p.type === 'year') order.push('y');\n else if (p.type === 'month') order.push('m');\n else if (p.type === 'day') order.push('d');\n }\n const key = order.join('');\n if (key === 'ymd') return 'iso';\n if (key === 'mdy') return 'mdy';\n return 'dmy';\n } catch {\n return 'dmy';\n }\n}\n\n/** Resolves `'auto'` against the current `configureBrand().locale`. */\nexport function resolveDateFormat(format: DateFormat): ResolvedDateFormat {\n if (format === 'auto') return detectFormatFromLocale(getBrand().locale);\n return format;\n}\n\nconst PLACEHOLDERS: Record<ResolvedDateFormat, string> = {\n iso: 'aaaa-mm-dd',\n dmy: 'dd-mm-aaaa',\n mdy: 'mm-dd-aaaa',\n};\n\n/** Localized placeholder for the given resolved format. */\nexport function dateFormatPlaceholder(format: ResolvedDateFormat): string {\n return PLACEHOLDERS[format];\n}\n\n/** Format a Date as a string in the given resolved format. Always uses `-` as separator. */\nexport function formatDate(d: Date, format: ResolvedDateFormat): string {\n const yyyy = d.getFullYear();\n const mm = String(d.getMonth() + 1).padStart(2, '0');\n const dd = String(d.getDate()).padStart(2, '0');\n if (format === 'iso') return `${yyyy}-${mm}-${dd}`;\n if (format === 'dmy') return `${dd}-${mm}-${yyyy}`;\n return `${mm}-${dd}-${yyyy}`;\n}\n\n/**\n * Parse a user-typed date string. Tolerant of `-`, `/`, `.` separators.\n *\n * Always accepts ISO `aaaa-mm-dd` regardless of `format` (it's the canonical\n * wire format, used by APIs and `<input type=\"date\">`). Otherwise, interprets\n * the parts according to the provided format.\n *\n * Returns `null` for invalid dates (out of range, non-existent days like Feb 30,\n * unparseable strings).\n */\nexport function parseDate(s: string, format: ResolvedDateFormat): Date | null {\n const trimmed = s.trim();\n if (!trimmed) return null;\n\n // Always accept ISO as a fallback (wire format).\n const iso = trimmed.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);\n if (iso) {\n return safeDate(Number(iso[1]), Number(iso[2]), Number(iso[3]));\n }\n\n const m = trimmed.match(/^(\\d{1,4})[\\-\\/.](\\d{1,2})[\\-\\/.](\\d{1,4})$/);\n if (!m) return null;\n\n let y: number, mo: number, d: number;\n if (format === 'iso') {\n y = Number(m[1]); mo = Number(m[2]); d = Number(m[3]);\n } else if (format === 'dmy') {\n d = Number(m[1]); mo = Number(m[2]); y = Number(m[3]);\n } else {\n mo = Number(m[1]); d = Number(m[2]); y = Number(m[3]);\n }\n\n // 2-digit years: assume 2000s.\n if (y < 100) y += 2000;\n\n return safeDate(y, mo, d);\n}\n\nfunction safeDate(y: number, mo: number, d: number): Date | null {\n if (mo < 1 || mo > 12 || d < 1 || d > 31) return null;\n const dt = new Date(y, mo - 1, d);\n if (\n isNaN(dt.getTime()) ||\n dt.getFullYear() !== y ||\n dt.getMonth() !== mo - 1 ||\n dt.getDate() !== d\n ) {\n return null;\n }\n return dt;\n}\n\n// ---------- Calendar helpers (shared by the date pickers) ----------------\n// Previously duplicated verbatim in Pickers.tsx, AdvancedPickers.tsx and\n// Display3.tsx. Single source now; behavior is unchanged.\n\n/** First day of `d`'s month at local midnight. */\nexport function startOfMonth(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), 1);\n}\n\n/** `d` shifted by `n` months, normalized to the first of that month. */\nexport function addMonths(d: Date, n: number): Date {\n return new Date(d.getFullYear(), d.getMonth() + n, 1);\n}\n\n/** True when `a` and `b` are the same calendar day (local time). */\nexport function isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\n/**\n * Compact month grid used by the date pickers: leading `null`s pad the days\n * before the 1st of a Monday-first week, followed by one `Date` per day of the\n * month (no adjacent-month spillover). The full-month `Calendar` uses a\n * different fixed 42-cell model on purpose, so it does not consume this.\n *\n * @param view Any date within the reference month.\n * @param offset Months to add to `view` (0 = same month, 1 = next, ...).\n */\nexport function buildMonthGrid(\n view: Date,\n offset = 0\n): { month: Date; cells: (Date | null)[] } {\n const month = addMonths(view, offset);\n const startDow = (month.getDay() + 6) % 7; // Monday = 0\n const days = new Date(month.getFullYear(), month.getMonth() + 1, 0).getDate();\n const cells: (Date | null)[] = [];\n for (let i = 0; i < startDow; i++) cells.push(null);\n for (let d = 1; d <= days; d++) {\n cells.push(new Date(month.getFullYear(), month.getMonth(), d));\n }\n return { month, cells };\n}\n\n// ---------- Relative day helpers ----------------------------------------\n\n/**\n * Parse a date-only ISO (`YYYY-MM-DD`, optionally with a time suffix) to a\n * Date at **local midnight**. `new Date('2026-05-22')` parses as UTC\n * midnight, which lands on the 21st in negative-offset timezones — a classic\n * off-by-one-day SSR bug. Reading the Y-M-D parts and constructing a local\n * Date avoids it: the calendar day is always the one written in the string.\n */\nfunction parseLocalDay(iso: string | Date): Date {\n if (iso instanceof Date) return new Date(iso.getFullYear(), iso.getMonth(), iso.getDate());\n const m = iso.match(/^(\\d{4})-(\\d{2})-(\\d{2})/);\n if (m) return new Date(Number(m[1]), Number(m[2]) - 1, Number(m[3]));\n const d = new Date(iso);\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n}\n\n/** True if `iso` is the same calendar day as `now` (default today, local). */\nexport function isToday(iso: string | Date, now: Date = new Date()): boolean {\n return isSameDay(parseLocalDay(iso), now);\n}\n\n/** True if `iso` is the calendar day after `now` (default today, local). */\nexport function isTomorrow(iso: string | Date, now: Date = new Date()): boolean {\n const t = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1);\n return isSameDay(parseLocalDay(iso), t);\n}\n\n/** True if `iso` is the calendar day before `now` (default today, local). */\nexport function isYesterday(iso: string | Date, now: Date = new Date()): boolean {\n const y = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 1);\n return isSameDay(parseLocalDay(iso), y);\n}\n\nexport interface RelativeDayOptions {\n /** BCP-47 locale. Defaults to the configured brand locale (es-CL). */\n locale?: string;\n /** Reference \"today\". Pass a fixed value for deterministic SSR / tests. */\n now?: Date;\n}\n\n/**\n * Human day label: \"Hoy\" / \"Mañana\" / \"Ayer\" for ±1 day, otherwise the\n * localized weekday + day + month (\"mar 26 may\"). The ±1 words come from\n * `Intl.RelativeTimeFormat(..., { numeric: 'auto' })` so they're correct in\n * any locale; capitalized for use as a standalone label.\n *\n * Deterministic across timezones: the day delta is computed from local\n * calendar parts (via `parseLocalDay`), never from UTC timestamps, so an\n * ISO date never renders as the wrong day. Pass `now` to pin it for SSR.\n */\nexport function formatRelativeDay(iso: string | Date, opts: RelativeDayOptions = {}): string {\n const locale = opts.locale ?? getBrand().locale ?? 'es-CL';\n const now = opts.now ?? new Date();\n const target = parseLocalDay(iso);\n const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n const diffDays = Math.round((target.getTime() - today.getTime()) / 86_400_000);\n\n if (Math.abs(diffDays) <= 1) {\n const rtf = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' });\n const s = rtf.format(diffDays, 'day');\n return s.charAt(0).toUpperCase() + s.slice(1);\n }\n return new Intl.DateTimeFormat(locale, { weekday: 'short', day: 'numeric', month: 'short' }).format(target);\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/AdvancedPickers.tsx"],"names":["useLocale","React","usePopoverPosition","useDismiss","jsxs","cx","format","jsx","X","Portal","Check","resolveDateFormat","startOfMonth","buildMonthGrid","isSameDay","formatDate","parseDate","ChevronLeft","ChevronRight","CalendarIcon","dateFormatPlaceholder","addMonths","ChevronDown","Search"],"mappings":"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","file":"chunk-ADNQFZ33.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { CalendarIcon, ChevronLeft, ChevronRight, ChevronDown, X, Check, Search } from './Icons';\nimport { resolveDateFormat, formatDate, parseDate, dateFormatPlaceholder, startOfMonth, addMonths, isSameDay, buildMonthGrid, type DateFormat } from '../utils/dateFormat';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format as formatMsg } from '../locale/messages';\nimport { Portal } from './Portal';\nimport { usePopoverPosition } from '../hooks/usePopoverPosition';\nimport { useDismiss } from '../hooks/useDismiss';\n\n// ---------- MultiCombobox -----------------------------------------------\nexport interface MultiComboboxOption<T = string> {\n value: T;\n label: string;\n description?: string;\n disabled?: boolean;\n}\n\nexport interface MultiComboboxProps<T = string> {\n value: T[];\n onChange: (v: T[]) => void;\n options: MultiComboboxOption<T>[];\n placeholder?: string;\n emptyMessage?: string;\n filter?: (option: MultiComboboxOption<T>, query: string) => boolean;\n invalid?: boolean;\n disabled?: boolean;\n className?: string;\n id?: string;\n maxVisibleChips?: number;\n}\n\nconst dfilter = <T,>(o: MultiComboboxOption<T>, q: string) =>\n o.label.toLowerCase().includes(q.toLowerCase());\n\nexport function MultiCombobox<T = string>({\n value, onChange, options, placeholder,\n emptyMessage, filter = dfilter,\n invalid, disabled, className, id, maxVisibleChips = 3,\n}: MultiComboboxProps<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 const reactId = React.useId();\n const listboxId = `${id ?? reactId}-listbox`;\n // Build the lookup Set once per `value` change, not on every keystroke or\n // hover-driven re-render.\n const selSet = React.useMemo(() => new Set(value), [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; only outside-click here.\n useDismiss({\n open,\n onDismiss: () => setOpen(false),\n refs: [wrapRef, listRef],\n closeOnEscape: false,\n });\n\n const toggle = (v: T) => {\n if (selSet.has(v)) onChange(value.filter((x) => x !== v));\n else onChange([...value, v]);\n };\n\n const onKey = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowDown') { e.preventDefault(); setOpen(true); setActive((a) => Math.min(filtered.length - 1, a + 1)); }\n else if (e.key === 'ArrowUp') { e.preventDefault(); 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) { toggle(opt.value); setQuery(''); }\n } else if (e.key === 'Escape') { setOpen(false); }\n else if (e.key === 'Backspace' && !query && value.length) { onChange(value.slice(0, -1)); }\n };\n\n const selectedItems = options.filter((o) => selSet.has(o.value));\n const visible = selectedItems.slice(0, maxVisibleChips);\n const overflow = selectedItems.length - visible.length;\n\n return (\n <div ref={wrapRef} className={cx('multicombo', invalid && 'is-invalid', disabled && 'is-disabled', className)}>\n <div className=\"multicombo__chips\" onClick={() => inputRef.current?.focus()}>\n {visible.map((o) => (\n <span key={String(o.value)} className=\"multicombo__chip\">\n {o.label}\n <button type=\"button\" aria-label={formatMsg(locale['combobox.remove'], { label: o.label })} onClick={(e) => { e.stopPropagation(); toggle(o.value); }}><X size={12} /></button>\n </span>\n ))}\n {overflow > 0 && <span className=\"multicombo__chip multicombo__chip--more\">+{overflow}</span>}\n <input\n ref={inputRef}\n id={id}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={listboxId}\n className=\"multicombo__input\"\n placeholder={selectedItems.length === 0 ? ph : ''}\n disabled={disabled}\n value={query}\n onFocus={() => setOpen(true)}\n onChange={(e) => { setQuery(e.target.value); setOpen(true); setActive(0); }}\n onKeyDown={onKey}\n />\n </div>\n {open && (\n <Portal>\n <ul\n ref={listRef}\n id={listboxId}\n role=\"listbox\"\n aria-multiselectable=\"true\"\n className={cx('multicombo__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=\"multicombo__empty\">{empty}</li>\n ) : (\n filtered.map((o, i) => {\n const checked = selSet.has(o.value);\n return (\n <li\n key={String(o.value)}\n role=\"option\"\n aria-selected={checked}\n aria-disabled={o.disabled}\n className={cx('multicombo__option', i === active && 'is-active', checked && 'is-selected', o.disabled && 'is-disabled')}\n onMouseEnter={() => setActive(i)}\n onMouseDown={(e) => { e.preventDefault(); if (!o.disabled) toggle(o.value); }}\n >\n <span className={cx('multicombo__check', checked && 'is-checked')} aria-hidden=\"true\">{checked ? <Check size={14} /> : null}</span>\n <span className=\"multicombo__option-body\">\n <span className=\"multicombo__option-label\">{o.label}</span>\n {o.description && <span className=\"multicombo__option-desc\">{o.description}</span>}\n </span>\n </li>\n );\n })\n )}\n </ul>\n </Portal>\n )}\n </div>\n );\n}\n\n// ---------- DateRangePicker --------------------------------------------\nexport interface DateRange { from: Date | null; to: Date | null }\n\nexport interface DateRangePickerProps {\n /** Controlled value. Omit to make the picker uncontrolled (see `defaultValue`). */\n value?: DateRange;\n /**\n * In legacy mode, fires on every day click. In apply mode (when `onApply` is\n * provided), fires only at apply time so a controlled `value` can stay in sync.\n */\n onChange?: (v: DateRange) => void;\n /** Initial value when uncontrolled. Ignored if `value` is provided. */\n defaultValue?: DateRange;\n /**\n * Opt-in: enables apply mode. Day clicks only mutate an internal draft; the\n * consumer is notified when the user confirms (button \"Apply\" or a preset).\n * Closing the popover without applying reverts the draft to the last applied\n * value. Useful when each commit triggers a server-side query.\n */\n onApply?: (v: DateRange) => void;\n /** Fires on open/close transitions. */\n onOpenChange?: (open: boolean) => void;\n minDate?: Date;\n maxDate?: Date;\n /**\n * Disable arbitrary days (holidays, blackout dates, specific weekdays). A\n * day for which this returns `true` renders disabled — greyed, not\n * focusable, not clickable. Composes with `minDate`/`maxDate`. A range\n * endpoint can never land on a disabled day; a disabled day that falls\n * inside an otherwise-valid span stays greyed but is included visually\n * (the span is allowed). E.g. disable Sundays: `d => d.getDay() === 0`.\n */\n isDateDisabled?: (date: Date) => boolean;\n presets?: Array<{ label: string; range: () => DateRange }>;\n invalid?: boolean;\n disabled?: boolean;\n className?: string;\n id?: string;\n /**\n * Display format. Default `'auto'` derives from `configureBrand().locale`.\n */\n format?: DateFormat;\n /**\n * Report-grade: show editable \"Desde\"/\"Hasta\" text inputs above the calendar\n * so the user can type an exact range. Off by default — a simple filter is\n * usually fine with presets + clicking.\n */\n showInputs?: boolean;\n /**\n * Report-grade: replace the static month title with a \"MMMM de YYYY ▾\" button\n * that opens a month/year jump menu (instead of clicking the arrows N times).\n */\n monthDropdown?: boolean;\n /** Number of month panels. Default `2`; `1` is the compact single-month layout. */\n months?: 1 | 2;\n}\n\nconst EMPTY_RANGE: DateRange = { from: null, to: null };\n\nexport function DateRangePicker({\n value, onChange, defaultValue, onApply, onOpenChange,\n minDate, maxDate, isDateDisabled, presets,\n invalid, disabled, className, id, format = 'auto',\n showInputs = false, monthDropdown = false, months = 2,\n}: DateRangePickerProps) {\n const locale = useLocale();\n const weekdays = locale['picker.weekdaysShort'];\n const monthNames = locale['calendar.months'];\n const fmt = resolveDateFormat(format);\n const isControlled = value !== undefined;\n const applyMode = !!onApply;\n const initial = isControlled ? (value as DateRange) : (defaultValue ?? EMPTY_RANGE);\n const [draft, setDraft] = React.useState<DateRange>(initial);\n const [lastApplied, setLastApplied] = React.useState<DateRange>(initial);\n // Resync draft/lastApplied when controlled `value` changes externally.\n const vFrom = value?.from?.getTime() ?? 0;\n const vTo = value?.to?.getTime() ?? 0;\n React.useEffect(() => {\n if (!isControlled) return;\n setDraft(value as DateRange);\n setLastApplied(value as DateRange);\n }, [isControlled, vFrom, vTo]);\n // Legacy-controlled (no `onApply`) keeps prior semantics: `value` drives render\n // directly. Otherwise the draft is truth.\n const current: DateRange = isControlled && !applyMode ? (value as DateRange) : draft;\n // The trigger label shows the last-committed range in apply mode; in legacy it\n // tracks `current` (so live edits stay reflected, as before).\n const displayed: DateRange = applyMode ? lastApplied : current;\n const [open, setOpen] = React.useState(false);\n const [view, setView] = React.useState(() => startOfMonth(initial.from ?? new Date()));\n const [hover, setHover] = React.useState<Date | null>(null);\n // Editable-inputs (showInputs) mirror the current range; the month-jump menu\n // (monthDropdown) tracks a year while the user browses it.\n const [fromText, setFromText] = React.useState('');\n const [toText, setToText] = React.useState('');\n const [menuOpen, setMenuOpen] = React.useState(false);\n const [menuYear, setMenuYear] = React.useState(() => view.getFullYear());\n const wrapRef = React.useRef<HTMLDivElement>(null);\n const popoverRef = React.useRef<HTMLDivElement>(null);\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n\n // Portaled to body (escapes overflow ancestors) with flip/clamp and\n // scroll/resize reposition; Escape and outside-click return focus to the\n // trigger (a11y) — same primitive as MultiCombobox above.\n const pos = usePopoverPosition(wrapRef, popoverRef, {\n open,\n side: 'bottom',\n align: 'start',\n offset: 6,\n });\n\n const closeWithoutCommit = React.useCallback(() => {\n if (applyMode) setDraft(lastApplied);\n setOpen(false);\n onOpenChange?.(false);\n }, [applyMode, lastApplied, onOpenChange]);\n\n useDismiss({\n open,\n onDismiss: closeWithoutCommit,\n refs: [wrapRef, popoverRef],\n returnFocusRef: triggerRef,\n });\n\n // Each panel renders ~42 Date cells. Without memoization, every\n // setHover() triggered a full rebuild of both panels' grids on every\n // mouse movement over the calendar. Memo keyed on `view` only.\n const monthGrid0 = React.useMemo(() => buildMonthGrid(view, 0), [view]);\n const monthGrid1 = React.useMemo(() => buildMonthGrid(view, 1), [view]);\n\n const isDisabled = (d: Date) =>\n !!(\n (minDate && d < new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate())) ||\n (maxDate && d > new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate())) ||\n isDateDisabled?.(d)\n );\n\n const inRange = (d: Date) => {\n if (!current.from) return false;\n const end = current.to ?? hover;\n if (!end) return isSameDay(d, current.from);\n const a = current.from < end ? current.from : end;\n const b = current.from < end ? end : current.from;\n return d >= new Date(a.getFullYear(), a.getMonth(), a.getDate()) &&\n d <= new Date(b.getFullYear(), b.getMonth(), b.getDate());\n };\n\n // Ordered span ends (handles hover-preview when `to` is still null). Drives the\n // continuous-band rounding: a cell rounds left at `a`/week-start, right at\n // `b`/week-end.\n const spanBounds = (): { a: Date; b: Date } | null => {\n if (!current.from) return null;\n const end = current.to ?? hover;\n if (!end) return { a: current.from, b: current.from };\n return current.from <= end ? { a: current.from, b: end } : { a: end, b: current.from };\n };\n\n // Apply a new range honoring apply/legacy mode (same split as a day click).\n const setRange = (next: DateRange) => {\n if (applyMode) setDraft(next);\n else onChange?.(next);\n };\n\n // Keep the editable inputs in sync with the current range.\n const curFrom = current.from?.getTime() ?? 0;\n const curTo = current.to?.getTime() ?? 0;\n React.useEffect(() => {\n setFromText(current.from ? formatDate(current.from, fmt) : '');\n setToText(current.to ? formatDate(current.to, fmt) : '');\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [curFrom, curTo, fmt]);\n\n const commitInput = (which: 'from' | 'to', text: string) => {\n const parsed = parseDate(text, fmt);\n if (!parsed || isDisabled(parsed)) {\n // Revert the field to the current value's formatted form.\n if (which === 'from') setFromText(current.from ? formatDate(current.from, fmt) : '');\n else setToText(current.to ? formatDate(current.to, fmt) : '');\n return;\n }\n const next: DateRange = which === 'from'\n ? (current.to && current.to < parsed ? { from: current.to, to: parsed } : { from: parsed, to: current.to })\n : (current.from && parsed < current.from ? { from: parsed, to: current.from } : { from: current.from, to: parsed });\n setRange(next);\n setView(startOfMonth(parsed));\n };\n\n const jumpToMonth = (monthIndex: number) => {\n setView(new Date(menuYear, monthIndex, 1));\n setMenuOpen(false);\n };\n\n const click = (d: Date) => {\n let next: DateRange;\n if (!current.from || (current.from && current.to)) next = { from: d, to: null };\n else {\n const from = current.from;\n next = d < from ? { from: d, to: from } : { from, to: d };\n }\n if (applyMode) setDraft(next);\n else onChange?.(next);\n };\n\n // Commits a range and closes. In apply mode this fires `onApply` (and `onChange`\n // when controlled, to keep `value` in sync). In legacy mode, only preset commits\n // propagate via `onChange`; the bare \"Apply\" button stays close-only as before.\n const commit = (next: DateRange, fromPreset = false) => {\n if (applyMode) {\n onApply!(next);\n setLastApplied(next);\n setDraft(next);\n if (isControlled) onChange?.(next);\n } else if (fromPreset) {\n onChange?.(next);\n }\n setOpen(false);\n onOpenChange?.(false);\n };\n\n const clear = () => {\n // \"Limpiar\" resetea el FILTRO, no solo el draft: en apply mode commitea el\n // rango vacío (dispara onApply + cierra). Antes solo reseteaba el draft y,\n // como \"Aplicar\" exige from+to, el estado limpio nunca se podía aplicar →\n // no se podía volver a \"sin filtro\".\n if (applyMode) commit(EMPTY_RANGE);\n else onChange?.(EMPTY_RANGE);\n };\n\n const toggleOpen = () => {\n if (open) closeWithoutCommit();\n else { setOpen(true); onOpenChange?.(true); }\n };\n\n const label = displayed.from\n ? displayed.to\n ? `${formatDate(displayed.from, fmt)} → ${formatDate(displayed.to, fmt)}`\n : `${formatDate(displayed.from, fmt)} → …`\n : locale['picker.selectRange'];\n\n const renderMonth = (offset: number) => {\n const { month: m, cells } = offset === 0 ? monthGrid0 : monthGrid1;\n const bounds = spanBounds();\n // Only paint the band for a real (multi-day) span; a lone endpoint shows\n // just its circle.\n const isMultiDay = !!bounds && !isSameDay(bounds.a, bounds.b);\n return (\n <div className=\"daterange__month\">\n {/* The dropdown owns the month label when enabled; otherwise a static title. */}\n {!monthDropdown && <div className=\"daterange__title\">{monthNames[m.getMonth()]} {m.getFullYear()}</div>}\n <div className=\"daterange__grid\">\n {weekdays.map((w, i) => <span key={i} className=\"daterange__dow\">{w}</span>)}\n {cells.map((d, i) => {\n if (!d) return <span key={`b${i}`} />;\n const sel = (current.from && isSameDay(d, current.from)) || (current.to && isSameDay(d, current.to));\n const band = inRange(d) && isMultiDay;\n // Column 0 = first weekday (Mon), 6 = last (Sun): the header row is 7\n // cells, so `i % 7` is the cell's column.\n const col = i % 7;\n const bandStart = band && !!bounds && (isSameDay(d, bounds.a) || col === 0);\n const bandEnd = band && !!bounds && (isSameDay(d, bounds.b) || col === 6);\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(\n 'daterange__day',\n sel && 'is-selected',\n band && 'is-band',\n bandStart && 'is-band-start',\n bandEnd && 'is-band-end',\n today && 'is-today',\n off && 'is-disabled',\n )}\n disabled={!!off}\n onMouseEnter={() => setHover(d)}\n onClick={() => click(d)}\n >{d.getDate()}</button>\n );\n })}\n </div>\n </div>\n );\n };\n\n // Month/year jump menu (monthDropdown). Inline (not a Portal) — it lives inside\n // the already-portaled popover and is dismissed by selecting a month.\n const renderMonthMenu = () => (\n <div className=\"daterange__menu\" role=\"dialog\" aria-label={locale['daterange.jumpMonth']}>\n <div className=\"daterange__menu-year\">\n <button type=\"button\" onClick={() => setMenuYear((y) => y - 1)} aria-label={locale['picker.prevYear']}><ChevronLeft size={16} /></button>\n <span>{menuYear}</span>\n <button type=\"button\" onClick={() => setMenuYear((y) => y + 1)} aria-label={locale['picker.nextYear']}><ChevronRight size={16} /></button>\n </div>\n <div className=\"daterange__menu-grid\">\n {monthNames.map((name, idx) => (\n <button\n type=\"button\"\n key={name}\n className={cx('daterange__menu-month', view.getMonth() === idx && view.getFullYear() === menuYear && 'is-current')}\n onClick={() => jumpToMonth(idx)}\n >{name.slice(0, 3)}</button>\n ))}\n </div>\n </div>\n );\n\n return (\n <div ref={wrapRef} className={cx('daterange', invalid && 'is-invalid', disabled && 'is-disabled', className)}>\n <button\n ref={triggerRef}\n id={id}\n type=\"button\"\n className=\"daterange__trigger\"\n disabled={disabled}\n onClick={toggleOpen}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n >\n <span className=\"daterange__icon\" aria-hidden=\"true\"><CalendarIcon size={16} /></span>\n <span>{label}</span>\n </button>\n {open && (\n <Portal>\n <div\n ref={popoverRef}\n className={cx('daterange__popover', 'is-floating', months === 1 && 'daterange__popover--compact')}\n role=\"dialog\"\n onMouseLeave={() => setHover(null)}\n style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n visibility: pos.ready ? 'visible' : 'hidden',\n }}\n >\n {presets && presets.length > 0 && (\n <ul className=\"daterange__presets\">\n {presets.map((p, i) => (\n <li key={i}>\n <button type=\"button\" onClick={() => commit(p.range(), true)}>{p.label}</button>\n </li>\n ))}\n </ul>\n )}\n <div className=\"daterange__panes\">\n {showInputs && (\n <div className=\"daterange__inputs\">\n <label className=\"daterange__field\">\n <span className=\"daterange__field-label\">{locale['daterange.from']}</span>\n <input\n type=\"text\"\n className=\"daterange__field-input\"\n value={fromText}\n placeholder={dateFormatPlaceholder(fmt)}\n onChange={(e) => setFromText(e.target.value)}\n onBlur={(e) => commitInput('from', e.target.value)}\n onKeyDown={(e) => { if (e.key === 'Enter') commitInput('from', (e.target as HTMLInputElement).value); }}\n />\n </label>\n <label className=\"daterange__field\">\n <span className=\"daterange__field-label\">{locale['daterange.to']}</span>\n <input\n type=\"text\"\n className=\"daterange__field-input\"\n value={toText}\n placeholder={dateFormatPlaceholder(fmt)}\n onChange={(e) => setToText(e.target.value)}\n onBlur={(e) => commitInput('to', e.target.value)}\n onKeyDown={(e) => { if (e.key === 'Enter') commitInput('to', (e.target as HTMLInputElement).value); }}\n />\n </label>\n </div>\n )}\n <div className=\"daterange__nav\">\n <button type=\"button\" onClick={() => setView((v) => addMonths(v, -1))} aria-label={locale['calendar.prevMonth']}><ChevronLeft size={16} /></button>\n {monthDropdown ? (\n <div className=\"daterange__monthjump\">\n <button\n type=\"button\"\n className=\"daterange__monthjump-trigger\"\n onClick={() => { setMenuYear(view.getFullYear()); setMenuOpen((o) => !o); }}\n aria-haspopup=\"dialog\"\n aria-expanded={menuOpen}\n >\n <span>{monthNames[view.getMonth()]} {view.getFullYear()}</span>\n <ChevronDown size={16} aria-hidden />\n </button>\n {menuOpen && renderMonthMenu()}\n </div>\n ) : (\n <span />\n )}\n <button type=\"button\" onClick={() => setView((v) => addMonths(v, 1))} aria-label={locale['calendar.nextMonth']}><ChevronRight size={16} /></button>\n </div>\n <div className={cx('daterange__months', months === 1 && 'daterange__months--single')}>\n {renderMonth(0)}\n {months === 2 && renderMonth(1)}\n </div>\n <div className=\"daterange__actions\">\n <button type=\"button\" className=\"daterange__clear\" onClick={clear}>{locale['common.clear']}</button>\n <button type=\"button\" className=\"daterange__apply\" onClick={() => commit(current)} disabled={!current.from || !current.to}>{locale['common.apply']}</button>\n </div>\n </div>\n </div>\n </Portal>\n )}\n </div>\n );\n}\n\n// ---------- Command Palette (⌘K) ----------------------------------------\nexport interface CommandItem {\n id: string;\n label: string;\n description?: string;\n group?: string;\n icon?: React.ReactNode;\n shortcut?: string;\n keywords?: string[];\n onRun: () => void;\n}\n\nexport interface CommandPaletteProps {\n open: boolean;\n onClose: () => void;\n items: CommandItem[];\n placeholder?: string;\n emptyMessage?: string;\n hotkey?: string; // 'mod+k'\n}\n\nfunction matchesHotkey(e: KeyboardEvent, hk: string) {\n const parts = hk.toLowerCase().split('+');\n const key = parts[parts.length - 1];\n const mods = parts.slice(0, -1);\n if (e.key.toLowerCase() !== key) return false;\n for (const m of mods) {\n if (m === 'mod' && !(e.metaKey || e.ctrlKey)) return false;\n if (m === 'ctrl' && !e.ctrlKey) return false;\n if (m === 'meta' && !e.metaKey) return false;\n if (m === 'shift' && !e.shiftKey) return false;\n if (m === 'alt' && !e.altKey) return false;\n }\n return true;\n}\n\nexport function CommandPalette({\n open, onClose, items,\n placeholder,\n emptyMessage,\n}: CommandPaletteProps) {\n const locale = useLocale();\n const ph = placeholder ?? locale['picker.searchCommands'];\n const empty = emptyMessage ?? locale['common.noResults'];\n const [query, setQuery] = React.useState('');\n const [active, setActive] = React.useState(0);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const listRef = React.useRef<HTMLUListElement>(null);\n\n const filtered = React.useMemo(() => {\n const q = query.trim().toLowerCase();\n if (!q) return items;\n return items.filter((it) => {\n const hay = [it.label, it.description, it.group, ...(it.keywords ?? [])].join(' ').toLowerCase();\n return hay.includes(q);\n });\n }, [items, query]);\n\n // group preserve order\n const grouped = React.useMemo(() => {\n const order: string[] = [];\n const map = new Map<string, CommandItem[]>();\n for (const it of filtered) {\n const g = it.group ?? '';\n if (!map.has(g)) { map.set(g, []); order.push(g); }\n map.get(g)!.push(it);\n }\n return { order, map };\n }, [filtered]);\n\n const flat = filtered;\n\n React.useEffect(() => {\n if (open) {\n setQuery(''); setActive(0);\n requestAnimationFrame(() => inputRef.current?.focus());\n }\n }, [open]);\n\n React.useEffect(() => { setActive(0); }, [query]);\n\n React.useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n else if (e.key === 'ArrowDown') { e.preventDefault(); setActive((a) => Math.min(flat.length - 1, a + 1)); }\n else if (e.key === 'ArrowUp') { e.preventDefault(); setActive((a) => Math.max(0, a - 1)); }\n else if (e.key === 'Enter') {\n e.preventDefault();\n const it = flat[active];\n if (it) { it.onRun(); onClose(); }\n }\n };\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n }, [open, flat, active, onClose]);\n\n React.useEffect(() => {\n const el = listRef.current?.querySelector(`[data-cmd-idx=\"${active}\"]`);\n el?.scrollIntoView({ block: 'nearest' });\n }, [active]);\n\n if (!open) return null;\n let idx = -1;\n return (\n <div className=\"cmdk__overlay\" role=\"dialog\" aria-modal=\"true\" aria-label={locale['picker.commandPalette']} onMouseDown={(e) => { if (e.target === e.currentTarget) onClose(); }}>\n <div className=\"cmdk__panel\">\n <div className=\"cmdk__searchbar\">\n <span className=\"cmdk__icon\" aria-hidden=\"true\"><Search size={16} /></span>\n <input\n ref={inputRef}\n className=\"cmdk__input\"\n value={query}\n placeholder={ph}\n onChange={(e) => setQuery(e.target.value)}\n />\n <kbd className=\"cmdk__esc\">Esc</kbd>\n </div>\n <ul ref={listRef} className=\"cmdk__list\" role=\"listbox\">\n {flat.length === 0 && <li className=\"cmdk__empty\">{empty}</li>}\n {grouped.order.map((g) => (\n <React.Fragment key={g || '__none'}>\n {g && <li className=\"cmdk__group\" aria-hidden=\"true\">{g}</li>}\n {grouped.map.get(g)!.map((it) => {\n idx++;\n const i = idx;\n return (\n <li\n key={it.id}\n role=\"option\"\n aria-selected={i === active}\n data-cmd-idx={i}\n className={cx('cmdk__item', i === active && 'is-active')}\n onMouseEnter={() => setActive(i)}\n onMouseDown={(e) => { e.preventDefault(); it.onRun(); onClose(); }}\n >\n {it.icon && <span className=\"cmdk__item-icon\" aria-hidden=\"true\">{it.icon}</span>}\n <span className=\"cmdk__item-body\">\n <span className=\"cmdk__item-label\">{it.label}</span>\n {it.description && <span className=\"cmdk__item-desc\">{it.description}</span>}\n </span>\n {it.shortcut && <kbd className=\"cmdk__kbd\">{it.shortcut}</kbd>}\n </li>\n );\n })}\n </React.Fragment>\n ))}\n </ul>\n </div>\n </div>\n );\n}\n\nexport interface UseCommandPaletteOptions {\n hotkey?: string; // default 'mod+k'\n}\n\nexport function useCommandPalette({ hotkey = 'mod+k' }: UseCommandPaletteOptions = {}) {\n const [open, setOpen] = React.useState(false);\n React.useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (matchesHotkey(e, hotkey)) {\n e.preventDefault();\n setOpen((o) => !o);\n }\n };\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n }, [hotkey]);\n return { open, setOpen, close: () => setOpen(false), toggle: () => setOpen((o) => !o) };\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Charts.tsx"],"names":[],"mappings":";;;AA2CA,IAAM,OAAA,GAAU;AAAA,EACd,sBAAA;AAAA,EACA,wBAAA;AAAA,EACA,0BAAA;AAAA,EACA,sBAAA;AAAA,EACA,sBAAA;AAAA,EACA,qBAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA;AAqCA,IAAM,kBAAA,GAAmC,kBAAA;AAKzC,SAAS,iBAAA,CACP,IAAA,EACA,MAAA,GAAS,IAAA,EACgB;AACzB,EAAA,MAAM,KAAA,GAAiC,EAAE,QAAA,EAAU,IAAA,CAAK,iBAAiB,kBAAA,EAAmB;AAC5F,EAAA,IAAI,IAAA,CAAK,cAAA,EAAgB,KAAA,CAAM,aAAA,GAAgB,IAAA,CAAK,cAAA;AACpD,EAAA,IAAI,MAAA,IAAU,KAAK,UAAA,EAAY;AAC7B,IAAA,KAAA,CAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,IAAA,KAAA,CAAM,UAAA,GAAa,KAAA;AACnB,IAAA,KAAA,CAAM,MAAA,GAAS,EAAA;AAAA,EACjB;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,eAAe,cAAA,EAAiE;AACvF,EAAA,OAAO,cAAA,GAAiB,EAAE,aAAA,EAAe,CAAC,CAAA,KAAc,cAAA,CAAe,MAAA,CAAO,CAAC,CAAC,CAAA,EAAE,GAAI,EAAC;AACzF;AAEA,SAAS,kBAAkB,cAAA,EAAiE;AAC1F,EAAA,OAAO,cAAA,GAAiB,EAAE,SAAA,EAAW,CAAC,CAAA,KAAe,cAAA,CAAe,MAAA,CAAO,CAAC,CAAC,CAAA,EAAE,GAAI,EAAC;AACtF;AAUO,SAAS,SAAA,CAAmB;AAAA,EACjC,QAAA,EAAU,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,WAAA;AAAA,EAAa,MAAA;AAAA,EAChC,MAAA,GAAS,GAAA;AAAA,EAAK,SAAA;AAAA,EAAW,SAAA;AAAA,EACzB,QAAA,GAAW,IAAA;AAAA,EAAM,UAAA,GAAa,IAAA;AAAA,EAAM,MAAA,GAAS,IAAA;AAAA,EAAM,KAAA;AAAA,EACnD,cAAA;AAAA,EAAgB,aAAA;AAAA,EAAe,UAAA;AAAA,EAAY;AAC7C,CAAA,EAAsB;AACpB,EAAA,MAAM,QAAA,GAAW,KAAA,KAAU,MAAA,GAAS,UAAA,GAAa,QAAA,CAAA;AACjD,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,SAAS,SAAS,CAAA,EAAG,IAAA,EAAK,KAAA,EAAM,YAAA,EAAY,SAAA,EAC7D,QAAA,kBAAA,GAAA,CAAC,CAAA,CAAE,qBAAF,EAAsB,KAAA,EAAM,MAAA,EAAO,MAAA,EAClC,QAAA,kBAAA,IAAA,CAAC,CAAA,CAAE,SAAA,EAAF,EAAY,MAAY,MAAA,EAAQ,EAAE,GAAA,EAAK,CAAA,EAAG,OAAO,EAAA,EAAI,MAAA,EAAQ,CAAA,EAAG,IAAA,EAAM,GAAE,EACtE,QAAA,EAAA;AAAA,IAAA,QAAA,oBAAY,GAAA,CAAC,EAAE,aAAA,EAAF,EAAgB,QAAO,uBAAA,EAAwB,eAAA,EAAgB,KAAA,EAAM,QAAA,EAAU,KAAA,EAAO,CAAA;AAAA,oBACpG,GAAA,CAAC,EAAE,KAAA,EAAF,EAAQ,SAAS,WAAA,EAAa,MAAA,EAAO,oBAAmB,QAAA,EAAU,EAAA,EAAI,UAAU,KAAA,EAAO,QAAA,EAAU,OAAQ,GAAG,iBAAA,CAAkB,EAAE,cAAA,EAAgB,aAAA,EAAe,UAAA,EAAY,CAAA,EAAG,CAAA;AAAA,oBAC/K,GAAA,CAAC,CAAA,CAAE,KAAA,EAAF,EAAQ,QAAO,kBAAA,EAAmB,QAAA,EAAU,EAAA,EAAI,QAAA,EAAU,OAAO,QAAA,EAAU,KAAA,EAAQ,GAAG,cAAA,CAAe,cAAc,CAAA,EAAG,CAAA;AAAA,wBACtH,CAAA,CAAE,OAAA,EAAF,EAAU,YAAA,EAAc,EAAE,YAAY,mBAAA,EAAqB,MAAA,EAAQ,iCAAA,EAAmC,YAAA,EAAc,GAAG,QAAA,EAAU,EAAA,IAAO,GAAG,iBAAA,CAAkB,cAAc,CAAA,EAAG,CAAA;AAAA,IAC9K,UAAA,wBAAe,CAAA,CAAE,MAAA,EAAF,EAAS,YAAA,EAAc,EAAE,QAAA,EAAU,EAAA,EAAG,EAAG,CAAA;AAAA,IACxD,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBACd,GAAA;AAAA,MAAC,CAAA,CAAE,IAAA;AAAA,MAAF;AAAA,QAEC,IAAA,EAAM,QAAA;AAAA,QACN,SAAS,CAAA,CAAE,GAAA;AAAA,QACX,IAAA,EAAM,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,GAAA;AAAA,QACnB,QAAQ,CAAA,CAAE,KAAA,IAAS,OAAA,CAAQ,CAAA,GAAI,QAAQ,MAAM,CAAA;AAAA,QAC7C,WAAA,EAAa,CAAA;AAAA,QACb,GAAA,EAAK,KAAA;AAAA,QACL,SAAA,EAAW,EAAE,CAAA,EAAG,CAAA;AAAE,OAAA;AAAA,MAPb,CAAA,CAAE;AAAA,KASV;AAAA,GAAA,EACH,GACF,CAAA,EACF,CAAA;AAEJ;AAOO,SAAS,SAAA,CAAmB;AAAA,EACjC,QAAA,EAAU,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,WAAA;AAAA,EAAa,MAAA;AAAA,EAChC,MAAA,GAAS,GAAA;AAAA,EAAK,SAAA;AAAA,EAAW,SAAA;AAAA,EACzB,QAAA,GAAW,IAAA;AAAA,EAAM,UAAA,GAAa,IAAA;AAAA,EAAM,MAAA,GAAS,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,OAAA;AAAA,EAC1D,cAAA;AAAA,EAAgB,aAAA;AAAA,EAAe,UAAA;AAAA,EAAY;AAC7C,CAAA,EAAsB;AACpB,EAAA,MAAM,QAAA,GAAW,KAAA,KAAU,MAAA,GAAS,UAAA,GAAa,QAAA,CAAA;AACjD,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,SAAS,SAAS,CAAA,EAAG,IAAA,EAAK,KAAA,EAAM,YAAA,EAAY,SAAA,EAC7D,QAAA,kBAAA,GAAA,CAAC,CAAA,CAAE,qBAAF,EAAsB,KAAA,EAAM,MAAA,EAAO,MAAA,EAClC,QAAA,kBAAA,IAAA,CAAC,CAAA,CAAE,SAAA,EAAF,EAAY,MAAY,MAAA,EAAQ,EAAE,GAAA,EAAK,CAAA,EAAG,OAAO,EAAA,EAAI,MAAA,EAAQ,CAAA,EAAG,IAAA,EAAM,GAAE,EACtE,QAAA,EAAA;AAAA,IAAA,QAAA,oBAAY,GAAA,CAAC,EAAE,aAAA,EAAF,EAAgB,QAAO,uBAAA,EAAwB,eAAA,EAAgB,KAAA,EAAM,QAAA,EAAU,KAAA,EAAO,CAAA;AAAA,oBACpG,GAAA,CAAC,EAAE,KAAA,EAAF,EAAQ,SAAS,WAAA,EAAa,MAAA,EAAO,oBAAmB,QAAA,EAAU,EAAA,EAAI,UAAU,KAAA,EAAO,QAAA,EAAU,OAAQ,GAAG,iBAAA,CAAkB,EAAE,cAAA,EAAgB,aAAA,EAAe,UAAA,EAAY,CAAA,EAAG,CAAA;AAAA,oBAC/K,GAAA,CAAC,CAAA,CAAE,KAAA,EAAF,EAAQ,QAAO,kBAAA,EAAmB,QAAA,EAAU,EAAA,EAAI,QAAA,EAAU,OAAO,QAAA,EAAU,KAAA,EAAQ,GAAG,cAAA,CAAe,cAAc,CAAA,EAAG,CAAA;AAAA,wBACtH,CAAA,CAAE,OAAA,EAAF,EAAU,YAAA,EAAc,EAAE,YAAY,mBAAA,EAAqB,MAAA,EAAQ,iCAAA,EAAmC,YAAA,EAAc,GAAG,QAAA,EAAU,EAAA,IAAO,GAAG,iBAAA,CAAkB,cAAc,CAAA,EAAG,CAAA;AAAA,IAC9K,UAAA,wBAAe,CAAA,CAAE,MAAA,EAAF,EAAS,YAAA,EAAc,EAAE,QAAA,EAAU,EAAA,EAAG,EAAG,CAAA;AAAA,IACxD,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBACd,GAAA;AAAA,MAAC,CAAA,CAAE,IAAA;AAAA,MAAF;AAAA,QAEC,IAAA,EAAM,QAAA;AAAA,QACN,SAAS,CAAA,CAAE,GAAA;AAAA,QACX,IAAA,EAAM,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,GAAA;AAAA,QACnB,OAAA,EAAS,UAAU,GAAA,GAAM,MAAA;AAAA,QACzB,QAAQ,CAAA,CAAE,KAAA,IAAS,OAAA,CAAQ,CAAA,GAAI,QAAQ,MAAM,CAAA;AAAA,QAC7C,MAAM,CAAA,CAAE,KAAA,IAAS,OAAA,CAAQ,CAAA,GAAI,QAAQ,MAAM,CAAA;AAAA,QAC3C,WAAA,EAAa,IAAA;AAAA,QACb,WAAA,EAAa;AAAA,OAAA;AAAA,MARR,CAAA,CAAE;AAAA,KAUV;AAAA,GAAA,EACH,GACF,CAAA,EACF,CAAA;AAEJ;AAQA,IAAM,UAAA,GAAa,CAAA;AAEZ,SAAS,QAAA,CAAkB;AAAA,EAChC,QAAA,EAAU,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,WAAA;AAAA,EAAa,MAAA;AAAA,EAChC,MAAA,GAAS,GAAA;AAAA,EAAK,SAAA;AAAA,EAAW,SAAA;AAAA,EACzB,MAAA,GAAS,UAAA;AAAA,EAAY,OAAA;AAAA,EAAS,QAAA,GAAW,IAAA;AAAA,EAAM,UAAA,GAAa,IAAA;AAAA,EAC5D,cAAA;AAAA,EAAgB,aAAA;AAAA,EAAe,UAAA;AAAA,EAAY;AAC7C,CAAA,EAAqB;AACnB,EAAA,MAAM,eAAe,MAAA,KAAW,YAAA;AAIhC,EAAA,MAAM,SAAA,GAAY,YAAA,GAAe,CAAC,CAAA,EAAG,UAAA,EAAY,UAAA,EAAY,CAAC,CAAA,GAAI,CAAC,UAAA,EAAY,UAAA,EAAY,CAAA,EAAG,CAAC,CAAA;AAC/F,EAAA,MAAM,OAAA,GAAU,OAAO,MAAA,GAAS,CAAA;AAChC,EAAA,MAAM,WAAW,iBAAA,CAAkB,EAAE,cAAA,EAAgB,aAAA,EAAe,YAAY,CAAA;AAChF,EAAA,MAAM,mBAAmB,iBAAA,CAAkB,EAAE,gBAAgB,aAAA,EAAe,UAAA,IAAc,KAAK,CAAA;AAC/F,EAAA,2BACG,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,OAAA,EAAS,SAAS,CAAA,EAAG,IAAA,EAAK,KAAA,EAAM,YAAA,EAAY,WAC7D,QAAA,kBAAA,GAAA,CAAC,CAAA,CAAE,mBAAA,EAAF,EAAsB,OAAM,MAAA,EAAO,MAAA,EAClC,QAAA,kBAAA,IAAA,CAAC,CAAA,CAAE,UAAF,EAAW,IAAA,EAAY,MAAA,EAAQ,YAAA,GAAe,aAAa,YAAA,EAAc,MAAA,EAAQ,EAAE,GAAA,EAAK,GAAG,KAAA,EAAO,EAAA,EAAI,QAAQ,CAAA,EAAG,IAAA,EAAM,GAAE,EACvH,QAAA,EAAA;AAAA,IAAA,QAAA,oBAAY,GAAA,CAAC,CAAA,CAAE,aAAA,EAAF,EAAgB,MAAA,EAAO,uBAAA,EAAwB,eAAA,EAAgB,KAAA,EAAM,QAAA,EAAU,YAAA,EAAc,UAAA,EAAY,CAAC,YAAA,EAAc,CAAA;AAAA,IACrI,+BACC,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,EAAE,KAAA,EAAF,EAAQ,IAAA,EAAK,QAAA,EAAS,QAAO,kBAAA,EAAmB,QAAA,EAAU,EAAA,EAAI,QAAA,EAAU,OAAO,QAAA,EAAU,KAAA,EAAQ,GAAG,cAAA,CAAe,cAAc,CAAA,EAAG,CAAA;AAAA,0BACpI,CAAA,CAAE,KAAA,EAAF,EAAQ,OAAA,EAAS,WAAA,EAAa,MAAK,UAAA,EAAW,MAAA,EAAO,oBAAmB,QAAA,EAAU,EAAA,EAAI,UAAU,KAAA,EAAO,QAAA,EAAU,OAAO,KAAA,EAAO,EAAA,EAAK,GAAG,gBAAA,EAAkB;AAAA,KAAA,EAC5J,oBAEA,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,CAAA,CAAE,KAAA,EAAF,EAAQ,OAAA,EAAS,aAAa,MAAA,EAAO,kBAAA,EAAmB,QAAA,EAAU,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,KAAA,EAAQ,GAAG,QAAA,EAAU,CAAA;AAAA,sBACvH,GAAA,CAAC,CAAA,CAAE,KAAA,EAAF,EAAQ,QAAO,kBAAA,EAAmB,QAAA,EAAU,EAAA,EAAI,QAAA,EAAU,OAAO,QAAA,EAAU,KAAA,EAAQ,GAAG,cAAA,CAAe,cAAc,CAAA,EAAG;AAAA,KAAA,EACzH,CAAA;AAAA,oBAEF,GAAA,CAAC,EAAE,OAAA,EAAF,EAAU,cAAc,EAAE,UAAA,EAAY,mBAAA,EAAqB,MAAA,EAAQ,iCAAA,EAAmC,YAAA,EAAc,GAAG,QAAA,EAAU,EAAA,EAAG,EAAG,MAAA,EAAQ,EAAE,IAAA,EAAM,oBAAmB,EAAI,GAAG,iBAAA,CAAkB,cAAc,CAAA,EAAG,CAAA;AAAA,IACpN,UAAA,wBAAe,CAAA,CAAE,MAAA,EAAF,EAAS,YAAA,EAAc,EAAE,QAAA,EAAU,EAAA,EAAG,EAAG,CAAA;AAAA,IACxD,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM;AAGpB,MAAA,MAAM,SAAA,GAAY,OAAA,GAAW,CAAA,KAAM,OAAA,GAAU,SAAA,GAAY,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAK,SAAA;AACzE,MAAA,uBACE,GAAA;AAAA,QAAC,CAAA,CAAE,GAAA;AAAA,QAAF;AAAA,UAEC,SAAS,CAAA,CAAE,GAAA;AAAA,UACX,IAAA,EAAM,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,GAAA;AAAA,UACnB,OAAA,EAAS,UAAU,GAAA,GAAM,MAAA;AAAA,UACzB,MAAM,CAAA,CAAE,KAAA,IAAS,OAAA,CAAQ,CAAA,GAAI,QAAQ,MAAM,CAAA;AAAA,UAC3C,MAAA,EAAQ,SAAA;AAAA,UACR,UAAA,EAAY;AAAA,SAAA;AAAA,QANP,CAAA,CAAE;AAAA,OAOT;AAAA,IAEJ,CAAC;AAAA,GAAA,EACH,GACF,CAAA,EACF,CAAA;AAEJ;AAeO,SAAS,UAAA,CAAW;AAAA,EACzB,QAAA,EAAU,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,MAAA,GAAS,GAAA;AAAA,EAAK,SAAA;AAAA,EAAW,SAAA;AAAA,EAC5C,WAAA;AAAA,EAAa,UAAA,GAAa,IAAA;AAAA,EAAM,WAAA,GAAc,EAAA;AAAA,EAAI,WAAA,GAAc,EAAA;AAAA,EAChE,aAAA;AAAA,EAAe;AACjB,CAAA,EAAoB;AAElB,EAAA,MAAM,YAAA,GAAgB,aAAA,IAAiB,cAAA,GACnC,EAAE,SAAA,EAAW,CAAC,CAAA,EAAY,CAAA,KAAe,CAAC,cAAA,GAAiB,cAAA,CAAe,MAAA,CAAO,CAAC,CAAC,CAAA,GAAI,CAAA,EAAG,aAAA,GAAgB,aAAA,CAAc,MAAA,CAAO,CAAC,CAAC,CAAA,GAAI,CAAC,CAAA,EAAE,GACxI,EAAC;AACL,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,oBAAA,EAAsB,SAAS,CAAA,EAAG,IAAA,EAAK,KAAA,EAAM,YAAA,EAAY,SAAA,EAC1E,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,SAAI,SAAA,EAAU,mBAAA,EAAoB,KAAA,EAAO,EAAE,QAAO,EACjD,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,CAAA,CAAE,mBAAA,EAAF,EAAsB,KAAA,EAAM,MAAA,EAAO,QAAO,MAAA,EACzC,QAAA,kBAAA,IAAA,CAAC,CAAA,CAAE,QAAA,EAAF,EACC,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,CAAA,CAAE,OAAA,EAAF,EAAU,YAAA,EAAc,EAAE,UAAA,EAAY,mBAAA,EAAqB,MAAA,EAAQ,iCAAA,EAAmC,cAAc,CAAA,EAAG,QAAA,EAAU,EAAA,EAAG,EAAI,GAAG,YAAA,EAAc,CAAA;AAAA,wBAC1J,GAAA;AAAA,UAAC,CAAA,CAAE,GAAA;AAAA,UAAF;AAAA,YACC,IAAA;AAAA,YACA,OAAA,EAAQ,OAAA;AAAA,YACR,OAAA,EAAQ,MAAA;AAAA,YACR,WAAA;AAAA,YACA,WAAA;AAAA,YACA,YAAA,EAAc,CAAA;AAAA,YACd,MAAA,EAAO,mBAAA;AAAA,YAEN,eAAK,GAAA,CAAI,CAAC,GAAG,CAAA,qBAAM,GAAA,CAAC,EAAE,IAAA,EAAF,EAAe,IAAA,EAAM,CAAA,CAAE,SAAS,OAAA,CAAQ,CAAA,GAAI,QAAQ,MAAM,CAAA,EAAA,EAA9C,CAAiD,CAAE;AAAA;AAAA;AACtF,OAAA,EACF,CAAA,EACF,CAAA;AAAA,MACC,WAAA,oBAAe,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAiB,QAAA,EAAA,WAAA,EAAY;AAAA,KAAA,EAC9D,CAAA;AAAA,IACC,UAAA,oBACC,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,iBAAgB,aAAA,EAAY,MAAA,EACvC,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBACZ,IAAA,CAAC,IAAA,EAAA,EAAgB,WAAU,oBAAA,EACzB,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,sBAAA;AAAA,UACV,KAAA,EAAO,EAAE,UAAA,EAAY,CAAA,CAAE,SAAS,OAAA,CAAQ,CAAA,GAAI,OAAA,CAAQ,MAAM,CAAA;AAAE;AAAA,OAC9D;AAAA,sBACA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,aAAA,GAAgB,cAAc,CAAA,CAAE,IAAI,CAAA,GAAI,CAAA,CAAE,IAAA,EAAK;AAAA,KAAA,EAAA,EAL/E,CAAA,CAAE,IAMX,CACD,CAAA,EACH;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAeO,SAAS,SAAA,CAAmB;AAAA,EACjC,QAAA,EAAU,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,OAAA;AAAA,EACnB,KAAA,GAAQ,GAAA;AAAA,EAAK,MAAA,GAAS,EAAA;AAAA,EAAI,KAAA,GAAQ,sBAAA;AAAA,EAClC,IAAA,GAAO,IAAA;AAAA,EAAM,SAAA;AAAA,EAAW;AAC1B,CAAA,EAAsB;AACpB,EAAA,2BACG,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,WAAA,EAAa,SAAS,CAAA,EAAG,IAAA,EAAK,KAAA,EAAM,YAAA,EAAY,WAAW,KAAA,EAAO,EAAE,OAAO,MAAA,EAAO,EACnG,8BAAC,CAAA,CAAE,mBAAA,EAAF,EAAsB,KAAA,EAAM,QAAO,MAAA,EAAO,MAAA,EACzC,8BAAC,CAAA,CAAE,SAAA,EAAF,EAAY,IAAA,EAAY,MAAA,EAAQ,EAAE,GAAA,EAAK,GAAG,KAAA,EAAO,CAAA,EAAG,QAAQ,CAAA,EAAG,IAAA,EAAM,GAAE,EACtE,QAAA,kBAAA,GAAA;AAAA,IAAC,CAAA,CAAE,IAAA;AAAA,IAAF;AAAA,MACC,IAAA,EAAK,UAAA;AAAA,MACL,OAAA;AAAA,MACA,MAAA,EAAQ,KAAA;AAAA,MACR,WAAA,EAAa,GAAA;AAAA,MACb,IAAA,EAAM,OAAO,KAAA,GAAQ,MAAA;AAAA,MACrB,WAAA,EAAa,OAAO,IAAA,GAAO,CAAA;AAAA,MAC3B,iBAAA,EAAmB;AAAA;AAAA,GACrB,EACF,GACF,CAAA,EACF,CAAA;AAEJ","file":"chunk-EJY4QWHT.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\n\n/**\n * Lightweight chart wrappers. We do NOT bundle Recharts — the host app provides it\n * and passes the modules in via the `recharts` prop so consumers only pay for what they use.\n *\n * Recharts is treated as an implicit peer dependency: install it in the host\n * app if you use any chart component.\n *\n * Usage in a Next.js client component:\n *\n * import * as Recharts from 'recharts';\n * import { LineChart } from '@misael703/elalba-ui';\n * <LineChart recharts={Recharts} data={...} dataKey=\"value\" categoryKey=\"month\" />\n */\n\n// Structural mirror of the Recharts public API. `any` is intentional here:\n// each Recharts component has a different prop shape, and typing them\n// exhaustively would mean depending on `recharts` types — which would force\n// consumers to install recharts even when they don't use any chart.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype RechartsComp = React.ComponentType<any>;\n\nexport type RechartsLike = {\n ResponsiveContainer: RechartsComp;\n LineChart: RechartsComp;\n AreaChart: RechartsComp;\n BarChart: RechartsComp;\n PieChart: RechartsComp;\n Line: RechartsComp;\n Area: RechartsComp;\n Bar: RechartsComp;\n Pie: RechartsComp;\n Cell: RechartsComp;\n CartesianGrid: RechartsComp;\n XAxis: RechartsComp;\n YAxis: RechartsComp;\n Tooltip: RechartsComp;\n Legend: RechartsComp;\n};\n\nconst PALETTE = [\n 'var(--color-primary)',\n 'var(--color-secondary)',\n 'var(--color-primary-900)',\n 'var(--color-success)',\n 'var(--color-warning)',\n 'var(--color-danger)',\n '#6b7e95',\n '#d4a574',\n];\n\nexport interface BaseChartProps<D = any> {\n recharts: RechartsLike;\n data: D[];\n height?: number;\n className?: string;\n ariaLabel?: string;\n}\n\n// Mirror of Recharts' AxisInterval. Controls how category ticks thin on\n// collision so dense series (e.g. daily points) don't crowd the axis.\nexport type AxisInterval =\n | number\n | 'preserveStart'\n | 'preserveEnd'\n | 'preserveStartEnd'\n | 'equidistantPreserveStart'\n | 'equidistantPreserveEnd';\n\n// Shared cartesian controls (Line/Area/Bar). DonutChart/Sparkline don't have a\n// category axis, so they keep BaseChartProps.\nexport interface CartesianChartProps<D = any> extends BaseChartProps<D> {\n categoryKey: keyof D & string;\n series: Array<{ key: keyof D & string; label?: string; color?: string }>;\n showGrid?: boolean;\n showLegend?: boolean;\n /** Format each category-axis tick label, e.g. shorten `2026-05-23`. → XAxis.tickFormatter */\n xTickFormatter?: (value: string) => string;\n /** Thin out category ticks on collision. → XAxis.interval. Default `preserveStartEnd`. */\n xTickInterval?: AxisInterval;\n /** Rotate category-axis labels N degrees (anchors end + reserves height so they don't clip). */\n xTickAngle?: number;\n /** Format numeric values (value-axis ticks + tooltip). */\n valueFormatter?: (value: number) => string;\n}\n\nconst DEFAULT_X_INTERVAL: AxisInterval = 'preserveStartEnd';\n\n// Recharts XAxis/YAxis are `any`-typed (structural mirror), so tick controls go\n// in as a spread. `rotate` is off when the category axis is the Y axis\n// (horizontal bars: those labels are already horizontal).\nfunction categoryTickProps(\n opts: Pick<CartesianChartProps, 'xTickFormatter' | 'xTickInterval' | 'xTickAngle'>,\n rotate = true,\n): Record<string, unknown> {\n const props: Record<string, unknown> = { interval: opts.xTickInterval ?? DEFAULT_X_INTERVAL };\n if (opts.xTickFormatter) props.tickFormatter = opts.xTickFormatter;\n if (rotate && opts.xTickAngle) {\n props.angle = opts.xTickAngle;\n props.textAnchor = 'end';\n props.height = 56; // reserve room so the rotated label isn't clipped\n }\n return props;\n}\n\nfunction valueTickProps(valueFormatter?: (v: number) => string): Record<string, unknown> {\n return valueFormatter ? { tickFormatter: (v: number) => valueFormatter(Number(v)) } : {};\n}\n\nfunction tooltipValueProps(valueFormatter?: (v: number) => string): Record<string, unknown> {\n return valueFormatter ? { formatter: (v: unknown) => valueFormatter(Number(v)) } : {};\n}\n\n// ---------- LineChart ---------------------------------------------------\nexport interface LineChartProps<D = any> extends CartesianChartProps<D> {\n smooth?: boolean;\n /** Interpolation. `monotone` smooths (default, back-compat); `linear` draws honest\n * straight segments — recommended for counts/stepped series (no phantom humps over zeros). */\n curve?: 'linear' | 'monotone';\n}\n\nexport function LineChart<D = any>({\n recharts: R, data, categoryKey, series,\n height = 280, className, ariaLabel,\n showGrid = true, showLegend = true, smooth = true, curve,\n xTickFormatter, xTickInterval, xTickAngle, valueFormatter,\n}: LineChartProps<D>) {\n const lineType = curve ?? (smooth ? 'monotone' : 'linear');\n return (\n <div className={cx('chart', className)} role=\"img\" aria-label={ariaLabel}>\n <R.ResponsiveContainer width=\"100%\" height={height}>\n <R.LineChart data={data} margin={{ top: 8, right: 16, bottom: 0, left: 0 }}>\n {showGrid && <R.CartesianGrid stroke=\"var(--border-default)\" strokeDasharray=\"3 3\" vertical={false} />}\n <R.XAxis dataKey={categoryKey} stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...categoryTickProps({ xTickFormatter, xTickInterval, xTickAngle })} />\n <R.YAxis stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...valueTickProps(valueFormatter)} />\n <R.Tooltip contentStyle={{ background: 'var(--bg-surface)', border: '1px solid var(--border-default)', borderRadius: 8, fontSize: 12 }} {...tooltipValueProps(valueFormatter)} />\n {showLegend && <R.Legend wrapperStyle={{ fontSize: 12 }} />}\n {series.map((s, i) => (\n <R.Line\n key={s.key}\n type={lineType}\n dataKey={s.key}\n name={s.label ?? s.key}\n stroke={s.color ?? PALETTE[i % PALETTE.length]}\n strokeWidth={2}\n dot={false}\n activeDot={{ r: 4 }}\n />\n ))}\n </R.LineChart>\n </R.ResponsiveContainer>\n </div>\n );\n}\n\n// ---------- AreaChart ---------------------------------------------------\nexport interface AreaChartProps<D = any> extends LineChartProps<D> {\n stacked?: boolean;\n}\n\nexport function AreaChart<D = any>({\n recharts: R, data, categoryKey, series,\n height = 280, className, ariaLabel,\n showGrid = true, showLegend = true, smooth = true, curve, stacked,\n xTickFormatter, xTickInterval, xTickAngle, valueFormatter,\n}: AreaChartProps<D>) {\n const lineType = curve ?? (smooth ? 'monotone' : 'linear');\n return (\n <div className={cx('chart', className)} role=\"img\" aria-label={ariaLabel}>\n <R.ResponsiveContainer width=\"100%\" height={height}>\n <R.AreaChart data={data} margin={{ top: 8, right: 16, bottom: 0, left: 0 }}>\n {showGrid && <R.CartesianGrid stroke=\"var(--border-default)\" strokeDasharray=\"3 3\" vertical={false} />}\n <R.XAxis dataKey={categoryKey} stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...categoryTickProps({ xTickFormatter, xTickInterval, xTickAngle })} />\n <R.YAxis stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...valueTickProps(valueFormatter)} />\n <R.Tooltip contentStyle={{ background: 'var(--bg-surface)', border: '1px solid var(--border-default)', borderRadius: 8, fontSize: 12 }} {...tooltipValueProps(valueFormatter)} />\n {showLegend && <R.Legend wrapperStyle={{ fontSize: 12 }} />}\n {series.map((s, i) => (\n <R.Area\n key={s.key}\n type={lineType}\n dataKey={s.key}\n name={s.label ?? s.key}\n stackId={stacked ? '1' : undefined}\n stroke={s.color ?? PALETTE[i % PALETTE.length]}\n fill={s.color ?? PALETTE[i % PALETTE.length]}\n fillOpacity={0.18}\n strokeWidth={2}\n />\n ))}\n </R.AreaChart>\n </R.ResponsiveContainer>\n </div>\n );\n}\n\n// ---------- BarChart ----------------------------------------------------\nexport interface BarChartProps<D = any> extends CartesianChartProps<D> {\n layout?: 'vertical' | 'horizontal';\n stacked?: boolean;\n}\n\nconst BAR_RADIUS = 4;\n\nexport function BarChart<D = any>({\n recharts: R, data, categoryKey, series,\n height = 280, className, ariaLabel,\n layout = 'vertical', stacked, showGrid = true, showLegend = true,\n xTickFormatter, xTickInterval, xTickAngle, valueFormatter,\n}: BarChartProps<D>) {\n const isHorizontal = layout === 'horizontal';\n // Radius must round the VALUE end: top for columns ([tl,tr,br,bl] → [R,R,0,0]),\n // right for horizontal bars ([0,R,R,0]). The old hardcoded [4,4,0,0] left\n // horizontal bars rounded-top / pointed-bottom.\n const endRadius = isHorizontal ? [0, BAR_RADIUS, BAR_RADIUS, 0] : [BAR_RADIUS, BAR_RADIUS, 0, 0];\n const lastIdx = series.length - 1;\n const catTicks = categoryTickProps({ xTickFormatter, xTickInterval, xTickAngle });\n const catTicksNoRotate = categoryTickProps({ xTickFormatter, xTickInterval, xTickAngle }, false);\n return (\n <div className={cx('chart', className)} role=\"img\" aria-label={ariaLabel}>\n <R.ResponsiveContainer width=\"100%\" height={height}>\n <R.BarChart data={data} layout={isHorizontal ? 'vertical' : 'horizontal'} margin={{ top: 8, right: 16, bottom: 0, left: 0 }}>\n {showGrid && <R.CartesianGrid stroke=\"var(--border-default)\" strokeDasharray=\"3 3\" vertical={isHorizontal} horizontal={!isHorizontal} />}\n {isHorizontal ? (\n <>\n <R.XAxis type=\"number\" stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...valueTickProps(valueFormatter)} />\n <R.YAxis dataKey={categoryKey} type=\"category\" stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} width={96} {...catTicksNoRotate} />\n </>\n ) : (\n <>\n <R.XAxis dataKey={categoryKey} stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...catTicks} />\n <R.YAxis stroke=\"var(--fg-subtle)\" fontSize={12} tickLine={false} axisLine={false} {...valueTickProps(valueFormatter)} />\n </>\n )}\n <R.Tooltip contentStyle={{ background: 'var(--bg-surface)', border: '1px solid var(--border-default)', borderRadius: 8, fontSize: 12 }} cursor={{ fill: 'var(--bg-subtle)' }} {...tooltipValueProps(valueFormatter)} />\n {showLegend && <R.Legend wrapperStyle={{ fontSize: 12 }} />}\n {series.map((s, i) => {\n // Stacked: only the outermost (last) segment carries the end radius;\n // inner segments stay square so the stack reads as one bar.\n const barRadius = stacked ? (i === lastIdx ? endRadius : [0, 0, 0, 0]) : endRadius;\n return (\n <R.Bar\n key={s.key}\n dataKey={s.key}\n name={s.label ?? s.key}\n stackId={stacked ? '1' : undefined}\n fill={s.color ?? PALETTE[i % PALETTE.length]}\n radius={barRadius}\n maxBarSize={48}\n />\n );\n })}\n </R.BarChart>\n </R.ResponsiveContainer>\n </div>\n );\n}\n\n// ---------- DonutChart --------------------------------------------------\nexport interface DonutChartProps extends Omit<BaseChartProps, 'data'> {\n data: Array<{ name: string; value: number; color?: string }>;\n centerLabel?: React.ReactNode;\n showLegend?: boolean;\n innerRadius?: number;\n outerRadius?: number;\n /** Format slice names in tooltip + legend, e.g. `V_REGION` → `V Región` (no need to pre-map the data). */\n nameFormatter?: (name: string) => string;\n /** Format slice values in the tooltip. */\n valueFormatter?: (value: number) => string;\n}\n\nexport function DonutChart({\n recharts: R, data, height = 240, className, ariaLabel,\n centerLabel, showLegend = true, innerRadius = 60, outerRadius = 88,\n nameFormatter, valueFormatter,\n}: DonutChartProps) {\n // Recharts Tooltip formatter returns [formattedValue, formattedName].\n const tooltipProps = (nameFormatter || valueFormatter)\n ? { formatter: (v: unknown, n: unknown) => [valueFormatter ? valueFormatter(Number(v)) : v, nameFormatter ? nameFormatter(String(n)) : n] }\n : {};\n return (\n <div className={cx('chart chart--donut', className)} role=\"img\" aria-label={ariaLabel}>\n <div className=\"chart__donut-area\" style={{ height }}>\n <R.ResponsiveContainer width=\"100%\" height=\"100%\">\n <R.PieChart>\n <R.Tooltip contentStyle={{ background: 'var(--bg-surface)', border: '1px solid var(--border-default)', borderRadius: 8, fontSize: 12 }} {...tooltipProps} />\n <R.Pie\n data={data}\n dataKey=\"value\"\n nameKey=\"name\"\n innerRadius={innerRadius}\n outerRadius={outerRadius}\n paddingAngle={2}\n stroke=\"var(--bg-surface)\"\n >\n {data.map((d, i) => <R.Cell key={i} fill={d.color ?? PALETTE[i % PALETTE.length]} />)}\n </R.Pie>\n </R.PieChart>\n </R.ResponsiveContainer>\n {centerLabel && <div className=\"chart__center\">{centerLabel}</div>}\n </div>\n {showLegend && (\n <ul className=\"chart__legend\" aria-hidden=\"true\">\n {data.map((d, i) => (\n <li key={d.name} className=\"chart__legend-item\">\n <span\n className=\"chart__legend-swatch\"\n style={{ background: d.color ?? PALETTE[i % PALETTE.length] }}\n />\n <span className=\"chart__legend-label\">{nameFormatter ? nameFormatter(d.name) : d.name}</span>\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n\n// ---------- Sparkline ---------------------------------------------------\nexport interface SparklineProps<D = any> {\n recharts: RechartsLike;\n data: D[];\n dataKey: keyof D & string;\n width?: number;\n height?: number;\n color?: string;\n fill?: boolean;\n className?: string;\n ariaLabel?: string;\n}\n\nexport function Sparkline<D = any>({\n recharts: R, data, dataKey,\n width = 120, height = 32, color = 'var(--color-primary)',\n fill = true, className, ariaLabel,\n}: SparklineProps<D>) {\n return (\n <div className={cx('sparkline', className)} role=\"img\" aria-label={ariaLabel} style={{ width, height }}>\n <R.ResponsiveContainer width=\"100%\" height=\"100%\">\n <R.AreaChart data={data} margin={{ top: 2, right: 0, bottom: 2, left: 0 }}>\n <R.Area\n type=\"monotone\"\n dataKey={dataKey}\n stroke={color}\n strokeWidth={1.5}\n fill={fill ? color : 'none'}\n fillOpacity={fill ? 0.18 : 0}\n isAnimationActive={false}\n />\n </R.AreaChart>\n </R.ResponsiveContainer>\n </div>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/dateFormat.ts"],"names":["getBrand"],"mappings":"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","file":"chunk-MVJITG75.js","sourcesContent":["import { getBrand } from '../brand';\n\n/**\n * Date display formats supported by the kit's date pickers.\n *\n * - `iso` → `2026-05-02` (ISO 8601, year-month-day)\n * - `dmy` → `02-05-2026` (day-month-year, common in es-CL, es-ES, en-GB, pt-BR)\n * - `mdy` → `05-02-2026` (month-day-year, en-US)\n * - `auto` → derived from `configureBrand().locale` via Intl.DateTimeFormat\n */\nexport type DateFormat = 'iso' | 'dmy' | 'mdy' | 'auto';\n\n/** A concrete (non-`auto`) format. */\nexport type ResolvedDateFormat = Exclude<DateFormat, 'auto'>;\n\n/**\n * Inspects the locale's date-part order using `Intl.DateTimeFormat.formatToParts`.\n * No hardcoded country lists — uses the runtime's CLDR data.\n */\nexport function detectFormatFromLocale(locale: string): ResolvedDateFormat {\n try {\n const parts = new Intl.DateTimeFormat(locale).formatToParts(new Date(2024, 0, 2));\n const order: string[] = [];\n for (const p of parts) {\n if (p.type === 'year') order.push('y');\n else if (p.type === 'month') order.push('m');\n else if (p.type === 'day') order.push('d');\n }\n const key = order.join('');\n if (key === 'ymd') return 'iso';\n if (key === 'mdy') return 'mdy';\n return 'dmy';\n } catch {\n return 'dmy';\n }\n}\n\n/** Resolves `'auto'` against the current `configureBrand().locale`. */\nexport function resolveDateFormat(format: DateFormat): ResolvedDateFormat {\n if (format === 'auto') return detectFormatFromLocale(getBrand().locale);\n return format;\n}\n\nconst PLACEHOLDERS: Record<ResolvedDateFormat, string> = {\n iso: 'aaaa-mm-dd',\n dmy: 'dd-mm-aaaa',\n mdy: 'mm-dd-aaaa',\n};\n\n/** Localized placeholder for the given resolved format. */\nexport function dateFormatPlaceholder(format: ResolvedDateFormat): string {\n return PLACEHOLDERS[format];\n}\n\n/** Format a Date as a string in the given resolved format. Always uses `-` as separator. */\nexport function formatDate(d: Date, format: ResolvedDateFormat): string {\n const yyyy = d.getFullYear();\n const mm = String(d.getMonth() + 1).padStart(2, '0');\n const dd = String(d.getDate()).padStart(2, '0');\n if (format === 'iso') return `${yyyy}-${mm}-${dd}`;\n if (format === 'dmy') return `${dd}-${mm}-${yyyy}`;\n return `${mm}-${dd}-${yyyy}`;\n}\n\n/**\n * Parse a user-typed date string. Tolerant of `-`, `/`, `.` separators.\n *\n * Always accepts ISO `aaaa-mm-dd` regardless of `format` (it's the canonical\n * wire format, used by APIs and `<input type=\"date\">`). Otherwise, interprets\n * the parts according to the provided format.\n *\n * Returns `null` for invalid dates (out of range, non-existent days like Feb 30,\n * unparseable strings).\n */\nexport function parseDate(s: string, format: ResolvedDateFormat): Date | null {\n const trimmed = s.trim();\n if (!trimmed) return null;\n\n // Always accept ISO as a fallback (wire format).\n const iso = trimmed.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);\n if (iso) {\n return safeDate(Number(iso[1]), Number(iso[2]), Number(iso[3]));\n }\n\n const m = trimmed.match(/^(\\d{1,4})[\\-\\/.](\\d{1,2})[\\-\\/.](\\d{1,4})$/);\n if (!m) return null;\n\n let y: number, mo: number, d: number;\n if (format === 'iso') {\n y = Number(m[1]); mo = Number(m[2]); d = Number(m[3]);\n } else if (format === 'dmy') {\n d = Number(m[1]); mo = Number(m[2]); y = Number(m[3]);\n } else {\n mo = Number(m[1]); d = Number(m[2]); y = Number(m[3]);\n }\n\n // 2-digit years: assume 2000s.\n if (y < 100) y += 2000;\n\n return safeDate(y, mo, d);\n}\n\nfunction safeDate(y: number, mo: number, d: number): Date | null {\n if (mo < 1 || mo > 12 || d < 1 || d > 31) return null;\n const dt = new Date(y, mo - 1, d);\n if (\n isNaN(dt.getTime()) ||\n dt.getFullYear() !== y ||\n dt.getMonth() !== mo - 1 ||\n dt.getDate() !== d\n ) {\n return null;\n }\n return dt;\n}\n\n// ---------- Calendar helpers (shared by the date pickers) ----------------\n// Previously duplicated verbatim in Pickers.tsx, AdvancedPickers.tsx and\n// Display3.tsx. Single source now; behavior is unchanged.\n\n/** First day of `d`'s month at local midnight. */\nexport function startOfMonth(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), 1);\n}\n\n/** `d` shifted by `n` months, normalized to the first of that month. */\nexport function addMonths(d: Date, n: number): Date {\n return new Date(d.getFullYear(), d.getMonth() + n, 1);\n}\n\n/** True when `a` and `b` are the same calendar day (local time). */\nexport function isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\n/**\n * Compact month grid used by the date pickers: leading `null`s pad the days\n * before the 1st of a Monday-first week, followed by one `Date` per day of the\n * month (no adjacent-month spillover). The full-month `Calendar` uses a\n * different fixed 42-cell model on purpose, so it does not consume this.\n *\n * @param view Any date within the reference month.\n * @param offset Months to add to `view` (0 = same month, 1 = next, ...).\n */\nexport function buildMonthGrid(\n view: Date,\n offset = 0\n): { month: Date; cells: (Date | null)[] } {\n const month = addMonths(view, offset);\n const startDow = (month.getDay() + 6) % 7; // Monday = 0\n const days = new Date(month.getFullYear(), month.getMonth() + 1, 0).getDate();\n const cells: (Date | null)[] = [];\n for (let i = 0; i < startDow; i++) cells.push(null);\n for (let d = 1; d <= days; d++) {\n cells.push(new Date(month.getFullYear(), month.getMonth(), d));\n }\n return { month, cells };\n}\n\n// ---------- Relative day helpers ----------------------------------------\n\n/**\n * Parse a date-only ISO (`YYYY-MM-DD`, optionally with a time suffix) to a\n * Date at **local midnight**. `new Date('2026-05-22')` parses as UTC\n * midnight, which lands on the 21st in negative-offset timezones — a classic\n * off-by-one-day SSR bug. Reading the Y-M-D parts and constructing a local\n * Date avoids it: the calendar day is always the one written in the string.\n */\nfunction parseLocalDay(iso: string | Date): Date {\n if (iso instanceof Date) return new Date(iso.getFullYear(), iso.getMonth(), iso.getDate());\n const m = iso.match(/^(\\d{4})-(\\d{2})-(\\d{2})/);\n if (m) return new Date(Number(m[1]), Number(m[2]) - 1, Number(m[3]));\n const d = new Date(iso);\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n}\n\n/** True if `iso` is the same calendar day as `now` (default today, local). */\nexport function isToday(iso: string | Date, now: Date = new Date()): boolean {\n return isSameDay(parseLocalDay(iso), now);\n}\n\n/** True if `iso` is the calendar day after `now` (default today, local). */\nexport function isTomorrow(iso: string | Date, now: Date = new Date()): boolean {\n const t = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1);\n return isSameDay(parseLocalDay(iso), t);\n}\n\n/** True if `iso` is the calendar day before `now` (default today, local). */\nexport function isYesterday(iso: string | Date, now: Date = new Date()): boolean {\n const y = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 1);\n return isSameDay(parseLocalDay(iso), y);\n}\n\nexport interface RelativeDayOptions {\n /** BCP-47 locale. Defaults to the configured brand locale (es-CL). */\n locale?: string;\n /** Reference \"today\". Pass a fixed value for deterministic SSR / tests. */\n now?: Date;\n}\n\n/**\n * Human day label: \"Hoy\" / \"Mañana\" / \"Ayer\" for ±1 day, otherwise the\n * localized weekday + day + month (\"mar 26 may\"). The ±1 words come from\n * `Intl.RelativeTimeFormat(..., { numeric: 'auto' })` so they're correct in\n * any locale; capitalized for use as a standalone label.\n *\n * Deterministic across timezones: the day delta is computed from local\n * calendar parts (via `parseLocalDay`), never from UTC timestamps, so an\n * ISO date never renders as the wrong day. Pass `now` to pin it for SSR.\n */\nexport function formatRelativeDay(iso: string | Date, opts: RelativeDayOptions = {}): string {\n const locale = opts.locale ?? getBrand().locale ?? 'es-CL';\n const now = opts.now ?? new Date();\n const target = parseLocalDay(iso);\n const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n const diffDays = Math.round((target.getTime() - today.getTime()) / 86_400_000);\n\n if (Math.abs(diffDays) <= 1) {\n const rtf = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' });\n const s = rtf.format(diffDays, 'day');\n return s.charAt(0).toUpperCase() + s.slice(1);\n }\n return new Intl.DateTimeFormat(locale, { weekday: 'short', day: 'numeric', month: 'short' }).format(target);\n}\n"]}
|