@aurodesignsystem-dev/auro-formkit 0.0.0-pr1510.3 → 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 +200 -608
  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 +200 -608
  37. package/components/datepicker/demo/styles.scss +1 -0
  38. package/components/datepicker/dist/index.js +200 -608
  39. package/components/datepicker/dist/registered.js +200 -608
  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 +348 -677
  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 +348 -677
  58. package/components/form/demo/index.js +5 -0
  59. package/components/form/demo/index.min.js +348 -677
  60. package/components/form/demo/registerDemoDeps.js +23 -0
  61. package/components/form/demo/registerDemoDeps.min.js +348 -677
  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 +577 -863
  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 = '202606252324';
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 = '202606252324';
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,22 +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 {
27733
- // Same nearest-by-date fallback handleGridKeyDown uses — direct
27734
- // `cells[length - 1]` would land on the end of the new month,
27735
- // far from the user's intended `nextTs`.
27736
- const fallback = this.pickNearestCell(cells, nextTs, 'next');
27737
- if (fallback) {
27738
- this.setActiveCell(fallback.day.date);
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);
27739
27499
  this.focusActiveCell();
27740
27500
  }
27741
- }
27501
+ });
27742
27502
  });
27743
27503
  } else if (direction === 'prev' && this.showPrevMonthBtn) {
27744
27504
  // Navigate to previous month and focus the computed previous date.
@@ -27752,22 +27512,19 @@ class AuroCalendar extends RangeDatepicker {
27752
27512
  }
27753
27513
 
27754
27514
  this.handlePrevMonth({ skipActiveUpdate: true });
27755
- this._afterMonthRender(() => {
27756
- const cells = this.getAllFocusableCells();
27757
- const target = cells.find((cell) => cell.day && cell.day.date === prevTs);
27758
- if (target) {
27759
- this.setActiveCell(target.day.date);
27760
- this.focusActiveCell();
27761
- } else {
27762
- // Same nearest-by-date fallback handleGridKeyDown uses — direct
27763
- // `cells[0]` would land on the start of the previous month, far
27764
- // from the user's intended `prevTs`.
27765
- const fallback = this.pickNearestCell(cells, prevTs, 'prev');
27766
- if (fallback) {
27767
- this.setActiveCell(fallback.day.date);
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);
27768
27525
  this.focusActiveCell();
27769
27526
  }
27770
- }
27527
+ });
27771
27528
  });
27772
27529
  }
27773
27530
  } else if (key === 'ArrowDown' || key === 'ArrowUp') {
@@ -27795,22 +27552,20 @@ class AuroCalendar extends RangeDatepicker {
27795
27552
  } else {
27796
27553
  this.handlePrevMonth({ skipActiveUpdate: true });
27797
27554
  }
27798
- this._afterMonthRender(() => {
27799
- const cells = this.getAllFocusableCells();
27800
- const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
27801
- if (target) {
27802
- this.setActiveCell(target.day.date);
27803
- this.focusActiveCell();
27804
- } else {
27805
- // Same nearest-by-date fallback handleGridKeyDown uses — the
27806
- // old direction-based `cells[0]`/`cells[length-1]` clamp
27807
- // could land 25+ days from the intended target.
27808
- const nearest = this.pickNearestCell(cells, targetDate, navDirection);
27809
- if (nearest) {
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];
27810
27565
  this.setActiveCell(nearest.day.date);
27811
27566
  this.focusActiveCell();
27812
27567
  }
27813
- }
27568
+ });
27814
27569
  });
27815
27570
  }
27816
27571
  }
@@ -27849,9 +27604,8 @@ class AuroCalendar extends RangeDatepicker {
27849
27604
  return;
27850
27605
  }
27851
27606
 
27852
- // DOM focus stays on the grid wrapper while arrow keys move the active
27853
- // cell, so cell buttons never receive native focus. The debounced live
27854
- // 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.
27855
27609
  const announcement = this.buildFocusAnnouncement(date);
27856
27610
  this.announceFocusDebounced(announcement);
27857
27611
 
@@ -27921,10 +27675,10 @@ class AuroCalendar extends RangeDatepicker {
27921
27675
  return null;
27922
27676
  }
27923
27677
 
27924
- const departTs = new Date(parsedFrom * 1000).setHours(0, 0, 0, 0) / 1000;
27678
+ const departTs = startOfDay$2(parsedFrom * 1000) / 1000;
27925
27679
  const parsedTo = Number.parseInt(this.dateTo, 10);
27926
27680
  const hasTo = Number.isFinite(parsedTo);
27927
- const returnTs = hasTo ? new Date(parsedTo * 1000).setHours(0, 0, 0, 0) / 1000 : null;
27681
+ const returnTs = hasTo ? startOfDay$2(parsedTo * 1000) / 1000 : null;
27928
27682
 
27929
27683
  if (date === departTs) {
27930
27684
  return this.datepicker.rangeLabelStart || 'range start';
@@ -27938,22 +27692,36 @@ class AuroCalendar extends RangeDatepicker {
27938
27692
  if (hasTo && date > departTs && date < returnTs) {
27939
27693
  return this.datepicker.rangeLabelInRange || 'in range';
27940
27694
  }
27941
- if (!hasTo && date > departTs) {
27942
- return this.datepicker.rangeLabelEndPreview || 'previewing range end';
27943
- }
27944
27695
  return this.datepicker.rangeLabelAfterRange || 'after range';
27945
27696
  }
27946
27697
 
27947
27698
  /**
27948
- * Checks whether a given date is a blackout date. Delegates to the
27949
- * memoized `_getBlackoutSet` so the YYYY-MM-DD parsing and the
27950
- * legacy/ISO merge rules live in exactly one place (see `blackoutUtils.js`).
27699
+ * Checks whether a given date is a blackout date.
27951
27700
  * @private
27952
27701
  * @param {Number} dateTs - Unix timestamp (seconds).
27953
27702
  * @returns {Boolean} True if the date is blacked out.
27954
27703
  */
27955
27704
  isDateBlackout(dateTs) {
27956
- 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;
27957
27725
  }
27958
27726
 
27959
27727
  /**
@@ -28120,34 +27888,9 @@ class AuroCalendar extends RangeDatepicker {
28120
27888
  // the last one.
28121
27889
  if (this._announceRafId) {
28122
27890
  cancelAnimationFrame(this._announceRafId);
28123
- this._announceRafId = null;
28124
27891
  }
28125
- this._deliverAnnouncement(dateStr, 0);
28126
- }
28127
-
28128
- /**
28129
- * Writes `dateStr` to the live region. If the dropdown's dialog hasn't
28130
- * mounted yet (so getOrCreateLiveRegion can't attach), retries on the
28131
- * next animation frame up to MAX_LIVE_REGION_RETRIES instead of silently
28132
- * dropping the announcement. The retry uses the same `_announceRafId`
28133
- * the double-rAF below uses, so a newer announceSelection call (or
28134
- * disconnectedCallback) cancels any in-flight retry.
28135
- * @private
28136
- * @param {String} dateStr - The localized date string to announce.
28137
- * @param {Number} attempts - Number of prior retry attempts.
28138
- * @returns {void}
28139
- */
28140
- _deliverAnnouncement(dateStr, attempts) {
28141
27892
  const liveRegion = this.getOrCreateLiveRegion();
28142
27893
  if (!liveRegion) {
28143
- const MAX_LIVE_REGION_RETRIES = 10;
28144
- if (attempts < MAX_LIVE_REGION_RETRIES) {
28145
- this._announceRafId = requestAnimationFrame(() => {
28146
- this._deliverAnnouncement(dateStr, attempts + 1);
28147
- });
28148
- } else {
28149
- this._announceRafId = null;
28150
- }
28151
27894
  return;
28152
27895
  }
28153
27896
 
@@ -28333,7 +28076,7 @@ class AuroCalendar extends RangeDatepicker {
28333
28076
  </button>
28334
28077
  ` : undefined}
28335
28078
  </div>
28336
- <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}">
28337
28080
  ${this.renderAllCalendars()}
28338
28081
  </div>
28339
28082
  </div>
@@ -32218,7 +31961,7 @@ let AuroHelpText$2$1 = class AuroHelpText extends i$2 {
32218
31961
  }
32219
31962
  };
32220
31963
 
32221
- var formkitVersion$1$3 = '202606252324';
31964
+ var formkitVersion$1$3 = '202606252142';
32222
31965
 
32223
31966
  let AuroElement$2$2 = class AuroElement extends i$2 {
32224
31967
  static get properties() {
@@ -33490,6 +33233,7 @@ let AuroDropdown$3 = class AuroDropdown extends AuroElement$2$2 {
33490
33233
  role="${o$4(this.triggerContentFocusable ? undefined : this.a11yRole)}"
33491
33234
  aria-expanded="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.isPopoverVisible)}"
33492
33235
  aria-controls="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.dropdownId)}"
33236
+ aria-haspopup="${o$4(this.a11yRole === 'combobox' ? 'listbox' : undefined)}"
33493
33237
  aria-labelledby="${o$4(this.triggerContentFocusable ? undefined : 'triggerLabel')}"
33494
33238
  aria-disabled="${o$4(this.disabled ? 'true' : undefined)}"
33495
33239
  @focusin="${this.handleFocusin}"
@@ -38615,7 +38359,7 @@ function normalizeDates$2(context, ...dates) {
38615
38359
  * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))
38616
38360
  * //=> Tue Sep 02 2014 00:00:00
38617
38361
  */
38618
- function startOfDay$2(date, options) {
38362
+ function startOfDay$3(date, options) {
38619
38363
  const _date = toDate$2(date, options?.in);
38620
38364
  _date.setHours(0, 0, 0, 0);
38621
38365
  return _date;
@@ -38663,8 +38407,8 @@ function differenceInCalendarDays$2(laterDate, earlierDate, options) {
38663
38407
  earlierDate,
38664
38408
  );
38665
38409
 
38666
- const laterStartOfDay = startOfDay$2(laterDate_);
38667
- const earlierStartOfDay = startOfDay$2(earlierDate_);
38410
+ const laterStartOfDay = startOfDay$3(laterDate_);
38411
+ const earlierStartOfDay = startOfDay$3(earlierDate_);
38668
38412
 
38669
38413
  const laterTimestamp =
38670
38414
  +laterStartOfDay - getTimezoneOffsetInMilliseconds$2(laterStartOfDay);
@@ -45811,7 +45555,7 @@ let AuroHelpText$1$3 = class AuroHelpText extends i$2 {
45811
45555
  }
45812
45556
  };
45813
45557
 
45814
- var formkitVersion$7 = '202606252324';
45558
+ var formkitVersion$7 = '202606252142';
45815
45559
 
45816
45560
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
45817
45561
  // See LICENSE in the project root for license information.
@@ -47288,7 +47032,6 @@ class AuroDatePicker extends AuroElement$5 {
47288
47032
  this.rangeLabelBeforeRange = 'before range';
47289
47033
  this.rangeLabelInRange = 'in range';
47290
47034
  this.rangeLabelAfterRange = 'after range';
47291
- this.rangeLabelEndPreview = 'previewing range end';
47292
47035
  this.blackoutDates = [];
47293
47036
  this.blackoutLabel = 'unavailable';
47294
47037
  this.navLabelPrevMonth = 'Previous month';
@@ -47388,22 +47131,6 @@ class AuroDatePicker extends AuroElement$5 {
47388
47131
  */
47389
47132
  this.handleClick = this.handleClick.bind(this);
47390
47133
 
47391
- /**
47392
- * Single AbortController shared by every listener registered in the
47393
- * configure* methods. Lets disconnectedCallback tear all of them down
47394
- * with one abort() call.
47395
- *
47396
- * The genuine leak risk is the listeners attached to children that can
47397
- * outlive the host if they get reparented — `this.dropdown`,
47398
- * `this.calendar`, and the inputs inside the dropdown's slot.
47399
- * Listeners attached to `this` (e.g. focusin/focusout on the host)
47400
- * form a self-contained reference graph that the GC can collect with
47401
- * the host anyway, but they share the same signal so the cleanup
47402
- * pattern stays uniform across all configure* sites.
47403
- * @private
47404
- */
47405
- this._listenerAbortController = new AbortController();
47406
-
47407
47134
  /**
47408
47135
  * @private
47409
47136
  */
@@ -47452,7 +47179,6 @@ class AuroDatePicker extends AuroElement$5 {
47452
47179
 
47453
47180
  /**
47454
47181
  * Label announced for blackout (disabled but in-range) date cells.
47455
- * @default 'unavailable'
47456
47182
  */
47457
47183
  blackoutLabel: {
47458
47184
  type: String,
@@ -47469,7 +47195,6 @@ class AuroDatePicker extends AuroElement$5 {
47469
47195
 
47470
47196
  /**
47471
47197
  * Accessible label for the calendar grid containing the days of the month.
47472
- * @default 'Calendar days of the month'
47473
47198
  */
47474
47199
  calendarGridLabel: {
47475
47200
  type: String,
@@ -47632,7 +47357,6 @@ class AuroDatePicker extends AuroElement$5 {
47632
47357
 
47633
47358
  /**
47634
47359
  * Accessible label for the next month navigation button.
47635
- * @default 'Next month'
47636
47360
  */
47637
47361
  navLabelNextMonth: {
47638
47362
  type: String,
@@ -47641,7 +47365,6 @@ class AuroDatePicker extends AuroElement$5 {
47641
47365
 
47642
47366
  /**
47643
47367
  * Accessible label for the previous month navigation button.
47644
- * @default 'Previous month'
47645
47368
  */
47646
47369
  navLabelPrevMonth: {
47647
47370
  type: String,
@@ -47719,11 +47442,7 @@ class AuroDatePicker extends AuroElement$5 {
47719
47442
  },
47720
47443
 
47721
47444
  /**
47722
- * Label announced for cells after a fully selected range (both
47723
- * `dateFrom` and `dateTo` are set). While a range is still being
47724
- * picked (`dateFrom` set, `dateTo` unset), focused cells past the
47725
- * start use `rangeLabelEndPreview` instead.
47726
- * @default 'after range'
47445
+ * Label announced for cells after the range (or after start when no end is selected).
47727
47446
  */
47728
47447
  rangeLabelAfterRange: {
47729
47448
  type: String,
@@ -47732,7 +47451,6 @@ class AuroDatePicker extends AuroElement$5 {
47732
47451
 
47733
47452
  /**
47734
47453
  * Label announced for cells before the range start.
47735
- * @default 'before range'
47736
47454
  */
47737
47455
  rangeLabelBeforeRange: {
47738
47456
  type: String,
@@ -47741,27 +47459,14 @@ class AuroDatePicker extends AuroElement$5 {
47741
47459
 
47742
47460
  /**
47743
47461
  * Label announced for the range end date cell.
47744
- * @default 'range end'
47745
47462
  */
47746
47463
  rangeLabelEnd: {
47747
47464
  type: String,
47748
47465
  reflect: true
47749
47466
  },
47750
47467
 
47751
- /**
47752
- * Label announced for the focused cell while previewing a range end
47753
- * (dateFrom set, dateTo not yet selected). Tells AT users that
47754
- * pressing Enter would commit this cell as the range end.
47755
- * @default 'previewing range end'
47756
- */
47757
- rangeLabelEndPreview: {
47758
- type: String,
47759
- reflect: true
47760
- },
47761
-
47762
47468
  /**
47763
47469
  * Label announced for cells within the selected range.
47764
- * @default 'in range'
47765
47470
  */
47766
47471
  rangeLabelInRange: {
47767
47472
  type: String,
@@ -47770,7 +47475,6 @@ class AuroDatePicker extends AuroElement$5 {
47770
47475
 
47771
47476
  /**
47772
47477
  * Label announced for the range start date cell.
47773
- * @default 'range start'
47774
47478
  */
47775
47479
  rangeLabelStart: {
47776
47480
  type: String,
@@ -47778,7 +47482,7 @@ class AuroDatePicker extends AuroElement$5 {
47778
47482
  },
47779
47483
 
47780
47484
  /**
47781
- * 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.
47782
47486
  * This should be a JSON string array of ISO date strings (`YYYY-MM-DD`).
47783
47487
  */
47784
47488
  referenceDates: {
@@ -48135,26 +47839,10 @@ class AuroDatePicker extends AuroElement$5 {
48135
47839
  // ─── Vendor calendar time conversions ─────────────────────────────────────
48136
47840
 
48137
47841
  /**
48138
- * Converts a Unix timestamp (seconds) from the vendored range-datepicker
48139
- * (`src/vendor/wc-range-datepicker/day.js`) to an ISO date string.
48140
- *
48141
- * Timezone contract:
48142
- * - INPUT: `time` is assumed to be the seconds-since-epoch of **local
48143
- * midnight** for the intended calendar day. The vendor's Day constructor
48144
- * builds it via `date-fns format(date, 't')` from a locally-constructed
48145
- * Date, so this assumption currently holds end-to-end.
48146
- * - OUTPUT: `dateFormatter.toISOFormatString` reads the Date's local
48147
- * getFullYear/getMonth/getDate components, so the returned YYYY-MM-DD
48148
- * string matches the local calendar day.
48149
- *
48150
- * If the vendor ever switches to emitting UTC-midnight timestamps, this
48151
- * conversion will silently shift the returned date by one day in zones
48152
- * west of UTC. Any vendor swap should re-verify this contract; the TZ
48153
- * regression suite (`npm run test:hst`, UTC-10) will catch the symptom.
48154
- *
47842
+ * Converts a Unix timestamp (seconds) from the vendor calendar to an ISO date string.
48155
47843
  * @private
48156
- * @param {number} time - Unix timestamp (seconds), local midnight of the day.
48157
- * @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).
48158
47846
  */
48159
47847
  convertWcTimeToDate(time) {
48160
47848
  return dateFormatter$1.toISOFormatString(new Date(time * 1000));
@@ -48256,8 +47944,8 @@ class AuroDatePicker extends AuroElement$5 {
48256
47944
  }
48257
47945
  }
48258
47946
 
48259
- // Focus the calendar grid wrapper. The live region (announced just
48260
- // 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).
48261
47949
  if (activeCell) {
48262
47950
  this.calendar.focusActiveCell();
48263
47951
 
@@ -48307,13 +47995,11 @@ class AuroDatePicker extends AuroElement$5 {
48307
47995
  this.dropdown.bibDialogLabel = labelElement.textContent.trim() || undefined;
48308
47996
  }
48309
47997
 
48310
- const { signal } = this._listenerAbortController;
48311
-
48312
47998
  this.dropdown.addEventListener('auroDropdown-triggerClick', () => {
48313
47999
  if (!this.isPopoverVisible) {
48314
48000
  this.dropdown.show();
48315
48001
  }
48316
- }, { signal });
48002
+ });
48317
48003
 
48318
48004
  this.dropdown.addEventListener('auroDropdown-toggled', () => {
48319
48005
  this.notifyDatepickerToggled();
@@ -48331,7 +48017,7 @@ class AuroDatePicker extends AuroElement$5 {
48331
48017
  if (this.valueObject) {
48332
48018
  this.centralDate = this.value;
48333
48019
  } else if (!this.centralDate && !this.calendarStartDate && !this.minDate) {
48334
- this.centralDate = dateFormatter$1.toISOFormatString(new Date());
48020
+ this.centralDate = new Date();
48335
48021
  }
48336
48022
  }
48337
48023
 
@@ -48411,7 +48097,7 @@ class AuroDatePicker extends AuroElement$5 {
48411
48097
  this.forceScrollOnNextMobileCalendarRender = false;
48412
48098
  }, 0);
48413
48099
  }
48414
- }, { signal });
48100
+ });
48415
48101
 
48416
48102
  // Handle responsive strategy changes while the dropdown is open
48417
48103
  // (e.g. resizing from desktop → mobile or vice versa).
@@ -48458,7 +48144,7 @@ class AuroDatePicker extends AuroElement$5 {
48458
48144
  });
48459
48145
  });
48460
48146
  }
48461
- }, { signal });
48147
+ });
48462
48148
  }
48463
48149
 
48464
48150
  /**
@@ -48471,8 +48157,6 @@ class AuroDatePicker extends AuroElement$5 {
48471
48157
 
48472
48158
  this.inputList = [...this.dropdown.querySelectorAll(this.inputTag._$litStatic$)];
48473
48159
 
48474
- const { signal } = this._listenerAbortController;
48475
-
48476
48160
  this.inputList.forEach((input, index) => {
48477
48161
  input.addEventListener('input', (event) => {
48478
48162
  event.stopPropagation();
@@ -48484,7 +48168,7 @@ class AuroDatePicker extends AuroElement$5 {
48484
48168
  }
48485
48169
 
48486
48170
  this.notifyValueChanged();
48487
- }, { signal });
48171
+ });
48488
48172
 
48489
48173
  input.addEventListener('auroFormElement-validated', (evt) => {
48490
48174
  // not to bubble up input's validated event.
@@ -48500,7 +48184,7 @@ class AuroDatePicker extends AuroElement$5 {
48500
48184
  this.validity = evt.detail.validity;
48501
48185
  this.errorMessage = evt.detail.message;
48502
48186
  }
48503
- }, { signal });
48187
+ });
48504
48188
  });
48505
48189
  }
48506
48190
 
@@ -48514,32 +48198,19 @@ class AuroDatePicker extends AuroElement$5 {
48514
48198
  this.calendar.datepicker = this;
48515
48199
  this.calendar.dropdown = this.dropdown;
48516
48200
 
48517
- const { signal } = this._listenerAbortController;
48518
-
48519
48201
  this.calendar.addEventListener('auroCalendar-dateSelected', () => {
48520
- // Compare the input's ISO value against the *converted* calendar
48521
- // timestamp (the vendor's `dateFrom`/`dateTo` are Unix-seconds
48522
- // strings — comparing the input ISO directly against them would
48523
- // never match, so the write would fire on every event and emit
48524
- // redundant input/change activity).
48525
- if (this.calendar.dateFrom !== undefined) {
48526
- const fromIso = this.convertWcTimeToDate(this.calendar.dateFrom);
48527
- if (this.inputList[0].value !== fromIso) {
48528
- this.inputList[0].value = fromIso;
48529
- }
48202
+ if (this.inputList[0].value !== this.calendar.dateFrom && this.calendar.dateFrom !== undefined) {
48203
+ this.inputList[0].value = this.convertWcTimeToDate(this.calendar.dateFrom);
48530
48204
  }
48531
48205
 
48532
- if (this.inputList[1] && this.calendar.dateTo) {
48533
- const toIso = this.convertWcTimeToDate(this.calendar.dateTo);
48534
- if (this.inputList[1].value !== toIso) {
48535
- this.inputList[1].value = toIso;
48536
- }
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);
48537
48208
  }
48538
- }, { signal });
48209
+ });
48539
48210
 
48540
48211
  this.calendar.addEventListener('auroCalendar-dismissRequest', () => {
48541
48212
  this.dropdown.hide();
48542
- }, { signal });
48213
+ });
48543
48214
 
48544
48215
  this.calendar.addEventListener('auroCalendar-centralDateChanged', (event) => {
48545
48216
  const match = this.centralDateObject && this.util.datesMatch(event.detail.date, this.centralDateObject);
@@ -48549,7 +48220,7 @@ class AuroDatePicker extends AuroElement$5 {
48549
48220
  }
48550
48221
 
48551
48222
  this.notifyMonthChanged(event);
48552
- }, { signal });
48223
+ });
48553
48224
  }
48554
48225
 
48555
48226
  /**
@@ -48558,17 +48229,10 @@ class AuroDatePicker extends AuroElement$5 {
48558
48229
  * @returns {void}
48559
48230
  */
48560
48231
  configureDatepicker() {
48561
- // These listeners are on `this` (the host), so they would GC with the
48562
- // host even without the abort signal — see the leak rationale on
48563
- // `_listenerAbortController`. The signal is still passed for uniform
48564
- // cleanup semantics with the child-element listeners in the other
48565
- // configure* methods.
48566
- const { signal } = this._listenerAbortController;
48567
-
48568
48232
  this.addEventListener('focusin', () => {
48569
48233
  this.touched = true;
48570
48234
  this.hasFocus = true;
48571
- }, { signal });
48235
+ });
48572
48236
 
48573
48237
  this.addEventListener('focusout', () => {
48574
48238
  this.hasFocus = false;
@@ -48580,7 +48244,7 @@ class AuroDatePicker extends AuroElement$5 {
48580
48244
  if (!this.matches(':focus-within')) {
48581
48245
  this.validate();
48582
48246
  }
48583
- }, { signal });
48247
+ });
48584
48248
 
48585
48249
  if (this.valueObject) {
48586
48250
  this.calendar.dateFrom = this.convertToWcValidTime(this.valueObject);
@@ -48778,41 +48442,6 @@ class AuroDatePicker extends AuroElement$5 {
48778
48442
  return this.validity !== undefined && this.validity !== 'valid';
48779
48443
  }
48780
48444
 
48781
- /**
48782
- * Per-class dedup set used by `_warnInvalidLocale`. Static so the dedup
48783
- * spans every datepicker instance on the page; lives on the class (not
48784
- * at module scope) so it stays an encapsulated implementation detail of
48785
- * this component and does not interfere with WCA's class-JSDoc
48786
- * attachment.
48787
- * @private
48788
- */
48789
- static _warnedInvalidLocales = new Set();
48790
-
48791
- /**
48792
- * Logs a one-time `console.debug` when an unsupported locale falls back to
48793
- * en-US. Deduped by the offending tag so noisy re-renders that resurface
48794
- * the same bad value stay quiet, but each new bad value still signals so
48795
- * consumers can spot the typo or missing tag.
48796
- * @private
48797
- * @param {string|undefined} badLocale - The locale value that failed.
48798
- * @returns {void}
48799
- */
48800
- _warnInvalidLocale(badLocale) {
48801
- // Stringify without coalescing — `String(undefined)` / `String(null)`
48802
- // surface the actual offending value in the log, instead of the
48803
- // ambiguous `Locale ""` that `String(badLocale ?? '')` would produce.
48804
- // Dedup still works correctly because each unique stringification
48805
- // becomes its own Set entry.
48806
- const key = String(badLocale);
48807
- const seen = AuroDatePicker._warnedInvalidLocales;
48808
- if (seen.has(key)) {
48809
- return;
48810
- }
48811
- seen.add(key);
48812
- // eslint-disable-next-line no-console
48813
- 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".`);
48814
- }
48815
-
48816
48445
  /**
48817
48446
  * Lifecycle method to check if the locale is valid.
48818
48447
  * @ignore
@@ -48823,15 +48452,10 @@ class AuroDatePicker extends AuroElement$5 {
48823
48452
  if (changedProperties.has('locale')) {
48824
48453
  try {
48825
48454
  const supported = Intl.DateTimeFormat.supportedLocalesOf([this.locale], { localeMatcher: 'lookup' });
48826
- if (supported.length > 0) {
48827
- this._validLocale = this.locale;
48828
- } else {
48829
- this._validLocale = 'en-US';
48830
- this._warnInvalidLocale(this.locale);
48831
- }
48455
+ this._validLocale = supported.length > 0 ? this.locale : 'en-US';
48832
48456
  } catch {
48457
+ console.debug(`[AuroDatePicker] The locale "${this.locale}" is not valid. Falling back to "en-US".`); // eslint-disable-line no-console
48833
48458
  this._validLocale = 'en-US';
48834
- this._warnInvalidLocale(this.locale);
48835
48459
  }
48836
48460
 
48837
48461
  const previousLocaleFormat = getDateFormatFromLocale$1(changedProperties.get('locale'));
@@ -48913,6 +48537,8 @@ class AuroDatePicker extends AuroElement$5 {
48913
48537
  // Skip centralDate update when user clicked a cell in range mode
48914
48538
  // to prevent the displayed months from shifting
48915
48539
  this.centralDate = this.value;
48540
+ //TODO: TEST THIS CHANGE
48541
+ // this.calendarRenderUtil.updateCentralDate(this, this.value);
48916
48542
  }
48917
48543
 
48918
48544
  this.setHasValue();
@@ -48972,6 +48598,8 @@ class AuroDatePicker extends AuroElement$5 {
48972
48598
  // Skip centralDate update when user clicked a cell in range mode
48973
48599
  // to prevent the displayed months from shifting
48974
48600
  this.centralDate = this.valueEnd;
48601
+ // TODO: TEST THIS CHANGE
48602
+ // this.calendarRenderUtil.updateCentralDate(this, this.formattedValueEnd);
48975
48603
  }
48976
48604
 
48977
48605
  this.validate();
@@ -49113,7 +48741,7 @@ class AuroDatePicker extends AuroElement$5 {
49113
48741
  * @returns {void}
49114
48742
  */
49115
48743
  configureClickHandler() {
49116
- this.addEventListener('click', this.handleClick, { signal: this._listenerAbortController.signal });
48744
+ this.addEventListener('click', this.handleClick);
49117
48745
  }
49118
48746
 
49119
48747
  firstUpdated() {
@@ -49121,15 +48749,6 @@ class AuroDatePicker extends AuroElement$5 {
49121
48749
  // Add the tag name as an attribute if it is different than the component name
49122
48750
  this.runtimeUtils.handleComponentTagRename(this, 'auro-datepicker');
49123
48751
 
49124
- // If the element was disconnected before this first render finished,
49125
- // disconnectedCallback's microtask already aborted the controller. The
49126
- // connectedCallback reinit guard skips that case because `hasUpdated`
49127
- // is still false. Mint a fresh controller here so configure* registers
49128
- // listeners against a live signal.
49129
- if (this._listenerAbortController.signal.aborted) {
49130
- this._listenerAbortController = new AbortController();
49131
- }
49132
-
49133
48752
  this.configureDropdown();
49134
48753
  this.configureInput();
49135
48754
  this.configureCalendar();
@@ -49141,36 +48760,9 @@ class AuroDatePicker extends AuroElement$5 {
49141
48760
  connectedCallback() {
49142
48761
  super.connectedCallback();
49143
48762
 
49144
- // True reconnect after `disconnectedCallback` aborted our controller:
49145
- // the existing signal is dead, so listeners registered against it
49146
- // would never fire. Create a fresh controller and re-run the
49147
- // configure* wiring (each method is idempotent — it just re-caches
49148
- // child refs and re-registers listeners against the new signal).
49149
- // `hasUpdated` gates this so the *first* connect (which precedes
49150
- // firstUpdated) still falls through to firstUpdated's initial wiring.
49151
- if (this.hasUpdated && this._listenerAbortController.signal.aborted) {
49152
- this._listenerAbortController = new AbortController();
49153
- this.configureDropdown();
49154
- this.configureInput();
49155
- this.configureCalendar();
49156
- this.configureDatepicker();
49157
- this.configureClickHandler();
49158
- }
49159
-
49160
48763
  this.locale = this.domHandler.getLocale(this);
49161
48764
  }
49162
48765
 
49163
- disconnectedCallback() {
49164
- super.disconnectedCallback();
49165
- // Defer so that re-parenting (auro-drawer slotting it into a dialog,
49166
- // for example) does not abort listeners we still need after reconnect.
49167
- queueMicrotask(() => {
49168
- if (!this.isConnected) {
49169
- this._listenerAbortController.abort();
49170
- }
49171
- });
49172
- }
49173
-
49174
48766
  // layout render methods
49175
48767
  // ------------------------------------
49176
48768
 
@@ -50666,7 +50258,7 @@ let AuroHelpText$1$2 = class AuroHelpText extends i$2 {
50666
50258
  }
50667
50259
  };
50668
50260
 
50669
- var formkitVersion$1$2 = '202606252324';
50261
+ var formkitVersion$1$2 = '202606252142';
50670
50262
 
50671
50263
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
50672
50264
  // See LICENSE in the project root for license information.
@@ -54994,7 +54586,7 @@ let AuroHelpText$6 = class AuroHelpText extends i$2 {
54994
54586
  }
54995
54587
  };
54996
54588
 
54997
- var formkitVersion$6 = '202606252324';
54589
+ var formkitVersion$6 = '202606252142';
54998
54590
 
54999
54591
  let AuroElement$1$2 = class AuroElement extends i$2 {
55000
54592
  static get properties() {
@@ -56266,6 +55858,7 @@ let AuroDropdown$2 = class AuroDropdown extends AuroElement$1$2 {
56266
55858
  role="${o$4(this.triggerContentFocusable ? undefined : this.a11yRole)}"
56267
55859
  aria-expanded="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.isPopoverVisible)}"
56268
55860
  aria-controls="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.dropdownId)}"
55861
+ aria-haspopup="${o$4(this.a11yRole === 'combobox' ? 'listbox' : undefined)}"
56269
55862
  aria-labelledby="${o$4(this.triggerContentFocusable ? undefined : 'triggerLabel')}"
56270
55863
  aria-disabled="${o$4(this.disabled ? 'true' : undefined)}"
56271
55864
  @focusin="${this.handleFocusin}"
@@ -58934,7 +58527,7 @@ let AuroHelpText$5 = class AuroHelpText extends i$2 {
58934
58527
  }
58935
58528
  };
58936
58529
 
58937
- var formkitVersion$5 = '202606252324';
58530
+ var formkitVersion$5 = '202606252142';
58938
58531
 
58939
58532
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
58940
58533
  // See LICENSE in the project root for license information.
@@ -60684,7 +60277,7 @@ let AuroHelpText$4 = class AuroHelpText extends i$2 {
60684
60277
  }
60685
60278
  };
60686
60279
 
60687
- var formkitVersion$4 = '202606252324';
60280
+ var formkitVersion$4 = '202606252142';
60688
60281
 
60689
60282
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
60690
60283
  // See LICENSE in the project root for license information.
@@ -65899,7 +65492,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$2 {
65899
65492
  }
65900
65493
  };
65901
65494
 
65902
- var formkitVersion$2 = '202606252324';
65495
+ var formkitVersion$2 = '202606252142';
65903
65496
 
65904
65497
  let AuroElement$2$1 = class AuroElement extends i$2 {
65905
65498
  static get properties() {
@@ -67171,6 +66764,7 @@ let AuroDropdown$1 = class AuroDropdown extends AuroElement$2$1 {
67171
66764
  role="${o$4(this.triggerContentFocusable ? undefined : this.a11yRole)}"
67172
66765
  aria-expanded="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.isPopoverVisible)}"
67173
66766
  aria-controls="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.dropdownId)}"
66767
+ aria-haspopup="${o$4(this.a11yRole === 'combobox' ? 'listbox' : undefined)}"
67174
66768
  aria-labelledby="${o$4(this.triggerContentFocusable ? undefined : 'triggerLabel')}"
67175
66769
  aria-disabled="${o$4(this.disabled ? 'true' : undefined)}"
67176
66770
  @focusin="${this.handleFocusin}"
@@ -79492,7 +79086,7 @@ let AuroHelpText$1$1 = class AuroHelpText extends i$2 {
79492
79086
  }
79493
79087
  };
79494
79088
 
79495
- var formkitVersion$1$1 = '202606252324';
79089
+ var formkitVersion$1$1 = '202606252142';
79496
79090
 
79497
79091
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
79498
79092
  // See LICENSE in the project root for license information.
@@ -80613,7 +80207,7 @@ let AuroBibtemplate$1 = class AuroBibtemplate extends i$2 {
80613
80207
  }
80614
80208
  };
80615
80209
 
80616
- var formkitVersion$3 = '202606252324';
80210
+ var formkitVersion$3 = '202606252142';
80617
80211
 
80618
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}`;
80619
80213
 
@@ -85426,19 +85020,24 @@ const selectKeyboardStrategy = {
85426
85020
  },
85427
85021
 
85428
85022
  End(component, evt, ctx) {
85429
- if (!ctx.isExpanded) {
85430
- return;
85431
- }
85432
85023
  evt.preventDefault();
85433
85024
  evt.stopPropagation();
85434
85025
  // `pop()` is safe here: getEnabledOptions returns a fresh filtered array.
85435
85026
  const lastOption = getEnabledOptions(component.menu).pop();
85436
- if (lastOption) {
85437
- component.menu.updateActiveOption(lastOption);
85027
+ if (!lastOption) {
85028
+ return;
85438
85029
  }
85030
+ if (!ctx.isExpanded) {
85031
+ component.dropdown.show();
85032
+ }
85033
+ component.menu.updateActiveOption(lastOption);
85439
85034
  },
85440
85035
 
85441
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.
85442
85041
  evt.preventDefault();
85443
85042
  evt.stopPropagation();
85444
85043
  if (!ctx.isExpanded) {
@@ -85449,15 +85048,16 @@ const selectKeyboardStrategy = {
85449
85048
  },
85450
85049
 
85451
85050
  Home(component, evt, ctx) {
85452
- if (!ctx.isExpanded) {
85453
- return;
85454
- }
85455
85051
  evt.preventDefault();
85456
85052
  evt.stopPropagation();
85457
85053
  const [firstOption] = getEnabledOptions(component.menu);
85458
- if (firstOption) {
85459
- component.menu.updateActiveOption(firstOption);
85054
+ if (!firstOption) {
85055
+ return;
85056
+ }
85057
+ if (!ctx.isExpanded) {
85058
+ component.dropdown.show();
85460
85059
  }
85060
+ component.menu.updateActiveOption(firstOption);
85461
85061
  },
85462
85062
 
85463
85063
  Tab(component, evt, ctx) {
@@ -89404,7 +89004,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
89404
89004
  }
89405
89005
  };
89406
89006
 
89407
- var formkitVersion$1 = '202606252324';
89007
+ var formkitVersion$1 = '202606252142';
89408
89008
 
89409
89009
  class AuroElement extends i$2 {
89410
89010
  static get properties() {
@@ -90676,6 +90276,7 @@ class AuroDropdown extends AuroElement {
90676
90276
  role="${o$4(this.triggerContentFocusable ? undefined : this.a11yRole)}"
90677
90277
  aria-expanded="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.isPopoverVisible)}"
90678
90278
  aria-controls="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.dropdownId)}"
90279
+ aria-haspopup="${o$4(this.a11yRole === 'combobox' ? 'listbox' : undefined)}"
90679
90280
  aria-labelledby="${o$4(this.triggerContentFocusable ? undefined : 'triggerLabel')}"
90680
90281
  aria-disabled="${o$4(this.disabled ? 'true' : undefined)}"
90681
90282
  @focusin="${this.handleFocusin}"
@@ -91425,7 +91026,7 @@ class AuroHelpText extends i$2 {
91425
91026
  }
91426
91027
  }
91427
91028
 
91428
- var formkitVersion = '202606252324';
91029
+ var formkitVersion = '202606252142';
91429
91030
 
91430
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}`;
91431
91032
 
@@ -91757,14 +91358,6 @@ class AuroSelect extends AuroElement$1 {
91757
91358
  reflect: true
91758
91359
  },
91759
91360
 
91760
- /**
91761
- * @private
91762
- */
91763
- options: {
91764
- type: Array,
91765
- state: true
91766
- },
91767
-
91768
91361
  /**
91769
91362
  * Specifies the current selected menuOption. Default type is `HTMLElement`, changing to `Array<HTMLElement>` when `multiSelect` is true.
91770
91363
  * @type {HTMLElement|Array<HTMLElement>}
@@ -92052,16 +91645,68 @@ class AuroSelect extends AuroElement$1 {
92052
91645
  this.dropdown.dropdownWidth = this.customBibWidth;
92053
91646
  }
92054
91647
 
92055
- // Pass label text to the dropdown bib for accessible dialog naming
92056
- const labelElement = this.querySelector('span[slot="label"]');
92057
- if (labelElement) {
92058
- this.dropdown.bibDialogLabel = labelElement.textContent.trim() || undefined;
92059
- }
91648
+ this._syncLabelText();
92060
91649
 
92061
91650
  // Exposes the CSS parts from the dropdown for styling
92062
91651
  this.dropdown.exposeCssParts();
92063
91652
  }
92064
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
+
92065
91710
  /**
92066
91711
  * This will register this element with the browser.
92067
91712
  * @param {string} [name="auro-select"] - The name of element that you want to register to.
@@ -92212,11 +91857,7 @@ class AuroSelect extends AuroElement$1 {
92212
91857
  this.updateMenuShapeSize();
92213
91858
  this.setMenuValue(this.value);
92214
91859
 
92215
- // Set accessible name on the menu for screen readers based on the label slot content
92216
- const labelElement = this.querySelector('[slot="label"]');
92217
- if (labelElement) {
92218
- this.menu.setAttribute('aria-label', labelElement.textContent.trim());
92219
- }
91860
+ this._syncLabelText();
92220
91861
 
92221
91862
  if (this.multiSelect) {
92222
91863
  this.menu.multiSelect = this.multiSelect;
@@ -92228,8 +91869,21 @@ class AuroSelect extends AuroElement$1 {
92228
91869
  if (typeof this.menu.initItems === 'function') {
92229
91870
  this.menu.initItems();
92230
91871
  }
92231
- this.options = this.menu.options;
92232
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
+
92233
91887
  this.menu.addEventListener("auroMenu-loadingChange", (event) => this.handleMenuLoadingChange(event));
92234
91888
 
92235
91889
  this.menu.addEventListener("auroMenu-selectValueFailure", () => {
@@ -92248,11 +91902,22 @@ class AuroSelect extends AuroElement$1 {
92248
91902
  this.dropdown.setActiveDescendant(this.optionActive);
92249
91903
  }
92250
91904
 
92251
- // Announce the active option for screen readers
92252
- 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')) {
92253
91910
  const optionText = this.optionActive.textContent.trim();
92254
- const selectedState = this.optionActive.hasAttribute('selected') ? ', selected' : ', not selected';
92255
- 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
+ }
92256
91921
  }
92257
91922
 
92258
91923
  if (this.dropdown.isPopoverVisible) {
@@ -92384,24 +92049,32 @@ class AuroSelect extends AuroElement$1 {
92384
92049
 
92385
92050
  this.typeaheadBuffer += key;
92386
92051
 
92387
- 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));
92388
92058
 
92389
- let match = null;
92059
+ const isRepeatedChar = !match && this.typeaheadBuffer.length > 1 && new Set(this.typeaheadBuffer).size === 1;
92390
92060
  if (isRepeatedChar) {
92391
92061
  const matches = options.filter((option) => this._getOptionDisplayText(option).startsWith(key));
92392
92062
  if (matches.length) {
92393
92063
  const cycleIndex = (this.typeaheadBuffer.length - 1) % matches.length;
92394
92064
  match = matches[cycleIndex];
92395
92065
  }
92396
- } else {
92397
- match = options.find((option) => this._getOptionDisplayText(option).startsWith(this.typeaheadBuffer));
92398
92066
  }
92399
92067
 
92068
+ // Intentional: no-match leaves the bib closed (deviates from APG / some native <select>).
92400
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);
92401
92075
  if (!this.dropdown.isPopoverVisible) {
92402
92076
  this.dropdown.show();
92403
92077
  }
92404
- this.menu.updateActiveOption(match);
92405
92078
  }
92406
92079
  }
92407
92080
 
@@ -92518,6 +92191,16 @@ class AuroSelect extends AuroElement$1 {
92518
92191
  disconnectedCallback() {
92519
92192
  super.disconnectedCallback();
92520
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
+ }
92521
92204
  }
92522
92205
 
92523
92206
  // lifecycle runs only after the element's DOM has been updated the first time
@@ -92528,6 +92211,7 @@ class AuroSelect extends AuroElement$1 {
92528
92211
  this.configureDropdown();
92529
92212
  this.configureMenu();
92530
92213
  this.configureSelect();
92214
+ this._observeLabelChanges();
92531
92215
  }
92532
92216
 
92533
92217
  setMenuValue(value) {
@@ -92664,21 +92348,8 @@ class AuroSelect extends AuroElement$1 {
92664
92348
  if (!selectedOption) return;
92665
92349
  const selectedValue = selectedOption.value;
92666
92350
 
92667
- if (this.multiSelect) {
92668
- const currentArray = this.menu.value || [];
92669
-
92670
- if (!currentArray.includes(selectedValue)) {
92671
- this.value = JSON.stringify([
92672
- ...currentArray,
92673
- selectedValue
92674
- ]);
92675
- }
92676
- } else {
92677
- const currentValue = this.value;
92678
-
92679
- if (currentValue !== selectedValue) {
92680
- this.value = selectedValue;
92681
- }
92351
+ if (this.value !== selectedValue) {
92352
+ this.value = selectedValue;
92682
92353
  }
92683
92354
  }
92684
92355