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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) 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 +3 -3
  7. package/components/combobox/demo/getting-started.min.js +3 -3
  8. package/components/combobox/demo/index.min.js +3 -3
  9. package/components/combobox/dist/index.js +3 -3
  10. package/components/combobox/dist/registered.js +3 -3
  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 +579 -202
  19. package/components/datepicker/demo/index.min.js +579 -202
  20. package/components/datepicker/dist/{src/auro-calendar-cell.d.ts → auro-calendar-cell.d.ts} +14 -3
  21. package/components/datepicker/dist/{src/auro-calendar.d.ts → auro-calendar.d.ts} +90 -6
  22. package/components/datepicker/dist/{src/auro-datepicker.d.ts → auro-datepicker.d.ts} +78 -5
  23. package/components/datepicker/dist/blackoutUtils.d.ts +43 -0
  24. package/components/datepicker/dist/index.js +579 -202
  25. package/components/datepicker/dist/registered.js +579 -202
  26. package/components/dropdown/demo/customize.min.js +1 -1
  27. package/components/dropdown/demo/getting-started.min.js +1 -1
  28. package/components/dropdown/demo/index.min.js +1 -1
  29. package/components/dropdown/dist/index.js +1 -1
  30. package/components/dropdown/dist/registered.js +1 -1
  31. package/components/form/demo/customize.min.js +595 -218
  32. package/components/form/demo/getting-started.min.js +595 -218
  33. package/components/form/demo/index.min.js +595 -218
  34. package/components/form/demo/registerDemoDeps.min.js +595 -218
  35. package/components/input/demo/customize.min.js +1 -1
  36. package/components/input/demo/getting-started.min.js +1 -1
  37. package/components/input/demo/index.min.js +1 -1
  38. package/components/input/dist/index.js +1 -1
  39. package/components/input/dist/registered.js +1 -1
  40. package/components/radio/demo/customize.min.js +1 -1
  41. package/components/radio/demo/getting-started.min.js +1 -1
  42. package/components/radio/demo/index.min.js +1 -1
  43. package/components/radio/dist/index.js +1 -1
  44. package/components/radio/dist/registered.js +1 -1
  45. package/components/select/demo/customize.min.js +2 -2
  46. package/components/select/demo/getting-started.min.js +2 -2
  47. package/components/select/demo/index.min.js +2 -2
  48. package/components/select/dist/index.js +2 -2
  49. package/components/select/dist/registered.js +2 -2
  50. package/custom-elements.json +1696 -1414
  51. package/package.json +6 -2
  52. package/components/checkbox/demo/customize.js +0 -22
  53. package/components/checkbox/demo/demo-support.js +0 -1
  54. package/components/checkbox/demo/getting-started.js +0 -22
  55. package/components/checkbox/demo/index.js +0 -8
  56. package/components/checkbox/demo/styles.scss +0 -1
  57. package/components/combobox/demo/customize.js +0 -24
  58. package/components/combobox/demo/demo-support.js +0 -1
  59. package/components/combobox/demo/getting-started.js +0 -21
  60. package/components/combobox/demo/index.js +0 -23
  61. package/components/combobox/demo/styles.scss +0 -1
  62. package/components/counter/demo/customize.js +0 -21
  63. package/components/counter/demo/demo-support.js +0 -1
  64. package/components/counter/demo/index.js +0 -21
  65. package/components/counter/demo/styles.scss +0 -1
  66. package/components/datepicker/demo/customize.js +0 -17
  67. package/components/datepicker/demo/demo-support.js +0 -1
  68. package/components/datepicker/demo/index.js +0 -23
  69. package/components/datepicker/demo/styles.scss +0 -1
  70. package/components/dropdown/demo/customize.js +0 -9
  71. package/components/dropdown/demo/demo-support.js +0 -1
  72. package/components/dropdown/demo/getting-started.js +0 -9
  73. package/components/dropdown/demo/index.js +0 -16
  74. package/components/dropdown/demo/styles.scss +0 -1
  75. package/components/form/demo/customize.js +0 -28
  76. package/components/form/demo/demo-support.js +0 -1
  77. package/components/form/demo/getting-started.js +0 -9
  78. package/components/form/demo/index.js +0 -5
  79. package/components/form/demo/registerDemoDeps.js +0 -23
  80. package/components/form/demo/styles.scss +0 -1
  81. package/components/input/demo/customize.js +0 -25
  82. package/components/input/demo/demo-support.js +0 -1
  83. package/components/input/demo/getting-started.js +0 -8
  84. package/components/input/demo/index.js +0 -8
  85. package/components/input/demo/styles.css +0 -974
  86. package/components/input/demo/styles.scss +0 -1
  87. package/components/menu/demo/demo-support.js +0 -1
  88. package/components/menu/demo/index.js +0 -25
  89. package/components/menu/demo/styles.scss +0 -1
  90. package/components/radio/demo/customize.js +0 -22
  91. package/components/radio/demo/demo-support.js +0 -1
  92. package/components/radio/demo/getting-started.js +0 -24
  93. package/components/radio/demo/index.js +0 -8
  94. package/components/radio/demo/styles.scss +0 -1
  95. package/components/select/demo/customize.js +0 -11
  96. package/components/select/demo/demo-support.js +0 -1
  97. package/components/select/demo/getting-started.js +0 -26
  98. package/components/select/demo/index.js +0 -11
  99. package/components/select/demo/styles.scss +0 -1
  100. /package/components/datepicker/dist/{src/auro-calendar-month.d.ts → auro-calendar-month.d.ts} +0 -0
  101. /package/components/datepicker/dist/{src/buttonVersion.d.ts → buttonVersion.d.ts} +0 -0
  102. /package/components/datepicker/dist/{src/datepickerKeyboardStrategy.d.ts → datepickerKeyboardStrategy.d.ts} +0 -0
  103. /package/components/datepicker/dist/{src/iconVersion.d.ts → iconVersion.d.ts} +0 -0
  104. /package/components/datepicker/dist/{src/index.d.ts → index.d.ts} +0 -0
  105. /package/components/datepicker/dist/{src/popoverVersion.d.ts → popoverVersion.d.ts} +0 -0
  106. /package/components/datepicker/dist/{src/styles → styles}/classic/color-css.d.ts +0 -0
  107. /package/components/datepicker/dist/{src/styles → styles}/classic/style-css.d.ts +0 -0
  108. /package/components/datepicker/dist/{src/styles → styles}/color-calendar-css.d.ts +0 -0
  109. /package/components/datepicker/dist/{src/styles → styles}/color-cell-css.d.ts +0 -0
  110. /package/components/datepicker/dist/{src/styles → styles}/color-css.d.ts +0 -0
  111. /package/components/datepicker/dist/{src/styles → styles}/color-month-css.d.ts +0 -0
  112. /package/components/datepicker/dist/{src/styles → styles}/shapeSize-css.d.ts +0 -0
  113. /package/components/datepicker/dist/{src/styles → styles}/snowflake/color-css.d.ts +0 -0
  114. /package/components/datepicker/dist/{src/styles → styles}/snowflake/style-css.d.ts +0 -0
  115. /package/components/datepicker/dist/{src/styles → styles}/style-auro-calendar-cell-css.d.ts +0 -0
  116. /package/components/datepicker/dist/{src/styles → styles}/style-auro-calendar-css.d.ts +0 -0
  117. /package/components/datepicker/dist/{src/styles → styles}/style-auro-calendar-month-css.d.ts +0 -0
  118. /package/components/datepicker/dist/{src/styles → styles}/style-css.d.ts +0 -0
  119. /package/components/datepicker/dist/{src/styles → styles}/tokens-css.d.ts +0 -0
  120. /package/components/datepicker/dist/{src/utilities.d.ts → utilities.d.ts} +0 -0
  121. /package/components/datepicker/dist/{src/utilitiesCalendar.d.ts → utilitiesCalendar.d.ts} +0 -0
  122. /package/components/datepicker/dist/{src/utilitiesCalendarRender.d.ts → utilitiesCalendarRender.d.ts} +0 -0
  123. /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/day.d.ts +0 -0
  124. /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/range-datepicker-calendar.d.ts +0 -0
  125. /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/range-datepicker-cell.d.ts +0 -0
  126. /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/range-datepicker.d.ts +0 -0
@@ -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
 
@@ -11592,13 +11592,103 @@ let s$2 = class s{registerComponent(e,t){customElements.get(e)||customElements.d
11592
11592
 
11593
11593
  var popoverVersion = '6.0.1';
11594
11594
 
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 */
11595
+ /**
11596
+ * Single source of truth for parsing and matching blackout dates across the
11597
+ * datepicker. Both `auro-calendar` (memoized Set + `isDateBlackout`) and the
11598
+ * pre-`firstUpdated` fallback inside `auro-calendar-cell` route through these
11599
+ * helpers so the YYYY-MM-DD → seconds conversion and the merge-with-legacy
11600
+ * `disabledDays` rules are defined exactly once.
11601
+ */
11596
11602
 
11597
- const startOfDay$1 = (ms) => {
11598
- const date = new Date(ms);
11599
- date.setHours(0, 0, 0, 0);
11600
- return date.getTime();
11601
- };
11603
+ /**
11604
+ * Converts a `YYYY-MM-DD` ISO date string to a Unix timestamp (seconds)
11605
+ * representing local midnight on that calendar day. Returns `null` for
11606
+ * inputs that don't parse to a finite timestamp.
11607
+ *
11608
+ * Uses the `new Date(year, monthIndex, day)` constructor (NOT
11609
+ * `new Date(isoStr)`) so the result is local-midnight rather than UTC
11610
+ * midnight — required to keep the calendar grid aligned with the user's
11611
+ * local calendar day in negative-offset timezones.
11612
+ *
11613
+ * @param {string} isoStr - Date string in `YYYY-MM-DD` format.
11614
+ * @returns {number|null} Local-midnight Unix timestamp (seconds), or null.
11615
+ */
11616
+ function parseIsoToTimestamp(isoStr) {
11617
+ if (typeof isoStr !== 'string') {
11618
+ return null;
11619
+ }
11620
+ const parts = isoStr.split('-');
11621
+ if (parts.length !== 3) {
11622
+ return null;
11623
+ }
11624
+ const year = parseInt(parts[0], 10);
11625
+ const month = parseInt(parts[1], 10);
11626
+ const day = parseInt(parts[2], 10);
11627
+ if (!Number.isFinite(year) || !Number.isFinite(month) || !Number.isFinite(day)) {
11628
+ return null;
11629
+ }
11630
+ // Reject overflow values like "2024-13-40" — JS `new Date(year, month, day)`
11631
+ // silently normalizes those to a different calendar day, which would
11632
+ // disable the wrong date if we let the result through.
11633
+ if (month < 1 || month > 12 || day < 1 || day > 31) {
11634
+ return null;
11635
+ }
11636
+ const date = new Date(year, month - 1, day);
11637
+ // Guard the residual case where JS still rolls a value (e.g. Feb 30 → Mar 2).
11638
+ // After construction, getFullYear/getMonth/getDate should match the inputs.
11639
+ if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {
11640
+ return null;
11641
+ }
11642
+ const ts = Math.floor(date.getTime() / 1000);
11643
+ return Number.isFinite(ts) ? ts : null;
11644
+ }
11645
+
11646
+ /**
11647
+ * Builds a `Set<number>` of seconds-since-epoch timestamps covering both the
11648
+ * legacy `disabledDays` (already-numeric) array and the ISO `blackoutDates`
11649
+ * array. Use this for O(1) membership checks in hot paths.
11650
+ *
11651
+ * @param {Array<string|number>|undefined} disabledDays - Legacy timestamp array.
11652
+ * @param {Array<string>|undefined} blackoutDates - ISO `YYYY-MM-DD` array.
11653
+ * @returns {Set<number>}
11654
+ */
11655
+ function buildBlackoutSet(disabledDays, blackoutDates) {
11656
+ const set = new Set();
11657
+ if (Array.isArray(disabledDays)) {
11658
+ for (const day of disabledDays) {
11659
+ const ts = parseInt(day, 10);
11660
+ if (Number.isFinite(ts)) {
11661
+ set.add(ts);
11662
+ }
11663
+ }
11664
+ }
11665
+ if (Array.isArray(blackoutDates)) {
11666
+ for (const isoStr of blackoutDates) {
11667
+ const ts = parseIsoToTimestamp(isoStr);
11668
+ if (ts !== null) {
11669
+ set.add(ts);
11670
+ }
11671
+ }
11672
+ }
11673
+ return set;
11674
+ }
11675
+
11676
+ /**
11677
+ * One-shot membership test for a single timestamp against both blackout
11678
+ * sources. Allocates a Set on each call; only use this in cold paths
11679
+ * (e.g. the pre-`firstUpdated` cell fallback). Hot paths should hold the
11680
+ * Set returned from `buildBlackoutSet` and `.has(ts)` directly.
11681
+ *
11682
+ * @param {number} dateTs - Unix timestamp (seconds) to test.
11683
+ * @param {Array<string|number>|undefined} disabledDays - Legacy timestamp array.
11684
+ * @param {Array<string>|undefined} blackoutDates - ISO `YYYY-MM-DD` array.
11685
+ * @returns {boolean}
11686
+ */
11687
+ function isBlackoutTimestamp(dateTs, disabledDays, blackoutDates) {
11688
+ return buildBlackoutSet(disabledDays, blackoutDates).has(dateTs);
11689
+ }
11690
+
11691
+ /* 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 */
11602
11692
 
11603
11693
  class AuroCalendarCell extends i$1 {
11604
11694
  constructor() {
@@ -11646,6 +11736,14 @@ class AuroCalendarCell extends i$1 {
11646
11736
  type: Boolean,
11647
11737
  reflect: true
11648
11738
  },
11739
+ /**
11740
+ * @deprecated Propagated from the legacy `auro-calendar.disabledDays`
11741
+ * Unix-timestamp array. The cell honors it for backward compatibility
11742
+ * (see the divergence-check fallback inside `isBlackout`), but
11743
+ * consumers should migrate to `auro-datepicker.blackoutDates`
11744
+ * (YYYY-MM-DD ISO strings). The calendar emits a one-time
11745
+ * deprecation warning the first time a non-empty value is observed.
11746
+ */
11649
11747
  disabledDays: { type: Array },
11650
11748
  isCurrentDate: { type: Boolean },
11651
11749
  locale: { type: String },
@@ -11691,8 +11789,8 @@ class AuroCalendarCell extends i$1 {
11691
11789
  const parsedDateTo = parseInt(dateTo, 10);
11692
11790
 
11693
11791
  if (day) {
11694
- const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
11695
- const returnTimestamp = startOfDay$1(parsedDateTo * 1000) / 1000;
11792
+ const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
11793
+ const returnTimestamp = new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000;
11696
11794
 
11697
11795
  if (day.date === departTimestamp || day.date === returnTimestamp) {
11698
11796
  this.selected = true;
@@ -11776,27 +11874,33 @@ class AuroCalendarCell extends i$1 {
11776
11874
  return false;
11777
11875
  }
11778
11876
 
11779
- // Check against disabledDays timestamps (legacy path)
11780
- if (Array.isArray(this.disabledDays) && this.disabledDays.length > 0 &&
11781
- (this.disabledDays.findIndex(dd => parseInt(dd, 10) === this.day.date) !== -1)) {
11782
- return true;
11783
- }
11784
-
11785
- // Check against blackoutDates (ISO format YYYY-MM-DD) on the datepicker
11786
- const blackoutDates = this.datepicker?.blackoutDates;
11787
-
11788
- if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
11789
- const date = new Date(this.day.date * 1000);
11790
- const yyyy = date.getFullYear();
11791
- const mm = String(date.getMonth() + 1).padStart(2, '0');
11792
- const dd = String(date.getDate()).padStart(2, '0');
11793
- const cellDate = `${yyyy}-${mm}-${dd}`;
11794
- if (blackoutDates.includes(cellDate)) {
11877
+ // Delegate to the calendar's memoized blackout Set for O(1) lookup
11878
+ // (instead of rescanning disabledDays + blackoutDates per render). The
11879
+ // Set is rebuilt only when either source array reference changes — see
11880
+ // auro-calendar.js#_getBlackoutSet.
11881
+ if (this.calendar && typeof this.calendar._getBlackoutSet === 'function') {
11882
+ if (this.calendar._getBlackoutSet().has(this.day.date)) {
11795
11883
  return true;
11796
11884
  }
11885
+ // If the cell's local disabledDays diverged from the calendar's (a
11886
+ // consumer or test mutated cell.disabledDays directly), the Set does
11887
+ // not reflect that addition — fall through to the per-cell scan only
11888
+ // when the reference no longer matches. Production data flow keeps
11889
+ // these identical, so this branch stays cold. Guarded with
11890
+ // Array.isArray to match `_getBlackoutSet`'s contract: non-array
11891
+ // values are treated as empty rather than crashing on `.findIndex`.
11892
+ if (Array.isArray(this.disabledDays) && this.disabledDays !== this.calendar.disabledDays && this.disabledDays.length > 0) {
11893
+ if (this.disabledDays.findIndex((dd) => parseInt(dd, 10) === this.day.date) !== -1) {
11894
+ return true;
11895
+ }
11896
+ }
11897
+ return false;
11797
11898
  }
11798
11899
 
11799
- return false;
11900
+ // Pre-firstUpdated fallback — the cell may render once before the
11901
+ // ancestor calendar is wired up. Routes through the shared
11902
+ // blackoutUtils helper so the parsing rules stay in one place.
11903
+ return isBlackoutTimestamp(this.day.date, this.disabledDays, this.datepicker?.blackoutDates);
11800
11904
  }
11801
11905
 
11802
11906
  /**
@@ -11902,12 +12006,12 @@ class AuroCalendarCell extends i$1 {
11902
12006
  const parsedDateFrom = Number.parseInt(this.dateFrom, 10);
11903
12007
  if (!Number.isFinite(parsedDateFrom)) return null;
11904
12008
 
11905
- const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
12009
+ const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
11906
12010
  const dayDate = this.day.date;
11907
12011
 
11908
12012
  const parsedDateTo = Number.parseInt(this.dateTo, 10);
11909
12013
  const hasDateTo = Number.isFinite(parsedDateTo);
11910
- const returnTimestamp = hasDateTo ? startOfDay$1(parsedDateTo * 1000) / 1000 : null;
12014
+ const returnTimestamp = hasDateTo ? new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000 : null;
11911
12015
 
11912
12016
  if (dayDate === departTimestamp) return this.datepicker.rangeLabelStart || 'range start';
11913
12017
 
@@ -11917,7 +12021,9 @@ class AuroCalendarCell extends i$1 {
11917
12021
 
11918
12022
  if (hasDateTo && dayDate > departTimestamp && dayDate < returnTimestamp) return this.datepicker.rangeLabelInRange || 'in range';
11919
12023
 
11920
- // After start date, no end date yet, or after end date
12024
+ if (!hasDateTo && dayDate > departTimestamp) return this.datepicker.rangeLabelEndPreview || 'previewing range end';
12025
+
12026
+ // After end date when both dateFrom and dateTo are set.
11921
12027
  return this.datepicker.rangeLabelAfterRange || 'after range';
11922
12028
  }
11923
12029
 
@@ -11930,7 +12036,7 @@ class AuroCalendarCell extends i$1 {
11930
12036
  */
11931
12037
  isDepartDate(day, dateFrom) {
11932
12038
  const parsedDateFrom = parseInt(dateFrom, 10);
11933
- const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
12039
+ const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
11934
12040
 
11935
12041
  return this.selected && day.date === departTimestamp;
11936
12042
  }
@@ -11945,7 +12051,7 @@ class AuroCalendarCell extends i$1 {
11945
12051
  */
11946
12052
  isReturnDate(day, dateFrom, dateTo) {
11947
12053
  const parsedDateTo = parseInt(dateTo, 10);
11948
- const returnTimestamp = startOfDay$1(parsedDateTo * 1000) / 1000;
12054
+ const returnTimestamp = new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000;
11949
12055
 
11950
12056
  return this.selected && day.date === returnTimestamp && dateFrom;
11951
12057
  }
@@ -12109,6 +12215,7 @@ class AuroCalendarCell extends i$1 {
12109
12215
  setTimeout(() => this.firstUpdated(), 0);
12110
12216
  return;
12111
12217
  }
12218
+ this.calendar = calendar;
12112
12219
  this.datepicker = calendar.datepicker;
12113
12220
  this._slotContentHandler = () => {
12114
12221
  this.handleSlotContent();
@@ -12166,12 +12273,13 @@ class AuroCalendarCell extends i$1 {
12166
12273
  this._cachedButton = this.shadowRoot.querySelector('button.day');
12167
12274
  });
12168
12275
 
12169
- // Update host-level aria attributes for ariaActiveDescendantElement.
12276
+ // Keep the host's gridcell aria attributes in sync with the day data.
12170
12277
  this.updateHostAria();
12171
12278
  }
12172
12279
 
12173
12280
  // Update host aria when selection changes (aria-selected, range labels)
12174
- if (properties.has('dateFrom') || properties.has('dateTo') || properties.has('selected')) {
12281
+ // or when isCurrentDate flips (aria-current).
12282
+ if (properties.has('dateFrom') || properties.has('dateTo') || properties.has('selected') || properties.has('isCurrentDate')) {
12175
12283
  this.updateHostAria();
12176
12284
  }
12177
12285
 
@@ -12182,8 +12290,8 @@ class AuroCalendarCell extends i$1 {
12182
12290
  }
12183
12291
 
12184
12292
  /**
12185
- * Updates ARIA attributes on the host element so that
12186
- * ariaActiveDescendantElement can expose cell info to the SR.
12293
+ * Sets host-level ARIA so each cell exposes its date, selection state,
12294
+ * and blackout status to assistive tech browsing the month grid.
12187
12295
  * @private
12188
12296
  * @returns {void}
12189
12297
  */
@@ -12192,16 +12300,27 @@ class AuroCalendarCell extends i$1 {
12192
12300
 
12193
12301
  const outOfRange = this.isOutOfRange(this.day, this.min, this.max);
12194
12302
  if (outOfRange) {
12303
+ // Strip every aria attribute the in-range branch may have set on a
12304
+ // previous render — if a cell flips from in-range to out-of-range
12305
+ // (calendar shifts months, minDate/maxDate change, etc.).
12195
12306
  this.removeAttribute('role');
12196
12307
  this.removeAttribute('aria-label');
12308
+ this.removeAttribute('aria-current');
12309
+ this.removeAttribute('aria-selected');
12310
+ this.removeAttribute('aria-disabled');
12197
12311
  return;
12198
12312
  }
12199
12313
 
12200
- // The host acts as the gridcell for ariaActiveDescendantElement.
12201
12314
  this.setAttribute('role', 'gridcell');
12202
12315
  this.setAttribute('aria-label', this.getAriaLabel());
12203
12316
  this.setAttribute('aria-selected', this.selected ? 'true' : 'false');
12204
12317
 
12318
+ if (this.isCurrentDate) {
12319
+ this.setAttribute('aria-current', 'date');
12320
+ } else {
12321
+ this.removeAttribute('aria-current');
12322
+ }
12323
+
12205
12324
  if (this.isBlackout()) {
12206
12325
  this.setAttribute('aria-disabled', 'true');
12207
12326
  } else {
@@ -12216,7 +12335,7 @@ class AuroCalendarCell extends i$1 {
12216
12335
  * @returns {void}
12217
12336
  */
12218
12337
  focusButton() {
12219
- const button = this._cachedButton || this.shadowRoot.querySelector('button:not([aria-hidden])');
12338
+ const button = this._cachedButton || this.shadowRoot.querySelector('button:not([disabled])');
12220
12339
  if (button) {
12221
12340
  button.focus({ focusVisible: true });
12222
12341
  }
@@ -12224,7 +12343,9 @@ class AuroCalendarCell extends i$1 {
12224
12343
 
12225
12344
  /**
12226
12345
  * Imperatively marks this cell as active without triggering a Lit re-render.
12227
- * Note: buttons stay tabindex="-1" because the grid uses aria-activedescendant.
12346
+ * Buttons stay tabindex="-1" because DOM focus stays on the grid wrapper
12347
+ * arrow keys move the active cell imperatively and the live region carries
12348
+ * the SR announcement.
12228
12349
  * @returns {void}
12229
12350
  */
12230
12351
  setActive() {
@@ -12266,10 +12387,13 @@ class AuroCalendarCell extends i$1 {
12266
12387
  if (!btn || !this.day) return;
12267
12388
 
12268
12389
  const dayDate = this.day.date;
12269
- const departTimestamp = startOfDay$1(dateFrom * 1000) / 1000;
12390
+ const departTimestamp = new Date(dateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
12270
12391
  const isInRange = dayDate > departTimestamp && dayDate < hoveredDate;
12271
- const isLastHovered = dayDate === hoveredDate && hoveredDate > departTimestamp;
12272
- const isDepartWithPreview = dayDate === departTimestamp && hoveredDate > departTimestamp;
12392
+ // `>=` so hovering the depart cell itself (a same-day round-trip
12393
+ // preview) still surfaces a visual cue: the depart cell receives both
12394
+ // rangeDepartDate and lastHoveredDate.
12395
+ const isLastHovered = dayDate === hoveredDate && hoveredDate >= departTimestamp;
12396
+ const isDepartWithPreview = dayDate === departTimestamp && hoveredDate >= departTimestamp;
12273
12397
 
12274
12398
  btn.classList.toggle('inRange', isInRange);
12275
12399
  btn.classList.toggle('lastHoveredDate', isLastHovered);
@@ -12327,7 +12451,6 @@ class AuroCalendarCell extends i$1 {
12327
12451
  @focus="${outOfRange ? undefined : this.handleFocus}"
12328
12452
  class="${e$4(buttonClasses)}"
12329
12453
  ?disabled="${outOfRange}"
12330
- aria-hidden="${outOfRange ? 'true' : A$4}"
12331
12454
  tabindex="-1">
12332
12455
  <div class="buttonWrapper" aria-hidden="true">
12333
12456
  <div class="currentDayMarker">${this.day?.title || A$4}</div>
@@ -13439,7 +13562,7 @@ class AuroBibtemplate extends i$1 {
13439
13562
  }
13440
13563
  }
13441
13564
 
13442
- var formkitVersion$2 = '202606241801';
13565
+ var formkitVersion$2 = '202606252104';
13443
13566
 
13444
13567
  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
13568
  `,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 +13685,11 @@ class AuroCalendar extends RangeDatepicker {
13562
13685
  this.calendarRangeMonths = null;
13563
13686
 
13564
13687
  /**
13565
- * Legacy array of disabled-date timestamps.
13688
+ * @deprecated Use `auro-datepicker.blackoutDates` (an array of
13689
+ * `YYYY-MM-DD` ISO strings) instead. This legacy array of Unix
13690
+ * timestamps is still honored for backward compatibility but emits a
13691
+ * one-time `console.debug` the first time a non-empty value is observed.
13692
+ * Support will be removed in a future major release.
13566
13693
  * @private
13567
13694
  */
13568
13695
  this.disabledDays = [];
@@ -13819,17 +13946,44 @@ class AuroCalendar extends RangeDatepicker {
13819
13946
  * @returns {void}
13820
13947
  */
13821
13948
  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 });
13949
+ this._afterMonthRender(() => {
13950
+ const newDate = this.computeActiveDate({ skipDateFrom: true });
13827
13951
 
13828
- if (newDate !== null && newDate !== undefined) {
13829
- this.activeCellDate = newDate;
13830
- this.setActiveCell(this.activeCellDate);
13831
- }
13832
- });
13952
+ if (newDate !== null && newDate !== undefined) {
13953
+ this.activeCellDate = newDate;
13954
+ this.setActiveCell(this.activeCellDate);
13955
+ }
13956
+ });
13957
+ }
13958
+
13959
+ /**
13960
+ * Schedules `callback` two animation frames out, giving the child
13961
+ * `auro-formkit-calendar-month` and `auro-formkit-calendar-cell` elements
13962
+ * a full render-and-paint cycle to settle before the callback reads or
13963
+ * mutates DOM.
13964
+ *
13965
+ * Why two frames, not one:
13966
+ * 1. Lit batches property updates and renders in a microtask, so frame N
13967
+ * schedules the render but the new DOM may not be painted yet.
13968
+ * 2. Cells re-cache `_cachedButton` inside their own `updateComplete.then`,
13969
+ * which also lands a tick later. Reading buttons from frame N+1
13970
+ * (after both renders + cache refresh have flushed) reliably hits the
13971
+ * new month's cells.
13972
+ *
13973
+ * Used by every code path that calls `handleNextMonth`/`handlePrevMonth`
13974
+ * and then needs to inspect the freshly-rendered cells (cross-month
13975
+ * keyboard nav, boundary events, `updateActiveCellForVisibleMonth`).
13976
+ * Do NOT collapse to a single rAF — it intermittently lands before
13977
+ * `_cachedButton` is refreshed, which silently breaks focus restoration
13978
+ * and `setActiveCell` lookups.
13979
+ * @private
13980
+ * @param {() => void} callback - Runs once after the month re-render and
13981
+ * the cells' button caches have refreshed.
13982
+ * @returns {void}
13983
+ */
13984
+ _afterMonthRender(callback) {
13985
+ requestAnimationFrame(() => {
13986
+ requestAnimationFrame(callback);
13833
13987
  });
13834
13988
  }
13835
13989
 
@@ -13947,6 +14101,47 @@ class AuroCalendar extends RangeDatepicker {
13947
14101
  return Array.from(this.shadowRoot.querySelectorAll('auro-formkit-calendar-month'));
13948
14102
  }
13949
14103
 
14104
+ /**
14105
+ * Picks the focusable cell whose date is closest to targetTs. Used as a
14106
+ * fallback after a month-boundary nav when the exact target date isn't
14107
+ * focusable — typically because the month re-render lagged or the date
14108
+ * was filtered out by isOutOfRange. When two cells are equidistant, the
14109
+ * navigation direction breaks the tie so the user moves the way they
14110
+ * pressed (forward → later cell, backward → earlier cell).
14111
+ * @private
14112
+ * @param {Array} cells - Focusable cells from getAllFocusableCells.
14113
+ * @param {Number} targetTs - Desired Unix timestamp (seconds).
14114
+ * @param {'next'|'prev'} direction - Navigation direction.
14115
+ * @returns {Object|null} The nearest cell, or null when cells is empty.
14116
+ */
14117
+ pickNearestCell(cells, targetTs, direction) {
14118
+ if (!cells.length) {
14119
+ return null;
14120
+ }
14121
+ const forward = direction === 'next';
14122
+ let best = null;
14123
+ let bestDelta = Infinity;
14124
+ cells.forEach((cell) => {
14125
+ if (!cell.day) {
14126
+ return;
14127
+ }
14128
+ const distance = Math.abs(cell.day.date - targetTs);
14129
+ if (distance < bestDelta) {
14130
+ best = cell;
14131
+ bestDelta = distance;
14132
+ return;
14133
+ }
14134
+ if (distance === bestDelta && best) {
14135
+ if (forward && cell.day.date > best.day.date) {
14136
+ best = cell;
14137
+ } else if (!forward && cell.day.date < best.day.date) {
14138
+ best = cell;
14139
+ }
14140
+ }
14141
+ });
14142
+ return best;
14143
+ }
14144
+
13950
14145
  /**
13951
14146
  * Gets all focusable cells across all rendered months.
13952
14147
  * @private
@@ -13963,9 +14158,9 @@ class AuroCalendar extends RangeDatepicker {
13963
14158
 
13964
14159
  /**
13965
14160
  * 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.
14161
+ * Uses imperative DOM manipulation — no Lit re-render triggered. DOM focus
14162
+ * stays on the grid wrapper; the live region (see getOrCreateLiveRegion)
14163
+ * is what announces the active cell to assistive tech.
13969
14164
  * @param {Number} date - Unix timestamp of the cell to activate.
13970
14165
  * @returns {void}
13971
14166
  */
@@ -14046,6 +14241,63 @@ class AuroCalendar extends RangeDatepicker {
14046
14241
  this.clearRangePreview();
14047
14242
  }
14048
14243
 
14244
+ /**
14245
+ * Returns a memoized Set of blackout timestamps (seconds) drawn from both
14246
+ * the legacy `disabledDays` array and the datepicker's ISO `blackoutDates`.
14247
+ * The cache invalidates when either source array's reference changes, which
14248
+ * matches Lit's own reactive identity semantics for array properties.
14249
+ * @private
14250
+ * @returns {Set<Number>}
14251
+ */
14252
+ _getBlackoutSet() {
14253
+ // Guard with Array.isArray so a non-array truthy value (string, object,
14254
+ // etc.) is treated as "no legacy disabledDays" — keeps the deprecation
14255
+ // warning and the memoization key consistent with what buildBlackoutSet
14256
+ // will actually consume (also an Array.isArray check).
14257
+ const disabledDays = Array.isArray(this.disabledDays) ? this.disabledDays : [];
14258
+ const blackoutDates = this.datepicker?.blackoutDates;
14259
+ if (this._blackoutSet &&
14260
+ this._cachedBlackoutDisabledDays === disabledDays &&
14261
+ this._cachedBlackoutDates === blackoutDates) {
14262
+ return this._blackoutSet;
14263
+ }
14264
+
14265
+ if (disabledDays.length > 0) {
14266
+ this._warnDisabledDaysDeprecated();
14267
+ }
14268
+
14269
+ this._blackoutSet = buildBlackoutSet(disabledDays, blackoutDates);
14270
+ this._cachedBlackoutDisabledDays = disabledDays;
14271
+ this._cachedBlackoutDates = blackoutDates;
14272
+ return this._blackoutSet;
14273
+ }
14274
+
14275
+ /**
14276
+ * Per-class flag that gates the `disabledDays` deprecation warning so it
14277
+ * fires exactly once per page no matter how many calendars or rebuild
14278
+ * cycles encounter the legacy array.
14279
+ * @private
14280
+ */
14281
+ static _warnedDisabledDaysDeprecation = false;
14282
+
14283
+ /**
14284
+ * One-time `console.debug` directing consumers from the legacy
14285
+ * `disabledDays` Unix-timestamp API to the ISO `blackoutDates` API. Fires
14286
+ * the first time `_getBlackoutSet` rebuilds from a non-empty
14287
+ * `disabledDays`; subsequent calls (on this or any other AuroCalendar
14288
+ * instance on the page) are silent.
14289
+ * @private
14290
+ * @returns {void}
14291
+ */
14292
+ _warnDisabledDaysDeprecated() {
14293
+ if (AuroCalendar._warnedDisabledDaysDeprecation) {
14294
+ return;
14295
+ }
14296
+ AuroCalendar._warnedDisabledDaysDeprecation = true;
14297
+ // eslint-disable-next-line no-console
14298
+ 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.');
14299
+ }
14300
+
14049
14301
  /**
14050
14302
  * Computes the initial active date from data properties alone — no DOM required.
14051
14303
  * Priority:
@@ -14090,21 +14342,10 @@ class AuroCalendar extends RangeDatepicker {
14090
14342
  const minTs = Number.isFinite(rawMin) ? rawMin : -Infinity;
14091
14343
  const maxTs = Number.isFinite(rawMax) ? rawMax : Infinity;
14092
14344
 
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
- }
14345
+ // Build a Set of blackout timestamps for O(1) lookup. Memoized by the
14346
+ // identity of the source arrays so rapid month nav doesn't rebuild the
14347
+ // Set (and re-parse every ISO string) on every keypress.
14348
+ const blackoutSet = this._getBlackoutSet();
14108
14349
 
14109
14350
  /**
14110
14351
  * A date (unix timestamp in seconds, midnight-aligned) is "enabled" when
@@ -14300,8 +14541,8 @@ class AuroCalendar extends RangeDatepicker {
14300
14541
 
14301
14542
  /**
14302
14543
  * 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.
14544
+ * Focus stays on the grid wrapper; only the visual active-cell indicator
14545
+ * changes. The live region announces the new active cell.
14305
14546
  * @private
14306
14547
  * @param {KeyboardEvent} event - The keyboard event.
14307
14548
  * @returns {void}
@@ -14366,21 +14607,21 @@ class AuroCalendar extends RangeDatepicker {
14366
14607
  } else {
14367
14608
  this.handlePrevMonth({ skipActiveUpdate: true });
14368
14609
  }
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];
14610
+ this._afterMonthRender(() => {
14611
+ const cells = this.getAllFocusableCells();
14612
+ const target = cells.find((cell) => cell.day && cell.day.date === targetTs);
14613
+ if (target) {
14614
+ this.setActiveCell(target.day.date);
14615
+ this.handleCellFocused({ detail: { date: target.day.date } });
14616
+ } else {
14617
+ const fallback = this.pickNearestCell(cells, targetTs, navDir);
14618
+ if (fallback) {
14378
14619
  this.setActiveCell(fallback.day.date);
14379
14620
  this.handleCellFocused({ detail: { date: fallback.day.date } });
14380
14621
  }
14381
- // Re-focus grid wrapper after month change re-render
14382
- this.focusActiveCell();
14383
- });
14622
+ }
14623
+ // Re-focus grid wrapper after month change re-render
14624
+ this.focusActiveCell();
14384
14625
  });
14385
14626
  }
14386
14627
  }
@@ -14406,26 +14647,20 @@ class AuroCalendar extends RangeDatepicker {
14406
14647
  } else {
14407
14648
  this.handlePrevMonth({ skipActiveUpdate: true });
14408
14649
  }
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
- }
14650
+ this._afterMonthRender(() => {
14651
+ const cells = this.getAllFocusableCells();
14652
+ const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
14653
+ if (target) {
14654
+ this.setActiveCell(target.day.date);
14655
+ this.handleCellFocused({ detail: { date: target.day.date } });
14656
+ } else {
14657
+ const nearest = this.pickNearestCell(cells, targetDate, navDirection);
14658
+ if (nearest) {
14424
14659
  this.setActiveCell(nearest.day.date);
14425
14660
  this.handleCellFocused({ detail: { date: nearest.day.date } });
14426
14661
  }
14427
- this.focusActiveCell();
14428
- });
14662
+ }
14663
+ this.focusActiveCell();
14429
14664
  });
14430
14665
  }
14431
14666
  }
@@ -14475,19 +14710,17 @@ class AuroCalendar extends RangeDatepicker {
14475
14710
  }
14476
14711
 
14477
14712
  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
- });
14713
+ this._afterMonthRender(() => {
14714
+ const cells = this.getAllFocusableCells();
14715
+ const target = cells.find((cell) => cell.day && cell.day.date === nextTs);
14716
+ if (target) {
14717
+ this.setActiveCell(target.day.date);
14718
+ this.focusActiveCell();
14719
+ } else if (cells.length > 0) {
14720
+ // Fallback: first cell of the last rendered month
14721
+ this.setActiveCell(cells[cells.length - 1].day.date);
14722
+ this.focusActiveCell();
14723
+ }
14491
14724
  });
14492
14725
  } else if (direction === 'prev' && this.showPrevMonthBtn) {
14493
14726
  // Navigate to previous month and focus the computed previous date.
@@ -14501,19 +14734,17 @@ class AuroCalendar extends RangeDatepicker {
14501
14734
  }
14502
14735
 
14503
14736
  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
- });
14737
+ this._afterMonthRender(() => {
14738
+ const cells = this.getAllFocusableCells();
14739
+ const target = cells.find((cell) => cell.day && cell.day.date === prevTs);
14740
+ if (target) {
14741
+ this.setActiveCell(target.day.date);
14742
+ this.focusActiveCell();
14743
+ } else if (cells.length > 0) {
14744
+ // Fallback: last cell of the first rendered month
14745
+ this.setActiveCell(cells[0].day.date);
14746
+ this.focusActiveCell();
14747
+ }
14517
14748
  });
14518
14749
  }
14519
14750
  } else if (key === 'ArrowDown' || key === 'ArrowUp') {
@@ -14541,20 +14772,18 @@ class AuroCalendar extends RangeDatepicker {
14541
14772
  } else {
14542
14773
  this.handlePrevMonth({ skipActiveUpdate: true });
14543
14774
  }
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
- });
14775
+ this._afterMonthRender(() => {
14776
+ const cells = this.getAllFocusableCells();
14777
+ const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
14778
+ if (target) {
14779
+ this.setActiveCell(target.day.date);
14780
+ this.focusActiveCell();
14781
+ } else if (cells.length > 0) {
14782
+ // Clamp to nearest focusable cell
14783
+ const nearest = navDirection === 'next' ? cells[0] : cells[cells.length - 1];
14784
+ this.setActiveCell(nearest.day.date);
14785
+ this.focusActiveCell();
14786
+ }
14558
14787
  });
14559
14788
  }
14560
14789
  }
@@ -14593,8 +14822,9 @@ class AuroCalendar extends RangeDatepicker {
14593
14822
  return;
14594
14823
  }
14595
14824
 
14596
- // With aria-activedescendant, the button no longer receives native focus,
14597
- // so we use the debounced live region for the full context announcement.
14825
+ // DOM focus stays on the grid wrapper while arrow keys move the active
14826
+ // cell, so cell buttons never receive native focus. The debounced live
14827
+ // region carries the full-context announcement instead.
14598
14828
  const announcement = this.buildFocusAnnouncement(date);
14599
14829
  this.announceFocusDebounced(announcement);
14600
14830
 
@@ -14664,10 +14894,10 @@ class AuroCalendar extends RangeDatepicker {
14664
14894
  return null;
14665
14895
  }
14666
14896
 
14667
- const departTs = startOfDay$2(parsedFrom * 1000) / 1000;
14897
+ const departTs = new Date(parsedFrom * 1000).setHours(0, 0, 0, 0) / 1000;
14668
14898
  const parsedTo = Number.parseInt(this.dateTo, 10);
14669
14899
  const hasTo = Number.isFinite(parsedTo);
14670
- const returnTs = hasTo ? startOfDay$2(parsedTo * 1000) / 1000 : null;
14900
+ const returnTs = hasTo ? new Date(parsedTo * 1000).setHours(0, 0, 0, 0) / 1000 : null;
14671
14901
 
14672
14902
  if (date === departTs) {
14673
14903
  return this.datepicker.rangeLabelStart || 'range start';
@@ -14681,36 +14911,22 @@ class AuroCalendar extends RangeDatepicker {
14681
14911
  if (hasTo && date > departTs && date < returnTs) {
14682
14912
  return this.datepicker.rangeLabelInRange || 'in range';
14683
14913
  }
14914
+ if (!hasTo && date > departTs) {
14915
+ return this.datepicker.rangeLabelEndPreview || 'previewing range end';
14916
+ }
14684
14917
  return this.datepicker.rangeLabelAfterRange || 'after range';
14685
14918
  }
14686
14919
 
14687
14920
  /**
14688
- * Checks whether a given date is a blackout date.
14921
+ * Checks whether a given date is a blackout date. Delegates to the
14922
+ * memoized `_getBlackoutSet` so the YYYY-MM-DD parsing and the
14923
+ * legacy/ISO merge rules live in exactly one place (see `blackoutUtils.js`).
14689
14924
  * @private
14690
14925
  * @param {Number} dateTs - Unix timestamp (seconds).
14691
14926
  * @returns {Boolean} True if the date is blacked out.
14692
14927
  */
14693
14928
  isDateBlackout(dateTs) {
14694
- // Check legacy disabledDays.
14695
- if (Array.isArray(this.disabledDays) && this.disabledDays.length > 0) {
14696
- if (this.disabledDays.findIndex((day) => parseInt(day, 10) === dateTs) !== -1) {
14697
- return true;
14698
- }
14699
- }
14700
-
14701
- // Check ISO blackoutDates.
14702
- const blackoutDates = this.datepicker?.blackoutDates;
14703
- if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
14704
- const date = new Date(dateTs * 1000);
14705
- const yyyy = date.getFullYear();
14706
- const mm = String(date.getMonth() + 1).padStart(2, '0');
14707
- const dd = String(date.getDate()).padStart(2, '0');
14708
- if (blackoutDates.includes(`${yyyy}-${mm}-${dd}`)) {
14709
- return true;
14710
- }
14711
- }
14712
-
14713
- return false;
14929
+ return this._getBlackoutSet().has(dateTs);
14714
14930
  }
14715
14931
 
14716
14932
  /**
@@ -14877,9 +15093,34 @@ class AuroCalendar extends RangeDatepicker {
14877
15093
  // the last one.
14878
15094
  if (this._announceRafId) {
14879
15095
  cancelAnimationFrame(this._announceRafId);
15096
+ this._announceRafId = null;
14880
15097
  }
15098
+ this._deliverAnnouncement(dateStr, 0);
15099
+ }
15100
+
15101
+ /**
15102
+ * Writes `dateStr` to the live region. If the dropdown's dialog hasn't
15103
+ * mounted yet (so getOrCreateLiveRegion can't attach), retries on the
15104
+ * next animation frame up to MAX_LIVE_REGION_RETRIES instead of silently
15105
+ * dropping the announcement. The retry uses the same `_announceRafId`
15106
+ * the double-rAF below uses, so a newer announceSelection call (or
15107
+ * disconnectedCallback) cancels any in-flight retry.
15108
+ * @private
15109
+ * @param {String} dateStr - The localized date string to announce.
15110
+ * @param {Number} attempts - Number of prior retry attempts.
15111
+ * @returns {void}
15112
+ */
15113
+ _deliverAnnouncement(dateStr, attempts) {
14881
15114
  const liveRegion = this.getOrCreateLiveRegion();
14882
15115
  if (!liveRegion) {
15116
+ const MAX_LIVE_REGION_RETRIES = 10;
15117
+ if (attempts < MAX_LIVE_REGION_RETRIES) {
15118
+ this._announceRafId = requestAnimationFrame(() => {
15119
+ this._deliverAnnouncement(dateStr, attempts + 1);
15120
+ });
15121
+ } else {
15122
+ this._announceRafId = null;
15123
+ }
14883
15124
  return;
14884
15125
  }
14885
15126
 
@@ -15065,7 +15306,7 @@ class AuroCalendar extends RangeDatepicker {
15065
15306
  </button>
15066
15307
  ` : undefined}
15067
15308
  </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}">
15309
+ <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
15310
  ${this.renderAllCalendars()}
15070
15311
  </div>
15071
15312
  </div>
@@ -18974,7 +19215,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$1 {
18974
19215
  }
18975
19216
  };
18976
19217
 
18977
- var formkitVersion$1 = '202606241801';
19218
+ var formkitVersion$1 = '202606252104';
18978
19219
 
18979
19220
  let AuroElement$2 = class AuroElement extends i$1 {
18980
19221
  static get properties() {
@@ -32574,7 +32815,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$1 {
32574
32815
  }
32575
32816
  };
32576
32817
 
32577
- var formkitVersion = '202606241801';
32818
+ var formkitVersion = '202606252104';
32578
32819
 
32579
32820
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
32580
32821
  // See LICENSE in the project root for license information.
@@ -34051,6 +34292,7 @@ class AuroDatePicker extends AuroElement {
34051
34292
  this.rangeLabelBeforeRange = 'before range';
34052
34293
  this.rangeLabelInRange = 'in range';
34053
34294
  this.rangeLabelAfterRange = 'after range';
34295
+ this.rangeLabelEndPreview = 'previewing range end';
34054
34296
  this.blackoutDates = [];
34055
34297
  this.blackoutLabel = 'unavailable';
34056
34298
  this.navLabelPrevMonth = 'Previous month';
@@ -34150,6 +34392,22 @@ class AuroDatePicker extends AuroElement {
34150
34392
  */
34151
34393
  this.handleClick = this.handleClick.bind(this);
34152
34394
 
34395
+ /**
34396
+ * Single AbortController shared by every listener registered in the
34397
+ * configure* methods. Lets disconnectedCallback tear all of them down
34398
+ * with one abort() call.
34399
+ *
34400
+ * The genuine leak risk is the listeners attached to children that can
34401
+ * outlive the host if they get reparented — `this.dropdown`,
34402
+ * `this.calendar`, and the inputs inside the dropdown's slot.
34403
+ * Listeners attached to `this` (e.g. focusin/focusout on the host)
34404
+ * form a self-contained reference graph that the GC can collect with
34405
+ * the host anyway, but they share the same signal so the cleanup
34406
+ * pattern stays uniform across all configure* sites.
34407
+ * @private
34408
+ */
34409
+ this._listenerAbortController = new AbortController();
34410
+
34153
34411
  /**
34154
34412
  * @private
34155
34413
  */
@@ -34198,6 +34456,7 @@ class AuroDatePicker extends AuroElement {
34198
34456
 
34199
34457
  /**
34200
34458
  * Label announced for blackout (disabled but in-range) date cells.
34459
+ * @default 'unavailable'
34201
34460
  */
34202
34461
  blackoutLabel: {
34203
34462
  type: String,
@@ -34214,6 +34473,7 @@ class AuroDatePicker extends AuroElement {
34214
34473
 
34215
34474
  /**
34216
34475
  * Accessible label for the calendar grid containing the days of the month.
34476
+ * @default 'Calendar days of the month'
34217
34477
  */
34218
34478
  calendarGridLabel: {
34219
34479
  type: String,
@@ -34376,6 +34636,7 @@ class AuroDatePicker extends AuroElement {
34376
34636
 
34377
34637
  /**
34378
34638
  * Accessible label for the next month navigation button.
34639
+ * @default 'Next month'
34379
34640
  */
34380
34641
  navLabelNextMonth: {
34381
34642
  type: String,
@@ -34384,6 +34645,7 @@ class AuroDatePicker extends AuroElement {
34384
34645
 
34385
34646
  /**
34386
34647
  * Accessible label for the previous month navigation button.
34648
+ * @default 'Previous month'
34387
34649
  */
34388
34650
  navLabelPrevMonth: {
34389
34651
  type: String,
@@ -34461,7 +34723,11 @@ class AuroDatePicker extends AuroElement {
34461
34723
  },
34462
34724
 
34463
34725
  /**
34464
- * Label announced for cells after the range (or after start when no end is selected).
34726
+ * Label announced for cells after a fully selected range (both
34727
+ * `dateFrom` and `dateTo` are set). While a range is still being
34728
+ * picked (`dateFrom` set, `dateTo` unset), focused cells past the
34729
+ * start use `rangeLabelEndPreview` instead.
34730
+ * @default 'after range'
34465
34731
  */
34466
34732
  rangeLabelAfterRange: {
34467
34733
  type: String,
@@ -34470,6 +34736,7 @@ class AuroDatePicker extends AuroElement {
34470
34736
 
34471
34737
  /**
34472
34738
  * Label announced for cells before the range start.
34739
+ * @default 'before range'
34473
34740
  */
34474
34741
  rangeLabelBeforeRange: {
34475
34742
  type: String,
@@ -34478,14 +34745,27 @@ class AuroDatePicker extends AuroElement {
34478
34745
 
34479
34746
  /**
34480
34747
  * Label announced for the range end date cell.
34748
+ * @default 'range end'
34481
34749
  */
34482
34750
  rangeLabelEnd: {
34483
34751
  type: String,
34484
34752
  reflect: true
34485
34753
  },
34486
34754
 
34755
+ /**
34756
+ * Label announced for the focused cell while previewing a range end
34757
+ * (dateFrom set, dateTo not yet selected). Tells AT users that
34758
+ * pressing Enter would commit this cell as the range end.
34759
+ * @default 'previewing range end'
34760
+ */
34761
+ rangeLabelEndPreview: {
34762
+ type: String,
34763
+ reflect: true
34764
+ },
34765
+
34487
34766
  /**
34488
34767
  * Label announced for cells within the selected range.
34768
+ * @default 'in range'
34489
34769
  */
34490
34770
  rangeLabelInRange: {
34491
34771
  type: String,
@@ -34494,6 +34774,7 @@ class AuroDatePicker extends AuroElement {
34494
34774
 
34495
34775
  /**
34496
34776
  * Label announced for the range start date cell.
34777
+ * @default 'range start'
34497
34778
  */
34498
34779
  rangeLabelStart: {
34499
34780
  type: String,
@@ -34501,7 +34782,7 @@ class AuroDatePicker extends AuroElement {
34501
34782
  },
34502
34783
 
34503
34784
  /**
34504
- * Dates that the user should have for reference as part of their decision making when selecting a date.
34785
+ * Dates that the user should have for reference as part of their decision-making when selecting a date.
34505
34786
  * This should be a JSON string array of ISO date strings (`YYYY-MM-DD`).
34506
34787
  */
34507
34788
  referenceDates: {
@@ -34858,10 +35139,26 @@ class AuroDatePicker extends AuroElement {
34858
35139
  // ─── Vendor calendar time conversions ─────────────────────────────────────
34859
35140
 
34860
35141
  /**
34861
- * Converts a Unix timestamp (seconds) from the vendor calendar to an ISO date string.
35142
+ * Converts a Unix timestamp (seconds) from the vendored range-datepicker
35143
+ * (`src/vendor/wc-range-datepicker/day.js`) to an ISO date string.
35144
+ *
35145
+ * Timezone contract:
35146
+ * - INPUT: `time` is assumed to be the seconds-since-epoch of **local
35147
+ * midnight** for the intended calendar day. The vendor's Day constructor
35148
+ * builds it via `date-fns format(date, 't')` from a locally-constructed
35149
+ * Date, so this assumption currently holds end-to-end.
35150
+ * - OUTPUT: `dateFormatter.toISOFormatString` reads the Date's local
35151
+ * getFullYear/getMonth/getDate components, so the returned YYYY-MM-DD
35152
+ * string matches the local calendar day.
35153
+ *
35154
+ * If the vendor ever switches to emitting UTC-midnight timestamps, this
35155
+ * conversion will silently shift the returned date by one day in zones
35156
+ * west of UTC. Any vendor swap should re-verify this contract; the TZ
35157
+ * regression suite (`npm run test:hst`, UTC-10) will catch the symptom.
35158
+ *
34862
35159
  * @private
34863
- * @param {number} time - Unix timestamp in seconds.
34864
- * @returns {string} ISO date string (yyyy-mm-dd).
35160
+ * @param {number} time - Unix timestamp (seconds), local midnight of the day.
35161
+ * @returns {string} ISO date string (yyyy-mm-dd) reflecting the local calendar day.
34865
35162
  */
34866
35163
  convertWcTimeToDate(time) {
34867
35164
  return dateFormatter$1.toISOFormatString(new Date(time * 1000));
@@ -34963,8 +35260,8 @@ class AuroDatePicker extends AuroElement {
34963
35260
  }
34964
35261
  }
34965
35262
 
34966
- // Focus the calendar grid wrapper (aria-activedescendant handles
34967
- // the SR announcement for the active cell).
35263
+ // Focus the calendar grid wrapper. The live region (announced just
35264
+ // below) handles the SR announcement for the active cell.
34968
35265
  if (activeCell) {
34969
35266
  this.calendar.focusActiveCell();
34970
35267
 
@@ -35014,11 +35311,13 @@ class AuroDatePicker extends AuroElement {
35014
35311
  this.dropdown.bibDialogLabel = labelElement.textContent.trim() || undefined;
35015
35312
  }
35016
35313
 
35314
+ const { signal } = this._listenerAbortController;
35315
+
35017
35316
  this.dropdown.addEventListener('auroDropdown-triggerClick', () => {
35018
35317
  if (!this.isPopoverVisible) {
35019
35318
  this.dropdown.show();
35020
35319
  }
35021
- });
35320
+ }, { signal });
35022
35321
 
35023
35322
  this.dropdown.addEventListener('auroDropdown-toggled', () => {
35024
35323
  this.notifyDatepickerToggled();
@@ -35036,7 +35335,7 @@ class AuroDatePicker extends AuroElement {
35036
35335
  if (this.valueObject) {
35037
35336
  this.centralDate = this.value;
35038
35337
  } else if (!this.centralDate && !this.calendarStartDate && !this.minDate) {
35039
- this.centralDate = new Date();
35338
+ this.centralDate = dateFormatter$1.toISOFormatString(new Date());
35040
35339
  }
35041
35340
  }
35042
35341
 
@@ -35116,7 +35415,7 @@ class AuroDatePicker extends AuroElement {
35116
35415
  this.forceScrollOnNextMobileCalendarRender = false;
35117
35416
  }, 0);
35118
35417
  }
35119
- });
35418
+ }, { signal });
35120
35419
 
35121
35420
  // Handle responsive strategy changes while the dropdown is open
35122
35421
  // (e.g. resizing from desktop → mobile or vice versa).
@@ -35163,7 +35462,7 @@ class AuroDatePicker extends AuroElement {
35163
35462
  });
35164
35463
  });
35165
35464
  }
35166
- });
35465
+ }, { signal });
35167
35466
  }
35168
35467
 
35169
35468
  /**
@@ -35176,6 +35475,8 @@ class AuroDatePicker extends AuroElement {
35176
35475
 
35177
35476
  this.inputList = [...this.dropdown.querySelectorAll(this.inputTag._$litStatic$)];
35178
35477
 
35478
+ const { signal } = this._listenerAbortController;
35479
+
35179
35480
  this.inputList.forEach((input, index) => {
35180
35481
  input.addEventListener('input', (event) => {
35181
35482
  event.stopPropagation();
@@ -35187,7 +35488,7 @@ class AuroDatePicker extends AuroElement {
35187
35488
  }
35188
35489
 
35189
35490
  this.notifyValueChanged();
35190
- });
35491
+ }, { signal });
35191
35492
 
35192
35493
  input.addEventListener('auroFormElement-validated', (evt) => {
35193
35494
  // not to bubble up input's validated event.
@@ -35203,7 +35504,7 @@ class AuroDatePicker extends AuroElement {
35203
35504
  this.validity = evt.detail.validity;
35204
35505
  this.errorMessage = evt.detail.message;
35205
35506
  }
35206
- });
35507
+ }, { signal });
35207
35508
  });
35208
35509
  }
35209
35510
 
@@ -35217,6 +35518,8 @@ class AuroDatePicker extends AuroElement {
35217
35518
  this.calendar.datepicker = this;
35218
35519
  this.calendar.dropdown = this.dropdown;
35219
35520
 
35521
+ const { signal } = this._listenerAbortController;
35522
+
35220
35523
  this.calendar.addEventListener('auroCalendar-dateSelected', () => {
35221
35524
  if (this.inputList[0].value !== this.calendar.dateFrom && this.calendar.dateFrom !== undefined) {
35222
35525
  this.inputList[0].value = this.convertWcTimeToDate(this.calendar.dateFrom);
@@ -35225,11 +35528,11 @@ class AuroDatePicker extends AuroElement {
35225
35528
  if (this.inputList[1] && this.calendar.dateTo && this.inputList[1].value !== this.calendar.dateTo) {
35226
35529
  this.inputList[1].value = this.convertWcTimeToDate(this.calendar.dateTo);
35227
35530
  }
35228
- });
35531
+ }, { signal });
35229
35532
 
35230
35533
  this.calendar.addEventListener('auroCalendar-dismissRequest', () => {
35231
35534
  this.dropdown.hide();
35232
- });
35535
+ }, { signal });
35233
35536
 
35234
35537
  this.calendar.addEventListener('auroCalendar-centralDateChanged', (event) => {
35235
35538
  const match = this.centralDateObject && this.util.datesMatch(event.detail.date, this.centralDateObject);
@@ -35239,7 +35542,7 @@ class AuroDatePicker extends AuroElement {
35239
35542
  }
35240
35543
 
35241
35544
  this.notifyMonthChanged(event);
35242
- });
35545
+ }, { signal });
35243
35546
  }
35244
35547
 
35245
35548
  /**
@@ -35248,10 +35551,17 @@ class AuroDatePicker extends AuroElement {
35248
35551
  * @returns {void}
35249
35552
  */
35250
35553
  configureDatepicker() {
35554
+ // These listeners are on `this` (the host), so they would GC with the
35555
+ // host even without the abort signal — see the leak rationale on
35556
+ // `_listenerAbortController`. The signal is still passed for uniform
35557
+ // cleanup semantics with the child-element listeners in the other
35558
+ // configure* methods.
35559
+ const { signal } = this._listenerAbortController;
35560
+
35251
35561
  this.addEventListener('focusin', () => {
35252
35562
  this.touched = true;
35253
35563
  this.hasFocus = true;
35254
- });
35564
+ }, { signal });
35255
35565
 
35256
35566
  this.addEventListener('focusout', () => {
35257
35567
  this.hasFocus = false;
@@ -35263,7 +35573,7 @@ class AuroDatePicker extends AuroElement {
35263
35573
  if (!this.matches(':focus-within')) {
35264
35574
  this.validate();
35265
35575
  }
35266
- });
35576
+ }, { signal });
35267
35577
 
35268
35578
  if (this.valueObject) {
35269
35579
  this.calendar.dateFrom = this.convertToWcValidTime(this.valueObject);
@@ -35461,6 +35771,36 @@ class AuroDatePicker extends AuroElement {
35461
35771
  return this.validity !== undefined && this.validity !== 'valid';
35462
35772
  }
35463
35773
 
35774
+ /**
35775
+ * Per-class dedup set used by `_warnInvalidLocale`. Static so the dedup
35776
+ * spans every datepicker instance on the page; lives on the class (not
35777
+ * at module scope) so it stays an encapsulated implementation detail of
35778
+ * this component and does not interfere with WCA's class-JSDoc
35779
+ * attachment.
35780
+ * @private
35781
+ */
35782
+ static _warnedInvalidLocales = new Set();
35783
+
35784
+ /**
35785
+ * Logs a one-time `console.debug` when an unsupported locale falls back to
35786
+ * en-US. Deduped by the offending tag so noisy re-renders that resurface
35787
+ * the same bad value stay quiet, but each new bad value still signals so
35788
+ * consumers can spot the typo or missing tag.
35789
+ * @private
35790
+ * @param {string|undefined} badLocale - The locale value that failed.
35791
+ * @returns {void}
35792
+ */
35793
+ _warnInvalidLocale(badLocale) {
35794
+ const key = String(badLocale ?? '');
35795
+ const seen = AuroDatePicker._warnedInvalidLocales;
35796
+ if (seen.has(key)) {
35797
+ return;
35798
+ }
35799
+ seen.add(key);
35800
+ // eslint-disable-next-line no-console
35801
+ 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".`);
35802
+ }
35803
+
35464
35804
  /**
35465
35805
  * Lifecycle method to check if the locale is valid.
35466
35806
  * @ignore
@@ -35471,10 +35811,15 @@ class AuroDatePicker extends AuroElement {
35471
35811
  if (changedProperties.has('locale')) {
35472
35812
  try {
35473
35813
  const supported = Intl.DateTimeFormat.supportedLocalesOf([this.locale], { localeMatcher: 'lookup' });
35474
- this._validLocale = supported.length > 0 ? this.locale : 'en-US';
35814
+ if (supported.length > 0) {
35815
+ this._validLocale = this.locale;
35816
+ } else {
35817
+ this._validLocale = 'en-US';
35818
+ this._warnInvalidLocale(this.locale);
35819
+ }
35475
35820
  } catch {
35476
- console.debug(`[AuroDatePicker] The locale "${this.locale}" is not valid. Falling back to "en-US".`); // eslint-disable-line no-console
35477
35821
  this._validLocale = 'en-US';
35822
+ this._warnInvalidLocale(this.locale);
35478
35823
  }
35479
35824
 
35480
35825
  const previousLocaleFormat = getDateFormatFromLocale$1(changedProperties.get('locale'));
@@ -35556,8 +35901,6 @@ class AuroDatePicker extends AuroElement {
35556
35901
  // Skip centralDate update when user clicked a cell in range mode
35557
35902
  // to prevent the displayed months from shifting
35558
35903
  this.centralDate = this.value;
35559
- //TODO: TEST THIS CHANGE
35560
- // this.calendarRenderUtil.updateCentralDate(this, this.value);
35561
35904
  }
35562
35905
 
35563
35906
  this.setHasValue();
@@ -35617,8 +35960,6 @@ class AuroDatePicker extends AuroElement {
35617
35960
  // Skip centralDate update when user clicked a cell in range mode
35618
35961
  // to prevent the displayed months from shifting
35619
35962
  this.centralDate = this.valueEnd;
35620
- // TODO: TEST THIS CHANGE
35621
- // this.calendarRenderUtil.updateCentralDate(this, this.formattedValueEnd);
35622
35963
  }
35623
35964
 
35624
35965
  this.validate();
@@ -35760,7 +36101,7 @@ class AuroDatePicker extends AuroElement {
35760
36101
  * @returns {void}
35761
36102
  */
35762
36103
  configureClickHandler() {
35763
- this.addEventListener('click', this.handleClick);
36104
+ this.addEventListener('click', this.handleClick, { signal: this._listenerAbortController.signal });
35764
36105
  }
35765
36106
 
35766
36107
  firstUpdated() {
@@ -35768,6 +36109,15 @@ class AuroDatePicker extends AuroElement {
35768
36109
  // Add the tag name as an attribute if it is different than the component name
35769
36110
  this.runtimeUtils.handleComponentTagRename(this, 'auro-datepicker');
35770
36111
 
36112
+ // If the element was disconnected before this first render finished,
36113
+ // disconnectedCallback's microtask already aborted the controller. The
36114
+ // connectedCallback reinit guard skips that case because `hasUpdated`
36115
+ // is still false. Mint a fresh controller here so configure* registers
36116
+ // listeners against a live signal.
36117
+ if (this._listenerAbortController.signal.aborted) {
36118
+ this._listenerAbortController = new AbortController();
36119
+ }
36120
+
35771
36121
  this.configureDropdown();
35772
36122
  this.configureInput();
35773
36123
  this.configureCalendar();
@@ -35779,9 +36129,36 @@ class AuroDatePicker extends AuroElement {
35779
36129
  connectedCallback() {
35780
36130
  super.connectedCallback();
35781
36131
 
36132
+ // True reconnect after `disconnectedCallback` aborted our controller:
36133
+ // the existing signal is dead, so listeners registered against it
36134
+ // would never fire. Create a fresh controller and re-run the
36135
+ // configure* wiring (each method is idempotent — it just re-caches
36136
+ // child refs and re-registers listeners against the new signal).
36137
+ // `hasUpdated` gates this so the *first* connect (which precedes
36138
+ // firstUpdated) still falls through to firstUpdated's initial wiring.
36139
+ if (this.hasUpdated && this._listenerAbortController.signal.aborted) {
36140
+ this._listenerAbortController = new AbortController();
36141
+ this.configureDropdown();
36142
+ this.configureInput();
36143
+ this.configureCalendar();
36144
+ this.configureDatepicker();
36145
+ this.configureClickHandler();
36146
+ }
36147
+
35782
36148
  this.locale = this.domHandler.getLocale(this);
35783
36149
  }
35784
36150
 
36151
+ disconnectedCallback() {
36152
+ super.disconnectedCallback();
36153
+ // Defer so that re-parenting (auro-drawer slotting it into a dialog,
36154
+ // for example) does not abort listeners we still need after reconnect.
36155
+ queueMicrotask(() => {
36156
+ if (!this.isConnected) {
36157
+ this._listenerAbortController.abort();
36158
+ }
36159
+ });
36160
+ }
36161
+
35785
36162
  // layout render methods
35786
36163
  // ------------------------------------
35787
36164