@atlaskit/pragmatic-drag-and-drop 0.17.0

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 (155) hide show
  1. package/CHANGELOG.md +209 -0
  2. package/LICENSE.md +13 -0
  3. package/README.md +43 -0
  4. package/__perf__/add-example.todo +1 -0
  5. package/adapter/element/package.json +15 -0
  6. package/adapter/file/package.json +15 -0
  7. package/addon/cancel-unhandled/package.json +15 -0
  8. package/constellation/index/about.mdx +329 -0
  9. package/constellation/index/props.mdx +3 -0
  10. package/dist/cjs/adapter/element-adapter.js +151 -0
  11. package/dist/cjs/adapter/file-adapter.js +98 -0
  12. package/dist/cjs/addon/cancel-unhandled.js +50 -0
  13. package/dist/cjs/entry-point/adapter/element.js +24 -0
  14. package/dist/cjs/entry-point/adapter/file.js +18 -0
  15. package/dist/cjs/entry-point/addon/cancel-unhandled.js +12 -0
  16. package/dist/cjs/entry-point/experimental/cross-with-element-adapter.js +30 -0
  17. package/dist/cjs/entry-point/types.js +5 -0
  18. package/dist/cjs/entry-point/util/combine.js +12 -0
  19. package/dist/cjs/entry-point/util/disable-native-drag-preview.js +12 -0
  20. package/dist/cjs/entry-point/util/once.js +12 -0
  21. package/dist/cjs/entry-point/util/reorder.js +12 -0
  22. package/dist/cjs/entry-point/util/scroll-just-enough-into-view.js +12 -0
  23. package/dist/cjs/entry-point/util/set-custom-native-drag-preview.js +12 -0
  24. package/dist/cjs/experimental/cross-window-element-adapter.js +131 -0
  25. package/dist/cjs/index.js +12 -0
  26. package/dist/cjs/internal-types.js +5 -0
  27. package/dist/cjs/ledger/dispatch-consumer-event.js +132 -0
  28. package/dist/cjs/ledger/lifecycle-manager.js +335 -0
  29. package/dist/cjs/ledger/usage-ledger.js +37 -0
  30. package/dist/cjs/make-adapter/make-adapter.js +59 -0
  31. package/dist/cjs/make-adapter/make-drop-target.js +271 -0
  32. package/dist/cjs/make-adapter/make-monitor.js +100 -0
  33. package/dist/cjs/util/add-attribute.js +14 -0
  34. package/dist/cjs/util/combine.js +17 -0
  35. package/dist/cjs/util/disable-native-drag-preview.js +36 -0
  36. package/dist/cjs/util/entering-and-leaving-the-window.js +162 -0
  37. package/dist/cjs/util/fix-post-drag-pointer-bug.js +114 -0
  38. package/dist/cjs/util/get-input.js +20 -0
  39. package/dist/cjs/util/once.js +22 -0
  40. package/dist/cjs/util/reorder.js +26 -0
  41. package/dist/cjs/util/scroll-just-enough-into-view.js +17 -0
  42. package/dist/cjs/util/set-custom-native-drag-preview.js +109 -0
  43. package/dist/cjs/version.json +5 -0
  44. package/dist/es2019/adapter/element-adapter.js +143 -0
  45. package/dist/es2019/adapter/file-adapter.js +90 -0
  46. package/dist/es2019/addon/cancel-unhandled.js +43 -0
  47. package/dist/es2019/entry-point/adapter/element.js +1 -0
  48. package/dist/es2019/entry-point/adapter/file.js +1 -0
  49. package/dist/es2019/entry-point/addon/cancel-unhandled.js +1 -0
  50. package/dist/es2019/entry-point/experimental/cross-with-element-adapter.js +1 -0
  51. package/dist/es2019/entry-point/types.js +1 -0
  52. package/dist/es2019/entry-point/util/combine.js +1 -0
  53. package/dist/es2019/entry-point/util/disable-native-drag-preview.js +1 -0
  54. package/dist/es2019/entry-point/util/once.js +1 -0
  55. package/dist/es2019/entry-point/util/reorder.js +1 -0
  56. package/dist/es2019/entry-point/util/scroll-just-enough-into-view.js +1 -0
  57. package/dist/es2019/entry-point/util/set-custom-native-drag-preview.js +1 -0
  58. package/dist/es2019/experimental/cross-window-element-adapter.js +121 -0
  59. package/dist/es2019/index.js +7 -0
  60. package/dist/es2019/internal-types.js +1 -0
  61. package/dist/es2019/ledger/dispatch-consumer-event.js +128 -0
  62. package/dist/es2019/ledger/lifecycle-manager.js +333 -0
  63. package/dist/es2019/ledger/usage-ledger.js +32 -0
  64. package/dist/es2019/make-adapter/make-adapter.js +55 -0
  65. package/dist/es2019/make-adapter/make-drop-target.js +233 -0
  66. package/dist/es2019/make-adapter/make-monitor.js +80 -0
  67. package/dist/es2019/util/add-attribute.js +7 -0
  68. package/dist/es2019/util/combine.js +6 -0
  69. package/dist/es2019/util/disable-native-drag-preview.js +31 -0
  70. package/dist/es2019/util/entering-and-leaving-the-window.js +159 -0
  71. package/dist/es2019/util/fix-post-drag-pointer-bug.js +110 -0
  72. package/dist/es2019/util/get-input.js +14 -0
  73. package/dist/es2019/util/once.js +13 -0
  74. package/dist/es2019/util/reorder.js +17 -0
  75. package/dist/es2019/util/scroll-just-enough-into-view.js +12 -0
  76. package/dist/es2019/util/set-custom-native-drag-preview.js +106 -0
  77. package/dist/es2019/version.json +5 -0
  78. package/dist/esm/adapter/element-adapter.js +142 -0
  79. package/dist/esm/adapter/file-adapter.js +90 -0
  80. package/dist/esm/addon/cancel-unhandled.js +43 -0
  81. package/dist/esm/entry-point/adapter/element.js +1 -0
  82. package/dist/esm/entry-point/adapter/file.js +1 -0
  83. package/dist/esm/entry-point/addon/cancel-unhandled.js +1 -0
  84. package/dist/esm/entry-point/experimental/cross-with-element-adapter.js +1 -0
  85. package/dist/esm/entry-point/types.js +1 -0
  86. package/dist/esm/entry-point/util/combine.js +1 -0
  87. package/dist/esm/entry-point/util/disable-native-drag-preview.js +1 -0
  88. package/dist/esm/entry-point/util/once.js +1 -0
  89. package/dist/esm/entry-point/util/reorder.js +1 -0
  90. package/dist/esm/entry-point/util/scroll-just-enough-into-view.js +1 -0
  91. package/dist/esm/entry-point/util/set-custom-native-drag-preview.js +1 -0
  92. package/dist/esm/experimental/cross-window-element-adapter.js +120 -0
  93. package/dist/esm/index.js +7 -0
  94. package/dist/esm/internal-types.js +1 -0
  95. package/dist/esm/ledger/dispatch-consumer-event.js +125 -0
  96. package/dist/esm/ledger/lifecycle-manager.js +328 -0
  97. package/dist/esm/ledger/usage-ledger.js +31 -0
  98. package/dist/esm/make-adapter/make-adapter.js +53 -0
  99. package/dist/esm/make-adapter/make-drop-target.js +264 -0
  100. package/dist/esm/make-adapter/make-monitor.js +93 -0
  101. package/dist/esm/util/add-attribute.js +8 -0
  102. package/dist/esm/util/combine.js +11 -0
  103. package/dist/esm/util/disable-native-drag-preview.js +30 -0
  104. package/dist/esm/util/entering-and-leaving-the-window.js +156 -0
  105. package/dist/esm/util/fix-post-drag-pointer-bug.js +108 -0
  106. package/dist/esm/util/get-input.js +14 -0
  107. package/dist/esm/util/once.js +16 -0
  108. package/dist/esm/util/reorder.js +19 -0
  109. package/dist/esm/util/scroll-just-enough-into-view.js +11 -0
  110. package/dist/esm/util/set-custom-native-drag-preview.js +104 -0
  111. package/dist/esm/version.json +5 -0
  112. package/dist/types/adapter/element-adapter.d.ts +42 -0
  113. package/dist/types/adapter/file-adapter.d.ts +18 -0
  114. package/dist/types/addon/cancel-unhandled.d.ts +7 -0
  115. package/dist/types/entry-point/adapter/element.d.ts +2 -0
  116. package/dist/types/entry-point/adapter/file.d.ts +2 -0
  117. package/dist/types/entry-point/addon/cancel-unhandled.d.ts +1 -0
  118. package/dist/types/entry-point/experimental/cross-with-element-adapter.d.ts +1 -0
  119. package/dist/types/entry-point/types.d.ts +1 -0
  120. package/dist/types/entry-point/util/combine.d.ts +1 -0
  121. package/dist/types/entry-point/util/disable-native-drag-preview.d.ts +1 -0
  122. package/dist/types/entry-point/util/once.d.ts +1 -0
  123. package/dist/types/entry-point/util/reorder.d.ts +1 -0
  124. package/dist/types/entry-point/util/scroll-just-enough-into-view.d.ts +1 -0
  125. package/dist/types/entry-point/util/set-custom-native-drag-preview.d.ts +1 -0
  126. package/dist/types/experimental/cross-window-element-adapter.d.ts +17 -0
  127. package/dist/types/index.d.ts +2 -0
  128. package/dist/types/internal-types.d.ts +275 -0
  129. package/dist/types/ledger/dispatch-consumer-event.d.ts +26 -0
  130. package/dist/types/ledger/lifecycle-manager.d.ts +16 -0
  131. package/dist/types/ledger/usage-ledger.d.ts +5 -0
  132. package/dist/types/make-adapter/make-adapter.d.ts +14 -0
  133. package/dist/types/make-adapter/make-drop-target.d.ts +5 -0
  134. package/dist/types/make-adapter/make-monitor.d.ts +8 -0
  135. package/dist/types/util/add-attribute.d.ts +5 -0
  136. package/dist/types/util/combine.d.ts +3 -0
  137. package/dist/types/util/disable-native-drag-preview.d.ts +3 -0
  138. package/dist/types/util/entering-and-leaving-the-window.d.ts +6 -0
  139. package/dist/types/util/fix-post-drag-pointer-bug.d.ts +14 -0
  140. package/dist/types/util/get-input.d.ts +2 -0
  141. package/dist/types/util/once.d.ts +2 -0
  142. package/dist/types/util/reorder.d.ts +9 -0
  143. package/dist/types/util/scroll-just-enough-into-view.d.ts +7 -0
  144. package/dist/types/util/set-custom-native-drag-preview.d.ts +52 -0
  145. package/experimental/cross-window-element-adapter/package.json +15 -0
  146. package/package.json +87 -0
  147. package/report.api.md +35 -0
  148. package/tmp/api-report-tmp.d.ts +13 -0
  149. package/types/package.json +15 -0
  150. package/util/combine/package.json +15 -0
  151. package/util/disable-native-drag-preview/package.json +15 -0
  152. package/util/once/package.json +15 -0
  153. package/util/reorder/package.json +15 -0
  154. package/util/scroll-just-enough-into-view/package.json +15 -0
  155. package/util/set-custom-native-drag-preview/package.json +15 -0
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.draggable = draggable;
7
+ exports.monitorForElements = exports.dropTargetForElements = void 0;
8
+ var _bindEventListener = require("bind-event-listener");
9
+ var _makeAdapter = require("../make-adapter/make-adapter");
10
+ var _addAttribute = require("../util/add-attribute");
11
+ var _combine = require("../util/combine");
12
+ var _getInput = require("../util/get-input");
13
+ var draggableRegistry = new WeakMap();
14
+ function addToRegistry(args) {
15
+ draggableRegistry.set(args.element, args);
16
+ return function cleanup() {
17
+ draggableRegistry.delete(args.element);
18
+ };
19
+ }
20
+ var adapter = (0, _makeAdapter.makeAdapter)({
21
+ typeKey: 'element',
22
+ defaultDropEffect: 'move',
23
+ mount: function mount(api) {
24
+ return (0, _bindEventListener.bind)(window, {
25
+ type: 'dragstart',
26
+ listener: function listener(event) {
27
+ var _entry$dragHandle, _entry$dragHandle2, _entry$getInitialData, _entry$getInitialData2;
28
+ if (!api.canStart(event)) {
29
+ return;
30
+ }
31
+ // the closest parent that is a draggable element will be marked as
32
+ // the `event.target` for the event
33
+ var target = event.target;
34
+
35
+ // this source is only for elements
36
+ // Note: only HTMLElements can have the "draggable" attribute
37
+ if (!(target instanceof HTMLElement)) {
38
+ return null;
39
+ }
40
+
41
+ // see if the thing being dragged is owned by us
42
+ var entry = draggableRegistry.get(target);
43
+
44
+ // no matching element found
45
+ // → dragging an element with `draggable="true"` that is not controlled by us
46
+ if (!entry) {
47
+ return null;
48
+ }
49
+ var input = (0, _getInput.getInput)(event);
50
+ var feedback = {
51
+ element: entry.element,
52
+ dragHandle: (_entry$dragHandle = entry.dragHandle) !== null && _entry$dragHandle !== void 0 ? _entry$dragHandle : null,
53
+ input: input
54
+ };
55
+
56
+ // Check: does the draggable want to allow dragging?
57
+ if (entry.canDrag && !entry.canDrag(feedback)) {
58
+ // cancel drag operation if we cannot drag
59
+ event.preventDefault();
60
+ return null;
61
+ }
62
+
63
+ // Check: is there a drag handle and is the user using it?
64
+ if (entry.dragHandle) {
65
+ var over = document.elementFromPoint(input.clientX, input.clientY);
66
+
67
+ // if we are not dragging from the drag handle (or something inside the drag handle)
68
+ // then we will cancel the active drag
69
+ if (!entry.dragHandle.contains(over)) {
70
+ event.preventDefault();
71
+ return null;
72
+ }
73
+ }
74
+
75
+ // Must set any media type for iOS15 to work
76
+ // Doing this will fail in firefox though, so we
77
+ // wrap the operation in a try/catch
78
+ try {
79
+ var _event$dataTransfer;
80
+ (_event$dataTransfer = event.dataTransfer) === null || _event$dataTransfer === void 0 ? void 0 : _event$dataTransfer.setData('application/vnd.pdnd', '');
81
+ } catch (e) {}
82
+ var payload = {
83
+ element: entry.element,
84
+ dragHandle: (_entry$dragHandle2 = entry.dragHandle) !== null && _entry$dragHandle2 !== void 0 ? _entry$dragHandle2 : null,
85
+ data: (_entry$getInitialData = (_entry$getInitialData2 = entry.getInitialData) === null || _entry$getInitialData2 === void 0 ? void 0 : _entry$getInitialData2.call(entry, feedback)) !== null && _entry$getInitialData !== void 0 ? _entry$getInitialData : {}
86
+ };
87
+ var makeDragType = {
88
+ key: 'element',
89
+ startedFrom: 'internal',
90
+ payload: payload
91
+ };
92
+ api.start({
93
+ event: event,
94
+ dragInterface: makeDragType
95
+ });
96
+ }
97
+ });
98
+ },
99
+ dispatchEventToSource: function dispatchEventToSource(_ref) {
100
+ var _draggableRegistry$ge, _draggableRegistry$ge2;
101
+ var eventName = _ref.eventName,
102
+ payload = _ref.payload;
103
+ // During a drag operation, a draggable can be:
104
+ // - remounted with different functions
105
+ // - removed completely
106
+ // So we need to get the latest entry from the registry in order
107
+ // to call the latest event functions
108
+
109
+ (_draggableRegistry$ge = draggableRegistry.get(payload.source.element)) === null || _draggableRegistry$ge === void 0 ? void 0 : (_draggableRegistry$ge2 = _draggableRegistry$ge[eventName]) === null || _draggableRegistry$ge2 === void 0 ? void 0 : _draggableRegistry$ge2.call(_draggableRegistry$ge,
110
+ // I cannot seem to get the types right here.
111
+ // TS doesn't seem to like that one event can need `nativeSetDragImage`
112
+ // @ts-expect-error
113
+ payload);
114
+ }
115
+ });
116
+ var dropTargetForElements = adapter.dropTarget;
117
+ exports.dropTargetForElements = dropTargetForElements;
118
+ var monitorForElements = adapter.monitor;
119
+ exports.monitorForElements = monitorForElements;
120
+ function draggable(args) {
121
+ // Guardrail: warn if the drag handle is not contained in draggable element
122
+ if (process.env.NODE_ENV !== 'production') {
123
+ if (args.dragHandle && !args.element.contains(args.dragHandle)) {
124
+ // eslint-disable-next-line no-console
125
+ console.warn('Drag handle element must be contained in draggable element', {
126
+ element: args.element,
127
+ dragHandle: args.dragHandle
128
+ });
129
+ }
130
+ }
131
+ // Guardrail: warn if the draggable element is already registered
132
+ if (process.env.NODE_ENV !== 'production') {
133
+ var existing = draggableRegistry.get(args.element);
134
+ if (existing) {
135
+ // eslint-disable-next-line no-console
136
+ console.warn('You have already registered a `draggable` on the same element', {
137
+ existing: existing,
138
+ proposed: args
139
+ });
140
+ }
141
+ }
142
+ return (0, _combine.combine)(
143
+ // making the draggable register the adapter rather than drop targets
144
+ // this is because you *must* have a draggable element to start a drag
145
+ // but you _might_ not have any drop targets immediately
146
+ // (You might create drop targets async)
147
+ adapter.registerUsage(), addToRegistry(args), (0, _addAttribute.addAttribute)(args.element, {
148
+ attribute: 'draggable',
149
+ value: 'true'
150
+ }));
151
+ }
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.monitorForFiles = exports.dropTargetForFiles = void 0;
7
+ var _bindEventListener = require("bind-event-listener");
8
+ var _makeAdapter = require("../make-adapter/make-adapter");
9
+ var _combine = require("../util/combine");
10
+ var _enteringAndLeavingTheWindow = require("../util/entering-and-leaving-the-window");
11
+ function getFileItems(event) {
12
+ if (event.dataTransfer == null) {
13
+ return null;
14
+ }
15
+ // filtering out anything that is not a file
16
+ var items = event.dataTransfer.items;
17
+ for (var i = 0; i < items.length; i++) {
18
+ var item = items[i];
19
+ if (item.kind !== 'file') {
20
+ items.remove(i);
21
+ }
22
+ }
23
+ return items;
24
+ }
25
+ var adapter = (0, _makeAdapter.makeAdapter)({
26
+ typeKey: 'file',
27
+ defaultDropEffect: 'copy',
28
+ mount: function mount(api) {
29
+ return (0, _bindEventListener.bind)(window, {
30
+ type: 'dragenter',
31
+ listener: function listener(event) {
32
+ if (!api.canStart(event)) {
33
+ return;
34
+ }
35
+
36
+ // already cancelled by something else
37
+ if (event.defaultPrevented) {
38
+ return;
39
+ }
40
+ if (!(0, _enteringAndLeavingTheWindow.isEnteringWindow)({
41
+ dragEnter: event
42
+ })) {
43
+ return;
44
+ }
45
+ if (event.dataTransfer == null) {
46
+ return;
47
+ }
48
+
49
+ // Checking if we are dragging any files
50
+ // This check works in Chrome, Firefox and Chrome
51
+ if (!event.dataTransfer.types.includes('Files')) {
52
+ return null;
53
+ }
54
+ var dragInterface = {
55
+ key: 'file',
56
+ startedFrom: 'external',
57
+ payload: {
58
+ // Not giving `.items` initially as it cannot be safely and consistently
59
+ // accessed across browsers
60
+ // Not giving `.types` as the consumer already knows a file is being dragged
61
+ items: null
62
+ },
63
+ getDropPayload: function getDropPayload(event) {
64
+ return {
65
+ items: getFileItems(event)
66
+ };
67
+ }
68
+ };
69
+ api.start({
70
+ event: event,
71
+ dragInterface: dragInterface
72
+ });
73
+ }
74
+ });
75
+ }
76
+ });
77
+
78
+ // Some events don't make sense for external files
79
+ //
80
+ // onGenerateDragPreview: drag preview is always generated by the browser
81
+ // type WithoutUselessEvents<T> = Omit<T, 'onDragStart' | 'onGenerateDragPreview'>;
82
+ //
83
+ // onDragStart: an external file can never start from inside a drop target
84
+ // (it will always come from outside and we never let a file drag start in a drop target)
85
+ // We remove `onDragStart` from drop targets, but monitors can still listen for a start
86
+ var dropTargetForFiles = function dropTargetForFiles(args) {
87
+ return (0, _combine.combine)(
88
+ // at least one drop target required before we will start listening for file events
89
+ adapter.registerUsage(),
90
+ // note: not removing unsupported events from args; just leaning on the type system
91
+ adapter.dropTarget(args));
92
+ };
93
+ exports.dropTargetForFiles = dropTargetForFiles;
94
+ var monitorForFiles = function monitorForFiles(args) {
95
+ // note: not removing unsupported events from args; just leaning on the type system
96
+ return adapter.monitor(args);
97
+ };
98
+ exports.monitorForFiles = monitorForFiles;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.cancelUnhandled = void 0;
7
+ var _bindEventListener = require("bind-event-listener");
8
+ function cancel(event) {
9
+ // if `@atlaskit/pragmatic-drag-and-drop` has already prevented the event
10
+ // we don't need to do anything
11
+ if (event.defaultPrevented) {
12
+ return;
13
+ }
14
+ // Using "move" as the drop effect as that uses the standard
15
+ // cursor. Doing this so the user doesn't think they are dropping
16
+ // on the page
17
+ // Note: using "none" will not allow a drop to occur, so we are using "move"
18
+ if (event.dataTransfer) {
19
+ event.dataTransfer.dropEffect = 'move';
20
+ }
21
+ // cancel the default browser behaviour
22
+ // doing this will tell the browser that we have handled the drop
23
+ event.preventDefault();
24
+ }
25
+ var unbindEvents = null;
26
+ /**
27
+ * Block drag operations outside of `@atlaskit/pragmatic-drag-and-drop`
28
+ */
29
+ var cancelUnhandled = {
30
+ start: function start() {
31
+ var _unbindEvents;
32
+ (_unbindEvents = unbindEvents) === null || _unbindEvents === void 0 ? void 0 : _unbindEvents();
33
+ unbindEvents = (0, _bindEventListener.bindAll)(window, [{
34
+ type: 'dragover',
35
+ listener: cancel
36
+ }, {
37
+ type: 'dragenter',
38
+ listener: cancel
39
+ }, {
40
+ type: 'drop',
41
+ listener: cancel
42
+ }]);
43
+ },
44
+ stop: function stop() {
45
+ var _unbindEvents2;
46
+ (_unbindEvents2 = unbindEvents) === null || _unbindEvents2 === void 0 ? void 0 : _unbindEvents2();
47
+ unbindEvents = null;
48
+ }
49
+ };
50
+ exports.cancelUnhandled = cancelUnhandled;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "draggable", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _elementAdapter.draggable;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "dropTargetForElements", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _elementAdapter.dropTargetForElements;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "monitorForElements", {
19
+ enumerable: true,
20
+ get: function get() {
21
+ return _elementAdapter.monitorForElements;
22
+ }
23
+ });
24
+ var _elementAdapter = require("../../adapter/element-adapter");
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "dropTargetForFiles", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _fileAdapter.dropTargetForFiles;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "monitorForFiles", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _fileAdapter.monitorForFiles;
16
+ }
17
+ });
18
+ var _fileAdapter = require("../../adapter/file-adapter");
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "cancelUnhandled", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _cancelUnhandled.cancelUnhandled;
10
+ }
11
+ });
12
+ var _cancelUnhandled = require("../../addon/cancel-unhandled");
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "dropTargetForCrossWindowElements", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _crossWindowElementAdapter.dropTargetForCrossWindowElements;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "extractCrossWindowResult", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _crossWindowElementAdapter.extractCrossWindowResult;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "monitorForCrossWindowElements", {
19
+ enumerable: true,
20
+ get: function get() {
21
+ return _crossWindowElementAdapter.monitorForCrossWindowElements;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "setCrossWindowData", {
25
+ enumerable: true,
26
+ get: function get() {
27
+ return _crossWindowElementAdapter.setCrossWindowData;
28
+ }
29
+ });
30
+ var _crossWindowElementAdapter = require("../../experimental/cross-window-element-adapter");
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "combine", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _combine.combine;
10
+ }
11
+ });
12
+ var _combine = require("../../util/combine");
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "disableNativeDragPreview", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _disableNativeDragPreview.disableNativeDragPreview;
10
+ }
11
+ });
12
+ var _disableNativeDragPreview = require("../../util/disable-native-drag-preview");
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "once", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _once.once;
10
+ }
11
+ });
12
+ var _once = require("../../util/once");
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "reorder", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _reorder.reorder;
10
+ }
11
+ });
12
+ var _reorder = require("../../util/reorder");
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "scrollJustEnoughIntoView", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _scrollJustEnoughIntoView.scrollJustEnoughIntoView;
10
+ }
11
+ });
12
+ var _scrollJustEnoughIntoView = require("../../util/scroll-just-enough-into-view");
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "setCustomNativeDragPreview", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _setCustomNativeDragPreview.setCustomNativeDragPreview;
10
+ }
11
+ });
12
+ var _setCustomNativeDragPreview = require("../../util/set-custom-native-drag-preview");
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.dropTargetForCrossWindowElements = void 0;
7
+ exports.extractCrossWindowResult = extractCrossWindowResult;
8
+ exports.monitorForCrossWindowElements = void 0;
9
+ exports.setCrossWindowData = setCrossWindowData;
10
+ var _bindEventListener = require("bind-event-listener");
11
+ var _makeAdapter = require("../make-adapter/make-adapter");
12
+ var _combine = require("../util/combine");
13
+ var _enteringAndLeavingTheWindow = require("../util/entering-and-leaving-the-window");
14
+ var storage = function () {
15
+ var dataKey = 'private-pdnd-data';
16
+ var resultKey = 'private-pdnd-result';
17
+ function tryParse(raw) {
18
+ if (raw == null) {
19
+ return null;
20
+ }
21
+ try {
22
+ return JSON.parse(raw);
23
+ } catch (e) {
24
+ // failed to parse
25
+ return null;
26
+ }
27
+ }
28
+ function setData(data) {
29
+ // clearing a result when we set data
30
+ clearStorage();
31
+ localStorage.setItem(dataKey, JSON.stringify(data));
32
+ }
33
+ function findData() {
34
+ return tryParse(localStorage.getItem(dataKey));
35
+ }
36
+ function setResult(result) {
37
+ localStorage.setItem(resultKey, result);
38
+ }
39
+ function findResult() {
40
+ var raw = localStorage.getItem(resultKey);
41
+ if (raw == null) {
42
+ return null;
43
+ }
44
+
45
+ // TODO: improve type
46
+ return raw;
47
+ }
48
+ function clearStorage() {
49
+ localStorage.removeItem(dataKey);
50
+ localStorage.removeItem(resultKey);
51
+ }
52
+ return {
53
+ clearStorage: clearStorage,
54
+ setData: setData,
55
+ findData: findData,
56
+ setResult: setResult,
57
+ findResult: findResult
58
+ };
59
+ }();
60
+ var adapter = (0, _makeAdapter.makeAdapter)({
61
+ typeKey: 'experimental-cross-window-element',
62
+ defaultDropEffect: 'move',
63
+ mount: function mount(api) {
64
+ return (0, _combine.combine)((0, _bindEventListener.bindAll)(window, [{
65
+ type: 'dragenter',
66
+ listener: function listener(event) {
67
+ if (!api.canStart(event)) {
68
+ return;
69
+ }
70
+
71
+ // already cancelled by something else
72
+ if (event.defaultPrevented) {
73
+ return;
74
+ }
75
+ if (!(0, _enteringAndLeavingTheWindow.isEnteringWindow)({
76
+ dragEnter: event
77
+ })) {
78
+ return;
79
+ }
80
+
81
+ // we only care about when the window is being first entered
82
+ if (event.relatedTarget != null) {
83
+ return null;
84
+ }
85
+ var data = storage.findData();
86
+ if (data == null) {
87
+ return;
88
+ }
89
+ var dragInterface = {
90
+ key: 'experimental-cross-window-element',
91
+ startedFrom: 'external',
92
+ payload: {
93
+ data: data
94
+ }
95
+ };
96
+ api.start({
97
+ event: event,
98
+ dragInterface: dragInterface
99
+ });
100
+ }
101
+ },
102
+ // always clear a external drag result from another window before a drag starts
103
+ {
104
+ type: 'dragstart',
105
+ listener: storage.clearStorage,
106
+ options: {
107
+ capture: true
108
+ }
109
+ }]), adapter.monitor({
110
+ onDrop: function onDrop(payload) {
111
+ var result = payload.location.current.dropTargets.length > 0 ? 'moved' : 'none';
112
+ storage.setResult(result);
113
+ }
114
+ }));
115
+ }
116
+ });
117
+ function setCrossWindowData(_ref) {
118
+ var data = _ref.data;
119
+ storage.setData(data);
120
+ }
121
+ function extractCrossWindowResult() {
122
+ return storage.findResult();
123
+ }
124
+ var dropTargetForCrossWindowElements = function dropTargetForCrossWindowElements(args) {
125
+ return (0, _combine.combine)(
126
+ // at least one drop target required before we will start listening for cross element dragging
127
+ adapter.registerUsage(), adapter.dropTarget(args));
128
+ };
129
+ exports.dropTargetForCrossWindowElements = dropTargetForCrossWindowElements;
130
+ var monitorForCrossWindowElements = adapter.monitor;
131
+ exports.monitorForCrossWindowElements = monitorForCrossWindowElements;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ // This file exists for module resolution purposes.
8
+ // Not exporting anything from the root entry point
9
+ // Please use individual entry points in order to always
10
+ // obtain minimum kbs.
11
+ var _default = {};
12
+ exports.default = _default;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });