@itilite/lumina-ui 1.0.1 → 1.0.3-alpha

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.
Files changed (122) hide show
  1. package/README.md +43 -10
  2. package/dist/AdvancedDateRangePicker-D7xn4So6.d.mts +59 -0
  3. package/dist/AdvancedDateRangePicker-D7xn4So6.d.ts +59 -0
  4. package/dist/AdvancedDateRangePicker-ozItnkhp.d.mts +57 -0
  5. package/dist/AdvancedDateRangePicker-ozItnkhp.d.ts +57 -0
  6. package/dist/Table-BOq-_9Nr.d.mts +121 -0
  7. package/dist/Table-BOq-_9Nr.d.ts +121 -0
  8. package/dist/atom/AdvancedDateRangePicker/AdvancedDateRangePicker.d.mts +2 -0
  9. package/dist/atom/AdvancedDateRangePicker/AdvancedDateRangePicker.d.ts +2 -0
  10. package/dist/atom/AdvancedDateRangePicker/AdvancedDateRangePicker.js +1610 -0
  11. package/dist/atom/AdvancedDateRangePicker/AdvancedDateRangePicker.mjs +15 -0
  12. package/dist/atom/AdvancedDateRangePicker/InternalCalendar.d.mts +17 -0
  13. package/dist/atom/AdvancedDateRangePicker/InternalCalendar.d.ts +17 -0
  14. package/dist/atom/AdvancedDateRangePicker/InternalCalendar.js +370 -0
  15. package/dist/atom/AdvancedDateRangePicker/InternalCalendar.mjs +8 -0
  16. package/dist/{Avatar.d.mts → atom/Avatar/Avatar.d.mts} +1 -9
  17. package/dist/{Avatar.d.ts → atom/Avatar/Avatar.d.ts} +1 -9
  18. package/dist/{Avatar.js → atom/Avatar/Avatar.js} +4 -2
  19. package/dist/{Avatar.mjs → atom/Avatar/Avatar.mjs} +2 -2
  20. package/dist/{Button.js → atom/Button/Button.js} +1 -1
  21. package/dist/{Button.mjs → atom/Button/Button.mjs} +2 -2
  22. package/dist/{Checkbox.mjs → atom/Checkbox/Checkbox.mjs} +2 -2
  23. package/dist/atom/LoadingSpinner/LoadingSpinner.d.mts +19 -0
  24. package/dist/atom/LoadingSpinner/LoadingSpinner.d.ts +19 -0
  25. package/dist/atom/LoadingSpinner/LoadingSpinner.js +90 -0
  26. package/dist/atom/LoadingSpinner/LoadingSpinner.mjs +9 -0
  27. package/dist/{Modal.d.mts → atom/Modal/Modal.d.mts} +1 -1
  28. package/dist/{Modal.d.ts → atom/Modal/Modal.d.ts} +1 -1
  29. package/dist/{Modal.js → atom/Modal/Modal.js} +1 -1
  30. package/dist/atom/Modal/Modal.mjs +10 -0
  31. package/dist/{Radio.mjs → atom/Radio/Radio.mjs} +2 -2
  32. package/dist/atom/RangePicker/Chevron.d.mts +13 -0
  33. package/dist/atom/RangePicker/Chevron.d.ts +13 -0
  34. package/dist/atom/RangePicker/Chevron.js +110 -0
  35. package/dist/atom/RangePicker/Chevron.mjs +7 -0
  36. package/dist/atom/RangePicker/RangePicker.d.mts +26 -0
  37. package/dist/atom/RangePicker/RangePicker.d.ts +26 -0
  38. package/dist/atom/RangePicker/RangePicker.js +1465 -0
  39. package/dist/atom/RangePicker/RangePicker.mjs +13 -0
  40. package/dist/atom/Select/Select.d.mts +40 -0
  41. package/dist/atom/Select/Select.d.ts +40 -0
  42. package/dist/atom/Select/Select.js +805 -0
  43. package/dist/atom/Select/Select.mjs +11 -0
  44. package/dist/atom/Slider/Slider.d.mts +34 -0
  45. package/dist/atom/Slider/Slider.d.ts +34 -0
  46. package/dist/atom/Slider/Slider.js +107 -0
  47. package/dist/atom/Slider/Slider.mjs +9 -0
  48. package/dist/{Switch.mjs → atom/Switch/Switch.mjs} +2 -2
  49. package/dist/atom/Table/Table.d.mts +3 -0
  50. package/dist/atom/Table/Table.d.ts +3 -0
  51. package/dist/atom/Table/Table.js +307 -0
  52. package/dist/atom/Table/Table.mjs +9 -0
  53. package/dist/atom/Tag/Tag.d.mts +6 -0
  54. package/dist/atom/Tag/Tag.d.ts +6 -0
  55. package/dist/atom/Tag/Tag.js +108 -0
  56. package/dist/atom/Tag/Tag.mjs +9 -0
  57. package/dist/{Tooltip.mjs → atom/Tooltip/Tooltip.mjs} +2 -2
  58. package/dist/chunk-27LRL4RO.mjs +428 -0
  59. package/dist/chunk-3HXZIFV6.mjs +438 -0
  60. package/dist/chunk-4JX54OKI.mjs +627 -0
  61. package/dist/chunk-4VZB2KR2.mjs +51 -0
  62. package/dist/chunk-53O7JM5I.mjs +424 -0
  63. package/dist/chunk-62VAYFZA.mjs +437 -0
  64. package/dist/chunk-6ON32H2N.mjs +431 -0
  65. package/dist/chunk-6XIT27XY.mjs +269 -0
  66. package/dist/chunk-772C454L.mjs +438 -0
  67. package/dist/chunk-7L267Y4P.mjs +429 -0
  68. package/dist/chunk-7WSVCE2C.mjs +269 -0
  69. package/dist/{chunk-HISCHZ5H.mjs → chunk-AF2RKLH6.mjs} +1 -1
  70. package/dist/chunk-BFFLWW7N.mjs +250 -0
  71. package/dist/chunk-D3N7VFER.mjs +73 -0
  72. package/dist/chunk-FTL3PFC2.mjs +438 -0
  73. package/dist/chunk-GU5F7Z7I.mjs +681 -0
  74. package/dist/chunk-GZ4P7OL3.mjs +429 -0
  75. package/dist/{chunk-X76GNSBB.mjs → chunk-IWO2Y5QX.mjs} +4 -2
  76. package/dist/chunk-J4YYP4IZ.mjs +0 -0
  77. package/dist/chunk-K2A4TWA3.mjs +430 -0
  78. package/dist/chunk-L3L42SIL.mjs +429 -0
  79. package/dist/chunk-MA23J4WQ.mjs +430 -0
  80. package/dist/chunk-N2WTNCQU.mjs +66 -0
  81. package/dist/chunk-N4DPPZVJ.mjs +269 -0
  82. package/dist/chunk-PQ3B2FEB.mjs +249 -0
  83. package/dist/chunk-QKTMWS4J.mjs +43 -0
  84. package/dist/chunk-QRGHJP7U.mjs +437 -0
  85. package/dist/chunk-RC6IGURJ.mjs +428 -0
  86. package/dist/chunk-TQDZWJZP.mjs +269 -0
  87. package/dist/{chunk-N355RJGH.mjs → chunk-UQJ3BDM4.mjs} +1 -1
  88. package/dist/chunk-V3CHJHUX.mjs +424 -0
  89. package/dist/chunk-ZGV6QMVM.mjs +437 -0
  90. package/dist/chunk-ZTRM4HZJ.mjs +53 -0
  91. package/dist/index.d.mts +18 -7
  92. package/dist/index.d.ts +18 -7
  93. package/dist/index.js +2470 -8
  94. package/dist/index.mjs +44 -10
  95. package/dist/molecules/UserProfile/UserProfile.d.mts +23 -0
  96. package/dist/molecules/UserProfile/UserProfile.d.ts +23 -0
  97. package/dist/molecules/UserProfile/UserProfile.js +243 -0
  98. package/dist/molecules/UserProfile/UserProfile.mjs +11 -0
  99. package/dist/styles.css +1891 -907
  100. package/dist/types-D4MD2w3_.d.mts +9 -0
  101. package/dist/types-D4MD2w3_.d.ts +9 -0
  102. package/dist/types-mhQmqhsR.d.mts +10 -0
  103. package/dist/types-mhQmqhsR.d.ts +10 -0
  104. package/package.json +9 -32
  105. package/dist/Modal.mjs +0 -10
  106. package/dist/chunk-2O2IH2FG.mjs +0 -83
  107. package/dist/styles.d.mts +0 -2
  108. package/dist/styles.d.ts +0 -2
  109. /package/dist/{Button.d.mts → atom/Button/Button.d.mts} +0 -0
  110. /package/dist/{Button.d.ts → atom/Button/Button.d.ts} +0 -0
  111. /package/dist/{Checkbox.d.mts → atom/Checkbox/Checkbox.d.mts} +0 -0
  112. /package/dist/{Checkbox.d.ts → atom/Checkbox/Checkbox.d.ts} +0 -0
  113. /package/dist/{Checkbox.js → atom/Checkbox/Checkbox.js} +0 -0
  114. /package/dist/{Radio.d.mts → atom/Radio/Radio.d.mts} +0 -0
  115. /package/dist/{Radio.d.ts → atom/Radio/Radio.d.ts} +0 -0
  116. /package/dist/{Radio.js → atom/Radio/Radio.js} +0 -0
  117. /package/dist/{Switch.d.mts → atom/Switch/Switch.d.mts} +0 -0
  118. /package/dist/{Switch.d.ts → atom/Switch/Switch.d.ts} +0 -0
  119. /package/dist/{Switch.js → atom/Switch/Switch.js} +0 -0
  120. /package/dist/{Tooltip.d.mts → atom/Tooltip/Tooltip.d.mts} +0 -0
  121. /package/dist/{Tooltip.d.ts → atom/Tooltip/Tooltip.d.ts} +0 -0
  122. /package/dist/{Tooltip.js → atom/Tooltip/Tooltip.js} +0 -0
@@ -0,0 +1,429 @@
1
+ import {
2
+ InternalCalendar_default
3
+ } from "./chunk-N4DPPZVJ.mjs";
4
+ import {
5
+ Button_default
6
+ } from "./chunk-AF2RKLH6.mjs";
7
+
8
+ // src/atom/AdvancedDateRangePicker/AdvancedDateRangePicker.tsx
9
+ import { memo, useCallback, useEffect, useMemo, useState } from "react";
10
+ import clsx from "clsx";
11
+ import dayjs from "dayjs";
12
+ import customParseFormat from "dayjs/plugin/customParseFormat.js";
13
+ import isSameOrBefore from "dayjs/plugin/isSameOrBefore.js";
14
+
15
+ // src/atom/AdvancedDateRangePicker/AdvancedDateRangePicker.module.scss
16
+ var AdvancedDateRangePicker_module_default = { "root": "AdvancedDateRangePicker-module__root___udir8", "inner": "AdvancedDateRangePicker-module__inner___P4OHa", "left": "AdvancedDateRangePicker-module__left___T6E84", "sidebarItem": "AdvancedDateRangePicker-module__sidebarItem___-NXPm", "sidebarItemActive": "AdvancedDateRangePicker-module__sidebarItemActive___5GmBY", "main": "AdvancedDateRangePicker-module__main___G4MU9", "header": "AdvancedDateRangePicker-module__header___mxXEE", "timezoneWrapper": "AdvancedDateRangePicker-module__timezoneWrapper___886Qm", "dateTimeWrapper": "AdvancedDateRangePicker-module__dateTimeWrapper___unDQJ", "headerGroup": "AdvancedDateRangePicker-module__headerGroup___J7mJB", "headerLabel": "AdvancedDateRangePicker-module__headerLabel___Yvhkr", "headerSeparator": "AdvancedDateRangePicker-module__headerSeparator___Vwx6P", "timezoneSelect": "AdvancedDateRangePicker-module__timezoneSelect___f4oln", "timezoneDisabledBadge": "AdvancedDateRangePicker-module__timezoneDisabledBadge___VBxOd", "inputWrapper": "AdvancedDateRangePicker-module__inputWrapper___bFFNF", "dateTimeColumn": "AdvancedDateRangePicker-module__dateTimeColumn___tdDV3", "dateTimeGroup": "AdvancedDateRangePicker-module__dateTimeGroup___azF09", "dateInput": "AdvancedDateRangePicker-module__dateInput___0t9ww", "inputError": "AdvancedDateRangePicker-module__inputError___A5hid", "timeInput": "AdvancedDateRangePicker-module__timeInput___Jalr9", "errorMessage": "AdvancedDateRangePicker-module__errorMessage___gx7ag", "body": "AdvancedDateRangePicker-module__body___f8XYj", "footer": "AdvancedDateRangePicker-module__footer___rsJ2w", "doneBtn": "AdvancedDateRangePicker-module__doneBtn___mt-Sv" };
17
+
18
+ // src/atom/AdvancedDateRangePicker/AdvancedDateRangePicker.tsx
19
+ import { jsx, jsxs } from "react/jsx-runtime";
20
+ dayjs.extend(customParseFormat);
21
+ dayjs.extend(isSameOrBefore);
22
+ var DEFAULT_TIME = { hour: "12", minute: "00", period: "PM" };
23
+ function getPresets() {
24
+ const today = /* @__PURE__ */ new Date();
25
+ today.setHours(0, 0, 0, 0);
26
+ return [
27
+ {
28
+ label: "Custom",
29
+ key: "custom",
30
+ getRange: () => [null, null]
31
+ },
32
+ {
33
+ label: "Yesterday",
34
+ key: "yesterday",
35
+ getRange: () => {
36
+ const d = new Date(today);
37
+ d.setDate(d.getDate() - 1);
38
+ return [d, d];
39
+ }
40
+ },
41
+ {
42
+ label: "Previous week",
43
+ key: "previous-week",
44
+ getRange: () => {
45
+ const dayOfWeek = today.getDay();
46
+ const start = new Date(today);
47
+ start.setDate(today.getDate() - dayOfWeek - 6);
48
+ const end = new Date(today);
49
+ return [start, end];
50
+ }
51
+ },
52
+ {
53
+ label: "This month",
54
+ key: "this-month",
55
+ getRange: () => {
56
+ const start = new Date(today.getFullYear(), today.getMonth(), 1);
57
+ const end = new Date(today.getFullYear(), today.getMonth() + 1, 0);
58
+ return [start, end];
59
+ }
60
+ },
61
+ {
62
+ label: "Previous month",
63
+ key: "previous-month",
64
+ getRange: () => {
65
+ const start = new Date(today.getFullYear(), today.getMonth() - 1, 1);
66
+ const end = new Date(today.getFullYear(), today.getMonth(), 0);
67
+ return [start, end];
68
+ }
69
+ },
70
+ {
71
+ label: "Previous quarter",
72
+ key: "previous-quarter",
73
+ getRange: () => {
74
+ const month = today.getMonth();
75
+ const quarter = Math.floor(month / 3);
76
+ const startMonth = (quarter - 1) * 3;
77
+ const start = new Date(today.getFullYear(), startMonth, 1);
78
+ const end = new Date(today.getFullYear(), startMonth + 3, 0);
79
+ return [start, end];
80
+ }
81
+ }
82
+ ];
83
+ }
84
+ function applyDateMask(v, prev) {
85
+ if (v.length < prev.length) return v;
86
+ const digits = v.replace(/[^\d]/g, "").slice(0, 8);
87
+ if (digits.length >= 2) {
88
+ const d = Number(digits.slice(0, 2));
89
+ if (d < 1 || d > 31) return prev;
90
+ }
91
+ if (digits.length >= 4) {
92
+ const m = Number(digits.slice(2, 4));
93
+ if (m < 1 || m > 12) return prev;
94
+ }
95
+ let result = "";
96
+ if (digits.length > 0) result += digits.slice(0, 2);
97
+ if (digits.length >= 2) result += "-";
98
+ if (digits.length > 2) result += digits.slice(2, 4);
99
+ if (digits.length >= 4) result += "-";
100
+ if (digits.length > 4) result += digits.slice(4, 8);
101
+ return result.slice(0, 10);
102
+ }
103
+ function applyTimeMask(v, prev) {
104
+ if (v.length < prev.length) return v;
105
+ const digits = v.replace(/[^\d]/g, "").slice(0, 4);
106
+ if (digits.length >= 2) {
107
+ const h = Number(digits.slice(0, 2));
108
+ if (h < 1 || h > 12) return prev;
109
+ }
110
+ if (digits.length >= 4) {
111
+ const m = Number(digits.slice(2, 4));
112
+ if (m > 59) return prev;
113
+ }
114
+ let result = "";
115
+ if (digits.length > 0) result += digits.slice(0, 2);
116
+ if (digits.length >= 2) result += ":";
117
+ if (digits.length > 2) result += digits.slice(2, 4);
118
+ if (v.toUpperCase().includes("A")) result += " AM";
119
+ else if (v.toUpperCase().includes("P")) result += " PM";
120
+ else if (digits.length === 4) result += " ";
121
+ return result.slice(0, 8);
122
+ }
123
+ function formatForDisplay(date) {
124
+ if (!date) return "";
125
+ return dayjs(date).format("DD-MM-YYYY");
126
+ }
127
+ function validateDateString(raw) {
128
+ const regex = /^(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[0-2])-\d{4}$/;
129
+ if (!regex.test(raw)) return false;
130
+ const [d, m, y] = raw.split("-").map(Number);
131
+ const date = new Date(y, m - 1, d);
132
+ return date.getFullYear() === y && date.getMonth() === m - 1 && date.getDate() === d;
133
+ }
134
+ function validateTimeString(raw) {
135
+ const regex = /^(0[1-9]|1[0-2]):(0[0-9]|[1-5][0-9])\s(AM|PM)$/i;
136
+ return regex.test(raw);
137
+ }
138
+ function parseDateInput(raw) {
139
+ if (!validateDateString(raw)) return null;
140
+ return dayjs(raw, "DD-MM-YYYY", true).toDate();
141
+ }
142
+ function parseTimeInput(raw) {
143
+ if (!validateTimeString(raw)) return null;
144
+ const match = raw.match(/^(\d{1,2}):(\d{2})\s*(AM|PM)$/i);
145
+ if (!match) return null;
146
+ return {
147
+ hour: match[1].padStart(2, "0"),
148
+ minute: match[2].padStart(2, "0"),
149
+ period: match[3].toUpperCase()
150
+ };
151
+ }
152
+ function formatTime(t) {
153
+ return `${t.hour}:${t.minute} ${t.period}`;
154
+ }
155
+ var DateTimeInputGroup = memo(function DateTimeInputGroup2({
156
+ label,
157
+ dateValue,
158
+ timeValue,
159
+ dateError,
160
+ timeError,
161
+ onDateChange,
162
+ onTimeChange
163
+ }) {
164
+ const [isDateFocused, setIsDateFocused] = useState(false);
165
+ const [isTimeFocused, setIsTimeFocused] = useState(false);
166
+ const showDateError = dateError && !isDateFocused;
167
+ const showTimeError = timeError && !isTimeFocused;
168
+ return /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.headerGroup, children: [
169
+ /* @__PURE__ */ jsx("span", { className: AdvancedDateRangePicker_module_default.headerLabel, children: label }),
170
+ /* @__PURE__ */ jsx("div", { className: AdvancedDateRangePicker_module_default.dateTimeColumn, children: /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.dateTimeGroup, children: [
171
+ /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.inputWrapper, children: [
172
+ /* @__PURE__ */ jsx(
173
+ "input",
174
+ {
175
+ type: "text",
176
+ placeholder: "DD-MM-YYYY",
177
+ value: dateValue,
178
+ onFocus: () => setIsDateFocused(true),
179
+ onBlur: () => setIsDateFocused(false),
180
+ onChange: (e) => onDateChange(e.target.value),
181
+ className: clsx(AdvancedDateRangePicker_module_default.dateInput, { [AdvancedDateRangePicker_module_default.inputError]: showDateError })
182
+ }
183
+ ),
184
+ showDateError && /* @__PURE__ */ jsx("span", { className: AdvancedDateRangePicker_module_default.errorMessage, children: "Enter valid date" })
185
+ ] }),
186
+ /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.inputWrapper, children: [
187
+ /* @__PURE__ */ jsx(
188
+ "input",
189
+ {
190
+ type: "text",
191
+ placeholder: "12:00 PM",
192
+ value: timeValue,
193
+ onFocus: () => setIsTimeFocused(true),
194
+ onBlur: () => setIsTimeFocused(false),
195
+ onChange: (e) => onTimeChange(e.target.value),
196
+ className: clsx(AdvancedDateRangePicker_module_default.timeInput, { [AdvancedDateRangePicker_module_default.inputError]: showTimeError })
197
+ }
198
+ ),
199
+ showTimeError && /* @__PURE__ */ jsx("span", { className: AdvancedDateRangePicker_module_default.errorMessage, children: "Enter valid time" })
200
+ ] })
201
+ ] }) })
202
+ ] });
203
+ });
204
+ function AdvancedDateRangePicker({
205
+ value,
206
+ onChange,
207
+ confirmLabel = "Done",
208
+ className = "",
209
+ disabled = false,
210
+ disablePastDates = false,
211
+ minDate = null,
212
+ maxDate = null,
213
+ showSingleCalendar = false,
214
+ id = "adv-drp",
215
+ defaultTimezone = "UTC",
216
+ isTimezoneDisabled = false,
217
+ timezoneOptions = [],
218
+ defaultPreset = "custom"
219
+ }) {
220
+ var _a, _b, _c;
221
+ const PRESETS = useMemo(() => getPresets(), []);
222
+ const [startDate, setStartDate] = useState((_a = value == null ? void 0 : value.startDate) != null ? _a : null);
223
+ const [endDate, setEndDate] = useState((_b = value == null ? void 0 : value.endDate) != null ? _b : null);
224
+ const [timezone, setTimezone] = useState((_c = value == null ? void 0 : value.timezone) != null ? _c : defaultTimezone);
225
+ const [fromDateStr, setFromDateStr] = useState(formatForDisplay(startDate));
226
+ const [toDateStr, setToDateStr] = useState(formatForDisplay(endDate));
227
+ const [fromTimeStr, setFromTimeStr] = useState(
228
+ (value == null ? void 0 : value.startTime) ? formatTime(value.startTime) : "12:00 PM"
229
+ );
230
+ const [toTimeStr, setToTimeStr] = useState(
231
+ (value == null ? void 0 : value.endTime) ? formatTime(value.endTime) : "12:00 PM"
232
+ );
233
+ const [activePreset, setActivePreset] = useState(defaultPreset);
234
+ const fromDateError = useMemo(() => fromDateStr.length > 0 && (fromDateStr.length < 10 || !validateDateString(fromDateStr)), [fromDateStr]);
235
+ const toDateError = useMemo(() => toDateStr.length > 0 && (toDateStr.length < 10 || !validateDateString(toDateStr)), [toDateStr]);
236
+ const fromTimeError = useMemo(() => fromTimeStr.length > 0 && (fromTimeStr.length < 8 || !validateTimeString(fromTimeStr)), [fromTimeStr]);
237
+ const toTimeError = useMemo(() => toTimeStr.length > 0 && (toTimeStr.length < 8 || !validateTimeString(toTimeStr)), [toTimeStr]);
238
+ const isReady = useMemo(() => {
239
+ return startDate !== null && endDate !== null && validateDateString(fromDateStr) && validateDateString(toDateStr) && validateTimeString(fromTimeStr) && validateTimeString(toTimeStr) && dayjs(startDate).isSameOrBefore(dayjs(endDate), "day");
240
+ }, [startDate, endDate, fromDateStr, toDateStr, fromTimeStr, toTimeStr]);
241
+ useEffect(() => {
242
+ var _a2, _b2, _c2;
243
+ if (value) {
244
+ setStartDate((_a2 = value.startDate) != null ? _a2 : null);
245
+ setEndDate((_b2 = value.endDate) != null ? _b2 : null);
246
+ setTimezone((_c2 = value.timezone) != null ? _c2 : defaultTimezone);
247
+ if (value.startTime) setFromTimeStr(formatTime(value.startTime));
248
+ if (value.endTime) setToTimeStr(formatTime(value.endTime));
249
+ }
250
+ }, [value, defaultTimezone]);
251
+ useEffect(() => {
252
+ setFromDateStr(formatForDisplay(startDate));
253
+ }, [startDate]);
254
+ useEffect(() => {
255
+ setToDateStr(formatForDisplay(endDate));
256
+ }, [endDate]);
257
+ const rangeValue = useMemo(() => [
258
+ startDate ? startDate.toISOString() : "",
259
+ endDate ? endDate.toISOString() : ""
260
+ ], [startDate, endDate]);
261
+ const handleRangeChange = useCallback(
262
+ (range) => {
263
+ const [s, e] = range;
264
+ if (s) {
265
+ const sDateByDayjs = dayjs(s, "D MMM, YYYY").toDate();
266
+ setStartDate(sDateByDayjs);
267
+ } else {
268
+ setStartDate(null);
269
+ }
270
+ if (e) {
271
+ const eDateByDayjs = dayjs(e, "D MMM, YYYY").toDate();
272
+ setEndDate(eDateByDayjs);
273
+ } else {
274
+ setEndDate(null);
275
+ }
276
+ setActivePreset("custom");
277
+ },
278
+ []
279
+ );
280
+ const handlePreset = useCallback(
281
+ (preset) => {
282
+ const [s, e] = preset.getRange();
283
+ setStartDate(s);
284
+ setEndDate(e);
285
+ setActivePreset(preset.key);
286
+ },
287
+ []
288
+ );
289
+ const handleFromDateChange = useCallback((v) => {
290
+ const masked = applyDateMask(v, fromDateStr);
291
+ setFromDateStr(masked);
292
+ setActivePreset("custom");
293
+ if (masked.length === 10) {
294
+ const parsed = parseDateInput(masked);
295
+ if (parsed) {
296
+ setStartDate(parsed);
297
+ if (endDate && dayjs(parsed).isAfter(dayjs(endDate), "day")) {
298
+ setEndDate(null);
299
+ }
300
+ }
301
+ }
302
+ }, [fromDateStr, endDate]);
303
+ const handleToDateChange = useCallback((v) => {
304
+ const masked = applyDateMask(v, toDateStr);
305
+ setToDateStr(masked);
306
+ setActivePreset("custom");
307
+ if (masked.length === 10) {
308
+ const parsed = parseDateInput(masked);
309
+ if (parsed) {
310
+ setEndDate(parsed);
311
+ if (startDate && dayjs(parsed).isBefore(dayjs(startDate), "day")) {
312
+ setStartDate(null);
313
+ }
314
+ }
315
+ }
316
+ }, [toDateStr, startDate]);
317
+ const handleFromTimeChange = useCallback((v) => {
318
+ const masked = applyTimeMask(v, fromTimeStr);
319
+ setFromTimeStr(masked);
320
+ setActivePreset("custom");
321
+ }, [fromTimeStr]);
322
+ const handleToTimeChange = useCallback((v) => {
323
+ const masked = applyTimeMask(v, toTimeStr);
324
+ setToTimeStr(masked);
325
+ setActivePreset("custom");
326
+ }, [toTimeStr]);
327
+ const handleDone = useCallback(() => {
328
+ var _a2, _b2;
329
+ if (!isReady) return;
330
+ const fromTime = (_a2 = parseTimeInput(fromTimeStr)) != null ? _a2 : DEFAULT_TIME;
331
+ const toTime = (_b2 = parseTimeInput(toTimeStr)) != null ? _b2 : DEFAULT_TIME;
332
+ onChange == null ? void 0 : onChange({
333
+ startDate,
334
+ endDate,
335
+ startTime: fromTime,
336
+ endTime: toTime,
337
+ timezone
338
+ });
339
+ }, [isReady, onChange, startDate, endDate, fromTimeStr, toTimeStr, timezone]);
340
+ return /* @__PURE__ */ jsxs("div", { className: clsx(AdvancedDateRangePicker_module_default.root, className), id, children: [
341
+ /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.inner, children: [
342
+ /* @__PURE__ */ jsx("aside", { className: AdvancedDateRangePicker_module_default.left, children: PRESETS.map((p) => /* @__PURE__ */ jsx(
343
+ "button",
344
+ {
345
+ type: "button",
346
+ onClick: () => handlePreset(p),
347
+ className: clsx(AdvancedDateRangePicker_module_default.sidebarItem, {
348
+ [AdvancedDateRangePicker_module_default.sidebarItemActive]: activePreset === p.key
349
+ }),
350
+ children: p.label
351
+ },
352
+ p.key
353
+ )) }),
354
+ /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.main, children: [
355
+ /* @__PURE__ */ jsxs("header", { className: AdvancedDateRangePicker_module_default.header, children: [
356
+ /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.timezoneWrapper, children: [
357
+ /* @__PURE__ */ jsx("span", { className: AdvancedDateRangePicker_module_default.headerLabel, children: "Timezone" }),
358
+ isTimezoneDisabled ? (
359
+ /* Disabled state: plain text badge instead of empty dropdown */
360
+ /* @__PURE__ */ jsx("div", { className: AdvancedDateRangePicker_module_default.timezoneDisabledBadge, children: timezone })
361
+ ) : /* @__PURE__ */ jsx(
362
+ "select",
363
+ {
364
+ value: timezone,
365
+ onChange: (e) => setTimezone(e.target.value),
366
+ className: AdvancedDateRangePicker_module_default.timezoneSelect,
367
+ children: timezoneOptions.map((tz) => /* @__PURE__ */ jsx("option", { value: tz.value, children: tz.label }, tz.value))
368
+ }
369
+ )
370
+ ] }),
371
+ /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.dateTimeWrapper, children: [
372
+ /* @__PURE__ */ jsx(
373
+ DateTimeInputGroup,
374
+ {
375
+ label: "From",
376
+ dateValue: fromDateStr,
377
+ timeValue: fromTimeStr,
378
+ dateError: fromDateError,
379
+ timeError: fromTimeError,
380
+ onDateChange: handleFromDateChange,
381
+ onTimeChange: handleFromTimeChange
382
+ }
383
+ ),
384
+ /* @__PURE__ */ jsx(
385
+ DateTimeInputGroup,
386
+ {
387
+ label: "To",
388
+ dateValue: toDateStr,
389
+ timeValue: toTimeStr,
390
+ dateError: toDateError,
391
+ timeError: toTimeError,
392
+ onDateChange: handleToDateChange,
393
+ onTimeChange: handleToTimeChange
394
+ }
395
+ )
396
+ ] })
397
+ ] }),
398
+ /* @__PURE__ */ jsx("div", { className: AdvancedDateRangePicker_module_default.body, children: /* @__PURE__ */ jsx(
399
+ InternalCalendar_default,
400
+ {
401
+ id: `${id}-calendar`,
402
+ dateRange: rangeValue,
403
+ onChange: handleRangeChange,
404
+ disablePastDates,
405
+ minDate,
406
+ maxDate,
407
+ showSingleCalendar
408
+ }
409
+ ) })
410
+ ] })
411
+ ] }),
412
+ /* @__PURE__ */ jsx("footer", { className: AdvancedDateRangePicker_module_default.footer, children: /* @__PURE__ */ jsx(
413
+ Button_default,
414
+ {
415
+ onClick: handleDone,
416
+ disabled: disabled || !isReady,
417
+ shape: "round",
418
+ children: confirmLabel
419
+ }
420
+ ) })
421
+ ] });
422
+ }
423
+ AdvancedDateRangePicker.displayName = "AdvancedDateRangePicker";
424
+ var AdvancedDateRangePicker_default = AdvancedDateRangePicker;
425
+
426
+ export {
427
+ AdvancedDateRangePicker,
428
+ AdvancedDateRangePicker_default
429
+ };