@spectrum-web-components/overlay 0.13.0 → 0.13.1

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.
@@ -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",
@@ -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": [
@@ -2060,6 +2054,12 @@
2060
2054
  }
2061
2055
  }
2062
2056
  ]
2057
+ },
2058
+ {
2059
+ "kind": "javascript-module",
2060
+ "path": "sync/overlay-trigger.ts",
2061
+ "declarations": [],
2062
+ "exports": []
2063
2063
  }
2064
2064
  ]
2065
2065
  }
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.1",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -49,10 +49,10 @@
49
49
  ],
50
50
  "dependencies": {
51
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",
52
+ "@spectrum-web-components/action-button": "^0.7.1",
53
+ "@spectrum-web-components/base": "^0.5.1",
54
+ "@spectrum-web-components/shared": "^0.13.1",
55
+ "@spectrum-web-components/theme": "^0.9.1",
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": "df3f333ee26a45f9fc247716b6e8ef051dca630b"
68
68
  }
@@ -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
  /**
@@ -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, 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 } = {};\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"]}
@@ -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;"]}
@@ -1,80 +0,0 @@
1
- /*
2
- Copyright 2020 Adobe. All rights reserved.
3
- This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
- you may not use this file except in compliance with the License. You may obtain a copy
5
- of the License at http://www.apache.org/licenses/LICENSE-2.0
6
-
7
- Unless required by applicable law or agreed to in writing, software distributed under
8
- the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
- OF ANY KIND, either express or implied. See the License for the specific language
10
- governing permissions and limitations under the License.
11
- */
12
- import { elementUpdated, expect, fixture, html, oneEvent, waitUntil, } from '@open-wc/testing';
13
- import '@spectrum-web-components/tooltip/sp-tooltip.js';
14
- import '@spectrum-web-components/action-button/sp-action-button.js';
15
- import '@spectrum-web-components/overlay/overlay-trigger.js';
16
- import { a11ySnapshot, findAccessibilityNode } from '@web/test-runner-commands';
17
- describe('Overlay Trigger - Lifecycle Methods', () => {
18
- it('calls the overlay lifecycle (willOpen/Close)', async () => {
19
- const el = await fixture(html `
20
- <overlay-trigger placement="right-start">
21
- <sp-action-button slot="trigger">
22
- Button with Tooltip
23
- </sp-action-button>
24
- <sp-tooltip slot="hover-content">
25
- Described by this content on focus/hover. 1
26
- </sp-tooltip>
27
- </overlay-trigger>
28
- `);
29
- await elementUpdated(el);
30
- expect(el.open).to.be.undefined;
31
- expect(el.childNodes.length).to.equal(5);
32
- const trigger = el.querySelector('[slot="trigger"]');
33
- let snapshot = (await a11ySnapshot({}));
34
- expect(findAccessibilityNode(snapshot, (node) => node.name === 'Button with Tooltip' &&
35
- typeof node.description === 'undefined'), '`name`ed with no `description`');
36
- const opened = oneEvent(el, 'sp-opened');
37
- trigger.dispatchEvent(new FocusEvent('focusin', { bubbles: true, composed: true }));
38
- await opened;
39
- expect(el.open).to.equal('hover');
40
- snapshot = (await a11ySnapshot({}));
41
- expect(el.childNodes.length).to.equal(6);
42
- expect(findAccessibilityNode(snapshot, (node) => node.name === 'Button with Tooltip' &&
43
- node.description ===
44
- 'Described by this content on focus/hover.'), '`name`ed with `description`');
45
- const closed = oneEvent(el, 'sp-closed');
46
- trigger.dispatchEvent(new FocusEvent('focusout', { bubbles: true, composed: true }));
47
- await closed;
48
- await elementUpdated(el);
49
- await waitUntil(() => el.open === null);
50
- expect(el.childNodes.length).to.equal(5);
51
- });
52
- it('calls the overlay lifecycle (willOpen/openCanceled)', async () => {
53
- const el = await fixture(html `
54
- <overlay-trigger placement="right-start">
55
- <sp-action-button slot="trigger">
56
- Button with Tooltip
57
- </sp-action-button>
58
- <sp-tooltip slot="hover-content" delayed>
59
- Described by this content on focus/hover. 2
60
- </sp-tooltip>
61
- </overlay-trigger>
62
- `);
63
- await elementUpdated(el);
64
- expect(el.open).to.be.undefined;
65
- expect(el.childNodes.length, 'always').to.equal(5);
66
- const trigger = el.querySelector('[slot="trigger"]');
67
- trigger.dispatchEvent(new FocusEvent('focusin', { bubbles: true, composed: true }));
68
- await elementUpdated(el);
69
- trigger.dispatchEvent(new FocusEvent('focusout', { bubbles: true, composed: true }));
70
- await elementUpdated(el);
71
- await waitUntil(() => {
72
- return el.open === null;
73
- }, 'open');
74
- await elementUpdated(el);
75
- await waitUntil(() => {
76
- return el.childNodes.length === 5;
77
- }, 'children');
78
- });
79
- });
80
- //# sourceMappingURL=overlay-lifecycle.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"overlay-lifecycle.test.js","sourceRoot":"","sources":["overlay-lifecycle.test.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*/\nimport {\n elementUpdated,\n expect,\n fixture,\n html,\n oneEvent,\n waitUntil,\n} from '@open-wc/testing';\nimport '@spectrum-web-components/tooltip/sp-tooltip.js';\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport { OverlayTrigger } from '..';\nimport '@spectrum-web-components/overlay/overlay-trigger.js';\nimport { a11ySnapshot, findAccessibilityNode } from '@web/test-runner-commands';\n\ndescribe('Overlay Trigger - Lifecycle Methods', () => {\n it('calls the overlay lifecycle (willOpen/Close)', async () => {\n const el = await fixture<OverlayTrigger>(html`\n <overlay-trigger placement=\"right-start\">\n <sp-action-button slot=\"trigger\">\n Button with Tooltip\n </sp-action-button>\n <sp-tooltip slot=\"hover-content\">\n Described by this content on focus/hover. 1\n </sp-tooltip>\n </overlay-trigger>\n `);\n\n await elementUpdated(el);\n\n expect(el.open).to.be.undefined;\n expect(el.childNodes.length).to.equal(5);\n const trigger = el.querySelector('[slot=\"trigger\"]') as HTMLElement;\n type DescribedNode = {\n name: string;\n description: string;\n };\n let snapshot = (await a11ySnapshot({})) as unknown as DescribedNode & {\n children: DescribedNode[];\n };\n expect(\n findAccessibilityNode<DescribedNode>(\n snapshot,\n (node) =>\n node.name === 'Button with Tooltip' &&\n typeof node.description === 'undefined'\n ),\n '`name`ed with no `description`'\n );\n const opened = oneEvent(el, 'sp-opened');\n trigger.dispatchEvent(\n new FocusEvent('focusin', { bubbles: true, composed: true })\n );\n await opened;\n\n expect(el.open).to.equal('hover');\n snapshot = (await a11ySnapshot({})) as unknown as DescribedNode & {\n children: DescribedNode[];\n };\n\n expect(el.childNodes.length).to.equal(6);\n expect(\n findAccessibilityNode<DescribedNode>(\n snapshot,\n (node) =>\n node.name === 'Button with Tooltip' &&\n node.description ===\n 'Described by this content on focus/hover.'\n ),\n '`name`ed with `description`'\n );\n\n const closed = oneEvent(el, 'sp-closed');\n trigger.dispatchEvent(\n new FocusEvent('focusout', { bubbles: true, composed: true })\n );\n await closed;\n await elementUpdated(el);\n\n await waitUntil(() => el.open === null);\n expect(el.childNodes.length).to.equal(5);\n });\n it('calls the overlay lifecycle (willOpen/openCanceled)', async () => {\n const el = await fixture<OverlayTrigger>(html`\n <overlay-trigger placement=\"right-start\">\n <sp-action-button slot=\"trigger\">\n Button with Tooltip\n </sp-action-button>\n <sp-tooltip slot=\"hover-content\" delayed>\n Described by this content on focus/hover. 2\n </sp-tooltip>\n </overlay-trigger>\n `);\n\n await elementUpdated(el);\n\n expect(el.open).to.be.undefined;\n expect(el.childNodes.length, 'always').to.equal(5);\n const trigger = el.querySelector('[slot=\"trigger\"]') as HTMLElement;\n trigger.dispatchEvent(\n new FocusEvent('focusin', { bubbles: true, composed: true })\n );\n await elementUpdated(el);\n trigger.dispatchEvent(\n new FocusEvent('focusout', { bubbles: true, composed: true })\n );\n await elementUpdated(el);\n\n await waitUntil(() => {\n return el.open === null;\n }, 'open');\n await elementUpdated(el);\n await waitUntil(() => {\n return el.childNodes.length === 5;\n }, 'children');\n });\n});\n"]}
@@ -1,129 +0,0 @@
1
- /*
2
- Copyright 2020 Adobe. All rights reserved.
3
- This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
- you may not use this file except in compliance with the License. You may obtain a copy
5
- of the License at http://www.apache.org/licenses/LICENSE-2.0
6
-
7
- Unless required by applicable law or agreed to in writing, software distributed under
8
- the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
- OF ANY KIND, either express or implied. See the License for the specific language
10
- governing permissions and limitations under the License.
11
- */
12
- import { useFakeTimers } from 'sinon';
13
- import { OverlayTimer } from '../src/overlay-timer.js';
14
- import { expect } from '@open-wc/testing';
15
- describe('Overlays timer', () => {
16
- let clock;
17
- beforeEach(() => {
18
- clock = useFakeTimers();
19
- });
20
- afterEach(() => {
21
- clock.restore();
22
- });
23
- it('should resolve after warmup', async () => {
24
- const timer = new OverlayTimer({
25
- warmUpDelay: 500,
26
- coolDownDelay: 500,
27
- });
28
- const element = document.createElement('div');
29
- const promise = timer.openTimer(element);
30
- clock.next();
31
- expect(clock.now).to.equal(500);
32
- const cancelled = await promise;
33
- expect(cancelled).to.be.false;
34
- });
35
- it('should resolve true when cancelled', async () => {
36
- const timer = new OverlayTimer({
37
- warmUpDelay: 500,
38
- coolDownDelay: 500,
39
- });
40
- const element = document.createElement('div');
41
- const promise = timer.openTimer(element);
42
- clock.tick(10);
43
- timer.close(element);
44
- clock.next();
45
- const cancelled = await promise;
46
- expect(cancelled).to.be.true;
47
- });
48
- it('should resolve cancelled when opening new overlay', async () => {
49
- const timer = new OverlayTimer({
50
- warmUpDelay: 500,
51
- coolDownDelay: 500,
52
- });
53
- const element1 = document.createElement('div');
54
- const element2 = document.createElement('div');
55
- const promise1 = timer.openTimer(element1);
56
- clock.tick(10);
57
- const promise2 = timer.openTimer(element2);
58
- clock.tick(10);
59
- let cancelled = await promise1;
60
- expect(cancelled).to.be.true;
61
- clock.next();
62
- cancelled = await promise2;
63
- expect(cancelled).to.be.false;
64
- expect(clock.now).to.equal(510);
65
- });
66
- it('should cooldown after closing overlay', async () => {
67
- const timer = new OverlayTimer({
68
- warmUpDelay: 500,
69
- coolDownDelay: 500,
70
- });
71
- const element = document.createElement('div');
72
- let promise = timer.openTimer(element);
73
- clock.next();
74
- timer.close(element);
75
- clock.next();
76
- expect(clock.now).to.equal(1000);
77
- promise = timer.openTimer(element);
78
- clock.next();
79
- const cancelled = await promise;
80
- expect(cancelled).to.be.false;
81
- expect(clock.now).to.equal(1500);
82
- });
83
- it('should open overlay quickly when hot', async () => {
84
- const timer = new OverlayTimer({
85
- warmUpDelay: 500,
86
- coolDownDelay: 500,
87
- });
88
- const element = document.createElement('div');
89
- let promise = timer.openTimer(element);
90
- clock.next();
91
- timer.close(element);
92
- clock.tick(1);
93
- promise = timer.openTimer(element);
94
- clock.next();
95
- const cancelled = await promise;
96
- expect(cancelled).to.be.false;
97
- expect(clock.now).to.equal(501);
98
- });
99
- it('should cooldown after opening and closing overlay multiple times', async () => {
100
- const timer = new OverlayTimer({
101
- warmUpDelay: 500,
102
- coolDownDelay: 500,
103
- });
104
- const element = document.createElement('div');
105
- let promise = timer.openTimer(element);
106
- clock.next();
107
- expect(clock.now).to.equal(500);
108
- timer.close(element);
109
- clock.tick(1);
110
- for (let i = 0; i < 10; i++) {
111
- const element = document.createElement('div');
112
- promise = timer.openTimer(element);
113
- clock.next();
114
- const cancelled = await promise;
115
- expect(cancelled).to.be.false;
116
- timer.close(element);
117
- clock.tick(1);
118
- }
119
- // Wait for cooldown
120
- clock.next();
121
- expect(clock.now).to.equal(1010);
122
- promise = timer.openTimer(element);
123
- clock.next();
124
- const cancelled = await promise;
125
- expect(cancelled).to.be.false;
126
- expect(clock.now).to.equal(1510);
127
- });
128
- });
129
- //# sourceMappingURL=overlay-timer.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"overlay-timer.test.js","sourceRoot":"","sources":["overlay-timer.test.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 { SinonFakeTimers, useFakeTimers } from 'sinon';\nimport { OverlayTimer } from '../src/overlay-timer.js';\nimport { expect } from '@open-wc/testing';\n\ndescribe('Overlays timer', () => {\n let clock: SinonFakeTimers;\n\n beforeEach(() => {\n clock = useFakeTimers();\n });\n\n afterEach(() => {\n clock.restore();\n });\n\n it('should resolve after warmup', async () => {\n const timer = new OverlayTimer({\n warmUpDelay: 500,\n coolDownDelay: 500,\n });\n const element = document.createElement('div');\n const promise = timer.openTimer(element);\n clock.next();\n expect(clock.now).to.equal(500);\n const cancelled = await promise;\n expect(cancelled).to.be.false;\n });\n\n it('should resolve true when cancelled', async () => {\n const timer = new OverlayTimer({\n warmUpDelay: 500,\n coolDownDelay: 500,\n });\n const element = document.createElement('div');\n const promise = timer.openTimer(element);\n clock.tick(10);\n timer.close(element);\n clock.next();\n const cancelled = await promise;\n expect(cancelled).to.be.true;\n });\n\n it('should resolve cancelled when opening new overlay', async () => {\n const timer = new OverlayTimer({\n warmUpDelay: 500,\n coolDownDelay: 500,\n });\n const element1 = document.createElement('div');\n const element2 = document.createElement('div');\n const promise1 = timer.openTimer(element1);\n clock.tick(10);\n const promise2 = timer.openTimer(element2);\n clock.tick(10);\n let cancelled = await promise1;\n expect(cancelled).to.be.true;\n clock.next();\n cancelled = await promise2;\n expect(cancelled).to.be.false;\n expect(clock.now).to.equal(510);\n });\n\n it('should cooldown after closing overlay', async () => {\n const timer = new OverlayTimer({\n warmUpDelay: 500,\n coolDownDelay: 500,\n });\n const element = document.createElement('div');\n let promise = timer.openTimer(element);\n clock.next();\n timer.close(element);\n clock.next();\n expect(clock.now).to.equal(1000);\n promise = timer.openTimer(element);\n clock.next();\n const cancelled = await promise;\n expect(cancelled).to.be.false;\n expect(clock.now).to.equal(1500);\n });\n\n it('should open overlay quickly when hot', async () => {\n const timer = new OverlayTimer({\n warmUpDelay: 500,\n coolDownDelay: 500,\n });\n const element = document.createElement('div');\n let promise = timer.openTimer(element);\n clock.next();\n timer.close(element);\n clock.tick(1);\n promise = timer.openTimer(element);\n clock.next();\n const cancelled = await promise;\n expect(cancelled).to.be.false;\n expect(clock.now).to.equal(501);\n });\n\n it('should cooldown after opening and closing overlay multiple times', async () => {\n const timer = new OverlayTimer({\n warmUpDelay: 500,\n coolDownDelay: 500,\n });\n const element = document.createElement('div');\n let promise = timer.openTimer(element);\n clock.next();\n expect(clock.now).to.equal(500);\n timer.close(element);\n clock.tick(1);\n\n for (let i = 0; i < 10; i++) {\n const element = document.createElement('div');\n promise = timer.openTimer(element);\n clock.next();\n const cancelled = await promise;\n expect(cancelled).to.be.false;\n timer.close(element);\n clock.tick(1);\n }\n\n // Wait for cooldown\n clock.next();\n expect(clock.now).to.equal(1010);\n promise = timer.openTimer(element);\n clock.next();\n const cancelled = await promise;\n expect(cancelled).to.be.false;\n expect(clock.now).to.equal(1510);\n });\n});\n"]}
@@ -1,76 +0,0 @@
1
- /*
2
- Copyright 2020 Adobe. All rights reserved.
3
- This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
- you may not use this file except in compliance with the License. You may obtain a copy
5
- of the License at http://www.apache.org/licenses/LICENSE-2.0
6
-
7
- Unless required by applicable law or agreed to in writing, software distributed under
8
- the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
- OF ANY KIND, either express or implied. See the License for the specific language
10
- governing permissions and limitations under the License.
11
- */
12
- import { elementUpdated, expect, fixture, html, waitUntil, } from '@open-wc/testing';
13
- import '@spectrum-web-components/popover/sp-popover.js';
14
- import '@spectrum-web-components/action-button/sp-action-button.js';
15
- import '@spectrum-web-components/icons-workflow/icons/sp-icon-magnify.js';
16
- import '@spectrum-web-components/popover/sp-popover.js';
17
- import '@spectrum-web-components/overlay/overlay-trigger.js';
18
- import { spy } from 'sinon';
19
- describe('Overlay Trigger - Click', () => {
20
- it('displays `click` declaratively', async () => {
21
- const openedSpy = spy();
22
- const closedSpy = spy();
23
- const el = await fixture((() => html `
24
- <overlay-trigger
25
- placement="right-start"
26
- open="click"
27
- @sp-opened=${() => openedSpy()}
28
- @sp-closed=${() => closedSpy()}
29
- >
30
- <sp-action-button slot="trigger">
31
- <sp-icon-magnify slot="icon"></sp-icon-magnify>
32
- </sp-action-button>
33
- <sp-popover slot="click-content" tip></sp-popover>
34
- </overlay-trigger>
35
- `)());
36
- await elementUpdated(el);
37
- await waitUntil(() => openedSpy.calledOnce, 'click content projected to overlay', { timeout: 2000 });
38
- el.removeAttribute('open');
39
- await elementUpdated(el);
40
- await waitUntil(() => closedSpy.calledOnce, 'click content returned', {
41
- timeout: 2000,
42
- });
43
- });
44
- it('opens a second time', async () => {
45
- const openedSpy = spy();
46
- const closedSpy = spy();
47
- const el = await fixture(html `
48
- <overlay-trigger
49
- placement="right-start"
50
- type="modal"
51
- open="click"
52
- @sp-opened=${() => openedSpy()}
53
- @sp-closed=${() => closedSpy()}
54
- >
55
- <sp-action-button slot="trigger">
56
- <sp-icon-magnify slot="icon"></sp-icon-magnify>
57
- </sp-action-button>
58
- <sp-popover slot="click-content" tip></sp-popover>
59
- </overlay-trigger>
60
- `);
61
- await elementUpdated(el);
62
- const trigger = el.querySelector('[slot=trigger]');
63
- await waitUntil(() => openedSpy.calledOnce, 'click content projected to overlay', { timeout: 2000 });
64
- expect(el.open).to.equal('click');
65
- el.removeAttribute('open');
66
- await elementUpdated(el);
67
- await waitUntil(() => closedSpy.calledOnce, 'click content returned', {
68
- timeout: 2000,
69
- });
70
- expect(el.open).to.be.null;
71
- trigger.click();
72
- await waitUntil(() => openedSpy.callCount === 2, 'click content projected to overlay, again', { timeout: 2000 });
73
- expect(el.open).to.equal('click');
74
- });
75
- });
76
- //# sourceMappingURL=overlay-trigger-click.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"overlay-trigger-click.test.js","sourceRoot":"","sources":["overlay-trigger-click.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;AACF,OAAO,EACH,cAAc,EACd,MAAM,EACN,OAAO,EACP,IAAI,EACJ,SAAS,GACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,gDAAgD,CAAC;AACxD,OAAO,4DAA4D,CAAC;AACpE,OAAO,kEAAkE,CAAC;AAC1E,OAAO,gDAAgD,CAAC;AAExD,OAAO,qDAAqD,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG5B,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,MAAM,OAAO,CACpB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAA;;;;iCAIU,GAAG,EAAE,CAAC,SAAS,EAAE;iCACjB,GAAG,EAAE,CAAC,SAAS,EAAE;;;;;;;aAOrC,CAAC,EAAE,CACP,CAAC;QACF,MAAM,cAAc,CAAC,EAAE,CAAC,CAAC;QAEzB,MAAM,SAAS,CACX,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,EAC1B,oCAAoC,EACpC,EAAE,OAAO,EAAE,IAAI,EAAE,CACpB,CAAC;QAEF,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,cAAc,CAAC,EAAE,CAAC,CAAC;QAEzB,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,wBAAwB,EAAE;YAClE,OAAO,EAAE,IAAI;SAChB,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;QACjC,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,MAAM,OAAO,CAAiB,IAAI,CAAA;;;;;6BAKxB,GAAG,EAAE,CAAC,SAAS,EAAE;6BACjB,GAAG,EAAE,CAAC,SAAS,EAAE;;;;;;;SAOrC,CAAC,CAAC;QACH,MAAM,cAAc,CAAC,EAAE,CAAC,CAAC;QACzB,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAiB,CAAC;QAEnE,MAAM,SAAS,CACX,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,EAC1B,oCAAoC,EACpC,EAAE,OAAO,EAAE,IAAI,EAAE,CACpB,CAAC;QACF,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAElC,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,cAAc,CAAC,EAAE,CAAC,CAAC;QAEzB,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,wBAAwB,EAAE;YAClE,OAAO,EAAE,IAAI;SAChB,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAE3B,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,SAAS,CACX,GAAG,EAAE,CAAC,SAAS,CAAC,SAAS,KAAK,CAAC,EAC/B,2CAA2C,EAC3C,EAAE,OAAO,EAAE,IAAI,EAAE,CACpB,CAAC;QACF,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,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 {\n elementUpdated,\n expect,\n fixture,\n html,\n waitUntil,\n} from '@open-wc/testing';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-magnify.js';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport { OverlayTrigger } from '..';\nimport '@spectrum-web-components/overlay/overlay-trigger.js';\nimport { spy } from 'sinon';\nimport { ActionButton } from '@spectrum-web-components/action-button';\n\ndescribe('Overlay Trigger - Click', () => {\n it('displays `click` declaratively', async () => {\n const openedSpy = spy();\n const closedSpy = spy();\n const el = await fixture<OverlayTrigger>(\n (() => html`\n <overlay-trigger\n placement=\"right-start\"\n open=\"click\"\n @sp-opened=${() => openedSpy()}\n @sp-closed=${() => closedSpy()}\n >\n <sp-action-button slot=\"trigger\">\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-popover slot=\"click-content\" tip></sp-popover>\n </overlay-trigger>\n `)()\n );\n await elementUpdated(el);\n\n await waitUntil(\n () => openedSpy.calledOnce,\n 'click content projected to overlay',\n { timeout: 2000 }\n );\n\n el.removeAttribute('open');\n await elementUpdated(el);\n\n await waitUntil(() => closedSpy.calledOnce, 'click content returned', {\n timeout: 2000,\n });\n });\n it('opens a second time', async () => {\n const openedSpy = spy();\n const closedSpy = spy();\n const el = await fixture<OverlayTrigger>(html`\n <overlay-trigger\n placement=\"right-start\"\n type=\"modal\"\n open=\"click\"\n @sp-opened=${() => openedSpy()}\n @sp-closed=${() => closedSpy()}\n >\n <sp-action-button slot=\"trigger\">\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-popover slot=\"click-content\" tip></sp-popover>\n </overlay-trigger>\n `);\n await elementUpdated(el);\n const trigger = el.querySelector('[slot=trigger]') as ActionButton;\n\n await waitUntil(\n () => openedSpy.calledOnce,\n 'click content projected to overlay',\n { timeout: 2000 }\n );\n expect(el.open).to.equal('click');\n\n el.removeAttribute('open');\n await elementUpdated(el);\n\n await waitUntil(() => closedSpy.calledOnce, 'click content returned', {\n timeout: 2000,\n });\n\n expect(el.open).to.be.null;\n\n trigger.click();\n await waitUntil(\n () => openedSpy.callCount === 2,\n 'click content projected to overlay, again',\n { timeout: 2000 }\n );\n expect(el.open).to.equal('click');\n });\n});\n"]}