@spectrum-web-components/menu 1.3.0-testing.0 → 1.3.1-beta.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 (52) hide show
  1. package/README.md +195 -20
  2. package/custom-elements.json +40 -0
  3. package/package.json +11 -11
  4. package/src/Menu.d.ts +1 -0
  5. package/src/Menu.dev.js +9 -0
  6. package/src/Menu.dev.js.map +2 -2
  7. package/src/Menu.js +2 -2
  8. package/src/Menu.js.map +2 -2
  9. package/src/menu-divider.css.dev.js +1 -1
  10. package/src/menu-divider.css.dev.js.map +1 -1
  11. package/src/menu-divider.css.js +1 -1
  12. package/src/menu-divider.css.js.map +1 -1
  13. package/src/menu-group.css.dev.js +1 -1
  14. package/src/menu-group.css.dev.js.map +1 -1
  15. package/src/menu-group.css.js +1 -1
  16. package/src/menu-group.css.js.map +1 -1
  17. package/src/menu-item.css.dev.js +1 -1
  18. package/src/menu-item.css.dev.js.map +1 -1
  19. package/src/menu-item.css.js +1 -1
  20. package/src/menu-item.css.js.map +1 -1
  21. package/src/menu-overrides.css.dev.js +1 -1
  22. package/src/menu-overrides.css.dev.js.map +1 -1
  23. package/src/menu-overrides.css.js +3 -3
  24. package/src/menu-overrides.css.js.map +1 -1
  25. package/src/menu.css.dev.js +1 -1
  26. package/src/menu.css.dev.js.map +1 -1
  27. package/src/menu.css.js +1 -1
  28. package/src/menu.css.js.map +1 -1
  29. package/src/spectrum-checkmark.css.dev.js +1 -1
  30. package/src/spectrum-checkmark.css.dev.js.map +1 -1
  31. package/src/spectrum-checkmark.css.js +3 -3
  32. package/src/spectrum-checkmark.css.js.map +1 -1
  33. package/src/spectrum-chevron.css.dev.js +1 -1
  34. package/src/spectrum-chevron.css.dev.js.map +1 -1
  35. package/src/spectrum-chevron.css.js +3 -3
  36. package/src/spectrum-chevron.css.js.map +1 -1
  37. package/src/spectrum-menu-divider.css.dev.js +1 -1
  38. package/src/spectrum-menu-divider.css.dev.js.map +1 -1
  39. package/src/spectrum-menu-divider.css.js +1 -1
  40. package/src/spectrum-menu-divider.css.js.map +1 -1
  41. package/src/spectrum-menu-item.css.dev.js +1 -1
  42. package/src/spectrum-menu-item.css.dev.js.map +1 -1
  43. package/src/spectrum-menu-item.css.js +1 -1
  44. package/src/spectrum-menu-item.css.js.map +1 -1
  45. package/src/spectrum-menu-sectionHeading.css.dev.js +1 -1
  46. package/src/spectrum-menu-sectionHeading.css.dev.js.map +1 -1
  47. package/src/spectrum-menu-sectionHeading.css.js +1 -1
  48. package/src/spectrum-menu-sectionHeading.css.js.map +1 -1
  49. package/src/spectrum-menu.css.dev.js +1 -1
  50. package/src/spectrum-menu.css.dev.js.map +1 -1
  51. package/src/spectrum-menu.css.js +1 -1
  52. package/src/spectrum-menu.css.js.map +1 -1
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
- ## Description
1
+ ## Overview
2
2
 
3
- An `<sp-menu>` is used for creating a menu list. The various elements inside a menu are given as `<sp-menu-group>`, `<sp-menu-item>`, or `<sp-menu-divider>`. Often a `<sp-menu>` element will appear in a `<sp-popover>` element so that it displays as a togglig menu.
3
+ An `<sp-menu>` is used for creating a menu list. The various elements inside a menu are given as [`<sp-menu-group>`](../menu-group), [`<sp-menu-item>`](../menu-item), or `<sp-menu-divider>`. Often a `<sp-menu>` element will appear in a [`<sp-popover>`](../popover) element so that it displays as a toggling menu.
4
4
 
5
5
  ### Usage
6
6
 
@@ -32,11 +32,11 @@ import {
32
32
  } from '@spectrum-web-components/menu';
33
33
  ```
34
34
 
35
- ## Example
35
+ ### Anatomy
36
36
 
37
37
  <!-- prettier-ignore -->
38
38
  ```html
39
- <sp-menu>
39
+ <sp-menu label="Selection type">
40
40
  <sp-menu-item>
41
41
  Deselect
42
42
  </sp-menu-item>
@@ -58,10 +58,12 @@ import {
58
58
  </sp-menu>
59
59
  ```
60
60
 
61
+ #### Popover menus
62
+
61
63
  Often an `<sp-menu>` element will be delivered inside of an `<sp-popover>` element when displaying it above other content.
62
64
 
63
65
  ```html
64
- <sp-popover open style="position: relative">
66
+ <sp-popover open style="position: relative" label="Selection type">
65
67
  <sp-menu>
66
68
  <sp-menu-item value="item-1">Deselect</sp-menu-item>
67
69
  <sp-menu-item value="item-2">Select inverse</sp-menu-item>
@@ -73,15 +75,175 @@ Often an `<sp-menu>` element will be delivered inside of an `<sp-popover>` eleme
73
75
  </sp-popover>
74
76
  ```
75
77
 
76
- ## Managing a selection
78
+ #### Labels
79
+
80
+ To render accessibly, an `<sp-menu>` element or its parent `<sp-popover>` must have a label. For an accessible label that is visibly hidden, but can still be read by assistive technology, use the `label` attribute.
81
+
82
+ <sp-tabs selected="sp-field-label" auto label="Label options">
83
+ <sp-tab value="sp-field-label">Menu with label</sp-tab>
84
+ <sp-tab-panel value="sp-field-label">
85
+
86
+ ```html demo
87
+ <sp-menu id="menu-label-attribute" label="Selection type">
88
+ <sp-menu-item>Deselect</sp-menu-item>
89
+ <sp-menu-item>Select inverse</sp-menu-item>
90
+ <sp-menu-item>Feather...</sp-menu-item>
91
+ <sp-menu-item>Select and mask...</sp-menu-item>
92
+ <sp-menu-divider></sp-menu-divider>
93
+ <sp-menu-item>Save selection</sp-menu-item>
94
+ <sp-menu-item disabled>Make work path</sp-menu-item>
95
+ </sp-menu>
96
+ ```
97
+
98
+ </sp-tab-panel>
99
+ <sp-tab value="label-attribute">Popover with label</sp-tab>
100
+ <sp-tab-panel value="label-attribute">
101
+
102
+ ```html demo
103
+ <sp-popover open style="position: relative" label="Selection type:">
104
+ <sp-menu id="popover-label-attribute">
105
+ <sp-menu-item>Deselect</sp-menu-item>
106
+ <sp-menu-item>Select inverse</sp-menu-item>
107
+ <sp-menu-item>Feather...</sp-menu-item>
108
+ <sp-menu-item>Select and mask...</sp-menu-item>
109
+ <sp-menu-divider></sp-menu-divider>
110
+ <sp-menu-item>Save selection</sp-menu-item>
111
+ <sp-menu-item disabled>Make work path</sp-menu-item>
112
+ </sp-menu>
113
+ </sp-popover>
114
+ ```
115
+
116
+ </sp-tab-panel>
117
+ </sp-tabs>
118
+
119
+ ### Options
120
+
121
+ #### Sizes
122
+
123
+ <sp-tabs selected="m" auto label="Size attribute options">
124
+ <sp-tab value="s">Small</sp-tab>
125
+ <sp-tab-panel value="s">
126
+
127
+ ```html demo
128
+ <sp-menu id="menu-s" size="s" label="Selection type">
129
+ <sp-menu-item>Deselect</sp-menu-item>
130
+ <sp-menu-item>Select inverse</sp-menu-item>
131
+ <sp-menu-item>Feather...</sp-menu-item>
132
+ <sp-menu-item>Select and mask...</sp-menu-item>
133
+ <sp-menu-divider></sp-menu-divider>
134
+ <sp-menu-item>Save selection</sp-menu-item>
135
+ <sp-menu-item disabled>Make work path</sp-menu-item>
136
+ </sp-menu>
137
+ <sp-popover open style="position: relative" label="Selection type:">
138
+ <sp-menu id="menu-s-popover" size="s">
139
+ <sp-menu-item>Deselect</sp-menu-item>
140
+ <sp-menu-item>Select inverse</sp-menu-item>
141
+ <sp-menu-item>Feather...</sp-menu-item>
142
+ <sp-menu-item>Select and mask...</sp-menu-item>
143
+ <sp-menu-divider></sp-menu-divider>
144
+ <sp-menu-item>Save selection</sp-menu-item>
145
+ <sp-menu-item disabled>Make work path</sp-menu-item>
146
+ </sp-menu>
147
+ </sp-popover>
148
+ ```
149
+
150
+ </sp-tab-panel>
151
+ <sp-tab value="m">Medium</sp-tab>
152
+ <sp-tab-panel value="m">
153
+
154
+ ```html demo
155
+ <sp-menu id="menu-m" size="m" label="Selection type">
156
+ <sp-menu-item>Deselect</sp-menu-item>
157
+ <sp-menu-item>Select inverse</sp-menu-item>
158
+ <sp-menu-item>Feather...</sp-menu-item>
159
+ <sp-menu-item>Select and mask...</sp-menu-item>
160
+ <sp-menu-divider></sp-menu-divider>
161
+ <sp-menu-item>Save selection</sp-menu-item>
162
+ <sp-menu-item disabled>Make work path</sp-menu-item>
163
+ </sp-menu>
164
+ <sp-popover open style="position: relative" label="Selection type:">
165
+ <sp-menu id="menu-m-popover" size="m">
166
+ <sp-menu-item>Deselect</sp-menu-item>
167
+ <sp-menu-item>Select inverse</sp-menu-item>
168
+ <sp-menu-item>Feather...</sp-menu-item>
169
+ <sp-menu-item>Select and mask...</sp-menu-item>
170
+ <sp-menu-divider></sp-menu-divider>
171
+ <sp-menu-item>Save selection</sp-menu-item>
172
+ <sp-menu-item disabled>Make work path</sp-menu-item>
173
+ </sp-menu>
174
+ </sp-popover>
175
+ ```
176
+
177
+ </sp-tab-panel>
178
+ <sp-tab value="l">Large</sp-tab>
179
+ <sp-tab-panel value="l">
180
+
181
+ ```html demo
182
+ <sp-menu id="menu-l" size="l" label="Selection type">
183
+ <sp-menu-item>Deselect</sp-menu-item>
184
+ <sp-menu-item>Select inverse</sp-menu-item>
185
+ <sp-menu-item>Feather...</sp-menu-item>
186
+ <sp-menu-item>Select and mask...</sp-menu-item>
187
+ <sp-menu-divider></sp-menu-divider>
188
+ <sp-menu-item>Save selection</sp-menu-item>
189
+ <sp-menu-item disabled>Make work path</sp-menu-item>
190
+ </sp-menu>
191
+ <sp-popover open style="position: relative" label="Selection type:">
192
+ <sp-menu id="menu-l-popover" size="l">
193
+ <sp-menu-item>Deselect</sp-menu-item>
194
+ <sp-menu-item>Select inverse</sp-menu-item>
195
+ <sp-menu-item>Feather...</sp-menu-item>
196
+ <sp-menu-item>Select and mask...</sp-menu-item>
197
+ <sp-menu-divider></sp-menu-divider>
198
+ <sp-menu-item>Save selection</sp-menu-item>
199
+ <sp-menu-item disabled>Make work path</sp-menu-item>
200
+ </sp-menu>
201
+ </sp-popover>
202
+ ```
203
+
204
+ </sp-tab-panel>
205
+ <sp-tab value="xl">Extra Large</sp-tab>
206
+ <sp-tab-panel value="xl">
207
+
208
+ ```html demo
209
+ <sp-menu id="menu-xl" size="xl" label="Selection type">
210
+ <sp-menu-item>Deselect</sp-menu-item>
211
+ <sp-menu-item>Select inverse</sp-menu-item>
212
+ <sp-menu-item>Feather...</sp-menu-item>
213
+ <sp-menu-item>Select and mask...</sp-menu-item>
214
+ <sp-menu-divider></sp-menu-divider>
215
+ <sp-menu-item>Save selection</sp-menu-item>
216
+ <sp-menu-item disabled>Make work path</sp-menu-item>
217
+ </sp-menu>
218
+ <sp-popover open style="position: relative" label="Selection type:">
219
+ <sp-menu id="menu-xl-popover" size="xl">
220
+ <sp-menu-item>Deselect</sp-menu-item>
221
+ <sp-menu-item>Select inverse</sp-menu-item>
222
+ <sp-menu-item>Feather...</sp-menu-item>
223
+ <sp-menu-item>Select and mask...</sp-menu-item>
224
+ <sp-menu-divider></sp-menu-divider>
225
+ <sp-menu-item>Save selection</sp-menu-item>
226
+ <sp-menu-item disabled>Make work path</sp-menu-item>
227
+ </sp-menu>
228
+ </sp-popover>
229
+ ```
230
+
231
+ </sp-tab-panel>
232
+ </sp-tabs>
233
+
234
+ #### Selection
77
235
 
78
236
  The `<sp-menu>` element can be instructed to maintain a selection via the `selects` attribute. Depending on the chosen algorithm, the `<sp-menu>` element will hold a `value` property and manage the `selected` state of its `<sp-menu-item>` descendants.
79
237
 
80
- ### selects="single"
238
+ - When `selects="single"`, the `<sp-menu>` element will maintain one selected item after an initial selection is made.
239
+ - When `selects` is set to `multiple`, the `<sp-menu>` element will maintain zero or more selected items.
240
+ - When `selects` is set to `inherit`, the `<sp-menu>` element will allow its `<sp-menu-item>` children to participate in the selection of its nearest `<sp-menu>` ancestor.
81
241
 
82
- When `selects` is set to `single`, the `<sp-menu>` element will maintain one selected item after an initial selection is made.
242
+ <sp-tabs selected="selects-single" auto label="Selects attribute">
243
+ <sp-tab value="selects-single">Single</sp-tab>
244
+ <sp-tab-panel value="selects-single">
83
245
 
84
- ```html
246
+ ```html demo
85
247
  <p>
86
248
  The value of the `&lt;sp-menu&gt;` element is:
87
249
  <span id="single-value"></span>
@@ -92,7 +254,7 @@ When `selects` is set to `single`, the `<sp-menu>` element will maintain one sel
92
254
  onchange="this.previousElementSibling.querySelector('#single-value').textContent=this.value"
93
255
  >
94
256
  <sp-menu-item value="item-1">Square</sp-menu-item>
95
- <sp-menu-item value="item-2">Triangle</sp-menu-item>
257
+ <sp-menu-item value="item-2" selected>Triangle</sp-menu-item>
96
258
  <sp-menu-item value="item-3">Parallelogram</sp-menu-item>
97
259
  <sp-menu-item value="item-4">Star</sp-menu-item>
98
260
  <sp-menu-item value="item-5">Hexagon</sp-menu-item>
@@ -100,11 +262,11 @@ When `selects` is set to `single`, the `<sp-menu>` element will maintain one sel
100
262
  </sp-menu>
101
263
  ```
102
264
 
103
- ### selects="multiple"
104
-
105
- When `selects` is set to `multiple`, the `<sp-menu>` element will maintain zero or more selected items.
265
+ </sp-tab-panel>
266
+ <sp-tab value="selects-multiple">Multiple</sp-tab>
267
+ <sp-tab-panel value="selects-multiple">
106
268
 
107
- ```html
269
+ ```html demo
108
270
  <p>
109
271
  The value of the `&lt;sp-menu&gt;` element is:
110
272
  <span id="multiple-value">item-3,item-4</span>
@@ -123,11 +285,11 @@ When `selects` is set to `multiple`, the `<sp-menu>` element will maintain zero
123
285
  </sp-menu>
124
286
  ```
125
287
 
126
- ### selects="inherit"
127
-
128
- When `selects` is set to `inherit`, the `<sp-menu>` element will allow its `<sp-menu-item>` children to participate in the selection of its nearest `<sp-menu>` ancestor.
288
+ </sp-tab-panel>
289
+ <sp-tab value="selects-inherit">Inherit</sp-tab>
290
+ <sp-tab-panel value="selects-inherit">
129
291
 
130
- ```html
292
+ ```html demo
131
293
  <p>
132
294
  The value of the `&lt;sp-menu&gt;` element is:
133
295
  <span id="inherit-value">item-3 || item-4 || item-8 || item-11</span>
@@ -157,8 +319,21 @@ When `selects` is set to `inherit`, the `<sp-menu>` element will allow its `<sp-
157
319
  </sp-menu>
158
320
  ```
159
321
 
160
- ## "change" event
322
+ </sp-tab-panel>
323
+ </sp-tabs>
161
324
 
162
- Whether `<sp-menu>` carries a selection or not, when one of the `<sp-menu-item>` children that it manages is activated the `<sp-menu>` element will dispatch a `change` event. At dispatch time, even when a selection is not held due to the absence of the `selects` attribute, the `value` of the `<sp-menu>` will correspond to the `<sp-menu-item>` that was activated. When the `selects` attribute is present, this `value` will be persisted beyond the lifecycle of the `change` event. When `selects="multiple"` the values of multiple items will be comma separated unless otherwise set via the `value-separator` attribute.
325
+ ### Behaviors
326
+
327
+ #### "change" event
328
+
329
+ Regardless of whether or not `<sp-menu>` carries a selection, when one of the `<sp-menu-item>` children that it manages is activated, the `<sp-menu>` element will dispatch a `change` event. At dispatch time, even when a selection is not held due to the absence of the `selects` attribute, the `value` of the `<sp-menu>` will correspond to the `<sp-menu-item>` that was activated. When the `selects` attribute is present, this `value` will persist beyond the lifecycle of the `change` event. When `selects="multiple"`, the values of multiple items will be comma separated, unless otherwise set via the `value-separator` attribute.
163
330
 
164
331
  Note: The `change` event is only dispatched on a left mouse click or Enter/Space keypress. Right/Middle mouse clicks will not dispatch the `change` event.
332
+
333
+ ### Accessibility
334
+
335
+ Review the accessibility guidelines for the [menu-item](../menu-item#accessibility-guidelines) and [menu-group](../menu-group#accessibility-guidelines) descendants.
336
+
337
+ #### Include a label
338
+
339
+ A menu is required to have an accessible label.
@@ -421,6 +421,24 @@
421
421
  "privacy": "private",
422
422
  "default": "null"
423
423
  },
424
+ {
425
+ "kind": "method",
426
+ "name": "handleMouseover",
427
+ "privacy": "private",
428
+ "return": {
429
+ "type": {
430
+ "text": "void"
431
+ }
432
+ },
433
+ "parameters": [
434
+ {
435
+ "name": "event",
436
+ "type": {
437
+ "text": "MouseEvent"
438
+ }
439
+ }
440
+ ]
441
+ },
424
442
  {
425
443
  "kind": "method",
426
444
  "name": "handleFocusout",
@@ -1442,6 +1460,28 @@
1442
1460
  "module": "src/Menu.js"
1443
1461
  }
1444
1462
  },
1463
+ {
1464
+ "kind": "method",
1465
+ "name": "handleMouseover",
1466
+ "privacy": "private",
1467
+ "return": {
1468
+ "type": {
1469
+ "text": "void"
1470
+ }
1471
+ },
1472
+ "parameters": [
1473
+ {
1474
+ "name": "event",
1475
+ "type": {
1476
+ "text": "MouseEvent"
1477
+ }
1478
+ }
1479
+ ],
1480
+ "inheritedFrom": {
1481
+ "name": "Menu",
1482
+ "module": "src/Menu.js"
1483
+ }
1484
+ },
1445
1485
  {
1446
1486
  "kind": "method",
1447
1487
  "name": "handleFocusout",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spectrum-web-components/menu",
3
- "version": "1.3.0-testing.0",
3
+ "version": "1.3.1-beta.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -90,18 +90,18 @@
90
90
  ],
91
91
  "dependencies": {
92
92
  "@lit-labs/observers": "^2.0.2",
93
- "@spectrum-web-components/action-button": "^1.3.0-testing.0",
94
- "@spectrum-web-components/base": "^1.3.0-testing.0",
95
- "@spectrum-web-components/divider": "^1.3.0-testing.0",
96
- "@spectrum-web-components/icon": "^1.3.0-testing.0",
97
- "@spectrum-web-components/icons-ui": "^1.3.0-testing.0",
98
- "@spectrum-web-components/overlay": "^1.3.0-testing.0",
99
- "@spectrum-web-components/popover": "^1.3.0-testing.0",
100
- "@spectrum-web-components/reactive-controllers": "^1.3.0-testing.0",
101
- "@spectrum-web-components/shared": "^1.3.0-testing.0"
93
+ "@spectrum-web-components/action-button": "1.3.1-beta.0",
94
+ "@spectrum-web-components/base": "1.3.1-beta.0",
95
+ "@spectrum-web-components/divider": "1.3.1-beta.0",
96
+ "@spectrum-web-components/icon": "1.3.1-beta.0",
97
+ "@spectrum-web-components/icons-ui": "1.3.1-beta.0",
98
+ "@spectrum-web-components/overlay": "1.3.1-beta.0",
99
+ "@spectrum-web-components/popover": "1.3.1-beta.0",
100
+ "@spectrum-web-components/reactive-controllers": "1.3.1-beta.0",
101
+ "@spectrum-web-components/shared": "1.3.1-beta.0"
102
102
  },
103
103
  "devDependencies": {
104
- "@spectrum-css/menu": "8.0.0-s2-foundations.17"
104
+ "@spectrum-css/menu": "9.1.1"
105
105
  },
106
106
  "types": "./src/index.d.ts",
107
107
  "customElements": "custom-elements.json",
package/src/Menu.d.ts CHANGED
@@ -121,6 +121,7 @@ export declare class Menu extends Menu_base {
121
121
  focusOnFirstSelectedItem({ preventScroll, }?: FocusOptions): void;
122
122
  focus({ preventScroll }?: FocusOptions): void;
123
123
  private pointerUpTarget;
124
+ private handleMouseover;
124
125
  private handleFocusout;
125
126
  private handleClick;
126
127
  private handlePointerup;
package/src/Menu.dev.js CHANGED
@@ -98,6 +98,7 @@ export class Menu extends SizedMixin(SpectrumElement, { noDefaultSize: true }) {
98
98
  }
99
99
  );
100
100
  this.addEventListener("click", this.handleClick);
101
+ this.addEventListener("mouseover", this.handleMouseover);
101
102
  this.addEventListener("focusout", this.handleFocusout);
102
103
  this.addEventListener("sp-menu-item-keydown", this.handleKeydown);
103
104
  this.addEventListener("pointerup", this.handlePointerup);
@@ -305,6 +306,14 @@ export class Menu extends SizedMixin(SpectrumElement, { noDefaultSize: true }) {
305
306
  this.rovingTabindexController.focus({ preventScroll });
306
307
  }
307
308
  }
309
+ handleMouseover(event) {
310
+ var _a;
311
+ const { target } = event;
312
+ const menuItem = target;
313
+ if (this.childItems.includes(menuItem) && this.isFocusableElement(menuItem)) {
314
+ (_a = this.rovingTabindexController) == null ? void 0 : _a.focusOnItem(menuItem);
315
+ }
316
+ }
308
317
  handleFocusout() {
309
318
  var _a;
310
319
  if (!this.matches(":focus-within"))