@spectrum-web-components/overlay 0.19.0 → 0.19.2-overlay.33
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/package.json +56 -5
- package/sp-overlay.d.ts +11 -0
- package/sp-overlay.dev.js +14 -0
- package/sp-overlay.dev.js.map +7 -0
- package/sp-overlay.js +2 -0
- package/sp-overlay.js.map +7 -0
- package/src/OverlayBase.d.ts +91 -0
- package/src/OverlayBase.dev.js +521 -0
- package/src/OverlayBase.dev.js.map +7 -0
- package/src/OverlayBase.js +16 -0
- package/src/OverlayBase.js.map +7 -0
- package/src/OverlayDialog.d.ts +8 -0
- package/src/OverlayDialog.dev.js +43 -0
- package/src/OverlayDialog.dev.js.map +7 -0
- package/src/OverlayDialog.js +2 -0
- package/src/OverlayDialog.js.map +7 -0
- package/src/OverlayElement.d.ts +66 -0
- package/src/OverlayElement.dev.js +371 -0
- package/src/OverlayElement.dev.js.map +7 -0
- package/src/OverlayElement.js +9 -0
- package/src/OverlayElement.js.map +7 -0
- package/src/OverlayNoPopover.d.ts +8 -0
- package/src/OverlayNoPopover.dev.js +63 -0
- package/src/OverlayNoPopover.dev.js.map +7 -0
- package/src/OverlayNoPopover.js +2 -0
- package/src/OverlayNoPopover.js.map +7 -0
- package/src/OverlayPopover.d.ts +8 -0
- package/src/OverlayPopover.dev.js +37 -0
- package/src/OverlayPopover.dev.js.map +7 -0
- package/src/OverlayPopover.js +2 -0
- package/src/OverlayPopover.js.map +7 -0
- package/src/OverlayStack.d.ts +24 -0
- package/src/OverlayStack.dev.js +113 -0
- package/src/OverlayStack.dev.js.map +7 -0
- package/src/OverlayStack.js +2 -0
- package/src/OverlayStack.js.map +7 -0
- package/src/OverlayTrigger.d.ts +18 -31
- package/src/OverlayTrigger.dev.js +137 -245
- package/src/OverlayTrigger.dev.js.map +3 -3
- package/src/OverlayTrigger.js +54 -22
- package/src/OverlayTrigger.js.map +3 -3
- package/src/PlacementController.d.ts +35 -0
- package/src/PlacementController.dev.js +172 -0
- package/src/PlacementController.dev.js.map +7 -0
- package/src/PlacementController.js +2 -0
- package/src/PlacementController.js.map +7 -0
- package/src/fullSizePlugin.d.ts +12 -0
- package/src/fullSizePlugin.dev.js +39 -0
- package/src/fullSizePlugin.dev.js.map +7 -0
- package/src/fullSizePlugin.js +2 -0
- package/src/fullSizePlugin.js.map +7 -0
- package/src/overlay-base.css.d.ts +2 -0
- package/src/overlay-base.css.dev.js +9 -0
- package/src/overlay-base.css.dev.js.map +7 -0
- package/src/overlay-base.css.js +6 -0
- package/src/overlay-base.css.js.map +7 -0
- package/src/overlay-element.css.d.ts +2 -0
- package/src/overlay-element.css.dev.js +7 -0
- package/src/overlay-element.css.dev.js.map +7 -0
- package/src/overlay-element.css.js +4 -0
- package/src/overlay-element.css.js.map +7 -0
- package/src/overlay-trigger.css.dev.js +1 -1
- package/src/overlay-trigger.css.dev.js.map +1 -1
- package/src/overlay-trigger.css.js +1 -1
- package/src/overlay-trigger.css.js.map +1 -1
- package/src/placement.d.ts +21 -0
- package/src/placement.dev.js +111 -0
- package/src/placement.dev.js.map +7 -0
- package/src/placement.js +2 -0
- package/src/placement.js.map +7 -0
- package/src/sizePlugin.d.ts +12 -0
- package/src/sizePlugin.dev.js +18 -0
- package/src/sizePlugin.dev.js.map +7 -0
- package/src/sizePlugin.js +2 -0
- package/src/sizePlugin.js.map +7 -0
- package/src/topLayerOverTransforms.d.ts +22 -0
- package/src/topLayerOverTransforms.dev.js +161 -0
- package/src/topLayerOverTransforms.dev.js.map +7 -0
- package/src/topLayerOverTransforms.js +2 -0
- package/src/topLayerOverTransforms.js.map +7 -0
- package/stories/overlay-element.stories.js +216 -0
- package/stories/overlay-element.stories.js.map +7 -0
- package/stories/overlay-story-components.js +1 -2
- package/stories/overlay-story-components.js.map +2 -2
- package/stories/overlay.stories.js +652 -637
- package/stories/overlay.stories.js.map +2 -2
- package/sync/overlay-trigger.d.ts +4 -0
- package/sync/overlay-trigger.dev.js +1 -3
- package/sync/overlay-trigger.dev.js.map +2 -2
- package/sync/overlay-trigger.js +1 -1
- package/sync/overlay-trigger.js.map +3 -3
- package/test/index.js +3 -3
- package/test/index.js.map +2 -2
- package/test/overlay-element.test-vrt.js +5 -0
- package/test/overlay-element.test-vrt.js.map +7 -0
- package/test/overlay-element.test.js +739 -0
- package/test/overlay-element.test.js.map +7 -0
- package/test/overlay-lifecycle.test.js +15 -61
- package/test/overlay-lifecycle.test.js.map +2 -2
- package/test/overlay-trigger-click.test.js +3 -2
- package/test/overlay-trigger-click.test.js.map +2 -2
- package/test/overlay-trigger-extended.test.js +1 -1
- package/test/overlay-trigger-extended.test.js.map +2 -2
- package/test/overlay-trigger-hover-click.test.js +1 -1
- package/test/overlay-trigger-hover-click.test.js.map +2 -2
- package/test/overlay-trigger-hover.test.js +2 -2
- package/test/overlay-trigger-hover.test.js.map +2 -2
- package/test/overlay-trigger-longpress.test.js +1 -1
- package/test/overlay-trigger-longpress.test.js.map +2 -2
- package/test/overlay-update.test.js +4 -4
- package/test/overlay-update.test.js.map +2 -2
- package/test/overlay.test.js +3 -3
- package/test/overlay.test.js.map +2 -2
- package/custom-elements.json +0 -1191
|
@@ -0,0 +1,521 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
5
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
6
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
7
|
+
if (decorator = decorators[i])
|
|
8
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
9
|
+
if (kind && result)
|
|
10
|
+
__defProp(target, key, result);
|
|
11
|
+
return result;
|
|
12
|
+
};
|
|
13
|
+
import {
|
|
14
|
+
html,
|
|
15
|
+
SpectrumElement
|
|
16
|
+
} from "@spectrum-web-components/base";
|
|
17
|
+
import {
|
|
18
|
+
property,
|
|
19
|
+
query,
|
|
20
|
+
queryAssignedElements,
|
|
21
|
+
state
|
|
22
|
+
} from "@spectrum-web-components/base/src/decorators.js";
|
|
23
|
+
import { conditionAttributeWithId } from "@spectrum-web-components/base/src/condition-attribute-with-id.js";
|
|
24
|
+
import {
|
|
25
|
+
ElementResolutionController,
|
|
26
|
+
elementResolverUpdatedSymbol
|
|
27
|
+
} from "@spectrum-web-components/reactive-controllers/src/ElementResolution.js";
|
|
28
|
+
import {
|
|
29
|
+
ifDefined,
|
|
30
|
+
styleMap
|
|
31
|
+
} from "@spectrum-web-components/base/src/directives.js";
|
|
32
|
+
import styles from "./overlay-base.css.js";
|
|
33
|
+
import { overlayStack } from "./OverlayStack.dev.js";
|
|
34
|
+
import { PlacementController } from "./PlacementController.dev.js";
|
|
35
|
+
const LONGPRESS_DURATION = 300;
|
|
36
|
+
export const LONGPRESS_INSTRUCTIONS = {
|
|
37
|
+
touch: "Double tap and long press for additional options",
|
|
38
|
+
keyboard: "Press Space or Alt+Down Arrow for additional options",
|
|
39
|
+
mouse: "Click and hold for additional options"
|
|
40
|
+
};
|
|
41
|
+
export class BeforetoggleClosedEvent extends Event {
|
|
42
|
+
constructor() {
|
|
43
|
+
super("beforetoggle", {
|
|
44
|
+
bubbles: false,
|
|
45
|
+
composed: false
|
|
46
|
+
});
|
|
47
|
+
this.currentState = "open";
|
|
48
|
+
this.newState = "closed";
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export class BeforetoggleOpenEvent extends Event {
|
|
52
|
+
constructor() {
|
|
53
|
+
super("beforetoggle", {
|
|
54
|
+
bubbles: false,
|
|
55
|
+
composed: false
|
|
56
|
+
});
|
|
57
|
+
this.currentState = "closed";
|
|
58
|
+
this.newState = "open";
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const _OverlayBase = class extends SpectrumElement {
|
|
62
|
+
constructor() {
|
|
63
|
+
super(...arguments);
|
|
64
|
+
this._disabled = false;
|
|
65
|
+
this.longpressed = false;
|
|
66
|
+
this.offset = 6;
|
|
67
|
+
this.placementController = new PlacementController(this);
|
|
68
|
+
this._open = false;
|
|
69
|
+
this.receivesFocus = "auto";
|
|
70
|
+
this.releaseAriaDescribedby = () => {
|
|
71
|
+
return;
|
|
72
|
+
};
|
|
73
|
+
this.triggerElement = null;
|
|
74
|
+
this.type = "hint";
|
|
75
|
+
this.wasOpen = false;
|
|
76
|
+
this.elementResolver = new ElementResolutionController(this);
|
|
77
|
+
this.handlePointerdown = (event) => {
|
|
78
|
+
if (!this.triggerElement)
|
|
79
|
+
return;
|
|
80
|
+
if (event.button !== 0)
|
|
81
|
+
return;
|
|
82
|
+
const triggerElement = this.triggerElement;
|
|
83
|
+
this.longpressed = false;
|
|
84
|
+
triggerElement.addEventListener("pointerup", this.handlePointerup);
|
|
85
|
+
triggerElement.addEventListener("pointercancel", this.handlePointerup);
|
|
86
|
+
this.longressTimeout = setTimeout(() => {
|
|
87
|
+
if (!triggerElement)
|
|
88
|
+
return;
|
|
89
|
+
triggerElement.dispatchEvent(
|
|
90
|
+
new CustomEvent("longpress", {
|
|
91
|
+
bubbles: true,
|
|
92
|
+
composed: true,
|
|
93
|
+
detail: {
|
|
94
|
+
source: "pointer"
|
|
95
|
+
}
|
|
96
|
+
})
|
|
97
|
+
);
|
|
98
|
+
}, LONGPRESS_DURATION);
|
|
99
|
+
};
|
|
100
|
+
this.handlePointerup = () => {
|
|
101
|
+
clearTimeout(this.longressTimeout);
|
|
102
|
+
if (!this.triggerElement)
|
|
103
|
+
return;
|
|
104
|
+
if (this.longpressed) {
|
|
105
|
+
this.open = true;
|
|
106
|
+
}
|
|
107
|
+
setTimeout(() => {
|
|
108
|
+
this.longpressed = false;
|
|
109
|
+
});
|
|
110
|
+
const triggerElement = this.triggerElement;
|
|
111
|
+
triggerElement.removeEventListener("pointerup", this.handlePointerup);
|
|
112
|
+
triggerElement.removeEventListener(
|
|
113
|
+
"pointercancel",
|
|
114
|
+
this.handlePointerup
|
|
115
|
+
);
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* @private
|
|
119
|
+
*/
|
|
120
|
+
this.handleKeydown = (event) => {
|
|
121
|
+
const { code, altKey } = event;
|
|
122
|
+
if (code === "Space" || altKey && code === "ArrowDown") {
|
|
123
|
+
if (code === "ArrowDown") {
|
|
124
|
+
event.stopPropagation();
|
|
125
|
+
event.stopImmediatePropagation();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
this.handleKeyup = (event) => {
|
|
130
|
+
const { code, altKey } = event;
|
|
131
|
+
if (code === "Space" || altKey && code === "ArrowDown") {
|
|
132
|
+
event.stopPropagation();
|
|
133
|
+
this.dispatchEvent(
|
|
134
|
+
new CustomEvent("longpress", {
|
|
135
|
+
bubbles: true,
|
|
136
|
+
composed: true,
|
|
137
|
+
detail: {
|
|
138
|
+
source: "keyboard"
|
|
139
|
+
}
|
|
140
|
+
})
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
this.handleClick = () => {
|
|
145
|
+
if (this.longpressed)
|
|
146
|
+
return;
|
|
147
|
+
this.open = !this.open;
|
|
148
|
+
};
|
|
149
|
+
this.focusedin = false;
|
|
150
|
+
this.handleFocusin = () => {
|
|
151
|
+
this.open = true;
|
|
152
|
+
this.focusedin = true;
|
|
153
|
+
};
|
|
154
|
+
this.handleFocusout = () => {
|
|
155
|
+
this.focusedin = false;
|
|
156
|
+
if (this.pointerentered)
|
|
157
|
+
return;
|
|
158
|
+
this.open = false;
|
|
159
|
+
};
|
|
160
|
+
this.pointerentered = false;
|
|
161
|
+
this.handlePointerenter = () => {
|
|
162
|
+
this.open = true;
|
|
163
|
+
this.pointerentered = true;
|
|
164
|
+
};
|
|
165
|
+
this.handlePointerleave = () => {
|
|
166
|
+
this.pointerentered = false;
|
|
167
|
+
const triggerElement = this.triggerElement;
|
|
168
|
+
if (this.focusedin && triggerElement.matches(":focus-visible"))
|
|
169
|
+
return;
|
|
170
|
+
this.open = false;
|
|
171
|
+
};
|
|
172
|
+
this.handleLongpress = () => {
|
|
173
|
+
this.open = true;
|
|
174
|
+
this.longpressed = true;
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
get disabled() {
|
|
178
|
+
return this._disabled;
|
|
179
|
+
}
|
|
180
|
+
set disabled(disabled) {
|
|
181
|
+
this._disabled = disabled;
|
|
182
|
+
if (disabled) {
|
|
183
|
+
this.wasOpen = this.open;
|
|
184
|
+
this.open = false;
|
|
185
|
+
} else {
|
|
186
|
+
this.open = this.open || this.wasOpen;
|
|
187
|
+
this.wasOpen = false;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
get open() {
|
|
191
|
+
return this._open;
|
|
192
|
+
}
|
|
193
|
+
set open(open) {
|
|
194
|
+
if (open && this.disabled)
|
|
195
|
+
return;
|
|
196
|
+
if (open === this.open)
|
|
197
|
+
return;
|
|
198
|
+
this._open = open;
|
|
199
|
+
this.requestUpdate("open", !this.open);
|
|
200
|
+
}
|
|
201
|
+
get usesDialog() {
|
|
202
|
+
return this.type === "modal" || this.type === "page";
|
|
203
|
+
}
|
|
204
|
+
get popoverValue() {
|
|
205
|
+
switch (this.type) {
|
|
206
|
+
case "modal":
|
|
207
|
+
case "page":
|
|
208
|
+
return void 0;
|
|
209
|
+
case "hint":
|
|
210
|
+
return "manual";
|
|
211
|
+
default:
|
|
212
|
+
return this.type;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
manageChildren(open) {
|
|
216
|
+
const eventName = open ? "sp-opened" : "sp-closed";
|
|
217
|
+
let announced = false;
|
|
218
|
+
this.elements.forEach((el) => {
|
|
219
|
+
if (typeof el.open !== "undefined") {
|
|
220
|
+
el.open = open;
|
|
221
|
+
el.dispatchEvent(
|
|
222
|
+
new Event(eventName, {
|
|
223
|
+
bubbles: false,
|
|
224
|
+
composed: false
|
|
225
|
+
})
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
if (!announced) {
|
|
229
|
+
this.dispatchEvent(
|
|
230
|
+
new Event(eventName, {
|
|
231
|
+
bubbles: true,
|
|
232
|
+
composed: true
|
|
233
|
+
})
|
|
234
|
+
);
|
|
235
|
+
announced = true;
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
async manageDialogOpen() {
|
|
240
|
+
console.warn(
|
|
241
|
+
"Implement the `manageDialogOpen` method in a class extension."
|
|
242
|
+
);
|
|
243
|
+
}
|
|
244
|
+
async managePopoverOpen() {
|
|
245
|
+
console.warn(
|
|
246
|
+
"Implement the `managePopoverOpen` method in a class extension."
|
|
247
|
+
);
|
|
248
|
+
}
|
|
249
|
+
get requiresPosition() {
|
|
250
|
+
if (this.type === "page" || !this.open)
|
|
251
|
+
return false;
|
|
252
|
+
if (!this.triggerElement || !this.placement && this.type !== "hint")
|
|
253
|
+
return false;
|
|
254
|
+
return true;
|
|
255
|
+
}
|
|
256
|
+
managePosition() {
|
|
257
|
+
if (!this.requiresPosition)
|
|
258
|
+
return;
|
|
259
|
+
const offset = this.offset || 0;
|
|
260
|
+
const trigger = this.triggerElement;
|
|
261
|
+
const placement = this.placement || "right";
|
|
262
|
+
this.placementController.placeOverlay(this.dialogEl, {
|
|
263
|
+
// delayed?: boolean,
|
|
264
|
+
offset,
|
|
265
|
+
placement,
|
|
266
|
+
// notImmediatelyClosable?: boolean, // rename or place behind other API options
|
|
267
|
+
// receivesFocus?: 'auto';
|
|
268
|
+
// root?: HTMLElement;
|
|
269
|
+
trigger,
|
|
270
|
+
type: this.type
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
async manageOpen() {
|
|
274
|
+
var _a;
|
|
275
|
+
if (!this.isConnected)
|
|
276
|
+
return;
|
|
277
|
+
if (!this.hasUpdated) {
|
|
278
|
+
await this.updateComplete;
|
|
279
|
+
}
|
|
280
|
+
if (this.open) {
|
|
281
|
+
overlayStack.add(this);
|
|
282
|
+
} else {
|
|
283
|
+
overlayStack.remove(this);
|
|
284
|
+
}
|
|
285
|
+
if (this.usesDialog) {
|
|
286
|
+
this.manageDialogOpen();
|
|
287
|
+
} else {
|
|
288
|
+
this.managePopoverOpen();
|
|
289
|
+
}
|
|
290
|
+
if (this.open) {
|
|
291
|
+
_OverlayBase.openCount += 1;
|
|
292
|
+
} else {
|
|
293
|
+
const getAncestors = () => {
|
|
294
|
+
var _a2;
|
|
295
|
+
const ancestors = [];
|
|
296
|
+
let currentNode = document.activeElement;
|
|
297
|
+
while ((currentNode == null ? void 0 : currentNode.shadowRoot) && currentNode.shadowRoot.activeElement) {
|
|
298
|
+
currentNode = currentNode.shadowRoot.activeElement;
|
|
299
|
+
}
|
|
300
|
+
while (currentNode) {
|
|
301
|
+
const ancestor = currentNode.assignedSlot || currentNode.parentElement || ((_a2 = currentNode.getRootNode()) == null ? void 0 : _a2.host);
|
|
302
|
+
if (ancestor) {
|
|
303
|
+
ancestors.push(ancestor);
|
|
304
|
+
}
|
|
305
|
+
currentNode = ancestor;
|
|
306
|
+
}
|
|
307
|
+
return ancestors;
|
|
308
|
+
};
|
|
309
|
+
if (((_a = this.triggerElement) == null ? void 0 : _a.focus) && (this.contains(
|
|
310
|
+
this.getRootNode().activeElement
|
|
311
|
+
) || !!getAncestors().find((el) => el === this))) {
|
|
312
|
+
this.triggerElement.focus();
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
manageTriggerElement(triggerElement) {
|
|
317
|
+
if (triggerElement) {
|
|
318
|
+
triggerElement.removeEventListener("click", this.handleClick);
|
|
319
|
+
triggerElement.removeEventListener("focusin", this.handleFocusin);
|
|
320
|
+
triggerElement.removeEventListener("focusout", this.handleFocusout);
|
|
321
|
+
triggerElement.removeEventListener(
|
|
322
|
+
"pointerenter",
|
|
323
|
+
this.handlePointerenter
|
|
324
|
+
);
|
|
325
|
+
triggerElement.removeEventListener(
|
|
326
|
+
"pointerleave",
|
|
327
|
+
this.handlePointerleave
|
|
328
|
+
);
|
|
329
|
+
triggerElement.addEventListener(
|
|
330
|
+
"pointerdown",
|
|
331
|
+
this.handlePointerdown
|
|
332
|
+
);
|
|
333
|
+
triggerElement.removeEventListener("keydown", this.handleKeydown);
|
|
334
|
+
triggerElement.removeEventListener("keyup", this.handleKeyup);
|
|
335
|
+
triggerElement.removeEventListener(
|
|
336
|
+
"longpress",
|
|
337
|
+
this.handleLongpress
|
|
338
|
+
);
|
|
339
|
+
this.releaseAriaDescribedby();
|
|
340
|
+
}
|
|
341
|
+
if (!this.triggerElement || !!this.triggerElement.updateBoundingClientRect)
|
|
342
|
+
return;
|
|
343
|
+
const nextTriggerElement = this.triggerElement;
|
|
344
|
+
switch (this.triggerInteraction) {
|
|
345
|
+
case "click":
|
|
346
|
+
nextTriggerElement.addEventListener("click", this.handleClick);
|
|
347
|
+
return;
|
|
348
|
+
case "longpress":
|
|
349
|
+
nextTriggerElement.addEventListener(
|
|
350
|
+
"pointerdown",
|
|
351
|
+
this.handlePointerdown
|
|
352
|
+
);
|
|
353
|
+
nextTriggerElement.addEventListener(
|
|
354
|
+
"keydown",
|
|
355
|
+
this.handleKeydown
|
|
356
|
+
);
|
|
357
|
+
nextTriggerElement.addEventListener("keyup", this.handleKeyup);
|
|
358
|
+
nextTriggerElement.addEventListener(
|
|
359
|
+
"longpress",
|
|
360
|
+
this.handleLongpress
|
|
361
|
+
);
|
|
362
|
+
return;
|
|
363
|
+
case "hover":
|
|
364
|
+
nextTriggerElement.addEventListener(
|
|
365
|
+
"focusin",
|
|
366
|
+
this.handleFocusin
|
|
367
|
+
);
|
|
368
|
+
nextTriggerElement.addEventListener(
|
|
369
|
+
"focusout",
|
|
370
|
+
this.handleFocusout
|
|
371
|
+
);
|
|
372
|
+
nextTriggerElement.addEventListener(
|
|
373
|
+
"pointerenter",
|
|
374
|
+
this.handlePointerenter
|
|
375
|
+
);
|
|
376
|
+
nextTriggerElement.addEventListener(
|
|
377
|
+
"pointerleave",
|
|
378
|
+
this.handlePointerleave
|
|
379
|
+
);
|
|
380
|
+
if (this.receivesFocus === "true")
|
|
381
|
+
return;
|
|
382
|
+
const releaseAriaDescribedby = conditionAttributeWithId(
|
|
383
|
+
nextTriggerElement,
|
|
384
|
+
"aria-describedby",
|
|
385
|
+
[this.id]
|
|
386
|
+
);
|
|
387
|
+
this.releaseAriaDescribedby = () => {
|
|
388
|
+
releaseAriaDescribedby();
|
|
389
|
+
this.releaseAriaDescribedby = () => {
|
|
390
|
+
return;
|
|
391
|
+
};
|
|
392
|
+
};
|
|
393
|
+
return;
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
handleBeforetoggle({
|
|
397
|
+
newState: open
|
|
398
|
+
}) {
|
|
399
|
+
if (open === "open") {
|
|
400
|
+
this.handlePopovershow();
|
|
401
|
+
} else {
|
|
402
|
+
this.handlePopoverhide();
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
handlePopoverhide() {
|
|
406
|
+
this.open = false;
|
|
407
|
+
this.dispatchEvent(new BeforetoggleClosedEvent());
|
|
408
|
+
}
|
|
409
|
+
handlePopovershow() {
|
|
410
|
+
this.dispatchEvent(new BeforetoggleOpenEvent());
|
|
411
|
+
}
|
|
412
|
+
willUpdate(changes) {
|
|
413
|
+
var _a;
|
|
414
|
+
if (!this.hasAttribute("id")) {
|
|
415
|
+
this.setAttribute(
|
|
416
|
+
"id",
|
|
417
|
+
`${this.tagName.toLowerCase()}-${crypto.randomUUID().slice(0, 8)}`
|
|
418
|
+
);
|
|
419
|
+
}
|
|
420
|
+
if (changes.has("open") && (typeof changes.get("open") !== "undefined" || this.open)) {
|
|
421
|
+
this.manageOpen();
|
|
422
|
+
}
|
|
423
|
+
if (changes.has("trigger")) {
|
|
424
|
+
const [id, interaction] = ((_a = this.trigger) == null ? void 0 : _a.split("@")) || [];
|
|
425
|
+
this.elementResolver.selector = id ? `#${id}` : "";
|
|
426
|
+
this.triggerInteraction = interaction;
|
|
427
|
+
}
|
|
428
|
+
const oldTrigger = this.triggerElement;
|
|
429
|
+
if (changes.has(elementResolverUpdatedSymbol)) {
|
|
430
|
+
this.triggerElement = this.elementResolver.element;
|
|
431
|
+
this.manageTriggerElement(oldTrigger);
|
|
432
|
+
}
|
|
433
|
+
if (changes.has("triggerElement")) {
|
|
434
|
+
this.manageTriggerElement(changes.get("triggerElement"));
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
updated(changes) {
|
|
438
|
+
super.updated(changes);
|
|
439
|
+
if (changes.has("placement")) {
|
|
440
|
+
if (this.placement) {
|
|
441
|
+
this.dialogEl.setAttribute("actual-placement", this.placement);
|
|
442
|
+
} else {
|
|
443
|
+
this.dialogEl.removeAttribute("actual-placement");
|
|
444
|
+
}
|
|
445
|
+
if (typeof changes.get("placement") !== "undefined") {
|
|
446
|
+
this.managePosition();
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
render() {
|
|
451
|
+
const hasPopoverAttribute = "popover" in this;
|
|
452
|
+
const popoverValue = hasPopoverAttribute ? this.popoverValue : void 0;
|
|
453
|
+
return html`
|
|
454
|
+
<dialog
|
|
455
|
+
part="dialog"
|
|
456
|
+
popover=${ifDefined(popoverValue)}
|
|
457
|
+
@close=${() => {
|
|
458
|
+
this.open = false;
|
|
459
|
+
}}
|
|
460
|
+
@cancel=${() => {
|
|
461
|
+
this.open = false;
|
|
462
|
+
}}
|
|
463
|
+
@beforetoggle=${this.handleBeforetoggle}
|
|
464
|
+
@popovershow=${this.handlePopovershow}
|
|
465
|
+
style=${styleMap({
|
|
466
|
+
"--swc-overlay-z-index": _OverlayBase.openCount.toString()
|
|
467
|
+
})}
|
|
468
|
+
>
|
|
469
|
+
<div part="content">
|
|
470
|
+
<slot></slot>
|
|
471
|
+
</div>
|
|
472
|
+
</dialog>
|
|
473
|
+
`;
|
|
474
|
+
}
|
|
475
|
+
connectedCallback() {
|
|
476
|
+
super.connectedCallback();
|
|
477
|
+
this.addEventListener("close", () => {
|
|
478
|
+
this.open = false;
|
|
479
|
+
});
|
|
480
|
+
}
|
|
481
|
+
};
|
|
482
|
+
export let OverlayBase = _OverlayBase;
|
|
483
|
+
OverlayBase.styles = [styles];
|
|
484
|
+
OverlayBase.openCount = 1;
|
|
485
|
+
__decorateClass([
|
|
486
|
+
query("dialog")
|
|
487
|
+
], OverlayBase.prototype, "dialogEl", 2);
|
|
488
|
+
__decorateClass([
|
|
489
|
+
property({ type: Boolean })
|
|
490
|
+
], OverlayBase.prototype, "disabled", 1);
|
|
491
|
+
__decorateClass([
|
|
492
|
+
queryAssignedElements({ flatten: true })
|
|
493
|
+
], OverlayBase.prototype, "elements", 2);
|
|
494
|
+
__decorateClass([
|
|
495
|
+
property()
|
|
496
|
+
], OverlayBase.prototype, "offset", 2);
|
|
497
|
+
__decorateClass([
|
|
498
|
+
property({ type: Boolean, reflect: true })
|
|
499
|
+
], OverlayBase.prototype, "open", 1);
|
|
500
|
+
__decorateClass([
|
|
501
|
+
property()
|
|
502
|
+
], OverlayBase.prototype, "placement", 2);
|
|
503
|
+
__decorateClass([
|
|
504
|
+
property({ attribute: "receives-focus" })
|
|
505
|
+
], OverlayBase.prototype, "receivesFocus", 2);
|
|
506
|
+
__decorateClass([
|
|
507
|
+
query("slot")
|
|
508
|
+
], OverlayBase.prototype, "slotEl", 2);
|
|
509
|
+
__decorateClass([
|
|
510
|
+
property()
|
|
511
|
+
], OverlayBase.prototype, "trigger", 2);
|
|
512
|
+
__decorateClass([
|
|
513
|
+
state()
|
|
514
|
+
], OverlayBase.prototype, "triggerElement", 2);
|
|
515
|
+
__decorateClass([
|
|
516
|
+
state()
|
|
517
|
+
], OverlayBase.prototype, "triggerInteraction", 2);
|
|
518
|
+
__decorateClass([
|
|
519
|
+
property()
|
|
520
|
+
], OverlayBase.prototype, "type", 2);
|
|
521
|
+
//# sourceMappingURL=OverlayBase.dev.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 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 { 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 type { 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'\n\nexport type OpenableElement = HTMLElement & {\n open: boolean;\n tipElement?: HTMLElement;\n updateComplete?: Promise<void>;\n};\n\nexport type OverlayTypes = 'auto' | 'hint' | 'manual' | 'modal' | 'page';\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 class OverlayBase extends SpectrumElement {\n static override styles = [styles];\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 @queryAssignedElements({ flatten: true })\n elements!: OpenableElement[];\n\n public parentOverlayToForceClose?: OverlayBase;\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 = (): void => {\n return;\n };\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 protected manageChildren(open: boolean): void {\n const eventName = open ? 'sp-opened' : 'sp-closed';\n let announced = false;\n this.elements.forEach((el) => {\n if (typeof el.open !== 'undefined') {\n el.open = open;\n el.dispatchEvent(\n new Event(eventName, {\n bubbles: false,\n composed: false,\n })\n );\n }\n if (!announced) {\n this.dispatchEvent(\n new Event(eventName, {\n bubbles: true,\n composed: true,\n })\n );\n announced = true;\n }\n });\n }\n\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) 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(): Promise<void> {\n if (!this.isConnected) return;\n\n if (!this.hasUpdated) {\n await this.updateComplete;\n }\n\n if (this.open) {\n overlayStack.add(this);\n } else {\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 // this.manageChildren(this.open);\n // this.managePosition();\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 manageTriggerElement(triggerElement: HTMLElement | null): void {\n if (triggerElement) {\n triggerElement.removeEventListener('click', this.handleClick);\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 triggerElement.addEventListener(\n 'pointerdown',\n this.handlePointerdown\n );\n triggerElement.removeEventListener('keydown', this.handleKeydown);\n triggerElement.removeEventListener('keyup', this.handleKeyup);\n triggerElement.removeEventListener(\n 'longpress',\n this.handleLongpress\n );\n this.releaseAriaDescribedby();\n }\n if (\n !this.triggerElement ||\n !!(this.triggerElement as VirtualTrigger).updateBoundingClientRect\n )\n return;\n const nextTriggerElement = this.triggerElement as HTMLElement;\n switch (this.triggerInteraction) {\n case 'click':\n nextTriggerElement.addEventListener('click', this.handleClick);\n return;\n case 'longpress':\n nextTriggerElement.addEventListener(\n 'pointerdown',\n this.handlePointerdown\n );\n nextTriggerElement.addEventListener(\n 'keydown',\n this.handleKeydown\n );\n nextTriggerElement.addEventListener('keyup', this.handleKeyup);\n nextTriggerElement.addEventListener(\n 'longpress',\n this.handleLongpress\n );\n return;\n case 'hover':\n nextTriggerElement.addEventListener(\n 'focusin',\n this.handleFocusin\n );\n nextTriggerElement.addEventListener(\n 'focusout',\n this.handleFocusout\n );\n nextTriggerElement.addEventListener(\n 'pointerenter',\n this.handlePointerenter\n );\n nextTriggerElement.addEventListener(\n 'pointerleave',\n this.handlePointerleave\n );\n if (this.receivesFocus === 'true') return;\n\n const releaseAriaDescribedby = conditionAttributeWithId(\n nextTriggerElement,\n 'aria-describedby',\n [this.id]\n );\n this.releaseAriaDescribedby = () => {\n releaseAriaDescribedby();\n this.releaseAriaDescribedby = () => {\n return;\n };\n };\n return;\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 protected handleClick = (): void => {\n if (this.longpressed) return;\n this.open = !this.open;\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 = (): 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({\n newState: open,\n }: Event & { newState: string }): void {\n if (open === 'open') {\n this.handlePopovershow();\n } else {\n this.handlePopoverhide();\n }\n }\n\n protected handlePopoverhide(): void {\n this.open = false;\n this.dispatchEvent(new BeforetoggleClosedEvent());\n // const triggerElement = this.triggerElement as HTMLElement;\n // if (this.triggerInteraction === 'click') {\n // requestAnimationFrame(() => {\n // triggerElement.addEventListener('click', this.handleClick);\n // });\n // }\n }\n\n protected handlePopovershow(): void {\n this.dispatchEvent(new BeforetoggleOpenEvent());\n }\n\n override willUpdate(changes: PropertyValues): void {\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();\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 (typeof changes.get('placement') !== 'undefined') {\n this.managePosition();\n }\n }\n }\n\n public override render(): TemplateResult {\n const hasPopoverAttribute = 'popover' in this;\n const popoverValue = hasPopoverAttribute\n ? this.popoverValue\n : undefined;\n return html`\n <dialog\n part=\"dialog\"\n popover=${ifDefined(popoverValue)}\n @close=${() => {\n this.open = false;\n }}\n @cancel=${() => {\n this.open = false;\n }}\n @beforetoggle=${this.handleBeforetoggle}\n @popovershow=${this.handlePopovershow}\n style=${styleMap({\n '--swc-overlay-z-index': OverlayBase.openCount.toString(),\n })}\n >\n <div part=\"content\">\n <slot></slot>\n </div>\n </dialog>\n `;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n // this.manageOpen();\n this.addEventListener('close', () => {\n this.open = false;\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["_a"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";var m=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var i=(l,r,e,t)=>{for(var o=t>1?void 0:t?g(r,e):r,n=l.length-1,s;n>=0;n--)(s=l[n])&&(o=(t?s(r,e,o):s(o))||o);return t&&o&&m(r,e,o),o};import{html as v,SpectrumElement as f}from"@spectrum-web-components/base";import{property as a,query as h,queryAssignedElements as E,state as c}from"@spectrum-web-components/base/src/decorators.js";import{conditionAttributeWithId as b}from"@spectrum-web-components/base/src/condition-attribute-with-id.js";import{ElementResolutionController as w,elementResolverUpdatedSymbol as y}from"@spectrum-web-components/reactive-controllers/src/ElementResolution.js";import{ifDefined as L,styleMap as P}from"@spectrum-web-components/base/src/directives.js";import T from"./overlay-base.css.js";import{overlayStack as u}from"./OverlayStack.js";import{PlacementController as C}from"./PlacementController.js";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"}}const p=class extends f{constructor(){super(...arguments);this._disabled=!1;this.longpressed=!1;this.offset=6;this.placementController=new C(this);this._open=!1;this.receivesFocus="auto";this.releaseAriaDescribedby=()=>{};this.triggerElement=null;this.type="hint";this.wasOpen=!1;this.elementResolver=new w(this);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:o}=e;(t==="Space"||o&&t==="ArrowDown")&&t==="ArrowDown"&&(e.stopPropagation(),e.stopImmediatePropagation())};this.handleKeyup=e=>{const{code:t,altKey:o}=e;(t==="Space"||o&&t==="ArrowDown")&&(e.stopPropagation(),this.dispatchEvent(new CustomEvent("longpress",{bubbles:!0,composed:!0,detail:{source:"keyboard"}})))};this.handleClick=()=>{this.longpressed||(this.open=!this.open)};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=()=>{this.pointerentered=!1;const e=this.triggerElement;this.focusedin&&e.matches(":focus-visible")||(this.open=!1)};this.handleLongpress=()=>{this.open=!0,this.longpressed=!0}}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 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}}manageChildren(e){const t=e?"sp-opened":"sp-closed";let o=!1;this.elements.forEach(n=>{typeof n.open!="undefined"&&(n.open=e,n.dispatchEvent(new Event(t,{bubbles:!1,composed:!1}))),o||(this.dispatchEvent(new Event(t,{bubbles:!0,composed:!0})),o=!0)})}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)return;const e=this.offset||0,t=this.triggerElement,o=this.placement||"right";this.placementController.placeOverlay(this.dialogEl,{offset:e,placement:o,trigger:t,type:this.type})}async manageOpen(){var e;if(this.isConnected)if(this.hasUpdated||await this.updateComplete,this.open?u.add(this):u.remove(this),this.usesDialog?this.manageDialogOpen():this.managePopoverOpen(),this.open)p.openCount+=1;else{const t=()=>{var s;const o=[];let n=document.activeElement;for(;n!=null&&n.shadowRoot&&n.shadowRoot.activeElement;)n=n.shadowRoot.activeElement;for(;n;){const d=n.assignedSlot||n.parentElement||((s=n.getRootNode())==null?void 0:s.host);d&&o.push(d),n=d}return o};(e=this.triggerElement)!=null&&e.focus&&(this.contains(this.getRootNode().activeElement)||t().find(o=>o===this))&&this.triggerElement.focus()}}manageTriggerElement(e){if(e&&(e.removeEventListener("click",this.handleClick),e.removeEventListener("focusin",this.handleFocusin),e.removeEventListener("focusout",this.handleFocusout),e.removeEventListener("pointerenter",this.handlePointerenter),e.removeEventListener("pointerleave",this.handlePointerleave),e.addEventListener("pointerdown",this.handlePointerdown),e.removeEventListener("keydown",this.handleKeydown),e.removeEventListener("keyup",this.handleKeyup),e.removeEventListener("longpress",this.handleLongpress),this.releaseAriaDescribedby()),!this.triggerElement||this.triggerElement.updateBoundingClientRect)return;const t=this.triggerElement;switch(this.triggerInteraction){case"click":t.addEventListener("click",this.handleClick);return;case"longpress":t.addEventListener("pointerdown",this.handlePointerdown),t.addEventListener("keydown",this.handleKeydown),t.addEventListener("keyup",this.handleKeyup),t.addEventListener("longpress",this.handleLongpress);return;case"hover":if(t.addEventListener("focusin",this.handleFocusin),t.addEventListener("focusout",this.handleFocusout),t.addEventListener("pointerenter",this.handlePointerenter),t.addEventListener("pointerleave",this.handlePointerleave),this.receivesFocus==="true")return;const o=b(t,"aria-describedby",[this.id]);this.releaseAriaDescribedby=()=>{o(),this.releaseAriaDescribedby=()=>{}};return}}handleBeforetoggle({newState:e}){e==="open"?this.handlePopovershow():this.handlePopoverhide()}handlePopoverhide(){this.open=!1,this.dispatchEvent(new BeforetoggleClosedEvent)}handlePopovershow(){this.dispatchEvent(new BeforetoggleOpenEvent)}willUpdate(e){var o;if(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.has("trigger")){const[n,s]=((o=this.trigger)==null?void 0:o.split("@"))||[];this.elementResolver.selector=n?`#${n}`:"",this.triggerInteraction=s}const t=this.triggerElement;e.has(y)&&(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"),typeof e.get("placement")!="undefined"&&this.managePosition())}render(){const t="popover"in this?this.popoverValue:void 0;return v`
|
|
2
|
+
<dialog
|
|
3
|
+
part="dialog"
|
|
4
|
+
popover=${L(t)}
|
|
5
|
+
@close=${()=>{this.open=!1}}
|
|
6
|
+
@cancel=${()=>{this.open=!1}}
|
|
7
|
+
@beforetoggle=${this.handleBeforetoggle}
|
|
8
|
+
@popovershow=${this.handlePopovershow}
|
|
9
|
+
style=${P({"--swc-overlay-z-index":p.openCount.toString()})}
|
|
10
|
+
>
|
|
11
|
+
<div part="content">
|
|
12
|
+
<slot></slot>
|
|
13
|
+
</div>
|
|
14
|
+
</dialog>
|
|
15
|
+
`}connectedCallback(){super.connectedCallback(),this.addEventListener("close",()=>{this.open=!1})}};export let OverlayBase=p;OverlayBase.styles=[T],OverlayBase.openCount=1,i([h("dialog")],OverlayBase.prototype,"dialogEl",2),i([a({type:Boolean})],OverlayBase.prototype,"disabled",1),i([E({flatten:!0})],OverlayBase.prototype,"elements",2),i([a()],OverlayBase.prototype,"offset",2),i([a({type:Boolean,reflect:!0})],OverlayBase.prototype,"open",1),i([a()],OverlayBase.prototype,"placement",2),i([a({attribute:"receives-focus"})],OverlayBase.prototype,"receivesFocus",2),i([h("slot")],OverlayBase.prototype,"slotEl",2),i([a()],OverlayBase.prototype,"trigger",2),i([c()],OverlayBase.prototype,"triggerElement",2),i([c()],OverlayBase.prototype,"triggerInteraction",2),i([a()],OverlayBase.prototype,"type",2);
|
|
16
|
+
//# sourceMappingURL=OverlayBase.js.map
|