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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/components/checkbox/demo/customize.js +22 -0
  2. package/components/checkbox/demo/customize.min.js +1 -1
  3. package/components/checkbox/demo/demo-support.js +1 -0
  4. package/components/checkbox/demo/getting-started.js +22 -0
  5. package/components/checkbox/demo/getting-started.min.js +1 -1
  6. package/components/checkbox/demo/index.js +8 -0
  7. package/components/checkbox/demo/index.min.js +1 -1
  8. package/components/checkbox/demo/styles.scss +1 -0
  9. package/components/checkbox/dist/index.js +1 -1
  10. package/components/checkbox/dist/registered.js +1 -1
  11. package/components/combobox/demo/customize.js +24 -0
  12. package/components/combobox/demo/customize.min.js +119 -96
  13. package/components/combobox/demo/demo-support.js +1 -0
  14. package/components/combobox/demo/getting-started.js +21 -0
  15. package/components/combobox/demo/getting-started.min.js +119 -96
  16. package/components/combobox/demo/index.js +23 -0
  17. package/components/combobox/demo/index.min.js +119 -96
  18. package/components/combobox/demo/styles.scss +1 -0
  19. package/components/combobox/dist/index.js +118 -95
  20. package/components/combobox/dist/registered.js +118 -95
  21. package/components/counter/demo/customize.js +21 -0
  22. package/components/counter/demo/customize.min.js +2 -2
  23. package/components/counter/demo/demo-support.js +1 -0
  24. package/components/counter/demo/index.js +21 -0
  25. package/components/counter/demo/index.min.js +2 -2
  26. package/components/counter/demo/styles.scss +1 -0
  27. package/components/counter/dist/index.js +2 -2
  28. package/components/counter/dist/registered.js +2 -2
  29. package/components/datepicker/demo/accessibility.md +1 -2
  30. package/components/datepicker/demo/api.md +62 -63
  31. package/components/datepicker/demo/customize.js +17 -0
  32. package/components/datepicker/demo/customize.md +1 -12
  33. package/components/datepicker/demo/customize.min.js +335 -702
  34. package/components/datepicker/demo/demo-support.js +1 -0
  35. package/components/datepicker/demo/index.js +23 -0
  36. package/components/datepicker/demo/index.min.js +335 -702
  37. package/components/datepicker/demo/styles.scss +1 -0
  38. package/components/datepicker/dist/index.js +335 -702
  39. package/components/datepicker/dist/registered.js +335 -702
  40. package/components/datepicker/dist/{auro-calendar-cell.d.ts → src/auro-calendar-cell.d.ts} +3 -14
  41. package/components/datepicker/dist/{auro-calendar.d.ts → src/auro-calendar.d.ts} +6 -90
  42. package/components/datepicker/dist/{auro-datepicker.d.ts → src/auro-datepicker.d.ts} +5 -78
  43. package/components/dropdown/demo/customize.js +9 -0
  44. package/components/dropdown/demo/customize.min.js +1 -1
  45. package/components/dropdown/demo/demo-support.js +1 -0
  46. package/components/dropdown/demo/getting-started.js +9 -0
  47. package/components/dropdown/demo/getting-started.min.js +1 -1
  48. package/components/dropdown/demo/index.js +16 -0
  49. package/components/dropdown/demo/index.min.js +1 -1
  50. package/components/dropdown/demo/styles.scss +1 -0
  51. package/components/dropdown/dist/index.js +1 -1
  52. package/components/dropdown/dist/registered.js +1 -1
  53. package/components/form/demo/customize.js +28 -0
  54. package/components/form/demo/customize.min.js +583 -904
  55. package/components/form/demo/demo-support.js +1 -0
  56. package/components/form/demo/getting-started.js +9 -0
  57. package/components/form/demo/getting-started.min.js +583 -904
  58. package/components/form/demo/index.js +5 -0
  59. package/components/form/demo/index.min.js +583 -904
  60. package/components/form/demo/registerDemoDeps.js +23 -0
  61. package/components/form/demo/registerDemoDeps.min.js +583 -904
  62. package/components/form/demo/styles.scss +1 -0
  63. package/components/input/demo/api.md +5 -5
  64. package/components/input/demo/customize.js +25 -0
  65. package/components/input/demo/customize.md +8 -8
  66. package/components/input/demo/customize.min.js +116 -93
  67. package/components/input/demo/demo-support.js +1 -0
  68. package/components/input/demo/getting-started.js +8 -0
  69. package/components/input/demo/getting-started.min.js +116 -93
  70. package/components/input/demo/index.js +8 -0
  71. package/components/input/demo/index.min.js +116 -93
  72. package/components/input/demo/styles.css +974 -0
  73. package/components/input/demo/styles.scss +1 -0
  74. package/components/input/dist/base-input.d.ts +33 -44
  75. package/components/input/dist/index.js +129 -94
  76. package/components/input/dist/registered.js +116 -93
  77. package/components/menu/demo/demo-support.js +1 -0
  78. package/components/menu/demo/index.js +25 -0
  79. package/components/menu/demo/styles.scss +1 -0
  80. package/components/radio/demo/customize.js +22 -0
  81. package/components/radio/demo/customize.min.js +1 -1
  82. package/components/radio/demo/demo-support.js +1 -0
  83. package/components/radio/demo/getting-started.js +24 -0
  84. package/components/radio/demo/getting-started.min.js +1 -1
  85. package/components/radio/demo/index.js +8 -0
  86. package/components/radio/demo/index.min.js +1 -1
  87. package/components/radio/demo/styles.scss +1 -0
  88. package/components/radio/dist/index.js +1 -1
  89. package/components/radio/dist/registered.js +1 -1
  90. package/components/select/demo/customize.js +11 -0
  91. package/components/select/demo/customize.min.js +2 -2
  92. package/components/select/demo/demo-support.js +1 -0
  93. package/components/select/demo/getting-started.js +26 -0
  94. package/components/select/demo/getting-started.min.js +2 -2
  95. package/components/select/demo/index.js +11 -0
  96. package/components/select/demo/index.min.js +2 -2
  97. package/components/select/demo/styles.scss +1 -0
  98. package/components/select/dist/index.js +2 -2
  99. package/components/select/dist/registered.js +2 -2
  100. package/custom-elements.json +2146 -2218
  101. package/package.json +2 -6
  102. package/components/datepicker/dist/blackoutUtils.d.ts +0 -43
  103. /package/components/datepicker/dist/{auro-calendar-month.d.ts → src/auro-calendar-month.d.ts} +0 -0
  104. /package/components/datepicker/dist/{buttonVersion.d.ts → src/buttonVersion.d.ts} +0 -0
  105. /package/components/datepicker/dist/{datepickerKeyboardStrategy.d.ts → src/datepickerKeyboardStrategy.d.ts} +0 -0
  106. /package/components/datepicker/dist/{iconVersion.d.ts → src/iconVersion.d.ts} +0 -0
  107. /package/components/datepicker/dist/{index.d.ts → src/index.d.ts} +0 -0
  108. /package/components/datepicker/dist/{popoverVersion.d.ts → src/popoverVersion.d.ts} +0 -0
  109. /package/components/datepicker/dist/{styles → src/styles}/classic/color-css.d.ts +0 -0
  110. /package/components/datepicker/dist/{styles → src/styles}/classic/style-css.d.ts +0 -0
  111. /package/components/datepicker/dist/{styles → src/styles}/color-calendar-css.d.ts +0 -0
  112. /package/components/datepicker/dist/{styles → src/styles}/color-cell-css.d.ts +0 -0
  113. /package/components/datepicker/dist/{styles → src/styles}/color-css.d.ts +0 -0
  114. /package/components/datepicker/dist/{styles → src/styles}/color-month-css.d.ts +0 -0
  115. /package/components/datepicker/dist/{styles → src/styles}/shapeSize-css.d.ts +0 -0
  116. /package/components/datepicker/dist/{styles → src/styles}/snowflake/color-css.d.ts +0 -0
  117. /package/components/datepicker/dist/{styles → src/styles}/snowflake/style-css.d.ts +0 -0
  118. /package/components/datepicker/dist/{styles → src/styles}/style-auro-calendar-cell-css.d.ts +0 -0
  119. /package/components/datepicker/dist/{styles → src/styles}/style-auro-calendar-css.d.ts +0 -0
  120. /package/components/datepicker/dist/{styles → src/styles}/style-auro-calendar-month-css.d.ts +0 -0
  121. /package/components/datepicker/dist/{styles → src/styles}/style-css.d.ts +0 -0
  122. /package/components/datepicker/dist/{styles → src/styles}/tokens-css.d.ts +0 -0
  123. /package/components/datepicker/dist/{utilities.d.ts → src/utilities.d.ts} +0 -0
  124. /package/components/datepicker/dist/{utilitiesCalendar.d.ts → src/utilitiesCalendar.d.ts} +0 -0
  125. /package/components/datepicker/dist/{utilitiesCalendarRender.d.ts → src/utilitiesCalendarRender.d.ts} +0 -0
  126. /package/components/datepicker/dist/{vendor → src/vendor}/wc-range-datepicker/day.d.ts +0 -0
  127. /package/components/datepicker/dist/{vendor → src/vendor}/wc-range-datepicker/range-datepicker-calendar.d.ts +0 -0
  128. /package/components/datepicker/dist/{vendor → src/vendor}/wc-range-datepicker/range-datepicker-cell.d.ts +0 -0
  129. /package/components/datepicker/dist/{vendor → src/vendor}/wc-range-datepicker/range-datepicker.d.ts +0 -0
@@ -1356,7 +1356,7 @@ function normalizeDates$1(context, ...dates) {
1356
1356
  * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))
1357
1357
  * //=> Tue Sep 02 2014 00:00:00
1358
1358
  */
1359
- function startOfDay$1(date, options) {
1359
+ function startOfDay$2(date, options) {
1360
1360
  const _date = toDate$1(date, options?.in);
1361
1361
  _date.setHours(0, 0, 0, 0);
1362
1362
  return _date;
@@ -1404,8 +1404,8 @@ function differenceInCalendarDays$1(laterDate, earlierDate, options) {
1404
1404
  earlierDate,
1405
1405
  );
1406
1406
 
1407
- const laterStartOfDay = startOfDay$1(laterDate_);
1408
- const earlierStartOfDay = startOfDay$1(earlierDate_);
1407
+ const laterStartOfDay = startOfDay$2(laterDate_);
1408
+ const earlierStartOfDay = startOfDay$2(earlierDate_);
1409
1409
 
1410
1410
  const laterTimestamp =
1411
1411
  +laterStartOfDay - getTimezoneOffsetInMilliseconds$1(laterStartOfDay);
@@ -10507,6 +10507,13 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
10507
10507
  * @returns {string | undefined}
10508
10508
  */
10509
10509
  toFormattedValue(valueObject, format) {
10510
+ // Exposed publicly via `AuroInputUtil.toFormattedValue`, so a missing
10511
+ // `format` argument has to fail gracefully rather than throw on
10512
+ // `format.toLowerCase()`. Treat any falsy value (undefined, null, '')
10513
+ // as "no format → no display value".
10514
+ if (!format) {
10515
+ return undefined;
10516
+ }
10510
10517
  const normalizedFormat = format.toLowerCase();
10511
10518
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
10512
10519
 
@@ -10862,8 +10869,8 @@ class RangeDatepickerCell extends LitElement {
10862
10869
  const parsedDateFrom = parseInt(dateFrom, 10);
10863
10870
  const parsedDateTo = parseInt(dateTo, 10);
10864
10871
  if (day) {
10865
- if (getTime(startOfDay$1(parsedDateTo * 1000)) / 1000 === day.date ||
10866
- getTime(startOfDay$1(parsedDateFrom * 1000)) / 1000 === day.date) {
10872
+ if (getTime(startOfDay$2(parsedDateTo * 1000)) / 1000 === day.date ||
10873
+ getTime(startOfDay$2(parsedDateFrom * 1000)) / 1000 === day.date) {
10867
10874
  this.selected = true;
10868
10875
  }
10869
10876
  if (((hoveredDate === day.date || day.date < hoveredDate) &&
@@ -11051,7 +11058,7 @@ class RangeDatepickerCalendar extends LitElement {
11051
11058
  this.dayNamesOfTheWeek = [];
11052
11059
  this.daysOfMonth = [];
11053
11060
  this._locale = null;
11054
- this.currentDate = parseInt(format$1(startOfDay$1(Date.now()), 't'), 10);
11061
+ this.currentDate = parseInt(format$1(startOfDay$2(Date.now()), 't'), 10);
11055
11062
  this.localeChanged();
11056
11063
  this.yearAndMonthChanged(this.year, this.month);
11057
11064
  }
@@ -11525,7 +11532,7 @@ __decorate([property({ type: Array })], RangeDatepickerCalendar.prototype, "dayN
11525
11532
  __decorate([property({ type: Array })], RangeDatepickerCalendar.prototype, "daysOfMonth", void 0);
11526
11533
  AuroLibraryRuntimeUtils$5.prototype.registerComponent('wc-range-datepicker-calendar', RangeDatepickerCalendar);
11527
11534
 
11528
- var styleCss$5 = css`.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}`;
11535
+ var styleCss$5 = css`.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}`;
11529
11536
 
11530
11537
  var colorCss$5 = css`: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}`;
11531
11538
 
@@ -11550,104 +11557,14 @@ class s{registerComponent(e,t){customElements.get(e)||customElements.define(e,cl
11550
11557
 
11551
11558
  var popoverVersion = '6.0.1';
11552
11559
 
11553
- /**
11554
- * Single source of truth for parsing and matching blackout dates across the
11555
- * datepicker. Both `auro-calendar` (memoized Set + `isDateBlackout`) and the
11556
- * pre-`firstUpdated` fallback inside `auro-calendar-cell` route through these
11557
- * helpers so the YYYY-MM-DD → seconds conversion and the merge-with-legacy
11558
- * `disabledDays` rules are defined exactly once.
11559
- */
11560
-
11561
- /**
11562
- * Converts a `YYYY-MM-DD` ISO date string to a Unix timestamp (seconds)
11563
- * representing local midnight on that calendar day. Returns `null` for
11564
- * inputs that don't parse to a finite timestamp.
11565
- *
11566
- * Uses the `new Date(year, monthIndex, day)` constructor (NOT
11567
- * `new Date(isoStr)`) so the result is local-midnight rather than UTC
11568
- * midnight — required to keep the calendar grid aligned with the user's
11569
- * local calendar day in negative-offset timezones.
11570
- *
11571
- * @param {string} isoStr - Date string in `YYYY-MM-DD` format.
11572
- * @returns {number|null} Local-midnight Unix timestamp (seconds), or null.
11573
- */
11574
- function parseIsoToTimestamp(isoStr) {
11575
- if (typeof isoStr !== 'string') {
11576
- return null;
11577
- }
11578
- const parts = isoStr.split('-');
11579
- if (parts.length !== 3) {
11580
- return null;
11581
- }
11582
- const year = parseInt(parts[0], 10);
11583
- const month = parseInt(parts[1], 10);
11584
- const day = parseInt(parts[2], 10);
11585
- if (!Number.isFinite(year) || !Number.isFinite(month) || !Number.isFinite(day)) {
11586
- return null;
11587
- }
11588
- // Reject overflow values like "2024-13-40" — JS `new Date(year, month, day)`
11589
- // silently normalizes those to a different calendar day, which would
11590
- // disable the wrong date if we let the result through.
11591
- if (month < 1 || month > 12 || day < 1 || day > 31) {
11592
- return null;
11593
- }
11594
- const date = new Date(year, month - 1, day);
11595
- // Guard the residual case where JS still rolls a value (e.g. Feb 30 → Mar 2).
11596
- // After construction, getFullYear/getMonth/getDate should match the inputs.
11597
- if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {
11598
- return null;
11599
- }
11600
- const ts = Math.floor(date.getTime() / 1000);
11601
- return Number.isFinite(ts) ? ts : null;
11602
- }
11603
-
11604
- /**
11605
- * Builds a `Set<number>` of seconds-since-epoch timestamps covering both the
11606
- * legacy `disabledDays` (already-numeric) array and the ISO `blackoutDates`
11607
- * array. Use this for O(1) membership checks in hot paths.
11608
- *
11609
- * @param {Array<string|number>|undefined} disabledDays - Legacy timestamp array.
11610
- * @param {Array<string>|undefined} blackoutDates - ISO `YYYY-MM-DD` array.
11611
- * @returns {Set<number>}
11612
- */
11613
- function buildBlackoutSet(disabledDays, blackoutDates) {
11614
- const set = new Set();
11615
- if (Array.isArray(disabledDays)) {
11616
- for (const day of disabledDays) {
11617
- const ts = parseInt(day, 10);
11618
- if (Number.isFinite(ts)) {
11619
- set.add(ts);
11620
- }
11621
- }
11622
- }
11623
- if (Array.isArray(blackoutDates)) {
11624
- for (const isoStr of blackoutDates) {
11625
- const ts = parseIsoToTimestamp(isoStr);
11626
- if (ts !== null) {
11627
- set.add(ts);
11628
- }
11629
- }
11630
- }
11631
- return set;
11632
- }
11633
-
11634
- /**
11635
- * One-shot membership test for a single timestamp against both blackout
11636
- * sources. Allocates a Set on each call; only use this in cold paths
11637
- * (e.g. the pre-`firstUpdated` cell fallback). Hot paths should hold the
11638
- * Set returned from `buildBlackoutSet` and `.has(ts)` directly.
11639
- *
11640
- * @param {number} dateTs - Unix timestamp (seconds) to test.
11641
- * @param {Array<string|number>|undefined} disabledDays - Legacy timestamp array.
11642
- * @param {Array<string>|undefined} blackoutDates - ISO `YYYY-MM-DD` array.
11643
- * @returns {boolean}
11644
- */
11645
- function isBlackoutTimestamp(dateTs, disabledDays, blackoutDates) {
11646
- return buildBlackoutSet(disabledDays, blackoutDates).has(dateTs);
11647
- }
11648
-
11649
11560
  /* 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 */
11650
11561
 
11562
+ const startOfDay$1 = (ms) => {
11563
+ const date = new Date(ms);
11564
+ date.setHours(0, 0, 0, 0);
11565
+ return date.getTime();
11566
+ };
11567
+
11651
11568
  class AuroCalendarCell extends LitElement {
11652
11569
  constructor() {
11653
11570
  super();
@@ -11694,14 +11611,6 @@ class AuroCalendarCell extends LitElement {
11694
11611
  type: Boolean,
11695
11612
  reflect: true
11696
11613
  },
11697
- /**
11698
- * @deprecated Propagated from the legacy `auro-calendar.disabledDays`
11699
- * Unix-timestamp array. The cell honors it for backward compatibility
11700
- * (see the divergence-check fallback inside `isBlackout`), but
11701
- * consumers should migrate to `auro-datepicker.blackoutDates`
11702
- * (YYYY-MM-DD ISO strings). The calendar emits a one-time
11703
- * deprecation warning the first time a non-empty value is observed.
11704
- */
11705
11614
  disabledDays: { type: Array },
11706
11615
  isCurrentDate: { type: Boolean },
11707
11616
  locale: { type: String },
@@ -11747,8 +11656,8 @@ class AuroCalendarCell extends LitElement {
11747
11656
  const parsedDateTo = parseInt(dateTo, 10);
11748
11657
 
11749
11658
  if (day) {
11750
- const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
11751
- const returnTimestamp = new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000;
11659
+ const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
11660
+ const returnTimestamp = startOfDay$1(parsedDateTo * 1000) / 1000;
11752
11661
 
11753
11662
  if (day.date === departTimestamp || day.date === returnTimestamp) {
11754
11663
  this.selected = true;
@@ -11832,33 +11741,27 @@ class AuroCalendarCell extends LitElement {
11832
11741
  return false;
11833
11742
  }
11834
11743
 
11835
- // Delegate to the calendar's memoized blackout Set for O(1) lookup
11836
- // (instead of rescanning disabledDays + blackoutDates per render). The
11837
- // Set is rebuilt only when either source array reference changes — see
11838
- // auro-calendar.js#_getBlackoutSet.
11839
- if (this.calendar && typeof this.calendar._getBlackoutSet === 'function') {
11840
- if (this.calendar._getBlackoutSet().has(this.day.date)) {
11744
+ // Check against disabledDays timestamps (legacy path)
11745
+ if (Array.isArray(this.disabledDays) && this.disabledDays.length > 0 &&
11746
+ (this.disabledDays.findIndex(dd => parseInt(dd, 10) === this.day.date) !== -1)) {
11747
+ return true;
11748
+ }
11749
+
11750
+ // Check against blackoutDates (ISO format YYYY-MM-DD) on the datepicker
11751
+ const blackoutDates = this.datepicker?.blackoutDates;
11752
+
11753
+ if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
11754
+ const date = new Date(this.day.date * 1000);
11755
+ const yyyy = date.getFullYear();
11756
+ const mm = String(date.getMonth() + 1).padStart(2, '0');
11757
+ const dd = String(date.getDate()).padStart(2, '0');
11758
+ const cellDate = `${yyyy}-${mm}-${dd}`;
11759
+ if (blackoutDates.includes(cellDate)) {
11841
11760
  return true;
11842
11761
  }
11843
- // If the cell's local disabledDays diverged from the calendar's (a
11844
- // consumer or test mutated cell.disabledDays directly), the Set does
11845
- // not reflect that addition — fall through to the per-cell scan only
11846
- // when the reference no longer matches. Production data flow keeps
11847
- // these identical, so this branch stays cold. Guarded with
11848
- // Array.isArray to match `_getBlackoutSet`'s contract: non-array
11849
- // values are treated as empty rather than crashing on `.findIndex`.
11850
- if (Array.isArray(this.disabledDays) && this.disabledDays !== this.calendar.disabledDays && this.disabledDays.length > 0) {
11851
- if (this.disabledDays.findIndex((dd) => parseInt(dd, 10) === this.day.date) !== -1) {
11852
- return true;
11853
- }
11854
- }
11855
- return false;
11856
11762
  }
11857
11763
 
11858
- // Pre-firstUpdated fallback — the cell may render once before the
11859
- // ancestor calendar is wired up. Routes through the shared
11860
- // blackoutUtils helper so the parsing rules stay in one place.
11861
- return isBlackoutTimestamp(this.day.date, this.disabledDays, this.datepicker?.blackoutDates);
11764
+ return false;
11862
11765
  }
11863
11766
 
11864
11767
  /**
@@ -11964,12 +11867,12 @@ class AuroCalendarCell extends LitElement {
11964
11867
  const parsedDateFrom = Number.parseInt(this.dateFrom, 10);
11965
11868
  if (!Number.isFinite(parsedDateFrom)) return null;
11966
11869
 
11967
- const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
11870
+ const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
11968
11871
  const dayDate = this.day.date;
11969
11872
 
11970
11873
  const parsedDateTo = Number.parseInt(this.dateTo, 10);
11971
11874
  const hasDateTo = Number.isFinite(parsedDateTo);
11972
- const returnTimestamp = hasDateTo ? new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000 : null;
11875
+ const returnTimestamp = hasDateTo ? startOfDay$1(parsedDateTo * 1000) / 1000 : null;
11973
11876
 
11974
11877
  if (dayDate === departTimestamp) return this.datepicker.rangeLabelStart || 'range start';
11975
11878
 
@@ -11979,9 +11882,7 @@ class AuroCalendarCell extends LitElement {
11979
11882
 
11980
11883
  if (hasDateTo && dayDate > departTimestamp && dayDate < returnTimestamp) return this.datepicker.rangeLabelInRange || 'in range';
11981
11884
 
11982
- if (!hasDateTo && dayDate > departTimestamp) return this.datepicker.rangeLabelEndPreview || 'previewing range end';
11983
-
11984
- // After end date when both dateFrom and dateTo are set.
11885
+ // After start date, no end date yet, or after end date
11985
11886
  return this.datepicker.rangeLabelAfterRange || 'after range';
11986
11887
  }
11987
11888
 
@@ -11994,7 +11895,7 @@ class AuroCalendarCell extends LitElement {
11994
11895
  */
11995
11896
  isDepartDate(day, dateFrom) {
11996
11897
  const parsedDateFrom = parseInt(dateFrom, 10);
11997
- const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
11898
+ const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
11998
11899
 
11999
11900
  return this.selected && day.date === departTimestamp;
12000
11901
  }
@@ -12009,7 +11910,7 @@ class AuroCalendarCell extends LitElement {
12009
11910
  */
12010
11911
  isReturnDate(day, dateFrom, dateTo) {
12011
11912
  const parsedDateTo = parseInt(dateTo, 10);
12012
- const returnTimestamp = new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000;
11913
+ const returnTimestamp = startOfDay$1(parsedDateTo * 1000) / 1000;
12013
11914
 
12014
11915
  return this.selected && day.date === returnTimestamp && dateFrom;
12015
11916
  }
@@ -12173,7 +12074,6 @@ class AuroCalendarCell extends LitElement {
12173
12074
  setTimeout(() => this.firstUpdated(), 0);
12174
12075
  return;
12175
12076
  }
12176
- this.calendar = calendar;
12177
12077
  this.datepicker = calendar.datepicker;
12178
12078
  this._slotContentHandler = () => {
12179
12079
  this.handleSlotContent();
@@ -12231,13 +12131,12 @@ class AuroCalendarCell extends LitElement {
12231
12131
  this._cachedButton = this.shadowRoot.querySelector('button.day');
12232
12132
  });
12233
12133
 
12234
- // Keep the host's gridcell aria attributes in sync with the day data.
12134
+ // Update host-level aria attributes for ariaActiveDescendantElement.
12235
12135
  this.updateHostAria();
12236
12136
  }
12237
12137
 
12238
12138
  // Update host aria when selection changes (aria-selected, range labels)
12239
- // or when isCurrentDate flips (aria-current).
12240
- if (properties.has('dateFrom') || properties.has('dateTo') || properties.has('selected') || properties.has('isCurrentDate')) {
12139
+ if (properties.has('dateFrom') || properties.has('dateTo') || properties.has('selected')) {
12241
12140
  this.updateHostAria();
12242
12141
  }
12243
12142
 
@@ -12248,8 +12147,8 @@ class AuroCalendarCell extends LitElement {
12248
12147
  }
12249
12148
 
12250
12149
  /**
12251
- * Sets host-level ARIA so each cell exposes its date, selection state,
12252
- * and blackout status to assistive tech browsing the month grid.
12150
+ * Updates ARIA attributes on the host element so that
12151
+ * ariaActiveDescendantElement can expose cell info to the SR.
12253
12152
  * @private
12254
12153
  * @returns {void}
12255
12154
  */
@@ -12258,27 +12157,16 @@ class AuroCalendarCell extends LitElement {
12258
12157
 
12259
12158
  const outOfRange = this.isOutOfRange(this.day, this.min, this.max);
12260
12159
  if (outOfRange) {
12261
- // Strip every aria attribute the in-range branch may have set on a
12262
- // previous render — if a cell flips from in-range to out-of-range
12263
- // (calendar shifts months, minDate/maxDate change, etc.).
12264
12160
  this.removeAttribute('role');
12265
12161
  this.removeAttribute('aria-label');
12266
- this.removeAttribute('aria-current');
12267
- this.removeAttribute('aria-selected');
12268
- this.removeAttribute('aria-disabled');
12269
12162
  return;
12270
12163
  }
12271
12164
 
12165
+ // The host acts as the gridcell for ariaActiveDescendantElement.
12272
12166
  this.setAttribute('role', 'gridcell');
12273
12167
  this.setAttribute('aria-label', this.getAriaLabel());
12274
12168
  this.setAttribute('aria-selected', this.selected ? 'true' : 'false');
12275
12169
 
12276
- if (this.isCurrentDate) {
12277
- this.setAttribute('aria-current', 'date');
12278
- } else {
12279
- this.removeAttribute('aria-current');
12280
- }
12281
-
12282
12170
  if (this.isBlackout()) {
12283
12171
  this.setAttribute('aria-disabled', 'true');
12284
12172
  } else {
@@ -12293,7 +12181,7 @@ class AuroCalendarCell extends LitElement {
12293
12181
  * @returns {void}
12294
12182
  */
12295
12183
  focusButton() {
12296
- const button = this._cachedButton || this.shadowRoot.querySelector('button:not([disabled])');
12184
+ const button = this._cachedButton || this.shadowRoot.querySelector('button:not([aria-hidden])');
12297
12185
  if (button) {
12298
12186
  button.focus({ focusVisible: true });
12299
12187
  }
@@ -12301,9 +12189,7 @@ class AuroCalendarCell extends LitElement {
12301
12189
 
12302
12190
  /**
12303
12191
  * Imperatively marks this cell as active without triggering a Lit re-render.
12304
- * Buttons stay tabindex="-1" because DOM focus stays on the grid wrapper
12305
- * arrow keys move the active cell imperatively and the live region carries
12306
- * the SR announcement.
12192
+ * Note: buttons stay tabindex="-1" because the grid uses aria-activedescendant.
12307
12193
  * @returns {void}
12308
12194
  */
12309
12195
  setActive() {
@@ -12345,13 +12231,10 @@ class AuroCalendarCell extends LitElement {
12345
12231
  if (!btn || !this.day) return;
12346
12232
 
12347
12233
  const dayDate = this.day.date;
12348
- const departTimestamp = new Date(dateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
12234
+ const departTimestamp = startOfDay$1(dateFrom * 1000) / 1000;
12349
12235
  const isInRange = dayDate > departTimestamp && dayDate < hoveredDate;
12350
- // `>=` so hovering the depart cell itself (a same-day round-trip
12351
- // preview) still surfaces a visual cue: the depart cell receives both
12352
- // rangeDepartDate and lastHoveredDate.
12353
- const isLastHovered = dayDate === hoveredDate && hoveredDate >= departTimestamp;
12354
- const isDepartWithPreview = dayDate === departTimestamp && hoveredDate >= departTimestamp;
12236
+ const isLastHovered = dayDate === hoveredDate && hoveredDate > departTimestamp;
12237
+ const isDepartWithPreview = dayDate === departTimestamp && hoveredDate > departTimestamp;
12355
12238
 
12356
12239
  btn.classList.toggle('inRange', isInRange);
12357
12240
  btn.classList.toggle('lastHoveredDate', isLastHovered);
@@ -12409,6 +12292,7 @@ class AuroCalendarCell extends LitElement {
12409
12292
  @focus="${outOfRange ? undefined : this.handleFocus}"
12410
12293
  class="${classMap(buttonClasses)}"
12411
12294
  ?disabled="${outOfRange}"
12295
+ aria-hidden="${outOfRange ? 'true' : nothing}"
12412
12296
  tabindex="-1">
12413
12297
  <div class="buttonWrapper" aria-hidden="true">
12414
12298
  <div class="currentDayMarker">${this.day?.title || nothing}</div>
@@ -13514,7 +13398,7 @@ class AuroBibtemplate extends LitElement {
13514
13398
  }
13515
13399
  }
13516
13400
 
13517
- var formkitVersion$2 = '202606252324';
13401
+ var formkitVersion$2 = '202606252337';
13518
13402
 
13519
13403
  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=literal`${unsafeStatic(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$1 = 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$1=css`: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}
13520
13404
  `,u$4=css`.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}}
@@ -13637,11 +13521,7 @@ class AuroCalendar extends RangeDatepicker {
13637
13521
  this.calendarRangeMonths = null;
13638
13522
 
13639
13523
  /**
13640
- * @deprecated Use `auro-datepicker.blackoutDates` (an array of
13641
- * `YYYY-MM-DD` ISO strings) instead. This legacy array of Unix
13642
- * timestamps is still honored for backward compatibility but emits a
13643
- * one-time `console.debug` the first time a non-empty value is observed.
13644
- * Support will be removed in a future major release.
13524
+ * Legacy array of disabled-date timestamps.
13645
13525
  * @private
13646
13526
  */
13647
13527
  this.disabledDays = [];
@@ -13898,44 +13778,17 @@ class AuroCalendar extends RangeDatepicker {
13898
13778
  * @returns {void}
13899
13779
  */
13900
13780
  updateActiveCellForVisibleMonth() {
13901
- this._afterMonthRender(() => {
13902
- const newDate = this.computeActiveDate({ skipDateFrom: true });
13903
-
13904
- if (newDate !== null && newDate !== undefined) {
13905
- this.activeCellDate = newDate;
13906
- this.setActiveCell(this.activeCellDate);
13907
- }
13908
- });
13909
- }
13910
-
13911
- /**
13912
- * Schedules `callback` two animation frames out, giving the child
13913
- * `auro-formkit-calendar-month` and `auro-formkit-calendar-cell` elements
13914
- * a full render-and-paint cycle to settle before the callback reads or
13915
- * mutates DOM.
13916
- *
13917
- * Why two frames, not one:
13918
- * 1. Lit batches property updates and renders in a microtask, so frame N
13919
- * schedules the render but the new DOM may not be painted yet.
13920
- * 2. Cells re-cache `_cachedButton` inside their own `updateComplete.then`,
13921
- * which also lands a tick later. Reading buttons from frame N+1
13922
- * (after both renders + cache refresh have flushed) reliably hits the
13923
- * new month's cells.
13924
- *
13925
- * Used by every code path that calls `handleNextMonth`/`handlePrevMonth`
13926
- * and then needs to inspect the freshly-rendered cells (cross-month
13927
- * keyboard nav, boundary events, `updateActiveCellForVisibleMonth`).
13928
- * Do NOT collapse to a single rAF — it intermittently lands before
13929
- * `_cachedButton` is refreshed, which silently breaks focus restoration
13930
- * and `setActiveCell` lookups.
13931
- * @private
13932
- * @param {() => void} callback - Runs once after the month re-render and
13933
- * the cells' button caches have refreshed.
13934
- * @returns {void}
13935
- */
13936
- _afterMonthRender(callback) {
13781
+ // Use double-rAF to ensure child month/cell components have fully
13782
+ // rendered and cached their button references before we set tabindex.
13937
13783
  requestAnimationFrame(() => {
13938
- requestAnimationFrame(callback);
13784
+ requestAnimationFrame(() => {
13785
+ const newDate = this.computeActiveDate({ skipDateFrom: true });
13786
+
13787
+ if (newDate !== null && newDate !== undefined) {
13788
+ this.activeCellDate = newDate;
13789
+ this.setActiveCell(this.activeCellDate);
13790
+ }
13791
+ });
13939
13792
  });
13940
13793
  }
13941
13794
 
@@ -14053,47 +13906,6 @@ class AuroCalendar extends RangeDatepicker {
14053
13906
  return Array.from(this.shadowRoot.querySelectorAll('auro-formkit-calendar-month'));
14054
13907
  }
14055
13908
 
14056
- /**
14057
- * Picks the focusable cell whose date is closest to targetTs. Used as a
14058
- * fallback after a month-boundary nav when the exact target date isn't
14059
- * focusable — typically because the month re-render lagged or the date
14060
- * was filtered out by isOutOfRange. When two cells are equidistant, the
14061
- * navigation direction breaks the tie so the user moves the way they
14062
- * pressed (forward → later cell, backward → earlier cell).
14063
- * @private
14064
- * @param {Array} cells - Focusable cells from getAllFocusableCells.
14065
- * @param {Number} targetTs - Desired Unix timestamp (seconds).
14066
- * @param {'next'|'prev'} direction - Navigation direction.
14067
- * @returns {Object|null} The nearest cell, or null when cells is empty.
14068
- */
14069
- pickNearestCell(cells, targetTs, direction) {
14070
- if (!cells.length) {
14071
- return null;
14072
- }
14073
- const forward = direction === 'next';
14074
- let best = null;
14075
- let bestDelta = Infinity;
14076
- cells.forEach((cell) => {
14077
- if (!cell.day) {
14078
- return;
14079
- }
14080
- const distance = Math.abs(cell.day.date - targetTs);
14081
- if (distance < bestDelta) {
14082
- best = cell;
14083
- bestDelta = distance;
14084
- return;
14085
- }
14086
- if (distance === bestDelta && best) {
14087
- if (forward && cell.day.date > best.day.date) {
14088
- best = cell;
14089
- } else if (!forward && cell.day.date < best.day.date) {
14090
- best = cell;
14091
- }
14092
- }
14093
- });
14094
- return best;
14095
- }
14096
-
14097
13909
  /**
14098
13910
  * Gets all focusable cells across all rendered months.
14099
13911
  * @private
@@ -14110,9 +13922,9 @@ class AuroCalendar extends RangeDatepicker {
14110
13922
 
14111
13923
  /**
14112
13924
  * Sets the active cell across all months. Only one cell has tabindex="0" at a time.
14113
- * Uses imperative DOM manipulation — no Lit re-render triggered. DOM focus
14114
- * stays on the grid wrapper; the live region (see getOrCreateLiveRegion)
14115
- * is what announces the active cell to assistive tech.
13925
+ * Uses imperative DOM manipulation — no Lit re-render triggered.
13926
+ * Also updates ariaActiveDescendantElement on the grid wrapper so
13927
+ * screen readers announce the active cell without moving DOM focus.
14116
13928
  * @param {Number} date - Unix timestamp of the cell to activate.
14117
13929
  * @returns {void}
14118
13930
  */
@@ -14193,65 +14005,6 @@ class AuroCalendar extends RangeDatepicker {
14193
14005
  this.clearRangePreview();
14194
14006
  }
14195
14007
 
14196
- /**
14197
- * Returns a memoized Set of blackout timestamps (seconds) drawn from both
14198
- * the legacy `disabledDays` array and the datepicker's ISO `blackoutDates`.
14199
- * The cache invalidates when either source array's reference changes, which
14200
- * matches Lit's own reactive identity semantics for array properties.
14201
- * @private
14202
- * @returns {Set<Number>}
14203
- */
14204
- _getBlackoutSet() {
14205
- // Normalize non-array values to a stable `null` sentinel rather than a
14206
- // fresh `[]` per call — otherwise the reference-identity cache key
14207
- // (`_cachedBlackoutDisabledDays === disabledDays`) never matches on
14208
- // subsequent calls and the Set rebuilds every time. `buildBlackoutSet`
14209
- // already treats null/non-array as "no legacy disabledDays" via its
14210
- // own Array.isArray gate.
14211
- const disabledDays = Array.isArray(this.disabledDays) ? this.disabledDays : null;
14212
- const blackoutDates = this.datepicker?.blackoutDates;
14213
- if (this._blackoutSet &&
14214
- this._cachedBlackoutDisabledDays === disabledDays &&
14215
- this._cachedBlackoutDates === blackoutDates) {
14216
- return this._blackoutSet;
14217
- }
14218
-
14219
- if (disabledDays && disabledDays.length > 0) {
14220
- this._warnDisabledDaysDeprecated();
14221
- }
14222
-
14223
- this._blackoutSet = buildBlackoutSet(disabledDays, blackoutDates);
14224
- this._cachedBlackoutDisabledDays = disabledDays;
14225
- this._cachedBlackoutDates = blackoutDates;
14226
- return this._blackoutSet;
14227
- }
14228
-
14229
- /**
14230
- * Per-class flag that gates the `disabledDays` deprecation warning so it
14231
- * fires exactly once per page no matter how many calendars or rebuild
14232
- * cycles encounter the legacy array.
14233
- * @private
14234
- */
14235
- static _warnedDisabledDaysDeprecation = false;
14236
-
14237
- /**
14238
- * One-time `console.debug` directing consumers from the legacy
14239
- * `disabledDays` Unix-timestamp API to the ISO `blackoutDates` API. Fires
14240
- * the first time `_getBlackoutSet` rebuilds from a non-empty
14241
- * `disabledDays`; subsequent calls (on this or any other AuroCalendar
14242
- * instance on the page) are silent.
14243
- * @private
14244
- * @returns {void}
14245
- */
14246
- _warnDisabledDaysDeprecated() {
14247
- if (AuroCalendar._warnedDisabledDaysDeprecation) {
14248
- return;
14249
- }
14250
- AuroCalendar._warnedDisabledDaysDeprecation = true;
14251
- // eslint-disable-next-line no-console
14252
- 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.');
14253
- }
14254
-
14255
14008
  /**
14256
14009
  * Computes the initial active date from data properties alone — no DOM required.
14257
14010
  * Priority:
@@ -14296,10 +14049,21 @@ class AuroCalendar extends RangeDatepicker {
14296
14049
  const minTs = Number.isFinite(rawMin) ? rawMin : -Infinity;
14297
14050
  const maxTs = Number.isFinite(rawMax) ? rawMax : Infinity;
14298
14051
 
14299
- // Build a Set of blackout timestamps for O(1) lookup. Memoized by the
14300
- // identity of the source arrays so rapid month nav doesn't rebuild the
14301
- // Set (and re-parse every ISO string) on every keypress.
14302
- const blackoutSet = this._getBlackoutSet();
14052
+ // Build a Set of blackout timestamps for O(1) lookup.
14053
+ const blackoutSet = new Set(this.disabledDays.map((day) => parseInt(day, 10)));
14054
+
14055
+ // Also include ISO-format blackoutDates from the datepicker if available.
14056
+ // Parse YYYY-MM-DD as local date to avoid UTC shift issues.
14057
+ const isoBlackouts = this.datepicker?.blackoutDates;
14058
+ if (Array.isArray(isoBlackouts)) {
14059
+ for (const isoStr of isoBlackouts) {
14060
+ const parts = isoStr.split('-');
14061
+ const ts = Math.floor(new Date(parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10)).getTime() / 1000);
14062
+ if (Number.isFinite(ts)) {
14063
+ blackoutSet.add(ts);
14064
+ }
14065
+ }
14066
+ }
14303
14067
 
14304
14068
  /**
14305
14069
  * A date (unix timestamp in seconds, midnight-aligned) is "enabled" when
@@ -14495,8 +14259,8 @@ class AuroCalendar extends RangeDatepicker {
14495
14259
 
14496
14260
  /**
14497
14261
  * Handles arrow key navigation on the calendar grid wrapper.
14498
- * Focus stays on the grid wrapper; only the visual active-cell indicator
14499
- * changes. The live region announces the new active cell.
14262
+ * Focus stays on the grid wrapper; only ariaActiveDescendantElement
14263
+ * and the visual active-cell indicator change.
14500
14264
  * @private
14501
14265
  * @param {KeyboardEvent} event - The keyboard event.
14502
14266
  * @returns {void}
@@ -14561,21 +14325,21 @@ class AuroCalendar extends RangeDatepicker {
14561
14325
  } else {
14562
14326
  this.handlePrevMonth({ skipActiveUpdate: true });
14563
14327
  }
14564
- this._afterMonthRender(() => {
14565
- const cells = this.getAllFocusableCells();
14566
- const target = cells.find((cell) => cell.day && cell.day.date === targetTs);
14567
- if (target) {
14568
- this.setActiveCell(target.day.date);
14569
- this.handleCellFocused({ detail: { date: target.day.date } });
14570
- } else {
14571
- const fallback = this.pickNearestCell(cells, targetTs, navDir);
14572
- if (fallback) {
14328
+ requestAnimationFrame(() => {
14329
+ requestAnimationFrame(() => {
14330
+ const cells = this.getAllFocusableCells();
14331
+ const target = cells.find((cell) => cell.day && cell.day.date === targetTs);
14332
+ if (target) {
14333
+ this.setActiveCell(target.day.date);
14334
+ this.handleCellFocused({ detail: { date: target.day.date } });
14335
+ } else if (cells.length > 0) {
14336
+ const fallback = navDir === 'next' ? cells[cells.length - 1] : cells[0];
14573
14337
  this.setActiveCell(fallback.day.date);
14574
14338
  this.handleCellFocused({ detail: { date: fallback.day.date } });
14575
14339
  }
14576
- }
14577
- // Re-focus grid wrapper after month change re-render
14578
- this.focusActiveCell();
14340
+ // Re-focus grid wrapper after month change re-render
14341
+ this.focusActiveCell();
14342
+ });
14579
14343
  });
14580
14344
  }
14581
14345
  }
@@ -14601,20 +14365,26 @@ class AuroCalendar extends RangeDatepicker {
14601
14365
  } else {
14602
14366
  this.handlePrevMonth({ skipActiveUpdate: true });
14603
14367
  }
14604
- this._afterMonthRender(() => {
14605
- const cells = this.getAllFocusableCells();
14606
- const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
14607
- if (target) {
14608
- this.setActiveCell(target.day.date);
14609
- this.handleCellFocused({ detail: { date: target.day.date } });
14610
- } else {
14611
- const nearest = this.pickNearestCell(cells, targetDate, navDirection);
14612
- if (nearest) {
14368
+ requestAnimationFrame(() => {
14369
+ requestAnimationFrame(() => {
14370
+ const cells = this.getAllFocusableCells();
14371
+ const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
14372
+ if (target) {
14373
+ this.setActiveCell(target.day.date);
14374
+ this.handleCellFocused({ detail: { date: target.day.date } });
14375
+ } else if (cells.length > 0) {
14376
+ let nearest = null;
14377
+
14378
+ if (navDirection === 'next') {
14379
+ [nearest] = cells;
14380
+ } else {
14381
+ nearest = cells[cells.length - 1];
14382
+ }
14613
14383
  this.setActiveCell(nearest.day.date);
14614
14384
  this.handleCellFocused({ detail: { date: nearest.day.date } });
14615
14385
  }
14616
- }
14617
- this.focusActiveCell();
14386
+ this.focusActiveCell();
14387
+ });
14618
14388
  });
14619
14389
  }
14620
14390
  }
@@ -14664,22 +14434,19 @@ class AuroCalendar extends RangeDatepicker {
14664
14434
  }
14665
14435
 
14666
14436
  this.handleNextMonth({ skipActiveUpdate: true });
14667
- this._afterMonthRender(() => {
14668
- const cells = this.getAllFocusableCells();
14669
- const target = cells.find((cell) => cell.day && cell.day.date === nextTs);
14670
- if (target) {
14671
- this.setActiveCell(target.day.date);
14672
- this.focusActiveCell();
14673
- } else {
14674
- // Same nearest-by-date fallback handleGridKeyDown uses — direct
14675
- // `cells[length - 1]` would land on the end of the new month,
14676
- // far from the user's intended `nextTs`.
14677
- const fallback = this.pickNearestCell(cells, nextTs, 'next');
14678
- if (fallback) {
14679
- this.setActiveCell(fallback.day.date);
14437
+ requestAnimationFrame(() => {
14438
+ requestAnimationFrame(() => {
14439
+ const cells = this.getAllFocusableCells();
14440
+ const target = cells.find((cell) => cell.day && cell.day.date === nextTs);
14441
+ if (target) {
14442
+ this.setActiveCell(target.day.date);
14443
+ this.focusActiveCell();
14444
+ } else if (cells.length > 0) {
14445
+ // Fallback: first cell of the last rendered month
14446
+ this.setActiveCell(cells[cells.length - 1].day.date);
14680
14447
  this.focusActiveCell();
14681
14448
  }
14682
- }
14449
+ });
14683
14450
  });
14684
14451
  } else if (direction === 'prev' && this.showPrevMonthBtn) {
14685
14452
  // Navigate to previous month and focus the computed previous date.
@@ -14693,22 +14460,19 @@ class AuroCalendar extends RangeDatepicker {
14693
14460
  }
14694
14461
 
14695
14462
  this.handlePrevMonth({ skipActiveUpdate: true });
14696
- this._afterMonthRender(() => {
14697
- const cells = this.getAllFocusableCells();
14698
- const target = cells.find((cell) => cell.day && cell.day.date === prevTs);
14699
- if (target) {
14700
- this.setActiveCell(target.day.date);
14701
- this.focusActiveCell();
14702
- } else {
14703
- // Same nearest-by-date fallback handleGridKeyDown uses — direct
14704
- // `cells[0]` would land on the start of the previous month, far
14705
- // from the user's intended `prevTs`.
14706
- const fallback = this.pickNearestCell(cells, prevTs, 'prev');
14707
- if (fallback) {
14708
- this.setActiveCell(fallback.day.date);
14463
+ requestAnimationFrame(() => {
14464
+ requestAnimationFrame(() => {
14465
+ const cells = this.getAllFocusableCells();
14466
+ const target = cells.find((cell) => cell.day && cell.day.date === prevTs);
14467
+ if (target) {
14468
+ this.setActiveCell(target.day.date);
14469
+ this.focusActiveCell();
14470
+ } else if (cells.length > 0) {
14471
+ // Fallback: last cell of the first rendered month
14472
+ this.setActiveCell(cells[0].day.date);
14709
14473
  this.focusActiveCell();
14710
14474
  }
14711
- }
14475
+ });
14712
14476
  });
14713
14477
  }
14714
14478
  } else if (key === 'ArrowDown' || key === 'ArrowUp') {
@@ -14736,22 +14500,20 @@ class AuroCalendar extends RangeDatepicker {
14736
14500
  } else {
14737
14501
  this.handlePrevMonth({ skipActiveUpdate: true });
14738
14502
  }
14739
- this._afterMonthRender(() => {
14740
- const cells = this.getAllFocusableCells();
14741
- const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
14742
- if (target) {
14743
- this.setActiveCell(target.day.date);
14744
- this.focusActiveCell();
14745
- } else {
14746
- // Same nearest-by-date fallback handleGridKeyDown uses — the
14747
- // old direction-based `cells[0]`/`cells[length-1]` clamp
14748
- // could land 25+ days from the intended target.
14749
- const nearest = this.pickNearestCell(cells, targetDate, navDirection);
14750
- if (nearest) {
14503
+ requestAnimationFrame(() => {
14504
+ requestAnimationFrame(() => {
14505
+ const cells = this.getAllFocusableCells();
14506
+ const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
14507
+ if (target) {
14508
+ this.setActiveCell(target.day.date);
14509
+ this.focusActiveCell();
14510
+ } else if (cells.length > 0) {
14511
+ // Clamp to nearest focusable cell
14512
+ const nearest = navDirection === 'next' ? cells[0] : cells[cells.length - 1];
14751
14513
  this.setActiveCell(nearest.day.date);
14752
14514
  this.focusActiveCell();
14753
14515
  }
14754
- }
14516
+ });
14755
14517
  });
14756
14518
  }
14757
14519
  }
@@ -14790,9 +14552,8 @@ class AuroCalendar extends RangeDatepicker {
14790
14552
  return;
14791
14553
  }
14792
14554
 
14793
- // DOM focus stays on the grid wrapper while arrow keys move the active
14794
- // cell, so cell buttons never receive native focus. The debounced live
14795
- // region carries the full-context announcement instead.
14555
+ // With aria-activedescendant, the button no longer receives native focus,
14556
+ // so we use the debounced live region for the full context announcement.
14796
14557
  const announcement = this.buildFocusAnnouncement(date);
14797
14558
  this.announceFocusDebounced(announcement);
14798
14559
 
@@ -14862,10 +14623,10 @@ class AuroCalendar extends RangeDatepicker {
14862
14623
  return null;
14863
14624
  }
14864
14625
 
14865
- const departTs = new Date(parsedFrom * 1000).setHours(0, 0, 0, 0) / 1000;
14626
+ const departTs = startOfDay$2(parsedFrom * 1000) / 1000;
14866
14627
  const parsedTo = Number.parseInt(this.dateTo, 10);
14867
14628
  const hasTo = Number.isFinite(parsedTo);
14868
- const returnTs = hasTo ? new Date(parsedTo * 1000).setHours(0, 0, 0, 0) / 1000 : null;
14629
+ const returnTs = hasTo ? startOfDay$2(parsedTo * 1000) / 1000 : null;
14869
14630
 
14870
14631
  if (date === departTs) {
14871
14632
  return this.datepicker.rangeLabelStart || 'range start';
@@ -14879,22 +14640,36 @@ class AuroCalendar extends RangeDatepicker {
14879
14640
  if (hasTo && date > departTs && date < returnTs) {
14880
14641
  return this.datepicker.rangeLabelInRange || 'in range';
14881
14642
  }
14882
- if (!hasTo && date > departTs) {
14883
- return this.datepicker.rangeLabelEndPreview || 'previewing range end';
14884
- }
14885
14643
  return this.datepicker.rangeLabelAfterRange || 'after range';
14886
14644
  }
14887
14645
 
14888
14646
  /**
14889
- * Checks whether a given date is a blackout date. Delegates to the
14890
- * memoized `_getBlackoutSet` so the YYYY-MM-DD parsing and the
14891
- * legacy/ISO merge rules live in exactly one place (see `blackoutUtils.js`).
14647
+ * Checks whether a given date is a blackout date.
14892
14648
  * @private
14893
14649
  * @param {Number} dateTs - Unix timestamp (seconds).
14894
14650
  * @returns {Boolean} True if the date is blacked out.
14895
14651
  */
14896
14652
  isDateBlackout(dateTs) {
14897
- return this._getBlackoutSet().has(dateTs);
14653
+ // Check legacy disabledDays.
14654
+ if (Array.isArray(this.disabledDays) && this.disabledDays.length > 0) {
14655
+ if (this.disabledDays.findIndex((day) => parseInt(day, 10) === dateTs) !== -1) {
14656
+ return true;
14657
+ }
14658
+ }
14659
+
14660
+ // Check ISO blackoutDates.
14661
+ const blackoutDates = this.datepicker?.blackoutDates;
14662
+ if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
14663
+ const date = new Date(dateTs * 1000);
14664
+ const yyyy = date.getFullYear();
14665
+ const mm = String(date.getMonth() + 1).padStart(2, '0');
14666
+ const dd = String(date.getDate()).padStart(2, '0');
14667
+ if (blackoutDates.includes(`${yyyy}-${mm}-${dd}`)) {
14668
+ return true;
14669
+ }
14670
+ }
14671
+
14672
+ return false;
14898
14673
  }
14899
14674
 
14900
14675
  /**
@@ -15061,34 +14836,9 @@ class AuroCalendar extends RangeDatepicker {
15061
14836
  // the last one.
15062
14837
  if (this._announceRafId) {
15063
14838
  cancelAnimationFrame(this._announceRafId);
15064
- this._announceRafId = null;
15065
14839
  }
15066
- this._deliverAnnouncement(dateStr, 0);
15067
- }
15068
-
15069
- /**
15070
- * Writes `dateStr` to the live region. If the dropdown's dialog hasn't
15071
- * mounted yet (so getOrCreateLiveRegion can't attach), retries on the
15072
- * next animation frame up to MAX_LIVE_REGION_RETRIES instead of silently
15073
- * dropping the announcement. The retry uses the same `_announceRafId`
15074
- * the double-rAF below uses, so a newer announceSelection call (or
15075
- * disconnectedCallback) cancels any in-flight retry.
15076
- * @private
15077
- * @param {String} dateStr - The localized date string to announce.
15078
- * @param {Number} attempts - Number of prior retry attempts.
15079
- * @returns {void}
15080
- */
15081
- _deliverAnnouncement(dateStr, attempts) {
15082
14840
  const liveRegion = this.getOrCreateLiveRegion();
15083
14841
  if (!liveRegion) {
15084
- const MAX_LIVE_REGION_RETRIES = 10;
15085
- if (attempts < MAX_LIVE_REGION_RETRIES) {
15086
- this._announceRafId = requestAnimationFrame(() => {
15087
- this._deliverAnnouncement(dateStr, attempts + 1);
15088
- });
15089
- } else {
15090
- this._announceRafId = null;
15091
- }
15092
14842
  return;
15093
14843
  }
15094
14844
 
@@ -15274,7 +15024,7 @@ class AuroCalendar extends RangeDatepicker {
15274
15024
  </button>
15275
15025
  ` : undefined}
15276
15026
  </div>
15277
- <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}">
15027
+ <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}">
15278
15028
  ${this.renderAllCalendars()}
15279
15029
  </div>
15280
15030
  </div>
@@ -19159,7 +18909,7 @@ let AuroHelpText$2 = class AuroHelpText extends LitElement {
19159
18909
  }
19160
18910
  };
19161
18911
 
19162
- var formkitVersion$1 = '202606252324';
18912
+ var formkitVersion$1 = '202606252337';
19163
18913
 
19164
18914
  let AuroElement$2 = class AuroElement extends LitElement {
19165
18915
  static get properties() {
@@ -30877,6 +30627,13 @@ class AuroInputUtilities {
30877
30627
  * @returns {string | undefined}
30878
30628
  */
30879
30629
  toFormattedValue(valueObject, format) {
30630
+ // Exposed publicly via `AuroInputUtil.toFormattedValue`, so a missing
30631
+ // `format` argument has to fail gracefully rather than throw on
30632
+ // `format.toLowerCase()`. Treat any falsy value (undefined, null, '')
30633
+ // as "no format → no display value".
30634
+ if (!format) {
30635
+ return undefined;
30636
+ }
30880
30637
  const normalizedFormat = format.toLowerCase();
30881
30638
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
30882
30639
 
@@ -31027,79 +30784,18 @@ class BaseInput extends AuroElement$1 {
31027
30784
  constructor() {
31028
30785
  super();
31029
30786
 
31030
- this.appearance = "default";
31031
- this.disabled = false;
31032
- this.layout = 'classic';
31033
- this.locale = 'en-US';
31034
- this.max = undefined;
31035
- this._maxObject = undefined;
31036
- this.maxLength = undefined;
31037
- this.min = undefined;
31038
- this._minObject = undefined;
31039
- this.minLength = undefined;
31040
- this.required = false;
31041
- this.onDark = false;
31042
- this.setCustomValidityForType = undefined;
31043
- this.size = 'lg';
31044
- this.shape = 'classic';
31045
- this.value = undefined;
31046
- this._valueObject = undefined;
31047
-
31048
- this._initializePrivateDefaults();
31049
- }
31050
-
31051
- /**
31052
- * Internal Defaults.
31053
- * @private
31054
- * @returns {void}
31055
- */
31056
- _initializePrivateDefaults() {
30787
+ // Single-source initialization. Alphabetized so duplicate or stale
30788
+ // defaults are immediately obvious on a diff. Every field is assigned
30789
+ // exactly once here (previously the constructor + the old
30790
+ // `_initializePrivateDefaults` overlapped — both wrote ~14 of the same
30791
+ // fields and double-allocated `util` and `validation`, discarding the
30792
+ // first instance). `validation` is now allocated exactly once; `util`
30793
+ // is seeded here with an en-US default and then rebuilt in
30794
+ // `connectedCallback` once the consumer-resolved locale is available,
30795
+ // so a parent (datepicker/combobox) calling `validate()` synchronously
30796
+ // during its own update cycle sees a populated util instance.
31057
30797
  this.activeLabel = false;
31058
- this.appearance = "default";
31059
- this.icon = false;
31060
- this.disabled = false;
31061
- this.dvInputOnly = false;
31062
- this.hideLabelVisually = false;
31063
- this.max = undefined;
31064
- this.maxLength = undefined;
31065
- this.min = undefined;
31066
- this.minLength = undefined;
31067
- this.noValidate = false;
31068
- this.onDark = false;
31069
- this.required = false;
31070
- this.setCustomValidityForType = undefined;
31071
-
31072
- // Used for storing raw values returned from input mask.
31073
- this._rawMaskValue = undefined;
31074
-
31075
- /**
31076
- * @private
31077
- */
31078
- this.layout = 'classic';
31079
-
31080
- /**
31081
- * @private
31082
- */
31083
- this.shape = 'classic';
31084
-
31085
- /**
31086
- * @private
31087
- */
31088
- this.size = 'lg';
31089
-
31090
- this.touched = false;
31091
- this.util = new AuroInputUtilities({
31092
- locale: "en-US",
31093
- format: this.format
31094
- });
31095
- this.validation = new AuroFormValidation();
31096
- this.inputIconName = undefined;
31097
- this.showPassword = false;
31098
- this.validationCCLength = undefined;
31099
- this.hasValue = false;
31100
- this.label = 'Input label is undefined';
31101
-
31102
-
30798
+ /** @private */
31103
30799
  this.allowedInputTypes = [
31104
30800
  "text",
31105
30801
  "number",
@@ -31108,7 +30804,8 @@ class BaseInput extends AuroElement$1 {
31108
30804
  "credit-card",
31109
30805
  "tel"
31110
30806
  ];
31111
- this.icon = false;
30807
+ this.appearance = "default";
30808
+ /** @private */
31112
30809
  this.dateFormatMap = {
31113
30810
  'mm/dd/yyyy': 'dateMMDDYYYY',
31114
30811
  'dd/mm/yyyy': 'dateDDMMYYYY',
@@ -31125,27 +30822,57 @@ class BaseInput extends AuroElement$1 {
31125
30822
  'dd/mm': 'dateDDMM',
31126
30823
  'mm/dd': 'dateMMDD'
31127
30824
  };
30825
+ this.disabled = false;
30826
+ /** @private */
31128
30827
  this.domHandler = new DomHandler();
31129
30828
  this.dvInputOnly = false;
31130
30829
  this.hasValue = false;
30830
+ this.hideLabelVisually = false;
30831
+ this.icon = false;
30832
+ /** @private */
31131
30833
  this.inputIconName = undefined;
30834
+ /** @private */
31132
30835
  this.label = 'Input label is undefined';
30836
+ this.layout = 'classic';
30837
+ this.locale = 'en-US';
30838
+ this.max = undefined;
30839
+ this._maxObject = undefined;
30840
+ this.maxLength = undefined;
30841
+ this.min = undefined;
30842
+ this._minObject = undefined;
30843
+ this.minLength = undefined;
31133
30844
  this.noValidate = false;
31134
- this._rawMaskValue = undefined; // Used for storing raw values returned from input mask.
30845
+ this.onDark = false;
30846
+ // Raw values returned from the input mask before model normalization.
30847
+ this._rawMaskValue = undefined;
30848
+ this.required = false;
30849
+ this.setCustomValidityForType = undefined;
30850
+ // Credit Card is intentionally excluded — its mask manages the cursor
30851
+ // itself, and listing it here caused cursor placement issues in Safari.
30852
+ /** @private */
31135
30853
  this.setSelectionInputTypes = [
31136
30854
  "text",
31137
30855
  "password",
31138
30856
  "email"
31139
- ]; // Credit Card is not included as this caused cursor placement issues in Safari.
30857
+ ];
30858
+ this.shape = 'classic';
30859
+ /** @private */
31140
30860
  this.showPassword = false;
30861
+ this.size = 'lg';
31141
30862
  this.touched = false;
30863
+ /** @private */
31142
30864
  this.uniqueId = new UniqueId().create();
30865
+ /** @private */
31143
30866
  this.util = new AuroInputUtilities({
31144
30867
  locale: this.locale,
31145
30868
  format: this.format
31146
30869
  });
30870
+ /** @private */
31147
30871
  this.validation = new AuroFormValidation();
30872
+ /** @private */
31148
30873
  this.validationCCLength = undefined;
30874
+ this.value = undefined;
30875
+ this._valueObject = undefined;
31149
30876
  }
31150
30877
 
31151
30878
  // function to define props used within the scope of this component
@@ -31693,6 +31420,15 @@ class BaseInput extends AuroElement$1 {
31693
31420
 
31694
31421
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
31695
31422
 
31423
+ // Normalize the format token to lowercase so case-mixed values supplied
31424
+ // via attribute (e.g. `format="MM/DD/YYYY"`) hit the `dateFormatMap`
31425
+ // lookup inside `setCustomHelpTextMessage`. Without this, an uppercase
31426
+ // format silently misses the map and leaves `setCustomValidityForType`
31427
+ // unset.
31428
+ if (this.format) {
31429
+ this.format = this.format.toLowerCase();
31430
+ }
31431
+
31696
31432
  // use validity message override if declared when initializing the component
31697
31433
  if (this.hasAttribute('setCustomValidity')) {
31698
31434
  this.ValidityMessageOverride = this.setCustomValidity;
@@ -32126,6 +31862,38 @@ class BaseInput extends AuroElement$1 {
32126
31862
  this.touched = true;
32127
31863
  this.validation.validate(this);
32128
31864
  }
31865
+
31866
+ // Prevents cursor jumping in Safari. Setting `this.value` triggers a Lit
31867
+ // update that can re-render the input and reset the native cursor; we
31868
+ // capture the caret position before that update commits and restore it
31869
+ // via `setSelectionRange` once the update has flushed. Gated on
31870
+ // `setSelectionInputTypes` so credit-card (and other masked types whose
31871
+ // formatter manages the cursor itself) doesn't get a competing write.
31872
+ // Capture the caret position INSIDE the gate — reading `selectionStart`
31873
+ // on input types that don't support text selection (number, email in
31874
+ // some browsers) throws InvalidStateError, which would crash all input
31875
+ // handling. Wrap the read in try/catch belt-and-suspenders even though
31876
+ // the gated types currently support it, since the list is a public
31877
+ // property a consumer could mutate.
31878
+ if (this.setSelectionInputTypes.includes(this.type)) {
31879
+ let selectionStart;
31880
+ try {
31881
+ selectionStart = this.inputElement.selectionStart;
31882
+ } catch (error) { // eslint-disable-line no-unused-vars
31883
+ return;
31884
+ }
31885
+ if (typeof selectionStart !== 'number') {
31886
+ return;
31887
+ }
31888
+ this.updateComplete.then(() => {
31889
+ try {
31890
+ this.inputElement.setSelectionRange(selectionStart, selectionStart);
31891
+ } catch (error) { // eslint-disable-line no-unused-vars
31892
+ // Some input types (number/email in certain UAs) throw on
31893
+ // setSelectionRange; swallow and let the native cursor stand.
31894
+ }
31895
+ });
31896
+ }
32129
31897
  }
32130
31898
 
32131
31899
  /**
@@ -32752,7 +32520,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
32752
32520
  }
32753
32521
  };
32754
32522
 
32755
- var formkitVersion = '202606252324';
32523
+ var formkitVersion = '202606252337';
32756
32524
 
32757
32525
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
32758
32526
  // See LICENSE in the project root for license information.
@@ -33255,6 +33023,7 @@ class AuroInput extends BaseInput {
33255
33023
  <${this.buttonTag}
33256
33024
  @click="${this.handleClickShowPassword}"
33257
33025
  appearance="${this.onDark ? 'inverse' : this.appearance}"
33026
+ aria-pressed="${this.showPassword ? 'true' : 'false'}"
33258
33027
  class="notificationBtn passwordBtn"
33259
33028
  shape="circle"
33260
33029
  size="sm"
@@ -33328,25 +33097,29 @@ class AuroInput extends BaseInput {
33328
33097
  * @returns {html} - Returns HTML for the help text and error message.
33329
33098
  */
33330
33099
  renderHtmlHelpText() {
33100
+ // Single `<p>` with stable identity across validity transitions —
33101
+ // previously two distinct templates (valid vs invalid) caused Lit to
33102
+ // replace the node entirely on a flip, and VoiceOver wouldn't
33103
+ // re-announce because the live-region element it was watching had been
33104
+ // removed and a new one inserted. Keeping one node means the `role`,
33105
+ // `aria-live`, and text content all change in-place, which AT does
33106
+ // observe and announce.
33107
+ const isError = this.validity && this.validity !== 'valid';
33331
33108
  return html$1`
33332
- ${!this.validity || this.validity === undefined || this.validity === 'valid'
33333
- ? html$1`
33334
- <${this.helpTextTag}
33335
- appearance="${this.onDark ? 'inverse' : this.appearance}">
33336
- <p id="${this.uniqueId}" part="helpText">
33337
- <slot name="helpText">${this.getHelpText()}</slot>
33338
- </p>
33339
- </${this.helpTextTag}>
33340
- `
33341
- : html$1`
33342
- <${this.helpTextTag} error
33343
- appearance="${this.onDark ? 'inverse' : this.appearance}">
33344
- <p id="${this.uniqueId}" role="alert" aria-live="assertive" part="helpText">
33345
- ${this.errorMessage}
33346
- </p>
33347
- </${this.helpTextTag}>
33348
- `
33349
- }
33109
+ <${this.helpTextTag}
33110
+ appearance="${this.onDark ? 'inverse' : this.appearance}"
33111
+ ?error=${isError}>
33112
+ <p
33113
+ id="${this.uniqueId}"
33114
+ part="helpText"
33115
+ role="${ifDefined(isError ? 'alert' : undefined)}"
33116
+ aria-live="${ifDefined(isError ? 'assertive' : undefined)}">
33117
+ ${isError
33118
+ ? this.errorMessage
33119
+ : html$1`<slot name="helpText">${this.getHelpText()}</slot>`
33120
+ }
33121
+ </p>
33122
+ </${this.helpTextTag}>
33350
33123
  `;
33351
33124
  }
33352
33125
 
@@ -33493,6 +33266,15 @@ function formatISODate(isoStr, format) {
33493
33266
  try {
33494
33267
  const date = dateFormatter.stringToDateInstance(isoStr);
33495
33268
 
33269
+ // `stringToDateInstance` returns an `Invalid Date` for malformed strings
33270
+ // and `null` for non-string input — it does NOT throw. Without this
33271
+ // guard, `getFullYear()`/`getMonth()`/`getDate()` on an Invalid Date
33272
+ // yield `NaN`, and `String(NaN).padStart(4, '0')` produces literals
33273
+ // like "0NaN/0NaN/0NaN" instead of `undefined`.
33274
+ if (!(date instanceof Date) || Number.isNaN(date.getTime())) {
33275
+ return undefined;
33276
+ }
33277
+
33496
33278
  const year = String(date.getFullYear()).padStart(4, '0');
33497
33279
  const month = String(date.getMonth() + 1).padStart(2, '0');
33498
33280
  const day = String(date.getDate()).padStart(2, '0');
@@ -33503,7 +33285,10 @@ function formatISODate(isoStr, format) {
33503
33285
  replace(/mm/iu, month).
33504
33286
  replace(/dd/iu, day);
33505
33287
  } catch (err) {
33506
- // If the input string is not a valid date, return undefined
33288
+ // Defensive: the Date-returning path is guarded above, but `parseDate`
33289
+ // (inside `stringToDateInstance`) could throw on pathological input
33290
+ // future-library-versions might introduce. Treat any thrown error as
33291
+ // "not a valid date" and return undefined.
33507
33292
  return undefined;
33508
33293
  }
33509
33294
  }
@@ -34229,7 +34014,6 @@ class AuroDatePicker extends AuroElement {
34229
34014
  this.rangeLabelBeforeRange = 'before range';
34230
34015
  this.rangeLabelInRange = 'in range';
34231
34016
  this.rangeLabelAfterRange = 'after range';
34232
- this.rangeLabelEndPreview = 'previewing range end';
34233
34017
  this.blackoutDates = [];
34234
34018
  this.blackoutLabel = 'unavailable';
34235
34019
  this.navLabelPrevMonth = 'Previous month';
@@ -34329,22 +34113,6 @@ class AuroDatePicker extends AuroElement {
34329
34113
  */
34330
34114
  this.handleClick = this.handleClick.bind(this);
34331
34115
 
34332
- /**
34333
- * Single AbortController shared by every listener registered in the
34334
- * configure* methods. Lets disconnectedCallback tear all of them down
34335
- * with one abort() call.
34336
- *
34337
- * The genuine leak risk is the listeners attached to children that can
34338
- * outlive the host if they get reparented — `this.dropdown`,
34339
- * `this.calendar`, and the inputs inside the dropdown's slot.
34340
- * Listeners attached to `this` (e.g. focusin/focusout on the host)
34341
- * form a self-contained reference graph that the GC can collect with
34342
- * the host anyway, but they share the same signal so the cleanup
34343
- * pattern stays uniform across all configure* sites.
34344
- * @private
34345
- */
34346
- this._listenerAbortController = new AbortController();
34347
-
34348
34116
  /**
34349
34117
  * @private
34350
34118
  */
@@ -34393,7 +34161,6 @@ class AuroDatePicker extends AuroElement {
34393
34161
 
34394
34162
  /**
34395
34163
  * Label announced for blackout (disabled but in-range) date cells.
34396
- * @default 'unavailable'
34397
34164
  */
34398
34165
  blackoutLabel: {
34399
34166
  type: String,
@@ -34410,7 +34177,6 @@ class AuroDatePicker extends AuroElement {
34410
34177
 
34411
34178
  /**
34412
34179
  * Accessible label for the calendar grid containing the days of the month.
34413
- * @default 'Calendar days of the month'
34414
34180
  */
34415
34181
  calendarGridLabel: {
34416
34182
  type: String,
@@ -34573,7 +34339,6 @@ class AuroDatePicker extends AuroElement {
34573
34339
 
34574
34340
  /**
34575
34341
  * Accessible label for the next month navigation button.
34576
- * @default 'Next month'
34577
34342
  */
34578
34343
  navLabelNextMonth: {
34579
34344
  type: String,
@@ -34582,7 +34347,6 @@ class AuroDatePicker extends AuroElement {
34582
34347
 
34583
34348
  /**
34584
34349
  * Accessible label for the previous month navigation button.
34585
- * @default 'Previous month'
34586
34350
  */
34587
34351
  navLabelPrevMonth: {
34588
34352
  type: String,
@@ -34660,11 +34424,7 @@ class AuroDatePicker extends AuroElement {
34660
34424
  },
34661
34425
 
34662
34426
  /**
34663
- * Label announced for cells after a fully selected range (both
34664
- * `dateFrom` and `dateTo` are set). While a range is still being
34665
- * picked (`dateFrom` set, `dateTo` unset), focused cells past the
34666
- * start use `rangeLabelEndPreview` instead.
34667
- * @default 'after range'
34427
+ * Label announced for cells after the range (or after start when no end is selected).
34668
34428
  */
34669
34429
  rangeLabelAfterRange: {
34670
34430
  type: String,
@@ -34673,7 +34433,6 @@ class AuroDatePicker extends AuroElement {
34673
34433
 
34674
34434
  /**
34675
34435
  * Label announced for cells before the range start.
34676
- * @default 'before range'
34677
34436
  */
34678
34437
  rangeLabelBeforeRange: {
34679
34438
  type: String,
@@ -34682,27 +34441,14 @@ class AuroDatePicker extends AuroElement {
34682
34441
 
34683
34442
  /**
34684
34443
  * Label announced for the range end date cell.
34685
- * @default 'range end'
34686
34444
  */
34687
34445
  rangeLabelEnd: {
34688
34446
  type: String,
34689
34447
  reflect: true
34690
34448
  },
34691
34449
 
34692
- /**
34693
- * Label announced for the focused cell while previewing a range end
34694
- * (dateFrom set, dateTo not yet selected). Tells AT users that
34695
- * pressing Enter would commit this cell as the range end.
34696
- * @default 'previewing range end'
34697
- */
34698
- rangeLabelEndPreview: {
34699
- type: String,
34700
- reflect: true
34701
- },
34702
-
34703
34450
  /**
34704
34451
  * Label announced for cells within the selected range.
34705
- * @default 'in range'
34706
34452
  */
34707
34453
  rangeLabelInRange: {
34708
34454
  type: String,
@@ -34711,7 +34457,6 @@ class AuroDatePicker extends AuroElement {
34711
34457
 
34712
34458
  /**
34713
34459
  * Label announced for the range start date cell.
34714
- * @default 'range start'
34715
34460
  */
34716
34461
  rangeLabelStart: {
34717
34462
  type: String,
@@ -34719,7 +34464,7 @@ class AuroDatePicker extends AuroElement {
34719
34464
  },
34720
34465
 
34721
34466
  /**
34722
- * Dates that the user should have for reference as part of their decision-making when selecting a date.
34467
+ * Dates that the user should have for reference as part of their decision making when selecting a date.
34723
34468
  * This should be a JSON string array of ISO date strings (`YYYY-MM-DD`).
34724
34469
  */
34725
34470
  referenceDates: {
@@ -35076,26 +34821,10 @@ class AuroDatePicker extends AuroElement {
35076
34821
  // ─── Vendor calendar time conversions ─────────────────────────────────────
35077
34822
 
35078
34823
  /**
35079
- * Converts a Unix timestamp (seconds) from the vendored range-datepicker
35080
- * (`src/vendor/wc-range-datepicker/day.js`) to an ISO date string.
35081
- *
35082
- * Timezone contract:
35083
- * - INPUT: `time` is assumed to be the seconds-since-epoch of **local
35084
- * midnight** for the intended calendar day. The vendor's Day constructor
35085
- * builds it via `date-fns format(date, 't')` from a locally-constructed
35086
- * Date, so this assumption currently holds end-to-end.
35087
- * - OUTPUT: `dateFormatter.toISOFormatString` reads the Date's local
35088
- * getFullYear/getMonth/getDate components, so the returned YYYY-MM-DD
35089
- * string matches the local calendar day.
35090
- *
35091
- * If the vendor ever switches to emitting UTC-midnight timestamps, this
35092
- * conversion will silently shift the returned date by one day in zones
35093
- * west of UTC. Any vendor swap should re-verify this contract; the TZ
35094
- * regression suite (`npm run test:hst`, UTC-10) will catch the symptom.
35095
- *
34824
+ * Converts a Unix timestamp (seconds) from the vendor calendar to an ISO date string.
35096
34825
  * @private
35097
- * @param {number} time - Unix timestamp (seconds), local midnight of the day.
35098
- * @returns {string} ISO date string (yyyy-mm-dd) reflecting the local calendar day.
34826
+ * @param {number} time - Unix timestamp in seconds.
34827
+ * @returns {string} ISO date string (yyyy-mm-dd).
35099
34828
  */
35100
34829
  convertWcTimeToDate(time) {
35101
34830
  return dateFormatter$1.toISOFormatString(new Date(time * 1000));
@@ -35197,8 +34926,8 @@ class AuroDatePicker extends AuroElement {
35197
34926
  }
35198
34927
  }
35199
34928
 
35200
- // Focus the calendar grid wrapper. The live region (announced just
35201
- // below) handles the SR announcement for the active cell.
34929
+ // Focus the calendar grid wrapper (aria-activedescendant handles
34930
+ // the SR announcement for the active cell).
35202
34931
  if (activeCell) {
35203
34932
  this.calendar.focusActiveCell();
35204
34933
 
@@ -35248,13 +34977,11 @@ class AuroDatePicker extends AuroElement {
35248
34977
  this.dropdown.bibDialogLabel = labelElement.textContent.trim() || undefined;
35249
34978
  }
35250
34979
 
35251
- const { signal } = this._listenerAbortController;
35252
-
35253
34980
  this.dropdown.addEventListener('auroDropdown-triggerClick', () => {
35254
34981
  if (!this.isPopoverVisible) {
35255
34982
  this.dropdown.show();
35256
34983
  }
35257
- }, { signal });
34984
+ });
35258
34985
 
35259
34986
  this.dropdown.addEventListener('auroDropdown-toggled', () => {
35260
34987
  this.notifyDatepickerToggled();
@@ -35272,7 +34999,7 @@ class AuroDatePicker extends AuroElement {
35272
34999
  if (this.valueObject) {
35273
35000
  this.centralDate = this.value;
35274
35001
  } else if (!this.centralDate && !this.calendarStartDate && !this.minDate) {
35275
- this.centralDate = dateFormatter$1.toISOFormatString(new Date());
35002
+ this.centralDate = new Date();
35276
35003
  }
35277
35004
  }
35278
35005
 
@@ -35352,7 +35079,7 @@ class AuroDatePicker extends AuroElement {
35352
35079
  this.forceScrollOnNextMobileCalendarRender = false;
35353
35080
  }, 0);
35354
35081
  }
35355
- }, { signal });
35082
+ });
35356
35083
 
35357
35084
  // Handle responsive strategy changes while the dropdown is open
35358
35085
  // (e.g. resizing from desktop → mobile or vice versa).
@@ -35399,7 +35126,7 @@ class AuroDatePicker extends AuroElement {
35399
35126
  });
35400
35127
  });
35401
35128
  }
35402
- }, { signal });
35129
+ });
35403
35130
  }
35404
35131
 
35405
35132
  /**
@@ -35412,8 +35139,6 @@ class AuroDatePicker extends AuroElement {
35412
35139
 
35413
35140
  this.inputList = [...this.dropdown.querySelectorAll(this.inputTag._$litStatic$)];
35414
35141
 
35415
- const { signal } = this._listenerAbortController;
35416
-
35417
35142
  this.inputList.forEach((input, index) => {
35418
35143
  input.addEventListener('input', (event) => {
35419
35144
  event.stopPropagation();
@@ -35425,7 +35150,7 @@ class AuroDatePicker extends AuroElement {
35425
35150
  }
35426
35151
 
35427
35152
  this.notifyValueChanged();
35428
- }, { signal });
35153
+ });
35429
35154
 
35430
35155
  input.addEventListener('auroFormElement-validated', (evt) => {
35431
35156
  // not to bubble up input's validated event.
@@ -35441,7 +35166,7 @@ class AuroDatePicker extends AuroElement {
35441
35166
  this.validity = evt.detail.validity;
35442
35167
  this.errorMessage = evt.detail.message;
35443
35168
  }
35444
- }, { signal });
35169
+ });
35445
35170
  });
35446
35171
  }
35447
35172
 
@@ -35455,32 +35180,19 @@ class AuroDatePicker extends AuroElement {
35455
35180
  this.calendar.datepicker = this;
35456
35181
  this.calendar.dropdown = this.dropdown;
35457
35182
 
35458
- const { signal } = this._listenerAbortController;
35459
-
35460
35183
  this.calendar.addEventListener('auroCalendar-dateSelected', () => {
35461
- // Compare the input's ISO value against the *converted* calendar
35462
- // timestamp (the vendor's `dateFrom`/`dateTo` are Unix-seconds
35463
- // strings — comparing the input ISO directly against them would
35464
- // never match, so the write would fire on every event and emit
35465
- // redundant input/change activity).
35466
- if (this.calendar.dateFrom !== undefined) {
35467
- const fromIso = this.convertWcTimeToDate(this.calendar.dateFrom);
35468
- if (this.inputList[0].value !== fromIso) {
35469
- this.inputList[0].value = fromIso;
35470
- }
35184
+ if (this.inputList[0].value !== this.calendar.dateFrom && this.calendar.dateFrom !== undefined) {
35185
+ this.inputList[0].value = this.convertWcTimeToDate(this.calendar.dateFrom);
35471
35186
  }
35472
35187
 
35473
- if (this.inputList[1] && this.calendar.dateTo) {
35474
- const toIso = this.convertWcTimeToDate(this.calendar.dateTo);
35475
- if (this.inputList[1].value !== toIso) {
35476
- this.inputList[1].value = toIso;
35477
- }
35188
+ if (this.inputList[1] && this.calendar.dateTo && this.inputList[1].value !== this.calendar.dateTo) {
35189
+ this.inputList[1].value = this.convertWcTimeToDate(this.calendar.dateTo);
35478
35190
  }
35479
- }, { signal });
35191
+ });
35480
35192
 
35481
35193
  this.calendar.addEventListener('auroCalendar-dismissRequest', () => {
35482
35194
  this.dropdown.hide();
35483
- }, { signal });
35195
+ });
35484
35196
 
35485
35197
  this.calendar.addEventListener('auroCalendar-centralDateChanged', (event) => {
35486
35198
  const match = this.centralDateObject && this.util.datesMatch(event.detail.date, this.centralDateObject);
@@ -35490,7 +35202,7 @@ class AuroDatePicker extends AuroElement {
35490
35202
  }
35491
35203
 
35492
35204
  this.notifyMonthChanged(event);
35493
- }, { signal });
35205
+ });
35494
35206
  }
35495
35207
 
35496
35208
  /**
@@ -35499,17 +35211,10 @@ class AuroDatePicker extends AuroElement {
35499
35211
  * @returns {void}
35500
35212
  */
35501
35213
  configureDatepicker() {
35502
- // These listeners are on `this` (the host), so they would GC with the
35503
- // host even without the abort signal — see the leak rationale on
35504
- // `_listenerAbortController`. The signal is still passed for uniform
35505
- // cleanup semantics with the child-element listeners in the other
35506
- // configure* methods.
35507
- const { signal } = this._listenerAbortController;
35508
-
35509
35214
  this.addEventListener('focusin', () => {
35510
35215
  this.touched = true;
35511
35216
  this.hasFocus = true;
35512
- }, { signal });
35217
+ });
35513
35218
 
35514
35219
  this.addEventListener('focusout', () => {
35515
35220
  this.hasFocus = false;
@@ -35521,7 +35226,7 @@ class AuroDatePicker extends AuroElement {
35521
35226
  if (!this.matches(':focus-within')) {
35522
35227
  this.validate();
35523
35228
  }
35524
- }, { signal });
35229
+ });
35525
35230
 
35526
35231
  if (this.valueObject) {
35527
35232
  this.calendar.dateFrom = this.convertToWcValidTime(this.valueObject);
@@ -35719,41 +35424,6 @@ class AuroDatePicker extends AuroElement {
35719
35424
  return this.validity !== undefined && this.validity !== 'valid';
35720
35425
  }
35721
35426
 
35722
- /**
35723
- * Per-class dedup set used by `_warnInvalidLocale`. Static so the dedup
35724
- * spans every datepicker instance on the page; lives on the class (not
35725
- * at module scope) so it stays an encapsulated implementation detail of
35726
- * this component and does not interfere with WCA's class-JSDoc
35727
- * attachment.
35728
- * @private
35729
- */
35730
- static _warnedInvalidLocales = new Set();
35731
-
35732
- /**
35733
- * Logs a one-time `console.debug` when an unsupported locale falls back to
35734
- * en-US. Deduped by the offending tag so noisy re-renders that resurface
35735
- * the same bad value stay quiet, but each new bad value still signals so
35736
- * consumers can spot the typo or missing tag.
35737
- * @private
35738
- * @param {string|undefined} badLocale - The locale value that failed.
35739
- * @returns {void}
35740
- */
35741
- _warnInvalidLocale(badLocale) {
35742
- // Stringify without coalescing — `String(undefined)` / `String(null)`
35743
- // surface the actual offending value in the log, instead of the
35744
- // ambiguous `Locale ""` that `String(badLocale ?? '')` would produce.
35745
- // Dedup still works correctly because each unique stringification
35746
- // becomes its own Set entry.
35747
- const key = String(badLocale);
35748
- const seen = AuroDatePicker._warnedInvalidLocales;
35749
- if (seen.has(key)) {
35750
- return;
35751
- }
35752
- seen.add(key);
35753
- // eslint-disable-next-line no-console
35754
- 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".`);
35755
- }
35756
-
35757
35427
  /**
35758
35428
  * Lifecycle method to check if the locale is valid.
35759
35429
  * @ignore
@@ -35764,15 +35434,10 @@ class AuroDatePicker extends AuroElement {
35764
35434
  if (changedProperties.has('locale')) {
35765
35435
  try {
35766
35436
  const supported = Intl.DateTimeFormat.supportedLocalesOf([this.locale], { localeMatcher: 'lookup' });
35767
- if (supported.length > 0) {
35768
- this._validLocale = this.locale;
35769
- } else {
35770
- this._validLocale = 'en-US';
35771
- this._warnInvalidLocale(this.locale);
35772
- }
35437
+ this._validLocale = supported.length > 0 ? this.locale : 'en-US';
35773
35438
  } catch {
35439
+ console.debug(`[AuroDatePicker] The locale "${this.locale}" is not valid. Falling back to "en-US".`); // eslint-disable-line no-console
35774
35440
  this._validLocale = 'en-US';
35775
- this._warnInvalidLocale(this.locale);
35776
35441
  }
35777
35442
 
35778
35443
  const previousLocaleFormat = getDateFormatFromLocale$1(changedProperties.get('locale'));
@@ -35854,6 +35519,8 @@ class AuroDatePicker extends AuroElement {
35854
35519
  // Skip centralDate update when user clicked a cell in range mode
35855
35520
  // to prevent the displayed months from shifting
35856
35521
  this.centralDate = this.value;
35522
+ //TODO: TEST THIS CHANGE
35523
+ // this.calendarRenderUtil.updateCentralDate(this, this.value);
35857
35524
  }
35858
35525
 
35859
35526
  this.setHasValue();
@@ -35913,6 +35580,8 @@ class AuroDatePicker extends AuroElement {
35913
35580
  // Skip centralDate update when user clicked a cell in range mode
35914
35581
  // to prevent the displayed months from shifting
35915
35582
  this.centralDate = this.valueEnd;
35583
+ // TODO: TEST THIS CHANGE
35584
+ // this.calendarRenderUtil.updateCentralDate(this, this.formattedValueEnd);
35916
35585
  }
35917
35586
 
35918
35587
  this.validate();
@@ -36054,7 +35723,7 @@ class AuroDatePicker extends AuroElement {
36054
35723
  * @returns {void}
36055
35724
  */
36056
35725
  configureClickHandler() {
36057
- this.addEventListener('click', this.handleClick, { signal: this._listenerAbortController.signal });
35726
+ this.addEventListener('click', this.handleClick);
36058
35727
  }
36059
35728
 
36060
35729
  firstUpdated() {
@@ -36062,15 +35731,6 @@ class AuroDatePicker extends AuroElement {
36062
35731
  // Add the tag name as an attribute if it is different than the component name
36063
35732
  this.runtimeUtils.handleComponentTagRename(this, 'auro-datepicker');
36064
35733
 
36065
- // If the element was disconnected before this first render finished,
36066
- // disconnectedCallback's microtask already aborted the controller. The
36067
- // connectedCallback reinit guard skips that case because `hasUpdated`
36068
- // is still false. Mint a fresh controller here so configure* registers
36069
- // listeners against a live signal.
36070
- if (this._listenerAbortController.signal.aborted) {
36071
- this._listenerAbortController = new AbortController();
36072
- }
36073
-
36074
35734
  this.configureDropdown();
36075
35735
  this.configureInput();
36076
35736
  this.configureCalendar();
@@ -36082,36 +35742,9 @@ class AuroDatePicker extends AuroElement {
36082
35742
  connectedCallback() {
36083
35743
  super.connectedCallback();
36084
35744
 
36085
- // True reconnect after `disconnectedCallback` aborted our controller:
36086
- // the existing signal is dead, so listeners registered against it
36087
- // would never fire. Create a fresh controller and re-run the
36088
- // configure* wiring (each method is idempotent — it just re-caches
36089
- // child refs and re-registers listeners against the new signal).
36090
- // `hasUpdated` gates this so the *first* connect (which precedes
36091
- // firstUpdated) still falls through to firstUpdated's initial wiring.
36092
- if (this.hasUpdated && this._listenerAbortController.signal.aborted) {
36093
- this._listenerAbortController = new AbortController();
36094
- this.configureDropdown();
36095
- this.configureInput();
36096
- this.configureCalendar();
36097
- this.configureDatepicker();
36098
- this.configureClickHandler();
36099
- }
36100
-
36101
35745
  this.locale = this.domHandler.getLocale(this);
36102
35746
  }
36103
35747
 
36104
- disconnectedCallback() {
36105
- super.disconnectedCallback();
36106
- // Defer so that re-parenting (auro-drawer slotting it into a dialog,
36107
- // for example) does not abort listeners we still need after reconnect.
36108
- queueMicrotask(() => {
36109
- if (!this.isConnected) {
36110
- this._listenerAbortController.abort();
36111
- }
36112
- });
36113
- }
36114
-
36115
35748
  // layout render methods
36116
35749
  // ------------------------------------
36117
35750