@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.
- package/CHANGELOG.md +209 -0
- package/LICENSE.md +13 -0
- package/README.md +43 -0
- package/__perf__/add-example.todo +1 -0
- package/adapter/element/package.json +15 -0
- package/adapter/file/package.json +15 -0
- package/addon/cancel-unhandled/package.json +15 -0
- package/constellation/index/about.mdx +329 -0
- package/constellation/index/props.mdx +3 -0
- package/dist/cjs/adapter/element-adapter.js +151 -0
- package/dist/cjs/adapter/file-adapter.js +98 -0
- package/dist/cjs/addon/cancel-unhandled.js +50 -0
- package/dist/cjs/entry-point/adapter/element.js +24 -0
- package/dist/cjs/entry-point/adapter/file.js +18 -0
- package/dist/cjs/entry-point/addon/cancel-unhandled.js +12 -0
- package/dist/cjs/entry-point/experimental/cross-with-element-adapter.js +30 -0
- package/dist/cjs/entry-point/types.js +5 -0
- package/dist/cjs/entry-point/util/combine.js +12 -0
- package/dist/cjs/entry-point/util/disable-native-drag-preview.js +12 -0
- package/dist/cjs/entry-point/util/once.js +12 -0
- package/dist/cjs/entry-point/util/reorder.js +12 -0
- package/dist/cjs/entry-point/util/scroll-just-enough-into-view.js +12 -0
- package/dist/cjs/entry-point/util/set-custom-native-drag-preview.js +12 -0
- package/dist/cjs/experimental/cross-window-element-adapter.js +131 -0
- package/dist/cjs/index.js +12 -0
- package/dist/cjs/internal-types.js +5 -0
- package/dist/cjs/ledger/dispatch-consumer-event.js +132 -0
- package/dist/cjs/ledger/lifecycle-manager.js +335 -0
- package/dist/cjs/ledger/usage-ledger.js +37 -0
- package/dist/cjs/make-adapter/make-adapter.js +59 -0
- package/dist/cjs/make-adapter/make-drop-target.js +271 -0
- package/dist/cjs/make-adapter/make-monitor.js +100 -0
- package/dist/cjs/util/add-attribute.js +14 -0
- package/dist/cjs/util/combine.js +17 -0
- package/dist/cjs/util/disable-native-drag-preview.js +36 -0
- package/dist/cjs/util/entering-and-leaving-the-window.js +162 -0
- package/dist/cjs/util/fix-post-drag-pointer-bug.js +114 -0
- package/dist/cjs/util/get-input.js +20 -0
- package/dist/cjs/util/once.js +22 -0
- package/dist/cjs/util/reorder.js +26 -0
- package/dist/cjs/util/scroll-just-enough-into-view.js +17 -0
- package/dist/cjs/util/set-custom-native-drag-preview.js +109 -0
- package/dist/cjs/version.json +5 -0
- package/dist/es2019/adapter/element-adapter.js +143 -0
- package/dist/es2019/adapter/file-adapter.js +90 -0
- package/dist/es2019/addon/cancel-unhandled.js +43 -0
- package/dist/es2019/entry-point/adapter/element.js +1 -0
- package/dist/es2019/entry-point/adapter/file.js +1 -0
- package/dist/es2019/entry-point/addon/cancel-unhandled.js +1 -0
- package/dist/es2019/entry-point/experimental/cross-with-element-adapter.js +1 -0
- package/dist/es2019/entry-point/types.js +1 -0
- package/dist/es2019/entry-point/util/combine.js +1 -0
- package/dist/es2019/entry-point/util/disable-native-drag-preview.js +1 -0
- package/dist/es2019/entry-point/util/once.js +1 -0
- package/dist/es2019/entry-point/util/reorder.js +1 -0
- package/dist/es2019/entry-point/util/scroll-just-enough-into-view.js +1 -0
- package/dist/es2019/entry-point/util/set-custom-native-drag-preview.js +1 -0
- package/dist/es2019/experimental/cross-window-element-adapter.js +121 -0
- package/dist/es2019/index.js +7 -0
- package/dist/es2019/internal-types.js +1 -0
- package/dist/es2019/ledger/dispatch-consumer-event.js +128 -0
- package/dist/es2019/ledger/lifecycle-manager.js +333 -0
- package/dist/es2019/ledger/usage-ledger.js +32 -0
- package/dist/es2019/make-adapter/make-adapter.js +55 -0
- package/dist/es2019/make-adapter/make-drop-target.js +233 -0
- package/dist/es2019/make-adapter/make-monitor.js +80 -0
- package/dist/es2019/util/add-attribute.js +7 -0
- package/dist/es2019/util/combine.js +6 -0
- package/dist/es2019/util/disable-native-drag-preview.js +31 -0
- package/dist/es2019/util/entering-and-leaving-the-window.js +159 -0
- package/dist/es2019/util/fix-post-drag-pointer-bug.js +110 -0
- package/dist/es2019/util/get-input.js +14 -0
- package/dist/es2019/util/once.js +13 -0
- package/dist/es2019/util/reorder.js +17 -0
- package/dist/es2019/util/scroll-just-enough-into-view.js +12 -0
- package/dist/es2019/util/set-custom-native-drag-preview.js +106 -0
- package/dist/es2019/version.json +5 -0
- package/dist/esm/adapter/element-adapter.js +142 -0
- package/dist/esm/adapter/file-adapter.js +90 -0
- package/dist/esm/addon/cancel-unhandled.js +43 -0
- package/dist/esm/entry-point/adapter/element.js +1 -0
- package/dist/esm/entry-point/adapter/file.js +1 -0
- package/dist/esm/entry-point/addon/cancel-unhandled.js +1 -0
- package/dist/esm/entry-point/experimental/cross-with-element-adapter.js +1 -0
- package/dist/esm/entry-point/types.js +1 -0
- package/dist/esm/entry-point/util/combine.js +1 -0
- package/dist/esm/entry-point/util/disable-native-drag-preview.js +1 -0
- package/dist/esm/entry-point/util/once.js +1 -0
- package/dist/esm/entry-point/util/reorder.js +1 -0
- package/dist/esm/entry-point/util/scroll-just-enough-into-view.js +1 -0
- package/dist/esm/entry-point/util/set-custom-native-drag-preview.js +1 -0
- package/dist/esm/experimental/cross-window-element-adapter.js +120 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/internal-types.js +1 -0
- package/dist/esm/ledger/dispatch-consumer-event.js +125 -0
- package/dist/esm/ledger/lifecycle-manager.js +328 -0
- package/dist/esm/ledger/usage-ledger.js +31 -0
- package/dist/esm/make-adapter/make-adapter.js +53 -0
- package/dist/esm/make-adapter/make-drop-target.js +264 -0
- package/dist/esm/make-adapter/make-monitor.js +93 -0
- package/dist/esm/util/add-attribute.js +8 -0
- package/dist/esm/util/combine.js +11 -0
- package/dist/esm/util/disable-native-drag-preview.js +30 -0
- package/dist/esm/util/entering-and-leaving-the-window.js +156 -0
- package/dist/esm/util/fix-post-drag-pointer-bug.js +108 -0
- package/dist/esm/util/get-input.js +14 -0
- package/dist/esm/util/once.js +16 -0
- package/dist/esm/util/reorder.js +19 -0
- package/dist/esm/util/scroll-just-enough-into-view.js +11 -0
- package/dist/esm/util/set-custom-native-drag-preview.js +104 -0
- package/dist/esm/version.json +5 -0
- package/dist/types/adapter/element-adapter.d.ts +42 -0
- package/dist/types/adapter/file-adapter.d.ts +18 -0
- package/dist/types/addon/cancel-unhandled.d.ts +7 -0
- package/dist/types/entry-point/adapter/element.d.ts +2 -0
- package/dist/types/entry-point/adapter/file.d.ts +2 -0
- package/dist/types/entry-point/addon/cancel-unhandled.d.ts +1 -0
- package/dist/types/entry-point/experimental/cross-with-element-adapter.d.ts +1 -0
- package/dist/types/entry-point/types.d.ts +1 -0
- package/dist/types/entry-point/util/combine.d.ts +1 -0
- package/dist/types/entry-point/util/disable-native-drag-preview.d.ts +1 -0
- package/dist/types/entry-point/util/once.d.ts +1 -0
- package/dist/types/entry-point/util/reorder.d.ts +1 -0
- package/dist/types/entry-point/util/scroll-just-enough-into-view.d.ts +1 -0
- package/dist/types/entry-point/util/set-custom-native-drag-preview.d.ts +1 -0
- package/dist/types/experimental/cross-window-element-adapter.d.ts +17 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/internal-types.d.ts +275 -0
- package/dist/types/ledger/dispatch-consumer-event.d.ts +26 -0
- package/dist/types/ledger/lifecycle-manager.d.ts +16 -0
- package/dist/types/ledger/usage-ledger.d.ts +5 -0
- package/dist/types/make-adapter/make-adapter.d.ts +14 -0
- package/dist/types/make-adapter/make-drop-target.d.ts +5 -0
- package/dist/types/make-adapter/make-monitor.d.ts +8 -0
- package/dist/types/util/add-attribute.d.ts +5 -0
- package/dist/types/util/combine.d.ts +3 -0
- package/dist/types/util/disable-native-drag-preview.d.ts +3 -0
- package/dist/types/util/entering-and-leaving-the-window.d.ts +6 -0
- package/dist/types/util/fix-post-drag-pointer-bug.d.ts +14 -0
- package/dist/types/util/get-input.d.ts +2 -0
- package/dist/types/util/once.d.ts +2 -0
- package/dist/types/util/reorder.d.ts +9 -0
- package/dist/types/util/scroll-just-enough-into-view.d.ts +7 -0
- package/dist/types/util/set-custom-native-drag-preview.d.ts +52 -0
- package/experimental/cross-window-element-adapter/package.json +15 -0
- package/package.json +87 -0
- package/report.api.md +35 -0
- package/tmp/api-report-tmp.d.ts +13 -0
- package/types/package.json +15 -0
- package/util/combine/package.json +15 -0
- package/util/disable-native-drag-preview/package.json +15 -0
- package/util/once/package.json +15 -0
- package/util/reorder/package.json +15 -0
- package/util/scroll-just-enough-into-view/package.json +15 -0
- 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,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, "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;
|