@spectrum-web-components/overlay 0.18.0-devmode.0 → 0.18.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 (60) hide show
  1. package/README.md +3 -0
  2. package/active-overlay.js +1 -2
  3. package/active-overlay.js.map +1 -1
  4. package/overlay-trigger.js +1 -2
  5. package/overlay-trigger.js.map +1 -1
  6. package/package.json +7 -7
  7. package/src/ActiveOverlay.js +8 -437
  8. package/src/ActiveOverlay.js.map +1 -1
  9. package/src/OverlayTrigger.js +2 -265
  10. package/src/OverlayTrigger.js.map +1 -1
  11. package/src/VirtualTrigger.js +1 -29
  12. package/src/VirtualTrigger.js.map +1 -1
  13. package/src/active-overlay.css.js +2 -4
  14. package/src/active-overlay.css.js.map +1 -1
  15. package/src/index.js +1 -6
  16. package/src/index.js.map +1 -1
  17. package/src/loader.js +1 -4
  18. package/src/loader.js.map +1 -1
  19. package/src/overlay-events.js +1 -6
  20. package/src/overlay-events.js.map +1 -1
  21. package/src/overlay-stack.js +2 -405
  22. package/src/overlay-stack.js.map +1 -1
  23. package/src/overlay-timer.js +1 -70
  24. package/src/overlay-timer.js.map +1 -1
  25. package/src/overlay-trigger.css.js +2 -4
  26. package/src/overlay-trigger.css.js.map +1 -1
  27. package/src/overlay-utils.js +1 -27
  28. package/src/overlay-utils.js.map +1 -1
  29. package/src/overlay.js +1 -84
  30. package/src/overlay.js.map +1 -1
  31. package/stories/overlay-story-components.js +11 -207
  32. package/stories/overlay-story-components.js.map +1 -1
  33. package/stories/overlay.stories.js +55 -338
  34. package/stories/overlay.stories.js.map +1 -1
  35. package/sync/overlay-trigger.js +1 -6
  36. package/sync/overlay-trigger.js.map +1 -1
  37. package/test/benchmark/basic-test.js +1 -6
  38. package/test/benchmark/basic-test.js.map +1 -1
  39. package/test/overlay-lifecycle.test.js +6 -112
  40. package/test/overlay-lifecycle.test.js.map +1 -1
  41. package/test/overlay-timer.test.js +1 -116
  42. package/test/overlay-timer.test.js.map +1 -1
  43. package/test/overlay-trigger-click.test.js +7 -51
  44. package/test/overlay-trigger-click.test.js.map +1 -1
  45. package/test/overlay-trigger-extended.test.js +4 -174
  46. package/test/overlay-trigger-extended.test.js.map +1 -1
  47. package/test/overlay-trigger-hover-click.test.js +3 -63
  48. package/test/overlay-trigger-hover-click.test.js.map +1 -1
  49. package/test/overlay-trigger-hover.test.js +7 -81
  50. package/test/overlay-trigger-hover.test.js.map +1 -1
  51. package/test/overlay-trigger-longpress.test.js +9 -177
  52. package/test/overlay-trigger-longpress.test.js.map +1 -1
  53. package/test/overlay-trigger-sync.test.js +4 -407
  54. package/test/overlay-trigger-sync.test.js.map +1 -1
  55. package/test/overlay-trigger.test.js +4 -407
  56. package/test/overlay-trigger.test.js.map +1 -1
  57. package/test/overlay.test-vrt.js +1 -3
  58. package/test/overlay.test-vrt.js.map +1 -1
  59. package/test/overlay.test.js +11 -477
  60. package/test/overlay.test.js.map +1 -1
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["overlay-trigger-hover.test.ts"],
4
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 oneEvent,\n waitUntil,\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/icons-workflow/icons/sp-icon-magnify.js';\nimport { OverlayTrigger } from '@spectrum-web-components/overlay';\nimport '@spectrum-web-components/overlay/overlay-trigger.js';\nimport { spy } from 'sinon';\nimport { ActionButton } from '@spectrum-web-components/action-button';\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 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});\n"],
5
- "mappings": "AAWA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA;AACA;AACA;AAEA;AACA;AAGA,SAAS,2BAA2B,MAAM;AACtC,KAAG,kCAAkC,YAAY;AAC7C,UAAM,YAAY,IAAI;AACtB,UAAM,YAAY,IAAI;AACtB,UAAM,KAAK,MAAM,QACZ,OAAM;AAAA;AAAA;AAAA;AAAA,iCAIc,MAAM,UAAU;AAAA,iCAChB,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAOlC,CACP;AACA,UAAM,eAAe,EAAE;AAEvB,UAAM,UACF,MAAM,UAAU,YAChB,sCACA,EAAE,SAAS,IAAK,CACpB;AAEA,OAAG,gBAAgB,MAAM;AACzB,UAAM,eAAe,EAAE;AAEvB,UAAM,UAAU,MAAM,UAAU,YAAY,0BAA0B;AAAA,MAClE,SAAS;AAAA,IACb,CAAC;AAAA,EACL,CAAC;AACD,KAAG,0BAA0B,YAAY;AACrC,UAAM,KAAK,MAAM,QACZ,OAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAOJ,CACP;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,IAAI,EAAE,GAAG,GAAG;AAEtB,UAAM,UAAU,GAAG,cAAc,kBAAkB;AACnD,YAAQ,cACJ,IAAI,MAAM,cAAc;AAAA,MACpB,SAAS;AAAA,IACb,CAAC,CACL;AAEA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,IAAI,EAAE,GAAG,MAAM,OAAO;AAEhC,YAAQ,MAAM;AAEd,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,IAAI,EAAE,GAAG,MAAM,OAAO;AAAA,EACpC,CAAC;AACD,KAAG,kDAAkD,YAAY;AAC7D,UAAM,KAAK,MAAM,QACZ,OAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAQJ,CACP;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,IAAI,EAAE,GAAG,GAAG;AAEtB,UAAM,UAAU,GAAG,cAAc,kBAAkB;AACnD,YAAQ,cACJ,IAAI,MAAM,cAAc;AAAA,MACpB,SAAS;AAAA,IACb,CAAC,CACL;AAEA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,IAAI,EAAE,GAAG,MAAM,OAAO;AAEhC,YAAQ,cACJ,IAAI,MAAM,aAAa;AAAA,MACnB,SAAS;AAAA,IACb,CAAC,CACL;AAEA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,IAAI,EAAE,GAAG,MAAM,WAAW;AAAA,EACxC,CAAC;AACD,KAAG,8CAA8C,YAAY;AACzD,UAAM,KAAK,MAAM,QACZ,OAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAOJ,CACP;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,IAAI,EAAE,GAAG,GAAG;AAEtB,UAAM,UAAU,GAAG,cAAc,kBAAkB;AACnD,UAAM,SAAS,SAAS,IAAI,WAAW;AACvC,YAAQ,MAAM;AACd,UAAM;AAEN,UAAM,eAAe,EAAE;AACvB,UAAM,SAAS,GAAG;AAElB,WAAO,GAAG,IAAI,EAAE,GAAG,MAAM,OAAO;AAEhC,UAAM,SAAS,SAAS,IAAI,WAAW;AACvC,YAAQ,KAAK;AACb,UAAM;AAEN,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,IAAI,EAAE,GAAG,GAAG;AAAA,EAC1B,CAAC;AACL,CAAC;",
5
+ "mappings": "AAWA,gIASA,uDACA,mEACA,yEAEA,4DACA,4BAGA,SAAS,0BAA2B,IAAM,CACtC,GAAG,iCAAkC,SAAY,CAC7C,KAAM,GAAY,EAAI,EAChB,EAAY,EAAI,EAChB,EAAK,KAAM,GACZ,KAAM;AAAA;AAAA;AAAA;AAAA,iCAIc,IAAM,EAAU;AAAA,iCAChB,IAAM,EAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAOlC,CACP,EACA,KAAM,GAAe,CAAE,EAEvB,KAAM,GACF,IAAM,EAAU,WAChB,qCACA,CAAE,QAAS,GAAK,CACpB,EAEA,EAAG,gBAAgB,MAAM,EACzB,KAAM,GAAe,CAAE,EAEvB,KAAM,GAAU,IAAM,EAAU,WAAY,yBAA0B,CAClE,QAAS,GACb,CAAC,CACL,CAAC,EACD,GAAG,yBAA0B,SAAY,CACrC,KAAM,GAAK,KAAM,GACZ,KAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAOJ,CACP,EACA,KAAM,GAAe,CAAE,EAEvB,EAAO,EAAG,IAAI,EAAE,GAAG,GAAG,UAEtB,KAAM,GAAU,EAAG,cAAc,kBAAkB,EACnD,EAAQ,cACJ,GAAI,OAAM,aAAc,CACpB,QAAS,EACb,CAAC,CACL,EAEA,KAAM,GAAe,CAAE,EAEvB,EAAO,EAAG,IAAI,EAAE,GAAG,MAAM,OAAO,EAEhC,EAAQ,MAAM,EAEd,KAAM,GAAe,CAAE,EAEvB,EAAO,EAAG,IAAI,EAAE,GAAG,MAAM,OAAO,CACpC,CAAC,EACD,GAAG,iDAAkD,SAAY,CAC7D,KAAM,GAAK,KAAM,GACZ,KAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAQJ,CACP,EACA,KAAM,GAAe,CAAE,EAEvB,EAAO,EAAG,IAAI,EAAE,GAAG,GAAG,UAEtB,KAAM,GAAU,EAAG,cAAc,kBAAkB,EACnD,EAAQ,cACJ,GAAI,OAAM,aAAc,CACpB,QAAS,EACb,CAAC,CACL,EAEA,KAAM,GAAe,CAAE,EAEvB,EAAO,EAAG,IAAI,EAAE,GAAG,MAAM,OAAO,EAEhC,EAAQ,cACJ,GAAI,OAAM,YAAa,CACnB,QAAS,EACb,CAAC,CACL,EAEA,KAAM,GAAe,CAAE,EAEvB,EAAO,EAAG,IAAI,EAAE,GAAG,MAAM,WAAW,CACxC,CAAC,EACD,GAAG,6CAA8C,SAAY,CACzD,KAAM,GAAK,KAAM,GACZ,KAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAOJ,CACP,EACA,KAAM,GAAe,CAAE,EAEvB,EAAO,EAAG,IAAI,EAAE,GAAG,GAAG,UAEtB,KAAM,GAAU,EAAG,cAAc,kBAAkB,EAC7C,EAAS,EAAS,EAAI,WAAW,EACvC,EAAQ,MAAM,EACd,KAAM,GAEN,KAAM,GAAe,CAAE,EACvB,KAAM,GAAS,GAAG,EAElB,EAAO,EAAG,IAAI,EAAE,GAAG,MAAM,OAAO,EAEhC,KAAM,GAAS,EAAS,EAAI,WAAW,EACvC,EAAQ,KAAK,EACb,KAAM,GAEN,KAAM,GAAe,CAAE,EAEvB,EAAO,EAAG,IAAI,EAAE,GAAG,GAAG,IAC1B,CAAC,CACL,CAAC",
6
6
  "names": []
7
7
  }
@@ -1,27 +1,4 @@
1
- import {
2
- elementUpdated,
3
- expect,
4
- fixture,
5
- html,
6
- nextFrame,
7
- oneEvent,
8
- waitUntil
9
- } from "@open-wc/testing";
10
- import "@spectrum-web-components/action-button/sp-action-button.js";
11
- import "@spectrum-web-components/action-group/sp-action-group.js";
12
- import "@spectrum-web-components/icons-workflow/icons/sp-icon-magnify.js";
13
- import "@spectrum-web-components/popover/sp-popover.js";
14
- import {
15
- LONGPRESS_INSTRUCTIONS
16
- } from "@spectrum-web-components/overlay";
17
- import "@spectrum-web-components/overlay/overlay-trigger.js";
18
- import { sendKeys } from "@web/test-runner-commands";
19
- import { spy } from "sinon";
20
- import { sendMouse } from "../../../test/plugins/browser.js";
21
- import { findDescribedNode } from "../../../test/testing-helpers-a11y.js";
22
- describe("Overlay Trigger - Longpress", () => {
23
- it("displays `longpress` content", async () => {
24
- const el = await fixture((() => html`
1
+ import{elementUpdated as i,expect as o,fixture as g,html as u,nextFrame as y,oneEvent as a,waitUntil as m}from"@open-wc/testing";import"@spectrum-web-components/action-button/sp-action-button.js";import"@spectrum-web-components/action-group/sp-action-group.js";import"@spectrum-web-components/icons-workflow/icons/sp-icon-magnify.js";import"@spectrum-web-components/popover/sp-popover.js";import{LONGPRESS_INSTRUCTIONS as c}from"@spectrum-web-components/overlay";import"@spectrum-web-components/overlay/overlay-trigger.js";import{sendKeys as l}from"@web/test-runner-commands";import{spy as b}from"sinon";import{sendMouse as f}from"../../../test/plugins/browser.js";import{findDescribedNode as p}from"../../../test/testing-helpers-a11y.js";describe("Overlay Trigger - Longpress",()=>{it("displays `longpress` content",async()=>{const t=await g((()=>u`
25
2
  <overlay-trigger placement="right-start">
26
3
  <sp-action-button slot="trigger" hold-affordance>
27
4
  <sp-icon-magnify slot="icon"></sp-icon-magnify>
@@ -44,74 +21,19 @@ describe("Overlay Trigger - Longpress", () => {
44
21
  </sp-action-group>
45
22
  </sp-popover>
46
23
  </overlay-trigger>
47
- `)());
48
- await elementUpdated(el);
49
- const trigger = el.querySelector("sp-action-button");
50
- const content = el.querySelector('[slot="longpress-content"]');
51
- expect(trigger).to.not.be.null;
52
- expect(content).to.not.be.null;
53
- expect(content.open).to.be.false;
54
- trigger.focus();
55
- let open = oneEvent(el, "sp-opened");
56
- await sendKeys({
57
- press: "Space"
58
- });
59
- await open;
60
- expect(content.open, "opens for `Space`").to.be.true;
61
- let closed = oneEvent(el, "sp-closed");
62
- document.body.click();
63
- await closed;
64
- expect(!content.open, "closes for `Space`").to.be.true;
65
- trigger.focus();
66
- open = oneEvent(el, "sp-opened");
67
- sendKeys({
68
- press: "Alt+ArrowDown"
69
- });
70
- await open;
71
- expect(content.open, "opens for `Alt+ArrowDown`").to.be.true;
72
- closed = oneEvent(el, "sp-closed");
73
- await sendKeys({
74
- press: "Escape"
75
- });
76
- await closed;
77
- expect(!content.open, "closes for `Alt+ArrowDown`").to.be.true;
78
- await elementUpdated(el);
79
- open = oneEvent(el, "sp-opened");
80
- trigger.dispatchEvent(new Event("pointerdown"));
81
- await open;
82
- expect(content.open, "opens for `pointerdown`").to.be.true;
83
- closed = oneEvent(el, "sp-closed");
84
- await sendKeys({
85
- press: "Escape"
86
- });
87
- await closed;
88
- expect(!content.open, "closes for `pointerdown`").to.be.true;
89
- });
90
- it("displays `longpress` declaratively", async () => {
91
- const openedSpy = spy();
92
- const closedSpy = spy();
93
- const el = await fixture((() => html`
24
+ `)());await i(t);const n=t.querySelector("sp-action-button"),e=t.querySelector('[slot="longpress-content"]');o(n).to.not.be.null,o(e).to.not.be.null,o(e.open).to.be.false,n.focus();let s=a(t,"sp-opened");await l({press:"Space"}),await s,o(e.open,"opens for `Space`").to.be.true;let r=a(t,"sp-closed");document.body.click(),await r,o(!e.open,"closes for `Space`").to.be.true,n.focus(),s=a(t,"sp-opened"),l({press:"Alt+ArrowDown"}),await s,o(e.open,"opens for `Alt+ArrowDown`").to.be.true,r=a(t,"sp-closed"),await l({press:"Escape"}),await r,o(!e.open,"closes for `Alt+ArrowDown`").to.be.true,await i(t),s=a(t,"sp-opened"),n.dispatchEvent(new Event("pointerdown")),await s,o(e.open,"opens for `pointerdown`").to.be.true,r=a(t,"sp-closed"),await l({press:"Escape"}),await r,o(!e.open,"closes for `pointerdown`").to.be.true}),it("displays `longpress` declaratively",async()=>{const t=b(),n=b(),e=await g((()=>u`
94
25
  <overlay-trigger
95
26
  placement="right-start"
96
27
  open="longpress"
97
- @sp-opened=${() => openedSpy()}
98
- @sp-closed=${() => closedSpy()}
28
+ @sp-opened=${()=>t()}
29
+ @sp-closed=${()=>n()}
99
30
  >
100
31
  <sp-action-button slot="trigger" hold-affordance>
101
32
  <sp-icon-magnify slot="icon"></sp-icon-magnify>
102
33
  </sp-action-button>
103
34
  <sp-popover slot="longpress-content" tip></sp-popover>
104
35
  </overlay-trigger>
105
- `)());
106
- await elementUpdated(el);
107
- await waitUntil(() => openedSpy.calledOnce, "longpress content projected to overlay", { timeout: 2e3 });
108
- const closed = oneEvent(el, "sp-closed");
109
- el.removeAttribute("open");
110
- await closed;
111
- expect(closedSpy.calledOnce, "longpress content returned").to.be.true;
112
- });
113
- it("describes longpress interaction accessibly", async () => {
114
- const el = await fixture(html`
36
+ `)());await i(e),await m(()=>t.calledOnce,"longpress content projected to overlay",{timeout:2e3});const s=a(e,"sp-closed");e.removeAttribute("open"),await s,o(n.calledOnce,"longpress content returned").to.be.true}),it("describes longpress interaction accessibly",async()=>{const t=await g(u`
115
37
  <overlay-trigger placement="right-start">
116
38
  <sp-action-button slot="trigger" hold-affordance>
117
39
  Trigger with hold affordance
@@ -134,31 +56,7 @@ describe("Overlay Trigger - Longpress", () => {
134
56
  </sp-action-group>
135
57
  </sp-popover>
136
58
  </overlay-trigger>
137
- `);
138
- const trigger = el.querySelector('[slot="trigger"]');
139
- await elementUpdated(el);
140
- expect(trigger.hasAttribute("aria-describedby")).to.be.true;
141
- expect(el.open).to.be.undefined;
142
- expect(el.childNodes.length, "always").to.equal(6);
143
- await findDescribedNode("Trigger with hold affordance", LONGPRESS_INSTRUCTIONS.keyboard);
144
- const opened = oneEvent(el, "sp-opened");
145
- trigger.dispatchEvent(new Event("longpress", { bubbles: true, composed: true }));
146
- await opened;
147
- expect(el.open).to.equal("longpress");
148
- expect(el.childNodes.length, "always").to.equal(6);
149
- await findDescribedNode("Trigger with hold affordance", LONGPRESS_INSTRUCTIONS.keyboard);
150
- const closed = oneEvent(el, "sp-closed");
151
- await sendKeys({
152
- press: "Escape"
153
- });
154
- await closed;
155
- expect(el.open).to.be.null;
156
- expect(trigger.hasAttribute("aria-describedby")).to.be.true;
157
- expect(el.childNodes.length, "always").to.equal(6);
158
- await findDescribedNode("Trigger with hold affordance", LONGPRESS_INSTRUCTIONS.keyboard);
159
- });
160
- it("removes longpress `aria-describedby` description element when longpress content is removed", async () => {
161
- const el = await fixture(html`
59
+ `),n=t.querySelector('[slot="trigger"]');await i(t),o(n.hasAttribute("aria-describedby")).to.be.true,o(t.open).to.be.undefined,o(t.childNodes.length,"always").to.equal(6),await p("Trigger with hold affordance",c.keyboard);const e=a(t,"sp-opened");n.dispatchEvent(new Event("longpress",{bubbles:!0,composed:!0})),await e,o(t.open).to.equal("longpress"),o(t.childNodes.length,"always").to.equal(6),await p("Trigger with hold affordance",c.keyboard);const s=a(t,"sp-closed");await l({press:"Escape"}),await s,o(t.open).to.be.null,o(n.hasAttribute("aria-describedby")).to.be.true,o(t.childNodes.length,"always").to.equal(6),await p("Trigger with hold affordance",c.keyboard)}),it("removes longpress `aria-describedby` description element when longpress content is removed",async()=>{const t=await g(u`
162
60
  <overlay-trigger placement="right-start">
163
61
  <sp-action-button slot="trigger" hold-affordance>
164
62
  Trigger with hold affordance
@@ -181,27 +79,7 @@ describe("Overlay Trigger - Longpress", () => {
181
79
  </sp-action-group>
182
80
  </sp-popover>
183
81
  </overlay-trigger>
184
- `);
185
- const trigger = el.querySelector('[slot="trigger"]');
186
- const content = el.querySelector('[slot="longpress-content"]');
187
- await elementUpdated(el);
188
- expect(el.hasLongpressContent).to.be.true;
189
- expect(el.childNodes.length, "always").to.equal(6);
190
- el.removeAttribute("hold-affordance");
191
- el.removeChild(content);
192
- await elementUpdated(el);
193
- expect(trigger.hasAttribute("aria-describedby")).to.be.false;
194
- expect(el.hasLongpressContent).to.be.false;
195
- expect(el.childNodes.length, "always").to.equal(4);
196
- el.setAttribute("hold-affordance", "true");
197
- el.append(content);
198
- await elementUpdated(el);
199
- await findDescribedNode("Trigger with hold affordance", LONGPRESS_INSTRUCTIONS.keyboard);
200
- expect(el.hasLongpressContent).to.be.true;
201
- expect(el.childNodes.length, "always").to.equal(6);
202
- });
203
- it("recognises multiple overlay triggers in a11y tree", async () => {
204
- const el = await fixture(html`
82
+ `),n=t.querySelector('[slot="trigger"]'),e=t.querySelector('[slot="longpress-content"]');await i(t),o(t.hasLongpressContent).to.be.true,o(t.childNodes.length,"always").to.equal(6),t.removeAttribute("hold-affordance"),t.removeChild(e),await i(t),o(n.hasAttribute("aria-describedby")).to.be.false,o(t.hasLongpressContent).to.be.false,o(t.childNodes.length,"always").to.equal(4),t.setAttribute("hold-affordance","true"),t.append(e),await i(t),await p("Trigger with hold affordance",c.keyboard),o(t.hasLongpressContent).to.be.true,o(t.childNodes.length,"always").to.equal(6)}),it("recognises multiple overlay triggers in a11y tree",async()=>{const t=await g(u`
205
83
  <div id="container">
206
84
  <overlay-trigger id="first-trigger" placement="right-start">
207
85
  <sp-action-button slot="trigger" hold-affordance>
@@ -240,19 +118,7 @@ describe("Overlay Trigger - Longpress", () => {
240
118
  </sp-popover>
241
119
  </overlay-trigger>
242
120
  </div>
243
- `);
244
- await elementUpdated(el);
245
- const div = document.getElementById("container");
246
- const firstTrigger = document.getElementById("first-trigger");
247
- const secondTrigger = document.getElementById("second-trigger");
248
- expect(firstTrigger.hasLongpressContent).to.be.true;
249
- expect(secondTrigger.hasLongpressContent).to.be.true;
250
- expect(div.childNodes.length, "always").to.equal(5);
251
- await findDescribedNode("First button", LONGPRESS_INSTRUCTIONS.keyboard);
252
- await findDescribedNode("Second button", LONGPRESS_INSTRUCTIONS.keyboard);
253
- });
254
- it("describes interactions differently to the user", async () => {
255
- const test = await fixture(html`
121
+ `);await i(t);const n=document.getElementById("container"),e=document.getElementById("first-trigger"),s=document.getElementById("second-trigger");o(e.hasLongpressContent).to.be.true,o(s.hasLongpressContent).to.be.true,o(n.childNodes.length,"always").to.equal(5),await p("First button",c.keyboard),await p("Second button",c.keyboard)}),it("describes interactions differently to the user",async()=>{const t=await g(u`
256
122
  <div>
257
123
  <input id="first" />
258
124
  <overlay-trigger placement="right-start">
@@ -285,39 +151,5 @@ describe("Overlay Trigger - Longpress", () => {
285
151
  </overlay-trigger>
286
152
  <input id="last" />
287
153
  </div>
288
- `);
289
- const el = test.querySelector("overlay-trigger");
290
- const first = test.querySelector("#first");
291
- const firstRect = first.getBoundingClientRect();
292
- const trigger = el.querySelector("sp-action-button");
293
- const content = el.querySelector('[slot="longpress-content"]');
294
- await elementUpdated(el);
295
- expect(trigger).to.not.be.null;
296
- expect(content).to.not.be.null;
297
- expect(trigger.hasAttribute("aria-describedby")).to.be.true;
298
- expect(content.open).to.be.false;
299
- first.focus();
300
- await sendKeys({
301
- press: "Tab"
302
- });
303
- expect(document.activeElement === trigger, "Trigger focused").to.be.true;
304
- await findDescribedNode("Trigger with hold affordance", LONGPRESS_INSTRUCTIONS.keyboard);
305
- await sendKeys({
306
- press: "Tab"
307
- });
308
- await findDescribedNode("Trigger with hold affordance", LONGPRESS_INSTRUCTIONS.keyboard);
309
- await sendMouse({
310
- steps: [
311
- {
312
- type: "click",
313
- position: [firstRect.x, firstRect.y]
314
- }
315
- ]
316
- });
317
- trigger.focus();
318
- await nextFrame();
319
- await nextFrame();
320
- await findDescribedNode("Trigger with hold affordance", LONGPRESS_INSTRUCTIONS.keyboard);
321
- });
322
- });
154
+ `),n=t.querySelector("overlay-trigger"),e=t.querySelector("#first"),s=e.getBoundingClientRect(),r=n.querySelector("sp-action-button"),d=n.querySelector('[slot="longpress-content"]');await i(n),o(r).to.not.be.null,o(d).to.not.be.null,o(r.hasAttribute("aria-describedby")).to.be.true,o(d.open).to.be.false,e.focus(),await l({press:"Tab"}),o(document.activeElement===r,"Trigger focused").to.be.true,await p("Trigger with hold affordance",c.keyboard),await l({press:"Tab"}),await p("Trigger with hold affordance",c.keyboard),await f({steps:[{type:"click",position:[s.x,s.y]}]}),r.focus(),await y(),await y(),await p("Trigger with hold affordance",c.keyboard)})});
323
155
  //# sourceMappingURL=overlay-trigger-longpress.test.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["overlay-trigger-longpress.test.ts"],
4
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 fixture,\n html,\n nextFrame,\n oneEvent,\n waitUntil,\n} from '@open-wc/testing';\nimport { ActionButton } from '@spectrum-web-components/action-button';\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport '@spectrum-web-components/action-group/sp-action-group.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-magnify.js';\nimport { Popover } from '@spectrum-web-components/popover';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport {\n LONGPRESS_INSTRUCTIONS,\n OverlayTrigger,\n} from '@spectrum-web-components/overlay';\nimport '@spectrum-web-components/overlay/overlay-trigger.js';\nimport { sendKeys } from '@web/test-runner-commands';\nimport { spy } from 'sinon';\nimport { sendMouse } from '../../../test/plugins/browser.js';\nimport { findDescribedNode } from '../../../test/testing-helpers-a11y.js';\n\ndescribe('Overlay Trigger - Longpress', () => {\n it('displays `longpress` content', async () => {\n const el = await fixture<OverlayTrigger>(\n (() => html`\n <overlay-trigger placement=\"right-start\">\n <sp-action-button slot=\"trigger\" hold-affordance>\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-popover slot=\"longpress-content\" tip>\n <sp-action-group\n selects=\"single\"\n vertical\n style=\"margin: calc(var(--spectrum-actiongroup-button-gap-y,var(--spectrum-global-dimension-size-100)) / 2);\"\n >\n <sp-action-button>\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-action-button>\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-action-button>\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n </sp-action-group>\n </sp-popover>\n </overlay-trigger>\n `)()\n );\n\n await elementUpdated(el);\n\n const trigger = el.querySelector('sp-action-button') as ActionButton;\n const content = el.querySelector(\n '[slot=\"longpress-content\"]'\n ) as Popover;\n\n expect(trigger).to.not.be.null;\n expect(content).to.not.be.null;\n expect(content.open).to.be.false;\n\n trigger.focus();\n let open = oneEvent(el, 'sp-opened');\n await sendKeys({\n press: 'Space',\n });\n await open;\n expect(content.open, 'opens for `Space`').to.be.true;\n\n let closed = oneEvent(el, 'sp-closed');\n document.body.click();\n await closed;\n\n expect(!content.open, 'closes for `Space`').to.be.true;\n\n trigger.focus();\n open = oneEvent(el, 'sp-opened');\n sendKeys({\n press: 'Alt+ArrowDown',\n });\n await open;\n expect(content.open, 'opens for `Alt+ArrowDown`').to.be.true;\n closed = oneEvent(el, 'sp-closed');\n await sendKeys({\n press: 'Escape',\n });\n await closed;\n expect(!content.open, 'closes for `Alt+ArrowDown`').to.be.true;\n await elementUpdated(el);\n\n open = oneEvent(el, 'sp-opened');\n trigger.dispatchEvent(new Event('pointerdown'));\n await open;\n expect(content.open, 'opens for `pointerdown`').to.be.true;\n closed = oneEvent(el, 'sp-closed');\n await sendKeys({\n press: 'Escape',\n });\n await closed;\n expect(!content.open, 'closes for `pointerdown`').to.be.true;\n });\n it('displays `longpress` 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=\"longpress\"\n @sp-opened=${() => openedSpy()}\n @sp-closed=${() => closedSpy()}\n >\n <sp-action-button slot=\"trigger\" hold-affordance>\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-popover slot=\"longpress-content\" tip></sp-popover>\n </overlay-trigger>\n `)()\n );\n await elementUpdated(el);\n\n await waitUntil(\n () => openedSpy.calledOnce,\n 'longpress content projected to overlay',\n { timeout: 2000 }\n );\n\n const closed = oneEvent(el, 'sp-closed');\n el.removeAttribute('open');\n await closed;\n\n expect(closedSpy.calledOnce, 'longpress content returned').to.be.true;\n });\n it('describes longpress interaction accessibly', async () => {\n const el = await fixture<OverlayTrigger>(\n html`\n <overlay-trigger placement=\"right-start\">\n <sp-action-button slot=\"trigger\" hold-affordance>\n Trigger with hold affordance\n </sp-action-button>\n <sp-popover slot=\"longpress-content\" tip>\n <sp-action-group\n selects=\"single\"\n vertical\n style=\"margin: calc(var(--spectrum-actiongroup-button-gap-y,var(--spectrum-global-dimension-size-100)) / 2);\"\n >\n <sp-action-button>\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-action-button>\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-action-button>\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n </sp-action-group>\n </sp-popover>\n </overlay-trigger>\n `\n );\n const trigger = el.querySelector('[slot=\"trigger\"]') as HTMLElement;\n\n await elementUpdated(el);\n\n expect(trigger.hasAttribute('aria-describedby')).to.be.true;\n expect(el.open).to.be.undefined;\n /*\n * This test passes because OverlayTrigger adds a new node to describe\n * the longpress interaction now available on the trigger element\n */\n expect(el.childNodes.length, 'always').to.equal(6);\n\n await findDescribedNode(\n 'Trigger with hold affordance',\n LONGPRESS_INSTRUCTIONS.keyboard\n );\n\n const opened = oneEvent(el, 'sp-opened');\n trigger.dispatchEvent(\n new Event('longpress', { bubbles: true, composed: true })\n );\n await opened;\n\n expect(el.open).to.equal('longpress');\n expect(el.childNodes.length, 'always').to.equal(6);\n\n await findDescribedNode(\n 'Trigger with hold affordance',\n LONGPRESS_INSTRUCTIONS.keyboard\n );\n\n const closed = oneEvent(el, 'sp-closed');\n\n await sendKeys({\n press: 'Escape',\n });\n await closed;\n\n expect(el.open).to.be.null;\n expect(trigger.hasAttribute('aria-describedby')).to.be.true;\n expect(el.childNodes.length, 'always').to.equal(6);\n\n await findDescribedNode(\n 'Trigger with hold affordance',\n LONGPRESS_INSTRUCTIONS.keyboard\n );\n });\n it('removes longpress `aria-describedby` description element when longpress content is removed', async () => {\n const el = await fixture<OverlayTrigger>(\n html`\n <overlay-trigger placement=\"right-start\">\n <sp-action-button slot=\"trigger\" hold-affordance>\n Trigger with hold affordance\n </sp-action-button>\n <sp-popover slot=\"longpress-content\" tip>\n <sp-action-group\n selects=\"single\"\n vertical\n style=\"margin: calc(var(--spectrum-actiongroup-button-gap-y,var(--spectrum-global-dimension-size-100)) / 2);\"\n >\n <sp-action-button>\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-action-button>\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-action-button>\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n </sp-action-group>\n </sp-popover>\n </overlay-trigger>\n `\n );\n const trigger = el.querySelector('[slot=\"trigger\"]') as HTMLElement;\n const content = el.querySelector(\n '[slot=\"longpress-content\"]'\n ) as Popover;\n await elementUpdated(el);\n\n expect(el.hasLongpressContent).to.be.true;\n expect(el.childNodes.length, 'always').to.equal(6);\n\n el.removeAttribute('hold-affordance');\n el.removeChild(content);\n\n await elementUpdated(el);\n\n expect(trigger.hasAttribute('aria-describedby')).to.be.false;\n expect(el.hasLongpressContent).to.be.false;\n expect(el.childNodes.length, 'always').to.equal(4);\n\n el.setAttribute('hold-affordance', 'true');\n el.append(content);\n\n await elementUpdated(el);\n await findDescribedNode(\n 'Trigger with hold affordance',\n LONGPRESS_INSTRUCTIONS.keyboard\n );\n\n expect(el.hasLongpressContent).to.be.true;\n expect(el.childNodes.length, 'always').to.equal(6);\n });\n it('recognises multiple overlay triggers in a11y tree', async () => {\n const el = await fixture<OverlayTrigger>(\n html`\n <div id=\"container\">\n <overlay-trigger id=\"first-trigger\" placement=\"right-start\">\n <sp-action-button slot=\"trigger\" hold-affordance>\n First button\n </sp-action-button>\n <sp-popover slot=\"longpress-content\" tip>\n <sp-action-group\n selects=\"single\"\n vertical\n style=\"margin: calc(var(--spectrum-actiongroup-button-gap-y,var(--spectrum-global-dimension-size-100)) / 2);\"\n >\n <sp-action-button>\n <sp-icon-magnify\n slot=\"icon\"\n ></sp-icon-magnify>\n </sp-action-button>\n </sp-action-group>\n </sp-popover>\n </overlay-trigger>\n <overlay-trigger id=\"second-trigger\" placement=\"left-start\">\n <sp-action-button slot=\"trigger\" hold-affordance>\n Second button\n </sp-action-button>\n <sp-popover slot=\"longpress-content\" tip>\n <sp-action-group\n selects=\"single\"\n vertical\n style=\"margin: calc(var(--spectrum-actiongroup-button-gap-y,var(--spectrum-global-dimension-size-100)) / 2);\"\n >\n <sp-action-button>\n <sp-icon-magnify\n slot=\"icon\"\n ></sp-icon-magnify>\n </sp-action-button>\n </sp-action-group>\n </sp-popover>\n </overlay-trigger>\n </div>\n `\n );\n await elementUpdated(el);\n\n const div = document.getElementById('container') as HTMLElement;\n const firstTrigger = document.getElementById(\n 'first-trigger'\n ) as OverlayTrigger;\n const secondTrigger = document.getElementById(\n 'second-trigger'\n ) as OverlayTrigger;\n\n expect(firstTrigger.hasLongpressContent).to.be.true;\n expect(secondTrigger.hasLongpressContent).to.be.true;\n expect(div.childNodes.length, 'always').to.equal(5);\n\n await findDescribedNode(\n 'First button',\n LONGPRESS_INSTRUCTIONS.keyboard\n );\n await findDescribedNode(\n 'Second button',\n LONGPRESS_INSTRUCTIONS.keyboard\n );\n });\n it('describes interactions differently to the user', async () => {\n const test = await fixture<OverlayTrigger>(\n html`\n <div>\n <input id=\"first\" />\n <overlay-trigger placement=\"right-start\">\n <sp-action-button slot=\"trigger\" hold-affordance>\n Trigger with hold affordance\n </sp-action-button>\n <sp-popover slot=\"longpress-content\" tip>\n <sp-action-group\n selects=\"single\"\n vertical\n style=\"margin: calc(var(--spectrum-actiongroup-button-gap-y,var(--spectrum-global-dimension-size-100)) / 2);\"\n >\n <sp-action-button>\n <sp-icon-magnify\n slot=\"icon\"\n ></sp-icon-magnify>\n </sp-action-button>\n <sp-action-button>\n <sp-icon-magnify\n slot=\"icon\"\n ></sp-icon-magnify>\n </sp-action-button>\n <sp-action-button>\n <sp-icon-magnify\n slot=\"icon\"\n ></sp-icon-magnify>\n </sp-action-button>\n </sp-action-group>\n </sp-popover>\n </overlay-trigger>\n <input id=\"last\" />\n </div>\n `\n );\n const el = test.querySelector('overlay-trigger') as OverlayTrigger;\n const first = test.querySelector('#first') as HTMLElement;\n const firstRect = first.getBoundingClientRect();\n const trigger = el.querySelector('sp-action-button') as HTMLElement;\n const content = el.querySelector(\n '[slot=\"longpress-content\"]'\n ) as Popover;\n\n await elementUpdated(el);\n\n expect(trigger).to.not.be.null;\n expect(content).to.not.be.null;\n expect(trigger.hasAttribute('aria-describedby')).to.be.true;\n expect(content.open).to.be.false;\n\n first.focus();\n\n await sendKeys({\n press: 'Tab',\n });\n\n expect(document.activeElement === trigger, 'Trigger focused').to.be\n .true;\n\n await findDescribedNode(\n 'Trigger with hold affordance',\n LONGPRESS_INSTRUCTIONS.keyboard\n );\n\n await sendKeys({\n press: 'Tab',\n });\n\n await findDescribedNode(\n 'Trigger with hold affordance',\n LONGPRESS_INSTRUCTIONS.keyboard\n );\n\n /*\n * The following re-establishes that focus is not visible\n * for this portion of the test. That way, the LONGPRESS_INSTRUCTIONS\n * change appropriately depending on the type of interaction.\n */\n await sendMouse({\n steps: [\n {\n type: 'click',\n position: [firstRect.x, firstRect.y],\n },\n ],\n });\n\n trigger.focus();\n\n await nextFrame();\n await nextFrame();\n\n await findDescribedNode(\n 'Trigger with hold affordance',\n LONGPRESS_INSTRUCTIONS.keyboard\n );\n });\n});\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }