@aurodesignsystem-dev/auro-formkit 0.0.0-pr1531.1 → 0.0.0-pr1532.0

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 +29 -42
  7. package/components/combobox/demo/getting-started.min.js +29 -42
  8. package/components/combobox/demo/index.min.js +29 -42
  9. package/components/combobox/dist/index.js +29 -42
  10. package/components/combobox/dist/registered.js +29 -42
  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 +29 -42
  16. package/components/datepicker/demo/index.min.js +29 -42
  17. package/components/datepicker/dist/index.js +29 -42
  18. package/components/datepicker/dist/registered.js +29 -42
  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.min.js +151 -144
  25. package/components/form/demo/getting-started.min.js +151 -144
  26. package/components/form/demo/index.min.js +151 -144
  27. package/components/form/demo/registerDemoDeps.min.js +151 -144
  28. package/components/input/demo/customize.min.js +27 -40
  29. package/components/input/demo/getting-started.min.js +27 -40
  30. package/components/input/demo/index.min.js +27 -40
  31. package/components/input/dist/base-input.d.ts +4 -20
  32. package/components/input/dist/index.js +27 -40
  33. package/components/input/dist/registered.js +27 -40
  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 +1561 -1615
  46. package/package.json +1 -1
@@ -10599,16 +10599,14 @@ class BaseInput extends AuroElement {
10599
10599
  this.label = 'Input label is undefined';
10600
10600
  this.layout = 'classic';
10601
10601
  this.locale = 'en-US';
10602
- this._format = undefined;
10603
-
10604
- /** @private */
10605
- this._userSetFormat = false;
10606
10602
  this.max = undefined;
10607
10603
  this.maxLength = undefined;
10608
10604
  this.min = undefined;
10609
10605
  this.minLength = undefined;
10610
10606
  this.noValidate = false;
10611
10607
  this.onDark = false;
10608
+ // Raw values returned from the input mask before model normalization.
10609
+ this._rawMaskValue = undefined;
10612
10610
  this.required = false;
10613
10611
  this.setCustomValidityForType = undefined;
10614
10612
  // Credit Card is intentionally excluded — its mask manages the cursor
@@ -10766,8 +10764,7 @@ class BaseInput extends AuroElement {
10766
10764
  */
10767
10765
  format: {
10768
10766
  type: String,
10769
- reflect: true,
10770
- noAccessor: true
10767
+ reflect: true
10771
10768
  },
10772
10769
 
10773
10770
  /**
@@ -11105,34 +11102,6 @@ class BaseInput extends AuroElement {
11105
11102
  return this.max && dateFormatter.isValidDate(this.max) ? dateFormatter.stringToDateInstance(this.max) : undefined;
11106
11103
  }
11107
11104
 
11108
- get format() {
11109
- return this._format;
11110
- }
11111
-
11112
- /**
11113
- * Overrides LitElement's generated accessor so we can track whether the
11114
- * consumer explicitly set `format`. Locale-derived updates use
11115
- * `_setFormatFromLocale` instead, which skips this flag.
11116
- */
11117
- set format(value) {
11118
- const oldValue = this._format;
11119
- this._format = value ? value.toLowerCase() : value;
11120
- this._userSetFormat = Boolean(value);
11121
- this.requestUpdate('format', oldValue);
11122
- }
11123
-
11124
- /**
11125
- * Sets format without marking it as user-set. Used by locale auto-derive
11126
- * so that a subsequent locale change can still update the format.
11127
- * @private
11128
- * @param {string} value
11129
- */
11130
- _setFormatFromLocale(value) {
11131
- const oldValue = this._format;
11132
- this._format = value ? value.toLowerCase() : value;
11133
- this.requestUpdate('format', oldValue);
11134
- }
11135
-
11136
11105
  connectedCallback() {
11137
11106
  super.connectedCallback();
11138
11107
 
@@ -11180,6 +11149,15 @@ class BaseInput extends AuroElement {
11180
11149
 
11181
11150
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
11182
11151
 
11152
+ // Normalize the format token to lowercase so case-mixed values supplied
11153
+ // via attribute (e.g. `format="MM/DD/YYYY"`) hit the `dateFormatMap`
11154
+ // lookup inside `setCustomHelpTextMessage`. Without this, an uppercase
11155
+ // format silently misses the map and leaves `setCustomValidityForType`
11156
+ // unset.
11157
+ if (this.format) {
11158
+ this.format = this.format.toLowerCase();
11159
+ }
11160
+
11183
11161
  // use validity message override if declared when initializing the component
11184
11162
  if (this.hasAttribute('setCustomValidity')) {
11185
11163
  this.ValidityMessageOverride = this.setCustomValidity;
@@ -11286,10 +11264,12 @@ class BaseInput extends AuroElement {
11286
11264
  updated(changedProperties) {
11287
11265
  super.updated(changedProperties);
11288
11266
 
11289
- // When locale changes, auto-derive format unless the consumer explicitly set one.
11267
+ // When locale changes without an explicit format override, derive format from the new locale.
11268
+ // Only runs if the current format is still the previous locale's default (not user-overridden).
11290
11269
  if (changedProperties.has('locale') && !changedProperties.has('format') && this.type === 'date') {
11291
- if (!this._userSetFormat) {
11292
- this._setFormatFromLocale(getDateFormatFromLocale(this.locale));
11270
+ const previousLocaleFormat = getDateFormatFromLocale(changedProperties.get('locale'));
11271
+ if (!this.format || this.format.toLowerCase() === previousLocaleFormat) {
11272
+ this.format = getDateFormatFromLocale(this.locale);
11293
11273
  }
11294
11274
  }
11295
11275
 
@@ -11460,6 +11440,9 @@ class BaseInput extends AuroElement {
11460
11440
  this.maskInstance.on('accept', () => {
11461
11441
  if (this._configuringMask) return;
11462
11442
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
11443
+ if (this.type === "date") {
11444
+ this._rawMaskValue = this.maskInstance.value;
11445
+ }
11463
11446
  });
11464
11447
 
11465
11448
  // Mask fires 'complete' on the restore step below for any value that
@@ -11467,6 +11450,9 @@ class BaseInput extends AuroElement {
11467
11450
  this.maskInstance.on('complete', () => {
11468
11451
  if (this._configuringMask) return;
11469
11452
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
11453
+ if (this.type === "date") {
11454
+ this._rawMaskValue = this.maskInstance.value;
11455
+ }
11470
11456
  });
11471
11457
 
11472
11458
  // Write existingValue through the mask (not the input directly) so
@@ -11703,7 +11689,8 @@ class BaseInput extends AuroElement {
11703
11689
 
11704
11690
  // Set default date format if type=date and no format is defined
11705
11691
  if (this.type === "date" && !this.format) {
11706
- this._setFormatFromLocale(this.util.getDateMaskFromLocale().toLowerCase());
11692
+ // Use locale to determine default date format
11693
+ this.format = this.util.getDateMaskFromLocale().toLowerCase();
11707
11694
  this.util.updateFormat(this.format);
11708
11695
  }
11709
11696
  }
@@ -11732,7 +11719,7 @@ class BaseInput extends AuroElement {
11732
11719
  const creditCard = this.matchInputValueToCreditCard();
11733
11720
  const previousFormat = this.format;
11734
11721
 
11735
- this._setFormatFromLocale(creditCard.maskFormat);
11722
+ this.format = creditCard.maskFormat;
11736
11723
 
11737
11724
  this.maxLength = creditCard.formatLength;
11738
11725
  this.minLength = creditCard.formatMinLength;
@@ -12206,7 +12193,7 @@ class AuroHelpText extends LitElement {
12206
12193
  }
12207
12194
  }
12208
12195
 
12209
- var formkitVersion = '202607022150';
12196
+ var formkitVersion = '202607022008';
12210
12197
 
12211
12198
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
12212
12199
  // 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 = '202607022150';
1230
+ var formkitVersion = '202607022008';
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 = '202607022150';
1230
+ var formkitVersion = '202607022008';
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 = '202607022150';
1230
+ var formkitVersion = '202607022008';
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 = '202607022150';
1169
+ var formkitVersion = '202607022008';
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 = '202607022150';
1169
+ var formkitVersion = '202607022008';
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 = '202607022150';
4998
+ var formkitVersion$1 = '202607022008';
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 = '202607022150';
7037
+ var formkitVersion = '202607022008';
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;
@@ -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 = '202607022150';
4998
+ var formkitVersion$1 = '202607022008';
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 = '202607022150';
7037
+ var formkitVersion = '202607022008';
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;