@aurodesignsystem-dev/auro-formkit 0.0.0-pr1540.0 → 0.0.0-pr1541.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/components/checkbox/demo/customize.min.js +1 -1
  2. package/components/checkbox/demo/getting-started.min.js +1 -1
  3. package/components/checkbox/demo/index.min.js +1 -1
  4. package/components/checkbox/dist/index.js +1 -1
  5. package/components/checkbox/dist/registered.js +1 -1
  6. package/components/combobox/demo/customize.min.js +22 -4
  7. package/components/combobox/demo/getting-started.min.js +22 -4
  8. package/components/combobox/demo/index.min.js +22 -4
  9. package/components/combobox/dist/index.js +3 -3
  10. package/components/combobox/dist/registered.js +3 -3
  11. package/components/counter/demo/customize.min.js +2 -2
  12. package/components/counter/demo/index.min.js +2 -2
  13. package/components/counter/dist/index.js +2 -2
  14. package/components/counter/dist/registered.js +2 -2
  15. package/components/datepicker/demo/customize.min.js +3 -3
  16. package/components/datepicker/demo/index.min.js +3 -3
  17. package/components/datepicker/dist/index.js +3 -3
  18. package/components/datepicker/dist/registered.js +3 -3
  19. package/components/dropdown/demo/customize.min.js +1 -1
  20. package/components/dropdown/demo/getting-started.min.js +1 -1
  21. package/components/dropdown/demo/index.min.js +1 -1
  22. package/components/dropdown/dist/index.js +1 -1
  23. package/components/dropdown/dist/registered.js +1 -1
  24. package/components/form/demo/customize.min.js +34 -16
  25. package/components/form/demo/getting-started.min.js +34 -16
  26. package/components/form/demo/index.min.js +34 -16
  27. package/components/form/demo/registerDemoDeps.min.js +34 -16
  28. package/components/input/demo/customize.min.js +1 -1
  29. package/components/input/demo/getting-started.min.js +1 -1
  30. package/components/input/demo/index.min.js +1 -1
  31. package/components/input/dist/index.js +1 -1
  32. package/components/input/dist/registered.js +1 -1
  33. package/components/menu/demo/accessibility.md +9 -4
  34. package/components/menu/demo/api.md +3 -2
  35. package/components/menu/demo/css-only.md +26 -19
  36. package/components/menu/demo/customize.md +306 -46
  37. package/components/menu/demo/design.md +1 -1
  38. package/components/menu/demo/getting-started.md +143 -6
  39. package/components/menu/demo/index.min.js +144 -1
  40. package/components/menu/demo/keyboard-behavior.md +77 -4
  41. package/components/menu/demo/voiceover.md +12 -9
  42. package/components/menu/demo/why-menu.md +8 -9
  43. package/components/menu/dist/auro-menu.d.ts +1 -1
  44. package/components/menu/dist/auro-menuoption.d.ts +11 -0
  45. package/components/menu/dist/index.js +19 -1
  46. package/components/menu/dist/registered.js +19 -1
  47. package/components/radio/demo/customize.min.js +1 -1
  48. package/components/radio/demo/getting-started.min.js +1 -1
  49. package/components/radio/demo/index.min.js +1 -1
  50. package/components/radio/dist/index.js +1 -1
  51. package/components/radio/dist/registered.js +1 -1
  52. package/components/select/demo/accessibility.md +5 -0
  53. package/components/select/demo/customize.md +2 -2
  54. package/components/select/demo/customize.min.js +23 -5
  55. package/components/select/demo/design.md +10 -10
  56. package/components/select/demo/getting-started.min.js +23 -5
  57. package/components/select/demo/index.md +1 -1
  58. package/components/select/demo/index.min.js +23 -5
  59. package/components/select/demo/keyboard-behavior.md +63 -68
  60. package/components/select/demo/voiceover.md +28 -15
  61. package/components/select/dist/index.js +4 -4
  62. package/components/select/dist/registered.js +4 -4
  63. package/custom-elements.json +1795 -1770
  64. package/package.json +1 -1
@@ -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> keeps focus on the menu element itself and tracks the active option internally (via an <code>active</code> CSS class on the current <code>auro-menuoption</code>) rather than moving focus between options. This is the aria-activedescendant-style pattern. 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. Each nested menu maintains its own selection state — the root menu's <code>value</code> and <code>optionSelected</code> are not updated when an option inside a nested menu is selected. 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>
@@ -9,15 +9,20 @@
9
9
  <auro-anchorlink fluid href="#restrictedWidth" class="level2 body-xs">Restricted Width</auro-anchorlink>
10
10
  <auro-anchorlink fluid href="#scroll" class="level2 body-xs">Scroll</auro-anchorlink>
11
11
  <auro-anchorlink fluid href="#nocheckmark" class="level2 body-xs">No Checkmark</auro-anchorlink>
12
+ <auro-anchorlink fluid href="#dividers" class="level2 body-xs">Dividers</auro-anchorlink>
13
+ <auro-anchorlink fluid href="#static" class="level2 body-xs">Static Options</auro-anchorlink>
14
+ <auro-anchorlink fluid href="#matchWord" class="level2 body-xs">Match Word</auro-anchorlink>
15
+ <auro-anchorlink fluid href="#persistent" class="level2 body-xs">Persistent Option</auro-anchorlink>
16
+ <auro-anchorlink fluid href="#nomatch" class="level2 body-xs">No Match Placeholder</auro-anchorlink>
12
17
  <auro-anchorlink fluid href="#nestedMenu" class="level2 body-xs">Nested Menu</auro-anchorlink>
13
18
  <auro-anchorlink fluid href="#customBehavior">Behavior</auro-anchorlink>
14
19
  <auro-anchorlink fluid href="#disabled" class="level2 body-xs">Disabled Options</auro-anchorlink>
15
20
  <auro-anchorlink fluid href="#disabledMenu" class="level2 body-xs">Disabled Menu</auro-anchorlink>
21
+ <auro-anchorlink fluid href="#loading" class="level2 body-xs">Loading</auro-anchorlink>
16
22
  <auro-anchorlink fluid href="#hidden" class="level2 body-xs">Hidden Options</auro-anchorlink>
17
23
  <auro-anchorlink fluid href="#multiselect" class="level2 body-xs">Multi-Select</auro-anchorlink>
18
24
  <auro-anchorlink fluid href="#presetValue" class="level2 body-xs">Preset Value</auro-anchorlink>
19
25
  <auro-anchorlink fluid href="#presetValueMultiselect" class="level2 body-xs">Preset Value (Multi)</auro-anchorlink>
20
- <auro-anchorlink fluid href="#preselect" class="level2 body-xs">Pre-Selected</auro-anchorlink>
21
26
  </auro-nav>
22
27
  </nav>
23
28
  <div class="mainContent">
@@ -52,9 +57,9 @@
52
57
  --ds-auro-menuoption-text-color: #5b1a6e;
53
58
  }
54
59
  </style>
55
- <auro-menu id="customTokensMenu">
60
+ <auro-menu id="customTokensMenu" value="price">
56
61
  <auro-menuoption value="stops">Stops</auro-menuoption>
57
- <auro-menuoption value="price" selected>Price</auro-menuoption>
62
+ <auro-menuoption value="price">Price</auro-menuoption>
58
63
  <auro-menuoption value="duration">Duration</auro-menuoption>
59
64
  <hr>
60
65
  <auro-menuoption value="departure">Departure</auro-menuoption>
@@ -75,9 +80,9 @@
75
80
  --ds-auro-menuoption-text-color: #5b1a6e;
76
81
  }
77
82
  &lt;/style&gt;
78
- &lt;auro-menu id="customTokensMenu"&gt;
83
+ &lt;auro-menu id="customTokensMenu" value="price"&gt;
79
84
  &lt;auro-menuoption value="stops"&gt;Stops&lt;/auro-menuoption&gt;
80
- &lt;auro-menuoption value="price" selected&gt;Price&lt;/auro-menuoption&gt;
85
+ &lt;auro-menuoption value="price"&gt;Price&lt;/auro-menuoption&gt;
81
86
  &lt;auro-menuoption value="duration"&gt;Duration&lt;/auro-menuoption&gt;
82
87
  &lt;hr&gt;
83
88
  &lt;auro-menuoption value="departure"&gt;Departure&lt;/auro-menuoption&gt;
@@ -278,6 +283,185 @@
278
283
  &lt;/auro-menu&gt;</code></pre>
279
284
  <!-- AURO-GENERATED-CONTENT:END -->
280
285
  </auro-accordion>
286
+ <auro-header level="3" id="dividers">Dividers</auro-header>
287
+ <p>Insert standard <code>&lt;hr&gt;</code> elements between <code>auro-menuoption</code> elements to create visual group separators. Dividers are non-interactive and are skipped during keyboard navigation.</p>
288
+ <div class="exampleWrapper">
289
+ <!-- AURO-GENERATED-CONTENT:START (FILE:src=./../apiExamples/hr.html) -->
290
+ <!-- The below content is automatically added from ./../apiExamples/hr.html -->
291
+ <auro-menu>
292
+ <auro-menuoption value="new tab">New tab</auro-menuoption>
293
+ <auro-menuoption value="new window">New window</auro-menuoption>
294
+ <auro-menuoption value="open file">Open file</auro-menuoption>
295
+ <auro-menuoption value="open location">Open location</auro-menuoption>
296
+ <hr>
297
+ <auro-menuoption value="close window">Close window</auro-menuoption>
298
+ <auro-menuoption value="close tab">Close tab</auro-menuoption>
299
+ <auro-menuoption value="save page as...">Save page as...</auro-menuoption>
300
+ <hr>
301
+ <auro-menuoption value="share">Share</auro-menuoption>
302
+ <hr>
303
+ <auro-menuoption value="print">Print</auro-menuoption>
304
+ </auro-menu>
305
+ <!-- AURO-GENERATED-CONTENT:END -->
306
+ </div>
307
+ <auro-accordion alignRight>
308
+ <span slot="trigger">See code</span>
309
+ <!-- AURO-GENERATED-CONTENT:START (CODE:src=./../apiExamples/hr.html) -->
310
+ <!-- The below code snippet is automatically added from ./../apiExamples/hr.html -->
311
+ <pre class="language-html"><code class="language-html">&lt;auro-menu&gt;
312
+ &lt;auro-menuoption value="new tab"&gt;New tab&lt;/auro-menuoption&gt;
313
+ &lt;auro-menuoption value="new window"&gt;New window&lt;/auro-menuoption&gt;
314
+ &lt;auro-menuoption value="open file"&gt;Open file&lt;/auro-menuoption&gt;
315
+ &lt;auro-menuoption value="open location"&gt;Open location&lt;/auro-menuoption&gt;
316
+ &lt;hr&gt;
317
+ &lt;auro-menuoption value="close window"&gt;Close window&lt;/auro-menuoption&gt;
318
+ &lt;auro-menuoption value="close tab"&gt;Close tab&lt;/auro-menuoption&gt;
319
+ &lt;auro-menuoption value="save page as..."&gt;Save page as...&lt;/auro-menuoption&gt;
320
+ &lt;hr&gt;
321
+ &lt;auro-menuoption value="share"&gt;Share&lt;/auro-menuoption&gt;
322
+ &lt;hr&gt;
323
+ &lt;auro-menuoption value="print"&gt;Print&lt;/auro-menuoption&gt;
324
+ &lt;/auro-menu&gt;</code></pre>
325
+ <!-- AURO-GENERATED-CONTENT:END -->
326
+ </auro-accordion>
327
+ <auro-header level="3" id="static">Static Options</auro-header>
328
+ <p>Add the <code>static</code> attribute to an <code>auro-menuoption</code> to make it non-interactive — the option renders but is skipped during keyboard navigation and cannot be selected. Useful for section headers or informational rows inside a menu.</p>
329
+ <div class="exampleWrapper">
330
+ <!-- AURO-GENERATED-CONTENT:START (FILE:src=./../apiExamples/static.html) -->
331
+ <!-- The below content is automatically added from ./../apiExamples/static.html -->
332
+ <auro-menu>
333
+ <auro-menuoption static>Popular Destinations</auro-menuoption>
334
+ <auro-menuoption value="sea">Seattle (SEA)</auro-menuoption>
335
+ <auro-menuoption value="pdx">Portland (PDX)</auro-menuoption>
336
+ <auro-menuoption value="sfo">San Francisco (SFO)</auro-menuoption>
337
+ <auro-menuoption static>International</auro-menuoption>
338
+ <auro-menuoption value="lhr">London (LHR)</auro-menuoption>
339
+ <auro-menuoption value="nrt">Tokyo (NRT)</auro-menuoption>
340
+ </auro-menu>
341
+ <!-- AURO-GENERATED-CONTENT:END -->
342
+ </div>
343
+ <auro-accordion alignRight>
344
+ <span slot="trigger">See code</span>
345
+ <!-- AURO-GENERATED-CONTENT:START (CODE:src=./../apiExamples/static.html) -->
346
+ <!-- The below code snippet is automatically added from ./../apiExamples/static.html -->
347
+ <pre class="language-html"><code class="language-html">&lt;auro-menu&gt;
348
+ &lt;auro-menuoption static&gt;Popular Destinations&lt;/auro-menuoption&gt;
349
+ &lt;auro-menuoption value="sea"&gt;Seattle (SEA)&lt;/auro-menuoption&gt;
350
+ &lt;auro-menuoption value="pdx"&gt;Portland (PDX)&lt;/auro-menuoption&gt;
351
+ &lt;auro-menuoption value="sfo"&gt;San Francisco (SFO)&lt;/auro-menuoption&gt;
352
+ &lt;auro-menuoption static&gt;International&lt;/auro-menuoption&gt;
353
+ &lt;auro-menuoption value="lhr"&gt;London (LHR)&lt;/auro-menuoption&gt;
354
+ &lt;auro-menuoption value="nrt"&gt;Tokyo (NRT)&lt;/auro-menuoption&gt;
355
+ &lt;/auro-menu&gt;</code></pre>
356
+ <!-- AURO-GENERATED-CONTENT:END -->
357
+ </auro-accordion>
358
+ <auro-header level="3" id="matchWord">Match Word</auro-header>
359
+ <p>Set the <code>matchWord</code> property to a string, and any option whose text contains that substring will render the matching portion visually highlighted. Typically driven by an input's <code>keyup</code> handler to power real-time filtering — this is the mechanism <code>&lt;auro-combobox&gt;</code> uses to highlight matches as the user types.</p>
360
+ <div class="exampleWrapper">
361
+ <!-- AURO-GENERATED-CONTENT:START (FILE:src=./../apiExamples/match-word.html) -->
362
+ <!-- The below content is automatically added from ./../apiExamples/match-word.html -->
363
+ <auro-input id="matchWordInput" required>
364
+ <span slot="label">Enter a value to match in the menu</span>
365
+ </auro-input>
366
+ <br />
367
+ <auro-menu id="matchWordMenu">
368
+ <auro-menuoption value="stops">Stops</auro-menuoption>
369
+ <auro-menuoption value="price">Price</auro-menuoption>
370
+ <auro-menuoption value="duration">Duration</auro-menuoption>
371
+ <auro-menuoption value="departure">Departure</auro-menuoption>
372
+ <auro-menu>
373
+ <auro-menuoption value="apples">Apples</auro-menuoption>
374
+ <auro-menuoption value="oranges">Oranges</auro-menuoption>
375
+ <auro-menuoption value="peaches">Peaches</auro-menuoption>
376
+ </auro-menu>
377
+ <auro-menuoption value="arrival">Arrival</auro-menuoption>
378
+ </auro-menu>
379
+ <!-- AURO-GENERATED-CONTENT:END -->
380
+ </div>
381
+ <auro-accordion alignRight>
382
+ <span slot="trigger">See code</span>
383
+ <!-- AURO-GENERATED-CONTENT:START (CODE:src=./../apiExamples/match-word.html) -->
384
+ <!-- The below code snippet is automatically added from ./../apiExamples/match-word.html -->
385
+ <pre class="language-html"><code class="language-html">&lt;auro-input id="matchWordInput" required&gt;
386
+ &lt;span slot="label"&gt;Enter a value to match in the menu&lt;/span&gt;
387
+ &lt;/auro-input&gt;
388
+ &lt;br /&gt;
389
+ &lt;auro-menu id="matchWordMenu"&gt;
390
+ &lt;auro-menuoption value="stops"&gt;Stops&lt;/auro-menuoption&gt;
391
+ &lt;auro-menuoption value="price"&gt;Price&lt;/auro-menuoption&gt;
392
+ &lt;auro-menuoption value="duration"&gt;Duration&lt;/auro-menuoption&gt;
393
+ &lt;auro-menuoption value="departure"&gt;Departure&lt;/auro-menuoption&gt;
394
+ &lt;auro-menu&gt;
395
+ &lt;auro-menuoption value="apples"&gt;Apples&lt;/auro-menuoption&gt;
396
+ &lt;auro-menuoption value="oranges"&gt;Oranges&lt;/auro-menuoption&gt;
397
+ &lt;auro-menuoption value="peaches"&gt;Peaches&lt;/auro-menuoption&gt;
398
+ &lt;/auro-menu&gt;
399
+ &lt;auro-menuoption value="arrival"&gt;Arrival&lt;/auro-menuoption&gt;
400
+ &lt;/auro-menu&gt;</code></pre>
401
+ <!-- AURO-GENERATED-CONTENT:END -->
402
+ </auro-accordion>
403
+ <auro-header level="3" id="persistent">Persistent Option</auro-header>
404
+ <p>Add the <code>persistent</code> attribute to an <code>auro-menuoption</code> to opt it out of <code>matchWord</code> highlighting. The option remains fully interactive but its label is never rewritten — useful for utility rows like "Add new…" that should render identically regardless of the current filter string.</p>
405
+ <div class="exampleWrapper">
406
+ <!-- AURO-GENERATED-CONTENT:START (FILE:src=./../apiExamples/persistent.html) -->
407
+ <!-- The below content is automatically added from ./../apiExamples/persistent.html -->
408
+ <auro-input id="persistentExampleInput">
409
+ <span slot="label">Type to highlight matches</span>
410
+ </auro-input>
411
+ <br />
412
+ <auro-menu id="persistentExampleMenu">
413
+ <auro-menuoption value="stops">Stops</auro-menuoption>
414
+ <auro-menuoption value="price">Price</auro-menuoption>
415
+ <auro-menuoption value="duration">Duration</auro-menuoption>
416
+ <auro-menuoption value="departure">Departure</auro-menuoption>
417
+ <auro-menuoption value="arrival">Arrival</auro-menuoption>
418
+ <auro-menuoption value="add" persistent>+ Add a new sort option</auro-menuoption>
419
+ </auro-menu>
420
+ <!-- AURO-GENERATED-CONTENT:END -->
421
+ </div>
422
+ <auro-accordion alignRight>
423
+ <span slot="trigger">See code</span>
424
+ <!-- AURO-GENERATED-CONTENT:START (CODE:src=./../apiExamples/persistent.html) -->
425
+ <!-- The below code snippet is automatically added from ./../apiExamples/persistent.html -->
426
+ <pre class="language-html"><code class="language-html">&lt;auro-input id="persistentExampleInput"&gt;
427
+ &lt;span slot="label"&gt;Type to highlight matches&lt;/span&gt;
428
+ &lt;/auro-input&gt;
429
+ &lt;br /&gt;
430
+ &lt;auro-menu id="persistentExampleMenu"&gt;
431
+ &lt;auro-menuoption value="stops"&gt;Stops&lt;/auro-menuoption&gt;
432
+ &lt;auro-menuoption value="price"&gt;Price&lt;/auro-menuoption&gt;
433
+ &lt;auro-menuoption value="duration"&gt;Duration&lt;/auro-menuoption&gt;
434
+ &lt;auro-menuoption value="departure"&gt;Departure&lt;/auro-menuoption&gt;
435
+ &lt;auro-menuoption value="arrival"&gt;Arrival&lt;/auro-menuoption&gt;
436
+ &lt;auro-menuoption value="add" persistent&gt;+ Add a new sort option&lt;/auro-menuoption&gt;
437
+ &lt;/auro-menu&gt;</code></pre>
438
+ <!-- AURO-GENERATED-CONTENT:END -->
439
+ </auro-accordion>
440
+ <auro-header level="3" id="nomatch">No Match Placeholder</auro-header>
441
+ <p>Mark an option with the <code>nomatch</code> attribute to designate it as the placeholder shown when no other options match the user's input. When paired with <code>&lt;auro-combobox&gt;</code>, the combobox toggles the <code>hidden</code> attribute on this option automatically based on filter results.</p>
442
+ <div class="exampleWrapper">
443
+ <!-- AURO-GENERATED-CONTENT:START (FILE:src=./../apiExamples/nomatch.html) -->
444
+ <!-- The below content is automatically added from ./../apiExamples/nomatch.html -->
445
+ <auro-menu>
446
+ <auro-menuoption value="stops">Stops</auro-menuoption>
447
+ <auro-menuoption value="price">Price</auro-menuoption>
448
+ <auro-menuoption value="duration">Duration</auro-menuoption>
449
+ <auro-menuoption nomatch>No matching results</auro-menuoption>
450
+ </auro-menu>
451
+ <!-- AURO-GENERATED-CONTENT:END -->
452
+ </div>
453
+ <auro-accordion alignRight>
454
+ <span slot="trigger">See code</span>
455
+ <!-- AURO-GENERATED-CONTENT:START (CODE:src=./../apiExamples/nomatch.html) -->
456
+ <!-- The below code snippet is automatically added from ./../apiExamples/nomatch.html -->
457
+ <pre class="language-html"><code class="language-html">&lt;auro-menu&gt;
458
+ &lt;auro-menuoption value="stops"&gt;Stops&lt;/auro-menuoption&gt;
459
+ &lt;auro-menuoption value="price"&gt;Price&lt;/auro-menuoption&gt;
460
+ &lt;auro-menuoption value="duration"&gt;Duration&lt;/auro-menuoption&gt;
461
+ &lt;auro-menuoption nomatch&gt;No matching results&lt;/auro-menuoption&gt;
462
+ &lt;/auro-menu&gt;</code></pre>
463
+ <!-- AURO-GENERATED-CONTENT:END -->
464
+ </auro-accordion>
281
465
  <auro-header level="3" id="nestedMenu">Nested Menu</auro-header>
282
466
  <p>Nest additional <code>auro-menu</code> elements inside the default slot to create sub-menus. Each nested menu maintains its own selection state.</p>
283
467
  <div class="exampleWrapper">
@@ -440,6 +624,123 @@
440
624
  &lt;/auro-menu&gt;</code></pre>
441
625
  <!-- AURO-GENERATED-CONTENT:END -->
442
626
  </auro-accordion>
627
+ <auro-header level="3" id="loading">Loading</auro-header>
628
+ <p>Use the <code>loading</code> attribute on <code>auro-menu</code> to indicate that options are being fetched asynchronously. Optional <code>loadingIcon</code> and <code>loadingText</code> slots let you customize the placeholder — a spinner, message, both, or neither.</p>
629
+ <div class="exampleWrapper">
630
+ <!-- AURO-GENERATED-CONTENT:START (FILE:src=./../apiExamples/loading.html) -->
631
+ <!-- The below content is automatically added from ./../apiExamples/loading.html -->
632
+ <auro-button id="loadingExampleToggleButton">Toggle Loading</auro-button>
633
+ <table id="loadingExampleTable">
634
+ <thead>
635
+ <tr>
636
+ <td width="25%">Spinner + Text</td>
637
+ <td width="25%">Text Only</td>
638
+ <td width="25%">Spinner Only</td>
639
+ <td width="25%">None</td>
640
+ </tr>
641
+ </thead>
642
+ <tr>
643
+ <td>
644
+ <auro-menu>
645
+ <auro-loader slot="loadingIcon" orbit xs></auro-loader><span slot="loadingText">Loading...</span>
646
+ <auro-menuoption value="stops">Stops</auro-menuoption>
647
+ <auro-menuoption value="price">Price</auro-menuoption>
648
+ <auro-menuoption value="duration">Duration</auro-menuoption>
649
+ <auro-menuoption value="departure">Departure</auro-menuoption>
650
+ <auro-menuoption value="arrival">Arrival</auro-menuoption>
651
+ </auro-menu>
652
+ </td>
653
+ <td>
654
+ <auro-menu>
655
+ <span slot="loadingText">Loading...</span>
656
+ <auro-menuoption value="stops">Stops</auro-menuoption>
657
+ <auro-menuoption value="price">Price</auro-menuoption>
658
+ <auro-menuoption value="duration">Duration</auro-menuoption>
659
+ <auro-menuoption value="departure">Departure</auro-menuoption>
660
+ <auro-menuoption value="arrival">Arrival</auro-menuoption>
661
+ </auro-menu>
662
+ </td>
663
+ <td>
664
+ <auro-menu>
665
+ <auro-loader slot="loadingIcon" orbit xs></auro-loader>
666
+ <auro-menuoption value="stops">Stops</auro-menuoption>
667
+ <auro-menuoption value="price">Price</auro-menuoption>
668
+ <auro-menuoption value="duration">Duration</auro-menuoption>
669
+ <auro-menuoption value="departure">Departure</auro-menuoption>
670
+ <auro-menuoption value="arrival">Arrival</auro-menuoption>
671
+ </auro-menu>
672
+ </td>
673
+ <td>
674
+ <auro-menu>
675
+ <auro-menuoption value="stops">Stops</auro-menuoption>
676
+ <auro-menuoption value="price">Price</auro-menuoption>
677
+ <auro-menuoption value="duration">Duration</auro-menuoption>
678
+ <auro-menuoption value="departure">Departure</auro-menuoption>
679
+ <auro-menuoption value="arrival">Arrival</auro-menuoption>
680
+ </auro-menu>
681
+ </td>
682
+ </tr>
683
+ </table>
684
+ <!-- AURO-GENERATED-CONTENT:END -->
685
+ </div>
686
+ <auro-accordion alignRight>
687
+ <span slot="trigger">See code</span>
688
+ <!-- AURO-GENERATED-CONTENT:START (CODE:src=./../apiExamples/loading.html) -->
689
+ <!-- The below code snippet is automatically added from ./../apiExamples/loading.html -->
690
+ <pre class="language-html"><code class="language-html">&lt;auro-button id="loadingExampleToggleButton"&gt;Toggle Loading&lt;/auro-button&gt;
691
+ &lt;table id="loadingExampleTable"&gt;
692
+ &lt;thead&gt;
693
+ &lt;tr&gt;
694
+ &lt;td width="25%"&gt;Spinner + Text&lt;/td&gt;
695
+ &lt;td width="25%"&gt;Text Only&lt;/td&gt;
696
+ &lt;td width="25%"&gt;Spinner Only&lt;/td&gt;
697
+ &lt;td width="25%"&gt;None&lt;/td&gt;
698
+ &lt;/tr&gt;
699
+ &lt;/thead&gt;
700
+ &lt;tr&gt;
701
+ &lt;td&gt;
702
+ &lt;auro-menu&gt;
703
+ &lt;auro-loader slot="loadingIcon" orbit xs&gt;&lt;/auro-loader&gt;&lt;span slot="loadingText"&gt;Loading...&lt;/span&gt;
704
+ &lt;auro-menuoption value="stops"&gt;Stops&lt;/auro-menuoption&gt;
705
+ &lt;auro-menuoption value="price"&gt;Price&lt;/auro-menuoption&gt;
706
+ &lt;auro-menuoption value="duration"&gt;Duration&lt;/auro-menuoption&gt;
707
+ &lt;auro-menuoption value="departure"&gt;Departure&lt;/auro-menuoption&gt;
708
+ &lt;auro-menuoption value="arrival"&gt;Arrival&lt;/auro-menuoption&gt;
709
+ &lt;/auro-menu&gt;
710
+ &lt;/td&gt;
711
+ &lt;td&gt;
712
+ &lt;auro-menu&gt;
713
+ &lt;span slot="loadingText"&gt;Loading...&lt;/span&gt;
714
+ &lt;auro-menuoption value="stops"&gt;Stops&lt;/auro-menuoption&gt;
715
+ &lt;auro-menuoption value="price"&gt;Price&lt;/auro-menuoption&gt;
716
+ &lt;auro-menuoption value="duration"&gt;Duration&lt;/auro-menuoption&gt;
717
+ &lt;auro-menuoption value="departure"&gt;Departure&lt;/auro-menuoption&gt;
718
+ &lt;auro-menuoption value="arrival"&gt;Arrival&lt;/auro-menuoption&gt;
719
+ &lt;/auro-menu&gt;
720
+ &lt;/td&gt;
721
+ &lt;td&gt;
722
+ &lt;auro-menu&gt;
723
+ &lt;auro-loader slot="loadingIcon" orbit xs&gt;&lt;/auro-loader&gt;
724
+ &lt;auro-menuoption value="stops"&gt;Stops&lt;/auro-menuoption&gt;
725
+ &lt;auro-menuoption value="price"&gt;Price&lt;/auro-menuoption&gt;
726
+ &lt;auro-menuoption value="duration"&gt;Duration&lt;/auro-menuoption&gt;
727
+ &lt;auro-menuoption value="departure"&gt;Departure&lt;/auro-menuoption&gt;
728
+ &lt;auro-menuoption value="arrival"&gt;Arrival&lt;/auro-menuoption&gt;
729
+ &lt;/auro-menu&gt;
730
+ &lt;/td&gt;
731
+ &lt;td&gt;
732
+ &lt;auro-menu&gt;
733
+ &lt;auro-menuoption value="stops"&gt;Stops&lt;/auro-menuoption&gt;
734
+ &lt;auro-menuoption value="price"&gt;Price&lt;/auro-menuoption&gt;
735
+ &lt;auro-menuoption value="duration"&gt;Duration&lt;/auro-menuoption&gt;
736
+ &lt;auro-menuoption value="departure"&gt;Departure&lt;/auro-menuoption&gt;
737
+ &lt;auro-menuoption value="arrival"&gt;Arrival&lt;/auro-menuoption&gt;
738
+ &lt;/auro-menu&gt;
739
+ &lt;/td&gt;
740
+ &lt;/tr&gt;
741
+ &lt;/table&gt;</code></pre>
742
+ <!-- AURO-GENERATED-CONTENT:END -->
743
+ </auro-accordion>
443
744
  <auro-header level="3" id="hidden">Hidden Options</auro-header>
444
745
  <p>Use the <code>hidden</code> attribute on <code>auro-menuoption</code> to visually hide an option while keeping it in the DOM.</p>
445
746
  <div class="exampleWrapper">
@@ -562,47 +863,6 @@
562
863
  &lt;/auro-menu&gt;</code></pre>
563
864
  <!-- AURO-GENERATED-CONTENT:END -->
564
865
  </auro-accordion>
565
- <auro-header level="3" id="preselect">Pre-Selected</auro-header>
566
- <p>Use the <code>selected</code> attribute on <code>auro-menuoption</code> to pre-select an option when the menu renders.</p>
567
- <div class="exampleWrapper">
568
- <!-- AURO-GENERATED-CONTENT:START (FILE:src=./../apiExamples/preselect.html) -->
569
- <!-- The below content is automatically added from ./../apiExamples/preselect.html -->
570
- <auro-menu>
571
- <auro-menuoption value="new tab">New tab</auro-menuoption>
572
- <auro-menuoption value="new window" selected>New window</auro-menuoption>
573
- <auro-menuoption value="open file">Open file</auro-menuoption>
574
- <auro-menuoption value="open location">Open location</auro-menuoption>
575
- <hr>
576
- <auro-menuoption value="close window">Close window</auro-menuoption>
577
- <auro-menuoption value="close tab" disabled>Close tab</auro-menuoption>
578
- <auro-menuoption value="save page as...">Save page as...</auro-menuoption>
579
- <hr>
580
- <auro-menuoption value="share" disabled>Share</auro-menuoption>
581
- <hr>
582
- <auro-menuoption value="print">Print</auro-menuoption>
583
- </auro-menu>
584
- <!-- AURO-GENERATED-CONTENT:END -->
585
- </div>
586
- <auro-accordion alignRight>
587
- <span slot="trigger">See code</span>
588
- <!-- AURO-GENERATED-CONTENT:START (CODE:src=./../apiExamples/preselect.html) -->
589
- <!-- The below code snippet is automatically added from ./../apiExamples/preselect.html -->
590
- <pre class="language-html"><code class="language-html">&lt;auro-menu&gt;
591
- &lt;auro-menuoption value="new tab"&gt;New tab&lt;/auro-menuoption&gt;
592
- &lt;auro-menuoption value="new window" selected&gt;New window&lt;/auro-menuoption&gt;
593
- &lt;auro-menuoption value="open file"&gt;Open file&lt;/auro-menuoption&gt;
594
- &lt;auro-menuoption value="open location"&gt;Open location&lt;/auro-menuoption&gt;
595
- &lt;hr&gt;
596
- &lt;auro-menuoption value="close window"&gt;Close window&lt;/auro-menuoption&gt;
597
- &lt;auro-menuoption value="close tab" disabled&gt;Close tab&lt;/auro-menuoption&gt;
598
- &lt;auro-menuoption value="save page as..."&gt;Save page as...&lt;/auro-menuoption&gt;
599
- &lt;hr&gt;
600
- &lt;auro-menuoption value="share" disabled&gt;Share&lt;/auro-menuoption&gt;
601
- &lt;hr&gt;
602
- &lt;auro-menuoption value="print"&gt;Print&lt;/auro-menuoption&gt;
603
- &lt;/auro-menu&gt;</code></pre>
604
- <!-- AURO-GENERATED-CONTENT:END -->
605
- </auro-accordion>
606
866
  </section>
607
867
  </div>
608
868
  </div>
@@ -22,7 +22,7 @@
22
22
  <auro-header level="2" id="shapeSizeLayout">Shape | Size | Layout Support</auro-header>
23
23
  <p>The <code>auro-menu</code> component supports the <code>shape</code> and <code>size</code> feature set. The component defaults to <code>shape="box"</code> and <code>size="sm"</code>. The <code>layout</code> attribute is not supported by this component.</p>
24
24
  <auro-header level="3" id="size">Size</auro-header>
25
- <p>Use the <code>size</code> attribute to change the size of menu options. Supported values are <code>sm</code> (default) and <code>md</code>.</p>
25
+ <p>Use the <code>size</code> attribute to change the size of menu options. Supported values are <code>xs</code>, <code>sm</code> (default), <code>md</code>, <code>lg</code>, and <code>xl</code>.</p>
26
26
  <div class="exampleWrapper">
27
27
  <!-- AURO-GENERATED-CONTENT:START (FILE:src=./../apiExamples/size.html) -->
28
28
  <!-- The below content is automatically added from ./../apiExamples/size.html -->