@aurodesignsystem-dev/auro-formkit 0.0.0-pr1511.0 → 0.0.0-pr1511.1

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 (126) hide show
  1. package/components/checkbox/demo/customize.min.js +1 -1
  2. package/components/checkbox/demo/getting-started.min.js +1 -1
  3. package/components/checkbox/demo/index.min.js +1 -1
  4. package/components/checkbox/dist/index.js +1 -1
  5. package/components/checkbox/dist/registered.js +1 -1
  6. package/components/combobox/demo/customize.min.js +4 -4
  7. package/components/combobox/demo/getting-started.min.js +4 -4
  8. package/components/combobox/demo/index.min.js +4 -4
  9. package/components/combobox/dist/index.js +4 -4
  10. package/components/combobox/dist/registered.js +4 -4
  11. package/components/counter/demo/customize.min.js +10 -3
  12. package/components/counter/demo/index.min.js +10 -3
  13. package/components/counter/dist/index.js +10 -3
  14. package/components/counter/dist/registered.js +10 -3
  15. package/components/datepicker/demo/accessibility.md +2 -1
  16. package/components/datepicker/demo/api.md +63 -62
  17. package/components/datepicker/demo/customize.md +12 -1
  18. package/components/datepicker/demo/customize.min.js +609 -200
  19. package/components/datepicker/demo/index.min.js +609 -200
  20. package/components/datepicker/dist/{src/auro-calendar-cell.d.ts → auro-calendar-cell.d.ts} +14 -3
  21. package/components/datepicker/dist/{src/auro-calendar.d.ts → auro-calendar.d.ts} +90 -6
  22. package/components/datepicker/dist/{src/auro-datepicker.d.ts → auro-datepicker.d.ts} +78 -5
  23. package/components/datepicker/dist/blackoutUtils.d.ts +43 -0
  24. package/components/datepicker/dist/index.js +609 -200
  25. package/components/datepicker/dist/registered.js +609 -200
  26. package/components/dropdown/demo/customize.min.js +2 -2
  27. package/components/dropdown/demo/getting-started.min.js +2 -2
  28. package/components/dropdown/demo/index.min.js +2 -2
  29. package/components/dropdown/dist/index.js +2 -2
  30. package/components/dropdown/dist/registered.js +2 -2
  31. package/components/form/demo/customize.min.js +695 -232
  32. package/components/form/demo/getting-started.min.js +695 -232
  33. package/components/form/demo/index.min.js +695 -232
  34. package/components/form/demo/registerDemoDeps.min.js +695 -232
  35. package/components/input/demo/customize.min.js +1 -1
  36. package/components/input/demo/getting-started.min.js +1 -1
  37. package/components/input/demo/index.min.js +1 -1
  38. package/components/input/dist/index.js +1 -1
  39. package/components/input/dist/registered.js +1 -1
  40. package/components/radio/demo/customize.min.js +1 -1
  41. package/components/radio/demo/getting-started.min.js +1 -1
  42. package/components/radio/demo/index.min.js +1 -1
  43. package/components/radio/dist/index.js +1 -1
  44. package/components/radio/dist/registered.js +1 -1
  45. package/components/select/demo/customize.min.js +63 -16
  46. package/components/select/demo/getting-started.min.js +63 -16
  47. package/components/select/demo/index.min.js +63 -16
  48. package/components/select/dist/index.js +63 -16
  49. package/components/select/dist/registered.js +63 -16
  50. package/custom-elements.json +1750 -1468
  51. package/package.json +6 -2
  52. package/components/checkbox/demo/customize.js +0 -22
  53. package/components/checkbox/demo/demo-support.js +0 -1
  54. package/components/checkbox/demo/getting-started.js +0 -22
  55. package/components/checkbox/demo/index.js +0 -8
  56. package/components/checkbox/demo/styles.scss +0 -1
  57. package/components/combobox/demo/customize.js +0 -24
  58. package/components/combobox/demo/demo-support.js +0 -1
  59. package/components/combobox/demo/getting-started.js +0 -21
  60. package/components/combobox/demo/index.js +0 -23
  61. package/components/combobox/demo/styles.scss +0 -1
  62. package/components/counter/demo/customize.js +0 -21
  63. package/components/counter/demo/demo-support.js +0 -1
  64. package/components/counter/demo/index.js +0 -21
  65. package/components/counter/demo/styles.scss +0 -1
  66. package/components/datepicker/demo/customize.js +0 -17
  67. package/components/datepicker/demo/demo-support.js +0 -1
  68. package/components/datepicker/demo/index.js +0 -23
  69. package/components/datepicker/demo/styles.scss +0 -1
  70. package/components/dropdown/demo/customize.js +0 -9
  71. package/components/dropdown/demo/demo-support.js +0 -1
  72. package/components/dropdown/demo/getting-started.js +0 -9
  73. package/components/dropdown/demo/index.js +0 -16
  74. package/components/dropdown/demo/styles.scss +0 -1
  75. package/components/form/demo/customize.js +0 -28
  76. package/components/form/demo/demo-support.js +0 -1
  77. package/components/form/demo/getting-started.js +0 -9
  78. package/components/form/demo/index.js +0 -5
  79. package/components/form/demo/registerDemoDeps.js +0 -23
  80. package/components/form/demo/styles.scss +0 -1
  81. package/components/input/demo/customize.js +0 -25
  82. package/components/input/demo/demo-support.js +0 -1
  83. package/components/input/demo/getting-started.js +0 -8
  84. package/components/input/demo/index.js +0 -8
  85. package/components/input/demo/styles.css +0 -974
  86. package/components/input/demo/styles.scss +0 -1
  87. package/components/menu/demo/demo-support.js +0 -1
  88. package/components/menu/demo/index.js +0 -25
  89. package/components/menu/demo/styles.scss +0 -1
  90. package/components/radio/demo/customize.js +0 -22
  91. package/components/radio/demo/demo-support.js +0 -1
  92. package/components/radio/demo/getting-started.js +0 -24
  93. package/components/radio/demo/index.js +0 -8
  94. package/components/radio/demo/styles.scss +0 -1
  95. package/components/select/demo/customize.js +0 -11
  96. package/components/select/demo/demo-support.js +0 -1
  97. package/components/select/demo/getting-started.js +0 -26
  98. package/components/select/demo/index.js +0 -11
  99. package/components/select/demo/styles.scss +0 -1
  100. /package/components/datepicker/dist/{src/auro-calendar-month.d.ts → auro-calendar-month.d.ts} +0 -0
  101. /package/components/datepicker/dist/{src/buttonVersion.d.ts → buttonVersion.d.ts} +0 -0
  102. /package/components/datepicker/dist/{src/datepickerKeyboardStrategy.d.ts → datepickerKeyboardStrategy.d.ts} +0 -0
  103. /package/components/datepicker/dist/{src/iconVersion.d.ts → iconVersion.d.ts} +0 -0
  104. /package/components/datepicker/dist/{src/index.d.ts → index.d.ts} +0 -0
  105. /package/components/datepicker/dist/{src/popoverVersion.d.ts → popoverVersion.d.ts} +0 -0
  106. /package/components/datepicker/dist/{src/styles → styles}/classic/color-css.d.ts +0 -0
  107. /package/components/datepicker/dist/{src/styles → styles}/classic/style-css.d.ts +0 -0
  108. /package/components/datepicker/dist/{src/styles → styles}/color-calendar-css.d.ts +0 -0
  109. /package/components/datepicker/dist/{src/styles → styles}/color-cell-css.d.ts +0 -0
  110. /package/components/datepicker/dist/{src/styles → styles}/color-css.d.ts +0 -0
  111. /package/components/datepicker/dist/{src/styles → styles}/color-month-css.d.ts +0 -0
  112. /package/components/datepicker/dist/{src/styles → styles}/shapeSize-css.d.ts +0 -0
  113. /package/components/datepicker/dist/{src/styles → styles}/snowflake/color-css.d.ts +0 -0
  114. /package/components/datepicker/dist/{src/styles → styles}/snowflake/style-css.d.ts +0 -0
  115. /package/components/datepicker/dist/{src/styles → styles}/style-auro-calendar-cell-css.d.ts +0 -0
  116. /package/components/datepicker/dist/{src/styles → styles}/style-auro-calendar-css.d.ts +0 -0
  117. /package/components/datepicker/dist/{src/styles → styles}/style-auro-calendar-month-css.d.ts +0 -0
  118. /package/components/datepicker/dist/{src/styles → styles}/style-css.d.ts +0 -0
  119. /package/components/datepicker/dist/{src/styles → styles}/tokens-css.d.ts +0 -0
  120. /package/components/datepicker/dist/{src/utilities.d.ts → utilities.d.ts} +0 -0
  121. /package/components/datepicker/dist/{src/utilitiesCalendar.d.ts → utilitiesCalendar.d.ts} +0 -0
  122. /package/components/datepicker/dist/{src/utilitiesCalendarRender.d.ts → utilitiesCalendarRender.d.ts} +0 -0
  123. /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/day.d.ts +0 -0
  124. /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/range-datepicker-calendar.d.ts +0 -0
  125. /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/range-datepicker-cell.d.ts +0 -0
  126. /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/range-datepicker.d.ts +0 -0
@@ -6176,7 +6176,7 @@ function normalizeDates$3(context, ...dates) {
6176
6176
  * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))
6177
6177
  * //=> Tue Sep 02 2014 00:00:00
6178
6178
  */
6179
- function startOfDay$4(date, options) {
6179
+ function startOfDay$3(date, options) {
6180
6180
  const _date = toDate$3(date, options?.in);
6181
6181
  _date.setHours(0, 0, 0, 0);
6182
6182
  return _date;
@@ -6224,8 +6224,8 @@ function differenceInCalendarDays$3(laterDate, earlierDate, options) {
6224
6224
  earlierDate,
6225
6225
  );
6226
6226
 
6227
- const laterStartOfDay = startOfDay$4(laterDate_);
6228
- const earlierStartOfDay = startOfDay$4(earlierDate_);
6227
+ const laterStartOfDay = startOfDay$3(laterDate_);
6228
+ const earlierStartOfDay = startOfDay$3(earlierDate_);
6229
6229
 
6230
6230
  const laterTimestamp =
6231
6231
  +laterStartOfDay - getTimezoneOffsetInMilliseconds$3(laterStartOfDay);
@@ -13372,7 +13372,7 @@ let AuroHelpText$8 = class AuroHelpText extends i$3 {
13372
13372
  }
13373
13373
  };
13374
13374
 
13375
- var formkitVersion$8 = '202606252142';
13375
+ var formkitVersion$8 = '202606261928';
13376
13376
 
13377
13377
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
13378
13378
  // See LICENSE in the project root for license information.
@@ -15456,7 +15456,7 @@ function normalizeDates$1(context, ...dates) {
15456
15456
  * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))
15457
15457
  * //=> Tue Sep 02 2014 00:00:00
15458
15458
  */
15459
- function startOfDay$2(date, options) {
15459
+ function startOfDay$1(date, options) {
15460
15460
  const _date = toDate$1(date, options?.in);
15461
15461
  _date.setHours(0, 0, 0, 0);
15462
15462
  return _date;
@@ -15504,8 +15504,8 @@ function differenceInCalendarDays$1(laterDate, earlierDate, options) {
15504
15504
  earlierDate,
15505
15505
  );
15506
15506
 
15507
- const laterStartOfDay = startOfDay$2(laterDate_);
15508
- const earlierStartOfDay = startOfDay$2(earlierDate_);
15507
+ const laterStartOfDay = startOfDay$1(laterDate_);
15508
+ const earlierStartOfDay = startOfDay$1(earlierDate_);
15509
15509
 
15510
15510
  const laterTimestamp =
15511
15511
  +laterStartOfDay - getTimezoneOffsetInMilliseconds$1(laterStartOfDay);
@@ -24962,8 +24962,8 @@ class RangeDatepickerCell extends i$3 {
24962
24962
  const parsedDateFrom = parseInt(dateFrom, 10);
24963
24963
  const parsedDateTo = parseInt(dateTo, 10);
24964
24964
  if (day) {
24965
- if (getTime(startOfDay$2(parsedDateTo * 1000)) / 1000 === day.date ||
24966
- getTime(startOfDay$2(parsedDateFrom * 1000)) / 1000 === day.date) {
24965
+ if (getTime(startOfDay$1(parsedDateTo * 1000)) / 1000 === day.date ||
24966
+ getTime(startOfDay$1(parsedDateFrom * 1000)) / 1000 === day.date) {
24967
24967
  this.selected = true;
24968
24968
  }
24969
24969
  if (((hoveredDate === day.date || day.date < hoveredDate) &&
@@ -25151,7 +25151,7 @@ class RangeDatepickerCalendar extends i$3 {
25151
25151
  this.dayNamesOfTheWeek = [];
25152
25152
  this.daysOfMonth = [];
25153
25153
  this._locale = null;
25154
- this.currentDate = parseInt(format$1(startOfDay$2(Date.now()), 't'), 10);
25154
+ this.currentDate = parseInt(format$1(startOfDay$1(Date.now()), 't'), 10);
25155
25155
  this.localeChanged();
25156
25156
  this.yearAndMonthChanged(this.year, this.month);
25157
25157
  }
@@ -25625,7 +25625,7 @@ __decorate([n$4({ type: Array })], RangeDatepickerCalendar.prototype, "dayNamesO
25625
25625
  __decorate([n$4({ type: Array })], RangeDatepickerCalendar.prototype, "daysOfMonth", void 0);
25626
25626
  AuroLibraryRuntimeUtils$5$1.prototype.registerComponent('wc-range-datepicker-calendar', RangeDatepickerCalendar);
25627
25627
 
25628
- var styleCss$5$2 = i$6`.body-default{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-emphasized-font-size, 1rem);line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-font-size, 0.875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-font-size, 0.75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-font-size, 0.625rem);line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);line-height:var(--wcss-body-2xs-emphasized-line-height, 0.875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-2xl-weight, 300);line-height:var(--wcss-display-2xl-line-height, 1.3);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));letter-spacing:var(--wcss-display-2xl-letter-spacing, 0)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xl-weight, 300);line-height:var(--wcss-display-xl-line-height, 1.3);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));letter-spacing:var(--wcss-display-xl-letter-spacing, 0)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-lg-weight, 300);line-height:var(--wcss-display-lg-line-height, 1.3);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));letter-spacing:var(--wcss-display-lg-letter-spacing, 0)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-md-weight, 300);line-height:var(--wcss-display-md-line-height, 1.3);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));letter-spacing:var(--wcss-display-md-letter-spacing, 0)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-sm-weight, 300);line-height:var(--wcss-display-sm-line-height, 1.3);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));letter-spacing:var(--wcss-display-sm-letter-spacing, 0)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xs-weight, 300);line-height:var(--wcss-display-xs-line-height, 1.3);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));letter-spacing:var(--wcss-display-xs-letter-spacing, 0)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xl-weight, 300);line-height:var(--wcss-heading-xl-line-height, 1.3);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));letter-spacing:var(--wcss-heading-xl-letter-spacing, 0)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-lg-weight, 300);line-height:var(--wcss-heading-lg-line-height, 1.3);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));letter-spacing:var(--wcss-heading-lg-letter-spacing, 0)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-md-weight, 300);line-height:var(--wcss-heading-md-line-height, 1.3);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));letter-spacing:var(--wcss-heading-md-letter-spacing, 0)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-sm-weight, 300);line-height:var(--wcss-heading-sm-line-height, 1.3);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));letter-spacing:var(--wcss-heading-sm-letter-spacing, 0)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xs-weight, 300);line-height:var(--wcss-heading-xs-line-height, 1.3);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));letter-spacing:var(--wcss-heading-xs-letter-spacing, 0)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-2xs-weight, 300);line-height:var(--wcss-heading-2xs-line-height, 1.3);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xl-weight, 450);line-height:var(--wcss-accent-2xl-line-height, 1);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xl-weight, 450);line-height:var(--wcss-accent-xl-line-height, 1.3);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-lg-weight, 450);line-height:var(--wcss-accent-lg-line-height, 1.3);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-md-weight, 500);line-height:var(--wcss-accent-md-line-height, 1.3);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);text-transform:uppercase}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-sm-weight, 500);line-height:var(--wcss-accent-sm-line-height, 1.3);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xs-weight, 500);line-height:var(--wcss-accent-xs-line-height, 1.3);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);text-transform:uppercase}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xs-weight, 450);line-height:var(--wcss-accent-2xs-line-height, 1.3);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);text-transform:uppercase}@media screen and (max-width: 576px){:host{display:flex;justify-content:center}}.day{position:relative;width:48px;height:56px;padding:0;border-width:2px;border-style:solid;border-radius:10px;cursor:pointer;user-select:none}.day:focus-visible{outline:none;background-color:unset}.day.activeCell{outline-width:2px;outline-style:solid;outline-offset:-4px}.day.disabled{cursor:default !important;pointer-events:none}.day.blackout{cursor:pointer}.day.reference:after{position:absolute;top:-2px;left:-2px;display:block;width:calc(100% + 2px);height:calc(100% + 2px);box-sizing:content-box;border-radius:10px;border-style:solid;border-width:1px;content:""}.day.inRange::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:""}.day.rangeDepartDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:10px 0 0 10px;overflow:hidden}.day.rangeReturnDate::before,.day.lastHoveredDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:0 10px 10px 0;overflow:hidden}.day.firstDayOfMonth::before{border-radius:10px 0 0 10px;overflow:hidden}.day.lastDayOfMonth::before{border-radius:0 10px 10px 0;overflow:hidden}.buttonWrapper{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}.dateSlot{display:block}::slotted([slot^=date_]){width:100%;white-space:nowrap}::slotted(auro-icon){max-height:24px;max-width:24px}:host([renderForDateSlot]) .buttonWrapper{position:relative;width:100%;height:100%}:host([renderForDateSlot]) .currentDayMarker{position:relative}`;
25628
+ var styleCss$5$2 = i$6`.body-default{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-emphasized-font-size, 1rem);line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-font-size, 0.875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-font-size, 0.75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-font-size, 0.625rem);line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);line-height:var(--wcss-body-2xs-emphasized-line-height, 0.875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-2xl-weight, 300);line-height:var(--wcss-display-2xl-line-height, 1.3);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));letter-spacing:var(--wcss-display-2xl-letter-spacing, 0)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xl-weight, 300);line-height:var(--wcss-display-xl-line-height, 1.3);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));letter-spacing:var(--wcss-display-xl-letter-spacing, 0)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-lg-weight, 300);line-height:var(--wcss-display-lg-line-height, 1.3);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));letter-spacing:var(--wcss-display-lg-letter-spacing, 0)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-md-weight, 300);line-height:var(--wcss-display-md-line-height, 1.3);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));letter-spacing:var(--wcss-display-md-letter-spacing, 0)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-sm-weight, 300);line-height:var(--wcss-display-sm-line-height, 1.3);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));letter-spacing:var(--wcss-display-sm-letter-spacing, 0)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xs-weight, 300);line-height:var(--wcss-display-xs-line-height, 1.3);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));letter-spacing:var(--wcss-display-xs-letter-spacing, 0)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xl-weight, 300);line-height:var(--wcss-heading-xl-line-height, 1.3);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));letter-spacing:var(--wcss-heading-xl-letter-spacing, 0)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-lg-weight, 300);line-height:var(--wcss-heading-lg-line-height, 1.3);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));letter-spacing:var(--wcss-heading-lg-letter-spacing, 0)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-md-weight, 300);line-height:var(--wcss-heading-md-line-height, 1.3);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));letter-spacing:var(--wcss-heading-md-letter-spacing, 0)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-sm-weight, 300);line-height:var(--wcss-heading-sm-line-height, 1.3);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));letter-spacing:var(--wcss-heading-sm-letter-spacing, 0)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xs-weight, 300);line-height:var(--wcss-heading-xs-line-height, 1.3);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));letter-spacing:var(--wcss-heading-xs-letter-spacing, 0)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-2xs-weight, 300);line-height:var(--wcss-heading-2xs-line-height, 1.3);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xl-weight, 450);line-height:var(--wcss-accent-2xl-line-height, 1);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xl-weight, 450);line-height:var(--wcss-accent-xl-line-height, 1.3);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-lg-weight, 450);line-height:var(--wcss-accent-lg-line-height, 1.3);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-md-weight, 500);line-height:var(--wcss-accent-md-line-height, 1.3);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);text-transform:uppercase}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-sm-weight, 500);line-height:var(--wcss-accent-sm-line-height, 1.3);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xs-weight, 500);line-height:var(--wcss-accent-xs-line-height, 1.3);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);text-transform:uppercase}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xs-weight, 450);line-height:var(--wcss-accent-2xs-line-height, 1.3);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);text-transform:uppercase}@media screen and (max-width: 576px){:host{display:flex;justify-content:center}}.day{position:relative;width:48px;height:56px;padding:0;border-width:2px;border-style:solid;border-radius:10px;cursor:pointer;user-select:none}.day:focus-visible{outline:none;background-color:unset}.day.activeCell{outline-width:2px;outline-style:solid;outline-offset:-4px}.day.disabled{cursor:default !important;pointer-events:none}.day.blackout{cursor:pointer}.day.reference:after{position:absolute;top:-2px;left:-2px;display:block;width:calc(100% + 2px);height:calc(100% + 2px);box-sizing:content-box;border-radius:10px;border-style:solid;border-width:1px;content:""}.day.inRange::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:""}.day.rangeDepartDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:10px 0 0 10px;overflow:hidden}.day.rangeReturnDate::before,.day.lastHoveredDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:0 10px 10px 0;overflow:hidden}.day.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}`;
25629
25629
 
25630
25630
  var colorCss$5$2 = i$6`:host ::slotted([slot^=date_]){color:var(--ds-auro-calendar-cell-price-text-color)}:host ::slotted([slot^=date_][highlight]){--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-status-success, #447a1f)}:host .day{border-color:var(--ds-auro-calendar-cell-border-color);background-color:var(--ds-auro-calendar-cell-container-color);color:var(--ds-auro-calendar-cell-text-color)}:host .day.activeCell:not(.selected){--ds-auro-calendar-cell-container-color: var(--ds-auro-calendar-cell-in-range-color);border-color:var(--ds-advanced-color-state-selected);outline-color:var(--ds-auro-calendar-cell-container-color)}:host .day.selected{--ds-auro-calendar-cell-container-color: var(--ds-advanced-color-state-selected, #01426a);--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-inverse, #ffffff);--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host .day.selected ::slotted([slot^=date_][highlight]){--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-status-success-subtle, #d6eac7)}:host .day.selected:hover{--ds-auro-calendar-cell-container-color: var(--ds-advanced-color-state-selected-hover, #00274a);--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host .day.reference:after{border-color:var(--ds-basic-color-border-default, #959595);box-shadow:inset 0 0 0 2px var(--ds-basic-color-surface-default, #ffffff)}:host .day.reference:hover::after{box-shadow:inset 0 0 0 2px var(--ds-advanced-color-shared-background-muted, #f7f7f7)}:host .day:hover{--ds-auro-calendar-cell-container-color: var(--ds-advanced-color-state-background-hover, #f2f2f2);--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-default, #2a2a2a)}:host .day.disabled{--ds-auro-calendar-cell-container-color: transparent;--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0);--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0)}:host .day.blackout{--ds-auro-calendar-cell-container-color: transparent;--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0);--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0)}:host .day.inRange:before,:host .day.rangeDepartDate:before,:host .day.rangeReturnDate:before,:host .day.lastHoveredDate:before{background-color:var(--ds-auro-calendar-cell-in-range-color)}:host .day.sameDateTrip:before{--ds-auro-calendar-cell-in-range-color: transparent}`;
25631
25631
 
@@ -25650,13 +25650,103 @@ class s{registerComponent(e,t){customElements.get(e)||customElements.define(e,cl
25650
25650
 
25651
25651
  var popoverVersion = '6.0.1';
25652
25652
 
25653
- /* eslint-disable curly, max-lines, no-underscore-dangle, no-magic-numbers, no-underscore-dangle, max-params, no-extra-parens, arrow-parens, max-lines, line-comment-position, no-inline-comments, lit/binding-positions, lit/no-invalid-html */
25653
+ /**
25654
+ * Single source of truth for parsing and matching blackout dates across the
25655
+ * datepicker. Both `auro-calendar` (memoized Set + `isDateBlackout`) and the
25656
+ * pre-`firstUpdated` fallback inside `auro-calendar-cell` route through these
25657
+ * helpers so the YYYY-MM-DD → seconds conversion and the merge-with-legacy
25658
+ * `disabledDays` rules are defined exactly once.
25659
+ */
25654
25660
 
25655
- const startOfDay$1 = (ms) => {
25656
- const date = new Date(ms);
25657
- date.setHours(0, 0, 0, 0);
25658
- return date.getTime();
25659
- };
25661
+ /**
25662
+ * Converts a `YYYY-MM-DD` ISO date string to a Unix timestamp (seconds)
25663
+ * representing local midnight on that calendar day. Returns `null` for
25664
+ * inputs that don't parse to a finite timestamp.
25665
+ *
25666
+ * Uses the `new Date(year, monthIndex, day)` constructor (NOT
25667
+ * `new Date(isoStr)`) so the result is local-midnight rather than UTC
25668
+ * midnight — required to keep the calendar grid aligned with the user's
25669
+ * local calendar day in negative-offset timezones.
25670
+ *
25671
+ * @param {string} isoStr - Date string in `YYYY-MM-DD` format.
25672
+ * @returns {number|null} Local-midnight Unix timestamp (seconds), or null.
25673
+ */
25674
+ function parseIsoToTimestamp(isoStr) {
25675
+ if (typeof isoStr !== 'string') {
25676
+ return null;
25677
+ }
25678
+ const parts = isoStr.split('-');
25679
+ if (parts.length !== 3) {
25680
+ return null;
25681
+ }
25682
+ const year = parseInt(parts[0], 10);
25683
+ const month = parseInt(parts[1], 10);
25684
+ const day = parseInt(parts[2], 10);
25685
+ if (!Number.isFinite(year) || !Number.isFinite(month) || !Number.isFinite(day)) {
25686
+ return null;
25687
+ }
25688
+ // Reject overflow values like "2024-13-40" — JS `new Date(year, month, day)`
25689
+ // silently normalizes those to a different calendar day, which would
25690
+ // disable the wrong date if we let the result through.
25691
+ if (month < 1 || month > 12 || day < 1 || day > 31) {
25692
+ return null;
25693
+ }
25694
+ const date = new Date(year, month - 1, day);
25695
+ // Guard the residual case where JS still rolls a value (e.g. Feb 30 → Mar 2).
25696
+ // After construction, getFullYear/getMonth/getDate should match the inputs.
25697
+ if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {
25698
+ return null;
25699
+ }
25700
+ const ts = Math.floor(date.getTime() / 1000);
25701
+ return Number.isFinite(ts) ? ts : null;
25702
+ }
25703
+
25704
+ /**
25705
+ * Builds a `Set<number>` of seconds-since-epoch timestamps covering both the
25706
+ * legacy `disabledDays` (already-numeric) array and the ISO `blackoutDates`
25707
+ * array. Use this for O(1) membership checks in hot paths.
25708
+ *
25709
+ * @param {Array<string|number>|undefined} disabledDays - Legacy timestamp array.
25710
+ * @param {Array<string>|undefined} blackoutDates - ISO `YYYY-MM-DD` array.
25711
+ * @returns {Set<number>}
25712
+ */
25713
+ function buildBlackoutSet(disabledDays, blackoutDates) {
25714
+ const set = new Set();
25715
+ if (Array.isArray(disabledDays)) {
25716
+ for (const day of disabledDays) {
25717
+ const ts = parseInt(day, 10);
25718
+ if (Number.isFinite(ts)) {
25719
+ set.add(ts);
25720
+ }
25721
+ }
25722
+ }
25723
+ if (Array.isArray(blackoutDates)) {
25724
+ for (const isoStr of blackoutDates) {
25725
+ const ts = parseIsoToTimestamp(isoStr);
25726
+ if (ts !== null) {
25727
+ set.add(ts);
25728
+ }
25729
+ }
25730
+ }
25731
+ return set;
25732
+ }
25733
+
25734
+ /**
25735
+ * One-shot membership test for a single timestamp against both blackout
25736
+ * sources. Allocates a Set on each call; only use this in cold paths
25737
+ * (e.g. the pre-`firstUpdated` cell fallback). Hot paths should hold the
25738
+ * Set returned from `buildBlackoutSet` and `.has(ts)` directly.
25739
+ *
25740
+ * @param {number} dateTs - Unix timestamp (seconds) to test.
25741
+ * @param {Array<string|number>|undefined} disabledDays - Legacy timestamp array.
25742
+ * @param {Array<string>|undefined} blackoutDates - ISO `YYYY-MM-DD` array.
25743
+ * @returns {boolean}
25744
+ */
25745
+ function isBlackoutTimestamp(dateTs, disabledDays, blackoutDates) {
25746
+ return buildBlackoutSet(disabledDays, blackoutDates).has(dateTs);
25747
+ }
25748
+
25749
+ /* 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 */
25660
25750
 
25661
25751
  class AuroCalendarCell extends i$3 {
25662
25752
  constructor() {
@@ -25704,6 +25794,14 @@ class AuroCalendarCell extends i$3 {
25704
25794
  type: Boolean,
25705
25795
  reflect: true
25706
25796
  },
25797
+ /**
25798
+ * @deprecated Propagated from the legacy `auro-calendar.disabledDays`
25799
+ * Unix-timestamp array. The cell honors it for backward compatibility
25800
+ * (see the divergence-check fallback inside `isBlackout`), but
25801
+ * consumers should migrate to `auro-datepicker.blackoutDates`
25802
+ * (YYYY-MM-DD ISO strings). The calendar emits a one-time
25803
+ * deprecation warning the first time a non-empty value is observed.
25804
+ */
25707
25805
  disabledDays: { type: Array },
25708
25806
  isCurrentDate: { type: Boolean },
25709
25807
  locale: { type: String },
@@ -25749,8 +25847,8 @@ class AuroCalendarCell extends i$3 {
25749
25847
  const parsedDateTo = parseInt(dateTo, 10);
25750
25848
 
25751
25849
  if (day) {
25752
- const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
25753
- const returnTimestamp = startOfDay$1(parsedDateTo * 1000) / 1000;
25850
+ const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
25851
+ const returnTimestamp = new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000;
25754
25852
 
25755
25853
  if (day.date === departTimestamp || day.date === returnTimestamp) {
25756
25854
  this.selected = true;
@@ -25834,27 +25932,33 @@ class AuroCalendarCell extends i$3 {
25834
25932
  return false;
25835
25933
  }
25836
25934
 
25837
- // Check against disabledDays timestamps (legacy path)
25838
- if (Array.isArray(this.disabledDays) && this.disabledDays.length > 0 &&
25839
- (this.disabledDays.findIndex(dd => parseInt(dd, 10) === this.day.date) !== -1)) {
25840
- return true;
25841
- }
25842
-
25843
- // Check against blackoutDates (ISO format YYYY-MM-DD) on the datepicker
25844
- const blackoutDates = this.datepicker?.blackoutDates;
25845
-
25846
- if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
25847
- const date = new Date(this.day.date * 1000);
25848
- const yyyy = date.getFullYear();
25849
- const mm = String(date.getMonth() + 1).padStart(2, '0');
25850
- const dd = String(date.getDate()).padStart(2, '0');
25851
- const cellDate = `${yyyy}-${mm}-${dd}`;
25852
- if (blackoutDates.includes(cellDate)) {
25935
+ // Delegate to the calendar's memoized blackout Set for O(1) lookup
25936
+ // (instead of rescanning disabledDays + blackoutDates per render). The
25937
+ // Set is rebuilt only when either source array reference changes — see
25938
+ // auro-calendar.js#_getBlackoutSet.
25939
+ if (this.calendar && typeof this.calendar._getBlackoutSet === 'function') {
25940
+ if (this.calendar._getBlackoutSet().has(this.day.date)) {
25853
25941
  return true;
25854
25942
  }
25943
+ // If the cell's local disabledDays diverged from the calendar's (a
25944
+ // consumer or test mutated cell.disabledDays directly), the Set does
25945
+ // not reflect that addition — fall through to the per-cell scan only
25946
+ // when the reference no longer matches. Production data flow keeps
25947
+ // these identical, so this branch stays cold. Guarded with
25948
+ // Array.isArray to match `_getBlackoutSet`'s contract: non-array
25949
+ // values are treated as empty rather than crashing on `.findIndex`.
25950
+ if (Array.isArray(this.disabledDays) && this.disabledDays !== this.calendar.disabledDays && this.disabledDays.length > 0) {
25951
+ if (this.disabledDays.findIndex((dd) => parseInt(dd, 10) === this.day.date) !== -1) {
25952
+ return true;
25953
+ }
25954
+ }
25955
+ return false;
25855
25956
  }
25856
25957
 
25857
- return false;
25958
+ // Pre-firstUpdated fallback — the cell may render once before the
25959
+ // ancestor calendar is wired up. Routes through the shared
25960
+ // blackoutUtils helper so the parsing rules stay in one place.
25961
+ return isBlackoutTimestamp(this.day.date, this.disabledDays, this.datepicker?.blackoutDates);
25858
25962
  }
25859
25963
 
25860
25964
  /**
@@ -25960,12 +26064,12 @@ class AuroCalendarCell extends i$3 {
25960
26064
  const parsedDateFrom = Number.parseInt(this.dateFrom, 10);
25961
26065
  if (!Number.isFinite(parsedDateFrom)) return null;
25962
26066
 
25963
- const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
26067
+ const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
25964
26068
  const dayDate = this.day.date;
25965
26069
 
25966
26070
  const parsedDateTo = Number.parseInt(this.dateTo, 10);
25967
26071
  const hasDateTo = Number.isFinite(parsedDateTo);
25968
- const returnTimestamp = hasDateTo ? startOfDay$1(parsedDateTo * 1000) / 1000 : null;
26072
+ const returnTimestamp = hasDateTo ? new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000 : null;
25969
26073
 
25970
26074
  if (dayDate === departTimestamp) return this.datepicker.rangeLabelStart || 'range start';
25971
26075
 
@@ -25975,7 +26079,9 @@ class AuroCalendarCell extends i$3 {
25975
26079
 
25976
26080
  if (hasDateTo && dayDate > departTimestamp && dayDate < returnTimestamp) return this.datepicker.rangeLabelInRange || 'in range';
25977
26081
 
25978
- // After start date, no end date yet, or after end date
26082
+ if (!hasDateTo && dayDate > departTimestamp) return this.datepicker.rangeLabelEndPreview || 'previewing range end';
26083
+
26084
+ // After end date when both dateFrom and dateTo are set.
25979
26085
  return this.datepicker.rangeLabelAfterRange || 'after range';
25980
26086
  }
25981
26087
 
@@ -25988,7 +26094,7 @@ class AuroCalendarCell extends i$3 {
25988
26094
  */
25989
26095
  isDepartDate(day, dateFrom) {
25990
26096
  const parsedDateFrom = parseInt(dateFrom, 10);
25991
- const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
26097
+ const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
25992
26098
 
25993
26099
  return this.selected && day.date === departTimestamp;
25994
26100
  }
@@ -26003,7 +26109,7 @@ class AuroCalendarCell extends i$3 {
26003
26109
  */
26004
26110
  isReturnDate(day, dateFrom, dateTo) {
26005
26111
  const parsedDateTo = parseInt(dateTo, 10);
26006
- const returnTimestamp = startOfDay$1(parsedDateTo * 1000) / 1000;
26112
+ const returnTimestamp = new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000;
26007
26113
 
26008
26114
  return this.selected && day.date === returnTimestamp && dateFrom;
26009
26115
  }
@@ -26167,6 +26273,7 @@ class AuroCalendarCell extends i$3 {
26167
26273
  setTimeout(() => this.firstUpdated(), 0);
26168
26274
  return;
26169
26275
  }
26276
+ this.calendar = calendar;
26170
26277
  this.datepicker = calendar.datepicker;
26171
26278
  this._slotContentHandler = () => {
26172
26279
  this.handleSlotContent();
@@ -26224,12 +26331,13 @@ class AuroCalendarCell extends i$3 {
26224
26331
  this._cachedButton = this.shadowRoot.querySelector('button.day');
26225
26332
  });
26226
26333
 
26227
- // Update host-level aria attributes for ariaActiveDescendantElement.
26334
+ // Keep the host's gridcell aria attributes in sync with the day data.
26228
26335
  this.updateHostAria();
26229
26336
  }
26230
26337
 
26231
26338
  // Update host aria when selection changes (aria-selected, range labels)
26232
- if (properties.has('dateFrom') || properties.has('dateTo') || properties.has('selected')) {
26339
+ // or when isCurrentDate flips (aria-current).
26340
+ if (properties.has('dateFrom') || properties.has('dateTo') || properties.has('selected') || properties.has('isCurrentDate')) {
26233
26341
  this.updateHostAria();
26234
26342
  }
26235
26343
 
@@ -26240,8 +26348,8 @@ class AuroCalendarCell extends i$3 {
26240
26348
  }
26241
26349
 
26242
26350
  /**
26243
- * Updates ARIA attributes on the host element so that
26244
- * ariaActiveDescendantElement can expose cell info to the SR.
26351
+ * Sets host-level ARIA so each cell exposes its date, selection state,
26352
+ * and blackout status to assistive tech browsing the month grid.
26245
26353
  * @private
26246
26354
  * @returns {void}
26247
26355
  */
@@ -26250,16 +26358,27 @@ class AuroCalendarCell extends i$3 {
26250
26358
 
26251
26359
  const outOfRange = this.isOutOfRange(this.day, this.min, this.max);
26252
26360
  if (outOfRange) {
26361
+ // Strip every aria attribute the in-range branch may have set on a
26362
+ // previous render — if a cell flips from in-range to out-of-range
26363
+ // (calendar shifts months, minDate/maxDate change, etc.).
26253
26364
  this.removeAttribute('role');
26254
26365
  this.removeAttribute('aria-label');
26366
+ this.removeAttribute('aria-current');
26367
+ this.removeAttribute('aria-selected');
26368
+ this.removeAttribute('aria-disabled');
26255
26369
  return;
26256
26370
  }
26257
26371
 
26258
- // The host acts as the gridcell for ariaActiveDescendantElement.
26259
26372
  this.setAttribute('role', 'gridcell');
26260
26373
  this.setAttribute('aria-label', this.getAriaLabel());
26261
26374
  this.setAttribute('aria-selected', this.selected ? 'true' : 'false');
26262
26375
 
26376
+ if (this.isCurrentDate) {
26377
+ this.setAttribute('aria-current', 'date');
26378
+ } else {
26379
+ this.removeAttribute('aria-current');
26380
+ }
26381
+
26263
26382
  if (this.isBlackout()) {
26264
26383
  this.setAttribute('aria-disabled', 'true');
26265
26384
  } else {
@@ -26274,7 +26393,7 @@ class AuroCalendarCell extends i$3 {
26274
26393
  * @returns {void}
26275
26394
  */
26276
26395
  focusButton() {
26277
- const button = this._cachedButton || this.shadowRoot.querySelector('button:not([aria-hidden])');
26396
+ const button = this._cachedButton || this.shadowRoot.querySelector('button:not([disabled])');
26278
26397
  if (button) {
26279
26398
  button.focus({ focusVisible: true });
26280
26399
  }
@@ -26282,7 +26401,9 @@ class AuroCalendarCell extends i$3 {
26282
26401
 
26283
26402
  /**
26284
26403
  * Imperatively marks this cell as active without triggering a Lit re-render.
26285
- * Note: buttons stay tabindex="-1" because the grid uses aria-activedescendant.
26404
+ * Buttons stay tabindex="-1" because DOM focus stays on the grid wrapper
26405
+ * arrow keys move the active cell imperatively and the live region carries
26406
+ * the SR announcement.
26286
26407
  * @returns {void}
26287
26408
  */
26288
26409
  setActive() {
@@ -26324,10 +26445,13 @@ class AuroCalendarCell extends i$3 {
26324
26445
  if (!btn || !this.day) return;
26325
26446
 
26326
26447
  const dayDate = this.day.date;
26327
- const departTimestamp = startOfDay$1(dateFrom * 1000) / 1000;
26448
+ const departTimestamp = new Date(dateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
26328
26449
  const isInRange = dayDate > departTimestamp && dayDate < hoveredDate;
26329
- const isLastHovered = dayDate === hoveredDate && hoveredDate > departTimestamp;
26330
- const isDepartWithPreview = dayDate === departTimestamp && hoveredDate > departTimestamp;
26450
+ // `>=` so hovering the depart cell itself (a same-day round-trip
26451
+ // preview) still surfaces a visual cue: the depart cell receives both
26452
+ // rangeDepartDate and lastHoveredDate.
26453
+ const isLastHovered = dayDate === hoveredDate && hoveredDate >= departTimestamp;
26454
+ const isDepartWithPreview = dayDate === departTimestamp && hoveredDate >= departTimestamp;
26331
26455
 
26332
26456
  btn.classList.toggle('inRange', isInRange);
26333
26457
  btn.classList.toggle('lastHoveredDate', isLastHovered);
@@ -26385,7 +26509,6 @@ class AuroCalendarCell extends i$3 {
26385
26509
  @focus="${outOfRange ? undefined : this.handleFocus}"
26386
26510
  class="${e$2(buttonClasses)}"
26387
26511
  ?disabled="${outOfRange}"
26388
- aria-hidden="${outOfRange ? 'true' : A$7}"
26389
26512
  tabindex="-1">
26390
26513
  <div class="buttonWrapper" aria-hidden="true">
26391
26514
  <div class="currentDayMarker">${this.day?.title || A$7}</div>
@@ -27491,7 +27614,7 @@ let AuroBibtemplate$3 = class AuroBibtemplate extends i$3 {
27491
27614
  }
27492
27615
  };
27493
27616
 
27494
- var formkitVersion$2$1 = '202606252142';
27617
+ var formkitVersion$2$1 = '202606261928';
27495
27618
 
27496
27619
  let l$1$2 = class l{generateElementName(t,e){let o=t;return o+="-",o+=e.replace(/[.]/g,"_"),o}generateTag(o,s,a){const r=this.generateElementName(o,s),i=i$2`${s$3(r)}`;return customElements.get(r)||customElements.define(r,class extends a{}),i}};let d$1$2 = class d{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}getSlotText(t,e){const o=t.shadowRoot?.querySelector(`slot[name="${e}"]`),s=(o?.assignedNodes({flatten:true})||[]).map(t=>t.textContent?.trim()).join(" ").trim();return s||null}};let h$1$2 = class h{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}};var c$1$3=i$6`:host{color:var(--ds-auro-loader-color)}:host>span{background-color:var(--ds-auro-loader-background-color);border-color:var(--ds-auro-loader-border-color)}:host([onlight]),:host([appearance=brand]){--ds-auro-loader-color: var(--ds-basic-color-brand-primary, #01426a)}:host([ondark]),:host([appearance=inverse]){--ds-auro-loader-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host([orbit])>span{--ds-auro-loader-background-color: transparent}:host([orbit])>span:nth-child(1){--ds-auro-loader-border-color: currentcolor;opacity:.25}:host([orbit])>span:nth-child(2){--ds-auro-loader-border-color: currentcolor;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent}
27497
27620
  `,u$4$2=i$6`.body-default{font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, .875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs{font-size:var(--wcss-body-xs-font-size, .75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:var(--wcss-body-2xs-font-size, .625rem);font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0);line-height:var(--wcss-body-2xs-line-height, .875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));font-weight:var(--wcss-display-2xl-weight, 300);letter-spacing:var(--wcss-display-2xl-letter-spacing, 0);line-height:var(--wcss-display-2xl-line-height, 1.3)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));font-weight:var(--wcss-display-xl-weight, 300);letter-spacing:var(--wcss-display-xl-letter-spacing, 0);line-height:var(--wcss-display-xl-line-height, 1.3)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));font-weight:var(--wcss-display-lg-weight, 300);letter-spacing:var(--wcss-display-lg-letter-spacing, 0);line-height:var(--wcss-display-lg-line-height, 1.3)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));font-weight:var(--wcss-display-md-weight, 300);letter-spacing:var(--wcss-display-md-letter-spacing, 0);line-height:var(--wcss-display-md-line-height, 1.3)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));font-weight:var(--wcss-display-sm-weight, 300);letter-spacing:var(--wcss-display-sm-letter-spacing, 0);line-height:var(--wcss-display-sm-line-height, 1.3)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));font-weight:var(--wcss-display-xs-weight, 300);letter-spacing:var(--wcss-display-xs-letter-spacing, 0);line-height:var(--wcss-display-xs-line-height, 1.3)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));font-weight:var(--wcss-heading-xl-weight, 300);letter-spacing:var(--wcss-heading-xl-letter-spacing, 0);line-height:var(--wcss-heading-xl-line-height, 1.3)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));font-weight:var(--wcss-heading-lg-weight, 300);letter-spacing:var(--wcss-heading-lg-letter-spacing, 0);line-height:var(--wcss-heading-lg-line-height, 1.3)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));font-weight:var(--wcss-heading-md-weight, 300);letter-spacing:var(--wcss-heading-md-letter-spacing, 0);line-height:var(--wcss-heading-md-line-height, 1.3)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));font-weight:var(--wcss-heading-sm-weight, 300);letter-spacing:var(--wcss-heading-sm-letter-spacing, 0);line-height:var(--wcss-heading-sm-line-height, 1.3)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));font-weight:var(--wcss-heading-xs-weight, 450);letter-spacing:var(--wcss-heading-xs-letter-spacing, 0);line-height:var(--wcss-heading-xs-line-height, 1.3)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));font-weight:var(--wcss-heading-2xs-weight, 450);letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0);line-height:var(--wcss-heading-2xs-line-height, 1.3)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));font-weight:var(--wcss-accent-2xl-weight, 450);letter-spacing:var(--wcss-accent-2xl-letter-spacing, .05em);line-height:var(--wcss-accent-2xl-line-height, 1)}.accent-2xl,.accent-xl{text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));font-weight:var(--wcss-accent-xl-weight, 450);letter-spacing:var(--wcss-accent-xl-letter-spacing, .05em);line-height:var(--wcss-accent-xl-line-height, 1.3)}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));font-weight:var(--wcss-accent-lg-weight, 450);letter-spacing:var(--wcss-accent-lg-letter-spacing, .05em);line-height:var(--wcss-accent-lg-line-height, 1.3)}.accent-lg,.accent-md{text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));font-weight:var(--wcss-accent-md-weight, 500);letter-spacing:var(--wcss-accent-md-letter-spacing, .05em);line-height:var(--wcss-accent-md-line-height, 1.3)}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));font-weight:var(--wcss-accent-sm-weight, 500);letter-spacing:var(--wcss-accent-sm-letter-spacing, .05em);line-height:var(--wcss-accent-sm-line-height, 1.3)}.accent-sm,.accent-xs{text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));font-weight:var(--wcss-accent-xs-weight, 500);letter-spacing:var(--wcss-accent-xs-letter-spacing, .1em);line-height:var(--wcss-accent-xs-line-height, 1.3)}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xs-font-size, clamp(.875rem, 1.1666666667vw, .875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, .1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}:focus:not(:focus-visible){outline:3px solid transparent}:host,:host>span{position:relative}:host{width:2rem;height:2rem;display:inline-block;font-size:0}:host>span{position:absolute;display:inline-block;float:none;top:0;left:0;width:2rem;height:2rem;border-radius:100%;border-style:solid;border-width:0;box-sizing:border-box}:host([xs]),:host([xs])>span{width:1.2rem;height:1.2rem}:host([sm]),:host([sm])>span{width:3rem;height:3rem}:host([md]),:host([md])>span{width:5rem;height:5rem}:host([lg]),:host([lg])>span{width:8rem;height:8rem}:host{--margin: .375rem;--margin-xs: .2rem;--margin-sm: .5rem;--margin-md: .75rem;--margin-lg: 1rem}:host([pulse]),:host([pulse])>span{position:relative}:host([pulse]){width:calc(3rem + var(--margin) * 6);height:calc(1rem + var(--margin) * 2)}:host([pulse])>span{width:1rem;height:1rem;margin:var(--margin);animation:pulse 1.5s ease infinite}:host([pulse][xs]){width:calc(1.95rem + var(--margin-xs) * 6);height:calc(.65rem + var(--margin-xs) * 2)}:host([pulse][xs])>span{margin:var(--margin-xs);width:.65rem;height:.65rem}:host([pulse][sm]){width:calc(6rem + var(--margin-sm) * 6);height:calc(2rem + var(--margin-sm) * 2)}:host([pulse][sm])>span{margin:var(--margin-sm);width:2rem;height:2rem}:host([pulse][md]){width:calc(9rem + var(--margin-md) * 6);height:calc(3rem + var(--margin-md) * 2)}:host([pulse][md])>span{margin:var(--margin-md);width:3rem;height:3rem}:host([pulse][lg]){width:calc(15rem + var(--margin-lg) * 6);height:calc(5rem + var(--margin-lg) * 2)}:host([pulse][lg])>span{margin:var(--margin-lg);width:5rem;height:5rem}:host([pulse])>span:nth-child(1){animation-delay:-.4s}:host([pulse])>span:nth-child(2){animation-delay:-.2s}:host([pulse])>span:nth-child(3){animation-delay:0ms}@keyframes pulse{0%,to{opacity:.1;transform:scale(.9)}50%{opacity:1;transform:scale(1.1)}}:host([orbit]),:host([orbit])>span{opacity:1}:host([orbit])>span{border-width:5px}:host([orbit])>span:nth-child(2){animation:orbit 2s linear infinite}:host([orbit][sm])>span{border-width:8px}:host([orbit][md])>span{border-width:13px}:host([orbit][lg])>span{border-width:21px}@keyframes orbit{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:host([ringworm])>svg{animation:rotate 2s linear infinite;height:100%;width:100%;stroke:currentcolor;stroke-width:8}:host([ringworm]) .path{stroke-dashoffset:0;animation:ringworm 1.5s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes ringworm{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}:host([laser]){position:static;width:100%;display:block;height:0;overflow:hidden;font-size:unset}:host([laser])>span{position:fixed;width:100%;height:.25rem;border-radius:0;z-index:100}:host([laser])>span:nth-child(1){border-color:currentcolor;opacity:.25}:host([laser])>span:nth-child(2){border-color:currentcolor;animation:laser 2s linear infinite;opacity:1;width:50%}:host([laser][sm])>span:nth-child(2){width:20%}:host([laser][md])>span:nth-child(2){width:30%}:host([laser][lg])>span:nth-child(2){width:50%;animation-duration:1.5s}:host([laser][xl])>span:nth-child(2){width:80%;animation-duration:1.5s}@keyframes laser{0%{left:-100%}to{left:110%}}:host>.no-animation{display:none}@media (prefers-reduced-motion: reduce){:host{display:flex;align-items:center;justify-content:center}:host>span{opacity:1}:host>.loader{display:none}:host>svg{display:none}:host>.no-animation{display:block}}
@@ -27614,7 +27737,11 @@ class AuroCalendar extends RangeDatepicker {
27614
27737
  this.calendarRangeMonths = null;
27615
27738
 
27616
27739
  /**
27617
- * Legacy array of disabled-date timestamps.
27740
+ * @deprecated Use `auro-datepicker.blackoutDates` (an array of
27741
+ * `YYYY-MM-DD` ISO strings) instead. This legacy array of Unix
27742
+ * timestamps is still honored for backward compatibility but emits a
27743
+ * one-time `console.debug` the first time a non-empty value is observed.
27744
+ * Support will be removed in a future major release.
27618
27745
  * @private
27619
27746
  */
27620
27747
  this.disabledDays = [];
@@ -27871,17 +27998,44 @@ class AuroCalendar extends RangeDatepicker {
27871
27998
  * @returns {void}
27872
27999
  */
27873
28000
  updateActiveCellForVisibleMonth() {
27874
- // Use double-rAF to ensure child month/cell components have fully
27875
- // rendered and cached their button references before we set tabindex.
27876
- requestAnimationFrame(() => {
27877
- requestAnimationFrame(() => {
27878
- const newDate = this.computeActiveDate({ skipDateFrom: true });
28001
+ this._afterMonthRender(() => {
28002
+ const newDate = this.computeActiveDate({ skipDateFrom: true });
27879
28003
 
27880
- if (newDate !== null && newDate !== undefined) {
27881
- this.activeCellDate = newDate;
27882
- this.setActiveCell(this.activeCellDate);
27883
- }
27884
- });
28004
+ if (newDate !== null && newDate !== undefined) {
28005
+ this.activeCellDate = newDate;
28006
+ this.setActiveCell(this.activeCellDate);
28007
+ }
28008
+ });
28009
+ }
28010
+
28011
+ /**
28012
+ * Schedules `callback` two animation frames out, giving the child
28013
+ * `auro-formkit-calendar-month` and `auro-formkit-calendar-cell` elements
28014
+ * a full render-and-paint cycle to settle before the callback reads or
28015
+ * mutates DOM.
28016
+ *
28017
+ * Why two frames, not one:
28018
+ * 1. Lit batches property updates and renders in a microtask, so frame N
28019
+ * schedules the render but the new DOM may not be painted yet.
28020
+ * 2. Cells re-cache `_cachedButton` inside their own `updateComplete.then`,
28021
+ * which also lands a tick later. Reading buttons from frame N+1
28022
+ * (after both renders + cache refresh have flushed) reliably hits the
28023
+ * new month's cells.
28024
+ *
28025
+ * Used by every code path that calls `handleNextMonth`/`handlePrevMonth`
28026
+ * and then needs to inspect the freshly-rendered cells (cross-month
28027
+ * keyboard nav, boundary events, `updateActiveCellForVisibleMonth`).
28028
+ * Do NOT collapse to a single rAF — it intermittently lands before
28029
+ * `_cachedButton` is refreshed, which silently breaks focus restoration
28030
+ * and `setActiveCell` lookups.
28031
+ * @private
28032
+ * @param {() => void} callback - Runs once after the month re-render and
28033
+ * the cells' button caches have refreshed.
28034
+ * @returns {void}
28035
+ */
28036
+ _afterMonthRender(callback) {
28037
+ requestAnimationFrame(() => {
28038
+ requestAnimationFrame(callback);
27885
28039
  });
27886
28040
  }
27887
28041
 
@@ -27999,6 +28153,47 @@ class AuroCalendar extends RangeDatepicker {
27999
28153
  return Array.from(this.shadowRoot.querySelectorAll('auro-formkit-calendar-month'));
28000
28154
  }
28001
28155
 
28156
+ /**
28157
+ * Picks the focusable cell whose date is closest to targetTs. Used as a
28158
+ * fallback after a month-boundary nav when the exact target date isn't
28159
+ * focusable — typically because the month re-render lagged or the date
28160
+ * was filtered out by isOutOfRange. When two cells are equidistant, the
28161
+ * navigation direction breaks the tie so the user moves the way they
28162
+ * pressed (forward → later cell, backward → earlier cell).
28163
+ * @private
28164
+ * @param {Array} cells - Focusable cells from getAllFocusableCells.
28165
+ * @param {Number} targetTs - Desired Unix timestamp (seconds).
28166
+ * @param {'next'|'prev'} direction - Navigation direction.
28167
+ * @returns {Object|null} The nearest cell, or null when cells is empty.
28168
+ */
28169
+ pickNearestCell(cells, targetTs, direction) {
28170
+ if (!cells.length) {
28171
+ return null;
28172
+ }
28173
+ const forward = direction === 'next';
28174
+ let best = null;
28175
+ let bestDelta = Infinity;
28176
+ cells.forEach((cell) => {
28177
+ if (!cell.day) {
28178
+ return;
28179
+ }
28180
+ const distance = Math.abs(cell.day.date - targetTs);
28181
+ if (distance < bestDelta) {
28182
+ best = cell;
28183
+ bestDelta = distance;
28184
+ return;
28185
+ }
28186
+ if (distance === bestDelta && best) {
28187
+ if (forward && cell.day.date > best.day.date) {
28188
+ best = cell;
28189
+ } else if (!forward && cell.day.date < best.day.date) {
28190
+ best = cell;
28191
+ }
28192
+ }
28193
+ });
28194
+ return best;
28195
+ }
28196
+
28002
28197
  /**
28003
28198
  * Gets all focusable cells across all rendered months.
28004
28199
  * @private
@@ -28015,9 +28210,9 @@ class AuroCalendar extends RangeDatepicker {
28015
28210
 
28016
28211
  /**
28017
28212
  * Sets the active cell across all months. Only one cell has tabindex="0" at a time.
28018
- * Uses imperative DOM manipulation — no Lit re-render triggered.
28019
- * Also updates ariaActiveDescendantElement on the grid wrapper so
28020
- * screen readers announce the active cell without moving DOM focus.
28213
+ * Uses imperative DOM manipulation — no Lit re-render triggered. DOM focus
28214
+ * stays on the grid wrapper; the live region (see getOrCreateLiveRegion)
28215
+ * is what announces the active cell to assistive tech.
28021
28216
  * @param {Number} date - Unix timestamp of the cell to activate.
28022
28217
  * @returns {void}
28023
28218
  */
@@ -28098,6 +28293,65 @@ class AuroCalendar extends RangeDatepicker {
28098
28293
  this.clearRangePreview();
28099
28294
  }
28100
28295
 
28296
+ /**
28297
+ * Returns a memoized Set of blackout timestamps (seconds) drawn from both
28298
+ * the legacy `disabledDays` array and the datepicker's ISO `blackoutDates`.
28299
+ * The cache invalidates when either source array's reference changes, which
28300
+ * matches Lit's own reactive identity semantics for array properties.
28301
+ * @private
28302
+ * @returns {Set<Number>}
28303
+ */
28304
+ _getBlackoutSet() {
28305
+ // Normalize non-array values to a stable `null` sentinel rather than a
28306
+ // fresh `[]` per call — otherwise the reference-identity cache key
28307
+ // (`_cachedBlackoutDisabledDays === disabledDays`) never matches on
28308
+ // subsequent calls and the Set rebuilds every time. `buildBlackoutSet`
28309
+ // already treats null/non-array as "no legacy disabledDays" via its
28310
+ // own Array.isArray gate.
28311
+ const disabledDays = Array.isArray(this.disabledDays) ? this.disabledDays : null;
28312
+ const blackoutDates = this.datepicker?.blackoutDates;
28313
+ if (this._blackoutSet &&
28314
+ this._cachedBlackoutDisabledDays === disabledDays &&
28315
+ this._cachedBlackoutDates === blackoutDates) {
28316
+ return this._blackoutSet;
28317
+ }
28318
+
28319
+ if (disabledDays && disabledDays.length > 0) {
28320
+ this._warnDisabledDaysDeprecated();
28321
+ }
28322
+
28323
+ this._blackoutSet = buildBlackoutSet(disabledDays, blackoutDates);
28324
+ this._cachedBlackoutDisabledDays = disabledDays;
28325
+ this._cachedBlackoutDates = blackoutDates;
28326
+ return this._blackoutSet;
28327
+ }
28328
+
28329
+ /**
28330
+ * Per-class flag that gates the `disabledDays` deprecation warning so it
28331
+ * fires exactly once per page no matter how many calendars or rebuild
28332
+ * cycles encounter the legacy array.
28333
+ * @private
28334
+ */
28335
+ static _warnedDisabledDaysDeprecation = false;
28336
+
28337
+ /**
28338
+ * One-time `console.debug` directing consumers from the legacy
28339
+ * `disabledDays` Unix-timestamp API to the ISO `blackoutDates` API. Fires
28340
+ * the first time `_getBlackoutSet` rebuilds from a non-empty
28341
+ * `disabledDays`; subsequent calls (on this or any other AuroCalendar
28342
+ * instance on the page) are silent.
28343
+ * @private
28344
+ * @returns {void}
28345
+ */
28346
+ _warnDisabledDaysDeprecated() {
28347
+ if (AuroCalendar._warnedDisabledDaysDeprecation) {
28348
+ return;
28349
+ }
28350
+ AuroCalendar._warnedDisabledDaysDeprecation = true;
28351
+ // eslint-disable-next-line no-console
28352
+ console.debug('[auro-datepicker] The `disabledDays` property (Unix timestamps) is deprecated. Migrate to the `blackoutDates` property on auro-datepicker (an array of `YYYY-MM-DD` ISO strings). `disabledDays` will be removed in a future major release.');
28353
+ }
28354
+
28101
28355
  /**
28102
28356
  * Computes the initial active date from data properties alone — no DOM required.
28103
28357
  * Priority:
@@ -28142,21 +28396,10 @@ class AuroCalendar extends RangeDatepicker {
28142
28396
  const minTs = Number.isFinite(rawMin) ? rawMin : -Infinity;
28143
28397
  const maxTs = Number.isFinite(rawMax) ? rawMax : Infinity;
28144
28398
 
28145
- // Build a Set of blackout timestamps for O(1) lookup.
28146
- const blackoutSet = new Set(this.disabledDays.map((day) => parseInt(day, 10)));
28147
-
28148
- // Also include ISO-format blackoutDates from the datepicker if available.
28149
- // Parse YYYY-MM-DD as local date to avoid UTC shift issues.
28150
- const isoBlackouts = this.datepicker?.blackoutDates;
28151
- if (Array.isArray(isoBlackouts)) {
28152
- for (const isoStr of isoBlackouts) {
28153
- const parts = isoStr.split('-');
28154
- const ts = Math.floor(new Date(parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10)).getTime() / 1000);
28155
- if (Number.isFinite(ts)) {
28156
- blackoutSet.add(ts);
28157
- }
28158
- }
28159
- }
28399
+ // Build a Set of blackout timestamps for O(1) lookup. Memoized by the
28400
+ // identity of the source arrays so rapid month nav doesn't rebuild the
28401
+ // Set (and re-parse every ISO string) on every keypress.
28402
+ const blackoutSet = this._getBlackoutSet();
28160
28403
 
28161
28404
  /**
28162
28405
  * A date (unix timestamp in seconds, midnight-aligned) is "enabled" when
@@ -28352,8 +28595,8 @@ class AuroCalendar extends RangeDatepicker {
28352
28595
 
28353
28596
  /**
28354
28597
  * Handles arrow key navigation on the calendar grid wrapper.
28355
- * Focus stays on the grid wrapper; only ariaActiveDescendantElement
28356
- * and the visual active-cell indicator change.
28598
+ * Focus stays on the grid wrapper; only the visual active-cell indicator
28599
+ * changes. The live region announces the new active cell.
28357
28600
  * @private
28358
28601
  * @param {KeyboardEvent} event - The keyboard event.
28359
28602
  * @returns {void}
@@ -28418,21 +28661,21 @@ class AuroCalendar extends RangeDatepicker {
28418
28661
  } else {
28419
28662
  this.handlePrevMonth({ skipActiveUpdate: true });
28420
28663
  }
28421
- requestAnimationFrame(() => {
28422
- requestAnimationFrame(() => {
28423
- const cells = this.getAllFocusableCells();
28424
- const target = cells.find((cell) => cell.day && cell.day.date === targetTs);
28425
- if (target) {
28426
- this.setActiveCell(target.day.date);
28427
- this.handleCellFocused({ detail: { date: target.day.date } });
28428
- } else if (cells.length > 0) {
28429
- const fallback = navDir === 'next' ? cells[cells.length - 1] : cells[0];
28664
+ this._afterMonthRender(() => {
28665
+ const cells = this.getAllFocusableCells();
28666
+ const target = cells.find((cell) => cell.day && cell.day.date === targetTs);
28667
+ if (target) {
28668
+ this.setActiveCell(target.day.date);
28669
+ this.handleCellFocused({ detail: { date: target.day.date } });
28670
+ } else {
28671
+ const fallback = this.pickNearestCell(cells, targetTs, navDir);
28672
+ if (fallback) {
28430
28673
  this.setActiveCell(fallback.day.date);
28431
28674
  this.handleCellFocused({ detail: { date: fallback.day.date } });
28432
28675
  }
28433
- // Re-focus grid wrapper after month change re-render
28434
- this.focusActiveCell();
28435
- });
28676
+ }
28677
+ // Re-focus grid wrapper after month change re-render
28678
+ this.focusActiveCell();
28436
28679
  });
28437
28680
  }
28438
28681
  }
@@ -28458,26 +28701,20 @@ class AuroCalendar extends RangeDatepicker {
28458
28701
  } else {
28459
28702
  this.handlePrevMonth({ skipActiveUpdate: true });
28460
28703
  }
28461
- requestAnimationFrame(() => {
28462
- requestAnimationFrame(() => {
28463
- const cells = this.getAllFocusableCells();
28464
- const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
28465
- if (target) {
28466
- this.setActiveCell(target.day.date);
28467
- this.handleCellFocused({ detail: { date: target.day.date } });
28468
- } else if (cells.length > 0) {
28469
- let nearest = null;
28470
-
28471
- if (navDirection === 'next') {
28472
- [nearest] = cells;
28473
- } else {
28474
- nearest = cells[cells.length - 1];
28475
- }
28704
+ this._afterMonthRender(() => {
28705
+ const cells = this.getAllFocusableCells();
28706
+ const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
28707
+ if (target) {
28708
+ this.setActiveCell(target.day.date);
28709
+ this.handleCellFocused({ detail: { date: target.day.date } });
28710
+ } else {
28711
+ const nearest = this.pickNearestCell(cells, targetDate, navDirection);
28712
+ if (nearest) {
28476
28713
  this.setActiveCell(nearest.day.date);
28477
28714
  this.handleCellFocused({ detail: { date: nearest.day.date } });
28478
28715
  }
28479
- this.focusActiveCell();
28480
- });
28716
+ }
28717
+ this.focusActiveCell();
28481
28718
  });
28482
28719
  }
28483
28720
  }
@@ -28527,19 +28764,22 @@ class AuroCalendar extends RangeDatepicker {
28527
28764
  }
28528
28765
 
28529
28766
  this.handleNextMonth({ skipActiveUpdate: true });
28530
- requestAnimationFrame(() => {
28531
- requestAnimationFrame(() => {
28532
- const cells = this.getAllFocusableCells();
28533
- const target = cells.find((cell) => cell.day && cell.day.date === nextTs);
28534
- if (target) {
28535
- this.setActiveCell(target.day.date);
28536
- this.focusActiveCell();
28537
- } else if (cells.length > 0) {
28538
- // Fallback: first cell of the last rendered month
28539
- this.setActiveCell(cells[cells.length - 1].day.date);
28767
+ this._afterMonthRender(() => {
28768
+ const cells = this.getAllFocusableCells();
28769
+ const target = cells.find((cell) => cell.day && cell.day.date === nextTs);
28770
+ if (target) {
28771
+ this.setActiveCell(target.day.date);
28772
+ this.focusActiveCell();
28773
+ } else {
28774
+ // Same nearest-by-date fallback handleGridKeyDown uses — direct
28775
+ // `cells[length - 1]` would land on the end of the new month,
28776
+ // far from the user's intended `nextTs`.
28777
+ const fallback = this.pickNearestCell(cells, nextTs, 'next');
28778
+ if (fallback) {
28779
+ this.setActiveCell(fallback.day.date);
28540
28780
  this.focusActiveCell();
28541
28781
  }
28542
- });
28782
+ }
28543
28783
  });
28544
28784
  } else if (direction === 'prev' && this.showPrevMonthBtn) {
28545
28785
  // Navigate to previous month and focus the computed previous date.
@@ -28553,19 +28793,22 @@ class AuroCalendar extends RangeDatepicker {
28553
28793
  }
28554
28794
 
28555
28795
  this.handlePrevMonth({ skipActiveUpdate: true });
28556
- requestAnimationFrame(() => {
28557
- requestAnimationFrame(() => {
28558
- const cells = this.getAllFocusableCells();
28559
- const target = cells.find((cell) => cell.day && cell.day.date === prevTs);
28560
- if (target) {
28561
- this.setActiveCell(target.day.date);
28562
- this.focusActiveCell();
28563
- } else if (cells.length > 0) {
28564
- // Fallback: last cell of the first rendered month
28565
- this.setActiveCell(cells[0].day.date);
28796
+ this._afterMonthRender(() => {
28797
+ const cells = this.getAllFocusableCells();
28798
+ const target = cells.find((cell) => cell.day && cell.day.date === prevTs);
28799
+ if (target) {
28800
+ this.setActiveCell(target.day.date);
28801
+ this.focusActiveCell();
28802
+ } else {
28803
+ // Same nearest-by-date fallback handleGridKeyDown uses — direct
28804
+ // `cells[0]` would land on the start of the previous month, far
28805
+ // from the user's intended `prevTs`.
28806
+ const fallback = this.pickNearestCell(cells, prevTs, 'prev');
28807
+ if (fallback) {
28808
+ this.setActiveCell(fallback.day.date);
28566
28809
  this.focusActiveCell();
28567
28810
  }
28568
- });
28811
+ }
28569
28812
  });
28570
28813
  }
28571
28814
  } else if (key === 'ArrowDown' || key === 'ArrowUp') {
@@ -28593,20 +28836,22 @@ class AuroCalendar extends RangeDatepicker {
28593
28836
  } else {
28594
28837
  this.handlePrevMonth({ skipActiveUpdate: true });
28595
28838
  }
28596
- requestAnimationFrame(() => {
28597
- requestAnimationFrame(() => {
28598
- const cells = this.getAllFocusableCells();
28599
- const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
28600
- if (target) {
28601
- this.setActiveCell(target.day.date);
28602
- this.focusActiveCell();
28603
- } else if (cells.length > 0) {
28604
- // Clamp to nearest focusable cell
28605
- const nearest = navDirection === 'next' ? cells[0] : cells[cells.length - 1];
28839
+ this._afterMonthRender(() => {
28840
+ const cells = this.getAllFocusableCells();
28841
+ const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
28842
+ if (target) {
28843
+ this.setActiveCell(target.day.date);
28844
+ this.focusActiveCell();
28845
+ } else {
28846
+ // Same nearest-by-date fallback handleGridKeyDown uses — the
28847
+ // old direction-based `cells[0]`/`cells[length-1]` clamp
28848
+ // could land 25+ days from the intended target.
28849
+ const nearest = this.pickNearestCell(cells, targetDate, navDirection);
28850
+ if (nearest) {
28606
28851
  this.setActiveCell(nearest.day.date);
28607
28852
  this.focusActiveCell();
28608
28853
  }
28609
- });
28854
+ }
28610
28855
  });
28611
28856
  }
28612
28857
  }
@@ -28645,8 +28890,9 @@ class AuroCalendar extends RangeDatepicker {
28645
28890
  return;
28646
28891
  }
28647
28892
 
28648
- // With aria-activedescendant, the button no longer receives native focus,
28649
- // so we use the debounced live region for the full context announcement.
28893
+ // DOM focus stays on the grid wrapper while arrow keys move the active
28894
+ // cell, so cell buttons never receive native focus. The debounced live
28895
+ // region carries the full-context announcement instead.
28650
28896
  const announcement = this.buildFocusAnnouncement(date);
28651
28897
  this.announceFocusDebounced(announcement);
28652
28898
 
@@ -28716,10 +28962,10 @@ class AuroCalendar extends RangeDatepicker {
28716
28962
  return null;
28717
28963
  }
28718
28964
 
28719
- const departTs = startOfDay$2(parsedFrom * 1000) / 1000;
28965
+ const departTs = new Date(parsedFrom * 1000).setHours(0, 0, 0, 0) / 1000;
28720
28966
  const parsedTo = Number.parseInt(this.dateTo, 10);
28721
28967
  const hasTo = Number.isFinite(parsedTo);
28722
- const returnTs = hasTo ? startOfDay$2(parsedTo * 1000) / 1000 : null;
28968
+ const returnTs = hasTo ? new Date(parsedTo * 1000).setHours(0, 0, 0, 0) / 1000 : null;
28723
28969
 
28724
28970
  if (date === departTs) {
28725
28971
  return this.datepicker.rangeLabelStart || 'range start';
@@ -28733,36 +28979,22 @@ class AuroCalendar extends RangeDatepicker {
28733
28979
  if (hasTo && date > departTs && date < returnTs) {
28734
28980
  return this.datepicker.rangeLabelInRange || 'in range';
28735
28981
  }
28982
+ if (!hasTo && date > departTs) {
28983
+ return this.datepicker.rangeLabelEndPreview || 'previewing range end';
28984
+ }
28736
28985
  return this.datepicker.rangeLabelAfterRange || 'after range';
28737
28986
  }
28738
28987
 
28739
28988
  /**
28740
- * Checks whether a given date is a blackout date.
28989
+ * Checks whether a given date is a blackout date. Delegates to the
28990
+ * memoized `_getBlackoutSet` so the YYYY-MM-DD parsing and the
28991
+ * legacy/ISO merge rules live in exactly one place (see `blackoutUtils.js`).
28741
28992
  * @private
28742
28993
  * @param {Number} dateTs - Unix timestamp (seconds).
28743
28994
  * @returns {Boolean} True if the date is blacked out.
28744
28995
  */
28745
28996
  isDateBlackout(dateTs) {
28746
- // Check legacy disabledDays.
28747
- if (Array.isArray(this.disabledDays) && this.disabledDays.length > 0) {
28748
- if (this.disabledDays.findIndex((day) => parseInt(day, 10) === dateTs) !== -1) {
28749
- return true;
28750
- }
28751
- }
28752
-
28753
- // Check ISO blackoutDates.
28754
- const blackoutDates = this.datepicker?.blackoutDates;
28755
- if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
28756
- const date = new Date(dateTs * 1000);
28757
- const yyyy = date.getFullYear();
28758
- const mm = String(date.getMonth() + 1).padStart(2, '0');
28759
- const dd = String(date.getDate()).padStart(2, '0');
28760
- if (blackoutDates.includes(`${yyyy}-${mm}-${dd}`)) {
28761
- return true;
28762
- }
28763
- }
28764
-
28765
- return false;
28997
+ return this._getBlackoutSet().has(dateTs);
28766
28998
  }
28767
28999
 
28768
29000
  /**
@@ -28929,9 +29161,34 @@ class AuroCalendar extends RangeDatepicker {
28929
29161
  // the last one.
28930
29162
  if (this._announceRafId) {
28931
29163
  cancelAnimationFrame(this._announceRafId);
29164
+ this._announceRafId = null;
28932
29165
  }
29166
+ this._deliverAnnouncement(dateStr, 0);
29167
+ }
29168
+
29169
+ /**
29170
+ * Writes `dateStr` to the live region. If the dropdown's dialog hasn't
29171
+ * mounted yet (so getOrCreateLiveRegion can't attach), retries on the
29172
+ * next animation frame up to MAX_LIVE_REGION_RETRIES instead of silently
29173
+ * dropping the announcement. The retry uses the same `_announceRafId`
29174
+ * the double-rAF below uses, so a newer announceSelection call (or
29175
+ * disconnectedCallback) cancels any in-flight retry.
29176
+ * @private
29177
+ * @param {String} dateStr - The localized date string to announce.
29178
+ * @param {Number} attempts - Number of prior retry attempts.
29179
+ * @returns {void}
29180
+ */
29181
+ _deliverAnnouncement(dateStr, attempts) {
28933
29182
  const liveRegion = this.getOrCreateLiveRegion();
28934
29183
  if (!liveRegion) {
29184
+ const MAX_LIVE_REGION_RETRIES = 10;
29185
+ if (attempts < MAX_LIVE_REGION_RETRIES) {
29186
+ this._announceRafId = requestAnimationFrame(() => {
29187
+ this._deliverAnnouncement(dateStr, attempts + 1);
29188
+ });
29189
+ } else {
29190
+ this._announceRafId = null;
29191
+ }
28935
29192
  return;
28936
29193
  }
28937
29194
 
@@ -29117,7 +29374,7 @@ class AuroCalendar extends RangeDatepicker {
29117
29374
  </button>
29118
29375
  ` : undefined}
29119
29376
  </div>
29120
- <div id="calendarGrid" class="calendars" role="group" tabindex="0" aria-label="${this.datepicker?.calendarGridLabel}" @keydown="${this.handleGridKeyDown}" @focusin="${this.handleGridFocusIn}" @focusout="${this.handleGridFocusOut}" @calendar-month-mouseleave="${this.clearRangePreview}">
29377
+ <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}">
29121
29378
  ${this.renderAllCalendars()}
29122
29379
  </div>
29123
29380
  </div>
@@ -33002,7 +33259,7 @@ let AuroHelpText$2$1 = class AuroHelpText extends i$3 {
33002
33259
  }
33003
33260
  };
33004
33261
 
33005
- var formkitVersion$1$3 = '202606252142';
33262
+ var formkitVersion$1$3 = '202606261928';
33006
33263
 
33007
33264
  let AuroElement$2$2 = class AuroElement extends i$3 {
33008
33265
  static get properties() {
@@ -34274,7 +34531,7 @@ let AuroDropdown$3 = class AuroDropdown extends AuroElement$2$2 {
34274
34531
  role="${o$4(this.triggerContentFocusable ? undefined : this.a11yRole)}"
34275
34532
  aria-expanded="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.isPopoverVisible)}"
34276
34533
  aria-controls="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.dropdownId)}"
34277
- aria-haspopup="${o$4(this.a11yRole === 'combobox' ? 'listbox' : undefined)}"
34534
+ aria-haspopup="${o$4(this.a11yRole === 'combobox' && !this.triggerContentFocusable ? 'listbox' : undefined)}"
34278
34535
  aria-labelledby="${o$4(this.triggerContentFocusable ? undefined : 'triggerLabel')}"
34279
34536
  aria-disabled="${o$4(this.disabled ? 'true' : undefined)}"
34280
34537
  @focusin="${this.handleFocusin}"
@@ -39400,7 +39657,7 @@ function normalizeDates$2(context, ...dates) {
39400
39657
  * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))
39401
39658
  * //=> Tue Sep 02 2014 00:00:00
39402
39659
  */
39403
- function startOfDay$3(date, options) {
39660
+ function startOfDay$2(date, options) {
39404
39661
  const _date = toDate$2(date, options?.in);
39405
39662
  _date.setHours(0, 0, 0, 0);
39406
39663
  return _date;
@@ -39448,8 +39705,8 @@ function differenceInCalendarDays$2(laterDate, earlierDate, options) {
39448
39705
  earlierDate,
39449
39706
  );
39450
39707
 
39451
- const laterStartOfDay = startOfDay$3(laterDate_);
39452
- const earlierStartOfDay = startOfDay$3(earlierDate_);
39708
+ const laterStartOfDay = startOfDay$2(laterDate_);
39709
+ const earlierStartOfDay = startOfDay$2(earlierDate_);
39453
39710
 
39454
39711
  const laterTimestamp =
39455
39712
  +laterStartOfDay - getTimezoneOffsetInMilliseconds$2(laterStartOfDay);
@@ -46596,7 +46853,7 @@ let AuroHelpText$1$3 = class AuroHelpText extends i$3 {
46596
46853
  }
46597
46854
  };
46598
46855
 
46599
- var formkitVersion$7 = '202606252142';
46856
+ var formkitVersion$7 = '202606261928';
46600
46857
 
46601
46858
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
46602
46859
  // See LICENSE in the project root for license information.
@@ -48073,6 +48330,7 @@ class AuroDatePicker extends AuroElement$5 {
48073
48330
  this.rangeLabelBeforeRange = 'before range';
48074
48331
  this.rangeLabelInRange = 'in range';
48075
48332
  this.rangeLabelAfterRange = 'after range';
48333
+ this.rangeLabelEndPreview = 'previewing range end';
48076
48334
  this.blackoutDates = [];
48077
48335
  this.blackoutLabel = 'unavailable';
48078
48336
  this.navLabelPrevMonth = 'Previous month';
@@ -48172,6 +48430,22 @@ class AuroDatePicker extends AuroElement$5 {
48172
48430
  */
48173
48431
  this.handleClick = this.handleClick.bind(this);
48174
48432
 
48433
+ /**
48434
+ * Single AbortController shared by every listener registered in the
48435
+ * configure* methods. Lets disconnectedCallback tear all of them down
48436
+ * with one abort() call.
48437
+ *
48438
+ * The genuine leak risk is the listeners attached to children that can
48439
+ * outlive the host if they get reparented — `this.dropdown`,
48440
+ * `this.calendar`, and the inputs inside the dropdown's slot.
48441
+ * Listeners attached to `this` (e.g. focusin/focusout on the host)
48442
+ * form a self-contained reference graph that the GC can collect with
48443
+ * the host anyway, but they share the same signal so the cleanup
48444
+ * pattern stays uniform across all configure* sites.
48445
+ * @private
48446
+ */
48447
+ this._listenerAbortController = new AbortController();
48448
+
48175
48449
  /**
48176
48450
  * @private
48177
48451
  */
@@ -48220,6 +48494,7 @@ class AuroDatePicker extends AuroElement$5 {
48220
48494
 
48221
48495
  /**
48222
48496
  * Label announced for blackout (disabled but in-range) date cells.
48497
+ * @default 'unavailable'
48223
48498
  */
48224
48499
  blackoutLabel: {
48225
48500
  type: String,
@@ -48236,6 +48511,7 @@ class AuroDatePicker extends AuroElement$5 {
48236
48511
 
48237
48512
  /**
48238
48513
  * Accessible label for the calendar grid containing the days of the month.
48514
+ * @default 'Calendar days of the month'
48239
48515
  */
48240
48516
  calendarGridLabel: {
48241
48517
  type: String,
@@ -48398,6 +48674,7 @@ class AuroDatePicker extends AuroElement$5 {
48398
48674
 
48399
48675
  /**
48400
48676
  * Accessible label for the next month navigation button.
48677
+ * @default 'Next month'
48401
48678
  */
48402
48679
  navLabelNextMonth: {
48403
48680
  type: String,
@@ -48406,6 +48683,7 @@ class AuroDatePicker extends AuroElement$5 {
48406
48683
 
48407
48684
  /**
48408
48685
  * Accessible label for the previous month navigation button.
48686
+ * @default 'Previous month'
48409
48687
  */
48410
48688
  navLabelPrevMonth: {
48411
48689
  type: String,
@@ -48483,7 +48761,11 @@ class AuroDatePicker extends AuroElement$5 {
48483
48761
  },
48484
48762
 
48485
48763
  /**
48486
- * Label announced for cells after the range (or after start when no end is selected).
48764
+ * Label announced for cells after a fully selected range (both
48765
+ * `dateFrom` and `dateTo` are set). While a range is still being
48766
+ * picked (`dateFrom` set, `dateTo` unset), focused cells past the
48767
+ * start use `rangeLabelEndPreview` instead.
48768
+ * @default 'after range'
48487
48769
  */
48488
48770
  rangeLabelAfterRange: {
48489
48771
  type: String,
@@ -48492,6 +48774,7 @@ class AuroDatePicker extends AuroElement$5 {
48492
48774
 
48493
48775
  /**
48494
48776
  * Label announced for cells before the range start.
48777
+ * @default 'before range'
48495
48778
  */
48496
48779
  rangeLabelBeforeRange: {
48497
48780
  type: String,
@@ -48500,14 +48783,27 @@ class AuroDatePicker extends AuroElement$5 {
48500
48783
 
48501
48784
  /**
48502
48785
  * Label announced for the range end date cell.
48786
+ * @default 'range end'
48503
48787
  */
48504
48788
  rangeLabelEnd: {
48505
48789
  type: String,
48506
48790
  reflect: true
48507
48791
  },
48508
48792
 
48793
+ /**
48794
+ * Label announced for the focused cell while previewing a range end
48795
+ * (dateFrom set, dateTo not yet selected). Tells AT users that
48796
+ * pressing Enter would commit this cell as the range end.
48797
+ * @default 'previewing range end'
48798
+ */
48799
+ rangeLabelEndPreview: {
48800
+ type: String,
48801
+ reflect: true
48802
+ },
48803
+
48509
48804
  /**
48510
48805
  * Label announced for cells within the selected range.
48806
+ * @default 'in range'
48511
48807
  */
48512
48808
  rangeLabelInRange: {
48513
48809
  type: String,
@@ -48516,6 +48812,7 @@ class AuroDatePicker extends AuroElement$5 {
48516
48812
 
48517
48813
  /**
48518
48814
  * Label announced for the range start date cell.
48815
+ * @default 'range start'
48519
48816
  */
48520
48817
  rangeLabelStart: {
48521
48818
  type: String,
@@ -48523,7 +48820,7 @@ class AuroDatePicker extends AuroElement$5 {
48523
48820
  },
48524
48821
 
48525
48822
  /**
48526
- * Dates that the user should have for reference as part of their decision making when selecting a date.
48823
+ * Dates that the user should have for reference as part of their decision-making when selecting a date.
48527
48824
  * This should be a JSON string array of ISO date strings (`YYYY-MM-DD`).
48528
48825
  */
48529
48826
  referenceDates: {
@@ -48880,10 +49177,26 @@ class AuroDatePicker extends AuroElement$5 {
48880
49177
  // ─── Vendor calendar time conversions ─────────────────────────────────────
48881
49178
 
48882
49179
  /**
48883
- * Converts a Unix timestamp (seconds) from the vendor calendar to an ISO date string.
49180
+ * Converts a Unix timestamp (seconds) from the vendored range-datepicker
49181
+ * (`src/vendor/wc-range-datepicker/day.js`) to an ISO date string.
49182
+ *
49183
+ * Timezone contract:
49184
+ * - INPUT: `time` is assumed to be the seconds-since-epoch of **local
49185
+ * midnight** for the intended calendar day. The vendor's Day constructor
49186
+ * builds it via `date-fns format(date, 't')` from a locally-constructed
49187
+ * Date, so this assumption currently holds end-to-end.
49188
+ * - OUTPUT: `dateFormatter.toISOFormatString` reads the Date's local
49189
+ * getFullYear/getMonth/getDate components, so the returned YYYY-MM-DD
49190
+ * string matches the local calendar day.
49191
+ *
49192
+ * If the vendor ever switches to emitting UTC-midnight timestamps, this
49193
+ * conversion will silently shift the returned date by one day in zones
49194
+ * west of UTC. Any vendor swap should re-verify this contract; the TZ
49195
+ * regression suite (`npm run test:hst`, UTC-10) will catch the symptom.
49196
+ *
48884
49197
  * @private
48885
- * @param {number} time - Unix timestamp in seconds.
48886
- * @returns {string} ISO date string (yyyy-mm-dd).
49198
+ * @param {number} time - Unix timestamp (seconds), local midnight of the day.
49199
+ * @returns {string} ISO date string (yyyy-mm-dd) reflecting the local calendar day.
48887
49200
  */
48888
49201
  convertWcTimeToDate(time) {
48889
49202
  return dateFormatter$1.toISOFormatString(new Date(time * 1000));
@@ -48985,8 +49298,8 @@ class AuroDatePicker extends AuroElement$5 {
48985
49298
  }
48986
49299
  }
48987
49300
 
48988
- // Focus the calendar grid wrapper (aria-activedescendant handles
48989
- // the SR announcement for the active cell).
49301
+ // Focus the calendar grid wrapper. The live region (announced just
49302
+ // below) handles the SR announcement for the active cell.
48990
49303
  if (activeCell) {
48991
49304
  this.calendar.focusActiveCell();
48992
49305
 
@@ -49036,11 +49349,13 @@ class AuroDatePicker extends AuroElement$5 {
49036
49349
  this.dropdown.bibDialogLabel = labelElement.textContent.trim() || undefined;
49037
49350
  }
49038
49351
 
49352
+ const { signal } = this._listenerAbortController;
49353
+
49039
49354
  this.dropdown.addEventListener('auroDropdown-triggerClick', () => {
49040
49355
  if (!this.isPopoverVisible) {
49041
49356
  this.dropdown.show();
49042
49357
  }
49043
- });
49358
+ }, { signal });
49044
49359
 
49045
49360
  this.dropdown.addEventListener('auroDropdown-toggled', () => {
49046
49361
  this.notifyDatepickerToggled();
@@ -49058,7 +49373,7 @@ class AuroDatePicker extends AuroElement$5 {
49058
49373
  if (this.valueObject) {
49059
49374
  this.centralDate = this.value;
49060
49375
  } else if (!this.centralDate && !this.calendarStartDate && !this.minDate) {
49061
- this.centralDate = new Date();
49376
+ this.centralDate = dateFormatter$1.toISOFormatString(new Date());
49062
49377
  }
49063
49378
  }
49064
49379
 
@@ -49138,7 +49453,7 @@ class AuroDatePicker extends AuroElement$5 {
49138
49453
  this.forceScrollOnNextMobileCalendarRender = false;
49139
49454
  }, 0);
49140
49455
  }
49141
- });
49456
+ }, { signal });
49142
49457
 
49143
49458
  // Handle responsive strategy changes while the dropdown is open
49144
49459
  // (e.g. resizing from desktop → mobile or vice versa).
@@ -49185,7 +49500,7 @@ class AuroDatePicker extends AuroElement$5 {
49185
49500
  });
49186
49501
  });
49187
49502
  }
49188
- });
49503
+ }, { signal });
49189
49504
  }
49190
49505
 
49191
49506
  /**
@@ -49198,6 +49513,8 @@ class AuroDatePicker extends AuroElement$5 {
49198
49513
 
49199
49514
  this.inputList = [...this.dropdown.querySelectorAll(this.inputTag._$litStatic$)];
49200
49515
 
49516
+ const { signal } = this._listenerAbortController;
49517
+
49201
49518
  this.inputList.forEach((input, index) => {
49202
49519
  input.addEventListener('input', (event) => {
49203
49520
  event.stopPropagation();
@@ -49209,7 +49526,7 @@ class AuroDatePicker extends AuroElement$5 {
49209
49526
  }
49210
49527
 
49211
49528
  this.notifyValueChanged();
49212
- });
49529
+ }, { signal });
49213
49530
 
49214
49531
  input.addEventListener('auroFormElement-validated', (evt) => {
49215
49532
  // not to bubble up input's validated event.
@@ -49225,7 +49542,7 @@ class AuroDatePicker extends AuroElement$5 {
49225
49542
  this.validity = evt.detail.validity;
49226
49543
  this.errorMessage = evt.detail.message;
49227
49544
  }
49228
- });
49545
+ }, { signal });
49229
49546
  });
49230
49547
  }
49231
49548
 
@@ -49239,19 +49556,32 @@ class AuroDatePicker extends AuroElement$5 {
49239
49556
  this.calendar.datepicker = this;
49240
49557
  this.calendar.dropdown = this.dropdown;
49241
49558
 
49559
+ const { signal } = this._listenerAbortController;
49560
+
49242
49561
  this.calendar.addEventListener('auroCalendar-dateSelected', () => {
49243
- if (this.inputList[0].value !== this.calendar.dateFrom && this.calendar.dateFrom !== undefined) {
49244
- this.inputList[0].value = this.convertWcTimeToDate(this.calendar.dateFrom);
49562
+ // Compare the input's ISO value against the *converted* calendar
49563
+ // timestamp (the vendor's `dateFrom`/`dateTo` are Unix-seconds
49564
+ // strings — comparing the input ISO directly against them would
49565
+ // never match, so the write would fire on every event and emit
49566
+ // redundant input/change activity).
49567
+ if (this.calendar.dateFrom !== undefined) {
49568
+ const fromIso = this.convertWcTimeToDate(this.calendar.dateFrom);
49569
+ if (this.inputList[0].value !== fromIso) {
49570
+ this.inputList[0].value = fromIso;
49571
+ }
49245
49572
  }
49246
49573
 
49247
- if (this.inputList[1] && this.calendar.dateTo && this.inputList[1].value !== this.calendar.dateTo) {
49248
- this.inputList[1].value = this.convertWcTimeToDate(this.calendar.dateTo);
49574
+ if (this.inputList[1] && this.calendar.dateTo) {
49575
+ const toIso = this.convertWcTimeToDate(this.calendar.dateTo);
49576
+ if (this.inputList[1].value !== toIso) {
49577
+ this.inputList[1].value = toIso;
49578
+ }
49249
49579
  }
49250
- });
49580
+ }, { signal });
49251
49581
 
49252
49582
  this.calendar.addEventListener('auroCalendar-dismissRequest', () => {
49253
49583
  this.dropdown.hide();
49254
- });
49584
+ }, { signal });
49255
49585
 
49256
49586
  this.calendar.addEventListener('auroCalendar-centralDateChanged', (event) => {
49257
49587
  const match = this.centralDateObject && this.util.datesMatch(event.detail.date, this.centralDateObject);
@@ -49261,7 +49591,7 @@ class AuroDatePicker extends AuroElement$5 {
49261
49591
  }
49262
49592
 
49263
49593
  this.notifyMonthChanged(event);
49264
- });
49594
+ }, { signal });
49265
49595
  }
49266
49596
 
49267
49597
  /**
@@ -49270,10 +49600,17 @@ class AuroDatePicker extends AuroElement$5 {
49270
49600
  * @returns {void}
49271
49601
  */
49272
49602
  configureDatepicker() {
49603
+ // These listeners are on `this` (the host), so they would GC with the
49604
+ // host even without the abort signal — see the leak rationale on
49605
+ // `_listenerAbortController`. The signal is still passed for uniform
49606
+ // cleanup semantics with the child-element listeners in the other
49607
+ // configure* methods.
49608
+ const { signal } = this._listenerAbortController;
49609
+
49273
49610
  this.addEventListener('focusin', () => {
49274
49611
  this.touched = true;
49275
49612
  this.hasFocus = true;
49276
- });
49613
+ }, { signal });
49277
49614
 
49278
49615
  this.addEventListener('focusout', () => {
49279
49616
  this.hasFocus = false;
@@ -49285,7 +49622,7 @@ class AuroDatePicker extends AuroElement$5 {
49285
49622
  if (!this.matches(':focus-within')) {
49286
49623
  this.validate();
49287
49624
  }
49288
- });
49625
+ }, { signal });
49289
49626
 
49290
49627
  if (this.valueObject) {
49291
49628
  this.calendar.dateFrom = this.convertToWcValidTime(this.valueObject);
@@ -49483,6 +49820,41 @@ class AuroDatePicker extends AuroElement$5 {
49483
49820
  return this.validity !== undefined && this.validity !== 'valid';
49484
49821
  }
49485
49822
 
49823
+ /**
49824
+ * Per-class dedup set used by `_warnInvalidLocale`. Static so the dedup
49825
+ * spans every datepicker instance on the page; lives on the class (not
49826
+ * at module scope) so it stays an encapsulated implementation detail of
49827
+ * this component and does not interfere with WCA's class-JSDoc
49828
+ * attachment.
49829
+ * @private
49830
+ */
49831
+ static _warnedInvalidLocales = new Set();
49832
+
49833
+ /**
49834
+ * Logs a one-time `console.debug` when an unsupported locale falls back to
49835
+ * en-US. Deduped by the offending tag so noisy re-renders that resurface
49836
+ * the same bad value stay quiet, but each new bad value still signals so
49837
+ * consumers can spot the typo or missing tag.
49838
+ * @private
49839
+ * @param {string|undefined} badLocale - The locale value that failed.
49840
+ * @returns {void}
49841
+ */
49842
+ _warnInvalidLocale(badLocale) {
49843
+ // Stringify without coalescing — `String(undefined)` / `String(null)`
49844
+ // surface the actual offending value in the log, instead of the
49845
+ // ambiguous `Locale ""` that `String(badLocale ?? '')` would produce.
49846
+ // Dedup still works correctly because each unique stringification
49847
+ // becomes its own Set entry.
49848
+ const key = String(badLocale);
49849
+ const seen = AuroDatePicker._warnedInvalidLocales;
49850
+ if (seen.has(key)) {
49851
+ return;
49852
+ }
49853
+ seen.add(key);
49854
+ // eslint-disable-next-line no-console
49855
+ 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".`);
49856
+ }
49857
+
49486
49858
  /**
49487
49859
  * Lifecycle method to check if the locale is valid.
49488
49860
  * @ignore
@@ -49493,10 +49865,15 @@ class AuroDatePicker extends AuroElement$5 {
49493
49865
  if (changedProperties.has('locale')) {
49494
49866
  try {
49495
49867
  const supported = Intl.DateTimeFormat.supportedLocalesOf([this.locale], { localeMatcher: 'lookup' });
49496
- this._validLocale = supported.length > 0 ? this.locale : 'en-US';
49868
+ if (supported.length > 0) {
49869
+ this._validLocale = this.locale;
49870
+ } else {
49871
+ this._validLocale = 'en-US';
49872
+ this._warnInvalidLocale(this.locale);
49873
+ }
49497
49874
  } catch {
49498
- console.debug(`[AuroDatePicker] The locale "${this.locale}" is not valid. Falling back to "en-US".`); // eslint-disable-line no-console
49499
49875
  this._validLocale = 'en-US';
49876
+ this._warnInvalidLocale(this.locale);
49500
49877
  }
49501
49878
 
49502
49879
  const previousLocaleFormat = getDateFormatFromLocale$1(changedProperties.get('locale'));
@@ -49578,8 +49955,6 @@ class AuroDatePicker extends AuroElement$5 {
49578
49955
  // Skip centralDate update when user clicked a cell in range mode
49579
49956
  // to prevent the displayed months from shifting
49580
49957
  this.centralDate = this.value;
49581
- //TODO: TEST THIS CHANGE
49582
- // this.calendarRenderUtil.updateCentralDate(this, this.value);
49583
49958
  }
49584
49959
 
49585
49960
  this.setHasValue();
@@ -49639,8 +50014,6 @@ class AuroDatePicker extends AuroElement$5 {
49639
50014
  // Skip centralDate update when user clicked a cell in range mode
49640
50015
  // to prevent the displayed months from shifting
49641
50016
  this.centralDate = this.valueEnd;
49642
- // TODO: TEST THIS CHANGE
49643
- // this.calendarRenderUtil.updateCentralDate(this, this.formattedValueEnd);
49644
50017
  }
49645
50018
 
49646
50019
  this.validate();
@@ -49782,7 +50155,7 @@ class AuroDatePicker extends AuroElement$5 {
49782
50155
  * @returns {void}
49783
50156
  */
49784
50157
  configureClickHandler() {
49785
- this.addEventListener('click', this.handleClick);
50158
+ this.addEventListener('click', this.handleClick, { signal: this._listenerAbortController.signal });
49786
50159
  }
49787
50160
 
49788
50161
  firstUpdated() {
@@ -49790,6 +50163,15 @@ class AuroDatePicker extends AuroElement$5 {
49790
50163
  // Add the tag name as an attribute if it is different than the component name
49791
50164
  this.runtimeUtils.handleComponentTagRename(this, 'auro-datepicker');
49792
50165
 
50166
+ // If the element was disconnected before this first render finished,
50167
+ // disconnectedCallback's microtask already aborted the controller. The
50168
+ // connectedCallback reinit guard skips that case because `hasUpdated`
50169
+ // is still false. Mint a fresh controller here so configure* registers
50170
+ // listeners against a live signal.
50171
+ if (this._listenerAbortController.signal.aborted) {
50172
+ this._listenerAbortController = new AbortController();
50173
+ }
50174
+
49793
50175
  this.configureDropdown();
49794
50176
  this.configureInput();
49795
50177
  this.configureCalendar();
@@ -49801,9 +50183,36 @@ class AuroDatePicker extends AuroElement$5 {
49801
50183
  connectedCallback() {
49802
50184
  super.connectedCallback();
49803
50185
 
50186
+ // True reconnect after `disconnectedCallback` aborted our controller:
50187
+ // the existing signal is dead, so listeners registered against it
50188
+ // would never fire. Create a fresh controller and re-run the
50189
+ // configure* wiring (each method is idempotent — it just re-caches
50190
+ // child refs and re-registers listeners against the new signal).
50191
+ // `hasUpdated` gates this so the *first* connect (which precedes
50192
+ // firstUpdated) still falls through to firstUpdated's initial wiring.
50193
+ if (this.hasUpdated && this._listenerAbortController.signal.aborted) {
50194
+ this._listenerAbortController = new AbortController();
50195
+ this.configureDropdown();
50196
+ this.configureInput();
50197
+ this.configureCalendar();
50198
+ this.configureDatepicker();
50199
+ this.configureClickHandler();
50200
+ }
50201
+
49804
50202
  this.locale = this.domHandler.getLocale(this);
49805
50203
  }
49806
50204
 
50205
+ disconnectedCallback() {
50206
+ super.disconnectedCallback();
50207
+ // Defer so that re-parenting (auro-drawer slotting it into a dialog,
50208
+ // for example) does not abort listeners we still need after reconnect.
50209
+ queueMicrotask(() => {
50210
+ if (!this.isConnected) {
50211
+ this._listenerAbortController.abort();
50212
+ }
50213
+ });
50214
+ }
50215
+
49807
50216
  // layout render methods
49808
50217
  // ------------------------------------
49809
50218
 
@@ -51299,7 +51708,7 @@ let AuroHelpText$1$2 = class AuroHelpText extends i$3 {
51299
51708
  }
51300
51709
  };
51301
51710
 
51302
- var formkitVersion$1$2 = '202606252142';
51711
+ var formkitVersion$1$2 = '202606261928';
51303
51712
 
51304
51713
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
51305
51714
  // See LICENSE in the project root for license information.
@@ -55627,7 +56036,7 @@ let AuroHelpText$6 = class AuroHelpText extends i$3 {
55627
56036
  }
55628
56037
  };
55629
56038
 
55630
- var formkitVersion$6 = '202606252142';
56039
+ var formkitVersion$6 = '202606261928';
55631
56040
 
55632
56041
  let AuroElement$1$2 = class AuroElement extends i$3 {
55633
56042
  static get properties() {
@@ -56899,7 +57308,7 @@ let AuroDropdown$2 = class AuroDropdown extends AuroElement$1$2 {
56899
57308
  role="${o$4(this.triggerContentFocusable ? undefined : this.a11yRole)}"
56900
57309
  aria-expanded="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.isPopoverVisible)}"
56901
57310
  aria-controls="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.dropdownId)}"
56902
- aria-haspopup="${o$4(this.a11yRole === 'combobox' ? 'listbox' : undefined)}"
57311
+ aria-haspopup="${o$4(this.a11yRole === 'combobox' && !this.triggerContentFocusable ? 'listbox' : undefined)}"
56903
57312
  aria-labelledby="${o$4(this.triggerContentFocusable ? undefined : 'triggerLabel')}"
56904
57313
  aria-disabled="${o$4(this.disabled ? 'true' : undefined)}"
56905
57314
  @focusin="${this.handleFocusin}"
@@ -58032,6 +58441,13 @@ class AuroCounterGroup extends AuroElement$4 {
58032
58441
  */
58033
58442
  configureDropdownCounters() {
58034
58443
  this.dropdown = this.shadowRoot.querySelector(this.dropdownTag._$litStatic$);
58444
+
58445
+ // Counter rows are slotted into the bib through multiple shadow roots
58446
+ // (dropdown → bib → bibtemplate → counter-group → counter), so the floater's
58447
+ // `:focus-within` focus-loss check fails to match the dropdown host in Chromium
58448
+ // and the bib auto-closes immediately after opening. Mirrors auro-select.
58449
+ this.dropdown.noHideOnThisFocusLoss = true;
58450
+
58035
58451
  this.dropdown.requestUpdate();
58036
58452
 
58037
58453
  const counterWrapper = this.shadowRoot.querySelector('auro-counter-wrapper');
@@ -59568,7 +59984,7 @@ let AuroHelpText$5 = class AuroHelpText extends i$3 {
59568
59984
  }
59569
59985
  };
59570
59986
 
59571
- var formkitVersion$5 = '202606252142';
59987
+ var formkitVersion$5 = '202606261928';
59572
59988
 
59573
59989
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
59574
59990
  // See LICENSE in the project root for license information.
@@ -61318,7 +61734,7 @@ let AuroHelpText$4 = class AuroHelpText extends i$3 {
61318
61734
  }
61319
61735
  };
61320
61736
 
61321
- var formkitVersion$4 = '202606252142';
61737
+ var formkitVersion$4 = '202606261928';
61322
61738
 
61323
61739
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
61324
61740
  // See LICENSE in the project root for license information.
@@ -66533,7 +66949,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$3 {
66533
66949
  }
66534
66950
  };
66535
66951
 
66536
- var formkitVersion$2 = '202606252142';
66952
+ var formkitVersion$2 = '202606261928';
66537
66953
 
66538
66954
  let AuroElement$2$1 = class AuroElement extends i$3 {
66539
66955
  static get properties() {
@@ -67805,7 +68221,7 @@ let AuroDropdown$1 = class AuroDropdown extends AuroElement$2$1 {
67805
68221
  role="${o$4(this.triggerContentFocusable ? undefined : this.a11yRole)}"
67806
68222
  aria-expanded="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.isPopoverVisible)}"
67807
68223
  aria-controls="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.dropdownId)}"
67808
- aria-haspopup="${o$4(this.a11yRole === 'combobox' ? 'listbox' : undefined)}"
68224
+ aria-haspopup="${o$4(this.a11yRole === 'combobox' && !this.triggerContentFocusable ? 'listbox' : undefined)}"
67809
68225
  aria-labelledby="${o$4(this.triggerContentFocusable ? undefined : 'triggerLabel')}"
67810
68226
  aria-disabled="${o$4(this.disabled ? 'true' : undefined)}"
67811
68227
  @focusin="${this.handleFocusin}"
@@ -80127,7 +80543,7 @@ let AuroHelpText$1$1 = class AuroHelpText extends i$3 {
80127
80543
  }
80128
80544
  };
80129
80545
 
80130
- var formkitVersion$1$1 = '202606252142';
80546
+ var formkitVersion$1$1 = '202606261928';
80131
80547
 
80132
80548
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
80133
80549
  // See LICENSE in the project root for license information.
@@ -81248,7 +81664,7 @@ let AuroBibtemplate$1 = class AuroBibtemplate extends i$3 {
81248
81664
  }
81249
81665
  };
81250
81666
 
81251
- var formkitVersion$3 = '202606252142';
81667
+ var formkitVersion$3 = '202606261928';
81252
81668
 
81253
81669
  var styleCss$1$3 = i$6`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock{display:block}.util_displayFlex{display:flex}.util_displayHidden{display:none}.util_displayHiddenVisually{position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}:host{display:block;text-align:left}:host [auro-dropdown]{--ds-auro-dropdown-trigger-background-color: transparent}:host #inputInBib::part(wrapper){box-shadow:none}:host #inputInBib::part(accent-left){display:none}:host([layout*=classic]) [auro-input]{width:100%}:host([layout*=classic]) [auro-input]::part(helpText){display:none}:host([layout*=classic]) #slotHolder{display:none}`;
81254
81670
 
@@ -86068,10 +86484,14 @@ const selectKeyboardStrategy = {
86068
86484
  if (!lastOption) {
86069
86485
  return;
86070
86486
  }
86487
+ // Pre-stash before show() so the auroDropdown-toggled handler's
86488
+ // `!optionActive` guard short-circuits the firstActive/selected fallback —
86489
+ // otherwise show() synchronously fires the handler and writes
86490
+ // aria-activedescendant once before we overwrite it.
86491
+ component.menu.updateActiveOption(lastOption);
86071
86492
  if (!ctx.isExpanded) {
86072
86493
  component.dropdown.show();
86073
86494
  }
86074
- component.menu.updateActiveOption(lastOption);
86075
86495
  },
86076
86496
 
86077
86497
  Enter(component, evt, ctx) {
@@ -86095,10 +86515,11 @@ const selectKeyboardStrategy = {
86095
86515
  if (!firstOption) {
86096
86516
  return;
86097
86517
  }
86518
+ // See End() for why this must run before show().
86519
+ component.menu.updateActiveOption(firstOption);
86098
86520
  if (!ctx.isExpanded) {
86099
86521
  component.dropdown.show();
86100
86522
  }
86101
- component.menu.updateActiveOption(firstOption);
86102
86523
  },
86103
86524
 
86104
86525
  Tab(component, evt, ctx) {
@@ -90045,7 +90466,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
90045
90466
  }
90046
90467
  };
90047
90468
 
90048
- var formkitVersion$1 = '202606252142';
90469
+ var formkitVersion$1 = '202606261928';
90049
90470
 
90050
90471
  class AuroElement extends i$3 {
90051
90472
  static get properties() {
@@ -91317,7 +91738,7 @@ class AuroDropdown extends AuroElement {
91317
91738
  role="${o$4(this.triggerContentFocusable ? undefined : this.a11yRole)}"
91318
91739
  aria-expanded="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.isPopoverVisible)}"
91319
91740
  aria-controls="${o$4(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.dropdownId)}"
91320
- aria-haspopup="${o$4(this.a11yRole === 'combobox' ? 'listbox' : undefined)}"
91741
+ aria-haspopup="${o$4(this.a11yRole === 'combobox' && !this.triggerContentFocusable ? 'listbox' : undefined)}"
91321
91742
  aria-labelledby="${o$4(this.triggerContentFocusable ? undefined : 'triggerLabel')}"
91322
91743
  aria-disabled="${o$4(this.disabled ? 'true' : undefined)}"
91323
91744
  @focusin="${this.handleFocusin}"
@@ -92067,7 +92488,7 @@ class AuroHelpText extends i$3 {
92067
92488
  }
92068
92489
  }
92069
92490
 
92070
- var formkitVersion = '202606252142';
92491
+ var formkitVersion = '202606261928';
92071
92492
 
92072
92493
  var styleCss = i$6`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock{display:block}.util_displayFlex{display:flex}.util_displayHidden{display:none}.util_displayHiddenVisually{position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}.body-default{font-size:var(--wcss-body-default-font-size, 1rem);font-weight:var(--wcss-body-default-weight, );line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-default-emphasized{font-size:var(--wcss-body-default-emphasized-font-size, 1rem);font-weight:var(--wcss-body-default-emphasized-weight, );line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);font-weight:var(--wcss-body-lg-weight, );line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg,.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg-emphasized{font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);font-weight:var(--wcss-body-lg-emphasized-weight, );line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, 0.875rem);font-weight:var(--wcss-body-sm-weight, );line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-sm-emphasized{font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);font-weight:var(--wcss-body-sm-emphasized-weight, );line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-size:var(--wcss-body-xs-font-size, 0.75rem);font-weight:var(--wcss-body-xs-weight, );line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs,.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs-emphasized{font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);font-weight:var(--wcss-body-xs-emphasized-weight, );line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-size:var(--wcss-body-2xs-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-weight, );line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs,.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-2xs-emphasized{font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-emphasized-weight, );line-height:var(--wcss-body-2xs-emphasized-line-height, 0.875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));font-weight:var(--wcss-display-2xl-weight, 300);letter-spacing:var(--wcss-display-2xl-letter-spacing, 0);line-height:var(--wcss-display-2xl-line-height, 1.3)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));font-weight:var(--wcss-display-xl-weight, 300);letter-spacing:var(--wcss-display-xl-letter-spacing, 0);line-height:var(--wcss-display-xl-line-height, 1.3)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));font-weight:var(--wcss-display-lg-weight, 300);letter-spacing:var(--wcss-display-lg-letter-spacing, 0);line-height:var(--wcss-display-lg-line-height, 1.3)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));font-weight:var(--wcss-display-md-weight, 300);letter-spacing:var(--wcss-display-md-letter-spacing, 0);line-height:var(--wcss-display-md-line-height, 1.3)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));font-weight:var(--wcss-display-sm-weight, 300);letter-spacing:var(--wcss-display-sm-letter-spacing, 0);line-height:var(--wcss-display-sm-line-height, 1.3)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));font-weight:var(--wcss-display-xs-weight, 300);letter-spacing:var(--wcss-display-xs-letter-spacing, 0);line-height:var(--wcss-display-xs-line-height, 1.3)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));font-weight:var(--wcss-heading-xl-weight, 300);letter-spacing:var(--wcss-heading-xl-letter-spacing, 0);line-height:var(--wcss-heading-xl-line-height, 1.3)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));font-weight:var(--wcss-heading-lg-weight, 300);letter-spacing:var(--wcss-heading-lg-letter-spacing, 0);line-height:var(--wcss-heading-lg-line-height, 1.3)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));font-weight:var(--wcss-heading-md-weight, 300);letter-spacing:var(--wcss-heading-md-letter-spacing, 0);line-height:var(--wcss-heading-md-line-height, 1.3)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));font-weight:var(--wcss-heading-sm-weight, 300);letter-spacing:var(--wcss-heading-sm-letter-spacing, 0);line-height:var(--wcss-heading-sm-line-height, 1.3)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));font-weight:var(--wcss-heading-xs-weight, 300);letter-spacing:var(--wcss-heading-xs-letter-spacing, 0);line-height:var(--wcss-heading-xs-line-height, 1.3)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));font-weight:var(--wcss-heading-2xs-weight, 300);letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0);line-height:var(--wcss-heading-2xs-line-height, 1.3)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));font-weight:var(--wcss-accent-2xl-weight, 450);letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);line-height:var(--wcss-accent-2xl-line-height, 1)}.accent-2xl,.accent-xl{text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));font-weight:var(--wcss-accent-xl-weight, 450);letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);line-height:var(--wcss-accent-xl-line-height, 1.3)}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));font-weight:var(--wcss-accent-lg-weight, 450);letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);line-height:var(--wcss-accent-lg-line-height, 1.3)}.accent-lg,.accent-md{text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));font-weight:var(--wcss-accent-md-weight, 500);letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);line-height:var(--wcss-accent-md-line-height, 1.3)}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));font-weight:var(--wcss-accent-sm-weight, 500);letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);line-height:var(--wcss-accent-sm-line-height, 1.3)}.accent-sm,.accent-xs{text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));font-weight:var(--wcss-accent-xs-weight, 500);letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);line-height:var(--wcss-accent-xs-line-height, 1.3)}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}[auro-dropdown]{--ds-auro-dropdown-trigger-border-color: var(--ds-auro-select-border-color);--ds-auro-dropdown-trigger-background-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-container-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-outline-color: var(--ds-auro-select-outline-color)}:host{display:inline-block;text-align:left;vertical-align:top}:host([layout*=emphasized]) [auro-dropdown],:host([layout*=snowflake]) [auro-dropdown]{--ds-auro-select-border-color: transparent}:host([layout*=emphasized]) .mainContent,:host([layout*=snowflake]) .mainContent{text-align:center}.mainContent{position:relative;display:flex;overflow:hidden;flex:1;flex-direction:column;align-items:center;justify-content:center}.valueContainer [slot=displayValue]{display:none}.accents{display:flex;flex-direction:row;align-items:center;justify-content:center}::slotted([slot=typeIcon]){margin-right:var(--ds-size-100, 0.5rem)}.displayValue{display:block}.displayValue:not(.force){display:none}.displayValue:not(.force).hasContent:is(.withValue):not(.hasFocus){display:block}.triggerContent{display:flex;width:100%;align-items:center;justify-content:center}:host([layout*=emphasized]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-300, 1.5rem)}:host([layout*=snowflake]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-200, 1rem)}:host([layout*=snowflake]) label{padding-block:var(--ds-size-25, 0.125rem)}:host([layout*=classic]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem)}:host([layout*=classic]) .mainContent{align-items:start}:host([layout*=classic]) label{overflow:hidden;cursor:text;text-overflow:ellipsis;white-space:nowrap}:host([layout*=classic]) .value{height:auto}label{color:var(--ds-auro-select-label-text-color)}:host(:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-select-outline-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-default, #2a2a2a)}:host([ondark]:is([validity]:not([validity=valid]))) [auro-dropdown],:host([appearance=inverse]:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-select-outline-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}#slotHolder{display:none}:host([fluid]){width:100%}:host([disabled]){pointer-events:none;user-select:none}:host([disabled]:not([ondark])) [auro-dropdown],:host([disabled]:not([appearance=inverse])) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-border-subtle, #dddddd)}:host(:not([layout*=classic])[disabled][ondark]) [auro-dropdown],:host(:not([layout*=classic])[disabled][appearance=inverse]) [auro-dropdown]{--ds-auro-select-border-color: transparent}`;
92073
92494
 
@@ -92943,10 +93364,14 @@ class AuroSelect extends AuroElement$1 {
92943
93364
  this.dropdown.setActiveDescendant(this.optionActive);
92944
93365
  }
92945
93366
 
92946
- // Announce the active option for screen readers. Skip when the activated
92947
- // option is already selected: Enter triggers an auroMenu-selectedOption
92948
- // re-announce, and aria-selected on the active descendant otherwise
92949
- // conveys state without an explicit utterance.
93367
+ // Live-region announce only for [not selected] options. For activations
93368
+ // on an already-selected option auto-activation on bib open, arrow
93369
+ // navigation back to the selection, or click in multiSelect rely on
93370
+ // aria-activedescendant + aria-selected="true" to convey state per the
93371
+ // WAI-ARIA listbox pattern. This is intentional, not limited to the
93372
+ // initial activation on open: it also prevents a duplicate "X, selected"
93373
+ // when Enter on the active+selected option re-fires
93374
+ // auroMenu-selectedOption (see 03b289e39).
92950
93375
  if (this.optionActive && !this.optionActive.hasAttribute('selected')) {
92951
93376
  const optionText = this.optionActive.textContent.trim();
92952
93377
  const message = `${optionText}, not selected`;
@@ -92967,6 +93392,7 @@ class AuroSelect extends AuroElement$1 {
92967
93392
  });
92968
93393
 
92969
93394
  this.menu.addEventListener('auroMenu-selectedOption', () => {
93395
+ const previousSelected = this.optionSelected;
92970
93396
 
92971
93397
  // Update the displayed value
92972
93398
  this.updateDisplayedValue();
@@ -92986,13 +93412,32 @@ class AuroSelect extends AuroElement$1 {
92986
93412
  this.dropdown.trigger.focus();
92987
93413
  }
92988
93414
 
92989
- // Announce the selection after the dropdown closes so it isn't
92990
- // overridden by VoiceOver's "collapsed" announcement from aria-expanded.
92991
- const selectedValue = this.menu.currentLabel;
92992
- const announcementDelay = 300;
92993
- setTimeout(() => {
92994
- announceToScreenReader(this._getAnnouncementRoot(), `${selectedValue}, selected`);
92995
- }, announcementDelay);
93415
+ // Describe the actual change. In multiSelect, currentLabel is the
93416
+ // concatenated remaining list — announcing "{list}, selected" after a
93417
+ // deselect would falsely claim every remaining label was just added.
93418
+ // Diff previous vs next to recover the toggled option.
93419
+ let announcement = '';
93420
+ if (this.multiSelect) {
93421
+ const prev = Array.isArray(previousSelected) ? previousSelected : [];
93422
+ const removed = prev.find((opt) => !nextSelected.includes(opt));
93423
+ const added = nextSelected.find((opt) => !prev.includes(opt));
93424
+ if (removed) {
93425
+ announcement = `${removed.textContent.trim()}, not selected`;
93426
+ } else if (added) {
93427
+ announcement = `${added.textContent.trim()}, selected`;
93428
+ }
93429
+ } else {
93430
+ announcement = `${this.menu.currentLabel}, selected`;
93431
+ }
93432
+
93433
+ // Delay so the utterance isn't overridden by VoiceOver's "collapsed"
93434
+ // announcement from aria-expanded when the dropdown closes.
93435
+ if (announcement) {
93436
+ const announcementDelay = 300;
93437
+ setTimeout(() => {
93438
+ announceToScreenReader(this._getAnnouncementRoot(), announcement);
93439
+ }, announcementDelay);
93440
+ }
92996
93441
  });
92997
93442
  }
92998
93443
 
@@ -93244,6 +93689,18 @@ class AuroSelect extends AuroElement$1 {
93244
93689
  }
93245
93690
  }
93246
93691
 
93692
+ connectedCallback() {
93693
+ super.connectedCallback();
93694
+ // Regression guard: firstUpdated() fires once per instance, so the label
93695
+ // observer setup it triggers does NOT re-run on reconnect. After a
93696
+ // disconnect+reconnect (reparent, SPA route swap), runtime label mutations
93697
+ // would silently stop syncing menu aria-label / dropdown.bibDialogLabel
93698
+ // unless we re-wire the observer here.
93699
+ if (this.hasUpdated) {
93700
+ this._observeLabelChanges();
93701
+ }
93702
+ }
93703
+
93247
93704
  // lifecycle runs only after the element's DOM has been updated the first time
93248
93705
  firstUpdated() {
93249
93706
  // Add the tag name as an attribute if it is different than the component name
@@ -93385,6 +93842,12 @@ class AuroSelect extends AuroElement$1 {
93385
93842
  * @private
93386
93843
  */
93387
93844
  _handleNativeSelectChange(event) {
93845
+ // Hidden native <select> has no `multiple` attribute, so any change it fires
93846
+ // is a single raw value — applying it in multiSelect mode would collapse the
93847
+ // JSON-array `value` shape. Bfcache/autofill can reach this on a name-bearing
93848
+ // form control even with aria-hidden/tabindex=-1.
93849
+ if (this.multiSelect) return;
93850
+
93388
93851
  const selectedOption = event.target.options[event.target.selectedIndex];
93389
93852
  if (!selectedOption) return;
93390
93853
  const selectedValue = selectedOption.value;