@spectrum-web-components/menu 0.14.4 → 0.14.5-devmode.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 (109) hide show
  1. package/package.json +53 -19
  2. package/sp-menu-divider.dev.js +3 -0
  3. package/sp-menu-divider.dev.js.map +7 -0
  4. package/sp-menu-divider.js +3 -14
  5. package/sp-menu-divider.js.map +7 -1
  6. package/sp-menu-group.dev.js +3 -0
  7. package/sp-menu-group.dev.js.map +7 -0
  8. package/sp-menu-group.js +3 -14
  9. package/sp-menu-group.js.map +7 -1
  10. package/sp-menu-item.dev.js +3 -0
  11. package/sp-menu-item.dev.js.map +7 -0
  12. package/sp-menu-item.js +3 -14
  13. package/sp-menu-item.js.map +7 -1
  14. package/sp-menu.dev.js +3 -0
  15. package/sp-menu.dev.js.map +7 -0
  16. package/sp-menu.js +3 -14
  17. package/sp-menu.js.map +7 -1
  18. package/src/Menu.dev.js +495 -0
  19. package/src/Menu.dev.js.map +7 -0
  20. package/src/Menu.js +487 -574
  21. package/src/Menu.js.map +7 -1
  22. package/src/MenuDivider.dev.js +13 -0
  23. package/src/MenuDivider.dev.js.map +7 -0
  24. package/src/MenuDivider.js +11 -25
  25. package/src/MenuDivider.js.map +7 -1
  26. package/src/MenuGroup.dev.js +82 -0
  27. package/src/MenuGroup.dev.js.map +7 -0
  28. package/src/MenuGroup.js +67 -71
  29. package/src/MenuGroup.js.map +7 -1
  30. package/src/MenuItem.dev.js +424 -0
  31. package/src/MenuItem.dev.js.map +7 -0
  32. package/src/MenuItem.js +397 -432
  33. package/src/MenuItem.js.map +7 -1
  34. package/src/index.dev.js +5 -0
  35. package/src/index.dev.js.map +7 -0
  36. package/src/index.js +5 -16
  37. package/src/index.js.map +7 -1
  38. package/src/menu-divider.css.dev.js +6 -0
  39. package/src/menu-divider.css.dev.js.map +7 -0
  40. package/src/menu-divider.css.js +3 -14
  41. package/src/menu-divider.css.js.map +7 -1
  42. package/src/menu-group.css.dev.js +8 -0
  43. package/src/menu-group.css.dev.js.map +7 -0
  44. package/src/menu-group.css.js +3 -14
  45. package/src/menu-group.css.js.map +7 -1
  46. package/src/menu-item.css.dev.js +73 -0
  47. package/src/menu-item.css.dev.js.map +7 -0
  48. package/src/menu-item.css.js +3 -14
  49. package/src/menu-item.css.js.map +7 -1
  50. package/src/menu.css.dev.js +61 -0
  51. package/src/menu.css.dev.js.map +7 -0
  52. package/src/menu.css.js +3 -14
  53. package/src/menu.css.js.map +7 -1
  54. package/src/spectrum-checkmark.css.dev.js +10 -0
  55. package/src/spectrum-checkmark.css.dev.js.map +7 -0
  56. package/src/spectrum-checkmark.css.js +3 -14
  57. package/src/spectrum-checkmark.css.js.map +7 -1
  58. package/src/spectrum-chevron.css.dev.js +10 -0
  59. package/src/spectrum-chevron.css.dev.js.map +7 -0
  60. package/src/spectrum-chevron.css.js +3 -14
  61. package/src/spectrum-chevron.css.js.map +7 -1
  62. package/src/spectrum-itemLabel.css.dev.js +6 -0
  63. package/src/spectrum-itemLabel.css.dev.js.map +7 -0
  64. package/src/spectrum-itemLabel.css.js +3 -14
  65. package/src/spectrum-itemLabel.css.js.map +7 -1
  66. package/src/spectrum-menu-divider.css.dev.js +6 -0
  67. package/src/spectrum-menu-divider.css.dev.js.map +7 -0
  68. package/src/spectrum-menu-divider.css.js +3 -14
  69. package/src/spectrum-menu-divider.css.js.map +7 -1
  70. package/src/spectrum-menu-item.css.dev.js +65 -0
  71. package/src/spectrum-menu-item.css.dev.js.map +7 -0
  72. package/src/spectrum-menu-item.css.js +3 -14
  73. package/src/spectrum-menu-item.css.js.map +7 -1
  74. package/src/spectrum-menu-sectionHeading.css.dev.js +8 -0
  75. package/src/spectrum-menu-sectionHeading.css.dev.js.map +7 -0
  76. package/src/spectrum-menu-sectionHeading.css.js +3 -14
  77. package/src/spectrum-menu-sectionHeading.css.js.map +7 -1
  78. package/src/spectrum-menu.css.dev.js +61 -0
  79. package/src/spectrum-menu.css.dev.js.map +7 -0
  80. package/src/spectrum-menu.css.js +3 -14
  81. package/src/spectrum-menu.css.js.map +7 -1
  82. package/stories/menu-group.stories.js +51 -58
  83. package/stories/menu-group.stories.js.map +7 -1
  84. package/stories/menu-item.stories.js +12 -32
  85. package/stories/menu-item.stories.js.map +7 -1
  86. package/stories/menu.stories.js +22 -33
  87. package/stories/menu.stories.js.map +7 -1
  88. package/stories/submenu.stories.js +125 -136
  89. package/stories/submenu.stories.js.map +7 -1
  90. package/test/benchmark/test-basic.js +8 -19
  91. package/test/benchmark/test-basic.js.map +7 -1
  92. package/test/menu-group.test-vrt.js +4 -15
  93. package/test/menu-group.test-vrt.js.map +7 -1
  94. package/test/menu-group.test.js +161 -168
  95. package/test/menu-group.test.js.map +7 -1
  96. package/test/menu-item.test-vrt.js +4 -15
  97. package/test/menu-item.test-vrt.js.map +7 -1
  98. package/test/menu-item.test.js +93 -99
  99. package/test/menu-item.test.js.map +7 -1
  100. package/test/menu-selects.test.js +488 -494
  101. package/test/menu-selects.test.js.map +7 -1
  102. package/test/menu.test-vrt.js +4 -15
  103. package/test/menu.test-vrt.js.map +7 -1
  104. package/test/menu.test.js +240 -257
  105. package/test/menu.test.js.map +7 -1
  106. package/test/submenu.test-vrt.js +4 -15
  107. package/test/submenu.test-vrt.js.map +7 -1
  108. package/test/submenu.test.js +452 -486
  109. package/test/submenu.test.js.map +7 -1
@@ -1,123 +1,118 @@
1
- /*
2
- Copyright 2020 Adobe. All rights reserved.
3
- This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
- you may not use this file except in compliance with the License. You may obtain a copy
5
- of the License at http://www.apache.org/licenses/LICENSE-2.0
6
-
7
- Unless required by applicable law or agreed to in writing, software distributed under
8
- the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
- OF ANY KIND, either express or implied. See the License for the specific language
10
- governing permissions and limitations under the License.
11
- */
12
- import '../sp-menu.js';
13
- import '../sp-menu-group.js';
14
- import '../sp-menu-item.js';
15
- import { elementUpdated, expect, fixture, html, oneEvent, } from '@open-wc/testing';
16
- import { sendKeys } from '@web/test-runner-commands';
17
- import { spy } from 'sinon';
18
- import { sendMouse } from '../../../test/plugins/browser.js';
19
- describe('Menu [selects]', () => {
20
- let el;
21
- let options;
22
- beforeEach(async () => {
23
- el = await fixture(html `
1
+ import "@spectrum-web-components/menu/sp-menu.js";
2
+ import "@spectrum-web-components/menu/sp-menu-group.js";
3
+ import "@spectrum-web-components/menu/sp-menu-item.js";
4
+ import {
5
+ elementUpdated,
6
+ expect,
7
+ fixture,
8
+ html,
9
+ oneEvent
10
+ } from "@open-wc/testing";
11
+ import { sendKeys } from "@web/test-runner-commands";
12
+ import { spy } from "sinon";
13
+ import { sendMouse } from "../../../test/plugins/browser.js";
14
+ describe("Menu [selects]", () => {
15
+ let el;
16
+ let options;
17
+ beforeEach(async () => {
18
+ el = await fixture(html`
24
19
  <sp-menu selects="single">
25
20
  <sp-menu-item value="1">Option 1</sp-menu-item>
26
21
  <sp-menu-item value="2">Option 2</sp-menu-item>
27
22
  <sp-menu-item value="3">Option 3</sp-menu-item>
28
23
  </sp-menu>
29
24
  `);
30
- options = [...el.querySelectorAll('sp-menu-item')];
25
+ options = [...el.querySelectorAll("sp-menu-item")];
26
+ });
27
+ describe("fires `change` events", async () => {
28
+ it("on browser clicks", async () => {
29
+ const item1 = options[0];
30
+ const boundingRect = item1.getBoundingClientRect();
31
+ const change = oneEvent(el, "change");
32
+ sendMouse({
33
+ steps: [
34
+ {
35
+ type: "move",
36
+ position: [
37
+ boundingRect.x + boundingRect.width / 2,
38
+ boundingRect.y + boundingRect.height / 2
39
+ ]
40
+ },
41
+ {
42
+ type: "down"
43
+ },
44
+ {
45
+ type: "up"
46
+ }
47
+ ]
48
+ });
49
+ await change;
50
+ expect(el.value).to.equal("1");
31
51
  });
32
- describe('fires `change` events', async () => {
33
- it('on browser clicks', async () => {
34
- const item1 = options[0];
35
- const boundingRect = item1.getBoundingClientRect();
36
- const change = oneEvent(el, 'change');
37
- sendMouse({
38
- steps: [
39
- {
40
- type: 'move',
41
- position: [
42
- boundingRect.x + boundingRect.width / 2,
43
- boundingRect.y + boundingRect.height / 2,
44
- ],
45
- },
46
- {
47
- type: 'down',
48
- },
49
- {
50
- type: 'up',
51
- },
52
- ],
53
- });
54
- await change;
55
- expect(el.value).to.equal('1');
56
- });
57
- it('on JS clicks', async () => {
58
- const item1 = options[0];
59
- const change = oneEvent(el, 'change');
60
- item1.click();
61
- await change;
62
- expect(el.value).to.equal('1');
63
- });
64
- });
65
- it('manages a single selection when [selects="single"]', async () => {
66
- expect(el.value).to.equal('');
67
- let change = oneEvent(el, 'change');
68
- options[0].click();
69
- await change;
70
- expect(el.value).to.equal('1');
71
- change = oneEvent(el, 'change');
72
- options[1].click();
73
- await change;
74
- await elementUpdated(el);
75
- expect(el.value).to.equal('2');
76
- change = oneEvent(el, 'change');
77
- options[2].click();
78
- await change;
79
- await elementUpdated(el);
80
- expect(el.value).to.equal('3');
81
- });
82
- it('manages multiple selections when [selects="multiple"]', async () => {
83
- el.selects = 'multiple';
84
- await elementUpdated(el);
85
- expect(el.value).to.equal('');
86
- let change = oneEvent(el, 'change');
87
- options[0].click();
88
- await change;
89
- expect(el.value).to.equal('1');
90
- change = oneEvent(el, 'change');
91
- options[1].click();
92
- await change;
93
- await elementUpdated(el);
94
- expect(el.value).to.equal('1,2');
95
- change = oneEvent(el, 'change');
96
- options[2].click();
97
- await change;
98
- await elementUpdated(el);
99
- expect(el.value).to.equal('1,2,3');
100
- change = oneEvent(el, 'change');
101
- options[0].click();
102
- await change;
103
- expect(el.value).to.equal('2,3');
104
- change = oneEvent(el, 'change');
105
- options[1].click();
106
- await change;
107
- await elementUpdated(el);
108
- expect(el.value).to.equal('3');
109
- change = oneEvent(el, 'change');
110
- options[2].click();
111
- await change;
112
- await elementUpdated(el);
113
- expect(el.value).to.equal('');
52
+ it("on JS clicks", async () => {
53
+ const item1 = options[0];
54
+ const change = oneEvent(el, "change");
55
+ item1.click();
56
+ await change;
57
+ expect(el.value).to.equal("1");
114
58
  });
59
+ });
60
+ it('manages a single selection when [selects="single"]', async () => {
61
+ expect(el.value).to.equal("");
62
+ let change = oneEvent(el, "change");
63
+ options[0].click();
64
+ await change;
65
+ expect(el.value).to.equal("1");
66
+ change = oneEvent(el, "change");
67
+ options[1].click();
68
+ await change;
69
+ await elementUpdated(el);
70
+ expect(el.value).to.equal("2");
71
+ change = oneEvent(el, "change");
72
+ options[2].click();
73
+ await change;
74
+ await elementUpdated(el);
75
+ expect(el.value).to.equal("3");
76
+ });
77
+ it('manages multiple selections when [selects="multiple"]', async () => {
78
+ el.selects = "multiple";
79
+ await elementUpdated(el);
80
+ expect(el.value).to.equal("");
81
+ let change = oneEvent(el, "change");
82
+ options[0].click();
83
+ await change;
84
+ expect(el.value).to.equal("1");
85
+ change = oneEvent(el, "change");
86
+ options[1].click();
87
+ await change;
88
+ await elementUpdated(el);
89
+ expect(el.value).to.equal("1,2");
90
+ change = oneEvent(el, "change");
91
+ options[2].click();
92
+ await change;
93
+ await elementUpdated(el);
94
+ expect(el.value).to.equal("1,2,3");
95
+ change = oneEvent(el, "change");
96
+ options[0].click();
97
+ await change;
98
+ expect(el.value).to.equal("2,3");
99
+ change = oneEvent(el, "change");
100
+ options[1].click();
101
+ await change;
102
+ await elementUpdated(el);
103
+ expect(el.value).to.equal("3");
104
+ change = oneEvent(el, "change");
105
+ options[2].click();
106
+ await change;
107
+ await elementUpdated(el);
108
+ expect(el.value).to.equal("");
109
+ });
115
110
  });
116
- describe('Menu [selects] w/ group', () => {
117
- let el;
118
- let options;
119
- beforeEach(async () => {
120
- el = await fixture(html `
111
+ describe("Menu [selects] w/ group", () => {
112
+ let el;
113
+ let options;
114
+ beforeEach(async () => {
115
+ el = await fixture(html`
121
116
  <sp-menu selects="single">
122
117
  <sp-menu-group selects="inherit">
123
118
  <sp-menu-item value="1">Option 1</sp-menu-item>
@@ -126,98 +121,98 @@ describe('Menu [selects] w/ group', () => {
126
121
  </sp-menu-group>
127
122
  </sp-menu>
128
123
  `);
129
- options = [...el.querySelectorAll('sp-menu-item')];
130
- });
131
- describe('fires `change` events', async () => {
132
- it('on browser clicks', async () => {
133
- const item1 = options[0];
134
- const boundingRect = item1.getBoundingClientRect();
135
- const change = oneEvent(el, 'change');
136
- sendMouse({
137
- steps: [
138
- {
139
- type: 'move',
140
- position: [
141
- boundingRect.x + boundingRect.width / 2,
142
- boundingRect.y + boundingRect.height / 2,
143
- ],
144
- },
145
- {
146
- type: 'down',
147
- },
148
- {
149
- type: 'up',
150
- },
151
- ],
152
- });
153
- await change;
154
- expect(el.value).to.equal('1');
155
- });
156
- it('on JS clicks', async () => {
157
- const item1 = options[0];
158
- const change = oneEvent(el, 'change');
159
- item1.click();
160
- await change;
161
- expect(el.value).to.equal('1');
162
- });
163
- });
164
- it('manages a single selection when [selects="single"]', async () => {
165
- expect(el.value).to.equal('');
166
- let change = oneEvent(el, 'change');
167
- options[0].click();
168
- await change;
169
- expect(el.value).to.equal('1');
170
- change = oneEvent(el, 'change');
171
- options[1].click();
172
- await change;
173
- await elementUpdated(el);
174
- expect(el.value).to.equal('2');
175
- change = oneEvent(el, 'change');
176
- options[2].click();
177
- await change;
178
- await elementUpdated(el);
179
- expect(el.value).to.equal('3');
124
+ options = [...el.querySelectorAll("sp-menu-item")];
125
+ });
126
+ describe("fires `change` events", async () => {
127
+ it("on browser clicks", async () => {
128
+ const item1 = options[0];
129
+ const boundingRect = item1.getBoundingClientRect();
130
+ const change = oneEvent(el, "change");
131
+ sendMouse({
132
+ steps: [
133
+ {
134
+ type: "move",
135
+ position: [
136
+ boundingRect.x + boundingRect.width / 2,
137
+ boundingRect.y + boundingRect.height / 2
138
+ ]
139
+ },
140
+ {
141
+ type: "down"
142
+ },
143
+ {
144
+ type: "up"
145
+ }
146
+ ]
147
+ });
148
+ await change;
149
+ expect(el.value).to.equal("1");
180
150
  });
181
- it('manages multiple selections when [selects="multiple"]', async () => {
182
- el.selects = 'multiple';
183
- await elementUpdated(el);
184
- expect(el.value).to.equal('');
185
- let change = oneEvent(el, 'change');
186
- options[0].click();
187
- await change;
188
- expect(el.value).to.equal('1');
189
- change = oneEvent(el, 'change');
190
- options[1].click();
191
- await change;
192
- await elementUpdated(el);
193
- expect(el.value).to.equal('1,2');
194
- change = oneEvent(el, 'change');
195
- options[2].click();
196
- await change;
197
- await elementUpdated(el);
198
- expect(el.value).to.equal('1,2,3');
199
- change = oneEvent(el, 'change');
200
- options[0].click();
201
- await change;
202
- expect(el.value).to.equal('2,3');
203
- change = oneEvent(el, 'change');
204
- options[1].click();
205
- await change;
206
- await elementUpdated(el);
207
- expect(el.value).to.equal('3');
208
- change = oneEvent(el, 'change');
209
- options[2].click();
210
- await change;
211
- await elementUpdated(el);
212
- expect(el.value).to.equal('');
151
+ it("on JS clicks", async () => {
152
+ const item1 = options[0];
153
+ const change = oneEvent(el, "change");
154
+ item1.click();
155
+ await change;
156
+ expect(el.value).to.equal("1");
213
157
  });
158
+ });
159
+ it('manages a single selection when [selects="single"]', async () => {
160
+ expect(el.value).to.equal("");
161
+ let change = oneEvent(el, "change");
162
+ options[0].click();
163
+ await change;
164
+ expect(el.value).to.equal("1");
165
+ change = oneEvent(el, "change");
166
+ options[1].click();
167
+ await change;
168
+ await elementUpdated(el);
169
+ expect(el.value).to.equal("2");
170
+ change = oneEvent(el, "change");
171
+ options[2].click();
172
+ await change;
173
+ await elementUpdated(el);
174
+ expect(el.value).to.equal("3");
175
+ });
176
+ it('manages multiple selections when [selects="multiple"]', async () => {
177
+ el.selects = "multiple";
178
+ await elementUpdated(el);
179
+ expect(el.value).to.equal("");
180
+ let change = oneEvent(el, "change");
181
+ options[0].click();
182
+ await change;
183
+ expect(el.value).to.equal("1");
184
+ change = oneEvent(el, "change");
185
+ options[1].click();
186
+ await change;
187
+ await elementUpdated(el);
188
+ expect(el.value).to.equal("1,2");
189
+ change = oneEvent(el, "change");
190
+ options[2].click();
191
+ await change;
192
+ await elementUpdated(el);
193
+ expect(el.value).to.equal("1,2,3");
194
+ change = oneEvent(el, "change");
195
+ options[0].click();
196
+ await change;
197
+ expect(el.value).to.equal("2,3");
198
+ change = oneEvent(el, "change");
199
+ options[1].click();
200
+ await change;
201
+ await elementUpdated(el);
202
+ expect(el.value).to.equal("3");
203
+ change = oneEvent(el, "change");
204
+ options[2].click();
205
+ await change;
206
+ await elementUpdated(el);
207
+ expect(el.value).to.equal("");
208
+ });
214
209
  });
215
- describe('Menu w/ group [selects]', () => {
216
- let el;
217
- let group;
218
- let options;
219
- beforeEach(async () => {
220
- el = await fixture(html `
210
+ describe("Menu w/ group [selects]", () => {
211
+ let el;
212
+ let group;
213
+ let options;
214
+ beforeEach(async () => {
215
+ el = await fixture(html`
221
216
  <sp-menu>
222
217
  <sp-menu-group selects="single">
223
218
  <sp-menu-item value="1">Option 1</sp-menu-item>
@@ -226,100 +221,100 @@ describe('Menu w/ group [selects]', () => {
226
221
  </sp-menu-group>
227
222
  </sp-menu>
228
223
  `);
229
- group = el.querySelector('sp-menu-group');
230
- options = [...el.querySelectorAll('sp-menu-item')];
224
+ group = el.querySelector("sp-menu-group");
225
+ options = [...el.querySelectorAll("sp-menu-item")];
226
+ });
227
+ describe("fires `change` events", async () => {
228
+ it("on browser clicks", async () => {
229
+ const item1 = options[0];
230
+ const boundingRect = item1.getBoundingClientRect();
231
+ const change = oneEvent(group, "change");
232
+ sendMouse({
233
+ steps: [
234
+ {
235
+ type: "move",
236
+ position: [
237
+ boundingRect.x + boundingRect.width / 2,
238
+ boundingRect.y + boundingRect.height / 2
239
+ ]
240
+ },
241
+ {
242
+ type: "down"
243
+ },
244
+ {
245
+ type: "up"
246
+ }
247
+ ]
248
+ });
249
+ await change;
250
+ expect(group.value).to.equal("1");
231
251
  });
232
- describe('fires `change` events', async () => {
233
- it('on browser clicks', async () => {
234
- const item1 = options[0];
235
- const boundingRect = item1.getBoundingClientRect();
236
- const change = oneEvent(group, 'change');
237
- sendMouse({
238
- steps: [
239
- {
240
- type: 'move',
241
- position: [
242
- boundingRect.x + boundingRect.width / 2,
243
- boundingRect.y + boundingRect.height / 2,
244
- ],
245
- },
246
- {
247
- type: 'down',
248
- },
249
- {
250
- type: 'up',
251
- },
252
- ],
253
- });
254
- await change;
255
- expect(group.value).to.equal('1');
256
- });
257
- it('on JS clicks', async () => {
258
- const item1 = options[0];
259
- const change = oneEvent(group, 'change');
260
- item1.click();
261
- await change;
262
- expect(group.value).to.equal('1');
263
- });
264
- });
265
- it('manages a single selection when [selects="single"]', async () => {
266
- expect(group.value).to.equal('');
267
- let change = oneEvent(el, 'change');
268
- options[0].click();
269
- await change;
270
- expect(group.value).to.equal('1');
271
- change = oneEvent(el, 'change');
272
- options[1].click();
273
- await change;
274
- await elementUpdated(el);
275
- expect(group.value).to.equal('2');
276
- change = oneEvent(el, 'change');
277
- options[2].click();
278
- await change;
279
- await elementUpdated(el);
280
- expect(group.value).to.equal('3');
281
- });
282
- it('manages multiple selections when [selects="multiple"]', async () => {
283
- group.selects = 'multiple';
284
- await elementUpdated(group);
285
- expect(group.value).to.equal('');
286
- let change = oneEvent(el, 'change');
287
- options[0].click();
288
- await change;
289
- expect(group.value).to.equal('1');
290
- change = oneEvent(el, 'change');
291
- options[1].click();
292
- await change;
293
- await elementUpdated(el);
294
- expect(group.value).to.equal('1,2');
295
- change = oneEvent(el, 'change');
296
- options[2].click();
297
- await change;
298
- await elementUpdated(el);
299
- expect(group.value).to.equal('1,2,3');
300
- change = oneEvent(el, 'change');
301
- options[0].click();
302
- await change;
303
- expect(group.value).to.equal('2,3');
304
- change = oneEvent(el, 'change');
305
- options[1].click();
306
- await change;
307
- await elementUpdated(el);
308
- expect(group.value).to.equal('3');
309
- change = oneEvent(el, 'change');
310
- options[2].click();
311
- await change;
312
- await elementUpdated(el);
313
- expect(group.value).to.equal('');
252
+ it("on JS clicks", async () => {
253
+ const item1 = options[0];
254
+ const change = oneEvent(group, "change");
255
+ item1.click();
256
+ await change;
257
+ expect(group.value).to.equal("1");
314
258
  });
259
+ });
260
+ it('manages a single selection when [selects="single"]', async () => {
261
+ expect(group.value).to.equal("");
262
+ let change = oneEvent(el, "change");
263
+ options[0].click();
264
+ await change;
265
+ expect(group.value).to.equal("1");
266
+ change = oneEvent(el, "change");
267
+ options[1].click();
268
+ await change;
269
+ await elementUpdated(el);
270
+ expect(group.value).to.equal("2");
271
+ change = oneEvent(el, "change");
272
+ options[2].click();
273
+ await change;
274
+ await elementUpdated(el);
275
+ expect(group.value).to.equal("3");
276
+ });
277
+ it('manages multiple selections when [selects="multiple"]', async () => {
278
+ group.selects = "multiple";
279
+ await elementUpdated(group);
280
+ expect(group.value).to.equal("");
281
+ let change = oneEvent(el, "change");
282
+ options[0].click();
283
+ await change;
284
+ expect(group.value).to.equal("1");
285
+ change = oneEvent(el, "change");
286
+ options[1].click();
287
+ await change;
288
+ await elementUpdated(el);
289
+ expect(group.value).to.equal("1,2");
290
+ change = oneEvent(el, "change");
291
+ options[2].click();
292
+ await change;
293
+ await elementUpdated(el);
294
+ expect(group.value).to.equal("1,2,3");
295
+ change = oneEvent(el, "change");
296
+ options[0].click();
297
+ await change;
298
+ expect(group.value).to.equal("2,3");
299
+ change = oneEvent(el, "change");
300
+ options[1].click();
301
+ await change;
302
+ await elementUpdated(el);
303
+ expect(group.value).to.equal("3");
304
+ change = oneEvent(el, "change");
305
+ options[2].click();
306
+ await change;
307
+ await elementUpdated(el);
308
+ expect(group.value).to.equal("");
309
+ });
315
310
  });
316
- describe('Menu w/ groups [selects]', () => {
317
- let el;
318
- let groupA;
319
- let groupB;
320
- let options;
321
- beforeEach(async () => {
322
- el = await fixture(html `
311
+ describe("Menu w/ groups [selects]", () => {
312
+ let el;
313
+ let groupA;
314
+ let groupB;
315
+ let options;
316
+ beforeEach(async () => {
317
+ el = await fixture(html`
323
318
  <sp-menu>
324
319
  <sp-menu-group selects="single" id="group-1">
325
320
  <sp-menu-item value="1a">Option 1a</sp-menu-item>
@@ -333,210 +328,209 @@ describe('Menu w/ groups [selects]', () => {
333
328
  </sp-menu-group>
334
329
  </sp-menu>
335
330
  `);
336
- groupA = el.querySelector('sp-menu-group:first-child');
337
- groupB = el.querySelector('sp-menu-group:last-child');
338
- options = [...el.querySelectorAll('sp-menu-item')];
339
- });
340
- describe('fires `change` events', async () => {
341
- it('on browser clicks', async () => {
342
- const item1a = options[0];
343
- const item1b = options[3];
344
- const boundingRectA = item1a.getBoundingClientRect();
345
- expect(groupA.value).to.equal('');
346
- expect(groupB.value).to.equal('');
347
- let change = oneEvent(el, 'change');
348
- sendMouse({
349
- steps: [
350
- {
351
- type: 'move',
352
- position: [
353
- boundingRectA.x + boundingRectA.width / 2,
354
- boundingRectA.y + boundingRectA.height / 2,
355
- ],
356
- },
357
- {
358
- type: 'down',
359
- },
360
- {
361
- type: 'up',
362
- },
363
- ],
364
- });
365
- await change;
366
- await elementUpdated(item1a);
367
- expect(groupA.value).to.equal('1a');
368
- expect(groupB.value).to.equal('');
369
- change = oneEvent(el, 'change');
370
- const boundingRectB = item1b.getBoundingClientRect();
371
- sendMouse({
372
- steps: [
373
- {
374
- type: 'move',
375
- position: [
376
- boundingRectB.x + boundingRectB.width / 2,
377
- boundingRectB.y + boundingRectB.height / 2,
378
- ],
379
- },
380
- {
381
- type: 'down',
382
- },
383
- {
384
- type: 'up',
385
- },
386
- ],
387
- });
388
- await change;
389
- expect(groupA.value).to.equal('1a');
390
- expect(groupB.value).to.equal('1b');
391
- });
392
- it('on JS clicks', async () => {
393
- const item1a = options[0];
394
- const item1b = options[3];
395
- let change = oneEvent(el, 'change');
396
- item1a.click();
397
- await change;
398
- expect(groupA.value).to.equal('1a');
399
- change = oneEvent(el, 'change');
400
- item1b.click();
401
- await change;
402
- expect(groupB.value).to.equal('1b');
403
- });
404
- it('can have them `preventDefault()`ed', async () => {
405
- const preventSpy = spy();
406
- expect(groupA.value).to.equal('');
407
- expect(groupB.value).to.equal('');
408
- const item1a = options[0];
409
- const item1b = options[3];
410
- groupA.addEventListener('change', (event) => {
411
- event.preventDefault();
412
- preventSpy();
413
- });
414
- const change = oneEvent(el, 'change');
415
- item1a.click();
416
- item1b.click();
417
- await change;
418
- expect(preventSpy.callCount).to.equal(1);
419
- expect(groupA.value).to.equal('');
420
- expect(groupB.value).to.equal('1b');
421
- });
422
- });
423
- it('manages a single selection when [selects="single"]', async () => {
424
- expect(groupA.value).to.equal('');
425
- expect(groupB.value).to.equal('');
426
- let change = oneEvent(el, 'change');
427
- options[0].click();
428
- await change;
429
- expect(groupA.value).to.equal('1a');
430
- change = oneEvent(el, 'change');
431
- options[3].click();
432
- await change;
433
- expect(groupB.value).to.equal('1b');
434
- change = oneEvent(el, 'change');
435
- options[1].click();
436
- await change;
437
- expect(groupA.value).to.equal('2a');
438
- change = oneEvent(el, 'change');
439
- options[4].click();
440
- await change;
441
- expect(groupB.value).to.equal('2b');
442
- change = oneEvent(el, 'change');
443
- options[2].click();
444
- await change;
445
- expect(groupA.value).to.equal('3a');
446
- change = oneEvent(el, 'change');
447
- options[5].click();
448
- await change;
449
- expect(groupB.value).to.equal('3b');
331
+ groupA = el.querySelector("sp-menu-group:first-child");
332
+ groupB = el.querySelector("sp-menu-group:last-child");
333
+ options = [...el.querySelectorAll("sp-menu-item")];
334
+ });
335
+ describe("fires `change` events", async () => {
336
+ it("on browser clicks", async () => {
337
+ const item1a = options[0];
338
+ const item1b = options[3];
339
+ const boundingRectA = item1a.getBoundingClientRect();
340
+ expect(groupA.value).to.equal("");
341
+ expect(groupB.value).to.equal("");
342
+ let change = oneEvent(el, "change");
343
+ sendMouse({
344
+ steps: [
345
+ {
346
+ type: "move",
347
+ position: [
348
+ boundingRectA.x + boundingRectA.width / 2,
349
+ boundingRectA.y + boundingRectA.height / 2
350
+ ]
351
+ },
352
+ {
353
+ type: "down"
354
+ },
355
+ {
356
+ type: "up"
357
+ }
358
+ ]
359
+ });
360
+ await change;
361
+ await elementUpdated(item1a);
362
+ expect(groupA.value).to.equal("1a");
363
+ expect(groupB.value).to.equal("");
364
+ change = oneEvent(el, "change");
365
+ const boundingRectB = item1b.getBoundingClientRect();
366
+ sendMouse({
367
+ steps: [
368
+ {
369
+ type: "move",
370
+ position: [
371
+ boundingRectB.x + boundingRectB.width / 2,
372
+ boundingRectB.y + boundingRectB.height / 2
373
+ ]
374
+ },
375
+ {
376
+ type: "down"
377
+ },
378
+ {
379
+ type: "up"
380
+ }
381
+ ]
382
+ });
383
+ await change;
384
+ expect(groupA.value).to.equal("1a");
385
+ expect(groupB.value).to.equal("1b");
450
386
  });
451
- it('manages multiple selections when [selects="multiple"]', async () => {
452
- groupA.selects = 'multiple';
453
- groupB.selects = 'multiple';
454
- await elementUpdated(groupA);
455
- await elementUpdated(groupB);
456
- expect(groupA.value).to.equal('');
457
- expect(groupB.value).to.equal('');
458
- let change = oneEvent(el, 'change');
459
- options[0].click();
460
- await change;
461
- expect(groupA.value).to.equal('1a');
462
- expect(groupB.value).to.equal('');
463
- change = oneEvent(el, 'change');
464
- options[3].click();
465
- await change;
466
- expect(groupA.value).to.equal('1a');
467
- expect(groupB.value).to.equal('1b');
468
- change = oneEvent(el, 'change');
469
- options[1].click();
470
- await change;
471
- expect(groupA.value).to.equal('1a,2a');
472
- expect(groupB.value).to.equal('1b');
473
- change = oneEvent(el, 'change');
474
- options[4].click();
475
- await change;
476
- expect(groupA.value).to.equal('1a,2a');
477
- expect(groupB.value).to.equal('1b,2b');
478
- change = oneEvent(el, 'change');
479
- options[2].click();
480
- await change;
481
- expect(groupA.value).to.equal('1a,2a,3a');
482
- expect(groupB.value).to.equal('1b,2b');
483
- change = oneEvent(el, 'change');
484
- options[5].click();
485
- await change;
486
- expect(groupA.value).to.equal('1a,2a,3a');
487
- expect(groupB.value).to.equal('1b,2b,3b');
488
- change = oneEvent(el, 'change');
489
- options[0].click();
490
- await change;
491
- expect(groupA.value).to.equal('2a,3a');
492
- expect(groupB.value).to.equal('1b,2b,3b');
493
- change = oneEvent(el, 'change');
494
- options[3].click();
495
- await change;
496
- expect(groupA.value).to.equal('2a,3a');
497
- expect(groupB.value).to.equal('2b,3b');
498
- change = oneEvent(el, 'change');
499
- options[1].click();
500
- await change;
501
- expect(groupA.value).to.equal('3a');
502
- expect(groupB.value).to.equal('2b,3b');
503
- change = oneEvent(el, 'change');
504
- options[4].click();
505
- await change;
506
- expect(groupA.value).to.equal('3a');
507
- expect(groupB.value).to.equal('3b');
508
- change = oneEvent(el, 'change');
509
- options[2].click();
510
- await change;
511
- expect(groupA.value).to.equal('');
512
- expect(groupB.value).to.equal('3b');
513
- change = oneEvent(el, 'change');
514
- options[5].click();
515
- await change;
516
- expect(groupA.value).to.equal('');
517
- expect(groupB.value).to.equal('');
387
+ it("on JS clicks", async () => {
388
+ const item1a = options[0];
389
+ const item1b = options[3];
390
+ let change = oneEvent(el, "change");
391
+ item1a.click();
392
+ await change;
393
+ expect(groupA.value).to.equal("1a");
394
+ change = oneEvent(el, "change");
395
+ item1b.click();
396
+ await change;
397
+ expect(groupB.value).to.equal("1b");
518
398
  });
519
- it('manages focus', async () => {
520
- await elementUpdated(groupA);
521
- await elementUpdated(groupB);
522
- const input = document.createElement('input');
523
- el.insertAdjacentElement('afterend', input);
524
- input.focus();
525
- expect(document.activeElement === input).to.be.true;
526
- await sendKeys({ press: 'Shift+Tab' });
527
- expect(document.activeElement === groupA).to.be.true;
528
- await sendKeys({ press: 'ArrowDown' });
529
- await sendKeys({ press: 'ArrowUp' });
530
- await elementUpdated(el);
531
- for (const option of options) {
532
- const parentElement = option.parentElement;
533
- expect(document.activeElement === parentElement, 'parent focused')
534
- .to.be.true;
535
- expect(option.focused, 'option visually focused').to.be.true;
536
- await sendKeys({ press: 'Space' });
537
- expect(parentElement.value).to.equal(option.value);
538
- await sendKeys({ press: 'ArrowDown' });
539
- }
399
+ it("can have them `preventDefault()`ed", async () => {
400
+ const preventSpy = spy();
401
+ expect(groupA.value).to.equal("");
402
+ expect(groupB.value).to.equal("");
403
+ const item1a = options[0];
404
+ const item1b = options[3];
405
+ groupA.addEventListener("change", (event) => {
406
+ event.preventDefault();
407
+ preventSpy();
408
+ });
409
+ const change = oneEvent(el, "change");
410
+ item1a.click();
411
+ item1b.click();
412
+ await change;
413
+ expect(preventSpy.callCount).to.equal(1);
414
+ expect(groupA.value).to.equal("");
415
+ expect(groupB.value).to.equal("1b");
540
416
  });
417
+ });
418
+ it('manages a single selection when [selects="single"]', async () => {
419
+ expect(groupA.value).to.equal("");
420
+ expect(groupB.value).to.equal("");
421
+ let change = oneEvent(el, "change");
422
+ options[0].click();
423
+ await change;
424
+ expect(groupA.value).to.equal("1a");
425
+ change = oneEvent(el, "change");
426
+ options[3].click();
427
+ await change;
428
+ expect(groupB.value).to.equal("1b");
429
+ change = oneEvent(el, "change");
430
+ options[1].click();
431
+ await change;
432
+ expect(groupA.value).to.equal("2a");
433
+ change = oneEvent(el, "change");
434
+ options[4].click();
435
+ await change;
436
+ expect(groupB.value).to.equal("2b");
437
+ change = oneEvent(el, "change");
438
+ options[2].click();
439
+ await change;
440
+ expect(groupA.value).to.equal("3a");
441
+ change = oneEvent(el, "change");
442
+ options[5].click();
443
+ await change;
444
+ expect(groupB.value).to.equal("3b");
445
+ });
446
+ it('manages multiple selections when [selects="multiple"]', async () => {
447
+ groupA.selects = "multiple";
448
+ groupB.selects = "multiple";
449
+ await elementUpdated(groupA);
450
+ await elementUpdated(groupB);
451
+ expect(groupA.value).to.equal("");
452
+ expect(groupB.value).to.equal("");
453
+ let change = oneEvent(el, "change");
454
+ options[0].click();
455
+ await change;
456
+ expect(groupA.value).to.equal("1a");
457
+ expect(groupB.value).to.equal("");
458
+ change = oneEvent(el, "change");
459
+ options[3].click();
460
+ await change;
461
+ expect(groupA.value).to.equal("1a");
462
+ expect(groupB.value).to.equal("1b");
463
+ change = oneEvent(el, "change");
464
+ options[1].click();
465
+ await change;
466
+ expect(groupA.value).to.equal("1a,2a");
467
+ expect(groupB.value).to.equal("1b");
468
+ change = oneEvent(el, "change");
469
+ options[4].click();
470
+ await change;
471
+ expect(groupA.value).to.equal("1a,2a");
472
+ expect(groupB.value).to.equal("1b,2b");
473
+ change = oneEvent(el, "change");
474
+ options[2].click();
475
+ await change;
476
+ expect(groupA.value).to.equal("1a,2a,3a");
477
+ expect(groupB.value).to.equal("1b,2b");
478
+ change = oneEvent(el, "change");
479
+ options[5].click();
480
+ await change;
481
+ expect(groupA.value).to.equal("1a,2a,3a");
482
+ expect(groupB.value).to.equal("1b,2b,3b");
483
+ change = oneEvent(el, "change");
484
+ options[0].click();
485
+ await change;
486
+ expect(groupA.value).to.equal("2a,3a");
487
+ expect(groupB.value).to.equal("1b,2b,3b");
488
+ change = oneEvent(el, "change");
489
+ options[3].click();
490
+ await change;
491
+ expect(groupA.value).to.equal("2a,3a");
492
+ expect(groupB.value).to.equal("2b,3b");
493
+ change = oneEvent(el, "change");
494
+ options[1].click();
495
+ await change;
496
+ expect(groupA.value).to.equal("3a");
497
+ expect(groupB.value).to.equal("2b,3b");
498
+ change = oneEvent(el, "change");
499
+ options[4].click();
500
+ await change;
501
+ expect(groupA.value).to.equal("3a");
502
+ expect(groupB.value).to.equal("3b");
503
+ change = oneEvent(el, "change");
504
+ options[2].click();
505
+ await change;
506
+ expect(groupA.value).to.equal("");
507
+ expect(groupB.value).to.equal("3b");
508
+ change = oneEvent(el, "change");
509
+ options[5].click();
510
+ await change;
511
+ expect(groupA.value).to.equal("");
512
+ expect(groupB.value).to.equal("");
513
+ });
514
+ it("manages focus", async () => {
515
+ await elementUpdated(groupA);
516
+ await elementUpdated(groupB);
517
+ const input = document.createElement("input");
518
+ el.insertAdjacentElement("afterend", input);
519
+ input.focus();
520
+ expect(document.activeElement === input).to.be.true;
521
+ await sendKeys({ press: "Shift+Tab" });
522
+ expect(document.activeElement === groupA).to.be.true;
523
+ await sendKeys({ press: "ArrowDown" });
524
+ await sendKeys({ press: "ArrowUp" });
525
+ await elementUpdated(el);
526
+ for (const option of options) {
527
+ const parentElement = option.parentElement;
528
+ expect(document.activeElement === parentElement, "parent focused").to.be.true;
529
+ expect(option.focused, "option visually focused").to.be.true;
530
+ await sendKeys({ press: "Space" });
531
+ expect(parentElement.value).to.equal(option.value);
532
+ await sendKeys({ press: "ArrowDown" });
533
+ }
534
+ });
541
535
  });
542
- //# sourceMappingURL=menu-selects.test.js.map
536
+ //# sourceMappingURL=menu-selects.test.js.map