@aurodesignsystem-dev/auro-formkit 0.0.0-pr1522.3 → 0.0.0-pr1524.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 (46) 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 +79 -24
  7. package/components/combobox/demo/getting-started.min.js +79 -24
  8. package/components/combobox/demo/index.min.js +79 -24
  9. package/components/combobox/dist/auro-combobox.d.ts +10 -0
  10. package/components/combobox/dist/index.js +79 -24
  11. package/components/combobox/dist/registered.js +79 -24
  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/customize.min.js +19 -21
  17. package/components/datepicker/demo/index.min.js +19 -21
  18. package/components/datepicker/dist/index.js +19 -21
  19. package/components/datepicker/dist/registered.js +19 -21
  20. package/components/dropdown/demo/customize.min.js +1 -1
  21. package/components/dropdown/demo/getting-started.min.js +1 -1
  22. package/components/dropdown/demo/index.min.js +1 -1
  23. package/components/dropdown/dist/index.js +1 -1
  24. package/components/dropdown/dist/registered.js +1 -1
  25. package/components/form/demo/customize.min.js +179 -82
  26. package/components/form/demo/getting-started.min.js +179 -82
  27. package/components/form/demo/index.min.js +179 -82
  28. package/components/form/demo/registerDemoDeps.min.js +179 -82
  29. package/components/input/demo/customize.min.js +17 -19
  30. package/components/input/demo/getting-started.min.js +17 -19
  31. package/components/input/demo/index.min.js +17 -19
  32. package/components/input/dist/index.js +17 -19
  33. package/components/input/dist/registered.js +17 -19
  34. package/components/radio/demo/customize.min.js +1 -1
  35. package/components/radio/demo/getting-started.min.js +1 -1
  36. package/components/radio/demo/index.min.js +1 -1
  37. package/components/radio/dist/index.js +1 -1
  38. package/components/radio/dist/registered.js +1 -1
  39. package/components/select/demo/customize.min.js +62 -16
  40. package/components/select/demo/getting-started.min.js +62 -16
  41. package/components/select/demo/index.min.js +62 -16
  42. package/components/select/dist/auro-select.d.ts +6 -0
  43. package/components/select/dist/index.js +62 -16
  44. package/components/select/dist/registered.js +62 -16
  45. package/custom-elements.json +16 -2
  46. package/package.json +1 -1
@@ -11531,14 +11531,17 @@ class BaseInput extends AuroElement {
11531
11531
  * @returns {void}
11532
11532
  */
11533
11533
  notifyValueChanged() {
11534
- let inputEvent = null;
11535
-
11536
- inputEvent = new Event('input', {
11534
+ // This echoes Lit's reactive value update (and handleClickClear's
11535
+ // programmatic clear) — it is NOT a fresh user-input event. Mark it
11536
+ // `isProgrammatic` so consumers (e.g. auro-combobox) can distinguish
11537
+ // it from genuine user typing and skip clobbering their own
11538
+ // programmatic state during init-time renders.
11539
+ const inputEvent = new Event('input', {
11537
11540
  bubbles: true,
11538
11541
  composed: true,
11539
11542
  });
11543
+ inputEvent.isProgrammatic = true;
11540
11544
 
11541
- // Dispatched event to alert outside shadow DOM context of event firing.
11542
11545
  this.dispatchEvent(inputEvent);
11543
11546
  }
11544
11547
 
@@ -12251,7 +12254,7 @@ class AuroHelpText extends i$3 {
12251
12254
  }
12252
12255
  }
12253
12256
 
12254
- var formkitVersion = '202607012103';
12257
+ var formkitVersion = '202607022214';
12255
12258
 
12256
12259
  /**
12257
12260
  * @license
@@ -12549,20 +12552,15 @@ class AuroInput extends BaseInput {
12549
12552
  * @returns {void}
12550
12553
  */
12551
12554
  checkDisplayValueSlotChange() {
12552
- let nodes = this.shadowRoot.querySelector('slot[name="displayValue"]').assignedNodes();
12553
-
12554
- // Handle when DisplayValue is multi-level slot content (e.g. combobox passing displayValue to input)
12555
- if (nodes && nodes[0] && nodes[0].tagName === 'SLOT') {
12556
- nodes = nodes[0].assignedNodes();
12557
- }
12558
-
12559
- let hasContent = false;
12560
-
12561
- if (nodes.length > 0) {
12562
- hasContent = true;
12563
- }
12564
-
12565
- this.hasDisplayValueContent = hasContent;
12555
+ // flatten:true resolves through auro-combobox's forwarding slot
12556
+ // (<slot name="displayValue" slot="displayValue">) so a clone appended
12557
+ // directly to auro-input's light DOM alongside the forwarder still
12558
+ // counts as content. The prior nodes[0].tagName === 'SLOT' recursion
12559
+ // discarded any siblings past the forwarder.
12560
+ const slot = this.shadowRoot.querySelector('slot[name="displayValue"]');
12561
+ const nodes = slot.assignedNodes({ flatten: true });
12562
+
12563
+ this.hasDisplayValueContent = nodes.length > 0;
12566
12564
  }
12567
12565
 
12568
12566
  firstUpdated() {
@@ -11531,14 +11531,17 @@ class BaseInput extends AuroElement {
11531
11531
  * @returns {void}
11532
11532
  */
11533
11533
  notifyValueChanged() {
11534
- let inputEvent = null;
11535
-
11536
- inputEvent = new Event('input', {
11534
+ // This echoes Lit's reactive value update (and handleClickClear's
11535
+ // programmatic clear) — it is NOT a fresh user-input event. Mark it
11536
+ // `isProgrammatic` so consumers (e.g. auro-combobox) can distinguish
11537
+ // it from genuine user typing and skip clobbering their own
11538
+ // programmatic state during init-time renders.
11539
+ const inputEvent = new Event('input', {
11537
11540
  bubbles: true,
11538
11541
  composed: true,
11539
11542
  });
11543
+ inputEvent.isProgrammatic = true;
11540
11544
 
11541
- // Dispatched event to alert outside shadow DOM context of event firing.
11542
11545
  this.dispatchEvent(inputEvent);
11543
11546
  }
11544
11547
 
@@ -12251,7 +12254,7 @@ class AuroHelpText extends i$3 {
12251
12254
  }
12252
12255
  }
12253
12256
 
12254
- var formkitVersion = '202607012103';
12257
+ var formkitVersion = '202607022214';
12255
12258
 
12256
12259
  /**
12257
12260
  * @license
@@ -12549,20 +12552,15 @@ class AuroInput extends BaseInput {
12549
12552
  * @returns {void}
12550
12553
  */
12551
12554
  checkDisplayValueSlotChange() {
12552
- let nodes = this.shadowRoot.querySelector('slot[name="displayValue"]').assignedNodes();
12553
-
12554
- // Handle when DisplayValue is multi-level slot content (e.g. combobox passing displayValue to input)
12555
- if (nodes && nodes[0] && nodes[0].tagName === 'SLOT') {
12556
- nodes = nodes[0].assignedNodes();
12557
- }
12558
-
12559
- let hasContent = false;
12560
-
12561
- if (nodes.length > 0) {
12562
- hasContent = true;
12563
- }
12564
-
12565
- this.hasDisplayValueContent = hasContent;
12555
+ // flatten:true resolves through auro-combobox's forwarding slot
12556
+ // (<slot name="displayValue" slot="displayValue">) so a clone appended
12557
+ // directly to auro-input's light DOM alongside the forwarder still
12558
+ // counts as content. The prior nodes[0].tagName === 'SLOT' recursion
12559
+ // discarded any siblings past the forwarder.
12560
+ const slot = this.shadowRoot.querySelector('slot[name="displayValue"]');
12561
+ const nodes = slot.assignedNodes({ flatten: true });
12562
+
12563
+ this.hasDisplayValueContent = nodes.length > 0;
12566
12564
  }
12567
12565
 
12568
12566
  firstUpdated() {
@@ -11473,14 +11473,17 @@ class BaseInput extends AuroElement {
11473
11473
  * @returns {void}
11474
11474
  */
11475
11475
  notifyValueChanged() {
11476
- let inputEvent = null;
11477
-
11478
- inputEvent = new Event('input', {
11476
+ // This echoes Lit's reactive value update (and handleClickClear's
11477
+ // programmatic clear) — it is NOT a fresh user-input event. Mark it
11478
+ // `isProgrammatic` so consumers (e.g. auro-combobox) can distinguish
11479
+ // it from genuine user typing and skip clobbering their own
11480
+ // programmatic state during init-time renders.
11481
+ const inputEvent = new Event('input', {
11479
11482
  bubbles: true,
11480
11483
  composed: true,
11481
11484
  });
11485
+ inputEvent.isProgrammatic = true;
11482
11486
 
11483
- // Dispatched event to alert outside shadow DOM context of event firing.
11484
11487
  this.dispatchEvent(inputEvent);
11485
11488
  }
11486
11489
 
@@ -12193,7 +12196,7 @@ class AuroHelpText extends LitElement {
12193
12196
  }
12194
12197
  }
12195
12198
 
12196
- var formkitVersion = '202607012103';
12199
+ var formkitVersion = '202607022214';
12197
12200
 
12198
12201
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
12199
12202
  // See LICENSE in the project root for license information.
@@ -12479,20 +12482,15 @@ class AuroInput extends BaseInput {
12479
12482
  * @returns {void}
12480
12483
  */
12481
12484
  checkDisplayValueSlotChange() {
12482
- let nodes = this.shadowRoot.querySelector('slot[name="displayValue"]').assignedNodes();
12483
-
12484
- // Handle when DisplayValue is multi-level slot content (e.g. combobox passing displayValue to input)
12485
- if (nodes && nodes[0] && nodes[0].tagName === 'SLOT') {
12486
- nodes = nodes[0].assignedNodes();
12487
- }
12488
-
12489
- let hasContent = false;
12490
-
12491
- if (nodes.length > 0) {
12492
- hasContent = true;
12493
- }
12494
-
12495
- this.hasDisplayValueContent = hasContent;
12485
+ // flatten:true resolves through auro-combobox's forwarding slot
12486
+ // (<slot name="displayValue" slot="displayValue">) so a clone appended
12487
+ // directly to auro-input's light DOM alongside the forwarder still
12488
+ // counts as content. The prior nodes[0].tagName === 'SLOT' recursion
12489
+ // discarded any siblings past the forwarder.
12490
+ const slot = this.shadowRoot.querySelector('slot[name="displayValue"]');
12491
+ const nodes = slot.assignedNodes({ flatten: true });
12492
+
12493
+ this.hasDisplayValueContent = nodes.length > 0;
12496
12494
  }
12497
12495
 
12498
12496
  firstUpdated() {
@@ -11473,14 +11473,17 @@ class BaseInput extends AuroElement {
11473
11473
  * @returns {void}
11474
11474
  */
11475
11475
  notifyValueChanged() {
11476
- let inputEvent = null;
11477
-
11478
- inputEvent = new Event('input', {
11476
+ // This echoes Lit's reactive value update (and handleClickClear's
11477
+ // programmatic clear) — it is NOT a fresh user-input event. Mark it
11478
+ // `isProgrammatic` so consumers (e.g. auro-combobox) can distinguish
11479
+ // it from genuine user typing and skip clobbering their own
11480
+ // programmatic state during init-time renders.
11481
+ const inputEvent = new Event('input', {
11479
11482
  bubbles: true,
11480
11483
  composed: true,
11481
11484
  });
11485
+ inputEvent.isProgrammatic = true;
11482
11486
 
11483
- // Dispatched event to alert outside shadow DOM context of event firing.
11484
11487
  this.dispatchEvent(inputEvent);
11485
11488
  }
11486
11489
 
@@ -12193,7 +12196,7 @@ class AuroHelpText extends LitElement {
12193
12196
  }
12194
12197
  }
12195
12198
 
12196
- var formkitVersion = '202607012103';
12199
+ var formkitVersion = '202607022214';
12197
12200
 
12198
12201
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
12199
12202
  // See LICENSE in the project root for license information.
@@ -12479,20 +12482,15 @@ class AuroInput extends BaseInput {
12479
12482
  * @returns {void}
12480
12483
  */
12481
12484
  checkDisplayValueSlotChange() {
12482
- let nodes = this.shadowRoot.querySelector('slot[name="displayValue"]').assignedNodes();
12483
-
12484
- // Handle when DisplayValue is multi-level slot content (e.g. combobox passing displayValue to input)
12485
- if (nodes && nodes[0] && nodes[0].tagName === 'SLOT') {
12486
- nodes = nodes[0].assignedNodes();
12487
- }
12488
-
12489
- let hasContent = false;
12490
-
12491
- if (nodes.length > 0) {
12492
- hasContent = true;
12493
- }
12494
-
12495
- this.hasDisplayValueContent = hasContent;
12485
+ // flatten:true resolves through auro-combobox's forwarding slot
12486
+ // (<slot name="displayValue" slot="displayValue">) so a clone appended
12487
+ // directly to auro-input's light DOM alongside the forwarder still
12488
+ // counts as content. The prior nodes[0].tagName === 'SLOT' recursion
12489
+ // discarded any siblings past the forwarder.
12490
+ const slot = this.shadowRoot.querySelector('slot[name="displayValue"]');
12491
+ const nodes = slot.assignedNodes({ flatten: true });
12492
+
12493
+ this.hasDisplayValueContent = nodes.length > 0;
12496
12494
  }
12497
12495
 
12498
12496
  firstUpdated() {
@@ -1227,7 +1227,7 @@ class AuroHelpText extends i$2 {
1227
1227
  }
1228
1228
  }
1229
1229
 
1230
- var formkitVersion = '202607012103';
1230
+ var formkitVersion = '202607022214';
1231
1231
 
1232
1232
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
1233
1233
  // See LICENSE in the project root for license information.
@@ -1227,7 +1227,7 @@ class AuroHelpText extends i$2 {
1227
1227
  }
1228
1228
  }
1229
1229
 
1230
- var formkitVersion = '202607012103';
1230
+ var formkitVersion = '202607022214';
1231
1231
 
1232
1232
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
1233
1233
  // See LICENSE in the project root for license information.
@@ -1227,7 +1227,7 @@ class AuroHelpText extends i$2 {
1227
1227
  }
1228
1228
  }
1229
1229
 
1230
- var formkitVersion = '202607012103';
1230
+ var formkitVersion = '202607022214';
1231
1231
 
1232
1232
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
1233
1233
  // See LICENSE in the project root for license information.
@@ -1166,7 +1166,7 @@ class AuroHelpText extends LitElement {
1166
1166
  }
1167
1167
  }
1168
1168
 
1169
- var formkitVersion = '202607012103';
1169
+ var formkitVersion = '202607022214';
1170
1170
 
1171
1171
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
1172
1172
  // See LICENSE in the project root for license information.
@@ -1166,7 +1166,7 @@ class AuroHelpText extends LitElement {
1166
1166
  }
1167
1167
  }
1168
1168
 
1169
- var formkitVersion = '202607012103';
1169
+ var formkitVersion = '202607022214';
1170
1170
 
1171
1171
  // Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
1172
1172
  // See LICENSE in the project root for license information.
@@ -904,9 +904,6 @@ function navigateArrow(component, direction, options = {}) {
904
904
  * @param {HTMLElement | null | undefined} menu - The auro-menu element.
905
905
  * @returns {Array<HTMLElement>} Non-disabled options, empty array when none.
906
906
  */
907
- function getEnabledOptions(menu) {
908
- return (menu?.options || []).filter((option) => !option.disabled);
909
- }
910
907
 
911
908
  /**
912
909
  * Returns the active (selectable + visible) options for type-ahead navigation.
@@ -976,8 +973,10 @@ const selectKeyboardStrategy = {
976
973
  End(component, evt, ctx) {
977
974
  evt.preventDefault();
978
975
  evt.stopPropagation();
979
- // `pop()` is safe here: getEnabledOptions returns a fresh filtered array.
980
- const lastOption = getEnabledOptions(component.menu).pop();
976
+ // `pop()` is safe here: getActiveOptions returns a fresh filtered array.
977
+ // Uses "active" (not "enabled") so hidden and static rows — which a screen
978
+ // reader must not announce as focused — are skipped.
979
+ const lastOption = getActiveOptions(component.menu).pop();
981
980
  if (!lastOption) {
982
981
  return;
983
982
  }
@@ -1008,7 +1007,7 @@ const selectKeyboardStrategy = {
1008
1007
  Home(component, evt, ctx) {
1009
1008
  evt.preventDefault();
1010
1009
  evt.stopPropagation();
1011
- const [firstOption] = getEnabledOptions(component.menu);
1010
+ const [firstOption] = getActiveOptions(component.menu);
1012
1011
  if (!firstOption) {
1013
1012
  return;
1014
1013
  }
@@ -1033,6 +1032,15 @@ const selectKeyboardStrategy = {
1033
1032
  },
1034
1033
 
1035
1034
  default(component, evt, ctx) {
1035
+ // Ignore keys chorded with Ctrl/Meta/Alt so browser/OS shortcuts
1036
+ // (Cmd+C, Ctrl+V, Alt+X, Cmd+Space, …) don't leak into typeahead
1037
+ // or toggle the bib. Native <select> ignores modified keys.
1038
+ // ArrowUp/ArrowDown handle modifier+arrow explicitly above; this
1039
+ // guard only affects the default (printable/Space) branch.
1040
+ if (evt.ctrlKey || evt.metaKey || evt.altKey) {
1041
+ return;
1042
+ }
1043
+
1036
1044
  // Space resolves to either typeahead-buffer extension or bib toggle
1037
1045
  // depending on whether a type-ahead buffer is active. Mirrors native
1038
1046
  // <select> and the WAI-ARIA APG Listbox guidance: mid-typeahead space
@@ -4987,7 +4995,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
4987
4995
  }
4988
4996
  };
4989
4997
 
4990
- var formkitVersion$1 = '202607012103';
4998
+ var formkitVersion$1 = '202607022214';
4991
4999
 
4992
5000
  class AuroElement extends i$2 {
4993
5001
  static get properties() {
@@ -7026,7 +7034,7 @@ class AuroHelpText extends i$2 {
7026
7034
  }
7027
7035
  }
7028
7036
 
7029
- var formkitVersion = '202607012103';
7037
+ var formkitVersion = '202607022214';
7030
7038
 
7031
7039
  var styleCss$2 = i$5`.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}`;
7032
7040
 
@@ -7590,8 +7598,11 @@ class AuroSelect extends AuroElement$1 {
7590
7598
  } else if (this.multiSelect && Array.isArray(this.optionSelected) && this.optionSelected.length > 0) {
7591
7599
  this.menu.updateActiveOption(this.optionSelected[0]);
7592
7600
  } else {
7593
- // If no activeOption has yet to be set, then make the first enabled option active by default
7594
- const [firstActive] = getEnabledOptions(this.menu);
7601
+ // If no activeOption has yet to be set, make the first active option
7602
+ // (non-disabled, non-hidden, non-static) active by default. "Active" —
7603
+ // not just "enabled" — so hidden rows and static placeholders never
7604
+ // land in aria-activedescendant on open.
7605
+ const [firstActive] = getActiveOptions(this.menu);
7595
7606
  this.menu.updateActiveOption(firstActive);
7596
7607
  }
7597
7608
  }
@@ -7837,6 +7848,12 @@ class AuroSelect extends AuroElement$1 {
7837
7848
 
7838
7849
  /**
7839
7850
  * Binds all behavior needed to the menu after rendering.
7851
+ *
7852
+ * The `<auro-menu>` reference is captured once and not re-targeted on
7853
+ * `slotchange`. Runtime option mutations are covered via
7854
+ * `auroMenu-optionsChange`, so swap options inside the menu freely; do not
7855
+ * swap the `<auro-menu>` element itself under a live select — remount the
7856
+ * parent `<auro-select>` instead.
7840
7857
  * @private
7841
7858
  * @returns {void}
7842
7859
  */
@@ -7895,6 +7912,15 @@ class AuroSelect extends AuroElement$1 {
7895
7912
  if (this.menu.optionSelected !== undefined) {
7896
7913
  return;
7897
7914
  }
7915
+ // Skip when the select is already cleared (valueless click with no
7916
+ // prior selection): value/optionSelected are already empty and there
7917
+ // is no stale trigger text to refresh, so updateDisplayedValue would
7918
+ // just churn the DOM and request a needless dropdown re-render.
7919
+ const hasStaleState = this.value !== undefined ||
7920
+ (this.multiSelect ? this.optionSelected?.length > 0 : this.optionSelected !== undefined);
7921
+ if (!hasStaleState) {
7922
+ return;
7923
+ }
7898
7924
  this.value = undefined;
7899
7925
  this.optionSelected = this.multiSelect ? [] : undefined;
7900
7926
  // The trigger label is rendered imperatively into #value, so a property
@@ -7924,10 +7950,15 @@ class AuroSelect extends AuroElement$1 {
7924
7950
  if (this.dropdown.isPopoverVisible) {
7925
7951
  announceToScreenReader(this._getAnnouncementRoot(), message);
7926
7952
  } else {
7927
- // Typeahead-on-closed fires this event before `show()` flips
7928
- // isPopoverVisible. Defer so the announcement targets the bib's
7929
- // live region once the fullscreen <dialog> opens otherwise it
7930
- // lands in the host root, which is inert under the active modal.
7953
+ // Typeahead-on-closed calls updateActiveOption() before show(), so
7954
+ // this handler runs with isPopoverVisible still false. queueMicrotask
7955
+ // is safe because show() showBib() flips isPopoverVisible and
7956
+ // dialog.showModal() both run synchronously in the same task; the
7957
+ // microtask queue only drains once _handleTypeahead unwinds, by
7958
+ // which point _getAnnouncementRoot() resolves to the bib's shadow
7959
+ // root inside the now-open modal. Do NOT switch to auroDropdown-toggled
7960
+ // — it fires before showModal(), landing the announcement in the
7961
+ // host root while the dialog is still not-yet-modal.
7931
7962
  queueMicrotask(() => announceToScreenReader(this._getAnnouncementRoot(), message));
7932
7963
  }
7933
7964
  }
@@ -8321,6 +8352,13 @@ class AuroSelect extends AuroElement$1 {
8321
8352
  }
8322
8353
 
8323
8354
  if (changedProperties.has('value')) {
8355
+ // A value change ends the current interaction — whether it came from a
8356
+ // user commit, programmatic assignment, or reset(). Clear the buffer so
8357
+ // a stale prefix does not concatenate onto the next keystroke while the
8358
+ // host still has focus (the blur listener would otherwise be the only
8359
+ // focus-retained clear point, and hideBib() below does not blur).
8360
+ this._clearTypeaheadBuffer();
8361
+
8324
8362
  this.setMenuValue(this.value);
8325
8363
 
8326
8364
  this._updateNativeSelect();
@@ -8376,6 +8414,9 @@ class AuroSelect extends AuroElement$1 {
8376
8414
  * @returns {void}
8377
8415
  */
8378
8416
  reset() {
8417
+ // Defense-in-depth: updated()'s value-change branch also clears, but
8418
+ // reset-to-same-value (e.g. undefined → undefined) skips that path.
8419
+ this._clearTypeaheadBuffer();
8379
8420
  this.menu.reset();
8380
8421
  this.validation.reset(this);
8381
8422
  }
@@ -8398,8 +8439,13 @@ class AuroSelect extends AuroElement$1 {
8398
8439
  // Hidden native <select> has no `multiple` attribute, so any change it fires
8399
8440
  // is a single raw value — applying it in multiSelect mode would collapse the
8400
8441
  // JSON-array `value` shape. Bfcache/autofill can reach this on a name-bearing
8401
- // form control even with aria-hidden/tabindex=-1.
8402
- if (this.multiSelect) return;
8442
+ // form control even with aria-hidden/tabindex=-1, so revert to the expected
8443
+ // mirror (formattedValue[0]) rather than letting the native select drift and
8444
+ // silently submit the autofilled scalar under `name`.
8445
+ if (this.multiSelect) {
8446
+ this._updateNativeSelect();
8447
+ return;
8448
+ }
8403
8449
 
8404
8450
  const selectedOption = event.target.options[event.target.selectedIndex];
8405
8451
  if (!selectedOption) return;