@spectrum-web-components/overlay 0.13.0 → 0.13.3-express.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/custom-elements.json +28 -9
  2. package/package.json +7 -7
  3. package/src/ActiveOverlay.d.ts +2 -8
  4. package/src/ActiveOverlay.js +2 -1
  5. package/src/ActiveOverlay.js.map +1 -1
  6. package/src/OverlayTrigger.js +4 -7
  7. package/src/OverlayTrigger.js.map +1 -1
  8. package/src/active-overlay.css.js +2 -2
  9. package/src/active-overlay.css.js.map +1 -1
  10. package/src/overlay-stack.d.ts +2 -0
  11. package/src/overlay-stack.js +33 -24
  12. package/src/overlay-stack.js.map +1 -1
  13. package/src/overlay-trigger.css.js +1 -1
  14. package/src/overlay-trigger.css.js.map +1 -1
  15. package/src/overlay.js +1 -0
  16. package/src/overlay.js.map +1 -1
  17. package/stories/overlay-story-components.js +1 -1
  18. package/stories/overlay-story-components.js.map +1 -1
  19. package/stories/overlay.stories.js +1 -1
  20. package/stories/overlay.stories.js.map +1 -1
  21. package/test/overlay-lifecycle.test.js +0 -80
  22. package/test/overlay-lifecycle.test.js.map +0 -1
  23. package/test/overlay-timer.test.js +0 -129
  24. package/test/overlay-timer.test.js.map +0 -1
  25. package/test/overlay-trigger-click.test.js +0 -76
  26. package/test/overlay-trigger-click.test.js.map +0 -1
  27. package/test/overlay-trigger-hover-click.test.js +0 -89
  28. package/test/overlay-trigger-hover-click.test.js.map +0 -1
  29. package/test/overlay-trigger-hover.test.js +0 -112
  30. package/test/overlay-trigger-hover.test.js.map +0 -1
  31. package/test/overlay-trigger-longpress.test.js +0 -112
  32. package/test/overlay-trigger-longpress.test.js.map +0 -1
  33. package/test/overlay-trigger-sync.test.js +0 -555
  34. package/test/overlay-trigger-sync.test.js.map +0 -1
  35. package/test/overlay-trigger.test.js +0 -555
  36. package/test/overlay-trigger.test.js.map +0 -1
  37. package/test/overlay.test-vrt.js +0 -15
  38. package/test/overlay.test-vrt.js.map +0 -1
  39. package/test/overlay.test.js +0 -505
  40. package/test/overlay.test.js.map +0 -1
@@ -32,12 +32,6 @@
32
32
  }
33
33
  ]
34
34
  },
35
- {
36
- "kind": "javascript-module",
37
- "path": "sync/overlay-trigger.ts",
38
- "declarations": [],
39
- "exports": []
40
- },
41
35
  {
42
36
  "kind": "javascript-module",
43
37
  "path": "src/ActiveOverlay.ts",
@@ -132,7 +126,7 @@
132
126
  "kind": "field",
133
127
  "name": "theme",
134
128
  "type": {
135
- "text": "{\n color?: Color;\n scale?: Scale;\n lang?: string;\n }"
129
+ "text": "{\n color?: Color;\n scale?: Scale;\n lang?: string;\n theme?: Flavor;\n }"
136
130
  },
137
131
  "privacy": "public",
138
132
  "default": "{}"
@@ -1119,7 +1113,7 @@
1119
1113
  {
1120
1114
  "kind": "variable",
1121
1115
  "name": "styles",
1122
- "default": "css`\n@keyframes sp-overlay-fade-in{0%{opacity:0;transform:var(--sp-overlay-from)}to{opacity:100%;transform:translate(0)}}@keyframes sp-overlay-fade-out{0%{opacity:100%;transform:translate(0)}to{opacity:0;transform:var(--sp-overlay-from)}}:host{display:inline-block;left:0;pointer-events:none;position:absolute;top:0;z-index:1000}:host(:focus){outline:none}#contents,sp-theme{height:100%}#contents{animation-duration:var(--spectrum-global-animation-duration-200,.16s);animation-timing-function:var(\n--spectrum-global-animation-ease-out,ease-out\n);display:inline-block;opacity:100%;pointer-events:none;visibility:visible}:host([data-popper-placement*=top]) #contents{--sp-overlay-from:translateY(var(--spectrum-global-dimension-size-75))}:host([data-popper-placement*=right]) #contents{--sp-overlay-from:translateX(calc(-1*var(--spectrum-global-dimension-size-75)))}:host([data-popper-placement*=bottom]) #contents{--sp-overlay-from:translateY(calc(-1*var(--spectrum-global-dimension-size-75)))}:host([data-popper-placement*=left]) #contents{--sp-overlay-from:translateX(var(--spectrum-global-dimension-size-75))}:host([animating]) ::slotted(*){pointer-events:none}:host(:not([animating])) ::slotted(*){pointer-events:auto}#contents ::slotted(*){position:relative}\n`"
1116
+ "default": "css`\n@keyframes sp-overlay-fade-in{0%{opacity:0;transform:var(--sp-overlay-from)}to{opacity:1;transform:translate(0)}}@keyframes sp-overlay-fade-out{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:var(--sp-overlay-from)}}:host{display:inline-block;left:0;pointer-events:none;position:absolute;top:0;z-index:1000}:host(:focus){outline:none}#contents,sp-theme{height:100%}#contents{animation-duration:var(--spectrum-global-animation-duration-200,.16s);animation-timing-function:var(\n--spectrum-global-animation-ease-out,ease-out\n);display:inline-block;opacity:1;pointer-events:none;visibility:visible}:host([data-popper-placement*=top]) #contents{--sp-overlay-from:translateY(var(--spectrum-global-dimension-size-75))}:host([data-popper-placement*=right]) #contents{--sp-overlay-from:translateX(calc(-1*var(--spectrum-global-dimension-size-75)))}:host([data-popper-placement*=bottom]) #contents{--sp-overlay-from:translateY(calc(-1*var(--spectrum-global-dimension-size-75)))}:host([data-popper-placement*=left]) #contents{--sp-overlay-from:translateX(var(--spectrum-global-dimension-size-75))}:host([animating]) ::slotted(*){pointer-events:none}:host(:not([animating])) ::slotted(*){pointer-events:auto}#contents ::slotted(*){position:relative}\n`"
1123
1117
  }
1124
1118
  ],
1125
1119
  "exports": [
@@ -1366,6 +1360,25 @@
1366
1360
  }
1367
1361
  }
1368
1362
  },
1363
+ {
1364
+ "kind": "field",
1365
+ "name": "_bodyMarginsApplied",
1366
+ "type": {
1367
+ "text": "boolean"
1368
+ },
1369
+ "privacy": "private",
1370
+ "default": "false"
1371
+ },
1372
+ {
1373
+ "kind": "method",
1374
+ "name": "applyBodyMargins",
1375
+ "privacy": "private",
1376
+ "return": {
1377
+ "type": {
1378
+ "text": "void"
1379
+ }
1380
+ }
1381
+ },
1369
1382
  {
1370
1383
  "kind": "method",
1371
1384
  "name": "startTabTrapping",
@@ -1815,7 +1828,7 @@
1815
1828
  {
1816
1829
  "kind": "variable",
1817
1830
  "name": "styles",
1818
- "default": "css`\n#trigger{display:contents}:host([disabled]) #trigger{pointer-events:none}#overlay-content{display:none}\n`"
1831
+ "default": "css`\n:host([disabled]) ::slotted([slot=trigger]){pointer-events:none}#overlay-content{display:none}\n`"
1819
1832
  }
1820
1833
  ],
1821
1834
  "exports": [
@@ -2060,6 +2073,12 @@
2060
2073
  }
2061
2074
  }
2062
2075
  ]
2076
+ },
2077
+ {
2078
+ "kind": "javascript-module",
2079
+ "path": "sync/overlay-trigger.ts",
2080
+ "declarations": [],
2081
+ "exports": []
2063
2082
  }
2064
2083
  ]
2065
2084
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spectrum-web-components/overlay",
3
- "version": "0.13.0",
3
+ "version": "0.13.3-express.0+5d9e2a2ca",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -48,11 +48,11 @@
48
48
  "lit-html"
49
49
  ],
50
50
  "dependencies": {
51
- "@popperjs/core": "^2.10.2",
52
- "@spectrum-web-components/action-button": "^0.7.0",
53
- "@spectrum-web-components/base": "^0.5.0",
54
- "@spectrum-web-components/shared": "^0.13.0",
55
- "@spectrum-web-components/theme": "^0.9.0",
51
+ "@popperjs/core": "^2.11.0",
52
+ "@spectrum-web-components/action-button": "^0.7.3-express.0+5d9e2a2ca",
53
+ "@spectrum-web-components/base": "^0.5.2-express.41+5d9e2a2ca",
54
+ "@spectrum-web-components/shared": "^0.13.3-express.0+5d9e2a2ca",
55
+ "@spectrum-web-components/theme": "^0.9.3-express.0+5d9e2a2ca",
56
56
  "popper-max-size-modifier": "^0.2.0",
57
57
  "tslib": "^2.0.0"
58
58
  },
@@ -64,5 +64,5 @@
64
64
  "./sync/overlay-trigger.js",
65
65
  "./stories/overlay-story-components.js"
66
66
  ],
67
- "gitHead": "7ce77352f6894043bceac9ef92b21e5f85420969"
67
+ "gitHead": "5d9e2a2ca93deff51e4b2c7b8354f1127009a4e3"
68
68
  }
@@ -1,5 +1,5 @@
1
1
  import { CSSResultArray, PropertyValues, SpectrumElement, TemplateResult } from '@spectrum-web-components/base';
2
- import { Color, Scale } from '@spectrum-web-components/theme';
2
+ import { Color, Flavor, Scale } from '@spectrum-web-components/theme';
3
3
  import { OverlayOpenDetail, Placement, TriggerInteractions } from './overlay-types.js';
4
4
  import { VirtualTrigger } from './VirtualTrigger.js';
5
5
  export interface PositionResult {
@@ -10,13 +10,6 @@ export interface PositionResult {
10
10
  positionLeft: number;
11
11
  positionTop: number;
12
12
  }
13
- declare global {
14
- interface Document {
15
- fonts?: {
16
- ready: Promise<void>;
17
- };
18
- }
19
- }
20
13
  declare type OverlayStateType = 'idle' | 'active' | 'visible' | 'hiding' | 'dispose' | 'disposed';
21
14
  declare type ContentAnimation = 'sp-overlay-fade-in' | 'sp-overlay-fade-out';
22
15
  /**
@@ -39,6 +32,7 @@ export declare class ActiveOverlay extends SpectrumElement {
39
32
  color?: Color;
40
33
  scale?: Scale;
41
34
  lang?: string;
35
+ theme?: Flavor;
42
36
  };
43
37
  receivesFocus?: 'auto';
44
38
  tabbingAway: boolean;
@@ -347,9 +347,10 @@ export class ActiveOverlay extends SpectrumElement {
347
347
  });
348
348
  }
349
349
  renderTheme(content) {
350
- const { color, scale, lang } = this.theme;
350
+ const { color, scale, lang, theme } = this.theme;
351
351
  return html `
352
352
  <sp-theme
353
+ theme=${ifDefined(theme)}
353
354
  color=${ifDefined(color)}
354
355
  scale=${ifDefined(scale)}
355
356
  lang=${ifDefined(lang)}
@@ -1 +1 @@
1
- {"version":3,"file":"ActiveOverlay.js","sourceRoot":"","sources":["ActiveOverlay.ts"],"names":[],"mappings":"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","sourcesContent":["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n CSSResultArray,\n html,\n PropertyValues,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { ifDefined } from '@spectrum-web-components/base/src/directives.js';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\nimport { reparentChildren } from '@spectrum-web-components/shared';\nimport { firstFocusableIn } from '@spectrum-web-components/shared/src/first-focusable-in.js';\nimport { Color, Scale } from '@spectrum-web-components/theme';\nimport styles from './active-overlay.css.js';\nimport {\n OverlayOpenCloseDetail,\n OverlayOpenDetail,\n Placement,\n TriggerInteractions,\n} from './overlay-types.js';\nimport { applyMaxSize, createPopper, Instance, maxSize } from './popper.js';\nimport { VirtualTrigger } from './VirtualTrigger.js';\n\nexport interface PositionResult {\n arrowOffsetLeft: number;\n arrowOffsetTop: number;\n maxHeight: number;\n placement: string;\n positionLeft: number;\n positionTop: number;\n}\n\ndeclare global {\n interface Document {\n fonts?: {\n ready: Promise<void>;\n };\n }\n}\n\ntype OverlayStateType =\n | 'idle'\n | 'active'\n | 'visible'\n | 'hiding'\n | 'dispose'\n | 'disposed';\ntype ContentAnimation = 'sp-overlay-fade-in' | 'sp-overlay-fade-out';\n\nconst stateMachine: {\n initial: OverlayStateType;\n states: {\n [stateName: string]: {\n on: {\n [transitionName: string]: OverlayStateType;\n };\n };\n };\n} = {\n initial: 'idle',\n states: {\n idle: {\n on: {\n active: 'active',\n },\n },\n active: {\n on: {\n visible: 'visible',\n hiding: 'hiding',\n idle: 'idle',\n },\n },\n visible: {\n on: {\n hiding: 'hiding',\n idle: 'idle',\n },\n },\n hiding: {\n on: {\n dispose: 'dispose',\n },\n },\n dispose: {\n on: {\n disposed: 'disposed',\n },\n },\n disposed: {\n on: {},\n },\n },\n};\n\nconst stateTransition = (\n state?: OverlayStateType,\n event?: string\n): OverlayStateType => {\n if (!state) return stateMachine.initial;\n /* c8 ignore next */\n if (!event) return state;\n return stateMachine.states[state].on[event] || state;\n};\n\nconst parentOverlayOf = (el: Element): ActiveOverlay | null => {\n const closestOverlay = el.closest('active-overlay');\n if (closestOverlay) {\n return closestOverlay;\n }\n const rootNode = el.getRootNode() as ShadowRoot;\n if (rootNode.host) {\n return parentOverlayOf(rootNode.host);\n }\n return null;\n};\n\n/**\n * @element active-overlay\n *\n * @slot - content to display in the overlay\n */\nexport class ActiveOverlay extends SpectrumElement {\n public overlayContent!: HTMLElement;\n public overlayContentTip?: HTMLElement;\n public trigger!: HTMLElement;\n public virtualTrigger?: VirtualTrigger;\n\n private popper?: Instance;\n\n @property()\n public _state = stateTransition();\n public get state(): OverlayStateType {\n return this._state;\n }\n public set state(state: OverlayStateType) {\n const nextState = stateTransition(this.state, state);\n if (nextState === this.state) {\n return;\n }\n this._state = nextState;\n if (\n this.state === 'active' ||\n this.state === 'visible' ||\n this.state === 'hiding'\n ) {\n this.setAttribute('state', this.state);\n } else {\n this.removeAttribute('state');\n }\n }\n\n @property({ reflect: true, type: Boolean })\n public animating = false;\n\n @property({ reflect: true })\n public placement?: Placement;\n @property({ attribute: false })\n public theme: {\n color?: Color;\n scale?: Scale;\n lang?: string;\n } = {};\n @property({ attribute: false })\n public receivesFocus?: 'auto';\n\n public tabbingAway = false;\n private originalPlacement?: Placement;\n private restoreContent?: () => Element[];\n\n /**\n * @prop Used by the popper library to indicate where the overlay was\n * actually rendered. Popper may switch which side an overlay\n * is rendered on to fit it on the screen\n */\n @property({ attribute: 'data-popper-placement' })\n public dataPopperPlacement?: Placement;\n\n public focus(): void {\n const firstFocusable = firstFocusableIn(this);\n if (firstFocusable) {\n firstFocusable.focus();\n /* c8 ignore next 3 */\n } else {\n super.focus();\n }\n this.removeAttribute('tabindex');\n }\n\n private get hasTheme(): boolean {\n return !!this.theme.color || !!this.theme.scale || !!this.theme.lang;\n }\n\n public offset = 6;\n public interaction: TriggerInteractions = 'hover';\n private positionAnimationFrame = 0;\n\n private timeout?: number;\n\n public static get styles(): CSSResultArray {\n return [styles];\n }\n\n public constructor() {\n super();\n this.stealOverlayContentPromise = new Promise(\n (res) => (this.stealOverlayContentResolver = res)\n );\n }\n\n private _modalRoot?: ActiveOverlay;\n\n public get hasModalRoot(): boolean {\n return !!this._modalRoot;\n }\n\n public feature(): void {\n this.tabIndex = -1;\n const parentOverlay = parentOverlayOf(this.trigger);\n const parentIsModal = parentOverlay && parentOverlay.slot === 'open';\n // If an overlay it triggered from within a \"modal\" overlay, it needs to continue\n // to act like one to get treated correctly in regards to tab trapping.\n if (this.interaction === 'modal' || parentIsModal || this._modalRoot) {\n this.slot = 'open';\n // If this isn't a modal root, walk up the overlays to the next modal root\n // and \"feature\" each on of the intervening overlays.\n if (this._modalRoot) {\n parentOverlay?.feature();\n }\n }\n }\n\n public obscure(\n nextOverlayInteraction: TriggerInteractions\n ): ActiveOverlay | undefined {\n if (this.slot && nextOverlayInteraction === 'modal') {\n this.removeAttribute('slot');\n // Obscure upto and including the next modal root.\n if (this.interaction !== 'modal') {\n const parentOverlay = parentOverlayOf(this.trigger);\n this._modalRoot = parentOverlay?.obscure(\n nextOverlayInteraction\n );\n return this._modalRoot;\n }\n return this;\n }\n return undefined;\n }\n\n public firstUpdated(changedProperties: PropertyValues): void {\n super.firstUpdated(changedProperties);\n\n /* c8 ignore next */\n if (!this.overlayContent) return;\n\n this.stealOverlayContent(this.overlayContent);\n\n /* c8 ignore next */\n if (!this.overlayContent || !this.trigger) return;\n\n if (this.placement && this.placement !== 'none') {\n this.popper = createPopper(\n this.virtualTrigger || this.trigger,\n this,\n {\n placement: this.placement,\n modifiers: [\n maxSize,\n applyMaxSize,\n {\n name: 'arrow',\n options: {\n element: this.overlayContentTip,\n },\n },\n {\n name: 'offset',\n options: {\n offset: [0, this.offset],\n },\n },\n ],\n }\n );\n }\n\n this.state = 'active';\n\n document.addEventListener('sp-update-overlays', () => {\n this.updateOverlayPosition();\n this.state = 'visible';\n });\n\n this.feature();\n this.updateOverlayPosition()\n .then(() => this.applyContentAnimation('sp-overlay-fade-in'))\n .then(() => {\n if (this.receivesFocus) {\n this.focus();\n }\n this.trigger.dispatchEvent(\n new CustomEvent<OverlayOpenCloseDetail>('sp-opened', {\n bubbles: true,\n composed: true,\n cancelable: true,\n detail: {\n interaction: this.interaction,\n },\n })\n );\n });\n }\n\n private updateOverlayPopperPlacement(): void {\n /* c8 ignore next */\n const activeWithContent =\n this.state === 'active' && this.overlayContent;\n if (!activeWithContent) return;\n\n if (this.dataPopperPlacement) {\n // Copy this attribute to the actual overlay node so that it can use\n // the attribute for styling shadow DOM elements based on the side\n // that popper has chosen for it\n this.overlayContent.setAttribute(\n 'placement',\n this.dataPopperPlacement\n );\n } else if (this.originalPlacement) {\n this.overlayContent.setAttribute(\n 'placement',\n this.originalPlacement\n );\n } else {\n this.overlayContent.removeAttribute('placement');\n }\n }\n\n public updated(changedProperties: PropertyValues): void {\n if (changedProperties.has('dataPopperPlacement')) {\n this.updateOverlayPopperPlacement();\n }\n }\n\n private open(openDetail: OverlayOpenDetail): void {\n this.extractDetail(openDetail);\n }\n\n private extractDetail(detail: OverlayOpenDetail): void {\n this.overlayContent = detail.content;\n this.overlayContentTip = detail.contentTip;\n this.trigger = detail.trigger;\n this.virtualTrigger = detail.virtualTrigger;\n this.placement = detail.placement;\n this.offset = detail.offset;\n this.interaction = detail.interaction;\n this.theme = detail.theme;\n this.receivesFocus = detail.receivesFocus;\n }\n\n public dispose(): void {\n /* c8 ignore next */\n if (this.state !== 'dispose') return;\n\n /* c8 ignore next 4 */\n if (this.timeout) {\n clearTimeout(this.timeout);\n delete this.timeout;\n }\n\n if (this.popper) {\n this.popper.destroy();\n this.popper = undefined;\n }\n this.trigger.removeEventListener(\n 'keydown',\n this.handleInlineTriggerKeydown\n );\n\n this.returnOverlayContent();\n this.state = 'disposed';\n\n if (this.willNotifyClosed) {\n this.overlayContent.dispatchEvent(new Event('sp-overlay-closed'));\n this.willNotifyClosed = false;\n }\n }\n\n private stealOverlayContent(element: HTMLElement): void {\n this.originalPlacement = element.getAttribute('placement') as Placement;\n this.restoreContent = reparentChildren([element], this, (el) => {\n const slotName = el.slot;\n el.removeAttribute('slot');\n return (el) => {\n el.slot = slotName;\n };\n });\n this.stealOverlayContentResolver();\n }\n\n private willNotifyClosed = false;\n\n private returnOverlayContent(): void {\n /* c8 ignore next */\n if (!this.restoreContent) return;\n\n const [element] = this.restoreContent();\n this.restoreContent = undefined;\n this.willNotifyClosed = true;\n\n if (this.originalPlacement) {\n element.setAttribute('placement', this.originalPlacement);\n delete this.originalPlacement;\n }\n }\n\n public async updateOverlayPosition(): Promise<void> {\n await (document.fonts ? document.fonts.ready : Promise.resolve());\n if (this.popper) {\n await this.popper.update();\n }\n }\n\n public async hide(animated = true): Promise<void> {\n this.state = 'hiding';\n if (animated) {\n await this.applyContentAnimation('sp-overlay-fade-out');\n }\n this.state = 'dispose';\n }\n\n private schedulePositionUpdate(): void {\n // Edge needs a little time to update the DOM before computing the layout\n cancelAnimationFrame(this.positionAnimationFrame);\n this.positionAnimationFrame = requestAnimationFrame(() =>\n this.updateOverlayPosition()\n );\n }\n\n private onSlotChange(): void {\n this.schedulePositionUpdate();\n }\n\n public handleInlineTriggerKeydown = (event: KeyboardEvent): void => {\n const { code, shiftKey } = event;\n /* c8 ignore next */\n if (code !== 'Tab') return;\n if (shiftKey) {\n this.tabbingAway = true;\n this.dispatchEvent(new Event('close'));\n return;\n }\n\n event.stopPropagation();\n event.preventDefault();\n this.focus();\n };\n\n public connectedCallback(): void {\n super.connectedCallback();\n this.schedulePositionUpdate();\n }\n\n public applyContentAnimation(\n animation: ContentAnimation\n ): Promise<boolean> {\n return new Promise((resolve): void => {\n const contents = this.shadowRoot.querySelector(\n '#contents'\n ) as HTMLElement;\n const doneHandler = (event: AnimationEvent): void => {\n if (animation !== event.animationName) return;\n contents.removeEventListener('animationend', doneHandler);\n contents.removeEventListener('animationcancel', doneHandler);\n this.animating = false;\n resolve(event.type === 'animationcancel');\n };\n contents.addEventListener('animationend', doneHandler);\n contents.addEventListener('animationcancel', doneHandler);\n\n contents.style.animationName = animation;\n this.animating = true;\n });\n }\n\n public renderTheme(content: TemplateResult): TemplateResult {\n const { color, scale, lang } = this.theme;\n return html`\n <sp-theme\n color=${ifDefined(color)}\n scale=${ifDefined(scale)}\n lang=${ifDefined(lang)}\n part=\"theme\"\n >\n ${content}\n </sp-theme>\n `;\n }\n\n public render(): TemplateResult {\n const content = html`\n <div id=\"contents\">\n <slot @slotchange=${this.onSlotChange}></slot>\n </div>\n `;\n return this.hasTheme ? this.renderTheme(content) : content;\n }\n\n public static create(details: OverlayOpenDetail): ActiveOverlay {\n const overlay = new ActiveOverlay();\n\n if (details.content) {\n overlay.open(details);\n }\n\n return overlay;\n }\n\n private stealOverlayContentPromise = Promise.resolve();\n private stealOverlayContentResolver!: () => void;\n\n protected async getUpdateComplete(): Promise<boolean> {\n const complete = (await super.getUpdateComplete()) as boolean;\n await this.stealOverlayContentPromise;\n return complete;\n }\n}\n"]}
1
+ {"version":3,"file":"ActiveOverlay.js","sourceRoot":"","sources":["ActiveOverlay.ts"],"names":[],"mappings":"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","sourcesContent":["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n CSSResultArray,\n html,\n PropertyValues,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { ifDefined } from '@spectrum-web-components/base/src/directives.js';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\nimport { reparentChildren } from '@spectrum-web-components/shared';\nimport { firstFocusableIn } from '@spectrum-web-components/shared/src/first-focusable-in.js';\nimport { Color, Flavor, Scale } from '@spectrum-web-components/theme';\nimport styles from './active-overlay.css.js';\nimport {\n OverlayOpenCloseDetail,\n OverlayOpenDetail,\n Placement,\n TriggerInteractions,\n} from './overlay-types.js';\nimport { applyMaxSize, createPopper, Instance, maxSize } from './popper.js';\nimport { VirtualTrigger } from './VirtualTrigger.js';\n\nexport interface PositionResult {\n arrowOffsetLeft: number;\n arrowOffsetTop: number;\n maxHeight: number;\n placement: string;\n positionLeft: number;\n positionTop: number;\n}\n\ntype OverlayStateType =\n | 'idle'\n | 'active'\n | 'visible'\n | 'hiding'\n | 'dispose'\n | 'disposed';\ntype ContentAnimation = 'sp-overlay-fade-in' | 'sp-overlay-fade-out';\n\nconst stateMachine: {\n initial: OverlayStateType;\n states: {\n [stateName: string]: {\n on: {\n [transitionName: string]: OverlayStateType;\n };\n };\n };\n} = {\n initial: 'idle',\n states: {\n idle: {\n on: {\n active: 'active',\n },\n },\n active: {\n on: {\n visible: 'visible',\n hiding: 'hiding',\n idle: 'idle',\n },\n },\n visible: {\n on: {\n hiding: 'hiding',\n idle: 'idle',\n },\n },\n hiding: {\n on: {\n dispose: 'dispose',\n },\n },\n dispose: {\n on: {\n disposed: 'disposed',\n },\n },\n disposed: {\n on: {},\n },\n },\n};\n\nconst stateTransition = (\n state?: OverlayStateType,\n event?: string\n): OverlayStateType => {\n if (!state) return stateMachine.initial;\n /* c8 ignore next */\n if (!event) return state;\n return stateMachine.states[state].on[event] || state;\n};\n\nconst parentOverlayOf = (el: Element): ActiveOverlay | null => {\n const closestOverlay = el.closest('active-overlay');\n if (closestOverlay) {\n return closestOverlay;\n }\n const rootNode = el.getRootNode() as ShadowRoot;\n if (rootNode.host) {\n return parentOverlayOf(rootNode.host);\n }\n return null;\n};\n\n/**\n * @element active-overlay\n *\n * @slot - content to display in the overlay\n */\nexport class ActiveOverlay extends SpectrumElement {\n public overlayContent!: HTMLElement;\n public overlayContentTip?: HTMLElement;\n public trigger!: HTMLElement;\n public virtualTrigger?: VirtualTrigger;\n\n private popper?: Instance;\n\n @property()\n public _state = stateTransition();\n public get state(): OverlayStateType {\n return this._state;\n }\n public set state(state: OverlayStateType) {\n const nextState = stateTransition(this.state, state);\n if (nextState === this.state) {\n return;\n }\n this._state = nextState;\n if (\n this.state === 'active' ||\n this.state === 'visible' ||\n this.state === 'hiding'\n ) {\n this.setAttribute('state', this.state);\n } else {\n this.removeAttribute('state');\n }\n }\n\n @property({ reflect: true, type: Boolean })\n public animating = false;\n\n @property({ reflect: true })\n public placement?: Placement;\n @property({ attribute: false })\n public theme: {\n color?: Color;\n scale?: Scale;\n lang?: string;\n theme?: Flavor;\n } = {};\n @property({ attribute: false })\n public receivesFocus?: 'auto';\n\n public tabbingAway = false;\n private originalPlacement?: Placement;\n private restoreContent?: () => Element[];\n\n /**\n * @prop Used by the popper library to indicate where the overlay was\n * actually rendered. Popper may switch which side an overlay\n * is rendered on to fit it on the screen\n */\n @property({ attribute: 'data-popper-placement' })\n public dataPopperPlacement?: Placement;\n\n public focus(): void {\n const firstFocusable = firstFocusableIn(this);\n if (firstFocusable) {\n firstFocusable.focus();\n /* c8 ignore next 3 */\n } else {\n super.focus();\n }\n this.removeAttribute('tabindex');\n }\n\n private get hasTheme(): boolean {\n return !!this.theme.color || !!this.theme.scale || !!this.theme.lang;\n }\n\n public offset = 6;\n public interaction: TriggerInteractions = 'hover';\n private positionAnimationFrame = 0;\n\n private timeout?: number;\n\n public static get styles(): CSSResultArray {\n return [styles];\n }\n\n public constructor() {\n super();\n this.stealOverlayContentPromise = new Promise(\n (res) => (this.stealOverlayContentResolver = res)\n );\n }\n\n private _modalRoot?: ActiveOverlay;\n\n public get hasModalRoot(): boolean {\n return !!this._modalRoot;\n }\n\n public feature(): void {\n this.tabIndex = -1;\n const parentOverlay = parentOverlayOf(this.trigger);\n const parentIsModal = parentOverlay && parentOverlay.slot === 'open';\n // If an overlay it triggered from within a \"modal\" overlay, it needs to continue\n // to act like one to get treated correctly in regards to tab trapping.\n if (this.interaction === 'modal' || parentIsModal || this._modalRoot) {\n this.slot = 'open';\n // If this isn't a modal root, walk up the overlays to the next modal root\n // and \"feature\" each on of the intervening overlays.\n if (this._modalRoot) {\n parentOverlay?.feature();\n }\n }\n }\n\n public obscure(\n nextOverlayInteraction: TriggerInteractions\n ): ActiveOverlay | undefined {\n if (this.slot && nextOverlayInteraction === 'modal') {\n this.removeAttribute('slot');\n // Obscure upto and including the next modal root.\n if (this.interaction !== 'modal') {\n const parentOverlay = parentOverlayOf(this.trigger);\n this._modalRoot = parentOverlay?.obscure(\n nextOverlayInteraction\n );\n return this._modalRoot;\n }\n return this;\n }\n return undefined;\n }\n\n public firstUpdated(changedProperties: PropertyValues): void {\n super.firstUpdated(changedProperties);\n\n /* c8 ignore next */\n if (!this.overlayContent) return;\n\n this.stealOverlayContent(this.overlayContent);\n\n /* c8 ignore next */\n if (!this.overlayContent || !this.trigger) return;\n\n if (this.placement && this.placement !== 'none') {\n this.popper = createPopper(\n this.virtualTrigger || this.trigger,\n this,\n {\n placement: this.placement,\n modifiers: [\n maxSize,\n applyMaxSize,\n {\n name: 'arrow',\n options: {\n element: this.overlayContentTip,\n },\n },\n {\n name: 'offset',\n options: {\n offset: [0, this.offset],\n },\n },\n ],\n }\n );\n }\n\n this.state = 'active';\n\n document.addEventListener('sp-update-overlays', () => {\n this.updateOverlayPosition();\n this.state = 'visible';\n });\n\n this.feature();\n this.updateOverlayPosition()\n .then(() => this.applyContentAnimation('sp-overlay-fade-in'))\n .then(() => {\n if (this.receivesFocus) {\n this.focus();\n }\n this.trigger.dispatchEvent(\n new CustomEvent<OverlayOpenCloseDetail>('sp-opened', {\n bubbles: true,\n composed: true,\n cancelable: true,\n detail: {\n interaction: this.interaction,\n },\n })\n );\n });\n }\n\n private updateOverlayPopperPlacement(): void {\n /* c8 ignore next */\n const activeWithContent =\n this.state === 'active' && this.overlayContent;\n if (!activeWithContent) return;\n\n if (this.dataPopperPlacement) {\n // Copy this attribute to the actual overlay node so that it can use\n // the attribute for styling shadow DOM elements based on the side\n // that popper has chosen for it\n this.overlayContent.setAttribute(\n 'placement',\n this.dataPopperPlacement\n );\n } else if (this.originalPlacement) {\n this.overlayContent.setAttribute(\n 'placement',\n this.originalPlacement\n );\n } else {\n this.overlayContent.removeAttribute('placement');\n }\n }\n\n public updated(changedProperties: PropertyValues): void {\n if (changedProperties.has('dataPopperPlacement')) {\n this.updateOverlayPopperPlacement();\n }\n }\n\n private open(openDetail: OverlayOpenDetail): void {\n this.extractDetail(openDetail);\n }\n\n private extractDetail(detail: OverlayOpenDetail): void {\n this.overlayContent = detail.content;\n this.overlayContentTip = detail.contentTip;\n this.trigger = detail.trigger;\n this.virtualTrigger = detail.virtualTrigger;\n this.placement = detail.placement;\n this.offset = detail.offset;\n this.interaction = detail.interaction;\n this.theme = detail.theme;\n this.receivesFocus = detail.receivesFocus;\n }\n\n public dispose(): void {\n /* c8 ignore next */\n if (this.state !== 'dispose') return;\n\n /* c8 ignore next 4 */\n if (this.timeout) {\n clearTimeout(this.timeout);\n delete this.timeout;\n }\n\n if (this.popper) {\n this.popper.destroy();\n this.popper = undefined;\n }\n this.trigger.removeEventListener(\n 'keydown',\n this.handleInlineTriggerKeydown\n );\n\n this.returnOverlayContent();\n this.state = 'disposed';\n\n if (this.willNotifyClosed) {\n this.overlayContent.dispatchEvent(new Event('sp-overlay-closed'));\n this.willNotifyClosed = false;\n }\n }\n\n private stealOverlayContent(element: HTMLElement): void {\n this.originalPlacement = element.getAttribute('placement') as Placement;\n this.restoreContent = reparentChildren([element], this, (el) => {\n const slotName = el.slot;\n el.removeAttribute('slot');\n return (el) => {\n el.slot = slotName;\n };\n });\n this.stealOverlayContentResolver();\n }\n\n private willNotifyClosed = false;\n\n private returnOverlayContent(): void {\n /* c8 ignore next */\n if (!this.restoreContent) return;\n\n const [element] = this.restoreContent();\n this.restoreContent = undefined;\n this.willNotifyClosed = true;\n\n if (this.originalPlacement) {\n element.setAttribute('placement', this.originalPlacement);\n delete this.originalPlacement;\n }\n }\n\n public async updateOverlayPosition(): Promise<void> {\n await (document.fonts ? document.fonts.ready : Promise.resolve());\n if (this.popper) {\n await this.popper.update();\n }\n }\n\n public async hide(animated = true): Promise<void> {\n this.state = 'hiding';\n if (animated) {\n await this.applyContentAnimation('sp-overlay-fade-out');\n }\n this.state = 'dispose';\n }\n\n private schedulePositionUpdate(): void {\n // Edge needs a little time to update the DOM before computing the layout\n cancelAnimationFrame(this.positionAnimationFrame);\n this.positionAnimationFrame = requestAnimationFrame(() =>\n this.updateOverlayPosition()\n );\n }\n\n private onSlotChange(): void {\n this.schedulePositionUpdate();\n }\n\n public handleInlineTriggerKeydown = (event: KeyboardEvent): void => {\n const { code, shiftKey } = event;\n /* c8 ignore next */\n if (code !== 'Tab') return;\n if (shiftKey) {\n this.tabbingAway = true;\n this.dispatchEvent(new Event('close'));\n return;\n }\n\n event.stopPropagation();\n event.preventDefault();\n this.focus();\n };\n\n public connectedCallback(): void {\n super.connectedCallback();\n this.schedulePositionUpdate();\n }\n\n public applyContentAnimation(\n animation: ContentAnimation\n ): Promise<boolean> {\n return new Promise((resolve): void => {\n const contents = this.shadowRoot.querySelector(\n '#contents'\n ) as HTMLElement;\n const doneHandler = (event: AnimationEvent): void => {\n if (animation !== event.animationName) return;\n contents.removeEventListener('animationend', doneHandler);\n contents.removeEventListener('animationcancel', doneHandler);\n this.animating = false;\n resolve(event.type === 'animationcancel');\n };\n contents.addEventListener('animationend', doneHandler);\n contents.addEventListener('animationcancel', doneHandler);\n\n contents.style.animationName = animation;\n this.animating = true;\n });\n }\n\n public renderTheme(content: TemplateResult): TemplateResult {\n const { color, scale, lang, theme } = this.theme;\n return html`\n <sp-theme\n theme=${ifDefined(theme)}\n color=${ifDefined(color)}\n scale=${ifDefined(scale)}\n lang=${ifDefined(lang)}\n part=\"theme\"\n >\n ${content}\n </sp-theme>\n `;\n }\n\n public render(): TemplateResult {\n const content = html`\n <div id=\"contents\">\n <slot @slotchange=${this.onSlotChange}></slot>\n </div>\n `;\n return this.hasTheme ? this.renderTheme(content) : content;\n }\n\n public static create(details: OverlayOpenDetail): ActiveOverlay {\n const overlay = new ActiveOverlay();\n\n if (details.content) {\n overlay.open(details);\n }\n\n return overlay;\n }\n\n private stealOverlayContentPromise = Promise.resolve();\n private stealOverlayContentResolver!: () => void;\n\n protected async getUpdateComplete(): Promise<boolean> {\n const complete = (await super.getUpdateComplete()) as boolean;\n await this.stealOverlayContentPromise;\n return complete;\n }\n}\n"]}
@@ -57,7 +57,7 @@ export class OverlayTrigger extends LitElement {
57
57
  // Keyboard event availability documented in README.md
58
58
  /* eslint-disable lit-a11y/click-events-have-key-events */
59
59
  return html `
60
- <div
60
+ <slot
61
61
  id="trigger"
62
62
  @click=${this.onTrigger}
63
63
  @longpress=${this.onTrigger}
@@ -66,12 +66,9 @@ export class OverlayTrigger extends LitElement {
66
66
  @focusin=${this.onTrigger}
67
67
  @focusout=${this.onTrigger}
68
68
  @sp-closed=${this.handleClose}
69
- >
70
- <slot
71
- @slotchange=${this.onTargetSlotChange}
72
- name="trigger"
73
- ></slot>
74
- </div>
69
+ @slotchange=${this.onTargetSlotChange}
70
+ name="trigger"
71
+ ></slot>
75
72
  <div id="overlay-content">
76
73
  <slot
77
74
  @slotchange=${this.onClickSlotChange}
@@ -1 +1 @@
1
- {"version":3,"file":"OverlayTrigger.js","sourceRoot":"","sources":["OverlayTrigger.ts"],"names":[],"mappings":"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","sourcesContent":["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n CSSResultArray,\n html,\n LitElement,\n PropertyValues,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\nimport type { LongpressEvent } from '@spectrum-web-components/action-button';\nimport { firstFocusableIn } from '@spectrum-web-components/shared/src/first-focusable-in.js';\n\nimport {\n OverlayOpenCloseDetail,\n OverlayOptions,\n Placement,\n TriggerInteractions,\n} from './overlay-types';\nimport { openOverlay } from './loader.js';\nimport overlayTriggerStyles from './overlay-trigger.css.js';\n\nexport type OverlayContentTypes = 'click' | 'hover' | 'longpress';\n\ntype closeOverlay =\n | 'closeClickOverlay'\n | 'closeHoverOverlay'\n | 'closeLongpressOverlay';\n\n/**\n * @element overlay-trigger\n *\n * @slot trigger - The content that will trigger the various overlays\n * @slot hover-content - The content that will be displayed on hover\n * @slot click-content - The content that will be displayed on click\n * @slot longpress-content - The content that will be displayed on click\n *\n * @fires sp-opened - Announces that the overlay has been opened\n * @fires sp-closed - Announces that the overlay has been closed\n */\nexport class OverlayTrigger extends LitElement {\n private closeClickOverlay?: Promise<() => void>;\n private closeLongpressOverlay?: Promise<() => void>;\n private closeHoverOverlay?: Promise<() => void>;\n\n public static get styles(): CSSResultArray {\n return [overlayTriggerStyles];\n }\n\n /**\n * @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\"}\n * @attr\n */\n @property({ reflect: true })\n public placement: Placement = 'bottom';\n\n @property()\n public type?: Extract<TriggerInteractions, 'inline' | 'modal' | 'replace'>;\n\n @property({ type: Number, reflect: true })\n public offset = 6;\n\n @property({ reflect: true })\n public open?: OverlayContentTypes;\n\n @property({ type: Boolean, reflect: true })\n public disabled = false;\n\n private clickContent?: HTMLElement;\n private longpressContent?: HTMLElement;\n private hoverContent?: HTMLElement;\n private targetContent?: HTMLElement;\n\n private handleClose(event?: CustomEvent<OverlayOpenCloseDetail>): void {\n if (\n event &&\n event.detail.interaction !== this.open &&\n event.detail.interaction !== this.type\n ) {\n return;\n }\n this.removeAttribute('open');\n }\n\n protected render(): TemplateResult {\n // Keyboard event availability documented in README.md\n /* eslint-disable lit-a11y/click-events-have-key-events */\n return html`\n <div\n id=\"trigger\"\n @click=${this.onTrigger}\n @longpress=${this.onTrigger}\n @mouseenter=${this.onTrigger}\n @mouseleave=${this.onTrigger}\n @focusin=${this.onTrigger}\n @focusout=${this.onTrigger}\n @sp-closed=${this.handleClose}\n >\n <slot\n @slotchange=${this.onTargetSlotChange}\n name=\"trigger\"\n ></slot>\n </div>\n <div id=\"overlay-content\">\n <slot\n @slotchange=${this.onClickSlotChange}\n name=\"click-content\"\n ></slot>\n <slot\n @slotchange=${this.onLongpressSlotChange}\n name=\"longpress-content\"\n ></slot>\n <slot\n @slotchange=${this.onHoverSlotChange}\n name=\"hover-content\"\n ></slot>\n </div>\n `;\n /* eslint-enable lit-a11y/click-events-have-key-events */\n }\n\n protected updated(changes: PropertyValues): void {\n super.updated(changes);\n if (this.disabled && changes.has('disabled')) {\n this.closeAllOverlays();\n return;\n }\n if (changes.has('open')) {\n this.manageOpen();\n }\n }\n\n private closeAllOverlays(): void {\n if (this.abortOverlay) this.abortOverlay(true);\n (\n [\n 'closeClickOverlay',\n 'closeHoverOverlay',\n 'closeLongpressOverlay',\n ] as closeOverlay[]\n ).forEach(async (name) => {\n const canClose = this[name] as Promise<() => void>;\n if (canClose == null) return;\n delete this[name];\n (await canClose)();\n });\n }\n\n private manageOpen(): void {\n const openHandlers: Record<OverlayContentTypes | 'none', () => void> = {\n click: () => this.onTriggerClick(),\n hover: () => this.onTriggerMouseEnter(),\n longpress: () => this.onTriggerLongpress(),\n none: () => this.closeAllOverlays(),\n };\n openHandlers[this.open ?? 'none']();\n }\n\n private async openOverlay(\n target: HTMLElement,\n interaction: TriggerInteractions,\n content: HTMLElement,\n options: OverlayOptions\n ): Promise<() => void> {\n this.openStatePromise = new Promise(\n (res) => (this.openStateResolver = res)\n );\n this.addEventListener(\n 'sp-opened',\n () => {\n this.openStateResolver();\n },\n { once: true }\n );\n return OverlayTrigger.openOverlay(\n target,\n interaction,\n content,\n options\n );\n }\n\n public static openOverlay = async (\n target: HTMLElement,\n interaction: TriggerInteractions,\n content: HTMLElement,\n options: OverlayOptions\n ): Promise<() => void> => {\n return openOverlay(target, interaction, content, options);\n };\n\n private get overlayOptions(): OverlayOptions {\n return {\n offset: this.offset,\n placement: this.placement,\n receivesFocus:\n this.type && this.type !== 'inline' ? 'auto' : undefined,\n };\n }\n\n private onTrigger(event: CustomEvent<LongpressEvent>): void {\n if (this.disabled) return;\n\n switch (event.type) {\n case 'mouseenter':\n case 'focusin':\n if (!this.open && this.hoverContent) {\n this.open = 'hover';\n }\n return;\n case 'mouseleave':\n case 'focusout':\n if (this.open === 'hover') {\n this.handleClose();\n }\n return;\n case 'click':\n if (this.clickContent) {\n this.open = event.type;\n } else if (this.closeHoverOverlay) {\n event.preventDefault();\n }\n return;\n case 'longpress':\n if (this.longpressContent) {\n this._longpressEvent = event;\n this.open = event.type;\n }\n return;\n }\n }\n\n private prepareToFocusOverlayContent(overlayContent: HTMLElement): void {\n if (this.type !== 'modal') {\n return;\n }\n const firstFocusable = firstFocusableIn(overlayContent);\n if (!firstFocusable) {\n overlayContent.tabIndex = 0;\n }\n }\n\n public async onTriggerClick(): Promise<void> {\n if (\n !this.targetContent ||\n !this.clickContent ||\n this.closeClickOverlay\n ) {\n return;\n }\n const { targetContent, clickContent } = this;\n this.closeAllOverlays();\n this.prepareToFocusOverlayContent(clickContent);\n this.closeClickOverlay = this.openOverlay(\n targetContent,\n this.type ? this.type : 'click',\n clickContent,\n this.overlayOptions\n );\n }\n\n private _longpressEvent?: CustomEvent<LongpressEvent>;\n\n private async onTriggerLongpress(): Promise<void> {\n if (\n !this.targetContent ||\n !this.longpressContent ||\n this.closeLongpressOverlay\n ) {\n return;\n }\n const { targetContent, longpressContent } = this;\n this.closeAllOverlays();\n this.prepareToFocusOverlayContent(longpressContent);\n const notImmediatelyClosable =\n this._longpressEvent?.detail?.source !== 'keyboard';\n this.closeLongpressOverlay = this.openOverlay(\n targetContent,\n this.type ? this.type : 'longpress',\n longpressContent,\n {\n ...this.overlayOptions,\n receivesFocus: 'auto',\n notImmediatelyClosable,\n }\n );\n this._longpressEvent = undefined;\n }\n\n private abortOverlay: (cancelled: boolean) => void = () => {\n return;\n };\n\n public async onTriggerMouseEnter(): Promise<void> {\n if (\n !this.targetContent ||\n !this.hoverContent ||\n this.closeHoverOverlay\n ) {\n return;\n }\n const abortPromise: Promise<boolean> = new Promise((res) => {\n this.abortOverlay = res;\n });\n const { targetContent, hoverContent } = this;\n this.closeHoverOverlay = this.openOverlay(\n targetContent,\n 'hover',\n hoverContent,\n {\n abortPromise,\n ...this.overlayOptions,\n }\n );\n }\n\n private onClickSlotChange(\n event: Event & { target: HTMLSlotElement }\n ): void {\n this.clickContent = this.extractSlotContentFromEvent(event);\n this.manageOpen();\n }\n\n private onLongpressSlotChange(\n event: Event & { target: HTMLSlotElement }\n ): void {\n this.longpressContent = this.extractSlotContentFromEvent(event);\n this.manageOpen();\n }\n\n private onHoverSlotChange(\n event: Event & { target: HTMLSlotElement }\n ): void {\n this.hoverContent = this.extractSlotContentFromEvent(event);\n this.manageOpen();\n }\n\n private onTargetSlotChange(\n event: Event & { target: HTMLSlotElement }\n ): void {\n this.targetContent = this.extractSlotContentFromEvent(event);\n }\n\n private extractSlotContentFromEvent(event: Event): HTMLElement | undefined {\n const slot = event.target as HTMLSlotElement;\n const nodes = slot.assignedNodes({ flatten: true });\n return nodes.find((node) => node instanceof HTMLElement) as HTMLElement;\n }\n\n private openStatePromise = Promise.resolve();\n private openStateResolver!: () => void;\n\n protected async getUpdateComplete(): Promise<boolean> {\n const complete = (await super.getUpdateComplete()) as boolean;\n await this.openStatePromise;\n return complete;\n }\n\n public disconnectedCallback(): void {\n this.closeAllOverlays();\n super.disconnectedCallback();\n }\n}\n"]}
1
+ {"version":3,"file":"OverlayTrigger.js","sourceRoot":"","sources":["OverlayTrigger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;;;AAEF,OAAO,EAEH,IAAI,EACJ,UAAU,GAGb,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,iDAAiD,CAAC;AAE3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAQ7F,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,oBAAoB,MAAM,0BAA0B,CAAC;AAS5D;;;;;;;;;;GAUG;AACH,MAAM,OAAO,cAAe,SAAQ,UAAU;IAA9C;;QASI;;;WAGG;QAEI,cAAS,GAAc,QAAQ,CAAC;QAMhC,WAAM,GAAG,CAAC,CAAC;QAMX,aAAQ,GAAG,KAAK,CAAC;QA4NhB,iBAAY,GAAiC,GAAG,EAAE;YACtD,OAAO;QACX,CAAC,CAAC;QA0DM,qBAAgB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAajD,CAAC;IA1TU,MAAM,KAAK,MAAM;QACpB,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAClC,CAAC;IA0BO,WAAW,CAAC,KAA2C;QAC3D,IACI,KAAK;YACL,KAAK,CAAC,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,IAAI;YACtC,KAAK,CAAC,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,IAAI,EACxC;YACE,OAAO;SACV;QACD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAES,MAAM;QACZ,sDAAsD;QACtD,0DAA0D;QAC1D,OAAO,IAAI,CAAA;;;yBAGM,IAAI,CAAC,SAAS;6BACV,IAAI,CAAC,SAAS;8BACb,IAAI,CAAC,SAAS;8BACd,IAAI,CAAC,SAAS;2BACjB,IAAI,CAAC,SAAS;4BACb,IAAI,CAAC,SAAS;6BACb,IAAI,CAAC,WAAW;8BACf,IAAI,CAAC,kBAAkB;;;;;kCAKnB,IAAI,CAAC,iBAAiB;;;;kCAItB,IAAI,CAAC,qBAAqB;;;;kCAI1B,IAAI,CAAC,iBAAiB;;;;SAI/C,CAAC;QACF,yDAAyD;IAC7D,CAAC;IAES,OAAO,CAAC,OAAuB;QACrC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;YAC1C,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,OAAO;SACV;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YACrB,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;IACL,CAAC;IAEO,gBAAgB;QACpB,IAAI,IAAI,CAAC,YAAY;YAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAE3C;YACI,mBAAmB;YACnB,mBAAmB;YACnB,uBAAuB;SAE9B,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAwB,CAAC;YACnD,IAAI,QAAQ,IAAI,IAAI;gBAAE,OAAO;YAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC,MAAM,QAAQ,CAAC,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,UAAU;;QACd,MAAM,YAAY,GAAqD;YACnE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE;YAClC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE;YACvC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC1C,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE;SACtC,CAAC;QACF,YAAY,CAAC,MAAA,IAAI,CAAC,IAAI,mCAAI,MAAM,CAAC,EAAE,CAAC;IACxC,CAAC;IAEO,KAAK,CAAC,WAAW,CACrB,MAAmB,EACnB,WAAgC,EAChC,OAAoB,EACpB,OAAuB;QAEvB,IAAI,CAAC,gBAAgB,GAAG,IAAI,OAAO,CAC/B,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,CAC1C,CAAC;QACF,IAAI,CAAC,gBAAgB,CACjB,WAAW,EACX,GAAG,EAAE;YACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7B,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACjB,CAAC;QACF,OAAO,cAAc,CAAC,WAAW,CAC7B,MAAM,EACN,WAAW,EACX,OAAO,EACP,OAAO,CACV,CAAC;IACN,CAAC;IAWD,IAAY,cAAc;QACtB,OAAO;YACH,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,aAAa,EACT,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;SAC/D,CAAC;IACN,CAAC;IAEO,SAAS,CAAC,KAAkC;QAChD,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE1B,QAAQ,KAAK,CAAC,IAAI,EAAE;YAChB,KAAK,YAAY,CAAC;YAClB,KAAK,SAAS;gBACV,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;oBACjC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;iBACvB;gBACD,OAAO;YACX,KAAK,YAAY,CAAC;YAClB,KAAK,UAAU;gBACX,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;oBACvB,IAAI,CAAC,WAAW,EAAE,CAAC;iBACtB;gBACD,OAAO;YACX,KAAK,OAAO;gBACR,IAAI,IAAI,CAAC,YAAY,EAAE;oBACnB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;iBAC1B;qBAAM,IAAI,IAAI,CAAC,iBAAiB,EAAE;oBAC/B,KAAK,CAAC,cAAc,EAAE,CAAC;iBAC1B;gBACD,OAAO;YACX,KAAK,WAAW;gBACZ,IAAI,IAAI,CAAC,gBAAgB,EAAE;oBACvB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;oBAC7B,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;iBAC1B;gBACD,OAAO;SACd;IACL,CAAC;IAEO,4BAA4B,CAAC,cAA2B;QAC5D,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;YACvB,OAAO;SACV;QACD,MAAM,cAAc,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;QACxD,IAAI,CAAC,cAAc,EAAE;YACjB,cAAc,CAAC,QAAQ,GAAG,CAAC,CAAC;SAC/B;IACL,CAAC;IAEM,KAAK,CAAC,cAAc;QACvB,IACI,CAAC,IAAI,CAAC,aAAa;YACnB,CAAC,IAAI,CAAC,YAAY;YAClB,IAAI,CAAC,iBAAiB,EACxB;YACE,OAAO;SACV;QACD,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;QAC7C,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,4BAA4B,CAAC,YAAY,CAAC,CAAC;QAChD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CACrC,aAAa,EACb,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAC/B,YAAY,EACZ,IAAI,CAAC,cAAc,CACtB,CAAC;IACN,CAAC;IAIO,KAAK,CAAC,kBAAkB;;QAC5B,IACI,CAAC,IAAI,CAAC,aAAa;YACnB,CAAC,IAAI,CAAC,gBAAgB;YACtB,IAAI,CAAC,qBAAqB,EAC5B;YACE,OAAO;SACV;QACD,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC;QACjD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,4BAA4B,CAAC,gBAAgB,CAAC,CAAC;QACpD,MAAM,sBAAsB,GACxB,CAAA,MAAA,MAAA,IAAI,CAAC,eAAe,0CAAE,MAAM,0CAAE,MAAM,MAAK,UAAU,CAAC;QACxD,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,WAAW,CACzC,aAAa,EACb,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EACnC,gBAAgB,kCAET,IAAI,CAAC,cAAc,KACtB,aAAa,EAAE,MAAM,EACrB,sBAAsB,IAE7B,CAAC;QACF,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;IACrC,CAAC;IAMM,KAAK,CAAC,mBAAmB;QAC5B,IACI,CAAC,IAAI,CAAC,aAAa;YACnB,CAAC,IAAI,CAAC,YAAY;YAClB,IAAI,CAAC,iBAAiB,EACxB;YACE,OAAO;SACV;QACD,MAAM,YAAY,GAAqB,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACvD,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;QAC7C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CACrC,aAAa,EACb,OAAO,EACP,YAAY,kBAER,YAAY,IACT,IAAI,CAAC,cAAc,EAE7B,CAAC;IACN,CAAC;IAEO,iBAAiB,CACrB,KAA0C;QAE1C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;QAC5D,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;IAEO,qBAAqB,CACzB,KAA0C;QAE1C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;QAChE,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;IAEO,iBAAiB,CACrB,KAA0C;QAE1C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;QAC5D,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;IAEO,kBAAkB,CACtB,KAA0C;QAE1C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;IACjE,CAAC;IAEO,2BAA2B,CAAC,KAAY;QAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAyB,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,YAAY,WAAW,CAAgB,CAAC;IAC5E,CAAC;IAKS,KAAK,CAAC,iBAAiB;QAC7B,MAAM,QAAQ,GAAG,CAAC,MAAM,KAAK,CAAC,iBAAiB,EAAE,CAAY,CAAC;QAC9D,MAAM,IAAI,CAAC,gBAAgB,CAAC;QAC5B,OAAO,QAAQ,CAAC;IACpB,CAAC;IAEM,oBAAoB;QACvB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,KAAK,CAAC,oBAAoB,EAAE,CAAC;IACjC,CAAC;;;AAnLa,0BAAW,GAAG,KAAK,EAC7B,MAAmB,EACnB,WAAgC,EAChC,OAAoB,EACpB,OAAuB,EACJ,EAAE;IACrB,OAAO,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9D,CAAE,CAAA;AApIF;IADC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;iDACW;AAGvC;IADC,QAAQ,EAAE;4CACgE;AAG3E;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;8CACxB;AAGlB;IADC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;4CACM;AAGlC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gDACnB","sourcesContent":["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n CSSResultArray,\n html,\n LitElement,\n PropertyValues,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\nimport type { LongpressEvent } from '@spectrum-web-components/action-button';\nimport { firstFocusableIn } from '@spectrum-web-components/shared/src/first-focusable-in.js';\n\nimport {\n OverlayOpenCloseDetail,\n OverlayOptions,\n Placement,\n TriggerInteractions,\n} from './overlay-types';\nimport { openOverlay } from './loader.js';\nimport overlayTriggerStyles from './overlay-trigger.css.js';\n\nexport type OverlayContentTypes = 'click' | 'hover' | 'longpress';\n\ntype closeOverlay =\n | 'closeClickOverlay'\n | 'closeHoverOverlay'\n | 'closeLongpressOverlay';\n\n/**\n * @element overlay-trigger\n *\n * @slot trigger - The content that will trigger the various overlays\n * @slot hover-content - The content that will be displayed on hover\n * @slot click-content - The content that will be displayed on click\n * @slot longpress-content - The content that will be displayed on click\n *\n * @fires sp-opened - Announces that the overlay has been opened\n * @fires sp-closed - Announces that the overlay has been closed\n */\nexport class OverlayTrigger extends LitElement {\n private closeClickOverlay?: Promise<() => void>;\n private closeLongpressOverlay?: Promise<() => void>;\n private closeHoverOverlay?: Promise<() => void>;\n\n public static get styles(): CSSResultArray {\n return [overlayTriggerStyles];\n }\n\n /**\n * @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\"}\n * @attr\n */\n @property({ reflect: true })\n public placement: Placement = 'bottom';\n\n @property()\n public type?: Extract<TriggerInteractions, 'inline' | 'modal' | 'replace'>;\n\n @property({ type: Number, reflect: true })\n public offset = 6;\n\n @property({ reflect: true })\n public open?: OverlayContentTypes;\n\n @property({ type: Boolean, reflect: true })\n public disabled = false;\n\n private clickContent?: HTMLElement;\n private longpressContent?: HTMLElement;\n private hoverContent?: HTMLElement;\n private targetContent?: HTMLElement;\n\n private handleClose(event?: CustomEvent<OverlayOpenCloseDetail>): void {\n if (\n event &&\n event.detail.interaction !== this.open &&\n event.detail.interaction !== this.type\n ) {\n return;\n }\n this.removeAttribute('open');\n }\n\n protected render(): TemplateResult {\n // Keyboard event availability documented in README.md\n /* eslint-disable lit-a11y/click-events-have-key-events */\n return html`\n <slot\n id=\"trigger\"\n @click=${this.onTrigger}\n @longpress=${this.onTrigger}\n @mouseenter=${this.onTrigger}\n @mouseleave=${this.onTrigger}\n @focusin=${this.onTrigger}\n @focusout=${this.onTrigger}\n @sp-closed=${this.handleClose}\n @slotchange=${this.onTargetSlotChange}\n name=\"trigger\"\n ></slot>\n <div id=\"overlay-content\">\n <slot\n @slotchange=${this.onClickSlotChange}\n name=\"click-content\"\n ></slot>\n <slot\n @slotchange=${this.onLongpressSlotChange}\n name=\"longpress-content\"\n ></slot>\n <slot\n @slotchange=${this.onHoverSlotChange}\n name=\"hover-content\"\n ></slot>\n </div>\n `;\n /* eslint-enable lit-a11y/click-events-have-key-events */\n }\n\n protected updated(changes: PropertyValues): void {\n super.updated(changes);\n if (this.disabled && changes.has('disabled')) {\n this.closeAllOverlays();\n return;\n }\n if (changes.has('open')) {\n this.manageOpen();\n }\n }\n\n private closeAllOverlays(): void {\n if (this.abortOverlay) this.abortOverlay(true);\n (\n [\n 'closeClickOverlay',\n 'closeHoverOverlay',\n 'closeLongpressOverlay',\n ] as closeOverlay[]\n ).forEach(async (name) => {\n const canClose = this[name] as Promise<() => void>;\n if (canClose == null) return;\n delete this[name];\n (await canClose)();\n });\n }\n\n private manageOpen(): void {\n const openHandlers: Record<OverlayContentTypes | 'none', () => void> = {\n click: () => this.onTriggerClick(),\n hover: () => this.onTriggerMouseEnter(),\n longpress: () => this.onTriggerLongpress(),\n none: () => this.closeAllOverlays(),\n };\n openHandlers[this.open ?? 'none']();\n }\n\n private async openOverlay(\n target: HTMLElement,\n interaction: TriggerInteractions,\n content: HTMLElement,\n options: OverlayOptions\n ): Promise<() => void> {\n this.openStatePromise = new Promise(\n (res) => (this.openStateResolver = res)\n );\n this.addEventListener(\n 'sp-opened',\n () => {\n this.openStateResolver();\n },\n { once: true }\n );\n return OverlayTrigger.openOverlay(\n target,\n interaction,\n content,\n options\n );\n }\n\n public static openOverlay = async (\n target: HTMLElement,\n interaction: TriggerInteractions,\n content: HTMLElement,\n options: OverlayOptions\n ): Promise<() => void> => {\n return openOverlay(target, interaction, content, options);\n };\n\n private get overlayOptions(): OverlayOptions {\n return {\n offset: this.offset,\n placement: this.placement,\n receivesFocus:\n this.type && this.type !== 'inline' ? 'auto' : undefined,\n };\n }\n\n private onTrigger(event: CustomEvent<LongpressEvent>): void {\n if (this.disabled) return;\n\n switch (event.type) {\n case 'mouseenter':\n case 'focusin':\n if (!this.open && this.hoverContent) {\n this.open = 'hover';\n }\n return;\n case 'mouseleave':\n case 'focusout':\n if (this.open === 'hover') {\n this.handleClose();\n }\n return;\n case 'click':\n if (this.clickContent) {\n this.open = event.type;\n } else if (this.closeHoverOverlay) {\n event.preventDefault();\n }\n return;\n case 'longpress':\n if (this.longpressContent) {\n this._longpressEvent = event;\n this.open = event.type;\n }\n return;\n }\n }\n\n private prepareToFocusOverlayContent(overlayContent: HTMLElement): void {\n if (this.type !== 'modal') {\n return;\n }\n const firstFocusable = firstFocusableIn(overlayContent);\n if (!firstFocusable) {\n overlayContent.tabIndex = 0;\n }\n }\n\n public async onTriggerClick(): Promise<void> {\n if (\n !this.targetContent ||\n !this.clickContent ||\n this.closeClickOverlay\n ) {\n return;\n }\n const { targetContent, clickContent } = this;\n this.closeAllOverlays();\n this.prepareToFocusOverlayContent(clickContent);\n this.closeClickOverlay = this.openOverlay(\n targetContent,\n this.type ? this.type : 'click',\n clickContent,\n this.overlayOptions\n );\n }\n\n private _longpressEvent?: CustomEvent<LongpressEvent>;\n\n private async onTriggerLongpress(): Promise<void> {\n if (\n !this.targetContent ||\n !this.longpressContent ||\n this.closeLongpressOverlay\n ) {\n return;\n }\n const { targetContent, longpressContent } = this;\n this.closeAllOverlays();\n this.prepareToFocusOverlayContent(longpressContent);\n const notImmediatelyClosable =\n this._longpressEvent?.detail?.source !== 'keyboard';\n this.closeLongpressOverlay = this.openOverlay(\n targetContent,\n this.type ? this.type : 'longpress',\n longpressContent,\n {\n ...this.overlayOptions,\n receivesFocus: 'auto',\n notImmediatelyClosable,\n }\n );\n this._longpressEvent = undefined;\n }\n\n private abortOverlay: (cancelled: boolean) => void = () => {\n return;\n };\n\n public async onTriggerMouseEnter(): Promise<void> {\n if (\n !this.targetContent ||\n !this.hoverContent ||\n this.closeHoverOverlay\n ) {\n return;\n }\n const abortPromise: Promise<boolean> = new Promise((res) => {\n this.abortOverlay = res;\n });\n const { targetContent, hoverContent } = this;\n this.closeHoverOverlay = this.openOverlay(\n targetContent,\n 'hover',\n hoverContent,\n {\n abortPromise,\n ...this.overlayOptions,\n }\n );\n }\n\n private onClickSlotChange(\n event: Event & { target: HTMLSlotElement }\n ): void {\n this.clickContent = this.extractSlotContentFromEvent(event);\n this.manageOpen();\n }\n\n private onLongpressSlotChange(\n event: Event & { target: HTMLSlotElement }\n ): void {\n this.longpressContent = this.extractSlotContentFromEvent(event);\n this.manageOpen();\n }\n\n private onHoverSlotChange(\n event: Event & { target: HTMLSlotElement }\n ): void {\n this.hoverContent = this.extractSlotContentFromEvent(event);\n this.manageOpen();\n }\n\n private onTargetSlotChange(\n event: Event & { target: HTMLSlotElement }\n ): void {\n this.targetContent = this.extractSlotContentFromEvent(event);\n }\n\n private extractSlotContentFromEvent(event: Event): HTMLElement | undefined {\n const slot = event.target as HTMLSlotElement;\n const nodes = slot.assignedNodes({ flatten: true });\n return nodes.find((node) => node instanceof HTMLElement) as HTMLElement;\n }\n\n private openStatePromise = Promise.resolve();\n private openStateResolver!: () => void;\n\n protected async getUpdateComplete(): Promise<boolean> {\n const complete = (await super.getUpdateComplete()) as boolean;\n await this.openStatePromise;\n return complete;\n }\n\n public disconnectedCallback(): void {\n this.closeAllOverlays();\n super.disconnectedCallback();\n }\n}\n"]}
@@ -11,9 +11,9 @@ governing permissions and limitations under the License.
11
11
  */
12
12
  import { css } from '@spectrum-web-components/base';
13
13
  const styles = css `
14
- @keyframes sp-overlay-fade-in{0%{opacity:0;transform:var(--sp-overlay-from)}to{opacity:100%;transform:translate(0)}}@keyframes sp-overlay-fade-out{0%{opacity:100%;transform:translate(0)}to{opacity:0;transform:var(--sp-overlay-from)}}:host{display:inline-block;left:0;pointer-events:none;position:absolute;top:0;z-index:1000}:host(:focus){outline:none}#contents,sp-theme{height:100%}#contents{animation-duration:var(--spectrum-global-animation-duration-200,.16s);animation-timing-function:var(
14
+ @keyframes sp-overlay-fade-in{0%{opacity:0;transform:var(--sp-overlay-from)}to{opacity:1;transform:translate(0)}}@keyframes sp-overlay-fade-out{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:var(--sp-overlay-from)}}:host{display:inline-block;left:0;pointer-events:none;position:absolute;top:0;z-index:1000}:host(:focus){outline:none}#contents,sp-theme{height:100%}#contents{animation-duration:var(--spectrum-global-animation-duration-200,.16s);animation-timing-function:var(
15
15
  --spectrum-global-animation-ease-out,ease-out
16
- );display:inline-block;opacity:100%;pointer-events:none;visibility:visible}:host([data-popper-placement*=top]) #contents{--sp-overlay-from:translateY(var(--spectrum-global-dimension-size-75))}:host([data-popper-placement*=right]) #contents{--sp-overlay-from:translateX(calc(-1*var(--spectrum-global-dimension-size-75)))}:host([data-popper-placement*=bottom]) #contents{--sp-overlay-from:translateY(calc(-1*var(--spectrum-global-dimension-size-75)))}:host([data-popper-placement*=left]) #contents{--sp-overlay-from:translateX(var(--spectrum-global-dimension-size-75))}:host([animating]) ::slotted(*){pointer-events:none}:host(:not([animating])) ::slotted(*){pointer-events:auto}#contents ::slotted(*){position:relative}
16
+ );display:inline-block;opacity:1;pointer-events:none;visibility:visible}:host([data-popper-placement*=top]) #contents{--sp-overlay-from:translateY(var(--spectrum-global-dimension-size-75))}:host([data-popper-placement*=right]) #contents{--sp-overlay-from:translateX(calc(-1*var(--spectrum-global-dimension-size-75)))}:host([data-popper-placement*=bottom]) #contents{--sp-overlay-from:translateY(calc(-1*var(--spectrum-global-dimension-size-75)))}:host([data-popper-placement*=left]) #contents{--sp-overlay-from:translateX(var(--spectrum-global-dimension-size-75))}:host([animating]) ::slotted(*){pointer-events:none}:host(:not([animating])) ::slotted(*){pointer-events:auto}#contents ::slotted(*){position:relative}
17
17
  `;
18
18
  export default styles;
19
19
  //# sourceMappingURL=active-overlay.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"active-overlay.css.js","sourceRoot":"","sources":["active-overlay.css.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;AACF,OAAO,EAAE,GAAG,EAAE,MAAM,+BAA+B,CAAC;AACpD,MAAM,MAAM,GAAG,GAAG,CAAA;;;;CAIjB,CAAC;AACF,eAAe,MAAM,CAAC","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 { css } from '@spectrum-web-components/base';\nconst styles = css`\n@keyframes sp-overlay-fade-in{0%{opacity:0;transform:var(--sp-overlay-from)}to{opacity:100%;transform:translate(0)}}@keyframes sp-overlay-fade-out{0%{opacity:100%;transform:translate(0)}to{opacity:0;transform:var(--sp-overlay-from)}}:host{display:inline-block;left:0;pointer-events:none;position:absolute;top:0;z-index:1000}:host(:focus){outline:none}#contents,sp-theme{height:100%}#contents{animation-duration:var(--spectrum-global-animation-duration-200,.16s);animation-timing-function:var(\n--spectrum-global-animation-ease-out,ease-out\n);display:inline-block;opacity:100%;pointer-events:none;visibility:visible}:host([data-popper-placement*=top]) #contents{--sp-overlay-from:translateY(var(--spectrum-global-dimension-size-75))}:host([data-popper-placement*=right]) #contents{--sp-overlay-from:translateX(calc(-1*var(--spectrum-global-dimension-size-75)))}:host([data-popper-placement*=bottom]) #contents{--sp-overlay-from:translateY(calc(-1*var(--spectrum-global-dimension-size-75)))}:host([data-popper-placement*=left]) #contents{--sp-overlay-from:translateX(var(--spectrum-global-dimension-size-75))}:host([animating]) ::slotted(*){pointer-events:none}:host(:not([animating])) ::slotted(*){pointer-events:auto}#contents ::slotted(*){position:relative}\n`;\nexport default styles;"]}
1
+ {"version":3,"file":"active-overlay.css.js","sourceRoot":"","sources":["active-overlay.css.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;AACF,OAAO,EAAE,GAAG,EAAE,MAAM,+BAA+B,CAAC;AACpD,MAAM,MAAM,GAAG,GAAG,CAAA;;;;CAIjB,CAAC;AACF,eAAe,MAAM,CAAC","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 { css } from '@spectrum-web-components/base';\nconst styles = css`\n@keyframes sp-overlay-fade-in{0%{opacity:0;transform:var(--sp-overlay-from)}to{opacity:1;transform:translate(0)}}@keyframes sp-overlay-fade-out{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:var(--sp-overlay-from)}}:host{display:inline-block;left:0;pointer-events:none;position:absolute;top:0;z-index:1000}:host(:focus){outline:none}#contents,sp-theme{height:100%}#contents{animation-duration:var(--spectrum-global-animation-duration-200,.16s);animation-timing-function:var(\n--spectrum-global-animation-ease-out,ease-out\n);display:inline-block;opacity:1;pointer-events:none;visibility:visible}:host([data-popper-placement*=top]) #contents{--sp-overlay-from:translateY(var(--spectrum-global-dimension-size-75))}:host([data-popper-placement*=right]) #contents{--sp-overlay-from:translateX(calc(-1*var(--spectrum-global-dimension-size-75)))}:host([data-popper-placement*=bottom]) #contents{--sp-overlay-from:translateY(calc(-1*var(--spectrum-global-dimension-size-75)))}:host([data-popper-placement*=left]) #contents{--sp-overlay-from:translateX(var(--spectrum-global-dimension-size-75))}:host([animating]) ::slotted(*){pointer-events:none}:host(:not([animating])) ::slotted(*){pointer-events:auto}#contents ::slotted(*){position:relative}\n`;\nexport default styles;"]}
@@ -13,6 +13,8 @@ export declare class OverlayStack {
13
13
  private overlayHolder;
14
14
  private _eventsAreBound;
15
15
  private initTabTrapping;
16
+ private _bodyMarginsApplied;
17
+ private applyBodyMargins;
16
18
  private startTabTrapping;
17
19
  private stopTabTrapping;
18
20
  private forwardContextmenuEvent;
@@ -28,9 +28,10 @@ export class OverlayStack {
28
28
  this.canTabTrap = true;
29
29
  this.trappingInited = false;
30
30
  this._eventsAreBound = false;
31
+ this._bodyMarginsApplied = false;
31
32
  this.forwardContextmenuEvent = async (event) => {
32
33
  const topOverlay = this.overlays[this.overlays.length - 1];
33
- if (topOverlay.interaction !== 'modal') {
34
+ if (!this.trappingInited || topOverlay.interaction !== 'modal') {
34
35
  return;
35
36
  }
36
37
  event.stopPropagation();
@@ -98,6 +99,9 @@ export class OverlayStack {
98
99
  };
99
100
  }
100
101
  initTabTrapping() {
102
+ if (this.trappingInited)
103
+ return;
104
+ this.trappingInited = true;
101
105
  /* c8 ignore next 4 */
102
106
  if (this.document.body.shadowRoot) {
103
107
  this.canTabTrap = false;
@@ -110,7 +114,6 @@ export class OverlayStack {
110
114
  }
111
115
  const root = this.document.body.shadowRoot;
112
116
  root.innerHTML = `
113
- <div id="actual"><slot></slot></div>
114
117
  <style>
115
118
  #actual {
116
119
  position: relative;
@@ -128,22 +131,19 @@ export class OverlayStack {
128
131
  top: 0;
129
132
  left: 0;
130
133
  position: fixed;
131
- pointer-events: none;
132
134
  }
133
135
  [name="open"]::slotted(*) {
134
136
  pointer-events: all;
135
137
  }
136
- #holder[hidden] {
137
- display: none !important;
138
- }
139
- #actual[aria-hidden] {
140
- touch-action: none;
138
+ #holder {
139
+ display: none;
141
140
  }
142
- #actual[tabindex="-1"] ::slotted(*) {
143
- pointer-events: none; /* just in case? */
141
+ #actual[aria-hidden] + #holder {
142
+ display: block;
144
143
  }
145
144
  </style>
146
- <div id="holder" hidden><slot name="open"></slot></div>
145
+ <div id="actual"><slot></slot></div>
146
+ <div id="holder"><slot name="open"></slot></div>
147
147
  `;
148
148
  this.tabTrapper = root.querySelector('#actual');
149
149
  this.overlayHolder = root.querySelector('#holder');
@@ -151,25 +151,36 @@ export class OverlayStack {
151
151
  if (this.tabTrapper.shadowRoot) {
152
152
  this.tabTrapper.shadowRoot.innerHTML = '<slot></slot>';
153
153
  }
154
+ this.overlayHolder.addEventListener('contextmenu', this.forwardContextmenuEvent, true);
155
+ requestAnimationFrame(() => {
156
+ this.applyBodyMargins();
157
+ const observer = new ResizeObserver(() => {
158
+ this.applyBodyMargins();
159
+ });
160
+ observer.observe(document.body);
161
+ });
162
+ }
163
+ applyBodyMargins() {
164
+ const { marginLeft, marginRight, marginTop, marginBottom } = getComputedStyle(document.body);
165
+ const allZero = parseFloat(marginLeft) === 0 &&
166
+ parseFloat(marginRight) === 0 &&
167
+ parseFloat(marginTop) === 0 &&
168
+ parseFloat(marginBottom) === 0;
169
+ if (allZero && !this._bodyMarginsApplied) {
170
+ return;
171
+ }
172
+ this.tabTrapper.style.setProperty('--swc-body-margins-inline', `calc(${marginLeft} + ${marginRight})`);
173
+ this.tabTrapper.style.setProperty('--swc-body-margins-block', `calc(${marginTop} + ${marginBottom})`);
174
+ this._bodyMarginsApplied = !allZero;
154
175
  }
155
176
  startTabTrapping() {
156
- if (!this.trappingInited) {
157
- this.initTabTrapping();
158
- this.trappingInited = true;
159
- }
177
+ this.initTabTrapping();
160
178
  /* c8 ignore next 3 */
161
179
  if (!this.canTabTrap) {
162
180
  return;
163
181
  }
164
182
  this.tabTrapper.tabIndex = -1;
165
- this.tabTrapper.addEventListener('contextmenu', this.forwardContextmenuEvent, true);
166
183
  this.tabTrapper.setAttribute('aria-hidden', 'true');
167
- this.overlayHolder.hidden = false;
168
- requestAnimationFrame(() => {
169
- const bodyStyles = getComputedStyle(document.body);
170
- this.tabTrapper.style.setProperty('--swc-body-margins-inline', `calc(${bodyStyles.marginLeft} + ${bodyStyles.marginRight})`);
171
- this.tabTrapper.style.setProperty('--swc-body-margins-block', `calc(${bodyStyles.marginTop} + ${bodyStyles.marginBottom})`);
172
- });
173
184
  }
174
185
  stopTabTrapping() {
175
186
  /* c8 ignore next 3 */
@@ -177,9 +188,7 @@ export class OverlayStack {
177
188
  return;
178
189
  }
179
190
  this.tabTrapper.removeAttribute('tabindex');
180
- this.tabTrapper.removeEventListener('contextmenu', this.forwardContextmenuEvent, true);
181
191
  this.tabTrapper.removeAttribute('aria-hidden');
182
- this.overlayHolder.hidden = true;
183
192
  }
184
193
  get document() {
185
194
  return this.root.ownerDocument /* c8 ignore next */ || document;