@itilite/lumina-ui 1.0.8-alpha → 1.0.10-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,452 @@
1
+ import {
2
+ Select_default
3
+ } from "./chunk-GU5F7Z7I.mjs";
4
+ import {
5
+ Button_default
6
+ } from "./chunk-AF2RKLH6.mjs";
7
+ import {
8
+ InternalCalendar_default
9
+ } from "./chunk-FPH63V2R.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 dayOfWeek = today.getDay();
49
+ const start = new Date(today);
50
+ start.setDate(today.getDate() - dayOfWeek - 6);
51
+ const end = new Date(today);
52
+ return [start, end];
53
+ }
54
+ },
55
+ {
56
+ label: "This month",
57
+ key: "this-month",
58
+ getRange: () => {
59
+ const start = new Date(today.getFullYear(), today.getMonth(), 1);
60
+ const end = new Date(today.getFullYear(), today.getMonth() + 1, 0);
61
+ return [start, end];
62
+ }
63
+ },
64
+ {
65
+ label: "Previous month",
66
+ key: "previous-month",
67
+ getRange: () => {
68
+ const start = new Date(today.getFullYear(), today.getMonth() - 1, 1);
69
+ const end = new Date(today.getFullYear(), today.getMonth(), 0);
70
+ return [start, end];
71
+ }
72
+ },
73
+ {
74
+ label: "Previous quarter",
75
+ key: "previous-quarter",
76
+ getRange: () => {
77
+ const month = today.getMonth();
78
+ const quarter = Math.floor(month / 3);
79
+ const startMonth = (quarter - 1) * 3;
80
+ const start = new Date(today.getFullYear(), startMonth, 1);
81
+ const end = new Date(today.getFullYear(), startMonth + 3, 0);
82
+ return [start, end];
83
+ }
84
+ }
85
+ ];
86
+ }
87
+ function applyDateMask(v, prev) {
88
+ if (v.length < prev.length) return v;
89
+ const digits = v.replace(/[^\d]/g, "").slice(0, 8);
90
+ if (digits.length >= 2) {
91
+ const d = Number(digits.slice(0, 2));
92
+ if (d < 1 || d > 31) return prev;
93
+ }
94
+ if (digits.length >= 4) {
95
+ const m = Number(digits.slice(2, 4));
96
+ if (m < 1 || m > 12) return prev;
97
+ }
98
+ let result = "";
99
+ if (digits.length > 0) result += digits.slice(0, 2);
100
+ if (digits.length >= 2) result += "-";
101
+ if (digits.length > 2) result += digits.slice(2, 4);
102
+ if (digits.length >= 4) result += "-";
103
+ if (digits.length > 4) result += digits.slice(4, 8);
104
+ return result.slice(0, 10);
105
+ }
106
+ function applyTimeMask(v, prev) {
107
+ if (v.length < prev.length) return v;
108
+ const digits = v.replace(/[^\d]/g, "").slice(0, 4);
109
+ if (digits.length >= 2) {
110
+ const h = Number(digits.slice(0, 2));
111
+ if (h < 1 || h > 12) return prev;
112
+ }
113
+ if (digits.length >= 4) {
114
+ const m = Number(digits.slice(2, 4));
115
+ if (m > 59) return prev;
116
+ }
117
+ let result = "";
118
+ if (digits.length > 0) result += digits.slice(0, 2);
119
+ if (digits.length >= 2) result += ":";
120
+ if (digits.length > 2) result += digits.slice(2, 4);
121
+ if (v.toUpperCase().includes("A")) result += " AM";
122
+ else if (v.toUpperCase().includes("P")) result += " PM";
123
+ else if (digits.length === 4) result += " ";
124
+ return result.slice(0, 8);
125
+ }
126
+ function formatForDisplay(date) {
127
+ if (!date) return "";
128
+ return dayjs(date).format("DD-MM-YYYY");
129
+ }
130
+ function validateDateString(raw) {
131
+ const regex = /^(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[0-2])-\d{4}$/;
132
+ if (!regex.test(raw)) return false;
133
+ const [d, m, y] = raw.split("-").map(Number);
134
+ const date = new Date(y, m - 1, d);
135
+ return date.getFullYear() === y && date.getMonth() === m - 1 && date.getDate() === d;
136
+ }
137
+ function validateTimeString(raw) {
138
+ const regex = /^(0[1-9]|1[0-2]):(0[0-9]|[1-5][0-9])\s(AM|PM)$/i;
139
+ return regex.test(raw);
140
+ }
141
+ function parseDateInput(raw) {
142
+ if (!validateDateString(raw)) return null;
143
+ return dayjs(raw, "DD-MM-YYYY", true).toDate();
144
+ }
145
+ function parseTimeInput(raw) {
146
+ if (!validateTimeString(raw)) return null;
147
+ const match = raw.match(/^(\d{1,2}):(\d{2})\s*(AM|PM)$/i);
148
+ if (!match) return null;
149
+ return {
150
+ hour: match[1].padStart(2, "0"),
151
+ minute: match[2].padStart(2, "0"),
152
+ period: match[3].toUpperCase()
153
+ };
154
+ }
155
+ function formatTime(t) {
156
+ return `${t.hour}:${t.minute} ${t.period}`;
157
+ }
158
+ var DateTimeInputGroup = memo(function DateTimeInputGroup2({
159
+ label,
160
+ dateValue,
161
+ timeValue,
162
+ dateError,
163
+ timeError,
164
+ onDateChange,
165
+ onTimeChange
166
+ }) {
167
+ const [isDateFocused, setIsDateFocused] = useState(false);
168
+ const [isTimeFocused, setIsTimeFocused] = useState(false);
169
+ const showDateError = dateError && !isDateFocused;
170
+ const showTimeError = timeError && !isTimeFocused;
171
+ return /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.headerGroup, children: [
172
+ /* @__PURE__ */ jsx("span", { className: AdvancedDateRangePicker_module_default.headerLabel, children: label }),
173
+ /* @__PURE__ */ jsx("div", { className: AdvancedDateRangePicker_module_default.dateTimeColumn, children: /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.dateTimeGroup, children: [
174
+ /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.inputWrapper, children: [
175
+ /* @__PURE__ */ jsx(
176
+ "input",
177
+ {
178
+ type: "text",
179
+ placeholder: "dd-mm-yyyy",
180
+ value: dateValue,
181
+ onFocus: () => setIsDateFocused(true),
182
+ onBlur: () => setIsDateFocused(false),
183
+ onChange: (e) => onDateChange(e.target.value),
184
+ className: clsx(AdvancedDateRangePicker_module_default.dateInput, { [AdvancedDateRangePicker_module_default.inputError]: showDateError })
185
+ }
186
+ ),
187
+ showDateError && /* @__PURE__ */ jsx("span", { className: AdvancedDateRangePicker_module_default.errorMessage, children: "Enter valid date" })
188
+ ] }),
189
+ /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.inputWrapper, children: [
190
+ /* @__PURE__ */ jsx(
191
+ "input",
192
+ {
193
+ type: "text",
194
+ placeholder: "12:00 PM",
195
+ value: timeValue,
196
+ onFocus: () => setIsTimeFocused(true),
197
+ onBlur: () => setIsTimeFocused(false),
198
+ onChange: (e) => onTimeChange(e.target.value),
199
+ className: clsx(AdvancedDateRangePicker_module_default.timeInput, { [AdvancedDateRangePicker_module_default.inputError]: showTimeError })
200
+ }
201
+ ),
202
+ showTimeError && /* @__PURE__ */ jsx("span", { className: AdvancedDateRangePicker_module_default.errorMessage, children: "Enter valid time" })
203
+ ] })
204
+ ] }) })
205
+ ] });
206
+ });
207
+ function AdvancedDateRangePicker({
208
+ value,
209
+ onChange,
210
+ confirmLabel = "Done",
211
+ className = "",
212
+ disabled = false,
213
+ disablePastDates = false,
214
+ minDate = null,
215
+ maxDate = null,
216
+ showSingleCalendar = false,
217
+ id = "adv-drp",
218
+ defaultTimezone = "UTC",
219
+ isTimezoneDisabled = false,
220
+ timezoneOptions = [],
221
+ defaultPreset = "custom",
222
+ presets
223
+ }) {
224
+ var _a, _b, _c;
225
+ const PRESETS = useMemo(() => presets || getPresets(), [presets]);
226
+ const [startDate, setStartDate] = useState((_a = value == null ? void 0 : value.startDate) != null ? _a : null);
227
+ const [endDate, setEndDate] = useState((_b = value == null ? void 0 : value.endDate) != null ? _b : null);
228
+ const [timezone, setTimezone] = useState((_c = value == null ? void 0 : value.timezone) != null ? _c : defaultTimezone);
229
+ const [fromDateStr, setFromDateStr] = useState(formatForDisplay(startDate));
230
+ const [toDateStr, setToDateStr] = useState(formatForDisplay(endDate));
231
+ const [fromTimeStr, setFromTimeStr] = useState(
232
+ (value == null ? void 0 : value.startTime) ? formatTime(value.startTime) : "12:00 PM"
233
+ );
234
+ const [toTimeStr, setToTimeStr] = useState(
235
+ (value == null ? void 0 : value.endTime) ? formatTime(value.endTime) : "12:00 PM"
236
+ );
237
+ const [activePreset, setActivePreset] = useState(defaultPreset);
238
+ const isSingle = showSingleCalendar;
239
+ const fromDateError = useMemo(() => fromDateStr.length > 0 && (fromDateStr.length < 10 || !validateDateString(fromDateStr)), [fromDateStr]);
240
+ const toDateError = useMemo(() => toDateStr.length > 0 && (toDateStr.length < 10 || !validateDateString(toDateStr)), [toDateStr]);
241
+ const fromTimeError = useMemo(() => fromTimeStr.length > 0 && (fromTimeStr.length < 8 || !validateTimeString(fromTimeStr)), [fromTimeStr]);
242
+ const toTimeError = useMemo(() => toTimeStr.length > 0 && (toTimeStr.length < 8 || !validateTimeString(toTimeStr)), [toTimeStr]);
243
+ const isReady = useMemo(() => {
244
+ return startDate !== null && endDate !== null && validateDateString(fromDateStr) && validateDateString(toDateStr) && validateTimeString(fromTimeStr) && validateTimeString(toTimeStr) && dayjs(startDate).isSameOrBefore(dayjs(endDate), "day");
245
+ }, [startDate, endDate, fromDateStr, toDateStr, fromTimeStr, toTimeStr]);
246
+ useEffect(() => {
247
+ var _a2, _b2, _c2;
248
+ if (value) {
249
+ setStartDate((_a2 = value.startDate) != null ? _a2 : null);
250
+ setEndDate((_b2 = value.endDate) != null ? _b2 : null);
251
+ setTimezone((_c2 = value.timezone) != null ? _c2 : defaultTimezone);
252
+ if (value.startTime) setFromTimeStr(formatTime(value.startTime));
253
+ if (value.endTime) setToTimeStr(formatTime(value.endTime));
254
+ if (value.activePreset) {
255
+ setActivePreset(value.activePreset);
256
+ } else {
257
+ const matchedPreset = PRESETS.find((p) => {
258
+ if (p.key === "custom") return false;
259
+ const [s, e] = p.getRange();
260
+ if (!s || !e || !value.startDate || !value.endDate) return false;
261
+ return dayjs(s).isSame(dayjs(value.startDate), "day") && dayjs(e).isSame(dayjs(value.endDate), "day");
262
+ });
263
+ setActivePreset(matchedPreset ? matchedPreset.key : "custom");
264
+ }
265
+ }
266
+ }, [value, defaultTimezone, PRESETS]);
267
+ useEffect(() => {
268
+ setFromDateStr(formatForDisplay(startDate));
269
+ }, [startDate]);
270
+ useEffect(() => {
271
+ setToDateStr(formatForDisplay(endDate));
272
+ }, [endDate]);
273
+ const rangeValue = useMemo(() => [
274
+ startDate ? startDate.toISOString() : "",
275
+ endDate ? endDate.toISOString() : ""
276
+ ], [startDate, endDate]);
277
+ const handleRangeChange = useCallback(
278
+ (range) => {
279
+ const [s, e] = range;
280
+ if (s) {
281
+ const sDateByDayjs = dayjs(s, "D MMM, YYYY").toDate();
282
+ setStartDate(sDateByDayjs);
283
+ } else {
284
+ setStartDate(null);
285
+ }
286
+ if (e) {
287
+ const eDateByDayjs = dayjs(e, "D MMM, YYYY").toDate();
288
+ setEndDate(eDateByDayjs);
289
+ } else {
290
+ setEndDate(null);
291
+ }
292
+ setActivePreset("custom");
293
+ },
294
+ []
295
+ );
296
+ const handlePreset = useCallback(
297
+ (preset) => {
298
+ const [s, e] = preset.getRange();
299
+ setStartDate(s);
300
+ setEndDate(e);
301
+ setActivePreset(preset.key);
302
+ },
303
+ []
304
+ );
305
+ const handleFromDateChange = useCallback((v) => {
306
+ const masked = applyDateMask(v, fromDateStr);
307
+ setFromDateStr(masked);
308
+ setActivePreset("custom");
309
+ if (masked.length === 10) {
310
+ const parsed = parseDateInput(masked);
311
+ if (parsed) {
312
+ setStartDate(parsed);
313
+ if (endDate && dayjs(parsed).isAfter(dayjs(endDate), "day")) {
314
+ setEndDate(null);
315
+ }
316
+ }
317
+ }
318
+ }, [fromDateStr, endDate]);
319
+ const handleToDateChange = useCallback((v) => {
320
+ const masked = applyDateMask(v, toDateStr);
321
+ setToDateStr(masked);
322
+ setActivePreset("custom");
323
+ if (masked.length === 10) {
324
+ const parsed = parseDateInput(masked);
325
+ if (parsed) {
326
+ setEndDate(parsed);
327
+ if (startDate && dayjs(parsed).isBefore(dayjs(startDate), "day")) {
328
+ setStartDate(null);
329
+ }
330
+ }
331
+ }
332
+ }, [toDateStr, startDate]);
333
+ const handleFromTimeChange = useCallback((v) => {
334
+ const masked = applyTimeMask(v, fromTimeStr);
335
+ setFromTimeStr(masked);
336
+ setActivePreset("custom");
337
+ }, [fromTimeStr]);
338
+ const handleToTimeChange = useCallback((v) => {
339
+ const masked = applyTimeMask(v, toTimeStr);
340
+ setToTimeStr(masked);
341
+ setActivePreset("custom");
342
+ }, [toTimeStr]);
343
+ const handleDone = useCallback(() => {
344
+ var _a2, _b2;
345
+ if (!isReady) return;
346
+ const fromTime = (_a2 = parseTimeInput(fromTimeStr)) != null ? _a2 : DEFAULT_TIME;
347
+ const toTime = (_b2 = parseTimeInput(toTimeStr)) != null ? _b2 : DEFAULT_TIME;
348
+ onChange == null ? void 0 : onChange({
349
+ startDate,
350
+ endDate,
351
+ startTime: fromTime,
352
+ endTime: toTime,
353
+ timezone,
354
+ activePreset
355
+ });
356
+ }, [isReady, onChange, startDate, endDate, fromTimeStr, toTimeStr, timezone, activePreset]);
357
+ return /* @__PURE__ */ jsxs("div", { className: clsx(AdvancedDateRangePicker_module_default.root, className, { [AdvancedDateRangePicker_module_default.singleCalendar]: isSingle }), id, children: [
358
+ /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.inner, children: [
359
+ /* @__PURE__ */ jsx("aside", { className: AdvancedDateRangePicker_module_default.left, children: PRESETS.map((p) => /* @__PURE__ */ jsx(
360
+ "button",
361
+ {
362
+ type: "button",
363
+ onClick: () => handlePreset(p),
364
+ className: clsx(AdvancedDateRangePicker_module_default.sidebarItem, {
365
+ [AdvancedDateRangePicker_module_default.sidebarItemActive]: activePreset === p.key
366
+ }),
367
+ children: p.label
368
+ },
369
+ p.key
370
+ )) }),
371
+ /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.main, children: [
372
+ /* @__PURE__ */ jsxs("header", { className: AdvancedDateRangePicker_module_default.header, children: [
373
+ /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.timezoneWrapper, children: [
374
+ /* @__PURE__ */ jsx("span", { className: AdvancedDateRangePicker_module_default.headerLabel, children: "Timezone" }),
375
+ isTimezoneDisabled ? (
376
+ /* Disabled state: plain text badge instead of empty dropdown */
377
+ /* @__PURE__ */ jsx("div", { className: AdvancedDateRangePicker_module_default.timezoneDisabledBadge, children: timezone })
378
+ ) : /* @__PURE__ */ jsx(
379
+ Select_default,
380
+ {
381
+ value: timezone,
382
+ onChange: (val) => {
383
+ if (val) setTimezone(String(val));
384
+ },
385
+ options: timezoneOptions,
386
+ size: "small",
387
+ allowClear: false,
388
+ enableSearch: false,
389
+ wrapperClassName: AdvancedDateRangePicker_module_default.timezoneSelectContainer,
390
+ inputClassName: AdvancedDateRangePicker_module_default.timezoneSelectInput
391
+ }
392
+ )
393
+ ] }),
394
+ /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.dateTimeWrapper, children: [
395
+ /* @__PURE__ */ jsx(
396
+ DateTimeInputGroup,
397
+ {
398
+ label: "From",
399
+ dateValue: fromDateStr,
400
+ timeValue: fromTimeStr,
401
+ dateError: fromDateError,
402
+ timeError: fromTimeError,
403
+ onDateChange: handleFromDateChange,
404
+ onTimeChange: handleFromTimeChange
405
+ }
406
+ ),
407
+ /* @__PURE__ */ jsx(
408
+ DateTimeInputGroup,
409
+ {
410
+ label: "To",
411
+ dateValue: toDateStr,
412
+ timeValue: toTimeStr,
413
+ dateError: toDateError,
414
+ timeError: toTimeError,
415
+ onDateChange: handleToDateChange,
416
+ onTimeChange: handleToTimeChange
417
+ }
418
+ )
419
+ ] })
420
+ ] }),
421
+ /* @__PURE__ */ jsx("div", { className: AdvancedDateRangePicker_module_default.body, children: /* @__PURE__ */ jsx(
422
+ InternalCalendar_default,
423
+ {
424
+ id: `${id}-calendar`,
425
+ dateRange: rangeValue,
426
+ onChange: handleRangeChange,
427
+ disablePastDates,
428
+ minDate,
429
+ maxDate,
430
+ showSingleCalendar: isSingle
431
+ }
432
+ ) })
433
+ ] })
434
+ ] }),
435
+ /* @__PURE__ */ jsx("footer", { className: AdvancedDateRangePicker_module_default.footer, children: /* @__PURE__ */ jsx(
436
+ Button_default,
437
+ {
438
+ onClick: handleDone,
439
+ disabled: disabled || !isReady,
440
+ shape: "round",
441
+ children: confirmLabel
442
+ }
443
+ ) })
444
+ ] });
445
+ }
446
+ AdvancedDateRangePicker.displayName = "AdvancedDateRangePicker";
447
+ var AdvancedDateRangePicker_default = AdvancedDateRangePicker;
448
+
449
+ export {
450
+ AdvancedDateRangePicker,
451
+ AdvancedDateRangePicker_default
452
+ };
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-D7xn4So6.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';
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-D7xn4So6.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';
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
@@ -2421,10 +2421,11 @@ function AdvancedDateRangePicker({
2421
2421
  defaultTimezone = "UTC",
2422
2422
  isTimezoneDisabled = false,
2423
2423
  timezoneOptions = [],
2424
- defaultPreset = "custom"
2424
+ defaultPreset = "custom",
2425
+ presets
2425
2426
  }) {
2426
2427
  var _a, _b, _c;
2427
- const PRESETS = (0, import_react5.useMemo)(() => getPresets(), []);
2428
+ const PRESETS = (0, import_react5.useMemo)(() => presets || getPresets(), [presets]);
2428
2429
  const [startDate, setStartDate] = (0, import_react5.useState)((_a = value == null ? void 0 : value.startDate) != null ? _a : null);
2429
2430
  const [endDate, setEndDate] = (0, import_react5.useState)((_b = value == null ? void 0 : value.endDate) != null ? _b : null);
2430
2431
  const [timezone, setTimezone] = (0, import_react5.useState)((_c = value == null ? void 0 : value.timezone) != null ? _c : defaultTimezone);
@@ -2453,8 +2454,19 @@ function AdvancedDateRangePicker({
2453
2454
  setTimezone((_c2 = value.timezone) != null ? _c2 : defaultTimezone);
2454
2455
  if (value.startTime) setFromTimeStr(formatTime(value.startTime));
2455
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");
2467
+ }
2456
2468
  }
2457
- }, [value, defaultTimezone]);
2469
+ }, [value, defaultTimezone, PRESETS]);
2458
2470
  (0, import_react5.useEffect)(() => {
2459
2471
  setFromDateStr(formatForDisplay(startDate));
2460
2472
  }, [startDate]);
@@ -2541,9 +2553,10 @@ function AdvancedDateRangePicker({
2541
2553
  endDate,
2542
2554
  startTime: fromTime,
2543
2555
  endTime: toTime,
2544
- timezone
2556
+ timezone,
2557
+ activePreset
2545
2558
  });
2546
- }, [isReady, onChange, startDate, endDate, fromTimeStr, toTimeStr, timezone]);
2559
+ }, [isReady, onChange, startDate, endDate, fromTimeStr, toTimeStr, timezone, activePreset]);
2547
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: [
2548
2561
  /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: AdvancedDateRangePicker_module_default.inner, children: [
2549
2562
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("aside", { className: AdvancedDateRangePicker_module_default.left, children: PRESETS.map((p) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
package/dist/index.mjs CHANGED
@@ -21,7 +21,7 @@ import {
21
21
  } from "./chunk-X3NDICAU.mjs";
22
22
  import {
23
23
  AdvancedDateRangePicker
24
- } from "./chunk-UC4NTBDH.mjs";
24
+ } from "./chunk-GGWY2SYX.mjs";
25
25
  import {
26
26
  Select_default
27
27
  } from "./chunk-GU5F7Z7I.mjs";
@@ -30,15 +30,15 @@ import {
30
30
  } from "./chunk-MLCMZRUC.mjs";
31
31
  import "./chunk-FPH63V2R.mjs";
32
32
  import "./chunk-ZTRM4HZJ.mjs";
33
+ import {
34
+ Checkbox_default
35
+ } from "./chunk-UQZNUEZE.mjs";
33
36
  import {
34
37
  Avatar_default
35
38
  } from "./chunk-IWO2Y5QX.mjs";
36
39
  import {
37
40
  LoadingSpinner_default
38
41
  } from "./chunk-QKTMWS4J.mjs";
39
- import {
40
- Checkbox_default
41
- } from "./chunk-UQZNUEZE.mjs";
42
42
  import {
43
43
  Modal_default
44
44
  } from "./chunk-UQJ3BDM4.mjs";