@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
@@ -4,7 +4,7 @@
4
4
  <div class="scrollWrapper">
5
5
  The `auro-input` component renders a native HTML <code>&lt;input&gt;</code> element inside its shadow DOM and augments it with custom label, help text, and validation UI. This page documents the ARIA semantics, screen reader announcements, and other accessibility behaviors built into the component.
6
6
 
7
- For keyboard interaction details, see the <auro-hyperlink href="./keyboard-behavior.html">Keyboard Behavior</auro-hyperlink> page.
7
+ For keyboard interaction details, see the <auro-hyperlink href="keyboard-behavior">Keyboard Behavior</auro-hyperlink> page.
8
8
 
9
9
  <auro-header level="2" id="ariaRolesAndAttributes">ARIA Roles and Attributes</auro-header>
10
10
  <auro-header level="3" id="inputElement">Input Element</auro-header>
@@ -12267,7 +12267,7 @@ class AuroHelpText extends i$3 {
12267
12267
  }
12268
12268
  }
12269
12269
 
12270
- var formkitVersion = '202607072023';
12270
+ var formkitVersion = '202607102214';
12271
12271
 
12272
12272
  /**
12273
12273
  * @license
@@ -12267,7 +12267,7 @@ class AuroHelpText extends i$3 {
12267
12267
  }
12268
12268
  }
12269
12269
 
12270
- var formkitVersion = '202607072023';
12270
+ var formkitVersion = '202607102214';
12271
12271
 
12272
12272
  /**
12273
12273
  * @license
@@ -12267,7 +12267,7 @@ class AuroHelpText extends i$3 {
12267
12267
  }
12268
12268
  }
12269
12269
 
12270
- var formkitVersion = '202607072023';
12270
+ var formkitVersion = '202607102214';
12271
12271
 
12272
12272
  /**
12273
12273
  * @license
@@ -12209,7 +12209,7 @@ class AuroHelpText extends LitElement {
12209
12209
  }
12210
12210
  }
12211
12211
 
12212
- var formkitVersion = '202607072023';
12212
+ var formkitVersion = '202607102214';
12213
12213
 
12214
12214
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
12215
12215
  // See LICENSE in the project root for license information.
@@ -12209,7 +12209,7 @@ class AuroHelpText extends LitElement {
12209
12209
  }
12210
12210
  }
12211
12211
 
12212
- var formkitVersion = '202607072023';
12212
+ var formkitVersion = '202607102214';
12213
12213
 
12214
12214
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
12215
12215
  // See LICENSE in the project root for license information.
@@ -19,11 +19,16 @@
19
19
  <auro-header level="2" id="keyboardInteraction">Keyboard Interaction</auro-header>
20
20
  <p>The menu supports full keyboard navigation:</p>
21
21
  <ul>
22
- <li><strong>Arrow Down / Arrow Up:</strong> Moves focus between options.</li>
23
- <li><strong>Enter / Space:</strong> Selects the currently focused option.</li>
24
- <li><strong>Home / End:</strong> Moves focus to the first or last option.</li>
22
+ <li><strong>Arrow Down / Arrow Up:</strong> Moves the active option.</li>
23
+ <li><strong>Enter:</strong> Selects the currently active option.</li>
24
+ <li><strong>Tab:</strong> Selects the currently active option and moves focus out of the menu.</li>
25
25
  </ul>
26
- <p>See the <auro-hyperlink href="keyboardBehavior">Keyboard Behavior</auro-hyperlink> page for full details.</p>
26
+ <p>See the <auro-hyperlink href="keyboard-behavior">Keyboard Behavior</auro-hyperlink> page for full details.</p>
27
+ </section>
28
+ <section>
29
+ <auro-header level="2" id="modifierKeys">Modifier Keys</auro-header>
30
+ <p>The <strong>Meta</strong> key (Command on macOS, Windows/Super elsewhere) is intentionally not used as a modifier for menu keyboard shortcuts. On Windows, Linux, and ChromeOS, the operating system intercepts <code>Meta</code> + Arrow combinations for window management (e.g. window snapping) before the browser receives the event, so any shortcut bound to <code>Meta</code> + Arrow would work only on macOS and silently fail on other platforms.</p>
31
+ <p>To jump to the first or last option in a way that works uniformly across platforms, use <strong>Home</strong> and <strong>End</strong>, which follow the <a href="https://www.w3.org/WAI/ARIA/apg/patterns/listbox/" target="_blank">WAI-ARIA Listbox pattern</a>.</p>
27
32
  </section>
28
33
  <section>
29
34
  <auro-header level="2" id="multiselect">Multi-Select</auro-header>
@@ -7,23 +7,23 @@ The `auro-menu` element provides users a way to select from a list of options.
7
7
 
8
8
  ## Properties
9
9
 
10
- | Property | Attribute | Modifiers | Type | Default | Description |
11
- |-------------------------|------------------|-----------|-----------------------|-------------|--------------------------------------------------|
12
- | `currentLabel` | | readonly | `string` | | |
13
- | `disabled` | `disabled` | | `boolean` | | When true, the entire menu and all options are disabled. |
14
- | `hasLoadingPlaceholder` | | readonly | `boolean` | | Getter for loading placeholder state. |
15
- | `index` | | | `number` | | |
16
- | `layout` | | | `string` | | |
17
- | `loading` | `loading` | | `boolean` | false | When true, displays a loading state using the loadingIcon and loadingText slots if provided. |
18
- | `matchWord` | `matchword` | | `string` | "undefined" | Specifies a string used to highlight matched string parts in options. |
19
- | `multiSelect` | `multiselect` | | `boolean` | false | When true, the selected option can be multiple options. |
20
- | `noCheckmark` | `nocheckmark` | | `boolean` | false | When true, selected option will not show the checkmark. |
21
- | `optionActive` | `optionactive` | | `object` | "undefined" | Specifies the current active menuOption. |
22
- | `optionSelected` | `optionSelected` | | `object` | "undefined" | An array of currently selected menu options, type `HTMLElement` by default. In multi-select mode, `optionSelected` is an array of HTML elements. |
23
- | `options` | | readonly | `HTMLElement[]` | | |
24
- | `selectedOption` | | readonly | `HTMLElement \| null` | | Gets the first selected option, or null if none. |
25
- | `selectedOptions` | | readonly | `HTMLElement[]` | | Gets the currently selected options as an array. |
26
- | `value` | `value` | | `string` | "undefined" | The value of the selected option. In multi-select mode, this is a JSON stringified array of selected option values. |
10
+ | Property | Attribute | Modifiers | Type | Default | Description |
11
+ |-------------------------|---------------|-----------|-----------------------|-------------|--------------------------------------------------|
12
+ | `currentLabel` | | readonly | `string` | | |
13
+ | `disabled` | `disabled` | | `boolean` | | When true, the entire menu and all options are disabled. |
14
+ | `hasLoadingPlaceholder` | | readonly | `boolean` | | Getter for loading placeholder state. |
15
+ | `index` | | | `number` | | |
16
+ | `layout` | | | `string` | | |
17
+ | `loading` | `loading` | | `boolean` | false | When true, displays a loading state using the loadingIcon and loadingText slots if provided. |
18
+ | `matchWord` | `matchword` | | `string` | "undefined" | Specifies a string used to highlight matched string parts in options. |
19
+ | `multiSelect` | `multiselect` | | `boolean` | false | When true, the selected option can be multiple options. |
20
+ | `noCheckmark` | `nocheckmark` | | `boolean` | false | When true, selected option will not show the checkmark. |
21
+ | `optionActive` | | | `object` | "undefined" | Specifies the current active menuOption. |
22
+ | `optionSelected` | | | `object` | "undefined" | The currently selected menu option(s). In single-select mode this is a single `HTMLElement` (or `undefined` when nothing is selected). In multi-select mode this is an array of `HTMLElement`s. |
23
+ | `options` | | readonly | `HTMLElement[]` | | |
24
+ | `selectedOption` | | readonly | `HTMLElement \| null` | | Gets the first selected option, or null if none. |
25
+ | `selectedOptions` | | readonly | `HTMLElement[]` | | Gets the currently selected options as an array. |
26
+ | `value` | `value` | | `string` | "undefined" | The value of the selected option. In multi-select mode, this is a JSON stringified array of selected option values.<br />Options marked `disabled` or `static` are not selectable by value; `hidden` options remain selectable. In single-select mode, if the value matches a non-selectable option the selection is cleared (`optionSelected` becomes `undefined`) and `auroMenu-selectValueFailure` is dispatched. In multi-select mode, non-selectable entries are dropped from the value and the remaining selectable entries are selected; `auroMenu-selectValueFailure` is dispatched only when none of the entries match a selectable option. |
27
27
 
28
28
  ## Methods
29
29
 
@@ -31,7 +31,7 @@ The `auro-menu` element provides users a way to select from a list of options.
31
31
  |----------------------|--------------------------------------------------|--------------------------------------------------|
32
32
  | `navigateOptions` | `(direction: string): void` | Navigates through options using keyboard.<br /><br />**direction**: 'up' or 'down'. |
33
33
  | `reset` | `(): void` | Resets the menu to its initial state.<br />This is the only way to return value to undefined. |
34
- | `selectByValue` | `(value: string \| string[] \| null \| undefined): void` | Selects options by value.<br /><br />**value**: The value(s) to select. |
34
+ | `selectByValue` | `(value: string \| string[] \| null \| undefined): void` | Selects options by value. Options marked `disabled` or `static` are not selectable; `hidden` options remain selectable. In single-select mode, if the value matches a non-selectable option the selection is cleared and `auroMenu-selectValueFailure` is dispatched. In multi-select mode, non-selectable entries are dropped and the remaining selectable entries are selected; `auroMenu-selectValueFailure` is dispatched only when none of the entries match a selectable option. Passing `undefined`, `null`, an empty string, or an empty array clears the selection without dispatching a failure.<br /><br />**value**: The value(s) to select. |
35
35
  | `updateActiveOption` | `(indexOrOption: number \| HTMLElement): void` | Updates the active option state and dispatches events.<br />Accepts either a numeric index or an HTMLElement option.<br /><br />**indexOrOption**: Index of the option or the option element to make active. |
36
36
 
37
37
  ## Events
@@ -58,6 +58,12 @@ The `auro-menu` element provides users a way to select from a list of options.
58
58
 
59
59
  The `auro-menuoption` element provides users a way to define a menu option.
60
60
 
61
+ ## Attributes
62
+
63
+ | Attribute | Type | Description |
64
+ |-----------|-----------|--------------------------------------------------|
65
+ | `static` | `Boolean` | When present, marks the option as non-interactive — it renders but is skipped during keyboard navigation and cannot be selected. Useful for section headers, informational rows inside a menu, or attaching event listeners. |
66
+
61
67
  ## Properties
62
68
 
63
69
  | Property | Attribute | Modifiers | Type | Default | Description |
@@ -68,7 +74,8 @@ The `auro-menuoption` element provides users a way to define a menu option.
68
74
  | `layout` | | | `string` | | |
69
75
  | `noCheckmark` | `noCheckmark` | | `boolean` | false | |
70
76
  | `noMatch` | `nomatch` | | `boolean` | false | When true, marks this option as the "no matching results" placeholder shown by combobox<br />when the user's input does not match any available options. |
71
- | `selected` | `selected` | | `boolean` | false | |
77
+ | `persistent` | `persistent` | | `boolean` | false | When true, this option is excluded from `matchWord` DOM rewriting — useful for utility rows (e.g., "Add new…") that must render identically regardless of the current filter. |
78
+ | `selected` | `selected` | | `boolean` | false | **Deprecated.** Use the `value` attribute on `auro-menu` to set the selected option when the menu renders (or call `menu.selectByValue(value)` programmatically). Support for the child-level `selected` attribute will be removed in a future major release. |
72
79
  | `value` | `value` | | `string` | | |
73
80
 
74
81
  ## Methods
@@ -54,26 +54,28 @@
54
54
  &lt;/ul&gt;</code></pre>
55
55
  <auro-header level="2">What you lose without auro-menu</auro-header>
56
56
  <p>While the CSS above replicates the <strong>visual styling</strong> of <code>auro-menu</code>, the following functionality built into the <code>auro-menu</code> and <code>auro-menuoption</code> web components is <strong>not available</strong> when using plain HTML:</p>
57
- <auro-header level="3">Roving tabindex</auro-header>
58
- <p><code>auro-menu</code> manages a roving <code>tabindex</code> so that only the currently active option is in the tab order, and focus moves between options without leaving the menu. With plain HTML, you must implement the roving-tabindex pattern yourself by maintaining the <code>tabindex="0"</code>/<code>tabindex="-1"</code> state across all options on every focus and key event.</p>
57
+ <auro-header level="3">Active-option tracking</auro-header>
58
+ <p><code>auro-menu</code> tracks the active option internally (via an <code>active</code> CSS class on the current <code>auro-menuoption</code>) rather than moving DOM focus between options. In typical integrations (<code>&lt;auro-select&gt;</code>, <code>&lt;auro-combobox&gt;</code>), focus remains on the parent trigger/input and <code>aria-activedescendant</code> points at the active option; if you make <code>&lt;auro-menu&gt;</code> focusable (e.g., <code>tabindex="0"</code>), the same active-option model applies while focus is on the menu host. With plain HTML, you must pick one focus model either roving <code>tabindex="0"</code>/<code>tabindex="-1"</code>, or <code>aria-activedescendant</code> on the container and wire up the DOM writes yourself on every key event.</p>
59
59
  <auro-header level="3">Arrow-key navigation</auro-header>
60
- <p><code>auro-menu</code> handles <code>ArrowUp</code>, <code>ArrowDown</code>, <code>Home</code>, <code>End</code>, <code>Enter</code>, and <code>Space</code> to move the highlight and commit selections. Native <code>&lt;ul&gt;</code> elements have no built-in keyboard model — you must wire up <code>keydown</code> listeners, track the highlighted index, and prevent default browser scrolling on the arrow keys yourself.</p>
61
- <auro-header level="3">Type-ahead search</auro-header>
62
- <p><code>auro-menu</code> supports a <code>matchword</code> attribute that highlights matched substrings within option labels, and the listbox supports type-ahead focus jumping. Plain HTML provides neither both behaviors must be implemented manually with string matching and DOM manipulation.</p>
60
+ <p><code>auro-menu</code> handles <code>ArrowUp</code>, <code>ArrowDown</code>, <code>Enter</code>, and <code>Tab</code> to move the highlight and commit selections. Native <code>&lt;ul&gt;</code> elements have no built-in keyboard model — you must wire up <code>keydown</code> listeners, track the highlighted index, and prevent default browser scrolling on the arrow keys yourself.</p>
61
+ <auro-header level="3">matchWord highlighting</auro-header>
62
+ <p><code>auro-menu</code> supports a <code>matchWord</code> attribute that highlights matched substrings within option labels used by <code>auro-combobox</code> to visually mark the user's typed input inside each filtered option. Plain HTML provides no equivalent; you must walk each option and wrap matched substrings yourself.</p>
63
+ <auro-header level="3">Type-ahead navigation</auro-header>
64
+ <p>Type-ahead — jumping the active option to whichever entry starts with the letters the user typed — is <strong>not</strong> handled by <code>auro-menu</code> itself. It is provided by the parent selection component (<code>auro-select</code>, <code>auro-combobox</code>) which captures printable characters on its trigger and calls back into the menu. A plain-HTML listbox has no such wiring and would need a bespoke keydown handler that tracks a rolling character buffer and resolves it against the option list.</p>
63
65
  <auro-header level="3">Nested submenu support</auro-header>
64
- <p><code>auro-menu</code> detects nested <code>auro-menu</code> elements, applies the correct <code>role="group"</code>, computes indentation per level, and propagates the shared menu service down the tree. With plain HTML, you must apply nested ARIA roles and indentation manually, and there is no built-in coordination of focus or selection between parent and child lists.</p>
66
+ <p><code>auro-menu</code> detects nested <code>auro-menu</code> elements, applies the correct <code>role="group"</code>, and computes indentation per level. The root menu treats all descendant options as a single flat list, so selecting an option inside a nested menu updates the root menu's <code>value</code> and <code>optionSelected</code> the root always owns the selection state. With plain HTML, you must apply nested ARIA roles and indentation manually.</p>
65
67
  <auro-header level="3">Selection state coordination</auro-header>
66
- <p><code>auro-menu</code> coordinates the selected option(s) through an internal <code>MenuService</code> that keeps <code>optionSelected</code>, <code>value</code>, and each option's <code>aria-selected</code> state in sync. With native HTML, you must update <code>aria-selected</code> on every option yourself on each change and manage your own source of truth for the selected value.</p>
68
+ <p><code>auro-menu</code> keeps <code>optionSelected</code>, <code>value</code>, and each option's <code>aria-selected</code> state in sync internally. With native HTML, you must update <code>aria-selected</code> on every option yourself on each change and manage your own source of truth for the selected value.</p>
67
69
  <auro-header level="3">ARIA roles and live announcements</auro-header>
68
70
  <p><code>auro-menu</code> automatically applies <code>role="listbox"</code>, <code>aria-multiselectable</code>, <code>aria-busy</code> during loading, and per-option <code>role="option"</code> with <code>aria-selected</code> and <code>aria-disabled</code>. Plain HTML requires you to author every one of these attributes by hand and keep them in sync with state — and to add any additional live-region announcements yourself.</p>
69
71
  <auro-header level="3">Value emission and events</auro-header>
70
- <p><code>auro-menu</code> dispatches a structured set of events — <code>auroMenu-selectedOption</code>, <code>auroMenu-activatedOption</code>, <code>auroMenu-optionsChange</code>, <code>auroMenu-selectValueReset</code>, <code>auroMenu-selectValueFailure</code>, <code>auroMenu-deselectPrevented</code>, and <code>auroMenu-loadingChange</code> — so parent components can react to highlight, selection, and lifecycle changes. Native listboxes emit no equivalent events; you must dispatch your own.</p>
72
+ <p><code>auro-menu</code> dispatches a structured set of events — <code>auroMenu-selectedOption</code>, <code>auroMenu-activatedOption</code>, <code>auroMenu-optionsChange</code>, <code>auroMenu-selectValueReset</code>, <code>auroMenu-selectValueFailure</code>, and <code>auroMenu-loadingChange</code> — so parent components can react to highlight, selection, and lifecycle changes. Native listboxes emit no equivalent events; you must dispatch your own.</p>
71
73
  <auro-header level="3">Multi-select with array value</auro-header>
72
74
  <p><code>auro-menu</code> supports <code>multiselect</code>, exposing the selection as a JSON-stringified array via <code>value</code> and as an array of elements via <code>optionSelected</code>. With plain HTML, you must track multiple selections yourself, manage the <code>aria-multiselectable</code> attribute, and serialize the result manually.</p>
73
- <auro-header level="3">Allow-deselect behavior</auro-header>
74
- <p><code>auro-menu</code> supports an <code>allowDeselect</code> attribute that lets a user click an already-selected option to clear it in single-select mode, with a <code>auroMenu-deselectPrevented</code> event when the operation is blocked. Native listboxes do not have a deselect concept; you must implement and gate the behavior yourself.</p>
75
+ <auro-header level="3">Multi-select deselect</auro-header>
76
+ <p>In multi-select mode, clicking an already-selected option toggles it off. Native listboxes have no built-in deselect concept for individual options; you must implement the toggle behavior and update <code>aria-selected</code> yourself.</p>
75
77
  <auro-header level="3">Select-by-value and reset</auro-header>
76
- <p><code>auro-menu</code> exposes a <code>value</code> attribute that drives selection programmatically (including the <code>selectAllMatchingOptions</code> option for multi-select) and a single <code>reset()</code> method that clears all selection and validation state. With plain HTML, you must walk the list to find a matching option, set its state, and write your own reset routine.</p>
78
+ <p><code>auro-menu</code> exposes a <code>value</code> attribute that drives selection programmatically (accepting a JSON-stringified array in multi-select mode) and a single <code>reset()</code> method that clears all selection and validation state. With plain HTML, you must walk the list to find a matching option, set its state, and write your own reset routine.</p>
77
79
  <auro-header level="3">Loading state</auro-header>
78
80
  <p><code>auro-menu</code> renders a built-in loading placeholder via <code>loadingIcon</code> and <code>loadingText</code> slots, sets <code>aria-busy</code>, and emits <code>auroMenu-loadingChange</code> when the loading attribute toggles. With plain HTML, you must render a placeholder, manage <code>aria-busy</code>, and signal loading transitions yourself.</p>
79
81
  <auro-header level="3">Shape and size variants</auro-header>
@@ -96,9 +98,9 @@
96
98
  <td>Built-in</td>
97
99
  </tr>
98
100
  <tr>
99
- <td>Roving tabindex</td>
100
- <td>Manual</td>
101
- <td>Built-in</td>
101
+ <td>Active-option tracking</td>
102
+ <td>Manual (roving tabindex or <code>aria-activedescendant</code>)</td>
103
+ <td>Built-in (<code>active</code> class on the current option)</td>
102
104
  </tr>
103
105
  <tr>
104
106
  <td>Arrow-key navigation</td>
@@ -106,9 +108,14 @@
106
108
  <td>Built-in</td>
107
109
  </tr>
108
110
  <tr>
109
- <td>Type-ahead and <code>matchword</code> highlighting</td>
111
+ <td><code>matchWord</code> highlighting</td>
112
+ <td>Not supported</td>
113
+ <td>Built-in via <code>matchWord</code></td>
114
+ </tr>
115
+ <tr>
116
+ <td>Type-ahead navigation</td>
110
117
  <td>Not supported</td>
111
- <td>Built-in via <code>matchword</code></td>
118
+ <td>Provided by parent <code>auro-select</code> / <code>auro-combobox</code></td>
112
119
  </tr>
113
120
  <tr>
114
121
  <td>Nested submenus</td>
@@ -118,7 +125,7 @@
118
125
  <tr>
119
126
  <td>Selection state coordination</td>
120
127
  <td>Manual <code>aria-selected</code> sync</td>
121
- <td>Centralized via menu service</td>
128
+ <td>Coordinated internally</td>
122
129
  </tr>
123
130
  <tr>
124
131
  <td>ARIA roles and <code>aria-busy</code></td>
@@ -136,9 +143,9 @@
136
143
  <td><code>multiselect</code> + <code>value</code></td>
137
144
  </tr>
138
145
  <tr>
139
- <td>Allow-deselect behavior</td>
146
+ <td>Multi-select deselect</td>
140
147
  <td>Manual</td>
141
- <td><code>allowDeselect</code> attribute</td>
148
+ <td>Click-to-toggle built in</td>
142
149
  </tr>
143
150
  <tr>
144
151
  <td>Select-by-value and reset</td>