@react-aria/dnd 3.5.4-nightly.4552 → 3.5.4-nightly.4558

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 (120) hide show
  1. package/dist/DragManager.main.js +444 -0
  2. package/dist/DragManager.main.js.map +1 -0
  3. package/dist/DragManager.mjs +435 -0
  4. package/dist/DragManager.module.js +435 -0
  5. package/dist/DragManager.module.js.map +1 -0
  6. package/dist/DragPreview.main.js +59 -0
  7. package/dist/DragPreview.main.js.map +1 -0
  8. package/dist/DragPreview.mjs +50 -0
  9. package/dist/DragPreview.module.js +50 -0
  10. package/dist/DragPreview.module.js.map +1 -0
  11. package/dist/ListDropTargetDelegate.main.js +119 -0
  12. package/dist/ListDropTargetDelegate.main.js.map +1 -0
  13. package/dist/ListDropTargetDelegate.mjs +114 -0
  14. package/dist/ListDropTargetDelegate.module.js +114 -0
  15. package/dist/ListDropTargetDelegate.module.js.map +1 -0
  16. package/dist/ar-AE.mjs +1 -1
  17. package/dist/bg-BG.mjs +1 -1
  18. package/dist/constants.main.js +65 -0
  19. package/dist/constants.main.js.map +1 -0
  20. package/dist/constants.mjs +53 -0
  21. package/dist/constants.module.js +53 -0
  22. package/dist/constants.module.js.map +1 -0
  23. package/dist/cs-CZ.mjs +1 -1
  24. package/dist/da-DK.mjs +1 -1
  25. package/dist/de-DE.mjs +1 -1
  26. package/dist/el-GR.mjs +1 -1
  27. package/dist/en-US.mjs +1 -1
  28. package/dist/es-ES.mjs +1 -1
  29. package/dist/et-EE.mjs +1 -1
  30. package/dist/fi-FI.mjs +1 -1
  31. package/dist/fr-FR.mjs +1 -1
  32. package/dist/he-IL.mjs +1 -1
  33. package/dist/hr-HR.mjs +1 -1
  34. package/dist/hu-HU.mjs +1 -1
  35. package/dist/import.mjs +12 -2582
  36. package/dist/intlStrings.main.js +108 -0
  37. package/dist/intlStrings.main.js.map +1 -0
  38. package/dist/intlStrings.mjs +110 -0
  39. package/dist/intlStrings.module.js +110 -0
  40. package/dist/intlStrings.module.js.map +1 -0
  41. package/dist/it-IT.mjs +1 -1
  42. package/dist/ja-JP.mjs +1 -1
  43. package/dist/ko-KR.mjs +1 -1
  44. package/dist/lt-LT.mjs +1 -1
  45. package/dist/lv-LV.mjs +1 -1
  46. package/dist/main.js +27 -2597
  47. package/dist/main.js.map +1 -1
  48. package/dist/module.js +12 -2582
  49. package/dist/module.js.map +1 -1
  50. package/dist/nb-NO.mjs +1 -1
  51. package/dist/nl-NL.mjs +1 -1
  52. package/dist/pl-PL.mjs +1 -1
  53. package/dist/pt-BR.mjs +1 -1
  54. package/dist/pt-PT.mjs +1 -1
  55. package/dist/ro-RO.mjs +1 -1
  56. package/dist/ru-RU.mjs +1 -1
  57. package/dist/sk-SK.mjs +1 -1
  58. package/dist/sl-SI.mjs +1 -1
  59. package/dist/sr-SP.mjs +1 -1
  60. package/dist/sv-SE.mjs +1 -1
  61. package/dist/tr-TR.mjs +1 -1
  62. package/dist/uk-UA.mjs +1 -1
  63. package/dist/useAutoScroll.main.js +89 -0
  64. package/dist/useAutoScroll.main.js.map +1 -0
  65. package/dist/useAutoScroll.mjs +84 -0
  66. package/dist/useAutoScroll.module.js +84 -0
  67. package/dist/useAutoScroll.module.js.map +1 -0
  68. package/dist/useClipboard.main.js +107 -0
  69. package/dist/useClipboard.main.js.map +1 -0
  70. package/dist/useClipboard.mjs +102 -0
  71. package/dist/useClipboard.module.js +102 -0
  72. package/dist/useClipboard.module.js.map +1 -0
  73. package/dist/useDrag.main.js +279 -0
  74. package/dist/useDrag.main.js.map +1 -0
  75. package/dist/useDrag.mjs +274 -0
  76. package/dist/useDrag.module.js +274 -0
  77. package/dist/useDrag.module.js.map +1 -0
  78. package/dist/useDraggableCollection.main.js +27 -0
  79. package/dist/useDraggableCollection.main.js.map +1 -0
  80. package/dist/useDraggableCollection.mjs +22 -0
  81. package/dist/useDraggableCollection.module.js +22 -0
  82. package/dist/useDraggableCollection.module.js.map +1 -0
  83. package/dist/useDraggableItem.main.js +128 -0
  84. package/dist/useDraggableItem.main.js.map +1 -0
  85. package/dist/useDraggableItem.mjs +123 -0
  86. package/dist/useDraggableItem.module.js +123 -0
  87. package/dist/useDraggableItem.module.js.map +1 -0
  88. package/dist/useDrop.main.js +299 -0
  89. package/dist/useDrop.main.js.map +1 -0
  90. package/dist/useDrop.mjs +294 -0
  91. package/dist/useDrop.module.js +294 -0
  92. package/dist/useDrop.module.js.map +1 -0
  93. package/dist/useDropIndicator.main.js +93 -0
  94. package/dist/useDropIndicator.main.js.map +1 -0
  95. package/dist/useDropIndicator.mjs +88 -0
  96. package/dist/useDropIndicator.module.js +88 -0
  97. package/dist/useDropIndicator.module.js.map +1 -0
  98. package/dist/useDroppableCollection.main.js +583 -0
  99. package/dist/useDroppableCollection.main.js.map +1 -0
  100. package/dist/useDroppableCollection.mjs +578 -0
  101. package/dist/useDroppableCollection.module.js +578 -0
  102. package/dist/useDroppableCollection.module.js.map +1 -0
  103. package/dist/useDroppableItem.main.js +79 -0
  104. package/dist/useDroppableItem.main.js.map +1 -0
  105. package/dist/useDroppableItem.mjs +74 -0
  106. package/dist/useDroppableItem.module.js +74 -0
  107. package/dist/useDroppableItem.module.js.map +1 -0
  108. package/dist/useVirtualDrop.main.js +56 -0
  109. package/dist/useVirtualDrop.main.js.map +1 -0
  110. package/dist/useVirtualDrop.mjs +51 -0
  111. package/dist/useVirtualDrop.module.js +51 -0
  112. package/dist/useVirtualDrop.module.js.map +1 -0
  113. package/dist/utils.main.js +283 -0
  114. package/dist/utils.main.js.map +1 -0
  115. package/dist/utils.mjs +255 -0
  116. package/dist/utils.module.js +255 -0
  117. package/dist/utils.module.js.map +1 -0
  118. package/dist/zh-CN.mjs +1 -1
  119. package/dist/zh-TW.mjs +1 -1
  120. package/package.json +11 -11
@@ -0,0 +1,444 @@
1
+ var $4620ae0dc40f0031$exports = require("./utils.main.js");
2
+ var $hMqHl$reactarialiveannouncer = require("@react-aria/live-announcer");
3
+ var $hMqHl$reactariaoverlays = require("@react-aria/overlays");
4
+ var $hMqHl$reactdom = require("react-dom");
5
+ var $hMqHl$reactariautils = require("@react-aria/utils");
6
+ var $hMqHl$react = require("react");
7
+
8
+
9
+ function $parcel$export(e, n, v, s) {
10
+ Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
11
+ }
12
+
13
+ $parcel$export(module.exports, "registerDropTarget", () => $28e10663603f5ea1$export$c28d9fb4a54e471a);
14
+ $parcel$export(module.exports, "registerDropItem", () => $28e10663603f5ea1$export$aef80212ac99c003);
15
+ $parcel$export(module.exports, "beginDragging", () => $28e10663603f5ea1$export$549dbcf8649bf3b2);
16
+ $parcel$export(module.exports, "useDragSession", () => $28e10663603f5ea1$export$418e185dd3f1b968);
17
+ $parcel$export(module.exports, "isVirtualDragging", () => $28e10663603f5ea1$export$403bc76cbf68cf60);
18
+ /*
19
+ * Copyright 2020 Adobe. All rights reserved.
20
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
21
+ * you may not use this file except in compliance with the License. You may obtain a copy
22
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
23
+ *
24
+ * Unless required by applicable law or agreed to in writing, software distributed under
25
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
26
+ * OF ANY KIND, either express or implied. See the License for the specific language
27
+ * governing permissions and limitations under the License.
28
+ */
29
+
30
+
31
+
32
+
33
+
34
+ let $28e10663603f5ea1$var$dropTargets = new Map();
35
+ let $28e10663603f5ea1$var$dropItems = new Map();
36
+ let $28e10663603f5ea1$var$dragSession = null;
37
+ let $28e10663603f5ea1$var$subscriptions = new Set();
38
+ function $28e10663603f5ea1$export$c28d9fb4a54e471a(target) {
39
+ $28e10663603f5ea1$var$dropTargets.set(target.element, target);
40
+ $28e10663603f5ea1$var$dragSession === null || $28e10663603f5ea1$var$dragSession === void 0 ? void 0 : $28e10663603f5ea1$var$dragSession.updateValidDropTargets();
41
+ return ()=>{
42
+ $28e10663603f5ea1$var$dropTargets.delete(target.element);
43
+ $28e10663603f5ea1$var$dragSession === null || $28e10663603f5ea1$var$dragSession === void 0 ? void 0 : $28e10663603f5ea1$var$dragSession.updateValidDropTargets();
44
+ };
45
+ }
46
+ function $28e10663603f5ea1$export$aef80212ac99c003(item) {
47
+ $28e10663603f5ea1$var$dropItems.set(item.element, item);
48
+ return ()=>{
49
+ $28e10663603f5ea1$var$dropItems.delete(item.element);
50
+ };
51
+ }
52
+ function $28e10663603f5ea1$export$549dbcf8649bf3b2(target, stringFormatter) {
53
+ if ($28e10663603f5ea1$var$dragSession) throw new Error("Cannot begin dragging while already dragging");
54
+ $28e10663603f5ea1$var$dragSession = new $28e10663603f5ea1$var$DragSession(target, stringFormatter);
55
+ requestAnimationFrame(()=>{
56
+ $28e10663603f5ea1$var$dragSession.setup();
57
+ if ((0, $4620ae0dc40f0031$exports.getDragModality)() === "keyboard") $28e10663603f5ea1$var$dragSession.next();
58
+ });
59
+ for (let cb of $28e10663603f5ea1$var$subscriptions)cb();
60
+ }
61
+ function $28e10663603f5ea1$export$418e185dd3f1b968() {
62
+ let [session, setSession] = (0, $hMqHl$react.useState)($28e10663603f5ea1$var$dragSession);
63
+ (0, $hMqHl$react.useEffect)(()=>{
64
+ let cb = ()=>setSession($28e10663603f5ea1$var$dragSession);
65
+ $28e10663603f5ea1$var$subscriptions.add(cb);
66
+ return ()=>{
67
+ $28e10663603f5ea1$var$subscriptions.delete(cb);
68
+ };
69
+ }, []);
70
+ return session;
71
+ }
72
+ function $28e10663603f5ea1$export$403bc76cbf68cf60() {
73
+ return !!$28e10663603f5ea1$var$dragSession;
74
+ }
75
+ function $28e10663603f5ea1$var$endDragging() {
76
+ $28e10663603f5ea1$var$dragSession = null;
77
+ for (let cb of $28e10663603f5ea1$var$subscriptions)cb();
78
+ }
79
+ function $28e10663603f5ea1$export$7454aff2e161f241(element) {
80
+ for (let target of $28e10663603f5ea1$var$dropTargets.keys()){
81
+ if (target.contains(element)) return true;
82
+ }
83
+ return false;
84
+ }
85
+ const $28e10663603f5ea1$var$CANCELED_EVENTS = [
86
+ "pointerdown",
87
+ "pointermove",
88
+ "pointerenter",
89
+ "pointerleave",
90
+ "pointerover",
91
+ "pointerout",
92
+ "pointerup",
93
+ "mousedown",
94
+ "mousemove",
95
+ "mouseenter",
96
+ "mouseleave",
97
+ "mouseover",
98
+ "mouseout",
99
+ "mouseup",
100
+ "touchstart",
101
+ "touchmove",
102
+ "touchend",
103
+ "focusin",
104
+ "focusout"
105
+ ];
106
+ const $28e10663603f5ea1$var$CLICK_EVENTS = [
107
+ "pointerup",
108
+ "mouseup",
109
+ "touchend"
110
+ ];
111
+ const $28e10663603f5ea1$var$MESSAGES = {
112
+ keyboard: "dragStartedKeyboard",
113
+ touch: "dragStartedTouch",
114
+ virtual: "dragStartedVirtual"
115
+ };
116
+ class $28e10663603f5ea1$var$DragSession {
117
+ setup() {
118
+ document.addEventListener("keydown", this.onKeyDown, true);
119
+ document.addEventListener("keyup", this.onKeyUp, true);
120
+ window.addEventListener("focus", this.onFocus, true);
121
+ window.addEventListener("blur", this.onBlur, true);
122
+ document.addEventListener("click", this.onClick, true);
123
+ document.addEventListener("pointerdown", this.onPointerDown, true);
124
+ for (let event of $28e10663603f5ea1$var$CANCELED_EVENTS)document.addEventListener(event, this.cancelEvent, true);
125
+ this.mutationObserver = new MutationObserver(()=>this.updateValidDropTargets());
126
+ this.updateValidDropTargets();
127
+ (0, $hMqHl$reactarialiveannouncer.announce)(this.stringFormatter.format($28e10663603f5ea1$var$MESSAGES[(0, $4620ae0dc40f0031$exports.getDragModality)()]));
128
+ }
129
+ teardown() {
130
+ document.removeEventListener("keydown", this.onKeyDown, true);
131
+ document.removeEventListener("keyup", this.onKeyUp, true);
132
+ window.removeEventListener("focus", this.onFocus, true);
133
+ window.removeEventListener("blur", this.onBlur, true);
134
+ document.removeEventListener("click", this.onClick, true);
135
+ document.removeEventListener("pointerdown", this.onPointerDown, true);
136
+ for (let event of $28e10663603f5ea1$var$CANCELED_EVENTS)document.removeEventListener(event, this.cancelEvent, true);
137
+ this.mutationObserver.disconnect();
138
+ this.restoreAriaHidden();
139
+ }
140
+ onKeyDown(e) {
141
+ var _this_currentDropTarget;
142
+ this.cancelEvent(e);
143
+ if (e.key === "Escape") {
144
+ this.cancel();
145
+ return;
146
+ }
147
+ if (e.key === "Tab" && !(e.metaKey || e.altKey || e.ctrlKey)) {
148
+ if (e.shiftKey) this.previous();
149
+ else this.next();
150
+ }
151
+ if (typeof ((_this_currentDropTarget = this.currentDropTarget) === null || _this_currentDropTarget === void 0 ? void 0 : _this_currentDropTarget.onKeyDown) === "function") this.currentDropTarget.onKeyDown(e, this.dragTarget);
152
+ }
153
+ onKeyUp(e) {
154
+ this.cancelEvent(e);
155
+ if (e.key === "Enter") {
156
+ if (e.altKey) this.activate();
157
+ else this.drop();
158
+ }
159
+ }
160
+ onFocus(e) {
161
+ // Prevent focus events, except to the original drag target.
162
+ if (e.target !== this.dragTarget.element) this.cancelEvent(e);
163
+ // Ignore focus events on the window/document (JSDOM). Will be handled in onBlur, below.
164
+ if (!(e.target instanceof HTMLElement) || e.target === this.dragTarget.element) return;
165
+ let dropTarget = this.validDropTargets.find((target)=>target.element === e.target) || this.validDropTargets.find((target)=>target.element.contains(e.target));
166
+ if (!dropTarget) {
167
+ if (this.currentDropTarget) this.currentDropTarget.element.focus();
168
+ else this.dragTarget.element.focus();
169
+ return;
170
+ }
171
+ let item = $28e10663603f5ea1$var$dropItems.get(e.target);
172
+ this.setCurrentDropTarget(dropTarget, item);
173
+ }
174
+ onBlur(e) {
175
+ if (e.target !== this.dragTarget.element) this.cancelEvent(e);
176
+ // If nothing is gaining focus, or e.relatedTarget is the window/document (JSDOM),
177
+ // restore focus back to the current drop target if any, or the original drag target.
178
+ if (!e.relatedTarget || !(e.relatedTarget instanceof HTMLElement)) {
179
+ if (this.currentDropTarget) this.currentDropTarget.element.focus();
180
+ else this.dragTarget.element.focus();
181
+ }
182
+ }
183
+ onClick(e) {
184
+ this.cancelEvent(e);
185
+ if ((0, $hMqHl$reactariautils.isVirtualClick)(e) || this.isVirtualClick) {
186
+ if (e.target === this.dragTarget.element) {
187
+ this.cancel();
188
+ return;
189
+ }
190
+ let dropTarget = this.validDropTargets.find((target)=>target.element.contains(e.target));
191
+ if (dropTarget) {
192
+ let item = $28e10663603f5ea1$var$dropItems.get(e.target);
193
+ this.setCurrentDropTarget(dropTarget, item);
194
+ this.drop(item);
195
+ }
196
+ }
197
+ }
198
+ onPointerDown(e) {
199
+ // Android Talkback double tap has e.detail = 1 for onClick. Detect the virtual click in onPointerDown before onClick fires
200
+ // so we can properly perform cancel and drop operations.
201
+ this.cancelEvent(e);
202
+ this.isVirtualClick = (0, $hMqHl$reactariautils.isVirtualPointerEvent)(e);
203
+ }
204
+ cancelEvent(e) {
205
+ var _this_dragTarget;
206
+ // Allow focusin and focusout on the drag target so focus ring works properly.
207
+ if ((e.type === "focusin" || e.type === "focusout") && e.target === ((_this_dragTarget = this.dragTarget) === null || _this_dragTarget === void 0 ? void 0 : _this_dragTarget.element)) return;
208
+ // Allow default for events that might cancel a click event
209
+ if (!$28e10663603f5ea1$var$CLICK_EVENTS.includes(e.type)) e.preventDefault();
210
+ e.stopPropagation();
211
+ e.stopImmediatePropagation();
212
+ }
213
+ updateValidDropTargets() {
214
+ if (!this.mutationObserver) return;
215
+ this.mutationObserver.disconnect();
216
+ if (this.restoreAriaHidden) this.restoreAriaHidden();
217
+ this.validDropTargets = $28e10663603f5ea1$var$findValidDropTargets(this.dragTarget);
218
+ // Shuffle drop target order based on starting drag target.
219
+ if (this.validDropTargets.length > 0) {
220
+ let nearestIndex = this.findNearestDropTarget();
221
+ this.validDropTargets = [
222
+ ...this.validDropTargets.slice(nearestIndex),
223
+ ...this.validDropTargets.slice(0, nearestIndex)
224
+ ];
225
+ }
226
+ if (this.currentDropTarget && !this.validDropTargets.includes(this.currentDropTarget)) this.setCurrentDropTarget(this.validDropTargets[0]);
227
+ // Find valid drop items within collections
228
+ let types = (0, $4620ae0dc40f0031$exports.getTypes)(this.dragTarget.items);
229
+ let validDropItems = [
230
+ ...$28e10663603f5ea1$var$dropItems.values()
231
+ ].filter((item)=>{
232
+ if (typeof item.getDropOperation === "function") return item.getDropOperation(types, this.dragTarget.allowedDropOperations) !== "cancel";
233
+ return true;
234
+ });
235
+ // Filter out drop targets that contain valid items. We don't want to stop hiding elements
236
+ // other than the drop items that exist inside the collection.
237
+ let visibleDropTargets = this.validDropTargets.filter((target)=>!validDropItems.some((item)=>target.element.contains(item.element)));
238
+ this.restoreAriaHidden = (0, $hMqHl$reactariaoverlays.ariaHideOutside)([
239
+ this.dragTarget.element,
240
+ ...validDropItems.map((item)=>item.element),
241
+ ...visibleDropTargets.map((target)=>target.element)
242
+ ]);
243
+ this.mutationObserver.observe(document.body, {
244
+ subtree: true,
245
+ attributes: true,
246
+ attributeFilter: [
247
+ "aria-hidden"
248
+ ]
249
+ });
250
+ }
251
+ next() {
252
+ if (!this.currentDropTarget) {
253
+ this.setCurrentDropTarget(this.validDropTargets[0]);
254
+ return;
255
+ }
256
+ let index = this.validDropTargets.indexOf(this.currentDropTarget);
257
+ if (index < 0) {
258
+ this.setCurrentDropTarget(this.validDropTargets[0]);
259
+ return;
260
+ }
261
+ // If we've reached the end of the valid drop targets, cycle back to the original drag target.
262
+ // This lets the user cancel the drag in case they don't have an Escape key (e.g. iPad keyboard case).
263
+ if (index === this.validDropTargets.length - 1) {
264
+ if (!this.dragTarget.element.closest('[aria-hidden="true"]')) {
265
+ this.setCurrentDropTarget(null);
266
+ this.dragTarget.element.focus();
267
+ } else this.setCurrentDropTarget(this.validDropTargets[0]);
268
+ } else this.setCurrentDropTarget(this.validDropTargets[index + 1]);
269
+ }
270
+ previous() {
271
+ if (!this.currentDropTarget) {
272
+ this.setCurrentDropTarget(this.validDropTargets[this.validDropTargets.length - 1]);
273
+ return;
274
+ }
275
+ let index = this.validDropTargets.indexOf(this.currentDropTarget);
276
+ if (index < 0) {
277
+ this.setCurrentDropTarget(this.validDropTargets[this.validDropTargets.length - 1]);
278
+ return;
279
+ }
280
+ // If we've reached the start of the valid drop targets, cycle back to the original drag target.
281
+ // This lets the user cancel the drag in case they don't have an Escape key (e.g. iPad keyboard case).
282
+ if (index === 0) {
283
+ if (!this.dragTarget.element.closest('[aria-hidden="true"]')) {
284
+ this.setCurrentDropTarget(null);
285
+ this.dragTarget.element.focus();
286
+ } else this.setCurrentDropTarget(this.validDropTargets[this.validDropTargets.length - 1]);
287
+ } else this.setCurrentDropTarget(this.validDropTargets[index - 1]);
288
+ }
289
+ findNearestDropTarget() {
290
+ let dragTargetRect = this.dragTarget.element.getBoundingClientRect();
291
+ let minDistance = Infinity;
292
+ let nearest = -1;
293
+ for(let i = 0; i < this.validDropTargets.length; i++){
294
+ let dropTarget = this.validDropTargets[i];
295
+ let rect = dropTarget.element.getBoundingClientRect();
296
+ let dx = rect.left - dragTargetRect.left;
297
+ let dy = rect.top - dragTargetRect.top;
298
+ let dist = dx * dx + dy * dy;
299
+ if (dist < minDistance) {
300
+ minDistance = dist;
301
+ nearest = i;
302
+ }
303
+ }
304
+ return nearest;
305
+ }
306
+ setCurrentDropTarget(dropTarget, item) {
307
+ if (dropTarget !== this.currentDropTarget) {
308
+ if (this.currentDropTarget && typeof this.currentDropTarget.onDropExit === "function") {
309
+ let rect = this.currentDropTarget.element.getBoundingClientRect();
310
+ this.currentDropTarget.onDropExit({
311
+ type: "dropexit",
312
+ x: rect.left + rect.width / 2,
313
+ y: rect.top + rect.height / 2
314
+ });
315
+ }
316
+ this.currentDropTarget = dropTarget;
317
+ if (dropTarget) {
318
+ if (typeof dropTarget.onDropEnter === "function") {
319
+ let rect = dropTarget.element.getBoundingClientRect();
320
+ dropTarget.onDropEnter({
321
+ type: "dropenter",
322
+ x: rect.left + rect.width / 2,
323
+ y: rect.top + rect.height / 2
324
+ }, this.dragTarget);
325
+ }
326
+ if (!item) dropTarget === null || dropTarget === void 0 ? void 0 : dropTarget.element.focus();
327
+ }
328
+ }
329
+ if (item !== this.currentDropItem) {
330
+ if (item && typeof this.currentDropTarget.onDropTargetEnter === "function") this.currentDropTarget.onDropTargetEnter(item === null || item === void 0 ? void 0 : item.target);
331
+ item === null || item === void 0 ? void 0 : item.element.focus();
332
+ this.currentDropItem = item;
333
+ // Announce first drop target after drag start announcement finishes.
334
+ // Otherwise, it will never get announced because drag start announcement is assertive.
335
+ if (!this.initialFocused) {
336
+ (0, $hMqHl$reactarialiveannouncer.announce)(item === null || item === void 0 ? void 0 : item.element.getAttribute("aria-label"), "polite");
337
+ this.initialFocused = true;
338
+ }
339
+ }
340
+ }
341
+ end() {
342
+ this.teardown();
343
+ $28e10663603f5ea1$var$endDragging();
344
+ if (typeof this.dragTarget.onDragEnd === "function") {
345
+ let target = this.currentDropTarget && this.dropOperation !== "cancel" ? this.currentDropTarget : this.dragTarget;
346
+ let rect = target.element.getBoundingClientRect();
347
+ this.dragTarget.onDragEnd({
348
+ type: "dragend",
349
+ x: rect.x + rect.width / 2,
350
+ y: rect.y + rect.height / 2,
351
+ dropOperation: this.dropOperation || "cancel"
352
+ });
353
+ }
354
+ // Blur and re-focus the drop target so that the focus ring appears.
355
+ if (this.currentDropTarget) {
356
+ // Since we cancel all focus events in drag sessions, refire blur to make sure state gets updated so drag target doesn't think it's still focused
357
+ // i.e. When you from one list to another during a drag session, we need the blur to fire on the first list after the drag.
358
+ if (!this.dragTarget.element.contains(this.currentDropTarget.element)) {
359
+ this.dragTarget.element.dispatchEvent(new FocusEvent("blur"));
360
+ this.dragTarget.element.dispatchEvent(new FocusEvent("focusout", {
361
+ bubbles: true
362
+ }));
363
+ }
364
+ // Re-focus the focusedKey upon reorder. This requires a React rerender between blurring and focusing.
365
+ (0, $hMqHl$reactdom.flushSync)(()=>{
366
+ this.currentDropTarget.element.blur();
367
+ });
368
+ this.currentDropTarget.element.focus();
369
+ }
370
+ this.setCurrentDropTarget(null);
371
+ }
372
+ cancel() {
373
+ this.setCurrentDropTarget(null);
374
+ this.end();
375
+ if (!this.dragTarget.element.closest('[aria-hidden="true"]')) this.dragTarget.element.focus();
376
+ (0, $hMqHl$reactarialiveannouncer.announce)(this.stringFormatter.format("dropCanceled"));
377
+ }
378
+ drop(item) {
379
+ if (!this.currentDropTarget) {
380
+ this.cancel();
381
+ return;
382
+ }
383
+ if (typeof (item === null || item === void 0 ? void 0 : item.getDropOperation) === "function") {
384
+ let types = (0, $4620ae0dc40f0031$exports.getTypes)(this.dragTarget.items);
385
+ this.dropOperation = item.getDropOperation(types, this.dragTarget.allowedDropOperations);
386
+ } else if (typeof this.currentDropTarget.getDropOperation === "function") {
387
+ let types = (0, $4620ae0dc40f0031$exports.getTypes)(this.dragTarget.items);
388
+ this.dropOperation = this.currentDropTarget.getDropOperation(types, this.dragTarget.allowedDropOperations);
389
+ } else // TODO: show menu ??
390
+ this.dropOperation = this.dragTarget.allowedDropOperations[0];
391
+ if (typeof this.currentDropTarget.onDrop === "function") {
392
+ let items = this.dragTarget.items.map((item)=>({
393
+ kind: "text",
394
+ types: new Set(Object.keys(item)),
395
+ getText: (type)=>Promise.resolve(item[type])
396
+ }));
397
+ let rect = this.currentDropTarget.element.getBoundingClientRect();
398
+ this.currentDropTarget.onDrop({
399
+ type: "drop",
400
+ x: rect.left + rect.width / 2,
401
+ y: rect.top + rect.height / 2,
402
+ items: items,
403
+ dropOperation: this.dropOperation
404
+ }, item === null || item === void 0 ? void 0 : item.target);
405
+ }
406
+ this.end();
407
+ (0, $hMqHl$reactarialiveannouncer.announce)(this.stringFormatter.format("dropComplete"));
408
+ }
409
+ activate() {
410
+ if (this.currentDropTarget && typeof this.currentDropTarget.onDropActivate === "function") {
411
+ let rect = this.currentDropTarget.element.getBoundingClientRect();
412
+ this.currentDropTarget.onDropActivate({
413
+ type: "dropactivate",
414
+ x: rect.left + rect.width / 2,
415
+ y: rect.top + rect.height / 2
416
+ });
417
+ }
418
+ }
419
+ constructor(target, stringFormatter){
420
+ this.dragTarget = target;
421
+ this.stringFormatter = stringFormatter;
422
+ this.onKeyDown = this.onKeyDown.bind(this);
423
+ this.onKeyUp = this.onKeyUp.bind(this);
424
+ this.onFocus = this.onFocus.bind(this);
425
+ this.onBlur = this.onBlur.bind(this);
426
+ this.onClick = this.onClick.bind(this);
427
+ this.onPointerDown = this.onPointerDown.bind(this);
428
+ this.cancelEvent = this.cancelEvent.bind(this);
429
+ this.initialFocused = false;
430
+ }
431
+ }
432
+ function $28e10663603f5ea1$var$findValidDropTargets(options) {
433
+ let types = (0, $4620ae0dc40f0031$exports.getTypes)(options.items);
434
+ return [
435
+ ...$28e10663603f5ea1$var$dropTargets.values()
436
+ ].filter((target)=>{
437
+ if (target.element.closest('[aria-hidden="true"]')) return false;
438
+ if (typeof target.getDropOperation === "function") return target.getDropOperation(types, options.allowedDropOperations) !== "cancel";
439
+ return true;
440
+ });
441
+ }
442
+
443
+
444
+ //# sourceMappingURL=DragManager.main.js.map
@@ -0,0 +1 @@
1
+ {"mappings":"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","sources":["packages/@react-aria/dnd/src/DragManager.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {announce} from '@react-aria/live-announcer';\nimport {ariaHideOutside} from '@react-aria/overlays';\nimport {DragEndEvent, DragItem, DropActivateEvent, DropEnterEvent, DropEvent, DropExitEvent, DropItem, DropOperation, DropTarget as DroppableCollectionTarget, FocusableElement} from '@react-types/shared';\nimport {flushSync} from 'react-dom';\nimport {getDragModality, getTypes} from './utils';\nimport {isVirtualClick, isVirtualPointerEvent} from '@react-aria/utils';\nimport type {LocalizedStringFormatter} from '@internationalized/string';\nimport {useEffect, useState} from 'react';\n\nlet dropTargets = new Map<Element, DropTarget>();\nlet dropItems = new Map<Element, DroppableItem>();\nlet dragSession: DragSession = null;\nlet subscriptions = new Set<() => void>();\n\ninterface DropTarget {\n element: FocusableElement,\n getDropOperation?: (types: Set<string>, allowedOperations: DropOperation[]) => DropOperation,\n onDropEnter?: (e: DropEnterEvent, dragTarget: DragTarget) => void,\n onDropExit?: (e: DropExitEvent) => void,\n onDropTargetEnter?: (target?: DroppableCollectionTarget) => void,\n onDropActivate?: (e: DropActivateEvent, target?: DroppableCollectionTarget) => void,\n onDrop?: (e: DropEvent, target?: DroppableCollectionTarget) => void,\n onKeyDown?: (e: KeyboardEvent, dragTarget: DragTarget) => void\n}\n\nexport function registerDropTarget(target: DropTarget) {\n dropTargets.set(target.element, target);\n dragSession?.updateValidDropTargets();\n return () => {\n dropTargets.delete(target.element);\n dragSession?.updateValidDropTargets();\n };\n}\n\ninterface DroppableItem {\n element: FocusableElement,\n target: DroppableCollectionTarget,\n getDropOperation?: (types: Set<string>, allowedOperations: DropOperation[]) => DropOperation\n}\n\nexport function registerDropItem(item: DroppableItem) {\n dropItems.set(item.element, item);\n return () => {\n dropItems.delete(item.element);\n };\n}\n\ninterface DragTarget {\n element: FocusableElement,\n items: DragItem[],\n allowedDropOperations: DropOperation[],\n onDragEnd?: (e: DragEndEvent) => void\n}\n\nexport function beginDragging(target: DragTarget, stringFormatter: LocalizedStringFormatter) {\n if (dragSession) {\n throw new Error('Cannot begin dragging while already dragging');\n }\n\n dragSession = new DragSession(target, stringFormatter);\n requestAnimationFrame(() => {\n dragSession.setup();\n if (getDragModality() === 'keyboard') {\n dragSession.next();\n }\n });\n\n for (let cb of subscriptions) {\n cb();\n }\n}\n\nexport function useDragSession() {\n let [session, setSession] = useState(dragSession);\n\n useEffect(() => {\n let cb = () => setSession(dragSession);\n subscriptions.add(cb);\n return () => {\n subscriptions.delete(cb);\n };\n }, []);\n\n return session;\n}\n\n/** @private */\nexport function isVirtualDragging(): boolean {\n return !!dragSession;\n}\n\nfunction endDragging() {\n dragSession = null;\n for (let cb of subscriptions) {\n cb();\n }\n}\n\nexport function isValidDropTarget(element: Element): boolean {\n for (let target of dropTargets.keys()) {\n if (target.contains(element)) {\n return true;\n }\n }\n\n return false;\n}\n\nconst CANCELED_EVENTS = [\n 'pointerdown',\n 'pointermove',\n 'pointerenter',\n 'pointerleave',\n 'pointerover',\n 'pointerout',\n 'pointerup',\n 'mousedown',\n 'mousemove',\n 'mouseenter',\n 'mouseleave',\n 'mouseover',\n 'mouseout',\n 'mouseup',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'focusin',\n 'focusout'\n];\n\nconst CLICK_EVENTS = [\n 'pointerup',\n 'mouseup',\n 'touchend'\n];\n\nconst MESSAGES = {\n keyboard: 'dragStartedKeyboard',\n touch: 'dragStartedTouch',\n virtual: 'dragStartedVirtual'\n};\n\nclass DragSession {\n dragTarget: DragTarget;\n validDropTargets: DropTarget[];\n currentDropTarget: DropTarget;\n currentDropItem: DroppableItem;\n dropOperation: DropOperation;\n private mutationObserver: MutationObserver;\n private restoreAriaHidden: () => void;\n private stringFormatter: LocalizedStringFormatter;\n private isVirtualClick: boolean;\n private initialFocused: boolean;\n\n constructor(target: DragTarget, stringFormatter: LocalizedStringFormatter) {\n this.dragTarget = target;\n this.stringFormatter = stringFormatter;\n\n this.onKeyDown = this.onKeyDown.bind(this);\n this.onKeyUp = this.onKeyUp.bind(this);\n this.onFocus = this.onFocus.bind(this);\n this.onBlur = this.onBlur.bind(this);\n this.onClick = this.onClick.bind(this);\n this.onPointerDown = this.onPointerDown.bind(this);\n this.cancelEvent = this.cancelEvent.bind(this);\n this.initialFocused = false;\n }\n\n setup() {\n document.addEventListener('keydown', this.onKeyDown, true);\n document.addEventListener('keyup', this.onKeyUp, true);\n window.addEventListener('focus', this.onFocus, true);\n window.addEventListener('blur', this.onBlur, true);\n document.addEventListener('click', this.onClick, true);\n document.addEventListener('pointerdown', this.onPointerDown, true);\n\n for (let event of CANCELED_EVENTS) {\n document.addEventListener(event, this.cancelEvent, true);\n }\n\n this.mutationObserver = new MutationObserver(() =>\n this.updateValidDropTargets()\n );\n this.updateValidDropTargets();\n\n announce(this.stringFormatter.format(MESSAGES[getDragModality()]));\n }\n\n teardown() {\n document.removeEventListener('keydown', this.onKeyDown, true);\n document.removeEventListener('keyup', this.onKeyUp, true);\n window.removeEventListener('focus', this.onFocus, true);\n window.removeEventListener('blur', this.onBlur, true);\n document.removeEventListener('click', this.onClick, true);\n document.removeEventListener('pointerdown', this.onPointerDown, true);\n\n for (let event of CANCELED_EVENTS) {\n document.removeEventListener(event, this.cancelEvent, true);\n }\n\n this.mutationObserver.disconnect();\n this.restoreAriaHidden();\n }\n\n onKeyDown(e: KeyboardEvent) {\n this.cancelEvent(e);\n\n if (e.key === 'Escape') {\n this.cancel();\n return;\n }\n\n if (e.key === 'Tab' && !(e.metaKey || e.altKey || e.ctrlKey)) {\n if (e.shiftKey) {\n this.previous();\n } else {\n this.next();\n }\n }\n\n if (typeof this.currentDropTarget?.onKeyDown === 'function') {\n this.currentDropTarget.onKeyDown(e, this.dragTarget);\n }\n }\n\n onKeyUp(e: KeyboardEvent) {\n this.cancelEvent(e);\n\n if (e.key === 'Enter') {\n if (e.altKey) {\n this.activate();\n } else {\n this.drop();\n }\n }\n }\n\n onFocus(e: FocusEvent) {\n // Prevent focus events, except to the original drag target.\n if (e.target !== this.dragTarget.element) {\n this.cancelEvent(e);\n }\n\n // Ignore focus events on the window/document (JSDOM). Will be handled in onBlur, below.\n if (!(e.target instanceof HTMLElement) || e.target === this.dragTarget.element) {\n return;\n }\n\n let dropTarget =\n this.validDropTargets.find(target => target.element === e.target as HTMLElement) ||\n this.validDropTargets.find(target => target.element.contains(e.target as HTMLElement));\n\n if (!dropTarget) {\n if (this.currentDropTarget) {\n this.currentDropTarget.element.focus();\n } else {\n this.dragTarget.element.focus();\n }\n return;\n }\n\n let item = dropItems.get(e.target as HTMLElement);\n this.setCurrentDropTarget(dropTarget, item);\n }\n\n onBlur(e: FocusEvent) {\n if (e.target !== this.dragTarget.element) {\n this.cancelEvent(e);\n }\n\n // If nothing is gaining focus, or e.relatedTarget is the window/document (JSDOM),\n // restore focus back to the current drop target if any, or the original drag target.\n if (!e.relatedTarget || !(e.relatedTarget instanceof HTMLElement)) {\n if (this.currentDropTarget) {\n this.currentDropTarget.element.focus();\n } else {\n this.dragTarget.element.focus();\n }\n }\n }\n\n onClick(e: MouseEvent) {\n this.cancelEvent(e);\n if (isVirtualClick(e) || this.isVirtualClick) {\n if (e.target === this.dragTarget.element) {\n this.cancel();\n return;\n }\n\n let dropTarget = this.validDropTargets.find(target => target.element.contains(e.target as HTMLElement));\n if (dropTarget) {\n let item = dropItems.get(e.target as HTMLElement);\n this.setCurrentDropTarget(dropTarget, item);\n this.drop(item);\n }\n }\n }\n\n onPointerDown(e: PointerEvent) {\n // Android Talkback double tap has e.detail = 1 for onClick. Detect the virtual click in onPointerDown before onClick fires\n // so we can properly perform cancel and drop operations.\n this.cancelEvent(e);\n this.isVirtualClick = isVirtualPointerEvent(e);\n }\n\n cancelEvent(e: Event) {\n // Allow focusin and focusout on the drag target so focus ring works properly.\n if ((e.type === 'focusin' || e.type === 'focusout') && e.target === this.dragTarget?.element) {\n return;\n }\n\n // Allow default for events that might cancel a click event\n if (!CLICK_EVENTS.includes(e.type)) {\n e.preventDefault();\n }\n\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n\n updateValidDropTargets() {\n if (!this.mutationObserver) {\n return;\n }\n\n this.mutationObserver.disconnect();\n if (this.restoreAriaHidden) {\n this.restoreAriaHidden();\n }\n\n this.validDropTargets = findValidDropTargets(this.dragTarget);\n\n // Shuffle drop target order based on starting drag target.\n if (this.validDropTargets.length > 0) {\n let nearestIndex = this.findNearestDropTarget();\n this.validDropTargets = [\n ...this.validDropTargets.slice(nearestIndex),\n ...this.validDropTargets.slice(0, nearestIndex)\n ];\n }\n\n if (this.currentDropTarget && !this.validDropTargets.includes(this.currentDropTarget)) {\n this.setCurrentDropTarget(this.validDropTargets[0]);\n }\n\n // Find valid drop items within collections\n let types = getTypes(this.dragTarget.items);\n let validDropItems = [...dropItems.values()].filter(item => {\n if (typeof item.getDropOperation === 'function') {\n return item.getDropOperation(types, this.dragTarget.allowedDropOperations) !== 'cancel';\n }\n\n return true;\n });\n\n // Filter out drop targets that contain valid items. We don't want to stop hiding elements\n // other than the drop items that exist inside the collection.\n let visibleDropTargets = this.validDropTargets.filter(target =>\n !validDropItems.some(item => target.element.contains(item.element))\n );\n\n this.restoreAriaHidden = ariaHideOutside([\n this.dragTarget.element,\n ...validDropItems.map(item => item.element),\n ...visibleDropTargets.map(target => target.element)\n ]);\n\n this.mutationObserver.observe(document.body, {subtree: true, attributes: true, attributeFilter: ['aria-hidden']});\n }\n\n next() {\n if (!this.currentDropTarget) {\n this.setCurrentDropTarget(this.validDropTargets[0]);\n return;\n }\n\n let index = this.validDropTargets.indexOf(this.currentDropTarget);\n if (index < 0) {\n this.setCurrentDropTarget(this.validDropTargets[0]);\n return;\n }\n\n // If we've reached the end of the valid drop targets, cycle back to the original drag target.\n // This lets the user cancel the drag in case they don't have an Escape key (e.g. iPad keyboard case).\n if (index === this.validDropTargets.length - 1) {\n if (!this.dragTarget.element.closest('[aria-hidden=\"true\"]')) {\n this.setCurrentDropTarget(null);\n this.dragTarget.element.focus();\n } else {\n this.setCurrentDropTarget(this.validDropTargets[0]);\n }\n } else {\n this.setCurrentDropTarget(this.validDropTargets[index + 1]);\n }\n }\n\n previous() {\n if (!this.currentDropTarget) {\n this.setCurrentDropTarget(this.validDropTargets[this.validDropTargets.length - 1]);\n return;\n }\n\n let index = this.validDropTargets.indexOf(this.currentDropTarget);\n if (index < 0) {\n this.setCurrentDropTarget(this.validDropTargets[this.validDropTargets.length - 1]);\n return;\n }\n\n // If we've reached the start of the valid drop targets, cycle back to the original drag target.\n // This lets the user cancel the drag in case they don't have an Escape key (e.g. iPad keyboard case).\n if (index === 0) {\n if (!this.dragTarget.element.closest('[aria-hidden=\"true\"]')) {\n this.setCurrentDropTarget(null);\n this.dragTarget.element.focus();\n } else {\n this.setCurrentDropTarget(this.validDropTargets[this.validDropTargets.length - 1]);\n }\n } else {\n this.setCurrentDropTarget(this.validDropTargets[index - 1]);\n }\n }\n\n findNearestDropTarget(): number {\n let dragTargetRect = this.dragTarget.element.getBoundingClientRect();\n\n let minDistance = Infinity;\n let nearest = -1;\n for (let i = 0; i < this.validDropTargets.length; i++) {\n let dropTarget = this.validDropTargets[i];\n let rect = dropTarget.element.getBoundingClientRect();\n let dx = rect.left - dragTargetRect.left;\n let dy = rect.top - dragTargetRect.top;\n let dist = (dx * dx) + (dy * dy);\n if (dist < minDistance) {\n minDistance = dist;\n nearest = i;\n }\n }\n\n return nearest;\n }\n\n setCurrentDropTarget(dropTarget: DropTarget, item?: DroppableItem) {\n if (dropTarget !== this.currentDropTarget) {\n if (this.currentDropTarget && typeof this.currentDropTarget.onDropExit === 'function') {\n let rect = this.currentDropTarget.element.getBoundingClientRect();\n this.currentDropTarget.onDropExit({\n type: 'dropexit',\n x: rect.left + (rect.width / 2),\n y: rect.top + (rect.height / 2)\n });\n }\n\n this.currentDropTarget = dropTarget;\n\n if (dropTarget) {\n if (typeof dropTarget.onDropEnter === 'function') {\n let rect = dropTarget.element.getBoundingClientRect();\n dropTarget.onDropEnter({\n type: 'dropenter',\n x: rect.left + (rect.width / 2),\n y: rect.top + (rect.height / 2)\n }, this.dragTarget);\n }\n\n if (!item) {\n dropTarget?.element.focus();\n }\n }\n }\n\n if (item !== this.currentDropItem) {\n if (item && typeof this.currentDropTarget.onDropTargetEnter === 'function') {\n this.currentDropTarget.onDropTargetEnter(item?.target);\n }\n\n item?.element.focus();\n this.currentDropItem = item;\n\n // Announce first drop target after drag start announcement finishes.\n // Otherwise, it will never get announced because drag start announcement is assertive.\n if (!this.initialFocused) {\n announce(item?.element.getAttribute('aria-label'), 'polite');\n this.initialFocused = true;\n }\n }\n }\n\n end() {\n this.teardown();\n endDragging();\n\n if (typeof this.dragTarget.onDragEnd === 'function') {\n let target = this.currentDropTarget && this.dropOperation !== 'cancel' ? this.currentDropTarget : this.dragTarget;\n let rect = target.element.getBoundingClientRect();\n this.dragTarget.onDragEnd({\n type: 'dragend',\n x: rect.x + (rect.width / 2),\n y: rect.y + (rect.height / 2),\n dropOperation: this.dropOperation || 'cancel'\n });\n }\n\n // Blur and re-focus the drop target so that the focus ring appears.\n if (this.currentDropTarget) {\n // Since we cancel all focus events in drag sessions, refire blur to make sure state gets updated so drag target doesn't think it's still focused\n // i.e. When you from one list to another during a drag session, we need the blur to fire on the first list after the drag.\n if (!this.dragTarget.element.contains(this.currentDropTarget.element)) {\n this.dragTarget.element.dispatchEvent(new FocusEvent('blur'));\n this.dragTarget.element.dispatchEvent(new FocusEvent('focusout', {bubbles: true}));\n }\n // Re-focus the focusedKey upon reorder. This requires a React rerender between blurring and focusing.\n flushSync(() => {\n this.currentDropTarget.element.blur();\n });\n this.currentDropTarget.element.focus();\n }\n\n this.setCurrentDropTarget(null);\n }\n\n cancel() {\n this.setCurrentDropTarget(null);\n this.end();\n if (!this.dragTarget.element.closest('[aria-hidden=\"true\"]')) {\n this.dragTarget.element.focus();\n }\n\n announce(this.stringFormatter.format('dropCanceled'));\n }\n\n drop(item?: DroppableItem) {\n if (!this.currentDropTarget) {\n this.cancel();\n return;\n }\n\n if (typeof item?.getDropOperation === 'function') {\n let types = getTypes(this.dragTarget.items);\n this.dropOperation = item.getDropOperation(types, this.dragTarget.allowedDropOperations);\n } else if (typeof this.currentDropTarget.getDropOperation === 'function') {\n let types = getTypes(this.dragTarget.items);\n this.dropOperation = this.currentDropTarget.getDropOperation(types, this.dragTarget.allowedDropOperations);\n } else {\n // TODO: show menu ??\n this.dropOperation = this.dragTarget.allowedDropOperations[0];\n }\n\n if (typeof this.currentDropTarget.onDrop === 'function') {\n let items: DropItem[] = this.dragTarget.items.map(item => ({\n kind: 'text',\n types: new Set(Object.keys(item)),\n getText: (type: string) => Promise.resolve(item[type])\n }));\n\n let rect = this.currentDropTarget.element.getBoundingClientRect();\n this.currentDropTarget.onDrop({\n type: 'drop',\n x: rect.left + (rect.width / 2),\n y: rect.top + (rect.height / 2),\n items,\n dropOperation: this.dropOperation\n }, item?.target);\n }\n\n this.end();\n announce(this.stringFormatter.format('dropComplete'));\n }\n\n activate() {\n if (this.currentDropTarget && typeof this.currentDropTarget.onDropActivate === 'function') {\n let rect = this.currentDropTarget.element.getBoundingClientRect();\n this.currentDropTarget.onDropActivate({\n type: 'dropactivate',\n x: rect.left + (rect.width / 2),\n y: rect.top + (rect.height / 2)\n });\n }\n }\n}\n\nfunction findValidDropTargets(options: DragTarget) {\n let types = getTypes(options.items);\n return [...dropTargets.values()].filter(target => {\n if (target.element.closest('[aria-hidden=\"true\"]')) {\n return false;\n }\n\n if (typeof target.getDropOperation === 'function') {\n return target.getDropOperation(types, options.allowedDropOperations) !== 'cancel';\n }\n\n return true;\n });\n}\n"],"names":[],"version":3,"file":"DragManager.main.js.map"}