@spectrum-web-components/menu 0.14.3 → 0.14.5-devmode.7

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 +54 -20
  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 -35
  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,49 +1,45 @@
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-item.js';
14
- import { elementUpdated, expect, fixture, html, nextFrame, oneEvent, } from '@open-wc/testing';
15
- import '@spectrum-web-components/theme/sp-theme.js';
16
- import '@spectrum-web-components/theme/src/themes.js';
17
- import { sendMouse } from '../../../test/plugins/browser.js';
18
- import { spy } from 'sinon';
19
- import { sendKeys } from '@web/test-runner-commands';
20
- import '@spectrum-web-components/action-menu/sp-action-menu.js';
21
- import '@spectrum-web-components/menu/sp-menu-group.js';
22
- import '@spectrum-web-components/icons-workflow/icons/sp-icon-show-menu.js';
23
- async function styledFixture(story, dir = 'ltr') {
24
- const test = await fixture(html `
1
+ import "@spectrum-web-components/menu/sp-menu.js";
2
+ import "@spectrum-web-components/menu/sp-menu-item.js";
3
+ import {
4
+ elementUpdated,
5
+ expect,
6
+ fixture,
7
+ html,
8
+ nextFrame,
9
+ oneEvent
10
+ } from "@open-wc/testing";
11
+ import "@spectrum-web-components/theme/sp-theme.js";
12
+ import "@spectrum-web-components/theme/src/themes.js";
13
+ import { sendMouse } from "../../../test/plugins/browser.js";
14
+ import { spy } from "sinon";
15
+ import { sendKeys } from "@web/test-runner-commands";
16
+ import "@spectrum-web-components/action-menu/sp-action-menu.js";
17
+ import "@spectrum-web-components/menu/sp-menu-group.js";
18
+ import "@spectrum-web-components/icons-workflow/icons/sp-icon-show-menu.js";
19
+ async function styledFixture(story, dir = "ltr") {
20
+ const test = await fixture(html`
25
21
  <sp-theme dir=${dir} scale="medium" color="dark">${story}</sp-theme>
26
22
  `);
27
- document.documentElement.dir = dir;
28
- return test.children[0];
23
+ document.documentElement.dir = dir;
24
+ return test.children[0];
29
25
  }
30
- describe('Submenu', () => {
31
- it('selects - pointer', async () => {
32
- const rootChanged = spy();
33
- const submenuChanged = spy();
34
- const el = await styledFixture(html `
26
+ describe("Submenu", () => {
27
+ it("selects - pointer", async () => {
28
+ const rootChanged = spy();
29
+ const submenuChanged = spy();
30
+ const el = await styledFixture(html`
35
31
  <sp-menu
36
32
  @change=${(event) => {
37
- rootChanged(event.target.value);
38
- }}
33
+ rootChanged(event.target.value);
34
+ }}
39
35
  >
40
36
  <sp-menu-item class="root">
41
37
  Has submenu
42
38
  <sp-menu
43
39
  slot="submenu"
44
40
  @change=${(event) => {
45
- submenuChanged(event.target.value);
46
- }}
41
+ submenuChanged(event.target.value);
42
+ }}
47
43
  >
48
44
  <sp-menu-item class="submenu-item-1">
49
45
  One
@@ -58,63 +54,60 @@ describe('Submenu', () => {
58
54
  </sp-menu-item>
59
55
  </sp-menu>
60
56
  `);
61
- await elementUpdated(el);
62
- const rootItem = el.querySelector('.root');
63
- const rootItemBoundingRect = rootItem.getBoundingClientRect();
64
- expect(rootItem.open).to.be.false;
65
- const opened = oneEvent(rootItem, 'sp-opened');
66
- sendMouse({
67
- steps: [
68
- {
69
- type: 'move',
70
- position: [
71
- rootItemBoundingRect.left +
72
- rootItemBoundingRect.width / 2,
73
- rootItemBoundingRect.top +
74
- rootItemBoundingRect.height / 2,
75
- ],
76
- },
77
- ],
78
- });
79
- await opened;
80
- expect(rootItem.open).to.be.true;
81
- const item2 = document.querySelector('.submenu-item-2');
82
- const item2BoundingRect = item2.getBoundingClientRect();
83
- const closed = oneEvent(rootItem, 'sp-closed');
84
- sendMouse({
85
- steps: [
86
- {
87
- type: 'click',
88
- position: [
89
- item2BoundingRect.left + item2BoundingRect.width / 2,
90
- item2BoundingRect.top + item2BoundingRect.height / 2,
91
- ],
92
- },
93
- ],
94
- });
95
- await closed;
96
- await nextFrame();
97
- expect(rootChanged.calledWith('Has submenu'), 'root changed').to.be
98
- .true;
99
- expect(submenuChanged.calledWith('Two'), 'submenu changed').to.be.true;
57
+ await elementUpdated(el);
58
+ const rootItem = el.querySelector(".root");
59
+ const rootItemBoundingRect = rootItem.getBoundingClientRect();
60
+ expect(rootItem.open).to.be.false;
61
+ const opened = oneEvent(rootItem, "sp-opened");
62
+ sendMouse({
63
+ steps: [
64
+ {
65
+ type: "move",
66
+ position: [
67
+ rootItemBoundingRect.left + rootItemBoundingRect.width / 2,
68
+ rootItemBoundingRect.top + rootItemBoundingRect.height / 2
69
+ ]
70
+ }
71
+ ]
72
+ });
73
+ await opened;
74
+ expect(rootItem.open).to.be.true;
75
+ const item2 = document.querySelector(".submenu-item-2");
76
+ const item2BoundingRect = item2.getBoundingClientRect();
77
+ const closed = oneEvent(rootItem, "sp-closed");
78
+ sendMouse({
79
+ steps: [
80
+ {
81
+ type: "click",
82
+ position: [
83
+ item2BoundingRect.left + item2BoundingRect.width / 2,
84
+ item2BoundingRect.top + item2BoundingRect.height / 2
85
+ ]
86
+ }
87
+ ]
100
88
  });
101
- it('closes deep tree on selection', async () => {
102
- const rootChanged = spy();
103
- const submenuChanged = spy();
104
- const subSubmenuChanged = spy();
105
- const el = await styledFixture(html `
89
+ await closed;
90
+ await nextFrame();
91
+ expect(rootChanged.calledWith("Has submenu"), "root changed").to.be.true;
92
+ expect(submenuChanged.calledWith("Two"), "submenu changed").to.be.true;
93
+ });
94
+ it("closes deep tree on selection", async () => {
95
+ const rootChanged = spy();
96
+ const submenuChanged = spy();
97
+ const subSubmenuChanged = spy();
98
+ const el = await styledFixture(html`
106
99
  <sp-menu
107
100
  @change=${(event) => {
108
- rootChanged(event.target.value);
109
- }}
101
+ rootChanged(event.target.value);
102
+ }}
110
103
  >
111
104
  <sp-menu-item class="root">
112
105
  Has submenu
113
106
  <sp-menu
114
107
  slot="submenu"
115
108
  @change=${(event) => {
116
- submenuChanged(event.target.value);
117
- }}
109
+ submenuChanged(event.target.value);
110
+ }}
118
111
  >
119
112
  <sp-menu-item class="submenu-item-1">
120
113
  One
@@ -124,8 +117,8 @@ describe('Submenu', () => {
124
117
  <sp-menu
125
118
  slot="submenu"
126
119
  @change=${(event) => {
127
- subSubmenuChanged(event.target.value);
128
- }}
120
+ subSubmenuChanged(event.target.value);
121
+ }}
129
122
  >
130
123
  <sp-menu-item class="sub-submenu-item-1">
131
124
  A
@@ -145,93 +138,89 @@ describe('Submenu', () => {
145
138
  </sp-menu-item>
146
139
  </sp-menu>
147
140
  `);
148
- await elementUpdated(el);
149
- const rootItem = el.querySelector('.root');
150
- const rootItemBoundingRect = rootItem.getBoundingClientRect();
151
- expect(rootItem.open).to.be.false;
152
- const opened = oneEvent(rootItem, 'sp-opened');
153
- sendMouse({
154
- steps: [
155
- {
156
- type: 'move',
157
- position: [
158
- rootItemBoundingRect.left +
159
- rootItemBoundingRect.width / 2,
160
- rootItemBoundingRect.top +
161
- rootItemBoundingRect.height / 2,
162
- ],
163
- },
164
- ],
165
- });
166
- await opened;
167
- expect(rootItem.open).to.be.true;
168
- const item2 = document.querySelector('.submenu-item-2');
169
- const item2BoundingRect = item2.getBoundingClientRect();
170
- let closed = oneEvent(item2, 'sp-opened');
171
- sendMouse({
172
- steps: [
173
- {
174
- type: 'click',
175
- position: [
176
- item2BoundingRect.left + item2BoundingRect.width / 2,
177
- item2BoundingRect.top + item2BoundingRect.height / 2,
178
- ],
179
- },
180
- ],
181
- });
182
- await closed;
183
- await nextFrame();
184
- expect(item2.open).to.be.true;
185
- const itemC = document.querySelector('.sub-submenu-item-3');
186
- const itemCBoundingRect = itemC.getBoundingClientRect();
187
- closed = oneEvent(rootItem, 'sp-closed');
188
- sendMouse({
189
- steps: [
190
- {
191
- type: 'click',
192
- position: [
193
- itemCBoundingRect.left + itemCBoundingRect.width / 2,
194
- itemCBoundingRect.top + itemCBoundingRect.height / 2,
195
- ],
196
- },
197
- ],
198
- });
199
- await closed;
200
- await nextFrame();
201
- expect(rootChanged.calledWith('Has submenu'), 'root changed').to.be
202
- .true;
203
- expect(submenuChanged.calledWith('Two'), 'submenu changed').to.be.true;
204
- expect(subSubmenuChanged.calledWith('C'), 'sub submenu changed').to.be
205
- .true;
141
+ await elementUpdated(el);
142
+ const rootItem = el.querySelector(".root");
143
+ const rootItemBoundingRect = rootItem.getBoundingClientRect();
144
+ expect(rootItem.open).to.be.false;
145
+ const opened = oneEvent(rootItem, "sp-opened");
146
+ sendMouse({
147
+ steps: [
148
+ {
149
+ type: "move",
150
+ position: [
151
+ rootItemBoundingRect.left + rootItemBoundingRect.width / 2,
152
+ rootItemBoundingRect.top + rootItemBoundingRect.height / 2
153
+ ]
154
+ }
155
+ ]
206
156
  });
207
- [
157
+ await opened;
158
+ expect(rootItem.open).to.be.true;
159
+ const item2 = document.querySelector(".submenu-item-2");
160
+ const item2BoundingRect = item2.getBoundingClientRect();
161
+ let closed = oneEvent(item2, "sp-opened");
162
+ sendMouse({
163
+ steps: [
208
164
  {
209
- dir: 'ltr',
210
- openKey: 'ArrowRight',
211
- closeKey: 'ArrowLeft',
212
- },
165
+ type: "click",
166
+ position: [
167
+ item2BoundingRect.left + item2BoundingRect.width / 2,
168
+ item2BoundingRect.top + item2BoundingRect.height / 2
169
+ ]
170
+ }
171
+ ]
172
+ });
173
+ await closed;
174
+ await nextFrame();
175
+ expect(item2.open).to.be.true;
176
+ const itemC = document.querySelector(".sub-submenu-item-3");
177
+ const itemCBoundingRect = itemC.getBoundingClientRect();
178
+ closed = oneEvent(rootItem, "sp-closed");
179
+ sendMouse({
180
+ steps: [
213
181
  {
214
- dir: 'rtl',
215
- openKey: 'ArrowLeft',
216
- closeKey: 'ArrowRight',
217
- },
218
- ].map((testData) => {
219
- it(`selects - keyboard: ${testData.dir}`, async () => {
220
- const rootChanged = spy();
221
- const submenuChanged = spy();
222
- const el = await styledFixture(html `
182
+ type: "click",
183
+ position: [
184
+ itemCBoundingRect.left + itemCBoundingRect.width / 2,
185
+ itemCBoundingRect.top + itemCBoundingRect.height / 2
186
+ ]
187
+ }
188
+ ]
189
+ });
190
+ await closed;
191
+ await nextFrame();
192
+ expect(rootChanged.calledWith("Has submenu"), "root changed").to.be.true;
193
+ expect(submenuChanged.calledWith("Two"), "submenu changed").to.be.true;
194
+ expect(subSubmenuChanged.calledWith("C"), "sub submenu changed").to.be.true;
195
+ });
196
+ [
197
+ {
198
+ dir: "ltr",
199
+ openKey: "ArrowRight",
200
+ closeKey: "ArrowLeft"
201
+ },
202
+ {
203
+ dir: "rtl",
204
+ openKey: "ArrowLeft",
205
+ closeKey: "ArrowRight"
206
+ }
207
+ ].map((testData) => {
208
+ it(`selects - keyboard: ${testData.dir}`, async () => {
209
+ const rootChanged = spy();
210
+ const submenuChanged = spy();
211
+ const el = await styledFixture(html`
223
212
  <sp-menu
224
213
  @change=${(event) => {
225
- rootChanged(event.target.value);
226
- }}
214
+ rootChanged(event.target.value);
215
+ }}
227
216
  >
228
217
  <sp-menu-item class="root">
229
218
  Has submenu
230
219
  <sp-menu
231
220
  slot="submenu"
232
221
  @change=${(event) => {
233
- submenuChanged(event.target.value);
234
- }}
222
+ submenuChanged(event.target.value);
223
+ }}
235
224
  >
236
225
  <sp-menu-item class="submenu-item-1">
237
226
  One
@@ -246,45 +235,43 @@ describe('Submenu', () => {
246
235
  </sp-menu-item>
247
236
  </sp-menu>
248
237
  `, testData.dir);
249
- await elementUpdated(el);
250
- const rootItem = el.querySelector('.root');
251
- expect(rootItem.open).to.be.false;
252
- el.focus();
253
- await elementUpdated(el);
254
- let opened = oneEvent(rootItem, 'sp-opened');
255
- sendKeys({
256
- press: testData.openKey,
257
- });
258
- await opened;
259
- expect(rootItem.open).to.be.true;
260
- let closed = oneEvent(rootItem, 'sp-closed');
261
- sendKeys({
262
- press: testData.closeKey,
263
- });
264
- await closed;
265
- expect(rootItem.open).to.be.false;
266
- opened = oneEvent(rootItem, 'sp-opened');
267
- sendKeys({
268
- press: testData.openKey,
269
- });
270
- await opened;
271
- expect(rootItem.open).to.be.true;
272
- await sendKeys({
273
- press: 'ArrowDown',
274
- });
275
- closed = oneEvent(rootItem, 'sp-closed');
276
- sendKeys({
277
- press: 'Enter',
278
- });
279
- await closed;
280
- expect(rootChanged.calledWith('Has submenu'), 'root changed').to.be
281
- .true;
282
- expect(submenuChanged.calledWith('Two'), 'submenu changed').to.be
283
- .true;
284
- });
238
+ await elementUpdated(el);
239
+ const rootItem = el.querySelector(".root");
240
+ expect(rootItem.open).to.be.false;
241
+ el.focus();
242
+ await elementUpdated(el);
243
+ let opened = oneEvent(rootItem, "sp-opened");
244
+ sendKeys({
245
+ press: testData.openKey
246
+ });
247
+ await opened;
248
+ expect(rootItem.open).to.be.true;
249
+ let closed = oneEvent(rootItem, "sp-closed");
250
+ sendKeys({
251
+ press: testData.closeKey
252
+ });
253
+ await closed;
254
+ expect(rootItem.open).to.be.false;
255
+ opened = oneEvent(rootItem, "sp-opened");
256
+ sendKeys({
257
+ press: testData.openKey
258
+ });
259
+ await opened;
260
+ expect(rootItem.open).to.be.true;
261
+ await sendKeys({
262
+ press: "ArrowDown"
263
+ });
264
+ closed = oneEvent(rootItem, "sp-closed");
265
+ sendKeys({
266
+ press: "Enter"
267
+ });
268
+ await closed;
269
+ expect(rootChanged.calledWith("Has submenu"), "root changed").to.be.true;
270
+ expect(submenuChanged.calledWith("Two"), "submenu changed").to.be.true;
285
271
  });
286
- it('closes on `pointerleave`', async () => {
287
- const el = await styledFixture(html `
272
+ });
273
+ it("closes on `pointerleave`", async () => {
274
+ const el = await styledFixture(html`
288
275
  <sp-menu>
289
276
  <sp-menu-item class="root">
290
277
  Has submenu
@@ -302,45 +289,41 @@ describe('Submenu', () => {
302
289
  </sp-menu-item>
303
290
  </sp-menu>
304
291
  `);
305
- await elementUpdated(el);
306
- const rootItem = el.querySelector('.root');
307
- const rootItemBoundingRect = rootItem.getBoundingClientRect();
308
- expect(rootItem.open).to.be.false;
309
- const opened = oneEvent(rootItem, 'sp-opened');
310
- sendMouse({
311
- steps: [
312
- {
313
- type: 'move',
314
- position: [
315
- rootItemBoundingRect.left +
316
- rootItemBoundingRect.width / 2,
317
- rootItemBoundingRect.top +
318
- rootItemBoundingRect.height / 2,
319
- ],
320
- },
321
- ],
322
- });
323
- await opened;
324
- expect(rootItem.open).to.be.true;
325
- const closed = oneEvent(rootItem, 'sp-closed');
326
- sendMouse({
327
- steps: [
328
- {
329
- type: 'move',
330
- position: [
331
- rootItemBoundingRect.left +
332
- rootItemBoundingRect.width / 2,
333
- rootItemBoundingRect.top +
334
- rootItemBoundingRect.height * 2,
335
- ],
336
- },
337
- ],
338
- });
339
- await closed;
340
- expect(rootItem.open).to.be.false;
292
+ await elementUpdated(el);
293
+ const rootItem = el.querySelector(".root");
294
+ const rootItemBoundingRect = rootItem.getBoundingClientRect();
295
+ expect(rootItem.open).to.be.false;
296
+ const opened = oneEvent(rootItem, "sp-opened");
297
+ sendMouse({
298
+ steps: [
299
+ {
300
+ type: "move",
301
+ position: [
302
+ rootItemBoundingRect.left + rootItemBoundingRect.width / 2,
303
+ rootItemBoundingRect.top + rootItemBoundingRect.height / 2
304
+ ]
305
+ }
306
+ ]
341
307
  });
342
- it('stays open when mousing off menu item and back again', async () => {
343
- const el = await styledFixture(html `
308
+ await opened;
309
+ expect(rootItem.open).to.be.true;
310
+ const closed = oneEvent(rootItem, "sp-closed");
311
+ sendMouse({
312
+ steps: [
313
+ {
314
+ type: "move",
315
+ position: [
316
+ rootItemBoundingRect.left + rootItemBoundingRect.width / 2,
317
+ rootItemBoundingRect.top + rootItemBoundingRect.height * 2
318
+ ]
319
+ }
320
+ ]
321
+ });
322
+ await closed;
323
+ expect(rootItem.open).to.be.false;
324
+ });
325
+ it("stays open when mousing off menu item and back again", async () => {
326
+ const el = await styledFixture(html`
344
327
  <sp-menu>
345
328
  <sp-menu-item class="root">
346
329
  Has submenu
@@ -358,70 +341,62 @@ describe('Submenu', () => {
358
341
  </sp-menu-item>
359
342
  </sp-menu>
360
343
  `);
361
- await elementUpdated(el);
362
- const rootItem = el.querySelector('.root');
363
- const rootItemBoundingRect = rootItem.getBoundingClientRect();
364
- expect(rootItem.open).to.be.false;
365
- const opened = oneEvent(rootItem, 'sp-opened');
366
- await sendMouse({
367
- steps: [
368
- {
369
- type: 'move',
370
- position: [
371
- rootItemBoundingRect.left +
372
- rootItemBoundingRect.width / 2,
373
- rootItemBoundingRect.top +
374
- rootItemBoundingRect.height / 2,
375
- ],
376
- },
377
- ],
378
- });
379
- await sendMouse({
380
- steps: [
381
- {
382
- type: 'move',
383
- position: [
384
- rootItemBoundingRect.left +
385
- rootItemBoundingRect.width / 2,
386
- rootItemBoundingRect.top +
387
- rootItemBoundingRect.height * 2,
388
- ],
389
- },
390
- ],
391
- });
392
- await sendMouse({
393
- steps: [
394
- {
395
- type: 'move',
396
- position: [
397
- rootItemBoundingRect.left +
398
- rootItemBoundingRect.width / 2,
399
- rootItemBoundingRect.top +
400
- rootItemBoundingRect.height / 2,
401
- ],
402
- },
403
- ],
404
- });
405
- await opened;
406
- expect(rootItem.open).to.be.true;
407
- const closed = oneEvent(rootItem, 'sp-closed');
408
- sendMouse({
409
- steps: [
410
- {
411
- type: 'move',
412
- position: [
413
- rootItemBoundingRect.left +
414
- rootItemBoundingRect.width / 2,
415
- rootItemBoundingRect.top +
416
- rootItemBoundingRect.height * 2,
417
- ],
418
- },
419
- ],
420
- });
421
- await closed;
344
+ await elementUpdated(el);
345
+ const rootItem = el.querySelector(".root");
346
+ const rootItemBoundingRect = rootItem.getBoundingClientRect();
347
+ expect(rootItem.open).to.be.false;
348
+ const opened = oneEvent(rootItem, "sp-opened");
349
+ await sendMouse({
350
+ steps: [
351
+ {
352
+ type: "move",
353
+ position: [
354
+ rootItemBoundingRect.left + rootItemBoundingRect.width / 2,
355
+ rootItemBoundingRect.top + rootItemBoundingRect.height / 2
356
+ ]
357
+ }
358
+ ]
359
+ });
360
+ await sendMouse({
361
+ steps: [
362
+ {
363
+ type: "move",
364
+ position: [
365
+ rootItemBoundingRect.left + rootItemBoundingRect.width / 2,
366
+ rootItemBoundingRect.top + rootItemBoundingRect.height * 2
367
+ ]
368
+ }
369
+ ]
370
+ });
371
+ await sendMouse({
372
+ steps: [
373
+ {
374
+ type: "move",
375
+ position: [
376
+ rootItemBoundingRect.left + rootItemBoundingRect.width / 2,
377
+ rootItemBoundingRect.top + rootItemBoundingRect.height / 2
378
+ ]
379
+ }
380
+ ]
381
+ });
382
+ await opened;
383
+ expect(rootItem.open).to.be.true;
384
+ const closed = oneEvent(rootItem, "sp-closed");
385
+ sendMouse({
386
+ steps: [
387
+ {
388
+ type: "move",
389
+ position: [
390
+ rootItemBoundingRect.left + rootItemBoundingRect.width / 2,
391
+ rootItemBoundingRect.top + rootItemBoundingRect.height * 2
392
+ ]
393
+ }
394
+ ]
422
395
  });
423
- it('stays open when mousing between menu item and submenu', async () => {
424
- const el = await styledFixture(html `
396
+ await closed;
397
+ });
398
+ it("stays open when mousing between menu item and submenu", async () => {
399
+ const el = await styledFixture(html`
425
400
  <sp-menu>
426
401
  <sp-menu-item class="root">
427
402
  Has submenu
@@ -439,55 +414,49 @@ describe('Submenu', () => {
439
414
  </sp-menu-item>
440
415
  </sp-menu>
441
416
  `);
442
- await elementUpdated(el);
443
- const rootItem = el.querySelector('.root');
444
- const rootItemBoundingRect = rootItem.getBoundingClientRect();
445
- expect(rootItem.open).to.be.false;
446
- const opened = oneEvent(rootItem, 'sp-opened');
447
- await sendMouse({
448
- steps: [
449
- {
450
- type: 'move',
451
- position: [
452
- rootItemBoundingRect.left +
453
- rootItemBoundingRect.width / 2,
454
- rootItemBoundingRect.top +
455
- rootItemBoundingRect.height / 2,
456
- ],
457
- },
458
- ],
459
- });
460
- await sendMouse({
461
- steps: [
462
- {
463
- type: 'move',
464
- position: [
465
- rootItemBoundingRect.left +
466
- rootItemBoundingRect.width / 2,
467
- rootItemBoundingRect.top +
468
- rootItemBoundingRect.height * 2,
469
- ],
470
- },
471
- ],
472
- });
473
- await sendMouse({
474
- steps: [
475
- {
476
- type: 'move',
477
- position: [
478
- rootItemBoundingRect.left +
479
- rootItemBoundingRect.width * 1.5,
480
- rootItemBoundingRect.top +
481
- rootItemBoundingRect.height / 2,
482
- ],
483
- },
484
- ],
485
- });
486
- await opened;
487
- expect(rootItem.open).to.be.true;
417
+ await elementUpdated(el);
418
+ const rootItem = el.querySelector(".root");
419
+ const rootItemBoundingRect = rootItem.getBoundingClientRect();
420
+ expect(rootItem.open).to.be.false;
421
+ const opened = oneEvent(rootItem, "sp-opened");
422
+ await sendMouse({
423
+ steps: [
424
+ {
425
+ type: "move",
426
+ position: [
427
+ rootItemBoundingRect.left + rootItemBoundingRect.width / 2,
428
+ rootItemBoundingRect.top + rootItemBoundingRect.height / 2
429
+ ]
430
+ }
431
+ ]
488
432
  });
489
- it('not opens if disabled', async () => {
490
- const el = await styledFixture(html `
433
+ await sendMouse({
434
+ steps: [
435
+ {
436
+ type: "move",
437
+ position: [
438
+ rootItemBoundingRect.left + rootItemBoundingRect.width / 2,
439
+ rootItemBoundingRect.top + rootItemBoundingRect.height * 2
440
+ ]
441
+ }
442
+ ]
443
+ });
444
+ await sendMouse({
445
+ steps: [
446
+ {
447
+ type: "move",
448
+ position: [
449
+ rootItemBoundingRect.left + rootItemBoundingRect.width * 1.5,
450
+ rootItemBoundingRect.top + rootItemBoundingRect.height / 2
451
+ ]
452
+ }
453
+ ]
454
+ });
455
+ await opened;
456
+ expect(rootItem.open).to.be.true;
457
+ });
458
+ it("not opens if disabled", async () => {
459
+ const el = await styledFixture(html`
491
460
  <sp-menu>
492
461
  <sp-menu-item disabled class="root">
493
462
  Has submenu
@@ -505,29 +474,26 @@ describe('Submenu', () => {
505
474
  </sp-menu-item>
506
475
  </sp-menu>
507
476
  `);
508
- await elementUpdated(el);
509
- const rootItem = el.querySelector('.root');
510
- const rootItemBoundingRect = rootItem.getBoundingClientRect();
511
- expect(rootItem.open).to.be.false;
512
- sendMouse({
513
- steps: [
514
- {
515
- type: 'move',
516
- position: [
517
- rootItemBoundingRect.left +
518
- rootItemBoundingRect.width / 2,
519
- rootItemBoundingRect.top +
520
- rootItemBoundingRect.height / 2,
521
- ],
522
- },
523
- ],
524
- });
525
- // wait 200ms for open
526
- await new Promise((r) => setTimeout(r, 200));
527
- expect(rootItem.open).to.be.false;
477
+ await elementUpdated(el);
478
+ const rootItem = el.querySelector(".root");
479
+ const rootItemBoundingRect = rootItem.getBoundingClientRect();
480
+ expect(rootItem.open).to.be.false;
481
+ sendMouse({
482
+ steps: [
483
+ {
484
+ type: "move",
485
+ position: [
486
+ rootItemBoundingRect.left + rootItemBoundingRect.width / 2,
487
+ rootItemBoundingRect.top + rootItemBoundingRect.height / 2
488
+ ]
489
+ }
490
+ ]
528
491
  });
529
- it('closes all decendent submenus when closing a ancestor menu', async () => {
530
- const el = await styledFixture(html `
492
+ await new Promise((r) => setTimeout(r, 200));
493
+ expect(rootItem.open).to.be.false;
494
+ });
495
+ it("closes all decendent submenus when closing a ancestor menu", async () => {
496
+ const el = await styledFixture(html`
531
497
  <sp-action-menu>
532
498
  <sp-icon-show-menu slot="icon"></sp-icon-show-menu>
533
499
  <sp-menu-group role="none">
@@ -566,38 +532,38 @@ describe('Submenu', () => {
566
532
  </sp-menu-group>
567
533
  </sp-action-menu>
568
534
  `);
569
- const rootMenu1 = el.querySelector('#submenu-item-1');
570
- const rootMenu2 = el.querySelector('#submenu-item-3');
571
- const childMenu2 = el.querySelector('#submenu-item-2');
572
- expect(el.open).to.be.false;
573
- let opened = oneEvent(el, 'sp-opened');
574
- el.click();
575
- await opened;
576
- expect(el.open).to.be.true;
577
- let activeOverlays = document.querySelectorAll('active-overlay');
578
- expect(activeOverlays.length).to.equal(1);
579
- opened = oneEvent(rootMenu1, 'sp-opened');
580
- rootMenu1.dispatchEvent(new PointerEvent('pointerenter', { bubbles: true }));
581
- await opened;
582
- activeOverlays = document.querySelectorAll('active-overlay');
583
- expect(activeOverlays.length).to.equal(2);
584
- opened = oneEvent(childMenu2, 'sp-opened');
585
- childMenu2.dispatchEvent(new PointerEvent('pointerenter', { bubbles: true }));
586
- await opened;
587
- activeOverlays = document.querySelectorAll('active-overlay');
588
- expect(activeOverlays.length).to.equal(3);
589
- const overlaysManaged = Promise.all([
590
- oneEvent(childMenu2, 'sp-closed'),
591
- oneEvent(rootMenu1, 'sp-closed'),
592
- oneEvent(rootMenu2, 'sp-opened'),
593
- ]);
594
- rootMenu2.dispatchEvent(new PointerEvent('pointerenter', { bubbles: true }));
595
- await overlaysManaged;
596
- activeOverlays = document.querySelectorAll('active-overlay');
597
- expect(activeOverlays.length).to.equal(2);
598
- });
599
- it('closes back to the first overlay without a `root` when clicking away', async () => {
600
- const el = await styledFixture(html `
535
+ const rootMenu1 = el.querySelector("#submenu-item-1");
536
+ const rootMenu2 = el.querySelector("#submenu-item-3");
537
+ const childMenu2 = el.querySelector("#submenu-item-2");
538
+ expect(el.open).to.be.false;
539
+ let opened = oneEvent(el, "sp-opened");
540
+ el.click();
541
+ await opened;
542
+ expect(el.open).to.be.true;
543
+ let activeOverlays = document.querySelectorAll("active-overlay");
544
+ expect(activeOverlays.length).to.equal(1);
545
+ opened = oneEvent(rootMenu1, "sp-opened");
546
+ rootMenu1.dispatchEvent(new PointerEvent("pointerenter", { bubbles: true }));
547
+ await opened;
548
+ activeOverlays = document.querySelectorAll("active-overlay");
549
+ expect(activeOverlays.length).to.equal(2);
550
+ opened = oneEvent(childMenu2, "sp-opened");
551
+ childMenu2.dispatchEvent(new PointerEvent("pointerenter", { bubbles: true }));
552
+ await opened;
553
+ activeOverlays = document.querySelectorAll("active-overlay");
554
+ expect(activeOverlays.length).to.equal(3);
555
+ const overlaysManaged = Promise.all([
556
+ oneEvent(childMenu2, "sp-closed"),
557
+ oneEvent(rootMenu1, "sp-closed"),
558
+ oneEvent(rootMenu2, "sp-opened")
559
+ ]);
560
+ rootMenu2.dispatchEvent(new PointerEvent("pointerenter", { bubbles: true }));
561
+ await overlaysManaged;
562
+ activeOverlays = document.querySelectorAll("active-overlay");
563
+ expect(activeOverlays.length).to.equal(2);
564
+ });
565
+ it("closes back to the first overlay without a `root` when clicking away", async () => {
566
+ const el = await styledFixture(html`
601
567
  <sp-action-menu>
602
568
  <sp-icon-show-menu slot="icon"></sp-icon-show-menu>
603
569
  <sp-menu-group role="none">
@@ -636,37 +602,37 @@ describe('Submenu', () => {
636
602
  </sp-menu-group>
637
603
  </sp-action-menu>
638
604
  `);
639
- const rootMenu1 = el.querySelector('#submenu-item-1');
640
- const childMenu2 = el.querySelector('#submenu-item-2');
641
- expect(el.open).to.be.false;
642
- let opened = oneEvent(el, 'sp-opened');
643
- el.click();
644
- await opened;
645
- expect(el.open).to.be.true;
646
- let activeOverlays = document.querySelectorAll('active-overlay');
647
- expect(activeOverlays.length).to.equal(1);
648
- opened = oneEvent(rootMenu1, 'sp-opened');
649
- rootMenu1.dispatchEvent(new PointerEvent('pointerenter', { bubbles: true }));
650
- await opened;
651
- activeOverlays = document.querySelectorAll('active-overlay');
652
- expect(activeOverlays.length).to.equal(2);
653
- opened = oneEvent(childMenu2, 'sp-opened');
654
- childMenu2.dispatchEvent(new PointerEvent('pointerenter', { bubbles: true }));
655
- await opened;
656
- activeOverlays = document.querySelectorAll('active-overlay');
657
- expect(activeOverlays.length).to.equal(3);
658
- const closed = Promise.all([
659
- oneEvent(childMenu2, 'sp-closed'),
660
- oneEvent(rootMenu1, 'sp-closed'),
661
- oneEvent(el, 'sp-closed'),
662
- ]);
663
- document.body.click();
664
- await closed;
665
- activeOverlays = document.querySelectorAll('active-overlay');
666
- expect(activeOverlays.length).to.equal(0);
667
- });
668
- it('closes decendent menus when Menu Item in ancestor without a submenu is pointerentered', async () => {
669
- const el = await styledFixture(html `
605
+ const rootMenu1 = el.querySelector("#submenu-item-1");
606
+ const childMenu2 = el.querySelector("#submenu-item-2");
607
+ expect(el.open).to.be.false;
608
+ let opened = oneEvent(el, "sp-opened");
609
+ el.click();
610
+ await opened;
611
+ expect(el.open).to.be.true;
612
+ let activeOverlays = document.querySelectorAll("active-overlay");
613
+ expect(activeOverlays.length).to.equal(1);
614
+ opened = oneEvent(rootMenu1, "sp-opened");
615
+ rootMenu1.dispatchEvent(new PointerEvent("pointerenter", { bubbles: true }));
616
+ await opened;
617
+ activeOverlays = document.querySelectorAll("active-overlay");
618
+ expect(activeOverlays.length).to.equal(2);
619
+ opened = oneEvent(childMenu2, "sp-opened");
620
+ childMenu2.dispatchEvent(new PointerEvent("pointerenter", { bubbles: true }));
621
+ await opened;
622
+ activeOverlays = document.querySelectorAll("active-overlay");
623
+ expect(activeOverlays.length).to.equal(3);
624
+ const closed = Promise.all([
625
+ oneEvent(childMenu2, "sp-closed"),
626
+ oneEvent(rootMenu1, "sp-closed"),
627
+ oneEvent(el, "sp-closed")
628
+ ]);
629
+ document.body.click();
630
+ await closed;
631
+ activeOverlays = document.querySelectorAll("active-overlay");
632
+ expect(activeOverlays.length).to.equal(0);
633
+ });
634
+ it("closes decendent menus when Menu Item in ancestor without a submenu is pointerentered", async () => {
635
+ const el = await styledFixture(html`
670
636
  <sp-action-menu>
671
637
  <sp-icon-show-menu slot="icon"></sp-icon-show-menu>
672
638
  <sp-menu-group role="none">
@@ -695,28 +661,28 @@ describe('Submenu', () => {
695
661
  </sp-menu-group>
696
662
  </sp-action-menu>
697
663
  `);
698
- const rootMenu = el.querySelector('#submenu-item-1');
699
- const noSubmenu = el.querySelector('#no-submenu');
700
- expect(el.open).to.be.false;
701
- let opened = oneEvent(el, 'sp-opened');
702
- el.click();
703
- await opened;
704
- expect(el.open).to.be.true;
705
- let activeOverlays = document.querySelectorAll('active-overlay');
706
- expect(activeOverlays.length).to.equal(1);
707
- opened = oneEvent(rootMenu, 'sp-opened');
708
- rootMenu.dispatchEvent(new PointerEvent('pointerenter', { bubbles: true }));
709
- await opened;
710
- activeOverlays = document.querySelectorAll('active-overlay');
711
- expect(activeOverlays.length).to.equal(2);
712
- const closed = oneEvent(rootMenu, 'sp-closed');
713
- noSubmenu.dispatchEvent(new PointerEvent('pointerenter', { bubbles: true }));
714
- await closed;
715
- activeOverlays = document.querySelectorAll('active-overlay');
716
- expect(activeOverlays.length).to.equal(1);
717
- });
718
- it('closes decendent menus when Menu Item in ancestor is clicked', async () => {
719
- const el = await styledFixture(html `
664
+ const rootMenu = el.querySelector("#submenu-item-1");
665
+ const noSubmenu = el.querySelector("#no-submenu");
666
+ expect(el.open).to.be.false;
667
+ let opened = oneEvent(el, "sp-opened");
668
+ el.click();
669
+ await opened;
670
+ expect(el.open).to.be.true;
671
+ let activeOverlays = document.querySelectorAll("active-overlay");
672
+ expect(activeOverlays.length).to.equal(1);
673
+ opened = oneEvent(rootMenu, "sp-opened");
674
+ rootMenu.dispatchEvent(new PointerEvent("pointerenter", { bubbles: true }));
675
+ await opened;
676
+ activeOverlays = document.querySelectorAll("active-overlay");
677
+ expect(activeOverlays.length).to.equal(2);
678
+ const closed = oneEvent(rootMenu, "sp-closed");
679
+ noSubmenu.dispatchEvent(new PointerEvent("pointerenter", { bubbles: true }));
680
+ await closed;
681
+ activeOverlays = document.querySelectorAll("active-overlay");
682
+ expect(activeOverlays.length).to.equal(1);
683
+ });
684
+ it("closes decendent menus when Menu Item in ancestor is clicked", async () => {
685
+ const el = await styledFixture(html`
720
686
  <sp-action-menu>
721
687
  <sp-icon-show-menu slot="icon"></sp-icon-show-menu>
722
688
  <sp-menu-group role="none">
@@ -757,35 +723,35 @@ describe('Submenu', () => {
757
723
  </sp-menu-group>
758
724
  </sp-action-menu>
759
725
  `);
760
- const rootMenu1 = el.querySelector('#submenu-item-1');
761
- const childMenu2 = el.querySelector('#submenu-item-2');
762
- const ancestorItem = el.querySelector('#ancestor-item');
763
- expect(el.open).to.be.false;
764
- let opened = oneEvent(el, 'sp-opened');
765
- el.click();
766
- await opened;
767
- expect(el.open).to.be.true;
768
- let activeOverlays = document.querySelectorAll('active-overlay');
769
- expect(activeOverlays.length).to.equal(1);
770
- opened = oneEvent(rootMenu1, 'sp-opened');
771
- rootMenu1.dispatchEvent(new PointerEvent('pointerenter', { bubbles: true }));
772
- await opened;
773
- activeOverlays = document.querySelectorAll('active-overlay');
774
- expect(activeOverlays.length).to.equal(2);
775
- opened = oneEvent(childMenu2, 'sp-opened');
776
- childMenu2.dispatchEvent(new PointerEvent('pointerenter', { bubbles: true }));
777
- await opened;
778
- activeOverlays = document.querySelectorAll('active-overlay');
779
- expect(activeOverlays.length).to.equal(3);
780
- const closed = Promise.all([
781
- oneEvent(childMenu2, 'sp-closed'),
782
- oneEvent(rootMenu1, 'sp-closed'),
783
- oneEvent(el, 'sp-closed'),
784
- ]);
785
- ancestorItem.click();
786
- await closed;
787
- activeOverlays = document.querySelectorAll('active-overlay');
788
- expect(activeOverlays.length).to.equal(0);
789
- });
726
+ const rootMenu1 = el.querySelector("#submenu-item-1");
727
+ const childMenu2 = el.querySelector("#submenu-item-2");
728
+ const ancestorItem = el.querySelector("#ancestor-item");
729
+ expect(el.open).to.be.false;
730
+ let opened = oneEvent(el, "sp-opened");
731
+ el.click();
732
+ await opened;
733
+ expect(el.open).to.be.true;
734
+ let activeOverlays = document.querySelectorAll("active-overlay");
735
+ expect(activeOverlays.length).to.equal(1);
736
+ opened = oneEvent(rootMenu1, "sp-opened");
737
+ rootMenu1.dispatchEvent(new PointerEvent("pointerenter", { bubbles: true }));
738
+ await opened;
739
+ activeOverlays = document.querySelectorAll("active-overlay");
740
+ expect(activeOverlays.length).to.equal(2);
741
+ opened = oneEvent(childMenu2, "sp-opened");
742
+ childMenu2.dispatchEvent(new PointerEvent("pointerenter", { bubbles: true }));
743
+ await opened;
744
+ activeOverlays = document.querySelectorAll("active-overlay");
745
+ expect(activeOverlays.length).to.equal(3);
746
+ const closed = Promise.all([
747
+ oneEvent(childMenu2, "sp-closed"),
748
+ oneEvent(rootMenu1, "sp-closed"),
749
+ oneEvent(el, "sp-closed")
750
+ ]);
751
+ ancestorItem.click();
752
+ await closed;
753
+ activeOverlays = document.querySelectorAll("active-overlay");
754
+ expect(activeOverlays.length).to.equal(0);
755
+ });
790
756
  });
791
- //# sourceMappingURL=submenu.test.js.map
757
+ //# sourceMappingURL=submenu.test.js.map