@spectrum-web-components/overlay 0.36.0 → 0.37.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 (156) hide show
  1. package/README.md +266 -149
  2. package/custom-elements.json +1678 -553
  3. package/package.json +49 -22
  4. package/sp-overlay.d.ts +6 -0
  5. package/sp-overlay.dev.js +5 -0
  6. package/{active-overlay.dev.js.map → sp-overlay.dev.js.map} +3 -3
  7. package/sp-overlay.js +2 -0
  8. package/{active-overlay.js.map → sp-overlay.js.map} +4 -4
  9. package/src/AbstractOverlay.d.ts +58 -0
  10. package/src/AbstractOverlay.dev.js +211 -0
  11. package/src/AbstractOverlay.dev.js.map +7 -0
  12. package/src/AbstractOverlay.js +2 -0
  13. package/src/AbstractOverlay.js.map +7 -0
  14. package/src/Overlay.d.ts +163 -0
  15. package/src/Overlay.dev.js +792 -0
  16. package/src/Overlay.dev.js.map +7 -0
  17. package/src/Overlay.js +33 -0
  18. package/src/Overlay.js.map +7 -0
  19. package/src/OverlayDialog.d.ts +4 -0
  20. package/src/OverlayDialog.dev.js +135 -0
  21. package/src/OverlayDialog.dev.js.map +7 -0
  22. package/src/OverlayDialog.js +2 -0
  23. package/src/OverlayDialog.js.map +7 -0
  24. package/src/OverlayNoPopover.d.ts +4 -0
  25. package/src/OverlayNoPopover.dev.js +109 -0
  26. package/src/OverlayNoPopover.dev.js.map +7 -0
  27. package/src/OverlayNoPopover.js +2 -0
  28. package/src/OverlayNoPopover.js.map +7 -0
  29. package/src/OverlayPopover.d.ts +4 -0
  30. package/src/OverlayPopover.dev.js +169 -0
  31. package/src/OverlayPopover.dev.js.map +7 -0
  32. package/src/OverlayPopover.js +2 -0
  33. package/src/OverlayPopover.js.map +7 -0
  34. package/src/OverlayStack.d.ts +43 -0
  35. package/src/OverlayStack.dev.js +150 -0
  36. package/src/OverlayStack.dev.js.map +7 -0
  37. package/src/OverlayStack.js +2 -0
  38. package/src/OverlayStack.js.map +7 -0
  39. package/src/OverlayTrigger.d.ts +26 -42
  40. package/src/OverlayTrigger.dev.js +172 -296
  41. package/src/OverlayTrigger.dev.js.map +3 -3
  42. package/src/OverlayTrigger.js +49 -25
  43. package/src/OverlayTrigger.js.map +3 -3
  44. package/src/PlacementController.d.ts +38 -0
  45. package/src/PlacementController.dev.js +199 -0
  46. package/src/PlacementController.dev.js.map +7 -0
  47. package/src/PlacementController.js +2 -0
  48. package/src/PlacementController.js.map +7 -0
  49. package/src/VirtualTrigger.dev.js +2 -1
  50. package/src/VirtualTrigger.dev.js.map +2 -2
  51. package/src/VirtualTrigger.js +1 -1
  52. package/src/VirtualTrigger.js.map +2 -2
  53. package/src/fullSizePlugin.d.ts +12 -0
  54. package/src/fullSizePlugin.dev.js +39 -0
  55. package/src/fullSizePlugin.dev.js.map +7 -0
  56. package/src/fullSizePlugin.js +2 -0
  57. package/src/fullSizePlugin.js.map +7 -0
  58. package/src/index.d.ts +2 -3
  59. package/src/index.dev.js +2 -3
  60. package/src/index.dev.js.map +2 -2
  61. package/src/index.js +1 -1
  62. package/src/index.js.map +2 -2
  63. package/src/loader.d.ts +1 -2
  64. package/src/loader.dev.js +2 -19
  65. package/src/loader.dev.js.map +2 -2
  66. package/src/loader.js +1 -1
  67. package/src/loader.js.map +3 -3
  68. package/src/overlay-timer.dev.js.map +2 -2
  69. package/src/overlay-timer.js.map +2 -2
  70. package/src/overlay-trigger.css.dev.js +1 -1
  71. package/src/overlay-trigger.css.dev.js.map +1 -1
  72. package/src/overlay-trigger.css.js +3 -3
  73. package/src/overlay-trigger.css.js.map +1 -1
  74. package/src/overlay-types.d.ts +25 -31
  75. package/src/overlay-types.dev.js +1 -0
  76. package/src/overlay-types.dev.js.map +3 -3
  77. package/src/overlay-types.js +1 -1
  78. package/src/overlay-types.js.map +3 -3
  79. package/src/overlay.css.dev.js +9 -0
  80. package/src/overlay.css.dev.js.map +7 -0
  81. package/src/overlay.css.js +6 -0
  82. package/src/overlay.css.js.map +7 -0
  83. package/src/topLayerOverTransforms.d.ts +2 -0
  84. package/src/topLayerOverTransforms.dev.js +91 -0
  85. package/src/topLayerOverTransforms.dev.js.map +7 -0
  86. package/src/topLayerOverTransforms.js +2 -0
  87. package/src/topLayerOverTransforms.js.map +7 -0
  88. package/stories/overlay-element.stories.js +476 -0
  89. package/stories/overlay-element.stories.js.map +7 -0
  90. package/stories/overlay-story-components.js +9 -8
  91. package/stories/overlay-story-components.js.map +2 -2
  92. package/stories/overlay.stories.js +824 -680
  93. package/stories/overlay.stories.js.map +2 -2
  94. package/sync/overlay-trigger.d.ts +5 -0
  95. package/sync/overlay-trigger.dev.js +2 -4
  96. package/sync/overlay-trigger.dev.js.map +2 -2
  97. package/sync/overlay-trigger.js +1 -1
  98. package/sync/overlay-trigger.js.map +3 -3
  99. package/test/benchmark/basic-test.js +2 -2
  100. package/test/benchmark/basic-test.js.map +1 -1
  101. package/test/index.js +414 -377
  102. package/test/index.js.map +3 -3
  103. package/test/overlay-element.test-vrt.js +5 -0
  104. package/test/overlay-element.test-vrt.js.map +7 -0
  105. package/test/overlay-element.test.js +682 -0
  106. package/test/overlay-element.test.js.map +7 -0
  107. package/test/overlay-lifecycle.test.js +36 -106
  108. package/test/overlay-lifecycle.test.js.map +2 -2
  109. package/test/overlay-trigger-click.test.js +11 -5
  110. package/test/overlay-trigger-click.test.js.map +2 -2
  111. package/test/overlay-trigger-extended.test.js +46 -36
  112. package/test/overlay-trigger-extended.test.js.map +2 -2
  113. package/test/overlay-trigger-hover-click.test.js +38 -25
  114. package/test/overlay-trigger-hover-click.test.js.map +2 -2
  115. package/test/overlay-trigger-hover.test.js +41 -35
  116. package/test/overlay-trigger-hover.test.js.map +2 -2
  117. package/test/overlay-trigger-longpress.test.js +211 -82
  118. package/test/overlay-trigger-longpress.test.js.map +2 -2
  119. package/test/overlay-trigger-sync.test.js +1 -1
  120. package/test/overlay-trigger-sync.test.js.map +2 -2
  121. package/test/overlay-trigger.test.js +1 -1
  122. package/test/overlay-trigger.test.js.map +2 -2
  123. package/test/overlay-update.test.js +5 -5
  124. package/test/overlay-update.test.js.map +2 -2
  125. package/test/overlay-v1.test.js +547 -0
  126. package/test/overlay-v1.test.js.map +7 -0
  127. package/test/overlay.test.js +385 -269
  128. package/test/overlay.test.js.map +3 -3
  129. package/active-overlay.d.ts +0 -6
  130. package/active-overlay.dev.js +0 -5
  131. package/active-overlay.js +0 -2
  132. package/src/ActiveOverlay.d.ts +0 -84
  133. package/src/ActiveOverlay.dev.js +0 -517
  134. package/src/ActiveOverlay.dev.js.map +0 -7
  135. package/src/ActiveOverlay.js +0 -16
  136. package/src/ActiveOverlay.js.map +0 -7
  137. package/src/active-overlay.css.dev.js +0 -13
  138. package/src/active-overlay.css.dev.js.map +0 -7
  139. package/src/active-overlay.css.js +0 -10
  140. package/src/active-overlay.css.js.map +0 -7
  141. package/src/overlay-stack.d.ts +0 -50
  142. package/src/overlay-stack.dev.js +0 -515
  143. package/src/overlay-stack.dev.js.map +0 -7
  144. package/src/overlay-stack.js +0 -34
  145. package/src/overlay-stack.js.map +0 -7
  146. package/src/overlay-utils.d.ts +0 -3
  147. package/src/overlay-utils.dev.js +0 -31
  148. package/src/overlay-utils.dev.js.map +0 -7
  149. package/src/overlay-utils.js +0 -2
  150. package/src/overlay-utils.js.map +0 -7
  151. package/src/overlay.d.ts +0 -59
  152. package/src/overlay.dev.js +0 -127
  153. package/src/overlay.dev.js.map +0 -7
  154. package/src/overlay.js +0 -2
  155. package/src/overlay.js.map +0 -7
  156. /package/src/{active-overlay.css.d.ts → overlay.css.d.ts} +0 -0
@@ -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 { ignoreResizeObserverLoopError } from "../../../test/testing-helpers.js";
24
- import { isFirefox } from "@spectrum-web-components/shared/src/platform.js";
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("mouseenter", {
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("mouseleave", {
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("mouseleave", {
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("mouseleave", {
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.null;
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("mouseenter", {
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("mouseleave", {
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("mouseleave", {
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.null;
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("mouseenter", {
167
- bubbles: true
173
+ new Event("pointerenter", {
174
+ bubbles: true,
175
+ composed: true
168
176
  })
169
177
  );
170
- await elementUpdated(el);
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("mouseenter", {
201
+ new Event("pointerenter", {
193
202
  bubbles: true
194
203
  })
195
204
  );
196
- await elementUpdated(el);
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 elementUpdated(el);
213
+ await opened;
204
214
  expect(el.open).to.equal("longpress");
205
215
  });
206
216
  it('closes `hover` overlay when [type="modal"]', async () => {
@@ -220,21 +230,15 @@ 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
- await elementUpdated(el);
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
- <overlay-trigger type="modal" placement="none">
241
+ <overlay-trigger type="modal">
238
242
  <sp-button slot="trigger">Toggle Dialog</sp-button>
239
243
  <sp-dialog-wrapper
240
244
  slot="click-content"
@@ -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
- const button1 = dialog.querySelector("#button-1");
268
- const button2 = dialog.querySelector("#button-2");
269
- opened = oneEvent(button1, "sp-opened");
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
- await nextFrame();
275
- expect(button1 === document.activeElement).to.be.true;
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
- await nextFrame();
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": "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",
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 const el = await styledFixture<OverlayTrigger>(html`\n <overlay-trigger type=\"modal\">\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
  }
@@ -2,13 +2,13 @@
2
2
  import {
3
3
  elementUpdated,
4
4
  expect,
5
- fixture,
6
5
  html,
7
6
  nextFrame,
8
7
  oneEvent,
9
8
  waitUntil
10
9
  } from "@open-wc/testing";
11
10
  import "@spectrum-web-components/action-button/sp-action-button.js";
11
+ import "@spectrum-web-components/button/sp-button.js";
12
12
  import "@spectrum-web-components/action-group/sp-action-group.js";
13
13
  import "@spectrum-web-components/icons-workflow/icons/sp-icon-magnify.js";
14
14
  import "@spectrum-web-components/popover/sp-popover.js";
@@ -20,77 +20,204 @@ import { sendKeys } from "@web/test-runner-commands";
20
20
  import { spy } from "sinon";
21
21
  import { sendMouse } from "../../../test/plugins/browser.js";
22
22
  import { findDescribedNode } from "../../../test/testing-helpers-a11y.js";
23
+ import { fixture, isOnTopLayer } from "../../../test/testing-helpers.js";
24
+ import { longpress } from "../stories/overlay.stories.js";
23
25
  describe("Overlay Trigger - Longpress", () => {
24
- it("displays `longpress` content", async () => {
25
- const el = await fixture(
26
- (() => html`
27
- <overlay-trigger placement="right-start">
28
- <sp-action-button slot="trigger" hold-affordance>
29
- <sp-icon-magnify slot="icon"></sp-icon-magnify>
30
- </sp-action-button>
31
- <sp-popover slot="longpress-content" tip>
32
- <sp-action-group
33
- selects="single"
34
- vertical
35
- style="margin: calc(var(--spectrum-actiongroup-button-gap-y,var(--spectrum-global-dimension-size-100)) / 2);"
36
- >
37
- <sp-action-button>
38
- <sp-icon-magnify slot="icon"></sp-icon-magnify>
39
- </sp-action-button>
40
- <sp-action-button>
41
- <sp-icon-magnify slot="icon"></sp-icon-magnify>
42
- </sp-action-button>
43
- <sp-action-button>
44
- <sp-icon-magnify slot="icon"></sp-icon-magnify>
45
- </sp-action-button>
46
- </sp-action-group>
47
- </sp-popover>
48
- </overlay-trigger>
49
- `)()
50
- );
51
- await elementUpdated(el);
52
- const trigger = el.querySelector("sp-action-button");
53
- const content = el.querySelector(
54
- '[slot="longpress-content"]'
55
- );
56
- expect(trigger).to.not.be.null;
57
- expect(content).to.not.be.null;
58
- expect(content.open).to.be.false;
59
- trigger.focus();
60
- let open = oneEvent(el, "sp-opened");
61
- await sendKeys({
62
- press: "Space"
26
+ describe("responds to use interactions", () => {
27
+ beforeEach(async function() {
28
+ this.el = await fixture(longpress());
29
+ this.trigger = this.el.querySelector(
30
+ "sp-action-button"
31
+ );
32
+ this.content = this.el.querySelector(
33
+ '[slot="longpress-content"]'
34
+ );
35
+ expect(this.trigger).to.not.be.null;
36
+ expect(this.content).to.not.be.null;
37
+ expect(this.content.open).to.be.false;
38
+ this.trigger.focus();
63
39
  });
64
- await open;
65
- expect(content.open, "opens for `Space`").to.be.true;
66
- let closed = oneEvent(el, "sp-closed");
67
- document.body.click();
68
- await closed;
69
- expect(!content.open, "closes for `Space`").to.be.true;
70
- trigger.focus();
71
- open = oneEvent(el, "sp-opened");
72
- sendKeys({
73
- press: "Alt+ArrowDown"
40
+ it("opens/closes for `Space`", async function() {
41
+ const open = oneEvent(this.el, "sp-opened");
42
+ await sendKeys({
43
+ press: "Space"
44
+ });
45
+ await open;
46
+ expect(this.content.open, "opens for `Space`").to.be.true;
47
+ expect(await isOnTopLayer(this.content)).to.be.true;
48
+ const closed = oneEvent(this.el, "sp-closed");
49
+ sendMouse({
50
+ steps: [
51
+ {
52
+ type: "click",
53
+ position: [500, 20]
54
+ }
55
+ ]
56
+ });
57
+ await closed;
58
+ await nextFrame();
59
+ await nextFrame();
60
+ await nextFrame();
61
+ await nextFrame();
62
+ expect(await isOnTopLayer(this.content)).to.be.false;
63
+ expect(this.content.open, "closes for `Space`").to.be.false;
74
64
  });
75
- await open;
76
- expect(content.open, "opens for `Alt+ArrowDown`").to.be.true;
77
- closed = oneEvent(el, "sp-closed");
78
- await sendKeys({
79
- press: "Escape"
65
+ it("opens/closes for `Alt+ArrowDown`", async function() {
66
+ const open = oneEvent(this.el, "sp-opened");
67
+ sendKeys({
68
+ press: "Alt+ArrowDown"
69
+ });
70
+ await open;
71
+ await nextFrame();
72
+ await nextFrame();
73
+ expect(this.content.open, "opens for `Alt+ArrowDown`").to.be.true;
74
+ expect(await isOnTopLayer(this.content)).to.be.true;
75
+ const closed = oneEvent(this.el, "sp-closed");
76
+ await sendKeys({
77
+ press: "Escape"
78
+ });
79
+ await closed;
80
+ await nextFrame();
81
+ await nextFrame();
82
+ expect(this.content.open, "closes for `Alt+ArrowDown`").to.be.false;
83
+ expect(await isOnTopLayer(this.content)).to.be.false;
80
84
  });
81
- await closed;
82
- expect(!content.open, "closes for `Alt+ArrowDown`").to.be.true;
83
- await elementUpdated(el);
84
- open = oneEvent(el, "sp-opened");
85
- trigger.dispatchEvent(new PointerEvent("pointerdown", { button: 0 }));
86
- await open;
87
- expect(content.open, "opens for `pointerdown`").to.be.true;
88
- closed = oneEvent(el, "sp-closed");
89
- await sendKeys({
90
- press: "Escape"
85
+ it("opens/closes for `Alt+ArrowDown` with Button", async function() {
86
+ const button = document.createElement("sp-button");
87
+ button.slot = "trigger";
88
+ this.trigger.replaceWith(button);
89
+ await elementUpdated(button);
90
+ button.focus();
91
+ await elementUpdated(button);
92
+ const open = oneEvent(this.el, "sp-opened");
93
+ sendKeys({
94
+ press: "Alt+ArrowDown"
95
+ });
96
+ await open;
97
+ await nextFrame();
98
+ await nextFrame();
99
+ expect(await isOnTopLayer(this.content)).to.be.true;
100
+ expect(this.content.open, "opens for `Alt+ArrowDown`").to.be.true;
101
+ const closed = oneEvent(this.el, "sp-closed");
102
+ await sendKeys({
103
+ press: "Escape"
104
+ });
105
+ await closed;
106
+ await nextFrame();
107
+ await nextFrame();
108
+ expect(await isOnTopLayer(this.content)).to.be.false;
109
+ expect(this.content.open, "closes for `Alt+ArrowDown`").to.be.false;
110
+ });
111
+ it("opens/closes for `longpress`", async function() {
112
+ expect(this.trigger.holdAffordance).to.be.true;
113
+ let open = oneEvent(this.el, "sp-opened");
114
+ const rect = this.trigger.getBoundingClientRect();
115
+ await sendMouse({
116
+ steps: [
117
+ {
118
+ type: "move",
119
+ position: [
120
+ rect.left + rect.width / 2,
121
+ rect.top + rect.height / 2
122
+ ]
123
+ },
124
+ {
125
+ type: "down"
126
+ }
127
+ ]
128
+ });
129
+ await open;
130
+ await nextFrame();
131
+ await nextFrame();
132
+ open = oneEvent(this.el, "sp-opened");
133
+ await open;
134
+ await nextFrame();
135
+ await nextFrame();
136
+ expect(this.content.open, "opens for `pointerdown`").to.be.true;
137
+ await sendMouse({
138
+ steps: [
139
+ {
140
+ type: "up"
141
+ },
142
+ {
143
+ type: "move",
144
+ position: [
145
+ rect.left + rect.width * 2,
146
+ rect.top + rect.height / 2
147
+ ]
148
+ }
149
+ ]
150
+ });
151
+ await nextFrame();
152
+ await nextFrame();
153
+ expect(this.content.open, "stays open for `pointerup`").to.be.true;
154
+ expect(await isOnTopLayer(this.content)).to.be.true;
155
+ const closed = oneEvent(this.trigger, "sp-closed");
156
+ await sendKeys({
157
+ press: "Escape"
158
+ });
159
+ await closed;
160
+ expect(await isOnTopLayer(this.content)).to.be.false;
161
+ expect(this.content.open, "closes for `pointerdown`").to.be.false;
162
+ });
163
+ it("opens/closes for `longpress` with Button", async function() {
164
+ const button = document.createElement("sp-button");
165
+ button.slot = "trigger";
166
+ this.trigger.remove();
167
+ this.el.append(button);
168
+ await elementUpdated(this.el);
169
+ await nextFrame();
170
+ await nextFrame();
171
+ let open = oneEvent(this.el, "sp-opened");
172
+ const rect = button.getBoundingClientRect();
173
+ await sendMouse({
174
+ steps: [
175
+ {
176
+ type: "move",
177
+ position: [
178
+ rect.left + rect.width / 2,
179
+ rect.top + rect.height / 2
180
+ ]
181
+ },
182
+ {
183
+ type: "down"
184
+ }
185
+ ]
186
+ });
187
+ await open;
188
+ await nextFrame();
189
+ await nextFrame();
190
+ open = oneEvent(this.el, "sp-opened");
191
+ await open;
192
+ await nextFrame();
193
+ await nextFrame();
194
+ expect(this.content.open, "opens for `pointerdown`").to.be.true;
195
+ await sendMouse({
196
+ steps: [
197
+ {
198
+ type: "up"
199
+ },
200
+ {
201
+ type: "move",
202
+ position: [
203
+ rect.left + rect.width * 2,
204
+ rect.top + rect.height / 2
205
+ ]
206
+ }
207
+ ]
208
+ });
209
+ await nextFrame();
210
+ await nextFrame();
211
+ expect(this.content.open, "stays open for `pointerup`").to.be.true;
212
+ expect(await isOnTopLayer(this.content)).to.be.true;
213
+ const closed = oneEvent(button, "sp-closed");
214
+ await sendKeys({
215
+ press: "Escape"
216
+ });
217
+ await closed;
218
+ expect(await isOnTopLayer(this.content)).to.be.false;
219
+ expect(this.content.open, "closes for `pointerdown`").to.be.false;
91
220
  });
92
- await closed;
93
- expect(!content.open, "closes for `pointerdown`").to.be.true;
94
221
  });
95
222
  it("displays `longpress` declaratively", async () => {
96
223
  const openedSpy = spy();
@@ -148,6 +275,8 @@ describe("Overlay Trigger - Longpress", () => {
148
275
  </overlay-trigger>
149
276
  `
150
277
  );
278
+ await nextFrame();
279
+ await nextFrame();
151
280
  const trigger = el.querySelector('[slot="trigger"]');
152
281
  await elementUpdated(el);
153
282
  expect(trigger.hasAttribute("aria-describedby")).to.be.true;
@@ -169,11 +298,11 @@ describe("Overlay Trigger - Longpress", () => {
169
298
  LONGPRESS_INSTRUCTIONS.keyboard
170
299
  );
171
300
  const closed = oneEvent(el, "sp-closed");
172
- await sendKeys({
301
+ sendKeys({
173
302
  press: "Escape"
174
303
  });
175
304
  await closed;
176
- expect(el.open).to.be.null;
305
+ expect(el.open).to.be.undefined;
177
306
  expect(trigger.hasAttribute("aria-describedby")).to.be.true;
178
307
  expect(el.childNodes.length, "always").to.equal(6);
179
308
  await findDescribedNode(
@@ -213,22 +342,30 @@ describe("Overlay Trigger - Longpress", () => {
213
342
  '[slot="longpress-content"]'
214
343
  );
215
344
  await elementUpdated(el);
216
- expect(el.hasLongpressContent).to.be.true;
345
+ expect(
346
+ trigger.hasAttribute("aria-describedby"),
347
+ "applies described by content"
348
+ ).to.be.true;
217
349
  expect(el.childNodes.length, "always").to.equal(6);
218
350
  el.removeAttribute("hold-affordance");
219
- el.removeChild(content);
351
+ content.remove();
220
352
  await elementUpdated(el);
221
- expect(trigger.hasAttribute("aria-describedby")).to.be.false;
222
- expect(el.hasLongpressContent).to.be.false;
353
+ await nextFrame();
354
+ await nextFrame();
355
+ expect(
356
+ trigger.hasAttribute("aria-describedby"),
357
+ "removed described by content"
358
+ ).to.be.false;
223
359
  expect(el.childNodes.length, "always").to.equal(4);
224
360
  el.setAttribute("hold-affordance", "true");
225
361
  el.append(content);
226
362
  await elementUpdated(el);
363
+ await nextFrame();
364
+ await nextFrame();
227
365
  await findDescribedNode(
228
366
  "Trigger with hold affordance",
229
367
  LONGPRESS_INSTRUCTIONS.keyboard
230
368
  );
231
- expect(el.hasLongpressContent).to.be.true;
232
369
  expect(el.childNodes.length, "always").to.equal(6);
233
370
  });
234
371
  it("recognises multiple overlay triggers in a11y tree", async () => {
@@ -276,14 +413,6 @@ describe("Overlay Trigger - Longpress", () => {
276
413
  );
277
414
  await elementUpdated(el);
278
415
  const div = document.getElementById("container");
279
- const firstTrigger = document.getElementById(
280
- "first-trigger"
281
- );
282
- const secondTrigger = document.getElementById(
283
- "second-trigger"
284
- );
285
- expect(firstTrigger.hasLongpressContent).to.be.true;
286
- expect(secondTrigger.hasLongpressContent).to.be.true;
287
416
  expect(div.childNodes.length, "always").to.equal(5);
288
417
  await findDescribedNode(
289
418
  "First button",