@spectrum-web-components/overlay 1.1.0-beta.8 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/package.json +7 -7
  2. package/overlay-trigger.d.ts +0 -6
  3. package/overlay-trigger.dev.js +0 -5
  4. package/overlay-trigger.dev.js.map +0 -7
  5. package/overlay-trigger.js +0 -2
  6. package/overlay-trigger.js.map +0 -7
  7. package/sp-overlay.d.ts +0 -6
  8. package/sp-overlay.dev.js +0 -5
  9. package/sp-overlay.dev.js.map +0 -7
  10. package/sp-overlay.js +0 -2
  11. package/sp-overlay.js.map +0 -7
  12. package/src/AbstractOverlay.d.ts +0 -72
  13. package/src/AbstractOverlay.dev.js +0 -234
  14. package/src/AbstractOverlay.dev.js.map +0 -7
  15. package/src/AbstractOverlay.js +0 -2
  16. package/src/AbstractOverlay.js.map +0 -7
  17. package/src/ClickController.d.ts +0 -14
  18. package/src/ClickController.dev.js +0 -42
  19. package/src/ClickController.dev.js.map +0 -7
  20. package/src/ClickController.js +0 -2
  21. package/src/ClickController.js.map +0 -7
  22. package/src/HoverController.d.ts +0 -20
  23. package/src/HoverController.dev.js +0 -153
  24. package/src/HoverController.dev.js.map +0 -7
  25. package/src/HoverController.js +0 -2
  26. package/src/HoverController.js.map +0 -7
  27. package/src/InteractionController.d.ts +0 -38
  28. package/src/InteractionController.dev.js +0 -90
  29. package/src/InteractionController.dev.js.map +0 -7
  30. package/src/InteractionController.js +0 -2
  31. package/src/InteractionController.js.map +0 -7
  32. package/src/LongpressController.d.ts +0 -21
  33. package/src/LongpressController.dev.js +0 -156
  34. package/src/LongpressController.dev.js.map +0 -7
  35. package/src/LongpressController.js +0 -2
  36. package/src/LongpressController.js.map +0 -7
  37. package/src/Overlay.d.ts +0 -134
  38. package/src/Overlay.dev.js +0 -534
  39. package/src/Overlay.dev.js.map +0 -7
  40. package/src/Overlay.js +0 -33
  41. package/src/Overlay.js.map +0 -7
  42. package/src/OverlayDialog.d.ts +0 -4
  43. package/src/OverlayDialog.dev.js +0 -139
  44. package/src/OverlayDialog.dev.js.map +0 -7
  45. package/src/OverlayDialog.js +0 -2
  46. package/src/OverlayDialog.js.map +0 -7
  47. package/src/OverlayNoPopover.d.ts +0 -4
  48. package/src/OverlayNoPopover.dev.js +0 -117
  49. package/src/OverlayNoPopover.dev.js.map +0 -7
  50. package/src/OverlayNoPopover.js +0 -2
  51. package/src/OverlayNoPopover.js.map +0 -7
  52. package/src/OverlayPopover.d.ts +0 -4
  53. package/src/OverlayPopover.dev.js +0 -199
  54. package/src/OverlayPopover.dev.js.map +0 -7
  55. package/src/OverlayPopover.js +0 -2
  56. package/src/OverlayPopover.js.map +0 -7
  57. package/src/OverlayStack.d.ts +0 -44
  58. package/src/OverlayStack.dev.js +0 -160
  59. package/src/OverlayStack.dev.js.map +0 -7
  60. package/src/OverlayStack.js +0 -2
  61. package/src/OverlayStack.js.map +0 -7
  62. package/src/OverlayTrigger.d.ts +0 -52
  63. package/src/OverlayTrigger.dev.js +0 -243
  64. package/src/OverlayTrigger.dev.js.map +0 -7
  65. package/src/OverlayTrigger.js +0 -57
  66. package/src/OverlayTrigger.js.map +0 -7
  67. package/src/PlacementController.d.ts +0 -40
  68. package/src/PlacementController.dev.js +0 -212
  69. package/src/PlacementController.dev.js.map +0 -7
  70. package/src/PlacementController.js +0 -2
  71. package/src/PlacementController.js.map +0 -7
  72. package/src/VirtualTrigger.d.ts +0 -7
  73. package/src/VirtualTrigger.dev.js +0 -32
  74. package/src/VirtualTrigger.dev.js.map +0 -7
  75. package/src/VirtualTrigger.js +0 -2
  76. package/src/VirtualTrigger.js.map +0 -7
  77. package/src/events.d.ts +0 -23
  78. package/src/events.dev.js +0 -39
  79. package/src/events.dev.js.map +0 -7
  80. package/src/events.js +0 -2
  81. package/src/events.js.map +0 -7
  82. package/src/fullSizePlugin.d.ts +0 -12
  83. package/src/fullSizePlugin.dev.js +0 -39
  84. package/src/fullSizePlugin.dev.js.map +0 -7
  85. package/src/fullSizePlugin.js +0 -2
  86. package/src/fullSizePlugin.js.map +0 -7
  87. package/src/index.d.ts +0 -6
  88. package/src/index.dev.js +0 -8
  89. package/src/index.dev.js.map +0 -7
  90. package/src/index.js +0 -2
  91. package/src/index.js.map +0 -7
  92. package/src/loader.d.ts +0 -4
  93. package/src/loader.dev.js +0 -11
  94. package/src/loader.dev.js.map +0 -7
  95. package/src/loader.js +0 -2
  96. package/src/loader.js.map +0 -7
  97. package/src/overlay-events.d.ts +0 -11
  98. package/src/overlay-events.dev.js +0 -8
  99. package/src/overlay-events.dev.js.map +0 -7
  100. package/src/overlay-events.js +0 -2
  101. package/src/overlay-events.js.map +0 -7
  102. package/src/overlay-timer.d.ts +0 -22
  103. package/src/overlay-timer.dev.js +0 -72
  104. package/src/overlay-timer.dev.js.map +0 -7
  105. package/src/overlay-timer.js +0 -2
  106. package/src/overlay-timer.js.map +0 -7
  107. package/src/overlay-trigger-directive.d.ts +0 -26
  108. package/src/overlay-trigger-directive.dev.js +0 -87
  109. package/src/overlay-trigger-directive.dev.js.map +0 -7
  110. package/src/overlay-trigger-directive.js +0 -2
  111. package/src/overlay-trigger-directive.js.map +0 -7
  112. package/src/overlay-trigger.css.d.ts +0 -2
  113. package/src/overlay-trigger.css.dev.js +0 -7
  114. package/src/overlay-trigger.css.dev.js.map +0 -7
  115. package/src/overlay-trigger.css.js +0 -4
  116. package/src/overlay-trigger.css.js.map +0 -7
  117. package/src/overlay-types.d.ts +0 -50
  118. package/src/overlay-types.dev.js +0 -3
  119. package/src/overlay-types.dev.js.map +0 -7
  120. package/src/overlay-types.js +0 -2
  121. package/src/overlay-types.js.map +0 -7
  122. package/src/overlay.css.d.ts +0 -2
  123. package/src/overlay.css.dev.js +0 -7
  124. package/src/overlay.css.dev.js.map +0 -7
  125. package/src/overlay.css.js +0 -4
  126. package/src/overlay.css.js.map +0 -7
  127. package/src/slottable-request-directive.d.ts +0 -17
  128. package/src/slottable-request-directive.dev.js +0 -66
  129. package/src/slottable-request-directive.dev.js.map +0 -7
  130. package/src/slottable-request-directive.js +0 -2
  131. package/src/slottable-request-directive.js.map +0 -7
  132. package/src/slottable-request-event.d.ts +0 -12
  133. package/src/slottable-request-event.dev.js +0 -28
  134. package/src/slottable-request-event.dev.js.map +0 -7
  135. package/src/slottable-request-event.js +0 -2
  136. package/src/slottable-request-event.js.map +0 -7
  137. package/src/strategies.d.ts +0 -8
  138. package/src/strategies.dev.js +0 -10
  139. package/src/strategies.dev.js.map +0 -7
  140. package/src/strategies.js +0 -2
  141. package/src/strategies.js.map +0 -7
  142. package/stories/index.js +0 -40
  143. package/stories/index.js.map +0 -7
  144. package/stories/overlay-directive.stories.js +0 -324
  145. package/stories/overlay-directive.stories.js.map +0 -7
  146. package/stories/overlay-element.stories.js +0 -675
  147. package/stories/overlay-element.stories.js.map +0 -7
  148. package/stories/overlay-story-components.js +0 -338
  149. package/stories/overlay-story-components.js.map +0 -7
  150. package/stories/overlay.stories.js +0 -1397
  151. package/stories/overlay.stories.js.map +0 -7
  152. package/sync/overlay-trigger.d.ts +0 -6
  153. package/sync/overlay-trigger.dev.js +0 -6
  154. package/sync/overlay-trigger.dev.js.map +0 -7
  155. package/sync/overlay-trigger.js +0 -2
  156. package/sync/overlay-trigger.js.map +0 -7
  157. package/test/benchmark/basic-test.js +0 -40
  158. package/test/benchmark/basic-test.js.map +0 -7
  159. package/test/benchmark/directive-test.js +0 -43
  160. package/test/benchmark/directive-test.js.map +0 -7
  161. package/test/benchmark/element-test.js +0 -40
  162. package/test/benchmark/element-test.js.map +0 -7
  163. package/test/benchmark/lazy-test.js +0 -47
  164. package/test/benchmark/lazy-test.js.map +0 -7
  165. package/test/index.js +0 -605
  166. package/test/index.js.map +0 -7
  167. package/test/overlay-directive.test-vrt.js +0 -5
  168. package/test/overlay-directive.test-vrt.js.map +0 -7
  169. package/test/overlay-directive.test.js +0 -162
  170. package/test/overlay-directive.test.js.map +0 -7
  171. package/test/overlay-element.test-vrt.js +0 -5
  172. package/test/overlay-element.test-vrt.js.map +0 -7
  173. package/test/overlay-element.test.js +0 -936
  174. package/test/overlay-element.test.js.map +0 -7
  175. package/test/overlay-lifecycle.test.js +0 -139
  176. package/test/overlay-lifecycle.test.js.map +0 -7
  177. package/test/overlay-memory.test.js +0 -10
  178. package/test/overlay-memory.test.js.map +0 -7
  179. package/test/overlay-timer.test.js +0 -118
  180. package/test/overlay-timer.test.js.map +0 -7
  181. package/test/overlay-trigger-click.test.js +0 -164
  182. package/test/overlay-trigger-click.test.js.map +0 -7
  183. package/test/overlay-trigger-directive.test.js +0 -75
  184. package/test/overlay-trigger-directive.test.js.map +0 -7
  185. package/test/overlay-trigger-extended.test.js +0 -235
  186. package/test/overlay-trigger-extended.test.js.map +0 -7
  187. package/test/overlay-trigger-hover-click.test.js +0 -225
  188. package/test/overlay-trigger-hover-click.test.js.map +0 -7
  189. package/test/overlay-trigger-hover.test.js +0 -308
  190. package/test/overlay-trigger-hover.test.js.map +0 -7
  191. package/test/overlay-trigger-longpress.test.js +0 -549
  192. package/test/overlay-trigger-longpress.test.js.map +0 -7
  193. package/test/overlay-trigger-sync.test.js +0 -5
  194. package/test/overlay-trigger-sync.test.js.map +0 -7
  195. package/test/overlay-trigger.test.js +0 -5
  196. package/test/overlay-trigger.test.js.map +0 -7
  197. package/test/overlay-update.test.js +0 -28
  198. package/test/overlay-update.test.js.map +0 -7
  199. package/test/overlay-v1.test.js +0 -569
  200. package/test/overlay-v1.test.js.map +0 -7
  201. package/test/overlay.test-vrt.js +0 -5
  202. package/test/overlay.test-vrt.js.map +0 -7
  203. package/test/overlay.test.js +0 -776
  204. package/test/overlay.test.js.map +0 -7
@@ -1,936 +0,0 @@
1
- "use strict";
2
- import {
3
- aTimeout,
4
- elementUpdated,
5
- expect,
6
- fixture,
7
- html,
8
- nextFrame,
9
- oneEvent
10
- } from "@open-wc/testing";
11
- import "@spectrum-web-components/overlay/sp-overlay.js";
12
- import "@spectrum-web-components/tooltip/sp-tooltip.js";
13
- import "@spectrum-web-components/popover/sp-popover.js";
14
- import "@spectrum-web-components/theme/sp-theme.js";
15
- import "@spectrum-web-components/theme/src/themes.js";
16
- import "@spectrum-web-components/button/sp-button.js";
17
- import { sendMouse } from "../../../test/plugins/browser.js";
18
- import { sendKeys } from "@web/test-runner-commands";
19
- import {
20
- click,
21
- receivesFocus,
22
- withSlider
23
- } from "../stories/overlay-element.stories.js";
24
- import {
25
- removeSlottableRequest
26
- } from "../src/slottable-request-event.js";
27
- import { stub } from "sinon";
28
- const OVERLAY_TYPES = ["modal", "page", "hint", "auto", "manual"];
29
- async function styledFixture(story) {
30
- const test = await fixture(html`
31
- <sp-theme system="spectrum" scale="medium" color="light">
32
- ${story}
33
- </sp-theme>
34
- `);
35
- return test.children[0];
36
- }
37
- describe("sp-overlay", () => {
38
- function opensDeclaratively(overlayType) {
39
- it(`as [type="'${overlayType}'"]`, async () => {
40
- const el = await styledFixture(html`
41
- <sp-overlay open type=${overlayType}>
42
- <sp-tooltip>Content</sp-tooltip>
43
- </sp-overlay>
44
- `);
45
- const content = el.children[0];
46
- let opened = oneEvent(el, "sp-opened");
47
- await opened;
48
- expect(content.open).to.be.true;
49
- const closed = oneEvent(el, "sp-closed");
50
- el.open = false;
51
- await closed;
52
- expect(content.open).to.be.false;
53
- opened = oneEvent(el, "sp-opened");
54
- el.open = true;
55
- await opened;
56
- expect(content.open).to.be.true;
57
- });
58
- }
59
- describe("`slottable-request` event", () => {
60
- it("dispatched before `sp-opened`", async function() {
61
- let slottableRequestTime = 0;
62
- let openedTime = 0;
63
- const el = await fixture(html`
64
- <sp-overlay
65
- @slottable-request=${() => slottableRequestTime = performance.now()}
66
- @sp-opened=${() => openedTime = performance.now()}
67
- >
68
- <sp-popover>test</sp-popover>
69
- </sp-overlay>
70
- `);
71
- await elementUpdated(el);
72
- const opened = oneEvent(el, "sp-opened");
73
- el.open = true;
74
- await opened;
75
- expect(slottableRequestTime).to.be.lt(openedTime);
76
- });
77
- it("dispatched after `sp-closed`", async function() {
78
- let slottableRequestTime = 0;
79
- let closedTime = 0;
80
- const el = await fixture(html`
81
- <sp-overlay
82
- @sp-closed=${() => closedTime = performance.now()}
83
- @slottable-request=${() => slottableRequestTime = performance.now()}
84
- >
85
- <sp-popover>test</sp-popover>
86
- </sp-overlay>
87
- `);
88
- await elementUpdated(el);
89
- const opened = oneEvent(el, "sp-opened");
90
- el.open = true;
91
- await opened;
92
- await nextFrame();
93
- await nextFrame();
94
- const closed = oneEvent(el, "sp-closed");
95
- el.open = false;
96
- await closed;
97
- await nextFrame();
98
- await nextFrame();
99
- expect(
100
- slottableRequestTime,
101
- `slottable-request: ${slottableRequestTime}, sp-closed: ${closedTime}`
102
- ).to.be.gt(closedTime);
103
- });
104
- it("follows transition timing from lazily added children", async function() {
105
- let slottableRequestTime = 0;
106
- let openedTime = 0;
107
- const popover = document.createElement("sp-popover");
108
- popover.textContent = "Test";
109
- const el = await fixture(html`
110
- <sp-overlay
111
- @slottable-request=${(event) => {
112
- slottableRequestTime = performance.now();
113
- if (event.data !== removeSlottableRequest) {
114
- event.target.append(popover);
115
- } else {
116
- popover.remove();
117
- }
118
- }}
119
- @sp-opened=${() => openedTime = performance.now()}
120
- ></sp-overlay>
121
- `);
122
- await elementUpdated(el);
123
- const opened = oneEvent(el, "sp-opened");
124
- el.open = true;
125
- await opened;
126
- expect(slottableRequestTime).to.be.lte(openedTime);
127
- expect(openedTime - slottableRequestTime).to.be.gt(130);
128
- });
129
- describe("dev mode", () => {
130
- let consoleWarnStub;
131
- before(() => {
132
- window.__swc.verbose = true;
133
- consoleWarnStub = stub(console, "warn");
134
- });
135
- afterEach(() => {
136
- consoleWarnStub.resetHistory();
137
- });
138
- after(() => {
139
- window.__swc.verbose = false;
140
- consoleWarnStub.restore();
141
- });
142
- it("warns that `slottable-request` events are experimental", async () => {
143
- const el = await fixture(html`
144
- <sp-overlay>
145
- <sp-popover>test</sp-popover>
146
- </sp-overlay>
147
- `);
148
- await elementUpdated(el);
149
- const opened = oneEvent(el, "sp-opened");
150
- el.open = true;
151
- await opened;
152
- expect(consoleWarnStub.called).to.be.true;
153
- const spyCall = consoleWarnStub.getCall(0);
154
- expect(
155
- spyCall.args.at(0).includes(
156
- "`slottable-request` events are experimental"
157
- ),
158
- "`slottable-request`-centric message"
159
- ).to.be.true;
160
- expect(
161
- spyCall.args.at(-1),
162
- "confirm `data` shape"
163
- ).to.deep.equal({
164
- data: {
165
- localName: "base",
166
- type: "api",
167
- level: "high"
168
- }
169
- });
170
- });
171
- });
172
- });
173
- describe('[type="modal"]', () => {
174
- opensDeclaratively("modal");
175
- describe("interaction with other non-ancestor overlays", function() {
176
- beforeEach(async function() {
177
- this.fixture = await styledFixture(html`
178
- <div>
179
- ${OVERLAY_TYPES.map(
180
- (type) => html`
181
- <sp-overlay type=${type}>
182
- <sp-tooltip>${type} Content</sp-tooltip>
183
- </sp-overlay>
184
- `
185
- )}
186
- </div>
187
- `);
188
- this.modal = this.fixture.querySelector(
189
- '[type="modal"]'
190
- );
191
- this.page = this.fixture.querySelector(
192
- '[type="page"]'
193
- );
194
- this.hint = this.fixture.querySelector(
195
- '[type="hint"]'
196
- );
197
- this.auto = this.fixture.querySelector(
198
- '[type="auto"]'
199
- );
200
- this.manual = this.fixture.querySelector(
201
- '[type="manual"]'
202
- );
203
- expect(this.modal.open).to.be.false;
204
- expect(this.page.open).to.be.false;
205
- expect(this.hint.open).to.be.false;
206
- expect(this.auto.open).to.be.false;
207
- expect(this.manual.open).to.be.false;
208
- });
209
- afterEach(async function() {
210
- const closed = oneEvent(this.modal, "sp-closed");
211
- this.modal.open = false;
212
- await closed;
213
- });
214
- it('closes "page" overlays when opening', async function() {
215
- let opened = oneEvent(this.page, "sp-opened");
216
- this.page.open = true;
217
- await opened;
218
- expect(this.modal.open).to.be.false;
219
- expect(this.page.open).to.be.true;
220
- expect(this.hint.open).to.be.false;
221
- expect(this.auto.open).to.be.false;
222
- expect(this.manual.open).to.be.false;
223
- opened = oneEvent(this.modal, "sp-opened");
224
- const closed = oneEvent(this.page, "sp-closed");
225
- this.modal.open = true;
226
- await opened;
227
- await closed;
228
- expect(this.modal.open).to.be.true;
229
- expect(this.page.open).to.be.false;
230
- expect(this.hint.open).to.be.false;
231
- expect(this.auto.open).to.be.false;
232
- expect(this.manual.open).to.be.false;
233
- });
234
- it('closes "hint" overlays when opening', async function() {
235
- let opened = oneEvent(this.hint, "sp-opened");
236
- this.hint.open = true;
237
- await opened;
238
- expect(this.modal.open).to.be.false;
239
- expect(this.page.open).to.be.false;
240
- expect(this.hint.open).to.be.true;
241
- expect(this.auto.open).to.be.false;
242
- expect(this.manual.open).to.be.false;
243
- opened = oneEvent(this.modal, "sp-opened");
244
- const closed = oneEvent(this.hint, "sp-closed");
245
- this.modal.open = true;
246
- await opened;
247
- await closed;
248
- expect(this.modal.open).to.be.true;
249
- expect(this.page.open).to.be.false;
250
- expect(this.hint.open).to.be.false;
251
- expect(this.auto.open).to.be.false;
252
- expect(this.manual.open).to.be.false;
253
- });
254
- it('closes "auto" overlays when opening', async function() {
255
- let opened = oneEvent(this.auto, "sp-opened");
256
- this.auto.open = true;
257
- await opened;
258
- expect(this.modal.open).to.be.false;
259
- expect(this.page.open).to.be.false;
260
- expect(this.hint.open).to.be.false;
261
- expect(this.auto.open).to.be.true;
262
- expect(this.manual.open).to.be.false;
263
- opened = oneEvent(this.modal, "sp-opened");
264
- const closed = oneEvent(this.auto, "sp-closed");
265
- this.modal.open = true;
266
- await opened;
267
- await closed;
268
- expect(this.modal.open).to.be.true;
269
- expect(this.page.open).to.be.false;
270
- expect(this.hint.open).to.be.false;
271
- expect(this.auto.open).to.be.false;
272
- expect(this.manual.open).to.be.false;
273
- });
274
- it('does not close "manual" overlays when opening', async function() {
275
- let opened = oneEvent(this.manual, "sp-opened");
276
- this.manual.open = true;
277
- await opened;
278
- expect(this.modal.open).to.be.false;
279
- expect(this.page.open).to.be.false;
280
- expect(this.hint.open).to.be.false;
281
- expect(this.auto.open).to.be.false;
282
- expect(this.manual.open).to.be.true;
283
- opened = oneEvent(this.modal, "sp-opened");
284
- this.modal.open = true;
285
- await opened;
286
- expect(this.modal.open).to.be.true;
287
- expect(this.page.open).to.be.false;
288
- expect(this.hint.open).to.be.false;
289
- expect(this.auto.open).to.be.false;
290
- expect(this.manual.open).to.be.true;
291
- });
292
- });
293
- });
294
- describe('[type="page"]', () => {
295
- opensDeclaratively("page");
296
- describe("interaction with other non-ancestor overlays", function() {
297
- beforeEach(async function() {
298
- this.fixture = await styledFixture(html`
299
- <div>
300
- ${OVERLAY_TYPES.map(
301
- (type) => html`
302
- <sp-overlay type=${type}>
303
- <sp-tooltip>${type} Content</sp-tooltip>
304
- </sp-overlay>
305
- `
306
- )}
307
- </div>
308
- `);
309
- this.modal = this.fixture.querySelector(
310
- '[type="modal"]'
311
- );
312
- this.page = this.fixture.querySelector(
313
- '[type="page"]'
314
- );
315
- this.hint = this.fixture.querySelector(
316
- '[type="hint"]'
317
- );
318
- this.auto = this.fixture.querySelector(
319
- '[type="auto"]'
320
- );
321
- this.manual = this.fixture.querySelector(
322
- '[type="manual"]'
323
- );
324
- expect(this.modal.open).to.be.false;
325
- expect(this.page.open).to.be.false;
326
- expect(this.hint.open).to.be.false;
327
- expect(this.auto.open).to.be.false;
328
- expect(this.manual.open).to.be.false;
329
- });
330
- afterEach(async function() {
331
- const closed = oneEvent(this.page, "sp-closed");
332
- this.page.open = false;
333
- await closed;
334
- });
335
- it('closes "page" overlays when opening', async function() {
336
- let opened = oneEvent(this.modal, "sp-opened");
337
- this.modal.open = true;
338
- await opened;
339
- expect(this.modal.open).to.be.true;
340
- expect(this.page.open).to.be.false;
341
- expect(this.hint.open).to.be.false;
342
- expect(this.auto.open).to.be.false;
343
- expect(this.manual.open).to.be.false;
344
- opened = oneEvent(this.page, "sp-opened");
345
- const closed = oneEvent(this.modal, "sp-closed");
346
- this.page.open = true;
347
- await opened;
348
- await closed;
349
- expect(this.modal.open).to.be.false;
350
- expect(this.page.open).to.be.true;
351
- expect(this.hint.open).to.be.false;
352
- expect(this.auto.open).to.be.false;
353
- expect(this.manual.open).to.be.false;
354
- });
355
- it('closes "hint" overlays when opening', async function() {
356
- let opened = oneEvent(this.hint, "sp-opened");
357
- this.hint.open = true;
358
- await opened;
359
- expect(this.modal.open).to.be.false;
360
- expect(this.page.open).to.be.false;
361
- expect(this.hint.open).to.be.true;
362
- expect(this.auto.open).to.be.false;
363
- expect(this.manual.open).to.be.false;
364
- opened = oneEvent(this.page, "sp-opened");
365
- const closed = oneEvent(this.hint, "sp-closed");
366
- this.page.open = true;
367
- await opened;
368
- await closed;
369
- expect(this.modal.open).to.be.false;
370
- expect(this.page.open).to.be.true;
371
- expect(this.hint.open).to.be.false;
372
- expect(this.auto.open).to.be.false;
373
- expect(this.manual.open).to.be.false;
374
- });
375
- it('closes "auto" overlays when opening', async function() {
376
- let opened = oneEvent(this.auto, "sp-opened");
377
- this.auto.open = true;
378
- await opened;
379
- expect(this.modal.open).to.be.false;
380
- expect(this.page.open).to.be.false;
381
- expect(this.hint.open).to.be.false;
382
- expect(this.auto.open).to.be.true;
383
- expect(this.manual.open).to.be.false;
384
- opened = oneEvent(this.page, "sp-opened");
385
- const closed = oneEvent(this.auto, "sp-closed");
386
- this.page.open = true;
387
- await opened;
388
- await closed;
389
- expect(this.modal.open).to.be.false;
390
- expect(this.page.open).to.be.true;
391
- expect(this.hint.open).to.be.false;
392
- expect(this.auto.open).to.be.false;
393
- expect(this.manual.open).to.be.false;
394
- });
395
- it('does not close "manual" overlays when opening', async function() {
396
- let opened = oneEvent(this.manual, "sp-opened");
397
- this.manual.open = true;
398
- await opened;
399
- expect(this.modal.open).to.be.false;
400
- expect(this.page.open).to.be.false;
401
- expect(this.hint.open).to.be.false;
402
- expect(this.auto.open).to.be.false;
403
- expect(this.manual.open).to.be.true;
404
- opened = oneEvent(this.page, "sp-opened");
405
- this.page.open = true;
406
- await opened;
407
- expect(this.modal.open).to.be.false;
408
- expect(this.page.open).to.be.true;
409
- expect(this.hint.open).to.be.false;
410
- expect(this.auto.open).to.be.false;
411
- expect(this.manual.open).to.be.true;
412
- });
413
- });
414
- it("ignores Escape key interactions", async () => {
415
- const el = await styledFixture(html`
416
- <sp-overlay type="page">
417
- <sp-popover>This is a "page" Overlay</sp-popover>
418
- </sp-overlay>
419
- `);
420
- const opened = oneEvent(el, "sp-opened");
421
- el.open = true;
422
- await opened;
423
- expect(el.open).to.be.true;
424
- await sendKeys({
425
- press: "Escape"
426
- });
427
- await elementUpdated(el);
428
- expect(el.open).to.be.true;
429
- });
430
- });
431
- describe('[type="hint"]', () => {
432
- opensDeclaratively("hint");
433
- it("closes other `[type=hint]` overlays when opening", async () => {
434
- const test = await styledFixture(html`
435
- <div>
436
- ${[1, 2].map(
437
- (overlay) => html`
438
- <sp-overlay type="hint" class="hint-${overlay}">
439
- <sp-tooltip>Hint ${overlay} Content</sp-tooltip>
440
- </sp-overlay>
441
- `
442
- )}
443
- </div>
444
- `);
445
- const hint1 = test.querySelector(".hint-1");
446
- const hint2 = test.querySelector(".hint-2");
447
- expect(hint1.open).to.be.false;
448
- expect(hint2.open).to.be.false;
449
- let opened = oneEvent(hint1, "sp-opened");
450
- hint1.open = true;
451
- await opened;
452
- expect(hint1.open).to.be.true;
453
- expect(hint2.open).to.be.false;
454
- opened = oneEvent(hint2, "sp-opened");
455
- let closed = oneEvent(hint1, "sp-closed");
456
- hint2.open = true;
457
- await opened;
458
- await closed;
459
- expect(hint1.open).to.be.false;
460
- expect(hint2.open).to.be.true;
461
- opened = oneEvent(hint1, "sp-opened");
462
- closed = oneEvent(hint2, "sp-closed");
463
- hint1.open = true;
464
- await opened;
465
- await closed;
466
- expect(hint1.open).to.be.true;
467
- expect(hint2.open).to.be.false;
468
- });
469
- it("stays open when pointer enters overlay from trigger element", async () => {
470
- const test = await styledFixture(html`
471
- <div>
472
- <sp-button id="test-button">This is a button.</sp-button>
473
- <sp-overlay
474
- trigger="test-button@hover"
475
- type="hint"
476
- placement="bottom"
477
- offset="-10"
478
- >
479
- <sp-tooltip>Help text.</sp-tooltip>
480
- </sp-overlay>
481
- </div>
482
- `);
483
- const button = test.querySelector("sp-button");
484
- const overlay = test.querySelector(
485
- "sp-overlay"
486
- );
487
- const el = test.querySelector("sp-tooltip");
488
- const buttonRect = button.getBoundingClientRect();
489
- const buttonPoint = [
490
- buttonRect.x + buttonRect.width / 2,
491
- buttonRect.y + buttonRect.height - 2
492
- ];
493
- await elementUpdated(overlay);
494
- await expect(button).to.be.accessible();
495
- let opened = oneEvent(button, "sp-opened");
496
- await sendMouse({
497
- steps: [
498
- {
499
- type: "move",
500
- position: buttonPoint
501
- }
502
- ]
503
- });
504
- await elementUpdated(overlay);
505
- await nextFrame();
506
- await nextFrame();
507
- expect(overlay.open).to.be.true;
508
- await sendMouse({
509
- steps: [
510
- {
511
- type: "move",
512
- position: [
513
- buttonRect.x + buttonRect.width / 2,
514
- buttonRect.y + buttonRect.height - 1
515
- ]
516
- },
517
- {
518
- type: "move",
519
- position: [
520
- buttonRect.x + buttonRect.width / 2,
521
- buttonRect.y + buttonRect.height
522
- ]
523
- },
524
- {
525
- type: "move",
526
- position: [
527
- buttonRect.x + buttonRect.width / 2,
528
- buttonRect.y + buttonRect.height + 1
529
- ]
530
- }
531
- ]
532
- });
533
- await nextFrame();
534
- await nextFrame();
535
- expect(overlay.open).to.be.true;
536
- await opened;
537
- expect(el.open).to.be.true;
538
- await expect(button).to.be.accessible();
539
- let closed = oneEvent(button, "sp-closed");
540
- await sendMouse({
541
- steps: [
542
- {
543
- type: "move",
544
- position: buttonPoint
545
- }
546
- ]
547
- });
548
- await sendMouse({
549
- steps: [
550
- {
551
- type: "move",
552
- position: [
553
- buttonRect.x + buttonRect.width * 2,
554
- buttonRect.y + buttonRect.height * 2
555
- ]
556
- }
557
- ]
558
- });
559
- await closed;
560
- expect(el.open).to.be.false;
561
- opened = oneEvent(button, "sp-opened");
562
- await sendMouse({
563
- steps: [
564
- {
565
- type: "move",
566
- position: buttonPoint
567
- }
568
- ]
569
- });
570
- await opened;
571
- await elementUpdated(el);
572
- closed = oneEvent(button, "sp-closed");
573
- await sendMouse({
574
- steps: [
575
- {
576
- type: "move",
577
- position: [
578
- buttonRect.x + buttonRect.width * 2,
579
- buttonRect.y + buttonRect.height * 2
580
- ]
581
- }
582
- ]
583
- });
584
- await closed;
585
- });
586
- it("stays open when pointer enters overlay from trigger element: self managed", async () => {
587
- const button = await styledFixture(html`
588
- <sp-button>
589
- This is a button.
590
- <sp-tooltip self-managed placement="bottom">
591
- Help text.
592
- </sp-tooltip>
593
- </sp-button>
594
- `);
595
- const el = button.querySelector("sp-tooltip");
596
- const buttonRect = button.getBoundingClientRect();
597
- const buttonPoint = [
598
- buttonRect.x + buttonRect.width / 2,
599
- buttonRect.y + buttonRect.height / 2
600
- ];
601
- await elementUpdated(el);
602
- await expect(button).to.be.accessible();
603
- let opened = oneEvent(button, "sp-opened");
604
- await sendMouse({
605
- steps: [
606
- {
607
- type: "move",
608
- position: buttonPoint
609
- }
610
- ]
611
- });
612
- await nextFrame();
613
- await nextFrame();
614
- await nextFrame();
615
- await nextFrame();
616
- const tooltipRect = el.shadowRoot.querySelector("#tooltip").getBoundingClientRect();
617
- const tooltipPoint = [
618
- tooltipRect.x + tooltipRect.width / 2,
619
- tooltipRect.y + tooltipRect.height / 2
620
- ];
621
- await sendMouse({
622
- steps: [
623
- {
624
- type: "move",
625
- position: tooltipPoint
626
- }
627
- ]
628
- });
629
- await opened;
630
- expect(el.open).to.be.true;
631
- await expect(button).to.be.accessible();
632
- let closed = oneEvent(button, "sp-closed");
633
- await sendMouse({
634
- steps: [
635
- {
636
- type: "move",
637
- position: buttonPoint
638
- }
639
- ]
640
- });
641
- await sendMouse({
642
- steps: [
643
- {
644
- type: "move",
645
- position: [
646
- buttonRect.x + buttonRect.width * 2,
647
- buttonRect.y + buttonRect.height * 2
648
- ]
649
- }
650
- ]
651
- });
652
- await closed;
653
- expect(el.open).to.be.false;
654
- opened = oneEvent(button, "sp-opened");
655
- await sendMouse({
656
- steps: [
657
- {
658
- type: "move",
659
- position: buttonPoint
660
- }
661
- ]
662
- });
663
- await opened;
664
- expect(el.open).to.be.true;
665
- closed = oneEvent(button, "sp-closed");
666
- sendMouse({
667
- steps: [
668
- {
669
- type: "move",
670
- position: [
671
- buttonRect.x + buttonRect.width * 2,
672
- buttonRect.y + buttonRect.height * 2
673
- ]
674
- }
675
- ]
676
- });
677
- await closed;
678
- expect(el.open).to.be.false;
679
- });
680
- });
681
- describe('[type="auto"]', () => {
682
- opensDeclaratively("auto");
683
- it("receives focus", async () => {
684
- const test = await fixture(html`
685
- <div>${receivesFocus(receivesFocus.args)}</div>
686
- `);
687
- const trigger = test.querySelector("#trigger");
688
- const overlay = test.querySelector("a");
689
- expect(document.activeElement === overlay).to.be.false;
690
- const opened = oneEvent(trigger, "sp-opened");
691
- trigger.click();
692
- await opened;
693
- expect(document.activeElement === overlay).to.be.true;
694
- });
695
- it("does not close when clicking a Slider track in the Overlay", async function() {
696
- const test = await fixture(html`
697
- <div>${withSlider()}</div>
698
- `);
699
- const el = test.querySelector("sp-overlay");
700
- const button = test.querySelector("sp-button");
701
- const slider = el.querySelector("sp-slider");
702
- const track = slider.shadowRoot.querySelector(
703
- "#track"
704
- );
705
- expect(el.open).to.be.false;
706
- const opened = oneEvent(el, "sp-opened");
707
- const buttonRect = button.getBoundingClientRect();
708
- sendMouse({
709
- steps: [
710
- {
711
- type: "click",
712
- position: [
713
- buttonRect.left + buttonRect.width / 2,
714
- buttonRect.top + buttonRect.height / 2
715
- ]
716
- }
717
- ]
718
- });
719
- await opened;
720
- expect(el.open).to.be.true;
721
- expect(slider.value).to.equal(5);
722
- const sliderRect = track.getBoundingClientRect();
723
- let pointerId = -1;
724
- slider.track.setPointerCapture = (id) => pointerId = id;
725
- slider.track.releasePointerCapture = (id) => pointerId = id;
726
- expect(pointerId).to.equal(-1);
727
- track.dispatchEvent(
728
- new PointerEvent("pointerdown", {
729
- clientX: sliderRect.left + sliderRect.width - 5,
730
- clientY: sliderRect.top + sliderRect.height / 2,
731
- pointerId: 1,
732
- cancelable: true,
733
- bubbles: true,
734
- composed: true,
735
- button: 0
736
- })
737
- );
738
- await elementUpdated(slider);
739
- track.dispatchEvent(
740
- new PointerEvent("pointerup", {
741
- pointerId: 1,
742
- cancelable: true,
743
- bubbles: true,
744
- composed: true
745
- })
746
- );
747
- await elementUpdated(slider);
748
- await aTimeout(1500);
749
- expect(slider.value).to.equal(19.5);
750
- expect(el.open).to.be.true;
751
- });
752
- });
753
- describe('[type="manual"]', () => {
754
- opensDeclaratively("manual");
755
- describe("interaction with other non-ancestor overlays", function() {
756
- beforeEach(async function() {
757
- this.fixture = await styledFixture(html`
758
- <div>
759
- ${OVERLAY_TYPES.map(
760
- (type) => html`
761
- <sp-overlay type=${type}>
762
- <sp-tooltip>${type} Content</sp-tooltip>
763
- </sp-overlay>
764
- `
765
- )}
766
- </div>
767
- `);
768
- this.modal = this.fixture.querySelector(
769
- '[type="modal"]'
770
- );
771
- this.page = this.fixture.querySelector(
772
- '[type="page"]'
773
- );
774
- this.hint = this.fixture.querySelector(
775
- '[type="hint"]'
776
- );
777
- this.auto = this.fixture.querySelector(
778
- '[type="auto"]'
779
- );
780
- this.manual = this.fixture.querySelector(
781
- '[type="manual"]'
782
- );
783
- expect(this.modal.open).to.be.false;
784
- expect(this.page.open).to.be.false;
785
- expect(this.hint.open).to.be.false;
786
- expect(this.auto.open).to.be.false;
787
- expect(this.manual.open).to.be.false;
788
- });
789
- afterEach(async function() {
790
- const closed = oneEvent(this.manual, "sp-closed");
791
- this.manual.open = false;
792
- await closed;
793
- });
794
- it('does not close "modal" overlays when opening', async function() {
795
- let opened = oneEvent(this.modal, "sp-opened");
796
- this.modal.open = true;
797
- await opened;
798
- expect(this.modal.open).to.be.true;
799
- expect(this.page.open).to.be.false;
800
- expect(this.hint.open).to.be.false;
801
- expect(this.auto.open).to.be.false;
802
- expect(this.manual.open).to.be.false;
803
- opened = oneEvent(this.manual, "sp-opened");
804
- this.manual.open = true;
805
- await opened;
806
- expect(this.modal.open).to.be.true;
807
- expect(this.page.open).to.be.false;
808
- expect(this.hint.open).to.be.false;
809
- expect(this.auto.open).to.be.false;
810
- expect(this.manual.open).to.be.true;
811
- });
812
- it('does not close "modal" overlays when opening', async function() {
813
- let opened = oneEvent(this.page, "sp-opened");
814
- this.page.open = true;
815
- await opened;
816
- expect(this.modal.open).to.be.false;
817
- expect(this.page.open).to.be.true;
818
- expect(this.hint.open).to.be.false;
819
- expect(this.auto.open).to.be.false;
820
- expect(this.manual.open).to.be.false;
821
- opened = oneEvent(this.manual, "sp-opened");
822
- this.manual.open = true;
823
- await opened;
824
- expect(this.modal.open).to.be.false;
825
- expect(this.page.open).to.be.true;
826
- expect(this.hint.open).to.be.false;
827
- expect(this.auto.open).to.be.false;
828
- expect(this.manual.open).to.be.true;
829
- });
830
- it('does not close "hint" overlays when opening', async function() {
831
- let opened = oneEvent(this.hint, "sp-opened");
832
- this.hint.open = true;
833
- await opened;
834
- expect(this.modal.open).to.be.false;
835
- expect(this.page.open).to.be.false;
836
- expect(this.hint.open).to.be.true;
837
- expect(this.auto.open).to.be.false;
838
- expect(this.manual.open).to.be.false;
839
- opened = oneEvent(this.manual, "sp-opened");
840
- this.manual.open = true;
841
- await opened;
842
- expect(this.modal.open).to.be.false;
843
- expect(this.page.open).to.be.false;
844
- expect(this.hint.open).to.be.true;
845
- expect(this.auto.open).to.be.false;
846
- expect(this.manual.open).to.be.true;
847
- });
848
- it('does not close "auto" overlays when opening', async function() {
849
- let opened = oneEvent(this.auto, "sp-opened");
850
- this.auto.open = true;
851
- await opened;
852
- expect(this.modal.open).to.be.false;
853
- expect(this.page.open).to.be.false;
854
- expect(this.hint.open).to.be.false;
855
- expect(this.auto.open).to.be.true;
856
- expect(this.manual.open).to.be.false;
857
- opened = oneEvent(this.manual, "sp-opened");
858
- this.manual.open = true;
859
- await opened;
860
- expect(this.modal.open).to.be.false;
861
- expect(this.page.open).to.be.false;
862
- expect(this.hint.open).to.be.false;
863
- expect(this.auto.open).to.be.true;
864
- expect(this.manual.open).to.be.true;
865
- });
866
- });
867
- describe("only close when manually closed", function() {
868
- it("does not close when clicking away", async () => {
869
- const test = await fixture(html`
870
- <div>
871
- ${click({
872
- ...click.args,
873
- interaction: "click",
874
- placement: "bottom",
875
- type: "manual",
876
- delayed: false,
877
- receivesFocus: "auto"
878
- })}
879
- </div>
880
- `);
881
- const el = test.querySelector("sp-overlay");
882
- expect(el.open).to.be.false;
883
- const opened = oneEvent(el, "sp-opened");
884
- el.open = true;
885
- let { overlay } = await opened;
886
- expect(el === overlay).to.be.true;
887
- await sendMouse({
888
- steps: [
889
- {
890
- type: "click",
891
- position: [50, 400]
892
- }
893
- ]
894
- });
895
- await aTimeout(200);
896
- expect(el.open).to.be.true;
897
- const closed = oneEvent(el, "sp-closed");
898
- el.open = false;
899
- ({ overlay } = await closed);
900
- expect(el === overlay).to.be.true;
901
- expect(el.open).to.be.false;
902
- });
903
- it("does not close when pressing `Escape`", async () => {
904
- const test = await fixture(html`
905
- <div>
906
- ${click({
907
- ...click.args,
908
- interaction: "click",
909
- placement: "bottom",
910
- type: "manual",
911
- delayed: false,
912
- receivesFocus: "auto"
913
- })}
914
- </div>
915
- `);
916
- const el = test.querySelector("sp-overlay");
917
- expect(el.open).to.be.false;
918
- const opened = oneEvent(el, "sp-opened");
919
- el.open = true;
920
- let { overlay } = await opened;
921
- expect(el === overlay).to.be.true;
922
- await sendKeys({
923
- press: "Escape"
924
- });
925
- await aTimeout(200);
926
- expect(el.open).to.be.true;
927
- const closed = oneEvent(el, "sp-closed");
928
- el.open = false;
929
- ({ overlay } = await closed);
930
- expect(el === overlay).to.be.true;
931
- expect(el.open).to.be.false;
932
- });
933
- });
934
- });
935
- });
936
- //# sourceMappingURL=overlay-element.test.js.map