deepsea-components 5.15.28 → 5.16.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/dist/components/DraggableGrid.cjs +357 -0
- package/dist/components/DraggableGrid.d.ts +82 -0
- package/dist/components/DraggableGrid.js +313 -0
- package/dist/components/DraggableGrid.module.cjs +42 -0
- package/dist/components/DraggableGrid.module.js +8 -0
- package/dist/components/DraggableGrid_module.css +20 -0
- package/dist/index.cjs +84 -75
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/package.json +3 -3
- package/src/components/DraggableGrid.module.css +19 -0
- package/src/components/DraggableGrid.tsx +472 -0
- package/src/index.ts +1 -0
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.n = (module)=>{
|
|
5
|
+
var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
|
|
6
|
+
__webpack_require__.d(getter, {
|
|
7
|
+
a: getter
|
|
8
|
+
});
|
|
9
|
+
return getter;
|
|
10
|
+
};
|
|
11
|
+
})();
|
|
12
|
+
(()=>{
|
|
13
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
14
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: definition[key]
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
})();
|
|
20
|
+
(()=>{
|
|
21
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
22
|
+
})();
|
|
23
|
+
(()=>{
|
|
24
|
+
__webpack_require__.r = (exports1)=>{
|
|
25
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
26
|
+
value: 'Module'
|
|
27
|
+
});
|
|
28
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
29
|
+
value: true
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
})();
|
|
33
|
+
var __webpack_exports__ = {};
|
|
34
|
+
__webpack_require__.r(__webpack_exports__);
|
|
35
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
36
|
+
DraggableGrid: ()=>DraggableGrid
|
|
37
|
+
});
|
|
38
|
+
const jsx_runtime_namespaceObject = require("react/jsx-runtime");
|
|
39
|
+
const external_react_namespaceObject = require("react");
|
|
40
|
+
const external_deepsea_tools_namespaceObject = require("deepsea-tools");
|
|
41
|
+
const external_soda_hooks_namespaceObject = require("soda-hooks");
|
|
42
|
+
const external_DraggableGrid_module_cjs_namespaceObject = require("./DraggableGrid.module.cjs");
|
|
43
|
+
var external_DraggableGrid_module_cjs_default = /*#__PURE__*/ __webpack_require__.n(external_DraggableGrid_module_cjs_namespaceObject);
|
|
44
|
+
function isTheSameArray(a, b) {
|
|
45
|
+
if (a.length !== b.length) return false;
|
|
46
|
+
for(let i = 0; i < a.length; i++)if (a[i] !== b[i]) return false;
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
function isTheSameIterable(a, b) {
|
|
50
|
+
const aSet = a instanceof Set ? a : new Set(a);
|
|
51
|
+
const bSet = b instanceof Set ? b : new Set(b);
|
|
52
|
+
if (aSet.size !== bSet.size) return false;
|
|
53
|
+
return 0 === aSet.difference(bSet).size;
|
|
54
|
+
}
|
|
55
|
+
function getOrderMap({ prev, orders, keys }) {
|
|
56
|
+
const orderSet = new Set(orders);
|
|
57
|
+
const orderMap = new Map();
|
|
58
|
+
const newKeys = keys.filter((key)=>{
|
|
59
|
+
if (!prev) return true;
|
|
60
|
+
if (prev.has(key)) {
|
|
61
|
+
const prevOrder = prev.get(key);
|
|
62
|
+
orderMap.set(key, prevOrder);
|
|
63
|
+
orderSet.delete(prevOrder);
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
orders = Array.from(orderSet);
|
|
68
|
+
newKeys.forEach((key, index)=>orderMap.set(key, orders[index]));
|
|
69
|
+
console.log(Object.fromEntries(orderMap.entries()));
|
|
70
|
+
return orderMap;
|
|
71
|
+
}
|
|
72
|
+
function getPosition({ order, columns, gapX, gapY, itemWidth, itemHeight }) {
|
|
73
|
+
const row = Math.floor(order / columns);
|
|
74
|
+
const column = order % columns;
|
|
75
|
+
return {
|
|
76
|
+
x: column * (itemWidth + gapX),
|
|
77
|
+
y: row * (itemHeight + gapY)
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function getOrderToKey(keyToOrder) {
|
|
81
|
+
return new Map(Array.from(keyToOrder.entries()).map(([key, order])=>[
|
|
82
|
+
order,
|
|
83
|
+
key
|
|
84
|
+
]));
|
|
85
|
+
}
|
|
86
|
+
const DraggableGridItem = ({ onDragMoveStart, onDragMove, onDragMoveEnd, ...rest })=>{
|
|
87
|
+
const element = (0, external_react_namespaceObject.useRef)(null);
|
|
88
|
+
(0, external_soda_hooks_namespaceObject.useDragMove)({
|
|
89
|
+
element,
|
|
90
|
+
onDragMoveStart,
|
|
91
|
+
onDragMove,
|
|
92
|
+
onDragMoveEnd
|
|
93
|
+
});
|
|
94
|
+
return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
|
|
95
|
+
ref: element,
|
|
96
|
+
...rest
|
|
97
|
+
});
|
|
98
|
+
};
|
|
99
|
+
let DraggableGrid_cache;
|
|
100
|
+
function log(value) {
|
|
101
|
+
if ((0, external_deepsea_tools_namespaceObject.equal)(DraggableGrid_cache, value)) return;
|
|
102
|
+
DraggableGrid_cache = value;
|
|
103
|
+
console.log(value);
|
|
104
|
+
}
|
|
105
|
+
function DraggableGrid({ className, classNames, style, items = [], disabled, columns, rows, gap = 0, gapX = gap, gapY = gap, itemWidth, itemHeight, orderMap, onOrderMapChange, render, keyExtractor, isItemDisabled, isOrderDisabled, orderPriority, ...rest }) {
|
|
106
|
+
const [itemToKey, keyToItem] = (0, external_react_namespaceObject.useMemo)(()=>{
|
|
107
|
+
const itemToKey = new Map();
|
|
108
|
+
const keyToItem = new Map();
|
|
109
|
+
items.forEach((item, index)=>{
|
|
110
|
+
const key = keyExtractor ? keyExtractor(item) : item;
|
|
111
|
+
itemToKey.set(item, key);
|
|
112
|
+
keyToItem.set(key, item);
|
|
113
|
+
});
|
|
114
|
+
return [
|
|
115
|
+
itemToKey,
|
|
116
|
+
keyToItem
|
|
117
|
+
];
|
|
118
|
+
}, [
|
|
119
|
+
items,
|
|
120
|
+
keyExtractor
|
|
121
|
+
]);
|
|
122
|
+
if (keyToItem.size !== items.length) throw new Error("there are duplicate keys in the items");
|
|
123
|
+
const orders = (0, external_react_namespaceObject.useMemo)(()=>{
|
|
124
|
+
let orders = (0, external_deepsea_tools_namespaceObject.getArray)(columns * rows);
|
|
125
|
+
if (isOrderDisabled) orders = orders.filter((order)=>Array.isArray(isOrderDisabled) ? !isOrderDisabled.includes(order) : !isOrderDisabled(order));
|
|
126
|
+
if (orderPriority) orders = orders.toSorted(orderPriority);
|
|
127
|
+
return orders;
|
|
128
|
+
}, [
|
|
129
|
+
columns,
|
|
130
|
+
rows,
|
|
131
|
+
isOrderDisabled,
|
|
132
|
+
orderPriority
|
|
133
|
+
]);
|
|
134
|
+
const [keyToOrder, setKeyToOrder] = (0, external_react_namespaceObject.useState)(()=>{
|
|
135
|
+
if (orderMap) return orderMap;
|
|
136
|
+
const newOrderMap = getOrderMap({
|
|
137
|
+
prev: void 0,
|
|
138
|
+
orders,
|
|
139
|
+
keys: Array.from(keyToItem.keys())
|
|
140
|
+
});
|
|
141
|
+
onOrderMapChange?.(newOrderMap);
|
|
142
|
+
return newOrderMap;
|
|
143
|
+
});
|
|
144
|
+
const [dragging, setDragging] = (0, external_react_namespaceObject.useState)(void 0);
|
|
145
|
+
const { current: cache } = (0, external_react_namespaceObject.useRef)({
|
|
146
|
+
orders,
|
|
147
|
+
keys: Array.from(keyToItem.keys())
|
|
148
|
+
});
|
|
149
|
+
(0, external_react_namespaceObject.useEffect)(()=>{
|
|
150
|
+
if (!isTheSameArray(cache.orders, orders) || !isTheSameIterable(cache.keys, keyToItem.keys())) {
|
|
151
|
+
cache.orders = orders;
|
|
152
|
+
cache.keys = Array.from(keyToItem.keys());
|
|
153
|
+
const newOrderMap = getOrderMap({
|
|
154
|
+
prev: keyToOrder,
|
|
155
|
+
orders,
|
|
156
|
+
keys: cache.keys
|
|
157
|
+
});
|
|
158
|
+
setKeyToOrder(newOrderMap);
|
|
159
|
+
onOrderMapChange?.(newOrderMap);
|
|
160
|
+
const newRenderKeys = new Set(newOrderMap.keys());
|
|
161
|
+
setRenderKeys((prev)=>prev.intersection(newRenderKeys).union(newRenderKeys.difference(prev)));
|
|
162
|
+
}
|
|
163
|
+
}, [
|
|
164
|
+
dragging,
|
|
165
|
+
orders,
|
|
166
|
+
keyToItem,
|
|
167
|
+
keyToOrder,
|
|
168
|
+
onOrderMapChange
|
|
169
|
+
]);
|
|
170
|
+
const [renderKeys, setRenderKeys] = (0, external_react_namespaceObject.useState)(()=>new Set(keyToOrder.keys()));
|
|
171
|
+
const recent = (0, external_react_namespaceObject.useRef)(void 0);
|
|
172
|
+
(0, external_react_namespaceObject.useEffect)(()=>{
|
|
173
|
+
if (!!dragging && (!isTheSameArray(dragging.orders, orders) || dragging.columns !== columns || dragging.rows !== rows || dragging.gapX !== gapX || dragging.gapY !== gapY || dragging.itemWidth !== itemWidth || dragging.itemHeight !== itemHeight || !isTheSameIterable(dragging.keyToOrder.keys(), keyToItem.keys()))) {
|
|
174
|
+
setDragging(void 0);
|
|
175
|
+
if (isTheSameArray(dragging.orders, orders) && isTheSameIterable(dragging.keyToOrder.keys(), keyToItem.keys())) {
|
|
176
|
+
setKeyToOrder(dragging.keyToOrder);
|
|
177
|
+
onOrderMapChange?.(dragging.keyToOrder);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}, [
|
|
181
|
+
orders,
|
|
182
|
+
keyToItem,
|
|
183
|
+
keyToOrder,
|
|
184
|
+
onOrderMapChange
|
|
185
|
+
]);
|
|
186
|
+
(0, external_react_namespaceObject.useEffect)(()=>{
|
|
187
|
+
if (orderMap === keyToOrder) return;
|
|
188
|
+
if (orderMap) setKeyToOrder(orderMap);
|
|
189
|
+
else onOrderMapChange?.(keyToOrder);
|
|
190
|
+
}, [
|
|
191
|
+
orderMap,
|
|
192
|
+
keyToOrder,
|
|
193
|
+
onOrderMapChange
|
|
194
|
+
]);
|
|
195
|
+
function onDragMoveStart(key, event) {
|
|
196
|
+
const position = getPosition({
|
|
197
|
+
order: keyToOrder.get(key),
|
|
198
|
+
columns,
|
|
199
|
+
gapX,
|
|
200
|
+
gapY,
|
|
201
|
+
itemWidth,
|
|
202
|
+
itemHeight
|
|
203
|
+
});
|
|
204
|
+
recent.current = key;
|
|
205
|
+
setDragging({
|
|
206
|
+
key,
|
|
207
|
+
startX: position.x,
|
|
208
|
+
startY: position.y,
|
|
209
|
+
deltaX: 0,
|
|
210
|
+
deltaY: 0,
|
|
211
|
+
orders,
|
|
212
|
+
columns,
|
|
213
|
+
rows,
|
|
214
|
+
gapX,
|
|
215
|
+
gapY,
|
|
216
|
+
itemWidth,
|
|
217
|
+
itemHeight,
|
|
218
|
+
keyToOrder: keyToOrder
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
function onDragMove(event) {
|
|
222
|
+
if (!dragging) return;
|
|
223
|
+
const { deltaX, deltaY } = event;
|
|
224
|
+
const { key, orders, keyToOrder, startX, startY, columns, gapX, gapY, itemWidth, itemHeight } = dragging;
|
|
225
|
+
log(key);
|
|
226
|
+
setDragging((prev)=>({
|
|
227
|
+
...prev,
|
|
228
|
+
deltaX,
|
|
229
|
+
deltaY
|
|
230
|
+
}));
|
|
231
|
+
const x = startX + deltaX;
|
|
232
|
+
const y = startY + deltaY;
|
|
233
|
+
const currentOrder = keyToOrder.get(key);
|
|
234
|
+
const currentOrderIndex = orders.indexOf(currentOrder);
|
|
235
|
+
const nearestOrder = orders.toSorted((a, b)=>{
|
|
236
|
+
const aPosition = getPosition({
|
|
237
|
+
order: a,
|
|
238
|
+
columns,
|
|
239
|
+
gapX,
|
|
240
|
+
gapY,
|
|
241
|
+
itemWidth,
|
|
242
|
+
itemHeight
|
|
243
|
+
});
|
|
244
|
+
const bPosition = getPosition({
|
|
245
|
+
order: b,
|
|
246
|
+
columns,
|
|
247
|
+
gapX,
|
|
248
|
+
gapY,
|
|
249
|
+
itemWidth,
|
|
250
|
+
itemHeight
|
|
251
|
+
});
|
|
252
|
+
const aDistance = (x - aPosition.x) ** 2 + (y - aPosition.y) ** 2;
|
|
253
|
+
const bDistance = (x - bPosition.x) ** 2 + (y - bPosition.y) ** 2;
|
|
254
|
+
if (aDistance - bDistance !== 0) return aDistance - bDistance;
|
|
255
|
+
const aIndex = orders.indexOf(a);
|
|
256
|
+
const bIndex = orders.indexOf(b);
|
|
257
|
+
return Math.abs(aIndex - currentOrderIndex) - Math.abs(bIndex - currentOrderIndex);
|
|
258
|
+
})[0];
|
|
259
|
+
if (nearestOrder === currentOrder) {
|
|
260
|
+
setKeyToOrder(keyToOrder);
|
|
261
|
+
onOrderMapChange?.(keyToOrder);
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
const newKeyToOrder = new Map(keyToOrder);
|
|
265
|
+
newKeyToOrder.set(key, nearestOrder);
|
|
266
|
+
const orderToKey = getOrderToKey(keyToOrder);
|
|
267
|
+
if (!orderToKey.has(nearestOrder)) {
|
|
268
|
+
setKeyToOrder(newKeyToOrder);
|
|
269
|
+
onOrderMapChange?.(newKeyToOrder);
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
const nearestOrderIndex = orders.indexOf(nearestOrder);
|
|
273
|
+
const itemDirection = currentOrderIndex > nearestOrderIndex ? "decrease" : "increase";
|
|
274
|
+
const targetDirection = "decrease" === itemDirection && orders.slice(0, nearestOrderIndex).some((order)=>!orderToKey.has(order)) || "increase" === itemDirection && orders.slice(nearestOrderIndex + 1).every((order)=>orderToKey.has(order)) ? "decrease" : "increase";
|
|
275
|
+
function moveTargetOrder(targetOrder) {
|
|
276
|
+
const targetKey = orderToKey.get(targetOrder);
|
|
277
|
+
const targetOrderIndex = orders.indexOf(targetOrder);
|
|
278
|
+
const nextOrderIndex = targetOrderIndex + ("decrease" === targetDirection ? -1 : 1);
|
|
279
|
+
const nextOrder = orders[nextOrderIndex];
|
|
280
|
+
newKeyToOrder.set(targetKey, nextOrder);
|
|
281
|
+
if (nextOrder === currentOrder || !orderToKey.has(nextOrder)) return;
|
|
282
|
+
moveTargetOrder(nextOrder);
|
|
283
|
+
}
|
|
284
|
+
moveTargetOrder(nearestOrder);
|
|
285
|
+
setKeyToOrder(newKeyToOrder);
|
|
286
|
+
onOrderMapChange?.(newKeyToOrder);
|
|
287
|
+
}
|
|
288
|
+
function onDragMoveEnd() {
|
|
289
|
+
if (!dragging) return;
|
|
290
|
+
setDragging(void 0);
|
|
291
|
+
}
|
|
292
|
+
return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
|
|
293
|
+
className: (0, external_deepsea_tools_namespaceObject.clsx)(external_DraggableGrid_module_cjs_default().draggableGrid, "function" == typeof className ? className({
|
|
294
|
+
isDragging: !!dragging
|
|
295
|
+
}) : className, "function" == typeof classNames?.container ? classNames.container({
|
|
296
|
+
isDragging: !!dragging
|
|
297
|
+
}) : classNames?.container),
|
|
298
|
+
style: {
|
|
299
|
+
"--width": `${columns * (itemWidth + gapX) - gapX}px`,
|
|
300
|
+
"--height": `${rows * (itemHeight + gapY) - gapY}px`,
|
|
301
|
+
..."function" == typeof style ? style({
|
|
302
|
+
isDragging: !!dragging
|
|
303
|
+
}) : style
|
|
304
|
+
},
|
|
305
|
+
...rest,
|
|
306
|
+
children: Array.from(renderKeys).map((key)=>{
|
|
307
|
+
const item = keyToItem.get(key);
|
|
308
|
+
const order = keyToOrder.get(key);
|
|
309
|
+
const isDragging = dragging?.key === key;
|
|
310
|
+
const position = getPosition({
|
|
311
|
+
order,
|
|
312
|
+
columns,
|
|
313
|
+
gapX,
|
|
314
|
+
gapY,
|
|
315
|
+
itemWidth,
|
|
316
|
+
itemHeight
|
|
317
|
+
});
|
|
318
|
+
const style = isDragging ? {
|
|
319
|
+
"--width": `${itemWidth}px`,
|
|
320
|
+
"--height": `${itemHeight}px`,
|
|
321
|
+
"--translate-x": `${dragging.startX + dragging.deltaX}px`,
|
|
322
|
+
"--translate-y": `${dragging.startY + dragging.deltaY}px`,
|
|
323
|
+
"--transition-property": "none",
|
|
324
|
+
"--z-index": 999999
|
|
325
|
+
} : {
|
|
326
|
+
"--width": `${itemWidth}px`,
|
|
327
|
+
"--height": `${itemHeight}px`,
|
|
328
|
+
"--translate-x": `${position.x}px`,
|
|
329
|
+
"--translate-y": `${position.y}px`,
|
|
330
|
+
"--transition-property": "transform",
|
|
331
|
+
"--z-index": recent.current === key ? 999999 : keyToOrder.get(key)
|
|
332
|
+
};
|
|
333
|
+
const children = render ? render(item, {
|
|
334
|
+
order,
|
|
335
|
+
isDragging: isDragging
|
|
336
|
+
}) : item;
|
|
337
|
+
return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(DraggableGridItem, {
|
|
338
|
+
className: (0, external_deepsea_tools_namespaceObject.clsx)(external_DraggableGrid_module_cjs_default().draggableGridItem, "function" == typeof classNames?.item ? classNames.item({
|
|
339
|
+
order,
|
|
340
|
+
isDragging: isDragging
|
|
341
|
+
}) : classNames?.item),
|
|
342
|
+
style: style,
|
|
343
|
+
onDragMoveStart: disabled ? void 0 : (event)=>onDragMoveStart(key, event),
|
|
344
|
+
onDragMove: disabled ? void 0 : onDragMove,
|
|
345
|
+
onDragMoveEnd: disabled ? void 0 : onDragMoveEnd,
|
|
346
|
+
children: children
|
|
347
|
+
}, key);
|
|
348
|
+
})
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
exports.DraggableGrid = __webpack_exports__.DraggableGrid;
|
|
352
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
353
|
+
"DraggableGrid"
|
|
354
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
355
|
+
Object.defineProperty(exports, '__esModule', {
|
|
356
|
+
value: true
|
|
357
|
+
});
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { CSSProperties, ComponentProps, Key, ReactNode } from "react";
|
|
2
|
+
export type DraggableGridClassName = string | ((status: ContainerStatus) => string);
|
|
3
|
+
export type DraggableGridItemClassName = string | ((status: DraggableGridItemStatus) => string);
|
|
4
|
+
export type DraggableGridStyle = CSSProperties | ((status: ContainerStatus) => CSSProperties);
|
|
5
|
+
export interface DraggableGridClassNames {
|
|
6
|
+
/** 容器 */
|
|
7
|
+
container?: DraggableGridClassName;
|
|
8
|
+
/** 元素 */
|
|
9
|
+
item?: DraggableGridItemClassName;
|
|
10
|
+
}
|
|
11
|
+
export interface ContainerStatus {
|
|
12
|
+
/** 是否被拖拽 */
|
|
13
|
+
isDragging: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface DraggableGridItemStatus {
|
|
16
|
+
/** 当前次序 */
|
|
17
|
+
order: number;
|
|
18
|
+
/** 是否被拖拽 */
|
|
19
|
+
isDragging: boolean;
|
|
20
|
+
}
|
|
21
|
+
/** 元素的 key 到次序的映射 */
|
|
22
|
+
export type DraggableGridKeyToOrder = Map<Key, number>;
|
|
23
|
+
/** 次序到元素的 key 的映射 */
|
|
24
|
+
export type DraggableGridOrderToKey = Map<number, Key>;
|
|
25
|
+
export type DraggableGridProps<T> = Omit<ComponentProps<"div">, "className" | "children"> & {
|
|
26
|
+
/** 类名 */
|
|
27
|
+
className?: DraggableGridClassName;
|
|
28
|
+
/** 类名 */
|
|
29
|
+
classNames?: DraggableGridClassNames;
|
|
30
|
+
/** 样式 */
|
|
31
|
+
style?: DraggableGridStyle;
|
|
32
|
+
/** 数据源 */
|
|
33
|
+
items?: T[];
|
|
34
|
+
/** 是否禁用拖拽 */
|
|
35
|
+
disabled?: boolean;
|
|
36
|
+
/** 列数 */
|
|
37
|
+
columns: number;
|
|
38
|
+
/** 行数 */
|
|
39
|
+
rows: number;
|
|
40
|
+
/**
|
|
41
|
+
* 间距
|
|
42
|
+
* @default 0
|
|
43
|
+
*/
|
|
44
|
+
gap?: number;
|
|
45
|
+
/**
|
|
46
|
+
* 水平间距
|
|
47
|
+
* @default 0
|
|
48
|
+
*/
|
|
49
|
+
gapX?: number;
|
|
50
|
+
/**
|
|
51
|
+
* 垂直间距
|
|
52
|
+
* @default 0
|
|
53
|
+
*/
|
|
54
|
+
gapY?: number;
|
|
55
|
+
/** 元素宽度 */
|
|
56
|
+
itemWidth: number;
|
|
57
|
+
/** 元素高度 */
|
|
58
|
+
itemHeight: number;
|
|
59
|
+
/** 元素的 key 到次序的映射 */
|
|
60
|
+
orderMap?: DraggableGridKeyToOrder;
|
|
61
|
+
/** 次序变化时回调 */
|
|
62
|
+
onOrderMapChange?: (orderMap: DraggableGridKeyToOrder) => void;
|
|
63
|
+
/** 禁用的元素 */
|
|
64
|
+
isItemDisabled?: Key[] | ((item: T) => boolean);
|
|
65
|
+
/** 禁用的次序 */
|
|
66
|
+
isOrderDisabled?: number[] | ((order: number) => boolean);
|
|
67
|
+
/** 次序的优先级,可以通过此函数调整元素的优先放置的方向,左上,右上,左下,右下,中心,顺时针,逆时针等等 */
|
|
68
|
+
orderPriority?: (a: number, b: number) => number;
|
|
69
|
+
} & (T extends ReactNode ? {
|
|
70
|
+
/** 渲染函数,当 T 为 ReactNode 时,render 为可选 */
|
|
71
|
+
render?: (item: T, status: DraggableGridItemStatus) => ReactNode;
|
|
72
|
+
} : {
|
|
73
|
+
/** 渲染函数,当 T 为 ReactNode 时,render 为可选 */
|
|
74
|
+
render: (item: T, status: DraggableGridItemStatus) => ReactNode;
|
|
75
|
+
}) & (T extends Key ? {
|
|
76
|
+
/** 获取 key 的函数,当 T 为 Key 时,keyExtractor 为可选 */
|
|
77
|
+
keyExtractor?: (item: T) => Key;
|
|
78
|
+
} : {
|
|
79
|
+
/** 获取 key 的函数,当 T 为 Key 时,keyExtractor 为可选 */
|
|
80
|
+
keyExtractor: (item: T) => Key;
|
|
81
|
+
});
|
|
82
|
+
export declare function DraggableGrid<T>({ className, classNames, style, items, disabled, columns, rows, gap, gapX, gapY, itemWidth, itemHeight, orderMap, onOrderMapChange, render, keyExtractor, isItemDisabled, isOrderDisabled, orderPriority, ...rest }: DraggableGridProps<T>): import("react/jsx-runtime").JSX.Element;
|