@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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["overlay-trigger-extended.test.ts"],
4
- "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport { expect, html, nextFrame, oneEvent, waitUntil } from '@open-wc/testing';\n\nimport '@spectrum-web-components/overlay/overlay-trigger.js';\nimport { OverlayTrigger } 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/textfield/sp-textfield.js';\nimport '@spectrum-web-components/dialog/sp-dialog.js';\nimport { sendMouse } from '../../../test/plugins/browser.js';\nimport { fixture } from '../../../test/testing-helpers.js';\nimport { sendKeys } from '@web/test-runner-commands';\n\nconst initTest = async (\n styles = html``\n): Promise<{\n overlayTrigger: OverlayTrigger;\n button: Button;\n popover: Popover;\n}> => {\n const test = await fixture<HTMLDivElement>(\n html`\n <div class=\"container\">\n <style>\n .container {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n }\n </style>\n ${styles}\n <overlay-trigger type=\"modal\" 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 tabindex=\"0\"\n placement=\"top\"\n >\n <sp-dialog no-divider>\n This is the overlay content.\n </sp-dialog>\n </sp-popover>\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 return {\n overlayTrigger: test.querySelector('overlay-trigger') as OverlayTrigger,\n button: test.querySelector('sp-button') as Button,\n popover: test.querySelector('sp-popover') as Popover,\n };\n};\n\ndescribe('Overlay Trigger - extended', () => {\n let overlayTrigger!: OverlayTrigger;\n let button!: Button;\n let popover!: Popover;\n\n afterEach(async () => {\n if (overlayTrigger.open) {\n const closed = oneEvent(overlayTrigger, 'sp-closed');\n overlayTrigger.open = undefined;\n await closed;\n }\n });\n\n it('manages `placement` on open', async () => {\n ({ overlayTrigger, button, popover } = await initTest());\n\n expect(popover.placement).to.equal('top');\n\n const open = oneEvent(overlayTrigger, 'sp-opened');\n button.click();\n await open;\n\n expect(popover.placement).to.equal('bottom');\n\n const close = oneEvent(overlayTrigger, 'sp-closed');\n overlayTrigger.open = undefined;\n await close;\n\n expect(popover.placement).to.equal('top');\n });\n\n it('manages `placement` on scroll', async () => {\n ({ overlayTrigger, button, popover } = await initTest(html`\n <style>\n sp-button {\n margin: 100vh 0;\n transform: translateY(-100%);\n }\n </style>\n `));\n\n expect(popover.placement).to.equal('top');\n\n const open = oneEvent(overlayTrigger, 'sp-opened');\n button.click();\n await open;\n\n expect(popover.placement).to.equal('top');\n\n button.scrollIntoView({\n behavior: 'instant' as ScrollBehavior,\n block: 'start',\n });\n\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n\n expect(popover.placement).to.equal('bottom');\n });\n\n xit('occludes content behind the overlay', async () => {\n // currently fails for no reason in Firefox locally, and most browsers in CI.\n ({ overlayTrigger, button, popover } = await initTest());\n const textfield = document.createElement('sp-textfield');\n overlayTrigger.insertAdjacentElement('afterend', textfield);\n\n const textfieldRect = textfield.getBoundingClientRect();\n expect(document.activeElement === textfield).to.be.false;\n await sendMouse({\n steps: [\n {\n type: 'click',\n position: [textfieldRect.left + 5, textfieldRect.top + 5],\n },\n ],\n });\n expect(\n document.activeElement === textfield,\n 'clicking focuses the Textfield'\n ).to.be.true;\n\n expect(popover.placement).to.equal('top');\n\n const open = oneEvent(overlayTrigger, 'sp-opened');\n await sendKeys({\n press: 'Shift+Tab',\n });\n expect(document.activeElement === button, 'button focused').to.be.true;\n await sendKeys({\n press: 'Enter',\n });\n await open;\n\n expect(overlayTrigger.type).to.equal('modal');\n expect(overlayTrigger.open).to.equal('click');\n expect(popover.placement).to.equal('bottom');\n\n const close = oneEvent(overlayTrigger, 'sp-closed');\n await sendMouse({\n steps: [\n {\n type: 'click',\n position: [textfieldRect.left + 5, textfieldRect.top + 5],\n },\n ],\n });\n await close;\n\n expect(overlayTrigger.open).to.be.undefined;\n expect(\n document.activeElement === textfield,\n 'closing does not focus the Textfield'\n ).to.be.false;\n\n await sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n textfieldRect.left + textfieldRect.width / 2,\n textfieldRect.top + textfieldRect.height / 2,\n ],\n },\n ],\n });\n expect(\n document.activeElement === textfield,\n 'the Textfield is focused again'\n ).to.be.true;\n });\n\n xit('occludes wheel interactions behind the overlay', async () => {\n // currently fails for no reason in Firefox locally, and most browsers in CI.\n ({ overlayTrigger, button, popover } = await initTest());\n const scrollingArea = document.createElement('div');\n Object.assign(scrollingArea.style, {\n width: '100px',\n height: '100px',\n overflow: 'auto',\n });\n const content = Array(100).fill(\n 'This is content within my box that will scroll.'\n );\n scrollingArea.textContent = content.join(' ');\n document.body.append(scrollingArea);\n await nextFrame();\n\n const boundingRect = scrollingArea.getBoundingClientRect();\n expect(scrollingArea.scrollTop).to.equal(0);\n const distance = 1;\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n boundingRect.left + boundingRect.width / 2,\n boundingRect.top + boundingRect.height / 2,\n ],\n },\n ],\n });\n await sendMouse({\n steps: [\n {\n type: 'wheel',\n position: [0, distance],\n },\n ],\n });\n // wait for scroll to complete\n await waitUntil(\n () => scrollingArea.scrollTop === distance,\n `scroll went to ${distance}`\n );\n expect(scrollingArea.scrollTop).to.equal(distance);\n\n expect(popover.placement).to.equal('top');\n\n const open = oneEvent(overlayTrigger, 'sp-opened');\n button.click();\n await open;\n\n expect(overlayTrigger.open).to.equal('click');\n expect(popover.placement).to.equal('bottom');\n expect(scrollingArea.scrollTop).to.equal(distance);\n await sendMouse({\n steps: [\n {\n type: 'wheel',\n position: [0, -distance],\n },\n ],\n });\n // Awaiting here points out that this always fails in Firefox\n // and also was failing in WebKit without our knowing.\n await nextFrame();\n await nextFrame();\n await nextFrame();\n\n expect(\n scrollingArea.scrollTop,\n `scrollTop should be ${distance}.`\n ).to.equal(distance);\n scrollingArea.remove();\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport { expect, html, nextFrame, oneEvent, waitUntil } from '@open-wc/testing';\n\nimport '@spectrum-web-components/overlay/overlay-trigger.js';\nimport { OverlayTrigger } 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/textfield/sp-textfield.js';\nimport '@spectrum-web-components/dialog/sp-dialog.js';\nimport { sendMouse } from '../../../test/plugins/browser.js';\nimport { fixture } from '../../../test/testing-helpers.js';\nimport { sendKeys } from '@web/test-runner-commands';\n\nconst initTest = async (\n styles = html``\n): Promise<{\n overlayTrigger: OverlayTrigger;\n button: Button;\n popover: Popover;\n}> => {\n const test = await fixture<HTMLDivElement>(\n html`\n <div class=\"container\">\n <style>\n .container {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n }\n </style>\n ${styles}\n <overlay-trigger type=\"modal\" 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 tabindex=\"0\"\n placement=\"top\"\n >\n <sp-dialog no-divider>\n This is the overlay content.\n </sp-dialog>\n </sp-popover>\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 return {\n overlayTrigger: test.querySelector('overlay-trigger') as OverlayTrigger,\n button: test.querySelector('sp-button') as Button,\n popover: test.querySelector('sp-popover') as Popover,\n };\n};\n\ndescribe('Overlay Trigger - extended', () => {\n let overlayTrigger!: OverlayTrigger;\n let button!: Button;\n let popover!: Popover;\n\n afterEach(async () => {\n if (overlayTrigger.open) {\n const closed = oneEvent(overlayTrigger, 'sp-closed');\n overlayTrigger.open = undefined;\n await closed;\n }\n });\n\n it('manages `placement` on open', async () => {\n ({ overlayTrigger, button, popover } = await initTest());\n\n expect(popover.placement).to.equal('top');\n\n const open = oneEvent(overlayTrigger, 'sp-opened');\n button.click();\n await open;\n\n expect(popover.placement).to.equal('bottom');\n\n const close = oneEvent(overlayTrigger, 'sp-closed');\n overlayTrigger.open = undefined;\n await close;\n\n expect(popover.placement).to.equal('top');\n });\n\n it('manages `placement` on scroll', async () => {\n ({ overlayTrigger, button, popover } = await initTest(html`\n <style>\n sp-button {\n margin: 100vh 0;\n transform: translateY(-100%);\n }\n </style>\n `));\n\n expect(popover.placement).to.equal('top');\n\n const open = oneEvent(overlayTrigger, 'sp-opened');\n button.click();\n await open;\n\n expect(popover.placement).to.equal('top');\n\n button.scrollIntoView({\n behavior: 'instant' as ScrollBehavior,\n block: 'start',\n });\n\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n\n expect(popover.placement).to.equal('bottom');\n });\n\n it('occludes content behind the overlay', async () => {\n // currently fails most browsers in CI.\n ({ overlayTrigger, button, popover } = await initTest());\n const textfield = document.createElement('sp-textfield');\n overlayTrigger.insertAdjacentElement('afterend', textfield);\n\n const textfieldRect = textfield.getBoundingClientRect();\n expect(document.activeElement === textfield).to.be.false;\n await sendMouse({\n steps: [\n {\n type: 'click',\n position: [textfieldRect.left + 5, textfieldRect.top + 5],\n },\n ],\n });\n expect(\n document.activeElement === textfield,\n 'clicking focuses the Textfield'\n ).to.be.true;\n\n expect(popover.placement).to.equal('top');\n\n const open = oneEvent(overlayTrigger, 'sp-opened');\n await sendKeys({\n press: 'Shift+Tab',\n });\n expect(document.activeElement === button, 'button focused').to.be.true;\n await sendKeys({\n press: 'Enter',\n });\n await open;\n\n expect(overlayTrigger.type).to.equal('modal');\n expect(overlayTrigger.open).to.equal('click');\n expect(popover.placement).to.equal('bottom');\n\n const close = oneEvent(overlayTrigger, 'sp-closed');\n await sendMouse({\n steps: [\n {\n type: 'click',\n position: [textfieldRect.left + 5, textfieldRect.top + 5],\n },\n ],\n });\n await close;\n\n expect(overlayTrigger.open).to.be.undefined;\n expect(\n document.activeElement === textfield,\n 'closing does not focus the Textfield'\n ).to.be.false;\n\n await sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n textfieldRect.left + textfieldRect.width / 2,\n textfieldRect.top + textfieldRect.height / 2,\n ],\n },\n ],\n });\n expect(\n document.activeElement === textfield,\n 'the Textfield is focused again'\n ).to.be.true;\n });\n\n xit('occludes wheel interactions behind the overlay', async () => {\n // currently fails for no reason in Firefox locally, and most browsers in CI.\n ({ overlayTrigger, button, popover } = await initTest());\n const scrollingArea = document.createElement('div');\n Object.assign(scrollingArea.style, {\n width: '100px',\n height: '100px',\n overflow: 'auto',\n });\n const content = Array(100).fill(\n 'This is content within my box that will scroll.'\n );\n scrollingArea.textContent = content.join(' ');\n document.body.append(scrollingArea);\n await nextFrame();\n\n const boundingRect = scrollingArea.getBoundingClientRect();\n expect(scrollingArea.scrollTop).to.equal(0);\n const distance = 1;\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n boundingRect.left + boundingRect.width / 2,\n boundingRect.top + boundingRect.height / 2,\n ],\n },\n ],\n });\n await sendMouse({\n steps: [\n {\n type: 'wheel',\n position: [0, distance],\n },\n ],\n });\n // wait for scroll to complete\n await waitUntil(\n () => scrollingArea.scrollTop === distance,\n `scroll went to ${distance}`\n );\n expect(scrollingArea.scrollTop).to.equal(distance);\n\n expect(popover.placement).to.equal('top');\n\n const open = oneEvent(overlayTrigger, 'sp-opened');\n button.click();\n await open;\n\n expect(overlayTrigger.open).to.equal('click');\n expect(popover.placement).to.equal('bottom');\n expect(scrollingArea.scrollTop).to.equal(distance);\n await sendMouse({\n steps: [\n {\n type: 'wheel',\n position: [0, -distance],\n },\n ],\n });\n // Awaiting here points out that this always fails in Firefox\n // and also was failing in WebKit without our knowing.\n await nextFrame();\n await nextFrame();\n await nextFrame();\n\n expect(\n scrollingArea.scrollTop,\n `scrollTop should be ${distance}.`\n ).to.equal(distance);\n scrollingArea.remove();\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }