@aurodesignsystem-dev/auro-formkit 0.0.0-pr1540.0 → 0.0.0-pr1540.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 (82) hide show
  1. package/components/checkbox/demo/accessibility.md +1 -1
  2. package/components/checkbox/demo/customize.min.js +1 -1
  3. package/components/checkbox/demo/getting-started.min.js +1 -1
  4. package/components/checkbox/demo/index.min.js +1 -1
  5. package/components/checkbox/dist/index.js +1 -1
  6. package/components/checkbox/dist/registered.js +1 -1
  7. package/components/combobox/demo/accessibility.md +1 -1
  8. package/components/combobox/demo/api.md +2 -2
  9. package/components/combobox/demo/customize.md +54 -2
  10. package/components/combobox/demo/customize.min.js +421 -240
  11. package/components/combobox/demo/getting-started.min.js +421 -240
  12. package/components/combobox/demo/index.md +1 -0
  13. package/components/combobox/demo/index.min.js +421 -240
  14. package/components/combobox/demo/keyboard-behavior.md +1 -4
  15. package/components/combobox/dist/auro-combobox.d.ts +4 -1
  16. package/components/combobox/dist/index.js +334 -222
  17. package/components/combobox/dist/registered.js +334 -222
  18. package/components/counter/demo/customize.min.js +59 -222
  19. package/components/counter/demo/index.min.js +59 -222
  20. package/components/counter/dist/auro-counter.d.ts +0 -8
  21. package/components/counter/dist/index.js +59 -222
  22. package/components/counter/dist/registered.js +59 -222
  23. package/components/datepicker/demo/accessibility.md +1 -1
  24. package/components/datepicker/demo/customize.md +30 -1
  25. package/components/datepicker/demo/customize.min.js +84 -220
  26. package/components/datepicker/demo/getting-started.md +118 -2
  27. package/components/datepicker/demo/index.min.js +84 -220
  28. package/components/datepicker/dist/index.js +84 -220
  29. package/components/datepicker/dist/registered.js +84 -220
  30. package/components/dropdown/demo/customize.html +3 -0
  31. package/components/dropdown/demo/customize.min.js +55 -206
  32. package/components/dropdown/demo/getting-started.min.js +44 -205
  33. package/components/dropdown/demo/index.min.js +44 -205
  34. package/components/dropdown/dist/index.js +44 -205
  35. package/components/dropdown/dist/registered.js +44 -205
  36. package/components/form/demo/customize.min.js +670 -945
  37. package/components/form/demo/getting-started.min.js +670 -945
  38. package/components/form/demo/index.min.js +670 -945
  39. package/components/form/demo/registerDemoDeps.min.js +670 -945
  40. package/components/input/demo/accessibility.md +1 -1
  41. package/components/input/demo/customize.min.js +1 -1
  42. package/components/input/demo/getting-started.min.js +1 -1
  43. package/components/input/demo/index.min.js +1 -1
  44. package/components/input/dist/index.js +1 -1
  45. package/components/input/dist/registered.js +1 -1
  46. package/components/menu/demo/accessibility.md +9 -4
  47. package/components/menu/demo/api.md +26 -19
  48. package/components/menu/demo/css-only.md +26 -19
  49. package/components/menu/demo/customize.md +307 -47
  50. package/components/menu/demo/design.md +1 -1
  51. package/components/menu/demo/getting-started.md +144 -7
  52. package/components/menu/demo/index.min.js +214 -19
  53. package/components/menu/demo/keyboard-behavior.md +83 -4
  54. package/components/menu/demo/voiceover.md +21 -14
  55. package/components/menu/demo/why-menu.md +8 -9
  56. package/components/menu/dist/auro-menu-utils.d.ts +19 -0
  57. package/components/menu/dist/auro-menu.d.ts +4 -8
  58. package/components/menu/dist/auro-menuoption.d.ts +12 -0
  59. package/components/menu/dist/index.js +87 -18
  60. package/components/menu/dist/registered.js +87 -18
  61. package/components/radio/demo/accessibility.md +1 -1
  62. package/components/radio/demo/customize.min.js +1 -1
  63. package/components/radio/demo/getting-started.min.js +1 -1
  64. package/components/radio/demo/index.min.js +1 -1
  65. package/components/radio/dist/index.js +1 -1
  66. package/components/radio/dist/registered.js +1 -1
  67. package/components/select/demo/accessibility.md +6 -1
  68. package/components/select/demo/api.md +2 -2
  69. package/components/select/demo/customize.md +6 -3
  70. package/components/select/demo/customize.min.js +139 -227
  71. package/components/select/demo/design.md +10 -10
  72. package/components/select/demo/getting-started.md +1 -1
  73. package/components/select/demo/getting-started.min.js +139 -227
  74. package/components/select/demo/index.md +2 -2
  75. package/components/select/demo/index.min.js +139 -227
  76. package/components/select/demo/keyboard-behavior.md +53 -58
  77. package/components/select/demo/voiceover.md +28 -15
  78. package/components/select/dist/auro-select.d.ts +6 -2
  79. package/components/select/dist/index.js +52 -209
  80. package/components/select/dist/registered.js +52 -209
  81. package/custom-elements.json +1611 -1552
  82. package/package.json +2 -2
@@ -31,19 +31,22 @@
31
31
  <auro-header level="2" id="keyEvents">Key Events</auro-header>
32
32
  <!-- AURO-GENERATED-CONTENT:START (FILE:src=./../docs/partials/keyboard-behavior/keyEvents.md) -->
33
33
  <!-- The below content is automatically added from ./../docs/partials/keyboard-behavior/keyEvents.md -->
34
+ <div class="note">
35
+ <p><strong>Note:</strong> The "Focused element" column below indicates the initial <code>event.target</code> — the element that has DOM focus when the key is pressed. The select's keyboard strategy listener is attached once to the <code>&lt;auro-select&gt;</code> host; it receives events via composed bubbling regardless of display mode. When the bib is displayed as a fullscreen dialog (see <code>fullscreenBreakpoint</code>), focus moves to the dialog's close button rather than remaining on the trigger, but keydown events still bubble across the shadow-root boundary up to the host listener, and <code>aria-activedescendant</code> continues to track the active option. An "active option" is one that is not <code>disabled</code>, <code>hidden</code>, or <code>static</code> — these are always skipped during navigation and type-ahead matching.</p>
36
+ </div>
34
37
  <table>
35
38
  <thead>
36
39
  <tr>
37
40
  <th>Key</th>
38
41
  <th>Modifier</th>
39
42
  <th>Current State</th>
40
- <th>Focus Element</th>
43
+ <th>Focused element</th>
41
44
  <th>Behavior</th>
42
45
  </tr>
43
46
  </thead>
44
47
  <tbody>
45
48
  <tr>
46
- <td rowspan="8">ArrowDown</td>
49
+ <td rowspan="6">ArrowDown</td>
47
50
  <td rowspan="2">-</td>
48
51
  <td>Collapsed</td>
49
52
  <td>Trigger element</td>
@@ -57,24 +60,6 @@
57
60
  </td>
58
61
  </tr>
59
62
  <tr>
60
- <td rowspan="2">Meta (Command / Windows key)</td>
61
- <td>Collapsed</td>
62
- <td>Trigger element</td>
63
- <td>
64
- Opens the bib.
65
- <div class="note">
66
- <strong>Note:</strong> On Windows, <code>Meta</code> + arrow key combinations are reserved by the operating system for window management. Windows users should use <code>Control</code> or <code>Alt</code> instead.
67
- </div>
68
- </td>
69
- </tr>
70
- <tr>
71
- <td>Expanded</td>
72
- <td>Trigger element</td>
73
- <td>
74
- Advances the <code>focused</code> option to the last enabled option in the list.
75
- </td>
76
- </tr>
77
- <tr>
78
63
  <td rowspan="2">Alt (Option)</td>
79
64
  <td>Collapsed</td>
80
65
  <td>Trigger element</td>
@@ -94,7 +79,7 @@
94
79
  <td>
95
80
  Opens the bib.
96
81
  <div class="note">
97
- <strong>Note:</strong> On macOS, <code>Control</code> + arrow key combinations are reserved by the operating system for Mission Control and Application Windows. macOS users should use <code>Meta</code> or <code>Alt</code> instead.
82
+ <strong>Note:</strong> On macOS, <code>Control</code> + arrow key combinations are reserved by the operating system for Mission Control and Application Windows. macOS users should use <code>Alt</code> instead.
98
83
  </div>
99
84
  </td>
100
85
  </tr>
@@ -106,7 +91,7 @@
106
91
  </td>
107
92
  </tr>
108
93
  <tr>
109
- <td rowspan="8">ArrowUp</td>
94
+ <td rowspan="6">ArrowUp</td>
110
95
  <td rowspan="2">-</td>
111
96
  <td>Collapsed</td>
112
97
  <td>Trigger element</td>
@@ -120,24 +105,6 @@
120
105
  </td>
121
106
  </tr>
122
107
  <tr>
123
- <td rowspan="2">Meta (Command / Windows key)</td>
124
- <td>Collapsed</td>
125
- <td>Trigger element</td>
126
- <td>
127
- Opens the bib.
128
- <div class="note">
129
- <strong>Note:</strong> On Windows, <code>Meta</code> + arrow key combinations are reserved by the operating system for window management. Windows users should use <code>Control</code> or <code>Alt</code> instead.
130
- </div>
131
- </td>
132
- </tr>
133
- <tr>
134
- <td>Expanded</td>
135
- <td>Trigger element</td>
136
- <td>
137
- Advances the <code>focused</code> option to the first enabled option in the list.
138
- </td>
139
- </tr>
140
- <tr>
141
108
  <td rowspan="2">Alt (Option)</td>
142
109
  <td>Collapsed</td>
143
110
  <td>Trigger element</td>
@@ -157,7 +124,7 @@
157
124
  <td>
158
125
  Opens the bib.
159
126
  <div class="note">
160
- <strong>Note:</strong> On macOS, <code>Control</code> + arrow key combinations are reserved by the operating system for Mission Control and Application Windows. macOS users should use <code>Meta</code> or <code>Alt</code> instead.
127
+ <strong>Note:</strong> On macOS, <code>Control</code> + arrow key combinations are reserved by the operating system for Mission Control and Application Windows. macOS users should use <code>Alt</code> instead.
161
128
  </div>
162
129
  </td>
163
130
  </tr>
@@ -185,23 +152,47 @@
185
152
  </td>
186
153
  </tr>
187
154
  <tr>
188
- <td rowspan="2">Enter</td>
189
- <td rowspan="2">-</td>
155
+ <td rowspan="3">Enter</td>
156
+ <td rowspan="3">-</td>
157
+ <td>Collapsed</td>
158
+ <td>Trigger element</td>
159
+ <td>Opens the bib. Bubbling is stopped so that a parent form does not treat Enter as a submit.</td>
160
+ </tr>
161
+ <tr>
162
+ <td>Expanded, without <code>multiSelect</code></td>
163
+ <td>Trigger element</td>
190
164
  <td>
191
- Expanded, without <code>multiSelect</code>
165
+ The current <code>active</code> option is selected, and the bib closes.
192
166
  </td>
167
+ </tr>
168
+ <tr>
169
+ <td>Expanded, with <code>multiSelect</code></td>
193
170
  <td>Trigger element</td>
194
171
  <td>
195
- The current <code>focused</code> option is selected, closes the bib.
172
+ The current <code>active</code> option is toggled; the bib stays open so additional options can be selected.
196
173
  </td>
197
174
  </tr>
198
175
  <tr>
176
+ <td rowspan="3">Escape</td>
177
+ <td rowspan="3">-</td>
178
+ <td>Collapsed</td>
179
+ <td>Trigger element</td>
199
180
  <td>
200
- Expanded, with <code>multiSelect</code>
181
+ Clears the type-ahead buffer. No other change; the event is allowed to bubble so an ancestor dialog or drawer may still handle it.
201
182
  </td>
183
+ </tr>
184
+ <tr>
185
+ <td>Expanded</td>
202
186
  <td>Trigger element</td>
203
187
  <td>
204
- The current <code>focused</code> option is toggled, does not close the bib.
188
+ Clears the type-ahead buffer and closes the bib. Bubbling is stopped so that an ancestor dialog, drawer, or popup does not also close.
189
+ </td>
190
+ </tr>
191
+ <tr>
192
+ <td>Expanded, fullscreen bib</td>
193
+ <td>Close button</td>
194
+ <td>
195
+ The Escape keydown bubbles from the close button to the select's keyboard strategy, which clears the type-ahead buffer and calls <code>dropdown.hide()</code> — the same handler as the popover case. The native <code>&lt;dialog&gt;</code> <code>cancel</code> → <code>auro-bib-cancel</code> path is a fallback that closes the bib if the strategy did not run. Focus is restored to the trigger on close.
205
196
  </td>
206
197
  </tr>
207
198
  <tr>
@@ -226,9 +217,9 @@
226
217
  <td>Expanded</td>
227
218
  <td>Trigger element</td>
228
219
  <td>
229
- The current <code>focused</code> option is selected.
220
+ The bib closes. If there is an <code>active</code> option, it is selected first in single-select, or toggled in <code>multiSelect</code>. If no option is active, focus simply moves on without a selection change.
230
221
  <div class="note">
231
- <strong>Note:</strong> the page will also navigate to the next focusable element in the tabindex sequence.
222
+ <strong>Note:</strong> <code>Tab</code> does not <code>preventDefault</code>, so the browser continues to move focus to the next element in the tabindex sequence after the selection is applied.
232
223
  </div>
233
224
  </td>
234
225
  </tr>
@@ -237,19 +228,23 @@
237
228
  <td>Expanded</td>
238
229
  <td>Trigger element</td>
239
230
  <td>
240
- The current <code>focused</code> option is selected.
241
- <div class="note">
242
- <strong>Note:</strong> the page will also navigate to the previous focusable element in the tabindex sequence.
243
- </div>
231
+ Same behavior as <code>Tab</code>: the bib closes and any <code>active</code> option is selected (single-select) or toggled (<code>multiSelect</code>). The strategy does not read <code>shiftKey</code>; only the browser's own focus traversal reverses direction, moving focus to the previous element in the tabindex sequence.
244
232
  </td>
245
233
  </tr>
246
234
  <tr>
247
- <td>Space</td>
248
- <td>-</td>
249
- <td>Collapsed or Expanded</td>
235
+ <td rowspan="2">Space</td>
236
+ <td rowspan="2">-</td>
237
+ <td>Collapsed or Expanded, type-ahead buffer active</td>
238
+ <td>Trigger element</td>
239
+ <td>
240
+ Extends the type-ahead buffer with a space character. The <code>active</code> option advances if the buffer matches an active option; the bib state is unchanged. See the <a href="customize.html#typeAhead">Type-Ahead</a> section on the Customize page.
241
+ </td>
242
+ </tr>
243
+ <tr>
244
+ <td>Collapsed or Expanded, type-ahead buffer empty</td>
250
245
  <td>Trigger element</td>
251
246
  <td>
252
- When the type-ahead buffer is empty, Space behaves as documented in the inherited Space row below. While the buffer is active, Space extends the buffer instead the <code>focused</code> option advances if the buffer matches an enabled option, and the bib state is unchanged. See the <a href="customize.html#typeAhead">Type-Ahead</a> section on the Customize page.
247
+ Toggles the bibopens it when collapsed and closes it when expanded. No selection change occurs.
253
248
  </td>
254
249
  </tr>
255
250
  <tr>
@@ -258,7 +253,7 @@
258
253
  <td>Collapsed or Expanded</td>
259
254
  <td>Trigger element</td>
260
255
  <td>
261
- Extends the type-ahead buffer. When the buffer matches an enabled option's displayed text, the <code>focused</code> option advances to that option and the bib opens if it was collapsed. A keystroke that does not match any option leaves the bib state unchanged. Repeated keystrokes within <code>typeaheadTimeoutMs</code> extend the buffer; pressing the same character repeatedly cycles through matching options. See the <a href="customize.html#typeAhead">Type-Ahead</a> section on the Customize page.
256
+ Extends the type-ahead buffer. When the buffer matches an enabled option's displayed text, the <code>focused</code> option advances to that option and the bib opens if it was collapsed. A keystroke that does not match any option leaves the bib state unchanged. Repeated keystrokes within <code>typeaheadTimeoutMs</code> (default 500&nbsp;ms) extend the buffer; pressing the same character repeatedly cycles through matching options. Keys chorded with <code>Ctrl</code>, <code>Meta</code>, or <code>Alt</code> are ignored so browser and OS shortcuts do not leak into the buffer. See the <a href="customize.html#typeAhead">Type-Ahead</a> section on the Customize page.
262
257
  </td>
263
258
  </tr>
264
259
  </tbody>
@@ -27,7 +27,7 @@
27
27
  </tr>
28
28
  <tr>
29
29
  <td>Invalid</td>
30
- <td><em>"invalid data"</em></td>
30
+ <td>The trigger itself does not carry <code>aria-invalid</code>; the invalid state is announced through the alert-role Help Text (see <a href="#voiceOverStateInvalid">Invalid</a> below), not as a state hint on focus.</td>
31
31
  </tr>
32
32
  <tr>
33
33
  <td>Disabled</td>
@@ -95,7 +95,7 @@
95
95
  <p>Key characteristics across both platforms:</p>
96
96
  <ul>
97
97
  <li>The <code>label</code> is always read first.</li>
98
- <li>The component <strong>role</strong> is announced as <em>"pop-up button"</em> (macOS) or <em>"button"</em> (iOS).</li>
98
+ <li>The trigger <strong>role</strong> is announced as <em>"combo box"</em> in both single-select and multi-select modes. The role does not change between large and small viewports — the fullscreen dialog on mobile wraps the same trigger, it does not remap the trigger's role to <em>"pop-up button"</em>, <em>"button"</em>, or <em>"list box"</em>. In multi-select mode, <code>aria-multiselectable="true"</code> is applied to the internal <code>&lt;auro-menu&gt;</code> (the listbox), not to the trigger.</li>
99
99
  <li><code>disabled</code> options are announced as <em>"dimmed"</em> and cannot be selected.</li>
100
100
  </ul>
101
101
  <auro-header level="2" id="voiceOverStates">Impact of State</auro-header>
@@ -116,7 +116,7 @@
116
116
  <li><strong>Focus</strong></li>
117
117
  <li><strong>Open | Expand</strong></li>
118
118
  <li><strong>Navigate Options:</strong> Moves through options; announces each option name plus <em>"selected"</em> or nothing.</li>
119
- <li><strong>Selecting an option:</strong> Double-tap toggles the focused option's selection — announces <em>"selected"</em> or <em>"unselected"</em>.</li>
119
+ <li><strong>Selecting an option:</strong> Double-tap toggles the focused option's selection — announces <em>"selected"</em> or <em>"not selected"</em>.</li>
120
120
  <li><strong>Close | Collapse:</strong> Collapses the list, announces the expanded state change.</li>
121
121
  </ol>
122
122
  <auro-header level="4" id="voiceOverStateMultiSelectSmallVP">Small Viewport Multi-select</auro-header>
@@ -125,7 +125,7 @@
125
125
  <li><strong>Focus</strong></li>
126
126
  <li><strong>Open | Expand</strong></li>
127
127
  <li><strong>Navigate Options:</strong> Moves through options; announces each option name plus <em>"selected"</em> or nothing.</li>
128
- <li><strong>Selecting an option:</strong> Double-tap toggles the focused option's selection — announces <em>"selected"</em> or <em>"unselected"</em>.</li>
128
+ <li><strong>Selecting an option:</strong> Double-tap toggles the focused option's selection — announces <em>"selected"</em> or <em>"not selected"</em>.</li>
129
129
  <li><strong>Close | Collapse:</strong> Collapses the list, announces the expanded state change.</li>
130
130
  </ol>
131
131
  <p>Key differences from single-select:</p>
@@ -139,9 +139,9 @@
139
139
  </thead>
140
140
  <tbody>
141
141
  <tr>
142
- <td>Role</td>
143
- <td>pop-up button</td>
144
- <td>list box</td>
142
+ <td>Trigger role</td>
143
+ <td>combo box</td>
144
+ <td>combo box (with <code>aria-multiselectable="true"</code> on the internal listbox)</td>
145
145
  </tr>
146
146
  <tr>
147
147
  <td>Interaction model</td>
@@ -153,31 +153,44 @@
153
153
  <td>
154
154
  <p>Current selected value</p>
155
155
  <div class="note">
156
- <strong>On focus:</strong> Announces "[component label], [current value or 'no selection'], pop-up button"
156
+ <strong>On focus:</strong> Announces "[component label], [current value or 'no selection'], combo box"
157
157
  </div>
158
158
  </td>
159
159
  <td>
160
160
  <p>Each option's selected state individually</p>
161
161
  <div class="note">
162
- <strong>On focus:</strong> Announces "[component label], [[{option label, 'selected'}, {option label, 'selected'}] or 'no selection'], list box"
162
+ <strong>On focus:</strong> Announces "[component label], [[{option label, 'selected'}, {option label, 'selected'}] or 'no selection'], combo box"
163
163
  </div>
164
164
  <div class="note">
165
- <strong>On selection change:</strong> Announces "[option label], ['selected' | 'unselected']"
165
+ <strong>On selection change:</strong> Announces "[option label], ['selected' | 'not selected']"
166
166
  </div>
167
167
  </td>
168
168
  </tr>
169
169
  <tr>
170
170
  <td>Space key</td>
171
171
  <td>Opens/closes picker</td>
172
- <td>Toggles selection</td>
172
+ <td>Opens/closes picker — <strong>Enter</strong> toggles the active option's selection. Space does not toggle selection in multi-select.</td>
173
173
  </tr>
174
174
  </tbody>
175
175
  </table>
176
176
  <div class="note"><strong>Important caveat:</strong> Multi-select is notoriously difficult for all users, including screen reader users — WCAG and usability research generally recommend avoiding <code>&lt;auro-select multiSelect&gt;</code> in favor of checkboxes or other patterns that make multi-selection more discoverable.</div>
177
177
  <auro-header level="3" id="voiceOverStateInvalid">Invalid</auro-header>
178
- <p>When an <code>&lt;auro-select&gt;</code> is invalid the following occurs:</p>
178
+ <p>When an <code>&lt;auro-select&gt;</code> becomes invalid the following occurs:</p>
179
179
  <ul>
180
- <li><code>Focus</code> VoiceOver announces <em>"invalid data"</em> (macOS) or <em>"invalid entry"</em> (iOS) after the element's label.</li>
181
- <li>The Help Text will render the error message and it will be included in the VoiceOver focus announcement.</li>
180
+ <li>The Help Text region renders the error message with <code>role="alert"</code> and <code>aria-live="assertive"</code>, so VoiceOver announces the error message immediately when the state transitions to invalid — the announcement does not wait for the next focus.</li>
181
+ <li>On subsequent focus of the trigger, the help text's error content is read as part of the description, following the label / value / role announcement.</li>
182
182
  </ul>
183
- <p>Example: when focusing on an invalid <code>&lt;auro-select&gt;</code> the VoiceOver announces something like <em>"Country, invalid data, combo box, Please select a country"</em>.</p>
183
+ <div class="note"><strong>Note:</strong> the trigger itself does not set <code>aria-invalid</code>, so VoiceOver does not include the words <em>"invalid data"</em> (macOS) or <em>"invalid entry"</em> (iOS) as part of the trigger's own announcement. The invalid state is conveyed entirely through the alert-role help text.</div>
184
+ <p>Example: when the select becomes invalid, VoiceOver announces the error message (e.g., <em>"Please select a country"</em>) via the assertive alert. On the next focus of the trigger, VoiceOver announces something like <em>"Country, no selection, combo box, Please select a country"</em>.</p>
185
+ <auro-header level="2" id="voiceOverImplementation">How the Announcements Are Wired</auro-header>
186
+ <p>The following implementation details are relevant when debugging or verifying VoiceOver behavior in <code>&lt;auro-select&gt;</code>:</p>
187
+ <auro-header level="3" id="voiceOverImplActiveDescendant">Active option (aria-activedescendant)</auro-header>
188
+ <p>Focus remains on the trigger while the bib is open; the currently active option is exposed via <code>aria-activedescendant</code>. Because the trigger and the option live in different shadow roots, the code sets <code>trigger.ariaActiveDescendantElement</code> (the IDL/property form) rather than the string attribute alone — this is what allows VoiceOver to announce the active option's label and state across the shadow boundary.</p>
189
+ <auro-header level="3" id="voiceOverImplSetSize">Position in list (aria-setsize / aria-posinset)</auro-header>
190
+ <p>Each option is stamped with <code>aria-setsize</code> (total count of navigable options) and <code>aria-posinset</code> (its 1-based position). Stamping runs on initial menu configuration and again whenever <code>auroMenu-optionsChange</code> fires (options added, removed, or otherwise re-initialized), so VoiceOver's <em>"N of M"</em> announcement stays accurate across dynamic option lists. A pure <code>value</code> change does not re-stamp on its own — it only updates selection state — unless it triggers a menu re-initialization in an empty/deferred-match path.</p>
191
+ <auro-header level="3" id="voiceOverImplLiveRegion">Live region routing</auro-header>
192
+ <p>Selection-change announcements (single-select confirmation and multi-select toggle wording) are written into an <code>aria-live="polite"</code> span that lives in the host component's shadow root by default. In fullscreen mode the trigger becomes <code>inert</code> and everything outside the <code>&lt;dialog&gt;</code> is hidden from assistive tech — so the live region is routed into the bib's shadow root instead, ensuring the announcement is reachable while the dialog is open.</p>
193
+ <auro-header level="3" id="voiceOverImplDebounce">Announcement timing</auro-header>
194
+ <p>Selection announcements are delayed briefly (~300ms) so the option's <em>"selected"</em> / <em>"not selected"</em> announcement is not overridden by the <em>"collapsed"</em> announcement that follows when the bib closes.</p>
195
+ <auro-header level="3" id="voiceOverImplFullscreen">Fullscreen focus and inert</auro-header>
196
+ <p>When the fullscreen dialog opens, focus moves to the dialog's <strong>Close</strong> button and the trigger is marked <code>inert</code> so screen readers cannot reach it — the user is effectively inside the dialog until it closes, at which point focus returns to the trigger and <code>inert</code> is removed.</p>
@@ -266,7 +266,7 @@ export class AuroSelect extends AuroElement {
266
266
  reflect: boolean;
267
267
  };
268
268
  /**
269
- * Value selected for the component.
269
+ * Value selected for the component. When set programmatically or as a preset attribute, the value must match a selectable option. If it matches an option marked `disabled` or `static`, the selection is rejected: `value` is cleared to `undefined` while `optionSelected` is cleared to `undefined` in single-select or `[]` in multiSelect. `hidden` options remain selectable by value.
270
270
  */
271
271
  value: {
272
272
  type: StringConstructor;
@@ -529,7 +529,11 @@ export class AuroSelect extends AuroElement {
529
529
  */
530
530
  private clearSelection;
531
531
  firstUpdated(): void;
532
- setMenuValue(value: any): void;
532
+ /**
533
+ * Sets the selected value by matching it against the menu options. Options marked `disabled` or `static` are not selectable: if the value matches one, the selection is rejected and `value` is cleared to `undefined` while `optionSelected` is cleared to `undefined` in single-select or `[]` in multiSelect. `hidden` options remain selectable.
534
+ * @param {string} value - The value to match against the menu options.
535
+ */
536
+ setMenuValue(value: string): void;
533
537
  /**
534
538
  * Scrolls the currently active option into view.
535
539
  * Respects user's motion preferences for accessibility.