@react-stately/dnd 3.0.0-alpha.2 → 3.0.0-alpha.5
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/dist/main.js +136 -154
- package/dist/main.js.map +1 -1
- package/dist/module.js +123 -145
- package/dist/module.js.map +1 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/useDraggableCollectionState.ts +28 -17
package/dist/main.js
CHANGED
|
@@ -1,168 +1,150 @@
|
|
|
1
|
-
var
|
|
2
|
-
useState
|
|
3
|
-
} = require("react");
|
|
1
|
+
var $1IdlX$react = require("react");
|
|
4
2
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
function useDraggableCollectionState(props) {
|
|
12
|
-
let [draggingKeys, setDraggingKeys] = useState(new Set());
|
|
13
|
-
|
|
14
|
-
let getKeys = key => {
|
|
15
|
-
// The clicked item is always added to the drag. If it is selected, then all of the
|
|
16
|
-
// other selected items are also dragged. If it is not selected, the only the clicked
|
|
17
|
-
// item is dragged. This matches native macOS behavior.
|
|
18
|
-
let keys = new Set(props.selectionManager.isSelected(key) ? props.selectionManager.selectedKeys : []);
|
|
19
|
-
keys.add(key);
|
|
20
|
-
return keys;
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
return {
|
|
24
|
-
collection: props.collection,
|
|
25
|
-
selectionManager: props.selectionManager,
|
|
26
|
-
|
|
27
|
-
isDragging(key) {
|
|
28
|
-
return draggingKeys.has(key);
|
|
29
|
-
},
|
|
30
|
-
|
|
31
|
-
getKeysForDrag: getKeys,
|
|
32
|
-
|
|
33
|
-
getItems(key) {
|
|
34
|
-
return props.getItems(getKeys(key));
|
|
35
|
-
},
|
|
36
|
-
|
|
37
|
-
renderPreview(key) {
|
|
38
|
-
if (typeof props.renderPreview === 'function') {
|
|
39
|
-
return props.renderPreview(getKeys(key), key);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
return null;
|
|
43
|
-
},
|
|
44
|
-
|
|
45
|
-
startDrag(key, event) {
|
|
46
|
-
let keys = getKeys(key);
|
|
47
|
-
setDraggingKeys(keys);
|
|
48
|
-
|
|
49
|
-
if (typeof props.onDragStart === 'function') {
|
|
50
|
-
props.onDragStart(_babelRuntimeHelpersExtends({}, event, {
|
|
51
|
-
keys
|
|
52
|
-
}));
|
|
53
|
-
}
|
|
54
|
-
},
|
|
55
|
-
|
|
56
|
-
moveDrag(event) {
|
|
57
|
-
if (typeof props.onDragMove === 'function') {
|
|
58
|
-
props.onDragMove(_babelRuntimeHelpersExtends({}, event, {
|
|
59
|
-
keys: draggingKeys
|
|
60
|
-
}));
|
|
61
|
-
}
|
|
62
|
-
},
|
|
63
|
-
|
|
64
|
-
endDrag(event) {
|
|
65
|
-
if (typeof props.onDragEnd === 'function') {
|
|
66
|
-
props.onDragEnd(_babelRuntimeHelpersExtends({}, event, {
|
|
67
|
-
keys: draggingKeys
|
|
68
|
-
}));
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
setDraggingKeys(new Set());
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
exports.useDraggableCollectionState = useDraggableCollectionState;
|
|
78
|
-
|
|
79
|
-
function useDroppableCollectionState(props) {
|
|
80
|
-
let [target, setTarget] = useState(null);
|
|
81
|
-
|
|
82
|
-
let getOppositeTarget = target => {
|
|
83
|
-
if (target.dropPosition === 'before') {
|
|
84
|
-
let key = props.collection.getKeyBefore(target.key);
|
|
85
|
-
return key != null ? {
|
|
86
|
-
type: 'item',
|
|
87
|
-
key,
|
|
88
|
-
dropPosition: 'after'
|
|
89
|
-
} : null;
|
|
90
|
-
} else if (target.dropPosition === 'after') {
|
|
91
|
-
let key = props.collection.getKeyAfter(target.key);
|
|
92
|
-
return key != null ? {
|
|
93
|
-
type: 'item',
|
|
94
|
-
key,
|
|
95
|
-
dropPosition: 'before'
|
|
96
|
-
} : null;
|
|
3
|
+
function $parcel$exportWildcard(dest, source) {
|
|
4
|
+
Object.keys(source).forEach(function(key) {
|
|
5
|
+
if (key === 'default' || key === '__esModule' || dest.hasOwnProperty(key)) {
|
|
6
|
+
return;
|
|
97
7
|
}
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
return {
|
|
101
|
-
collection: props.collection,
|
|
102
|
-
selectionManager: props.selectionManager,
|
|
103
|
-
target,
|
|
104
|
-
|
|
105
|
-
setTarget(newTarget) {
|
|
106
|
-
if (this.isDropTarget(newTarget)) {
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
if (target && typeof props.onDropExit === 'function') {
|
|
111
|
-
props.onDropExit({
|
|
112
|
-
type: 'dropexit',
|
|
113
|
-
x: 0,
|
|
114
|
-
// todo
|
|
115
|
-
y: 0,
|
|
116
|
-
target
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
8
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
// todo
|
|
125
|
-
y: 0,
|
|
126
|
-
target: newTarget
|
|
127
|
-
});
|
|
9
|
+
Object.defineProperty(dest, key, {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
get: function get() {
|
|
12
|
+
return source[key];
|
|
128
13
|
}
|
|
14
|
+
});
|
|
15
|
+
});
|
|
129
16
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
}
|
|
17
|
+
return dest;
|
|
18
|
+
}
|
|
19
|
+
function $parcel$export(e, n, v, s) {
|
|
20
|
+
Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
|
|
21
|
+
}
|
|
22
|
+
var $481a240e3d51b276$exports = {};
|
|
23
|
+
|
|
24
|
+
$parcel$export($481a240e3d51b276$exports, "useDraggableCollectionState", () => $481a240e3d51b276$export$29efd034f1d79f81);
|
|
25
|
+
|
|
26
|
+
function $481a240e3d51b276$export$29efd034f1d79f81(props) {
|
|
27
|
+
let { getItems: getItems , collection: collection , selectionManager: selectionManager , onDragStart: onDragStart , onDragMove: onDragMove , onDragEnd: onDragEnd , renderPreview: renderPreview , allowsDraggingItem: allowsDraggingItem = ()=>true
|
|
28
|
+
} = props;
|
|
29
|
+
let [draggingKeys, setDraggingKeys] = $1IdlX$react.useState(new Set());
|
|
30
|
+
let getKeys = (key1)=>{
|
|
31
|
+
// The clicked item is always added to the drag. If it is selected, then all of the
|
|
32
|
+
// other selected items are also dragged. If it is not selected, the only the clicked
|
|
33
|
+
// item is dragged. This matches native macOS behavior.
|
|
34
|
+
let keys = new Set(selectionManager.isSelected(key1) ? new Set([
|
|
35
|
+
...selectionManager.selectedKeys
|
|
36
|
+
].filter((key)=>allowsDraggingItem ? allowsDraggingItem(key) : true
|
|
37
|
+
)) : []);
|
|
38
|
+
keys.add(key1);
|
|
39
|
+
return keys;
|
|
40
|
+
};
|
|
41
|
+
return {
|
|
42
|
+
collection: collection,
|
|
43
|
+
selectionManager: selectionManager,
|
|
44
|
+
isDragging (key) {
|
|
45
|
+
return draggingKeys.has(key);
|
|
46
|
+
},
|
|
47
|
+
getKeysForDrag: getKeys,
|
|
48
|
+
getItems (key) {
|
|
49
|
+
return getItems(getKeys(key));
|
|
50
|
+
},
|
|
51
|
+
renderPreview (key) {
|
|
52
|
+
if (typeof renderPreview === 'function') return renderPreview(getKeys(key), key);
|
|
53
|
+
return null;
|
|
54
|
+
},
|
|
55
|
+
startDrag (key, event) {
|
|
56
|
+
let keys = getKeys(key);
|
|
57
|
+
setDraggingKeys(keys);
|
|
58
|
+
if (typeof onDragStart === 'function') onDragStart({
|
|
59
|
+
...event,
|
|
60
|
+
keys: keys
|
|
61
|
+
});
|
|
62
|
+
},
|
|
63
|
+
moveDrag (event) {
|
|
64
|
+
if (typeof onDragMove === 'function') onDragMove({
|
|
65
|
+
...event,
|
|
66
|
+
keys: draggingKeys
|
|
67
|
+
});
|
|
68
|
+
},
|
|
69
|
+
endDrag (event) {
|
|
70
|
+
if (typeof onDragEnd === 'function') onDragEnd({
|
|
71
|
+
...event,
|
|
72
|
+
keys: draggingKeys
|
|
73
|
+
});
|
|
74
|
+
setDraggingKeys(new Set());
|
|
75
|
+
},
|
|
76
|
+
isDraggable: (key)=>allowsDraggingItem(key)
|
|
77
|
+
};
|
|
78
|
+
}
|
|
142
79
|
|
|
143
|
-
return false;
|
|
144
|
-
},
|
|
145
80
|
|
|
146
|
-
|
|
147
|
-
|
|
81
|
+
var $6ce4cbfbe5e354f1$exports = {};
|
|
82
|
+
|
|
83
|
+
$parcel$export($6ce4cbfbe5e354f1$exports, "useDroppableCollectionState", () => $6ce4cbfbe5e354f1$export$926850f6ecef79d0);
|
|
84
|
+
|
|
85
|
+
function $6ce4cbfbe5e354f1$export$926850f6ecef79d0(props) {
|
|
86
|
+
let [target1, setTarget] = $1IdlX$react.useState(null);
|
|
87
|
+
let getOppositeTarget = (target)=>{
|
|
88
|
+
if (target.dropPosition === 'before') {
|
|
89
|
+
let key = props.collection.getKeyBefore(target.key);
|
|
90
|
+
return key != null ? {
|
|
91
|
+
type: 'item',
|
|
92
|
+
key: key,
|
|
93
|
+
dropPosition: 'after'
|
|
94
|
+
} : null;
|
|
95
|
+
} else if (target.dropPosition === 'after') {
|
|
96
|
+
let key = props.collection.getKeyAfter(target.key);
|
|
97
|
+
return key != null ? {
|
|
98
|
+
type: 'item',
|
|
99
|
+
key: key,
|
|
100
|
+
dropPosition: 'before'
|
|
101
|
+
} : null;
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
return {
|
|
105
|
+
collection: props.collection,
|
|
106
|
+
selectionManager: props.selectionManager,
|
|
107
|
+
target: target1,
|
|
108
|
+
setTarget (newTarget) {
|
|
109
|
+
if (this.isDropTarget(newTarget)) return;
|
|
110
|
+
if (target1 && typeof props.onDropExit === 'function') props.onDropExit({
|
|
111
|
+
type: 'dropexit',
|
|
112
|
+
x: 0,
|
|
113
|
+
y: 0,
|
|
114
|
+
target: target1
|
|
115
|
+
});
|
|
116
|
+
if (newTarget && typeof props.onDropEnter === 'function') props.onDropEnter({
|
|
117
|
+
type: 'dropenter',
|
|
118
|
+
x: 0,
|
|
119
|
+
y: 0,
|
|
120
|
+
target: newTarget
|
|
121
|
+
});
|
|
122
|
+
setTarget(newTarget);
|
|
123
|
+
},
|
|
124
|
+
isDropTarget (dropTarget) {
|
|
125
|
+
if ($6ce4cbfbe5e354f1$var$isEqualDropTarget(dropTarget, target1)) return true;
|
|
126
|
+
// Check if the targets point at the same point between two items, one referring before, and the other after.
|
|
127
|
+
if ((dropTarget === null || dropTarget === void 0 ? void 0 : dropTarget.type) === 'item' && (target1 === null || target1 === void 0 ? void 0 : target1.type) === 'item' && dropTarget.key !== target1.key && dropTarget.dropPosition !== target1.dropPosition && dropTarget.dropPosition !== 'on' && target1.dropPosition !== 'on') return $6ce4cbfbe5e354f1$var$isEqualDropTarget(getOppositeTarget(dropTarget), target1) || $6ce4cbfbe5e354f1$var$isEqualDropTarget(dropTarget, getOppositeTarget(target1));
|
|
128
|
+
return false;
|
|
129
|
+
},
|
|
130
|
+
getDropOperation (target, types, allowedOperations) {
|
|
131
|
+
return typeof props.getDropOperation === 'function' ? props.getDropOperation(target, types, allowedOperations) : allowedOperations[0];
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
function $6ce4cbfbe5e354f1$var$isEqualDropTarget(a, b) {
|
|
136
|
+
if (!a) return !b;
|
|
137
|
+
switch(a.type){
|
|
138
|
+
case 'root':
|
|
139
|
+
return (b === null || b === void 0 ? void 0 : b.type) === 'root';
|
|
140
|
+
case 'item':
|
|
141
|
+
return (b === null || b === void 0 ? void 0 : b.type) === 'item' && (b === null || b === void 0 ? void 0 : b.key) === a.key && (b === null || b === void 0 ? void 0 : b.dropPosition) === a.dropPosition;
|
|
148
142
|
}
|
|
149
|
-
|
|
150
|
-
};
|
|
151
143
|
}
|
|
152
144
|
|
|
153
|
-
exports.useDroppableCollectionState = useDroppableCollectionState;
|
|
154
145
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
return !b;
|
|
158
|
-
}
|
|
146
|
+
$parcel$exportWildcard(module.exports, $481a240e3d51b276$exports);
|
|
147
|
+
$parcel$exportWildcard(module.exports, $6ce4cbfbe5e354f1$exports);
|
|
159
148
|
|
|
160
|
-
switch (a.type) {
|
|
161
|
-
case 'root':
|
|
162
|
-
return (b == null ? void 0 : b.type) === 'root';
|
|
163
149
|
|
|
164
|
-
case 'item':
|
|
165
|
-
return (b == null ? void 0 : b.type) === 'item' && (b == null ? void 0 : b.key) === a.key && (b == null ? void 0 : b.dropPosition) === a.dropPosition;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
150
|
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":";;;;;;AAAA,SAASA,sBAAT,CAAgCC,CAAhC,EAAmC;AACjC,SAAOA,CAAC,IAAIA,CAAC,CAACC,UAAP,GAAoBD,CAAC,CAACE,OAAtB,GAAgCF,CAAvC;AACD;;AC+BM,SAASG,2BAAT,CAAqCC,KAArC,EAAkG;AACvG,MAAI,CAACC,YAAD,EAAeC,eAAf,IAAkCC,QAAQ,CAAC,IAAIC,GAAJ,EAAD,CAA9C;;AACA,MAAIC,OAAO,GAAIC,GAAD,IAAc;AAC1B;AACA;AACA;AACA,QAAIC,IAAI,GAAG,IAAIH,GAAJ,CACTJ,KAAK,CAACQ,gBAAN,CAAuBC,UAAvB,CAAkCH,GAAlC,IACIN,KAAK,CAACQ,gBAAN,CAAuBE,YAD3B,GAEI,EAHK,CAAX;AAMAH,IAAAA,IAAI,CAACI,GAAL,CAASL,GAAT;AACA,WAAOC,IAAP;AACD,GAZD;;AAcA,SAAO;AACLK,IAAAA,UAAU,EAAEZ,KAAK,CAACY,UADb;AAELJ,IAAAA,gBAAgB,EAAER,KAAK,CAACQ,gBAFnB;;AAGLK,IAAAA,UAAU,CAACP,GAAD,EAAM;AACd,aAAOL,YAAY,CAACa,GAAb,CAAiBR,GAAjB,CAAP;AACD,KALI;;AAMLS,IAAAA,cAAc,EAAEV,OANX;;AAOLW,IAAAA,QAAQ,CAACV,GAAD,EAAM;AACZ,aAAON,KAAK,CAACgB,QAAN,CAAeX,OAAO,CAACC,GAAD,CAAtB,CAAP;AACD,KATI;;AAULW,IAAAA,aAAa,CAACX,GAAD,EAAM;AACjB,UAAI,OAAON,KAAK,CAACiB,aAAb,KAA+B,UAAnC,EAA+C;AAC7C,eAAOjB,KAAK,CAACiB,aAAN,CAAoBZ,OAAO,CAACC,GAAD,CAA3B,EAAkCA,GAAlC,CAAP;AACD;;AAED,aAAO,IAAP;AACD,KAhBI;;AAiBLY,IAAAA,SAAS,CAACZ,GAAD,EAAMa,KAAN,EAAa;AACpB,UAAIZ,IAAI,GAAGF,OAAO,CAACC,GAAD,CAAlB;AACAJ,MAAAA,eAAe,CAACK,IAAD,CAAf;;AAEA,UAAI,OAAOP,KAAK,CAACoB,WAAb,KAA6B,UAAjC,EAA6C;AAC3CpB,QAAAA,KAAK,CAACoB,WAAN,iCACKD,KADL;AAEEZ,UAAAA;AAFF;AAID;AACF,KA3BI;;AA4BLc,IAAAA,QAAQ,CAACF,KAAD,EAAQ;AACd,UAAI,OAAOnB,KAAK,CAACsB,UAAb,KAA4B,UAAhC,EAA4C;AAC1CtB,QAAAA,KAAK,CAACsB,UAAN,iCACKH,KADL;AAEEZ,UAAAA,IAAI,EAAEN;AAFR;AAID;AACF,KAnCI;;AAoCLsB,IAAAA,OAAO,CAACJ,KAAD,EAAQ;AACb,UAAI,OAAOnB,KAAK,CAACwB,SAAb,KAA2B,UAA/B,EAA2C;AACzCxB,QAAAA,KAAK,CAACwB,SAAN,iCACKL,KADL;AAEEZ,UAAAA,IAAI,EAAEN;AAFR;AAID;;AAEDC,MAAAA,eAAe,CAAC,IAAIE,GAAJ,EAAD,CAAf;AACD;;AA7CI,GAAP;AA+CD;;;;AClEM,SAASqB,2BAAT,CAAqCzB,KAArC,EAAwG;AAC7G,MAAI,CAAC0B,MAAD,EAASC,SAAT,IAAsBxB,QAAQ,CAAa,IAAb,CAAlC;;AAEA,MAAIyB,iBAAiB,GAAIF,MAAD,IAA4C;AAClE,QAAIA,MAAM,CAACG,YAAP,KAAwB,QAA5B,EAAsC;AACpC,UAAIvB,GAAG,GAAGN,KAAK,CAACY,UAAN,CAAiBkB,YAAjB,CAA8BJ,MAAM,CAACpB,GAArC,CAAV;AACA,aAAOA,GAAG,IAAI,IAAP,GAAc;AAACyB,QAAAA,IAAI,EAAE,MAAP;AAAezB,QAAAA,GAAf;AAAoBuB,QAAAA,YAAY,EAAE;AAAlC,OAAd,GAA2D,IAAlE;AACD,KAHD,MAGO,IAAIH,MAAM,CAACG,YAAP,KAAwB,OAA5B,EAAqC;AAC1C,UAAIvB,GAAG,GAAGN,KAAK,CAACY,UAAN,CAAiBoB,WAAjB,CAA6BN,MAAM,CAACpB,GAApC,CAAV;AACA,aAAOA,GAAG,IAAI,IAAP,GAAc;AAACyB,QAAAA,IAAI,EAAE,MAAP;AAAezB,QAAAA,GAAf;AAAoBuB,QAAAA,YAAY,EAAE;AAAlC,OAAd,GAA4D,IAAnE;AACD;AACF,GARD;;AAUA,SAAO;AACLjB,IAAAA,UAAU,EAAEZ,KAAK,CAACY,UADb;AAELJ,IAAAA,gBAAgB,EAAER,KAAK,CAACQ,gBAFnB;AAGLkB,IAAAA,MAHK;;AAILC,IAAAA,SAAS,CAACM,SAAD,EAAY;AACnB,UAAI,KAAKC,YAAL,CAAkBD,SAAlB,CAAJ,EAAkC;AAChC;AACD;;AAED,UAAIP,MAAM,IAAI,OAAO1B,KAAK,CAACmC,UAAb,KAA4B,UAA1C,EAAsD;AACpDnC,QAAAA,KAAK,CAACmC,UAAN,CAAiB;AACfJ,UAAAA,IAAI,EAAE,UADS;AAEfK,UAAAA,CAAC,EAAE,CAFY;AAET;AACNC,UAAAA,CAAC,EAAE,CAHY;AAIfX,UAAAA;AAJe,SAAjB;AAMD;;AAED,UAAIO,SAAS,IAAI,OAAOjC,KAAK,CAACsC,WAAb,KAA6B,UAA9C,EAA0D;AACxDtC,QAAAA,KAAK,CAACsC,WAAN,CAAkB;AAChBP,UAAAA,IAAI,EAAE,WADU;AAEhBK,UAAAA,CAAC,EAAE,CAFa;AAEV;AACNC,UAAAA,CAAC,EAAE,CAHa;AAIhBX,UAAAA,MAAM,EAAEO;AAJQ,SAAlB;AAMD;;AAEDN,MAAAA,SAAS,CAACM,SAAD,CAAT;AACD,KA5BI;;AA6BLC,IAAAA,YAAY,CAACK,UAAD,EAAa;AACvB,UAAIC,oDAAiB,CAACD,UAAD,EAAab,MAAb,CAArB,EAA2C;AACzC,eAAO,IAAP;AACD,OAHsB,CAKvB;;;AACA,UACE,CAAAa,UAAU,QAAV,YAAAA,UAAU,CAAER,IAAZ,MAAqB,MAArB,IACA,CAAAL,MAAM,QAAN,YAAAA,MAAM,CAAEK,IAAR,MAAiB,MADjB,IAEAQ,UAAU,CAACjC,GAAX,KAAmBoB,MAAM,CAACpB,GAF1B,IAGAiC,UAAU,CAACV,YAAX,KAA4BH,MAAM,CAACG,YAHnC,IAIAU,UAAU,CAACV,YAAX,KAA4B,IAJ5B,IAKAH,MAAM,CAACG,YAAP,KAAwB,IAN1B,EAOE;AACA,eAAOW,oDAAiB,CAACZ,iBAAiB,CAACW,UAAD,CAAlB,EAAgCb,MAAhC,CAAjB,IACLc,oDAAiB,CAACD,UAAD,EAAaX,iBAAiB,CAACF,MAAD,CAA9B,CADnB;AAED;;AAED,aAAO,KAAP;AACD,KAhDI;;AAiDLe,IAAAA,gBAAgB,CAACf,MAAD,EAASgB,KAAT,EAAgBC,iBAAhB,EAAmC;AACjD,aAAO,OAAO3C,KAAK,CAACyC,gBAAb,KAAkC,UAAlC,GACHzC,KAAK,CAACyC,gBAAN,CAAuBf,MAAvB,EAA+BgB,KAA/B,EAAsCC,iBAAtC,CADG,GAEHA,iBAAiB,CAAC,CAAD,CAFrB;AAGD;;AArDI,GAAP;AAuDD;;;;AAED,SAASH,oDAAT,CAA2B5C,CAA3B,EAA0CgD,CAA1C,EAAyD;AACvD,MAAI,CAAChD,CAAL,EAAQ;AACN,WAAO,CAACgD,CAAR;AACD;;AAED,UAAQhD,CAAC,CAACmC,IAAV;AACE,SAAK,MAAL;AACE,aAAO,CAAAa,CAAC,QAAD,YAAAA,CAAC,CAAEb,IAAH,MAAY,MAAnB;;AACF,SAAK,MAAL;AACE,aAAO,CAAAa,CAAC,QAAD,YAAAA,CAAC,CAAEb,IAAH,MAAY,MAAZ,IAAsB,CAAAa,CAAC,QAAD,YAAAA,CAAC,CAAEtC,GAAH,MAAWV,CAAC,CAACU,GAAnC,IAA0C,CAAAsC,CAAC,QAAD,YAAAA,CAAC,CAAEf,YAAH,MAAoBjC,CAAC,CAACiC,YAAvE;AAJJ;AAMD","sources":["./node_modules/@parcel/scope-hoisting/lib/helpers.js","./packages/@react-stately/dnd/src/useDraggableCollectionState.ts","./packages/@react-stately/dnd/src/useDroppableCollectionState.ts"],"sourcesContent":["function $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n\nfunction $parcel$defineInteropFlag(a) {\n Object.defineProperty(a, '__esModule', {value: true});\n}\n\nfunction $parcel$exportWildcard(dest, source) {\n Object.keys(source).forEach(function(key) {\n if (key === 'default' || key === '__esModule') {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function get() {\n return source[key];\n },\n });\n });\n\n return dest;\n}\n\nfunction $parcel$missingModule(name) {\n var err = new Error(\"Cannot find module '\" + name + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n}\n\nvar $parcel$global =\n typeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : {};\n","/*\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 {Collection, DragEndEvent, DraggableCollectionProps, DragItem, DragMoveEvent, DragStartEvent, Node} from '@react-types/shared';\nimport {Key, useState} from 'react';\nimport {MultipleSelectionManager} from '@react-stately/selection';\n\ninterface DraggableCollectionOptions extends DraggableCollectionProps {\n collection: Collection<Node<unknown>>,\n selectionManager: MultipleSelectionManager\n}\n\nexport interface DraggableCollectionState {\n collection: Collection<Node<unknown>>,\n selectionManager: MultipleSelectionManager,\n isDragging(key: Key): boolean,\n getKeysForDrag(key: Key): Set<Key>,\n getItems(key: Key): DragItem[],\n renderPreview(key: Key): JSX.Element,\n startDrag(key: Key, event: DragStartEvent): void,\n moveDrag(event: DragMoveEvent): void,\n endDrag(event: DragEndEvent): void\n}\n\nexport function useDraggableCollectionState(props: DraggableCollectionOptions): DraggableCollectionState {\n let [draggingKeys, setDraggingKeys] = useState(new Set<Key>());\n let getKeys = (key: Key) => {\n // The clicked item is always added to the drag. If it is selected, then all of the\n // other selected items are also dragged. If it is not selected, the only the clicked\n // item is dragged. This matches native macOS behavior.\n let keys = new Set(\n props.selectionManager.isSelected(key)\n ? props.selectionManager.selectedKeys\n : []\n );\n\n keys.add(key);\n return keys;\n };\n\n return {\n collection: props.collection,\n selectionManager: props.selectionManager,\n isDragging(key) {\n return draggingKeys.has(key);\n },\n getKeysForDrag: getKeys,\n getItems(key) {\n return props.getItems(getKeys(key));\n },\n renderPreview(key) {\n if (typeof props.renderPreview === 'function') {\n return props.renderPreview(getKeys(key), key);\n }\n\n return null;\n },\n startDrag(key, event) {\n let keys = getKeys(key);\n setDraggingKeys(keys);\n\n if (typeof props.onDragStart === 'function') {\n props.onDragStart({\n ...event,\n keys\n });\n }\n },\n moveDrag(event) {\n if (typeof props.onDragMove === 'function') {\n props.onDragMove({\n ...event,\n keys: draggingKeys\n });\n }\n },\n endDrag(event) {\n if (typeof props.onDragEnd === 'function') {\n props.onDragEnd({\n ...event,\n keys: draggingKeys\n });\n }\n\n setDraggingKeys(new Set());\n }\n };\n}\n","/*\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 {Collection, DragTypes, DropOperation, DroppableCollectionProps, DropTarget, ItemDropTarget, Node} from '@react-types/shared';\nimport {MultipleSelectionManager} from '@react-stately/selection';\nimport {useState} from 'react';\n\ninterface DroppableCollectionStateOptions extends DroppableCollectionProps {\n collection: Collection<Node<unknown>>,\n selectionManager: MultipleSelectionManager\n}\n\nexport interface DroppableCollectionState {\n collection: Collection<Node<unknown>>,\n selectionManager: MultipleSelectionManager,\n target: DropTarget,\n setTarget(target: DropTarget): void,\n isDropTarget(target: DropTarget): boolean,\n getDropOperation(target: DropTarget, types: DragTypes, allowedOperations: DropOperation[]): DropOperation\n}\n\nexport function useDroppableCollectionState(props: DroppableCollectionStateOptions): DroppableCollectionState {\n let [target, setTarget] = useState<DropTarget>(null);\n\n let getOppositeTarget = (target: ItemDropTarget): ItemDropTarget => {\n if (target.dropPosition === 'before') {\n let key = props.collection.getKeyBefore(target.key);\n return key != null ? {type: 'item', key, dropPosition: 'after'} : null;\n } else if (target.dropPosition === 'after') {\n let key = props.collection.getKeyAfter(target.key);\n return key != null ? {type: 'item', key, dropPosition: 'before'} : null;\n }\n };\n\n return {\n collection: props.collection,\n selectionManager: props.selectionManager,\n target,\n setTarget(newTarget) {\n if (this.isDropTarget(newTarget)) {\n return;\n }\n\n if (target && typeof props.onDropExit === 'function') {\n props.onDropExit({\n type: 'dropexit',\n x: 0, // todo\n y: 0,\n target\n });\n }\n\n if (newTarget && typeof props.onDropEnter === 'function') {\n props.onDropEnter({\n type: 'dropenter',\n x: 0, // todo\n y: 0,\n target: newTarget\n });\n }\n\n setTarget(newTarget);\n },\n isDropTarget(dropTarget) {\n if (isEqualDropTarget(dropTarget, target)) {\n return true;\n }\n\n // Check if the targets point at the same point between two items, one referring before, and the other after.\n if (\n dropTarget?.type === 'item' &&\n target?.type === 'item' &&\n dropTarget.key !== target.key &&\n dropTarget.dropPosition !== target.dropPosition &&\n dropTarget.dropPosition !== 'on' &&\n target.dropPosition !== 'on'\n ) {\n return isEqualDropTarget(getOppositeTarget(dropTarget), target) ||\n isEqualDropTarget(dropTarget, getOppositeTarget(target));\n }\n\n return false;\n },\n getDropOperation(target, types, allowedOperations) {\n return typeof props.getDropOperation === 'function'\n ? props.getDropOperation(target, types, allowedOperations)\n : allowedOperations[0];\n }\n };\n}\n\nfunction isEqualDropTarget(a: DropTarget, b: DropTarget) {\n if (!a) {\n return !b;\n }\n\n switch (a.type) {\n case 'root':\n return b?.type === 'root';\n case 'item':\n return b?.type === 'item' && b?.key === a.key && b?.dropPosition === a.dropPosition;\n }\n}\n"],"names":["$parcel$interopDefault","a","__esModule","default","useDraggableCollectionState","props","draggingKeys","setDraggingKeys","useState","Set","getKeys","key","keys","selectionManager","isSelected","selectedKeys","add","collection","isDragging","has","getKeysForDrag","getItems","renderPreview","startDrag","event","onDragStart","moveDrag","onDragMove","endDrag","onDragEnd","useDroppableCollectionState","target","setTarget","getOppositeTarget","dropPosition","getKeyBefore","type","getKeyAfter","newTarget","isDropTarget","onDropExit","x","y","onDropEnter","dropTarget","isEqualDropTarget","getDropOperation","types","allowedOperations","b"],"version":3,"file":"main.js.map"}
|
|
1
|
+
{"mappings":"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","sources":["packages/@react-stately/dnd/src/index.ts","packages/@react-stately/dnd/src/useDraggableCollectionState.ts","packages/@react-stately/dnd/src/useDroppableCollectionState.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\nexport * from './useDraggableCollectionState';\nexport * from './useDroppableCollectionState';\n","/*\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 {Collection, DragEndEvent, DraggableCollectionProps, DragItem, DragMoveEvent, DragStartEvent, Node} from '@react-types/shared';\nimport {Key, useState} from 'react';\nimport {MultipleSelectionManager} from '@react-stately/selection';\n\nexport interface DraggableCollectionOptions extends DraggableCollectionProps {\n collection: Collection<Node<unknown>>,\n selectionManager: MultipleSelectionManager\n}\n\nexport interface DraggableCollectionState {\n collection: Collection<Node<unknown>>,\n selectionManager: MultipleSelectionManager,\n isDragging(key: Key): boolean,\n getKeysForDrag(key: Key): Set<Key>,\n getItems(key: Key): DragItem[],\n renderPreview(key: Key): JSX.Element,\n startDrag(key: Key, event: DragStartEvent): void,\n moveDrag(event: DragMoveEvent): void,\n endDrag(event: DragEndEvent): void,\n isDraggable(key: Key): boolean\n}\n\nexport function useDraggableCollectionState(props: DraggableCollectionOptions): DraggableCollectionState {\n let {\n getItems,\n collection,\n selectionManager,\n onDragStart,\n onDragMove,\n onDragEnd,\n renderPreview,\n allowsDraggingItem = () => true\n } = props;\n let [draggingKeys, setDraggingKeys] = useState(new Set<Key>());\n let getKeys = (key: Key) => {\n // The clicked item is always added to the drag. If it is selected, then all of the\n // other selected items are also dragged. If it is not selected, the only the clicked\n // item is dragged. This matches native macOS behavior.\n let keys = new Set(\n selectionManager.isSelected(key)\n ? new Set([...selectionManager.selectedKeys].filter(key => allowsDraggingItem ? allowsDraggingItem(key) : true))\n : []\n );\n\n keys.add(key);\n return keys;\n };\n\n return {\n collection,\n selectionManager,\n isDragging(key) {\n return draggingKeys.has(key);\n },\n getKeysForDrag: getKeys,\n getItems(key) {\n return getItems(getKeys(key));\n },\n renderPreview(key) {\n if (typeof renderPreview === 'function') {\n return renderPreview(getKeys(key), key);\n }\n\n return null;\n },\n startDrag(key, event) {\n let keys = getKeys(key);\n setDraggingKeys(keys);\n if (typeof onDragStart === 'function') {\n onDragStart({\n ...event,\n keys\n });\n }\n },\n moveDrag(event) {\n if (typeof onDragMove === 'function') {\n onDragMove({\n ...event,\n keys: draggingKeys\n });\n }\n },\n endDrag(event) {\n if (typeof onDragEnd === 'function') {\n onDragEnd({\n ...event,\n keys: draggingKeys\n });\n }\n\n setDraggingKeys(new Set());\n },\n isDraggable: (key: Key) => allowsDraggingItem(key)\n };\n}\n","/*\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 {Collection, DragTypes, DropOperation, DroppableCollectionProps, DropTarget, ItemDropTarget, Node} from '@react-types/shared';\nimport {MultipleSelectionManager} from '@react-stately/selection';\nimport {useState} from 'react';\n\ninterface DroppableCollectionStateOptions extends DroppableCollectionProps {\n collection: Collection<Node<unknown>>,\n selectionManager: MultipleSelectionManager\n}\n\nexport interface DroppableCollectionState {\n collection: Collection<Node<unknown>>,\n selectionManager: MultipleSelectionManager,\n target: DropTarget,\n setTarget(target: DropTarget): void,\n isDropTarget(target: DropTarget): boolean,\n getDropOperation(target: DropTarget, types: DragTypes, allowedOperations: DropOperation[]): DropOperation\n}\n\nexport function useDroppableCollectionState(props: DroppableCollectionStateOptions): DroppableCollectionState {\n let [target, setTarget] = useState<DropTarget>(null);\n\n let getOppositeTarget = (target: ItemDropTarget): ItemDropTarget => {\n if (target.dropPosition === 'before') {\n let key = props.collection.getKeyBefore(target.key);\n return key != null ? {type: 'item', key, dropPosition: 'after'} : null;\n } else if (target.dropPosition === 'after') {\n let key = props.collection.getKeyAfter(target.key);\n return key != null ? {type: 'item', key, dropPosition: 'before'} : null;\n }\n };\n\n return {\n collection: props.collection,\n selectionManager: props.selectionManager,\n target,\n setTarget(newTarget) {\n if (this.isDropTarget(newTarget)) {\n return;\n }\n\n if (target && typeof props.onDropExit === 'function') {\n props.onDropExit({\n type: 'dropexit',\n x: 0, // todo\n y: 0,\n target\n });\n }\n\n if (newTarget && typeof props.onDropEnter === 'function') {\n props.onDropEnter({\n type: 'dropenter',\n x: 0, // todo\n y: 0,\n target: newTarget\n });\n }\n\n setTarget(newTarget);\n },\n isDropTarget(dropTarget) {\n if (isEqualDropTarget(dropTarget, target)) {\n return true;\n }\n\n // Check if the targets point at the same point between two items, one referring before, and the other after.\n if (\n dropTarget?.type === 'item' &&\n target?.type === 'item' &&\n dropTarget.key !== target.key &&\n dropTarget.dropPosition !== target.dropPosition &&\n dropTarget.dropPosition !== 'on' &&\n target.dropPosition !== 'on'\n ) {\n return isEqualDropTarget(getOppositeTarget(dropTarget), target) ||\n isEqualDropTarget(dropTarget, getOppositeTarget(target));\n }\n\n return false;\n },\n getDropOperation(target, types, allowedOperations) {\n return typeof props.getDropOperation === 'function'\n ? props.getDropOperation(target, types, allowedOperations)\n : allowedOperations[0];\n }\n };\n}\n\nfunction isEqualDropTarget(a: DropTarget, b: DropTarget) {\n if (!a) {\n return !b;\n }\n\n switch (a.type) {\n case 'root':\n return b?.type === 'root';\n case 'item':\n return b?.type === 'item' && b?.key === a.key && b?.dropPosition === a.dropPosition;\n }\n}\n"],"names":[],"version":3,"file":"main.js.map"}
|
package/dist/module.js
CHANGED
|
@@ -1,155 +1,133 @@
|
|
|
1
|
-
import { useState
|
|
2
|
-
import _babelRuntimeHelpersEsmExtends from "@babel/runtime/helpers/esm/extends";
|
|
3
|
-
export function useDraggableCollectionState(props) {
|
|
4
|
-
let [draggingKeys, setDraggingKeys] = useState(new Set());
|
|
1
|
+
import {useState as $bBNwq$useState} from "react";
|
|
5
2
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
};
|
|
3
|
+
function $parcel$export(e, n, v, s) {
|
|
4
|
+
Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
|
|
5
|
+
}
|
|
6
|
+
var $b45bbbaf0c3785df$exports = {};
|
|
7
|
+
|
|
8
|
+
$parcel$export($b45bbbaf0c3785df$exports, "useDraggableCollectionState", () => $b45bbbaf0c3785df$export$29efd034f1d79f81);
|
|
9
|
+
|
|
10
|
+
function $b45bbbaf0c3785df$export$29efd034f1d79f81(props) {
|
|
11
|
+
let { getItems: getItems , collection: collection , selectionManager: selectionManager , onDragStart: onDragStart , onDragMove: onDragMove , onDragEnd: onDragEnd , renderPreview: renderPreview , allowsDraggingItem: allowsDraggingItem = ()=>true
|
|
12
|
+
} = props;
|
|
13
|
+
let [draggingKeys, setDraggingKeys] = $bBNwq$useState(new Set());
|
|
14
|
+
let getKeys = (key1)=>{
|
|
15
|
+
// The clicked item is always added to the drag. If it is selected, then all of the
|
|
16
|
+
// other selected items are also dragged. If it is not selected, the only the clicked
|
|
17
|
+
// item is dragged. This matches native macOS behavior.
|
|
18
|
+
let keys = new Set(selectionManager.isSelected(key1) ? new Set([
|
|
19
|
+
...selectionManager.selectedKeys
|
|
20
|
+
].filter((key)=>allowsDraggingItem ? allowsDraggingItem(key) : true
|
|
21
|
+
)) : []);
|
|
22
|
+
keys.add(key1);
|
|
23
|
+
return keys;
|
|
24
|
+
};
|
|
25
|
+
return {
|
|
26
|
+
collection: collection,
|
|
27
|
+
selectionManager: selectionManager,
|
|
28
|
+
isDragging (key) {
|
|
29
|
+
return draggingKeys.has(key);
|
|
30
|
+
},
|
|
31
|
+
getKeysForDrag: getKeys,
|
|
32
|
+
getItems (key) {
|
|
33
|
+
return getItems(getKeys(key));
|
|
34
|
+
},
|
|
35
|
+
renderPreview (key) {
|
|
36
|
+
if (typeof renderPreview === 'function') return renderPreview(getKeys(key), key);
|
|
37
|
+
return null;
|
|
38
|
+
},
|
|
39
|
+
startDrag (key, event) {
|
|
40
|
+
let keys = getKeys(key);
|
|
41
|
+
setDraggingKeys(keys);
|
|
42
|
+
if (typeof onDragStart === 'function') onDragStart({
|
|
43
|
+
...event,
|
|
44
|
+
keys: keys
|
|
45
|
+
});
|
|
46
|
+
},
|
|
47
|
+
moveDrag (event) {
|
|
48
|
+
if (typeof onDragMove === 'function') onDragMove({
|
|
49
|
+
...event,
|
|
50
|
+
keys: draggingKeys
|
|
51
|
+
});
|
|
52
|
+
},
|
|
53
|
+
endDrag (event) {
|
|
54
|
+
if (typeof onDragEnd === 'function') onDragEnd({
|
|
55
|
+
...event,
|
|
56
|
+
keys: draggingKeys
|
|
57
|
+
});
|
|
58
|
+
setDraggingKeys(new Set());
|
|
59
|
+
},
|
|
60
|
+
isDraggable: (key)=>allowsDraggingItem(key)
|
|
61
|
+
};
|
|
67
62
|
}
|
|
68
|
-
export function useDroppableCollectionState(props) {
|
|
69
|
-
let [target, setTarget] = useState(null);
|
|
70
|
-
|
|
71
|
-
let getOppositeTarget = target => {
|
|
72
|
-
if (target.dropPosition === 'before') {
|
|
73
|
-
let key = props.collection.getKeyBefore(target.key);
|
|
74
|
-
return key != null ? {
|
|
75
|
-
type: 'item',
|
|
76
|
-
key,
|
|
77
|
-
dropPosition: 'after'
|
|
78
|
-
} : null;
|
|
79
|
-
} else if (target.dropPosition === 'after') {
|
|
80
|
-
let key = props.collection.getKeyAfter(target.key);
|
|
81
|
-
return key != null ? {
|
|
82
|
-
type: 'item',
|
|
83
|
-
key,
|
|
84
|
-
dropPosition: 'before'
|
|
85
|
-
} : null;
|
|
86
|
-
}
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
return {
|
|
90
|
-
collection: props.collection,
|
|
91
|
-
selectionManager: props.selectionManager,
|
|
92
|
-
target,
|
|
93
|
-
|
|
94
|
-
setTarget(newTarget) {
|
|
95
|
-
if (this.isDropTarget(newTarget)) {
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
if (target && typeof props.onDropExit === 'function') {
|
|
100
|
-
props.onDropExit({
|
|
101
|
-
type: 'dropexit',
|
|
102
|
-
x: 0,
|
|
103
|
-
// todo
|
|
104
|
-
y: 0,
|
|
105
|
-
target
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
if (newTarget && typeof props.onDropEnter === 'function') {
|
|
110
|
-
props.onDropEnter({
|
|
111
|
-
type: 'dropenter',
|
|
112
|
-
x: 0,
|
|
113
|
-
// todo
|
|
114
|
-
y: 0,
|
|
115
|
-
target: newTarget
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
setTarget(newTarget);
|
|
120
|
-
},
|
|
121
|
-
|
|
122
|
-
isDropTarget(dropTarget) {
|
|
123
|
-
if ($dd31abc8396c596698a2b05e189ba$var$isEqualDropTarget(dropTarget, target)) {
|
|
124
|
-
return true;
|
|
125
|
-
} // Check if the targets point at the same point between two items, one referring before, and the other after.
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
if ((dropTarget == null ? void 0 : dropTarget.type) === 'item' && (target == null ? void 0 : target.type) === 'item' && dropTarget.key !== target.key && dropTarget.dropPosition !== target.dropPosition && dropTarget.dropPosition !== 'on' && target.dropPosition !== 'on') {
|
|
129
|
-
return $dd31abc8396c596698a2b05e189ba$var$isEqualDropTarget(getOppositeTarget(dropTarget), target) || $dd31abc8396c596698a2b05e189ba$var$isEqualDropTarget(dropTarget, getOppositeTarget(target));
|
|
130
|
-
}
|
|
131
63
|
|
|
132
|
-
return false;
|
|
133
|
-
},
|
|
134
64
|
|
|
135
|
-
|
|
136
|
-
|
|
65
|
+
var $e672e8bc247525d1$exports = {};
|
|
66
|
+
|
|
67
|
+
$parcel$export($e672e8bc247525d1$exports, "useDroppableCollectionState", () => $e672e8bc247525d1$export$926850f6ecef79d0);
|
|
68
|
+
|
|
69
|
+
function $e672e8bc247525d1$export$926850f6ecef79d0(props) {
|
|
70
|
+
let [target1, setTarget] = $bBNwq$useState(null);
|
|
71
|
+
let getOppositeTarget = (target)=>{
|
|
72
|
+
if (target.dropPosition === 'before') {
|
|
73
|
+
let key = props.collection.getKeyBefore(target.key);
|
|
74
|
+
return key != null ? {
|
|
75
|
+
type: 'item',
|
|
76
|
+
key: key,
|
|
77
|
+
dropPosition: 'after'
|
|
78
|
+
} : null;
|
|
79
|
+
} else if (target.dropPosition === 'after') {
|
|
80
|
+
let key = props.collection.getKeyAfter(target.key);
|
|
81
|
+
return key != null ? {
|
|
82
|
+
type: 'item',
|
|
83
|
+
key: key,
|
|
84
|
+
dropPosition: 'before'
|
|
85
|
+
} : null;
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
return {
|
|
89
|
+
collection: props.collection,
|
|
90
|
+
selectionManager: props.selectionManager,
|
|
91
|
+
target: target1,
|
|
92
|
+
setTarget (newTarget) {
|
|
93
|
+
if (this.isDropTarget(newTarget)) return;
|
|
94
|
+
if (target1 && typeof props.onDropExit === 'function') props.onDropExit({
|
|
95
|
+
type: 'dropexit',
|
|
96
|
+
x: 0,
|
|
97
|
+
y: 0,
|
|
98
|
+
target: target1
|
|
99
|
+
});
|
|
100
|
+
if (newTarget && typeof props.onDropEnter === 'function') props.onDropEnter({
|
|
101
|
+
type: 'dropenter',
|
|
102
|
+
x: 0,
|
|
103
|
+
y: 0,
|
|
104
|
+
target: newTarget
|
|
105
|
+
});
|
|
106
|
+
setTarget(newTarget);
|
|
107
|
+
},
|
|
108
|
+
isDropTarget (dropTarget) {
|
|
109
|
+
if ($e672e8bc247525d1$var$isEqualDropTarget(dropTarget, target1)) return true;
|
|
110
|
+
// Check if the targets point at the same point between two items, one referring before, and the other after.
|
|
111
|
+
if ((dropTarget === null || dropTarget === void 0 ? void 0 : dropTarget.type) === 'item' && (target1 === null || target1 === void 0 ? void 0 : target1.type) === 'item' && dropTarget.key !== target1.key && dropTarget.dropPosition !== target1.dropPosition && dropTarget.dropPosition !== 'on' && target1.dropPosition !== 'on') return $e672e8bc247525d1$var$isEqualDropTarget(getOppositeTarget(dropTarget), target1) || $e672e8bc247525d1$var$isEqualDropTarget(dropTarget, getOppositeTarget(target1));
|
|
112
|
+
return false;
|
|
113
|
+
},
|
|
114
|
+
getDropOperation (target, types, allowedOperations) {
|
|
115
|
+
return typeof props.getDropOperation === 'function' ? props.getDropOperation(target, types, allowedOperations) : allowedOperations[0];
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
function $e672e8bc247525d1$var$isEqualDropTarget(a, b) {
|
|
120
|
+
if (!a) return !b;
|
|
121
|
+
switch(a.type){
|
|
122
|
+
case 'root':
|
|
123
|
+
return (b === null || b === void 0 ? void 0 : b.type) === 'root';
|
|
124
|
+
case 'item':
|
|
125
|
+
return (b === null || b === void 0 ? void 0 : b.type) === 'item' && (b === null || b === void 0 ? void 0 : b.key) === a.key && (b === null || b === void 0 ? void 0 : b.dropPosition) === a.dropPosition;
|
|
137
126
|
}
|
|
138
|
-
|
|
139
|
-
};
|
|
140
127
|
}
|
|
141
128
|
|
|
142
|
-
function $dd31abc8396c596698a2b05e189ba$var$isEqualDropTarget(a, b) {
|
|
143
|
-
if (!a) {
|
|
144
|
-
return !b;
|
|
145
|
-
}
|
|
146
129
|
|
|
147
|
-
switch (a.type) {
|
|
148
|
-
case 'root':
|
|
149
|
-
return (b == null ? void 0 : b.type) === 'root';
|
|
150
130
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
}
|
|
154
|
-
}
|
|
131
|
+
|
|
132
|
+
export {$b45bbbaf0c3785df$export$29efd034f1d79f81 as useDraggableCollectionState, $e672e8bc247525d1$export$926850f6ecef79d0 as useDroppableCollectionState};
|
|
155
133
|
//# sourceMappingURL=module.js.map
|
package/dist/module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","sources":["./packages/@react-stately/dnd/src/useDraggableCollectionState.ts","./packages/@react-stately/dnd/src/useDroppableCollectionState.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 {Collection, DragEndEvent, DraggableCollectionProps, DragItem, DragMoveEvent, DragStartEvent, Node} from '@react-types/shared';\nimport {Key, useState} from 'react';\nimport {MultipleSelectionManager} from '@react-stately/selection';\n\ninterface DraggableCollectionOptions extends DraggableCollectionProps {\n collection: Collection<Node<unknown>>,\n selectionManager: MultipleSelectionManager\n}\n\nexport interface DraggableCollectionState {\n collection: Collection<Node<unknown>>,\n selectionManager: MultipleSelectionManager,\n isDragging(key: Key): boolean,\n getKeysForDrag(key: Key): Set<Key>,\n getItems(key: Key): DragItem[],\n renderPreview(key: Key): JSX.Element,\n startDrag(key: Key, event: DragStartEvent): void,\n moveDrag(event: DragMoveEvent): void,\n endDrag(event: DragEndEvent): void\n}\n\nexport function useDraggableCollectionState(props: DraggableCollectionOptions): DraggableCollectionState {\n let [draggingKeys, setDraggingKeys] = useState(new Set<Key>());\n let getKeys = (key: Key) => {\n // The clicked item is always added to the drag. If it is selected, then all of the\n // other selected items are also dragged. If it is not selected, the only the clicked\n // item is dragged. This matches native macOS behavior.\n let keys = new Set(\n props.selectionManager.isSelected(key)\n ? props.selectionManager.selectedKeys\n : []\n );\n\n keys.add(key);\n return keys;\n };\n\n return {\n collection: props.collection,\n selectionManager: props.selectionManager,\n isDragging(key) {\n return draggingKeys.has(key);\n },\n getKeysForDrag: getKeys,\n getItems(key) {\n return props.getItems(getKeys(key));\n },\n renderPreview(key) {\n if (typeof props.renderPreview === 'function') {\n return props.renderPreview(getKeys(key), key);\n }\n\n return null;\n },\n startDrag(key, event) {\n let keys = getKeys(key);\n setDraggingKeys(keys);\n\n if (typeof props.onDragStart === 'function') {\n props.onDragStart({\n ...event,\n keys\n });\n }\n },\n moveDrag(event) {\n if (typeof props.onDragMove === 'function') {\n props.onDragMove({\n ...event,\n keys: draggingKeys\n });\n }\n },\n endDrag(event) {\n if (typeof props.onDragEnd === 'function') {\n props.onDragEnd({\n ...event,\n keys: draggingKeys\n });\n }\n\n setDraggingKeys(new Set());\n }\n };\n}\n","/*\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 {Collection, DragTypes, DropOperation, DroppableCollectionProps, DropTarget, ItemDropTarget, Node} from '@react-types/shared';\nimport {MultipleSelectionManager} from '@react-stately/selection';\nimport {useState} from 'react';\n\ninterface DroppableCollectionStateOptions extends DroppableCollectionProps {\n collection: Collection<Node<unknown>>,\n selectionManager: MultipleSelectionManager\n}\n\nexport interface DroppableCollectionState {\n collection: Collection<Node<unknown>>,\n selectionManager: MultipleSelectionManager,\n target: DropTarget,\n setTarget(target: DropTarget): void,\n isDropTarget(target: DropTarget): boolean,\n getDropOperation(target: DropTarget, types: DragTypes, allowedOperations: DropOperation[]): DropOperation\n}\n\nexport function useDroppableCollectionState(props: DroppableCollectionStateOptions): DroppableCollectionState {\n let [target, setTarget] = useState<DropTarget>(null);\n\n let getOppositeTarget = (target: ItemDropTarget): ItemDropTarget => {\n if (target.dropPosition === 'before') {\n let key = props.collection.getKeyBefore(target.key);\n return key != null ? {type: 'item', key, dropPosition: 'after'} : null;\n } else if (target.dropPosition === 'after') {\n let key = props.collection.getKeyAfter(target.key);\n return key != null ? {type: 'item', key, dropPosition: 'before'} : null;\n }\n };\n\n return {\n collection: props.collection,\n selectionManager: props.selectionManager,\n target,\n setTarget(newTarget) {\n if (this.isDropTarget(newTarget)) {\n return;\n }\n\n if (target && typeof props.onDropExit === 'function') {\n props.onDropExit({\n type: 'dropexit',\n x: 0, // todo\n y: 0,\n target\n });\n }\n\n if (newTarget && typeof props.onDropEnter === 'function') {\n props.onDropEnter({\n type: 'dropenter',\n x: 0, // todo\n y: 0,\n target: newTarget\n });\n }\n\n setTarget(newTarget);\n },\n isDropTarget(dropTarget) {\n if (isEqualDropTarget(dropTarget, target)) {\n return true;\n }\n\n // Check if the targets point at the same point between two items, one referring before, and the other after.\n if (\n dropTarget?.type === 'item' &&\n target?.type === 'item' &&\n dropTarget.key !== target.key &&\n dropTarget.dropPosition !== target.dropPosition &&\n dropTarget.dropPosition !== 'on' &&\n target.dropPosition !== 'on'\n ) {\n return isEqualDropTarget(getOppositeTarget(dropTarget), target) ||\n isEqualDropTarget(dropTarget, getOppositeTarget(target));\n }\n\n return false;\n },\n getDropOperation(target, types, allowedOperations) {\n return typeof props.getDropOperation === 'function'\n ? props.getDropOperation(target, types, allowedOperations)\n : allowedOperations[0];\n }\n };\n}\n\nfunction isEqualDropTarget(a: DropTarget, b: DropTarget) {\n if (!a) {\n return !b;\n }\n\n switch (a.type) {\n case 'root':\n return b?.type === 'root';\n case 'item':\n return b?.type === 'item' && b?.key === a.key && b?.dropPosition === a.dropPosition;\n }\n}\n"],"names":["useDraggableCollectionState","props","draggingKeys","setDraggingKeys","useState","Set","getKeys","key","keys","selectionManager","isSelected","selectedKeys","add","collection","isDragging","has","getKeysForDrag","getItems","renderPreview","startDrag","event","onDragStart","moveDrag","onDragMove","endDrag","onDragEnd","useDroppableCollectionState","target","setTarget","getOppositeTarget","dropPosition","getKeyBefore","type","getKeyAfter","newTarget","isDropTarget","onDropExit","x","y","onDropEnter","dropTarget","isEqualDropTarget","getDropOperation","types","allowedOperations","a","b"],"version":3,"file":"module.js.map"}
|
|
1
|
+
{"mappings":"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","sources":["packages/@react-stately/dnd/src/index.ts","packages/@react-stately/dnd/src/useDraggableCollectionState.ts","packages/@react-stately/dnd/src/useDroppableCollectionState.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\nexport * from './useDraggableCollectionState';\nexport * from './useDroppableCollectionState';\n","/*\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 {Collection, DragEndEvent, DraggableCollectionProps, DragItem, DragMoveEvent, DragStartEvent, Node} from '@react-types/shared';\nimport {Key, useState} from 'react';\nimport {MultipleSelectionManager} from '@react-stately/selection';\n\nexport interface DraggableCollectionOptions extends DraggableCollectionProps {\n collection: Collection<Node<unknown>>,\n selectionManager: MultipleSelectionManager\n}\n\nexport interface DraggableCollectionState {\n collection: Collection<Node<unknown>>,\n selectionManager: MultipleSelectionManager,\n isDragging(key: Key): boolean,\n getKeysForDrag(key: Key): Set<Key>,\n getItems(key: Key): DragItem[],\n renderPreview(key: Key): JSX.Element,\n startDrag(key: Key, event: DragStartEvent): void,\n moveDrag(event: DragMoveEvent): void,\n endDrag(event: DragEndEvent): void,\n isDraggable(key: Key): boolean\n}\n\nexport function useDraggableCollectionState(props: DraggableCollectionOptions): DraggableCollectionState {\n let {\n getItems,\n collection,\n selectionManager,\n onDragStart,\n onDragMove,\n onDragEnd,\n renderPreview,\n allowsDraggingItem = () => true\n } = props;\n let [draggingKeys, setDraggingKeys] = useState(new Set<Key>());\n let getKeys = (key: Key) => {\n // The clicked item is always added to the drag. If it is selected, then all of the\n // other selected items are also dragged. If it is not selected, the only the clicked\n // item is dragged. This matches native macOS behavior.\n let keys = new Set(\n selectionManager.isSelected(key)\n ? new Set([...selectionManager.selectedKeys].filter(key => allowsDraggingItem ? allowsDraggingItem(key) : true))\n : []\n );\n\n keys.add(key);\n return keys;\n };\n\n return {\n collection,\n selectionManager,\n isDragging(key) {\n return draggingKeys.has(key);\n },\n getKeysForDrag: getKeys,\n getItems(key) {\n return getItems(getKeys(key));\n },\n renderPreview(key) {\n if (typeof renderPreview === 'function') {\n return renderPreview(getKeys(key), key);\n }\n\n return null;\n },\n startDrag(key, event) {\n let keys = getKeys(key);\n setDraggingKeys(keys);\n if (typeof onDragStart === 'function') {\n onDragStart({\n ...event,\n keys\n });\n }\n },\n moveDrag(event) {\n if (typeof onDragMove === 'function') {\n onDragMove({\n ...event,\n keys: draggingKeys\n });\n }\n },\n endDrag(event) {\n if (typeof onDragEnd === 'function') {\n onDragEnd({\n ...event,\n keys: draggingKeys\n });\n }\n\n setDraggingKeys(new Set());\n },\n isDraggable: (key: Key) => allowsDraggingItem(key)\n };\n}\n","/*\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 {Collection, DragTypes, DropOperation, DroppableCollectionProps, DropTarget, ItemDropTarget, Node} from '@react-types/shared';\nimport {MultipleSelectionManager} from '@react-stately/selection';\nimport {useState} from 'react';\n\ninterface DroppableCollectionStateOptions extends DroppableCollectionProps {\n collection: Collection<Node<unknown>>,\n selectionManager: MultipleSelectionManager\n}\n\nexport interface DroppableCollectionState {\n collection: Collection<Node<unknown>>,\n selectionManager: MultipleSelectionManager,\n target: DropTarget,\n setTarget(target: DropTarget): void,\n isDropTarget(target: DropTarget): boolean,\n getDropOperation(target: DropTarget, types: DragTypes, allowedOperations: DropOperation[]): DropOperation\n}\n\nexport function useDroppableCollectionState(props: DroppableCollectionStateOptions): DroppableCollectionState {\n let [target, setTarget] = useState<DropTarget>(null);\n\n let getOppositeTarget = (target: ItemDropTarget): ItemDropTarget => {\n if (target.dropPosition === 'before') {\n let key = props.collection.getKeyBefore(target.key);\n return key != null ? {type: 'item', key, dropPosition: 'after'} : null;\n } else if (target.dropPosition === 'after') {\n let key = props.collection.getKeyAfter(target.key);\n return key != null ? {type: 'item', key, dropPosition: 'before'} : null;\n }\n };\n\n return {\n collection: props.collection,\n selectionManager: props.selectionManager,\n target,\n setTarget(newTarget) {\n if (this.isDropTarget(newTarget)) {\n return;\n }\n\n if (target && typeof props.onDropExit === 'function') {\n props.onDropExit({\n type: 'dropexit',\n x: 0, // todo\n y: 0,\n target\n });\n }\n\n if (newTarget && typeof props.onDropEnter === 'function') {\n props.onDropEnter({\n type: 'dropenter',\n x: 0, // todo\n y: 0,\n target: newTarget\n });\n }\n\n setTarget(newTarget);\n },\n isDropTarget(dropTarget) {\n if (isEqualDropTarget(dropTarget, target)) {\n return true;\n }\n\n // Check if the targets point at the same point between two items, one referring before, and the other after.\n if (\n dropTarget?.type === 'item' &&\n target?.type === 'item' &&\n dropTarget.key !== target.key &&\n dropTarget.dropPosition !== target.dropPosition &&\n dropTarget.dropPosition !== 'on' &&\n target.dropPosition !== 'on'\n ) {\n return isEqualDropTarget(getOppositeTarget(dropTarget), target) ||\n isEqualDropTarget(dropTarget, getOppositeTarget(target));\n }\n\n return false;\n },\n getDropOperation(target, types, allowedOperations) {\n return typeof props.getDropOperation === 'function'\n ? props.getDropOperation(target, types, allowedOperations)\n : allowedOperations[0];\n }\n };\n}\n\nfunction isEqualDropTarget(a: DropTarget, b: DropTarget) {\n if (!a) {\n return !b;\n }\n\n switch (a.type) {\n case 'root':\n return b?.type === 'root';\n case 'item':\n return b?.type === 'item' && b?.key === a.key && b?.dropPosition === a.dropPosition;\n }\n}\n"],"names":[],"version":3,"file":"module.js.map"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Collection, DragEndEvent, DraggableCollectionProps, DragItem, DragMoveEvent, DragStartEvent, Node, DragTypes, DropOperation, DroppableCollectionProps, DropTarget } from "@react-types/shared";
|
|
2
2
|
import { Key } from "react";
|
|
3
3
|
import { MultipleSelectionManager } from "@react-stately/selection";
|
|
4
|
-
interface DraggableCollectionOptions extends DraggableCollectionProps {
|
|
4
|
+
export interface DraggableCollectionOptions extends DraggableCollectionProps {
|
|
5
5
|
collection: Collection<Node<unknown>>;
|
|
6
6
|
selectionManager: MultipleSelectionManager;
|
|
7
7
|
}
|
|
@@ -15,6 +15,7 @@ export interface DraggableCollectionState {
|
|
|
15
15
|
startDrag(key: Key, event: DragStartEvent): void;
|
|
16
16
|
moveDrag(event: DragMoveEvent): void;
|
|
17
17
|
endDrag(event: DragEndEvent): void;
|
|
18
|
+
isDraggable(key: Key): boolean;
|
|
18
19
|
}
|
|
19
20
|
export function useDraggableCollectionState(props: DraggableCollectionOptions): DraggableCollectionState;
|
|
20
21
|
interface DroppableCollectionStateOptions extends DroppableCollectionProps {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"
|
|
1
|
+
{"mappings":";;;AAgBA,2CAA4C,SAAQ,wBAAwB;IAC1E,UAAU,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC;IACtC,gBAAgB,EAAE,wBAAwB,CAAA;CAC3C;AAED;IACE,UAAU,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC;IACtC,gBAAgB,EAAE,wBAAwB,CAAC;IAC3C,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC;IAC9B,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACnC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,QAAQ,EAAE,CAAC;IAC/B,aAAa,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,OAAO,CAAC;IACrC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAA;CAC/B;AAED,4CAA4C,KAAK,EAAE,0BAA0B,GAAG,wBAAwB,CAyEvG;AC3FD,yCAA0C,SAAQ,wBAAwB;IACxE,UAAU,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC;IACtC,gBAAgB,EAAE,wBAAwB,CAAA;CAC3C;AAED;IACE,UAAU,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC;IACtC,gBAAgB,EAAE,wBAAwB,CAAC;IAC3C,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IACpC,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC;IAC1C,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,aAAa,EAAE,GAAG,aAAa,CAAA;CAC1G;AAED,4CAA4C,KAAK,EAAE,+BAA+B,GAAG,wBAAwB,CAoE5G","sources":["packages/@react-stately/dnd/src/packages/@react-stately/dnd/src/useDraggableCollectionState.ts","packages/@react-stately/dnd/src/packages/@react-stately/dnd/src/useDroppableCollectionState.ts","packages/@react-stately/dnd/src/packages/@react-stately/dnd/src/index.ts","packages/@react-stately/dnd/src/index.ts"],"sourcesContent":[null,null,null,"/*\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\nexport * from './useDraggableCollectionState';\nexport * from './useDroppableCollectionState';\n"],"names":[],"version":3,"file":"types.d.ts.map"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-stately/dnd",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.5",
|
|
4
4
|
"description": "Spectrum UI components in React",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"main": "dist/main.js",
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"@babel/runtime": "^7.6.2",
|
|
21
|
-
"@react-stately/selection": "^3.
|
|
22
|
-
"@react-stately/utils": "^3.
|
|
23
|
-
"@react-types/shared": "^3.
|
|
21
|
+
"@react-stately/selection": "^3.9.3",
|
|
22
|
+
"@react-stately/utils": "^3.4.1",
|
|
23
|
+
"@react-types/shared": "^3.11.2"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|
|
26
26
|
"react": "^16.8.0 || ^17.0.0-rc.1"
|
|
@@ -28,5 +28,5 @@
|
|
|
28
28
|
"publishConfig": {
|
|
29
29
|
"access": "public"
|
|
30
30
|
},
|
|
31
|
-
"gitHead": "
|
|
31
|
+
"gitHead": "ed8d8d984c2f7f2c31e8b18795b97858a95e4729"
|
|
32
32
|
}
|
|
@@ -14,7 +14,7 @@ import {Collection, DragEndEvent, DraggableCollectionProps, DragItem, DragMoveEv
|
|
|
14
14
|
import {Key, useState} from 'react';
|
|
15
15
|
import {MultipleSelectionManager} from '@react-stately/selection';
|
|
16
16
|
|
|
17
|
-
interface DraggableCollectionOptions extends DraggableCollectionProps {
|
|
17
|
+
export interface DraggableCollectionOptions extends DraggableCollectionProps {
|
|
18
18
|
collection: Collection<Node<unknown>>,
|
|
19
19
|
selectionManager: MultipleSelectionManager
|
|
20
20
|
}
|
|
@@ -28,18 +28,29 @@ export interface DraggableCollectionState {
|
|
|
28
28
|
renderPreview(key: Key): JSX.Element,
|
|
29
29
|
startDrag(key: Key, event: DragStartEvent): void,
|
|
30
30
|
moveDrag(event: DragMoveEvent): void,
|
|
31
|
-
endDrag(event: DragEndEvent): void
|
|
31
|
+
endDrag(event: DragEndEvent): void,
|
|
32
|
+
isDraggable(key: Key): boolean
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
export function useDraggableCollectionState(props: DraggableCollectionOptions): DraggableCollectionState {
|
|
36
|
+
let {
|
|
37
|
+
getItems,
|
|
38
|
+
collection,
|
|
39
|
+
selectionManager,
|
|
40
|
+
onDragStart,
|
|
41
|
+
onDragMove,
|
|
42
|
+
onDragEnd,
|
|
43
|
+
renderPreview,
|
|
44
|
+
allowsDraggingItem = () => true
|
|
45
|
+
} = props;
|
|
35
46
|
let [draggingKeys, setDraggingKeys] = useState(new Set<Key>());
|
|
36
47
|
let getKeys = (key: Key) => {
|
|
37
48
|
// The clicked item is always added to the drag. If it is selected, then all of the
|
|
38
49
|
// other selected items are also dragged. If it is not selected, the only the clicked
|
|
39
50
|
// item is dragged. This matches native macOS behavior.
|
|
40
51
|
let keys = new Set(
|
|
41
|
-
|
|
42
|
-
?
|
|
52
|
+
selectionManager.isSelected(key)
|
|
53
|
+
? new Set([...selectionManager.selectedKeys].filter(key => allowsDraggingItem ? allowsDraggingItem(key) : true))
|
|
43
54
|
: []
|
|
44
55
|
);
|
|
45
56
|
|
|
@@ -48,18 +59,18 @@ export function useDraggableCollectionState(props: DraggableCollectionOptions):
|
|
|
48
59
|
};
|
|
49
60
|
|
|
50
61
|
return {
|
|
51
|
-
collection
|
|
52
|
-
selectionManager
|
|
62
|
+
collection,
|
|
63
|
+
selectionManager,
|
|
53
64
|
isDragging(key) {
|
|
54
65
|
return draggingKeys.has(key);
|
|
55
66
|
},
|
|
56
67
|
getKeysForDrag: getKeys,
|
|
57
68
|
getItems(key) {
|
|
58
|
-
return
|
|
69
|
+
return getItems(getKeys(key));
|
|
59
70
|
},
|
|
60
71
|
renderPreview(key) {
|
|
61
|
-
if (typeof
|
|
62
|
-
return
|
|
72
|
+
if (typeof renderPreview === 'function') {
|
|
73
|
+
return renderPreview(getKeys(key), key);
|
|
63
74
|
}
|
|
64
75
|
|
|
65
76
|
return null;
|
|
@@ -67,31 +78,31 @@ export function useDraggableCollectionState(props: DraggableCollectionOptions):
|
|
|
67
78
|
startDrag(key, event) {
|
|
68
79
|
let keys = getKeys(key);
|
|
69
80
|
setDraggingKeys(keys);
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
props.onDragStart({
|
|
81
|
+
if (typeof onDragStart === 'function') {
|
|
82
|
+
onDragStart({
|
|
73
83
|
...event,
|
|
74
84
|
keys
|
|
75
85
|
});
|
|
76
86
|
}
|
|
77
87
|
},
|
|
78
88
|
moveDrag(event) {
|
|
79
|
-
if (typeof
|
|
80
|
-
|
|
89
|
+
if (typeof onDragMove === 'function') {
|
|
90
|
+
onDragMove({
|
|
81
91
|
...event,
|
|
82
92
|
keys: draggingKeys
|
|
83
93
|
});
|
|
84
94
|
}
|
|
85
95
|
},
|
|
86
96
|
endDrag(event) {
|
|
87
|
-
if (typeof
|
|
88
|
-
|
|
97
|
+
if (typeof onDragEnd === 'function') {
|
|
98
|
+
onDragEnd({
|
|
89
99
|
...event,
|
|
90
100
|
keys: draggingKeys
|
|
91
101
|
});
|
|
92
102
|
}
|
|
93
103
|
|
|
94
104
|
setDraggingKeys(new Set());
|
|
95
|
-
}
|
|
105
|
+
},
|
|
106
|
+
isDraggable: (key: Key) => allowsDraggingItem(key)
|
|
96
107
|
};
|
|
97
108
|
}
|