@aurodesignsystem-dev/auro-formkit 0.0.0-pr1510.3 → 0.0.0-pr1512.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/components/checkbox/demo/customize.js +22 -0
  2. package/components/checkbox/demo/customize.min.js +1 -1
  3. package/components/checkbox/demo/demo-support.js +1 -0
  4. package/components/checkbox/demo/getting-started.js +22 -0
  5. package/components/checkbox/demo/getting-started.min.js +1 -1
  6. package/components/checkbox/demo/index.js +8 -0
  7. package/components/checkbox/demo/index.min.js +1 -1
  8. package/components/checkbox/demo/styles.scss +1 -0
  9. package/components/checkbox/dist/index.js +1 -1
  10. package/components/checkbox/dist/registered.js +1 -1
  11. package/components/combobox/demo/customize.js +24 -0
  12. package/components/combobox/demo/customize.min.js +119 -96
  13. package/components/combobox/demo/demo-support.js +1 -0
  14. package/components/combobox/demo/getting-started.js +21 -0
  15. package/components/combobox/demo/getting-started.min.js +119 -96
  16. package/components/combobox/demo/index.js +23 -0
  17. package/components/combobox/demo/index.min.js +119 -96
  18. package/components/combobox/demo/styles.scss +1 -0
  19. package/components/combobox/dist/index.js +118 -95
  20. package/components/combobox/dist/registered.js +118 -95
  21. package/components/counter/demo/customize.js +21 -0
  22. package/components/counter/demo/customize.min.js +2 -2
  23. package/components/counter/demo/demo-support.js +1 -0
  24. package/components/counter/demo/index.js +21 -0
  25. package/components/counter/demo/index.min.js +2 -2
  26. package/components/counter/demo/styles.scss +1 -0
  27. package/components/counter/dist/index.js +2 -2
  28. package/components/counter/dist/registered.js +2 -2
  29. package/components/datepicker/demo/accessibility.md +1 -2
  30. package/components/datepicker/demo/api.md +62 -63
  31. package/components/datepicker/demo/customize.js +17 -0
  32. package/components/datepicker/demo/customize.md +1 -12
  33. package/components/datepicker/demo/customize.min.js +335 -702
  34. package/components/datepicker/demo/demo-support.js +1 -0
  35. package/components/datepicker/demo/index.js +23 -0
  36. package/components/datepicker/demo/index.min.js +335 -702
  37. package/components/datepicker/demo/styles.scss +1 -0
  38. package/components/datepicker/dist/index.js +335 -702
  39. package/components/datepicker/dist/registered.js +335 -702
  40. package/components/datepicker/dist/{auro-calendar-cell.d.ts → src/auro-calendar-cell.d.ts} +3 -14
  41. package/components/datepicker/dist/{auro-calendar.d.ts → src/auro-calendar.d.ts} +6 -90
  42. package/components/datepicker/dist/{auro-datepicker.d.ts → src/auro-datepicker.d.ts} +5 -78
  43. package/components/dropdown/demo/customize.js +9 -0
  44. package/components/dropdown/demo/customize.min.js +1 -1
  45. package/components/dropdown/demo/demo-support.js +1 -0
  46. package/components/dropdown/demo/getting-started.js +9 -0
  47. package/components/dropdown/demo/getting-started.min.js +1 -1
  48. package/components/dropdown/demo/index.js +16 -0
  49. package/components/dropdown/demo/index.min.js +1 -1
  50. package/components/dropdown/demo/styles.scss +1 -0
  51. package/components/dropdown/dist/index.js +1 -1
  52. package/components/dropdown/dist/registered.js +1 -1
  53. package/components/form/demo/customize.js +28 -0
  54. package/components/form/demo/customize.min.js +583 -904
  55. package/components/form/demo/demo-support.js +1 -0
  56. package/components/form/demo/getting-started.js +9 -0
  57. package/components/form/demo/getting-started.min.js +583 -904
  58. package/components/form/demo/index.js +5 -0
  59. package/components/form/demo/index.min.js +583 -904
  60. package/components/form/demo/registerDemoDeps.js +23 -0
  61. package/components/form/demo/registerDemoDeps.min.js +583 -904
  62. package/components/form/demo/styles.scss +1 -0
  63. package/components/input/demo/api.md +5 -5
  64. package/components/input/demo/customize.js +25 -0
  65. package/components/input/demo/customize.md +8 -8
  66. package/components/input/demo/customize.min.js +116 -93
  67. package/components/input/demo/demo-support.js +1 -0
  68. package/components/input/demo/getting-started.js +8 -0
  69. package/components/input/demo/getting-started.min.js +116 -93
  70. package/components/input/demo/index.js +8 -0
  71. package/components/input/demo/index.min.js +116 -93
  72. package/components/input/demo/styles.css +974 -0
  73. package/components/input/demo/styles.scss +1 -0
  74. package/components/input/dist/base-input.d.ts +33 -44
  75. package/components/input/dist/index.js +129 -94
  76. package/components/input/dist/registered.js +116 -93
  77. package/components/menu/demo/demo-support.js +1 -0
  78. package/components/menu/demo/index.js +25 -0
  79. package/components/menu/demo/styles.scss +1 -0
  80. package/components/radio/demo/customize.js +22 -0
  81. package/components/radio/demo/customize.min.js +1 -1
  82. package/components/radio/demo/demo-support.js +1 -0
  83. package/components/radio/demo/getting-started.js +24 -0
  84. package/components/radio/demo/getting-started.min.js +1 -1
  85. package/components/radio/demo/index.js +8 -0
  86. package/components/radio/demo/index.min.js +1 -1
  87. package/components/radio/demo/styles.scss +1 -0
  88. package/components/radio/dist/index.js +1 -1
  89. package/components/radio/dist/registered.js +1 -1
  90. package/components/select/demo/customize.js +11 -0
  91. package/components/select/demo/customize.min.js +2 -2
  92. package/components/select/demo/demo-support.js +1 -0
  93. package/components/select/demo/getting-started.js +26 -0
  94. package/components/select/demo/getting-started.min.js +2 -2
  95. package/components/select/demo/index.js +11 -0
  96. package/components/select/demo/index.min.js +2 -2
  97. package/components/select/demo/styles.scss +1 -0
  98. package/components/select/dist/index.js +2 -2
  99. package/components/select/dist/registered.js +2 -2
  100. package/custom-elements.json +2146 -2218
  101. package/package.json +2 -6
  102. package/components/datepicker/dist/blackoutUtils.d.ts +0 -43
  103. /package/components/datepicker/dist/{auro-calendar-month.d.ts → src/auro-calendar-month.d.ts} +0 -0
  104. /package/components/datepicker/dist/{buttonVersion.d.ts → src/buttonVersion.d.ts} +0 -0
  105. /package/components/datepicker/dist/{datepickerKeyboardStrategy.d.ts → src/datepickerKeyboardStrategy.d.ts} +0 -0
  106. /package/components/datepicker/dist/{iconVersion.d.ts → src/iconVersion.d.ts} +0 -0
  107. /package/components/datepicker/dist/{index.d.ts → src/index.d.ts} +0 -0
  108. /package/components/datepicker/dist/{popoverVersion.d.ts → src/popoverVersion.d.ts} +0 -0
  109. /package/components/datepicker/dist/{styles → src/styles}/classic/color-css.d.ts +0 -0
  110. /package/components/datepicker/dist/{styles → src/styles}/classic/style-css.d.ts +0 -0
  111. /package/components/datepicker/dist/{styles → src/styles}/color-calendar-css.d.ts +0 -0
  112. /package/components/datepicker/dist/{styles → src/styles}/color-cell-css.d.ts +0 -0
  113. /package/components/datepicker/dist/{styles → src/styles}/color-css.d.ts +0 -0
  114. /package/components/datepicker/dist/{styles → src/styles}/color-month-css.d.ts +0 -0
  115. /package/components/datepicker/dist/{styles → src/styles}/shapeSize-css.d.ts +0 -0
  116. /package/components/datepicker/dist/{styles → src/styles}/snowflake/color-css.d.ts +0 -0
  117. /package/components/datepicker/dist/{styles → src/styles}/snowflake/style-css.d.ts +0 -0
  118. /package/components/datepicker/dist/{styles → src/styles}/style-auro-calendar-cell-css.d.ts +0 -0
  119. /package/components/datepicker/dist/{styles → src/styles}/style-auro-calendar-css.d.ts +0 -0
  120. /package/components/datepicker/dist/{styles → src/styles}/style-auro-calendar-month-css.d.ts +0 -0
  121. /package/components/datepicker/dist/{styles → src/styles}/style-css.d.ts +0 -0
  122. /package/components/datepicker/dist/{styles → src/styles}/tokens-css.d.ts +0 -0
  123. /package/components/datepicker/dist/{utilities.d.ts → src/utilities.d.ts} +0 -0
  124. /package/components/datepicker/dist/{utilitiesCalendar.d.ts → src/utilitiesCalendar.d.ts} +0 -0
  125. /package/components/datepicker/dist/{utilitiesCalendarRender.d.ts → src/utilitiesCalendarRender.d.ts} +0 -0
  126. /package/components/datepicker/dist/{vendor → src/vendor}/wc-range-datepicker/day.d.ts +0 -0
  127. /package/components/datepicker/dist/{vendor → src/vendor}/wc-range-datepicker/range-datepicker-calendar.d.ts +0 -0
  128. /package/components/datepicker/dist/{vendor → src/vendor}/wc-range-datepicker/range-datepicker-cell.d.ts +0 -0
  129. /package/components/datepicker/dist/{vendor → src/vendor}/wc-range-datepicker/range-datepicker.d.ts +0 -0
@@ -5135,7 +5135,7 @@ function normalizeDates$3(context, ...dates) {
5135
5135
  * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))
5136
5136
  * //=> Tue Sep 02 2014 00:00:00
5137
5137
  */
5138
- function startOfDay$3(date, options) {
5138
+ function startOfDay$4(date, options) {
5139
5139
  const _date = toDate$3(date, options?.in);
5140
5140
  _date.setHours(0, 0, 0, 0);
5141
5141
  return _date;
@@ -5183,8 +5183,8 @@ function differenceInCalendarDays$3(laterDate, earlierDate, options) {
5183
5183
  earlierDate,
5184
5184
  );
5185
5185
 
5186
- const laterStartOfDay = startOfDay$3(laterDate_);
5187
- const earlierStartOfDay = startOfDay$3(earlierDate_);
5186
+ const laterStartOfDay = startOfDay$4(laterDate_);
5187
+ const earlierStartOfDay = startOfDay$4(earlierDate_);
5188
5188
 
5189
5189
  const laterTimestamp =
5190
5190
  +laterStartOfDay - getTimezoneOffsetInMilliseconds$3(laterStartOfDay);
@@ -10456,6 +10456,13 @@ let AuroInputUtilities$3 = class AuroInputUtilities {
10456
10456
  * @returns {string | undefined}
10457
10457
  */
10458
10458
  toFormattedValue(valueObject, format) {
10459
+ // Exposed publicly via `AuroInputUtil.toFormattedValue`, so a missing
10460
+ // `format` argument has to fail gracefully rather than throw on
10461
+ // `format.toLowerCase()`. Treat any falsy value (undefined, null, '')
10462
+ // as "no format → no display value".
10463
+ if (!format) {
10464
+ return undefined;
10465
+ }
10459
10466
  const normalizedFormat = format.toLowerCase();
10460
10467
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
10461
10468
 
@@ -10606,79 +10613,18 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
10606
10613
  constructor() {
10607
10614
  super();
10608
10615
 
10609
- this.appearance = "default";
10610
- this.disabled = false;
10611
- this.layout = 'classic';
10612
- this.locale = 'en-US';
10613
- this.max = undefined;
10614
- this._maxObject = undefined;
10615
- this.maxLength = undefined;
10616
- this.min = undefined;
10617
- this._minObject = undefined;
10618
- this.minLength = undefined;
10619
- this.required = false;
10620
- this.onDark = false;
10621
- this.setCustomValidityForType = undefined;
10622
- this.size = 'lg';
10623
- this.shape = 'classic';
10624
- this.value = undefined;
10625
- this._valueObject = undefined;
10626
-
10627
- this._initializePrivateDefaults();
10628
- }
10629
-
10630
- /**
10631
- * Internal Defaults.
10632
- * @private
10633
- * @returns {void}
10634
- */
10635
- _initializePrivateDefaults() {
10616
+ // Single-source initialization. Alphabetized so duplicate or stale
10617
+ // defaults are immediately obvious on a diff. Every field is assigned
10618
+ // exactly once here (previously the constructor + the old
10619
+ // `_initializePrivateDefaults` overlapped — both wrote ~14 of the same
10620
+ // fields and double-allocated `util` and `validation`, discarding the
10621
+ // first instance). `validation` is now allocated exactly once; `util`
10622
+ // is seeded here with an en-US default and then rebuilt in
10623
+ // `connectedCallback` once the consumer-resolved locale is available,
10624
+ // so a parent (datepicker/combobox) calling `validate()` synchronously
10625
+ // during its own update cycle sees a populated util instance.
10636
10626
  this.activeLabel = false;
10637
- this.appearance = "default";
10638
- this.icon = false;
10639
- this.disabled = false;
10640
- this.dvInputOnly = false;
10641
- this.hideLabelVisually = false;
10642
- this.max = undefined;
10643
- this.maxLength = undefined;
10644
- this.min = undefined;
10645
- this.minLength = undefined;
10646
- this.noValidate = false;
10647
- this.onDark = false;
10648
- this.required = false;
10649
- this.setCustomValidityForType = undefined;
10650
-
10651
- // Used for storing raw values returned from input mask.
10652
- this._rawMaskValue = undefined;
10653
-
10654
- /**
10655
- * @private
10656
- */
10657
- this.layout = 'classic';
10658
-
10659
- /**
10660
- * @private
10661
- */
10662
- this.shape = 'classic';
10663
-
10664
- /**
10665
- * @private
10666
- */
10667
- this.size = 'lg';
10668
-
10669
- this.touched = false;
10670
- this.util = new AuroInputUtilities$3({
10671
- locale: "en-US",
10672
- format: this.format
10673
- });
10674
- this.validation = new AuroFormValidation$7();
10675
- this.inputIconName = undefined;
10676
- this.showPassword = false;
10677
- this.validationCCLength = undefined;
10678
- this.hasValue = false;
10679
- this.label = 'Input label is undefined';
10680
-
10681
-
10627
+ /** @private */
10682
10628
  this.allowedInputTypes = [
10683
10629
  "text",
10684
10630
  "number",
@@ -10687,7 +10633,8 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
10687
10633
  "credit-card",
10688
10634
  "tel"
10689
10635
  ];
10690
- this.icon = false;
10636
+ this.appearance = "default";
10637
+ /** @private */
10691
10638
  this.dateFormatMap = {
10692
10639
  'mm/dd/yyyy': 'dateMMDDYYYY',
10693
10640
  'dd/mm/yyyy': 'dateDDMMYYYY',
@@ -10704,27 +10651,57 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
10704
10651
  'dd/mm': 'dateDDMM',
10705
10652
  'mm/dd': 'dateMMDD'
10706
10653
  };
10654
+ this.disabled = false;
10655
+ /** @private */
10707
10656
  this.domHandler = new DomHandler$3();
10708
10657
  this.dvInputOnly = false;
10709
10658
  this.hasValue = false;
10659
+ this.hideLabelVisually = false;
10660
+ this.icon = false;
10661
+ /** @private */
10710
10662
  this.inputIconName = undefined;
10663
+ /** @private */
10711
10664
  this.label = 'Input label is undefined';
10665
+ this.layout = 'classic';
10666
+ this.locale = 'en-US';
10667
+ this.max = undefined;
10668
+ this._maxObject = undefined;
10669
+ this.maxLength = undefined;
10670
+ this.min = undefined;
10671
+ this._minObject = undefined;
10672
+ this.minLength = undefined;
10712
10673
  this.noValidate = false;
10713
- this._rawMaskValue = undefined; // Used for storing raw values returned from input mask.
10674
+ this.onDark = false;
10675
+ // Raw values returned from the input mask before model normalization.
10676
+ this._rawMaskValue = undefined;
10677
+ this.required = false;
10678
+ this.setCustomValidityForType = undefined;
10679
+ // Credit Card is intentionally excluded — its mask manages the cursor
10680
+ // itself, and listing it here caused cursor placement issues in Safari.
10681
+ /** @private */
10714
10682
  this.setSelectionInputTypes = [
10715
10683
  "text",
10716
10684
  "password",
10717
10685
  "email"
10718
- ]; // Credit Card is not included as this caused cursor placement issues in Safari.
10686
+ ];
10687
+ this.shape = 'classic';
10688
+ /** @private */
10719
10689
  this.showPassword = false;
10690
+ this.size = 'lg';
10720
10691
  this.touched = false;
10692
+ /** @private */
10721
10693
  this.uniqueId = new UniqueId$2().create();
10694
+ /** @private */
10722
10695
  this.util = new AuroInputUtilities$3({
10723
10696
  locale: this.locale,
10724
10697
  format: this.format
10725
10698
  });
10699
+ /** @private */
10726
10700
  this.validation = new AuroFormValidation$7();
10701
+ /** @private */
10727
10702
  this.validationCCLength = undefined;
10703
+ this.value = undefined;
10704
+ this._valueObject = undefined;
10728
10705
  }
10729
10706
 
10730
10707
  // function to define props used within the scope of this component
@@ -11272,6 +11249,15 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11272
11249
 
11273
11250
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
11274
11251
 
11252
+ // Normalize the format token to lowercase so case-mixed values supplied
11253
+ // via attribute (e.g. `format="MM/DD/YYYY"`) hit the `dateFormatMap`
11254
+ // lookup inside `setCustomHelpTextMessage`. Without this, an uppercase
11255
+ // format silently misses the map and leaves `setCustomValidityForType`
11256
+ // unset.
11257
+ if (this.format) {
11258
+ this.format = this.format.toLowerCase();
11259
+ }
11260
+
11275
11261
  // use validity message override if declared when initializing the component
11276
11262
  if (this.hasAttribute('setCustomValidity')) {
11277
11263
  this.ValidityMessageOverride = this.setCustomValidity;
@@ -11705,6 +11691,38 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11705
11691
  this.touched = true;
11706
11692
  this.validation.validate(this);
11707
11693
  }
11694
+
11695
+ // Prevents cursor jumping in Safari. Setting `this.value` triggers a Lit
11696
+ // update that can re-render the input and reset the native cursor; we
11697
+ // capture the caret position before that update commits and restore it
11698
+ // via `setSelectionRange` once the update has flushed. Gated on
11699
+ // `setSelectionInputTypes` so credit-card (and other masked types whose
11700
+ // formatter manages the cursor itself) doesn't get a competing write.
11701
+ // Capture the caret position INSIDE the gate — reading `selectionStart`
11702
+ // on input types that don't support text selection (number, email in
11703
+ // some browsers) throws InvalidStateError, which would crash all input
11704
+ // handling. Wrap the read in try/catch belt-and-suspenders even though
11705
+ // the gated types currently support it, since the list is a public
11706
+ // property a consumer could mutate.
11707
+ if (this.setSelectionInputTypes.includes(this.type)) {
11708
+ let selectionStart;
11709
+ try {
11710
+ selectionStart = this.inputElement.selectionStart;
11711
+ } catch (error) { // eslint-disable-line no-unused-vars
11712
+ return;
11713
+ }
11714
+ if (typeof selectionStart !== 'number') {
11715
+ return;
11716
+ }
11717
+ this.updateComplete.then(() => {
11718
+ try {
11719
+ this.inputElement.setSelectionRange(selectionStart, selectionStart);
11720
+ } catch (error) { // eslint-disable-line no-unused-vars
11721
+ // Some input types (number/email in certain UAs) throw on
11722
+ // setSelectionRange; swallow and let the native cursor stand.
11723
+ }
11724
+ });
11725
+ }
11708
11726
  }
11709
11727
 
11710
11728
  /**
@@ -12331,7 +12349,7 @@ let AuroHelpText$8 = class AuroHelpText extends i$2 {
12331
12349
  }
12332
12350
  };
12333
12351
 
12334
- var formkitVersion$8 = '202606252324';
12352
+ var formkitVersion$8 = '202606252337';
12335
12353
 
12336
12354
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
12337
12355
  // See LICENSE in the project root for license information.
@@ -12834,6 +12852,7 @@ let AuroInput$2 = class AuroInput extends BaseInput$2 {
12834
12852
  <${this.buttonTag}
12835
12853
  @click="${this.handleClickShowPassword}"
12836
12854
  appearance="${this.onDark ? 'inverse' : this.appearance}"
12855
+ aria-pressed="${this.showPassword ? 'true' : 'false'}"
12837
12856
  class="notificationBtn passwordBtn"
12838
12857
  shape="circle"
12839
12858
  size="sm"
@@ -12907,25 +12926,29 @@ let AuroInput$2 = class AuroInput extends BaseInput$2 {
12907
12926
  * @returns {html} - Returns HTML for the help text and error message.
12908
12927
  */
12909
12928
  renderHtmlHelpText() {
12929
+ // Single `<p>` with stable identity across validity transitions —
12930
+ // previously two distinct templates (valid vs invalid) caused Lit to
12931
+ // replace the node entirely on a flip, and VoiceOver wouldn't
12932
+ // re-announce because the live-region element it was watching had been
12933
+ // removed and a new one inserted. Keeping one node means the `role`,
12934
+ // `aria-live`, and text content all change in-place, which AT does
12935
+ // observe and announce.
12936
+ const isError = this.validity && this.validity !== 'valid';
12910
12937
  return u$d`
12911
- ${!this.validity || this.validity === undefined || this.validity === 'valid'
12912
- ? u$d`
12913
- <${this.helpTextTag}
12914
- appearance="${this.onDark ? 'inverse' : this.appearance}">
12915
- <p id="${this.uniqueId}" part="helpText">
12916
- <slot name="helpText">${this.getHelpText()}</slot>
12917
- </p>
12918
- </${this.helpTextTag}>
12919
- `
12920
- : u$d`
12921
- <${this.helpTextTag} error
12922
- appearance="${this.onDark ? 'inverse' : this.appearance}">
12923
- <p id="${this.uniqueId}" role="alert" aria-live="assertive" part="helpText">
12924
- ${this.errorMessage}
12925
- </p>
12926
- </${this.helpTextTag}>
12927
- `
12928
- }
12938
+ <${this.helpTextTag}
12939
+ appearance="${this.onDark ? 'inverse' : this.appearance}"
12940
+ ?error=${isError}>
12941
+ <p
12942
+ id="${this.uniqueId}"
12943
+ part="helpText"
12944
+ role="${o$4(isError ? 'alert' : undefined)}"
12945
+ aria-live="${o$4(isError ? 'assertive' : undefined)}">
12946
+ ${isError
12947
+ ? this.errorMessage
12948
+ : u$d`<slot name="helpText">${this.getHelpText()}</slot>`
12949
+ }
12950
+ </p>
12951
+ </${this.helpTextTag}>
12929
12952
  `;
12930
12953
  }
12931
12954
 
@@ -14415,7 +14438,7 @@ function normalizeDates$1(context, ...dates) {
14415
14438
  * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))
14416
14439
  * //=> Tue Sep 02 2014 00:00:00
14417
14440
  */
14418
- function startOfDay$1(date, options) {
14441
+ function startOfDay$2(date, options) {
14419
14442
  const _date = toDate$1(date, options?.in);
14420
14443
  _date.setHours(0, 0, 0, 0);
14421
14444
  return _date;
@@ -14463,8 +14486,8 @@ function differenceInCalendarDays$1(laterDate, earlierDate, options) {
14463
14486
  earlierDate,
14464
14487
  );
14465
14488
 
14466
- const laterStartOfDay = startOfDay$1(laterDate_);
14467
- const earlierStartOfDay = startOfDay$1(earlierDate_);
14489
+ const laterStartOfDay = startOfDay$2(laterDate_);
14490
+ const earlierStartOfDay = startOfDay$2(earlierDate_);
14468
14491
 
14469
14492
  const laterTimestamp =
14470
14493
  +laterStartOfDay - getTimezoneOffsetInMilliseconds$1(laterStartOfDay);
@@ -23566,6 +23589,13 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
23566
23589
  * @returns {string | undefined}
23567
23590
  */
23568
23591
  toFormattedValue(valueObject, format) {
23592
+ // Exposed publicly via `AuroInputUtil.toFormattedValue`, so a missing
23593
+ // `format` argument has to fail gracefully rather than throw on
23594
+ // `format.toLowerCase()`. Treat any falsy value (undefined, null, '')
23595
+ // as "no format → no display value".
23596
+ if (!format) {
23597
+ return undefined;
23598
+ }
23569
23599
  const normalizedFormat = format.toLowerCase();
23570
23600
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
23571
23601
 
@@ -23921,8 +23951,8 @@ class RangeDatepickerCell extends i$2 {
23921
23951
  const parsedDateFrom = parseInt(dateFrom, 10);
23922
23952
  const parsedDateTo = parseInt(dateTo, 10);
23923
23953
  if (day) {
23924
- if (getTime(startOfDay$1(parsedDateTo * 1000)) / 1000 === day.date ||
23925
- getTime(startOfDay$1(parsedDateFrom * 1000)) / 1000 === day.date) {
23954
+ if (getTime(startOfDay$2(parsedDateTo * 1000)) / 1000 === day.date ||
23955
+ getTime(startOfDay$2(parsedDateFrom * 1000)) / 1000 === day.date) {
23926
23956
  this.selected = true;
23927
23957
  }
23928
23958
  if (((hoveredDate === day.date || day.date < hoveredDate) &&
@@ -24110,7 +24140,7 @@ class RangeDatepickerCalendar extends i$2 {
24110
24140
  this.dayNamesOfTheWeek = [];
24111
24141
  this.daysOfMonth = [];
24112
24142
  this._locale = null;
24113
- this.currentDate = parseInt(format$1(startOfDay$1(Date.now()), 't'), 10);
24143
+ this.currentDate = parseInt(format$1(startOfDay$2(Date.now()), 't'), 10);
24114
24144
  this.localeChanged();
24115
24145
  this.yearAndMonthChanged(this.year, this.month);
24116
24146
  }
@@ -24584,7 +24614,7 @@ __decorate([n$4({ type: Array })], RangeDatepickerCalendar.prototype, "dayNamesO
24584
24614
  __decorate([n$4({ type: Array })], RangeDatepickerCalendar.prototype, "daysOfMonth", void 0);
24585
24615
  AuroLibraryRuntimeUtils$5$1.prototype.registerComponent('wc-range-datepicker-calendar', RangeDatepickerCalendar);
24586
24616
 
24587
- var styleCss$5$2 = i$4`.body-default{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-emphasized-font-size, 1rem);line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-font-size, 0.875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-font-size, 0.75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-font-size, 0.625rem);line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);line-height:var(--wcss-body-2xs-emphasized-line-height, 0.875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-2xl-weight, 300);line-height:var(--wcss-display-2xl-line-height, 1.3);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));letter-spacing:var(--wcss-display-2xl-letter-spacing, 0)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xl-weight, 300);line-height:var(--wcss-display-xl-line-height, 1.3);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));letter-spacing:var(--wcss-display-xl-letter-spacing, 0)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-lg-weight, 300);line-height:var(--wcss-display-lg-line-height, 1.3);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));letter-spacing:var(--wcss-display-lg-letter-spacing, 0)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-md-weight, 300);line-height:var(--wcss-display-md-line-height, 1.3);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));letter-spacing:var(--wcss-display-md-letter-spacing, 0)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-sm-weight, 300);line-height:var(--wcss-display-sm-line-height, 1.3);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));letter-spacing:var(--wcss-display-sm-letter-spacing, 0)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xs-weight, 300);line-height:var(--wcss-display-xs-line-height, 1.3);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));letter-spacing:var(--wcss-display-xs-letter-spacing, 0)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xl-weight, 300);line-height:var(--wcss-heading-xl-line-height, 1.3);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));letter-spacing:var(--wcss-heading-xl-letter-spacing, 0)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-lg-weight, 300);line-height:var(--wcss-heading-lg-line-height, 1.3);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));letter-spacing:var(--wcss-heading-lg-letter-spacing, 0)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-md-weight, 300);line-height:var(--wcss-heading-md-line-height, 1.3);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));letter-spacing:var(--wcss-heading-md-letter-spacing, 0)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-sm-weight, 300);line-height:var(--wcss-heading-sm-line-height, 1.3);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));letter-spacing:var(--wcss-heading-sm-letter-spacing, 0)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xs-weight, 300);line-height:var(--wcss-heading-xs-line-height, 1.3);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));letter-spacing:var(--wcss-heading-xs-letter-spacing, 0)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-2xs-weight, 300);line-height:var(--wcss-heading-2xs-line-height, 1.3);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xl-weight, 450);line-height:var(--wcss-accent-2xl-line-height, 1);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xl-weight, 450);line-height:var(--wcss-accent-xl-line-height, 1.3);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-lg-weight, 450);line-height:var(--wcss-accent-lg-line-height, 1.3);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-md-weight, 500);line-height:var(--wcss-accent-md-line-height, 1.3);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);text-transform:uppercase}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-sm-weight, 500);line-height:var(--wcss-accent-sm-line-height, 1.3);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xs-weight, 500);line-height:var(--wcss-accent-xs-line-height, 1.3);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);text-transform:uppercase}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xs-weight, 450);line-height:var(--wcss-accent-2xs-line-height, 1.3);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);text-transform:uppercase}@media screen and (max-width: 576px){:host{display:flex;justify-content:center}}.day{position:relative;width:48px;height:56px;padding:0;border-width:2px;border-style:solid;border-radius:10px;cursor:pointer;user-select:none}.day:focus-visible{outline:none;background-color:unset}.day.activeCell{outline-width:2px;outline-style:solid;outline-offset:-4px}.day.disabled{cursor:default !important;pointer-events:none}.day.blackout{cursor:pointer}.day.reference:after{position:absolute;top:-2px;left:-2px;display:block;width:calc(100% + 2px);height:calc(100% + 2px);box-sizing:content-box;border-radius:10px;border-style:solid;border-width:1px;content:""}.day.inRange::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:""}.day.rangeDepartDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:10px 0 0 10px;overflow:hidden}.day.rangeReturnDate::before,.day.lastHoveredDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:0 10px 10px 0;overflow:hidden}.day.rangeDepartDate.lastHoveredDate::before{border-radius:10px}.day.firstDayOfMonth::before{border-radius:10px 0 0 10px;overflow:hidden}.day.lastDayOfMonth::before{border-radius:0 10px 10px 0;overflow:hidden}.buttonWrapper{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}.dateSlot{display:block}::slotted([slot^=date_]){width:100%;white-space:nowrap}::slotted(auro-icon){max-height:24px;max-width:24px}:host([renderForDateSlot]) .buttonWrapper{position:relative;width:100%;height:100%}:host([renderForDateSlot]) .currentDayMarker{position:relative}`;
24617
+ var styleCss$5$2 = i$4`.body-default{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-emphasized-font-size, 1rem);line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-font-size, 0.875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-font-size, 0.75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-font-size, 0.625rem);line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);line-height:var(--wcss-body-2xs-emphasized-line-height, 0.875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-2xl-weight, 300);line-height:var(--wcss-display-2xl-line-height, 1.3);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));letter-spacing:var(--wcss-display-2xl-letter-spacing, 0)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xl-weight, 300);line-height:var(--wcss-display-xl-line-height, 1.3);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));letter-spacing:var(--wcss-display-xl-letter-spacing, 0)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-lg-weight, 300);line-height:var(--wcss-display-lg-line-height, 1.3);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));letter-spacing:var(--wcss-display-lg-letter-spacing, 0)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-md-weight, 300);line-height:var(--wcss-display-md-line-height, 1.3);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));letter-spacing:var(--wcss-display-md-letter-spacing, 0)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-sm-weight, 300);line-height:var(--wcss-display-sm-line-height, 1.3);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));letter-spacing:var(--wcss-display-sm-letter-spacing, 0)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xs-weight, 300);line-height:var(--wcss-display-xs-line-height, 1.3);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));letter-spacing:var(--wcss-display-xs-letter-spacing, 0)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xl-weight, 300);line-height:var(--wcss-heading-xl-line-height, 1.3);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));letter-spacing:var(--wcss-heading-xl-letter-spacing, 0)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-lg-weight, 300);line-height:var(--wcss-heading-lg-line-height, 1.3);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));letter-spacing:var(--wcss-heading-lg-letter-spacing, 0)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-md-weight, 300);line-height:var(--wcss-heading-md-line-height, 1.3);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));letter-spacing:var(--wcss-heading-md-letter-spacing, 0)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-sm-weight, 300);line-height:var(--wcss-heading-sm-line-height, 1.3);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));letter-spacing:var(--wcss-heading-sm-letter-spacing, 0)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xs-weight, 300);line-height:var(--wcss-heading-xs-line-height, 1.3);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));letter-spacing:var(--wcss-heading-xs-letter-spacing, 0)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-2xs-weight, 300);line-height:var(--wcss-heading-2xs-line-height, 1.3);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xl-weight, 450);line-height:var(--wcss-accent-2xl-line-height, 1);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xl-weight, 450);line-height:var(--wcss-accent-xl-line-height, 1.3);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-lg-weight, 450);line-height:var(--wcss-accent-lg-line-height, 1.3);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-md-weight, 500);line-height:var(--wcss-accent-md-line-height, 1.3);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);text-transform:uppercase}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-sm-weight, 500);line-height:var(--wcss-accent-sm-line-height, 1.3);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xs-weight, 500);line-height:var(--wcss-accent-xs-line-height, 1.3);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);text-transform:uppercase}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xs-weight, 450);line-height:var(--wcss-accent-2xs-line-height, 1.3);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);text-transform:uppercase}@media screen and (max-width: 576px){:host{display:flex;justify-content:center}}.day{position:relative;width:48px;height:56px;padding:0;border-width:2px;border-style:solid;border-radius:10px;cursor:pointer;user-select:none}.day:focus-visible{outline:none;background-color:unset}.day.activeCell{outline-width:2px;outline-style:solid;outline-offset:-4px}.day.disabled{cursor:default !important;pointer-events:none}.day.blackout{cursor:pointer}.day.reference:after{position:absolute;top:-2px;left:-2px;display:block;width:calc(100% + 2px);height:calc(100% + 2px);box-sizing:content-box;border-radius:10px;border-style:solid;border-width:1px;content:""}.day.inRange::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:""}.day.rangeDepartDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:10px 0 0 10px;overflow:hidden}.day.rangeReturnDate::before,.day.lastHoveredDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:0 10px 10px 0;overflow:hidden}.day.firstDayOfMonth::before{border-radius:10px 0 0 10px;overflow:hidden}.day.lastDayOfMonth::before{border-radius:0 10px 10px 0;overflow:hidden}.buttonWrapper{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}.dateSlot{display:block}::slotted([slot^=date_]){width:100%;white-space:nowrap}::slotted(auro-icon){max-height:24px;max-width:24px}:host([renderForDateSlot]) .buttonWrapper{position:relative;width:100%;height:100%}:host([renderForDateSlot]) .currentDayMarker{position:relative}`;
24588
24618
 
24589
24619
  var colorCss$5$2 = i$4`:host ::slotted([slot^=date_]){color:var(--ds-auro-calendar-cell-price-text-color)}:host ::slotted([slot^=date_][highlight]){--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-status-success, #447a1f)}:host .day{border-color:var(--ds-auro-calendar-cell-border-color);background-color:var(--ds-auro-calendar-cell-container-color);color:var(--ds-auro-calendar-cell-text-color)}:host .day.activeCell:not(.selected){--ds-auro-calendar-cell-container-color: var(--ds-auro-calendar-cell-in-range-color);border-color:var(--ds-advanced-color-state-selected);outline-color:var(--ds-auro-calendar-cell-container-color)}:host .day.selected{--ds-auro-calendar-cell-container-color: var(--ds-advanced-color-state-selected, #01426a);--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-inverse, #ffffff);--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host .day.selected ::slotted([slot^=date_][highlight]){--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-status-success-subtle, #d6eac7)}:host .day.selected:hover{--ds-auro-calendar-cell-container-color: var(--ds-advanced-color-state-selected-hover, #00274a);--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host .day.reference:after{border-color:var(--ds-basic-color-border-default, #959595);box-shadow:inset 0 0 0 2px var(--ds-basic-color-surface-default, #ffffff)}:host .day.reference:hover::after{box-shadow:inset 0 0 0 2px var(--ds-advanced-color-shared-background-muted, #f7f7f7)}:host .day:hover{--ds-auro-calendar-cell-container-color: var(--ds-advanced-color-state-background-hover, #f2f2f2);--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-default, #2a2a2a)}:host .day.disabled{--ds-auro-calendar-cell-container-color: transparent;--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0);--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0)}:host .day.blackout{--ds-auro-calendar-cell-container-color: transparent;--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0);--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0)}:host .day.inRange:before,:host .day.rangeDepartDate:before,:host .day.rangeReturnDate:before,:host .day.lastHoveredDate:before{background-color:var(--ds-auro-calendar-cell-in-range-color)}:host .day.sameDateTrip:before{--ds-auro-calendar-cell-in-range-color: transparent}`;
24590
24620
 
@@ -24609,104 +24639,14 @@ class s{registerComponent(e,t){customElements.get(e)||customElements.define(e,cl
24609
24639
 
24610
24640
  var popoverVersion = '6.0.1';
24611
24641
 
24612
- /**
24613
- * Single source of truth for parsing and matching blackout dates across the
24614
- * datepicker. Both `auro-calendar` (memoized Set + `isDateBlackout`) and the
24615
- * pre-`firstUpdated` fallback inside `auro-calendar-cell` route through these
24616
- * helpers so the YYYY-MM-DD → seconds conversion and the merge-with-legacy
24617
- * `disabledDays` rules are defined exactly once.
24618
- */
24619
-
24620
- /**
24621
- * Converts a `YYYY-MM-DD` ISO date string to a Unix timestamp (seconds)
24622
- * representing local midnight on that calendar day. Returns `null` for
24623
- * inputs that don't parse to a finite timestamp.
24624
- *
24625
- * Uses the `new Date(year, monthIndex, day)` constructor (NOT
24626
- * `new Date(isoStr)`) so the result is local-midnight rather than UTC
24627
- * midnight — required to keep the calendar grid aligned with the user's
24628
- * local calendar day in negative-offset timezones.
24629
- *
24630
- * @param {string} isoStr - Date string in `YYYY-MM-DD` format.
24631
- * @returns {number|null} Local-midnight Unix timestamp (seconds), or null.
24632
- */
24633
- function parseIsoToTimestamp(isoStr) {
24634
- if (typeof isoStr !== 'string') {
24635
- return null;
24636
- }
24637
- const parts = isoStr.split('-');
24638
- if (parts.length !== 3) {
24639
- return null;
24640
- }
24641
- const year = parseInt(parts[0], 10);
24642
- const month = parseInt(parts[1], 10);
24643
- const day = parseInt(parts[2], 10);
24644
- if (!Number.isFinite(year) || !Number.isFinite(month) || !Number.isFinite(day)) {
24645
- return null;
24646
- }
24647
- // Reject overflow values like "2024-13-40" — JS `new Date(year, month, day)`
24648
- // silently normalizes those to a different calendar day, which would
24649
- // disable the wrong date if we let the result through.
24650
- if (month < 1 || month > 12 || day < 1 || day > 31) {
24651
- return null;
24652
- }
24653
- const date = new Date(year, month - 1, day);
24654
- // Guard the residual case where JS still rolls a value (e.g. Feb 30 → Mar 2).
24655
- // After construction, getFullYear/getMonth/getDate should match the inputs.
24656
- if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {
24657
- return null;
24658
- }
24659
- const ts = Math.floor(date.getTime() / 1000);
24660
- return Number.isFinite(ts) ? ts : null;
24661
- }
24662
-
24663
- /**
24664
- * Builds a `Set<number>` of seconds-since-epoch timestamps covering both the
24665
- * legacy `disabledDays` (already-numeric) array and the ISO `blackoutDates`
24666
- * array. Use this for O(1) membership checks in hot paths.
24667
- *
24668
- * @param {Array<string|number>|undefined} disabledDays - Legacy timestamp array.
24669
- * @param {Array<string>|undefined} blackoutDates - ISO `YYYY-MM-DD` array.
24670
- * @returns {Set<number>}
24671
- */
24672
- function buildBlackoutSet(disabledDays, blackoutDates) {
24673
- const set = new Set();
24674
- if (Array.isArray(disabledDays)) {
24675
- for (const day of disabledDays) {
24676
- const ts = parseInt(day, 10);
24677
- if (Number.isFinite(ts)) {
24678
- set.add(ts);
24679
- }
24680
- }
24681
- }
24682
- if (Array.isArray(blackoutDates)) {
24683
- for (const isoStr of blackoutDates) {
24684
- const ts = parseIsoToTimestamp(isoStr);
24685
- if (ts !== null) {
24686
- set.add(ts);
24687
- }
24688
- }
24689
- }
24690
- return set;
24691
- }
24692
-
24693
- /**
24694
- * One-shot membership test for a single timestamp against both blackout
24695
- * sources. Allocates a Set on each call; only use this in cold paths
24696
- * (e.g. the pre-`firstUpdated` cell fallback). Hot paths should hold the
24697
- * Set returned from `buildBlackoutSet` and `.has(ts)` directly.
24698
- *
24699
- * @param {number} dateTs - Unix timestamp (seconds) to test.
24700
- * @param {Array<string|number>|undefined} disabledDays - Legacy timestamp array.
24701
- * @param {Array<string>|undefined} blackoutDates - ISO `YYYY-MM-DD` array.
24702
- * @returns {boolean}
24703
- */
24704
- function isBlackoutTimestamp(dateTs, disabledDays, blackoutDates) {
24705
- return buildBlackoutSet(disabledDays, blackoutDates).has(dateTs);
24706
- }
24707
-
24708
24642
  /* eslint-disable curly, max-lines, no-underscore-dangle, no-magic-numbers, no-underscore-dangle, max-params, no-extra-parens, arrow-parens, max-lines, line-comment-position, no-inline-comments, lit/binding-positions, lit/no-invalid-html */
24709
24643
 
24644
+ const startOfDay$1 = (ms) => {
24645
+ const date = new Date(ms);
24646
+ date.setHours(0, 0, 0, 0);
24647
+ return date.getTime();
24648
+ };
24649
+
24710
24650
  class AuroCalendarCell extends i$2 {
24711
24651
  constructor() {
24712
24652
  super();
@@ -24753,14 +24693,6 @@ class AuroCalendarCell extends i$2 {
24753
24693
  type: Boolean,
24754
24694
  reflect: true
24755
24695
  },
24756
- /**
24757
- * @deprecated Propagated from the legacy `auro-calendar.disabledDays`
24758
- * Unix-timestamp array. The cell honors it for backward compatibility
24759
- * (see the divergence-check fallback inside `isBlackout`), but
24760
- * consumers should migrate to `auro-datepicker.blackoutDates`
24761
- * (YYYY-MM-DD ISO strings). The calendar emits a one-time
24762
- * deprecation warning the first time a non-empty value is observed.
24763
- */
24764
24696
  disabledDays: { type: Array },
24765
24697
  isCurrentDate: { type: Boolean },
24766
24698
  locale: { type: String },
@@ -24806,8 +24738,8 @@ class AuroCalendarCell extends i$2 {
24806
24738
  const parsedDateTo = parseInt(dateTo, 10);
24807
24739
 
24808
24740
  if (day) {
24809
- const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
24810
- const returnTimestamp = new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000;
24741
+ const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
24742
+ const returnTimestamp = startOfDay$1(parsedDateTo * 1000) / 1000;
24811
24743
 
24812
24744
  if (day.date === departTimestamp || day.date === returnTimestamp) {
24813
24745
  this.selected = true;
@@ -24891,33 +24823,27 @@ class AuroCalendarCell extends i$2 {
24891
24823
  return false;
24892
24824
  }
24893
24825
 
24894
- // Delegate to the calendar's memoized blackout Set for O(1) lookup
24895
- // (instead of rescanning disabledDays + blackoutDates per render). The
24896
- // Set is rebuilt only when either source array reference changes — see
24897
- // auro-calendar.js#_getBlackoutSet.
24898
- if (this.calendar && typeof this.calendar._getBlackoutSet === 'function') {
24899
- if (this.calendar._getBlackoutSet().has(this.day.date)) {
24826
+ // Check against disabledDays timestamps (legacy path)
24827
+ if (Array.isArray(this.disabledDays) && this.disabledDays.length > 0 &&
24828
+ (this.disabledDays.findIndex(dd => parseInt(dd, 10) === this.day.date) !== -1)) {
24829
+ return true;
24830
+ }
24831
+
24832
+ // Check against blackoutDates (ISO format YYYY-MM-DD) on the datepicker
24833
+ const blackoutDates = this.datepicker?.blackoutDates;
24834
+
24835
+ if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
24836
+ const date = new Date(this.day.date * 1000);
24837
+ const yyyy = date.getFullYear();
24838
+ const mm = String(date.getMonth() + 1).padStart(2, '0');
24839
+ const dd = String(date.getDate()).padStart(2, '0');
24840
+ const cellDate = `${yyyy}-${mm}-${dd}`;
24841
+ if (blackoutDates.includes(cellDate)) {
24900
24842
  return true;
24901
24843
  }
24902
- // If the cell's local disabledDays diverged from the calendar's (a
24903
- // consumer or test mutated cell.disabledDays directly), the Set does
24904
- // not reflect that addition — fall through to the per-cell scan only
24905
- // when the reference no longer matches. Production data flow keeps
24906
- // these identical, so this branch stays cold. Guarded with
24907
- // Array.isArray to match `_getBlackoutSet`'s contract: non-array
24908
- // values are treated as empty rather than crashing on `.findIndex`.
24909
- if (Array.isArray(this.disabledDays) && this.disabledDays !== this.calendar.disabledDays && this.disabledDays.length > 0) {
24910
- if (this.disabledDays.findIndex((dd) => parseInt(dd, 10) === this.day.date) !== -1) {
24911
- return true;
24912
- }
24913
- }
24914
- return false;
24915
24844
  }
24916
24845
 
24917
- // Pre-firstUpdated fallback — the cell may render once before the
24918
- // ancestor calendar is wired up. Routes through the shared
24919
- // blackoutUtils helper so the parsing rules stay in one place.
24920
- return isBlackoutTimestamp(this.day.date, this.disabledDays, this.datepicker?.blackoutDates);
24846
+ return false;
24921
24847
  }
24922
24848
 
24923
24849
  /**
@@ -25023,12 +24949,12 @@ class AuroCalendarCell extends i$2 {
25023
24949
  const parsedDateFrom = Number.parseInt(this.dateFrom, 10);
25024
24950
  if (!Number.isFinite(parsedDateFrom)) return null;
25025
24951
 
25026
- const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
24952
+ const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
25027
24953
  const dayDate = this.day.date;
25028
24954
 
25029
24955
  const parsedDateTo = Number.parseInt(this.dateTo, 10);
25030
24956
  const hasDateTo = Number.isFinite(parsedDateTo);
25031
- const returnTimestamp = hasDateTo ? new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000 : null;
24957
+ const returnTimestamp = hasDateTo ? startOfDay$1(parsedDateTo * 1000) / 1000 : null;
25032
24958
 
25033
24959
  if (dayDate === departTimestamp) return this.datepicker.rangeLabelStart || 'range start';
25034
24960
 
@@ -25038,9 +24964,7 @@ class AuroCalendarCell extends i$2 {
25038
24964
 
25039
24965
  if (hasDateTo && dayDate > departTimestamp && dayDate < returnTimestamp) return this.datepicker.rangeLabelInRange || 'in range';
25040
24966
 
25041
- if (!hasDateTo && dayDate > departTimestamp) return this.datepicker.rangeLabelEndPreview || 'previewing range end';
25042
-
25043
- // After end date when both dateFrom and dateTo are set.
24967
+ // After start date, no end date yet, or after end date
25044
24968
  return this.datepicker.rangeLabelAfterRange || 'after range';
25045
24969
  }
25046
24970
 
@@ -25053,7 +24977,7 @@ class AuroCalendarCell extends i$2 {
25053
24977
  */
25054
24978
  isDepartDate(day, dateFrom) {
25055
24979
  const parsedDateFrom = parseInt(dateFrom, 10);
25056
- const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
24980
+ const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
25057
24981
 
25058
24982
  return this.selected && day.date === departTimestamp;
25059
24983
  }
@@ -25068,7 +24992,7 @@ class AuroCalendarCell extends i$2 {
25068
24992
  */
25069
24993
  isReturnDate(day, dateFrom, dateTo) {
25070
24994
  const parsedDateTo = parseInt(dateTo, 10);
25071
- const returnTimestamp = new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000;
24995
+ const returnTimestamp = startOfDay$1(parsedDateTo * 1000) / 1000;
25072
24996
 
25073
24997
  return this.selected && day.date === returnTimestamp && dateFrom;
25074
24998
  }
@@ -25232,7 +25156,6 @@ class AuroCalendarCell extends i$2 {
25232
25156
  setTimeout(() => this.firstUpdated(), 0);
25233
25157
  return;
25234
25158
  }
25235
- this.calendar = calendar;
25236
25159
  this.datepicker = calendar.datepicker;
25237
25160
  this._slotContentHandler = () => {
25238
25161
  this.handleSlotContent();
@@ -25290,13 +25213,12 @@ class AuroCalendarCell extends i$2 {
25290
25213
  this._cachedButton = this.shadowRoot.querySelector('button.day');
25291
25214
  });
25292
25215
 
25293
- // Keep the host's gridcell aria attributes in sync with the day data.
25216
+ // Update host-level aria attributes for ariaActiveDescendantElement.
25294
25217
  this.updateHostAria();
25295
25218
  }
25296
25219
 
25297
25220
  // Update host aria when selection changes (aria-selected, range labels)
25298
- // or when isCurrentDate flips (aria-current).
25299
- if (properties.has('dateFrom') || properties.has('dateTo') || properties.has('selected') || properties.has('isCurrentDate')) {
25221
+ if (properties.has('dateFrom') || properties.has('dateTo') || properties.has('selected')) {
25300
25222
  this.updateHostAria();
25301
25223
  }
25302
25224
 
@@ -25307,8 +25229,8 @@ class AuroCalendarCell extends i$2 {
25307
25229
  }
25308
25230
 
25309
25231
  /**
25310
- * Sets host-level ARIA so each cell exposes its date, selection state,
25311
- * and blackout status to assistive tech browsing the month grid.
25232
+ * Updates ARIA attributes on the host element so that
25233
+ * ariaActiveDescendantElement can expose cell info to the SR.
25312
25234
  * @private
25313
25235
  * @returns {void}
25314
25236
  */
@@ -25317,27 +25239,16 @@ class AuroCalendarCell extends i$2 {
25317
25239
 
25318
25240
  const outOfRange = this.isOutOfRange(this.day, this.min, this.max);
25319
25241
  if (outOfRange) {
25320
- // Strip every aria attribute the in-range branch may have set on a
25321
- // previous render — if a cell flips from in-range to out-of-range
25322
- // (calendar shifts months, minDate/maxDate change, etc.).
25323
25242
  this.removeAttribute('role');
25324
25243
  this.removeAttribute('aria-label');
25325
- this.removeAttribute('aria-current');
25326
- this.removeAttribute('aria-selected');
25327
- this.removeAttribute('aria-disabled');
25328
25244
  return;
25329
25245
  }
25330
25246
 
25247
+ // The host acts as the gridcell for ariaActiveDescendantElement.
25331
25248
  this.setAttribute('role', 'gridcell');
25332
25249
  this.setAttribute('aria-label', this.getAriaLabel());
25333
25250
  this.setAttribute('aria-selected', this.selected ? 'true' : 'false');
25334
25251
 
25335
- if (this.isCurrentDate) {
25336
- this.setAttribute('aria-current', 'date');
25337
- } else {
25338
- this.removeAttribute('aria-current');
25339
- }
25340
-
25341
25252
  if (this.isBlackout()) {
25342
25253
  this.setAttribute('aria-disabled', 'true');
25343
25254
  } else {
@@ -25352,7 +25263,7 @@ class AuroCalendarCell extends i$2 {
25352
25263
  * @returns {void}
25353
25264
  */
25354
25265
  focusButton() {
25355
- const button = this._cachedButton || this.shadowRoot.querySelector('button:not([disabled])');
25266
+ const button = this._cachedButton || this.shadowRoot.querySelector('button:not([aria-hidden])');
25356
25267
  if (button) {
25357
25268
  button.focus({ focusVisible: true });
25358
25269
  }
@@ -25360,9 +25271,7 @@ class AuroCalendarCell extends i$2 {
25360
25271
 
25361
25272
  /**
25362
25273
  * Imperatively marks this cell as active without triggering a Lit re-render.
25363
- * Buttons stay tabindex="-1" because DOM focus stays on the grid wrapper
25364
- * arrow keys move the active cell imperatively and the live region carries
25365
- * the SR announcement.
25274
+ * Note: buttons stay tabindex="-1" because the grid uses aria-activedescendant.
25366
25275
  * @returns {void}
25367
25276
  */
25368
25277
  setActive() {
@@ -25404,13 +25313,10 @@ class AuroCalendarCell extends i$2 {
25404
25313
  if (!btn || !this.day) return;
25405
25314
 
25406
25315
  const dayDate = this.day.date;
25407
- const departTimestamp = new Date(dateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
25316
+ const departTimestamp = startOfDay$1(dateFrom * 1000) / 1000;
25408
25317
  const isInRange = dayDate > departTimestamp && dayDate < hoveredDate;
25409
- // `>=` so hovering the depart cell itself (a same-day round-trip
25410
- // preview) still surfaces a visual cue: the depart cell receives both
25411
- // rangeDepartDate and lastHoveredDate.
25412
- const isLastHovered = dayDate === hoveredDate && hoveredDate >= departTimestamp;
25413
- const isDepartWithPreview = dayDate === departTimestamp && hoveredDate >= departTimestamp;
25318
+ const isLastHovered = dayDate === hoveredDate && hoveredDate > departTimestamp;
25319
+ const isDepartWithPreview = dayDate === departTimestamp && hoveredDate > departTimestamp;
25414
25320
 
25415
25321
  btn.classList.toggle('inRange', isInRange);
25416
25322
  btn.classList.toggle('lastHoveredDate', isLastHovered);
@@ -25468,6 +25374,7 @@ class AuroCalendarCell extends i$2 {
25468
25374
  @focus="${outOfRange ? undefined : this.handleFocus}"
25469
25375
  class="${e$2(buttonClasses)}"
25470
25376
  ?disabled="${outOfRange}"
25377
+ aria-hidden="${outOfRange ? 'true' : A$7}"
25471
25378
  tabindex="-1">
25472
25379
  <div class="buttonWrapper" aria-hidden="true">
25473
25380
  <div class="currentDayMarker">${this.day?.title || A$7}</div>
@@ -26573,7 +26480,7 @@ let AuroBibtemplate$3 = class AuroBibtemplate extends i$2 {
26573
26480
  }
26574
26481
  };
26575
26482
 
26576
- var formkitVersion$2$1 = '202606252324';
26483
+ var formkitVersion$2$1 = '202606252337';
26577
26484
 
26578
26485
  let l$1$2 = class l{generateElementName(t,e){let o=t;return o+="-",o+=e.replace(/[.]/g,"_"),o}generateTag(o,s,a){const r=this.generateElementName(o,s),i=i$5`${s$5(r)}`;return customElements.get(r)||customElements.define(r,class extends a{}),i}};let d$1$2 = class d{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}getSlotText(t,e){const o=t.shadowRoot?.querySelector(`slot[name="${e}"]`),s=(o?.assignedNodes({flatten:true})||[]).map(t=>t.textContent?.trim()).join(" ").trim();return s||null}};let h$1$2 = class h{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}};var c$1$3=i$4`:host{color:var(--ds-auro-loader-color)}:host>span{background-color:var(--ds-auro-loader-background-color);border-color:var(--ds-auro-loader-border-color)}:host([onlight]),:host([appearance=brand]){--ds-auro-loader-color: var(--ds-basic-color-brand-primary, #01426a)}:host([ondark]),:host([appearance=inverse]){--ds-auro-loader-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host([orbit])>span{--ds-auro-loader-background-color: transparent}:host([orbit])>span:nth-child(1){--ds-auro-loader-border-color: currentcolor;opacity:.25}:host([orbit])>span:nth-child(2){--ds-auro-loader-border-color: currentcolor;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent}
26579
26486
  `,u$4$2=i$4`.body-default{font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, .875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs{font-size:var(--wcss-body-xs-font-size, .75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:var(--wcss-body-2xs-font-size, .625rem);font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0);line-height:var(--wcss-body-2xs-line-height, .875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));font-weight:var(--wcss-display-2xl-weight, 300);letter-spacing:var(--wcss-display-2xl-letter-spacing, 0);line-height:var(--wcss-display-2xl-line-height, 1.3)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));font-weight:var(--wcss-display-xl-weight, 300);letter-spacing:var(--wcss-display-xl-letter-spacing, 0);line-height:var(--wcss-display-xl-line-height, 1.3)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));font-weight:var(--wcss-display-lg-weight, 300);letter-spacing:var(--wcss-display-lg-letter-spacing, 0);line-height:var(--wcss-display-lg-line-height, 1.3)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));font-weight:var(--wcss-display-md-weight, 300);letter-spacing:var(--wcss-display-md-letter-spacing, 0);line-height:var(--wcss-display-md-line-height, 1.3)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));font-weight:var(--wcss-display-sm-weight, 300);letter-spacing:var(--wcss-display-sm-letter-spacing, 0);line-height:var(--wcss-display-sm-line-height, 1.3)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));font-weight:var(--wcss-display-xs-weight, 300);letter-spacing:var(--wcss-display-xs-letter-spacing, 0);line-height:var(--wcss-display-xs-line-height, 1.3)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));font-weight:var(--wcss-heading-xl-weight, 300);letter-spacing:var(--wcss-heading-xl-letter-spacing, 0);line-height:var(--wcss-heading-xl-line-height, 1.3)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));font-weight:var(--wcss-heading-lg-weight, 300);letter-spacing:var(--wcss-heading-lg-letter-spacing, 0);line-height:var(--wcss-heading-lg-line-height, 1.3)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));font-weight:var(--wcss-heading-md-weight, 300);letter-spacing:var(--wcss-heading-md-letter-spacing, 0);line-height:var(--wcss-heading-md-line-height, 1.3)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));font-weight:var(--wcss-heading-sm-weight, 300);letter-spacing:var(--wcss-heading-sm-letter-spacing, 0);line-height:var(--wcss-heading-sm-line-height, 1.3)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));font-weight:var(--wcss-heading-xs-weight, 450);letter-spacing:var(--wcss-heading-xs-letter-spacing, 0);line-height:var(--wcss-heading-xs-line-height, 1.3)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));font-weight:var(--wcss-heading-2xs-weight, 450);letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0);line-height:var(--wcss-heading-2xs-line-height, 1.3)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));font-weight:var(--wcss-accent-2xl-weight, 450);letter-spacing:var(--wcss-accent-2xl-letter-spacing, .05em);line-height:var(--wcss-accent-2xl-line-height, 1)}.accent-2xl,.accent-xl{text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));font-weight:var(--wcss-accent-xl-weight, 450);letter-spacing:var(--wcss-accent-xl-letter-spacing, .05em);line-height:var(--wcss-accent-xl-line-height, 1.3)}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));font-weight:var(--wcss-accent-lg-weight, 450);letter-spacing:var(--wcss-accent-lg-letter-spacing, .05em);line-height:var(--wcss-accent-lg-line-height, 1.3)}.accent-lg,.accent-md{text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));font-weight:var(--wcss-accent-md-weight, 500);letter-spacing:var(--wcss-accent-md-letter-spacing, .05em);line-height:var(--wcss-accent-md-line-height, 1.3)}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));font-weight:var(--wcss-accent-sm-weight, 500);letter-spacing:var(--wcss-accent-sm-letter-spacing, .05em);line-height:var(--wcss-accent-sm-line-height, 1.3)}.accent-sm,.accent-xs{text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));font-weight:var(--wcss-accent-xs-weight, 500);letter-spacing:var(--wcss-accent-xs-letter-spacing, .1em);line-height:var(--wcss-accent-xs-line-height, 1.3)}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xs-font-size, clamp(.875rem, 1.1666666667vw, .875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, .1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}:focus:not(:focus-visible){outline:3px solid transparent}:host,:host>span{position:relative}:host{width:2rem;height:2rem;display:inline-block;font-size:0}:host>span{position:absolute;display:inline-block;float:none;top:0;left:0;width:2rem;height:2rem;border-radius:100%;border-style:solid;border-width:0;box-sizing:border-box}:host([xs]),:host([xs])>span{width:1.2rem;height:1.2rem}:host([sm]),:host([sm])>span{width:3rem;height:3rem}:host([md]),:host([md])>span{width:5rem;height:5rem}:host([lg]),:host([lg])>span{width:8rem;height:8rem}:host{--margin: .375rem;--margin-xs: .2rem;--margin-sm: .5rem;--margin-md: .75rem;--margin-lg: 1rem}:host([pulse]),:host([pulse])>span{position:relative}:host([pulse]){width:calc(3rem + var(--margin) * 6);height:calc(1rem + var(--margin) * 2)}:host([pulse])>span{width:1rem;height:1rem;margin:var(--margin);animation:pulse 1.5s ease infinite}:host([pulse][xs]){width:calc(1.95rem + var(--margin-xs) * 6);height:calc(.65rem + var(--margin-xs) * 2)}:host([pulse][xs])>span{margin:var(--margin-xs);width:.65rem;height:.65rem}:host([pulse][sm]){width:calc(6rem + var(--margin-sm) * 6);height:calc(2rem + var(--margin-sm) * 2)}:host([pulse][sm])>span{margin:var(--margin-sm);width:2rem;height:2rem}:host([pulse][md]){width:calc(9rem + var(--margin-md) * 6);height:calc(3rem + var(--margin-md) * 2)}:host([pulse][md])>span{margin:var(--margin-md);width:3rem;height:3rem}:host([pulse][lg]){width:calc(15rem + var(--margin-lg) * 6);height:calc(5rem + var(--margin-lg) * 2)}:host([pulse][lg])>span{margin:var(--margin-lg);width:5rem;height:5rem}:host([pulse])>span:nth-child(1){animation-delay:-.4s}:host([pulse])>span:nth-child(2){animation-delay:-.2s}:host([pulse])>span:nth-child(3){animation-delay:0ms}@keyframes pulse{0%,to{opacity:.1;transform:scale(.9)}50%{opacity:1;transform:scale(1.1)}}:host([orbit]),:host([orbit])>span{opacity:1}:host([orbit])>span{border-width:5px}:host([orbit])>span:nth-child(2){animation:orbit 2s linear infinite}:host([orbit][sm])>span{border-width:8px}:host([orbit][md])>span{border-width:13px}:host([orbit][lg])>span{border-width:21px}@keyframes orbit{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:host([ringworm])>svg{animation:rotate 2s linear infinite;height:100%;width:100%;stroke:currentcolor;stroke-width:8}:host([ringworm]) .path{stroke-dashoffset:0;animation:ringworm 1.5s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes ringworm{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}:host([laser]){position:static;width:100%;display:block;height:0;overflow:hidden;font-size:unset}:host([laser])>span{position:fixed;width:100%;height:.25rem;border-radius:0;z-index:100}:host([laser])>span:nth-child(1){border-color:currentcolor;opacity:.25}:host([laser])>span:nth-child(2){border-color:currentcolor;animation:laser 2s linear infinite;opacity:1;width:50%}:host([laser][sm])>span:nth-child(2){width:20%}:host([laser][md])>span:nth-child(2){width:30%}:host([laser][lg])>span:nth-child(2){width:50%;animation-duration:1.5s}:host([laser][xl])>span:nth-child(2){width:80%;animation-duration:1.5s}@keyframes laser{0%{left:-100%}to{left:110%}}:host>.no-animation{display:none}@media (prefers-reduced-motion: reduce){:host{display:flex;align-items:center;justify-content:center}:host>span{opacity:1}:host>.loader{display:none}:host>svg{display:none}:host>.no-animation{display:block}}
@@ -26696,11 +26603,7 @@ class AuroCalendar extends RangeDatepicker {
26696
26603
  this.calendarRangeMonths = null;
26697
26604
 
26698
26605
  /**
26699
- * @deprecated Use `auro-datepicker.blackoutDates` (an array of
26700
- * `YYYY-MM-DD` ISO strings) instead. This legacy array of Unix
26701
- * timestamps is still honored for backward compatibility but emits a
26702
- * one-time `console.debug` the first time a non-empty value is observed.
26703
- * Support will be removed in a future major release.
26606
+ * Legacy array of disabled-date timestamps.
26704
26607
  * @private
26705
26608
  */
26706
26609
  this.disabledDays = [];
@@ -26957,44 +26860,17 @@ class AuroCalendar extends RangeDatepicker {
26957
26860
  * @returns {void}
26958
26861
  */
26959
26862
  updateActiveCellForVisibleMonth() {
26960
- this._afterMonthRender(() => {
26961
- const newDate = this.computeActiveDate({ skipDateFrom: true });
26962
-
26963
- if (newDate !== null && newDate !== undefined) {
26964
- this.activeCellDate = newDate;
26965
- this.setActiveCell(this.activeCellDate);
26966
- }
26967
- });
26968
- }
26969
-
26970
- /**
26971
- * Schedules `callback` two animation frames out, giving the child
26972
- * `auro-formkit-calendar-month` and `auro-formkit-calendar-cell` elements
26973
- * a full render-and-paint cycle to settle before the callback reads or
26974
- * mutates DOM.
26975
- *
26976
- * Why two frames, not one:
26977
- * 1. Lit batches property updates and renders in a microtask, so frame N
26978
- * schedules the render but the new DOM may not be painted yet.
26979
- * 2. Cells re-cache `_cachedButton` inside their own `updateComplete.then`,
26980
- * which also lands a tick later. Reading buttons from frame N+1
26981
- * (after both renders + cache refresh have flushed) reliably hits the
26982
- * new month's cells.
26983
- *
26984
- * Used by every code path that calls `handleNextMonth`/`handlePrevMonth`
26985
- * and then needs to inspect the freshly-rendered cells (cross-month
26986
- * keyboard nav, boundary events, `updateActiveCellForVisibleMonth`).
26987
- * Do NOT collapse to a single rAF — it intermittently lands before
26988
- * `_cachedButton` is refreshed, which silently breaks focus restoration
26989
- * and `setActiveCell` lookups.
26990
- * @private
26991
- * @param {() => void} callback - Runs once after the month re-render and
26992
- * the cells' button caches have refreshed.
26993
- * @returns {void}
26994
- */
26995
- _afterMonthRender(callback) {
26863
+ // Use double-rAF to ensure child month/cell components have fully
26864
+ // rendered and cached their button references before we set tabindex.
26996
26865
  requestAnimationFrame(() => {
26997
- requestAnimationFrame(callback);
26866
+ requestAnimationFrame(() => {
26867
+ const newDate = this.computeActiveDate({ skipDateFrom: true });
26868
+
26869
+ if (newDate !== null && newDate !== undefined) {
26870
+ this.activeCellDate = newDate;
26871
+ this.setActiveCell(this.activeCellDate);
26872
+ }
26873
+ });
26998
26874
  });
26999
26875
  }
27000
26876
 
@@ -27112,47 +26988,6 @@ class AuroCalendar extends RangeDatepicker {
27112
26988
  return Array.from(this.shadowRoot.querySelectorAll('auro-formkit-calendar-month'));
27113
26989
  }
27114
26990
 
27115
- /**
27116
- * Picks the focusable cell whose date is closest to targetTs. Used as a
27117
- * fallback after a month-boundary nav when the exact target date isn't
27118
- * focusable — typically because the month re-render lagged or the date
27119
- * was filtered out by isOutOfRange. When two cells are equidistant, the
27120
- * navigation direction breaks the tie so the user moves the way they
27121
- * pressed (forward → later cell, backward → earlier cell).
27122
- * @private
27123
- * @param {Array} cells - Focusable cells from getAllFocusableCells.
27124
- * @param {Number} targetTs - Desired Unix timestamp (seconds).
27125
- * @param {'next'|'prev'} direction - Navigation direction.
27126
- * @returns {Object|null} The nearest cell, or null when cells is empty.
27127
- */
27128
- pickNearestCell(cells, targetTs, direction) {
27129
- if (!cells.length) {
27130
- return null;
27131
- }
27132
- const forward = direction === 'next';
27133
- let best = null;
27134
- let bestDelta = Infinity;
27135
- cells.forEach((cell) => {
27136
- if (!cell.day) {
27137
- return;
27138
- }
27139
- const distance = Math.abs(cell.day.date - targetTs);
27140
- if (distance < bestDelta) {
27141
- best = cell;
27142
- bestDelta = distance;
27143
- return;
27144
- }
27145
- if (distance === bestDelta && best) {
27146
- if (forward && cell.day.date > best.day.date) {
27147
- best = cell;
27148
- } else if (!forward && cell.day.date < best.day.date) {
27149
- best = cell;
27150
- }
27151
- }
27152
- });
27153
- return best;
27154
- }
27155
-
27156
26991
  /**
27157
26992
  * Gets all focusable cells across all rendered months.
27158
26993
  * @private
@@ -27169,9 +27004,9 @@ class AuroCalendar extends RangeDatepicker {
27169
27004
 
27170
27005
  /**
27171
27006
  * Sets the active cell across all months. Only one cell has tabindex="0" at a time.
27172
- * Uses imperative DOM manipulation — no Lit re-render triggered. DOM focus
27173
- * stays on the grid wrapper; the live region (see getOrCreateLiveRegion)
27174
- * is what announces the active cell to assistive tech.
27007
+ * Uses imperative DOM manipulation — no Lit re-render triggered.
27008
+ * Also updates ariaActiveDescendantElement on the grid wrapper so
27009
+ * screen readers announce the active cell without moving DOM focus.
27175
27010
  * @param {Number} date - Unix timestamp of the cell to activate.
27176
27011
  * @returns {void}
27177
27012
  */
@@ -27252,65 +27087,6 @@ class AuroCalendar extends RangeDatepicker {
27252
27087
  this.clearRangePreview();
27253
27088
  }
27254
27089
 
27255
- /**
27256
- * Returns a memoized Set of blackout timestamps (seconds) drawn from both
27257
- * the legacy `disabledDays` array and the datepicker's ISO `blackoutDates`.
27258
- * The cache invalidates when either source array's reference changes, which
27259
- * matches Lit's own reactive identity semantics for array properties.
27260
- * @private
27261
- * @returns {Set<Number>}
27262
- */
27263
- _getBlackoutSet() {
27264
- // Normalize non-array values to a stable `null` sentinel rather than a
27265
- // fresh `[]` per call — otherwise the reference-identity cache key
27266
- // (`_cachedBlackoutDisabledDays === disabledDays`) never matches on
27267
- // subsequent calls and the Set rebuilds every time. `buildBlackoutSet`
27268
- // already treats null/non-array as "no legacy disabledDays" via its
27269
- // own Array.isArray gate.
27270
- const disabledDays = Array.isArray(this.disabledDays) ? this.disabledDays : null;
27271
- const blackoutDates = this.datepicker?.blackoutDates;
27272
- if (this._blackoutSet &&
27273
- this._cachedBlackoutDisabledDays === disabledDays &&
27274
- this._cachedBlackoutDates === blackoutDates) {
27275
- return this._blackoutSet;
27276
- }
27277
-
27278
- if (disabledDays && disabledDays.length > 0) {
27279
- this._warnDisabledDaysDeprecated();
27280
- }
27281
-
27282
- this._blackoutSet = buildBlackoutSet(disabledDays, blackoutDates);
27283
- this._cachedBlackoutDisabledDays = disabledDays;
27284
- this._cachedBlackoutDates = blackoutDates;
27285
- return this._blackoutSet;
27286
- }
27287
-
27288
- /**
27289
- * Per-class flag that gates the `disabledDays` deprecation warning so it
27290
- * fires exactly once per page no matter how many calendars or rebuild
27291
- * cycles encounter the legacy array.
27292
- * @private
27293
- */
27294
- static _warnedDisabledDaysDeprecation = false;
27295
-
27296
- /**
27297
- * One-time `console.debug` directing consumers from the legacy
27298
- * `disabledDays` Unix-timestamp API to the ISO `blackoutDates` API. Fires
27299
- * the first time `_getBlackoutSet` rebuilds from a non-empty
27300
- * `disabledDays`; subsequent calls (on this or any other AuroCalendar
27301
- * instance on the page) are silent.
27302
- * @private
27303
- * @returns {void}
27304
- */
27305
- _warnDisabledDaysDeprecated() {
27306
- if (AuroCalendar._warnedDisabledDaysDeprecation) {
27307
- return;
27308
- }
27309
- AuroCalendar._warnedDisabledDaysDeprecation = true;
27310
- // eslint-disable-next-line no-console
27311
- console.debug('[auro-datepicker] The `disabledDays` property (Unix timestamps) is deprecated. Migrate to the `blackoutDates` property on auro-datepicker (an array of `YYYY-MM-DD` ISO strings). `disabledDays` will be removed in a future major release.');
27312
- }
27313
-
27314
27090
  /**
27315
27091
  * Computes the initial active date from data properties alone — no DOM required.
27316
27092
  * Priority:
@@ -27355,10 +27131,21 @@ class AuroCalendar extends RangeDatepicker {
27355
27131
  const minTs = Number.isFinite(rawMin) ? rawMin : -Infinity;
27356
27132
  const maxTs = Number.isFinite(rawMax) ? rawMax : Infinity;
27357
27133
 
27358
- // Build a Set of blackout timestamps for O(1) lookup. Memoized by the
27359
- // identity of the source arrays so rapid month nav doesn't rebuild the
27360
- // Set (and re-parse every ISO string) on every keypress.
27361
- const blackoutSet = this._getBlackoutSet();
27134
+ // Build a Set of blackout timestamps for O(1) lookup.
27135
+ const blackoutSet = new Set(this.disabledDays.map((day) => parseInt(day, 10)));
27136
+
27137
+ // Also include ISO-format blackoutDates from the datepicker if available.
27138
+ // Parse YYYY-MM-DD as local date to avoid UTC shift issues.
27139
+ const isoBlackouts = this.datepicker?.blackoutDates;
27140
+ if (Array.isArray(isoBlackouts)) {
27141
+ for (const isoStr of isoBlackouts) {
27142
+ const parts = isoStr.split('-');
27143
+ const ts = Math.floor(new Date(parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10)).getTime() / 1000);
27144
+ if (Number.isFinite(ts)) {
27145
+ blackoutSet.add(ts);
27146
+ }
27147
+ }
27148
+ }
27362
27149
 
27363
27150
  /**
27364
27151
  * A date (unix timestamp in seconds, midnight-aligned) is "enabled" when
@@ -27554,8 +27341,8 @@ class AuroCalendar extends RangeDatepicker {
27554
27341
 
27555
27342
  /**
27556
27343
  * Handles arrow key navigation on the calendar grid wrapper.
27557
- * Focus stays on the grid wrapper; only the visual active-cell indicator
27558
- * changes. The live region announces the new active cell.
27344
+ * Focus stays on the grid wrapper; only ariaActiveDescendantElement
27345
+ * and the visual active-cell indicator change.
27559
27346
  * @private
27560
27347
  * @param {KeyboardEvent} event - The keyboard event.
27561
27348
  * @returns {void}
@@ -27620,21 +27407,21 @@ class AuroCalendar extends RangeDatepicker {
27620
27407
  } else {
27621
27408
  this.handlePrevMonth({ skipActiveUpdate: true });
27622
27409
  }
27623
- this._afterMonthRender(() => {
27624
- const cells = this.getAllFocusableCells();
27625
- const target = cells.find((cell) => cell.day && cell.day.date === targetTs);
27626
- if (target) {
27627
- this.setActiveCell(target.day.date);
27628
- this.handleCellFocused({ detail: { date: target.day.date } });
27629
- } else {
27630
- const fallback = this.pickNearestCell(cells, targetTs, navDir);
27631
- if (fallback) {
27410
+ requestAnimationFrame(() => {
27411
+ requestAnimationFrame(() => {
27412
+ const cells = this.getAllFocusableCells();
27413
+ const target = cells.find((cell) => cell.day && cell.day.date === targetTs);
27414
+ if (target) {
27415
+ this.setActiveCell(target.day.date);
27416
+ this.handleCellFocused({ detail: { date: target.day.date } });
27417
+ } else if (cells.length > 0) {
27418
+ const fallback = navDir === 'next' ? cells[cells.length - 1] : cells[0];
27632
27419
  this.setActiveCell(fallback.day.date);
27633
27420
  this.handleCellFocused({ detail: { date: fallback.day.date } });
27634
27421
  }
27635
- }
27636
- // Re-focus grid wrapper after month change re-render
27637
- this.focusActiveCell();
27422
+ // Re-focus grid wrapper after month change re-render
27423
+ this.focusActiveCell();
27424
+ });
27638
27425
  });
27639
27426
  }
27640
27427
  }
@@ -27660,20 +27447,26 @@ class AuroCalendar extends RangeDatepicker {
27660
27447
  } else {
27661
27448
  this.handlePrevMonth({ skipActiveUpdate: true });
27662
27449
  }
27663
- this._afterMonthRender(() => {
27664
- const cells = this.getAllFocusableCells();
27665
- const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
27666
- if (target) {
27667
- this.setActiveCell(target.day.date);
27668
- this.handleCellFocused({ detail: { date: target.day.date } });
27669
- } else {
27670
- const nearest = this.pickNearestCell(cells, targetDate, navDirection);
27671
- if (nearest) {
27450
+ requestAnimationFrame(() => {
27451
+ requestAnimationFrame(() => {
27452
+ const cells = this.getAllFocusableCells();
27453
+ const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
27454
+ if (target) {
27455
+ this.setActiveCell(target.day.date);
27456
+ this.handleCellFocused({ detail: { date: target.day.date } });
27457
+ } else if (cells.length > 0) {
27458
+ let nearest = null;
27459
+
27460
+ if (navDirection === 'next') {
27461
+ [nearest] = cells;
27462
+ } else {
27463
+ nearest = cells[cells.length - 1];
27464
+ }
27672
27465
  this.setActiveCell(nearest.day.date);
27673
27466
  this.handleCellFocused({ detail: { date: nearest.day.date } });
27674
27467
  }
27675
- }
27676
- this.focusActiveCell();
27468
+ this.focusActiveCell();
27469
+ });
27677
27470
  });
27678
27471
  }
27679
27472
  }
@@ -27723,22 +27516,19 @@ class AuroCalendar extends RangeDatepicker {
27723
27516
  }
27724
27517
 
27725
27518
  this.handleNextMonth({ skipActiveUpdate: true });
27726
- this._afterMonthRender(() => {
27727
- const cells = this.getAllFocusableCells();
27728
- const target = cells.find((cell) => cell.day && cell.day.date === nextTs);
27729
- if (target) {
27730
- this.setActiveCell(target.day.date);
27731
- this.focusActiveCell();
27732
- } else {
27733
- // Same nearest-by-date fallback handleGridKeyDown uses — direct
27734
- // `cells[length - 1]` would land on the end of the new month,
27735
- // far from the user's intended `nextTs`.
27736
- const fallback = this.pickNearestCell(cells, nextTs, 'next');
27737
- if (fallback) {
27738
- this.setActiveCell(fallback.day.date);
27519
+ requestAnimationFrame(() => {
27520
+ requestAnimationFrame(() => {
27521
+ const cells = this.getAllFocusableCells();
27522
+ const target = cells.find((cell) => cell.day && cell.day.date === nextTs);
27523
+ if (target) {
27524
+ this.setActiveCell(target.day.date);
27525
+ this.focusActiveCell();
27526
+ } else if (cells.length > 0) {
27527
+ // Fallback: first cell of the last rendered month
27528
+ this.setActiveCell(cells[cells.length - 1].day.date);
27739
27529
  this.focusActiveCell();
27740
27530
  }
27741
- }
27531
+ });
27742
27532
  });
27743
27533
  } else if (direction === 'prev' && this.showPrevMonthBtn) {
27744
27534
  // Navigate to previous month and focus the computed previous date.
@@ -27752,22 +27542,19 @@ class AuroCalendar extends RangeDatepicker {
27752
27542
  }
27753
27543
 
27754
27544
  this.handlePrevMonth({ skipActiveUpdate: true });
27755
- this._afterMonthRender(() => {
27756
- const cells = this.getAllFocusableCells();
27757
- const target = cells.find((cell) => cell.day && cell.day.date === prevTs);
27758
- if (target) {
27759
- this.setActiveCell(target.day.date);
27760
- this.focusActiveCell();
27761
- } else {
27762
- // Same nearest-by-date fallback handleGridKeyDown uses — direct
27763
- // `cells[0]` would land on the start of the previous month, far
27764
- // from the user's intended `prevTs`.
27765
- const fallback = this.pickNearestCell(cells, prevTs, 'prev');
27766
- if (fallback) {
27767
- this.setActiveCell(fallback.day.date);
27545
+ requestAnimationFrame(() => {
27546
+ requestAnimationFrame(() => {
27547
+ const cells = this.getAllFocusableCells();
27548
+ const target = cells.find((cell) => cell.day && cell.day.date === prevTs);
27549
+ if (target) {
27550
+ this.setActiveCell(target.day.date);
27551
+ this.focusActiveCell();
27552
+ } else if (cells.length > 0) {
27553
+ // Fallback: last cell of the first rendered month
27554
+ this.setActiveCell(cells[0].day.date);
27768
27555
  this.focusActiveCell();
27769
27556
  }
27770
- }
27557
+ });
27771
27558
  });
27772
27559
  }
27773
27560
  } else if (key === 'ArrowDown' || key === 'ArrowUp') {
@@ -27795,22 +27582,20 @@ class AuroCalendar extends RangeDatepicker {
27795
27582
  } else {
27796
27583
  this.handlePrevMonth({ skipActiveUpdate: true });
27797
27584
  }
27798
- this._afterMonthRender(() => {
27799
- const cells = this.getAllFocusableCells();
27800
- const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
27801
- if (target) {
27802
- this.setActiveCell(target.day.date);
27803
- this.focusActiveCell();
27804
- } else {
27805
- // Same nearest-by-date fallback handleGridKeyDown uses — the
27806
- // old direction-based `cells[0]`/`cells[length-1]` clamp
27807
- // could land 25+ days from the intended target.
27808
- const nearest = this.pickNearestCell(cells, targetDate, navDirection);
27809
- if (nearest) {
27585
+ requestAnimationFrame(() => {
27586
+ requestAnimationFrame(() => {
27587
+ const cells = this.getAllFocusableCells();
27588
+ const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
27589
+ if (target) {
27590
+ this.setActiveCell(target.day.date);
27591
+ this.focusActiveCell();
27592
+ } else if (cells.length > 0) {
27593
+ // Clamp to nearest focusable cell
27594
+ const nearest = navDirection === 'next' ? cells[0] : cells[cells.length - 1];
27810
27595
  this.setActiveCell(nearest.day.date);
27811
27596
  this.focusActiveCell();
27812
27597
  }
27813
- }
27598
+ });
27814
27599
  });
27815
27600
  }
27816
27601
  }
@@ -27849,9 +27634,8 @@ class AuroCalendar extends RangeDatepicker {
27849
27634
  return;
27850
27635
  }
27851
27636
 
27852
- // DOM focus stays on the grid wrapper while arrow keys move the active
27853
- // cell, so cell buttons never receive native focus. The debounced live
27854
- // region carries the full-context announcement instead.
27637
+ // With aria-activedescendant, the button no longer receives native focus,
27638
+ // so we use the debounced live region for the full context announcement.
27855
27639
  const announcement = this.buildFocusAnnouncement(date);
27856
27640
  this.announceFocusDebounced(announcement);
27857
27641
 
@@ -27921,10 +27705,10 @@ class AuroCalendar extends RangeDatepicker {
27921
27705
  return null;
27922
27706
  }
27923
27707
 
27924
- const departTs = new Date(parsedFrom * 1000).setHours(0, 0, 0, 0) / 1000;
27708
+ const departTs = startOfDay$2(parsedFrom * 1000) / 1000;
27925
27709
  const parsedTo = Number.parseInt(this.dateTo, 10);
27926
27710
  const hasTo = Number.isFinite(parsedTo);
27927
- const returnTs = hasTo ? new Date(parsedTo * 1000).setHours(0, 0, 0, 0) / 1000 : null;
27711
+ const returnTs = hasTo ? startOfDay$2(parsedTo * 1000) / 1000 : null;
27928
27712
 
27929
27713
  if (date === departTs) {
27930
27714
  return this.datepicker.rangeLabelStart || 'range start';
@@ -27938,22 +27722,36 @@ class AuroCalendar extends RangeDatepicker {
27938
27722
  if (hasTo && date > departTs && date < returnTs) {
27939
27723
  return this.datepicker.rangeLabelInRange || 'in range';
27940
27724
  }
27941
- if (!hasTo && date > departTs) {
27942
- return this.datepicker.rangeLabelEndPreview || 'previewing range end';
27943
- }
27944
27725
  return this.datepicker.rangeLabelAfterRange || 'after range';
27945
27726
  }
27946
27727
 
27947
27728
  /**
27948
- * Checks whether a given date is a blackout date. Delegates to the
27949
- * memoized `_getBlackoutSet` so the YYYY-MM-DD parsing and the
27950
- * legacy/ISO merge rules live in exactly one place (see `blackoutUtils.js`).
27729
+ * Checks whether a given date is a blackout date.
27951
27730
  * @private
27952
27731
  * @param {Number} dateTs - Unix timestamp (seconds).
27953
27732
  * @returns {Boolean} True if the date is blacked out.
27954
27733
  */
27955
27734
  isDateBlackout(dateTs) {
27956
- return this._getBlackoutSet().has(dateTs);
27735
+ // Check legacy disabledDays.
27736
+ if (Array.isArray(this.disabledDays) && this.disabledDays.length > 0) {
27737
+ if (this.disabledDays.findIndex((day) => parseInt(day, 10) === dateTs) !== -1) {
27738
+ return true;
27739
+ }
27740
+ }
27741
+
27742
+ // Check ISO blackoutDates.
27743
+ const blackoutDates = this.datepicker?.blackoutDates;
27744
+ if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
27745
+ const date = new Date(dateTs * 1000);
27746
+ const yyyy = date.getFullYear();
27747
+ const mm = String(date.getMonth() + 1).padStart(2, '0');
27748
+ const dd = String(date.getDate()).padStart(2, '0');
27749
+ if (blackoutDates.includes(`${yyyy}-${mm}-${dd}`)) {
27750
+ return true;
27751
+ }
27752
+ }
27753
+
27754
+ return false;
27957
27755
  }
27958
27756
 
27959
27757
  /**
@@ -28120,34 +27918,9 @@ class AuroCalendar extends RangeDatepicker {
28120
27918
  // the last one.
28121
27919
  if (this._announceRafId) {
28122
27920
  cancelAnimationFrame(this._announceRafId);
28123
- this._announceRafId = null;
28124
27921
  }
28125
- this._deliverAnnouncement(dateStr, 0);
28126
- }
28127
-
28128
- /**
28129
- * Writes `dateStr` to the live region. If the dropdown's dialog hasn't
28130
- * mounted yet (so getOrCreateLiveRegion can't attach), retries on the
28131
- * next animation frame up to MAX_LIVE_REGION_RETRIES instead of silently
28132
- * dropping the announcement. The retry uses the same `_announceRafId`
28133
- * the double-rAF below uses, so a newer announceSelection call (or
28134
- * disconnectedCallback) cancels any in-flight retry.
28135
- * @private
28136
- * @param {String} dateStr - The localized date string to announce.
28137
- * @param {Number} attempts - Number of prior retry attempts.
28138
- * @returns {void}
28139
- */
28140
- _deliverAnnouncement(dateStr, attempts) {
28141
27922
  const liveRegion = this.getOrCreateLiveRegion();
28142
27923
  if (!liveRegion) {
28143
- const MAX_LIVE_REGION_RETRIES = 10;
28144
- if (attempts < MAX_LIVE_REGION_RETRIES) {
28145
- this._announceRafId = requestAnimationFrame(() => {
28146
- this._deliverAnnouncement(dateStr, attempts + 1);
28147
- });
28148
- } else {
28149
- this._announceRafId = null;
28150
- }
28151
27924
  return;
28152
27925
  }
28153
27926
 
@@ -28333,7 +28106,7 @@ class AuroCalendar extends RangeDatepicker {
28333
28106
  </button>
28334
28107
  ` : undefined}
28335
28108
  </div>
28336
- <div id="calendarGrid" class="calendars" role="group" aria-roledescription="calendar" tabindex="0" aria-label="${this.datepicker?.calendarGridLabel}" @keydown="${this.handleGridKeyDown}" @focusin="${this.handleGridFocusIn}" @focusout="${this.handleGridFocusOut}" @calendar-month-mouseleave="${this.clearRangePreview}">
28109
+ <div id="calendarGrid" class="calendars" role="group" tabindex="0" aria-label="${this.datepicker?.calendarGridLabel}" @keydown="${this.handleGridKeyDown}" @focusin="${this.handleGridFocusIn}" @focusout="${this.handleGridFocusOut}" @calendar-month-mouseleave="${this.clearRangePreview}">
28337
28110
  ${this.renderAllCalendars()}
28338
28111
  </div>
28339
28112
  </div>
@@ -32218,7 +31991,7 @@ let AuroHelpText$2$1 = class AuroHelpText extends i$2 {
32218
31991
  }
32219
31992
  };
32220
31993
 
32221
- var formkitVersion$1$3 = '202606252324';
31994
+ var formkitVersion$1$3 = '202606252337';
32222
31995
 
32223
31996
  let AuroElement$2$2 = class AuroElement extends i$2 {
32224
31997
  static get properties() {
@@ -38615,7 +38388,7 @@ function normalizeDates$2(context, ...dates) {
38615
38388
  * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))
38616
38389
  * //=> Tue Sep 02 2014 00:00:00
38617
38390
  */
38618
- function startOfDay$2(date, options) {
38391
+ function startOfDay$3(date, options) {
38619
38392
  const _date = toDate$2(date, options?.in);
38620
38393
  _date.setHours(0, 0, 0, 0);
38621
38394
  return _date;
@@ -38663,8 +38436,8 @@ function differenceInCalendarDays$2(laterDate, earlierDate, options) {
38663
38436
  earlierDate,
38664
38437
  );
38665
38438
 
38666
- const laterStartOfDay = startOfDay$2(laterDate_);
38667
- const earlierStartOfDay = startOfDay$2(earlierDate_);
38439
+ const laterStartOfDay = startOfDay$3(laterDate_);
38440
+ const earlierStartOfDay = startOfDay$3(earlierDate_);
38668
38441
 
38669
38442
  const laterTimestamp =
38670
38443
  +laterStartOfDay - getTimezoneOffsetInMilliseconds$2(laterStartOfDay);
@@ -43936,6 +43709,13 @@ let AuroInputUtilities$2 = class AuroInputUtilities {
43936
43709
  * @returns {string | undefined}
43937
43710
  */
43938
43711
  toFormattedValue(valueObject, format) {
43712
+ // Exposed publicly via `AuroInputUtil.toFormattedValue`, so a missing
43713
+ // `format` argument has to fail gracefully rather than throw on
43714
+ // `format.toLowerCase()`. Treat any falsy value (undefined, null, '')
43715
+ // as "no format → no display value".
43716
+ if (!format) {
43717
+ return undefined;
43718
+ }
43939
43719
  const normalizedFormat = format.toLowerCase();
43940
43720
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
43941
43721
 
@@ -44086,79 +43866,18 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44086
43866
  constructor() {
44087
43867
  super();
44088
43868
 
44089
- this.appearance = "default";
44090
- this.disabled = false;
44091
- this.layout = 'classic';
44092
- this.locale = 'en-US';
44093
- this.max = undefined;
44094
- this._maxObject = undefined;
44095
- this.maxLength = undefined;
44096
- this.min = undefined;
44097
- this._minObject = undefined;
44098
- this.minLength = undefined;
44099
- this.required = false;
44100
- this.onDark = false;
44101
- this.setCustomValidityForType = undefined;
44102
- this.size = 'lg';
44103
- this.shape = 'classic';
44104
- this.value = undefined;
44105
- this._valueObject = undefined;
44106
-
44107
- this._initializePrivateDefaults();
44108
- }
44109
-
44110
- /**
44111
- * Internal Defaults.
44112
- * @private
44113
- * @returns {void}
44114
- */
44115
- _initializePrivateDefaults() {
43869
+ // Single-source initialization. Alphabetized so duplicate or stale
43870
+ // defaults are immediately obvious on a diff. Every field is assigned
43871
+ // exactly once here (previously the constructor + the old
43872
+ // `_initializePrivateDefaults` overlapped — both wrote ~14 of the same
43873
+ // fields and double-allocated `util` and `validation`, discarding the
43874
+ // first instance). `validation` is now allocated exactly once; `util`
43875
+ // is seeded here with an en-US default and then rebuilt in
43876
+ // `connectedCallback` once the consumer-resolved locale is available,
43877
+ // so a parent (datepicker/combobox) calling `validate()` synchronously
43878
+ // during its own update cycle sees a populated util instance.
44116
43879
  this.activeLabel = false;
44117
- this.appearance = "default";
44118
- this.icon = false;
44119
- this.disabled = false;
44120
- this.dvInputOnly = false;
44121
- this.hideLabelVisually = false;
44122
- this.max = undefined;
44123
- this.maxLength = undefined;
44124
- this.min = undefined;
44125
- this.minLength = undefined;
44126
- this.noValidate = false;
44127
- this.onDark = false;
44128
- this.required = false;
44129
- this.setCustomValidityForType = undefined;
44130
-
44131
- // Used for storing raw values returned from input mask.
44132
- this._rawMaskValue = undefined;
44133
-
44134
- /**
44135
- * @private
44136
- */
44137
- this.layout = 'classic';
44138
-
44139
- /**
44140
- * @private
44141
- */
44142
- this.shape = 'classic';
44143
-
44144
- /**
44145
- * @private
44146
- */
44147
- this.size = 'lg';
44148
-
44149
- this.touched = false;
44150
- this.util = new AuroInputUtilities$2({
44151
- locale: "en-US",
44152
- format: this.format
44153
- });
44154
- this.validation = new AuroFormValidation$6();
44155
- this.inputIconName = undefined;
44156
- this.showPassword = false;
44157
- this.validationCCLength = undefined;
44158
- this.hasValue = false;
44159
- this.label = 'Input label is undefined';
44160
-
44161
-
43880
+ /** @private */
44162
43881
  this.allowedInputTypes = [
44163
43882
  "text",
44164
43883
  "number",
@@ -44167,7 +43886,8 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44167
43886
  "credit-card",
44168
43887
  "tel"
44169
43888
  ];
44170
- this.icon = false;
43889
+ this.appearance = "default";
43890
+ /** @private */
44171
43891
  this.dateFormatMap = {
44172
43892
  'mm/dd/yyyy': 'dateMMDDYYYY',
44173
43893
  'dd/mm/yyyy': 'dateDDMMYYYY',
@@ -44184,27 +43904,57 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44184
43904
  'dd/mm': 'dateDDMM',
44185
43905
  'mm/dd': 'dateMMDD'
44186
43906
  };
43907
+ this.disabled = false;
43908
+ /** @private */
44187
43909
  this.domHandler = new DomHandler$2();
44188
43910
  this.dvInputOnly = false;
44189
43911
  this.hasValue = false;
43912
+ this.hideLabelVisually = false;
43913
+ this.icon = false;
43914
+ /** @private */
44190
43915
  this.inputIconName = undefined;
43916
+ /** @private */
44191
43917
  this.label = 'Input label is undefined';
43918
+ this.layout = 'classic';
43919
+ this.locale = 'en-US';
43920
+ this.max = undefined;
43921
+ this._maxObject = undefined;
43922
+ this.maxLength = undefined;
43923
+ this.min = undefined;
43924
+ this._minObject = undefined;
43925
+ this.minLength = undefined;
44192
43926
  this.noValidate = false;
44193
- this._rawMaskValue = undefined; // Used for storing raw values returned from input mask.
43927
+ this.onDark = false;
43928
+ // Raw values returned from the input mask before model normalization.
43929
+ this._rawMaskValue = undefined;
43930
+ this.required = false;
43931
+ this.setCustomValidityForType = undefined;
43932
+ // Credit Card is intentionally excluded — its mask manages the cursor
43933
+ // itself, and listing it here caused cursor placement issues in Safari.
43934
+ /** @private */
44194
43935
  this.setSelectionInputTypes = [
44195
43936
  "text",
44196
43937
  "password",
44197
43938
  "email"
44198
- ]; // Credit Card is not included as this caused cursor placement issues in Safari.
43939
+ ];
43940
+ this.shape = 'classic';
43941
+ /** @private */
44199
43942
  this.showPassword = false;
43943
+ this.size = 'lg';
44200
43944
  this.touched = false;
43945
+ /** @private */
44201
43946
  this.uniqueId = new UniqueId$1().create();
43947
+ /** @private */
44202
43948
  this.util = new AuroInputUtilities$2({
44203
43949
  locale: this.locale,
44204
43950
  format: this.format
44205
43951
  });
43952
+ /** @private */
44206
43953
  this.validation = new AuroFormValidation$6();
43954
+ /** @private */
44207
43955
  this.validationCCLength = undefined;
43956
+ this.value = undefined;
43957
+ this._valueObject = undefined;
44208
43958
  }
44209
43959
 
44210
43960
  // function to define props used within the scope of this component
@@ -44752,6 +44502,15 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44752
44502
 
44753
44503
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
44754
44504
 
44505
+ // Normalize the format token to lowercase so case-mixed values supplied
44506
+ // via attribute (e.g. `format="MM/DD/YYYY"`) hit the `dateFormatMap`
44507
+ // lookup inside `setCustomHelpTextMessage`. Without this, an uppercase
44508
+ // format silently misses the map and leaves `setCustomValidityForType`
44509
+ // unset.
44510
+ if (this.format) {
44511
+ this.format = this.format.toLowerCase();
44512
+ }
44513
+
44755
44514
  // use validity message override if declared when initializing the component
44756
44515
  if (this.hasAttribute('setCustomValidity')) {
44757
44516
  this.ValidityMessageOverride = this.setCustomValidity;
@@ -45185,6 +44944,38 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45185
44944
  this.touched = true;
45186
44945
  this.validation.validate(this);
45187
44946
  }
44947
+
44948
+ // Prevents cursor jumping in Safari. Setting `this.value` triggers a Lit
44949
+ // update that can re-render the input and reset the native cursor; we
44950
+ // capture the caret position before that update commits and restore it
44951
+ // via `setSelectionRange` once the update has flushed. Gated on
44952
+ // `setSelectionInputTypes` so credit-card (and other masked types whose
44953
+ // formatter manages the cursor itself) doesn't get a competing write.
44954
+ // Capture the caret position INSIDE the gate — reading `selectionStart`
44955
+ // on input types that don't support text selection (number, email in
44956
+ // some browsers) throws InvalidStateError, which would crash all input
44957
+ // handling. Wrap the read in try/catch belt-and-suspenders even though
44958
+ // the gated types currently support it, since the list is a public
44959
+ // property a consumer could mutate.
44960
+ if (this.setSelectionInputTypes.includes(this.type)) {
44961
+ let selectionStart;
44962
+ try {
44963
+ selectionStart = this.inputElement.selectionStart;
44964
+ } catch (error) { // eslint-disable-line no-unused-vars
44965
+ return;
44966
+ }
44967
+ if (typeof selectionStart !== 'number') {
44968
+ return;
44969
+ }
44970
+ this.updateComplete.then(() => {
44971
+ try {
44972
+ this.inputElement.setSelectionRange(selectionStart, selectionStart);
44973
+ } catch (error) { // eslint-disable-line no-unused-vars
44974
+ // Some input types (number/email in certain UAs) throw on
44975
+ // setSelectionRange; swallow and let the native cursor stand.
44976
+ }
44977
+ });
44978
+ }
45188
44979
  }
45189
44980
 
45190
44981
  /**
@@ -45811,7 +45602,7 @@ let AuroHelpText$1$3 = class AuroHelpText extends i$2 {
45811
45602
  }
45812
45603
  };
45813
45604
 
45814
- var formkitVersion$7 = '202606252324';
45605
+ var formkitVersion$7 = '202606252337';
45815
45606
 
45816
45607
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
45817
45608
  // See LICENSE in the project root for license information.
@@ -46314,6 +46105,7 @@ let AuroInput$1 = class AuroInput extends BaseInput$1 {
46314
46105
  <${this.buttonTag}
46315
46106
  @click="${this.handleClickShowPassword}"
46316
46107
  appearance="${this.onDark ? 'inverse' : this.appearance}"
46108
+ aria-pressed="${this.showPassword ? 'true' : 'false'}"
46317
46109
  class="notificationBtn passwordBtn"
46318
46110
  shape="circle"
46319
46111
  size="sm"
@@ -46387,25 +46179,29 @@ let AuroInput$1 = class AuroInput extends BaseInput$1 {
46387
46179
  * @returns {html} - Returns HTML for the help text and error message.
46388
46180
  */
46389
46181
  renderHtmlHelpText() {
46182
+ // Single `<p>` with stable identity across validity transitions —
46183
+ // previously two distinct templates (valid vs invalid) caused Lit to
46184
+ // replace the node entirely on a flip, and VoiceOver wouldn't
46185
+ // re-announce because the live-region element it was watching had been
46186
+ // removed and a new one inserted. Keeping one node means the `role`,
46187
+ // `aria-live`, and text content all change in-place, which AT does
46188
+ // observe and announce.
46189
+ const isError = this.validity && this.validity !== 'valid';
46390
46190
  return u$d`
46391
- ${!this.validity || this.validity === undefined || this.validity === 'valid'
46392
- ? u$d`
46393
- <${this.helpTextTag}
46394
- appearance="${this.onDark ? 'inverse' : this.appearance}">
46395
- <p id="${this.uniqueId}" part="helpText">
46396
- <slot name="helpText">${this.getHelpText()}</slot>
46397
- </p>
46398
- </${this.helpTextTag}>
46399
- `
46400
- : u$d`
46401
- <${this.helpTextTag} error
46402
- appearance="${this.onDark ? 'inverse' : this.appearance}">
46403
- <p id="${this.uniqueId}" role="alert" aria-live="assertive" part="helpText">
46404
- ${this.errorMessage}
46405
- </p>
46406
- </${this.helpTextTag}>
46407
- `
46408
- }
46191
+ <${this.helpTextTag}
46192
+ appearance="${this.onDark ? 'inverse' : this.appearance}"
46193
+ ?error=${isError}>
46194
+ <p
46195
+ id="${this.uniqueId}"
46196
+ part="helpText"
46197
+ role="${o$4(isError ? 'alert' : undefined)}"
46198
+ aria-live="${o$4(isError ? 'assertive' : undefined)}">
46199
+ ${isError
46200
+ ? this.errorMessage
46201
+ : u$d`<slot name="helpText">${this.getHelpText()}</slot>`
46202
+ }
46203
+ </p>
46204
+ </${this.helpTextTag}>
46409
46205
  `;
46410
46206
  }
46411
46207
 
@@ -46552,6 +46348,15 @@ function formatISODate(isoStr, format) {
46552
46348
  try {
46553
46349
  const date = dateFormatter$2.stringToDateInstance(isoStr);
46554
46350
 
46351
+ // `stringToDateInstance` returns an `Invalid Date` for malformed strings
46352
+ // and `null` for non-string input — it does NOT throw. Without this
46353
+ // guard, `getFullYear()`/`getMonth()`/`getDate()` on an Invalid Date
46354
+ // yield `NaN`, and `String(NaN).padStart(4, '0')` produces literals
46355
+ // like "0NaN/0NaN/0NaN" instead of `undefined`.
46356
+ if (!(date instanceof Date) || Number.isNaN(date.getTime())) {
46357
+ return undefined;
46358
+ }
46359
+
46555
46360
  const year = String(date.getFullYear()).padStart(4, '0');
46556
46361
  const month = String(date.getMonth() + 1).padStart(2, '0');
46557
46362
  const day = String(date.getDate()).padStart(2, '0');
@@ -46562,7 +46367,10 @@ function formatISODate(isoStr, format) {
46562
46367
  replace(/mm/iu, month).
46563
46368
  replace(/dd/iu, day);
46564
46369
  } catch (err) {
46565
- // If the input string is not a valid date, return undefined
46370
+ // Defensive: the Date-returning path is guarded above, but `parseDate`
46371
+ // (inside `stringToDateInstance`) could throw on pathological input
46372
+ // future-library-versions might introduce. Treat any thrown error as
46373
+ // "not a valid date" and return undefined.
46566
46374
  return undefined;
46567
46375
  }
46568
46376
  }
@@ -47288,7 +47096,6 @@ class AuroDatePicker extends AuroElement$5 {
47288
47096
  this.rangeLabelBeforeRange = 'before range';
47289
47097
  this.rangeLabelInRange = 'in range';
47290
47098
  this.rangeLabelAfterRange = 'after range';
47291
- this.rangeLabelEndPreview = 'previewing range end';
47292
47099
  this.blackoutDates = [];
47293
47100
  this.blackoutLabel = 'unavailable';
47294
47101
  this.navLabelPrevMonth = 'Previous month';
@@ -47388,22 +47195,6 @@ class AuroDatePicker extends AuroElement$5 {
47388
47195
  */
47389
47196
  this.handleClick = this.handleClick.bind(this);
47390
47197
 
47391
- /**
47392
- * Single AbortController shared by every listener registered in the
47393
- * configure* methods. Lets disconnectedCallback tear all of them down
47394
- * with one abort() call.
47395
- *
47396
- * The genuine leak risk is the listeners attached to children that can
47397
- * outlive the host if they get reparented — `this.dropdown`,
47398
- * `this.calendar`, and the inputs inside the dropdown's slot.
47399
- * Listeners attached to `this` (e.g. focusin/focusout on the host)
47400
- * form a self-contained reference graph that the GC can collect with
47401
- * the host anyway, but they share the same signal so the cleanup
47402
- * pattern stays uniform across all configure* sites.
47403
- * @private
47404
- */
47405
- this._listenerAbortController = new AbortController();
47406
-
47407
47198
  /**
47408
47199
  * @private
47409
47200
  */
@@ -47452,7 +47243,6 @@ class AuroDatePicker extends AuroElement$5 {
47452
47243
 
47453
47244
  /**
47454
47245
  * Label announced for blackout (disabled but in-range) date cells.
47455
- * @default 'unavailable'
47456
47246
  */
47457
47247
  blackoutLabel: {
47458
47248
  type: String,
@@ -47469,7 +47259,6 @@ class AuroDatePicker extends AuroElement$5 {
47469
47259
 
47470
47260
  /**
47471
47261
  * Accessible label for the calendar grid containing the days of the month.
47472
- * @default 'Calendar days of the month'
47473
47262
  */
47474
47263
  calendarGridLabel: {
47475
47264
  type: String,
@@ -47632,7 +47421,6 @@ class AuroDatePicker extends AuroElement$5 {
47632
47421
 
47633
47422
  /**
47634
47423
  * Accessible label for the next month navigation button.
47635
- * @default 'Next month'
47636
47424
  */
47637
47425
  navLabelNextMonth: {
47638
47426
  type: String,
@@ -47641,7 +47429,6 @@ class AuroDatePicker extends AuroElement$5 {
47641
47429
 
47642
47430
  /**
47643
47431
  * Accessible label for the previous month navigation button.
47644
- * @default 'Previous month'
47645
47432
  */
47646
47433
  navLabelPrevMonth: {
47647
47434
  type: String,
@@ -47719,11 +47506,7 @@ class AuroDatePicker extends AuroElement$5 {
47719
47506
  },
47720
47507
 
47721
47508
  /**
47722
- * Label announced for cells after a fully selected range (both
47723
- * `dateFrom` and `dateTo` are set). While a range is still being
47724
- * picked (`dateFrom` set, `dateTo` unset), focused cells past the
47725
- * start use `rangeLabelEndPreview` instead.
47726
- * @default 'after range'
47509
+ * Label announced for cells after the range (or after start when no end is selected).
47727
47510
  */
47728
47511
  rangeLabelAfterRange: {
47729
47512
  type: String,
@@ -47732,7 +47515,6 @@ class AuroDatePicker extends AuroElement$5 {
47732
47515
 
47733
47516
  /**
47734
47517
  * Label announced for cells before the range start.
47735
- * @default 'before range'
47736
47518
  */
47737
47519
  rangeLabelBeforeRange: {
47738
47520
  type: String,
@@ -47741,27 +47523,14 @@ class AuroDatePicker extends AuroElement$5 {
47741
47523
 
47742
47524
  /**
47743
47525
  * Label announced for the range end date cell.
47744
- * @default 'range end'
47745
47526
  */
47746
47527
  rangeLabelEnd: {
47747
47528
  type: String,
47748
47529
  reflect: true
47749
47530
  },
47750
47531
 
47751
- /**
47752
- * Label announced for the focused cell while previewing a range end
47753
- * (dateFrom set, dateTo not yet selected). Tells AT users that
47754
- * pressing Enter would commit this cell as the range end.
47755
- * @default 'previewing range end'
47756
- */
47757
- rangeLabelEndPreview: {
47758
- type: String,
47759
- reflect: true
47760
- },
47761
-
47762
47532
  /**
47763
47533
  * Label announced for cells within the selected range.
47764
- * @default 'in range'
47765
47534
  */
47766
47535
  rangeLabelInRange: {
47767
47536
  type: String,
@@ -47770,7 +47539,6 @@ class AuroDatePicker extends AuroElement$5 {
47770
47539
 
47771
47540
  /**
47772
47541
  * Label announced for the range start date cell.
47773
- * @default 'range start'
47774
47542
  */
47775
47543
  rangeLabelStart: {
47776
47544
  type: String,
@@ -47778,7 +47546,7 @@ class AuroDatePicker extends AuroElement$5 {
47778
47546
  },
47779
47547
 
47780
47548
  /**
47781
- * Dates that the user should have for reference as part of their decision-making when selecting a date.
47549
+ * Dates that the user should have for reference as part of their decision making when selecting a date.
47782
47550
  * This should be a JSON string array of ISO date strings (`YYYY-MM-DD`).
47783
47551
  */
47784
47552
  referenceDates: {
@@ -48135,26 +47903,10 @@ class AuroDatePicker extends AuroElement$5 {
48135
47903
  // ─── Vendor calendar time conversions ─────────────────────────────────────
48136
47904
 
48137
47905
  /**
48138
- * Converts a Unix timestamp (seconds) from the vendored range-datepicker
48139
- * (`src/vendor/wc-range-datepicker/day.js`) to an ISO date string.
48140
- *
48141
- * Timezone contract:
48142
- * - INPUT: `time` is assumed to be the seconds-since-epoch of **local
48143
- * midnight** for the intended calendar day. The vendor's Day constructor
48144
- * builds it via `date-fns format(date, 't')` from a locally-constructed
48145
- * Date, so this assumption currently holds end-to-end.
48146
- * - OUTPUT: `dateFormatter.toISOFormatString` reads the Date's local
48147
- * getFullYear/getMonth/getDate components, so the returned YYYY-MM-DD
48148
- * string matches the local calendar day.
48149
- *
48150
- * If the vendor ever switches to emitting UTC-midnight timestamps, this
48151
- * conversion will silently shift the returned date by one day in zones
48152
- * west of UTC. Any vendor swap should re-verify this contract; the TZ
48153
- * regression suite (`npm run test:hst`, UTC-10) will catch the symptom.
48154
- *
47906
+ * Converts a Unix timestamp (seconds) from the vendor calendar to an ISO date string.
48155
47907
  * @private
48156
- * @param {number} time - Unix timestamp (seconds), local midnight of the day.
48157
- * @returns {string} ISO date string (yyyy-mm-dd) reflecting the local calendar day.
47908
+ * @param {number} time - Unix timestamp in seconds.
47909
+ * @returns {string} ISO date string (yyyy-mm-dd).
48158
47910
  */
48159
47911
  convertWcTimeToDate(time) {
48160
47912
  return dateFormatter$1.toISOFormatString(new Date(time * 1000));
@@ -48256,8 +48008,8 @@ class AuroDatePicker extends AuroElement$5 {
48256
48008
  }
48257
48009
  }
48258
48010
 
48259
- // Focus the calendar grid wrapper. The live region (announced just
48260
- // below) handles the SR announcement for the active cell.
48011
+ // Focus the calendar grid wrapper (aria-activedescendant handles
48012
+ // the SR announcement for the active cell).
48261
48013
  if (activeCell) {
48262
48014
  this.calendar.focusActiveCell();
48263
48015
 
@@ -48307,13 +48059,11 @@ class AuroDatePicker extends AuroElement$5 {
48307
48059
  this.dropdown.bibDialogLabel = labelElement.textContent.trim() || undefined;
48308
48060
  }
48309
48061
 
48310
- const { signal } = this._listenerAbortController;
48311
-
48312
48062
  this.dropdown.addEventListener('auroDropdown-triggerClick', () => {
48313
48063
  if (!this.isPopoverVisible) {
48314
48064
  this.dropdown.show();
48315
48065
  }
48316
- }, { signal });
48066
+ });
48317
48067
 
48318
48068
  this.dropdown.addEventListener('auroDropdown-toggled', () => {
48319
48069
  this.notifyDatepickerToggled();
@@ -48331,7 +48081,7 @@ class AuroDatePicker extends AuroElement$5 {
48331
48081
  if (this.valueObject) {
48332
48082
  this.centralDate = this.value;
48333
48083
  } else if (!this.centralDate && !this.calendarStartDate && !this.minDate) {
48334
- this.centralDate = dateFormatter$1.toISOFormatString(new Date());
48084
+ this.centralDate = new Date();
48335
48085
  }
48336
48086
  }
48337
48087
 
@@ -48411,7 +48161,7 @@ class AuroDatePicker extends AuroElement$5 {
48411
48161
  this.forceScrollOnNextMobileCalendarRender = false;
48412
48162
  }, 0);
48413
48163
  }
48414
- }, { signal });
48164
+ });
48415
48165
 
48416
48166
  // Handle responsive strategy changes while the dropdown is open
48417
48167
  // (e.g. resizing from desktop → mobile or vice versa).
@@ -48458,7 +48208,7 @@ class AuroDatePicker extends AuroElement$5 {
48458
48208
  });
48459
48209
  });
48460
48210
  }
48461
- }, { signal });
48211
+ });
48462
48212
  }
48463
48213
 
48464
48214
  /**
@@ -48471,8 +48221,6 @@ class AuroDatePicker extends AuroElement$5 {
48471
48221
 
48472
48222
  this.inputList = [...this.dropdown.querySelectorAll(this.inputTag._$litStatic$)];
48473
48223
 
48474
- const { signal } = this._listenerAbortController;
48475
-
48476
48224
  this.inputList.forEach((input, index) => {
48477
48225
  input.addEventListener('input', (event) => {
48478
48226
  event.stopPropagation();
@@ -48484,7 +48232,7 @@ class AuroDatePicker extends AuroElement$5 {
48484
48232
  }
48485
48233
 
48486
48234
  this.notifyValueChanged();
48487
- }, { signal });
48235
+ });
48488
48236
 
48489
48237
  input.addEventListener('auroFormElement-validated', (evt) => {
48490
48238
  // not to bubble up input's validated event.
@@ -48500,7 +48248,7 @@ class AuroDatePicker extends AuroElement$5 {
48500
48248
  this.validity = evt.detail.validity;
48501
48249
  this.errorMessage = evt.detail.message;
48502
48250
  }
48503
- }, { signal });
48251
+ });
48504
48252
  });
48505
48253
  }
48506
48254
 
@@ -48514,32 +48262,19 @@ class AuroDatePicker extends AuroElement$5 {
48514
48262
  this.calendar.datepicker = this;
48515
48263
  this.calendar.dropdown = this.dropdown;
48516
48264
 
48517
- const { signal } = this._listenerAbortController;
48518
-
48519
48265
  this.calendar.addEventListener('auroCalendar-dateSelected', () => {
48520
- // Compare the input's ISO value against the *converted* calendar
48521
- // timestamp (the vendor's `dateFrom`/`dateTo` are Unix-seconds
48522
- // strings — comparing the input ISO directly against them would
48523
- // never match, so the write would fire on every event and emit
48524
- // redundant input/change activity).
48525
- if (this.calendar.dateFrom !== undefined) {
48526
- const fromIso = this.convertWcTimeToDate(this.calendar.dateFrom);
48527
- if (this.inputList[0].value !== fromIso) {
48528
- this.inputList[0].value = fromIso;
48529
- }
48266
+ if (this.inputList[0].value !== this.calendar.dateFrom && this.calendar.dateFrom !== undefined) {
48267
+ this.inputList[0].value = this.convertWcTimeToDate(this.calendar.dateFrom);
48530
48268
  }
48531
48269
 
48532
- if (this.inputList[1] && this.calendar.dateTo) {
48533
- const toIso = this.convertWcTimeToDate(this.calendar.dateTo);
48534
- if (this.inputList[1].value !== toIso) {
48535
- this.inputList[1].value = toIso;
48536
- }
48270
+ if (this.inputList[1] && this.calendar.dateTo && this.inputList[1].value !== this.calendar.dateTo) {
48271
+ this.inputList[1].value = this.convertWcTimeToDate(this.calendar.dateTo);
48537
48272
  }
48538
- }, { signal });
48273
+ });
48539
48274
 
48540
48275
  this.calendar.addEventListener('auroCalendar-dismissRequest', () => {
48541
48276
  this.dropdown.hide();
48542
- }, { signal });
48277
+ });
48543
48278
 
48544
48279
  this.calendar.addEventListener('auroCalendar-centralDateChanged', (event) => {
48545
48280
  const match = this.centralDateObject && this.util.datesMatch(event.detail.date, this.centralDateObject);
@@ -48549,7 +48284,7 @@ class AuroDatePicker extends AuroElement$5 {
48549
48284
  }
48550
48285
 
48551
48286
  this.notifyMonthChanged(event);
48552
- }, { signal });
48287
+ });
48553
48288
  }
48554
48289
 
48555
48290
  /**
@@ -48558,17 +48293,10 @@ class AuroDatePicker extends AuroElement$5 {
48558
48293
  * @returns {void}
48559
48294
  */
48560
48295
  configureDatepicker() {
48561
- // These listeners are on `this` (the host), so they would GC with the
48562
- // host even without the abort signal — see the leak rationale on
48563
- // `_listenerAbortController`. The signal is still passed for uniform
48564
- // cleanup semantics with the child-element listeners in the other
48565
- // configure* methods.
48566
- const { signal } = this._listenerAbortController;
48567
-
48568
48296
  this.addEventListener('focusin', () => {
48569
48297
  this.touched = true;
48570
48298
  this.hasFocus = true;
48571
- }, { signal });
48299
+ });
48572
48300
 
48573
48301
  this.addEventListener('focusout', () => {
48574
48302
  this.hasFocus = false;
@@ -48580,7 +48308,7 @@ class AuroDatePicker extends AuroElement$5 {
48580
48308
  if (!this.matches(':focus-within')) {
48581
48309
  this.validate();
48582
48310
  }
48583
- }, { signal });
48311
+ });
48584
48312
 
48585
48313
  if (this.valueObject) {
48586
48314
  this.calendar.dateFrom = this.convertToWcValidTime(this.valueObject);
@@ -48778,41 +48506,6 @@ class AuroDatePicker extends AuroElement$5 {
48778
48506
  return this.validity !== undefined && this.validity !== 'valid';
48779
48507
  }
48780
48508
 
48781
- /**
48782
- * Per-class dedup set used by `_warnInvalidLocale`. Static so the dedup
48783
- * spans every datepicker instance on the page; lives on the class (not
48784
- * at module scope) so it stays an encapsulated implementation detail of
48785
- * this component and does not interfere with WCA's class-JSDoc
48786
- * attachment.
48787
- * @private
48788
- */
48789
- static _warnedInvalidLocales = new Set();
48790
-
48791
- /**
48792
- * Logs a one-time `console.debug` when an unsupported locale falls back to
48793
- * en-US. Deduped by the offending tag so noisy re-renders that resurface
48794
- * the same bad value stay quiet, but each new bad value still signals so
48795
- * consumers can spot the typo or missing tag.
48796
- * @private
48797
- * @param {string|undefined} badLocale - The locale value that failed.
48798
- * @returns {void}
48799
- */
48800
- _warnInvalidLocale(badLocale) {
48801
- // Stringify without coalescing — `String(undefined)` / `String(null)`
48802
- // surface the actual offending value in the log, instead of the
48803
- // ambiguous `Locale ""` that `String(badLocale ?? '')` would produce.
48804
- // Dedup still works correctly because each unique stringification
48805
- // becomes its own Set entry.
48806
- const key = String(badLocale);
48807
- const seen = AuroDatePicker._warnedInvalidLocales;
48808
- if (seen.has(key)) {
48809
- return;
48810
- }
48811
- seen.add(key);
48812
- // eslint-disable-next-line no-console
48813
- console.debug(`[auro-datepicker] Locale "${key}" is not supported by Intl.DateTimeFormat. Falling back to "en-US". Pass a BCP 47 tag such as "en-US", "fr-FR", or "ja-JP".`);
48814
- }
48815
-
48816
48509
  /**
48817
48510
  * Lifecycle method to check if the locale is valid.
48818
48511
  * @ignore
@@ -48823,15 +48516,10 @@ class AuroDatePicker extends AuroElement$5 {
48823
48516
  if (changedProperties.has('locale')) {
48824
48517
  try {
48825
48518
  const supported = Intl.DateTimeFormat.supportedLocalesOf([this.locale], { localeMatcher: 'lookup' });
48826
- if (supported.length > 0) {
48827
- this._validLocale = this.locale;
48828
- } else {
48829
- this._validLocale = 'en-US';
48830
- this._warnInvalidLocale(this.locale);
48831
- }
48519
+ this._validLocale = supported.length > 0 ? this.locale : 'en-US';
48832
48520
  } catch {
48521
+ console.debug(`[AuroDatePicker] The locale "${this.locale}" is not valid. Falling back to "en-US".`); // eslint-disable-line no-console
48833
48522
  this._validLocale = 'en-US';
48834
- this._warnInvalidLocale(this.locale);
48835
48523
  }
48836
48524
 
48837
48525
  const previousLocaleFormat = getDateFormatFromLocale$1(changedProperties.get('locale'));
@@ -48913,6 +48601,8 @@ class AuroDatePicker extends AuroElement$5 {
48913
48601
  // Skip centralDate update when user clicked a cell in range mode
48914
48602
  // to prevent the displayed months from shifting
48915
48603
  this.centralDate = this.value;
48604
+ //TODO: TEST THIS CHANGE
48605
+ // this.calendarRenderUtil.updateCentralDate(this, this.value);
48916
48606
  }
48917
48607
 
48918
48608
  this.setHasValue();
@@ -48972,6 +48662,8 @@ class AuroDatePicker extends AuroElement$5 {
48972
48662
  // Skip centralDate update when user clicked a cell in range mode
48973
48663
  // to prevent the displayed months from shifting
48974
48664
  this.centralDate = this.valueEnd;
48665
+ // TODO: TEST THIS CHANGE
48666
+ // this.calendarRenderUtil.updateCentralDate(this, this.formattedValueEnd);
48975
48667
  }
48976
48668
 
48977
48669
  this.validate();
@@ -49113,7 +48805,7 @@ class AuroDatePicker extends AuroElement$5 {
49113
48805
  * @returns {void}
49114
48806
  */
49115
48807
  configureClickHandler() {
49116
- this.addEventListener('click', this.handleClick, { signal: this._listenerAbortController.signal });
48808
+ this.addEventListener('click', this.handleClick);
49117
48809
  }
49118
48810
 
49119
48811
  firstUpdated() {
@@ -49121,15 +48813,6 @@ class AuroDatePicker extends AuroElement$5 {
49121
48813
  // Add the tag name as an attribute if it is different than the component name
49122
48814
  this.runtimeUtils.handleComponentTagRename(this, 'auro-datepicker');
49123
48815
 
49124
- // If the element was disconnected before this first render finished,
49125
- // disconnectedCallback's microtask already aborted the controller. The
49126
- // connectedCallback reinit guard skips that case because `hasUpdated`
49127
- // is still false. Mint a fresh controller here so configure* registers
49128
- // listeners against a live signal.
49129
- if (this._listenerAbortController.signal.aborted) {
49130
- this._listenerAbortController = new AbortController();
49131
- }
49132
-
49133
48816
  this.configureDropdown();
49134
48817
  this.configureInput();
49135
48818
  this.configureCalendar();
@@ -49141,36 +48824,9 @@ class AuroDatePicker extends AuroElement$5 {
49141
48824
  connectedCallback() {
49142
48825
  super.connectedCallback();
49143
48826
 
49144
- // True reconnect after `disconnectedCallback` aborted our controller:
49145
- // the existing signal is dead, so listeners registered against it
49146
- // would never fire. Create a fresh controller and re-run the
49147
- // configure* wiring (each method is idempotent — it just re-caches
49148
- // child refs and re-registers listeners against the new signal).
49149
- // `hasUpdated` gates this so the *first* connect (which precedes
49150
- // firstUpdated) still falls through to firstUpdated's initial wiring.
49151
- if (this.hasUpdated && this._listenerAbortController.signal.aborted) {
49152
- this._listenerAbortController = new AbortController();
49153
- this.configureDropdown();
49154
- this.configureInput();
49155
- this.configureCalendar();
49156
- this.configureDatepicker();
49157
- this.configureClickHandler();
49158
- }
49159
-
49160
48827
  this.locale = this.domHandler.getLocale(this);
49161
48828
  }
49162
48829
 
49163
- disconnectedCallback() {
49164
- super.disconnectedCallback();
49165
- // Defer so that re-parenting (auro-drawer slotting it into a dialog,
49166
- // for example) does not abort listeners we still need after reconnect.
49167
- queueMicrotask(() => {
49168
- if (!this.isConnected) {
49169
- this._listenerAbortController.abort();
49170
- }
49171
- });
49172
- }
49173
-
49174
48830
  // layout render methods
49175
48831
  // ------------------------------------
49176
48832
 
@@ -50666,7 +50322,7 @@ let AuroHelpText$1$2 = class AuroHelpText extends i$2 {
50666
50322
  }
50667
50323
  };
50668
50324
 
50669
- var formkitVersion$1$2 = '202606252324';
50325
+ var formkitVersion$1$2 = '202606252337';
50670
50326
 
50671
50327
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
50672
50328
  // See LICENSE in the project root for license information.
@@ -54994,7 +54650,7 @@ let AuroHelpText$6 = class AuroHelpText extends i$2 {
54994
54650
  }
54995
54651
  };
54996
54652
 
54997
- var formkitVersion$6 = '202606252324';
54653
+ var formkitVersion$6 = '202606252337';
54998
54654
 
54999
54655
  let AuroElement$1$2 = class AuroElement extends i$2 {
55000
54656
  static get properties() {
@@ -58934,7 +58590,7 @@ let AuroHelpText$5 = class AuroHelpText extends i$2 {
58934
58590
  }
58935
58591
  };
58936
58592
 
58937
- var formkitVersion$5 = '202606252324';
58593
+ var formkitVersion$5 = '202606252337';
58938
58594
 
58939
58595
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
58940
58596
  // See LICENSE in the project root for license information.
@@ -60684,7 +60340,7 @@ let AuroHelpText$4 = class AuroHelpText extends i$2 {
60684
60340
  }
60685
60341
  };
60686
60342
 
60687
- var formkitVersion$4 = '202606252324';
60343
+ var formkitVersion$4 = '202606252337';
60688
60344
 
60689
60345
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
60690
60346
  // See LICENSE in the project root for license information.
@@ -65899,7 +65555,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$2 {
65899
65555
  }
65900
65556
  };
65901
65557
 
65902
- var formkitVersion$2 = '202606252324';
65558
+ var formkitVersion$2 = '202606252337';
65903
65559
 
65904
65560
  let AuroElement$2$1 = class AuroElement extends i$2 {
65905
65561
  static get properties() {
@@ -77617,6 +77273,13 @@ class AuroInputUtilities {
77617
77273
  * @returns {string | undefined}
77618
77274
  */
77619
77275
  toFormattedValue(valueObject, format) {
77276
+ // Exposed publicly via `AuroInputUtil.toFormattedValue`, so a missing
77277
+ // `format` argument has to fail gracefully rather than throw on
77278
+ // `format.toLowerCase()`. Treat any falsy value (undefined, null, '')
77279
+ // as "no format → no display value".
77280
+ if (!format) {
77281
+ return undefined;
77282
+ }
77620
77283
  const normalizedFormat = format.toLowerCase();
77621
77284
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
77622
77285
 
@@ -77767,79 +77430,18 @@ class BaseInput extends AuroElement$1$1 {
77767
77430
  constructor() {
77768
77431
  super();
77769
77432
 
77770
- this.appearance = "default";
77771
- this.disabled = false;
77772
- this.layout = 'classic';
77773
- this.locale = 'en-US';
77774
- this.max = undefined;
77775
- this._maxObject = undefined;
77776
- this.maxLength = undefined;
77777
- this.min = undefined;
77778
- this._minObject = undefined;
77779
- this.minLength = undefined;
77780
- this.required = false;
77781
- this.onDark = false;
77782
- this.setCustomValidityForType = undefined;
77783
- this.size = 'lg';
77784
- this.shape = 'classic';
77785
- this.value = undefined;
77786
- this._valueObject = undefined;
77787
-
77788
- this._initializePrivateDefaults();
77789
- }
77790
-
77791
- /**
77792
- * Internal Defaults.
77793
- * @private
77794
- * @returns {void}
77795
- */
77796
- _initializePrivateDefaults() {
77433
+ // Single-source initialization. Alphabetized so duplicate or stale
77434
+ // defaults are immediately obvious on a diff. Every field is assigned
77435
+ // exactly once here (previously the constructor + the old
77436
+ // `_initializePrivateDefaults` overlapped — both wrote ~14 of the same
77437
+ // fields and double-allocated `util` and `validation`, discarding the
77438
+ // first instance). `validation` is now allocated exactly once; `util`
77439
+ // is seeded here with an en-US default and then rebuilt in
77440
+ // `connectedCallback` once the consumer-resolved locale is available,
77441
+ // so a parent (datepicker/combobox) calling `validate()` synchronously
77442
+ // during its own update cycle sees a populated util instance.
77797
77443
  this.activeLabel = false;
77798
- this.appearance = "default";
77799
- this.icon = false;
77800
- this.disabled = false;
77801
- this.dvInputOnly = false;
77802
- this.hideLabelVisually = false;
77803
- this.max = undefined;
77804
- this.maxLength = undefined;
77805
- this.min = undefined;
77806
- this.minLength = undefined;
77807
- this.noValidate = false;
77808
- this.onDark = false;
77809
- this.required = false;
77810
- this.setCustomValidityForType = undefined;
77811
-
77812
- // Used for storing raw values returned from input mask.
77813
- this._rawMaskValue = undefined;
77814
-
77815
- /**
77816
- * @private
77817
- */
77818
- this.layout = 'classic';
77819
-
77820
- /**
77821
- * @private
77822
- */
77823
- this.shape = 'classic';
77824
-
77825
- /**
77826
- * @private
77827
- */
77828
- this.size = 'lg';
77829
-
77830
- this.touched = false;
77831
- this.util = new AuroInputUtilities({
77832
- locale: "en-US",
77833
- format: this.format
77834
- });
77835
- this.validation = new AuroFormValidation$2();
77836
- this.inputIconName = undefined;
77837
- this.showPassword = false;
77838
- this.validationCCLength = undefined;
77839
- this.hasValue = false;
77840
- this.label = 'Input label is undefined';
77841
-
77842
-
77444
+ /** @private */
77843
77445
  this.allowedInputTypes = [
77844
77446
  "text",
77845
77447
  "number",
@@ -77848,7 +77450,8 @@ class BaseInput extends AuroElement$1$1 {
77848
77450
  "credit-card",
77849
77451
  "tel"
77850
77452
  ];
77851
- this.icon = false;
77453
+ this.appearance = "default";
77454
+ /** @private */
77852
77455
  this.dateFormatMap = {
77853
77456
  'mm/dd/yyyy': 'dateMMDDYYYY',
77854
77457
  'dd/mm/yyyy': 'dateDDMMYYYY',
@@ -77865,27 +77468,57 @@ class BaseInput extends AuroElement$1$1 {
77865
77468
  'dd/mm': 'dateDDMM',
77866
77469
  'mm/dd': 'dateMMDD'
77867
77470
  };
77471
+ this.disabled = false;
77472
+ /** @private */
77868
77473
  this.domHandler = new DomHandler();
77869
77474
  this.dvInputOnly = false;
77870
77475
  this.hasValue = false;
77476
+ this.hideLabelVisually = false;
77477
+ this.icon = false;
77478
+ /** @private */
77871
77479
  this.inputIconName = undefined;
77480
+ /** @private */
77872
77481
  this.label = 'Input label is undefined';
77482
+ this.layout = 'classic';
77483
+ this.locale = 'en-US';
77484
+ this.max = undefined;
77485
+ this._maxObject = undefined;
77486
+ this.maxLength = undefined;
77487
+ this.min = undefined;
77488
+ this._minObject = undefined;
77489
+ this.minLength = undefined;
77873
77490
  this.noValidate = false;
77874
- this._rawMaskValue = undefined; // Used for storing raw values returned from input mask.
77491
+ this.onDark = false;
77492
+ // Raw values returned from the input mask before model normalization.
77493
+ this._rawMaskValue = undefined;
77494
+ this.required = false;
77495
+ this.setCustomValidityForType = undefined;
77496
+ // Credit Card is intentionally excluded — its mask manages the cursor
77497
+ // itself, and listing it here caused cursor placement issues in Safari.
77498
+ /** @private */
77875
77499
  this.setSelectionInputTypes = [
77876
77500
  "text",
77877
77501
  "password",
77878
77502
  "email"
77879
- ]; // Credit Card is not included as this caused cursor placement issues in Safari.
77503
+ ];
77504
+ this.shape = 'classic';
77505
+ /** @private */
77880
77506
  this.showPassword = false;
77507
+ this.size = 'lg';
77881
77508
  this.touched = false;
77509
+ /** @private */
77882
77510
  this.uniqueId = new UniqueId().create();
77511
+ /** @private */
77883
77512
  this.util = new AuroInputUtilities({
77884
77513
  locale: this.locale,
77885
77514
  format: this.format
77886
77515
  });
77516
+ /** @private */
77887
77517
  this.validation = new AuroFormValidation$2();
77518
+ /** @private */
77888
77519
  this.validationCCLength = undefined;
77520
+ this.value = undefined;
77521
+ this._valueObject = undefined;
77889
77522
  }
77890
77523
 
77891
77524
  // function to define props used within the scope of this component
@@ -78433,6 +78066,15 @@ class BaseInput extends AuroElement$1$1 {
78433
78066
 
78434
78067
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
78435
78068
 
78069
+ // Normalize the format token to lowercase so case-mixed values supplied
78070
+ // via attribute (e.g. `format="MM/DD/YYYY"`) hit the `dateFormatMap`
78071
+ // lookup inside `setCustomHelpTextMessage`. Without this, an uppercase
78072
+ // format silently misses the map and leaves `setCustomValidityForType`
78073
+ // unset.
78074
+ if (this.format) {
78075
+ this.format = this.format.toLowerCase();
78076
+ }
78077
+
78436
78078
  // use validity message override if declared when initializing the component
78437
78079
  if (this.hasAttribute('setCustomValidity')) {
78438
78080
  this.ValidityMessageOverride = this.setCustomValidity;
@@ -78866,6 +78508,38 @@ class BaseInput extends AuroElement$1$1 {
78866
78508
  this.touched = true;
78867
78509
  this.validation.validate(this);
78868
78510
  }
78511
+
78512
+ // Prevents cursor jumping in Safari. Setting `this.value` triggers a Lit
78513
+ // update that can re-render the input and reset the native cursor; we
78514
+ // capture the caret position before that update commits and restore it
78515
+ // via `setSelectionRange` once the update has flushed. Gated on
78516
+ // `setSelectionInputTypes` so credit-card (and other masked types whose
78517
+ // formatter manages the cursor itself) doesn't get a competing write.
78518
+ // Capture the caret position INSIDE the gate — reading `selectionStart`
78519
+ // on input types that don't support text selection (number, email in
78520
+ // some browsers) throws InvalidStateError, which would crash all input
78521
+ // handling. Wrap the read in try/catch belt-and-suspenders even though
78522
+ // the gated types currently support it, since the list is a public
78523
+ // property a consumer could mutate.
78524
+ if (this.setSelectionInputTypes.includes(this.type)) {
78525
+ let selectionStart;
78526
+ try {
78527
+ selectionStart = this.inputElement.selectionStart;
78528
+ } catch (error) { // eslint-disable-line no-unused-vars
78529
+ return;
78530
+ }
78531
+ if (typeof selectionStart !== 'number') {
78532
+ return;
78533
+ }
78534
+ this.updateComplete.then(() => {
78535
+ try {
78536
+ this.inputElement.setSelectionRange(selectionStart, selectionStart);
78537
+ } catch (error) { // eslint-disable-line no-unused-vars
78538
+ // Some input types (number/email in certain UAs) throw on
78539
+ // setSelectionRange; swallow and let the native cursor stand.
78540
+ }
78541
+ });
78542
+ }
78869
78543
  }
78870
78544
 
78871
78545
  /**
@@ -79492,7 +79166,7 @@ let AuroHelpText$1$1 = class AuroHelpText extends i$2 {
79492
79166
  }
79493
79167
  };
79494
79168
 
79495
- var formkitVersion$1$1 = '202606252324';
79169
+ var formkitVersion$1$1 = '202606252337';
79496
79170
 
79497
79171
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
79498
79172
  // See LICENSE in the project root for license information.
@@ -79995,6 +79669,7 @@ class AuroInput extends BaseInput {
79995
79669
  <${this.buttonTag}
79996
79670
  @click="${this.handleClickShowPassword}"
79997
79671
  appearance="${this.onDark ? 'inverse' : this.appearance}"
79672
+ aria-pressed="${this.showPassword ? 'true' : 'false'}"
79998
79673
  class="notificationBtn passwordBtn"
79999
79674
  shape="circle"
80000
79675
  size="sm"
@@ -80068,25 +79743,29 @@ class AuroInput extends BaseInput {
80068
79743
  * @returns {html} - Returns HTML for the help text and error message.
80069
79744
  */
80070
79745
  renderHtmlHelpText() {
79746
+ // Single `<p>` with stable identity across validity transitions —
79747
+ // previously two distinct templates (valid vs invalid) caused Lit to
79748
+ // replace the node entirely on a flip, and VoiceOver wouldn't
79749
+ // re-announce because the live-region element it was watching had been
79750
+ // removed and a new one inserted. Keeping one node means the `role`,
79751
+ // `aria-live`, and text content all change in-place, which AT does
79752
+ // observe and announce.
79753
+ const isError = this.validity && this.validity !== 'valid';
80071
79754
  return u$d`
80072
- ${!this.validity || this.validity === undefined || this.validity === 'valid'
80073
- ? u$d`
80074
- <${this.helpTextTag}
80075
- appearance="${this.onDark ? 'inverse' : this.appearance}">
80076
- <p id="${this.uniqueId}" part="helpText">
80077
- <slot name="helpText">${this.getHelpText()}</slot>
80078
- </p>
80079
- </${this.helpTextTag}>
80080
- `
80081
- : u$d`
80082
- <${this.helpTextTag} error
80083
- appearance="${this.onDark ? 'inverse' : this.appearance}">
80084
- <p id="${this.uniqueId}" role="alert" aria-live="assertive" part="helpText">
80085
- ${this.errorMessage}
80086
- </p>
80087
- </${this.helpTextTag}>
80088
- `
80089
- }
79755
+ <${this.helpTextTag}
79756
+ appearance="${this.onDark ? 'inverse' : this.appearance}"
79757
+ ?error=${isError}>
79758
+ <p
79759
+ id="${this.uniqueId}"
79760
+ part="helpText"
79761
+ role="${o$4(isError ? 'alert' : undefined)}"
79762
+ aria-live="${o$4(isError ? 'assertive' : undefined)}">
79763
+ ${isError
79764
+ ? this.errorMessage
79765
+ : u$d`<slot name="helpText">${this.getHelpText()}</slot>`
79766
+ }
79767
+ </p>
79768
+ </${this.helpTextTag}>
80090
79769
  `;
80091
79770
  }
80092
79771
 
@@ -80613,7 +80292,7 @@ let AuroBibtemplate$1 = class AuroBibtemplate extends i$2 {
80613
80292
  }
80614
80293
  };
80615
80294
 
80616
- var formkitVersion$3 = '202606252324';
80295
+ var formkitVersion$3 = '202606252337';
80617
80296
 
80618
80297
  var styleCss$1$3 = i$4`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock{display:block}.util_displayFlex{display:flex}.util_displayHidden{display:none}.util_displayHiddenVisually{position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}:host{display:block;text-align:left}:host [auro-dropdown]{--ds-auro-dropdown-trigger-background-color: transparent}:host #inputInBib::part(wrapper){box-shadow:none}:host #inputInBib::part(accent-left){display:none}:host([layout*=classic]) [auro-input]{width:100%}:host([layout*=classic]) [auro-input]::part(helpText){display:none}:host([layout*=classic]) #slotHolder{display:none}`;
80619
80298
 
@@ -89404,7 +89083,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
89404
89083
  }
89405
89084
  };
89406
89085
 
89407
- var formkitVersion$1 = '202606252324';
89086
+ var formkitVersion$1 = '202606252337';
89408
89087
 
89409
89088
  class AuroElement extends i$2 {
89410
89089
  static get properties() {
@@ -91425,7 +91104,7 @@ class AuroHelpText extends i$2 {
91425
91104
  }
91426
91105
  }
91427
91106
 
91428
- var formkitVersion = '202606252324';
91107
+ var formkitVersion = '202606252337';
91429
91108
 
91430
91109
  var styleCss = i$4`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock{display:block}.util_displayFlex{display:flex}.util_displayHidden{display:none}.util_displayHiddenVisually{position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}.body-default{font-size:var(--wcss-body-default-font-size, 1rem);font-weight:var(--wcss-body-default-weight, );line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-default-emphasized{font-size:var(--wcss-body-default-emphasized-font-size, 1rem);font-weight:var(--wcss-body-default-emphasized-weight, );line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);font-weight:var(--wcss-body-lg-weight, );line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg,.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg-emphasized{font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);font-weight:var(--wcss-body-lg-emphasized-weight, );line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, 0.875rem);font-weight:var(--wcss-body-sm-weight, );line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-sm-emphasized{font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);font-weight:var(--wcss-body-sm-emphasized-weight, );line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-size:var(--wcss-body-xs-font-size, 0.75rem);font-weight:var(--wcss-body-xs-weight, );line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs,.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs-emphasized{font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);font-weight:var(--wcss-body-xs-emphasized-weight, );line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-size:var(--wcss-body-2xs-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-weight, );line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs,.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-2xs-emphasized{font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-emphasized-weight, );line-height:var(--wcss-body-2xs-emphasized-line-height, 0.875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));font-weight:var(--wcss-display-2xl-weight, 300);letter-spacing:var(--wcss-display-2xl-letter-spacing, 0);line-height:var(--wcss-display-2xl-line-height, 1.3)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));font-weight:var(--wcss-display-xl-weight, 300);letter-spacing:var(--wcss-display-xl-letter-spacing, 0);line-height:var(--wcss-display-xl-line-height, 1.3)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));font-weight:var(--wcss-display-lg-weight, 300);letter-spacing:var(--wcss-display-lg-letter-spacing, 0);line-height:var(--wcss-display-lg-line-height, 1.3)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));font-weight:var(--wcss-display-md-weight, 300);letter-spacing:var(--wcss-display-md-letter-spacing, 0);line-height:var(--wcss-display-md-line-height, 1.3)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));font-weight:var(--wcss-display-sm-weight, 300);letter-spacing:var(--wcss-display-sm-letter-spacing, 0);line-height:var(--wcss-display-sm-line-height, 1.3)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));font-weight:var(--wcss-display-xs-weight, 300);letter-spacing:var(--wcss-display-xs-letter-spacing, 0);line-height:var(--wcss-display-xs-line-height, 1.3)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));font-weight:var(--wcss-heading-xl-weight, 300);letter-spacing:var(--wcss-heading-xl-letter-spacing, 0);line-height:var(--wcss-heading-xl-line-height, 1.3)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));font-weight:var(--wcss-heading-lg-weight, 300);letter-spacing:var(--wcss-heading-lg-letter-spacing, 0);line-height:var(--wcss-heading-lg-line-height, 1.3)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));font-weight:var(--wcss-heading-md-weight, 300);letter-spacing:var(--wcss-heading-md-letter-spacing, 0);line-height:var(--wcss-heading-md-line-height, 1.3)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));font-weight:var(--wcss-heading-sm-weight, 300);letter-spacing:var(--wcss-heading-sm-letter-spacing, 0);line-height:var(--wcss-heading-sm-line-height, 1.3)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));font-weight:var(--wcss-heading-xs-weight, 300);letter-spacing:var(--wcss-heading-xs-letter-spacing, 0);line-height:var(--wcss-heading-xs-line-height, 1.3)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));font-weight:var(--wcss-heading-2xs-weight, 300);letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0);line-height:var(--wcss-heading-2xs-line-height, 1.3)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));font-weight:var(--wcss-accent-2xl-weight, 450);letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);line-height:var(--wcss-accent-2xl-line-height, 1)}.accent-2xl,.accent-xl{text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));font-weight:var(--wcss-accent-xl-weight, 450);letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);line-height:var(--wcss-accent-xl-line-height, 1.3)}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));font-weight:var(--wcss-accent-lg-weight, 450);letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);line-height:var(--wcss-accent-lg-line-height, 1.3)}.accent-lg,.accent-md{text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));font-weight:var(--wcss-accent-md-weight, 500);letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);line-height:var(--wcss-accent-md-line-height, 1.3)}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));font-weight:var(--wcss-accent-sm-weight, 500);letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);line-height:var(--wcss-accent-sm-line-height, 1.3)}.accent-sm,.accent-xs{text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));font-weight:var(--wcss-accent-xs-weight, 500);letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);line-height:var(--wcss-accent-xs-line-height, 1.3)}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}[auro-dropdown]{--ds-auro-dropdown-trigger-border-color: var(--ds-auro-select-border-color);--ds-auro-dropdown-trigger-background-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-container-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-outline-color: var(--ds-auro-select-outline-color)}:host{display:inline-block;text-align:left;vertical-align:top}:host([layout*=emphasized]) [auro-dropdown],:host([layout*=snowflake]) [auro-dropdown]{--ds-auro-select-border-color: transparent}:host([layout*=emphasized]) .mainContent,:host([layout*=snowflake]) .mainContent{text-align:center}.mainContent{position:relative;display:flex;overflow:hidden;flex:1;flex-direction:column;align-items:center;justify-content:center}.valueContainer [slot=displayValue]{display:none}.accents{display:flex;flex-direction:row;align-items:center;justify-content:center}::slotted([slot=typeIcon]){margin-right:var(--ds-size-100, 0.5rem)}.displayValue{display:block}.displayValue:not(.force){display:none}.displayValue:not(.force).hasContent:is(.withValue):not(.hasFocus){display:block}.triggerContent{display:flex;width:100%;align-items:center;justify-content:center}:host([layout*=emphasized]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-300, 1.5rem)}:host([layout*=snowflake]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-200, 1rem)}:host([layout*=snowflake]) label{padding-block:var(--ds-size-25, 0.125rem)}:host([layout*=classic]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem)}:host([layout*=classic]) .mainContent{align-items:start}:host([layout*=classic]) label{overflow:hidden;cursor:text;text-overflow:ellipsis;white-space:nowrap}:host([layout*=classic]) .value{height:auto}label{color:var(--ds-auro-select-label-text-color)}:host(:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-select-outline-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-default, #2a2a2a)}:host([ondark]:is([validity]:not([validity=valid]))) [auro-dropdown],:host([appearance=inverse]:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-select-outline-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}#slotHolder{display:none}:host([fluid]){width:100%}:host([disabled]){pointer-events:none;user-select:none}:host([disabled]:not([ondark])) [auro-dropdown],:host([disabled]:not([appearance=inverse])) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-border-subtle, #dddddd)}:host(:not([layout*=classic])[disabled][ondark]) [auro-dropdown],:host(:not([layout*=classic])[disabled][appearance=inverse]) [auro-dropdown]{--ds-auro-select-border-color: transparent}`;
91431
91110