@itilite/lumina-ui 1.0.10-alpha → 1.0.12-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.
@@ -0,0 +1,453 @@
1
+ import {
2
+ Select_default
3
+ } from "./chunk-GU5F7Z7I.mjs";
4
+ import {
5
+ InternalCalendar_default
6
+ } from "./chunk-FPH63V2R.mjs";
7
+ import {
8
+ Button_default
9
+ } from "./chunk-AF2RKLH6.mjs";
10
+
11
+ // src/atom/AdvancedDateRangePicker/AdvancedDateRangePicker.tsx
12
+ import { memo, useCallback, useEffect, useMemo, useState } from "react";
13
+ import clsx from "clsx";
14
+ import dayjs from "dayjs";
15
+ import customParseFormat from "dayjs/plugin/customParseFormat.js";
16
+ import isSameOrBefore from "dayjs/plugin/isSameOrBefore.js";
17
+
18
+ // src/atom/AdvancedDateRangePicker/AdvancedDateRangePicker.module.scss
19
+ var AdvancedDateRangePicker_module_default = { "root": "AdvancedDateRangePicker-module__root___udir8", "singleCalendar": "AdvancedDateRangePicker-module__singleCalendar___qy2-H", "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", "timezoneSelectContainer": "AdvancedDateRangePicker-module__timezoneSelectContainer___8SMc4", "timezoneSelectInput": "AdvancedDateRangePicker-module__timezoneSelectInput___ol0-7", "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" };
20
+
21
+ // src/atom/AdvancedDateRangePicker/AdvancedDateRangePicker.tsx
22
+ import { jsx, jsxs } from "react/jsx-runtime";
23
+ dayjs.extend(customParseFormat);
24
+ dayjs.extend(isSameOrBefore);
25
+ var DEFAULT_TIME = { hour: "12", minute: "00", period: "PM" };
26
+ function getPresets() {
27
+ const today = /* @__PURE__ */ new Date();
28
+ today.setHours(0, 0, 0, 0);
29
+ return [
30
+ {
31
+ label: "Custom",
32
+ key: "custom",
33
+ getRange: () => [null, null]
34
+ },
35
+ {
36
+ label: "Yesterday",
37
+ key: "yesterday",
38
+ getRange: () => {
39
+ const d = new Date(today);
40
+ d.setDate(d.getDate() - 1);
41
+ return [d, d];
42
+ }
43
+ },
44
+ {
45
+ label: "Previous week",
46
+ key: "previous-week",
47
+ getRange: () => {
48
+ const daysToLastSunday = today.getDay() === 0 ? 7 : today.getDay();
49
+ const lastSunday = new Date(today);
50
+ lastSunday.setDate(today.getDate() - daysToLastSunday);
51
+ const monday = new Date(lastSunday);
52
+ monday.setDate(lastSunday.getDate() - 6);
53
+ return [monday, lastSunday];
54
+ }
55
+ },
56
+ {
57
+ label: "This month",
58
+ key: "this-month",
59
+ getRange: () => {
60
+ const start = new Date(today.getFullYear(), today.getMonth(), 1);
61
+ const end = new Date(today.getFullYear(), today.getMonth() + 1, 0);
62
+ return [start, end];
63
+ }
64
+ },
65
+ {
66
+ label: "Previous month",
67
+ key: "previous-month",
68
+ getRange: () => {
69
+ const start = new Date(today.getFullYear(), today.getMonth() - 1, 1);
70
+ const end = new Date(today.getFullYear(), today.getMonth(), 0);
71
+ return [start, end];
72
+ }
73
+ },
74
+ {
75
+ label: "Previous quarter",
76
+ key: "previous-quarter",
77
+ getRange: () => {
78
+ const month = today.getMonth();
79
+ const quarter = Math.floor(month / 3);
80
+ const startMonth = (quarter - 1) * 3;
81
+ const start = new Date(today.getFullYear(), startMonth, 1);
82
+ const end = new Date(today.getFullYear(), startMonth + 3, 0);
83
+ return [start, end];
84
+ }
85
+ }
86
+ ];
87
+ }
88
+ function applyDateMask(v, prev) {
89
+ if (v.length < prev.length) return v;
90
+ const digits = v.replace(/[^\d]/g, "").slice(0, 8);
91
+ if (digits.length >= 2) {
92
+ const d = Number(digits.slice(0, 2));
93
+ if (d < 1 || d > 31) return prev;
94
+ }
95
+ if (digits.length >= 4) {
96
+ const m = Number(digits.slice(2, 4));
97
+ if (m < 1 || m > 12) return prev;
98
+ }
99
+ let result = "";
100
+ if (digits.length > 0) result += digits.slice(0, 2);
101
+ if (digits.length >= 2) result += "-";
102
+ if (digits.length > 2) result += digits.slice(2, 4);
103
+ if (digits.length >= 4) result += "-";
104
+ if (digits.length > 4) result += digits.slice(4, 8);
105
+ return result.slice(0, 10);
106
+ }
107
+ function applyTimeMask(v, prev) {
108
+ if (v.length < prev.length) return v;
109
+ const digits = v.replace(/[^\d]/g, "").slice(0, 4);
110
+ if (digits.length >= 2) {
111
+ const h = Number(digits.slice(0, 2));
112
+ if (h < 1 || h > 12) return prev;
113
+ }
114
+ if (digits.length >= 4) {
115
+ const m = Number(digits.slice(2, 4));
116
+ if (m > 59) return prev;
117
+ }
118
+ let result = "";
119
+ if (digits.length > 0) result += digits.slice(0, 2);
120
+ if (digits.length >= 2) result += ":";
121
+ if (digits.length > 2) result += digits.slice(2, 4);
122
+ if (v.toUpperCase().includes("A")) result += " AM";
123
+ else if (v.toUpperCase().includes("P")) result += " PM";
124
+ else if (digits.length === 4) result += " ";
125
+ return result.slice(0, 8);
126
+ }
127
+ function formatForDisplay(date) {
128
+ if (!date) return "";
129
+ return dayjs(date).format("DD-MM-YYYY");
130
+ }
131
+ function validateDateString(raw) {
132
+ const regex = /^(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[0-2])-\d{4}$/;
133
+ if (!regex.test(raw)) return false;
134
+ const [d, m, y] = raw.split("-").map(Number);
135
+ const date = new Date(y, m - 1, d);
136
+ return date.getFullYear() === y && date.getMonth() === m - 1 && date.getDate() === d;
137
+ }
138
+ function validateTimeString(raw) {
139
+ const regex = /^(0[1-9]|1[0-2]):(0[0-9]|[1-5][0-9])\s(AM|PM)$/i;
140
+ return regex.test(raw);
141
+ }
142
+ function parseDateInput(raw) {
143
+ if (!validateDateString(raw)) return null;
144
+ return dayjs(raw, "DD-MM-YYYY", true).toDate();
145
+ }
146
+ function parseTimeInput(raw) {
147
+ if (!validateTimeString(raw)) return null;
148
+ const match = raw.match(/^(\d{1,2}):(\d{2})\s*(AM|PM)$/i);
149
+ if (!match) return null;
150
+ return {
151
+ hour: match[1].padStart(2, "0"),
152
+ minute: match[2].padStart(2, "0"),
153
+ period: match[3].toUpperCase()
154
+ };
155
+ }
156
+ function formatTime(t) {
157
+ return `${t.hour}:${t.minute} ${t.period}`;
158
+ }
159
+ var DateTimeInputGroup = memo(function DateTimeInputGroup2({
160
+ label,
161
+ dateValue,
162
+ timeValue,
163
+ dateError,
164
+ timeError,
165
+ onDateChange,
166
+ onTimeChange
167
+ }) {
168
+ const [isDateFocused, setIsDateFocused] = useState(false);
169
+ const [isTimeFocused, setIsTimeFocused] = useState(false);
170
+ const showDateError = dateError && !isDateFocused;
171
+ const showTimeError = timeError && !isTimeFocused;
172
+ return /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.headerGroup, children: [
173
+ /* @__PURE__ */ jsx("span", { className: AdvancedDateRangePicker_module_default.headerLabel, children: label }),
174
+ /* @__PURE__ */ jsx("div", { className: AdvancedDateRangePicker_module_default.dateTimeColumn, children: /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.dateTimeGroup, children: [
175
+ /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.inputWrapper, children: [
176
+ /* @__PURE__ */ jsx(
177
+ "input",
178
+ {
179
+ type: "text",
180
+ placeholder: "dd-mm-yyyy",
181
+ value: dateValue,
182
+ onFocus: () => setIsDateFocused(true),
183
+ onBlur: () => setIsDateFocused(false),
184
+ onChange: (e) => onDateChange(e.target.value),
185
+ className: clsx(AdvancedDateRangePicker_module_default.dateInput, { [AdvancedDateRangePicker_module_default.inputError]: showDateError })
186
+ }
187
+ ),
188
+ showDateError && /* @__PURE__ */ jsx("span", { className: AdvancedDateRangePicker_module_default.errorMessage, children: "Enter valid date" })
189
+ ] }),
190
+ /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.inputWrapper, children: [
191
+ /* @__PURE__ */ jsx(
192
+ "input",
193
+ {
194
+ type: "text",
195
+ placeholder: "12:00 PM",
196
+ value: timeValue,
197
+ onFocus: () => setIsTimeFocused(true),
198
+ onBlur: () => setIsTimeFocused(false),
199
+ onChange: (e) => onTimeChange(e.target.value),
200
+ className: clsx(AdvancedDateRangePicker_module_default.timeInput, { [AdvancedDateRangePicker_module_default.inputError]: showTimeError })
201
+ }
202
+ ),
203
+ showTimeError && /* @__PURE__ */ jsx("span", { className: AdvancedDateRangePicker_module_default.errorMessage, children: "Enter valid time" })
204
+ ] })
205
+ ] }) })
206
+ ] });
207
+ });
208
+ function AdvancedDateRangePicker({
209
+ value,
210
+ onChange,
211
+ confirmLabel = "Done",
212
+ className = "",
213
+ disabled = false,
214
+ disablePastDates = false,
215
+ minDate = null,
216
+ maxDate = null,
217
+ showSingleCalendar = false,
218
+ id = "adv-drp",
219
+ defaultTimezone = "UTC",
220
+ isTimezoneDisabled = false,
221
+ timezoneOptions = [],
222
+ defaultPreset = "custom",
223
+ presets
224
+ }) {
225
+ var _a, _b, _c;
226
+ const PRESETS = useMemo(() => presets || getPresets(), [presets]);
227
+ const [startDate, setStartDate] = useState((_a = value == null ? void 0 : value.startDate) != null ? _a : null);
228
+ const [endDate, setEndDate] = useState((_b = value == null ? void 0 : value.endDate) != null ? _b : null);
229
+ const [timezone, setTimezone] = useState((_c = value == null ? void 0 : value.timezone) != null ? _c : defaultTimezone);
230
+ const [fromDateStr, setFromDateStr] = useState(formatForDisplay(startDate));
231
+ const [toDateStr, setToDateStr] = useState(formatForDisplay(endDate));
232
+ const [fromTimeStr, setFromTimeStr] = useState(
233
+ (value == null ? void 0 : value.startTime) ? formatTime(value.startTime) : "12:00 PM"
234
+ );
235
+ const [toTimeStr, setToTimeStr] = useState(
236
+ (value == null ? void 0 : value.endTime) ? formatTime(value.endTime) : "12:00 PM"
237
+ );
238
+ const [activePreset, setActivePreset] = useState(defaultPreset);
239
+ const isSingle = showSingleCalendar;
240
+ const fromDateError = useMemo(() => fromDateStr.length > 0 && (fromDateStr.length < 10 || !validateDateString(fromDateStr)), [fromDateStr]);
241
+ const toDateError = useMemo(() => toDateStr.length > 0 && (toDateStr.length < 10 || !validateDateString(toDateStr)), [toDateStr]);
242
+ const fromTimeError = useMemo(() => fromTimeStr.length > 0 && (fromTimeStr.length < 8 || !validateTimeString(fromTimeStr)), [fromTimeStr]);
243
+ const toTimeError = useMemo(() => toTimeStr.length > 0 && (toTimeStr.length < 8 || !validateTimeString(toTimeStr)), [toTimeStr]);
244
+ const isReady = useMemo(() => {
245
+ return startDate !== null && endDate !== null && validateDateString(fromDateStr) && validateDateString(toDateStr) && validateTimeString(fromTimeStr) && validateTimeString(toTimeStr) && dayjs(startDate).isSameOrBefore(dayjs(endDate), "day");
246
+ }, [startDate, endDate, fromDateStr, toDateStr, fromTimeStr, toTimeStr]);
247
+ useEffect(() => {
248
+ var _a2, _b2, _c2;
249
+ if (value) {
250
+ setStartDate((_a2 = value.startDate) != null ? _a2 : null);
251
+ setEndDate((_b2 = value.endDate) != null ? _b2 : null);
252
+ setTimezone((_c2 = value.timezone) != null ? _c2 : defaultTimezone);
253
+ if (value.startTime) setFromTimeStr(formatTime(value.startTime));
254
+ if (value.endTime) setToTimeStr(formatTime(value.endTime));
255
+ if (value.activePreset) {
256
+ setActivePreset(value.activePreset);
257
+ } else {
258
+ const matchedPreset = PRESETS.find((p) => {
259
+ if (p.key === "custom") return false;
260
+ const [s, e] = p.getRange();
261
+ if (!s || !e || !value.startDate || !value.endDate) return false;
262
+ return dayjs(s).isSame(dayjs(value.startDate), "day") && dayjs(e).isSame(dayjs(value.endDate), "day");
263
+ });
264
+ setActivePreset(matchedPreset ? matchedPreset.key : "custom");
265
+ }
266
+ }
267
+ }, [value, defaultTimezone, PRESETS]);
268
+ useEffect(() => {
269
+ setFromDateStr(formatForDisplay(startDate));
270
+ }, [startDate]);
271
+ useEffect(() => {
272
+ setToDateStr(formatForDisplay(endDate));
273
+ }, [endDate]);
274
+ const rangeValue = useMemo(() => [
275
+ startDate ? startDate.toISOString() : "",
276
+ endDate ? endDate.toISOString() : ""
277
+ ], [startDate, endDate]);
278
+ const handleRangeChange = useCallback(
279
+ (range) => {
280
+ const [s, e] = range;
281
+ if (s) {
282
+ const sDateByDayjs = dayjs(s, "D MMM, YYYY").toDate();
283
+ setStartDate(sDateByDayjs);
284
+ } else {
285
+ setStartDate(null);
286
+ }
287
+ if (e) {
288
+ const eDateByDayjs = dayjs(e, "D MMM, YYYY").toDate();
289
+ setEndDate(eDateByDayjs);
290
+ } else {
291
+ setEndDate(null);
292
+ }
293
+ setActivePreset("custom");
294
+ },
295
+ []
296
+ );
297
+ const handlePreset = useCallback(
298
+ (preset) => {
299
+ const [s, e] = preset.getRange();
300
+ setStartDate(s);
301
+ setEndDate(e);
302
+ setActivePreset(preset.key);
303
+ },
304
+ []
305
+ );
306
+ const handleFromDateChange = useCallback((v) => {
307
+ const masked = applyDateMask(v, fromDateStr);
308
+ setFromDateStr(masked);
309
+ setActivePreset("custom");
310
+ if (masked.length === 10) {
311
+ const parsed = parseDateInput(masked);
312
+ if (parsed) {
313
+ setStartDate(parsed);
314
+ if (endDate && dayjs(parsed).isAfter(dayjs(endDate), "day")) {
315
+ setEndDate(null);
316
+ }
317
+ }
318
+ }
319
+ }, [fromDateStr, endDate]);
320
+ const handleToDateChange = useCallback((v) => {
321
+ const masked = applyDateMask(v, toDateStr);
322
+ setToDateStr(masked);
323
+ setActivePreset("custom");
324
+ if (masked.length === 10) {
325
+ const parsed = parseDateInput(masked);
326
+ if (parsed) {
327
+ setEndDate(parsed);
328
+ if (startDate && dayjs(parsed).isBefore(dayjs(startDate), "day")) {
329
+ setStartDate(null);
330
+ }
331
+ }
332
+ }
333
+ }, [toDateStr, startDate]);
334
+ const handleFromTimeChange = useCallback((v) => {
335
+ const masked = applyTimeMask(v, fromTimeStr);
336
+ setFromTimeStr(masked);
337
+ setActivePreset("custom");
338
+ }, [fromTimeStr]);
339
+ const handleToTimeChange = useCallback((v) => {
340
+ const masked = applyTimeMask(v, toTimeStr);
341
+ setToTimeStr(masked);
342
+ setActivePreset("custom");
343
+ }, [toTimeStr]);
344
+ const handleDone = useCallback(() => {
345
+ var _a2, _b2;
346
+ if (!isReady) return;
347
+ const fromTime = (_a2 = parseTimeInput(fromTimeStr)) != null ? _a2 : DEFAULT_TIME;
348
+ const toTime = (_b2 = parseTimeInput(toTimeStr)) != null ? _b2 : DEFAULT_TIME;
349
+ onChange == null ? void 0 : onChange({
350
+ startDate,
351
+ endDate,
352
+ startTime: fromTime,
353
+ endTime: toTime,
354
+ timezone,
355
+ activePreset
356
+ });
357
+ }, [isReady, onChange, startDate, endDate, fromTimeStr, toTimeStr, timezone, activePreset]);
358
+ return /* @__PURE__ */ jsxs("div", { className: clsx(AdvancedDateRangePicker_module_default.root, className, { [AdvancedDateRangePicker_module_default.singleCalendar]: isSingle }), id, children: [
359
+ /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.inner, children: [
360
+ /* @__PURE__ */ jsx("aside", { className: AdvancedDateRangePicker_module_default.left, children: PRESETS.map((p) => /* @__PURE__ */ jsx(
361
+ "button",
362
+ {
363
+ type: "button",
364
+ onClick: () => handlePreset(p),
365
+ className: clsx(AdvancedDateRangePicker_module_default.sidebarItem, {
366
+ [AdvancedDateRangePicker_module_default.sidebarItemActive]: activePreset === p.key
367
+ }),
368
+ children: p.label
369
+ },
370
+ p.key
371
+ )) }),
372
+ /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.main, children: [
373
+ /* @__PURE__ */ jsxs("header", { className: AdvancedDateRangePicker_module_default.header, children: [
374
+ /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.timezoneWrapper, children: [
375
+ /* @__PURE__ */ jsx("span", { className: AdvancedDateRangePicker_module_default.headerLabel, children: "Timezone" }),
376
+ isTimezoneDisabled ? (
377
+ /* Disabled state: plain text badge instead of empty dropdown */
378
+ /* @__PURE__ */ jsx("div", { className: AdvancedDateRangePicker_module_default.timezoneDisabledBadge, children: timezone })
379
+ ) : /* @__PURE__ */ jsx(
380
+ Select_default,
381
+ {
382
+ value: timezone,
383
+ onChange: (val) => {
384
+ if (val) setTimezone(String(val));
385
+ },
386
+ options: timezoneOptions,
387
+ size: "small",
388
+ allowClear: false,
389
+ enableSearch: false,
390
+ wrapperClassName: AdvancedDateRangePicker_module_default.timezoneSelectContainer,
391
+ inputClassName: AdvancedDateRangePicker_module_default.timezoneSelectInput
392
+ }
393
+ )
394
+ ] }),
395
+ /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.dateTimeWrapper, children: [
396
+ /* @__PURE__ */ jsx(
397
+ DateTimeInputGroup,
398
+ {
399
+ label: "From",
400
+ dateValue: fromDateStr,
401
+ timeValue: fromTimeStr,
402
+ dateError: fromDateError,
403
+ timeError: fromTimeError,
404
+ onDateChange: handleFromDateChange,
405
+ onTimeChange: handleFromTimeChange
406
+ }
407
+ ),
408
+ /* @__PURE__ */ jsx(
409
+ DateTimeInputGroup,
410
+ {
411
+ label: "To",
412
+ dateValue: toDateStr,
413
+ timeValue: toTimeStr,
414
+ dateError: toDateError,
415
+ timeError: toTimeError,
416
+ onDateChange: handleToDateChange,
417
+ onTimeChange: handleToTimeChange
418
+ }
419
+ )
420
+ ] })
421
+ ] }),
422
+ /* @__PURE__ */ jsx("div", { className: AdvancedDateRangePicker_module_default.body, children: /* @__PURE__ */ jsx(
423
+ InternalCalendar_default,
424
+ {
425
+ id: `${id}-calendar`,
426
+ dateRange: rangeValue,
427
+ onChange: handleRangeChange,
428
+ disablePastDates,
429
+ minDate,
430
+ maxDate,
431
+ showSingleCalendar: isSingle
432
+ }
433
+ ) })
434
+ ] })
435
+ ] }),
436
+ /* @__PURE__ */ jsx("footer", { className: AdvancedDateRangePicker_module_default.footer, children: /* @__PURE__ */ jsx(
437
+ Button_default,
438
+ {
439
+ onClick: handleDone,
440
+ disabled: disabled || !isReady,
441
+ shape: "round",
442
+ children: confirmLabel
443
+ }
444
+ ) })
445
+ ] });
446
+ }
447
+ AdvancedDateRangePicker.displayName = "AdvancedDateRangePicker";
448
+ var AdvancedDateRangePicker_default = AdvancedDateRangePicker;
449
+
450
+ export {
451
+ AdvancedDateRangePicker,
452
+ AdvancedDateRangePicker_default
453
+ };
package/dist/index.d.mts CHANGED
@@ -7,7 +7,7 @@ export { Tooltip } from './atom/Tooltip/Tooltip.mjs';
7
7
  export { Avatar } from './atom/Avatar/Avatar.mjs';
8
8
  export { Tag } from './atom/Tag/Tag.mjs';
9
9
  export { RangePicker } from './atom/RangePicker/RangePicker.mjs';
10
- export { A as AdvancedDateRangePicker, D as DateRangePickerProps, a as DateRangeValue, P as PresetOption, T as TimeValue, b as TimezoneOption } from './AdvancedDateRangePicker-DGg-rucL.mjs';
10
+ export { A as AdvancedDateRangePicker, D as DateRangePickerProps, a as DateRangeValue, P as PresetOption, T as TimeValue, b as TimezoneOption } from './AdvancedDateRangePicker-Di3rHxqf.mjs';
11
11
  export { Select } from './atom/Select/Select.mjs';
12
12
  export { LoadingSpinner } from './atom/LoadingSpinner/LoadingSpinner.mjs';
13
13
  export { Slider } from './atom/Slider/Slider.mjs';
package/dist/index.d.ts CHANGED
@@ -7,7 +7,7 @@ export { Tooltip } from './atom/Tooltip/Tooltip.js';
7
7
  export { Avatar } from './atom/Avatar/Avatar.js';
8
8
  export { Tag } from './atom/Tag/Tag.js';
9
9
  export { RangePicker } from './atom/RangePicker/RangePicker.js';
10
- export { A as AdvancedDateRangePicker, D as DateRangePickerProps, a as DateRangeValue, P as PresetOption, T as TimeValue, b as TimezoneOption } from './AdvancedDateRangePicker-DGg-rucL.js';
10
+ export { A as AdvancedDateRangePicker, D as DateRangePickerProps, a as DateRangeValue, P as PresetOption, T as TimeValue, b as TimezoneOption } from './AdvancedDateRangePicker-Di3rHxqf.js';
11
11
  export { Select } from './atom/Select/Select.js';
12
12
  export { LoadingSpinner } from './atom/LoadingSpinner/LoadingSpinner.js';
13
13
  export { Slider } from './atom/Slider/Slider.js';
package/dist/index.js CHANGED
@@ -1957,7 +1957,7 @@ var import_customParseFormat = __toESM(require("dayjs/plugin/customParseFormat.j
1957
1957
  var import_isSameOrBefore = __toESM(require("dayjs/plugin/isSameOrBefore.js"));
1958
1958
 
1959
1959
  // src/atom/AdvancedDateRangePicker/AdvancedDateRangePicker.module.scss
1960
- var AdvancedDateRangePicker_module_default = { "root": "AdvancedDateRangePicker-module__root___udir8", "singleCalendar": "AdvancedDateRangePicker-module__singleCalendar___qy2-H", "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", "timezoneSelectContainer": "AdvancedDateRangePicker-module__timezoneSelectContainer___8SMc4", "timezoneSelectInput": "AdvancedDateRangePicker-module__timezoneSelectInput___ol0-7", "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" };
1960
+ var AdvancedDateRangePicker_module_default = { "root": "AdvancedDateRangePicker-module__root___udir8", "singleCalendar": "AdvancedDateRangePicker-module__singleCalendar___qy2-H", "hidePresets": "AdvancedDateRangePicker-module__hidePresets___-m2-P", "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", "timezoneSelectContainer": "AdvancedDateRangePicker-module__timezoneSelectContainer___8SMc4", "timezoneSelectInput": "AdvancedDateRangePicker-module__timezoneSelectInput___ol0-7", "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" };
1961
1961
 
1962
1962
  // src/atom/AdvancedDateRangePicker/InternalCalendar.tsx
1963
1963
  var import_react4 = require("react");
@@ -2248,11 +2248,12 @@ function getPresets() {
2248
2248
  label: "Previous week",
2249
2249
  key: "previous-week",
2250
2250
  getRange: () => {
2251
- const dayOfWeek = today.getDay();
2252
- const start = new Date(today);
2253
- start.setDate(today.getDate() - dayOfWeek - 6);
2254
- const end = new Date(today);
2255
- return [start, end];
2251
+ const daysToLastSunday = today.getDay() === 0 ? 7 : today.getDay();
2252
+ const lastSunday = new Date(today);
2253
+ lastSunday.setDate(today.getDate() - daysToLastSunday);
2254
+ const monday = new Date(lastSunday);
2255
+ monday.setDate(lastSunday.getDate() - 6);
2256
+ return [monday, lastSunday];
2256
2257
  }
2257
2258
  },
2258
2259
  {
@@ -2422,7 +2423,9 @@ function AdvancedDateRangePicker({
2422
2423
  isTimezoneDisabled = false,
2423
2424
  timezoneOptions = [],
2424
2425
  defaultPreset = "custom",
2425
- presets
2426
+ presets,
2427
+ hidePresets = false,
2428
+ hideFooter = false
2426
2429
  }) {
2427
2430
  var _a, _b, _c;
2428
2431
  const PRESETS = (0, import_react5.useMemo)(() => presets || getPresets(), [presets]);
@@ -2438,6 +2441,7 @@ function AdvancedDateRangePicker({
2438
2441
  (value == null ? void 0 : value.endTime) ? formatTime(value.endTime) : "12:00 PM"
2439
2442
  );
2440
2443
  const [activePreset, setActivePreset] = (0, import_react5.useState)(defaultPreset);
2444
+ const lastReportedValue = (0, import_react5.useRef)("");
2441
2445
  const isSingle = showSingleCalendar;
2442
2446
  const fromDateError = (0, import_react5.useMemo)(() => fromDateStr.length > 0 && (fromDateStr.length < 10 || !validateDateString(fromDateStr)), [fromDateStr]);
2443
2447
  const toDateError = (0, import_react5.useMemo)(() => toDateStr.length > 0 && (toDateStr.length < 10 || !validateDateString(toDateStr)), [toDateStr]);
@@ -2449,27 +2453,44 @@ function AdvancedDateRangePicker({
2449
2453
  (0, import_react5.useEffect)(() => {
2450
2454
  var _a2, _b2, _c2;
2451
2455
  if (value) {
2452
- setStartDate((_a2 = value.startDate) != null ? _a2 : null);
2453
- setEndDate((_b2 = value.endDate) != null ? _b2 : null);
2454
- setTimezone((_c2 = value.timezone) != null ? _c2 : defaultTimezone);
2455
- if (value.startTime) setFromTimeStr(formatTime(value.startTime));
2456
- if (value.endTime) setToTimeStr(formatTime(value.endTime));
2457
- if (value.activePreset) {
2458
- setActivePreset(value.activePreset);
2459
- } else {
2460
- const matchedPreset = PRESETS.find((p) => {
2461
- if (p.key === "custom") return false;
2462
- const [s, e] = p.getRange();
2463
- if (!s || !e || !value.startDate || !value.endDate) return false;
2464
- return (0, import_dayjs3.default)(s).isSame((0, import_dayjs3.default)(value.startDate), "day") && (0, import_dayjs3.default)(e).isSame((0, import_dayjs3.default)(value.endDate), "day");
2465
- });
2466
- setActivePreset(matchedPreset ? matchedPreset.key : "custom");
2456
+ const isSameStart = value.startDate === startDate || value.startDate && startDate && (0, import_dayjs3.default)(value.startDate).isSame((0, import_dayjs3.default)(startDate), "day");
2457
+ const isSameEnd = value.endDate === endDate || value.endDate && endDate && (0, import_dayjs3.default)(value.endDate).isSame((0, import_dayjs3.default)(endDate), "day");
2458
+ const isSameTimezone = value.timezone === timezone;
2459
+ const isSameStartTime = !value.startTime || formatTime(value.startTime) === fromTimeStr;
2460
+ const isSameEndTime = !value.endTime || formatTime(value.endTime) === toTimeStr;
2461
+ const isSamePreset = value.activePreset === activePreset;
2462
+ if (!isSameStart || !isSameEnd || !isSameTimezone || !isSameStartTime || !isSameEndTime || !isSamePreset) {
2463
+ if (!isSameStart) setStartDate((_a2 = value.startDate) != null ? _a2 : null);
2464
+ if (!isSameEnd) setEndDate((_b2 = value.endDate) != null ? _b2 : null);
2465
+ if (!isSameTimezone) setTimezone((_c2 = value.timezone) != null ? _c2 : defaultTimezone);
2466
+ if (value.startTime && !isSameStartTime) setFromTimeStr(formatTime(value.startTime));
2467
+ if (value.endTime && !isSameEndTime) setToTimeStr(formatTime(value.endTime));
2468
+ if (value.activePreset && !isSamePreset) setActivePreset(value.activePreset);
2467
2469
  }
2468
2470
  }
2469
2471
  }, [value, defaultTimezone, PRESETS]);
2470
2472
  (0, import_react5.useEffect)(() => {
2471
2473
  setFromDateStr(formatForDisplay(startDate));
2472
2474
  }, [startDate]);
2475
+ (0, import_react5.useEffect)(() => {
2476
+ var _a2, _b2;
2477
+ if (hideFooter && isReady) {
2478
+ const fromTime = (_a2 = parseTimeInput(fromTimeStr)) != null ? _a2 : DEFAULT_TIME;
2479
+ const toTime = (_b2 = parseTimeInput(toTimeStr)) != null ? _b2 : DEFAULT_TIME;
2480
+ const serialized = `${startDate == null ? void 0 : startDate.toISOString()}_${endDate == null ? void 0 : endDate.toISOString()}_${fromTimeStr}_${toTimeStr}_${timezone}_${activePreset}`;
2481
+ if (serialized !== lastReportedValue.current) {
2482
+ lastReportedValue.current = serialized;
2483
+ onChange == null ? void 0 : onChange({
2484
+ startDate,
2485
+ endDate,
2486
+ startTime: fromTime,
2487
+ endTime: toTime,
2488
+ timezone,
2489
+ activePreset
2490
+ });
2491
+ }
2492
+ }
2493
+ }, [hideFooter, isReady, onChange, startDate, endDate, fromTimeStr, toTimeStr, timezone, activePreset]);
2473
2494
  (0, import_react5.useEffect)(() => {
2474
2495
  setToDateStr(formatForDisplay(endDate));
2475
2496
  }, [endDate]);
@@ -2557,9 +2578,12 @@ function AdvancedDateRangePicker({
2557
2578
  activePreset
2558
2579
  });
2559
2580
  }, [isReady, onChange, startDate, endDate, fromTimeStr, toTimeStr, timezone, activePreset]);
2560
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: (0, import_clsx10.default)(AdvancedDateRangePicker_module_default.root, className, { [AdvancedDateRangePicker_module_default.singleCalendar]: isSingle }), id, children: [
2581
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: (0, import_clsx10.default)(AdvancedDateRangePicker_module_default.root, className, {
2582
+ [AdvancedDateRangePicker_module_default.singleCalendar]: isSingle,
2583
+ [AdvancedDateRangePicker_module_default.hidePresets]: hidePresets
2584
+ }), id, children: [
2561
2585
  /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: AdvancedDateRangePicker_module_default.inner, children: [
2562
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("aside", { className: AdvancedDateRangePicker_module_default.left, children: PRESETS.map((p) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2586
+ !hidePresets && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("aside", { className: AdvancedDateRangePicker_module_default.left, children: PRESETS.map((p) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2563
2587
  "button",
2564
2588
  {
2565
2589
  type: "button",
@@ -2635,7 +2659,7 @@ function AdvancedDateRangePicker({
2635
2659
  ) })
2636
2660
  ] })
2637
2661
  ] }),
2638
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("footer", { className: AdvancedDateRangePicker_module_default.footer, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2662
+ !hideFooter && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("footer", { className: AdvancedDateRangePicker_module_default.footer, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2639
2663
  Button_default,
2640
2664
  {
2641
2665
  onClick: handleDone,
package/dist/index.mjs CHANGED
@@ -1,27 +1,27 @@
1
1
  import {
2
2
  UserProfile_default
3
3
  } from "./chunk-N2WTNCQU.mjs";
4
- import {
5
- Tag_default
6
- } from "./chunk-4VZB2KR2.mjs";
7
4
  import {
8
5
  Radio_default
9
6
  } from "./chunk-2EBPXGRY.mjs";
10
7
  import {
11
8
  RangePicker_default
12
9
  } from "./chunk-4JX54OKI.mjs";
13
- import {
14
- Slider_default
15
- } from "./chunk-D3N7VFER.mjs";
16
10
  import {
17
11
  Switch_default
18
12
  } from "./chunk-MNARBWAJ.mjs";
19
13
  import {
20
14
  Table
21
15
  } from "./chunk-X3NDICAU.mjs";
16
+ import {
17
+ Slider_default
18
+ } from "./chunk-D3N7VFER.mjs";
19
+ import {
20
+ Tag_default
21
+ } from "./chunk-4VZB2KR2.mjs";
22
22
  import {
23
23
  AdvancedDateRangePicker
24
- } from "./chunk-GGWY2SYX.mjs";
24
+ } from "./chunk-IPVJEGDI.mjs";
25
25
  import {
26
26
  Select_default
27
27
  } from "./chunk-GU5F7Z7I.mjs";
@@ -36,15 +36,15 @@ import {
36
36
  import {
37
37
  Avatar_default
38
38
  } from "./chunk-IWO2Y5QX.mjs";
39
- import {
40
- LoadingSpinner_default
41
- } from "./chunk-QKTMWS4J.mjs";
42
39
  import {
43
40
  Modal_default
44
41
  } from "./chunk-UQJ3BDM4.mjs";
45
42
  import {
46
43
  Button_default
47
44
  } from "./chunk-AF2RKLH6.mjs";
45
+ import {
46
+ LoadingSpinner_default
47
+ } from "./chunk-QKTMWS4J.mjs";
48
48
  import "./chunk-FWCSY2DS.mjs";
49
49
  export {
50
50
  AdvancedDateRangePicker,