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