@spectrum-web-components/overlay 0.31.1-react.3 → 0.32.1-overlay.33
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 +120 -156
- package/custom-elements.json +1401 -530
- package/package.json +47 -22
- package/sp-overlay.d.ts +6 -0
- package/sp-overlay.dev.js +5 -0
- package/{active-overlay.dev.js.map → sp-overlay.dev.js.map} +3 -3
- package/sp-overlay.js +2 -0
- package/{active-overlay.js.map → sp-overlay.js.map} +4 -4
- package/src/Overlay.d.ts +28 -0
- package/src/Overlay.dev.js +88 -0
- package/src/Overlay.dev.js.map +7 -0
- package/src/Overlay.js +2 -0
- package/src/Overlay.js.map +7 -0
- package/src/OverlayBase.d.ts +124 -0
- package/src/OverlayBase.dev.js +719 -0
- package/src/OverlayBase.dev.js.map +7 -0
- package/src/OverlayBase.js +31 -0
- package/src/OverlayBase.js.map +7 -0
- package/src/OverlayDialog.d.ts +8 -0
- package/src/OverlayDialog.dev.js +160 -0
- package/src/OverlayDialog.dev.js.map +7 -0
- package/src/OverlayDialog.js +2 -0
- package/src/OverlayDialog.js.map +7 -0
- package/src/OverlayNoPopover.d.ts +8 -0
- package/src/OverlayNoPopover.dev.js +149 -0
- package/src/OverlayNoPopover.dev.js.map +7 -0
- package/src/OverlayNoPopover.js +2 -0
- package/src/OverlayNoPopover.js.map +7 -0
- package/src/OverlayPopover.d.ts +8 -0
- package/src/OverlayPopover.dev.js +199 -0
- package/src/OverlayPopover.dev.js.map +7 -0
- package/src/OverlayPopover.js +2 -0
- package/src/OverlayPopover.js.map +7 -0
- package/src/OverlayStack.d.ts +29 -0
- package/src/OverlayStack.dev.js +122 -0
- package/src/OverlayStack.dev.js.map +7 -0
- package/src/OverlayStack.js +2 -0
- package/src/OverlayStack.js.map +7 -0
- package/src/OverlayTrigger.d.ts +23 -31
- package/src/OverlayTrigger.dev.js +135 -245
- package/src/OverlayTrigger.dev.js.map +3 -3
- package/src/OverlayTrigger.js +52 -22
- package/src/OverlayTrigger.js.map +3 -3
- package/src/PlacementController.d.ts +36 -0
- package/src/PlacementController.dev.js +193 -0
- package/src/PlacementController.dev.js.map +7 -0
- package/src/PlacementController.js +2 -0
- package/src/PlacementController.js.map +7 -0
- package/src/VirtualTrigger.dev.js +0 -2
- package/src/VirtualTrigger.dev.js.map +2 -2
- package/src/VirtualTrigger.js +1 -1
- package/src/VirtualTrigger.js.map +3 -3
- package/src/fullSizePlugin.d.ts +12 -0
- package/src/fullSizePlugin.dev.js +39 -0
- package/src/fullSizePlugin.dev.js.map +7 -0
- package/src/fullSizePlugin.js +2 -0
- package/src/fullSizePlugin.js.map +7 -0
- package/src/index.d.ts +2 -3
- package/src/index.dev.js +2 -3
- 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 -2
- package/src/loader.dev.js +2 -19
- package/src/loader.dev.js.map +2 -2
- package/src/loader.js +1 -1
- package/src/loader.js.map +3 -3
- package/src/overlay-base.css.dev.js +9 -0
- package/src/overlay-base.css.dev.js.map +7 -0
- package/src/overlay-base.css.js +6 -0
- package/src/overlay-base.css.js.map +7 -0
- 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 +6 -4
- package/src/overlay-types.dev.js +1 -0
- 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/topLayerOverTransforms.d.ts +23 -0
- package/src/topLayerOverTransforms.dev.js +170 -0
- package/src/topLayerOverTransforms.dev.js.map +7 -0
- package/src/topLayerOverTransforms.js +2 -0
- package/src/topLayerOverTransforms.js.map +7 -0
- package/stories/overlay-element.stories.js +247 -0
- package/stories/overlay-element.stories.js.map +7 -0
- package/stories/overlay-story-components.js +27 -23
- package/stories/overlay-story-components.js.map +2 -2
- package/stories/overlay.stories.js +731 -676
- package/stories/overlay.stories.js.map +2 -2
- package/sync/overlay-trigger.d.ts +4 -0
- package/sync/overlay-trigger.dev.js +1 -4
- 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 +460 -415
- package/test/index.js.map +3 -3
- package/test/overlay-element.test-vrt.js +5 -0
- package/test/overlay-element.test-vrt.js.map +7 -0
- package/test/overlay-element.test.js +664 -0
- package/test/overlay-element.test.js.map +7 -0
- package/test/overlay-lifecycle.test.js +34 -106
- package/test/overlay-lifecycle.test.js.map +2 -2
- package/test/overlay-trigger-click.test.js +11 -5
- package/test/overlay-trigger-click.test.js.map +2 -2
- package/test/overlay-trigger-extended.test.js +4 -8
- package/test/overlay-trigger-extended.test.js.map +2 -2
- package/test/overlay-trigger-hover-click.test.js +23 -23
- package/test/overlay-trigger-hover-click.test.js.map +2 -2
- package/test/overlay-trigger-hover.test.js +40 -34
- package/test/overlay-trigger-hover.test.js.map +2 -2
- package/test/overlay-trigger-longpress.test.js +98 -80
- 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 +247 -244
- package/test/overlay.test.js.map +3 -3
- package/active-overlay.d.ts +0 -6
- package/active-overlay.dev.js +0 -5
- package/active-overlay.js +0 -2
- package/src/ActiveOverlay.d.ts +0 -84
- package/src/ActiveOverlay.dev.js +0 -517
- package/src/ActiveOverlay.dev.js.map +0 -7
- package/src/ActiveOverlay.js +0 -16
- package/src/ActiveOverlay.js.map +0 -7
- package/src/active-overlay.css.dev.js +0 -13
- package/src/active-overlay.css.dev.js.map +0 -7
- package/src/active-overlay.css.js +0 -10
- package/src/active-overlay.css.js.map +0 -7
- package/src/overlay-stack.d.ts +0 -50
- package/src/overlay-stack.dev.js +0 -514
- package/src/overlay-stack.dev.js.map +0 -7
- package/src/overlay-stack.js +0 -33
- package/src/overlay-stack.js.map +0 -7
- package/src/overlay-utils.d.ts +0 -3
- package/src/overlay-utils.dev.js +0 -31
- package/src/overlay-utils.dev.js.map +0 -7
- package/src/overlay-utils.js +0 -2
- package/src/overlay-utils.js.map +0 -7
- package/src/overlay.d.ts +0 -59
- package/src/overlay.dev.js +0 -127
- package/src/overlay.dev.js.map +0 -7
- package/src/overlay.js +0 -2
- package/src/overlay.js.map +0 -7
- /package/src/{active-overlay.css.d.ts → overlay-base.css.d.ts} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["OverlayStack.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2023 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\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport { OverlayBase as Overlay } from './OverlayBase.dev.js'\n\nconst supportsPopover = 'showPopover' in document.createElement('div');\n\nclass OverlayStack {\n private get document(): Document {\n return this.root.ownerDocument /* c8 ignore next */ || document;\n }\n\n private root: HTMLElement = document.body;\n\n stack: Overlay[] = [];\n\n constructor() {\n this.bindEvents();\n }\n\n bindEvents(): void {\n this.document.addEventListener('pointerup', this.handleClick);\n this.document.addEventListener('keydown', this.handleKeydown);\n }\n\n private closeOverlay(overlay: Overlay): void {\n const overlayIndex = this.stack.indexOf(overlay);\n if (overlayIndex > -1) {\n this.stack.splice(overlayIndex, 1);\n }\n overlay.open = false;\n }\n\n /**\n * Close all overlays that are not ancestors of this click event\n *\n * @param event {ClickEvent}\n */\n handleClick = (event: Event): void => {\n if (!this.stack.length) return;\n\n const composedPath = event.composedPath();\n const nonAncestorOverlays = this.stack.filter((overlay) => {\n const inStack = composedPath.find(\n (el) => el === overlay || el === overlay?.triggerElement\n );\n return !inStack && !overlay.shouldPreventClose();\n }) as Overlay[];\n nonAncestorOverlays.reverse();\n nonAncestorOverlays.forEach((overlay) => {\n this.closeOverlay(overlay);\n let parentToClose = overlay.parentOverlayToForceClose;\n while (parentToClose) {\n this.closeOverlay(parentToClose);\n parentToClose = parentToClose.parentOverlayToForceClose;\n }\n });\n\n // let reverseIndex = -1;\n // let overlay = this.stack.at(reverseIndex);\n // if (overlay?.shouldPreventClose()) return;\n\n // let shouldClose;\n // while (overlay && !shouldClose) {\n // shouldClose =\n // overlay.shouldPreventClose() ||\n // !composedPath.find(\n // (el) => el === overlay || el === overlay?.triggerElement\n // );\n // if (!shouldClose) {\n // reverseIndex -= 1;\n // overlay = this.stack.at(reverseIndex);\n // }\n // }\n // if (!shouldClose || !overlay) {\n // return;\n // }\n\n // this.closeOverlay(overlay);\n // let parentToClose = overlay.parentOverlayToForceClose;\n // while (parentToClose) {\n // this.closeOverlay(parentToClose);\n // parentToClose = parentToClose.parentOverlayToForceClose;\n // }\n };\n\n handleBeforetoggle = (event: Event): void => {\n const { target, newState: open } = event as Event & {\n newState: string;\n };\n if (open === 'open') return;\n this.closeOverlay(target as Overlay);\n };\n\n private handleKeydown = (event: KeyboardEvent): void => {\n if (event.code !== 'Escape') return;\n if (supportsPopover) return;\n if (!this.stack.length) return;\n\n const last = this.stack.at(-1);\n if (!last) return;\n this.closeOverlay(last);\n };\n\n /**\n * When overlays are added manage the open state of exisiting overlays appropriately:\n * - 'modal': should close other overlays\n * - 'page': should close other overlays\n * - 'hint': shouldn't close other overlays\n * - 'auto': should close other 'auto' overlays and other 'hint' overlays, but not 'manual' overlays\n * - 'manual': shouldn't close other overlays\n */\n add(overlay: Overlay): void {\n if (this.stack.includes(overlay)) {\n const overlayIndex = this.stack.indexOf(overlay);\n if (overlayIndex > -1) {\n this.stack.splice(overlayIndex, 1);\n this.stack.push(overlay);\n }\n return;\n }\n if (\n overlay.type === 'auto' ||\n overlay.type === 'modal' ||\n overlay.type === 'page'\n ) {\n // manage closing open overlays\n const queryPathEventName = 'sp-overlay-query-path';\n const queryPathEvent = new Event(queryPathEventName, {\n composed: true,\n bubbles: true,\n });\n overlay.addEventListener(\n queryPathEventName,\n (event: Event) => {\n const path = event.composedPath();\n this.stack.forEach((overlayEl) => {\n const inPath = path.find((el) => el === overlayEl);\n if (!inPath && overlayEl.type !== 'manual') {\n this.closeOverlay(overlayEl);\n }\n });\n },\n { once: true }\n );\n overlay.dispatchEvent(queryPathEvent);\n } else if (overlay.type === 'hint') {\n this.stack.forEach((overlayEl) => {\n if (overlayEl.type === 'hint') {\n this.closeOverlay(overlayEl);\n }\n });\n }\n requestAnimationFrame(() => {\n this.stack.push(overlay);\n overlay.addEventListener('beforetoggle', this.handleBeforetoggle, {\n once: true,\n });\n });\n }\n\n remove(overlay: Overlay): void {\n this.closeOverlay(overlay);\n }\n}\n\nexport const overlayStack = new OverlayStack();\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const r="showPopover"in document.createElement("div");class c{constructor(){this.root=document.body;this.stack=[];this.handleClick=e=>{if(!this.stack.length)return;const t=e.composedPath(),i=this.stack.filter(s=>!t.find(o=>o===s||o===(s==null?void 0:s.triggerElement))&&!s.shouldPreventClose());i.reverse(),i.forEach(s=>{this.closeOverlay(s);let n=s.parentOverlayToForceClose;for(;n;)this.closeOverlay(n),n=n.parentOverlayToForceClose})};this.handleBeforetoggle=e=>{const{target:t,newState:i}=e;i!=="open"&&this.closeOverlay(t)};this.handleKeydown=e=>{if(e.code!=="Escape"||r||!this.stack.length)return;const t=this.stack.at(-1);t&&this.closeOverlay(t)};this.bindEvents()}get document(){return this.root.ownerDocument||document}bindEvents(){this.document.addEventListener("pointerup",this.handleClick),this.document.addEventListener("keydown",this.handleKeydown)}closeOverlay(e){const t=this.stack.indexOf(e);t>-1&&this.stack.splice(t,1),e.open=!1}add(e){if(this.stack.includes(e)){const t=this.stack.indexOf(e);t>-1&&(this.stack.splice(t,1),this.stack.push(e));return}if(e.type==="auto"||e.type==="modal"||e.type==="page"){const t="sp-overlay-query-path",i=new Event(t,{composed:!0,bubbles:!0});e.addEventListener(t,s=>{const n=s.composedPath();this.stack.forEach(o=>{!n.find(a=>a===o)&&o.type!=="manual"&&this.closeOverlay(o)})},{once:!0}),e.dispatchEvent(i)}else e.type==="hint"&&this.stack.forEach(t=>{t.type==="hint"&&this.closeOverlay(t)});requestAnimationFrame(()=>{this.stack.push(e),e.addEventListener("beforetoggle",this.handleBeforetoggle,{once:!0})})}remove(e){this.closeOverlay(e)}}export const overlayStack=new c;
|
|
2
|
+
//# sourceMappingURL=OverlayStack.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["OverlayStack.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2023 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\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport { OverlayBase as Overlay } from './OverlayBase.js';\n\nconst supportsPopover = 'showPopover' in document.createElement('div');\n\nclass OverlayStack {\n private get document(): Document {\n return this.root.ownerDocument /* c8 ignore next */ || document;\n }\n\n private root: HTMLElement = document.body;\n\n stack: Overlay[] = [];\n\n constructor() {\n this.bindEvents();\n }\n\n bindEvents(): void {\n this.document.addEventListener('pointerup', this.handleClick);\n this.document.addEventListener('keydown', this.handleKeydown);\n }\n\n private closeOverlay(overlay: Overlay): void {\n const overlayIndex = this.stack.indexOf(overlay);\n if (overlayIndex > -1) {\n this.stack.splice(overlayIndex, 1);\n }\n overlay.open = false;\n }\n\n /**\n * Close all overlays that are not ancestors of this click event\n *\n * @param event {ClickEvent}\n */\n handleClick = (event: Event): void => {\n if (!this.stack.length) return;\n\n const composedPath = event.composedPath();\n const nonAncestorOverlays = this.stack.filter((overlay) => {\n const inStack = composedPath.find(\n (el) => el === overlay || el === overlay?.triggerElement\n );\n return !inStack && !overlay.shouldPreventClose();\n }) as Overlay[];\n nonAncestorOverlays.reverse();\n nonAncestorOverlays.forEach((overlay) => {\n this.closeOverlay(overlay);\n let parentToClose = overlay.parentOverlayToForceClose;\n while (parentToClose) {\n this.closeOverlay(parentToClose);\n parentToClose = parentToClose.parentOverlayToForceClose;\n }\n });\n\n // let reverseIndex = -1;\n // let overlay = this.stack.at(reverseIndex);\n // if (overlay?.shouldPreventClose()) return;\n\n // let shouldClose;\n // while (overlay && !shouldClose) {\n // shouldClose =\n // overlay.shouldPreventClose() ||\n // !composedPath.find(\n // (el) => el === overlay || el === overlay?.triggerElement\n // );\n // if (!shouldClose) {\n // reverseIndex -= 1;\n // overlay = this.stack.at(reverseIndex);\n // }\n // }\n // if (!shouldClose || !overlay) {\n // return;\n // }\n\n // this.closeOverlay(overlay);\n // let parentToClose = overlay.parentOverlayToForceClose;\n // while (parentToClose) {\n // this.closeOverlay(parentToClose);\n // parentToClose = parentToClose.parentOverlayToForceClose;\n // }\n };\n\n handleBeforetoggle = (event: Event): void => {\n const { target, newState: open } = event as Event & {\n newState: string;\n };\n if (open === 'open') return;\n this.closeOverlay(target as Overlay);\n };\n\n private handleKeydown = (event: KeyboardEvent): void => {\n if (event.code !== 'Escape') return;\n if (supportsPopover) return;\n if (!this.stack.length) return;\n\n const last = this.stack.at(-1);\n if (!last) return;\n this.closeOverlay(last);\n };\n\n /**\n * When overlays are added manage the open state of exisiting overlays appropriately:\n * - 'modal': should close other overlays\n * - 'page': should close other overlays\n * - 'hint': shouldn't close other overlays\n * - 'auto': should close other 'auto' overlays and other 'hint' overlays, but not 'manual' overlays\n * - 'manual': shouldn't close other overlays\n */\n add(overlay: Overlay): void {\n if (this.stack.includes(overlay)) {\n const overlayIndex = this.stack.indexOf(overlay);\n if (overlayIndex > -1) {\n this.stack.splice(overlayIndex, 1);\n this.stack.push(overlay);\n }\n return;\n }\n if (\n overlay.type === 'auto' ||\n overlay.type === 'modal' ||\n overlay.type === 'page'\n ) {\n // manage closing open overlays\n const queryPathEventName = 'sp-overlay-query-path';\n const queryPathEvent = new Event(queryPathEventName, {\n composed: true,\n bubbles: true,\n });\n overlay.addEventListener(\n queryPathEventName,\n (event: Event) => {\n const path = event.composedPath();\n this.stack.forEach((overlayEl) => {\n const inPath = path.find((el) => el === overlayEl);\n if (!inPath && overlayEl.type !== 'manual') {\n this.closeOverlay(overlayEl);\n }\n });\n },\n { once: true }\n );\n overlay.dispatchEvent(queryPathEvent);\n } else if (overlay.type === 'hint') {\n this.stack.forEach((overlayEl) => {\n if (overlayEl.type === 'hint') {\n this.closeOverlay(overlayEl);\n }\n });\n }\n requestAnimationFrame(() => {\n this.stack.push(overlay);\n overlay.addEventListener('beforetoggle', this.handleBeforetoggle, {\n once: true,\n });\n });\n }\n\n remove(overlay: Overlay): void {\n this.closeOverlay(overlay);\n }\n}\n\nexport const overlayStack = new OverlayStack();\n"],
|
|
5
|
+
"mappings": "aAaA,MAAMA,EAAkB,gBAAiB,SAAS,cAAc,KAAK,EAErE,MAAMC,CAAa,CASf,aAAc,CAJd,KAAQ,KAAoB,SAAS,KAErC,WAAmB,CAAC,EAwBpB,iBAAeC,GAAuB,CAClC,GAAI,CAAC,KAAK,MAAM,OAAQ,OAExB,MAAMC,EAAeD,EAAM,aAAa,EAClCE,EAAsB,KAAK,MAAM,OAAQC,GAIpC,CAHSF,EAAa,KACxBG,GAAOA,IAAOD,GAAWC,KAAOD,GAAA,YAAAA,EAAS,eAC9C,GACmB,CAACA,EAAQ,mBAAmB,CAClD,EACDD,EAAoB,QAAQ,EAC5BA,EAAoB,QAASC,GAAY,CACrC,KAAK,aAAaA,CAAO,EACzB,IAAIE,EAAgBF,EAAQ,0BAC5B,KAAOE,GACH,KAAK,aAAaA,CAAa,EAC/BA,EAAgBA,EAAc,yBAEtC,CAAC,CA4BL,EAEA,wBAAsBL,GAAuB,CACzC,KAAM,CAAE,OAAAM,EAAQ,SAAUC,CAAK,EAAIP,EAG/BO,IAAS,QACb,KAAK,aAAaD,CAAiB,CACvC,EAEA,KAAQ,cAAiBN,GAA+B,CAGpD,GAFIA,EAAM,OAAS,UACfF,GACA,CAAC,KAAK,MAAM,OAAQ,OAExB,MAAMU,EAAO,KAAK,MAAM,GAAG,EAAE,EACxBA,GACL,KAAK,aAAaA,CAAI,CAC1B,EArFI,KAAK,WAAW,CACpB,CAVA,IAAY,UAAqB,CAC7B,OAAO,KAAK,KAAK,eAAsC,QAC3D,CAUA,YAAmB,CACf,KAAK,SAAS,iBAAiB,YAAa,KAAK,WAAW,EAC5D,KAAK,SAAS,iBAAiB,UAAW,KAAK,aAAa,CAChE,CAEQ,aAAaL,EAAwB,CACzC,MAAMM,EAAe,KAAK,MAAM,QAAQN,CAAO,EAC3CM,EAAe,IACf,KAAK,MAAM,OAAOA,EAAc,CAAC,EAErCN,EAAQ,KAAO,EACnB,CAiFA,IAAIA,EAAwB,CACxB,GAAI,KAAK,MAAM,SAASA,CAAO,EAAG,CAC9B,MAAMM,EAAe,KAAK,MAAM,QAAQN,CAAO,EAC3CM,EAAe,KACf,KAAK,MAAM,OAAOA,EAAc,CAAC,EACjC,KAAK,MAAM,KAAKN,CAAO,GAE3B,OAEJ,GACIA,EAAQ,OAAS,QACjBA,EAAQ,OAAS,SACjBA,EAAQ,OAAS,OACnB,CAEE,MAAMO,EAAqB,wBACrBC,EAAiB,IAAI,MAAMD,EAAoB,CACjD,SAAU,GACV,QAAS,EACb,CAAC,EACDP,EAAQ,iBACJO,EACCV,GAAiB,CACd,MAAMY,EAAOZ,EAAM,aAAa,EAChC,KAAK,MAAM,QAASa,GAAc,CAE1B,CADWD,EAAK,KAAMR,GAAOA,IAAOS,CAAS,GAClCA,EAAU,OAAS,UAC9B,KAAK,aAAaA,CAAS,CAEnC,CAAC,CACL,EACA,CAAE,KAAM,EAAK,CACjB,EACAV,EAAQ,cAAcQ,CAAc,OAC7BR,EAAQ,OAAS,QACxB,KAAK,MAAM,QAASU,GAAc,CAC1BA,EAAU,OAAS,QACnB,KAAK,aAAaA,CAAS,CAEnC,CAAC,EAEL,sBAAsB,IAAM,CACxB,KAAK,MAAM,KAAKV,CAAO,EACvBA,EAAQ,iBAAiB,eAAgB,KAAK,mBAAoB,CAC9D,KAAM,EACV,CAAC,CACL,CAAC,CACL,CAEA,OAAOA,EAAwB,CAC3B,KAAK,aAAaA,CAAO,CAC7B,CACJ,CAEO,aAAM,aAAe,IAAIJ",
|
|
6
|
+
"names": ["supportsPopover", "OverlayStack", "event", "composedPath", "nonAncestorOverlays", "overlay", "el", "parentToClose", "target", "open", "last", "overlayIndex", "queryPathEventName", "queryPathEvent", "path", "overlayEl"]
|
|
7
|
+
}
|
package/src/OverlayTrigger.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { CSSResultArray, PropertyValues, SpectrumElement, TemplateResult } from '@spectrum-web-components/base';
|
|
2
|
-
import {
|
|
2
|
+
import { OverlayTriggerInteractions } from './overlay-types';
|
|
3
|
+
import '../sp-overlay.js';
|
|
4
|
+
import { Placement } from '@floating-ui/dom';
|
|
5
|
+
import { OverlayBase } from './OverlayBase.js';
|
|
3
6
|
export declare type OverlayContentTypes = 'click' | 'hover' | 'longpress';
|
|
4
7
|
export declare const LONGPRESS_INSTRUCTIONS: {
|
|
5
8
|
touch: string;
|
|
@@ -18,50 +21,39 @@ export declare const LONGPRESS_INSTRUCTIONS: {
|
|
|
18
21
|
* @fires sp-closed - Announces that the overlay has been closed
|
|
19
22
|
*/
|
|
20
23
|
export declare class OverlayTrigger extends SpectrumElement {
|
|
21
|
-
private closeClickOverlay?;
|
|
22
|
-
private closeLongpressOverlay?;
|
|
23
|
-
private closeHoverOverlay?;
|
|
24
24
|
static get styles(): CSSResultArray;
|
|
25
25
|
/**
|
|
26
26
|
* @type {"auto" | "auto-start" | "auto-end" | "top" | "bottom" | "right" | "left" | "top-start" | "top-end" | "bottom-start" | "bottom-end" | "right-start" | "right-end" | "left-start" | "left-end" | "none"}
|
|
27
27
|
* @attr
|
|
28
28
|
*/
|
|
29
|
-
placement
|
|
29
|
+
placement?: Placement;
|
|
30
30
|
type?: OverlayTriggerInteractions;
|
|
31
31
|
offset: number;
|
|
32
32
|
open?: OverlayContentTypes;
|
|
33
33
|
disabled: boolean;
|
|
34
34
|
hasLongpressContent: boolean;
|
|
35
35
|
private longpressDescriptor?;
|
|
36
|
-
private clickContent
|
|
37
|
-
private
|
|
38
|
-
private
|
|
39
|
-
private
|
|
40
|
-
private
|
|
36
|
+
private clickContent;
|
|
37
|
+
private clickPlacement?;
|
|
38
|
+
private longpressContent;
|
|
39
|
+
private longpressPlacement?;
|
|
40
|
+
private hoverContent;
|
|
41
|
+
private hoverPlacement?;
|
|
42
|
+
private targetContent;
|
|
43
|
+
clickOverlayElement: OverlayBase;
|
|
44
|
+
longpressOverlayElement: OverlayBase;
|
|
45
|
+
hoverOverlayElement: OverlayBase;
|
|
41
46
|
private _longpressId;
|
|
42
|
-
private
|
|
47
|
+
private getAssignedElementsFromSlot;
|
|
48
|
+
private handleTriggerContent;
|
|
49
|
+
private handleClickContent;
|
|
50
|
+
private handleLongpressContent;
|
|
51
|
+
private handleHoverContent;
|
|
52
|
+
private handleBeforetoggle;
|
|
53
|
+
protected update(changes: PropertyValues): void;
|
|
43
54
|
protected render(): TemplateResult;
|
|
44
55
|
protected updated(changes: PropertyValues<this>): void;
|
|
45
56
|
protected manageLongpressDescriptor(): void;
|
|
46
|
-
private closeAllOverlays;
|
|
47
|
-
private manageOpen;
|
|
48
|
-
private openOverlay;
|
|
49
|
-
static openOverlay: (target: HTMLElement, interaction: TriggerInteractions, content: HTMLElement, options: OverlayOptions) => Promise<() => void>;
|
|
50
|
-
private get overlayOptions();
|
|
51
|
-
private onTrigger;
|
|
52
|
-
private prepareToFocusOverlayContent;
|
|
53
|
-
onTriggerClick(): Promise<void>;
|
|
54
|
-
private _longpressEvent?;
|
|
55
|
-
private onTriggerLongpress;
|
|
56
|
-
private abortOverlay;
|
|
57
|
-
onTriggerMouseEnter(): Promise<void>;
|
|
58
|
-
private onClickSlotChange;
|
|
59
|
-
private onLongpressSlotChange;
|
|
60
|
-
private onHoverSlotChange;
|
|
61
|
-
private onTargetSlotChange;
|
|
62
|
-
private extractSlotContentFromEvent;
|
|
63
|
-
private openStatePromise;
|
|
64
|
-
private openStateResolver;
|
|
65
57
|
protected getUpdateComplete(): Promise<boolean>;
|
|
66
|
-
|
|
58
|
+
protected willUpdate(): void;
|
|
67
59
|
}
|
|
@@ -16,69 +16,144 @@ import {
|
|
|
16
16
|
} from "@spectrum-web-components/base";
|
|
17
17
|
import {
|
|
18
18
|
property,
|
|
19
|
+
query,
|
|
19
20
|
state
|
|
20
21
|
} from "@spectrum-web-components/base/src/decorators.js";
|
|
21
|
-
import { firstFocusableIn } from "@spectrum-web-components/shared/src/first-focusable-in.js";
|
|
22
22
|
import {
|
|
23
23
|
isAndroid,
|
|
24
24
|
isIOS
|
|
25
25
|
} from "@spectrum-web-components/shared/src/platform.js";
|
|
26
|
-
import { openOverlay } from "./loader.dev.js";
|
|
27
26
|
import overlayTriggerStyles from "./overlay-trigger.css.js";
|
|
27
|
+
import "../sp-overlay.dev.js";
|
|
28
28
|
export const LONGPRESS_INSTRUCTIONS = {
|
|
29
29
|
touch: "Double tap and long press for additional options",
|
|
30
30
|
keyboard: "Press Space or Alt+Down Arrow for additional options",
|
|
31
31
|
mouse: "Click and hold for additional options"
|
|
32
32
|
};
|
|
33
|
-
|
|
33
|
+
export class OverlayTrigger extends SpectrumElement {
|
|
34
34
|
constructor() {
|
|
35
35
|
super(...arguments);
|
|
36
|
-
this.placement = "bottom";
|
|
37
36
|
this.offset = 6;
|
|
38
37
|
this.disabled = false;
|
|
39
38
|
this.hasLongpressContent = false;
|
|
39
|
+
this.clickContent = [];
|
|
40
|
+
this.longpressContent = [];
|
|
41
|
+
this.hoverContent = [];
|
|
42
|
+
this.targetContent = [];
|
|
40
43
|
this._longpressId = `longpress-describedby-descriptor`;
|
|
41
|
-
this.abortOverlay = () => {
|
|
42
|
-
return;
|
|
43
|
-
};
|
|
44
|
-
this.openStatePromise = Promise.resolve();
|
|
45
44
|
}
|
|
46
45
|
static get styles() {
|
|
47
46
|
return [overlayTriggerStyles];
|
|
48
47
|
}
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
getAssignedElementsFromSlot(slot) {
|
|
49
|
+
return slot.assignedElements({ flatten: true });
|
|
50
|
+
}
|
|
51
|
+
handleTriggerContent(event) {
|
|
52
|
+
this.targetContent = this.getAssignedElementsFromSlot(event.target);
|
|
53
|
+
}
|
|
54
|
+
handleClickContent(event) {
|
|
55
|
+
this.clickContent = this.getAssignedElementsFromSlot(event.target);
|
|
56
|
+
}
|
|
57
|
+
handleLongpressContent(event) {
|
|
58
|
+
this.longpressContent = this.getAssignedElementsFromSlot(event.target);
|
|
59
|
+
}
|
|
60
|
+
handleHoverContent(event) {
|
|
61
|
+
this.hoverContent = this.getAssignedElementsFromSlot(event.target);
|
|
62
|
+
}
|
|
63
|
+
handleBeforetoggle(event) {
|
|
64
|
+
const target = event.composedPath()[0];
|
|
65
|
+
let type;
|
|
66
|
+
if (target === this.clickOverlayElement) {
|
|
67
|
+
type = "click";
|
|
68
|
+
} else if (target === this.longpressOverlayElement) {
|
|
69
|
+
type = "longpress";
|
|
70
|
+
} else if (target === this.hoverOverlayElement) {
|
|
71
|
+
type = "hover";
|
|
72
|
+
} else {
|
|
51
73
|
return;
|
|
52
74
|
}
|
|
53
|
-
|
|
75
|
+
if (event.newState === "open") {
|
|
76
|
+
this.open = type;
|
|
77
|
+
} else if (this.open === type) {
|
|
78
|
+
this.open = void 0;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
update(changes) {
|
|
82
|
+
var _a, _b, _c, _d, _e, _f;
|
|
83
|
+
if (changes.has("clickContent")) {
|
|
84
|
+
this.clickPlacement = ((_a = this.clickContent[0]) == null ? void 0 : _a.getAttribute("placement")) || ((_b = this.clickContent[0]) == null ? void 0 : _b.getAttribute(
|
|
85
|
+
"direction"
|
|
86
|
+
)) || void 0;
|
|
87
|
+
}
|
|
88
|
+
if (changes.has("hoverContent")) {
|
|
89
|
+
this.hoverPlacement = ((_c = this.hoverContent[0]) == null ? void 0 : _c.getAttribute("placement")) || ((_d = this.hoverContent[0]) == null ? void 0 : _d.getAttribute(
|
|
90
|
+
"direction"
|
|
91
|
+
)) || void 0;
|
|
92
|
+
}
|
|
93
|
+
if (changes.has("longpressContent")) {
|
|
94
|
+
this.longpressPlacement = ((_e = this.longpressContent[0]) == null ? void 0 : _e.getAttribute("placement")) || ((_f = this.longpressContent[0]) == null ? void 0 : _f.getAttribute(
|
|
95
|
+
"direction"
|
|
96
|
+
)) || void 0;
|
|
97
|
+
}
|
|
98
|
+
super.update(changes);
|
|
54
99
|
}
|
|
55
100
|
render() {
|
|
56
101
|
return html`
|
|
57
102
|
<slot
|
|
58
103
|
id="trigger"
|
|
59
|
-
@click=${this.onTrigger}
|
|
60
|
-
@longpress=${this.onTrigger}
|
|
61
|
-
@mouseenter=${this.onTrigger}
|
|
62
|
-
@mouseleave=${this.onTrigger}
|
|
63
|
-
@focusin=${this.onTrigger}
|
|
64
|
-
@focusout=${this.onTrigger}
|
|
65
|
-
@sp-closed=${this.handleClose}
|
|
66
|
-
@slotchange=${this.onTargetSlotChange}
|
|
67
104
|
name="trigger"
|
|
105
|
+
@slotchange=${this.handleTriggerContent}
|
|
68
106
|
></slot>
|
|
69
107
|
<div id="overlay-content">
|
|
70
|
-
<
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
@
|
|
80
|
-
|
|
81
|
-
|
|
108
|
+
<sp-overlay
|
|
109
|
+
id="click-overlay"
|
|
110
|
+
?disabled=${this.disabled || !this.clickContent.length}
|
|
111
|
+
?open=${this.open === "click" && !!this.clickContent.length}
|
|
112
|
+
.offset=${this.offset}
|
|
113
|
+
.placement=${this.clickPlacement || this.placement}
|
|
114
|
+
.triggerElement=${this.targetContent[0]}
|
|
115
|
+
.triggerInteraction=${"click"}
|
|
116
|
+
.type=${this.type !== "modal" ? "auto" : "modal"}
|
|
117
|
+
@beforetoggle=${this.handleBeforetoggle}
|
|
118
|
+
>
|
|
119
|
+
<slot
|
|
120
|
+
name="click-content"
|
|
121
|
+
@slotchange=${this.handleClickContent}
|
|
122
|
+
></slot>
|
|
123
|
+
</sp-overlay>
|
|
124
|
+
<sp-overlay
|
|
125
|
+
id="longpress-overlay"
|
|
126
|
+
?disabled=${this.disabled || !this.longpressContent.length}
|
|
127
|
+
?open=${this.open === "longpress" && !!this.longpressContent.length}
|
|
128
|
+
.offset=${this.offset}
|
|
129
|
+
.placement=${this.longpressPlacement || this.placement}
|
|
130
|
+
.triggerElement=${this.targetContent[0]}
|
|
131
|
+
.triggerInteraction=${"longpress"}
|
|
132
|
+
.type=${"auto"}
|
|
133
|
+
@beforetoggle=${this.handleBeforetoggle}
|
|
134
|
+
>
|
|
135
|
+
<slot
|
|
136
|
+
name="longpress-content"
|
|
137
|
+
@slotchange=${this.handleLongpressContent}
|
|
138
|
+
></slot>
|
|
139
|
+
<slot name="longpress-describedby-descriptor"></slot>
|
|
140
|
+
</sp-overlay>
|
|
141
|
+
<sp-overlay
|
|
142
|
+
id="hover-overlay"
|
|
143
|
+
?disabled=${this.disabled || !this.hoverContent.length || !!this.open && this.open !== "hover"}
|
|
144
|
+
?open=${this.open === "hover" && !!this.hoverContent.length}
|
|
145
|
+
.offset=${this.offset}
|
|
146
|
+
.placement=${this.hoverPlacement || this.placement}
|
|
147
|
+
.triggerElement=${this.targetContent[0]}
|
|
148
|
+
.triggerInteraction=${"hover"}
|
|
149
|
+
.type=${"hint"}
|
|
150
|
+
@beforetoggle=${this.handleBeforetoggle}
|
|
151
|
+
>
|
|
152
|
+
<slot
|
|
153
|
+
name="hover-content"
|
|
154
|
+
@slotchange=${this.handleHoverContent}
|
|
155
|
+
></slot>
|
|
156
|
+
</sp-overlay>
|
|
82
157
|
<slot name=${this._longpressId}></slot>
|
|
83
158
|
</div>
|
|
84
159
|
`;
|
|
@@ -86,13 +161,10 @@ const _OverlayTrigger = class extends SpectrumElement {
|
|
|
86
161
|
updated(changes) {
|
|
87
162
|
super.updated(changes);
|
|
88
163
|
if (this.disabled && changes.has("disabled")) {
|
|
89
|
-
this.
|
|
164
|
+
this.open = void 0;
|
|
90
165
|
return;
|
|
91
166
|
}
|
|
92
|
-
if (changes.has("
|
|
93
|
-
this.manageOpen();
|
|
94
|
-
}
|
|
95
|
-
if (changes.has("hasLongpressContent")) {
|
|
167
|
+
if (changes.has("hasLongpressContent") && typeof changes.get("hasLongpressContent") !== "undefined") {
|
|
96
168
|
this.manageLongpressDescriptor();
|
|
97
169
|
}
|
|
98
170
|
}
|
|
@@ -127,219 +199,16 @@ const _OverlayTrigger = class extends SpectrumElement {
|
|
|
127
199
|
trigger.removeAttribute("aria-describedby");
|
|
128
200
|
}
|
|
129
201
|
}
|
|
130
|
-
closeAllOverlays() {
|
|
131
|
-
if (this.abortOverlay)
|
|
132
|
-
this.abortOverlay(true);
|
|
133
|
-
[
|
|
134
|
-
"closeClickOverlay",
|
|
135
|
-
"closeHoverOverlay",
|
|
136
|
-
"closeLongpressOverlay"
|
|
137
|
-
].forEach(async (name) => {
|
|
138
|
-
const canClose = this[name];
|
|
139
|
-
if (canClose == null)
|
|
140
|
-
return;
|
|
141
|
-
delete this[name];
|
|
142
|
-
(await canClose)();
|
|
143
|
-
});
|
|
144
|
-
this.overlaidContent = void 0;
|
|
145
|
-
}
|
|
146
|
-
manageOpen() {
|
|
147
|
-
var _a;
|
|
148
|
-
const openHandlers = {
|
|
149
|
-
click: () => this.onTriggerClick(),
|
|
150
|
-
hover: () => this.onTriggerMouseEnter(),
|
|
151
|
-
longpress: () => this.onTriggerLongpress(),
|
|
152
|
-
none: () => this.closeAllOverlays()
|
|
153
|
-
};
|
|
154
|
-
openHandlers[(_a = this.open) != null ? _a : "none"]();
|
|
155
|
-
}
|
|
156
|
-
async openOverlay(target, interaction, content, options) {
|
|
157
|
-
this.openStatePromise = new Promise(
|
|
158
|
-
(res) => this.openStateResolver = res
|
|
159
|
-
);
|
|
160
|
-
this.addEventListener(
|
|
161
|
-
"sp-opened",
|
|
162
|
-
() => {
|
|
163
|
-
this.openStateResolver();
|
|
164
|
-
},
|
|
165
|
-
{ once: true }
|
|
166
|
-
);
|
|
167
|
-
this.overlaidContent = content;
|
|
168
|
-
return _OverlayTrigger.openOverlay(
|
|
169
|
-
target,
|
|
170
|
-
interaction,
|
|
171
|
-
content,
|
|
172
|
-
options
|
|
173
|
-
);
|
|
174
|
-
}
|
|
175
|
-
get overlayOptions() {
|
|
176
|
-
return {
|
|
177
|
-
offset: this.offset,
|
|
178
|
-
placement: this.placement,
|
|
179
|
-
receivesFocus: !this.type || this.type === "inline" || this.open === "hover" ? void 0 : "auto"
|
|
180
|
-
};
|
|
181
|
-
}
|
|
182
|
-
onTrigger(event) {
|
|
183
|
-
const mouseIsEnteringHoverContent = event.type === "mouseleave" && this.open === "hover" && event.relatedTarget === this.overlaidContent;
|
|
184
|
-
if (mouseIsEnteringHoverContent && this.overlaidContent) {
|
|
185
|
-
this.overlaidContent.addEventListener(
|
|
186
|
-
"mouseleave",
|
|
187
|
-
(event2) => {
|
|
188
|
-
const mouseIsEnteringTrigger = event2.relatedTarget === this.targetContent;
|
|
189
|
-
if (mouseIsEnteringTrigger) {
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
this.onTrigger(
|
|
193
|
-
event2
|
|
194
|
-
);
|
|
195
|
-
},
|
|
196
|
-
{ once: true }
|
|
197
|
-
);
|
|
198
|
-
return;
|
|
199
|
-
}
|
|
200
|
-
if (this.disabled)
|
|
201
|
-
return;
|
|
202
|
-
switch (event.type) {
|
|
203
|
-
case "mouseenter":
|
|
204
|
-
case "focusin":
|
|
205
|
-
if (!this.open && this.hoverContent) {
|
|
206
|
-
this.open = "hover";
|
|
207
|
-
}
|
|
208
|
-
return;
|
|
209
|
-
case "mouseleave":
|
|
210
|
-
case "focusout":
|
|
211
|
-
if (this.open === "hover") {
|
|
212
|
-
this.handleClose();
|
|
213
|
-
}
|
|
214
|
-
return;
|
|
215
|
-
case "click":
|
|
216
|
-
if (this.clickContent) {
|
|
217
|
-
this.open = event.type;
|
|
218
|
-
}
|
|
219
|
-
return;
|
|
220
|
-
case "longpress":
|
|
221
|
-
if (this.longpressContent) {
|
|
222
|
-
this._longpressEvent = event;
|
|
223
|
-
this.open = event.type;
|
|
224
|
-
}
|
|
225
|
-
return;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
prepareToFocusOverlayContent(overlayContent) {
|
|
229
|
-
if (this.type !== "modal") {
|
|
230
|
-
return;
|
|
231
|
-
}
|
|
232
|
-
const firstFocusable = firstFocusableIn(overlayContent);
|
|
233
|
-
if (!firstFocusable) {
|
|
234
|
-
overlayContent.tabIndex = 0;
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
async onTriggerClick() {
|
|
238
|
-
if (!this.targetContent || !this.clickContent || this.closeClickOverlay) {
|
|
239
|
-
return;
|
|
240
|
-
}
|
|
241
|
-
const { targetContent, clickContent } = this;
|
|
242
|
-
this.closeAllOverlays();
|
|
243
|
-
this.prepareToFocusOverlayContent(clickContent);
|
|
244
|
-
if (true) {
|
|
245
|
-
window.__swc.ignoreWarningLevels.deprecation = true;
|
|
246
|
-
}
|
|
247
|
-
this.closeClickOverlay = this.openOverlay(
|
|
248
|
-
targetContent,
|
|
249
|
-
this.type ? this.type : "click",
|
|
250
|
-
clickContent,
|
|
251
|
-
this.overlayOptions
|
|
252
|
-
);
|
|
253
|
-
if (true) {
|
|
254
|
-
window.__swc.ignoreWarningLevels.deprecation = false;
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
async onTriggerLongpress() {
|
|
258
|
-
var _a, _b;
|
|
259
|
-
if (!this.targetContent || !this.longpressContent || this.closeLongpressOverlay) {
|
|
260
|
-
return;
|
|
261
|
-
}
|
|
262
|
-
const { targetContent, longpressContent } = this;
|
|
263
|
-
this.closeAllOverlays();
|
|
264
|
-
this.prepareToFocusOverlayContent(longpressContent);
|
|
265
|
-
const notImmediatelyClosable = ((_b = (_a = this._longpressEvent) == null ? void 0 : _a.detail) == null ? void 0 : _b.source) !== "keyboard";
|
|
266
|
-
if (true) {
|
|
267
|
-
window.__swc.ignoreWarningLevels.deprecation = true;
|
|
268
|
-
}
|
|
269
|
-
this.closeLongpressOverlay = this.openOverlay(
|
|
270
|
-
targetContent,
|
|
271
|
-
this.type ? this.type : "longpress",
|
|
272
|
-
longpressContent,
|
|
273
|
-
{
|
|
274
|
-
...this.overlayOptions,
|
|
275
|
-
receivesFocus: "auto",
|
|
276
|
-
notImmediatelyClosable
|
|
277
|
-
}
|
|
278
|
-
);
|
|
279
|
-
if (true) {
|
|
280
|
-
window.__swc.ignoreWarningLevels.deprecation = false;
|
|
281
|
-
}
|
|
282
|
-
this._longpressEvent = void 0;
|
|
283
|
-
}
|
|
284
|
-
async onTriggerMouseEnter() {
|
|
285
|
-
if (!this.targetContent || !this.hoverContent || this.closeHoverOverlay) {
|
|
286
|
-
return;
|
|
287
|
-
}
|
|
288
|
-
const abortPromise = new Promise((res) => {
|
|
289
|
-
this.abortOverlay = res;
|
|
290
|
-
});
|
|
291
|
-
const { targetContent, hoverContent } = this;
|
|
292
|
-
if (true) {
|
|
293
|
-
window.__swc.ignoreWarningLevels.deprecation = true;
|
|
294
|
-
}
|
|
295
|
-
this.closeHoverOverlay = this.openOverlay(
|
|
296
|
-
targetContent,
|
|
297
|
-
"hover",
|
|
298
|
-
hoverContent,
|
|
299
|
-
{
|
|
300
|
-
abortPromise,
|
|
301
|
-
...this.overlayOptions
|
|
302
|
-
}
|
|
303
|
-
);
|
|
304
|
-
if (true) {
|
|
305
|
-
window.__swc.ignoreWarningLevels.deprecation = false;
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
onClickSlotChange(event) {
|
|
309
|
-
this.clickContent = this.extractSlotContentFromEvent(event);
|
|
310
|
-
this.manageOpen();
|
|
311
|
-
}
|
|
312
|
-
onLongpressSlotChange(event) {
|
|
313
|
-
this.longpressContent = this.extractSlotContentFromEvent(event);
|
|
314
|
-
this.hasLongpressContent = !!this.longpressContent || !!this.closeLongpressOverlay;
|
|
315
|
-
this.manageOpen();
|
|
316
|
-
}
|
|
317
|
-
onHoverSlotChange(event) {
|
|
318
|
-
this.hoverContent = this.extractSlotContentFromEvent(event);
|
|
319
|
-
this.manageOpen();
|
|
320
|
-
}
|
|
321
|
-
onTargetSlotChange(event) {
|
|
322
|
-
this.targetContent = this.extractSlotContentFromEvent(event);
|
|
323
|
-
}
|
|
324
|
-
extractSlotContentFromEvent(event) {
|
|
325
|
-
const slot = event.target;
|
|
326
|
-
const nodes = slot.assignedNodes({ flatten: true });
|
|
327
|
-
return nodes.find((node) => node instanceof HTMLElement);
|
|
328
|
-
}
|
|
329
202
|
async getUpdateComplete() {
|
|
330
203
|
const complete = await super.getUpdateComplete();
|
|
331
|
-
await this.openStatePromise;
|
|
332
204
|
return complete;
|
|
333
205
|
}
|
|
334
|
-
|
|
335
|
-
this.
|
|
336
|
-
|
|
206
|
+
willUpdate() {
|
|
207
|
+
if (this.placement === "none") {
|
|
208
|
+
this.placement = void 0;
|
|
209
|
+
}
|
|
337
210
|
}
|
|
338
|
-
}
|
|
339
|
-
export let OverlayTrigger = _OverlayTrigger;
|
|
340
|
-
OverlayTrigger.openOverlay = async (target, interaction, content, options) => {
|
|
341
|
-
return openOverlay(target, interaction, content, options);
|
|
342
|
-
};
|
|
211
|
+
}
|
|
343
212
|
__decorateClass([
|
|
344
213
|
property({ reflect: true })
|
|
345
214
|
], OverlayTrigger.prototype, "placement", 2);
|
|
@@ -347,7 +216,7 @@ __decorateClass([
|
|
|
347
216
|
property()
|
|
348
217
|
], OverlayTrigger.prototype, "type", 2);
|
|
349
218
|
__decorateClass([
|
|
350
|
-
property({ type: Number
|
|
219
|
+
property({ type: Number })
|
|
351
220
|
], OverlayTrigger.prototype, "offset", 2);
|
|
352
221
|
__decorateClass([
|
|
353
222
|
property({ reflect: true })
|
|
@@ -358,4 +227,25 @@ __decorateClass([
|
|
|
358
227
|
__decorateClass([
|
|
359
228
|
state()
|
|
360
229
|
], OverlayTrigger.prototype, "hasLongpressContent", 2);
|
|
230
|
+
__decorateClass([
|
|
231
|
+
state()
|
|
232
|
+
], OverlayTrigger.prototype, "clickContent", 2);
|
|
233
|
+
__decorateClass([
|
|
234
|
+
state()
|
|
235
|
+
], OverlayTrigger.prototype, "longpressContent", 2);
|
|
236
|
+
__decorateClass([
|
|
237
|
+
state()
|
|
238
|
+
], OverlayTrigger.prototype, "hoverContent", 2);
|
|
239
|
+
__decorateClass([
|
|
240
|
+
state()
|
|
241
|
+
], OverlayTrigger.prototype, "targetContent", 2);
|
|
242
|
+
__decorateClass([
|
|
243
|
+
query("#click-overlay", true)
|
|
244
|
+
], OverlayTrigger.prototype, "clickOverlayElement", 2);
|
|
245
|
+
__decorateClass([
|
|
246
|
+
query("#longpress-overlay", true)
|
|
247
|
+
], OverlayTrigger.prototype, "longpressOverlayElement", 2);
|
|
248
|
+
__decorateClass([
|
|
249
|
+
query("#hover-overlay", true)
|
|
250
|
+
], OverlayTrigger.prototype, "hoverOverlayElement", 2);
|
|
361
251
|
//# sourceMappingURL=OverlayTrigger.dev.js.map
|