@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
@@ -1373,7 +1373,7 @@ function normalizeDates$1(context, ...dates) {
1373
1373
  * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))
1374
1374
  * //=> Tue Sep 02 2014 00:00:00
1375
1375
  */
1376
- function startOfDay$1(date, options) {
1376
+ function startOfDay$2(date, options) {
1377
1377
  const _date = toDate$1(date, options?.in);
1378
1378
  _date.setHours(0, 0, 0, 0);
1379
1379
  return _date;
@@ -1421,8 +1421,8 @@ function differenceInCalendarDays$1(laterDate, earlierDate, options) {
1421
1421
  earlierDate,
1422
1422
  );
1423
1423
 
1424
- const laterStartOfDay = startOfDay$1(laterDate_);
1425
- const earlierStartOfDay = startOfDay$1(earlierDate_);
1424
+ const laterStartOfDay = startOfDay$2(laterDate_);
1425
+ const earlierStartOfDay = startOfDay$2(earlierDate_);
1426
1426
 
1427
1427
  const laterTimestamp =
1428
1428
  +laterStartOfDay - getTimezoneOffsetInMilliseconds$1(laterStartOfDay);
@@ -10524,6 +10524,13 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
10524
10524
  * @returns {string | undefined}
10525
10525
  */
10526
10526
  toFormattedValue(valueObject, format) {
10527
+ // Exposed publicly via `AuroInputUtil.toFormattedValue`, so a missing
10528
+ // `format` argument has to fail gracefully rather than throw on
10529
+ // `format.toLowerCase()`. Treat any falsy value (undefined, null, '')
10530
+ // as "no format → no display value".
10531
+ if (!format) {
10532
+ return undefined;
10533
+ }
10527
10534
  const normalizedFormat = format.toLowerCase();
10528
10535
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
10529
10536
 
@@ -10904,8 +10911,8 @@ class RangeDatepickerCell extends i$1 {
10904
10911
  const parsedDateFrom = parseInt(dateFrom, 10);
10905
10912
  const parsedDateTo = parseInt(dateTo, 10);
10906
10913
  if (day) {
10907
- if (getTime(startOfDay$1(parsedDateTo * 1000)) / 1000 === day.date ||
10908
- getTime(startOfDay$1(parsedDateFrom * 1000)) / 1000 === day.date) {
10914
+ if (getTime(startOfDay$2(parsedDateTo * 1000)) / 1000 === day.date ||
10915
+ getTime(startOfDay$2(parsedDateFrom * 1000)) / 1000 === day.date) {
10909
10916
  this.selected = true;
10910
10917
  }
10911
10918
  if (((hoveredDate === day.date || day.date < hoveredDate) &&
@@ -11093,7 +11100,7 @@ class RangeDatepickerCalendar extends i$1 {
11093
11100
  this.dayNamesOfTheWeek = [];
11094
11101
  this.daysOfMonth = [];
11095
11102
  this._locale = null;
11096
- this.currentDate = parseInt(format$1(startOfDay$1(Date.now()), 't'), 10);
11103
+ this.currentDate = parseInt(format$1(startOfDay$2(Date.now()), 't'), 10);
11097
11104
  this.localeChanged();
11098
11105
  this.yearAndMonthChanged(this.year, this.month);
11099
11106
  }
@@ -11567,7 +11574,7 @@ __decorate([n$4({ type: Array })], RangeDatepickerCalendar.prototype, "dayNamesO
11567
11574
  __decorate([n$4({ type: Array })], RangeDatepickerCalendar.prototype, "daysOfMonth", void 0);
11568
11575
  AuroLibraryRuntimeUtils$5.prototype.registerComponent('wc-range-datepicker-calendar', RangeDatepickerCalendar);
11569
11576
 
11570
- var styleCss$5 = i$3`.body-default{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-emphasized-font-size, 1rem);line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-font-size, 0.875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-font-size, 0.75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-font-size, 0.625rem);line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);line-height:var(--wcss-body-2xs-emphasized-line-height, 0.875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-2xl-weight, 300);line-height:var(--wcss-display-2xl-line-height, 1.3);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));letter-spacing:var(--wcss-display-2xl-letter-spacing, 0)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xl-weight, 300);line-height:var(--wcss-display-xl-line-height, 1.3);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));letter-spacing:var(--wcss-display-xl-letter-spacing, 0)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-lg-weight, 300);line-height:var(--wcss-display-lg-line-height, 1.3);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));letter-spacing:var(--wcss-display-lg-letter-spacing, 0)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-md-weight, 300);line-height:var(--wcss-display-md-line-height, 1.3);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));letter-spacing:var(--wcss-display-md-letter-spacing, 0)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-sm-weight, 300);line-height:var(--wcss-display-sm-line-height, 1.3);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));letter-spacing:var(--wcss-display-sm-letter-spacing, 0)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xs-weight, 300);line-height:var(--wcss-display-xs-line-height, 1.3);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));letter-spacing:var(--wcss-display-xs-letter-spacing, 0)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xl-weight, 300);line-height:var(--wcss-heading-xl-line-height, 1.3);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));letter-spacing:var(--wcss-heading-xl-letter-spacing, 0)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-lg-weight, 300);line-height:var(--wcss-heading-lg-line-height, 1.3);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));letter-spacing:var(--wcss-heading-lg-letter-spacing, 0)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-md-weight, 300);line-height:var(--wcss-heading-md-line-height, 1.3);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));letter-spacing:var(--wcss-heading-md-letter-spacing, 0)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-sm-weight, 300);line-height:var(--wcss-heading-sm-line-height, 1.3);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));letter-spacing:var(--wcss-heading-sm-letter-spacing, 0)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xs-weight, 300);line-height:var(--wcss-heading-xs-line-height, 1.3);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));letter-spacing:var(--wcss-heading-xs-letter-spacing, 0)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-2xs-weight, 300);line-height:var(--wcss-heading-2xs-line-height, 1.3);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xl-weight, 450);line-height:var(--wcss-accent-2xl-line-height, 1);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xl-weight, 450);line-height:var(--wcss-accent-xl-line-height, 1.3);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-lg-weight, 450);line-height:var(--wcss-accent-lg-line-height, 1.3);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-md-weight, 500);line-height:var(--wcss-accent-md-line-height, 1.3);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);text-transform:uppercase}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-sm-weight, 500);line-height:var(--wcss-accent-sm-line-height, 1.3);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xs-weight, 500);line-height:var(--wcss-accent-xs-line-height, 1.3);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);text-transform:uppercase}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xs-weight, 450);line-height:var(--wcss-accent-2xs-line-height, 1.3);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);text-transform:uppercase}@media screen and (max-width: 576px){:host{display:flex;justify-content:center}}.day{position:relative;width:48px;height:56px;padding:0;border-width:2px;border-style:solid;border-radius:10px;cursor:pointer;user-select:none}.day:focus-visible{outline:none;background-color:unset}.day.activeCell{outline-width:2px;outline-style:solid;outline-offset:-4px}.day.disabled{cursor:default !important;pointer-events:none}.day.blackout{cursor:pointer}.day.reference:after{position:absolute;top:-2px;left:-2px;display:block;width:calc(100% + 2px);height:calc(100% + 2px);box-sizing:content-box;border-radius:10px;border-style:solid;border-width:1px;content:""}.day.inRange::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:""}.day.rangeDepartDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:10px 0 0 10px;overflow:hidden}.day.rangeReturnDate::before,.day.lastHoveredDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:0 10px 10px 0;overflow:hidden}.day.rangeDepartDate.lastHoveredDate::before{border-radius:10px}.day.firstDayOfMonth::before{border-radius:10px 0 0 10px;overflow:hidden}.day.lastDayOfMonth::before{border-radius:0 10px 10px 0;overflow:hidden}.buttonWrapper{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}.dateSlot{display:block}::slotted([slot^=date_]){width:100%;white-space:nowrap}::slotted(auro-icon){max-height:24px;max-width:24px}:host([renderForDateSlot]) .buttonWrapper{position:relative;width:100%;height:100%}:host([renderForDateSlot]) .currentDayMarker{position:relative}`;
11577
+ var styleCss$5 = i$3`.body-default{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-emphasized-font-size, 1rem);line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-font-size, 0.875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-font-size, 0.75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-font-size, 0.625rem);line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);line-height:var(--wcss-body-2xs-emphasized-line-height, 0.875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-2xl-weight, 300);line-height:var(--wcss-display-2xl-line-height, 1.3);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));letter-spacing:var(--wcss-display-2xl-letter-spacing, 0)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xl-weight, 300);line-height:var(--wcss-display-xl-line-height, 1.3);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));letter-spacing:var(--wcss-display-xl-letter-spacing, 0)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-lg-weight, 300);line-height:var(--wcss-display-lg-line-height, 1.3);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));letter-spacing:var(--wcss-display-lg-letter-spacing, 0)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-md-weight, 300);line-height:var(--wcss-display-md-line-height, 1.3);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));letter-spacing:var(--wcss-display-md-letter-spacing, 0)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-sm-weight, 300);line-height:var(--wcss-display-sm-line-height, 1.3);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));letter-spacing:var(--wcss-display-sm-letter-spacing, 0)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xs-weight, 300);line-height:var(--wcss-display-xs-line-height, 1.3);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));letter-spacing:var(--wcss-display-xs-letter-spacing, 0)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xl-weight, 300);line-height:var(--wcss-heading-xl-line-height, 1.3);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));letter-spacing:var(--wcss-heading-xl-letter-spacing, 0)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-lg-weight, 300);line-height:var(--wcss-heading-lg-line-height, 1.3);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));letter-spacing:var(--wcss-heading-lg-letter-spacing, 0)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-md-weight, 300);line-height:var(--wcss-heading-md-line-height, 1.3);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));letter-spacing:var(--wcss-heading-md-letter-spacing, 0)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-sm-weight, 300);line-height:var(--wcss-heading-sm-line-height, 1.3);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));letter-spacing:var(--wcss-heading-sm-letter-spacing, 0)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xs-weight, 300);line-height:var(--wcss-heading-xs-line-height, 1.3);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));letter-spacing:var(--wcss-heading-xs-letter-spacing, 0)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-2xs-weight, 300);line-height:var(--wcss-heading-2xs-line-height, 1.3);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xl-weight, 450);line-height:var(--wcss-accent-2xl-line-height, 1);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xl-weight, 450);line-height:var(--wcss-accent-xl-line-height, 1.3);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-lg-weight, 450);line-height:var(--wcss-accent-lg-line-height, 1.3);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-md-weight, 500);line-height:var(--wcss-accent-md-line-height, 1.3);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);text-transform:uppercase}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-sm-weight, 500);line-height:var(--wcss-accent-sm-line-height, 1.3);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xs-weight, 500);line-height:var(--wcss-accent-xs-line-height, 1.3);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);text-transform:uppercase}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xs-weight, 450);line-height:var(--wcss-accent-2xs-line-height, 1.3);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);text-transform:uppercase}@media screen and (max-width: 576px){:host{display:flex;justify-content:center}}.day{position:relative;width:48px;height:56px;padding:0;border-width:2px;border-style:solid;border-radius:10px;cursor:pointer;user-select:none}.day:focus-visible{outline:none;background-color:unset}.day.activeCell{outline-width:2px;outline-style:solid;outline-offset:-4px}.day.disabled{cursor:default !important;pointer-events:none}.day.blackout{cursor:pointer}.day.reference:after{position:absolute;top:-2px;left:-2px;display:block;width:calc(100% + 2px);height:calc(100% + 2px);box-sizing:content-box;border-radius:10px;border-style:solid;border-width:1px;content:""}.day.inRange::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:""}.day.rangeDepartDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:10px 0 0 10px;overflow:hidden}.day.rangeReturnDate::before,.day.lastHoveredDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:0 10px 10px 0;overflow:hidden}.day.firstDayOfMonth::before{border-radius:10px 0 0 10px;overflow:hidden}.day.lastDayOfMonth::before{border-radius:0 10px 10px 0;overflow:hidden}.buttonWrapper{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}.dateSlot{display:block}::slotted([slot^=date_]){width:100%;white-space:nowrap}::slotted(auro-icon){max-height:24px;max-width:24px}:host([renderForDateSlot]) .buttonWrapper{position:relative;width:100%;height:100%}:host([renderForDateSlot]) .currentDayMarker{position:relative}`;
11571
11578
 
11572
11579
  var colorCss$5 = i$3`:host ::slotted([slot^=date_]){color:var(--ds-auro-calendar-cell-price-text-color)}:host ::slotted([slot^=date_][highlight]){--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-status-success, #447a1f)}:host .day{border-color:var(--ds-auro-calendar-cell-border-color);background-color:var(--ds-auro-calendar-cell-container-color);color:var(--ds-auro-calendar-cell-text-color)}:host .day.activeCell:not(.selected){--ds-auro-calendar-cell-container-color: var(--ds-auro-calendar-cell-in-range-color);border-color:var(--ds-advanced-color-state-selected);outline-color:var(--ds-auro-calendar-cell-container-color)}:host .day.selected{--ds-auro-calendar-cell-container-color: var(--ds-advanced-color-state-selected, #01426a);--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-inverse, #ffffff);--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host .day.selected ::slotted([slot^=date_][highlight]){--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-status-success-subtle, #d6eac7)}:host .day.selected:hover{--ds-auro-calendar-cell-container-color: var(--ds-advanced-color-state-selected-hover, #00274a);--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host .day.reference:after{border-color:var(--ds-basic-color-border-default, #959595);box-shadow:inset 0 0 0 2px var(--ds-basic-color-surface-default, #ffffff)}:host .day.reference:hover::after{box-shadow:inset 0 0 0 2px var(--ds-advanced-color-shared-background-muted, #f7f7f7)}:host .day:hover{--ds-auro-calendar-cell-container-color: var(--ds-advanced-color-state-background-hover, #f2f2f2);--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-default, #2a2a2a)}:host .day.disabled{--ds-auro-calendar-cell-container-color: transparent;--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0);--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0)}:host .day.blackout{--ds-auro-calendar-cell-container-color: transparent;--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0);--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0)}:host .day.inRange:before,:host .day.rangeDepartDate:before,:host .day.rangeReturnDate:before,:host .day.lastHoveredDate:before{background-color:var(--ds-auro-calendar-cell-in-range-color)}:host .day.sameDateTrip:before{--ds-auro-calendar-cell-in-range-color: transparent}`;
11573
11580
 
@@ -11592,104 +11599,14 @@ let s$2 = class s{registerComponent(e,t){customElements.get(e)||customElements.d
11592
11599
 
11593
11600
  var popoverVersion = '6.0.1';
11594
11601
 
11595
- /**
11596
- * Single source of truth for parsing and matching blackout dates across the
11597
- * datepicker. Both `auro-calendar` (memoized Set + `isDateBlackout`) and the
11598
- * pre-`firstUpdated` fallback inside `auro-calendar-cell` route through these
11599
- * helpers so the YYYY-MM-DD → seconds conversion and the merge-with-legacy
11600
- * `disabledDays` rules are defined exactly once.
11601
- */
11602
-
11603
- /**
11604
- * Converts a `YYYY-MM-DD` ISO date string to a Unix timestamp (seconds)
11605
- * representing local midnight on that calendar day. Returns `null` for
11606
- * inputs that don't parse to a finite timestamp.
11607
- *
11608
- * Uses the `new Date(year, monthIndex, day)` constructor (NOT
11609
- * `new Date(isoStr)`) so the result is local-midnight rather than UTC
11610
- * midnight — required to keep the calendar grid aligned with the user's
11611
- * local calendar day in negative-offset timezones.
11612
- *
11613
- * @param {string} isoStr - Date string in `YYYY-MM-DD` format.
11614
- * @returns {number|null} Local-midnight Unix timestamp (seconds), or null.
11615
- */
11616
- function parseIsoToTimestamp(isoStr) {
11617
- if (typeof isoStr !== 'string') {
11618
- return null;
11619
- }
11620
- const parts = isoStr.split('-');
11621
- if (parts.length !== 3) {
11622
- return null;
11623
- }
11624
- const year = parseInt(parts[0], 10);
11625
- const month = parseInt(parts[1], 10);
11626
- const day = parseInt(parts[2], 10);
11627
- if (!Number.isFinite(year) || !Number.isFinite(month) || !Number.isFinite(day)) {
11628
- return null;
11629
- }
11630
- // Reject overflow values like "2024-13-40" — JS `new Date(year, month, day)`
11631
- // silently normalizes those to a different calendar day, which would
11632
- // disable the wrong date if we let the result through.
11633
- if (month < 1 || month > 12 || day < 1 || day > 31) {
11634
- return null;
11635
- }
11636
- const date = new Date(year, month - 1, day);
11637
- // Guard the residual case where JS still rolls a value (e.g. Feb 30 → Mar 2).
11638
- // After construction, getFullYear/getMonth/getDate should match the inputs.
11639
- if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {
11640
- return null;
11641
- }
11642
- const ts = Math.floor(date.getTime() / 1000);
11643
- return Number.isFinite(ts) ? ts : null;
11644
- }
11645
-
11646
- /**
11647
- * Builds a `Set<number>` of seconds-since-epoch timestamps covering both the
11648
- * legacy `disabledDays` (already-numeric) array and the ISO `blackoutDates`
11649
- * array. Use this for O(1) membership checks in hot paths.
11650
- *
11651
- * @param {Array<string|number>|undefined} disabledDays - Legacy timestamp array.
11652
- * @param {Array<string>|undefined} blackoutDates - ISO `YYYY-MM-DD` array.
11653
- * @returns {Set<number>}
11654
- */
11655
- function buildBlackoutSet(disabledDays, blackoutDates) {
11656
- const set = new Set();
11657
- if (Array.isArray(disabledDays)) {
11658
- for (const day of disabledDays) {
11659
- const ts = parseInt(day, 10);
11660
- if (Number.isFinite(ts)) {
11661
- set.add(ts);
11662
- }
11663
- }
11664
- }
11665
- if (Array.isArray(blackoutDates)) {
11666
- for (const isoStr of blackoutDates) {
11667
- const ts = parseIsoToTimestamp(isoStr);
11668
- if (ts !== null) {
11669
- set.add(ts);
11670
- }
11671
- }
11672
- }
11673
- return set;
11674
- }
11675
-
11676
- /**
11677
- * One-shot membership test for a single timestamp against both blackout
11678
- * sources. Allocates a Set on each call; only use this in cold paths
11679
- * (e.g. the pre-`firstUpdated` cell fallback). Hot paths should hold the
11680
- * Set returned from `buildBlackoutSet` and `.has(ts)` directly.
11681
- *
11682
- * @param {number} dateTs - Unix timestamp (seconds) to test.
11683
- * @param {Array<string|number>|undefined} disabledDays - Legacy timestamp array.
11684
- * @param {Array<string>|undefined} blackoutDates - ISO `YYYY-MM-DD` array.
11685
- * @returns {boolean}
11686
- */
11687
- function isBlackoutTimestamp(dateTs, disabledDays, blackoutDates) {
11688
- return buildBlackoutSet(disabledDays, blackoutDates).has(dateTs);
11689
- }
11690
-
11691
11602
  /* 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 */
11692
11603
 
11604
+ const startOfDay$1 = (ms) => {
11605
+ const date = new Date(ms);
11606
+ date.setHours(0, 0, 0, 0);
11607
+ return date.getTime();
11608
+ };
11609
+
11693
11610
  class AuroCalendarCell extends i$1 {
11694
11611
  constructor() {
11695
11612
  super();
@@ -11736,14 +11653,6 @@ class AuroCalendarCell extends i$1 {
11736
11653
  type: Boolean,
11737
11654
  reflect: true
11738
11655
  },
11739
- /**
11740
- * @deprecated Propagated from the legacy `auro-calendar.disabledDays`
11741
- * Unix-timestamp array. The cell honors it for backward compatibility
11742
- * (see the divergence-check fallback inside `isBlackout`), but
11743
- * consumers should migrate to `auro-datepicker.blackoutDates`
11744
- * (YYYY-MM-DD ISO strings). The calendar emits a one-time
11745
- * deprecation warning the first time a non-empty value is observed.
11746
- */
11747
11656
  disabledDays: { type: Array },
11748
11657
  isCurrentDate: { type: Boolean },
11749
11658
  locale: { type: String },
@@ -11789,8 +11698,8 @@ class AuroCalendarCell extends i$1 {
11789
11698
  const parsedDateTo = parseInt(dateTo, 10);
11790
11699
 
11791
11700
  if (day) {
11792
- const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
11793
- const returnTimestamp = new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000;
11701
+ const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
11702
+ const returnTimestamp = startOfDay$1(parsedDateTo * 1000) / 1000;
11794
11703
 
11795
11704
  if (day.date === departTimestamp || day.date === returnTimestamp) {
11796
11705
  this.selected = true;
@@ -11874,33 +11783,27 @@ class AuroCalendarCell extends i$1 {
11874
11783
  return false;
11875
11784
  }
11876
11785
 
11877
- // Delegate to the calendar's memoized blackout Set for O(1) lookup
11878
- // (instead of rescanning disabledDays + blackoutDates per render). The
11879
- // Set is rebuilt only when either source array reference changes — see
11880
- // auro-calendar.js#_getBlackoutSet.
11881
- if (this.calendar && typeof this.calendar._getBlackoutSet === 'function') {
11882
- if (this.calendar._getBlackoutSet().has(this.day.date)) {
11786
+ // Check against disabledDays timestamps (legacy path)
11787
+ if (Array.isArray(this.disabledDays) && this.disabledDays.length > 0 &&
11788
+ (this.disabledDays.findIndex(dd => parseInt(dd, 10) === this.day.date) !== -1)) {
11789
+ return true;
11790
+ }
11791
+
11792
+ // Check against blackoutDates (ISO format YYYY-MM-DD) on the datepicker
11793
+ const blackoutDates = this.datepicker?.blackoutDates;
11794
+
11795
+ if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
11796
+ const date = new Date(this.day.date * 1000);
11797
+ const yyyy = date.getFullYear();
11798
+ const mm = String(date.getMonth() + 1).padStart(2, '0');
11799
+ const dd = String(date.getDate()).padStart(2, '0');
11800
+ const cellDate = `${yyyy}-${mm}-${dd}`;
11801
+ if (blackoutDates.includes(cellDate)) {
11883
11802
  return true;
11884
11803
  }
11885
- // If the cell's local disabledDays diverged from the calendar's (a
11886
- // consumer or test mutated cell.disabledDays directly), the Set does
11887
- // not reflect that addition — fall through to the per-cell scan only
11888
- // when the reference no longer matches. Production data flow keeps
11889
- // these identical, so this branch stays cold. Guarded with
11890
- // Array.isArray to match `_getBlackoutSet`'s contract: non-array
11891
- // values are treated as empty rather than crashing on `.findIndex`.
11892
- if (Array.isArray(this.disabledDays) && this.disabledDays !== this.calendar.disabledDays && this.disabledDays.length > 0) {
11893
- if (this.disabledDays.findIndex((dd) => parseInt(dd, 10) === this.day.date) !== -1) {
11894
- return true;
11895
- }
11896
- }
11897
- return false;
11898
11804
  }
11899
11805
 
11900
- // Pre-firstUpdated fallback — the cell may render once before the
11901
- // ancestor calendar is wired up. Routes through the shared
11902
- // blackoutUtils helper so the parsing rules stay in one place.
11903
- return isBlackoutTimestamp(this.day.date, this.disabledDays, this.datepicker?.blackoutDates);
11806
+ return false;
11904
11807
  }
11905
11808
 
11906
11809
  /**
@@ -12006,12 +11909,12 @@ class AuroCalendarCell extends i$1 {
12006
11909
  const parsedDateFrom = Number.parseInt(this.dateFrom, 10);
12007
11910
  if (!Number.isFinite(parsedDateFrom)) return null;
12008
11911
 
12009
- const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
11912
+ const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
12010
11913
  const dayDate = this.day.date;
12011
11914
 
12012
11915
  const parsedDateTo = Number.parseInt(this.dateTo, 10);
12013
11916
  const hasDateTo = Number.isFinite(parsedDateTo);
12014
- const returnTimestamp = hasDateTo ? new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000 : null;
11917
+ const returnTimestamp = hasDateTo ? startOfDay$1(parsedDateTo * 1000) / 1000 : null;
12015
11918
 
12016
11919
  if (dayDate === departTimestamp) return this.datepicker.rangeLabelStart || 'range start';
12017
11920
 
@@ -12021,9 +11924,7 @@ class AuroCalendarCell extends i$1 {
12021
11924
 
12022
11925
  if (hasDateTo && dayDate > departTimestamp && dayDate < returnTimestamp) return this.datepicker.rangeLabelInRange || 'in range';
12023
11926
 
12024
- if (!hasDateTo && dayDate > departTimestamp) return this.datepicker.rangeLabelEndPreview || 'previewing range end';
12025
-
12026
- // After end date when both dateFrom and dateTo are set.
11927
+ // After start date, no end date yet, or after end date
12027
11928
  return this.datepicker.rangeLabelAfterRange || 'after range';
12028
11929
  }
12029
11930
 
@@ -12036,7 +11937,7 @@ class AuroCalendarCell extends i$1 {
12036
11937
  */
12037
11938
  isDepartDate(day, dateFrom) {
12038
11939
  const parsedDateFrom = parseInt(dateFrom, 10);
12039
- const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
11940
+ const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
12040
11941
 
12041
11942
  return this.selected && day.date === departTimestamp;
12042
11943
  }
@@ -12051,7 +11952,7 @@ class AuroCalendarCell extends i$1 {
12051
11952
  */
12052
11953
  isReturnDate(day, dateFrom, dateTo) {
12053
11954
  const parsedDateTo = parseInt(dateTo, 10);
12054
- const returnTimestamp = new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000;
11955
+ const returnTimestamp = startOfDay$1(parsedDateTo * 1000) / 1000;
12055
11956
 
12056
11957
  return this.selected && day.date === returnTimestamp && dateFrom;
12057
11958
  }
@@ -12215,7 +12116,6 @@ class AuroCalendarCell extends i$1 {
12215
12116
  setTimeout(() => this.firstUpdated(), 0);
12216
12117
  return;
12217
12118
  }
12218
- this.calendar = calendar;
12219
12119
  this.datepicker = calendar.datepicker;
12220
12120
  this._slotContentHandler = () => {
12221
12121
  this.handleSlotContent();
@@ -12273,13 +12173,12 @@ class AuroCalendarCell extends i$1 {
12273
12173
  this._cachedButton = this.shadowRoot.querySelector('button.day');
12274
12174
  });
12275
12175
 
12276
- // Keep the host's gridcell aria attributes in sync with the day data.
12176
+ // Update host-level aria attributes for ariaActiveDescendantElement.
12277
12177
  this.updateHostAria();
12278
12178
  }
12279
12179
 
12280
12180
  // Update host aria when selection changes (aria-selected, range labels)
12281
- // or when isCurrentDate flips (aria-current).
12282
- if (properties.has('dateFrom') || properties.has('dateTo') || properties.has('selected') || properties.has('isCurrentDate')) {
12181
+ if (properties.has('dateFrom') || properties.has('dateTo') || properties.has('selected')) {
12283
12182
  this.updateHostAria();
12284
12183
  }
12285
12184
 
@@ -12290,8 +12189,8 @@ class AuroCalendarCell extends i$1 {
12290
12189
  }
12291
12190
 
12292
12191
  /**
12293
- * Sets host-level ARIA so each cell exposes its date, selection state,
12294
- * and blackout status to assistive tech browsing the month grid.
12192
+ * Updates ARIA attributes on the host element so that
12193
+ * ariaActiveDescendantElement can expose cell info to the SR.
12295
12194
  * @private
12296
12195
  * @returns {void}
12297
12196
  */
@@ -12300,27 +12199,16 @@ class AuroCalendarCell extends i$1 {
12300
12199
 
12301
12200
  const outOfRange = this.isOutOfRange(this.day, this.min, this.max);
12302
12201
  if (outOfRange) {
12303
- // Strip every aria attribute the in-range branch may have set on a
12304
- // previous render — if a cell flips from in-range to out-of-range
12305
- // (calendar shifts months, minDate/maxDate change, etc.).
12306
12202
  this.removeAttribute('role');
12307
12203
  this.removeAttribute('aria-label');
12308
- this.removeAttribute('aria-current');
12309
- this.removeAttribute('aria-selected');
12310
- this.removeAttribute('aria-disabled');
12311
12204
  return;
12312
12205
  }
12313
12206
 
12207
+ // The host acts as the gridcell for ariaActiveDescendantElement.
12314
12208
  this.setAttribute('role', 'gridcell');
12315
12209
  this.setAttribute('aria-label', this.getAriaLabel());
12316
12210
  this.setAttribute('aria-selected', this.selected ? 'true' : 'false');
12317
12211
 
12318
- if (this.isCurrentDate) {
12319
- this.setAttribute('aria-current', 'date');
12320
- } else {
12321
- this.removeAttribute('aria-current');
12322
- }
12323
-
12324
12212
  if (this.isBlackout()) {
12325
12213
  this.setAttribute('aria-disabled', 'true');
12326
12214
  } else {
@@ -12335,7 +12223,7 @@ class AuroCalendarCell extends i$1 {
12335
12223
  * @returns {void}
12336
12224
  */
12337
12225
  focusButton() {
12338
- const button = this._cachedButton || this.shadowRoot.querySelector('button:not([disabled])');
12226
+ const button = this._cachedButton || this.shadowRoot.querySelector('button:not([aria-hidden])');
12339
12227
  if (button) {
12340
12228
  button.focus({ focusVisible: true });
12341
12229
  }
@@ -12343,9 +12231,7 @@ class AuroCalendarCell extends i$1 {
12343
12231
 
12344
12232
  /**
12345
12233
  * Imperatively marks this cell as active without triggering a Lit re-render.
12346
- * Buttons stay tabindex="-1" because DOM focus stays on the grid wrapper
12347
- * arrow keys move the active cell imperatively and the live region carries
12348
- * the SR announcement.
12234
+ * Note: buttons stay tabindex="-1" because the grid uses aria-activedescendant.
12349
12235
  * @returns {void}
12350
12236
  */
12351
12237
  setActive() {
@@ -12387,13 +12273,10 @@ class AuroCalendarCell extends i$1 {
12387
12273
  if (!btn || !this.day) return;
12388
12274
 
12389
12275
  const dayDate = this.day.date;
12390
- const departTimestamp = new Date(dateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
12276
+ const departTimestamp = startOfDay$1(dateFrom * 1000) / 1000;
12391
12277
  const isInRange = dayDate > departTimestamp && dayDate < hoveredDate;
12392
- // `>=` so hovering the depart cell itself (a same-day round-trip
12393
- // preview) still surfaces a visual cue: the depart cell receives both
12394
- // rangeDepartDate and lastHoveredDate.
12395
- const isLastHovered = dayDate === hoveredDate && hoveredDate >= departTimestamp;
12396
- const isDepartWithPreview = dayDate === departTimestamp && hoveredDate >= departTimestamp;
12278
+ const isLastHovered = dayDate === hoveredDate && hoveredDate > departTimestamp;
12279
+ const isDepartWithPreview = dayDate === departTimestamp && hoveredDate > departTimestamp;
12397
12280
 
12398
12281
  btn.classList.toggle('inRange', isInRange);
12399
12282
  btn.classList.toggle('lastHoveredDate', isLastHovered);
@@ -12451,6 +12334,7 @@ class AuroCalendarCell extends i$1 {
12451
12334
  @focus="${outOfRange ? undefined : this.handleFocus}"
12452
12335
  class="${e$4(buttonClasses)}"
12453
12336
  ?disabled="${outOfRange}"
12337
+ aria-hidden="${outOfRange ? 'true' : A$4}"
12454
12338
  tabindex="-1">
12455
12339
  <div class="buttonWrapper" aria-hidden="true">
12456
12340
  <div class="currentDayMarker">${this.day?.title || A$4}</div>
@@ -13562,7 +13446,7 @@ class AuroBibtemplate extends i$1 {
13562
13446
  }
13563
13447
  }
13564
13448
 
13565
- var formkitVersion$2 = '202606252324';
13449
+ var formkitVersion$2 = '202606252337';
13566
13450
 
13567
13451
  let l$1 = class l{generateElementName(t,e){let o=t;return o+="-",o+=e.replace(/[.]/g,"_"),o}generateTag(o,s,a){const r=this.generateElementName(o,s),i=i$5`${s$5(r)}`;return customElements.get(r)||customElements.define(r,class extends a{}),i}};let d$1 = class d{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}getSlotText(t,e){const o=t.shadowRoot?.querySelector(`slot[name="${e}"]`),s=(o?.assignedNodes({flatten:true})||[]).map(t=>t.textContent?.trim()).join(" ").trim();return s||null}};let h$4 = class h{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}};var c$3=i$3`:host{color:var(--ds-auro-loader-color)}:host>span{background-color:var(--ds-auro-loader-background-color);border-color:var(--ds-auro-loader-border-color)}:host([onlight]),:host([appearance=brand]){--ds-auro-loader-color: var(--ds-basic-color-brand-primary, #01426a)}:host([ondark]),:host([appearance=inverse]){--ds-auro-loader-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host([orbit])>span{--ds-auro-loader-background-color: transparent}:host([orbit])>span:nth-child(1){--ds-auro-loader-border-color: currentcolor;opacity:.25}:host([orbit])>span:nth-child(2){--ds-auro-loader-border-color: currentcolor;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent}
13568
13452
  `,u$6=i$3`.body-default{font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, .875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs{font-size:var(--wcss-body-xs-font-size, .75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:var(--wcss-body-2xs-font-size, .625rem);font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0);line-height:var(--wcss-body-2xs-line-height, .875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));font-weight:var(--wcss-display-2xl-weight, 300);letter-spacing:var(--wcss-display-2xl-letter-spacing, 0);line-height:var(--wcss-display-2xl-line-height, 1.3)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));font-weight:var(--wcss-display-xl-weight, 300);letter-spacing:var(--wcss-display-xl-letter-spacing, 0);line-height:var(--wcss-display-xl-line-height, 1.3)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));font-weight:var(--wcss-display-lg-weight, 300);letter-spacing:var(--wcss-display-lg-letter-spacing, 0);line-height:var(--wcss-display-lg-line-height, 1.3)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));font-weight:var(--wcss-display-md-weight, 300);letter-spacing:var(--wcss-display-md-letter-spacing, 0);line-height:var(--wcss-display-md-line-height, 1.3)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));font-weight:var(--wcss-display-sm-weight, 300);letter-spacing:var(--wcss-display-sm-letter-spacing, 0);line-height:var(--wcss-display-sm-line-height, 1.3)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));font-weight:var(--wcss-display-xs-weight, 300);letter-spacing:var(--wcss-display-xs-letter-spacing, 0);line-height:var(--wcss-display-xs-line-height, 1.3)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));font-weight:var(--wcss-heading-xl-weight, 300);letter-spacing:var(--wcss-heading-xl-letter-spacing, 0);line-height:var(--wcss-heading-xl-line-height, 1.3)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));font-weight:var(--wcss-heading-lg-weight, 300);letter-spacing:var(--wcss-heading-lg-letter-spacing, 0);line-height:var(--wcss-heading-lg-line-height, 1.3)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));font-weight:var(--wcss-heading-md-weight, 300);letter-spacing:var(--wcss-heading-md-letter-spacing, 0);line-height:var(--wcss-heading-md-line-height, 1.3)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));font-weight:var(--wcss-heading-sm-weight, 300);letter-spacing:var(--wcss-heading-sm-letter-spacing, 0);line-height:var(--wcss-heading-sm-line-height, 1.3)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));font-weight:var(--wcss-heading-xs-weight, 450);letter-spacing:var(--wcss-heading-xs-letter-spacing, 0);line-height:var(--wcss-heading-xs-line-height, 1.3)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));font-weight:var(--wcss-heading-2xs-weight, 450);letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0);line-height:var(--wcss-heading-2xs-line-height, 1.3)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));font-weight:var(--wcss-accent-2xl-weight, 450);letter-spacing:var(--wcss-accent-2xl-letter-spacing, .05em);line-height:var(--wcss-accent-2xl-line-height, 1)}.accent-2xl,.accent-xl{text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));font-weight:var(--wcss-accent-xl-weight, 450);letter-spacing:var(--wcss-accent-xl-letter-spacing, .05em);line-height:var(--wcss-accent-xl-line-height, 1.3)}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));font-weight:var(--wcss-accent-lg-weight, 450);letter-spacing:var(--wcss-accent-lg-letter-spacing, .05em);line-height:var(--wcss-accent-lg-line-height, 1.3)}.accent-lg,.accent-md{text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));font-weight:var(--wcss-accent-md-weight, 500);letter-spacing:var(--wcss-accent-md-letter-spacing, .05em);line-height:var(--wcss-accent-md-line-height, 1.3)}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));font-weight:var(--wcss-accent-sm-weight, 500);letter-spacing:var(--wcss-accent-sm-letter-spacing, .05em);line-height:var(--wcss-accent-sm-line-height, 1.3)}.accent-sm,.accent-xs{text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));font-weight:var(--wcss-accent-xs-weight, 500);letter-spacing:var(--wcss-accent-xs-letter-spacing, .1em);line-height:var(--wcss-accent-xs-line-height, 1.3)}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xs-font-size, clamp(.875rem, 1.1666666667vw, .875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, .1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}:focus:not(:focus-visible){outline:3px solid transparent}:host,:host>span{position:relative}:host{width:2rem;height:2rem;display:inline-block;font-size:0}:host>span{position:absolute;display:inline-block;float:none;top:0;left:0;width:2rem;height:2rem;border-radius:100%;border-style:solid;border-width:0;box-sizing:border-box}:host([xs]),:host([xs])>span{width:1.2rem;height:1.2rem}:host([sm]),:host([sm])>span{width:3rem;height:3rem}:host([md]),:host([md])>span{width:5rem;height:5rem}:host([lg]),:host([lg])>span{width:8rem;height:8rem}:host{--margin: .375rem;--margin-xs: .2rem;--margin-sm: .5rem;--margin-md: .75rem;--margin-lg: 1rem}:host([pulse]),:host([pulse])>span{position:relative}:host([pulse]){width:calc(3rem + var(--margin) * 6);height:calc(1rem + var(--margin) * 2)}:host([pulse])>span{width:1rem;height:1rem;margin:var(--margin);animation:pulse 1.5s ease infinite}:host([pulse][xs]){width:calc(1.95rem + var(--margin-xs) * 6);height:calc(.65rem + var(--margin-xs) * 2)}:host([pulse][xs])>span{margin:var(--margin-xs);width:.65rem;height:.65rem}:host([pulse][sm]){width:calc(6rem + var(--margin-sm) * 6);height:calc(2rem + var(--margin-sm) * 2)}:host([pulse][sm])>span{margin:var(--margin-sm);width:2rem;height:2rem}:host([pulse][md]){width:calc(9rem + var(--margin-md) * 6);height:calc(3rem + var(--margin-md) * 2)}:host([pulse][md])>span{margin:var(--margin-md);width:3rem;height:3rem}:host([pulse][lg]){width:calc(15rem + var(--margin-lg) * 6);height:calc(5rem + var(--margin-lg) * 2)}:host([pulse][lg])>span{margin:var(--margin-lg);width:5rem;height:5rem}:host([pulse])>span:nth-child(1){animation-delay:-.4s}:host([pulse])>span:nth-child(2){animation-delay:-.2s}:host([pulse])>span:nth-child(3){animation-delay:0ms}@keyframes pulse{0%,to{opacity:.1;transform:scale(.9)}50%{opacity:1;transform:scale(1.1)}}:host([orbit]),:host([orbit])>span{opacity:1}:host([orbit])>span{border-width:5px}:host([orbit])>span:nth-child(2){animation:orbit 2s linear infinite}:host([orbit][sm])>span{border-width:8px}:host([orbit][md])>span{border-width:13px}:host([orbit][lg])>span{border-width:21px}@keyframes orbit{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:host([ringworm])>svg{animation:rotate 2s linear infinite;height:100%;width:100%;stroke:currentcolor;stroke-width:8}:host([ringworm]) .path{stroke-dashoffset:0;animation:ringworm 1.5s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes ringworm{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}:host([laser]){position:static;width:100%;display:block;height:0;overflow:hidden;font-size:unset}:host([laser])>span{position:fixed;width:100%;height:.25rem;border-radius:0;z-index:100}:host([laser])>span:nth-child(1){border-color:currentcolor;opacity:.25}:host([laser])>span:nth-child(2){border-color:currentcolor;animation:laser 2s linear infinite;opacity:1;width:50%}:host([laser][sm])>span:nth-child(2){width:20%}:host([laser][md])>span:nth-child(2){width:30%}:host([laser][lg])>span:nth-child(2){width:50%;animation-duration:1.5s}:host([laser][xl])>span:nth-child(2){width:80%;animation-duration:1.5s}@keyframes laser{0%{left:-100%}to{left:110%}}:host>.no-animation{display:none}@media (prefers-reduced-motion: reduce){:host{display:flex;align-items:center;justify-content:center}:host>span{opacity:1}:host>.loader{display:none}:host>svg{display:none}:host>.no-animation{display:block}}
@@ -13685,11 +13569,7 @@ class AuroCalendar extends RangeDatepicker {
13685
13569
  this.calendarRangeMonths = null;
13686
13570
 
13687
13571
  /**
13688
- * @deprecated Use `auro-datepicker.blackoutDates` (an array of
13689
- * `YYYY-MM-DD` ISO strings) instead. This legacy array of Unix
13690
- * timestamps is still honored for backward compatibility but emits a
13691
- * one-time `console.debug` the first time a non-empty value is observed.
13692
- * Support will be removed in a future major release.
13572
+ * Legacy array of disabled-date timestamps.
13693
13573
  * @private
13694
13574
  */
13695
13575
  this.disabledDays = [];
@@ -13946,44 +13826,17 @@ class AuroCalendar extends RangeDatepicker {
13946
13826
  * @returns {void}
13947
13827
  */
13948
13828
  updateActiveCellForVisibleMonth() {
13949
- this._afterMonthRender(() => {
13950
- const newDate = this.computeActiveDate({ skipDateFrom: true });
13951
-
13952
- if (newDate !== null && newDate !== undefined) {
13953
- this.activeCellDate = newDate;
13954
- this.setActiveCell(this.activeCellDate);
13955
- }
13956
- });
13957
- }
13958
-
13959
- /**
13960
- * Schedules `callback` two animation frames out, giving the child
13961
- * `auro-formkit-calendar-month` and `auro-formkit-calendar-cell` elements
13962
- * a full render-and-paint cycle to settle before the callback reads or
13963
- * mutates DOM.
13964
- *
13965
- * Why two frames, not one:
13966
- * 1. Lit batches property updates and renders in a microtask, so frame N
13967
- * schedules the render but the new DOM may not be painted yet.
13968
- * 2. Cells re-cache `_cachedButton` inside their own `updateComplete.then`,
13969
- * which also lands a tick later. Reading buttons from frame N+1
13970
- * (after both renders + cache refresh have flushed) reliably hits the
13971
- * new month's cells.
13972
- *
13973
- * Used by every code path that calls `handleNextMonth`/`handlePrevMonth`
13974
- * and then needs to inspect the freshly-rendered cells (cross-month
13975
- * keyboard nav, boundary events, `updateActiveCellForVisibleMonth`).
13976
- * Do NOT collapse to a single rAF — it intermittently lands before
13977
- * `_cachedButton` is refreshed, which silently breaks focus restoration
13978
- * and `setActiveCell` lookups.
13979
- * @private
13980
- * @param {() => void} callback - Runs once after the month re-render and
13981
- * the cells' button caches have refreshed.
13982
- * @returns {void}
13983
- */
13984
- _afterMonthRender(callback) {
13829
+ // Use double-rAF to ensure child month/cell components have fully
13830
+ // rendered and cached their button references before we set tabindex.
13985
13831
  requestAnimationFrame(() => {
13986
- requestAnimationFrame(callback);
13832
+ requestAnimationFrame(() => {
13833
+ const newDate = this.computeActiveDate({ skipDateFrom: true });
13834
+
13835
+ if (newDate !== null && newDate !== undefined) {
13836
+ this.activeCellDate = newDate;
13837
+ this.setActiveCell(this.activeCellDate);
13838
+ }
13839
+ });
13987
13840
  });
13988
13841
  }
13989
13842
 
@@ -14101,47 +13954,6 @@ class AuroCalendar extends RangeDatepicker {
14101
13954
  return Array.from(this.shadowRoot.querySelectorAll('auro-formkit-calendar-month'));
14102
13955
  }
14103
13956
 
14104
- /**
14105
- * Picks the focusable cell whose date is closest to targetTs. Used as a
14106
- * fallback after a month-boundary nav when the exact target date isn't
14107
- * focusable — typically because the month re-render lagged or the date
14108
- * was filtered out by isOutOfRange. When two cells are equidistant, the
14109
- * navigation direction breaks the tie so the user moves the way they
14110
- * pressed (forward → later cell, backward → earlier cell).
14111
- * @private
14112
- * @param {Array} cells - Focusable cells from getAllFocusableCells.
14113
- * @param {Number} targetTs - Desired Unix timestamp (seconds).
14114
- * @param {'next'|'prev'} direction - Navigation direction.
14115
- * @returns {Object|null} The nearest cell, or null when cells is empty.
14116
- */
14117
- pickNearestCell(cells, targetTs, direction) {
14118
- if (!cells.length) {
14119
- return null;
14120
- }
14121
- const forward = direction === 'next';
14122
- let best = null;
14123
- let bestDelta = Infinity;
14124
- cells.forEach((cell) => {
14125
- if (!cell.day) {
14126
- return;
14127
- }
14128
- const distance = Math.abs(cell.day.date - targetTs);
14129
- if (distance < bestDelta) {
14130
- best = cell;
14131
- bestDelta = distance;
14132
- return;
14133
- }
14134
- if (distance === bestDelta && best) {
14135
- if (forward && cell.day.date > best.day.date) {
14136
- best = cell;
14137
- } else if (!forward && cell.day.date < best.day.date) {
14138
- best = cell;
14139
- }
14140
- }
14141
- });
14142
- return best;
14143
- }
14144
-
14145
13957
  /**
14146
13958
  * Gets all focusable cells across all rendered months.
14147
13959
  * @private
@@ -14158,9 +13970,9 @@ class AuroCalendar extends RangeDatepicker {
14158
13970
 
14159
13971
  /**
14160
13972
  * Sets the active cell across all months. Only one cell has tabindex="0" at a time.
14161
- * Uses imperative DOM manipulation — no Lit re-render triggered. DOM focus
14162
- * stays on the grid wrapper; the live region (see getOrCreateLiveRegion)
14163
- * is what announces the active cell to assistive tech.
13973
+ * Uses imperative DOM manipulation — no Lit re-render triggered.
13974
+ * Also updates ariaActiveDescendantElement on the grid wrapper so
13975
+ * screen readers announce the active cell without moving DOM focus.
14164
13976
  * @param {Number} date - Unix timestamp of the cell to activate.
14165
13977
  * @returns {void}
14166
13978
  */
@@ -14241,65 +14053,6 @@ class AuroCalendar extends RangeDatepicker {
14241
14053
  this.clearRangePreview();
14242
14054
  }
14243
14055
 
14244
- /**
14245
- * Returns a memoized Set of blackout timestamps (seconds) drawn from both
14246
- * the legacy `disabledDays` array and the datepicker's ISO `blackoutDates`.
14247
- * The cache invalidates when either source array's reference changes, which
14248
- * matches Lit's own reactive identity semantics for array properties.
14249
- * @private
14250
- * @returns {Set<Number>}
14251
- */
14252
- _getBlackoutSet() {
14253
- // Normalize non-array values to a stable `null` sentinel rather than a
14254
- // fresh `[]` per call — otherwise the reference-identity cache key
14255
- // (`_cachedBlackoutDisabledDays === disabledDays`) never matches on
14256
- // subsequent calls and the Set rebuilds every time. `buildBlackoutSet`
14257
- // already treats null/non-array as "no legacy disabledDays" via its
14258
- // own Array.isArray gate.
14259
- const disabledDays = Array.isArray(this.disabledDays) ? this.disabledDays : null;
14260
- const blackoutDates = this.datepicker?.blackoutDates;
14261
- if (this._blackoutSet &&
14262
- this._cachedBlackoutDisabledDays === disabledDays &&
14263
- this._cachedBlackoutDates === blackoutDates) {
14264
- return this._blackoutSet;
14265
- }
14266
-
14267
- if (disabledDays && disabledDays.length > 0) {
14268
- this._warnDisabledDaysDeprecated();
14269
- }
14270
-
14271
- this._blackoutSet = buildBlackoutSet(disabledDays, blackoutDates);
14272
- this._cachedBlackoutDisabledDays = disabledDays;
14273
- this._cachedBlackoutDates = blackoutDates;
14274
- return this._blackoutSet;
14275
- }
14276
-
14277
- /**
14278
- * Per-class flag that gates the `disabledDays` deprecation warning so it
14279
- * fires exactly once per page no matter how many calendars or rebuild
14280
- * cycles encounter the legacy array.
14281
- * @private
14282
- */
14283
- static _warnedDisabledDaysDeprecation = false;
14284
-
14285
- /**
14286
- * One-time `console.debug` directing consumers from the legacy
14287
- * `disabledDays` Unix-timestamp API to the ISO `blackoutDates` API. Fires
14288
- * the first time `_getBlackoutSet` rebuilds from a non-empty
14289
- * `disabledDays`; subsequent calls (on this or any other AuroCalendar
14290
- * instance on the page) are silent.
14291
- * @private
14292
- * @returns {void}
14293
- */
14294
- _warnDisabledDaysDeprecated() {
14295
- if (AuroCalendar._warnedDisabledDaysDeprecation) {
14296
- return;
14297
- }
14298
- AuroCalendar._warnedDisabledDaysDeprecation = true;
14299
- // eslint-disable-next-line no-console
14300
- 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.');
14301
- }
14302
-
14303
14056
  /**
14304
14057
  * Computes the initial active date from data properties alone — no DOM required.
14305
14058
  * Priority:
@@ -14344,10 +14097,21 @@ class AuroCalendar extends RangeDatepicker {
14344
14097
  const minTs = Number.isFinite(rawMin) ? rawMin : -Infinity;
14345
14098
  const maxTs = Number.isFinite(rawMax) ? rawMax : Infinity;
14346
14099
 
14347
- // Build a Set of blackout timestamps for O(1) lookup. Memoized by the
14348
- // identity of the source arrays so rapid month nav doesn't rebuild the
14349
- // Set (and re-parse every ISO string) on every keypress.
14350
- const blackoutSet = this._getBlackoutSet();
14100
+ // Build a Set of blackout timestamps for O(1) lookup.
14101
+ const blackoutSet = new Set(this.disabledDays.map((day) => parseInt(day, 10)));
14102
+
14103
+ // Also include ISO-format blackoutDates from the datepicker if available.
14104
+ // Parse YYYY-MM-DD as local date to avoid UTC shift issues.
14105
+ const isoBlackouts = this.datepicker?.blackoutDates;
14106
+ if (Array.isArray(isoBlackouts)) {
14107
+ for (const isoStr of isoBlackouts) {
14108
+ const parts = isoStr.split('-');
14109
+ const ts = Math.floor(new Date(parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10)).getTime() / 1000);
14110
+ if (Number.isFinite(ts)) {
14111
+ blackoutSet.add(ts);
14112
+ }
14113
+ }
14114
+ }
14351
14115
 
14352
14116
  /**
14353
14117
  * A date (unix timestamp in seconds, midnight-aligned) is "enabled" when
@@ -14543,8 +14307,8 @@ class AuroCalendar extends RangeDatepicker {
14543
14307
 
14544
14308
  /**
14545
14309
  * Handles arrow key navigation on the calendar grid wrapper.
14546
- * Focus stays on the grid wrapper; only the visual active-cell indicator
14547
- * changes. The live region announces the new active cell.
14310
+ * Focus stays on the grid wrapper; only ariaActiveDescendantElement
14311
+ * and the visual active-cell indicator change.
14548
14312
  * @private
14549
14313
  * @param {KeyboardEvent} event - The keyboard event.
14550
14314
  * @returns {void}
@@ -14609,21 +14373,21 @@ class AuroCalendar extends RangeDatepicker {
14609
14373
  } else {
14610
14374
  this.handlePrevMonth({ skipActiveUpdate: true });
14611
14375
  }
14612
- this._afterMonthRender(() => {
14613
- const cells = this.getAllFocusableCells();
14614
- const target = cells.find((cell) => cell.day && cell.day.date === targetTs);
14615
- if (target) {
14616
- this.setActiveCell(target.day.date);
14617
- this.handleCellFocused({ detail: { date: target.day.date } });
14618
- } else {
14619
- const fallback = this.pickNearestCell(cells, targetTs, navDir);
14620
- if (fallback) {
14376
+ requestAnimationFrame(() => {
14377
+ requestAnimationFrame(() => {
14378
+ const cells = this.getAllFocusableCells();
14379
+ const target = cells.find((cell) => cell.day && cell.day.date === targetTs);
14380
+ if (target) {
14381
+ this.setActiveCell(target.day.date);
14382
+ this.handleCellFocused({ detail: { date: target.day.date } });
14383
+ } else if (cells.length > 0) {
14384
+ const fallback = navDir === 'next' ? cells[cells.length - 1] : cells[0];
14621
14385
  this.setActiveCell(fallback.day.date);
14622
14386
  this.handleCellFocused({ detail: { date: fallback.day.date } });
14623
14387
  }
14624
- }
14625
- // Re-focus grid wrapper after month change re-render
14626
- this.focusActiveCell();
14388
+ // Re-focus grid wrapper after month change re-render
14389
+ this.focusActiveCell();
14390
+ });
14627
14391
  });
14628
14392
  }
14629
14393
  }
@@ -14649,20 +14413,26 @@ class AuroCalendar extends RangeDatepicker {
14649
14413
  } else {
14650
14414
  this.handlePrevMonth({ skipActiveUpdate: true });
14651
14415
  }
14652
- this._afterMonthRender(() => {
14653
- const cells = this.getAllFocusableCells();
14654
- const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
14655
- if (target) {
14656
- this.setActiveCell(target.day.date);
14657
- this.handleCellFocused({ detail: { date: target.day.date } });
14658
- } else {
14659
- const nearest = this.pickNearestCell(cells, targetDate, navDirection);
14660
- if (nearest) {
14416
+ requestAnimationFrame(() => {
14417
+ requestAnimationFrame(() => {
14418
+ const cells = this.getAllFocusableCells();
14419
+ const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
14420
+ if (target) {
14421
+ this.setActiveCell(target.day.date);
14422
+ this.handleCellFocused({ detail: { date: target.day.date } });
14423
+ } else if (cells.length > 0) {
14424
+ let nearest = null;
14425
+
14426
+ if (navDirection === 'next') {
14427
+ [nearest] = cells;
14428
+ } else {
14429
+ nearest = cells[cells.length - 1];
14430
+ }
14661
14431
  this.setActiveCell(nearest.day.date);
14662
14432
  this.handleCellFocused({ detail: { date: nearest.day.date } });
14663
14433
  }
14664
- }
14665
- this.focusActiveCell();
14434
+ this.focusActiveCell();
14435
+ });
14666
14436
  });
14667
14437
  }
14668
14438
  }
@@ -14712,22 +14482,19 @@ class AuroCalendar extends RangeDatepicker {
14712
14482
  }
14713
14483
 
14714
14484
  this.handleNextMonth({ skipActiveUpdate: true });
14715
- this._afterMonthRender(() => {
14716
- const cells = this.getAllFocusableCells();
14717
- const target = cells.find((cell) => cell.day && cell.day.date === nextTs);
14718
- if (target) {
14719
- this.setActiveCell(target.day.date);
14720
- this.focusActiveCell();
14721
- } else {
14722
- // Same nearest-by-date fallback handleGridKeyDown uses — direct
14723
- // `cells[length - 1]` would land on the end of the new month,
14724
- // far from the user's intended `nextTs`.
14725
- const fallback = this.pickNearestCell(cells, nextTs, 'next');
14726
- if (fallback) {
14727
- this.setActiveCell(fallback.day.date);
14485
+ requestAnimationFrame(() => {
14486
+ requestAnimationFrame(() => {
14487
+ const cells = this.getAllFocusableCells();
14488
+ const target = cells.find((cell) => cell.day && cell.day.date === nextTs);
14489
+ if (target) {
14490
+ this.setActiveCell(target.day.date);
14491
+ this.focusActiveCell();
14492
+ } else if (cells.length > 0) {
14493
+ // Fallback: first cell of the last rendered month
14494
+ this.setActiveCell(cells[cells.length - 1].day.date);
14728
14495
  this.focusActiveCell();
14729
14496
  }
14730
- }
14497
+ });
14731
14498
  });
14732
14499
  } else if (direction === 'prev' && this.showPrevMonthBtn) {
14733
14500
  // Navigate to previous month and focus the computed previous date.
@@ -14741,22 +14508,19 @@ class AuroCalendar extends RangeDatepicker {
14741
14508
  }
14742
14509
 
14743
14510
  this.handlePrevMonth({ skipActiveUpdate: true });
14744
- this._afterMonthRender(() => {
14745
- const cells = this.getAllFocusableCells();
14746
- const target = cells.find((cell) => cell.day && cell.day.date === prevTs);
14747
- if (target) {
14748
- this.setActiveCell(target.day.date);
14749
- this.focusActiveCell();
14750
- } else {
14751
- // Same nearest-by-date fallback handleGridKeyDown uses — direct
14752
- // `cells[0]` would land on the start of the previous month, far
14753
- // from the user's intended `prevTs`.
14754
- const fallback = this.pickNearestCell(cells, prevTs, 'prev');
14755
- if (fallback) {
14756
- this.setActiveCell(fallback.day.date);
14511
+ requestAnimationFrame(() => {
14512
+ requestAnimationFrame(() => {
14513
+ const cells = this.getAllFocusableCells();
14514
+ const target = cells.find((cell) => cell.day && cell.day.date === prevTs);
14515
+ if (target) {
14516
+ this.setActiveCell(target.day.date);
14517
+ this.focusActiveCell();
14518
+ } else if (cells.length > 0) {
14519
+ // Fallback: last cell of the first rendered month
14520
+ this.setActiveCell(cells[0].day.date);
14757
14521
  this.focusActiveCell();
14758
14522
  }
14759
- }
14523
+ });
14760
14524
  });
14761
14525
  }
14762
14526
  } else if (key === 'ArrowDown' || key === 'ArrowUp') {
@@ -14784,22 +14548,20 @@ class AuroCalendar extends RangeDatepicker {
14784
14548
  } else {
14785
14549
  this.handlePrevMonth({ skipActiveUpdate: true });
14786
14550
  }
14787
- this._afterMonthRender(() => {
14788
- const cells = this.getAllFocusableCells();
14789
- const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
14790
- if (target) {
14791
- this.setActiveCell(target.day.date);
14792
- this.focusActiveCell();
14793
- } else {
14794
- // Same nearest-by-date fallback handleGridKeyDown uses — the
14795
- // old direction-based `cells[0]`/`cells[length-1]` clamp
14796
- // could land 25+ days from the intended target.
14797
- const nearest = this.pickNearestCell(cells, targetDate, navDirection);
14798
- if (nearest) {
14551
+ requestAnimationFrame(() => {
14552
+ requestAnimationFrame(() => {
14553
+ const cells = this.getAllFocusableCells();
14554
+ const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
14555
+ if (target) {
14556
+ this.setActiveCell(target.day.date);
14557
+ this.focusActiveCell();
14558
+ } else if (cells.length > 0) {
14559
+ // Clamp to nearest focusable cell
14560
+ const nearest = navDirection === 'next' ? cells[0] : cells[cells.length - 1];
14799
14561
  this.setActiveCell(nearest.day.date);
14800
14562
  this.focusActiveCell();
14801
14563
  }
14802
- }
14564
+ });
14803
14565
  });
14804
14566
  }
14805
14567
  }
@@ -14838,9 +14600,8 @@ class AuroCalendar extends RangeDatepicker {
14838
14600
  return;
14839
14601
  }
14840
14602
 
14841
- // DOM focus stays on the grid wrapper while arrow keys move the active
14842
- // cell, so cell buttons never receive native focus. The debounced live
14843
- // region carries the full-context announcement instead.
14603
+ // With aria-activedescendant, the button no longer receives native focus,
14604
+ // so we use the debounced live region for the full context announcement.
14844
14605
  const announcement = this.buildFocusAnnouncement(date);
14845
14606
  this.announceFocusDebounced(announcement);
14846
14607
 
@@ -14910,10 +14671,10 @@ class AuroCalendar extends RangeDatepicker {
14910
14671
  return null;
14911
14672
  }
14912
14673
 
14913
- const departTs = new Date(parsedFrom * 1000).setHours(0, 0, 0, 0) / 1000;
14674
+ const departTs = startOfDay$2(parsedFrom * 1000) / 1000;
14914
14675
  const parsedTo = Number.parseInt(this.dateTo, 10);
14915
14676
  const hasTo = Number.isFinite(parsedTo);
14916
- const returnTs = hasTo ? new Date(parsedTo * 1000).setHours(0, 0, 0, 0) / 1000 : null;
14677
+ const returnTs = hasTo ? startOfDay$2(parsedTo * 1000) / 1000 : null;
14917
14678
 
14918
14679
  if (date === departTs) {
14919
14680
  return this.datepicker.rangeLabelStart || 'range start';
@@ -14927,22 +14688,36 @@ class AuroCalendar extends RangeDatepicker {
14927
14688
  if (hasTo && date > departTs && date < returnTs) {
14928
14689
  return this.datepicker.rangeLabelInRange || 'in range';
14929
14690
  }
14930
- if (!hasTo && date > departTs) {
14931
- return this.datepicker.rangeLabelEndPreview || 'previewing range end';
14932
- }
14933
14691
  return this.datepicker.rangeLabelAfterRange || 'after range';
14934
14692
  }
14935
14693
 
14936
14694
  /**
14937
- * Checks whether a given date is a blackout date. Delegates to the
14938
- * memoized `_getBlackoutSet` so the YYYY-MM-DD parsing and the
14939
- * legacy/ISO merge rules live in exactly one place (see `blackoutUtils.js`).
14695
+ * Checks whether a given date is a blackout date.
14940
14696
  * @private
14941
14697
  * @param {Number} dateTs - Unix timestamp (seconds).
14942
14698
  * @returns {Boolean} True if the date is blacked out.
14943
14699
  */
14944
14700
  isDateBlackout(dateTs) {
14945
- return this._getBlackoutSet().has(dateTs);
14701
+ // Check legacy disabledDays.
14702
+ if (Array.isArray(this.disabledDays) && this.disabledDays.length > 0) {
14703
+ if (this.disabledDays.findIndex((day) => parseInt(day, 10) === dateTs) !== -1) {
14704
+ return true;
14705
+ }
14706
+ }
14707
+
14708
+ // Check ISO blackoutDates.
14709
+ const blackoutDates = this.datepicker?.blackoutDates;
14710
+ if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
14711
+ const date = new Date(dateTs * 1000);
14712
+ const yyyy = date.getFullYear();
14713
+ const mm = String(date.getMonth() + 1).padStart(2, '0');
14714
+ const dd = String(date.getDate()).padStart(2, '0');
14715
+ if (blackoutDates.includes(`${yyyy}-${mm}-${dd}`)) {
14716
+ return true;
14717
+ }
14718
+ }
14719
+
14720
+ return false;
14946
14721
  }
14947
14722
 
14948
14723
  /**
@@ -15109,34 +14884,9 @@ class AuroCalendar extends RangeDatepicker {
15109
14884
  // the last one.
15110
14885
  if (this._announceRafId) {
15111
14886
  cancelAnimationFrame(this._announceRafId);
15112
- this._announceRafId = null;
15113
14887
  }
15114
- this._deliverAnnouncement(dateStr, 0);
15115
- }
15116
-
15117
- /**
15118
- * Writes `dateStr` to the live region. If the dropdown's dialog hasn't
15119
- * mounted yet (so getOrCreateLiveRegion can't attach), retries on the
15120
- * next animation frame up to MAX_LIVE_REGION_RETRIES instead of silently
15121
- * dropping the announcement. The retry uses the same `_announceRafId`
15122
- * the double-rAF below uses, so a newer announceSelection call (or
15123
- * disconnectedCallback) cancels any in-flight retry.
15124
- * @private
15125
- * @param {String} dateStr - The localized date string to announce.
15126
- * @param {Number} attempts - Number of prior retry attempts.
15127
- * @returns {void}
15128
- */
15129
- _deliverAnnouncement(dateStr, attempts) {
15130
14888
  const liveRegion = this.getOrCreateLiveRegion();
15131
14889
  if (!liveRegion) {
15132
- const MAX_LIVE_REGION_RETRIES = 10;
15133
- if (attempts < MAX_LIVE_REGION_RETRIES) {
15134
- this._announceRafId = requestAnimationFrame(() => {
15135
- this._deliverAnnouncement(dateStr, attempts + 1);
15136
- });
15137
- } else {
15138
- this._announceRafId = null;
15139
- }
15140
14890
  return;
15141
14891
  }
15142
14892
 
@@ -15322,7 +15072,7 @@ class AuroCalendar extends RangeDatepicker {
15322
15072
  </button>
15323
15073
  ` : undefined}
15324
15074
  </div>
15325
- <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}">
15075
+ <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}">
15326
15076
  ${this.renderAllCalendars()}
15327
15077
  </div>
15328
15078
  </div>
@@ -19231,7 +18981,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$1 {
19231
18981
  }
19232
18982
  };
19233
18983
 
19234
- var formkitVersion$1 = '202606252324';
18984
+ var formkitVersion$1 = '202606252337';
19235
18985
 
19236
18986
  let AuroElement$2 = class AuroElement extends i$1 {
19237
18987
  static get properties() {
@@ -30956,6 +30706,13 @@ class AuroInputUtilities {
30956
30706
  * @returns {string | undefined}
30957
30707
  */
30958
30708
  toFormattedValue(valueObject, format) {
30709
+ // Exposed publicly via `AuroInputUtil.toFormattedValue`, so a missing
30710
+ // `format` argument has to fail gracefully rather than throw on
30711
+ // `format.toLowerCase()`. Treat any falsy value (undefined, null, '')
30712
+ // as "no format → no display value".
30713
+ if (!format) {
30714
+ return undefined;
30715
+ }
30959
30716
  const normalizedFormat = format.toLowerCase();
30960
30717
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
30961
30718
 
@@ -31106,79 +30863,18 @@ class BaseInput extends AuroElement$1 {
31106
30863
  constructor() {
31107
30864
  super();
31108
30865
 
31109
- this.appearance = "default";
31110
- this.disabled = false;
31111
- this.layout = 'classic';
31112
- this.locale = 'en-US';
31113
- this.max = undefined;
31114
- this._maxObject = undefined;
31115
- this.maxLength = undefined;
31116
- this.min = undefined;
31117
- this._minObject = undefined;
31118
- this.minLength = undefined;
31119
- this.required = false;
31120
- this.onDark = false;
31121
- this.setCustomValidityForType = undefined;
31122
- this.size = 'lg';
31123
- this.shape = 'classic';
31124
- this.value = undefined;
31125
- this._valueObject = undefined;
31126
-
31127
- this._initializePrivateDefaults();
31128
- }
31129
-
31130
- /**
31131
- * Internal Defaults.
31132
- * @private
31133
- * @returns {void}
31134
- */
31135
- _initializePrivateDefaults() {
30866
+ // Single-source initialization. Alphabetized so duplicate or stale
30867
+ // defaults are immediately obvious on a diff. Every field is assigned
30868
+ // exactly once here (previously the constructor + the old
30869
+ // `_initializePrivateDefaults` overlapped — both wrote ~14 of the same
30870
+ // fields and double-allocated `util` and `validation`, discarding the
30871
+ // first instance). `validation` is now allocated exactly once; `util`
30872
+ // is seeded here with an en-US default and then rebuilt in
30873
+ // `connectedCallback` once the consumer-resolved locale is available,
30874
+ // so a parent (datepicker/combobox) calling `validate()` synchronously
30875
+ // during its own update cycle sees a populated util instance.
31136
30876
  this.activeLabel = false;
31137
- this.appearance = "default";
31138
- this.icon = false;
31139
- this.disabled = false;
31140
- this.dvInputOnly = false;
31141
- this.hideLabelVisually = false;
31142
- this.max = undefined;
31143
- this.maxLength = undefined;
31144
- this.min = undefined;
31145
- this.minLength = undefined;
31146
- this.noValidate = false;
31147
- this.onDark = false;
31148
- this.required = false;
31149
- this.setCustomValidityForType = undefined;
31150
-
31151
- // Used for storing raw values returned from input mask.
31152
- this._rawMaskValue = undefined;
31153
-
31154
- /**
31155
- * @private
31156
- */
31157
- this.layout = 'classic';
31158
-
31159
- /**
31160
- * @private
31161
- */
31162
- this.shape = 'classic';
31163
-
31164
- /**
31165
- * @private
31166
- */
31167
- this.size = 'lg';
31168
-
31169
- this.touched = false;
31170
- this.util = new AuroInputUtilities({
31171
- locale: "en-US",
31172
- format: this.format
31173
- });
31174
- this.validation = new AuroFormValidation();
31175
- this.inputIconName = undefined;
31176
- this.showPassword = false;
31177
- this.validationCCLength = undefined;
31178
- this.hasValue = false;
31179
- this.label = 'Input label is undefined';
31180
-
31181
-
30877
+ /** @private */
31182
30878
  this.allowedInputTypes = [
31183
30879
  "text",
31184
30880
  "number",
@@ -31187,7 +30883,8 @@ class BaseInput extends AuroElement$1 {
31187
30883
  "credit-card",
31188
30884
  "tel"
31189
30885
  ];
31190
- this.icon = false;
30886
+ this.appearance = "default";
30887
+ /** @private */
31191
30888
  this.dateFormatMap = {
31192
30889
  'mm/dd/yyyy': 'dateMMDDYYYY',
31193
30890
  'dd/mm/yyyy': 'dateDDMMYYYY',
@@ -31204,27 +30901,57 @@ class BaseInput extends AuroElement$1 {
31204
30901
  'dd/mm': 'dateDDMM',
31205
30902
  'mm/dd': 'dateMMDD'
31206
30903
  };
30904
+ this.disabled = false;
30905
+ /** @private */
31207
30906
  this.domHandler = new DomHandler();
31208
30907
  this.dvInputOnly = false;
31209
30908
  this.hasValue = false;
30909
+ this.hideLabelVisually = false;
30910
+ this.icon = false;
30911
+ /** @private */
31210
30912
  this.inputIconName = undefined;
30913
+ /** @private */
31211
30914
  this.label = 'Input label is undefined';
30915
+ this.layout = 'classic';
30916
+ this.locale = 'en-US';
30917
+ this.max = undefined;
30918
+ this._maxObject = undefined;
30919
+ this.maxLength = undefined;
30920
+ this.min = undefined;
30921
+ this._minObject = undefined;
30922
+ this.minLength = undefined;
31212
30923
  this.noValidate = false;
31213
- this._rawMaskValue = undefined; // Used for storing raw values returned from input mask.
30924
+ this.onDark = false;
30925
+ // Raw values returned from the input mask before model normalization.
30926
+ this._rawMaskValue = undefined;
30927
+ this.required = false;
30928
+ this.setCustomValidityForType = undefined;
30929
+ // Credit Card is intentionally excluded — its mask manages the cursor
30930
+ // itself, and listing it here caused cursor placement issues in Safari.
30931
+ /** @private */
31214
30932
  this.setSelectionInputTypes = [
31215
30933
  "text",
31216
30934
  "password",
31217
30935
  "email"
31218
- ]; // Credit Card is not included as this caused cursor placement issues in Safari.
30936
+ ];
30937
+ this.shape = 'classic';
30938
+ /** @private */
31219
30939
  this.showPassword = false;
30940
+ this.size = 'lg';
31220
30941
  this.touched = false;
30942
+ /** @private */
31221
30943
  this.uniqueId = new UniqueId().create();
30944
+ /** @private */
31222
30945
  this.util = new AuroInputUtilities({
31223
30946
  locale: this.locale,
31224
30947
  format: this.format
31225
30948
  });
30949
+ /** @private */
31226
30950
  this.validation = new AuroFormValidation();
30951
+ /** @private */
31227
30952
  this.validationCCLength = undefined;
30953
+ this.value = undefined;
30954
+ this._valueObject = undefined;
31228
30955
  }
31229
30956
 
31230
30957
  // function to define props used within the scope of this component
@@ -31772,6 +31499,15 @@ class BaseInput extends AuroElement$1 {
31772
31499
 
31773
31500
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
31774
31501
 
31502
+ // Normalize the format token to lowercase so case-mixed values supplied
31503
+ // via attribute (e.g. `format="MM/DD/YYYY"`) hit the `dateFormatMap`
31504
+ // lookup inside `setCustomHelpTextMessage`. Without this, an uppercase
31505
+ // format silently misses the map and leaves `setCustomValidityForType`
31506
+ // unset.
31507
+ if (this.format) {
31508
+ this.format = this.format.toLowerCase();
31509
+ }
31510
+
31775
31511
  // use validity message override if declared when initializing the component
31776
31512
  if (this.hasAttribute('setCustomValidity')) {
31777
31513
  this.ValidityMessageOverride = this.setCustomValidity;
@@ -32205,6 +31941,38 @@ class BaseInput extends AuroElement$1 {
32205
31941
  this.touched = true;
32206
31942
  this.validation.validate(this);
32207
31943
  }
31944
+
31945
+ // Prevents cursor jumping in Safari. Setting `this.value` triggers a Lit
31946
+ // update that can re-render the input and reset the native cursor; we
31947
+ // capture the caret position before that update commits and restore it
31948
+ // via `setSelectionRange` once the update has flushed. Gated on
31949
+ // `setSelectionInputTypes` so credit-card (and other masked types whose
31950
+ // formatter manages the cursor itself) doesn't get a competing write.
31951
+ // Capture the caret position INSIDE the gate — reading `selectionStart`
31952
+ // on input types that don't support text selection (number, email in
31953
+ // some browsers) throws InvalidStateError, which would crash all input
31954
+ // handling. Wrap the read in try/catch belt-and-suspenders even though
31955
+ // the gated types currently support it, since the list is a public
31956
+ // property a consumer could mutate.
31957
+ if (this.setSelectionInputTypes.includes(this.type)) {
31958
+ let selectionStart;
31959
+ try {
31960
+ selectionStart = this.inputElement.selectionStart;
31961
+ } catch (error) { // eslint-disable-line no-unused-vars
31962
+ return;
31963
+ }
31964
+ if (typeof selectionStart !== 'number') {
31965
+ return;
31966
+ }
31967
+ this.updateComplete.then(() => {
31968
+ try {
31969
+ this.inputElement.setSelectionRange(selectionStart, selectionStart);
31970
+ } catch (error) { // eslint-disable-line no-unused-vars
31971
+ // Some input types (number/email in certain UAs) throw on
31972
+ // setSelectionRange; swallow and let the native cursor stand.
31973
+ }
31974
+ });
31975
+ }
32208
31976
  }
32209
31977
 
32210
31978
  /**
@@ -32831,7 +32599,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$1 {
32831
32599
  }
32832
32600
  };
32833
32601
 
32834
- var formkitVersion = '202606252324';
32602
+ var formkitVersion = '202606252337';
32835
32603
 
32836
32604
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
32837
32605
  // See LICENSE in the project root for license information.
@@ -33334,6 +33102,7 @@ class AuroInput extends BaseInput {
33334
33102
  <${this.buttonTag}
33335
33103
  @click="${this.handleClickShowPassword}"
33336
33104
  appearance="${this.onDark ? 'inverse' : this.appearance}"
33105
+ aria-pressed="${this.showPassword ? 'true' : 'false'}"
33337
33106
  class="notificationBtn passwordBtn"
33338
33107
  shape="circle"
33339
33108
  size="sm"
@@ -33407,25 +33176,29 @@ class AuroInput extends BaseInput {
33407
33176
  * @returns {html} - Returns HTML for the help text and error message.
33408
33177
  */
33409
33178
  renderHtmlHelpText() {
33179
+ // Single `<p>` with stable identity across validity transitions —
33180
+ // previously two distinct templates (valid vs invalid) caused Lit to
33181
+ // replace the node entirely on a flip, and VoiceOver wouldn't
33182
+ // re-announce because the live-region element it was watching had been
33183
+ // removed and a new one inserted. Keeping one node means the `role`,
33184
+ // `aria-live`, and text content all change in-place, which AT does
33185
+ // observe and announce.
33186
+ const isError = this.validity && this.validity !== 'valid';
33410
33187
  return u$a`
33411
- ${!this.validity || this.validity === undefined || this.validity === 'valid'
33412
- ? u$a`
33413
- <${this.helpTextTag}
33414
- appearance="${this.onDark ? 'inverse' : this.appearance}">
33415
- <p id="${this.uniqueId}" part="helpText">
33416
- <slot name="helpText">${this.getHelpText()}</slot>
33417
- </p>
33418
- </${this.helpTextTag}>
33419
- `
33420
- : u$a`
33421
- <${this.helpTextTag} error
33422
- appearance="${this.onDark ? 'inverse' : this.appearance}">
33423
- <p id="${this.uniqueId}" role="alert" aria-live="assertive" part="helpText">
33424
- ${this.errorMessage}
33425
- </p>
33426
- </${this.helpTextTag}>
33427
- `
33428
- }
33188
+ <${this.helpTextTag}
33189
+ appearance="${this.onDark ? 'inverse' : this.appearance}"
33190
+ ?error=${isError}>
33191
+ <p
33192
+ id="${this.uniqueId}"
33193
+ part="helpText"
33194
+ role="${o$2(isError ? 'alert' : undefined)}"
33195
+ aria-live="${o$2(isError ? 'assertive' : undefined)}">
33196
+ ${isError
33197
+ ? this.errorMessage
33198
+ : u$a`<slot name="helpText">${this.getHelpText()}</slot>`
33199
+ }
33200
+ </p>
33201
+ </${this.helpTextTag}>
33429
33202
  `;
33430
33203
  }
33431
33204
 
@@ -33572,6 +33345,15 @@ function formatISODate(isoStr, format) {
33572
33345
  try {
33573
33346
  const date = dateFormatter.stringToDateInstance(isoStr);
33574
33347
 
33348
+ // `stringToDateInstance` returns an `Invalid Date` for malformed strings
33349
+ // and `null` for non-string input — it does NOT throw. Without this
33350
+ // guard, `getFullYear()`/`getMonth()`/`getDate()` on an Invalid Date
33351
+ // yield `NaN`, and `String(NaN).padStart(4, '0')` produces literals
33352
+ // like "0NaN/0NaN/0NaN" instead of `undefined`.
33353
+ if (!(date instanceof Date) || Number.isNaN(date.getTime())) {
33354
+ return undefined;
33355
+ }
33356
+
33575
33357
  const year = String(date.getFullYear()).padStart(4, '0');
33576
33358
  const month = String(date.getMonth() + 1).padStart(2, '0');
33577
33359
  const day = String(date.getDate()).padStart(2, '0');
@@ -33582,7 +33364,10 @@ function formatISODate(isoStr, format) {
33582
33364
  replace(/mm/iu, month).
33583
33365
  replace(/dd/iu, day);
33584
33366
  } catch (err) {
33585
- // If the input string is not a valid date, return undefined
33367
+ // Defensive: the Date-returning path is guarded above, but `parseDate`
33368
+ // (inside `stringToDateInstance`) could throw on pathological input
33369
+ // future-library-versions might introduce. Treat any thrown error as
33370
+ // "not a valid date" and return undefined.
33586
33371
  return undefined;
33587
33372
  }
33588
33373
  }
@@ -34308,7 +34093,6 @@ class AuroDatePicker extends AuroElement {
34308
34093
  this.rangeLabelBeforeRange = 'before range';
34309
34094
  this.rangeLabelInRange = 'in range';
34310
34095
  this.rangeLabelAfterRange = 'after range';
34311
- this.rangeLabelEndPreview = 'previewing range end';
34312
34096
  this.blackoutDates = [];
34313
34097
  this.blackoutLabel = 'unavailable';
34314
34098
  this.navLabelPrevMonth = 'Previous month';
@@ -34408,22 +34192,6 @@ class AuroDatePicker extends AuroElement {
34408
34192
  */
34409
34193
  this.handleClick = this.handleClick.bind(this);
34410
34194
 
34411
- /**
34412
- * Single AbortController shared by every listener registered in the
34413
- * configure* methods. Lets disconnectedCallback tear all of them down
34414
- * with one abort() call.
34415
- *
34416
- * The genuine leak risk is the listeners attached to children that can
34417
- * outlive the host if they get reparented — `this.dropdown`,
34418
- * `this.calendar`, and the inputs inside the dropdown's slot.
34419
- * Listeners attached to `this` (e.g. focusin/focusout on the host)
34420
- * form a self-contained reference graph that the GC can collect with
34421
- * the host anyway, but they share the same signal so the cleanup
34422
- * pattern stays uniform across all configure* sites.
34423
- * @private
34424
- */
34425
- this._listenerAbortController = new AbortController();
34426
-
34427
34195
  /**
34428
34196
  * @private
34429
34197
  */
@@ -34472,7 +34240,6 @@ class AuroDatePicker extends AuroElement {
34472
34240
 
34473
34241
  /**
34474
34242
  * Label announced for blackout (disabled but in-range) date cells.
34475
- * @default 'unavailable'
34476
34243
  */
34477
34244
  blackoutLabel: {
34478
34245
  type: String,
@@ -34489,7 +34256,6 @@ class AuroDatePicker extends AuroElement {
34489
34256
 
34490
34257
  /**
34491
34258
  * Accessible label for the calendar grid containing the days of the month.
34492
- * @default 'Calendar days of the month'
34493
34259
  */
34494
34260
  calendarGridLabel: {
34495
34261
  type: String,
@@ -34652,7 +34418,6 @@ class AuroDatePicker extends AuroElement {
34652
34418
 
34653
34419
  /**
34654
34420
  * Accessible label for the next month navigation button.
34655
- * @default 'Next month'
34656
34421
  */
34657
34422
  navLabelNextMonth: {
34658
34423
  type: String,
@@ -34661,7 +34426,6 @@ class AuroDatePicker extends AuroElement {
34661
34426
 
34662
34427
  /**
34663
34428
  * Accessible label for the previous month navigation button.
34664
- * @default 'Previous month'
34665
34429
  */
34666
34430
  navLabelPrevMonth: {
34667
34431
  type: String,
@@ -34739,11 +34503,7 @@ class AuroDatePicker extends AuroElement {
34739
34503
  },
34740
34504
 
34741
34505
  /**
34742
- * Label announced for cells after a fully selected range (both
34743
- * `dateFrom` and `dateTo` are set). While a range is still being
34744
- * picked (`dateFrom` set, `dateTo` unset), focused cells past the
34745
- * start use `rangeLabelEndPreview` instead.
34746
- * @default 'after range'
34506
+ * Label announced for cells after the range (or after start when no end is selected).
34747
34507
  */
34748
34508
  rangeLabelAfterRange: {
34749
34509
  type: String,
@@ -34752,7 +34512,6 @@ class AuroDatePicker extends AuroElement {
34752
34512
 
34753
34513
  /**
34754
34514
  * Label announced for cells before the range start.
34755
- * @default 'before range'
34756
34515
  */
34757
34516
  rangeLabelBeforeRange: {
34758
34517
  type: String,
@@ -34761,27 +34520,14 @@ class AuroDatePicker extends AuroElement {
34761
34520
 
34762
34521
  /**
34763
34522
  * Label announced for the range end date cell.
34764
- * @default 'range end'
34765
34523
  */
34766
34524
  rangeLabelEnd: {
34767
34525
  type: String,
34768
34526
  reflect: true
34769
34527
  },
34770
34528
 
34771
- /**
34772
- * Label announced for the focused cell while previewing a range end
34773
- * (dateFrom set, dateTo not yet selected). Tells AT users that
34774
- * pressing Enter would commit this cell as the range end.
34775
- * @default 'previewing range end'
34776
- */
34777
- rangeLabelEndPreview: {
34778
- type: String,
34779
- reflect: true
34780
- },
34781
-
34782
34529
  /**
34783
34530
  * Label announced for cells within the selected range.
34784
- * @default 'in range'
34785
34531
  */
34786
34532
  rangeLabelInRange: {
34787
34533
  type: String,
@@ -34790,7 +34536,6 @@ class AuroDatePicker extends AuroElement {
34790
34536
 
34791
34537
  /**
34792
34538
  * Label announced for the range start date cell.
34793
- * @default 'range start'
34794
34539
  */
34795
34540
  rangeLabelStart: {
34796
34541
  type: String,
@@ -34798,7 +34543,7 @@ class AuroDatePicker extends AuroElement {
34798
34543
  },
34799
34544
 
34800
34545
  /**
34801
- * Dates that the user should have for reference as part of their decision-making when selecting a date.
34546
+ * Dates that the user should have for reference as part of their decision making when selecting a date.
34802
34547
  * This should be a JSON string array of ISO date strings (`YYYY-MM-DD`).
34803
34548
  */
34804
34549
  referenceDates: {
@@ -35155,26 +34900,10 @@ class AuroDatePicker extends AuroElement {
35155
34900
  // ─── Vendor calendar time conversions ─────────────────────────────────────
35156
34901
 
35157
34902
  /**
35158
- * Converts a Unix timestamp (seconds) from the vendored range-datepicker
35159
- * (`src/vendor/wc-range-datepicker/day.js`) to an ISO date string.
35160
- *
35161
- * Timezone contract:
35162
- * - INPUT: `time` is assumed to be the seconds-since-epoch of **local
35163
- * midnight** for the intended calendar day. The vendor's Day constructor
35164
- * builds it via `date-fns format(date, 't')` from a locally-constructed
35165
- * Date, so this assumption currently holds end-to-end.
35166
- * - OUTPUT: `dateFormatter.toISOFormatString` reads the Date's local
35167
- * getFullYear/getMonth/getDate components, so the returned YYYY-MM-DD
35168
- * string matches the local calendar day.
35169
- *
35170
- * If the vendor ever switches to emitting UTC-midnight timestamps, this
35171
- * conversion will silently shift the returned date by one day in zones
35172
- * west of UTC. Any vendor swap should re-verify this contract; the TZ
35173
- * regression suite (`npm run test:hst`, UTC-10) will catch the symptom.
35174
- *
34903
+ * Converts a Unix timestamp (seconds) from the vendor calendar to an ISO date string.
35175
34904
  * @private
35176
- * @param {number} time - Unix timestamp (seconds), local midnight of the day.
35177
- * @returns {string} ISO date string (yyyy-mm-dd) reflecting the local calendar day.
34905
+ * @param {number} time - Unix timestamp in seconds.
34906
+ * @returns {string} ISO date string (yyyy-mm-dd).
35178
34907
  */
35179
34908
  convertWcTimeToDate(time) {
35180
34909
  return dateFormatter$1.toISOFormatString(new Date(time * 1000));
@@ -35276,8 +35005,8 @@ class AuroDatePicker extends AuroElement {
35276
35005
  }
35277
35006
  }
35278
35007
 
35279
- // Focus the calendar grid wrapper. The live region (announced just
35280
- // below) handles the SR announcement for the active cell.
35008
+ // Focus the calendar grid wrapper (aria-activedescendant handles
35009
+ // the SR announcement for the active cell).
35281
35010
  if (activeCell) {
35282
35011
  this.calendar.focusActiveCell();
35283
35012
 
@@ -35327,13 +35056,11 @@ class AuroDatePicker extends AuroElement {
35327
35056
  this.dropdown.bibDialogLabel = labelElement.textContent.trim() || undefined;
35328
35057
  }
35329
35058
 
35330
- const { signal } = this._listenerAbortController;
35331
-
35332
35059
  this.dropdown.addEventListener('auroDropdown-triggerClick', () => {
35333
35060
  if (!this.isPopoverVisible) {
35334
35061
  this.dropdown.show();
35335
35062
  }
35336
- }, { signal });
35063
+ });
35337
35064
 
35338
35065
  this.dropdown.addEventListener('auroDropdown-toggled', () => {
35339
35066
  this.notifyDatepickerToggled();
@@ -35351,7 +35078,7 @@ class AuroDatePicker extends AuroElement {
35351
35078
  if (this.valueObject) {
35352
35079
  this.centralDate = this.value;
35353
35080
  } else if (!this.centralDate && !this.calendarStartDate && !this.minDate) {
35354
- this.centralDate = dateFormatter$1.toISOFormatString(new Date());
35081
+ this.centralDate = new Date();
35355
35082
  }
35356
35083
  }
35357
35084
 
@@ -35431,7 +35158,7 @@ class AuroDatePicker extends AuroElement {
35431
35158
  this.forceScrollOnNextMobileCalendarRender = false;
35432
35159
  }, 0);
35433
35160
  }
35434
- }, { signal });
35161
+ });
35435
35162
 
35436
35163
  // Handle responsive strategy changes while the dropdown is open
35437
35164
  // (e.g. resizing from desktop → mobile or vice versa).
@@ -35478,7 +35205,7 @@ class AuroDatePicker extends AuroElement {
35478
35205
  });
35479
35206
  });
35480
35207
  }
35481
- }, { signal });
35208
+ });
35482
35209
  }
35483
35210
 
35484
35211
  /**
@@ -35491,8 +35218,6 @@ class AuroDatePicker extends AuroElement {
35491
35218
 
35492
35219
  this.inputList = [...this.dropdown.querySelectorAll(this.inputTag._$litStatic$)];
35493
35220
 
35494
- const { signal } = this._listenerAbortController;
35495
-
35496
35221
  this.inputList.forEach((input, index) => {
35497
35222
  input.addEventListener('input', (event) => {
35498
35223
  event.stopPropagation();
@@ -35504,7 +35229,7 @@ class AuroDatePicker extends AuroElement {
35504
35229
  }
35505
35230
 
35506
35231
  this.notifyValueChanged();
35507
- }, { signal });
35232
+ });
35508
35233
 
35509
35234
  input.addEventListener('auroFormElement-validated', (evt) => {
35510
35235
  // not to bubble up input's validated event.
@@ -35520,7 +35245,7 @@ class AuroDatePicker extends AuroElement {
35520
35245
  this.validity = evt.detail.validity;
35521
35246
  this.errorMessage = evt.detail.message;
35522
35247
  }
35523
- }, { signal });
35248
+ });
35524
35249
  });
35525
35250
  }
35526
35251
 
@@ -35534,32 +35259,19 @@ class AuroDatePicker extends AuroElement {
35534
35259
  this.calendar.datepicker = this;
35535
35260
  this.calendar.dropdown = this.dropdown;
35536
35261
 
35537
- const { signal } = this._listenerAbortController;
35538
-
35539
35262
  this.calendar.addEventListener('auroCalendar-dateSelected', () => {
35540
- // Compare the input's ISO value against the *converted* calendar
35541
- // timestamp (the vendor's `dateFrom`/`dateTo` are Unix-seconds
35542
- // strings — comparing the input ISO directly against them would
35543
- // never match, so the write would fire on every event and emit
35544
- // redundant input/change activity).
35545
- if (this.calendar.dateFrom !== undefined) {
35546
- const fromIso = this.convertWcTimeToDate(this.calendar.dateFrom);
35547
- if (this.inputList[0].value !== fromIso) {
35548
- this.inputList[0].value = fromIso;
35549
- }
35263
+ if (this.inputList[0].value !== this.calendar.dateFrom && this.calendar.dateFrom !== undefined) {
35264
+ this.inputList[0].value = this.convertWcTimeToDate(this.calendar.dateFrom);
35550
35265
  }
35551
35266
 
35552
- if (this.inputList[1] && this.calendar.dateTo) {
35553
- const toIso = this.convertWcTimeToDate(this.calendar.dateTo);
35554
- if (this.inputList[1].value !== toIso) {
35555
- this.inputList[1].value = toIso;
35556
- }
35267
+ if (this.inputList[1] && this.calendar.dateTo && this.inputList[1].value !== this.calendar.dateTo) {
35268
+ this.inputList[1].value = this.convertWcTimeToDate(this.calendar.dateTo);
35557
35269
  }
35558
- }, { signal });
35270
+ });
35559
35271
 
35560
35272
  this.calendar.addEventListener('auroCalendar-dismissRequest', () => {
35561
35273
  this.dropdown.hide();
35562
- }, { signal });
35274
+ });
35563
35275
 
35564
35276
  this.calendar.addEventListener('auroCalendar-centralDateChanged', (event) => {
35565
35277
  const match = this.centralDateObject && this.util.datesMatch(event.detail.date, this.centralDateObject);
@@ -35569,7 +35281,7 @@ class AuroDatePicker extends AuroElement {
35569
35281
  }
35570
35282
 
35571
35283
  this.notifyMonthChanged(event);
35572
- }, { signal });
35284
+ });
35573
35285
  }
35574
35286
 
35575
35287
  /**
@@ -35578,17 +35290,10 @@ class AuroDatePicker extends AuroElement {
35578
35290
  * @returns {void}
35579
35291
  */
35580
35292
  configureDatepicker() {
35581
- // These listeners are on `this` (the host), so they would GC with the
35582
- // host even without the abort signal — see the leak rationale on
35583
- // `_listenerAbortController`. The signal is still passed for uniform
35584
- // cleanup semantics with the child-element listeners in the other
35585
- // configure* methods.
35586
- const { signal } = this._listenerAbortController;
35587
-
35588
35293
  this.addEventListener('focusin', () => {
35589
35294
  this.touched = true;
35590
35295
  this.hasFocus = true;
35591
- }, { signal });
35296
+ });
35592
35297
 
35593
35298
  this.addEventListener('focusout', () => {
35594
35299
  this.hasFocus = false;
@@ -35600,7 +35305,7 @@ class AuroDatePicker extends AuroElement {
35600
35305
  if (!this.matches(':focus-within')) {
35601
35306
  this.validate();
35602
35307
  }
35603
- }, { signal });
35308
+ });
35604
35309
 
35605
35310
  if (this.valueObject) {
35606
35311
  this.calendar.dateFrom = this.convertToWcValidTime(this.valueObject);
@@ -35798,41 +35503,6 @@ class AuroDatePicker extends AuroElement {
35798
35503
  return this.validity !== undefined && this.validity !== 'valid';
35799
35504
  }
35800
35505
 
35801
- /**
35802
- * Per-class dedup set used by `_warnInvalidLocale`. Static so the dedup
35803
- * spans every datepicker instance on the page; lives on the class (not
35804
- * at module scope) so it stays an encapsulated implementation detail of
35805
- * this component and does not interfere with WCA's class-JSDoc
35806
- * attachment.
35807
- * @private
35808
- */
35809
- static _warnedInvalidLocales = new Set();
35810
-
35811
- /**
35812
- * Logs a one-time `console.debug` when an unsupported locale falls back to
35813
- * en-US. Deduped by the offending tag so noisy re-renders that resurface
35814
- * the same bad value stay quiet, but each new bad value still signals so
35815
- * consumers can spot the typo or missing tag.
35816
- * @private
35817
- * @param {string|undefined} badLocale - The locale value that failed.
35818
- * @returns {void}
35819
- */
35820
- _warnInvalidLocale(badLocale) {
35821
- // Stringify without coalescing — `String(undefined)` / `String(null)`
35822
- // surface the actual offending value in the log, instead of the
35823
- // ambiguous `Locale ""` that `String(badLocale ?? '')` would produce.
35824
- // Dedup still works correctly because each unique stringification
35825
- // becomes its own Set entry.
35826
- const key = String(badLocale);
35827
- const seen = AuroDatePicker._warnedInvalidLocales;
35828
- if (seen.has(key)) {
35829
- return;
35830
- }
35831
- seen.add(key);
35832
- // eslint-disable-next-line no-console
35833
- 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".`);
35834
- }
35835
-
35836
35506
  /**
35837
35507
  * Lifecycle method to check if the locale is valid.
35838
35508
  * @ignore
@@ -35843,15 +35513,10 @@ class AuroDatePicker extends AuroElement {
35843
35513
  if (changedProperties.has('locale')) {
35844
35514
  try {
35845
35515
  const supported = Intl.DateTimeFormat.supportedLocalesOf([this.locale], { localeMatcher: 'lookup' });
35846
- if (supported.length > 0) {
35847
- this._validLocale = this.locale;
35848
- } else {
35849
- this._validLocale = 'en-US';
35850
- this._warnInvalidLocale(this.locale);
35851
- }
35516
+ this._validLocale = supported.length > 0 ? this.locale : 'en-US';
35852
35517
  } catch {
35518
+ console.debug(`[AuroDatePicker] The locale "${this.locale}" is not valid. Falling back to "en-US".`); // eslint-disable-line no-console
35853
35519
  this._validLocale = 'en-US';
35854
- this._warnInvalidLocale(this.locale);
35855
35520
  }
35856
35521
 
35857
35522
  const previousLocaleFormat = getDateFormatFromLocale$1(changedProperties.get('locale'));
@@ -35933,6 +35598,8 @@ class AuroDatePicker extends AuroElement {
35933
35598
  // Skip centralDate update when user clicked a cell in range mode
35934
35599
  // to prevent the displayed months from shifting
35935
35600
  this.centralDate = this.value;
35601
+ //TODO: TEST THIS CHANGE
35602
+ // this.calendarRenderUtil.updateCentralDate(this, this.value);
35936
35603
  }
35937
35604
 
35938
35605
  this.setHasValue();
@@ -35992,6 +35659,8 @@ class AuroDatePicker extends AuroElement {
35992
35659
  // Skip centralDate update when user clicked a cell in range mode
35993
35660
  // to prevent the displayed months from shifting
35994
35661
  this.centralDate = this.valueEnd;
35662
+ // TODO: TEST THIS CHANGE
35663
+ // this.calendarRenderUtil.updateCentralDate(this, this.formattedValueEnd);
35995
35664
  }
35996
35665
 
35997
35666
  this.validate();
@@ -36133,7 +35802,7 @@ class AuroDatePicker extends AuroElement {
36133
35802
  * @returns {void}
36134
35803
  */
36135
35804
  configureClickHandler() {
36136
- this.addEventListener('click', this.handleClick, { signal: this._listenerAbortController.signal });
35805
+ this.addEventListener('click', this.handleClick);
36137
35806
  }
36138
35807
 
36139
35808
  firstUpdated() {
@@ -36141,15 +35810,6 @@ class AuroDatePicker extends AuroElement {
36141
35810
  // Add the tag name as an attribute if it is different than the component name
36142
35811
  this.runtimeUtils.handleComponentTagRename(this, 'auro-datepicker');
36143
35812
 
36144
- // If the element was disconnected before this first render finished,
36145
- // disconnectedCallback's microtask already aborted the controller. The
36146
- // connectedCallback reinit guard skips that case because `hasUpdated`
36147
- // is still false. Mint a fresh controller here so configure* registers
36148
- // listeners against a live signal.
36149
- if (this._listenerAbortController.signal.aborted) {
36150
- this._listenerAbortController = new AbortController();
36151
- }
36152
-
36153
35813
  this.configureDropdown();
36154
35814
  this.configureInput();
36155
35815
  this.configureCalendar();
@@ -36161,36 +35821,9 @@ class AuroDatePicker extends AuroElement {
36161
35821
  connectedCallback() {
36162
35822
  super.connectedCallback();
36163
35823
 
36164
- // True reconnect after `disconnectedCallback` aborted our controller:
36165
- // the existing signal is dead, so listeners registered against it
36166
- // would never fire. Create a fresh controller and re-run the
36167
- // configure* wiring (each method is idempotent — it just re-caches
36168
- // child refs and re-registers listeners against the new signal).
36169
- // `hasUpdated` gates this so the *first* connect (which precedes
36170
- // firstUpdated) still falls through to firstUpdated's initial wiring.
36171
- if (this.hasUpdated && this._listenerAbortController.signal.aborted) {
36172
- this._listenerAbortController = new AbortController();
36173
- this.configureDropdown();
36174
- this.configureInput();
36175
- this.configureCalendar();
36176
- this.configureDatepicker();
36177
- this.configureClickHandler();
36178
- }
36179
-
36180
35824
  this.locale = this.domHandler.getLocale(this);
36181
35825
  }
36182
35826
 
36183
- disconnectedCallback() {
36184
- super.disconnectedCallback();
36185
- // Defer so that re-parenting (auro-drawer slotting it into a dialog,
36186
- // for example) does not abort listeners we still need after reconnect.
36187
- queueMicrotask(() => {
36188
- if (!this.isConnected) {
36189
- this._listenerAbortController.abort();
36190
- }
36191
- });
36192
- }
36193
-
36194
35827
  // layout render methods
36195
35828
  // ------------------------------------
36196
35829