@aurodesignsystem-dev/auro-formkit 0.0.0-pr1474.5 → 0.0.0-pr1474.7

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 (53) 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 +3 -3
  7. package/components/combobox/demo/getting-started.min.js +3 -3
  8. package/components/combobox/demo/index.min.js +3 -3
  9. package/components/combobox/dist/index.js +3 -3
  10. package/components/combobox/dist/registered.js +3 -3
  11. package/components/counter/demo/customize.min.js +2 -2
  12. package/components/counter/demo/index.min.js +2 -2
  13. package/components/counter/dist/index.js +2 -2
  14. package/components/counter/dist/registered.js +2 -2
  15. package/components/datepicker/demo/customize.min.js +3 -3
  16. package/components/datepicker/demo/index.min.js +3 -3
  17. package/components/datepicker/dist/index.js +3 -3
  18. package/components/datepicker/dist/registered.js +3 -3
  19. package/components/dropdown/demo/customize.min.js +1 -1
  20. package/components/dropdown/demo/getting-started.min.js +1 -1
  21. package/components/dropdown/demo/index.min.js +1 -1
  22. package/components/dropdown/dist/index.js +1 -1
  23. package/components/dropdown/dist/registered.js +1 -1
  24. package/components/form/demo/customize.md +13 -4
  25. package/components/form/demo/customize.min.js +158 -41
  26. package/components/form/demo/getting-started.min.js +158 -41
  27. package/components/form/demo/index.min.js +158 -41
  28. package/components/form/demo/registerDemoDeps.min.js +144 -37
  29. package/components/form/dist/auro-form.d.ts +11 -3
  30. package/components/form/dist/index.js +14 -4
  31. package/components/form/dist/registered.js +14 -4
  32. package/components/input/demo/customize.min.js +1 -1
  33. package/components/input/demo/getting-started.min.js +1 -1
  34. package/components/input/demo/index.min.js +1 -1
  35. package/components/input/dist/index.js +1 -1
  36. package/components/input/dist/registered.js +1 -1
  37. package/components/radio/demo/customize.min.js +1 -1
  38. package/components/radio/demo/getting-started.min.js +1 -1
  39. package/components/radio/demo/index.min.js +1 -1
  40. package/components/radio/dist/index.js +1 -1
  41. package/components/radio/dist/registered.js +1 -1
  42. package/components/select/demo/api.md +1 -0
  43. package/components/select/demo/customize.md +71 -0
  44. package/components/select/demo/customize.min.js +133 -26
  45. package/components/select/demo/getting-started.min.js +133 -26
  46. package/components/select/demo/index.min.js +133 -26
  47. package/components/select/demo/keyboard-behavior.md +18 -0
  48. package/components/select/dist/auro-select.d.ts +38 -2
  49. package/components/select/dist/index.js +133 -26
  50. package/components/select/dist/registered.js +133 -26
  51. package/components/select/dist/selectUtils.d.ts +12 -0
  52. package/custom-elements.json +442 -350
  53. package/package.json +1 -1
@@ -11,6 +11,7 @@
11
11
  <auro-anchorlink fluid href="#disabledFields" class="level2 body-xs">Disabled Fields</auro-anchorlink>
12
12
  <auro-anchorlink fluid href="#disableAfterEdit" class="level2 body-xs">Disabling After User Edits</auro-anchorlink>
13
13
  <auro-anchorlink fluid href="#behaviorChangesV6" class="level2 body-xs">Behavior Changes in v6</auro-anchorlink>
14
+ <auro-anchorlink fluid href="#runtimeMutations" class="level2 body-xs">Runtime DOM Mutations</auro-anchorlink>
14
15
  </auro-nav>
15
16
  </nav>
16
17
  <div class="mainContent">
@@ -263,7 +264,7 @@
263
264
  <br />
264
265
  <auro-button type="submit">Submit</auro-button>
265
266
  </auro-form>
266
- <output id="disabledExampleOutput" form="disabledExampleForm" aria-live="polite">Submit the form to see what data gets stored.</output>
267
+ <output id="disabledExampleOutput" aria-live="polite">Submit the form to see what data gets stored.</output>
267
268
  <style>
268
269
  #disabledExampleOutput {
269
270
  display: block;
@@ -299,7 +300,7 @@
299
300
  &lt;br /&gt;
300
301
  &lt;auro-button type="submit"&gt;Submit&lt;/auro-button&gt;
301
302
  &lt;/auro-form&gt;
302
- &lt;output id="disabledExampleOutput" form="disabledExampleForm" aria-live="polite"&gt;Submit the form to see what data gets stored.&lt;/output&gt;
303
+ &lt;output id="disabledExampleOutput" aria-live="polite"&gt;Submit the form to see what data gets stored.&lt;/output&gt;
303
304
  &lt;style&gt;
304
305
  #disabledExampleOutput {
305
306
  display: block;
@@ -329,7 +330,7 @@
329
330
  <auro-button type="submit">Submit</auro-button>
330
331
  <auro-button type="reset">Reset</auro-button>
331
332
  </auro-form>
332
- <output id="disableAfterEditOutput" form="disableAfterEditForm" aria-live="polite">Type something, then click "Disable field". The form correctly reports as non-initial, Reset stays enabled, and the field is excluded from the submit payload.</output>
333
+ <output id="disableAfterEditOutput" aria-live="polite">Type something, then click "Disable field". The form correctly reports as non-initial, Reset stays enabled, and the field is excluded from the submit payload.</output>
333
334
  <style>
334
335
  #disableAfterEditOutput {
335
336
  display: block;
@@ -358,7 +359,7 @@
358
359
  &lt;auro-button type="submit"&gt;Submit&lt;/auro-button&gt;
359
360
  &lt;auro-button type="reset"&gt;Reset&lt;/auro-button&gt;
360
361
  &lt;/auro-form&gt;
361
- &lt;output id="disableAfterEditOutput" form="disableAfterEditForm" aria-live="polite"&gt;Type something, then click "Disable field". The form correctly reports as non-initial, Reset stays enabled, and the field is excluded from the submit payload.&lt;/output&gt;
362
+ &lt;output id="disableAfterEditOutput" aria-live="polite"&gt;Type something, then click "Disable field". The form correctly reports as non-initial, Reset stays enabled, and the field is excluded from the submit payload.&lt;/output&gt;
362
363
  &lt;style&gt;
363
364
  #disableAfterEditOutput {
364
365
  display: block;
@@ -383,6 +384,14 @@
383
384
  <li><strong>Submit availability depends on validity alone.</strong> The Submit button is enabled when no enabled field has an unmet constraint, regardless of <code>isInitialState</code>. Pre-filled valid forms (for example, forms pre-populated from a logged-in user's profile) can be submitted on first render without a prior user edit. Empty forms with only optional fields also have Submit enabled at first render. Previously both cases would have been blocked.</li>
384
385
  <li><strong>Focus/blur on an optional field no longer taints the form.</strong> Tabbing through an optional field that the user did not edit no longer flips <code>isInitialState</code> to <code>false</code>. Required fields are unaffected — focusing then blurring an empty required field still taints, because the resulting <code>'valueMissing'</code> validity is an error state. <em>Migration:</em> if you needed "user has engaged with the form" as a signal, use per-field <code>touched</code> state on each <code>auro-input</code>.</li>
385
386
  </ul>
387
+ <auro-header level="3" id="runtimeMutations">Runtime DOM mutations</auro-header>
388
+ <p><code>auro-form</code> tracks its child form elements through a subtree <code>MutationObserver</code> on <code>name</code> and <code>disabled</code> attributes, plus a slot-change listener. The following runtime patterns are supported without any consumer-side reinitialization:</p>
389
+ <ul>
390
+ <li><strong>Runtime renames.</strong> Changing the <code>name</code> attribute on a tracked field re-keys <code>formState</code> and migrates the captured initial value to the new key, preserving <code>isInitialState</code> semantics across the rename. <code>form.value</code> reflects the new key on the next render. Removing the <code>name</code> attribute drops the field from <code>formState</code> and prunes its captured initial.</li>
391
+ <li><strong>Late name attachment.</strong> An element that initially renders without a <code>name</code> is invisible to <code>auro-form</code> (it queries via <code>form</code>). When the consumer adds a <code>name</code> attribute later, the field is picked up automatically — both <code>formState</code> registration and the <code>input</code>/<code>auroFormElement-validated</code>/<code>keydown</code> listeners are wired up via the same attribute observer.</li>
392
+ <li><strong>Reset gating.</strong> The Reset button is enabled whenever the form is dirty (<code>isInitialState === false</code>), or any non-disabled field carries a current or default value. A disabled field carrying only its captured initial value does <em>not</em> enable Reset; a previously-edited field that has since been disabled <em>does</em> (the dirty flag persists across disabling, so the user always has a UI path back to the initial state).</li>
393
+ <li><strong>Enter-to-submit on disabled fields.</strong> Pressing Enter inside a disabled form field never submits the form, matching native HTML behavior. Disabled controls do not dispatch the implicit submit, so the user must move focus to an enabled field (or click Submit) to trigger submission.</li>
394
+ </ul>
386
395
  </section>
387
396
  </div>
388
397
  </div>
@@ -117,6 +117,7 @@ let AuroLibraryRuntimeUtils$b = class AuroLibraryRuntimeUtils {
117
117
  * @property {string | number | boolean | string[] | null} value - The value of the form element.
118
118
  * @property {ValidityState} validity - The validity state of the form element, stored when fired from the form element.
119
119
  * @property {boolean} required - Whether the form element is required or not.
120
+ * @property {boolean} disabled - Whether the form element is currently disabled. Cached from the live attribute via the MutationObserver in `connectedCallback` and refreshed from `_handleAttributeMutations`.
120
121
  */
121
122
 
122
123
  /**
@@ -470,15 +471,24 @@ class AuroForm extends i$3 {
470
471
  * form forever (`'' !== null`) and Reset would stay enabled with nothing
471
472
  * to actually reset.
472
473
  *
473
- * Only `''` and `undefined` collapse to `null`. Genuine values — including
474
- * `0`, `false`, and non-empty strings pass through unchanged so number
475
- * and boolean fields still compare correctly.
474
+ * `''`, `undefined`, and `[]` all collapse to `null`. The empty-array case
475
+ * covers checkbox-group, radio-group, and multiselect, where `[]` means
476
+ * "no selection" semantically the same as `null`/`''`. Genuine values
477
+ * — including `0`, `false`, non-empty strings, and non-empty arrays —
478
+ * pass through unchanged so number, boolean, and populated multi-value
479
+ * fields still compare correctly.
476
480
  * @param {*} value - Value to normalize.
477
481
  * @returns {*}
478
482
  * @private
479
483
  */
480
484
  _normalizeEmpty(value) {
481
- return value === '' || value === undefined ? null : value;
485
+ if (value === '' || value === undefined) {
486
+ return null;
487
+ }
488
+ if (Array.isArray(value) && value.length === 0) {
489
+ return null;
490
+ }
491
+ return value;
482
492
  }
483
493
 
484
494
  /**
@@ -13359,7 +13369,7 @@ let AuroHelpText$8 = class AuroHelpText extends i$3 {
13359
13369
  }
13360
13370
  };
13361
13371
 
13362
- var formkitVersion$8 = '202606181729';
13372
+ var formkitVersion$8 = '202606191540';
13363
13373
 
13364
13374
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
13365
13375
  // See LICENSE in the project root for license information.
@@ -27478,7 +27488,7 @@ let AuroBibtemplate$3 = class AuroBibtemplate extends i$3 {
27478
27488
  }
27479
27489
  };
27480
27490
 
27481
- var formkitVersion$2$1 = '202606181729';
27491
+ var formkitVersion$2$1 = '202606191540';
27482
27492
 
27483
27493
  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}
27484
27494
  `,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}}
@@ -32989,7 +32999,7 @@ let AuroHelpText$2$1 = class AuroHelpText extends i$3 {
32989
32999
  }
32990
33000
  };
32991
33001
 
32992
- var formkitVersion$1$3 = '202606181729';
33002
+ var formkitVersion$1$3 = '202606191540';
32993
33003
 
32994
33004
  let AuroElement$2$2 = class AuroElement extends i$3 {
32995
33005
  static get properties() {
@@ -46571,7 +46581,7 @@ let AuroHelpText$1$3 = class AuroHelpText extends i$3 {
46571
46581
  }
46572
46582
  };
46573
46583
 
46574
- var formkitVersion$7 = '202606181729';
46584
+ var formkitVersion$7 = '202606191540';
46575
46585
 
46576
46586
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
46577
46587
  // See LICENSE in the project root for license information.
@@ -51268,7 +51278,7 @@ let AuroHelpText$1$2 = class AuroHelpText extends i$3 {
51268
51278
  }
51269
51279
  };
51270
51280
 
51271
- var formkitVersion$1$2 = '202606181729';
51281
+ var formkitVersion$1$2 = '202606191540';
51272
51282
 
51273
51283
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
51274
51284
  // See LICENSE in the project root for license information.
@@ -55596,7 +55606,7 @@ let AuroHelpText$6 = class AuroHelpText extends i$3 {
55596
55606
  }
55597
55607
  };
55598
55608
 
55599
- var formkitVersion$6 = '202606181729';
55609
+ var formkitVersion$6 = '202606191540';
55600
55610
 
55601
55611
  let AuroElement$1$2 = class AuroElement extends i$3 {
55602
55612
  static get properties() {
@@ -59528,7 +59538,7 @@ let AuroHelpText$5 = class AuroHelpText extends i$3 {
59528
59538
  }
59529
59539
  };
59530
59540
 
59531
- var formkitVersion$5 = '202606181729';
59541
+ var formkitVersion$5 = '202606191540';
59532
59542
 
59533
59543
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
59534
59544
  // See LICENSE in the project root for license information.
@@ -61278,7 +61288,7 @@ let AuroHelpText$4 = class AuroHelpText extends i$3 {
61278
61288
  }
61279
61289
  };
61280
61290
 
61281
- var formkitVersion$4 = '202606181729';
61291
+ var formkitVersion$4 = '202606191540';
61282
61292
 
61283
61293
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
61284
61294
  // See LICENSE in the project root for license information.
@@ -66493,7 +66503,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$3 {
66493
66503
  }
66494
66504
  };
66495
66505
 
66496
- var formkitVersion$2 = '202606181729';
66506
+ var formkitVersion$2 = '202606191540';
66497
66507
 
66498
66508
  let AuroElement$2$1 = class AuroElement extends i$3 {
66499
66509
  static get properties() {
@@ -80075,7 +80085,7 @@ let AuroHelpText$1$1 = class AuroHelpText extends i$3 {
80075
80085
  }
80076
80086
  };
80077
80087
 
80078
- var formkitVersion$1$1 = '202606181729';
80088
+ var formkitVersion$1$1 = '202606191540';
80079
80089
 
80080
80090
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
80081
80091
  // See LICENSE in the project root for license information.
@@ -81196,7 +81206,7 @@ let AuroBibtemplate$1 = class AuroBibtemplate extends i$3 {
81196
81206
  }
81197
81207
  };
81198
81208
 
81199
- var formkitVersion$3 = '202606181729';
81209
+ var formkitVersion$3 = '202606191540';
81200
81210
 
81201
81211
  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}`;
81202
81212
 
@@ -85960,6 +85970,21 @@ function getEnabledOptions(menu) {
85960
85970
  return (menu?.options || []).filter((option) => !option.disabled);
85961
85971
  }
85962
85972
 
85973
+ /**
85974
+ * Returns the active (selectable + visible) options for type-ahead navigation.
85975
+ *
85976
+ * Uses auro-menuoption's `isActive` getter, which excludes disabled, hidden,
85977
+ * and static options (e.g. `static nomatch` placeholders) so the type-ahead
85978
+ * cursor never lands on a non-actionable item. Same empty-safe handling as
85979
+ * `getEnabledOptions`.
85980
+ *
85981
+ * @param {HTMLElement | null | undefined} menu - The auro-menu element.
85982
+ * @returns {Array<HTMLElement>} Active options, empty array when none.
85983
+ */
85984
+ function getActiveOptions(menu) {
85985
+ return (menu?.options || []).filter((option) => option.isActive);
85986
+ }
85987
+
85963
85988
  /* eslint-disable new-cap */
85964
85989
 
85965
85990
  const selectKeyboardStrategy = {
@@ -85992,6 +86017,14 @@ const selectKeyboardStrategy = {
85992
86017
  },
85993
86018
 
85994
86019
  Escape(component, evt, ctx) {
86020
+ // Always clear the type-ahead buffer — Escape is a universal cancel.
86021
+ // Safe to call when the buffer is empty.
86022
+ // eslint-disable-next-line no-underscore-dangle
86023
+ if (typeof component._clearTypeaheadBuffer === 'function') {
86024
+ // eslint-disable-next-line no-underscore-dangle
86025
+ component._clearTypeaheadBuffer();
86026
+ }
86027
+
85995
86028
  if (!ctx.isExpanded) {
85996
86029
  return;
85997
86030
  }
@@ -86051,16 +86084,25 @@ const selectKeyboardStrategy = {
86051
86084
  },
86052
86085
 
86053
86086
  default(component, evt, ctx) {
86054
- component.updateActiveOptionBasedOnKey(evt.key);
86087
+ // Space resolves to either typeahead-buffer extension or bib toggle
86088
+ // depending on whether a type-ahead buffer is active. Mirrors native
86089
+ // <select> and the WAI-ARIA APG Listbox guidance: mid-typeahead space
86090
+ // is a search character (e.g. "San Francisco"); otherwise it toggles.
86055
86091
  if (evt.key === ' ') {
86056
86092
  evt.preventDefault();
86057
86093
  evt.stopPropagation();
86094
+ if (component.typeaheadBuffer && component.typeaheadBuffer.length > 0) {
86095
+ component.updateActiveOptionBasedOnKey(evt.key);
86096
+ return;
86097
+ }
86058
86098
  if (ctx.isExpanded) {
86059
86099
  component.dropdown.hide();
86060
- return;
86100
+ } else {
86101
+ component.dropdown.show();
86061
86102
  }
86062
- component.dropdown.show();
86103
+ return;
86063
86104
  }
86105
+ component.updateActiveOptionBasedOnKey(evt.key);
86064
86106
  },
86065
86107
  };
86066
86108
 
@@ -89972,7 +90014,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
89972
90014
  }
89973
90015
  };
89974
90016
 
89975
- var formkitVersion$1 = '202606181729';
90017
+ var formkitVersion$1 = '202606191540';
89976
90018
 
89977
90019
  class AuroElement extends i$3 {
89978
90020
  static get properties() {
@@ -91985,7 +92027,7 @@ class AuroHelpText extends i$3 {
91985
92027
  }
91986
92028
  }
91987
92029
 
91988
- var formkitVersion = '202606181729';
92030
+ var formkitVersion = '202606191540';
91989
92031
 
91990
92032
  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}`;
91991
92033
 
@@ -92090,6 +92132,16 @@ class AuroSelect extends AuroElement$1 {
92090
92132
  * @private
92091
92133
  */
92092
92134
  this.hasDisplayValueContent = false;
92135
+
92136
+ /**
92137
+ * @private
92138
+ */
92139
+ this.typeaheadBuffer = '';
92140
+
92141
+ /**
92142
+ * @private
92143
+ */
92144
+ this._typeaheadTimeout = null;
92093
92145
  }
92094
92146
 
92095
92147
  /**
@@ -92102,6 +92154,7 @@ class AuroSelect extends AuroElement$1 {
92102
92154
  this.fullscreenBreakpoint = 'sm';
92103
92155
  this.onDark = false;
92104
92156
  this.isPopoverVisible = false;
92157
+ this.typeaheadTimeoutMs = 500;
92105
92158
 
92106
92159
  // Layout Config
92107
92160
  this.layout = 'classic';
@@ -92405,6 +92458,16 @@ class AuroSelect extends AuroElement$1 {
92405
92458
  attribute: false
92406
92459
  },
92407
92460
 
92461
+ /**
92462
+ * Milliseconds of keyboard inactivity before the type-ahead buffer resets.
92463
+ * Increase for users who type slowly.
92464
+ * @default 500
92465
+ */
92466
+ typeaheadTimeoutMs: {
92467
+ type: Number,
92468
+ reflect: true
92469
+ },
92470
+
92408
92471
  /**
92409
92472
  * Specifies the `validityState` this element is in.
92410
92473
  */
@@ -92844,6 +92907,7 @@ class AuroSelect extends AuroElement$1 {
92844
92907
  this.addEventListener('blur', () => {
92845
92908
  this.validate();
92846
92909
  this.hasFocus = false;
92910
+ this._clearTypeaheadBuffer();
92847
92911
  });
92848
92912
  }
92849
92913
 
@@ -92857,41 +92921,89 @@ class AuroSelect extends AuroElement$1 {
92857
92921
  }
92858
92922
  }
92859
92923
 
92924
+ /**
92925
+ * Returns the lowercase, trimmed text content of a menu option.
92926
+ * @private
92927
+ * @param {HTMLElement} option - The menu option element.
92928
+ * @returns {string}
92929
+ */
92930
+ _getOptionDisplayText(option) {
92931
+ return (option.textContent || '').trim().toLowerCase();
92932
+ }
92933
+
92934
+ /**
92935
+ * Empties the type-ahead buffer and cancels any pending reset timeout.
92936
+ * Called when focus leaves the component, when Escape closes the bib, and on disconnect
92937
+ * so a stale buffer never bridges into a fresh interaction.
92938
+ * @private
92939
+ */
92940
+ _clearTypeaheadBuffer() {
92941
+ if (this._typeaheadTimeout) {
92942
+ clearTimeout(this._typeaheadTimeout);
92943
+ this._typeaheadTimeout = null;
92944
+ }
92945
+ this.typeaheadBuffer = '';
92946
+ }
92947
+
92860
92948
  /**
92861
92949
  * Updates the active option in the menu based on keyboard input.
92950
+ *
92951
+ * Implements the WAI-ARIA APG Listbox type-ahead pattern: accumulates printable
92952
+ * keystrokes into a buffer that resets after `typeaheadTimeoutMs` of inactivity.
92953
+ * A multi-character buffer matches the first option whose displayed text starts
92954
+ * with the buffer; repeating a single character cycles through options that start
92955
+ * with that character.
92862
92956
  * @private
92863
92957
  * @param {string} _key - The key pressed by the user.
92864
92958
  * @returns {void}
92865
92959
  */
92866
92960
  updateActiveOptionBasedOnKey(_key) {
92961
+ // Ignore non-printable keys (Shift, ArrowDown, Tab, etc.)
92962
+ if (typeof _key !== 'string' || _key.length !== 1) {
92963
+ return;
92964
+ }
92867
92965
 
92868
- // Get a lowercase version of the key pressed
92869
- const key = _key.toLowerCase();
92870
-
92871
- // Calculate how many times the same letter has been pressed
92872
- this.sameLetterTimes = key === this.lastLetter ? this.sameLetterTimes + 1 : 0;
92966
+ // No selectable options to match against clear any stale buffer/timer so
92967
+ // Space stays a bib toggle and the next keystroke after fresh options load
92968
+ // starts cleanly. `getActiveOptions` excludes disabled, hidden, and static
92969
+ // options (e.g. `static nomatch` placeholders). Checked BEFORE mutating
92970
+ // the buffer.
92971
+ const options = getActiveOptions(this.menu);
92972
+ if (!options.length) {
92973
+ this._clearTypeaheadBuffer();
92974
+ return;
92975
+ }
92873
92976
 
92874
- // Set last letter for tracking
92875
- this.lastLetter = key;
92977
+ const key = _key.toLowerCase();
92876
92978
 
92877
- // Get all the options that start with the last letter pressed
92878
- const letterOptions = this.menu.options.filter((option) => {
92879
- const optionText = option.value || '';
92880
- return optionText.toLowerCase().startsWith(this.lastLetter);
92881
- });
92979
+ // Reset the buffer after a period of inactivity
92980
+ if (this._typeaheadTimeout) {
92981
+ clearTimeout(this._typeaheadTimeout);
92982
+ }
92983
+ this._typeaheadTimeout = setTimeout(() => {
92984
+ this._clearTypeaheadBuffer();
92985
+ }, this.typeaheadTimeoutMs);
92882
92986
 
92883
- // If we have options that match the letter pressed
92884
- if (letterOptions.length) {
92987
+ this.typeaheadBuffer += key;
92885
92988
 
92886
- // Show the dropdown if it is not already visible
92887
- this.dropdown.show();
92989
+ const isRepeatedChar = this.typeaheadBuffer.length > 1 && new Set(this.typeaheadBuffer).size === 1;
92888
92990
 
92889
- // Get the index we're after based on how many times the letter has been pressed and the length of the letterOptions array
92890
- const index = this.sameLetterTimes < letterOptions.length ? this.sameLetterTimes : this.sameLetterTimes % letterOptions.length;
92991
+ let match = null;
92992
+ if (isRepeatedChar) {
92993
+ const matches = options.filter((option) => this._getOptionDisplayText(option).startsWith(key));
92994
+ if (matches.length) {
92995
+ const cycleIndex = (this.typeaheadBuffer.length - 1) % matches.length;
92996
+ match = matches[cycleIndex];
92997
+ }
92998
+ } else {
92999
+ match = options.find((option) => this._getOptionDisplayText(option).startsWith(this.typeaheadBuffer));
93000
+ }
92891
93001
 
92892
- // Select the new option in the menu
92893
- const newOption = letterOptions[index];
92894
- this.menu.updateActiveOption(newOption);
93002
+ if (match) {
93003
+ if (!this.dropdown.isPopoverVisible) {
93004
+ this.dropdown.show();
93005
+ }
93006
+ this.menu.updateActiveOption(match);
92895
93007
  }
92896
93008
  }
92897
93009
 
@@ -93005,6 +93117,11 @@ class AuroSelect extends AuroElement$1 {
93005
93117
  }
93006
93118
  }
93007
93119
 
93120
+ disconnectedCallback() {
93121
+ super.disconnectedCallback();
93122
+ this._clearTypeaheadBuffer();
93123
+ }
93124
+
93008
93125
  // lifecycle runs only after the element's DOM has been updated the first time
93009
93126
  firstUpdated() {
93010
93127
  // Add the tag name as an attribute if it is different than the component name