@spectrum-web-components/overlay 0.19.4-overlay.9 → 0.19.4

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/active-overlay.d.ts +6 -0
  2. package/active-overlay.dev.js +4 -0
  3. package/{test/overlay-element.test-vrt.js.map → active-overlay.dev.js.map} +3 -3
  4. package/active-overlay.js +2 -0
  5. package/{sp-overlay.js.map → active-overlay.js.map} +4 -4
  6. package/custom-elements.json +1212 -0
  7. package/package.json +21 -50
  8. package/src/ActiveOverlay.d.ts +84 -0
  9. package/src/ActiveOverlay.dev.js +517 -0
  10. package/src/ActiveOverlay.dev.js.map +7 -0
  11. package/src/ActiveOverlay.js +16 -0
  12. package/src/ActiveOverlay.js.map +7 -0
  13. package/src/OverlayTrigger.d.ts +31 -18
  14. package/src/OverlayTrigger.dev.js +246 -138
  15. package/src/OverlayTrigger.dev.js.map +3 -3
  16. package/src/OverlayTrigger.js +22 -54
  17. package/src/OverlayTrigger.js.map +3 -3
  18. package/src/VirtualTrigger.dev.js +2 -0
  19. package/src/VirtualTrigger.dev.js.map +2 -2
  20. package/src/VirtualTrigger.js +1 -1
  21. package/src/VirtualTrigger.js.map +3 -3
  22. package/src/active-overlay.css.dev.js +13 -0
  23. package/src/active-overlay.css.dev.js.map +7 -0
  24. package/src/active-overlay.css.js +10 -0
  25. package/src/active-overlay.css.js.map +7 -0
  26. package/src/index.d.ts +3 -2
  27. package/src/index.dev.js +3 -2
  28. package/src/index.dev.js.map +2 -2
  29. package/src/index.js +1 -1
  30. package/src/index.js.map +2 -2
  31. package/src/loader.d.ts +2 -2
  32. package/src/loader.dev.js +19 -2
  33. package/src/loader.dev.js.map +2 -2
  34. package/src/loader.js +1 -1
  35. package/src/loader.js.map +3 -3
  36. package/src/overlay-stack.d.ts +50 -0
  37. package/src/overlay-stack.dev.js +514 -0
  38. package/src/overlay-stack.dev.js.map +7 -0
  39. package/src/overlay-stack.js +33 -0
  40. package/src/overlay-stack.js.map +7 -0
  41. package/src/overlay-trigger.css.dev.js +1 -1
  42. package/src/overlay-trigger.css.dev.js.map +1 -1
  43. package/src/overlay-trigger.css.js +1 -1
  44. package/src/overlay-trigger.css.js.map +1 -1
  45. package/src/overlay-types.d.ts +3 -3
  46. package/src/overlay-types.dev.js +0 -1
  47. package/src/overlay-types.dev.js.map +3 -3
  48. package/src/overlay-types.js +1 -1
  49. package/src/overlay-types.js.map +3 -3
  50. package/src/overlay-utils.d.ts +3 -0
  51. package/src/overlay-utils.dev.js +31 -0
  52. package/src/overlay-utils.dev.js.map +7 -0
  53. package/src/overlay-utils.js +2 -0
  54. package/src/overlay-utils.js.map +7 -0
  55. package/src/overlay.d.ts +59 -0
  56. package/src/overlay.dev.js +127 -0
  57. package/src/overlay.dev.js.map +7 -0
  58. package/src/overlay.js +2 -0
  59. package/src/overlay.js.map +7 -0
  60. package/stories/overlay-story-components.js +6 -1
  61. package/stories/overlay-story-components.js.map +2 -2
  62. package/stories/overlay.stories.js +689 -648
  63. package/stories/overlay.stories.js.map +2 -2
  64. package/sync/overlay-trigger.d.ts +0 -4
  65. package/sync/overlay-trigger.dev.js +4 -1
  66. package/sync/overlay-trigger.dev.js.map +2 -2
  67. package/sync/overlay-trigger.js +1 -1
  68. package/sync/overlay-trigger.js.map +3 -3
  69. package/test/benchmark/basic-test.js +1 -1
  70. package/test/benchmark/basic-test.js.map +1 -1
  71. package/test/index.js +9 -3
  72. package/test/index.js.map +2 -2
  73. package/test/overlay-lifecycle.test.js +74 -34
  74. package/test/overlay-lifecycle.test.js.map +2 -2
  75. package/test/overlay-trigger-click.test.js +2 -3
  76. package/test/overlay-trigger-click.test.js.map +2 -2
  77. package/test/overlay-trigger-extended.test.js +6 -1
  78. package/test/overlay-trigger-extended.test.js.map +2 -2
  79. package/test/overlay-trigger-hover-click.test.js +1 -1
  80. package/test/overlay-trigger-hover-click.test.js.map +2 -2
  81. package/test/overlay-trigger-hover.test.js +2 -2
  82. package/test/overlay-trigger-hover.test.js.map +2 -2
  83. package/test/overlay-trigger-longpress.test.js +377 -1
  84. package/test/overlay-trigger-longpress.test.js.map +2 -2
  85. package/test/overlay-trigger-sync.test.js +3 -1
  86. package/test/overlay-trigger-sync.test.js.map +2 -2
  87. package/test/overlay-trigger.test.js +3 -1
  88. package/test/overlay-trigger.test.js.map +2 -2
  89. package/test/overlay-update.test.js +4 -4
  90. package/test/overlay-update.test.js.map +2 -2
  91. package/test/overlay.test.js +154 -100
  92. package/test/overlay.test.js.map +2 -2
  93. package/sp-overlay.d.ts +0 -6
  94. package/sp-overlay.dev.js +0 -4
  95. package/sp-overlay.dev.js.map +0 -7
  96. package/sp-overlay.js +0 -2
  97. package/src/Overlay.d.ts +0 -22
  98. package/src/Overlay.dev.js +0 -65
  99. package/src/Overlay.dev.js.map +0 -7
  100. package/src/Overlay.js +0 -2
  101. package/src/Overlay.js.map +0 -7
  102. package/src/OverlayBase.d.ts +0 -93
  103. package/src/OverlayBase.dev.js +0 -564
  104. package/src/OverlayBase.dev.js.map +0 -7
  105. package/src/OverlayBase.js +0 -18
  106. package/src/OverlayBase.js.map +0 -7
  107. package/src/OverlayDialog.d.ts +0 -8
  108. package/src/OverlayDialog.dev.js +0 -43
  109. package/src/OverlayDialog.dev.js.map +0 -7
  110. package/src/OverlayDialog.js +0 -2
  111. package/src/OverlayDialog.js.map +0 -7
  112. package/src/OverlayNoPopover.d.ts +0 -8
  113. package/src/OverlayNoPopover.dev.js +0 -62
  114. package/src/OverlayNoPopover.dev.js.map +0 -7
  115. package/src/OverlayNoPopover.js +0 -2
  116. package/src/OverlayNoPopover.js.map +0 -7
  117. package/src/OverlayPopover.d.ts +0 -8
  118. package/src/OverlayPopover.dev.js +0 -81
  119. package/src/OverlayPopover.dev.js.map +0 -7
  120. package/src/OverlayPopover.js +0 -2
  121. package/src/OverlayPopover.js.map +0 -7
  122. package/src/OverlayStack.d.ts +0 -24
  123. package/src/OverlayStack.dev.js +0 -113
  124. package/src/OverlayStack.dev.js.map +0 -7
  125. package/src/OverlayStack.js +0 -2
  126. package/src/OverlayStack.js.map +0 -7
  127. package/src/PlacementController.d.ts +0 -35
  128. package/src/PlacementController.dev.js +0 -172
  129. package/src/PlacementController.dev.js.map +0 -7
  130. package/src/PlacementController.js +0 -2
  131. package/src/PlacementController.js.map +0 -7
  132. package/src/fullSizePlugin.d.ts +0 -12
  133. package/src/fullSizePlugin.dev.js +0 -39
  134. package/src/fullSizePlugin.dev.js.map +0 -7
  135. package/src/fullSizePlugin.js +0 -2
  136. package/src/fullSizePlugin.js.map +0 -7
  137. package/src/overlay-base.css.dev.js +0 -9
  138. package/src/overlay-base.css.dev.js.map +0 -7
  139. package/src/overlay-base.css.js +0 -6
  140. package/src/overlay-base.css.js.map +0 -7
  141. package/src/placement.d.ts +0 -21
  142. package/src/placement.dev.js +0 -111
  143. package/src/placement.dev.js.map +0 -7
  144. package/src/placement.js +0 -2
  145. package/src/placement.js.map +0 -7
  146. package/src/topLayerOverTransforms.d.ts +0 -22
  147. package/src/topLayerOverTransforms.dev.js +0 -161
  148. package/src/topLayerOverTransforms.dev.js.map +0 -7
  149. package/src/topLayerOverTransforms.js +0 -2
  150. package/src/topLayerOverTransforms.js.map +0 -7
  151. package/stories/overlay-element.stories.js +0 -229
  152. package/stories/overlay-element.stories.js.map +0 -7
  153. package/test/overlay-element.test-vrt.js +0 -5
  154. package/test/overlay-element.test.js +0 -759
  155. package/test/overlay-element.test.js.map +0 -7
  156. /package/src/{overlay-base.css.d.ts → active-overlay.css.d.ts} +0 -0
@@ -1,22 +1,20 @@
1
1
  "use strict";
2
2
  import "@spectrum-web-components/button/sp-button.js";
3
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
4
  import "@spectrum-web-components/popover/sp-popover.js";
8
5
  import { setViewport } from "@web/test-runner-commands";
9
6
  import {
10
7
  Overlay
11
8
  } from "@spectrum-web-components/overlay";
9
+ import { isVisible } from "../../../test/testing-helpers.js";
12
10
  import {
13
- aTimeout,
14
11
  elementUpdated,
15
12
  expect,
16
13
  fixture,
17
14
  html,
18
15
  nextFrame,
19
- oneEvent
16
+ oneEvent,
17
+ waitUntil
20
18
  } from "@open-wc/testing";
21
19
  import { sendKeys } from "@web/test-runner-commands";
22
20
  import {
@@ -24,26 +22,6 @@ import {
24
22
  virtualElement
25
23
  } from "../stories/overlay.stories";
26
24
  import { sendMouse } from "../../../test/plugins/browser.js";
27
- import { spy } from "sinon";
28
- async function isInteractive(el) {
29
- const clickSpy = spy();
30
- el.addEventListener("click", () => {
31
- clickSpy();
32
- });
33
- const clientRect = el.getBoundingClientRect();
34
- await sendMouse({
35
- steps: [
36
- {
37
- type: "click",
38
- position: [
39
- clientRect.left + clientRect.width / 2,
40
- clientRect.top + clientRect.height / 2
41
- ]
42
- }
43
- ]
44
- });
45
- return clickSpy.callCount === 1;
46
- }
47
25
  describe("Overlays", () => {
48
26
  let testDiv;
49
27
  let openOverlays = [];
@@ -70,13 +48,18 @@ describe("Overlays", () => {
70
48
  display: none;
71
49
  }
72
50
  </style>
73
- <sp-button id="first-button" variant="primary">
51
+ <sp-button
52
+ id="first-button"
53
+ variant="primary"
54
+ slot="trigger"
55
+ >
74
56
  Show Popover
75
57
  </sp-button>
76
58
  <div id="overlay-content">
77
59
  <sp-popover
78
60
  id="outer-popover"
79
61
  dialog
62
+ slot="click-content"
80
63
  direction="bottom"
81
64
  tip
82
65
  open
@@ -85,12 +68,12 @@ describe("Overlays", () => {
85
68
  A popover message
86
69
  </div>
87
70
  </sp-popover>
88
- <sp-tooltip id="hover-1" class="hover-content">
71
+ <div id="hover-1" class="hover-content">
89
72
  Hover message
90
- </sp-tooltip>
91
- <sp-tooltip id="hover-2" class="hover-content">
73
+ </div>
74
+ <div id="hover-2" class="hover-content">
92
75
  Other hover message
93
- </sp-tooltip>
76
+ </div>
94
77
  </div>
95
78
  </div>
96
79
  `
@@ -118,19 +101,21 @@ describe("Overlays", () => {
118
101
  ].map((direction) => {
119
102
  const placement = direction;
120
103
  it(`opens a popover - ${placement}`, async () => {
121
- const clickSpy = spy();
122
104
  const button = testDiv.querySelector(
123
105
  "#first-button"
124
106
  );
125
107
  const outerPopover = testDiv.querySelector(
126
108
  "#outer-popover"
127
109
  );
128
- outerPopover.addEventListener("click", () => {
129
- clickSpy();
130
- });
131
- expect(await isInteractive(outerPopover)).to.be.false;
110
+ expect(outerPopover.parentElement).to.exist;
111
+ if (outerPopover.parentElement) {
112
+ expect(outerPopover.parentElement.id).to.equal(
113
+ "overlay-content"
114
+ );
115
+ }
116
+ expect(isVisible(outerPopover)).to.be.false;
132
117
  expect(button).to.exist;
133
- const opened = oneEvent(outerPopover, "sp-opened");
118
+ const opened = oneEvent(button, "sp-opened");
134
119
  openOverlays.push(
135
120
  await Overlay.open(button, "click", outerPopover, {
136
121
  delayed: false,
@@ -139,16 +124,25 @@ describe("Overlays", () => {
139
124
  })
140
125
  );
141
126
  await opened;
142
- await aTimeout(150);
143
- expect(await isInteractive(outerPopover)).to.be.true;
127
+ expect(outerPopover.parentElement).to.exist;
128
+ if (outerPopover.parentElement) {
129
+ expect(outerPopover.parentElement.id).not.to.equal(
130
+ "overlay-content"
131
+ );
132
+ }
133
+ expect(isVisible(outerPopover)).to.be.true;
144
134
  });
145
135
  });
146
136
  it(`updates a popover`, async () => {
147
137
  const button = testDiv.querySelector("#first-button");
148
138
  const outerPopover = testDiv.querySelector("#outer-popover");
149
- expect(await isInteractive(outerPopover)).to.be.false;
139
+ expect(outerPopover.parentElement).to.exist;
140
+ if (outerPopover.parentElement) {
141
+ expect(outerPopover.parentElement.id).to.equal("overlay-content");
142
+ }
143
+ expect(isVisible(outerPopover)).to.be.false;
150
144
  expect(button).to.exist;
151
- const opened = oneEvent(outerPopover, "sp-opened");
145
+ const opened = oneEvent(button, "sp-opened");
152
146
  openOverlays.push(
153
147
  await Overlay.open(button, "click", outerPopover, {
154
148
  delayed: false,
@@ -156,16 +150,20 @@ describe("Overlays", () => {
156
150
  })
157
151
  );
158
152
  await opened;
159
- expect(await isInteractive(outerPopover)).to.be.true;
153
+ expect(isVisible(outerPopover)).to.be.true;
160
154
  Overlay.update();
161
- expect(await isInteractive(outerPopover)).to.be.true;
155
+ expect(isVisible(outerPopover)).to.be.true;
162
156
  });
163
157
  it(`opens a popover w/ delay`, async () => {
164
158
  const button = testDiv.querySelector("#first-button");
165
159
  const outerPopover = testDiv.querySelector("#outer-popover");
166
- expect(await isInteractive(outerPopover)).to.be.false;
160
+ expect(outerPopover.parentElement).to.exist;
161
+ if (outerPopover.parentElement) {
162
+ expect(outerPopover.parentElement.id).to.equal("overlay-content");
163
+ }
164
+ expect(isVisible(outerPopover)).to.be.false;
167
165
  expect(button).to.exist;
168
- const opened = oneEvent(outerPopover, "sp-opened");
166
+ const opened = oneEvent(button, "sp-opened");
169
167
  openOverlays.push(
170
168
  await Overlay.open(button, "click", outerPopover, {
171
169
  delayed: true,
@@ -173,7 +171,13 @@ describe("Overlays", () => {
173
171
  })
174
172
  );
175
173
  await opened;
176
- expect(await isInteractive(outerPopover)).to.be.true;
174
+ expect(outerPopover.parentElement).to.exist;
175
+ if (outerPopover.parentElement) {
176
+ expect(outerPopover.parentElement.id).not.to.equal(
177
+ "overlay-content"
178
+ );
179
+ }
180
+ expect(isVisible(outerPopover)).to.be.true;
177
181
  });
178
182
  it("opens hover overlay", async () => {
179
183
  const button = testDiv.querySelector("#first-button");
@@ -181,9 +185,9 @@ describe("Overlays", () => {
181
185
  const clickOverlay = testDiv.querySelector(
182
186
  "#outer-popover"
183
187
  );
184
- expect(await isInteractive(hoverOverlay)).to.be.false;
185
- expect(await isInteractive(clickOverlay)).to.be.false;
186
- let opened = oneEvent(hoverOverlay, "sp-opened");
188
+ expect(isVisible(hoverOverlay)).to.be.false;
189
+ expect(isVisible(clickOverlay)).to.be.false;
190
+ let opened = oneEvent(button, "sp-opened");
187
191
  openOverlays.push(
188
192
  await Overlay.open(button, "hover", hoverOverlay, {
189
193
  delayed: false,
@@ -192,9 +196,14 @@ describe("Overlays", () => {
192
196
  })
193
197
  );
194
198
  await opened;
195
- await aTimeout(150);
196
- expect(await isInteractive(hoverOverlay)).to.be.true;
197
- opened = oneEvent(clickOverlay, "sp-opened");
199
+ expect(hoverOverlay.parentElement).to.exist;
200
+ if (hoverOverlay.parentElement) {
201
+ expect(hoverOverlay.parentElement.id).not.to.equal(
202
+ "overlay-content"
203
+ );
204
+ }
205
+ expect(isVisible(hoverOverlay)).to.be.true;
206
+ opened = oneEvent(button, "sp-opened");
198
207
  openOverlays.push(
199
208
  await Overlay.open(button, "click", clickOverlay, {
200
209
  delayed: false,
@@ -203,9 +212,11 @@ describe("Overlays", () => {
203
212
  })
204
213
  );
205
214
  await opened;
206
- await aTimeout(150);
207
- expect(await isInteractive(clickOverlay)).to.be.true;
208
- expect(await isInteractive(hoverOverlay)).to.be.false;
215
+ if (hoverOverlay.parentElement) {
216
+ expect(hoverOverlay.parentElement.id).to.equal("overlay-content");
217
+ }
218
+ expect(isVisible(hoverOverlay)).to.be.false;
219
+ expect(isVisible(clickOverlay)).to.be.true;
209
220
  });
210
221
  it("opens custom overlay", async () => {
211
222
  const button = testDiv.querySelector("#first-button");
@@ -215,9 +226,9 @@ describe("Overlays", () => {
215
226
  );
216
227
  expect(button).to.exist;
217
228
  expect(customOverlay).to.exist;
218
- expect(await isInteractive(customOverlay)).to.be.false;
219
- expect(await isInteractive(clickOverlay)).to.be.false;
220
- let opened = oneEvent(customOverlay, "sp-opened");
229
+ expect(isVisible(customOverlay)).to.be.false;
230
+ expect(isVisible(clickOverlay)).to.be.false;
231
+ let opened = oneEvent(button, "sp-opened");
221
232
  openOverlays.push(
222
233
  await Overlay.open(button, "custom", customOverlay, {
223
234
  delayed: false,
@@ -226,9 +237,14 @@ describe("Overlays", () => {
226
237
  })
227
238
  );
228
239
  await opened;
229
- await aTimeout(150);
230
- expect(await isInteractive(customOverlay)).to.be.true;
231
- opened = oneEvent(clickOverlay, "sp-opened");
240
+ expect(customOverlay.parentElement).to.exist;
241
+ if (customOverlay.parentElement) {
242
+ expect(customOverlay.parentElement.id).not.to.equal(
243
+ "overlay-content"
244
+ );
245
+ }
246
+ expect(isVisible(customOverlay)).to.be.true;
247
+ opened = oneEvent(button, "sp-opened");
232
248
  openOverlays.push(
233
249
  await Overlay.open(button, "click", clickOverlay, {
234
250
  delayed: false,
@@ -237,44 +253,38 @@ describe("Overlays", () => {
237
253
  })
238
254
  );
239
255
  await opened;
240
- await aTimeout(150);
241
- expect(await isInteractive(clickOverlay), "click content open").to.be.true;
256
+ expect(isVisible(customOverlay)).to.be.true;
257
+ expect(isVisible(clickOverlay)).to.be.true;
242
258
  });
243
259
  it("closes via events", async () => {
244
- const test = await fixture(html`
245
- <div>
246
- <sp-popover id="root">
247
- <sp-dialog dismissable>
248
- Some Content for the Dialog.
249
- </sp-dialog>
250
- </sp-popover>
260
+ const el = await fixture(html`
261
+ <div id="root">
262
+ <sp-dialog dismissable></sp-dialog>
251
263
  </div>
252
264
  `);
253
- const el = test.querySelector("sp-popover");
254
265
  const dialog = el.querySelector("sp-dialog");
255
266
  const opened = oneEvent(el, "sp-opened");
256
267
  openOverlays.push(
257
- await Overlay.open(test, "click", el, {
268
+ await Overlay.open(el, "click", dialog, {
258
269
  delayed: false,
259
270
  placement: "bottom",
260
271
  offset: 10
261
272
  })
262
273
  );
263
274
  await opened;
264
- await aTimeout(150);
265
- expect(await isInteractive(el)).to.be.true;
266
- const closed = oneEvent(el, "sp-closed");
267
275
  dialog.close();
268
- await closed;
269
- expect(await isInteractive(el)).to.be.false;
276
+ await waitUntil(
277
+ () => !!dialog.parentElement && dialog.parentElement.tagName !== "ACTIVE-OVERLAY",
278
+ "content is returned"
279
+ );
270
280
  });
271
- it.skip("closes an inline overlay when tabbing past the content", async () => {
281
+ it("closes an inline overlay when tabbing past the content", async () => {
272
282
  const el = await fixture(html`
273
283
  <div>
274
284
  <sp-button class="trigger">Trigger</sp-button>
275
- <sp-popover class="content">
285
+ <div class="content">
276
286
  <input />
277
- </sp-popover>
287
+ </div>
278
288
  <input value="After" id="after" />
279
289
  </div>
280
290
  `);
@@ -282,15 +292,13 @@ describe("Overlays", () => {
282
292
  const content = el.querySelector(".content");
283
293
  const input = el.querySelector("input");
284
294
  const after = el.querySelector("#after");
285
- const opened = oneEvent(content, "sp-opened");
286
- openOverlays.push(
287
- await Overlay.open(trigger, "inline", content, {
288
- receivesFocus: "auto"
289
- })
290
- );
291
- await opened;
292
- expect(await isInteractive(content)).to.be.true;
295
+ openOverlays.push(await Overlay.open(trigger, "inline", content, {}));
296
+ trigger.focus();
297
+ await sendKeys({
298
+ press: "Tab"
299
+ });
293
300
  expect(document.activeElement).to.equal(input);
301
+ expect(input.closest("active-overlay") !== null);
294
302
  await sendKeys({
295
303
  press: "Shift+Tab"
296
304
  });
@@ -302,10 +310,10 @@ describe("Overlays", () => {
302
310
  await sendKeys({
303
311
  press: "Tab"
304
312
  });
305
- const closed = oneEvent(content, "sp-closed");
306
313
  expect(document.activeElement).to.equal(after);
307
- await closed;
308
- expect(await isInteractive(content)).to.be.false;
314
+ await waitUntil(
315
+ () => document.querySelector("active-overlay") === null
316
+ );
309
317
  });
310
318
  it("closes an inline overlay when tabbing before the trigger", async () => {
311
319
  const el = await fixture(html`
@@ -330,6 +338,7 @@ describe("Overlays", () => {
330
338
  press: "Tab"
331
339
  });
332
340
  expect(document.activeElement).to.equal(input);
341
+ expect(input.closest("active-overlay") !== null);
333
342
  await sendKeys({
334
343
  press: "Shift+Tab"
335
344
  });
@@ -338,6 +347,9 @@ describe("Overlays", () => {
338
347
  press: "Shift+Tab"
339
348
  });
340
349
  expect(document.activeElement).to.equal(before);
350
+ await waitUntil(
351
+ () => document.querySelector("active-overlay") === null
352
+ );
341
353
  });
342
354
  it("opens detached content", async () => {
343
355
  const textContent = "This is a detached element that has been overlaid";
@@ -346,26 +358,34 @@ describe("Overlays", () => {
346
358
  <button>Trigger</button>
347
359
  `
348
360
  );
349
- const content = document.createElement("sp-popover");
361
+ const content = document.createElement("div");
350
362
  content.textContent = textContent;
351
- const opened = oneEvent(content, "sp-opened");
363
+ const opened = oneEvent(el, "sp-opened");
352
364
  const closeOverlay = await Overlay.open(el, "click", content, {
353
365
  placement: "bottom"
354
366
  });
355
367
  await opened;
356
- await aTimeout(150);
357
- expect(await isInteractive(content)).to.be.true;
358
- const closed = oneEvent(content, "sp-closed");
368
+ let activeOverlay = document.querySelector("active-overlay");
369
+ if (activeOverlay) {
370
+ expect(activeOverlay.textContent).to.equal(textContent);
371
+ } else {
372
+ expect(activeOverlay).to.not.be.null;
373
+ }
374
+ const closed = oneEvent(el, "sp-closed");
359
375
  closeOverlay();
360
376
  await closed;
361
- expect(await isInteractive(content)).to.be.false;
377
+ activeOverlay = document.querySelector("active-overlay");
378
+ expect(activeOverlay).to.be.null;
362
379
  content.remove();
363
380
  });
364
381
  });
365
- describe.skip('Overlay - type="modal"', () => {
382
+ describe('Overlay - type="modal"', () => {
366
383
  it("closes on `contextmenu` and passes that to the underlying page", async () => {
367
384
  await fixture(html`
368
- ${virtualElement()}
385
+ ${virtualElement({
386
+ ...virtualElement.args,
387
+ offset: 6
388
+ })}
369
389
  `);
370
390
  const width = window.innerWidth;
371
391
  const height = window.innerHeight;
@@ -386,6 +406,15 @@ describe.skip('Overlay - type="modal"', () => {
386
406
  ]
387
407
  });
388
408
  await opened;
409
+ const firstOverlay = document.querySelector(
410
+ "active-overlay"
411
+ );
412
+ const firstHeadline = firstOverlay.querySelector(
413
+ '[slot="header"]'
414
+ );
415
+ expect(firstOverlay, "first overlay").to.not.be.null;
416
+ expect(firstOverlay.isConnected).to.be.true;
417
+ expect(firstHeadline.textContent).to.equal("Menu source: end");
389
418
  let closed = oneEvent(document, "sp-closed");
390
419
  opened = oneEvent(document, "sp-opened");
391
420
  sendMouse({
@@ -405,6 +434,17 @@ describe.skip('Overlay - type="modal"', () => {
405
434
  });
406
435
  await closed;
407
436
  await opened;
437
+ const secondOverlay = document.querySelector(
438
+ "active-overlay"
439
+ );
440
+ const secondHeadline = secondOverlay.querySelector(
441
+ '[slot="header"]'
442
+ );
443
+ expect(secondOverlay, "second overlay").to.not.be.null;
444
+ expect(secondOverlay).to.not.equal(firstOverlay);
445
+ expect(firstOverlay.isConnected).to.be.false;
446
+ expect(secondOverlay.isConnected).to.be.true;
447
+ expect(secondHeadline.textContent).to.equal("Menu source: start");
408
448
  closed = oneEvent(document, "sp-closed");
409
449
  sendMouse({
410
450
  steps: [
@@ -423,7 +463,10 @@ describe.skip('Overlay - type="modal"', () => {
423
463
  });
424
464
  it("does not open content off of the viewport", async () => {
425
465
  await fixture(html`
426
- ${virtualElement()}
466
+ ${virtualElement({
467
+ ...virtualElement.args,
468
+ offset: 6
469
+ })}
427
470
  `);
428
471
  await setViewport({ width: 360, height: 640 });
429
472
  await nextFrame();
@@ -444,6 +487,13 @@ describe.skip('Overlay - type="modal"', () => {
444
487
  ]
445
488
  });
446
489
  await opened;
490
+ const activeOverlay = document.querySelector(
491
+ "active-overlay"
492
+ );
493
+ expect(activeOverlay.placement).to.equal("right-start");
494
+ expect(activeOverlay.getAttribute("actual-placement")).to.equal(
495
+ "bottom"
496
+ );
447
497
  const closed = oneEvent(document, "sp-closed");
448
498
  sendKeys({
449
499
  press: "Escape"
@@ -465,6 +515,10 @@ describe.skip('Overlay - type="modal"', () => {
465
515
  open = oneEvent(content, "sp-opened");
466
516
  content.button.click();
467
517
  await open;
518
+ const activeOverlays = document.querySelectorAll("active-overlay");
519
+ activeOverlays.forEach((overlay) => {
520
+ expect(overlay.slot).to.equal("open");
521
+ });
468
522
  let close = oneEvent(content, "sp-closed");
469
523
  content.trigger.removeAttribute("open");
470
524
  await close;
@@ -473,7 +527,7 @@ describe.skip('Overlay - type="modal"', () => {
473
527
  await close;
474
528
  });
475
529
  });
476
- describe.skip("Overlay - timing", () => {
530
+ describe("Overlay - timing", () => {
477
531
  it("manages multiple modals in a row without preventing them from closing", async () => {
478
532
  const test = await fixture(html`
479
533
  <div>