@spectrum-web-components/overlay 0.32.0 → 0.32.1-overlay.41
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 +120 -156
- package/custom-elements.json +1394 -535
- package/package.json +48 -22
- package/sp-overlay.d.ts +6 -0
- package/sp-overlay.dev.js +5 -0
- package/{active-overlay.dev.js.map → sp-overlay.dev.js.map} +3 -3
- package/sp-overlay.js +2 -0
- package/{active-overlay.js.map → sp-overlay.js.map} +4 -4
- package/src/Overlay.d.ts +28 -0
- package/src/Overlay.dev.js +88 -0
- package/src/Overlay.dev.js.map +7 -0
- package/src/Overlay.js +2 -0
- package/src/Overlay.js.map +7 -0
- package/src/OverlayBase.d.ts +124 -0
- package/src/OverlayBase.dev.js +719 -0
- package/src/OverlayBase.dev.js.map +7 -0
- package/src/OverlayBase.js +31 -0
- package/src/OverlayBase.js.map +7 -0
- package/src/OverlayDialog.d.ts +8 -0
- package/src/OverlayDialog.dev.js +160 -0
- package/src/OverlayDialog.dev.js.map +7 -0
- package/src/OverlayDialog.js +2 -0
- package/src/OverlayDialog.js.map +7 -0
- package/src/OverlayNoPopover.d.ts +8 -0
- package/src/OverlayNoPopover.dev.js +149 -0
- package/src/OverlayNoPopover.dev.js.map +7 -0
- package/src/OverlayNoPopover.js +2 -0
- package/src/OverlayNoPopover.js.map +7 -0
- package/src/OverlayPopover.d.ts +8 -0
- package/src/OverlayPopover.dev.js +199 -0
- package/src/OverlayPopover.dev.js.map +7 -0
- package/src/OverlayPopover.js +2 -0
- package/src/OverlayPopover.js.map +7 -0
- package/src/OverlayStack.d.ts +29 -0
- package/src/OverlayStack.dev.js +122 -0
- package/src/OverlayStack.dev.js.map +7 -0
- package/src/OverlayStack.js +2 -0
- package/src/OverlayStack.js.map +7 -0
- package/src/OverlayTrigger.d.ts +23 -31
- package/src/OverlayTrigger.dev.js +135 -245
- package/src/OverlayTrigger.dev.js.map +3 -3
- package/src/OverlayTrigger.js +52 -22
- package/src/OverlayTrigger.js.map +3 -3
- package/src/PlacementController.d.ts +36 -0
- package/src/PlacementController.dev.js +191 -0
- package/src/PlacementController.dev.js.map +7 -0
- package/src/PlacementController.js +2 -0
- package/src/PlacementController.js.map +7 -0
- package/src/VirtualTrigger.dev.js +0 -2
- package/src/VirtualTrigger.dev.js.map +2 -2
- package/src/VirtualTrigger.js +1 -1
- package/src/VirtualTrigger.js.map +3 -3
- package/src/fullSizePlugin.d.ts +12 -0
- package/src/fullSizePlugin.dev.js +39 -0
- package/src/fullSizePlugin.dev.js.map +7 -0
- package/src/fullSizePlugin.js +2 -0
- package/src/fullSizePlugin.js.map +7 -0
- package/src/index.d.ts +2 -3
- package/src/index.dev.js +2 -3
- 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 +2 -19
- package/src/loader.dev.js.map +2 -2
- package/src/loader.js +1 -1
- package/src/loader.js.map +3 -3
- package/src/overlay-base.css.dev.js +9 -0
- package/src/overlay-base.css.dev.js.map +7 -0
- package/src/overlay-base.css.js +6 -0
- package/src/overlay-base.css.js.map +7 -0
- package/src/overlay-trigger.css.dev.js +1 -1
- package/src/overlay-trigger.css.dev.js.map +1 -1
- package/src/overlay-trigger.css.js +1 -1
- package/src/overlay-trigger.css.js.map +1 -1
- package/src/overlay-types.d.ts +6 -4
- package/src/overlay-types.dev.js +1 -0
- package/src/overlay-types.dev.js.map +3 -3
- package/src/overlay-types.js +1 -1
- package/src/overlay-types.js.map +3 -3
- package/src/topLayerOverTransforms.d.ts +23 -0
- package/src/topLayerOverTransforms.dev.js +170 -0
- package/src/topLayerOverTransforms.dev.js.map +7 -0
- package/src/topLayerOverTransforms.js +2 -0
- package/src/topLayerOverTransforms.js.map +7 -0
- package/stories/overlay-element.stories.js +247 -0
- package/stories/overlay-element.stories.js.map +7 -0
- package/stories/overlay-story-components.js +9 -8
- package/stories/overlay-story-components.js.map +2 -2
- package/stories/overlay.stories.js +661 -652
- package/stories/overlay.stories.js.map +2 -2
- package/sync/overlay-trigger.d.ts +4 -0
- package/sync/overlay-trigger.dev.js +1 -4
- package/sync/overlay-trigger.dev.js.map +2 -2
- package/sync/overlay-trigger.js +1 -1
- package/sync/overlay-trigger.js.map +3 -3
- package/test/benchmark/basic-test.js +1 -1
- package/test/benchmark/basic-test.js.map +1 -1
- package/test/index.js +407 -376
- package/test/index.js.map +3 -3
- 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 +664 -0
- package/test/overlay-element.test.js.map +7 -0
- package/test/overlay-lifecycle.test.js +34 -106
- package/test/overlay-lifecycle.test.js.map +2 -2
- package/test/overlay-trigger-click.test.js +11 -5
- package/test/overlay-trigger-click.test.js.map +2 -2
- package/test/overlay-trigger-extended.test.js +1 -6
- package/test/overlay-trigger-extended.test.js.map +2 -2
- package/test/overlay-trigger-hover-click.test.js +23 -23
- package/test/overlay-trigger-hover-click.test.js.map +2 -2
- package/test/overlay-trigger-hover.test.js +40 -34
- package/test/overlay-trigger-hover.test.js.map +2 -2
- package/test/overlay-trigger-longpress.test.js +98 -80
- 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 +253 -242
- package/test/overlay.test.js.map +3 -3
- package/active-overlay.d.ts +0 -6
- package/active-overlay.dev.js +0 -5
- package/active-overlay.js +0 -2
- package/src/ActiveOverlay.d.ts +0 -84
- package/src/ActiveOverlay.dev.js +0 -517
- package/src/ActiveOverlay.dev.js.map +0 -7
- package/src/ActiveOverlay.js +0 -16
- package/src/ActiveOverlay.js.map +0 -7
- package/src/active-overlay.css.dev.js +0 -13
- package/src/active-overlay.css.dev.js.map +0 -7
- package/src/active-overlay.css.js +0 -10
- package/src/active-overlay.css.js.map +0 -7
- package/src/overlay-stack.d.ts +0 -50
- package/src/overlay-stack.dev.js +0 -515
- package/src/overlay-stack.dev.js.map +0 -7
- package/src/overlay-stack.js +0 -34
- package/src/overlay-stack.js.map +0 -7
- package/src/overlay-utils.d.ts +0 -3
- package/src/overlay-utils.dev.js +0 -31
- package/src/overlay-utils.dev.js.map +0 -7
- package/src/overlay-utils.js +0 -2
- package/src/overlay-utils.js.map +0 -7
- package/src/overlay.d.ts +0 -59
- package/src/overlay.dev.js +0 -127
- package/src/overlay.dev.js.map +0 -7
- package/src/overlay.js +0 -2
- package/src/overlay.js.map +0 -7
- /package/src/{active-overlay.css.d.ts → overlay-base.css.d.ts} +0 -0
|
@@ -39,11 +39,11 @@ describe("Overlay Trigger - Hover and Click", () => {
|
|
|
39
39
|
const openedEvent = oneEvent(el, "sp-opened");
|
|
40
40
|
trigger.click();
|
|
41
41
|
interaction = (await openedEvent).detail.interaction;
|
|
42
|
-
expect(interaction).equals("
|
|
42
|
+
expect(interaction).equals("auto");
|
|
43
43
|
const closedEvent = oneEvent(el, "sp-closed");
|
|
44
44
|
trigger.click();
|
|
45
45
|
interaction = (await closedEvent).detail.interaction;
|
|
46
|
-
expect(interaction).equals("
|
|
46
|
+
expect(interaction).equals("auto");
|
|
47
47
|
}
|
|
48
48
|
});
|
|
49
49
|
it("toggles on click after hover", async () => {
|
|
@@ -81,16 +81,16 @@ describe("Overlay Trigger - Hover and Click", () => {
|
|
|
81
81
|
]
|
|
82
82
|
});
|
|
83
83
|
interaction = (await hoveredEvent).detail.interaction;
|
|
84
|
-
expect(interaction).equals("
|
|
84
|
+
expect(interaction).equals("hint");
|
|
85
85
|
for (let i = 0; i < 3; i++) {
|
|
86
86
|
const openedEvent = oneEvent(el, "sp-opened");
|
|
87
87
|
trigger.click();
|
|
88
88
|
interaction = (await openedEvent).detail.interaction;
|
|
89
|
-
expect(interaction).equals("
|
|
89
|
+
expect(interaction).equals("auto");
|
|
90
90
|
const closedEvent = oneEvent(el, "sp-closed");
|
|
91
91
|
trigger.click();
|
|
92
92
|
interaction = (await closedEvent).detail.interaction;
|
|
93
|
-
expect(interaction).equals("
|
|
93
|
+
expect(interaction).equals("auto");
|
|
94
94
|
}
|
|
95
95
|
});
|
|
96
96
|
it("persists a hover overlay when clicking its trigger and closes the next highest overlay on the stack", async () => {
|
|
@@ -121,13 +121,6 @@ describe("Overlay Trigger - Hover and Click", () => {
|
|
|
121
121
|
let opened = oneEvent(trigger1, "sp-opened");
|
|
122
122
|
sendMouse({
|
|
123
123
|
steps: [
|
|
124
|
-
{
|
|
125
|
-
type: "move",
|
|
126
|
-
position: [
|
|
127
|
-
rect1.left + rect1.width / 2,
|
|
128
|
-
rect1.top + rect1.height / 2
|
|
129
|
-
]
|
|
130
|
-
},
|
|
131
124
|
{
|
|
132
125
|
type: "click",
|
|
133
126
|
position: [
|
|
@@ -138,13 +131,11 @@ describe("Overlay Trigger - Hover and Click", () => {
|
|
|
138
131
|
]
|
|
139
132
|
});
|
|
140
133
|
await opened;
|
|
141
|
-
await elementUpdated(overlayTrigger1);
|
|
142
134
|
expect(overlayTrigger1.open).to.equal("click");
|
|
143
135
|
expect(overlayTrigger2.open).to.undefined;
|
|
144
136
|
opened = oneEvent(trigger2, "sp-opened");
|
|
145
137
|
trigger2.focus();
|
|
146
138
|
await opened;
|
|
147
|
-
await elementUpdated(overlayTrigger2);
|
|
148
139
|
expect(overlayTrigger1.open).to.equal("click");
|
|
149
140
|
expect(overlayTrigger2.open).to.equal("hover");
|
|
150
141
|
const closed = oneEvent(trigger1, "sp-closed");
|
|
@@ -160,39 +151,48 @@ describe("Overlay Trigger - Hover and Click", () => {
|
|
|
160
151
|
]
|
|
161
152
|
});
|
|
162
153
|
await closed;
|
|
163
|
-
expect(overlayTrigger1.open).to.be.
|
|
154
|
+
expect(overlayTrigger1.open).to.be.undefined;
|
|
164
155
|
expect(overlayTrigger2.open).to.equal("hover");
|
|
165
156
|
});
|
|
166
|
-
it('does not close ancestor "click" overlays on `click`', async () => {
|
|
157
|
+
it.only('does not close ancestor "click" overlays on `click`', async () => {
|
|
167
158
|
const test = await fixture(html`
|
|
168
159
|
<div>${deep()}</div>
|
|
169
160
|
`);
|
|
170
161
|
const el = test.querySelector("overlay-trigger");
|
|
171
162
|
const button = el.querySelector("sp-action-button");
|
|
163
|
+
const button2 = el.querySelector(
|
|
164
|
+
"sp-action-button:nth-of-type(2)"
|
|
165
|
+
);
|
|
172
166
|
const tooltip = button.querySelector("sp-tooltip");
|
|
173
167
|
expect(el.open).to.be.undefined;
|
|
174
168
|
expect(tooltip.open).to.be.false;
|
|
175
|
-
|
|
169
|
+
const opened = oneEvent(el, "sp-opened");
|
|
170
|
+
const tooltipOpen = oneEvent(button, "sp-opened");
|
|
176
171
|
el.open = "click";
|
|
177
172
|
await opened;
|
|
173
|
+
await tooltipOpen;
|
|
178
174
|
expect(el.open).to.equal("click");
|
|
179
|
-
opened = oneEvent(button, "sp-opened");
|
|
180
|
-
button.focus();
|
|
181
|
-
await opened;
|
|
182
175
|
expect(tooltip.open).to.be.true;
|
|
183
176
|
button.click();
|
|
184
177
|
await aTimeout(200);
|
|
185
178
|
expect(el.open).to.equal("click");
|
|
186
179
|
expect(tooltip.open).to.be.true;
|
|
187
180
|
let closed = oneEvent(button, "sp-closed");
|
|
188
|
-
|
|
181
|
+
button2.focus();
|
|
189
182
|
await closed;
|
|
190
183
|
expect(el.open).to.equal("click");
|
|
191
184
|
expect(tooltip.open).to.be.false;
|
|
192
185
|
closed = oneEvent(el, "sp-closed");
|
|
193
|
-
|
|
186
|
+
sendMouse({
|
|
187
|
+
steps: [
|
|
188
|
+
{
|
|
189
|
+
type: "click",
|
|
190
|
+
position: [1, 1]
|
|
191
|
+
}
|
|
192
|
+
]
|
|
193
|
+
});
|
|
194
194
|
await closed;
|
|
195
|
-
expect(el.open).to.be.
|
|
195
|
+
expect(el.open, '"click" overlay no longer open').to.be.undefined;
|
|
196
196
|
expect(tooltip.open).to.be.false;
|
|
197
197
|
});
|
|
198
198
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["overlay-trigger-hover-click.test.ts"],
|
|
4
|
-
"sourcesContent": ["/*\nCopyright 2021 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 aTimeout,\n elementUpdated,\n expect,\n fixture,\n html,\n oneEvent,\n} from '@open-wc/testing';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport '@spectrum-web-components/button/sp-button.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-magnify.js';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport '@spectrum-web-components/tooltip/sp-tooltip.js';\nimport { OverlayTrigger } from '@spectrum-web-components/overlay/src/OverlayTrigger';\nimport { TriggerInteractions } from '@spectrum-web-components/overlay/src/overlay-types';\nimport '@spectrum-web-components/overlay/overlay-trigger.js';\nimport { ActionButton } from '@spectrum-web-components/action-button';\nimport { sendMouse } from '../../../test/plugins/browser.js';\nimport { clickAndHoverTargets, deep } from '../stories/overlay.stories.js';\nimport { ignoreResizeObserverLoopError } from '../../../test/testing-helpers.js';\nimport { Tooltip } from '@spectrum-web-components/tooltip/src/Tooltip.js';\n\nignoreResizeObserverLoopError(before, after);\n\ndescribe('Overlay Trigger - Hover and Click', () => {\n it('toggles open and closed on click', async () => {\n const el = await fixture<OverlayTrigger>(html`\n <overlay-trigger>\n <sp-button slot=\"trigger\">Click and hover</sp-button>\n <sp-popover slot=\"click-content\" dialog tip>\n Popover content\n </sp-popover>\n <sp-tooltip slot=\"hover-content\" delayed>\n Tooltip content\n </sp-tooltip>\n </overlay-trigger>\n `);\n const trigger = el.querySelector(\n '[slot=trigger]'\n ) as unknown as ActionButton;\n let interaction: TriggerInteractions;\n\n // repeatedly click to toggle the popover\n for (let i = 0; i < 3; i++) {\n const openedEvent = oneEvent(el, 'sp-opened');\n trigger.click();\n interaction = (await openedEvent).detail.interaction;\n\n expect(interaction).equals('
|
|
5
|
-
"mappings": ";AAWA;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AAGP,OAAO;AAEP,SAAS,iBAAiB;AAC1B,SAAS,sBAAsB,YAAY;AAC3C,SAAS,qCAAqC;AAG9C,8BAA8B,QAAQ,KAAK;AAE3C,SAAS,qCAAqC,MAAM;AAChD,KAAG,oCAAoC,YAAY;AAC/C,UAAM,KAAK,MAAM,QAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAUxC;AACD,UAAM,UAAU,GAAG;AAAA,MACf;AAAA,IACJ;AACA,QAAI;AAGJ,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,YAAM,cAAc,SAAS,IAAI,WAAW;AAC5C,cAAQ,MAAM;AACd,qBAAe,MAAM,aAAa,OAAO;AAEzC,aAAO,WAAW,EAAE,OAAO,
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2021 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 aTimeout,\n elementUpdated,\n expect,\n fixture,\n html,\n oneEvent,\n} from '@open-wc/testing';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport '@spectrum-web-components/button/sp-button.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-magnify.js';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport '@spectrum-web-components/tooltip/sp-tooltip.js';\nimport { OverlayTrigger } from '@spectrum-web-components/overlay/src/OverlayTrigger';\nimport { TriggerInteractions } from '@spectrum-web-components/overlay/src/overlay-types';\nimport '@spectrum-web-components/overlay/overlay-trigger.js';\nimport { ActionButton } from '@spectrum-web-components/action-button';\nimport { sendMouse } from '../../../test/plugins/browser.js';\nimport { clickAndHoverTargets, deep } from '../stories/overlay.stories.js';\nimport { ignoreResizeObserverLoopError } from '../../../test/testing-helpers.js';\nimport { Tooltip } from '@spectrum-web-components/tooltip/src/Tooltip.js';\n\nignoreResizeObserverLoopError(before, after);\n\ndescribe('Overlay Trigger - Hover and Click', () => {\n it('toggles open and closed on click', async () => {\n const el = await fixture<OverlayTrigger>(html`\n <overlay-trigger>\n <sp-button slot=\"trigger\">Click and hover</sp-button>\n <sp-popover slot=\"click-content\" dialog tip>\n Popover content\n </sp-popover>\n <sp-tooltip slot=\"hover-content\" delayed>\n Tooltip content\n </sp-tooltip>\n </overlay-trigger>\n `);\n const trigger = el.querySelector(\n '[slot=trigger]'\n ) as unknown as ActionButton;\n let interaction: TriggerInteractions;\n\n // repeatedly click to toggle the popover\n for (let i = 0; i < 3; i++) {\n const openedEvent = oneEvent(el, 'sp-opened');\n trigger.click();\n interaction = (await openedEvent).detail.interaction;\n\n expect(interaction).equals('auto');\n\n const closedEvent = oneEvent(el, 'sp-closed');\n trigger.click();\n interaction = (await closedEvent).detail.interaction;\n\n expect(interaction).equals('auto');\n }\n });\n it('toggles on click after hover', async () => {\n const el = await fixture<OverlayTrigger>(html`\n <overlay-trigger>\n <sp-button slot=\"trigger\">Click and hover</sp-button>\n <sp-popover slot=\"click-content\" dialog tip>\n Popover content\n </sp-popover>\n <sp-tooltip slot=\"hover-content\" delayed>\n Tooltip content\n </sp-tooltip>\n </overlay-trigger>\n `);\n const trigger = el.querySelector(\n '[slot=trigger]'\n ) as unknown as ActionButton;\n const bounds = el.getBoundingClientRect();\n let interaction: TriggerInteractions;\n\n // hover over the button to trigger the tooltip\n const hoveredEvent = oneEvent(el, 'sp-opened');\n sendMouse({\n steps: [\n {\n type: 'move',\n position: [bounds.left - 1, bounds.top - 1],\n },\n {\n type: 'move',\n position: [bounds.left, bounds.top],\n },\n {\n type: 'move',\n position: [bounds.left + 1, bounds.top + 1],\n },\n ],\n });\n interaction = (await hoveredEvent).detail.interaction;\n\n expect(interaction).equals('hint');\n\n // repeatedly click to toggle the popover\n for (let i = 0; i < 3; i++) {\n const openedEvent = oneEvent(el, 'sp-opened');\n trigger.click();\n interaction = (await openedEvent).detail.interaction;\n\n expect(interaction).equals('auto');\n\n const closedEvent = oneEvent(el, 'sp-closed');\n trigger.click();\n interaction = (await closedEvent).detail.interaction;\n\n expect(interaction).equals('auto');\n }\n });\n it('persists a hover overlay when clicking its trigger and closes the next highest overlay on the stack', async () => {\n const root = document.createElement('div');\n root.style.width = '100vw';\n root.style.height = '100vh';\n root.style.display = 'grid';\n root.style.placeContent = 'center';\n const test = await fixture(clickAndHoverTargets(), {\n parentNode: root,\n });\n\n const overlayTrigger1 = test.querySelector(\n 'overlay-trigger[placement=\"right\"]'\n ) as OverlayTrigger;\n const overlayTrigger2 = test.querySelector(\n 'overlay-trigger[placement=\"left\"]'\n ) as OverlayTrigger;\n\n await elementUpdated(overlayTrigger1);\n await elementUpdated(overlayTrigger2);\n\n const trigger1 = overlayTrigger1.querySelector(\n '.friendly-target'\n ) as HTMLButtonElement;\n const trigger2 = overlayTrigger2.querySelector(\n '.friendly-target'\n ) as HTMLButtonElement;\n const rect1 = trigger1.getBoundingClientRect();\n const rect2 = trigger2.getBoundingClientRect();\n let opened = oneEvent(trigger1, 'sp-opened');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n rect1.left + rect1.width / 2,\n rect1.top + rect1.height / 2,\n ],\n },\n ],\n });\n await opened;\n\n expect(overlayTrigger1.open).to.equal('click');\n expect(overlayTrigger2.open).to.undefined;\n\n opened = oneEvent(trigger2, 'sp-opened');\n trigger2.focus();\n await opened;\n\n expect(overlayTrigger1.open).to.equal('click');\n expect(overlayTrigger2.open).to.equal('hover');\n\n const closed = oneEvent(trigger1, 'sp-closed');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n rect2.left + rect2.width / 2,\n rect2.top + rect2.height / 2,\n ],\n },\n ],\n });\n await closed;\n\n expect(overlayTrigger1.open).to.be.undefined;\n expect(overlayTrigger2.open).to.equal('hover');\n });\n it.only('does not close ancestor \"click\" overlays on `click`', async () => {\n const test = await fixture<HTMLDivElement>(html`\n <div>${deep()}</div>\n `);\n const el = test.querySelector('overlay-trigger') as OverlayTrigger;\n const button = el.querySelector('sp-action-button') as ActionButton;\n const button2 = el.querySelector(\n 'sp-action-button:nth-of-type(2)'\n ) as ActionButton;\n const tooltip = button.querySelector('sp-tooltip') as Tooltip;\n\n expect(el.open).to.be.undefined;\n expect(tooltip.open).to.be.false;\n\n const opened = oneEvent(el, 'sp-opened');\n const tooltipOpen = oneEvent(button, 'sp-opened');\n el.open = 'click';\n await opened;\n await tooltipOpen;\n\n expect(el.open).to.equal('click');\n expect(tooltip.open).to.be.true;\n\n button.click();\n\n await aTimeout(200);\n\n expect(el.open).to.equal('click');\n expect(tooltip.open).to.be.true;\n\n let closed = oneEvent(button, 'sp-closed');\n button2.focus();\n await closed;\n\n expect(el.open).to.equal('click');\n expect(tooltip.open).to.be.false;\n\n closed = oneEvent(el, 'sp-closed');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [1, 1],\n },\n ],\n });\n await closed;\n\n expect(el.open, '\"click\" overlay no longer open').to.be.undefined;\n expect(tooltip.open).to.be.false;\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
import {
|
|
3
|
-
aTimeout,
|
|
4
3
|
elementUpdated,
|
|
5
4
|
expect,
|
|
6
|
-
fixture,
|
|
7
5
|
html,
|
|
8
6
|
nextFrame,
|
|
9
7
|
oneEvent,
|
|
@@ -20,8 +18,10 @@ import { spy } from "sinon";
|
|
|
20
18
|
import { sendKeys } from "@web/test-runner-commands";
|
|
21
19
|
import "@spectrum-web-components/theme/sp-theme.js";
|
|
22
20
|
import "@spectrum-web-components/theme/src/themes.js";
|
|
23
|
-
import {
|
|
24
|
-
|
|
21
|
+
import {
|
|
22
|
+
fixture,
|
|
23
|
+
ignoreResizeObserverLoopError
|
|
24
|
+
} from "../../../test/testing-helpers.js";
|
|
25
25
|
ignoreResizeObserverLoopError(before, after);
|
|
26
26
|
async function styledFixture(story) {
|
|
27
27
|
const test = await fixture(html`
|
|
@@ -86,14 +86,18 @@ describe("Overlay Trigger - Hover", () => {
|
|
|
86
86
|
it('allows pointer to enter the "tooltip" without closing the "tooltip"', async () => {
|
|
87
87
|
const opened = oneEvent(button, "sp-opened");
|
|
88
88
|
button.dispatchEvent(
|
|
89
|
-
new MouseEvent("
|
|
89
|
+
new MouseEvent("pointerenter", {
|
|
90
90
|
bubbles: true,
|
|
91
91
|
composed: true
|
|
92
92
|
})
|
|
93
93
|
);
|
|
94
94
|
await nextFrame();
|
|
95
|
+
await nextFrame();
|
|
96
|
+
await nextFrame();
|
|
97
|
+
await nextFrame();
|
|
98
|
+
expect(tooltip.open).to.be.true;
|
|
95
99
|
button.dispatchEvent(
|
|
96
|
-
new MouseEvent("
|
|
100
|
+
new MouseEvent("pointerleave", {
|
|
97
101
|
relatedTarget: tooltip,
|
|
98
102
|
bubbles: true,
|
|
99
103
|
composed: true
|
|
@@ -101,7 +105,7 @@ describe("Overlay Trigger - Hover", () => {
|
|
|
101
105
|
);
|
|
102
106
|
await nextFrame();
|
|
103
107
|
tooltip.dispatchEvent(
|
|
104
|
-
new MouseEvent("
|
|
108
|
+
new MouseEvent("pointerleave", {
|
|
105
109
|
relatedTarget: button,
|
|
106
110
|
bubbles: true,
|
|
107
111
|
composed: true
|
|
@@ -111,25 +115,26 @@ describe("Overlay Trigger - Hover", () => {
|
|
|
111
115
|
expect(el.open).to.equal("hover");
|
|
112
116
|
const closed = oneEvent(button, "sp-closed");
|
|
113
117
|
button.dispatchEvent(
|
|
114
|
-
new MouseEvent("
|
|
118
|
+
new MouseEvent("pointerleave", {
|
|
119
|
+
relatedTarget: null,
|
|
115
120
|
bubbles: true,
|
|
116
121
|
composed: true
|
|
117
122
|
})
|
|
118
123
|
);
|
|
119
124
|
await closed;
|
|
120
|
-
expect(el.open).to.be.
|
|
125
|
+
expect(el.open).to.be.undefined;
|
|
121
126
|
});
|
|
122
127
|
it('closes the "tooltip" when leaving the "tooltip"', async () => {
|
|
123
128
|
const opened = oneEvent(button, "sp-opened");
|
|
124
129
|
button.dispatchEvent(
|
|
125
|
-
new MouseEvent("
|
|
130
|
+
new MouseEvent("pointerenter", {
|
|
126
131
|
bubbles: true,
|
|
127
132
|
composed: true
|
|
128
133
|
})
|
|
129
134
|
);
|
|
130
135
|
await nextFrame();
|
|
131
136
|
button.dispatchEvent(
|
|
132
|
-
new MouseEvent("
|
|
137
|
+
new MouseEvent("pointerleave", {
|
|
133
138
|
relatedTarget: tooltip,
|
|
134
139
|
bubbles: true,
|
|
135
140
|
composed: true
|
|
@@ -139,13 +144,14 @@ describe("Overlay Trigger - Hover", () => {
|
|
|
139
144
|
expect(el.open).to.equal("hover");
|
|
140
145
|
const closed = oneEvent(button, "sp-closed");
|
|
141
146
|
tooltip.dispatchEvent(
|
|
142
|
-
new MouseEvent("
|
|
147
|
+
new MouseEvent("pointerleave", {
|
|
148
|
+
relatedTarget: null,
|
|
143
149
|
bubbles: true,
|
|
144
150
|
composed: true
|
|
145
151
|
})
|
|
146
152
|
);
|
|
147
153
|
await closed;
|
|
148
|
-
expect(el.open).to.be.
|
|
154
|
+
expect(el.open).to.be.undefined;
|
|
149
155
|
});
|
|
150
156
|
});
|
|
151
157
|
it("persists hover content", async () => {
|
|
@@ -162,12 +168,14 @@ describe("Overlay Trigger - Hover", () => {
|
|
|
162
168
|
await elementUpdated(el);
|
|
163
169
|
expect(el.open).to.be.undefined;
|
|
164
170
|
const trigger = el.querySelector('[slot="trigger"]');
|
|
171
|
+
const opened = oneEvent(trigger, "sp-opened");
|
|
165
172
|
trigger.dispatchEvent(
|
|
166
|
-
new Event("
|
|
167
|
-
bubbles: true
|
|
173
|
+
new Event("pointerenter", {
|
|
174
|
+
bubbles: true,
|
|
175
|
+
composed: true
|
|
168
176
|
})
|
|
169
177
|
);
|
|
170
|
-
await
|
|
178
|
+
await opened;
|
|
171
179
|
expect(el.open).to.equal("hover");
|
|
172
180
|
trigger.click();
|
|
173
181
|
await elementUpdated(el);
|
|
@@ -188,19 +196,21 @@ describe("Overlay Trigger - Hover", () => {
|
|
|
188
196
|
await elementUpdated(el);
|
|
189
197
|
expect(el.open).to.be.undefined;
|
|
190
198
|
const trigger = el.querySelector('[slot="trigger"]');
|
|
199
|
+
let opened = oneEvent(trigger, "sp-opened");
|
|
191
200
|
trigger.dispatchEvent(
|
|
192
|
-
new Event("
|
|
201
|
+
new Event("pointerenter", {
|
|
193
202
|
bubbles: true
|
|
194
203
|
})
|
|
195
204
|
);
|
|
196
|
-
await
|
|
205
|
+
await opened;
|
|
197
206
|
expect(el.open).to.equal("hover");
|
|
207
|
+
opened = oneEvent(trigger, "sp-opened");
|
|
198
208
|
trigger.dispatchEvent(
|
|
199
209
|
new Event("longpress", {
|
|
200
210
|
bubbles: true
|
|
201
211
|
})
|
|
202
212
|
);
|
|
203
|
-
await
|
|
213
|
+
await opened;
|
|
204
214
|
expect(el.open).to.equal("longpress");
|
|
205
215
|
});
|
|
206
216
|
it('closes `hover` overlay when [type="modal"]', async () => {
|
|
@@ -220,19 +230,13 @@ describe("Overlay Trigger - Hover", () => {
|
|
|
220
230
|
const opened = oneEvent(el, "sp-opened");
|
|
221
231
|
trigger.focus();
|
|
222
232
|
await opened;
|
|
223
|
-
await elementUpdated(el);
|
|
224
|
-
await aTimeout(500);
|
|
225
233
|
expect(el.open).to.equal("hover");
|
|
226
234
|
const closed = oneEvent(el, "sp-closed");
|
|
227
235
|
trigger.blur();
|
|
228
236
|
await closed;
|
|
229
|
-
|
|
230
|
-
expect(el.open).to.be.null;
|
|
237
|
+
expect(el.open).to.be.undefined;
|
|
231
238
|
});
|
|
232
239
|
it('will not return focus to a "modal" parent', async () => {
|
|
233
|
-
if (isFirefox()) {
|
|
234
|
-
return;
|
|
235
|
-
}
|
|
236
240
|
const el = await styledFixture(html`
|
|
237
241
|
<overlay-trigger type="modal" placement="none">
|
|
238
242
|
<sp-button slot="trigger">Toggle Dialog</sp-button>
|
|
@@ -259,27 +263,29 @@ describe("Overlay Trigger - Hover", () => {
|
|
|
259
263
|
await elementUpdated(el);
|
|
260
264
|
const button = el.querySelector("sp-button");
|
|
261
265
|
const dialog = el.querySelector("sp-dialog-wrapper");
|
|
266
|
+
const button1 = dialog.querySelector("#button-1");
|
|
267
|
+
const button2 = dialog.querySelector("#button-2");
|
|
268
|
+
const button3 = dialog.querySelector("#button-3");
|
|
262
269
|
await elementUpdated(button);
|
|
263
270
|
await elementUpdated(dialog);
|
|
264
271
|
let opened = oneEvent(button, "sp-opened");
|
|
272
|
+
const openedHint = oneEvent(button1, "sp-opened");
|
|
265
273
|
button.dispatchEvent(new Event("click", { bubbles: true }));
|
|
266
274
|
await opened;
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
opened = oneEvent(
|
|
275
|
+
await openedHint;
|
|
276
|
+
expect(button1 === document.activeElement).to.be.true;
|
|
277
|
+
opened = oneEvent(button2, "sp-opened");
|
|
270
278
|
sendKeys({
|
|
271
279
|
press: "Tab"
|
|
272
280
|
});
|
|
273
281
|
await opened;
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
opened = oneEvent(button2, "sp-opened");
|
|
282
|
+
expect(button2 === document.activeElement).to.be.true;
|
|
283
|
+
opened = oneEvent(button3, "sp-opened");
|
|
277
284
|
sendKeys({
|
|
278
285
|
press: "Tab"
|
|
279
286
|
});
|
|
280
287
|
await opened;
|
|
281
|
-
|
|
282
|
-
expect(button2 === document.activeElement).to.be.true;
|
|
288
|
+
expect(button3 === document.activeElement).to.be.true;
|
|
283
289
|
});
|
|
284
290
|
});
|
|
285
291
|
//# sourceMappingURL=overlay-trigger-hover.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["overlay-trigger-hover.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 aTimeout,\n elementUpdated,\n expect,\n fixture,\n html,\n nextFrame,\n oneEvent,\n waitUntil,\n} from '@open-wc/testing';\nimport '@spectrum-web-components/overlay/overlay-trigger.js';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport '@spectrum-web-components/button/sp-button.js';\nimport '@spectrum-web-components/tooltip/sp-tooltip.js';\nimport '@spectrum-web-components/dialog/sp-dialog-wrapper.js';\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-magnify.js';\nimport { OverlayTrigger } from '@spectrum-web-components/overlay';\nimport { spy } from 'sinon';\nimport { ActionButton } from '@spectrum-web-components/action-button';\nimport { sendKeys } from '@web/test-runner-commands';\nimport { Button } from '@spectrum-web-components/button';\nimport '@spectrum-web-components/theme/sp-theme.js';\nimport '@spectrum-web-components/theme/src/themes.js';\nimport { TemplateResult } from '@spectrum-web-components/base';\nimport { Theme } from '@spectrum-web-components/theme';\nimport { Tooltip } from '@spectrum-web-components/tooltip';\nimport { ignoreResizeObserverLoopError } from '../../../test/testing-helpers.js';\nimport { isFirefox } from '@spectrum-web-components/shared/src/platform.js';\n\nignoreResizeObserverLoopError(before, after);\n\nasync function styledFixture<T extends Element>(\n story: TemplateResult\n): Promise<T> {\n const test = await fixture<Theme>(html`\n <sp-theme theme=\"spectrum\" scale=\"medium\" color=\"light\">\n ${story}\n </sp-theme>\n `);\n return test.children[0] as T;\n}\n\ndescribe('Overlay Trigger - Hover', () => {\n it('displays `hover` 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=\"hover\"\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=\"hover-content\" tip></sp-popover>\n </overlay-trigger>\n `)()\n );\n await elementUpdated(el);\n\n await waitUntil(\n () => openedSpy.calledOnce,\n 'hover content projected to overlay',\n { timeout: 2000 }\n );\n\n el.removeAttribute('open');\n await elementUpdated(el);\n\n await waitUntil(() => closedSpy.calledOnce, 'hover content returned', {\n timeout: 2000,\n });\n });\n describe('\"tooltip\" mouse interactions', () => {\n let el: OverlayTrigger;\n let button: ActionButton;\n let tooltip: Tooltip;\n beforeEach(async () => {\n el = await fixture<OverlayTrigger>(\n (() => html`\n <overlay-trigger placement=\"right-start\">\n <sp-action-button slot=\"trigger\">\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-tooltip slot=\"hover-content\" tip>\n Magnify\n </sp-tooltip>\n </overlay-trigger>\n `)()\n );\n await elementUpdated(el);\n button = el.querySelector('sp-action-button') as ActionButton;\n tooltip = el.querySelector('sp-tooltip') as Tooltip;\n });\n it('allows pointer to enter the \"tooltip\" without closing the \"tooltip\"', async () => {\n const opened = oneEvent(button, 'sp-opened');\n button.dispatchEvent(\n new MouseEvent('mouseenter', {\n bubbles: true,\n composed: true,\n })\n );\n await nextFrame();\n button.dispatchEvent(\n new MouseEvent('mouseleave', {\n relatedTarget: tooltip,\n bubbles: true,\n composed: true,\n })\n );\n await nextFrame();\n tooltip.dispatchEvent(\n new MouseEvent('mouseleave', {\n relatedTarget: button,\n bubbles: true,\n composed: true,\n })\n );\n await opened;\n\n expect(el.open).to.equal('hover');\n\n const closed = oneEvent(button, 'sp-closed');\n button.dispatchEvent(\n new MouseEvent('mouseleave', {\n bubbles: true,\n composed: true,\n })\n );\n await closed;\n\n expect(el.open).to.be.null;\n });\n it('closes the \"tooltip\" when leaving the \"tooltip\"', async () => {\n const opened = oneEvent(button, 'sp-opened');\n button.dispatchEvent(\n new MouseEvent('mouseenter', {\n bubbles: true,\n composed: true,\n })\n );\n await nextFrame();\n button.dispatchEvent(\n new MouseEvent('mouseleave', {\n relatedTarget: tooltip,\n bubbles: true,\n composed: true,\n })\n );\n await opened;\n\n expect(el.open).to.equal('hover');\n\n const closed = oneEvent(button, 'sp-closed');\n tooltip.dispatchEvent(\n new MouseEvent('mouseleave', {\n bubbles: true,\n composed: true,\n })\n );\n await closed;\n\n expect(el.open).to.be.null;\n });\n });\n it('persists hover content', async () => {\n const el = await fixture<OverlayTrigger>(\n (() => html`\n <overlay-trigger placement=\"right-start\">\n <sp-action-button slot=\"trigger\">\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-popover slot=\"hover-content\" tip></sp-popover>\n </overlay-trigger>\n `)()\n );\n await elementUpdated(el);\n\n expect(el.open).to.be.undefined;\n\n const trigger = el.querySelector('[slot=\"trigger\"]') as ActionButton;\n trigger.dispatchEvent(\n new Event('mouseenter', {\n bubbles: true,\n })\n );\n\n await elementUpdated(el);\n\n expect(el.open).to.equal('hover');\n\n trigger.click();\n\n await elementUpdated(el);\n\n expect(el.open).to.equal('hover');\n });\n it('closes persistent hover content on `longpress`', async () => {\n const el = await fixture<OverlayTrigger>(\n (() => html`\n <overlay-trigger placement=\"right-start\">\n <sp-action-button slot=\"trigger\">\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-popover slot=\"hover-content\" tip></sp-popover>\n <sp-popover slot=\"longpress-content\" tip></sp-popover>\n </overlay-trigger>\n `)()\n );\n await elementUpdated(el);\n\n expect(el.open).to.be.undefined;\n\n const trigger = el.querySelector('[slot=\"trigger\"]') as ActionButton;\n trigger.dispatchEvent(\n new Event('mouseenter', {\n bubbles: true,\n })\n );\n\n await elementUpdated(el);\n\n expect(el.open).to.equal('hover');\n\n trigger.dispatchEvent(\n new Event('longpress', {\n bubbles: true,\n })\n );\n\n await elementUpdated(el);\n\n expect(el.open).to.equal('longpress');\n });\n it('closes `hover` overlay when [type=\"modal\"]', async () => {\n const el = await fixture<OverlayTrigger>(\n (() => html`\n <overlay-trigger placement=\"right-start\" type=\"modal\">\n <sp-action-button slot=\"trigger\">\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-popover slot=\"hover-content\" tip></sp-popover>\n </overlay-trigger>\n `)()\n );\n await elementUpdated(el);\n\n expect(el.open).to.be.undefined;\n\n const trigger = el.querySelector('[slot=\"trigger\"]') as ActionButton;\n const opened = oneEvent(el, 'sp-opened');\n trigger.focus();\n await opened;\n\n await elementUpdated(el);\n await aTimeout(500);\n\n expect(el.open).to.equal('hover');\n\n const closed = oneEvent(el, 'sp-closed');\n trigger.blur();\n await closed;\n\n await elementUpdated(el);\n\n expect(el.open).to.be.null;\n });\n it('will not return focus to a \"modal\" parent', async () => {\n // There is an `sp-dialog-base` recyling issue in Firefox\n if (isFirefox()) {\n return;\n }\n const el = await styledFixture<OverlayTrigger>(html`\n <overlay-trigger type=\"modal\" placement=\"none\">\n <sp-button slot=\"trigger\">Toggle Dialog</sp-button>\n <sp-dialog-wrapper\n slot=\"click-content\"\n headline=\"Dialog title\"\n size=\"s\"\n >\n ${[1, 2, 3, 4].map(\n (index) => html`\n <overlay-trigger>\n <sp-button slot=\"trigger\" id=\"button-${index}\">\n Button with Tooltip ${index}\n </sp-button>\n <sp-tooltip slot=\"hover-content\">\n Tooltip ${index}\n </sp-tooltip>\n </overlay-trigger>\n `\n )}\n </sp-dialog-wrapper>\n </overlay-trigger>\n `);\n await elementUpdated(el);\n\n const button = el.querySelector('sp-button') as Button;\n const dialog = el.querySelector('sp-dialog-wrapper') as HTMLElement;\n await elementUpdated(button);\n await elementUpdated(dialog);\n\n let opened = oneEvent(button, 'sp-opened');\n button.dispatchEvent(new Event('click', { bubbles: true }));\n await opened;\n const button1 = dialog.querySelector('#button-1') as Button;\n const button2 = dialog.querySelector('#button-2') as Button;\n\n opened = oneEvent(button1, 'sp-opened');\n sendKeys({\n press: 'Tab',\n });\n await opened;\n\n await nextFrame();\n\n expect(button1 === document.activeElement).to.be.true;\n\n opened = oneEvent(button2, 'sp-opened');\n sendKeys({\n press: 'Tab',\n });\n await opened;\n\n await nextFrame();\n\n expect(button2 === document.activeElement).to.be.true;\n });\n});\n"],
|
|
5
|
-
"mappings": ";AAWA;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,
|
|
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 '@spectrum-web-components/overlay/overlay-trigger.js';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport '@spectrum-web-components/button/sp-button.js';\nimport '@spectrum-web-components/tooltip/sp-tooltip.js';\nimport '@spectrum-web-components/dialog/sp-dialog-wrapper.js';\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-magnify.js';\nimport { OverlayTrigger } from '@spectrum-web-components/overlay';\nimport { spy } from 'sinon';\nimport { ActionButton } from '@spectrum-web-components/action-button';\nimport { sendKeys } from '@web/test-runner-commands';\nimport { Button } from '@spectrum-web-components/button';\nimport '@spectrum-web-components/theme/sp-theme.js';\nimport '@spectrum-web-components/theme/src/themes.js';\nimport { TemplateResult } from '@spectrum-web-components/base';\nimport { Theme } from '@spectrum-web-components/theme';\nimport { Tooltip } from '@spectrum-web-components/tooltip';\nimport {\n fixture,\n ignoreResizeObserverLoopError,\n} from '../../../test/testing-helpers.js';\n\nignoreResizeObserverLoopError(before, after);\n\nasync function styledFixture<T extends Element>(\n story: TemplateResult\n): Promise<T> {\n const test = await fixture<Theme>(html`\n <sp-theme theme=\"spectrum\" scale=\"medium\" color=\"light\">\n ${story}\n </sp-theme>\n `);\n return test.children[0] as T;\n}\n\ndescribe('Overlay Trigger - Hover', () => {\n it('displays `hover` 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=\"hover\"\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=\"hover-content\" tip></sp-popover>\n </overlay-trigger>\n `)()\n );\n await elementUpdated(el);\n\n await waitUntil(\n () => openedSpy.calledOnce,\n 'hover content projected to overlay',\n { timeout: 2000 }\n );\n\n el.removeAttribute('open');\n await elementUpdated(el);\n\n await waitUntil(() => closedSpy.calledOnce, 'hover content returned', {\n timeout: 2000,\n });\n });\n describe('\"tooltip\" mouse interactions', () => {\n let el: OverlayTrigger;\n let button: ActionButton;\n let tooltip: Tooltip;\n beforeEach(async () => {\n el = await fixture<OverlayTrigger>(\n (() => html`\n <overlay-trigger placement=\"right-start\">\n <sp-action-button slot=\"trigger\">\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-tooltip slot=\"hover-content\" tip>\n Magnify\n </sp-tooltip>\n </overlay-trigger>\n `)()\n );\n await elementUpdated(el);\n button = el.querySelector('sp-action-button') as ActionButton;\n tooltip = el.querySelector('sp-tooltip') as Tooltip;\n });\n it('allows pointer to enter the \"tooltip\" without closing the \"tooltip\"', async () => {\n const opened = oneEvent(button, 'sp-opened');\n button.dispatchEvent(\n new MouseEvent('pointerenter', {\n bubbles: true,\n composed: true,\n })\n );\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n expect(tooltip.open).to.be.true;\n button.dispatchEvent(\n new MouseEvent('pointerleave', {\n relatedTarget: tooltip,\n bubbles: true,\n composed: true,\n })\n );\n await nextFrame();\n tooltip.dispatchEvent(\n new MouseEvent('pointerleave', {\n relatedTarget: button,\n bubbles: true,\n composed: true,\n })\n );\n await opened;\n\n expect(el.open).to.equal('hover');\n\n const closed = oneEvent(button, 'sp-closed');\n button.dispatchEvent(\n new MouseEvent('pointerleave', {\n relatedTarget: null,\n bubbles: true,\n composed: true,\n })\n );\n await closed;\n\n expect(el.open).to.be.undefined;\n });\n it('closes the \"tooltip\" when leaving the \"tooltip\"', async () => {\n const opened = oneEvent(button, 'sp-opened');\n button.dispatchEvent(\n new MouseEvent('pointerenter', {\n bubbles: true,\n composed: true,\n })\n );\n await nextFrame();\n button.dispatchEvent(\n new MouseEvent('pointerleave', {\n relatedTarget: tooltip,\n bubbles: true,\n composed: true,\n })\n );\n await opened;\n\n expect(el.open).to.equal('hover');\n\n const closed = oneEvent(button, 'sp-closed');\n tooltip.dispatchEvent(\n new MouseEvent('pointerleave', {\n relatedTarget: null,\n bubbles: true,\n composed: true,\n })\n );\n await closed;\n\n expect(el.open).to.be.undefined;\n });\n });\n it('persists hover content', async () => {\n const el = await fixture<OverlayTrigger>(\n (() => html`\n <overlay-trigger placement=\"right-start\">\n <sp-action-button slot=\"trigger\">\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-popover slot=\"hover-content\" tip></sp-popover>\n </overlay-trigger>\n `)()\n );\n await elementUpdated(el);\n\n expect(el.open).to.be.undefined;\n\n const trigger = el.querySelector('[slot=\"trigger\"]') as ActionButton;\n const opened = oneEvent(trigger, 'sp-opened');\n trigger.dispatchEvent(\n new Event('pointerenter', {\n bubbles: true,\n composed: true,\n })\n );\n await opened;\n\n expect(el.open).to.equal('hover');\n\n trigger.click();\n\n await elementUpdated(el);\n\n expect(el.open).to.equal('hover');\n });\n it('closes persistent hover content on `longpress`', async () => {\n const el = await fixture<OverlayTrigger>(\n (() => html`\n <overlay-trigger placement=\"right-start\">\n <sp-action-button slot=\"trigger\">\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-popover slot=\"hover-content\" tip></sp-popover>\n <sp-popover slot=\"longpress-content\" tip></sp-popover>\n </overlay-trigger>\n `)()\n );\n await elementUpdated(el);\n\n expect(el.open).to.be.undefined;\n\n const trigger = el.querySelector('[slot=\"trigger\"]') as ActionButton;\n let opened = oneEvent(trigger, 'sp-opened');\n trigger.dispatchEvent(\n new Event('pointerenter', {\n bubbles: true,\n })\n );\n await opened;\n\n expect(el.open).to.equal('hover');\n\n opened = oneEvent(trigger, 'sp-opened');\n trigger.dispatchEvent(\n new Event('longpress', {\n bubbles: true,\n })\n );\n await opened;\n\n expect(el.open).to.equal('longpress');\n });\n it('closes `hover` overlay when [type=\"modal\"]', async () => {\n const el = await fixture<OverlayTrigger>(\n (() => html`\n <overlay-trigger placement=\"right-start\" type=\"modal\">\n <sp-action-button slot=\"trigger\">\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-popover slot=\"hover-content\" tip></sp-popover>\n </overlay-trigger>\n `)()\n );\n await elementUpdated(el);\n\n expect(el.open).to.be.undefined;\n\n const trigger = el.querySelector('[slot=\"trigger\"]') as ActionButton;\n const opened = oneEvent(el, 'sp-opened');\n trigger.focus();\n await opened;\n\n expect(el.open).to.equal('hover');\n\n const closed = oneEvent(el, 'sp-closed');\n trigger.blur();\n await closed;\n\n expect(el.open).to.be.undefined;\n });\n it('will not return focus to a \"modal\" parent', async () => {\n // // There is an `sp-dialog-base` recyling issue in Firefox\n // if (isFirefox()) {\n // return;\n // }\n const el = await styledFixture<OverlayTrigger>(html`\n <overlay-trigger type=\"modal\" placement=\"none\">\n <sp-button slot=\"trigger\">Toggle Dialog</sp-button>\n <sp-dialog-wrapper\n slot=\"click-content\"\n headline=\"Dialog title\"\n size=\"s\"\n >\n ${[1, 2, 3, 4].map(\n (index) => html`\n <overlay-trigger>\n <sp-button slot=\"trigger\" id=\"button-${index}\">\n Button with Tooltip ${index}\n </sp-button>\n <sp-tooltip slot=\"hover-content\">\n Tooltip ${index}\n </sp-tooltip>\n </overlay-trigger>\n `\n )}\n </sp-dialog-wrapper>\n </overlay-trigger>\n `);\n await elementUpdated(el);\n\n const button = el.querySelector('sp-button') as Button;\n const dialog = el.querySelector('sp-dialog-wrapper') as HTMLElement;\n const button1 = dialog.querySelector('#button-1') as Button;\n const button2 = dialog.querySelector('#button-2') as Button;\n const button3 = dialog.querySelector('#button-3') as Button;\n await elementUpdated(button);\n await elementUpdated(dialog);\n\n let opened = oneEvent(button, 'sp-opened');\n const openedHint = oneEvent(button1, 'sp-opened');\n button.dispatchEvent(new Event('click', { bubbles: true }));\n await opened;\n await openedHint;\n\n expect(button1 === document.activeElement).to.be.true;\n\n opened = oneEvent(button2, 'sp-opened');\n sendKeys({\n press: 'Tab',\n });\n await opened;\n\n expect(button2 === document.activeElement).to.be.true;\n\n opened = oneEvent(button3, 'sp-opened');\n sendKeys({\n press: 'Tab',\n });\n await opened;\n\n expect(button3 === document.activeElement).to.be.true;\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|