@aurodesignsystem-dev/auro-formkit 0.0.0-pr1510.2 → 0.0.0-pr1511.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 (128) 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 +4 -3
  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 +4 -3
  16. package/components/combobox/demo/index.js +23 -0
  17. package/components/combobox/demo/index.min.js +4 -3
  18. package/components/combobox/demo/styles.scss +1 -0
  19. package/components/combobox/dist/index.js +4 -3
  20. package/components/combobox/dist/registered.js +4 -3
  21. package/components/counter/demo/customize.js +21 -0
  22. package/components/counter/demo/customize.min.js +3 -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 +3 -2
  26. package/components/counter/demo/styles.scss +1 -0
  27. package/components/counter/dist/index.js +3 -2
  28. package/components/counter/dist/registered.js +3 -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 +207 -601
  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 +207 -601
  37. package/components/datepicker/demo/styles.scss +1 -0
  38. package/components/datepicker/dist/index.js +207 -601
  39. package/components/datepicker/dist/registered.js +207 -601
  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 +2 -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 +2 -1
  48. package/components/dropdown/demo/index.js +16 -0
  49. package/components/dropdown/demo/index.min.js +2 -1
  50. package/components/dropdown/demo/styles.scss +1 -0
  51. package/components/dropdown/dist/index.js +2 -1
  52. package/components/dropdown/dist/registered.js +2 -1
  53. package/components/form/demo/customize.js +28 -0
  54. package/components/form/demo/customize.min.js +355 -670
  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 +355 -670
  58. package/components/form/demo/index.js +5 -0
  59. package/components/form/demo/index.min.js +355 -670
  60. package/components/form/demo/registerDemoDeps.js +23 -0
  61. package/components/form/demo/registerDemoDeps.min.js +355 -670
  62. package/components/form/demo/styles.scss +1 -0
  63. package/components/input/demo/customize.js +25 -0
  64. package/components/input/demo/customize.min.js +1 -1
  65. package/components/input/demo/demo-support.js +1 -0
  66. package/components/input/demo/getting-started.js +8 -0
  67. package/components/input/demo/getting-started.min.js +1 -1
  68. package/components/input/demo/index.js +8 -0
  69. package/components/input/demo/index.min.js +1 -1
  70. package/components/input/demo/styles.css +974 -0
  71. package/components/input/demo/styles.scss +1 -0
  72. package/components/input/dist/index.js +1 -1
  73. package/components/input/dist/registered.js +1 -1
  74. package/components/menu/demo/demo-support.js +1 -0
  75. package/components/menu/demo/index.js +25 -0
  76. package/components/menu/demo/styles.scss +1 -0
  77. package/components/radio/demo/customize.js +22 -0
  78. package/components/radio/demo/customize.min.js +1 -1
  79. package/components/radio/demo/demo-support.js +1 -0
  80. package/components/radio/demo/getting-started.js +24 -0
  81. package/components/radio/demo/getting-started.min.js +1 -1
  82. package/components/radio/demo/index.js +8 -0
  83. package/components/radio/demo/index.min.js +1 -1
  84. package/components/radio/demo/styles.scss +1 -0
  85. package/components/radio/dist/index.js +1 -1
  86. package/components/radio/dist/registered.js +1 -1
  87. package/components/select/demo/customize.js +11 -0
  88. package/components/select/demo/customize.min.js +132 -55
  89. package/components/select/demo/demo-support.js +1 -0
  90. package/components/select/demo/getting-started.js +26 -0
  91. package/components/select/demo/getting-started.min.js +132 -55
  92. package/components/select/demo/index.js +11 -0
  93. package/components/select/demo/index.min.js +132 -55
  94. package/components/select/demo/keyboard-behavior.md +18 -4
  95. package/components/select/demo/styles.scss +1 -0
  96. package/components/select/dist/auro-select.d.ts +20 -8
  97. package/components/select/dist/index.js +132 -55
  98. package/components/select/dist/registered.js +132 -55
  99. package/custom-elements.json +25 -311
  100. package/package.json +2 -6
  101. package/components/datepicker/dist/blackoutUtils.d.ts +0 -43
  102. /package/components/datepicker/dist/{auro-calendar-month.d.ts → src/auro-calendar-month.d.ts} +0 -0
  103. /package/components/datepicker/dist/{buttonVersion.d.ts → src/buttonVersion.d.ts} +0 -0
  104. /package/components/datepicker/dist/{datepickerKeyboardStrategy.d.ts → src/datepickerKeyboardStrategy.d.ts} +0 -0
  105. /package/components/datepicker/dist/{iconVersion.d.ts → src/iconVersion.d.ts} +0 -0
  106. /package/components/datepicker/dist/{index.d.ts → src/index.d.ts} +0 -0
  107. /package/components/datepicker/dist/{popoverVersion.d.ts → src/popoverVersion.d.ts} +0 -0
  108. /package/components/datepicker/dist/{styles → src/styles}/classic/color-css.d.ts +0 -0
  109. /package/components/datepicker/dist/{styles → src/styles}/classic/style-css.d.ts +0 -0
  110. /package/components/datepicker/dist/{styles → src/styles}/color-calendar-css.d.ts +0 -0
  111. /package/components/datepicker/dist/{styles → src/styles}/color-cell-css.d.ts +0 -0
  112. /package/components/datepicker/dist/{styles → src/styles}/color-css.d.ts +0 -0
  113. /package/components/datepicker/dist/{styles → src/styles}/color-month-css.d.ts +0 -0
  114. /package/components/datepicker/dist/{styles → src/styles}/shapeSize-css.d.ts +0 -0
  115. /package/components/datepicker/dist/{styles → src/styles}/snowflake/color-css.d.ts +0 -0
  116. /package/components/datepicker/dist/{styles → src/styles}/snowflake/style-css.d.ts +0 -0
  117. /package/components/datepicker/dist/{styles → src/styles}/style-auro-calendar-cell-css.d.ts +0 -0
  118. /package/components/datepicker/dist/{styles → src/styles}/style-auro-calendar-css.d.ts +0 -0
  119. /package/components/datepicker/dist/{styles → src/styles}/style-auro-calendar-month-css.d.ts +0 -0
  120. /package/components/datepicker/dist/{styles → src/styles}/style-css.d.ts +0 -0
  121. /package/components/datepicker/dist/{styles → src/styles}/tokens-css.d.ts +0 -0
  122. /package/components/datepicker/dist/{utilities.d.ts → src/utilities.d.ts} +0 -0
  123. /package/components/datepicker/dist/{utilitiesCalendar.d.ts → src/utilitiesCalendar.d.ts} +0 -0
  124. /package/components/datepicker/dist/{utilitiesCalendarRender.d.ts → src/utilitiesCalendarRender.d.ts} +0 -0
  125. /package/components/datepicker/dist/{vendor → src/vendor}/wc-range-datepicker/day.d.ts +0 -0
  126. /package/components/datepicker/dist/{vendor → src/vendor}/wc-range-datepicker/range-datepicker-calendar.d.ts +0 -0
  127. /package/components/datepicker/dist/{vendor → src/vendor}/wc-range-datepicker/range-datepicker-cell.d.ts +0 -0
  128. /package/components/datepicker/dist/{vendor → src/vendor}/wc-range-datepicker/range-datepicker.d.ts +0 -0
@@ -6176,7 +6176,7 @@ function normalizeDates$3(context, ...dates) {
6176
6176
  * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))
6177
6177
  * //=> Tue Sep 02 2014 00:00:00
6178
6178
  */
6179
- function startOfDay$3(date, options) {
6179
+ function startOfDay$4(date, options) {
6180
6180
  const _date = toDate$3(date, options?.in);
6181
6181
  _date.setHours(0, 0, 0, 0);
6182
6182
  return _date;
@@ -6224,8 +6224,8 @@ function differenceInCalendarDays$3(laterDate, earlierDate, options) {
6224
6224
  earlierDate,
6225
6225
  );
6226
6226
 
6227
- const laterStartOfDay = startOfDay$3(laterDate_);
6228
- const earlierStartOfDay = startOfDay$3(earlierDate_);
6227
+ const laterStartOfDay = startOfDay$4(laterDate_);
6228
+ const earlierStartOfDay = startOfDay$4(earlierDate_);
6229
6229
 
6230
6230
  const laterTimestamp =
6231
6231
  +laterStartOfDay - getTimezoneOffsetInMilliseconds$3(laterStartOfDay);
@@ -13372,7 +13372,7 @@ let AuroHelpText$8 = class AuroHelpText extends i$3 {
13372
13372
  }
13373
13373
  };
13374
13374
 
13375
- var formkitVersion$8 = '202606252132';
13375
+ var formkitVersion$8 = '202606252142';
13376
13376
 
13377
13377
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
13378
13378
  // See LICENSE in the project root for license information.
@@ -15456,7 +15456,7 @@ function normalizeDates$1(context, ...dates) {
15456
15456
  * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))
15457
15457
  * //=> Tue Sep 02 2014 00:00:00
15458
15458
  */
15459
- function startOfDay$1(date, options) {
15459
+ function startOfDay$2(date, options) {
15460
15460
  const _date = toDate$1(date, options?.in);
15461
15461
  _date.setHours(0, 0, 0, 0);
15462
15462
  return _date;
@@ -15504,8 +15504,8 @@ function differenceInCalendarDays$1(laterDate, earlierDate, options) {
15504
15504
  earlierDate,
15505
15505
  );
15506
15506
 
15507
- const laterStartOfDay = startOfDay$1(laterDate_);
15508
- const earlierStartOfDay = startOfDay$1(earlierDate_);
15507
+ const laterStartOfDay = startOfDay$2(laterDate_);
15508
+ const earlierStartOfDay = startOfDay$2(earlierDate_);
15509
15509
 
15510
15510
  const laterTimestamp =
15511
15511
  +laterStartOfDay - getTimezoneOffsetInMilliseconds$1(laterStartOfDay);
@@ -24962,8 +24962,8 @@ class RangeDatepickerCell extends i$3 {
24962
24962
  const parsedDateFrom = parseInt(dateFrom, 10);
24963
24963
  const parsedDateTo = parseInt(dateTo, 10);
24964
24964
  if (day) {
24965
- if (getTime(startOfDay$1(parsedDateTo * 1000)) / 1000 === day.date ||
24966
- getTime(startOfDay$1(parsedDateFrom * 1000)) / 1000 === day.date) {
24965
+ if (getTime(startOfDay$2(parsedDateTo * 1000)) / 1000 === day.date ||
24966
+ getTime(startOfDay$2(parsedDateFrom * 1000)) / 1000 === day.date) {
24967
24967
  this.selected = true;
24968
24968
  }
24969
24969
  if (((hoveredDate === day.date || day.date < hoveredDate) &&
@@ -25151,7 +25151,7 @@ class RangeDatepickerCalendar extends i$3 {
25151
25151
  this.dayNamesOfTheWeek = [];
25152
25152
  this.daysOfMonth = [];
25153
25153
  this._locale = null;
25154
- this.currentDate = parseInt(format$1(startOfDay$1(Date.now()), 't'), 10);
25154
+ this.currentDate = parseInt(format$1(startOfDay$2(Date.now()), 't'), 10);
25155
25155
  this.localeChanged();
25156
25156
  this.yearAndMonthChanged(this.year, this.month);
25157
25157
  }
@@ -25625,7 +25625,7 @@ __decorate([n$4({ type: Array })], RangeDatepickerCalendar.prototype, "dayNamesO
25625
25625
  __decorate([n$4({ type: Array })], RangeDatepickerCalendar.prototype, "daysOfMonth", void 0);
25626
25626
  AuroLibraryRuntimeUtils$5$1.prototype.registerComponent('wc-range-datepicker-calendar', RangeDatepickerCalendar);
25627
25627
 
25628
- var styleCss$5$2 = i$6`.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}`;
25628
+ var styleCss$5$2 = i$6`.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}`;
25629
25629
 
25630
25630
  var colorCss$5$2 = i$6`: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}`;
25631
25631
 
@@ -25650,104 +25650,14 @@ class s{registerComponent(e,t){customElements.get(e)||customElements.define(e,cl
25650
25650
 
25651
25651
  var popoverVersion = '6.0.1';
25652
25652
 
25653
- /**
25654
- * Single source of truth for parsing and matching blackout dates across the
25655
- * datepicker. Both `auro-calendar` (memoized Set + `isDateBlackout`) and the
25656
- * pre-`firstUpdated` fallback inside `auro-calendar-cell` route through these
25657
- * helpers so the YYYY-MM-DD → seconds conversion and the merge-with-legacy
25658
- * `disabledDays` rules are defined exactly once.
25659
- */
25660
-
25661
- /**
25662
- * Converts a `YYYY-MM-DD` ISO date string to a Unix timestamp (seconds)
25663
- * representing local midnight on that calendar day. Returns `null` for
25664
- * inputs that don't parse to a finite timestamp.
25665
- *
25666
- * Uses the `new Date(year, monthIndex, day)` constructor (NOT
25667
- * `new Date(isoStr)`) so the result is local-midnight rather than UTC
25668
- * midnight — required to keep the calendar grid aligned with the user's
25669
- * local calendar day in negative-offset timezones.
25670
- *
25671
- * @param {string} isoStr - Date string in `YYYY-MM-DD` format.
25672
- * @returns {number|null} Local-midnight Unix timestamp (seconds), or null.
25673
- */
25674
- function parseIsoToTimestamp(isoStr) {
25675
- if (typeof isoStr !== 'string') {
25676
- return null;
25677
- }
25678
- const parts = isoStr.split('-');
25679
- if (parts.length !== 3) {
25680
- return null;
25681
- }
25682
- const year = parseInt(parts[0], 10);
25683
- const month = parseInt(parts[1], 10);
25684
- const day = parseInt(parts[2], 10);
25685
- if (!Number.isFinite(year) || !Number.isFinite(month) || !Number.isFinite(day)) {
25686
- return null;
25687
- }
25688
- // Reject overflow values like "2024-13-40" — JS `new Date(year, month, day)`
25689
- // silently normalizes those to a different calendar day, which would
25690
- // disable the wrong date if we let the result through.
25691
- if (month < 1 || month > 12 || day < 1 || day > 31) {
25692
- return null;
25693
- }
25694
- const date = new Date(year, month - 1, day);
25695
- // Guard the residual case where JS still rolls a value (e.g. Feb 30 → Mar 2).
25696
- // After construction, getFullYear/getMonth/getDate should match the inputs.
25697
- if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {
25698
- return null;
25699
- }
25700
- const ts = Math.floor(date.getTime() / 1000);
25701
- return Number.isFinite(ts) ? ts : null;
25702
- }
25703
-
25704
- /**
25705
- * Builds a `Set<number>` of seconds-since-epoch timestamps covering both the
25706
- * legacy `disabledDays` (already-numeric) array and the ISO `blackoutDates`
25707
- * array. Use this for O(1) membership checks in hot paths.
25708
- *
25709
- * @param {Array<string|number>|undefined} disabledDays - Legacy timestamp array.
25710
- * @param {Array<string>|undefined} blackoutDates - ISO `YYYY-MM-DD` array.
25711
- * @returns {Set<number>}
25712
- */
25713
- function buildBlackoutSet(disabledDays, blackoutDates) {
25714
- const set = new Set();
25715
- if (Array.isArray(disabledDays)) {
25716
- for (const day of disabledDays) {
25717
- const ts = parseInt(day, 10);
25718
- if (Number.isFinite(ts)) {
25719
- set.add(ts);
25720
- }
25721
- }
25722
- }
25723
- if (Array.isArray(blackoutDates)) {
25724
- for (const isoStr of blackoutDates) {
25725
- const ts = parseIsoToTimestamp(isoStr);
25726
- if (ts !== null) {
25727
- set.add(ts);
25728
- }
25729
- }
25730
- }
25731
- return set;
25732
- }
25733
-
25734
- /**
25735
- * One-shot membership test for a single timestamp against both blackout
25736
- * sources. Allocates a Set on each call; only use this in cold paths
25737
- * (e.g. the pre-`firstUpdated` cell fallback). Hot paths should hold the
25738
- * Set returned from `buildBlackoutSet` and `.has(ts)` directly.
25739
- *
25740
- * @param {number} dateTs - Unix timestamp (seconds) to test.
25741
- * @param {Array<string|number>|undefined} disabledDays - Legacy timestamp array.
25742
- * @param {Array<string>|undefined} blackoutDates - ISO `YYYY-MM-DD` array.
25743
- * @returns {boolean}
25744
- */
25745
- function isBlackoutTimestamp(dateTs, disabledDays, blackoutDates) {
25746
- return buildBlackoutSet(disabledDays, blackoutDates).has(dateTs);
25747
- }
25748
-
25749
25653
  /* 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 */
25750
25654
 
25655
+ const startOfDay$1 = (ms) => {
25656
+ const date = new Date(ms);
25657
+ date.setHours(0, 0, 0, 0);
25658
+ return date.getTime();
25659
+ };
25660
+
25751
25661
  class AuroCalendarCell extends i$3 {
25752
25662
  constructor() {
25753
25663
  super();
@@ -25794,14 +25704,6 @@ class AuroCalendarCell extends i$3 {
25794
25704
  type: Boolean,
25795
25705
  reflect: true
25796
25706
  },
25797
- /**
25798
- * @deprecated Propagated from the legacy `auro-calendar.disabledDays`
25799
- * Unix-timestamp array. The cell honors it for backward compatibility
25800
- * (see the divergence-check fallback inside `isBlackout`), but
25801
- * consumers should migrate to `auro-datepicker.blackoutDates`
25802
- * (YYYY-MM-DD ISO strings). The calendar emits a one-time
25803
- * deprecation warning the first time a non-empty value is observed.
25804
- */
25805
25707
  disabledDays: { type: Array },
25806
25708
  isCurrentDate: { type: Boolean },
25807
25709
  locale: { type: String },
@@ -25847,8 +25749,8 @@ class AuroCalendarCell extends i$3 {
25847
25749
  const parsedDateTo = parseInt(dateTo, 10);
25848
25750
 
25849
25751
  if (day) {
25850
- const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
25851
- const returnTimestamp = new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000;
25752
+ const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
25753
+ const returnTimestamp = startOfDay$1(parsedDateTo * 1000) / 1000;
25852
25754
 
25853
25755
  if (day.date === departTimestamp || day.date === returnTimestamp) {
25854
25756
  this.selected = true;
@@ -25932,33 +25834,27 @@ class AuroCalendarCell extends i$3 {
25932
25834
  return false;
25933
25835
  }
25934
25836
 
25935
- // Delegate to the calendar's memoized blackout Set for O(1) lookup
25936
- // (instead of rescanning disabledDays + blackoutDates per render). The
25937
- // Set is rebuilt only when either source array reference changes — see
25938
- // auro-calendar.js#_getBlackoutSet.
25939
- if (this.calendar && typeof this.calendar._getBlackoutSet === 'function') {
25940
- if (this.calendar._getBlackoutSet().has(this.day.date)) {
25837
+ // Check against disabledDays timestamps (legacy path)
25838
+ if (Array.isArray(this.disabledDays) && this.disabledDays.length > 0 &&
25839
+ (this.disabledDays.findIndex(dd => parseInt(dd, 10) === this.day.date) !== -1)) {
25840
+ return true;
25841
+ }
25842
+
25843
+ // Check against blackoutDates (ISO format YYYY-MM-DD) on the datepicker
25844
+ const blackoutDates = this.datepicker?.blackoutDates;
25845
+
25846
+ if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
25847
+ const date = new Date(this.day.date * 1000);
25848
+ const yyyy = date.getFullYear();
25849
+ const mm = String(date.getMonth() + 1).padStart(2, '0');
25850
+ const dd = String(date.getDate()).padStart(2, '0');
25851
+ const cellDate = `${yyyy}-${mm}-${dd}`;
25852
+ if (blackoutDates.includes(cellDate)) {
25941
25853
  return true;
25942
25854
  }
25943
- // If the cell's local disabledDays diverged from the calendar's (a
25944
- // consumer or test mutated cell.disabledDays directly), the Set does
25945
- // not reflect that addition — fall through to the per-cell scan only
25946
- // when the reference no longer matches. Production data flow keeps
25947
- // these identical, so this branch stays cold. Guarded with
25948
- // Array.isArray to match `_getBlackoutSet`'s contract: non-array
25949
- // values are treated as empty rather than crashing on `.findIndex`.
25950
- if (Array.isArray(this.disabledDays) && this.disabledDays !== this.calendar.disabledDays && this.disabledDays.length > 0) {
25951
- if (this.disabledDays.findIndex((dd) => parseInt(dd, 10) === this.day.date) !== -1) {
25952
- return true;
25953
- }
25954
- }
25955
- return false;
25956
25855
  }
25957
25856
 
25958
- // Pre-firstUpdated fallback — the cell may render once before the
25959
- // ancestor calendar is wired up. Routes through the shared
25960
- // blackoutUtils helper so the parsing rules stay in one place.
25961
- return isBlackoutTimestamp(this.day.date, this.disabledDays, this.datepicker?.blackoutDates);
25857
+ return false;
25962
25858
  }
25963
25859
 
25964
25860
  /**
@@ -26064,12 +25960,12 @@ class AuroCalendarCell extends i$3 {
26064
25960
  const parsedDateFrom = Number.parseInt(this.dateFrom, 10);
26065
25961
  if (!Number.isFinite(parsedDateFrom)) return null;
26066
25962
 
26067
- const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
25963
+ const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
26068
25964
  const dayDate = this.day.date;
26069
25965
 
26070
25966
  const parsedDateTo = Number.parseInt(this.dateTo, 10);
26071
25967
  const hasDateTo = Number.isFinite(parsedDateTo);
26072
- const returnTimestamp = hasDateTo ? new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000 : null;
25968
+ const returnTimestamp = hasDateTo ? startOfDay$1(parsedDateTo * 1000) / 1000 : null;
26073
25969
 
26074
25970
  if (dayDate === departTimestamp) return this.datepicker.rangeLabelStart || 'range start';
26075
25971
 
@@ -26079,9 +25975,7 @@ class AuroCalendarCell extends i$3 {
26079
25975
 
26080
25976
  if (hasDateTo && dayDate > departTimestamp && dayDate < returnTimestamp) return this.datepicker.rangeLabelInRange || 'in range';
26081
25977
 
26082
- if (!hasDateTo && dayDate > departTimestamp) return this.datepicker.rangeLabelEndPreview || 'previewing range end';
26083
-
26084
- // After end date when both dateFrom and dateTo are set.
25978
+ // After start date, no end date yet, or after end date
26085
25979
  return this.datepicker.rangeLabelAfterRange || 'after range';
26086
25980
  }
26087
25981
 
@@ -26094,7 +25988,7 @@ class AuroCalendarCell extends i$3 {
26094
25988
  */
26095
25989
  isDepartDate(day, dateFrom) {
26096
25990
  const parsedDateFrom = parseInt(dateFrom, 10);
26097
- const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
25991
+ const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
26098
25992
 
26099
25993
  return this.selected && day.date === departTimestamp;
26100
25994
  }
@@ -26109,7 +26003,7 @@ class AuroCalendarCell extends i$3 {
26109
26003
  */
26110
26004
  isReturnDate(day, dateFrom, dateTo) {
26111
26005
  const parsedDateTo = parseInt(dateTo, 10);
26112
- const returnTimestamp = new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000;
26006
+ const returnTimestamp = startOfDay$1(parsedDateTo * 1000) / 1000;
26113
26007
 
26114
26008
  return this.selected && day.date === returnTimestamp && dateFrom;
26115
26009
  }
@@ -26273,7 +26167,6 @@ class AuroCalendarCell extends i$3 {
26273
26167
  setTimeout(() => this.firstUpdated(), 0);
26274
26168
  return;
26275
26169
  }
26276
- this.calendar = calendar;
26277
26170
  this.datepicker = calendar.datepicker;
26278
26171
  this._slotContentHandler = () => {
26279
26172
  this.handleSlotContent();
@@ -26331,13 +26224,12 @@ class AuroCalendarCell extends i$3 {
26331
26224
  this._cachedButton = this.shadowRoot.querySelector('button.day');
26332
26225
  });
26333
26226
 
26334
- // Keep the host's gridcell aria attributes in sync with the day data.
26227
+ // Update host-level aria attributes for ariaActiveDescendantElement.
26335
26228
  this.updateHostAria();
26336
26229
  }
26337
26230
 
26338
26231
  // Update host aria when selection changes (aria-selected, range labels)
26339
- // or when isCurrentDate flips (aria-current).
26340
- if (properties.has('dateFrom') || properties.has('dateTo') || properties.has('selected') || properties.has('isCurrentDate')) {
26232
+ if (properties.has('dateFrom') || properties.has('dateTo') || properties.has('selected')) {
26341
26233
  this.updateHostAria();
26342
26234
  }
26343
26235
 
@@ -26348,8 +26240,8 @@ class AuroCalendarCell extends i$3 {
26348
26240
  }
26349
26241
 
26350
26242
  /**
26351
- * Sets host-level ARIA so each cell exposes its date, selection state,
26352
- * and blackout status to assistive tech browsing the month grid.
26243
+ * Updates ARIA attributes on the host element so that
26244
+ * ariaActiveDescendantElement can expose cell info to the SR.
26353
26245
  * @private
26354
26246
  * @returns {void}
26355
26247
  */
@@ -26358,27 +26250,16 @@ class AuroCalendarCell extends i$3 {
26358
26250
 
26359
26251
  const outOfRange = this.isOutOfRange(this.day, this.min, this.max);
26360
26252
  if (outOfRange) {
26361
- // Strip every aria attribute the in-range branch may have set on a
26362
- // previous render — if a cell flips from in-range to out-of-range
26363
- // (calendar shifts months, minDate/maxDate change, etc.).
26364
26253
  this.removeAttribute('role');
26365
26254
  this.removeAttribute('aria-label');
26366
- this.removeAttribute('aria-current');
26367
- this.removeAttribute('aria-selected');
26368
- this.removeAttribute('aria-disabled');
26369
26255
  return;
26370
26256
  }
26371
26257
 
26258
+ // The host acts as the gridcell for ariaActiveDescendantElement.
26372
26259
  this.setAttribute('role', 'gridcell');
26373
26260
  this.setAttribute('aria-label', this.getAriaLabel());
26374
26261
  this.setAttribute('aria-selected', this.selected ? 'true' : 'false');
26375
26262
 
26376
- if (this.isCurrentDate) {
26377
- this.setAttribute('aria-current', 'date');
26378
- } else {
26379
- this.removeAttribute('aria-current');
26380
- }
26381
-
26382
26263
  if (this.isBlackout()) {
26383
26264
  this.setAttribute('aria-disabled', 'true');
26384
26265
  } else {
@@ -26393,7 +26274,7 @@ class AuroCalendarCell extends i$3 {
26393
26274
  * @returns {void}
26394
26275
  */
26395
26276
  focusButton() {
26396
- const button = this._cachedButton || this.shadowRoot.querySelector('button:not([disabled])');
26277
+ const button = this._cachedButton || this.shadowRoot.querySelector('button:not([aria-hidden])');
26397
26278
  if (button) {
26398
26279
  button.focus({ focusVisible: true });
26399
26280
  }
@@ -26401,9 +26282,7 @@ class AuroCalendarCell extends i$3 {
26401
26282
 
26402
26283
  /**
26403
26284
  * Imperatively marks this cell as active without triggering a Lit re-render.
26404
- * Buttons stay tabindex="-1" because DOM focus stays on the grid wrapper
26405
- * arrow keys move the active cell imperatively and the live region carries
26406
- * the SR announcement.
26285
+ * Note: buttons stay tabindex="-1" because the grid uses aria-activedescendant.
26407
26286
  * @returns {void}
26408
26287
  */
26409
26288
  setActive() {
@@ -26445,13 +26324,10 @@ class AuroCalendarCell extends i$3 {
26445
26324
  if (!btn || !this.day) return;
26446
26325
 
26447
26326
  const dayDate = this.day.date;
26448
- const departTimestamp = new Date(dateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
26327
+ const departTimestamp = startOfDay$1(dateFrom * 1000) / 1000;
26449
26328
  const isInRange = dayDate > departTimestamp && dayDate < hoveredDate;
26450
- // `>=` so hovering the depart cell itself (a same-day round-trip
26451
- // preview) still surfaces a visual cue: the depart cell receives both
26452
- // rangeDepartDate and lastHoveredDate.
26453
- const isLastHovered = dayDate === hoveredDate && hoveredDate >= departTimestamp;
26454
- const isDepartWithPreview = dayDate === departTimestamp && hoveredDate >= departTimestamp;
26329
+ const isLastHovered = dayDate === hoveredDate && hoveredDate > departTimestamp;
26330
+ const isDepartWithPreview = dayDate === departTimestamp && hoveredDate > departTimestamp;
26455
26331
 
26456
26332
  btn.classList.toggle('inRange', isInRange);
26457
26333
  btn.classList.toggle('lastHoveredDate', isLastHovered);
@@ -26509,6 +26385,7 @@ class AuroCalendarCell extends i$3 {
26509
26385
  @focus="${outOfRange ? undefined : this.handleFocus}"
26510
26386
  class="${e$2(buttonClasses)}"
26511
26387
  ?disabled="${outOfRange}"
26388
+ aria-hidden="${outOfRange ? 'true' : A$7}"
26512
26389
  tabindex="-1">
26513
26390
  <div class="buttonWrapper" aria-hidden="true">
26514
26391
  <div class="currentDayMarker">${this.day?.title || A$7}</div>
@@ -27614,7 +27491,7 @@ let AuroBibtemplate$3 = class AuroBibtemplate extends i$3 {
27614
27491
  }
27615
27492
  };
27616
27493
 
27617
- var formkitVersion$2$1 = '202606252132';
27494
+ var formkitVersion$2$1 = '202606252142';
27618
27495
 
27619
27496
  let l$1$2 = 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$2`${s$3(r)}`;return customElements.get(r)||customElements.define(r,class extends a{}),i}};let d$1$2 = class d{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}getSlotText(t,e){const o=t.shadowRoot?.querySelector(`slot[name="${e}"]`),s=(o?.assignedNodes({flatten:true})||[]).map(t=>t.textContent?.trim()).join(" ").trim();return s||null}};let h$1$2 = class h{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}};var c$1$3=i$6`: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}
27620
27497
  `,u$4$2=i$6`.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}}
@@ -27737,11 +27614,7 @@ class AuroCalendar extends RangeDatepicker {
27737
27614
  this.calendarRangeMonths = null;
27738
27615
 
27739
27616
  /**
27740
- * @deprecated Use `auro-datepicker.blackoutDates` (an array of
27741
- * `YYYY-MM-DD` ISO strings) instead. This legacy array of Unix
27742
- * timestamps is still honored for backward compatibility but emits a
27743
- * one-time `console.debug` the first time a non-empty value is observed.
27744
- * Support will be removed in a future major release.
27617
+ * Legacy array of disabled-date timestamps.
27745
27618
  * @private
27746
27619
  */
27747
27620
  this.disabledDays = [];
@@ -27998,44 +27871,17 @@ class AuroCalendar extends RangeDatepicker {
27998
27871
  * @returns {void}
27999
27872
  */
28000
27873
  updateActiveCellForVisibleMonth() {
28001
- this._afterMonthRender(() => {
28002
- const newDate = this.computeActiveDate({ skipDateFrom: true });
28003
-
28004
- if (newDate !== null && newDate !== undefined) {
28005
- this.activeCellDate = newDate;
28006
- this.setActiveCell(this.activeCellDate);
28007
- }
28008
- });
28009
- }
28010
-
28011
- /**
28012
- * Schedules `callback` two animation frames out, giving the child
28013
- * `auro-formkit-calendar-month` and `auro-formkit-calendar-cell` elements
28014
- * a full render-and-paint cycle to settle before the callback reads or
28015
- * mutates DOM.
28016
- *
28017
- * Why two frames, not one:
28018
- * 1. Lit batches property updates and renders in a microtask, so frame N
28019
- * schedules the render but the new DOM may not be painted yet.
28020
- * 2. Cells re-cache `_cachedButton` inside their own `updateComplete.then`,
28021
- * which also lands a tick later. Reading buttons from frame N+1
28022
- * (after both renders + cache refresh have flushed) reliably hits the
28023
- * new month's cells.
28024
- *
28025
- * Used by every code path that calls `handleNextMonth`/`handlePrevMonth`
28026
- * and then needs to inspect the freshly-rendered cells (cross-month
28027
- * keyboard nav, boundary events, `updateActiveCellForVisibleMonth`).
28028
- * Do NOT collapse to a single rAF — it intermittently lands before
28029
- * `_cachedButton` is refreshed, which silently breaks focus restoration
28030
- * and `setActiveCell` lookups.
28031
- * @private
28032
- * @param {() => void} callback - Runs once after the month re-render and
28033
- * the cells' button caches have refreshed.
28034
- * @returns {void}
28035
- */
28036
- _afterMonthRender(callback) {
27874
+ // Use double-rAF to ensure child month/cell components have fully
27875
+ // rendered and cached their button references before we set tabindex.
28037
27876
  requestAnimationFrame(() => {
28038
- requestAnimationFrame(callback);
27877
+ requestAnimationFrame(() => {
27878
+ const newDate = this.computeActiveDate({ skipDateFrom: true });
27879
+
27880
+ if (newDate !== null && newDate !== undefined) {
27881
+ this.activeCellDate = newDate;
27882
+ this.setActiveCell(this.activeCellDate);
27883
+ }
27884
+ });
28039
27885
  });
28040
27886
  }
28041
27887
 
@@ -28153,47 +27999,6 @@ class AuroCalendar extends RangeDatepicker {
28153
27999
  return Array.from(this.shadowRoot.querySelectorAll('auro-formkit-calendar-month'));
28154
28000
  }
28155
28001
 
28156
- /**
28157
- * Picks the focusable cell whose date is closest to targetTs. Used as a
28158
- * fallback after a month-boundary nav when the exact target date isn't
28159
- * focusable — typically because the month re-render lagged or the date
28160
- * was filtered out by isOutOfRange. When two cells are equidistant, the
28161
- * navigation direction breaks the tie so the user moves the way they
28162
- * pressed (forward → later cell, backward → earlier cell).
28163
- * @private
28164
- * @param {Array} cells - Focusable cells from getAllFocusableCells.
28165
- * @param {Number} targetTs - Desired Unix timestamp (seconds).
28166
- * @param {'next'|'prev'} direction - Navigation direction.
28167
- * @returns {Object|null} The nearest cell, or null when cells is empty.
28168
- */
28169
- pickNearestCell(cells, targetTs, direction) {
28170
- if (!cells.length) {
28171
- return null;
28172
- }
28173
- const forward = direction === 'next';
28174
- let best = null;
28175
- let bestDelta = Infinity;
28176
- cells.forEach((cell) => {
28177
- if (!cell.day) {
28178
- return;
28179
- }
28180
- const distance = Math.abs(cell.day.date - targetTs);
28181
- if (distance < bestDelta) {
28182
- best = cell;
28183
- bestDelta = distance;
28184
- return;
28185
- }
28186
- if (distance === bestDelta && best) {
28187
- if (forward && cell.day.date > best.day.date) {
28188
- best = cell;
28189
- } else if (!forward && cell.day.date < best.day.date) {
28190
- best = cell;
28191
- }
28192
- }
28193
- });
28194
- return best;
28195
- }
28196
-
28197
28002
  /**
28198
28003
  * Gets all focusable cells across all rendered months.
28199
28004
  * @private
@@ -28210,9 +28015,9 @@ class AuroCalendar extends RangeDatepicker {
28210
28015
 
28211
28016
  /**
28212
28017
  * Sets the active cell across all months. Only one cell has tabindex="0" at a time.
28213
- * Uses imperative DOM manipulation — no Lit re-render triggered. DOM focus
28214
- * stays on the grid wrapper; the live region (see getOrCreateLiveRegion)
28215
- * is what announces the active cell to assistive tech.
28018
+ * Uses imperative DOM manipulation — no Lit re-render triggered.
28019
+ * Also updates ariaActiveDescendantElement on the grid wrapper so
28020
+ * screen readers announce the active cell without moving DOM focus.
28216
28021
  * @param {Number} date - Unix timestamp of the cell to activate.
28217
28022
  * @returns {void}
28218
28023
  */
@@ -28293,65 +28098,6 @@ class AuroCalendar extends RangeDatepicker {
28293
28098
  this.clearRangePreview();
28294
28099
  }
28295
28100
 
28296
- /**
28297
- * Returns a memoized Set of blackout timestamps (seconds) drawn from both
28298
- * the legacy `disabledDays` array and the datepicker's ISO `blackoutDates`.
28299
- * The cache invalidates when either source array's reference changes, which
28300
- * matches Lit's own reactive identity semantics for array properties.
28301
- * @private
28302
- * @returns {Set<Number>}
28303
- */
28304
- _getBlackoutSet() {
28305
- // Normalize non-array values to a stable `null` sentinel rather than a
28306
- // fresh `[]` per call — otherwise the reference-identity cache key
28307
- // (`_cachedBlackoutDisabledDays === disabledDays`) never matches on
28308
- // subsequent calls and the Set rebuilds every time. `buildBlackoutSet`
28309
- // already treats null/non-array as "no legacy disabledDays" via its
28310
- // own Array.isArray gate.
28311
- const disabledDays = Array.isArray(this.disabledDays) ? this.disabledDays : null;
28312
- const blackoutDates = this.datepicker?.blackoutDates;
28313
- if (this._blackoutSet &&
28314
- this._cachedBlackoutDisabledDays === disabledDays &&
28315
- this._cachedBlackoutDates === blackoutDates) {
28316
- return this._blackoutSet;
28317
- }
28318
-
28319
- if (disabledDays && disabledDays.length > 0) {
28320
- this._warnDisabledDaysDeprecated();
28321
- }
28322
-
28323
- this._blackoutSet = buildBlackoutSet(disabledDays, blackoutDates);
28324
- this._cachedBlackoutDisabledDays = disabledDays;
28325
- this._cachedBlackoutDates = blackoutDates;
28326
- return this._blackoutSet;
28327
- }
28328
-
28329
- /**
28330
- * Per-class flag that gates the `disabledDays` deprecation warning so it
28331
- * fires exactly once per page no matter how many calendars or rebuild
28332
- * cycles encounter the legacy array.
28333
- * @private
28334
- */
28335
- static _warnedDisabledDaysDeprecation = false;
28336
-
28337
- /**
28338
- * One-time `console.debug` directing consumers from the legacy
28339
- * `disabledDays` Unix-timestamp API to the ISO `blackoutDates` API. Fires
28340
- * the first time `_getBlackoutSet` rebuilds from a non-empty
28341
- * `disabledDays`; subsequent calls (on this or any other AuroCalendar
28342
- * instance on the page) are silent.
28343
- * @private
28344
- * @returns {void}
28345
- */
28346
- _warnDisabledDaysDeprecated() {
28347
- if (AuroCalendar._warnedDisabledDaysDeprecation) {
28348
- return;
28349
- }
28350
- AuroCalendar._warnedDisabledDaysDeprecation = true;
28351
- // eslint-disable-next-line no-console
28352
- 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.');
28353
- }
28354
-
28355
28101
  /**
28356
28102
  * Computes the initial active date from data properties alone — no DOM required.
28357
28103
  * Priority:
@@ -28396,10 +28142,21 @@ class AuroCalendar extends RangeDatepicker {
28396
28142
  const minTs = Number.isFinite(rawMin) ? rawMin : -Infinity;
28397
28143
  const maxTs = Number.isFinite(rawMax) ? rawMax : Infinity;
28398
28144
 
28399
- // Build a Set of blackout timestamps for O(1) lookup. Memoized by the
28400
- // identity of the source arrays so rapid month nav doesn't rebuild the
28401
- // Set (and re-parse every ISO string) on every keypress.
28402
- const blackoutSet = this._getBlackoutSet();
28145
+ // Build a Set of blackout timestamps for O(1) lookup.
28146
+ const blackoutSet = new Set(this.disabledDays.map((day) => parseInt(day, 10)));
28147
+
28148
+ // Also include ISO-format blackoutDates from the datepicker if available.
28149
+ // Parse YYYY-MM-DD as local date to avoid UTC shift issues.
28150
+ const isoBlackouts = this.datepicker?.blackoutDates;
28151
+ if (Array.isArray(isoBlackouts)) {
28152
+ for (const isoStr of isoBlackouts) {
28153
+ const parts = isoStr.split('-');
28154
+ const ts = Math.floor(new Date(parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10)).getTime() / 1000);
28155
+ if (Number.isFinite(ts)) {
28156
+ blackoutSet.add(ts);
28157
+ }
28158
+ }
28159
+ }
28403
28160
 
28404
28161
  /**
28405
28162
  * A date (unix timestamp in seconds, midnight-aligned) is "enabled" when
@@ -28595,8 +28352,8 @@ class AuroCalendar extends RangeDatepicker {
28595
28352
 
28596
28353
  /**
28597
28354
  * Handles arrow key navigation on the calendar grid wrapper.
28598
- * Focus stays on the grid wrapper; only the visual active-cell indicator
28599
- * changes. The live region announces the new active cell.
28355
+ * Focus stays on the grid wrapper; only ariaActiveDescendantElement
28356
+ * and the visual active-cell indicator change.
28600
28357
  * @private
28601
28358
  * @param {KeyboardEvent} event - The keyboard event.
28602
28359
  * @returns {void}
@@ -28661,21 +28418,21 @@ class AuroCalendar extends RangeDatepicker {
28661
28418
  } else {
28662
28419
  this.handlePrevMonth({ skipActiveUpdate: true });
28663
28420
  }
28664
- this._afterMonthRender(() => {
28665
- const cells = this.getAllFocusableCells();
28666
- const target = cells.find((cell) => cell.day && cell.day.date === targetTs);
28667
- if (target) {
28668
- this.setActiveCell(target.day.date);
28669
- this.handleCellFocused({ detail: { date: target.day.date } });
28670
- } else {
28671
- const fallback = this.pickNearestCell(cells, targetTs, navDir);
28672
- if (fallback) {
28421
+ requestAnimationFrame(() => {
28422
+ requestAnimationFrame(() => {
28423
+ const cells = this.getAllFocusableCells();
28424
+ const target = cells.find((cell) => cell.day && cell.day.date === targetTs);
28425
+ if (target) {
28426
+ this.setActiveCell(target.day.date);
28427
+ this.handleCellFocused({ detail: { date: target.day.date } });
28428
+ } else if (cells.length > 0) {
28429
+ const fallback = navDir === 'next' ? cells[cells.length - 1] : cells[0];
28673
28430
  this.setActiveCell(fallback.day.date);
28674
28431
  this.handleCellFocused({ detail: { date: fallback.day.date } });
28675
28432
  }
28676
- }
28677
- // Re-focus grid wrapper after month change re-render
28678
- this.focusActiveCell();
28433
+ // Re-focus grid wrapper after month change re-render
28434
+ this.focusActiveCell();
28435
+ });
28679
28436
  });
28680
28437
  }
28681
28438
  }
@@ -28701,20 +28458,26 @@ class AuroCalendar extends RangeDatepicker {
28701
28458
  } else {
28702
28459
  this.handlePrevMonth({ skipActiveUpdate: true });
28703
28460
  }
28704
- this._afterMonthRender(() => {
28705
- const cells = this.getAllFocusableCells();
28706
- const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
28707
- if (target) {
28708
- this.setActiveCell(target.day.date);
28709
- this.handleCellFocused({ detail: { date: target.day.date } });
28710
- } else {
28711
- const nearest = this.pickNearestCell(cells, targetDate, navDirection);
28712
- if (nearest) {
28461
+ requestAnimationFrame(() => {
28462
+ requestAnimationFrame(() => {
28463
+ const cells = this.getAllFocusableCells();
28464
+ const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
28465
+ if (target) {
28466
+ this.setActiveCell(target.day.date);
28467
+ this.handleCellFocused({ detail: { date: target.day.date } });
28468
+ } else if (cells.length > 0) {
28469
+ let nearest = null;
28470
+
28471
+ if (navDirection === 'next') {
28472
+ [nearest] = cells;
28473
+ } else {
28474
+ nearest = cells[cells.length - 1];
28475
+ }
28713
28476
  this.setActiveCell(nearest.day.date);
28714
28477
  this.handleCellFocused({ detail: { date: nearest.day.date } });
28715
28478
  }
28716
- }
28717
- this.focusActiveCell();
28479
+ this.focusActiveCell();
28480
+ });
28718
28481
  });
28719
28482
  }
28720
28483
  }
@@ -28764,17 +28527,19 @@ class AuroCalendar extends RangeDatepicker {
28764
28527
  }
28765
28528
 
28766
28529
  this.handleNextMonth({ skipActiveUpdate: true });
28767
- this._afterMonthRender(() => {
28768
- const cells = this.getAllFocusableCells();
28769
- const target = cells.find((cell) => cell.day && cell.day.date === nextTs);
28770
- if (target) {
28771
- this.setActiveCell(target.day.date);
28772
- this.focusActiveCell();
28773
- } else if (cells.length > 0) {
28774
- // Fallback: first cell of the last rendered month
28775
- this.setActiveCell(cells[cells.length - 1].day.date);
28776
- this.focusActiveCell();
28777
- }
28530
+ requestAnimationFrame(() => {
28531
+ requestAnimationFrame(() => {
28532
+ const cells = this.getAllFocusableCells();
28533
+ const target = cells.find((cell) => cell.day && cell.day.date === nextTs);
28534
+ if (target) {
28535
+ this.setActiveCell(target.day.date);
28536
+ this.focusActiveCell();
28537
+ } else if (cells.length > 0) {
28538
+ // Fallback: first cell of the last rendered month
28539
+ this.setActiveCell(cells[cells.length - 1].day.date);
28540
+ this.focusActiveCell();
28541
+ }
28542
+ });
28778
28543
  });
28779
28544
  } else if (direction === 'prev' && this.showPrevMonthBtn) {
28780
28545
  // Navigate to previous month and focus the computed previous date.
@@ -28788,17 +28553,19 @@ class AuroCalendar extends RangeDatepicker {
28788
28553
  }
28789
28554
 
28790
28555
  this.handlePrevMonth({ skipActiveUpdate: true });
28791
- this._afterMonthRender(() => {
28792
- const cells = this.getAllFocusableCells();
28793
- const target = cells.find((cell) => cell.day && cell.day.date === prevTs);
28794
- if (target) {
28795
- this.setActiveCell(target.day.date);
28796
- this.focusActiveCell();
28797
- } else if (cells.length > 0) {
28798
- // Fallback: last cell of the first rendered month
28799
- this.setActiveCell(cells[0].day.date);
28800
- this.focusActiveCell();
28801
- }
28556
+ requestAnimationFrame(() => {
28557
+ requestAnimationFrame(() => {
28558
+ const cells = this.getAllFocusableCells();
28559
+ const target = cells.find((cell) => cell.day && cell.day.date === prevTs);
28560
+ if (target) {
28561
+ this.setActiveCell(target.day.date);
28562
+ this.focusActiveCell();
28563
+ } else if (cells.length > 0) {
28564
+ // Fallback: last cell of the first rendered month
28565
+ this.setActiveCell(cells[0].day.date);
28566
+ this.focusActiveCell();
28567
+ }
28568
+ });
28802
28569
  });
28803
28570
  }
28804
28571
  } else if (key === 'ArrowDown' || key === 'ArrowUp') {
@@ -28826,18 +28593,20 @@ class AuroCalendar extends RangeDatepicker {
28826
28593
  } else {
28827
28594
  this.handlePrevMonth({ skipActiveUpdate: true });
28828
28595
  }
28829
- this._afterMonthRender(() => {
28830
- const cells = this.getAllFocusableCells();
28831
- const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
28832
- if (target) {
28833
- this.setActiveCell(target.day.date);
28834
- this.focusActiveCell();
28835
- } else if (cells.length > 0) {
28836
- // Clamp to nearest focusable cell
28837
- const nearest = navDirection === 'next' ? cells[0] : cells[cells.length - 1];
28838
- this.setActiveCell(nearest.day.date);
28839
- this.focusActiveCell();
28840
- }
28596
+ requestAnimationFrame(() => {
28597
+ requestAnimationFrame(() => {
28598
+ const cells = this.getAllFocusableCells();
28599
+ const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
28600
+ if (target) {
28601
+ this.setActiveCell(target.day.date);
28602
+ this.focusActiveCell();
28603
+ } else if (cells.length > 0) {
28604
+ // Clamp to nearest focusable cell
28605
+ const nearest = navDirection === 'next' ? cells[0] : cells[cells.length - 1];
28606
+ this.setActiveCell(nearest.day.date);
28607
+ this.focusActiveCell();
28608
+ }
28609
+ });
28841
28610
  });
28842
28611
  }
28843
28612
  }
@@ -28876,9 +28645,8 @@ class AuroCalendar extends RangeDatepicker {
28876
28645
  return;
28877
28646
  }
28878
28647
 
28879
- // DOM focus stays on the grid wrapper while arrow keys move the active
28880
- // cell, so cell buttons never receive native focus. The debounced live
28881
- // region carries the full-context announcement instead.
28648
+ // With aria-activedescendant, the button no longer receives native focus,
28649
+ // so we use the debounced live region for the full context announcement.
28882
28650
  const announcement = this.buildFocusAnnouncement(date);
28883
28651
  this.announceFocusDebounced(announcement);
28884
28652
 
@@ -28948,10 +28716,10 @@ class AuroCalendar extends RangeDatepicker {
28948
28716
  return null;
28949
28717
  }
28950
28718
 
28951
- const departTs = new Date(parsedFrom * 1000).setHours(0, 0, 0, 0) / 1000;
28719
+ const departTs = startOfDay$2(parsedFrom * 1000) / 1000;
28952
28720
  const parsedTo = Number.parseInt(this.dateTo, 10);
28953
28721
  const hasTo = Number.isFinite(parsedTo);
28954
- const returnTs = hasTo ? new Date(parsedTo * 1000).setHours(0, 0, 0, 0) / 1000 : null;
28722
+ const returnTs = hasTo ? startOfDay$2(parsedTo * 1000) / 1000 : null;
28955
28723
 
28956
28724
  if (date === departTs) {
28957
28725
  return this.datepicker.rangeLabelStart || 'range start';
@@ -28965,22 +28733,36 @@ class AuroCalendar extends RangeDatepicker {
28965
28733
  if (hasTo && date > departTs && date < returnTs) {
28966
28734
  return this.datepicker.rangeLabelInRange || 'in range';
28967
28735
  }
28968
- if (!hasTo && date > departTs) {
28969
- return this.datepicker.rangeLabelEndPreview || 'previewing range end';
28970
- }
28971
28736
  return this.datepicker.rangeLabelAfterRange || 'after range';
28972
28737
  }
28973
28738
 
28974
28739
  /**
28975
- * Checks whether a given date is a blackout date. Delegates to the
28976
- * memoized `_getBlackoutSet` so the YYYY-MM-DD parsing and the
28977
- * legacy/ISO merge rules live in exactly one place (see `blackoutUtils.js`).
28740
+ * Checks whether a given date is a blackout date.
28978
28741
  * @private
28979
28742
  * @param {Number} dateTs - Unix timestamp (seconds).
28980
28743
  * @returns {Boolean} True if the date is blacked out.
28981
28744
  */
28982
28745
  isDateBlackout(dateTs) {
28983
- return this._getBlackoutSet().has(dateTs);
28746
+ // Check legacy disabledDays.
28747
+ if (Array.isArray(this.disabledDays) && this.disabledDays.length > 0) {
28748
+ if (this.disabledDays.findIndex((day) => parseInt(day, 10) === dateTs) !== -1) {
28749
+ return true;
28750
+ }
28751
+ }
28752
+
28753
+ // Check ISO blackoutDates.
28754
+ const blackoutDates = this.datepicker?.blackoutDates;
28755
+ if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
28756
+ const date = new Date(dateTs * 1000);
28757
+ const yyyy = date.getFullYear();
28758
+ const mm = String(date.getMonth() + 1).padStart(2, '0');
28759
+ const dd = String(date.getDate()).padStart(2, '0');
28760
+ if (blackoutDates.includes(`${yyyy}-${mm}-${dd}`)) {
28761
+ return true;
28762
+ }
28763
+ }
28764
+
28765
+ return false;
28984
28766
  }
28985
28767
 
28986
28768
  /**
@@ -29147,34 +28929,9 @@ class AuroCalendar extends RangeDatepicker {
29147
28929
  // the last one.
29148
28930
  if (this._announceRafId) {
29149
28931
  cancelAnimationFrame(this._announceRafId);
29150
- this._announceRafId = null;
29151
28932
  }
29152
- this._deliverAnnouncement(dateStr, 0);
29153
- }
29154
-
29155
- /**
29156
- * Writes `dateStr` to the live region. If the dropdown's dialog hasn't
29157
- * mounted yet (so getOrCreateLiveRegion can't attach), retries on the
29158
- * next animation frame up to MAX_LIVE_REGION_RETRIES instead of silently
29159
- * dropping the announcement. The retry uses the same `_announceRafId`
29160
- * the double-rAF below uses, so a newer announceSelection call (or
29161
- * disconnectedCallback) cancels any in-flight retry.
29162
- * @private
29163
- * @param {String} dateStr - The localized date string to announce.
29164
- * @param {Number} attempts - Number of prior retry attempts.
29165
- * @returns {void}
29166
- */
29167
- _deliverAnnouncement(dateStr, attempts) {
29168
28933
  const liveRegion = this.getOrCreateLiveRegion();
29169
28934
  if (!liveRegion) {
29170
- const MAX_LIVE_REGION_RETRIES = 10;
29171
- if (attempts < MAX_LIVE_REGION_RETRIES) {
29172
- this._announceRafId = requestAnimationFrame(() => {
29173
- this._deliverAnnouncement(dateStr, attempts + 1);
29174
- });
29175
- } else {
29176
- this._announceRafId = null;
29177
- }
29178
28935
  return;
29179
28936
  }
29180
28937
 
@@ -29360,7 +29117,7 @@ class AuroCalendar extends RangeDatepicker {
29360
29117
  </button>
29361
29118
  ` : undefined}
29362
29119
  </div>
29363
- <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}">
29120
+ <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}">
29364
29121
  ${this.renderAllCalendars()}
29365
29122
  </div>
29366
29123
  </div>
@@ -33245,7 +33002,7 @@ let AuroHelpText$2$1 = class AuroHelpText extends i$3 {
33245
33002
  }
33246
33003
  };
33247
33004
 
33248
- var formkitVersion$1$3 = '202606252132';
33005
+ var formkitVersion$1$3 = '202606252142';
33249
33006
 
33250
33007
  let AuroElement$2$2 = class AuroElement extends i$3 {
33251
33008
  static get properties() {
@@ -34517,6 +34274,7 @@ let AuroDropdown$3 = class AuroDropdown extends AuroElement$2$2 {
34517
34274
  role="${o$4(this.triggerContentFocusable ? undefined : this.a11yRole)}"
34518
34275
  aria-expanded="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.isPopoverVisible)}"
34519
34276
  aria-controls="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.dropdownId)}"
34277
+ aria-haspopup="${o$4(this.a11yRole === 'combobox' ? 'listbox' : undefined)}"
34520
34278
  aria-labelledby="${o$4(this.triggerContentFocusable ? undefined : 'triggerLabel')}"
34521
34279
  aria-disabled="${o$4(this.disabled ? 'true' : undefined)}"
34522
34280
  @focusin="${this.handleFocusin}"
@@ -39642,7 +39400,7 @@ function normalizeDates$2(context, ...dates) {
39642
39400
  * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))
39643
39401
  * //=> Tue Sep 02 2014 00:00:00
39644
39402
  */
39645
- function startOfDay$2(date, options) {
39403
+ function startOfDay$3(date, options) {
39646
39404
  const _date = toDate$2(date, options?.in);
39647
39405
  _date.setHours(0, 0, 0, 0);
39648
39406
  return _date;
@@ -39690,8 +39448,8 @@ function differenceInCalendarDays$2(laterDate, earlierDate, options) {
39690
39448
  earlierDate,
39691
39449
  );
39692
39450
 
39693
- const laterStartOfDay = startOfDay$2(laterDate_);
39694
- const earlierStartOfDay = startOfDay$2(earlierDate_);
39451
+ const laterStartOfDay = startOfDay$3(laterDate_);
39452
+ const earlierStartOfDay = startOfDay$3(earlierDate_);
39695
39453
 
39696
39454
  const laterTimestamp =
39697
39455
  +laterStartOfDay - getTimezoneOffsetInMilliseconds$2(laterStartOfDay);
@@ -46838,7 +46596,7 @@ let AuroHelpText$1$3 = class AuroHelpText extends i$3 {
46838
46596
  }
46839
46597
  };
46840
46598
 
46841
- var formkitVersion$7 = '202606252132';
46599
+ var formkitVersion$7 = '202606252142';
46842
46600
 
46843
46601
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
46844
46602
  // See LICENSE in the project root for license information.
@@ -48315,7 +48073,6 @@ class AuroDatePicker extends AuroElement$5 {
48315
48073
  this.rangeLabelBeforeRange = 'before range';
48316
48074
  this.rangeLabelInRange = 'in range';
48317
48075
  this.rangeLabelAfterRange = 'after range';
48318
- this.rangeLabelEndPreview = 'previewing range end';
48319
48076
  this.blackoutDates = [];
48320
48077
  this.blackoutLabel = 'unavailable';
48321
48078
  this.navLabelPrevMonth = 'Previous month';
@@ -48415,22 +48172,6 @@ class AuroDatePicker extends AuroElement$5 {
48415
48172
  */
48416
48173
  this.handleClick = this.handleClick.bind(this);
48417
48174
 
48418
- /**
48419
- * Single AbortController shared by every listener registered in the
48420
- * configure* methods. Lets disconnectedCallback tear all of them down
48421
- * with one abort() call.
48422
- *
48423
- * The genuine leak risk is the listeners attached to children that can
48424
- * outlive the host if they get reparented — `this.dropdown`,
48425
- * `this.calendar`, and the inputs inside the dropdown's slot.
48426
- * Listeners attached to `this` (e.g. focusin/focusout on the host)
48427
- * form a self-contained reference graph that the GC can collect with
48428
- * the host anyway, but they share the same signal so the cleanup
48429
- * pattern stays uniform across all configure* sites.
48430
- * @private
48431
- */
48432
- this._listenerAbortController = new AbortController();
48433
-
48434
48175
  /**
48435
48176
  * @private
48436
48177
  */
@@ -48479,7 +48220,6 @@ class AuroDatePicker extends AuroElement$5 {
48479
48220
 
48480
48221
  /**
48481
48222
  * Label announced for blackout (disabled but in-range) date cells.
48482
- * @default 'unavailable'
48483
48223
  */
48484
48224
  blackoutLabel: {
48485
48225
  type: String,
@@ -48496,7 +48236,6 @@ class AuroDatePicker extends AuroElement$5 {
48496
48236
 
48497
48237
  /**
48498
48238
  * Accessible label for the calendar grid containing the days of the month.
48499
- * @default 'Calendar days of the month'
48500
48239
  */
48501
48240
  calendarGridLabel: {
48502
48241
  type: String,
@@ -48659,7 +48398,6 @@ class AuroDatePicker extends AuroElement$5 {
48659
48398
 
48660
48399
  /**
48661
48400
  * Accessible label for the next month navigation button.
48662
- * @default 'Next month'
48663
48401
  */
48664
48402
  navLabelNextMonth: {
48665
48403
  type: String,
@@ -48668,7 +48406,6 @@ class AuroDatePicker extends AuroElement$5 {
48668
48406
 
48669
48407
  /**
48670
48408
  * Accessible label for the previous month navigation button.
48671
- * @default 'Previous month'
48672
48409
  */
48673
48410
  navLabelPrevMonth: {
48674
48411
  type: String,
@@ -48746,11 +48483,7 @@ class AuroDatePicker extends AuroElement$5 {
48746
48483
  },
48747
48484
 
48748
48485
  /**
48749
- * Label announced for cells after a fully selected range (both
48750
- * `dateFrom` and `dateTo` are set). While a range is still being
48751
- * picked (`dateFrom` set, `dateTo` unset), focused cells past the
48752
- * start use `rangeLabelEndPreview` instead.
48753
- * @default 'after range'
48486
+ * Label announced for cells after the range (or after start when no end is selected).
48754
48487
  */
48755
48488
  rangeLabelAfterRange: {
48756
48489
  type: String,
@@ -48759,7 +48492,6 @@ class AuroDatePicker extends AuroElement$5 {
48759
48492
 
48760
48493
  /**
48761
48494
  * Label announced for cells before the range start.
48762
- * @default 'before range'
48763
48495
  */
48764
48496
  rangeLabelBeforeRange: {
48765
48497
  type: String,
@@ -48768,27 +48500,14 @@ class AuroDatePicker extends AuroElement$5 {
48768
48500
 
48769
48501
  /**
48770
48502
  * Label announced for the range end date cell.
48771
- * @default 'range end'
48772
48503
  */
48773
48504
  rangeLabelEnd: {
48774
48505
  type: String,
48775
48506
  reflect: true
48776
48507
  },
48777
48508
 
48778
- /**
48779
- * Label announced for the focused cell while previewing a range end
48780
- * (dateFrom set, dateTo not yet selected). Tells AT users that
48781
- * pressing Enter would commit this cell as the range end.
48782
- * @default 'previewing range end'
48783
- */
48784
- rangeLabelEndPreview: {
48785
- type: String,
48786
- reflect: true
48787
- },
48788
-
48789
48509
  /**
48790
48510
  * Label announced for cells within the selected range.
48791
- * @default 'in range'
48792
48511
  */
48793
48512
  rangeLabelInRange: {
48794
48513
  type: String,
@@ -48797,7 +48516,6 @@ class AuroDatePicker extends AuroElement$5 {
48797
48516
 
48798
48517
  /**
48799
48518
  * Label announced for the range start date cell.
48800
- * @default 'range start'
48801
48519
  */
48802
48520
  rangeLabelStart: {
48803
48521
  type: String,
@@ -48805,7 +48523,7 @@ class AuroDatePicker extends AuroElement$5 {
48805
48523
  },
48806
48524
 
48807
48525
  /**
48808
- * Dates that the user should have for reference as part of their decision-making when selecting a date.
48526
+ * Dates that the user should have for reference as part of their decision making when selecting a date.
48809
48527
  * This should be a JSON string array of ISO date strings (`YYYY-MM-DD`).
48810
48528
  */
48811
48529
  referenceDates: {
@@ -49162,26 +48880,10 @@ class AuroDatePicker extends AuroElement$5 {
49162
48880
  // ─── Vendor calendar time conversions ─────────────────────────────────────
49163
48881
 
49164
48882
  /**
49165
- * Converts a Unix timestamp (seconds) from the vendored range-datepicker
49166
- * (`src/vendor/wc-range-datepicker/day.js`) to an ISO date string.
49167
- *
49168
- * Timezone contract:
49169
- * - INPUT: `time` is assumed to be the seconds-since-epoch of **local
49170
- * midnight** for the intended calendar day. The vendor's Day constructor
49171
- * builds it via `date-fns format(date, 't')` from a locally-constructed
49172
- * Date, so this assumption currently holds end-to-end.
49173
- * - OUTPUT: `dateFormatter.toISOFormatString` reads the Date's local
49174
- * getFullYear/getMonth/getDate components, so the returned YYYY-MM-DD
49175
- * string matches the local calendar day.
49176
- *
49177
- * If the vendor ever switches to emitting UTC-midnight timestamps, this
49178
- * conversion will silently shift the returned date by one day in zones
49179
- * west of UTC. Any vendor swap should re-verify this contract; the TZ
49180
- * regression suite (`npm run test:hst`, UTC-10) will catch the symptom.
49181
- *
48883
+ * Converts a Unix timestamp (seconds) from the vendor calendar to an ISO date string.
49182
48884
  * @private
49183
- * @param {number} time - Unix timestamp (seconds), local midnight of the day.
49184
- * @returns {string} ISO date string (yyyy-mm-dd) reflecting the local calendar day.
48885
+ * @param {number} time - Unix timestamp in seconds.
48886
+ * @returns {string} ISO date string (yyyy-mm-dd).
49185
48887
  */
49186
48888
  convertWcTimeToDate(time) {
49187
48889
  return dateFormatter$1.toISOFormatString(new Date(time * 1000));
@@ -49283,8 +48985,8 @@ class AuroDatePicker extends AuroElement$5 {
49283
48985
  }
49284
48986
  }
49285
48987
 
49286
- // Focus the calendar grid wrapper. The live region (announced just
49287
- // below) handles the SR announcement for the active cell.
48988
+ // Focus the calendar grid wrapper (aria-activedescendant handles
48989
+ // the SR announcement for the active cell).
49288
48990
  if (activeCell) {
49289
48991
  this.calendar.focusActiveCell();
49290
48992
 
@@ -49334,13 +49036,11 @@ class AuroDatePicker extends AuroElement$5 {
49334
49036
  this.dropdown.bibDialogLabel = labelElement.textContent.trim() || undefined;
49335
49037
  }
49336
49038
 
49337
- const { signal } = this._listenerAbortController;
49338
-
49339
49039
  this.dropdown.addEventListener('auroDropdown-triggerClick', () => {
49340
49040
  if (!this.isPopoverVisible) {
49341
49041
  this.dropdown.show();
49342
49042
  }
49343
- }, { signal });
49043
+ });
49344
49044
 
49345
49045
  this.dropdown.addEventListener('auroDropdown-toggled', () => {
49346
49046
  this.notifyDatepickerToggled();
@@ -49358,7 +49058,7 @@ class AuroDatePicker extends AuroElement$5 {
49358
49058
  if (this.valueObject) {
49359
49059
  this.centralDate = this.value;
49360
49060
  } else if (!this.centralDate && !this.calendarStartDate && !this.minDate) {
49361
- this.centralDate = dateFormatter$1.toISOFormatString(new Date());
49061
+ this.centralDate = new Date();
49362
49062
  }
49363
49063
  }
49364
49064
 
@@ -49438,7 +49138,7 @@ class AuroDatePicker extends AuroElement$5 {
49438
49138
  this.forceScrollOnNextMobileCalendarRender = false;
49439
49139
  }, 0);
49440
49140
  }
49441
- }, { signal });
49141
+ });
49442
49142
 
49443
49143
  // Handle responsive strategy changes while the dropdown is open
49444
49144
  // (e.g. resizing from desktop → mobile or vice versa).
@@ -49485,7 +49185,7 @@ class AuroDatePicker extends AuroElement$5 {
49485
49185
  });
49486
49186
  });
49487
49187
  }
49488
- }, { signal });
49188
+ });
49489
49189
  }
49490
49190
 
49491
49191
  /**
@@ -49498,8 +49198,6 @@ class AuroDatePicker extends AuroElement$5 {
49498
49198
 
49499
49199
  this.inputList = [...this.dropdown.querySelectorAll(this.inputTag._$litStatic$)];
49500
49200
 
49501
- const { signal } = this._listenerAbortController;
49502
-
49503
49201
  this.inputList.forEach((input, index) => {
49504
49202
  input.addEventListener('input', (event) => {
49505
49203
  event.stopPropagation();
@@ -49511,7 +49209,7 @@ class AuroDatePicker extends AuroElement$5 {
49511
49209
  }
49512
49210
 
49513
49211
  this.notifyValueChanged();
49514
- }, { signal });
49212
+ });
49515
49213
 
49516
49214
  input.addEventListener('auroFormElement-validated', (evt) => {
49517
49215
  // not to bubble up input's validated event.
@@ -49527,7 +49225,7 @@ class AuroDatePicker extends AuroElement$5 {
49527
49225
  this.validity = evt.detail.validity;
49528
49226
  this.errorMessage = evt.detail.message;
49529
49227
  }
49530
- }, { signal });
49228
+ });
49531
49229
  });
49532
49230
  }
49533
49231
 
@@ -49541,32 +49239,19 @@ class AuroDatePicker extends AuroElement$5 {
49541
49239
  this.calendar.datepicker = this;
49542
49240
  this.calendar.dropdown = this.dropdown;
49543
49241
 
49544
- const { signal } = this._listenerAbortController;
49545
-
49546
49242
  this.calendar.addEventListener('auroCalendar-dateSelected', () => {
49547
- // Compare the input's ISO value against the *converted* calendar
49548
- // timestamp (the vendor's `dateFrom`/`dateTo` are Unix-seconds
49549
- // strings — comparing the input ISO directly against them would
49550
- // never match, so the write would fire on every event and emit
49551
- // redundant input/change activity).
49552
- if (this.calendar.dateFrom !== undefined) {
49553
- const fromIso = this.convertWcTimeToDate(this.calendar.dateFrom);
49554
- if (this.inputList[0].value !== fromIso) {
49555
- this.inputList[0].value = fromIso;
49556
- }
49243
+ if (this.inputList[0].value !== this.calendar.dateFrom && this.calendar.dateFrom !== undefined) {
49244
+ this.inputList[0].value = this.convertWcTimeToDate(this.calendar.dateFrom);
49557
49245
  }
49558
49246
 
49559
- if (this.inputList[1] && this.calendar.dateTo) {
49560
- const toIso = this.convertWcTimeToDate(this.calendar.dateTo);
49561
- if (this.inputList[1].value !== toIso) {
49562
- this.inputList[1].value = toIso;
49563
- }
49247
+ if (this.inputList[1] && this.calendar.dateTo && this.inputList[1].value !== this.calendar.dateTo) {
49248
+ this.inputList[1].value = this.convertWcTimeToDate(this.calendar.dateTo);
49564
49249
  }
49565
- }, { signal });
49250
+ });
49566
49251
 
49567
49252
  this.calendar.addEventListener('auroCalendar-dismissRequest', () => {
49568
49253
  this.dropdown.hide();
49569
- }, { signal });
49254
+ });
49570
49255
 
49571
49256
  this.calendar.addEventListener('auroCalendar-centralDateChanged', (event) => {
49572
49257
  const match = this.centralDateObject && this.util.datesMatch(event.detail.date, this.centralDateObject);
@@ -49576,7 +49261,7 @@ class AuroDatePicker extends AuroElement$5 {
49576
49261
  }
49577
49262
 
49578
49263
  this.notifyMonthChanged(event);
49579
- }, { signal });
49264
+ });
49580
49265
  }
49581
49266
 
49582
49267
  /**
@@ -49585,17 +49270,10 @@ class AuroDatePicker extends AuroElement$5 {
49585
49270
  * @returns {void}
49586
49271
  */
49587
49272
  configureDatepicker() {
49588
- // These listeners are on `this` (the host), so they would GC with the
49589
- // host even without the abort signal — see the leak rationale on
49590
- // `_listenerAbortController`. The signal is still passed for uniform
49591
- // cleanup semantics with the child-element listeners in the other
49592
- // configure* methods.
49593
- const { signal } = this._listenerAbortController;
49594
-
49595
49273
  this.addEventListener('focusin', () => {
49596
49274
  this.touched = true;
49597
49275
  this.hasFocus = true;
49598
- }, { signal });
49276
+ });
49599
49277
 
49600
49278
  this.addEventListener('focusout', () => {
49601
49279
  this.hasFocus = false;
@@ -49607,7 +49285,7 @@ class AuroDatePicker extends AuroElement$5 {
49607
49285
  if (!this.matches(':focus-within')) {
49608
49286
  this.validate();
49609
49287
  }
49610
- }, { signal });
49288
+ });
49611
49289
 
49612
49290
  if (this.valueObject) {
49613
49291
  this.calendar.dateFrom = this.convertToWcValidTime(this.valueObject);
@@ -49805,41 +49483,6 @@ class AuroDatePicker extends AuroElement$5 {
49805
49483
  return this.validity !== undefined && this.validity !== 'valid';
49806
49484
  }
49807
49485
 
49808
- /**
49809
- * Per-class dedup set used by `_warnInvalidLocale`. Static so the dedup
49810
- * spans every datepicker instance on the page; lives on the class (not
49811
- * at module scope) so it stays an encapsulated implementation detail of
49812
- * this component and does not interfere with WCA's class-JSDoc
49813
- * attachment.
49814
- * @private
49815
- */
49816
- static _warnedInvalidLocales = new Set();
49817
-
49818
- /**
49819
- * Logs a one-time `console.debug` when an unsupported locale falls back to
49820
- * en-US. Deduped by the offending tag so noisy re-renders that resurface
49821
- * the same bad value stay quiet, but each new bad value still signals so
49822
- * consumers can spot the typo or missing tag.
49823
- * @private
49824
- * @param {string|undefined} badLocale - The locale value that failed.
49825
- * @returns {void}
49826
- */
49827
- _warnInvalidLocale(badLocale) {
49828
- // Stringify without coalescing — `String(undefined)` / `String(null)`
49829
- // surface the actual offending value in the log, instead of the
49830
- // ambiguous `Locale ""` that `String(badLocale ?? '')` would produce.
49831
- // Dedup still works correctly because each unique stringification
49832
- // becomes its own Set entry.
49833
- const key = String(badLocale);
49834
- const seen = AuroDatePicker._warnedInvalidLocales;
49835
- if (seen.has(key)) {
49836
- return;
49837
- }
49838
- seen.add(key);
49839
- // eslint-disable-next-line no-console
49840
- 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".`);
49841
- }
49842
-
49843
49486
  /**
49844
49487
  * Lifecycle method to check if the locale is valid.
49845
49488
  * @ignore
@@ -49850,15 +49493,10 @@ class AuroDatePicker extends AuroElement$5 {
49850
49493
  if (changedProperties.has('locale')) {
49851
49494
  try {
49852
49495
  const supported = Intl.DateTimeFormat.supportedLocalesOf([this.locale], { localeMatcher: 'lookup' });
49853
- if (supported.length > 0) {
49854
- this._validLocale = this.locale;
49855
- } else {
49856
- this._validLocale = 'en-US';
49857
- this._warnInvalidLocale(this.locale);
49858
- }
49496
+ this._validLocale = supported.length > 0 ? this.locale : 'en-US';
49859
49497
  } catch {
49498
+ console.debug(`[AuroDatePicker] The locale "${this.locale}" is not valid. Falling back to "en-US".`); // eslint-disable-line no-console
49860
49499
  this._validLocale = 'en-US';
49861
- this._warnInvalidLocale(this.locale);
49862
49500
  }
49863
49501
 
49864
49502
  const previousLocaleFormat = getDateFormatFromLocale$1(changedProperties.get('locale'));
@@ -49940,6 +49578,8 @@ class AuroDatePicker extends AuroElement$5 {
49940
49578
  // Skip centralDate update when user clicked a cell in range mode
49941
49579
  // to prevent the displayed months from shifting
49942
49580
  this.centralDate = this.value;
49581
+ //TODO: TEST THIS CHANGE
49582
+ // this.calendarRenderUtil.updateCentralDate(this, this.value);
49943
49583
  }
49944
49584
 
49945
49585
  this.setHasValue();
@@ -49999,6 +49639,8 @@ class AuroDatePicker extends AuroElement$5 {
49999
49639
  // Skip centralDate update when user clicked a cell in range mode
50000
49640
  // to prevent the displayed months from shifting
50001
49641
  this.centralDate = this.valueEnd;
49642
+ // TODO: TEST THIS CHANGE
49643
+ // this.calendarRenderUtil.updateCentralDate(this, this.formattedValueEnd);
50002
49644
  }
50003
49645
 
50004
49646
  this.validate();
@@ -50140,7 +49782,7 @@ class AuroDatePicker extends AuroElement$5 {
50140
49782
  * @returns {void}
50141
49783
  */
50142
49784
  configureClickHandler() {
50143
- this.addEventListener('click', this.handleClick, { signal: this._listenerAbortController.signal });
49785
+ this.addEventListener('click', this.handleClick);
50144
49786
  }
50145
49787
 
50146
49788
  firstUpdated() {
@@ -50148,15 +49790,6 @@ class AuroDatePicker extends AuroElement$5 {
50148
49790
  // Add the tag name as an attribute if it is different than the component name
50149
49791
  this.runtimeUtils.handleComponentTagRename(this, 'auro-datepicker');
50150
49792
 
50151
- // If the element was disconnected before this first render finished,
50152
- // disconnectedCallback's microtask already aborted the controller. The
50153
- // connectedCallback reinit guard skips that case because `hasUpdated`
50154
- // is still false. Mint a fresh controller here so configure* registers
50155
- // listeners against a live signal.
50156
- if (this._listenerAbortController.signal.aborted) {
50157
- this._listenerAbortController = new AbortController();
50158
- }
50159
-
50160
49793
  this.configureDropdown();
50161
49794
  this.configureInput();
50162
49795
  this.configureCalendar();
@@ -50168,36 +49801,9 @@ class AuroDatePicker extends AuroElement$5 {
50168
49801
  connectedCallback() {
50169
49802
  super.connectedCallback();
50170
49803
 
50171
- // True reconnect after `disconnectedCallback` aborted our controller:
50172
- // the existing signal is dead, so listeners registered against it
50173
- // would never fire. Create a fresh controller and re-run the
50174
- // configure* wiring (each method is idempotent — it just re-caches
50175
- // child refs and re-registers listeners against the new signal).
50176
- // `hasUpdated` gates this so the *first* connect (which precedes
50177
- // firstUpdated) still falls through to firstUpdated's initial wiring.
50178
- if (this.hasUpdated && this._listenerAbortController.signal.aborted) {
50179
- this._listenerAbortController = new AbortController();
50180
- this.configureDropdown();
50181
- this.configureInput();
50182
- this.configureCalendar();
50183
- this.configureDatepicker();
50184
- this.configureClickHandler();
50185
- }
50186
-
50187
49804
  this.locale = this.domHandler.getLocale(this);
50188
49805
  }
50189
49806
 
50190
- disconnectedCallback() {
50191
- super.disconnectedCallback();
50192
- // Defer so that re-parenting (auro-drawer slotting it into a dialog,
50193
- // for example) does not abort listeners we still need after reconnect.
50194
- queueMicrotask(() => {
50195
- if (!this.isConnected) {
50196
- this._listenerAbortController.abort();
50197
- }
50198
- });
50199
- }
50200
-
50201
49807
  // layout render methods
50202
49808
  // ------------------------------------
50203
49809
 
@@ -51693,7 +51299,7 @@ let AuroHelpText$1$2 = class AuroHelpText extends i$3 {
51693
51299
  }
51694
51300
  };
51695
51301
 
51696
- var formkitVersion$1$2 = '202606252132';
51302
+ var formkitVersion$1$2 = '202606252142';
51697
51303
 
51698
51304
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
51699
51305
  // See LICENSE in the project root for license information.
@@ -56021,7 +55627,7 @@ let AuroHelpText$6 = class AuroHelpText extends i$3 {
56021
55627
  }
56022
55628
  };
56023
55629
 
56024
- var formkitVersion$6 = '202606252132';
55630
+ var formkitVersion$6 = '202606252142';
56025
55631
 
56026
55632
  let AuroElement$1$2 = class AuroElement extends i$3 {
56027
55633
  static get properties() {
@@ -57293,6 +56899,7 @@ let AuroDropdown$2 = class AuroDropdown extends AuroElement$1$2 {
57293
56899
  role="${o$4(this.triggerContentFocusable ? undefined : this.a11yRole)}"
57294
56900
  aria-expanded="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.isPopoverVisible)}"
57295
56901
  aria-controls="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.dropdownId)}"
56902
+ aria-haspopup="${o$4(this.a11yRole === 'combobox' ? 'listbox' : undefined)}"
57296
56903
  aria-labelledby="${o$4(this.triggerContentFocusable ? undefined : 'triggerLabel')}"
57297
56904
  aria-disabled="${o$4(this.disabled ? 'true' : undefined)}"
57298
56905
  @focusin="${this.handleFocusin}"
@@ -59961,7 +59568,7 @@ let AuroHelpText$5 = class AuroHelpText extends i$3 {
59961
59568
  }
59962
59569
  };
59963
59570
 
59964
- var formkitVersion$5 = '202606252132';
59571
+ var formkitVersion$5 = '202606252142';
59965
59572
 
59966
59573
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
59967
59574
  // See LICENSE in the project root for license information.
@@ -61711,7 +61318,7 @@ let AuroHelpText$4 = class AuroHelpText extends i$3 {
61711
61318
  }
61712
61319
  };
61713
61320
 
61714
- var formkitVersion$4 = '202606252132';
61321
+ var formkitVersion$4 = '202606252142';
61715
61322
 
61716
61323
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
61717
61324
  // See LICENSE in the project root for license information.
@@ -66926,7 +66533,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$3 {
66926
66533
  }
66927
66534
  };
66928
66535
 
66929
- var formkitVersion$2 = '202606252132';
66536
+ var formkitVersion$2 = '202606252142';
66930
66537
 
66931
66538
  let AuroElement$2$1 = class AuroElement extends i$3 {
66932
66539
  static get properties() {
@@ -68198,6 +67805,7 @@ let AuroDropdown$1 = class AuroDropdown extends AuroElement$2$1 {
68198
67805
  role="${o$4(this.triggerContentFocusable ? undefined : this.a11yRole)}"
68199
67806
  aria-expanded="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.isPopoverVisible)}"
68200
67807
  aria-controls="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.dropdownId)}"
67808
+ aria-haspopup="${o$4(this.a11yRole === 'combobox' ? 'listbox' : undefined)}"
68201
67809
  aria-labelledby="${o$4(this.triggerContentFocusable ? undefined : 'triggerLabel')}"
68202
67810
  aria-disabled="${o$4(this.disabled ? 'true' : undefined)}"
68203
67811
  @focusin="${this.handleFocusin}"
@@ -80519,7 +80127,7 @@ let AuroHelpText$1$1 = class AuroHelpText extends i$3 {
80519
80127
  }
80520
80128
  };
80521
80129
 
80522
- var formkitVersion$1$1 = '202606252132';
80130
+ var formkitVersion$1$1 = '202606252142';
80523
80131
 
80524
80132
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
80525
80133
  // See LICENSE in the project root for license information.
@@ -81640,7 +81248,7 @@ let AuroBibtemplate$1 = class AuroBibtemplate extends i$3 {
81640
81248
  }
81641
81249
  };
81642
81250
 
81643
- var formkitVersion$3 = '202606252132';
81251
+ var formkitVersion$3 = '202606252142';
81644
81252
 
81645
81253
  var styleCss$1$3 = i$6`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock{display:block}.util_displayFlex{display:flex}.util_displayHidden{display:none}.util_displayHiddenVisually{position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}:host{display:block;text-align:left}:host [auro-dropdown]{--ds-auro-dropdown-trigger-background-color: transparent}:host #inputInBib::part(wrapper){box-shadow:none}:host #inputInBib::part(accent-left){display:none}:host([layout*=classic]) [auro-input]{width:100%}:host([layout*=classic]) [auro-input]::part(helpText){display:none}:host([layout*=classic]) #slotHolder{display:none}`;
81646
81254
 
@@ -86453,19 +86061,24 @@ const selectKeyboardStrategy = {
86453
86061
  },
86454
86062
 
86455
86063
  End(component, evt, ctx) {
86456
- if (!ctx.isExpanded) {
86457
- return;
86458
- }
86459
86064
  evt.preventDefault();
86460
86065
  evt.stopPropagation();
86461
86066
  // `pop()` is safe here: getEnabledOptions returns a fresh filtered array.
86462
86067
  const lastOption = getEnabledOptions(component.menu).pop();
86463
- if (lastOption) {
86464
- component.menu.updateActiveOption(lastOption);
86068
+ if (!lastOption) {
86069
+ return;
86465
86070
  }
86071
+ if (!ctx.isExpanded) {
86072
+ component.dropdown.show();
86073
+ }
86074
+ component.menu.updateActiveOption(lastOption);
86466
86075
  },
86467
86076
 
86468
86077
  Enter(component, evt, ctx) {
86078
+ // Prevent the keypress from bubbling to parent containers (e.g., forms)
86079
+ // which could interpret Enter as a submit. Matches APG select-only combobox
86080
+ // and native <select> behavior: Enter opens the listbox when closed, selects
86081
+ // the active option when open — it does not submit a parent form.
86469
86082
  evt.preventDefault();
86470
86083
  evt.stopPropagation();
86471
86084
  if (!ctx.isExpanded) {
@@ -86476,15 +86089,16 @@ const selectKeyboardStrategy = {
86476
86089
  },
86477
86090
 
86478
86091
  Home(component, evt, ctx) {
86479
- if (!ctx.isExpanded) {
86480
- return;
86481
- }
86482
86092
  evt.preventDefault();
86483
86093
  evt.stopPropagation();
86484
86094
  const [firstOption] = getEnabledOptions(component.menu);
86485
- if (firstOption) {
86486
- component.menu.updateActiveOption(firstOption);
86095
+ if (!firstOption) {
86096
+ return;
86097
+ }
86098
+ if (!ctx.isExpanded) {
86099
+ component.dropdown.show();
86487
86100
  }
86101
+ component.menu.updateActiveOption(firstOption);
86488
86102
  },
86489
86103
 
86490
86104
  Tab(component, evt, ctx) {
@@ -90431,7 +90045,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
90431
90045
  }
90432
90046
  };
90433
90047
 
90434
- var formkitVersion$1 = '202606252132';
90048
+ var formkitVersion$1 = '202606252142';
90435
90049
 
90436
90050
  class AuroElement extends i$3 {
90437
90051
  static get properties() {
@@ -91703,6 +91317,7 @@ class AuroDropdown extends AuroElement {
91703
91317
  role="${o$4(this.triggerContentFocusable ? undefined : this.a11yRole)}"
91704
91318
  aria-expanded="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.isPopoverVisible)}"
91705
91319
  aria-controls="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.dropdownId)}"
91320
+ aria-haspopup="${o$4(this.a11yRole === 'combobox' ? 'listbox' : undefined)}"
91706
91321
  aria-labelledby="${o$4(this.triggerContentFocusable ? undefined : 'triggerLabel')}"
91707
91322
  aria-disabled="${o$4(this.disabled ? 'true' : undefined)}"
91708
91323
  @focusin="${this.handleFocusin}"
@@ -92452,7 +92067,7 @@ class AuroHelpText extends i$3 {
92452
92067
  }
92453
92068
  }
92454
92069
 
92455
- var formkitVersion = '202606252132';
92070
+ var formkitVersion = '202606252142';
92456
92071
 
92457
92072
  var styleCss = i$6`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock{display:block}.util_displayFlex{display:flex}.util_displayHidden{display:none}.util_displayHiddenVisually{position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}.body-default{font-size:var(--wcss-body-default-font-size, 1rem);font-weight:var(--wcss-body-default-weight, );line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-default-emphasized{font-size:var(--wcss-body-default-emphasized-font-size, 1rem);font-weight:var(--wcss-body-default-emphasized-weight, );line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);font-weight:var(--wcss-body-lg-weight, );line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg,.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg-emphasized{font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);font-weight:var(--wcss-body-lg-emphasized-weight, );line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, 0.875rem);font-weight:var(--wcss-body-sm-weight, );line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-sm-emphasized{font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);font-weight:var(--wcss-body-sm-emphasized-weight, );line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-size:var(--wcss-body-xs-font-size, 0.75rem);font-weight:var(--wcss-body-xs-weight, );line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs,.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs-emphasized{font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);font-weight:var(--wcss-body-xs-emphasized-weight, );line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-size:var(--wcss-body-2xs-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-weight, );line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs,.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-2xs-emphasized{font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-emphasized-weight, );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-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, 300);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, 300);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, 0.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, 0.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, 0.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, 0.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, 0.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, 0.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(0.875rem, 1.1666666667vw, 0.875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}[auro-dropdown]{--ds-auro-dropdown-trigger-border-color: var(--ds-auro-select-border-color);--ds-auro-dropdown-trigger-background-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-container-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-outline-color: var(--ds-auro-select-outline-color)}:host{display:inline-block;text-align:left;vertical-align:top}:host([layout*=emphasized]) [auro-dropdown],:host([layout*=snowflake]) [auro-dropdown]{--ds-auro-select-border-color: transparent}:host([layout*=emphasized]) .mainContent,:host([layout*=snowflake]) .mainContent{text-align:center}.mainContent{position:relative;display:flex;overflow:hidden;flex:1;flex-direction:column;align-items:center;justify-content:center}.valueContainer [slot=displayValue]{display:none}.accents{display:flex;flex-direction:row;align-items:center;justify-content:center}::slotted([slot=typeIcon]){margin-right:var(--ds-size-100, 0.5rem)}.displayValue{display:block}.displayValue:not(.force){display:none}.displayValue:not(.force).hasContent:is(.withValue):not(.hasFocus){display:block}.triggerContent{display:flex;width:100%;align-items:center;justify-content:center}:host([layout*=emphasized]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-300, 1.5rem)}:host([layout*=snowflake]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-200, 1rem)}:host([layout*=snowflake]) label{padding-block:var(--ds-size-25, 0.125rem)}:host([layout*=classic]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem)}:host([layout*=classic]) .mainContent{align-items:start}:host([layout*=classic]) label{overflow:hidden;cursor:text;text-overflow:ellipsis;white-space:nowrap}:host([layout*=classic]) .value{height:auto}label{color:var(--ds-auro-select-label-text-color)}:host(:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-select-outline-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-default, #2a2a2a)}:host([ondark]:is([validity]:not([validity=valid]))) [auro-dropdown],:host([appearance=inverse]:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-select-outline-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}#slotHolder{display:none}:host([fluid]){width:100%}:host([disabled]){pointer-events:none;user-select:none}:host([disabled]:not([ondark])) [auro-dropdown],:host([disabled]:not([appearance=inverse])) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-border-subtle, #dddddd)}:host(:not([layout*=classic])[disabled][ondark]) [auro-dropdown],:host(:not([layout*=classic])[disabled][appearance=inverse]) [auro-dropdown]{--ds-auro-select-border-color: transparent}`;
92458
92073
 
@@ -92784,14 +92399,6 @@ class AuroSelect extends AuroElement$1 {
92784
92399
  reflect: true
92785
92400
  },
92786
92401
 
92787
- /**
92788
- * @private
92789
- */
92790
- options: {
92791
- type: Array,
92792
- state: true
92793
- },
92794
-
92795
92402
  /**
92796
92403
  * Specifies the current selected menuOption. Default type is `HTMLElement`, changing to `Array<HTMLElement>` when `multiSelect` is true.
92797
92404
  * @type {HTMLElement|Array<HTMLElement>}
@@ -93079,16 +92686,68 @@ class AuroSelect extends AuroElement$1 {
93079
92686
  this.dropdown.dropdownWidth = this.customBibWidth;
93080
92687
  }
93081
92688
 
93082
- // Pass label text to the dropdown bib for accessible dialog naming
93083
- const labelElement = this.querySelector('span[slot="label"]');
93084
- if (labelElement) {
93085
- this.dropdown.bibDialogLabel = labelElement.textContent.trim() || undefined;
93086
- }
92689
+ this._syncLabelText();
93087
92690
 
93088
92691
  // Exposes the CSS parts from the dropdown for styling
93089
92692
  this.dropdown.exposeCssParts();
93090
92693
  }
93091
92694
 
92695
+ /**
92696
+ * Reads the current label slot text and pushes it to the dropdown bib
92697
+ * (for dialog naming) and the menu (for listbox aria-label). Safe to call
92698
+ * before either child has been wired up — each branch self-guards.
92699
+ * @private
92700
+ */
92701
+ _syncLabelText() {
92702
+ const labelElement = this.querySelector('[slot="label"]');
92703
+ const text = labelElement ? labelElement.textContent.trim() : '';
92704
+ if (this.dropdown) {
92705
+ this.dropdown.bibDialogLabel = text || undefined;
92706
+ }
92707
+ if (this.menu) {
92708
+ if (text) {
92709
+ this.menu.setAttribute('aria-label', text);
92710
+ } else {
92711
+ this.menu.removeAttribute('aria-label');
92712
+ }
92713
+ }
92714
+ }
92715
+
92716
+ /**
92717
+ * Keeps the dialog/menu accessible names in sync when consumers mutate the
92718
+ * label slot at runtime (e.g., i18n locale swap). `slotchange` alone is
92719
+ * insufficient — it doesn't fire when textContent of an already-assigned
92720
+ * slotted node changes, which is the common case. We scope the observer to
92721
+ * the label node itself (not the whole host subtree) so option-content
92722
+ * mutations don't trigger label re-syncs, and re-target on `slotchange`
92723
+ * when consumers add or replace the label element.
92724
+ * @private
92725
+ */
92726
+ _observeLabelChanges() {
92727
+ if (this._labelObserver) return;
92728
+ this._labelObserver = new MutationObserver(() => this._syncLabelText());
92729
+
92730
+ const retarget = () => {
92731
+ this._labelObserver.disconnect();
92732
+ const labelElement = this.querySelector('[slot="label"]');
92733
+ if (labelElement) {
92734
+ this._labelObserver.observe(labelElement, {
92735
+ childList: true,
92736
+ subtree: true,
92737
+ characterData: true
92738
+ });
92739
+ }
92740
+ this._syncLabelText();
92741
+ };
92742
+
92743
+ retarget();
92744
+
92745
+ this._retargetLabelObserver = retarget;
92746
+ this.shadowRoot.querySelectorAll('slot[name="label"]').forEach((slot) => {
92747
+ slot.addEventListener('slotchange', retarget);
92748
+ });
92749
+ }
92750
+
93092
92751
  /**
93093
92752
  * This will register this element with the browser.
93094
92753
  * @param {string} [name="auro-select"] - The name of element that you want to register to.
@@ -93239,11 +92898,7 @@ class AuroSelect extends AuroElement$1 {
93239
92898
  this.updateMenuShapeSize();
93240
92899
  this.setMenuValue(this.value);
93241
92900
 
93242
- // Set accessible name on the menu for screen readers based on the label slot content
93243
- const labelElement = this.querySelector('[slot="label"]');
93244
- if (labelElement) {
93245
- this.menu.setAttribute('aria-label', labelElement.textContent.trim());
93246
- }
92901
+ this._syncLabelText();
93247
92902
 
93248
92903
  if (this.multiSelect) {
93249
92904
  this.menu.multiSelect = this.multiSelect;
@@ -93255,8 +92910,21 @@ class AuroSelect extends AuroElement$1 {
93255
92910
  if (typeof this.menu.initItems === 'function') {
93256
92911
  this.menu.initItems();
93257
92912
  }
93258
- this.options = this.menu.options;
93259
92913
  this.updateOptionPositions();
92914
+ // renderNativeSelect reads this.menu.options, which the parent doesn't
92915
+ // observe — request an update so the hidden native <option> list reflects
92916
+ // the menu's options after initItems populates them.
92917
+ this.requestUpdate();
92918
+
92919
+ // Keep aria-setsize/aria-posinset (and the native <option> list) in sync
92920
+ // when the menu re-initializes its items — e.g., slotchange, async/lazy
92921
+ // loads, value-triggered re-init. Without this, stale set-size is
92922
+ // announced and the native select goes stale after dynamic mutations.
92923
+ this.menu.addEventListener('auroMenu-optionsChange', () => {
92924
+ this.updateOptionPositions();
92925
+ this.requestUpdate();
92926
+ });
92927
+
93260
92928
  this.menu.addEventListener("auroMenu-loadingChange", (event) => this.handleMenuLoadingChange(event));
93261
92929
 
93262
92930
  this.menu.addEventListener("auroMenu-selectValueFailure", () => {
@@ -93275,11 +92943,22 @@ class AuroSelect extends AuroElement$1 {
93275
92943
  this.dropdown.setActiveDescendant(this.optionActive);
93276
92944
  }
93277
92945
 
93278
- // Announce the active option for screen readers
93279
- if (this.optionActive) {
92946
+ // Announce the active option for screen readers. Skip when the activated
92947
+ // option is already selected: Enter triggers an auroMenu-selectedOption
92948
+ // re-announce, and aria-selected on the active descendant otherwise
92949
+ // conveys state without an explicit utterance.
92950
+ if (this.optionActive && !this.optionActive.hasAttribute('selected')) {
93280
92951
  const optionText = this.optionActive.textContent.trim();
93281
- const selectedState = this.optionActive.hasAttribute('selected') ? ', selected' : ', not selected';
93282
- announceToScreenReader(this._getAnnouncementRoot(), `${optionText}${selectedState}`);
92952
+ const message = `${optionText}, not selected`;
92953
+ if (this.dropdown.isPopoverVisible) {
92954
+ announceToScreenReader(this._getAnnouncementRoot(), message);
92955
+ } else {
92956
+ // Typeahead-on-closed fires this event before `show()` flips
92957
+ // isPopoverVisible. Defer so the announcement targets the bib's
92958
+ // live region once the fullscreen <dialog> opens — otherwise it
92959
+ // lands in the host root, which is inert under the active modal.
92960
+ queueMicrotask(() => announceToScreenReader(this._getAnnouncementRoot(), message));
92961
+ }
93283
92962
  }
93284
92963
 
93285
92964
  if (this.dropdown.isPopoverVisible) {
@@ -93411,24 +93090,32 @@ class AuroSelect extends AuroElement$1 {
93411
93090
 
93412
93091
  this.typeaheadBuffer += key;
93413
93092
 
93414
- const isRepeatedChar = this.typeaheadBuffer.length > 1 && new Set(this.typeaheadBuffer).size === 1;
93093
+ // Prefer the literal buffer as a prefix per WAI-ARIA APG ("focus moves to the
93094
+ // next item with a name that starts with the string of characters typed").
93095
+ // Only fall back to single-char cycling when the repeated buffer has no
93096
+ // longer prefix match — e.g. "aa" cycles through ["Apple", "Apricot"] only
93097
+ // because no option starts with "aa".
93098
+ let match = options.find((option) => this._getOptionDisplayText(option).startsWith(this.typeaheadBuffer));
93415
93099
 
93416
- let match = null;
93100
+ const isRepeatedChar = !match && this.typeaheadBuffer.length > 1 && new Set(this.typeaheadBuffer).size === 1;
93417
93101
  if (isRepeatedChar) {
93418
93102
  const matches = options.filter((option) => this._getOptionDisplayText(option).startsWith(key));
93419
93103
  if (matches.length) {
93420
93104
  const cycleIndex = (this.typeaheadBuffer.length - 1) % matches.length;
93421
93105
  match = matches[cycleIndex];
93422
93106
  }
93423
- } else {
93424
- match = options.find((option) => this._getOptionDisplayText(option).startsWith(this.typeaheadBuffer));
93425
93107
  }
93426
93108
 
93109
+ // Intentional: no-match leaves the bib closed (deviates from APG / some native <select>).
93427
93110
  if (match) {
93111
+ // Pre-stash the match so the auroDropdown-toggled handler's `!optionActive`
93112
+ // guard short-circuits and skips the firstActive/selected fallback —
93113
+ // otherwise show() synchronously fires the handler, which writes
93114
+ // aria-activedescendant once before we overwrite it.
93115
+ this.menu.updateActiveOption(match);
93428
93116
  if (!this.dropdown.isPopoverVisible) {
93429
93117
  this.dropdown.show();
93430
93118
  }
93431
- this.menu.updateActiveOption(match);
93432
93119
  }
93433
93120
  }
93434
93121
 
@@ -93545,6 +93232,16 @@ class AuroSelect extends AuroElement$1 {
93545
93232
  disconnectedCallback() {
93546
93233
  super.disconnectedCallback();
93547
93234
  this._clearTypeaheadBuffer();
93235
+ if (this._labelObserver) {
93236
+ this._labelObserver.disconnect();
93237
+ this._labelObserver = null;
93238
+ }
93239
+ if (this._retargetLabelObserver && this.shadowRoot) {
93240
+ this.shadowRoot.querySelectorAll('slot[name="label"]').forEach((slot) => {
93241
+ slot.removeEventListener('slotchange', this._retargetLabelObserver);
93242
+ });
93243
+ this._retargetLabelObserver = null;
93244
+ }
93548
93245
  }
93549
93246
 
93550
93247
  // lifecycle runs only after the element's DOM has been updated the first time
@@ -93555,6 +93252,7 @@ class AuroSelect extends AuroElement$1 {
93555
93252
  this.configureDropdown();
93556
93253
  this.configureMenu();
93557
93254
  this.configureSelect();
93255
+ this._observeLabelChanges();
93558
93256
  }
93559
93257
 
93560
93258
  setMenuValue(value) {
@@ -93691,21 +93389,8 @@ class AuroSelect extends AuroElement$1 {
93691
93389
  if (!selectedOption) return;
93692
93390
  const selectedValue = selectedOption.value;
93693
93391
 
93694
- if (this.multiSelect) {
93695
- const currentArray = this.menu.value || [];
93696
-
93697
- if (!currentArray.includes(selectedValue)) {
93698
- this.value = JSON.stringify([
93699
- ...currentArray,
93700
- selectedValue
93701
- ]);
93702
- }
93703
- } else {
93704
- const currentValue = this.value;
93705
-
93706
- if (currentValue !== selectedValue) {
93707
- this.value = selectedValue;
93708
- }
93392
+ if (this.value !== selectedValue) {
93393
+ this.value = selectedValue;
93709
93394
  }
93710
93395
  }
93711
93396