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