@aurodesignsystem-dev/auro-formkit 0.0.0-pr1507.0 → 0.0.0-pr1508.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 (148) hide show
  1. package/components/bibtemplate/dist/index.js +1 -1
  2. package/components/bibtemplate/dist/registered.js +1 -1
  3. package/components/checkbox/demo/customize.html +1 -2
  4. package/components/checkbox/demo/customize.min.js +8 -6
  5. package/components/checkbox/demo/getting-started.min.js +8 -6
  6. package/components/checkbox/demo/index.min.js +8 -6
  7. package/components/checkbox/dist/index.js +8 -6
  8. package/components/checkbox/dist/registered.js +8 -6
  9. package/components/combobox/demo/customize.html +1 -2
  10. package/components/combobox/demo/customize.md +105 -137
  11. package/components/combobox/demo/customize.min.js +506 -568
  12. package/components/combobox/demo/getting-started.min.js +506 -564
  13. package/components/combobox/demo/index.min.js +506 -564
  14. package/components/combobox/demo/keyboard-behavior.md +2 -142
  15. package/components/combobox/demo/why-combobox.md +1 -1
  16. package/components/combobox/dist/auro-combobox.d.ts +30 -14
  17. package/components/combobox/dist/index.js +505 -563
  18. package/components/combobox/dist/registered.js +505 -563
  19. package/components/counter/demo/customize.min.js +26 -8
  20. package/components/counter/demo/index.min.js +26 -8
  21. package/components/counter/dist/index.js +26 -8
  22. package/components/counter/dist/registered.js +26 -8
  23. package/components/datepicker/demo/accessibility.md +2 -1
  24. package/components/datepicker/demo/api.md +65 -62
  25. package/components/datepicker/demo/customize.md +150 -39
  26. package/components/datepicker/demo/customize.min.js +988 -500
  27. package/components/datepicker/demo/index.min.js +988 -482
  28. package/components/datepicker/dist/{src/auro-calendar-cell.d.ts → auro-calendar-cell.d.ts} +20 -3
  29. package/components/datepicker/dist/{src/auro-calendar.d.ts → auro-calendar.d.ts} +121 -7
  30. package/components/datepicker/dist/{src/auro-datepicker.d.ts → auro-datepicker.d.ts} +80 -5
  31. package/components/datepicker/dist/blackoutUtils.d.ts +43 -0
  32. package/components/datepicker/dist/index.js +988 -482
  33. package/components/datepicker/dist/registered.js +988 -482
  34. package/components/dropdown/demo/customize.min.js +10 -1
  35. package/components/dropdown/demo/getting-started.min.js +10 -1
  36. package/components/dropdown/demo/index.min.js +10 -1
  37. package/components/dropdown/dist/auro-dropdown.d.ts +1 -0
  38. package/components/dropdown/dist/index.js +10 -1
  39. package/components/dropdown/dist/registered.js +10 -1
  40. package/components/form/demo/customize.html +6 -6
  41. package/components/form/demo/customize.md +203 -51
  42. package/components/form/demo/customize.min.js +2357 -1419
  43. package/components/form/demo/getting-started.min.js +2285 -1419
  44. package/components/form/demo/index.min.js +2285 -1419
  45. package/components/form/demo/registerDemoDeps.min.js +1922 -1382
  46. package/components/form/dist/auro-form.d.ts +122 -4
  47. package/components/form/dist/index.js +363 -37
  48. package/components/form/dist/registered.js +363 -37
  49. package/components/input/demo/api.md +5 -5
  50. package/components/input/demo/customize.html +1 -2
  51. package/components/input/demo/customize.md +62 -61
  52. package/components/input/demo/customize.min.js +177 -241
  53. package/components/input/demo/getting-started.min.js +177 -241
  54. package/components/input/demo/index.min.js +177 -241
  55. package/components/input/dist/base-input.d.ts +34 -93
  56. package/components/input/dist/index.js +190 -242
  57. package/components/input/dist/registered.js +177 -241
  58. package/components/radio/demo/customize.min.js +8 -6
  59. package/components/radio/demo/getting-started.min.js +8 -6
  60. package/components/radio/demo/index.min.js +8 -6
  61. package/components/radio/dist/index.js +8 -6
  62. package/components/radio/dist/registered.js +8 -6
  63. package/components/select/demo/customize.html +1 -2
  64. package/components/select/demo/customize.md +86 -0
  65. package/components/select/demo/customize.min.js +202 -68
  66. package/components/select/demo/getting-started.min.js +204 -115
  67. package/components/select/demo/index.min.js +202 -68
  68. package/components/select/demo/keyboard-behavior.md +18 -4
  69. package/components/select/dist/auro-select.d.ts +20 -8
  70. package/components/select/dist/index.js +202 -68
  71. package/components/select/dist/registered.js +202 -68
  72. package/custom-elements.json +1035 -604
  73. package/package.json +6 -2
  74. package/components/checkbox/demo/customize.js +0 -22
  75. package/components/checkbox/demo/demo-support.js +0 -1
  76. package/components/checkbox/demo/getting-started.js +0 -22
  77. package/components/checkbox/demo/index.js +0 -8
  78. package/components/checkbox/demo/styles.scss +0 -1
  79. package/components/combobox/demo/customize.js +0 -24
  80. package/components/combobox/demo/demo-support.js +0 -1
  81. package/components/combobox/demo/getting-started.js +0 -21
  82. package/components/combobox/demo/index.js +0 -23
  83. package/components/combobox/demo/styles.scss +0 -1
  84. package/components/counter/demo/customize.js +0 -21
  85. package/components/counter/demo/demo-support.js +0 -1
  86. package/components/counter/demo/index.js +0 -21
  87. package/components/counter/demo/styles.scss +0 -1
  88. package/components/datepicker/demo/customize.js +0 -19
  89. package/components/datepicker/demo/demo-support.js +0 -1
  90. package/components/datepicker/demo/index.js +0 -23
  91. package/components/datepicker/demo/styles.scss +0 -1
  92. package/components/dropdown/demo/customize.js +0 -9
  93. package/components/dropdown/demo/demo-support.js +0 -1
  94. package/components/dropdown/demo/getting-started.js +0 -9
  95. package/components/dropdown/demo/index.js +0 -16
  96. package/components/dropdown/demo/styles.scss +0 -1
  97. package/components/form/demo/customize.js +0 -9
  98. package/components/form/demo/demo-support.js +0 -1
  99. package/components/form/demo/getting-started.js +0 -9
  100. package/components/form/demo/index.js +0 -5
  101. package/components/form/demo/registerDemoDeps.js +0 -23
  102. package/components/form/demo/styles.scss +0 -1
  103. package/components/input/demo/customize.js +0 -25
  104. package/components/input/demo/demo-support.js +0 -1
  105. package/components/input/demo/getting-started.js +0 -8
  106. package/components/input/demo/index.js +0 -8
  107. package/components/input/demo/styles.css +0 -974
  108. package/components/input/demo/styles.scss +0 -1
  109. package/components/menu/demo/demo-support.js +0 -1
  110. package/components/menu/demo/index.js +0 -25
  111. package/components/menu/demo/styles.scss +0 -1
  112. package/components/radio/demo/customize.js +0 -22
  113. package/components/radio/demo/demo-support.js +0 -1
  114. package/components/radio/demo/getting-started.js +0 -24
  115. package/components/radio/demo/index.js +0 -8
  116. package/components/radio/demo/styles.scss +0 -1
  117. package/components/select/demo/customize.js +0 -11
  118. package/components/select/demo/demo-support.js +0 -1
  119. package/components/select/demo/getting-started.js +0 -26
  120. package/components/select/demo/index.js +0 -11
  121. package/components/select/demo/styles.scss +0 -1
  122. /package/components/datepicker/dist/{src/auro-calendar-month.d.ts → auro-calendar-month.d.ts} +0 -0
  123. /package/components/datepicker/dist/{src/buttonVersion.d.ts → buttonVersion.d.ts} +0 -0
  124. /package/components/datepicker/dist/{src/datepickerKeyboardStrategy.d.ts → datepickerKeyboardStrategy.d.ts} +0 -0
  125. /package/components/datepicker/dist/{src/iconVersion.d.ts → iconVersion.d.ts} +0 -0
  126. /package/components/datepicker/dist/{src/index.d.ts → index.d.ts} +0 -0
  127. /package/components/datepicker/dist/{src/popoverVersion.d.ts → popoverVersion.d.ts} +0 -0
  128. /package/components/datepicker/dist/{src/styles → styles}/classic/color-css.d.ts +0 -0
  129. /package/components/datepicker/dist/{src/styles → styles}/classic/style-css.d.ts +0 -0
  130. /package/components/datepicker/dist/{src/styles → styles}/color-calendar-css.d.ts +0 -0
  131. /package/components/datepicker/dist/{src/styles → styles}/color-cell-css.d.ts +0 -0
  132. /package/components/datepicker/dist/{src/styles → styles}/color-css.d.ts +0 -0
  133. /package/components/datepicker/dist/{src/styles → styles}/color-month-css.d.ts +0 -0
  134. /package/components/datepicker/dist/{src/styles → styles}/shapeSize-css.d.ts +0 -0
  135. /package/components/datepicker/dist/{src/styles → styles}/snowflake/color-css.d.ts +0 -0
  136. /package/components/datepicker/dist/{src/styles → styles}/snowflake/style-css.d.ts +0 -0
  137. /package/components/datepicker/dist/{src/styles → styles}/style-auro-calendar-cell-css.d.ts +0 -0
  138. /package/components/datepicker/dist/{src/styles → styles}/style-auro-calendar-css.d.ts +0 -0
  139. /package/components/datepicker/dist/{src/styles → styles}/style-auro-calendar-month-css.d.ts +0 -0
  140. /package/components/datepicker/dist/{src/styles → styles}/style-css.d.ts +0 -0
  141. /package/components/datepicker/dist/{src/styles → styles}/tokens-css.d.ts +0 -0
  142. /package/components/datepicker/dist/{src/utilities.d.ts → utilities.d.ts} +0 -0
  143. /package/components/datepicker/dist/{src/utilitiesCalendar.d.ts → utilitiesCalendar.d.ts} +0 -0
  144. /package/components/datepicker/dist/{src/utilitiesCalendarRender.d.ts → utilitiesCalendarRender.d.ts} +0 -0
  145. /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/day.d.ts +0 -0
  146. /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/range-datepicker-calendar.d.ts +0 -0
  147. /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/range-datepicker-cell.d.ts +0 -0
  148. /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/range-datepicker.d.ts +0 -0
@@ -640,15 +640,17 @@ let AuroFormValidation$1 = class AuroFormValidation {
640
640
  );
641
641
  }
642
642
 
643
- // If there is a second input in the elem and that value is undefined or an empty string set hasValue to false;
644
- if (this.auroInputElements?.length === 2) {
645
- if (!this.auroInputElements[1].value || this.auroInputElements[1].length === 0) {
643
+ const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
644
+
645
+ // If there is a second input in the elem and that value is undefined or an empty string set hasValue to false.
646
+ // Skip for combobox: its second auro-input is the fullscreen-bib mirror of the same value, not an independent
647
+ // field (datepicker is the intended consumer — start/end are independently required).
648
+ if (this.auroInputElements?.length === 2 && !isCombobox) {
649
+ if (!this.auroInputElements[1].value || this.auroInputElements[1].value.length === 0) {
646
650
  hasValue = false;
647
651
  }
648
652
  }
649
653
 
650
- const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
651
-
652
654
  if (isCombobox) {
653
655
 
654
656
  if (!elem.persistInput || elem.behavior === "filter") {
@@ -1356,7 +1358,7 @@ function normalizeDates$1(context, ...dates) {
1356
1358
  * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))
1357
1359
  * //=> Tue Sep 02 2014 00:00:00
1358
1360
  */
1359
- function startOfDay$2(date, options) {
1361
+ function startOfDay$1(date, options) {
1360
1362
  const _date = toDate$1(date, options?.in);
1361
1363
  _date.setHours(0, 0, 0, 0);
1362
1364
  return _date;
@@ -1404,8 +1406,8 @@ function differenceInCalendarDays$1(laterDate, earlierDate, options) {
1404
1406
  earlierDate,
1405
1407
  );
1406
1408
 
1407
- const laterStartOfDay = startOfDay$2(laterDate_);
1408
- const earlierStartOfDay = startOfDay$2(earlierDate_);
1409
+ const laterStartOfDay = startOfDay$1(laterDate_);
1410
+ const earlierStartOfDay = startOfDay$1(earlierDate_);
1409
1411
 
1410
1412
  const laterTimestamp =
1411
1413
  +laterStartOfDay - getTimezoneOffsetInMilliseconds$1(laterStartOfDay);
@@ -10507,10 +10509,18 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
10507
10509
  * @returns {string | undefined}
10508
10510
  */
10509
10511
  toFormattedValue(valueObject, format) {
10512
+ // Exposed publicly via `AuroInputUtil.toFormattedValue`, so a missing
10513
+ // `format` argument has to fail gracefully rather than throw on
10514
+ // `format.toLowerCase()`. Treat any falsy value (undefined, null, '')
10515
+ // as "no format → no display value".
10516
+ if (!format) {
10517
+ return undefined;
10518
+ }
10510
10519
  const normalizedFormat = format.toLowerCase();
10511
10520
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
10512
10521
 
10513
10522
  if (!(valueObject instanceof Date) || Number.isNaN(valueObject.getTime()) || !maskOptions || typeof maskOptions.format !== 'function') {
10523
+ console.debug('Invalid date object or mask options for formatting', { valueObject, maskOptions }); // eslint-disable-line no-console
10514
10524
  return undefined;
10515
10525
  }
10516
10526
 
@@ -10766,11 +10776,11 @@ var snowflakeStyle = css`:host([layout*=snowflake]) [auro-input]{flex:1;text-ali
10766
10776
 
10767
10777
  var snowflakeColors = css`:host([layout=snowflake]) [auro-dropdown]:not(:is([error],.hasFocus)){--ds-auro-dropdown-trigger-border-color: transparent}`;
10768
10778
 
10769
- var styleCss$7 = css`.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}:host{--calendar-width: 336px;--mobile-footer-height: 150px;--mobile-header-height: 68px;--desktop-footer-height: 80px;height:100vh;height:100dvh}.calendars{display:flex;flex-direction:row}.calendars:focus{outline:none}.calendarNavButtons{position:absolute;z-index:1;top:var(--ds-size-200, 1rem);right:var(--ds-size-50, 0.25rem);left:var(--ds-size-50, 0.25rem)}.calendarNavBtn{display:flex;width:var(--ds-size-500, 2.5rem);height:var(--ds-size-500, 2.5rem);align-items:center;justify-content:center;border-width:1px;border-style:solid;border-radius:50%;cursor:pointer}.prevMonth,.nextMonth{position:absolute;top:0}.prevMonth{left:0}.nextMonth{right:0}.headerActions{padding:0 var(--ds-size-200, 1rem)}.mobileHeader{width:100%;height:var(--mobile-header-height);z-index:1;align-items:center;flex-direction:row}.headerDateFrom,.headerDateTo{display:flex;height:var(--mobile-header-height);flex:1;flex-direction:column;justify-content:center;padding:0 var(--ds-size-150, 0.75rem) 0 var(--ds-size-200, 1rem)}.mobileDateLabel{padding:var(--ds-size-25, 0.125rem) 0}.mobileFooter{display:none;width:100%;align-items:flex-end;flex-direction:column;justify-content:flex-end}.mobileFooterActions{position:relative;bottom:0;left:50%;display:none;width:calc(100% - var(--ds-size-200, 1rem)*2);align-items:flex-end;flex-direction:column;justify-content:flex-end;padding:var(--ds-size-150) calc(var(--ds-size-200, 1rem));transform:translateX(-50%)}.mobileFooterActions auro-button{width:100%}.calendarWrapper.hasFooter{padding-bottom:var(--desktop-footer-height)}:host([isfullscreen]){width:100%;max-height:100dvh;overflow:hidden}:host([isfullscreen]) .prevMonth,:host([isfullscreen]) .nextMonth{display:none}:host([isfullscreen]) .mobileHeader,:host([isfullscreen]) .mobileFooter,:host([isfullscreen]) .mobileFooterActions{display:flex}:host([isfullscreen]) .calendarWrapper{display:flex;flex-direction:column}:host([isfullscreen]) .calendars{display:flex;flex-direction:column;flex:1;align-items:center;width:100%;overscroll-behavior:contain}:host([isfullscreen]) .calendars:after{display:block;width:100%;height:var(--mobile-footer-height);content:""}.sr-only{position:absolute;overflow:hidden;clip:rect(0, 0, 0, 0);width:1px;height:1px;margin:-1px;padding:0;border:0;white-space:nowrap}`;
10779
+ var styleCss$7 = css`.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}:host{--calendar-width: 336px;--mobile-footer-height: 150px;--mobile-header-height: 68px;--desktop-footer-height: 80px;height:100vh;height:100dvh}.calendars{display:flex;flex-direction:row}.calendars:focus{outline:none}.calendarNavButtons{position:absolute;z-index:1;top:var(--ds-size-200, 1rem);right:var(--ds-size-50, 0.25rem);left:var(--ds-size-50, 0.25rem)}.calendarNavBtn{display:flex;width:var(--ds-size-500, 2.5rem);height:var(--ds-size-500, 2.5rem);align-items:center;justify-content:center;border-width:1px;border-style:solid;border-radius:50%;cursor:pointer}.prevMonth,.nextMonth{position:absolute;top:0}.prevMonth{left:0}.nextMonth{right:0}.headerActions{padding:0 var(--ds-size-200, 1rem)}.mobileHeader{width:100%;height:var(--mobile-header-height);z-index:1;align-items:center;flex-direction:row}.headerDateFrom,.headerDateTo{display:flex;height:var(--mobile-header-height);flex:1;flex-direction:column;justify-content:center;padding:0 var(--ds-size-150, 0.75rem) 0 var(--ds-size-200, 1rem)}.mobileDateLabel{padding:var(--ds-size-25, 0.125rem) 0}.mobileFooter{display:none;width:100%;align-items:flex-end;flex-direction:column;justify-content:flex-end}.mobileFooterActions{position:relative;bottom:0;left:50%;display:none;width:calc(100% - var(--ds-size-200, 1rem)*2);align-items:flex-end;flex-direction:column;justify-content:flex-end;padding:var(--ds-size-150) calc(var(--ds-size-200, 1rem));transform:translateX(-50%)}.mobileFooterActions auro-button{width:100%}:host([isfullscreen]){width:100%;max-height:100dvh;overflow:hidden}:host([isfullscreen]) .prevMonth,:host([isfullscreen]) .nextMonth{display:none}:host([isfullscreen]) .mobileHeader,:host([isfullscreen]) .mobileFooter,:host([isfullscreen]) .mobileFooterActions{display:flex}:host([isfullscreen]) .calendarWrapper{display:flex;flex-direction:column}:host([isfullscreen]) .calendars{display:flex;flex-direction:column;flex:1;align-items:center;width:100%;overscroll-behavior:contain}:host([isfullscreen]) .calendars:after{display:block;width:100%;height:var(--mobile-footer-height);content:""}.sr-only{position:absolute;overflow:hidden;clip:rect(0, 0, 0, 0);width:1px;height:1px;margin:-1px;padding:0;border:0;white-space:nowrap}`;
10770
10780
 
10771
- var colorCss$7 = css`.calendarNavBtn{border-color:var(--ds-auro-calendar-nav-btn-border-color);background-color:var(--ds-auro-calendar-nav-btn-container-color);color:var(--ds-auro-calendar-nav-btn-chevron-color)}.calendarNavBtn:hover{--ds-auro-calendar-nav-btn-container-color: var(--ds-advanced-color-state-background-hover, #f2f2f2);--ds-auro-calendar-nav-btn-border-color: var(--ds-basic-color-brand-primary, #01426a)}.calendarNavBtn:focus{--ds-auro-calendar-nav-btn-border-color: var(--ds-basic-color-brand-primary, #01426a)}.calendarNavBtn:active{--ds-auro-calendar-nav-btn-border-color: var(--ds-basic-color-brand-primary, #01426a);box-shadow:inset 0 0 0 1px var(--ds-auro-calendar-nav-btn-border-color)}.mobileHeader{background-color:var(--ds-auro-calendar-mobile-header-container-color)}.mobileDateLabel{color:var(--ds-auro-calendar-mobile-header-text-color)}:host(:not([noRange])) .headerDateTo:after{background-color:var(--ds-auro-calendar-mobile-header-divider-color)}::slotted([slot="bib.fullscreen.fromStr"]),::slotted([slot=mobileDateToStr]){color:var(--ds-auro-datepicker-placeholder-color)}@media screen and (max-width: 576px){.calendarNavBtn{--ds-auro-calendar-nav-btn-border-color: var(--ds-basic-color-brand-primary, #01426a)}}`;
10781
+ var colorCss$7 = css`.calendarNavBtn{border-color:var(--ds-auro-calendar-nav-btn-border-color);background-color:var(--ds-auro-calendar-nav-btn-container-color);color:var(--ds-auro-calendar-nav-btn-chevron-color)}.calendarNavBtn:hover{--ds-auro-calendar-nav-btn-container-color: var(--ds-advanced-color-state-background-hover, #f2f2f2);--ds-auro-calendar-nav-btn-border-color: var(--ds-basic-color-brand-primary, #01426a)}.calendarNavBtn:focus-visible{--ds-auro-calendar-nav-btn-border-color: var(--ds-basic-color-brand-primary, #01426a);outline:2px solid var(--ds-basic-color-brand-primary, #01426a);outline-offset:-2px}.calendarNavBtn:active{--ds-auro-calendar-nav-btn-border-color: var(--ds-basic-color-brand-primary, #01426a);outline:2px solid var(--ds-basic-color-brand-primary, #01426a);outline-offset:-2px;box-shadow:inset 0 0 0 1px var(--ds-auro-calendar-nav-btn-border-color)}.mobileHeader{background-color:var(--ds-auro-calendar-mobile-header-container-color)}.mobileDateLabel{color:var(--ds-auro-calendar-mobile-header-text-color)}:host(:not([noRange])) .headerDateTo:after{background-color:var(--ds-auro-calendar-mobile-header-divider-color)}::slotted([slot="bib.fullscreen.fromStr"]),::slotted([slot=mobileDateToStr]){color:var(--ds-auro-datepicker-placeholder-color)}@media screen and (max-width: 576px){.calendarNavBtn{--ds-auro-calendar-nav-btn-border-color: var(--ds-basic-color-brand-primary, #01426a)}}`;
10772
10782
 
10773
- var styleCss$6 = css`:focus:not(:focus-visible){outline:3px solid transparent}.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}:host{position:relative;display:block;width:calc(100% - var(--ds-size-200, 1rem) - var(--ds-size-200, 1rem));margin:0 var(--ds-size-200, 1rem)}@media screen and (min-width: 576px){:host{width:336px;padding:var(--ds-size-200, 1rem) var(--ds-size-200, 1rem) 0}}@media screen and (min-width: 576px){:host(:not(:last-of-type)):after{position:absolute;top:var(--ds-size-200, 1rem);right:calc(-1*var(--ds-size-200, 1rem));height:calc(100% - var(--ds-size-200, 1rem) - var(--ds-size-200, 1rem));display:block;width:1px;content:""}}.header{display:flex;height:var(--ds-size-500, 2.5rem);margin-bottom:var(--ds-size-150, 0.75rem);align-items:center;flex-direction:row;text-align:center}.headerTitle{display:flex;align-items:center;flex:1;flex-direction:row;justify-content:center}.headerTitle div:first-child{margin-right:var(--ds-size-100, 0.5rem)}.calendarNavBtn{position:relative;display:flex;width:var(--ds-size-500, 2.5rem);height:var(--ds-size-500, 2.5rem);align-items:center;justify-content:center;border-width:1px;border-style:solid;border-radius:50%;cursor:pointer}.table{width:100%;border-collapse:collapse}.thead{margin-bottom:var(--ds-size-100, 0.5rem)}.th{display:flex;flex:1;align-items:center;justify-content:center}.th abbr{text-decoration:none}.tbody{width:100%;transition:all 0ms;transform:translateX(0)}@media screen and (min-width: 576px){.tbody{height:376px}}.td{flex:1;margin:0;padding:0}.tr{display:flex;flex-direction:row;width:100%;border-radius:10px;overflow:hidden}.tr:not(:last-of-type){margin-bottom:var(--ds-size-100, 0.5rem)}`;
10783
+ var styleCss$6 = css`:focus:not(:focus-visible){outline:3px solid transparent}.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}:host{position:relative;display:block;width:336px;margin:0 var(--ds-size-200, 1rem)}@media screen and (min-width: 576px){:host{width:336px;padding:var(--ds-size-200, 1rem) var(--ds-size-200, 1rem) 0}}@media screen and (min-width: 576px){:host(:not(:last-of-type)):after{position:absolute;top:var(--ds-size-200, 1rem);right:calc(-1*var(--ds-size-200, 1rem));height:calc(100% - var(--ds-size-200, 1rem) - var(--ds-size-200, 1rem));display:block;width:1px;content:""}}.header{display:flex;height:var(--ds-size-500, 2.5rem);margin-bottom:var(--ds-size-150, 0.75rem);align-items:center;flex-direction:row;text-align:center}.headerTitle{display:flex;align-items:center;flex:1;flex-direction:row;justify-content:center}.headerTitle div:first-child{margin-right:var(--ds-size-100, 0.5rem)}.calendarNavBtn{position:relative;display:flex;width:var(--ds-size-500, 2.5rem);height:var(--ds-size-500, 2.5rem);align-items:center;justify-content:center;border-width:1px;border-style:solid;border-radius:50%;cursor:pointer}.table{width:100%;border-collapse:collapse}.thead{margin-bottom:var(--ds-size-100, 0.5rem)}.th{display:flex;flex:1;align-items:center;justify-content:center}.th abbr{text-decoration:none}.tbody{width:100%;transition:all 0ms;transform:translateX(0)}@media screen and (min-width: 576px){.tbody{height:376px}}.td{flex:1;margin:0;padding:0}.tr{display:flex;flex-direction:row;width:100%;border-radius:10px;overflow:hidden}.tr:not(:last-of-type){margin-bottom:var(--ds-size-100, 0.5rem)}`;
10774
10784
 
10775
10785
  var colorCss$6 = css`:focus:not(:focus-visible){outline:3px solid transparent}:host{background-color:var(--ds-auro-calendar-month-container-color)}@media screen and (min-width: 576px){:host(:not(:last-of-type)):after{background-color:var(--ds-auro-calendar-month-divider-color)}}.header{color:var(--ds-auro-calendar-month-header-color)}`;
10776
10786
 
@@ -10862,8 +10872,8 @@ class RangeDatepickerCell extends LitElement {
10862
10872
  const parsedDateFrom = parseInt(dateFrom, 10);
10863
10873
  const parsedDateTo = parseInt(dateTo, 10);
10864
10874
  if (day) {
10865
- if (getTime(startOfDay$2(parsedDateTo * 1000)) / 1000 === day.date ||
10866
- getTime(startOfDay$2(parsedDateFrom * 1000)) / 1000 === day.date) {
10875
+ if (getTime(startOfDay$1(parsedDateTo * 1000)) / 1000 === day.date ||
10876
+ getTime(startOfDay$1(parsedDateFrom * 1000)) / 1000 === day.date) {
10867
10877
  this.selected = true;
10868
10878
  }
10869
10879
  if (((hoveredDate === day.date || day.date < hoveredDate) &&
@@ -11051,7 +11061,7 @@ class RangeDatepickerCalendar extends LitElement {
11051
11061
  this.dayNamesOfTheWeek = [];
11052
11062
  this.daysOfMonth = [];
11053
11063
  this._locale = null;
11054
- this.currentDate = parseInt(format$1(startOfDay$2(Date.now()), 't'), 10);
11064
+ this.currentDate = parseInt(format$1(startOfDay$1(Date.now()), 't'), 10);
11055
11065
  this.localeChanged();
11056
11066
  this.yearAndMonthChanged(this.year, this.month);
11057
11067
  }
@@ -11525,7 +11535,7 @@ __decorate([property({ type: Array })], RangeDatepickerCalendar.prototype, "dayN
11525
11535
  __decorate([property({ type: Array })], RangeDatepickerCalendar.prototype, "daysOfMonth", void 0);
11526
11536
  AuroLibraryRuntimeUtils$5.prototype.registerComponent('wc-range-datepicker-calendar', RangeDatepickerCalendar);
11527
11537
 
11528
- var styleCss$5 = css`.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}`;
11538
+ var styleCss$5 = css`.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}`;
11529
11539
 
11530
11540
  var colorCss$5 = css`: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}`;
11531
11541
 
@@ -11550,13 +11560,103 @@ class s{registerComponent(e,t){customElements.get(e)||customElements.define(e,cl
11550
11560
 
11551
11561
  var popoverVersion = '6.0.1';
11552
11562
 
11553
- /* 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 */
11563
+ /**
11564
+ * Single source of truth for parsing and matching blackout dates across the
11565
+ * datepicker. Both `auro-calendar` (memoized Set + `isDateBlackout`) and the
11566
+ * pre-`firstUpdated` fallback inside `auro-calendar-cell` route through these
11567
+ * helpers so the YYYY-MM-DD → seconds conversion and the merge-with-legacy
11568
+ * `disabledDays` rules are defined exactly once.
11569
+ */
11554
11570
 
11555
- const startOfDay$1 = (ms) => {
11556
- const date = new Date(ms);
11557
- date.setHours(0, 0, 0, 0);
11558
- return date.getTime();
11559
- };
11571
+ /**
11572
+ * Converts a `YYYY-MM-DD` ISO date string to a Unix timestamp (seconds)
11573
+ * representing local midnight on that calendar day. Returns `null` for
11574
+ * inputs that don't parse to a finite timestamp.
11575
+ *
11576
+ * Uses the `new Date(year, monthIndex, day)` constructor (NOT
11577
+ * `new Date(isoStr)`) so the result is local-midnight rather than UTC
11578
+ * midnight — required to keep the calendar grid aligned with the user's
11579
+ * local calendar day in negative-offset timezones.
11580
+ *
11581
+ * @param {string} isoStr - Date string in `YYYY-MM-DD` format.
11582
+ * @returns {number|null} Local-midnight Unix timestamp (seconds), or null.
11583
+ */
11584
+ function parseIsoToTimestamp(isoStr) {
11585
+ if (typeof isoStr !== 'string') {
11586
+ return null;
11587
+ }
11588
+ const parts = isoStr.split('-');
11589
+ if (parts.length !== 3) {
11590
+ return null;
11591
+ }
11592
+ const year = parseInt(parts[0], 10);
11593
+ const month = parseInt(parts[1], 10);
11594
+ const day = parseInt(parts[2], 10);
11595
+ if (!Number.isFinite(year) || !Number.isFinite(month) || !Number.isFinite(day)) {
11596
+ return null;
11597
+ }
11598
+ // Reject overflow values like "2024-13-40" — JS `new Date(year, month, day)`
11599
+ // silently normalizes those to a different calendar day, which would
11600
+ // disable the wrong date if we let the result through.
11601
+ if (month < 1 || month > 12 || day < 1 || day > 31) {
11602
+ return null;
11603
+ }
11604
+ const date = new Date(year, month - 1, day);
11605
+ // Guard the residual case where JS still rolls a value (e.g. Feb 30 → Mar 2).
11606
+ // After construction, getFullYear/getMonth/getDate should match the inputs.
11607
+ if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {
11608
+ return null;
11609
+ }
11610
+ const ts = Math.floor(date.getTime() / 1000);
11611
+ return Number.isFinite(ts) ? ts : null;
11612
+ }
11613
+
11614
+ /**
11615
+ * Builds a `Set<number>` of seconds-since-epoch timestamps covering both the
11616
+ * legacy `disabledDays` (already-numeric) array and the ISO `blackoutDates`
11617
+ * array. Use this for O(1) membership checks in hot paths.
11618
+ *
11619
+ * @param {Array<string|number>|undefined} disabledDays - Legacy timestamp array.
11620
+ * @param {Array<string>|undefined} blackoutDates - ISO `YYYY-MM-DD` array.
11621
+ * @returns {Set<number>}
11622
+ */
11623
+ function buildBlackoutSet(disabledDays, blackoutDates) {
11624
+ const set = new Set();
11625
+ if (Array.isArray(disabledDays)) {
11626
+ for (const day of disabledDays) {
11627
+ const ts = parseInt(day, 10);
11628
+ if (Number.isFinite(ts)) {
11629
+ set.add(ts);
11630
+ }
11631
+ }
11632
+ }
11633
+ if (Array.isArray(blackoutDates)) {
11634
+ for (const isoStr of blackoutDates) {
11635
+ const ts = parseIsoToTimestamp(isoStr);
11636
+ if (ts !== null) {
11637
+ set.add(ts);
11638
+ }
11639
+ }
11640
+ }
11641
+ return set;
11642
+ }
11643
+
11644
+ /**
11645
+ * One-shot membership test for a single timestamp against both blackout
11646
+ * sources. Allocates a Set on each call; only use this in cold paths
11647
+ * (e.g. the pre-`firstUpdated` cell fallback). Hot paths should hold the
11648
+ * Set returned from `buildBlackoutSet` and `.has(ts)` directly.
11649
+ *
11650
+ * @param {number} dateTs - Unix timestamp (seconds) to test.
11651
+ * @param {Array<string|number>|undefined} disabledDays - Legacy timestamp array.
11652
+ * @param {Array<string>|undefined} blackoutDates - ISO `YYYY-MM-DD` array.
11653
+ * @returns {boolean}
11654
+ */
11655
+ function isBlackoutTimestamp(dateTs, disabledDays, blackoutDates) {
11656
+ return buildBlackoutSet(disabledDays, blackoutDates).has(dateTs);
11657
+ }
11658
+
11659
+ /* 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 */
11560
11660
 
11561
11661
  class AuroCalendarCell extends LitElement {
11562
11662
  constructor() {
@@ -11604,6 +11704,14 @@ class AuroCalendarCell extends LitElement {
11604
11704
  type: Boolean,
11605
11705
  reflect: true
11606
11706
  },
11707
+ /**
11708
+ * @deprecated Propagated from the legacy `auro-calendar.disabledDays`
11709
+ * Unix-timestamp array. The cell honors it for backward compatibility
11710
+ * (see the divergence-check fallback inside `isBlackout`), but
11711
+ * consumers should migrate to `auro-datepicker.blackoutDates`
11712
+ * (YYYY-MM-DD ISO strings). The calendar emits a one-time
11713
+ * deprecation warning the first time a non-empty value is observed.
11714
+ */
11607
11715
  disabledDays: { type: Array },
11608
11716
  isCurrentDate: { type: Boolean },
11609
11717
  locale: { type: String },
@@ -11649,8 +11757,8 @@ class AuroCalendarCell extends LitElement {
11649
11757
  const parsedDateTo = parseInt(dateTo, 10);
11650
11758
 
11651
11759
  if (day) {
11652
- const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
11653
- const returnTimestamp = startOfDay$1(parsedDateTo * 1000) / 1000;
11760
+ const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
11761
+ const returnTimestamp = new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000;
11654
11762
 
11655
11763
  if (day.date === departTimestamp || day.date === returnTimestamp) {
11656
11764
  this.selected = true;
@@ -11734,27 +11842,33 @@ class AuroCalendarCell extends LitElement {
11734
11842
  return false;
11735
11843
  }
11736
11844
 
11737
- // Check against disabledDays timestamps (legacy path)
11738
- if (Array.isArray(this.disabledDays) && this.disabledDays.length > 0 &&
11739
- (this.disabledDays.findIndex(dd => parseInt(dd, 10) === this.day.date) !== -1)) {
11740
- return true;
11741
- }
11742
-
11743
- // Check against blackoutDates (ISO format YYYY-MM-DD) on the datepicker
11744
- const blackoutDates = this.datepicker?.blackoutDates;
11745
-
11746
- if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
11747
- const date = new Date(this.day.date * 1000);
11748
- const yyyy = date.getFullYear();
11749
- const mm = String(date.getMonth() + 1).padStart(2, '0');
11750
- const dd = String(date.getDate()).padStart(2, '0');
11751
- const cellDate = `${yyyy}-${mm}-${dd}`;
11752
- if (blackoutDates.includes(cellDate)) {
11845
+ // Delegate to the calendar's memoized blackout Set for O(1) lookup
11846
+ // (instead of rescanning disabledDays + blackoutDates per render). The
11847
+ // Set is rebuilt only when either source array reference changes — see
11848
+ // auro-calendar.js#_getBlackoutSet.
11849
+ if (this.calendar && typeof this.calendar._getBlackoutSet === 'function') {
11850
+ if (this.calendar._getBlackoutSet().has(this.day.date)) {
11753
11851
  return true;
11754
11852
  }
11853
+ // If the cell's local disabledDays diverged from the calendar's (a
11854
+ // consumer or test mutated cell.disabledDays directly), the Set does
11855
+ // not reflect that addition — fall through to the per-cell scan only
11856
+ // when the reference no longer matches. Production data flow keeps
11857
+ // these identical, so this branch stays cold. Guarded with
11858
+ // Array.isArray to match `_getBlackoutSet`'s contract: non-array
11859
+ // values are treated as empty rather than crashing on `.findIndex`.
11860
+ if (Array.isArray(this.disabledDays) && this.disabledDays !== this.calendar.disabledDays && this.disabledDays.length > 0) {
11861
+ if (this.disabledDays.findIndex((dd) => parseInt(dd, 10) === this.day.date) !== -1) {
11862
+ return true;
11863
+ }
11864
+ }
11865
+ return false;
11755
11866
  }
11756
11867
 
11757
- return false;
11868
+ // Pre-firstUpdated fallback — the cell may render once before the
11869
+ // ancestor calendar is wired up. Routes through the shared
11870
+ // blackoutUtils helper so the parsing rules stay in one place.
11871
+ return isBlackoutTimestamp(this.day.date, this.disabledDays, this.datepicker?.blackoutDates);
11758
11872
  }
11759
11873
 
11760
11874
  /**
@@ -11860,12 +11974,12 @@ class AuroCalendarCell extends LitElement {
11860
11974
  const parsedDateFrom = Number.parseInt(this.dateFrom, 10);
11861
11975
  if (!Number.isFinite(parsedDateFrom)) return null;
11862
11976
 
11863
- const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
11977
+ const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
11864
11978
  const dayDate = this.day.date;
11865
11979
 
11866
11980
  const parsedDateTo = Number.parseInt(this.dateTo, 10);
11867
11981
  const hasDateTo = Number.isFinite(parsedDateTo);
11868
- const returnTimestamp = hasDateTo ? startOfDay$1(parsedDateTo * 1000) / 1000 : null;
11982
+ const returnTimestamp = hasDateTo ? new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000 : null;
11869
11983
 
11870
11984
  if (dayDate === departTimestamp) return this.datepicker.rangeLabelStart || 'range start';
11871
11985
 
@@ -11875,7 +11989,9 @@ class AuroCalendarCell extends LitElement {
11875
11989
 
11876
11990
  if (hasDateTo && dayDate > departTimestamp && dayDate < returnTimestamp) return this.datepicker.rangeLabelInRange || 'in range';
11877
11991
 
11878
- // After start date, no end date yet, or after end date
11992
+ if (!hasDateTo && dayDate > departTimestamp) return this.datepicker.rangeLabelEndPreview || 'previewing range end';
11993
+
11994
+ // After end date when both dateFrom and dateTo are set.
11879
11995
  return this.datepicker.rangeLabelAfterRange || 'after range';
11880
11996
  }
11881
11997
 
@@ -11888,7 +12004,7 @@ class AuroCalendarCell extends LitElement {
11888
12004
  */
11889
12005
  isDepartDate(day, dateFrom) {
11890
12006
  const parsedDateFrom = parseInt(dateFrom, 10);
11891
- const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
12007
+ const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
11892
12008
 
11893
12009
  return this.selected && day.date === departTimestamp;
11894
12010
  }
@@ -11903,7 +12019,7 @@ class AuroCalendarCell extends LitElement {
11903
12019
  */
11904
12020
  isReturnDate(day, dateFrom, dateTo) {
11905
12021
  const parsedDateTo = parseInt(dateTo, 10);
11906
- const returnTimestamp = startOfDay$1(parsedDateTo * 1000) / 1000;
12022
+ const returnTimestamp = new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000;
11907
12023
 
11908
12024
  return this.selected && day.date === returnTimestamp && dateFrom;
11909
12025
  }
@@ -12067,6 +12183,7 @@ class AuroCalendarCell extends LitElement {
12067
12183
  setTimeout(() => this.firstUpdated(), 0);
12068
12184
  return;
12069
12185
  }
12186
+ this.calendar = calendar;
12070
12187
  this.datepicker = calendar.datepicker;
12071
12188
  this._slotContentHandler = () => {
12072
12189
  this.handleSlotContent();
@@ -12124,15 +12241,28 @@ class AuroCalendarCell extends LitElement {
12124
12241
  this._cachedButton = this.shadowRoot.querySelector('button.day');
12125
12242
  });
12126
12243
 
12127
- // Update host-level aria attributes for ariaActiveDescendantElement.
12244
+ // Keep the host's gridcell aria attributes in sync with the day data.
12128
12245
  this.updateHostAria();
12129
12246
  }
12130
12247
 
12131
12248
  // Update host aria when selection changes (aria-selected, range labels)
12132
- if (properties.has('dateFrom') || properties.has('dateTo') || properties.has('selected')) {
12249
+ // or when isCurrentDate flips (aria-current).
12250
+ if (properties.has('dateFrom') || properties.has('dateTo') || properties.has('selected') || properties.has('isCurrentDate')) {
12133
12251
  this.updateHostAria();
12134
12252
  }
12135
12253
 
12254
+ // When the rendered range shifts (month nav, min/max change), a cell
12255
+ // host may be re-rendered for a new date that is now out-of-range —
12256
+ // but its imperatively-set `active` flag and `activeCell` ring class
12257
+ // from the previous date persist because setActiveCell only iterates
12258
+ // focusable (in-range) cells when clearing the prior active state.
12259
+ // Drop the active state here so the disabled cell isn't left visually
12260
+ // ringed.
12261
+ if ((properties.has('day') || properties.has('min') || properties.has('max')) &&
12262
+ this.active && this.isOutOfRange(this.day, this.min, this.max)) {
12263
+ this.clearActive();
12264
+ }
12265
+
12136
12266
  // Configure popover when it first becomes rendered
12137
12267
  if (properties.has('hasPopoverContent') && this.hasPopoverContent) {
12138
12268
  this.updateComplete.then(() => this.configurePopover());
@@ -12140,8 +12270,8 @@ class AuroCalendarCell extends LitElement {
12140
12270
  }
12141
12271
 
12142
12272
  /**
12143
- * Updates ARIA attributes on the host element so that
12144
- * ariaActiveDescendantElement can expose cell info to the SR.
12273
+ * Sets host-level ARIA so each cell exposes its date, selection state,
12274
+ * and blackout status to assistive tech browsing the month grid.
12145
12275
  * @private
12146
12276
  * @returns {void}
12147
12277
  */
@@ -12150,16 +12280,27 @@ class AuroCalendarCell extends LitElement {
12150
12280
 
12151
12281
  const outOfRange = this.isOutOfRange(this.day, this.min, this.max);
12152
12282
  if (outOfRange) {
12283
+ // Strip every aria attribute the in-range branch may have set on a
12284
+ // previous render — if a cell flips from in-range to out-of-range
12285
+ // (calendar shifts months, minDate/maxDate change, etc.).
12153
12286
  this.removeAttribute('role');
12154
12287
  this.removeAttribute('aria-label');
12288
+ this.removeAttribute('aria-current');
12289
+ this.removeAttribute('aria-selected');
12290
+ this.removeAttribute('aria-disabled');
12155
12291
  return;
12156
12292
  }
12157
12293
 
12158
- // The host acts as the gridcell for ariaActiveDescendantElement.
12159
12294
  this.setAttribute('role', 'gridcell');
12160
12295
  this.setAttribute('aria-label', this.getAriaLabel());
12161
12296
  this.setAttribute('aria-selected', this.selected ? 'true' : 'false');
12162
12297
 
12298
+ if (this.isCurrentDate) {
12299
+ this.setAttribute('aria-current', 'date');
12300
+ } else {
12301
+ this.removeAttribute('aria-current');
12302
+ }
12303
+
12163
12304
  if (this.isBlackout()) {
12164
12305
  this.setAttribute('aria-disabled', 'true');
12165
12306
  } else {
@@ -12174,7 +12315,7 @@ class AuroCalendarCell extends LitElement {
12174
12315
  * @returns {void}
12175
12316
  */
12176
12317
  focusButton() {
12177
- const button = this._cachedButton || this.shadowRoot.querySelector('button:not([aria-hidden])');
12318
+ const button = this._cachedButton || this.shadowRoot.querySelector('button:not([disabled])');
12178
12319
  if (button) {
12179
12320
  button.focus({ focusVisible: true });
12180
12321
  }
@@ -12182,10 +12323,22 @@ class AuroCalendarCell extends LitElement {
12182
12323
 
12183
12324
  /**
12184
12325
  * Imperatively marks this cell as active without triggering a Lit re-render.
12185
- * Note: buttons stay tabindex="-1" because the grid uses aria-activedescendant.
12326
+ * Buttons stay tabindex="-1" because DOM focus stays on the grid wrapper
12327
+ * arrow keys move the active cell imperatively and the live region carries
12328
+ * the SR announcement.
12329
+ *
12330
+ * Refuses to activate out-of-range cells: those are aria-hidden, have no
12331
+ * click/focus handlers, and are filtered out of `getFocusableCells`. The
12332
+ * active class showing on a disabled cell would be visually misleading,
12333
+ * so this guard is the single source of truth across every code path
12334
+ * that might call setActive (keyboard nav, focus restore, cell click).
12186
12335
  * @returns {void}
12187
12336
  */
12188
12337
  setActive() {
12338
+ if (this.isOutOfRange(this.day, this.min, this.max)) {
12339
+ return;
12340
+ }
12341
+
12189
12342
  this.active = true;
12190
12343
 
12191
12344
  // Show the popover when this cell becomes active via keyboard navigation.
@@ -12224,10 +12377,13 @@ class AuroCalendarCell extends LitElement {
12224
12377
  if (!btn || !this.day) return;
12225
12378
 
12226
12379
  const dayDate = this.day.date;
12227
- const departTimestamp = startOfDay$1(dateFrom * 1000) / 1000;
12380
+ const departTimestamp = new Date(dateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
12228
12381
  const isInRange = dayDate > departTimestamp && dayDate < hoveredDate;
12229
- const isLastHovered = dayDate === hoveredDate && hoveredDate > departTimestamp;
12230
- const isDepartWithPreview = dayDate === departTimestamp && hoveredDate > departTimestamp;
12382
+ // `>=` so hovering the depart cell itself (a same-day round-trip
12383
+ // preview) still surfaces a visual cue: the depart cell receives both
12384
+ // rangeDepartDate and lastHoveredDate.
12385
+ const isLastHovered = dayDate === hoveredDate && hoveredDate >= departTimestamp;
12386
+ const isDepartWithPreview = dayDate === departTimestamp && hoveredDate >= departTimestamp;
12231
12387
 
12232
12388
  btn.classList.toggle('inRange', isInRange);
12233
12389
  btn.classList.toggle('lastHoveredDate', isLastHovered);
@@ -12285,7 +12441,6 @@ class AuroCalendarCell extends LitElement {
12285
12441
  @focus="${outOfRange ? undefined : this.handleFocus}"
12286
12442
  class="${classMap(buttonClasses)}"
12287
12443
  ?disabled="${outOfRange}"
12288
- aria-hidden="${outOfRange ? 'true' : nothing}"
12289
12444
  tabindex="-1">
12290
12445
  <div class="buttonWrapper" aria-hidden="true">
12291
12446
  <div class="currentDayMarker">${this.day?.title || nothing}</div>
@@ -12996,7 +13151,7 @@ class CalendarUtilities {
12996
13151
 
12997
13152
  var colorCss$4 = css`#headerContainer{box-shadow:var(--ds-auro-dropdownbib-header-boxshadow-color)}#footerContainer{background-color:var(--ds-auro-dropdownbib-footer-container-color)}`;
12998
13153
 
12999
- var styleCss$4 = css`#bibTemplate{display:flex;overflow:hidden;height:100%;max-height:100%;flex-direction:column}#headerContainer{display:flex;flex-direction:column;padding:var(--ds-size-200, 1rem);padding-top:var(--ds-size-400, 2rem);padding-bottom:0}#headerContainer .titleRow{display:flex;flex-direction:row;justify-content:space-between;gap:var(--ds-size-100, 0.5rem)}#headerContainer .header{max-width:calc(100vw - var(--ds-size-900, 4.5rem));padding-top:var(--ds-size-200, 1rem)}#headerContainer .subheader{width:100%}#closeButton [auro-icon]{--ds-auro-icon-size: var(--ds-size-500, 2.5rem)}#bodyContainer{position:relative;overflow:auto;flex:1 1 100%}:host([isfullscreen]) #bibTemplate{max-height:100dvh}:host([isfullscreen]) #bodyContainer{margin-top:var(--ds-size-100, 0.5rem)}#footerContainer{position:absolute;right:0;bottom:0;left:0;padding:var(--ds-size-200, 1rem)}`;
13154
+ var styleCss$4 = css`#bibTemplate{display:flex;overflow:hidden;height:100%;max-height:100%;flex-direction:column}#headerContainer{display:flex;flex-direction:column;padding:var(--ds-size-200, 1rem);padding-top:var(--ds-size-400, 2rem);padding-bottom:0}#headerContainer .titleRow{display:flex;flex-direction:row;justify-content:space-between;gap:var(--ds-size-100, 0.5rem)}#headerContainer .header{max-width:calc(100vw - var(--ds-size-900, 4.5rem));padding-top:var(--ds-size-200, 1rem)}#headerContainer .subheader{width:100%}#closeButton [auro-icon]{--ds-auro-icon-size: var(--ds-size-500, 2.5rem)}#bodyContainer{position:relative;overflow:auto;flex:1}:host([isfullscreen]) #bibTemplate{max-height:100dvh}:host([isfullscreen]) #bodyContainer{margin-top:var(--ds-size-100, 0.5rem)}#footerContainer{padding:var(--ds-size-200, 1rem)}`;
13000
13155
 
13001
13156
  var tokenCss = css`:host{--ds-auro-dropdownbib-header-boxshadow-color: var(--ds-elevation-200, 0px 0px 10px rgba(0, 0, 0, 0.15));--ds-auro-dropdownbib-footer-container-color: var(--ds-basic-color-surface-default, #ffffff)}`;
13002
13157
 
@@ -13391,7 +13546,7 @@ class AuroBibtemplate extends LitElement {
13391
13546
  }
13392
13547
  }
13393
13548
 
13394
- var formkitVersion$2 = '202606192121';
13549
+ var formkitVersion$2 = '202607010100';
13395
13550
 
13396
13551
  let l$1 = class l{generateElementName(t,e){let o=t;return o+="-",o+=e.replace(/[.]/g,"_"),o}generateTag(o,s,a){const r=this.generateElementName(o,s),i=literal`${unsafeStatic(r)}`;return customElements.get(r)||customElements.define(r,class extends a{}),i}};let d$1 = class d{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}getSlotText(t,e){const o=t.shadowRoot?.querySelector(`slot[name="${e}"]`),s=(o?.assignedNodes({flatten:true})||[]).map(t=>t.textContent?.trim()).join(" ").trim();return s||null}};let h$1 = 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=css`: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}
13397
13552
  `,u$4=css`.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}}
@@ -13496,6 +13651,15 @@ class AuroCalendar extends RangeDatepicker {
13496
13651
  */
13497
13652
  this.activeCellDate = null;
13498
13653
 
13654
+ /**
13655
+ * Cached reference to the active cell host. Set by setActiveCell and
13656
+ * refreshed by scrollToActiveCell when its cache check misses (stale
13657
+ * or missing). Lets scrollToActiveCell skip a full cell scan on each
13658
+ * arrow key.
13659
+ * @private
13660
+ */
13661
+ this._activeCell = null;
13662
+
13499
13663
  /**
13500
13664
  * Whether the #calendarGrid wrapper currently has focus.
13501
13665
  * Used to determine whether the visualFocus ring should be shown.
@@ -13514,7 +13678,11 @@ class AuroCalendar extends RangeDatepicker {
13514
13678
  this.calendarRangeMonths = null;
13515
13679
 
13516
13680
  /**
13517
- * Legacy array of disabled-date timestamps.
13681
+ * @deprecated Use `auro-datepicker.blackoutDates` (an array of
13682
+ * `YYYY-MM-DD` ISO strings) instead. This legacy array of Unix
13683
+ * timestamps is still honored for backward compatibility but emits a
13684
+ * one-time `console.debug` the first time a non-empty value is observed.
13685
+ * Support will be removed in a future major release.
13518
13686
  * @private
13519
13687
  */
13520
13688
  this.disabledDays = [];
@@ -13771,17 +13939,44 @@ class AuroCalendar extends RangeDatepicker {
13771
13939
  * @returns {void}
13772
13940
  */
13773
13941
  updateActiveCellForVisibleMonth() {
13774
- // Use double-rAF to ensure child month/cell components have fully
13775
- // rendered and cached their button references before we set tabindex.
13776
- requestAnimationFrame(() => {
13777
- requestAnimationFrame(() => {
13778
- const newDate = this.computeActiveDate({ skipDateFrom: true });
13942
+ this._afterMonthRender(() => {
13943
+ const newDate = this.computeActiveDate({ skipDateFrom: true });
13779
13944
 
13780
- if (newDate !== null && newDate !== undefined) {
13781
- this.activeCellDate = newDate;
13782
- this.setActiveCell(this.activeCellDate);
13783
- }
13784
- });
13945
+ if (newDate !== null && newDate !== undefined) {
13946
+ this.activeCellDate = newDate;
13947
+ this.setActiveCell(this.activeCellDate);
13948
+ }
13949
+ });
13950
+ }
13951
+
13952
+ /**
13953
+ * Schedules `callback` two animation frames out, giving the child
13954
+ * `auro-formkit-calendar-month` and `auro-formkit-calendar-cell` elements
13955
+ * a full render-and-paint cycle to settle before the callback reads or
13956
+ * mutates DOM.
13957
+ *
13958
+ * Why two frames, not one:
13959
+ * 1. Lit batches property updates and renders in a microtask, so frame N
13960
+ * schedules the render but the new DOM may not be painted yet.
13961
+ * 2. Cells re-cache `_cachedButton` inside their own `updateComplete.then`,
13962
+ * which also lands a tick later. Reading buttons from frame N+1
13963
+ * (after both renders + cache refresh have flushed) reliably hits the
13964
+ * new month's cells.
13965
+ *
13966
+ * Used by every code path that calls `handleNextMonth`/`handlePrevMonth`
13967
+ * and then needs to inspect the freshly-rendered cells (cross-month
13968
+ * keyboard nav, boundary events, `updateActiveCellForVisibleMonth`).
13969
+ * Do NOT collapse to a single rAF — it intermittently lands before
13970
+ * `_cachedButton` is refreshed, which silently breaks focus restoration
13971
+ * and `setActiveCell` lookups.
13972
+ * @private
13973
+ * @param {() => void} callback - Runs once after the month re-render and
13974
+ * the cells' button caches have refreshed.
13975
+ * @returns {void}
13976
+ */
13977
+ _afterMonthRender(callback) {
13978
+ requestAnimationFrame(() => {
13979
+ requestAnimationFrame(callback);
13785
13980
  });
13786
13981
  }
13787
13982
 
@@ -13899,6 +14094,47 @@ class AuroCalendar extends RangeDatepicker {
13899
14094
  return Array.from(this.shadowRoot.querySelectorAll('auro-formkit-calendar-month'));
13900
14095
  }
13901
14096
 
14097
+ /**
14098
+ * Picks the focusable cell whose date is closest to targetTs. Used as a
14099
+ * fallback after a month-boundary nav when the exact target date isn't
14100
+ * focusable — typically because the month re-render lagged or the date
14101
+ * was filtered out by isOutOfRange. When two cells are equidistant, the
14102
+ * navigation direction breaks the tie so the user moves the way they
14103
+ * pressed (forward → later cell, backward → earlier cell).
14104
+ * @private
14105
+ * @param {Array} cells - Focusable cells from getAllFocusableCells.
14106
+ * @param {Number} targetTs - Desired Unix timestamp (seconds).
14107
+ * @param {'next'|'prev'} direction - Navigation direction.
14108
+ * @returns {Object|null} The nearest cell, or null when cells is empty.
14109
+ */
14110
+ pickNearestCell(cells, targetTs, direction) {
14111
+ if (!cells.length) {
14112
+ return null;
14113
+ }
14114
+ const forward = direction === 'next';
14115
+ let best = null;
14116
+ let bestDelta = Infinity;
14117
+ cells.forEach((cell) => {
14118
+ if (!cell.day) {
14119
+ return;
14120
+ }
14121
+ const distance = Math.abs(cell.day.date - targetTs);
14122
+ if (distance < bestDelta) {
14123
+ best = cell;
14124
+ bestDelta = distance;
14125
+ return;
14126
+ }
14127
+ if (distance === bestDelta && best) {
14128
+ if (forward && cell.day.date > best.day.date) {
14129
+ best = cell;
14130
+ } else if (!forward && cell.day.date < best.day.date) {
14131
+ best = cell;
14132
+ }
14133
+ }
14134
+ });
14135
+ return best;
14136
+ }
14137
+
13902
14138
  /**
13903
14139
  * Gets all focusable cells across all rendered months.
13904
14140
  * @private
@@ -13915,9 +14151,9 @@ class AuroCalendar extends RangeDatepicker {
13915
14151
 
13916
14152
  /**
13917
14153
  * Sets the active cell across all months. Only one cell has tabindex="0" at a time.
13918
- * Uses imperative DOM manipulation — no Lit re-render triggered.
13919
- * Also updates ariaActiveDescendantElement on the grid wrapper so
13920
- * screen readers announce the active cell without moving DOM focus.
14154
+ * Uses imperative DOM manipulation — no Lit re-render triggered. DOM focus
14155
+ * stays on the grid wrapper; the live region (see getOrCreateLiveRegion)
14156
+ * is what announces the active cell to assistive tech.
13921
14157
  * @param {Number} date - Unix timestamp of the cell to activate.
13922
14158
  * @returns {void}
13923
14159
  */
@@ -13935,6 +14171,9 @@ class AuroCalendar extends RangeDatepicker {
13935
14171
  });
13936
14172
 
13937
14173
  this.activeCellDate = date;
14174
+ // Cache so scrollToActiveCell can scroll without re-querying all cells
14175
+ // on every arrow keypress.
14176
+ this._activeCell = newActiveCell;
13938
14177
 
13939
14178
  // Apply activeCell ring only when the grid currently has focus.
13940
14179
  if (newActiveCell && this._gridHasFocus) {
@@ -13966,10 +14205,23 @@ class AuroCalendar extends RangeDatepicker {
13966
14205
  /**
13967
14206
  * Shows the activeCell ring when the grid gains focus.
13968
14207
  * @private
14208
+ * @param {FocusEvent} [event] - The focusin event.
13969
14209
  * @returns {void}
13970
14210
  */
13971
- handleGridFocusIn() {
14211
+ handleGridFocusIn(event) {
13972
14212
  this._gridHasFocus = true;
14213
+
14214
+ // Only apply the activeCell ring when the grid wrapper itself receives focus
14215
+ // (Tab/programmatic). When focus moves into a cell button via mousedown,
14216
+ // event.target is the cell descendant — skip the ring here. The subsequent
14217
+ // click handler calls setActiveCell on the clicked cell, which applies the
14218
+ // ring there. Without this guard, mousedown briefly flashes the ring on the
14219
+ // previously-active cell (e.g. the 1st-of-month set by month navigation
14220
+ // when the grid was not focused).
14221
+ if (event && event.target !== event.currentTarget) {
14222
+ return;
14223
+ }
14224
+
13973
14225
  const activeCell = this.getAllFocusableCells().find((cell) => cell.active);
13974
14226
  if (activeCell) {
13975
14227
  const btn = activeCell._cachedButton || activeCell.shadowRoot.querySelector('button.day');
@@ -13998,6 +14250,65 @@ class AuroCalendar extends RangeDatepicker {
13998
14250
  this.clearRangePreview();
13999
14251
  }
14000
14252
 
14253
+ /**
14254
+ * Returns a memoized Set of blackout timestamps (seconds) drawn from both
14255
+ * the legacy `disabledDays` array and the datepicker's ISO `blackoutDates`.
14256
+ * The cache invalidates when either source array's reference changes, which
14257
+ * matches Lit's own reactive identity semantics for array properties.
14258
+ * @private
14259
+ * @returns {Set<Number>}
14260
+ */
14261
+ _getBlackoutSet() {
14262
+ // Normalize non-array values to a stable `null` sentinel rather than a
14263
+ // fresh `[]` per call — otherwise the reference-identity cache key
14264
+ // (`_cachedBlackoutDisabledDays === disabledDays`) never matches on
14265
+ // subsequent calls and the Set rebuilds every time. `buildBlackoutSet`
14266
+ // already treats null/non-array as "no legacy disabledDays" via its
14267
+ // own Array.isArray gate.
14268
+ const disabledDays = Array.isArray(this.disabledDays) ? this.disabledDays : null;
14269
+ const blackoutDates = this.datepicker?.blackoutDates;
14270
+ if (this._blackoutSet &&
14271
+ this._cachedBlackoutDisabledDays === disabledDays &&
14272
+ this._cachedBlackoutDates === blackoutDates) {
14273
+ return this._blackoutSet;
14274
+ }
14275
+
14276
+ if (disabledDays && disabledDays.length > 0) {
14277
+ this._warnDisabledDaysDeprecated();
14278
+ }
14279
+
14280
+ this._blackoutSet = buildBlackoutSet(disabledDays, blackoutDates);
14281
+ this._cachedBlackoutDisabledDays = disabledDays;
14282
+ this._cachedBlackoutDates = blackoutDates;
14283
+ return this._blackoutSet;
14284
+ }
14285
+
14286
+ /**
14287
+ * Per-class flag that gates the `disabledDays` deprecation warning so it
14288
+ * fires exactly once per page no matter how many calendars or rebuild
14289
+ * cycles encounter the legacy array.
14290
+ * @private
14291
+ */
14292
+ static _warnedDisabledDaysDeprecation = false;
14293
+
14294
+ /**
14295
+ * One-time `console.debug` directing consumers from the legacy
14296
+ * `disabledDays` Unix-timestamp API to the ISO `blackoutDates` API. Fires
14297
+ * the first time `_getBlackoutSet` rebuilds from a non-empty
14298
+ * `disabledDays`; subsequent calls (on this or any other AuroCalendar
14299
+ * instance on the page) are silent.
14300
+ * @private
14301
+ * @returns {void}
14302
+ */
14303
+ _warnDisabledDaysDeprecated() {
14304
+ if (AuroCalendar._warnedDisabledDaysDeprecation) {
14305
+ return;
14306
+ }
14307
+ AuroCalendar._warnedDisabledDaysDeprecation = true;
14308
+ // eslint-disable-next-line no-console
14309
+ 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.');
14310
+ }
14311
+
14001
14312
  /**
14002
14313
  * Computes the initial active date from data properties alone — no DOM required.
14003
14314
  * Priority:
@@ -14042,21 +14353,10 @@ class AuroCalendar extends RangeDatepicker {
14042
14353
  const minTs = Number.isFinite(rawMin) ? rawMin : -Infinity;
14043
14354
  const maxTs = Number.isFinite(rawMax) ? rawMax : Infinity;
14044
14355
 
14045
- // Build a Set of blackout timestamps for O(1) lookup.
14046
- const blackoutSet = new Set(this.disabledDays.map((day) => parseInt(day, 10)));
14047
-
14048
- // Also include ISO-format blackoutDates from the datepicker if available.
14049
- // Parse YYYY-MM-DD as local date to avoid UTC shift issues.
14050
- const isoBlackouts = this.datepicker?.blackoutDates;
14051
- if (Array.isArray(isoBlackouts)) {
14052
- for (const isoStr of isoBlackouts) {
14053
- const parts = isoStr.split('-');
14054
- const ts = Math.floor(new Date(parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10)).getTime() / 1000);
14055
- if (Number.isFinite(ts)) {
14056
- blackoutSet.add(ts);
14057
- }
14058
- }
14059
- }
14356
+ // Build a Set of blackout timestamps for O(1) lookup. Memoized by the
14357
+ // identity of the source arrays so rapid month nav doesn't rebuild the
14358
+ // Set (and re-parse every ISO string) on every keypress.
14359
+ const blackoutSet = this._getBlackoutSet();
14060
14360
 
14061
14361
  /**
14062
14362
  * A date (unix timestamp in seconds, midnight-aligned) is "enabled" when
@@ -14252,8 +14552,8 @@ class AuroCalendar extends RangeDatepicker {
14252
14552
 
14253
14553
  /**
14254
14554
  * Handles arrow key navigation on the calendar grid wrapper.
14255
- * Focus stays on the grid wrapper; only ariaActiveDescendantElement
14256
- * and the visual active-cell indicator change.
14555
+ * Focus stays on the grid wrapper; only the visual active-cell indicator
14556
+ * changes. The live region announces the new active cell.
14257
14557
  * @private
14258
14558
  * @param {KeyboardEvent} event - The keyboard event.
14259
14559
  * @returns {void}
@@ -14318,21 +14618,24 @@ class AuroCalendar extends RangeDatepicker {
14318
14618
  } else {
14319
14619
  this.handlePrevMonth({ skipActiveUpdate: true });
14320
14620
  }
14321
- requestAnimationFrame(() => {
14322
- requestAnimationFrame(() => {
14323
- const cells = this.getAllFocusableCells();
14324
- const target = cells.find((cell) => cell.day && cell.day.date === targetTs);
14325
- if (target) {
14326
- this.setActiveCell(target.day.date);
14327
- this.handleCellFocused({ detail: { date: target.day.date } });
14328
- } else if (cells.length > 0) {
14329
- const fallback = navDir === 'next' ? cells[cells.length - 1] : cells[0];
14621
+ this._afterMonthRender(() => {
14622
+ const cells = this.getAllFocusableCells();
14623
+ const target = cells.find((cell) => cell.day && cell.day.date === targetTs);
14624
+ if (target) {
14625
+ this.setActiveCell(target.day.date);
14626
+ this.handleCellFocused({ detail: { date: target.day.date } });
14627
+ } else {
14628
+ const fallback = this.pickNearestCell(cells, targetTs, navDir);
14629
+ if (fallback) {
14330
14630
  this.setActiveCell(fallback.day.date);
14331
14631
  this.handleCellFocused({ detail: { date: fallback.day.date } });
14332
14632
  }
14333
- // Re-focus grid wrapper after month change re-render
14334
- this.focusActiveCell();
14335
- });
14633
+ }
14634
+ // Scroll AFTER the cross-month setActiveCell so the freshly
14635
+ // activated cell is what gets scrolled into view.
14636
+ this.scrollToActiveCell();
14637
+ // Re-focus grid wrapper after month change re-render
14638
+ this.focusActiveCell();
14336
14639
  });
14337
14640
  }
14338
14641
  }
@@ -14358,26 +14661,23 @@ class AuroCalendar extends RangeDatepicker {
14358
14661
  } else {
14359
14662
  this.handlePrevMonth({ skipActiveUpdate: true });
14360
14663
  }
14361
- requestAnimationFrame(() => {
14362
- requestAnimationFrame(() => {
14363
- const cells = this.getAllFocusableCells();
14364
- const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
14365
- if (target) {
14366
- this.setActiveCell(target.day.date);
14367
- this.handleCellFocused({ detail: { date: target.day.date } });
14368
- } else if (cells.length > 0) {
14369
- let nearest = null;
14370
-
14371
- if (navDirection === 'next') {
14372
- [nearest] = cells;
14373
- } else {
14374
- nearest = cells[cells.length - 1];
14375
- }
14664
+ this._afterMonthRender(() => {
14665
+ const cells = this.getAllFocusableCells();
14666
+ const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
14667
+ if (target) {
14668
+ this.setActiveCell(target.day.date);
14669
+ this.handleCellFocused({ detail: { date: target.day.date } });
14670
+ } else {
14671
+ const nearest = this.pickNearestCell(cells, targetDate, navDirection);
14672
+ if (nearest) {
14376
14673
  this.setActiveCell(nearest.day.date);
14377
14674
  this.handleCellFocused({ detail: { date: nearest.day.date } });
14378
14675
  }
14379
- this.focusActiveCell();
14380
- });
14676
+ }
14677
+ // Scroll AFTER the cross-month setActiveCell so the freshly
14678
+ // activated cell is what gets scrolled into view.
14679
+ this.scrollToActiveCell();
14680
+ this.focusActiveCell();
14381
14681
  });
14382
14682
  }
14383
14683
  }
@@ -14411,6 +14711,8 @@ class AuroCalendar extends RangeDatepicker {
14411
14711
  const targetCell = allCells[targetIndex];
14412
14712
  this.setActiveCell(targetCell.day.date);
14413
14713
  this.scrollToActiveCell();
14714
+ // Match the cross-month branches: keep DOM focus on the grid wrapper
14715
+ // so subsequent arrow keys continue to land on this handler.
14414
14716
  this.focusActiveCell();
14415
14717
  } else if (direction === 'next' && this.showNextMonthBtn) {
14416
14718
  // Navigate to next month and focus the computed next date.
@@ -14427,19 +14729,22 @@ class AuroCalendar extends RangeDatepicker {
14427
14729
  }
14428
14730
 
14429
14731
  this.handleNextMonth({ skipActiveUpdate: true });
14430
- requestAnimationFrame(() => {
14431
- requestAnimationFrame(() => {
14432
- const cells = this.getAllFocusableCells();
14433
- const target = cells.find((cell) => cell.day && cell.day.date === nextTs);
14434
- if (target) {
14435
- this.setActiveCell(target.day.date);
14436
- this.focusActiveCell();
14437
- } else if (cells.length > 0) {
14438
- // Fallback: first cell of the last rendered month
14439
- this.setActiveCell(cells[cells.length - 1].day.date);
14440
- this.focusActiveCell();
14732
+ this._afterMonthRender(() => {
14733
+ const cells = this.getAllFocusableCells();
14734
+ const target = cells.find((cell) => cell.day && cell.day.date === nextTs);
14735
+ if (target) {
14736
+ this.setActiveCell(target.day.date);
14737
+ } else {
14738
+ // Same nearest-by-date fallback handleGridKeyDown uses — direct
14739
+ // `cells[length - 1]` would land on the end of the new month,
14740
+ // far from the user's intended `nextTs`.
14741
+ const fallback = this.pickNearestCell(cells, nextTs, 'next');
14742
+ if (fallback) {
14743
+ this.setActiveCell(fallback.day.date);
14441
14744
  }
14442
- });
14745
+ }
14746
+ this.scrollToActiveCell();
14747
+ this.focusActiveCell();
14443
14748
  });
14444
14749
  } else if (direction === 'prev' && this.showPrevMonthBtn) {
14445
14750
  // Navigate to previous month and focus the computed previous date.
@@ -14453,19 +14758,22 @@ class AuroCalendar extends RangeDatepicker {
14453
14758
  }
14454
14759
 
14455
14760
  this.handlePrevMonth({ skipActiveUpdate: true });
14456
- requestAnimationFrame(() => {
14457
- requestAnimationFrame(() => {
14458
- const cells = this.getAllFocusableCells();
14459
- const target = cells.find((cell) => cell.day && cell.day.date === prevTs);
14460
- if (target) {
14461
- this.setActiveCell(target.day.date);
14462
- this.focusActiveCell();
14463
- } else if (cells.length > 0) {
14464
- // Fallback: last cell of the first rendered month
14465
- this.setActiveCell(cells[0].day.date);
14466
- this.focusActiveCell();
14761
+ this._afterMonthRender(() => {
14762
+ const cells = this.getAllFocusableCells();
14763
+ const target = cells.find((cell) => cell.day && cell.day.date === prevTs);
14764
+ if (target) {
14765
+ this.setActiveCell(target.day.date);
14766
+ } else {
14767
+ // Same nearest-by-date fallback handleGridKeyDown uses — direct
14768
+ // `cells[0]` would land on the start of the previous month, far
14769
+ // from the user's intended `prevTs`.
14770
+ const fallback = this.pickNearestCell(cells, prevTs, 'prev');
14771
+ if (fallback) {
14772
+ this.setActiveCell(fallback.day.date);
14467
14773
  }
14468
- });
14774
+ }
14775
+ this.scrollToActiveCell();
14776
+ this.focusActiveCell();
14469
14777
  });
14470
14778
  }
14471
14779
  } else if (key === 'ArrowDown' || key === 'ArrowUp') {
@@ -14493,20 +14801,22 @@ class AuroCalendar extends RangeDatepicker {
14493
14801
  } else {
14494
14802
  this.handlePrevMonth({ skipActiveUpdate: true });
14495
14803
  }
14496
- requestAnimationFrame(() => {
14497
- requestAnimationFrame(() => {
14498
- const cells = this.getAllFocusableCells();
14499
- const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
14500
- if (target) {
14501
- this.setActiveCell(target.day.date);
14502
- this.focusActiveCell();
14503
- } else if (cells.length > 0) {
14504
- // Clamp to nearest focusable cell
14505
- const nearest = navDirection === 'next' ? cells[0] : cells[cells.length - 1];
14804
+ this._afterMonthRender(() => {
14805
+ const cells = this.getAllFocusableCells();
14806
+ const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
14807
+ if (target) {
14808
+ this.setActiveCell(target.day.date);
14809
+ } else {
14810
+ // Same nearest-by-date fallback handleGridKeyDown uses — the
14811
+ // old direction-based `cells[0]`/`cells[length-1]` clamp
14812
+ // could land 25+ days from the intended target.
14813
+ const nearest = this.pickNearestCell(cells, targetDate, navDirection);
14814
+ if (nearest) {
14506
14815
  this.setActiveCell(nearest.day.date);
14507
- this.focusActiveCell();
14508
14816
  }
14509
- });
14817
+ }
14818
+ this.scrollToActiveCell();
14819
+ this.focusActiveCell();
14510
14820
  });
14511
14821
  }
14512
14822
  }
@@ -14545,8 +14855,9 @@ class AuroCalendar extends RangeDatepicker {
14545
14855
  return;
14546
14856
  }
14547
14857
 
14548
- // With aria-activedescendant, the button no longer receives native focus,
14549
- // so we use the debounced live region for the full context announcement.
14858
+ // DOM focus stays on the grid wrapper while arrow keys move the active
14859
+ // cell, so cell buttons never receive native focus. The debounced live
14860
+ // region carries the full-context announcement instead.
14550
14861
  const announcement = this.buildFocusAnnouncement(date);
14551
14862
  this.announceFocusDebounced(announcement);
14552
14863
 
@@ -14616,10 +14927,10 @@ class AuroCalendar extends RangeDatepicker {
14616
14927
  return null;
14617
14928
  }
14618
14929
 
14619
- const departTs = startOfDay$2(parsedFrom * 1000) / 1000;
14930
+ const departTs = new Date(parsedFrom * 1000).setHours(0, 0, 0, 0) / 1000;
14620
14931
  const parsedTo = Number.parseInt(this.dateTo, 10);
14621
14932
  const hasTo = Number.isFinite(parsedTo);
14622
- const returnTs = hasTo ? startOfDay$2(parsedTo * 1000) / 1000 : null;
14933
+ const returnTs = hasTo ? new Date(parsedTo * 1000).setHours(0, 0, 0, 0) / 1000 : null;
14623
14934
 
14624
14935
  if (date === departTs) {
14625
14936
  return this.datepicker.rangeLabelStart || 'range start';
@@ -14633,36 +14944,22 @@ class AuroCalendar extends RangeDatepicker {
14633
14944
  if (hasTo && date > departTs && date < returnTs) {
14634
14945
  return this.datepicker.rangeLabelInRange || 'in range';
14635
14946
  }
14947
+ if (!hasTo && date > departTs) {
14948
+ return this.datepicker.rangeLabelEndPreview || 'previewing range end';
14949
+ }
14636
14950
  return this.datepicker.rangeLabelAfterRange || 'after range';
14637
14951
  }
14638
14952
 
14639
14953
  /**
14640
- * Checks whether a given date is a blackout date.
14954
+ * Checks whether a given date is a blackout date. Delegates to the
14955
+ * memoized `_getBlackoutSet` so the YYYY-MM-DD parsing and the
14956
+ * legacy/ISO merge rules live in exactly one place (see `blackoutUtils.js`).
14641
14957
  * @private
14642
14958
  * @param {Number} dateTs - Unix timestamp (seconds).
14643
14959
  * @returns {Boolean} True if the date is blacked out.
14644
14960
  */
14645
14961
  isDateBlackout(dateTs) {
14646
- // Check legacy disabledDays.
14647
- if (Array.isArray(this.disabledDays) && this.disabledDays.length > 0) {
14648
- if (this.disabledDays.findIndex((day) => parseInt(day, 10) === dateTs) !== -1) {
14649
- return true;
14650
- }
14651
- }
14652
-
14653
- // Check ISO blackoutDates.
14654
- const blackoutDates = this.datepicker?.blackoutDates;
14655
- if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
14656
- const date = new Date(dateTs * 1000);
14657
- const yyyy = date.getFullYear();
14658
- const mm = String(date.getMonth() + 1).padStart(2, '0');
14659
- const dd = String(date.getDate()).padStart(2, '0');
14660
- if (blackoutDates.includes(`${yyyy}-${mm}-${dd}`)) {
14661
- return true;
14662
- }
14663
- }
14664
-
14665
- return false;
14962
+ return this._getBlackoutSet().has(dateTs);
14666
14963
  }
14667
14964
 
14668
14965
  /**
@@ -14720,7 +15017,28 @@ class AuroCalendar extends RangeDatepicker {
14720
15017
  }
14721
15018
 
14722
15019
  /**
14723
- * Scrolls the calendar to ensure the month containing the active cell is visible.
15020
+ * Scrolls the calendar so the active cell is visible.
15021
+ *
15022
+ * Walks the flat tree (rendered, slot-aware) outward from the active
15023
+ * cell's button and calls `scrollBy` on every vertically-scrollable
15024
+ * ancestor by whatever delta still separates the cell from that
15025
+ * ancestor's viewport. Native `scrollIntoView` is not used because the
15026
+ * cell sits inside multiple nested scroll containers (the dropdown bib's
15027
+ * `<dialog>`, the bibtemplate's `#bodyContainer`) and the algorithm only
15028
+ * scrolls one of them on its own, leaving the cell short of the
15029
+ * viewport in mobile fullscreen.
15030
+ *
15031
+ * Uses `behavior: 'auto'` (the spec's universally-supported non-animated
15032
+ * value) so each `scrollBy` resolves synchronously and the next
15033
+ * iteration's `getBoundingClientRect` reads post-scroll positions
15034
+ * accurately. This also satisfies `prefers-reduced-motion` users — the
15035
+ * scroll containers do not set CSS `scroll-behavior: smooth`, so `auto`
15036
+ * is effectively instant.
15037
+ *
15038
+ * The active cell is looked up from the cache populated by
15039
+ * `setActiveCell`. On a cache miss (stale or absent) the cache is
15040
+ * refreshed from a single full scan so subsequent calls stay on the
15041
+ * fast path.
14724
15042
  * @private
14725
15043
  * @returns {void}
14726
15044
  */
@@ -14729,16 +15047,69 @@ class AuroCalendar extends RangeDatepicker {
14729
15047
  return;
14730
15048
  }
14731
15049
 
14732
- const date = new Date(this.activeCellDate * 1000);
14733
- const month = date.getMonth() + 1;
14734
- const year = date.getFullYear();
14735
- const selector = `#month-${month}-${year}`;
14736
- const monthElem = this.shadowRoot.querySelector(selector);
15050
+ // Prefer the cell cached by setActiveCell so arrow-key navigation does
15051
+ // not rebuild the full cell list on every keypress. Fall back to a
15052
+ // lookup when the cache is stale (e.g. detached after month re-render)
15053
+ // or absent (scrollToActiveCell called without a prior setActiveCell);
15054
+ // refresh the cache on the fallback path so a subsequent call reuses it.
15055
+ const activeDate = this.activeCellDate;
15056
+ const cached = this._activeCell;
15057
+ const cacheFresh = cached && cached.isConnected && cached.day && cached.day.date === activeDate;
15058
+ let activeCell = null;
15059
+ if (cacheFresh) {
15060
+ activeCell = cached;
15061
+ } else {
15062
+ activeCell = this.getAllFocusableCells().find((cell) => cell.day && cell.day.date === activeDate);
15063
+ this._activeCell = activeCell || null;
15064
+ }
15065
+ if (!activeCell) {
15066
+ return;
15067
+ }
15068
+
15069
+ // Scroll the button inside the cell — it has concrete dimensions,
15070
+ // which avoids quirks when the cell host has display: inline / contents
15071
+ // / flex-without-explicit-size.
15072
+ const target = activeCell._cachedButton ||
15073
+ activeCell.shadowRoot?.querySelector('button.day') ||
15074
+ activeCell;
14737
15075
 
14738
- if (monthElem) {
14739
- const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
14740
- monthElem.scrollIntoView({ block: 'nearest',
14741
- behavior: prefersReducedMotion ? 'instant' : 'smooth' });
15076
+ // parentNode follows the authored DOM tree and steps over shadow roots
15077
+ // via slot projection. A slotted element's visual parent is its
15078
+ // assignedSlot's parent (inside the host's shadow tree), not the host
15079
+ // itself. Without this hop, the walk skips right past #bodyContainer
15080
+ // and <dialog> and finds no scrollable ancestor at all.
15081
+ const flatParent = (current) => {
15082
+ if (current.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
15083
+ return current.host || null;
15084
+ }
15085
+ if (current.assignedSlot) {
15086
+ return current.assignedSlot.parentNode;
15087
+ }
15088
+ return current.parentNode;
15089
+ };
15090
+
15091
+ let node = flatParent(target);
15092
+ while (node && node !== document && node !== window) {
15093
+ if (node.nodeType === Node.ELEMENT_NODE) {
15094
+ const { overflowY } = window.getComputedStyle(node);
15095
+ if (overflowY === 'auto' || overflowY === 'scroll') {
15096
+ const targetRect = target.getBoundingClientRect();
15097
+ const scrollerRect = node.getBoundingClientRect();
15098
+ let delta = 0;
15099
+ if (targetRect.top < scrollerRect.top) {
15100
+ delta = targetRect.top - scrollerRect.top;
15101
+ } else if (targetRect.bottom > scrollerRect.bottom) {
15102
+ delta = targetRect.bottom - scrollerRect.bottom;
15103
+ }
15104
+ if (delta !== 0) {
15105
+ node.scrollBy({
15106
+ top: delta,
15107
+ behavior: 'auto'
15108
+ });
15109
+ }
15110
+ }
15111
+ }
15112
+ node = flatParent(node);
14742
15113
  }
14743
15114
  }
14744
15115
 
@@ -14829,9 +15200,34 @@ class AuroCalendar extends RangeDatepicker {
14829
15200
  // the last one.
14830
15201
  if (this._announceRafId) {
14831
15202
  cancelAnimationFrame(this._announceRafId);
15203
+ this._announceRafId = null;
14832
15204
  }
15205
+ this._deliverAnnouncement(dateStr, 0);
15206
+ }
15207
+
15208
+ /**
15209
+ * Writes `dateStr` to the live region. If the dropdown's dialog hasn't
15210
+ * mounted yet (so getOrCreateLiveRegion can't attach), retries on the
15211
+ * next animation frame up to MAX_LIVE_REGION_RETRIES instead of silently
15212
+ * dropping the announcement. The retry uses the same `_announceRafId`
15213
+ * the double-rAF below uses, so a newer announceSelection call (or
15214
+ * disconnectedCallback) cancels any in-flight retry.
15215
+ * @private
15216
+ * @param {String} dateStr - The localized date string to announce.
15217
+ * @param {Number} attempts - Number of prior retry attempts.
15218
+ * @returns {void}
15219
+ */
15220
+ _deliverAnnouncement(dateStr, attempts) {
14833
15221
  const liveRegion = this.getOrCreateLiveRegion();
14834
15222
  if (!liveRegion) {
15223
+ const MAX_LIVE_REGION_RETRIES = 10;
15224
+ if (attempts < MAX_LIVE_REGION_RETRIES) {
15225
+ this._announceRafId = requestAnimationFrame(() => {
15226
+ this._deliverAnnouncement(dateStr, attempts + 1);
15227
+ });
15228
+ } else {
15229
+ this._announceRafId = null;
15230
+ }
14835
15231
  return;
14836
15232
  }
14837
15233
 
@@ -15004,7 +15400,7 @@ class AuroCalendar extends RangeDatepicker {
15004
15400
  </div>
15005
15401
  </div>
15006
15402
 
15007
- <div class="calendarWrapper ${!this.isFullscreen && this.dropdown?.desktopModal ? 'hasFooter' : ''}">
15403
+ <div class="calendarWrapper">
15008
15404
  <div class="calendarNavButtons">
15009
15405
  ${this.showPrevMonthBtn ? html$1`
15010
15406
  <button tabIndex="0" class="calendarNavBtn prevMonth" aria-label="${this.datepicker?.navLabelPrevMonth || 'Previous month'}" @click="${this.handlePrevMonth}">
@@ -15017,7 +15413,7 @@ class AuroCalendar extends RangeDatepicker {
15017
15413
  </button>
15018
15414
  ` : undefined}
15019
15415
  </div>
15020
- <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}">
15416
+ <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}">
15021
15417
  ${this.renderAllCalendars()}
15022
15418
  </div>
15023
15419
  </div>
@@ -18902,7 +19298,7 @@ let AuroHelpText$2 = class AuroHelpText extends LitElement {
18902
19298
  }
18903
19299
  };
18904
19300
 
18905
- var formkitVersion$1 = '202606192121';
19301
+ var formkitVersion$1 = '202607010100';
18906
19302
 
18907
19303
  let AuroElement$2 = class AuroElement extends LitElement {
18908
19304
  static get properties() {
@@ -19853,6 +20249,14 @@ class AuroDropdown extends AuroElement$2 {
19853
20249
  };
19854
20250
  this.addEventListener('keydown', this._bibTabHandler);
19855
20251
 
20252
+ // Suppress AuroFloatingUI's auto-hide-on-focus-loss while the
20253
+ // desktopModal trap owns focus management. Without this, the very
20254
+ // first focus move into the bib (from the RAF below) triggers
20255
+ // handleFocusLoss → hideBib, tearing down the trap before the
20256
+ // user can press Tab.
20257
+ this._priorNoHideOnFocusLoss = this.noHideOnThisFocusLoss;
20258
+ this.noHideOnThisFocusLoss = true;
20259
+
19856
20260
  // Move initial focus into the bib content, matching FocusTrap behavior
19857
20261
  requestAnimationFrame(() => {
19858
20262
  const focusables = getFocusableElements(this.bibContent);
@@ -20166,6 +20570,7 @@ class AuroDropdown extends AuroElement$2 {
20166
20570
  role="${ifDefined(this.triggerContentFocusable ? undefined : this.a11yRole)}"
20167
20571
  aria-expanded="${ifDefined(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.isPopoverVisible)}"
20168
20572
  aria-controls="${ifDefined(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.dropdownId)}"
20573
+ aria-haspopup="${ifDefined(this.a11yRole === 'combobox' && !this.triggerContentFocusable ? 'listbox' : undefined)}"
20169
20574
  aria-labelledby="${ifDefined(this.triggerContentFocusable ? undefined : 'triggerLabel')}"
20170
20575
  aria-disabled="${ifDefined(this.disabled ? 'true' : undefined)}"
20171
20576
  @focusin="${this.handleFocusin}"
@@ -24668,15 +25073,17 @@ class AuroFormValidation {
24668
25073
  );
24669
25074
  }
24670
25075
 
24671
- // If there is a second input in the elem and that value is undefined or an empty string set hasValue to false;
24672
- if (this.auroInputElements?.length === 2) {
24673
- if (!this.auroInputElements[1].value || this.auroInputElements[1].length === 0) {
25076
+ const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
25077
+
25078
+ // If there is a second input in the elem and that value is undefined or an empty string set hasValue to false.
25079
+ // Skip for combobox: its second auro-input is the fullscreen-bib mirror of the same value, not an independent
25080
+ // field (datepicker is the intended consumer — start/end are independently required).
25081
+ if (this.auroInputElements?.length === 2 && !isCombobox) {
25082
+ if (!this.auroInputElements[1].value || this.auroInputElements[1].value.length === 0) {
24674
25083
  hasValue = false;
24675
25084
  }
24676
25085
  }
24677
25086
 
24678
- const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
24679
-
24680
25087
  if (isCombobox) {
24681
25088
 
24682
25089
  if (!elem.persistInput || elem.behavior === "filter") {
@@ -30612,10 +31019,18 @@ class AuroInputUtilities {
30612
31019
  * @returns {string | undefined}
30613
31020
  */
30614
31021
  toFormattedValue(valueObject, format) {
31022
+ // Exposed publicly via `AuroInputUtil.toFormattedValue`, so a missing
31023
+ // `format` argument has to fail gracefully rather than throw on
31024
+ // `format.toLowerCase()`. Treat any falsy value (undefined, null, '')
31025
+ // as "no format → no display value".
31026
+ if (!format) {
31027
+ return undefined;
31028
+ }
30615
31029
  const normalizedFormat = format.toLowerCase();
30616
31030
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
30617
31031
 
30618
31032
  if (!(valueObject instanceof Date) || Number.isNaN(valueObject.getTime()) || !maskOptions || typeof maskOptions.format !== 'function') {
31033
+ console.debug('Invalid date object or mask options for formatting', { valueObject, maskOptions }); // eslint-disable-line no-console
30619
31034
  return undefined;
30620
31035
  }
30621
31036
 
@@ -30762,79 +31177,19 @@ class BaseInput extends AuroElement$1 {
30762
31177
  constructor() {
30763
31178
  super();
30764
31179
 
30765
- this.appearance = "default";
30766
- this.disabled = false;
30767
- this.layout = 'classic';
30768
- this.locale = 'en-US';
30769
- this.max = undefined;
30770
- this._maxObject = undefined;
30771
- this.maxLength = undefined;
30772
- this.min = undefined;
30773
- this._minObject = undefined;
30774
- this.minLength = undefined;
30775
- this.required = false;
30776
- this.onDark = false;
30777
- this.setCustomValidityForType = undefined;
30778
- this.size = 'lg';
30779
- this.shape = 'classic';
30780
- this.value = undefined;
30781
- this._valueObject = undefined;
30782
-
30783
- this._initializePrivateDefaults();
30784
- }
30785
-
30786
- /**
30787
- * Internal Defaults.
30788
- * @private
30789
- * @returns {void}
30790
- */
30791
- _initializePrivateDefaults() {
31180
+ // Single-source initialization. Alphabetized so duplicate or stale
31181
+ // defaults are immediately obvious on a diff. Every field is assigned
31182
+ // exactly once here (previously the constructor + the old
31183
+ // `_initializePrivateDefaults` overlapped — both wrote ~14 of the same
31184
+ // fields and double-allocated `util` and `validation`, discarding the
31185
+ // first instance). `validation` is now allocated exactly once; `util`
31186
+ // is seeded here with an en-US default and then rebuilt in
31187
+ // `connectedCallback` once the consumer-resolved locale is available,
31188
+ // so a parent (datepicker/combobox) calling `validate()` synchronously
31189
+ // during its own update cycle sees a populated util instance.
30792
31190
  this.activeLabel = false;
30793
- this.appearance = "default";
30794
- this.icon = false;
30795
- this.disabled = false;
30796
- this.dvInputOnly = false;
30797
- this.hideLabelVisually = false;
30798
- this.max = undefined;
30799
- this.maxLength = undefined;
30800
- this.min = undefined;
30801
- this.minLength = undefined;
30802
- this.noValidate = false;
30803
- this.onDark = false;
30804
- this.required = false;
30805
- this.setCustomValidityForType = undefined;
30806
-
30807
- // Used for storing raw values returned from input mask.
30808
- this._rawMaskValue = undefined;
30809
-
30810
- /**
30811
- * @private
30812
- */
30813
- this.layout = 'classic';
30814
-
30815
- /**
30816
- * @private
30817
- */
30818
- this.shape = 'classic';
30819
-
30820
- /**
30821
- * @private
30822
- */
30823
- this.size = 'lg';
30824
-
30825
- this.touched = false;
30826
- this.util = new AuroInputUtilities({
30827
- locale: "en-US",
30828
- format: this.format
30829
- });
30830
- this.validation = new AuroFormValidation();
30831
- this.inputIconName = undefined;
30832
- this.showPassword = false;
30833
- this.validationCCLength = undefined;
30834
- this.hasValue = false;
30835
- this.label = 'Input label is undefined';
30836
-
30837
31191
 
31192
+ /** @private */
30838
31193
  this.allowedInputTypes = [
30839
31194
  "text",
30840
31195
  "number",
@@ -30843,7 +31198,9 @@ class BaseInput extends AuroElement$1 {
30843
31198
  "credit-card",
30844
31199
  "tel"
30845
31200
  ];
30846
- this.icon = false;
31201
+ this.appearance = "default";
31202
+
31203
+ /** @private */
30847
31204
  this.dateFormatMap = {
30848
31205
  'mm/dd/yyyy': 'dateMMDDYYYY',
30849
31206
  'dd/mm/yyyy': 'dateDDMMYYYY',
@@ -30860,27 +31217,62 @@ class BaseInput extends AuroElement$1 {
30860
31217
  'dd/mm': 'dateDDMM',
30861
31218
  'mm/dd': 'dateMMDD'
30862
31219
  };
31220
+ this.disabled = false;
31221
+
31222
+ /** @private */
30863
31223
  this.domHandler = new DomHandler();
30864
31224
  this.dvInputOnly = false;
30865
31225
  this.hasValue = false;
31226
+ this.hideLabelVisually = false;
31227
+ this.icon = false;
31228
+
31229
+ /** @private */
30866
31230
  this.inputIconName = undefined;
31231
+
31232
+ /** @private */
30867
31233
  this.label = 'Input label is undefined';
31234
+ this.layout = 'classic';
31235
+ this.locale = 'en-US';
31236
+ this.max = undefined;
31237
+ this.maxLength = undefined;
31238
+ this.min = undefined;
31239
+ this.minLength = undefined;
30868
31240
  this.noValidate = false;
30869
- this._rawMaskValue = undefined; // Used for storing raw values returned from input mask.
31241
+ this.onDark = false;
31242
+ // Raw values returned from the input mask before model normalization.
31243
+ this._rawMaskValue = undefined;
31244
+ this.required = false;
31245
+ this.setCustomValidityForType = undefined;
31246
+ // Credit Card is intentionally excluded — its mask manages the cursor
31247
+ // itself, and listing it here caused cursor placement issues in Safari.
31248
+ /** @private */
30870
31249
  this.setSelectionInputTypes = [
30871
31250
  "text",
30872
31251
  "password",
30873
31252
  "email"
30874
- ]; // Credit Card is not included as this caused cursor placement issues in Safari.
31253
+ ];
31254
+ this.shape = 'classic';
31255
+
31256
+ /** @private */
30875
31257
  this.showPassword = false;
31258
+ this.size = 'lg';
30876
31259
  this.touched = false;
31260
+
31261
+ /** @private */
30877
31262
  this.uniqueId = new UniqueId().create();
31263
+
31264
+ /** @private */
30878
31265
  this.util = new AuroInputUtilities({
30879
31266
  locale: this.locale,
30880
31267
  format: this.format
30881
31268
  });
31269
+
31270
+ /** @private */
30882
31271
  this.validation = new AuroFormValidation();
31272
+
31273
+ /** @private */
30883
31274
  this.validationCCLength = undefined;
31275
+ this.value = undefined;
30884
31276
  }
30885
31277
 
30886
31278
  // function to define props used within the scope of this component
@@ -31318,7 +31710,7 @@ class BaseInput extends AuroElement$1 {
31318
31710
  * @returns {Date|undefined}
31319
31711
  */
31320
31712
  get valueObject() {
31321
- return this._valueObject || this._computeDateObjectFallback(this.value);
31713
+ return this.value && dateFormatter.isValidDate(this.value) ? dateFormatter.stringToDateInstance(this.value) : undefined;
31322
31714
  }
31323
31715
 
31324
31716
  /**
@@ -31326,7 +31718,7 @@ class BaseInput extends AuroElement$1 {
31326
31718
  * @returns {Date|undefined}
31327
31719
  */
31328
31720
  get minObject() {
31329
- return this._minObject || this._computeDateObjectFallback(this.min);
31721
+ return this.min && dateFormatter.isValidDate(this.min) ? dateFormatter.stringToDateInstance(this.min) : undefined;
31330
31722
  }
31331
31723
 
31332
31724
  /**
@@ -31334,50 +31726,7 @@ class BaseInput extends AuroElement$1 {
31334
31726
  * @returns {Date|undefined}
31335
31727
  */
31336
31728
  get maxObject() {
31337
- return this._maxObject || this._computeDateObjectFallback(this.max);
31338
- }
31339
-
31340
- /**
31341
- * Parses a date string into a Date object when the corresponding `_*Object`
31342
- * field hasn't been synced yet by `updated()`. Returns undefined when the
31343
- * input type/format isn't a full date or the string is not a valid date.
31344
- *
31345
- * Why this exists: a parent (datepicker) can call `inputN.validate()` from
31346
- * inside its own `updated()` before this input's `updated()` has run
31347
- * `syncDateValues()` — so `_valueObject`/`_maxObject` are still `undefined`
31348
- * and range checks would otherwise silently no-op (flipping the result to
31349
- * `valid` or `patternMismatch`).
31350
- * @private
31351
- * @param {string|undefined} dateStr - ISO date string from `value`/`min`/`max`.
31352
- * @returns {Date|undefined}
31353
- */
31354
- _computeDateObjectFallback(dateStr) {
31355
- if (!dateStr || !this.util || !this.util.isFullDateFormat(this.type, this.format)) {
31356
- return undefined;
31357
- }
31358
- if (!dateFormatter.isValidDate(dateStr)) {
31359
- return undefined;
31360
- }
31361
- return dateFormatter.stringToDateInstance(dateStr);
31362
- }
31363
-
31364
- /**
31365
- * Internal setter for readonly date object properties.
31366
- * @private
31367
- * @param {'valueObject'|'minObject'|'maxObject'} propertyName - Public object property name.
31368
- * @param {Date|undefined} propertyValue - Value to assign.
31369
- * @returns {void}
31370
- */
31371
- setDateObjectProperty(propertyName, propertyValue) {
31372
- const internalPropertyName = `_${propertyName}`;
31373
- const previousValue = this[internalPropertyName];
31374
-
31375
- if (previousValue === propertyValue) {
31376
- return;
31377
- }
31378
-
31379
- this[internalPropertyName] = propertyValue;
31380
- this.requestUpdate(propertyName, previousValue);
31729
+ return this.max && dateFormatter.isValidDate(this.max) ? dateFormatter.stringToDateInstance(this.max) : undefined;
31381
31730
  }
31382
31731
 
31383
31732
  connectedCallback() {
@@ -31406,7 +31755,6 @@ class BaseInput extends AuroElement$1 {
31406
31755
  format: this.format
31407
31756
  });
31408
31757
  this.configureDataForType();
31409
- this.syncDateValues();
31410
31758
  }
31411
31759
 
31412
31760
  disconnectedCallback() {
@@ -31426,12 +31774,17 @@ class BaseInput extends AuroElement$1 {
31426
31774
  this.wrapperElement.addEventListener('click', this.handleClick);
31427
31775
  }
31428
31776
 
31429
- // add attribute for query selectors when auro-input is registered under a custom name
31430
- if (this.tagName.toLowerCase() !== 'auro-input' && !this.hasAttribute('auro-input')) {
31431
- this.setAttribute('auro-input', '');
31432
- }
31433
31777
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
31434
31778
 
31779
+ // Normalize the format token to lowercase so case-mixed values supplied
31780
+ // via attribute (e.g. `format="MM/DD/YYYY"`) hit the `dateFormatMap`
31781
+ // lookup inside `setCustomHelpTextMessage`. Without this, an uppercase
31782
+ // format silently misses the map and leaves `setCustomValidityForType`
31783
+ // unset.
31784
+ if (this.format) {
31785
+ this.format = this.format.toLowerCase();
31786
+ }
31787
+
31435
31788
  // use validity message override if declared when initializing the component
31436
31789
  if (this.hasAttribute('setCustomValidity')) {
31437
31790
  this.ValidityMessageOverride = this.setCustomValidity;
@@ -31440,7 +31793,6 @@ class BaseInput extends AuroElement$1 {
31440
31793
  this.setCustomHelpTextMessage();
31441
31794
  this.configureAutoFormatting();
31442
31795
  this.configureDataForType();
31443
- this.syncDateValues();
31444
31796
  }
31445
31797
 
31446
31798
  /**
@@ -31516,6 +31868,13 @@ class BaseInput extends AuroElement$1 {
31516
31868
 
31517
31869
  if (typeToI18n.includes(this.type)) {
31518
31870
  this.setCustomValidityForType = i18n$1(this.lang, this.type);
31871
+ // COVERAGE: this `else if` branch is unreachable in WTR. connectedCallback
31872
+ // (L682) calls configureDataForType, which at L1266-1268 assigns
31873
+ // `this.format = this.util.getDateMaskFromLocale().toLowerCase()` for any
31874
+ // type=date input whose `format` attribute is unset. That runs before
31875
+ // firstUpdated invokes setCustomHelpTextMessage, so `!this.format` is
31876
+ // always false here. Retained as a defensive fallback; the whole function
31877
+ // is @deprecated per AB#1557296 and slated for removal.
31519
31878
  } else if (!this.format && this.type === 'date') {
31520
31879
  this.setCustomValidityForType = i18n$1(this.lang, 'dateMMDDYYYY');
31521
31880
  } else if (this.dateFormatMap[this.format]) {
@@ -31577,8 +31936,6 @@ class BaseInput extends AuroElement$1 {
31577
31936
  this.configureDataForType();
31578
31937
  }
31579
31938
 
31580
- this.syncDateValues(changedProperties);
31581
-
31582
31939
  if (changedProperties.has('value')) {
31583
31940
  if (this.value && this.value.length > 0) {
31584
31941
  this.hasValue = true;
@@ -31600,14 +31957,14 @@ class BaseInput extends AuroElement$1 {
31600
31957
 
31601
31958
  if (formattedValue !== this.inputElement.value) {
31602
31959
  this.skipNextProgrammaticInputEvent = true;
31603
- if (this.maskInstance && this.type === 'credit-card') {
31960
+ if (this.maskInstance && this.type !== 'date') {
31604
31961
  // Route through the mask so its _value and el.value stay in lock-step
31605
31962
  // (set value calls updateControl which writes el.value = displayValue).
31606
31963
  // Writing el.value directly leaves the mask thinking displayValue is
31607
- // stale; _saveSelection on the next focus/click then warns. Scoped to
31608
- // credit-card so date's own formattedValue (raw ISO when calendar-invalid)
31609
- // isn't re-masked through the mm/dd/yyyy mask, which would truncate it
31610
- // and flip validity from patternMismatch to tooShort.
31964
+ // stale; _saveSelection on the next focus/click then warns. Date is
31965
+ // excluded because its formattedValue can be raw ISO when the calendar
31966
+ // is invalid, and re-masking through mm/dd/yyyy would truncate it and
31967
+ // flip validity from patternMismatch to tooShort.
31611
31968
  this.maskInstance.value = formattedValue || '';
31612
31969
  } else if (formattedValue) {
31613
31970
  this.inputElement.value = formattedValue;
@@ -31649,120 +32006,65 @@ class BaseInput extends AuroElement$1 {
31649
32006
  }));
31650
32007
  }
31651
32008
 
31652
-
31653
- /**
31654
- * Synchronizes the ISO string values and Date object representations for date-related properties.
31655
- * This keeps the model and display values aligned when either side changes.
31656
- *
31657
- * When a full date format is in use, this method updates `value`, `min`, and `max` from their corresponding
31658
- * Date objects or vice versa, based on which properties have changed. It only runs when the current configuration
31659
- * represents a full year/month/day date format.
31660
- *
31661
- * @param {Map<string, unknown>|undefined} [changedProperties=undefined] - Optional map of changed properties used to limit which values are synchronized.
31662
- * @returns {void}
31663
- * @private
31664
- */
31665
- syncDateValues(changedProperties = undefined) {
31666
- if (!this.util.isFullDateFormat(this.type, this.format)) {
31667
- return;
31668
- }
31669
-
31670
- this.syncSingleDateValue(changedProperties, 'valueObject', 'value');
31671
- this.syncSingleDateValue(changedProperties, 'minObject', 'min');
31672
- this.syncSingleDateValue(changedProperties, 'maxObject', 'max');
31673
- }
31674
-
31675
- /**
31676
- * Synchronizes one date object/string property pair.
31677
- * @private
31678
- * @param {Map<string, unknown>|undefined} changedProperties - Map of changed properties from Lit.
31679
- * @param {string} objectProperty - Date object property name.
31680
- * @param {string} valueProperty - ISO string property name.
31681
- * @returns {void}
31682
- */
31683
- syncSingleDateValue(changedProperties, objectProperty, valueProperty) {
31684
- const objectPropertyChanged = !changedProperties || changedProperties.has(objectProperty);
31685
-
31686
- // objectProperty wins over valueProperty when both changed
31687
- if (objectPropertyChanged && this[objectProperty]) {
31688
- this[valueProperty] = dateFormatter.toISOFormatString(this[objectProperty]);
31689
- return;
31690
- }
31691
-
31692
- const valuePropertyChanged = !changedProperties || changedProperties.has(valueProperty);
31693
- if (!valuePropertyChanged) {
31694
- return;
31695
- }
31696
-
31697
- // when value is newly set to the same ISO string that corresponds to the existing Date object, do not clear the Date object (avoid unnecessary updates)
31698
- if (
31699
- changedProperties &&
31700
- valueProperty === 'value' &&
31701
- changedProperties.get('value') === undefined &&
31702
- this[objectProperty] instanceof Date &&
31703
- this[valueProperty] === dateFormatter.toISOFormatString(this[objectProperty])
31704
- ) {
31705
- return;
31706
- }
31707
-
31708
- if (dateFormatter.isValidDate(this[valueProperty])) {
31709
- this.setDateObjectProperty(objectProperty, dateFormatter.stringToDateInstance(this[valueProperty]));
31710
- } else {
31711
- this.setDateObjectProperty(objectProperty, undefined);
31712
- }
31713
- }
31714
-
31715
32009
  /**
31716
32010
  * Sets up IMasks and logic based on auto-formatting requirements.
31717
32011
  * @private
31718
32012
  * @returns {void}
31719
32013
  */
31720
32014
  configureAutoFormatting() {
31721
- // Re-entrancy guard. The patched-setter's synthetic input event (suppressed
31722
- // by _configuringMask above) could otherwise trigger handleInput
31723
- // processCreditCard configureAutoFormatting before the outer call's
31724
- // set value has finished its alignCursor pass.
32015
+ // _configuringMask gates two things: external re-entry into this method
32016
+ // while setup is mid-flight (from property changes that call back here),
32017
+ // and the accept/complete listeners below — both need to ignore the mask
32018
+ // events fired by our own value-restore step.
31725
32019
  if (this._configuringMask) return;
31726
32020
  this._configuringMask = true;
31727
32021
  try {
32022
+ // Destroy any prior mask so IMask can attach fresh under the new format.
32023
+ // Null the reference too — if the new maskOptions.mask is falsy (e.g.
32024
+ // type switched from credit-card to text) the IMask() reassignment
32025
+ // below is skipped, and downstream writes at line ~823 would otherwise
32026
+ // route through the destroyed instance.
31728
32027
  if (this.maskInstance) {
31729
32028
  this.maskInstance.destroy();
32029
+ this.maskInstance = null;
31730
32030
  }
31731
32031
 
31732
- // Pass new format to util
31733
32032
  this.util.updateFormat(this.format);
31734
32033
 
31735
32034
  const maskOptions = this.util.getMaskOptions(this.type, this.format);
31736
32035
 
31737
32036
  if (this.inputElement && maskOptions.mask) {
31738
-
31739
- // Stash and clear any existing value before IMask init.
31740
- // IMask's constructor processes the current input value which requires
31741
- // selection state clearing first avoids that scenario entirely.
31742
- // When the format changes (e.g. locale switch) and we have a valid ISO
31743
- // model value, compute the display string for the NEW format instead of
31744
- // re-using the old display string, which may be invalid in the new mask.
32037
+ // Capture the current display so it can be re-applied after IMask
32038
+ // attaches. The restore at the bottom goes through maskInstance.value
32039
+ // (not inputElement.value directly) so the mask's internal state and
32040
+ // the input's displayed text stay in lock-step.
31745
32041
  let existingValue = this.inputElement.value;
32042
+
32043
+ // Format-change case (e.g. locale switch): existingValue is the OLD
32044
+ // mask's display string and may not parse under the new mask. When
32045
+ // we have a valid date model, rebuild the display from valueObject
32046
+ // (the canonical source) using the new mask's format function.
31746
32047
  if (
31747
32048
  this.util.isFullDateFormat(this.type, this.format) &&
31748
32049
  this.value &&
31749
- dateFormatter.isValidDate(this.value) &&
31750
- this.valueObject instanceof Date &&
31751
- !Number.isNaN(this.valueObject.getTime()) &&
32050
+ this.valueObject &&
31752
32051
  typeof maskOptions.format === 'function'
31753
32052
  ) {
31754
32053
  existingValue = maskOptions.format(this.valueObject);
31755
32054
  }
31756
32055
 
32056
+ // Clear before IMask attaches so the constructor seeds an empty
32057
+ // internal value. Otherwise IMask reads the stale unmasked string
32058
+ // and emits a spurious 'accept' before the restore below runs.
31757
32059
  this.skipNextProgrammaticInputEvent = true;
31758
32060
  this.inputElement.value = '';
31759
32061
 
31760
32062
  this.maskInstance = IMask(this.inputElement, maskOptions);
31761
32063
 
32064
+ // Mask fires 'accept' on every value change, including the restore
32065
+ // step below. Skip events fired during configureAutoFormatting so
32066
+ // we don't overwrite a value the parent just pushed.
31762
32067
  this.maskInstance.on('accept', () => {
31763
- // Suppress propagation during configureAutoFormatting's own value-restoration
31764
- // (line below) — the mask emits 'accept' on every value-set, including ours,
31765
- // and we don't want to overwrite a value the parent just pushed.
31766
32068
  if (this._configuringMask) return;
31767
32069
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
31768
32070
  if (this.type === "date") {
@@ -31770,6 +32072,8 @@ class BaseInput extends AuroElement$1 {
31770
32072
  }
31771
32073
  });
31772
32074
 
32075
+ // Mask fires 'complete' on the restore step below for any value that
32076
+ // happens to be a complete match. Same setup-suppression as 'accept'.
31773
32077
  this.maskInstance.on('complete', () => {
31774
32078
  if (this._configuringMask) return;
31775
32079
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
@@ -31778,7 +32082,9 @@ class BaseInput extends AuroElement$1 {
31778
32082
  }
31779
32083
  });
31780
32084
 
31781
- // Restore the stashed value through IMask so it's properly masked
32085
+ // Write existingValue through the mask (not the input directly) so
32086
+ // the mask reformats it under the new rules and keeps its internal
32087
+ // _value aligned with the input's displayed text.
31782
32088
  if (existingValue) {
31783
32089
  this.maskInstance.value = existingValue;
31784
32090
  }
@@ -31858,6 +32164,38 @@ class BaseInput extends AuroElement$1 {
31858
32164
  this.touched = true;
31859
32165
  this.validation.validate(this);
31860
32166
  }
32167
+
32168
+ // Prevents cursor jumping in Safari. Setting `this.value` triggers a Lit
32169
+ // update that can re-render the input and reset the native cursor; we
32170
+ // capture the caret position before that update commits and restore it
32171
+ // via `setSelectionRange` once the update has flushed. Gated on
32172
+ // `setSelectionInputTypes` so credit-card (and other masked types whose
32173
+ // formatter manages the cursor itself) doesn't get a competing write.
32174
+ // Capture the caret position INSIDE the gate — reading `selectionStart`
32175
+ // on input types that don't support text selection (number, email in
32176
+ // some browsers) throws InvalidStateError, which would crash all input
32177
+ // handling. Wrap the read in try/catch belt-and-suspenders even though
32178
+ // the gated types currently support it, since the list is a public
32179
+ // property a consumer could mutate.
32180
+ if (this.setSelectionInputTypes.includes(this.type)) {
32181
+ let selectionStart = null;
32182
+ try {
32183
+ ({ selectionStart } = this.inputElement);
32184
+ } catch (error) { // eslint-disable-line no-unused-vars
32185
+ return;
32186
+ }
32187
+ if (typeof selectionStart !== 'number') {
32188
+ return;
32189
+ }
32190
+ this.updateComplete.then(() => {
32191
+ try {
32192
+ this.inputElement.setSelectionRange(selectionStart, selectionStart);
32193
+ } catch (error) { // eslint-disable-line no-unused-vars
32194
+ // Some input types (number/email in certain UAs) throw on
32195
+ // setSelectionRange; swallow and let the native cursor stand.
32196
+ }
32197
+ });
32198
+ }
31861
32199
  }
31862
32200
 
31863
32201
  /**
@@ -31946,7 +32284,6 @@ class BaseInput extends AuroElement$1 {
31946
32284
  */
31947
32285
  reset() {
31948
32286
  this.value = undefined;
31949
- this.setDateObjectProperty('valueObject', undefined);
31950
32287
  this.validation.reset(this);
31951
32288
  }
31952
32289
 
@@ -31955,7 +32292,6 @@ class BaseInput extends AuroElement$1 {
31955
32292
  */
31956
32293
  clear() {
31957
32294
  this.value = undefined;
31958
- this.setDateObjectProperty('valueObject', undefined);
31959
32295
  }
31960
32296
 
31961
32297
  /**
@@ -31993,7 +32329,7 @@ class BaseInput extends AuroElement$1 {
31993
32329
  */
31994
32330
  get placeholderStr() {
31995
32331
  if (!this.placeholder && this.type === 'date') {
31996
- return this.format ? this.format.toUpperCase() : 'MM/DD/YYYY';
32332
+ return this.format.toUpperCase();
31997
32333
  }
31998
32334
  return this.placeholder || "";
31999
32335
  }
@@ -32484,7 +32820,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
32484
32820
  }
32485
32821
  };
32486
32822
 
32487
- var formkitVersion = '202606192121';
32823
+ var formkitVersion = '202607010100';
32488
32824
 
32489
32825
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
32490
32826
  // See LICENSE in the project root for license information.
@@ -32987,6 +33323,7 @@ class AuroInput extends BaseInput {
32987
33323
  <${this.buttonTag}
32988
33324
  @click="${this.handleClickShowPassword}"
32989
33325
  appearance="${this.onDark ? 'inverse' : this.appearance}"
33326
+ aria-pressed="${this.showPassword ? 'true' : 'false'}"
32990
33327
  class="notificationBtn passwordBtn"
32991
33328
  shape="circle"
32992
33329
  size="sm"
@@ -33060,25 +33397,29 @@ class AuroInput extends BaseInput {
33060
33397
  * @returns {html} - Returns HTML for the help text and error message.
33061
33398
  */
33062
33399
  renderHtmlHelpText() {
33400
+ // Single `<p>` with stable identity across validity transitions —
33401
+ // previously two distinct templates (valid vs invalid) caused Lit to
33402
+ // replace the node entirely on a flip, and VoiceOver wouldn't
33403
+ // re-announce because the live-region element it was watching had been
33404
+ // removed and a new one inserted. Keeping one node means the `role`,
33405
+ // `aria-live`, and text content all change in-place, which AT does
33406
+ // observe and announce.
33407
+ const isError = this.validity && this.validity !== 'valid';
33063
33408
  return html$1`
33064
- ${!this.validity || this.validity === undefined || this.validity === 'valid'
33065
- ? html$1`
33066
- <${this.helpTextTag}
33067
- appearance="${this.onDark ? 'inverse' : this.appearance}">
33068
- <p id="${this.uniqueId}" part="helpText">
33069
- <slot name="helpText">${this.getHelpText()}</slot>
33070
- </p>
33071
- </${this.helpTextTag}>
33072
- `
33073
- : html$1`
33074
- <${this.helpTextTag} error
33075
- appearance="${this.onDark ? 'inverse' : this.appearance}">
33076
- <p id="${this.uniqueId}" role="alert" aria-live="assertive" part="helpText">
33077
- ${this.errorMessage}
33078
- </p>
33079
- </${this.helpTextTag}>
33080
- `
33081
- }
33409
+ <${this.helpTextTag}
33410
+ appearance="${this.onDark ? 'inverse' : this.appearance}"
33411
+ ?error=${isError}>
33412
+ <p
33413
+ id="${this.uniqueId}"
33414
+ part="helpText"
33415
+ role="${ifDefined(isError ? 'alert' : undefined)}"
33416
+ aria-live="${ifDefined(isError ? 'assertive' : undefined)}">
33417
+ ${isError
33418
+ ? this.errorMessage
33419
+ : html$1`<slot name="helpText">${this.getHelpText()}</slot>`
33420
+ }
33421
+ </p>
33422
+ </${this.helpTextTag}>
33082
33423
  `;
33083
33424
  }
33084
33425
 
@@ -33225,6 +33566,15 @@ function formatISODate(isoStr, format) {
33225
33566
  try {
33226
33567
  const date = dateFormatter.stringToDateInstance(isoStr);
33227
33568
 
33569
+ // `stringToDateInstance` returns an `Invalid Date` for malformed strings
33570
+ // and `null` for non-string input — it does NOT throw. Without this
33571
+ // guard, `getFullYear()`/`getMonth()`/`getDate()` on an Invalid Date
33572
+ // yield `NaN`, and `String(NaN).padStart(4, '0')` produces literals
33573
+ // like "0NaN/0NaN/0NaN" instead of `undefined`.
33574
+ if (!(date instanceof Date) || Number.isNaN(date.getTime())) {
33575
+ return undefined;
33576
+ }
33577
+
33228
33578
  const year = String(date.getFullYear()).padStart(4, '0');
33229
33579
  const month = String(date.getMonth() + 1).padStart(2, '0');
33230
33580
  const day = String(date.getDate()).padStart(2, '0');
@@ -33235,7 +33585,10 @@ function formatISODate(isoStr, format) {
33235
33585
  replace(/mm/iu, month).
33236
33586
  replace(/dd/iu, day);
33237
33587
  } catch (err) {
33238
- // If the input string is not a valid date, return undefined
33588
+ // Defensive: the Date-returning path is guarded above, but `parseDate`
33589
+ // (inside `stringToDateInstance`) could throw on pathological input
33590
+ // future-library-versions might introduce. Treat any thrown error as
33591
+ // "not a valid date" and return undefined.
33239
33592
  return undefined;
33240
33593
  }
33241
33594
  }
@@ -33904,6 +34257,8 @@ const datepickerKeyboardStrategy = {
33904
34257
  * @slot label - Defines the label content for the entire datepicker when `layout="snowflake"`.
33905
34258
  * @slot toLabel - Defines the label content for the second input when the `range` attribute is used.
33906
34259
  * @slot fromLabel - Defines the label content for the first input.
34260
+ * @slot optionalFromLabel - Overrides the "(optional)" text rendered next to the first input's label when the datepicker is not `required`.
34261
+ * @slot optionalToLabel - Overrides the "(optional)" text rendered next to the second input's label when `range` is set and the datepicker is not `required`.
33907
34262
  * @slot date_YYYY_MM_DD - Defines the content to display in the auro-calendar-cell for the specified date. The content text is colored using the success state token when the `highlight` attribute is applied to the slot.
33908
34263
  * @slot popover_YYYY_MM_DD - Defines the content to display in the auro-calendar-cell popover for the specified date.
33909
34264
  * @csspart dropdown - Use for customizing the style of the dropdown.
@@ -33959,6 +34314,7 @@ class AuroDatePicker extends AuroElement {
33959
34314
  this.rangeLabelBeforeRange = 'before range';
33960
34315
  this.rangeLabelInRange = 'in range';
33961
34316
  this.rangeLabelAfterRange = 'after range';
34317
+ this.rangeLabelEndPreview = 'previewing range end';
33962
34318
  this.blackoutDates = [];
33963
34319
  this.blackoutLabel = 'unavailable';
33964
34320
  this.navLabelPrevMonth = 'Previous month';
@@ -34058,6 +34414,22 @@ class AuroDatePicker extends AuroElement {
34058
34414
  */
34059
34415
  this.handleClick = this.handleClick.bind(this);
34060
34416
 
34417
+ /**
34418
+ * Single AbortController shared by every listener registered in the
34419
+ * configure* methods. Lets disconnectedCallback tear all of them down
34420
+ * with one abort() call.
34421
+ *
34422
+ * The genuine leak risk is the listeners attached to children that can
34423
+ * outlive the host if they get reparented — `this.dropdown`,
34424
+ * `this.calendar`, and the inputs inside the dropdown's slot.
34425
+ * Listeners attached to `this` (e.g. focusin/focusout on the host)
34426
+ * form a self-contained reference graph that the GC can collect with
34427
+ * the host anyway, but they share the same signal so the cleanup
34428
+ * pattern stays uniform across all configure* sites.
34429
+ * @private
34430
+ */
34431
+ this._listenerAbortController = new AbortController();
34432
+
34061
34433
  /**
34062
34434
  * @private
34063
34435
  */
@@ -34106,6 +34478,7 @@ class AuroDatePicker extends AuroElement {
34106
34478
 
34107
34479
  /**
34108
34480
  * Label announced for blackout (disabled but in-range) date cells.
34481
+ * @default 'unavailable'
34109
34482
  */
34110
34483
  blackoutLabel: {
34111
34484
  type: String,
@@ -34122,6 +34495,7 @@ class AuroDatePicker extends AuroElement {
34122
34495
 
34123
34496
  /**
34124
34497
  * Accessible label for the calendar grid containing the days of the month.
34498
+ * @default 'Calendar days of the month'
34125
34499
  */
34126
34500
  calendarGridLabel: {
34127
34501
  type: String,
@@ -34284,6 +34658,7 @@ class AuroDatePicker extends AuroElement {
34284
34658
 
34285
34659
  /**
34286
34660
  * Accessible label for the next month navigation button.
34661
+ * @default 'Next month'
34287
34662
  */
34288
34663
  navLabelNextMonth: {
34289
34664
  type: String,
@@ -34292,6 +34667,7 @@ class AuroDatePicker extends AuroElement {
34292
34667
 
34293
34668
  /**
34294
34669
  * Accessible label for the previous month navigation button.
34670
+ * @default 'Previous month'
34295
34671
  */
34296
34672
  navLabelPrevMonth: {
34297
34673
  type: String,
@@ -34369,7 +34745,11 @@ class AuroDatePicker extends AuroElement {
34369
34745
  },
34370
34746
 
34371
34747
  /**
34372
- * Label announced for cells after the range (or after start when no end is selected).
34748
+ * Label announced for cells after a fully selected range (both
34749
+ * `dateFrom` and `dateTo` are set). While a range is still being
34750
+ * picked (`dateFrom` set, `dateTo` unset), focused cells past the
34751
+ * start use `rangeLabelEndPreview` instead.
34752
+ * @default 'after range'
34373
34753
  */
34374
34754
  rangeLabelAfterRange: {
34375
34755
  type: String,
@@ -34378,6 +34758,7 @@ class AuroDatePicker extends AuroElement {
34378
34758
 
34379
34759
  /**
34380
34760
  * Label announced for cells before the range start.
34761
+ * @default 'before range'
34381
34762
  */
34382
34763
  rangeLabelBeforeRange: {
34383
34764
  type: String,
@@ -34386,14 +34767,27 @@ class AuroDatePicker extends AuroElement {
34386
34767
 
34387
34768
  /**
34388
34769
  * Label announced for the range end date cell.
34770
+ * @default 'range end'
34389
34771
  */
34390
34772
  rangeLabelEnd: {
34391
34773
  type: String,
34392
34774
  reflect: true
34393
34775
  },
34394
34776
 
34777
+ /**
34778
+ * Label announced for the focused cell while previewing a range end
34779
+ * (dateFrom set, dateTo not yet selected). Tells AT users that
34780
+ * pressing Enter would commit this cell as the range end.
34781
+ * @default 'previewing range end'
34782
+ */
34783
+ rangeLabelEndPreview: {
34784
+ type: String,
34785
+ reflect: true
34786
+ },
34787
+
34395
34788
  /**
34396
34789
  * Label announced for cells within the selected range.
34790
+ * @default 'in range'
34397
34791
  */
34398
34792
  rangeLabelInRange: {
34399
34793
  type: String,
@@ -34402,6 +34796,7 @@ class AuroDatePicker extends AuroElement {
34402
34796
 
34403
34797
  /**
34404
34798
  * Label announced for the range start date cell.
34799
+ * @default 'range start'
34405
34800
  */
34406
34801
  rangeLabelStart: {
34407
34802
  type: String,
@@ -34409,7 +34804,7 @@ class AuroDatePicker extends AuroElement {
34409
34804
  },
34410
34805
 
34411
34806
  /**
34412
- * Dates that the user should have for reference as part of their decision making when selecting a date.
34807
+ * Dates that the user should have for reference as part of their decision-making when selecting a date.
34413
34808
  * This should be a JSON string array of ISO date strings (`YYYY-MM-DD`).
34414
34809
  */
34415
34810
  referenceDates: {
@@ -34766,10 +35161,26 @@ class AuroDatePicker extends AuroElement {
34766
35161
  // ─── Vendor calendar time conversions ─────────────────────────────────────
34767
35162
 
34768
35163
  /**
34769
- * Converts a Unix timestamp (seconds) from the vendor calendar to an ISO date string.
35164
+ * Converts a Unix timestamp (seconds) from the vendored range-datepicker
35165
+ * (`src/vendor/wc-range-datepicker/day.js`) to an ISO date string.
35166
+ *
35167
+ * Timezone contract:
35168
+ * - INPUT: `time` is assumed to be the seconds-since-epoch of **local
35169
+ * midnight** for the intended calendar day. The vendor's Day constructor
35170
+ * builds it via `date-fns format(date, 't')` from a locally-constructed
35171
+ * Date, so this assumption currently holds end-to-end.
35172
+ * - OUTPUT: `dateFormatter.toISOFormatString` reads the Date's local
35173
+ * getFullYear/getMonth/getDate components, so the returned YYYY-MM-DD
35174
+ * string matches the local calendar day.
35175
+ *
35176
+ * If the vendor ever switches to emitting UTC-midnight timestamps, this
35177
+ * conversion will silently shift the returned date by one day in zones
35178
+ * west of UTC. Any vendor swap should re-verify this contract; the TZ
35179
+ * regression suite (`npm run test:hst`, UTC-10) will catch the symptom.
35180
+ *
34770
35181
  * @private
34771
- * @param {number} time - Unix timestamp in seconds.
34772
- * @returns {string} ISO date string (yyyy-mm-dd).
35182
+ * @param {number} time - Unix timestamp (seconds), local midnight of the day.
35183
+ * @returns {string} ISO date string (yyyy-mm-dd) reflecting the local calendar day.
34773
35184
  */
34774
35185
  convertWcTimeToDate(time) {
34775
35186
  return dateFormatter$1.toISOFormatString(new Date(time * 1000));
@@ -34871,8 +35282,8 @@ class AuroDatePicker extends AuroElement {
34871
35282
  }
34872
35283
  }
34873
35284
 
34874
- // Focus the calendar grid wrapper (aria-activedescendant handles
34875
- // the SR announcement for the active cell).
35285
+ // Focus the calendar grid wrapper. The live region (announced just
35286
+ // below) handles the SR announcement for the active cell.
34876
35287
  if (activeCell) {
34877
35288
  this.calendar.focusActiveCell();
34878
35289
 
@@ -34886,11 +35297,14 @@ class AuroDatePicker extends AuroElement {
34886
35297
  this.calendar.announceSelection(announcement);
34887
35298
  }, 500);
34888
35299
 
34889
- // On mobile fullscreen, scroll the month list so the active cell's
34890
- // month is visible. Without this, the list stays scrolled to the
34891
- // calendarStartDate month which may be far from the active cell.
34892
- if (this.dropdown.isBibFullscreen) {
35300
+ // On mobile fullscreen or when an explicit focusDate change has
35301
+ // requested a forced scroll on the next render scroll the active
35302
+ // cell into view. Doing this here (after activeCellDate has been
35303
+ // resolved by the rAF loop above) prevents a no-op scroll that
35304
+ // would happen if we tried to scroll before the cell was set.
35305
+ if (this.dropdown.isBibFullscreen || this.forceScrollOnNextMobileCalendarRender) {
34893
35306
  this.calendar.scrollToActiveCell();
35307
+ this.forceScrollOnNextMobileCalendarRender = false;
34894
35308
  }
34895
35309
  } else if (attempts < MAX_ATTEMPTS) {
34896
35310
  requestAnimationFrame(tryFocus);
@@ -34922,11 +35336,13 @@ class AuroDatePicker extends AuroElement {
34922
35336
  this.dropdown.bibDialogLabel = labelElement.textContent.trim() || undefined;
34923
35337
  }
34924
35338
 
35339
+ const { signal } = this._listenerAbortController;
35340
+
34925
35341
  this.dropdown.addEventListener('auroDropdown-triggerClick', () => {
34926
35342
  if (!this.isPopoverVisible) {
34927
35343
  this.dropdown.show();
34928
35344
  }
34929
- });
35345
+ }, { signal });
34930
35346
 
34931
35347
  this.dropdown.addEventListener('auroDropdown-toggled', () => {
34932
35348
  this.notifyDatepickerToggled();
@@ -34944,7 +35360,7 @@ class AuroDatePicker extends AuroElement {
34944
35360
  if (this.valueObject) {
34945
35361
  this.centralDate = this.value;
34946
35362
  } else if (!this.centralDate && !this.calendarStartDate && !this.minDate) {
34947
- this.centralDate = new Date();
35363
+ this.centralDate = dateFormatter$1.toISOFormatString(new Date());
34948
35364
  }
34949
35365
  }
34950
35366
 
@@ -35012,19 +35428,11 @@ class AuroDatePicker extends AuroElement {
35012
35428
  }
35013
35429
  }
35014
35430
 
35015
- // If on mobile, and the calendar is opened, scroll the focus date into view if the flag is set
35016
- if (this.dropdown.isPopoverVisible && this.forceScrollOnNextMobileCalendarRender) {
35017
-
35018
- // Since the calendar is not rendered until the dropdown is opened,
35019
- // and the auroDropdown-toggled event fires before the popover is actually open,
35020
- // we need to wait until the next frame to ensure the calendar is fully rendered
35021
- // and the area we're trying to scroll to is present in the DOM.
35022
- setTimeout(() => {
35023
- this.calendar.scrollMonthIntoView(this.calendarFocusDate);
35024
- this.forceScrollOnNextMobileCalendarRender = false;
35025
- }, 0);
35026
- }
35027
- });
35431
+ // Note: the forceScrollOnNextMobileCalendarRender scroll-into-view
35432
+ // happens inside focusActiveCellWhenReady() once activeCellDate has
35433
+ // been resolved by its rAF wait — not here in a setTimeout(0), which
35434
+ // fired before the active date was set and silently no-op'd.
35435
+ }, { signal });
35028
35436
 
35029
35437
  // Handle responsive strategy changes while the dropdown is open
35030
35438
  // (e.g. resizing from desktop → mobile or vice versa).
@@ -35071,7 +35479,7 @@ class AuroDatePicker extends AuroElement {
35071
35479
  });
35072
35480
  });
35073
35481
  }
35074
- });
35482
+ }, { signal });
35075
35483
  }
35076
35484
 
35077
35485
  /**
@@ -35084,6 +35492,8 @@ class AuroDatePicker extends AuroElement {
35084
35492
 
35085
35493
  this.inputList = [...this.dropdown.querySelectorAll(this.inputTag._$litStatic$)];
35086
35494
 
35495
+ const { signal } = this._listenerAbortController;
35496
+
35087
35497
  this.inputList.forEach((input, index) => {
35088
35498
  input.addEventListener('input', (event) => {
35089
35499
  event.stopPropagation();
@@ -35095,7 +35505,7 @@ class AuroDatePicker extends AuroElement {
35095
35505
  }
35096
35506
 
35097
35507
  this.notifyValueChanged();
35098
- });
35508
+ }, { signal });
35099
35509
 
35100
35510
  input.addEventListener('auroFormElement-validated', (evt) => {
35101
35511
  // not to bubble up input's validated event.
@@ -35111,7 +35521,7 @@ class AuroDatePicker extends AuroElement {
35111
35521
  this.validity = evt.detail.validity;
35112
35522
  this.errorMessage = evt.detail.message;
35113
35523
  }
35114
- });
35524
+ }, { signal });
35115
35525
  });
35116
35526
  }
35117
35527
 
@@ -35125,19 +35535,32 @@ class AuroDatePicker extends AuroElement {
35125
35535
  this.calendar.datepicker = this;
35126
35536
  this.calendar.dropdown = this.dropdown;
35127
35537
 
35538
+ const { signal } = this._listenerAbortController;
35539
+
35128
35540
  this.calendar.addEventListener('auroCalendar-dateSelected', () => {
35129
- if (this.inputList[0].value !== this.calendar.dateFrom && this.calendar.dateFrom !== undefined) {
35130
- this.inputList[0].value = this.convertWcTimeToDate(this.calendar.dateFrom);
35541
+ // Compare the input's ISO value against the *converted* calendar
35542
+ // timestamp (the vendor's `dateFrom`/`dateTo` are Unix-seconds
35543
+ // strings — comparing the input ISO directly against them would
35544
+ // never match, so the write would fire on every event and emit
35545
+ // redundant input/change activity).
35546
+ if (this.calendar.dateFrom !== undefined) {
35547
+ const fromIso = this.convertWcTimeToDate(this.calendar.dateFrom);
35548
+ if (this.inputList[0].value !== fromIso) {
35549
+ this.inputList[0].value = fromIso;
35550
+ }
35131
35551
  }
35132
35552
 
35133
- if (this.inputList[1] && this.calendar.dateTo && this.inputList[1].value !== this.calendar.dateTo) {
35134
- this.inputList[1].value = this.convertWcTimeToDate(this.calendar.dateTo);
35553
+ if (this.inputList[1] && this.calendar.dateTo) {
35554
+ const toIso = this.convertWcTimeToDate(this.calendar.dateTo);
35555
+ if (this.inputList[1].value !== toIso) {
35556
+ this.inputList[1].value = toIso;
35557
+ }
35135
35558
  }
35136
- });
35559
+ }, { signal });
35137
35560
 
35138
35561
  this.calendar.addEventListener('auroCalendar-dismissRequest', () => {
35139
35562
  this.dropdown.hide();
35140
- });
35563
+ }, { signal });
35141
35564
 
35142
35565
  this.calendar.addEventListener('auroCalendar-centralDateChanged', (event) => {
35143
35566
  const match = this.centralDateObject && this.util.datesMatch(event.detail.date, this.centralDateObject);
@@ -35147,7 +35570,7 @@ class AuroDatePicker extends AuroElement {
35147
35570
  }
35148
35571
 
35149
35572
  this.notifyMonthChanged(event);
35150
- });
35573
+ }, { signal });
35151
35574
  }
35152
35575
 
35153
35576
  /**
@@ -35156,10 +35579,17 @@ class AuroDatePicker extends AuroElement {
35156
35579
  * @returns {void}
35157
35580
  */
35158
35581
  configureDatepicker() {
35582
+ // These listeners are on `this` (the host), so they would GC with the
35583
+ // host even without the abort signal — see the leak rationale on
35584
+ // `_listenerAbortController`. The signal is still passed for uniform
35585
+ // cleanup semantics with the child-element listeners in the other
35586
+ // configure* methods.
35587
+ const { signal } = this._listenerAbortController;
35588
+
35159
35589
  this.addEventListener('focusin', () => {
35160
35590
  this.touched = true;
35161
35591
  this.hasFocus = true;
35162
- });
35592
+ }, { signal });
35163
35593
 
35164
35594
  this.addEventListener('focusout', () => {
35165
35595
  this.hasFocus = false;
@@ -35171,7 +35601,7 @@ class AuroDatePicker extends AuroElement {
35171
35601
  if (!this.matches(':focus-within')) {
35172
35602
  this.validate();
35173
35603
  }
35174
- });
35604
+ }, { signal });
35175
35605
 
35176
35606
  if (this.valueObject) {
35177
35607
  this.calendar.dateFrom = this.convertToWcValidTime(this.valueObject);
@@ -35369,6 +35799,41 @@ class AuroDatePicker extends AuroElement {
35369
35799
  return this.validity !== undefined && this.validity !== 'valid';
35370
35800
  }
35371
35801
 
35802
+ /**
35803
+ * Per-class dedup set used by `_warnInvalidLocale`. Static so the dedup
35804
+ * spans every datepicker instance on the page; lives on the class (not
35805
+ * at module scope) so it stays an encapsulated implementation detail of
35806
+ * this component and does not interfere with WCA's class-JSDoc
35807
+ * attachment.
35808
+ * @private
35809
+ */
35810
+ static _warnedInvalidLocales = new Set();
35811
+
35812
+ /**
35813
+ * Logs a one-time `console.debug` when an unsupported locale falls back to
35814
+ * en-US. Deduped by the offending tag so noisy re-renders that resurface
35815
+ * the same bad value stay quiet, but each new bad value still signals so
35816
+ * consumers can spot the typo or missing tag.
35817
+ * @private
35818
+ * @param {string|undefined} badLocale - The locale value that failed.
35819
+ * @returns {void}
35820
+ */
35821
+ _warnInvalidLocale(badLocale) {
35822
+ // Stringify without coalescing — `String(undefined)` / `String(null)`
35823
+ // surface the actual offending value in the log, instead of the
35824
+ // ambiguous `Locale ""` that `String(badLocale ?? '')` would produce.
35825
+ // Dedup still works correctly because each unique stringification
35826
+ // becomes its own Set entry.
35827
+ const key = String(badLocale);
35828
+ const seen = AuroDatePicker._warnedInvalidLocales;
35829
+ if (seen.has(key)) {
35830
+ return;
35831
+ }
35832
+ seen.add(key);
35833
+ // eslint-disable-next-line no-console
35834
+ 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".`);
35835
+ }
35836
+
35372
35837
  /**
35373
35838
  * Lifecycle method to check if the locale is valid.
35374
35839
  * @ignore
@@ -35379,10 +35844,15 @@ class AuroDatePicker extends AuroElement {
35379
35844
  if (changedProperties.has('locale')) {
35380
35845
  try {
35381
35846
  const supported = Intl.DateTimeFormat.supportedLocalesOf([this.locale], { localeMatcher: 'lookup' });
35382
- this._validLocale = supported.length > 0 ? this.locale : 'en-US';
35847
+ if (supported.length > 0) {
35848
+ this._validLocale = this.locale;
35849
+ } else {
35850
+ this._validLocale = 'en-US';
35851
+ this._warnInvalidLocale(this.locale);
35852
+ }
35383
35853
  } catch {
35384
- console.debug(`[AuroDatePicker] The locale "${this.locale}" is not valid. Falling back to "en-US".`); // eslint-disable-line no-console
35385
35854
  this._validLocale = 'en-US';
35855
+ this._warnInvalidLocale(this.locale);
35386
35856
  }
35387
35857
 
35388
35858
  const previousLocaleFormat = getDateFormatFromLocale$1(changedProperties.get('locale'));
@@ -35464,8 +35934,6 @@ class AuroDatePicker extends AuroElement {
35464
35934
  // Skip centralDate update when user clicked a cell in range mode
35465
35935
  // to prevent the displayed months from shifting
35466
35936
  this.centralDate = this.value;
35467
- //TODO: TEST THIS CHANGE
35468
- // this.calendarRenderUtil.updateCentralDate(this, this.value);
35469
35937
  }
35470
35938
 
35471
35939
  this.setHasValue();
@@ -35499,7 +35967,9 @@ class AuroDatePicker extends AuroElement {
35499
35967
  // update the calendar
35500
35968
  if (this.valueEndObject) {
35501
35969
  this.calendar.dateTo = this.convertToWcValidTime(this.valueEndObject);
35502
- this.calendarRenderUtil.updateCentralDate(this, this.valueEndObject);
35970
+ if (!this.wasCellClick) {
35971
+ this.calendarRenderUtil.updateCentralDate(this, this.valueEndObject);
35972
+ }
35503
35973
  } else {
35504
35974
  if (this.inputList[1].value !== this.valueEnd) {
35505
35975
  this.inputList[1].value = this.valueEnd || '';
@@ -35523,8 +35993,6 @@ class AuroDatePicker extends AuroElement {
35523
35993
  // Skip centralDate update when user clicked a cell in range mode
35524
35994
  // to prevent the displayed months from shifting
35525
35995
  this.centralDate = this.valueEnd;
35526
- // TODO: TEST THIS CHANGE
35527
- // this.calendarRenderUtil.updateCentralDate(this, this.formattedValueEnd);
35528
35996
  }
35529
35997
 
35530
35998
  this.validate();
@@ -35666,7 +36134,7 @@ class AuroDatePicker extends AuroElement {
35666
36134
  * @returns {void}
35667
36135
  */
35668
36136
  configureClickHandler() {
35669
- this.addEventListener('click', this.handleClick);
36137
+ this.addEventListener('click', this.handleClick, { signal: this._listenerAbortController.signal });
35670
36138
  }
35671
36139
 
35672
36140
  firstUpdated() {
@@ -35674,6 +36142,15 @@ class AuroDatePicker extends AuroElement {
35674
36142
  // Add the tag name as an attribute if it is different than the component name
35675
36143
  this.runtimeUtils.handleComponentTagRename(this, 'auro-datepicker');
35676
36144
 
36145
+ // If the element was disconnected before this first render finished,
36146
+ // disconnectedCallback's microtask already aborted the controller. The
36147
+ // connectedCallback reinit guard skips that case because `hasUpdated`
36148
+ // is still false. Mint a fresh controller here so configure* registers
36149
+ // listeners against a live signal.
36150
+ if (this._listenerAbortController.signal.aborted) {
36151
+ this._listenerAbortController = new AbortController();
36152
+ }
36153
+
35677
36154
  this.configureDropdown();
35678
36155
  this.configureInput();
35679
36156
  this.configureCalendar();
@@ -35685,9 +36162,36 @@ class AuroDatePicker extends AuroElement {
35685
36162
  connectedCallback() {
35686
36163
  super.connectedCallback();
35687
36164
 
36165
+ // True reconnect after `disconnectedCallback` aborted our controller:
36166
+ // the existing signal is dead, so listeners registered against it
36167
+ // would never fire. Create a fresh controller and re-run the
36168
+ // configure* wiring (each method is idempotent — it just re-caches
36169
+ // child refs and re-registers listeners against the new signal).
36170
+ // `hasUpdated` gates this so the *first* connect (which precedes
36171
+ // firstUpdated) still falls through to firstUpdated's initial wiring.
36172
+ if (this.hasUpdated && this._listenerAbortController.signal.aborted) {
36173
+ this._listenerAbortController = new AbortController();
36174
+ this.configureDropdown();
36175
+ this.configureInput();
36176
+ this.configureCalendar();
36177
+ this.configureDatepicker();
36178
+ this.configureClickHandler();
36179
+ }
36180
+
35688
36181
  this.locale = this.domHandler.getLocale(this);
35689
36182
  }
35690
36183
 
36184
+ disconnectedCallback() {
36185
+ super.disconnectedCallback();
36186
+ // Defer so that re-parenting (auro-drawer slotting it into a dialog,
36187
+ // for example) does not abort listeners we still need after reconnect.
36188
+ queueMicrotask(() => {
36189
+ if (!this.isConnected) {
36190
+ this._listenerAbortController.abort();
36191
+ }
36192
+ });
36193
+ }
36194
+
35691
36195
  // layout render methods
35692
36196
  // ------------------------------------
35693
36197
 
@@ -35894,6 +36398,7 @@ class AuroDatePicker extends AuroElement {
35894
36398
  }
35895
36399
  <span slot="ariaLabel.clear">${this.runtimeUtils.getSlotText(this, 'ariaLabel.input.clear') || i18n(this.lang, 'clearInput')}</span>
35896
36400
  <span slot="label"><slot name="fromLabel"></slot></span>
36401
+ <slot name="optionalFromLabel" slot="optionalLabel"> (optional)</slot>
35897
36402
  </${this.inputTag}>
35898
36403
  </div>
35899
36404
 
@@ -35938,6 +36443,7 @@ class AuroDatePicker extends AuroElement {
35938
36443
  }
35939
36444
  <span slot="ariaLabel.clear">${this.runtimeUtils.getSlotText(this, 'ariaLabel.input.clear') || this.runtimeUtils.getSlotText(this, 'ariaLabel.input.clear') || i18n(this.lang, 'clearInput')}</span>
35940
36445
  <span slot="label"><slot name="toLabel"></slot></span>
36446
+ <slot name="optionalToLabel" slot="optionalLabel"> (optional)</slot>
35941
36447
  </${this.inputTag}>
35942
36448
  </div>
35943
36449
  ` : undefined}