@spectrum-web-components/overlay 0.17.1-devmode2.0 → 0.18.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.
- package/README.md +3 -0
- package/active-overlay.dev.js +1 -0
- package/active-overlay.dev.js.map +1 -1
- package/active-overlay.js +1 -2
- package/active-overlay.js.map +2 -2
- package/overlay-trigger.dev.js +1 -0
- package/overlay-trigger.dev.js.map +1 -1
- package/overlay-trigger.js +1 -2
- package/overlay-trigger.js.map +2 -2
- package/package.json +6 -6
- package/src/ActiveOverlay.dev.js +57 -23
- package/src/ActiveOverlay.dev.js.map +2 -2
- package/src/ActiveOverlay.js +8 -437
- package/src/ActiveOverlay.js.map +2 -2
- package/src/OverlayTrigger.dev.js +51 -18
- package/src/OverlayTrigger.dev.js.map +1 -1
- package/src/OverlayTrigger.js +2 -265
- package/src/OverlayTrigger.js.map +2 -2
- package/src/VirtualTrigger.dev.js +1 -0
- package/src/VirtualTrigger.dev.js.map +1 -1
- package/src/VirtualTrigger.js +1 -29
- package/src/VirtualTrigger.js.map +2 -2
- package/src/active-overlay.css.dev.js +1 -0
- package/src/active-overlay.css.dev.js.map +1 -1
- package/src/active-overlay.css.js +2 -4
- package/src/active-overlay.css.js.map +2 -2
- package/src/index.dev.js +1 -0
- package/src/index.dev.js.map +1 -1
- package/src/index.js +1 -6
- package/src/index.js.map +1 -1
- package/src/loader.dev.js +1 -0
- package/src/loader.dev.js.map +1 -1
- package/src/loader.js +1 -4
- package/src/loader.js.map +2 -2
- package/src/overlay-events.dev.js +1 -0
- package/src/overlay-events.dev.js.map +1 -1
- package/src/overlay-events.js +1 -6
- package/src/overlay-events.js.map +2 -2
- package/src/overlay-stack.dev.js +95 -44
- package/src/overlay-stack.dev.js.map +3 -3
- package/src/overlay-stack.js +2 -405
- package/src/overlay-stack.js.map +3 -3
- package/src/overlay-timer.dev.js +1 -0
- package/src/overlay-timer.dev.js.map +1 -1
- package/src/overlay-timer.js +1 -70
- package/src/overlay-timer.js.map +2 -2
- package/src/overlay-trigger.css.dev.js +1 -0
- package/src/overlay-trigger.css.dev.js.map +1 -1
- package/src/overlay-trigger.css.js +2 -4
- package/src/overlay-trigger.css.js.map +2 -2
- package/src/overlay-types.dev.js +1 -0
- package/src/overlay-types.js +1 -0
- package/src/overlay-utils.dev.js +4 -1
- package/src/overlay-utils.dev.js.map +1 -1
- package/src/overlay-utils.js +1 -27
- package/src/overlay-utils.js.map +2 -2
- package/src/overlay.dev.js +1 -0
- package/src/overlay.dev.js.map +1 -1
- package/src/overlay.js +1 -84
- package/src/overlay.js.map +2 -2
- package/stories/overlay-story-components.js +17 -5
- package/stories/overlay-story-components.js.map +2 -2
- package/stories/overlay.stories.js +24 -8
- package/stories/overlay.stories.js.map +1 -1
- package/sync/overlay-trigger.dev.js +1 -0
- package/sync/overlay-trigger.dev.js.map +1 -1
- package/sync/overlay-trigger.js +1 -6
- package/sync/overlay-trigger.js.map +2 -2
- package/test/benchmark/basic-test.js +5 -2
- package/test/benchmark/basic-test.js.map +1 -1
- package/test/overlay-lifecycle.test.js +51 -14
- package/test/overlay-lifecycle.test.js.map +1 -1
- package/test/overlay-timer.test.js +1 -0
- package/test/overlay-timer.test.js.map +2 -2
- package/test/overlay-trigger-click.test.js +20 -5
- package/test/overlay-trigger-click.test.js.map +1 -1
- package/test/overlay-trigger-extended.test.js +19 -6
- package/test/overlay-trigger-extended.test.js.map +1 -1
- package/test/overlay-trigger-hover-click.test.js +7 -2
- package/test/overlay-trigger-hover-click.test.js.map +1 -1
- package/test/overlay-trigger-hover.test.js +110 -19
- package/test/overlay-trigger-hover.test.js.map +2 -2
- package/test/overlay-trigger-longpress.test.js +85 -29
- package/test/overlay-trigger-longpress.test.js.map +2 -2
- package/test/overlay-trigger-sync.test.js +183 -56
- package/test/overlay-trigger-sync.test.js.map +2 -2
- package/test/overlay-trigger.test.js +183 -56
- package/test/overlay-trigger.test.js.map +2 -2
- package/test/overlay.test-vrt.js +1 -0
- package/test/overlay.test-vrt.js.map +1 -1
- package/test/overlay.test.js +162 -74
- package/test/overlay.test.js.map +1 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
var __defProp = Object.defineProperty;
|
|
2
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
4
|
var __decorateClass = (decorators, target, key, kind) => {
|
|
@@ -96,12 +97,16 @@ const _OverlayTrigger = class extends SpectrumElement {
|
|
|
96
97
|
}
|
|
97
98
|
}
|
|
98
99
|
manageLongpressDescriptor() {
|
|
99
|
-
const trigger = this.querySelector(
|
|
100
|
+
const trigger = this.querySelector(
|
|
101
|
+
'[slot="trigger"]'
|
|
102
|
+
);
|
|
100
103
|
const ariaDescribedby = trigger.getAttribute("aria-describedby");
|
|
101
104
|
let descriptors = ariaDescribedby ? ariaDescribedby.split(/\s+/) : [];
|
|
102
105
|
if (this.hasLongpressContent) {
|
|
103
106
|
if (!this.longpressDescriptor) {
|
|
104
|
-
this.longpressDescriptor = document.createElement(
|
|
107
|
+
this.longpressDescriptor = document.createElement(
|
|
108
|
+
"div"
|
|
109
|
+
);
|
|
105
110
|
this.longpressDescriptor.id = this._longpressId;
|
|
106
111
|
this.longpressDescriptor.slot = this._longpressId;
|
|
107
112
|
}
|
|
@@ -112,7 +117,9 @@ const _OverlayTrigger = class extends SpectrumElement {
|
|
|
112
117
|
} else {
|
|
113
118
|
if (this.longpressDescriptor)
|
|
114
119
|
this.longpressDescriptor.remove();
|
|
115
|
-
descriptors = descriptors.filter(
|
|
120
|
+
descriptors = descriptors.filter(
|
|
121
|
+
(descriptor) => descriptor !== this._longpressId
|
|
122
|
+
);
|
|
116
123
|
}
|
|
117
124
|
if (descriptors.length) {
|
|
118
125
|
trigger.setAttribute("aria-describedby", descriptors.join(" "));
|
|
@@ -146,11 +153,22 @@ const _OverlayTrigger = class extends SpectrumElement {
|
|
|
146
153
|
openHandlers[(_a = this.open) != null ? _a : "none"]();
|
|
147
154
|
}
|
|
148
155
|
async openOverlay(target, interaction, content, options) {
|
|
149
|
-
this.openStatePromise = new Promise(
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
156
|
+
this.openStatePromise = new Promise(
|
|
157
|
+
(res) => this.openStateResolver = res
|
|
158
|
+
);
|
|
159
|
+
this.addEventListener(
|
|
160
|
+
"sp-opened",
|
|
161
|
+
() => {
|
|
162
|
+
this.openStateResolver();
|
|
163
|
+
},
|
|
164
|
+
{ once: true }
|
|
165
|
+
);
|
|
166
|
+
return _OverlayTrigger.openOverlay(
|
|
167
|
+
target,
|
|
168
|
+
interaction,
|
|
169
|
+
content,
|
|
170
|
+
options
|
|
171
|
+
);
|
|
154
172
|
}
|
|
155
173
|
get overlayOptions() {
|
|
156
174
|
return {
|
|
@@ -206,7 +224,12 @@ const _OverlayTrigger = class extends SpectrumElement {
|
|
|
206
224
|
const { targetContent, clickContent } = this;
|
|
207
225
|
this.closeAllOverlays();
|
|
208
226
|
this.prepareToFocusOverlayContent(clickContent);
|
|
209
|
-
this.closeClickOverlay = this.openOverlay(
|
|
227
|
+
this.closeClickOverlay = this.openOverlay(
|
|
228
|
+
targetContent,
|
|
229
|
+
this.type ? this.type : "click",
|
|
230
|
+
clickContent,
|
|
231
|
+
this.overlayOptions
|
|
232
|
+
);
|
|
210
233
|
}
|
|
211
234
|
async onTriggerLongpress() {
|
|
212
235
|
var _a, _b;
|
|
@@ -217,11 +240,16 @@ const _OverlayTrigger = class extends SpectrumElement {
|
|
|
217
240
|
this.closeAllOverlays();
|
|
218
241
|
this.prepareToFocusOverlayContent(longpressContent);
|
|
219
242
|
const notImmediatelyClosable = ((_b = (_a = this._longpressEvent) == null ? void 0 : _a.detail) == null ? void 0 : _b.source) !== "keyboard";
|
|
220
|
-
this.closeLongpressOverlay = this.openOverlay(
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
243
|
+
this.closeLongpressOverlay = this.openOverlay(
|
|
244
|
+
targetContent,
|
|
245
|
+
this.type ? this.type : "longpress",
|
|
246
|
+
longpressContent,
|
|
247
|
+
{
|
|
248
|
+
...this.overlayOptions,
|
|
249
|
+
receivesFocus: "auto",
|
|
250
|
+
notImmediatelyClosable
|
|
251
|
+
}
|
|
252
|
+
);
|
|
225
253
|
this._longpressEvent = void 0;
|
|
226
254
|
}
|
|
227
255
|
async onTriggerMouseEnter() {
|
|
@@ -232,10 +260,15 @@ const _OverlayTrigger = class extends SpectrumElement {
|
|
|
232
260
|
this.abortOverlay = res;
|
|
233
261
|
});
|
|
234
262
|
const { targetContent, hoverContent } = this;
|
|
235
|
-
this.closeHoverOverlay = this.openOverlay(
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
263
|
+
this.closeHoverOverlay = this.openOverlay(
|
|
264
|
+
targetContent,
|
|
265
|
+
"hover",
|
|
266
|
+
hoverContent,
|
|
267
|
+
{
|
|
268
|
+
abortPromise,
|
|
269
|
+
...this.overlayOptions
|
|
270
|
+
}
|
|
271
|
+
);
|
|
239
272
|
}
|
|
240
273
|
onClickSlotChange(event) {
|
|
241
274
|
this.clickContent = this.extractSlotContentFromEvent(event);
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["OverlayTrigger.ts"],
|
|
4
4
|
"sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n CSSResultArray,\n html,\n PropertyValues,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n state,\n} 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';\nimport {\n isAndroid,\n isIOS,\n} from '@spectrum-web-components/shared/src/platform.js';\n\nimport {\n OverlayOpenCloseDetail,\n OverlayOptions,\n OverlayTriggerInteractions,\n Placement,\n TriggerInteractions,\n} from './overlay-types';\nimport { openOverlay } from './loader.dev.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\nexport const LONGPRESS_INSTRUCTIONS = {\n touch: 'Double tap and long press for additional options',\n keyboard: 'Press Space or Alt+Down Arrow for additional options',\n mouse: 'Click and hold for additional options',\n};\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 SpectrumElement {\n private closeClickOverlay?: Promise<() => void>;\n private closeLongpressOverlay?: Promise<() => void>;\n private closeHoverOverlay?: Promise<() => void>;\n\n public static override 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?: OverlayTriggerInteractions;\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 @state()\n public hasLongpressContent = false;\n\n private longpressDescriptor?: HTMLElement;\n private clickContent?: HTMLElement;\n private longpressContent?: HTMLElement;\n private hoverContent?: HTMLElement;\n private targetContent?: HTMLElement;\n\n private _longpressId = `longpress-describedby-descriptor`;\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 override 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 <slot name=${this._longpressId}></slot>\n </div>\n `;\n /* eslint-enable lit-a11y/click-events-have-key-events */\n }\n\n protected override updated(changes: PropertyValues<this>): 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 if (changes.has('hasLongpressContent')) {\n this.manageLongpressDescriptor();\n }\n }\n\n protected manageLongpressDescriptor(): void {\n const trigger = this.querySelector(\n '[slot=\"trigger\"]'\n ) as SpectrumElement;\n const ariaDescribedby = trigger.getAttribute('aria-describedby');\n let descriptors = ariaDescribedby ? ariaDescribedby.split(/\\s+/) : [];\n\n if (this.hasLongpressContent) {\n if (!this.longpressDescriptor) {\n this.longpressDescriptor = document.createElement(\n 'div'\n ) as HTMLElement;\n\n this.longpressDescriptor.id = this._longpressId;\n this.longpressDescriptor.slot = this._longpressId;\n }\n const messageType = isIOS() || isAndroid() ? 'touch' : 'keyboard';\n this.longpressDescriptor.textContent =\n LONGPRESS_INSTRUCTIONS[messageType];\n this.appendChild(this.longpressDescriptor);\n descriptors.push(this._longpressId);\n } else {\n if (this.longpressDescriptor) this.longpressDescriptor.remove();\n descriptors = descriptors.filter(\n (descriptor) => descriptor !== this._longpressId\n );\n }\n if (descriptors.length) {\n trigger.setAttribute('aria-describedby', descriptors.join(' '));\n } else {\n trigger.removeAttribute('aria-describedby');\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' || this.open === 'hover'\n ? undefined\n : 'auto',\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.hasLongpressContent =\n !!this.longpressContent || !!this.closeLongpressOverlay;\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 override async getUpdateComplete(): Promise<boolean> {\n const complete = (await super.getUpdateComplete()) as boolean;\n await this.openStatePromise;\n return complete;\n }\n\n public override disconnectedCallback(): void {\n this.closeAllOverlays();\n super.disconnectedCallback();\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/src/OverlayTrigger.js
CHANGED
|
@@ -1,58 +1,4 @@
|
|
|
1
|
-
var
|
|
2
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
-
var __decorateClass = (decorators, target, key, kind) => {
|
|
4
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
5
|
-
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
6
|
-
if (decorator = decorators[i])
|
|
7
|
-
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
8
|
-
if (kind && result)
|
|
9
|
-
__defProp(target, key, result);
|
|
10
|
-
return result;
|
|
11
|
-
};
|
|
12
|
-
import {
|
|
13
|
-
html,
|
|
14
|
-
SpectrumElement
|
|
15
|
-
} from "@spectrum-web-components/base";
|
|
16
|
-
import {
|
|
17
|
-
property,
|
|
18
|
-
state
|
|
19
|
-
} from "@spectrum-web-components/base/src/decorators.js";
|
|
20
|
-
import { firstFocusableIn } from "@spectrum-web-components/shared/src/first-focusable-in.js";
|
|
21
|
-
import {
|
|
22
|
-
isAndroid,
|
|
23
|
-
isIOS
|
|
24
|
-
} from "@spectrum-web-components/shared/src/platform.js";
|
|
25
|
-
import { openOverlay } from "./loader.js";
|
|
26
|
-
import overlayTriggerStyles from "./overlay-trigger.css.js";
|
|
27
|
-
export const LONGPRESS_INSTRUCTIONS = {
|
|
28
|
-
touch: "Double tap and long press for additional options",
|
|
29
|
-
keyboard: "Press Space or Alt+Down Arrow for additional options",
|
|
30
|
-
mouse: "Click and hold for additional options"
|
|
31
|
-
};
|
|
32
|
-
const _OverlayTrigger = class extends SpectrumElement {
|
|
33
|
-
constructor() {
|
|
34
|
-
super(...arguments);
|
|
35
|
-
this.placement = "bottom";
|
|
36
|
-
this.offset = 6;
|
|
37
|
-
this.disabled = false;
|
|
38
|
-
this.hasLongpressContent = false;
|
|
39
|
-
this._longpressId = `longpress-describedby-descriptor`;
|
|
40
|
-
this.abortOverlay = () => {
|
|
41
|
-
return;
|
|
42
|
-
};
|
|
43
|
-
this.openStatePromise = Promise.resolve();
|
|
44
|
-
}
|
|
45
|
-
static get styles() {
|
|
46
|
-
return [overlayTriggerStyles];
|
|
47
|
-
}
|
|
48
|
-
handleClose(event) {
|
|
49
|
-
if (event && event.detail.interaction !== this.open && event.detail.interaction !== this.type) {
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
this.removeAttribute("open");
|
|
53
|
-
}
|
|
54
|
-
render() {
|
|
55
|
-
return html`
|
|
1
|
+
"use strict";var c=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var n=(p,i,e,t)=>{for(var o=t>1?void 0:t?h(i,e):i,s=p.length-1,r;s>=0;s--)(r=p[s])&&(o=(t?r(i,e,o):r(o))||o);return t&&o&&c(i,e,o),o};import{html as v,SpectrumElement as d}from"@spectrum-web-components/base";import{property as l,state as g}from"@spectrum-web-components/base/src/decorators.js";import{firstFocusableIn as m}from"@spectrum-web-components/shared/src/first-focusable-in.js";import{isAndroid as u,isIOS as y}from"@spectrum-web-components/shared/src/platform.js";import{openOverlay as C}from"./loader.js";import f from"./overlay-trigger.css.js";export const LONGPRESS_INSTRUCTIONS={touch:"Double tap and long press for additional options",keyboard:"Press Space or Alt+Down Arrow for additional options",mouse:"Click and hold for additional options"};const a=class extends d{constructor(){super(...arguments);this.placement="bottom";this.offset=6;this.disabled=!1;this.hasLongpressContent=!1;this._longpressId="longpress-describedby-descriptor";this.abortOverlay=()=>{};this.openStatePromise=Promise.resolve()}static get styles(){return[f]}handleClose(e){e&&e.detail.interaction!==this.open&&e.detail.interaction!==this.type||this.removeAttribute("open")}render(){return v`
|
|
56
2
|
<slot
|
|
57
3
|
id="trigger"
|
|
58
4
|
@click=${this.onTrigger}
|
|
@@ -80,214 +26,5 @@ const _OverlayTrigger = class extends SpectrumElement {
|
|
|
80
26
|
></slot>
|
|
81
27
|
<slot name=${this._longpressId}></slot>
|
|
82
28
|
</div>
|
|
83
|
-
|
|
84
|
-
}
|
|
85
|
-
updated(changes) {
|
|
86
|
-
super.updated(changes);
|
|
87
|
-
if (this.disabled && changes.has("disabled")) {
|
|
88
|
-
this.closeAllOverlays();
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
if (changes.has("open")) {
|
|
92
|
-
this.manageOpen();
|
|
93
|
-
}
|
|
94
|
-
if (changes.has("hasLongpressContent")) {
|
|
95
|
-
this.manageLongpressDescriptor();
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
manageLongpressDescriptor() {
|
|
99
|
-
const trigger = this.querySelector('[slot="trigger"]');
|
|
100
|
-
const ariaDescribedby = trigger.getAttribute("aria-describedby");
|
|
101
|
-
let descriptors = ariaDescribedby ? ariaDescribedby.split(/\s+/) : [];
|
|
102
|
-
if (this.hasLongpressContent) {
|
|
103
|
-
if (!this.longpressDescriptor) {
|
|
104
|
-
this.longpressDescriptor = document.createElement("div");
|
|
105
|
-
this.longpressDescriptor.id = this._longpressId;
|
|
106
|
-
this.longpressDescriptor.slot = this._longpressId;
|
|
107
|
-
}
|
|
108
|
-
const messageType = isIOS() || isAndroid() ? "touch" : "keyboard";
|
|
109
|
-
this.longpressDescriptor.textContent = LONGPRESS_INSTRUCTIONS[messageType];
|
|
110
|
-
this.appendChild(this.longpressDescriptor);
|
|
111
|
-
descriptors.push(this._longpressId);
|
|
112
|
-
} else {
|
|
113
|
-
if (this.longpressDescriptor)
|
|
114
|
-
this.longpressDescriptor.remove();
|
|
115
|
-
descriptors = descriptors.filter((descriptor) => descriptor !== this._longpressId);
|
|
116
|
-
}
|
|
117
|
-
if (descriptors.length) {
|
|
118
|
-
trigger.setAttribute("aria-describedby", descriptors.join(" "));
|
|
119
|
-
} else {
|
|
120
|
-
trigger.removeAttribute("aria-describedby");
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
closeAllOverlays() {
|
|
124
|
-
if (this.abortOverlay)
|
|
125
|
-
this.abortOverlay(true);
|
|
126
|
-
[
|
|
127
|
-
"closeClickOverlay",
|
|
128
|
-
"closeHoverOverlay",
|
|
129
|
-
"closeLongpressOverlay"
|
|
130
|
-
].forEach(async (name) => {
|
|
131
|
-
const canClose = this[name];
|
|
132
|
-
if (canClose == null)
|
|
133
|
-
return;
|
|
134
|
-
delete this[name];
|
|
135
|
-
(await canClose)();
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
manageOpen() {
|
|
139
|
-
var _a;
|
|
140
|
-
const openHandlers = {
|
|
141
|
-
click: () => this.onTriggerClick(),
|
|
142
|
-
hover: () => this.onTriggerMouseEnter(),
|
|
143
|
-
longpress: () => this.onTriggerLongpress(),
|
|
144
|
-
none: () => this.closeAllOverlays()
|
|
145
|
-
};
|
|
146
|
-
openHandlers[(_a = this.open) != null ? _a : "none"]();
|
|
147
|
-
}
|
|
148
|
-
async openOverlay(target, interaction, content, options) {
|
|
149
|
-
this.openStatePromise = new Promise((res) => this.openStateResolver = res);
|
|
150
|
-
this.addEventListener("sp-opened", () => {
|
|
151
|
-
this.openStateResolver();
|
|
152
|
-
}, { once: true });
|
|
153
|
-
return _OverlayTrigger.openOverlay(target, interaction, content, options);
|
|
154
|
-
}
|
|
155
|
-
get overlayOptions() {
|
|
156
|
-
return {
|
|
157
|
-
offset: this.offset,
|
|
158
|
-
placement: this.placement,
|
|
159
|
-
receivesFocus: !this.type || this.type === "inline" || this.open === "hover" ? void 0 : "auto"
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
onTrigger(event) {
|
|
163
|
-
if (this.disabled)
|
|
164
|
-
return;
|
|
165
|
-
switch (event.type) {
|
|
166
|
-
case "mouseenter":
|
|
167
|
-
case "focusin":
|
|
168
|
-
if (!this.open && this.hoverContent) {
|
|
169
|
-
this.open = "hover";
|
|
170
|
-
}
|
|
171
|
-
return;
|
|
172
|
-
case "mouseleave":
|
|
173
|
-
case "focusout":
|
|
174
|
-
if (this.open === "hover") {
|
|
175
|
-
this.handleClose();
|
|
176
|
-
}
|
|
177
|
-
return;
|
|
178
|
-
case "click":
|
|
179
|
-
if (this.clickContent) {
|
|
180
|
-
this.open = event.type;
|
|
181
|
-
} else if (this.closeHoverOverlay) {
|
|
182
|
-
event.preventDefault();
|
|
183
|
-
}
|
|
184
|
-
return;
|
|
185
|
-
case "longpress":
|
|
186
|
-
if (this.longpressContent) {
|
|
187
|
-
this._longpressEvent = event;
|
|
188
|
-
this.open = event.type;
|
|
189
|
-
}
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
prepareToFocusOverlayContent(overlayContent) {
|
|
194
|
-
if (this.type !== "modal") {
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
|
-
const firstFocusable = firstFocusableIn(overlayContent);
|
|
198
|
-
if (!firstFocusable) {
|
|
199
|
-
overlayContent.tabIndex = 0;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
async onTriggerClick() {
|
|
203
|
-
if (!this.targetContent || !this.clickContent || this.closeClickOverlay) {
|
|
204
|
-
return;
|
|
205
|
-
}
|
|
206
|
-
const { targetContent, clickContent } = this;
|
|
207
|
-
this.closeAllOverlays();
|
|
208
|
-
this.prepareToFocusOverlayContent(clickContent);
|
|
209
|
-
this.closeClickOverlay = this.openOverlay(targetContent, this.type ? this.type : "click", clickContent, this.overlayOptions);
|
|
210
|
-
}
|
|
211
|
-
async onTriggerLongpress() {
|
|
212
|
-
var _a, _b;
|
|
213
|
-
if (!this.targetContent || !this.longpressContent || this.closeLongpressOverlay) {
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
|
-
const { targetContent, longpressContent } = this;
|
|
217
|
-
this.closeAllOverlays();
|
|
218
|
-
this.prepareToFocusOverlayContent(longpressContent);
|
|
219
|
-
const notImmediatelyClosable = ((_b = (_a = this._longpressEvent) == null ? void 0 : _a.detail) == null ? void 0 : _b.source) !== "keyboard";
|
|
220
|
-
this.closeLongpressOverlay = this.openOverlay(targetContent, this.type ? this.type : "longpress", longpressContent, {
|
|
221
|
-
...this.overlayOptions,
|
|
222
|
-
receivesFocus: "auto",
|
|
223
|
-
notImmediatelyClosable
|
|
224
|
-
});
|
|
225
|
-
this._longpressEvent = void 0;
|
|
226
|
-
}
|
|
227
|
-
async onTriggerMouseEnter() {
|
|
228
|
-
if (!this.targetContent || !this.hoverContent || this.closeHoverOverlay) {
|
|
229
|
-
return;
|
|
230
|
-
}
|
|
231
|
-
const abortPromise = new Promise((res) => {
|
|
232
|
-
this.abortOverlay = res;
|
|
233
|
-
});
|
|
234
|
-
const { targetContent, hoverContent } = this;
|
|
235
|
-
this.closeHoverOverlay = this.openOverlay(targetContent, "hover", hoverContent, {
|
|
236
|
-
abortPromise,
|
|
237
|
-
...this.overlayOptions
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
onClickSlotChange(event) {
|
|
241
|
-
this.clickContent = this.extractSlotContentFromEvent(event);
|
|
242
|
-
this.manageOpen();
|
|
243
|
-
}
|
|
244
|
-
onLongpressSlotChange(event) {
|
|
245
|
-
this.longpressContent = this.extractSlotContentFromEvent(event);
|
|
246
|
-
this.hasLongpressContent = !!this.longpressContent || !!this.closeLongpressOverlay;
|
|
247
|
-
this.manageOpen();
|
|
248
|
-
}
|
|
249
|
-
onHoverSlotChange(event) {
|
|
250
|
-
this.hoverContent = this.extractSlotContentFromEvent(event);
|
|
251
|
-
this.manageOpen();
|
|
252
|
-
}
|
|
253
|
-
onTargetSlotChange(event) {
|
|
254
|
-
this.targetContent = this.extractSlotContentFromEvent(event);
|
|
255
|
-
}
|
|
256
|
-
extractSlotContentFromEvent(event) {
|
|
257
|
-
const slot = event.target;
|
|
258
|
-
const nodes = slot.assignedNodes({ flatten: true });
|
|
259
|
-
return nodes.find((node) => node instanceof HTMLElement);
|
|
260
|
-
}
|
|
261
|
-
async getUpdateComplete() {
|
|
262
|
-
const complete = await super.getUpdateComplete();
|
|
263
|
-
await this.openStatePromise;
|
|
264
|
-
return complete;
|
|
265
|
-
}
|
|
266
|
-
disconnectedCallback() {
|
|
267
|
-
this.closeAllOverlays();
|
|
268
|
-
super.disconnectedCallback();
|
|
269
|
-
}
|
|
270
|
-
};
|
|
271
|
-
export let OverlayTrigger = _OverlayTrigger;
|
|
272
|
-
OverlayTrigger.openOverlay = async (target, interaction, content, options) => {
|
|
273
|
-
return openOverlay(target, interaction, content, options);
|
|
274
|
-
};
|
|
275
|
-
__decorateClass([
|
|
276
|
-
property({ reflect: true })
|
|
277
|
-
], OverlayTrigger.prototype, "placement", 2);
|
|
278
|
-
__decorateClass([
|
|
279
|
-
property()
|
|
280
|
-
], OverlayTrigger.prototype, "type", 2);
|
|
281
|
-
__decorateClass([
|
|
282
|
-
property({ type: Number, reflect: true })
|
|
283
|
-
], OverlayTrigger.prototype, "offset", 2);
|
|
284
|
-
__decorateClass([
|
|
285
|
-
property({ reflect: true })
|
|
286
|
-
], OverlayTrigger.prototype, "open", 2);
|
|
287
|
-
__decorateClass([
|
|
288
|
-
property({ type: Boolean, reflect: true })
|
|
289
|
-
], OverlayTrigger.prototype, "disabled", 2);
|
|
290
|
-
__decorateClass([
|
|
291
|
-
state()
|
|
292
|
-
], OverlayTrigger.prototype, "hasLongpressContent", 2);
|
|
29
|
+
`}updated(e){if(super.updated(e),this.disabled&&e.has("disabled")){this.closeAllOverlays();return}e.has("open")&&this.manageOpen(),e.has("hasLongpressContent")&&this.manageLongpressDescriptor()}manageLongpressDescriptor(){const e=this.querySelector('[slot="trigger"]'),t=e.getAttribute("aria-describedby");let o=t?t.split(/\s+/):[];if(this.hasLongpressContent){this.longpressDescriptor||(this.longpressDescriptor=document.createElement("div"),this.longpressDescriptor.id=this._longpressId,this.longpressDescriptor.slot=this._longpressId);const s=y()||u()?"touch":"keyboard";this.longpressDescriptor.textContent=LONGPRESS_INSTRUCTIONS[s],this.appendChild(this.longpressDescriptor),o.push(this._longpressId)}else this.longpressDescriptor&&this.longpressDescriptor.remove(),o=o.filter(s=>s!==this._longpressId);o.length?e.setAttribute("aria-describedby",o.join(" ")):e.removeAttribute("aria-describedby")}closeAllOverlays(){this.abortOverlay&&this.abortOverlay(!0),["closeClickOverlay","closeHoverOverlay","closeLongpressOverlay"].forEach(async e=>{const t=this[e];t!=null&&(delete this[e],(await t)())})}manageOpen(){var t;({click:()=>this.onTriggerClick(),hover:()=>this.onTriggerMouseEnter(),longpress:()=>this.onTriggerLongpress(),none:()=>this.closeAllOverlays()})[(t=this.open)!=null?t:"none"]()}async openOverlay(e,t,o,s){return this.openStatePromise=new Promise(r=>this.openStateResolver=r),this.addEventListener("sp-opened",()=>{this.openStateResolver()},{once:!0}),a.openOverlay(e,t,o,s)}get overlayOptions(){return{offset:this.offset,placement:this.placement,receivesFocus:!this.type||this.type==="inline"||this.open==="hover"?void 0:"auto"}}onTrigger(e){if(!this.disabled)switch(e.type){case"mouseenter":case"focusin":!this.open&&this.hoverContent&&(this.open="hover");return;case"mouseleave":case"focusout":this.open==="hover"&&this.handleClose();return;case"click":this.clickContent?this.open=e.type:this.closeHoverOverlay&&e.preventDefault();return;case"longpress":this.longpressContent&&(this._longpressEvent=e,this.open=e.type);return}}prepareToFocusOverlayContent(e){if(this.type!=="modal")return;m(e)||(e.tabIndex=0)}async onTriggerClick(){if(!this.targetContent||!this.clickContent||this.closeClickOverlay)return;const{targetContent:e,clickContent:t}=this;this.closeAllOverlays(),this.prepareToFocusOverlayContent(t),this.closeClickOverlay=this.openOverlay(e,this.type?this.type:"click",t,this.overlayOptions)}async onTriggerLongpress(){var s,r;if(!this.targetContent||!this.longpressContent||this.closeLongpressOverlay)return;const{targetContent:e,longpressContent:t}=this;this.closeAllOverlays(),this.prepareToFocusOverlayContent(t);const o=((r=(s=this._longpressEvent)==null?void 0:s.detail)==null?void 0:r.source)!=="keyboard";this.closeLongpressOverlay=this.openOverlay(e,this.type?this.type:"longpress",t,{...this.overlayOptions,receivesFocus:"auto",notImmediatelyClosable:o}),this._longpressEvent=void 0}async onTriggerMouseEnter(){if(!this.targetContent||!this.hoverContent||this.closeHoverOverlay)return;const e=new Promise(s=>{this.abortOverlay=s}),{targetContent:t,hoverContent:o}=this;this.closeHoverOverlay=this.openOverlay(t,"hover",o,{abortPromise:e,...this.overlayOptions})}onClickSlotChange(e){this.clickContent=this.extractSlotContentFromEvent(e),this.manageOpen()}onLongpressSlotChange(e){this.longpressContent=this.extractSlotContentFromEvent(e),this.hasLongpressContent=!!this.longpressContent||!!this.closeLongpressOverlay,this.manageOpen()}onHoverSlotChange(e){this.hoverContent=this.extractSlotContentFromEvent(e),this.manageOpen()}onTargetSlotChange(e){this.targetContent=this.extractSlotContentFromEvent(e)}extractSlotContentFromEvent(e){return e.target.assignedNodes({flatten:!0}).find(s=>s instanceof HTMLElement)}async getUpdateComplete(){const e=await super.getUpdateComplete();return await this.openStatePromise,e}disconnectedCallback(){this.closeAllOverlays(),super.disconnectedCallback()}};export let OverlayTrigger=a;OverlayTrigger.openOverlay=async(e,t,o,s)=>C(e,t,o,s),n([l({reflect:!0})],OverlayTrigger.prototype,"placement",2),n([l()],OverlayTrigger.prototype,"type",2),n([l({type:Number,reflect:!0})],OverlayTrigger.prototype,"offset",2),n([l({reflect:!0})],OverlayTrigger.prototype,"open",2),n([l({type:Boolean,reflect:!0})],OverlayTrigger.prototype,"disabled",2),n([g()],OverlayTrigger.prototype,"hasLongpressContent",2);
|
|
293
30
|
//# sourceMappingURL=OverlayTrigger.js.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["OverlayTrigger.ts"],
|
|
4
4
|
"sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n CSSResultArray,\n html,\n PropertyValues,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n state,\n} 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';\nimport {\n isAndroid,\n isIOS,\n} from '@spectrum-web-components/shared/src/platform.js';\n\nimport {\n OverlayOpenCloseDetail,\n OverlayOptions,\n OverlayTriggerInteractions,\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\nexport const LONGPRESS_INSTRUCTIONS = {\n touch: 'Double tap and long press for additional options',\n keyboard: 'Press Space or Alt+Down Arrow for additional options',\n mouse: 'Click and hold for additional options',\n};\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 SpectrumElement {\n private closeClickOverlay?: Promise<() => void>;\n private closeLongpressOverlay?: Promise<() => void>;\n private closeHoverOverlay?: Promise<() => void>;\n\n public static override 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?: OverlayTriggerInteractions;\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 @state()\n public hasLongpressContent = false;\n\n private longpressDescriptor?: HTMLElement;\n private clickContent?: HTMLElement;\n private longpressContent?: HTMLElement;\n private hoverContent?: HTMLElement;\n private targetContent?: HTMLElement;\n\n private _longpressId = `longpress-describedby-descriptor`;\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 override 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 <slot name=${this._longpressId}></slot>\n </div>\n `;\n /* eslint-enable lit-a11y/click-events-have-key-events */\n }\n\n protected override updated(changes: PropertyValues<this>): 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 if (changes.has('hasLongpressContent')) {\n this.manageLongpressDescriptor();\n }\n }\n\n protected manageLongpressDescriptor(): void {\n const trigger = this.querySelector(\n '[slot=\"trigger\"]'\n ) as SpectrumElement;\n const ariaDescribedby = trigger.getAttribute('aria-describedby');\n let descriptors = ariaDescribedby ? ariaDescribedby.split(/\\s+/) : [];\n\n if (this.hasLongpressContent) {\n if (!this.longpressDescriptor) {\n this.longpressDescriptor = document.createElement(\n 'div'\n ) as HTMLElement;\n\n this.longpressDescriptor.id = this._longpressId;\n this.longpressDescriptor.slot = this._longpressId;\n }\n const messageType = isIOS() || isAndroid() ? 'touch' : 'keyboard';\n this.longpressDescriptor.textContent =\n LONGPRESS_INSTRUCTIONS[messageType];\n this.appendChild(this.longpressDescriptor);\n descriptors.push(this._longpressId);\n } else {\n if (this.longpressDescriptor) this.longpressDescriptor.remove();\n descriptors = descriptors.filter(\n (descriptor) => descriptor !== this._longpressId\n );\n }\n if (descriptors.length) {\n trigger.setAttribute('aria-describedby', descriptors.join(' '));\n } else {\n trigger.removeAttribute('aria-describedby');\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' || this.open === 'hover'\n ? undefined\n : 'auto',\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.hasLongpressContent =\n !!this.longpressContent || !!this.closeLongpressOverlay;\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 override async getUpdateComplete(): Promise<boolean> {\n const complete = (await super.getUpdateComplete()) as boolean;\n await this.openStatePromise;\n return complete;\n }\n\n public override disconnectedCallback(): void {\n this.closeAllOverlays();\n super.disconnectedCallback();\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": []
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["html", "SpectrumElement", "property", "state", "firstFocusableIn", "isAndroid", "isIOS", "openOverlay", "overlayTriggerStyles", "_OverlayTrigger", "event", "changes", "trigger", "ariaDescribedby", "descriptors", "messageType", "descriptor", "name", "canClose", "_a", "target", "interaction", "content", "options", "res", "overlayContent", "targetContent", "clickContent", "_b", "longpressContent", "notImmediatelyClosable", "abortPromise", "hoverContent", "node", "complete", "__decorateClass"]
|
|
7
7
|
}
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["VirtualTrigger.ts"],
|
|
4
4
|
"sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\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 { Overlay } from './overlay.dev.js'\n\nexport class VirtualTrigger {\n private x = 0;\n private y = 0;\n\n public constructor(x: number, y: number) {\n this.x = x;\n this.y = y;\n }\n\n public updateBoundingClientRect(x: number, y: number): void {\n this.x = x;\n this.y = y;\n Overlay.update();\n }\n\n public getBoundingClientRect(): DOMRect {\n return {\n width: 0,\n height: 0,\n top: this.y,\n right: this.x,\n y: this.y,\n x: this.x,\n bottom: this.y,\n left: this.x,\n toJSON() {\n return;\n },\n };\n }\n}\n"],
|
|
5
|
-
"mappings": "AAWA;
|
|
5
|
+
"mappings": ";AAWA,SAAS,eAAe;AAEjB,aAAM,eAAe;AAAA,EAIjB,YAAY,GAAW,GAAW;AAHzC,SAAQ,IAAI;AACZ,SAAQ,IAAI;AAGR,SAAK,IAAI;AACT,SAAK,IAAI;AAAA,EACb;AAAA,EAEO,yBAAyB,GAAW,GAAiB;AACxD,SAAK,IAAI;AACT,SAAK,IAAI;AACT,YAAQ,OAAO;AAAA,EACnB;AAAA,EAEO,wBAAiC;AACpC,WAAO;AAAA,MACH,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,KAAK,KAAK;AAAA,MACV,OAAO,KAAK;AAAA,MACZ,GAAG,KAAK;AAAA,MACR,GAAG,KAAK;AAAA,MACR,QAAQ,KAAK;AAAA,MACb,MAAM,KAAK;AAAA,MACX,SAAS;AACL;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACJ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/src/VirtualTrigger.js
CHANGED
|
@@ -1,30 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
export class VirtualTrigger {
|
|
3
|
-
constructor(x, y) {
|
|
4
|
-
this.x = 0;
|
|
5
|
-
this.y = 0;
|
|
6
|
-
this.x = x;
|
|
7
|
-
this.y = y;
|
|
8
|
-
}
|
|
9
|
-
updateBoundingClientRect(x, y) {
|
|
10
|
-
this.x = x;
|
|
11
|
-
this.y = y;
|
|
12
|
-
Overlay.update();
|
|
13
|
-
}
|
|
14
|
-
getBoundingClientRect() {
|
|
15
|
-
return {
|
|
16
|
-
width: 0,
|
|
17
|
-
height: 0,
|
|
18
|
-
top: this.y,
|
|
19
|
-
right: this.x,
|
|
20
|
-
y: this.y,
|
|
21
|
-
x: this.x,
|
|
22
|
-
bottom: this.y,
|
|
23
|
-
left: this.x,
|
|
24
|
-
toJSON() {
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
}
|
|
1
|
+
"use strict";import{Overlay as e}from"./overlay.js";export class VirtualTrigger{constructor(t,i){this.x=0;this.y=0;this.x=t,this.y=i}updateBoundingClientRect(t,i){this.x=t,this.y=i,e.update()}getBoundingClientRect(){return{width:0,height:0,top:this.y,right:this.x,y:this.y,x:this.x,bottom:this.y,left:this.x,toJSON(){}}}}
|
|
30
2
|
//# sourceMappingURL=VirtualTrigger.js.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["VirtualTrigger.ts"],
|
|
4
4
|
"sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\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 { Overlay } from './overlay.js';\n\nexport class VirtualTrigger {\n private x = 0;\n private y = 0;\n\n public constructor(x: number, y: number) {\n this.x = x;\n this.y = y;\n }\n\n public updateBoundingClientRect(x: number, y: number): void {\n this.x = x;\n this.y = y;\n Overlay.update();\n }\n\n public getBoundingClientRect(): DOMRect {\n return {\n width: 0,\n height: 0,\n top: this.y,\n right: this.x,\n y: this.y,\n x: this.x,\n bottom: this.y,\n left: this.x,\n toJSON() {\n return;\n },\n };\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": []
|
|
5
|
+
"mappings": "aAWA,OAAS,WAAAA,MAAe,eAEjB,aAAM,cAAe,CAIjB,YAAYC,EAAWC,EAAW,CAHzC,KAAQ,EAAI,EACZ,KAAQ,EAAI,EAGR,KAAK,EAAID,EACT,KAAK,EAAIC,CACb,CAEO,yBAAyBD,EAAWC,EAAiB,CACxD,KAAK,EAAID,EACT,KAAK,EAAIC,EACTF,EAAQ,OAAO,CACnB,CAEO,uBAAiC,CACpC,MAAO,CACH,MAAO,EACP,OAAQ,EACR,IAAK,KAAK,EACV,MAAO,KAAK,EACZ,EAAG,KAAK,EACR,EAAG,KAAK,EACR,OAAQ,KAAK,EACb,KAAM,KAAK,EACX,QAAS,CAET,CACJ,CACJ,CACJ",
|
|
6
|
+
"names": ["Overlay", "x", "y"]
|
|
7
7
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
import { css } from "@spectrum-web-components/base";
|
|
2
3
|
const styles = css`
|
|
3
4
|
@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:-9999em;pointer-events:none;position:absolute;top:-9999em;z-index:1000}:host(:focus){outline:none}:host([placement=none]){height:100vh;height:-webkit-fill-available;height:fill-available;left:0;max-height:var(--swc-visual-viewport-height);position:fixed;top:0}#contents,sp-theme{height:100%}#contents{--swc-overlay-animation-distance:var(
|