@zag-js/date-utils 0.50.0 → 0.51.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,697 +1,2 @@
1
- // src/constrain.ts
2
- import {
3
- maxDate,
4
- minDate,
5
- startOfMonth,
6
- startOfWeek,
7
- startOfYear,
8
- toCalendarDate
9
- } from "@internationalized/date";
10
- function alignCenter(date, duration, locale, min, max) {
11
- let halfDuration = {};
12
- for (let key in duration) {
13
- halfDuration[key] = Math.floor(duration[key] / 2);
14
- if (halfDuration[key] > 0 && duration[key] % 2 === 0) {
15
- halfDuration[key]--;
16
- }
17
- }
18
- let aligned = alignStart(date, duration, locale).subtract(halfDuration);
19
- return constrainStart(date, aligned, duration, locale, min, max);
20
- }
21
- function alignStart(date, duration, locale, min, max) {
22
- let aligned = date;
23
- if (duration.years) {
24
- aligned = startOfYear(date);
25
- } else if (duration.months) {
26
- aligned = startOfMonth(date);
27
- } else if (duration.weeks) {
28
- aligned = startOfWeek(date, locale);
29
- }
30
- return constrainStart(date, aligned, duration, locale, min, max);
31
- }
32
- function alignEnd(date, duration, locale, min, max) {
33
- let d = { ...duration };
34
- if (d.days) {
35
- d.days--;
36
- } else if (d.weeks) {
37
- d.weeks--;
38
- } else if (d.months) {
39
- d.months--;
40
- } else if (d.years) {
41
- d.years--;
42
- }
43
- let aligned = alignStart(date, duration, locale).subtract(d);
44
- return constrainStart(date, aligned, duration, locale, min, max);
45
- }
46
- function constrainStart(date, aligned, duration, locale, min, max) {
47
- if (min && date.compare(min) >= 0) {
48
- aligned = maxDate(aligned, alignStart(toCalendarDate(min), duration, locale));
49
- }
50
- if (max && date.compare(max) <= 0) {
51
- aligned = minDate(aligned, alignEnd(toCalendarDate(max), duration, locale));
52
- }
53
- return aligned;
54
- }
55
- function constrainValue(date, minValue, maxValue) {
56
- if (minValue) {
57
- date = maxDate(date, toCalendarDate(minValue));
58
- }
59
- if (maxValue) {
60
- date = minDate(date, toCalendarDate(maxValue));
61
- }
62
- return date;
63
- }
64
-
65
- // src/align.ts
66
- function alignDate(date, alignment, duration, locale, min, max) {
67
- switch (alignment) {
68
- case "start":
69
- return alignStart(date, duration, locale, min, max);
70
- case "end":
71
- return alignEnd(date, duration, locale, min, max);
72
- case "center":
73
- default:
74
- return alignCenter(date, duration, locale, min, max);
75
- }
76
- }
77
- function alignStartDate(date, startDate, endDate, duration, locale, min, max) {
78
- if (date.compare(startDate) < 0) {
79
- return alignEnd(date, duration, locale, min, max);
80
- }
81
- if (date.compare(endDate) > 0) {
82
- return alignStart(date, duration, locale, min, max);
83
- }
84
- return startDate;
85
- }
86
-
87
- // src/assertion.ts
88
- import { isSameDay, isToday } from "@internationalized/date";
89
- function isTodayDate(date, timeZone) {
90
- return isToday(date, timeZone);
91
- }
92
- function isDateEqual(dateA, dateB) {
93
- return dateB != null && isSameDay(dateA, dateB);
94
- }
95
- function isDateInvalid(date, minValue, maxValue) {
96
- return minValue != null && date.compare(minValue) < 0 || maxValue != null && date.compare(maxValue) > 0;
97
- }
98
- function isDateDisabled(date, startDate, endDate, minValue, maxValue) {
99
- return isDateOutsideVisibleRange(date, startDate, endDate) || isDateInvalid(date, minValue, maxValue);
100
- }
101
- function isDateUnavailable(date, isUnavailable, locale, minValue, maxValue) {
102
- if (!date) {
103
- return false;
104
- }
105
- if (isUnavailable?.(date, locale)) {
106
- return true;
107
- }
108
- return isDateInvalid(date, minValue, maxValue);
109
- }
110
- function isDateOutsideVisibleRange(date, startDate, endDate) {
111
- return date.compare(startDate) < 0 || date.compare(endDate) > 0;
112
- }
113
- function isPreviousVisibleRangeInvalid(startDate, minValue, maxValue) {
114
- const prevDate = startDate.subtract({ days: 1 });
115
- return isSameDay(prevDate, startDate) || isDateInvalid(prevDate, minValue, maxValue);
116
- }
117
- function isNextVisibleRangeInvalid(endDate, minValue, maxValue) {
118
- const nextDate = endDate.add({ days: 1 });
119
- return isSameDay(nextDate, endDate) || isDateInvalid(nextDate, minValue, maxValue);
120
- }
121
-
122
- // src/duration.ts
123
- function getUnitDuration(duration) {
124
- let d = { ...duration };
125
- for (let key in d) {
126
- d[key] = 1;
127
- }
128
- return d;
129
- }
130
- function getEndDate(startDate, duration) {
131
- let d = { ...duration };
132
- if (d.days) {
133
- d.days--;
134
- } else {
135
- d.days = -1;
136
- }
137
- return startDate.add(d);
138
- }
139
-
140
- // src/format-range.ts
141
- function formatRange(startDate, endDate, formatter, toString, timeZone) {
142
- let parts = formatter.formatRangeToParts(startDate.toDate(timeZone), endDate.toDate(timeZone));
143
- let separatorIndex = -1;
144
- for (let i = 0; i < parts.length; i++) {
145
- let part = parts[i];
146
- if (part.source === "shared" && part.type === "literal") {
147
- separatorIndex = i;
148
- } else if (part.source === "endRange") {
149
- break;
150
- }
151
- }
152
- let start = "";
153
- let end = "";
154
- for (let i = 0; i < parts.length; i++) {
155
- if (i < separatorIndex) {
156
- start += parts[i].value;
157
- } else if (i > separatorIndex) {
158
- end += parts[i].value;
159
- }
160
- }
161
- return toString(start, end);
162
- }
163
-
164
- // src/format-selected-date.ts
165
- import { isSameDay as isSameDay2 } from "@internationalized/date";
166
-
167
- // src/get-day-formatter.ts
168
- import { DateFormatter, toCalendarDateTime, today } from "@internationalized/date";
169
-
170
- // src/get-era-format.ts
171
- function getEraFormat(date) {
172
- return date?.calendar.identifier === "gregory" && date.era === "BC" ? "short" : void 0;
173
- }
174
-
175
- // src/get-day-formatter.ts
176
- function getDayFormatter(locale, timeZone) {
177
- const date = toCalendarDateTime(today(timeZone));
178
- return new DateFormatter(locale, {
179
- weekday: "long",
180
- month: "long",
181
- year: "numeric",
182
- day: "numeric",
183
- era: getEraFormat(date),
184
- timeZone
185
- });
186
- }
187
-
188
- // src/format-selected-date.ts
189
- function formatSelectedDate(startDate, endDate, locale, timeZone) {
190
- let start = startDate;
191
- let end = endDate ?? startDate;
192
- let formatter = getDayFormatter(locale, timeZone);
193
- if (isSameDay2(start, end)) {
194
- return formatter.format(start.toDate(timeZone));
195
- }
196
- return formatRange(start, end, formatter, (start2, end2) => `${start2} \u2013 ${end2}`, timeZone);
197
- }
198
-
199
- // src/format-visible-range.ts
200
- import { endOfMonth, isSameDay as isSameDay3, startOfMonth as startOfMonth2 } from "@internationalized/date";
201
-
202
- // src/get-month-formatter.ts
203
- import { today as today2, toCalendarDate as toCalendarDate2, DateFormatter as DateFormatter2 } from "@internationalized/date";
204
- function getMonthFormatter(locale, timeZone) {
205
- const date = toCalendarDate2(today2(timeZone));
206
- return new DateFormatter2(locale, {
207
- month: "long",
208
- year: "numeric",
209
- era: getEraFormat(date),
210
- calendar: date?.calendar.identifier,
211
- timeZone
212
- });
213
- }
214
-
215
- // src/format-visible-range.ts
216
- function formatVisibleRange(startDate, endDate, locale, timeZone) {
217
- const start = startDate;
218
- const end = endDate ?? startDate;
219
- const dayFormatter = getDayFormatter(locale, timeZone);
220
- if (!isSameDay3(start, startOfMonth2(start))) {
221
- return dayFormatter.formatRange(start.toDate(timeZone), end.toDate(timeZone));
222
- }
223
- const monthFormatter = getMonthFormatter(locale, timeZone);
224
- if (isSameDay3(end, endOfMonth(start))) {
225
- return monthFormatter.format(start.toDate(timeZone));
226
- }
227
- if (isSameDay3(end, endOfMonth(end))) {
228
- return monthFormatter.formatRange(start.toDate(timeZone), end.toDate(timeZone));
229
- }
230
- return "";
231
- }
232
-
233
- // src/get-decade-range.ts
234
- function getDecadeRange(year) {
235
- const computedYear = year - year % 10 - 1;
236
- const years = [];
237
- for (let i = 0; i < 12; i += 1) {
238
- const value = computedYear + i;
239
- years.push(value);
240
- }
241
- return years;
242
- }
243
-
244
- // src/get-month-days.ts
245
- import { getWeeksInMonth, isSameDay as isSameDay4, getDayOfWeek as getDayOfWeek2, startOfMonth as startOfMonth3 } from "@internationalized/date";
246
-
247
- // src/get-start-of-week.ts
248
- import { getDayOfWeek } from "@internationalized/date";
249
- function getStartOfWeek(date, locale, firstDayOfWeek = 0) {
250
- const day = getDayOfWeek(date, locale);
251
- const diff = (day - firstDayOfWeek + 7) % 7;
252
- return date.subtract({ days: diff });
253
- }
254
-
255
- // src/get-month-days.ts
256
- function getDaysInWeek(weekIndex, from, locale, firstDayOfWeek) {
257
- const weekDate = from.add({ weeks: weekIndex });
258
- const dates = [];
259
- let date = getStartOfWeek(weekDate, locale, firstDayOfWeek);
260
- while (dates.length < 7) {
261
- dates.push(date);
262
- let nextDate = date.add({ days: 1 });
263
- if (isSameDay4(date, nextDate)) {
264
- break;
265
- }
266
- date = nextDate;
267
- }
268
- return dates;
269
- }
270
- function getCustomWeeksInMonth(from, locale, firstDayOfWeek) {
271
- if (firstDayOfWeek == null) {
272
- return getWeeksInMonth(from, locale);
273
- }
274
- const paddingDays = (getDayOfWeek2(startOfMonth3(from), locale) - firstDayOfWeek + 7) % 7;
275
- return Math.ceil((paddingDays + from.calendar.getDaysInMonth(from)) / 7);
276
- }
277
- function getMonthDays(from, locale, numOfWeeks, firstDayOfWeek) {
278
- const monthWeeks = numOfWeeks ?? getCustomWeeksInMonth(from, locale, firstDayOfWeek);
279
- const weeks = [...new Array(monthWeeks).keys()];
280
- return weeks.map((week) => getDaysInWeek(week, from, locale, firstDayOfWeek));
281
- }
282
-
283
- // src/get-month-names.ts
284
- function getMonthNames(locale, format = "long") {
285
- const date = new Date(2021, 0, 1);
286
- const monthNames = [];
287
- for (let i = 0; i < 12; i++) {
288
- monthNames.push(date.toLocaleString(locale, { month: format }));
289
- date.setMonth(date.getMonth() + 1);
290
- }
291
- return monthNames;
292
- }
293
-
294
- // src/get-weekday-formats.ts
295
- import { DateFormatter as DateFormatter3 } from "@internationalized/date";
296
- function getWeekdayFormats(locale, timeZone) {
297
- const longFormat = new DateFormatter3(locale, { weekday: "long", timeZone });
298
- const shortFormat = new DateFormatter3(locale, { weekday: "short", timeZone });
299
- const narrowFormat = new DateFormatter3(locale, { weekday: "narrow", timeZone });
300
- return (value) => {
301
- const date = value instanceof Date ? value : value.toDate(timeZone);
302
- return {
303
- value,
304
- short: shortFormat.format(date),
305
- long: longFormat.format(date),
306
- narrow: narrowFormat.format(date)
307
- };
308
- };
309
- }
310
-
311
- // src/get-week-days.ts
312
- function getWeekDays(date, startOfWeekProp, timeZone, locale) {
313
- const firstDayOfWeek = getStartOfWeek(date, locale, startOfWeekProp);
314
- const weeks = [...new Array(7).keys()];
315
- const format = getWeekdayFormats(locale, timeZone);
316
- return weeks.map((index) => format(firstDayOfWeek.add({ days: index })));
317
- }
318
-
319
- // src/get-year-range.ts
320
- function getYearsRange(range) {
321
- const years = [];
322
- for (let year = range.from; year <= range.to; year += 1) {
323
- years.push(year);
324
- }
325
- return years;
326
- }
327
-
328
- // src/mutation.ts
329
- import {
330
- getLocalTimeZone,
331
- toCalendar,
332
- toCalendarDateTime as toCalendarDateTime2,
333
- today as today3
334
- } from "@internationalized/date";
335
- function getTodayDate(timeZone) {
336
- return today3(timeZone ?? getLocalTimeZone());
337
- }
338
- function getNextDay(date) {
339
- return date.add({ days: 1 });
340
- }
341
- function getPreviousDay(date) {
342
- return date.subtract({ days: 1 });
343
- }
344
- function setMonth(date, month) {
345
- return date.set({ month });
346
- }
347
- function setYear(date, year) {
348
- return date.set({ year });
349
- }
350
- function setCalendar(date, calendar) {
351
- return toCalendar(toCalendarDateTime2(date), calendar);
352
- }
353
- function setDate(date, startDate, isDateUnavailable2, locale, minValue, maxValue) {
354
- let result;
355
- result = constrainValue(date, minValue, maxValue);
356
- result = getPreviousAvailableDate(date, startDate, locale, isDateUnavailable2);
357
- return result;
358
- }
359
- function getPreviousAvailableDate(date, minValue, locale, isDateUnavailable2) {
360
- if (!isDateUnavailable2) {
361
- return date;
362
- }
363
- while (date.compare(minValue) >= 0 && isDateUnavailable2(date, locale)) {
364
- date = date.subtract({ days: 1 });
365
- }
366
- if (date.compare(minValue) >= 0) {
367
- return date;
368
- }
369
- }
370
-
371
- // src/pagination.ts
372
- import {
373
- endOfMonth as endOfMonth2,
374
- endOfWeek,
375
- startOfMonth as startOfMonth4,
376
- startOfWeek as startOfWeek2
377
- } from "@internationalized/date";
378
- function getAdjustedDateFn(visibleDuration, locale, minValue, maxValue) {
379
- return function getDate(options) {
380
- const { startDate, focusedDate } = options;
381
- const endDate = getEndDate(startDate, visibleDuration);
382
- if (isDateInvalid(focusedDate, minValue, maxValue)) {
383
- return {
384
- startDate,
385
- focusedDate: constrainValue(focusedDate, minValue, maxValue),
386
- endDate
387
- };
388
- }
389
- if (focusedDate.compare(startDate) < 0) {
390
- return {
391
- startDate: alignEnd(focusedDate, visibleDuration, locale, minValue, maxValue),
392
- focusedDate: constrainValue(focusedDate, minValue, maxValue),
393
- endDate
394
- };
395
- }
396
- if (focusedDate.compare(endDate) > 0) {
397
- return {
398
- startDate: alignStart(focusedDate, visibleDuration, locale, minValue, maxValue),
399
- endDate,
400
- focusedDate: constrainValue(focusedDate, minValue, maxValue)
401
- };
402
- }
403
- return {
404
- startDate,
405
- endDate,
406
- focusedDate: constrainValue(focusedDate, minValue, maxValue)
407
- };
408
- };
409
- }
410
- function getNextPage(focusedDate, startDate, visibleDuration, locale, minValue, maxValue) {
411
- const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue);
412
- const start = startDate.add(visibleDuration);
413
- return adjust({
414
- focusedDate: focusedDate.add(visibleDuration),
415
- startDate: alignStart(
416
- constrainStart(focusedDate, start, visibleDuration, locale, minValue, maxValue),
417
- visibleDuration,
418
- locale
419
- )
420
- });
421
- }
422
- function getPreviousPage(focusedDate, startDate, visibleDuration, locale, minValue, maxValue) {
423
- const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue);
424
- let start = startDate.subtract(visibleDuration);
425
- return adjust({
426
- focusedDate: focusedDate.subtract(visibleDuration),
427
- startDate: alignStart(
428
- constrainStart(focusedDate, start, visibleDuration, locale, minValue, maxValue),
429
- visibleDuration,
430
- locale
431
- )
432
- });
433
- }
434
- function getNextRow(focusedDate, startDate, visibleDuration, locale, minValue, maxValue) {
435
- const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue);
436
- if (visibleDuration.days) {
437
- return getNextPage(focusedDate, startDate, visibleDuration, locale, minValue, maxValue);
438
- }
439
- if (visibleDuration.weeks || visibleDuration.months || visibleDuration.years) {
440
- return adjust({
441
- focusedDate: focusedDate.add({ weeks: 1 }),
442
- startDate
443
- });
444
- }
445
- }
446
- function getPreviousRow(focusedDate, startDate, visibleDuration, locale, minValue, maxValue) {
447
- const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue);
448
- if (visibleDuration.days) {
449
- return getPreviousPage(focusedDate, startDate, visibleDuration, locale, minValue, maxValue);
450
- }
451
- if (visibleDuration.weeks || visibleDuration.months || visibleDuration.years) {
452
- return adjust({
453
- focusedDate: focusedDate.subtract({ weeks: 1 }),
454
- startDate
455
- });
456
- }
457
- }
458
- function getSectionStart(focusedDate, startDate, visibleDuration, locale, minValue, maxValue) {
459
- const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue);
460
- if (visibleDuration.days) {
461
- return adjust({
462
- focusedDate: startDate,
463
- startDate
464
- });
465
- }
466
- if (visibleDuration.weeks) {
467
- return adjust({
468
- focusedDate: startOfWeek2(focusedDate, locale),
469
- startDate
470
- });
471
- }
472
- if (visibleDuration.months || visibleDuration.years) {
473
- return adjust({
474
- focusedDate: startOfMonth4(focusedDate),
475
- startDate
476
- });
477
- }
478
- }
479
- function getSectionEnd(focusedDate, startDate, visibleDuration, locale, minValue, maxValue) {
480
- const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue);
481
- const endDate = getEndDate(startDate, visibleDuration);
482
- if (visibleDuration.days) {
483
- return adjust({
484
- focusedDate: endDate,
485
- startDate
486
- });
487
- }
488
- if (visibleDuration.weeks) {
489
- return adjust({
490
- //@ts-expect-error - endOfWeek is loosely typed
491
- focusedDate: endOfWeek(focusedDate, locale),
492
- startDate
493
- });
494
- }
495
- if (visibleDuration.months || visibleDuration.years) {
496
- return adjust({
497
- focusedDate: endOfMonth2(focusedDate),
498
- startDate
499
- });
500
- }
501
- }
502
- function getNextSection(focusedDate, startDate, larger, visibleDuration, locale, minValue, maxValue) {
503
- const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue);
504
- if (!larger && !visibleDuration.days) {
505
- return adjust({
506
- focusedDate: focusedDate.add(getUnitDuration(visibleDuration)),
507
- startDate
508
- });
509
- }
510
- if (visibleDuration.days) {
511
- return getNextPage(focusedDate, startDate, visibleDuration, locale, minValue, maxValue);
512
- }
513
- if (visibleDuration.weeks) {
514
- return adjust({
515
- focusedDate: focusedDate.add({ months: 1 }),
516
- startDate
517
- });
518
- }
519
- if (visibleDuration.months || visibleDuration.years) {
520
- return adjust({
521
- focusedDate: focusedDate.add({ years: 1 }),
522
- startDate
523
- });
524
- }
525
- }
526
- function getPreviousSection(focusedDate, startDate, larger, visibleDuration, locale, minValue, maxValue) {
527
- const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue);
528
- if (!larger && !visibleDuration.days) {
529
- return adjust({
530
- focusedDate: focusedDate.subtract(getUnitDuration(visibleDuration)),
531
- startDate
532
- });
533
- }
534
- if (visibleDuration.days) {
535
- return getPreviousPage(focusedDate, startDate, visibleDuration, locale, minValue, maxValue);
536
- }
537
- if (visibleDuration.weeks) {
538
- return adjust({
539
- focusedDate: focusedDate.subtract({ months: 1 }),
540
- startDate
541
- });
542
- }
543
- if (visibleDuration.months || visibleDuration.years) {
544
- return adjust({
545
- focusedDate: focusedDate.subtract({ years: 1 }),
546
- startDate
547
- });
548
- }
549
- }
550
-
551
- // src/parse-date.ts
552
- import { CalendarDate, DateFormatter as DateFormatter4 } from "@internationalized/date";
553
- var isValidYear = (year) => year != null && year.length === 4;
554
- var isValidMonth = (month) => month != null && parseFloat(month) <= 12;
555
- var isValidDay = (day) => day != null && parseFloat(day) <= 31;
556
- function parseDateString(date, locale, timeZone) {
557
- const regex = createRegex(locale, timeZone);
558
- let { year, month, day } = extract(regex, date) ?? {};
559
- const hasMatch = year != null || month != null || day != null;
560
- if (hasMatch) {
561
- const curr = /* @__PURE__ */ new Date();
562
- year || (year = curr.getFullYear().toString());
563
- month || (month = (curr.getMonth() + 1).toString());
564
- day || (day = curr.getDate().toString());
565
- }
566
- if (isValidYear(year) && isValidMonth(month) && isValidDay(day)) {
567
- return new CalendarDate(+year, +month, +day);
568
- }
569
- const time = Date.parse(date);
570
- if (!isNaN(time)) {
571
- const date2 = new Date(time);
572
- return new CalendarDate(date2.getFullYear(), date2.getMonth() + 1, date2.getDate());
573
- }
574
- }
575
- function createRegex(locale, timeZone) {
576
- const formatter = new DateFormatter4(locale, { day: "numeric", month: "numeric", year: "numeric", timeZone });
577
- const parts = formatter.formatToParts(new Date(2e3, 11, 25));
578
- return parts.map(({ type, value }) => type === "literal" ? `${value}?` : `((?!=<${type}>)\\d+)?`).join("");
579
- }
580
- function extract(pattern, str) {
581
- const matches = str.match(pattern);
582
- return pattern.toString().match(/<(.+?)>/g)?.map((group) => {
583
- const groupMatches = group.match(/<(.+)>/);
584
- if (!groupMatches || groupMatches.length <= 0) {
585
- return null;
586
- }
587
- return group.match(/<(.+)>/)?.[1];
588
- }).reduce((acc, curr, index) => {
589
- if (!curr)
590
- return acc;
591
- if (matches && matches.length > index) {
592
- acc[curr] = matches[index + 1];
593
- } else {
594
- acc[curr] = null;
595
- }
596
- return acc;
597
- }, {});
598
- }
599
-
600
- // src/preset.ts
601
- import {
602
- endOfMonth as endOfMonth3,
603
- endOfWeek as endOfWeek2,
604
- endOfYear,
605
- now,
606
- startOfMonth as startOfMonth5,
607
- startOfWeek as startOfWeek3,
608
- startOfYear as startOfYear2
609
- } from "@internationalized/date";
610
- function getDateRangePreset(preset, locale, timeZone) {
611
- const today4 = now(timeZone);
612
- switch (preset) {
613
- case "thisWeek":
614
- return [startOfWeek3(today4, locale), endOfWeek2(today4, locale)];
615
- case "thisMonth":
616
- return [startOfMonth5(today4), today4];
617
- case "thisQuarter":
618
- return [startOfMonth5(today4).add({ months: -today4.month % 3 }), today4];
619
- case "thisYear":
620
- return [startOfYear2(today4), today4];
621
- case "last3Days":
622
- return [today4.add({ days: -2 }), today4];
623
- case "last7Days":
624
- return [today4.add({ days: -6 }), today4];
625
- case "last14Days":
626
- return [today4.add({ days: -13 }), today4];
627
- case "last30Days":
628
- return [today4.add({ days: -29 }), today4];
629
- case "last90Days":
630
- return [today4.add({ days: -89 }), today4];
631
- case "lastMonth":
632
- return [startOfMonth5(today4.add({ months: -1 })), endOfMonth3(today4.add({ months: -1 }))];
633
- case "lastQuarter":
634
- return [
635
- startOfMonth5(today4.add({ months: -today4.month % 3 - 3 })),
636
- endOfMonth3(today4.add({ months: -today4.month % 3 - 1 }))
637
- ];
638
- case "lastWeek":
639
- return [startOfWeek3(today4, locale).add({ weeks: -1 }), endOfWeek2(today4, locale).add({ weeks: -1 })];
640
- case "lastYear":
641
- return [startOfYear2(today4.add({ years: -1 })), endOfYear(today4.add({ years: -1 }))];
642
- default:
643
- throw new Error(`Invalid date range preset: ${preset}`);
644
- }
645
- }
646
- export {
647
- alignCenter,
648
- alignDate,
649
- alignEnd,
650
- alignStart,
651
- alignStartDate,
652
- constrainStart,
653
- constrainValue,
654
- formatRange,
655
- formatSelectedDate,
656
- formatVisibleRange,
657
- getAdjustedDateFn,
658
- getCustomWeeksInMonth,
659
- getDateRangePreset,
660
- getDayFormatter,
661
- getDaysInWeek,
662
- getDecadeRange,
663
- getEndDate,
664
- getMonthDays,
665
- getMonthFormatter,
666
- getMonthNames,
667
- getNextDay,
668
- getNextPage,
669
- getNextRow,
670
- getNextSection,
671
- getPreviousAvailableDate,
672
- getPreviousDay,
673
- getPreviousPage,
674
- getPreviousRow,
675
- getPreviousSection,
676
- getSectionEnd,
677
- getSectionStart,
678
- getTodayDate,
679
- getUnitDuration,
680
- getWeekDays,
681
- getWeekdayFormats,
682
- getYearsRange,
683
- isDateDisabled,
684
- isDateEqual,
685
- isDateInvalid,
686
- isDateOutsideVisibleRange,
687
- isDateUnavailable,
688
- isNextVisibleRangeInvalid,
689
- isPreviousVisibleRangeInvalid,
690
- isTodayDate,
691
- parseDateString,
692
- setCalendar,
693
- setDate,
694
- setMonth,
695
- setYear
696
- };
1
+ import{maxDate,minDate,startOfMonth,startOfWeek,startOfYear,toCalendarDate}from"@internationalized/date";function alignCenter(date,duration,locale,min,max){let halfDuration={};for(let key in duration){halfDuration[key]=Math.floor(duration[key]/2);if(halfDuration[key]>0&&duration[key]%2===0){halfDuration[key]--}}let aligned=alignStart(date,duration,locale).subtract(halfDuration);return constrainStart(date,aligned,duration,locale,min,max)}function alignStart(date,duration,locale,min,max){let aligned=date;if(duration.years){aligned=startOfYear(date)}else if(duration.months){aligned=startOfMonth(date)}else if(duration.weeks){aligned=startOfWeek(date,locale)}return constrainStart(date,aligned,duration,locale,min,max)}function alignEnd(date,duration,locale,min,max){let d={...duration};if(d.days){d.days--}else if(d.weeks){d.weeks--}else if(d.months){d.months--}else if(d.years){d.years--}let aligned=alignStart(date,duration,locale).subtract(d);return constrainStart(date,aligned,duration,locale,min,max)}function constrainStart(date,aligned,duration,locale,min,max){if(min&&date.compare(min)>=0){aligned=maxDate(aligned,alignStart(toCalendarDate(min),duration,locale))}if(max&&date.compare(max)<=0){aligned=minDate(aligned,alignEnd(toCalendarDate(max),duration,locale))}return aligned}function constrainValue(date,minValue,maxValue){if(minValue){date=maxDate(date,toCalendarDate(minValue))}if(maxValue){date=minDate(date,toCalendarDate(maxValue))}return date}function alignDate(date,alignment,duration,locale,min,max){switch(alignment){case"start":return alignStart(date,duration,locale,min,max);case"end":return alignEnd(date,duration,locale,min,max);case"center":default:return alignCenter(date,duration,locale,min,max)}}function alignStartDate(date,startDate,endDate,duration,locale,min,max){if(date.compare(startDate)<0){return alignEnd(date,duration,locale,min,max)}if(date.compare(endDate)>0){return alignStart(date,duration,locale,min,max)}return startDate}import{isSameDay,isToday}from"@internationalized/date";function isTodayDate(date,timeZone){return isToday(date,timeZone)}function isDateEqual(dateA,dateB){return dateB!=null&&isSameDay(dateA,dateB)}function isDateInvalid(date,minValue,maxValue){return minValue!=null&&date.compare(minValue)<0||maxValue!=null&&date.compare(maxValue)>0}function isDateDisabled(date,startDate,endDate,minValue,maxValue){return isDateOutsideVisibleRange(date,startDate,endDate)||isDateInvalid(date,minValue,maxValue)}function isDateUnavailable(date,isUnavailable,locale,minValue,maxValue){if(!date){return false}if(isUnavailable?.(date,locale)){return true}return isDateInvalid(date,minValue,maxValue)}function isDateOutsideVisibleRange(date,startDate,endDate){return date.compare(startDate)<0||date.compare(endDate)>0}function isPreviousVisibleRangeInvalid(startDate,minValue,maxValue){const prevDate=startDate.subtract({days:1});return isSameDay(prevDate,startDate)||isDateInvalid(prevDate,minValue,maxValue)}function isNextVisibleRangeInvalid(endDate,minValue,maxValue){const nextDate=endDate.add({days:1});return isSameDay(nextDate,endDate)||isDateInvalid(nextDate,minValue,maxValue)}function getUnitDuration(duration){let d={...duration};for(let key in d){d[key]=1}return d}function getEndDate(startDate,duration){let d={...duration};if(d.days){d.days--}else{d.days=-1}return startDate.add(d)}function formatRange(startDate,endDate,formatter,toString,timeZone){let parts=formatter.formatRangeToParts(startDate.toDate(timeZone),endDate.toDate(timeZone));let separatorIndex=-1;for(let i=0;i<parts.length;i++){let part=parts[i];if(part.source==="shared"&&part.type==="literal"){separatorIndex=i}else if(part.source==="endRange"){break}}let start="";let end="";for(let i=0;i<parts.length;i++){if(i<separatorIndex){start+=parts[i].value}else if(i>separatorIndex){end+=parts[i].value}}return toString(start,end)}import{isSameDay as isSameDay2}from"@internationalized/date";import{DateFormatter,toCalendarDateTime,today}from"@internationalized/date";function getEraFormat(date){return date?.calendar.identifier==="gregory"&&date.era==="BC"?"short":void 0}function getDayFormatter(locale,timeZone){const date=toCalendarDateTime(today(timeZone));return new DateFormatter(locale,{weekday:"long",month:"long",year:"numeric",day:"numeric",era:getEraFormat(date),timeZone})}function formatSelectedDate(startDate,endDate,locale,timeZone){let start=startDate;let end=endDate??startDate;let formatter=getDayFormatter(locale,timeZone);if(isSameDay2(start,end)){return formatter.format(start.toDate(timeZone))}return formatRange(start,end,formatter,(start2,end2)=>`${start2} \u2013 ${end2}`,timeZone)}import{endOfMonth,isSameDay as isSameDay3,startOfMonth as startOfMonth2}from"@internationalized/date";import{today as today2,toCalendarDate as toCalendarDate2,DateFormatter as DateFormatter2}from"@internationalized/date";function getMonthFormatter(locale,timeZone){const date=toCalendarDate2(today2(timeZone));return new DateFormatter2(locale,{month:"long",year:"numeric",era:getEraFormat(date),calendar:date?.calendar.identifier,timeZone})}function formatVisibleRange(startDate,endDate,locale,timeZone){const start=startDate;const end=endDate??startDate;const dayFormatter=getDayFormatter(locale,timeZone);if(!isSameDay3(start,startOfMonth2(start))){return dayFormatter.formatRange(start.toDate(timeZone),end.toDate(timeZone))}const monthFormatter=getMonthFormatter(locale,timeZone);if(isSameDay3(end,endOfMonth(start))){return monthFormatter.format(start.toDate(timeZone))}if(isSameDay3(end,endOfMonth(end))){return monthFormatter.formatRange(start.toDate(timeZone),end.toDate(timeZone))}return""}function getDecadeRange(year){const computedYear=year-year%10-1;const years=[];for(let i=0;i<12;i+=1){const value=computedYear+i;years.push(value)}return years}import{getWeeksInMonth,isSameDay as isSameDay4,getDayOfWeek as getDayOfWeek2,startOfMonth as startOfMonth3}from"@internationalized/date";import{getDayOfWeek}from"@internationalized/date";function getStartOfWeek(date,locale,firstDayOfWeek=0){const day=getDayOfWeek(date,locale);const diff=(day-firstDayOfWeek+7)%7;return date.subtract({days:diff})}function getDaysInWeek(weekIndex,from,locale,firstDayOfWeek){const weekDate=from.add({weeks:weekIndex});const dates=[];let date=getStartOfWeek(weekDate,locale,firstDayOfWeek);while(dates.length<7){dates.push(date);let nextDate=date.add({days:1});if(isSameDay4(date,nextDate)){break}date=nextDate}return dates}function getCustomWeeksInMonth(from,locale,firstDayOfWeek){if(firstDayOfWeek==null){return getWeeksInMonth(from,locale)}const paddingDays=(getDayOfWeek2(startOfMonth3(from),locale)-firstDayOfWeek+7)%7;return Math.ceil((paddingDays+from.calendar.getDaysInMonth(from))/7)}function getMonthDays(from,locale,numOfWeeks,firstDayOfWeek){const monthWeeks=numOfWeeks??getCustomWeeksInMonth(from,locale,firstDayOfWeek);const weeks=[...new Array(monthWeeks).keys()];return weeks.map(week=>getDaysInWeek(week,from,locale,firstDayOfWeek))}function getMonthNames(locale,format="long"){const date=new Date(2021,0,1);const monthNames=[];for(let i=0;i<12;i++){monthNames.push(date.toLocaleString(locale,{month:format}));date.setMonth(date.getMonth()+1)}return monthNames}import{DateFormatter as DateFormatter3}from"@internationalized/date";function getWeekdayFormats(locale,timeZone){const longFormat=new DateFormatter3(locale,{weekday:"long",timeZone});const shortFormat=new DateFormatter3(locale,{weekday:"short",timeZone});const narrowFormat=new DateFormatter3(locale,{weekday:"narrow",timeZone});return value=>{const date=value instanceof Date?value:value.toDate(timeZone);return{value,short:shortFormat.format(date),long:longFormat.format(date),narrow:narrowFormat.format(date)}}}function getWeekDays(date,startOfWeekProp,timeZone,locale){const firstDayOfWeek=getStartOfWeek(date,locale,startOfWeekProp);const weeks=[...new Array(7).keys()];const format=getWeekdayFormats(locale,timeZone);return weeks.map(index=>format(firstDayOfWeek.add({days:index})))}function getYearsRange(range){const years=[];for(let year=range.from;year<=range.to;year+=1){years.push(year)}return years}import{getLocalTimeZone,toCalendar,toCalendarDateTime as toCalendarDateTime2,today as today3}from"@internationalized/date";function getTodayDate(timeZone){return today3(timeZone??getLocalTimeZone())}function getNextDay(date){return date.add({days:1})}function getPreviousDay(date){return date.subtract({days:1})}function setMonth(date,month){return date.set({month})}function setYear(date,year){return date.set({year})}function setCalendar(date,calendar){return toCalendar(toCalendarDateTime2(date),calendar)}function setDate(date,startDate,isDateUnavailable2,locale,minValue,maxValue){let result;result=constrainValue(date,minValue,maxValue);result=getPreviousAvailableDate(date,startDate,locale,isDateUnavailable2);return result}function getPreviousAvailableDate(date,minValue,locale,isDateUnavailable2){if(!isDateUnavailable2){return date}while(date.compare(minValue)>=0&&isDateUnavailable2(date,locale)){date=date.subtract({days:1})}if(date.compare(minValue)>=0){return date}}import{endOfMonth as endOfMonth2,endOfWeek,startOfMonth as startOfMonth4,startOfWeek as startOfWeek2}from"@internationalized/date";function getAdjustedDateFn(visibleDuration,locale,minValue,maxValue){return function getDate(options){const{startDate,focusedDate}=options;const endDate=getEndDate(startDate,visibleDuration);if(isDateInvalid(focusedDate,minValue,maxValue)){return{startDate,focusedDate:constrainValue(focusedDate,minValue,maxValue),endDate}}if(focusedDate.compare(startDate)<0){return{startDate:alignEnd(focusedDate,visibleDuration,locale,minValue,maxValue),focusedDate:constrainValue(focusedDate,minValue,maxValue),endDate}}if(focusedDate.compare(endDate)>0){return{startDate:alignStart(focusedDate,visibleDuration,locale,minValue,maxValue),endDate,focusedDate:constrainValue(focusedDate,minValue,maxValue)}}return{startDate,endDate,focusedDate:constrainValue(focusedDate,minValue,maxValue)}}}function getNextPage(focusedDate,startDate,visibleDuration,locale,minValue,maxValue){const adjust=getAdjustedDateFn(visibleDuration,locale,minValue,maxValue);const start=startDate.add(visibleDuration);return adjust({focusedDate:focusedDate.add(visibleDuration),startDate:alignStart(constrainStart(focusedDate,start,visibleDuration,locale,minValue,maxValue),visibleDuration,locale)})}function getPreviousPage(focusedDate,startDate,visibleDuration,locale,minValue,maxValue){const adjust=getAdjustedDateFn(visibleDuration,locale,minValue,maxValue);let start=startDate.subtract(visibleDuration);return adjust({focusedDate:focusedDate.subtract(visibleDuration),startDate:alignStart(constrainStart(focusedDate,start,visibleDuration,locale,minValue,maxValue),visibleDuration,locale)})}function getNextRow(focusedDate,startDate,visibleDuration,locale,minValue,maxValue){const adjust=getAdjustedDateFn(visibleDuration,locale,minValue,maxValue);if(visibleDuration.days){return getNextPage(focusedDate,startDate,visibleDuration,locale,minValue,maxValue)}if(visibleDuration.weeks||visibleDuration.months||visibleDuration.years){return adjust({focusedDate:focusedDate.add({weeks:1}),startDate})}}function getPreviousRow(focusedDate,startDate,visibleDuration,locale,minValue,maxValue){const adjust=getAdjustedDateFn(visibleDuration,locale,minValue,maxValue);if(visibleDuration.days){return getPreviousPage(focusedDate,startDate,visibleDuration,locale,minValue,maxValue)}if(visibleDuration.weeks||visibleDuration.months||visibleDuration.years){return adjust({focusedDate:focusedDate.subtract({weeks:1}),startDate})}}function getSectionStart(focusedDate,startDate,visibleDuration,locale,minValue,maxValue){const adjust=getAdjustedDateFn(visibleDuration,locale,minValue,maxValue);if(visibleDuration.days){return adjust({focusedDate:startDate,startDate})}if(visibleDuration.weeks){return adjust({focusedDate:startOfWeek2(focusedDate,locale),startDate})}if(visibleDuration.months||visibleDuration.years){return adjust({focusedDate:startOfMonth4(focusedDate),startDate})}}function getSectionEnd(focusedDate,startDate,visibleDuration,locale,minValue,maxValue){const adjust=getAdjustedDateFn(visibleDuration,locale,minValue,maxValue);const endDate=getEndDate(startDate,visibleDuration);if(visibleDuration.days){return adjust({focusedDate:endDate,startDate})}if(visibleDuration.weeks){return adjust({focusedDate:endOfWeek(focusedDate,locale),startDate})}if(visibleDuration.months||visibleDuration.years){return adjust({focusedDate:endOfMonth2(focusedDate),startDate})}}function getNextSection(focusedDate,startDate,larger,visibleDuration,locale,minValue,maxValue){const adjust=getAdjustedDateFn(visibleDuration,locale,minValue,maxValue);if(!larger&&!visibleDuration.days){return adjust({focusedDate:focusedDate.add(getUnitDuration(visibleDuration)),startDate})}if(visibleDuration.days){return getNextPage(focusedDate,startDate,visibleDuration,locale,minValue,maxValue)}if(visibleDuration.weeks){return adjust({focusedDate:focusedDate.add({months:1}),startDate})}if(visibleDuration.months||visibleDuration.years){return adjust({focusedDate:focusedDate.add({years:1}),startDate})}}function getPreviousSection(focusedDate,startDate,larger,visibleDuration,locale,minValue,maxValue){const adjust=getAdjustedDateFn(visibleDuration,locale,minValue,maxValue);if(!larger&&!visibleDuration.days){return adjust({focusedDate:focusedDate.subtract(getUnitDuration(visibleDuration)),startDate})}if(visibleDuration.days){return getPreviousPage(focusedDate,startDate,visibleDuration,locale,minValue,maxValue)}if(visibleDuration.weeks){return adjust({focusedDate:focusedDate.subtract({months:1}),startDate})}if(visibleDuration.months||visibleDuration.years){return adjust({focusedDate:focusedDate.subtract({years:1}),startDate})}}import{CalendarDate,DateFormatter as DateFormatter4}from"@internationalized/date";var isValidYear=year=>year!=null&&year.length===4;var isValidMonth=month=>month!=null&&parseFloat(month)<=12;var isValidDay=day=>day!=null&&parseFloat(day)<=31;function parseDateString(date,locale,timeZone){const regex=createRegex(locale,timeZone);let{year,month,day}=extract(regex,date)??{};const hasMatch=year!=null||month!=null||day!=null;if(hasMatch){const curr=new Date;year||(year=curr.getFullYear().toString());month||(month=(curr.getMonth()+1).toString());day||(day=curr.getDate().toString())}if(isValidYear(year)&&isValidMonth(month)&&isValidDay(day)){return new CalendarDate(+year,+month,+day)}const time=Date.parse(date);if(!isNaN(time)){const date2=new Date(time);return new CalendarDate(date2.getFullYear(),date2.getMonth()+1,date2.getDate())}}function createRegex(locale,timeZone){const formatter=new DateFormatter4(locale,{day:"numeric",month:"numeric",year:"numeric",timeZone});const parts=formatter.formatToParts(new Date(2e3,11,25));return parts.map(({type,value})=>type==="literal"?`${value}?`:`((?!=<${type}>)\\d+)?`).join("")}function extract(pattern,str){const matches=str.match(pattern);return pattern.toString().match(/<(.+?)>/g)?.map(group=>{const groupMatches=group.match(/<(.+)>/);if(!groupMatches||groupMatches.length<=0){return null}return group.match(/<(.+)>/)?.[1]}).reduce((acc,curr,index)=>{if(!curr)return acc;if(matches&&matches.length>index){acc[curr]=matches[index+1]}else{acc[curr]=null}return acc},{})}import{endOfMonth as endOfMonth3,endOfWeek as endOfWeek2,endOfYear,now,startOfMonth as startOfMonth5,startOfWeek as startOfWeek3,startOfYear as startOfYear2}from"@internationalized/date";function getDateRangePreset(preset,locale,timeZone){const today4=now(timeZone);switch(preset){case"thisWeek":return[startOfWeek3(today4,locale),endOfWeek2(today4,locale)];case"thisMonth":return[startOfMonth5(today4),today4];case"thisQuarter":return[startOfMonth5(today4).add({months:-today4.month%3}),today4];case"thisYear":return[startOfYear2(today4),today4];case"last3Days":return[today4.add({days:-2}),today4];case"last7Days":return[today4.add({days:-6}),today4];case"last14Days":return[today4.add({days:-13}),today4];case"last30Days":return[today4.add({days:-29}),today4];case"last90Days":return[today4.add({days:-89}),today4];case"lastMonth":return[startOfMonth5(today4.add({months:-1})),endOfMonth3(today4.add({months:-1}))];case"lastQuarter":return[startOfMonth5(today4.add({months:-today4.month%3-3})),endOfMonth3(today4.add({months:-today4.month%3-1}))];case"lastWeek":return[startOfWeek3(today4,locale).add({weeks:-1}),endOfWeek2(today4,locale).add({weeks:-1})];case"lastYear":return[startOfYear2(today4.add({years:-1})),endOfYear(today4.add({years:-1}))];default:throw new Error(`Invalid date range preset: ${preset}`)}}export{alignCenter,alignDate,alignEnd,alignStart,alignStartDate,constrainStart,constrainValue,formatRange,formatSelectedDate,formatVisibleRange,getAdjustedDateFn,getCustomWeeksInMonth,getDateRangePreset,getDayFormatter,getDaysInWeek,getDecadeRange,getEndDate,getMonthDays,getMonthFormatter,getMonthNames,getNextDay,getNextPage,getNextRow,getNextSection,getPreviousAvailableDate,getPreviousDay,getPreviousPage,getPreviousRow,getPreviousSection,getSectionEnd,getSectionStart,getTodayDate,getUnitDuration,getWeekDays,getWeekdayFormats,getYearsRange,isDateDisabled,isDateEqual,isDateInvalid,isDateOutsideVisibleRange,isDateUnavailable,isNextVisibleRangeInvalid,isPreviousVisibleRangeInvalid,isTodayDate,parseDateString,setCalendar,setDate,setMonth,setYear};
697
2
  //# sourceMappingURL=index.mjs.map