@spectrum-web-components/overlay 1.0.2 → 1.0.3

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 (74) hide show
  1. package/LICENSE +201 -0
  2. package/custom-elements.json +189 -73
  3. package/package.json +8 -7
  4. package/src/Overlay.d.ts +348 -18
  5. package/src/Overlay.dev.js +271 -12
  6. package/src/Overlay.dev.js.map +2 -2
  7. package/src/Overlay.js +4 -4
  8. package/src/Overlay.js.map +3 -3
  9. package/src/PlacementController.d.ts +118 -1
  10. package/src/PlacementController.dev.js +75 -0
  11. package/src/PlacementController.dev.js.map +2 -2
  12. package/src/PlacementController.js.map +2 -2
  13. package/src/overlay.css.dev.js +1 -1
  14. package/src/overlay.css.dev.js.map +1 -1
  15. package/src/overlay.css.js +1 -1
  16. package/src/overlay.css.js.map +1 -1
  17. package/stories/index.js +48 -0
  18. package/stories/index.js.map +7 -0
  19. package/stories/overlay-directive.stories.js +324 -0
  20. package/stories/overlay-directive.stories.js.map +7 -0
  21. package/stories/overlay-element.stories.js +675 -0
  22. package/stories/overlay-element.stories.js.map +7 -0
  23. package/stories/overlay-story-components.js +338 -0
  24. package/stories/overlay-story-components.js.map +7 -0
  25. package/stories/overlay.stories.js +1397 -0
  26. package/stories/overlay.stories.js.map +7 -0
  27. package/test/benchmark/basic-test.js +40 -0
  28. package/test/benchmark/basic-test.js.map +7 -0
  29. package/test/benchmark/directive-test.js +43 -0
  30. package/test/benchmark/directive-test.js.map +7 -0
  31. package/test/benchmark/element-test.js +40 -0
  32. package/test/benchmark/element-test.js.map +7 -0
  33. package/test/benchmark/lazy-test.js +47 -0
  34. package/test/benchmark/lazy-test.js.map +7 -0
  35. package/test/index.js +605 -0
  36. package/test/index.js.map +7 -0
  37. package/test/overlay-directive.test-vrt.js +5 -0
  38. package/test/overlay-directive.test-vrt.js.map +7 -0
  39. package/test/overlay-directive.test.js +162 -0
  40. package/test/overlay-directive.test.js.map +7 -0
  41. package/test/overlay-element.test-vrt.js +5 -0
  42. package/test/overlay-element.test-vrt.js.map +7 -0
  43. package/test/overlay-element.test.js +934 -0
  44. package/test/overlay-element.test.js.map +7 -0
  45. package/test/overlay-lifecycle.test.js +139 -0
  46. package/test/overlay-lifecycle.test.js.map +7 -0
  47. package/test/overlay-memory.test.js +10 -0
  48. package/test/overlay-memory.test.js.map +7 -0
  49. package/test/overlay-timer.test.js +118 -0
  50. package/test/overlay-timer.test.js.map +7 -0
  51. package/test/overlay-trigger-click.test.js +164 -0
  52. package/test/overlay-trigger-click.test.js.map +7 -0
  53. package/test/overlay-trigger-directive.test.js +75 -0
  54. package/test/overlay-trigger-directive.test.js.map +7 -0
  55. package/test/overlay-trigger-extended.test.js +235 -0
  56. package/test/overlay-trigger-extended.test.js.map +7 -0
  57. package/test/overlay-trigger-hover-click.test.js +225 -0
  58. package/test/overlay-trigger-hover-click.test.js.map +7 -0
  59. package/test/overlay-trigger-hover.test.js +308 -0
  60. package/test/overlay-trigger-hover.test.js.map +7 -0
  61. package/test/overlay-trigger-longpress.test.js +549 -0
  62. package/test/overlay-trigger-longpress.test.js.map +7 -0
  63. package/test/overlay-trigger-sync.test.js +5 -0
  64. package/test/overlay-trigger-sync.test.js.map +7 -0
  65. package/test/overlay-trigger.test.js +5 -0
  66. package/test/overlay-trigger.test.js.map +7 -0
  67. package/test/overlay-update.test.js +28 -0
  68. package/test/overlay-update.test.js.map +7 -0
  69. package/test/overlay-v1.test.js +569 -0
  70. package/test/overlay-v1.test.js.map +7 -0
  71. package/test/overlay.test-vrt.js +5 -0
  72. package/test/overlay.test-vrt.js.map +7 -0
  73. package/test/overlay.test.js +776 -0
  74. package/test/overlay.test.js.map +7 -0
package/test/index.js ADDED
@@ -0,0 +1,605 @@
1
+ "use strict";
2
+ import { fixture, isOnTopLayer } from "../../../test/testing-helpers.js";
3
+ import {
4
+ aTimeout,
5
+ elementUpdated,
6
+ expect,
7
+ html,
8
+ nextFrame,
9
+ oneEvent
10
+ } from "@open-wc/testing";
11
+ import "@spectrum-web-components/button/sp-button.js";
12
+ import "@spectrum-web-components/popover/sp-popover.js";
13
+ import "@spectrum-web-components/theme/sp-theme.js";
14
+ import { sendMouse } from "../../../test/plugins/browser.js";
15
+ import { sendKeys } from "@web/test-runner-commands";
16
+ export const runOverlayTriggerTests = (type) => {
17
+ describe(`Overlay Trigger - ${type}`, () => {
18
+ describe("open/close", () => {
19
+ beforeEach(async function() {
20
+ this.testDiv = await fixture(html`
21
+ <div>
22
+ <style>
23
+ body {
24
+ display: flex;
25
+ align-items: center;
26
+ justify-content: center;
27
+ }
28
+ </style>
29
+ <input type="text" />
30
+ <overlay-trigger id="trigger" placement="top">
31
+ <sp-button
32
+ id="outer-button"
33
+ variant="primary"
34
+ slot="trigger"
35
+ >
36
+ Show Popover
37
+ </sp-button>
38
+ <sp-popover
39
+ id="outer-popover"
40
+ slot="click-content"
41
+ direction="bottom"
42
+ tip
43
+ >
44
+ <sp-dialog
45
+ no-divider
46
+ class="options-popover-content"
47
+ >
48
+ <overlay-trigger
49
+ id="inner-trigger"
50
+ placement="bottom"
51
+ >
52
+ <sp-button
53
+ id="inner-button"
54
+ slot="trigger"
55
+ >
56
+ Press Me
57
+ </sp-button>
58
+ <sp-popover
59
+ id="inner-popover"
60
+ slot="click-content"
61
+ direction="bottom"
62
+ tip
63
+ >
64
+ <sp-dialog
65
+ no-divider
66
+ class="options-popover-content"
67
+ >
68
+ Another Popover
69
+ <sp-button>
70
+ Does nothing
71
+ </sp-button>
72
+ </sp-dialog>
73
+ </sp-popover>
74
+ </overlay-trigger>
75
+ </sp-dialog>
76
+ </sp-popover>
77
+ <div
78
+ id="hover-content"
79
+ slot="hover-content"
80
+ class="tooltip"
81
+ delay="100"
82
+ >
83
+ Tooltip
84
+ </div>
85
+ </overlay-trigger>
86
+ </div>
87
+ `);
88
+ this.innerTrigger = this.testDiv.querySelector(
89
+ "#inner-trigger"
90
+ );
91
+ this.outerTrigger = this.testDiv.querySelector(
92
+ "#trigger"
93
+ );
94
+ this.innerButton = this.testDiv.querySelector(
95
+ "#inner-button"
96
+ );
97
+ this.outerButton = this.testDiv.querySelector(
98
+ "#outer-button"
99
+ );
100
+ this.innerClickContent = this.testDiv.querySelector(
101
+ "#inner-popover"
102
+ );
103
+ this.outerClickContent = this.testDiv.querySelector(
104
+ "#outer-popover"
105
+ );
106
+ this.hoverContent = this.testDiv.querySelector(
107
+ "#hover-content"
108
+ );
109
+ await Promise.all([
110
+ this.innerTrigger.updateComplete,
111
+ this.outerTrigger.updateComplete,
112
+ this.innerButton.updateComplete,
113
+ this.outerButton.updateComplete,
114
+ this.innerClickContent.updateComplete,
115
+ this.outerClickContent.updateComplete
116
+ ]);
117
+ this.testDiv.querySelector("input").focus();
118
+ });
119
+ it("opens a popover", async function() {
120
+ expect(
121
+ await isOnTopLayer(this.outerClickContent),
122
+ "popover not available at point"
123
+ ).to.be.false;
124
+ expect(this.outerButton).to.exist;
125
+ const open = oneEvent(this.outerTrigger, "sp-opened");
126
+ this.outerButton.click();
127
+ await open;
128
+ expect(
129
+ await isOnTopLayer(this.outerClickContent),
130
+ "popover available at point"
131
+ ).to.be.true;
132
+ });
133
+ it("[disabled] closes a popover", async function() {
134
+ expect(
135
+ await isOnTopLayer(this.outerClickContent),
136
+ "popover not available at point"
137
+ ).to.be.false;
138
+ expect(this.outerTrigger.disabled).to.be.false;
139
+ expect(this.outerButton).to.exist;
140
+ const opened = oneEvent(this.outerButton, "sp-opened");
141
+ this.outerButton.click();
142
+ await opened;
143
+ expect(
144
+ await isOnTopLayer(this.outerClickContent),
145
+ "popover available at point"
146
+ ).to.be.true;
147
+ const closed = oneEvent(this.outerButton, "sp-closed");
148
+ this.outerTrigger.disabled = true;
149
+ await closed;
150
+ expect(
151
+ await isOnTopLayer(this.outerClickContent),
152
+ "popover not available at point"
153
+ ).to.be.false;
154
+ });
155
+ it("resizes a popover", async function() {
156
+ expect(
157
+ await isOnTopLayer(this.outerClickContent),
158
+ "popover not available at point"
159
+ ).to.be.false;
160
+ expect(this.outerButton).to.exist;
161
+ const open = oneEvent(this.outerTrigger, "sp-opened");
162
+ this.outerButton.click();
163
+ await open;
164
+ expect(
165
+ await isOnTopLayer(this.outerClickContent),
166
+ "popover available at point"
167
+ ).to.be.true;
168
+ window.dispatchEvent(new Event("resize"));
169
+ window.dispatchEvent(new Event("resize"));
170
+ expect(
171
+ await isOnTopLayer(this.outerClickContent),
172
+ "popover available at point"
173
+ ).to.be.true;
174
+ });
175
+ ["modal", "replace", "inline"].map((type2) => {
176
+ it(`opens a popover - [type="${type2}"]`, async function() {
177
+ this.outerTrigger.type = type2;
178
+ await elementUpdated(this.outerTrigger);
179
+ expect(
180
+ await isOnTopLayer(this.outerClickContent),
181
+ "popover not available at point"
182
+ ).to.be.false;
183
+ expect(this.outerButton).to.exist;
184
+ const opened = oneEvent(this.outerTrigger, "sp-opened");
185
+ this.outerButton.click();
186
+ await opened;
187
+ expect(
188
+ await isOnTopLayer(this.outerClickContent),
189
+ "popover available at point"
190
+ ).to.be.true;
191
+ });
192
+ });
193
+ it("does not open a hover popover when a click popover is open", async function() {
194
+ expect(
195
+ await isOnTopLayer(this.outerClickContent),
196
+ "popover not available at point"
197
+ ).to.be.false;
198
+ expect(
199
+ await isOnTopLayer(this.hoverContent),
200
+ "hover not available at point"
201
+ ).to.be.false;
202
+ expect(this.outerButton).to.exist;
203
+ const open = oneEvent(this.outerTrigger, "sp-opened");
204
+ this.outerButton.click();
205
+ await open;
206
+ expect(
207
+ await isOnTopLayer(this.outerClickContent),
208
+ "popover available at point"
209
+ ).to.be.true;
210
+ expect(
211
+ await isOnTopLayer(this.hoverContent),
212
+ "hover not available at point"
213
+ ).to.be.false;
214
+ this.outerButton.dispatchEvent(
215
+ new Event("mouseenter", {
216
+ bubbles: true,
217
+ composed: true
218
+ })
219
+ );
220
+ await nextFrame();
221
+ expect(
222
+ await isOnTopLayer(this.outerClickContent),
223
+ "popover available at point"
224
+ ).to.be.true;
225
+ expect(
226
+ await isOnTopLayer(this.hoverContent),
227
+ "hover not available at point"
228
+ ).to.be.false;
229
+ });
230
+ it("does not open a popover when [disabled]", async function() {
231
+ const triggerZone = this.outerTrigger.shadowRoot.querySelector(
232
+ "#trigger"
233
+ );
234
+ expect(this.outerTrigger.disabled).to.be.false;
235
+ let open = oneEvent(this.outerTrigger, "sp-opened");
236
+ this.outerButton.click();
237
+ await open;
238
+ expect(
239
+ await isOnTopLayer(this.outerClickContent),
240
+ "hover available at point"
241
+ ).to.be.true;
242
+ let closed = oneEvent(this.outerTrigger, "sp-closed");
243
+ sendMouse({
244
+ steps: [
245
+ {
246
+ type: "click",
247
+ position: [1, 1]
248
+ }
249
+ ]
250
+ });
251
+ await closed;
252
+ expect(
253
+ await isOnTopLayer(this.outerClickContent),
254
+ "hover not available at point"
255
+ ).to.be.false;
256
+ this.outerTrigger.disabled = true;
257
+ await elementUpdated(this.outerTrigger);
258
+ expect(this.outerTrigger.disabled).to.be.true;
259
+ expect(this.outerTrigger.hasAttribute("disabled")).to.be.true;
260
+ this.outerButton.click();
261
+ await aTimeout(150);
262
+ expect(
263
+ await isOnTopLayer(this.outerClickContent),
264
+ "hover not available at point"
265
+ ).to.be.false;
266
+ triggerZone.dispatchEvent(new Event("mouseenter"));
267
+ await aTimeout(150);
268
+ expect(
269
+ await isOnTopLayer(this.outerClickContent),
270
+ "hover not available at point"
271
+ ).to.be.false;
272
+ this.outerTrigger.disabled = false;
273
+ await elementUpdated(this.outerTrigger);
274
+ expect(this.outerTrigger.disabled).to.be.false;
275
+ expect(this.outerTrigger.hasAttribute("disabled")).to.be.false;
276
+ open = oneEvent(this.outerTrigger, "sp-opened");
277
+ this.outerButton.click();
278
+ await open;
279
+ expect(
280
+ await isOnTopLayer(this.outerClickContent),
281
+ "hover available at point"
282
+ ).to.be.true;
283
+ closed = oneEvent(this.outerTrigger, "sp-closed");
284
+ this.outerButton.click();
285
+ await closed;
286
+ expect(
287
+ await isOnTopLayer(this.outerClickContent),
288
+ "hover not available at point"
289
+ ).to.be.false;
290
+ });
291
+ it("opens a nested popover", async function() {
292
+ expect(
293
+ await isOnTopLayer(this.outerClickContent),
294
+ "hover not available at point"
295
+ ).to.be.false;
296
+ expect(
297
+ await isOnTopLayer(this.innerClickContent),
298
+ "hover not available at point"
299
+ ).to.be.false;
300
+ expect(this.outerButton).to.exist;
301
+ let open = oneEvent(this.outerTrigger, "sp-opened");
302
+ this.outerButton.click();
303
+ await open;
304
+ expect(
305
+ await isOnTopLayer(this.outerClickContent),
306
+ "outer click content available at point"
307
+ ).to.be.true;
308
+ expect(await isOnTopLayer(this.innerClickContent)).to.be.false;
309
+ open = oneEvent(this.innerTrigger, "sp-opened");
310
+ this.innerButton.click();
311
+ await open;
312
+ expect(
313
+ await isOnTopLayer(this.outerClickContent),
314
+ "outer click content available at point"
315
+ ).to.be.true;
316
+ expect(
317
+ await isOnTopLayer(this.innerClickContent),
318
+ "inner click content available at point"
319
+ ).to.be.true;
320
+ });
321
+ it('focus previous "modal" when closing nested "modal"', async function() {
322
+ var _a;
323
+ this.outerTrigger.type = "modal";
324
+ this.innerTrigger.type = "modal";
325
+ expect(
326
+ await isOnTopLayer(this.outerClickContent),
327
+ "outer click content not available at point"
328
+ ).to.be.false;
329
+ expect(
330
+ await isOnTopLayer(this.innerClickContent),
331
+ "inner click content not available at point"
332
+ ).to.be.false;
333
+ const outerOpen = oneEvent(this.outerButton, "sp-opened");
334
+ this.outerButton.click();
335
+ await outerOpen;
336
+ expect(
337
+ await isOnTopLayer(this.outerClickContent),
338
+ "outer click content available at point"
339
+ ).to.be.true;
340
+ expect(
341
+ await isOnTopLayer(this.innerClickContent),
342
+ "inner click content available at point"
343
+ ).to.be.false;
344
+ const innerOpen = oneEvent(this.innerButton, "sp-opened");
345
+ this.innerButton.click();
346
+ await innerOpen;
347
+ expect(
348
+ await isOnTopLayer(this.outerClickContent),
349
+ "outer click content available at point"
350
+ ).to.be.true;
351
+ expect(
352
+ await isOnTopLayer(this.innerClickContent),
353
+ "inner click content available at point"
354
+ ).to.be.true;
355
+ await sendKeys({
356
+ press: "Space"
357
+ });
358
+ expect(
359
+ await isOnTopLayer(this.outerClickContent),
360
+ "outer click content available at point"
361
+ ).to.be.true;
362
+ expect(
363
+ await isOnTopLayer(this.innerClickContent),
364
+ "inner click content available at point"
365
+ ).to.be.true;
366
+ const innerClose = oneEvent(this.innerButton, "sp-closed");
367
+ await sendKeys({
368
+ press: "Escape"
369
+ });
370
+ await innerClose;
371
+ expect(
372
+ await isOnTopLayer(this.outerClickContent),
373
+ "outer click content available at point"
374
+ ).to.be.true;
375
+ expect(
376
+ await isOnTopLayer(this.innerClickContent),
377
+ "inner click content not available at point"
378
+ ).to.be.false;
379
+ expect(
380
+ document.activeElement === this.innerButton,
381
+ `outer popover recieved focus: ${(_a = document.activeElement) == null ? void 0 : _a.localName}`
382
+ ).to.be.true;
383
+ });
384
+ it("escape closes an open popover", async function() {
385
+ this.outerTrigger.type = "modal";
386
+ this.innerTrigger.type = "modal";
387
+ const outerOpen = oneEvent(this.outerButton, "sp-opened");
388
+ this.outerButton.click();
389
+ await outerOpen;
390
+ expect(
391
+ await isOnTopLayer(this.outerClickContent),
392
+ "outer click content available at point"
393
+ ).to.be.true;
394
+ const innerOpen = oneEvent(this.innerButton, "sp-opened");
395
+ this.innerButton.click();
396
+ await innerOpen;
397
+ expect(
398
+ await isOnTopLayer(this.outerClickContent),
399
+ "outer click content available at point, 1"
400
+ ).to.be.true;
401
+ expect(
402
+ await isOnTopLayer(this.innerClickContent),
403
+ "inner click content available at point"
404
+ ).to.be.true;
405
+ const innerClose = oneEvent(this.innerButton, "sp-closed");
406
+ await sendKeys({
407
+ press: "Escape"
408
+ });
409
+ await innerClose;
410
+ expect(
411
+ await isOnTopLayer(this.outerClickContent),
412
+ "outer click content available at point, 2"
413
+ ).to.be.true;
414
+ expect(
415
+ await isOnTopLayer(this.innerClickContent),
416
+ "inner click content not available at point, 1"
417
+ ).to.be.false;
418
+ const outerClose = oneEvent(this.outerButton, "sp-closed");
419
+ await sendKeys({
420
+ press: "Escape"
421
+ });
422
+ await outerClose;
423
+ expect(
424
+ await isOnTopLayer(this.outerClickContent),
425
+ "outer click content not available at point"
426
+ ).to.be.false;
427
+ expect(
428
+ await isOnTopLayer(this.innerClickContent),
429
+ "inner click content not available at point, 2"
430
+ ).to.be.false;
431
+ });
432
+ it("click closes an open popover", async function() {
433
+ this.outerTrigger.type = "auto";
434
+ this.innerTrigger.type = "auto";
435
+ const outerOpen = oneEvent(this.outerButton, "sp-opened");
436
+ this.outerButton.click();
437
+ await outerOpen;
438
+ expect(
439
+ await isOnTopLayer(this.outerClickContent),
440
+ "outer click content is available at point"
441
+ ).to.be.true;
442
+ const innerOpen = oneEvent(this.innerButton, "sp-opened");
443
+ this.innerButton.click();
444
+ await innerOpen;
445
+ expect(
446
+ await isOnTopLayer(this.outerClickContent),
447
+ "outer click content is available at point"
448
+ ).to.be.true;
449
+ expect(
450
+ await isOnTopLayer(this.innerClickContent),
451
+ "inner click content is available at point"
452
+ ).to.be.true;
453
+ this.innerClickContent.click();
454
+ await aTimeout(200);
455
+ expect(
456
+ await isOnTopLayer(this.outerClickContent),
457
+ "outer click content is available at point"
458
+ ).to.be.true;
459
+ expect(
460
+ await isOnTopLayer(this.innerClickContent),
461
+ "inner click content is available at point"
462
+ ).to.be.true;
463
+ const innerClose = oneEvent(this.innerButton, "sp-closed");
464
+ const outerClose = oneEvent(this.outerButton, "sp-closed");
465
+ sendMouse({
466
+ steps: [
467
+ {
468
+ type: "click",
469
+ position: [1, 1]
470
+ }
471
+ ]
472
+ });
473
+ await innerClose;
474
+ await outerClose;
475
+ expect(
476
+ await isOnTopLayer(this.outerClickContent),
477
+ "outer click content is not available at point"
478
+ ).to.be.not;
479
+ expect(
480
+ await isOnTopLayer(this.innerClickContent),
481
+ "inner click content is not available at point"
482
+ ).to.be.not;
483
+ });
484
+ it("opens a hover popover", async function() {
485
+ expect(await isOnTopLayer(this.hoverContent)).to.be.false;
486
+ const rect = this.outerTrigger.getBoundingClientRect();
487
+ const open = oneEvent(this.outerTrigger, "sp-opened");
488
+ sendMouse({
489
+ steps: [
490
+ {
491
+ type: "move",
492
+ position: [
493
+ rect.left + rect.width / 2,
494
+ rect.top + rect.height / 2
495
+ ]
496
+ }
497
+ ]
498
+ });
499
+ await open;
500
+ expect(
501
+ await isOnTopLayer(this.hoverContent),
502
+ "hover content is available at point"
503
+ ).to.be.true;
504
+ const close = oneEvent(this.outerTrigger, "sp-closed");
505
+ sendMouse({
506
+ steps: [
507
+ {
508
+ type: "move",
509
+ position: [
510
+ rect.left + rect.width * 2,
511
+ rect.top + rect.height / 2
512
+ ]
513
+ }
514
+ ]
515
+ });
516
+ await close;
517
+ expect(
518
+ await isOnTopLayer(this.hoverContent),
519
+ "hover content is not available at point"
520
+ ).to.be.false;
521
+ });
522
+ it("closes a hover popover", async function() {
523
+ expect(await isOnTopLayer(this.hoverContent)).to.be.false;
524
+ const rect = this.outerTrigger.getBoundingClientRect();
525
+ const open = oneEvent(this.outerTrigger, "sp-opened");
526
+ await sendMouse({
527
+ steps: [
528
+ {
529
+ type: "move",
530
+ position: [
531
+ rect.left + rect.width / 2,
532
+ rect.top + rect.height / 2
533
+ ]
534
+ }
535
+ ]
536
+ });
537
+ await open;
538
+ const close = oneEvent(this.outerTrigger, "sp-closed");
539
+ expect(
540
+ await isOnTopLayer(this.hoverContent),
541
+ "hover content is available at point"
542
+ ).to.be.true;
543
+ await sendMouse({
544
+ steps: [
545
+ {
546
+ type: "move",
547
+ position: [
548
+ rect.left + rect.width * 2,
549
+ rect.top + rect.height / 2
550
+ ]
551
+ }
552
+ ]
553
+ });
554
+ await close;
555
+ expect(
556
+ await isOnTopLayer(this.hoverContent),
557
+ "hover content is not available at point"
558
+ ).to.be.false;
559
+ });
560
+ it("dispatches events on open/close", async function() {
561
+ const opened = oneEvent(this.outerButton, "sp-opened");
562
+ this.outerButton.click();
563
+ const openedEvent = await opened;
564
+ expect(
565
+ await isOnTopLayer(this.outerClickContent),
566
+ "hover content is available at point"
567
+ ).to.be.true;
568
+ expect(this.outerTrigger.open).to.equal("click");
569
+ expect(openedEvent.detail.interaction).to.equal("auto");
570
+ const closed = oneEvent(this.outerButton, "sp-closed");
571
+ sendMouse({
572
+ steps: [
573
+ {
574
+ type: "click",
575
+ position: [1, 1]
576
+ }
577
+ ]
578
+ });
579
+ const closedEvent = await closed;
580
+ expect(closedEvent.detail.interaction).to.equal("auto");
581
+ expect(
582
+ await isOnTopLayer(this.outerClickContent),
583
+ "hover content is not available at point"
584
+ ).to.be.false;
585
+ });
586
+ });
587
+ describe("System interactions", () => {
588
+ afterEach(async () => {
589
+ const triggers = document.querySelectorAll(
590
+ "overlay-trigger"
591
+ );
592
+ const closes = [];
593
+ triggers.forEach((trigger) => {
594
+ if (trigger.open) {
595
+ const close = oneEvent(trigger, "sp-closed");
596
+ trigger.open = void 0;
597
+ closes.push(close);
598
+ }
599
+ });
600
+ await Promise.all(closes);
601
+ });
602
+ });
603
+ });
604
+ };
605
+ //# sourceMappingURL=index.js.map