@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
@@ -11769,14 +11769,16 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11769
11769
  this.label = 'Input label is undefined';
11770
11770
  this.layout = 'classic';
11771
11771
  this.locale = 'en-US';
11772
+ this._format = undefined;
11773
+
11774
+ /** @private */
11775
+ this._userSetFormat = false;
11772
11776
  this.max = undefined;
11773
11777
  this.maxLength = undefined;
11774
11778
  this.min = undefined;
11775
11779
  this.minLength = undefined;
11776
11780
  this.noValidate = false;
11777
11781
  this.onDark = false;
11778
- // Raw values returned from the input mask before model normalization.
11779
- this._rawMaskValue = undefined;
11780
11782
  this.required = false;
11781
11783
  this.setCustomValidityForType = undefined;
11782
11784
  // Credit Card is intentionally excluded — its mask manages the cursor
@@ -11934,7 +11936,8 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11934
11936
  */
11935
11937
  format: {
11936
11938
  type: String,
11937
- reflect: true
11939
+ reflect: true,
11940
+ noAccessor: true
11938
11941
  },
11939
11942
 
11940
11943
  /**
@@ -12272,6 +12275,34 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12272
12275
  return this.max && dateFormatter$3.isValidDate(this.max) ? dateFormatter$3.stringToDateInstance(this.max) : undefined;
12273
12276
  }
12274
12277
 
12278
+ get format() {
12279
+ return this._format;
12280
+ }
12281
+
12282
+ /**
12283
+ * Overrides LitElement's generated accessor so we can track whether the
12284
+ * consumer explicitly set `format`. Locale-derived updates use
12285
+ * `_setFormatFromLocale` instead, which skips this flag.
12286
+ */
12287
+ set format(value) {
12288
+ const oldValue = this._format;
12289
+ this._format = value ? value.toLowerCase() : value;
12290
+ this._userSetFormat = Boolean(value);
12291
+ this.requestUpdate('format', oldValue);
12292
+ }
12293
+
12294
+ /**
12295
+ * Sets format without marking it as user-set. Used by locale auto-derive
12296
+ * so that a subsequent locale change can still update the format.
12297
+ * @private
12298
+ * @param {string} value
12299
+ */
12300
+ _setFormatFromLocale(value) {
12301
+ const oldValue = this._format;
12302
+ this._format = value ? value.toLowerCase() : value;
12303
+ this.requestUpdate('format', oldValue);
12304
+ }
12305
+
12275
12306
  connectedCallback() {
12276
12307
  super.connectedCallback();
12277
12308
 
@@ -12319,15 +12350,6 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12319
12350
 
12320
12351
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
12321
12352
 
12322
- // Normalize the format token to lowercase so case-mixed values supplied
12323
- // via attribute (e.g. `format="MM/DD/YYYY"`) hit the `dateFormatMap`
12324
- // lookup inside `setCustomHelpTextMessage`. Without this, an uppercase
12325
- // format silently misses the map and leaves `setCustomValidityForType`
12326
- // unset.
12327
- if (this.format) {
12328
- this.format = this.format.toLowerCase();
12329
- }
12330
-
12331
12353
  // use validity message override if declared when initializing the component
12332
12354
  if (this.hasAttribute('setCustomValidity')) {
12333
12355
  this.ValidityMessageOverride = this.setCustomValidity;
@@ -12434,12 +12456,10 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12434
12456
  updated(changedProperties) {
12435
12457
  super.updated(changedProperties);
12436
12458
 
12437
- // When locale changes without an explicit format override, derive format from the new locale.
12438
- // Only runs if the current format is still the previous locale's default (not user-overridden).
12459
+ // When locale changes, auto-derive format unless the consumer explicitly set one.
12439
12460
  if (changedProperties.has('locale') && !changedProperties.has('format') && this.type === 'date') {
12440
- const previousLocaleFormat = getDateFormatFromLocale$3(changedProperties.get('locale'));
12441
- if (!this.format || this.format.toLowerCase() === previousLocaleFormat) {
12442
- this.format = getDateFormatFromLocale$3(this.locale);
12461
+ if (!this._userSetFormat) {
12462
+ this._setFormatFromLocale(getDateFormatFromLocale$3(this.locale));
12443
12463
  }
12444
12464
  }
12445
12465
 
@@ -12610,9 +12630,6 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12610
12630
  this.maskInstance.on('accept', () => {
12611
12631
  if (this._configuringMask) return;
12612
12632
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
12613
- if (this.type === "date") {
12614
- this._rawMaskValue = this.maskInstance.value;
12615
- }
12616
12633
  });
12617
12634
 
12618
12635
  // Mask fires 'complete' on the restore step below for any value that
@@ -12620,9 +12637,6 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12620
12637
  this.maskInstance.on('complete', () => {
12621
12638
  if (this._configuringMask) return;
12622
12639
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
12623
- if (this.type === "date") {
12624
- this._rawMaskValue = this.maskInstance.value;
12625
- }
12626
12640
  });
12627
12641
 
12628
12642
  // Write existingValue through the mask (not the input directly) so
@@ -12859,8 +12873,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12859
12873
 
12860
12874
  // Set default date format if type=date and no format is defined
12861
12875
  if (this.type === "date" && !this.format) {
12862
- // Use locale to determine default date format
12863
- this.format = this.util.getDateMaskFromLocale().toLowerCase();
12876
+ this._setFormatFromLocale(this.util.getDateMaskFromLocale().toLowerCase());
12864
12877
  this.util.updateFormat(this.format);
12865
12878
  }
12866
12879
  }
@@ -12889,7 +12902,7 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12889
12902
  const creditCard = this.matchInputValueToCreditCard();
12890
12903
  const previousFormat = this.format;
12891
12904
 
12892
- this.format = creditCard.maskFormat;
12905
+ this._setFormatFromLocale(creditCard.maskFormat);
12893
12906
 
12894
12907
  this.maxLength = creditCard.formatLength;
12895
12908
  this.minLength = creditCard.formatMinLength;
@@ -13363,7 +13376,7 @@ let AuroHelpText$8 = class AuroHelpText extends i$3 {
13363
13376
  }
13364
13377
  };
13365
13378
 
13366
- var formkitVersion$8 = '202607021905';
13379
+ var formkitVersion$8 = '202607022225';
13367
13380
 
13368
13381
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
13369
13382
  // See LICENSE in the project root for license information.
@@ -25734,23 +25747,28 @@ var popoverVersion = '6.0.1';
25734
25747
  * @returns {number|null} Local-midnight Unix timestamp (seconds), or null.
25735
25748
  */
25736
25749
  function parseIsoToTimestamp(isoStr) {
25750
+ // Strict YYYY-MM-DD matcher with named groups. Rejects trailing garbage
25751
+ // ("2024x-01-01"), short segments ("2024-1-1"), and any non-digit
25752
+ // characters. `parseInt` alone accepted both because it stops at the
25753
+ // first non-digit and doesn't require a minimum length.
25754
+ const ISO_DATE_RE = /^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/u;
25755
+ const MAX_MONTH = 12;
25756
+ const MAX_DAY = 31;
25757
+
25737
25758
  if (typeof isoStr !== 'string') {
25738
25759
  return null;
25739
25760
  }
25740
- const parts = isoStr.split('-');
25741
- if (parts.length !== 3) {
25742
- return null;
25743
- }
25744
- const year = parseInt(parts[0], 10);
25745
- const month = parseInt(parts[1], 10);
25746
- const day = parseInt(parts[2], 10);
25747
- if (!Number.isFinite(year) || !Number.isFinite(month) || !Number.isFinite(day)) {
25761
+ const match = ISO_DATE_RE.exec(isoStr);
25762
+ if (!match) {
25748
25763
  return null;
25749
25764
  }
25765
+ const year = Number(match.groups.year);
25766
+ const month = Number(match.groups.month);
25767
+ const day = Number(match.groups.day);
25750
25768
  // Reject overflow values like "2024-13-40" — JS `new Date(year, month, day)`
25751
25769
  // silently normalizes those to a different calendar day, which would
25752
25770
  // disable the wrong date if we let the result through.
25753
- if (month < 1 || month > 12 || day < 1 || day > 31) {
25771
+ if (month < 1 || month > MAX_MONTH || day < 1 || day > MAX_DAY) {
25754
25772
  return null;
25755
25773
  }
25756
25774
  const date = new Date(year, month - 1, day);
@@ -26328,6 +26346,18 @@ class AuroCalendarCell extends i$3 {
26328
26346
  }
26329
26347
 
26330
26348
  firstUpdated() {
26349
+ this._initFromAncestors();
26350
+ }
26351
+
26352
+ /**
26353
+ * Wires the cell to its ancestor calendar-month and calendar (and, via
26354
+ * the calendar, to the datepicker). Extracted from firstUpdated() so the
26355
+ * retry loop can re-attempt without recursively invoking a Lit lifecycle
26356
+ * method (which is outside the framework's contract).
26357
+ * @private
26358
+ * @returns {void}
26359
+ */
26360
+ _initFromAncestors() {
26331
26361
  const calendarMonth = this.runtimeUtils.closestElement('auro-formkit-calendar-month', this);
26332
26362
  const calendar = this.runtimeUtils.closestElement('auro-formkit-calendar', calendarMonth);
26333
26363
 
@@ -26336,12 +26366,12 @@ class AuroCalendarCell extends i$3 {
26336
26366
  // to attach — but cap attempts so a permanently detached cell doesn't
26337
26367
  // spin forever. 10 turns is far more than any observed race needs.
26338
26368
  this._firstUpdatedRetries = (this._firstUpdatedRetries || 0) + 1;
26339
- if (this._firstUpdatedRetries > 10) { // eslint-disable-line no-magic-numbers
26369
+ if (this._firstUpdatedRetries > 10) {
26340
26370
  return;
26341
26371
  }
26342
26372
  this._firstUpdatedRetryTimer = setTimeout(() => {
26343
26373
  this._firstUpdatedRetryTimer = null;
26344
- this.firstUpdated();
26374
+ this._initFromAncestors();
26345
26375
  }, 0);
26346
26376
  return;
26347
26377
  }
@@ -27748,7 +27778,7 @@ let AuroBibtemplate$3 = class AuroBibtemplate extends i$3 {
27748
27778
  }
27749
27779
  };
27750
27780
 
27751
- var formkitVersion$2$1 = '202607021905';
27781
+ var formkitVersion$2$1 = '202607022225';
27752
27782
 
27753
27783
  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}
27754
27784
  `,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}}
@@ -27887,7 +27917,10 @@ class AuroCalendar extends RangeDatepicker {
27887
27917
  * Support will be removed in a future major release.
27888
27918
  * @private
27889
27919
  */
27890
- this.disabledDays = [];
27920
+ // Initialize the backing field directly so the constructor's default
27921
+ // empty array doesn't trigger the deprecation warning. Assignments from
27922
+ // consumers still route through the setter below.
27923
+ this._disabledDays = [];
27891
27924
 
27892
27925
  /**
27893
27926
  * @private
@@ -27920,6 +27953,44 @@ class AuroCalendar extends RangeDatepicker {
27920
27953
  this._calendarInstanceId = Date.now().toString(36);
27921
27954
  }
27922
27955
 
27956
+ /**
27957
+ * @deprecated See constructor JSDoc — migrate to
27958
+ * `auro-datepicker.blackoutDates`. The getter/setter pair exists so the
27959
+ * one-time deprecation warning fires as soon as a consumer assigns a
27960
+ * non-empty array (empty assignments are ignored — an empty array is
27961
+ * indistinguishable from the constructor default and would produce a
27962
+ * spurious warning), rather than only when `_getBlackoutSet()` happens
27963
+ * to rebuild.
27964
+ * @returns {Array} The current legacy `disabledDays` array.
27965
+ */
27966
+ get disabledDays() {
27967
+ return this._disabledDays;
27968
+ }
27969
+
27970
+ /**
27971
+ * @param {Array} value - The legacy `disabledDays` array to set.
27972
+ */
27973
+ set disabledDays(value) {
27974
+ const oldValue = this._disabledDays;
27975
+ // Coerce non-arrays to `[]`. Consumers occasionally pass `null`
27976
+ // (Lit's Array attribute converter returns null for a missing/empty
27977
+ // attribute) or misuse the API; downstream code in
27978
+ // `auro-calendar-cell.isEnabled` calls `.findIndex()` on this value
27979
+ // without an Array.isArray guard, so a truthy non-array would throw
27980
+ // at render.
27981
+ const coerced = Array.isArray(value) ? value : [];
27982
+ if (coerced.length > 0) {
27983
+ this._warnDisabledDaysDeprecated();
27984
+ }
27985
+ this._disabledDays = coerced;
27986
+ // `disabledDays` is a Lit `@property({ type: Array })` on the
27987
+ // RangeDatepicker base class; Lit's generated setter (which we've
27988
+ // overridden here to insert the warning) is what normally invalidates
27989
+ // the reactive cycle. Re-invoke requestUpdate manually so consumer
27990
+ // assignments still re-render the calendar.
27991
+ this.requestUpdate('disabledDays', oldValue);
27992
+ }
27993
+
27923
27994
  static get styles() {
27924
27995
  return [
27925
27996
  styleCss$7$1,
@@ -28659,12 +28730,15 @@ class AuroCalendar extends RangeDatepicker {
28659
28730
  // that has no DOM cell. Determine the visible range based on centralDate and
28660
28731
  // the number of rendered months.
28661
28732
  //
28662
- // numCalendars is assigned during renderAllCalendars(), which runs after
28663
- // updated() — so the visible-change handler's eager computeActiveDate()
28664
- // call arrives with numCalendars still undefined. Math.max(undefined, 1)
28665
- // is NaN, which would silently skip the visible-month scan below. Fall
28666
- // back to maximumRenderableMonths' desktop default (1 for non-range,
28667
- // 2 for range) so the scan window is correctly sized on first open.
28733
+ // numCalendars is assigned inside renderAllCalendars(), which runs during
28734
+ // render() — so by the time the visible-change handler in updated()
28735
+ // calls computeActiveDate() in the same cycle, numCalendars is normally
28736
+ // set. Guard against the pre-first-render path anyway (e.g. any future
28737
+ // caller that reaches computeActiveDate before render() has run):
28738
+ // Math.max(undefined, 1) is NaN, which would silently skip the
28739
+ // visible-month scan below. Fall back to maximumRenderableMonths'
28740
+ // desktop default (1 for non-range, 2 for range) so the scan window is
28741
+ // correctly sized whenever numCalendars is not yet populated.
28668
28742
  let renderedMonths = null;
28669
28743
 
28670
28744
  if (Number.isFinite(this.numCalendars) && this.numCalendars > 0) {
@@ -33597,7 +33671,7 @@ let AuroHelpText$2$1 = class AuroHelpText extends i$3 {
33597
33671
  }
33598
33672
  };
33599
33673
 
33600
- var formkitVersion$1$3 = '202607021905';
33674
+ var formkitVersion$1$3 = '202607022225';
33601
33675
 
33602
33676
  let AuroElement$2$2 = class AuroElement extends i$3 {
33603
33677
  static get properties() {
@@ -45605,14 +45679,16 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45605
45679
  this.label = 'Input label is undefined';
45606
45680
  this.layout = 'classic';
45607
45681
  this.locale = 'en-US';
45682
+ this._format = undefined;
45683
+
45684
+ /** @private */
45685
+ this._userSetFormat = false;
45608
45686
  this.max = undefined;
45609
45687
  this.maxLength = undefined;
45610
45688
  this.min = undefined;
45611
45689
  this.minLength = undefined;
45612
45690
  this.noValidate = false;
45613
45691
  this.onDark = false;
45614
- // Raw values returned from the input mask before model normalization.
45615
- this._rawMaskValue = undefined;
45616
45692
  this.required = false;
45617
45693
  this.setCustomValidityForType = undefined;
45618
45694
  // Credit Card is intentionally excluded — its mask manages the cursor
@@ -45770,7 +45846,8 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45770
45846
  */
45771
45847
  format: {
45772
45848
  type: String,
45773
- reflect: true
45849
+ reflect: true,
45850
+ noAccessor: true
45774
45851
  },
45775
45852
 
45776
45853
  /**
@@ -46108,6 +46185,34 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
46108
46185
  return this.max && dateFormatter$2.isValidDate(this.max) ? dateFormatter$2.stringToDateInstance(this.max) : undefined;
46109
46186
  }
46110
46187
 
46188
+ get format() {
46189
+ return this._format;
46190
+ }
46191
+
46192
+ /**
46193
+ * Overrides LitElement's generated accessor so we can track whether the
46194
+ * consumer explicitly set `format`. Locale-derived updates use
46195
+ * `_setFormatFromLocale` instead, which skips this flag.
46196
+ */
46197
+ set format(value) {
46198
+ const oldValue = this._format;
46199
+ this._format = value ? value.toLowerCase() : value;
46200
+ this._userSetFormat = Boolean(value);
46201
+ this.requestUpdate('format', oldValue);
46202
+ }
46203
+
46204
+ /**
46205
+ * Sets format without marking it as user-set. Used by locale auto-derive
46206
+ * so that a subsequent locale change can still update the format.
46207
+ * @private
46208
+ * @param {string} value
46209
+ */
46210
+ _setFormatFromLocale(value) {
46211
+ const oldValue = this._format;
46212
+ this._format = value ? value.toLowerCase() : value;
46213
+ this.requestUpdate('format', oldValue);
46214
+ }
46215
+
46111
46216
  connectedCallback() {
46112
46217
  super.connectedCallback();
46113
46218
 
@@ -46155,15 +46260,6 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
46155
46260
 
46156
46261
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
46157
46262
 
46158
- // Normalize the format token to lowercase so case-mixed values supplied
46159
- // via attribute (e.g. `format="MM/DD/YYYY"`) hit the `dateFormatMap`
46160
- // lookup inside `setCustomHelpTextMessage`. Without this, an uppercase
46161
- // format silently misses the map and leaves `setCustomValidityForType`
46162
- // unset.
46163
- if (this.format) {
46164
- this.format = this.format.toLowerCase();
46165
- }
46166
-
46167
46263
  // use validity message override if declared when initializing the component
46168
46264
  if (this.hasAttribute('setCustomValidity')) {
46169
46265
  this.ValidityMessageOverride = this.setCustomValidity;
@@ -46270,12 +46366,10 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
46270
46366
  updated(changedProperties) {
46271
46367
  super.updated(changedProperties);
46272
46368
 
46273
- // When locale changes without an explicit format override, derive format from the new locale.
46274
- // Only runs if the current format is still the previous locale's default (not user-overridden).
46369
+ // When locale changes, auto-derive format unless the consumer explicitly set one.
46275
46370
  if (changedProperties.has('locale') && !changedProperties.has('format') && this.type === 'date') {
46276
- const previousLocaleFormat = getDateFormatFromLocale$2(changedProperties.get('locale'));
46277
- if (!this.format || this.format.toLowerCase() === previousLocaleFormat) {
46278
- this.format = getDateFormatFromLocale$2(this.locale);
46371
+ if (!this._userSetFormat) {
46372
+ this._setFormatFromLocale(getDateFormatFromLocale$2(this.locale));
46279
46373
  }
46280
46374
  }
46281
46375
 
@@ -46446,9 +46540,6 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
46446
46540
  this.maskInstance.on('accept', () => {
46447
46541
  if (this._configuringMask) return;
46448
46542
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
46449
- if (this.type === "date") {
46450
- this._rawMaskValue = this.maskInstance.value;
46451
- }
46452
46543
  });
46453
46544
 
46454
46545
  // Mask fires 'complete' on the restore step below for any value that
@@ -46456,9 +46547,6 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
46456
46547
  this.maskInstance.on('complete', () => {
46457
46548
  if (this._configuringMask) return;
46458
46549
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
46459
- if (this.type === "date") {
46460
- this._rawMaskValue = this.maskInstance.value;
46461
- }
46462
46550
  });
46463
46551
 
46464
46552
  // Write existingValue through the mask (not the input directly) so
@@ -46695,8 +46783,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
46695
46783
 
46696
46784
  // Set default date format if type=date and no format is defined
46697
46785
  if (this.type === "date" && !this.format) {
46698
- // Use locale to determine default date format
46699
- this.format = this.util.getDateMaskFromLocale().toLowerCase();
46786
+ this._setFormatFromLocale(this.util.getDateMaskFromLocale().toLowerCase());
46700
46787
  this.util.updateFormat(this.format);
46701
46788
  }
46702
46789
  }
@@ -46725,7 +46812,7 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
46725
46812
  const creditCard = this.matchInputValueToCreditCard();
46726
46813
  const previousFormat = this.format;
46727
46814
 
46728
- this.format = creditCard.maskFormat;
46815
+ this._setFormatFromLocale(creditCard.maskFormat);
46729
46816
 
46730
46817
  this.maxLength = creditCard.formatLength;
46731
46818
  this.minLength = creditCard.formatMinLength;
@@ -47199,7 +47286,7 @@ let AuroHelpText$1$3 = class AuroHelpText extends i$3 {
47199
47286
  }
47200
47287
  };
47201
47288
 
47202
- var formkitVersion$7 = '202607021905';
47289
+ var formkitVersion$7 = '202607022225';
47203
47290
 
47204
47291
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
47205
47292
  // See LICENSE in the project root for license information.
@@ -52120,7 +52207,7 @@ let AuroHelpText$1$2 = class AuroHelpText extends i$3 {
52120
52207
  }
52121
52208
  };
52122
52209
 
52123
- var formkitVersion$1$2 = '202607021905';
52210
+ var formkitVersion$1$2 = '202607022225';
52124
52211
 
52125
52212
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
52126
52213
  // See LICENSE in the project root for license information.
@@ -56448,7 +56535,7 @@ let AuroHelpText$6 = class AuroHelpText extends i$3 {
56448
56535
  }
56449
56536
  };
56450
56537
 
56451
- var formkitVersion$6 = '202607021905';
56538
+ var formkitVersion$6 = '202607022225';
56452
56539
 
56453
56540
  let AuroElement$1$2 = class AuroElement extends i$3 {
56454
56541
  static get properties() {
@@ -60428,7 +60515,7 @@ let AuroHelpText$5 = class AuroHelpText extends i$3 {
60428
60515
  }
60429
60516
  };
60430
60517
 
60431
- var formkitVersion$5 = '202607021905';
60518
+ var formkitVersion$5 = '202607022225';
60432
60519
 
60433
60520
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
60434
60521
  // See LICENSE in the project root for license information.
@@ -62193,7 +62280,7 @@ let AuroHelpText$4 = class AuroHelpText extends i$3 {
62193
62280
  }
62194
62281
  };
62195
62282
 
62196
- var formkitVersion$4 = '202607021905';
62283
+ var formkitVersion$4 = '202607022225';
62197
62284
 
62198
62285
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
62199
62286
  // See LICENSE in the project root for license information.
@@ -67414,7 +67501,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$3 {
67414
67501
  }
67415
67502
  };
67416
67503
 
67417
- var formkitVersion$2 = '202607021905';
67504
+ var formkitVersion$2 = '202607022225';
67418
67505
 
67419
67506
  let AuroElement$2$1 = class AuroElement extends i$3 {
67420
67507
  static get properties() {
@@ -79422,14 +79509,16 @@ class BaseInput extends AuroElement$1$1 {
79422
79509
  this.label = 'Input label is undefined';
79423
79510
  this.layout = 'classic';
79424
79511
  this.locale = 'en-US';
79512
+ this._format = undefined;
79513
+
79514
+ /** @private */
79515
+ this._userSetFormat = false;
79425
79516
  this.max = undefined;
79426
79517
  this.maxLength = undefined;
79427
79518
  this.min = undefined;
79428
79519
  this.minLength = undefined;
79429
79520
  this.noValidate = false;
79430
79521
  this.onDark = false;
79431
- // Raw values returned from the input mask before model normalization.
79432
- this._rawMaskValue = undefined;
79433
79522
  this.required = false;
79434
79523
  this.setCustomValidityForType = undefined;
79435
79524
  // Credit Card is intentionally excluded — its mask manages the cursor
@@ -79587,7 +79676,8 @@ class BaseInput extends AuroElement$1$1 {
79587
79676
  */
79588
79677
  format: {
79589
79678
  type: String,
79590
- reflect: true
79679
+ reflect: true,
79680
+ noAccessor: true
79591
79681
  },
79592
79682
 
79593
79683
  /**
@@ -79925,6 +80015,34 @@ class BaseInput extends AuroElement$1$1 {
79925
80015
  return this.max && dateFormatter.isValidDate(this.max) ? dateFormatter.stringToDateInstance(this.max) : undefined;
79926
80016
  }
79927
80017
 
80018
+ get format() {
80019
+ return this._format;
80020
+ }
80021
+
80022
+ /**
80023
+ * Overrides LitElement's generated accessor so we can track whether the
80024
+ * consumer explicitly set `format`. Locale-derived updates use
80025
+ * `_setFormatFromLocale` instead, which skips this flag.
80026
+ */
80027
+ set format(value) {
80028
+ const oldValue = this._format;
80029
+ this._format = value ? value.toLowerCase() : value;
80030
+ this._userSetFormat = Boolean(value);
80031
+ this.requestUpdate('format', oldValue);
80032
+ }
80033
+
80034
+ /**
80035
+ * Sets format without marking it as user-set. Used by locale auto-derive
80036
+ * so that a subsequent locale change can still update the format.
80037
+ * @private
80038
+ * @param {string} value
80039
+ */
80040
+ _setFormatFromLocale(value) {
80041
+ const oldValue = this._format;
80042
+ this._format = value ? value.toLowerCase() : value;
80043
+ this.requestUpdate('format', oldValue);
80044
+ }
80045
+
79928
80046
  connectedCallback() {
79929
80047
  super.connectedCallback();
79930
80048
 
@@ -79972,15 +80090,6 @@ class BaseInput extends AuroElement$1$1 {
79972
80090
 
79973
80091
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
79974
80092
 
79975
- // Normalize the format token to lowercase so case-mixed values supplied
79976
- // via attribute (e.g. `format="MM/DD/YYYY"`) hit the `dateFormatMap`
79977
- // lookup inside `setCustomHelpTextMessage`. Without this, an uppercase
79978
- // format silently misses the map and leaves `setCustomValidityForType`
79979
- // unset.
79980
- if (this.format) {
79981
- this.format = this.format.toLowerCase();
79982
- }
79983
-
79984
80093
  // use validity message override if declared when initializing the component
79985
80094
  if (this.hasAttribute('setCustomValidity')) {
79986
80095
  this.ValidityMessageOverride = this.setCustomValidity;
@@ -80087,12 +80196,10 @@ class BaseInput extends AuroElement$1$1 {
80087
80196
  updated(changedProperties) {
80088
80197
  super.updated(changedProperties);
80089
80198
 
80090
- // When locale changes without an explicit format override, derive format from the new locale.
80091
- // Only runs if the current format is still the previous locale's default (not user-overridden).
80199
+ // When locale changes, auto-derive format unless the consumer explicitly set one.
80092
80200
  if (changedProperties.has('locale') && !changedProperties.has('format') && this.type === 'date') {
80093
- const previousLocaleFormat = getDateFormatFromLocale(changedProperties.get('locale'));
80094
- if (!this.format || this.format.toLowerCase() === previousLocaleFormat) {
80095
- this.format = getDateFormatFromLocale(this.locale);
80201
+ if (!this._userSetFormat) {
80202
+ this._setFormatFromLocale(getDateFormatFromLocale(this.locale));
80096
80203
  }
80097
80204
  }
80098
80205
 
@@ -80263,9 +80370,6 @@ class BaseInput extends AuroElement$1$1 {
80263
80370
  this.maskInstance.on('accept', () => {
80264
80371
  if (this._configuringMask) return;
80265
80372
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
80266
- if (this.type === "date") {
80267
- this._rawMaskValue = this.maskInstance.value;
80268
- }
80269
80373
  });
80270
80374
 
80271
80375
  // Mask fires 'complete' on the restore step below for any value that
@@ -80273,9 +80377,6 @@ class BaseInput extends AuroElement$1$1 {
80273
80377
  this.maskInstance.on('complete', () => {
80274
80378
  if (this._configuringMask) return;
80275
80379
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
80276
- if (this.type === "date") {
80277
- this._rawMaskValue = this.maskInstance.value;
80278
- }
80279
80380
  });
80280
80381
 
80281
80382
  // Write existingValue through the mask (not the input directly) so
@@ -80512,8 +80613,7 @@ class BaseInput extends AuroElement$1$1 {
80512
80613
 
80513
80614
  // Set default date format if type=date and no format is defined
80514
80615
  if (this.type === "date" && !this.format) {
80515
- // Use locale to determine default date format
80516
- this.format = this.util.getDateMaskFromLocale().toLowerCase();
80616
+ this._setFormatFromLocale(this.util.getDateMaskFromLocale().toLowerCase());
80517
80617
  this.util.updateFormat(this.format);
80518
80618
  }
80519
80619
  }
@@ -80542,7 +80642,7 @@ class BaseInput extends AuroElement$1$1 {
80542
80642
  const creditCard = this.matchInputValueToCreditCard();
80543
80643
  const previousFormat = this.format;
80544
80644
 
80545
- this.format = creditCard.maskFormat;
80645
+ this._setFormatFromLocale(creditCard.maskFormat);
80546
80646
 
80547
80647
  this.maxLength = creditCard.formatLength;
80548
80648
  this.minLength = creditCard.formatMinLength;
@@ -81016,7 +81116,7 @@ let AuroHelpText$1$1 = class AuroHelpText extends i$3 {
81016
81116
  }
81017
81117
  };
81018
81118
 
81019
- var formkitVersion$1$1 = '202607021905';
81119
+ var formkitVersion$1$1 = '202607022225';
81020
81120
 
81021
81121
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
81022
81122
  // See LICENSE in the project root for license information.
@@ -82142,7 +82242,7 @@ let AuroBibtemplate$1 = class AuroBibtemplate extends i$3 {
82142
82242
  }
82143
82243
  };
82144
82244
 
82145
- var formkitVersion$3 = '202607021905';
82245
+ var formkitVersion$3 = '202607022225';
82146
82246
 
82147
82247
  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}`;
82148
82248
 
@@ -86919,9 +87019,6 @@ function navigateArrow(component, direction, options = {}) {
86919
87019
  * @param {HTMLElement | null | undefined} menu - The auro-menu element.
86920
87020
  * @returns {Array<HTMLElement>} Non-disabled options, empty array when none.
86921
87021
  */
86922
- function getEnabledOptions(menu) {
86923
- return (menu?.options || []).filter((option) => !option.disabled);
86924
- }
86925
87022
 
86926
87023
  /**
86927
87024
  * Returns the active (selectable + visible) options for type-ahead navigation.
@@ -86991,8 +87088,10 @@ const selectKeyboardStrategy = {
86991
87088
  End(component, evt, ctx) {
86992
87089
  evt.preventDefault();
86993
87090
  evt.stopPropagation();
86994
- // `pop()` is safe here: getEnabledOptions returns a fresh filtered array.
86995
- const lastOption = getEnabledOptions(component.menu).pop();
87091
+ // `pop()` is safe here: getActiveOptions returns a fresh filtered array.
87092
+ // Uses "active" (not "enabled") so hidden and static rows — which a screen
87093
+ // reader must not announce as focused — are skipped.
87094
+ const lastOption = getActiveOptions(component.menu).pop();
86996
87095
  if (!lastOption) {
86997
87096
  return;
86998
87097
  }
@@ -87023,7 +87122,7 @@ const selectKeyboardStrategy = {
87023
87122
  Home(component, evt, ctx) {
87024
87123
  evt.preventDefault();
87025
87124
  evt.stopPropagation();
87026
- const [firstOption] = getEnabledOptions(component.menu);
87125
+ const [firstOption] = getActiveOptions(component.menu);
87027
87126
  if (!firstOption) {
87028
87127
  return;
87029
87128
  }
@@ -87048,6 +87147,15 @@ const selectKeyboardStrategy = {
87048
87147
  },
87049
87148
 
87050
87149
  default(component, evt, ctx) {
87150
+ // Ignore keys chorded with Ctrl/Meta/Alt so browser/OS shortcuts
87151
+ // (Cmd+C, Ctrl+V, Alt+X, Cmd+Space, …) don't leak into typeahead
87152
+ // or toggle the bib. Native <select> ignores modified keys.
87153
+ // ArrowUp/ArrowDown handle modifier+arrow explicitly above; this
87154
+ // guard only affects the default (printable/Space) branch.
87155
+ if (evt.ctrlKey || evt.metaKey || evt.altKey) {
87156
+ return;
87157
+ }
87158
+
87051
87159
  // Space resolves to either typeahead-buffer extension or bib toggle
87052
87160
  // depending on whether a type-ahead buffer is active. Mirrors native
87053
87161
  // <select> and the WAI-ARIA APG Listbox guidance: mid-typeahead space
@@ -90978,7 +91086,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
90978
91086
  }
90979
91087
  };
90980
91088
 
90981
- var formkitVersion$1 = '202607021905';
91089
+ var formkitVersion$1 = '202607022225';
90982
91090
 
90983
91091
  class AuroElement extends i$3 {
90984
91092
  static get properties() {
@@ -93017,7 +93125,7 @@ class AuroHelpText extends i$3 {
93017
93125
  }
93018
93126
  }
93019
93127
 
93020
- var formkitVersion = '202607021905';
93128
+ var formkitVersion = '202607022225';
93021
93129
 
93022
93130
  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}`;
93023
93131
 
@@ -93581,8 +93689,11 @@ class AuroSelect extends AuroElement$1 {
93581
93689
  } else if (this.multiSelect && Array.isArray(this.optionSelected) && this.optionSelected.length > 0) {
93582
93690
  this.menu.updateActiveOption(this.optionSelected[0]);
93583
93691
  } else {
93584
- // If no activeOption has yet to be set, then make the first enabled option active by default
93585
- const [firstActive] = getEnabledOptions(this.menu);
93692
+ // If no activeOption has yet to be set, make the first active option
93693
+ // (non-disabled, non-hidden, non-static) active by default. "Active" —
93694
+ // not just "enabled" — so hidden rows and static placeholders never
93695
+ // land in aria-activedescendant on open.
93696
+ const [firstActive] = getActiveOptions(this.menu);
93586
93697
  this.menu.updateActiveOption(firstActive);
93587
93698
  }
93588
93699
  }
@@ -93828,6 +93939,12 @@ class AuroSelect extends AuroElement$1 {
93828
93939
 
93829
93940
  /**
93830
93941
  * Binds all behavior needed to the menu after rendering.
93942
+ *
93943
+ * The `<auro-menu>` reference is captured once and not re-targeted on
93944
+ * `slotchange`. Runtime option mutations are covered via
93945
+ * `auroMenu-optionsChange`, so swap options inside the menu freely; do not
93946
+ * swap the `<auro-menu>` element itself under a live select — remount the
93947
+ * parent `<auro-select>` instead.
93831
93948
  * @private
93832
93949
  * @returns {void}
93833
93950
  */
@@ -93886,6 +94003,15 @@ class AuroSelect extends AuroElement$1 {
93886
94003
  if (this.menu.optionSelected !== undefined) {
93887
94004
  return;
93888
94005
  }
94006
+ // Skip when the select is already cleared (valueless click with no
94007
+ // prior selection): value/optionSelected are already empty and there
94008
+ // is no stale trigger text to refresh, so updateDisplayedValue would
94009
+ // just churn the DOM and request a needless dropdown re-render.
94010
+ const hasStaleState = this.value !== undefined ||
94011
+ (this.multiSelect ? this.optionSelected?.length > 0 : this.optionSelected !== undefined);
94012
+ if (!hasStaleState) {
94013
+ return;
94014
+ }
93889
94015
  this.value = undefined;
93890
94016
  this.optionSelected = this.multiSelect ? [] : undefined;
93891
94017
  // The trigger label is rendered imperatively into #value, so a property
@@ -93915,10 +94041,15 @@ class AuroSelect extends AuroElement$1 {
93915
94041
  if (this.dropdown.isPopoverVisible) {
93916
94042
  announceToScreenReader(this._getAnnouncementRoot(), message);
93917
94043
  } else {
93918
- // Typeahead-on-closed fires this event before `show()` flips
93919
- // isPopoverVisible. Defer so the announcement targets the bib's
93920
- // live region once the fullscreen <dialog> opens otherwise it
93921
- // lands in the host root, which is inert under the active modal.
94044
+ // Typeahead-on-closed calls updateActiveOption() before show(), so
94045
+ // this handler runs with isPopoverVisible still false. queueMicrotask
94046
+ // is safe because show() showBib() flips isPopoverVisible and
94047
+ // dialog.showModal() both run synchronously in the same task; the
94048
+ // microtask queue only drains once _handleTypeahead unwinds, by
94049
+ // which point _getAnnouncementRoot() resolves to the bib's shadow
94050
+ // root inside the now-open modal. Do NOT switch to auroDropdown-toggled
94051
+ // — it fires before showModal(), landing the announcement in the
94052
+ // host root while the dialog is still not-yet-modal.
93922
94053
  queueMicrotask(() => announceToScreenReader(this._getAnnouncementRoot(), message));
93923
94054
  }
93924
94055
  }
@@ -94312,6 +94443,13 @@ class AuroSelect extends AuroElement$1 {
94312
94443
  }
94313
94444
 
94314
94445
  if (changedProperties.has('value')) {
94446
+ // A value change ends the current interaction — whether it came from a
94447
+ // user commit, programmatic assignment, or reset(). Clear the buffer so
94448
+ // a stale prefix does not concatenate onto the next keystroke while the
94449
+ // host still has focus (the blur listener would otherwise be the only
94450
+ // focus-retained clear point, and hideBib() below does not blur).
94451
+ this._clearTypeaheadBuffer();
94452
+
94315
94453
  this.setMenuValue(this.value);
94316
94454
 
94317
94455
  this._updateNativeSelect();
@@ -94367,6 +94505,9 @@ class AuroSelect extends AuroElement$1 {
94367
94505
  * @returns {void}
94368
94506
  */
94369
94507
  reset() {
94508
+ // Defense-in-depth: updated()'s value-change branch also clears, but
94509
+ // reset-to-same-value (e.g. undefined → undefined) skips that path.
94510
+ this._clearTypeaheadBuffer();
94370
94511
  this.menu.reset();
94371
94512
  this.validation.reset(this);
94372
94513
  }
@@ -94389,8 +94530,13 @@ class AuroSelect extends AuroElement$1 {
94389
94530
  // Hidden native <select> has no `multiple` attribute, so any change it fires
94390
94531
  // is a single raw value — applying it in multiSelect mode would collapse the
94391
94532
  // JSON-array `value` shape. Bfcache/autofill can reach this on a name-bearing
94392
- // form control even with aria-hidden/tabindex=-1.
94393
- if (this.multiSelect) return;
94533
+ // form control even with aria-hidden/tabindex=-1, so revert to the expected
94534
+ // mirror (formattedValue[0]) rather than letting the native select drift and
94535
+ // silently submit the autofilled scalar under `name`.
94536
+ if (this.multiSelect) {
94537
+ this._updateNativeSelect();
94538
+ return;
94539
+ }
94394
94540
 
94395
94541
  const selectedOption = event.target.options[event.target.selectedIndex];
94396
94542
  if (!selectedOption) return;