@spectrum-web-components/overlay 0.41.1 → 0.41.2

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 (100) hide show
  1. package/custom-elements.json +996 -314
  2. package/package.json +31 -7
  3. package/src/AbstractOverlay.d.ts +13 -3
  4. package/src/AbstractOverlay.dev.js +54 -19
  5. package/src/AbstractOverlay.dev.js.map +2 -2
  6. package/src/AbstractOverlay.js +1 -1
  7. package/src/AbstractOverlay.js.map +3 -3
  8. package/src/ClickController.d.ts +14 -0
  9. package/src/ClickController.dev.js +42 -0
  10. package/src/ClickController.dev.js.map +7 -0
  11. package/src/ClickController.js +2 -0
  12. package/src/ClickController.js.map +7 -0
  13. package/src/HoverController.d.ts +19 -0
  14. package/src/HoverController.dev.js +141 -0
  15. package/src/HoverController.dev.js.map +7 -0
  16. package/src/HoverController.js +2 -0
  17. package/src/HoverController.js.map +7 -0
  18. package/src/InteractionController.d.ts +23 -0
  19. package/src/InteractionController.dev.js +45 -0
  20. package/src/InteractionController.dev.js.map +7 -0
  21. package/src/InteractionController.js +2 -0
  22. package/src/InteractionController.js.map +7 -0
  23. package/src/LongpressController.d.ts +21 -0
  24. package/src/LongpressController.dev.js +157 -0
  25. package/src/LongpressController.dev.js.map +7 -0
  26. package/src/LongpressController.js +2 -0
  27. package/src/LongpressController.js.map +7 -0
  28. package/src/Overlay.d.ts +17 -50
  29. package/src/Overlay.dev.js +86 -363
  30. package/src/Overlay.dev.js.map +2 -2
  31. package/src/Overlay.js +10 -10
  32. package/src/Overlay.js.map +3 -3
  33. package/src/OverlayDialog.dev.js +8 -1
  34. package/src/OverlayDialog.dev.js.map +2 -2
  35. package/src/OverlayDialog.js +1 -1
  36. package/src/OverlayDialog.js.map +3 -3
  37. package/src/OverlayNoPopover.dev.js +9 -3
  38. package/src/OverlayNoPopover.dev.js.map +2 -2
  39. package/src/OverlayNoPopover.js +1 -1
  40. package/src/OverlayNoPopover.js.map +3 -3
  41. package/src/OverlayPopover.dev.js +10 -1
  42. package/src/OverlayPopover.dev.js.map +2 -2
  43. package/src/OverlayPopover.js +1 -1
  44. package/src/OverlayPopover.js.map +3 -3
  45. package/src/OverlayStack.dev.js +3 -0
  46. package/src/OverlayStack.dev.js.map +2 -2
  47. package/src/OverlayStack.js +1 -1
  48. package/src/OverlayStack.js.map +2 -2
  49. package/src/index.d.ts +1 -0
  50. package/src/index.dev.js +1 -0
  51. package/src/index.dev.js.map +2 -2
  52. package/src/index.js +1 -1
  53. package/src/index.js.map +2 -2
  54. package/src/overlay-trigger-directive.d.ts +31 -0
  55. package/src/overlay-trigger-directive.dev.js +102 -0
  56. package/src/overlay-trigger-directive.dev.js.map +7 -0
  57. package/src/overlay-trigger-directive.js +2 -0
  58. package/src/overlay-trigger-directive.js.map +7 -0
  59. package/src/overlay-trigger.css.dev.js +1 -1
  60. package/src/overlay-trigger.css.dev.js.map +1 -1
  61. package/src/overlay-trigger.css.js +1 -1
  62. package/src/overlay-trigger.css.js.map +1 -1
  63. package/src/overlay-types.d.ts +7 -0
  64. package/src/overlay-types.dev.js.map +1 -1
  65. package/src/overlay-types.js.map +1 -1
  66. package/src/overlay.css.dev.js +1 -3
  67. package/src/overlay.css.dev.js.map +2 -2
  68. package/src/overlay.css.js +1 -3
  69. package/src/overlay.css.js.map +2 -2
  70. package/src/slottable-request-event.d.ts +7 -0
  71. package/src/slottable-request-event.dev.js +28 -0
  72. package/src/slottable-request-event.dev.js.map +7 -0
  73. package/src/slottable-request-event.js +2 -0
  74. package/src/slottable-request-event.js.map +7 -0
  75. package/stories/overlay-directive.stories.js +203 -0
  76. package/stories/overlay-directive.stories.js.map +7 -0
  77. package/stories/overlay-element.stories.js +44 -1
  78. package/stories/overlay-element.stories.js.map +2 -2
  79. package/stories/overlay.stories.js +9 -9
  80. package/stories/overlay.stories.js.map +2 -2
  81. package/test/benchmark/basic-test.js +24 -1
  82. package/test/benchmark/basic-test.js.map +2 -2
  83. package/test/benchmark/directive-test.js +42 -0
  84. package/test/benchmark/directive-test.js.map +7 -0
  85. package/test/benchmark/element-test.js +40 -0
  86. package/test/benchmark/element-test.js.map +7 -0
  87. package/test/benchmark/lazy-test.js +48 -0
  88. package/test/benchmark/lazy-test.js.map +7 -0
  89. package/test/index.js +11 -176
  90. package/test/index.js.map +2 -2
  91. package/test/overlay-directive.test-vrt.js +5 -0
  92. package/test/overlay-directive.test-vrt.js.map +7 -0
  93. package/test/overlay-directive.test.js +147 -0
  94. package/test/overlay-directive.test.js.map +7 -0
  95. package/test/overlay-element.test.js +152 -1
  96. package/test/overlay-element.test.js.map +2 -2
  97. package/test/overlay-trigger-directive.test.js +75 -0
  98. package/test/overlay-trigger-directive.test.js.map +7 -0
  99. package/test/overlay-trigger-extended.test.js +1 -1
  100. package/test/overlay-trigger-extended.test.js.map +2 -2
package/test/index.js CHANGED
@@ -6,15 +6,14 @@ import {
6
6
  expect,
7
7
  html,
8
8
  nextFrame,
9
- oneEvent,
10
- waitUntil
9
+ oneEvent
11
10
  } from "@open-wc/testing";
12
11
  import "@spectrum-web-components/button/sp-button.js";
13
12
  import "@spectrum-web-components/popover/sp-popover.js";
14
13
  import "@spectrum-web-components/theme/sp-theme.js";
15
14
  import { sendMouse } from "../../../test/plugins/browser.js";
16
15
  import { sendKeys } from "@web/test-runner-commands";
17
- import { isWebKit } from "@spectrum-web-components/shared";
16
+ import { isChrome } from "@spectrum-web-components/shared";
18
17
  export const runOverlayTriggerTests = (type) => {
19
18
  describe(`Overlay Trigger - ${type}`, () => {
20
19
  describe("open/close", () => {
@@ -289,9 +288,6 @@ export const runOverlayTriggerTests = (type) => {
289
288
  ).to.be.false;
290
289
  });
291
290
  it("opens a nested popover", async function() {
292
- if (isWebKit()) {
293
- this.skip();
294
- }
295
291
  expect(
296
292
  await isOnTopLayer(this.outerClickContent),
297
293
  "hover not available at point"
@@ -322,6 +318,7 @@ export const runOverlayTriggerTests = (type) => {
322
318
  ).to.be.true;
323
319
  });
324
320
  it('focus previous "modal" when closing nested "modal"', async function() {
321
+ var _a;
325
322
  this.outerTrigger.type = "modal";
326
323
  this.innerTrigger.type = "modal";
327
324
  expect(
@@ -380,10 +377,13 @@ export const runOverlayTriggerTests = (type) => {
380
377
  ).to.be.false;
381
378
  expect(
382
379
  document.activeElement === this.innerButton,
383
- "outer popover recieved focus"
380
+ `outer popover recieved focus: ${(_a = document.activeElement) == null ? void 0 : _a.localName}`
384
381
  ).to.be.true;
385
382
  });
386
383
  it("escape closes an open popover", async function() {
384
+ if (isChrome()) {
385
+ this.skip();
386
+ }
387
387
  this.outerTrigger.type = "modal";
388
388
  this.innerTrigger.type = "modal";
389
389
  const outerOpen = oneEvent(this.outerButton, "sp-opened");
@@ -398,18 +398,7 @@ export const runOverlayTriggerTests = (type) => {
398
398
  await innerOpen;
399
399
  expect(
400
400
  await isOnTopLayer(this.outerClickContent),
401
- "outer click content available at point"
402
- ).to.be.true;
403
- expect(
404
- await isOnTopLayer(this.innerClickContent),
405
- "inner click content available at point"
406
- ).to.be.true;
407
- await sendKeys({
408
- press: "Space"
409
- });
410
- expect(
411
- await isOnTopLayer(this.outerClickContent),
412
- "outer click content available at point"
401
+ "outer click content available at point, 1"
413
402
  ).to.be.true;
414
403
  expect(
415
404
  await isOnTopLayer(this.innerClickContent),
@@ -422,11 +411,11 @@ export const runOverlayTriggerTests = (type) => {
422
411
  await innerClose;
423
412
  expect(
424
413
  await isOnTopLayer(this.outerClickContent),
425
- "outer click content available at point"
414
+ "outer click content available at point, 2"
426
415
  ).to.be.true;
427
416
  expect(
428
417
  await isOnTopLayer(this.innerClickContent),
429
- "inner click content not available at point"
418
+ "inner click content not available at point, 1"
430
419
  ).to.be.false;
431
420
  const outerClose = oneEvent(this.outerButton, "sp-closed");
432
421
  await sendKeys({
@@ -439,13 +428,10 @@ export const runOverlayTriggerTests = (type) => {
439
428
  ).to.be.false;
440
429
  expect(
441
430
  await isOnTopLayer(this.innerClickContent),
442
- "inner click content not available at point"
431
+ "inner click content not available at point, 2"
443
432
  ).to.be.false;
444
433
  });
445
434
  it("click closes an open popover", async function() {
446
- if (isWebKit()) {
447
- this.skip();
448
- }
449
435
  this.outerTrigger.type = "auto";
450
436
  this.innerTrigger.type = "auto";
451
437
  const outerOpen = oneEvent(this.outerButton, "sp-opened");
@@ -615,157 +601,6 @@ export const runOverlayTriggerTests = (type) => {
615
601
  });
616
602
  await Promise.all(closes);
617
603
  });
618
- it.skip('manages multiple layers of `type="modal"', async () => {
619
- var _a, _b, _c;
620
- const el = await fixture(html`
621
- <overlay-trigger type="modal">
622
- <sp-button slot="trigger" variant="accent">
623
- Toggle Dialog
624
- </sp-button>
625
- <sp-popover slot="click-content">
626
- <sp-dialog no-divider>
627
- <overlay-trigger>
628
- <sp-button slot="trigger" variant="primary">
629
- Toggle Dialog
630
- </sp-button>
631
- <sp-popover slot="click-content">
632
- <sp-dialog no-divider>
633
- <overlay-trigger type="modal">
634
- <sp-button
635
- slot="trigger"
636
- variant="secondary"
637
- >
638
- Toggle Dialog
639
- </sp-button>
640
- <sp-popover
641
- slot="click-content"
642
- >
643
- <sp-dialog no-divider>
644
- <p>
645
- When you get this
646
- deep, this
647
- ActiveOverlay should
648
- be the only one in
649
- [slot="open"].
650
- </p>
651
- <p>
652
- All of the rest of
653
- the ActiveOverlay
654
- elements should have
655
- had their [slot]
656
- attribute removed.
657
- </p>
658
- <p>
659
- Closing this
660
- ActiveOverlay should
661
- replace them...
662
- </p>
663
- </sp-dialog>
664
- </sp-popover>
665
- </overlay-trigger>
666
- </sp-dialog>
667
- </sp-popover>
668
- </overlay-trigger>
669
- </sp-dialog>
670
- </sp-popover>
671
- </overlay-trigger>
672
- `);
673
- const overlayTriggers = [
674
- ...el.querySelectorAll("overlay-trigger")
675
- ];
676
- let activeOverlays = [
677
- ...document.querySelectorAll("active-overlay")
678
- ];
679
- const triggers = [
680
- ...el.querySelectorAll('sp-button[slot="trigger"]')
681
- ];
682
- expect(activeOverlays.length, "no previous overlays").to.equal(
683
- 0
684
- );
685
- let open = oneEvent(triggers[0], "sp-opened");
686
- (_a = triggers[0]) == null ? void 0 : _a.click();
687
- await open;
688
- await elementUpdated(overlayTriggers[0]);
689
- activeOverlays = [
690
- ...document.querySelectorAll("active-overlay")
691
- ];
692
- expect(
693
- activeOverlays.length,
694
- "The first `active-overlay` element has been added."
695
- ).to.equal(1);
696
- expect(
697
- activeOverlays[0].slot,
698
- "first overlay, first time"
699
- ).to.equal("open");
700
- open = oneEvent(triggers[1], "sp-opened");
701
- (_b = triggers[1]) == null ? void 0 : _b.click();
702
- await open;
703
- await elementUpdated(overlayTriggers[1]);
704
- activeOverlays = [
705
- ...document.querySelectorAll("active-overlay")
706
- ];
707
- expect(
708
- activeOverlays.length,
709
- "The second `active-overlay` element has been added."
710
- ).to.equal(2);
711
- expect(
712
- activeOverlays[0].slot,
713
- "first overlay, second time"
714
- ).to.equal("open");
715
- expect(
716
- activeOverlays[1].slot,
717
- "second overlay, second time"
718
- ).to.equal("open");
719
- open = oneEvent(triggers[2], "sp-opened");
720
- (_c = triggers[2]) == null ? void 0 : _c.click();
721
- await open;
722
- await elementUpdated(overlayTriggers[2]);
723
- activeOverlays = [
724
- ...document.querySelectorAll("active-overlay")
725
- ];
726
- expect(
727
- activeOverlays.length,
728
- "The third `active-overlay` element has been added."
729
- ).to.equal(3);
730
- expect(
731
- activeOverlays[0].hasAttribute("slot"),
732
- "first overlay, third time"
733
- ).to.be.false;
734
- expect(
735
- activeOverlays[1].hasAttribute("slot"),
736
- "second overlay, third time"
737
- ).to.be.false;
738
- expect(
739
- activeOverlays[2].slot,
740
- "third overlay, third time"
741
- ).to.equal("open");
742
- await nextFrame();
743
- const closed = oneEvent(triggers[2], "sp-closed");
744
- sendMouse({
745
- steps: [
746
- {
747
- type: "click",
748
- position: [1, 1]
749
- }
750
- ]
751
- });
752
- await closed;
753
- await elementUpdated(overlayTriggers[2]);
754
- activeOverlays = [
755
- ...document.querySelectorAll("active-overlay")
756
- ];
757
- expect(
758
- activeOverlays.length,
759
- "The third `active-overlay` element has been removed."
760
- ).to.equal(2);
761
- await waitUntil(() => {
762
- return activeOverlays[0].slot === "open";
763
- }, "first overlay, last time");
764
- expect(
765
- activeOverlays[1].slot,
766
- "second overlay, last time"
767
- ).to.equal("open");
768
- });
769
604
  });
770
605
  });
771
606
  };
package/test/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["index.ts"],
4
- "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport { fixture, isOnTopLayer } from '../../../test/testing-helpers.js';\nimport {\n aTimeout,\n elementUpdated,\n expect,\n html,\n nextFrame,\n oneEvent,\n waitUntil,\n} from '@open-wc/testing';\n\nimport {\n OverlayTrigger,\n TriggerInteractions,\n} from '@spectrum-web-components/overlay';\nimport '@spectrum-web-components/button/sp-button.js';\nimport { Button } from '@spectrum-web-components/button';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport { Popover } from '@spectrum-web-components/popover';\nimport '@spectrum-web-components/theme/sp-theme.js';\nimport { sendMouse } from '../../../test/plugins/browser.js';\nimport { sendKeys } from '@web/test-runner-commands';\nimport { isWebKit } from '@spectrum-web-components/shared';\n\nexport const runOverlayTriggerTests = (type: string): void => {\n describe(`Overlay Trigger - ${type}`, () => {\n describe('open/close', () => {\n beforeEach(async function () {\n this.testDiv = await fixture<HTMLDivElement>(\n html`\n <div>\n <style>\n body {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n </style>\n <overlay-trigger id=\"trigger\" placement=\"top\">\n <sp-button\n id=\"outer-button\"\n variant=\"primary\"\n slot=\"trigger\"\n >\n Show Popover\n </sp-button>\n <sp-popover\n id=\"outer-popover\"\n slot=\"click-content\"\n direction=\"bottom\"\n tip\n >\n <sp-dialog\n no-divider\n class=\"options-popover-content\"\n >\n <overlay-trigger\n id=\"inner-trigger\"\n placement=\"bottom\"\n >\n <sp-button\n id=\"inner-button\"\n slot=\"trigger\"\n >\n Press Me\n </sp-button>\n <sp-popover\n id=\"inner-popover\"\n slot=\"click-content\"\n direction=\"bottom\"\n tip\n >\n <sp-dialog\n no-divider\n class=\"options-popover-content\"\n >\n Another Popover\n <sp-button>\n Does nothing\n </sp-button>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n </sp-dialog>\n </sp-popover>\n <div\n id=\"hover-content\"\n slot=\"hover-content\"\n class=\"tooltip\"\n delay=\"100\"\n >\n Tooltip\n </div>\n </overlay-trigger>\n </div>\n `\n );\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n\n this.innerTrigger = this.testDiv.querySelector(\n '#inner-trigger'\n ) as OverlayTrigger;\n this.outerTrigger = this.testDiv.querySelector(\n '#trigger'\n ) as OverlayTrigger;\n this.innerButton = this.testDiv.querySelector(\n '#inner-button'\n ) as Button;\n this.outerButton = this.testDiv.querySelector(\n '#outer-button'\n ) as Button;\n this.innerClickContent = this.testDiv.querySelector(\n '#inner-popover'\n ) as Popover;\n this.outerClickContent = this.testDiv.querySelector(\n '#outer-popover'\n ) as Popover;\n this.hoverContent = this.testDiv.querySelector(\n '#hover-content'\n ) as HTMLDivElement;\n });\n\n it('opens a popover', async function () {\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'popover not available at point'\n ).to.be.false;\n\n expect(this.outerButton).to.exist;\n const open = oneEvent(this.outerTrigger, 'sp-opened');\n this.outerButton.click();\n await open;\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'popover available at point'\n ).to.be.true;\n });\n\n it('[disabled] closes a popover', async function () {\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'popover not available at point'\n ).to.be.false;\n expect(this.outerTrigger.disabled).to.be.false;\n\n expect(this.outerButton).to.exist;\n\n const opened = oneEvent(this.outerButton, 'sp-opened');\n this.outerButton.click();\n await opened;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'popover available at point'\n ).to.be.true;\n\n const closed = oneEvent(this.outerButton, 'sp-closed');\n this.outerTrigger.disabled = true;\n await closed;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'popover not available at point'\n ).to.be.false;\n });\n\n it('resizes a popover', async function () {\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'popover not available at point'\n ).to.be.false;\n\n expect(this.outerButton).to.exist;\n const open = oneEvent(this.outerTrigger, 'sp-opened');\n this.outerButton.click();\n await open;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'popover available at point'\n ).to.be.true;\n\n window.dispatchEvent(new Event('resize'));\n window.dispatchEvent(new Event('resize'));\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'popover available at point'\n ).to.be.true;\n });\n\n ['modal', 'replace', 'inline'].map((type: string) => {\n it(`opens a popover - [type=\"${type}\"]`, async function () {\n this.outerTrigger.type = type as Extract<\n TriggerInteractions,\n 'inline' | 'modal' | 'replace'\n >;\n await elementUpdated(this.outerTrigger);\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'popover not available at point'\n ).to.be.false;\n\n expect(this.outerButton).to.exist;\n const opened = oneEvent(this.outerTrigger, 'sp-opened');\n this.outerButton.click();\n await opened;\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'popover available at point'\n ).to.be.true;\n });\n });\n\n it('does not open a hover popover when a click popover is open', async function () {\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'popover not available at point'\n ).to.be.false;\n expect(\n await isOnTopLayer(this.hoverContent),\n 'hover not available at point'\n ).to.be.false;\n\n expect(this.outerButton).to.exist;\n const open = oneEvent(this.outerTrigger, 'sp-opened');\n this.outerButton.click();\n await open;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'popover available at point'\n ).to.be.true;\n expect(\n await isOnTopLayer(this.hoverContent),\n 'hover not available at point'\n ).to.be.false;\n\n this.outerButton.dispatchEvent(\n new Event('mouseenter', {\n bubbles: true,\n composed: true,\n })\n );\n\n await nextFrame();\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'popover available at point'\n ).to.be.true;\n expect(\n await isOnTopLayer(this.hoverContent),\n 'hover not available at point'\n ).to.be.false;\n });\n\n it('does not open a popover when [disabled]', async function () {\n const triggerZone = this.outerTrigger.shadowRoot.querySelector(\n '#trigger'\n ) as HTMLDivElement;\n\n expect(this.outerTrigger.disabled).to.be.false;\n let open = oneEvent(this.outerTrigger, 'sp-opened');\n this.outerButton.click();\n await open;\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'hover available at point'\n ).to.be.true;\n let closed = oneEvent(this.outerTrigger, 'sp-closed');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [1, 1],\n },\n ],\n });\n await closed;\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'hover not available at point'\n ).to.be.false;\n\n this.outerTrigger.disabled = true;\n await elementUpdated(this.outerTrigger);\n\n expect(this.outerTrigger.disabled).to.be.true;\n expect(this.outerTrigger.hasAttribute('disabled')).to.be.true;\n // // The overlay shouldn't open here.\n this.outerButton.click();\n await aTimeout(150);\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'hover not available at point'\n ).to.be.false;\n // The overlay shouldn't open here, either.\n triggerZone.dispatchEvent(new Event('mouseenter'));\n await aTimeout(150);\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'hover not available at point'\n ).to.be.false;\n\n this.outerTrigger.disabled = false;\n await elementUpdated(this.outerTrigger);\n\n expect(this.outerTrigger.disabled).to.be.false;\n expect(this.outerTrigger.hasAttribute('disabled')).to.be.false;\n open = oneEvent(this.outerTrigger, 'sp-opened');\n this.outerButton.click();\n await open;\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'hover available at point'\n ).to.be.true;\n closed = oneEvent(this.outerTrigger, 'sp-closed');\n this.outerButton.click();\n await closed;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'hover not available at point'\n ).to.be.false;\n });\n\n it('opens a nested popover', async function () {\n if (isWebKit()) {\n // breaks on https://bugs.webkit.org/show_bug.cgi?id=263081 skip for now.\n this.skip();\n }\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'hover not available at point'\n ).to.be.false;\n expect(\n await isOnTopLayer(this.innerClickContent),\n 'hover not available at point'\n ).to.be.false;\n\n expect(this.outerButton).to.exist;\n let open = oneEvent(this.outerTrigger, 'sp-opened');\n this.outerButton.click();\n await open;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content available at point'\n ).to.be.true;\n expect(await isOnTopLayer(this.innerClickContent)).to.be.false;\n\n open = oneEvent(this.innerTrigger, 'sp-opened');\n this.innerButton.click();\n await open;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content available at point'\n ).to.be.true;\n expect(\n await isOnTopLayer(this.innerClickContent),\n 'inner click content available at point'\n ).to.be.true;\n });\n\n it('focus previous \"modal\" when closing nested \"modal\"', async function () {\n this.outerTrigger.type = 'modal';\n this.innerTrigger.type = 'modal';\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content not available at point'\n ).to.be.false;\n expect(\n await isOnTopLayer(this.innerClickContent),\n 'inner click content not available at point'\n ).to.be.false;\n\n const outerOpen = oneEvent(this.outerButton, 'sp-opened');\n this.outerButton.click();\n await outerOpen;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content available at point'\n ).to.be.true;\n expect(\n await isOnTopLayer(this.innerClickContent),\n 'inner click content available at point'\n ).to.be.false;\n\n const innerOpen = oneEvent(this.innerButton, 'sp-opened');\n this.innerButton.click();\n await innerOpen;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content available at point'\n ).to.be.true;\n expect(\n await isOnTopLayer(this.innerClickContent),\n 'inner click content available at point'\n ).to.be.true;\n\n // Why does this make the test pass in Chromium? \uD83E\uDD37\uD83C\uDFFB\u200D\u2642\uFE0F\n await sendKeys({\n press: 'Space',\n });\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content available at point'\n ).to.be.true;\n expect(\n await isOnTopLayer(this.innerClickContent),\n 'inner click content available at point'\n ).to.be.true;\n\n const innerClose = oneEvent(this.innerButton, 'sp-closed');\n await sendKeys({\n press: 'Escape',\n });\n await innerClose;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content available at point'\n ).to.be.true;\n expect(\n await isOnTopLayer(this.innerClickContent),\n 'inner click content not available at point'\n ).to.be.false;\n\n expect(\n document.activeElement === this.innerButton,\n 'outer popover recieved focus'\n ).to.be.true;\n });\n\n it('escape closes an open popover', async function () {\n this.outerTrigger.type = 'modal';\n this.innerTrigger.type = 'modal';\n const outerOpen = oneEvent(this.outerButton, 'sp-opened');\n this.outerButton.click();\n await outerOpen;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content available at point'\n ).to.be.true;\n\n const innerOpen = oneEvent(this.innerButton, 'sp-opened');\n this.innerButton.click();\n await innerOpen;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content available at point'\n ).to.be.true;\n expect(\n await isOnTopLayer(this.innerClickContent),\n 'inner click content available at point'\n ).to.be.true;\n\n // Why does this make the test pass in Chromium? \uD83E\uDD37\uD83C\uDFFB\u200D\u2642\uFE0F\n await sendKeys({\n press: 'Space',\n });\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content available at point'\n ).to.be.true;\n expect(\n await isOnTopLayer(this.innerClickContent),\n 'inner click content available at point'\n ).to.be.true;\n\n const innerClose = oneEvent(this.innerButton, 'sp-closed');\n await sendKeys({\n press: 'Escape',\n });\n await innerClose;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content available at point'\n ).to.be.true;\n expect(\n await isOnTopLayer(this.innerClickContent),\n 'inner click content not available at point'\n ).to.be.false;\n\n const outerClose = oneEvent(this.outerButton, 'sp-closed');\n await sendKeys({\n press: 'Escape',\n });\n await outerClose;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content not available at point'\n ).to.be.false;\n expect(\n await isOnTopLayer(this.innerClickContent),\n 'inner click content not available at point'\n ).to.be.false;\n });\n\n it('click closes an open popover', async function () {\n if (isWebKit()) {\n // breaks on https://bugs.webkit.org/show_bug.cgi?id=263081 skip for now.\n this.skip();\n }\n this.outerTrigger.type = 'auto';\n this.innerTrigger.type = 'auto';\n const outerOpen = oneEvent(this.outerButton, 'sp-opened');\n this.outerButton.click();\n await outerOpen;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content is available at point'\n ).to.be.true;\n\n const innerOpen = oneEvent(this.innerButton, 'sp-opened');\n this.innerButton.click();\n await innerOpen;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content is available at point'\n ).to.be.true;\n expect(\n await isOnTopLayer(this.innerClickContent),\n 'inner click content is available at point'\n ).to.be.true;\n\n // Test that clicking in the overlay content does not close the overlay\n // 200ms is slightly more than the overlay animation fade out time (130ms)\n this.innerClickContent.click();\n await aTimeout(200);\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content is available at point'\n ).to.be.true;\n expect(\n await isOnTopLayer(this.innerClickContent),\n 'inner click content is available at point'\n ).to.be.true;\n\n const innerClose = oneEvent(this.innerButton, 'sp-closed');\n const outerClose = oneEvent(this.outerButton, 'sp-closed');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [1, 1],\n },\n ],\n });\n await innerClose;\n await outerClose;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content is not available at point'\n ).to.be.not;\n expect(\n await isOnTopLayer(this.innerClickContent),\n 'inner click content is not available at point'\n ).to.be.not;\n });\n\n it('opens a hover popover', async function () {\n expect(await isOnTopLayer(this.hoverContent)).to.be.false;\n\n const rect = this.outerTrigger.getBoundingClientRect();\n const open = oneEvent(this.outerTrigger, 'sp-opened');\n sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rect.left + rect.width / 2,\n rect.top + rect.height / 2,\n ],\n },\n ],\n });\n await open;\n expect(\n await isOnTopLayer(this.hoverContent),\n 'hover content is available at point'\n ).to.be.true;\n\n const close = oneEvent(this.outerTrigger, 'sp-closed');\n sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rect.left + rect.width * 2,\n rect.top + rect.height / 2,\n ],\n },\n ],\n });\n await close;\n expect(\n await isOnTopLayer(this.hoverContent),\n 'hover content is not available at point'\n ).to.be.false;\n });\n\n it('closes a hover popover', async function () {\n expect(await isOnTopLayer(this.hoverContent)).to.be.false;\n\n const rect = this.outerTrigger.getBoundingClientRect();\n const open = oneEvent(this.outerTrigger, 'sp-opened');\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rect.left + rect.width / 2,\n rect.top + rect.height / 2,\n ],\n },\n ],\n });\n await open;\n const close = oneEvent(this.outerTrigger, 'sp-closed');\n expect(\n await isOnTopLayer(this.hoverContent),\n 'hover content is available at point'\n ).to.be.true;\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rect.left + rect.width * 2,\n rect.top + rect.height / 2,\n ],\n },\n ],\n });\n await close;\n expect(\n await isOnTopLayer(this.hoverContent),\n 'hover content is not available at point'\n ).to.be.false;\n });\n\n it('dispatches events on open/close', async function () {\n const opened = oneEvent(this.outerButton, 'sp-opened');\n this.outerButton.click();\n const openedEvent = await opened;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'hover content is available at point'\n ).to.be.true;\n expect(this.outerTrigger.open).to.equal('click');\n\n expect(openedEvent.detail.interaction).to.equal('auto');\n\n const closed = oneEvent(this.outerButton, 'sp-closed');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [1, 1],\n },\n ],\n });\n const closedEvent = await closed;\n expect(closedEvent.detail.interaction).to.equal('auto');\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'hover content is not available at point'\n ).to.be.false;\n });\n });\n describe('System interactions', () => {\n afterEach(async () => {\n const triggers =\n document.querySelectorAll<OverlayTrigger>(\n 'overlay-trigger'\n );\n const closes: Promise<CustomEvent<unknown>>[] = [];\n triggers.forEach((trigger) => {\n if (trigger.open) {\n const close = oneEvent(trigger, 'sp-closed');\n trigger.open = undefined;\n closes.push(close);\n }\n });\n await Promise.all(closes);\n });\n it.skip('manages multiple layers of `type=\"modal\"', async () => {\n const el = await fixture(html`\n <overlay-trigger type=\"modal\">\n <sp-button slot=\"trigger\" variant=\"accent\">\n Toggle Dialog\n </sp-button>\n <sp-popover slot=\"click-content\">\n <sp-dialog no-divider>\n <overlay-trigger>\n <sp-button slot=\"trigger\" variant=\"primary\">\n Toggle Dialog\n </sp-button>\n <sp-popover slot=\"click-content\">\n <sp-dialog no-divider>\n <overlay-trigger type=\"modal\">\n <sp-button\n slot=\"trigger\"\n variant=\"secondary\"\n >\n Toggle Dialog\n </sp-button>\n <sp-popover\n slot=\"click-content\"\n >\n <sp-dialog no-divider>\n <p>\n When you get this\n deep, this\n ActiveOverlay should\n be the only one in\n [slot=\"open\"].\n </p>\n <p>\n All of the rest of\n the ActiveOverlay\n elements should have\n had their [slot]\n attribute removed.\n </p>\n <p>\n Closing this\n ActiveOverlay should\n replace them...\n </p>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n `);\n const overlayTriggers = [\n ...el.querySelectorAll('overlay-trigger'),\n ];\n let activeOverlays = [\n ...document.querySelectorAll('active-overlay'),\n ];\n const triggers = [\n ...el.querySelectorAll('sp-button[slot=\"trigger\"]'),\n ] as Button[];\n\n expect(activeOverlays.length, 'no previous overlays').to.equal(\n 0\n );\n\n let open = oneEvent(triggers[0], 'sp-opened');\n triggers[0]?.click();\n await open;\n await elementUpdated(overlayTriggers[0]);\n activeOverlays = [\n ...document.querySelectorAll('active-overlay'),\n ];\n expect(\n activeOverlays.length,\n 'The first `active-overlay` element has been added.'\n ).to.equal(1);\n expect(\n activeOverlays[0].slot,\n 'first overlay, first time'\n ).to.equal('open');\n\n open = oneEvent(triggers[1], 'sp-opened');\n triggers[1]?.click();\n await open;\n await elementUpdated(overlayTriggers[1]);\n activeOverlays = [\n ...document.querySelectorAll('active-overlay'),\n ];\n expect(\n activeOverlays.length,\n 'The second `active-overlay` element has been added.'\n ).to.equal(2);\n\n expect(\n activeOverlays[0].slot,\n 'first overlay, second time'\n ).to.equal('open');\n expect(\n activeOverlays[1].slot,\n 'second overlay, second time'\n ).to.equal('open');\n\n open = oneEvent(triggers[2], 'sp-opened');\n triggers[2]?.click();\n await open;\n await elementUpdated(overlayTriggers[2]);\n activeOverlays = [\n ...document.querySelectorAll('active-overlay'),\n ];\n expect(\n activeOverlays.length,\n 'The third `active-overlay` element has been added.'\n ).to.equal(3);\n\n expect(\n activeOverlays[0].hasAttribute('slot'),\n 'first overlay, third time'\n ).to.be.false;\n expect(\n activeOverlays[1].hasAttribute('slot'),\n 'second overlay, third time'\n ).to.be.false;\n expect(\n activeOverlays[2].slot,\n 'third overlay, third time'\n ).to.equal('open');\n\n await nextFrame();\n const closed = oneEvent(triggers[2], 'sp-closed');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [1, 1],\n },\n ],\n });\n await closed;\n await elementUpdated(overlayTriggers[2]);\n activeOverlays = [\n ...document.querySelectorAll('active-overlay'),\n ];\n expect(\n activeOverlays.length,\n 'The third `active-overlay` element has been removed.'\n ).to.equal(2);\n\n await waitUntil(() => {\n return activeOverlays[0].slot === 'open';\n }, 'first overlay, last time');\n expect(\n activeOverlays[1].slot,\n 'second overlay, last time'\n ).to.equal('open');\n });\n });\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*/\n\nimport { fixture, isOnTopLayer } from '../../../test/testing-helpers.js';\nimport {\n aTimeout,\n elementUpdated,\n expect,\n html,\n nextFrame,\n oneEvent,\n} from '@open-wc/testing';\n\nimport {\n OverlayTrigger,\n TriggerInteractions,\n} from '@spectrum-web-components/overlay';\nimport '@spectrum-web-components/button/sp-button.js';\nimport { Button } from '@spectrum-web-components/button';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport { Popover } from '@spectrum-web-components/popover';\nimport '@spectrum-web-components/theme/sp-theme.js';\nimport { sendMouse } from '../../../test/plugins/browser.js';\nimport { sendKeys } from '@web/test-runner-commands';\nimport { isChrome } from '@spectrum-web-components/shared';\n\nexport const runOverlayTriggerTests = (type: string): void => {\n describe(`Overlay Trigger - ${type}`, () => {\n describe('open/close', () => {\n beforeEach(async function () {\n this.testDiv = await fixture<HTMLDivElement>(\n html`\n <div>\n <style>\n body {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n </style>\n <overlay-trigger id=\"trigger\" placement=\"top\">\n <sp-button\n id=\"outer-button\"\n variant=\"primary\"\n slot=\"trigger\"\n >\n Show Popover\n </sp-button>\n <sp-popover\n id=\"outer-popover\"\n slot=\"click-content\"\n direction=\"bottom\"\n tip\n >\n <sp-dialog\n no-divider\n class=\"options-popover-content\"\n >\n <overlay-trigger\n id=\"inner-trigger\"\n placement=\"bottom\"\n >\n <sp-button\n id=\"inner-button\"\n slot=\"trigger\"\n >\n Press Me\n </sp-button>\n <sp-popover\n id=\"inner-popover\"\n slot=\"click-content\"\n direction=\"bottom\"\n tip\n >\n <sp-dialog\n no-divider\n class=\"options-popover-content\"\n >\n Another Popover\n <sp-button>\n Does nothing\n </sp-button>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n </sp-dialog>\n </sp-popover>\n <div\n id=\"hover-content\"\n slot=\"hover-content\"\n class=\"tooltip\"\n delay=\"100\"\n >\n Tooltip\n </div>\n </overlay-trigger>\n </div>\n `\n );\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n\n this.innerTrigger = this.testDiv.querySelector(\n '#inner-trigger'\n ) as OverlayTrigger;\n this.outerTrigger = this.testDiv.querySelector(\n '#trigger'\n ) as OverlayTrigger;\n this.innerButton = this.testDiv.querySelector(\n '#inner-button'\n ) as Button;\n this.outerButton = this.testDiv.querySelector(\n '#outer-button'\n ) as Button;\n this.innerClickContent = this.testDiv.querySelector(\n '#inner-popover'\n ) as Popover;\n this.outerClickContent = this.testDiv.querySelector(\n '#outer-popover'\n ) as Popover;\n this.hoverContent = this.testDiv.querySelector(\n '#hover-content'\n ) as HTMLDivElement;\n });\n\n it('opens a popover', async function () {\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'popover not available at point'\n ).to.be.false;\n\n expect(this.outerButton).to.exist;\n const open = oneEvent(this.outerTrigger, 'sp-opened');\n this.outerButton.click();\n await open;\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'popover available at point'\n ).to.be.true;\n });\n\n it('[disabled] closes a popover', async function () {\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'popover not available at point'\n ).to.be.false;\n expect(this.outerTrigger.disabled).to.be.false;\n\n expect(this.outerButton).to.exist;\n\n const opened = oneEvent(this.outerButton, 'sp-opened');\n this.outerButton.click();\n await opened;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'popover available at point'\n ).to.be.true;\n\n const closed = oneEvent(this.outerButton, 'sp-closed');\n this.outerTrigger.disabled = true;\n await closed;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'popover not available at point'\n ).to.be.false;\n });\n\n it('resizes a popover', async function () {\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'popover not available at point'\n ).to.be.false;\n\n expect(this.outerButton).to.exist;\n const open = oneEvent(this.outerTrigger, 'sp-opened');\n this.outerButton.click();\n await open;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'popover available at point'\n ).to.be.true;\n\n window.dispatchEvent(new Event('resize'));\n window.dispatchEvent(new Event('resize'));\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'popover available at point'\n ).to.be.true;\n });\n\n ['modal', 'replace', 'inline'].map((type: string) => {\n it(`opens a popover - [type=\"${type}\"]`, async function () {\n this.outerTrigger.type = type as Extract<\n TriggerInteractions,\n 'inline' | 'modal' | 'replace'\n >;\n await elementUpdated(this.outerTrigger);\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'popover not available at point'\n ).to.be.false;\n\n expect(this.outerButton).to.exist;\n const opened = oneEvent(this.outerTrigger, 'sp-opened');\n this.outerButton.click();\n await opened;\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'popover available at point'\n ).to.be.true;\n });\n });\n\n it('does not open a hover popover when a click popover is open', async function () {\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'popover not available at point'\n ).to.be.false;\n expect(\n await isOnTopLayer(this.hoverContent),\n 'hover not available at point'\n ).to.be.false;\n\n expect(this.outerButton).to.exist;\n const open = oneEvent(this.outerTrigger, 'sp-opened');\n this.outerButton.click();\n await open;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'popover available at point'\n ).to.be.true;\n expect(\n await isOnTopLayer(this.hoverContent),\n 'hover not available at point'\n ).to.be.false;\n\n this.outerButton.dispatchEvent(\n new Event('mouseenter', {\n bubbles: true,\n composed: true,\n })\n );\n\n await nextFrame();\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'popover available at point'\n ).to.be.true;\n expect(\n await isOnTopLayer(this.hoverContent),\n 'hover not available at point'\n ).to.be.false;\n });\n\n it('does not open a popover when [disabled]', async function () {\n const triggerZone = this.outerTrigger.shadowRoot.querySelector(\n '#trigger'\n ) as HTMLDivElement;\n\n expect(this.outerTrigger.disabled).to.be.false;\n let open = oneEvent(this.outerTrigger, 'sp-opened');\n this.outerButton.click();\n await open;\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'hover available at point'\n ).to.be.true;\n let closed = oneEvent(this.outerTrigger, 'sp-closed');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [1, 1],\n },\n ],\n });\n await closed;\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'hover not available at point'\n ).to.be.false;\n\n this.outerTrigger.disabled = true;\n await elementUpdated(this.outerTrigger);\n\n expect(this.outerTrigger.disabled).to.be.true;\n expect(this.outerTrigger.hasAttribute('disabled')).to.be.true;\n // // The overlay shouldn't open here.\n this.outerButton.click();\n await aTimeout(150);\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'hover not available at point'\n ).to.be.false;\n // The overlay shouldn't open here, either.\n triggerZone.dispatchEvent(new Event('mouseenter'));\n await aTimeout(150);\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'hover not available at point'\n ).to.be.false;\n\n this.outerTrigger.disabled = false;\n await elementUpdated(this.outerTrigger);\n\n expect(this.outerTrigger.disabled).to.be.false;\n expect(this.outerTrigger.hasAttribute('disabled')).to.be.false;\n open = oneEvent(this.outerTrigger, 'sp-opened');\n this.outerButton.click();\n await open;\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'hover available at point'\n ).to.be.true;\n closed = oneEvent(this.outerTrigger, 'sp-closed');\n this.outerButton.click();\n await closed;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'hover not available at point'\n ).to.be.false;\n });\n\n it('opens a nested popover', async function () {\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'hover not available at point'\n ).to.be.false;\n expect(\n await isOnTopLayer(this.innerClickContent),\n 'hover not available at point'\n ).to.be.false;\n\n expect(this.outerButton).to.exist;\n let open = oneEvent(this.outerTrigger, 'sp-opened');\n this.outerButton.click();\n await open;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content available at point'\n ).to.be.true;\n expect(await isOnTopLayer(this.innerClickContent)).to.be.false;\n\n open = oneEvent(this.innerTrigger, 'sp-opened');\n this.innerButton.click();\n await open;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content available at point'\n ).to.be.true;\n expect(\n await isOnTopLayer(this.innerClickContent),\n 'inner click content available at point'\n ).to.be.true;\n });\n\n it('focus previous \"modal\" when closing nested \"modal\"', async function () {\n this.outerTrigger.type = 'modal';\n this.innerTrigger.type = 'modal';\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content not available at point'\n ).to.be.false;\n expect(\n await isOnTopLayer(this.innerClickContent),\n 'inner click content not available at point'\n ).to.be.false;\n\n const outerOpen = oneEvent(this.outerButton, 'sp-opened');\n this.outerButton.click();\n await outerOpen;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content available at point'\n ).to.be.true;\n expect(\n await isOnTopLayer(this.innerClickContent),\n 'inner click content available at point'\n ).to.be.false;\n\n const innerOpen = oneEvent(this.innerButton, 'sp-opened');\n this.innerButton.click();\n await innerOpen;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content available at point'\n ).to.be.true;\n expect(\n await isOnTopLayer(this.innerClickContent),\n 'inner click content available at point'\n ).to.be.true;\n\n // Why does this make the test pass in Chromium? \uD83E\uDD37\uD83C\uDFFB\u200D\u2642\uFE0F\n await sendKeys({\n press: 'Space',\n });\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content available at point'\n ).to.be.true;\n expect(\n await isOnTopLayer(this.innerClickContent),\n 'inner click content available at point'\n ).to.be.true;\n\n const innerClose = oneEvent(this.innerButton, 'sp-closed');\n await sendKeys({\n press: 'Escape',\n });\n await innerClose;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content available at point'\n ).to.be.true;\n expect(\n await isOnTopLayer(this.innerClickContent),\n 'inner click content not available at point'\n ).to.be.false;\n\n expect(\n document.activeElement === this.innerButton,\n `outer popover recieved focus: ${document.activeElement?.localName}`\n ).to.be.true;\n });\n\n it('escape closes an open popover', async function () {\n if (isChrome()) {\n // Does a werid test time bleed that allows the `Escape` press through to the\n // parent modal. Manual testing does not exhibit this interaction, which seems\n // to step from how long the `Escape` button in down.\n this.skip();\n }\n\n this.outerTrigger.type = 'modal';\n this.innerTrigger.type = 'modal';\n const outerOpen = oneEvent(this.outerButton, 'sp-opened');\n this.outerButton.click();\n await outerOpen;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content available at point'\n ).to.be.true;\n\n const innerOpen = oneEvent(this.innerButton, 'sp-opened');\n this.innerButton.click();\n await innerOpen;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content available at point, 1'\n ).to.be.true;\n expect(\n await isOnTopLayer(this.innerClickContent),\n 'inner click content available at point'\n ).to.be.true;\n\n const innerClose = oneEvent(this.innerButton, 'sp-closed');\n await sendKeys({\n press: 'Escape',\n });\n await innerClose;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content available at point, 2'\n ).to.be.true;\n expect(\n await isOnTopLayer(this.innerClickContent),\n 'inner click content not available at point, 1'\n ).to.be.false;\n\n const outerClose = oneEvent(this.outerButton, 'sp-closed');\n await sendKeys({\n press: 'Escape',\n });\n await outerClose;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content not available at point'\n ).to.be.false;\n expect(\n await isOnTopLayer(this.innerClickContent),\n 'inner click content not available at point, 2'\n ).to.be.false;\n });\n\n it('click closes an open popover', async function () {\n this.outerTrigger.type = 'auto';\n this.innerTrigger.type = 'auto';\n const outerOpen = oneEvent(this.outerButton, 'sp-opened');\n this.outerButton.click();\n await outerOpen;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content is available at point'\n ).to.be.true;\n\n const innerOpen = oneEvent(this.innerButton, 'sp-opened');\n this.innerButton.click();\n await innerOpen;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content is available at point'\n ).to.be.true;\n expect(\n await isOnTopLayer(this.innerClickContent),\n 'inner click content is available at point'\n ).to.be.true;\n\n // Test that clicking in the overlay content does not close the overlay\n // 200ms is slightly more than the overlay animation fade out time (130ms)\n this.innerClickContent.click();\n await aTimeout(200);\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content is available at point'\n ).to.be.true;\n expect(\n await isOnTopLayer(this.innerClickContent),\n 'inner click content is available at point'\n ).to.be.true;\n\n const innerClose = oneEvent(this.innerButton, 'sp-closed');\n const outerClose = oneEvent(this.outerButton, 'sp-closed');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [1, 1],\n },\n ],\n });\n await innerClose;\n await outerClose;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'outer click content is not available at point'\n ).to.be.not;\n expect(\n await isOnTopLayer(this.innerClickContent),\n 'inner click content is not available at point'\n ).to.be.not;\n });\n\n it('opens a hover popover', async function () {\n expect(await isOnTopLayer(this.hoverContent)).to.be.false;\n\n const rect = this.outerTrigger.getBoundingClientRect();\n const open = oneEvent(this.outerTrigger, 'sp-opened');\n sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rect.left + rect.width / 2,\n rect.top + rect.height / 2,\n ],\n },\n ],\n });\n await open;\n expect(\n await isOnTopLayer(this.hoverContent),\n 'hover content is available at point'\n ).to.be.true;\n\n const close = oneEvent(this.outerTrigger, 'sp-closed');\n sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rect.left + rect.width * 2,\n rect.top + rect.height / 2,\n ],\n },\n ],\n });\n await close;\n expect(\n await isOnTopLayer(this.hoverContent),\n 'hover content is not available at point'\n ).to.be.false;\n });\n\n it('closes a hover popover', async function () {\n expect(await isOnTopLayer(this.hoverContent)).to.be.false;\n\n const rect = this.outerTrigger.getBoundingClientRect();\n const open = oneEvent(this.outerTrigger, 'sp-opened');\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rect.left + rect.width / 2,\n rect.top + rect.height / 2,\n ],\n },\n ],\n });\n await open;\n const close = oneEvent(this.outerTrigger, 'sp-closed');\n expect(\n await isOnTopLayer(this.hoverContent),\n 'hover content is available at point'\n ).to.be.true;\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rect.left + rect.width * 2,\n rect.top + rect.height / 2,\n ],\n },\n ],\n });\n await close;\n expect(\n await isOnTopLayer(this.hoverContent),\n 'hover content is not available at point'\n ).to.be.false;\n });\n\n it('dispatches events on open/close', async function () {\n const opened = oneEvent(this.outerButton, 'sp-opened');\n this.outerButton.click();\n const openedEvent = await opened;\n\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'hover content is available at point'\n ).to.be.true;\n expect(this.outerTrigger.open).to.equal('click');\n\n expect(openedEvent.detail.interaction).to.equal('auto');\n\n const closed = oneEvent(this.outerButton, 'sp-closed');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [1, 1],\n },\n ],\n });\n const closedEvent = await closed;\n expect(closedEvent.detail.interaction).to.equal('auto');\n expect(\n await isOnTopLayer(this.outerClickContent),\n 'hover content is not available at point'\n ).to.be.false;\n });\n });\n describe('System interactions', () => {\n afterEach(async () => {\n const triggers =\n document.querySelectorAll<OverlayTrigger>(\n 'overlay-trigger'\n );\n const closes: Promise<CustomEvent<unknown>>[] = [];\n triggers.forEach((trigger) => {\n if (trigger.open) {\n const close = oneEvent(trigger, 'sp-closed');\n trigger.open = undefined;\n closes.push(close);\n }\n });\n await Promise.all(closes);\n });\n });\n });\n};\n"],
5
+ "mappings": "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",
6
6
  "names": ["type"]
7
7
  }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ import * as stories from "../stories/overlay-directive.stories.js";
3
+ import { regressVisuals } from "../../../test/visual/test.js";
4
+ regressVisuals("OverlayDirectiveStories", stories);
5
+ //# sourceMappingURL=overlay-directive.test-vrt.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["overlay-directive.test-vrt.ts"],
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport * as stories from '../stories/overlay-directive.stories.js';\nimport { regressVisuals } from '../../../test/visual/test.js';\nimport type { TestsType } from '../../../test/visual/test.js';\n\nregressVisuals('OverlayDirectiveStories', stories as unknown as TestsType);\n"],
5
+ "mappings": ";AAYA,YAAY,aAAa;AACzB,SAAS,sBAAsB;AAG/B,eAAe,2BAA2B,OAA+B;",
6
+ "names": []
7
+ }
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ import "@spectrum-web-components/tooltip/sp-tooltip.js";
3
+ import { html } from "@spectrum-web-components/base";
4
+ import {
5
+ elementUpdated,
6
+ expect,
7
+ nextFrame,
8
+ oneEvent,
9
+ waitUntil
10
+ } from "@open-wc/testing";
11
+ import "@spectrum-web-components/button/sp-button.js";
12
+ import { elsewhere } from "../stories/overlay-directive.stories.js";
13
+ import { sendMouse } from "../../../test/plugins/browser.js";
14
+ import { fixture } from "../../../test/testing-helpers.js";
15
+ describe("Overlay Directive", () => {
16
+ it("opens an Overlay after the trigger", async function() {
17
+ const test = await fixture(html`
18
+ <div
19
+ style="width: 100%; height: 100vh; display: grid; place-content: center;"
20
+ >
21
+ ${elsewhere()}
22
+ </div>
23
+ `);
24
+ const el = test.querySelector("sp-button");
25
+ await elementUpdated(el);
26
+ let overlays = document.querySelectorAll("sp-overlay");
27
+ expect(overlays.length).to.equal(0);
28
+ const rect = el.getBoundingClientRect();
29
+ let opened = oneEvent(el, "sp-opened");
30
+ await sendMouse({
31
+ steps: [
32
+ {
33
+ type: "move",
34
+ position: [
35
+ rect.left + rect.width / 2,
36
+ rect.top + rect.height / 2
37
+ ]
38
+ }
39
+ ]
40
+ });
41
+ await opened;
42
+ opened = oneEvent(el, "sp-opened");
43
+ await sendMouse({
44
+ steps: [
45
+ {
46
+ type: "click",
47
+ position: [
48
+ rect.left + rect.width / 2,
49
+ rect.top + rect.height / 2
50
+ ]
51
+ },
52
+ {
53
+ type: "move",
54
+ position: [
55
+ rect.left - rect.width / 2,
56
+ rect.top - rect.height / 2
57
+ ]
58
+ }
59
+ ]
60
+ });
61
+ await opened;
62
+ overlays = document.querySelectorAll("sp-overlay");
63
+ expect(overlays.length).to.be.gt(0);
64
+ expect(overlays[0].previousElementSibling).to.equal(el);
65
+ const closed = oneEvent(overlays[0], "slottable-request");
66
+ await sendMouse({
67
+ steps: [
68
+ {
69
+ type: "click",
70
+ position: [
71
+ rect.left - rect.width / 2,
72
+ rect.top - rect.height / 2
73
+ ]
74
+ }
75
+ ]
76
+ });
77
+ await closed;
78
+ await waitUntil(() => {
79
+ overlays = document.querySelectorAll("sp-overlay");
80
+ return overlays.length === 0;
81
+ }, "not all overlays were cleaned up");
82
+ expect(overlays.length).to.equal(0);
83
+ });
84
+ it("opens an Overlay in a specific part of the DOM", async function() {
85
+ const test = await fixture(html`
86
+ <div
87
+ style="width: 100%; height: 100vh; display: grid; place-content: center;"
88
+ >
89
+ ${elsewhere(elsewhere.args)}
90
+ </div>
91
+ `);
92
+ const el = test.querySelector("sp-button");
93
+ await elementUpdated(el);
94
+ const otherElement = test.querySelector(
95
+ "#other-element"
96
+ );
97
+ let overlays = otherElement.querySelectorAll("sp-overlay");
98
+ expect(overlays.length).to.equal(0);
99
+ const rect = el.getBoundingClientRect();
100
+ let opened = oneEvent(el, "sp-opened");
101
+ await sendMouse({
102
+ steps: [
103
+ {
104
+ type: "move",
105
+ position: [
106
+ rect.left + rect.width / 2,
107
+ rect.top + rect.height / 2
108
+ ]
109
+ }
110
+ ]
111
+ });
112
+ await opened;
113
+ opened = oneEvent(el, "sp-opened");
114
+ await sendMouse({
115
+ steps: [
116
+ {
117
+ type: "click",
118
+ position: [
119
+ rect.left + rect.width / 2,
120
+ rect.top + rect.height / 2
121
+ ]
122
+ }
123
+ ]
124
+ });
125
+ await opened;
126
+ overlays = otherElement.querySelectorAll("sp-overlay");
127
+ expect(overlays.length).to.equal(1);
128
+ const closed = oneEvent(overlays[0], "slottable-request");
129
+ await sendMouse({
130
+ steps: [
131
+ {
132
+ type: "click",
133
+ position: [
134
+ rect.left - rect.width / 2,
135
+ rect.top - rect.height / 2
136
+ ]
137
+ }
138
+ ]
139
+ });
140
+ await closed;
141
+ await nextFrame();
142
+ await nextFrame();
143
+ overlays = otherElement.querySelectorAll("sp-overlay");
144
+ expect(overlays.length).to.equal(0);
145
+ });
146
+ });
147
+ //# sourceMappingURL=overlay-directive.test.js.map