@aurodesignsystem-dev/auro-formkit 0.0.0-pr1508.0 → 0.0.0-pr1508.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 (141) hide show
  1. package/components/bibtemplate/dist/index.js +1 -1
  2. package/components/bibtemplate/dist/registered.js +1 -1
  3. package/components/checkbox/demo/customize.min.js +8 -6
  4. package/components/checkbox/demo/getting-started.min.js +8 -6
  5. package/components/checkbox/demo/index.min.js +8 -6
  6. package/components/checkbox/dist/index.js +8 -6
  7. package/components/checkbox/dist/registered.js +8 -6
  8. package/components/combobox/README.md +1 -1
  9. package/components/combobox/demo/customize.md +2 -10
  10. package/components/combobox/demo/customize.min.js +386 -305
  11. package/components/combobox/demo/getting-started.min.js +386 -301
  12. package/components/combobox/demo/index.md +1 -1
  13. package/components/combobox/demo/index.min.js +386 -301
  14. package/components/combobox/demo/keyboard-behavior.md +2 -142
  15. package/components/combobox/demo/readme.md +1 -1
  16. package/components/combobox/demo/why-combobox.md +2 -2
  17. package/components/combobox/dist/auro-combobox.d.ts +23 -16
  18. package/components/combobox/dist/index.js +385 -300
  19. package/components/combobox/dist/registered.js +385 -300
  20. package/components/counter/demo/customize.min.js +18 -8
  21. package/components/counter/demo/index.min.js +18 -8
  22. package/components/counter/dist/index.js +18 -8
  23. package/components/counter/dist/registered.js +18 -8
  24. package/components/datepicker/demo/accessibility.md +2 -1
  25. package/components/datepicker/demo/api.md +63 -62
  26. package/components/datepicker/demo/customize.md +12 -1
  27. package/components/datepicker/demo/customize.min.js +932 -335
  28. package/components/datepicker/demo/index.min.js +932 -335
  29. package/components/datepicker/dist/{src/auro-calendar-cell.d.ts → auro-calendar-cell.d.ts} +20 -3
  30. package/components/datepicker/dist/{src/auro-calendar.d.ts → auro-calendar.d.ts} +121 -7
  31. package/components/datepicker/dist/{src/auro-datepicker.d.ts → auro-datepicker.d.ts} +78 -5
  32. package/components/datepicker/dist/blackoutUtils.d.ts +43 -0
  33. package/components/datepicker/dist/index.js +932 -335
  34. package/components/datepicker/dist/registered.js +932 -335
  35. package/components/dropdown/demo/customize.min.js +2 -1
  36. package/components/dropdown/demo/getting-started.min.js +2 -1
  37. package/components/dropdown/demo/index.min.js +2 -1
  38. package/components/dropdown/dist/index.js +2 -1
  39. package/components/dropdown/dist/registered.js +2 -1
  40. package/components/form/demo/customize.min.js +1690 -826
  41. package/components/form/demo/getting-started.min.js +1690 -826
  42. package/components/form/demo/index.min.js +1690 -826
  43. package/components/form/demo/registerDemoDeps.min.js +1690 -826
  44. package/components/input/demo/api.md +5 -5
  45. package/components/input/demo/customize.md +8 -8
  46. package/components/input/demo/customize.min.js +137 -95
  47. package/components/input/demo/getting-started.min.js +137 -95
  48. package/components/input/demo/index.min.js +137 -95
  49. package/components/input/dist/base-input.d.ts +33 -44
  50. package/components/input/dist/index.js +150 -96
  51. package/components/input/dist/registered.js +137 -95
  52. package/components/radio/demo/customize.min.js +8 -6
  53. package/components/radio/demo/getting-started.min.js +8 -6
  54. package/components/radio/demo/index.min.js +8 -6
  55. package/components/radio/dist/index.js +8 -6
  56. package/components/radio/dist/registered.js +8 -6
  57. package/components/select/demo/customize.md +86 -0
  58. package/components/select/demo/customize.min.js +194 -68
  59. package/components/select/demo/getting-started.min.js +196 -115
  60. package/components/select/demo/index.min.js +194 -68
  61. package/components/select/demo/keyboard-behavior.md +18 -4
  62. package/components/select/dist/auro-select.d.ts +20 -8
  63. package/components/select/dist/index.js +194 -68
  64. package/components/select/dist/registered.js +194 -68
  65. package/custom-elements.json +2365 -1819
  66. package/package.json +6 -2
  67. package/components/checkbox/demo/customize.js +0 -22
  68. package/components/checkbox/demo/demo-support.js +0 -1
  69. package/components/checkbox/demo/getting-started.js +0 -22
  70. package/components/checkbox/demo/index.js +0 -8
  71. package/components/checkbox/demo/styles.scss +0 -1
  72. package/components/combobox/demo/customize.js +0 -24
  73. package/components/combobox/demo/demo-support.js +0 -1
  74. package/components/combobox/demo/getting-started.js +0 -21
  75. package/components/combobox/demo/index.js +0 -23
  76. package/components/combobox/demo/styles.scss +0 -1
  77. package/components/counter/demo/customize.js +0 -21
  78. package/components/counter/demo/demo-support.js +0 -1
  79. package/components/counter/demo/index.js +0 -21
  80. package/components/counter/demo/styles.scss +0 -1
  81. package/components/datepicker/demo/customize.js +0 -17
  82. package/components/datepicker/demo/demo-support.js +0 -1
  83. package/components/datepicker/demo/index.js +0 -23
  84. package/components/datepicker/demo/styles.scss +0 -1
  85. package/components/dropdown/demo/customize.js +0 -9
  86. package/components/dropdown/demo/demo-support.js +0 -1
  87. package/components/dropdown/demo/getting-started.js +0 -9
  88. package/components/dropdown/demo/index.js +0 -16
  89. package/components/dropdown/demo/styles.scss +0 -1
  90. package/components/form/demo/customize.js +0 -28
  91. package/components/form/demo/demo-support.js +0 -1
  92. package/components/form/demo/getting-started.js +0 -9
  93. package/components/form/demo/index.js +0 -5
  94. package/components/form/demo/registerDemoDeps.js +0 -23
  95. package/components/form/demo/styles.scss +0 -1
  96. package/components/input/demo/customize.js +0 -25
  97. package/components/input/demo/demo-support.js +0 -1
  98. package/components/input/demo/getting-started.js +0 -8
  99. package/components/input/demo/index.js +0 -8
  100. package/components/input/demo/styles.css +0 -974
  101. package/components/input/demo/styles.scss +0 -1
  102. package/components/menu/demo/demo-support.js +0 -1
  103. package/components/menu/demo/index.js +0 -25
  104. package/components/menu/demo/styles.scss +0 -1
  105. package/components/radio/demo/customize.js +0 -22
  106. package/components/radio/demo/demo-support.js +0 -1
  107. package/components/radio/demo/getting-started.js +0 -24
  108. package/components/radio/demo/index.js +0 -8
  109. package/components/radio/demo/styles.scss +0 -1
  110. package/components/select/demo/customize.js +0 -11
  111. package/components/select/demo/demo-support.js +0 -1
  112. package/components/select/demo/getting-started.js +0 -26
  113. package/components/select/demo/index.js +0 -11
  114. package/components/select/demo/styles.scss +0 -1
  115. /package/components/datepicker/dist/{src/auro-calendar-month.d.ts → auro-calendar-month.d.ts} +0 -0
  116. /package/components/datepicker/dist/{src/buttonVersion.d.ts → buttonVersion.d.ts} +0 -0
  117. /package/components/datepicker/dist/{src/datepickerKeyboardStrategy.d.ts → datepickerKeyboardStrategy.d.ts} +0 -0
  118. /package/components/datepicker/dist/{src/iconVersion.d.ts → iconVersion.d.ts} +0 -0
  119. /package/components/datepicker/dist/{src/index.d.ts → index.d.ts} +0 -0
  120. /package/components/datepicker/dist/{src/popoverVersion.d.ts → popoverVersion.d.ts} +0 -0
  121. /package/components/datepicker/dist/{src/styles → styles}/classic/color-css.d.ts +0 -0
  122. /package/components/datepicker/dist/{src/styles → styles}/classic/style-css.d.ts +0 -0
  123. /package/components/datepicker/dist/{src/styles → styles}/color-calendar-css.d.ts +0 -0
  124. /package/components/datepicker/dist/{src/styles → styles}/color-cell-css.d.ts +0 -0
  125. /package/components/datepicker/dist/{src/styles → styles}/color-css.d.ts +0 -0
  126. /package/components/datepicker/dist/{src/styles → styles}/color-month-css.d.ts +0 -0
  127. /package/components/datepicker/dist/{src/styles → styles}/shapeSize-css.d.ts +0 -0
  128. /package/components/datepicker/dist/{src/styles → styles}/snowflake/color-css.d.ts +0 -0
  129. /package/components/datepicker/dist/{src/styles → styles}/snowflake/style-css.d.ts +0 -0
  130. /package/components/datepicker/dist/{src/styles → styles}/style-auro-calendar-cell-css.d.ts +0 -0
  131. /package/components/datepicker/dist/{src/styles → styles}/style-auro-calendar-css.d.ts +0 -0
  132. /package/components/datepicker/dist/{src/styles → styles}/style-auro-calendar-month-css.d.ts +0 -0
  133. /package/components/datepicker/dist/{src/styles → styles}/style-css.d.ts +0 -0
  134. /package/components/datepicker/dist/{src/styles → styles}/tokens-css.d.ts +0 -0
  135. /package/components/datepicker/dist/{src/utilities.d.ts → utilities.d.ts} +0 -0
  136. /package/components/datepicker/dist/{src/utilitiesCalendar.d.ts → utilitiesCalendar.d.ts} +0 -0
  137. /package/components/datepicker/dist/{src/utilitiesCalendarRender.d.ts → utilitiesCalendarRender.d.ts} +0 -0
  138. /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/day.d.ts +0 -0
  139. /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/range-datepicker-calendar.d.ts +0 -0
  140. /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/range-datepicker-cell.d.ts +0 -0
  141. /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/range-datepicker.d.ts +0 -0
@@ -1,34 +1,3 @@
1
- function valueExample() {
2
- const valueExample = document.querySelector('#valueExample');
3
-
4
- document.querySelector('#validValueExampleBtn').addEventListener('click', () => {
5
- valueExample.value = '["arrival", "prefer alaska"]';
6
- });
7
-
8
- document.querySelector('#invalidValueExampleBtn').addEventListener('click', () => {
9
- valueExample.value = '["flight course"]';
10
- });
11
- }
12
-
13
- function resetStateExample() {
14
- const elem = document.querySelector('#resetStateExample');
15
-
16
- document.querySelector('#resetStateBtn').addEventListener('click', () => {
17
- elem.reset();
18
- });
19
- }
20
-
21
- function updateActiveOptionExample() {
22
- const select = document.getElementById('updateActiveOptionExample');
23
- const dropdown = select.dropdown;
24
-
25
- dropdown.addEventListener('auroDropdown-toggled', () => {
26
- if (dropdown.isPopoverVisible) {
27
- select.updateActiveOption(2); // Set the active option to the third item (index 2)
28
- }
29
- });
30
- }
31
-
32
1
  /**
33
2
  * @license
34
3
  * Copyright 2019 Google LLC
@@ -584,15 +553,17 @@ class AuroFormValidation {
584
553
  );
585
554
  }
586
555
 
587
- // If there is a second input in the elem and that value is undefined or an empty string set hasValue to false;
588
- if (this.auroInputElements?.length === 2) {
589
- if (!this.auroInputElements[1].value || this.auroInputElements[1].length === 0) {
556
+ const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
557
+
558
+ // If there is a second input in the elem and that value is undefined or an empty string set hasValue to false.
559
+ // Skip for combobox: its second auro-input is the fullscreen-bib mirror of the same value, not an independent
560
+ // field (datepicker is the intended consumer — start/end are independently required).
561
+ if (this.auroInputElements?.length === 2 && !isCombobox) {
562
+ if (!this.auroInputElements[1].value || this.auroInputElements[1].value.length === 0) {
590
563
  hasValue = false;
591
564
  }
592
565
  }
593
566
 
594
- const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
595
-
596
567
  if (isCombobox) {
597
568
 
598
569
  if (!elem.persistInput || elem.behavior === "filter") {
@@ -990,19 +961,28 @@ const selectKeyboardStrategy = {
990
961
  },
991
962
 
992
963
  End(component, evt, ctx) {
993
- if (!ctx.isExpanded) {
994
- return;
995
- }
996
964
  evt.preventDefault();
997
965
  evt.stopPropagation();
998
966
  // `pop()` is safe here: getEnabledOptions returns a fresh filtered array.
999
967
  const lastOption = getEnabledOptions(component.menu).pop();
1000
- if (lastOption) {
1001
- component.menu.updateActiveOption(lastOption);
968
+ if (!lastOption) {
969
+ return;
970
+ }
971
+ // Pre-stash before show() so the auroDropdown-toggled handler's
972
+ // `!optionActive` guard short-circuits the firstActive/selected fallback —
973
+ // otherwise show() synchronously fires the handler and writes
974
+ // aria-activedescendant once before we overwrite it.
975
+ component.menu.updateActiveOption(lastOption);
976
+ if (!ctx.isExpanded) {
977
+ component.dropdown.show();
1002
978
  }
1003
979
  },
1004
980
 
1005
981
  Enter(component, evt, ctx) {
982
+ // Prevent the keypress from bubbling to parent containers (e.g., forms)
983
+ // which could interpret Enter as a submit. Matches APG select-only combobox
984
+ // and native <select> behavior: Enter opens the listbox when closed, selects
985
+ // the active option when open — it does not submit a parent form.
1006
986
  evt.preventDefault();
1007
987
  evt.stopPropagation();
1008
988
  if (!ctx.isExpanded) {
@@ -1013,14 +993,16 @@ const selectKeyboardStrategy = {
1013
993
  },
1014
994
 
1015
995
  Home(component, evt, ctx) {
1016
- if (!ctx.isExpanded) {
1017
- return;
1018
- }
1019
996
  evt.preventDefault();
1020
997
  evt.stopPropagation();
1021
998
  const [firstOption] = getEnabledOptions(component.menu);
1022
- if (firstOption) {
1023
- component.menu.updateActiveOption(firstOption);
999
+ if (!firstOption) {
1000
+ return;
1001
+ }
1002
+ // See End() for why this must run before show().
1003
+ component.menu.updateActiveOption(firstOption);
1004
+ if (!ctx.isExpanded) {
1005
+ component.dropdown.show();
1024
1006
  }
1025
1007
  },
1026
1008
 
@@ -4992,7 +4974,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
4992
4974
  }
4993
4975
  };
4994
4976
 
4995
- var formkitVersion$1 = '202606231948';
4977
+ var formkitVersion$1 = '202607010104';
4996
4978
 
4997
4979
  class AuroElement extends i$2 {
4998
4980
  static get properties() {
@@ -6264,6 +6246,7 @@ class AuroDropdown extends AuroElement {
6264
6246
  role="${o(this.triggerContentFocusable ? undefined : this.a11yRole)}"
6265
6247
  aria-expanded="${o(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.isPopoverVisible)}"
6266
6248
  aria-controls="${o(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.dropdownId)}"
6249
+ aria-haspopup="${o(this.a11yRole === 'combobox' && !this.triggerContentFocusable ? 'listbox' : undefined)}"
6267
6250
  aria-labelledby="${o(this.triggerContentFocusable ? undefined : 'triggerLabel')}"
6268
6251
  aria-disabled="${o(this.disabled ? 'true' : undefined)}"
6269
6252
  @focusin="${this.handleFocusin}"
@@ -6390,7 +6373,7 @@ class AuroDropdown extends AuroElement {
6390
6373
 
6391
6374
  var colorCss$3 = i$5`#headerContainer{box-shadow:var(--ds-auro-dropdownbib-header-boxshadow-color)}#footerContainer{background-color:var(--ds-auro-dropdownbib-footer-container-color)}`;
6392
6375
 
6393
- var styleCss$4 = i$5`#bibTemplate{display:flex;overflow:hidden;height:100%;max-height:100%;flex-direction:column}#headerContainer{display:flex;flex-direction:column;padding:var(--ds-size-200, 1rem);padding-top:var(--ds-size-400, 2rem);padding-bottom:0}#headerContainer .titleRow{display:flex;flex-direction:row;justify-content:space-between;gap:var(--ds-size-100, 0.5rem)}#headerContainer .header{max-width:calc(100vw - var(--ds-size-900, 4.5rem));padding-top:var(--ds-size-200, 1rem)}#headerContainer .subheader{width:100%}#closeButton [auro-icon]{--ds-auro-icon-size: var(--ds-size-500, 2.5rem)}#bodyContainer{position:relative;overflow:auto;flex:1 1 100%}:host([isfullscreen]) #bibTemplate{max-height:100dvh}:host([isfullscreen]) #bodyContainer{margin-top:var(--ds-size-100, 0.5rem)}#footerContainer{position:absolute;right:0;bottom:0;left:0;padding:var(--ds-size-200, 1rem)}`;
6376
+ var styleCss$4 = i$5`#bibTemplate{display:flex;overflow:hidden;height:100%;max-height:100%;flex-direction:column}#headerContainer{display:flex;flex-direction:column;padding:var(--ds-size-200, 1rem);padding-top:var(--ds-size-400, 2rem);padding-bottom:0}#headerContainer .titleRow{display:flex;flex-direction:row;justify-content:space-between;gap:var(--ds-size-100, 0.5rem)}#headerContainer .header{max-width:calc(100vw - var(--ds-size-900, 4.5rem));padding-top:var(--ds-size-200, 1rem)}#headerContainer .subheader{width:100%}#closeButton [auro-icon]{--ds-auro-icon-size: var(--ds-size-500, 2.5rem)}#bodyContainer{position:relative;overflow:auto;flex:1}:host([isfullscreen]) #bibTemplate{max-height:100dvh}:host([isfullscreen]) #bodyContainer{margin-top:var(--ds-size-100, 0.5rem)}#footerContainer{padding:var(--ds-size-200, 1rem)}`;
6394
6377
 
6395
6378
  var tokenCss = i$5`:host{--ds-auro-dropdownbib-header-boxshadow-color: var(--ds-elevation-200, 0px 0px 10px rgba(0, 0, 0, 0.15));--ds-auro-dropdownbib-footer-container-color: var(--ds-basic-color-surface-default, #ffffff)}`;
6396
6379
 
@@ -7013,7 +6996,7 @@ class AuroHelpText extends i$2 {
7013
6996
  }
7014
6997
  }
7015
6998
 
7016
- var formkitVersion = '202606231948';
6999
+ var formkitVersion = '202607010104';
7017
7000
 
7018
7001
  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}`;
7019
7002
 
@@ -7345,14 +7328,6 @@ class AuroSelect extends AuroElement$1 {
7345
7328
  reflect: true
7346
7329
  },
7347
7330
 
7348
- /**
7349
- * @private
7350
- */
7351
- options: {
7352
- type: Array,
7353
- state: true
7354
- },
7355
-
7356
7331
  /**
7357
7332
  * Specifies the current selected menuOption. Default type is `HTMLElement`, changing to `Array<HTMLElement>` when `multiSelect` is true.
7358
7333
  * @type {HTMLElement|Array<HTMLElement>}
@@ -7640,16 +7615,68 @@ class AuroSelect extends AuroElement$1 {
7640
7615
  this.dropdown.dropdownWidth = this.customBibWidth;
7641
7616
  }
7642
7617
 
7643
- // Pass label text to the dropdown bib for accessible dialog naming
7644
- const labelElement = this.querySelector('span[slot="label"]');
7645
- if (labelElement) {
7646
- this.dropdown.bibDialogLabel = labelElement.textContent.trim() || undefined;
7647
- }
7618
+ this._syncLabelText();
7648
7619
 
7649
7620
  // Exposes the CSS parts from the dropdown for styling
7650
7621
  this.dropdown.exposeCssParts();
7651
7622
  }
7652
7623
 
7624
+ /**
7625
+ * Reads the current label slot text and pushes it to the dropdown bib
7626
+ * (for dialog naming) and the menu (for listbox aria-label). Safe to call
7627
+ * before either child has been wired up — each branch self-guards.
7628
+ * @private
7629
+ */
7630
+ _syncLabelText() {
7631
+ const labelElement = this.querySelector('[slot="label"]');
7632
+ const text = labelElement ? labelElement.textContent.trim() : '';
7633
+ if (this.dropdown) {
7634
+ this.dropdown.bibDialogLabel = text || undefined;
7635
+ }
7636
+ if (this.menu) {
7637
+ if (text) {
7638
+ this.menu.setAttribute('aria-label', text);
7639
+ } else {
7640
+ this.menu.removeAttribute('aria-label');
7641
+ }
7642
+ }
7643
+ }
7644
+
7645
+ /**
7646
+ * Keeps the dialog/menu accessible names in sync when consumers mutate the
7647
+ * label slot at runtime (e.g., i18n locale swap). `slotchange` alone is
7648
+ * insufficient — it doesn't fire when textContent of an already-assigned
7649
+ * slotted node changes, which is the common case. We scope the observer to
7650
+ * the label node itself (not the whole host subtree) so option-content
7651
+ * mutations don't trigger label re-syncs, and re-target on `slotchange`
7652
+ * when consumers add or replace the label element.
7653
+ * @private
7654
+ */
7655
+ _observeLabelChanges() {
7656
+ if (this._labelObserver) return;
7657
+ this._labelObserver = new MutationObserver(() => this._syncLabelText());
7658
+
7659
+ const retarget = () => {
7660
+ this._labelObserver.disconnect();
7661
+ const labelElement = this.querySelector('[slot="label"]');
7662
+ if (labelElement) {
7663
+ this._labelObserver.observe(labelElement, {
7664
+ childList: true,
7665
+ subtree: true,
7666
+ characterData: true
7667
+ });
7668
+ }
7669
+ this._syncLabelText();
7670
+ };
7671
+
7672
+ retarget();
7673
+
7674
+ this._retargetLabelObserver = retarget;
7675
+ this.shadowRoot.querySelectorAll('slot[name="label"]').forEach((slot) => {
7676
+ slot.addEventListener('slotchange', retarget);
7677
+ });
7678
+ }
7679
+
7653
7680
  /**
7654
7681
  * This will register this element with the browser.
7655
7682
  * @param {string} [name="auro-select"] - The name of element that you want to register to.
@@ -7800,11 +7827,7 @@ class AuroSelect extends AuroElement$1 {
7800
7827
  this.updateMenuShapeSize();
7801
7828
  this.setMenuValue(this.value);
7802
7829
 
7803
- // Set accessible name on the menu for screen readers based on the label slot content
7804
- const labelElement = this.querySelector('[slot="label"]');
7805
- if (labelElement) {
7806
- this.menu.setAttribute('aria-label', labelElement.textContent.trim());
7807
- }
7830
+ this._syncLabelText();
7808
7831
 
7809
7832
  if (this.multiSelect) {
7810
7833
  this.menu.multiSelect = this.multiSelect;
@@ -7816,8 +7839,21 @@ class AuroSelect extends AuroElement$1 {
7816
7839
  if (typeof this.menu.initItems === 'function') {
7817
7840
  this.menu.initItems();
7818
7841
  }
7819
- this.options = this.menu.options;
7820
7842
  this.updateOptionPositions();
7843
+ // renderNativeSelect reads this.menu.options, which the parent doesn't
7844
+ // observe — request an update so the hidden native <option> list reflects
7845
+ // the menu's options after initItems populates them.
7846
+ this.requestUpdate();
7847
+
7848
+ // Keep aria-setsize/aria-posinset (and the native <option> list) in sync
7849
+ // when the menu re-initializes its items — e.g., slotchange, async/lazy
7850
+ // loads, value-triggered re-init. Without this, stale set-size is
7851
+ // announced and the native select goes stale after dynamic mutations.
7852
+ this.menu.addEventListener('auroMenu-optionsChange', () => {
7853
+ this.updateOptionPositions();
7854
+ this.requestUpdate();
7855
+ });
7856
+
7821
7857
  this.menu.addEventListener("auroMenu-loadingChange", (event) => this.handleMenuLoadingChange(event));
7822
7858
 
7823
7859
  this.menu.addEventListener("auroMenu-selectValueFailure", () => {
@@ -7836,11 +7872,26 @@ class AuroSelect extends AuroElement$1 {
7836
7872
  this.dropdown.setActiveDescendant(this.optionActive);
7837
7873
  }
7838
7874
 
7839
- // Announce the active option for screen readers
7840
- if (this.optionActive) {
7875
+ // Live-region announce only for [not selected] options. For activations
7876
+ // on an already-selected option — auto-activation on bib open, arrow
7877
+ // navigation back to the selection, or click in multiSelect — rely on
7878
+ // aria-activedescendant + aria-selected="true" to convey state per the
7879
+ // WAI-ARIA listbox pattern. This is intentional, not limited to the
7880
+ // initial activation on open: it also prevents a duplicate "X, selected"
7881
+ // when Enter on the active+selected option re-fires
7882
+ // auroMenu-selectedOption (see 03b289e39).
7883
+ if (this.optionActive && !this.optionActive.hasAttribute('selected')) {
7841
7884
  const optionText = this.optionActive.textContent.trim();
7842
- const selectedState = this.optionActive.hasAttribute('selected') ? ', selected' : ', not selected';
7843
- announceToScreenReader(this._getAnnouncementRoot(), `${optionText}${selectedState}`);
7885
+ const message = `${optionText}, not selected`;
7886
+ if (this.dropdown.isPopoverVisible) {
7887
+ announceToScreenReader(this._getAnnouncementRoot(), message);
7888
+ } else {
7889
+ // Typeahead-on-closed fires this event before `show()` flips
7890
+ // isPopoverVisible. Defer so the announcement targets the bib's
7891
+ // live region once the fullscreen <dialog> opens — otherwise it
7892
+ // lands in the host root, which is inert under the active modal.
7893
+ queueMicrotask(() => announceToScreenReader(this._getAnnouncementRoot(), message));
7894
+ }
7844
7895
  }
7845
7896
 
7846
7897
  if (this.dropdown.isPopoverVisible) {
@@ -7849,6 +7900,7 @@ class AuroSelect extends AuroElement$1 {
7849
7900
  });
7850
7901
 
7851
7902
  this.menu.addEventListener('auroMenu-selectedOption', () => {
7903
+ const previousSelected = this.optionSelected;
7852
7904
 
7853
7905
  // Update the displayed value
7854
7906
  this.updateDisplayedValue();
@@ -7868,13 +7920,32 @@ class AuroSelect extends AuroElement$1 {
7868
7920
  this.dropdown.trigger.focus();
7869
7921
  }
7870
7922
 
7871
- // Announce the selection after the dropdown closes so it isn't
7872
- // overridden by VoiceOver's "collapsed" announcement from aria-expanded.
7873
- const selectedValue = this.menu.currentLabel;
7874
- const announcementDelay = 300;
7875
- setTimeout(() => {
7876
- announceToScreenReader(this._getAnnouncementRoot(), `${selectedValue}, selected`);
7877
- }, announcementDelay);
7923
+ // Describe the actual change. In multiSelect, currentLabel is the
7924
+ // concatenated remaining list — announcing "{list}, selected" after a
7925
+ // deselect would falsely claim every remaining label was just added.
7926
+ // Diff previous vs next to recover the toggled option.
7927
+ let announcement = '';
7928
+ if (this.multiSelect) {
7929
+ const prev = Array.isArray(previousSelected) ? previousSelected : [];
7930
+ const removed = prev.find((opt) => !nextSelected.includes(opt));
7931
+ const added = nextSelected.find((opt) => !prev.includes(opt));
7932
+ if (removed) {
7933
+ announcement = `${removed.textContent.trim()}, not selected`;
7934
+ } else if (added) {
7935
+ announcement = `${added.textContent.trim()}, selected`;
7936
+ }
7937
+ } else {
7938
+ announcement = `${this.menu.currentLabel}, selected`;
7939
+ }
7940
+
7941
+ // Delay so the utterance isn't overridden by VoiceOver's "collapsed"
7942
+ // announcement from aria-expanded when the dropdown closes.
7943
+ if (announcement) {
7944
+ const announcementDelay = 300;
7945
+ setTimeout(() => {
7946
+ announceToScreenReader(this._getAnnouncementRoot(), announcement);
7947
+ }, announcementDelay);
7948
+ }
7878
7949
  });
7879
7950
  }
7880
7951
 
@@ -7972,24 +8043,32 @@ class AuroSelect extends AuroElement$1 {
7972
8043
 
7973
8044
  this.typeaheadBuffer += key;
7974
8045
 
7975
- const isRepeatedChar = this.typeaheadBuffer.length > 1 && new Set(this.typeaheadBuffer).size === 1;
8046
+ // Prefer the literal buffer as a prefix per WAI-ARIA APG ("focus moves to the
8047
+ // next item with a name that starts with the string of characters typed").
8048
+ // Only fall back to single-char cycling when the repeated buffer has no
8049
+ // longer prefix match — e.g. "aa" cycles through ["Apple", "Apricot"] only
8050
+ // because no option starts with "aa".
8051
+ let match = options.find((option) => this._getOptionDisplayText(option).startsWith(this.typeaheadBuffer));
7976
8052
 
7977
- let match = null;
8053
+ const isRepeatedChar = !match && this.typeaheadBuffer.length > 1 && new Set(this.typeaheadBuffer).size === 1;
7978
8054
  if (isRepeatedChar) {
7979
8055
  const matches = options.filter((option) => this._getOptionDisplayText(option).startsWith(key));
7980
8056
  if (matches.length) {
7981
8057
  const cycleIndex = (this.typeaheadBuffer.length - 1) % matches.length;
7982
8058
  match = matches[cycleIndex];
7983
8059
  }
7984
- } else {
7985
- match = options.find((option) => this._getOptionDisplayText(option).startsWith(this.typeaheadBuffer));
7986
8060
  }
7987
8061
 
8062
+ // Intentional: no-match leaves the bib closed (deviates from APG / some native <select>).
7988
8063
  if (match) {
8064
+ // Pre-stash the match so the auroDropdown-toggled handler's `!optionActive`
8065
+ // guard short-circuits and skips the firstActive/selected fallback —
8066
+ // otherwise show() synchronously fires the handler, which writes
8067
+ // aria-activedescendant once before we overwrite it.
8068
+ this.menu.updateActiveOption(match);
7989
8069
  if (!this.dropdown.isPopoverVisible) {
7990
8070
  this.dropdown.show();
7991
8071
  }
7992
- this.menu.updateActiveOption(match);
7993
8072
  }
7994
8073
  }
7995
8074
 
@@ -8106,6 +8185,28 @@ class AuroSelect extends AuroElement$1 {
8106
8185
  disconnectedCallback() {
8107
8186
  super.disconnectedCallback();
8108
8187
  this._clearTypeaheadBuffer();
8188
+ if (this._labelObserver) {
8189
+ this._labelObserver.disconnect();
8190
+ this._labelObserver = null;
8191
+ }
8192
+ if (this._retargetLabelObserver && this.shadowRoot) {
8193
+ this.shadowRoot.querySelectorAll('slot[name="label"]').forEach((slot) => {
8194
+ slot.removeEventListener('slotchange', this._retargetLabelObserver);
8195
+ });
8196
+ this._retargetLabelObserver = null;
8197
+ }
8198
+ }
8199
+
8200
+ connectedCallback() {
8201
+ super.connectedCallback();
8202
+ // Regression guard: firstUpdated() fires once per instance, so the label
8203
+ // observer setup it triggers does NOT re-run on reconnect. After a
8204
+ // disconnect+reconnect (reparent, SPA route swap), runtime label mutations
8205
+ // would silently stop syncing menu aria-label / dropdown.bibDialogLabel
8206
+ // unless we re-wire the observer here.
8207
+ if (this.hasUpdated) {
8208
+ this._observeLabelChanges();
8209
+ }
8109
8210
  }
8110
8211
 
8111
8212
  // lifecycle runs only after the element's DOM has been updated the first time
@@ -8116,6 +8217,7 @@ class AuroSelect extends AuroElement$1 {
8116
8217
  this.configureDropdown();
8117
8218
  this.configureMenu();
8118
8219
  this.configureSelect();
8220
+ this._observeLabelChanges();
8119
8221
  }
8120
8222
 
8121
8223
  setMenuValue(value) {
@@ -8248,25 +8350,18 @@ class AuroSelect extends AuroElement$1 {
8248
8350
  * @private
8249
8351
  */
8250
8352
  _handleNativeSelectChange(event) {
8353
+ // Hidden native <select> has no `multiple` attribute, so any change it fires
8354
+ // is a single raw value — applying it in multiSelect mode would collapse the
8355
+ // JSON-array `value` shape. Bfcache/autofill can reach this on a name-bearing
8356
+ // form control even with aria-hidden/tabindex=-1.
8357
+ if (this.multiSelect) return;
8358
+
8251
8359
  const selectedOption = event.target.options[event.target.selectedIndex];
8252
8360
  if (!selectedOption) return;
8253
8361
  const selectedValue = selectedOption.value;
8254
8362
 
8255
- if (this.multiSelect) {
8256
- const currentArray = this.menu.value || [];
8257
-
8258
- if (!currentArray.includes(selectedValue)) {
8259
- this.value = JSON.stringify([
8260
- ...currentArray,
8261
- selectedValue
8262
- ]);
8263
- }
8264
- } else {
8265
- const currentValue = this.value;
8266
-
8267
- if (currentValue !== selectedValue) {
8268
- this.value = selectedValue;
8269
- }
8363
+ if (this.value !== selectedValue) {
8364
+ this.value = selectedValue;
8270
8365
  }
8271
8366
  }
8272
8367
 
@@ -10065,26 +10160,12 @@ class AuroMenuOption extends AuroElement$1 {
10065
10160
  AuroMenu.register();
10066
10161
  AuroMenuOption.register();
10067
10162
 
10068
- /* eslint-disable jsdoc/require-jsdoc, no-magic-numbers, no-param-reassign */
10163
+ /* eslint-disable jsdoc/require-jsdoc */
10069
10164
 
10070
10165
 
10071
10166
  AuroSelect.register();
10072
10167
  AuroSelect.register('custom-select');
10073
10168
 
10074
- function initExamples(initCount) {
10075
- initCount = initCount || 0;
10076
-
10077
- try {
10078
- valueExample();
10079
- resetStateExample();
10080
- updateActiveOptionExample();
10081
- } catch (err) {
10082
- if (initCount <= 20) {
10083
- setTimeout(() => {
10084
- initExamples(initCount + 1);
10085
- }, 100);
10086
- }
10087
- }
10088
- }
10169
+ function initExamples() {}
10089
10170
 
10090
10171
  export { initExamples };