@spectrum-web-components/overlay 0.35.1-rc.15 → 0.35.1-rc.25
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 +72 -69
- package/custom-elements.json +33 -18
- package/package.json +8 -8
- package/src/AbstractOverlay.d.ts +4 -2
- package/src/AbstractOverlay.dev.js +6 -0
- package/src/AbstractOverlay.dev.js.map +2 -2
- package/src/AbstractOverlay.js +1 -1
- package/src/AbstractOverlay.js.map +3 -3
- package/src/Overlay.d.ts +5 -3
- package/src/Overlay.dev.js +62 -28
- package/src/Overlay.dev.js.map +3 -3
- package/src/Overlay.js +7 -7
- package/src/Overlay.js.map +3 -3
- package/src/OverlayDialog.dev.js +5 -2
- package/src/OverlayDialog.dev.js.map +2 -2
- package/src/OverlayDialog.js +1 -1
- package/src/OverlayDialog.js.map +2 -2
- package/src/OverlayNoPopover.dev.js +1 -1
- package/src/OverlayNoPopover.dev.js.map +2 -2
- package/src/OverlayNoPopover.js +1 -1
- package/src/OverlayNoPopover.js.map +2 -2
- package/src/OverlayPopover.dev.js +4 -3
- package/src/OverlayPopover.dev.js.map +2 -2
- package/src/OverlayPopover.js +1 -1
- package/src/OverlayPopover.js.map +2 -2
- package/src/OverlayStack.d.ts +7 -0
- package/src/OverlayStack.dev.js +11 -0
- package/src/OverlayStack.dev.js.map +2 -2
- package/src/OverlayStack.js +1 -1
- package/src/OverlayStack.js.map +3 -3
- package/src/OverlayTrigger.d.ts +0 -1
- package/src/OverlayTrigger.dev.js +1 -6
- package/src/OverlayTrigger.dev.js.map +2 -2
- package/src/OverlayTrigger.js +2 -2
- package/src/OverlayTrigger.js.map +2 -2
- package/src/overlay-types.d.ts +1 -0
- package/src/overlay-types.dev.js.map +1 -1
- package/src/overlay-types.js.map +1 -1
- package/src/overlay.css.dev.js +1 -1
- package/src/overlay.css.dev.js.map +1 -1
- package/src/overlay.css.js +1 -1
- package/src/overlay.css.js.map +1 -1
- package/src/topLayerOverTransforms.dev.js +2 -3
- package/src/topLayerOverTransforms.dev.js.map +2 -2
- package/src/topLayerOverTransforms.js +1 -1
- package/src/topLayerOverTransforms.js.map +2 -2
- package/stories/overlay-element.stories.js +5 -4
- package/stories/overlay-element.stories.js.map +2 -2
- package/test/overlay-trigger-extended.test.js +34 -29
- package/test/overlay-trigger-extended.test.js.map +2 -2
- package/test/overlay-trigger-hover-click.test.js +5 -2
- package/test/overlay-trigger-hover-click.test.js.map +2 -2
- package/test/overlay-trigger-longpress.test.js +109 -6
- package/test/overlay-trigger-longpress.test.js.map +2 -2
package/src/Overlay.dev.js
CHANGED
|
@@ -59,14 +59,14 @@ const _Overlay = class extends OverlayFeatures {
|
|
|
59
59
|
super(...arguments);
|
|
60
60
|
this.delayed = false;
|
|
61
61
|
this._disabled = false;
|
|
62
|
-
this.
|
|
63
|
-
this.isVisible = false;
|
|
62
|
+
this.longpressState = "null";
|
|
64
63
|
this.offset = 6;
|
|
65
64
|
this.placementController = new PlacementController(this);
|
|
66
65
|
this._open = false;
|
|
67
66
|
this.receivesFocus = "auto";
|
|
68
67
|
this.releaseAriaDescribedby = noop;
|
|
69
68
|
this.releaseLongpressDescribedby = noop;
|
|
69
|
+
this._state = "closed";
|
|
70
70
|
this.triggerElement = null;
|
|
71
71
|
this.type = "hint";
|
|
72
72
|
this.wasOpen = false;
|
|
@@ -78,9 +78,12 @@ const _Overlay = class extends OverlayFeatures {
|
|
|
78
78
|
if (event.button !== 0)
|
|
79
79
|
return;
|
|
80
80
|
const triggerElement = this.triggerElement;
|
|
81
|
-
this.
|
|
81
|
+
this.longpressState = "potential";
|
|
82
82
|
triggerElement.addEventListener("pointerup", this.handlePointerup);
|
|
83
83
|
triggerElement.addEventListener("pointercancel", this.handlePointerup);
|
|
84
|
+
if (triggerElement.holdAffordance) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
84
87
|
this.longressTimeout = setTimeout(() => {
|
|
85
88
|
if (!triggerElement)
|
|
86
89
|
return;
|
|
@@ -99,12 +102,7 @@ const _Overlay = class extends OverlayFeatures {
|
|
|
99
102
|
clearTimeout(this.longressTimeout);
|
|
100
103
|
if (!this.triggerElement)
|
|
101
104
|
return;
|
|
102
|
-
|
|
103
|
-
this.open = true;
|
|
104
|
-
}
|
|
105
|
-
setTimeout(() => {
|
|
106
|
-
this.longpressed = false;
|
|
107
|
-
});
|
|
105
|
+
this.longpressState = this.state === "opening" ? "pressed" : "null";
|
|
108
106
|
const triggerElement = this.triggerElement;
|
|
109
107
|
triggerElement.removeEventListener("pointerup", this.handlePointerup);
|
|
110
108
|
triggerElement.removeEventListener(
|
|
@@ -127,8 +125,11 @@ const _Overlay = class extends OverlayFeatures {
|
|
|
127
125
|
this.handleKeyup = (event) => {
|
|
128
126
|
const { code, altKey } = event;
|
|
129
127
|
if (code === "Space" || altKey && code === "ArrowDown") {
|
|
128
|
+
if (!this.triggerElement || !this.hasNonVirtualTrigger) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
130
131
|
event.stopPropagation();
|
|
131
|
-
this.dispatchEvent(
|
|
132
|
+
this.triggerElement.dispatchEvent(
|
|
132
133
|
new CustomEvent("longpress", {
|
|
133
134
|
bubbles: true,
|
|
134
135
|
composed: true,
|
|
@@ -137,6 +138,9 @@ const _Overlay = class extends OverlayFeatures {
|
|
|
137
138
|
}
|
|
138
139
|
})
|
|
139
140
|
);
|
|
141
|
+
setTimeout(() => {
|
|
142
|
+
this.longpressState = "null";
|
|
143
|
+
});
|
|
140
144
|
}
|
|
141
145
|
};
|
|
142
146
|
/**
|
|
@@ -150,8 +154,9 @@ const _Overlay = class extends OverlayFeatures {
|
|
|
150
154
|
this.preventNextToggle = this.open;
|
|
151
155
|
};
|
|
152
156
|
this.handleClick = () => {
|
|
153
|
-
if (this.
|
|
157
|
+
if (this.longpressState === "opening" || this.longpressState === "pressed") {
|
|
154
158
|
return;
|
|
159
|
+
}
|
|
155
160
|
if (!this.preventNextToggle) {
|
|
156
161
|
this.open = !this.open;
|
|
157
162
|
}
|
|
@@ -198,7 +203,7 @@ const _Overlay = class extends OverlayFeatures {
|
|
|
198
203
|
};
|
|
199
204
|
this.handleLongpress = () => {
|
|
200
205
|
this.open = true;
|
|
201
|
-
this.
|
|
206
|
+
this.longpressState = this.longpressState === "potential" ? "opening" : "pressed";
|
|
202
207
|
};
|
|
203
208
|
this.willPreventClose = false;
|
|
204
209
|
}
|
|
@@ -230,17 +235,35 @@ const _Overlay = class extends OverlayFeatures {
|
|
|
230
235
|
return;
|
|
231
236
|
if (open === this.open)
|
|
232
237
|
return;
|
|
238
|
+
if ((this.longpressState === "opening" || this.longpressState === "pressed") && !open)
|
|
239
|
+
return;
|
|
233
240
|
this._open = open;
|
|
234
241
|
if (this.open) {
|
|
235
242
|
_Overlay.openCount += 1;
|
|
236
|
-
this.isVisible = true;
|
|
237
243
|
}
|
|
238
244
|
this.requestUpdate("open", !this.open);
|
|
239
245
|
}
|
|
246
|
+
get state() {
|
|
247
|
+
return this._state;
|
|
248
|
+
}
|
|
249
|
+
set state(state2) {
|
|
250
|
+
if (state2 === this.state)
|
|
251
|
+
return;
|
|
252
|
+
const oldState = this.state;
|
|
253
|
+
this._state = state2;
|
|
254
|
+
if (this.state === "opened" || this.state === "closed") {
|
|
255
|
+
this.longpressState = this.longpressState === "pressed" ? "null" : this.longpressState;
|
|
256
|
+
}
|
|
257
|
+
this.requestUpdate("state", oldState);
|
|
258
|
+
}
|
|
240
259
|
get usesDialog() {
|
|
241
260
|
return this.type === "modal" || this.type === "page";
|
|
242
261
|
}
|
|
243
262
|
get popoverValue() {
|
|
263
|
+
const hasPopoverAttribute = "popover" in this;
|
|
264
|
+
if (!hasPopoverAttribute) {
|
|
265
|
+
return void 0;
|
|
266
|
+
}
|
|
244
267
|
switch (this.type) {
|
|
245
268
|
case "modal":
|
|
246
269
|
case "page":
|
|
@@ -339,6 +362,11 @@ const _Overlay = class extends OverlayFeatures {
|
|
|
339
362
|
}
|
|
340
363
|
overlayStack.remove(this);
|
|
341
364
|
}
|
|
365
|
+
if (this.open && this.state !== "opened") {
|
|
366
|
+
this.state = "opening";
|
|
367
|
+
} else if (!this.open && this.state !== "closed") {
|
|
368
|
+
this.state = "closing";
|
|
369
|
+
}
|
|
342
370
|
if (this.usesDialog) {
|
|
343
371
|
this.manageDialogOpen();
|
|
344
372
|
} else {
|
|
@@ -401,18 +429,21 @@ const _Overlay = class extends OverlayFeatures {
|
|
|
401
429
|
bindLongpressEvents(triggerElement) {
|
|
402
430
|
const options = { signal: this.abortController.signal };
|
|
403
431
|
triggerElement.addEventListener(
|
|
404
|
-
"
|
|
405
|
-
this.
|
|
432
|
+
"longpress",
|
|
433
|
+
this.handleLongpress,
|
|
406
434
|
options
|
|
407
435
|
);
|
|
408
|
-
triggerElement.addEventListener("keydown", this.handleKeydown, options);
|
|
409
|
-
triggerElement.addEventListener("keyup", this.handleKeyup, options);
|
|
410
436
|
triggerElement.addEventListener(
|
|
411
|
-
"
|
|
412
|
-
this.
|
|
437
|
+
"pointerdown",
|
|
438
|
+
this.handlePointerdown,
|
|
413
439
|
options
|
|
414
440
|
);
|
|
415
441
|
this.prepareLongpressDescription(triggerElement);
|
|
442
|
+
if (triggerElement.holdAffordance) {
|
|
443
|
+
return;
|
|
444
|
+
}
|
|
445
|
+
triggerElement.addEventListener("keydown", this.handleKeydown, options);
|
|
446
|
+
triggerElement.addEventListener("keyup", this.handleKeyup, options);
|
|
416
447
|
}
|
|
417
448
|
bindHoverEvents(triggerElement) {
|
|
418
449
|
const options = { signal: this.abortController.signal };
|
|
@@ -535,7 +566,12 @@ const _Overlay = class extends OverlayFeatures {
|
|
|
535
566
|
}
|
|
536
567
|
}
|
|
537
568
|
handleBrowserClose() {
|
|
538
|
-
this.
|
|
569
|
+
if (this.longpressState !== "opening" && this.longpressState !== "pressed") {
|
|
570
|
+
this.open = false;
|
|
571
|
+
return;
|
|
572
|
+
}
|
|
573
|
+
this.open = true;
|
|
574
|
+
this.manageOpen(false);
|
|
539
575
|
}
|
|
540
576
|
handleSlotchange() {
|
|
541
577
|
if (this.triggerElement) {
|
|
@@ -635,23 +671,21 @@ const _Overlay = class extends OverlayFeatures {
|
|
|
635
671
|
@close=${this.handleBrowserClose}
|
|
636
672
|
@cancel=${this.handleBrowserClose}
|
|
637
673
|
@beforetoggle=${this.handleBeforetoggle}
|
|
638
|
-
?is-visible=${this.
|
|
674
|
+
?is-visible=${this.state !== "closed"}
|
|
639
675
|
>
|
|
640
676
|
${this.renderContent()}
|
|
641
677
|
</dialog>
|
|
642
678
|
`;
|
|
643
679
|
}
|
|
644
680
|
renderPopover() {
|
|
645
|
-
const hasPopoverAttribute = "popover" in this;
|
|
646
|
-
const popoverValue = hasPopoverAttribute ? this.popoverValue : void 0;
|
|
647
681
|
return html`
|
|
648
682
|
<div
|
|
649
683
|
class="dialog"
|
|
650
684
|
part="dialog"
|
|
651
|
-
popover=${ifDefined(popoverValue)}
|
|
685
|
+
popover=${ifDefined(this.popoverValue)}
|
|
652
686
|
@beforetoggle=${this.handleBeforetoggle}
|
|
653
687
|
@close=${this.handleBrowserClose}
|
|
654
|
-
?is-visible=${this.
|
|
688
|
+
?is-visible=${this.state !== "closed"}
|
|
655
689
|
>
|
|
656
690
|
${this.renderContent()}
|
|
657
691
|
</div>
|
|
@@ -700,9 +734,6 @@ __decorateClass([
|
|
|
700
734
|
// gather only elements slotted into the default slot
|
|
701
735
|
})
|
|
702
736
|
], Overlay.prototype, "elements", 2);
|
|
703
|
-
__decorateClass([
|
|
704
|
-
state()
|
|
705
|
-
], Overlay.prototype, "isVisible", 2);
|
|
706
737
|
__decorateClass([
|
|
707
738
|
property({ type: Number })
|
|
708
739
|
], Overlay.prototype, "offset", 2);
|
|
@@ -718,6 +749,9 @@ __decorateClass([
|
|
|
718
749
|
__decorateClass([
|
|
719
750
|
query("slot")
|
|
720
751
|
], Overlay.prototype, "slotEl", 2);
|
|
752
|
+
__decorateClass([
|
|
753
|
+
state()
|
|
754
|
+
], Overlay.prototype, "state", 1);
|
|
721
755
|
__decorateClass([
|
|
722
756
|
property({ type: Number, attribute: "tip-padding" })
|
|
723
757
|
], Overlay.prototype, "tipPadding", 2);
|
package/src/Overlay.dev.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["Overlay.ts"],
|
|
4
|
-
"sourcesContent": ["/*\nCopyright 2023 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\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 html,\n PropertyValues,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n queryAssignedElements,\n state,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport {\n isAndroid,\n isIOS,\n} from '@spectrum-web-components/shared/src/platform.js';\nimport {\n ElementResolutionController,\n elementResolverUpdatedSymbol,\n} from '@spectrum-web-components/reactive-controllers/src/ElementResolution.js';\nimport { conditionAttributeWithId } from '@spectrum-web-components/base/src/condition-attribute-with-id.js';\nimport {\n ifDefined,\n StyleInfo,\n styleMap,\n} from '@spectrum-web-components/base/src/directives.js';\n\nimport { AbstractOverlay, nextFrame } from './AbstractOverlay.dev.js'\nimport { OverlayDialog } from './OverlayDialog.dev.js'\nimport { OpenableElement, OverlayTypes, Placement } from './overlay-types.dev.js'\nimport { OverlayPopover } from './OverlayPopover.dev.js'\nimport { OverlayNoPopover } from './OverlayNoPopover.dev.js'\nimport { overlayStack } from './OverlayStack.dev.js'\nimport { noop } from './AbstractOverlay.dev.js'\nimport { VirtualTrigger } from './VirtualTrigger.dev.js'\nimport { PlacementController } from './PlacementController.dev.js'\n\nimport styles from './overlay.css.js';\n\nconst LONGPRESS_DURATION = 300;\n\ntype LongpressEvent = {\n source: 'pointer' | 'keyboard';\n};\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\nconst supportsPopover = 'showPopover' in document.createElement('div');\n\nlet OverlayFeatures = OverlayDialog(AbstractOverlay);\nif (supportsPopover) {\n OverlayFeatures = OverlayPopover(OverlayFeatures);\n} else {\n OverlayFeatures = OverlayNoPopover(OverlayFeatures);\n}\n\n/**\n * @element sp-overlay\n *\n * @fires sp-opened - announces that an overlay has completed any entry animations\n * @fires sp-closed - announce that an overlay has compelted any exit animations\n */\nexport class Overlay extends OverlayFeatures {\n static override styles = [styles];\n\n abortController!: AbortController;\n\n /**\n * An Overlay that is `delayed` will wait until a warm-up period of 1000ms\n * has completed before opening. Once the warmup period has completed, all\n * subsequent Overlays will open immediately. When no Overlays are opened,\n * a cooldown period of 1000ms will begin. Once the cooldown has completed,\n * the next Overlay to be opened will be subject to the warm-up period if\n * provided that option.\n */\n @property({ type: Boolean })\n override delayed = false;\n\n @query('.dialog')\n override dialogEl!: HTMLDialogElement & {\n showPopover(): void;\n hidePopover(): void;\n };\n\n /**\n * Whether the overlay is currently functional or not\n */\n @property({ type: Boolean })\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(disabled: boolean) {\n this._disabled = disabled;\n if (disabled) {\n if (this.hasNonVirtualTrigger) {\n this.unbindEvents();\n }\n this.wasOpen = this.open;\n this.open = false;\n } else {\n this.bindEvents();\n this.open = this.open || this.wasOpen;\n this.wasOpen = false;\n }\n }\n\n private _disabled = false;\n\n @queryAssignedElements({\n flatten: true,\n selector: ':not([slot=\"longpress-describedby-descriptor\"])', // gather only elements slotted into the default slot\n })\n override elements!: OpenableElement[];\n\n public parentOverlayToForceClose?: Overlay;\n\n private get hasNonVirtualTrigger(): boolean {\n return (\n !!this.triggerElement &&\n !(this.triggerElement instanceof VirtualTrigger)\n );\n }\n\n protected longpressed = false;\n\n private longressTimeout!: ReturnType<typeof setTimeout>;\n\n @state()\n override isVisible = false;\n\n /**\n * The `offset` property accepts either a single number, to\n * define the offset of the Overlay along the main axis from\n * the trigger, or 2-tuple, to define the offset along the\n * main axis and the cross axis. This option has no effect\n * when there is no trigger element.\n */\n @property({ type: Number })\n offset: number | [number, number] = 6;\n\n protected override placementController = new PlacementController(this);\n\n @property({ type: Boolean, reflect: true })\n override get open(): boolean {\n return this._open;\n }\n\n override set open(open: boolean) {\n if (open && this.disabled) return;\n if (open === this.open) return;\n this._open = open;\n if (this.open) {\n Overlay.openCount += 1;\n this.isVisible = true;\n }\n this.requestUpdate('open', !this.open);\n }\n\n private _open = false;\n\n static openCount = 1;\n\n /**\n * Instruct the Overlay where to place itself in\n * relationship to the trigger element.\n */\n @property()\n placement?: Placement;\n\n @property({ attribute: 'receives-focus' })\n override receivesFocus: 'true' | 'false' | 'auto' = 'auto';\n\n private releaseAriaDescribedby = noop;\n private releaseLongpressDescribedby = noop;\n\n @query('slot')\n slotEl!: HTMLSlotElement;\n\n @property({ type: Number, attribute: 'tip-padding' })\n tipPadding?: number;\n\n /**\n * An optional ID reference for the trigger element combined with the optional\n * interaction (click | hover | longpress) by which the overlay shold open\n * the overlay with an `@`: e.g. `trigger@click` opens the overlay when an\n * element with the ID \"trigger\" is clicked.\n */\n @property()\n trigger?: string;\n\n /**\n * An element reference for the trigger element that the overlay should relate to.\n */\n @property({ attribute: false })\n override triggerElement: HTMLElement | VirtualTrigger | null = null;\n\n /**\n * The specific interaction to listen for on the `triggerElement` to open the overlay.\n */\n @property({ attribute: false })\n triggerInteraction?: 'click' | 'longpress' | 'hover';\n\n @property()\n override type: OverlayTypes = 'hint';\n\n protected wasOpen = false;\n\n private elementResolver = new ElementResolutionController(this);\n\n private get usesDialog(): boolean {\n return this.type === 'modal' || this.type === 'page';\n }\n\n private get popoverValue(): 'auto' | 'manual' | undefined {\n switch (this.type) {\n case 'modal':\n case 'page':\n return undefined;\n case 'hint':\n return 'manual';\n default:\n return this.type;\n }\n }\n\n protected get requiresPosition(): boolean {\n // Do not position \"page\" overlays as they should block the entire UI.\n if (this.type === 'page' || !this.open) return false;\n // Do not position content without a trigger element, what would you position it in relation to?\n // Do not automatically position content, unless it is a \"hint\".\n if (!this.triggerElement || (!this.placement && this.type !== 'hint'))\n return false;\n return true;\n }\n\n protected override managePosition(): void {\n if (!this.requiresPosition || !this.open) return;\n\n const offset = this.offset || 0;\n const trigger = this.triggerElement as HTMLElement;\n const placement = (this.placement as Placement) || 'right';\n const tipPadding = this.tipPadding;\n\n this.placementController.placeOverlay(this.dialogEl, {\n offset,\n placement,\n tipPadding,\n trigger,\n type: this.type,\n });\n }\n\n protected override async managePopoverOpen(): Promise<void> {\n super.managePopoverOpen();\n const targetOpenState = this.open;\n if (this.open !== targetOpenState) {\n return;\n }\n await this.manageDelay(targetOpenState);\n if (this.open !== targetOpenState) {\n return;\n }\n await this.ensureOnDOM(targetOpenState);\n if (this.open !== targetOpenState) {\n return;\n }\n const focusEl = await this.makeTransition(targetOpenState);\n if (this.open !== targetOpenState) {\n return;\n }\n await this.applyFocus(targetOpenState, focusEl);\n }\n\n protected override async applyFocus(\n targetOpenState: boolean,\n focusEl: HTMLElement | null\n ): Promise<void> {\n // Do not move focus when explicitly told not to\n // and when the Overlay is a \"hint\"\n if (this.receivesFocus === 'false' || this.type === 'hint') {\n return;\n }\n\n await nextFrame();\n await nextFrame();\n if (targetOpenState === this.open && !this.open) {\n if (\n this.hasNonVirtualTrigger &&\n this.contains((this.getRootNode() as Document).activeElement)\n ) {\n (this.triggerElement as HTMLElement).focus();\n }\n return;\n }\n focusEl?.focus();\n }\n\n protected async manageOpen(oldOpen: boolean): Promise<void> {\n if (!this.isConnected && this.open) return;\n\n if (!this.hasUpdated) {\n await this.updateComplete;\n }\n\n if (this.open) {\n overlayStack.add(this);\n if (this.willPreventClose) {\n document.addEventListener(\n 'pointerup',\n () => {\n this.dialogEl.classList.toggle(\n 'not-immediately-closable',\n false\n );\n this.willPreventClose = false;\n },\n { once: true }\n );\n this.dialogEl.classList.toggle(\n 'not-immediately-closable',\n true\n );\n }\n } else {\n if (oldOpen) {\n this.dispose();\n }\n overlayStack.remove(this);\n }\n\n if (this.usesDialog) {\n this.manageDialogOpen();\n } else {\n this.managePopoverOpen();\n }\n if (!this.open) {\n // If the focus remains inside of the overlay or\n // a slotted descendent of the overlay you need to return\n // focus back to the trigger.\n const getAncestors = (): HTMLElement[] => {\n const ancestors: HTMLElement[] = [];\n // eslint-disable-next-line @spectrum-web-components/document-active-element\n let currentNode = document.activeElement;\n while (\n currentNode?.shadowRoot &&\n currentNode.shadowRoot.activeElement\n ) {\n currentNode = currentNode.shadowRoot.activeElement;\n }\n while (currentNode) {\n const ancestor =\n currentNode.assignedSlot ||\n currentNode.parentElement ||\n (currentNode.getRootNode() as ShadowRoot)?.host;\n if (ancestor) {\n ancestors.push(ancestor as HTMLElement);\n }\n currentNode = ancestor;\n }\n return ancestors;\n };\n if (\n (this.triggerElement as HTMLElement)?.focus &&\n (this.contains(\n (this.getRootNode() as Document).activeElement\n ) ||\n getAncestors().includes(this))\n ) {\n (this.triggerElement as HTMLElement).focus();\n }\n }\n }\n\n protected unbindEvents(): void {\n this.abortController?.abort();\n }\n\n protected bindEvents(): void {\n if (!this.hasNonVirtualTrigger) return;\n this.abortController = new AbortController();\n const nextTriggerElement = this.triggerElement as HTMLElement;\n switch (this.triggerInteraction) {\n case 'click':\n this.bindClickEvents(nextTriggerElement);\n return;\n case 'longpress':\n this.bindLongpressEvents(nextTriggerElement);\n return;\n case 'hover':\n this.bindHoverEvents(nextTriggerElement);\n return;\n }\n }\n\n protected bindClickEvents(triggerElement: HTMLElement): void {\n const options = { signal: this.abortController.signal };\n triggerElement.addEventListener('click', this.handleClick, options);\n triggerElement.addEventListener(\n 'pointerdown',\n this.handlePointerdownForClick,\n options\n );\n }\n\n protected bindLongpressEvents(triggerElement: HTMLElement): void {\n const options = { signal: this.abortController.signal };\n triggerElement.addEventListener(\n 'pointerdown',\n this.handlePointerdown,\n options\n );\n triggerElement.addEventListener('keydown', this.handleKeydown, options);\n triggerElement.addEventListener('keyup', this.handleKeyup, options);\n triggerElement.addEventListener(\n 'longpress',\n this.handleLongpress,\n options\n );\n\n this.prepareLongpressDescription(triggerElement);\n }\n\n protected bindHoverEvents(triggerElement: HTMLElement): void {\n const options = { signal: this.abortController.signal };\n triggerElement.addEventListener('focusin', this.handleFocusin, options);\n triggerElement.addEventListener(\n 'focusout',\n this.handleFocusout,\n options\n );\n triggerElement.addEventListener(\n 'pointerenter',\n this.handlePointerenter,\n options\n );\n triggerElement.addEventListener(\n 'pointerleave',\n this.handlePointerleave,\n options\n );\n this.addEventListener(\n 'pointerleave',\n this.handleOverlayPointerleave,\n options\n );\n if (this.receivesFocus === 'true') return;\n\n this.prepareAriaDescribedby(triggerElement);\n }\n\n protected manageTriggerElement(triggerElement: HTMLElement | null): void {\n if (triggerElement) {\n this.unbindEvents();\n this.releaseAriaDescribedby();\n }\n const missingOrVirtual =\n !this.triggerElement ||\n this.triggerElement instanceof VirtualTrigger;\n if (missingOrVirtual) {\n return;\n }\n this.bindEvents();\n }\n\n private elementIds: string[] = [];\n\n private prepareLongpressDescription(trigger: HTMLElement): void {\n if (\n // only \"longpress\" relationships are described this way\n this.triggerInteraction !== 'longpress' ||\n // do not reapply until target it recycled\n this.releaseLongpressDescribedby !== noop ||\n // require \"longpress content\" to apply relationship\n !this.elements.length\n ) {\n return;\n }\n\n const longpressDescription = document.createElement('div');\n longpressDescription.id = `longpress-describedby-descriptor-${crypto\n .randomUUID()\n .slice(0, 8)}`;\n const messageType = isIOS() || isAndroid() ? 'touch' : 'keyboard';\n longpressDescription.textContent = LONGPRESS_INSTRUCTIONS[messageType];\n longpressDescription.slot = 'longpress-describedby-descriptor';\n trigger.insertAdjacentElement('afterend', longpressDescription);\n\n const releaseLongpressDescribedby = conditionAttributeWithId(\n trigger,\n 'aria-describedby',\n [longpressDescription.id]\n );\n this.releaseLongpressDescribedby = () => {\n releaseLongpressDescribedby();\n longpressDescription.remove();\n this.releaseLongpressDescribedby = noop;\n };\n }\n\n private prepareAriaDescribedby(trigger: HTMLElement): void {\n if (\n // only \"hover\" relationships establed described by content\n this.triggerInteraction !== 'hover' ||\n // do not reapply until target is recycled\n this.releaseAriaDescribedby !== noop ||\n // require \"hover content\" to apply relationship\n !this.elements.length\n ) {\n return;\n }\n\n const triggerRoot = trigger.getRootNode();\n const contentRoot = this.elements[0].getRootNode();\n const overlayRoot = this.getRootNode();\n if (triggerRoot == overlayRoot) {\n const releaseAriaDescribedby = conditionAttributeWithId(\n trigger,\n 'aria-describedby',\n [this.id]\n );\n this.releaseAriaDescribedby = () => {\n releaseAriaDescribedby();\n this.releaseAriaDescribedby = noop;\n };\n } else if (triggerRoot === contentRoot) {\n this.elementIds = this.elements.map((el) => el.id);\n const appliedIds = this.elements.map((el) => {\n if (!el.id) {\n el.id = `${this.tagName.toLowerCase()}-helper-${crypto\n .randomUUID()\n .slice(0, 8)}`;\n }\n return el.id;\n });\n const releaseAriaDescribedby = conditionAttributeWithId(\n trigger,\n 'aria-describedby',\n appliedIds\n );\n this.releaseAriaDescribedby = () => {\n releaseAriaDescribedby();\n this.elements.map((el, index) => {\n el.id = this.elementIds[index];\n });\n this.releaseAriaDescribedby = noop;\n };\n }\n }\n\n private handlePointerdown = (event: PointerEvent): void => {\n if (!this.triggerElement) return;\n if (event.button !== 0) return;\n const triggerElement = this.triggerElement as HTMLElement;\n this.longpressed = false;\n triggerElement.addEventListener('pointerup', this.handlePointerup);\n triggerElement.addEventListener('pointercancel', this.handlePointerup);\n this.longressTimeout = setTimeout(() => {\n if (!triggerElement) return;\n triggerElement.dispatchEvent(\n new CustomEvent<LongpressEvent>('longpress', {\n bubbles: true,\n composed: true,\n detail: {\n source: 'pointer',\n },\n })\n );\n }, LONGPRESS_DURATION);\n };\n\n private handlePointerup = (): void => {\n clearTimeout(this.longressTimeout);\n if (!this.triggerElement) return;\n if (this.longpressed) {\n this.open = true;\n }\n setTimeout(() => {\n this.longpressed = false;\n });\n const triggerElement = this.triggerElement as HTMLElement;\n triggerElement.removeEventListener('pointerup', this.handlePointerup);\n triggerElement.removeEventListener(\n 'pointercancel',\n this.handlePointerup\n );\n };\n\n /**\n * @private\n */\n protected handleKeydown = (event: KeyboardEvent): void => {\n const { code, altKey } = event;\n if (code === 'Space' || (altKey && code === 'ArrowDown')) {\n if (code === 'ArrowDown') {\n event.stopPropagation();\n event.stopImmediatePropagation();\n }\n }\n };\n\n protected handleKeyup = (event: KeyboardEvent): void => {\n const { code, altKey } = event;\n if (code === 'Space' || (altKey && code === 'ArrowDown')) {\n event.stopPropagation();\n this.dispatchEvent(\n new CustomEvent<LongpressEvent>('longpress', {\n bubbles: true,\n composed: true,\n detail: {\n source: 'keyboard',\n },\n })\n );\n }\n };\n\n /**\n * An overlay with a `click` interaction should not close on click `triggerElement`.\n * When a click is initiated (`pointerdown`), apply `preventNextToggle` when the\n * overlay is `open` to prevent from toggling the overlay when the click event\n * propagates later in the interaction.\n */\n private preventNextToggle = false;\n\n protected handlePointerdownForClick = (): void => {\n this.preventNextToggle = this.open;\n };\n\n protected handleClick = (): void => {\n if (this.longpressed) return;\n if (!this.preventNextToggle) {\n this.open = !this.open;\n }\n this.preventNextToggle = false;\n };\n\n private focusedin = false;\n\n protected handleFocusin = (): void => {\n this.open = true;\n this.focusedin = true;\n };\n\n protected handleFocusout = (): void => {\n this.focusedin = false;\n if (this.pointerentered) return;\n this.open = false;\n };\n\n private pointerentered = false;\n\n protected handlePointerenter = (): void => {\n if (this.disabled) return;\n this.open = true;\n this.pointerentered = true;\n };\n\n protected handlePointerleave = (event: PointerEvent): void => {\n if (\n this === event.relatedTarget ||\n this.contains(event.relatedTarget as Node) ||\n [...this.children].find((child) => {\n if (child.localName !== 'slot') {\n return false;\n }\n return (child as HTMLSlotElement)\n .assignedElements({ flatten: true })\n .find((el) => {\n return (\n el === event.relatedTarget ||\n el.contains(event.relatedTarget as Node)\n );\n });\n })\n ) {\n return;\n }\n this.doPointerleave();\n };\n\n protected handleOverlayPointerleave = (event: PointerEvent): void => {\n if (\n this.triggerElement === event.relatedTarget ||\n (this.hasNonVirtualTrigger &&\n (this.triggerElement as HTMLElement).contains(\n event.relatedTarget as Node\n ))\n ) {\n return;\n }\n this.doPointerleave();\n };\n\n protected doPointerleave(): void {\n this.pointerentered = false;\n const triggerElement = this.triggerElement as HTMLElement;\n if (this.focusedin && triggerElement.matches(':focus-visible')) return;\n this.open = false;\n }\n\n protected handleLongpress = (): void => {\n this.open = true;\n this.longpressed = true;\n };\n\n protected handleBeforetoggle(event: Event & { newState: string }): void {\n if (event.newState !== 'open') {\n this.handleBrowserClose();\n }\n }\n\n protected handleBrowserClose(): void {\n this.open = false;\n }\n\n protected handleSlotchange(): void {\n if (this.triggerElement) {\n this.prepareAriaDescribedby(this.triggerElement as HTMLElement);\n }\n if (!this.elements.length) {\n this.releaseLongpressDescribedby();\n } else if (this.hasNonVirtualTrigger) {\n this.prepareLongpressDescription(\n this.triggerElement as HTMLElement\n );\n }\n }\n\n public willPreventClose = false;\n\n public shouldPreventClose(): boolean {\n const shouldPreventClose = this.willPreventClose;\n this.willPreventClose = false;\n return shouldPreventClose;\n }\n\n override willUpdate(changes: PropertyValues): void {\n if (!this.hasUpdated) {\n this.addEventListener('focusout', (event: FocusEvent) => {\n // Only \"auto\" popovers should close on any sort of focusout\n if (this.type !== 'auto') {\n return;\n }\n // If you don't know where the focus went, we can't do anyting here.\n if (!event.relatedTarget) {\n return;\n }\n const relationEvent = new Event('overlay-relation-query', {\n bubbles: true,\n composed: true,\n });\n event.relatedTarget.addEventListener(\n relationEvent.type,\n (event: Event) => {\n if (!event.composedPath().includes(this)) {\n this.open = false;\n }\n }\n );\n event.relatedTarget.dispatchEvent(relationEvent);\n });\n }\n if (!this.hasAttribute('id')) {\n this.setAttribute(\n 'id',\n `${this.tagName.toLowerCase()}-${crypto\n .randomUUID()\n .slice(0, 8)}`\n );\n }\n if (\n changes.has('open') &&\n (typeof changes.get('open') !== 'undefined' || this.open)\n ) {\n this.manageOpen(changes.get('open'));\n }\n if (changes.has('trigger')) {\n const [id, interaction] = this.trigger?.split('@') || [];\n this.elementResolver.selector = id ? `#${id}` : '';\n this.triggerInteraction = interaction as\n | 'click'\n | 'longpress'\n | 'hover'\n | undefined;\n }\n const oldTrigger = this.triggerElement as HTMLElement;\n if (changes.has(elementResolverUpdatedSymbol)) {\n this.triggerElement = this.elementResolver.element;\n this.manageTriggerElement(oldTrigger);\n }\n if (changes.has('triggerElement')) {\n this.manageTriggerElement(changes.get('triggerElement'));\n }\n }\n\n protected override updated(changes: PropertyValues): void {\n super.updated(changes);\n if (changes.has('placement')) {\n if (this.placement) {\n this.dialogEl.setAttribute('actual-placement', this.placement);\n } else {\n this.dialogEl.removeAttribute('actual-placement');\n }\n if (this.open && typeof changes.get('placement') !== 'undefined') {\n this.placementController.resetOverlayPosition();\n }\n }\n }\n\n protected renderContent(): TemplateResult {\n return html`\n <div style=${styleMap(this.dialogStyleMap)} part=\"content\">\n <slot @slotchange=${this.handleSlotchange}></slot>\n </div>\n `;\n }\n\n private get dialogStyleMap(): StyleInfo {\n return {\n '--swc-overlay-open-count': Overlay.openCount.toString(),\n };\n }\n\n protected renderDialog(): TemplateResult {\n /**\n * `--swc-overlay-open-count` is applied to mimic the single stack\n * nature of the top layer in browsers that do not yet support it.\n *\n * The value should always be the full number of overlays ever opened\n * which will be added to `--swc-overlay-z-index-base` which can be\n * provided by a consuming developer but defaults to 1000 to beat as\n * much stacking as possible durring fallback delivery.\n **/\n return html`\n <dialog\n class=\"dialog\"\n part=\"dialog\"\n @close=${this.handleBrowserClose}\n @cancel=${this.handleBrowserClose}\n @beforetoggle=${this.handleBeforetoggle}\n ?is-visible=${this.isVisible}\n >\n ${this.renderContent()}\n </dialog>\n `;\n }\n\n protected renderPopover(): TemplateResult {\n const hasPopoverAttribute = 'popover' in this;\n const popoverValue = hasPopoverAttribute\n ? this.popoverValue\n : undefined;\n /**\n * `--swc-overlay-open-count` is applied to mimic the single stack\n * nature of the top layer in browsers that do not yet support it.\n *\n * The value should always be the full number of overlays ever opened\n * which will be added to `--swc-overlay-z-index-base` which can be\n * provided by a consuming developer but defaults to 1000 to beat as\n * much stacking as possible durring fallback delivery.\n **/\n return html`\n <div\n class=\"dialog\"\n part=\"dialog\"\n popover=${ifDefined(popoverValue)}\n @beforetoggle=${this.handleBeforetoggle}\n @close=${this.handleBrowserClose}\n ?is-visible=${this.isVisible}\n >\n ${this.renderContent()}\n </div>\n `;\n }\n\n public override render(): TemplateResult {\n const isDialog = this.type === 'modal' || this.type === 'page';\n return html`\n ${isDialog ? this.renderDialog() : this.renderPopover()}\n <slot name=\"longpress-describedby-descriptor\"></slot>\n `;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('close', () => {\n this.open = false;\n });\n if (this.hasNonVirtualTrigger) {\n this.bindEvents();\n }\n }\n\n override disconnectedCallback(): void {\n if (this.hasNonVirtualTrigger) {\n this.unbindEvents();\n }\n this.open = false;\n super.disconnectedCallback();\n }\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;AAWA;AAAA,EACI;AAAA,OAGG;AACP;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP;AAAA,EACI;AAAA,EACA;AAAA,OACG;AACP;AAAA,EACI;AAAA,EACA;AAAA,OACG;AACP,SAAS,gCAAgC;AACzC;AAAA,EACI;AAAA,EAEA;AAAA,OACG;AAEP,SAAS,iBAAiB,iBAAiB;AAC3C,SAAS,qBAAqB;AAE9B,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AACjC,SAAS,oBAAoB;AAC7B,SAAS,YAAY;AACrB,SAAS,sBAAsB;AAC/B,SAAS,2BAA2B;AAEpC,OAAO,YAAY;AAEnB,MAAM,qBAAqB;AAMpB,aAAM,yBAAyB;AAAA,EAClC,OAAO;AAAA,EACP,UAAU;AAAA,EACV,OAAO;AACX;AAEA,MAAM,kBAAkB,iBAAiB,SAAS,cAAc,KAAK;AAErE,IAAI,kBAAkB,cAAc,eAAe;AACnD,IAAI,iBAAiB;AACjB,oBAAkB,eAAe,eAAe;AACpD,OAAO;AACH,oBAAkB,iBAAiB,eAAe;AACtD;AAQO,MAAM,WAAN,cAAsB,gBAAgB;AAAA,EAAtC;AAAA;AAcH,SAAS,UAAU;AA+BnB,SAAQ,YAAY;AAiBpB,SAAU,cAAc;AAKxB,SAAS,YAAY;AAUrB,kBAAoC;AAEpC,SAAmB,sBAAsB,IAAI,oBAAoB,IAAI;AAkBrE,SAAQ,QAAQ;AAYhB,SAAS,gBAA2C;AAEpD,SAAQ,yBAAyB;AACjC,SAAQ,8BAA8B;AAqBtC,SAAS,iBAAsD;AAS/D,SAAS,OAAqB;AAE9B,SAAU,UAAU;AAEpB,SAAQ,kBAAkB,IAAI,4BAA4B,IAAI;AAiQ9D,SAAQ,aAAuB,CAAC;AAqFhC,SAAQ,oBAAoB,CAAC,UAA8B;AACvD,UAAI,CAAC,KAAK;AAAgB;AAC1B,UAAI,MAAM,WAAW;AAAG;AACxB,YAAM,iBAAiB,KAAK;AAC5B,WAAK,cAAc;AACnB,qBAAe,iBAAiB,aAAa,KAAK,eAAe;AACjE,qBAAe,iBAAiB,iBAAiB,KAAK,eAAe;AACrE,WAAK,kBAAkB,WAAW,MAAM;AACpC,YAAI,CAAC;AAAgB;AACrB,uBAAe;AAAA,UACX,IAAI,YAA4B,aAAa;AAAA,YACzC,SAAS;AAAA,YACT,UAAU;AAAA,YACV,QAAQ;AAAA,cACJ,QAAQ;AAAA,YACZ;AAAA,UACJ,CAAC;AAAA,QACL;AAAA,MACJ,GAAG,kBAAkB;AAAA,IACzB;AAEA,SAAQ,kBAAkB,MAAY;AAClC,mBAAa,KAAK,eAAe;AACjC,UAAI,CAAC,KAAK;AAAgB;AAC1B,UAAI,KAAK,aAAa;AAClB,aAAK,OAAO;AAAA,MAChB;AACA,iBAAW,MAAM;AACb,aAAK,cAAc;AAAA,MACvB,CAAC;AACD,YAAM,iBAAiB,KAAK;AAC5B,qBAAe,oBAAoB,aAAa,KAAK,eAAe;AACpE,qBAAe;AAAA,QACX;AAAA,QACA,KAAK;AAAA,MACT;AAAA,IACJ;AAKA;AAAA;AAAA;AAAA,SAAU,gBAAgB,CAAC,UAA+B;AACtD,YAAM,EAAE,MAAM,OAAO,IAAI;AACzB,UAAI,SAAS,WAAY,UAAU,SAAS,aAAc;AACtD,YAAI,SAAS,aAAa;AACtB,gBAAM,gBAAgB;AACtB,gBAAM,yBAAyB;AAAA,QACnC;AAAA,MACJ;AAAA,IACJ;AAEA,SAAU,cAAc,CAAC,UAA+B;AACpD,YAAM,EAAE,MAAM,OAAO,IAAI;AACzB,UAAI,SAAS,WAAY,UAAU,SAAS,aAAc;AACtD,cAAM,gBAAgB;AACtB,aAAK;AAAA,UACD,IAAI,YAA4B,aAAa;AAAA,YACzC,SAAS;AAAA,YACT,UAAU;AAAA,YACV,QAAQ;AAAA,cACJ,QAAQ;AAAA,YACZ;AAAA,UACJ,CAAC;AAAA,QACL;AAAA,MACJ;AAAA,IACJ;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAQ,oBAAoB;AAE5B,SAAU,4BAA4B,MAAY;AAC9C,WAAK,oBAAoB,KAAK;AAAA,IAClC;AAEA,SAAU,cAAc,MAAY;AAChC,UAAI,KAAK;AAAa;AACtB,UAAI,CAAC,KAAK,mBAAmB;AACzB,aAAK,OAAO,CAAC,KAAK;AAAA,MACtB;AACA,WAAK,oBAAoB;AAAA,IAC7B;AAEA,SAAQ,YAAY;AAEpB,SAAU,gBAAgB,MAAY;AAClC,WAAK,OAAO;AACZ,WAAK,YAAY;AAAA,IACrB;AAEA,SAAU,iBAAiB,MAAY;AACnC,WAAK,YAAY;AACjB,UAAI,KAAK;AAAgB;AACzB,WAAK,OAAO;AAAA,IAChB;AAEA,SAAQ,iBAAiB;AAEzB,SAAU,qBAAqB,MAAY;AACvC,UAAI,KAAK;AAAU;AACnB,WAAK,OAAO;AACZ,WAAK,iBAAiB;AAAA,IAC1B;AAEA,SAAU,qBAAqB,CAAC,UAA8B;AAC1D,UACI,SAAS,MAAM,iBACf,KAAK,SAAS,MAAM,aAAqB,KACzC,CAAC,GAAG,KAAK,QAAQ,EAAE,KAAK,CAAC,UAAU;AAC/B,YAAI,MAAM,cAAc,QAAQ;AAC5B,iBAAO;AAAA,QACX;AACA,eAAQ,MACH,iBAAiB,EAAE,SAAS,KAAK,CAAC,EAClC,KAAK,CAAC,OAAO;AACV,iBACI,OAAO,MAAM,iBACb,GAAG,SAAS,MAAM,aAAqB;AAAA,QAE/C,CAAC;AAAA,MACT,CAAC,GACH;AACE;AAAA,MACJ;AACA,WAAK,eAAe;AAAA,IACxB;AAEA,SAAU,4BAA4B,CAAC,UAA8B;AACjE,UACI,KAAK,mBAAmB,MAAM,iBAC7B,KAAK,wBACD,KAAK,eAA+B;AAAA,QACjC,MAAM;AAAA,MACV,GACN;AACE;AAAA,MACJ;AACA,WAAK,eAAe;AAAA,IACxB;AASA,SAAU,kBAAkB,MAAY;AACpC,WAAK,OAAO;AACZ,WAAK,cAAc;AAAA,IACvB;AAyBA,SAAO,mBAAmB;AAAA;AAAA,EAjoB1B,IAAI,WAAoB;AACpB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,SAAS,UAAmB;AAC5B,SAAK,YAAY;AACjB,QAAI,UAAU;AACV,UAAI,KAAK,sBAAsB;AAC3B,aAAK,aAAa;AAAA,MACtB;AACA,WAAK,UAAU,KAAK;AACpB,WAAK,OAAO;AAAA,IAChB,OAAO;AACH,WAAK,WAAW;AAChB,WAAK,OAAO,KAAK,QAAQ,KAAK;AAC9B,WAAK,UAAU;AAAA,IACnB;AAAA,EACJ;AAAA,EAYA,IAAY,uBAAgC;AACxC,WACI,CAAC,CAAC,KAAK,kBACP,EAAE,KAAK,0BAA0B;AAAA,EAEzC;AAAA,EAsBA,IAAa,OAAgB;AACzB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAa,KAAK,MAAe;AAC7B,QAAI,QAAQ,KAAK;AAAU;AAC3B,QAAI,SAAS,KAAK;AAAM;AACxB,SAAK,QAAQ;AACb,QAAI,KAAK,MAAM;AACX,eAAQ,aAAa;AACrB,WAAK,YAAY;AAAA,IACrB;AACA,SAAK,cAAc,QAAQ,CAAC,KAAK,IAAI;AAAA,EACzC;AAAA,EAqDA,IAAY,aAAsB;AAC9B,WAAO,KAAK,SAAS,WAAW,KAAK,SAAS;AAAA,EAClD;AAAA,EAEA,IAAY,eAA8C;AACtD,YAAQ,KAAK,MAAM;AAAA,MACf,KAAK;AAAA,MACL,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX;AACI,eAAO,KAAK;AAAA,IACpB;AAAA,EACJ;AAAA,EAEA,IAAc,mBAA4B;AAEtC,QAAI,KAAK,SAAS,UAAU,CAAC,KAAK;AAAM,aAAO;AAG/C,QAAI,CAAC,KAAK,kBAAmB,CAAC,KAAK,aAAa,KAAK,SAAS;AAC1D,aAAO;AACX,WAAO;AAAA,EACX;AAAA,EAEmB,iBAAuB;AACtC,QAAI,CAAC,KAAK,oBAAoB,CAAC,KAAK;AAAM;AAE1C,UAAM,SAAS,KAAK,UAAU;AAC9B,UAAM,UAAU,KAAK;AACrB,UAAM,YAAa,KAAK,aAA2B;AACnD,UAAM,aAAa,KAAK;AAExB,SAAK,oBAAoB,aAAa,KAAK,UAAU;AAAA,MACjD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM,KAAK;AAAA,IACf,CAAC;AAAA,EACL;AAAA,EAEA,MAAyB,oBAAmC;AACxD,UAAM,kBAAkB;AACxB,UAAM,kBAAkB,KAAK;AAC7B,QAAI,KAAK,SAAS,iBAAiB;AAC/B;AAAA,IACJ;AACA,UAAM,KAAK,YAAY,eAAe;AACtC,QAAI,KAAK,SAAS,iBAAiB;AAC/B;AAAA,IACJ;AACA,UAAM,KAAK,YAAY,eAAe;AACtC,QAAI,KAAK,SAAS,iBAAiB;AAC/B;AAAA,IACJ;AACA,UAAM,UAAU,MAAM,KAAK,eAAe,eAAe;AACzD,QAAI,KAAK,SAAS,iBAAiB;AAC/B;AAAA,IACJ;AACA,UAAM,KAAK,WAAW,iBAAiB,OAAO;AAAA,EAClD;AAAA,EAEA,MAAyB,WACrB,iBACA,SACa;AAGb,QAAI,KAAK,kBAAkB,WAAW,KAAK,SAAS,QAAQ;AACxD;AAAA,IACJ;AAEA,UAAM,UAAU;AAChB,UAAM,UAAU;AAChB,QAAI,oBAAoB,KAAK,QAAQ,CAAC,KAAK,MAAM;AAC7C,UACI,KAAK,wBACL,KAAK,SAAU,KAAK,YAAY,EAAe,aAAa,GAC9D;AACE,QAAC,KAAK,eAA+B,MAAM;AAAA,MAC/C;AACA;AAAA,IACJ;AACA,uCAAS;AAAA,EACb;AAAA,EAEA,MAAgB,WAAW,SAAiC;AAxThE;AAyTQ,QAAI,CAAC,KAAK,eAAe,KAAK;AAAM;AAEpC,QAAI,CAAC,KAAK,YAAY;AAClB,YAAM,KAAK;AAAA,IACf;AAEA,QAAI,KAAK,MAAM;AACX,mBAAa,IAAI,IAAI;AACrB,UAAI,KAAK,kBAAkB;AACvB,iBAAS;AAAA,UACL;AAAA,UACA,MAAM;AACF,iBAAK,SAAS,UAAU;AAAA,cACpB;AAAA,cACA;AAAA,YACJ;AACA,iBAAK,mBAAmB;AAAA,UAC5B;AAAA,UACA,EAAE,MAAM,KAAK;AAAA,QACjB;AACA,aAAK,SAAS,UAAU;AAAA,UACpB;AAAA,UACA;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,OAAO;AACH,UAAI,SAAS;AACT,aAAK,QAAQ;AAAA,MACjB;AACA,mBAAa,OAAO,IAAI;AAAA,IAC5B;AAEA,QAAI,KAAK,YAAY;AACjB,WAAK,iBAAiB;AAAA,IAC1B,OAAO;AACH,WAAK,kBAAkB;AAAA,IAC3B;AACA,QAAI,CAAC,KAAK,MAAM;AAIZ,YAAM,eAAe,MAAqB;AAlWtD,YAAAA;AAmWgB,cAAM,YAA2B,CAAC;AAElC,YAAI,cAAc,SAAS;AAC3B,gBACI,2CAAa,eACb,YAAY,WAAW,eACzB;AACE,wBAAc,YAAY,WAAW;AAAA,QACzC;AACA,eAAO,aAAa;AAChB,gBAAM,WACF,YAAY,gBACZ,YAAY,mBACXA,MAAA,YAAY,YAAY,MAAxB,gBAAAA,IAA0C;AAC/C,cAAI,UAAU;AACV,sBAAU,KAAK,QAAuB;AAAA,UAC1C;AACA,wBAAc;AAAA,QAClB;AACA,eAAO;AAAA,MACX;AACA,YACK,UAAK,mBAAL,mBAAqC,WACrC,KAAK;AAAA,QACD,KAAK,YAAY,EAAe;AAAA,MACrC,KACI,aAAa,EAAE,SAAS,IAAI,IAClC;AACE,QAAC,KAAK,eAA+B,MAAM;AAAA,MAC/C;AAAA,IACJ;AAAA,EACJ;AAAA,EAEU,eAAqB;AApYnC;AAqYQ,eAAK,oBAAL,mBAAsB;AAAA,EAC1B;AAAA,EAEU,aAAmB;AACzB,QAAI,CAAC,KAAK;AAAsB;AAChC,SAAK,kBAAkB,IAAI,gBAAgB;AAC3C,UAAM,qBAAqB,KAAK;AAChC,YAAQ,KAAK,oBAAoB;AAAA,MAC7B,KAAK;AACD,aAAK,gBAAgB,kBAAkB;AACvC;AAAA,MACJ,KAAK;AACD,aAAK,oBAAoB,kBAAkB;AAC3C;AAAA,MACJ,KAAK;AACD,aAAK,gBAAgB,kBAAkB;AACvC;AAAA,IACR;AAAA,EACJ;AAAA,EAEU,gBAAgB,gBAAmC;AACzD,UAAM,UAAU,EAAE,QAAQ,KAAK,gBAAgB,OAAO;AACtD,mBAAe,iBAAiB,SAAS,KAAK,aAAa,OAAO;AAClE,mBAAe;AAAA,MACX;AAAA,MACA,KAAK;AAAA,MACL;AAAA,IACJ;AAAA,EACJ;AAAA,EAEU,oBAAoB,gBAAmC;AAC7D,UAAM,UAAU,EAAE,QAAQ,KAAK,gBAAgB,OAAO;AACtD,mBAAe;AAAA,MACX;AAAA,MACA,KAAK;AAAA,MACL;AAAA,IACJ;AACA,mBAAe,iBAAiB,WAAW,KAAK,eAAe,OAAO;AACtE,mBAAe,iBAAiB,SAAS,KAAK,aAAa,OAAO;AAClE,mBAAe;AAAA,MACX;AAAA,MACA,KAAK;AAAA,MACL;AAAA,IACJ;AAEA,SAAK,4BAA4B,cAAc;AAAA,EACnD;AAAA,EAEU,gBAAgB,gBAAmC;AACzD,UAAM,UAAU,EAAE,QAAQ,KAAK,gBAAgB,OAAO;AACtD,mBAAe,iBAAiB,WAAW,KAAK,eAAe,OAAO;AACtE,mBAAe;AAAA,MACX;AAAA,MACA,KAAK;AAAA,MACL;AAAA,IACJ;AACA,mBAAe;AAAA,MACX;AAAA,MACA,KAAK;AAAA,MACL;AAAA,IACJ;AACA,mBAAe;AAAA,MACX;AAAA,MACA,KAAK;AAAA,MACL;AAAA,IACJ;AACA,SAAK;AAAA,MACD;AAAA,MACA,KAAK;AAAA,MACL;AAAA,IACJ;AACA,QAAI,KAAK,kBAAkB;AAAQ;AAEnC,SAAK,uBAAuB,cAAc;AAAA,EAC9C;AAAA,EAEU,qBAAqB,gBAA0C;AACrE,QAAI,gBAAgB;AAChB,WAAK,aAAa;AAClB,WAAK,uBAAuB;AAAA,IAChC;AACA,UAAM,mBACF,CAAC,KAAK,kBACN,KAAK,0BAA0B;AACnC,QAAI,kBAAkB;AAClB;AAAA,IACJ;AACA,SAAK,WAAW;AAAA,EACpB;AAAA,EAIQ,4BAA4B,SAA4B;AAC5D;AAAA;AAAA,MAEI,KAAK,uBAAuB;AAAA,MAE5B,KAAK,gCAAgC;AAAA,MAErC,CAAC,KAAK,SAAS;AAAA,MACjB;AACE;AAAA,IACJ;AAEA,UAAM,uBAAuB,SAAS,cAAc,KAAK;AACzD,yBAAqB,KAAK,oCAAoC,OACzD,WAAW,EACX,MAAM,GAAG,CAAC;AACf,UAAM,cAAc,MAAM,KAAK,UAAU,IAAI,UAAU;AACvD,yBAAqB,cAAc,uBAAuB,WAAW;AACrE,yBAAqB,OAAO;AAC5B,YAAQ,sBAAsB,YAAY,oBAAoB;AAE9D,UAAM,8BAA8B;AAAA,MAChC;AAAA,MACA;AAAA,MACA,CAAC,qBAAqB,EAAE;AAAA,IAC5B;AACA,SAAK,8BAA8B,MAAM;AACrC,kCAA4B;AAC5B,2BAAqB,OAAO;AAC5B,WAAK,8BAA8B;AAAA,IACvC;AAAA,EACJ;AAAA,EAEQ,uBAAuB,SAA4B;AACvD;AAAA;AAAA,MAEI,KAAK,uBAAuB;AAAA,MAE5B,KAAK,2BAA2B;AAAA,MAEhC,CAAC,KAAK,SAAS;AAAA,MACjB;AACE;AAAA,IACJ;AAEA,UAAM,cAAc,QAAQ,YAAY;AACxC,UAAM,cAAc,KAAK,SAAS,CAAC,EAAE,YAAY;AACjD,UAAM,cAAc,KAAK,YAAY;AACrC,QAAI,eAAe,aAAa;AAC5B,YAAM,yBAAyB;AAAA,QAC3B;AAAA,QACA;AAAA,QACA,CAAC,KAAK,EAAE;AAAA,MACZ;AACA,WAAK,yBAAyB,MAAM;AAChC,+BAAuB;AACvB,aAAK,yBAAyB;AAAA,MAClC;AAAA,IACJ,WAAW,gBAAgB,aAAa;AACpC,WAAK,aAAa,KAAK,SAAS,IAAI,CAAC,OAAO,GAAG,EAAE;AACjD,YAAM,aAAa,KAAK,SAAS,IAAI,CAAC,OAAO;AACzC,YAAI,CAAC,GAAG,IAAI;AACR,aAAG,KAAK,GAAG,KAAK,QAAQ,YAAY,YAAY,OAC3C,WAAW,EACX,MAAM,GAAG,CAAC;AAAA,QACnB;AACA,eAAO,GAAG;AAAA,MACd,CAAC;AACD,YAAM,yBAAyB;AAAA,QAC3B;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AACA,WAAK,yBAAyB,MAAM;AAChC,+BAAuB;AACvB,aAAK,SAAS,IAAI,CAAC,IAAI,UAAU;AAC7B,aAAG,KAAK,KAAK,WAAW,KAAK;AAAA,QACjC,CAAC;AACD,aAAK,yBAAyB;AAAA,MAClC;AAAA,IACJ;AAAA,EACJ;AAAA,EAkJU,iBAAuB;AAC7B,SAAK,iBAAiB;AACtB,UAAM,iBAAiB,KAAK;AAC5B,QAAI,KAAK,aAAa,eAAe,QAAQ,gBAAgB;AAAG;AAChE,SAAK,OAAO;AAAA,EAChB;AAAA,EAOU,mBAAmB,OAA2C;AACpE,QAAI,MAAM,aAAa,QAAQ;AAC3B,WAAK,mBAAmB;AAAA,IAC5B;AAAA,EACJ;AAAA,EAEU,qBAA2B;AACjC,SAAK,OAAO;AAAA,EAChB;AAAA,EAEU,mBAAyB;AAC/B,QAAI,KAAK,gBAAgB;AACrB,WAAK,uBAAuB,KAAK,cAA6B;AAAA,IAClE;AACA,QAAI,CAAC,KAAK,SAAS,QAAQ;AACvB,WAAK,4BAA4B;AAAA,IACrC,WAAW,KAAK,sBAAsB;AAClC,WAAK;AAAA,QACD,KAAK;AAAA,MACT;AAAA,IACJ;AAAA,EACJ;AAAA,EAIO,qBAA8B;AACjC,UAAM,qBAAqB,KAAK;AAChC,SAAK,mBAAmB;AACxB,WAAO;AAAA,EACX;AAAA,EAES,WAAW,SAA+B;AA/uBvD;AAgvBQ,QAAI,CAAC,KAAK,YAAY;AAClB,WAAK,iBAAiB,YAAY,CAAC,UAAsB;AAErD,YAAI,KAAK,SAAS,QAAQ;AACtB;AAAA,QACJ;AAEA,YAAI,CAAC,MAAM,eAAe;AACtB;AAAA,QACJ;AACA,cAAM,gBAAgB,IAAI,MAAM,0BAA0B;AAAA,UACtD,SAAS;AAAA,UACT,UAAU;AAAA,QACd,CAAC;AACD,cAAM,cAAc;AAAA,UAChB,cAAc;AAAA,UACd,CAACC,WAAiB;AACd,gBAAI,CAACA,OAAM,aAAa,EAAE,SAAS,IAAI,GAAG;AACtC,mBAAK,OAAO;AAAA,YAChB;AAAA,UACJ;AAAA,QACJ;AACA,cAAM,cAAc,cAAc,aAAa;AAAA,MACnD,CAAC;AAAA,IACL;AACA,QAAI,CAAC,KAAK,aAAa,IAAI,GAAG;AAC1B,WAAK;AAAA,QACD;AAAA,QACA,GAAG,KAAK,QAAQ,YAAY,KAAK,OAC5B,WAAW,EACX,MAAM,GAAG,CAAC;AAAA,MACnB;AAAA,IACJ;AACA,QACI,QAAQ,IAAI,MAAM,MACjB,OAAO,QAAQ,IAAI,MAAM,MAAM,eAAe,KAAK,OACtD;AACE,WAAK,WAAW,QAAQ,IAAI,MAAM,CAAC;AAAA,IACvC;AACA,QAAI,QAAQ,IAAI,SAAS,GAAG;AACxB,YAAM,CAAC,IAAI,WAAW,MAAI,UAAK,YAAL,mBAAc,MAAM,SAAQ,CAAC;AACvD,WAAK,gBAAgB,WAAW,KAAK,IAAI,OAAO;AAChD,WAAK,qBAAqB;AAAA,IAK9B;AACA,UAAM,aAAa,KAAK;AACxB,QAAI,QAAQ,IAAI,4BAA4B,GAAG;AAC3C,WAAK,iBAAiB,KAAK,gBAAgB;AAC3C,WAAK,qBAAqB,UAAU;AAAA,IACxC;AACA,QAAI,QAAQ,IAAI,gBAAgB,GAAG;AAC/B,WAAK,qBAAqB,QAAQ,IAAI,gBAAgB,CAAC;AAAA,IAC3D;AAAA,EACJ;AAAA,EAEmB,QAAQ,SAA+B;AACtD,UAAM,QAAQ,OAAO;AACrB,QAAI,QAAQ,IAAI,WAAW,GAAG;AAC1B,UAAI,KAAK,WAAW;AAChB,aAAK,SAAS,aAAa,oBAAoB,KAAK,SAAS;AAAA,MACjE,OAAO;AACH,aAAK,SAAS,gBAAgB,kBAAkB;AAAA,MACpD;AACA,UAAI,KAAK,QAAQ,OAAO,QAAQ,IAAI,WAAW,MAAM,aAAa;AAC9D,aAAK,oBAAoB,qBAAqB;AAAA,MAClD;AAAA,IACJ;AAAA,EACJ;AAAA,EAEU,gBAAgC;AACtC,WAAO;AAAA,yBACU,SAAS,KAAK,cAAc;AAAA,oCACjB,KAAK;AAAA;AAAA;AAAA,EAGrC;AAAA,EAEA,IAAY,iBAA4B;AACpC,WAAO;AAAA,MACH,4BAA4B,SAAQ,UAAU,SAAS;AAAA,IAC3D;AAAA,EACJ;AAAA,EAEU,eAA+B;AAUrC,WAAO;AAAA;AAAA;AAAA;AAAA,yBAIU,KAAK;AAAA,0BACJ,KAAK;AAAA,gCACC,KAAK;AAAA,8BACP,KAAK;AAAA;AAAA,kBAEjB,KAAK,cAAc;AAAA;AAAA;AAAA,EAGjC;AAAA,EAEU,gBAAgC;AACtC,UAAM,sBAAsB,aAAa;AACzC,UAAM,eAAe,sBACf,KAAK,eACL;AAUN,WAAO;AAAA;AAAA;AAAA;AAAA,0BAIW,UAAU,YAAY;AAAA,gCAChB,KAAK;AAAA,yBACZ,KAAK;AAAA,8BACA,KAAK;AAAA;AAAA,kBAEjB,KAAK,cAAc;AAAA;AAAA;AAAA,EAGjC;AAAA,EAEgB,SAAyB;AACrC,UAAM,WAAW,KAAK,SAAS,WAAW,KAAK,SAAS;AACxD,WAAO;AAAA,cACD,WAAW,KAAK,aAAa,IAAI,KAAK,cAAc;AAAA;AAAA;AAAA,EAG9D;AAAA,EAES,oBAA0B;AAC/B,UAAM,kBAAkB;AACxB,SAAK,iBAAiB,SAAS,MAAM;AACjC,WAAK,OAAO;AAAA,IAChB,CAAC;AACD,QAAI,KAAK,sBAAsB;AAC3B,WAAK,WAAW;AAAA,IACpB;AAAA,EACJ;AAAA,EAES,uBAA6B;AAClC,QAAI,KAAK,sBAAsB;AAC3B,WAAK,aAAa;AAAA,IACtB;AACA,SAAK,OAAO;AACZ,UAAM,qBAAqB;AAAA,EAC/B;AACJ;AAv0BO,WAAM,UAAN;AAAM,QACO,SAAS,CAAC,MAAM;AADvB,QAmGF,YAAY;AArFV;AAAA,EADR,SAAS,EAAE,MAAM,QAAQ,CAAC;AAAA,GAblB,QAcA;AAGA;AAAA,EADR,MAAM,SAAS;AAAA,GAhBP,QAiBA;AASL;AAAA,EADH,SAAS,EAAE,MAAM,QAAQ,CAAC;AAAA,GAzBlB,QA0BL;AAyBK;AAAA,EAJR,sBAAsB;AAAA,IACnB,SAAS;AAAA,IACT,UAAU;AAAA;AAAA,EACd,CAAC;AAAA,GAlDQ,QAmDA;AAgBA;AAAA,EADR,MAAM;AAAA,GAlEE,QAmEA;AAUT;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GA5EjB,QA6ET;AAKa;AAAA,EADZ,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GAjFjC,QAkFI;AAwBb;AAAA,EADC,SAAS;AAAA,GAzGD,QA0GT;AAGS;AAAA,EADR,SAAS,EAAE,WAAW,iBAAiB,CAAC;AAAA,GA5GhC,QA6GA;AAMT;AAAA,EADC,MAAM,MAAM;AAAA,GAlHJ,QAmHT;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,WAAW,cAAc,CAAC;AAAA,GArH3C,QAsHT;AASA;AAAA,EADC,SAAS;AAAA,GA9HD,QA+HT;AAMS;AAAA,EADR,SAAS,EAAE,WAAW,MAAM,CAAC;AAAA,GApIrB,QAqIA;AAMT;AAAA,EADC,SAAS,EAAE,WAAW,MAAM,CAAC;AAAA,GA1IrB,QA2IT;AAGS;AAAA,EADR,SAAS;AAAA,GA7ID,QA8IA;",
|
|
6
|
-
"names": ["_a", "event"]
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2023 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\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 html,\n PropertyValues,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n queryAssignedElements,\n state,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport {\n isAndroid,\n isIOS,\n} from '@spectrum-web-components/shared/src/platform.js';\nimport {\n ElementResolutionController,\n elementResolverUpdatedSymbol,\n} from '@spectrum-web-components/reactive-controllers/src/ElementResolution.js';\nimport { conditionAttributeWithId } from '@spectrum-web-components/base/src/condition-attribute-with-id.js';\nimport {\n ifDefined,\n StyleInfo,\n styleMap,\n} from '@spectrum-web-components/base/src/directives.js';\n\nimport { AbstractOverlay, nextFrame } from './AbstractOverlay.dev.js'\nimport { OverlayDialog } from './OverlayDialog.dev.js'\nimport {\n OpenableElement,\n OverlayState,\n OverlayTypes,\n Placement,\n} from './overlay-types.dev.js'\nimport { OverlayPopover } from './OverlayPopover.dev.js'\nimport { OverlayNoPopover } from './OverlayNoPopover.dev.js'\nimport { overlayStack } from './OverlayStack.dev.js'\nimport { noop } from './AbstractOverlay.dev.js'\nimport { VirtualTrigger } from './VirtualTrigger.dev.js'\nimport { PlacementController } from './PlacementController.dev.js'\n\nimport styles from './overlay.css.js';\n\nconst LONGPRESS_DURATION = 300;\n\ntype LongpressEvent = {\n source: 'pointer' | 'keyboard';\n};\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\nconst supportsPopover = 'showPopover' in document.createElement('div');\n\nlet OverlayFeatures = OverlayDialog(AbstractOverlay);\n/* c8 ignore next 2 */\nif (supportsPopover) {\n OverlayFeatures = OverlayPopover(OverlayFeatures);\n} else {\n OverlayFeatures = OverlayNoPopover(OverlayFeatures);\n}\n\n/**\n * @element sp-overlay\n *\n * @fires sp-opened - announces that an overlay has completed any entry animations\n * @fires sp-closed - announce that an overlay has compelted any exit animations\n */\nexport class Overlay extends OverlayFeatures {\n static override styles = [styles];\n\n abortController!: AbortController;\n\n /**\n * An Overlay that is `delayed` will wait until a warm-up period of 1000ms\n * has completed before opening. Once the warmup period has completed, all\n * subsequent Overlays will open immediately. When no Overlays are opened,\n * a cooldown period of 1000ms will begin. Once the cooldown has completed,\n * the next Overlay to be opened will be subject to the warm-up period if\n * provided that option.\n */\n @property({ type: Boolean })\n override delayed = false;\n\n @query('.dialog')\n override dialogEl!: HTMLDialogElement & {\n showPopover(): void;\n hidePopover(): void;\n };\n\n /**\n * Whether the overlay is currently functional or not\n */\n @property({ type: Boolean })\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(disabled: boolean) {\n this._disabled = disabled;\n if (disabled) {\n if (this.hasNonVirtualTrigger) {\n this.unbindEvents();\n }\n this.wasOpen = this.open;\n this.open = false;\n } else {\n this.bindEvents();\n this.open = this.open || this.wasOpen;\n this.wasOpen = false;\n }\n }\n\n private _disabled = false;\n\n @queryAssignedElements({\n flatten: true,\n selector: ':not([slot=\"longpress-describedby-descriptor\"])', // gather only elements slotted into the default slot\n })\n override elements!: OpenableElement[];\n\n public parentOverlayToForceClose?: Overlay;\n\n private get hasNonVirtualTrigger(): boolean {\n return (\n !!this.triggerElement &&\n !(this.triggerElement instanceof VirtualTrigger)\n );\n }\n\n protected longpressState: 'null' | 'potential' | 'opening' | 'pressed' =\n 'null';\n\n private longressTimeout!: ReturnType<typeof setTimeout>;\n\n /**\n * The `offset` property accepts either a single number, to\n * define the offset of the Overlay along the main axis from\n * the trigger, or 2-tuple, to define the offset along the\n * main axis and the cross axis. This option has no effect\n * when there is no trigger element.\n */\n @property({ type: Number })\n offset: number | [number, number] = 6;\n\n protected override placementController = new PlacementController(this);\n\n @property({ type: Boolean, reflect: true })\n override get open(): boolean {\n return this._open;\n }\n\n override set open(open: boolean) {\n // Don't respond when disabled.\n if (open && this.disabled) return;\n // Don't respond when state not dirty\n if (open === this.open) return;\n // Don't respond when you're in the shadow on a longpress\n // Shadow occurs when the first \"click\" would normally close the popover\n if (\n (this.longpressState === 'opening' ||\n this.longpressState === 'pressed') &&\n !open\n )\n return;\n this._open = open;\n if (this.open) {\n Overlay.openCount += 1;\n }\n this.requestUpdate('open', !this.open);\n }\n\n private _open = false;\n\n static openCount = 1;\n\n /**\n * Instruct the Overlay where to place itself in\n * relationship to the trigger element.\n */\n @property()\n placement?: Placement;\n\n @property({ attribute: 'receives-focus' })\n override receivesFocus: 'true' | 'false' | 'auto' = 'auto';\n\n private releaseAriaDescribedby = noop;\n private releaseLongpressDescribedby = noop;\n\n @query('slot')\n slotEl!: HTMLSlotElement;\n\n @state()\n override get state(): OverlayState {\n return this._state;\n }\n\n override set state(state) {\n if (state === this.state) return;\n const oldState = this.state;\n this._state = state;\n if (this.state === 'opened' || this.state === 'closed') {\n // When triggered by the pointer, the last of `opened`\n // or `pointerup` should move the `longpressState` to\n // `null` so that the earlier event can void the \"light\n // dismiss\" and keep the Overlay open.\n this.longpressState =\n this.longpressState === 'pressed'\n ? 'null'\n : this.longpressState;\n }\n this.requestUpdate('state', oldState);\n }\n\n override _state: OverlayState = 'closed';\n\n @property({ type: Number, attribute: 'tip-padding' })\n tipPadding?: number;\n\n /**\n * An optional ID reference for the trigger element combined with the optional\n * interaction (click | hover | longpress) by which the overlay shold open\n * the overlay with an `@`: e.g. `trigger@click` opens the overlay when an\n * element with the ID \"trigger\" is clicked.\n */\n @property()\n trigger?: string;\n\n /**\n * An element reference for the trigger element that the overlay should relate to.\n */\n @property({ attribute: false })\n override triggerElement: HTMLElement | VirtualTrigger | null = null;\n\n /**\n * The specific interaction to listen for on the `triggerElement` to open the overlay.\n */\n @property({ attribute: false })\n triggerInteraction?: 'click' | 'longpress' | 'hover';\n\n @property()\n override type: OverlayTypes = 'hint';\n\n protected wasOpen = false;\n\n private elementResolver = new ElementResolutionController(this);\n\n private get usesDialog(): boolean {\n return this.type === 'modal' || this.type === 'page';\n }\n\n private get popoverValue(): 'auto' | 'manual' | undefined {\n const hasPopoverAttribute = 'popover' in this;\n if (!hasPopoverAttribute) {\n return undefined;\n }\n /* c8 ignore next 9 */\n switch (this.type) {\n case 'modal':\n case 'page':\n return undefined;\n case 'hint':\n return 'manual';\n default:\n return this.type;\n }\n }\n\n protected get requiresPosition(): boolean {\n // Do not position \"page\" overlays as they should block the entire UI.\n if (this.type === 'page' || !this.open) return false;\n // Do not position content without a trigger element, what would you position it in relation to?\n // Do not automatically position content, unless it is a \"hint\".\n if (!this.triggerElement || (!this.placement && this.type !== 'hint'))\n return false;\n return true;\n }\n\n protected override managePosition(): void {\n if (!this.requiresPosition || !this.open) return;\n\n const offset = this.offset || 0;\n const trigger = this.triggerElement as HTMLElement;\n const placement = (this.placement as Placement) || 'right';\n const tipPadding = this.tipPadding;\n\n this.placementController.placeOverlay(this.dialogEl, {\n offset,\n placement,\n tipPadding,\n trigger,\n type: this.type,\n });\n }\n\n protected override async managePopoverOpen(): Promise<void> {\n super.managePopoverOpen();\n const targetOpenState = this.open;\n /* c8 ignore next 3 */\n if (this.open !== targetOpenState) {\n return;\n }\n await this.manageDelay(targetOpenState);\n if (this.open !== targetOpenState) {\n return;\n }\n await this.ensureOnDOM(targetOpenState);\n /* c8 ignore next 3 */\n if (this.open !== targetOpenState) {\n return;\n }\n const focusEl = await this.makeTransition(targetOpenState);\n if (this.open !== targetOpenState) {\n return;\n }\n await this.applyFocus(targetOpenState, focusEl);\n }\n\n protected override async applyFocus(\n targetOpenState: boolean,\n focusEl: HTMLElement | null\n ): Promise<void> {\n // Do not move focus when explicitly told not to\n // and when the Overlay is a \"hint\"\n if (this.receivesFocus === 'false' || this.type === 'hint') {\n return;\n }\n\n await nextFrame();\n await nextFrame();\n if (targetOpenState === this.open && !this.open) {\n if (\n this.hasNonVirtualTrigger &&\n this.contains((this.getRootNode() as Document).activeElement)\n ) {\n (this.triggerElement as HTMLElement).focus();\n }\n return;\n }\n focusEl?.focus();\n }\n\n protected async manageOpen(oldOpen: boolean): Promise<void> {\n if (!this.isConnected && this.open) return;\n\n if (!this.hasUpdated) {\n await this.updateComplete;\n }\n\n if (this.open) {\n overlayStack.add(this);\n if (this.willPreventClose) {\n document.addEventListener(\n 'pointerup',\n () => {\n this.dialogEl.classList.toggle(\n 'not-immediately-closable',\n false\n );\n this.willPreventClose = false;\n },\n { once: true }\n );\n this.dialogEl.classList.toggle(\n 'not-immediately-closable',\n true\n );\n }\n } else {\n if (oldOpen) {\n this.dispose();\n }\n overlayStack.remove(this);\n }\n if (this.open && this.state !== 'opened') {\n this.state = 'opening';\n } else if (!this.open && this.state !== 'closed') {\n this.state = 'closing';\n }\n\n if (this.usesDialog) {\n this.manageDialogOpen();\n } else {\n this.managePopoverOpen();\n }\n if (!this.open) {\n // If the focus remains inside of the overlay or\n // a slotted descendent of the overlay you need to return\n // focus back to the trigger.\n const getAncestors = (): HTMLElement[] => {\n const ancestors: HTMLElement[] = [];\n // eslint-disable-next-line @spectrum-web-components/document-active-element\n let currentNode = document.activeElement;\n while (\n currentNode?.shadowRoot &&\n currentNode.shadowRoot.activeElement\n ) {\n currentNode = currentNode.shadowRoot.activeElement;\n }\n while (currentNode) {\n const ancestor =\n currentNode.assignedSlot ||\n currentNode.parentElement ||\n (currentNode.getRootNode() as ShadowRoot)?.host;\n if (ancestor) {\n ancestors.push(ancestor as HTMLElement);\n }\n currentNode = ancestor;\n }\n return ancestors;\n };\n if (\n (this.triggerElement as HTMLElement)?.focus &&\n (this.contains(\n (this.getRootNode() as Document).activeElement\n ) ||\n getAncestors().includes(this))\n ) {\n (this.triggerElement as HTMLElement).focus();\n }\n }\n }\n\n protected unbindEvents(): void {\n this.abortController?.abort();\n }\n\n protected bindEvents(): void {\n if (!this.hasNonVirtualTrigger) return;\n this.abortController = new AbortController();\n const nextTriggerElement = this.triggerElement as HTMLElement;\n switch (this.triggerInteraction) {\n case 'click':\n this.bindClickEvents(nextTriggerElement);\n return;\n case 'longpress':\n this.bindLongpressEvents(nextTriggerElement);\n return;\n case 'hover':\n this.bindHoverEvents(nextTriggerElement);\n return;\n }\n }\n\n protected bindClickEvents(triggerElement: HTMLElement): void {\n const options = { signal: this.abortController.signal };\n triggerElement.addEventListener('click', this.handleClick, options);\n triggerElement.addEventListener(\n 'pointerdown',\n this.handlePointerdownForClick,\n options\n );\n }\n\n protected bindLongpressEvents(triggerElement: HTMLElement): void {\n const options = { signal: this.abortController.signal };\n triggerElement.addEventListener(\n 'longpress',\n this.handleLongpress,\n options\n );\n triggerElement.addEventListener(\n 'pointerdown',\n this.handlePointerdown,\n options\n );\n this.prepareLongpressDescription(triggerElement);\n if (\n (triggerElement as HTMLElement & { holdAffordance: boolean })\n .holdAffordance\n ) {\n // Only bind keyboard events when the trigger element isn't doing it for us.\n return;\n }\n triggerElement.addEventListener('keydown', this.handleKeydown, options);\n triggerElement.addEventListener('keyup', this.handleKeyup, options);\n }\n\n protected bindHoverEvents(triggerElement: HTMLElement): void {\n const options = { signal: this.abortController.signal };\n triggerElement.addEventListener('focusin', this.handleFocusin, options);\n triggerElement.addEventListener(\n 'focusout',\n this.handleFocusout,\n options\n );\n triggerElement.addEventListener(\n 'pointerenter',\n this.handlePointerenter,\n options\n );\n triggerElement.addEventListener(\n 'pointerleave',\n this.handlePointerleave,\n options\n );\n this.addEventListener(\n 'pointerleave',\n this.handleOverlayPointerleave,\n options\n );\n if (this.receivesFocus === 'true') return;\n\n this.prepareAriaDescribedby(triggerElement);\n }\n\n protected manageTriggerElement(triggerElement: HTMLElement | null): void {\n if (triggerElement) {\n this.unbindEvents();\n this.releaseAriaDescribedby();\n }\n const missingOrVirtual =\n !this.triggerElement ||\n this.triggerElement instanceof VirtualTrigger;\n if (missingOrVirtual) {\n return;\n }\n this.bindEvents();\n }\n\n private elementIds: string[] = [];\n\n private prepareLongpressDescription(trigger: HTMLElement): void {\n if (\n // only \"longpress\" relationships are described this way\n this.triggerInteraction !== 'longpress' ||\n // do not reapply until target it recycled\n this.releaseLongpressDescribedby !== noop ||\n // require \"longpress content\" to apply relationship\n !this.elements.length\n ) {\n return;\n }\n\n const longpressDescription = document.createElement('div');\n longpressDescription.id = `longpress-describedby-descriptor-${crypto\n .randomUUID()\n .slice(0, 8)}`;\n const messageType = isIOS() || isAndroid() ? 'touch' : 'keyboard';\n longpressDescription.textContent = LONGPRESS_INSTRUCTIONS[messageType];\n longpressDescription.slot = 'longpress-describedby-descriptor';\n trigger.insertAdjacentElement('afterend', longpressDescription);\n\n const releaseLongpressDescribedby = conditionAttributeWithId(\n trigger,\n 'aria-describedby',\n [longpressDescription.id]\n );\n this.releaseLongpressDescribedby = () => {\n releaseLongpressDescribedby();\n longpressDescription.remove();\n this.releaseLongpressDescribedby = noop;\n };\n }\n\n private prepareAriaDescribedby(trigger: HTMLElement): void {\n if (\n // only \"hover\" relationships establed described by content\n this.triggerInteraction !== 'hover' ||\n // do not reapply until target is recycled\n this.releaseAriaDescribedby !== noop ||\n // require \"hover content\" to apply relationship\n !this.elements.length\n ) {\n return;\n }\n\n const triggerRoot = trigger.getRootNode();\n const contentRoot = this.elements[0].getRootNode();\n const overlayRoot = this.getRootNode();\n if (triggerRoot == overlayRoot) {\n const releaseAriaDescribedby = conditionAttributeWithId(\n trigger,\n 'aria-describedby',\n [this.id]\n );\n this.releaseAriaDescribedby = () => {\n releaseAriaDescribedby();\n this.releaseAriaDescribedby = noop;\n };\n } else if (triggerRoot === contentRoot) {\n this.elementIds = this.elements.map((el) => el.id);\n const appliedIds = this.elements.map((el) => {\n if (!el.id) {\n el.id = `${this.tagName.toLowerCase()}-helper-${crypto\n .randomUUID()\n .slice(0, 8)}`;\n }\n return el.id;\n });\n const releaseAriaDescribedby = conditionAttributeWithId(\n trigger,\n 'aria-describedby',\n appliedIds\n );\n this.releaseAriaDescribedby = () => {\n releaseAriaDescribedby();\n this.elements.map((el, index) => {\n el.id = this.elementIds[index];\n });\n this.releaseAriaDescribedby = noop;\n };\n }\n }\n\n private handlePointerdown = (event: PointerEvent): void => {\n if (!this.triggerElement) return;\n if (event.button !== 0) return;\n const triggerElement = this.triggerElement as HTMLElement;\n this.longpressState = 'potential';\n triggerElement.addEventListener('pointerup', this.handlePointerup);\n triggerElement.addEventListener('pointercancel', this.handlePointerup);\n if (\n (triggerElement as HTMLElement & { holdAffordance: boolean })\n .holdAffordance\n ) {\n // Only dispatch longpress event if the trigger element isn't doing it for us.\n return;\n }\n this.longressTimeout = setTimeout(() => {\n if (!triggerElement) return;\n triggerElement.dispatchEvent(\n new CustomEvent<LongpressEvent>('longpress', {\n bubbles: true,\n composed: true,\n detail: {\n source: 'pointer',\n },\n })\n );\n }, LONGPRESS_DURATION);\n };\n\n private handlePointerup = (): void => {\n clearTimeout(this.longressTimeout);\n if (!this.triggerElement) return;\n // When triggered by the pointer, the last of `opened`\n // or `pointerup` should move the `longpressState` to\n // `null` so that the earlier event can void the \"light\n // dismiss\" and keep the Overlay open.\n this.longpressState = this.state === 'opening' ? 'pressed' : 'null';\n const triggerElement = this.triggerElement as HTMLElement;\n triggerElement.removeEventListener('pointerup', this.handlePointerup);\n triggerElement.removeEventListener(\n 'pointercancel',\n this.handlePointerup\n );\n };\n\n /**\n * @private\n */\n protected handleKeydown = (event: KeyboardEvent): void => {\n const { code, altKey } = event;\n if (code === 'Space' || (altKey && code === 'ArrowDown')) {\n if (code === 'ArrowDown') {\n event.stopPropagation();\n event.stopImmediatePropagation();\n }\n }\n };\n\n protected handleKeyup = (event: KeyboardEvent): void => {\n const { code, altKey } = event;\n if (code === 'Space' || (altKey && code === 'ArrowDown')) {\n if (!this.triggerElement || !this.hasNonVirtualTrigger) {\n return;\n }\n event.stopPropagation();\n (this.triggerElement as HTMLElement).dispatchEvent(\n new CustomEvent<LongpressEvent>('longpress', {\n bubbles: true,\n composed: true,\n detail: {\n source: 'keyboard',\n },\n })\n );\n setTimeout(() => {\n this.longpressState = 'null';\n });\n }\n };\n\n /**\n * An overlay with a `click` interaction should not close on click `triggerElement`.\n * When a click is initiated (`pointerdown`), apply `preventNextToggle` when the\n * overlay is `open` to prevent from toggling the overlay when the click event\n * propagates later in the interaction.\n */\n private preventNextToggle = false;\n\n protected handlePointerdownForClick = (): void => {\n this.preventNextToggle = this.open;\n };\n\n protected handleClick = (): void => {\n if (\n this.longpressState === 'opening' ||\n this.longpressState === 'pressed'\n ) {\n return;\n }\n if (!this.preventNextToggle) {\n this.open = !this.open;\n }\n this.preventNextToggle = false;\n };\n\n private focusedin = false;\n\n protected handleFocusin = (): void => {\n this.open = true;\n this.focusedin = true;\n };\n\n protected handleFocusout = (): void => {\n this.focusedin = false;\n if (this.pointerentered) return;\n this.open = false;\n };\n\n private pointerentered = false;\n\n protected handlePointerenter = (): void => {\n if (this.disabled) return;\n this.open = true;\n this.pointerentered = true;\n };\n\n protected handlePointerleave = (event: PointerEvent): void => {\n if (\n this === event.relatedTarget ||\n this.contains(event.relatedTarget as Node) ||\n [...this.children].find((child) => {\n if (child.localName !== 'slot') {\n return false;\n }\n return (child as HTMLSlotElement)\n .assignedElements({ flatten: true })\n .find((el) => {\n return (\n el === event.relatedTarget ||\n el.contains(event.relatedTarget as Node)\n );\n });\n })\n ) {\n return;\n }\n this.doPointerleave();\n };\n\n protected handleOverlayPointerleave = (event: PointerEvent): void => {\n if (\n this.triggerElement === event.relatedTarget ||\n (this.hasNonVirtualTrigger &&\n (this.triggerElement as HTMLElement).contains(\n event.relatedTarget as Node\n ))\n ) {\n return;\n }\n this.doPointerleave();\n };\n\n protected doPointerleave(): void {\n this.pointerentered = false;\n const triggerElement = this.triggerElement as HTMLElement;\n if (this.focusedin && triggerElement.matches(':focus-visible')) return;\n this.open = false;\n }\n\n protected handleLongpress = (): void => {\n this.open = true;\n this.longpressState =\n this.longpressState === 'potential' ? 'opening' : 'pressed';\n };\n\n protected handleBeforetoggle(event: Event & { newState: string }): void {\n if (event.newState !== 'open') {\n this.handleBrowserClose();\n }\n }\n\n protected handleBrowserClose(): void {\n if (\n this.longpressState !== 'opening' &&\n this.longpressState !== 'pressed'\n ) {\n this.open = false;\n return;\n }\n this.open = true;\n this.manageOpen(false);\n }\n\n protected handleSlotchange(): void {\n if (this.triggerElement) {\n this.prepareAriaDescribedby(this.triggerElement as HTMLElement);\n }\n if (!this.elements.length) {\n this.releaseLongpressDescribedby();\n } else if (this.hasNonVirtualTrigger) {\n this.prepareLongpressDescription(\n this.triggerElement as HTMLElement\n );\n }\n }\n\n public willPreventClose = false;\n\n public shouldPreventClose(): boolean {\n const shouldPreventClose = this.willPreventClose;\n this.willPreventClose = false;\n return shouldPreventClose;\n }\n\n override willUpdate(changes: PropertyValues): void {\n if (!this.hasUpdated) {\n this.addEventListener('focusout', (event: FocusEvent) => {\n // Only \"auto\" popovers should close on any sort of focusout\n if (this.type !== 'auto') {\n return;\n }\n // If you don't know where the focus went, we can't do anyting here.\n if (!event.relatedTarget) {\n return;\n }\n const relationEvent = new Event('overlay-relation-query', {\n bubbles: true,\n composed: true,\n });\n event.relatedTarget.addEventListener(\n relationEvent.type,\n (event: Event) => {\n if (!event.composedPath().includes(this)) {\n this.open = false;\n }\n }\n );\n event.relatedTarget.dispatchEvent(relationEvent);\n });\n }\n if (!this.hasAttribute('id')) {\n this.setAttribute(\n 'id',\n `${this.tagName.toLowerCase()}-${crypto\n .randomUUID()\n .slice(0, 8)}`\n );\n }\n if (\n changes.has('open') &&\n (typeof changes.get('open') !== 'undefined' || this.open)\n ) {\n this.manageOpen(changes.get('open'));\n }\n if (changes.has('trigger')) {\n const [id, interaction] = this.trigger?.split('@') || [];\n this.elementResolver.selector = id ? `#${id}` : '';\n this.triggerInteraction = interaction as\n | 'click'\n | 'longpress'\n | 'hover'\n | undefined;\n }\n const oldTrigger = this.triggerElement as HTMLElement;\n if (changes.has(elementResolverUpdatedSymbol)) {\n this.triggerElement = this.elementResolver.element;\n this.manageTriggerElement(oldTrigger);\n }\n if (changes.has('triggerElement')) {\n this.manageTriggerElement(changes.get('triggerElement'));\n }\n }\n\n protected override updated(changes: PropertyValues): void {\n super.updated(changes);\n if (changes.has('placement')) {\n if (this.placement) {\n this.dialogEl.setAttribute('actual-placement', this.placement);\n } else {\n this.dialogEl.removeAttribute('actual-placement');\n }\n if (this.open && typeof changes.get('placement') !== 'undefined') {\n this.placementController.resetOverlayPosition();\n }\n }\n }\n\n protected renderContent(): TemplateResult {\n return html`\n <div style=${styleMap(this.dialogStyleMap)} part=\"content\">\n <slot @slotchange=${this.handleSlotchange}></slot>\n </div>\n `;\n }\n\n private get dialogStyleMap(): StyleInfo {\n return {\n '--swc-overlay-open-count': Overlay.openCount.toString(),\n };\n }\n\n protected renderDialog(): TemplateResult {\n /**\n * `--swc-overlay-open-count` is applied to mimic the single stack\n * nature of the top layer in browsers that do not yet support it.\n *\n * The value should always be the full number of overlays ever opened\n * which will be added to `--swc-overlay-z-index-base` which can be\n * provided by a consuming developer but defaults to 1000 to beat as\n * much stacking as possible durring fallback delivery.\n **/\n return html`\n <dialog\n class=\"dialog\"\n part=\"dialog\"\n @close=${this.handleBrowserClose}\n @cancel=${this.handleBrowserClose}\n @beforetoggle=${this.handleBeforetoggle}\n ?is-visible=${this.state !== 'closed'}\n >\n ${this.renderContent()}\n </dialog>\n `;\n }\n\n protected renderPopover(): TemplateResult {\n /**\n * `--swc-overlay-open-count` is applied to mimic the single stack\n * nature of the top layer in browsers that do not yet support it.\n *\n * The value should always be the full number of overlays ever opened\n * which will be added to `--swc-overlay-z-index-base` which can be\n * provided by a consuming developer but defaults to 1000 to beat as\n * much stacking as possible durring fallback delivery.\n **/\n return html`\n <div\n class=\"dialog\"\n part=\"dialog\"\n popover=${ifDefined(this.popoverValue)}\n @beforetoggle=${this.handleBeforetoggle}\n @close=${this.handleBrowserClose}\n ?is-visible=${this.state !== 'closed'}\n >\n ${this.renderContent()}\n </div>\n `;\n }\n\n public override render(): TemplateResult {\n const isDialog = this.type === 'modal' || this.type === 'page';\n return html`\n ${isDialog ? this.renderDialog() : this.renderPopover()}\n <slot name=\"longpress-describedby-descriptor\"></slot>\n `;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('close', () => {\n this.open = false;\n });\n if (this.hasNonVirtualTrigger) {\n this.bindEvents();\n }\n }\n\n override disconnectedCallback(): void {\n if (this.hasNonVirtualTrigger) {\n this.unbindEvents();\n }\n this.open = false;\n super.disconnectedCallback();\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["state", "_a", "event"]
|
|
7
7
|
}
|
package/src/Overlay.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
"use strict";var T=Object.defineProperty;var L=Object.getOwnPropertyDescriptor;var o=(m,p,e,t)=>{for(var i=t>1?void 0:t?L(p,e):p,r=m.length-1,s;r>=0;r--)(s=m[r])&&(i=(t?s(p,e,i):s(i))||i);return t&&i&&T(p,e,i),i};import{html as c}from"@spectrum-web-components/base";import{property as a,query as v,queryAssignedElements as P,state as w}from"@spectrum-web-components/base/src/decorators.js";import{isAndroid as C,isIOS as D}from"@spectrum-web-components/shared/src/platform.js";import{ElementResolutionController as A,elementResolverUpdatedSymbol as N}from"@spectrum-web-components/reactive-controllers/src/ElementResolution.js";import{conditionAttributeWithId as u}from"@spectrum-web-components/base/src/condition-attribute-with-id.js";import{ifDefined as M,styleMap as H}from"@spectrum-web-components/base/src/directives.js";import{AbstractOverlay as R,nextFrame as f}from"./AbstractOverlay.js";import{OverlayDialog as S}from"./OverlayDialog.js";import{OverlayPopover as k}from"./OverlayPopover.js";import{OverlayNoPopover as V}from"./OverlayNoPopover.js";import{overlayStack as b}from"./OverlayStack.js";import{noop as l}from"./AbstractOverlay.js";import{VirtualTrigger as E}from"./VirtualTrigger.js";import{PlacementController as I}from"./PlacementController.js";import $ from"./overlay.css.js";const O=300;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 F="showPopover"in document.createElement("div");let h=S(R);F?h=k(h):h=V(h);const g=class extends h{constructor(){super(...arguments);this.delayed=!1;this._disabled=!1;this.longpressed=!1;this.isVisible=!1;this.offset=6;this.placementController=new I(this);this._open=!1;this.receivesFocus="auto";this.releaseAriaDescribedby=l;this.releaseLongpressDescribedby=l;this.triggerElement=null;this.type="hint";this.wasOpen=!1;this.elementResolver=new A(this);this.elementIds=[];this.handlePointerdown=e=>{if(!this.triggerElement||e.button!==0)return;const t=this.triggerElement;this.longpressed=!1,t.addEventListener("pointerup",this.handlePointerup),t.addEventListener("pointercancel",this.handlePointerup),this.longressTimeout=setTimeout(()=>{t&&t.dispatchEvent(new CustomEvent("longpress",{bubbles:!0,composed:!0,detail:{source:"pointer"}}))},O)};this.handlePointerup=()=>{if(clearTimeout(this.longressTimeout),!this.triggerElement)return;this.longpressed&&(this.open=!0),setTimeout(()=>{this.longpressed=!1});const e=this.triggerElement;e.removeEventListener("pointerup",this.handlePointerup),e.removeEventListener("pointercancel",this.handlePointerup)};this.handleKeydown=e=>{const{code:t,altKey:i}=e;(t==="Space"||i&&t==="ArrowDown")&&t==="ArrowDown"&&(e.stopPropagation(),e.stopImmediatePropagation())};this.handleKeyup=e=>{const{code:t,altKey:i}=e;(t==="Space"||i&&t==="ArrowDown")&&(e.stopPropagation(),this.dispatchEvent(new CustomEvent("longpress",{bubbles:!0,composed:!0,detail:{source:"keyboard"}})))};this.preventNextToggle=!1;this.handlePointerdownForClick=()=>{this.preventNextToggle=this.open};this.handleClick=()=>{this.longpressed||(this.preventNextToggle||(this.open=!this.open),this.preventNextToggle=!1)};this.focusedin=!1;this.handleFocusin=()=>{this.open=!0,this.focusedin=!0};this.handleFocusout=()=>{this.focusedin=!1,!this.pointerentered&&(this.open=!1)};this.pointerentered=!1;this.handlePointerenter=()=>{this.disabled||(this.open=!0,this.pointerentered=!0)};this.handlePointerleave=e=>{this===e.relatedTarget||this.contains(e.relatedTarget)||[...this.children].find(t=>t.localName!=="slot"?!1:t.assignedElements({flatten:!0}).find(i=>i===e.relatedTarget||i.contains(e.relatedTarget)))||this.doPointerleave()};this.handleOverlayPointerleave=e=>{this.triggerElement===e.relatedTarget||this.hasNonVirtualTrigger&&this.triggerElement.contains(e.relatedTarget)||this.doPointerleave()};this.handleLongpress=()=>{this.open=!0,this.longpressed=!0};this.willPreventClose=!1}get disabled(){return this._disabled}set disabled(e){this._disabled=e,e?(this.hasNonVirtualTrigger&&this.unbindEvents(),this.wasOpen=this.open,this.open=!1):(this.bindEvents(),this.open=this.open||this.wasOpen,this.wasOpen=!1)}get hasNonVirtualTrigger(){return!!this.triggerElement&&!(this.triggerElement instanceof E)}get open(){return this._open}set open(e){e&&this.disabled||e!==this.open&&(this._open=e,this.open&&(g.openCount+=1,this.isVisible=!0),this.requestUpdate("open",!this.open))}get usesDialog(){return this.type==="modal"||this.type==="page"}get popoverValue(){switch(this.type){case"modal":case"page":return;case"hint":return"manual";default:return this.type}}get requiresPosition(){return!(this.type==="page"||!this.open||!this.triggerElement||!this.placement&&this.type!=="hint")}managePosition(){if(!this.requiresPosition||!this.open)return;const e=this.offset||0,t=this.triggerElement,i=this.placement||"right",r=this.tipPadding;this.placementController.placeOverlay(this.dialogEl,{offset:e,placement:i,tipPadding:r,trigger:t,type:this.type})}async managePopoverOpen(){super.managePopoverOpen();const e=this.open;if(this.open!==e||(await this.manageDelay(e),this.open!==e)||(await this.ensureOnDOM(e),this.open!==e))return;const t=await this.makeTransition(e);this.open===e&&await this.applyFocus(e,t)}async applyFocus(e,t){if(!(this.receivesFocus==="false"||this.type==="hint")){if(await f(),await f(),e===this.open&&!this.open){this.hasNonVirtualTrigger&&this.contains(this.getRootNode().activeElement)&&this.triggerElement.focus();return}t==null||t.focus()}}async manageOpen(e){var t;if(!(!this.isConnected&&this.open)&&(this.hasUpdated||await this.updateComplete,this.open?(b.add(this),this.willPreventClose&&(document.addEventListener("pointerup",()=>{this.dialogEl.classList.toggle("not-immediately-closable",!1),this.willPreventClose=!1},{once:!0}),this.dialogEl.classList.toggle("not-immediately-closable",!0))):(e&&this.dispose(),b.remove(this)),this.usesDialog?this.manageDialogOpen():this.managePopoverOpen(),!this.open)){const i=()=>{var d;const r=[];let s=document.activeElement;for(;s!=null&&s.shadowRoot&&s.shadowRoot.activeElement;)s=s.shadowRoot.activeElement;for(;s;){const n=s.assignedSlot||s.parentElement||((d=s.getRootNode())==null?void 0:d.host);n&&r.push(n),s=n}return r};(t=this.triggerElement)!=null&&t.focus&&(this.contains(this.getRootNode().activeElement)||i().includes(this))&&this.triggerElement.focus()}}unbindEvents(){var e;(e=this.abortController)==null||e.abort()}bindEvents(){if(!this.hasNonVirtualTrigger)return;this.abortController=new AbortController;const e=this.triggerElement;switch(this.triggerInteraction){case"click":this.bindClickEvents(e);return;case"longpress":this.bindLongpressEvents(e);return;case"hover":this.bindHoverEvents(e);return}}bindClickEvents(e){const t={signal:this.abortController.signal};e.addEventListener("click",this.handleClick,t),e.addEventListener("pointerdown",this.handlePointerdownForClick,t)}bindLongpressEvents(e){const t={signal:this.abortController.signal};e.addEventListener("pointerdown",this.handlePointerdown,t),e.addEventListener("keydown",this.handleKeydown,t),e.addEventListener("keyup",this.handleKeyup,t),e.addEventListener("longpress",this.handleLongpress,t),this.prepareLongpressDescription(e)}bindHoverEvents(e){const t={signal:this.abortController.signal};e.addEventListener("focusin",this.handleFocusin,t),e.addEventListener("focusout",this.handleFocusout,t),e.addEventListener("pointerenter",this.handlePointerenter,t),e.addEventListener("pointerleave",this.handlePointerleave,t),this.addEventListener("pointerleave",this.handleOverlayPointerleave,t),this.receivesFocus!=="true"&&this.prepareAriaDescribedby(e)}manageTriggerElement(e){e&&(this.unbindEvents(),this.releaseAriaDescribedby()),!(!this.triggerElement||this.triggerElement instanceof E)&&this.bindEvents()}prepareLongpressDescription(e){if(this.triggerInteraction!=="longpress"||this.releaseLongpressDescribedby!==l||!this.elements.length)return;const t=document.createElement("div");t.id=`longpress-describedby-descriptor-${crypto.randomUUID().slice(0,8)}`;const i=D()||C()?"touch":"keyboard";t.textContent=LONGPRESS_INSTRUCTIONS[i],t.slot="longpress-describedby-descriptor",e.insertAdjacentElement("afterend",t);const r=u(e,"aria-describedby",[t.id]);this.releaseLongpressDescribedby=()=>{r(),t.remove(),this.releaseLongpressDescribedby=l}}prepareAriaDescribedby(e){if(this.triggerInteraction!=="hover"||this.releaseAriaDescribedby!==l||!this.elements.length)return;const t=e.getRootNode(),i=this.elements[0].getRootNode(),r=this.getRootNode();if(t==r){const s=u(e,"aria-describedby",[this.id]);this.releaseAriaDescribedby=()=>{s(),this.releaseAriaDescribedby=l}}else if(t===i){this.elementIds=this.elements.map(n=>n.id);const s=this.elements.map(n=>(n.id||(n.id=`${this.tagName.toLowerCase()}-helper-${crypto.randomUUID().slice(0,8)}`),n.id)),d=u(e,"aria-describedby",s);this.releaseAriaDescribedby=()=>{d(),this.elements.map((n,y)=>{n.id=this.elementIds[y]}),this.releaseAriaDescribedby=l}}}doPointerleave(){this.pointerentered=!1;const e=this.triggerElement;this.focusedin&&e.matches(":focus-visible")||(this.open=!1)}handleBeforetoggle(e){e.newState!=="open"&&this.handleBrowserClose()}handleBrowserClose(){this.open=!1}handleSlotchange(){this.triggerElement&&this.prepareAriaDescribedby(this.triggerElement),this.elements.length?this.hasNonVirtualTrigger&&this.prepareLongpressDescription(this.triggerElement):this.releaseLongpressDescribedby()}shouldPreventClose(){const e=this.willPreventClose;return this.willPreventClose=!1,e}willUpdate(e){var i;if(this.hasUpdated||this.addEventListener("focusout",r=>{if(this.type!=="auto"||!r.relatedTarget)return;const s=new Event("overlay-relation-query",{bubbles:!0,composed:!0});r.relatedTarget.addEventListener(s.type,d=>{d.composedPath().includes(this)||(this.open=!1)}),r.relatedTarget.dispatchEvent(s)}),this.hasAttribute("id")||this.setAttribute("id",`${this.tagName.toLowerCase()}-${crypto.randomUUID().slice(0,8)}`),e.has("open")&&(typeof e.get("open")!="undefined"||this.open)&&this.manageOpen(e.get("open")),e.has("trigger")){const[r,s]=((i=this.trigger)==null?void 0:i.split("@"))||[];this.elementResolver.selector=r?`#${r}`:"",this.triggerInteraction=s}const t=this.triggerElement;e.has(N)&&(this.triggerElement=this.elementResolver.element,this.manageTriggerElement(t)),e.has("triggerElement")&&this.manageTriggerElement(e.get("triggerElement"))}updated(e){super.updated(e),e.has("placement")&&(this.placement?this.dialogEl.setAttribute("actual-placement",this.placement):this.dialogEl.removeAttribute("actual-placement"),this.open&&typeof e.get("placement")!="undefined"&&this.placementController.resetOverlayPosition())}renderContent(){return c`
|
|
2
|
-
<div style=${
|
|
1
|
+
"use strict";var T=Object.defineProperty;var L=Object.getOwnPropertyDescriptor;var o=(m,p,e,t)=>{for(var i=t>1?void 0:t?L(p,e):p,r=m.length-1,s;r>=0;r--)(s=m[r])&&(i=(t?s(p,e,i):s(i))||i);return t&&i&&T(p,e,i),i};import{html as c}from"@spectrum-web-components/base";import{property as a,query as v,queryAssignedElements as P,state as w}from"@spectrum-web-components/base/src/decorators.js";import{isAndroid as C,isIOS as S}from"@spectrum-web-components/shared/src/platform.js";import{ElementResolutionController as D,elementResolverUpdatedSymbol as A}from"@spectrum-web-components/reactive-controllers/src/ElementResolution.js";import{conditionAttributeWithId as u}from"@spectrum-web-components/base/src/condition-attribute-with-id.js";import{ifDefined as M,styleMap as N}from"@spectrum-web-components/base/src/directives.js";import{AbstractOverlay as H,nextFrame as f}from"./AbstractOverlay.js";import{OverlayDialog as R}from"./OverlayDialog.js";import{OverlayPopover as k}from"./OverlayPopover.js";import{OverlayNoPopover as O}from"./OverlayNoPopover.js";import{overlayStack as b}from"./OverlayStack.js";import{noop as l}from"./AbstractOverlay.js";import{VirtualTrigger as E}from"./VirtualTrigger.js";import{PlacementController as I}from"./PlacementController.js";import $ from"./overlay.css.js";const V=300;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 F="showPopover"in document.createElement("div");let h=R(H);F?h=k(h):h=O(h);const g=class extends h{constructor(){super(...arguments);this.delayed=!1;this._disabled=!1;this.longpressState="null";this.offset=6;this.placementController=new I(this);this._open=!1;this.receivesFocus="auto";this.releaseAriaDescribedby=l;this.releaseLongpressDescribedby=l;this._state="closed";this.triggerElement=null;this.type="hint";this.wasOpen=!1;this.elementResolver=new D(this);this.elementIds=[];this.handlePointerdown=e=>{if(!this.triggerElement||e.button!==0)return;const t=this.triggerElement;this.longpressState="potential",t.addEventListener("pointerup",this.handlePointerup),t.addEventListener("pointercancel",this.handlePointerup),!t.holdAffordance&&(this.longressTimeout=setTimeout(()=>{t&&t.dispatchEvent(new CustomEvent("longpress",{bubbles:!0,composed:!0,detail:{source:"pointer"}}))},V))};this.handlePointerup=()=>{if(clearTimeout(this.longressTimeout),!this.triggerElement)return;this.longpressState=this.state==="opening"?"pressed":"null";const e=this.triggerElement;e.removeEventListener("pointerup",this.handlePointerup),e.removeEventListener("pointercancel",this.handlePointerup)};this.handleKeydown=e=>{const{code:t,altKey:i}=e;(t==="Space"||i&&t==="ArrowDown")&&t==="ArrowDown"&&(e.stopPropagation(),e.stopImmediatePropagation())};this.handleKeyup=e=>{const{code:t,altKey:i}=e;if(t==="Space"||i&&t==="ArrowDown"){if(!this.triggerElement||!this.hasNonVirtualTrigger)return;e.stopPropagation(),this.triggerElement.dispatchEvent(new CustomEvent("longpress",{bubbles:!0,composed:!0,detail:{source:"keyboard"}})),setTimeout(()=>{this.longpressState="null"})}};this.preventNextToggle=!1;this.handlePointerdownForClick=()=>{this.preventNextToggle=this.open};this.handleClick=()=>{this.longpressState==="opening"||this.longpressState==="pressed"||(this.preventNextToggle||(this.open=!this.open),this.preventNextToggle=!1)};this.focusedin=!1;this.handleFocusin=()=>{this.open=!0,this.focusedin=!0};this.handleFocusout=()=>{this.focusedin=!1,!this.pointerentered&&(this.open=!1)};this.pointerentered=!1;this.handlePointerenter=()=>{this.disabled||(this.open=!0,this.pointerentered=!0)};this.handlePointerleave=e=>{this===e.relatedTarget||this.contains(e.relatedTarget)||[...this.children].find(t=>t.localName!=="slot"?!1:t.assignedElements({flatten:!0}).find(i=>i===e.relatedTarget||i.contains(e.relatedTarget)))||this.doPointerleave()};this.handleOverlayPointerleave=e=>{this.triggerElement===e.relatedTarget||this.hasNonVirtualTrigger&&this.triggerElement.contains(e.relatedTarget)||this.doPointerleave()};this.handleLongpress=()=>{this.open=!0,this.longpressState=this.longpressState==="potential"?"opening":"pressed"};this.willPreventClose=!1}get disabled(){return this._disabled}set disabled(e){this._disabled=e,e?(this.hasNonVirtualTrigger&&this.unbindEvents(),this.wasOpen=this.open,this.open=!1):(this.bindEvents(),this.open=this.open||this.wasOpen,this.wasOpen=!1)}get hasNonVirtualTrigger(){return!!this.triggerElement&&!(this.triggerElement instanceof E)}get open(){return this._open}set open(e){e&&this.disabled||e!==this.open&&((this.longpressState==="opening"||this.longpressState==="pressed")&&!e||(this._open=e,this.open&&(g.openCount+=1),this.requestUpdate("open",!this.open)))}get state(){return this._state}set state(e){if(e===this.state)return;const t=this.state;this._state=e,(this.state==="opened"||this.state==="closed")&&(this.longpressState=this.longpressState==="pressed"?"null":this.longpressState),this.requestUpdate("state",t)}get usesDialog(){return this.type==="modal"||this.type==="page"}get popoverValue(){if("popover"in this)switch(this.type){case"modal":case"page":return;case"hint":return"manual";default:return this.type}}get requiresPosition(){return!(this.type==="page"||!this.open||!this.triggerElement||!this.placement&&this.type!=="hint")}managePosition(){if(!this.requiresPosition||!this.open)return;const e=this.offset||0,t=this.triggerElement,i=this.placement||"right",r=this.tipPadding;this.placementController.placeOverlay(this.dialogEl,{offset:e,placement:i,tipPadding:r,trigger:t,type:this.type})}async managePopoverOpen(){super.managePopoverOpen();const e=this.open;if(this.open!==e||(await this.manageDelay(e),this.open!==e)||(await this.ensureOnDOM(e),this.open!==e))return;const t=await this.makeTransition(e);this.open===e&&await this.applyFocus(e,t)}async applyFocus(e,t){if(!(this.receivesFocus==="false"||this.type==="hint")){if(await f(),await f(),e===this.open&&!this.open){this.hasNonVirtualTrigger&&this.contains(this.getRootNode().activeElement)&&this.triggerElement.focus();return}t==null||t.focus()}}async manageOpen(e){var t;if(!(!this.isConnected&&this.open)&&(this.hasUpdated||await this.updateComplete,this.open?(b.add(this),this.willPreventClose&&(document.addEventListener("pointerup",()=>{this.dialogEl.classList.toggle("not-immediately-closable",!1),this.willPreventClose=!1},{once:!0}),this.dialogEl.classList.toggle("not-immediately-closable",!0))):(e&&this.dispose(),b.remove(this)),this.open&&this.state!=="opened"?this.state="opening":!this.open&&this.state!=="closed"&&(this.state="closing"),this.usesDialog?this.manageDialogOpen():this.managePopoverOpen(),!this.open)){const i=()=>{var d;const r=[];let s=document.activeElement;for(;s!=null&&s.shadowRoot&&s.shadowRoot.activeElement;)s=s.shadowRoot.activeElement;for(;s;){const n=s.assignedSlot||s.parentElement||((d=s.getRootNode())==null?void 0:d.host);n&&r.push(n),s=n}return r};(t=this.triggerElement)!=null&&t.focus&&(this.contains(this.getRootNode().activeElement)||i().includes(this))&&this.triggerElement.focus()}}unbindEvents(){var e;(e=this.abortController)==null||e.abort()}bindEvents(){if(!this.hasNonVirtualTrigger)return;this.abortController=new AbortController;const e=this.triggerElement;switch(this.triggerInteraction){case"click":this.bindClickEvents(e);return;case"longpress":this.bindLongpressEvents(e);return;case"hover":this.bindHoverEvents(e);return}}bindClickEvents(e){const t={signal:this.abortController.signal};e.addEventListener("click",this.handleClick,t),e.addEventListener("pointerdown",this.handlePointerdownForClick,t)}bindLongpressEvents(e){const t={signal:this.abortController.signal};e.addEventListener("longpress",this.handleLongpress,t),e.addEventListener("pointerdown",this.handlePointerdown,t),this.prepareLongpressDescription(e),!e.holdAffordance&&(e.addEventListener("keydown",this.handleKeydown,t),e.addEventListener("keyup",this.handleKeyup,t))}bindHoverEvents(e){const t={signal:this.abortController.signal};e.addEventListener("focusin",this.handleFocusin,t),e.addEventListener("focusout",this.handleFocusout,t),e.addEventListener("pointerenter",this.handlePointerenter,t),e.addEventListener("pointerleave",this.handlePointerleave,t),this.addEventListener("pointerleave",this.handleOverlayPointerleave,t),this.receivesFocus!=="true"&&this.prepareAriaDescribedby(e)}manageTriggerElement(e){e&&(this.unbindEvents(),this.releaseAriaDescribedby()),!(!this.triggerElement||this.triggerElement instanceof E)&&this.bindEvents()}prepareLongpressDescription(e){if(this.triggerInteraction!=="longpress"||this.releaseLongpressDescribedby!==l||!this.elements.length)return;const t=document.createElement("div");t.id=`longpress-describedby-descriptor-${crypto.randomUUID().slice(0,8)}`;const i=S()||C()?"touch":"keyboard";t.textContent=LONGPRESS_INSTRUCTIONS[i],t.slot="longpress-describedby-descriptor",e.insertAdjacentElement("afterend",t);const r=u(e,"aria-describedby",[t.id]);this.releaseLongpressDescribedby=()=>{r(),t.remove(),this.releaseLongpressDescribedby=l}}prepareAriaDescribedby(e){if(this.triggerInteraction!=="hover"||this.releaseAriaDescribedby!==l||!this.elements.length)return;const t=e.getRootNode(),i=this.elements[0].getRootNode(),r=this.getRootNode();if(t==r){const s=u(e,"aria-describedby",[this.id]);this.releaseAriaDescribedby=()=>{s(),this.releaseAriaDescribedby=l}}else if(t===i){this.elementIds=this.elements.map(n=>n.id);const s=this.elements.map(n=>(n.id||(n.id=`${this.tagName.toLowerCase()}-helper-${crypto.randomUUID().slice(0,8)}`),n.id)),d=u(e,"aria-describedby",s);this.releaseAriaDescribedby=()=>{d(),this.elements.map((n,y)=>{n.id=this.elementIds[y]}),this.releaseAriaDescribedby=l}}}doPointerleave(){this.pointerentered=!1;const e=this.triggerElement;this.focusedin&&e.matches(":focus-visible")||(this.open=!1)}handleBeforetoggle(e){e.newState!=="open"&&this.handleBrowserClose()}handleBrowserClose(){if(this.longpressState!=="opening"&&this.longpressState!=="pressed"){this.open=!1;return}this.open=!0,this.manageOpen(!1)}handleSlotchange(){this.triggerElement&&this.prepareAriaDescribedby(this.triggerElement),this.elements.length?this.hasNonVirtualTrigger&&this.prepareLongpressDescription(this.triggerElement):this.releaseLongpressDescribedby()}shouldPreventClose(){const e=this.willPreventClose;return this.willPreventClose=!1,e}willUpdate(e){var i;if(this.hasUpdated||this.addEventListener("focusout",r=>{if(this.type!=="auto"||!r.relatedTarget)return;const s=new Event("overlay-relation-query",{bubbles:!0,composed:!0});r.relatedTarget.addEventListener(s.type,d=>{d.composedPath().includes(this)||(this.open=!1)}),r.relatedTarget.dispatchEvent(s)}),this.hasAttribute("id")||this.setAttribute("id",`${this.tagName.toLowerCase()}-${crypto.randomUUID().slice(0,8)}`),e.has("open")&&(typeof e.get("open")!="undefined"||this.open)&&this.manageOpen(e.get("open")),e.has("trigger")){const[r,s]=((i=this.trigger)==null?void 0:i.split("@"))||[];this.elementResolver.selector=r?`#${r}`:"",this.triggerInteraction=s}const t=this.triggerElement;e.has(A)&&(this.triggerElement=this.elementResolver.element,this.manageTriggerElement(t)),e.has("triggerElement")&&this.manageTriggerElement(e.get("triggerElement"))}updated(e){super.updated(e),e.has("placement")&&(this.placement?this.dialogEl.setAttribute("actual-placement",this.placement):this.dialogEl.removeAttribute("actual-placement"),this.open&&typeof e.get("placement")!="undefined"&&this.placementController.resetOverlayPosition())}renderContent(){return c`
|
|
2
|
+
<div style=${N(this.dialogStyleMap)} part="content">
|
|
3
3
|
<slot @slotchange=${this.handleSlotchange}></slot>
|
|
4
4
|
</div>
|
|
5
5
|
`}get dialogStyleMap(){return{"--swc-overlay-open-count":g.openCount.toString()}}renderDialog(){return c`
|
|
@@ -9,23 +9,23 @@
|
|
|
9
9
|
@close=${this.handleBrowserClose}
|
|
10
10
|
@cancel=${this.handleBrowserClose}
|
|
11
11
|
@beforetoggle=${this.handleBeforetoggle}
|
|
12
|
-
?is-visible=${this.
|
|
12
|
+
?is-visible=${this.state!=="closed"}
|
|
13
13
|
>
|
|
14
14
|
${this.renderContent()}
|
|
15
15
|
</dialog>
|
|
16
|
-
`}renderPopover(){
|
|
16
|
+
`}renderPopover(){return c`
|
|
17
17
|
<div
|
|
18
18
|
class="dialog"
|
|
19
19
|
part="dialog"
|
|
20
|
-
popover=${M(
|
|
20
|
+
popover=${M(this.popoverValue)}
|
|
21
21
|
@beforetoggle=${this.handleBeforetoggle}
|
|
22
22
|
@close=${this.handleBrowserClose}
|
|
23
|
-
?is-visible=${this.
|
|
23
|
+
?is-visible=${this.state!=="closed"}
|
|
24
24
|
>
|
|
25
25
|
${this.renderContent()}
|
|
26
26
|
</div>
|
|
27
27
|
`}render(){const e=this.type==="modal"||this.type==="page";return c`
|
|
28
28
|
${e?this.renderDialog():this.renderPopover()}
|
|
29
29
|
<slot name="longpress-describedby-descriptor"></slot>
|
|
30
|
-
`}connectedCallback(){super.connectedCallback(),this.addEventListener("close",()=>{this.open=!1}),this.hasNonVirtualTrigger&&this.bindEvents()}disconnectedCallback(){this.hasNonVirtualTrigger&&this.unbindEvents(),this.open=!1,super.disconnectedCallback()}};export let Overlay=g;Overlay.styles=[$],Overlay.openCount=1,o([a({type:Boolean})],Overlay.prototype,"delayed",2),o([v(".dialog")],Overlay.prototype,"dialogEl",2),o([a({type:Boolean})],Overlay.prototype,"disabled",1),o([P({flatten:!0,selector:':not([slot="longpress-describedby-descriptor"])'})],Overlay.prototype,"elements",2),o([
|
|
30
|
+
`}connectedCallback(){super.connectedCallback(),this.addEventListener("close",()=>{this.open=!1}),this.hasNonVirtualTrigger&&this.bindEvents()}disconnectedCallback(){this.hasNonVirtualTrigger&&this.unbindEvents(),this.open=!1,super.disconnectedCallback()}};export let Overlay=g;Overlay.styles=[$],Overlay.openCount=1,o([a({type:Boolean})],Overlay.prototype,"delayed",2),o([v(".dialog")],Overlay.prototype,"dialogEl",2),o([a({type:Boolean})],Overlay.prototype,"disabled",1),o([P({flatten:!0,selector:':not([slot="longpress-describedby-descriptor"])'})],Overlay.prototype,"elements",2),o([a({type:Number})],Overlay.prototype,"offset",2),o([a({type:Boolean,reflect:!0})],Overlay.prototype,"open",1),o([a()],Overlay.prototype,"placement",2),o([a({attribute:"receives-focus"})],Overlay.prototype,"receivesFocus",2),o([v("slot")],Overlay.prototype,"slotEl",2),o([w()],Overlay.prototype,"state",1),o([a({type:Number,attribute:"tip-padding"})],Overlay.prototype,"tipPadding",2),o([a()],Overlay.prototype,"trigger",2),o([a({attribute:!1})],Overlay.prototype,"triggerElement",2),o([a({attribute:!1})],Overlay.prototype,"triggerInteraction",2),o([a()],Overlay.prototype,"type",2);
|
|
31
31
|
//# sourceMappingURL=Overlay.js.map
|