@aurodesignsystem-dev/auro-formkit 0.0.0-pr1524.1 → 0.0.0-pr1530.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +24 -79
  7. package/components/combobox/demo/getting-started.min.js +24 -79
  8. package/components/combobox/demo/index.min.js +24 -79
  9. package/components/combobox/dist/auro-combobox.d.ts +0 -10
  10. package/components/combobox/dist/index.js +24 -79
  11. package/components/combobox/dist/registered.js +24 -79
  12. package/components/counter/demo/customize.min.js +2 -2
  13. package/components/counter/demo/index.min.js +2 -2
  14. package/components/counter/dist/index.js +2 -2
  15. package/components/counter/dist/registered.js +2 -2
  16. package/components/datepicker/demo/accessibility.md +13 -4
  17. package/components/datepicker/demo/api.md +1 -1
  18. package/components/datepicker/demo/customize.min.js +192 -44
  19. package/components/datepicker/demo/index.min.js +192 -44
  20. package/components/datepicker/demo/voiceover.md +1 -1
  21. package/components/datepicker/dist/auro-calendar-cell.d.ts +11 -0
  22. package/components/datepicker/dist/auro-calendar.d.ts +26 -2
  23. package/components/datepicker/dist/auro-datepicker.d.ts +9 -1
  24. package/components/datepicker/dist/index.js +192 -44
  25. package/components/datepicker/dist/registered.js +192 -44
  26. package/components/dropdown/demo/customize.min.js +1 -1
  27. package/components/dropdown/demo/getting-started.min.js +1 -1
  28. package/components/dropdown/demo/index.min.js +1 -1
  29. package/components/dropdown/dist/index.js +1 -1
  30. package/components/dropdown/dist/registered.js +1 -1
  31. package/components/form/demo/customize.min.js +254 -205
  32. package/components/form/demo/getting-started.min.js +254 -205
  33. package/components/form/demo/index.min.js +254 -205
  34. package/components/form/demo/registerDemoDeps.min.js +254 -205
  35. package/components/input/demo/customize.min.js +19 -17
  36. package/components/input/demo/getting-started.min.js +19 -17
  37. package/components/input/demo/index.min.js +19 -17
  38. package/components/input/dist/index.js +19 -17
  39. package/components/input/dist/registered.js +19 -17
  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 +16 -62
  46. package/components/select/demo/getting-started.min.js +16 -62
  47. package/components/select/demo/index.min.js +16 -62
  48. package/components/select/dist/auro-select.d.ts +0 -6
  49. package/components/select/dist/index.js +16 -62
  50. package/components/select/dist/registered.js +16 -62
  51. package/custom-elements.json +38 -22
  52. package/package.json +1 -1
@@ -11602,17 +11602,14 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
11602
11602
  * @returns {void}
11603
11603
  */
11604
11604
  notifyValueChanged() {
11605
- // This echoes Lit's reactive value update (and handleClickClear's
11606
- // programmatic clear) — it is NOT a fresh user-input event. Mark it
11607
- // `isProgrammatic` so consumers (e.g. auro-combobox) can distinguish
11608
- // it from genuine user typing and skip clobbering their own
11609
- // programmatic state during init-time renders.
11610
- const inputEvent = new Event('input', {
11605
+ let inputEvent = null;
11606
+
11607
+ inputEvent = new Event('input', {
11611
11608
  bubbles: true,
11612
11609
  composed: true,
11613
11610
  });
11614
- inputEvent.isProgrammatic = true;
11615
11611
 
11612
+ // Dispatched event to alert outside shadow DOM context of event firing.
11616
11613
  this.dispatchEvent(inputEvent);
11617
11614
  }
11618
11615
 
@@ -12325,7 +12322,7 @@ let AuroHelpText$8 = class AuroHelpText extends i$2 {
12325
12322
  }
12326
12323
  };
12327
12324
 
12328
- var formkitVersion$8 = '202607022214';
12325
+ var formkitVersion$8 = '202607022134';
12329
12326
 
12330
12327
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
12331
12328
  // See LICENSE in the project root for license information.
@@ -12611,15 +12608,20 @@ let AuroInput$2 = class AuroInput extends BaseInput$2 {
12611
12608
  * @returns {void}
12612
12609
  */
12613
12610
  checkDisplayValueSlotChange() {
12614
- // flatten:true resolves through auro-combobox's forwarding slot
12615
- // (<slot name="displayValue" slot="displayValue">) so a clone appended
12616
- // directly to auro-input's light DOM alongside the forwarder still
12617
- // counts as content. The prior nodes[0].tagName === 'SLOT' recursion
12618
- // discarded any siblings past the forwarder.
12619
- const slot = this.shadowRoot.querySelector('slot[name="displayValue"]');
12620
- const nodes = slot.assignedNodes({ flatten: true });
12611
+ let nodes = this.shadowRoot.querySelector('slot[name="displayValue"]').assignedNodes();
12612
+
12613
+ // Handle when DisplayValue is multi-level slot content (e.g. combobox passing displayValue to input)
12614
+ if (nodes && nodes[0] && nodes[0].tagName === 'SLOT') {
12615
+ nodes = nodes[0].assignedNodes();
12616
+ }
12617
+
12618
+ let hasContent = false;
12619
+
12620
+ if (nodes.length > 0) {
12621
+ hasContent = true;
12622
+ }
12621
12623
 
12622
- this.hasDisplayValueContent = nodes.length > 0;
12624
+ this.hasDisplayValueContent = hasContent;
12623
12625
  }
12624
12626
 
12625
12627
  firstUpdated() {
@@ -24691,23 +24693,28 @@ var popoverVersion = '6.0.1';
24691
24693
  * @returns {number|null} Local-midnight Unix timestamp (seconds), or null.
24692
24694
  */
24693
24695
  function parseIsoToTimestamp(isoStr) {
24696
+ // Strict YYYY-MM-DD matcher with named groups. Rejects trailing garbage
24697
+ // ("2024x-01-01"), short segments ("2024-1-1"), and any non-digit
24698
+ // characters. `parseInt` alone accepted both because it stops at the
24699
+ // first non-digit and doesn't require a minimum length.
24700
+ const ISO_DATE_RE = /^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/u;
24701
+ const MAX_MONTH = 12;
24702
+ const MAX_DAY = 31;
24703
+
24694
24704
  if (typeof isoStr !== 'string') {
24695
24705
  return null;
24696
24706
  }
24697
- const parts = isoStr.split('-');
24698
- if (parts.length !== 3) {
24699
- return null;
24700
- }
24701
- const year = parseInt(parts[0], 10);
24702
- const month = parseInt(parts[1], 10);
24703
- const day = parseInt(parts[2], 10);
24704
- if (!Number.isFinite(year) || !Number.isFinite(month) || !Number.isFinite(day)) {
24707
+ const match = ISO_DATE_RE.exec(isoStr);
24708
+ if (!match) {
24705
24709
  return null;
24706
24710
  }
24711
+ const year = Number(match.groups.year);
24712
+ const month = Number(match.groups.month);
24713
+ const day = Number(match.groups.day);
24707
24714
  // Reject overflow values like "2024-13-40" — JS `new Date(year, month, day)`
24708
24715
  // silently normalizes those to a different calendar day, which would
24709
24716
  // disable the wrong date if we let the result through.
24710
- if (month < 1 || month > 12 || day < 1 || day > 31) {
24717
+ if (month < 1 || month > MAX_MONTH || day < 1 || day > MAX_DAY) {
24711
24718
  return null;
24712
24719
  }
24713
24720
  const date = new Date(year, month - 1, day);
@@ -25285,13 +25292,36 @@ class AuroCalendarCell extends i$2 {
25285
25292
  }
25286
25293
 
25287
25294
  firstUpdated() {
25295
+ this._initFromAncestors();
25296
+ }
25297
+
25298
+ /**
25299
+ * Wires the cell to its ancestor calendar-month and calendar (and, via
25300
+ * the calendar, to the datepicker). Extracted from firstUpdated() so the
25301
+ * retry loop can re-attempt without recursively invoking a Lit lifecycle
25302
+ * method (which is outside the framework's contract).
25303
+ * @private
25304
+ * @returns {void}
25305
+ */
25306
+ _initFromAncestors() {
25288
25307
  const calendarMonth = this.runtimeUtils.closestElement('auro-formkit-calendar-month', this);
25289
25308
  const calendar = this.runtimeUtils.closestElement('auro-formkit-calendar', calendarMonth);
25290
25309
 
25291
25310
  if (!calendar) {
25292
- setTimeout(() => this.firstUpdated(), 0);
25311
+ // Retry on the next event-loop turn to give the ancestor chain a chance
25312
+ // to attach — but cap attempts so a permanently detached cell doesn't
25313
+ // spin forever. 10 turns is far more than any observed race needs.
25314
+ this._firstUpdatedRetries = (this._firstUpdatedRetries || 0) + 1;
25315
+ if (this._firstUpdatedRetries > 10) {
25316
+ return;
25317
+ }
25318
+ this._firstUpdatedRetryTimer = setTimeout(() => {
25319
+ this._firstUpdatedRetryTimer = null;
25320
+ this._initFromAncestors();
25321
+ }, 0);
25293
25322
  return;
25294
25323
  }
25324
+ this._firstUpdatedRetries = 0;
25295
25325
  this.calendar = calendar;
25296
25326
  this.datepicker = calendar.datepicker;
25297
25327
  this._slotContentHandler = () => {
@@ -25319,6 +25349,10 @@ class AuroCalendarCell extends i$2 {
25319
25349
  if (this.datepicker && this._slotContentHandler) {
25320
25350
  this.datepicker.removeEventListener('auroDatePicker-newSlotContent', this._slotContentHandler);
25321
25351
  }
25352
+ if (this._firstUpdatedRetryTimer) {
25353
+ clearTimeout(this._firstUpdatedRetryTimer);
25354
+ this._firstUpdatedRetryTimer = null;
25355
+ }
25322
25356
  }
25323
25357
 
25324
25358
  /**
@@ -26690,7 +26724,7 @@ let AuroBibtemplate$3 = class AuroBibtemplate extends i$2 {
26690
26724
  }
26691
26725
  };
26692
26726
 
26693
- var formkitVersion$2$1 = '202607022214';
26727
+ var formkitVersion$2$1 = '202607022134';
26694
26728
 
26695
26729
  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}
26696
26730
  `,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}}
@@ -26829,7 +26863,10 @@ class AuroCalendar extends RangeDatepicker {
26829
26863
  * Support will be removed in a future major release.
26830
26864
  * @private
26831
26865
  */
26832
- this.disabledDays = [];
26866
+ // Initialize the backing field directly so the constructor's default
26867
+ // empty array doesn't trigger the deprecation warning. Assignments from
26868
+ // consumers still route through the setter below.
26869
+ this._disabledDays = [];
26833
26870
 
26834
26871
  /**
26835
26872
  * @private
@@ -26862,6 +26899,44 @@ class AuroCalendar extends RangeDatepicker {
26862
26899
  this._calendarInstanceId = Date.now().toString(36);
26863
26900
  }
26864
26901
 
26902
+ /**
26903
+ * @deprecated See constructor JSDoc — migrate to
26904
+ * `auro-datepicker.blackoutDates`. The getter/setter pair exists so the
26905
+ * one-time deprecation warning fires as soon as a consumer assigns a
26906
+ * non-empty array (empty assignments are ignored — an empty array is
26907
+ * indistinguishable from the constructor default and would produce a
26908
+ * spurious warning), rather than only when `_getBlackoutSet()` happens
26909
+ * to rebuild.
26910
+ * @returns {Array} The current legacy `disabledDays` array.
26911
+ */
26912
+ get disabledDays() {
26913
+ return this._disabledDays;
26914
+ }
26915
+
26916
+ /**
26917
+ * @param {Array} value - The legacy `disabledDays` array to set.
26918
+ */
26919
+ set disabledDays(value) {
26920
+ const oldValue = this._disabledDays;
26921
+ // Coerce non-arrays to `[]`. Consumers occasionally pass `null`
26922
+ // (Lit's Array attribute converter returns null for a missing/empty
26923
+ // attribute) or misuse the API; downstream code in
26924
+ // `auro-calendar-cell.isEnabled` calls `.findIndex()` on this value
26925
+ // without an Array.isArray guard, so a truthy non-array would throw
26926
+ // at render.
26927
+ const coerced = Array.isArray(value) ? value : [];
26928
+ if (coerced.length > 0) {
26929
+ this._warnDisabledDaysDeprecated();
26930
+ }
26931
+ this._disabledDays = coerced;
26932
+ // `disabledDays` is a Lit `@property({ type: Array })` on the
26933
+ // RangeDatepicker base class; Lit's generated setter (which we've
26934
+ // overridden here to insert the warning) is what normally invalidates
26935
+ // the reactive cycle. Re-invoke requestUpdate manually so consumer
26936
+ // assignments still re-render the calendar.
26937
+ this.requestUpdate('disabledDays', oldValue);
26938
+ }
26939
+
26865
26940
  static get styles() {
26866
26941
  return [
26867
26942
  styleCss$7$1,
@@ -27407,8 +27482,19 @@ class AuroCalendar extends RangeDatepicker {
27407
27482
  /**
27408
27483
  * Returns a memoized Set of blackout timestamps (seconds) drawn from both
27409
27484
  * the legacy `disabledDays` array and the datepicker's ISO `blackoutDates`.
27410
- * The cache invalidates when either source array's reference changes, which
27411
- * matches Lit's own reactive identity semantics for array properties.
27485
+ *
27486
+ * The cache invalidates on **reference identity** only when the
27487
+ * consumer reassigns the array (`el.blackoutDates = [...]`), matching
27488
+ * Lit's own reactivity semantics for array properties. In-place mutations
27489
+ * on the existing array (`push`, `splice`, index assignment) will NOT
27490
+ * invalidate the cache and the new entries will be silently ignored.
27491
+ * Consumers must reassign to update — see the JSDoc on
27492
+ * `auro-datepicker.blackoutDates` for the recommended pattern.
27493
+ *
27494
+ * A shallow-equality tier was considered but rejected: it would run
27495
+ * O(N) work on every cell render (this method is called per-cell via
27496
+ * `isBlackout()`) and still wouldn't catch same-length value swaps,
27497
+ * offering a false sense of safety.
27412
27498
  * @private
27413
27499
  * @returns {Set<Number>}
27414
27500
  */
@@ -27589,7 +27675,24 @@ class AuroCalendar extends RangeDatepicker {
27589
27675
  // rendered month(s) first so a single-month calendar does not pick a date
27590
27676
  // that has no DOM cell. Determine the visible range based on centralDate and
27591
27677
  // the number of rendered months.
27592
- const renderedMonths = Math.max(this.numCalendars, 1);
27678
+ //
27679
+ // numCalendars is assigned inside renderAllCalendars(), which runs during
27680
+ // render() — so by the time the visible-change handler in updated()
27681
+ // calls computeActiveDate() in the same cycle, numCalendars is normally
27682
+ // set. Guard against the pre-first-render path anyway (e.g. any future
27683
+ // caller that reaches computeActiveDate before render() has run):
27684
+ // Math.max(undefined, 1) is NaN, which would silently skip the
27685
+ // visible-month scan below. Fall back to maximumRenderableMonths'
27686
+ // desktop default (1 for non-range, 2 for range) so the scan window is
27687
+ // correctly sized whenever numCalendars is not yet populated.
27688
+ let renderedMonths = null;
27689
+
27690
+ if (Number.isFinite(this.numCalendars) && this.numCalendars > 0) {
27691
+ renderedMonths = this.numCalendars;
27692
+ } else {
27693
+ renderedMonths = this.noRange ? 1 : 2;
27694
+ }
27695
+
27593
27696
  const visibleAnchor = this.centralDateObject ?? new Date(now * 1000);
27594
27697
  const visMonthStart = new Date(visibleAnchor.getFullYear(), visibleAnchor.getMonth(), 1);
27595
27698
  visMonthStart.setHours(0, 0, 0, 0);
@@ -27859,6 +27962,8 @@ class AuroCalendar extends RangeDatepicker {
27859
27962
  let targetIndex = -1;
27860
27963
  if (direction === 'next') {
27861
27964
  targetIndex = currentIndex + 1;
27965
+ } else if (direction === 'prev') {
27966
+ targetIndex = currentIndex - 1;
27862
27967
  }
27863
27968
 
27864
27969
  if (targetIndex >= 0 && targetIndex < allCells.length) {
@@ -28463,6 +28568,10 @@ class AuroCalendar extends RangeDatepicker {
28463
28568
  * originally tried aria-live="polite" here, but VoiceOver treats
28464
28569
  * polite as "wait until idle" — which never happens during active
28465
28570
  * keyboard navigation — so the announcements were silently dropped.
28571
+ *
28572
+ * This is a documented deviation from WCAG 2.1 SC 4.1.3, which
28573
+ * prefers `polite` for status messages. See the "Documented
28574
+ * Deviation" section in components/datepicker/docs/pages/accessibility.md.
28466
28575
  * @private
28467
28576
  * @param {String} dateStr - The localized date string to announce.
28468
28577
  * @returns {void}
@@ -32508,7 +32617,7 @@ let AuroHelpText$2$1 = class AuroHelpText extends i$2 {
32508
32617
  }
32509
32618
  };
32510
32619
 
32511
- var formkitVersion$1$3 = '202607022214';
32620
+ var formkitVersion$1$3 = '202607022134';
32512
32621
 
32513
32622
  let AuroElement$2$2 = class AuroElement extends i$2 {
32514
32623
  static get properties() {
@@ -45390,17 +45499,14 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
45390
45499
  * @returns {void}
45391
45500
  */
45392
45501
  notifyValueChanged() {
45393
- // This echoes Lit's reactive value update (and handleClickClear's
45394
- // programmatic clear) — it is NOT a fresh user-input event. Mark it
45395
- // `isProgrammatic` so consumers (e.g. auro-combobox) can distinguish
45396
- // it from genuine user typing and skip clobbering their own
45397
- // programmatic state during init-time renders.
45398
- const inputEvent = new Event('input', {
45502
+ let inputEvent = null;
45503
+
45504
+ inputEvent = new Event('input', {
45399
45505
  bubbles: true,
45400
45506
  composed: true,
45401
45507
  });
45402
- inputEvent.isProgrammatic = true;
45403
45508
 
45509
+ // Dispatched event to alert outside shadow DOM context of event firing.
45404
45510
  this.dispatchEvent(inputEvent);
45405
45511
  }
45406
45512
 
@@ -46113,7 +46219,7 @@ let AuroHelpText$1$3 = class AuroHelpText extends i$2 {
46113
46219
  }
46114
46220
  };
46115
46221
 
46116
- var formkitVersion$7 = '202607022214';
46222
+ var formkitVersion$7 = '202607022134';
46117
46223
 
46118
46224
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
46119
46225
  // See LICENSE in the project root for license information.
@@ -46399,15 +46505,20 @@ let AuroInput$1 = class AuroInput extends BaseInput$1 {
46399
46505
  * @returns {void}
46400
46506
  */
46401
46507
  checkDisplayValueSlotChange() {
46402
- // flatten:true resolves through auro-combobox's forwarding slot
46403
- // (<slot name="displayValue" slot="displayValue">) so a clone appended
46404
- // directly to auro-input's light DOM alongside the forwarder still
46405
- // counts as content. The prior nodes[0].tagName === 'SLOT' recursion
46406
- // discarded any siblings past the forwarder.
46407
- const slot = this.shadowRoot.querySelector('slot[name="displayValue"]');
46408
- const nodes = slot.assignedNodes({ flatten: true });
46508
+ let nodes = this.shadowRoot.querySelector('slot[name="displayValue"]').assignedNodes();
46509
+
46510
+ // Handle when DisplayValue is multi-level slot content (e.g. combobox passing displayValue to input)
46511
+ if (nodes && nodes[0] && nodes[0].tagName === 'SLOT') {
46512
+ nodes = nodes[0].assignedNodes();
46513
+ }
46409
46514
 
46410
- this.hasDisplayValueContent = nodes.length > 0;
46515
+ let hasContent = false;
46516
+
46517
+ if (nodes.length > 0) {
46518
+ hasContent = true;
46519
+ }
46520
+
46521
+ this.hasDisplayValueContent = hasContent;
46411
46522
  }
46412
46523
 
46413
46524
  firstUpdated() {
@@ -47485,6 +47596,15 @@ const datepickerKeyboardStrategy = {
47485
47596
  evt.stopPropagation();
47486
47597
  evt.preventDefault();
47487
47598
 
47599
+ // Signal to the visibility-change handler in auro-datepicker.js that
47600
+ // focus should be restored to the trigger regardless of hasFocus.
47601
+ // hidePopover() (desktop non-modal path) does not auto-restore focus,
47602
+ // and hiding the grid's popover ancestor drops focus to <body>. That
47603
+ // synchronously fires focusout on the datepicker host — clearing
47604
+ // hasFocus — before updated() runs, which would otherwise skip the
47605
+ // input refocus. Native <dialog>.close() (modal path) restores focus
47606
+ // itself, but the flag is harmless there.
47607
+ component._restoreFocusOnClose = true;
47488
47608
  component.hideBib();
47489
47609
  },
47490
47610
 
@@ -47758,6 +47878,14 @@ class AuroDatePicker extends AuroElement$5 {
47758
47878
 
47759
47879
  /**
47760
47880
  * Array of dates that cannot be selected. Dates should be in ISO format (YYYY-MM-DD).
47881
+ *
47882
+ * **Immutable update required.** The datepicker treats this array as
47883
+ * immutable and memoizes a lookup Set keyed on the array's reference
47884
+ * identity — matching Lit's own reactivity semantics for array
47885
+ * properties. In-place mutations (`blackoutDates.push(...)`,
47886
+ * `blackoutDates[i] = ...`, `blackoutDates.splice(...)`) will not
47887
+ * invalidate the cache and the new entries will be silently ignored.
47888
+ * To update, reassign the property: `el.blackoutDates = [...el.blackoutDates, '2024-12-25']`.
47761
47889
  */
47762
47890
  blackoutDates: {
47763
47891
  type: Array,
@@ -48643,12 +48771,13 @@ class AuroDatePicker extends AuroElement$5 {
48643
48771
  this.calendar.activeCellDate = null;
48644
48772
 
48645
48773
  // Show the month containing the selected date (or today) instead of
48646
- // whichever month the user last navigated to.
48774
+ // whichever month the user last navigated to. Route through
48775
+ // updateCentralDate so centralDate stays first-of-month.
48647
48776
  // Respect consumer-provided centralDate/calendarStartDate if no value is set.
48648
48777
  if (this.valueObject) {
48649
- this.centralDate = this.value;
48778
+ this.calendarRenderUtil.updateCentralDate(this, this.value);
48650
48779
  } else if (!this.centralDate && !this.calendarStartDate && !this.minDate) {
48651
- this.centralDate = dateFormatter$1.toISOFormatString(new Date());
48780
+ this.calendarRenderUtil.updateCentralDate(this, new Date());
48652
48781
  }
48653
48782
  }
48654
48783
 
@@ -48706,8 +48835,15 @@ class AuroDatePicker extends AuroElement$5 {
48706
48835
  // Always clear the inert flag. Only restore focus to the input when the datepicker
48707
48836
  // still has focus (e.g. Escape, date selected) — not when the user tabbed away,
48708
48837
  // which would pull them back and require extra Tab presses to escape.
48838
+ //
48839
+ // `_restoreFocusOnClose` is set by the Escape handler in
48840
+ // datepickerKeyboardStrategy.js to force restore even when hasFocus
48841
+ // has already been cleared — hidePopover() (desktop non-modal path)
48842
+ // can drop focus to <body> before this update fires.
48709
48843
  this.dropdown.trigger.inert = false;
48710
- if (this.hasFocus) {
48844
+ const shouldRestoreFocus = this.hasFocus || this._restoreFocusOnClose;
48845
+ this._restoreFocusOnClose = false;
48846
+ if (shouldRestoreFocus) {
48711
48847
  requestAnimationFrame(() => {
48712
48848
  if (!this.dropdown.isPopoverVisible) {
48713
48849
  this.inputList[0].focus();
@@ -49153,6 +49289,18 @@ class AuroDatePicker extends AuroElement$5 {
49153
49289
  this.calendar.requestUpdate();
49154
49290
  this.dispatchEvent(new CustomEvent('auroDatePicker-newSlotContent'));
49155
49291
  }
49292
+
49293
+ // Range invariant: if a value change (from click or programmatic) has
49294
+ // moved start past end, clear valueEnd here so both properties land in
49295
+ // the SAME reactive cycle. Doing it in updated() would schedule a
49296
+ // second cycle after cellClickActive/wasCellClick has already been
49297
+ // consumed by the value branch, leaving the valueEnd branch to run
49298
+ // with a stale handshake and racing with any intervening programmatic
49299
+ // value assignments.
49300
+ if ((changedProperties.has('value') || changedProperties.has('valueEnd')) &&
49301
+ this.valueObject && this.valueEndObject && this.valueObject > this.valueEndObject) {
49302
+ this.valueEnd = undefined;
49303
+ }
49156
49304
  }
49157
49305
 
49158
49306
  updated(changedProperties) {
@@ -49220,8 +49368,12 @@ class AuroDatePicker extends AuroElement$5 {
49220
49368
 
49221
49369
  if (this.value && this.value.length === this.inputList[0].lengthForType && !(this.wasCellClick && this.range)) {
49222
49370
  // Skip centralDate update when user clicked a cell in range mode
49223
- // to prevent the displayed months from shifting
49224
- this.centralDate = this.value;
49371
+ // to prevent the displayed months from shifting. Route through
49372
+ // updateCentralDate so centralDate stays first-of-month — direct
49373
+ // assignment of the raw value briefly holds a mid-month string
49374
+ // and violates the invariant that observers (e.g. calendar sync)
49375
+ // rely on.
49376
+ this.calendarRenderUtil.updateCentralDate(this, this.value);
49225
49377
  }
49226
49378
 
49227
49379
  this.setHasValue();
@@ -49279,8 +49431,10 @@ class AuroDatePicker extends AuroElement$5 {
49279
49431
 
49280
49432
  if (this.valueEnd && this.valueEnd.length === this.inputList[1].lengthForType && !this.wasCellClick) {
49281
49433
  // Skip centralDate update when user clicked a cell in range mode
49282
- // to prevent the displayed months from shifting
49283
- this.centralDate = this.valueEnd;
49434
+ // to prevent the displayed months from shifting. Route through
49435
+ // updateCentralDate to preserve the first-of-month invariant
49436
+ // (see matching comment in the value branch above).
49437
+ this.calendarRenderUtil.updateCentralDate(this, this.valueEnd);
49284
49438
  }
49285
49439
 
49286
49440
  this.validate();
@@ -49304,10 +49458,6 @@ class AuroDatePicker extends AuroElement$5 {
49304
49458
  this.validation.validate(lastInput, true);
49305
49459
  }
49306
49460
 
49307
- if (this.valueObject && this.valueEndObject && this.valueObject > this.valueEndObject) {
49308
- this.valueEnd = undefined;
49309
- }
49310
-
49311
49461
  // This resets the datepicker when the minDate is set to a new value that is
49312
49462
  // a later date than the current value date
49313
49463
  if (changedProperties.has('minDate') && this.minDate) {
@@ -50990,7 +51140,7 @@ let AuroHelpText$1$2 = class AuroHelpText extends i$2 {
50990
51140
  }
50991
51141
  };
50992
51142
 
50993
- var formkitVersion$1$2 = '202607022214';
51143
+ var formkitVersion$1$2 = '202607022134';
50994
51144
 
50995
51145
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
50996
51146
  // See LICENSE in the project root for license information.
@@ -55318,7 +55468,7 @@ let AuroHelpText$6 = class AuroHelpText extends i$2 {
55318
55468
  }
55319
55469
  };
55320
55470
 
55321
- var formkitVersion$6 = '202607022214';
55471
+ var formkitVersion$6 = '202607022134';
55322
55472
 
55323
55473
  let AuroElement$1$2 = class AuroElement extends i$2 {
55324
55474
  static get properties() {
@@ -59298,7 +59448,7 @@ let AuroHelpText$5 = class AuroHelpText extends i$2 {
59298
59448
  }
59299
59449
  };
59300
59450
 
59301
- var formkitVersion$5 = '202607022214';
59451
+ var formkitVersion$5 = '202607022134';
59302
59452
 
59303
59453
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
59304
59454
  // See LICENSE in the project root for license information.
@@ -61063,7 +61213,7 @@ let AuroHelpText$4 = class AuroHelpText extends i$2 {
61063
61213
  }
61064
61214
  };
61065
61215
 
61066
- var formkitVersion$4 = '202607022214';
61216
+ var formkitVersion$4 = '202607022134';
61067
61217
 
61068
61218
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
61069
61219
  // See LICENSE in the project root for license information.
@@ -66284,7 +66434,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$2 {
66284
66434
  }
66285
66435
  };
66286
66436
 
66287
- var formkitVersion$2 = '202607022214';
66437
+ var formkitVersion$2 = '202607022134';
66288
66438
 
66289
66439
  let AuroElement$2$1 = class AuroElement extends i$2 {
66290
66440
  static get properties() {
@@ -79166,17 +79316,14 @@ class BaseInput extends AuroElement$1$1 {
79166
79316
  * @returns {void}
79167
79317
  */
79168
79318
  notifyValueChanged() {
79169
- // This echoes Lit's reactive value update (and handleClickClear's
79170
- // programmatic clear) — it is NOT a fresh user-input event. Mark it
79171
- // `isProgrammatic` so consumers (e.g. auro-combobox) can distinguish
79172
- // it from genuine user typing and skip clobbering their own
79173
- // programmatic state during init-time renders.
79174
- const inputEvent = new Event('input', {
79319
+ let inputEvent = null;
79320
+
79321
+ inputEvent = new Event('input', {
79175
79322
  bubbles: true,
79176
79323
  composed: true,
79177
79324
  });
79178
- inputEvent.isProgrammatic = true;
79179
79325
 
79326
+ // Dispatched event to alert outside shadow DOM context of event firing.
79180
79327
  this.dispatchEvent(inputEvent);
79181
79328
  }
79182
79329
 
@@ -79889,7 +80036,7 @@ let AuroHelpText$1$1 = class AuroHelpText extends i$2 {
79889
80036
  }
79890
80037
  };
79891
80038
 
79892
- var formkitVersion$1$1 = '202607022214';
80039
+ var formkitVersion$1$1 = '202607022134';
79893
80040
 
79894
80041
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
79895
80042
  // See LICENSE in the project root for license information.
@@ -80175,15 +80322,20 @@ class AuroInput extends BaseInput {
80175
80322
  * @returns {void}
80176
80323
  */
80177
80324
  checkDisplayValueSlotChange() {
80178
- // flatten:true resolves through auro-combobox's forwarding slot
80179
- // (<slot name="displayValue" slot="displayValue">) so a clone appended
80180
- // directly to auro-input's light DOM alongside the forwarder still
80181
- // counts as content. The prior nodes[0].tagName === 'SLOT' recursion
80182
- // discarded any siblings past the forwarder.
80183
- const slot = this.shadowRoot.querySelector('slot[name="displayValue"]');
80184
- const nodes = slot.assignedNodes({ flatten: true });
80325
+ let nodes = this.shadowRoot.querySelector('slot[name="displayValue"]').assignedNodes();
80326
+
80327
+ // Handle when DisplayValue is multi-level slot content (e.g. combobox passing displayValue to input)
80328
+ if (nodes && nodes[0] && nodes[0].tagName === 'SLOT') {
80329
+ nodes = nodes[0].assignedNodes();
80330
+ }
80331
+
80332
+ let hasContent = false;
80333
+
80334
+ if (nodes.length > 0) {
80335
+ hasContent = true;
80336
+ }
80185
80337
 
80186
- this.hasDisplayValueContent = nodes.length > 0;
80338
+ this.hasDisplayValueContent = hasContent;
80187
80339
  }
80188
80340
 
80189
80341
  firstUpdated() {
@@ -81010,7 +81162,7 @@ let AuroBibtemplate$1 = class AuroBibtemplate extends i$2 {
81010
81162
  }
81011
81163
  };
81012
81164
 
81013
- var formkitVersion$3 = '202607022214';
81165
+ var formkitVersion$3 = '202607022134';
81014
81166
 
81015
81167
  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}`;
81016
81168
 
@@ -82109,19 +82261,9 @@ class AuroCombobox extends AuroElement$3 {
82109
82261
  /**
82110
82262
  * Processes hidden state of all menu options and determines if there are any available options not hidden.
82111
82263
  * @private
82112
- * @param {object} [options={}] - Optional flag bag.
82113
- * @param {boolean} [options.preferComboboxValue=false] - When true,
82114
- * handleMenuOptions matches the selected option against `this.value`
82115
- * first instead of `this.input.value`. Needed on mount and re-mount
82116
- * because under `persistInput` the consumer's typedValue prop can drift
82117
- * from the framework value (Svelte `{#key}` re-mount after a swap, or
82118
- * SPA preselect after route change) and the old input-first match would
82119
- * then pick the stale text. Only handleSlotChange passes this; typing
82120
- * and clearing paths keep the input-first match so user clears aren't
82121
- * undone.
82122
82264
  * @returns {void}
82123
82265
  */
82124
- handleMenuOptions({ preferComboboxValue = false } = {}) {
82266
+ handleMenuOptions() {
82125
82267
  this.generateOptionsArray();
82126
82268
  this.availableOptions = [];
82127
82269
  // Single source of truth for the menu's filter/highlight token per call.
@@ -82142,20 +82284,7 @@ class AuroCombobox extends AuroElement$3 {
82142
82284
  option.setAttribute('aria-posinset', index + 1);
82143
82285
  });
82144
82286
 
82145
- // On mount/re-mount (via handleSlotChange), prefer the framework-set
82146
- // `this.value` when it matches a menu option. Covers SPA preselect and
82147
- // consumer swap patterns (e.g. Svelte `{#key}` re-mount) where
82148
- // `this.value` is authoritative but `this.input.value` may be empty or
82149
- // carry stale typed text from another field. Event-driven callers do
82150
- // not pass the flag, otherwise user clears would be undone by
82151
- // re-syncing to the previous combobox.value.
82152
- if (preferComboboxValue &&
82153
- this.value &&
82154
- this.menu.options?.some((opt) => opt.value === this.value)) {
82155
- this.setMenuValue(this.value);
82156
- this.syncValuesAndStates();
82157
- } else if (this.input.value &&
82158
- this.menu.options?.some((opt) => opt.value === this.input.value)) {
82287
+ if (this.input.value && this.menu.options && this.menu.options.some((opt) => opt.value === this.input.value)) {
82159
82288
  this.setMenuValue(this.input.value);
82160
82289
  this.syncValuesAndStates();
82161
82290
  }
@@ -82592,25 +82721,7 @@ class AuroCombobox extends AuroElement$3 {
82592
82721
  this.optionActive = evt.detail;
82593
82722
 
82594
82723
  if (this.input) {
82595
- // setActiveDescendant runs after Lit's update finishes because the
82596
- // template's `.a11yActivedescendant` binding calls setAttribute on
82597
- // the internal <input> in auro-input.updated(), which clears the
82598
- // reflected ariaActiveDescendantElement property. Setting the ref
82599
- // synchronously here would get overwritten by that attribute write.
82600
- // Awaiting updateComplete lets the attribute write finish first,
82601
- // then the ref sticks and screen readers can cross the shadow-DOM
82602
- // boundary to the auro-menuoption in light DOM.
82603
- //
82604
- // The equality check covers the async gap: this.optionActive can
82605
- // change before the callback runs (user arrowed elsewhere, or the
82606
- // menu closed and cleared it to null), so we bail if the target
82607
- // no longer matches to avoid reinstating a stale ref.
82608
- const targetOption = this.optionActive;
82609
- this.updateComplete.then(() => {
82610
- if (this.input && this.optionActive === targetOption) {
82611
- this.input.setActiveDescendant(targetOption);
82612
- }
82613
- });
82724
+ this.input.setActiveDescendant(this.optionActive);
82614
82725
  }
82615
82726
 
82616
82727
  // In fullscreen mode the menu sits inside a nested <dialog> shadow root,
@@ -82747,18 +82858,6 @@ class AuroCombobox extends AuroElement$3 {
82747
82858
  }
82748
82859
  }
82749
82860
 
82750
- // SPA preselect guard: on init render, auro-input's notifyValueChanged
82751
- // echoes an empty value through as an isProgrammatic input event before
82752
- // the framework-set combobox.value has propagated down to the input.
82753
- // Without this bail, the `this.value = this.input.value` below clobbers
82754
- // the framework value with '' and clear() wipes optionSelected. Scoped
82755
- // to the exact shape of that echo (isProgrammatic + non-empty combobox
82756
- // value + empty input.value) so it doesn't affect the swap/typed paths
82757
- // where value/input already track each other through the sync helpers.
82758
- if (event && event.isProgrammatic && this.value && !this.input.value) {
82759
- return;
82760
- }
82761
-
82762
82861
  this.value = this.input.value;
82763
82862
 
82764
82863
  // Ignore re-entrant input events caused by programmatic value sets.
@@ -83191,11 +83290,7 @@ class AuroCombobox extends AuroElement$3 {
83191
83290
  }
83192
83291
  });
83193
83292
 
83194
- // Slot change (mount/re-mount): pass `preferComboboxValue` so that a
83195
- // framework-set `this.value` wins over any stale `input.value` when
83196
- // matching against the newly-available options. Fixes the display
83197
- // for SPA preselect and Svelte `{#key}` re-mount swap patterns.
83198
- this.handleMenuOptions({ preferComboboxValue: true });
83293
+ this.handleMenuOptions();
83199
83294
 
83200
83295
  break;
83201
83296
 
@@ -85844,6 +85939,9 @@ function navigateArrow(component, direction, options = {}) {
85844
85939
  * @param {HTMLElement | null | undefined} menu - The auro-menu element.
85845
85940
  * @returns {Array<HTMLElement>} Non-disabled options, empty array when none.
85846
85941
  */
85942
+ function getEnabledOptions(menu) {
85943
+ return (menu?.options || []).filter((option) => !option.disabled);
85944
+ }
85847
85945
 
85848
85946
  /**
85849
85947
  * Returns the active (selectable + visible) options for type-ahead navigation.
@@ -85913,10 +86011,8 @@ const selectKeyboardStrategy = {
85913
86011
  End(component, evt, ctx) {
85914
86012
  evt.preventDefault();
85915
86013
  evt.stopPropagation();
85916
- // `pop()` is safe here: getActiveOptions returns a fresh filtered array.
85917
- // Uses "active" (not "enabled") so hidden and static rows — which a screen
85918
- // reader must not announce as focused — are skipped.
85919
- const lastOption = getActiveOptions(component.menu).pop();
86014
+ // `pop()` is safe here: getEnabledOptions returns a fresh filtered array.
86015
+ const lastOption = getEnabledOptions(component.menu).pop();
85920
86016
  if (!lastOption) {
85921
86017
  return;
85922
86018
  }
@@ -85947,7 +86043,7 @@ const selectKeyboardStrategy = {
85947
86043
  Home(component, evt, ctx) {
85948
86044
  evt.preventDefault();
85949
86045
  evt.stopPropagation();
85950
- const [firstOption] = getActiveOptions(component.menu);
86046
+ const [firstOption] = getEnabledOptions(component.menu);
85951
86047
  if (!firstOption) {
85952
86048
  return;
85953
86049
  }
@@ -85972,15 +86068,6 @@ const selectKeyboardStrategy = {
85972
86068
  },
85973
86069
 
85974
86070
  default(component, evt, ctx) {
85975
- // Ignore keys chorded with Ctrl/Meta/Alt so browser/OS shortcuts
85976
- // (Cmd+C, Ctrl+V, Alt+X, Cmd+Space, …) don't leak into typeahead
85977
- // or toggle the bib. Native <select> ignores modified keys.
85978
- // ArrowUp/ArrowDown handle modifier+arrow explicitly above; this
85979
- // guard only affects the default (printable/Space) branch.
85980
- if (evt.ctrlKey || evt.metaKey || evt.altKey) {
85981
- return;
85982
- }
85983
-
85984
86071
  // Space resolves to either typeahead-buffer extension or bib toggle
85985
86072
  // depending on whether a type-ahead buffer is active. Mirrors native
85986
86073
  // <select> and the WAI-ARIA APG Listbox guidance: mid-typeahead space
@@ -89911,7 +89998,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
89911
89998
  }
89912
89999
  };
89913
90000
 
89914
- var formkitVersion$1 = '202607022214';
90001
+ var formkitVersion$1 = '202607022134';
89915
90002
 
89916
90003
  class AuroElement extends i$2 {
89917
90004
  static get properties() {
@@ -91950,7 +92037,7 @@ class AuroHelpText extends i$2 {
91950
92037
  }
91951
92038
  }
91952
92039
 
91953
- var formkitVersion = '202607022214';
92040
+ var formkitVersion = '202607022134';
91954
92041
 
91955
92042
  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}`;
91956
92043
 
@@ -92514,11 +92601,8 @@ class AuroSelect extends AuroElement$1 {
92514
92601
  } else if (this.multiSelect && Array.isArray(this.optionSelected) && this.optionSelected.length > 0) {
92515
92602
  this.menu.updateActiveOption(this.optionSelected[0]);
92516
92603
  } else {
92517
- // If no activeOption has yet to be set, make the first active option
92518
- // (non-disabled, non-hidden, non-static) active by default. "Active" —
92519
- // not just "enabled" — so hidden rows and static placeholders never
92520
- // land in aria-activedescendant on open.
92521
- const [firstActive] = getActiveOptions(this.menu);
92604
+ // If no activeOption has yet to be set, then make the first enabled option active by default
92605
+ const [firstActive] = getEnabledOptions(this.menu);
92522
92606
  this.menu.updateActiveOption(firstActive);
92523
92607
  }
92524
92608
  }
@@ -92764,12 +92848,6 @@ class AuroSelect extends AuroElement$1 {
92764
92848
 
92765
92849
  /**
92766
92850
  * Binds all behavior needed to the menu after rendering.
92767
- *
92768
- * The `<auro-menu>` reference is captured once and not re-targeted on
92769
- * `slotchange`. Runtime option mutations are covered via
92770
- * `auroMenu-optionsChange`, so swap options inside the menu freely; do not
92771
- * swap the `<auro-menu>` element itself under a live select — remount the
92772
- * parent `<auro-select>` instead.
92773
92851
  * @private
92774
92852
  * @returns {void}
92775
92853
  */
@@ -92828,15 +92906,6 @@ class AuroSelect extends AuroElement$1 {
92828
92906
  if (this.menu.optionSelected !== undefined) {
92829
92907
  return;
92830
92908
  }
92831
- // Skip when the select is already cleared (valueless click with no
92832
- // prior selection): value/optionSelected are already empty and there
92833
- // is no stale trigger text to refresh, so updateDisplayedValue would
92834
- // just churn the DOM and request a needless dropdown re-render.
92835
- const hasStaleState = this.value !== undefined ||
92836
- (this.multiSelect ? this.optionSelected?.length > 0 : this.optionSelected !== undefined);
92837
- if (!hasStaleState) {
92838
- return;
92839
- }
92840
92909
  this.value = undefined;
92841
92910
  this.optionSelected = this.multiSelect ? [] : undefined;
92842
92911
  // The trigger label is rendered imperatively into #value, so a property
@@ -92866,15 +92935,10 @@ class AuroSelect extends AuroElement$1 {
92866
92935
  if (this.dropdown.isPopoverVisible) {
92867
92936
  announceToScreenReader(this._getAnnouncementRoot(), message);
92868
92937
  } else {
92869
- // Typeahead-on-closed calls updateActiveOption() before show(), so
92870
- // this handler runs with isPopoverVisible still false. queueMicrotask
92871
- // is safe because show() showBib() flips isPopoverVisible and
92872
- // dialog.showModal() both run synchronously in the same task; the
92873
- // microtask queue only drains once _handleTypeahead unwinds, by
92874
- // which point _getAnnouncementRoot() resolves to the bib's shadow
92875
- // root inside the now-open modal. Do NOT switch to auroDropdown-toggled
92876
- // — it fires before showModal(), landing the announcement in the
92877
- // host root while the dialog is still not-yet-modal.
92938
+ // Typeahead-on-closed fires this event before `show()` flips
92939
+ // isPopoverVisible. Defer so the announcement targets the bib's
92940
+ // live region once the fullscreen <dialog> opens otherwise it
92941
+ // lands in the host root, which is inert under the active modal.
92878
92942
  queueMicrotask(() => announceToScreenReader(this._getAnnouncementRoot(), message));
92879
92943
  }
92880
92944
  }
@@ -93268,13 +93332,6 @@ class AuroSelect extends AuroElement$1 {
93268
93332
  }
93269
93333
 
93270
93334
  if (changedProperties.has('value')) {
93271
- // A value change ends the current interaction — whether it came from a
93272
- // user commit, programmatic assignment, or reset(). Clear the buffer so
93273
- // a stale prefix does not concatenate onto the next keystroke while the
93274
- // host still has focus (the blur listener would otherwise be the only
93275
- // focus-retained clear point, and hideBib() below does not blur).
93276
- this._clearTypeaheadBuffer();
93277
-
93278
93335
  this.setMenuValue(this.value);
93279
93336
 
93280
93337
  this._updateNativeSelect();
@@ -93330,9 +93387,6 @@ class AuroSelect extends AuroElement$1 {
93330
93387
  * @returns {void}
93331
93388
  */
93332
93389
  reset() {
93333
- // Defense-in-depth: updated()'s value-change branch also clears, but
93334
- // reset-to-same-value (e.g. undefined → undefined) skips that path.
93335
- this._clearTypeaheadBuffer();
93336
93390
  this.menu.reset();
93337
93391
  this.validation.reset(this);
93338
93392
  }
@@ -93355,13 +93409,8 @@ class AuroSelect extends AuroElement$1 {
93355
93409
  // Hidden native <select> has no `multiple` attribute, so any change it fires
93356
93410
  // is a single raw value — applying it in multiSelect mode would collapse the
93357
93411
  // JSON-array `value` shape. Bfcache/autofill can reach this on a name-bearing
93358
- // form control even with aria-hidden/tabindex=-1, so revert to the expected
93359
- // mirror (formattedValue[0]) rather than letting the native select drift and
93360
- // silently submit the autofilled scalar under `name`.
93361
- if (this.multiSelect) {
93362
- this._updateNativeSelect();
93363
- return;
93364
- }
93412
+ // form control even with aria-hidden/tabindex=-1.
93413
+ if (this.multiSelect) return;
93365
93414
 
93366
93415
  const selectedOption = event.target.options[event.target.selectedIndex];
93367
93416
  if (!selectedOption) return;