@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.
- package/active-overlay.d.ts +6 -0
- package/active-overlay.dev.js +4 -0
- package/{test/overlay-element.test-vrt.js.map → active-overlay.dev.js.map} +3 -3
- package/active-overlay.js +2 -0
- package/{sp-overlay.js.map → active-overlay.js.map} +4 -4
- package/custom-elements.json +1212 -0
- package/package.json +21 -50
- package/src/ActiveOverlay.d.ts +84 -0
- package/src/ActiveOverlay.dev.js +517 -0
- package/src/ActiveOverlay.dev.js.map +7 -0
- package/src/ActiveOverlay.js +16 -0
- package/src/ActiveOverlay.js.map +7 -0
- package/src/OverlayTrigger.d.ts +31 -18
- package/src/OverlayTrigger.dev.js +246 -138
- package/src/OverlayTrigger.dev.js.map +3 -3
- package/src/OverlayTrigger.js +22 -54
- package/src/OverlayTrigger.js.map +3 -3
- package/src/VirtualTrigger.dev.js +2 -0
- package/src/VirtualTrigger.dev.js.map +2 -2
- package/src/VirtualTrigger.js +1 -1
- package/src/VirtualTrigger.js.map +3 -3
- package/src/active-overlay.css.dev.js +13 -0
- package/src/active-overlay.css.dev.js.map +7 -0
- package/src/active-overlay.css.js +10 -0
- package/src/active-overlay.css.js.map +7 -0
- package/src/index.d.ts +3 -2
- package/src/index.dev.js +3 -2
- package/src/index.dev.js.map +2 -2
- package/src/index.js +1 -1
- package/src/index.js.map +2 -2
- package/src/loader.d.ts +2 -2
- package/src/loader.dev.js +19 -2
- package/src/loader.dev.js.map +2 -2
- package/src/loader.js +1 -1
- package/src/loader.js.map +3 -3
- package/src/overlay-stack.d.ts +50 -0
- package/src/overlay-stack.dev.js +514 -0
- package/src/overlay-stack.dev.js.map +7 -0
- package/src/overlay-stack.js +33 -0
- package/src/overlay-stack.js.map +7 -0
- package/src/overlay-trigger.css.dev.js +1 -1
- package/src/overlay-trigger.css.dev.js.map +1 -1
- package/src/overlay-trigger.css.js +1 -1
- package/src/overlay-trigger.css.js.map +1 -1
- package/src/overlay-types.d.ts +3 -3
- package/src/overlay-types.dev.js +0 -1
- package/src/overlay-types.dev.js.map +3 -3
- package/src/overlay-types.js +1 -1
- package/src/overlay-types.js.map +3 -3
- package/src/overlay-utils.d.ts +3 -0
- package/src/overlay-utils.dev.js +31 -0
- package/src/overlay-utils.dev.js.map +7 -0
- package/src/overlay-utils.js +2 -0
- package/src/overlay-utils.js.map +7 -0
- package/src/overlay.d.ts +59 -0
- package/src/overlay.dev.js +127 -0
- package/src/overlay.dev.js.map +7 -0
- package/src/overlay.js +2 -0
- package/src/overlay.js.map +7 -0
- package/stories/overlay-story-components.js +6 -1
- package/stories/overlay-story-components.js.map +2 -2
- package/stories/overlay.stories.js +689 -648
- package/stories/overlay.stories.js.map +2 -2
- package/sync/overlay-trigger.d.ts +0 -4
- package/sync/overlay-trigger.dev.js +4 -1
- package/sync/overlay-trigger.dev.js.map +2 -2
- package/sync/overlay-trigger.js +1 -1
- package/sync/overlay-trigger.js.map +3 -3
- package/test/benchmark/basic-test.js +1 -1
- package/test/benchmark/basic-test.js.map +1 -1
- package/test/index.js +9 -3
- package/test/index.js.map +2 -2
- package/test/overlay-lifecycle.test.js +74 -34
- package/test/overlay-lifecycle.test.js.map +2 -2
- package/test/overlay-trigger-click.test.js +2 -3
- package/test/overlay-trigger-click.test.js.map +2 -2
- package/test/overlay-trigger-extended.test.js +6 -1
- package/test/overlay-trigger-extended.test.js.map +2 -2
- package/test/overlay-trigger-hover-click.test.js +1 -1
- package/test/overlay-trigger-hover-click.test.js.map +2 -2
- package/test/overlay-trigger-hover.test.js +2 -2
- package/test/overlay-trigger-hover.test.js.map +2 -2
- package/test/overlay-trigger-longpress.test.js +377 -1
- package/test/overlay-trigger-longpress.test.js.map +2 -2
- package/test/overlay-trigger-sync.test.js +3 -1
- package/test/overlay-trigger-sync.test.js.map +2 -2
- package/test/overlay-trigger.test.js +3 -1
- package/test/overlay-trigger.test.js.map +2 -2
- package/test/overlay-update.test.js +4 -4
- package/test/overlay-update.test.js.map +2 -2
- package/test/overlay.test.js +154 -100
- package/test/overlay.test.js.map +2 -2
- package/sp-overlay.d.ts +0 -6
- package/sp-overlay.dev.js +0 -4
- package/sp-overlay.dev.js.map +0 -7
- package/sp-overlay.js +0 -2
- package/src/Overlay.d.ts +0 -22
- package/src/Overlay.dev.js +0 -65
- package/src/Overlay.dev.js.map +0 -7
- package/src/Overlay.js +0 -2
- package/src/Overlay.js.map +0 -7
- package/src/OverlayBase.d.ts +0 -93
- package/src/OverlayBase.dev.js +0 -564
- package/src/OverlayBase.dev.js.map +0 -7
- package/src/OverlayBase.js +0 -18
- package/src/OverlayBase.js.map +0 -7
- package/src/OverlayDialog.d.ts +0 -8
- package/src/OverlayDialog.dev.js +0 -43
- package/src/OverlayDialog.dev.js.map +0 -7
- package/src/OverlayDialog.js +0 -2
- package/src/OverlayDialog.js.map +0 -7
- package/src/OverlayNoPopover.d.ts +0 -8
- package/src/OverlayNoPopover.dev.js +0 -62
- package/src/OverlayNoPopover.dev.js.map +0 -7
- package/src/OverlayNoPopover.js +0 -2
- package/src/OverlayNoPopover.js.map +0 -7
- package/src/OverlayPopover.d.ts +0 -8
- package/src/OverlayPopover.dev.js +0 -81
- package/src/OverlayPopover.dev.js.map +0 -7
- package/src/OverlayPopover.js +0 -2
- package/src/OverlayPopover.js.map +0 -7
- package/src/OverlayStack.d.ts +0 -24
- package/src/OverlayStack.dev.js +0 -113
- package/src/OverlayStack.dev.js.map +0 -7
- package/src/OverlayStack.js +0 -2
- package/src/OverlayStack.js.map +0 -7
- package/src/PlacementController.d.ts +0 -35
- package/src/PlacementController.dev.js +0 -172
- package/src/PlacementController.dev.js.map +0 -7
- package/src/PlacementController.js +0 -2
- package/src/PlacementController.js.map +0 -7
- package/src/fullSizePlugin.d.ts +0 -12
- package/src/fullSizePlugin.dev.js +0 -39
- package/src/fullSizePlugin.dev.js.map +0 -7
- package/src/fullSizePlugin.js +0 -2
- package/src/fullSizePlugin.js.map +0 -7
- package/src/overlay-base.css.dev.js +0 -9
- package/src/overlay-base.css.dev.js.map +0 -7
- package/src/overlay-base.css.js +0 -6
- package/src/overlay-base.css.js.map +0 -7
- package/src/placement.d.ts +0 -21
- package/src/placement.dev.js +0 -111
- package/src/placement.dev.js.map +0 -7
- package/src/placement.js +0 -2
- package/src/placement.js.map +0 -7
- package/src/topLayerOverTransforms.d.ts +0 -22
- package/src/topLayerOverTransforms.dev.js +0 -161
- package/src/topLayerOverTransforms.dev.js.map +0 -7
- package/src/topLayerOverTransforms.js +0 -2
- package/src/topLayerOverTransforms.js.map +0 -7
- package/stories/overlay-element.stories.js +0 -229
- package/stories/overlay-element.stories.js.map +0 -7
- package/test/overlay-element.test-vrt.js +0 -5
- package/test/overlay-element.test.js +0 -759
- package/test/overlay-element.test.js.map +0 -7
- /package/src/{overlay-base.css.d.ts → active-overlay.css.d.ts} +0 -0
package/test/overlay.test.js
CHANGED
|
@@ -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
|
|
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
|
-
<
|
|
71
|
+
<div id="hover-1" class="hover-content">
|
|
89
72
|
Hover message
|
|
90
|
-
</
|
|
91
|
-
<
|
|
73
|
+
</div>
|
|
74
|
+
<div id="hover-2" class="hover-content">
|
|
92
75
|
Other hover message
|
|
93
|
-
</
|
|
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.
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
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(
|
|
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
|
-
|
|
143
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
153
|
+
expect(isVisible(outerPopover)).to.be.true;
|
|
160
154
|
Overlay.update();
|
|
161
|
-
expect(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
185
|
-
expect(
|
|
186
|
-
let opened = oneEvent(
|
|
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
|
-
|
|
196
|
-
|
|
197
|
-
|
|
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
|
-
|
|
207
|
-
|
|
208
|
-
|
|
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(
|
|
219
|
-
expect(
|
|
220
|
-
let opened = oneEvent(
|
|
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
|
-
|
|
230
|
-
|
|
231
|
-
|
|
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
|
-
|
|
241
|
-
expect(
|
|
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
|
|
245
|
-
<div>
|
|
246
|
-
<sp-
|
|
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(
|
|
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
|
|
269
|
-
|
|
276
|
+
await waitUntil(
|
|
277
|
+
() => !!dialog.parentElement && dialog.parentElement.tagName !== "ACTIVE-OVERLAY",
|
|
278
|
+
"content is returned"
|
|
279
|
+
);
|
|
270
280
|
});
|
|
271
|
-
it
|
|
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
|
-
<
|
|
285
|
+
<div class="content">
|
|
276
286
|
<input />
|
|
277
|
-
</
|
|
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
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
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
|
|
308
|
-
|
|
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("
|
|
361
|
+
const content = document.createElement("div");
|
|
350
362
|
content.textContent = textContent;
|
|
351
|
-
const opened = oneEvent(
|
|
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
|
-
|
|
357
|
-
|
|
358
|
-
|
|
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
|
-
|
|
377
|
+
activeOverlay = document.querySelector("active-overlay");
|
|
378
|
+
expect(activeOverlay).to.be.null;
|
|
362
379
|
content.remove();
|
|
363
380
|
});
|
|
364
381
|
});
|
|
365
|
-
describe
|
|
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
|
|
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>
|