@zag-js/date-utils 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/dist/chunk-5HGHDJ3L.mjs +14 -0
  2. package/dist/chunk-AMZ7CJ5F.mjs +18 -0
  3. package/dist/chunk-CAYCTIEJ.mjs +29 -0
  4. package/dist/chunk-G4VVKINZ.mjs +14 -0
  5. package/dist/chunk-KBGJA6NB.mjs +55 -0
  6. package/dist/chunk-KFJ757ZA.mjs +32 -0
  7. package/dist/chunk-KLHRN7WS.mjs +20 -0
  8. package/dist/chunk-KN3YMOSL.mjs +8 -0
  9. package/dist/chunk-LGEGBP3O.mjs +20 -0
  10. package/dist/{chunk-NXMEZINO.mjs → chunk-LQAXQPWP.mjs} +4 -7
  11. package/dist/chunk-ODG5YF5H.mjs +21 -0
  12. package/dist/chunk-SI75FOJ2.mjs +11 -0
  13. package/dist/chunk-U3OBXRHI.mjs +42 -0
  14. package/dist/format-date.d.ts +9 -0
  15. package/dist/format-date.js +79 -0
  16. package/dist/format-date.mjs +6 -0
  17. package/dist/format-selected-date.d.ts +1 -2
  18. package/dist/format-selected-date.js +14 -14
  19. package/dist/format-selected-date.mjs +3 -2
  20. package/dist/format-visible-range.d.ts +1 -2
  21. package/dist/format-visible-range.js +29 -50
  22. package/dist/format-visible-range.mjs +4 -3
  23. package/dist/get-day-formatter.d.ts +5 -0
  24. package/dist/{placeholder.js → get-day-formatter.js} +22 -21
  25. package/dist/get-day-formatter.mjs +7 -0
  26. package/dist/get-decade-range.d.ts +3 -0
  27. package/dist/get-decade-range.js +38 -0
  28. package/dist/get-decade-range.mjs +6 -0
  29. package/dist/get-end-of-week.d.ts +5 -0
  30. package/dist/{segment-constants.js → get-end-of-week.js} +17 -32
  31. package/dist/get-end-of-week.mjs +11 -0
  32. package/dist/get-era-format.d.ts +5 -0
  33. package/dist/get-era-format.js +32 -0
  34. package/dist/get-era-format.mjs +6 -0
  35. package/dist/get-month-days.d.ts +6 -0
  36. package/dist/{get-month-dates.js → get-month-days.js} +26 -27
  37. package/dist/get-month-days.mjs +9 -0
  38. package/dist/get-month-formatter.d.ts +5 -0
  39. package/dist/{get-formatter.js → get-month-formatter.js} +14 -26
  40. package/dist/get-month-formatter.mjs +7 -0
  41. package/dist/get-month-names.d.ts +3 -0
  42. package/dist/get-month-names.js +38 -0
  43. package/dist/get-month-names.mjs +6 -0
  44. package/dist/get-start-of-week.d.ts +5 -0
  45. package/dist/get-start-of-week.js +35 -0
  46. package/dist/get-start-of-week.mjs +6 -0
  47. package/dist/get-week-days.d.ts +10 -0
  48. package/dist/get-week-days.js +62 -0
  49. package/dist/get-week-days.mjs +8 -0
  50. package/dist/get-weekday-formats.d.ts +10 -0
  51. package/dist/get-weekday-formats.js +44 -0
  52. package/dist/get-weekday-formats.mjs +6 -0
  53. package/dist/index.d.ts +10 -8
  54. package/dist/index.js +223 -307
  55. package/dist/index.mjs +40 -41
  56. package/dist/parse-date.d.ts +5 -0
  57. package/dist/parse-date.js +66 -0
  58. package/dist/parse-date.mjs +6 -0
  59. package/dist/types.d.ts +1 -2
  60. package/package.json +2 -2
  61. package/dist/chunk-55BYHK5B.mjs +0 -31
  62. package/dist/chunk-DZM5JUL2.mjs +0 -22
  63. package/dist/chunk-ETRHBIGD.mjs +0 -66
  64. package/dist/chunk-GLQDJRSE.mjs +0 -31
  65. package/dist/chunk-JZVHAOWX.mjs +0 -35
  66. package/dist/chunk-MGRIF22W.mjs +0 -18
  67. package/dist/chunk-SQCHVCXH.mjs +0 -42
  68. package/dist/chunk-TSOWYV6W.mjs +0 -34
  69. package/dist/chunk-U6WRBS5P.mjs +0 -77
  70. package/dist/get-formatter.d.ts +0 -8
  71. package/dist/get-formatter.mjs +0 -8
  72. package/dist/get-month-dates.d.ts +0 -5
  73. package/dist/get-month-dates.mjs +0 -7
  74. package/dist/get-week-dates.d.ts +0 -7
  75. package/dist/get-week-dates.js +0 -60
  76. package/dist/get-week-dates.mjs +0 -8
  77. package/dist/placeholder.d.ts +0 -7
  78. package/dist/placeholder.mjs +0 -8
  79. package/dist/segment-constants.d.ts +0 -27
  80. package/dist/segment-constants.mjs +0 -10
  81. package/dist/segment-limit.d.ts +0 -10
  82. package/dist/segment-limit.js +0 -101
  83. package/dist/segment-limit.mjs +0 -6
  84. package/dist/segment-mutation.d.ts +0 -7
  85. package/dist/segment-mutation.js +0 -91
  86. package/dist/segment-mutation.mjs +0 -8
  87. package/dist/segment-parts.d.ts +0 -27
  88. package/dist/segment-parts.js +0 -159
  89. package/dist/segment-parts.mjs +0 -11
package/dist/index.js CHANGED
@@ -20,8 +20,6 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.ts
21
21
  var src_exports = {};
22
22
  __export(src_exports, {
23
- SEGMENT_PAGE_STEP: () => SEGMENT_PAGE_STEP,
24
- addSegment: () => addSegment,
25
23
  alignCenter: () => alignCenter,
26
24
  alignDate: () => alignDate,
27
25
  alignEnd: () => alignEnd,
@@ -29,15 +27,18 @@ __export(src_exports, {
29
27
  alignStartDate: () => alignStartDate,
30
28
  constrainStart: () => constrainStart,
31
29
  constrainValue: () => constrainValue,
32
- createPlaceholderDate: () => createPlaceholderDate,
30
+ formatDate: () => formatDate,
33
31
  formatRange: () => formatRange,
34
32
  formatSelectedDate: () => formatSelectedDate,
35
33
  formatVisibleRange: () => formatVisibleRange,
36
34
  getAdjustedDateFn: () => getAdjustedDateFn,
37
- getAllSegments: () => getAllSegments,
38
- getDatesInWeek: () => getDatesInWeek,
35
+ getDayFormatter: () => getDayFormatter,
36
+ getDaysInWeek: () => getDaysInWeek,
37
+ getDecadeRange: () => getDecadeRange,
39
38
  getEndDate: () => getEndDate,
40
- getMonthDates: () => getMonthDates,
39
+ getMonthDays: () => getMonthDays,
40
+ getMonthFormatter: () => getMonthFormatter,
41
+ getMonthNames: () => getMonthNames,
41
42
  getNextDay: () => getNextDay,
42
43
  getNextPage: () => getNextPage,
43
44
  getNextRow: () => getNextRow,
@@ -49,13 +50,10 @@ __export(src_exports, {
49
50
  getPreviousSection: () => getPreviousSection,
50
51
  getSectionEnd: () => getSectionEnd,
51
52
  getSectionStart: () => getSectionStart,
52
- getSegmentLimits: () => getSegmentLimits,
53
- getSegmentPageStep: () => getSegmentPageStep,
54
- getSegments: () => getSegments,
55
53
  getTodayDate: () => getTodayDate,
56
- getTodayPlaceholderDate: () => getTodayPlaceholderDate,
57
54
  getUnitDuration: () => getUnitDuration,
58
- getWeekDates: () => getWeekDates,
55
+ getWeekDays: () => getWeekDays,
56
+ getWeekdayFormats: () => getWeekdayFormats,
59
57
  getYearsRange: () => getYearsRange,
60
58
  isDateDisabled: () => isDateDisabled,
61
59
  isDateEqual: () => isDateEqual,
@@ -64,12 +62,11 @@ __export(src_exports, {
64
62
  isDateUnavailable: () => isDateUnavailable,
65
63
  isNextVisibleRangeInvalid: () => isNextVisibleRangeInvalid,
66
64
  isPreviousVisibleRangeInvalid: () => isPreviousVisibleRangeInvalid,
67
- isSegmentEditable: () => isSegmentEditable,
68
65
  isTodayDate: () => isTodayDate,
66
+ parseDateString: () => parseDateString,
69
67
  setCalendar: () => setCalendar,
70
68
  setDate: () => setDate,
71
69
  setMonth: () => setMonth,
72
- setSegment: () => setSegment,
73
70
  setYear: () => setYear
74
71
  });
75
72
  module.exports = __toCommonJS(src_exports);
@@ -206,6 +203,58 @@ function getEndDate(startDate, duration) {
206
203
  return startDate.add(d);
207
204
  }
208
205
 
206
+ // src/format-date.ts
207
+ var import_date3 = require("@internationalized/date");
208
+ function createRegEx(sign) {
209
+ let symbols = "\\s|\\.|-|/|\\\\|,|\\$|\\!|\\?|:|;";
210
+ return new RegExp("(^|>|" + symbols + ")(" + sign + ")($|<|" + symbols + ")", "g");
211
+ }
212
+ function formatDate(value, formatString, locale, timeZone = "UTC") {
213
+ const datetime = (0, import_date3.toCalendarDateTime)(value);
214
+ const date = datetime.toDate(timeZone);
215
+ const formats = {
216
+ // Time in ms
217
+ T: date.getTime(),
218
+ // Minutes
219
+ m: date.toLocaleString(locale, { minute: "numeric" }),
220
+ mm: date.toLocaleString(locale, { minute: "2-digit" }),
221
+ // Seconds
222
+ s: date.toLocaleString(locale, { second: "numeric" }),
223
+ ss: date.toLocaleString(locale, { second: "2-digit" }),
224
+ // Hours
225
+ h: date.toLocaleString(locale, { hour: "numeric", hour12: true }),
226
+ hh: date.toLocaleString(locale, { hour: "2-digit", hour12: true }),
227
+ H: date.toLocaleString(locale, { hour: "numeric", hour12: false }),
228
+ HH: date.toLocaleString(locale, { hour: "2-digit", hour12: false }),
229
+ // Day period
230
+ aa: date.toLocaleString(locale, { hour: "numeric", hour12: true }).toLowerCase(),
231
+ AA: date.toLocaleString(locale, { hour: "numeric", hour12: true }).toUpperCase(),
232
+ // Day of week
233
+ E: date.toLocaleString(locale, { weekday: "short" }),
234
+ EE: date.toLocaleString(locale, { weekday: "short" }),
235
+ EEE: date.toLocaleString(locale, { weekday: "short" }),
236
+ EEEE: date.toLocaleString(locale, { weekday: "long" }),
237
+ // Date of month
238
+ d: datetime.day,
239
+ dd: date.toLocaleString(locale, { day: "2-digit" }),
240
+ // Months
241
+ M: datetime.month + 1,
242
+ MM: date.toLocaleString(locale, { month: "2-digit" }),
243
+ MMM: date.toLocaleString(locale, { month: "short" }),
244
+ MMMM: date.toLocaleString(locale, { month: "long" }),
245
+ // Years
246
+ yy: date.toLocaleString(locale, { year: "2-digit" }),
247
+ yyyy: date.toLocaleString(locale, { year: "numeric" }),
248
+ YY: date.toLocaleString(locale, { year: "2-digit" }),
249
+ YYYY: date.toLocaleString(locale, { year: "numeric" })
250
+ };
251
+ let result = formatString;
252
+ for (const key in formats) {
253
+ result = result.replace(createRegEx(key), "$1" + formats[key] + "$3");
254
+ }
255
+ return result;
256
+ }
257
+
209
258
  // src/format-range.ts
210
259
  function formatRange(startDate, endDate, formatter, toString, timeZone) {
211
260
  let parts = formatter.formatRangeToParts(startDate.toDate(timeZone), endDate.toDate(timeZone));
@@ -231,114 +280,153 @@ function formatRange(startDate, endDate, formatter, toString, timeZone) {
231
280
  }
232
281
 
233
282
  // src/format-selected-date.ts
234
- var import_date3 = require("@internationalized/date");
283
+ var import_date5 = require("@internationalized/date");
284
+
285
+ // src/get-day-formatter.ts
286
+ var import_date4 = require("@internationalized/date");
235
287
 
236
- // src/get-formatter.ts
288
+ // src/get-era-format.ts
237
289
  function getEraFormat(date) {
238
290
  return date?.calendar.identifier === "gregory" && date.era === "BC" ? "short" : void 0;
239
291
  }
240
- function getDateFormatter(startDate, endDate, getDateFormatter2, timeZone) {
241
- let start = startDate;
242
- let end = endDate ?? startDate;
243
- let era = getEraFormat(start) || getEraFormat(end);
244
- return getDateFormatter2({
292
+
293
+ // src/get-day-formatter.ts
294
+ function getDayFormatter(locale, timeZone) {
295
+ const date = (0, import_date4.toCalendarDate)((0, import_date4.today)(timeZone));
296
+ return new import_date4.DateFormatter(locale, {
245
297
  weekday: "long",
246
298
  month: "long",
247
299
  year: "numeric",
248
300
  day: "numeric",
249
- era,
250
- timeZone
251
- });
252
- }
253
- function getMonthFormatter(startDate, endDate, getDateFormatter2, timeZone) {
254
- let start = startDate;
255
- let end = endDate ?? startDate;
256
- let era = getEraFormat(start) || getEraFormat(end);
257
- return getDateFormatter2({
258
- month: "long",
259
- year: "numeric",
260
- era,
261
- calendar: start?.calendar.identifier,
301
+ era: getEraFormat(date),
262
302
  timeZone
263
303
  });
264
304
  }
265
305
 
266
306
  // src/format-selected-date.ts
267
- function formatSelectedDate(startDate, endDate, getFormatter, isSelectingRange, timeZone) {
307
+ function formatSelectedDate(startDate, endDate, locale, timeZone) {
268
308
  let start = startDate;
269
309
  let end = endDate ?? startDate;
270
- let formatter = getDateFormatter(start, end, getFormatter, timeZone);
271
- if (isSelectingRange || start == null || end == null) {
272
- return "";
273
- }
274
- if ((0, import_date3.isSameDay)(start, end)) {
310
+ let formatter = getDayFormatter(locale, timeZone);
311
+ if ((0, import_date5.isSameDay)(start, end)) {
275
312
  return formatter.format(start.toDate(timeZone));
276
313
  }
277
314
  return formatRange(start, end, formatter, (start2, end2) => `${start2} \u2013 ${end2}`, timeZone);
278
315
  }
279
316
 
280
317
  // src/format-visible-range.ts
281
- var import_date4 = require("@internationalized/date");
282
- function formatVisibleRange(startDate, endDate, getFormatter, isAria, timeZone) {
283
- if (!startDate)
284
- return "";
285
- let start = startDate;
286
- let end = endDate ?? startDate;
287
- let monthFormatter = getMonthFormatter(start, end, getFormatter, timeZone);
288
- let dateFormatter = getDateFormatter(start, end, getFormatter, timeZone);
289
- if (!(0, import_date4.isSameDay)(start, (0, import_date4.startOfMonth)(start))) {
290
- return isAria ? formatRange(start, end, dateFormatter, (start2, end2) => `${start2} \u2013 ${end2}`, timeZone) : dateFormatter.formatRange(start.toDate(timeZone), end.toDate(timeZone));
291
- }
292
- if ((0, import_date4.isSameDay)(end, (0, import_date4.endOfMonth)(start))) {
318
+ var import_date7 = require("@internationalized/date");
319
+
320
+ // src/get-month-formatter.ts
321
+ var import_date6 = require("@internationalized/date");
322
+ function getMonthFormatter(locale, timeZone) {
323
+ const date = (0, import_date6.toCalendarDate)((0, import_date6.today)(timeZone));
324
+ return new import_date6.DateFormatter(locale, {
325
+ month: "long",
326
+ year: "numeric",
327
+ era: getEraFormat(date),
328
+ calendar: date?.calendar.identifier,
329
+ timeZone
330
+ });
331
+ }
332
+
333
+ // src/format-visible-range.ts
334
+ function formatVisibleRange(startDate, endDate, locale, timeZone) {
335
+ const start = startDate;
336
+ const end = endDate ?? startDate;
337
+ const dayFormatter = getDayFormatter(locale, timeZone);
338
+ if (!(0, import_date7.isSameDay)(start, (0, import_date7.startOfMonth)(start))) {
339
+ return dayFormatter.formatRange(start.toDate(timeZone), end.toDate(timeZone));
340
+ }
341
+ const monthFormatter = getMonthFormatter(locale, timeZone);
342
+ if ((0, import_date7.isSameDay)(end, (0, import_date7.endOfMonth)(start))) {
293
343
  return monthFormatter.format(start.toDate(timeZone));
294
344
  }
295
- if ((0, import_date4.isSameDay)(end, (0, import_date4.endOfMonth)(end))) {
296
- return isAria ? formatRange(start, end, monthFormatter, (start2, end2) => `${start2} \u2013 ${end2}`, timeZone) : monthFormatter.formatRange(start.toDate(timeZone), end.toDate(timeZone));
345
+ if ((0, import_date7.isSameDay)(end, (0, import_date7.endOfMonth)(end))) {
346
+ return monthFormatter.formatRange(start.toDate(timeZone), end.toDate(timeZone));
297
347
  }
348
+ return "";
298
349
  }
299
350
 
300
- // src/get-month-dates.ts
301
- var import_date6 = require("@internationalized/date");
302
-
303
- // src/get-week-dates.ts
304
- var import_date5 = require("@internationalized/date");
305
- function getDatesInWeek(weekIndex, fromDate, locale) {
306
- let date = fromDate.add({ weeks: weekIndex });
307
- let dates = [];
308
- date = (0, import_date5.startOfWeek)(date, locale);
309
- let dayOfWeek = (0, import_date5.getDayOfWeek)(date, locale);
310
- for (let i = 0; i < dayOfWeek; i++) {
311
- dates.push(null);
351
+ // src/get-decade-range.ts
352
+ function getDecadeRange(year) {
353
+ const computedYear = year - year % 10 - 1;
354
+ const years = [];
355
+ for (let i = 0; i < 12; i += 1) {
356
+ const value = computedYear + i;
357
+ years.push(value);
312
358
  }
359
+ return years;
360
+ }
361
+
362
+ // src/get-month-days.ts
363
+ var import_date9 = require("@internationalized/date");
364
+
365
+ // src/get-start-of-week.ts
366
+ var import_date8 = require("@internationalized/date");
367
+ function getStartOfWeek(date, locale, firstDayOfWeek = 0) {
368
+ const day = (0, import_date8.getDayOfWeek)(date, locale);
369
+ const diff = (day - firstDayOfWeek + 7) % 7;
370
+ return date.subtract({ days: diff });
371
+ }
372
+
373
+ // src/get-month-days.ts
374
+ function getDaysInWeek(weekIndex, from, locale, firstDayOfWeek) {
375
+ const weekDate = from.add({ weeks: weekIndex });
376
+ const dates = [];
377
+ let date = getStartOfWeek(weekDate, locale, firstDayOfWeek);
313
378
  while (dates.length < 7) {
314
379
  dates.push(date);
315
380
  let nextDate = date.add({ days: 1 });
316
- if ((0, import_date5.isSameDay)(date, nextDate)) {
381
+ if ((0, import_date9.isSameDay)(date, nextDate)) {
317
382
  break;
318
383
  }
319
384
  date = nextDate;
320
385
  }
321
- while (dates.length < 7) {
322
- dates.push(null);
323
- }
324
386
  return dates;
325
387
  }
326
- function getWeekDates(fromDate, timeZone, locale) {
327
- let weekStart = (0, import_date5.startOfWeek)(fromDate, locale);
328
- let weekArr = [...new Array(7).keys()];
329
- return weekArr.map((index) => {
330
- return weekStart.add({ days: index }).toDate(timeZone);
388
+ function getMonthDays(from, locale, numOfWeeks, firstDayOfWeek) {
389
+ const monthWeeks = (0, import_date9.getWeeksInMonth)(from, locale);
390
+ const weeks = [...new Array(numOfWeeks ?? monthWeeks).keys()];
391
+ return weeks.map((week) => {
392
+ return getDaysInWeek(week, from, locale, firstDayOfWeek);
331
393
  });
332
394
  }
333
395
 
334
- // src/get-month-dates.ts
335
- function getMonthDates(startDate, duration, locale) {
336
- let weeksInMonth = (0, import_date6.getWeeksInMonth)(startDate, locale);
337
- let numOfWeeks = duration.weeks ?? weeksInMonth;
338
- let weekArr = [...new Array(numOfWeeks).keys()];
339
- return weekArr.map((index) => {
340
- return getDatesInWeek(index, startDate, locale);
341
- });
396
+ // src/get-month-names.ts
397
+ function getMonthNames(locale, format = "long") {
398
+ const date = new Date(2021, 0, 1);
399
+ const monthNames = [];
400
+ for (let i = 0; i < 12; i++) {
401
+ monthNames.push(date.toLocaleString(locale, { month: format }));
402
+ date.setMonth(date.getMonth() + 1);
403
+ }
404
+ return monthNames;
405
+ }
406
+
407
+ // src/get-weekday-formats.ts
408
+ var import_date10 = require("@internationalized/date");
409
+ function getWeekdayFormats(locale, timeZone) {
410
+ const longFormat = new import_date10.DateFormatter(locale, { weekday: "long", timeZone });
411
+ const shortFormat = new import_date10.DateFormatter(locale, { weekday: "short", timeZone });
412
+ const narrowFormat = new import_date10.DateFormatter(locale, { weekday: "narrow", timeZone });
413
+ return (value) => {
414
+ const date = value instanceof Date ? value : value.toDate(timeZone);
415
+ return {
416
+ value,
417
+ short: shortFormat.format(date),
418
+ long: longFormat.format(date),
419
+ narrow: narrowFormat.format(date)
420
+ };
421
+ };
422
+ }
423
+
424
+ // src/get-week-days.ts
425
+ function getWeekDays(date, startOfWeekProp, timeZone, locale) {
426
+ const firstDayOfWeek = getStartOfWeek(date, locale, startOfWeekProp);
427
+ const weeks = [...new Array(7).keys()];
428
+ const format = getWeekdayFormats(locale, timeZone);
429
+ return weeks.map((index) => format(firstDayOfWeek.add({ days: index })));
342
430
  }
343
431
 
344
432
  // src/get-year-range.ts
@@ -351,9 +439,9 @@ function getYearsRange(range) {
351
439
  }
352
440
 
353
441
  // src/mutation.ts
354
- var import_date7 = require("@internationalized/date");
442
+ var import_date11 = require("@internationalized/date");
355
443
  function getTodayDate(timezone) {
356
- return (0, import_date7.today)(timezone);
444
+ return (0, import_date11.today)(timezone);
357
445
  }
358
446
  function getNextDay(date) {
359
447
  return date.add({ days: 1 });
@@ -368,7 +456,7 @@ function setYear(date, year) {
368
456
  return date.set({ year });
369
457
  }
370
458
  function setCalendar(date, calendar) {
371
- return (0, import_date7.toCalendar)((0, import_date7.toCalendarDate)(date), calendar);
459
+ return (0, import_date11.toCalendar)((0, import_date11.toCalendarDate)(date), calendar);
372
460
  }
373
461
  function setDate(date, startDate, isDateUnavailable2, minValue, maxValue) {
374
462
  let result;
@@ -389,7 +477,7 @@ function getPreviousAvailableDate(date, minValue, isDateUnavailable2) {
389
477
  }
390
478
 
391
479
  // src/pagination.ts
392
- var import_date8 = require("@internationalized/date");
480
+ var import_date12 = require("@internationalized/date");
393
481
  function getAdjustedDateFn(visibleDuration, locale, minValue, maxValue) {
394
482
  return function getDate(options) {
395
483
  const { startDate, focusedDate } = options;
@@ -480,13 +568,13 @@ function getSectionStart(focusedDate, startDate, visibleDuration, locale, minVal
480
568
  }
481
569
  if (visibleDuration.weeks) {
482
570
  return adjust({
483
- focusedDate: (0, import_date8.startOfWeek)(focusedDate, locale),
571
+ focusedDate: (0, import_date12.startOfWeek)(focusedDate, locale),
484
572
  startDate
485
573
  });
486
574
  }
487
575
  if (visibleDuration.months || visibleDuration.years) {
488
576
  return adjust({
489
- focusedDate: (0, import_date8.startOfMonth)(focusedDate),
577
+ focusedDate: (0, import_date12.startOfMonth)(focusedDate),
490
578
  startDate
491
579
  });
492
580
  }
@@ -502,13 +590,13 @@ function getSectionEnd(focusedDate, startDate, visibleDuration, locale, minValue
502
590
  }
503
591
  if (visibleDuration.weeks) {
504
592
  return adjust({
505
- focusedDate: (0, import_date8.endOfWeek)(focusedDate, locale),
593
+ focusedDate: (0, import_date12.endOfWeek)(focusedDate, locale),
506
594
  startDate
507
595
  });
508
596
  }
509
597
  if (visibleDuration.months || visibleDuration.years) {
510
598
  return adjust({
511
- focusedDate: (0, import_date8.endOfMonth)(focusedDate),
599
+ focusedDate: (0, import_date12.endOfMonth)(focusedDate),
512
600
  startDate
513
601
  });
514
602
  }
@@ -562,217 +650,46 @@ function getPreviousSection(focusedDate, startDate, larger, visibleDuration, loc
562
650
  }
563
651
  }
564
652
 
565
- // src/placeholder.ts
566
- var import_date9 = require("@internationalized/date");
567
- function getTodayPlaceholderDate(timeZone) {
568
- return (0, import_date9.now)(timeZone).set({
569
- hour: 0,
570
- minute: 0,
571
- second: 0,
572
- millisecond: 0
573
- });
574
- }
575
- function createPlaceholderDate(granularity, timeZone) {
576
- let date = getTodayPlaceholderDate(timeZone);
577
- if (granularity === "year" || granularity === "month" || granularity === "day") {
578
- return (0, import_date9.toCalendarDate)(date);
579
- }
580
- return date;
581
- }
582
-
583
- // src/segment-constants.ts
584
- var EDITABLE_SEGMENTS = {
585
- year: true,
586
- month: true,
587
- day: true,
588
- hour: true,
589
- minute: true,
590
- second: true,
591
- dayPeriod: true,
592
- era: true
593
- };
594
- var SEGMENT_PAGE_STEP = {
595
- year: 5,
596
- month: 2,
597
- day: 7,
598
- hour: 2,
599
- minute: 15,
600
- second: 15
601
- };
602
- function isSegmentEditable(segment) {
603
- return EDITABLE_SEGMENTS[segment];
604
- }
605
- function getSegmentPageStep(segment) {
606
- return SEGMENT_PAGE_STEP[segment] ?? 1;
607
- }
608
-
609
- // src/segment-limit.ts
610
- var import_date10 = require("@internationalized/date");
611
- function getSegmentLimits(date, type, options) {
612
- switch (type) {
613
- case "era": {
614
- let eras = date.calendar.getEras();
615
- return {
616
- value: eras.indexOf(date.era),
617
- min: 0,
618
- max: eras.length - 1
619
- };
620
- }
621
- case "year":
622
- return {
623
- value: date.year,
624
- min: 1,
625
- max: date.calendar.getYearsInEra(date)
626
- };
627
- case "month":
628
- return {
629
- value: date.month,
630
- min: (0, import_date10.getMinimumMonthInYear)(date),
631
- max: date.calendar.getMonthsInYear(date)
632
- };
633
- case "day":
634
- return {
635
- value: date.day,
636
- min: (0, import_date10.getMinimumDayInMonth)(date),
637
- max: date.calendar.getDaysInMonth(date)
638
- };
639
- }
640
- if ("hour" in date) {
641
- switch (type) {
642
- case "dayPeriod":
643
- return {
644
- value: date.hour >= 12 ? 12 : 0,
645
- min: 0,
646
- max: 12
647
- };
648
- case "hour":
649
- if (options?.hour12) {
650
- let isPM = date.hour >= 12;
651
- return {
652
- value: date.hour,
653
- min: isPM ? 12 : 0,
654
- max: isPM ? 23 : 11
655
- };
656
- }
657
- return {
658
- value: date.hour,
659
- min: 0,
660
- max: 23
661
- };
662
- case "minute":
663
- return {
664
- value: date.minute,
665
- min: 0,
666
- max: 59
667
- };
668
- case "second":
669
- return {
670
- value: date.second,
671
- min: 0,
672
- max: 59
673
- };
674
- }
675
- }
676
- return {
677
- value: -1,
678
- min: -1,
679
- max: -1
680
- };
681
- }
682
-
683
- // src/segment-mutation.ts
684
- function addSegment(date, part, amount, options) {
685
- switch (part) {
686
- case "era":
687
- case "year":
688
- case "month":
689
- case "day":
690
- return date.cycle(part, amount, { round: part === "year" });
691
- }
692
- if ("hour" in date) {
693
- switch (part) {
694
- case "dayPeriod": {
695
- let hours = date.hour;
696
- let isPM = hours >= 12;
697
- return date.set({ hour: isPM ? hours - 12 : hours + 12 });
698
- }
699
- case "hour":
700
- case "minute":
701
- case "second":
702
- return date.cycle(part, amount, {
703
- round: part !== "hour",
704
- hourCycle: options?.hour12 ? 12 : 24
705
- });
653
+ // src/parse-date.ts
654
+ var import_date13 = require("@internationalized/date");
655
+ function parseDateString(date, locale, timeZone) {
656
+ const regex = createRegex(locale, timeZone);
657
+ const { year, month, day } = extract(regex, date) ?? {};
658
+ if (year != null && year.length === 4 && month != null && +month <= 12 && day != null && +day <= 31) {
659
+ return new import_date13.CalendarDate(+year, +month, +day);
660
+ }
661
+ const time = Date.parse(date);
662
+ if (!isNaN(time)) {
663
+ const date2 = new Date(time);
664
+ return new import_date13.CalendarDate(date2.getFullYear(), date2.getMonth() + 1, date2.getDate());
665
+ }
666
+ }
667
+ function createRegex(locale, timeZone) {
668
+ const formatter = new import_date13.DateFormatter(locale, { day: "numeric", month: "numeric", year: "numeric", timeZone });
669
+ const parts = formatter.formatToParts(new Date(2e3, 11, 25));
670
+ return parts.map(({ type, value }) => type === "literal" ? value : `((?!=<${type}>)\\d+)`).join("");
671
+ }
672
+ function extract(pattern, str) {
673
+ const matches = str.match(pattern);
674
+ return pattern.toString().match(/<(.+?)>/g)?.map((group) => {
675
+ const groupMatches = group.match(/<(.+)>/);
676
+ if (!groupMatches || groupMatches.length <= 0) {
677
+ return null;
706
678
  }
707
- }
708
- return date;
709
- }
710
- function setSegment(date, part, value, options) {
711
- switch (part) {
712
- case "day":
713
- case "month":
714
- case "year":
715
- case "era":
716
- return date.set({ [part]: value });
717
- }
718
- if ("hour" in date) {
719
- switch (part) {
720
- case "dayPeriod": {
721
- let hours = date.hour;
722
- let wasPM = hours >= 12;
723
- let isPM = value >= 12;
724
- return isPM === wasPM ? date : date.set({ hour: wasPM ? hours - 12 : hours + 12 });
725
- }
726
- case "hour":
727
- if (options?.hour12) {
728
- let hours = date.hour;
729
- let wasPM = hours >= 12;
730
- if (!wasPM && value === 12) {
731
- value = 0;
732
- }
733
- if (wasPM && value < 12) {
734
- value += 12;
735
- }
736
- }
737
- case "minute":
738
- case "second":
739
- return date.set({ [part]: value });
679
+ return group.match(/<(.+)>/)?.[1];
680
+ }).reduce((acc, curr, index) => {
681
+ if (!curr)
682
+ return acc;
683
+ if (matches && matches.length > index) {
684
+ acc[curr] = matches[index + 1];
685
+ } else {
686
+ acc[curr] = null;
740
687
  }
741
- }
742
- return date;
743
- }
744
-
745
- // src/segment-parts.ts
746
- function getAllSegments(segments) {
747
- return segments.filter((segment) => isSegmentEditable(segment.type)).reduce((acc, segment) => (acc[segment.type] = true, acc), {});
748
- }
749
- function getPlaceholder(options) {
750
- const placeholder = { day: "dd", month: "mm", year: "yyyy" };
751
- return placeholder[options.field];
752
- }
753
- function getSegments(date, validSegments, formatter, timeZone) {
754
- const dateValue = date || getTodayPlaceholderDate(timeZone);
755
- const segments = formatter.formatToParts(dateValue.toDate(timeZone));
756
- return segments.map((segment) => {
757
- let isEditable = isSegmentEditable(segment.type);
758
- if (segment.type === "era")
759
- isEditable = false;
760
- let isPlaceholder = isSegmentEditable(segment.type) && !validSegments[segment.type];
761
- let placeholder = isSegmentEditable(segment.type) ? getPlaceholder({ field: segment.type }) : null;
762
- return {
763
- type: segment.type,
764
- text: isPlaceholder ? placeholder : segment.value,
765
- ...getSegmentLimits(dateValue, segment.type, formatter.resolvedOptions()),
766
- isPlaceholder: !!isPlaceholder,
767
- placeholder,
768
- isEditable: !!isEditable
769
- };
770
- });
688
+ return acc;
689
+ }, {});
771
690
  }
772
691
  // Annotate the CommonJS export names for ESM import in node:
773
692
  0 && (module.exports = {
774
- SEGMENT_PAGE_STEP,
775
- addSegment,
776
693
  alignCenter,
777
694
  alignDate,
778
695
  alignEnd,
@@ -780,15 +697,18 @@ function getSegments(date, validSegments, formatter, timeZone) {
780
697
  alignStartDate,
781
698
  constrainStart,
782
699
  constrainValue,
783
- createPlaceholderDate,
700
+ formatDate,
784
701
  formatRange,
785
702
  formatSelectedDate,
786
703
  formatVisibleRange,
787
704
  getAdjustedDateFn,
788
- getAllSegments,
789
- getDatesInWeek,
705
+ getDayFormatter,
706
+ getDaysInWeek,
707
+ getDecadeRange,
790
708
  getEndDate,
791
- getMonthDates,
709
+ getMonthDays,
710
+ getMonthFormatter,
711
+ getMonthNames,
792
712
  getNextDay,
793
713
  getNextPage,
794
714
  getNextRow,
@@ -800,13 +720,10 @@ function getSegments(date, validSegments, formatter, timeZone) {
800
720
  getPreviousSection,
801
721
  getSectionEnd,
802
722
  getSectionStart,
803
- getSegmentLimits,
804
- getSegmentPageStep,
805
- getSegments,
806
723
  getTodayDate,
807
- getTodayPlaceholderDate,
808
724
  getUnitDuration,
809
- getWeekDates,
725
+ getWeekDays,
726
+ getWeekdayFormats,
810
727
  getYearsRange,
811
728
  isDateDisabled,
812
729
  isDateEqual,
@@ -815,11 +732,10 @@ function getSegments(date, validSegments, formatter, timeZone) {
815
732
  isDateUnavailable,
816
733
  isNextVisibleRangeInvalid,
817
734
  isPreviousVisibleRangeInvalid,
818
- isSegmentEditable,
819
735
  isTodayDate,
736
+ parseDateString,
820
737
  setCalendar,
821
738
  setDate,
822
739
  setMonth,
823
- setSegment,
824
740
  setYear
825
741
  });