@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
@@ -12643,17 +12643,14 @@ let BaseInput$2 = class BaseInput extends AuroElement$6 {
12643
12643
  * @returns {void}
12644
12644
  */
12645
12645
  notifyValueChanged() {
12646
- // This echoes Lit's reactive value update (and handleClickClear's
12647
- // programmatic clear) — it is NOT a fresh user-input event. Mark it
12648
- // `isProgrammatic` so consumers (e.g. auro-combobox) can distinguish
12649
- // it from genuine user typing and skip clobbering their own
12650
- // programmatic state during init-time renders.
12651
- const inputEvent = new Event('input', {
12646
+ let inputEvent = null;
12647
+
12648
+ inputEvent = new Event('input', {
12652
12649
  bubbles: true,
12653
12650
  composed: true,
12654
12651
  });
12655
- inputEvent.isProgrammatic = true;
12656
12652
 
12653
+ // Dispatched event to alert outside shadow DOM context of event firing.
12657
12654
  this.dispatchEvent(inputEvent);
12658
12655
  }
12659
12656
 
@@ -13366,7 +13363,7 @@ let AuroHelpText$8 = class AuroHelpText extends i$3 {
13366
13363
  }
13367
13364
  };
13368
13365
 
13369
- var formkitVersion$8 = '202607022214';
13366
+ var formkitVersion$8 = '202607022134';
13370
13367
 
13371
13368
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
13372
13369
  // See LICENSE in the project root for license information.
@@ -13652,15 +13649,20 @@ let AuroInput$2 = class AuroInput extends BaseInput$2 {
13652
13649
  * @returns {void}
13653
13650
  */
13654
13651
  checkDisplayValueSlotChange() {
13655
- // flatten:true resolves through auro-combobox's forwarding slot
13656
- // (<slot name="displayValue" slot="displayValue">) so a clone appended
13657
- // directly to auro-input's light DOM alongside the forwarder still
13658
- // counts as content. The prior nodes[0].tagName === 'SLOT' recursion
13659
- // discarded any siblings past the forwarder.
13660
- const slot = this.shadowRoot.querySelector('slot[name="displayValue"]');
13661
- const nodes = slot.assignedNodes({ flatten: true });
13652
+ let nodes = this.shadowRoot.querySelector('slot[name="displayValue"]').assignedNodes();
13653
+
13654
+ // Handle when DisplayValue is multi-level slot content (e.g. combobox passing displayValue to input)
13655
+ if (nodes && nodes[0] && nodes[0].tagName === 'SLOT') {
13656
+ nodes = nodes[0].assignedNodes();
13657
+ }
13658
+
13659
+ let hasContent = false;
13660
+
13661
+ if (nodes.length > 0) {
13662
+ hasContent = true;
13663
+ }
13662
13664
 
13663
- this.hasDisplayValueContent = nodes.length > 0;
13665
+ this.hasDisplayValueContent = hasContent;
13664
13666
  }
13665
13667
 
13666
13668
  firstUpdated() {
@@ -25732,23 +25734,28 @@ var popoverVersion = '6.0.1';
25732
25734
  * @returns {number|null} Local-midnight Unix timestamp (seconds), or null.
25733
25735
  */
25734
25736
  function parseIsoToTimestamp(isoStr) {
25737
+ // Strict YYYY-MM-DD matcher with named groups. Rejects trailing garbage
25738
+ // ("2024x-01-01"), short segments ("2024-1-1"), and any non-digit
25739
+ // characters. `parseInt` alone accepted both because it stops at the
25740
+ // first non-digit and doesn't require a minimum length.
25741
+ const ISO_DATE_RE = /^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/u;
25742
+ const MAX_MONTH = 12;
25743
+ const MAX_DAY = 31;
25744
+
25735
25745
  if (typeof isoStr !== 'string') {
25736
25746
  return null;
25737
25747
  }
25738
- const parts = isoStr.split('-');
25739
- if (parts.length !== 3) {
25740
- return null;
25741
- }
25742
- const year = parseInt(parts[0], 10);
25743
- const month = parseInt(parts[1], 10);
25744
- const day = parseInt(parts[2], 10);
25745
- if (!Number.isFinite(year) || !Number.isFinite(month) || !Number.isFinite(day)) {
25748
+ const match = ISO_DATE_RE.exec(isoStr);
25749
+ if (!match) {
25746
25750
  return null;
25747
25751
  }
25752
+ const year = Number(match.groups.year);
25753
+ const month = Number(match.groups.month);
25754
+ const day = Number(match.groups.day);
25748
25755
  // Reject overflow values like "2024-13-40" — JS `new Date(year, month, day)`
25749
25756
  // silently normalizes those to a different calendar day, which would
25750
25757
  // disable the wrong date if we let the result through.
25751
- if (month < 1 || month > 12 || day < 1 || day > 31) {
25758
+ if (month < 1 || month > MAX_MONTH || day < 1 || day > MAX_DAY) {
25752
25759
  return null;
25753
25760
  }
25754
25761
  const date = new Date(year, month - 1, day);
@@ -26326,13 +26333,36 @@ class AuroCalendarCell extends i$3 {
26326
26333
  }
26327
26334
 
26328
26335
  firstUpdated() {
26336
+ this._initFromAncestors();
26337
+ }
26338
+
26339
+ /**
26340
+ * Wires the cell to its ancestor calendar-month and calendar (and, via
26341
+ * the calendar, to the datepicker). Extracted from firstUpdated() so the
26342
+ * retry loop can re-attempt without recursively invoking a Lit lifecycle
26343
+ * method (which is outside the framework's contract).
26344
+ * @private
26345
+ * @returns {void}
26346
+ */
26347
+ _initFromAncestors() {
26329
26348
  const calendarMonth = this.runtimeUtils.closestElement('auro-formkit-calendar-month', this);
26330
26349
  const calendar = this.runtimeUtils.closestElement('auro-formkit-calendar', calendarMonth);
26331
26350
 
26332
26351
  if (!calendar) {
26333
- setTimeout(() => this.firstUpdated(), 0);
26352
+ // Retry on the next event-loop turn to give the ancestor chain a chance
26353
+ // to attach — but cap attempts so a permanently detached cell doesn't
26354
+ // spin forever. 10 turns is far more than any observed race needs.
26355
+ this._firstUpdatedRetries = (this._firstUpdatedRetries || 0) + 1;
26356
+ if (this._firstUpdatedRetries > 10) {
26357
+ return;
26358
+ }
26359
+ this._firstUpdatedRetryTimer = setTimeout(() => {
26360
+ this._firstUpdatedRetryTimer = null;
26361
+ this._initFromAncestors();
26362
+ }, 0);
26334
26363
  return;
26335
26364
  }
26365
+ this._firstUpdatedRetries = 0;
26336
26366
  this.calendar = calendar;
26337
26367
  this.datepicker = calendar.datepicker;
26338
26368
  this._slotContentHandler = () => {
@@ -26360,6 +26390,10 @@ class AuroCalendarCell extends i$3 {
26360
26390
  if (this.datepicker && this._slotContentHandler) {
26361
26391
  this.datepicker.removeEventListener('auroDatePicker-newSlotContent', this._slotContentHandler);
26362
26392
  }
26393
+ if (this._firstUpdatedRetryTimer) {
26394
+ clearTimeout(this._firstUpdatedRetryTimer);
26395
+ this._firstUpdatedRetryTimer = null;
26396
+ }
26363
26397
  }
26364
26398
 
26365
26399
  /**
@@ -27731,7 +27765,7 @@ let AuroBibtemplate$3 = class AuroBibtemplate extends i$3 {
27731
27765
  }
27732
27766
  };
27733
27767
 
27734
- var formkitVersion$2$1 = '202607022214';
27768
+ var formkitVersion$2$1 = '202607022134';
27735
27769
 
27736
27770
  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}
27737
27771
  `,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}}
@@ -27870,7 +27904,10 @@ class AuroCalendar extends RangeDatepicker {
27870
27904
  * Support will be removed in a future major release.
27871
27905
  * @private
27872
27906
  */
27873
- this.disabledDays = [];
27907
+ // Initialize the backing field directly so the constructor's default
27908
+ // empty array doesn't trigger the deprecation warning. Assignments from
27909
+ // consumers still route through the setter below.
27910
+ this._disabledDays = [];
27874
27911
 
27875
27912
  /**
27876
27913
  * @private
@@ -27903,6 +27940,44 @@ class AuroCalendar extends RangeDatepicker {
27903
27940
  this._calendarInstanceId = Date.now().toString(36);
27904
27941
  }
27905
27942
 
27943
+ /**
27944
+ * @deprecated See constructor JSDoc — migrate to
27945
+ * `auro-datepicker.blackoutDates`. The getter/setter pair exists so the
27946
+ * one-time deprecation warning fires as soon as a consumer assigns a
27947
+ * non-empty array (empty assignments are ignored — an empty array is
27948
+ * indistinguishable from the constructor default and would produce a
27949
+ * spurious warning), rather than only when `_getBlackoutSet()` happens
27950
+ * to rebuild.
27951
+ * @returns {Array} The current legacy `disabledDays` array.
27952
+ */
27953
+ get disabledDays() {
27954
+ return this._disabledDays;
27955
+ }
27956
+
27957
+ /**
27958
+ * @param {Array} value - The legacy `disabledDays` array to set.
27959
+ */
27960
+ set disabledDays(value) {
27961
+ const oldValue = this._disabledDays;
27962
+ // Coerce non-arrays to `[]`. Consumers occasionally pass `null`
27963
+ // (Lit's Array attribute converter returns null for a missing/empty
27964
+ // attribute) or misuse the API; downstream code in
27965
+ // `auro-calendar-cell.isEnabled` calls `.findIndex()` on this value
27966
+ // without an Array.isArray guard, so a truthy non-array would throw
27967
+ // at render.
27968
+ const coerced = Array.isArray(value) ? value : [];
27969
+ if (coerced.length > 0) {
27970
+ this._warnDisabledDaysDeprecated();
27971
+ }
27972
+ this._disabledDays = coerced;
27973
+ // `disabledDays` is a Lit `@property({ type: Array })` on the
27974
+ // RangeDatepicker base class; Lit's generated setter (which we've
27975
+ // overridden here to insert the warning) is what normally invalidates
27976
+ // the reactive cycle. Re-invoke requestUpdate manually so consumer
27977
+ // assignments still re-render the calendar.
27978
+ this.requestUpdate('disabledDays', oldValue);
27979
+ }
27980
+
27906
27981
  static get styles() {
27907
27982
  return [
27908
27983
  styleCss$7$1,
@@ -28448,8 +28523,19 @@ class AuroCalendar extends RangeDatepicker {
28448
28523
  /**
28449
28524
  * Returns a memoized Set of blackout timestamps (seconds) drawn from both
28450
28525
  * the legacy `disabledDays` array and the datepicker's ISO `blackoutDates`.
28451
- * The cache invalidates when either source array's reference changes, which
28452
- * matches Lit's own reactive identity semantics for array properties.
28526
+ *
28527
+ * The cache invalidates on **reference identity** only when the
28528
+ * consumer reassigns the array (`el.blackoutDates = [...]`), matching
28529
+ * Lit's own reactivity semantics for array properties. In-place mutations
28530
+ * on the existing array (`push`, `splice`, index assignment) will NOT
28531
+ * invalidate the cache and the new entries will be silently ignored.
28532
+ * Consumers must reassign to update — see the JSDoc on
28533
+ * `auro-datepicker.blackoutDates` for the recommended pattern.
28534
+ *
28535
+ * A shallow-equality tier was considered but rejected: it would run
28536
+ * O(N) work on every cell render (this method is called per-cell via
28537
+ * `isBlackout()`) and still wouldn't catch same-length value swaps,
28538
+ * offering a false sense of safety.
28453
28539
  * @private
28454
28540
  * @returns {Set<Number>}
28455
28541
  */
@@ -28630,7 +28716,24 @@ class AuroCalendar extends RangeDatepicker {
28630
28716
  // rendered month(s) first so a single-month calendar does not pick a date
28631
28717
  // that has no DOM cell. Determine the visible range based on centralDate and
28632
28718
  // the number of rendered months.
28633
- const renderedMonths = Math.max(this.numCalendars, 1);
28719
+ //
28720
+ // numCalendars is assigned inside renderAllCalendars(), which runs during
28721
+ // render() — so by the time the visible-change handler in updated()
28722
+ // calls computeActiveDate() in the same cycle, numCalendars is normally
28723
+ // set. Guard against the pre-first-render path anyway (e.g. any future
28724
+ // caller that reaches computeActiveDate before render() has run):
28725
+ // Math.max(undefined, 1) is NaN, which would silently skip the
28726
+ // visible-month scan below. Fall back to maximumRenderableMonths'
28727
+ // desktop default (1 for non-range, 2 for range) so the scan window is
28728
+ // correctly sized whenever numCalendars is not yet populated.
28729
+ let renderedMonths = null;
28730
+
28731
+ if (Number.isFinite(this.numCalendars) && this.numCalendars > 0) {
28732
+ renderedMonths = this.numCalendars;
28733
+ } else {
28734
+ renderedMonths = this.noRange ? 1 : 2;
28735
+ }
28736
+
28634
28737
  const visibleAnchor = this.centralDateObject ?? new Date(now * 1000);
28635
28738
  const visMonthStart = new Date(visibleAnchor.getFullYear(), visibleAnchor.getMonth(), 1);
28636
28739
  visMonthStart.setHours(0, 0, 0, 0);
@@ -28900,6 +29003,8 @@ class AuroCalendar extends RangeDatepicker {
28900
29003
  let targetIndex = -1;
28901
29004
  if (direction === 'next') {
28902
29005
  targetIndex = currentIndex + 1;
29006
+ } else if (direction === 'prev') {
29007
+ targetIndex = currentIndex - 1;
28903
29008
  }
28904
29009
 
28905
29010
  if (targetIndex >= 0 && targetIndex < allCells.length) {
@@ -29504,6 +29609,10 @@ class AuroCalendar extends RangeDatepicker {
29504
29609
  * originally tried aria-live="polite" here, but VoiceOver treats
29505
29610
  * polite as "wait until idle" — which never happens during active
29506
29611
  * keyboard navigation — so the announcements were silently dropped.
29612
+ *
29613
+ * This is a documented deviation from WCAG 2.1 SC 4.1.3, which
29614
+ * prefers `polite` for status messages. See the "Documented
29615
+ * Deviation" section in components/datepicker/docs/pages/accessibility.md.
29507
29616
  * @private
29508
29617
  * @param {String} dateStr - The localized date string to announce.
29509
29618
  * @returns {void}
@@ -33549,7 +33658,7 @@ let AuroHelpText$2$1 = class AuroHelpText extends i$3 {
33549
33658
  }
33550
33659
  };
33551
33660
 
33552
- var formkitVersion$1$3 = '202607022214';
33661
+ var formkitVersion$1$3 = '202607022134';
33553
33662
 
33554
33663
  let AuroElement$2$2 = class AuroElement extends i$3 {
33555
33664
  static get properties() {
@@ -46431,17 +46540,14 @@ let BaseInput$1 = class BaseInput extends AuroElement$1$3 {
46431
46540
  * @returns {void}
46432
46541
  */
46433
46542
  notifyValueChanged() {
46434
- // This echoes Lit's reactive value update (and handleClickClear's
46435
- // programmatic clear) — it is NOT a fresh user-input event. Mark it
46436
- // `isProgrammatic` so consumers (e.g. auro-combobox) can distinguish
46437
- // it from genuine user typing and skip clobbering their own
46438
- // programmatic state during init-time renders.
46439
- const inputEvent = new Event('input', {
46543
+ let inputEvent = null;
46544
+
46545
+ inputEvent = new Event('input', {
46440
46546
  bubbles: true,
46441
46547
  composed: true,
46442
46548
  });
46443
- inputEvent.isProgrammatic = true;
46444
46549
 
46550
+ // Dispatched event to alert outside shadow DOM context of event firing.
46445
46551
  this.dispatchEvent(inputEvent);
46446
46552
  }
46447
46553
 
@@ -47154,7 +47260,7 @@ let AuroHelpText$1$3 = class AuroHelpText extends i$3 {
47154
47260
  }
47155
47261
  };
47156
47262
 
47157
- var formkitVersion$7 = '202607022214';
47263
+ var formkitVersion$7 = '202607022134';
47158
47264
 
47159
47265
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
47160
47266
  // See LICENSE in the project root for license information.
@@ -47440,15 +47546,20 @@ let AuroInput$1 = class AuroInput extends BaseInput$1 {
47440
47546
  * @returns {void}
47441
47547
  */
47442
47548
  checkDisplayValueSlotChange() {
47443
- // flatten:true resolves through auro-combobox's forwarding slot
47444
- // (<slot name="displayValue" slot="displayValue">) so a clone appended
47445
- // directly to auro-input's light DOM alongside the forwarder still
47446
- // counts as content. The prior nodes[0].tagName === 'SLOT' recursion
47447
- // discarded any siblings past the forwarder.
47448
- const slot = this.shadowRoot.querySelector('slot[name="displayValue"]');
47449
- const nodes = slot.assignedNodes({ flatten: true });
47549
+ let nodes = this.shadowRoot.querySelector('slot[name="displayValue"]').assignedNodes();
47550
+
47551
+ // Handle when DisplayValue is multi-level slot content (e.g. combobox passing displayValue to input)
47552
+ if (nodes && nodes[0] && nodes[0].tagName === 'SLOT') {
47553
+ nodes = nodes[0].assignedNodes();
47554
+ }
47450
47555
 
47451
- this.hasDisplayValueContent = nodes.length > 0;
47556
+ let hasContent = false;
47557
+
47558
+ if (nodes.length > 0) {
47559
+ hasContent = true;
47560
+ }
47561
+
47562
+ this.hasDisplayValueContent = hasContent;
47452
47563
  }
47453
47564
 
47454
47565
  firstUpdated() {
@@ -48526,6 +48637,15 @@ const datepickerKeyboardStrategy = {
48526
48637
  evt.stopPropagation();
48527
48638
  evt.preventDefault();
48528
48639
 
48640
+ // Signal to the visibility-change handler in auro-datepicker.js that
48641
+ // focus should be restored to the trigger regardless of hasFocus.
48642
+ // hidePopover() (desktop non-modal path) does not auto-restore focus,
48643
+ // and hiding the grid's popover ancestor drops focus to <body>. That
48644
+ // synchronously fires focusout on the datepicker host — clearing
48645
+ // hasFocus — before updated() runs, which would otherwise skip the
48646
+ // input refocus. Native <dialog>.close() (modal path) restores focus
48647
+ // itself, but the flag is harmless there.
48648
+ component._restoreFocusOnClose = true;
48529
48649
  component.hideBib();
48530
48650
  },
48531
48651
 
@@ -48799,6 +48919,14 @@ class AuroDatePicker extends AuroElement$5 {
48799
48919
 
48800
48920
  /**
48801
48921
  * Array of dates that cannot be selected. Dates should be in ISO format (YYYY-MM-DD).
48922
+ *
48923
+ * **Immutable update required.** The datepicker treats this array as
48924
+ * immutable and memoizes a lookup Set keyed on the array's reference
48925
+ * identity — matching Lit's own reactivity semantics for array
48926
+ * properties. In-place mutations (`blackoutDates.push(...)`,
48927
+ * `blackoutDates[i] = ...`, `blackoutDates.splice(...)`) will not
48928
+ * invalidate the cache and the new entries will be silently ignored.
48929
+ * To update, reassign the property: `el.blackoutDates = [...el.blackoutDates, '2024-12-25']`.
48802
48930
  */
48803
48931
  blackoutDates: {
48804
48932
  type: Array,
@@ -49684,12 +49812,13 @@ class AuroDatePicker extends AuroElement$5 {
49684
49812
  this.calendar.activeCellDate = null;
49685
49813
 
49686
49814
  // Show the month containing the selected date (or today) instead of
49687
- // whichever month the user last navigated to.
49815
+ // whichever month the user last navigated to. Route through
49816
+ // updateCentralDate so centralDate stays first-of-month.
49688
49817
  // Respect consumer-provided centralDate/calendarStartDate if no value is set.
49689
49818
  if (this.valueObject) {
49690
- this.centralDate = this.value;
49819
+ this.calendarRenderUtil.updateCentralDate(this, this.value);
49691
49820
  } else if (!this.centralDate && !this.calendarStartDate && !this.minDate) {
49692
- this.centralDate = dateFormatter$1.toISOFormatString(new Date());
49821
+ this.calendarRenderUtil.updateCentralDate(this, new Date());
49693
49822
  }
49694
49823
  }
49695
49824
 
@@ -49747,8 +49876,15 @@ class AuroDatePicker extends AuroElement$5 {
49747
49876
  // Always clear the inert flag. Only restore focus to the input when the datepicker
49748
49877
  // still has focus (e.g. Escape, date selected) — not when the user tabbed away,
49749
49878
  // which would pull them back and require extra Tab presses to escape.
49879
+ //
49880
+ // `_restoreFocusOnClose` is set by the Escape handler in
49881
+ // datepickerKeyboardStrategy.js to force restore even when hasFocus
49882
+ // has already been cleared — hidePopover() (desktop non-modal path)
49883
+ // can drop focus to <body> before this update fires.
49750
49884
  this.dropdown.trigger.inert = false;
49751
- if (this.hasFocus) {
49885
+ const shouldRestoreFocus = this.hasFocus || this._restoreFocusOnClose;
49886
+ this._restoreFocusOnClose = false;
49887
+ if (shouldRestoreFocus) {
49752
49888
  requestAnimationFrame(() => {
49753
49889
  if (!this.dropdown.isPopoverVisible) {
49754
49890
  this.inputList[0].focus();
@@ -50194,6 +50330,18 @@ class AuroDatePicker extends AuroElement$5 {
50194
50330
  this.calendar.requestUpdate();
50195
50331
  this.dispatchEvent(new CustomEvent('auroDatePicker-newSlotContent'));
50196
50332
  }
50333
+
50334
+ // Range invariant: if a value change (from click or programmatic) has
50335
+ // moved start past end, clear valueEnd here so both properties land in
50336
+ // the SAME reactive cycle. Doing it in updated() would schedule a
50337
+ // second cycle after cellClickActive/wasCellClick has already been
50338
+ // consumed by the value branch, leaving the valueEnd branch to run
50339
+ // with a stale handshake and racing with any intervening programmatic
50340
+ // value assignments.
50341
+ if ((changedProperties.has('value') || changedProperties.has('valueEnd')) &&
50342
+ this.valueObject && this.valueEndObject && this.valueObject > this.valueEndObject) {
50343
+ this.valueEnd = undefined;
50344
+ }
50197
50345
  }
50198
50346
 
50199
50347
  updated(changedProperties) {
@@ -50261,8 +50409,12 @@ class AuroDatePicker extends AuroElement$5 {
50261
50409
 
50262
50410
  if (this.value && this.value.length === this.inputList[0].lengthForType && !(this.wasCellClick && this.range)) {
50263
50411
  // Skip centralDate update when user clicked a cell in range mode
50264
- // to prevent the displayed months from shifting
50265
- this.centralDate = this.value;
50412
+ // to prevent the displayed months from shifting. Route through
50413
+ // updateCentralDate so centralDate stays first-of-month — direct
50414
+ // assignment of the raw value briefly holds a mid-month string
50415
+ // and violates the invariant that observers (e.g. calendar sync)
50416
+ // rely on.
50417
+ this.calendarRenderUtil.updateCentralDate(this, this.value);
50266
50418
  }
50267
50419
 
50268
50420
  this.setHasValue();
@@ -50320,8 +50472,10 @@ class AuroDatePicker extends AuroElement$5 {
50320
50472
 
50321
50473
  if (this.valueEnd && this.valueEnd.length === this.inputList[1].lengthForType && !this.wasCellClick) {
50322
50474
  // Skip centralDate update when user clicked a cell in range mode
50323
- // to prevent the displayed months from shifting
50324
- this.centralDate = this.valueEnd;
50475
+ // to prevent the displayed months from shifting. Route through
50476
+ // updateCentralDate to preserve the first-of-month invariant
50477
+ // (see matching comment in the value branch above).
50478
+ this.calendarRenderUtil.updateCentralDate(this, this.valueEnd);
50325
50479
  }
50326
50480
 
50327
50481
  this.validate();
@@ -50345,10 +50499,6 @@ class AuroDatePicker extends AuroElement$5 {
50345
50499
  this.validation.validate(lastInput, true);
50346
50500
  }
50347
50501
 
50348
- if (this.valueObject && this.valueEndObject && this.valueObject > this.valueEndObject) {
50349
- this.valueEnd = undefined;
50350
- }
50351
-
50352
50502
  // This resets the datepicker when the minDate is set to a new value that is
50353
50503
  // a later date than the current value date
50354
50504
  if (changedProperties.has('minDate') && this.minDate) {
@@ -52031,7 +52181,7 @@ let AuroHelpText$1$2 = class AuroHelpText extends i$3 {
52031
52181
  }
52032
52182
  };
52033
52183
 
52034
- var formkitVersion$1$2 = '202607022214';
52184
+ var formkitVersion$1$2 = '202607022134';
52035
52185
 
52036
52186
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
52037
52187
  // See LICENSE in the project root for license information.
@@ -56359,7 +56509,7 @@ let AuroHelpText$6 = class AuroHelpText extends i$3 {
56359
56509
  }
56360
56510
  };
56361
56511
 
56362
- var formkitVersion$6 = '202607022214';
56512
+ var formkitVersion$6 = '202607022134';
56363
56513
 
56364
56514
  let AuroElement$1$2 = class AuroElement extends i$3 {
56365
56515
  static get properties() {
@@ -60339,7 +60489,7 @@ let AuroHelpText$5 = class AuroHelpText extends i$3 {
60339
60489
  }
60340
60490
  };
60341
60491
 
60342
- var formkitVersion$5 = '202607022214';
60492
+ var formkitVersion$5 = '202607022134';
60343
60493
 
60344
60494
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
60345
60495
  // See LICENSE in the project root for license information.
@@ -62104,7 +62254,7 @@ let AuroHelpText$4 = class AuroHelpText extends i$3 {
62104
62254
  }
62105
62255
  };
62106
62256
 
62107
- var formkitVersion$4 = '202607022214';
62257
+ var formkitVersion$4 = '202607022134';
62108
62258
 
62109
62259
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
62110
62260
  // See LICENSE in the project root for license information.
@@ -67325,7 +67475,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$3 {
67325
67475
  }
67326
67476
  };
67327
67477
 
67328
- var formkitVersion$2 = '202607022214';
67478
+ var formkitVersion$2 = '202607022134';
67329
67479
 
67330
67480
  let AuroElement$2$1 = class AuroElement extends i$3 {
67331
67481
  static get properties() {
@@ -80207,17 +80357,14 @@ class BaseInput extends AuroElement$1$1 {
80207
80357
  * @returns {void}
80208
80358
  */
80209
80359
  notifyValueChanged() {
80210
- // This echoes Lit's reactive value update (and handleClickClear's
80211
- // programmatic clear) — it is NOT a fresh user-input event. Mark it
80212
- // `isProgrammatic` so consumers (e.g. auro-combobox) can distinguish
80213
- // it from genuine user typing and skip clobbering their own
80214
- // programmatic state during init-time renders.
80215
- const inputEvent = new Event('input', {
80360
+ let inputEvent = null;
80361
+
80362
+ inputEvent = new Event('input', {
80216
80363
  bubbles: true,
80217
80364
  composed: true,
80218
80365
  });
80219
- inputEvent.isProgrammatic = true;
80220
80366
 
80367
+ // Dispatched event to alert outside shadow DOM context of event firing.
80221
80368
  this.dispatchEvent(inputEvent);
80222
80369
  }
80223
80370
 
@@ -80930,7 +81077,7 @@ let AuroHelpText$1$1 = class AuroHelpText extends i$3 {
80930
81077
  }
80931
81078
  };
80932
81079
 
80933
- var formkitVersion$1$1 = '202607022214';
81080
+ var formkitVersion$1$1 = '202607022134';
80934
81081
 
80935
81082
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
80936
81083
  // See LICENSE in the project root for license information.
@@ -81216,15 +81363,20 @@ class AuroInput extends BaseInput {
81216
81363
  * @returns {void}
81217
81364
  */
81218
81365
  checkDisplayValueSlotChange() {
81219
- // flatten:true resolves through auro-combobox's forwarding slot
81220
- // (<slot name="displayValue" slot="displayValue">) so a clone appended
81221
- // directly to auro-input's light DOM alongside the forwarder still
81222
- // counts as content. The prior nodes[0].tagName === 'SLOT' recursion
81223
- // discarded any siblings past the forwarder.
81224
- const slot = this.shadowRoot.querySelector('slot[name="displayValue"]');
81225
- const nodes = slot.assignedNodes({ flatten: true });
81366
+ let nodes = this.shadowRoot.querySelector('slot[name="displayValue"]').assignedNodes();
81367
+
81368
+ // Handle when DisplayValue is multi-level slot content (e.g. combobox passing displayValue to input)
81369
+ if (nodes && nodes[0] && nodes[0].tagName === 'SLOT') {
81370
+ nodes = nodes[0].assignedNodes();
81371
+ }
81372
+
81373
+ let hasContent = false;
81374
+
81375
+ if (nodes.length > 0) {
81376
+ hasContent = true;
81377
+ }
81226
81378
 
81227
- this.hasDisplayValueContent = nodes.length > 0;
81379
+ this.hasDisplayValueContent = hasContent;
81228
81380
  }
81229
81381
 
81230
81382
  firstUpdated() {
@@ -82051,7 +82203,7 @@ let AuroBibtemplate$1 = class AuroBibtemplate extends i$3 {
82051
82203
  }
82052
82204
  };
82053
82205
 
82054
- var formkitVersion$3 = '202607022214';
82206
+ var formkitVersion$3 = '202607022134';
82055
82207
 
82056
82208
  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}`;
82057
82209
 
@@ -83150,19 +83302,9 @@ class AuroCombobox extends AuroElement$3 {
83150
83302
  /**
83151
83303
  * Processes hidden state of all menu options and determines if there are any available options not hidden.
83152
83304
  * @private
83153
- * @param {object} [options={}] - Optional flag bag.
83154
- * @param {boolean} [options.preferComboboxValue=false] - When true,
83155
- * handleMenuOptions matches the selected option against `this.value`
83156
- * first instead of `this.input.value`. Needed on mount and re-mount
83157
- * because under `persistInput` the consumer's typedValue prop can drift
83158
- * from the framework value (Svelte `{#key}` re-mount after a swap, or
83159
- * SPA preselect after route change) and the old input-first match would
83160
- * then pick the stale text. Only handleSlotChange passes this; typing
83161
- * and clearing paths keep the input-first match so user clears aren't
83162
- * undone.
83163
83305
  * @returns {void}
83164
83306
  */
83165
- handleMenuOptions({ preferComboboxValue = false } = {}) {
83307
+ handleMenuOptions() {
83166
83308
  this.generateOptionsArray();
83167
83309
  this.availableOptions = [];
83168
83310
  // Single source of truth for the menu's filter/highlight token per call.
@@ -83183,20 +83325,7 @@ class AuroCombobox extends AuroElement$3 {
83183
83325
  option.setAttribute('aria-posinset', index + 1);
83184
83326
  });
83185
83327
 
83186
- // On mount/re-mount (via handleSlotChange), prefer the framework-set
83187
- // `this.value` when it matches a menu option. Covers SPA preselect and
83188
- // consumer swap patterns (e.g. Svelte `{#key}` re-mount) where
83189
- // `this.value` is authoritative but `this.input.value` may be empty or
83190
- // carry stale typed text from another field. Event-driven callers do
83191
- // not pass the flag, otherwise user clears would be undone by
83192
- // re-syncing to the previous combobox.value.
83193
- if (preferComboboxValue &&
83194
- this.value &&
83195
- this.menu.options?.some((opt) => opt.value === this.value)) {
83196
- this.setMenuValue(this.value);
83197
- this.syncValuesAndStates();
83198
- } else if (this.input.value &&
83199
- this.menu.options?.some((opt) => opt.value === this.input.value)) {
83328
+ if (this.input.value && this.menu.options && this.menu.options.some((opt) => opt.value === this.input.value)) {
83200
83329
  this.setMenuValue(this.input.value);
83201
83330
  this.syncValuesAndStates();
83202
83331
  }
@@ -83633,25 +83762,7 @@ class AuroCombobox extends AuroElement$3 {
83633
83762
  this.optionActive = evt.detail;
83634
83763
 
83635
83764
  if (this.input) {
83636
- // setActiveDescendant runs after Lit's update finishes because the
83637
- // template's `.a11yActivedescendant` binding calls setAttribute on
83638
- // the internal <input> in auro-input.updated(), which clears the
83639
- // reflected ariaActiveDescendantElement property. Setting the ref
83640
- // synchronously here would get overwritten by that attribute write.
83641
- // Awaiting updateComplete lets the attribute write finish first,
83642
- // then the ref sticks and screen readers can cross the shadow-DOM
83643
- // boundary to the auro-menuoption in light DOM.
83644
- //
83645
- // The equality check covers the async gap: this.optionActive can
83646
- // change before the callback runs (user arrowed elsewhere, or the
83647
- // menu closed and cleared it to null), so we bail if the target
83648
- // no longer matches to avoid reinstating a stale ref.
83649
- const targetOption = this.optionActive;
83650
- this.updateComplete.then(() => {
83651
- if (this.input && this.optionActive === targetOption) {
83652
- this.input.setActiveDescendant(targetOption);
83653
- }
83654
- });
83765
+ this.input.setActiveDescendant(this.optionActive);
83655
83766
  }
83656
83767
 
83657
83768
  // In fullscreen mode the menu sits inside a nested <dialog> shadow root,
@@ -83788,18 +83899,6 @@ class AuroCombobox extends AuroElement$3 {
83788
83899
  }
83789
83900
  }
83790
83901
 
83791
- // SPA preselect guard: on init render, auro-input's notifyValueChanged
83792
- // echoes an empty value through as an isProgrammatic input event before
83793
- // the framework-set combobox.value has propagated down to the input.
83794
- // Without this bail, the `this.value = this.input.value` below clobbers
83795
- // the framework value with '' and clear() wipes optionSelected. Scoped
83796
- // to the exact shape of that echo (isProgrammatic + non-empty combobox
83797
- // value + empty input.value) so it doesn't affect the swap/typed paths
83798
- // where value/input already track each other through the sync helpers.
83799
- if (event && event.isProgrammatic && this.value && !this.input.value) {
83800
- return;
83801
- }
83802
-
83803
83902
  this.value = this.input.value;
83804
83903
 
83805
83904
  // Ignore re-entrant input events caused by programmatic value sets.
@@ -84232,11 +84331,7 @@ class AuroCombobox extends AuroElement$3 {
84232
84331
  }
84233
84332
  });
84234
84333
 
84235
- // Slot change (mount/re-mount): pass `preferComboboxValue` so that a
84236
- // framework-set `this.value` wins over any stale `input.value` when
84237
- // matching against the newly-available options. Fixes the display
84238
- // for SPA preselect and Svelte `{#key}` re-mount swap patterns.
84239
- this.handleMenuOptions({ preferComboboxValue: true });
84334
+ this.handleMenuOptions();
84240
84335
 
84241
84336
  break;
84242
84337
 
@@ -86885,6 +86980,9 @@ function navigateArrow(component, direction, options = {}) {
86885
86980
  * @param {HTMLElement | null | undefined} menu - The auro-menu element.
86886
86981
  * @returns {Array<HTMLElement>} Non-disabled options, empty array when none.
86887
86982
  */
86983
+ function getEnabledOptions(menu) {
86984
+ return (menu?.options || []).filter((option) => !option.disabled);
86985
+ }
86888
86986
 
86889
86987
  /**
86890
86988
  * Returns the active (selectable + visible) options for type-ahead navigation.
@@ -86954,10 +87052,8 @@ const selectKeyboardStrategy = {
86954
87052
  End(component, evt, ctx) {
86955
87053
  evt.preventDefault();
86956
87054
  evt.stopPropagation();
86957
- // `pop()` is safe here: getActiveOptions returns a fresh filtered array.
86958
- // Uses "active" (not "enabled") so hidden and static rows — which a screen
86959
- // reader must not announce as focused — are skipped.
86960
- const lastOption = getActiveOptions(component.menu).pop();
87055
+ // `pop()` is safe here: getEnabledOptions returns a fresh filtered array.
87056
+ const lastOption = getEnabledOptions(component.menu).pop();
86961
87057
  if (!lastOption) {
86962
87058
  return;
86963
87059
  }
@@ -86988,7 +87084,7 @@ const selectKeyboardStrategy = {
86988
87084
  Home(component, evt, ctx) {
86989
87085
  evt.preventDefault();
86990
87086
  evt.stopPropagation();
86991
- const [firstOption] = getActiveOptions(component.menu);
87087
+ const [firstOption] = getEnabledOptions(component.menu);
86992
87088
  if (!firstOption) {
86993
87089
  return;
86994
87090
  }
@@ -87013,15 +87109,6 @@ const selectKeyboardStrategy = {
87013
87109
  },
87014
87110
 
87015
87111
  default(component, evt, ctx) {
87016
- // Ignore keys chorded with Ctrl/Meta/Alt so browser/OS shortcuts
87017
- // (Cmd+C, Ctrl+V, Alt+X, Cmd+Space, …) don't leak into typeahead
87018
- // or toggle the bib. Native <select> ignores modified keys.
87019
- // ArrowUp/ArrowDown handle modifier+arrow explicitly above; this
87020
- // guard only affects the default (printable/Space) branch.
87021
- if (evt.ctrlKey || evt.metaKey || evt.altKey) {
87022
- return;
87023
- }
87024
-
87025
87112
  // Space resolves to either typeahead-buffer extension or bib toggle
87026
87113
  // depending on whether a type-ahead buffer is active. Mirrors native
87027
87114
  // <select> and the WAI-ARIA APG Listbox guidance: mid-typeahead space
@@ -90952,7 +91039,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
90952
91039
  }
90953
91040
  };
90954
91041
 
90955
- var formkitVersion$1 = '202607022214';
91042
+ var formkitVersion$1 = '202607022134';
90956
91043
 
90957
91044
  class AuroElement extends i$3 {
90958
91045
  static get properties() {
@@ -92991,7 +93078,7 @@ class AuroHelpText extends i$3 {
92991
93078
  }
92992
93079
  }
92993
93080
 
92994
- var formkitVersion = '202607022214';
93081
+ var formkitVersion = '202607022134';
92995
93082
 
92996
93083
  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}`;
92997
93084
 
@@ -93555,11 +93642,8 @@ class AuroSelect extends AuroElement$1 {
93555
93642
  } else if (this.multiSelect && Array.isArray(this.optionSelected) && this.optionSelected.length > 0) {
93556
93643
  this.menu.updateActiveOption(this.optionSelected[0]);
93557
93644
  } else {
93558
- // If no activeOption has yet to be set, make the first active option
93559
- // (non-disabled, non-hidden, non-static) active by default. "Active" —
93560
- // not just "enabled" — so hidden rows and static placeholders never
93561
- // land in aria-activedescendant on open.
93562
- const [firstActive] = getActiveOptions(this.menu);
93645
+ // If no activeOption has yet to be set, then make the first enabled option active by default
93646
+ const [firstActive] = getEnabledOptions(this.menu);
93563
93647
  this.menu.updateActiveOption(firstActive);
93564
93648
  }
93565
93649
  }
@@ -93805,12 +93889,6 @@ class AuroSelect extends AuroElement$1 {
93805
93889
 
93806
93890
  /**
93807
93891
  * Binds all behavior needed to the menu after rendering.
93808
- *
93809
- * The `<auro-menu>` reference is captured once and not re-targeted on
93810
- * `slotchange`. Runtime option mutations are covered via
93811
- * `auroMenu-optionsChange`, so swap options inside the menu freely; do not
93812
- * swap the `<auro-menu>` element itself under a live select — remount the
93813
- * parent `<auro-select>` instead.
93814
93892
  * @private
93815
93893
  * @returns {void}
93816
93894
  */
@@ -93869,15 +93947,6 @@ class AuroSelect extends AuroElement$1 {
93869
93947
  if (this.menu.optionSelected !== undefined) {
93870
93948
  return;
93871
93949
  }
93872
- // Skip when the select is already cleared (valueless click with no
93873
- // prior selection): value/optionSelected are already empty and there
93874
- // is no stale trigger text to refresh, so updateDisplayedValue would
93875
- // just churn the DOM and request a needless dropdown re-render.
93876
- const hasStaleState = this.value !== undefined ||
93877
- (this.multiSelect ? this.optionSelected?.length > 0 : this.optionSelected !== undefined);
93878
- if (!hasStaleState) {
93879
- return;
93880
- }
93881
93950
  this.value = undefined;
93882
93951
  this.optionSelected = this.multiSelect ? [] : undefined;
93883
93952
  // The trigger label is rendered imperatively into #value, so a property
@@ -93907,15 +93976,10 @@ class AuroSelect extends AuroElement$1 {
93907
93976
  if (this.dropdown.isPopoverVisible) {
93908
93977
  announceToScreenReader(this._getAnnouncementRoot(), message);
93909
93978
  } else {
93910
- // Typeahead-on-closed calls updateActiveOption() before show(), so
93911
- // this handler runs with isPopoverVisible still false. queueMicrotask
93912
- // is safe because show() showBib() flips isPopoverVisible and
93913
- // dialog.showModal() both run synchronously in the same task; the
93914
- // microtask queue only drains once _handleTypeahead unwinds, by
93915
- // which point _getAnnouncementRoot() resolves to the bib's shadow
93916
- // root inside the now-open modal. Do NOT switch to auroDropdown-toggled
93917
- // — it fires before showModal(), landing the announcement in the
93918
- // host root while the dialog is still not-yet-modal.
93979
+ // Typeahead-on-closed fires this event before `show()` flips
93980
+ // isPopoverVisible. Defer so the announcement targets the bib's
93981
+ // live region once the fullscreen <dialog> opens otherwise it
93982
+ // lands in the host root, which is inert under the active modal.
93919
93983
  queueMicrotask(() => announceToScreenReader(this._getAnnouncementRoot(), message));
93920
93984
  }
93921
93985
  }
@@ -94309,13 +94373,6 @@ class AuroSelect extends AuroElement$1 {
94309
94373
  }
94310
94374
 
94311
94375
  if (changedProperties.has('value')) {
94312
- // A value change ends the current interaction — whether it came from a
94313
- // user commit, programmatic assignment, or reset(). Clear the buffer so
94314
- // a stale prefix does not concatenate onto the next keystroke while the
94315
- // host still has focus (the blur listener would otherwise be the only
94316
- // focus-retained clear point, and hideBib() below does not blur).
94317
- this._clearTypeaheadBuffer();
94318
-
94319
94376
  this.setMenuValue(this.value);
94320
94377
 
94321
94378
  this._updateNativeSelect();
@@ -94371,9 +94428,6 @@ class AuroSelect extends AuroElement$1 {
94371
94428
  * @returns {void}
94372
94429
  */
94373
94430
  reset() {
94374
- // Defense-in-depth: updated()'s value-change branch also clears, but
94375
- // reset-to-same-value (e.g. undefined → undefined) skips that path.
94376
- this._clearTypeaheadBuffer();
94377
94431
  this.menu.reset();
94378
94432
  this.validation.reset(this);
94379
94433
  }
@@ -94396,13 +94450,8 @@ class AuroSelect extends AuroElement$1 {
94396
94450
  // Hidden native <select> has no `multiple` attribute, so any change it fires
94397
94451
  // is a single raw value — applying it in multiSelect mode would collapse the
94398
94452
  // JSON-array `value` shape. Bfcache/autofill can reach this on a name-bearing
94399
- // form control even with aria-hidden/tabindex=-1, so revert to the expected
94400
- // mirror (formattedValue[0]) rather than letting the native select drift and
94401
- // silently submit the autofilled scalar under `name`.
94402
- if (this.multiSelect) {
94403
- this._updateNativeSelect();
94404
- return;
94405
- }
94453
+ // form control even with aria-hidden/tabindex=-1.
94454
+ if (this.multiSelect) return;
94406
94455
 
94407
94456
  const selectedOption = event.target.options[event.target.selectedIndex];
94408
94457
  if (!selectedOption) return;