@spectrum-web-components/overlay 0.35.1-rc.41 → 0.36.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.
- package/README.md +150 -237
- package/active-overlay.d.ts +6 -0
- package/active-overlay.dev.js +5 -0
- package/{sp-overlay.dev.js.map → active-overlay.dev.js.map} +3 -3
- package/active-overlay.js +2 -0
- package/{sp-overlay.js.map → active-overlay.js.map} +4 -4
- package/custom-elements.json +1215 -0
- package/package.json +22 -49
- package/src/ActiveOverlay.d.ts +84 -0
- package/src/ActiveOverlay.dev.js +517 -0
- package/src/ActiveOverlay.dev.js.map +7 -0
- package/src/ActiveOverlay.js +16 -0
- package/src/ActiveOverlay.js.map +7 -0
- package/src/OverlayTrigger.d.ts +41 -24
- package/src/OverlayTrigger.dev.js +295 -133
- package/src/OverlayTrigger.dev.js.map +3 -3
- package/src/OverlayTrigger.js +22 -52
- package/src/OverlayTrigger.js.map +3 -3
- package/src/VirtualTrigger.dev.js +1 -2
- package/src/VirtualTrigger.dev.js.map +2 -2
- package/src/VirtualTrigger.js +1 -1
- package/src/VirtualTrigger.js.map +2 -2
- package/src/active-overlay.css.dev.js +13 -0
- package/src/active-overlay.css.dev.js.map +7 -0
- package/src/active-overlay.css.js +10 -0
- package/src/active-overlay.css.js.map +7 -0
- package/src/index.d.ts +3 -2
- package/src/index.dev.js +3 -2
- package/src/index.dev.js.map +2 -2
- package/src/index.js +1 -1
- package/src/index.js.map +2 -2
- package/src/loader.d.ts +2 -1
- package/src/loader.dev.js +19 -2
- package/src/loader.dev.js.map +2 -2
- package/src/loader.js +1 -1
- package/src/loader.js.map +3 -3
- package/src/overlay-stack.d.ts +50 -0
- package/src/overlay-stack.dev.js +515 -0
- package/src/overlay-stack.dev.js.map +7 -0
- package/src/overlay-stack.js +34 -0
- package/src/overlay-stack.js.map +7 -0
- package/src/overlay-timer.dev.js.map +2 -2
- package/src/overlay-timer.js.map +2 -2
- package/src/overlay-trigger.css.dev.js +1 -1
- package/src/overlay-trigger.css.dev.js.map +1 -1
- package/src/overlay-trigger.css.js +1 -1
- package/src/overlay-trigger.css.js.map +1 -1
- package/src/overlay-types.d.ts +31 -25
- package/src/overlay-types.dev.js +0 -1
- package/src/overlay-types.dev.js.map +3 -3
- package/src/overlay-types.js +1 -1
- package/src/overlay-types.js.map +3 -3
- package/src/overlay-utils.d.ts +3 -0
- package/src/overlay-utils.dev.js +31 -0
- package/src/overlay-utils.dev.js.map +7 -0
- package/src/overlay-utils.js +2 -0
- package/src/overlay-utils.js.map +7 -0
- package/src/overlay.d.ts +59 -0
- package/src/overlay.dev.js +127 -0
- package/src/overlay.dev.js.map +7 -0
- package/src/overlay.js +2 -0
- package/src/overlay.js.map +7 -0
- package/stories/overlay-story-components.js +8 -9
- package/stories/overlay-story-components.js.map +2 -2
- package/stories/overlay.stories.js +697 -825
- package/stories/overlay.stories.js.map +2 -2
- package/sync/overlay-trigger.d.ts +0 -4
- package/sync/overlay-trigger.dev.js +4 -1
- package/sync/overlay-trigger.dev.js.map +2 -2
- package/sync/overlay-trigger.js +1 -1
- package/sync/overlay-trigger.js.map +3 -3
- package/test/benchmark/basic-test.js +1 -1
- package/test/benchmark/basic-test.js.map +1 -1
- package/test/index.js +377 -408
- package/test/index.js.map +3 -3
- package/test/overlay-lifecycle.test.js +106 -34
- package/test/overlay-lifecycle.test.js.map +2 -2
- package/test/overlay-trigger-click.test.js +5 -11
- package/test/overlay-trigger-click.test.js.map +2 -2
- package/test/overlay-trigger-extended.test.js +36 -42
- package/test/overlay-trigger-extended.test.js.map +2 -2
- package/test/overlay-trigger-hover-click.test.js +24 -27
- package/test/overlay-trigger-hover-click.test.js.map +2 -2
- package/test/overlay-trigger-hover.test.js +35 -41
- package/test/overlay-trigger-hover.test.js.map +2 -2
- package/test/overlay-trigger-longpress.test.js +81 -206
- package/test/overlay-trigger-longpress.test.js.map +2 -2
- package/test/overlay-trigger-sync.test.js +1 -1
- package/test/overlay-trigger-sync.test.js.map +2 -2
- package/test/overlay-trigger.test.js +1 -1
- package/test/overlay-trigger.test.js.map +2 -2
- package/test/overlay-update.test.js +4 -4
- package/test/overlay-update.test.js.map +2 -2
- package/test/overlay.test.js +268 -386
- package/test/overlay.test.js.map +3 -3
- package/sp-overlay.d.ts +0 -6
- package/sp-overlay.dev.js +0 -5
- package/sp-overlay.js +0 -2
- package/src/AbstractOverlay.d.ts +0 -56
- package/src/AbstractOverlay.dev.js +0 -202
- package/src/AbstractOverlay.dev.js.map +0 -7
- package/src/AbstractOverlay.js +0 -2
- package/src/AbstractOverlay.js.map +0 -7
- package/src/Overlay.d.ts +0 -147
- package/src/Overlay.dev.js +0 -777
- package/src/Overlay.dev.js.map +0 -7
- package/src/Overlay.js +0 -33
- package/src/Overlay.js.map +0 -7
- package/src/OverlayDialog.d.ts +0 -4
- package/src/OverlayDialog.dev.js +0 -135
- package/src/OverlayDialog.dev.js.map +0 -7
- package/src/OverlayDialog.js +0 -2
- package/src/OverlayDialog.js.map +0 -7
- package/src/OverlayNoPopover.d.ts +0 -4
- package/src/OverlayNoPopover.dev.js +0 -110
- package/src/OverlayNoPopover.dev.js.map +0 -7
- package/src/OverlayNoPopover.js +0 -2
- package/src/OverlayNoPopover.js.map +0 -7
- package/src/OverlayPopover.d.ts +0 -4
- package/src/OverlayPopover.dev.js +0 -169
- package/src/OverlayPopover.dev.js.map +0 -7
- package/src/OverlayPopover.js +0 -2
- package/src/OverlayPopover.js.map +0 -7
- package/src/OverlayStack.d.ts +0 -43
- package/src/OverlayStack.dev.js +0 -150
- package/src/OverlayStack.dev.js.map +0 -7
- package/src/OverlayStack.js +0 -2
- package/src/OverlayStack.js.map +0 -7
- package/src/PlacementController.d.ts +0 -38
- package/src/PlacementController.dev.js +0 -199
- package/src/PlacementController.dev.js.map +0 -7
- package/src/PlacementController.js +0 -2
- package/src/PlacementController.js.map +0 -7
- package/src/fullSizePlugin.d.ts +0 -12
- package/src/fullSizePlugin.dev.js +0 -39
- package/src/fullSizePlugin.dev.js.map +0 -7
- package/src/fullSizePlugin.js +0 -2
- package/src/fullSizePlugin.js.map +0 -7
- package/src/overlay.css.dev.js +0 -9
- package/src/overlay.css.dev.js.map +0 -7
- package/src/overlay.css.js +0 -6
- package/src/overlay.css.js.map +0 -7
- package/src/topLayerOverTransforms.d.ts +0 -2
- package/src/topLayerOverTransforms.dev.js +0 -90
- package/src/topLayerOverTransforms.dev.js.map +0 -7
- package/src/topLayerOverTransforms.js +0 -2
- package/src/topLayerOverTransforms.js.map +0 -7
- package/stories/overlay-element.stories.js +0 -366
- package/stories/overlay-element.stories.js.map +0 -7
- package/test/overlay-element.test-vrt.js +0 -5
- package/test/overlay-element.test-vrt.js.map +0 -7
- package/test/overlay-element.test.js +0 -681
- package/test/overlay-element.test.js.map +0 -7
- package/test/overlay-v1.test.js +0 -651
- package/test/overlay-v1.test.js.map +0 -7
- /package/src/{overlay.css.d.ts → active-overlay.css.d.ts} +0 -0
package/test/overlay.test.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["overlay.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 '@spectrum-web-components/button/sp-button.js';\nimport '@spectrum-web-components/dialog/sp-dialog.js';\nimport '@spectrum-web-components/overlay/sp-overlay.js';\nimport '@spectrum-web-components/overlay/overlay-trigger.js';\nimport '@spectrum-web-components/tooltip/sp-tooltip.js';\nimport { Dialog } from '@spectrum-web-components/dialog';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport { Popover } from '@spectrum-web-components/popover';\nimport { setViewport } from '@web/test-runner-commands';\nimport {\n Overlay,\n OverlayTrigger,\n Placement,\n VirtualTrigger,\n} from '@spectrum-web-components/overlay';\n\nimport {\n elementUpdated,\n expect,\n html,\n nextFrame,\n oneEvent,\n} from '@open-wc/testing';\nimport { sendKeys } from '@web/test-runner-commands';\nimport {\n definedOverlayElement,\n virtualElement,\n} from '../stories/overlay.stories';\nimport { PopoverContent } from '../stories/overlay-story-components.js';\nimport { sendMouse } from '../../../test/plugins/browser.js';\nimport { spy } from 'sinon';\nimport '@spectrum-web-components/theme/sp-theme.js';\nimport '@spectrum-web-components/theme/src/themes.js';\nimport { Theme } from '@spectrum-web-components/theme';\nimport { render, TemplateResult } from '@spectrum-web-components/base';\nimport {\n fixture,\n isInteractive,\n isOnTopLayer,\n} from '../../../test/testing-helpers.js';\nimport { Menu } from '@spectrum-web-components/menu';\n\nasync function styledFixture<T extends Element>(\n story: TemplateResult\n): Promise<T> {\n const test = await fixture<Theme>(html`\n <sp-theme theme=\"spectrum\" scale=\"medium\" color=\"dark\">\n ${story}\n </sp-theme>\n `);\n return test.children[0] as T;\n}\n\ndescribe('Overlays, v2', () => {\n let testDiv!: HTMLDivElement;\n let openOverlays: Overlay[] = [];\n\n beforeEach(async () => {\n testDiv = await styledFixture<HTMLDivElement>(\n html`\n <div id=\"top\">\n <style>\n body {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n #top {\n margin: 100px;\n }\n\n sp-button {\n flex: none;\n }\n\n #overlay-content {\n display: none;\n }\n </style>\n <sp-button id=\"first-button\" variant=\"primary\">\n Show Popover\n </sp-button>\n <div id=\"overlay-content\">\n <sp-popover id=\"outer-popover\" direction=\"bottom\" tip>\n <sp-dialog no-divider>\n <div class=\"options-popover-content\">\n A popover message\n </div>\n <sp-button id=\"outer-focus-target\">\n Test 1\n </sp-button>\n <sp-button>Test 2</sp-button>\n <sp-button>Test 3</sp-button>\n </sp-dialog>\n </sp-popover>\n <sp-tooltip id=\"hover-1\" class=\"hover-content\">\n Hover message\n </sp-tooltip>\n <sp-tooltip id=\"hover-2\" class=\"hover-content\">\n Other hover message\n </sp-tooltip>\n </div>\n </div>\n `\n );\n await elementUpdated(testDiv);\n });\n\n afterEach(() => {\n openOverlays.map((overlay) => (overlay.open = false));\n openOverlays = [];\n });\n\n [\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n 'top',\n 'top-start',\n 'top-end',\n 'left',\n 'left-start',\n 'left-end',\n 'right',\n 'right-start',\n 'right-end',\n ].map((direction) => {\n const placement = direction as Placement;\n it(`opens a popover - ${placement}`, async () => {\n const clickSpy = spy();\n const button = testDiv.querySelector(\n '#first-button'\n ) as HTMLElement;\n const outerPopover = testDiv.querySelector(\n '#outer-popover'\n ) as Popover;\n outerPopover.addEventListener('click', () => {\n clickSpy();\n });\n\n expect(await isInteractive(outerPopover)).to.be.false;\n expect(button).to.exist;\n\n const opened = oneEvent(outerPopover, 'sp-opened');\n openOverlays.push(\n await Overlay.open(outerPopover, {\n trigger: button,\n type: 'auto',\n delayed: false,\n placement,\n offset: 10,\n })\n );\n button.insertAdjacentElement(\n 'afterend',\n openOverlays.at(-1) as HTMLElement\n );\n await opened;\n expect(await isInteractive(outerPopover)).to.be.true;\n });\n });\n\n it(`opens a modal dialog`, async () => {\n const button = testDiv.querySelector('#first-button') as HTMLElement;\n const outerPopover = testDiv.querySelector('#outer-popover') as Popover;\n\n expect(await isInteractive(outerPopover)).to.be.false;\n\n expect(button).to.exist;\n\n const opened = oneEvent(outerPopover, 'sp-opened');\n openOverlays.push(\n await Overlay.open(outerPopover, {\n trigger: button,\n })\n );\n button.insertAdjacentElement(\n 'afterend',\n openOverlays.at(-1) as HTMLElement\n );\n await opened;\n\n const firstFocused = outerPopover.querySelector(\n '#outer-focus-target'\n ) as HTMLElement;\n expect(document.activeElement === firstFocused).to.be.true;\n\n /**\n * Tab cycle is awkward in the headless browser, forward tab to just before the known end of the page\n * and the backward tab past the known beginning of the page. Test that you never focused the button\n * that triggered the dialog and is outside of the modal. A test that was able to cycle would be better.\n */\n\n await sendKeys({\n press: 'Tab',\n });\n\n expect(document.activeElement === button).to.be.false;\n await sendKeys({\n press: 'Tab',\n });\n\n expect(document.activeElement === button).to.be.false;\n\n await sendKeys({\n press: 'Shift+Tab',\n });\n\n expect(document.activeElement === button).to.be.false;\n\n await sendKeys({\n press: 'Shift+Tab',\n });\n\n expect(document.activeElement === button).to.be.false;\n\n await sendKeys({\n press: 'Shift+Tab',\n });\n\n expect(document.activeElement === button).to.be.false;\n });\n\n it(`updates a popover`, async () => {\n const button = testDiv.querySelector('#first-button') as HTMLElement;\n const outerPopover = testDiv.querySelector('#outer-popover') as Popover;\n\n expect(await isInteractive(outerPopover)).to.be.false;\n\n expect(button).to.exist;\n\n const opened = oneEvent(outerPopover, 'sp-opened');\n openOverlays.push(\n await Overlay.open(outerPopover, {\n trigger: button,\n type: 'auto',\n offset: 10,\n })\n );\n button.insertAdjacentElement(\n 'afterend',\n openOverlays.at(-1) as HTMLElement\n );\n await opened;\n\n expect(await isInteractive(outerPopover)).to.be.true;\n\n Overlay.update();\n\n expect(await isInteractive(outerPopover)).to.be.true;\n });\n\n it(`opens a popover w/ delay`, async () => {\n const button = testDiv.querySelector('#first-button') as HTMLElement;\n const outerPopover = testDiv.querySelector('#outer-popover') as Popover;\n\n expect(await isInteractive(outerPopover)).to.be.false;\n expect(button).to.exist;\n\n const opened = oneEvent(outerPopover, 'sp-opened');\n const start = performance.now();\n openOverlays.push(\n await Overlay.open(outerPopover, {\n trigger: button,\n type: 'auto',\n delayed: true,\n offset: 10,\n })\n );\n button.insertAdjacentElement(\n 'afterend',\n openOverlays.at(-1) as HTMLElement\n );\n await opened;\n const end = performance.now();\n expect(await isInteractive(outerPopover)).to.be.true;\n expect(end - start).to.be.greaterThan(1000);\n });\n\n it('opens hover overlay', async () => {\n const button = testDiv.querySelector('#first-button') as HTMLElement;\n const hoverOverlay = testDiv.querySelector('#hover-1') as HTMLElement;\n const clickOverlay = testDiv.querySelector(\n '#outer-popover'\n ) as HTMLElement;\n\n expect(await isOnTopLayer(hoverOverlay)).to.be.false;\n expect(await isOnTopLayer(clickOverlay)).to.be.false;\n\n let opened = oneEvent(hoverOverlay, 'sp-opened');\n openOverlays.push(\n await Overlay.open(hoverOverlay, {\n trigger: button,\n type: 'hint',\n placement: 'top',\n offset: 10,\n })\n );\n button.insertAdjacentElement(\n 'afterend',\n openOverlays.at(-1) as HTMLElement\n );\n await opened;\n expect(await isOnTopLayer(hoverOverlay)).to.be.true;\n\n opened = oneEvent(clickOverlay, 'sp-opened');\n const closed = oneEvent(hoverOverlay, 'sp-closed');\n // Opening click overlay should close the hover overlay\n openOverlays.push(\n await Overlay.open(clickOverlay, {\n trigger: button,\n type: 'auto',\n placement: 'bottom',\n offset: 10,\n })\n );\n button.insertAdjacentElement(\n 'afterend',\n openOverlays.at(-1) as HTMLElement\n );\n await opened;\n await closed;\n expect(\n await isInteractive(clickOverlay),\n 'click overlay not interactive'\n ).to.be.true;\n expect(await isOnTopLayer(hoverOverlay), 'hover overlay interactive').to\n .be.false;\n });\n\n it('opens custom overlay', async () => {\n const button = testDiv.querySelector('#first-button') as HTMLElement;\n const customOverlay = testDiv.querySelector('#hover-1') as HTMLElement;\n const clickOverlay = testDiv.querySelector(\n '#outer-popover'\n ) as HTMLElement;\n\n expect(button).to.exist;\n expect(customOverlay).to.exist;\n\n expect(await isOnTopLayer(customOverlay)).to.be.false;\n expect(await isOnTopLayer(clickOverlay)).to.be.false;\n\n let opened = oneEvent(customOverlay, 'sp-opened');\n openOverlays.push(\n await Overlay.open(customOverlay, {\n trigger: button,\n type: 'auto',\n placement: 'top',\n offset: 10,\n })\n );\n button.insertAdjacentElement(\n 'afterend',\n openOverlays.at(-1) as HTMLElement\n );\n await opened;\n expect(await isOnTopLayer(customOverlay)).to.be.true;\n\n opened = oneEvent(clickOverlay, 'sp-opened');\n openOverlays.push(\n await Overlay.open(clickOverlay, {\n trigger: button,\n type: 'auto',\n placement: 'bottom',\n offset: 10,\n })\n );\n button.insertAdjacentElement(\n 'afterend',\n openOverlays.at(-1) as HTMLElement\n );\n await opened;\n expect(await isOnTopLayer(clickOverlay), 'click content open').to.be\n .true;\n });\n\n it('closes via events', async () => {\n const test = await fixture<HTMLDivElement>(html`\n <div>\n <sp-popover id=\"root\">\n <sp-dialog dismissable>\n Some Content for the Dialog.\n </sp-dialog>\n </sp-popover>\n </div>\n `);\n\n const el = test.querySelector('sp-popover') as Popover;\n const dialog = el.querySelector('sp-dialog') as Dialog;\n\n const opened = oneEvent(el, 'sp-opened');\n openOverlays.push(\n await Overlay.open(el, {\n trigger: test,\n type: 'auto',\n placement: 'bottom',\n offset: 10,\n })\n );\n test.insertAdjacentElement(\n 'afterend',\n openOverlays.at(-1) as HTMLElement\n );\n await opened;\n expect(await isInteractive(el)).to.be.true;\n\n const closed = oneEvent(el, 'sp-closed');\n dialog.close();\n await closed;\n expect(await isInteractive(el)).to.be.false;\n });\n\n it('positions with a VirtualTrigger', async () => {\n const test = await fixture<HTMLDivElement>(html`\n <div>\n <sp-popover id=\"root\" placement=\"right\">\n <sp-dialog dismissable>\n Some Content for the Dialog.\n </sp-dialog>\n </sp-popover>\n </div>\n `);\n\n const el = test.querySelector('sp-popover') as Popover;\n const trigger = new VirtualTrigger(100, 100);\n\n const opened = oneEvent(el, 'sp-opened');\n openOverlays.push(\n await Overlay.open(el, {\n trigger,\n type: 'auto',\n placement: 'right',\n offset: 10,\n })\n );\n test.insertAdjacentElement(\n 'afterend',\n openOverlays.at(-1) as HTMLElement\n );\n await opened;\n expect(await isInteractive(el)).to.be.true;\n\n const initial = el.getBoundingClientRect();\n trigger.updateBoundingClientRect(500, 500);\n await nextFrame();\n await nextFrame();\n const final = el.getBoundingClientRect();\n expect(initial.x).to.not.equal(8);\n expect(initial.y).to.not.equal(8);\n expect(initial.x).to.not.equal(final.x);\n expect(initial.y).to.not.equal(final.y);\n });\n\n it('closes an inline overlay when tabbing past the content', async () => {\n const el = await fixture<HTMLDivElement>(html`\n <div>\n <sp-button class=\"trigger\">Trigger</sp-button>\n <sp-popover class=\"content\">\n <input />\n </sp-popover>\n <input value=\"After\" id=\"after\" />\n </div>\n `);\n\n const trigger = el.querySelector('.trigger') as HTMLElement;\n const content = el.querySelector('.content') as HTMLElement;\n const input = el.querySelector('input') as HTMLInputElement;\n const after = el.querySelector('#after') as HTMLAnchorElement;\n\n const opened = oneEvent(content, 'sp-opened');\n openOverlays.push(\n await Overlay.open(content, {\n trigger,\n type: 'auto',\n receivesFocus: 'auto',\n })\n );\n trigger.insertAdjacentElement(\n 'afterend',\n openOverlays.at(-1) as HTMLElement\n );\n await opened;\n\n expect(await isInteractive(content)).to.be.true;\n expect(document.activeElement).to.equal(input);\n\n const closed = oneEvent(content, 'sp-closed');\n await sendKeys({\n press: 'Shift+Tab',\n });\n await closed;\n\n expect(document.activeElement).to.equal(trigger);\n\n await sendKeys({\n press: 'Tab',\n });\n expect(document.activeElement).to.equal(after);\n expect(await isInteractive(content)).to.be.false;\n });\n\n it('closes an inline overlay when tabbing before the trigger', async () => {\n const el = await fixture<HTMLDivElement>(html`\n <div>\n <input value=\"Before\" id=\"before\" />\n <sp-button class=\"trigger\">Trigger</sp-button>\n <div class=\"content\">\n <label>\n Content in an inline overlay.\n <input />\n </label>\n </div>\n </div>\n `);\n\n const trigger = el.querySelector('.trigger') as HTMLElement;\n const content = el.querySelector('.content') as HTMLElement;\n const input = el.querySelector('.content input') as HTMLInputElement;\n const before = el.querySelector('#before') as HTMLAnchorElement;\n\n openOverlays.push(\n await Overlay.open(content, {\n trigger,\n type: 'auto',\n })\n );\n trigger.insertAdjacentElement(\n 'afterend',\n openOverlays.at(-1) as HTMLElement\n );\n\n trigger.focus();\n await sendKeys({\n press: 'Tab',\n });\n\n expect(document.activeElement).to.equal(input);\n\n await sendKeys({\n press: 'Shift+Tab',\n });\n\n expect(document.activeElement).to.equal(trigger);\n\n await sendKeys({\n press: 'Shift+Tab',\n });\n\n expect(document.activeElement).to.equal(before);\n });\n\n it('opens detached content', async () => {\n const textContent = 'This is a detached element that has been overlaid';\n const el = await fixture<HTMLButtonElement>(\n html`\n <button>Trigger</button>\n `\n );\n\n const content = document.createElement('sp-popover');\n content.textContent = textContent;\n\n const opened = oneEvent(content, 'sp-opened');\n const overlay = await Overlay.open(content, {\n trigger: el,\n type: 'auto',\n placement: 'bottom',\n });\n el.insertAdjacentElement('afterend', overlay);\n await opened;\n\n expect(await isInteractive(content)).to.be.true;\n\n const closed = oneEvent(content, 'sp-closed');\n overlay.open = false;\n await closed;\n\n expect(await isInteractive(content)).to.be.false;\n\n content.remove();\n });\n});\ndescribe('Overlay - type=\"modal\", v2', () => {\n describe('handle multiple separate `contextmenu` events', async () => {\n let width = 0;\n let height = 0;\n let firstMenu: Popover;\n let firstRect: DOMRect;\n let secondMenu: Popover;\n let secondRect: DOMRect;\n before(async () => {\n render(\n html`\n <sp-theme color=\"light\" scale=\"large\">\n ${virtualElement({\n ...virtualElement.args,\n offset: 6,\n })}\n </sp-theme>\n `,\n document.body\n );\n\n width = window.innerWidth;\n height = window.innerHeight;\n });\n after(() => {\n document.querySelector('sp-theme')?.remove();\n });\n it('opens the first \"contextmenu\" overlay', async () => {\n const opened = oneEvent(document, 'sp-opened');\n // Right click to open \"context menu\" overlay.\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [width / 2 + 50, height / 2],\n },\n {\n type: 'click',\n options: {\n button: 'right',\n },\n position: [width / 2 + 50, height / 2],\n },\n ],\n });\n await opened;\n firstMenu = document.querySelector('sp-popover') as Popover;\n expect(firstMenu.textContent).to.include('Menu source: end');\n firstRect = firstMenu.getBoundingClientRect();\n expect(firstMenu).to.not.be.null;\n });\n it('closes the first \"contextmenu\" when opening a second', async () => {\n const closed = oneEvent(document, 'sp-closed');\n const opened = oneEvent(document, 'sp-opened');\n /**\n * Right click out of the \"context menu\" overlay to both close\n * the first overlay and have the event passed to the surfacing page\n * in order to open a subsequent \"context menu\" overlay.\n *\n * Using `sendMouse` here triggers the light dismiss for some reason while\n * manual interacting in this way does not...\n */\n const trigger = document.querySelector(\n 'start-end-contextmenu'\n ) as HTMLElement;\n trigger.shadowRoot?.querySelector('#start')?.dispatchEvent(\n new Event('contextmenu', {\n composed: true,\n })\n );\n await nextFrame();\n trigger.shadowRoot?.querySelector('#start')?.dispatchEvent(\n new Event('pointerup', {\n composed: true,\n bubbles: true,\n })\n );\n await closed;\n await opened;\n secondMenu = document.querySelector('sp-popover') as Popover;\n expect(secondMenu.textContent).to.include('Menu source: start');\n secondRect = secondMenu.getBoundingClientRect();\n expect(secondMenu).to.not.be.null;\n });\n it('closes the second \"contextmenu\" when clicking away', async () => {\n const closed = oneEvent(document, 'sp-closed');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [width - width / 8, height - height / 8],\n },\n ],\n });\n await closed;\n expect(firstRect.top).to.not.equal(secondRect.top);\n expect(firstRect.left).to.not.equal(secondRect.left);\n });\n });\n\n it('does not open content off of the viewport', async () => {\n before(async () => {\n await setViewport({ width: 360, height: 640 });\n // Allow viewport update to propagate.\n await nextFrame();\n });\n after(async () => {\n await setViewport({ width: 800, height: 600 });\n // Allow viewport update to propagate.\n await nextFrame();\n });\n\n await fixture<HTMLDivElement>(html`\n ${virtualElement({\n ...virtualElement.args,\n offset: 6,\n })}\n `);\n\n const opened = oneEvent(document, 'sp-opened');\n // Right click to open \"context menu\" overlay.\n sendMouse({\n steps: [\n {\n type: 'move',\n position: [270, 10],\n },\n {\n type: 'click',\n options: {\n button: 'right',\n },\n position: [270, 10],\n },\n ],\n });\n await opened;\n\n const firstMenu = document.querySelector('sp-menu') as Menu;\n expect(firstMenu).to.not.be.null;\n expect(await isInteractive(firstMenu)).to.be.true;\n\n const closed = oneEvent(document, 'sp-closed');\n sendKeys({\n press: 'Escape',\n });\n await closed;\n\n expect(await isInteractive(firstMenu)).to.be.false;\n });\n\n it('opens children in the modal stack through shadow roots', async () => {\n const el = await fixture<OverlayTrigger>(definedOverlayElement());\n const trigger = el.querySelector(\n '[slot=\"trigger\"]'\n ) as HTMLButtonElement;\n let open = oneEvent(el, 'sp-opened');\n trigger.click();\n await open;\n expect(el.open).to.equal('click');\n const content = document.querySelector(\n 'popover-content'\n ) as PopoverContent;\n open = oneEvent(content, 'sp-opened');\n content.button.click();\n await open;\n expect(content.trigger.open).to.equal('click');\n let close = oneEvent(content, 'sp-closed');\n content.trigger.removeAttribute('open');\n await close;\n expect(content.trigger.open).to.be.null;\n close = oneEvent(el, 'sp-closed');\n el.removeAttribute('open');\n await close;\n expect(el.open).to.be.null;\n });\n});\ndescribe('Overlay - timing, v2', () => {\n it('manages multiple modals in a row without preventing them from closing', async () => {\n const test = await fixture<HTMLDivElement>(html`\n <div>\n <overlay-trigger id=\"test-1\" placement=\"right\">\n <sp-button slot=\"trigger\">Trigger 1</sp-button>\n <sp-popover slot=\"hover-content\">\n <p>Hover contentent for \"Trigger 1\".</p>\n </sp-popover>\n </overlay-trigger>\n <overlay-trigger id=\"test-2\" placement=\"right\">\n <sp-button slot=\"trigger\">Trigger 2</sp-button>\n <sp-popover slot=\"click-content\">\n <p>Click contentent for \"Trigger 2\".</p>\n </sp-popover>\n <sp-popover slot=\"hover-content\">\n <p>Hover contentent for \"Trigger 2\".</p>\n </sp-popover>\n </overlay-trigger>\n </div>\n `);\n\n const overlayTrigger1 = test.querySelector('#test-1') as OverlayTrigger;\n const overlayTrigger2 = test.querySelector('#test-2') as OverlayTrigger;\n const trigger1 = overlayTrigger1.querySelector(\n '[slot=\"trigger\"]'\n ) as HTMLButtonElement;\n const trigger2 = overlayTrigger2.querySelector(\n '[slot=\"trigger\"]'\n ) as HTMLButtonElement;\n\n const boundingRectTrigger1 = trigger1.getBoundingClientRect();\n const boundingRectTrigger2 = trigger2.getBoundingClientRect();\n const trigger1Position: [number, number] = [\n boundingRectTrigger1.left + boundingRectTrigger1.width / 2,\n boundingRectTrigger1.top + boundingRectTrigger1.height / 2,\n ];\n const outsideTriggers: [number, number] = [\n boundingRectTrigger1.left + boundingRectTrigger1.width / 2,\n 300,\n ];\n const trigger2Position: [number, number] = [\n boundingRectTrigger2.left + boundingRectTrigger2.width / 2,\n boundingRectTrigger2.top + boundingRectTrigger2.height / 4,\n ];\n\n // Move poitner over \"Trigger 1\", should _start_ to open \"hover\" content.\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: trigger1Position,\n },\n ],\n });\n await nextFrame();\n await nextFrame();\n // Move pointer out of \"Trigger 1\", should _start_ to close \"hover\" content.\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: outsideTriggers,\n },\n ],\n });\n await nextFrame();\n await nextFrame();\n // Move pointer over \"Trigger 2\", should _start_ to open \"hover\" content.\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: trigger2Position,\n },\n ],\n });\n await nextFrame();\n await nextFrame();\n const opened = oneEvent(trigger2, 'sp-opened');\n // Click \"Trigger 2\", should _start_ to open \"click\" content and _start_ to close \"hover\" content.\n await sendMouse({\n steps: [\n {\n type: 'click',\n position: trigger2Position,\n },\n ],\n });\n await opened;\n await nextFrame();\n await nextFrame();\n\n // \"click\" content for \"Trigger 2\", _only_, open.\n expect(overlayTrigger1.hasAttribute('open')).to.be.false;\n expect(overlayTrigger2.hasAttribute('open')).to.be.true;\n expect(overlayTrigger2.getAttribute('open')).to.equal('click');\n\n const closed = oneEvent(overlayTrigger2, 'sp-closed');\n await sendMouse({\n steps: [\n {\n type: 'click',\n position: outsideTriggers,\n },\n ],\n });\n await closed;\n\n // Both overlays are closed.\n // Neither trigger received \"focus\" because the pointer \"clicked\" away, redirecting focus to <body>\n expect(overlayTrigger1.hasAttribute('open')).to.be.false;\n expect(overlayTrigger2.hasAttribute('open')).to.be.false;\n });\n});\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": [
|
|
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 '@spectrum-web-components/button/sp-button.js';\nimport '@spectrum-web-components/dialog/sp-dialog.js';\nimport { Dialog } from '@spectrum-web-components/dialog';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport { Popover } from '@spectrum-web-components/popover';\nimport { setViewport } from '@web/test-runner-commands';\nimport {\n ActiveOverlay,\n Overlay,\n OverlayTrigger,\n Placement,\n} from '@spectrum-web-components/overlay';\n\nimport { isVisible } from '../../../test/testing-helpers.js';\nimport {\n elementUpdated,\n expect,\n fixture,\n html,\n nextFrame,\n oneEvent,\n waitUntil,\n} from '@open-wc/testing';\nimport { sendKeys } from '@web/test-runner-commands';\nimport {\n definedOverlayElement,\n virtualElement,\n} from '../stories/overlay.stories';\nimport { PopoverContent } from '../stories/overlay-story-components.js';\nimport { sendMouse } from '../../../test/plugins/browser.js';\n\ndescribe('Overlays', () => {\n let testDiv!: HTMLDivElement;\n let openOverlays: (() => void)[] = [];\n\n beforeEach(async () => {\n testDiv = await fixture<HTMLDivElement>(\n html`\n <div id=\"top\">\n <style>\n body {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n #top {\n margin: 100px;\n }\n\n sp-button {\n flex: none;\n }\n\n #overlay-content {\n display: none;\n }\n </style>\n <sp-button\n id=\"first-button\"\n variant=\"primary\"\n slot=\"trigger\"\n >\n Show Popover\n </sp-button>\n <div id=\"overlay-content\">\n <sp-popover\n id=\"outer-popover\"\n slot=\"click-content\"\n direction=\"bottom\"\n tip\n open\n >\n <sp-dialog class=\"options-popover-content\">\n A popover message\n </sp-dialog>\n </sp-popover>\n <div id=\"hover-1\" class=\"hover-content\">\n Hover message\n </div>\n <div id=\"hover-2\" class=\"hover-content\">\n Other hover message\n </div>\n </div>\n </div>\n `\n );\n await elementUpdated(testDiv);\n });\n\n afterEach(() => {\n openOverlays.map((close) => close());\n openOverlays = [];\n });\n\n [\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n 'top',\n 'top-start',\n 'top-end',\n 'left',\n 'left-start',\n 'left-end',\n 'right',\n 'right-start',\n 'right-end',\n 'none',\n ].map((direction) => {\n const placement = direction as Placement;\n it(`opens a popover - ${placement}`, async () => {\n const button = testDiv.querySelector(\n '#first-button'\n ) as HTMLElement;\n const outerPopover = testDiv.querySelector(\n '#outer-popover'\n ) as Popover;\n\n expect(outerPopover.parentElement).to.exist;\n if (outerPopover.parentElement) {\n expect(outerPopover.parentElement.id).to.equal(\n 'overlay-content'\n );\n }\n\n expect(isVisible(outerPopover)).to.be.false;\n\n expect(button).to.exist;\n\n const opened = oneEvent(button, 'sp-opened');\n openOverlays.push(\n await Overlay.open(button, 'click', outerPopover, {\n delayed: false,\n placement,\n offset: 10,\n })\n );\n await opened;\n\n expect(outerPopover.parentElement).to.exist;\n if (outerPopover.parentElement) {\n expect(outerPopover.parentElement.id).not.to.equal(\n 'overlay-content'\n );\n }\n expect(isVisible(outerPopover)).to.be.true;\n });\n });\n\n it(`updates a popover`, async () => {\n const button = testDiv.querySelector('#first-button') as HTMLElement;\n const outerPopover = testDiv.querySelector('#outer-popover') as Popover;\n\n expect(outerPopover.parentElement).to.exist;\n if (outerPopover.parentElement) {\n expect(outerPopover.parentElement.id).to.equal('overlay-content');\n }\n\n expect(isVisible(outerPopover)).to.be.false;\n\n expect(button).to.exist;\n\n const opened = oneEvent(button, 'sp-opened');\n openOverlays.push(\n await Overlay.open(button, 'click', outerPopover, {\n delayed: false,\n offset: 10,\n })\n );\n await opened;\n\n expect(isVisible(outerPopover)).to.be.true;\n\n Overlay.update();\n\n expect(isVisible(outerPopover)).to.be.true;\n });\n\n it(`opens a popover w/ delay`, async () => {\n const button = testDiv.querySelector('#first-button') as HTMLElement;\n const outerPopover = testDiv.querySelector('#outer-popover') as Popover;\n\n expect(outerPopover.parentElement).to.exist;\n if (outerPopover.parentElement) {\n expect(outerPopover.parentElement.id).to.equal('overlay-content');\n }\n\n expect(isVisible(outerPopover)).to.be.false;\n\n expect(button).to.exist;\n\n const opened = oneEvent(button, 'sp-opened');\n openOverlays.push(\n await Overlay.open(button, 'click', outerPopover, {\n delayed: true,\n offset: 10,\n })\n );\n await opened;\n\n expect(outerPopover.parentElement).to.exist;\n if (outerPopover.parentElement) {\n expect(outerPopover.parentElement.id).not.to.equal(\n 'overlay-content'\n );\n }\n expect(isVisible(outerPopover)).to.be.true;\n });\n\n it('opens hover overlay', async () => {\n const button = testDiv.querySelector('#first-button') as HTMLElement;\n const hoverOverlay = testDiv.querySelector('#hover-1') as HTMLElement;\n const clickOverlay = testDiv.querySelector(\n '#outer-popover'\n ) as HTMLElement;\n\n expect(isVisible(hoverOverlay)).to.be.false;\n expect(isVisible(clickOverlay)).to.be.false;\n\n let opened = oneEvent(button, 'sp-opened');\n openOverlays.push(\n await Overlay.open(button, 'hover', hoverOverlay, {\n delayed: false,\n placement: 'top',\n offset: 10,\n })\n );\n await opened;\n\n expect(hoverOverlay.parentElement).to.exist;\n if (hoverOverlay.parentElement) {\n expect(hoverOverlay.parentElement.id).not.to.equal(\n 'overlay-content'\n );\n }\n expect(isVisible(hoverOverlay)).to.be.true;\n\n opened = oneEvent(button, 'sp-opened');\n // Opening click overlay should close the hover overlay\n openOverlays.push(\n await Overlay.open(button, 'click', clickOverlay, {\n delayed: false,\n placement: 'bottom',\n offset: 10,\n })\n );\n await opened;\n if (hoverOverlay.parentElement) {\n expect(hoverOverlay.parentElement.id).to.equal('overlay-content');\n }\n\n expect(isVisible(hoverOverlay)).to.be.false;\n expect(isVisible(clickOverlay)).to.be.true;\n });\n\n it('opens custom overlay', async () => {\n const button = testDiv.querySelector('#first-button') as HTMLElement;\n const customOverlay = testDiv.querySelector('#hover-1') as HTMLElement;\n const clickOverlay = testDiv.querySelector(\n '#outer-popover'\n ) as HTMLElement;\n\n expect(button).to.exist;\n expect(customOverlay).to.exist;\n\n expect(isVisible(customOverlay)).to.be.false;\n expect(isVisible(clickOverlay)).to.be.false;\n\n let opened = oneEvent(button, 'sp-opened');\n openOverlays.push(\n await Overlay.open(button, 'custom', customOverlay, {\n delayed: false,\n placement: 'top',\n offset: 10,\n })\n );\n await opened;\n\n expect(customOverlay.parentElement).to.exist;\n if (customOverlay.parentElement) {\n expect(customOverlay.parentElement.id).not.to.equal(\n 'overlay-content'\n );\n }\n expect(isVisible(customOverlay)).to.be.true;\n\n opened = oneEvent(button, 'sp-opened');\n // Opening click overlay should close the hover overlay\n openOverlays.push(\n await Overlay.open(button, 'click', clickOverlay, {\n delayed: false,\n placement: 'bottom',\n offset: 10,\n })\n );\n await opened;\n\n expect(isVisible(customOverlay)).to.be.true;\n expect(isVisible(clickOverlay)).to.be.true;\n });\n\n it('closes via events', async () => {\n const el = await fixture<HTMLDivElement>(html`\n <div id=\"root\">\n <sp-dialog dismissable></sp-dialog>\n </div>\n `);\n\n const dialog = el.querySelector('sp-dialog') as Dialog;\n\n const opened = oneEvent(el, 'sp-opened');\n openOverlays.push(\n await Overlay.open(el, 'click', dialog, {\n delayed: false,\n placement: 'bottom',\n offset: 10,\n })\n );\n await opened;\n\n dialog.close();\n\n await waitUntil(\n () =>\n !!dialog.parentElement &&\n dialog.parentElement.tagName !== 'ACTIVE-OVERLAY',\n 'content is returned'\n );\n });\n\n it('closes an inline overlay when tabbing past the content', async () => {\n const el = await fixture<HTMLDivElement>(html`\n <div>\n <sp-button class=\"trigger\">Trigger</sp-button>\n <div class=\"content\">\n <input />\n </div>\n <input value=\"After\" id=\"after\" />\n </div>\n `);\n\n const trigger = el.querySelector('.trigger') as HTMLElement;\n const content = el.querySelector('.content') as HTMLElement;\n const input = el.querySelector('input') as HTMLInputElement;\n const after = el.querySelector('#after') as HTMLAnchorElement;\n\n openOverlays.push(await Overlay.open(trigger, 'inline', content, {}));\n\n trigger.focus();\n await sendKeys({\n press: 'Tab',\n });\n\n expect(document.activeElement).to.equal(input);\n expect(input.closest('active-overlay') !== null);\n\n await sendKeys({\n press: 'Shift+Tab',\n });\n\n expect(document.activeElement).to.equal(trigger);\n\n await sendKeys({\n press: 'Tab',\n });\n\n expect(document.activeElement).to.equal(input);\n\n await sendKeys({\n press: 'Tab',\n });\n\n expect(document.activeElement).to.equal(after);\n await waitUntil(\n () => document.querySelector('active-overlay') === null\n );\n });\n\n it('closes an inline overlay when tabbing before the trigger', async () => {\n const el = await fixture<HTMLDivElement>(html`\n <div>\n <input value=\"Before\" id=\"before\" />\n <sp-button class=\"trigger\">Trigger</sp-button>\n <div class=\"content\">\n <label>\n Content in an inline overlay.\n <input />\n </label>\n </div>\n </div>\n `);\n\n const trigger = el.querySelector('.trigger') as HTMLElement;\n const content = el.querySelector('.content') as HTMLElement;\n const input = el.querySelector('.content input') as HTMLInputElement;\n const before = el.querySelector('#before') as HTMLAnchorElement;\n\n openOverlays.push(await Overlay.open(trigger, 'inline', content, {}));\n\n trigger.focus();\n await sendKeys({\n press: 'Tab',\n });\n\n expect(document.activeElement).to.equal(input);\n expect(input.closest('active-overlay') !== null);\n\n await sendKeys({\n press: 'Shift+Tab',\n });\n\n expect(document.activeElement).to.equal(trigger);\n\n await sendKeys({\n press: 'Shift+Tab',\n });\n\n expect(document.activeElement).to.equal(before);\n await waitUntil(\n () => document.querySelector('active-overlay') === null\n );\n });\n\n it('opens detached content', async () => {\n const textContent = 'This is a detached element that has been overlaid';\n const el = await fixture<HTMLButtonElement>(\n html`\n <button>Trigger</button>\n `\n );\n\n const content = document.createElement('div');\n content.textContent = textContent;\n\n const opened = oneEvent(el, 'sp-opened');\n const closeOverlay = await Overlay.open(el, 'click', content, {\n placement: 'bottom',\n });\n await opened;\n\n let activeOverlay = document.querySelector('active-overlay');\n\n if (activeOverlay) {\n expect(activeOverlay.textContent).to.equal(textContent);\n } else {\n expect(activeOverlay).to.not.be.null;\n }\n\n const closed = oneEvent(el, 'sp-closed');\n closeOverlay();\n await closed;\n\n activeOverlay = document.querySelector('active-overlay');\n\n expect(activeOverlay).to.be.null;\n\n content.remove();\n });\n});\ndescribe('Overlay - type=\"modal\"', () => {\n it('closes on `contextmenu` and passes that to the underlying page', async () => {\n await fixture<HTMLDivElement>(html`\n ${virtualElement({\n ...virtualElement.args,\n offset: 6,\n })}\n `);\n const width = window.innerWidth;\n const height = window.innerHeight;\n let opened = oneEvent(document, 'sp-opened');\n // Right click to open \"context menu\" overlay.\n sendMouse({\n steps: [\n {\n type: 'move',\n position: [width / 2 + 50, height / 2],\n },\n {\n type: 'click',\n options: {\n button: 'right',\n },\n position: [width / 2 + 50, height / 2],\n },\n ],\n });\n await opened;\n const firstOverlay = document.querySelector(\n 'active-overlay'\n ) as ActiveOverlay;\n const firstHeadline = firstOverlay.querySelector(\n '[slot=\"header\"]'\n ) as HTMLSpanElement;\n expect(firstOverlay, 'first overlay').to.not.be.null;\n expect(firstOverlay.isConnected).to.be.true;\n expect(firstHeadline.textContent).to.equal('Menu source: end');\n let closed = oneEvent(document, 'sp-closed');\n opened = oneEvent(document, 'sp-opened');\n // Right click to out of the \"context menu\" overlay to both close\n // the first overlay and have the event passed to the surfacing page\n // in order to open a subsequent \"context menu\" overlay.\n sendMouse({\n steps: [\n {\n type: 'move',\n position: [width / 4, height / 4],\n },\n {\n type: 'click',\n options: {\n button: 'right',\n },\n position: [width / 4, height / 4],\n },\n ],\n });\n await closed;\n await opened;\n const secondOverlay = document.querySelector(\n 'active-overlay'\n ) as ActiveOverlay;\n const secondHeadline = secondOverlay.querySelector(\n '[slot=\"header\"]'\n ) as HTMLSpanElement;\n expect(secondOverlay, 'second overlay').to.not.be.null;\n expect(secondOverlay).to.not.equal(firstOverlay);\n expect(firstOverlay.isConnected).to.be.false;\n expect(secondOverlay.isConnected).to.be.true;\n expect(secondHeadline.textContent).to.equal('Menu source: start');\n closed = oneEvent(document, 'sp-closed');\n sendMouse({\n steps: [\n {\n type: 'move',\n position: [width / 8, height / 8],\n },\n {\n type: 'click',\n position: [width / 8, height / 8],\n },\n ],\n });\n await closed;\n await nextFrame();\n });\n\n it('does not open content off of the viewport', async () => {\n await fixture<HTMLDivElement>(html`\n ${virtualElement({\n ...virtualElement.args,\n offset: 6,\n })}\n `);\n\n await setViewport({ width: 360, height: 640 });\n // Allow viewport update to propagate.\n await nextFrame();\n\n const opened = oneEvent(document, 'sp-opened');\n // Right click to open \"context menu\" overlay.\n sendMouse({\n steps: [\n {\n type: 'move',\n position: [270, 10],\n },\n {\n type: 'click',\n options: {\n button: 'right',\n },\n position: [270, 10],\n },\n ],\n });\n await opened;\n\n const activeOverlay = document.querySelector(\n 'active-overlay'\n ) as ActiveOverlay;\n\n expect(activeOverlay.placement).to.equal('right-start');\n expect(activeOverlay.getAttribute('actual-placement')).to.equal(\n 'bottom'\n );\n\n const closed = oneEvent(document, 'sp-closed');\n sendKeys({\n press: 'Escape',\n });\n await closed;\n await nextFrame();\n });\n\n it('opens children in the modal stack through shadow roots', async () => {\n const el = await fixture<OverlayTrigger>(definedOverlayElement());\n const trigger = el.querySelector(\n '[slot=\"trigger\"]'\n ) as HTMLButtonElement;\n let open = oneEvent(el, 'sp-opened');\n trigger.click();\n await open;\n const content = document.querySelector(\n 'popover-content'\n ) as PopoverContent;\n open = oneEvent(content, 'sp-opened');\n content.button.click();\n await open;\n const activeOverlays = document.querySelectorAll('active-overlay');\n activeOverlays.forEach((overlay) => {\n expect(overlay.slot).to.equal('open');\n });\n let close = oneEvent(content, 'sp-closed');\n content.trigger.removeAttribute('open');\n await close;\n close = oneEvent(el, 'sp-closed');\n el.removeAttribute('open');\n await close;\n });\n});\ndescribe('Overlay - timing', () => {\n it('manages multiple modals in a row without preventing them from closing', async () => {\n const test = await fixture<HTMLDivElement>(html`\n <div>\n <overlay-trigger>\n <sp-button slot=\"trigger\">Trigger 1</sp-button>\n <sp-popover slot=\"hover-content\">\n <p>Hover contentent for \"Trigger 1\".</p>\n </sp-popover>\n </overlay-trigger>\n <overlay-trigger>\n <sp-button slot=\"trigger\">Trigger 2</sp-button>\n <sp-popover slot=\"hover-content\">\n <p>Hover contentent for \"Trigger 2\".</p>\n </sp-popover>\n <sp-popover slot=\"click-content\">\n <p>Click contentent for \"Trigger 2\".</p>\n </sp-popover>\n </overlay-trigger>\n </div>\n `);\n\n const overlayTrigger1 = test.querySelector(\n 'overlay-trigger:first-child'\n ) as OverlayTrigger;\n const overlayTrigger2 = test.querySelector(\n 'overlay-trigger:last-child'\n ) as OverlayTrigger;\n const trigger1 = overlayTrigger1.querySelector(\n '[slot=\"trigger\"]'\n ) as HTMLButtonElement;\n const trigger2 = overlayTrigger2.querySelector(\n '[slot=\"trigger\"]'\n ) as HTMLButtonElement;\n\n const boundingRectTrigger1 = trigger1.getBoundingClientRect();\n const boundingRectTrigger2 = trigger2.getBoundingClientRect();\n const trigger1Position: [number, number] = [\n boundingRectTrigger1.left + boundingRectTrigger1.width / 2,\n boundingRectTrigger1.top + boundingRectTrigger1.height / 2,\n ];\n const outsideTrigger1: [number, number] = [\n boundingRectTrigger1.left + boundingRectTrigger1.width * 2,\n boundingRectTrigger1.top + boundingRectTrigger1.height * 2,\n ];\n const trigger2Position: [number, number] = [\n boundingRectTrigger2.left + boundingRectTrigger2.width / 2,\n boundingRectTrigger2.top + boundingRectTrigger2.height / 2,\n ];\n const outsideTrigger2: [number, number] = [\n boundingRectTrigger2.left + boundingRectTrigger2.width * 2,\n boundingRectTrigger2.top + boundingRectTrigger2.height / 2,\n ];\n\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: trigger1Position,\n },\n ],\n });\n await nextFrame();\n await nextFrame();\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: outsideTrigger1,\n },\n ],\n });\n await nextFrame();\n await nextFrame();\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: trigger2Position,\n },\n ],\n });\n await nextFrame();\n await nextFrame();\n const opened = oneEvent(trigger2, 'sp-opened');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: trigger2Position,\n },\n ],\n });\n await opened;\n\n expect(overlayTrigger1.hasAttribute('open')).to.be.false;\n expect(overlayTrigger2.hasAttribute('open')).to.be.true;\n expect(overlayTrigger2.getAttribute('open')).to.equal('click');\n\n const closed = oneEvent(overlayTrigger2, 'sp-closed');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: outsideTrigger2,\n },\n ],\n });\n await closed;\n\n // sometimes safari needs to wait a few frames for the open attribute to update\n for (let i = 0; i < 3; i++) await nextFrame();\n\n expect(overlayTrigger1.hasAttribute('open')).to.be.false;\n expect(overlayTrigger2.hasAttribute('open'), overlayTrigger2.open).to.be\n .false;\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
7
|
}
|
package/sp-overlay.d.ts
DELETED
package/sp-overlay.dev.js
DELETED
package/sp-overlay.js
DELETED
package/src/AbstractOverlay.d.ts
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { SpectrumElement } from '@spectrum-web-components/base';
|
|
2
|
-
import type { OpenableElement, OverlayOptions, OverlayOptionsV1, OverlayState, OverlayTypes, TriggerInteractionsV1 } from './overlay-types.js';
|
|
3
|
-
import { Overlay } from './Overlay.js';
|
|
4
|
-
import type { VirtualTrigger } from './VirtualTrigger.js';
|
|
5
|
-
import { OverlayTimer } from './overlay-timer.js';
|
|
6
|
-
import { PlacementController } from './PlacementController.js';
|
|
7
|
-
export declare const overlayTimer: OverlayTimer;
|
|
8
|
-
export declare const noop: () => void;
|
|
9
|
-
export declare class BeforetoggleClosedEvent extends Event {
|
|
10
|
-
currentState: string;
|
|
11
|
-
newState: string;
|
|
12
|
-
constructor();
|
|
13
|
-
}
|
|
14
|
-
export declare class BeforetoggleOpenEvent extends Event {
|
|
15
|
-
currentState: string;
|
|
16
|
-
newState: string;
|
|
17
|
-
constructor();
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Apply a "transitionend" listener to an element that may not transition but
|
|
21
|
-
* guarantee the callback will be fired either way.
|
|
22
|
-
*
|
|
23
|
-
* @param el {HTMLElement} - Target of the "transition" listeners.
|
|
24
|
-
* @param action {Function} - Method to trigger the "transition".
|
|
25
|
-
* @param cb {Function} - Callback to trigger when the "transition" has ended.
|
|
26
|
-
*/
|
|
27
|
-
export declare const guaranteedAllTransitionend: (el: HTMLElement, action: () => void, cb: () => void) => void;
|
|
28
|
-
export declare function nextFrame(): Promise<void>;
|
|
29
|
-
export declare class AbstractOverlay extends SpectrumElement {
|
|
30
|
-
protected applyFocus(_targetOpenState: boolean, _focusEl: HTMLElement | null): Promise<void>;
|
|
31
|
-
delayed: boolean;
|
|
32
|
-
dialogEl: HTMLDialogElement & {
|
|
33
|
-
showPopover(): void;
|
|
34
|
-
hidePopover(): void;
|
|
35
|
-
};
|
|
36
|
-
dispose: () => void;
|
|
37
|
-
protected ensureOnDOM(_targetOpenState: boolean): Promise<void>;
|
|
38
|
-
elements: OpenableElement[];
|
|
39
|
-
protected makeTransition(_targetOpenState: boolean): Promise<HTMLElement | null>;
|
|
40
|
-
protected manageDelay(_targetOpenState: boolean): Promise<void>;
|
|
41
|
-
protected manageDialogOpen(): Promise<void>;
|
|
42
|
-
protected managePopoverOpen(): Promise<void>;
|
|
43
|
-
protected managePosition(): void;
|
|
44
|
-
get open(): boolean;
|
|
45
|
-
set open(_open: boolean);
|
|
46
|
-
protected placementController: PlacementController;
|
|
47
|
-
receivesFocus: 'true' | 'false' | 'auto';
|
|
48
|
-
get state(): OverlayState;
|
|
49
|
-
set state(_state: OverlayState);
|
|
50
|
-
protected _state: OverlayState;
|
|
51
|
-
triggerElement: HTMLElement | VirtualTrigger | null;
|
|
52
|
-
type: OverlayTypes;
|
|
53
|
-
static update(): void;
|
|
54
|
-
static open(trigger: HTMLElement, interaction: TriggerInteractionsV1, content: HTMLElement, optionsV1: OverlayOptionsV1): Promise<() => void>;
|
|
55
|
-
static open(content: HTMLElement, options?: OverlayOptions): Promise<Overlay>;
|
|
56
|
-
}
|
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
import { SpectrumElement } from "@spectrum-web-components/base";
|
|
3
|
-
import { reparentChildren } from "@spectrum-web-components/shared/src/reparent-children.js";
|
|
4
|
-
import { Overlay } from "./Overlay.dev.js";
|
|
5
|
-
import { OverlayTimer } from "./overlay-timer.dev.js";
|
|
6
|
-
export const overlayTimer = new OverlayTimer();
|
|
7
|
-
export const noop = () => {
|
|
8
|
-
return;
|
|
9
|
-
};
|
|
10
|
-
export class BeforetoggleClosedEvent extends Event {
|
|
11
|
-
constructor() {
|
|
12
|
-
super("beforetoggle", {
|
|
13
|
-
bubbles: false,
|
|
14
|
-
composed: false
|
|
15
|
-
});
|
|
16
|
-
this.currentState = "open";
|
|
17
|
-
this.newState = "closed";
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
export class BeforetoggleOpenEvent extends Event {
|
|
21
|
-
constructor() {
|
|
22
|
-
super("beforetoggle", {
|
|
23
|
-
bubbles: false,
|
|
24
|
-
composed: false
|
|
25
|
-
});
|
|
26
|
-
this.currentState = "closed";
|
|
27
|
-
this.newState = "open";
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
export const guaranteedAllTransitionend = (el, action, cb) => {
|
|
31
|
-
const abortController = new AbortController();
|
|
32
|
-
const runningTransitions = /* @__PURE__ */ new Map();
|
|
33
|
-
const cleanup = () => {
|
|
34
|
-
abortController.abort();
|
|
35
|
-
cb();
|
|
36
|
-
};
|
|
37
|
-
let guarantee2;
|
|
38
|
-
let guarantee3;
|
|
39
|
-
const guarantee1 = requestAnimationFrame(() => {
|
|
40
|
-
guarantee2 = requestAnimationFrame(() => {
|
|
41
|
-
guarantee3 = requestAnimationFrame(() => {
|
|
42
|
-
cleanup();
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
const handleTransitionend = (event) => {
|
|
47
|
-
if (event.target !== el) {
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
runningTransitions.set(
|
|
51
|
-
event.propertyName,
|
|
52
|
-
runningTransitions.get(event.propertyName) - 1
|
|
53
|
-
);
|
|
54
|
-
if (!runningTransitions.get(event.propertyName)) {
|
|
55
|
-
runningTransitions.delete(event.propertyName);
|
|
56
|
-
}
|
|
57
|
-
if (runningTransitions.size === 0) {
|
|
58
|
-
cleanup();
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
const handleTransitionrun = (event) => {
|
|
62
|
-
if (event.target !== el) {
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
if (!runningTransitions.has(event.propertyName)) {
|
|
66
|
-
runningTransitions.set(event.propertyName, 0);
|
|
67
|
-
}
|
|
68
|
-
runningTransitions.set(
|
|
69
|
-
event.propertyName,
|
|
70
|
-
runningTransitions.get(event.propertyName) + 1
|
|
71
|
-
);
|
|
72
|
-
cancelAnimationFrame(guarantee1);
|
|
73
|
-
cancelAnimationFrame(guarantee2);
|
|
74
|
-
cancelAnimationFrame(guarantee3);
|
|
75
|
-
};
|
|
76
|
-
el.addEventListener("transitionrun", handleTransitionrun, {
|
|
77
|
-
signal: abortController.signal
|
|
78
|
-
});
|
|
79
|
-
el.addEventListener("transitionend", handleTransitionend, {
|
|
80
|
-
signal: abortController.signal
|
|
81
|
-
});
|
|
82
|
-
action();
|
|
83
|
-
};
|
|
84
|
-
export function nextFrame() {
|
|
85
|
-
return new Promise((res) => requestAnimationFrame(() => res()));
|
|
86
|
-
}
|
|
87
|
-
export class AbstractOverlay extends SpectrumElement {
|
|
88
|
-
constructor() {
|
|
89
|
-
super(...arguments);
|
|
90
|
-
this.dispose = noop;
|
|
91
|
-
}
|
|
92
|
-
async applyFocus(_targetOpenState, _focusEl) {
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
async ensureOnDOM(_targetOpenState) {
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
async makeTransition(_targetOpenState) {
|
|
99
|
-
return null;
|
|
100
|
-
}
|
|
101
|
-
async manageDelay(_targetOpenState) {
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
async manageDialogOpen() {
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
async managePopoverOpen() {
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
managePosition() {
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
get open() {
|
|
114
|
-
return false;
|
|
115
|
-
}
|
|
116
|
-
set open(_open) {
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
|
-
get state() {
|
|
120
|
-
return "closed";
|
|
121
|
-
}
|
|
122
|
-
set state(_state) {
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
static update() {
|
|
126
|
-
const overlayUpdateEvent = new CustomEvent("sp-update-overlays", {
|
|
127
|
-
bubbles: true,
|
|
128
|
-
composed: true,
|
|
129
|
-
cancelable: true
|
|
130
|
-
});
|
|
131
|
-
document.dispatchEvent(overlayUpdateEvent);
|
|
132
|
-
}
|
|
133
|
-
static async open(triggerOrContent, interactionOrOptions, content, optionsV1) {
|
|
134
|
-
var _a, _b, _c, _d;
|
|
135
|
-
const v2 = arguments.length === 2;
|
|
136
|
-
const overlayContent = content || triggerOrContent;
|
|
137
|
-
const overlay = new Overlay();
|
|
138
|
-
let restored = false;
|
|
139
|
-
overlay.dispose = () => {
|
|
140
|
-
overlay.addEventListener("sp-closed", () => {
|
|
141
|
-
if (!restored) {
|
|
142
|
-
restoreContent();
|
|
143
|
-
restored = true;
|
|
144
|
-
}
|
|
145
|
-
requestAnimationFrame(() => {
|
|
146
|
-
overlay.remove();
|
|
147
|
-
});
|
|
148
|
-
});
|
|
149
|
-
overlay.open = false;
|
|
150
|
-
overlay.dispose = noop;
|
|
151
|
-
};
|
|
152
|
-
const restoreContent = reparentChildren([overlayContent], overlay, {
|
|
153
|
-
position: "beforeend",
|
|
154
|
-
prepareCallback: (el) => {
|
|
155
|
-
const slot = el.slot;
|
|
156
|
-
el.removeAttribute("slot");
|
|
157
|
-
return () => {
|
|
158
|
-
el.slot = slot;
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
});
|
|
162
|
-
const v1 = !v2 && overlayContent && optionsV1;
|
|
163
|
-
if (v1) {
|
|
164
|
-
if (true) {
|
|
165
|
-
window.__swc.warn(
|
|
166
|
-
overlay,
|
|
167
|
-
`You are interacting with an ${overlay.localName} element via a deprecated imperative API. This API will be removed in a future version of the SWC library. Consider leveraging an ${overlay.localName} directly.`,
|
|
168
|
-
"https://opensource.adobe.com/spectrum-web-components/components/overlay/",
|
|
169
|
-
{ level: "deprecation" }
|
|
170
|
-
);
|
|
171
|
-
}
|
|
172
|
-
const trigger = triggerOrContent;
|
|
173
|
-
const interaction = interactionOrOptions;
|
|
174
|
-
const options2 = optionsV1;
|
|
175
|
-
overlay.delayed = options2.delayed || overlayContent.hasAttribute("delayed");
|
|
176
|
-
overlay.receivesFocus = (_a = options2.receivesFocus) != null ? _a : "auto";
|
|
177
|
-
overlay.triggerElement = options2.virtualTrigger || trigger;
|
|
178
|
-
overlay.type = interaction === "modal" ? "modal" : interaction === "hover" ? "hint" : "auto";
|
|
179
|
-
overlay.offset = (_b = options2.offset) != null ? _b : 6;
|
|
180
|
-
overlay.placement = options2.placement;
|
|
181
|
-
overlay.willPreventClose = !!options2.notImmediatelyClosable;
|
|
182
|
-
trigger.insertAdjacentElement("afterend", overlay);
|
|
183
|
-
await overlay.updateComplete;
|
|
184
|
-
overlay.open = true;
|
|
185
|
-
return overlay.dispose;
|
|
186
|
-
}
|
|
187
|
-
const options = interactionOrOptions;
|
|
188
|
-
overlay.append(overlayContent);
|
|
189
|
-
overlay.delayed = options.delayed || overlayContent.hasAttribute("delayed");
|
|
190
|
-
overlay.receivesFocus = (_c = options.receivesFocus) != null ? _c : "auto";
|
|
191
|
-
overlay.triggerElement = options.trigger || null;
|
|
192
|
-
overlay.type = options.type || "modal";
|
|
193
|
-
overlay.offset = (_d = options.offset) != null ? _d : 6;
|
|
194
|
-
overlay.placement = options.placement;
|
|
195
|
-
overlay.willPreventClose = !!options.notImmediatelyClosable;
|
|
196
|
-
overlay.updateComplete.then(() => {
|
|
197
|
-
overlay.open = true;
|
|
198
|
-
});
|
|
199
|
-
return overlay;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
//# sourceMappingURL=AbstractOverlay.dev.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["AbstractOverlay.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 { SpectrumElement } from '@spectrum-web-components/base';\nimport { reparentChildren } from '@spectrum-web-components/shared/src/reparent-children.js';\n\nimport type {\n OpenableElement,\n OverlayOptions,\n OverlayOptionsV1,\n OverlayState,\n OverlayTypes,\n TriggerInteractionsV1,\n} from './overlay-types.dev.js'\nimport { Overlay } from './Overlay.dev.js'\nimport type { VirtualTrigger } from './VirtualTrigger.dev.js'\nimport { OverlayTimer } from './overlay-timer.dev.js'\nimport { PlacementController } from './PlacementController.dev.js'\n\nexport const overlayTimer = new OverlayTimer();\n\nexport const noop = (): void => {\n return;\n};\n\nexport class BeforetoggleClosedEvent extends Event {\n currentState = 'open';\n newState = 'closed';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\nexport class BeforetoggleOpenEvent extends Event {\n currentState = 'closed';\n newState = 'open';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\n/**\n * Apply a \"transitionend\" listener to an element that may not transition but\n * guarantee the callback will be fired either way.\n *\n * @param el {HTMLElement} - Target of the \"transition\" listeners.\n * @param action {Function} - Method to trigger the \"transition\".\n * @param cb {Function} - Callback to trigger when the \"transition\" has ended.\n */\nexport const guaranteedAllTransitionend = (\n el: HTMLElement,\n action: () => void,\n cb: () => void\n): void => {\n const abortController = new AbortController();\n const runningTransitions = new Map<string, number>();\n const cleanup = (): void => {\n abortController.abort();\n cb();\n };\n let guarantee2: number;\n let guarantee3: number;\n // WebKit fires `transitionrun` a little earlier, the multiple guarantees here\n // allow WebKit to be caught, but doesn't remove the animation listener until\n // after it would have fired in Chromium.\n const guarantee1 = requestAnimationFrame(() => {\n guarantee2 = requestAnimationFrame(() => {\n guarantee3 = requestAnimationFrame(() => {\n cleanup();\n });\n });\n });\n const handleTransitionend = (event: TransitionEvent): void => {\n if (event.target !== el) {\n return;\n }\n runningTransitions.set(\n event.propertyName,\n (runningTransitions.get(event.propertyName) as number) - 1\n );\n if (!runningTransitions.get(event.propertyName)) {\n runningTransitions.delete(event.propertyName);\n }\n if (runningTransitions.size === 0) {\n cleanup();\n }\n };\n const handleTransitionrun = (event: TransitionEvent): void => {\n if (event.target !== el) {\n return;\n }\n if (!runningTransitions.has(event.propertyName)) {\n runningTransitions.set(event.propertyName, 0);\n }\n runningTransitions.set(\n event.propertyName,\n (runningTransitions.get(event.propertyName) as number) + 1\n );\n cancelAnimationFrame(guarantee1);\n cancelAnimationFrame(guarantee2);\n cancelAnimationFrame(guarantee3);\n };\n el.addEventListener('transitionrun', handleTransitionrun, {\n signal: abortController.signal,\n });\n el.addEventListener('transitionend', handleTransitionend, {\n signal: abortController.signal,\n });\n action();\n};\n\nexport function nextFrame(): Promise<void> {\n return new Promise((res) => requestAnimationFrame(() => res()));\n}\n\nexport class AbstractOverlay extends SpectrumElement {\n protected async applyFocus(\n _targetOpenState: boolean,\n _focusEl: HTMLElement | null\n ): Promise<void> {\n return;\n }\n delayed!: boolean;\n dialogEl!: HTMLDialogElement & {\n showPopover(): void;\n hidePopover(): void;\n };\n dispose = noop;\n protected async ensureOnDOM(_targetOpenState: boolean): Promise<void> {\n return;\n }\n elements!: OpenableElement[];\n protected async makeTransition(\n _targetOpenState: boolean\n ): Promise<HTMLElement | null> {\n return null;\n }\n protected async manageDelay(_targetOpenState: boolean): Promise<void> {\n return;\n }\n protected async manageDialogOpen(): Promise<void> {\n return;\n }\n protected async managePopoverOpen(): Promise<void> {\n return;\n }\n protected managePosition(): void {\n return;\n }\n get open(): boolean {\n return false;\n }\n set open(_open: boolean) {\n return;\n }\n protected placementController!: PlacementController;\n receivesFocus!: 'true' | 'false' | 'auto';\n get state(): OverlayState {\n return 'closed';\n }\n set state(_state: OverlayState) {\n return;\n }\n protected _state!: OverlayState;\n triggerElement!: HTMLElement | VirtualTrigger | null;\n type!: OverlayTypes;\n\n public static update(): void {\n const overlayUpdateEvent = new CustomEvent('sp-update-overlays', {\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n document.dispatchEvent(overlayUpdateEvent);\n }\n\n public static async open(\n trigger: HTMLElement,\n interaction: TriggerInteractionsV1,\n content: HTMLElement,\n optionsV1: OverlayOptionsV1\n ): Promise<() => void>;\n public static async open(\n content: HTMLElement,\n options?: OverlayOptions\n ): Promise<Overlay>;\n public static async open(\n triggerOrContent: HTMLElement,\n interactionOrOptions:\n | TriggerInteractionsV1\n | OverlayOptions\n | undefined,\n content?: HTMLElement,\n optionsV1?: OverlayOptionsV1\n ): Promise<Overlay | (() => void)> {\n const v2 = arguments.length === 2;\n const overlayContent = content || triggerOrContent;\n const overlay = new Overlay();\n let restored = false;\n overlay.dispose = () => {\n overlay.addEventListener('sp-closed', () => {\n if (!restored) {\n restoreContent();\n restored = true;\n }\n requestAnimationFrame(() => {\n overlay.remove();\n });\n });\n overlay.open = false;\n overlay.dispose = noop;\n };\n /**\n * Since content must exist in an <sp-overlay>, we need a way to get it there.\n * The best & most-direct way is to declaratively use an <sp-overlay> element,\n * but for imperative users, we'll reparent content into an overlay that we've created for them.\n **/\n const restoreContent = reparentChildren([overlayContent], overlay, {\n position: 'beforeend',\n prepareCallback: (el) => {\n // Ensure that content to be overlaid is no longer targetted to a specific `slot`.\n // This allow for it to be visible in the overlaid context.\n const slot = el.slot;\n el.removeAttribute('slot');\n return () => {\n el.slot = slot;\n };\n },\n });\n\n const v1 = !v2 && overlayContent && optionsV1;\n if (v1) {\n if (window.__swc.DEBUG) {\n window.__swc.warn(\n overlay,\n `You are interacting with an ${overlay.localName} element via a deprecated imperative API. This API will be removed in a future version of the SWC library. Consider leveraging an ${overlay.localName} directly.`,\n 'https://opensource.adobe.com/spectrum-web-components/components/overlay/',\n { level: 'deprecation' }\n );\n }\n const trigger = triggerOrContent;\n const interaction = interactionOrOptions;\n const options = optionsV1;\n overlay.delayed =\n options.delayed || overlayContent.hasAttribute('delayed');\n overlay.receivesFocus = options.receivesFocus ?? 'auto';\n overlay.triggerElement = options.virtualTrigger || trigger;\n overlay.type =\n interaction === 'modal'\n ? 'modal'\n : interaction === 'hover'\n ? 'hint'\n : 'auto';\n overlay.offset = options.offset ?? 6;\n overlay.placement = options.placement;\n overlay.willPreventClose = !!options.notImmediatelyClosable;\n trigger.insertAdjacentElement('afterend', overlay);\n await overlay.updateComplete;\n overlay.open = true;\n return overlay.dispose;\n }\n\n const options = interactionOrOptions as OverlayOptions;\n overlay.append(overlayContent);\n overlay.delayed =\n options.delayed || overlayContent.hasAttribute('delayed');\n overlay.receivesFocus = options.receivesFocus ?? 'auto';\n overlay.triggerElement = options.trigger || null;\n overlay.type = options.type || 'modal';\n overlay.offset = options.offset ?? 6;\n overlay.placement = options.placement;\n overlay.willPreventClose = !!options.notImmediatelyClosable;\n overlay.updateComplete.then(() => {\n // Do we want to \"open\" this path, or leave that to the consumer?\n overlay.open = true;\n });\n return overlay;\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["options"]
|
|
7
|
-
}
|
package/src/AbstractOverlay.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";import{SpectrumElement as E}from"@spectrum-web-components/base";import{reparentChildren as T}from"@spectrum-web-components/shared/src/reparent-children.js";import{Overlay as w}from"./Overlay.js";import{OverlayTimer as P}from"./overlay-timer.js";export const overlayTimer=new P,noop=()=>{};export class BeforetoggleClosedEvent extends Event{constructor(){super("beforetoggle",{bubbles:!1,composed:!1});this.currentState="open";this.newState="closed"}}export class BeforetoggleOpenEvent extends Event{constructor(){super("beforetoggle",{bubbles:!1,composed:!1});this.currentState="closed";this.newState="open"}}export const guaranteedAllTransitionend=(n,m,t)=>{const s=new AbortController,o=new Map,c=()=>{s.abort(),t()};let d,a;const e=requestAnimationFrame(()=>{d=requestAnimationFrame(()=>{a=requestAnimationFrame(()=>{c()})})}),u=r=>{r.target===n&&(o.set(r.propertyName,o.get(r.propertyName)-1),o.get(r.propertyName)||o.delete(r.propertyName),o.size===0&&c())},y=r=>{r.target===n&&(o.has(r.propertyName)||o.set(r.propertyName,0),o.set(r.propertyName,o.get(r.propertyName)+1),cancelAnimationFrame(e),cancelAnimationFrame(d),cancelAnimationFrame(a))};n.addEventListener("transitionrun",y,{signal:s.signal}),n.addEventListener("transitionend",u,{signal:s.signal}),m()};export function nextFrame(){return new Promise(n=>requestAnimationFrame(()=>n()))}export class AbstractOverlay extends E{constructor(){super(...arguments);this.dispose=noop}async applyFocus(t,s){}async ensureOnDOM(t){}async makeTransition(t){return null}async manageDelay(t){}async manageDialogOpen(){}async managePopoverOpen(){}managePosition(){}get open(){return!1}set open(t){}get state(){return"closed"}set state(t){}static update(){const t=new CustomEvent("sp-update-overlays",{bubbles:!0,composed:!0,cancelable:!0});document.dispatchEvent(t)}static async open(t,s,o,c){var g,b,f,O;const d=arguments.length===2,a=o||t,e=new w;let u=!1;e.dispose=()=>{e.addEventListener("sp-closed",()=>{u||(y(),u=!0),requestAnimationFrame(()=>{e.remove()})}),e.open=!1,e.dispose=noop};const y=T([a],e,{position:"beforeend",prepareCallback:l=>{const v=l.slot;return l.removeAttribute("slot"),()=>{l.slot=v}}});if(!d&&a&&c){const l=t,v=s,p=c;return e.delayed=p.delayed||a.hasAttribute("delayed"),e.receivesFocus=(g=p.receivesFocus)!=null?g:"auto",e.triggerElement=p.virtualTrigger||l,e.type=v==="modal"?"modal":v==="hover"?"hint":"auto",e.offset=(b=p.offset)!=null?b:6,e.placement=p.placement,e.willPreventClose=!!p.notImmediatelyClosable,l.insertAdjacentElement("afterend",e),await e.updateComplete,e.open=!0,e.dispose}const i=s;return e.append(a),e.delayed=i.delayed||a.hasAttribute("delayed"),e.receivesFocus=(f=i.receivesFocus)!=null?f:"auto",e.triggerElement=i.trigger||null,e.type=i.type||"modal",e.offset=(O=i.offset)!=null?O:6,e.placement=i.placement,e.willPreventClose=!!i.notImmediatelyClosable,e.updateComplete.then(()=>{e.open=!0}),e}}
|
|
2
|
-
//# sourceMappingURL=AbstractOverlay.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["AbstractOverlay.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 { SpectrumElement } from '@spectrum-web-components/base';\nimport { reparentChildren } from '@spectrum-web-components/shared/src/reparent-children.js';\n\nimport type {\n OpenableElement,\n OverlayOptions,\n OverlayOptionsV1,\n OverlayState,\n OverlayTypes,\n TriggerInteractionsV1,\n} from './overlay-types.js';\nimport { Overlay } from './Overlay.js';\nimport type { VirtualTrigger } from './VirtualTrigger.js';\nimport { OverlayTimer } from './overlay-timer.js';\nimport { PlacementController } from './PlacementController.js';\n\nexport const overlayTimer = new OverlayTimer();\n\nexport const noop = (): void => {\n return;\n};\n\nexport class BeforetoggleClosedEvent extends Event {\n currentState = 'open';\n newState = 'closed';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\nexport class BeforetoggleOpenEvent extends Event {\n currentState = 'closed';\n newState = 'open';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\n/**\n * Apply a \"transitionend\" listener to an element that may not transition but\n * guarantee the callback will be fired either way.\n *\n * @param el {HTMLElement} - Target of the \"transition\" listeners.\n * @param action {Function} - Method to trigger the \"transition\".\n * @param cb {Function} - Callback to trigger when the \"transition\" has ended.\n */\nexport const guaranteedAllTransitionend = (\n el: HTMLElement,\n action: () => void,\n cb: () => void\n): void => {\n const abortController = new AbortController();\n const runningTransitions = new Map<string, number>();\n const cleanup = (): void => {\n abortController.abort();\n cb();\n };\n let guarantee2: number;\n let guarantee3: number;\n // WebKit fires `transitionrun` a little earlier, the multiple guarantees here\n // allow WebKit to be caught, but doesn't remove the animation listener until\n // after it would have fired in Chromium.\n const guarantee1 = requestAnimationFrame(() => {\n guarantee2 = requestAnimationFrame(() => {\n guarantee3 = requestAnimationFrame(() => {\n cleanup();\n });\n });\n });\n const handleTransitionend = (event: TransitionEvent): void => {\n if (event.target !== el) {\n return;\n }\n runningTransitions.set(\n event.propertyName,\n (runningTransitions.get(event.propertyName) as number) - 1\n );\n if (!runningTransitions.get(event.propertyName)) {\n runningTransitions.delete(event.propertyName);\n }\n if (runningTransitions.size === 0) {\n cleanup();\n }\n };\n const handleTransitionrun = (event: TransitionEvent): void => {\n if (event.target !== el) {\n return;\n }\n if (!runningTransitions.has(event.propertyName)) {\n runningTransitions.set(event.propertyName, 0);\n }\n runningTransitions.set(\n event.propertyName,\n (runningTransitions.get(event.propertyName) as number) + 1\n );\n cancelAnimationFrame(guarantee1);\n cancelAnimationFrame(guarantee2);\n cancelAnimationFrame(guarantee3);\n };\n el.addEventListener('transitionrun', handleTransitionrun, {\n signal: abortController.signal,\n });\n el.addEventListener('transitionend', handleTransitionend, {\n signal: abortController.signal,\n });\n action();\n};\n\nexport function nextFrame(): Promise<void> {\n return new Promise((res) => requestAnimationFrame(() => res()));\n}\n\nexport class AbstractOverlay extends SpectrumElement {\n protected async applyFocus(\n _targetOpenState: boolean,\n _focusEl: HTMLElement | null\n ): Promise<void> {\n return;\n }\n delayed!: boolean;\n dialogEl!: HTMLDialogElement & {\n showPopover(): void;\n hidePopover(): void;\n };\n dispose = noop;\n protected async ensureOnDOM(_targetOpenState: boolean): Promise<void> {\n return;\n }\n elements!: OpenableElement[];\n protected async makeTransition(\n _targetOpenState: boolean\n ): Promise<HTMLElement | null> {\n return null;\n }\n protected async manageDelay(_targetOpenState: boolean): Promise<void> {\n return;\n }\n protected async manageDialogOpen(): Promise<void> {\n return;\n }\n protected async managePopoverOpen(): Promise<void> {\n return;\n }\n protected managePosition(): void {\n return;\n }\n get open(): boolean {\n return false;\n }\n set open(_open: boolean) {\n return;\n }\n protected placementController!: PlacementController;\n receivesFocus!: 'true' | 'false' | 'auto';\n get state(): OverlayState {\n return 'closed';\n }\n set state(_state: OverlayState) {\n return;\n }\n protected _state!: OverlayState;\n triggerElement!: HTMLElement | VirtualTrigger | null;\n type!: OverlayTypes;\n\n public static update(): void {\n const overlayUpdateEvent = new CustomEvent('sp-update-overlays', {\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n document.dispatchEvent(overlayUpdateEvent);\n }\n\n public static async open(\n trigger: HTMLElement,\n interaction: TriggerInteractionsV1,\n content: HTMLElement,\n optionsV1: OverlayOptionsV1\n ): Promise<() => void>;\n public static async open(\n content: HTMLElement,\n options?: OverlayOptions\n ): Promise<Overlay>;\n public static async open(\n triggerOrContent: HTMLElement,\n interactionOrOptions:\n | TriggerInteractionsV1\n | OverlayOptions\n | undefined,\n content?: HTMLElement,\n optionsV1?: OverlayOptionsV1\n ): Promise<Overlay | (() => void)> {\n const v2 = arguments.length === 2;\n const overlayContent = content || triggerOrContent;\n const overlay = new Overlay();\n let restored = false;\n overlay.dispose = () => {\n overlay.addEventListener('sp-closed', () => {\n if (!restored) {\n restoreContent();\n restored = true;\n }\n requestAnimationFrame(() => {\n overlay.remove();\n });\n });\n overlay.open = false;\n overlay.dispose = noop;\n };\n /**\n * Since content must exist in an <sp-overlay>, we need a way to get it there.\n * The best & most-direct way is to declaratively use an <sp-overlay> element,\n * but for imperative users, we'll reparent content into an overlay that we've created for them.\n **/\n const restoreContent = reparentChildren([overlayContent], overlay, {\n position: 'beforeend',\n prepareCallback: (el) => {\n // Ensure that content to be overlaid is no longer targetted to a specific `slot`.\n // This allow for it to be visible in the overlaid context.\n const slot = el.slot;\n el.removeAttribute('slot');\n return () => {\n el.slot = slot;\n };\n },\n });\n\n const v1 = !v2 && overlayContent && optionsV1;\n if (v1) {\n if (window.__swc.DEBUG) {\n window.__swc.warn(\n overlay,\n `You are interacting with an ${overlay.localName} element via a deprecated imperative API. This API will be removed in a future version of the SWC library. Consider leveraging an ${overlay.localName} directly.`,\n 'https://opensource.adobe.com/spectrum-web-components/components/overlay/',\n { level: 'deprecation' }\n );\n }\n const trigger = triggerOrContent;\n const interaction = interactionOrOptions;\n const options = optionsV1;\n overlay.delayed =\n options.delayed || overlayContent.hasAttribute('delayed');\n overlay.receivesFocus = options.receivesFocus ?? 'auto';\n overlay.triggerElement = options.virtualTrigger || trigger;\n overlay.type =\n interaction === 'modal'\n ? 'modal'\n : interaction === 'hover'\n ? 'hint'\n : 'auto';\n overlay.offset = options.offset ?? 6;\n overlay.placement = options.placement;\n overlay.willPreventClose = !!options.notImmediatelyClosable;\n trigger.insertAdjacentElement('afterend', overlay);\n await overlay.updateComplete;\n overlay.open = true;\n return overlay.dispose;\n }\n\n const options = interactionOrOptions as OverlayOptions;\n overlay.append(overlayContent);\n overlay.delayed =\n options.delayed || overlayContent.hasAttribute('delayed');\n overlay.receivesFocus = options.receivesFocus ?? 'auto';\n overlay.triggerElement = options.trigger || null;\n overlay.type = options.type || 'modal';\n overlay.offset = options.offset ?? 6;\n overlay.placement = options.placement;\n overlay.willPreventClose = !!options.notImmediatelyClosable;\n overlay.updateComplete.then(() => {\n // Do we want to \"open\" this path, or leave that to the consumer?\n overlay.open = true;\n });\n return overlay;\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["SpectrumElement", "reparentChildren", "Overlay", "OverlayTimer", "el", "action", "cb", "abortController", "runningTransitions", "cleanup", "guarantee2", "guarantee3", "guarantee1", "handleTransitionend", "event", "handleTransitionrun", "res", "_targetOpenState", "_focusEl", "_open", "_state", "overlayUpdateEvent", "triggerOrContent", "interactionOrOptions", "content", "optionsV1", "_a", "_b", "_c", "_d", "v2", "overlayContent", "overlay", "restored", "restoreContent", "slot", "trigger", "interaction", "options"]
|
|
7
|
-
}
|