@spectrum-web-components/overlay 0.35.1-rc.41 → 0.36.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 (156) hide show
  1. package/README.md +150 -237
  2. package/active-overlay.d.ts +6 -0
  3. package/active-overlay.dev.js +5 -0
  4. package/{sp-overlay.dev.js.map → active-overlay.dev.js.map} +3 -3
  5. package/active-overlay.js +2 -0
  6. package/{sp-overlay.js.map → active-overlay.js.map} +4 -4
  7. package/custom-elements.json +1215 -0
  8. package/package.json +22 -49
  9. package/src/ActiveOverlay.d.ts +84 -0
  10. package/src/ActiveOverlay.dev.js +517 -0
  11. package/src/ActiveOverlay.dev.js.map +7 -0
  12. package/src/ActiveOverlay.js +16 -0
  13. package/src/ActiveOverlay.js.map +7 -0
  14. package/src/OverlayTrigger.d.ts +41 -24
  15. package/src/OverlayTrigger.dev.js +295 -133
  16. package/src/OverlayTrigger.dev.js.map +3 -3
  17. package/src/OverlayTrigger.js +22 -52
  18. package/src/OverlayTrigger.js.map +3 -3
  19. package/src/VirtualTrigger.dev.js +1 -2
  20. package/src/VirtualTrigger.dev.js.map +2 -2
  21. package/src/VirtualTrigger.js +1 -1
  22. package/src/VirtualTrigger.js.map +2 -2
  23. package/src/active-overlay.css.dev.js +13 -0
  24. package/src/active-overlay.css.dev.js.map +7 -0
  25. package/src/active-overlay.css.js +10 -0
  26. package/src/active-overlay.css.js.map +7 -0
  27. package/src/index.d.ts +3 -2
  28. package/src/index.dev.js +3 -2
  29. package/src/index.dev.js.map +2 -2
  30. package/src/index.js +1 -1
  31. package/src/index.js.map +2 -2
  32. package/src/loader.d.ts +2 -1
  33. package/src/loader.dev.js +19 -2
  34. package/src/loader.dev.js.map +2 -2
  35. package/src/loader.js +1 -1
  36. package/src/loader.js.map +3 -3
  37. package/src/overlay-stack.d.ts +50 -0
  38. package/src/overlay-stack.dev.js +515 -0
  39. package/src/overlay-stack.dev.js.map +7 -0
  40. package/src/overlay-stack.js +34 -0
  41. package/src/overlay-stack.js.map +7 -0
  42. package/src/overlay-timer.dev.js.map +2 -2
  43. package/src/overlay-timer.js.map +2 -2
  44. package/src/overlay-trigger.css.dev.js +1 -1
  45. package/src/overlay-trigger.css.dev.js.map +1 -1
  46. package/src/overlay-trigger.css.js +1 -1
  47. package/src/overlay-trigger.css.js.map +1 -1
  48. package/src/overlay-types.d.ts +31 -25
  49. package/src/overlay-types.dev.js +0 -1
  50. package/src/overlay-types.dev.js.map +3 -3
  51. package/src/overlay-types.js +1 -1
  52. package/src/overlay-types.js.map +3 -3
  53. package/src/overlay-utils.d.ts +3 -0
  54. package/src/overlay-utils.dev.js +31 -0
  55. package/src/overlay-utils.dev.js.map +7 -0
  56. package/src/overlay-utils.js +2 -0
  57. package/src/overlay-utils.js.map +7 -0
  58. package/src/overlay.d.ts +59 -0
  59. package/src/overlay.dev.js +127 -0
  60. package/src/overlay.dev.js.map +7 -0
  61. package/src/overlay.js +2 -0
  62. package/src/overlay.js.map +7 -0
  63. package/stories/overlay-story-components.js +8 -9
  64. package/stories/overlay-story-components.js.map +2 -2
  65. package/stories/overlay.stories.js +697 -825
  66. package/stories/overlay.stories.js.map +2 -2
  67. package/sync/overlay-trigger.d.ts +0 -4
  68. package/sync/overlay-trigger.dev.js +4 -1
  69. package/sync/overlay-trigger.dev.js.map +2 -2
  70. package/sync/overlay-trigger.js +1 -1
  71. package/sync/overlay-trigger.js.map +3 -3
  72. package/test/benchmark/basic-test.js +1 -1
  73. package/test/benchmark/basic-test.js.map +1 -1
  74. package/test/index.js +377 -408
  75. package/test/index.js.map +3 -3
  76. package/test/overlay-lifecycle.test.js +106 -34
  77. package/test/overlay-lifecycle.test.js.map +2 -2
  78. package/test/overlay-trigger-click.test.js +5 -11
  79. package/test/overlay-trigger-click.test.js.map +2 -2
  80. package/test/overlay-trigger-extended.test.js +36 -42
  81. package/test/overlay-trigger-extended.test.js.map +2 -2
  82. package/test/overlay-trigger-hover-click.test.js +24 -27
  83. package/test/overlay-trigger-hover-click.test.js.map +2 -2
  84. package/test/overlay-trigger-hover.test.js +35 -41
  85. package/test/overlay-trigger-hover.test.js.map +2 -2
  86. package/test/overlay-trigger-longpress.test.js +81 -206
  87. package/test/overlay-trigger-longpress.test.js.map +2 -2
  88. package/test/overlay-trigger-sync.test.js +1 -1
  89. package/test/overlay-trigger-sync.test.js.map +2 -2
  90. package/test/overlay-trigger.test.js +1 -1
  91. package/test/overlay-trigger.test.js.map +2 -2
  92. package/test/overlay-update.test.js +4 -4
  93. package/test/overlay-update.test.js.map +2 -2
  94. package/test/overlay.test.js +268 -386
  95. package/test/overlay.test.js.map +3 -3
  96. package/sp-overlay.d.ts +0 -6
  97. package/sp-overlay.dev.js +0 -5
  98. package/sp-overlay.js +0 -2
  99. package/src/AbstractOverlay.d.ts +0 -56
  100. package/src/AbstractOverlay.dev.js +0 -202
  101. package/src/AbstractOverlay.dev.js.map +0 -7
  102. package/src/AbstractOverlay.js +0 -2
  103. package/src/AbstractOverlay.js.map +0 -7
  104. package/src/Overlay.d.ts +0 -147
  105. package/src/Overlay.dev.js +0 -777
  106. package/src/Overlay.dev.js.map +0 -7
  107. package/src/Overlay.js +0 -33
  108. package/src/Overlay.js.map +0 -7
  109. package/src/OverlayDialog.d.ts +0 -4
  110. package/src/OverlayDialog.dev.js +0 -135
  111. package/src/OverlayDialog.dev.js.map +0 -7
  112. package/src/OverlayDialog.js +0 -2
  113. package/src/OverlayDialog.js.map +0 -7
  114. package/src/OverlayNoPopover.d.ts +0 -4
  115. package/src/OverlayNoPopover.dev.js +0 -110
  116. package/src/OverlayNoPopover.dev.js.map +0 -7
  117. package/src/OverlayNoPopover.js +0 -2
  118. package/src/OverlayNoPopover.js.map +0 -7
  119. package/src/OverlayPopover.d.ts +0 -4
  120. package/src/OverlayPopover.dev.js +0 -169
  121. package/src/OverlayPopover.dev.js.map +0 -7
  122. package/src/OverlayPopover.js +0 -2
  123. package/src/OverlayPopover.js.map +0 -7
  124. package/src/OverlayStack.d.ts +0 -43
  125. package/src/OverlayStack.dev.js +0 -150
  126. package/src/OverlayStack.dev.js.map +0 -7
  127. package/src/OverlayStack.js +0 -2
  128. package/src/OverlayStack.js.map +0 -7
  129. package/src/PlacementController.d.ts +0 -38
  130. package/src/PlacementController.dev.js +0 -199
  131. package/src/PlacementController.dev.js.map +0 -7
  132. package/src/PlacementController.js +0 -2
  133. package/src/PlacementController.js.map +0 -7
  134. package/src/fullSizePlugin.d.ts +0 -12
  135. package/src/fullSizePlugin.dev.js +0 -39
  136. package/src/fullSizePlugin.dev.js.map +0 -7
  137. package/src/fullSizePlugin.js +0 -2
  138. package/src/fullSizePlugin.js.map +0 -7
  139. package/src/overlay.css.dev.js +0 -9
  140. package/src/overlay.css.dev.js.map +0 -7
  141. package/src/overlay.css.js +0 -6
  142. package/src/overlay.css.js.map +0 -7
  143. package/src/topLayerOverTransforms.d.ts +0 -2
  144. package/src/topLayerOverTransforms.dev.js +0 -90
  145. package/src/topLayerOverTransforms.dev.js.map +0 -7
  146. package/src/topLayerOverTransforms.js +0 -2
  147. package/src/topLayerOverTransforms.js.map +0 -7
  148. package/stories/overlay-element.stories.js +0 -366
  149. package/stories/overlay-element.stories.js.map +0 -7
  150. package/test/overlay-element.test-vrt.js +0 -5
  151. package/test/overlay-element.test-vrt.js.map +0 -7
  152. package/test/overlay-element.test.js +0 -681
  153. package/test/overlay-element.test.js.map +0 -7
  154. package/test/overlay-v1.test.js +0 -651
  155. package/test/overlay-v1.test.js.map +0 -7
  156. /package/src/{overlay.css.d.ts → active-overlay.css.d.ts} +0 -0
@@ -1,651 +0,0 @@
1
- "use strict";
2
- import "@spectrum-web-components/button/sp-button.js";
3
- import "@spectrum-web-components/dialog/sp-dialog.js";
4
- import "@spectrum-web-components/overlay/sp-overlay.js";
5
- import "@spectrum-web-components/overlay/overlay-trigger.js";
6
- import "@spectrum-web-components/tooltip/sp-tooltip.js";
7
- import "@spectrum-web-components/popover/sp-popover.js";
8
- import { setViewport } from "@web/test-runner-commands";
9
- import {
10
- Overlay
11
- } from "@spectrum-web-components/overlay";
12
- import {
13
- elementUpdated,
14
- expect,
15
- html,
16
- nextFrame,
17
- oneEvent
18
- } from "@open-wc/testing";
19
- import { sendKeys } from "@web/test-runner-commands";
20
- import {
21
- definedOverlayElement,
22
- virtualElementV1
23
- } from "../stories/overlay.stories";
24
- import { sendMouse } from "../../../test/plugins/browser.js";
25
- import "@spectrum-web-components/theme/sp-theme.js";
26
- import "@spectrum-web-components/theme/src/themes.js";
27
- import { render } from "@spectrum-web-components/base";
28
- import {
29
- fixture,
30
- isInteractive,
31
- isOnTopLayer
32
- } from "../../../test/testing-helpers.js";
33
- async function styledFixture(story) {
34
- const test = await fixture(html`
35
- <sp-theme theme="spectrum" scale="medium" color="dark">
36
- ${story}
37
- </sp-theme>
38
- `);
39
- return test.children[0];
40
- }
41
- describe("Overlays, v1", () => {
42
- let testDiv;
43
- let openOverlays = [];
44
- beforeEach(async () => {
45
- testDiv = await styledFixture(
46
- html`
47
- <div id="top">
48
- <style>
49
- body {
50
- display: flex;
51
- align-items: center;
52
- justify-content: center;
53
- }
54
-
55
- #top {
56
- margin: 100px;
57
- }
58
-
59
- sp-button {
60
- flex: none;
61
- }
62
-
63
- #overlay-content {
64
- display: none;
65
- }
66
- </style>
67
- <sp-button id="first-button" variant="primary">
68
- Show Popover
69
- </sp-button>
70
- <div id="overlay-content">
71
- <sp-popover id="outer-popover" direction="bottom" tip>
72
- <sp-dialog no-divider>
73
- <div class="options-popover-content">
74
- A popover message
75
- </div>
76
- <sp-button id="outer-focus-target">
77
- Test 1
78
- </sp-button>
79
- <sp-button>Test 2</sp-button>
80
- <sp-button>Test 3</sp-button>
81
- </sp-dialog>
82
- </sp-popover>
83
- <sp-tooltip id="hover-1" class="hover-content">
84
- Hover message
85
- </sp-tooltip>
86
- <sp-tooltip id="hover-2" class="hover-content">
87
- Other hover message
88
- </sp-tooltip>
89
- </div>
90
- </div>
91
- `
92
- );
93
- await elementUpdated(testDiv);
94
- });
95
- afterEach(() => {
96
- openOverlays.map((close) => close());
97
- openOverlays = [];
98
- });
99
- [
100
- "bottom",
101
- "bottom-start",
102
- "bottom-end",
103
- "top",
104
- "top-start",
105
- "top-end",
106
- "left",
107
- "left-start",
108
- "left-end",
109
- "right",
110
- "right-start",
111
- "right-end",
112
- "none"
113
- ].map((direction) => {
114
- const placement = direction;
115
- it(`opens a popover - ${placement}`, async () => {
116
- const button = testDiv.querySelector(
117
- "#first-button"
118
- );
119
- const outerPopover = testDiv.querySelector(
120
- "#outer-popover"
121
- );
122
- expect(await isInteractive(outerPopover)).to.be.false;
123
- expect(button).to.exist;
124
- const opened = oneEvent(outerPopover, "sp-opened");
125
- openOverlays.push(
126
- await Overlay.open(button, "click", outerPopover, {
127
- delayed: false,
128
- placement,
129
- offset: 10
130
- })
131
- );
132
- await opened;
133
- expect(await isInteractive(outerPopover)).to.be.true;
134
- });
135
- });
136
- it(`opens a modal dialog`, async () => {
137
- const button = testDiv.querySelector("#first-button");
138
- const outerPopover = testDiv.querySelector("#outer-popover");
139
- expect(await isInteractive(outerPopover)).to.be.false;
140
- expect(button).to.exist;
141
- const opened = oneEvent(outerPopover, "sp-opened");
142
- openOverlays.push(
143
- await Overlay.open(button, "modal", outerPopover, {
144
- delayed: false
145
- })
146
- );
147
- await opened;
148
- const firstFocused = outerPopover.querySelector(
149
- "#outer-focus-target"
150
- );
151
- expect(document.activeElement === firstFocused).to.be.true;
152
- await sendKeys({
153
- press: "Tab"
154
- });
155
- expect(document.activeElement === button).to.be.false;
156
- await sendKeys({
157
- press: "Tab"
158
- });
159
- expect(document.activeElement === button).to.be.false;
160
- await sendKeys({
161
- press: "Shift+Tab"
162
- });
163
- expect(document.activeElement === button).to.be.false;
164
- await sendKeys({
165
- press: "Shift+Tab"
166
- });
167
- expect(document.activeElement === button).to.be.false;
168
- await sendKeys({
169
- press: "Shift+Tab"
170
- });
171
- expect(document.activeElement === button).to.be.false;
172
- });
173
- it(`updates a popover`, async () => {
174
- const button = testDiv.querySelector("#first-button");
175
- const outerPopover = testDiv.querySelector("#outer-popover");
176
- expect(await isInteractive(outerPopover)).to.be.false;
177
- expect(button).to.exist;
178
- const opened = oneEvent(outerPopover, "sp-opened");
179
- openOverlays.push(
180
- await Overlay.open(button, "click", outerPopover, {
181
- delayed: false,
182
- offset: 10
183
- })
184
- );
185
- await opened;
186
- expect(await isInteractive(outerPopover)).to.be.true;
187
- Overlay.update();
188
- expect(await isInteractive(outerPopover)).to.be.true;
189
- });
190
- it(`opens a popover w/ delay`, async () => {
191
- const button = testDiv.querySelector("#first-button");
192
- const outerPopover = testDiv.querySelector("#outer-popover");
193
- expect(await isInteractive(outerPopover)).to.be.false;
194
- expect(button).to.exist;
195
- const opened = oneEvent(outerPopover, "sp-opened");
196
- const start = performance.now();
197
- openOverlays.push(
198
- await Overlay.open(button, "click", outerPopover, {
199
- delayed: true,
200
- offset: 10
201
- })
202
- );
203
- await opened;
204
- const end = performance.now();
205
- expect(await isInteractive(outerPopover)).to.be.true;
206
- expect(end - start).to.be.greaterThan(1e3);
207
- });
208
- it("opens hover overlay", async () => {
209
- const button = testDiv.querySelector("#first-button");
210
- const hoverOverlay = testDiv.querySelector("#hover-1");
211
- const clickOverlay = testDiv.querySelector(
212
- "#outer-popover"
213
- );
214
- expect(await isOnTopLayer(hoverOverlay)).to.be.false;
215
- expect(await isOnTopLayer(clickOverlay)).to.be.false;
216
- let opened = oneEvent(hoverOverlay, "sp-opened");
217
- openOverlays.push(
218
- await Overlay.open(button, "hover", hoverOverlay, {
219
- delayed: false,
220
- placement: "top",
221
- offset: 10
222
- })
223
- );
224
- await opened;
225
- expect(await isOnTopLayer(hoverOverlay)).to.be.true;
226
- opened = oneEvent(clickOverlay, "sp-opened");
227
- const closed = oneEvent(hoverOverlay, "sp-closed");
228
- openOverlays.push(
229
- await Overlay.open(button, "click", clickOverlay, {
230
- delayed: false,
231
- placement: "bottom",
232
- offset: 10
233
- })
234
- );
235
- await opened;
236
- await closed;
237
- expect(
238
- await isInteractive(clickOverlay),
239
- "click overlay not interactive"
240
- ).to.be.true;
241
- expect(await isOnTopLayer(hoverOverlay), "hover overlay interactive").to.be.false;
242
- });
243
- it("opens custom overlay", async () => {
244
- const button = testDiv.querySelector("#first-button");
245
- const customOverlay = testDiv.querySelector("#hover-1");
246
- const clickOverlay = testDiv.querySelector(
247
- "#outer-popover"
248
- );
249
- expect(button).to.exist;
250
- expect(customOverlay).to.exist;
251
- expect(await isOnTopLayer(customOverlay)).to.be.false;
252
- expect(await isOnTopLayer(clickOverlay)).to.be.false;
253
- let opened = oneEvent(customOverlay, "sp-opened");
254
- openOverlays.push(
255
- await Overlay.open(button, "custom", customOverlay, {
256
- delayed: false,
257
- placement: "top",
258
- offset: 10
259
- })
260
- );
261
- await opened;
262
- expect(await isOnTopLayer(customOverlay)).to.be.true;
263
- opened = oneEvent(clickOverlay, "sp-opened");
264
- openOverlays.push(
265
- await Overlay.open(button, "click", clickOverlay, {
266
- delayed: false,
267
- placement: "bottom",
268
- offset: 10
269
- })
270
- );
271
- await opened;
272
- expect(await isOnTopLayer(clickOverlay), "click content open").to.be.true;
273
- });
274
- it("closes via events", async () => {
275
- const test = await fixture(html`
276
- <div>
277
- <sp-popover id="root">
278
- <sp-dialog dismissable>
279
- Some Content for the Dialog.
280
- </sp-dialog>
281
- </sp-popover>
282
- </div>
283
- `);
284
- const el = test.querySelector("sp-popover");
285
- const dialog = el.querySelector("sp-dialog");
286
- const opened = oneEvent(el, "sp-opened");
287
- openOverlays.push(
288
- await Overlay.open(test, "click", el, {
289
- delayed: false,
290
- placement: "bottom",
291
- offset: 10
292
- })
293
- );
294
- await opened;
295
- expect(await isInteractive(el)).to.be.true;
296
- const closed = oneEvent(el, "sp-closed");
297
- dialog.close();
298
- await closed;
299
- expect(await isInteractive(el)).to.be.false;
300
- });
301
- it("closes an inline overlay when tabbing past the content", async () => {
302
- const el = await fixture(html`
303
- <div>
304
- <sp-button class="trigger">Trigger</sp-button>
305
- <sp-popover class="content">
306
- <input />
307
- </sp-popover>
308
- <input value="After" id="after" />
309
- </div>
310
- `);
311
- const trigger = el.querySelector(".trigger");
312
- const content = el.querySelector(".content");
313
- const input = el.querySelector("input");
314
- const after2 = el.querySelector("#after");
315
- const opened = oneEvent(content, "sp-opened");
316
- openOverlays.push(
317
- await Overlay.open(trigger, "inline", content, {
318
- receivesFocus: "auto"
319
- })
320
- );
321
- await opened;
322
- expect(await isInteractive(content)).to.be.true;
323
- expect(document.activeElement).to.equal(input);
324
- const closed = oneEvent(content, "sp-closed");
325
- await sendKeys({
326
- press: "Shift+Tab"
327
- });
328
- await closed;
329
- expect(document.activeElement).to.equal(trigger);
330
- await sendKeys({
331
- press: "Tab"
332
- });
333
- expect(document.activeElement).to.equal(after2);
334
- expect(await isInteractive(content)).to.be.false;
335
- });
336
- it("closes an inline overlay when tabbing before the trigger", async () => {
337
- const el = await fixture(html`
338
- <div>
339
- <input value="Before" id="before" />
340
- <sp-button class="trigger">Trigger</sp-button>
341
- <div class="content">
342
- <label>
343
- Content in an inline overlay.
344
- <input />
345
- </label>
346
- </div>
347
- </div>
348
- `);
349
- const trigger = el.querySelector(".trigger");
350
- const content = el.querySelector(".content");
351
- const input = el.querySelector(".content input");
352
- const before2 = el.querySelector("#before");
353
- openOverlays.push(await Overlay.open(trigger, "inline", content, {}));
354
- trigger.focus();
355
- await sendKeys({
356
- press: "Tab"
357
- });
358
- expect(document.activeElement).to.equal(input);
359
- await sendKeys({
360
- press: "Shift+Tab"
361
- });
362
- expect(document.activeElement).to.equal(trigger);
363
- await sendKeys({
364
- press: "Shift+Tab"
365
- });
366
- expect(document.activeElement).to.equal(before2);
367
- });
368
- it("opens detached content", async () => {
369
- const textContent = "This is a detached element that has been overlaid";
370
- const el = await fixture(
371
- html`
372
- <button>Trigger</button>
373
- `
374
- );
375
- const content = document.createElement("sp-popover");
376
- content.textContent = textContent;
377
- const opened = oneEvent(content, "sp-opened");
378
- const closeOverlay = await Overlay.open(el, "click", content, {
379
- placement: "bottom"
380
- });
381
- await opened;
382
- expect(await isInteractive(content)).to.be.true;
383
- const closed = oneEvent(content, "sp-closed");
384
- closeOverlay();
385
- await closed;
386
- expect(await isInteractive(content)).to.be.false;
387
- content.remove();
388
- });
389
- });
390
- describe('Overlay - type="modal", v1', () => {
391
- describe("handle multiple separate `contextmenu` events", async () => {
392
- let width = 0;
393
- let height = 0;
394
- let firstMenu;
395
- let firstRect;
396
- let secondMenu;
397
- let secondRect;
398
- before(async () => {
399
- render(
400
- html`
401
- <sp-theme color="light" scale="large">
402
- ${virtualElementV1({
403
- ...virtualElementV1.args,
404
- offset: 6
405
- })}
406
- </sp-theme>
407
- `,
408
- document.body
409
- );
410
- width = window.innerWidth;
411
- height = window.innerHeight;
412
- });
413
- after(() => {
414
- var _a;
415
- (_a = document.querySelector("sp-theme")) == null ? void 0 : _a.remove();
416
- });
417
- it('opens the first "contextmenu" overlay', async () => {
418
- const opened = oneEvent(document, "sp-opened");
419
- await sendMouse({
420
- steps: [
421
- {
422
- type: "move",
423
- position: [width / 2 + 50, height / 2]
424
- },
425
- {
426
- type: "click",
427
- options: {
428
- button: "right"
429
- },
430
- position: [width / 2 + 50, height / 2]
431
- }
432
- ]
433
- });
434
- await opened;
435
- firstMenu = document.querySelector("sp-popover");
436
- expect(firstMenu.textContent).to.include("Menu source: end");
437
- firstRect = firstMenu.getBoundingClientRect();
438
- expect(firstMenu).to.not.be.null;
439
- });
440
- it('closes the first "contextmenu" when opening a second', async () => {
441
- var _a, _b, _c, _d;
442
- const closed = oneEvent(document, "sp-closed");
443
- const opened = oneEvent(document, "sp-opened");
444
- const trigger = document.querySelector(
445
- "start-end-contextmenu"
446
- );
447
- (_b = (_a = trigger.shadowRoot) == null ? void 0 : _a.querySelector("#start")) == null ? void 0 : _b.dispatchEvent(
448
- new Event("contextmenu", {
449
- composed: true
450
- })
451
- );
452
- await nextFrame();
453
- (_d = (_c = trigger.shadowRoot) == null ? void 0 : _c.querySelector("#start")) == null ? void 0 : _d.dispatchEvent(
454
- new Event("pointerup", {
455
- composed: true,
456
- bubbles: true
457
- })
458
- );
459
- await closed;
460
- await opened;
461
- secondMenu = document.querySelector("sp-popover");
462
- expect(secondMenu.textContent).to.include("Menu source: start");
463
- secondRect = secondMenu.getBoundingClientRect();
464
- expect(secondMenu).to.not.be.null;
465
- });
466
- it('closes the second "contextmenu" when clicking away', async () => {
467
- const closed = oneEvent(document, "sp-closed");
468
- sendMouse({
469
- steps: [
470
- {
471
- type: "click",
472
- position: [width - width / 8, height - height / 8]
473
- }
474
- ]
475
- });
476
- await closed;
477
- expect(firstRect.top).to.not.equal(secondRect.top);
478
- expect(firstRect.left).to.not.equal(secondRect.left);
479
- });
480
- });
481
- it("does not open content off of the viewport", async () => {
482
- before(async () => {
483
- await setViewport({ width: 360, height: 640 });
484
- await nextFrame();
485
- });
486
- after(async () => {
487
- await setViewport({ width: 800, height: 600 });
488
- await nextFrame();
489
- });
490
- await fixture(html`
491
- ${virtualElementV1({
492
- ...virtualElementV1.args,
493
- offset: 6
494
- })}
495
- `);
496
- const opened = oneEvent(document, "sp-opened");
497
- sendMouse({
498
- steps: [
499
- {
500
- type: "move",
501
- position: [270, 10]
502
- },
503
- {
504
- type: "click",
505
- options: {
506
- button: "right"
507
- },
508
- position: [270, 10]
509
- }
510
- ]
511
- });
512
- await opened;
513
- const firstMenu = document.querySelector("sp-menu");
514
- expect(firstMenu).to.not.be.null;
515
- expect(await isInteractive(firstMenu)).to.be.true;
516
- const closed = oneEvent(document, "sp-closed");
517
- sendKeys({
518
- press: "Escape"
519
- });
520
- await closed;
521
- expect(await isInteractive(firstMenu)).to.be.false;
522
- });
523
- it("opens children in the modal stack through shadow roots", async () => {
524
- const el = await fixture(definedOverlayElement());
525
- const trigger = el.querySelector(
526
- '[slot="trigger"]'
527
- );
528
- let open = oneEvent(el, "sp-opened");
529
- trigger.click();
530
- await open;
531
- expect(el.open).to.equal("click");
532
- const content = document.querySelector(
533
- "popover-content"
534
- );
535
- open = oneEvent(content, "sp-opened");
536
- content.button.click();
537
- await open;
538
- expect(content.trigger.open).to.equal("click");
539
- let close = oneEvent(content, "sp-closed");
540
- content.trigger.removeAttribute("open");
541
- await close;
542
- expect(content.trigger.open).to.be.null;
543
- close = oneEvent(el, "sp-closed");
544
- el.removeAttribute("open");
545
- await close;
546
- expect(el.open).to.be.null;
547
- });
548
- });
549
- describe("Overlay - timing, v1", () => {
550
- it("manages multiple modals in a row without preventing them from closing", async () => {
551
- const test = await fixture(html`
552
- <div>
553
- <overlay-trigger id="test-1" placement="right">
554
- <sp-button slot="trigger">Trigger 1</sp-button>
555
- <sp-popover slot="hover-content">
556
- <p>Hover contentent for "Trigger 1".</p>
557
- </sp-popover>
558
- </overlay-trigger>
559
- <overlay-trigger id="test-2" placement="right">
560
- <sp-button slot="trigger">Trigger 2</sp-button>
561
- <sp-popover slot="click-content">
562
- <p>Click contentent for "Trigger 2".</p>
563
- </sp-popover>
564
- <sp-popover slot="hover-content">
565
- <p>Hover contentent for "Trigger 2".</p>
566
- </sp-popover>
567
- </overlay-trigger>
568
- </div>
569
- `);
570
- const overlayTrigger1 = test.querySelector("#test-1");
571
- const overlayTrigger2 = test.querySelector("#test-2");
572
- const trigger1 = overlayTrigger1.querySelector(
573
- '[slot="trigger"]'
574
- );
575
- const trigger2 = overlayTrigger2.querySelector(
576
- '[slot="trigger"]'
577
- );
578
- const boundingRectTrigger1 = trigger1.getBoundingClientRect();
579
- const boundingRectTrigger2 = trigger2.getBoundingClientRect();
580
- const trigger1Position = [
581
- boundingRectTrigger1.left + boundingRectTrigger1.width / 2,
582
- boundingRectTrigger1.top + boundingRectTrigger1.height / 2
583
- ];
584
- const outsideTriggers = [
585
- boundingRectTrigger1.left + boundingRectTrigger1.width / 2,
586
- 300
587
- ];
588
- const trigger2Position = [
589
- boundingRectTrigger2.left + boundingRectTrigger2.width / 2,
590
- boundingRectTrigger2.top + boundingRectTrigger2.height / 4
591
- ];
592
- await sendMouse({
593
- steps: [
594
- {
595
- type: "move",
596
- position: trigger1Position
597
- }
598
- ]
599
- });
600
- await nextFrame();
601
- await nextFrame();
602
- await sendMouse({
603
- steps: [
604
- {
605
- type: "move",
606
- position: outsideTriggers
607
- }
608
- ]
609
- });
610
- await nextFrame();
611
- await nextFrame();
612
- await sendMouse({
613
- steps: [
614
- {
615
- type: "move",
616
- position: trigger2Position
617
- }
618
- ]
619
- });
620
- await nextFrame();
621
- await nextFrame();
622
- const opened = oneEvent(trigger2, "sp-opened");
623
- await sendMouse({
624
- steps: [
625
- {
626
- type: "click",
627
- position: trigger2Position
628
- }
629
- ]
630
- });
631
- await opened;
632
- await nextFrame();
633
- await nextFrame();
634
- expect(overlayTrigger1.hasAttribute("open")).to.be.false;
635
- expect(overlayTrigger2.hasAttribute("open")).to.be.true;
636
- expect(overlayTrigger2.getAttribute("open")).to.equal("click");
637
- const closed = oneEvent(overlayTrigger2, "sp-closed");
638
- await sendMouse({
639
- steps: [
640
- {
641
- type: "click",
642
- position: outsideTriggers
643
- }
644
- ]
645
- });
646
- await closed;
647
- expect(overlayTrigger1.hasAttribute("open")).to.be.false;
648
- expect(overlayTrigger2.hasAttribute("open")).to.be.false;
649
- });
650
- });
651
- //# sourceMappingURL=overlay-v1.test.js.map