@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
@@ -5135,7 +5135,7 @@ function normalizeDates$3(context, ...dates) {
5135
5135
  * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))
5136
5136
  * //=> Tue Sep 02 2014 00:00:00
5137
5137
  */
5138
- function startOfDay$3(date, options) {
5138
+ function startOfDay$4(date, options) {
5139
5139
  const _date = toDate$3(date, options?.in);
5140
5140
  _date.setHours(0, 0, 0, 0);
5141
5141
  return _date;
@@ -5183,8 +5183,8 @@ function differenceInCalendarDays$3(laterDate, earlierDate, options) {
5183
5183
  earlierDate,
5184
5184
  );
5185
5185
 
5186
- const laterStartOfDay = startOfDay$3(laterDate_);
5187
- const earlierStartOfDay = startOfDay$3(earlierDate_);
5186
+ const laterStartOfDay = startOfDay$4(laterDate_);
5187
+ const earlierStartOfDay = startOfDay$4(earlierDate_);
5188
5188
 
5189
5189
  const laterTimestamp =
5190
5190
  +laterStartOfDay - getTimezoneOffsetInMilliseconds$3(laterStartOfDay);
@@ -12331,7 +12331,7 @@ let AuroHelpText$8 = class AuroHelpText extends i$2 {
12331
12331
  }
12332
12332
  };
12333
12333
 
12334
- var formkitVersion$8 = '202606252132';
12334
+ var formkitVersion$8 = '202606252142';
12335
12335
 
12336
12336
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
12337
12337
  // See LICENSE in the project root for license information.
@@ -14415,7 +14415,7 @@ function normalizeDates$1(context, ...dates) {
14415
14415
  * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))
14416
14416
  * //=> Tue Sep 02 2014 00:00:00
14417
14417
  */
14418
- function startOfDay$1(date, options) {
14418
+ function startOfDay$2(date, options) {
14419
14419
  const _date = toDate$1(date, options?.in);
14420
14420
  _date.setHours(0, 0, 0, 0);
14421
14421
  return _date;
@@ -14463,8 +14463,8 @@ function differenceInCalendarDays$1(laterDate, earlierDate, options) {
14463
14463
  earlierDate,
14464
14464
  );
14465
14465
 
14466
- const laterStartOfDay = startOfDay$1(laterDate_);
14467
- const earlierStartOfDay = startOfDay$1(earlierDate_);
14466
+ const laterStartOfDay = startOfDay$2(laterDate_);
14467
+ const earlierStartOfDay = startOfDay$2(earlierDate_);
14468
14468
 
14469
14469
  const laterTimestamp =
14470
14470
  +laterStartOfDay - getTimezoneOffsetInMilliseconds$1(laterStartOfDay);
@@ -23921,8 +23921,8 @@ class RangeDatepickerCell extends i$2 {
23921
23921
  const parsedDateFrom = parseInt(dateFrom, 10);
23922
23922
  const parsedDateTo = parseInt(dateTo, 10);
23923
23923
  if (day) {
23924
- if (getTime(startOfDay$1(parsedDateTo * 1000)) / 1000 === day.date ||
23925
- getTime(startOfDay$1(parsedDateFrom * 1000)) / 1000 === day.date) {
23924
+ if (getTime(startOfDay$2(parsedDateTo * 1000)) / 1000 === day.date ||
23925
+ getTime(startOfDay$2(parsedDateFrom * 1000)) / 1000 === day.date) {
23926
23926
  this.selected = true;
23927
23927
  }
23928
23928
  if (((hoveredDate === day.date || day.date < hoveredDate) &&
@@ -24110,7 +24110,7 @@ class RangeDatepickerCalendar extends i$2 {
24110
24110
  this.dayNamesOfTheWeek = [];
24111
24111
  this.daysOfMonth = [];
24112
24112
  this._locale = null;
24113
- this.currentDate = parseInt(format$1(startOfDay$1(Date.now()), 't'), 10);
24113
+ this.currentDate = parseInt(format$1(startOfDay$2(Date.now()), 't'), 10);
24114
24114
  this.localeChanged();
24115
24115
  this.yearAndMonthChanged(this.year, this.month);
24116
24116
  }
@@ -24584,7 +24584,7 @@ __decorate([n$4({ type: Array })], RangeDatepickerCalendar.prototype, "dayNamesO
24584
24584
  __decorate([n$4({ type: Array })], RangeDatepickerCalendar.prototype, "daysOfMonth", void 0);
24585
24585
  AuroLibraryRuntimeUtils$5$1.prototype.registerComponent('wc-range-datepicker-calendar', RangeDatepickerCalendar);
24586
24586
 
24587
- var styleCss$5$2 = i$4`.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}`;
24587
+ var styleCss$5$2 = i$4`.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}`;
24588
24588
 
24589
24589
  var colorCss$5$2 = i$4`: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}`;
24590
24590
 
@@ -24609,104 +24609,14 @@ class s{registerComponent(e,t){customElements.get(e)||customElements.define(e,cl
24609
24609
 
24610
24610
  var popoverVersion = '6.0.1';
24611
24611
 
24612
- /**
24613
- * Single source of truth for parsing and matching blackout dates across the
24614
- * datepicker. Both `auro-calendar` (memoized Set + `isDateBlackout`) and the
24615
- * pre-`firstUpdated` fallback inside `auro-calendar-cell` route through these
24616
- * helpers so the YYYY-MM-DD → seconds conversion and the merge-with-legacy
24617
- * `disabledDays` rules are defined exactly once.
24618
- */
24619
-
24620
- /**
24621
- * Converts a `YYYY-MM-DD` ISO date string to a Unix timestamp (seconds)
24622
- * representing local midnight on that calendar day. Returns `null` for
24623
- * inputs that don't parse to a finite timestamp.
24624
- *
24625
- * Uses the `new Date(year, monthIndex, day)` constructor (NOT
24626
- * `new Date(isoStr)`) so the result is local-midnight rather than UTC
24627
- * midnight — required to keep the calendar grid aligned with the user's
24628
- * local calendar day in negative-offset timezones.
24629
- *
24630
- * @param {string} isoStr - Date string in `YYYY-MM-DD` format.
24631
- * @returns {number|null} Local-midnight Unix timestamp (seconds), or null.
24632
- */
24633
- function parseIsoToTimestamp(isoStr) {
24634
- if (typeof isoStr !== 'string') {
24635
- return null;
24636
- }
24637
- const parts = isoStr.split('-');
24638
- if (parts.length !== 3) {
24639
- return null;
24640
- }
24641
- const year = parseInt(parts[0], 10);
24642
- const month = parseInt(parts[1], 10);
24643
- const day = parseInt(parts[2], 10);
24644
- if (!Number.isFinite(year) || !Number.isFinite(month) || !Number.isFinite(day)) {
24645
- return null;
24646
- }
24647
- // Reject overflow values like "2024-13-40" — JS `new Date(year, month, day)`
24648
- // silently normalizes those to a different calendar day, which would
24649
- // disable the wrong date if we let the result through.
24650
- if (month < 1 || month > 12 || day < 1 || day > 31) {
24651
- return null;
24652
- }
24653
- const date = new Date(year, month - 1, day);
24654
- // Guard the residual case where JS still rolls a value (e.g. Feb 30 → Mar 2).
24655
- // After construction, getFullYear/getMonth/getDate should match the inputs.
24656
- if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {
24657
- return null;
24658
- }
24659
- const ts = Math.floor(date.getTime() / 1000);
24660
- return Number.isFinite(ts) ? ts : null;
24661
- }
24662
-
24663
- /**
24664
- * Builds a `Set<number>` of seconds-since-epoch timestamps covering both the
24665
- * legacy `disabledDays` (already-numeric) array and the ISO `blackoutDates`
24666
- * array. Use this for O(1) membership checks in hot paths.
24667
- *
24668
- * @param {Array<string|number>|undefined} disabledDays - Legacy timestamp array.
24669
- * @param {Array<string>|undefined} blackoutDates - ISO `YYYY-MM-DD` array.
24670
- * @returns {Set<number>}
24671
- */
24672
- function buildBlackoutSet(disabledDays, blackoutDates) {
24673
- const set = new Set();
24674
- if (Array.isArray(disabledDays)) {
24675
- for (const day of disabledDays) {
24676
- const ts = parseInt(day, 10);
24677
- if (Number.isFinite(ts)) {
24678
- set.add(ts);
24679
- }
24680
- }
24681
- }
24682
- if (Array.isArray(blackoutDates)) {
24683
- for (const isoStr of blackoutDates) {
24684
- const ts = parseIsoToTimestamp(isoStr);
24685
- if (ts !== null) {
24686
- set.add(ts);
24687
- }
24688
- }
24689
- }
24690
- return set;
24691
- }
24692
-
24693
- /**
24694
- * One-shot membership test for a single timestamp against both blackout
24695
- * sources. Allocates a Set on each call; only use this in cold paths
24696
- * (e.g. the pre-`firstUpdated` cell fallback). Hot paths should hold the
24697
- * Set returned from `buildBlackoutSet` and `.has(ts)` directly.
24698
- *
24699
- * @param {number} dateTs - Unix timestamp (seconds) to test.
24700
- * @param {Array<string|number>|undefined} disabledDays - Legacy timestamp array.
24701
- * @param {Array<string>|undefined} blackoutDates - ISO `YYYY-MM-DD` array.
24702
- * @returns {boolean}
24703
- */
24704
- function isBlackoutTimestamp(dateTs, disabledDays, blackoutDates) {
24705
- return buildBlackoutSet(disabledDays, blackoutDates).has(dateTs);
24706
- }
24707
-
24708
24612
  /* 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 */
24709
24613
 
24614
+ const startOfDay$1 = (ms) => {
24615
+ const date = new Date(ms);
24616
+ date.setHours(0, 0, 0, 0);
24617
+ return date.getTime();
24618
+ };
24619
+
24710
24620
  class AuroCalendarCell extends i$2 {
24711
24621
  constructor() {
24712
24622
  super();
@@ -24753,14 +24663,6 @@ class AuroCalendarCell extends i$2 {
24753
24663
  type: Boolean,
24754
24664
  reflect: true
24755
24665
  },
24756
- /**
24757
- * @deprecated Propagated from the legacy `auro-calendar.disabledDays`
24758
- * Unix-timestamp array. The cell honors it for backward compatibility
24759
- * (see the divergence-check fallback inside `isBlackout`), but
24760
- * consumers should migrate to `auro-datepicker.blackoutDates`
24761
- * (YYYY-MM-DD ISO strings). The calendar emits a one-time
24762
- * deprecation warning the first time a non-empty value is observed.
24763
- */
24764
24666
  disabledDays: { type: Array },
24765
24667
  isCurrentDate: { type: Boolean },
24766
24668
  locale: { type: String },
@@ -24806,8 +24708,8 @@ class AuroCalendarCell extends i$2 {
24806
24708
  const parsedDateTo = parseInt(dateTo, 10);
24807
24709
 
24808
24710
  if (day) {
24809
- const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
24810
- const returnTimestamp = new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000;
24711
+ const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
24712
+ const returnTimestamp = startOfDay$1(parsedDateTo * 1000) / 1000;
24811
24713
 
24812
24714
  if (day.date === departTimestamp || day.date === returnTimestamp) {
24813
24715
  this.selected = true;
@@ -24891,33 +24793,27 @@ class AuroCalendarCell extends i$2 {
24891
24793
  return false;
24892
24794
  }
24893
24795
 
24894
- // Delegate to the calendar's memoized blackout Set for O(1) lookup
24895
- // (instead of rescanning disabledDays + blackoutDates per render). The
24896
- // Set is rebuilt only when either source array reference changes — see
24897
- // auro-calendar.js#_getBlackoutSet.
24898
- if (this.calendar && typeof this.calendar._getBlackoutSet === 'function') {
24899
- if (this.calendar._getBlackoutSet().has(this.day.date)) {
24796
+ // Check against disabledDays timestamps (legacy path)
24797
+ if (Array.isArray(this.disabledDays) && this.disabledDays.length > 0 &&
24798
+ (this.disabledDays.findIndex(dd => parseInt(dd, 10) === this.day.date) !== -1)) {
24799
+ return true;
24800
+ }
24801
+
24802
+ // Check against blackoutDates (ISO format YYYY-MM-DD) on the datepicker
24803
+ const blackoutDates = this.datepicker?.blackoutDates;
24804
+
24805
+ if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
24806
+ const date = new Date(this.day.date * 1000);
24807
+ const yyyy = date.getFullYear();
24808
+ const mm = String(date.getMonth() + 1).padStart(2, '0');
24809
+ const dd = String(date.getDate()).padStart(2, '0');
24810
+ const cellDate = `${yyyy}-${mm}-${dd}`;
24811
+ if (blackoutDates.includes(cellDate)) {
24900
24812
  return true;
24901
24813
  }
24902
- // If the cell's local disabledDays diverged from the calendar's (a
24903
- // consumer or test mutated cell.disabledDays directly), the Set does
24904
- // not reflect that addition — fall through to the per-cell scan only
24905
- // when the reference no longer matches. Production data flow keeps
24906
- // these identical, so this branch stays cold. Guarded with
24907
- // Array.isArray to match `_getBlackoutSet`'s contract: non-array
24908
- // values are treated as empty rather than crashing on `.findIndex`.
24909
- if (Array.isArray(this.disabledDays) && this.disabledDays !== this.calendar.disabledDays && this.disabledDays.length > 0) {
24910
- if (this.disabledDays.findIndex((dd) => parseInt(dd, 10) === this.day.date) !== -1) {
24911
- return true;
24912
- }
24913
- }
24914
- return false;
24915
24814
  }
24916
24815
 
24917
- // Pre-firstUpdated fallback — the cell may render once before the
24918
- // ancestor calendar is wired up. Routes through the shared
24919
- // blackoutUtils helper so the parsing rules stay in one place.
24920
- return isBlackoutTimestamp(this.day.date, this.disabledDays, this.datepicker?.blackoutDates);
24816
+ return false;
24921
24817
  }
24922
24818
 
24923
24819
  /**
@@ -25023,12 +24919,12 @@ class AuroCalendarCell extends i$2 {
25023
24919
  const parsedDateFrom = Number.parseInt(this.dateFrom, 10);
25024
24920
  if (!Number.isFinite(parsedDateFrom)) return null;
25025
24921
 
25026
- const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
24922
+ const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
25027
24923
  const dayDate = this.day.date;
25028
24924
 
25029
24925
  const parsedDateTo = Number.parseInt(this.dateTo, 10);
25030
24926
  const hasDateTo = Number.isFinite(parsedDateTo);
25031
- const returnTimestamp = hasDateTo ? new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000 : null;
24927
+ const returnTimestamp = hasDateTo ? startOfDay$1(parsedDateTo * 1000) / 1000 : null;
25032
24928
 
25033
24929
  if (dayDate === departTimestamp) return this.datepicker.rangeLabelStart || 'range start';
25034
24930
 
@@ -25038,9 +24934,7 @@ class AuroCalendarCell extends i$2 {
25038
24934
 
25039
24935
  if (hasDateTo && dayDate > departTimestamp && dayDate < returnTimestamp) return this.datepicker.rangeLabelInRange || 'in range';
25040
24936
 
25041
- if (!hasDateTo && dayDate > departTimestamp) return this.datepicker.rangeLabelEndPreview || 'previewing range end';
25042
-
25043
- // After end date when both dateFrom and dateTo are set.
24937
+ // After start date, no end date yet, or after end date
25044
24938
  return this.datepicker.rangeLabelAfterRange || 'after range';
25045
24939
  }
25046
24940
 
@@ -25053,7 +24947,7 @@ class AuroCalendarCell extends i$2 {
25053
24947
  */
25054
24948
  isDepartDate(day, dateFrom) {
25055
24949
  const parsedDateFrom = parseInt(dateFrom, 10);
25056
- const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
24950
+ const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
25057
24951
 
25058
24952
  return this.selected && day.date === departTimestamp;
25059
24953
  }
@@ -25068,7 +24962,7 @@ class AuroCalendarCell extends i$2 {
25068
24962
  */
25069
24963
  isReturnDate(day, dateFrom, dateTo) {
25070
24964
  const parsedDateTo = parseInt(dateTo, 10);
25071
- const returnTimestamp = new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000;
24965
+ const returnTimestamp = startOfDay$1(parsedDateTo * 1000) / 1000;
25072
24966
 
25073
24967
  return this.selected && day.date === returnTimestamp && dateFrom;
25074
24968
  }
@@ -25232,7 +25126,6 @@ class AuroCalendarCell extends i$2 {
25232
25126
  setTimeout(() => this.firstUpdated(), 0);
25233
25127
  return;
25234
25128
  }
25235
- this.calendar = calendar;
25236
25129
  this.datepicker = calendar.datepicker;
25237
25130
  this._slotContentHandler = () => {
25238
25131
  this.handleSlotContent();
@@ -25290,13 +25183,12 @@ class AuroCalendarCell extends i$2 {
25290
25183
  this._cachedButton = this.shadowRoot.querySelector('button.day');
25291
25184
  });
25292
25185
 
25293
- // Keep the host's gridcell aria attributes in sync with the day data.
25186
+ // Update host-level aria attributes for ariaActiveDescendantElement.
25294
25187
  this.updateHostAria();
25295
25188
  }
25296
25189
 
25297
25190
  // Update host aria when selection changes (aria-selected, range labels)
25298
- // or when isCurrentDate flips (aria-current).
25299
- if (properties.has('dateFrom') || properties.has('dateTo') || properties.has('selected') || properties.has('isCurrentDate')) {
25191
+ if (properties.has('dateFrom') || properties.has('dateTo') || properties.has('selected')) {
25300
25192
  this.updateHostAria();
25301
25193
  }
25302
25194
 
@@ -25307,8 +25199,8 @@ class AuroCalendarCell extends i$2 {
25307
25199
  }
25308
25200
 
25309
25201
  /**
25310
- * Sets host-level ARIA so each cell exposes its date, selection state,
25311
- * and blackout status to assistive tech browsing the month grid.
25202
+ * Updates ARIA attributes on the host element so that
25203
+ * ariaActiveDescendantElement can expose cell info to the SR.
25312
25204
  * @private
25313
25205
  * @returns {void}
25314
25206
  */
@@ -25317,27 +25209,16 @@ class AuroCalendarCell extends i$2 {
25317
25209
 
25318
25210
  const outOfRange = this.isOutOfRange(this.day, this.min, this.max);
25319
25211
  if (outOfRange) {
25320
- // Strip every aria attribute the in-range branch may have set on a
25321
- // previous render — if a cell flips from in-range to out-of-range
25322
- // (calendar shifts months, minDate/maxDate change, etc.).
25323
25212
  this.removeAttribute('role');
25324
25213
  this.removeAttribute('aria-label');
25325
- this.removeAttribute('aria-current');
25326
- this.removeAttribute('aria-selected');
25327
- this.removeAttribute('aria-disabled');
25328
25214
  return;
25329
25215
  }
25330
25216
 
25217
+ // The host acts as the gridcell for ariaActiveDescendantElement.
25331
25218
  this.setAttribute('role', 'gridcell');
25332
25219
  this.setAttribute('aria-label', this.getAriaLabel());
25333
25220
  this.setAttribute('aria-selected', this.selected ? 'true' : 'false');
25334
25221
 
25335
- if (this.isCurrentDate) {
25336
- this.setAttribute('aria-current', 'date');
25337
- } else {
25338
- this.removeAttribute('aria-current');
25339
- }
25340
-
25341
25222
  if (this.isBlackout()) {
25342
25223
  this.setAttribute('aria-disabled', 'true');
25343
25224
  } else {
@@ -25352,7 +25233,7 @@ class AuroCalendarCell extends i$2 {
25352
25233
  * @returns {void}
25353
25234
  */
25354
25235
  focusButton() {
25355
- const button = this._cachedButton || this.shadowRoot.querySelector('button:not([disabled])');
25236
+ const button = this._cachedButton || this.shadowRoot.querySelector('button:not([aria-hidden])');
25356
25237
  if (button) {
25357
25238
  button.focus({ focusVisible: true });
25358
25239
  }
@@ -25360,9 +25241,7 @@ class AuroCalendarCell extends i$2 {
25360
25241
 
25361
25242
  /**
25362
25243
  * Imperatively marks this cell as active without triggering a Lit re-render.
25363
- * Buttons stay tabindex="-1" because DOM focus stays on the grid wrapper
25364
- * arrow keys move the active cell imperatively and the live region carries
25365
- * the SR announcement.
25244
+ * Note: buttons stay tabindex="-1" because the grid uses aria-activedescendant.
25366
25245
  * @returns {void}
25367
25246
  */
25368
25247
  setActive() {
@@ -25404,13 +25283,10 @@ class AuroCalendarCell extends i$2 {
25404
25283
  if (!btn || !this.day) return;
25405
25284
 
25406
25285
  const dayDate = this.day.date;
25407
- const departTimestamp = new Date(dateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
25286
+ const departTimestamp = startOfDay$1(dateFrom * 1000) / 1000;
25408
25287
  const isInRange = dayDate > departTimestamp && dayDate < hoveredDate;
25409
- // `>=` so hovering the depart cell itself (a same-day round-trip
25410
- // preview) still surfaces a visual cue: the depart cell receives both
25411
- // rangeDepartDate and lastHoveredDate.
25412
- const isLastHovered = dayDate === hoveredDate && hoveredDate >= departTimestamp;
25413
- const isDepartWithPreview = dayDate === departTimestamp && hoveredDate >= departTimestamp;
25288
+ const isLastHovered = dayDate === hoveredDate && hoveredDate > departTimestamp;
25289
+ const isDepartWithPreview = dayDate === departTimestamp && hoveredDate > departTimestamp;
25414
25290
 
25415
25291
  btn.classList.toggle('inRange', isInRange);
25416
25292
  btn.classList.toggle('lastHoveredDate', isLastHovered);
@@ -25468,6 +25344,7 @@ class AuroCalendarCell extends i$2 {
25468
25344
  @focus="${outOfRange ? undefined : this.handleFocus}"
25469
25345
  class="${e$2(buttonClasses)}"
25470
25346
  ?disabled="${outOfRange}"
25347
+ aria-hidden="${outOfRange ? 'true' : A$7}"
25471
25348
  tabindex="-1">
25472
25349
  <div class="buttonWrapper" aria-hidden="true">
25473
25350
  <div class="currentDayMarker">${this.day?.title || A$7}</div>
@@ -26573,7 +26450,7 @@ let AuroBibtemplate$3 = class AuroBibtemplate extends i$2 {
26573
26450
  }
26574
26451
  };
26575
26452
 
26576
- var formkitVersion$2$1 = '202606252132';
26453
+ var formkitVersion$2$1 = '202606252142';
26577
26454
 
26578
26455
  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$5`${s$5(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$4`: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}
26579
26456
  `,u$4$2=i$4`.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}}
@@ -26696,11 +26573,7 @@ class AuroCalendar extends RangeDatepicker {
26696
26573
  this.calendarRangeMonths = null;
26697
26574
 
26698
26575
  /**
26699
- * @deprecated Use `auro-datepicker.blackoutDates` (an array of
26700
- * `YYYY-MM-DD` ISO strings) instead. This legacy array of Unix
26701
- * timestamps is still honored for backward compatibility but emits a
26702
- * one-time `console.debug` the first time a non-empty value is observed.
26703
- * Support will be removed in a future major release.
26576
+ * Legacy array of disabled-date timestamps.
26704
26577
  * @private
26705
26578
  */
26706
26579
  this.disabledDays = [];
@@ -26957,44 +26830,17 @@ class AuroCalendar extends RangeDatepicker {
26957
26830
  * @returns {void}
26958
26831
  */
26959
26832
  updateActiveCellForVisibleMonth() {
26960
- this._afterMonthRender(() => {
26961
- const newDate = this.computeActiveDate({ skipDateFrom: true });
26962
-
26963
- if (newDate !== null && newDate !== undefined) {
26964
- this.activeCellDate = newDate;
26965
- this.setActiveCell(this.activeCellDate);
26966
- }
26967
- });
26968
- }
26969
-
26970
- /**
26971
- * Schedules `callback` two animation frames out, giving the child
26972
- * `auro-formkit-calendar-month` and `auro-formkit-calendar-cell` elements
26973
- * a full render-and-paint cycle to settle before the callback reads or
26974
- * mutates DOM.
26975
- *
26976
- * Why two frames, not one:
26977
- * 1. Lit batches property updates and renders in a microtask, so frame N
26978
- * schedules the render but the new DOM may not be painted yet.
26979
- * 2. Cells re-cache `_cachedButton` inside their own `updateComplete.then`,
26980
- * which also lands a tick later. Reading buttons from frame N+1
26981
- * (after both renders + cache refresh have flushed) reliably hits the
26982
- * new month's cells.
26983
- *
26984
- * Used by every code path that calls `handleNextMonth`/`handlePrevMonth`
26985
- * and then needs to inspect the freshly-rendered cells (cross-month
26986
- * keyboard nav, boundary events, `updateActiveCellForVisibleMonth`).
26987
- * Do NOT collapse to a single rAF — it intermittently lands before
26988
- * `_cachedButton` is refreshed, which silently breaks focus restoration
26989
- * and `setActiveCell` lookups.
26990
- * @private
26991
- * @param {() => void} callback - Runs once after the month re-render and
26992
- * the cells' button caches have refreshed.
26993
- * @returns {void}
26994
- */
26995
- _afterMonthRender(callback) {
26833
+ // Use double-rAF to ensure child month/cell components have fully
26834
+ // rendered and cached their button references before we set tabindex.
26996
26835
  requestAnimationFrame(() => {
26997
- requestAnimationFrame(callback);
26836
+ requestAnimationFrame(() => {
26837
+ const newDate = this.computeActiveDate({ skipDateFrom: true });
26838
+
26839
+ if (newDate !== null && newDate !== undefined) {
26840
+ this.activeCellDate = newDate;
26841
+ this.setActiveCell(this.activeCellDate);
26842
+ }
26843
+ });
26998
26844
  });
26999
26845
  }
27000
26846
 
@@ -27112,47 +26958,6 @@ class AuroCalendar extends RangeDatepicker {
27112
26958
  return Array.from(this.shadowRoot.querySelectorAll('auro-formkit-calendar-month'));
27113
26959
  }
27114
26960
 
27115
- /**
27116
- * Picks the focusable cell whose date is closest to targetTs. Used as a
27117
- * fallback after a month-boundary nav when the exact target date isn't
27118
- * focusable — typically because the month re-render lagged or the date
27119
- * was filtered out by isOutOfRange. When two cells are equidistant, the
27120
- * navigation direction breaks the tie so the user moves the way they
27121
- * pressed (forward → later cell, backward → earlier cell).
27122
- * @private
27123
- * @param {Array} cells - Focusable cells from getAllFocusableCells.
27124
- * @param {Number} targetTs - Desired Unix timestamp (seconds).
27125
- * @param {'next'|'prev'} direction - Navigation direction.
27126
- * @returns {Object|null} The nearest cell, or null when cells is empty.
27127
- */
27128
- pickNearestCell(cells, targetTs, direction) {
27129
- if (!cells.length) {
27130
- return null;
27131
- }
27132
- const forward = direction === 'next';
27133
- let best = null;
27134
- let bestDelta = Infinity;
27135
- cells.forEach((cell) => {
27136
- if (!cell.day) {
27137
- return;
27138
- }
27139
- const distance = Math.abs(cell.day.date - targetTs);
27140
- if (distance < bestDelta) {
27141
- best = cell;
27142
- bestDelta = distance;
27143
- return;
27144
- }
27145
- if (distance === bestDelta && best) {
27146
- if (forward && cell.day.date > best.day.date) {
27147
- best = cell;
27148
- } else if (!forward && cell.day.date < best.day.date) {
27149
- best = cell;
27150
- }
27151
- }
27152
- });
27153
- return best;
27154
- }
27155
-
27156
26961
  /**
27157
26962
  * Gets all focusable cells across all rendered months.
27158
26963
  * @private
@@ -27169,9 +26974,9 @@ class AuroCalendar extends RangeDatepicker {
27169
26974
 
27170
26975
  /**
27171
26976
  * Sets the active cell across all months. Only one cell has tabindex="0" at a time.
27172
- * Uses imperative DOM manipulation — no Lit re-render triggered. DOM focus
27173
- * stays on the grid wrapper; the live region (see getOrCreateLiveRegion)
27174
- * is what announces the active cell to assistive tech.
26977
+ * Uses imperative DOM manipulation — no Lit re-render triggered.
26978
+ * Also updates ariaActiveDescendantElement on the grid wrapper so
26979
+ * screen readers announce the active cell without moving DOM focus.
27175
26980
  * @param {Number} date - Unix timestamp of the cell to activate.
27176
26981
  * @returns {void}
27177
26982
  */
@@ -27252,65 +27057,6 @@ class AuroCalendar extends RangeDatepicker {
27252
27057
  this.clearRangePreview();
27253
27058
  }
27254
27059
 
27255
- /**
27256
- * Returns a memoized Set of blackout timestamps (seconds) drawn from both
27257
- * the legacy `disabledDays` array and the datepicker's ISO `blackoutDates`.
27258
- * The cache invalidates when either source array's reference changes, which
27259
- * matches Lit's own reactive identity semantics for array properties.
27260
- * @private
27261
- * @returns {Set<Number>}
27262
- */
27263
- _getBlackoutSet() {
27264
- // Normalize non-array values to a stable `null` sentinel rather than a
27265
- // fresh `[]` per call — otherwise the reference-identity cache key
27266
- // (`_cachedBlackoutDisabledDays === disabledDays`) never matches on
27267
- // subsequent calls and the Set rebuilds every time. `buildBlackoutSet`
27268
- // already treats null/non-array as "no legacy disabledDays" via its
27269
- // own Array.isArray gate.
27270
- const disabledDays = Array.isArray(this.disabledDays) ? this.disabledDays : null;
27271
- const blackoutDates = this.datepicker?.blackoutDates;
27272
- if (this._blackoutSet &&
27273
- this._cachedBlackoutDisabledDays === disabledDays &&
27274
- this._cachedBlackoutDates === blackoutDates) {
27275
- return this._blackoutSet;
27276
- }
27277
-
27278
- if (disabledDays && disabledDays.length > 0) {
27279
- this._warnDisabledDaysDeprecated();
27280
- }
27281
-
27282
- this._blackoutSet = buildBlackoutSet(disabledDays, blackoutDates);
27283
- this._cachedBlackoutDisabledDays = disabledDays;
27284
- this._cachedBlackoutDates = blackoutDates;
27285
- return this._blackoutSet;
27286
- }
27287
-
27288
- /**
27289
- * Per-class flag that gates the `disabledDays` deprecation warning so it
27290
- * fires exactly once per page no matter how many calendars or rebuild
27291
- * cycles encounter the legacy array.
27292
- * @private
27293
- */
27294
- static _warnedDisabledDaysDeprecation = false;
27295
-
27296
- /**
27297
- * One-time `console.debug` directing consumers from the legacy
27298
- * `disabledDays` Unix-timestamp API to the ISO `blackoutDates` API. Fires
27299
- * the first time `_getBlackoutSet` rebuilds from a non-empty
27300
- * `disabledDays`; subsequent calls (on this or any other AuroCalendar
27301
- * instance on the page) are silent.
27302
- * @private
27303
- * @returns {void}
27304
- */
27305
- _warnDisabledDaysDeprecated() {
27306
- if (AuroCalendar._warnedDisabledDaysDeprecation) {
27307
- return;
27308
- }
27309
- AuroCalendar._warnedDisabledDaysDeprecation = true;
27310
- // eslint-disable-next-line no-console
27311
- 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.');
27312
- }
27313
-
27314
27060
  /**
27315
27061
  * Computes the initial active date from data properties alone — no DOM required.
27316
27062
  * Priority:
@@ -27355,10 +27101,21 @@ class AuroCalendar extends RangeDatepicker {
27355
27101
  const minTs = Number.isFinite(rawMin) ? rawMin : -Infinity;
27356
27102
  const maxTs = Number.isFinite(rawMax) ? rawMax : Infinity;
27357
27103
 
27358
- // Build a Set of blackout timestamps for O(1) lookup. Memoized by the
27359
- // identity of the source arrays so rapid month nav doesn't rebuild the
27360
- // Set (and re-parse every ISO string) on every keypress.
27361
- const blackoutSet = this._getBlackoutSet();
27104
+ // Build a Set of blackout timestamps for O(1) lookup.
27105
+ const blackoutSet = new Set(this.disabledDays.map((day) => parseInt(day, 10)));
27106
+
27107
+ // Also include ISO-format blackoutDates from the datepicker if available.
27108
+ // Parse YYYY-MM-DD as local date to avoid UTC shift issues.
27109
+ const isoBlackouts = this.datepicker?.blackoutDates;
27110
+ if (Array.isArray(isoBlackouts)) {
27111
+ for (const isoStr of isoBlackouts) {
27112
+ const parts = isoStr.split('-');
27113
+ const ts = Math.floor(new Date(parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10)).getTime() / 1000);
27114
+ if (Number.isFinite(ts)) {
27115
+ blackoutSet.add(ts);
27116
+ }
27117
+ }
27118
+ }
27362
27119
 
27363
27120
  /**
27364
27121
  * A date (unix timestamp in seconds, midnight-aligned) is "enabled" when
@@ -27554,8 +27311,8 @@ class AuroCalendar extends RangeDatepicker {
27554
27311
 
27555
27312
  /**
27556
27313
  * Handles arrow key navigation on the calendar grid wrapper.
27557
- * Focus stays on the grid wrapper; only the visual active-cell indicator
27558
- * changes. The live region announces the new active cell.
27314
+ * Focus stays on the grid wrapper; only ariaActiveDescendantElement
27315
+ * and the visual active-cell indicator change.
27559
27316
  * @private
27560
27317
  * @param {KeyboardEvent} event - The keyboard event.
27561
27318
  * @returns {void}
@@ -27620,21 +27377,21 @@ class AuroCalendar extends RangeDatepicker {
27620
27377
  } else {
27621
27378
  this.handlePrevMonth({ skipActiveUpdate: true });
27622
27379
  }
27623
- this._afterMonthRender(() => {
27624
- const cells = this.getAllFocusableCells();
27625
- const target = cells.find((cell) => cell.day && cell.day.date === targetTs);
27626
- if (target) {
27627
- this.setActiveCell(target.day.date);
27628
- this.handleCellFocused({ detail: { date: target.day.date } });
27629
- } else {
27630
- const fallback = this.pickNearestCell(cells, targetTs, navDir);
27631
- if (fallback) {
27380
+ requestAnimationFrame(() => {
27381
+ requestAnimationFrame(() => {
27382
+ const cells = this.getAllFocusableCells();
27383
+ const target = cells.find((cell) => cell.day && cell.day.date === targetTs);
27384
+ if (target) {
27385
+ this.setActiveCell(target.day.date);
27386
+ this.handleCellFocused({ detail: { date: target.day.date } });
27387
+ } else if (cells.length > 0) {
27388
+ const fallback = navDir === 'next' ? cells[cells.length - 1] : cells[0];
27632
27389
  this.setActiveCell(fallback.day.date);
27633
27390
  this.handleCellFocused({ detail: { date: fallback.day.date } });
27634
27391
  }
27635
- }
27636
- // Re-focus grid wrapper after month change re-render
27637
- this.focusActiveCell();
27392
+ // Re-focus grid wrapper after month change re-render
27393
+ this.focusActiveCell();
27394
+ });
27638
27395
  });
27639
27396
  }
27640
27397
  }
@@ -27660,20 +27417,26 @@ class AuroCalendar extends RangeDatepicker {
27660
27417
  } else {
27661
27418
  this.handlePrevMonth({ skipActiveUpdate: true });
27662
27419
  }
27663
- this._afterMonthRender(() => {
27664
- const cells = this.getAllFocusableCells();
27665
- const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
27666
- if (target) {
27667
- this.setActiveCell(target.day.date);
27668
- this.handleCellFocused({ detail: { date: target.day.date } });
27669
- } else {
27670
- const nearest = this.pickNearestCell(cells, targetDate, navDirection);
27671
- if (nearest) {
27420
+ requestAnimationFrame(() => {
27421
+ requestAnimationFrame(() => {
27422
+ const cells = this.getAllFocusableCells();
27423
+ const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
27424
+ if (target) {
27425
+ this.setActiveCell(target.day.date);
27426
+ this.handleCellFocused({ detail: { date: target.day.date } });
27427
+ } else if (cells.length > 0) {
27428
+ let nearest = null;
27429
+
27430
+ if (navDirection === 'next') {
27431
+ [nearest] = cells;
27432
+ } else {
27433
+ nearest = cells[cells.length - 1];
27434
+ }
27672
27435
  this.setActiveCell(nearest.day.date);
27673
27436
  this.handleCellFocused({ detail: { date: nearest.day.date } });
27674
27437
  }
27675
- }
27676
- this.focusActiveCell();
27438
+ this.focusActiveCell();
27439
+ });
27677
27440
  });
27678
27441
  }
27679
27442
  }
@@ -27723,17 +27486,19 @@ class AuroCalendar extends RangeDatepicker {
27723
27486
  }
27724
27487
 
27725
27488
  this.handleNextMonth({ skipActiveUpdate: true });
27726
- this._afterMonthRender(() => {
27727
- const cells = this.getAllFocusableCells();
27728
- const target = cells.find((cell) => cell.day && cell.day.date === nextTs);
27729
- if (target) {
27730
- this.setActiveCell(target.day.date);
27731
- this.focusActiveCell();
27732
- } else if (cells.length > 0) {
27733
- // Fallback: first cell of the last rendered month
27734
- this.setActiveCell(cells[cells.length - 1].day.date);
27735
- this.focusActiveCell();
27736
- }
27489
+ requestAnimationFrame(() => {
27490
+ requestAnimationFrame(() => {
27491
+ const cells = this.getAllFocusableCells();
27492
+ const target = cells.find((cell) => cell.day && cell.day.date === nextTs);
27493
+ if (target) {
27494
+ this.setActiveCell(target.day.date);
27495
+ this.focusActiveCell();
27496
+ } else if (cells.length > 0) {
27497
+ // Fallback: first cell of the last rendered month
27498
+ this.setActiveCell(cells[cells.length - 1].day.date);
27499
+ this.focusActiveCell();
27500
+ }
27501
+ });
27737
27502
  });
27738
27503
  } else if (direction === 'prev' && this.showPrevMonthBtn) {
27739
27504
  // Navigate to previous month and focus the computed previous date.
@@ -27747,17 +27512,19 @@ class AuroCalendar extends RangeDatepicker {
27747
27512
  }
27748
27513
 
27749
27514
  this.handlePrevMonth({ skipActiveUpdate: true });
27750
- this._afterMonthRender(() => {
27751
- const cells = this.getAllFocusableCells();
27752
- const target = cells.find((cell) => cell.day && cell.day.date === prevTs);
27753
- if (target) {
27754
- this.setActiveCell(target.day.date);
27755
- this.focusActiveCell();
27756
- } else if (cells.length > 0) {
27757
- // Fallback: last cell of the first rendered month
27758
- this.setActiveCell(cells[0].day.date);
27759
- this.focusActiveCell();
27760
- }
27515
+ requestAnimationFrame(() => {
27516
+ requestAnimationFrame(() => {
27517
+ const cells = this.getAllFocusableCells();
27518
+ const target = cells.find((cell) => cell.day && cell.day.date === prevTs);
27519
+ if (target) {
27520
+ this.setActiveCell(target.day.date);
27521
+ this.focusActiveCell();
27522
+ } else if (cells.length > 0) {
27523
+ // Fallback: last cell of the first rendered month
27524
+ this.setActiveCell(cells[0].day.date);
27525
+ this.focusActiveCell();
27526
+ }
27527
+ });
27761
27528
  });
27762
27529
  }
27763
27530
  } else if (key === 'ArrowDown' || key === 'ArrowUp') {
@@ -27785,18 +27552,20 @@ class AuroCalendar extends RangeDatepicker {
27785
27552
  } else {
27786
27553
  this.handlePrevMonth({ skipActiveUpdate: true });
27787
27554
  }
27788
- this._afterMonthRender(() => {
27789
- const cells = this.getAllFocusableCells();
27790
- const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
27791
- if (target) {
27792
- this.setActiveCell(target.day.date);
27793
- this.focusActiveCell();
27794
- } else if (cells.length > 0) {
27795
- // Clamp to nearest focusable cell
27796
- const nearest = navDirection === 'next' ? cells[0] : cells[cells.length - 1];
27797
- this.setActiveCell(nearest.day.date);
27798
- this.focusActiveCell();
27799
- }
27555
+ requestAnimationFrame(() => {
27556
+ requestAnimationFrame(() => {
27557
+ const cells = this.getAllFocusableCells();
27558
+ const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
27559
+ if (target) {
27560
+ this.setActiveCell(target.day.date);
27561
+ this.focusActiveCell();
27562
+ } else if (cells.length > 0) {
27563
+ // Clamp to nearest focusable cell
27564
+ const nearest = navDirection === 'next' ? cells[0] : cells[cells.length - 1];
27565
+ this.setActiveCell(nearest.day.date);
27566
+ this.focusActiveCell();
27567
+ }
27568
+ });
27800
27569
  });
27801
27570
  }
27802
27571
  }
@@ -27835,9 +27604,8 @@ class AuroCalendar extends RangeDatepicker {
27835
27604
  return;
27836
27605
  }
27837
27606
 
27838
- // DOM focus stays on the grid wrapper while arrow keys move the active
27839
- // cell, so cell buttons never receive native focus. The debounced live
27840
- // region carries the full-context announcement instead.
27607
+ // With aria-activedescendant, the button no longer receives native focus,
27608
+ // so we use the debounced live region for the full context announcement.
27841
27609
  const announcement = this.buildFocusAnnouncement(date);
27842
27610
  this.announceFocusDebounced(announcement);
27843
27611
 
@@ -27907,10 +27675,10 @@ class AuroCalendar extends RangeDatepicker {
27907
27675
  return null;
27908
27676
  }
27909
27677
 
27910
- const departTs = new Date(parsedFrom * 1000).setHours(0, 0, 0, 0) / 1000;
27678
+ const departTs = startOfDay$2(parsedFrom * 1000) / 1000;
27911
27679
  const parsedTo = Number.parseInt(this.dateTo, 10);
27912
27680
  const hasTo = Number.isFinite(parsedTo);
27913
- const returnTs = hasTo ? new Date(parsedTo * 1000).setHours(0, 0, 0, 0) / 1000 : null;
27681
+ const returnTs = hasTo ? startOfDay$2(parsedTo * 1000) / 1000 : null;
27914
27682
 
27915
27683
  if (date === departTs) {
27916
27684
  return this.datepicker.rangeLabelStart || 'range start';
@@ -27924,22 +27692,36 @@ class AuroCalendar extends RangeDatepicker {
27924
27692
  if (hasTo && date > departTs && date < returnTs) {
27925
27693
  return this.datepicker.rangeLabelInRange || 'in range';
27926
27694
  }
27927
- if (!hasTo && date > departTs) {
27928
- return this.datepicker.rangeLabelEndPreview || 'previewing range end';
27929
- }
27930
27695
  return this.datepicker.rangeLabelAfterRange || 'after range';
27931
27696
  }
27932
27697
 
27933
27698
  /**
27934
- * Checks whether a given date is a blackout date. Delegates to the
27935
- * memoized `_getBlackoutSet` so the YYYY-MM-DD parsing and the
27936
- * legacy/ISO merge rules live in exactly one place (see `blackoutUtils.js`).
27699
+ * Checks whether a given date is a blackout date.
27937
27700
  * @private
27938
27701
  * @param {Number} dateTs - Unix timestamp (seconds).
27939
27702
  * @returns {Boolean} True if the date is blacked out.
27940
27703
  */
27941
27704
  isDateBlackout(dateTs) {
27942
- return this._getBlackoutSet().has(dateTs);
27705
+ // Check legacy disabledDays.
27706
+ if (Array.isArray(this.disabledDays) && this.disabledDays.length > 0) {
27707
+ if (this.disabledDays.findIndex((day) => parseInt(day, 10) === dateTs) !== -1) {
27708
+ return true;
27709
+ }
27710
+ }
27711
+
27712
+ // Check ISO blackoutDates.
27713
+ const blackoutDates = this.datepicker?.blackoutDates;
27714
+ if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
27715
+ const date = new Date(dateTs * 1000);
27716
+ const yyyy = date.getFullYear();
27717
+ const mm = String(date.getMonth() + 1).padStart(2, '0');
27718
+ const dd = String(date.getDate()).padStart(2, '0');
27719
+ if (blackoutDates.includes(`${yyyy}-${mm}-${dd}`)) {
27720
+ return true;
27721
+ }
27722
+ }
27723
+
27724
+ return false;
27943
27725
  }
27944
27726
 
27945
27727
  /**
@@ -28106,34 +27888,9 @@ class AuroCalendar extends RangeDatepicker {
28106
27888
  // the last one.
28107
27889
  if (this._announceRafId) {
28108
27890
  cancelAnimationFrame(this._announceRafId);
28109
- this._announceRafId = null;
28110
27891
  }
28111
- this._deliverAnnouncement(dateStr, 0);
28112
- }
28113
-
28114
- /**
28115
- * Writes `dateStr` to the live region. If the dropdown's dialog hasn't
28116
- * mounted yet (so getOrCreateLiveRegion can't attach), retries on the
28117
- * next animation frame up to MAX_LIVE_REGION_RETRIES instead of silently
28118
- * dropping the announcement. The retry uses the same `_announceRafId`
28119
- * the double-rAF below uses, so a newer announceSelection call (or
28120
- * disconnectedCallback) cancels any in-flight retry.
28121
- * @private
28122
- * @param {String} dateStr - The localized date string to announce.
28123
- * @param {Number} attempts - Number of prior retry attempts.
28124
- * @returns {void}
28125
- */
28126
- _deliverAnnouncement(dateStr, attempts) {
28127
27892
  const liveRegion = this.getOrCreateLiveRegion();
28128
27893
  if (!liveRegion) {
28129
- const MAX_LIVE_REGION_RETRIES = 10;
28130
- if (attempts < MAX_LIVE_REGION_RETRIES) {
28131
- this._announceRafId = requestAnimationFrame(() => {
28132
- this._deliverAnnouncement(dateStr, attempts + 1);
28133
- });
28134
- } else {
28135
- this._announceRafId = null;
28136
- }
28137
27894
  return;
28138
27895
  }
28139
27896
 
@@ -28319,7 +28076,7 @@ class AuroCalendar extends RangeDatepicker {
28319
28076
  </button>
28320
28077
  ` : undefined}
28321
28078
  </div>
28322
- <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}">
28079
+ <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}">
28323
28080
  ${this.renderAllCalendars()}
28324
28081
  </div>
28325
28082
  </div>
@@ -32204,7 +31961,7 @@ let AuroHelpText$2$1 = class AuroHelpText extends i$2 {
32204
31961
  }
32205
31962
  };
32206
31963
 
32207
- var formkitVersion$1$3 = '202606252132';
31964
+ var formkitVersion$1$3 = '202606252142';
32208
31965
 
32209
31966
  let AuroElement$2$2 = class AuroElement extends i$2 {
32210
31967
  static get properties() {
@@ -33476,6 +33233,7 @@ let AuroDropdown$3 = class AuroDropdown extends AuroElement$2$2 {
33476
33233
  role="${o$4(this.triggerContentFocusable ? undefined : this.a11yRole)}"
33477
33234
  aria-expanded="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.isPopoverVisible)}"
33478
33235
  aria-controls="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.dropdownId)}"
33236
+ aria-haspopup="${o$4(this.a11yRole === 'combobox' ? 'listbox' : undefined)}"
33479
33237
  aria-labelledby="${o$4(this.triggerContentFocusable ? undefined : 'triggerLabel')}"
33480
33238
  aria-disabled="${o$4(this.disabled ? 'true' : undefined)}"
33481
33239
  @focusin="${this.handleFocusin}"
@@ -38601,7 +38359,7 @@ function normalizeDates$2(context, ...dates) {
38601
38359
  * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))
38602
38360
  * //=> Tue Sep 02 2014 00:00:00
38603
38361
  */
38604
- function startOfDay$2(date, options) {
38362
+ function startOfDay$3(date, options) {
38605
38363
  const _date = toDate$2(date, options?.in);
38606
38364
  _date.setHours(0, 0, 0, 0);
38607
38365
  return _date;
@@ -38649,8 +38407,8 @@ function differenceInCalendarDays$2(laterDate, earlierDate, options) {
38649
38407
  earlierDate,
38650
38408
  );
38651
38409
 
38652
- const laterStartOfDay = startOfDay$2(laterDate_);
38653
- const earlierStartOfDay = startOfDay$2(earlierDate_);
38410
+ const laterStartOfDay = startOfDay$3(laterDate_);
38411
+ const earlierStartOfDay = startOfDay$3(earlierDate_);
38654
38412
 
38655
38413
  const laterTimestamp =
38656
38414
  +laterStartOfDay - getTimezoneOffsetInMilliseconds$2(laterStartOfDay);
@@ -45797,7 +45555,7 @@ let AuroHelpText$1$3 = class AuroHelpText extends i$2 {
45797
45555
  }
45798
45556
  };
45799
45557
 
45800
- var formkitVersion$7 = '202606252132';
45558
+ var formkitVersion$7 = '202606252142';
45801
45559
 
45802
45560
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
45803
45561
  // See LICENSE in the project root for license information.
@@ -47274,7 +47032,6 @@ class AuroDatePicker extends AuroElement$5 {
47274
47032
  this.rangeLabelBeforeRange = 'before range';
47275
47033
  this.rangeLabelInRange = 'in range';
47276
47034
  this.rangeLabelAfterRange = 'after range';
47277
- this.rangeLabelEndPreview = 'previewing range end';
47278
47035
  this.blackoutDates = [];
47279
47036
  this.blackoutLabel = 'unavailable';
47280
47037
  this.navLabelPrevMonth = 'Previous month';
@@ -47374,22 +47131,6 @@ class AuroDatePicker extends AuroElement$5 {
47374
47131
  */
47375
47132
  this.handleClick = this.handleClick.bind(this);
47376
47133
 
47377
- /**
47378
- * Single AbortController shared by every listener registered in the
47379
- * configure* methods. Lets disconnectedCallback tear all of them down
47380
- * with one abort() call.
47381
- *
47382
- * The genuine leak risk is the listeners attached to children that can
47383
- * outlive the host if they get reparented — `this.dropdown`,
47384
- * `this.calendar`, and the inputs inside the dropdown's slot.
47385
- * Listeners attached to `this` (e.g. focusin/focusout on the host)
47386
- * form a self-contained reference graph that the GC can collect with
47387
- * the host anyway, but they share the same signal so the cleanup
47388
- * pattern stays uniform across all configure* sites.
47389
- * @private
47390
- */
47391
- this._listenerAbortController = new AbortController();
47392
-
47393
47134
  /**
47394
47135
  * @private
47395
47136
  */
@@ -47438,7 +47179,6 @@ class AuroDatePicker extends AuroElement$5 {
47438
47179
 
47439
47180
  /**
47440
47181
  * Label announced for blackout (disabled but in-range) date cells.
47441
- * @default 'unavailable'
47442
47182
  */
47443
47183
  blackoutLabel: {
47444
47184
  type: String,
@@ -47455,7 +47195,6 @@ class AuroDatePicker extends AuroElement$5 {
47455
47195
 
47456
47196
  /**
47457
47197
  * Accessible label for the calendar grid containing the days of the month.
47458
- * @default 'Calendar days of the month'
47459
47198
  */
47460
47199
  calendarGridLabel: {
47461
47200
  type: String,
@@ -47618,7 +47357,6 @@ class AuroDatePicker extends AuroElement$5 {
47618
47357
 
47619
47358
  /**
47620
47359
  * Accessible label for the next month navigation button.
47621
- * @default 'Next month'
47622
47360
  */
47623
47361
  navLabelNextMonth: {
47624
47362
  type: String,
@@ -47627,7 +47365,6 @@ class AuroDatePicker extends AuroElement$5 {
47627
47365
 
47628
47366
  /**
47629
47367
  * Accessible label for the previous month navigation button.
47630
- * @default 'Previous month'
47631
47368
  */
47632
47369
  navLabelPrevMonth: {
47633
47370
  type: String,
@@ -47705,11 +47442,7 @@ class AuroDatePicker extends AuroElement$5 {
47705
47442
  },
47706
47443
 
47707
47444
  /**
47708
- * Label announced for cells after a fully selected range (both
47709
- * `dateFrom` and `dateTo` are set). While a range is still being
47710
- * picked (`dateFrom` set, `dateTo` unset), focused cells past the
47711
- * start use `rangeLabelEndPreview` instead.
47712
- * @default 'after range'
47445
+ * Label announced for cells after the range (or after start when no end is selected).
47713
47446
  */
47714
47447
  rangeLabelAfterRange: {
47715
47448
  type: String,
@@ -47718,7 +47451,6 @@ class AuroDatePicker extends AuroElement$5 {
47718
47451
 
47719
47452
  /**
47720
47453
  * Label announced for cells before the range start.
47721
- * @default 'before range'
47722
47454
  */
47723
47455
  rangeLabelBeforeRange: {
47724
47456
  type: String,
@@ -47727,27 +47459,14 @@ class AuroDatePicker extends AuroElement$5 {
47727
47459
 
47728
47460
  /**
47729
47461
  * Label announced for the range end date cell.
47730
- * @default 'range end'
47731
47462
  */
47732
47463
  rangeLabelEnd: {
47733
47464
  type: String,
47734
47465
  reflect: true
47735
47466
  },
47736
47467
 
47737
- /**
47738
- * Label announced for the focused cell while previewing a range end
47739
- * (dateFrom set, dateTo not yet selected). Tells AT users that
47740
- * pressing Enter would commit this cell as the range end.
47741
- * @default 'previewing range end'
47742
- */
47743
- rangeLabelEndPreview: {
47744
- type: String,
47745
- reflect: true
47746
- },
47747
-
47748
47468
  /**
47749
47469
  * Label announced for cells within the selected range.
47750
- * @default 'in range'
47751
47470
  */
47752
47471
  rangeLabelInRange: {
47753
47472
  type: String,
@@ -47756,7 +47475,6 @@ class AuroDatePicker extends AuroElement$5 {
47756
47475
 
47757
47476
  /**
47758
47477
  * Label announced for the range start date cell.
47759
- * @default 'range start'
47760
47478
  */
47761
47479
  rangeLabelStart: {
47762
47480
  type: String,
@@ -47764,7 +47482,7 @@ class AuroDatePicker extends AuroElement$5 {
47764
47482
  },
47765
47483
 
47766
47484
  /**
47767
- * Dates that the user should have for reference as part of their decision-making when selecting a date.
47485
+ * Dates that the user should have for reference as part of their decision making when selecting a date.
47768
47486
  * This should be a JSON string array of ISO date strings (`YYYY-MM-DD`).
47769
47487
  */
47770
47488
  referenceDates: {
@@ -48121,26 +47839,10 @@ class AuroDatePicker extends AuroElement$5 {
48121
47839
  // ─── Vendor calendar time conversions ─────────────────────────────────────
48122
47840
 
48123
47841
  /**
48124
- * Converts a Unix timestamp (seconds) from the vendored range-datepicker
48125
- * (`src/vendor/wc-range-datepicker/day.js`) to an ISO date string.
48126
- *
48127
- * Timezone contract:
48128
- * - INPUT: `time` is assumed to be the seconds-since-epoch of **local
48129
- * midnight** for the intended calendar day. The vendor's Day constructor
48130
- * builds it via `date-fns format(date, 't')` from a locally-constructed
48131
- * Date, so this assumption currently holds end-to-end.
48132
- * - OUTPUT: `dateFormatter.toISOFormatString` reads the Date's local
48133
- * getFullYear/getMonth/getDate components, so the returned YYYY-MM-DD
48134
- * string matches the local calendar day.
48135
- *
48136
- * If the vendor ever switches to emitting UTC-midnight timestamps, this
48137
- * conversion will silently shift the returned date by one day in zones
48138
- * west of UTC. Any vendor swap should re-verify this contract; the TZ
48139
- * regression suite (`npm run test:hst`, UTC-10) will catch the symptom.
48140
- *
47842
+ * Converts a Unix timestamp (seconds) from the vendor calendar to an ISO date string.
48141
47843
  * @private
48142
- * @param {number} time - Unix timestamp (seconds), local midnight of the day.
48143
- * @returns {string} ISO date string (yyyy-mm-dd) reflecting the local calendar day.
47844
+ * @param {number} time - Unix timestamp in seconds.
47845
+ * @returns {string} ISO date string (yyyy-mm-dd).
48144
47846
  */
48145
47847
  convertWcTimeToDate(time) {
48146
47848
  return dateFormatter$1.toISOFormatString(new Date(time * 1000));
@@ -48242,8 +47944,8 @@ class AuroDatePicker extends AuroElement$5 {
48242
47944
  }
48243
47945
  }
48244
47946
 
48245
- // Focus the calendar grid wrapper. The live region (announced just
48246
- // below) handles the SR announcement for the active cell.
47947
+ // Focus the calendar grid wrapper (aria-activedescendant handles
47948
+ // the SR announcement for the active cell).
48247
47949
  if (activeCell) {
48248
47950
  this.calendar.focusActiveCell();
48249
47951
 
@@ -48293,13 +47995,11 @@ class AuroDatePicker extends AuroElement$5 {
48293
47995
  this.dropdown.bibDialogLabel = labelElement.textContent.trim() || undefined;
48294
47996
  }
48295
47997
 
48296
- const { signal } = this._listenerAbortController;
48297
-
48298
47998
  this.dropdown.addEventListener('auroDropdown-triggerClick', () => {
48299
47999
  if (!this.isPopoverVisible) {
48300
48000
  this.dropdown.show();
48301
48001
  }
48302
- }, { signal });
48002
+ });
48303
48003
 
48304
48004
  this.dropdown.addEventListener('auroDropdown-toggled', () => {
48305
48005
  this.notifyDatepickerToggled();
@@ -48317,7 +48017,7 @@ class AuroDatePicker extends AuroElement$5 {
48317
48017
  if (this.valueObject) {
48318
48018
  this.centralDate = this.value;
48319
48019
  } else if (!this.centralDate && !this.calendarStartDate && !this.minDate) {
48320
- this.centralDate = dateFormatter$1.toISOFormatString(new Date());
48020
+ this.centralDate = new Date();
48321
48021
  }
48322
48022
  }
48323
48023
 
@@ -48397,7 +48097,7 @@ class AuroDatePicker extends AuroElement$5 {
48397
48097
  this.forceScrollOnNextMobileCalendarRender = false;
48398
48098
  }, 0);
48399
48099
  }
48400
- }, { signal });
48100
+ });
48401
48101
 
48402
48102
  // Handle responsive strategy changes while the dropdown is open
48403
48103
  // (e.g. resizing from desktop → mobile or vice versa).
@@ -48444,7 +48144,7 @@ class AuroDatePicker extends AuroElement$5 {
48444
48144
  });
48445
48145
  });
48446
48146
  }
48447
- }, { signal });
48147
+ });
48448
48148
  }
48449
48149
 
48450
48150
  /**
@@ -48457,8 +48157,6 @@ class AuroDatePicker extends AuroElement$5 {
48457
48157
 
48458
48158
  this.inputList = [...this.dropdown.querySelectorAll(this.inputTag._$litStatic$)];
48459
48159
 
48460
- const { signal } = this._listenerAbortController;
48461
-
48462
48160
  this.inputList.forEach((input, index) => {
48463
48161
  input.addEventListener('input', (event) => {
48464
48162
  event.stopPropagation();
@@ -48470,7 +48168,7 @@ class AuroDatePicker extends AuroElement$5 {
48470
48168
  }
48471
48169
 
48472
48170
  this.notifyValueChanged();
48473
- }, { signal });
48171
+ });
48474
48172
 
48475
48173
  input.addEventListener('auroFormElement-validated', (evt) => {
48476
48174
  // not to bubble up input's validated event.
@@ -48486,7 +48184,7 @@ class AuroDatePicker extends AuroElement$5 {
48486
48184
  this.validity = evt.detail.validity;
48487
48185
  this.errorMessage = evt.detail.message;
48488
48186
  }
48489
- }, { signal });
48187
+ });
48490
48188
  });
48491
48189
  }
48492
48190
 
@@ -48500,32 +48198,19 @@ class AuroDatePicker extends AuroElement$5 {
48500
48198
  this.calendar.datepicker = this;
48501
48199
  this.calendar.dropdown = this.dropdown;
48502
48200
 
48503
- const { signal } = this._listenerAbortController;
48504
-
48505
48201
  this.calendar.addEventListener('auroCalendar-dateSelected', () => {
48506
- // Compare the input's ISO value against the *converted* calendar
48507
- // timestamp (the vendor's `dateFrom`/`dateTo` are Unix-seconds
48508
- // strings — comparing the input ISO directly against them would
48509
- // never match, so the write would fire on every event and emit
48510
- // redundant input/change activity).
48511
- if (this.calendar.dateFrom !== undefined) {
48512
- const fromIso = this.convertWcTimeToDate(this.calendar.dateFrom);
48513
- if (this.inputList[0].value !== fromIso) {
48514
- this.inputList[0].value = fromIso;
48515
- }
48202
+ if (this.inputList[0].value !== this.calendar.dateFrom && this.calendar.dateFrom !== undefined) {
48203
+ this.inputList[0].value = this.convertWcTimeToDate(this.calendar.dateFrom);
48516
48204
  }
48517
48205
 
48518
- if (this.inputList[1] && this.calendar.dateTo) {
48519
- const toIso = this.convertWcTimeToDate(this.calendar.dateTo);
48520
- if (this.inputList[1].value !== toIso) {
48521
- this.inputList[1].value = toIso;
48522
- }
48206
+ if (this.inputList[1] && this.calendar.dateTo && this.inputList[1].value !== this.calendar.dateTo) {
48207
+ this.inputList[1].value = this.convertWcTimeToDate(this.calendar.dateTo);
48523
48208
  }
48524
- }, { signal });
48209
+ });
48525
48210
 
48526
48211
  this.calendar.addEventListener('auroCalendar-dismissRequest', () => {
48527
48212
  this.dropdown.hide();
48528
- }, { signal });
48213
+ });
48529
48214
 
48530
48215
  this.calendar.addEventListener('auroCalendar-centralDateChanged', (event) => {
48531
48216
  const match = this.centralDateObject && this.util.datesMatch(event.detail.date, this.centralDateObject);
@@ -48535,7 +48220,7 @@ class AuroDatePicker extends AuroElement$5 {
48535
48220
  }
48536
48221
 
48537
48222
  this.notifyMonthChanged(event);
48538
- }, { signal });
48223
+ });
48539
48224
  }
48540
48225
 
48541
48226
  /**
@@ -48544,17 +48229,10 @@ class AuroDatePicker extends AuroElement$5 {
48544
48229
  * @returns {void}
48545
48230
  */
48546
48231
  configureDatepicker() {
48547
- // These listeners are on `this` (the host), so they would GC with the
48548
- // host even without the abort signal — see the leak rationale on
48549
- // `_listenerAbortController`. The signal is still passed for uniform
48550
- // cleanup semantics with the child-element listeners in the other
48551
- // configure* methods.
48552
- const { signal } = this._listenerAbortController;
48553
-
48554
48232
  this.addEventListener('focusin', () => {
48555
48233
  this.touched = true;
48556
48234
  this.hasFocus = true;
48557
- }, { signal });
48235
+ });
48558
48236
 
48559
48237
  this.addEventListener('focusout', () => {
48560
48238
  this.hasFocus = false;
@@ -48566,7 +48244,7 @@ class AuroDatePicker extends AuroElement$5 {
48566
48244
  if (!this.matches(':focus-within')) {
48567
48245
  this.validate();
48568
48246
  }
48569
- }, { signal });
48247
+ });
48570
48248
 
48571
48249
  if (this.valueObject) {
48572
48250
  this.calendar.dateFrom = this.convertToWcValidTime(this.valueObject);
@@ -48764,41 +48442,6 @@ class AuroDatePicker extends AuroElement$5 {
48764
48442
  return this.validity !== undefined && this.validity !== 'valid';
48765
48443
  }
48766
48444
 
48767
- /**
48768
- * Per-class dedup set used by `_warnInvalidLocale`. Static so the dedup
48769
- * spans every datepicker instance on the page; lives on the class (not
48770
- * at module scope) so it stays an encapsulated implementation detail of
48771
- * this component and does not interfere with WCA's class-JSDoc
48772
- * attachment.
48773
- * @private
48774
- */
48775
- static _warnedInvalidLocales = new Set();
48776
-
48777
- /**
48778
- * Logs a one-time `console.debug` when an unsupported locale falls back to
48779
- * en-US. Deduped by the offending tag so noisy re-renders that resurface
48780
- * the same bad value stay quiet, but each new bad value still signals so
48781
- * consumers can spot the typo or missing tag.
48782
- * @private
48783
- * @param {string|undefined} badLocale - The locale value that failed.
48784
- * @returns {void}
48785
- */
48786
- _warnInvalidLocale(badLocale) {
48787
- // Stringify without coalescing — `String(undefined)` / `String(null)`
48788
- // surface the actual offending value in the log, instead of the
48789
- // ambiguous `Locale ""` that `String(badLocale ?? '')` would produce.
48790
- // Dedup still works correctly because each unique stringification
48791
- // becomes its own Set entry.
48792
- const key = String(badLocale);
48793
- const seen = AuroDatePicker._warnedInvalidLocales;
48794
- if (seen.has(key)) {
48795
- return;
48796
- }
48797
- seen.add(key);
48798
- // eslint-disable-next-line no-console
48799
- 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".`);
48800
- }
48801
-
48802
48445
  /**
48803
48446
  * Lifecycle method to check if the locale is valid.
48804
48447
  * @ignore
@@ -48809,15 +48452,10 @@ class AuroDatePicker extends AuroElement$5 {
48809
48452
  if (changedProperties.has('locale')) {
48810
48453
  try {
48811
48454
  const supported = Intl.DateTimeFormat.supportedLocalesOf([this.locale], { localeMatcher: 'lookup' });
48812
- if (supported.length > 0) {
48813
- this._validLocale = this.locale;
48814
- } else {
48815
- this._validLocale = 'en-US';
48816
- this._warnInvalidLocale(this.locale);
48817
- }
48455
+ this._validLocale = supported.length > 0 ? this.locale : 'en-US';
48818
48456
  } catch {
48457
+ console.debug(`[AuroDatePicker] The locale "${this.locale}" is not valid. Falling back to "en-US".`); // eslint-disable-line no-console
48819
48458
  this._validLocale = 'en-US';
48820
- this._warnInvalidLocale(this.locale);
48821
48459
  }
48822
48460
 
48823
48461
  const previousLocaleFormat = getDateFormatFromLocale$1(changedProperties.get('locale'));
@@ -48899,6 +48537,8 @@ class AuroDatePicker extends AuroElement$5 {
48899
48537
  // Skip centralDate update when user clicked a cell in range mode
48900
48538
  // to prevent the displayed months from shifting
48901
48539
  this.centralDate = this.value;
48540
+ //TODO: TEST THIS CHANGE
48541
+ // this.calendarRenderUtil.updateCentralDate(this, this.value);
48902
48542
  }
48903
48543
 
48904
48544
  this.setHasValue();
@@ -48958,6 +48598,8 @@ class AuroDatePicker extends AuroElement$5 {
48958
48598
  // Skip centralDate update when user clicked a cell in range mode
48959
48599
  // to prevent the displayed months from shifting
48960
48600
  this.centralDate = this.valueEnd;
48601
+ // TODO: TEST THIS CHANGE
48602
+ // this.calendarRenderUtil.updateCentralDate(this, this.formattedValueEnd);
48961
48603
  }
48962
48604
 
48963
48605
  this.validate();
@@ -49099,7 +48741,7 @@ class AuroDatePicker extends AuroElement$5 {
49099
48741
  * @returns {void}
49100
48742
  */
49101
48743
  configureClickHandler() {
49102
- this.addEventListener('click', this.handleClick, { signal: this._listenerAbortController.signal });
48744
+ this.addEventListener('click', this.handleClick);
49103
48745
  }
49104
48746
 
49105
48747
  firstUpdated() {
@@ -49107,15 +48749,6 @@ class AuroDatePicker extends AuroElement$5 {
49107
48749
  // Add the tag name as an attribute if it is different than the component name
49108
48750
  this.runtimeUtils.handleComponentTagRename(this, 'auro-datepicker');
49109
48751
 
49110
- // If the element was disconnected before this first render finished,
49111
- // disconnectedCallback's microtask already aborted the controller. The
49112
- // connectedCallback reinit guard skips that case because `hasUpdated`
49113
- // is still false. Mint a fresh controller here so configure* registers
49114
- // listeners against a live signal.
49115
- if (this._listenerAbortController.signal.aborted) {
49116
- this._listenerAbortController = new AbortController();
49117
- }
49118
-
49119
48752
  this.configureDropdown();
49120
48753
  this.configureInput();
49121
48754
  this.configureCalendar();
@@ -49127,36 +48760,9 @@ class AuroDatePicker extends AuroElement$5 {
49127
48760
  connectedCallback() {
49128
48761
  super.connectedCallback();
49129
48762
 
49130
- // True reconnect after `disconnectedCallback` aborted our controller:
49131
- // the existing signal is dead, so listeners registered against it
49132
- // would never fire. Create a fresh controller and re-run the
49133
- // configure* wiring (each method is idempotent — it just re-caches
49134
- // child refs and re-registers listeners against the new signal).
49135
- // `hasUpdated` gates this so the *first* connect (which precedes
49136
- // firstUpdated) still falls through to firstUpdated's initial wiring.
49137
- if (this.hasUpdated && this._listenerAbortController.signal.aborted) {
49138
- this._listenerAbortController = new AbortController();
49139
- this.configureDropdown();
49140
- this.configureInput();
49141
- this.configureCalendar();
49142
- this.configureDatepicker();
49143
- this.configureClickHandler();
49144
- }
49145
-
49146
48763
  this.locale = this.domHandler.getLocale(this);
49147
48764
  }
49148
48765
 
49149
- disconnectedCallback() {
49150
- super.disconnectedCallback();
49151
- // Defer so that re-parenting (auro-drawer slotting it into a dialog,
49152
- // for example) does not abort listeners we still need after reconnect.
49153
- queueMicrotask(() => {
49154
- if (!this.isConnected) {
49155
- this._listenerAbortController.abort();
49156
- }
49157
- });
49158
- }
49159
-
49160
48766
  // layout render methods
49161
48767
  // ------------------------------------
49162
48768
 
@@ -50652,7 +50258,7 @@ let AuroHelpText$1$2 = class AuroHelpText extends i$2 {
50652
50258
  }
50653
50259
  };
50654
50260
 
50655
- var formkitVersion$1$2 = '202606252132';
50261
+ var formkitVersion$1$2 = '202606252142';
50656
50262
 
50657
50263
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
50658
50264
  // See LICENSE in the project root for license information.
@@ -54980,7 +54586,7 @@ let AuroHelpText$6 = class AuroHelpText extends i$2 {
54980
54586
  }
54981
54587
  };
54982
54588
 
54983
- var formkitVersion$6 = '202606252132';
54589
+ var formkitVersion$6 = '202606252142';
54984
54590
 
54985
54591
  let AuroElement$1$2 = class AuroElement extends i$2 {
54986
54592
  static get properties() {
@@ -56252,6 +55858,7 @@ let AuroDropdown$2 = class AuroDropdown extends AuroElement$1$2 {
56252
55858
  role="${o$4(this.triggerContentFocusable ? undefined : this.a11yRole)}"
56253
55859
  aria-expanded="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.isPopoverVisible)}"
56254
55860
  aria-controls="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.dropdownId)}"
55861
+ aria-haspopup="${o$4(this.a11yRole === 'combobox' ? 'listbox' : undefined)}"
56255
55862
  aria-labelledby="${o$4(this.triggerContentFocusable ? undefined : 'triggerLabel')}"
56256
55863
  aria-disabled="${o$4(this.disabled ? 'true' : undefined)}"
56257
55864
  @focusin="${this.handleFocusin}"
@@ -58920,7 +58527,7 @@ let AuroHelpText$5 = class AuroHelpText extends i$2 {
58920
58527
  }
58921
58528
  };
58922
58529
 
58923
- var formkitVersion$5 = '202606252132';
58530
+ var formkitVersion$5 = '202606252142';
58924
58531
 
58925
58532
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
58926
58533
  // See LICENSE in the project root for license information.
@@ -60670,7 +60277,7 @@ let AuroHelpText$4 = class AuroHelpText extends i$2 {
60670
60277
  }
60671
60278
  };
60672
60279
 
60673
- var formkitVersion$4 = '202606252132';
60280
+ var formkitVersion$4 = '202606252142';
60674
60281
 
60675
60282
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
60676
60283
  // See LICENSE in the project root for license information.
@@ -65885,7 +65492,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$2 {
65885
65492
  }
65886
65493
  };
65887
65494
 
65888
- var formkitVersion$2 = '202606252132';
65495
+ var formkitVersion$2 = '202606252142';
65889
65496
 
65890
65497
  let AuroElement$2$1 = class AuroElement extends i$2 {
65891
65498
  static get properties() {
@@ -67157,6 +66764,7 @@ let AuroDropdown$1 = class AuroDropdown extends AuroElement$2$1 {
67157
66764
  role="${o$4(this.triggerContentFocusable ? undefined : this.a11yRole)}"
67158
66765
  aria-expanded="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.isPopoverVisible)}"
67159
66766
  aria-controls="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.dropdownId)}"
66767
+ aria-haspopup="${o$4(this.a11yRole === 'combobox' ? 'listbox' : undefined)}"
67160
66768
  aria-labelledby="${o$4(this.triggerContentFocusable ? undefined : 'triggerLabel')}"
67161
66769
  aria-disabled="${o$4(this.disabled ? 'true' : undefined)}"
67162
66770
  @focusin="${this.handleFocusin}"
@@ -79478,7 +79086,7 @@ let AuroHelpText$1$1 = class AuroHelpText extends i$2 {
79478
79086
  }
79479
79087
  };
79480
79088
 
79481
- var formkitVersion$1$1 = '202606252132';
79089
+ var formkitVersion$1$1 = '202606252142';
79482
79090
 
79483
79091
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
79484
79092
  // See LICENSE in the project root for license information.
@@ -80599,7 +80207,7 @@ let AuroBibtemplate$1 = class AuroBibtemplate extends i$2 {
80599
80207
  }
80600
80208
  };
80601
80209
 
80602
- var formkitVersion$3 = '202606252132';
80210
+ var formkitVersion$3 = '202606252142';
80603
80211
 
80604
80212
  var styleCss$1$3 = i$4`.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}`;
80605
80213
 
@@ -85412,19 +85020,24 @@ const selectKeyboardStrategy = {
85412
85020
  },
85413
85021
 
85414
85022
  End(component, evt, ctx) {
85415
- if (!ctx.isExpanded) {
85416
- return;
85417
- }
85418
85023
  evt.preventDefault();
85419
85024
  evt.stopPropagation();
85420
85025
  // `pop()` is safe here: getEnabledOptions returns a fresh filtered array.
85421
85026
  const lastOption = getEnabledOptions(component.menu).pop();
85422
- if (lastOption) {
85423
- component.menu.updateActiveOption(lastOption);
85027
+ if (!lastOption) {
85028
+ return;
85029
+ }
85030
+ if (!ctx.isExpanded) {
85031
+ component.dropdown.show();
85424
85032
  }
85033
+ component.menu.updateActiveOption(lastOption);
85425
85034
  },
85426
85035
 
85427
85036
  Enter(component, evt, ctx) {
85037
+ // Prevent the keypress from bubbling to parent containers (e.g., forms)
85038
+ // which could interpret Enter as a submit. Matches APG select-only combobox
85039
+ // and native <select> behavior: Enter opens the listbox when closed, selects
85040
+ // the active option when open — it does not submit a parent form.
85428
85041
  evt.preventDefault();
85429
85042
  evt.stopPropagation();
85430
85043
  if (!ctx.isExpanded) {
@@ -85435,15 +85048,16 @@ const selectKeyboardStrategy = {
85435
85048
  },
85436
85049
 
85437
85050
  Home(component, evt, ctx) {
85438
- if (!ctx.isExpanded) {
85439
- return;
85440
- }
85441
85051
  evt.preventDefault();
85442
85052
  evt.stopPropagation();
85443
85053
  const [firstOption] = getEnabledOptions(component.menu);
85444
- if (firstOption) {
85445
- component.menu.updateActiveOption(firstOption);
85054
+ if (!firstOption) {
85055
+ return;
85056
+ }
85057
+ if (!ctx.isExpanded) {
85058
+ component.dropdown.show();
85446
85059
  }
85060
+ component.menu.updateActiveOption(firstOption);
85447
85061
  },
85448
85062
 
85449
85063
  Tab(component, evt, ctx) {
@@ -89390,7 +89004,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
89390
89004
  }
89391
89005
  };
89392
89006
 
89393
- var formkitVersion$1 = '202606252132';
89007
+ var formkitVersion$1 = '202606252142';
89394
89008
 
89395
89009
  class AuroElement extends i$2 {
89396
89010
  static get properties() {
@@ -90662,6 +90276,7 @@ class AuroDropdown extends AuroElement {
90662
90276
  role="${o$4(this.triggerContentFocusable ? undefined : this.a11yRole)}"
90663
90277
  aria-expanded="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.isPopoverVisible)}"
90664
90278
  aria-controls="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.dropdownId)}"
90279
+ aria-haspopup="${o$4(this.a11yRole === 'combobox' ? 'listbox' : undefined)}"
90665
90280
  aria-labelledby="${o$4(this.triggerContentFocusable ? undefined : 'triggerLabel')}"
90666
90281
  aria-disabled="${o$4(this.disabled ? 'true' : undefined)}"
90667
90282
  @focusin="${this.handleFocusin}"
@@ -91411,7 +91026,7 @@ class AuroHelpText extends i$2 {
91411
91026
  }
91412
91027
  }
91413
91028
 
91414
- var formkitVersion = '202606252132';
91029
+ var formkitVersion = '202606252142';
91415
91030
 
91416
91031
  var styleCss = i$4`.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}`;
91417
91032
 
@@ -91743,14 +91358,6 @@ class AuroSelect extends AuroElement$1 {
91743
91358
  reflect: true
91744
91359
  },
91745
91360
 
91746
- /**
91747
- * @private
91748
- */
91749
- options: {
91750
- type: Array,
91751
- state: true
91752
- },
91753
-
91754
91361
  /**
91755
91362
  * Specifies the current selected menuOption. Default type is `HTMLElement`, changing to `Array<HTMLElement>` when `multiSelect` is true.
91756
91363
  * @type {HTMLElement|Array<HTMLElement>}
@@ -92038,16 +91645,68 @@ class AuroSelect extends AuroElement$1 {
92038
91645
  this.dropdown.dropdownWidth = this.customBibWidth;
92039
91646
  }
92040
91647
 
92041
- // Pass label text to the dropdown bib for accessible dialog naming
92042
- const labelElement = this.querySelector('span[slot="label"]');
92043
- if (labelElement) {
92044
- this.dropdown.bibDialogLabel = labelElement.textContent.trim() || undefined;
92045
- }
91648
+ this._syncLabelText();
92046
91649
 
92047
91650
  // Exposes the CSS parts from the dropdown for styling
92048
91651
  this.dropdown.exposeCssParts();
92049
91652
  }
92050
91653
 
91654
+ /**
91655
+ * Reads the current label slot text and pushes it to the dropdown bib
91656
+ * (for dialog naming) and the menu (for listbox aria-label). Safe to call
91657
+ * before either child has been wired up — each branch self-guards.
91658
+ * @private
91659
+ */
91660
+ _syncLabelText() {
91661
+ const labelElement = this.querySelector('[slot="label"]');
91662
+ const text = labelElement ? labelElement.textContent.trim() : '';
91663
+ if (this.dropdown) {
91664
+ this.dropdown.bibDialogLabel = text || undefined;
91665
+ }
91666
+ if (this.menu) {
91667
+ if (text) {
91668
+ this.menu.setAttribute('aria-label', text);
91669
+ } else {
91670
+ this.menu.removeAttribute('aria-label');
91671
+ }
91672
+ }
91673
+ }
91674
+
91675
+ /**
91676
+ * Keeps the dialog/menu accessible names in sync when consumers mutate the
91677
+ * label slot at runtime (e.g., i18n locale swap). `slotchange` alone is
91678
+ * insufficient — it doesn't fire when textContent of an already-assigned
91679
+ * slotted node changes, which is the common case. We scope the observer to
91680
+ * the label node itself (not the whole host subtree) so option-content
91681
+ * mutations don't trigger label re-syncs, and re-target on `slotchange`
91682
+ * when consumers add or replace the label element.
91683
+ * @private
91684
+ */
91685
+ _observeLabelChanges() {
91686
+ if (this._labelObserver) return;
91687
+ this._labelObserver = new MutationObserver(() => this._syncLabelText());
91688
+
91689
+ const retarget = () => {
91690
+ this._labelObserver.disconnect();
91691
+ const labelElement = this.querySelector('[slot="label"]');
91692
+ if (labelElement) {
91693
+ this._labelObserver.observe(labelElement, {
91694
+ childList: true,
91695
+ subtree: true,
91696
+ characterData: true
91697
+ });
91698
+ }
91699
+ this._syncLabelText();
91700
+ };
91701
+
91702
+ retarget();
91703
+
91704
+ this._retargetLabelObserver = retarget;
91705
+ this.shadowRoot.querySelectorAll('slot[name="label"]').forEach((slot) => {
91706
+ slot.addEventListener('slotchange', retarget);
91707
+ });
91708
+ }
91709
+
92051
91710
  /**
92052
91711
  * This will register this element with the browser.
92053
91712
  * @param {string} [name="auro-select"] - The name of element that you want to register to.
@@ -92198,11 +91857,7 @@ class AuroSelect extends AuroElement$1 {
92198
91857
  this.updateMenuShapeSize();
92199
91858
  this.setMenuValue(this.value);
92200
91859
 
92201
- // Set accessible name on the menu for screen readers based on the label slot content
92202
- const labelElement = this.querySelector('[slot="label"]');
92203
- if (labelElement) {
92204
- this.menu.setAttribute('aria-label', labelElement.textContent.trim());
92205
- }
91860
+ this._syncLabelText();
92206
91861
 
92207
91862
  if (this.multiSelect) {
92208
91863
  this.menu.multiSelect = this.multiSelect;
@@ -92214,8 +91869,21 @@ class AuroSelect extends AuroElement$1 {
92214
91869
  if (typeof this.menu.initItems === 'function') {
92215
91870
  this.menu.initItems();
92216
91871
  }
92217
- this.options = this.menu.options;
92218
91872
  this.updateOptionPositions();
91873
+ // renderNativeSelect reads this.menu.options, which the parent doesn't
91874
+ // observe — request an update so the hidden native <option> list reflects
91875
+ // the menu's options after initItems populates them.
91876
+ this.requestUpdate();
91877
+
91878
+ // Keep aria-setsize/aria-posinset (and the native <option> list) in sync
91879
+ // when the menu re-initializes its items — e.g., slotchange, async/lazy
91880
+ // loads, value-triggered re-init. Without this, stale set-size is
91881
+ // announced and the native select goes stale after dynamic mutations.
91882
+ this.menu.addEventListener('auroMenu-optionsChange', () => {
91883
+ this.updateOptionPositions();
91884
+ this.requestUpdate();
91885
+ });
91886
+
92219
91887
  this.menu.addEventListener("auroMenu-loadingChange", (event) => this.handleMenuLoadingChange(event));
92220
91888
 
92221
91889
  this.menu.addEventListener("auroMenu-selectValueFailure", () => {
@@ -92234,11 +91902,22 @@ class AuroSelect extends AuroElement$1 {
92234
91902
  this.dropdown.setActiveDescendant(this.optionActive);
92235
91903
  }
92236
91904
 
92237
- // Announce the active option for screen readers
92238
- if (this.optionActive) {
91905
+ // Announce the active option for screen readers. Skip when the activated
91906
+ // option is already selected: Enter triggers an auroMenu-selectedOption
91907
+ // re-announce, and aria-selected on the active descendant otherwise
91908
+ // conveys state without an explicit utterance.
91909
+ if (this.optionActive && !this.optionActive.hasAttribute('selected')) {
92239
91910
  const optionText = this.optionActive.textContent.trim();
92240
- const selectedState = this.optionActive.hasAttribute('selected') ? ', selected' : ', not selected';
92241
- announceToScreenReader(this._getAnnouncementRoot(), `${optionText}${selectedState}`);
91911
+ const message = `${optionText}, not selected`;
91912
+ if (this.dropdown.isPopoverVisible) {
91913
+ announceToScreenReader(this._getAnnouncementRoot(), message);
91914
+ } else {
91915
+ // Typeahead-on-closed fires this event before `show()` flips
91916
+ // isPopoverVisible. Defer so the announcement targets the bib's
91917
+ // live region once the fullscreen <dialog> opens — otherwise it
91918
+ // lands in the host root, which is inert under the active modal.
91919
+ queueMicrotask(() => announceToScreenReader(this._getAnnouncementRoot(), message));
91920
+ }
92242
91921
  }
92243
91922
 
92244
91923
  if (this.dropdown.isPopoverVisible) {
@@ -92370,24 +92049,32 @@ class AuroSelect extends AuroElement$1 {
92370
92049
 
92371
92050
  this.typeaheadBuffer += key;
92372
92051
 
92373
- const isRepeatedChar = this.typeaheadBuffer.length > 1 && new Set(this.typeaheadBuffer).size === 1;
92052
+ // Prefer the literal buffer as a prefix per WAI-ARIA APG ("focus moves to the
92053
+ // next item with a name that starts with the string of characters typed").
92054
+ // Only fall back to single-char cycling when the repeated buffer has no
92055
+ // longer prefix match — e.g. "aa" cycles through ["Apple", "Apricot"] only
92056
+ // because no option starts with "aa".
92057
+ let match = options.find((option) => this._getOptionDisplayText(option).startsWith(this.typeaheadBuffer));
92374
92058
 
92375
- let match = null;
92059
+ const isRepeatedChar = !match && this.typeaheadBuffer.length > 1 && new Set(this.typeaheadBuffer).size === 1;
92376
92060
  if (isRepeatedChar) {
92377
92061
  const matches = options.filter((option) => this._getOptionDisplayText(option).startsWith(key));
92378
92062
  if (matches.length) {
92379
92063
  const cycleIndex = (this.typeaheadBuffer.length - 1) % matches.length;
92380
92064
  match = matches[cycleIndex];
92381
92065
  }
92382
- } else {
92383
- match = options.find((option) => this._getOptionDisplayText(option).startsWith(this.typeaheadBuffer));
92384
92066
  }
92385
92067
 
92068
+ // Intentional: no-match leaves the bib closed (deviates from APG / some native <select>).
92386
92069
  if (match) {
92070
+ // Pre-stash the match so the auroDropdown-toggled handler's `!optionActive`
92071
+ // guard short-circuits and skips the firstActive/selected fallback —
92072
+ // otherwise show() synchronously fires the handler, which writes
92073
+ // aria-activedescendant once before we overwrite it.
92074
+ this.menu.updateActiveOption(match);
92387
92075
  if (!this.dropdown.isPopoverVisible) {
92388
92076
  this.dropdown.show();
92389
92077
  }
92390
- this.menu.updateActiveOption(match);
92391
92078
  }
92392
92079
  }
92393
92080
 
@@ -92504,6 +92191,16 @@ class AuroSelect extends AuroElement$1 {
92504
92191
  disconnectedCallback() {
92505
92192
  super.disconnectedCallback();
92506
92193
  this._clearTypeaheadBuffer();
92194
+ if (this._labelObserver) {
92195
+ this._labelObserver.disconnect();
92196
+ this._labelObserver = null;
92197
+ }
92198
+ if (this._retargetLabelObserver && this.shadowRoot) {
92199
+ this.shadowRoot.querySelectorAll('slot[name="label"]').forEach((slot) => {
92200
+ slot.removeEventListener('slotchange', this._retargetLabelObserver);
92201
+ });
92202
+ this._retargetLabelObserver = null;
92203
+ }
92507
92204
  }
92508
92205
 
92509
92206
  // lifecycle runs only after the element's DOM has been updated the first time
@@ -92514,6 +92211,7 @@ class AuroSelect extends AuroElement$1 {
92514
92211
  this.configureDropdown();
92515
92212
  this.configureMenu();
92516
92213
  this.configureSelect();
92214
+ this._observeLabelChanges();
92517
92215
  }
92518
92216
 
92519
92217
  setMenuValue(value) {
@@ -92650,21 +92348,8 @@ class AuroSelect extends AuroElement$1 {
92650
92348
  if (!selectedOption) return;
92651
92349
  const selectedValue = selectedOption.value;
92652
92350
 
92653
- if (this.multiSelect) {
92654
- const currentArray = this.menu.value || [];
92655
-
92656
- if (!currentArray.includes(selectedValue)) {
92657
- this.value = JSON.stringify([
92658
- ...currentArray,
92659
- selectedValue
92660
- ]);
92661
- }
92662
- } else {
92663
- const currentValue = this.value;
92664
-
92665
- if (currentValue !== selectedValue) {
92666
- this.value = selectedValue;
92667
- }
92351
+ if (this.value !== selectedValue) {
92352
+ this.value = selectedValue;
92668
92353
  }
92669
92354
  }
92670
92355