@aurodesignsystem-dev/auro-formkit 0.0.0-pr1509.0 → 0.0.0-pr1510.0

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 (50) hide show
  1. package/components/checkbox/demo/customize.min.js +1 -1
  2. package/components/checkbox/demo/getting-started.min.js +1 -1
  3. package/components/checkbox/demo/index.min.js +1 -1
  4. package/components/checkbox/dist/index.js +1 -1
  5. package/components/checkbox/dist/registered.js +1 -1
  6. package/components/combobox/demo/customize.min.js +4 -19
  7. package/components/combobox/demo/getting-started.min.js +4 -19
  8. package/components/combobox/demo/index.min.js +4 -19
  9. package/components/combobox/dist/index.js +4 -19
  10. package/components/combobox/dist/registered.js +4 -19
  11. package/components/counter/demo/customize.min.js +2 -2
  12. package/components/counter/demo/index.min.js +2 -2
  13. package/components/counter/dist/index.js +2 -2
  14. package/components/counter/dist/registered.js +2 -2
  15. package/components/datepicker/demo/accessibility.md +2 -1
  16. package/components/datepicker/demo/api.md +63 -62
  17. package/components/datepicker/demo/customize.md +12 -1
  18. package/components/datepicker/demo/customize.min.js +456 -183
  19. package/components/datepicker/demo/index.min.js +456 -183
  20. package/components/datepicker/dist/index.js +456 -183
  21. package/components/datepicker/dist/registered.js +456 -183
  22. package/components/datepicker/dist/src/auro-calendar-cell.d.ts +14 -3
  23. package/components/datepicker/dist/src/auro-calendar.d.ts +87 -5
  24. package/components/datepicker/dist/src/auro-datepicker.d.ts +73 -3
  25. package/components/dropdown/demo/customize.min.js +1 -1
  26. package/components/dropdown/demo/getting-started.min.js +1 -1
  27. package/components/dropdown/demo/index.min.js +1 -1
  28. package/components/dropdown/dist/index.js +1 -1
  29. package/components/dropdown/dist/registered.js +1 -1
  30. package/components/form/demo/customize.min.js +474 -231
  31. package/components/form/demo/getting-started.min.js +474 -231
  32. package/components/form/demo/index.min.js +474 -231
  33. package/components/form/demo/registerDemoDeps.min.js +474 -231
  34. package/components/input/demo/customize.min.js +2 -17
  35. package/components/input/demo/getting-started.min.js +2 -17
  36. package/components/input/demo/index.min.js +2 -17
  37. package/components/input/dist/index.js +2 -17
  38. package/components/input/dist/registered.js +2 -17
  39. package/components/radio/demo/customize.min.js +1 -1
  40. package/components/radio/demo/getting-started.min.js +1 -1
  41. package/components/radio/demo/index.min.js +1 -1
  42. package/components/radio/dist/index.js +1 -1
  43. package/components/radio/dist/registered.js +1 -1
  44. package/components/select/demo/customize.min.js +2 -2
  45. package/components/select/demo/getting-started.min.js +2 -2
  46. package/components/select/demo/index.min.js +2 -2
  47. package/components/select/dist/index.js +2 -2
  48. package/components/select/dist/registered.js +2 -2
  49. package/custom-elements.json +1868 -1696
  50. package/package.json +2 -1
@@ -1373,7 +1373,7 @@ function normalizeDates$1(context, ...dates) {
1373
1373
  * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))
1374
1374
  * //=> Tue Sep 02 2014 00:00:00
1375
1375
  */
1376
- function startOfDay$2(date, options) {
1376
+ function startOfDay$1(date, options) {
1377
1377
  const _date = toDate$1(date, options?.in);
1378
1378
  _date.setHours(0, 0, 0, 0);
1379
1379
  return _date;
@@ -1421,8 +1421,8 @@ function differenceInCalendarDays$1(laterDate, earlierDate, options) {
1421
1421
  earlierDate,
1422
1422
  );
1423
1423
 
1424
- const laterStartOfDay = startOfDay$2(laterDate_);
1425
- const earlierStartOfDay = startOfDay$2(earlierDate_);
1424
+ const laterStartOfDay = startOfDay$1(laterDate_);
1425
+ const earlierStartOfDay = startOfDay$1(earlierDate_);
1426
1426
 
1427
1427
  const laterTimestamp =
1428
1428
  +laterStartOfDay - getTimezoneOffsetInMilliseconds$1(laterStartOfDay);
@@ -10904,8 +10904,8 @@ class RangeDatepickerCell extends i$1 {
10904
10904
  const parsedDateFrom = parseInt(dateFrom, 10);
10905
10905
  const parsedDateTo = parseInt(dateTo, 10);
10906
10906
  if (day) {
10907
- if (getTime(startOfDay$2(parsedDateTo * 1000)) / 1000 === day.date ||
10908
- getTime(startOfDay$2(parsedDateFrom * 1000)) / 1000 === day.date) {
10907
+ if (getTime(startOfDay$1(parsedDateTo * 1000)) / 1000 === day.date ||
10908
+ getTime(startOfDay$1(parsedDateFrom * 1000)) / 1000 === day.date) {
10909
10909
  this.selected = true;
10910
10910
  }
10911
10911
  if (((hoveredDate === day.date || day.date < hoveredDate) &&
@@ -11093,7 +11093,7 @@ class RangeDatepickerCalendar extends i$1 {
11093
11093
  this.dayNamesOfTheWeek = [];
11094
11094
  this.daysOfMonth = [];
11095
11095
  this._locale = null;
11096
- this.currentDate = parseInt(format$1(startOfDay$2(Date.now()), 't'), 10);
11096
+ this.currentDate = parseInt(format$1(startOfDay$1(Date.now()), 't'), 10);
11097
11097
  this.localeChanged();
11098
11098
  this.yearAndMonthChanged(this.year, this.month);
11099
11099
  }
@@ -11567,7 +11567,7 @@ __decorate([n$4({ type: Array })], RangeDatepickerCalendar.prototype, "dayNamesO
11567
11567
  __decorate([n$4({ type: Array })], RangeDatepickerCalendar.prototype, "daysOfMonth", void 0);
11568
11568
  AuroLibraryRuntimeUtils$5.prototype.registerComponent('wc-range-datepicker-calendar', RangeDatepickerCalendar);
11569
11569
 
11570
- var styleCss$5 = i$3`.body-default{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-emphasized-font-size, 1rem);line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-font-size, 0.875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-font-size, 0.75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-font-size, 0.625rem);line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);line-height:var(--wcss-body-2xs-emphasized-line-height, 0.875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-2xl-weight, 300);line-height:var(--wcss-display-2xl-line-height, 1.3);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));letter-spacing:var(--wcss-display-2xl-letter-spacing, 0)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xl-weight, 300);line-height:var(--wcss-display-xl-line-height, 1.3);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));letter-spacing:var(--wcss-display-xl-letter-spacing, 0)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-lg-weight, 300);line-height:var(--wcss-display-lg-line-height, 1.3);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));letter-spacing:var(--wcss-display-lg-letter-spacing, 0)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-md-weight, 300);line-height:var(--wcss-display-md-line-height, 1.3);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));letter-spacing:var(--wcss-display-md-letter-spacing, 0)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-sm-weight, 300);line-height:var(--wcss-display-sm-line-height, 1.3);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));letter-spacing:var(--wcss-display-sm-letter-spacing, 0)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xs-weight, 300);line-height:var(--wcss-display-xs-line-height, 1.3);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));letter-spacing:var(--wcss-display-xs-letter-spacing, 0)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xl-weight, 300);line-height:var(--wcss-heading-xl-line-height, 1.3);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));letter-spacing:var(--wcss-heading-xl-letter-spacing, 0)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-lg-weight, 300);line-height:var(--wcss-heading-lg-line-height, 1.3);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));letter-spacing:var(--wcss-heading-lg-letter-spacing, 0)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-md-weight, 300);line-height:var(--wcss-heading-md-line-height, 1.3);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));letter-spacing:var(--wcss-heading-md-letter-spacing, 0)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-sm-weight, 300);line-height:var(--wcss-heading-sm-line-height, 1.3);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));letter-spacing:var(--wcss-heading-sm-letter-spacing, 0)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xs-weight, 300);line-height:var(--wcss-heading-xs-line-height, 1.3);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));letter-spacing:var(--wcss-heading-xs-letter-spacing, 0)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-2xs-weight, 300);line-height:var(--wcss-heading-2xs-line-height, 1.3);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xl-weight, 450);line-height:var(--wcss-accent-2xl-line-height, 1);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xl-weight, 450);line-height:var(--wcss-accent-xl-line-height, 1.3);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-lg-weight, 450);line-height:var(--wcss-accent-lg-line-height, 1.3);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-md-weight, 500);line-height:var(--wcss-accent-md-line-height, 1.3);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);text-transform:uppercase}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-sm-weight, 500);line-height:var(--wcss-accent-sm-line-height, 1.3);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xs-weight, 500);line-height:var(--wcss-accent-xs-line-height, 1.3);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);text-transform:uppercase}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xs-weight, 450);line-height:var(--wcss-accent-2xs-line-height, 1.3);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);text-transform:uppercase}@media screen and (max-width: 576px){:host{display:flex;justify-content:center}}.day{position:relative;width:48px;height:56px;padding:0;border-width:2px;border-style:solid;border-radius:10px;cursor:pointer;user-select:none}.day:focus-visible{outline:none;background-color:unset}.day.activeCell{outline-width:2px;outline-style:solid;outline-offset:-4px}.day.disabled{cursor:default !important;pointer-events:none}.day.blackout{cursor:pointer}.day.reference:after{position:absolute;top:-2px;left:-2px;display:block;width:calc(100% + 2px);height:calc(100% + 2px);box-sizing:content-box;border-radius:10px;border-style:solid;border-width:1px;content:""}.day.inRange::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:""}.day.rangeDepartDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:10px 0 0 10px;overflow:hidden}.day.rangeReturnDate::before,.day.lastHoveredDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:0 10px 10px 0;overflow:hidden}.day.firstDayOfMonth::before{border-radius:10px 0 0 10px;overflow:hidden}.day.lastDayOfMonth::before{border-radius:0 10px 10px 0;overflow:hidden}.buttonWrapper{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}.dateSlot{display:block}::slotted([slot^=date_]){width:100%;white-space:nowrap}::slotted(auro-icon){max-height:24px;max-width:24px}:host([renderForDateSlot]) .buttonWrapper{position:relative;width:100%;height:100%}:host([renderForDateSlot]) .currentDayMarker{position:relative}`;
11570
+ var styleCss$5 = i$3`.body-default{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-emphasized-font-size, 1rem);line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-font-size, 0.875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-font-size, 0.75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-font-size, 0.625rem);line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);line-height:var(--wcss-body-2xs-emphasized-line-height, 0.875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-2xl-weight, 300);line-height:var(--wcss-display-2xl-line-height, 1.3);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));letter-spacing:var(--wcss-display-2xl-letter-spacing, 0)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xl-weight, 300);line-height:var(--wcss-display-xl-line-height, 1.3);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));letter-spacing:var(--wcss-display-xl-letter-spacing, 0)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-lg-weight, 300);line-height:var(--wcss-display-lg-line-height, 1.3);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));letter-spacing:var(--wcss-display-lg-letter-spacing, 0)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-md-weight, 300);line-height:var(--wcss-display-md-line-height, 1.3);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));letter-spacing:var(--wcss-display-md-letter-spacing, 0)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-sm-weight, 300);line-height:var(--wcss-display-sm-line-height, 1.3);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));letter-spacing:var(--wcss-display-sm-letter-spacing, 0)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xs-weight, 300);line-height:var(--wcss-display-xs-line-height, 1.3);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));letter-spacing:var(--wcss-display-xs-letter-spacing, 0)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xl-weight, 300);line-height:var(--wcss-heading-xl-line-height, 1.3);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));letter-spacing:var(--wcss-heading-xl-letter-spacing, 0)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-lg-weight, 300);line-height:var(--wcss-heading-lg-line-height, 1.3);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));letter-spacing:var(--wcss-heading-lg-letter-spacing, 0)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-md-weight, 300);line-height:var(--wcss-heading-md-line-height, 1.3);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));letter-spacing:var(--wcss-heading-md-letter-spacing, 0)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-sm-weight, 300);line-height:var(--wcss-heading-sm-line-height, 1.3);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));letter-spacing:var(--wcss-heading-sm-letter-spacing, 0)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xs-weight, 300);line-height:var(--wcss-heading-xs-line-height, 1.3);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));letter-spacing:var(--wcss-heading-xs-letter-spacing, 0)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-2xs-weight, 300);line-height:var(--wcss-heading-2xs-line-height, 1.3);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xl-weight, 450);line-height:var(--wcss-accent-2xl-line-height, 1);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xl-weight, 450);line-height:var(--wcss-accent-xl-line-height, 1.3);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-lg-weight, 450);line-height:var(--wcss-accent-lg-line-height, 1.3);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-md-weight, 500);line-height:var(--wcss-accent-md-line-height, 1.3);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);text-transform:uppercase}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-sm-weight, 500);line-height:var(--wcss-accent-sm-line-height, 1.3);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xs-weight, 500);line-height:var(--wcss-accent-xs-line-height, 1.3);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);text-transform:uppercase}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xs-weight, 450);line-height:var(--wcss-accent-2xs-line-height, 1.3);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);text-transform:uppercase}@media screen and (max-width: 576px){:host{display:flex;justify-content:center}}.day{position:relative;width:48px;height:56px;padding:0;border-width:2px;border-style:solid;border-radius:10px;cursor:pointer;user-select:none}.day:focus-visible{outline:none;background-color:unset}.day.activeCell{outline-width:2px;outline-style:solid;outline-offset:-4px}.day.disabled{cursor:default !important;pointer-events:none}.day.blackout{cursor:pointer}.day.reference:after{position:absolute;top:-2px;left:-2px;display:block;width:calc(100% + 2px);height:calc(100% + 2px);box-sizing:content-box;border-radius:10px;border-style:solid;border-width:1px;content:""}.day.inRange::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:""}.day.rangeDepartDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:10px 0 0 10px;overflow:hidden}.day.rangeReturnDate::before,.day.lastHoveredDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:0 10px 10px 0;overflow:hidden}.day.rangeDepartDate.lastHoveredDate::before{border-radius:10px}.day.firstDayOfMonth::before{border-radius:10px 0 0 10px;overflow:hidden}.day.lastDayOfMonth::before{border-radius:0 10px 10px 0;overflow:hidden}.buttonWrapper{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}.dateSlot{display:block}::slotted([slot^=date_]){width:100%;white-space:nowrap}::slotted(auro-icon){max-height:24px;max-width:24px}:host([renderForDateSlot]) .buttonWrapper{position:relative;width:100%;height:100%}:host([renderForDateSlot]) .currentDayMarker{position:relative}`;
11571
11571
 
11572
11572
  var colorCss$5 = i$3`:host ::slotted([slot^=date_]){color:var(--ds-auro-calendar-cell-price-text-color)}:host ::slotted([slot^=date_][highlight]){--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-status-success, #447a1f)}:host .day{border-color:var(--ds-auro-calendar-cell-border-color);background-color:var(--ds-auro-calendar-cell-container-color);color:var(--ds-auro-calendar-cell-text-color)}:host .day.activeCell:not(.selected){--ds-auro-calendar-cell-container-color: var(--ds-auro-calendar-cell-in-range-color);border-color:var(--ds-advanced-color-state-selected);outline-color:var(--ds-auro-calendar-cell-container-color)}:host .day.selected{--ds-auro-calendar-cell-container-color: var(--ds-advanced-color-state-selected, #01426a);--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-inverse, #ffffff);--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host .day.selected ::slotted([slot^=date_][highlight]){--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-status-success-subtle, #d6eac7)}:host .day.selected:hover{--ds-auro-calendar-cell-container-color: var(--ds-advanced-color-state-selected-hover, #00274a);--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host .day.reference:after{border-color:var(--ds-basic-color-border-default, #959595);box-shadow:inset 0 0 0 2px var(--ds-basic-color-surface-default, #ffffff)}:host .day.reference:hover::after{box-shadow:inset 0 0 0 2px var(--ds-advanced-color-shared-background-muted, #f7f7f7)}:host .day:hover{--ds-auro-calendar-cell-container-color: var(--ds-advanced-color-state-background-hover, #f2f2f2);--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-default, #2a2a2a)}:host .day.disabled{--ds-auro-calendar-cell-container-color: transparent;--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0);--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0)}:host .day.blackout{--ds-auro-calendar-cell-container-color: transparent;--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0);--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0)}:host .day.inRange:before,:host .day.rangeDepartDate:before,:host .day.rangeReturnDate:before,:host .day.lastHoveredDate:before{background-color:var(--ds-auro-calendar-cell-in-range-color)}:host .day.sameDateTrip:before{--ds-auro-calendar-cell-in-range-color: transparent}`;
11573
11573
 
@@ -11594,12 +11594,6 @@ var popoverVersion = '6.0.1';
11594
11594
 
11595
11595
  /* eslint-disable curly, max-lines, no-underscore-dangle, no-magic-numbers, no-underscore-dangle, max-params, no-extra-parens, arrow-parens, max-lines, line-comment-position, no-inline-comments, lit/binding-positions, lit/no-invalid-html */
11596
11596
 
11597
- const startOfDay$1 = (ms) => {
11598
- const date = new Date(ms);
11599
- date.setHours(0, 0, 0, 0);
11600
- return date.getTime();
11601
- };
11602
-
11603
11597
  class AuroCalendarCell extends i$1 {
11604
11598
  constructor() {
11605
11599
  super();
@@ -11646,6 +11640,14 @@ class AuroCalendarCell extends i$1 {
11646
11640
  type: Boolean,
11647
11641
  reflect: true
11648
11642
  },
11643
+ /**
11644
+ * @deprecated Propagated from the legacy `auro-calendar.disabledDays`
11645
+ * Unix-timestamp array. The cell honors it for backward compatibility
11646
+ * (see the divergence-check fallback inside `isBlackout`), but
11647
+ * consumers should migrate to `auro-datepicker.blackoutDates`
11648
+ * (YYYY-MM-DD ISO strings). The calendar emits a one-time
11649
+ * deprecation warning the first time a non-empty value is observed.
11650
+ */
11649
11651
  disabledDays: { type: Array },
11650
11652
  isCurrentDate: { type: Boolean },
11651
11653
  locale: { type: String },
@@ -11691,8 +11693,8 @@ class AuroCalendarCell extends i$1 {
11691
11693
  const parsedDateTo = parseInt(dateTo, 10);
11692
11694
 
11693
11695
  if (day) {
11694
- const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
11695
- const returnTimestamp = startOfDay$1(parsedDateTo * 1000) / 1000;
11696
+ const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
11697
+ const returnTimestamp = new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000;
11696
11698
 
11697
11699
  if (day.date === departTimestamp || day.date === returnTimestamp) {
11698
11700
  this.selected = true;
@@ -11776,22 +11778,42 @@ class AuroCalendarCell extends i$1 {
11776
11778
  return false;
11777
11779
  }
11778
11780
 
11779
- // Check against disabledDays timestamps (legacy path)
11781
+ // Delegate to the calendar's memoized blackout Set for O(1) lookup
11782
+ // (instead of rescanning disabledDays + blackoutDates per render). The
11783
+ // Set is rebuilt only when either source array reference changes — see
11784
+ // auro-calendar.js#_getBlackoutSet.
11785
+ if (this.calendar && typeof this.calendar._getBlackoutSet === 'function') {
11786
+ if (this.calendar._getBlackoutSet().has(this.day.date)) {
11787
+ return true;
11788
+ }
11789
+ // If the cell's local disabledDays diverged from the calendar's (a
11790
+ // consumer or test mutated cell.disabledDays directly), the Set does
11791
+ // not reflect that addition — fall through to the per-cell scan only
11792
+ // when the reference no longer matches. Production data flow keeps
11793
+ // these identical, so this branch stays cold.
11794
+ if (this.disabledDays && this.disabledDays !== this.calendar.disabledDays && this.disabledDays.length > 0) {
11795
+ if (this.disabledDays.findIndex((dd) => parseInt(dd, 10) === this.day.date) !== -1) {
11796
+ return true;
11797
+ }
11798
+ }
11799
+ return false;
11800
+ }
11801
+
11802
+ // Pre-firstUpdated fallback — the cell may render once before the
11803
+ // ancestor calendar is wired up. Uses the legacy O(N) scan so the
11804
+ // result stays correct, just slower for the very first render.
11780
11805
  if (Array.isArray(this.disabledDays) && this.disabledDays.length > 0 &&
11781
11806
  (this.disabledDays.findIndex(dd => parseInt(dd, 10) === this.day.date) !== -1)) {
11782
11807
  return true;
11783
11808
  }
11784
11809
 
11785
- // Check against blackoutDates (ISO format YYYY-MM-DD) on the datepicker
11786
11810
  const blackoutDates = this.datepicker?.blackoutDates;
11787
-
11788
11811
  if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
11789
11812
  const date = new Date(this.day.date * 1000);
11790
11813
  const yyyy = date.getFullYear();
11791
11814
  const mm = String(date.getMonth() + 1).padStart(2, '0');
11792
11815
  const dd = String(date.getDate()).padStart(2, '0');
11793
- const cellDate = `${yyyy}-${mm}-${dd}`;
11794
- if (blackoutDates.includes(cellDate)) {
11816
+ if (blackoutDates.includes(`${yyyy}-${mm}-${dd}`)) {
11795
11817
  return true;
11796
11818
  }
11797
11819
  }
@@ -11902,12 +11924,12 @@ class AuroCalendarCell extends i$1 {
11902
11924
  const parsedDateFrom = Number.parseInt(this.dateFrom, 10);
11903
11925
  if (!Number.isFinite(parsedDateFrom)) return null;
11904
11926
 
11905
- const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
11927
+ const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
11906
11928
  const dayDate = this.day.date;
11907
11929
 
11908
11930
  const parsedDateTo = Number.parseInt(this.dateTo, 10);
11909
11931
  const hasDateTo = Number.isFinite(parsedDateTo);
11910
- const returnTimestamp = hasDateTo ? startOfDay$1(parsedDateTo * 1000) / 1000 : null;
11932
+ const returnTimestamp = hasDateTo ? new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000 : null;
11911
11933
 
11912
11934
  if (dayDate === departTimestamp) return this.datepicker.rangeLabelStart || 'range start';
11913
11935
 
@@ -11917,7 +11939,9 @@ class AuroCalendarCell extends i$1 {
11917
11939
 
11918
11940
  if (hasDateTo && dayDate > departTimestamp && dayDate < returnTimestamp) return this.datepicker.rangeLabelInRange || 'in range';
11919
11941
 
11920
- // After start date, no end date yet, or after end date
11942
+ if (!hasDateTo && dayDate > departTimestamp) return this.datepicker.rangeLabelEndPreview || 'previewing range end';
11943
+
11944
+ // After end date when both dateFrom and dateTo are set.
11921
11945
  return this.datepicker.rangeLabelAfterRange || 'after range';
11922
11946
  }
11923
11947
 
@@ -11930,7 +11954,7 @@ class AuroCalendarCell extends i$1 {
11930
11954
  */
11931
11955
  isDepartDate(day, dateFrom) {
11932
11956
  const parsedDateFrom = parseInt(dateFrom, 10);
11933
- const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
11957
+ const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
11934
11958
 
11935
11959
  return this.selected && day.date === departTimestamp;
11936
11960
  }
@@ -11945,7 +11969,7 @@ class AuroCalendarCell extends i$1 {
11945
11969
  */
11946
11970
  isReturnDate(day, dateFrom, dateTo) {
11947
11971
  const parsedDateTo = parseInt(dateTo, 10);
11948
- const returnTimestamp = startOfDay$1(parsedDateTo * 1000) / 1000;
11972
+ const returnTimestamp = new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000;
11949
11973
 
11950
11974
  return this.selected && day.date === returnTimestamp && dateFrom;
11951
11975
  }
@@ -12109,6 +12133,7 @@ class AuroCalendarCell extends i$1 {
12109
12133
  setTimeout(() => this.firstUpdated(), 0);
12110
12134
  return;
12111
12135
  }
12136
+ this.calendar = calendar;
12112
12137
  this.datepicker = calendar.datepicker;
12113
12138
  this._slotContentHandler = () => {
12114
12139
  this.handleSlotContent();
@@ -12166,12 +12191,13 @@ class AuroCalendarCell extends i$1 {
12166
12191
  this._cachedButton = this.shadowRoot.querySelector('button.day');
12167
12192
  });
12168
12193
 
12169
- // Update host-level aria attributes for ariaActiveDescendantElement.
12194
+ // Keep the host's gridcell aria attributes in sync with the day data.
12170
12195
  this.updateHostAria();
12171
12196
  }
12172
12197
 
12173
12198
  // Update host aria when selection changes (aria-selected, range labels)
12174
- if (properties.has('dateFrom') || properties.has('dateTo') || properties.has('selected')) {
12199
+ // or when isCurrentDate flips (aria-current).
12200
+ if (properties.has('dateFrom') || properties.has('dateTo') || properties.has('selected') || properties.has('isCurrentDate')) {
12175
12201
  this.updateHostAria();
12176
12202
  }
12177
12203
 
@@ -12182,8 +12208,8 @@ class AuroCalendarCell extends i$1 {
12182
12208
  }
12183
12209
 
12184
12210
  /**
12185
- * Updates ARIA attributes on the host element so that
12186
- * ariaActiveDescendantElement can expose cell info to the SR.
12211
+ * Sets host-level ARIA so each cell exposes its date, selection state,
12212
+ * and blackout status to assistive tech browsing the month grid.
12187
12213
  * @private
12188
12214
  * @returns {void}
12189
12215
  */
@@ -12194,14 +12220,20 @@ class AuroCalendarCell extends i$1 {
12194
12220
  if (outOfRange) {
12195
12221
  this.removeAttribute('role');
12196
12222
  this.removeAttribute('aria-label');
12223
+ this.removeAttribute('aria-current');
12197
12224
  return;
12198
12225
  }
12199
12226
 
12200
- // The host acts as the gridcell for ariaActiveDescendantElement.
12201
12227
  this.setAttribute('role', 'gridcell');
12202
12228
  this.setAttribute('aria-label', this.getAriaLabel());
12203
12229
  this.setAttribute('aria-selected', this.selected ? 'true' : 'false');
12204
12230
 
12231
+ if (this.isCurrentDate) {
12232
+ this.setAttribute('aria-current', 'date');
12233
+ } else {
12234
+ this.removeAttribute('aria-current');
12235
+ }
12236
+
12205
12237
  if (this.isBlackout()) {
12206
12238
  this.setAttribute('aria-disabled', 'true');
12207
12239
  } else {
@@ -12216,7 +12248,7 @@ class AuroCalendarCell extends i$1 {
12216
12248
  * @returns {void}
12217
12249
  */
12218
12250
  focusButton() {
12219
- const button = this._cachedButton || this.shadowRoot.querySelector('button:not([aria-hidden])');
12251
+ const button = this._cachedButton || this.shadowRoot.querySelector('button:not([disabled])');
12220
12252
  if (button) {
12221
12253
  button.focus({ focusVisible: true });
12222
12254
  }
@@ -12224,7 +12256,9 @@ class AuroCalendarCell extends i$1 {
12224
12256
 
12225
12257
  /**
12226
12258
  * Imperatively marks this cell as active without triggering a Lit re-render.
12227
- * Note: buttons stay tabindex="-1" because the grid uses aria-activedescendant.
12259
+ * Buttons stay tabindex="-1" because DOM focus stays on the grid wrapper
12260
+ * arrow keys move the active cell imperatively and the live region carries
12261
+ * the SR announcement.
12228
12262
  * @returns {void}
12229
12263
  */
12230
12264
  setActive() {
@@ -12266,10 +12300,13 @@ class AuroCalendarCell extends i$1 {
12266
12300
  if (!btn || !this.day) return;
12267
12301
 
12268
12302
  const dayDate = this.day.date;
12269
- const departTimestamp = startOfDay$1(dateFrom * 1000) / 1000;
12303
+ const departTimestamp = new Date(dateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
12270
12304
  const isInRange = dayDate > departTimestamp && dayDate < hoveredDate;
12271
- const isLastHovered = dayDate === hoveredDate && hoveredDate > departTimestamp;
12272
- const isDepartWithPreview = dayDate === departTimestamp && hoveredDate > departTimestamp;
12305
+ // `>=` so hovering the depart cell itself (a same-day round-trip
12306
+ // preview) still surfaces a visual cue: the depart cell receives both
12307
+ // rangeDepartDate and lastHoveredDate.
12308
+ const isLastHovered = dayDate === hoveredDate && hoveredDate >= departTimestamp;
12309
+ const isDepartWithPreview = dayDate === departTimestamp && hoveredDate >= departTimestamp;
12273
12310
 
12274
12311
  btn.classList.toggle('inRange', isInRange);
12275
12312
  btn.classList.toggle('lastHoveredDate', isLastHovered);
@@ -12327,7 +12364,6 @@ class AuroCalendarCell extends i$1 {
12327
12364
  @focus="${outOfRange ? undefined : this.handleFocus}"
12328
12365
  class="${e$4(buttonClasses)}"
12329
12366
  ?disabled="${outOfRange}"
12330
- aria-hidden="${outOfRange ? 'true' : A$4}"
12331
12367
  tabindex="-1">
12332
12368
  <div class="buttonWrapper" aria-hidden="true">
12333
12369
  <div class="currentDayMarker">${this.day?.title || A$4}</div>
@@ -13439,7 +13475,7 @@ class AuroBibtemplate extends i$1 {
13439
13475
  }
13440
13476
  }
13441
13477
 
13442
- var formkitVersion$2 = '202606232113';
13478
+ var formkitVersion$2 = '202606251933';
13443
13479
 
13444
13480
  let l$1 = class l{generateElementName(t,e){let o=t;return o+="-",o+=e.replace(/[.]/g,"_"),o}generateTag(o,s,a){const r=this.generateElementName(o,s),i=i$5`${s$5(r)}`;return customElements.get(r)||customElements.define(r,class extends a{}),i}};let d$1 = class d{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}getSlotText(t,e){const o=t.shadowRoot?.querySelector(`slot[name="${e}"]`),s=(o?.assignedNodes({flatten:true})||[]).map(t=>t.textContent?.trim()).join(" ").trim();return s||null}};let h$4 = class h{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}};var c$3=i$3`:host{color:var(--ds-auro-loader-color)}:host>span{background-color:var(--ds-auro-loader-background-color);border-color:var(--ds-auro-loader-border-color)}:host([onlight]),:host([appearance=brand]){--ds-auro-loader-color: var(--ds-basic-color-brand-primary, #01426a)}:host([ondark]),:host([appearance=inverse]){--ds-auro-loader-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host([orbit])>span{--ds-auro-loader-background-color: transparent}:host([orbit])>span:nth-child(1){--ds-auro-loader-border-color: currentcolor;opacity:.25}:host([orbit])>span:nth-child(2){--ds-auro-loader-border-color: currentcolor;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent}
13445
13481
  `,u$6=i$3`.body-default{font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, .875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs{font-size:var(--wcss-body-xs-font-size, .75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:var(--wcss-body-2xs-font-size, .625rem);font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0);line-height:var(--wcss-body-2xs-line-height, .875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));font-weight:var(--wcss-display-2xl-weight, 300);letter-spacing:var(--wcss-display-2xl-letter-spacing, 0);line-height:var(--wcss-display-2xl-line-height, 1.3)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));font-weight:var(--wcss-display-xl-weight, 300);letter-spacing:var(--wcss-display-xl-letter-spacing, 0);line-height:var(--wcss-display-xl-line-height, 1.3)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));font-weight:var(--wcss-display-lg-weight, 300);letter-spacing:var(--wcss-display-lg-letter-spacing, 0);line-height:var(--wcss-display-lg-line-height, 1.3)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));font-weight:var(--wcss-display-md-weight, 300);letter-spacing:var(--wcss-display-md-letter-spacing, 0);line-height:var(--wcss-display-md-line-height, 1.3)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));font-weight:var(--wcss-display-sm-weight, 300);letter-spacing:var(--wcss-display-sm-letter-spacing, 0);line-height:var(--wcss-display-sm-line-height, 1.3)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));font-weight:var(--wcss-display-xs-weight, 300);letter-spacing:var(--wcss-display-xs-letter-spacing, 0);line-height:var(--wcss-display-xs-line-height, 1.3)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));font-weight:var(--wcss-heading-xl-weight, 300);letter-spacing:var(--wcss-heading-xl-letter-spacing, 0);line-height:var(--wcss-heading-xl-line-height, 1.3)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));font-weight:var(--wcss-heading-lg-weight, 300);letter-spacing:var(--wcss-heading-lg-letter-spacing, 0);line-height:var(--wcss-heading-lg-line-height, 1.3)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));font-weight:var(--wcss-heading-md-weight, 300);letter-spacing:var(--wcss-heading-md-letter-spacing, 0);line-height:var(--wcss-heading-md-line-height, 1.3)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));font-weight:var(--wcss-heading-sm-weight, 300);letter-spacing:var(--wcss-heading-sm-letter-spacing, 0);line-height:var(--wcss-heading-sm-line-height, 1.3)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));font-weight:var(--wcss-heading-xs-weight, 450);letter-spacing:var(--wcss-heading-xs-letter-spacing, 0);line-height:var(--wcss-heading-xs-line-height, 1.3)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));font-weight:var(--wcss-heading-2xs-weight, 450);letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0);line-height:var(--wcss-heading-2xs-line-height, 1.3)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));font-weight:var(--wcss-accent-2xl-weight, 450);letter-spacing:var(--wcss-accent-2xl-letter-spacing, .05em);line-height:var(--wcss-accent-2xl-line-height, 1)}.accent-2xl,.accent-xl{text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));font-weight:var(--wcss-accent-xl-weight, 450);letter-spacing:var(--wcss-accent-xl-letter-spacing, .05em);line-height:var(--wcss-accent-xl-line-height, 1.3)}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));font-weight:var(--wcss-accent-lg-weight, 450);letter-spacing:var(--wcss-accent-lg-letter-spacing, .05em);line-height:var(--wcss-accent-lg-line-height, 1.3)}.accent-lg,.accent-md{text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));font-weight:var(--wcss-accent-md-weight, 500);letter-spacing:var(--wcss-accent-md-letter-spacing, .05em);line-height:var(--wcss-accent-md-line-height, 1.3)}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));font-weight:var(--wcss-accent-sm-weight, 500);letter-spacing:var(--wcss-accent-sm-letter-spacing, .05em);line-height:var(--wcss-accent-sm-line-height, 1.3)}.accent-sm,.accent-xs{text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));font-weight:var(--wcss-accent-xs-weight, 500);letter-spacing:var(--wcss-accent-xs-letter-spacing, .1em);line-height:var(--wcss-accent-xs-line-height, 1.3)}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xs-font-size, clamp(.875rem, 1.1666666667vw, .875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, .1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}:focus:not(:focus-visible){outline:3px solid transparent}:host,:host>span{position:relative}:host{width:2rem;height:2rem;display:inline-block;font-size:0}:host>span{position:absolute;display:inline-block;float:none;top:0;left:0;width:2rem;height:2rem;border-radius:100%;border-style:solid;border-width:0;box-sizing:border-box}:host([xs]),:host([xs])>span{width:1.2rem;height:1.2rem}:host([sm]),:host([sm])>span{width:3rem;height:3rem}:host([md]),:host([md])>span{width:5rem;height:5rem}:host([lg]),:host([lg])>span{width:8rem;height:8rem}:host{--margin: .375rem;--margin-xs: .2rem;--margin-sm: .5rem;--margin-md: .75rem;--margin-lg: 1rem}:host([pulse]),:host([pulse])>span{position:relative}:host([pulse]){width:calc(3rem + var(--margin) * 6);height:calc(1rem + var(--margin) * 2)}:host([pulse])>span{width:1rem;height:1rem;margin:var(--margin);animation:pulse 1.5s ease infinite}:host([pulse][xs]){width:calc(1.95rem + var(--margin-xs) * 6);height:calc(.65rem + var(--margin-xs) * 2)}:host([pulse][xs])>span{margin:var(--margin-xs);width:.65rem;height:.65rem}:host([pulse][sm]){width:calc(6rem + var(--margin-sm) * 6);height:calc(2rem + var(--margin-sm) * 2)}:host([pulse][sm])>span{margin:var(--margin-sm);width:2rem;height:2rem}:host([pulse][md]){width:calc(9rem + var(--margin-md) * 6);height:calc(3rem + var(--margin-md) * 2)}:host([pulse][md])>span{margin:var(--margin-md);width:3rem;height:3rem}:host([pulse][lg]){width:calc(15rem + var(--margin-lg) * 6);height:calc(5rem + var(--margin-lg) * 2)}:host([pulse][lg])>span{margin:var(--margin-lg);width:5rem;height:5rem}:host([pulse])>span:nth-child(1){animation-delay:-.4s}:host([pulse])>span:nth-child(2){animation-delay:-.2s}:host([pulse])>span:nth-child(3){animation-delay:0ms}@keyframes pulse{0%,to{opacity:.1;transform:scale(.9)}50%{opacity:1;transform:scale(1.1)}}:host([orbit]),:host([orbit])>span{opacity:1}:host([orbit])>span{border-width:5px}:host([orbit])>span:nth-child(2){animation:orbit 2s linear infinite}:host([orbit][sm])>span{border-width:8px}:host([orbit][md])>span{border-width:13px}:host([orbit][lg])>span{border-width:21px}@keyframes orbit{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:host([ringworm])>svg{animation:rotate 2s linear infinite;height:100%;width:100%;stroke:currentcolor;stroke-width:8}:host([ringworm]) .path{stroke-dashoffset:0;animation:ringworm 1.5s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes ringworm{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}:host([laser]){position:static;width:100%;display:block;height:0;overflow:hidden;font-size:unset}:host([laser])>span{position:fixed;width:100%;height:.25rem;border-radius:0;z-index:100}:host([laser])>span:nth-child(1){border-color:currentcolor;opacity:.25}:host([laser])>span:nth-child(2){border-color:currentcolor;animation:laser 2s linear infinite;opacity:1;width:50%}:host([laser][sm])>span:nth-child(2){width:20%}:host([laser][md])>span:nth-child(2){width:30%}:host([laser][lg])>span:nth-child(2){width:50%;animation-duration:1.5s}:host([laser][xl])>span:nth-child(2){width:80%;animation-duration:1.5s}@keyframes laser{0%{left:-100%}to{left:110%}}:host>.no-animation{display:none}@media (prefers-reduced-motion: reduce){:host{display:flex;align-items:center;justify-content:center}:host>span{opacity:1}:host>.loader{display:none}:host>svg{display:none}:host>.no-animation{display:block}}
@@ -13562,7 +13598,11 @@ class AuroCalendar extends RangeDatepicker {
13562
13598
  this.calendarRangeMonths = null;
13563
13599
 
13564
13600
  /**
13565
- * Legacy array of disabled-date timestamps.
13601
+ * @deprecated Use `auro-datepicker.blackoutDates` (an array of
13602
+ * `YYYY-MM-DD` ISO strings) instead. This legacy array of Unix
13603
+ * timestamps is still honored for backward compatibility but emits a
13604
+ * one-time `console.debug` the first time a non-empty value is observed.
13605
+ * Support will be removed in a future major release.
13566
13606
  * @private
13567
13607
  */
13568
13608
  this.disabledDays = [];
@@ -13819,17 +13859,44 @@ class AuroCalendar extends RangeDatepicker {
13819
13859
  * @returns {void}
13820
13860
  */
13821
13861
  updateActiveCellForVisibleMonth() {
13822
- // Use double-rAF to ensure child month/cell components have fully
13823
- // rendered and cached their button references before we set tabindex.
13824
- requestAnimationFrame(() => {
13825
- requestAnimationFrame(() => {
13826
- const newDate = this.computeActiveDate({ skipDateFrom: true });
13862
+ this._afterMonthRender(() => {
13863
+ const newDate = this.computeActiveDate({ skipDateFrom: true });
13827
13864
 
13828
- if (newDate !== null && newDate !== undefined) {
13829
- this.activeCellDate = newDate;
13830
- this.setActiveCell(this.activeCellDate);
13831
- }
13832
- });
13865
+ if (newDate !== null && newDate !== undefined) {
13866
+ this.activeCellDate = newDate;
13867
+ this.setActiveCell(this.activeCellDate);
13868
+ }
13869
+ });
13870
+ }
13871
+
13872
+ /**
13873
+ * Schedules `callback` two animation frames out, giving the child
13874
+ * `auro-formkit-calendar-month` and `auro-formkit-calendar-cell` elements
13875
+ * a full render-and-paint cycle to settle before the callback reads or
13876
+ * mutates DOM.
13877
+ *
13878
+ * Why two frames, not one:
13879
+ * 1. Lit batches property updates and renders in a microtask, so frame N
13880
+ * schedules the render but the new DOM may not be painted yet.
13881
+ * 2. Cells re-cache `_cachedButton` inside their own `updateComplete.then`,
13882
+ * which also lands a tick later. Reading buttons from frame N+1
13883
+ * (after both renders + cache refresh have flushed) reliably hits the
13884
+ * new month's cells.
13885
+ *
13886
+ * Used by every code path that calls `handleNextMonth`/`handlePrevMonth`
13887
+ * and then needs to inspect the freshly-rendered cells (cross-month
13888
+ * keyboard nav, boundary events, `updateActiveCellForVisibleMonth`).
13889
+ * Do NOT collapse to a single rAF — it intermittently lands before
13890
+ * `_cachedButton` is refreshed, which silently breaks focus restoration
13891
+ * and `setActiveCell` lookups.
13892
+ * @private
13893
+ * @param {() => void} callback - Runs once after the month re-render and
13894
+ * the cells' button caches have refreshed.
13895
+ * @returns {void}
13896
+ */
13897
+ _afterMonthRender(callback) {
13898
+ requestAnimationFrame(() => {
13899
+ requestAnimationFrame(callback);
13833
13900
  });
13834
13901
  }
13835
13902
 
@@ -13947,6 +14014,47 @@ class AuroCalendar extends RangeDatepicker {
13947
14014
  return Array.from(this.shadowRoot.querySelectorAll('auro-formkit-calendar-month'));
13948
14015
  }
13949
14016
 
14017
+ /**
14018
+ * Picks the focusable cell whose date is closest to targetTs. Used as a
14019
+ * fallback after a month-boundary nav when the exact target date isn't
14020
+ * focusable — typically because the month re-render lagged or the date
14021
+ * was filtered out by isOutOfRange. When two cells are equidistant, the
14022
+ * navigation direction breaks the tie so the user moves the way they
14023
+ * pressed (forward → later cell, backward → earlier cell).
14024
+ * @private
14025
+ * @param {Array} cells - Focusable cells from getAllFocusableCells.
14026
+ * @param {Number} targetTs - Desired Unix timestamp (seconds).
14027
+ * @param {'next'|'prev'} direction - Navigation direction.
14028
+ * @returns {Object|null} The nearest cell, or null when cells is empty.
14029
+ */
14030
+ pickNearestCell(cells, targetTs, direction) {
14031
+ if (!cells.length) {
14032
+ return null;
14033
+ }
14034
+ const forward = direction === 'next';
14035
+ let best = null;
14036
+ let bestDelta = Infinity;
14037
+ cells.forEach((cell) => {
14038
+ if (!cell.day) {
14039
+ return;
14040
+ }
14041
+ const distance = Math.abs(cell.day.date - targetTs);
14042
+ if (distance < bestDelta) {
14043
+ best = cell;
14044
+ bestDelta = distance;
14045
+ return;
14046
+ }
14047
+ if (distance === bestDelta && best) {
14048
+ if (forward && cell.day.date > best.day.date) {
14049
+ best = cell;
14050
+ } else if (!forward && cell.day.date < best.day.date) {
14051
+ best = cell;
14052
+ }
14053
+ }
14054
+ });
14055
+ return best;
14056
+ }
14057
+
13950
14058
  /**
13951
14059
  * Gets all focusable cells across all rendered months.
13952
14060
  * @private
@@ -13963,9 +14071,9 @@ class AuroCalendar extends RangeDatepicker {
13963
14071
 
13964
14072
  /**
13965
14073
  * Sets the active cell across all months. Only one cell has tabindex="0" at a time.
13966
- * Uses imperative DOM manipulation — no Lit re-render triggered.
13967
- * Also updates ariaActiveDescendantElement on the grid wrapper so
13968
- * screen readers announce the active cell without moving DOM focus.
14074
+ * Uses imperative DOM manipulation — no Lit re-render triggered. DOM focus
14075
+ * stays on the grid wrapper; the live region (see getOrCreateLiveRegion)
14076
+ * is what announces the active cell to assistive tech.
13969
14077
  * @param {Number} date - Unix timestamp of the cell to activate.
13970
14078
  * @returns {void}
13971
14079
  */
@@ -14046,6 +14154,72 @@ class AuroCalendar extends RangeDatepicker {
14046
14154
  this.clearRangePreview();
14047
14155
  }
14048
14156
 
14157
+ /**
14158
+ * Returns a memoized Set of blackout timestamps (seconds) drawn from both
14159
+ * the legacy `disabledDays` array and the datepicker's ISO `blackoutDates`.
14160
+ * The cache invalidates when either source array's reference changes, which
14161
+ * matches Lit's own reactive identity semantics for array properties.
14162
+ * @private
14163
+ * @returns {Set<Number>}
14164
+ */
14165
+ _getBlackoutSet() {
14166
+ const disabledDays = this.disabledDays || [];
14167
+ const blackoutDates = this.datepicker?.blackoutDates;
14168
+ if (this._blackoutSet
14169
+ && this._cachedBlackoutDisabledDays === disabledDays
14170
+ && this._cachedBlackoutDates === blackoutDates) {
14171
+ return this._blackoutSet;
14172
+ }
14173
+
14174
+ if (disabledDays.length > 0) {
14175
+ this._warnDisabledDaysDeprecated();
14176
+ }
14177
+
14178
+ const set = new Set(disabledDays.map((day) => parseInt(day, 10)));
14179
+
14180
+ // Parse YYYY-MM-DD as local date to avoid UTC shift issues.
14181
+ if (Array.isArray(blackoutDates)) {
14182
+ for (const isoStr of blackoutDates) {
14183
+ const parts = isoStr.split('-');
14184
+ const ts = Math.floor(new Date(parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10)).getTime() / 1000);
14185
+ if (Number.isFinite(ts)) {
14186
+ set.add(ts);
14187
+ }
14188
+ }
14189
+ }
14190
+
14191
+ this._blackoutSet = set;
14192
+ this._cachedBlackoutDisabledDays = disabledDays;
14193
+ this._cachedBlackoutDates = blackoutDates;
14194
+ return set;
14195
+ }
14196
+
14197
+ /**
14198
+ * Per-class flag that gates the `disabledDays` deprecation warning so it
14199
+ * fires exactly once per page no matter how many calendars or rebuild
14200
+ * cycles encounter the legacy array.
14201
+ * @private
14202
+ */
14203
+ static _warnedDisabledDaysDeprecation = false;
14204
+
14205
+ /**
14206
+ * One-time `console.debug` directing consumers from the legacy
14207
+ * `disabledDays` Unix-timestamp API to the ISO `blackoutDates` API. Fires
14208
+ * the first time `_getBlackoutSet` rebuilds from a non-empty
14209
+ * `disabledDays`; subsequent calls (on this or any other AuroCalendar
14210
+ * instance on the page) are silent.
14211
+ * @private
14212
+ * @returns {void}
14213
+ */
14214
+ _warnDisabledDaysDeprecated() {
14215
+ if (AuroCalendar._warnedDisabledDaysDeprecation) {
14216
+ return;
14217
+ }
14218
+ AuroCalendar._warnedDisabledDaysDeprecation = true;
14219
+ // eslint-disable-next-line no-console
14220
+ console.debug('[auro-datepicker] The `disabledDays` property (Unix timestamps) is deprecated. Migrate to the `blackoutDates` property on auro-datepicker (an array of `YYYY-MM-DD` ISO strings). `disabledDays` will be removed in a future major release.');
14221
+ }
14222
+
14049
14223
  /**
14050
14224
  * Computes the initial active date from data properties alone — no DOM required.
14051
14225
  * Priority:
@@ -14090,21 +14264,10 @@ class AuroCalendar extends RangeDatepicker {
14090
14264
  const minTs = Number.isFinite(rawMin) ? rawMin : -Infinity;
14091
14265
  const maxTs = Number.isFinite(rawMax) ? rawMax : Infinity;
14092
14266
 
14093
- // Build a Set of blackout timestamps for O(1) lookup.
14094
- const blackoutSet = new Set(this.disabledDays.map((day) => parseInt(day, 10)));
14095
-
14096
- // Also include ISO-format blackoutDates from the datepicker if available.
14097
- // Parse YYYY-MM-DD as local date to avoid UTC shift issues.
14098
- const isoBlackouts = this.datepicker?.blackoutDates;
14099
- if (Array.isArray(isoBlackouts)) {
14100
- for (const isoStr of isoBlackouts) {
14101
- const parts = isoStr.split('-');
14102
- const ts = Math.floor(new Date(parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10)).getTime() / 1000);
14103
- if (Number.isFinite(ts)) {
14104
- blackoutSet.add(ts);
14105
- }
14106
- }
14107
- }
14267
+ // Build a Set of blackout timestamps for O(1) lookup. Memoized by the
14268
+ // identity of the source arrays so rapid month nav doesn't rebuild the
14269
+ // Set (and re-parse every ISO string) on every keypress.
14270
+ const blackoutSet = this._getBlackoutSet();
14108
14271
 
14109
14272
  /**
14110
14273
  * A date (unix timestamp in seconds, midnight-aligned) is "enabled" when
@@ -14300,8 +14463,8 @@ class AuroCalendar extends RangeDatepicker {
14300
14463
 
14301
14464
  /**
14302
14465
  * Handles arrow key navigation on the calendar grid wrapper.
14303
- * Focus stays on the grid wrapper; only ariaActiveDescendantElement
14304
- * and the visual active-cell indicator change.
14466
+ * Focus stays on the grid wrapper; only the visual active-cell indicator
14467
+ * changes. The live region announces the new active cell.
14305
14468
  * @private
14306
14469
  * @param {KeyboardEvent} event - The keyboard event.
14307
14470
  * @returns {void}
@@ -14366,21 +14529,21 @@ class AuroCalendar extends RangeDatepicker {
14366
14529
  } else {
14367
14530
  this.handlePrevMonth({ skipActiveUpdate: true });
14368
14531
  }
14369
- requestAnimationFrame(() => {
14370
- requestAnimationFrame(() => {
14371
- const cells = this.getAllFocusableCells();
14372
- const target = cells.find((cell) => cell.day && cell.day.date === targetTs);
14373
- if (target) {
14374
- this.setActiveCell(target.day.date);
14375
- this.handleCellFocused({ detail: { date: target.day.date } });
14376
- } else if (cells.length > 0) {
14377
- const fallback = navDir === 'next' ? cells[cells.length - 1] : cells[0];
14532
+ this._afterMonthRender(() => {
14533
+ const cells = this.getAllFocusableCells();
14534
+ const target = cells.find((cell) => cell.day && cell.day.date === targetTs);
14535
+ if (target) {
14536
+ this.setActiveCell(target.day.date);
14537
+ this.handleCellFocused({ detail: { date: target.day.date } });
14538
+ } else {
14539
+ const fallback = this.pickNearestCell(cells, targetTs, navDir);
14540
+ if (fallback) {
14378
14541
  this.setActiveCell(fallback.day.date);
14379
14542
  this.handleCellFocused({ detail: { date: fallback.day.date } });
14380
14543
  }
14381
- // Re-focus grid wrapper after month change re-render
14382
- this.focusActiveCell();
14383
- });
14544
+ }
14545
+ // Re-focus grid wrapper after month change re-render
14546
+ this.focusActiveCell();
14384
14547
  });
14385
14548
  }
14386
14549
  }
@@ -14406,26 +14569,20 @@ class AuroCalendar extends RangeDatepicker {
14406
14569
  } else {
14407
14570
  this.handlePrevMonth({ skipActiveUpdate: true });
14408
14571
  }
14409
- requestAnimationFrame(() => {
14410
- requestAnimationFrame(() => {
14411
- const cells = this.getAllFocusableCells();
14412
- const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
14413
- if (target) {
14414
- this.setActiveCell(target.day.date);
14415
- this.handleCellFocused({ detail: { date: target.day.date } });
14416
- } else if (cells.length > 0) {
14417
- let nearest = null;
14418
-
14419
- if (navDirection === 'next') {
14420
- [nearest] = cells;
14421
- } else {
14422
- nearest = cells[cells.length - 1];
14423
- }
14572
+ this._afterMonthRender(() => {
14573
+ const cells = this.getAllFocusableCells();
14574
+ const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
14575
+ if (target) {
14576
+ this.setActiveCell(target.day.date);
14577
+ this.handleCellFocused({ detail: { date: target.day.date } });
14578
+ } else {
14579
+ const nearest = this.pickNearestCell(cells, targetDate, navDirection);
14580
+ if (nearest) {
14424
14581
  this.setActiveCell(nearest.day.date);
14425
14582
  this.handleCellFocused({ detail: { date: nearest.day.date } });
14426
14583
  }
14427
- this.focusActiveCell();
14428
- });
14584
+ }
14585
+ this.focusActiveCell();
14429
14586
  });
14430
14587
  }
14431
14588
  }
@@ -14475,19 +14632,17 @@ class AuroCalendar extends RangeDatepicker {
14475
14632
  }
14476
14633
 
14477
14634
  this.handleNextMonth({ skipActiveUpdate: true });
14478
- requestAnimationFrame(() => {
14479
- requestAnimationFrame(() => {
14480
- const cells = this.getAllFocusableCells();
14481
- const target = cells.find((cell) => cell.day && cell.day.date === nextTs);
14482
- if (target) {
14483
- this.setActiveCell(target.day.date);
14484
- this.focusActiveCell();
14485
- } else if (cells.length > 0) {
14486
- // Fallback: first cell of the last rendered month
14487
- this.setActiveCell(cells[cells.length - 1].day.date);
14488
- this.focusActiveCell();
14489
- }
14490
- });
14635
+ this._afterMonthRender(() => {
14636
+ const cells = this.getAllFocusableCells();
14637
+ const target = cells.find((cell) => cell.day && cell.day.date === nextTs);
14638
+ if (target) {
14639
+ this.setActiveCell(target.day.date);
14640
+ this.focusActiveCell();
14641
+ } else if (cells.length > 0) {
14642
+ // Fallback: first cell of the last rendered month
14643
+ this.setActiveCell(cells[cells.length - 1].day.date);
14644
+ this.focusActiveCell();
14645
+ }
14491
14646
  });
14492
14647
  } else if (direction === 'prev' && this.showPrevMonthBtn) {
14493
14648
  // Navigate to previous month and focus the computed previous date.
@@ -14501,19 +14656,17 @@ class AuroCalendar extends RangeDatepicker {
14501
14656
  }
14502
14657
 
14503
14658
  this.handlePrevMonth({ skipActiveUpdate: true });
14504
- requestAnimationFrame(() => {
14505
- requestAnimationFrame(() => {
14506
- const cells = this.getAllFocusableCells();
14507
- const target = cells.find((cell) => cell.day && cell.day.date === prevTs);
14508
- if (target) {
14509
- this.setActiveCell(target.day.date);
14510
- this.focusActiveCell();
14511
- } else if (cells.length > 0) {
14512
- // Fallback: last cell of the first rendered month
14513
- this.setActiveCell(cells[0].day.date);
14514
- this.focusActiveCell();
14515
- }
14516
- });
14659
+ this._afterMonthRender(() => {
14660
+ const cells = this.getAllFocusableCells();
14661
+ const target = cells.find((cell) => cell.day && cell.day.date === prevTs);
14662
+ if (target) {
14663
+ this.setActiveCell(target.day.date);
14664
+ this.focusActiveCell();
14665
+ } else if (cells.length > 0) {
14666
+ // Fallback: last cell of the first rendered month
14667
+ this.setActiveCell(cells[0].day.date);
14668
+ this.focusActiveCell();
14669
+ }
14517
14670
  });
14518
14671
  }
14519
14672
  } else if (key === 'ArrowDown' || key === 'ArrowUp') {
@@ -14541,20 +14694,18 @@ class AuroCalendar extends RangeDatepicker {
14541
14694
  } else {
14542
14695
  this.handlePrevMonth({ skipActiveUpdate: true });
14543
14696
  }
14544
- requestAnimationFrame(() => {
14545
- requestAnimationFrame(() => {
14546
- const cells = this.getAllFocusableCells();
14547
- const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
14548
- if (target) {
14549
- this.setActiveCell(target.day.date);
14550
- this.focusActiveCell();
14551
- } else if (cells.length > 0) {
14552
- // Clamp to nearest focusable cell
14553
- const nearest = navDirection === 'next' ? cells[0] : cells[cells.length - 1];
14554
- this.setActiveCell(nearest.day.date);
14555
- this.focusActiveCell();
14556
- }
14557
- });
14697
+ this._afterMonthRender(() => {
14698
+ const cells = this.getAllFocusableCells();
14699
+ const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
14700
+ if (target) {
14701
+ this.setActiveCell(target.day.date);
14702
+ this.focusActiveCell();
14703
+ } else if (cells.length > 0) {
14704
+ // Clamp to nearest focusable cell
14705
+ const nearest = navDirection === 'next' ? cells[0] : cells[cells.length - 1];
14706
+ this.setActiveCell(nearest.day.date);
14707
+ this.focusActiveCell();
14708
+ }
14558
14709
  });
14559
14710
  }
14560
14711
  }
@@ -14593,8 +14744,9 @@ class AuroCalendar extends RangeDatepicker {
14593
14744
  return;
14594
14745
  }
14595
14746
 
14596
- // With aria-activedescendant, the button no longer receives native focus,
14597
- // so we use the debounced live region for the full context announcement.
14747
+ // DOM focus stays on the grid wrapper while arrow keys move the active
14748
+ // cell, so cell buttons never receive native focus. The debounced live
14749
+ // region carries the full-context announcement instead.
14598
14750
  const announcement = this.buildFocusAnnouncement(date);
14599
14751
  this.announceFocusDebounced(announcement);
14600
14752
 
@@ -14664,10 +14816,10 @@ class AuroCalendar extends RangeDatepicker {
14664
14816
  return null;
14665
14817
  }
14666
14818
 
14667
- const departTs = startOfDay$2(parsedFrom * 1000) / 1000;
14819
+ const departTs = new Date(parsedFrom * 1000).setHours(0, 0, 0, 0) / 1000;
14668
14820
  const parsedTo = Number.parseInt(this.dateTo, 10);
14669
14821
  const hasTo = Number.isFinite(parsedTo);
14670
- const returnTs = hasTo ? startOfDay$2(parsedTo * 1000) / 1000 : null;
14822
+ const returnTs = hasTo ? new Date(parsedTo * 1000).setHours(0, 0, 0, 0) / 1000 : null;
14671
14823
 
14672
14824
  if (date === departTs) {
14673
14825
  return this.datepicker.rangeLabelStart || 'range start';
@@ -14681,6 +14833,9 @@ class AuroCalendar extends RangeDatepicker {
14681
14833
  if (hasTo && date > departTs && date < returnTs) {
14682
14834
  return this.datepicker.rangeLabelInRange || 'in range';
14683
14835
  }
14836
+ if (!hasTo && date > departTs) {
14837
+ return this.datepicker.rangeLabelEndPreview || 'previewing range end';
14838
+ }
14684
14839
  return this.datepicker.rangeLabelAfterRange || 'after range';
14685
14840
  }
14686
14841
 
@@ -14877,9 +15032,34 @@ class AuroCalendar extends RangeDatepicker {
14877
15032
  // the last one.
14878
15033
  if (this._announceRafId) {
14879
15034
  cancelAnimationFrame(this._announceRafId);
15035
+ this._announceRafId = null;
14880
15036
  }
15037
+ this._deliverAnnouncement(dateStr, 0);
15038
+ }
15039
+
15040
+ /**
15041
+ * Writes `dateStr` to the live region. If the dropdown's dialog hasn't
15042
+ * mounted yet (so getOrCreateLiveRegion can't attach), retries on the
15043
+ * next animation frame up to MAX_LIVE_REGION_RETRIES instead of silently
15044
+ * dropping the announcement. The retry uses the same `_announceRafId`
15045
+ * the double-rAF below uses, so a newer announceSelection call (or
15046
+ * disconnectedCallback) cancels any in-flight retry.
15047
+ * @private
15048
+ * @param {String} dateStr - The localized date string to announce.
15049
+ * @param {Number} attempts - Number of prior retry attempts.
15050
+ * @returns {void}
15051
+ */
15052
+ _deliverAnnouncement(dateStr, attempts) {
14881
15053
  const liveRegion = this.getOrCreateLiveRegion();
14882
15054
  if (!liveRegion) {
15055
+ const MAX_LIVE_REGION_RETRIES = 10;
15056
+ if (attempts < MAX_LIVE_REGION_RETRIES) {
15057
+ this._announceRafId = requestAnimationFrame(() => {
15058
+ this._deliverAnnouncement(dateStr, attempts + 1);
15059
+ });
15060
+ } else {
15061
+ this._announceRafId = null;
15062
+ }
14883
15063
  return;
14884
15064
  }
14885
15065
 
@@ -15065,7 +15245,7 @@ class AuroCalendar extends RangeDatepicker {
15065
15245
  </button>
15066
15246
  ` : undefined}
15067
15247
  </div>
15068
- <div id="calendarGrid" class="calendars" role="group" tabindex="0" aria-label="${this.datepicker?.calendarGridLabel}" @keydown="${this.handleGridKeyDown}" @focusin="${this.handleGridFocusIn}" @focusout="${this.handleGridFocusOut}" @calendar-month-mouseleave="${this.clearRangePreview}">
15248
+ <div id="calendarGrid" class="calendars" role="group" aria-roledescription="calendar" tabindex="0" aria-label="${this.datepicker?.calendarGridLabel}" @keydown="${this.handleGridKeyDown}" @focusin="${this.handleGridFocusIn}" @focusout="${this.handleGridFocusOut}" @calendar-month-mouseleave="${this.clearRangePreview}">
15069
15249
  ${this.renderAllCalendars()}
15070
15250
  </div>
15071
15251
  </div>
@@ -18974,7 +19154,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$1 {
18974
19154
  }
18975
19155
  };
18976
19156
 
18977
- var formkitVersion$1 = '202606232113';
19157
+ var formkitVersion$1 = '202606251933';
18978
19158
 
18979
19159
  let AuroElement$2 = class AuroElement extends i$1 {
18980
19160
  static get properties() {
@@ -31513,15 +31693,6 @@ class BaseInput extends AuroElement$1 {
31513
31693
  this.wrapperElement.addEventListener('click', this.handleClick);
31514
31694
  }
31515
31695
 
31516
- // add attribute for query selectors when auro-input is registered under a custom name
31517
- // COVERAGE: the body of this branch is unreachable in WTR — connectedCallback
31518
- // performs the same `setAttribute('auro-input', '')` earlier (see L665-667),
31519
- // so by the time firstUpdated runs the attribute is already present and the
31520
- // `!hasAttribute('auro-input')` guard is false. Retained as a defensive
31521
- // safety net in case connectedCallback is ever short-circuited.
31522
- if (this.tagName.toLowerCase() !== 'auro-input' && !this.hasAttribute('auro-input')) {
31523
- this.setAttribute('auro-input', '');
31524
- }
31525
31696
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
31526
31697
 
31527
31698
  // use validity message override if declared when initializing the component
@@ -32092,13 +32263,7 @@ class BaseInput extends AuroElement$1 {
32092
32263
  */
32093
32264
  get placeholderStr() {
32094
32265
  if (!this.placeholder && this.type === 'date') {
32095
- // COVERAGE: the `'MM/DD/YYYY'` literal fallback is unreachable in WTR.
32096
- // connectedCallback (L682) calls configureDataForType, which at L1266-1268
32097
- // assigns `this.format = this.util.getDateMaskFromLocale().toLowerCase()`
32098
- // when type=date and format is unset. That runs before the first render
32099
- // reads this getter, so the ternary's truthy arm always wins. Retained
32100
- // as a defensive fallback for direct getter calls before connection.
32101
- return this.format ? this.format.toUpperCase() : 'MM/DD/YYYY';
32266
+ return this.format.toUpperCase();
32102
32267
  }
32103
32268
  return this.placeholder || "";
32104
32269
  }
@@ -32589,7 +32754,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$1 {
32589
32754
  }
32590
32755
  };
32591
32756
 
32592
- var formkitVersion = '202606232113';
32757
+ var formkitVersion = '202606251933';
32593
32758
 
32594
32759
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
32595
32760
  // See LICENSE in the project root for license information.
@@ -34066,6 +34231,7 @@ class AuroDatePicker extends AuroElement {
34066
34231
  this.rangeLabelBeforeRange = 'before range';
34067
34232
  this.rangeLabelInRange = 'in range';
34068
34233
  this.rangeLabelAfterRange = 'after range';
34234
+ this.rangeLabelEndPreview = 'previewing range end';
34069
34235
  this.blackoutDates = [];
34070
34236
  this.blackoutLabel = 'unavailable';
34071
34237
  this.navLabelPrevMonth = 'Previous month';
@@ -34165,6 +34331,22 @@ class AuroDatePicker extends AuroElement {
34165
34331
  */
34166
34332
  this.handleClick = this.handleClick.bind(this);
34167
34333
 
34334
+ /**
34335
+ * Single AbortController shared by every listener registered in the
34336
+ * configure* methods. Lets disconnectedCallback tear all of them down
34337
+ * with one abort() call.
34338
+ *
34339
+ * The genuine leak risk is the listeners attached to children that can
34340
+ * outlive the host if they get reparented — `this.dropdown`,
34341
+ * `this.calendar`, and the inputs inside the dropdown's slot.
34342
+ * Listeners attached to `this` (e.g. focusin/focusout on the host)
34343
+ * form a self-contained reference graph that the GC can collect with
34344
+ * the host anyway, but they share the same signal so the cleanup
34345
+ * pattern stays uniform across all configure* sites.
34346
+ * @private
34347
+ */
34348
+ this._listenerAbortController = new AbortController();
34349
+
34168
34350
  /**
34169
34351
  * @private
34170
34352
  */
@@ -34213,6 +34395,7 @@ class AuroDatePicker extends AuroElement {
34213
34395
 
34214
34396
  /**
34215
34397
  * Label announced for blackout (disabled but in-range) date cells.
34398
+ * @default 'unavailable'
34216
34399
  */
34217
34400
  blackoutLabel: {
34218
34401
  type: String,
@@ -34229,6 +34412,7 @@ class AuroDatePicker extends AuroElement {
34229
34412
 
34230
34413
  /**
34231
34414
  * Accessible label for the calendar grid containing the days of the month.
34415
+ * @default 'Calendar days of the month'
34232
34416
  */
34233
34417
  calendarGridLabel: {
34234
34418
  type: String,
@@ -34391,6 +34575,7 @@ class AuroDatePicker extends AuroElement {
34391
34575
 
34392
34576
  /**
34393
34577
  * Accessible label for the next month navigation button.
34578
+ * @default 'Next month'
34394
34579
  */
34395
34580
  navLabelNextMonth: {
34396
34581
  type: String,
@@ -34399,6 +34584,7 @@ class AuroDatePicker extends AuroElement {
34399
34584
 
34400
34585
  /**
34401
34586
  * Accessible label for the previous month navigation button.
34587
+ * @default 'Previous month'
34402
34588
  */
34403
34589
  navLabelPrevMonth: {
34404
34590
  type: String,
@@ -34477,6 +34663,7 @@ class AuroDatePicker extends AuroElement {
34477
34663
 
34478
34664
  /**
34479
34665
  * Label announced for cells after the range (or after start when no end is selected).
34666
+ * @default 'after range'
34480
34667
  */
34481
34668
  rangeLabelAfterRange: {
34482
34669
  type: String,
@@ -34485,6 +34672,7 @@ class AuroDatePicker extends AuroElement {
34485
34672
 
34486
34673
  /**
34487
34674
  * Label announced for cells before the range start.
34675
+ * @default 'before range'
34488
34676
  */
34489
34677
  rangeLabelBeforeRange: {
34490
34678
  type: String,
@@ -34493,14 +34681,27 @@ class AuroDatePicker extends AuroElement {
34493
34681
 
34494
34682
  /**
34495
34683
  * Label announced for the range end date cell.
34684
+ * @default 'range end'
34496
34685
  */
34497
34686
  rangeLabelEnd: {
34498
34687
  type: String,
34499
34688
  reflect: true
34500
34689
  },
34501
34690
 
34691
+ /**
34692
+ * Label announced for the focused cell while previewing a range end
34693
+ * (dateFrom set, dateTo not yet selected). Tells AT users that
34694
+ * pressing Enter would commit this cell as the range end.
34695
+ * @default 'previewing range end'
34696
+ */
34697
+ rangeLabelEndPreview: {
34698
+ type: String,
34699
+ reflect: true
34700
+ },
34701
+
34502
34702
  /**
34503
34703
  * Label announced for cells within the selected range.
34704
+ * @default 'in range'
34504
34705
  */
34505
34706
  rangeLabelInRange: {
34506
34707
  type: String,
@@ -34509,6 +34710,7 @@ class AuroDatePicker extends AuroElement {
34509
34710
 
34510
34711
  /**
34511
34712
  * Label announced for the range start date cell.
34713
+ * @default 'range start'
34512
34714
  */
34513
34715
  rangeLabelStart: {
34514
34716
  type: String,
@@ -34873,10 +35075,26 @@ class AuroDatePicker extends AuroElement {
34873
35075
  // ─── Vendor calendar time conversions ─────────────────────────────────────
34874
35076
 
34875
35077
  /**
34876
- * Converts a Unix timestamp (seconds) from the vendor calendar to an ISO date string.
35078
+ * Converts a Unix timestamp (seconds) from the vendored range-datepicker
35079
+ * (`src/vendor/wc-range-datepicker/day.js`) to an ISO date string.
35080
+ *
35081
+ * Timezone contract:
35082
+ * - INPUT: `time` is assumed to be the seconds-since-epoch of **local
35083
+ * midnight** for the intended calendar day. The vendor's Day constructor
35084
+ * builds it via `date-fns format(date, 't')` from a locally-constructed
35085
+ * Date, so this assumption currently holds end-to-end.
35086
+ * - OUTPUT: `dateFormatter.toISOFormatString` reads the Date's local
35087
+ * getFullYear/getMonth/getDate components, so the returned YYYY-MM-DD
35088
+ * string matches the local calendar day.
35089
+ *
35090
+ * If the vendor ever switches to emitting UTC-midnight timestamps, this
35091
+ * conversion will silently shift the returned date by one day in zones
35092
+ * west of UTC. Any vendor swap should re-verify this contract; the TZ
35093
+ * regression suite (`npm run test:hst`, UTC-10) will catch the symptom.
35094
+ *
34877
35095
  * @private
34878
- * @param {number} time - Unix timestamp in seconds.
34879
- * @returns {string} ISO date string (yyyy-mm-dd).
35096
+ * @param {number} time - Unix timestamp (seconds), local midnight of the day.
35097
+ * @returns {string} ISO date string (yyyy-mm-dd) reflecting the local calendar day.
34880
35098
  */
34881
35099
  convertWcTimeToDate(time) {
34882
35100
  return dateFormatter$1.toISOFormatString(new Date(time * 1000));
@@ -34978,8 +35196,8 @@ class AuroDatePicker extends AuroElement {
34978
35196
  }
34979
35197
  }
34980
35198
 
34981
- // Focus the calendar grid wrapper (aria-activedescendant handles
34982
- // the SR announcement for the active cell).
35199
+ // Focus the calendar grid wrapper. The live region (announced just
35200
+ // below) handles the SR announcement for the active cell.
34983
35201
  if (activeCell) {
34984
35202
  this.calendar.focusActiveCell();
34985
35203
 
@@ -35029,11 +35247,13 @@ class AuroDatePicker extends AuroElement {
35029
35247
  this.dropdown.bibDialogLabel = labelElement.textContent.trim() || undefined;
35030
35248
  }
35031
35249
 
35250
+ const { signal } = this._listenerAbortController;
35251
+
35032
35252
  this.dropdown.addEventListener('auroDropdown-triggerClick', () => {
35033
35253
  if (!this.isPopoverVisible) {
35034
35254
  this.dropdown.show();
35035
35255
  }
35036
- });
35256
+ }, { signal });
35037
35257
 
35038
35258
  this.dropdown.addEventListener('auroDropdown-toggled', () => {
35039
35259
  this.notifyDatepickerToggled();
@@ -35051,7 +35271,7 @@ class AuroDatePicker extends AuroElement {
35051
35271
  if (this.valueObject) {
35052
35272
  this.centralDate = this.value;
35053
35273
  } else if (!this.centralDate && !this.calendarStartDate && !this.minDate) {
35054
- this.centralDate = new Date();
35274
+ this.centralDate = dateFormatter$1.toISOFormatString(new Date());
35055
35275
  }
35056
35276
  }
35057
35277
 
@@ -35131,7 +35351,7 @@ class AuroDatePicker extends AuroElement {
35131
35351
  this.forceScrollOnNextMobileCalendarRender = false;
35132
35352
  }, 0);
35133
35353
  }
35134
- });
35354
+ }, { signal });
35135
35355
 
35136
35356
  // Handle responsive strategy changes while the dropdown is open
35137
35357
  // (e.g. resizing from desktop → mobile or vice versa).
@@ -35178,7 +35398,7 @@ class AuroDatePicker extends AuroElement {
35178
35398
  });
35179
35399
  });
35180
35400
  }
35181
- });
35401
+ }, { signal });
35182
35402
  }
35183
35403
 
35184
35404
  /**
@@ -35191,6 +35411,8 @@ class AuroDatePicker extends AuroElement {
35191
35411
 
35192
35412
  this.inputList = [...this.dropdown.querySelectorAll(this.inputTag._$litStatic$)];
35193
35413
 
35414
+ const { signal } = this._listenerAbortController;
35415
+
35194
35416
  this.inputList.forEach((input, index) => {
35195
35417
  input.addEventListener('input', (event) => {
35196
35418
  event.stopPropagation();
@@ -35202,7 +35424,7 @@ class AuroDatePicker extends AuroElement {
35202
35424
  }
35203
35425
 
35204
35426
  this.notifyValueChanged();
35205
- });
35427
+ }, { signal });
35206
35428
 
35207
35429
  input.addEventListener('auroFormElement-validated', (evt) => {
35208
35430
  // not to bubble up input's validated event.
@@ -35218,7 +35440,7 @@ class AuroDatePicker extends AuroElement {
35218
35440
  this.validity = evt.detail.validity;
35219
35441
  this.errorMessage = evt.detail.message;
35220
35442
  }
35221
- });
35443
+ }, { signal });
35222
35444
  });
35223
35445
  }
35224
35446
 
@@ -35232,6 +35454,8 @@ class AuroDatePicker extends AuroElement {
35232
35454
  this.calendar.datepicker = this;
35233
35455
  this.calendar.dropdown = this.dropdown;
35234
35456
 
35457
+ const { signal } = this._listenerAbortController;
35458
+
35235
35459
  this.calendar.addEventListener('auroCalendar-dateSelected', () => {
35236
35460
  if (this.inputList[0].value !== this.calendar.dateFrom && this.calendar.dateFrom !== undefined) {
35237
35461
  this.inputList[0].value = this.convertWcTimeToDate(this.calendar.dateFrom);
@@ -35240,11 +35464,11 @@ class AuroDatePicker extends AuroElement {
35240
35464
  if (this.inputList[1] && this.calendar.dateTo && this.inputList[1].value !== this.calendar.dateTo) {
35241
35465
  this.inputList[1].value = this.convertWcTimeToDate(this.calendar.dateTo);
35242
35466
  }
35243
- });
35467
+ }, { signal });
35244
35468
 
35245
35469
  this.calendar.addEventListener('auroCalendar-dismissRequest', () => {
35246
35470
  this.dropdown.hide();
35247
- });
35471
+ }, { signal });
35248
35472
 
35249
35473
  this.calendar.addEventListener('auroCalendar-centralDateChanged', (event) => {
35250
35474
  const match = this.centralDateObject && this.util.datesMatch(event.detail.date, this.centralDateObject);
@@ -35254,7 +35478,7 @@ class AuroDatePicker extends AuroElement {
35254
35478
  }
35255
35479
 
35256
35480
  this.notifyMonthChanged(event);
35257
- });
35481
+ }, { signal });
35258
35482
  }
35259
35483
 
35260
35484
  /**
@@ -35263,10 +35487,17 @@ class AuroDatePicker extends AuroElement {
35263
35487
  * @returns {void}
35264
35488
  */
35265
35489
  configureDatepicker() {
35490
+ // These listeners are on `this` (the host), so they would GC with the
35491
+ // host even without the abort signal — see the leak rationale on
35492
+ // `_listenerAbortController`. The signal is still passed for uniform
35493
+ // cleanup semantics with the child-element listeners in the other
35494
+ // configure* methods.
35495
+ const { signal } = this._listenerAbortController;
35496
+
35266
35497
  this.addEventListener('focusin', () => {
35267
35498
  this.touched = true;
35268
35499
  this.hasFocus = true;
35269
- });
35500
+ }, { signal });
35270
35501
 
35271
35502
  this.addEventListener('focusout', () => {
35272
35503
  this.hasFocus = false;
@@ -35278,7 +35509,7 @@ class AuroDatePicker extends AuroElement {
35278
35509
  if (!this.matches(':focus-within')) {
35279
35510
  this.validate();
35280
35511
  }
35281
- });
35512
+ }, { signal });
35282
35513
 
35283
35514
  if (this.valueObject) {
35284
35515
  this.calendar.dateFrom = this.convertToWcValidTime(this.valueObject);
@@ -35476,6 +35707,36 @@ class AuroDatePicker extends AuroElement {
35476
35707
  return this.validity !== undefined && this.validity !== 'valid';
35477
35708
  }
35478
35709
 
35710
+ /**
35711
+ * Per-class dedup set used by `_warnInvalidLocale`. Static so the dedup
35712
+ * spans every datepicker instance on the page; lives on the class (not
35713
+ * at module scope) so it stays an encapsulated implementation detail of
35714
+ * this component and does not interfere with WCA's class-JSDoc
35715
+ * attachment.
35716
+ * @private
35717
+ */
35718
+ static _warnedInvalidLocales = new Set();
35719
+
35720
+ /**
35721
+ * Logs a one-time `console.debug` when an unsupported locale falls back to
35722
+ * en-US. Deduped by the offending tag so noisy re-renders that resurface
35723
+ * the same bad value stay quiet, but each new bad value still signals so
35724
+ * consumers can spot the typo or missing tag.
35725
+ * @private
35726
+ * @param {string|undefined} badLocale - The locale value that failed.
35727
+ * @returns {void}
35728
+ */
35729
+ _warnInvalidLocale(badLocale) {
35730
+ const key = String(badLocale ?? '');
35731
+ const seen = AuroDatePicker._warnedInvalidLocales;
35732
+ if (seen.has(key)) {
35733
+ return;
35734
+ }
35735
+ seen.add(key);
35736
+ // eslint-disable-next-line no-console
35737
+ console.debug(`[auro-datepicker] Locale "${key}" is not supported by Intl.DateTimeFormat. Falling back to "en-US". Pass a BCP 47 tag such as "en-US", "fr-FR", or "ja-JP".`);
35738
+ }
35739
+
35479
35740
  /**
35480
35741
  * Lifecycle method to check if the locale is valid.
35481
35742
  * @ignore
@@ -35486,10 +35747,15 @@ class AuroDatePicker extends AuroElement {
35486
35747
  if (changedProperties.has('locale')) {
35487
35748
  try {
35488
35749
  const supported = Intl.DateTimeFormat.supportedLocalesOf([this.locale], { localeMatcher: 'lookup' });
35489
- this._validLocale = supported.length > 0 ? this.locale : 'en-US';
35750
+ if (supported.length > 0) {
35751
+ this._validLocale = this.locale;
35752
+ } else {
35753
+ this._validLocale = 'en-US';
35754
+ this._warnInvalidLocale(this.locale);
35755
+ }
35490
35756
  } catch {
35491
- console.debug(`[AuroDatePicker] The locale "${this.locale}" is not valid. Falling back to "en-US".`); // eslint-disable-line no-console
35492
35757
  this._validLocale = 'en-US';
35758
+ this._warnInvalidLocale(this.locale);
35493
35759
  }
35494
35760
 
35495
35761
  const previousLocaleFormat = getDateFormatFromLocale$1(changedProperties.get('locale'));
@@ -35571,8 +35837,6 @@ class AuroDatePicker extends AuroElement {
35571
35837
  // Skip centralDate update when user clicked a cell in range mode
35572
35838
  // to prevent the displayed months from shifting
35573
35839
  this.centralDate = this.value;
35574
- //TODO: TEST THIS CHANGE
35575
- // this.calendarRenderUtil.updateCentralDate(this, this.value);
35576
35840
  }
35577
35841
 
35578
35842
  this.setHasValue();
@@ -35632,8 +35896,6 @@ class AuroDatePicker extends AuroElement {
35632
35896
  // Skip centralDate update when user clicked a cell in range mode
35633
35897
  // to prevent the displayed months from shifting
35634
35898
  this.centralDate = this.valueEnd;
35635
- // TODO: TEST THIS CHANGE
35636
- // this.calendarRenderUtil.updateCentralDate(this, this.formattedValueEnd);
35637
35899
  }
35638
35900
 
35639
35901
  this.validate();
@@ -35775,7 +36037,7 @@ class AuroDatePicker extends AuroElement {
35775
36037
  * @returns {void}
35776
36038
  */
35777
36039
  configureClickHandler() {
35778
- this.addEventListener('click', this.handleClick);
36040
+ this.addEventListener('click', this.handleClick, { signal: this._listenerAbortController.signal });
35779
36041
  }
35780
36042
 
35781
36043
  firstUpdated() {
@@ -35797,6 +36059,17 @@ class AuroDatePicker extends AuroElement {
35797
36059
  this.locale = this.domHandler.getLocale(this);
35798
36060
  }
35799
36061
 
36062
+ disconnectedCallback() {
36063
+ super.disconnectedCallback();
36064
+ // Defer so that re-parenting (auro-drawer slotting it into a dialog,
36065
+ // for example) does not abort listeners we still need after reconnect.
36066
+ queueMicrotask(() => {
36067
+ if (!this.isConnected) {
36068
+ this._listenerAbortController.abort();
36069
+ }
36070
+ });
36071
+ }
36072
+
35800
36073
  // layout render methods
35801
36074
  // ------------------------------------
35802
36075