@eztrak/shared 0.17.0 → 0.18.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/README.md +48 -0
- package/dist/{chunk-KJWCRX6F.mjs → chunk-2KXV5C3X.mjs} +3 -6
- package/dist/chunk-2KXV5C3X.mjs.map +1 -0
- package/dist/{chunk-A5BBQ7X5.mjs → chunk-A5Y5QGVL.mjs} +153 -33
- package/dist/chunk-A5Y5QGVL.mjs.map +1 -0
- package/dist/{chunk-HAW3AKJP.mjs → chunk-IQGTSEHC.mjs} +2 -2
- package/dist/components/index.d.mts +1 -1
- package/dist/components/index.d.ts +1 -1
- package/dist/components/index.js +16 -5
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +2 -2
- package/dist/{handleApiError-SHMjCJHj.d.mts → handleApiError-BIAaN76q.d.mts} +7 -0
- package/dist/{handleApiError-SHMjCJHj.d.ts → handleApiError-BIAaN76q.d.ts} +7 -0
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +151 -34
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -3
- package/dist/utils/index.d.mts +21 -5
- package/dist/utils/index.d.ts +21 -5
- package/dist/utils/index.js +150 -30
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/index.mjs +2 -2
- package/package.json +2 -1
- package/dist/chunk-A5BBQ7X5.mjs.map +0 -1
- package/dist/chunk-KJWCRX6F.mjs.map +0 -1
- /package/dist/{chunk-HAW3AKJP.mjs.map → chunk-IQGTSEHC.mjs.map} +0 -0
|
@@ -13,6 +13,118 @@ function resetPageParam(params, pageKey = "page", defaultPage = "1") {
|
|
|
13
13
|
return params;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
+
// src/utils/format-date.ts
|
|
17
|
+
var DEFAULT_DATE_FALLBACK = "-";
|
|
18
|
+
var DEFAULT_DATETIME_FALLBACK = "Invalid Date";
|
|
19
|
+
var pad2 = (n) => n.toString().padStart(2, "0");
|
|
20
|
+
var getParts = (date, utc) => {
|
|
21
|
+
if (utc === "preserve") {
|
|
22
|
+
return {
|
|
23
|
+
year: date.getUTCFullYear(),
|
|
24
|
+
month: date.getUTCMonth() + 1,
|
|
25
|
+
day: date.getUTCDate(),
|
|
26
|
+
hours: date.getUTCHours(),
|
|
27
|
+
minutes: date.getUTCMinutes(),
|
|
28
|
+
seconds: date.getUTCSeconds()
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
year: date.getFullYear(),
|
|
33
|
+
month: date.getMonth() + 1,
|
|
34
|
+
day: date.getDate(),
|
|
35
|
+
hours: date.getHours(),
|
|
36
|
+
minutes: date.getMinutes(),
|
|
37
|
+
seconds: date.getSeconds()
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
var formatAmPmTime = (parts) => {
|
|
41
|
+
const hour12 = parts.hours % 12 || 12;
|
|
42
|
+
const ampm = parts.hours >= 12 ? "PM" : "AM";
|
|
43
|
+
return `${hour12}:${pad2(parts.minutes)} ${ampm}`;
|
|
44
|
+
};
|
|
45
|
+
var formatMmDdYy = (parts) => `${pad2(parts.month)}/${pad2(parts.day)}/${String(parts.year).slice(-2)}`;
|
|
46
|
+
var applyPattern = (pattern, parts) => {
|
|
47
|
+
const hour12 = parts.hours % 12 || 12;
|
|
48
|
+
const ampm = parts.hours >= 12 ? "PM" : "AM";
|
|
49
|
+
const replacements = [
|
|
50
|
+
["yyyy", String(parts.year)],
|
|
51
|
+
["yy", String(parts.year).slice(-2)],
|
|
52
|
+
["MM", pad2(parts.month)],
|
|
53
|
+
["dd", pad2(parts.day)],
|
|
54
|
+
["HH", pad2(parts.hours)],
|
|
55
|
+
["hh", pad2(hour12)],
|
|
56
|
+
["mm", pad2(parts.minutes)],
|
|
57
|
+
["ss", pad2(parts.seconds)],
|
|
58
|
+
["a", ampm]
|
|
59
|
+
];
|
|
60
|
+
let result = "";
|
|
61
|
+
let i = 0;
|
|
62
|
+
while (i < pattern.length) {
|
|
63
|
+
let matched = false;
|
|
64
|
+
for (const [token, value] of replacements) {
|
|
65
|
+
if (pattern.startsWith(token, i)) {
|
|
66
|
+
result += value;
|
|
67
|
+
i += token.length;
|
|
68
|
+
matched = true;
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (!matched) {
|
|
73
|
+
result += pattern[i];
|
|
74
|
+
i += 1;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return result;
|
|
78
|
+
};
|
|
79
|
+
var parseDate = (dateString) => {
|
|
80
|
+
if (dateString === null || dateString === void 0) return null;
|
|
81
|
+
const date = new Date(dateString);
|
|
82
|
+
if (isNaN(date.getTime())) return null;
|
|
83
|
+
return date;
|
|
84
|
+
};
|
|
85
|
+
var formatDate = (dateString, options = {}) => {
|
|
86
|
+
const {
|
|
87
|
+
pattern,
|
|
88
|
+
utc = "local",
|
|
89
|
+
includeTime = false,
|
|
90
|
+
fallback = DEFAULT_DATE_FALLBACK
|
|
91
|
+
} = options;
|
|
92
|
+
const date = parseDate(dateString);
|
|
93
|
+
if (!date) return fallback;
|
|
94
|
+
const parts = getParts(date, utc);
|
|
95
|
+
if (pattern) {
|
|
96
|
+
return applyPattern(pattern, parts);
|
|
97
|
+
}
|
|
98
|
+
const datePart = formatMmDdYy(parts);
|
|
99
|
+
if (!includeTime) return datePart;
|
|
100
|
+
return `${datePart}, ${formatAmPmTime(parts)}`;
|
|
101
|
+
};
|
|
102
|
+
var formatDateTime = (dateString, options = {}) => {
|
|
103
|
+
const {
|
|
104
|
+
pattern,
|
|
105
|
+
utc = "local",
|
|
106
|
+
includeTime = true,
|
|
107
|
+
fallback = DEFAULT_DATETIME_FALLBACK
|
|
108
|
+
} = options;
|
|
109
|
+
const date = parseDate(dateString);
|
|
110
|
+
if (!date) return fallback;
|
|
111
|
+
if (pattern) {
|
|
112
|
+
return applyPattern(pattern, getParts(date, utc));
|
|
113
|
+
}
|
|
114
|
+
const localeOptions = {
|
|
115
|
+
year: "numeric",
|
|
116
|
+
month: "numeric",
|
|
117
|
+
day: "numeric",
|
|
118
|
+
...includeTime ? {
|
|
119
|
+
hour: "numeric",
|
|
120
|
+
minute: "numeric",
|
|
121
|
+
hour12: true
|
|
122
|
+
} : {},
|
|
123
|
+
...utc === "preserve" ? { timeZone: "UTC" } : {}
|
|
124
|
+
};
|
|
125
|
+
return date.toLocaleString("en-US", localeOptions);
|
|
126
|
+
};
|
|
127
|
+
|
|
16
128
|
// src/utils/helpers.ts
|
|
17
129
|
var truncateText = (text, maxLength = 20) => {
|
|
18
130
|
if (text === null || text === void 0) return "";
|
|
@@ -87,17 +199,6 @@ function toLowerCaseText(text) {
|
|
|
87
199
|
if (!text) return "";
|
|
88
200
|
return text.toLowerCase();
|
|
89
201
|
}
|
|
90
|
-
var formatDate = (dateString) => {
|
|
91
|
-
if (dateString === null || dateString === void 0) return "-";
|
|
92
|
-
const date = new Date(dateString);
|
|
93
|
-
if (isNaN(date.getTime())) {
|
|
94
|
-
return dateString;
|
|
95
|
-
}
|
|
96
|
-
const month = (date.getMonth() + 1).toString().padStart(2, "0");
|
|
97
|
-
const day = date.getDate().toString().padStart(2, "0");
|
|
98
|
-
const year = date.getFullYear().toString().slice(-2);
|
|
99
|
-
return `${month}/${day}/${year}`;
|
|
100
|
-
};
|
|
101
202
|
var isEmpty = (obj) => {
|
|
102
203
|
return Object.keys(obj).length === 0;
|
|
103
204
|
};
|
|
@@ -128,11 +229,30 @@ function convertCommaDataToArray(data) {
|
|
|
128
229
|
function checkIfExistsInArray(array, searchValue) {
|
|
129
230
|
return array.includes(searchValue);
|
|
130
231
|
}
|
|
131
|
-
var currencyFormatter = (value) => {
|
|
132
|
-
return
|
|
232
|
+
var currencyFormatter = (value, options) => {
|
|
233
|
+
if (value == null) return "";
|
|
234
|
+
const {
|
|
235
|
+
currency = "USD",
|
|
236
|
+
locale = "en-US",
|
|
237
|
+
hideSymbol = false,
|
|
238
|
+
minimumFractionDigits,
|
|
239
|
+
maximumFractionDigits
|
|
240
|
+
} = options ?? {};
|
|
241
|
+
const fractionDigits = {
|
|
242
|
+
...minimumFractionDigits != null && { minimumFractionDigits },
|
|
243
|
+
...maximumFractionDigits != null && { maximumFractionDigits }
|
|
244
|
+
};
|
|
245
|
+
if (hideSymbol) {
|
|
246
|
+
return value.toLocaleString(locale, {
|
|
247
|
+
minimumFractionDigits: minimumFractionDigits ?? 2,
|
|
248
|
+
maximumFractionDigits: maximumFractionDigits ?? 2
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
return value.toLocaleString(locale, {
|
|
133
252
|
style: "currency",
|
|
134
|
-
currency
|
|
135
|
-
|
|
253
|
+
currency,
|
|
254
|
+
...fractionDigits
|
|
255
|
+
});
|
|
136
256
|
};
|
|
137
257
|
var formatNumber = (number) => {
|
|
138
258
|
if (isNaN(Number(number)) || number === null || number === void 0) {
|
|
@@ -186,20 +306,6 @@ var deserializeJson = (jsonString) => {
|
|
|
186
306
|
return null;
|
|
187
307
|
}
|
|
188
308
|
};
|
|
189
|
-
var formatDateTime = (dateString) => {
|
|
190
|
-
if (!dateString) return "Invalid Date";
|
|
191
|
-
const date = new Date(dateString);
|
|
192
|
-
if (isNaN(date.getTime())) return "Invalid Date";
|
|
193
|
-
const options = {
|
|
194
|
-
year: "numeric",
|
|
195
|
-
month: "numeric",
|
|
196
|
-
day: "numeric",
|
|
197
|
-
hour: "numeric",
|
|
198
|
-
minute: "numeric",
|
|
199
|
-
hour12: true
|
|
200
|
-
};
|
|
201
|
-
return date.toLocaleString("en-US", options);
|
|
202
|
-
};
|
|
203
309
|
var removeByPropertyValues = (items = [], property, values = [], { caseInsensitive = false } = {}) => {
|
|
204
310
|
if (!Array.isArray(items) || !property) return Array.isArray(items) ? items : [];
|
|
205
311
|
const normalize = (v) => caseInsensitive && typeof v === "string" ? v.toLowerCase() : v;
|
|
@@ -466,6 +572,12 @@ function ensureConfirmAlertStyles() {
|
|
|
466
572
|
.ez-confirm-cancel:hover {
|
|
467
573
|
background: #f9fafb !important;
|
|
468
574
|
}
|
|
575
|
+
.ez-confirm-popup .swal2-input {
|
|
576
|
+
margin-top: var(--ez-confirm-input-mt, 0) !important;
|
|
577
|
+
margin-right: var(--ez-confirm-input-mr, 0) !important;
|
|
578
|
+
margin-bottom: var(--ez-confirm-input-mb, 1.25rem) !important;
|
|
579
|
+
margin-left: var(--ez-confirm-input-ml, 0) !important;
|
|
580
|
+
}
|
|
469
581
|
`;
|
|
470
582
|
document.head.appendChild(style);
|
|
471
583
|
}
|
|
@@ -503,7 +615,7 @@ function confirmationAlert(onConfirm, options = {}) {
|
|
|
503
615
|
hasInput ? "Confirmation Required" : "Delete this item"
|
|
504
616
|
);
|
|
505
617
|
const text = options.text;
|
|
506
|
-
const html = options.html;
|
|
618
|
+
const html = options.html ?? options.children;
|
|
507
619
|
const icon = pick(options.icon, vd.icon, "warning");
|
|
508
620
|
const iconHtml = pick(options.iconHtml, vd.iconHtml, void 0);
|
|
509
621
|
const iconColor = pick(options.iconColor, vd.iconColor, BRAND_ORANGE);
|
|
@@ -544,6 +656,10 @@ function confirmationAlert(onConfirm, options = {}) {
|
|
|
544
656
|
const width = options.width;
|
|
545
657
|
const borderRadius = cssSize(options.borderRadius, "1rem");
|
|
546
658
|
const buttonBorderRadius = cssSize(options.buttonBorderRadius, "0.5rem");
|
|
659
|
+
const inputMarginTop = cssSize(options.inputMarginTop, "0");
|
|
660
|
+
const inputMarginRight = cssSize(options.inputMarginRight, "0");
|
|
661
|
+
const inputMarginBottom = cssSize(options.inputMarginBottom, "1.25rem");
|
|
662
|
+
const inputMarginLeft = cssSize(options.inputMarginLeft, "0");
|
|
547
663
|
const onCancel = options.onCancel;
|
|
548
664
|
const useLoader = showLoaderOnConfirm || hasInput;
|
|
549
665
|
const inputHtml = html ?? (hasInput ? `
|
|
@@ -584,6 +700,10 @@ function confirmationAlert(onConfirm, options = {}) {
|
|
|
584
700
|
popup.style.setProperty("--ez-confirm-icon-bg", iconBgColor);
|
|
585
701
|
popup.style.setProperty("--ez-confirm-radius", borderRadius);
|
|
586
702
|
popup.style.setProperty("--ez-confirm-btn-radius", buttonBorderRadius);
|
|
703
|
+
popup.style.setProperty("--ez-confirm-input-mt", inputMarginTop);
|
|
704
|
+
popup.style.setProperty("--ez-confirm-input-mr", inputMarginRight);
|
|
705
|
+
popup.style.setProperty("--ez-confirm-input-mb", inputMarginBottom);
|
|
706
|
+
popup.style.setProperty("--ez-confirm-input-ml", inputMarginLeft);
|
|
587
707
|
if (width != null) {
|
|
588
708
|
popup.style.setProperty(
|
|
589
709
|
"--ez-confirm-width",
|
|
@@ -647,13 +767,14 @@ function confirmationAlert(onConfirm, options = {}) {
|
|
|
647
767
|
export {
|
|
648
768
|
cn,
|
|
649
769
|
resetPageParam,
|
|
770
|
+
formatDate,
|
|
771
|
+
formatDateTime,
|
|
650
772
|
truncateText,
|
|
651
773
|
truncateFileName,
|
|
652
774
|
getApiError,
|
|
653
775
|
normalizeApiListItems,
|
|
654
776
|
capitalizeText,
|
|
655
777
|
toLowerCaseText,
|
|
656
|
-
formatDate,
|
|
657
778
|
isEmpty,
|
|
658
779
|
toDateInputValue,
|
|
659
780
|
convertCommaDataToArray,
|
|
@@ -666,7 +787,6 @@ export {
|
|
|
666
787
|
getFieldsByCategory,
|
|
667
788
|
getFieldsByName,
|
|
668
789
|
deserializeJson,
|
|
669
|
-
formatDateTime,
|
|
670
790
|
removeByPropertyValues,
|
|
671
791
|
getFieldsByInputType,
|
|
672
792
|
USER_STATE_STORAGE_KEY,
|
|
@@ -687,4 +807,4 @@ export {
|
|
|
687
807
|
DEFAULT_CONFIRM_ICONS,
|
|
688
808
|
confirmationAlert
|
|
689
809
|
};
|
|
690
|
-
//# sourceMappingURL=chunk-
|
|
810
|
+
//# sourceMappingURL=chunk-A5Y5QGVL.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/cn.ts","../src/utils/resetPageParam.ts","../src/utils/format-date.ts","../src/utils/helpers.ts","../src/utils/localStorage.ts","../src/utils/handleApiError.ts"],"sourcesContent":["import clsx from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: Parameters<typeof clsx>) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","/**\n * Sends pagination back to the first page after a filter changes the result set.\n *\n * Only touches `pageKey` when it is already present, so filter-only screens that\n * never paginate keep their URL clean. Mutates and returns `params` so it can be\n * chained inside a `setSearchParams((prev) => ...)` updater.\n */\nexport function resetPageParam(\n params: URLSearchParams,\n pageKey = \"page\",\n defaultPage = \"1\",\n) {\n if (params.has(pageKey)) {\n params.set(pageKey, defaultPage);\n }\n return params;\n}\n","export type DateUtcMode = \"preserve\" | \"local\";\r\n\r\nexport type FormatDateOptions = {\r\n pattern?: string;\r\n utc?: DateUtcMode;\r\n includeTime?: boolean;\r\n fallback?: string;\r\n};\r\n\r\ntype DateParts = {\r\n year: number;\r\n month: number;\r\n day: number;\r\n hours: number;\r\n minutes: number;\r\n seconds: number;\r\n};\r\n\r\nconst DEFAULT_DATE_FALLBACK = \"-\";\r\nconst DEFAULT_DATETIME_FALLBACK = \"Invalid Date\";\r\n\r\nconst pad2 = (n: number) => n.toString().padStart(2, \"0\");\r\n\r\nconst getParts = (date: Date, utc: DateUtcMode): DateParts => {\r\n if (utc === \"preserve\") {\r\n return {\r\n year: date.getUTCFullYear(),\r\n month: date.getUTCMonth() + 1,\r\n day: date.getUTCDate(),\r\n hours: date.getUTCHours(),\r\n minutes: date.getUTCMinutes(),\r\n seconds: date.getUTCSeconds(),\r\n };\r\n }\r\n return {\r\n year: date.getFullYear(),\r\n month: date.getMonth() + 1,\r\n day: date.getDate(),\r\n hours: date.getHours(),\r\n minutes: date.getMinutes(),\r\n seconds: date.getSeconds(),\r\n };\r\n};\r\n\r\nconst formatAmPmTime = (parts: DateParts): string => {\r\n const hour12 = parts.hours % 12 || 12;\r\n const ampm = parts.hours >= 12 ? \"PM\" : \"AM\";\r\n return `${hour12}:${pad2(parts.minutes)} ${ampm}`;\r\n};\r\n\r\nconst formatMmDdYy = (parts: DateParts): string =>\r\n `${pad2(parts.month)}/${pad2(parts.day)}/${String(parts.year).slice(-2)}`;\r\n\r\n/**\r\n * Apply a simple token pattern. Longer tokens first so `yyyy` wins over `yy`.\r\n * Supported: yyyy, yy, MM, dd, HH, hh, mm, ss, a\r\n */\r\nconst applyPattern = (pattern: string, parts: DateParts): string => {\r\n const hour12 = parts.hours % 12 || 12;\r\n const ampm = parts.hours >= 12 ? \"PM\" : \"AM\";\r\n const replacements: [string, string][] = [\r\n [\"yyyy\", String(parts.year)],\r\n [\"yy\", String(parts.year).slice(-2)],\r\n [\"MM\", pad2(parts.month)],\r\n [\"dd\", pad2(parts.day)],\r\n [\"HH\", pad2(parts.hours)],\r\n [\"hh\", pad2(hour12)],\r\n [\"mm\", pad2(parts.minutes)],\r\n [\"ss\", pad2(parts.seconds)],\r\n [\"a\", ampm],\r\n ];\r\n\r\n let result = \"\";\r\n let i = 0;\r\n while (i < pattern.length) {\r\n let matched = false;\r\n for (const [token, value] of replacements) {\r\n if (pattern.startsWith(token, i)) {\r\n result += value;\r\n i += token.length;\r\n matched = true;\r\n break;\r\n }\r\n }\r\n if (!matched) {\r\n result += pattern[i];\r\n i += 1;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\nconst parseDate = (dateString: string | null | undefined): Date | null => {\r\n if (dateString === null || dateString === undefined) return null;\r\n const date = new Date(dateString);\r\n if (isNaN(date.getTime())) return null;\r\n return date;\r\n};\r\n\r\nexport const formatDate = (\r\n dateString: string | null | undefined,\r\n options: FormatDateOptions = {}\r\n): string => {\r\n const {\r\n pattern,\r\n utc = \"local\",\r\n includeTime = false,\r\n fallback = DEFAULT_DATE_FALLBACK,\r\n } = options;\r\n\r\n const date = parseDate(dateString);\r\n if (!date) return fallback;\r\n\r\n const parts = getParts(date, utc);\r\n\r\n if (pattern) {\r\n return applyPattern(pattern, parts);\r\n }\r\n\r\n const datePart = formatMmDdYy(parts);\r\n if (!includeTime) return datePart;\r\n return `${datePart}, ${formatAmPmTime(parts)}`;\r\n};\r\n\r\nexport const formatDateTime = (\r\n dateString: string | null | undefined,\r\n options: FormatDateOptions = {}\r\n): string => {\r\n const {\r\n pattern,\r\n utc = \"local\",\r\n includeTime = true,\r\n fallback = DEFAULT_DATETIME_FALLBACK,\r\n } = options;\r\n\r\n const date = parseDate(dateString);\r\n if (!date) return fallback;\r\n\r\n if (pattern) {\r\n return applyPattern(pattern, getParts(date, utc));\r\n }\r\n\r\n const localeOptions: Intl.DateTimeFormatOptions = {\r\n year: \"numeric\",\r\n month: \"numeric\",\r\n day: \"numeric\",\r\n ...(includeTime\r\n ? {\r\n hour: \"numeric\",\r\n minute: \"numeric\",\r\n hour12: true,\r\n }\r\n : {}),\r\n ...(utc === \"preserve\" ? { timeZone: \"UTC\" } : {}),\r\n };\r\n\r\n return date.toLocaleString(\"en-US\", localeOptions);\r\n};\r\n","export const truncateText = (\r\n text: string | number | null | undefined,\r\n maxLength = 20\r\n): string => {\r\n if (text === null || text === undefined) return \"\";\r\n const value = String(text);\r\n if (value.length <= maxLength) {\r\n return value;\r\n }\r\n return value.slice(0, maxLength - 3) + \"...\";\r\n};\r\n\r\nexport const truncateFileName = (\r\n fileName: string | null | undefined,\r\n maxLength = 20\r\n): string => {\r\n if (!fileName) return \"\";\r\n if (fileName.length <= maxLength) {\r\n return fileName;\r\n }\r\n const extension = fileName.slice(fileName.lastIndexOf(\".\"));\r\n const truncatedName =\r\n fileName.slice(0, maxLength - extension.length - 3) + \"...\";\r\n return truncatedName + extension;\r\n};\r\n\r\nexport function getApiError(apiError: unknown): string {\r\n if (!apiError) return \"An unknown error occurred\";\r\n\r\n if (typeof apiError === \"string\") {\r\n return apiError;\r\n }\r\n\r\n const error = apiError as {\r\n response?: { data?: Record<string, unknown> };\r\n message?: string;\r\n };\r\n\r\n if (error.response?.data) {\r\n const responseData = error.response.data;\r\n\r\n if (typeof responseData === \"string\") {\r\n return responseData;\r\n }\r\n\r\n const errors = responseData.errors;\r\n if (errors && typeof errors === \"object\") {\r\n for (const key in errors) {\r\n const messages = (errors as Record<string, unknown>)[key];\r\n if (Array.isArray(messages) && messages.length > 0) {\r\n return String(messages[0]);\r\n }\r\n }\r\n }\r\n\r\n if (responseData.message) {\r\n return String(responseData.message);\r\n }\r\n\r\n if (responseData.title) {\r\n return String(responseData.title);\r\n }\r\n }\r\n\r\n if (error.message) {\r\n return error.message;\r\n }\r\n\r\n return \"An unknown error occurred\";\r\n}\r\n\r\nexport const normalizeApiListItems = (responseData: unknown): unknown[] => {\r\n if (responseData == null) return [];\r\n if (Array.isArray(responseData)) return responseData;\r\n\r\n const record = responseData as Record<string, unknown>;\r\n const data = record.data;\r\n\r\n if (\r\n data &&\r\n typeof data === \"object\" &&\r\n !Array.isArray(data) &&\r\n Array.isArray((data as { items?: unknown[] }).items)\r\n ) {\r\n return (data as { items: unknown[] }).items;\r\n }\r\n\r\n const returnModel = record.returnModel as { items?: unknown[] } | undefined;\r\n if (Array.isArray(returnModel?.items)) return returnModel.items;\r\n if (Array.isArray(data)) return data;\r\n if (typeof data === \"object\" && data !== null) {\r\n return [data];\r\n }\r\n return [];\r\n};\r\n\r\nexport function capitalizeText(name: string | null | undefined): string {\r\n if (!name) return \"\";\r\n return name\r\n .split(\" \")\r\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\r\n .join(\" \");\r\n}\r\n\r\nexport function toLowerCaseText(text: string | null | undefined): string {\r\n if (!text) return \"\";\r\n return text.toLowerCase();\r\n}\r\n\r\nexport {\r\n formatDate,\r\n formatDateTime,\r\n type DateUtcMode,\r\n type FormatDateOptions,\r\n} from \"./format-date\";\r\n\r\nexport const isEmpty = (obj: object): boolean => {\r\n return Object.keys(obj).length === 0;\r\n};\r\n\r\nexport const toDateInputValue = (date: string | Date | null | undefined): string => {\r\n if (!date) return \"\";\r\n\r\n let d: Date;\r\n\r\n if (typeof date === \"string\") {\r\n if (/^\\d{4}-\\d{2}-\\d{2}$/.test(date)) {\r\n return date;\r\n }\r\n d = new Date(date);\r\n } else {\r\n d = new Date(date);\r\n }\r\n\r\n if (isNaN(d.getTime())) return \"\";\r\n\r\n const localDate = new Date(d.getTime() - d.getTimezoneOffset() * 60000);\r\n const year = localDate.getFullYear();\r\n const month = (localDate.getMonth() + 1).toString().padStart(2, \"0\");\r\n const day = localDate.getDate().toString().padStart(2, \"0\");\r\n\r\n return `${year}-${month}-${day}`;\r\n};\r\n\r\nexport function convertCommaDataToArray(data: string | null | undefined): string[] {\r\n if (!data || data.trim() === \"\") {\r\n return [];\r\n }\r\n return data.split(\",\").map((item) => item.trim());\r\n}\r\n\r\nexport function checkIfExistsInArray<T>(array: T[], searchValue: T): boolean {\r\n return array.includes(searchValue);\r\n}\r\n\r\nexport type CurrencyFormatterOptions = {\r\n currency?: string;\r\n locale?: string;\r\n hideSymbol?: boolean;\r\n minimumFractionDigits?: number;\r\n maximumFractionDigits?: number;\r\n};\r\n\r\nexport const currencyFormatter = (\r\n value: number | null | undefined,\r\n options?: CurrencyFormatterOptions,\r\n): string => {\r\n if (value == null) return \"\";\r\n\r\n const {\r\n currency = \"USD\",\r\n locale = \"en-US\",\r\n hideSymbol = false,\r\n minimumFractionDigits,\r\n maximumFractionDigits,\r\n } = options ?? {};\r\n\r\n const fractionDigits = {\r\n ...(minimumFractionDigits != null && { minimumFractionDigits }),\r\n ...(maximumFractionDigits != null && { maximumFractionDigits }),\r\n };\r\n\r\n if (hideSymbol) {\r\n return value.toLocaleString(locale, {\r\n minimumFractionDigits: minimumFractionDigits ?? 2,\r\n maximumFractionDigits: maximumFractionDigits ?? 2,\r\n });\r\n }\r\n\r\n return value.toLocaleString(locale, {\r\n style: \"currency\",\r\n currency,\r\n ...fractionDigits,\r\n });\r\n};\r\nexport const formatNumber = (number: number | string | null | undefined): string => {\r\n if (isNaN(Number(number)) || number === null || number === undefined) {\r\n return \"0\";\r\n }\r\n\r\n const formattedNumber = Number(number)\r\n .toString()\r\n .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n\r\n return formattedNumber;\r\n};\r\n\r\nexport const parseCurrencyValueToNumber = (value: unknown): number => {\r\n if (value == null || value === \"\") return 0;\r\n\r\n const raw =\r\n typeof value === \"object\" && value !== null && \"value\" in value\r\n ? (value as { value: unknown }).value\r\n : value;\r\n\r\n const stringValue = raw == null || raw === \"\" ? \"\" : String(raw);\r\n const numericValue = stringValue.replace(/[$,]/g, \"\");\r\n return parseFloat(numericValue) || 0;\r\n};\r\n\r\nexport function flattenTableData<T extends Record<string, unknown>>(\r\n data: T[] | null | undefined,\r\n columns: { field?: string }[] | null | undefined\r\n): T[] {\r\n if (!Array.isArray(data)) return [];\r\n return data.map((row) => {\r\n const flatRow = { ...row };\r\n (columns ?? []).forEach((col) => {\r\n const key = col.field;\r\n if (!key) return;\r\n if (key.includes(\".\")) {\r\n const value = key.split(\".\").reduce<unknown>(\r\n (acc, part) => (acc as Record<string, unknown> | undefined)?.[part],\r\n row\r\n );\r\n (flatRow as Record<string, unknown>)[key] = value ?? \"\";\r\n }\r\n });\r\n return flatRow;\r\n });\r\n}\r\n\r\nexport const getErrorMessages = (error: {\r\n data?: {\r\n errors?: Record<string, string[]>;\r\n title?: string;\r\n error?: { name?: string[] };\r\n };\r\n} | null | undefined): string => {\r\n if (error?.data?.errors) {\r\n return Object.values(error.data.errors).flat().join(\"\\n\");\r\n }\r\n return (\r\n error?.data?.title ??\r\n error?.data?.error?.name?.[0] ??\r\n \"Failed to save\"\r\n );\r\n};\r\n\r\nexport const getFieldsByCategory = <T extends { category?: string }>(\r\n fields: T[] = [],\r\n key: string\r\n): T[] => {\r\n return fields?.filter(({ category = \"\" }) => category === key);\r\n};\r\n\r\nexport const getFieldsByName = <T extends { name?: string }>(\r\n fields: T[] = [],\r\n key: string\r\n): T[] => {\r\n return fields.filter(({ name = \"\" }) => name === key);\r\n};\r\n\r\nexport const deserializeJson = <T = unknown>(jsonString: string): T | null => {\r\n try {\r\n return JSON.parse(jsonString) as T;\r\n } catch (error) {\r\n console.error(\"Error parsing JSON:\", error);\r\n return null;\r\n }\r\n};\r\n\r\nexport const removeByPropertyValues = <T extends Record<string, unknown>>(\r\n items: T[] = [],\r\n property: keyof T & string,\r\n values: unknown[] = [],\r\n { caseInsensitive = false }: { caseInsensitive?: boolean } = {}\r\n): T[] => {\r\n if (!Array.isArray(items) || !property) return Array.isArray(items) ? items : [];\r\n const normalize = (v: unknown) =>\r\n caseInsensitive && typeof v === \"string\" ? v.toLowerCase() : v;\r\n const valuesArr = Array.isArray(values) ? values : [values];\r\n const toRemove = new Set(valuesArr.map(normalize));\r\n return items.filter((item) => !toRemove.has(normalize(item?.[property])));\r\n};\r\n\r\nexport const getFieldsByInputType = <T extends { inputType?: string }>(\r\n fields: T[] = [],\r\n key: string\r\n): T[] => {\r\n return fields.filter(({ inputType = \"\" }) => inputType === key);\r\n};\r\n","export const USER_STATE_STORAGE_KEY = \"authState\";\r\n\r\nfunction getStorage(): Storage | null {\r\n if (typeof window === \"undefined\") return null;\r\n return window.localStorage;\r\n}\r\n\r\nexport function getItem<T>(key: string, fallback: T | null = null): T | null {\r\n try {\r\n const raw = getStorage()?.getItem(key);\r\n if (raw === null || raw === undefined) {\r\n return fallback;\r\n }\r\n return JSON.parse(raw) as T;\r\n } catch {\r\n return fallback;\r\n }\r\n}\r\n\r\nexport function setItem<T>(key: string, value: T): void {\r\n try {\r\n getStorage()?.setItem(key, JSON.stringify(value));\r\n } catch {\r\n // Ignore write errors (quota exceeded, private mode, etc.)\r\n }\r\n}\r\n\r\nexport function removeItem(key: string): void {\r\n try {\r\n getStorage()?.removeItem(key);\r\n } catch {\r\n // Ignore remove errors\r\n }\r\n}\r\n\r\nexport function loadUserState<T = unknown>(\r\n key: string = USER_STATE_STORAGE_KEY\r\n): T | undefined {\r\n const value = getItem<T | undefined>(key, undefined);\r\n return value === null ? undefined : value;\r\n}\r\n\r\nexport function saveUserState<T = unknown>(\r\n state: T,\r\n key: string = USER_STATE_STORAGE_KEY\r\n): void {\r\n setItem(key, state);\r\n}\r\n\r\n/** Task-aligned aliases */\r\nexport const get = getItem;\r\nexport const set = setItem;\r\n\r\n/** Backward-compatible aliases used in federation apps */\r\nexport const getItemFromLocalStorage = getItem;\r\nexport const storeItemInLocalStorage = setItem;\r\nexport const saveItemLocalStorage = setItem;\r\n","import toast from \"react-hot-toast\";\r\nimport Swal, { type SweetAlertOptions, type SweetAlertResult } from \"sweetalert2\";\r\n\r\nexport type RtkQueryError = {\r\n status?: number | string;\r\n originalStatus?: number;\r\n data?: {\r\n errors?: Record<string, string[]>;\r\n message?: string;\r\n title?: string;\r\n };\r\n message?: string;\r\n error?: string;\r\n};\r\n\r\nexport interface HandleApiErrorOptions {\r\n showAlert?: boolean;\r\n fallbackMessage?: string;\r\n}\r\n\r\nexport type ErrorSuggestedAction =\r\n | \"retry\"\r\n | \"refresh\"\r\n | \"contact-support\"\r\n | \"none\";\r\n\r\nexport type ErrorClassification = {\r\n isRetryable: boolean;\r\n userMessage: string;\r\n technicalMessage: string;\r\n suggestedAction: ErrorSuggestedAction;\r\n};\r\n\r\n/** Returns true for transient network/server errors that warrant automatic retry. */\r\nexport function isRetryableError(\r\n error: RtkQueryError | null | undefined\r\n): boolean {\r\n if (!error) return false;\r\n\r\n const status = error.status ?? error.originalStatus;\r\n\r\n if (\r\n status === \"FETCH_ERROR\" ||\r\n status === \"TIMEOUT_ERROR\" ||\r\n status === \"PARSING_ERROR\"\r\n ) {\r\n return true;\r\n }\r\n\r\n if (typeof status === \"number\") {\r\n if (status === 502 || status === 503 || status === 504) return true;\r\n if (status >= 500 && status < 600) return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/** Classifies RTK Query errors for user messaging and retry guidance. */\r\nexport function classifyError(\r\n error: RtkQueryError | null | undefined\r\n): ErrorClassification {\r\n if (!error) {\r\n return {\r\n isRetryable: false,\r\n userMessage: \"An error occurred.\",\r\n technicalMessage: \"Unknown error\",\r\n suggestedAction: \"none\",\r\n };\r\n }\r\n\r\n const status = error.status ?? error.originalStatus;\r\n const data = error.data;\r\n\r\n if (\r\n status === \"FETCH_ERROR\" ||\r\n status === \"TIMEOUT_ERROR\" ||\r\n status === \"PARSING_ERROR\"\r\n ) {\r\n return {\r\n isRetryable: true,\r\n userMessage: \"Network error. Please check your connection.\",\r\n technicalMessage: \"Network request failed\",\r\n suggestedAction: \"retry\",\r\n };\r\n }\r\n\r\n if (typeof status === \"number\" && status >= 500 && status < 600) {\r\n return {\r\n isRetryable: true,\r\n userMessage: \"Server is temporarily unavailable. Please try again.\",\r\n technicalMessage: `Server error: ${status}`,\r\n suggestedAction: \"retry\",\r\n };\r\n }\r\n\r\n return {\r\n isRetryable: false,\r\n userMessage:\r\n data?.message ||\r\n data?.title ||\r\n error.error ||\r\n \"An error occurred. Please try again.\",\r\n technicalMessage:\r\n typeof status === \"number\" || typeof status === \"string\"\r\n ? `Client error: ${status}`\r\n : \"Request failed\",\r\n suggestedAction: \"none\",\r\n };\r\n}\r\n\r\nexport function formatValidationErrorsHtml(\r\n errors: Record<string, string[]>\r\n): string {\r\n const items = Object.keys(errors).flatMap((field) =>\r\n (errors[field] || []).map((msg) => `<li>${msg}</li>`)\r\n );\r\n return `\r\n <div style=\"text-align:left\">\r\n <p>Please review and correct the following:</p>\r\n <ul style=\"margin:8px 0 0 16px; list-style:disc;\">\r\n ${items.join(\"\")}\r\n </ul>\r\n </div>\r\n `;\r\n}\r\n\r\nfunction showValidationAlert(html: string): void {\r\n void Swal.fire({\r\n title: \"Validation errors\",\r\n html,\r\n icon: \"error\",\r\n confirmButtonText: \"OK\",\r\n showCancelButton: false,\r\n confirmButtonColor: \"#FF7335\",\r\n });\r\n}\r\n\r\n/** Handles RTK Query errors with built-in toast.error or SweetAlert (when showAlert is true). */\r\nexport function handleApiError(\r\n error: RtkQueryError | null | undefined,\r\n { showAlert = false, fallbackMessage }: HandleApiErrorOptions = {}\r\n): void {\r\n if (!error) return;\r\n\r\n const status = error.status ?? error.originalStatus;\r\n const data = error.data;\r\n\r\n if (status === 200) {\r\n return;\r\n }\r\n\r\n if (data?.errors && typeof data.errors === \"object\") {\r\n const errors = data.errors;\r\n\r\n if (showAlert) {\r\n showValidationAlert(formatValidationErrorsHtml(errors));\r\n } else {\r\n Object.keys(errors).forEach((field) => {\r\n (errors[field] || []).forEach((errorMessage) => {\r\n toast.error(errorMessage);\r\n });\r\n });\r\n }\r\n return;\r\n }\r\n\r\n if (status === 404) {\r\n return;\r\n }\r\n\r\n const message =\r\n fallbackMessage ||\r\n data?.message ||\r\n data?.title ||\r\n error.error ||\r\n error.message ||\r\n \"An error occurred. Please try again.\";\r\n\r\n toast.error(message);\r\n}\r\n\r\nconst BRAND_ORANGE = \"#FF7335\";\r\nconst DANGER_RED = \"#DC2626\";\r\nconst DANGER_ICON_BG = \"#FEE2E2\";\r\nconst CANCEL_BG = \"#ffffff\";\r\nconst CANCEL_TEXT = \"#374151\";\r\nconst CONFIRM_STYLE_ID = \"eztrak-confirm-alert-styles\";\r\n\r\nexport type ConfirmationAlertVariant = \"brand\" | \"danger\";\r\n\r\nexport interface ConfirmationAlertOptions {\r\n title?: string;\r\n text?: string;\r\n html?: string;\r\n /** Body HTML when `html` is not set. String only (not React nodes). */\r\n children?: string;\r\n icon?: \"warning\" | \"info\" | \"question\" | \"error\" | \"success\";\r\n /** Custom icon markup. When set, replaces SweetAlert's default icon content. */\r\n iconHtml?: string;\r\n iconColor?: string;\r\n iconBgColor?: string;\r\n showIcon?: boolean;\r\n confirmButtonText?: string;\r\n cancelButtonText?: string;\r\n confirmButtonColor?: string;\r\n cancelButtonColor?: string;\r\n confirmButtonTextColor?: string;\r\n cancelButtonTextColor?: string;\r\n showCancelButton?: boolean;\r\n showLoaderOnConfirm?: boolean;\r\n /** Type exactly — trimmed, case-sensitive. */\r\n inputExpectedValue?: string;\r\n inputPlaceholder?: string;\r\n reverseButtons?: boolean;\r\n focusCancel?: boolean;\r\n zIndex?: number;\r\n width?: string | number;\r\n /** Card corner radius. Default `1rem`. Number = px. */\r\n borderRadius?: string | number;\r\n /** Confirm/cancel button corner radius. Default `0.5rem`. Number = px. */\r\n buttonBorderRadius?: string | number;\r\n /** Typed-input margin. Number = px. Bottom default `1.25rem`; other sides default `0`. */\r\n inputMarginTop?: string | number;\r\n inputMarginRight?: string | number;\r\n inputMarginBottom?: string | number;\r\n inputMarginLeft?: string | number;\r\n /** `danger` = delete look; `brand` = orange confirm. Explicit options win. */\r\n variant?: ConfirmationAlertVariant;\r\n customClass?: SweetAlertOptions[\"customClass\"];\r\n onCancel?: () => void;\r\n}\r\n\r\nfunction cssSize(value: string | number | undefined, fallback: string): string {\r\n if (value === undefined) return fallback;\r\n return typeof value === \"number\" ? `${value}px` : value;\r\n}\r\n\r\n/** Reusable icon markup — override via `iconHtml`. */\r\nexport const DEFAULT_CONFIRM_ICONS = {\r\n warning: `\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\r\n <path d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L4.082 16.5c-.77.833.192 2.5 1.732 2.5z\" />\r\n </svg>\r\n `.trim(),\r\n} as const;\r\n\r\ntype VariantDefaults = Partial<\r\n Pick<\r\n ConfirmationAlertOptions,\r\n | \"title\"\r\n | \"confirmButtonText\"\r\n | \"confirmButtonColor\"\r\n | \"confirmButtonTextColor\"\r\n | \"cancelButtonColor\"\r\n | \"cancelButtonTextColor\"\r\n | \"iconColor\"\r\n | \"iconBgColor\"\r\n | \"iconHtml\"\r\n | \"showLoaderOnConfirm\"\r\n | \"icon\"\r\n >\r\n>;\r\n\r\nconst VARIANT_DEFAULTS: Record<ConfirmationAlertVariant, VariantDefaults> = {\r\n brand: {\r\n confirmButtonText: \"Yes\",\r\n confirmButtonColor: BRAND_ORANGE,\r\n confirmButtonTextColor: \"#ffffff\",\r\n cancelButtonColor: CANCEL_BG,\r\n cancelButtonTextColor: CANCEL_TEXT,\r\n iconColor: BRAND_ORANGE,\r\n iconBgColor: \"#FFEDD5\",\r\n iconHtml: DEFAULT_CONFIRM_ICONS.warning,\r\n icon: \"warning\",\r\n },\r\n danger: {\r\n title: \"Delete this item\",\r\n confirmButtonText: \"Yes, delete it!\",\r\n confirmButtonColor: DANGER_RED,\r\n confirmButtonTextColor: \"#ffffff\",\r\n cancelButtonColor: CANCEL_BG,\r\n cancelButtonTextColor: CANCEL_TEXT,\r\n iconColor: DANGER_RED,\r\n iconBgColor: DANGER_ICON_BG,\r\n iconHtml: DEFAULT_CONFIRM_ICONS.warning,\r\n icon: \"warning\",\r\n showLoaderOnConfirm: true,\r\n },\r\n};\r\n\r\nfunction ensureConfirmAlertStyles(): void {\r\n if (typeof document === \"undefined\") return;\r\n if (document.getElementById(CONFIRM_STYLE_ID)) return;\r\n\r\n const style = document.createElement(\"style\");\r\n style.id = CONFIRM_STYLE_ID;\r\n style.textContent = `\r\n .ez-confirm-popup {\r\n border-radius: var(--ez-confirm-radius, 1rem) !important;\r\n padding: 1.5rem !important;\r\n max-width: 24rem !important;\r\n width: var(--ez-confirm-width, 100%) !important;\r\n box-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25) !important;\r\n }\r\n .ez-confirm-title {\r\n font-size: 1.125rem !important;\r\n font-weight: 600 !important;\r\n color: #111827 !important;\r\n margin: 0 0 0.25rem !important;\r\n padding: 0 !important;\r\n }\r\n .ez-confirm-html {\r\n font-size: 0.875rem !important;\r\n color: #6b7280 !important;\r\n margin: 0 0 1.5rem !important;\r\n }\r\n .ez-confirm-icon {\r\n border: none !important;\r\n background: var(--ez-confirm-icon-bg, #fee2e2) !important;\r\n color: var(--ez-confirm-icon-color, #dc2626) !important;\r\n width: 3rem !important;\r\n height: 3rem !important;\r\n margin: 0 auto 1rem !important;\r\n border-radius: 9999px !important;\r\n }\r\n .ez-confirm-icon .swal2-icon-content {\r\n font-size: inherit !important;\r\n display: flex !important;\r\n align-items: center !important;\r\n justify-content: center !important;\r\n color: inherit !important;\r\n }\r\n .ez-confirm-actions {\r\n width: 100% !important;\r\n margin: 0 !important;\r\n gap: 0.75rem !important;\r\n }\r\n .ez-confirm-confirm,\r\n .ez-confirm-cancel {\r\n flex: 1 1 0 !important;\r\n margin: 0 !important;\r\n border-radius: var(--ez-confirm-btn-radius, 0.5rem) !important;\r\n font-size: 0.875rem !important;\r\n font-weight: 500 !important;\r\n padding: 0.625rem 1rem !important;\r\n box-shadow: none !important;\r\n }\r\n .ez-confirm-confirm {\r\n background: var(--ez-confirm-confirm-bg, #ff7335) !important;\r\n color: var(--ez-confirm-confirm-fg, #fff) !important;\r\n border: none !important;\r\n }\r\n .ez-confirm-confirm:hover {\r\n filter: brightness(0.95);\r\n }\r\n .ez-confirm-cancel {\r\n background: var(--ez-confirm-cancel-bg, #fff) !important;\r\n color: var(--ez-confirm-cancel-fg, #374151) !important;\r\n border: 1px solid #d1d5db !important;\r\n }\r\n .ez-confirm-cancel:hover {\r\n background: #f9fafb !important;\r\n }\r\n .ez-confirm-popup .swal2-input {\r\n margin-top: var(--ez-confirm-input-mt, 0) !important;\r\n margin-right: var(--ez-confirm-input-mr, 0) !important;\r\n margin-bottom: var(--ez-confirm-input-mb, 1.25rem) !important;\r\n margin-left: var(--ez-confirm-input-ml, 0) !important;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n}\r\n\r\nfunction pick<T>(\r\n explicit: T | undefined,\r\n fromVariant: T | undefined,\r\n fallback: T\r\n): T {\r\n if (explicit !== undefined) return explicit;\r\n if (fromVariant !== undefined) return fromVariant;\r\n return fallback;\r\n}\r\n\r\nfunction mergeCustomClass(\r\n base: NonNullable<SweetAlertOptions[\"customClass\"]>,\r\n extra?: SweetAlertOptions[\"customClass\"]\r\n): SweetAlertOptions[\"customClass\"] {\r\n if (!extra || typeof extra !== \"object\") return base;\r\n const merged: Record<string, string> = { ...(base as Record<string, string>) };\r\n for (const [key, value] of Object.entries(extra)) {\r\n if (typeof value === \"string\" && value) {\r\n merged[key] = merged[key] ? `${merged[key]} ${value}` : value;\r\n }\r\n }\r\n return merged;\r\n}\r\n\r\nfunction getConfirmErrorMessage(error: unknown): string {\r\n if (error && typeof error === \"object\") {\r\n const err = error as {\r\n message?: string;\r\n data?: { message?: string; title?: string };\r\n };\r\n return (\r\n err.data?.message ||\r\n err.data?.title ||\r\n err.message ||\r\n \"Something went wrong. Please try again.\"\r\n );\r\n }\r\n return \"Something went wrong. Please try again.\";\r\n}\r\n\r\nexport function confirmationAlert(\r\n onConfirm: () => void | Promise<void>,\r\n options: ConfirmationAlertOptions = {}\r\n): void {\r\n ensureConfirmAlertStyles();\r\n\r\n const variant = options.variant ?? \"brand\";\r\n const vd = VARIANT_DEFAULTS[variant];\r\n\r\n const inputExpectedValue = options.inputExpectedValue;\r\n const hasInput = Boolean(inputExpectedValue);\r\n\r\n const title = pick(\r\n options.title,\r\n vd.title,\r\n hasInput ? \"Confirmation Required\" : \"Delete this item\"\r\n );\r\n const text = options.text;\r\n const html = options.html ?? options.children;\r\n const icon = pick(options.icon, vd.icon, \"warning\" as const);\r\n const iconHtml = pick(options.iconHtml, vd.iconHtml, undefined);\r\n const iconColor = pick(options.iconColor, vd.iconColor, BRAND_ORANGE);\r\n const iconBgColor = pick(options.iconBgColor, vd.iconBgColor, \"#FFEDD5\");\r\n const showIcon = options.showIcon !== false;\r\n const confirmButtonText = pick(options.confirmButtonText, vd.confirmButtonText, \"Yes\");\r\n const cancelButtonText = options.cancelButtonText ?? \"Cancel\";\r\n const confirmButtonColor = pick(\r\n options.confirmButtonColor,\r\n vd.confirmButtonColor,\r\n BRAND_ORANGE\r\n );\r\n const cancelButtonColor = pick(\r\n options.cancelButtonColor,\r\n vd.cancelButtonColor,\r\n CANCEL_BG\r\n );\r\n const confirmButtonTextColor = pick(\r\n options.confirmButtonTextColor,\r\n vd.confirmButtonTextColor,\r\n \"#ffffff\"\r\n );\r\n const cancelButtonTextColor = pick(\r\n options.cancelButtonTextColor,\r\n vd.cancelButtonTextColor,\r\n CANCEL_TEXT\r\n );\r\n const showCancelButton = options.showCancelButton !== false;\r\n const showLoaderOnConfirm = pick(\r\n options.showLoaderOnConfirm,\r\n vd.showLoaderOnConfirm,\r\n false\r\n );\r\n const inputPlaceholder =\r\n options.inputPlaceholder ?? \"Type confirmation text to proceed\";\r\n // Cancel left, Confirm right (matches gallery delete card)\r\n const reverseButtons = options.reverseButtons ?? false;\r\n const focusCancel = options.focusCancel;\r\n const zIndex = options.zIndex;\r\n const width = options.width;\r\n const borderRadius = cssSize(options.borderRadius, \"1rem\");\r\n const buttonBorderRadius = cssSize(options.buttonBorderRadius, \"0.5rem\");\r\n const inputMarginTop = cssSize(options.inputMarginTop, \"0\");\r\n const inputMarginRight = cssSize(options.inputMarginRight, \"0\");\r\n const inputMarginBottom = cssSize(options.inputMarginBottom, \"1.25rem\");\r\n const inputMarginLeft = cssSize(options.inputMarginLeft, \"0\");\r\n const onCancel = options.onCancel;\r\n\r\n const useLoader = showLoaderOnConfirm || hasInput;\r\n\r\n const inputHtml =\r\n html ??\r\n (hasInput\r\n ? `\r\n ${text ? `<p style=\"margin-bottom: 15px;\">${text}</p>` : \"\"}\r\n <p style=\"margin-bottom: 10px; font-weight: bold; color: #666;\">\r\n Please type \"<span style=\"color: ${BRAND_ORANGE}; font-weight: bold;\">${inputExpectedValue}</span>\" to confirm:\r\n </p>\r\n `\r\n : undefined);\r\n\r\n const baseCustomClass = {\r\n popup: \"ez-confirm-popup\",\r\n title: \"ez-confirm-title\",\r\n htmlContainer: \"ez-confirm-html\",\r\n actions: \"ez-confirm-actions\",\r\n confirmButton: \"ez-confirm-confirm\",\r\n cancelButton: \"ez-confirm-cancel\",\r\n icon: \"ez-confirm-icon\",\r\n };\r\n\r\n const swalOptions: SweetAlertOptions = {\r\n title,\r\n showCancelButton,\r\n confirmButtonText,\r\n cancelButtonText,\r\n confirmButtonColor,\r\n cancelButtonColor,\r\n reverseButtons,\r\n focusCancel,\r\n customClass: mergeCustomClass(baseCustomClass, options.customClass),\r\n allowOutsideClick: () => !Swal.isLoading(),\r\n allowEscapeKey: () => !Swal.isLoading(),\r\n didOpen: () => {\r\n const popup = Swal.getPopup();\r\n if (popup) {\r\n popup.style.setProperty(\"--ez-confirm-confirm-bg\", confirmButtonColor);\r\n popup.style.setProperty(\"--ez-confirm-confirm-fg\", confirmButtonTextColor);\r\n popup.style.setProperty(\"--ez-confirm-cancel-bg\", cancelButtonColor);\r\n popup.style.setProperty(\"--ez-confirm-cancel-fg\", cancelButtonTextColor);\r\n popup.style.setProperty(\"--ez-confirm-icon-color\", iconColor);\r\n popup.style.setProperty(\"--ez-confirm-icon-bg\", iconBgColor);\r\n popup.style.setProperty(\"--ez-confirm-radius\", borderRadius);\r\n popup.style.setProperty(\"--ez-confirm-btn-radius\", buttonBorderRadius);\r\n popup.style.setProperty(\"--ez-confirm-input-mt\", inputMarginTop);\r\n popup.style.setProperty(\"--ez-confirm-input-mr\", inputMarginRight);\r\n popup.style.setProperty(\"--ez-confirm-input-mb\", inputMarginBottom);\r\n popup.style.setProperty(\"--ez-confirm-input-ml\", inputMarginLeft);\r\n if (width != null) {\r\n popup.style.setProperty(\r\n \"--ez-confirm-width\",\r\n typeof width === \"number\" ? `${width}px` : String(width)\r\n );\r\n }\r\n }\r\n if (zIndex == null) return;\r\n const container = Swal.getContainer();\r\n if (container) container.style.zIndex = String(zIndex);\r\n },\r\n };\r\n\r\n if (showIcon) {\r\n swalOptions.icon = icon;\r\n if (iconHtml) {\r\n swalOptions.iconHtml = iconHtml;\r\n }\r\n }\r\n\r\n if (hasInput) {\r\n swalOptions.html = inputHtml;\r\n swalOptions.input = \"text\";\r\n swalOptions.inputPlaceholder = inputPlaceholder;\r\n swalOptions.inputValidator = (value: string) => {\r\n if (!value?.trim()) return \"You need to enter the confirmation text!\";\r\n if (value.trim() !== inputExpectedValue!.trim()) {\r\n return `Please type \"${inputExpectedValue}\" exactly as shown!`;\r\n }\r\n return null;\r\n };\r\n } else if (html) {\r\n swalOptions.html = html;\r\n } else {\r\n swalOptions.text = text;\r\n }\r\n\r\n if (useLoader) {\r\n swalOptions.showLoaderOnConfirm = true;\r\n swalOptions.preConfirm = (inputValue: string) => {\r\n if (hasInput && inputValue?.trim() !== inputExpectedValue!.trim()) {\r\n Swal.showValidationMessage(\r\n `Please type \"${inputExpectedValue}\" exactly as shown!`\r\n );\r\n return false;\r\n }\r\n return Promise.resolve()\r\n .then(() => onConfirm())\r\n .catch((error) => {\r\n Swal.showValidationMessage(getConfirmErrorMessage(error));\r\n throw error;\r\n });\r\n };\r\n }\r\n\r\n void Swal.fire(swalOptions).then((result: SweetAlertResult) => {\r\n if (result.isConfirmed && !useLoader) {\r\n void Promise.resolve(onConfirm());\r\n return;\r\n }\r\n if (result.isDismissed) {\r\n onCancel?.();\r\n }\r\n });\r\n}\r\n"],"mappings":"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","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isRetryableError
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-A5Y5QGVL.mjs";
|
|
4
4
|
|
|
5
5
|
// src/utils/permissions.ts
|
|
6
6
|
function transformPermissions(permissions) {
|
|
@@ -57,4 +57,4 @@ export {
|
|
|
57
57
|
transformPermissions,
|
|
58
58
|
createBaseQueryWithRetry
|
|
59
59
|
};
|
|
60
|
-
//# sourceMappingURL=chunk-
|
|
60
|
+
//# sourceMappingURL=chunk-IQGTSEHC.mjs.map
|
|
@@ -4,7 +4,7 @@ import { Props, StylesConfig } from 'react-select';
|
|
|
4
4
|
import { PlacesType } from 'react-tooltip';
|
|
5
5
|
import { IconType } from 'react-icons';
|
|
6
6
|
import { TippyProps } from '@tippyjs/react';
|
|
7
|
-
import { C as ConfirmationAlertOptions, R as RtkQueryError } from '../handleApiError-
|
|
7
|
+
import { C as ConfirmationAlertOptions, R as RtkQueryError } from '../handleApiError-BIAaN76q.mjs';
|
|
8
8
|
import 'sweetalert2';
|
|
9
9
|
|
|
10
10
|
type EztrakTab = {
|
|
@@ -4,7 +4,7 @@ import { Props, StylesConfig } from 'react-select';
|
|
|
4
4
|
import { PlacesType } from 'react-tooltip';
|
|
5
5
|
import { IconType } from 'react-icons';
|
|
6
6
|
import { TippyProps } from '@tippyjs/react';
|
|
7
|
-
import { C as ConfirmationAlertOptions, R as RtkQueryError } from '../handleApiError-
|
|
7
|
+
import { C as ConfirmationAlertOptions, R as RtkQueryError } from '../handleApiError-BIAaN76q.js';
|
|
8
8
|
import 'sweetalert2';
|
|
9
9
|
|
|
10
10
|
type EztrakTab = {
|
package/dist/components/index.js
CHANGED
|
@@ -432,6 +432,12 @@ function ensureConfirmAlertStyles() {
|
|
|
432
432
|
.ez-confirm-cancel:hover {
|
|
433
433
|
background: #f9fafb !important;
|
|
434
434
|
}
|
|
435
|
+
.ez-confirm-popup .swal2-input {
|
|
436
|
+
margin-top: var(--ez-confirm-input-mt, 0) !important;
|
|
437
|
+
margin-right: var(--ez-confirm-input-mr, 0) !important;
|
|
438
|
+
margin-bottom: var(--ez-confirm-input-mb, 1.25rem) !important;
|
|
439
|
+
margin-left: var(--ez-confirm-input-ml, 0) !important;
|
|
440
|
+
}
|
|
435
441
|
`;
|
|
436
442
|
document.head.appendChild(style);
|
|
437
443
|
}
|
|
@@ -469,7 +475,7 @@ function confirmationAlert(onConfirm, options = {}) {
|
|
|
469
475
|
hasInput ? "Confirmation Required" : "Delete this item"
|
|
470
476
|
);
|
|
471
477
|
const text = options.text;
|
|
472
|
-
const html = options.html;
|
|
478
|
+
const html = options.html ?? options.children;
|
|
473
479
|
const icon = pick(options.icon, vd.icon, "warning");
|
|
474
480
|
const iconHtml = pick(options.iconHtml, vd.iconHtml, void 0);
|
|
475
481
|
const iconColor = pick(options.iconColor, vd.iconColor, BRAND_ORANGE);
|
|
@@ -510,6 +516,10 @@ function confirmationAlert(onConfirm, options = {}) {
|
|
|
510
516
|
const width = options.width;
|
|
511
517
|
const borderRadius = cssSize(options.borderRadius, "1rem");
|
|
512
518
|
const buttonBorderRadius = cssSize(options.buttonBorderRadius, "0.5rem");
|
|
519
|
+
const inputMarginTop = cssSize(options.inputMarginTop, "0");
|
|
520
|
+
const inputMarginRight = cssSize(options.inputMarginRight, "0");
|
|
521
|
+
const inputMarginBottom = cssSize(options.inputMarginBottom, "1.25rem");
|
|
522
|
+
const inputMarginLeft = cssSize(options.inputMarginLeft, "0");
|
|
513
523
|
const onCancel = options.onCancel;
|
|
514
524
|
const useLoader = showLoaderOnConfirm || hasInput;
|
|
515
525
|
const inputHtml = html ?? (hasInput ? `
|
|
@@ -550,6 +560,10 @@ function confirmationAlert(onConfirm, options = {}) {
|
|
|
550
560
|
popup.style.setProperty("--ez-confirm-icon-bg", iconBgColor);
|
|
551
561
|
popup.style.setProperty("--ez-confirm-radius", borderRadius);
|
|
552
562
|
popup.style.setProperty("--ez-confirm-btn-radius", buttonBorderRadius);
|
|
563
|
+
popup.style.setProperty("--ez-confirm-input-mt", inputMarginTop);
|
|
564
|
+
popup.style.setProperty("--ez-confirm-input-mr", inputMarginRight);
|
|
565
|
+
popup.style.setProperty("--ez-confirm-input-mb", inputMarginBottom);
|
|
566
|
+
popup.style.setProperty("--ez-confirm-input-ml", inputMarginLeft);
|
|
553
567
|
if (width != null) {
|
|
554
568
|
popup.style.setProperty(
|
|
555
569
|
"--ez-confirm-width",
|
|
@@ -2029,10 +2043,7 @@ function Sidebar({
|
|
|
2029
2043
|
"div",
|
|
2030
2044
|
{
|
|
2031
2045
|
"data-sidebar-item": item.name,
|
|
2032
|
-
className:
|
|
2033
|
-
"has-sub-items max-w-full min-w-0 flex flex-col",
|
|
2034
|
-
collapsed ? "my-1" : "my-2"
|
|
2035
|
-
),
|
|
2046
|
+
className: "has-sub-items max-w-full min-w-0 flex flex-col",
|
|
2036
2047
|
children: [
|
|
2037
2048
|
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
2038
2049
|
ToolTip,
|