@spectrum-web-components/overlay 1.0.2 → 1.0.3
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/LICENSE +201 -0
- package/custom-elements.json +189 -73
- package/package.json +8 -7
- package/src/Overlay.d.ts +348 -18
- package/src/Overlay.dev.js +271 -12
- package/src/Overlay.dev.js.map +2 -2
- package/src/Overlay.js +4 -4
- package/src/Overlay.js.map +3 -3
- package/src/PlacementController.d.ts +118 -1
- package/src/PlacementController.dev.js +75 -0
- package/src/PlacementController.dev.js.map +2 -2
- package/src/PlacementController.js.map +2 -2
- package/src/overlay.css.dev.js +1 -1
- package/src/overlay.css.dev.js.map +1 -1
- package/src/overlay.css.js +1 -1
- package/src/overlay.css.js.map +1 -1
- package/stories/index.js +48 -0
- package/stories/index.js.map +7 -0
- package/stories/overlay-directive.stories.js +324 -0
- package/stories/overlay-directive.stories.js.map +7 -0
- package/stories/overlay-element.stories.js +675 -0
- package/stories/overlay-element.stories.js.map +7 -0
- package/stories/overlay-story-components.js +338 -0
- package/stories/overlay-story-components.js.map +7 -0
- package/stories/overlay.stories.js +1397 -0
- package/stories/overlay.stories.js.map +7 -0
- package/test/benchmark/basic-test.js +40 -0
- package/test/benchmark/basic-test.js.map +7 -0
- package/test/benchmark/directive-test.js +43 -0
- package/test/benchmark/directive-test.js.map +7 -0
- package/test/benchmark/element-test.js +40 -0
- package/test/benchmark/element-test.js.map +7 -0
- package/test/benchmark/lazy-test.js +47 -0
- package/test/benchmark/lazy-test.js.map +7 -0
- package/test/index.js +605 -0
- package/test/index.js.map +7 -0
- package/test/overlay-directive.test-vrt.js +5 -0
- package/test/overlay-directive.test-vrt.js.map +7 -0
- package/test/overlay-directive.test.js +162 -0
- package/test/overlay-directive.test.js.map +7 -0
- package/test/overlay-element.test-vrt.js +5 -0
- package/test/overlay-element.test-vrt.js.map +7 -0
- package/test/overlay-element.test.js +934 -0
- package/test/overlay-element.test.js.map +7 -0
- package/test/overlay-lifecycle.test.js +139 -0
- package/test/overlay-lifecycle.test.js.map +7 -0
- package/test/overlay-memory.test.js +10 -0
- package/test/overlay-memory.test.js.map +7 -0
- package/test/overlay-timer.test.js +118 -0
- package/test/overlay-timer.test.js.map +7 -0
- package/test/overlay-trigger-click.test.js +164 -0
- package/test/overlay-trigger-click.test.js.map +7 -0
- package/test/overlay-trigger-directive.test.js +75 -0
- package/test/overlay-trigger-directive.test.js.map +7 -0
- package/test/overlay-trigger-extended.test.js +235 -0
- package/test/overlay-trigger-extended.test.js.map +7 -0
- package/test/overlay-trigger-hover-click.test.js +225 -0
- package/test/overlay-trigger-hover-click.test.js.map +7 -0
- package/test/overlay-trigger-hover.test.js +308 -0
- package/test/overlay-trigger-hover.test.js.map +7 -0
- package/test/overlay-trigger-longpress.test.js +549 -0
- package/test/overlay-trigger-longpress.test.js.map +7 -0
- package/test/overlay-trigger-sync.test.js +5 -0
- package/test/overlay-trigger-sync.test.js.map +7 -0
- package/test/overlay-trigger.test.js +5 -0
- package/test/overlay-trigger.test.js.map +7 -0
- package/test/overlay-update.test.js +28 -0
- package/test/overlay-update.test.js.map +7 -0
- package/test/overlay-v1.test.js +569 -0
- package/test/overlay-v1.test.js.map +7 -0
- package/test/overlay.test-vrt.js +5 -0
- package/test/overlay.test-vrt.js.map +7 -0
- package/test/overlay.test.js +776 -0
- package/test/overlay.test.js.map +7 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import {
|
|
3
|
+
elementUpdated,
|
|
4
|
+
expect,
|
|
5
|
+
html,
|
|
6
|
+
nextFrame,
|
|
7
|
+
oneEvent,
|
|
8
|
+
waitUntil
|
|
9
|
+
} from "@open-wc/testing";
|
|
10
|
+
import "@spectrum-web-components/popover/sp-popover.js";
|
|
11
|
+
import "@spectrum-web-components/tooltip/sp-tooltip.js";
|
|
12
|
+
import "@spectrum-web-components/button/sp-button.js";
|
|
13
|
+
import "@spectrum-web-components/action-button/sp-action-button.js";
|
|
14
|
+
import "@spectrum-web-components/icons-workflow/icons/sp-icon-magnify.js";
|
|
15
|
+
import "@spectrum-web-components/overlay/overlay-trigger.js";
|
|
16
|
+
import { spy } from "sinon";
|
|
17
|
+
import { fixture, isOnTopLayer } from "../../../test/testing-helpers.js";
|
|
18
|
+
describe("Overlay Trigger - Click", () => {
|
|
19
|
+
it("displays `click` declaratively", async () => {
|
|
20
|
+
const openedSpy = spy();
|
|
21
|
+
const closedSpy = spy();
|
|
22
|
+
const el = await fixture(
|
|
23
|
+
(() => html`
|
|
24
|
+
<overlay-trigger
|
|
25
|
+
placement="right-start"
|
|
26
|
+
open="click"
|
|
27
|
+
@sp-opened=${() => openedSpy()}
|
|
28
|
+
@sp-closed=${() => closedSpy()}
|
|
29
|
+
>
|
|
30
|
+
<sp-action-button slot="trigger">
|
|
31
|
+
<sp-icon-magnify slot="icon"></sp-icon-magnify>
|
|
32
|
+
</sp-action-button>
|
|
33
|
+
<sp-popover slot="click-content" tip></sp-popover>
|
|
34
|
+
</overlay-trigger>
|
|
35
|
+
`)()
|
|
36
|
+
);
|
|
37
|
+
await waitUntil(
|
|
38
|
+
() => {
|
|
39
|
+
return openedSpy.calledOnce;
|
|
40
|
+
},
|
|
41
|
+
"click content projected to overlay",
|
|
42
|
+
{ timeout: 2e3 }
|
|
43
|
+
);
|
|
44
|
+
await nextFrame();
|
|
45
|
+
el.removeAttribute("open");
|
|
46
|
+
await elementUpdated(el);
|
|
47
|
+
await waitUntil(() => closedSpy.calledOnce, "click content returned", {
|
|
48
|
+
timeout: 2e3
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
describe("closes on scroll", () => {
|
|
52
|
+
afterEach(async () => {
|
|
53
|
+
if (document.scrollingElement) {
|
|
54
|
+
document.scrollingElement.scrollTop = 0;
|
|
55
|
+
}
|
|
56
|
+
await waitUntil(() => {
|
|
57
|
+
if (document.scrollingElement) {
|
|
58
|
+
return document.scrollingElement.scrollTop === 0;
|
|
59
|
+
}
|
|
60
|
+
return true;
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
["click", "replace", "inline"].map(
|
|
64
|
+
(interaction) => {
|
|
65
|
+
it(`closes "${interaction}" overlay on scroll`, async function() {
|
|
66
|
+
const el = await fixture(html`
|
|
67
|
+
<overlay-trigger
|
|
68
|
+
placement="right"
|
|
69
|
+
type=${interaction}
|
|
70
|
+
content="click"
|
|
71
|
+
>
|
|
72
|
+
<sp-action-button
|
|
73
|
+
slot="trigger"
|
|
74
|
+
style="margin: 50vh 0 100vh;"
|
|
75
|
+
>
|
|
76
|
+
<sp-icon-magnify slot="icon"></sp-icon-magnify>
|
|
77
|
+
</sp-action-button>
|
|
78
|
+
<sp-popover slot="click-content" tip>
|
|
79
|
+
Content
|
|
80
|
+
</sp-popover>
|
|
81
|
+
</overlay-trigger>
|
|
82
|
+
`);
|
|
83
|
+
await nextFrame();
|
|
84
|
+
const popover = el.querySelector("sp-popover");
|
|
85
|
+
expect(el.open).to.be.undefined;
|
|
86
|
+
await elementUpdated(el);
|
|
87
|
+
const opened = oneEvent(el, "sp-opened");
|
|
88
|
+
const trigger = el.querySelector(
|
|
89
|
+
"sp-action-button"
|
|
90
|
+
);
|
|
91
|
+
trigger.click();
|
|
92
|
+
await opened;
|
|
93
|
+
expect(el.open).to.equal("click");
|
|
94
|
+
expect(await isOnTopLayer(popover)).to.be.true;
|
|
95
|
+
const closed = oneEvent(el, "sp-closed");
|
|
96
|
+
if (document.scrollingElement) {
|
|
97
|
+
document.scrollingElement.scrollTop = 100;
|
|
98
|
+
}
|
|
99
|
+
await closed;
|
|
100
|
+
expect(el.open).to.be.undefined;
|
|
101
|
+
expect(await isOnTopLayer(popover)).to.be.false;
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
);
|
|
105
|
+
});
|
|
106
|
+
it("opens a second time", async () => {
|
|
107
|
+
const openedSpy = spy();
|
|
108
|
+
const closedSpy = spy();
|
|
109
|
+
const el = await fixture(html`
|
|
110
|
+
<overlay-trigger
|
|
111
|
+
placement="right-start"
|
|
112
|
+
type="modal"
|
|
113
|
+
open="click"
|
|
114
|
+
@sp-opened=${() => openedSpy()}
|
|
115
|
+
@sp-closed=${() => closedSpy()}
|
|
116
|
+
>
|
|
117
|
+
<sp-action-button slot="trigger">
|
|
118
|
+
<sp-icon-magnify slot="icon"></sp-icon-magnify>
|
|
119
|
+
</sp-action-button>
|
|
120
|
+
<sp-popover slot="click-content" tip></sp-popover>
|
|
121
|
+
</overlay-trigger>
|
|
122
|
+
`);
|
|
123
|
+
await elementUpdated(el);
|
|
124
|
+
const trigger = el.querySelector("[slot=trigger]");
|
|
125
|
+
await waitUntil(
|
|
126
|
+
() => openedSpy.calledOnce,
|
|
127
|
+
"click content projected to overlay",
|
|
128
|
+
{ timeout: 2e3 }
|
|
129
|
+
);
|
|
130
|
+
expect(el.open).to.equal("click");
|
|
131
|
+
el.removeAttribute("open");
|
|
132
|
+
await elementUpdated(el);
|
|
133
|
+
await waitUntil(() => closedSpy.calledOnce, "click content returned", {
|
|
134
|
+
timeout: 2e3
|
|
135
|
+
});
|
|
136
|
+
expect(el.open).to.be.null;
|
|
137
|
+
trigger.click();
|
|
138
|
+
await waitUntil(
|
|
139
|
+
() => openedSpy.callCount === 2,
|
|
140
|
+
"click content projected to overlay, again",
|
|
141
|
+
{ timeout: 2e3 }
|
|
142
|
+
);
|
|
143
|
+
expect(el.open).to.equal("click");
|
|
144
|
+
});
|
|
145
|
+
it("opens with a delay on click", async () => {
|
|
146
|
+
const el = await fixture(html`
|
|
147
|
+
<overlay-trigger placement="right-start">
|
|
148
|
+
<sp-button slot="trigger" variant="primary"></sp-button>
|
|
149
|
+
<sp-tooltip
|
|
150
|
+
slot="click-content"
|
|
151
|
+
id="content"
|
|
152
|
+
delayed
|
|
153
|
+
></sp-tooltip>
|
|
154
|
+
</overlay-trigger>
|
|
155
|
+
`);
|
|
156
|
+
const start = performance.now();
|
|
157
|
+
const opened = oneEvent(el, "sp-opened");
|
|
158
|
+
el.setAttribute("open", "click");
|
|
159
|
+
await opened;
|
|
160
|
+
const end = performance.now();
|
|
161
|
+
expect(end - start).to.be.greaterThan(1e3);
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
//# sourceMappingURL=overlay-trigger-click.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["overlay-trigger-click.test.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport {\n elementUpdated,\n expect,\n html,\n nextFrame,\n oneEvent,\n waitUntil,\n} from '@open-wc/testing';\nimport type { Popover } from '@spectrum-web-components/popover';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport '@spectrum-web-components/tooltip/sp-tooltip.js';\n\nimport '@spectrum-web-components/button/sp-button.js';\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-magnify.js';\nimport {\n OverlayTrigger,\n TriggerInteractionsV1,\n} from '@spectrum-web-components/overlay';\nimport '@spectrum-web-components/overlay/overlay-trigger.js';\nimport { spy } from 'sinon';\nimport { ActionButton } from '@spectrum-web-components/action-button';\nimport { fixture, isOnTopLayer } from '../../../test/testing-helpers.js';\n\ndescribe('Overlay Trigger - Click', () => {\n it('displays `click` declaratively', async () => {\n const openedSpy = spy();\n const closedSpy = spy();\n const el = await fixture<OverlayTrigger>(\n (() => html`\n <overlay-trigger\n placement=\"right-start\"\n open=\"click\"\n @sp-opened=${() => openedSpy()}\n @sp-closed=${() => closedSpy()}\n >\n <sp-action-button slot=\"trigger\">\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-popover slot=\"click-content\" tip></sp-popover>\n </overlay-trigger>\n `)()\n );\n\n await waitUntil(\n () => {\n return openedSpy.calledOnce;\n },\n 'click content projected to overlay',\n { timeout: 2000 }\n );\n\n await nextFrame();\n\n el.removeAttribute('open');\n await elementUpdated(el);\n\n await waitUntil(() => closedSpy.calledOnce, 'click content returned', {\n timeout: 2000,\n });\n });\n describe('closes on scroll', () => {\n afterEach(async () => {\n if (document.scrollingElement) {\n document.scrollingElement.scrollTop = 0;\n }\n await waitUntil(() => {\n if (document.scrollingElement) {\n return document.scrollingElement.scrollTop === 0;\n }\n return true;\n });\n });\n (['click', 'replace', 'inline'] as TriggerInteractionsV1[]).map(\n (interaction) => {\n it(`closes \"${interaction}\" overlay on scroll`, async function () {\n const el = await fixture<OverlayTrigger>(html`\n <overlay-trigger\n placement=\"right\"\n type=${interaction}\n content=\"click\"\n >\n <sp-action-button\n slot=\"trigger\"\n style=\"margin: 50vh 0 100vh;\"\n >\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-popover slot=\"click-content\" tip>\n Content\n </sp-popover>\n </overlay-trigger>\n `);\n await nextFrame();\n const popover = el.querySelector('sp-popover') as Popover;\n expect(el.open).to.be.undefined;\n\n await elementUpdated(el);\n const opened = oneEvent(el, 'sp-opened');\n const trigger = el.querySelector(\n 'sp-action-button'\n ) as HTMLElement;\n trigger.click();\n\n await opened;\n\n expect(el.open).to.equal('click');\n\n expect(await isOnTopLayer(popover)).to.be.true;\n\n const closed = oneEvent(el, 'sp-closed');\n if (document.scrollingElement) {\n document.scrollingElement.scrollTop = 100;\n }\n\n await closed;\n\n expect(el.open).to.be.undefined;\n\n expect(await isOnTopLayer(popover)).to.be.false;\n });\n }\n );\n });\n it('opens a second time', async () => {\n const openedSpy = spy();\n const closedSpy = spy();\n const el = await fixture<OverlayTrigger>(html`\n <overlay-trigger\n placement=\"right-start\"\n type=\"modal\"\n open=\"click\"\n @sp-opened=${() => openedSpy()}\n @sp-closed=${() => closedSpy()}\n >\n <sp-action-button slot=\"trigger\">\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-popover slot=\"click-content\" tip></sp-popover>\n </overlay-trigger>\n `);\n await elementUpdated(el);\n const trigger = el.querySelector('[slot=trigger]') as ActionButton;\n\n await waitUntil(\n () => openedSpy.calledOnce,\n 'click content projected to overlay',\n { timeout: 2000 }\n );\n expect(el.open).to.equal('click');\n\n el.removeAttribute('open');\n await elementUpdated(el);\n\n await waitUntil(() => closedSpy.calledOnce, 'click content returned', {\n timeout: 2000,\n });\n\n expect(el.open).to.be.null;\n\n trigger.click();\n await waitUntil(\n () => openedSpy.callCount === 2,\n 'click content projected to overlay, again',\n { timeout: 2000 }\n );\n expect(el.open).to.equal('click');\n });\n\n it('opens with a delay on click', async () => {\n const el = await fixture<OverlayTrigger>(html`\n <overlay-trigger placement=\"right-start\">\n <sp-button slot=\"trigger\" variant=\"primary\"></sp-button>\n <sp-tooltip\n slot=\"click-content\"\n id=\"content\"\n delayed\n ></sp-tooltip>\n </overlay-trigger>\n `);\n const start = performance.now();\n const opened = oneEvent(el, 'sp-opened');\n\n el.setAttribute('open', 'click');\n await opened;\n\n const end = performance.now();\n expect(end - start).to.be.greaterThan(1000);\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import { elementUpdated, expect, fixture, oneEvent } from "@open-wc/testing";
|
|
3
|
+
import { html } from "@spectrum-web-components/base";
|
|
4
|
+
import { stub } from "sinon";
|
|
5
|
+
import { trigger } from "@spectrum-web-components/overlay/src/overlay-trigger-directive.js";
|
|
6
|
+
import "@spectrum-web-components/button/sp-button.js";
|
|
7
|
+
import "@spectrum-web-components/popover/sp-popover.js";
|
|
8
|
+
import "@spectrum-web-components/dialog/sp-dialog.js";
|
|
9
|
+
import "@spectrum-web-components/slider/sp-slider.js";
|
|
10
|
+
import "@spectrum-web-components/tooltip/sp-tooltip.js";
|
|
11
|
+
describe("Overlay trigger directive", () => {
|
|
12
|
+
describe("dev mode", () => {
|
|
13
|
+
let consoleWarnStub;
|
|
14
|
+
before(() => {
|
|
15
|
+
window.__swc.verbose = true;
|
|
16
|
+
consoleWarnStub = stub(console, "warn");
|
|
17
|
+
});
|
|
18
|
+
afterEach(() => {
|
|
19
|
+
consoleWarnStub.resetHistory();
|
|
20
|
+
});
|
|
21
|
+
after(() => {
|
|
22
|
+
window.__swc.verbose = false;
|
|
23
|
+
consoleWarnStub.restore();
|
|
24
|
+
});
|
|
25
|
+
it("warns that the trigger directive is experimental", async () => {
|
|
26
|
+
const popover = () => html`
|
|
27
|
+
<sp-popover>
|
|
28
|
+
<sp-dialog no-divider>
|
|
29
|
+
<sp-slider
|
|
30
|
+
value="5"
|
|
31
|
+
step="0.5"
|
|
32
|
+
min="0"
|
|
33
|
+
max="20"
|
|
34
|
+
label="Awesomeness"
|
|
35
|
+
></sp-slider>
|
|
36
|
+
<div id="styled-div">
|
|
37
|
+
The background of this div should be blue
|
|
38
|
+
</div>
|
|
39
|
+
<sp-button>
|
|
40
|
+
Press Me
|
|
41
|
+
<sp-tooltip self-managed delayed>
|
|
42
|
+
Click to open another popover.
|
|
43
|
+
</sp-tooltip>
|
|
44
|
+
</sp-button>
|
|
45
|
+
</sp-dialog>
|
|
46
|
+
</sp-popover>
|
|
47
|
+
`;
|
|
48
|
+
const el = await fixture(html`
|
|
49
|
+
<sp-button ${trigger(popover, { triggerInteraction: "click" })}>
|
|
50
|
+
Trigger
|
|
51
|
+
</sp-button>
|
|
52
|
+
`);
|
|
53
|
+
await elementUpdated(el);
|
|
54
|
+
const opened = oneEvent(el, "sp-opened");
|
|
55
|
+
el.click();
|
|
56
|
+
await opened;
|
|
57
|
+
expect(consoleWarnStub.called).to.be.true;
|
|
58
|
+
const spyCall = consoleWarnStub.getCall(0);
|
|
59
|
+
expect(
|
|
60
|
+
spyCall.args.at(0).includes(
|
|
61
|
+
"The Overlay Trigger Directive is experimental"
|
|
62
|
+
),
|
|
63
|
+
"Overlay Trigger Directive-centric message"
|
|
64
|
+
).to.be.true;
|
|
65
|
+
expect(spyCall.args.at(-1), "confirm `data` shape").to.deep.equal({
|
|
66
|
+
data: {
|
|
67
|
+
localName: "base",
|
|
68
|
+
type: "api",
|
|
69
|
+
level: "high"
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
//# sourceMappingURL=overlay-trigger-directive.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["overlay-trigger-directive.test.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport { elementUpdated, expect, fixture, oneEvent } from '@open-wc/testing';\nimport { html, TemplateResult } from '@spectrum-web-components/base';\nimport { stub } from 'sinon';\nimport { trigger } from '@spectrum-web-components/overlay/src/overlay-trigger-directive.js';\nimport '@spectrum-web-components/button/sp-button.js';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport '@spectrum-web-components/dialog/sp-dialog.js';\nimport '@spectrum-web-components/slider/sp-slider.js';\nimport '@spectrum-web-components/tooltip/sp-tooltip.js';\nimport { Overlay } from '@spectrum-web-components/overlay/src/Overlay.js';\n\ndescribe('Overlay trigger directive', () => {\n describe('dev mode', () => {\n let consoleWarnStub!: ReturnType<typeof stub>;\n before(() => {\n window.__swc.verbose = true;\n consoleWarnStub = stub(console, 'warn');\n });\n afterEach(() => {\n consoleWarnStub.resetHistory();\n });\n after(() => {\n window.__swc.verbose = false;\n consoleWarnStub.restore();\n });\n\n it('warns that the trigger directive is experimental', async () => {\n const popover = (): TemplateResult => html`\n <sp-popover>\n <sp-dialog no-divider>\n <sp-slider\n value=\"5\"\n step=\"0.5\"\n min=\"0\"\n max=\"20\"\n label=\"Awesomeness\"\n ></sp-slider>\n <div id=\"styled-div\">\n The background of this div should be blue\n </div>\n <sp-button>\n Press Me\n <sp-tooltip self-managed delayed>\n Click to open another popover.\n </sp-tooltip>\n </sp-button>\n </sp-dialog>\n </sp-popover>\n `;\n const el = await fixture<Overlay>(html`\n <sp-button ${trigger(popover, { triggerInteraction: 'click' })}>\n Trigger\n </sp-button>\n `);\n\n await elementUpdated(el);\n\n const opened = oneEvent(el, 'sp-opened');\n el.click();\n await opened;\n\n expect(consoleWarnStub.called).to.be.true;\n const spyCall = consoleWarnStub.getCall(0);\n expect(\n (spyCall.args.at(0) as string).includes(\n 'The Overlay Trigger Directive is experimental'\n ),\n 'Overlay Trigger Directive-centric message'\n ).to.be.true;\n expect(spyCall.args.at(-1), 'confirm `data` shape').to.deep.equal({\n data: {\n localName: 'base',\n type: 'api',\n level: 'high',\n },\n });\n });\n });\n});\n"],
|
|
5
|
+
"mappings": ";AAYA,SAAS,gBAAgB,QAAQ,SAAS,gBAAgB;AAC1D,SAAS,YAA4B;AACrC,SAAS,YAAY;AACrB,SAAS,eAAe;AACxB,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AAGP,SAAS,6BAA6B,MAAM;AACxC,WAAS,YAAY,MAAM;AACvB,QAAI;AACJ,WAAO,MAAM;AACT,aAAO,MAAM,UAAU;AACvB,wBAAkB,KAAK,SAAS,MAAM;AAAA,IAC1C,CAAC;AACD,cAAU,MAAM;AACZ,sBAAgB,aAAa;AAAA,IACjC,CAAC;AACD,UAAM,MAAM;AACR,aAAO,MAAM,UAAU;AACvB,sBAAgB,QAAQ;AAAA,IAC5B,CAAC;AAED,OAAG,oDAAoD,YAAY;AAC/D,YAAM,UAAU,MAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBtC,YAAM,KAAK,MAAM,QAAiB;AAAA,6BACjB,QAAQ,SAAS,EAAE,oBAAoB,QAAQ,CAAC,CAAC;AAAA;AAAA;AAAA,aAGjE;AAED,YAAM,eAAe,EAAE;AAEvB,YAAM,SAAS,SAAS,IAAI,WAAW;AACvC,SAAG,MAAM;AACT,YAAM;AAEN,aAAO,gBAAgB,MAAM,EAAE,GAAG,GAAG;AACrC,YAAM,UAAU,gBAAgB,QAAQ,CAAC;AACzC;AAAA,QACK,QAAQ,KAAK,GAAG,CAAC,EAAa;AAAA,UAC3B;AAAA,QACJ;AAAA,QACA;AAAA,MACJ,EAAE,GAAG,GAAG;AACR,aAAO,QAAQ,KAAK,GAAG,EAAE,GAAG,sBAAsB,EAAE,GAAG,KAAK,MAAM;AAAA,QAC9D,MAAM;AAAA,UACF,WAAW;AAAA,UACX,MAAM;AAAA,UACN,OAAO;AAAA,QACX;AAAA,MACJ,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACL,CAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import { expect, html, nextFrame, oneEvent, waitUntil } from "@open-wc/testing";
|
|
3
|
+
import "@spectrum-web-components/overlay/overlay-trigger.js";
|
|
4
|
+
import "@spectrum-web-components/button/sp-button.js";
|
|
5
|
+
import "@spectrum-web-components/popover/sp-popover.js";
|
|
6
|
+
import "@spectrum-web-components/textfield/sp-textfield.js";
|
|
7
|
+
import "@spectrum-web-components/dialog/sp-dialog.js";
|
|
8
|
+
import { sendMouse } from "../../../test/plugins/browser.js";
|
|
9
|
+
import { fixture } from "../../../test/testing-helpers.js";
|
|
10
|
+
import { sendKeys } from "@web/test-runner-commands";
|
|
11
|
+
const initTest = async (styles = html``) => {
|
|
12
|
+
const test = await fixture(
|
|
13
|
+
html`
|
|
14
|
+
<div class="container">
|
|
15
|
+
<style>
|
|
16
|
+
.container {
|
|
17
|
+
display: flex;
|
|
18
|
+
align-items: center;
|
|
19
|
+
justify-content: center;
|
|
20
|
+
flex-direction: column;
|
|
21
|
+
}
|
|
22
|
+
</style>
|
|
23
|
+
${styles}
|
|
24
|
+
<overlay-trigger type="modal" id="trigger" placement="top">
|
|
25
|
+
<sp-button
|
|
26
|
+
id="outer-button"
|
|
27
|
+
variant="primary"
|
|
28
|
+
slot="trigger"
|
|
29
|
+
>
|
|
30
|
+
Show Popover
|
|
31
|
+
</sp-button>
|
|
32
|
+
<sp-popover
|
|
33
|
+
id="outer-popover"
|
|
34
|
+
slot="click-content"
|
|
35
|
+
direction="bottom"
|
|
36
|
+
tip
|
|
37
|
+
tabindex="0"
|
|
38
|
+
placement="top"
|
|
39
|
+
>
|
|
40
|
+
<sp-dialog no-divider>
|
|
41
|
+
This is the overlay content.
|
|
42
|
+
</sp-dialog>
|
|
43
|
+
</sp-popover>
|
|
44
|
+
</overlay-trigger>
|
|
45
|
+
</div>
|
|
46
|
+
`
|
|
47
|
+
);
|
|
48
|
+
await nextFrame();
|
|
49
|
+
await nextFrame();
|
|
50
|
+
await nextFrame();
|
|
51
|
+
await nextFrame();
|
|
52
|
+
await nextFrame();
|
|
53
|
+
await nextFrame();
|
|
54
|
+
return {
|
|
55
|
+
overlayTrigger: test.querySelector("overlay-trigger"),
|
|
56
|
+
button: test.querySelector("sp-button"),
|
|
57
|
+
popover: test.querySelector("sp-popover")
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
describe("Overlay Trigger - extended", () => {
|
|
61
|
+
let overlayTrigger;
|
|
62
|
+
let button;
|
|
63
|
+
let popover;
|
|
64
|
+
afterEach(async () => {
|
|
65
|
+
if (overlayTrigger.open) {
|
|
66
|
+
const closed = oneEvent(overlayTrigger, "sp-closed");
|
|
67
|
+
overlayTrigger.open = void 0;
|
|
68
|
+
await closed;
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
it("manages `placement` on open", async () => {
|
|
72
|
+
({ overlayTrigger, button, popover } = await initTest());
|
|
73
|
+
expect(popover.placement).to.equal("top");
|
|
74
|
+
const open = oneEvent(overlayTrigger, "sp-opened");
|
|
75
|
+
button.click();
|
|
76
|
+
await open;
|
|
77
|
+
expect(popover.placement).to.equal("bottom");
|
|
78
|
+
const close = oneEvent(overlayTrigger, "sp-closed");
|
|
79
|
+
overlayTrigger.open = void 0;
|
|
80
|
+
await close;
|
|
81
|
+
expect(popover.placement).to.equal("top");
|
|
82
|
+
});
|
|
83
|
+
it("manages `placement` on scroll", async () => {
|
|
84
|
+
({ overlayTrigger, button, popover } = await initTest(html`
|
|
85
|
+
<style>
|
|
86
|
+
sp-button {
|
|
87
|
+
margin: 100vh 0;
|
|
88
|
+
transform: translateY(-100%);
|
|
89
|
+
}
|
|
90
|
+
</style>
|
|
91
|
+
`));
|
|
92
|
+
expect(popover.placement).to.equal("top");
|
|
93
|
+
const open = oneEvent(overlayTrigger, "sp-opened");
|
|
94
|
+
button.click();
|
|
95
|
+
await open;
|
|
96
|
+
expect(popover.placement).to.equal("top");
|
|
97
|
+
button.scrollIntoView({
|
|
98
|
+
behavior: "instant",
|
|
99
|
+
block: "start"
|
|
100
|
+
});
|
|
101
|
+
await nextFrame();
|
|
102
|
+
await nextFrame();
|
|
103
|
+
await nextFrame();
|
|
104
|
+
await nextFrame();
|
|
105
|
+
expect(popover.placement).to.equal("bottom");
|
|
106
|
+
});
|
|
107
|
+
it("occludes content behind the overlay", async () => {
|
|
108
|
+
({ overlayTrigger, button, popover } = await initTest());
|
|
109
|
+
const textfield = document.createElement("sp-textfield");
|
|
110
|
+
overlayTrigger.insertAdjacentElement("afterend", textfield);
|
|
111
|
+
const textfieldRect = textfield.getBoundingClientRect();
|
|
112
|
+
expect(document.activeElement === textfield).to.be.false;
|
|
113
|
+
await sendMouse({
|
|
114
|
+
steps: [
|
|
115
|
+
{
|
|
116
|
+
type: "click",
|
|
117
|
+
position: [textfieldRect.left + 5, textfieldRect.top + 5]
|
|
118
|
+
}
|
|
119
|
+
]
|
|
120
|
+
});
|
|
121
|
+
expect(
|
|
122
|
+
document.activeElement === textfield,
|
|
123
|
+
"clicking focuses the Textfield"
|
|
124
|
+
).to.be.true;
|
|
125
|
+
expect(popover.placement).to.equal("top");
|
|
126
|
+
const open = oneEvent(overlayTrigger, "sp-opened");
|
|
127
|
+
await sendKeys({
|
|
128
|
+
press: "Shift+Tab"
|
|
129
|
+
});
|
|
130
|
+
expect(document.activeElement === button, "button focused").to.be.true;
|
|
131
|
+
await sendKeys({
|
|
132
|
+
press: "Enter"
|
|
133
|
+
});
|
|
134
|
+
await open;
|
|
135
|
+
expect(overlayTrigger.type).to.equal("modal");
|
|
136
|
+
expect(overlayTrigger.open).to.equal("click");
|
|
137
|
+
expect(popover.placement).to.equal("bottom");
|
|
138
|
+
const close = oneEvent(overlayTrigger, "sp-closed");
|
|
139
|
+
await sendMouse({
|
|
140
|
+
steps: [
|
|
141
|
+
{
|
|
142
|
+
type: "click",
|
|
143
|
+
position: [textfieldRect.left + 5, textfieldRect.top + 5]
|
|
144
|
+
}
|
|
145
|
+
]
|
|
146
|
+
});
|
|
147
|
+
await close;
|
|
148
|
+
expect(overlayTrigger.open).to.be.undefined;
|
|
149
|
+
expect(
|
|
150
|
+
document.activeElement === textfield,
|
|
151
|
+
"closing does not focus the Textfield"
|
|
152
|
+
).to.be.false;
|
|
153
|
+
await sendMouse({
|
|
154
|
+
steps: [
|
|
155
|
+
{
|
|
156
|
+
type: "click",
|
|
157
|
+
position: [
|
|
158
|
+
textfieldRect.left + textfieldRect.width / 2,
|
|
159
|
+
textfieldRect.top + textfieldRect.height / 2
|
|
160
|
+
]
|
|
161
|
+
}
|
|
162
|
+
]
|
|
163
|
+
});
|
|
164
|
+
expect(
|
|
165
|
+
document.activeElement === textfield,
|
|
166
|
+
"the Textfield is focused again"
|
|
167
|
+
).to.be.true;
|
|
168
|
+
});
|
|
169
|
+
xit("occludes wheel interactions behind the overlay", async () => {
|
|
170
|
+
({ overlayTrigger, button, popover } = await initTest());
|
|
171
|
+
const scrollingArea = document.createElement("div");
|
|
172
|
+
Object.assign(scrollingArea.style, {
|
|
173
|
+
width: "100px",
|
|
174
|
+
height: "100px",
|
|
175
|
+
overflow: "auto"
|
|
176
|
+
});
|
|
177
|
+
const content = Array(100).fill(
|
|
178
|
+
"This is content within my box that will scroll."
|
|
179
|
+
);
|
|
180
|
+
scrollingArea.textContent = content.join(" ");
|
|
181
|
+
document.body.append(scrollingArea);
|
|
182
|
+
await nextFrame();
|
|
183
|
+
const boundingRect = scrollingArea.getBoundingClientRect();
|
|
184
|
+
expect(scrollingArea.scrollTop).to.equal(0);
|
|
185
|
+
const distance = 1;
|
|
186
|
+
await sendMouse({
|
|
187
|
+
steps: [
|
|
188
|
+
{
|
|
189
|
+
type: "move",
|
|
190
|
+
position: [
|
|
191
|
+
boundingRect.left + boundingRect.width / 2,
|
|
192
|
+
boundingRect.top + boundingRect.height / 2
|
|
193
|
+
]
|
|
194
|
+
}
|
|
195
|
+
]
|
|
196
|
+
});
|
|
197
|
+
await sendMouse({
|
|
198
|
+
steps: [
|
|
199
|
+
{
|
|
200
|
+
type: "wheel",
|
|
201
|
+
position: [0, distance]
|
|
202
|
+
}
|
|
203
|
+
]
|
|
204
|
+
});
|
|
205
|
+
await waitUntil(
|
|
206
|
+
() => scrollingArea.scrollTop === distance,
|
|
207
|
+
`scroll went to ${distance}`
|
|
208
|
+
);
|
|
209
|
+
expect(scrollingArea.scrollTop).to.equal(distance);
|
|
210
|
+
expect(popover.placement).to.equal("top");
|
|
211
|
+
const open = oneEvent(overlayTrigger, "sp-opened");
|
|
212
|
+
button.click();
|
|
213
|
+
await open;
|
|
214
|
+
expect(overlayTrigger.open).to.equal("click");
|
|
215
|
+
expect(popover.placement).to.equal("bottom");
|
|
216
|
+
expect(scrollingArea.scrollTop).to.equal(distance);
|
|
217
|
+
await sendMouse({
|
|
218
|
+
steps: [
|
|
219
|
+
{
|
|
220
|
+
type: "wheel",
|
|
221
|
+
position: [0, -distance]
|
|
222
|
+
}
|
|
223
|
+
]
|
|
224
|
+
});
|
|
225
|
+
await nextFrame();
|
|
226
|
+
await nextFrame();
|
|
227
|
+
await nextFrame();
|
|
228
|
+
expect(
|
|
229
|
+
scrollingArea.scrollTop,
|
|
230
|
+
`scrollTop should be ${distance}.`
|
|
231
|
+
).to.equal(distance);
|
|
232
|
+
scrollingArea.remove();
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
//# sourceMappingURL=overlay-trigger-extended.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["overlay-trigger-extended.test.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport { expect, html, nextFrame, oneEvent, waitUntil } from '@open-wc/testing';\n\nimport '@spectrum-web-components/overlay/overlay-trigger.js';\nimport { OverlayTrigger } from '@spectrum-web-components/overlay';\nimport '@spectrum-web-components/button/sp-button.js';\nimport { Button } from '@spectrum-web-components/button';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport { Popover } from '@spectrum-web-components/popover';\nimport '@spectrum-web-components/textfield/sp-textfield.js';\nimport '@spectrum-web-components/dialog/sp-dialog.js';\nimport { sendMouse } from '../../../test/plugins/browser.js';\nimport { fixture } from '../../../test/testing-helpers.js';\nimport { sendKeys } from '@web/test-runner-commands';\n\nconst initTest = async (\n styles = html``\n): Promise<{\n overlayTrigger: OverlayTrigger;\n button: Button;\n popover: Popover;\n}> => {\n const test = await fixture<HTMLDivElement>(\n html`\n <div class=\"container\">\n <style>\n .container {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n }\n </style>\n ${styles}\n <overlay-trigger type=\"modal\" id=\"trigger\" placement=\"top\">\n <sp-button\n id=\"outer-button\"\n variant=\"primary\"\n slot=\"trigger\"\n >\n Show Popover\n </sp-button>\n <sp-popover\n id=\"outer-popover\"\n slot=\"click-content\"\n direction=\"bottom\"\n tip\n tabindex=\"0\"\n placement=\"top\"\n >\n <sp-dialog no-divider>\n This is the overlay content.\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n </div>\n `\n );\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n return {\n overlayTrigger: test.querySelector('overlay-trigger') as OverlayTrigger,\n button: test.querySelector('sp-button') as Button,\n popover: test.querySelector('sp-popover') as Popover,\n };\n};\n\ndescribe('Overlay Trigger - extended', () => {\n let overlayTrigger!: OverlayTrigger;\n let button!: Button;\n let popover!: Popover;\n\n afterEach(async () => {\n if (overlayTrigger.open) {\n const closed = oneEvent(overlayTrigger, 'sp-closed');\n overlayTrigger.open = undefined;\n await closed;\n }\n });\n\n it('manages `placement` on open', async () => {\n ({ overlayTrigger, button, popover } = await initTest());\n\n expect(popover.placement).to.equal('top');\n\n const open = oneEvent(overlayTrigger, 'sp-opened');\n button.click();\n await open;\n\n expect(popover.placement).to.equal('bottom');\n\n const close = oneEvent(overlayTrigger, 'sp-closed');\n overlayTrigger.open = undefined;\n await close;\n\n expect(popover.placement).to.equal('top');\n });\n\n it('manages `placement` on scroll', async () => {\n ({ overlayTrigger, button, popover } = await initTest(html`\n <style>\n sp-button {\n margin: 100vh 0;\n transform: translateY(-100%);\n }\n </style>\n `));\n\n expect(popover.placement).to.equal('top');\n\n const open = oneEvent(overlayTrigger, 'sp-opened');\n button.click();\n await open;\n\n expect(popover.placement).to.equal('top');\n\n button.scrollIntoView({\n behavior: 'instant' as ScrollBehavior,\n block: 'start',\n });\n\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n\n expect(popover.placement).to.equal('bottom');\n });\n\n it('occludes content behind the overlay', async () => {\n // currently fails most browsers in CI.\n ({ overlayTrigger, button, popover } = await initTest());\n const textfield = document.createElement('sp-textfield');\n overlayTrigger.insertAdjacentElement('afterend', textfield);\n\n const textfieldRect = textfield.getBoundingClientRect();\n expect(document.activeElement === textfield).to.be.false;\n await sendMouse({\n steps: [\n {\n type: 'click',\n position: [textfieldRect.left + 5, textfieldRect.top + 5],\n },\n ],\n });\n expect(\n document.activeElement === textfield,\n 'clicking focuses the Textfield'\n ).to.be.true;\n\n expect(popover.placement).to.equal('top');\n\n const open = oneEvent(overlayTrigger, 'sp-opened');\n await sendKeys({\n press: 'Shift+Tab',\n });\n expect(document.activeElement === button, 'button focused').to.be.true;\n await sendKeys({\n press: 'Enter',\n });\n await open;\n\n expect(overlayTrigger.type).to.equal('modal');\n expect(overlayTrigger.open).to.equal('click');\n expect(popover.placement).to.equal('bottom');\n\n const close = oneEvent(overlayTrigger, 'sp-closed');\n await sendMouse({\n steps: [\n {\n type: 'click',\n position: [textfieldRect.left + 5, textfieldRect.top + 5],\n },\n ],\n });\n await close;\n\n expect(overlayTrigger.open).to.be.undefined;\n expect(\n document.activeElement === textfield,\n 'closing does not focus the Textfield'\n ).to.be.false;\n\n await sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n textfieldRect.left + textfieldRect.width / 2,\n textfieldRect.top + textfieldRect.height / 2,\n ],\n },\n ],\n });\n expect(\n document.activeElement === textfield,\n 'the Textfield is focused again'\n ).to.be.true;\n });\n\n xit('occludes wheel interactions behind the overlay', async () => {\n // currently fails for no reason in Firefox locally, and most browsers in CI.\n ({ overlayTrigger, button, popover } = await initTest());\n const scrollingArea = document.createElement('div');\n Object.assign(scrollingArea.style, {\n width: '100px',\n height: '100px',\n overflow: 'auto',\n });\n const content = Array(100).fill(\n 'This is content within my box that will scroll.'\n );\n scrollingArea.textContent = content.join(' ');\n document.body.append(scrollingArea);\n await nextFrame();\n\n const boundingRect = scrollingArea.getBoundingClientRect();\n expect(scrollingArea.scrollTop).to.equal(0);\n const distance = 1;\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n boundingRect.left + boundingRect.width / 2,\n boundingRect.top + boundingRect.height / 2,\n ],\n },\n ],\n });\n await sendMouse({\n steps: [\n {\n type: 'wheel',\n position: [0, distance],\n },\n ],\n });\n // wait for scroll to complete\n await waitUntil(\n () => scrollingArea.scrollTop === distance,\n `scroll went to ${distance}`\n );\n expect(scrollingArea.scrollTop).to.equal(distance);\n\n expect(popover.placement).to.equal('top');\n\n const open = oneEvent(overlayTrigger, 'sp-opened');\n button.click();\n await open;\n\n expect(overlayTrigger.open).to.equal('click');\n expect(popover.placement).to.equal('bottom');\n expect(scrollingArea.scrollTop).to.equal(distance);\n await sendMouse({\n steps: [\n {\n type: 'wheel',\n position: [0, -distance],\n },\n ],\n });\n // Awaiting here points out that this always fails in Firefox\n // and also was failing in WebKit without our knowing.\n await nextFrame();\n await nextFrame();\n await nextFrame();\n\n expect(\n scrollingArea.scrollTop,\n `scrollTop should be ${distance}.`\n ).to.equal(distance);\n scrollingArea.remove();\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|