@spectrum-web-components/overlay 0.32.1-overlay.41 → 0.33.1-overlay.41
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 +116 -5
- package/custom-elements.json +1 -1
- package/package.json +7 -7
- package/src/OverlayBase.d.ts +1 -1
- package/src/OverlayBase.dev.js +10 -2
- package/src/OverlayBase.dev.js.map +2 -2
- package/src/OverlayBase.js +2 -2
- package/src/OverlayBase.js.map +2 -2
package/README.md
CHANGED
|
@@ -27,6 +27,8 @@ import {
|
|
|
27
27
|
|
|
28
28
|
## Example
|
|
29
29
|
|
|
30
|
+
Leveraging the `trigger` attribut to pass an ID reference to another element with in the same DOM tree that will be the element from which the overlay is positioned when open. Add an interaction type `click`, `hover`, or `longpress` to the `trigger` attribute, separated from the ID reference by an `@` symbol and the overlay will bind itself to the referenced element via the DOM events associated with that interaction. The `<sp-button>` below has an id of `trigger`, so when the `<sp-overlay>` is provided the `trigger` attribute with the value `trigger@click` it associated itself to the `<sp-button>` and toggles its open state when that button is clicked.
|
|
31
|
+
|
|
30
32
|
```html
|
|
31
33
|
<sp-button id="trigger">Overlay Trigger</sp-button>
|
|
32
34
|
<sp-overlay trigger="trigger@click">
|
|
@@ -39,16 +41,125 @@ import {
|
|
|
39
41
|
</sp-overlay>
|
|
40
42
|
```
|
|
41
43
|
|
|
44
|
+
### Action bar
|
|
45
|
+
|
|
46
|
+
```html
|
|
47
|
+
<style>
|
|
48
|
+
.overlay-demo-popover sp-action-group {
|
|
49
|
+
padding: var(--spectrum-actiongroup-vertical-spacing-regular);
|
|
50
|
+
}
|
|
51
|
+
#overlay-demo {
|
|
52
|
+
position: static;
|
|
53
|
+
}
|
|
54
|
+
#overlay-demo:not(:defined),
|
|
55
|
+
#overlay-demo *:not(:defined) {
|
|
56
|
+
display: none;
|
|
57
|
+
}
|
|
58
|
+
</style>
|
|
59
|
+
<sp-popover id="overlay-demo" class="overlay-demo-popover" open>
|
|
60
|
+
<sp-action-group vertical quiet emphasized selects="single">
|
|
61
|
+
<sp-action-button id="trigger-1" hold-affordance>
|
|
62
|
+
<sp-icon-anchor-select slot="icon"></sp-icon-anchor-select>
|
|
63
|
+
</sp-action-button>
|
|
64
|
+
<sp-action-button id="trigger-2" hold-affordance>
|
|
65
|
+
<sp-icon-polygon-select slot="icon"></sp-icon-polygon-select>
|
|
66
|
+
</sp-action-button>
|
|
67
|
+
<sp-action-button id="trigger-3" hold-affordance>
|
|
68
|
+
<sp-icon-rect-select slot="icon"></sp-icon-rect-select>
|
|
69
|
+
</sp-action-button>
|
|
70
|
+
</sp-action-group>
|
|
71
|
+
</sp-popover>
|
|
72
|
+
<sp-overlay ?delayed="${delayed}" trigger="trigger-1@hover">
|
|
73
|
+
<sp-tooltip>Hover</sp-tooltip>
|
|
74
|
+
</sp-overlay>
|
|
75
|
+
<sp-overlay
|
|
76
|
+
trigger="trigger-1@longpress"
|
|
77
|
+
type="auto"
|
|
78
|
+
placement="right-start"
|
|
79
|
+
.offset="${popoverOffset}"
|
|
80
|
+
>
|
|
81
|
+
<sp-popover class="overlay-demo-popover" tip>
|
|
82
|
+
<sp-action-group vertical quiet>
|
|
83
|
+
<sp-action-button>
|
|
84
|
+
<sp-icon-anchor-select slot="icon"></sp-icon-anchor-select>
|
|
85
|
+
</sp-action-button>
|
|
86
|
+
<sp-action-button>
|
|
87
|
+
<sp-icon-polygon-select slot="icon"></sp-icon-polygon-select>
|
|
88
|
+
</sp-action-button>
|
|
89
|
+
<sp-action-button>
|
|
90
|
+
<sp-icon-rect-select slot="icon"></sp-icon-rect-select>
|
|
91
|
+
</sp-action-button>
|
|
92
|
+
</sp-action-group>
|
|
93
|
+
</sp-popover>
|
|
94
|
+
</sp-overlay>
|
|
95
|
+
<sp-overlay ?delayed="${delayed}" trigger="trigger-2@hover">
|
|
96
|
+
<sp-tooltip>Hover</sp-tooltip>
|
|
97
|
+
</sp-overlay>
|
|
98
|
+
<sp-overlay
|
|
99
|
+
trigger="trigger-2@longpress"
|
|
100
|
+
type="auto"
|
|
101
|
+
placement="right-start"
|
|
102
|
+
.offset="${popoverOffset}"
|
|
103
|
+
>
|
|
104
|
+
<sp-popover class="overlay-demo-popover" tip>
|
|
105
|
+
<sp-action-group vertical quiet>
|
|
106
|
+
<sp-action-button>
|
|
107
|
+
<sp-icon-anchor-select slot="icon"></sp-icon-anchor-select>
|
|
108
|
+
</sp-action-button>
|
|
109
|
+
<sp-action-button>
|
|
110
|
+
<sp-icon-polygon-select slot="icon"></sp-icon-polygon-select>
|
|
111
|
+
</sp-action-button>
|
|
112
|
+
<sp-action-button>
|
|
113
|
+
<sp-icon-rect-select slot="icon"></sp-icon-rect-select>
|
|
114
|
+
</sp-action-button>
|
|
115
|
+
</sp-action-group>
|
|
116
|
+
</sp-popover>
|
|
117
|
+
</sp-overlay>
|
|
118
|
+
<sp-overlay ?delayed="${delayed}" trigger="trigger-3@hover">
|
|
119
|
+
<sp-tooltip>Hover</sp-tooltip>
|
|
120
|
+
</sp-overlay>
|
|
121
|
+
<sp-overlay
|
|
122
|
+
trigger="trigger-3@longpress"
|
|
123
|
+
type="auto"
|
|
124
|
+
placement="right-start"
|
|
125
|
+
.offset="${popoverOffset}"
|
|
126
|
+
>
|
|
127
|
+
<sp-popover class="overlay-demo-popover" tip>
|
|
128
|
+
<sp-action-group vertical quiet>
|
|
129
|
+
<sp-action-button>
|
|
130
|
+
<sp-icon-anchor-select slot="icon"></sp-icon-anchor-select>
|
|
131
|
+
</sp-action-button>
|
|
132
|
+
<sp-action-button>
|
|
133
|
+
<sp-icon-polygon-select slot="icon"></sp-icon-polygon-select>
|
|
134
|
+
</sp-action-button>
|
|
135
|
+
<sp-action-button>
|
|
136
|
+
<sp-icon-rect-select slot="icon"></sp-icon-rect-select>
|
|
137
|
+
</sp-action-button>
|
|
138
|
+
</sp-action-group>
|
|
139
|
+
</sp-popover>
|
|
140
|
+
</sp-overlay>
|
|
141
|
+
```
|
|
142
|
+
|
|
42
143
|
## API
|
|
43
144
|
|
|
44
145
|
```html
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
146
|
+
<sp-overlay
|
|
147
|
+
?open=${boolean}
|
|
148
|
+
?delayed=${boolean}
|
|
149
|
+
offset=${Number | [Number, Number]}
|
|
150
|
+
placement=${Placement}
|
|
151
|
+
receives-focus=${'true' | 'false' | 'auto' (default)
|
|
152
|
+
trigger=${string | ${string}@${string}}
|
|
153
|
+
.triggerElement=${HTMLElement}
|
|
154
|
+
.triggerInteraction=${'click' | 'longpress' | 'hover'}
|
|
155
|
+
type=${'auto' | 'hint' | 'manual' | 'modal' | 'page'}
|
|
156
|
+
></sp-overlay>
|
|
50
157
|
```
|
|
51
158
|
|
|
159
|
+
## Styling
|
|
160
|
+
|
|
161
|
+
`<sp-overlay>` element will use the `<dialog>` element or `popover` attribute to project your content onto the top-layer of the browser, but that content will still exist right where you placed it to start. That means that you can style your overlay content with whatever techniques you are already leveraging to style the content in said interaction that does not get overlaid. This means standard CSS selectors, CSS Custom Properties, and CSS Parts applied in your parent context will always apply to your overlaid content.
|
|
162
|
+
|
|
52
163
|
## Fallback support
|
|
53
164
|
|
|
54
165
|
While the [`<dialog>` element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog) is widely supported by browsers, the [`popover` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/popover) is still quite new. When leveraged in browsers that do not yet support the `popover` attribute, there may be additional intervention required to ensure your content is delivered to your visitors as expected.
|
package/custom-elements.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spectrum-web-components/overlay",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.33.1-overlay.41+c5a2c1756",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -127,11 +127,11 @@
|
|
|
127
127
|
],
|
|
128
128
|
"dependencies": {
|
|
129
129
|
"@floating-ui/dom": "1.2.1",
|
|
130
|
-
"@spectrum-web-components/action-button": "^0.
|
|
131
|
-
"@spectrum-web-components/base": "^0.
|
|
132
|
-
"@spectrum-web-components/reactive-controllers": "^0.
|
|
133
|
-
"@spectrum-web-components/shared": "^0.
|
|
134
|
-
"@spectrum-web-components/theme": "^0.
|
|
130
|
+
"@spectrum-web-components/action-button": "^0.33.1-overlay.41+c5a2c1756",
|
|
131
|
+
"@spectrum-web-components/base": "^0.33.1-overlay.41+c5a2c1756",
|
|
132
|
+
"@spectrum-web-components/reactive-controllers": "^0.33.1-overlay.41+c5a2c1756",
|
|
133
|
+
"@spectrum-web-components/shared": "^0.33.1-overlay.41+c5a2c1756",
|
|
134
|
+
"@spectrum-web-components/theme": "^0.33.1-overlay.41+c5a2c1756"
|
|
135
135
|
},
|
|
136
136
|
"types": "./src/index.d.ts",
|
|
137
137
|
"customElements": "custom-elements.json",
|
|
@@ -143,5 +143,5 @@
|
|
|
143
143
|
"./stories/overlay-story-components.js",
|
|
144
144
|
"./**/*.dev.js"
|
|
145
145
|
],
|
|
146
|
-
"gitHead": "
|
|
146
|
+
"gitHead": "c5a2c1756a8919cf1228bc093488b27b4584bcfa"
|
|
147
147
|
}
|
package/src/OverlayBase.d.ts
CHANGED
|
@@ -80,7 +80,7 @@ export declare class OverlayBase extends SpectrumElement {
|
|
|
80
80
|
protected manageOpen(oldOpen: boolean): Promise<void>;
|
|
81
81
|
protected unbindEvents(triggerElement: HTMLElement): void;
|
|
82
82
|
protected bindEvents(): void;
|
|
83
|
-
protected
|
|
83
|
+
protected bindClickEvents(triggerElement: HTMLElement): void;
|
|
84
84
|
protected bindLongpressEvents(triggerElement: HTMLElement): void;
|
|
85
85
|
protected bindHoverEvents(triggerElement: HTMLElement): void;
|
|
86
86
|
protected manageTriggerElement(triggerElement: HTMLElement | null): void;
|
package/src/OverlayBase.dev.js
CHANGED
|
@@ -212,6 +212,8 @@ const _OverlayBase = class extends SpectrumElement {
|
|
|
212
212
|
};
|
|
213
213
|
this.pointerentered = false;
|
|
214
214
|
this.handlePointerenter = () => {
|
|
215
|
+
if (this.disabled)
|
|
216
|
+
return;
|
|
215
217
|
this.open = true;
|
|
216
218
|
this.pointerentered = true;
|
|
217
219
|
};
|
|
@@ -248,9 +250,13 @@ const _OverlayBase = class extends SpectrumElement {
|
|
|
248
250
|
set disabled(disabled) {
|
|
249
251
|
this._disabled = disabled;
|
|
250
252
|
if (disabled) {
|
|
253
|
+
if (this.hasNonVirtualTrigger) {
|
|
254
|
+
this.unbindEvents(this.triggerElement);
|
|
255
|
+
}
|
|
251
256
|
this.wasOpen = this.open;
|
|
252
257
|
this.open = false;
|
|
253
258
|
} else {
|
|
259
|
+
this.bindEvents();
|
|
254
260
|
this.open = this.open || this.wasOpen;
|
|
255
261
|
this.wasOpen = false;
|
|
256
262
|
}
|
|
@@ -391,9 +397,11 @@ const _OverlayBase = class extends SpectrumElement {
|
|
|
391
397
|
}
|
|
392
398
|
bindEvents() {
|
|
393
399
|
const nextTriggerElement = this.triggerElement;
|
|
400
|
+
if (!nextTriggerElement)
|
|
401
|
+
return;
|
|
394
402
|
switch (this.triggerInteraction) {
|
|
395
403
|
case "click":
|
|
396
|
-
this.
|
|
404
|
+
this.bindClickEvents(nextTriggerElement);
|
|
397
405
|
return;
|
|
398
406
|
case "longpress":
|
|
399
407
|
this.bindLongpressEvents(nextTriggerElement);
|
|
@@ -403,7 +411,7 @@ const _OverlayBase = class extends SpectrumElement {
|
|
|
403
411
|
return;
|
|
404
412
|
}
|
|
405
413
|
}
|
|
406
|
-
|
|
414
|
+
bindClickEvents(triggerElement) {
|
|
407
415
|
triggerElement.addEventListener("click", this.handleClick);
|
|
408
416
|
triggerElement.addEventListener(
|
|
409
417
|
"pointerdown",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["OverlayBase.ts"],
|
|
4
|
-
"sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport type { Placement } from '@floating-ui/dom';\nimport {\n html,\n PropertyValues,\n SpectrumElement,\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 { conditionAttributeWithId } from '@spectrum-web-components/base/src/condition-attribute-with-id.js';\nimport {\n ElementResolutionController,\n elementResolverUpdatedSymbol,\n} from '@spectrum-web-components/reactive-controllers/src/ElementResolution.js';\nimport { VirtualTrigger } from './VirtualTrigger.dev.js'\nimport {\n ifDefined,\n styleMap,\n} from '@spectrum-web-components/base/src/directives.js';\nimport styles from './overlay-base.css.js';\nimport { overlayStack } from './OverlayStack.dev.js'\nimport { PlacementController } from './PlacementController.dev.js'\nimport { OverlayTypes } from './overlay-types.dev.js'\nimport { OverlayTimer } from './overlay-timer.dev.js'\n\nexport const overlayTimer = new OverlayTimer();\n\nexport type OpenableElement = HTMLElement & {\n open: boolean;\n tipElement?: HTMLElement;\n updateComplete?: Promise<void>;\n};\n\nconst LONGPRESS_DURATION = 300;\n\nexport type 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\nexport class BeforetoggleClosedEvent extends Event {\n currentState = 'open';\n newState = 'closed';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\nexport class BeforetoggleOpenEvent extends Event {\n currentState = 'closed';\n newState = 'open';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\nexport const noop = (): void => {\n return;\n};\n\n/**\n * Apply a \"transitionend\" listener to an element that may not transition but\n * guarantee the callback will be fired either way.\n *\n * @param el {HTMLElement} - Target of the \"transition\" listeners.\n * @param action {Function} - Method to trigger the \"transition\".\n * @param cb {Function} - Callback to trigger when the \"transition\" has ended.\n */\nexport const guaranteedTransitionend = (\n el: HTMLElement,\n action: () => void,\n cb: () => void\n): void => {\n const cleanup = (): void => {\n el.removeEventListener('transitionrun', handleTransitionrun);\n el.removeEventListener('transitionend', handleTransitionend);\n cb();\n };\n let guarantee2: number;\n let guarantee3: number;\n // WebKit fires `transitionrun` a little earlier, so the inner/outer relationship\n // here allows WebKit to be caught, but doesn't remove the animation listener until\n // after it would have fired in Chromium.\n const guarantee1 = requestAnimationFrame(() => {\n guarantee2 = requestAnimationFrame(() => {\n guarantee3 = requestAnimationFrame(() => {\n cleanup();\n });\n });\n });\n const handleTransitionend = (event: TransitionEvent): void => {\n if (event.propertyName === 'visibility') {\n // Ignore \"visibility\" transitions because they often happen before/after a\n // larger transition and don't represent the overall transition duration.\n return;\n }\n cleanup();\n };\n const handleTransitionrun = (event: TransitionEvent): void => {\n if (event.propertyName === 'visibility') {\n // Ignore \"visibility\" transitions because they often happen before/after a\n // larger transition and don't represent the overall transition duration.\n return;\n }\n cancelAnimationFrame(guarantee1);\n cancelAnimationFrame(guarantee2);\n cancelAnimationFrame(guarantee3);\n el.removeEventListener('transitionrun', handleTransitionrun);\n el.addEventListener('transitionend', handleTransitionend);\n };\n el.addEventListener('transitionrun', handleTransitionrun);\n action();\n};\n\nexport class OverlayBase extends SpectrumElement {\n static override styles = [styles];\n\n @property({ type: Boolean })\n delayed = false;\n\n @query('.dialog')\n dialogEl!: HTMLDialogElement & {\n showPopover(): void;\n hidePopover(): void;\n };\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 this.wasOpen = this.open;\n this.open = false;\n } else {\n this.open = this.open || this.wasOpen;\n this.wasOpen = false;\n }\n }\n\n private _disabled = false;\n\n protected dispose = noop;\n\n @queryAssignedElements({\n selector: ':not([slot=\"longpress-describedby-descriptor\"])',\n flatten: true,\n })\n elements!: OpenableElement[];\n\n public parentOverlayToForceClose?: OverlayBase;\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 @property()\n offset: number | [number, number] = 6;\n\n public placementController = new PlacementController(this);\n\n @property({ type: Boolean, reflect: true })\n get open(): boolean {\n return this._open;\n }\n\n set open(open: boolean) {\n if (open && this.disabled) return;\n if (open === this.open) return;\n this._open = open;\n this.requestUpdate('open', !this.open);\n }\n\n private _open = false;\n\n static openCount = 1;\n\n @property()\n placement?: Placement;\n\n @property({ attribute: 'receives-focus' })\n receivesFocus: 'true' | 'false' | 'auto' = 'auto';\n\n private releaseAriaDescribedby = noop;\n private releaseLongpressDescribedby = noop;\n\n @query('slot')\n slotEl!: HTMLSlotElement;\n\n @property()\n trigger?: string;\n\n @state()\n triggerElement: HTMLElement | VirtualTrigger | null = null;\n\n @state()\n triggerInteraction?: 'click' | 'longpress' | 'hover';\n\n @property()\n 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 /* c8 ignore next 12 */\n protected async manageDialogOpen(): Promise<void> {\n console.warn(\n 'Implement the `manageDialogOpen` method in a class extension.'\n );\n }\n\n protected async managePopoverOpen(): Promise<void> {\n console.warn(\n 'Implement the `managePopoverOpen` method in a class extension.'\n );\n }\n\n protected get requiresPosition(): boolean {\n // Do no position \"page\" overlays as they should block the entrie 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 automaticallyu position contnent, unless it is a \"hint\".\n if (!this.triggerElement || (!this.placement && this.type !== 'hint'))\n return false;\n return true;\n }\n\n protected 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\n this.placementController.placeOverlay(this.dialogEl, {\n // delayed?: boolean,\n offset,\n placement,\n // notImmediatelyClosable?: boolean, // rename or place behind other API options\n // receivesFocus?: 'auto';\n // root?: HTMLElement;\n trigger,\n type: this.type,\n });\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 } 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 OverlayBase.openCount += 1;\n } else {\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().find((el) => el === this))\n ) {\n (this.triggerElement as HTMLElement).focus();\n }\n }\n }\n\n protected unbindEvents(triggerElement: HTMLElement): void {\n triggerElement.removeEventListener('click', this.handleClick);\n triggerElement.removeEventListener(\n 'pointerdown',\n this.handlePointerdownForClick\n );\n triggerElement.removeEventListener('focusin', this.handleFocusin);\n triggerElement.removeEventListener('focusout', this.handleFocusout);\n triggerElement.removeEventListener(\n 'pointerenter',\n this.handlePointerenter\n );\n triggerElement.removeEventListener(\n 'pointerleave',\n this.handlePointerleave\n );\n this.removeEventListener(\n 'pointerleave',\n this.handleOverlayPointerleave\n );\n triggerElement.addEventListener('pointerdown', this.handlePointerdown);\n triggerElement.removeEventListener('keydown', this.handleKeydown);\n triggerElement.removeEventListener('keyup', this.handleKeyup);\n triggerElement.removeEventListener('longpress', this.handleLongpress);\n }\n\n protected bindEvents(): void {\n const nextTriggerElement = this.triggerElement as HTMLElement;\n switch (this.triggerInteraction) {\n case 'click':\n this.bundClickEvents(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 bundClickEvents(triggerElement: HTMLElement): void {\n triggerElement.addEventListener('click', this.handleClick);\n triggerElement.addEventListener(\n 'pointerdown',\n this.handlePointerdownForClick\n );\n }\n\n protected bindLongpressEvents(triggerElement: HTMLElement): void {\n triggerElement.addEventListener('pointerdown', this.handlePointerdown);\n triggerElement.addEventListener('keydown', this.handleKeydown);\n triggerElement.addEventListener('keyup', this.handleKeyup);\n triggerElement.addEventListener('longpress', this.handleLongpress);\n\n this.prepareLongpressDescription(triggerElement);\n }\n\n protected bindHoverEvents(triggerElement: HTMLElement): void {\n triggerElement.addEventListener('focusin', this.handleFocusin);\n triggerElement.addEventListener('focusout', this.handleFocusout);\n triggerElement.addEventListener(\n 'pointerenter',\n this.handlePointerenter\n );\n triggerElement.addEventListener(\n 'pointerleave',\n this.handlePointerleave\n );\n this.addEventListener('pointerleave', this.handleOverlayPointerleave);\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(triggerElement);\n this.releaseAriaDescribedby();\n }\n if (\n !this.triggerElement ||\n !!(this.triggerElement as VirtualTrigger).updateBoundingClientRect\n ) {\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 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 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 // this.open = false;\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 part=\"content\">\n <slot @slotchange=${this.handleSlotchange}></slot>\n </div>\n `;\n }\n\n protected renderDialog(): TemplateResult {\n return html`\n <dialog\n class=\"dialog\"\n part=\"dialog\"\n @close=${this.handleBrowserClose}\n @cancel=${this.handleBrowserClose}\n @beforetoggle=${this.handleBeforetoggle}\n style=${styleMap({\n '--swc-overlay-z-index': (\n 1000 + OverlayBase.openCount\n ).toString(),\n })}\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 return html`\n <div\n class=\"dialog\"\n part=\"dialog\"\n popover=${ifDefined(popoverValue)}\n @beforetoggle=${this.handleBeforetoggle}\n @close=${this.handleBrowserClose}\n style=${styleMap({\n '--swc-overlay-z-index': (\n 1000 + OverlayBase.openCount\n ).toString(),\n })}\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(this.triggerElement as HTMLElement);\n }\n this.open = false;\n super.disconnectedCallback();\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport type { Placement } from '@floating-ui/dom';\nimport {\n html,\n PropertyValues,\n SpectrumElement,\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 { conditionAttributeWithId } from '@spectrum-web-components/base/src/condition-attribute-with-id.js';\nimport {\n ElementResolutionController,\n elementResolverUpdatedSymbol,\n} from '@spectrum-web-components/reactive-controllers/src/ElementResolution.js';\nimport { VirtualTrigger } from './VirtualTrigger.dev.js'\nimport {\n ifDefined,\n styleMap,\n} from '@spectrum-web-components/base/src/directives.js';\nimport styles from './overlay-base.css.js';\nimport { overlayStack } from './OverlayStack.dev.js'\nimport { PlacementController } from './PlacementController.dev.js'\nimport { OverlayTypes } from './overlay-types.dev.js'\nimport { OverlayTimer } from './overlay-timer.dev.js'\n\nexport const overlayTimer = new OverlayTimer();\n\nexport type OpenableElement = HTMLElement & {\n open: boolean;\n tipElement?: HTMLElement;\n updateComplete?: Promise<void>;\n};\n\nconst LONGPRESS_DURATION = 300;\n\nexport type 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\nexport class BeforetoggleClosedEvent extends Event {\n currentState = 'open';\n newState = 'closed';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\nexport class BeforetoggleOpenEvent extends Event {\n currentState = 'closed';\n newState = 'open';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\nexport const noop = (): void => {\n return;\n};\n\n/**\n * Apply a \"transitionend\" listener to an element that may not transition but\n * guarantee the callback will be fired either way.\n *\n * @param el {HTMLElement} - Target of the \"transition\" listeners.\n * @param action {Function} - Method to trigger the \"transition\".\n * @param cb {Function} - Callback to trigger when the \"transition\" has ended.\n */\nexport const guaranteedTransitionend = (\n el: HTMLElement,\n action: () => void,\n cb: () => void\n): void => {\n const cleanup = (): void => {\n el.removeEventListener('transitionrun', handleTransitionrun);\n el.removeEventListener('transitionend', handleTransitionend);\n cb();\n };\n let guarantee2: number;\n let guarantee3: number;\n // WebKit fires `transitionrun` a little earlier, so the inner/outer relationship\n // here allows WebKit to be caught, but doesn't remove the animation listener until\n // after it would have fired in Chromium.\n const guarantee1 = requestAnimationFrame(() => {\n guarantee2 = requestAnimationFrame(() => {\n guarantee3 = requestAnimationFrame(() => {\n cleanup();\n });\n });\n });\n const handleTransitionend = (event: TransitionEvent): void => {\n if (event.propertyName === 'visibility') {\n // Ignore \"visibility\" transitions because they often happen before/after a\n // larger transition and don't represent the overall transition duration.\n return;\n }\n cleanup();\n };\n const handleTransitionrun = (event: TransitionEvent): void => {\n if (event.propertyName === 'visibility') {\n // Ignore \"visibility\" transitions because they often happen before/after a\n // larger transition and don't represent the overall transition duration.\n return;\n }\n cancelAnimationFrame(guarantee1);\n cancelAnimationFrame(guarantee2);\n cancelAnimationFrame(guarantee3);\n el.removeEventListener('transitionrun', handleTransitionrun);\n el.addEventListener('transitionend', handleTransitionend);\n };\n el.addEventListener('transitionrun', handleTransitionrun);\n action();\n};\n\nexport class OverlayBase extends SpectrumElement {\n static override styles = [styles];\n\n @property({ type: Boolean })\n delayed = false;\n\n @query('.dialog')\n dialogEl!: HTMLDialogElement & {\n showPopover(): void;\n hidePopover(): void;\n };\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(this.triggerElement as HTMLElement);\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 protected dispose = noop;\n\n @queryAssignedElements({\n selector: ':not([slot=\"longpress-describedby-descriptor\"])',\n flatten: true,\n })\n elements!: OpenableElement[];\n\n public parentOverlayToForceClose?: OverlayBase;\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 @property()\n offset: number | [number, number] = 6;\n\n public placementController = new PlacementController(this);\n\n @property({ type: Boolean, reflect: true })\n get open(): boolean {\n return this._open;\n }\n\n set open(open: boolean) {\n if (open && this.disabled) return;\n if (open === this.open) return;\n this._open = open;\n this.requestUpdate('open', !this.open);\n }\n\n private _open = false;\n\n static openCount = 1;\n\n @property()\n placement?: Placement;\n\n @property({ attribute: 'receives-focus' })\n receivesFocus: 'true' | 'false' | 'auto' = 'auto';\n\n private releaseAriaDescribedby = noop;\n private releaseLongpressDescribedby = noop;\n\n @query('slot')\n slotEl!: HTMLSlotElement;\n\n @property()\n trigger?: string;\n\n @state()\n triggerElement: HTMLElement | VirtualTrigger | null = null;\n\n @state()\n triggerInteraction?: 'click' | 'longpress' | 'hover';\n\n @property()\n 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 /* c8 ignore next 12 */\n protected async manageDialogOpen(): Promise<void> {\n console.warn(\n 'Implement the `manageDialogOpen` method in a class extension.'\n );\n }\n\n protected async managePopoverOpen(): Promise<void> {\n console.warn(\n 'Implement the `managePopoverOpen` method in a class extension.'\n );\n }\n\n protected get requiresPosition(): boolean {\n // Do no position \"page\" overlays as they should block the entrie 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 automaticallyu position contnent, unless it is a \"hint\".\n if (!this.triggerElement || (!this.placement && this.type !== 'hint'))\n return false;\n return true;\n }\n\n protected 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\n this.placementController.placeOverlay(this.dialogEl, {\n // delayed?: boolean,\n offset,\n placement,\n // notImmediatelyClosable?: boolean, // rename or place behind other API options\n // receivesFocus?: 'auto';\n // root?: HTMLElement;\n trigger,\n type: this.type,\n });\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 } 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 OverlayBase.openCount += 1;\n } else {\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().find((el) => el === this))\n ) {\n (this.triggerElement as HTMLElement).focus();\n }\n }\n }\n\n protected unbindEvents(triggerElement: HTMLElement): void {\n triggerElement.removeEventListener('click', this.handleClick);\n triggerElement.removeEventListener(\n 'pointerdown',\n this.handlePointerdownForClick\n );\n triggerElement.removeEventListener('focusin', this.handleFocusin);\n triggerElement.removeEventListener('focusout', this.handleFocusout);\n triggerElement.removeEventListener(\n 'pointerenter',\n this.handlePointerenter\n );\n triggerElement.removeEventListener(\n 'pointerleave',\n this.handlePointerleave\n );\n this.removeEventListener(\n 'pointerleave',\n this.handleOverlayPointerleave\n );\n triggerElement.addEventListener('pointerdown', this.handlePointerdown);\n triggerElement.removeEventListener('keydown', this.handleKeydown);\n triggerElement.removeEventListener('keyup', this.handleKeyup);\n triggerElement.removeEventListener('longpress', this.handleLongpress);\n }\n\n protected bindEvents(): void {\n const nextTriggerElement = this.triggerElement as HTMLElement;\n if (!nextTriggerElement) return;\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 triggerElement.addEventListener('click', this.handleClick);\n triggerElement.addEventListener(\n 'pointerdown',\n this.handlePointerdownForClick\n );\n }\n\n protected bindLongpressEvents(triggerElement: HTMLElement): void {\n triggerElement.addEventListener('pointerdown', this.handlePointerdown);\n triggerElement.addEventListener('keydown', this.handleKeydown);\n triggerElement.addEventListener('keyup', this.handleKeyup);\n triggerElement.addEventListener('longpress', this.handleLongpress);\n\n this.prepareLongpressDescription(triggerElement);\n }\n\n protected bindHoverEvents(triggerElement: HTMLElement): void {\n triggerElement.addEventListener('focusin', this.handleFocusin);\n triggerElement.addEventListener('focusout', this.handleFocusout);\n triggerElement.addEventListener(\n 'pointerenter',\n this.handlePointerenter\n );\n triggerElement.addEventListener(\n 'pointerleave',\n this.handlePointerleave\n );\n this.addEventListener('pointerleave', this.handleOverlayPointerleave);\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(triggerElement);\n this.releaseAriaDescribedby();\n }\n if (\n !this.triggerElement ||\n !!(this.triggerElement as VirtualTrigger).updateBoundingClientRect\n ) {\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 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 // this.open = false;\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 part=\"content\">\n <slot @slotchange=${this.handleSlotchange}></slot>\n </div>\n `;\n }\n\n protected renderDialog(): TemplateResult {\n return html`\n <dialog\n class=\"dialog\"\n part=\"dialog\"\n @close=${this.handleBrowserClose}\n @cancel=${this.handleBrowserClose}\n @beforetoggle=${this.handleBeforetoggle}\n style=${styleMap({\n '--swc-overlay-z-index': (\n 1000 + OverlayBase.openCount\n ).toString(),\n })}\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 return html`\n <div\n class=\"dialog\"\n part=\"dialog\"\n popover=${ifDefined(popoverValue)}\n @beforetoggle=${this.handleBeforetoggle}\n @close=${this.handleBrowserClose}\n style=${styleMap({\n '--swc-overlay-z-index': (\n 1000 + OverlayBase.openCount\n ).toString(),\n })}\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(this.triggerElement as HTMLElement);\n }\n this.open = false;\n super.disconnectedCallback();\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["_a", "event"]
|
|
7
7
|
}
|
package/src/OverlayBase.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var b=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var s=(a,l,e,t)=>{for(var n=t>1?void 0:t?y(l,e):l,o=a.length-1,i;o>=0;o--)(i=a[o])&&(n=(t?i(l,e,n):i(n))||n);return t&&n&&b(l,e,n),n};import{html as u,SpectrumElement as L}from"@spectrum-web-components/base";import{property as p,query as v,queryAssignedElements as T,state as g}from"@spectrum-web-components/base/src/decorators.js";import{isAndroid as w,isIOS as P}from"@spectrum-web-components/shared/src/platform.js";import{conditionAttributeWithId as m}from"@spectrum-web-components/base/src/condition-attribute-with-id.js";import{ElementResolutionController as C,elementResolverUpdatedSymbol as D}from"@spectrum-web-components/reactive-controllers/src/ElementResolution.js";import{VirtualTrigger as A}from"./VirtualTrigger.js";import{ifDefined as H,styleMap as f}from"@spectrum-web-components/base/src/directives.js";import M from"./overlay-base.css.js";import{overlayStack as E}from"./OverlayStack.js";import{PlacementController as R}from"./PlacementController.js";import{OverlayTimer as k}from"./overlay-timer.js";export const overlayTimer=new k;const S=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"};export class BeforetoggleClosedEvent extends Event{constructor(){super("beforetoggle",{bubbles:!1,composed:!1});this.currentState="open";this.newState="closed"}}export class BeforetoggleOpenEvent extends Event{constructor(){super("beforetoggle",{bubbles:!1,composed:!1});this.currentState="closed";this.newState="open"}}export const noop=()=>{},guaranteedTransitionend=(a,l,e)=>{const t=()=>{a.removeEventListener("transitionrun",r),a.removeEventListener("transitionend",d),e()};let n,o;const i=requestAnimationFrame(()=>{n=requestAnimationFrame(()=>{o=requestAnimationFrame(()=>{t()})})}),d=h=>{h.propertyName!=="visibility"&&t()},r=h=>{h.propertyName!=="visibility"&&(cancelAnimationFrame(i),cancelAnimationFrame(n),cancelAnimationFrame(o),a.removeEventListener("transitionrun",r),a.addEventListener("transitionend",d))};a.addEventListener("transitionrun",r),l()};const c=class extends L{constructor(){super(...arguments);this.delayed=!1;this._disabled=!1;this.dispose=noop;this.longpressed=!1;this.offset=6;this.placementController=new R(this);this._open=!1;this.receivesFocus="auto";this.releaseAriaDescribedby=noop;this.releaseLongpressDescribedby=noop;this.triggerElement=null;this.type="hint";this.wasOpen=!1;this.elementResolver=new C(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"}}))},S)};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:n}=e;(t==="Space"||n&&t==="ArrowDown")&&t==="ArrowDown"&&(e.stopPropagation(),e.stopImmediatePropagation())};this.handleKeyup=e=>{const{code:t,altKey:n}=e;(t==="Space"||n&&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.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(n=>n===e.relatedTarget||n.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.wasOpen=this.open,this.open=!1):(this.open=this.open||this.wasOpen,this.wasOpen=!1)}get hasNonVirtualTrigger(){return!!this.triggerElement&&!(this.triggerElement instanceof A)}get open(){return this._open}set open(e){e&&this.disabled||e!==this.open&&(this._open=e,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}}async manageDialogOpen(){console.warn("Implement the `manageDialogOpen` method in a class extension.")}async managePopoverOpen(){console.warn("Implement the `managePopoverOpen` method in a class extension.")}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,n=this.placement||"right";this.placementController.placeOverlay(this.dialogEl,{offset:e,placement:n,trigger:t,type:this.type})}async manageOpen(e){var t;if(!(!this.isConnected&&this.open))if(this.hasUpdated||await this.updateComplete,this.open?E.add(this):(e&&this.dispose(),E.remove(this)),this.usesDialog?this.manageDialogOpen():this.managePopoverOpen(),this.open)c.openCount+=1;else{const n=()=>{var d;const o=[];let i=document.activeElement;for(;i!=null&&i.shadowRoot&&i.shadowRoot.activeElement;)i=i.shadowRoot.activeElement;for(;i;){const r=i.assignedSlot||i.parentElement||((d=i.getRootNode())==null?void 0:d.host);r&&o.push(r),i=r}return o};(t=this.triggerElement)!=null&&t.focus&&(this.contains(this.getRootNode().activeElement)||n().find(o=>o===this))&&this.triggerElement.focus()}}unbindEvents(e){e.removeEventListener("click",this.handleClick),e.removeEventListener("pointerdown",this.handlePointerdownForClick),e.removeEventListener("focusin",this.handleFocusin),e.removeEventListener("focusout",this.handleFocusout),e.removeEventListener("pointerenter",this.handlePointerenter),e.removeEventListener("pointerleave",this.handlePointerleave),this.removeEventListener("pointerleave",this.handleOverlayPointerleave),e.addEventListener("pointerdown",this.handlePointerdown),e.removeEventListener("keydown",this.handleKeydown),e.removeEventListener("keyup",this.handleKeyup),e.removeEventListener("longpress",this.handleLongpress)}bindEvents(){const e=this.triggerElement;switch(this.triggerInteraction){case"click":this.bundClickEvents(e);return;case"longpress":this.bindLongpressEvents(e);return;case"hover":this.bindHoverEvents(e);return}}bundClickEvents(e){e.addEventListener("click",this.handleClick),e.addEventListener("pointerdown",this.handlePointerdownForClick)}bindLongpressEvents(e){e.addEventListener("pointerdown",this.handlePointerdown),e.addEventListener("keydown",this.handleKeydown),e.addEventListener("keyup",this.handleKeyup),e.addEventListener("longpress",this.handleLongpress),this.prepareLongpressDescription(e)}bindHoverEvents(e){e.addEventListener("focusin",this.handleFocusin),e.addEventListener("focusout",this.handleFocusout),e.addEventListener("pointerenter",this.handlePointerenter),e.addEventListener("pointerleave",this.handlePointerleave),this.addEventListener("pointerleave",this.handleOverlayPointerleave),this.receivesFocus!=="true"&&this.prepareAriaDescribedby(e)}manageTriggerElement(e){e&&(this.unbindEvents(e),this.releaseAriaDescribedby()),!(!this.triggerElement||this.triggerElement.updateBoundingClientRect)&&this.bindEvents()}prepareLongpressDescription(e){if(this.triggerInteraction!=="longpress"||this.releaseLongpressDescribedby!==noop||!this.elements.length)return;const t=document.createElement("div");t.id=`longpress-describedby-descriptor-${crypto.randomUUID().slice(0,8)}`;const n=P()||w()?"touch":"keyboard";t.textContent=LONGPRESS_INSTRUCTIONS[n],t.slot="longpress-describedby-descriptor",e.insertAdjacentElement("afterend",t);const o=m(e,"aria-describedby",[t.id]);this.releaseLongpressDescribedby=()=>{o(),t.remove(),this.releaseLongpressDescribedby=noop}}prepareAriaDescribedby(e){if(this.triggerInteraction!=="hover"||this.releaseAriaDescribedby!==noop||!this.elements.length)return;const t=e.getRootNode(),n=this.elements[0].getRootNode(),o=this.getRootNode();if(t==o){const i=m(e,"aria-describedby",[this.id]);this.releaseAriaDescribedby=()=>{i(),this.releaseAriaDescribedby=noop}}else if(t===n){this.elementIds=this.elements.map(r=>r.id);const i=this.elements.map(r=>(r.id||(r.id=`${this.tagName.toLowerCase()}-helper-${crypto.randomUUID().slice(0,8)}`),r.id)),d=m(e,"aria-describedby",i);this.releaseAriaDescribedby=()=>{d(),this.elements.map((r,h)=>{r.id=this.elementIds[h]}),this.releaseAriaDescribedby=noop}}}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 n;if(this.hasUpdated||this.addEventListener("focusout",o=>{if(this.type!=="auto"||!o.relatedTarget)return;const i=new Event("overlay-relation-query",{bubbles:!0,composed:!0});o.relatedTarget.addEventListener(i.type,d=>{d.composedPath().includes(this)||(this.open=!1)}),o.relatedTarget.dispatchEvent(i)}),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[o,i]=((n=this.trigger)==null?void 0:n.split("@"))||[];this.elementResolver.selector=o?`#${o}`:"",this.triggerInteraction=i}const t=this.triggerElement;e.has(D)&&(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 u`
|
|
1
|
+
"use strict";var b=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var s=(a,l,e,t)=>{for(var n=t>1?void 0:t?y(l,e):l,r=a.length-1,i;r>=0;r--)(i=a[r])&&(n=(t?i(l,e,n):i(n))||n);return t&&n&&b(l,e,n),n};import{html as u,SpectrumElement as L}from"@spectrum-web-components/base";import{property as p,query as g,queryAssignedElements as T,state as v}from"@spectrum-web-components/base/src/decorators.js";import{isAndroid as w,isIOS as P}from"@spectrum-web-components/shared/src/platform.js";import{conditionAttributeWithId as m}from"@spectrum-web-components/base/src/condition-attribute-with-id.js";import{ElementResolutionController as C,elementResolverUpdatedSymbol as D}from"@spectrum-web-components/reactive-controllers/src/ElementResolution.js";import{VirtualTrigger as A}from"./VirtualTrigger.js";import{ifDefined as H,styleMap as f}from"@spectrum-web-components/base/src/directives.js";import M from"./overlay-base.css.js";import{overlayStack as E}from"./OverlayStack.js";import{PlacementController as R}from"./PlacementController.js";import{OverlayTimer as k}from"./overlay-timer.js";export const overlayTimer=new k;const N=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"};export class BeforetoggleClosedEvent extends Event{constructor(){super("beforetoggle",{bubbles:!1,composed:!1});this.currentState="open";this.newState="closed"}}export class BeforetoggleOpenEvent extends Event{constructor(){super("beforetoggle",{bubbles:!1,composed:!1});this.currentState="closed";this.newState="open"}}export const noop=()=>{},guaranteedTransitionend=(a,l,e)=>{const t=()=>{a.removeEventListener("transitionrun",o),a.removeEventListener("transitionend",d),e()};let n,r;const i=requestAnimationFrame(()=>{n=requestAnimationFrame(()=>{r=requestAnimationFrame(()=>{t()})})}),d=h=>{h.propertyName!=="visibility"&&t()},o=h=>{h.propertyName!=="visibility"&&(cancelAnimationFrame(i),cancelAnimationFrame(n),cancelAnimationFrame(r),a.removeEventListener("transitionrun",o),a.addEventListener("transitionend",d))};a.addEventListener("transitionrun",o),l()};const c=class extends L{constructor(){super(...arguments);this.delayed=!1;this._disabled=!1;this.dispose=noop;this.longpressed=!1;this.offset=6;this.placementController=new R(this);this._open=!1;this.receivesFocus="auto";this.releaseAriaDescribedby=noop;this.releaseLongpressDescribedby=noop;this.triggerElement=null;this.type="hint";this.wasOpen=!1;this.elementResolver=new C(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"}}))},N)};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:n}=e;(t==="Space"||n&&t==="ArrowDown")&&t==="ArrowDown"&&(e.stopPropagation(),e.stopImmediatePropagation())};this.handleKeyup=e=>{const{code:t,altKey:n}=e;(t==="Space"||n&&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(n=>n===e.relatedTarget||n.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.triggerElement),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 A)}get open(){return this._open}set open(e){e&&this.disabled||e!==this.open&&(this._open=e,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}}async manageDialogOpen(){console.warn("Implement the `manageDialogOpen` method in a class extension.")}async managePopoverOpen(){console.warn("Implement the `managePopoverOpen` method in a class extension.")}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,n=this.placement||"right";this.placementController.placeOverlay(this.dialogEl,{offset:e,placement:n,trigger:t,type:this.type})}async manageOpen(e){var t;if(!(!this.isConnected&&this.open))if(this.hasUpdated||await this.updateComplete,this.open?E.add(this):(e&&this.dispose(),E.remove(this)),this.usesDialog?this.manageDialogOpen():this.managePopoverOpen(),this.open)c.openCount+=1;else{const n=()=>{var d;const r=[];let i=document.activeElement;for(;i!=null&&i.shadowRoot&&i.shadowRoot.activeElement;)i=i.shadowRoot.activeElement;for(;i;){const o=i.assignedSlot||i.parentElement||((d=i.getRootNode())==null?void 0:d.host);o&&r.push(o),i=o}return r};(t=this.triggerElement)!=null&&t.focus&&(this.contains(this.getRootNode().activeElement)||n().find(r=>r===this))&&this.triggerElement.focus()}}unbindEvents(e){e.removeEventListener("click",this.handleClick),e.removeEventListener("pointerdown",this.handlePointerdownForClick),e.removeEventListener("focusin",this.handleFocusin),e.removeEventListener("focusout",this.handleFocusout),e.removeEventListener("pointerenter",this.handlePointerenter),e.removeEventListener("pointerleave",this.handlePointerleave),this.removeEventListener("pointerleave",this.handleOverlayPointerleave),e.addEventListener("pointerdown",this.handlePointerdown),e.removeEventListener("keydown",this.handleKeydown),e.removeEventListener("keyup",this.handleKeyup),e.removeEventListener("longpress",this.handleLongpress)}bindEvents(){const e=this.triggerElement;if(e)switch(this.triggerInteraction){case"click":this.bindClickEvents(e);return;case"longpress":this.bindLongpressEvents(e);return;case"hover":this.bindHoverEvents(e);return}}bindClickEvents(e){e.addEventListener("click",this.handleClick),e.addEventListener("pointerdown",this.handlePointerdownForClick)}bindLongpressEvents(e){e.addEventListener("pointerdown",this.handlePointerdown),e.addEventListener("keydown",this.handleKeydown),e.addEventListener("keyup",this.handleKeyup),e.addEventListener("longpress",this.handleLongpress),this.prepareLongpressDescription(e)}bindHoverEvents(e){e.addEventListener("focusin",this.handleFocusin),e.addEventListener("focusout",this.handleFocusout),e.addEventListener("pointerenter",this.handlePointerenter),e.addEventListener("pointerleave",this.handlePointerleave),this.addEventListener("pointerleave",this.handleOverlayPointerleave),this.receivesFocus!=="true"&&this.prepareAriaDescribedby(e)}manageTriggerElement(e){e&&(this.unbindEvents(e),this.releaseAriaDescribedby()),!(!this.triggerElement||this.triggerElement.updateBoundingClientRect)&&this.bindEvents()}prepareLongpressDescription(e){if(this.triggerInteraction!=="longpress"||this.releaseLongpressDescribedby!==noop||!this.elements.length)return;const t=document.createElement("div");t.id=`longpress-describedby-descriptor-${crypto.randomUUID().slice(0,8)}`;const n=P()||w()?"touch":"keyboard";t.textContent=LONGPRESS_INSTRUCTIONS[n],t.slot="longpress-describedby-descriptor",e.insertAdjacentElement("afterend",t);const r=m(e,"aria-describedby",[t.id]);this.releaseLongpressDescribedby=()=>{r(),t.remove(),this.releaseLongpressDescribedby=noop}}prepareAriaDescribedby(e){if(this.triggerInteraction!=="hover"||this.releaseAriaDescribedby!==noop||!this.elements.length)return;const t=e.getRootNode(),n=this.elements[0].getRootNode(),r=this.getRootNode();if(t==r){const i=m(e,"aria-describedby",[this.id]);this.releaseAriaDescribedby=()=>{i(),this.releaseAriaDescribedby=noop}}else if(t===n){this.elementIds=this.elements.map(o=>o.id);const i=this.elements.map(o=>(o.id||(o.id=`${this.tagName.toLowerCase()}-helper-${crypto.randomUUID().slice(0,8)}`),o.id)),d=m(e,"aria-describedby",i);this.releaseAriaDescribedby=()=>{d(),this.elements.map((o,h)=>{o.id=this.elementIds[h]}),this.releaseAriaDescribedby=noop}}}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 n;if(this.hasUpdated||this.addEventListener("focusout",r=>{if(this.type!=="auto"||!r.relatedTarget)return;const i=new Event("overlay-relation-query",{bubbles:!0,composed:!0});r.relatedTarget.addEventListener(i.type,d=>{d.composedPath().includes(this)||(this.open=!1)}),r.relatedTarget.dispatchEvent(i)}),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,i]=((n=this.trigger)==null?void 0:n.split("@"))||[];this.elementResolver.selector=r?`#${r}`:"",this.triggerInteraction=i}const t=this.triggerElement;e.has(D)&&(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 u`
|
|
2
2
|
<div part="content">
|
|
3
3
|
<slot @slotchange=${this.handleSlotchange}></slot>
|
|
4
4
|
</div>
|
|
@@ -27,5 +27,5 @@
|
|
|
27
27
|
`}render(){const e=this.type==="modal"||this.type==="page";return u`
|
|
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.triggerElement),this.open=!1,super.disconnectedCallback()}};export let OverlayBase=c;OverlayBase.styles=[M],OverlayBase.openCount=1,s([p({type:Boolean})],OverlayBase.prototype,"delayed",2),s([
|
|
30
|
+
`}connectedCallback(){super.connectedCallback(),this.addEventListener("close",()=>{this.open=!1}),this.hasNonVirtualTrigger&&this.bindEvents()}disconnectedCallback(){this.hasNonVirtualTrigger&&this.unbindEvents(this.triggerElement),this.open=!1,super.disconnectedCallback()}};export let OverlayBase=c;OverlayBase.styles=[M],OverlayBase.openCount=1,s([p({type:Boolean})],OverlayBase.prototype,"delayed",2),s([g(".dialog")],OverlayBase.prototype,"dialogEl",2),s([p({type:Boolean})],OverlayBase.prototype,"disabled",1),s([T({selector:':not([slot="longpress-describedby-descriptor"])',flatten:!0})],OverlayBase.prototype,"elements",2),s([p()],OverlayBase.prototype,"offset",2),s([p({type:Boolean,reflect:!0})],OverlayBase.prototype,"open",1),s([p()],OverlayBase.prototype,"placement",2),s([p({attribute:"receives-focus"})],OverlayBase.prototype,"receivesFocus",2),s([g("slot")],OverlayBase.prototype,"slotEl",2),s([p()],OverlayBase.prototype,"trigger",2),s([v()],OverlayBase.prototype,"triggerElement",2),s([v()],OverlayBase.prototype,"triggerInteraction",2),s([p()],OverlayBase.prototype,"type",2);
|
|
31
31
|
//# sourceMappingURL=OverlayBase.js.map
|
package/src/OverlayBase.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["OverlayBase.ts"],
|
|
4
|
-
"sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport type { Placement } from '@floating-ui/dom';\nimport {\n html,\n PropertyValues,\n SpectrumElement,\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 { conditionAttributeWithId } from '@spectrum-web-components/base/src/condition-attribute-with-id.js';\nimport {\n ElementResolutionController,\n elementResolverUpdatedSymbol,\n} from '@spectrum-web-components/reactive-controllers/src/ElementResolution.js';\nimport { VirtualTrigger } from './VirtualTrigger.js';\nimport {\n ifDefined,\n styleMap,\n} from '@spectrum-web-components/base/src/directives.js';\nimport styles from './overlay-base.css.js';\nimport { overlayStack } from './OverlayStack.js';\nimport { PlacementController } from './PlacementController.js';\nimport { OverlayTypes } from './overlay-types.js';\nimport { OverlayTimer } from './overlay-timer.js';\n\nexport const overlayTimer = new OverlayTimer();\n\nexport type OpenableElement = HTMLElement & {\n open: boolean;\n tipElement?: HTMLElement;\n updateComplete?: Promise<void>;\n};\n\nconst LONGPRESS_DURATION = 300;\n\nexport type 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\nexport class BeforetoggleClosedEvent extends Event {\n currentState = 'open';\n newState = 'closed';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\nexport class BeforetoggleOpenEvent extends Event {\n currentState = 'closed';\n newState = 'open';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\nexport const noop = (): void => {\n return;\n};\n\n/**\n * Apply a \"transitionend\" listener to an element that may not transition but\n * guarantee the callback will be fired either way.\n *\n * @param el {HTMLElement} - Target of the \"transition\" listeners.\n * @param action {Function} - Method to trigger the \"transition\".\n * @param cb {Function} - Callback to trigger when the \"transition\" has ended.\n */\nexport const guaranteedTransitionend = (\n el: HTMLElement,\n action: () => void,\n cb: () => void\n): void => {\n const cleanup = (): void => {\n el.removeEventListener('transitionrun', handleTransitionrun);\n el.removeEventListener('transitionend', handleTransitionend);\n cb();\n };\n let guarantee2: number;\n let guarantee3: number;\n // WebKit fires `transitionrun` a little earlier, so the inner/outer relationship\n // here allows WebKit to be caught, but doesn't remove the animation listener until\n // after it would have fired in Chromium.\n const guarantee1 = requestAnimationFrame(() => {\n guarantee2 = requestAnimationFrame(() => {\n guarantee3 = requestAnimationFrame(() => {\n cleanup();\n });\n });\n });\n const handleTransitionend = (event: TransitionEvent): void => {\n if (event.propertyName === 'visibility') {\n // Ignore \"visibility\" transitions because they often happen before/after a\n // larger transition and don't represent the overall transition duration.\n return;\n }\n cleanup();\n };\n const handleTransitionrun = (event: TransitionEvent): void => {\n if (event.propertyName === 'visibility') {\n // Ignore \"visibility\" transitions because they often happen before/after a\n // larger transition and don't represent the overall transition duration.\n return;\n }\n cancelAnimationFrame(guarantee1);\n cancelAnimationFrame(guarantee2);\n cancelAnimationFrame(guarantee3);\n el.removeEventListener('transitionrun', handleTransitionrun);\n el.addEventListener('transitionend', handleTransitionend);\n };\n el.addEventListener('transitionrun', handleTransitionrun);\n action();\n};\n\nexport class OverlayBase extends SpectrumElement {\n static override styles = [styles];\n\n @property({ type: Boolean })\n delayed = false;\n\n @query('.dialog')\n dialogEl!: HTMLDialogElement & {\n showPopover(): void;\n hidePopover(): void;\n };\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 this.wasOpen = this.open;\n this.open = false;\n } else {\n this.open = this.open || this.wasOpen;\n this.wasOpen = false;\n }\n }\n\n private _disabled = false;\n\n protected dispose = noop;\n\n @queryAssignedElements({\n selector: ':not([slot=\"longpress-describedby-descriptor\"])',\n flatten: true,\n })\n elements!: OpenableElement[];\n\n public parentOverlayToForceClose?: OverlayBase;\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 @property()\n offset: number | [number, number] = 6;\n\n public placementController = new PlacementController(this);\n\n @property({ type: Boolean, reflect: true })\n get open(): boolean {\n return this._open;\n }\n\n set open(open: boolean) {\n if (open && this.disabled) return;\n if (open === this.open) return;\n this._open = open;\n this.requestUpdate('open', !this.open);\n }\n\n private _open = false;\n\n static openCount = 1;\n\n @property()\n placement?: Placement;\n\n @property({ attribute: 'receives-focus' })\n receivesFocus: 'true' | 'false' | 'auto' = 'auto';\n\n private releaseAriaDescribedby = noop;\n private releaseLongpressDescribedby = noop;\n\n @query('slot')\n slotEl!: HTMLSlotElement;\n\n @property()\n trigger?: string;\n\n @state()\n triggerElement: HTMLElement | VirtualTrigger | null = null;\n\n @state()\n triggerInteraction?: 'click' | 'longpress' | 'hover';\n\n @property()\n 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 /* c8 ignore next 12 */\n protected async manageDialogOpen(): Promise<void> {\n console.warn(\n 'Implement the `manageDialogOpen` method in a class extension.'\n );\n }\n\n protected async managePopoverOpen(): Promise<void> {\n console.warn(\n 'Implement the `managePopoverOpen` method in a class extension.'\n );\n }\n\n protected get requiresPosition(): boolean {\n // Do no position \"page\" overlays as they should block the entrie 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 automaticallyu position contnent, unless it is a \"hint\".\n if (!this.triggerElement || (!this.placement && this.type !== 'hint'))\n return false;\n return true;\n }\n\n protected 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\n this.placementController.placeOverlay(this.dialogEl, {\n // delayed?: boolean,\n offset,\n placement,\n // notImmediatelyClosable?: boolean, // rename or place behind other API options\n // receivesFocus?: 'auto';\n // root?: HTMLElement;\n trigger,\n type: this.type,\n });\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 } 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 OverlayBase.openCount += 1;\n } else {\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().find((el) => el === this))\n ) {\n (this.triggerElement as HTMLElement).focus();\n }\n }\n }\n\n protected unbindEvents(triggerElement: HTMLElement): void {\n triggerElement.removeEventListener('click', this.handleClick);\n triggerElement.removeEventListener(\n 'pointerdown',\n this.handlePointerdownForClick\n );\n triggerElement.removeEventListener('focusin', this.handleFocusin);\n triggerElement.removeEventListener('focusout', this.handleFocusout);\n triggerElement.removeEventListener(\n 'pointerenter',\n this.handlePointerenter\n );\n triggerElement.removeEventListener(\n 'pointerleave',\n this.handlePointerleave\n );\n this.removeEventListener(\n 'pointerleave',\n this.handleOverlayPointerleave\n );\n triggerElement.addEventListener('pointerdown', this.handlePointerdown);\n triggerElement.removeEventListener('keydown', this.handleKeydown);\n triggerElement.removeEventListener('keyup', this.handleKeyup);\n triggerElement.removeEventListener('longpress', this.handleLongpress);\n }\n\n protected bindEvents(): void {\n const nextTriggerElement = this.triggerElement as HTMLElement;\n switch (this.triggerInteraction) {\n case 'click':\n this.bundClickEvents(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 bundClickEvents(triggerElement: HTMLElement): void {\n triggerElement.addEventListener('click', this.handleClick);\n triggerElement.addEventListener(\n 'pointerdown',\n this.handlePointerdownForClick\n );\n }\n\n protected bindLongpressEvents(triggerElement: HTMLElement): void {\n triggerElement.addEventListener('pointerdown', this.handlePointerdown);\n triggerElement.addEventListener('keydown', this.handleKeydown);\n triggerElement.addEventListener('keyup', this.handleKeyup);\n triggerElement.addEventListener('longpress', this.handleLongpress);\n\n this.prepareLongpressDescription(triggerElement);\n }\n\n protected bindHoverEvents(triggerElement: HTMLElement): void {\n triggerElement.addEventListener('focusin', this.handleFocusin);\n triggerElement.addEventListener('focusout', this.handleFocusout);\n triggerElement.addEventListener(\n 'pointerenter',\n this.handlePointerenter\n );\n triggerElement.addEventListener(\n 'pointerleave',\n this.handlePointerleave\n );\n this.addEventListener('pointerleave', this.handleOverlayPointerleave);\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(triggerElement);\n this.releaseAriaDescribedby();\n }\n if (\n !this.triggerElement ||\n !!(this.triggerElement as VirtualTrigger).updateBoundingClientRect\n ) {\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 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 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 // this.open = false;\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 part=\"content\">\n <slot @slotchange=${this.handleSlotchange}></slot>\n </div>\n `;\n }\n\n protected renderDialog(): TemplateResult {\n return html`\n <dialog\n class=\"dialog\"\n part=\"dialog\"\n @close=${this.handleBrowserClose}\n @cancel=${this.handleBrowserClose}\n @beforetoggle=${this.handleBeforetoggle}\n style=${styleMap({\n '--swc-overlay-z-index': (\n 1000 + OverlayBase.openCount\n ).toString(),\n })}\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 return html`\n <div\n class=\"dialog\"\n part=\"dialog\"\n popover=${ifDefined(popoverValue)}\n @beforetoggle=${this.handleBeforetoggle}\n @close=${this.handleBrowserClose}\n style=${styleMap({\n '--swc-overlay-z-index': (\n 1000 + OverlayBase.openCount\n ).toString(),\n })}\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(this.triggerElement as HTMLElement);\n }\n this.open = false;\n super.disconnectedCallback();\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport type { Placement } from '@floating-ui/dom';\nimport {\n html,\n PropertyValues,\n SpectrumElement,\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 { conditionAttributeWithId } from '@spectrum-web-components/base/src/condition-attribute-with-id.js';\nimport {\n ElementResolutionController,\n elementResolverUpdatedSymbol,\n} from '@spectrum-web-components/reactive-controllers/src/ElementResolution.js';\nimport { VirtualTrigger } from './VirtualTrigger.js';\nimport {\n ifDefined,\n styleMap,\n} from '@spectrum-web-components/base/src/directives.js';\nimport styles from './overlay-base.css.js';\nimport { overlayStack } from './OverlayStack.js';\nimport { PlacementController } from './PlacementController.js';\nimport { OverlayTypes } from './overlay-types.js';\nimport { OverlayTimer } from './overlay-timer.js';\n\nexport const overlayTimer = new OverlayTimer();\n\nexport type OpenableElement = HTMLElement & {\n open: boolean;\n tipElement?: HTMLElement;\n updateComplete?: Promise<void>;\n};\n\nconst LONGPRESS_DURATION = 300;\n\nexport type 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\nexport class BeforetoggleClosedEvent extends Event {\n currentState = 'open';\n newState = 'closed';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\nexport class BeforetoggleOpenEvent extends Event {\n currentState = 'closed';\n newState = 'open';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\nexport const noop = (): void => {\n return;\n};\n\n/**\n * Apply a \"transitionend\" listener to an element that may not transition but\n * guarantee the callback will be fired either way.\n *\n * @param el {HTMLElement} - Target of the \"transition\" listeners.\n * @param action {Function} - Method to trigger the \"transition\".\n * @param cb {Function} - Callback to trigger when the \"transition\" has ended.\n */\nexport const guaranteedTransitionend = (\n el: HTMLElement,\n action: () => void,\n cb: () => void\n): void => {\n const cleanup = (): void => {\n el.removeEventListener('transitionrun', handleTransitionrun);\n el.removeEventListener('transitionend', handleTransitionend);\n cb();\n };\n let guarantee2: number;\n let guarantee3: number;\n // WebKit fires `transitionrun` a little earlier, so the inner/outer relationship\n // here allows WebKit to be caught, but doesn't remove the animation listener until\n // after it would have fired in Chromium.\n const guarantee1 = requestAnimationFrame(() => {\n guarantee2 = requestAnimationFrame(() => {\n guarantee3 = requestAnimationFrame(() => {\n cleanup();\n });\n });\n });\n const handleTransitionend = (event: TransitionEvent): void => {\n if (event.propertyName === 'visibility') {\n // Ignore \"visibility\" transitions because they often happen before/after a\n // larger transition and don't represent the overall transition duration.\n return;\n }\n cleanup();\n };\n const handleTransitionrun = (event: TransitionEvent): void => {\n if (event.propertyName === 'visibility') {\n // Ignore \"visibility\" transitions because they often happen before/after a\n // larger transition and don't represent the overall transition duration.\n return;\n }\n cancelAnimationFrame(guarantee1);\n cancelAnimationFrame(guarantee2);\n cancelAnimationFrame(guarantee3);\n el.removeEventListener('transitionrun', handleTransitionrun);\n el.addEventListener('transitionend', handleTransitionend);\n };\n el.addEventListener('transitionrun', handleTransitionrun);\n action();\n};\n\nexport class OverlayBase extends SpectrumElement {\n static override styles = [styles];\n\n @property({ type: Boolean })\n delayed = false;\n\n @query('.dialog')\n dialogEl!: HTMLDialogElement & {\n showPopover(): void;\n hidePopover(): void;\n };\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(this.triggerElement as HTMLElement);\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 protected dispose = noop;\n\n @queryAssignedElements({\n selector: ':not([slot=\"longpress-describedby-descriptor\"])',\n flatten: true,\n })\n elements!: OpenableElement[];\n\n public parentOverlayToForceClose?: OverlayBase;\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 @property()\n offset: number | [number, number] = 6;\n\n public placementController = new PlacementController(this);\n\n @property({ type: Boolean, reflect: true })\n get open(): boolean {\n return this._open;\n }\n\n set open(open: boolean) {\n if (open && this.disabled) return;\n if (open === this.open) return;\n this._open = open;\n this.requestUpdate('open', !this.open);\n }\n\n private _open = false;\n\n static openCount = 1;\n\n @property()\n placement?: Placement;\n\n @property({ attribute: 'receives-focus' })\n receivesFocus: 'true' | 'false' | 'auto' = 'auto';\n\n private releaseAriaDescribedby = noop;\n private releaseLongpressDescribedby = noop;\n\n @query('slot')\n slotEl!: HTMLSlotElement;\n\n @property()\n trigger?: string;\n\n @state()\n triggerElement: HTMLElement | VirtualTrigger | null = null;\n\n @state()\n triggerInteraction?: 'click' | 'longpress' | 'hover';\n\n @property()\n 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 /* c8 ignore next 12 */\n protected async manageDialogOpen(): Promise<void> {\n console.warn(\n 'Implement the `manageDialogOpen` method in a class extension.'\n );\n }\n\n protected async managePopoverOpen(): Promise<void> {\n console.warn(\n 'Implement the `managePopoverOpen` method in a class extension.'\n );\n }\n\n protected get requiresPosition(): boolean {\n // Do no position \"page\" overlays as they should block the entrie 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 automaticallyu position contnent, unless it is a \"hint\".\n if (!this.triggerElement || (!this.placement && this.type !== 'hint'))\n return false;\n return true;\n }\n\n protected 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\n this.placementController.placeOverlay(this.dialogEl, {\n // delayed?: boolean,\n offset,\n placement,\n // notImmediatelyClosable?: boolean, // rename or place behind other API options\n // receivesFocus?: 'auto';\n // root?: HTMLElement;\n trigger,\n type: this.type,\n });\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 } 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 OverlayBase.openCount += 1;\n } else {\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().find((el) => el === this))\n ) {\n (this.triggerElement as HTMLElement).focus();\n }\n }\n }\n\n protected unbindEvents(triggerElement: HTMLElement): void {\n triggerElement.removeEventListener('click', this.handleClick);\n triggerElement.removeEventListener(\n 'pointerdown',\n this.handlePointerdownForClick\n );\n triggerElement.removeEventListener('focusin', this.handleFocusin);\n triggerElement.removeEventListener('focusout', this.handleFocusout);\n triggerElement.removeEventListener(\n 'pointerenter',\n this.handlePointerenter\n );\n triggerElement.removeEventListener(\n 'pointerleave',\n this.handlePointerleave\n );\n this.removeEventListener(\n 'pointerleave',\n this.handleOverlayPointerleave\n );\n triggerElement.addEventListener('pointerdown', this.handlePointerdown);\n triggerElement.removeEventListener('keydown', this.handleKeydown);\n triggerElement.removeEventListener('keyup', this.handleKeyup);\n triggerElement.removeEventListener('longpress', this.handleLongpress);\n }\n\n protected bindEvents(): void {\n const nextTriggerElement = this.triggerElement as HTMLElement;\n if (!nextTriggerElement) return;\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 triggerElement.addEventListener('click', this.handleClick);\n triggerElement.addEventListener(\n 'pointerdown',\n this.handlePointerdownForClick\n );\n }\n\n protected bindLongpressEvents(triggerElement: HTMLElement): void {\n triggerElement.addEventListener('pointerdown', this.handlePointerdown);\n triggerElement.addEventListener('keydown', this.handleKeydown);\n triggerElement.addEventListener('keyup', this.handleKeyup);\n triggerElement.addEventListener('longpress', this.handleLongpress);\n\n this.prepareLongpressDescription(triggerElement);\n }\n\n protected bindHoverEvents(triggerElement: HTMLElement): void {\n triggerElement.addEventListener('focusin', this.handleFocusin);\n triggerElement.addEventListener('focusout', this.handleFocusout);\n triggerElement.addEventListener(\n 'pointerenter',\n this.handlePointerenter\n );\n triggerElement.addEventListener(\n 'pointerleave',\n this.handlePointerleave\n );\n this.addEventListener('pointerleave', this.handleOverlayPointerleave);\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(triggerElement);\n this.releaseAriaDescribedby();\n }\n if (\n !this.triggerElement ||\n !!(this.triggerElement as VirtualTrigger).updateBoundingClientRect\n ) {\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 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 // this.open = false;\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 part=\"content\">\n <slot @slotchange=${this.handleSlotchange}></slot>\n </div>\n `;\n }\n\n protected renderDialog(): TemplateResult {\n return html`\n <dialog\n class=\"dialog\"\n part=\"dialog\"\n @close=${this.handleBrowserClose}\n @cancel=${this.handleBrowserClose}\n @beforetoggle=${this.handleBeforetoggle}\n style=${styleMap({\n '--swc-overlay-z-index': (\n 1000 + OverlayBase.openCount\n ).toString(),\n })}\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 return html`\n <div\n class=\"dialog\"\n part=\"dialog\"\n popover=${ifDefined(popoverValue)}\n @beforetoggle=${this.handleBeforetoggle}\n @close=${this.handleBrowserClose}\n style=${styleMap({\n '--swc-overlay-z-index': (\n 1000 + OverlayBase.openCount\n ).toString(),\n })}\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(this.triggerElement as HTMLElement);\n }\n this.open = false;\n super.disconnectedCallback();\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["html", "SpectrumElement", "property", "query", "queryAssignedElements", "state", "isAndroid", "isIOS", "conditionAttributeWithId", "ElementResolutionController", "elementResolverUpdatedSymbol", "VirtualTrigger", "ifDefined", "styleMap", "styles", "overlayStack", "PlacementController", "OverlayTimer", "LONGPRESS_DURATION", "el", "action", "cb", "cleanup", "handleTransitionrun", "handleTransitionend", "guarantee2", "guarantee3", "guarantee1", "event", "_OverlayBase", "triggerElement", "code", "altKey", "child", "disabled", "open", "offset", "trigger", "placement", "oldOpen", "_a", "getAncestors", "ancestors", "currentNode", "ancestor", "nextTriggerElement", "longpressDescription", "messageType", "releaseLongpressDescribedby", "triggerRoot", "contentRoot", "overlayRoot", "releaseAriaDescribedby", "appliedIds", "index", "shouldPreventClose", "changes", "relationEvent", "id", "interaction", "oldTrigger", "popoverValue", "isDialog", "__decorateClass"]
|
|
7
7
|
}
|