@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
@@ -6176,7 +6176,7 @@ function normalizeDates$3(context, ...dates) {
6176
6176
  * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))
6177
6177
  * //=> Tue Sep 02 2014 00:00:00
6178
6178
  */
6179
- function startOfDay$3(date, options) {
6179
+ function startOfDay$4(date, options) {
6180
6180
  const _date = toDate$3(date, options?.in);
6181
6181
  _date.setHours(0, 0, 0, 0);
6182
6182
  return _date;
@@ -6224,8 +6224,8 @@ function differenceInCalendarDays$3(laterDate, earlierDate, options) {
6224
6224
  earlierDate,
6225
6225
  );
6226
6226
 
6227
- const laterStartOfDay = startOfDay$3(laterDate_);
6228
- const earlierStartOfDay = startOfDay$3(earlierDate_);
6227
+ const laterStartOfDay = startOfDay$4(laterDate_);
6228
+ const earlierStartOfDay = startOfDay$4(earlierDate_);
6229
6229
 
6230
6230
  const laterTimestamp =
6231
6231
  +laterStartOfDay - getTimezoneOffsetInMilliseconds$3(laterStartOfDay);
@@ -11497,6 +11497,13 @@ let AuroInputUtilities$3 = class AuroInputUtilities {
11497
11497
  * @returns {string | undefined}
11498
11498
  */
11499
11499
  toFormattedValue(valueObject, format) {
11500
+ // Exposed publicly via `AuroInputUtil.toFormattedValue`, so a missing
11501
+ // `format` argument has to fail gracefully rather than throw on
11502
+ // `format.toLowerCase()`. Treat any falsy value (undefined, null, '')
11503
+ // as "no format → no display value".
11504
+ if (!format) {
11505
+ return undefined;
11506
+ }
11500
11507
  const normalizedFormat = format.toLowerCase();
11501
11508
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
11502
11509
 
@@ -11647,79 +11654,18 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11647
11654
  constructor() {
11648
11655
  super();
11649
11656
 
11650
- this.appearance = "default";
11651
- this.disabled = false;
11652
- this.layout = 'classic';
11653
- this.locale = 'en-US';
11654
- this.max = undefined;
11655
- this._maxObject = undefined;
11656
- this.maxLength = undefined;
11657
- this.min = undefined;
11658
- this._minObject = undefined;
11659
- this.minLength = undefined;
11660
- this.required = false;
11661
- this.onDark = false;
11662
- this.setCustomValidityForType = undefined;
11663
- this.size = 'lg';
11664
- this.shape = 'classic';
11665
- this.value = undefined;
11666
- this._valueObject = undefined;
11667
-
11668
- this._initializePrivateDefaults();
11669
- }
11670
-
11671
- /**
11672
- * Internal Defaults.
11673
- * @private
11674
- * @returns {void}
11675
- */
11676
- _initializePrivateDefaults() {
11657
+ // Single-source initialization. Alphabetized so duplicate or stale
11658
+ // defaults are immediately obvious on a diff. Every field is assigned
11659
+ // exactly once here (previously the constructor + the old
11660
+ // `_initializePrivateDefaults` overlapped — both wrote ~14 of the same
11661
+ // fields and double-allocated `util` and `validation`, discarding the
11662
+ // first instance). `validation` is now allocated exactly once; `util`
11663
+ // is seeded here with an en-US default and then rebuilt in
11664
+ // `connectedCallback` once the consumer-resolved locale is available,
11665
+ // so a parent (datepicker/combobox) calling `validate()` synchronously
11666
+ // during its own update cycle sees a populated util instance.
11677
11667
  this.activeLabel = false;
11678
- this.appearance = "default";
11679
- this.icon = false;
11680
- this.disabled = false;
11681
- this.dvInputOnly = false;
11682
- this.hideLabelVisually = false;
11683
- this.max = undefined;
11684
- this.maxLength = undefined;
11685
- this.min = undefined;
11686
- this.minLength = undefined;
11687
- this.noValidate = false;
11688
- this.onDark = false;
11689
- this.required = false;
11690
- this.setCustomValidityForType = undefined;
11691
-
11692
- // Used for storing raw values returned from input mask.
11693
- this._rawMaskValue = undefined;
11694
-
11695
- /**
11696
- * @private
11697
- */
11698
- this.layout = 'classic';
11699
-
11700
- /**
11701
- * @private
11702
- */
11703
- this.shape = 'classic';
11704
-
11705
- /**
11706
- * @private
11707
- */
11708
- this.size = 'lg';
11709
-
11710
- this.touched = false;
11711
- this.util = new AuroInputUtilities$3({
11712
- locale: "en-US",
11713
- format: this.format
11714
- });
11715
- this.validation = new AuroFormValidation$7();
11716
- this.inputIconName = undefined;
11717
- this.showPassword = false;
11718
- this.validationCCLength = undefined;
11719
- this.hasValue = false;
11720
- this.label = 'Input label is undefined';
11721
-
11722
-
11668
+ /** @private */
11723
11669
  this.allowedInputTypes = [
11724
11670
  "text",
11725
11671
  "number",
@@ -11728,7 +11674,8 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11728
11674
  "credit-card",
11729
11675
  "tel"
11730
11676
  ];
11731
- this.icon = false;
11677
+ this.appearance = "default";
11678
+ /** @private */
11732
11679
  this.dateFormatMap = {
11733
11680
  'mm/dd/yyyy': 'dateMMDDYYYY',
11734
11681
  'dd/mm/yyyy': 'dateDDMMYYYY',
@@ -11745,27 +11692,57 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11745
11692
  'dd/mm': 'dateDDMM',
11746
11693
  'mm/dd': 'dateMMDD'
11747
11694
  };
11695
+ this.disabled = false;
11696
+ /** @private */
11748
11697
  this.domHandler = new DomHandler$3();
11749
11698
  this.dvInputOnly = false;
11750
11699
  this.hasValue = false;
11700
+ this.hideLabelVisually = false;
11701
+ this.icon = false;
11702
+ /** @private */
11751
11703
  this.inputIconName = undefined;
11704
+ /** @private */
11752
11705
  this.label = 'Input label is undefined';
11706
+ this.layout = 'classic';
11707
+ this.locale = 'en-US';
11708
+ this.max = undefined;
11709
+ this._maxObject = undefined;
11710
+ this.maxLength = undefined;
11711
+ this.min = undefined;
11712
+ this._minObject = undefined;
11713
+ this.minLength = undefined;
11753
11714
  this.noValidate = false;
11754
- this._rawMaskValue = undefined; // Used for storing raw values returned from input mask.
11715
+ this.onDark = false;
11716
+ // Raw values returned from the input mask before model normalization.
11717
+ this._rawMaskValue = undefined;
11718
+ this.required = false;
11719
+ this.setCustomValidityForType = undefined;
11720
+ // Credit Card is intentionally excluded — its mask manages the cursor
11721
+ // itself, and listing it here caused cursor placement issues in Safari.
11722
+ /** @private */
11755
11723
  this.setSelectionInputTypes = [
11756
11724
  "text",
11757
11725
  "password",
11758
11726
  "email"
11759
- ]; // Credit Card is not included as this caused cursor placement issues in Safari.
11727
+ ];
11728
+ this.shape = 'classic';
11729
+ /** @private */
11760
11730
  this.showPassword = false;
11731
+ this.size = 'lg';
11761
11732
  this.touched = false;
11733
+ /** @private */
11762
11734
  this.uniqueId = new UniqueId$2().create();
11735
+ /** @private */
11763
11736
  this.util = new AuroInputUtilities$3({
11764
11737
  locale: this.locale,
11765
11738
  format: this.format
11766
11739
  });
11740
+ /** @private */
11767
11741
  this.validation = new AuroFormValidation$7();
11742
+ /** @private */
11768
11743
  this.validationCCLength = undefined;
11744
+ this.value = undefined;
11745
+ this._valueObject = undefined;
11769
11746
  }
11770
11747
 
11771
11748
  // function to define props used within the scope of this component
@@ -12313,6 +12290,15 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12313
12290
 
12314
12291
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
12315
12292
 
12293
+ // Normalize the format token to lowercase so case-mixed values supplied
12294
+ // via attribute (e.g. `format="MM/DD/YYYY"`) hit the `dateFormatMap`
12295
+ // lookup inside `setCustomHelpTextMessage`. Without this, an uppercase
12296
+ // format silently misses the map and leaves `setCustomValidityForType`
12297
+ // unset.
12298
+ if (this.format) {
12299
+ this.format = this.format.toLowerCase();
12300
+ }
12301
+
12316
12302
  // use validity message override if declared when initializing the component
12317
12303
  if (this.hasAttribute('setCustomValidity')) {
12318
12304
  this.ValidityMessageOverride = this.setCustomValidity;
@@ -12746,6 +12732,38 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12746
12732
  this.touched = true;
12747
12733
  this.validation.validate(this);
12748
12734
  }
12735
+
12736
+ // Prevents cursor jumping in Safari. Setting `this.value` triggers a Lit
12737
+ // update that can re-render the input and reset the native cursor; we
12738
+ // capture the caret position before that update commits and restore it
12739
+ // via `setSelectionRange` once the update has flushed. Gated on
12740
+ // `setSelectionInputTypes` so credit-card (and other masked types whose
12741
+ // formatter manages the cursor itself) doesn't get a competing write.
12742
+ // Capture the caret position INSIDE the gate — reading `selectionStart`
12743
+ // on input types that don't support text selection (number, email in
12744
+ // some browsers) throws InvalidStateError, which would crash all input
12745
+ // handling. Wrap the read in try/catch belt-and-suspenders even though
12746
+ // the gated types currently support it, since the list is a public
12747
+ // property a consumer could mutate.
12748
+ if (this.setSelectionInputTypes.includes(this.type)) {
12749
+ let selectionStart;
12750
+ try {
12751
+ selectionStart = this.inputElement.selectionStart;
12752
+ } catch (error) { // eslint-disable-line no-unused-vars
12753
+ return;
12754
+ }
12755
+ if (typeof selectionStart !== 'number') {
12756
+ return;
12757
+ }
12758
+ this.updateComplete.then(() => {
12759
+ try {
12760
+ this.inputElement.setSelectionRange(selectionStart, selectionStart);
12761
+ } catch (error) { // eslint-disable-line no-unused-vars
12762
+ // Some input types (number/email in certain UAs) throw on
12763
+ // setSelectionRange; swallow and let the native cursor stand.
12764
+ }
12765
+ });
12766
+ }
12749
12767
  }
12750
12768
 
12751
12769
  /**
@@ -13372,7 +13390,7 @@ let AuroHelpText$8 = class AuroHelpText extends i$3 {
13372
13390
  }
13373
13391
  };
13374
13392
 
13375
- var formkitVersion$8 = '202606252324';
13393
+ var formkitVersion$8 = '202606252337';
13376
13394
 
13377
13395
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
13378
13396
  // See LICENSE in the project root for license information.
@@ -13875,6 +13893,7 @@ let AuroInput$2 = class AuroInput extends BaseInput$2 {
13875
13893
  <${this.buttonTag}
13876
13894
  @click="${this.handleClickShowPassword}"
13877
13895
  appearance="${this.onDark ? 'inverse' : this.appearance}"
13896
+ aria-pressed="${this.showPassword ? 'true' : 'false'}"
13878
13897
  class="notificationBtn passwordBtn"
13879
13898
  shape="circle"
13880
13899
  size="sm"
@@ -13948,25 +13967,29 @@ let AuroInput$2 = class AuroInput extends BaseInput$2 {
13948
13967
  * @returns {html} - Returns HTML for the help text and error message.
13949
13968
  */
13950
13969
  renderHtmlHelpText() {
13970
+ // Single `<p>` with stable identity across validity transitions —
13971
+ // previously two distinct templates (valid vs invalid) caused Lit to
13972
+ // replace the node entirely on a flip, and VoiceOver wouldn't
13973
+ // re-announce because the live-region element it was watching had been
13974
+ // removed and a new one inserted. Keeping one node means the `role`,
13975
+ // `aria-live`, and text content all change in-place, which AT does
13976
+ // observe and announce.
13977
+ const isError = this.validity && this.validity !== 'valid';
13951
13978
  return u$c`
13952
- ${!this.validity || this.validity === undefined || this.validity === 'valid'
13953
- ? u$c`
13954
- <${this.helpTextTag}
13955
- appearance="${this.onDark ? 'inverse' : this.appearance}">
13956
- <p id="${this.uniqueId}" part="helpText">
13957
- <slot name="helpText">${this.getHelpText()}</slot>
13958
- </p>
13959
- </${this.helpTextTag}>
13960
- `
13961
- : u$c`
13962
- <${this.helpTextTag} error
13963
- appearance="${this.onDark ? 'inverse' : this.appearance}">
13964
- <p id="${this.uniqueId}" role="alert" aria-live="assertive" part="helpText">
13965
- ${this.errorMessage}
13966
- </p>
13967
- </${this.helpTextTag}>
13968
- `
13969
- }
13979
+ <${this.helpTextTag}
13980
+ appearance="${this.onDark ? 'inverse' : this.appearance}"
13981
+ ?error=${isError}>
13982
+ <p
13983
+ id="${this.uniqueId}"
13984
+ part="helpText"
13985
+ role="${o$4(isError ? 'alert' : undefined)}"
13986
+ aria-live="${o$4(isError ? 'assertive' : undefined)}">
13987
+ ${isError
13988
+ ? this.errorMessage
13989
+ : u$c`<slot name="helpText">${this.getHelpText()}</slot>`
13990
+ }
13991
+ </p>
13992
+ </${this.helpTextTag}>
13970
13993
  `;
13971
13994
  }
13972
13995
 
@@ -15456,7 +15479,7 @@ function normalizeDates$1(context, ...dates) {
15456
15479
  * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))
15457
15480
  * //=> Tue Sep 02 2014 00:00:00
15458
15481
  */
15459
- function startOfDay$1(date, options) {
15482
+ function startOfDay$2(date, options) {
15460
15483
  const _date = toDate$1(date, options?.in);
15461
15484
  _date.setHours(0, 0, 0, 0);
15462
15485
  return _date;
@@ -15504,8 +15527,8 @@ function differenceInCalendarDays$1(laterDate, earlierDate, options) {
15504
15527
  earlierDate,
15505
15528
  );
15506
15529
 
15507
- const laterStartOfDay = startOfDay$1(laterDate_);
15508
- const earlierStartOfDay = startOfDay$1(earlierDate_);
15530
+ const laterStartOfDay = startOfDay$2(laterDate_);
15531
+ const earlierStartOfDay = startOfDay$2(earlierDate_);
15509
15532
 
15510
15533
  const laterTimestamp =
15511
15534
  +laterStartOfDay - getTimezoneOffsetInMilliseconds$1(laterStartOfDay);
@@ -24607,6 +24630,13 @@ let AuroInputUtilities$1 = class AuroInputUtilities {
24607
24630
  * @returns {string | undefined}
24608
24631
  */
24609
24632
  toFormattedValue(valueObject, format) {
24633
+ // Exposed publicly via `AuroInputUtil.toFormattedValue`, so a missing
24634
+ // `format` argument has to fail gracefully rather than throw on
24635
+ // `format.toLowerCase()`. Treat any falsy value (undefined, null, '')
24636
+ // as "no format → no display value".
24637
+ if (!format) {
24638
+ return undefined;
24639
+ }
24610
24640
  const normalizedFormat = format.toLowerCase();
24611
24641
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
24612
24642
 
@@ -24962,8 +24992,8 @@ class RangeDatepickerCell extends i$3 {
24962
24992
  const parsedDateFrom = parseInt(dateFrom, 10);
24963
24993
  const parsedDateTo = parseInt(dateTo, 10);
24964
24994
  if (day) {
24965
- if (getTime(startOfDay$1(parsedDateTo * 1000)) / 1000 === day.date ||
24966
- getTime(startOfDay$1(parsedDateFrom * 1000)) / 1000 === day.date) {
24995
+ if (getTime(startOfDay$2(parsedDateTo * 1000)) / 1000 === day.date ||
24996
+ getTime(startOfDay$2(parsedDateFrom * 1000)) / 1000 === day.date) {
24967
24997
  this.selected = true;
24968
24998
  }
24969
24999
  if (((hoveredDate === day.date || day.date < hoveredDate) &&
@@ -25151,7 +25181,7 @@ class RangeDatepickerCalendar extends i$3 {
25151
25181
  this.dayNamesOfTheWeek = [];
25152
25182
  this.daysOfMonth = [];
25153
25183
  this._locale = null;
25154
- this.currentDate = parseInt(format$1(startOfDay$1(Date.now()), 't'), 10);
25184
+ this.currentDate = parseInt(format$1(startOfDay$2(Date.now()), 't'), 10);
25155
25185
  this.localeChanged();
25156
25186
  this.yearAndMonthChanged(this.year, this.month);
25157
25187
  }
@@ -25625,7 +25655,7 @@ __decorate([n$4({ type: Array })], RangeDatepickerCalendar.prototype, "dayNamesO
25625
25655
  __decorate([n$4({ type: Array })], RangeDatepickerCalendar.prototype, "daysOfMonth", void 0);
25626
25656
  AuroLibraryRuntimeUtils$5$1.prototype.registerComponent('wc-range-datepicker-calendar', RangeDatepickerCalendar);
25627
25657
 
25628
- var styleCss$5$2 = i$6`.body-default{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-emphasized-font-size, 1rem);line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-font-size, 0.875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-font-size, 0.75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-font-size, 0.625rem);line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);line-height:var(--wcss-body-2xs-emphasized-line-height, 0.875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-2xl-weight, 300);line-height:var(--wcss-display-2xl-line-height, 1.3);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));letter-spacing:var(--wcss-display-2xl-letter-spacing, 0)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xl-weight, 300);line-height:var(--wcss-display-xl-line-height, 1.3);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));letter-spacing:var(--wcss-display-xl-letter-spacing, 0)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-lg-weight, 300);line-height:var(--wcss-display-lg-line-height, 1.3);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));letter-spacing:var(--wcss-display-lg-letter-spacing, 0)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-md-weight, 300);line-height:var(--wcss-display-md-line-height, 1.3);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));letter-spacing:var(--wcss-display-md-letter-spacing, 0)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-sm-weight, 300);line-height:var(--wcss-display-sm-line-height, 1.3);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));letter-spacing:var(--wcss-display-sm-letter-spacing, 0)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xs-weight, 300);line-height:var(--wcss-display-xs-line-height, 1.3);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));letter-spacing:var(--wcss-display-xs-letter-spacing, 0)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xl-weight, 300);line-height:var(--wcss-heading-xl-line-height, 1.3);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));letter-spacing:var(--wcss-heading-xl-letter-spacing, 0)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-lg-weight, 300);line-height:var(--wcss-heading-lg-line-height, 1.3);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));letter-spacing:var(--wcss-heading-lg-letter-spacing, 0)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-md-weight, 300);line-height:var(--wcss-heading-md-line-height, 1.3);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));letter-spacing:var(--wcss-heading-md-letter-spacing, 0)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-sm-weight, 300);line-height:var(--wcss-heading-sm-line-height, 1.3);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));letter-spacing:var(--wcss-heading-sm-letter-spacing, 0)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xs-weight, 300);line-height:var(--wcss-heading-xs-line-height, 1.3);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));letter-spacing:var(--wcss-heading-xs-letter-spacing, 0)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-2xs-weight, 300);line-height:var(--wcss-heading-2xs-line-height, 1.3);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xl-weight, 450);line-height:var(--wcss-accent-2xl-line-height, 1);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xl-weight, 450);line-height:var(--wcss-accent-xl-line-height, 1.3);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-lg-weight, 450);line-height:var(--wcss-accent-lg-line-height, 1.3);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-md-weight, 500);line-height:var(--wcss-accent-md-line-height, 1.3);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);text-transform:uppercase}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-sm-weight, 500);line-height:var(--wcss-accent-sm-line-height, 1.3);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xs-weight, 500);line-height:var(--wcss-accent-xs-line-height, 1.3);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);text-transform:uppercase}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xs-weight, 450);line-height:var(--wcss-accent-2xs-line-height, 1.3);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);text-transform:uppercase}@media screen and (max-width: 576px){:host{display:flex;justify-content:center}}.day{position:relative;width:48px;height:56px;padding:0;border-width:2px;border-style:solid;border-radius:10px;cursor:pointer;user-select:none}.day:focus-visible{outline:none;background-color:unset}.day.activeCell{outline-width:2px;outline-style:solid;outline-offset:-4px}.day.disabled{cursor:default !important;pointer-events:none}.day.blackout{cursor:pointer}.day.reference:after{position:absolute;top:-2px;left:-2px;display:block;width:calc(100% + 2px);height:calc(100% + 2px);box-sizing:content-box;border-radius:10px;border-style:solid;border-width:1px;content:""}.day.inRange::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:""}.day.rangeDepartDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:10px 0 0 10px;overflow:hidden}.day.rangeReturnDate::before,.day.lastHoveredDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:0 10px 10px 0;overflow:hidden}.day.rangeDepartDate.lastHoveredDate::before{border-radius:10px}.day.firstDayOfMonth::before{border-radius:10px 0 0 10px;overflow:hidden}.day.lastDayOfMonth::before{border-radius:0 10px 10px 0;overflow:hidden}.buttonWrapper{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}.dateSlot{display:block}::slotted([slot^=date_]){width:100%;white-space:nowrap}::slotted(auro-icon){max-height:24px;max-width:24px}:host([renderForDateSlot]) .buttonWrapper{position:relative;width:100%;height:100%}:host([renderForDateSlot]) .currentDayMarker{position:relative}`;
25658
+ var styleCss$5$2 = i$6`.body-default{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-default-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-default-emphasized-font-size, 1rem);line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-lg-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-font-size, 0.875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-sm-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-font-size, 0.75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-font-size, 0.625rem);line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-2xs-emphasized-weight, );letter-spacing:var(--wcss-body-letter-spacing, 0);font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);line-height:var(--wcss-body-2xs-emphasized-line-height, 0.875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-2xl-weight, 300);line-height:var(--wcss-display-2xl-line-height, 1.3);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));letter-spacing:var(--wcss-display-2xl-letter-spacing, 0)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xl-weight, 300);line-height:var(--wcss-display-xl-line-height, 1.3);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));letter-spacing:var(--wcss-display-xl-letter-spacing, 0)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-lg-weight, 300);line-height:var(--wcss-display-lg-line-height, 1.3);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));letter-spacing:var(--wcss-display-lg-letter-spacing, 0)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-md-weight, 300);line-height:var(--wcss-display-md-line-height, 1.3);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));letter-spacing:var(--wcss-display-md-letter-spacing, 0)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-sm-weight, 300);line-height:var(--wcss-display-sm-line-height, 1.3);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));letter-spacing:var(--wcss-display-sm-letter-spacing, 0)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-display-xs-weight, 300);line-height:var(--wcss-display-xs-line-height, 1.3);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));letter-spacing:var(--wcss-display-xs-letter-spacing, 0)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xl-weight, 300);line-height:var(--wcss-heading-xl-line-height, 1.3);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));letter-spacing:var(--wcss-heading-xl-letter-spacing, 0)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-lg-weight, 300);line-height:var(--wcss-heading-lg-line-height, 1.3);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));letter-spacing:var(--wcss-heading-lg-letter-spacing, 0)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-md-weight, 300);line-height:var(--wcss-heading-md-line-height, 1.3);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));letter-spacing:var(--wcss-heading-md-letter-spacing, 0)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-sm-weight, 300);line-height:var(--wcss-heading-sm-line-height, 1.3);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));letter-spacing:var(--wcss-heading-sm-letter-spacing, 0)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-xs-weight, 300);line-height:var(--wcss-heading-xs-line-height, 1.3);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));letter-spacing:var(--wcss-heading-xs-letter-spacing, 0)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-heading-2xs-weight, 300);line-height:var(--wcss-heading-2xs-line-height, 1.3);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xl-weight, 450);line-height:var(--wcss-accent-2xl-line-height, 1);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xl-weight, 450);line-height:var(--wcss-accent-xl-line-height, 1.3);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);text-transform:uppercase}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-lg-weight, 450);line-height:var(--wcss-accent-lg-line-height, 1.3);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-md-weight, 500);line-height:var(--wcss-accent-md-line-height, 1.3);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);text-transform:uppercase}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-sm-weight, 500);line-height:var(--wcss-accent-sm-line-height, 1.3);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-xs-weight, 500);line-height:var(--wcss-accent-xs-line-height, 1.3);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);text-transform:uppercase}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-weight:var(--wcss-accent-2xs-weight, 450);line-height:var(--wcss-accent-2xs-line-height, 1.3);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);text-transform:uppercase}@media screen and (max-width: 576px){:host{display:flex;justify-content:center}}.day{position:relative;width:48px;height:56px;padding:0;border-width:2px;border-style:solid;border-radius:10px;cursor:pointer;user-select:none}.day:focus-visible{outline:none;background-color:unset}.day.activeCell{outline-width:2px;outline-style:solid;outline-offset:-4px}.day.disabled{cursor:default !important;pointer-events:none}.day.blackout{cursor:pointer}.day.reference:after{position:absolute;top:-2px;left:-2px;display:block;width:calc(100% + 2px);height:calc(100% + 2px);box-sizing:content-box;border-radius:10px;border-style:solid;border-width:1px;content:""}.day.inRange::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:""}.day.rangeDepartDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:10px 0 0 10px;overflow:hidden}.day.rangeReturnDate::before,.day.lastHoveredDate::before{position:absolute;z-index:-1;top:-2px;left:-2px;display:block;width:calc(100% + 4px);height:calc(100% + 4px);box-sizing:content-box;content:"";border-radius:0 10px 10px 0;overflow:hidden}.day.firstDayOfMonth::before{border-radius:10px 0 0 10px;overflow:hidden}.day.lastDayOfMonth::before{border-radius:0 10px 10px 0;overflow:hidden}.buttonWrapper{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}.dateSlot{display:block}::slotted([slot^=date_]){width:100%;white-space:nowrap}::slotted(auro-icon){max-height:24px;max-width:24px}:host([renderForDateSlot]) .buttonWrapper{position:relative;width:100%;height:100%}:host([renderForDateSlot]) .currentDayMarker{position:relative}`;
25629
25659
 
25630
25660
  var colorCss$5$2 = i$6`:host ::slotted([slot^=date_]){color:var(--ds-auro-calendar-cell-price-text-color)}:host ::slotted([slot^=date_][highlight]){--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-status-success, #447a1f)}:host .day{border-color:var(--ds-auro-calendar-cell-border-color);background-color:var(--ds-auro-calendar-cell-container-color);color:var(--ds-auro-calendar-cell-text-color)}:host .day.activeCell:not(.selected){--ds-auro-calendar-cell-container-color: var(--ds-auro-calendar-cell-in-range-color);border-color:var(--ds-advanced-color-state-selected);outline-color:var(--ds-auro-calendar-cell-container-color)}:host .day.selected{--ds-auro-calendar-cell-container-color: var(--ds-advanced-color-state-selected, #01426a);--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-inverse, #ffffff);--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host .day.selected ::slotted([slot^=date_][highlight]){--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-status-success-subtle, #d6eac7)}:host .day.selected:hover{--ds-auro-calendar-cell-container-color: var(--ds-advanced-color-state-selected-hover, #00274a);--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host .day.reference:after{border-color:var(--ds-basic-color-border-default, #959595);box-shadow:inset 0 0 0 2px var(--ds-basic-color-surface-default, #ffffff)}:host .day.reference:hover::after{box-shadow:inset 0 0 0 2px var(--ds-advanced-color-shared-background-muted, #f7f7f7)}:host .day:hover{--ds-auro-calendar-cell-container-color: var(--ds-advanced-color-state-background-hover, #f2f2f2);--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-default, #2a2a2a)}:host .day.disabled{--ds-auro-calendar-cell-container-color: transparent;--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0);--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0)}:host .day.blackout{--ds-auro-calendar-cell-container-color: transparent;--ds-auro-calendar-cell-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0);--ds-auro-calendar-cell-price-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0)}:host .day.inRange:before,:host .day.rangeDepartDate:before,:host .day.rangeReturnDate:before,:host .day.lastHoveredDate:before{background-color:var(--ds-auro-calendar-cell-in-range-color)}:host .day.sameDateTrip:before{--ds-auro-calendar-cell-in-range-color: transparent}`;
25631
25661
 
@@ -25650,104 +25680,14 @@ class s{registerComponent(e,t){customElements.get(e)||customElements.define(e,cl
25650
25680
 
25651
25681
  var popoverVersion = '6.0.1';
25652
25682
 
25653
- /**
25654
- * Single source of truth for parsing and matching blackout dates across the
25655
- * datepicker. Both `auro-calendar` (memoized Set + `isDateBlackout`) and the
25656
- * pre-`firstUpdated` fallback inside `auro-calendar-cell` route through these
25657
- * helpers so the YYYY-MM-DD → seconds conversion and the merge-with-legacy
25658
- * `disabledDays` rules are defined exactly once.
25659
- */
25660
-
25661
- /**
25662
- * Converts a `YYYY-MM-DD` ISO date string to a Unix timestamp (seconds)
25663
- * representing local midnight on that calendar day. Returns `null` for
25664
- * inputs that don't parse to a finite timestamp.
25665
- *
25666
- * Uses the `new Date(year, monthIndex, day)` constructor (NOT
25667
- * `new Date(isoStr)`) so the result is local-midnight rather than UTC
25668
- * midnight — required to keep the calendar grid aligned with the user's
25669
- * local calendar day in negative-offset timezones.
25670
- *
25671
- * @param {string} isoStr - Date string in `YYYY-MM-DD` format.
25672
- * @returns {number|null} Local-midnight Unix timestamp (seconds), or null.
25673
- */
25674
- function parseIsoToTimestamp(isoStr) {
25675
- if (typeof isoStr !== 'string') {
25676
- return null;
25677
- }
25678
- const parts = isoStr.split('-');
25679
- if (parts.length !== 3) {
25680
- return null;
25681
- }
25682
- const year = parseInt(parts[0], 10);
25683
- const month = parseInt(parts[1], 10);
25684
- const day = parseInt(parts[2], 10);
25685
- if (!Number.isFinite(year) || !Number.isFinite(month) || !Number.isFinite(day)) {
25686
- return null;
25687
- }
25688
- // Reject overflow values like "2024-13-40" — JS `new Date(year, month, day)`
25689
- // silently normalizes those to a different calendar day, which would
25690
- // disable the wrong date if we let the result through.
25691
- if (month < 1 || month > 12 || day < 1 || day > 31) {
25692
- return null;
25693
- }
25694
- const date = new Date(year, month - 1, day);
25695
- // Guard the residual case where JS still rolls a value (e.g. Feb 30 → Mar 2).
25696
- // After construction, getFullYear/getMonth/getDate should match the inputs.
25697
- if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {
25698
- return null;
25699
- }
25700
- const ts = Math.floor(date.getTime() / 1000);
25701
- return Number.isFinite(ts) ? ts : null;
25702
- }
25703
-
25704
- /**
25705
- * Builds a `Set<number>` of seconds-since-epoch timestamps covering both the
25706
- * legacy `disabledDays` (already-numeric) array and the ISO `blackoutDates`
25707
- * array. Use this for O(1) membership checks in hot paths.
25708
- *
25709
- * @param {Array<string|number>|undefined} disabledDays - Legacy timestamp array.
25710
- * @param {Array<string>|undefined} blackoutDates - ISO `YYYY-MM-DD` array.
25711
- * @returns {Set<number>}
25712
- */
25713
- function buildBlackoutSet(disabledDays, blackoutDates) {
25714
- const set = new Set();
25715
- if (Array.isArray(disabledDays)) {
25716
- for (const day of disabledDays) {
25717
- const ts = parseInt(day, 10);
25718
- if (Number.isFinite(ts)) {
25719
- set.add(ts);
25720
- }
25721
- }
25722
- }
25723
- if (Array.isArray(blackoutDates)) {
25724
- for (const isoStr of blackoutDates) {
25725
- const ts = parseIsoToTimestamp(isoStr);
25726
- if (ts !== null) {
25727
- set.add(ts);
25728
- }
25729
- }
25730
- }
25731
- return set;
25732
- }
25733
-
25734
- /**
25735
- * One-shot membership test for a single timestamp against both blackout
25736
- * sources. Allocates a Set on each call; only use this in cold paths
25737
- * (e.g. the pre-`firstUpdated` cell fallback). Hot paths should hold the
25738
- * Set returned from `buildBlackoutSet` and `.has(ts)` directly.
25739
- *
25740
- * @param {number} dateTs - Unix timestamp (seconds) to test.
25741
- * @param {Array<string|number>|undefined} disabledDays - Legacy timestamp array.
25742
- * @param {Array<string>|undefined} blackoutDates - ISO `YYYY-MM-DD` array.
25743
- * @returns {boolean}
25744
- */
25745
- function isBlackoutTimestamp(dateTs, disabledDays, blackoutDates) {
25746
- return buildBlackoutSet(disabledDays, blackoutDates).has(dateTs);
25747
- }
25748
-
25749
25683
  /* 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 */
25750
25684
 
25685
+ const startOfDay$1 = (ms) => {
25686
+ const date = new Date(ms);
25687
+ date.setHours(0, 0, 0, 0);
25688
+ return date.getTime();
25689
+ };
25690
+
25751
25691
  class AuroCalendarCell extends i$3 {
25752
25692
  constructor() {
25753
25693
  super();
@@ -25794,14 +25734,6 @@ class AuroCalendarCell extends i$3 {
25794
25734
  type: Boolean,
25795
25735
  reflect: true
25796
25736
  },
25797
- /**
25798
- * @deprecated Propagated from the legacy `auro-calendar.disabledDays`
25799
- * Unix-timestamp array. The cell honors it for backward compatibility
25800
- * (see the divergence-check fallback inside `isBlackout`), but
25801
- * consumers should migrate to `auro-datepicker.blackoutDates`
25802
- * (YYYY-MM-DD ISO strings). The calendar emits a one-time
25803
- * deprecation warning the first time a non-empty value is observed.
25804
- */
25805
25737
  disabledDays: { type: Array },
25806
25738
  isCurrentDate: { type: Boolean },
25807
25739
  locale: { type: String },
@@ -25847,8 +25779,8 @@ class AuroCalendarCell extends i$3 {
25847
25779
  const parsedDateTo = parseInt(dateTo, 10);
25848
25780
 
25849
25781
  if (day) {
25850
- const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
25851
- const returnTimestamp = new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000;
25782
+ const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
25783
+ const returnTimestamp = startOfDay$1(parsedDateTo * 1000) / 1000;
25852
25784
 
25853
25785
  if (day.date === departTimestamp || day.date === returnTimestamp) {
25854
25786
  this.selected = true;
@@ -25932,33 +25864,27 @@ class AuroCalendarCell extends i$3 {
25932
25864
  return false;
25933
25865
  }
25934
25866
 
25935
- // Delegate to the calendar's memoized blackout Set for O(1) lookup
25936
- // (instead of rescanning disabledDays + blackoutDates per render). The
25937
- // Set is rebuilt only when either source array reference changes — see
25938
- // auro-calendar.js#_getBlackoutSet.
25939
- if (this.calendar && typeof this.calendar._getBlackoutSet === 'function') {
25940
- if (this.calendar._getBlackoutSet().has(this.day.date)) {
25867
+ // Check against disabledDays timestamps (legacy path)
25868
+ if (Array.isArray(this.disabledDays) && this.disabledDays.length > 0 &&
25869
+ (this.disabledDays.findIndex(dd => parseInt(dd, 10) === this.day.date) !== -1)) {
25870
+ return true;
25871
+ }
25872
+
25873
+ // Check against blackoutDates (ISO format YYYY-MM-DD) on the datepicker
25874
+ const blackoutDates = this.datepicker?.blackoutDates;
25875
+
25876
+ if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
25877
+ const date = new Date(this.day.date * 1000);
25878
+ const yyyy = date.getFullYear();
25879
+ const mm = String(date.getMonth() + 1).padStart(2, '0');
25880
+ const dd = String(date.getDate()).padStart(2, '0');
25881
+ const cellDate = `${yyyy}-${mm}-${dd}`;
25882
+ if (blackoutDates.includes(cellDate)) {
25941
25883
  return true;
25942
25884
  }
25943
- // If the cell's local disabledDays diverged from the calendar's (a
25944
- // consumer or test mutated cell.disabledDays directly), the Set does
25945
- // not reflect that addition — fall through to the per-cell scan only
25946
- // when the reference no longer matches. Production data flow keeps
25947
- // these identical, so this branch stays cold. Guarded with
25948
- // Array.isArray to match `_getBlackoutSet`'s contract: non-array
25949
- // values are treated as empty rather than crashing on `.findIndex`.
25950
- if (Array.isArray(this.disabledDays) && this.disabledDays !== this.calendar.disabledDays && this.disabledDays.length > 0) {
25951
- if (this.disabledDays.findIndex((dd) => parseInt(dd, 10) === this.day.date) !== -1) {
25952
- return true;
25953
- }
25954
- }
25955
- return false;
25956
25885
  }
25957
25886
 
25958
- // Pre-firstUpdated fallback — the cell may render once before the
25959
- // ancestor calendar is wired up. Routes through the shared
25960
- // blackoutUtils helper so the parsing rules stay in one place.
25961
- return isBlackoutTimestamp(this.day.date, this.disabledDays, this.datepicker?.blackoutDates);
25887
+ return false;
25962
25888
  }
25963
25889
 
25964
25890
  /**
@@ -26064,12 +25990,12 @@ class AuroCalendarCell extends i$3 {
26064
25990
  const parsedDateFrom = Number.parseInt(this.dateFrom, 10);
26065
25991
  if (!Number.isFinite(parsedDateFrom)) return null;
26066
25992
 
26067
- const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
25993
+ const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
26068
25994
  const dayDate = this.day.date;
26069
25995
 
26070
25996
  const parsedDateTo = Number.parseInt(this.dateTo, 10);
26071
25997
  const hasDateTo = Number.isFinite(parsedDateTo);
26072
- const returnTimestamp = hasDateTo ? new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000 : null;
25998
+ const returnTimestamp = hasDateTo ? startOfDay$1(parsedDateTo * 1000) / 1000 : null;
26073
25999
 
26074
26000
  if (dayDate === departTimestamp) return this.datepicker.rangeLabelStart || 'range start';
26075
26001
 
@@ -26079,9 +26005,7 @@ class AuroCalendarCell extends i$3 {
26079
26005
 
26080
26006
  if (hasDateTo && dayDate > departTimestamp && dayDate < returnTimestamp) return this.datepicker.rangeLabelInRange || 'in range';
26081
26007
 
26082
- if (!hasDateTo && dayDate > departTimestamp) return this.datepicker.rangeLabelEndPreview || 'previewing range end';
26083
-
26084
- // After end date when both dateFrom and dateTo are set.
26008
+ // After start date, no end date yet, or after end date
26085
26009
  return this.datepicker.rangeLabelAfterRange || 'after range';
26086
26010
  }
26087
26011
 
@@ -26094,7 +26018,7 @@ class AuroCalendarCell extends i$3 {
26094
26018
  */
26095
26019
  isDepartDate(day, dateFrom) {
26096
26020
  const parsedDateFrom = parseInt(dateFrom, 10);
26097
- const departTimestamp = new Date(parsedDateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
26021
+ const departTimestamp = startOfDay$1(parsedDateFrom * 1000) / 1000;
26098
26022
 
26099
26023
  return this.selected && day.date === departTimestamp;
26100
26024
  }
@@ -26109,7 +26033,7 @@ class AuroCalendarCell extends i$3 {
26109
26033
  */
26110
26034
  isReturnDate(day, dateFrom, dateTo) {
26111
26035
  const parsedDateTo = parseInt(dateTo, 10);
26112
- const returnTimestamp = new Date(parsedDateTo * 1000).setHours(0, 0, 0, 0) / 1000;
26036
+ const returnTimestamp = startOfDay$1(parsedDateTo * 1000) / 1000;
26113
26037
 
26114
26038
  return this.selected && day.date === returnTimestamp && dateFrom;
26115
26039
  }
@@ -26273,7 +26197,6 @@ class AuroCalendarCell extends i$3 {
26273
26197
  setTimeout(() => this.firstUpdated(), 0);
26274
26198
  return;
26275
26199
  }
26276
- this.calendar = calendar;
26277
26200
  this.datepicker = calendar.datepicker;
26278
26201
  this._slotContentHandler = () => {
26279
26202
  this.handleSlotContent();
@@ -26331,13 +26254,12 @@ class AuroCalendarCell extends i$3 {
26331
26254
  this._cachedButton = this.shadowRoot.querySelector('button.day');
26332
26255
  });
26333
26256
 
26334
- // Keep the host's gridcell aria attributes in sync with the day data.
26257
+ // Update host-level aria attributes for ariaActiveDescendantElement.
26335
26258
  this.updateHostAria();
26336
26259
  }
26337
26260
 
26338
26261
  // Update host aria when selection changes (aria-selected, range labels)
26339
- // or when isCurrentDate flips (aria-current).
26340
- if (properties.has('dateFrom') || properties.has('dateTo') || properties.has('selected') || properties.has('isCurrentDate')) {
26262
+ if (properties.has('dateFrom') || properties.has('dateTo') || properties.has('selected')) {
26341
26263
  this.updateHostAria();
26342
26264
  }
26343
26265
 
@@ -26348,8 +26270,8 @@ class AuroCalendarCell extends i$3 {
26348
26270
  }
26349
26271
 
26350
26272
  /**
26351
- * Sets host-level ARIA so each cell exposes its date, selection state,
26352
- * and blackout status to assistive tech browsing the month grid.
26273
+ * Updates ARIA attributes on the host element so that
26274
+ * ariaActiveDescendantElement can expose cell info to the SR.
26353
26275
  * @private
26354
26276
  * @returns {void}
26355
26277
  */
@@ -26358,27 +26280,16 @@ class AuroCalendarCell extends i$3 {
26358
26280
 
26359
26281
  const outOfRange = this.isOutOfRange(this.day, this.min, this.max);
26360
26282
  if (outOfRange) {
26361
- // Strip every aria attribute the in-range branch may have set on a
26362
- // previous render — if a cell flips from in-range to out-of-range
26363
- // (calendar shifts months, minDate/maxDate change, etc.).
26364
26283
  this.removeAttribute('role');
26365
26284
  this.removeAttribute('aria-label');
26366
- this.removeAttribute('aria-current');
26367
- this.removeAttribute('aria-selected');
26368
- this.removeAttribute('aria-disabled');
26369
26285
  return;
26370
26286
  }
26371
26287
 
26288
+ // The host acts as the gridcell for ariaActiveDescendantElement.
26372
26289
  this.setAttribute('role', 'gridcell');
26373
26290
  this.setAttribute('aria-label', this.getAriaLabel());
26374
26291
  this.setAttribute('aria-selected', this.selected ? 'true' : 'false');
26375
26292
 
26376
- if (this.isCurrentDate) {
26377
- this.setAttribute('aria-current', 'date');
26378
- } else {
26379
- this.removeAttribute('aria-current');
26380
- }
26381
-
26382
26293
  if (this.isBlackout()) {
26383
26294
  this.setAttribute('aria-disabled', 'true');
26384
26295
  } else {
@@ -26393,7 +26304,7 @@ class AuroCalendarCell extends i$3 {
26393
26304
  * @returns {void}
26394
26305
  */
26395
26306
  focusButton() {
26396
- const button = this._cachedButton || this.shadowRoot.querySelector('button:not([disabled])');
26307
+ const button = this._cachedButton || this.shadowRoot.querySelector('button:not([aria-hidden])');
26397
26308
  if (button) {
26398
26309
  button.focus({ focusVisible: true });
26399
26310
  }
@@ -26401,9 +26312,7 @@ class AuroCalendarCell extends i$3 {
26401
26312
 
26402
26313
  /**
26403
26314
  * Imperatively marks this cell as active without triggering a Lit re-render.
26404
- * Buttons stay tabindex="-1" because DOM focus stays on the grid wrapper
26405
- * arrow keys move the active cell imperatively and the live region carries
26406
- * the SR announcement.
26315
+ * Note: buttons stay tabindex="-1" because the grid uses aria-activedescendant.
26407
26316
  * @returns {void}
26408
26317
  */
26409
26318
  setActive() {
@@ -26445,13 +26354,10 @@ class AuroCalendarCell extends i$3 {
26445
26354
  if (!btn || !this.day) return;
26446
26355
 
26447
26356
  const dayDate = this.day.date;
26448
- const departTimestamp = new Date(dateFrom * 1000).setHours(0, 0, 0, 0) / 1000;
26357
+ const departTimestamp = startOfDay$1(dateFrom * 1000) / 1000;
26449
26358
  const isInRange = dayDate > departTimestamp && dayDate < hoveredDate;
26450
- // `>=` so hovering the depart cell itself (a same-day round-trip
26451
- // preview) still surfaces a visual cue: the depart cell receives both
26452
- // rangeDepartDate and lastHoveredDate.
26453
- const isLastHovered = dayDate === hoveredDate && hoveredDate >= departTimestamp;
26454
- const isDepartWithPreview = dayDate === departTimestamp && hoveredDate >= departTimestamp;
26359
+ const isLastHovered = dayDate === hoveredDate && hoveredDate > departTimestamp;
26360
+ const isDepartWithPreview = dayDate === departTimestamp && hoveredDate > departTimestamp;
26455
26361
 
26456
26362
  btn.classList.toggle('inRange', isInRange);
26457
26363
  btn.classList.toggle('lastHoveredDate', isLastHovered);
@@ -26509,6 +26415,7 @@ class AuroCalendarCell extends i$3 {
26509
26415
  @focus="${outOfRange ? undefined : this.handleFocus}"
26510
26416
  class="${e$2(buttonClasses)}"
26511
26417
  ?disabled="${outOfRange}"
26418
+ aria-hidden="${outOfRange ? 'true' : A$7}"
26512
26419
  tabindex="-1">
26513
26420
  <div class="buttonWrapper" aria-hidden="true">
26514
26421
  <div class="currentDayMarker">${this.day?.title || A$7}</div>
@@ -27614,7 +27521,7 @@ let AuroBibtemplate$3 = class AuroBibtemplate extends i$3 {
27614
27521
  }
27615
27522
  };
27616
27523
 
27617
- var formkitVersion$2$1 = '202606252324';
27524
+ var formkitVersion$2$1 = '202606252337';
27618
27525
 
27619
27526
  let l$1$2 = class l{generateElementName(t,e){let o=t;return o+="-",o+=e.replace(/[.]/g,"_"),o}generateTag(o,s,a){const r=this.generateElementName(o,s),i=i$2`${s$3(r)}`;return customElements.get(r)||customElements.define(r,class extends a{}),i}};let d$1$2 = class d{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}getSlotText(t,e){const o=t.shadowRoot?.querySelector(`slot[name="${e}"]`),s=(o?.assignedNodes({flatten:true})||[]).map(t=>t.textContent?.trim()).join(" ").trim();return s||null}};let h$1$2 = class h{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}};var c$1$3=i$6`:host{color:var(--ds-auro-loader-color)}:host>span{background-color:var(--ds-auro-loader-background-color);border-color:var(--ds-auro-loader-border-color)}:host([onlight]),:host([appearance=brand]){--ds-auro-loader-color: var(--ds-basic-color-brand-primary, #01426a)}:host([ondark]),:host([appearance=inverse]){--ds-auro-loader-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host([orbit])>span{--ds-auro-loader-background-color: transparent}:host([orbit])>span:nth-child(1){--ds-auro-loader-border-color: currentcolor;opacity:.25}:host([orbit])>span:nth-child(2){--ds-auro-loader-border-color: currentcolor;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent}
27620
27527
  `,u$4$2=i$6`.body-default{font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, .875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs{font-size:var(--wcss-body-xs-font-size, .75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:var(--wcss-body-2xs-font-size, .625rem);font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0);line-height:var(--wcss-body-2xs-line-height, .875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));font-weight:var(--wcss-display-2xl-weight, 300);letter-spacing:var(--wcss-display-2xl-letter-spacing, 0);line-height:var(--wcss-display-2xl-line-height, 1.3)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));font-weight:var(--wcss-display-xl-weight, 300);letter-spacing:var(--wcss-display-xl-letter-spacing, 0);line-height:var(--wcss-display-xl-line-height, 1.3)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));font-weight:var(--wcss-display-lg-weight, 300);letter-spacing:var(--wcss-display-lg-letter-spacing, 0);line-height:var(--wcss-display-lg-line-height, 1.3)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));font-weight:var(--wcss-display-md-weight, 300);letter-spacing:var(--wcss-display-md-letter-spacing, 0);line-height:var(--wcss-display-md-line-height, 1.3)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));font-weight:var(--wcss-display-sm-weight, 300);letter-spacing:var(--wcss-display-sm-letter-spacing, 0);line-height:var(--wcss-display-sm-line-height, 1.3)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));font-weight:var(--wcss-display-xs-weight, 300);letter-spacing:var(--wcss-display-xs-letter-spacing, 0);line-height:var(--wcss-display-xs-line-height, 1.3)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));font-weight:var(--wcss-heading-xl-weight, 300);letter-spacing:var(--wcss-heading-xl-letter-spacing, 0);line-height:var(--wcss-heading-xl-line-height, 1.3)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));font-weight:var(--wcss-heading-lg-weight, 300);letter-spacing:var(--wcss-heading-lg-letter-spacing, 0);line-height:var(--wcss-heading-lg-line-height, 1.3)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));font-weight:var(--wcss-heading-md-weight, 300);letter-spacing:var(--wcss-heading-md-letter-spacing, 0);line-height:var(--wcss-heading-md-line-height, 1.3)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));font-weight:var(--wcss-heading-sm-weight, 300);letter-spacing:var(--wcss-heading-sm-letter-spacing, 0);line-height:var(--wcss-heading-sm-line-height, 1.3)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));font-weight:var(--wcss-heading-xs-weight, 450);letter-spacing:var(--wcss-heading-xs-letter-spacing, 0);line-height:var(--wcss-heading-xs-line-height, 1.3)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));font-weight:var(--wcss-heading-2xs-weight, 450);letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0);line-height:var(--wcss-heading-2xs-line-height, 1.3)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));font-weight:var(--wcss-accent-2xl-weight, 450);letter-spacing:var(--wcss-accent-2xl-letter-spacing, .05em);line-height:var(--wcss-accent-2xl-line-height, 1)}.accent-2xl,.accent-xl{text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));font-weight:var(--wcss-accent-xl-weight, 450);letter-spacing:var(--wcss-accent-xl-letter-spacing, .05em);line-height:var(--wcss-accent-xl-line-height, 1.3)}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));font-weight:var(--wcss-accent-lg-weight, 450);letter-spacing:var(--wcss-accent-lg-letter-spacing, .05em);line-height:var(--wcss-accent-lg-line-height, 1.3)}.accent-lg,.accent-md{text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));font-weight:var(--wcss-accent-md-weight, 500);letter-spacing:var(--wcss-accent-md-letter-spacing, .05em);line-height:var(--wcss-accent-md-line-height, 1.3)}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));font-weight:var(--wcss-accent-sm-weight, 500);letter-spacing:var(--wcss-accent-sm-letter-spacing, .05em);line-height:var(--wcss-accent-sm-line-height, 1.3)}.accent-sm,.accent-xs{text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));font-weight:var(--wcss-accent-xs-weight, 500);letter-spacing:var(--wcss-accent-xs-letter-spacing, .1em);line-height:var(--wcss-accent-xs-line-height, 1.3)}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xs-font-size, clamp(.875rem, 1.1666666667vw, .875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, .1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}:focus:not(:focus-visible){outline:3px solid transparent}:host,:host>span{position:relative}:host{width:2rem;height:2rem;display:inline-block;font-size:0}:host>span{position:absolute;display:inline-block;float:none;top:0;left:0;width:2rem;height:2rem;border-radius:100%;border-style:solid;border-width:0;box-sizing:border-box}:host([xs]),:host([xs])>span{width:1.2rem;height:1.2rem}:host([sm]),:host([sm])>span{width:3rem;height:3rem}:host([md]),:host([md])>span{width:5rem;height:5rem}:host([lg]),:host([lg])>span{width:8rem;height:8rem}:host{--margin: .375rem;--margin-xs: .2rem;--margin-sm: .5rem;--margin-md: .75rem;--margin-lg: 1rem}:host([pulse]),:host([pulse])>span{position:relative}:host([pulse]){width:calc(3rem + var(--margin) * 6);height:calc(1rem + var(--margin) * 2)}:host([pulse])>span{width:1rem;height:1rem;margin:var(--margin);animation:pulse 1.5s ease infinite}:host([pulse][xs]){width:calc(1.95rem + var(--margin-xs) * 6);height:calc(.65rem + var(--margin-xs) * 2)}:host([pulse][xs])>span{margin:var(--margin-xs);width:.65rem;height:.65rem}:host([pulse][sm]){width:calc(6rem + var(--margin-sm) * 6);height:calc(2rem + var(--margin-sm) * 2)}:host([pulse][sm])>span{margin:var(--margin-sm);width:2rem;height:2rem}:host([pulse][md]){width:calc(9rem + var(--margin-md) * 6);height:calc(3rem + var(--margin-md) * 2)}:host([pulse][md])>span{margin:var(--margin-md);width:3rem;height:3rem}:host([pulse][lg]){width:calc(15rem + var(--margin-lg) * 6);height:calc(5rem + var(--margin-lg) * 2)}:host([pulse][lg])>span{margin:var(--margin-lg);width:5rem;height:5rem}:host([pulse])>span:nth-child(1){animation-delay:-.4s}:host([pulse])>span:nth-child(2){animation-delay:-.2s}:host([pulse])>span:nth-child(3){animation-delay:0ms}@keyframes pulse{0%,to{opacity:.1;transform:scale(.9)}50%{opacity:1;transform:scale(1.1)}}:host([orbit]),:host([orbit])>span{opacity:1}:host([orbit])>span{border-width:5px}:host([orbit])>span:nth-child(2){animation:orbit 2s linear infinite}:host([orbit][sm])>span{border-width:8px}:host([orbit][md])>span{border-width:13px}:host([orbit][lg])>span{border-width:21px}@keyframes orbit{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:host([ringworm])>svg{animation:rotate 2s linear infinite;height:100%;width:100%;stroke:currentcolor;stroke-width:8}:host([ringworm]) .path{stroke-dashoffset:0;animation:ringworm 1.5s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes ringworm{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}:host([laser]){position:static;width:100%;display:block;height:0;overflow:hidden;font-size:unset}:host([laser])>span{position:fixed;width:100%;height:.25rem;border-radius:0;z-index:100}:host([laser])>span:nth-child(1){border-color:currentcolor;opacity:.25}:host([laser])>span:nth-child(2){border-color:currentcolor;animation:laser 2s linear infinite;opacity:1;width:50%}:host([laser][sm])>span:nth-child(2){width:20%}:host([laser][md])>span:nth-child(2){width:30%}:host([laser][lg])>span:nth-child(2){width:50%;animation-duration:1.5s}:host([laser][xl])>span:nth-child(2){width:80%;animation-duration:1.5s}@keyframes laser{0%{left:-100%}to{left:110%}}:host>.no-animation{display:none}@media (prefers-reduced-motion: reduce){:host{display:flex;align-items:center;justify-content:center}:host>span{opacity:1}:host>.loader{display:none}:host>svg{display:none}:host>.no-animation{display:block}}
@@ -27737,11 +27644,7 @@ class AuroCalendar extends RangeDatepicker {
27737
27644
  this.calendarRangeMonths = null;
27738
27645
 
27739
27646
  /**
27740
- * @deprecated Use `auro-datepicker.blackoutDates` (an array of
27741
- * `YYYY-MM-DD` ISO strings) instead. This legacy array of Unix
27742
- * timestamps is still honored for backward compatibility but emits a
27743
- * one-time `console.debug` the first time a non-empty value is observed.
27744
- * Support will be removed in a future major release.
27647
+ * Legacy array of disabled-date timestamps.
27745
27648
  * @private
27746
27649
  */
27747
27650
  this.disabledDays = [];
@@ -27998,44 +27901,17 @@ class AuroCalendar extends RangeDatepicker {
27998
27901
  * @returns {void}
27999
27902
  */
28000
27903
  updateActiveCellForVisibleMonth() {
28001
- this._afterMonthRender(() => {
28002
- const newDate = this.computeActiveDate({ skipDateFrom: true });
28003
-
28004
- if (newDate !== null && newDate !== undefined) {
28005
- this.activeCellDate = newDate;
28006
- this.setActiveCell(this.activeCellDate);
28007
- }
28008
- });
28009
- }
28010
-
28011
- /**
28012
- * Schedules `callback` two animation frames out, giving the child
28013
- * `auro-formkit-calendar-month` and `auro-formkit-calendar-cell` elements
28014
- * a full render-and-paint cycle to settle before the callback reads or
28015
- * mutates DOM.
28016
- *
28017
- * Why two frames, not one:
28018
- * 1. Lit batches property updates and renders in a microtask, so frame N
28019
- * schedules the render but the new DOM may not be painted yet.
28020
- * 2. Cells re-cache `_cachedButton` inside their own `updateComplete.then`,
28021
- * which also lands a tick later. Reading buttons from frame N+1
28022
- * (after both renders + cache refresh have flushed) reliably hits the
28023
- * new month's cells.
28024
- *
28025
- * Used by every code path that calls `handleNextMonth`/`handlePrevMonth`
28026
- * and then needs to inspect the freshly-rendered cells (cross-month
28027
- * keyboard nav, boundary events, `updateActiveCellForVisibleMonth`).
28028
- * Do NOT collapse to a single rAF — it intermittently lands before
28029
- * `_cachedButton` is refreshed, which silently breaks focus restoration
28030
- * and `setActiveCell` lookups.
28031
- * @private
28032
- * @param {() => void} callback - Runs once after the month re-render and
28033
- * the cells' button caches have refreshed.
28034
- * @returns {void}
28035
- */
28036
- _afterMonthRender(callback) {
27904
+ // Use double-rAF to ensure child month/cell components have fully
27905
+ // rendered and cached their button references before we set tabindex.
28037
27906
  requestAnimationFrame(() => {
28038
- requestAnimationFrame(callback);
27907
+ requestAnimationFrame(() => {
27908
+ const newDate = this.computeActiveDate({ skipDateFrom: true });
27909
+
27910
+ if (newDate !== null && newDate !== undefined) {
27911
+ this.activeCellDate = newDate;
27912
+ this.setActiveCell(this.activeCellDate);
27913
+ }
27914
+ });
28039
27915
  });
28040
27916
  }
28041
27917
 
@@ -28153,47 +28029,6 @@ class AuroCalendar extends RangeDatepicker {
28153
28029
  return Array.from(this.shadowRoot.querySelectorAll('auro-formkit-calendar-month'));
28154
28030
  }
28155
28031
 
28156
- /**
28157
- * Picks the focusable cell whose date is closest to targetTs. Used as a
28158
- * fallback after a month-boundary nav when the exact target date isn't
28159
- * focusable — typically because the month re-render lagged or the date
28160
- * was filtered out by isOutOfRange. When two cells are equidistant, the
28161
- * navigation direction breaks the tie so the user moves the way they
28162
- * pressed (forward → later cell, backward → earlier cell).
28163
- * @private
28164
- * @param {Array} cells - Focusable cells from getAllFocusableCells.
28165
- * @param {Number} targetTs - Desired Unix timestamp (seconds).
28166
- * @param {'next'|'prev'} direction - Navigation direction.
28167
- * @returns {Object|null} The nearest cell, or null when cells is empty.
28168
- */
28169
- pickNearestCell(cells, targetTs, direction) {
28170
- if (!cells.length) {
28171
- return null;
28172
- }
28173
- const forward = direction === 'next';
28174
- let best = null;
28175
- let bestDelta = Infinity;
28176
- cells.forEach((cell) => {
28177
- if (!cell.day) {
28178
- return;
28179
- }
28180
- const distance = Math.abs(cell.day.date - targetTs);
28181
- if (distance < bestDelta) {
28182
- best = cell;
28183
- bestDelta = distance;
28184
- return;
28185
- }
28186
- if (distance === bestDelta && best) {
28187
- if (forward && cell.day.date > best.day.date) {
28188
- best = cell;
28189
- } else if (!forward && cell.day.date < best.day.date) {
28190
- best = cell;
28191
- }
28192
- }
28193
- });
28194
- return best;
28195
- }
28196
-
28197
28032
  /**
28198
28033
  * Gets all focusable cells across all rendered months.
28199
28034
  * @private
@@ -28210,9 +28045,9 @@ class AuroCalendar extends RangeDatepicker {
28210
28045
 
28211
28046
  /**
28212
28047
  * Sets the active cell across all months. Only one cell has tabindex="0" at a time.
28213
- * Uses imperative DOM manipulation — no Lit re-render triggered. DOM focus
28214
- * stays on the grid wrapper; the live region (see getOrCreateLiveRegion)
28215
- * is what announces the active cell to assistive tech.
28048
+ * Uses imperative DOM manipulation — no Lit re-render triggered.
28049
+ * Also updates ariaActiveDescendantElement on the grid wrapper so
28050
+ * screen readers announce the active cell without moving DOM focus.
28216
28051
  * @param {Number} date - Unix timestamp of the cell to activate.
28217
28052
  * @returns {void}
28218
28053
  */
@@ -28293,65 +28128,6 @@ class AuroCalendar extends RangeDatepicker {
28293
28128
  this.clearRangePreview();
28294
28129
  }
28295
28130
 
28296
- /**
28297
- * Returns a memoized Set of blackout timestamps (seconds) drawn from both
28298
- * the legacy `disabledDays` array and the datepicker's ISO `blackoutDates`.
28299
- * The cache invalidates when either source array's reference changes, which
28300
- * matches Lit's own reactive identity semantics for array properties.
28301
- * @private
28302
- * @returns {Set<Number>}
28303
- */
28304
- _getBlackoutSet() {
28305
- // Normalize non-array values to a stable `null` sentinel rather than a
28306
- // fresh `[]` per call — otherwise the reference-identity cache key
28307
- // (`_cachedBlackoutDisabledDays === disabledDays`) never matches on
28308
- // subsequent calls and the Set rebuilds every time. `buildBlackoutSet`
28309
- // already treats null/non-array as "no legacy disabledDays" via its
28310
- // own Array.isArray gate.
28311
- const disabledDays = Array.isArray(this.disabledDays) ? this.disabledDays : null;
28312
- const blackoutDates = this.datepicker?.blackoutDates;
28313
- if (this._blackoutSet &&
28314
- this._cachedBlackoutDisabledDays === disabledDays &&
28315
- this._cachedBlackoutDates === blackoutDates) {
28316
- return this._blackoutSet;
28317
- }
28318
-
28319
- if (disabledDays && disabledDays.length > 0) {
28320
- this._warnDisabledDaysDeprecated();
28321
- }
28322
-
28323
- this._blackoutSet = buildBlackoutSet(disabledDays, blackoutDates);
28324
- this._cachedBlackoutDisabledDays = disabledDays;
28325
- this._cachedBlackoutDates = blackoutDates;
28326
- return this._blackoutSet;
28327
- }
28328
-
28329
- /**
28330
- * Per-class flag that gates the `disabledDays` deprecation warning so it
28331
- * fires exactly once per page no matter how many calendars or rebuild
28332
- * cycles encounter the legacy array.
28333
- * @private
28334
- */
28335
- static _warnedDisabledDaysDeprecation = false;
28336
-
28337
- /**
28338
- * One-time `console.debug` directing consumers from the legacy
28339
- * `disabledDays` Unix-timestamp API to the ISO `blackoutDates` API. Fires
28340
- * the first time `_getBlackoutSet` rebuilds from a non-empty
28341
- * `disabledDays`; subsequent calls (on this or any other AuroCalendar
28342
- * instance on the page) are silent.
28343
- * @private
28344
- * @returns {void}
28345
- */
28346
- _warnDisabledDaysDeprecated() {
28347
- if (AuroCalendar._warnedDisabledDaysDeprecation) {
28348
- return;
28349
- }
28350
- AuroCalendar._warnedDisabledDaysDeprecation = true;
28351
- // eslint-disable-next-line no-console
28352
- console.debug('[auro-datepicker] The `disabledDays` property (Unix timestamps) is deprecated. Migrate to the `blackoutDates` property on auro-datepicker (an array of `YYYY-MM-DD` ISO strings). `disabledDays` will be removed in a future major release.');
28353
- }
28354
-
28355
28131
  /**
28356
28132
  * Computes the initial active date from data properties alone — no DOM required.
28357
28133
  * Priority:
@@ -28396,10 +28172,21 @@ class AuroCalendar extends RangeDatepicker {
28396
28172
  const minTs = Number.isFinite(rawMin) ? rawMin : -Infinity;
28397
28173
  const maxTs = Number.isFinite(rawMax) ? rawMax : Infinity;
28398
28174
 
28399
- // Build a Set of blackout timestamps for O(1) lookup. Memoized by the
28400
- // identity of the source arrays so rapid month nav doesn't rebuild the
28401
- // Set (and re-parse every ISO string) on every keypress.
28402
- const blackoutSet = this._getBlackoutSet();
28175
+ // Build a Set of blackout timestamps for O(1) lookup.
28176
+ const blackoutSet = new Set(this.disabledDays.map((day) => parseInt(day, 10)));
28177
+
28178
+ // Also include ISO-format blackoutDates from the datepicker if available.
28179
+ // Parse YYYY-MM-DD as local date to avoid UTC shift issues.
28180
+ const isoBlackouts = this.datepicker?.blackoutDates;
28181
+ if (Array.isArray(isoBlackouts)) {
28182
+ for (const isoStr of isoBlackouts) {
28183
+ const parts = isoStr.split('-');
28184
+ const ts = Math.floor(new Date(parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10)).getTime() / 1000);
28185
+ if (Number.isFinite(ts)) {
28186
+ blackoutSet.add(ts);
28187
+ }
28188
+ }
28189
+ }
28403
28190
 
28404
28191
  /**
28405
28192
  * A date (unix timestamp in seconds, midnight-aligned) is "enabled" when
@@ -28595,8 +28382,8 @@ class AuroCalendar extends RangeDatepicker {
28595
28382
 
28596
28383
  /**
28597
28384
  * Handles arrow key navigation on the calendar grid wrapper.
28598
- * Focus stays on the grid wrapper; only the visual active-cell indicator
28599
- * changes. The live region announces the new active cell.
28385
+ * Focus stays on the grid wrapper; only ariaActiveDescendantElement
28386
+ * and the visual active-cell indicator change.
28600
28387
  * @private
28601
28388
  * @param {KeyboardEvent} event - The keyboard event.
28602
28389
  * @returns {void}
@@ -28661,21 +28448,21 @@ class AuroCalendar extends RangeDatepicker {
28661
28448
  } else {
28662
28449
  this.handlePrevMonth({ skipActiveUpdate: true });
28663
28450
  }
28664
- this._afterMonthRender(() => {
28665
- const cells = this.getAllFocusableCells();
28666
- const target = cells.find((cell) => cell.day && cell.day.date === targetTs);
28667
- if (target) {
28668
- this.setActiveCell(target.day.date);
28669
- this.handleCellFocused({ detail: { date: target.day.date } });
28670
- } else {
28671
- const fallback = this.pickNearestCell(cells, targetTs, navDir);
28672
- if (fallback) {
28451
+ requestAnimationFrame(() => {
28452
+ requestAnimationFrame(() => {
28453
+ const cells = this.getAllFocusableCells();
28454
+ const target = cells.find((cell) => cell.day && cell.day.date === targetTs);
28455
+ if (target) {
28456
+ this.setActiveCell(target.day.date);
28457
+ this.handleCellFocused({ detail: { date: target.day.date } });
28458
+ } else if (cells.length > 0) {
28459
+ const fallback = navDir === 'next' ? cells[cells.length - 1] : cells[0];
28673
28460
  this.setActiveCell(fallback.day.date);
28674
28461
  this.handleCellFocused({ detail: { date: fallback.day.date } });
28675
28462
  }
28676
- }
28677
- // Re-focus grid wrapper after month change re-render
28678
- this.focusActiveCell();
28463
+ // Re-focus grid wrapper after month change re-render
28464
+ this.focusActiveCell();
28465
+ });
28679
28466
  });
28680
28467
  }
28681
28468
  }
@@ -28701,20 +28488,26 @@ class AuroCalendar extends RangeDatepicker {
28701
28488
  } else {
28702
28489
  this.handlePrevMonth({ skipActiveUpdate: true });
28703
28490
  }
28704
- this._afterMonthRender(() => {
28705
- const cells = this.getAllFocusableCells();
28706
- const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
28707
- if (target) {
28708
- this.setActiveCell(target.day.date);
28709
- this.handleCellFocused({ detail: { date: target.day.date } });
28710
- } else {
28711
- const nearest = this.pickNearestCell(cells, targetDate, navDirection);
28712
- if (nearest) {
28491
+ requestAnimationFrame(() => {
28492
+ requestAnimationFrame(() => {
28493
+ const cells = this.getAllFocusableCells();
28494
+ const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
28495
+ if (target) {
28496
+ this.setActiveCell(target.day.date);
28497
+ this.handleCellFocused({ detail: { date: target.day.date } });
28498
+ } else if (cells.length > 0) {
28499
+ let nearest = null;
28500
+
28501
+ if (navDirection === 'next') {
28502
+ [nearest] = cells;
28503
+ } else {
28504
+ nearest = cells[cells.length - 1];
28505
+ }
28713
28506
  this.setActiveCell(nearest.day.date);
28714
28507
  this.handleCellFocused({ detail: { date: nearest.day.date } });
28715
28508
  }
28716
- }
28717
- this.focusActiveCell();
28509
+ this.focusActiveCell();
28510
+ });
28718
28511
  });
28719
28512
  }
28720
28513
  }
@@ -28764,22 +28557,19 @@ class AuroCalendar extends RangeDatepicker {
28764
28557
  }
28765
28558
 
28766
28559
  this.handleNextMonth({ skipActiveUpdate: true });
28767
- this._afterMonthRender(() => {
28768
- const cells = this.getAllFocusableCells();
28769
- const target = cells.find((cell) => cell.day && cell.day.date === nextTs);
28770
- if (target) {
28771
- this.setActiveCell(target.day.date);
28772
- this.focusActiveCell();
28773
- } else {
28774
- // Same nearest-by-date fallback handleGridKeyDown uses — direct
28775
- // `cells[length - 1]` would land on the end of the new month,
28776
- // far from the user's intended `nextTs`.
28777
- const fallback = this.pickNearestCell(cells, nextTs, 'next');
28778
- if (fallback) {
28779
- this.setActiveCell(fallback.day.date);
28560
+ requestAnimationFrame(() => {
28561
+ requestAnimationFrame(() => {
28562
+ const cells = this.getAllFocusableCells();
28563
+ const target = cells.find((cell) => cell.day && cell.day.date === nextTs);
28564
+ if (target) {
28565
+ this.setActiveCell(target.day.date);
28566
+ this.focusActiveCell();
28567
+ } else if (cells.length > 0) {
28568
+ // Fallback: first cell of the last rendered month
28569
+ this.setActiveCell(cells[cells.length - 1].day.date);
28780
28570
  this.focusActiveCell();
28781
28571
  }
28782
- }
28572
+ });
28783
28573
  });
28784
28574
  } else if (direction === 'prev' && this.showPrevMonthBtn) {
28785
28575
  // Navigate to previous month and focus the computed previous date.
@@ -28793,22 +28583,19 @@ class AuroCalendar extends RangeDatepicker {
28793
28583
  }
28794
28584
 
28795
28585
  this.handlePrevMonth({ skipActiveUpdate: true });
28796
- this._afterMonthRender(() => {
28797
- const cells = this.getAllFocusableCells();
28798
- const target = cells.find((cell) => cell.day && cell.day.date === prevTs);
28799
- if (target) {
28800
- this.setActiveCell(target.day.date);
28801
- this.focusActiveCell();
28802
- } else {
28803
- // Same nearest-by-date fallback handleGridKeyDown uses — direct
28804
- // `cells[0]` would land on the start of the previous month, far
28805
- // from the user's intended `prevTs`.
28806
- const fallback = this.pickNearestCell(cells, prevTs, 'prev');
28807
- if (fallback) {
28808
- this.setActiveCell(fallback.day.date);
28586
+ requestAnimationFrame(() => {
28587
+ requestAnimationFrame(() => {
28588
+ const cells = this.getAllFocusableCells();
28589
+ const target = cells.find((cell) => cell.day && cell.day.date === prevTs);
28590
+ if (target) {
28591
+ this.setActiveCell(target.day.date);
28592
+ this.focusActiveCell();
28593
+ } else if (cells.length > 0) {
28594
+ // Fallback: last cell of the first rendered month
28595
+ this.setActiveCell(cells[0].day.date);
28809
28596
  this.focusActiveCell();
28810
28597
  }
28811
- }
28598
+ });
28812
28599
  });
28813
28600
  }
28814
28601
  } else if (key === 'ArrowDown' || key === 'ArrowUp') {
@@ -28836,22 +28623,20 @@ class AuroCalendar extends RangeDatepicker {
28836
28623
  } else {
28837
28624
  this.handlePrevMonth({ skipActiveUpdate: true });
28838
28625
  }
28839
- this._afterMonthRender(() => {
28840
- const cells = this.getAllFocusableCells();
28841
- const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
28842
- if (target) {
28843
- this.setActiveCell(target.day.date);
28844
- this.focusActiveCell();
28845
- } else {
28846
- // Same nearest-by-date fallback handleGridKeyDown uses — the
28847
- // old direction-based `cells[0]`/`cells[length-1]` clamp
28848
- // could land 25+ days from the intended target.
28849
- const nearest = this.pickNearestCell(cells, targetDate, navDirection);
28850
- if (nearest) {
28626
+ requestAnimationFrame(() => {
28627
+ requestAnimationFrame(() => {
28628
+ const cells = this.getAllFocusableCells();
28629
+ const target = cells.find((cell) => cell.day && cell.day.date === targetDate);
28630
+ if (target) {
28631
+ this.setActiveCell(target.day.date);
28632
+ this.focusActiveCell();
28633
+ } else if (cells.length > 0) {
28634
+ // Clamp to nearest focusable cell
28635
+ const nearest = navDirection === 'next' ? cells[0] : cells[cells.length - 1];
28851
28636
  this.setActiveCell(nearest.day.date);
28852
28637
  this.focusActiveCell();
28853
28638
  }
28854
- }
28639
+ });
28855
28640
  });
28856
28641
  }
28857
28642
  }
@@ -28890,9 +28675,8 @@ class AuroCalendar extends RangeDatepicker {
28890
28675
  return;
28891
28676
  }
28892
28677
 
28893
- // DOM focus stays on the grid wrapper while arrow keys move the active
28894
- // cell, so cell buttons never receive native focus. The debounced live
28895
- // region carries the full-context announcement instead.
28678
+ // With aria-activedescendant, the button no longer receives native focus,
28679
+ // so we use the debounced live region for the full context announcement.
28896
28680
  const announcement = this.buildFocusAnnouncement(date);
28897
28681
  this.announceFocusDebounced(announcement);
28898
28682
 
@@ -28962,10 +28746,10 @@ class AuroCalendar extends RangeDatepicker {
28962
28746
  return null;
28963
28747
  }
28964
28748
 
28965
- const departTs = new Date(parsedFrom * 1000).setHours(0, 0, 0, 0) / 1000;
28749
+ const departTs = startOfDay$2(parsedFrom * 1000) / 1000;
28966
28750
  const parsedTo = Number.parseInt(this.dateTo, 10);
28967
28751
  const hasTo = Number.isFinite(parsedTo);
28968
- const returnTs = hasTo ? new Date(parsedTo * 1000).setHours(0, 0, 0, 0) / 1000 : null;
28752
+ const returnTs = hasTo ? startOfDay$2(parsedTo * 1000) / 1000 : null;
28969
28753
 
28970
28754
  if (date === departTs) {
28971
28755
  return this.datepicker.rangeLabelStart || 'range start';
@@ -28979,22 +28763,36 @@ class AuroCalendar extends RangeDatepicker {
28979
28763
  if (hasTo && date > departTs && date < returnTs) {
28980
28764
  return this.datepicker.rangeLabelInRange || 'in range';
28981
28765
  }
28982
- if (!hasTo && date > departTs) {
28983
- return this.datepicker.rangeLabelEndPreview || 'previewing range end';
28984
- }
28985
28766
  return this.datepicker.rangeLabelAfterRange || 'after range';
28986
28767
  }
28987
28768
 
28988
28769
  /**
28989
- * Checks whether a given date is a blackout date. Delegates to the
28990
- * memoized `_getBlackoutSet` so the YYYY-MM-DD parsing and the
28991
- * legacy/ISO merge rules live in exactly one place (see `blackoutUtils.js`).
28770
+ * Checks whether a given date is a blackout date.
28992
28771
  * @private
28993
28772
  * @param {Number} dateTs - Unix timestamp (seconds).
28994
28773
  * @returns {Boolean} True if the date is blacked out.
28995
28774
  */
28996
28775
  isDateBlackout(dateTs) {
28997
- return this._getBlackoutSet().has(dateTs);
28776
+ // Check legacy disabledDays.
28777
+ if (Array.isArray(this.disabledDays) && this.disabledDays.length > 0) {
28778
+ if (this.disabledDays.findIndex((day) => parseInt(day, 10) === dateTs) !== -1) {
28779
+ return true;
28780
+ }
28781
+ }
28782
+
28783
+ // Check ISO blackoutDates.
28784
+ const blackoutDates = this.datepicker?.blackoutDates;
28785
+ if (Array.isArray(blackoutDates) && blackoutDates.length > 0) {
28786
+ const date = new Date(dateTs * 1000);
28787
+ const yyyy = date.getFullYear();
28788
+ const mm = String(date.getMonth() + 1).padStart(2, '0');
28789
+ const dd = String(date.getDate()).padStart(2, '0');
28790
+ if (blackoutDates.includes(`${yyyy}-${mm}-${dd}`)) {
28791
+ return true;
28792
+ }
28793
+ }
28794
+
28795
+ return false;
28998
28796
  }
28999
28797
 
29000
28798
  /**
@@ -29161,34 +28959,9 @@ class AuroCalendar extends RangeDatepicker {
29161
28959
  // the last one.
29162
28960
  if (this._announceRafId) {
29163
28961
  cancelAnimationFrame(this._announceRafId);
29164
- this._announceRafId = null;
29165
28962
  }
29166
- this._deliverAnnouncement(dateStr, 0);
29167
- }
29168
-
29169
- /**
29170
- * Writes `dateStr` to the live region. If the dropdown's dialog hasn't
29171
- * mounted yet (so getOrCreateLiveRegion can't attach), retries on the
29172
- * next animation frame up to MAX_LIVE_REGION_RETRIES instead of silently
29173
- * dropping the announcement. The retry uses the same `_announceRafId`
29174
- * the double-rAF below uses, so a newer announceSelection call (or
29175
- * disconnectedCallback) cancels any in-flight retry.
29176
- * @private
29177
- * @param {String} dateStr - The localized date string to announce.
29178
- * @param {Number} attempts - Number of prior retry attempts.
29179
- * @returns {void}
29180
- */
29181
- _deliverAnnouncement(dateStr, attempts) {
29182
28963
  const liveRegion = this.getOrCreateLiveRegion();
29183
28964
  if (!liveRegion) {
29184
- const MAX_LIVE_REGION_RETRIES = 10;
29185
- if (attempts < MAX_LIVE_REGION_RETRIES) {
29186
- this._announceRafId = requestAnimationFrame(() => {
29187
- this._deliverAnnouncement(dateStr, attempts + 1);
29188
- });
29189
- } else {
29190
- this._announceRafId = null;
29191
- }
29192
28965
  return;
29193
28966
  }
29194
28967
 
@@ -29374,7 +29147,7 @@ class AuroCalendar extends RangeDatepicker {
29374
29147
  </button>
29375
29148
  ` : undefined}
29376
29149
  </div>
29377
- <div id="calendarGrid" class="calendars" role="group" aria-roledescription="calendar" tabindex="0" aria-label="${this.datepicker?.calendarGridLabel}" @keydown="${this.handleGridKeyDown}" @focusin="${this.handleGridFocusIn}" @focusout="${this.handleGridFocusOut}" @calendar-month-mouseleave="${this.clearRangePreview}">
29150
+ <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}">
29378
29151
  ${this.renderAllCalendars()}
29379
29152
  </div>
29380
29153
  </div>
@@ -33259,7 +33032,7 @@ let AuroHelpText$2$1 = class AuroHelpText extends i$3 {
33259
33032
  }
33260
33033
  };
33261
33034
 
33262
- var formkitVersion$1$3 = '202606252324';
33035
+ var formkitVersion$1$3 = '202606252337';
33263
33036
 
33264
33037
  let AuroElement$2$2 = class AuroElement extends i$3 {
33265
33038
  static get properties() {
@@ -39656,7 +39429,7 @@ function normalizeDates$2(context, ...dates) {
39656
39429
  * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))
39657
39430
  * //=> Tue Sep 02 2014 00:00:00
39658
39431
  */
39659
- function startOfDay$2(date, options) {
39432
+ function startOfDay$3(date, options) {
39660
39433
  const _date = toDate$2(date, options?.in);
39661
39434
  _date.setHours(0, 0, 0, 0);
39662
39435
  return _date;
@@ -39704,8 +39477,8 @@ function differenceInCalendarDays$2(laterDate, earlierDate, options) {
39704
39477
  earlierDate,
39705
39478
  );
39706
39479
 
39707
- const laterStartOfDay = startOfDay$2(laterDate_);
39708
- const earlierStartOfDay = startOfDay$2(earlierDate_);
39480
+ const laterStartOfDay = startOfDay$3(laterDate_);
39481
+ const earlierStartOfDay = startOfDay$3(earlierDate_);
39709
39482
 
39710
39483
  const laterTimestamp =
39711
39484
  +laterStartOfDay - getTimezoneOffsetInMilliseconds$2(laterStartOfDay);
@@ -44977,6 +44750,13 @@ let AuroInputUtilities$2 = class AuroInputUtilities {
44977
44750
  * @returns {string | undefined}
44978
44751
  */
44979
44752
  toFormattedValue(valueObject, format) {
44753
+ // Exposed publicly via `AuroInputUtil.toFormattedValue`, so a missing
44754
+ // `format` argument has to fail gracefully rather than throw on
44755
+ // `format.toLowerCase()`. Treat any falsy value (undefined, null, '')
44756
+ // as "no format → no display value".
44757
+ if (!format) {
44758
+ return undefined;
44759
+ }
44980
44760
  const normalizedFormat = format.toLowerCase();
44981
44761
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
44982
44762
 
@@ -45127,79 +44907,18 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45127
44907
  constructor() {
45128
44908
  super();
45129
44909
 
45130
- this.appearance = "default";
45131
- this.disabled = false;
45132
- this.layout = 'classic';
45133
- this.locale = 'en-US';
45134
- this.max = undefined;
45135
- this._maxObject = undefined;
45136
- this.maxLength = undefined;
45137
- this.min = undefined;
45138
- this._minObject = undefined;
45139
- this.minLength = undefined;
45140
- this.required = false;
45141
- this.onDark = false;
45142
- this.setCustomValidityForType = undefined;
45143
- this.size = 'lg';
45144
- this.shape = 'classic';
45145
- this.value = undefined;
45146
- this._valueObject = undefined;
45147
-
45148
- this._initializePrivateDefaults();
45149
- }
45150
-
45151
- /**
45152
- * Internal Defaults.
45153
- * @private
45154
- * @returns {void}
45155
- */
45156
- _initializePrivateDefaults() {
44910
+ // Single-source initialization. Alphabetized so duplicate or stale
44911
+ // defaults are immediately obvious on a diff. Every field is assigned
44912
+ // exactly once here (previously the constructor + the old
44913
+ // `_initializePrivateDefaults` overlapped — both wrote ~14 of the same
44914
+ // fields and double-allocated `util` and `validation`, discarding the
44915
+ // first instance). `validation` is now allocated exactly once; `util`
44916
+ // is seeded here with an en-US default and then rebuilt in
44917
+ // `connectedCallback` once the consumer-resolved locale is available,
44918
+ // so a parent (datepicker/combobox) calling `validate()` synchronously
44919
+ // during its own update cycle sees a populated util instance.
45157
44920
  this.activeLabel = false;
45158
- this.appearance = "default";
45159
- this.icon = false;
45160
- this.disabled = false;
45161
- this.dvInputOnly = false;
45162
- this.hideLabelVisually = false;
45163
- this.max = undefined;
45164
- this.maxLength = undefined;
45165
- this.min = undefined;
45166
- this.minLength = undefined;
45167
- this.noValidate = false;
45168
- this.onDark = false;
45169
- this.required = false;
45170
- this.setCustomValidityForType = undefined;
45171
-
45172
- // Used for storing raw values returned from input mask.
45173
- this._rawMaskValue = undefined;
45174
-
45175
- /**
45176
- * @private
45177
- */
45178
- this.layout = 'classic';
45179
-
45180
- /**
45181
- * @private
45182
- */
45183
- this.shape = 'classic';
45184
-
45185
- /**
45186
- * @private
45187
- */
45188
- this.size = 'lg';
45189
-
45190
- this.touched = false;
45191
- this.util = new AuroInputUtilities$2({
45192
- locale: "en-US",
45193
- format: this.format
45194
- });
45195
- this.validation = new AuroFormValidation$6();
45196
- this.inputIconName = undefined;
45197
- this.showPassword = false;
45198
- this.validationCCLength = undefined;
45199
- this.hasValue = false;
45200
- this.label = 'Input label is undefined';
45201
-
45202
-
44921
+ /** @private */
45203
44922
  this.allowedInputTypes = [
45204
44923
  "text",
45205
44924
  "number",
@@ -45208,7 +44927,8 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45208
44927
  "credit-card",
45209
44928
  "tel"
45210
44929
  ];
45211
- this.icon = false;
44930
+ this.appearance = "default";
44931
+ /** @private */
45212
44932
  this.dateFormatMap = {
45213
44933
  'mm/dd/yyyy': 'dateMMDDYYYY',
45214
44934
  'dd/mm/yyyy': 'dateDDMMYYYY',
@@ -45225,27 +44945,57 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45225
44945
  'dd/mm': 'dateDDMM',
45226
44946
  'mm/dd': 'dateMMDD'
45227
44947
  };
44948
+ this.disabled = false;
44949
+ /** @private */
45228
44950
  this.domHandler = new DomHandler$2();
45229
44951
  this.dvInputOnly = false;
45230
44952
  this.hasValue = false;
44953
+ this.hideLabelVisually = false;
44954
+ this.icon = false;
44955
+ /** @private */
45231
44956
  this.inputIconName = undefined;
44957
+ /** @private */
45232
44958
  this.label = 'Input label is undefined';
44959
+ this.layout = 'classic';
44960
+ this.locale = 'en-US';
44961
+ this.max = undefined;
44962
+ this._maxObject = undefined;
44963
+ this.maxLength = undefined;
44964
+ this.min = undefined;
44965
+ this._minObject = undefined;
44966
+ this.minLength = undefined;
45233
44967
  this.noValidate = false;
45234
- this._rawMaskValue = undefined; // Used for storing raw values returned from input mask.
44968
+ this.onDark = false;
44969
+ // Raw values returned from the input mask before model normalization.
44970
+ this._rawMaskValue = undefined;
44971
+ this.required = false;
44972
+ this.setCustomValidityForType = undefined;
44973
+ // Credit Card is intentionally excluded — its mask manages the cursor
44974
+ // itself, and listing it here caused cursor placement issues in Safari.
44975
+ /** @private */
45235
44976
  this.setSelectionInputTypes = [
45236
44977
  "text",
45237
44978
  "password",
45238
44979
  "email"
45239
- ]; // Credit Card is not included as this caused cursor placement issues in Safari.
44980
+ ];
44981
+ this.shape = 'classic';
44982
+ /** @private */
45240
44983
  this.showPassword = false;
44984
+ this.size = 'lg';
45241
44985
  this.touched = false;
44986
+ /** @private */
45242
44987
  this.uniqueId = new UniqueId$1().create();
44988
+ /** @private */
45243
44989
  this.util = new AuroInputUtilities$2({
45244
44990
  locale: this.locale,
45245
44991
  format: this.format
45246
44992
  });
44993
+ /** @private */
45247
44994
  this.validation = new AuroFormValidation$6();
44995
+ /** @private */
45248
44996
  this.validationCCLength = undefined;
44997
+ this.value = undefined;
44998
+ this._valueObject = undefined;
45249
44999
  }
45250
45000
 
45251
45001
  // function to define props used within the scope of this component
@@ -45793,6 +45543,15 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45793
45543
 
45794
45544
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
45795
45545
 
45546
+ // Normalize the format token to lowercase so case-mixed values supplied
45547
+ // via attribute (e.g. `format="MM/DD/YYYY"`) hit the `dateFormatMap`
45548
+ // lookup inside `setCustomHelpTextMessage`. Without this, an uppercase
45549
+ // format silently misses the map and leaves `setCustomValidityForType`
45550
+ // unset.
45551
+ if (this.format) {
45552
+ this.format = this.format.toLowerCase();
45553
+ }
45554
+
45796
45555
  // use validity message override if declared when initializing the component
45797
45556
  if (this.hasAttribute('setCustomValidity')) {
45798
45557
  this.ValidityMessageOverride = this.setCustomValidity;
@@ -46226,6 +45985,38 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
46226
45985
  this.touched = true;
46227
45986
  this.validation.validate(this);
46228
45987
  }
45988
+
45989
+ // Prevents cursor jumping in Safari. Setting `this.value` triggers a Lit
45990
+ // update that can re-render the input and reset the native cursor; we
45991
+ // capture the caret position before that update commits and restore it
45992
+ // via `setSelectionRange` once the update has flushed. Gated on
45993
+ // `setSelectionInputTypes` so credit-card (and other masked types whose
45994
+ // formatter manages the cursor itself) doesn't get a competing write.
45995
+ // Capture the caret position INSIDE the gate — reading `selectionStart`
45996
+ // on input types that don't support text selection (number, email in
45997
+ // some browsers) throws InvalidStateError, which would crash all input
45998
+ // handling. Wrap the read in try/catch belt-and-suspenders even though
45999
+ // the gated types currently support it, since the list is a public
46000
+ // property a consumer could mutate.
46001
+ if (this.setSelectionInputTypes.includes(this.type)) {
46002
+ let selectionStart;
46003
+ try {
46004
+ selectionStart = this.inputElement.selectionStart;
46005
+ } catch (error) { // eslint-disable-line no-unused-vars
46006
+ return;
46007
+ }
46008
+ if (typeof selectionStart !== 'number') {
46009
+ return;
46010
+ }
46011
+ this.updateComplete.then(() => {
46012
+ try {
46013
+ this.inputElement.setSelectionRange(selectionStart, selectionStart);
46014
+ } catch (error) { // eslint-disable-line no-unused-vars
46015
+ // Some input types (number/email in certain UAs) throw on
46016
+ // setSelectionRange; swallow and let the native cursor stand.
46017
+ }
46018
+ });
46019
+ }
46229
46020
  }
46230
46021
 
46231
46022
  /**
@@ -46852,7 +46643,7 @@ let AuroHelpText$1$3 = class AuroHelpText extends i$3 {
46852
46643
  }
46853
46644
  };
46854
46645
 
46855
- var formkitVersion$7 = '202606252324';
46646
+ var formkitVersion$7 = '202606252337';
46856
46647
 
46857
46648
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
46858
46649
  // See LICENSE in the project root for license information.
@@ -47355,6 +47146,7 @@ let AuroInput$1 = class AuroInput extends BaseInput$1 {
47355
47146
  <${this.buttonTag}
47356
47147
  @click="${this.handleClickShowPassword}"
47357
47148
  appearance="${this.onDark ? 'inverse' : this.appearance}"
47149
+ aria-pressed="${this.showPassword ? 'true' : 'false'}"
47358
47150
  class="notificationBtn passwordBtn"
47359
47151
  shape="circle"
47360
47152
  size="sm"
@@ -47428,25 +47220,29 @@ let AuroInput$1 = class AuroInput extends BaseInput$1 {
47428
47220
  * @returns {html} - Returns HTML for the help text and error message.
47429
47221
  */
47430
47222
  renderHtmlHelpText() {
47223
+ // Single `<p>` with stable identity across validity transitions —
47224
+ // previously two distinct templates (valid vs invalid) caused Lit to
47225
+ // replace the node entirely on a flip, and VoiceOver wouldn't
47226
+ // re-announce because the live-region element it was watching had been
47227
+ // removed and a new one inserted. Keeping one node means the `role`,
47228
+ // `aria-live`, and text content all change in-place, which AT does
47229
+ // observe and announce.
47230
+ const isError = this.validity && this.validity !== 'valid';
47431
47231
  return u$c`
47432
- ${!this.validity || this.validity === undefined || this.validity === 'valid'
47433
- ? u$c`
47434
- <${this.helpTextTag}
47435
- appearance="${this.onDark ? 'inverse' : this.appearance}">
47436
- <p id="${this.uniqueId}" part="helpText">
47437
- <slot name="helpText">${this.getHelpText()}</slot>
47438
- </p>
47439
- </${this.helpTextTag}>
47440
- `
47441
- : u$c`
47442
- <${this.helpTextTag} error
47443
- appearance="${this.onDark ? 'inverse' : this.appearance}">
47444
- <p id="${this.uniqueId}" role="alert" aria-live="assertive" part="helpText">
47445
- ${this.errorMessage}
47446
- </p>
47447
- </${this.helpTextTag}>
47448
- `
47449
- }
47232
+ <${this.helpTextTag}
47233
+ appearance="${this.onDark ? 'inverse' : this.appearance}"
47234
+ ?error=${isError}>
47235
+ <p
47236
+ id="${this.uniqueId}"
47237
+ part="helpText"
47238
+ role="${o$4(isError ? 'alert' : undefined)}"
47239
+ aria-live="${o$4(isError ? 'assertive' : undefined)}">
47240
+ ${isError
47241
+ ? this.errorMessage
47242
+ : u$c`<slot name="helpText">${this.getHelpText()}</slot>`
47243
+ }
47244
+ </p>
47245
+ </${this.helpTextTag}>
47450
47246
  `;
47451
47247
  }
47452
47248
 
@@ -47593,6 +47389,15 @@ function formatISODate(isoStr, format) {
47593
47389
  try {
47594
47390
  const date = dateFormatter$2.stringToDateInstance(isoStr);
47595
47391
 
47392
+ // `stringToDateInstance` returns an `Invalid Date` for malformed strings
47393
+ // and `null` for non-string input — it does NOT throw. Without this
47394
+ // guard, `getFullYear()`/`getMonth()`/`getDate()` on an Invalid Date
47395
+ // yield `NaN`, and `String(NaN).padStart(4, '0')` produces literals
47396
+ // like "0NaN/0NaN/0NaN" instead of `undefined`.
47397
+ if (!(date instanceof Date) || Number.isNaN(date.getTime())) {
47398
+ return undefined;
47399
+ }
47400
+
47596
47401
  const year = String(date.getFullYear()).padStart(4, '0');
47597
47402
  const month = String(date.getMonth() + 1).padStart(2, '0');
47598
47403
  const day = String(date.getDate()).padStart(2, '0');
@@ -47603,7 +47408,10 @@ function formatISODate(isoStr, format) {
47603
47408
  replace(/mm/iu, month).
47604
47409
  replace(/dd/iu, day);
47605
47410
  } catch (err) {
47606
- // If the input string is not a valid date, return undefined
47411
+ // Defensive: the Date-returning path is guarded above, but `parseDate`
47412
+ // (inside `stringToDateInstance`) could throw on pathological input
47413
+ // future-library-versions might introduce. Treat any thrown error as
47414
+ // "not a valid date" and return undefined.
47607
47415
  return undefined;
47608
47416
  }
47609
47417
  }
@@ -48329,7 +48137,6 @@ class AuroDatePicker extends AuroElement$5 {
48329
48137
  this.rangeLabelBeforeRange = 'before range';
48330
48138
  this.rangeLabelInRange = 'in range';
48331
48139
  this.rangeLabelAfterRange = 'after range';
48332
- this.rangeLabelEndPreview = 'previewing range end';
48333
48140
  this.blackoutDates = [];
48334
48141
  this.blackoutLabel = 'unavailable';
48335
48142
  this.navLabelPrevMonth = 'Previous month';
@@ -48429,22 +48236,6 @@ class AuroDatePicker extends AuroElement$5 {
48429
48236
  */
48430
48237
  this.handleClick = this.handleClick.bind(this);
48431
48238
 
48432
- /**
48433
- * Single AbortController shared by every listener registered in the
48434
- * configure* methods. Lets disconnectedCallback tear all of them down
48435
- * with one abort() call.
48436
- *
48437
- * The genuine leak risk is the listeners attached to children that can
48438
- * outlive the host if they get reparented — `this.dropdown`,
48439
- * `this.calendar`, and the inputs inside the dropdown's slot.
48440
- * Listeners attached to `this` (e.g. focusin/focusout on the host)
48441
- * form a self-contained reference graph that the GC can collect with
48442
- * the host anyway, but they share the same signal so the cleanup
48443
- * pattern stays uniform across all configure* sites.
48444
- * @private
48445
- */
48446
- this._listenerAbortController = new AbortController();
48447
-
48448
48239
  /**
48449
48240
  * @private
48450
48241
  */
@@ -48493,7 +48284,6 @@ class AuroDatePicker extends AuroElement$5 {
48493
48284
 
48494
48285
  /**
48495
48286
  * Label announced for blackout (disabled but in-range) date cells.
48496
- * @default 'unavailable'
48497
48287
  */
48498
48288
  blackoutLabel: {
48499
48289
  type: String,
@@ -48510,7 +48300,6 @@ class AuroDatePicker extends AuroElement$5 {
48510
48300
 
48511
48301
  /**
48512
48302
  * Accessible label for the calendar grid containing the days of the month.
48513
- * @default 'Calendar days of the month'
48514
48303
  */
48515
48304
  calendarGridLabel: {
48516
48305
  type: String,
@@ -48673,7 +48462,6 @@ class AuroDatePicker extends AuroElement$5 {
48673
48462
 
48674
48463
  /**
48675
48464
  * Accessible label for the next month navigation button.
48676
- * @default 'Next month'
48677
48465
  */
48678
48466
  navLabelNextMonth: {
48679
48467
  type: String,
@@ -48682,7 +48470,6 @@ class AuroDatePicker extends AuroElement$5 {
48682
48470
 
48683
48471
  /**
48684
48472
  * Accessible label for the previous month navigation button.
48685
- * @default 'Previous month'
48686
48473
  */
48687
48474
  navLabelPrevMonth: {
48688
48475
  type: String,
@@ -48760,11 +48547,7 @@ class AuroDatePicker extends AuroElement$5 {
48760
48547
  },
48761
48548
 
48762
48549
  /**
48763
- * Label announced for cells after a fully selected range (both
48764
- * `dateFrom` and `dateTo` are set). While a range is still being
48765
- * picked (`dateFrom` set, `dateTo` unset), focused cells past the
48766
- * start use `rangeLabelEndPreview` instead.
48767
- * @default 'after range'
48550
+ * Label announced for cells after the range (or after start when no end is selected).
48768
48551
  */
48769
48552
  rangeLabelAfterRange: {
48770
48553
  type: String,
@@ -48773,7 +48556,6 @@ class AuroDatePicker extends AuroElement$5 {
48773
48556
 
48774
48557
  /**
48775
48558
  * Label announced for cells before the range start.
48776
- * @default 'before range'
48777
48559
  */
48778
48560
  rangeLabelBeforeRange: {
48779
48561
  type: String,
@@ -48782,27 +48564,14 @@ class AuroDatePicker extends AuroElement$5 {
48782
48564
 
48783
48565
  /**
48784
48566
  * Label announced for the range end date cell.
48785
- * @default 'range end'
48786
48567
  */
48787
48568
  rangeLabelEnd: {
48788
48569
  type: String,
48789
48570
  reflect: true
48790
48571
  },
48791
48572
 
48792
- /**
48793
- * Label announced for the focused cell while previewing a range end
48794
- * (dateFrom set, dateTo not yet selected). Tells AT users that
48795
- * pressing Enter would commit this cell as the range end.
48796
- * @default 'previewing range end'
48797
- */
48798
- rangeLabelEndPreview: {
48799
- type: String,
48800
- reflect: true
48801
- },
48802
-
48803
48573
  /**
48804
48574
  * Label announced for cells within the selected range.
48805
- * @default 'in range'
48806
48575
  */
48807
48576
  rangeLabelInRange: {
48808
48577
  type: String,
@@ -48811,7 +48580,6 @@ class AuroDatePicker extends AuroElement$5 {
48811
48580
 
48812
48581
  /**
48813
48582
  * Label announced for the range start date cell.
48814
- * @default 'range start'
48815
48583
  */
48816
48584
  rangeLabelStart: {
48817
48585
  type: String,
@@ -48819,7 +48587,7 @@ class AuroDatePicker extends AuroElement$5 {
48819
48587
  },
48820
48588
 
48821
48589
  /**
48822
- * Dates that the user should have for reference as part of their decision-making when selecting a date.
48590
+ * Dates that the user should have for reference as part of their decision making when selecting a date.
48823
48591
  * This should be a JSON string array of ISO date strings (`YYYY-MM-DD`).
48824
48592
  */
48825
48593
  referenceDates: {
@@ -49176,26 +48944,10 @@ class AuroDatePicker extends AuroElement$5 {
49176
48944
  // ─── Vendor calendar time conversions ─────────────────────────────────────
49177
48945
 
49178
48946
  /**
49179
- * Converts a Unix timestamp (seconds) from the vendored range-datepicker
49180
- * (`src/vendor/wc-range-datepicker/day.js`) to an ISO date string.
49181
- *
49182
- * Timezone contract:
49183
- * - INPUT: `time` is assumed to be the seconds-since-epoch of **local
49184
- * midnight** for the intended calendar day. The vendor's Day constructor
49185
- * builds it via `date-fns format(date, 't')` from a locally-constructed
49186
- * Date, so this assumption currently holds end-to-end.
49187
- * - OUTPUT: `dateFormatter.toISOFormatString` reads the Date's local
49188
- * getFullYear/getMonth/getDate components, so the returned YYYY-MM-DD
49189
- * string matches the local calendar day.
49190
- *
49191
- * If the vendor ever switches to emitting UTC-midnight timestamps, this
49192
- * conversion will silently shift the returned date by one day in zones
49193
- * west of UTC. Any vendor swap should re-verify this contract; the TZ
49194
- * regression suite (`npm run test:hst`, UTC-10) will catch the symptom.
49195
- *
48947
+ * Converts a Unix timestamp (seconds) from the vendor calendar to an ISO date string.
49196
48948
  * @private
49197
- * @param {number} time - Unix timestamp (seconds), local midnight of the day.
49198
- * @returns {string} ISO date string (yyyy-mm-dd) reflecting the local calendar day.
48949
+ * @param {number} time - Unix timestamp in seconds.
48950
+ * @returns {string} ISO date string (yyyy-mm-dd).
49199
48951
  */
49200
48952
  convertWcTimeToDate(time) {
49201
48953
  return dateFormatter$1.toISOFormatString(new Date(time * 1000));
@@ -49297,8 +49049,8 @@ class AuroDatePicker extends AuroElement$5 {
49297
49049
  }
49298
49050
  }
49299
49051
 
49300
- // Focus the calendar grid wrapper. The live region (announced just
49301
- // below) handles the SR announcement for the active cell.
49052
+ // Focus the calendar grid wrapper (aria-activedescendant handles
49053
+ // the SR announcement for the active cell).
49302
49054
  if (activeCell) {
49303
49055
  this.calendar.focusActiveCell();
49304
49056
 
@@ -49348,13 +49100,11 @@ class AuroDatePicker extends AuroElement$5 {
49348
49100
  this.dropdown.bibDialogLabel = labelElement.textContent.trim() || undefined;
49349
49101
  }
49350
49102
 
49351
- const { signal } = this._listenerAbortController;
49352
-
49353
49103
  this.dropdown.addEventListener('auroDropdown-triggerClick', () => {
49354
49104
  if (!this.isPopoverVisible) {
49355
49105
  this.dropdown.show();
49356
49106
  }
49357
- }, { signal });
49107
+ });
49358
49108
 
49359
49109
  this.dropdown.addEventListener('auroDropdown-toggled', () => {
49360
49110
  this.notifyDatepickerToggled();
@@ -49372,7 +49122,7 @@ class AuroDatePicker extends AuroElement$5 {
49372
49122
  if (this.valueObject) {
49373
49123
  this.centralDate = this.value;
49374
49124
  } else if (!this.centralDate && !this.calendarStartDate && !this.minDate) {
49375
- this.centralDate = dateFormatter$1.toISOFormatString(new Date());
49125
+ this.centralDate = new Date();
49376
49126
  }
49377
49127
  }
49378
49128
 
@@ -49452,7 +49202,7 @@ class AuroDatePicker extends AuroElement$5 {
49452
49202
  this.forceScrollOnNextMobileCalendarRender = false;
49453
49203
  }, 0);
49454
49204
  }
49455
- }, { signal });
49205
+ });
49456
49206
 
49457
49207
  // Handle responsive strategy changes while the dropdown is open
49458
49208
  // (e.g. resizing from desktop → mobile or vice versa).
@@ -49499,7 +49249,7 @@ class AuroDatePicker extends AuroElement$5 {
49499
49249
  });
49500
49250
  });
49501
49251
  }
49502
- }, { signal });
49252
+ });
49503
49253
  }
49504
49254
 
49505
49255
  /**
@@ -49512,8 +49262,6 @@ class AuroDatePicker extends AuroElement$5 {
49512
49262
 
49513
49263
  this.inputList = [...this.dropdown.querySelectorAll(this.inputTag._$litStatic$)];
49514
49264
 
49515
- const { signal } = this._listenerAbortController;
49516
-
49517
49265
  this.inputList.forEach((input, index) => {
49518
49266
  input.addEventListener('input', (event) => {
49519
49267
  event.stopPropagation();
@@ -49525,7 +49273,7 @@ class AuroDatePicker extends AuroElement$5 {
49525
49273
  }
49526
49274
 
49527
49275
  this.notifyValueChanged();
49528
- }, { signal });
49276
+ });
49529
49277
 
49530
49278
  input.addEventListener('auroFormElement-validated', (evt) => {
49531
49279
  // not to bubble up input's validated event.
@@ -49541,7 +49289,7 @@ class AuroDatePicker extends AuroElement$5 {
49541
49289
  this.validity = evt.detail.validity;
49542
49290
  this.errorMessage = evt.detail.message;
49543
49291
  }
49544
- }, { signal });
49292
+ });
49545
49293
  });
49546
49294
  }
49547
49295
 
@@ -49555,32 +49303,19 @@ class AuroDatePicker extends AuroElement$5 {
49555
49303
  this.calendar.datepicker = this;
49556
49304
  this.calendar.dropdown = this.dropdown;
49557
49305
 
49558
- const { signal } = this._listenerAbortController;
49559
-
49560
49306
  this.calendar.addEventListener('auroCalendar-dateSelected', () => {
49561
- // Compare the input's ISO value against the *converted* calendar
49562
- // timestamp (the vendor's `dateFrom`/`dateTo` are Unix-seconds
49563
- // strings — comparing the input ISO directly against them would
49564
- // never match, so the write would fire on every event and emit
49565
- // redundant input/change activity).
49566
- if (this.calendar.dateFrom !== undefined) {
49567
- const fromIso = this.convertWcTimeToDate(this.calendar.dateFrom);
49568
- if (this.inputList[0].value !== fromIso) {
49569
- this.inputList[0].value = fromIso;
49570
- }
49307
+ if (this.inputList[0].value !== this.calendar.dateFrom && this.calendar.dateFrom !== undefined) {
49308
+ this.inputList[0].value = this.convertWcTimeToDate(this.calendar.dateFrom);
49571
49309
  }
49572
49310
 
49573
- if (this.inputList[1] && this.calendar.dateTo) {
49574
- const toIso = this.convertWcTimeToDate(this.calendar.dateTo);
49575
- if (this.inputList[1].value !== toIso) {
49576
- this.inputList[1].value = toIso;
49577
- }
49311
+ if (this.inputList[1] && this.calendar.dateTo && this.inputList[1].value !== this.calendar.dateTo) {
49312
+ this.inputList[1].value = this.convertWcTimeToDate(this.calendar.dateTo);
49578
49313
  }
49579
- }, { signal });
49314
+ });
49580
49315
 
49581
49316
  this.calendar.addEventListener('auroCalendar-dismissRequest', () => {
49582
49317
  this.dropdown.hide();
49583
- }, { signal });
49318
+ });
49584
49319
 
49585
49320
  this.calendar.addEventListener('auroCalendar-centralDateChanged', (event) => {
49586
49321
  const match = this.centralDateObject && this.util.datesMatch(event.detail.date, this.centralDateObject);
@@ -49590,7 +49325,7 @@ class AuroDatePicker extends AuroElement$5 {
49590
49325
  }
49591
49326
 
49592
49327
  this.notifyMonthChanged(event);
49593
- }, { signal });
49328
+ });
49594
49329
  }
49595
49330
 
49596
49331
  /**
@@ -49599,17 +49334,10 @@ class AuroDatePicker extends AuroElement$5 {
49599
49334
  * @returns {void}
49600
49335
  */
49601
49336
  configureDatepicker() {
49602
- // These listeners are on `this` (the host), so they would GC with the
49603
- // host even without the abort signal — see the leak rationale on
49604
- // `_listenerAbortController`. The signal is still passed for uniform
49605
- // cleanup semantics with the child-element listeners in the other
49606
- // configure* methods.
49607
- const { signal } = this._listenerAbortController;
49608
-
49609
49337
  this.addEventListener('focusin', () => {
49610
49338
  this.touched = true;
49611
49339
  this.hasFocus = true;
49612
- }, { signal });
49340
+ });
49613
49341
 
49614
49342
  this.addEventListener('focusout', () => {
49615
49343
  this.hasFocus = false;
@@ -49621,7 +49349,7 @@ class AuroDatePicker extends AuroElement$5 {
49621
49349
  if (!this.matches(':focus-within')) {
49622
49350
  this.validate();
49623
49351
  }
49624
- }, { signal });
49352
+ });
49625
49353
 
49626
49354
  if (this.valueObject) {
49627
49355
  this.calendar.dateFrom = this.convertToWcValidTime(this.valueObject);
@@ -49819,41 +49547,6 @@ class AuroDatePicker extends AuroElement$5 {
49819
49547
  return this.validity !== undefined && this.validity !== 'valid';
49820
49548
  }
49821
49549
 
49822
- /**
49823
- * Per-class dedup set used by `_warnInvalidLocale`. Static so the dedup
49824
- * spans every datepicker instance on the page; lives on the class (not
49825
- * at module scope) so it stays an encapsulated implementation detail of
49826
- * this component and does not interfere with WCA's class-JSDoc
49827
- * attachment.
49828
- * @private
49829
- */
49830
- static _warnedInvalidLocales = new Set();
49831
-
49832
- /**
49833
- * Logs a one-time `console.debug` when an unsupported locale falls back to
49834
- * en-US. Deduped by the offending tag so noisy re-renders that resurface
49835
- * the same bad value stay quiet, but each new bad value still signals so
49836
- * consumers can spot the typo or missing tag.
49837
- * @private
49838
- * @param {string|undefined} badLocale - The locale value that failed.
49839
- * @returns {void}
49840
- */
49841
- _warnInvalidLocale(badLocale) {
49842
- // Stringify without coalescing — `String(undefined)` / `String(null)`
49843
- // surface the actual offending value in the log, instead of the
49844
- // ambiguous `Locale ""` that `String(badLocale ?? '')` would produce.
49845
- // Dedup still works correctly because each unique stringification
49846
- // becomes its own Set entry.
49847
- const key = String(badLocale);
49848
- const seen = AuroDatePicker._warnedInvalidLocales;
49849
- if (seen.has(key)) {
49850
- return;
49851
- }
49852
- seen.add(key);
49853
- // eslint-disable-next-line no-console
49854
- 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".`);
49855
- }
49856
-
49857
49550
  /**
49858
49551
  * Lifecycle method to check if the locale is valid.
49859
49552
  * @ignore
@@ -49864,15 +49557,10 @@ class AuroDatePicker extends AuroElement$5 {
49864
49557
  if (changedProperties.has('locale')) {
49865
49558
  try {
49866
49559
  const supported = Intl.DateTimeFormat.supportedLocalesOf([this.locale], { localeMatcher: 'lookup' });
49867
- if (supported.length > 0) {
49868
- this._validLocale = this.locale;
49869
- } else {
49870
- this._validLocale = 'en-US';
49871
- this._warnInvalidLocale(this.locale);
49872
- }
49560
+ this._validLocale = supported.length > 0 ? this.locale : 'en-US';
49873
49561
  } catch {
49562
+ console.debug(`[AuroDatePicker] The locale "${this.locale}" is not valid. Falling back to "en-US".`); // eslint-disable-line no-console
49874
49563
  this._validLocale = 'en-US';
49875
- this._warnInvalidLocale(this.locale);
49876
49564
  }
49877
49565
 
49878
49566
  const previousLocaleFormat = getDateFormatFromLocale$1(changedProperties.get('locale'));
@@ -49954,6 +49642,8 @@ class AuroDatePicker extends AuroElement$5 {
49954
49642
  // Skip centralDate update when user clicked a cell in range mode
49955
49643
  // to prevent the displayed months from shifting
49956
49644
  this.centralDate = this.value;
49645
+ //TODO: TEST THIS CHANGE
49646
+ // this.calendarRenderUtil.updateCentralDate(this, this.value);
49957
49647
  }
49958
49648
 
49959
49649
  this.setHasValue();
@@ -50013,6 +49703,8 @@ class AuroDatePicker extends AuroElement$5 {
50013
49703
  // Skip centralDate update when user clicked a cell in range mode
50014
49704
  // to prevent the displayed months from shifting
50015
49705
  this.centralDate = this.valueEnd;
49706
+ // TODO: TEST THIS CHANGE
49707
+ // this.calendarRenderUtil.updateCentralDate(this, this.formattedValueEnd);
50016
49708
  }
50017
49709
 
50018
49710
  this.validate();
@@ -50154,7 +49846,7 @@ class AuroDatePicker extends AuroElement$5 {
50154
49846
  * @returns {void}
50155
49847
  */
50156
49848
  configureClickHandler() {
50157
- this.addEventListener('click', this.handleClick, { signal: this._listenerAbortController.signal });
49849
+ this.addEventListener('click', this.handleClick);
50158
49850
  }
50159
49851
 
50160
49852
  firstUpdated() {
@@ -50162,15 +49854,6 @@ class AuroDatePicker extends AuroElement$5 {
50162
49854
  // Add the tag name as an attribute if it is different than the component name
50163
49855
  this.runtimeUtils.handleComponentTagRename(this, 'auro-datepicker');
50164
49856
 
50165
- // If the element was disconnected before this first render finished,
50166
- // disconnectedCallback's microtask already aborted the controller. The
50167
- // connectedCallback reinit guard skips that case because `hasUpdated`
50168
- // is still false. Mint a fresh controller here so configure* registers
50169
- // listeners against a live signal.
50170
- if (this._listenerAbortController.signal.aborted) {
50171
- this._listenerAbortController = new AbortController();
50172
- }
50173
-
50174
49857
  this.configureDropdown();
50175
49858
  this.configureInput();
50176
49859
  this.configureCalendar();
@@ -50182,36 +49865,9 @@ class AuroDatePicker extends AuroElement$5 {
50182
49865
  connectedCallback() {
50183
49866
  super.connectedCallback();
50184
49867
 
50185
- // True reconnect after `disconnectedCallback` aborted our controller:
50186
- // the existing signal is dead, so listeners registered against it
50187
- // would never fire. Create a fresh controller and re-run the
50188
- // configure* wiring (each method is idempotent — it just re-caches
50189
- // child refs and re-registers listeners against the new signal).
50190
- // `hasUpdated` gates this so the *first* connect (which precedes
50191
- // firstUpdated) still falls through to firstUpdated's initial wiring.
50192
- if (this.hasUpdated && this._listenerAbortController.signal.aborted) {
50193
- this._listenerAbortController = new AbortController();
50194
- this.configureDropdown();
50195
- this.configureInput();
50196
- this.configureCalendar();
50197
- this.configureDatepicker();
50198
- this.configureClickHandler();
50199
- }
50200
-
50201
49868
  this.locale = this.domHandler.getLocale(this);
50202
49869
  }
50203
49870
 
50204
- disconnectedCallback() {
50205
- super.disconnectedCallback();
50206
- // Defer so that re-parenting (auro-drawer slotting it into a dialog,
50207
- // for example) does not abort listeners we still need after reconnect.
50208
- queueMicrotask(() => {
50209
- if (!this.isConnected) {
50210
- this._listenerAbortController.abort();
50211
- }
50212
- });
50213
- }
50214
-
50215
49871
  // layout render methods
50216
49872
  // ------------------------------------
50217
49873
 
@@ -51707,7 +51363,7 @@ let AuroHelpText$1$2 = class AuroHelpText extends i$3 {
51707
51363
  }
51708
51364
  };
51709
51365
 
51710
- var formkitVersion$1$2 = '202606252324';
51366
+ var formkitVersion$1$2 = '202606252337';
51711
51367
 
51712
51368
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
51713
51369
  // See LICENSE in the project root for license information.
@@ -56035,7 +55691,7 @@ let AuroHelpText$6 = class AuroHelpText extends i$3 {
56035
55691
  }
56036
55692
  };
56037
55693
 
56038
- var formkitVersion$6 = '202606252324';
55694
+ var formkitVersion$6 = '202606252337';
56039
55695
 
56040
55696
  let AuroElement$1$2 = class AuroElement extends i$3 {
56041
55697
  static get properties() {
@@ -59975,7 +59631,7 @@ let AuroHelpText$5 = class AuroHelpText extends i$3 {
59975
59631
  }
59976
59632
  };
59977
59633
 
59978
- var formkitVersion$5 = '202606252324';
59634
+ var formkitVersion$5 = '202606252337';
59979
59635
 
59980
59636
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
59981
59637
  // See LICENSE in the project root for license information.
@@ -61725,7 +61381,7 @@ let AuroHelpText$4 = class AuroHelpText extends i$3 {
61725
61381
  }
61726
61382
  };
61727
61383
 
61728
- var formkitVersion$4 = '202606252324';
61384
+ var formkitVersion$4 = '202606252337';
61729
61385
 
61730
61386
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
61731
61387
  // See LICENSE in the project root for license information.
@@ -66940,7 +66596,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$3 {
66940
66596
  }
66941
66597
  };
66942
66598
 
66943
- var formkitVersion$2 = '202606252324';
66599
+ var formkitVersion$2 = '202606252337';
66944
66600
 
66945
66601
  let AuroElement$2$1 = class AuroElement extends i$3 {
66946
66602
  static get properties() {
@@ -78658,6 +78314,13 @@ class AuroInputUtilities {
78658
78314
  * @returns {string | undefined}
78659
78315
  */
78660
78316
  toFormattedValue(valueObject, format) {
78317
+ // Exposed publicly via `AuroInputUtil.toFormattedValue`, so a missing
78318
+ // `format` argument has to fail gracefully rather than throw on
78319
+ // `format.toLowerCase()`. Treat any falsy value (undefined, null, '')
78320
+ // as "no format → no display value".
78321
+ if (!format) {
78322
+ return undefined;
78323
+ }
78661
78324
  const normalizedFormat = format.toLowerCase();
78662
78325
  const maskOptions = this.getMaskOptions('date', normalizedFormat);
78663
78326
 
@@ -78808,79 +78471,18 @@ class BaseInput extends AuroElement$1$1 {
78808
78471
  constructor() {
78809
78472
  super();
78810
78473
 
78811
- this.appearance = "default";
78812
- this.disabled = false;
78813
- this.layout = 'classic';
78814
- this.locale = 'en-US';
78815
- this.max = undefined;
78816
- this._maxObject = undefined;
78817
- this.maxLength = undefined;
78818
- this.min = undefined;
78819
- this._minObject = undefined;
78820
- this.minLength = undefined;
78821
- this.required = false;
78822
- this.onDark = false;
78823
- this.setCustomValidityForType = undefined;
78824
- this.size = 'lg';
78825
- this.shape = 'classic';
78826
- this.value = undefined;
78827
- this._valueObject = undefined;
78828
-
78829
- this._initializePrivateDefaults();
78830
- }
78831
-
78832
- /**
78833
- * Internal Defaults.
78834
- * @private
78835
- * @returns {void}
78836
- */
78837
- _initializePrivateDefaults() {
78474
+ // Single-source initialization. Alphabetized so duplicate or stale
78475
+ // defaults are immediately obvious on a diff. Every field is assigned
78476
+ // exactly once here (previously the constructor + the old
78477
+ // `_initializePrivateDefaults` overlapped — both wrote ~14 of the same
78478
+ // fields and double-allocated `util` and `validation`, discarding the
78479
+ // first instance). `validation` is now allocated exactly once; `util`
78480
+ // is seeded here with an en-US default and then rebuilt in
78481
+ // `connectedCallback` once the consumer-resolved locale is available,
78482
+ // so a parent (datepicker/combobox) calling `validate()` synchronously
78483
+ // during its own update cycle sees a populated util instance.
78838
78484
  this.activeLabel = false;
78839
- this.appearance = "default";
78840
- this.icon = false;
78841
- this.disabled = false;
78842
- this.dvInputOnly = false;
78843
- this.hideLabelVisually = false;
78844
- this.max = undefined;
78845
- this.maxLength = undefined;
78846
- this.min = undefined;
78847
- this.minLength = undefined;
78848
- this.noValidate = false;
78849
- this.onDark = false;
78850
- this.required = false;
78851
- this.setCustomValidityForType = undefined;
78852
-
78853
- // Used for storing raw values returned from input mask.
78854
- this._rawMaskValue = undefined;
78855
-
78856
- /**
78857
- * @private
78858
- */
78859
- this.layout = 'classic';
78860
-
78861
- /**
78862
- * @private
78863
- */
78864
- this.shape = 'classic';
78865
-
78866
- /**
78867
- * @private
78868
- */
78869
- this.size = 'lg';
78870
-
78871
- this.touched = false;
78872
- this.util = new AuroInputUtilities({
78873
- locale: "en-US",
78874
- format: this.format
78875
- });
78876
- this.validation = new AuroFormValidation$2();
78877
- this.inputIconName = undefined;
78878
- this.showPassword = false;
78879
- this.validationCCLength = undefined;
78880
- this.hasValue = false;
78881
- this.label = 'Input label is undefined';
78882
-
78883
-
78485
+ /** @private */
78884
78486
  this.allowedInputTypes = [
78885
78487
  "text",
78886
78488
  "number",
@@ -78889,7 +78491,8 @@ class BaseInput extends AuroElement$1$1 {
78889
78491
  "credit-card",
78890
78492
  "tel"
78891
78493
  ];
78892
- this.icon = false;
78494
+ this.appearance = "default";
78495
+ /** @private */
78893
78496
  this.dateFormatMap = {
78894
78497
  'mm/dd/yyyy': 'dateMMDDYYYY',
78895
78498
  'dd/mm/yyyy': 'dateDDMMYYYY',
@@ -78906,27 +78509,57 @@ class BaseInput extends AuroElement$1$1 {
78906
78509
  'dd/mm': 'dateDDMM',
78907
78510
  'mm/dd': 'dateMMDD'
78908
78511
  };
78512
+ this.disabled = false;
78513
+ /** @private */
78909
78514
  this.domHandler = new DomHandler();
78910
78515
  this.dvInputOnly = false;
78911
78516
  this.hasValue = false;
78517
+ this.hideLabelVisually = false;
78518
+ this.icon = false;
78519
+ /** @private */
78912
78520
  this.inputIconName = undefined;
78521
+ /** @private */
78913
78522
  this.label = 'Input label is undefined';
78523
+ this.layout = 'classic';
78524
+ this.locale = 'en-US';
78525
+ this.max = undefined;
78526
+ this._maxObject = undefined;
78527
+ this.maxLength = undefined;
78528
+ this.min = undefined;
78529
+ this._minObject = undefined;
78530
+ this.minLength = undefined;
78914
78531
  this.noValidate = false;
78915
- this._rawMaskValue = undefined; // Used for storing raw values returned from input mask.
78532
+ this.onDark = false;
78533
+ // Raw values returned from the input mask before model normalization.
78534
+ this._rawMaskValue = undefined;
78535
+ this.required = false;
78536
+ this.setCustomValidityForType = undefined;
78537
+ // Credit Card is intentionally excluded — its mask manages the cursor
78538
+ // itself, and listing it here caused cursor placement issues in Safari.
78539
+ /** @private */
78916
78540
  this.setSelectionInputTypes = [
78917
78541
  "text",
78918
78542
  "password",
78919
78543
  "email"
78920
- ]; // Credit Card is not included as this caused cursor placement issues in Safari.
78544
+ ];
78545
+ this.shape = 'classic';
78546
+ /** @private */
78921
78547
  this.showPassword = false;
78548
+ this.size = 'lg';
78922
78549
  this.touched = false;
78550
+ /** @private */
78923
78551
  this.uniqueId = new UniqueId().create();
78552
+ /** @private */
78924
78553
  this.util = new AuroInputUtilities({
78925
78554
  locale: this.locale,
78926
78555
  format: this.format
78927
78556
  });
78557
+ /** @private */
78928
78558
  this.validation = new AuroFormValidation$2();
78559
+ /** @private */
78929
78560
  this.validationCCLength = undefined;
78561
+ this.value = undefined;
78562
+ this._valueObject = undefined;
78930
78563
  }
78931
78564
 
78932
78565
  // function to define props used within the scope of this component
@@ -79474,6 +79107,15 @@ class BaseInput extends AuroElement$1$1 {
79474
79107
 
79475
79108
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
79476
79109
 
79110
+ // Normalize the format token to lowercase so case-mixed values supplied
79111
+ // via attribute (e.g. `format="MM/DD/YYYY"`) hit the `dateFormatMap`
79112
+ // lookup inside `setCustomHelpTextMessage`. Without this, an uppercase
79113
+ // format silently misses the map and leaves `setCustomValidityForType`
79114
+ // unset.
79115
+ if (this.format) {
79116
+ this.format = this.format.toLowerCase();
79117
+ }
79118
+
79477
79119
  // use validity message override if declared when initializing the component
79478
79120
  if (this.hasAttribute('setCustomValidity')) {
79479
79121
  this.ValidityMessageOverride = this.setCustomValidity;
@@ -79907,6 +79549,38 @@ class BaseInput extends AuroElement$1$1 {
79907
79549
  this.touched = true;
79908
79550
  this.validation.validate(this);
79909
79551
  }
79552
+
79553
+ // Prevents cursor jumping in Safari. Setting `this.value` triggers a Lit
79554
+ // update that can re-render the input and reset the native cursor; we
79555
+ // capture the caret position before that update commits and restore it
79556
+ // via `setSelectionRange` once the update has flushed. Gated on
79557
+ // `setSelectionInputTypes` so credit-card (and other masked types whose
79558
+ // formatter manages the cursor itself) doesn't get a competing write.
79559
+ // Capture the caret position INSIDE the gate — reading `selectionStart`
79560
+ // on input types that don't support text selection (number, email in
79561
+ // some browsers) throws InvalidStateError, which would crash all input
79562
+ // handling. Wrap the read in try/catch belt-and-suspenders even though
79563
+ // the gated types currently support it, since the list is a public
79564
+ // property a consumer could mutate.
79565
+ if (this.setSelectionInputTypes.includes(this.type)) {
79566
+ let selectionStart;
79567
+ try {
79568
+ selectionStart = this.inputElement.selectionStart;
79569
+ } catch (error) { // eslint-disable-line no-unused-vars
79570
+ return;
79571
+ }
79572
+ if (typeof selectionStart !== 'number') {
79573
+ return;
79574
+ }
79575
+ this.updateComplete.then(() => {
79576
+ try {
79577
+ this.inputElement.setSelectionRange(selectionStart, selectionStart);
79578
+ } catch (error) { // eslint-disable-line no-unused-vars
79579
+ // Some input types (number/email in certain UAs) throw on
79580
+ // setSelectionRange; swallow and let the native cursor stand.
79581
+ }
79582
+ });
79583
+ }
79910
79584
  }
79911
79585
 
79912
79586
  /**
@@ -80533,7 +80207,7 @@ let AuroHelpText$1$1 = class AuroHelpText extends i$3 {
80533
80207
  }
80534
80208
  };
80535
80209
 
80536
- var formkitVersion$1$1 = '202606252324';
80210
+ var formkitVersion$1$1 = '202606252337';
80537
80211
 
80538
80212
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
80539
80213
  // See LICENSE in the project root for license information.
@@ -81036,6 +80710,7 @@ class AuroInput extends BaseInput {
81036
80710
  <${this.buttonTag}
81037
80711
  @click="${this.handleClickShowPassword}"
81038
80712
  appearance="${this.onDark ? 'inverse' : this.appearance}"
80713
+ aria-pressed="${this.showPassword ? 'true' : 'false'}"
81039
80714
  class="notificationBtn passwordBtn"
81040
80715
  shape="circle"
81041
80716
  size="sm"
@@ -81109,25 +80784,29 @@ class AuroInput extends BaseInput {
81109
80784
  * @returns {html} - Returns HTML for the help text and error message.
81110
80785
  */
81111
80786
  renderHtmlHelpText() {
80787
+ // Single `<p>` with stable identity across validity transitions —
80788
+ // previously two distinct templates (valid vs invalid) caused Lit to
80789
+ // replace the node entirely on a flip, and VoiceOver wouldn't
80790
+ // re-announce because the live-region element it was watching had been
80791
+ // removed and a new one inserted. Keeping one node means the `role`,
80792
+ // `aria-live`, and text content all change in-place, which AT does
80793
+ // observe and announce.
80794
+ const isError = this.validity && this.validity !== 'valid';
81112
80795
  return u$c`
81113
- ${!this.validity || this.validity === undefined || this.validity === 'valid'
81114
- ? u$c`
81115
- <${this.helpTextTag}
81116
- appearance="${this.onDark ? 'inverse' : this.appearance}">
81117
- <p id="${this.uniqueId}" part="helpText">
81118
- <slot name="helpText">${this.getHelpText()}</slot>
81119
- </p>
81120
- </${this.helpTextTag}>
81121
- `
81122
- : u$c`
81123
- <${this.helpTextTag} error
81124
- appearance="${this.onDark ? 'inverse' : this.appearance}">
81125
- <p id="${this.uniqueId}" role="alert" aria-live="assertive" part="helpText">
81126
- ${this.errorMessage}
81127
- </p>
81128
- </${this.helpTextTag}>
81129
- `
81130
- }
80796
+ <${this.helpTextTag}
80797
+ appearance="${this.onDark ? 'inverse' : this.appearance}"
80798
+ ?error=${isError}>
80799
+ <p
80800
+ id="${this.uniqueId}"
80801
+ part="helpText"
80802
+ role="${o$4(isError ? 'alert' : undefined)}"
80803
+ aria-live="${o$4(isError ? 'assertive' : undefined)}">
80804
+ ${isError
80805
+ ? this.errorMessage
80806
+ : u$c`<slot name="helpText">${this.getHelpText()}</slot>`
80807
+ }
80808
+ </p>
80809
+ </${this.helpTextTag}>
81131
80810
  `;
81132
80811
  }
81133
80812
 
@@ -81654,7 +81333,7 @@ let AuroBibtemplate$1 = class AuroBibtemplate extends i$3 {
81654
81333
  }
81655
81334
  };
81656
81335
 
81657
- var formkitVersion$3 = '202606252324';
81336
+ var formkitVersion$3 = '202606252337';
81658
81337
 
81659
81338
  var styleCss$1$3 = i$6`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock{display:block}.util_displayFlex{display:flex}.util_displayHidden{display:none}.util_displayHiddenVisually{position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}:host{display:block;text-align:left}:host [auro-dropdown]{--ds-auro-dropdown-trigger-background-color: transparent}:host #inputInBib::part(wrapper){box-shadow:none}:host #inputInBib::part(accent-left){display:none}:host([layout*=classic]) [auro-input]{width:100%}:host([layout*=classic]) [auro-input]::part(helpText){display:none}:host([layout*=classic]) #slotHolder{display:none}`;
81660
81339
 
@@ -90445,7 +90124,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
90445
90124
  }
90446
90125
  };
90447
90126
 
90448
- var formkitVersion$1 = '202606252324';
90127
+ var formkitVersion$1 = '202606252337';
90449
90128
 
90450
90129
  class AuroElement extends i$3 {
90451
90130
  static get properties() {
@@ -92466,7 +92145,7 @@ class AuroHelpText extends i$3 {
92466
92145
  }
92467
92146
  }
92468
92147
 
92469
- var formkitVersion = '202606252324';
92148
+ var formkitVersion = '202606252337';
92470
92149
 
92471
92150
  var styleCss = i$6`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock{display:block}.util_displayFlex{display:flex}.util_displayHidden{display:none}.util_displayHiddenVisually{position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}.body-default{font-size:var(--wcss-body-default-font-size, 1rem);font-weight:var(--wcss-body-default-weight, );line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-default-emphasized{font-size:var(--wcss-body-default-emphasized-font-size, 1rem);font-weight:var(--wcss-body-default-emphasized-weight, );line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);font-weight:var(--wcss-body-lg-weight, );line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg,.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg-emphasized{font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);font-weight:var(--wcss-body-lg-emphasized-weight, );line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, 0.875rem);font-weight:var(--wcss-body-sm-weight, );line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-sm-emphasized{font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);font-weight:var(--wcss-body-sm-emphasized-weight, );line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-size:var(--wcss-body-xs-font-size, 0.75rem);font-weight:var(--wcss-body-xs-weight, );line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs,.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs-emphasized{font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);font-weight:var(--wcss-body-xs-emphasized-weight, );line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-size:var(--wcss-body-2xs-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-weight, );line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs,.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-2xs-emphasized{font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-emphasized-weight, );line-height:var(--wcss-body-2xs-emphasized-line-height, 0.875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));font-weight:var(--wcss-display-2xl-weight, 300);letter-spacing:var(--wcss-display-2xl-letter-spacing, 0);line-height:var(--wcss-display-2xl-line-height, 1.3)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));font-weight:var(--wcss-display-xl-weight, 300);letter-spacing:var(--wcss-display-xl-letter-spacing, 0);line-height:var(--wcss-display-xl-line-height, 1.3)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));font-weight:var(--wcss-display-lg-weight, 300);letter-spacing:var(--wcss-display-lg-letter-spacing, 0);line-height:var(--wcss-display-lg-line-height, 1.3)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));font-weight:var(--wcss-display-md-weight, 300);letter-spacing:var(--wcss-display-md-letter-spacing, 0);line-height:var(--wcss-display-md-line-height, 1.3)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));font-weight:var(--wcss-display-sm-weight, 300);letter-spacing:var(--wcss-display-sm-letter-spacing, 0);line-height:var(--wcss-display-sm-line-height, 1.3)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));font-weight:var(--wcss-display-xs-weight, 300);letter-spacing:var(--wcss-display-xs-letter-spacing, 0);line-height:var(--wcss-display-xs-line-height, 1.3)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));font-weight:var(--wcss-heading-xl-weight, 300);letter-spacing:var(--wcss-heading-xl-letter-spacing, 0);line-height:var(--wcss-heading-xl-line-height, 1.3)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));font-weight:var(--wcss-heading-lg-weight, 300);letter-spacing:var(--wcss-heading-lg-letter-spacing, 0);line-height:var(--wcss-heading-lg-line-height, 1.3)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));font-weight:var(--wcss-heading-md-weight, 300);letter-spacing:var(--wcss-heading-md-letter-spacing, 0);line-height:var(--wcss-heading-md-line-height, 1.3)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));font-weight:var(--wcss-heading-sm-weight, 300);letter-spacing:var(--wcss-heading-sm-letter-spacing, 0);line-height:var(--wcss-heading-sm-line-height, 1.3)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));font-weight:var(--wcss-heading-xs-weight, 300);letter-spacing:var(--wcss-heading-xs-letter-spacing, 0);line-height:var(--wcss-heading-xs-line-height, 1.3)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));font-weight:var(--wcss-heading-2xs-weight, 300);letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0);line-height:var(--wcss-heading-2xs-line-height, 1.3)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));font-weight:var(--wcss-accent-2xl-weight, 450);letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);line-height:var(--wcss-accent-2xl-line-height, 1)}.accent-2xl,.accent-xl{text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));font-weight:var(--wcss-accent-xl-weight, 450);letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);line-height:var(--wcss-accent-xl-line-height, 1.3)}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));font-weight:var(--wcss-accent-lg-weight, 450);letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);line-height:var(--wcss-accent-lg-line-height, 1.3)}.accent-lg,.accent-md{text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));font-weight:var(--wcss-accent-md-weight, 500);letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);line-height:var(--wcss-accent-md-line-height, 1.3)}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));font-weight:var(--wcss-accent-sm-weight, 500);letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);line-height:var(--wcss-accent-sm-line-height, 1.3)}.accent-sm,.accent-xs{text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));font-weight:var(--wcss-accent-xs-weight, 500);letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);line-height:var(--wcss-accent-xs-line-height, 1.3)}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}[auro-dropdown]{--ds-auro-dropdown-trigger-border-color: var(--ds-auro-select-border-color);--ds-auro-dropdown-trigger-background-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-container-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-outline-color: var(--ds-auro-select-outline-color)}:host{display:inline-block;text-align:left;vertical-align:top}:host([layout*=emphasized]) [auro-dropdown],:host([layout*=snowflake]) [auro-dropdown]{--ds-auro-select-border-color: transparent}:host([layout*=emphasized]) .mainContent,:host([layout*=snowflake]) .mainContent{text-align:center}.mainContent{position:relative;display:flex;overflow:hidden;flex:1;flex-direction:column;align-items:center;justify-content:center}.valueContainer [slot=displayValue]{display:none}.accents{display:flex;flex-direction:row;align-items:center;justify-content:center}::slotted([slot=typeIcon]){margin-right:var(--ds-size-100, 0.5rem)}.displayValue{display:block}.displayValue:not(.force){display:none}.displayValue:not(.force).hasContent:is(.withValue):not(.hasFocus){display:block}.triggerContent{display:flex;width:100%;align-items:center;justify-content:center}:host([layout*=emphasized]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-300, 1.5rem)}:host([layout*=snowflake]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-200, 1rem)}:host([layout*=snowflake]) label{padding-block:var(--ds-size-25, 0.125rem)}:host([layout*=classic]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem)}:host([layout*=classic]) .mainContent{align-items:start}:host([layout*=classic]) label{overflow:hidden;cursor:text;text-overflow:ellipsis;white-space:nowrap}:host([layout*=classic]) .value{height:auto}label{color:var(--ds-auro-select-label-text-color)}:host(:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-select-outline-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-default, #2a2a2a)}:host([ondark]:is([validity]:not([validity=valid]))) [auro-dropdown],:host([appearance=inverse]:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-select-outline-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}#slotHolder{display:none}:host([fluid]){width:100%}:host([disabled]){pointer-events:none;user-select:none}:host([disabled]:not([ondark])) [auro-dropdown],:host([disabled]:not([appearance=inverse])) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-border-subtle, #dddddd)}:host(:not([layout*=classic])[disabled][ondark]) [auro-dropdown],:host(:not([layout*=classic])[disabled][appearance=inverse]) [auro-dropdown]{--ds-auro-select-border-color: transparent}`;
92472
92151