@spectrum-web-components/overlay 0.31.1-overlay.29 → 0.31.1-react.21

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.
Files changed (156) hide show
  1. package/active-overlay.d.ts +6 -0
  2. package/active-overlay.dev.js +5 -0
  3. package/{sp-overlay.dev.js.map → active-overlay.dev.js.map} +3 -3
  4. package/active-overlay.js +2 -0
  5. package/{sp-overlay.js.map → active-overlay.js.map} +4 -4
  6. package/custom-elements.json +1215 -0
  7. package/package.json +21 -50
  8. package/src/ActiveOverlay.d.ts +84 -0
  9. package/src/ActiveOverlay.dev.js +517 -0
  10. package/src/ActiveOverlay.dev.js.map +7 -0
  11. package/src/ActiveOverlay.js +16 -0
  12. package/src/ActiveOverlay.js.map +7 -0
  13. package/src/OverlayTrigger.d.ts +31 -23
  14. package/src/OverlayTrigger.dev.js +245 -135
  15. package/src/OverlayTrigger.dev.js.map +3 -3
  16. package/src/OverlayTrigger.js +22 -52
  17. package/src/OverlayTrigger.js.map +3 -3
  18. package/src/VirtualTrigger.dev.js +2 -0
  19. package/src/VirtualTrigger.dev.js.map +2 -2
  20. package/src/VirtualTrigger.js +1 -1
  21. package/src/VirtualTrigger.js.map +3 -3
  22. package/src/active-overlay.css.dev.js +13 -0
  23. package/src/active-overlay.css.dev.js.map +7 -0
  24. package/src/active-overlay.css.js +10 -0
  25. package/src/active-overlay.css.js.map +7 -0
  26. package/src/index.d.ts +3 -2
  27. package/src/index.dev.js +3 -2
  28. package/src/index.dev.js.map +2 -2
  29. package/src/index.js +1 -1
  30. package/src/index.js.map +2 -2
  31. package/src/loader.d.ts +2 -2
  32. package/src/loader.dev.js +19 -2
  33. package/src/loader.dev.js.map +2 -2
  34. package/src/loader.js +1 -1
  35. package/src/loader.js.map +3 -3
  36. package/src/overlay-stack.d.ts +50 -0
  37. package/src/overlay-stack.dev.js +514 -0
  38. package/src/overlay-stack.dev.js.map +7 -0
  39. package/src/overlay-stack.js +33 -0
  40. package/src/overlay-stack.js.map +7 -0
  41. package/src/overlay-trigger.css.dev.js +1 -1
  42. package/src/overlay-trigger.css.dev.js.map +1 -1
  43. package/src/overlay-trigger.css.js +1 -1
  44. package/src/overlay-trigger.css.js.map +1 -1
  45. package/src/overlay-types.d.ts +4 -6
  46. package/src/overlay-types.dev.js +0 -1
  47. package/src/overlay-types.dev.js.map +3 -3
  48. package/src/overlay-types.js +1 -1
  49. package/src/overlay-types.js.map +3 -3
  50. package/src/overlay-utils.d.ts +3 -0
  51. package/src/overlay-utils.dev.js +31 -0
  52. package/src/overlay-utils.dev.js.map +7 -0
  53. package/src/overlay-utils.js +2 -0
  54. package/src/overlay-utils.js.map +7 -0
  55. package/src/overlay.d.ts +59 -0
  56. package/src/overlay.dev.js +127 -0
  57. package/src/overlay.dev.js.map +7 -0
  58. package/src/overlay.js +2 -0
  59. package/src/overlay.js.map +7 -0
  60. package/stories/overlay-story-components.js +26 -24
  61. package/stories/overlay-story-components.js.map +2 -2
  62. package/stories/overlay.stories.js +730 -733
  63. package/stories/overlay.stories.js.map +2 -2
  64. package/sync/overlay-trigger.d.ts +0 -4
  65. package/sync/overlay-trigger.dev.js +4 -1
  66. package/sync/overlay-trigger.dev.js.map +2 -2
  67. package/sync/overlay-trigger.js +1 -1
  68. package/sync/overlay-trigger.js.map +3 -3
  69. package/test/benchmark/basic-test.js +1 -1
  70. package/test/benchmark/basic-test.js.map +1 -1
  71. package/test/index.js +428 -461
  72. package/test/index.js.map +3 -3
  73. package/test/overlay-lifecycle.test.js +106 -34
  74. package/test/overlay-lifecycle.test.js.map +2 -2
  75. package/test/overlay-trigger-click.test.js +5 -11
  76. package/test/overlay-trigger-click.test.js.map +2 -2
  77. package/test/overlay-trigger-extended.test.js +9 -3
  78. package/test/overlay-trigger-extended.test.js.map +2 -2
  79. package/test/overlay-trigger-hover-click.test.js +23 -23
  80. package/test/overlay-trigger-hover-click.test.js.map +2 -2
  81. package/test/overlay-trigger-hover.test.js +34 -40
  82. package/test/overlay-trigger-hover.test.js.map +2 -2
  83. package/test/overlay-trigger-longpress.test.js +80 -98
  84. package/test/overlay-trigger-longpress.test.js.map +2 -2
  85. package/test/overlay-trigger-sync.test.js +1 -1
  86. package/test/overlay-trigger-sync.test.js.map +2 -2
  87. package/test/overlay-trigger.test.js +1 -1
  88. package/test/overlay-trigger.test.js.map +2 -2
  89. package/test/overlay-update.test.js +4 -4
  90. package/test/overlay-update.test.js.map +2 -2
  91. package/test/overlay.test.js +237 -240
  92. package/test/overlay.test.js.map +3 -3
  93. package/sp-overlay.d.ts +0 -6
  94. package/sp-overlay.dev.js +0 -5
  95. package/sp-overlay.js +0 -2
  96. package/src/Overlay.d.ts +0 -28
  97. package/src/Overlay.dev.js +0 -88
  98. package/src/Overlay.dev.js.map +0 -7
  99. package/src/Overlay.js +0 -2
  100. package/src/Overlay.js.map +0 -7
  101. package/src/OverlayBase.d.ts +0 -122
  102. package/src/OverlayBase.dev.js +0 -701
  103. package/src/OverlayBase.dev.js.map +0 -7
  104. package/src/OverlayBase.js +0 -17
  105. package/src/OverlayBase.js.map +0 -7
  106. package/src/OverlayDialog.d.ts +0 -8
  107. package/src/OverlayDialog.dev.js +0 -160
  108. package/src/OverlayDialog.dev.js.map +0 -7
  109. package/src/OverlayDialog.js +0 -2
  110. package/src/OverlayDialog.js.map +0 -7
  111. package/src/OverlayNoPopover.d.ts +0 -8
  112. package/src/OverlayNoPopover.dev.js +0 -149
  113. package/src/OverlayNoPopover.dev.js.map +0 -7
  114. package/src/OverlayNoPopover.js +0 -2
  115. package/src/OverlayNoPopover.js.map +0 -7
  116. package/src/OverlayPopover.d.ts +0 -8
  117. package/src/OverlayPopover.dev.js +0 -199
  118. package/src/OverlayPopover.dev.js.map +0 -7
  119. package/src/OverlayPopover.js +0 -2
  120. package/src/OverlayPopover.js.map +0 -7
  121. package/src/OverlayStack.d.ts +0 -24
  122. package/src/OverlayStack.dev.js +0 -125
  123. package/src/OverlayStack.dev.js.map +0 -7
  124. package/src/OverlayStack.js +0 -2
  125. package/src/OverlayStack.js.map +0 -7
  126. package/src/PlacementController.d.ts +0 -36
  127. package/src/PlacementController.dev.js +0 -193
  128. package/src/PlacementController.dev.js.map +0 -7
  129. package/src/PlacementController.js +0 -2
  130. package/src/PlacementController.js.map +0 -7
  131. package/src/fullSizePlugin.d.ts +0 -12
  132. package/src/fullSizePlugin.dev.js +0 -39
  133. package/src/fullSizePlugin.dev.js.map +0 -7
  134. package/src/fullSizePlugin.js +0 -2
  135. package/src/fullSizePlugin.js.map +0 -7
  136. package/src/overlay-base.css.dev.js +0 -9
  137. package/src/overlay-base.css.dev.js.map +0 -7
  138. package/src/overlay-base.css.js +0 -6
  139. package/src/overlay-base.css.js.map +0 -7
  140. package/src/placement.d.ts +0 -21
  141. package/src/placement.dev.js +0 -111
  142. package/src/placement.dev.js.map +0 -7
  143. package/src/placement.js +0 -2
  144. package/src/placement.js.map +0 -7
  145. package/src/topLayerOverTransforms.d.ts +0 -22
  146. package/src/topLayerOverTransforms.dev.js +0 -165
  147. package/src/topLayerOverTransforms.dev.js.map +0 -7
  148. package/src/topLayerOverTransforms.js +0 -2
  149. package/src/topLayerOverTransforms.js.map +0 -7
  150. package/stories/overlay-element.stories.js +0 -247
  151. package/stories/overlay-element.stories.js.map +0 -7
  152. package/test/overlay-element.test-vrt.js +0 -5
  153. package/test/overlay-element.test-vrt.js.map +0 -7
  154. package/test/overlay-element.test.js +0 -664
  155. package/test/overlay-element.test.js.map +0 -7
  156. /package/src/{overlay-base.css.d.ts → active-overlay.css.d.ts} +0 -0
@@ -1,701 +0,0 @@
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 {
24
- isAndroid,
25
- isIOS
26
- } from "@spectrum-web-components/shared/src/platform.js";
27
- import { conditionAttributeWithId } from "@spectrum-web-components/base/src/condition-attribute-with-id.js";
28
- import {
29
- ElementResolutionController,
30
- elementResolverUpdatedSymbol
31
- } from "@spectrum-web-components/reactive-controllers/src/ElementResolution.js";
32
- import { VirtualTrigger } from "./VirtualTrigger.dev.js";
33
- import {
34
- ifDefined,
35
- styleMap
36
- } from "@spectrum-web-components/base/src/directives.js";
37
- import styles from "./overlay-base.css.js";
38
- import { overlayStack } from "./OverlayStack.dev.js";
39
- import { PlacementController } from "./PlacementController.dev.js";
40
- import { OverlayTimer } from "./overlay-timer.dev.js";
41
- export const overlayTimer = new OverlayTimer();
42
- const LONGPRESS_DURATION = 300;
43
- export const LONGPRESS_INSTRUCTIONS = {
44
- touch: "Double tap and long press for additional options",
45
- keyboard: "Press Space or Alt+Down Arrow for additional options",
46
- mouse: "Click and hold for additional options"
47
- };
48
- export class BeforetoggleClosedEvent extends Event {
49
- constructor() {
50
- super("beforetoggle", {
51
- bubbles: false,
52
- composed: false
53
- });
54
- this.currentState = "open";
55
- this.newState = "closed";
56
- }
57
- }
58
- export class BeforetoggleOpenEvent extends Event {
59
- constructor() {
60
- super("beforetoggle", {
61
- bubbles: false,
62
- composed: false
63
- });
64
- this.currentState = "closed";
65
- this.newState = "open";
66
- }
67
- }
68
- export const noop = () => {
69
- return;
70
- };
71
- export const guaranteedTransitionend = (el, action, cb) => {
72
- const cleanup = () => {
73
- el.removeEventListener("transitionrun", handleTransitionrun);
74
- el.removeEventListener("transitionend", handleTransitionend);
75
- cb();
76
- };
77
- let guarantee2;
78
- let guarantee3;
79
- const guarantee1 = requestAnimationFrame(() => {
80
- guarantee2 = requestAnimationFrame(() => {
81
- guarantee3 = requestAnimationFrame(() => {
82
- cleanup();
83
- });
84
- });
85
- });
86
- const handleTransitionend = (event) => {
87
- if (event.propertyName === "visibility") {
88
- return;
89
- }
90
- cleanup();
91
- };
92
- const handleTransitionrun = (event) => {
93
- if (event.propertyName === "visibility") {
94
- return;
95
- }
96
- cancelAnimationFrame(guarantee1);
97
- cancelAnimationFrame(guarantee2);
98
- cancelAnimationFrame(guarantee3);
99
- el.removeEventListener("transitionrun", handleTransitionrun);
100
- el.addEventListener("transitionend", handleTransitionend);
101
- };
102
- el.addEventListener("transitionrun", handleTransitionrun);
103
- action();
104
- };
105
- const _OverlayBase = class extends SpectrumElement {
106
- constructor() {
107
- super(...arguments);
108
- this.delayed = false;
109
- this._disabled = false;
110
- this.dispose = noop;
111
- this.longpressed = false;
112
- this.offset = 6;
113
- this.placementController = new PlacementController(this);
114
- this._open = false;
115
- this.receivesFocus = "auto";
116
- this.releaseAriaDescribedby = noop;
117
- this.releaseLongpressDescribedby = noop;
118
- this.triggerElement = null;
119
- this.type = "hint";
120
- this.wasOpen = false;
121
- this.elementResolver = new ElementResolutionController(this);
122
- this.elementIds = [];
123
- this.handlePointerdown = (event) => {
124
- if (!this.triggerElement)
125
- return;
126
- if (event.button !== 0)
127
- return;
128
- const triggerElement = this.triggerElement;
129
- this.longpressed = false;
130
- triggerElement.addEventListener("pointerup", this.handlePointerup);
131
- triggerElement.addEventListener("pointercancel", this.handlePointerup);
132
- this.longressTimeout = setTimeout(() => {
133
- if (!triggerElement)
134
- return;
135
- triggerElement.dispatchEvent(
136
- new CustomEvent("longpress", {
137
- bubbles: true,
138
- composed: true,
139
- detail: {
140
- source: "pointer"
141
- }
142
- })
143
- );
144
- }, LONGPRESS_DURATION);
145
- };
146
- this.handlePointerup = () => {
147
- clearTimeout(this.longressTimeout);
148
- if (!this.triggerElement)
149
- return;
150
- if (this.longpressed) {
151
- this.open = true;
152
- }
153
- setTimeout(() => {
154
- this.longpressed = false;
155
- });
156
- const triggerElement = this.triggerElement;
157
- triggerElement.removeEventListener("pointerup", this.handlePointerup);
158
- triggerElement.removeEventListener(
159
- "pointercancel",
160
- this.handlePointerup
161
- );
162
- };
163
- /**
164
- * @private
165
- */
166
- this.handleKeydown = (event) => {
167
- const { code, altKey } = event;
168
- if (code === "Space" || altKey && code === "ArrowDown") {
169
- if (code === "ArrowDown") {
170
- event.stopPropagation();
171
- event.stopImmediatePropagation();
172
- }
173
- }
174
- };
175
- this.handleKeyup = (event) => {
176
- const { code, altKey } = event;
177
- if (code === "Space" || altKey && code === "ArrowDown") {
178
- event.stopPropagation();
179
- this.dispatchEvent(
180
- new CustomEvent("longpress", {
181
- bubbles: true,
182
- composed: true,
183
- detail: {
184
- source: "keyboard"
185
- }
186
- })
187
- );
188
- }
189
- };
190
- this.preventNextToggle = false;
191
- this.handlePointerdownForClick = () => {
192
- this.preventNextToggle = this.open;
193
- };
194
- this.handleClick = () => {
195
- if (this.longpressed)
196
- return;
197
- if (!this.preventNextToggle) {
198
- this.open = !this.open;
199
- }
200
- this.preventNextToggle = false;
201
- };
202
- this.focusedin = false;
203
- this.handleFocusin = () => {
204
- this.open = true;
205
- this.focusedin = true;
206
- };
207
- this.handleFocusout = () => {
208
- this.focusedin = false;
209
- if (this.pointerentered)
210
- return;
211
- this.open = false;
212
- };
213
- this.pointerentered = false;
214
- this.handlePointerenter = () => {
215
- this.open = true;
216
- this.pointerentered = true;
217
- };
218
- this.handlePointerleave = (event) => {
219
- if (this === event.relatedTarget || this.contains(event.relatedTarget) || [...this.children].find((child) => {
220
- if (child.localName !== "slot") {
221
- return false;
222
- }
223
- return child.assignedElements({ flatten: true }).find((el) => {
224
- return el === event.relatedTarget || el.contains(event.relatedTarget);
225
- });
226
- })) {
227
- return;
228
- }
229
- this.doPointerleave();
230
- };
231
- this.handleOverlayPointerleave = (event) => {
232
- if (this.triggerElement === event.relatedTarget || this.hasNonVirtualTrigger && this.triggerElement.contains(
233
- event.relatedTarget
234
- )) {
235
- return;
236
- }
237
- this.doPointerleave();
238
- };
239
- this.handleLongpress = () => {
240
- this.open = true;
241
- this.longpressed = true;
242
- };
243
- this.willPreventClose = false;
244
- }
245
- get disabled() {
246
- return this._disabled;
247
- }
248
- set disabled(disabled) {
249
- this._disabled = disabled;
250
- if (disabled) {
251
- this.wasOpen = this.open;
252
- this.open = false;
253
- } else {
254
- this.open = this.open || this.wasOpen;
255
- this.wasOpen = false;
256
- }
257
- }
258
- get hasNonVirtualTrigger() {
259
- return !!this.triggerElement && !(this.triggerElement instanceof VirtualTrigger);
260
- }
261
- get open() {
262
- return this._open;
263
- }
264
- set open(open) {
265
- if (open && this.disabled)
266
- return;
267
- if (open === this.open)
268
- return;
269
- this._open = open;
270
- this.requestUpdate("open", !this.open);
271
- }
272
- get usesDialog() {
273
- return this.type === "modal" || this.type === "page";
274
- }
275
- get popoverValue() {
276
- switch (this.type) {
277
- case "modal":
278
- case "page":
279
- return void 0;
280
- case "hint":
281
- return "manual";
282
- default:
283
- return this.type;
284
- }
285
- }
286
- /* c8 ignore next 12 */
287
- async manageDialogOpen() {
288
- console.warn(
289
- "Implement the `manageDialogOpen` method in a class extension."
290
- );
291
- }
292
- async managePopoverOpen() {
293
- console.warn(
294
- "Implement the `managePopoverOpen` method in a class extension."
295
- );
296
- }
297
- get requiresPosition() {
298
- if (this.type === "page" || !this.open)
299
- return false;
300
- if (!this.triggerElement || !this.placement && this.type !== "hint")
301
- return false;
302
- return true;
303
- }
304
- managePosition() {
305
- if (!this.requiresPosition || !this.open)
306
- return;
307
- const offset = this.offset || 0;
308
- const trigger = this.triggerElement;
309
- const placement = this.placement || "right";
310
- this.placementController.placeOverlay(this.dialogEl, {
311
- // delayed?: boolean,
312
- offset,
313
- placement,
314
- // notImmediatelyClosable?: boolean, // rename or place behind other API options
315
- // receivesFocus?: 'auto';
316
- // root?: HTMLElement;
317
- trigger,
318
- type: this.type
319
- });
320
- }
321
- async manageOpen(oldOpen) {
322
- var _a;
323
- if (!this.isConnected && this.open)
324
- return;
325
- if (!this.hasUpdated) {
326
- await this.updateComplete;
327
- }
328
- if (this.open) {
329
- overlayStack.add(this);
330
- } else {
331
- if (oldOpen) {
332
- this.dispose();
333
- }
334
- overlayStack.remove(this);
335
- }
336
- if (this.usesDialog) {
337
- this.manageDialogOpen();
338
- } else {
339
- this.managePopoverOpen();
340
- }
341
- if (this.open) {
342
- _OverlayBase.openCount += 1;
343
- } else {
344
- const getAncestors = () => {
345
- var _a2;
346
- const ancestors = [];
347
- let currentNode = document.activeElement;
348
- while ((currentNode == null ? void 0 : currentNode.shadowRoot) && currentNode.shadowRoot.activeElement) {
349
- currentNode = currentNode.shadowRoot.activeElement;
350
- }
351
- while (currentNode) {
352
- const ancestor = currentNode.assignedSlot || currentNode.parentElement || ((_a2 = currentNode.getRootNode()) == null ? void 0 : _a2.host);
353
- if (ancestor) {
354
- ancestors.push(ancestor);
355
- }
356
- currentNode = ancestor;
357
- }
358
- return ancestors;
359
- };
360
- if (((_a = this.triggerElement) == null ? void 0 : _a.focus) && (this.contains(
361
- this.getRootNode().activeElement
362
- ) || !!getAncestors().find((el) => el === this))) {
363
- this.triggerElement.focus();
364
- }
365
- }
366
- }
367
- unbindEvents(triggerElement) {
368
- triggerElement.removeEventListener("click", this.handleClick);
369
- triggerElement.removeEventListener(
370
- "pointerdown",
371
- this.handlePointerdownForClick
372
- );
373
- triggerElement.removeEventListener("focusin", this.handleFocusin);
374
- triggerElement.removeEventListener("focusout", this.handleFocusout);
375
- triggerElement.removeEventListener(
376
- "pointerenter",
377
- this.handlePointerenter
378
- );
379
- triggerElement.removeEventListener(
380
- "pointerleave",
381
- this.handlePointerleave
382
- );
383
- this.removeEventListener(
384
- "pointerleave",
385
- this.handleOverlayPointerleave
386
- );
387
- triggerElement.addEventListener("pointerdown", this.handlePointerdown);
388
- triggerElement.removeEventListener("keydown", this.handleKeydown);
389
- triggerElement.removeEventListener("keyup", this.handleKeyup);
390
- triggerElement.removeEventListener("longpress", this.handleLongpress);
391
- }
392
- bindEvents() {
393
- const nextTriggerElement = this.triggerElement;
394
- switch (this.triggerInteraction) {
395
- case "click":
396
- this.bundClickEvents(nextTriggerElement);
397
- return;
398
- case "longpress":
399
- this.bindLongpressEvents(nextTriggerElement);
400
- return;
401
- case "hover":
402
- this.bindHoverEvents(nextTriggerElement);
403
- return;
404
- }
405
- }
406
- bundClickEvents(triggerElement) {
407
- triggerElement.addEventListener("click", this.handleClick);
408
- triggerElement.addEventListener(
409
- "pointerdown",
410
- this.handlePointerdownForClick
411
- );
412
- }
413
- bindLongpressEvents(triggerElement) {
414
- triggerElement.addEventListener("pointerdown", this.handlePointerdown);
415
- triggerElement.addEventListener("keydown", this.handleKeydown);
416
- triggerElement.addEventListener("keyup", this.handleKeyup);
417
- triggerElement.addEventListener("longpress", this.handleLongpress);
418
- this.prepareLongpressDescription(triggerElement);
419
- }
420
- bindHoverEvents(triggerElement) {
421
- triggerElement.addEventListener("focusin", this.handleFocusin);
422
- triggerElement.addEventListener("focusout", this.handleFocusout);
423
- triggerElement.addEventListener(
424
- "pointerenter",
425
- this.handlePointerenter
426
- );
427
- triggerElement.addEventListener(
428
- "pointerleave",
429
- this.handlePointerleave
430
- );
431
- this.addEventListener("pointerleave", this.handleOverlayPointerleave);
432
- if (this.receivesFocus === "true")
433
- return;
434
- this.prepareAriaDescribedby(triggerElement);
435
- }
436
- manageTriggerElement(triggerElement) {
437
- if (triggerElement) {
438
- this.unbindEvents(triggerElement);
439
- this.releaseAriaDescribedby();
440
- }
441
- if (!this.triggerElement || !!this.triggerElement.updateBoundingClientRect) {
442
- return;
443
- }
444
- this.bindEvents();
445
- }
446
- prepareLongpressDescription(trigger) {
447
- if (
448
- // only "longpress" relationships are described this way
449
- this.triggerInteraction !== "longpress" || // do not reapply until target it recycled
450
- this.releaseLongpressDescribedby !== noop || // require "longpress content" to apply relationship
451
- !this.elements.length
452
- ) {
453
- return;
454
- }
455
- const longpressDescription = document.createElement("div");
456
- longpressDescription.id = `longpress-describedby-descriptor-${crypto.randomUUID().slice(0, 8)}`;
457
- const messageType = isIOS() || isAndroid() ? "touch" : "keyboard";
458
- longpressDescription.textContent = LONGPRESS_INSTRUCTIONS[messageType];
459
- longpressDescription.slot = "longpress-describedby-descriptor";
460
- trigger.insertAdjacentElement("afterend", longpressDescription);
461
- const releaseLongpressDescribedby = conditionAttributeWithId(
462
- trigger,
463
- "aria-describedby",
464
- [longpressDescription.id]
465
- );
466
- this.releaseLongpressDescribedby = () => {
467
- releaseLongpressDescribedby();
468
- longpressDescription.remove();
469
- this.releaseLongpressDescribedby = noop;
470
- };
471
- }
472
- prepareAriaDescribedby(trigger) {
473
- if (
474
- // only "hover" relationships establed described by content
475
- this.triggerInteraction !== "hover" || // do not reapply until target is recycled
476
- this.releaseAriaDescribedby !== noop || // require "hover content" to apply relationship
477
- !this.elements.length
478
- ) {
479
- return;
480
- }
481
- const triggerRoot = trigger.getRootNode();
482
- const contentRoot = this.elements[0].getRootNode();
483
- const overlayRoot = this.getRootNode();
484
- if (triggerRoot == overlayRoot) {
485
- const releaseAriaDescribedby = conditionAttributeWithId(
486
- trigger,
487
- "aria-describedby",
488
- [this.id]
489
- );
490
- this.releaseAriaDescribedby = () => {
491
- releaseAriaDescribedby();
492
- this.releaseAriaDescribedby = noop;
493
- };
494
- } else if (triggerRoot === contentRoot) {
495
- this.elementIds = this.elements.map((el) => el.id);
496
- const appliedIds = this.elements.map((el) => {
497
- if (!el.id) {
498
- el.id = `${this.tagName.toLowerCase()}-helper-${crypto.randomUUID().slice(0, 8)}`;
499
- }
500
- return el.id;
501
- });
502
- const releaseAriaDescribedby = conditionAttributeWithId(
503
- trigger,
504
- "aria-describedby",
505
- appliedIds
506
- );
507
- this.releaseAriaDescribedby = () => {
508
- releaseAriaDescribedby();
509
- this.elements.map((el, index) => {
510
- el.id = this.elementIds[index];
511
- });
512
- this.releaseAriaDescribedby = noop;
513
- };
514
- }
515
- }
516
- doPointerleave() {
517
- this.pointerentered = false;
518
- const triggerElement = this.triggerElement;
519
- if (this.focusedin && triggerElement.matches(":focus-visible"))
520
- return;
521
- this.open = false;
522
- }
523
- handleBeforetoggle(event) {
524
- if (event.newState === "open") {
525
- this.handlePopovershow();
526
- } else {
527
- this.handlePopoverhide();
528
- }
529
- }
530
- handlePopoverhide() {
531
- this.open = false;
532
- }
533
- handlePopovershow() {
534
- }
535
- handleSlotchange() {
536
- if (this.triggerElement) {
537
- this.prepareAriaDescribedby(this.triggerElement);
538
- }
539
- if (!this.elements.length) {
540
- this.releaseLongpressDescribedby();
541
- } else if (this.hasNonVirtualTrigger) {
542
- this.prepareLongpressDescription(
543
- this.triggerElement
544
- );
545
- }
546
- }
547
- shouldPreventClose() {
548
- const shouldPreventClose = this.willPreventClose;
549
- this.willPreventClose = false;
550
- return shouldPreventClose;
551
- }
552
- willUpdate(changes) {
553
- var _a;
554
- if (!this.hasUpdated) {
555
- this.addEventListener("focusout", (event) => {
556
- if (this.type !== "auto") {
557
- return;
558
- }
559
- if (!event.relatedTarget) {
560
- return;
561
- }
562
- const relationEvent = new Event("overlay-relation-query", {
563
- bubbles: true,
564
- composed: true
565
- });
566
- event.relatedTarget.addEventListener(
567
- relationEvent.type,
568
- (event2) => {
569
- if (!event2.composedPath().includes(this)) {
570
- this.open = false;
571
- }
572
- }
573
- );
574
- event.relatedTarget.dispatchEvent(relationEvent);
575
- });
576
- }
577
- if (!this.hasAttribute("id")) {
578
- this.setAttribute(
579
- "id",
580
- `${this.tagName.toLowerCase()}-${crypto.randomUUID().slice(0, 8)}`
581
- );
582
- }
583
- if (changes.has("open") && (typeof changes.get("open") !== "undefined" || this.open)) {
584
- this.manageOpen(changes.get("open"));
585
- }
586
- if (changes.has("trigger")) {
587
- const [id, interaction] = ((_a = this.trigger) == null ? void 0 : _a.split("@")) || [];
588
- this.elementResolver.selector = id ? `#${id}` : "";
589
- this.triggerInteraction = interaction;
590
- }
591
- const oldTrigger = this.triggerElement;
592
- if (changes.has(elementResolverUpdatedSymbol)) {
593
- this.triggerElement = this.elementResolver.element;
594
- this.manageTriggerElement(oldTrigger);
595
- }
596
- if (changes.has("triggerElement")) {
597
- this.manageTriggerElement(changes.get("triggerElement"));
598
- }
599
- }
600
- updated(changes) {
601
- super.updated(changes);
602
- if (changes.has("placement")) {
603
- if (this.placement) {
604
- this.dialogEl.setAttribute("actual-placement", this.placement);
605
- } else {
606
- this.dialogEl.removeAttribute("actual-placement");
607
- }
608
- if (this.open && typeof changes.get("placement") !== "undefined") {
609
- this.placementController.resetOverlayPosition();
610
- }
611
- }
612
- }
613
- render() {
614
- const hasPopoverAttribute = "popover" in this;
615
- const popoverValue = hasPopoverAttribute ? this.popoverValue : void 0;
616
- return html`
617
- <dialog
618
- part="dialog"
619
- popover=${ifDefined(popoverValue)}
620
- @close=${() => {
621
- this.open = false;
622
- }}
623
- @cancel=${() => {
624
- this.open = false;
625
- }}
626
- @beforetoggle=${this.handleBeforetoggle}
627
- @popovershow=${this.handlePopovershow}
628
- style=${styleMap({
629
- "--swc-overlay-z-index": (1e3 + _OverlayBase.openCount).toString()
630
- })}
631
- >
632
- <div part="content">
633
- <slot @slotchange=${this.handleSlotchange}></slot>
634
- </div>
635
- </dialog>
636
- <slot name="longpress-describedby-descriptor"></slot>
637
- `;
638
- }
639
- connectedCallback() {
640
- super.connectedCallback();
641
- this.addEventListener("close", () => {
642
- this.open = false;
643
- });
644
- if (this.hasNonVirtualTrigger) {
645
- this.bindEvents();
646
- }
647
- }
648
- disconnectedCallback() {
649
- if (this.hasNonVirtualTrigger) {
650
- this.unbindEvents(this.triggerElement);
651
- }
652
- this.open = false;
653
- super.disconnectedCallback();
654
- }
655
- };
656
- export let OverlayBase = _OverlayBase;
657
- OverlayBase.styles = [styles];
658
- OverlayBase.openCount = 1;
659
- __decorateClass([
660
- property({ type: Boolean })
661
- ], OverlayBase.prototype, "delayed", 2);
662
- __decorateClass([
663
- query("dialog")
664
- ], OverlayBase.prototype, "dialogEl", 2);
665
- __decorateClass([
666
- property({ type: Boolean })
667
- ], OverlayBase.prototype, "disabled", 1);
668
- __decorateClass([
669
- queryAssignedElements({
670
- selector: ':not([slot="longpress-describedby-descriptor"])',
671
- flatten: true
672
- })
673
- ], OverlayBase.prototype, "elements", 2);
674
- __decorateClass([
675
- property()
676
- ], OverlayBase.prototype, "offset", 2);
677
- __decorateClass([
678
- property({ type: Boolean, reflect: true })
679
- ], OverlayBase.prototype, "open", 1);
680
- __decorateClass([
681
- property()
682
- ], OverlayBase.prototype, "placement", 2);
683
- __decorateClass([
684
- property({ attribute: "receives-focus" })
685
- ], OverlayBase.prototype, "receivesFocus", 2);
686
- __decorateClass([
687
- query("slot")
688
- ], OverlayBase.prototype, "slotEl", 2);
689
- __decorateClass([
690
- property()
691
- ], OverlayBase.prototype, "trigger", 2);
692
- __decorateClass([
693
- state()
694
- ], OverlayBase.prototype, "triggerElement", 2);
695
- __decorateClass([
696
- state()
697
- ], OverlayBase.prototype, "triggerInteraction", 2);
698
- __decorateClass([
699
- property()
700
- ], OverlayBase.prototype, "type", 2);
701
- //# sourceMappingURL=OverlayBase.dev.js.map