@aurodesignsystem-dev/auro-formkit 0.0.0-pr1530.0 → 0.0.0-pr1530.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/components/checkbox/demo/customize.min.js +1 -1
  2. package/components/checkbox/demo/getting-started.min.js +1 -1
  3. package/components/checkbox/demo/index.min.js +1 -1
  4. package/components/checkbox/dist/index.js +1 -1
  5. package/components/checkbox/dist/registered.js +1 -1
  6. package/components/combobox/demo/customize.min.js +42 -29
  7. package/components/combobox/demo/getting-started.min.js +42 -29
  8. package/components/combobox/demo/index.min.js +42 -29
  9. package/components/combobox/dist/index.js +42 -29
  10. package/components/combobox/dist/registered.js +42 -29
  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/accessibility.md +7 -7
  16. package/components/datepicker/demo/customize.min.js +121 -47
  17. package/components/datepicker/demo/index.min.js +121 -47
  18. package/components/datepicker/demo/keyboard-behavior.md +3 -3
  19. package/components/datepicker/demo/voiceover.md +3 -3
  20. package/components/datepicker/demo/why-datepicker.md +2 -2
  21. package/components/datepicker/dist/auro-calendar-cell.d.ts +9 -0
  22. package/components/datepicker/dist/auro-calendar.d.ts +9 -0
  23. package/components/datepicker/dist/index.js +121 -47
  24. package/components/datepicker/dist/registered.js +121 -47
  25. package/components/dropdown/demo/customize.min.js +1 -1
  26. package/components/dropdown/demo/getting-started.min.js +1 -1
  27. package/components/dropdown/demo/index.min.js +1 -1
  28. package/components/dropdown/dist/index.js +1 -1
  29. package/components/dropdown/dist/registered.js +1 -1
  30. package/components/form/demo/customize.min.js +269 -123
  31. package/components/form/demo/getting-started.min.js +269 -123
  32. package/components/form/demo/index.min.js +269 -123
  33. package/components/form/demo/registerDemoDeps.min.js +269 -123
  34. package/components/input/demo/customize.min.js +40 -27
  35. package/components/input/demo/getting-started.min.js +40 -27
  36. package/components/input/demo/index.min.js +40 -27
  37. package/components/input/dist/base-input.d.ts +20 -4
  38. package/components/input/dist/index.js +40 -27
  39. package/components/input/dist/registered.js +40 -27
  40. package/components/radio/demo/customize.min.js +1 -1
  41. package/components/radio/demo/getting-started.min.js +1 -1
  42. package/components/radio/demo/index.min.js +1 -1
  43. package/components/radio/dist/index.js +1 -1
  44. package/components/radio/dist/registered.js +1 -1
  45. package/components/select/demo/customize.min.js +62 -16
  46. package/components/select/demo/getting-started.min.js +62 -16
  47. package/components/select/demo/index.min.js +62 -16
  48. package/components/select/dist/auro-select.d.ts +6 -0
  49. package/components/select/dist/index.js +62 -16
  50. package/components/select/dist/registered.js +62 -16
  51. package/custom-elements.json +427 -343
  52. package/package.json +1 -1
@@ -10599,14 +10599,16 @@ 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;
10602
10606
  this.max = undefined;
10603
10607
  this.maxLength = undefined;
10604
10608
  this.min = undefined;
10605
10609
  this.minLength = undefined;
10606
10610
  this.noValidate = false;
10607
10611
  this.onDark = false;
10608
- // Raw values returned from the input mask before model normalization.
10609
- this._rawMaskValue = undefined;
10610
10612
  this.required = false;
10611
10613
  this.setCustomValidityForType = undefined;
10612
10614
  // Credit Card is intentionally excluded — its mask manages the cursor
@@ -10764,7 +10766,8 @@ class BaseInput extends AuroElement {
10764
10766
  */
10765
10767
  format: {
10766
10768
  type: String,
10767
- reflect: true
10769
+ reflect: true,
10770
+ noAccessor: true
10768
10771
  },
10769
10772
 
10770
10773
  /**
@@ -11102,6 +11105,34 @@ class BaseInput extends AuroElement {
11102
11105
  return this.max && dateFormatter.isValidDate(this.max) ? dateFormatter.stringToDateInstance(this.max) : undefined;
11103
11106
  }
11104
11107
 
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
+
11105
11136
  connectedCallback() {
11106
11137
  super.connectedCallback();
11107
11138
 
@@ -11149,15 +11180,6 @@ class BaseInput extends AuroElement {
11149
11180
 
11150
11181
  this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
11151
11182
 
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
-
11161
11183
  // use validity message override if declared when initializing the component
11162
11184
  if (this.hasAttribute('setCustomValidity')) {
11163
11185
  this.ValidityMessageOverride = this.setCustomValidity;
@@ -11264,12 +11286,10 @@ class BaseInput extends AuroElement {
11264
11286
  updated(changedProperties) {
11265
11287
  super.updated(changedProperties);
11266
11288
 
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).
11289
+ // When locale changes, auto-derive format unless the consumer explicitly set one.
11269
11290
  if (changedProperties.has('locale') && !changedProperties.has('format') && this.type === 'date') {
11270
- const previousLocaleFormat = getDateFormatFromLocale(changedProperties.get('locale'));
11271
- if (!this.format || this.format.toLowerCase() === previousLocaleFormat) {
11272
- this.format = getDateFormatFromLocale(this.locale);
11291
+ if (!this._userSetFormat) {
11292
+ this._setFormatFromLocale(getDateFormatFromLocale(this.locale));
11273
11293
  }
11274
11294
  }
11275
11295
 
@@ -11440,9 +11460,6 @@ class BaseInput extends AuroElement {
11440
11460
  this.maskInstance.on('accept', () => {
11441
11461
  if (this._configuringMask) return;
11442
11462
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
11443
- if (this.type === "date") {
11444
- this._rawMaskValue = this.maskInstance.value;
11445
- }
11446
11463
  });
11447
11464
 
11448
11465
  // Mask fires 'complete' on the restore step below for any value that
@@ -11450,9 +11467,6 @@ class BaseInput extends AuroElement {
11450
11467
  this.maskInstance.on('complete', () => {
11451
11468
  if (this._configuringMask) return;
11452
11469
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
11453
- if (this.type === "date") {
11454
- this._rawMaskValue = this.maskInstance.value;
11455
- }
11456
11470
  });
11457
11471
 
11458
11472
  // Write existingValue through the mask (not the input directly) so
@@ -11689,8 +11703,7 @@ class BaseInput extends AuroElement {
11689
11703
 
11690
11704
  // Set default date format if type=date and no format is defined
11691
11705
  if (this.type === "date" && !this.format) {
11692
- // Use locale to determine default date format
11693
- this.format = this.util.getDateMaskFromLocale().toLowerCase();
11706
+ this._setFormatFromLocale(this.util.getDateMaskFromLocale().toLowerCase());
11694
11707
  this.util.updateFormat(this.format);
11695
11708
  }
11696
11709
  }
@@ -11719,7 +11732,7 @@ class BaseInput extends AuroElement {
11719
11732
  const creditCard = this.matchInputValueToCreditCard();
11720
11733
  const previousFormat = this.format;
11721
11734
 
11722
- this.format = creditCard.maskFormat;
11735
+ this._setFormatFromLocale(creditCard.maskFormat);
11723
11736
 
11724
11737
  this.maxLength = creditCard.formatLength;
11725
11738
  this.minLength = creditCard.formatMinLength;
@@ -12193,7 +12206,7 @@ class AuroHelpText extends LitElement {
12193
12206
  }
12194
12207
  }
12195
12208
 
12196
- var formkitVersion = '202607021905';
12209
+ var formkitVersion = '202607022225';
12197
12210
 
12198
12211
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
12199
12212
  // 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 = '202607021905';
1230
+ var formkitVersion = '202607022225';
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 = '202607021905';
1230
+ var formkitVersion = '202607022225';
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 = '202607021905';
1230
+ var formkitVersion = '202607022225';
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 = '202607021905';
1169
+ var formkitVersion = '202607022225';
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 = '202607021905';
1169
+ var formkitVersion = '202607022225';
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 = '202607021905';
4998
+ var formkitVersion$1 = '202607022225';
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 = '202607021905';
7037
+ var formkitVersion = '202607022225';
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 = '202607021905';
4998
+ var formkitVersion$1 = '202607022225';
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 = '202607021905';
7037
+ var formkitVersion = '202607022225';
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;