@aurodesignsystem-dev/auro-formkit 0.0.0-pr1530.0 → 0.0.0-pr1530.2

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 (52) hide show
  1. package/components/checkbox/demo/customize.min.js +1 -1
  2. package/components/checkbox/demo/getting-started.min.js +1 -1
  3. package/components/checkbox/demo/index.min.js +1 -1
  4. package/components/checkbox/dist/index.js +1 -1
  5. package/components/checkbox/dist/registered.js +1 -1
  6. package/components/combobox/demo/customize.min.js +42 -29
  7. package/components/combobox/demo/getting-started.min.js +42 -29
  8. package/components/combobox/demo/index.min.js +42 -29
  9. package/components/combobox/dist/index.js +42 -29
  10. package/components/combobox/dist/registered.js +42 -29
  11. package/components/counter/demo/customize.min.js +2 -2
  12. package/components/counter/demo/index.min.js +2 -2
  13. package/components/counter/dist/index.js +2 -2
  14. package/components/counter/dist/registered.js +2 -2
  15. package/components/datepicker/demo/accessibility.md +7 -7
  16. package/components/datepicker/demo/customize.min.js +121 -47
  17. package/components/datepicker/demo/index.min.js +121 -47
  18. package/components/datepicker/demo/keyboard-behavior.md +3 -3
  19. package/components/datepicker/demo/voiceover.md +3 -3
  20. package/components/datepicker/demo/why-datepicker.md +2 -2
  21. package/components/datepicker/dist/auro-calendar-cell.d.ts +9 -0
  22. package/components/datepicker/dist/auro-calendar.d.ts +9 -0
  23. package/components/datepicker/dist/index.js +121 -47
  24. package/components/datepicker/dist/registered.js +121 -47
  25. package/components/dropdown/demo/customize.min.js +1 -1
  26. package/components/dropdown/demo/getting-started.min.js +1 -1
  27. package/components/dropdown/demo/index.min.js +1 -1
  28. package/components/dropdown/dist/index.js +1 -1
  29. package/components/dropdown/dist/registered.js +1 -1
  30. package/components/form/demo/customize.min.js +269 -123
  31. package/components/form/demo/getting-started.min.js +269 -123
  32. package/components/form/demo/index.min.js +269 -123
  33. package/components/form/demo/registerDemoDeps.min.js +269 -123
  34. package/components/input/demo/customize.min.js +40 -27
  35. package/components/input/demo/getting-started.min.js +40 -27
  36. package/components/input/demo/index.min.js +40 -27
  37. package/components/input/dist/base-input.d.ts +20 -4
  38. package/components/input/dist/index.js +40 -27
  39. package/components/input/dist/registered.js +40 -27
  40. package/components/radio/demo/customize.min.js +1 -1
  41. package/components/radio/demo/getting-started.min.js +1 -1
  42. package/components/radio/demo/index.min.js +1 -1
  43. package/components/radio/dist/index.js +1 -1
  44. package/components/radio/dist/registered.js +1 -1
  45. package/components/select/demo/customize.min.js +62 -16
  46. package/components/select/demo/getting-started.min.js +62 -16
  47. package/components/select/demo/index.min.js +62 -16
  48. package/components/select/dist/auro-select.d.ts +6 -0
  49. package/components/select/dist/index.js +62 -16
  50. package/components/select/dist/registered.js +62 -16
  51. package/custom-elements.json +427 -343
  52. package/package.json +1 -1
@@ -10728,14 +10728,16 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
10728
10728
  this.label = 'Input label is undefined';
10729
10729
  this.layout = 'classic';
10730
10730
  this.locale = 'en-US';
10731
+ this._format = undefined;
10732
+
10733
+ /** @private */
10734
+ this._userSetFormat = false;
10731
10735
  this.max = undefined;
10732
10736
  this.maxLength = undefined;
10733
10737
  this.min = undefined;
10734
10738
  this.minLength = undefined;
10735
10739
  this.noValidate = false;
10736
10740
  this.onDark = false;
10737
- // Raw values returned from the input mask before model normalization.
10738
- this._rawMaskValue = undefined;
10739
10741
  this.required = false;
10740
10742
  this.setCustomValidityForType = undefined;
10741
10743
  // Credit Card is intentionally excluded — its mask manages the cursor
@@ -10893,7 +10895,8 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
10893
10895
  */
10894
10896
  format: {
10895
10897
  type: String,
10896
- reflect: true
10898
+ reflect: true,
10899
+ noAccessor: true
10897
10900
  },
10898
10901
 
10899
10902
  /**
@@ -11231,6 +11234,34 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11231
11234
  return this.max && dateFormatter$3.isValidDate(this.max) ? dateFormatter$3.stringToDateInstance(this.max) : undefined;
11232
11235
  }
11233
11236
 
11237
+ get format() {
11238
+ return this._format;
11239
+ }
11240
+
11241
+ /**
11242
+ * Overrides LitElement's generated accessor so we can track whether the
11243
+ * consumer explicitly set `format`. Locale-derived updates use
11244
+ * `_setFormatFromLocale` instead, which skips this flag.
11245
+ */
11246
+ set format(value) {
11247
+ const oldValue = this._format;
11248
+ this._format = value ? value.toLowerCase() : value;
11249
+ this._userSetFormat = Boolean(value);
11250
+ this.requestUpdate('format', oldValue);
11251
+ }
11252
+
11253
+ /**
11254
+ * Sets format without marking it as user-set. Used by locale auto-derive
11255
+ * so that a subsequent locale change can still update the format.
11256
+ * @private
11257
+ * @param {string} value
11258
+ */
11259
+ _setFormatFromLocale(value) {
11260
+ const oldValue = this._format;
11261
+ this._format = value ? value.toLowerCase() : value;
11262
+ this.requestUpdate('format', oldValue);
11263
+ }
11264
+
11234
11265
  connectedCallback() {
11235
11266
  super.connectedCallback();
11236
11267
 
@@ -11278,15 +11309,6 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11278
11309
 
11279
11310
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
11280
11311
 
11281
- // Normalize the format token to lowercase so case-mixed values supplied
11282
- // via attribute (e.g. `format="MM/DD/YYYY"`) hit the `dateFormatMap`
11283
- // lookup inside `setCustomHelpTextMessage`. Without this, an uppercase
11284
- // format silently misses the map and leaves `setCustomValidityForType`
11285
- // unset.
11286
- if (this.format) {
11287
- this.format = this.format.toLowerCase();
11288
- }
11289
-
11290
11312
  // use validity message override if declared when initializing the component
11291
11313
  if (this.hasAttribute('setCustomValidity')) {
11292
11314
  this.ValidityMessageOverride = this.setCustomValidity;
@@ -11393,12 +11415,10 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11393
11415
  updated(changedProperties) {
11394
11416
  super.updated(changedProperties);
11395
11417
 
11396
- // When locale changes without an explicit format override, derive format from the new locale.
11397
- // Only runs if the current format is still the previous locale's default (not user-overridden).
11418
+ // When locale changes, auto-derive format unless the consumer explicitly set one.
11398
11419
  if (changedProperties.has('locale') && !changedProperties.has('format') && this.type === 'date') {
11399
- const previousLocaleFormat = getDateFormatFromLocale$3(changedProperties.get('locale'));
11400
- if (!this.format || this.format.toLowerCase() === previousLocaleFormat) {
11401
- this.format = getDateFormatFromLocale$3(this.locale);
11420
+ if (!this._userSetFormat) {
11421
+ this._setFormatFromLocale(getDateFormatFromLocale$3(this.locale));
11402
11422
  }
11403
11423
  }
11404
11424
 
@@ -11569,9 +11589,6 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11569
11589
  this.maskInstance.on('accept', () => {
11570
11590
  if (this._configuringMask) return;
11571
11591
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
11572
- if (this.type === "date") {
11573
- this._rawMaskValue = this.maskInstance.value;
11574
- }
11575
11592
  });
11576
11593
 
11577
11594
  // Mask fires 'complete' on the restore step below for any value that
@@ -11579,9 +11596,6 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11579
11596
  this.maskInstance.on('complete', () => {
11580
11597
  if (this._configuringMask) return;
11581
11598
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
11582
- if (this.type === "date") {
11583
- this._rawMaskValue = this.maskInstance.value;
11584
- }
11585
11599
  });
11586
11600
 
11587
11601
  // Write existingValue through the mask (not the input directly) so
@@ -11818,8 +11832,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11818
11832
 
11819
11833
  // Set default date format if type=date and no format is defined
11820
11834
  if (this.type === "date" && !this.format) {
11821
- // Use locale to determine default date format
11822
- this.format = this.util.getDateMaskFromLocale().toLowerCase();
11835
+ this._setFormatFromLocale(this.util.getDateMaskFromLocale().toLowerCase());
11823
11836
  this.util.updateFormat(this.format);
11824
11837
  }
11825
11838
  }
@@ -11848,7 +11861,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11848
11861
  const creditCard = this.matchInputValueToCreditCard();
11849
11862
  const previousFormat = this.format;
11850
11863
 
11851
- this.format = creditCard.maskFormat;
11864
+ this._setFormatFromLocale(creditCard.maskFormat);
11852
11865
 
11853
11866
  this.maxLength = creditCard.formatLength;
11854
11867
  this.minLength = creditCard.formatMinLength;
@@ -12322,7 +12335,7 @@ let AuroHelpText$8 = class AuroHelpText extends i$2 {
12322
12335
  }
12323
12336
  };
12324
12337
 
12325
- var formkitVersion$8 = '202607021905';
12338
+ var formkitVersion$8 = '202607022225';
12326
12339
 
12327
12340
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
12328
12341
  // See LICENSE in the project root for license information.
@@ -24693,23 +24706,28 @@ var popoverVersion = '6.0.1';
24693
24706
  * @returns {number|null} Local-midnight Unix timestamp (seconds), or null.
24694
24707
  */
24695
24708
  function parseIsoToTimestamp(isoStr) {
24709
+ // Strict YYYY-MM-DD matcher with named groups. Rejects trailing garbage
24710
+ // ("2024x-01-01"), short segments ("2024-1-1"), and any non-digit
24711
+ // characters. `parseInt` alone accepted both because it stops at the
24712
+ // first non-digit and doesn't require a minimum length.
24713
+ const ISO_DATE_RE = /^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/u;
24714
+ const MAX_MONTH = 12;
24715
+ const MAX_DAY = 31;
24716
+
24696
24717
  if (typeof isoStr !== 'string') {
24697
24718
  return null;
24698
24719
  }
24699
- const parts = isoStr.split('-');
24700
- if (parts.length !== 3) {
24701
- return null;
24702
- }
24703
- const year = parseInt(parts[0], 10);
24704
- const month = parseInt(parts[1], 10);
24705
- const day = parseInt(parts[2], 10);
24706
- if (!Number.isFinite(year) || !Number.isFinite(month) || !Number.isFinite(day)) {
24720
+ const match = ISO_DATE_RE.exec(isoStr);
24721
+ if (!match) {
24707
24722
  return null;
24708
24723
  }
24724
+ const year = Number(match.groups.year);
24725
+ const month = Number(match.groups.month);
24726
+ const day = Number(match.groups.day);
24709
24727
  // Reject overflow values like "2024-13-40" — JS `new Date(year, month, day)`
24710
24728
  // silently normalizes those to a different calendar day, which would
24711
24729
  // disable the wrong date if we let the result through.
24712
- if (month < 1 || month > 12 || day < 1 || day > 31) {
24730
+ if (month < 1 || month > MAX_MONTH || day < 1 || day > MAX_DAY) {
24713
24731
  return null;
24714
24732
  }
24715
24733
  const date = new Date(year, month - 1, day);
@@ -25287,6 +25305,18 @@ class AuroCalendarCell extends i$2 {
25287
25305
  }
25288
25306
 
25289
25307
  firstUpdated() {
25308
+ this._initFromAncestors();
25309
+ }
25310
+
25311
+ /**
25312
+ * Wires the cell to its ancestor calendar-month and calendar (and, via
25313
+ * the calendar, to the datepicker). Extracted from firstUpdated() so the
25314
+ * retry loop can re-attempt without recursively invoking a Lit lifecycle
25315
+ * method (which is outside the framework's contract).
25316
+ * @private
25317
+ * @returns {void}
25318
+ */
25319
+ _initFromAncestors() {
25290
25320
  const calendarMonth = this.runtimeUtils.closestElement('auro-formkit-calendar-month', this);
25291
25321
  const calendar = this.runtimeUtils.closestElement('auro-formkit-calendar', calendarMonth);
25292
25322
 
@@ -25295,12 +25325,12 @@ class AuroCalendarCell extends i$2 {
25295
25325
  // to attach — but cap attempts so a permanently detached cell doesn't
25296
25326
  // spin forever. 10 turns is far more than any observed race needs.
25297
25327
  this._firstUpdatedRetries = (this._firstUpdatedRetries || 0) + 1;
25298
- if (this._firstUpdatedRetries > 10) { // eslint-disable-line no-magic-numbers
25328
+ if (this._firstUpdatedRetries > 10) {
25299
25329
  return;
25300
25330
  }
25301
25331
  this._firstUpdatedRetryTimer = setTimeout(() => {
25302
25332
  this._firstUpdatedRetryTimer = null;
25303
- this.firstUpdated();
25333
+ this._initFromAncestors();
25304
25334
  }, 0);
25305
25335
  return;
25306
25336
  }
@@ -26707,7 +26737,7 @@ let AuroBibtemplate$3 = class AuroBibtemplate extends i$2 {
26707
26737
  }
26708
26738
  };
26709
26739
 
26710
- var formkitVersion$2$1 = '202607021905';
26740
+ var formkitVersion$2$1 = '202607022225';
26711
26741
 
26712
26742
  let l$1$2 = class l{generateElementName(t,e){let o=t;return o+="-",o+=e.replace(/[.]/g,"_"),o}generateTag(o,s,a){const r=this.generateElementName(o,s),i=i$5`${s$5(r)}`;return customElements.get(r)||customElements.define(r,class extends a{}),i}};let d$1$2 = class d{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}getSlotText(t,e){const o=t.shadowRoot?.querySelector(`slot[name="${e}"]`),s=(o?.assignedNodes({flatten:true})||[]).map(t=>t.textContent?.trim()).join(" ").trim();return s||null}};let h$1$2 = class h{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}};var c$1$3=i$4`:host{color:var(--ds-auro-loader-color)}:host>span{background-color:var(--ds-auro-loader-background-color);border-color:var(--ds-auro-loader-border-color)}:host([onlight]),:host([appearance=brand]){--ds-auro-loader-color: var(--ds-basic-color-brand-primary, #01426a)}:host([ondark]),:host([appearance=inverse]){--ds-auro-loader-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host([orbit])>span{--ds-auro-loader-background-color: transparent}:host([orbit])>span:nth-child(1){--ds-auro-loader-border-color: currentcolor;opacity:.25}:host([orbit])>span:nth-child(2){--ds-auro-loader-border-color: currentcolor;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent}
26713
26743
  `,u$4$2=i$4`.body-default{font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, .875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs{font-size:var(--wcss-body-xs-font-size, .75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:var(--wcss-body-2xs-font-size, .625rem);font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0);line-height:var(--wcss-body-2xs-line-height, .875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));font-weight:var(--wcss-display-2xl-weight, 300);letter-spacing:var(--wcss-display-2xl-letter-spacing, 0);line-height:var(--wcss-display-2xl-line-height, 1.3)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));font-weight:var(--wcss-display-xl-weight, 300);letter-spacing:var(--wcss-display-xl-letter-spacing, 0);line-height:var(--wcss-display-xl-line-height, 1.3)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));font-weight:var(--wcss-display-lg-weight, 300);letter-spacing:var(--wcss-display-lg-letter-spacing, 0);line-height:var(--wcss-display-lg-line-height, 1.3)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));font-weight:var(--wcss-display-md-weight, 300);letter-spacing:var(--wcss-display-md-letter-spacing, 0);line-height:var(--wcss-display-md-line-height, 1.3)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));font-weight:var(--wcss-display-sm-weight, 300);letter-spacing:var(--wcss-display-sm-letter-spacing, 0);line-height:var(--wcss-display-sm-line-height, 1.3)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));font-weight:var(--wcss-display-xs-weight, 300);letter-spacing:var(--wcss-display-xs-letter-spacing, 0);line-height:var(--wcss-display-xs-line-height, 1.3)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));font-weight:var(--wcss-heading-xl-weight, 300);letter-spacing:var(--wcss-heading-xl-letter-spacing, 0);line-height:var(--wcss-heading-xl-line-height, 1.3)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));font-weight:var(--wcss-heading-lg-weight, 300);letter-spacing:var(--wcss-heading-lg-letter-spacing, 0);line-height:var(--wcss-heading-lg-line-height, 1.3)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));font-weight:var(--wcss-heading-md-weight, 300);letter-spacing:var(--wcss-heading-md-letter-spacing, 0);line-height:var(--wcss-heading-md-line-height, 1.3)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));font-weight:var(--wcss-heading-sm-weight, 300);letter-spacing:var(--wcss-heading-sm-letter-spacing, 0);line-height:var(--wcss-heading-sm-line-height, 1.3)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));font-weight:var(--wcss-heading-xs-weight, 450);letter-spacing:var(--wcss-heading-xs-letter-spacing, 0);line-height:var(--wcss-heading-xs-line-height, 1.3)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));font-weight:var(--wcss-heading-2xs-weight, 450);letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0);line-height:var(--wcss-heading-2xs-line-height, 1.3)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));font-weight:var(--wcss-accent-2xl-weight, 450);letter-spacing:var(--wcss-accent-2xl-letter-spacing, .05em);line-height:var(--wcss-accent-2xl-line-height, 1)}.accent-2xl,.accent-xl{text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));font-weight:var(--wcss-accent-xl-weight, 450);letter-spacing:var(--wcss-accent-xl-letter-spacing, .05em);line-height:var(--wcss-accent-xl-line-height, 1.3)}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));font-weight:var(--wcss-accent-lg-weight, 450);letter-spacing:var(--wcss-accent-lg-letter-spacing, .05em);line-height:var(--wcss-accent-lg-line-height, 1.3)}.accent-lg,.accent-md{text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));font-weight:var(--wcss-accent-md-weight, 500);letter-spacing:var(--wcss-accent-md-letter-spacing, .05em);line-height:var(--wcss-accent-md-line-height, 1.3)}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));font-weight:var(--wcss-accent-sm-weight, 500);letter-spacing:var(--wcss-accent-sm-letter-spacing, .05em);line-height:var(--wcss-accent-sm-line-height, 1.3)}.accent-sm,.accent-xs{text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));font-weight:var(--wcss-accent-xs-weight, 500);letter-spacing:var(--wcss-accent-xs-letter-spacing, .1em);line-height:var(--wcss-accent-xs-line-height, 1.3)}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xs-font-size, clamp(.875rem, 1.1666666667vw, .875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, .1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}:focus:not(:focus-visible){outline:3px solid transparent}:host,:host>span{position:relative}:host{width:2rem;height:2rem;display:inline-block;font-size:0}:host>span{position:absolute;display:inline-block;float:none;top:0;left:0;width:2rem;height:2rem;border-radius:100%;border-style:solid;border-width:0;box-sizing:border-box}:host([xs]),:host([xs])>span{width:1.2rem;height:1.2rem}:host([sm]),:host([sm])>span{width:3rem;height:3rem}:host([md]),:host([md])>span{width:5rem;height:5rem}:host([lg]),:host([lg])>span{width:8rem;height:8rem}:host{--margin: .375rem;--margin-xs: .2rem;--margin-sm: .5rem;--margin-md: .75rem;--margin-lg: 1rem}:host([pulse]),:host([pulse])>span{position:relative}:host([pulse]){width:calc(3rem + var(--margin) * 6);height:calc(1rem + var(--margin) * 2)}:host([pulse])>span{width:1rem;height:1rem;margin:var(--margin);animation:pulse 1.5s ease infinite}:host([pulse][xs]){width:calc(1.95rem + var(--margin-xs) * 6);height:calc(.65rem + var(--margin-xs) * 2)}:host([pulse][xs])>span{margin:var(--margin-xs);width:.65rem;height:.65rem}:host([pulse][sm]){width:calc(6rem + var(--margin-sm) * 6);height:calc(2rem + var(--margin-sm) * 2)}:host([pulse][sm])>span{margin:var(--margin-sm);width:2rem;height:2rem}:host([pulse][md]){width:calc(9rem + var(--margin-md) * 6);height:calc(3rem + var(--margin-md) * 2)}:host([pulse][md])>span{margin:var(--margin-md);width:3rem;height:3rem}:host([pulse][lg]){width:calc(15rem + var(--margin-lg) * 6);height:calc(5rem + var(--margin-lg) * 2)}:host([pulse][lg])>span{margin:var(--margin-lg);width:5rem;height:5rem}:host([pulse])>span:nth-child(1){animation-delay:-.4s}:host([pulse])>span:nth-child(2){animation-delay:-.2s}:host([pulse])>span:nth-child(3){animation-delay:0ms}@keyframes pulse{0%,to{opacity:.1;transform:scale(.9)}50%{opacity:1;transform:scale(1.1)}}:host([orbit]),:host([orbit])>span{opacity:1}:host([orbit])>span{border-width:5px}:host([orbit])>span:nth-child(2){animation:orbit 2s linear infinite}:host([orbit][sm])>span{border-width:8px}:host([orbit][md])>span{border-width:13px}:host([orbit][lg])>span{border-width:21px}@keyframes orbit{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:host([ringworm])>svg{animation:rotate 2s linear infinite;height:100%;width:100%;stroke:currentcolor;stroke-width:8}:host([ringworm]) .path{stroke-dashoffset:0;animation:ringworm 1.5s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes ringworm{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}:host([laser]){position:static;width:100%;display:block;height:0;overflow:hidden;font-size:unset}:host([laser])>span{position:fixed;width:100%;height:.25rem;border-radius:0;z-index:100}:host([laser])>span:nth-child(1){border-color:currentcolor;opacity:.25}:host([laser])>span:nth-child(2){border-color:currentcolor;animation:laser 2s linear infinite;opacity:1;width:50%}:host([laser][sm])>span:nth-child(2){width:20%}:host([laser][md])>span:nth-child(2){width:30%}:host([laser][lg])>span:nth-child(2){width:50%;animation-duration:1.5s}:host([laser][xl])>span:nth-child(2){width:80%;animation-duration:1.5s}@keyframes laser{0%{left:-100%}to{left:110%}}:host>.no-animation{display:none}@media (prefers-reduced-motion: reduce){:host{display:flex;align-items:center;justify-content:center}:host>span{opacity:1}:host>.loader{display:none}:host>svg{display:none}:host>.no-animation{display:block}}
@@ -26846,7 +26876,10 @@ class AuroCalendar extends RangeDatepicker {
26846
26876
  * Support will be removed in a future major release.
26847
26877
  * @private
26848
26878
  */
26849
- this.disabledDays = [];
26879
+ // Initialize the backing field directly so the constructor's default
26880
+ // empty array doesn't trigger the deprecation warning. Assignments from
26881
+ // consumers still route through the setter below.
26882
+ this._disabledDays = [];
26850
26883
 
26851
26884
  /**
26852
26885
  * @private
@@ -26879,6 +26912,44 @@ class AuroCalendar extends RangeDatepicker {
26879
26912
  this._calendarInstanceId = Date.now().toString(36);
26880
26913
  }
26881
26914
 
26915
+ /**
26916
+ * @deprecated See constructor JSDoc — migrate to
26917
+ * `auro-datepicker.blackoutDates`. The getter/setter pair exists so the
26918
+ * one-time deprecation warning fires as soon as a consumer assigns a
26919
+ * non-empty array (empty assignments are ignored — an empty array is
26920
+ * indistinguishable from the constructor default and would produce a
26921
+ * spurious warning), rather than only when `_getBlackoutSet()` happens
26922
+ * to rebuild.
26923
+ * @returns {Array} The current legacy `disabledDays` array.
26924
+ */
26925
+ get disabledDays() {
26926
+ return this._disabledDays;
26927
+ }
26928
+
26929
+ /**
26930
+ * @param {Array} value - The legacy `disabledDays` array to set.
26931
+ */
26932
+ set disabledDays(value) {
26933
+ const oldValue = this._disabledDays;
26934
+ // Coerce non-arrays to `[]`. Consumers occasionally pass `null`
26935
+ // (Lit's Array attribute converter returns null for a missing/empty
26936
+ // attribute) or misuse the API; downstream code in
26937
+ // `auro-calendar-cell.isEnabled` calls `.findIndex()` on this value
26938
+ // without an Array.isArray guard, so a truthy non-array would throw
26939
+ // at render.
26940
+ const coerced = Array.isArray(value) ? value : [];
26941
+ if (coerced.length > 0) {
26942
+ this._warnDisabledDaysDeprecated();
26943
+ }
26944
+ this._disabledDays = coerced;
26945
+ // `disabledDays` is a Lit `@property({ type: Array })` on the
26946
+ // RangeDatepicker base class; Lit's generated setter (which we've
26947
+ // overridden here to insert the warning) is what normally invalidates
26948
+ // the reactive cycle. Re-invoke requestUpdate manually so consumer
26949
+ // assignments still re-render the calendar.
26950
+ this.requestUpdate('disabledDays', oldValue);
26951
+ }
26952
+
26882
26953
  static get styles() {
26883
26954
  return [
26884
26955
  styleCss$7$1,
@@ -27618,12 +27689,15 @@ class AuroCalendar extends RangeDatepicker {
27618
27689
  // that has no DOM cell. Determine the visible range based on centralDate and
27619
27690
  // the number of rendered months.
27620
27691
  //
27621
- // numCalendars is assigned during renderAllCalendars(), which runs after
27622
- // updated() — so the visible-change handler's eager computeActiveDate()
27623
- // call arrives with numCalendars still undefined. Math.max(undefined, 1)
27624
- // is NaN, which would silently skip the visible-month scan below. Fall
27625
- // back to maximumRenderableMonths' desktop default (1 for non-range,
27626
- // 2 for range) so the scan window is correctly sized on first open.
27692
+ // numCalendars is assigned inside renderAllCalendars(), which runs during
27693
+ // render() — so by the time the visible-change handler in updated()
27694
+ // calls computeActiveDate() in the same cycle, numCalendars is normally
27695
+ // set. Guard against the pre-first-render path anyway (e.g. any future
27696
+ // caller that reaches computeActiveDate before render() has run):
27697
+ // Math.max(undefined, 1) is NaN, which would silently skip the
27698
+ // visible-month scan below. Fall back to maximumRenderableMonths'
27699
+ // desktop default (1 for non-range, 2 for range) so the scan window is
27700
+ // correctly sized whenever numCalendars is not yet populated.
27627
27701
  let renderedMonths = null;
27628
27702
 
27629
27703
  if (Number.isFinite(this.numCalendars) && this.numCalendars > 0) {
@@ -32556,7 +32630,7 @@ let AuroHelpText$2$1 = class AuroHelpText extends i$2 {
32556
32630
  }
32557
32631
  };
32558
32632
 
32559
- var formkitVersion$1$3 = '202607021905';
32633
+ var formkitVersion$1$3 = '202607022225';
32560
32634
 
32561
32635
  let AuroElement$2$2 = class AuroElement extends i$2 {
32562
32636
  static get properties() {
@@ -44564,14 +44638,16 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44564
44638
  this.label = 'Input label is undefined';
44565
44639
  this.layout = 'classic';
44566
44640
  this.locale = 'en-US';
44641
+ this._format = undefined;
44642
+
44643
+ /** @private */
44644
+ this._userSetFormat = false;
44567
44645
  this.max = undefined;
44568
44646
  this.maxLength = undefined;
44569
44647
  this.min = undefined;
44570
44648
  this.minLength = undefined;
44571
44649
  this.noValidate = false;
44572
44650
  this.onDark = false;
44573
- // Raw values returned from the input mask before model normalization.
44574
- this._rawMaskValue = undefined;
44575
44651
  this.required = false;
44576
44652
  this.setCustomValidityForType = undefined;
44577
44653
  // Credit Card is intentionally excluded — its mask manages the cursor
@@ -44729,7 +44805,8 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
44729
44805
  */
44730
44806
  format: {
44731
44807
  type: String,
44732
- reflect: true
44808
+ reflect: true,
44809
+ noAccessor: true
44733
44810
  },
44734
44811
 
44735
44812
  /**
@@ -45067,6 +45144,34 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45067
45144
  return this.max && dateFormatter$2.isValidDate(this.max) ? dateFormatter$2.stringToDateInstance(this.max) : undefined;
45068
45145
  }
45069
45146
 
45147
+ get format() {
45148
+ return this._format;
45149
+ }
45150
+
45151
+ /**
45152
+ * Overrides LitElement's generated accessor so we can track whether the
45153
+ * consumer explicitly set `format`. Locale-derived updates use
45154
+ * `_setFormatFromLocale` instead, which skips this flag.
45155
+ */
45156
+ set format(value) {
45157
+ const oldValue = this._format;
45158
+ this._format = value ? value.toLowerCase() : value;
45159
+ this._userSetFormat = Boolean(value);
45160
+ this.requestUpdate('format', oldValue);
45161
+ }
45162
+
45163
+ /**
45164
+ * Sets format without marking it as user-set. Used by locale auto-derive
45165
+ * so that a subsequent locale change can still update the format.
45166
+ * @private
45167
+ * @param {string} value
45168
+ */
45169
+ _setFormatFromLocale(value) {
45170
+ const oldValue = this._format;
45171
+ this._format = value ? value.toLowerCase() : value;
45172
+ this.requestUpdate('format', oldValue);
45173
+ }
45174
+
45070
45175
  connectedCallback() {
45071
45176
  super.connectedCallback();
45072
45177
 
@@ -45114,15 +45219,6 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45114
45219
 
45115
45220
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
45116
45221
 
45117
- // Normalize the format token to lowercase so case-mixed values supplied
45118
- // via attribute (e.g. `format="MM/DD/YYYY"`) hit the `dateFormatMap`
45119
- // lookup inside `setCustomHelpTextMessage`. Without this, an uppercase
45120
- // format silently misses the map and leaves `setCustomValidityForType`
45121
- // unset.
45122
- if (this.format) {
45123
- this.format = this.format.toLowerCase();
45124
- }
45125
-
45126
45222
  // use validity message override if declared when initializing the component
45127
45223
  if (this.hasAttribute('setCustomValidity')) {
45128
45224
  this.ValidityMessageOverride = this.setCustomValidity;
@@ -45229,12 +45325,10 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45229
45325
  updated(changedProperties) {
45230
45326
  super.updated(changedProperties);
45231
45327
 
45232
- // When locale changes without an explicit format override, derive format from the new locale.
45233
- // Only runs if the current format is still the previous locale's default (not user-overridden).
45328
+ // When locale changes, auto-derive format unless the consumer explicitly set one.
45234
45329
  if (changedProperties.has('locale') && !changedProperties.has('format') && this.type === 'date') {
45235
- const previousLocaleFormat = getDateFormatFromLocale$2(changedProperties.get('locale'));
45236
- if (!this.format || this.format.toLowerCase() === previousLocaleFormat) {
45237
- this.format = getDateFormatFromLocale$2(this.locale);
45330
+ if (!this._userSetFormat) {
45331
+ this._setFormatFromLocale(getDateFormatFromLocale$2(this.locale));
45238
45332
  }
45239
45333
  }
45240
45334
 
@@ -45405,9 +45499,6 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45405
45499
  this.maskInstance.on('accept', () => {
45406
45500
  if (this._configuringMask) return;
45407
45501
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
45408
- if (this.type === "date") {
45409
- this._rawMaskValue = this.maskInstance.value;
45410
- }
45411
45502
  });
45412
45503
 
45413
45504
  // Mask fires 'complete' on the restore step below for any value that
@@ -45415,9 +45506,6 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45415
45506
  this.maskInstance.on('complete', () => {
45416
45507
  if (this._configuringMask) return;
45417
45508
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
45418
- if (this.type === "date") {
45419
- this._rawMaskValue = this.maskInstance.value;
45420
- }
45421
45509
  });
45422
45510
 
45423
45511
  // Write existingValue through the mask (not the input directly) so
@@ -45654,8 +45742,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45654
45742
 
45655
45743
  // Set default date format if type=date and no format is defined
45656
45744
  if (this.type === "date" && !this.format) {
45657
- // Use locale to determine default date format
45658
- this.format = this.util.getDateMaskFromLocale().toLowerCase();
45745
+ this._setFormatFromLocale(this.util.getDateMaskFromLocale().toLowerCase());
45659
45746
  this.util.updateFormat(this.format);
45660
45747
  }
45661
45748
  }
@@ -45684,7 +45771,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45684
45771
  const creditCard = this.matchInputValueToCreditCard();
45685
45772
  const previousFormat = this.format;
45686
45773
 
45687
- this.format = creditCard.maskFormat;
45774
+ this._setFormatFromLocale(creditCard.maskFormat);
45688
45775
 
45689
45776
  this.maxLength = creditCard.formatLength;
45690
45777
  this.minLength = creditCard.formatMinLength;
@@ -46158,7 +46245,7 @@ let AuroHelpText$1$3 = class AuroHelpText extends i$2 {
46158
46245
  }
46159
46246
  };
46160
46247
 
46161
- var formkitVersion$7 = '202607021905';
46248
+ var formkitVersion$7 = '202607022225';
46162
46249
 
46163
46250
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
46164
46251
  // See LICENSE in the project root for license information.
@@ -51079,7 +51166,7 @@ let AuroHelpText$1$2 = class AuroHelpText extends i$2 {
51079
51166
  }
51080
51167
  };
51081
51168
 
51082
- var formkitVersion$1$2 = '202607021905';
51169
+ var formkitVersion$1$2 = '202607022225';
51083
51170
 
51084
51171
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
51085
51172
  // See LICENSE in the project root for license information.
@@ -55407,7 +55494,7 @@ let AuroHelpText$6 = class AuroHelpText extends i$2 {
55407
55494
  }
55408
55495
  };
55409
55496
 
55410
- var formkitVersion$6 = '202607021905';
55497
+ var formkitVersion$6 = '202607022225';
55411
55498
 
55412
55499
  let AuroElement$1$2 = class AuroElement extends i$2 {
55413
55500
  static get properties() {
@@ -59387,7 +59474,7 @@ let AuroHelpText$5 = class AuroHelpText extends i$2 {
59387
59474
  }
59388
59475
  };
59389
59476
 
59390
- var formkitVersion$5 = '202607021905';
59477
+ var formkitVersion$5 = '202607022225';
59391
59478
 
59392
59479
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
59393
59480
  // See LICENSE in the project root for license information.
@@ -61152,7 +61239,7 @@ let AuroHelpText$4 = class AuroHelpText extends i$2 {
61152
61239
  }
61153
61240
  };
61154
61241
 
61155
- var formkitVersion$4 = '202607021905';
61242
+ var formkitVersion$4 = '202607022225';
61156
61243
 
61157
61244
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
61158
61245
  // See LICENSE in the project root for license information.
@@ -66373,7 +66460,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$2 {
66373
66460
  }
66374
66461
  };
66375
66462
 
66376
- var formkitVersion$2 = '202607021905';
66463
+ var formkitVersion$2 = '202607022225';
66377
66464
 
66378
66465
  let AuroElement$2$1 = class AuroElement extends i$2 {
66379
66466
  static get properties() {
@@ -78381,14 +78468,16 @@ class BaseInput extends AuroElement$1$1 {
78381
78468
  this.label = 'Input label is undefined';
78382
78469
  this.layout = 'classic';
78383
78470
  this.locale = 'en-US';
78471
+ this._format = undefined;
78472
+
78473
+ /** @private */
78474
+ this._userSetFormat = false;
78384
78475
  this.max = undefined;
78385
78476
  this.maxLength = undefined;
78386
78477
  this.min = undefined;
78387
78478
  this.minLength = undefined;
78388
78479
  this.noValidate = false;
78389
78480
  this.onDark = false;
78390
- // Raw values returned from the input mask before model normalization.
78391
- this._rawMaskValue = undefined;
78392
78481
  this.required = false;
78393
78482
  this.setCustomValidityForType = undefined;
78394
78483
  // Credit Card is intentionally excluded — its mask manages the cursor
@@ -78546,7 +78635,8 @@ class BaseInput extends AuroElement$1$1 {
78546
78635
  */
78547
78636
  format: {
78548
78637
  type: String,
78549
- reflect: true
78638
+ reflect: true,
78639
+ noAccessor: true
78550
78640
  },
78551
78641
 
78552
78642
  /**
@@ -78884,6 +78974,34 @@ class BaseInput extends AuroElement$1$1 {
78884
78974
  return this.max && dateFormatter.isValidDate(this.max) ? dateFormatter.stringToDateInstance(this.max) : undefined;
78885
78975
  }
78886
78976
 
78977
+ get format() {
78978
+ return this._format;
78979
+ }
78980
+
78981
+ /**
78982
+ * Overrides LitElement's generated accessor so we can track whether the
78983
+ * consumer explicitly set `format`. Locale-derived updates use
78984
+ * `_setFormatFromLocale` instead, which skips this flag.
78985
+ */
78986
+ set format(value) {
78987
+ const oldValue = this._format;
78988
+ this._format = value ? value.toLowerCase() : value;
78989
+ this._userSetFormat = Boolean(value);
78990
+ this.requestUpdate('format', oldValue);
78991
+ }
78992
+
78993
+ /**
78994
+ * Sets format without marking it as user-set. Used by locale auto-derive
78995
+ * so that a subsequent locale change can still update the format.
78996
+ * @private
78997
+ * @param {string} value
78998
+ */
78999
+ _setFormatFromLocale(value) {
79000
+ const oldValue = this._format;
79001
+ this._format = value ? value.toLowerCase() : value;
79002
+ this.requestUpdate('format', oldValue);
79003
+ }
79004
+
78887
79005
  connectedCallback() {
78888
79006
  super.connectedCallback();
78889
79007
 
@@ -78931,15 +79049,6 @@ class BaseInput extends AuroElement$1$1 {
78931
79049
 
78932
79050
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
78933
79051
 
78934
- // Normalize the format token to lowercase so case-mixed values supplied
78935
- // via attribute (e.g. `format="MM/DD/YYYY"`) hit the `dateFormatMap`
78936
- // lookup inside `setCustomHelpTextMessage`. Without this, an uppercase
78937
- // format silently misses the map and leaves `setCustomValidityForType`
78938
- // unset.
78939
- if (this.format) {
78940
- this.format = this.format.toLowerCase();
78941
- }
78942
-
78943
79052
  // use validity message override if declared when initializing the component
78944
79053
  if (this.hasAttribute('setCustomValidity')) {
78945
79054
  this.ValidityMessageOverride = this.setCustomValidity;
@@ -79046,12 +79155,10 @@ class BaseInput extends AuroElement$1$1 {
79046
79155
  updated(changedProperties) {
79047
79156
  super.updated(changedProperties);
79048
79157
 
79049
- // When locale changes without an explicit format override, derive format from the new locale.
79050
- // Only runs if the current format is still the previous locale's default (not user-overridden).
79158
+ // When locale changes, auto-derive format unless the consumer explicitly set one.
79051
79159
  if (changedProperties.has('locale') && !changedProperties.has('format') && this.type === 'date') {
79052
- const previousLocaleFormat = getDateFormatFromLocale(changedProperties.get('locale'));
79053
- if (!this.format || this.format.toLowerCase() === previousLocaleFormat) {
79054
- this.format = getDateFormatFromLocale(this.locale);
79160
+ if (!this._userSetFormat) {
79161
+ this._setFormatFromLocale(getDateFormatFromLocale(this.locale));
79055
79162
  }
79056
79163
  }
79057
79164
 
@@ -79222,9 +79329,6 @@ class BaseInput extends AuroElement$1$1 {
79222
79329
  this.maskInstance.on('accept', () => {
79223
79330
  if (this._configuringMask) return;
79224
79331
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
79225
- if (this.type === "date") {
79226
- this._rawMaskValue = this.maskInstance.value;
79227
- }
79228
79332
  });
79229
79333
 
79230
79334
  // Mask fires 'complete' on the restore step below for any value that
@@ -79232,9 +79336,6 @@ class BaseInput extends AuroElement$1$1 {
79232
79336
  this.maskInstance.on('complete', () => {
79233
79337
  if (this._configuringMask) return;
79234
79338
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
79235
- if (this.type === "date") {
79236
- this._rawMaskValue = this.maskInstance.value;
79237
- }
79238
79339
  });
79239
79340
 
79240
79341
  // Write existingValue through the mask (not the input directly) so
@@ -79471,8 +79572,7 @@ class BaseInput extends AuroElement$1$1 {
79471
79572
 
79472
79573
  // Set default date format if type=date and no format is defined
79473
79574
  if (this.type === "date" && !this.format) {
79474
- // Use locale to determine default date format
79475
- this.format = this.util.getDateMaskFromLocale().toLowerCase();
79575
+ this._setFormatFromLocale(this.util.getDateMaskFromLocale().toLowerCase());
79476
79576
  this.util.updateFormat(this.format);
79477
79577
  }
79478
79578
  }
@@ -79501,7 +79601,7 @@ class BaseInput extends AuroElement$1$1 {
79501
79601
  const creditCard = this.matchInputValueToCreditCard();
79502
79602
  const previousFormat = this.format;
79503
79603
 
79504
- this.format = creditCard.maskFormat;
79604
+ this._setFormatFromLocale(creditCard.maskFormat);
79505
79605
 
79506
79606
  this.maxLength = creditCard.formatLength;
79507
79607
  this.minLength = creditCard.formatMinLength;
@@ -79975,7 +80075,7 @@ let AuroHelpText$1$1 = class AuroHelpText extends i$2 {
79975
80075
  }
79976
80076
  };
79977
80077
 
79978
- var formkitVersion$1$1 = '202607021905';
80078
+ var formkitVersion$1$1 = '202607022225';
79979
80079
 
79980
80080
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
79981
80081
  // See LICENSE in the project root for license information.
@@ -81101,7 +81201,7 @@ let AuroBibtemplate$1 = class AuroBibtemplate extends i$2 {
81101
81201
  }
81102
81202
  };
81103
81203
 
81104
- var formkitVersion$3 = '202607021905';
81204
+ var formkitVersion$3 = '202607022225';
81105
81205
 
81106
81206
  var styleCss$1$3 = i$4`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock{display:block}.util_displayFlex{display:flex}.util_displayHidden{display:none}.util_displayHiddenVisually{position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}:host{display:block;text-align:left}:host [auro-dropdown]{--ds-auro-dropdown-trigger-background-color: transparent}:host #inputInBib::part(wrapper){box-shadow:none}:host #inputInBib::part(accent-left){display:none}:host([layout*=classic]) [auro-input]{width:100%}:host([layout*=classic]) [auro-input]::part(helpText){display:none}:host([layout*=classic]) #slotHolder{display:none}`;
81107
81207
 
@@ -85878,9 +85978,6 @@ function navigateArrow(component, direction, options = {}) {
85878
85978
  * @param {HTMLElement | null | undefined} menu - The auro-menu element.
85879
85979
  * @returns {Array<HTMLElement>} Non-disabled options, empty array when none.
85880
85980
  */
85881
- function getEnabledOptions(menu) {
85882
- return (menu?.options || []).filter((option) => !option.disabled);
85883
- }
85884
85981
 
85885
85982
  /**
85886
85983
  * Returns the active (selectable + visible) options for type-ahead navigation.
@@ -85950,8 +86047,10 @@ const selectKeyboardStrategy = {
85950
86047
  End(component, evt, ctx) {
85951
86048
  evt.preventDefault();
85952
86049
  evt.stopPropagation();
85953
- // `pop()` is safe here: getEnabledOptions returns a fresh filtered array.
85954
- const lastOption = getEnabledOptions(component.menu).pop();
86050
+ // `pop()` is safe here: getActiveOptions returns a fresh filtered array.
86051
+ // Uses "active" (not "enabled") so hidden and static rows — which a screen
86052
+ // reader must not announce as focused — are skipped.
86053
+ const lastOption = getActiveOptions(component.menu).pop();
85955
86054
  if (!lastOption) {
85956
86055
  return;
85957
86056
  }
@@ -85982,7 +86081,7 @@ const selectKeyboardStrategy = {
85982
86081
  Home(component, evt, ctx) {
85983
86082
  evt.preventDefault();
85984
86083
  evt.stopPropagation();
85985
- const [firstOption] = getEnabledOptions(component.menu);
86084
+ const [firstOption] = getActiveOptions(component.menu);
85986
86085
  if (!firstOption) {
85987
86086
  return;
85988
86087
  }
@@ -86007,6 +86106,15 @@ const selectKeyboardStrategy = {
86007
86106
  },
86008
86107
 
86009
86108
  default(component, evt, ctx) {
86109
+ // Ignore keys chorded with Ctrl/Meta/Alt so browser/OS shortcuts
86110
+ // (Cmd+C, Ctrl+V, Alt+X, Cmd+Space, …) don't leak into typeahead
86111
+ // or toggle the bib. Native <select> ignores modified keys.
86112
+ // ArrowUp/ArrowDown handle modifier+arrow explicitly above; this
86113
+ // guard only affects the default (printable/Space) branch.
86114
+ if (evt.ctrlKey || evt.metaKey || evt.altKey) {
86115
+ return;
86116
+ }
86117
+
86010
86118
  // Space resolves to either typeahead-buffer extension or bib toggle
86011
86119
  // depending on whether a type-ahead buffer is active. Mirrors native
86012
86120
  // <select> and the WAI-ARIA APG Listbox guidance: mid-typeahead space
@@ -89937,7 +90045,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
89937
90045
  }
89938
90046
  };
89939
90047
 
89940
- var formkitVersion$1 = '202607021905';
90048
+ var formkitVersion$1 = '202607022225';
89941
90049
 
89942
90050
  class AuroElement extends i$2 {
89943
90051
  static get properties() {
@@ -91976,7 +92084,7 @@ class AuroHelpText extends i$2 {
91976
92084
  }
91977
92085
  }
91978
92086
 
91979
- var formkitVersion = '202607021905';
92087
+ var formkitVersion = '202607022225';
91980
92088
 
91981
92089
  var styleCss = i$4`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock{display:block}.util_displayFlex{display:flex}.util_displayHidden{display:none}.util_displayHiddenVisually{position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}.body-default{font-size:var(--wcss-body-default-font-size, 1rem);font-weight:var(--wcss-body-default-weight, );line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-default-emphasized{font-size:var(--wcss-body-default-emphasized-font-size, 1rem);font-weight:var(--wcss-body-default-emphasized-weight, );line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);font-weight:var(--wcss-body-lg-weight, );line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg,.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg-emphasized{font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);font-weight:var(--wcss-body-lg-emphasized-weight, );line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, 0.875rem);font-weight:var(--wcss-body-sm-weight, );line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-sm-emphasized{font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);font-weight:var(--wcss-body-sm-emphasized-weight, );line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-size:var(--wcss-body-xs-font-size, 0.75rem);font-weight:var(--wcss-body-xs-weight, );line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs,.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs-emphasized{font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);font-weight:var(--wcss-body-xs-emphasized-weight, );line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-size:var(--wcss-body-2xs-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-weight, );line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs,.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-2xs-emphasized{font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-emphasized-weight, );line-height:var(--wcss-body-2xs-emphasized-line-height, 0.875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));font-weight:var(--wcss-display-2xl-weight, 300);letter-spacing:var(--wcss-display-2xl-letter-spacing, 0);line-height:var(--wcss-display-2xl-line-height, 1.3)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));font-weight:var(--wcss-display-xl-weight, 300);letter-spacing:var(--wcss-display-xl-letter-spacing, 0);line-height:var(--wcss-display-xl-line-height, 1.3)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));font-weight:var(--wcss-display-lg-weight, 300);letter-spacing:var(--wcss-display-lg-letter-spacing, 0);line-height:var(--wcss-display-lg-line-height, 1.3)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));font-weight:var(--wcss-display-md-weight, 300);letter-spacing:var(--wcss-display-md-letter-spacing, 0);line-height:var(--wcss-display-md-line-height, 1.3)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));font-weight:var(--wcss-display-sm-weight, 300);letter-spacing:var(--wcss-display-sm-letter-spacing, 0);line-height:var(--wcss-display-sm-line-height, 1.3)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));font-weight:var(--wcss-display-xs-weight, 300);letter-spacing:var(--wcss-display-xs-letter-spacing, 0);line-height:var(--wcss-display-xs-line-height, 1.3)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));font-weight:var(--wcss-heading-xl-weight, 300);letter-spacing:var(--wcss-heading-xl-letter-spacing, 0);line-height:var(--wcss-heading-xl-line-height, 1.3)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));font-weight:var(--wcss-heading-lg-weight, 300);letter-spacing:var(--wcss-heading-lg-letter-spacing, 0);line-height:var(--wcss-heading-lg-line-height, 1.3)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));font-weight:var(--wcss-heading-md-weight, 300);letter-spacing:var(--wcss-heading-md-letter-spacing, 0);line-height:var(--wcss-heading-md-line-height, 1.3)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));font-weight:var(--wcss-heading-sm-weight, 300);letter-spacing:var(--wcss-heading-sm-letter-spacing, 0);line-height:var(--wcss-heading-sm-line-height, 1.3)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));font-weight:var(--wcss-heading-xs-weight, 300);letter-spacing:var(--wcss-heading-xs-letter-spacing, 0);line-height:var(--wcss-heading-xs-line-height, 1.3)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));font-weight:var(--wcss-heading-2xs-weight, 300);letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0);line-height:var(--wcss-heading-2xs-line-height, 1.3)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));font-weight:var(--wcss-accent-2xl-weight, 450);letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);line-height:var(--wcss-accent-2xl-line-height, 1)}.accent-2xl,.accent-xl{text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));font-weight:var(--wcss-accent-xl-weight, 450);letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);line-height:var(--wcss-accent-xl-line-height, 1.3)}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));font-weight:var(--wcss-accent-lg-weight, 450);letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);line-height:var(--wcss-accent-lg-line-height, 1.3)}.accent-lg,.accent-md{text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));font-weight:var(--wcss-accent-md-weight, 500);letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);line-height:var(--wcss-accent-md-line-height, 1.3)}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));font-weight:var(--wcss-accent-sm-weight, 500);letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);line-height:var(--wcss-accent-sm-line-height, 1.3)}.accent-sm,.accent-xs{text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));font-weight:var(--wcss-accent-xs-weight, 500);letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);line-height:var(--wcss-accent-xs-line-height, 1.3)}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}[auro-dropdown]{--ds-auro-dropdown-trigger-border-color: var(--ds-auro-select-border-color);--ds-auro-dropdown-trigger-background-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-container-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-outline-color: var(--ds-auro-select-outline-color)}:host{display:inline-block;text-align:left;vertical-align:top}:host([layout*=emphasized]) [auro-dropdown],:host([layout*=snowflake]) [auro-dropdown]{--ds-auro-select-border-color: transparent}:host([layout*=emphasized]) .mainContent,:host([layout*=snowflake]) .mainContent{text-align:center}.mainContent{position:relative;display:flex;overflow:hidden;flex:1;flex-direction:column;align-items:center;justify-content:center}.valueContainer [slot=displayValue]{display:none}.accents{display:flex;flex-direction:row;align-items:center;justify-content:center}::slotted([slot=typeIcon]){margin-right:var(--ds-size-100, 0.5rem)}.displayValue{display:block}.displayValue:not(.force){display:none}.displayValue:not(.force).hasContent:is(.withValue):not(.hasFocus){display:block}.triggerContent{display:flex;width:100%;align-items:center;justify-content:center}:host([layout*=emphasized]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-300, 1.5rem)}:host([layout*=snowflake]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-200, 1rem)}:host([layout*=snowflake]) label{padding-block:var(--ds-size-25, 0.125rem)}:host([layout*=classic]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem)}:host([layout*=classic]) .mainContent{align-items:start}:host([layout*=classic]) label{overflow:hidden;cursor:text;text-overflow:ellipsis;white-space:nowrap}:host([layout*=classic]) .value{height:auto}label{color:var(--ds-auro-select-label-text-color)}:host(:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-select-outline-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-default, #2a2a2a)}:host([ondark]:is([validity]:not([validity=valid]))) [auro-dropdown],:host([appearance=inverse]:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-select-outline-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}#slotHolder{display:none}:host([fluid]){width:100%}:host([disabled]){pointer-events:none;user-select:none}:host([disabled]:not([ondark])) [auro-dropdown],:host([disabled]:not([appearance=inverse])) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-border-subtle, #dddddd)}:host(:not([layout*=classic])[disabled][ondark]) [auro-dropdown],:host(:not([layout*=classic])[disabled][appearance=inverse]) [auro-dropdown]{--ds-auro-select-border-color: transparent}`;
91982
92090
 
@@ -92540,8 +92648,11 @@ class AuroSelect extends AuroElement$1 {
92540
92648
  } else if (this.multiSelect && Array.isArray(this.optionSelected) && this.optionSelected.length > 0) {
92541
92649
  this.menu.updateActiveOption(this.optionSelected[0]);
92542
92650
  } else {
92543
- // If no activeOption has yet to be set, then make the first enabled option active by default
92544
- const [firstActive] = getEnabledOptions(this.menu);
92651
+ // If no activeOption has yet to be set, make the first active option
92652
+ // (non-disabled, non-hidden, non-static) active by default. "Active" —
92653
+ // not just "enabled" — so hidden rows and static placeholders never
92654
+ // land in aria-activedescendant on open.
92655
+ const [firstActive] = getActiveOptions(this.menu);
92545
92656
  this.menu.updateActiveOption(firstActive);
92546
92657
  }
92547
92658
  }
@@ -92787,6 +92898,12 @@ class AuroSelect extends AuroElement$1 {
92787
92898
 
92788
92899
  /**
92789
92900
  * Binds all behavior needed to the menu after rendering.
92901
+ *
92902
+ * The `<auro-menu>` reference is captured once and not re-targeted on
92903
+ * `slotchange`. Runtime option mutations are covered via
92904
+ * `auroMenu-optionsChange`, so swap options inside the menu freely; do not
92905
+ * swap the `<auro-menu>` element itself under a live select — remount the
92906
+ * parent `<auro-select>` instead.
92790
92907
  * @private
92791
92908
  * @returns {void}
92792
92909
  */
@@ -92845,6 +92962,15 @@ class AuroSelect extends AuroElement$1 {
92845
92962
  if (this.menu.optionSelected !== undefined) {
92846
92963
  return;
92847
92964
  }
92965
+ // Skip when the select is already cleared (valueless click with no
92966
+ // prior selection): value/optionSelected are already empty and there
92967
+ // is no stale trigger text to refresh, so updateDisplayedValue would
92968
+ // just churn the DOM and request a needless dropdown re-render.
92969
+ const hasStaleState = this.value !== undefined ||
92970
+ (this.multiSelect ? this.optionSelected?.length > 0 : this.optionSelected !== undefined);
92971
+ if (!hasStaleState) {
92972
+ return;
92973
+ }
92848
92974
  this.value = undefined;
92849
92975
  this.optionSelected = this.multiSelect ? [] : undefined;
92850
92976
  // The trigger label is rendered imperatively into #value, so a property
@@ -92874,10 +93000,15 @@ class AuroSelect extends AuroElement$1 {
92874
93000
  if (this.dropdown.isPopoverVisible) {
92875
93001
  announceToScreenReader(this._getAnnouncementRoot(), message);
92876
93002
  } else {
92877
- // Typeahead-on-closed fires this event before `show()` flips
92878
- // isPopoverVisible. Defer so the announcement targets the bib's
92879
- // live region once the fullscreen <dialog> opens otherwise it
92880
- // lands in the host root, which is inert under the active modal.
93003
+ // Typeahead-on-closed calls updateActiveOption() before show(), so
93004
+ // this handler runs with isPopoverVisible still false. queueMicrotask
93005
+ // is safe because show() showBib() flips isPopoverVisible and
93006
+ // dialog.showModal() both run synchronously in the same task; the
93007
+ // microtask queue only drains once _handleTypeahead unwinds, by
93008
+ // which point _getAnnouncementRoot() resolves to the bib's shadow
93009
+ // root inside the now-open modal. Do NOT switch to auroDropdown-toggled
93010
+ // — it fires before showModal(), landing the announcement in the
93011
+ // host root while the dialog is still not-yet-modal.
92881
93012
  queueMicrotask(() => announceToScreenReader(this._getAnnouncementRoot(), message));
92882
93013
  }
92883
93014
  }
@@ -93271,6 +93402,13 @@ class AuroSelect extends AuroElement$1 {
93271
93402
  }
93272
93403
 
93273
93404
  if (changedProperties.has('value')) {
93405
+ // A value change ends the current interaction — whether it came from a
93406
+ // user commit, programmatic assignment, or reset(). Clear the buffer so
93407
+ // a stale prefix does not concatenate onto the next keystroke while the
93408
+ // host still has focus (the blur listener would otherwise be the only
93409
+ // focus-retained clear point, and hideBib() below does not blur).
93410
+ this._clearTypeaheadBuffer();
93411
+
93274
93412
  this.setMenuValue(this.value);
93275
93413
 
93276
93414
  this._updateNativeSelect();
@@ -93326,6 +93464,9 @@ class AuroSelect extends AuroElement$1 {
93326
93464
  * @returns {void}
93327
93465
  */
93328
93466
  reset() {
93467
+ // Defense-in-depth: updated()'s value-change branch also clears, but
93468
+ // reset-to-same-value (e.g. undefined → undefined) skips that path.
93469
+ this._clearTypeaheadBuffer();
93329
93470
  this.menu.reset();
93330
93471
  this.validation.reset(this);
93331
93472
  }
@@ -93348,8 +93489,13 @@ class AuroSelect extends AuroElement$1 {
93348
93489
  // Hidden native <select> has no `multiple` attribute, so any change it fires
93349
93490
  // is a single raw value — applying it in multiSelect mode would collapse the
93350
93491
  // JSON-array `value` shape. Bfcache/autofill can reach this on a name-bearing
93351
- // form control even with aria-hidden/tabindex=-1.
93352
- if (this.multiSelect) return;
93492
+ // form control even with aria-hidden/tabindex=-1, so revert to the expected
93493
+ // mirror (formattedValue[0]) rather than letting the native select drift and
93494
+ // silently submit the autofilled scalar under `name`.
93495
+ if (this.multiSelect) {
93496
+ this._updateNativeSelect();
93497
+ return;
93498
+ }
93353
93499
 
93354
93500
  const selectedOption = event.target.options[event.target.selectedIndex];
93355
93501
  if (!selectedOption) return;