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