@dnd-kit/react 0.1.5 → 0.1.6-beta-20250501000355
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/index.cjs +235 -25
- package/index.js +236 -26
- package/package.json +4 -4
package/index.cjs
CHANGED
|
@@ -6,6 +6,7 @@ var hooks = require('@dnd-kit/react/hooks');
|
|
|
6
6
|
var state = require('@dnd-kit/state');
|
|
7
7
|
var jsxRuntime = require('react/jsx-runtime');
|
|
8
8
|
var utilities = require('@dnd-kit/react/utilities');
|
|
9
|
+
var abstract = require('@dnd-kit/abstract');
|
|
9
10
|
|
|
10
11
|
var __defProp = Object.defineProperty;
|
|
11
12
|
var __defProps = Object.defineProperties;
|
|
@@ -49,15 +50,15 @@ function useRenderer() {
|
|
|
49
50
|
const resolver = react.useRef(null);
|
|
50
51
|
const renderer = hooks.useConstant(() => ({
|
|
51
52
|
get rendering() {
|
|
52
|
-
var
|
|
53
|
-
return (
|
|
53
|
+
var _a2;
|
|
54
|
+
return (_a2 = rendering.current) != null ? _a2 : Promise.resolve();
|
|
54
55
|
}
|
|
55
56
|
}));
|
|
56
57
|
hooks.useOnValueChange(
|
|
57
58
|
transitionCount,
|
|
58
59
|
() => {
|
|
59
|
-
var
|
|
60
|
-
(
|
|
60
|
+
var _a2;
|
|
61
|
+
(_a2 = resolver.current) == null ? void 0 : _a2.call(resolver);
|
|
61
62
|
rendering.current = null;
|
|
62
63
|
},
|
|
63
64
|
react.useLayoutEffect
|
|
@@ -78,8 +79,8 @@ function useRenderer() {
|
|
|
78
79
|
};
|
|
79
80
|
}
|
|
80
81
|
var options = [void 0, state.deepEqual];
|
|
81
|
-
function DragDropProvider(
|
|
82
|
-
var _b =
|
|
82
|
+
function DragDropProvider(_a2) {
|
|
83
|
+
var _b = _a2, {
|
|
83
84
|
children,
|
|
84
85
|
onCollision,
|
|
85
86
|
onBeforeDragStart,
|
|
@@ -96,10 +97,10 @@ function DragDropProvider(_a) {
|
|
|
96
97
|
"onDragOver",
|
|
97
98
|
"onDragEnd"
|
|
98
99
|
]);
|
|
99
|
-
var
|
|
100
|
+
var _a3;
|
|
100
101
|
const { renderer, trackRendering } = useRenderer();
|
|
101
102
|
const [manager, setManager] = react.useState(
|
|
102
|
-
(
|
|
103
|
+
(_a3 = input.manager) != null ? _a3 : null
|
|
103
104
|
);
|
|
104
105
|
const { plugins, modifiers, sensors } = input;
|
|
105
106
|
const handleBeforeDragStart = hooks.useLatest(onBeforeDragStart);
|
|
@@ -109,8 +110,8 @@ function DragDropProvider(_a) {
|
|
|
109
110
|
const handleDragEnd = hooks.useLatest(onDragEnd);
|
|
110
111
|
const handleCollision = hooks.useLatest(onCollision);
|
|
111
112
|
react.useEffect(() => {
|
|
112
|
-
var
|
|
113
|
-
const manager2 = (
|
|
113
|
+
var _a4;
|
|
114
|
+
const manager2 = (_a4 = input.manager) != null ? _a4 : new dom.DragDropManager(input);
|
|
114
115
|
manager2.renderer = renderer;
|
|
115
116
|
manager2.monitor.addEventListener("beforedragstart", (event, manager3) => {
|
|
116
117
|
const callback = handleBeforeDragStart.current;
|
|
@@ -121,8 +122,8 @@ function DragDropProvider(_a) {
|
|
|
121
122
|
manager2.monitor.addEventListener(
|
|
122
123
|
"dragstart",
|
|
123
124
|
(event, manager3) => {
|
|
124
|
-
var
|
|
125
|
-
return (
|
|
125
|
+
var _a5;
|
|
126
|
+
return (_a5 = handleDragStart.current) == null ? void 0 : _a5.call(handleDragStart, event, manager3);
|
|
126
127
|
}
|
|
127
128
|
);
|
|
128
129
|
manager2.monitor.addEventListener("dragover", (event, manager3) => {
|
|
@@ -146,8 +147,8 @@ function DragDropProvider(_a) {
|
|
|
146
147
|
manager2.monitor.addEventListener(
|
|
147
148
|
"collision",
|
|
148
149
|
(event, manager3) => {
|
|
149
|
-
var
|
|
150
|
-
return (
|
|
150
|
+
var _a5;
|
|
151
|
+
return (_a5 = handleCollision.current) == null ? void 0 : _a5.call(handleCollision, event, manager3);
|
|
151
152
|
}
|
|
152
153
|
);
|
|
153
154
|
react.startTransition(() => setManager(manager2));
|
|
@@ -176,8 +177,8 @@ function useDragDropManager() {
|
|
|
176
177
|
|
|
177
178
|
// src/core/hooks/useInstance.ts
|
|
178
179
|
function useInstance(initializer) {
|
|
179
|
-
var
|
|
180
|
-
const manager = (
|
|
180
|
+
var _a2;
|
|
181
|
+
const manager = (_a2 = useDragDropManager()) != null ? _a2 : void 0;
|
|
181
182
|
const [instance] = react.useState(() => initializer(manager));
|
|
182
183
|
if (instance.manager !== manager) {
|
|
183
184
|
instance.manager = manager;
|
|
@@ -215,8 +216,8 @@ function useDraggable(input) {
|
|
|
215
216
|
hooks.useOnValueChange(
|
|
216
217
|
input.feedback,
|
|
217
218
|
() => {
|
|
218
|
-
var
|
|
219
|
-
return draggable.feedback = (
|
|
219
|
+
var _a2;
|
|
220
|
+
return draggable.feedback = (_a2 = input.feedback) != null ? _a2 : "default";
|
|
220
221
|
}
|
|
221
222
|
);
|
|
222
223
|
hooks.useOnValueChange(
|
|
@@ -242,8 +243,8 @@ function useDraggable(input) {
|
|
|
242
243
|
),
|
|
243
244
|
ref: react.useCallback(
|
|
244
245
|
(element2) => {
|
|
245
|
-
var
|
|
246
|
-
if (!element2 && ((
|
|
246
|
+
var _a2, _b;
|
|
247
|
+
if (!element2 && ((_a2 = draggable.element) == null ? void 0 : _a2.isConnected) && !((_b = draggable.manager) == null ? void 0 : _b.dragOperation.status.idle)) {
|
|
247
248
|
return;
|
|
248
249
|
}
|
|
249
250
|
draggable.element = element2 != null ? element2 : void 0;
|
|
@@ -316,6 +317,207 @@ function Children({
|
|
|
316
317
|
}) {
|
|
317
318
|
return children(hooks.useDeepSignal(source));
|
|
318
319
|
}
|
|
320
|
+
var __create = Object.create;
|
|
321
|
+
var __defProp2 = Object.defineProperty;
|
|
322
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
323
|
+
var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
|
|
324
|
+
var __typeError = (msg) => {
|
|
325
|
+
throw TypeError(msg);
|
|
326
|
+
};
|
|
327
|
+
var __defNormalProp2 = (obj, key, value) => key in obj ? __defProp2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
328
|
+
var __decoratorStart = (base) => {
|
|
329
|
+
var _a2;
|
|
330
|
+
return [, , , __create((_a2 = base == null ? void 0 : base[__knownSymbol("metadata")]) != null ? _a2 : null)];
|
|
331
|
+
};
|
|
332
|
+
var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
|
|
333
|
+
var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
|
|
334
|
+
var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
|
|
335
|
+
var __decoratorMetadata = (array, target) => __defNormalProp2(target, __knownSymbol("metadata"), array[3]);
|
|
336
|
+
var __runInitializers = (array, flags, self, value) => {
|
|
337
|
+
for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) fns[i].call(self) ;
|
|
338
|
+
return value;
|
|
339
|
+
};
|
|
340
|
+
var __decorateElement = (array, flags, name, decorators, target, extra) => {
|
|
341
|
+
var it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
|
|
342
|
+
var j = 2 , key = __decoratorStrings[k + 5];
|
|
343
|
+
var extraInitializers = array[j] || (array[j] = []);
|
|
344
|
+
var desc = ((target = target.prototype), __getOwnPropDesc(target , name));
|
|
345
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
346
|
+
ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
|
|
347
|
+
{
|
|
348
|
+
ctx.static = s, ctx.private = p, access = ctx.access = { has: (x) => name in x };
|
|
349
|
+
access.get = (x) => x[name];
|
|
350
|
+
}
|
|
351
|
+
it = (0, decorators[i])(desc[key] , ctx), done._ = 1;
|
|
352
|
+
__expectFn(it) && (desc[key] = it );
|
|
353
|
+
}
|
|
354
|
+
return desc && __defProp2(target, name, desc), target;
|
|
355
|
+
};
|
|
356
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
357
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
358
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
359
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
360
|
+
var Point = class _Point {
|
|
361
|
+
/**
|
|
362
|
+
* @param {number} Coordinate of the point on the horizontal axis
|
|
363
|
+
* @param {number} Coordinate of the point on the vertical axis
|
|
364
|
+
*/
|
|
365
|
+
constructor(x, y) {
|
|
366
|
+
this.x = x;
|
|
367
|
+
this.y = y;
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Returns the delta between this point and another point.
|
|
371
|
+
*
|
|
372
|
+
* @param {Point} a - A point
|
|
373
|
+
* @param {Point} b - Another point
|
|
374
|
+
*/
|
|
375
|
+
static delta(a, b) {
|
|
376
|
+
return new _Point(a.x - b.x, a.y - b.y);
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Returns the distance (hypotenuse) between this point and another point.
|
|
380
|
+
*
|
|
381
|
+
* @param {Point} a - A point
|
|
382
|
+
* @param {Point} b - Another point
|
|
383
|
+
*/
|
|
384
|
+
static distance(a, b) {
|
|
385
|
+
return Math.hypot(a.x - b.x, a.y - b.y);
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Returns true if both points are equal.
|
|
389
|
+
*
|
|
390
|
+
* @param {Point} a - A point
|
|
391
|
+
* @param {Point} b - Another point
|
|
392
|
+
*/
|
|
393
|
+
static equals(a, b) {
|
|
394
|
+
return a.x === b.x && a.y === b.y;
|
|
395
|
+
}
|
|
396
|
+
static from({ x, y }) {
|
|
397
|
+
return new _Point(x, y);
|
|
398
|
+
}
|
|
399
|
+
};
|
|
400
|
+
var _direction_dec;
|
|
401
|
+
var _delta_dec;
|
|
402
|
+
var _a;
|
|
403
|
+
var _timestamp;
|
|
404
|
+
var _init;
|
|
405
|
+
var Position = class extends (_a = state.ValueHistory, _delta_dec = [state.derived], _direction_dec = [state.derived], _a) {
|
|
406
|
+
constructor(initialValue) {
|
|
407
|
+
const point = Point.from(initialValue);
|
|
408
|
+
super(point, (a, b) => Point.equals(a, b));
|
|
409
|
+
__runInitializers(_init, 5, this);
|
|
410
|
+
__privateAdd(this, _timestamp, 0);
|
|
411
|
+
this.velocity = { x: 0, y: 0 };
|
|
412
|
+
}
|
|
413
|
+
get delta() {
|
|
414
|
+
return Point.delta(this.current, this.initial);
|
|
415
|
+
}
|
|
416
|
+
get direction() {
|
|
417
|
+
const { current, previous } = this;
|
|
418
|
+
if (!previous) return null;
|
|
419
|
+
const delta = {
|
|
420
|
+
x: current.x - previous.x,
|
|
421
|
+
y: current.y - previous.y
|
|
422
|
+
};
|
|
423
|
+
if (!delta.x && !delta.y) {
|
|
424
|
+
return null;
|
|
425
|
+
}
|
|
426
|
+
if (Math.abs(delta.x) > Math.abs(delta.y)) {
|
|
427
|
+
return delta.x > 0 ? "right" : "left";
|
|
428
|
+
}
|
|
429
|
+
return delta.y > 0 ? "down" : "up";
|
|
430
|
+
}
|
|
431
|
+
get current() {
|
|
432
|
+
return super.current;
|
|
433
|
+
}
|
|
434
|
+
set current(coordinates) {
|
|
435
|
+
const { current } = this;
|
|
436
|
+
const point = Point.from(coordinates);
|
|
437
|
+
const delta = {
|
|
438
|
+
x: point.x - current.x,
|
|
439
|
+
y: point.y - current.y
|
|
440
|
+
};
|
|
441
|
+
const timestamp = Date.now();
|
|
442
|
+
const timeDelta = timestamp - __privateGet(this, _timestamp);
|
|
443
|
+
const velocity = (delta2) => Math.round(delta2 / timeDelta * 100);
|
|
444
|
+
state.batch(() => {
|
|
445
|
+
__privateSet(this, _timestamp, timestamp);
|
|
446
|
+
this.velocity = {
|
|
447
|
+
x: velocity(delta.x),
|
|
448
|
+
y: velocity(delta.y)
|
|
449
|
+
};
|
|
450
|
+
super.current = point;
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
reset(coordinates = this.defaultValue) {
|
|
454
|
+
super.reset(Point.from(coordinates));
|
|
455
|
+
this.velocity = { x: 0, y: 0 };
|
|
456
|
+
}
|
|
457
|
+
};
|
|
458
|
+
_init = __decoratorStart(_a);
|
|
459
|
+
_timestamp = /* @__PURE__ */ new WeakMap();
|
|
460
|
+
__decorateElement(_init, 2, "delta", _delta_dec, Position);
|
|
461
|
+
__decorateElement(_init, 2, "direction", _direction_dec, Position);
|
|
462
|
+
__decoratorMetadata(_init, Position);
|
|
463
|
+
var Axis = /* @__PURE__ */ ((Axis2) => {
|
|
464
|
+
Axis2["Horizontal"] = "x";
|
|
465
|
+
Axis2["Vertical"] = "y";
|
|
466
|
+
return Axis2;
|
|
467
|
+
})(Axis || {});
|
|
468
|
+
Object.values(Axis);
|
|
469
|
+
var pointerIntersection = ({
|
|
470
|
+
dragOperation,
|
|
471
|
+
droppable
|
|
472
|
+
}) => {
|
|
473
|
+
const pointerCoordinates = dragOperation.position.current;
|
|
474
|
+
if (!pointerCoordinates) {
|
|
475
|
+
return null;
|
|
476
|
+
}
|
|
477
|
+
const { id } = droppable;
|
|
478
|
+
if (!droppable.shape) {
|
|
479
|
+
return null;
|
|
480
|
+
}
|
|
481
|
+
if (droppable.shape.containsPoint(pointerCoordinates)) {
|
|
482
|
+
const distance = Point.distance(droppable.shape.center, pointerCoordinates);
|
|
483
|
+
return {
|
|
484
|
+
id,
|
|
485
|
+
value: 1 / distance,
|
|
486
|
+
type: abstract.CollisionType.PointerIntersection,
|
|
487
|
+
priority: abstract.CollisionPriority.High
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
return null;
|
|
491
|
+
};
|
|
492
|
+
var shapeIntersection = ({
|
|
493
|
+
dragOperation,
|
|
494
|
+
droppable
|
|
495
|
+
}) => {
|
|
496
|
+
const { shape } = dragOperation;
|
|
497
|
+
if (!droppable.shape || !(shape == null ? void 0 : shape.current)) {
|
|
498
|
+
return null;
|
|
499
|
+
}
|
|
500
|
+
const intersectionArea = shape.current.intersectionArea(droppable.shape);
|
|
501
|
+
if (intersectionArea) {
|
|
502
|
+
const { position } = dragOperation;
|
|
503
|
+
const distance = Point.distance(droppable.shape.center, position.current);
|
|
504
|
+
const intersectionRatio = intersectionArea / (shape.current.area + droppable.shape.area - intersectionArea);
|
|
505
|
+
const value = intersectionRatio / distance;
|
|
506
|
+
return {
|
|
507
|
+
id: droppable.id,
|
|
508
|
+
value,
|
|
509
|
+
type: abstract.CollisionType.ShapeIntersection,
|
|
510
|
+
priority: abstract.CollisionPriority.Normal
|
|
511
|
+
};
|
|
512
|
+
}
|
|
513
|
+
return null;
|
|
514
|
+
};
|
|
515
|
+
var defaultCollisionDetection = (args) => {
|
|
516
|
+
var _a2;
|
|
517
|
+
return (_a2 = pointerIntersection(args)) != null ? _a2 : shapeIntersection(args);
|
|
518
|
+
};
|
|
519
|
+
|
|
520
|
+
// src/core/droppable/useDroppable.ts
|
|
319
521
|
function useDroppable(input) {
|
|
320
522
|
const { collisionDetector, data, disabled, element, id, accept, type } = input;
|
|
321
523
|
const droppable = useInstance(
|
|
@@ -330,11 +532,19 @@ function useDroppable(input) {
|
|
|
330
532
|
const trackedDroppalbe = hooks.useDeepSignal(droppable);
|
|
331
533
|
hooks.useOnValueChange(id, () => droppable.id = id);
|
|
332
534
|
hooks.useOnElementChange(element, (element2) => droppable.element = element2);
|
|
333
|
-
hooks.useOnValueChange(
|
|
334
|
-
|
|
535
|
+
hooks.useOnValueChange(
|
|
536
|
+
accept,
|
|
537
|
+
() => droppable.accept = accept,
|
|
538
|
+
void 0,
|
|
539
|
+
state.deepEqual
|
|
540
|
+
);
|
|
541
|
+
hooks.useOnValueChange(
|
|
542
|
+
collisionDetector,
|
|
543
|
+
() => droppable.collisionDetector = collisionDetector != null ? collisionDetector : defaultCollisionDetection
|
|
544
|
+
);
|
|
335
545
|
hooks.useOnValueChange(data, () => data && (droppable.data = data));
|
|
336
546
|
hooks.useOnValueChange(disabled, () => droppable.disabled = disabled === true);
|
|
337
|
-
hooks.useOnValueChange(type, () => droppable.
|
|
547
|
+
hooks.useOnValueChange(type, () => droppable.type = type);
|
|
338
548
|
return {
|
|
339
549
|
droppable: trackedDroppalbe,
|
|
340
550
|
get isDropTarget() {
|
|
@@ -342,8 +552,8 @@ function useDroppable(input) {
|
|
|
342
552
|
},
|
|
343
553
|
ref: react.useCallback(
|
|
344
554
|
(element2) => {
|
|
345
|
-
var
|
|
346
|
-
if (!element2 && ((
|
|
555
|
+
var _a2, _b;
|
|
556
|
+
if (!element2 && ((_a2 = droppable.element) == null ? void 0 : _a2.isConnected) && !((_b = droppable.manager) == null ? void 0 : _b.dragOperation.status.idle)) {
|
|
347
557
|
return;
|
|
348
558
|
}
|
|
349
559
|
droppable.element = element2 != null ? element2 : void 0;
|
package/index.js
CHANGED
|
@@ -2,9 +2,10 @@ import { createContext, useState, useEffect, startTransition, useContext, useCal
|
|
|
2
2
|
import { DragDropManager, defaultPreset, Draggable, Feedback, Droppable } from '@dnd-kit/dom';
|
|
3
3
|
export { KeyboardSensor, PointerSensor } from '@dnd-kit/dom';
|
|
4
4
|
import { useLatest, useOnValueChange, useIsomorphicLayoutEffect, useDeepSignal, useOnElementChange, useComputed, useConstant } from '@dnd-kit/react/hooks';
|
|
5
|
-
import { deepEqual } from '@dnd-kit/state';
|
|
5
|
+
import { deepEqual, ValueHistory, derived, batch } from '@dnd-kit/state';
|
|
6
6
|
import { jsx } from 'react/jsx-runtime';
|
|
7
7
|
import { currentValue } from '@dnd-kit/react/utilities';
|
|
8
|
+
import { CollisionType, CollisionPriority } from '@dnd-kit/abstract';
|
|
8
9
|
|
|
9
10
|
var __defProp = Object.defineProperty;
|
|
10
11
|
var __defProps = Object.defineProperties;
|
|
@@ -48,15 +49,15 @@ function useRenderer() {
|
|
|
48
49
|
const resolver = useRef(null);
|
|
49
50
|
const renderer = useConstant(() => ({
|
|
50
51
|
get rendering() {
|
|
51
|
-
var
|
|
52
|
-
return (
|
|
52
|
+
var _a2;
|
|
53
|
+
return (_a2 = rendering.current) != null ? _a2 : Promise.resolve();
|
|
53
54
|
}
|
|
54
55
|
}));
|
|
55
56
|
useOnValueChange(
|
|
56
57
|
transitionCount,
|
|
57
58
|
() => {
|
|
58
|
-
var
|
|
59
|
-
(
|
|
59
|
+
var _a2;
|
|
60
|
+
(_a2 = resolver.current) == null ? void 0 : _a2.call(resolver);
|
|
60
61
|
rendering.current = null;
|
|
61
62
|
},
|
|
62
63
|
useLayoutEffect
|
|
@@ -77,8 +78,8 @@ function useRenderer() {
|
|
|
77
78
|
};
|
|
78
79
|
}
|
|
79
80
|
var options = [void 0, deepEqual];
|
|
80
|
-
function DragDropProvider(
|
|
81
|
-
var _b =
|
|
81
|
+
function DragDropProvider(_a2) {
|
|
82
|
+
var _b = _a2, {
|
|
82
83
|
children,
|
|
83
84
|
onCollision,
|
|
84
85
|
onBeforeDragStart,
|
|
@@ -95,10 +96,10 @@ function DragDropProvider(_a) {
|
|
|
95
96
|
"onDragOver",
|
|
96
97
|
"onDragEnd"
|
|
97
98
|
]);
|
|
98
|
-
var
|
|
99
|
+
var _a3;
|
|
99
100
|
const { renderer, trackRendering } = useRenderer();
|
|
100
101
|
const [manager, setManager] = useState(
|
|
101
|
-
(
|
|
102
|
+
(_a3 = input.manager) != null ? _a3 : null
|
|
102
103
|
);
|
|
103
104
|
const { plugins, modifiers, sensors } = input;
|
|
104
105
|
const handleBeforeDragStart = useLatest(onBeforeDragStart);
|
|
@@ -108,8 +109,8 @@ function DragDropProvider(_a) {
|
|
|
108
109
|
const handleDragEnd = useLatest(onDragEnd);
|
|
109
110
|
const handleCollision = useLatest(onCollision);
|
|
110
111
|
useEffect(() => {
|
|
111
|
-
var
|
|
112
|
-
const manager2 = (
|
|
112
|
+
var _a4;
|
|
113
|
+
const manager2 = (_a4 = input.manager) != null ? _a4 : new DragDropManager(input);
|
|
113
114
|
manager2.renderer = renderer;
|
|
114
115
|
manager2.monitor.addEventListener("beforedragstart", (event, manager3) => {
|
|
115
116
|
const callback = handleBeforeDragStart.current;
|
|
@@ -120,8 +121,8 @@ function DragDropProvider(_a) {
|
|
|
120
121
|
manager2.monitor.addEventListener(
|
|
121
122
|
"dragstart",
|
|
122
123
|
(event, manager3) => {
|
|
123
|
-
var
|
|
124
|
-
return (
|
|
124
|
+
var _a5;
|
|
125
|
+
return (_a5 = handleDragStart.current) == null ? void 0 : _a5.call(handleDragStart, event, manager3);
|
|
125
126
|
}
|
|
126
127
|
);
|
|
127
128
|
manager2.monitor.addEventListener("dragover", (event, manager3) => {
|
|
@@ -145,8 +146,8 @@ function DragDropProvider(_a) {
|
|
|
145
146
|
manager2.monitor.addEventListener(
|
|
146
147
|
"collision",
|
|
147
148
|
(event, manager3) => {
|
|
148
|
-
var
|
|
149
|
-
return (
|
|
149
|
+
var _a5;
|
|
150
|
+
return (_a5 = handleCollision.current) == null ? void 0 : _a5.call(handleCollision, event, manager3);
|
|
150
151
|
}
|
|
151
152
|
);
|
|
152
153
|
startTransition(() => setManager(manager2));
|
|
@@ -175,8 +176,8 @@ function useDragDropManager() {
|
|
|
175
176
|
|
|
176
177
|
// src/core/hooks/useInstance.ts
|
|
177
178
|
function useInstance(initializer) {
|
|
178
|
-
var
|
|
179
|
-
const manager = (
|
|
179
|
+
var _a2;
|
|
180
|
+
const manager = (_a2 = useDragDropManager()) != null ? _a2 : void 0;
|
|
180
181
|
const [instance] = useState(() => initializer(manager));
|
|
181
182
|
if (instance.manager !== manager) {
|
|
182
183
|
instance.manager = manager;
|
|
@@ -214,8 +215,8 @@ function useDraggable(input) {
|
|
|
214
215
|
useOnValueChange(
|
|
215
216
|
input.feedback,
|
|
216
217
|
() => {
|
|
217
|
-
var
|
|
218
|
-
return draggable.feedback = (
|
|
218
|
+
var _a2;
|
|
219
|
+
return draggable.feedback = (_a2 = input.feedback) != null ? _a2 : "default";
|
|
219
220
|
}
|
|
220
221
|
);
|
|
221
222
|
useOnValueChange(
|
|
@@ -241,8 +242,8 @@ function useDraggable(input) {
|
|
|
241
242
|
),
|
|
242
243
|
ref: useCallback(
|
|
243
244
|
(element2) => {
|
|
244
|
-
var
|
|
245
|
-
if (!element2 && ((
|
|
245
|
+
var _a2, _b;
|
|
246
|
+
if (!element2 && ((_a2 = draggable.element) == null ? void 0 : _a2.isConnected) && !((_b = draggable.manager) == null ? void 0 : _b.dragOperation.status.idle)) {
|
|
246
247
|
return;
|
|
247
248
|
}
|
|
248
249
|
draggable.element = element2 != null ? element2 : void 0;
|
|
@@ -315,6 +316,207 @@ function Children({
|
|
|
315
316
|
}) {
|
|
316
317
|
return children(useDeepSignal(source));
|
|
317
318
|
}
|
|
319
|
+
var __create = Object.create;
|
|
320
|
+
var __defProp2 = Object.defineProperty;
|
|
321
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
322
|
+
var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
|
|
323
|
+
var __typeError = (msg) => {
|
|
324
|
+
throw TypeError(msg);
|
|
325
|
+
};
|
|
326
|
+
var __defNormalProp2 = (obj, key, value) => key in obj ? __defProp2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
327
|
+
var __decoratorStart = (base) => {
|
|
328
|
+
var _a2;
|
|
329
|
+
return [, , , __create((_a2 = base == null ? void 0 : base[__knownSymbol("metadata")]) != null ? _a2 : null)];
|
|
330
|
+
};
|
|
331
|
+
var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
|
|
332
|
+
var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
|
|
333
|
+
var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
|
|
334
|
+
var __decoratorMetadata = (array, target) => __defNormalProp2(target, __knownSymbol("metadata"), array[3]);
|
|
335
|
+
var __runInitializers = (array, flags, self, value) => {
|
|
336
|
+
for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) fns[i].call(self) ;
|
|
337
|
+
return value;
|
|
338
|
+
};
|
|
339
|
+
var __decorateElement = (array, flags, name, decorators, target, extra) => {
|
|
340
|
+
var it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
|
|
341
|
+
var j = 2 , key = __decoratorStrings[k + 5];
|
|
342
|
+
var extraInitializers = array[j] || (array[j] = []);
|
|
343
|
+
var desc = ((target = target.prototype), __getOwnPropDesc(target , name));
|
|
344
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
345
|
+
ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
|
|
346
|
+
{
|
|
347
|
+
ctx.static = s, ctx.private = p, access = ctx.access = { has: (x) => name in x };
|
|
348
|
+
access.get = (x) => x[name];
|
|
349
|
+
}
|
|
350
|
+
it = (0, decorators[i])(desc[key] , ctx), done._ = 1;
|
|
351
|
+
__expectFn(it) && (desc[key] = it );
|
|
352
|
+
}
|
|
353
|
+
return desc && __defProp2(target, name, desc), target;
|
|
354
|
+
};
|
|
355
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
356
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
357
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
358
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
359
|
+
var Point = class _Point {
|
|
360
|
+
/**
|
|
361
|
+
* @param {number} Coordinate of the point on the horizontal axis
|
|
362
|
+
* @param {number} Coordinate of the point on the vertical axis
|
|
363
|
+
*/
|
|
364
|
+
constructor(x, y) {
|
|
365
|
+
this.x = x;
|
|
366
|
+
this.y = y;
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Returns the delta between this point and another point.
|
|
370
|
+
*
|
|
371
|
+
* @param {Point} a - A point
|
|
372
|
+
* @param {Point} b - Another point
|
|
373
|
+
*/
|
|
374
|
+
static delta(a, b) {
|
|
375
|
+
return new _Point(a.x - b.x, a.y - b.y);
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Returns the distance (hypotenuse) between this point and another point.
|
|
379
|
+
*
|
|
380
|
+
* @param {Point} a - A point
|
|
381
|
+
* @param {Point} b - Another point
|
|
382
|
+
*/
|
|
383
|
+
static distance(a, b) {
|
|
384
|
+
return Math.hypot(a.x - b.x, a.y - b.y);
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Returns true if both points are equal.
|
|
388
|
+
*
|
|
389
|
+
* @param {Point} a - A point
|
|
390
|
+
* @param {Point} b - Another point
|
|
391
|
+
*/
|
|
392
|
+
static equals(a, b) {
|
|
393
|
+
return a.x === b.x && a.y === b.y;
|
|
394
|
+
}
|
|
395
|
+
static from({ x, y }) {
|
|
396
|
+
return new _Point(x, y);
|
|
397
|
+
}
|
|
398
|
+
};
|
|
399
|
+
var _direction_dec;
|
|
400
|
+
var _delta_dec;
|
|
401
|
+
var _a;
|
|
402
|
+
var _timestamp;
|
|
403
|
+
var _init;
|
|
404
|
+
var Position = class extends (_a = ValueHistory, _delta_dec = [derived], _direction_dec = [derived], _a) {
|
|
405
|
+
constructor(initialValue) {
|
|
406
|
+
const point = Point.from(initialValue);
|
|
407
|
+
super(point, (a, b) => Point.equals(a, b));
|
|
408
|
+
__runInitializers(_init, 5, this);
|
|
409
|
+
__privateAdd(this, _timestamp, 0);
|
|
410
|
+
this.velocity = { x: 0, y: 0 };
|
|
411
|
+
}
|
|
412
|
+
get delta() {
|
|
413
|
+
return Point.delta(this.current, this.initial);
|
|
414
|
+
}
|
|
415
|
+
get direction() {
|
|
416
|
+
const { current, previous } = this;
|
|
417
|
+
if (!previous) return null;
|
|
418
|
+
const delta = {
|
|
419
|
+
x: current.x - previous.x,
|
|
420
|
+
y: current.y - previous.y
|
|
421
|
+
};
|
|
422
|
+
if (!delta.x && !delta.y) {
|
|
423
|
+
return null;
|
|
424
|
+
}
|
|
425
|
+
if (Math.abs(delta.x) > Math.abs(delta.y)) {
|
|
426
|
+
return delta.x > 0 ? "right" : "left";
|
|
427
|
+
}
|
|
428
|
+
return delta.y > 0 ? "down" : "up";
|
|
429
|
+
}
|
|
430
|
+
get current() {
|
|
431
|
+
return super.current;
|
|
432
|
+
}
|
|
433
|
+
set current(coordinates) {
|
|
434
|
+
const { current } = this;
|
|
435
|
+
const point = Point.from(coordinates);
|
|
436
|
+
const delta = {
|
|
437
|
+
x: point.x - current.x,
|
|
438
|
+
y: point.y - current.y
|
|
439
|
+
};
|
|
440
|
+
const timestamp = Date.now();
|
|
441
|
+
const timeDelta = timestamp - __privateGet(this, _timestamp);
|
|
442
|
+
const velocity = (delta2) => Math.round(delta2 / timeDelta * 100);
|
|
443
|
+
batch(() => {
|
|
444
|
+
__privateSet(this, _timestamp, timestamp);
|
|
445
|
+
this.velocity = {
|
|
446
|
+
x: velocity(delta.x),
|
|
447
|
+
y: velocity(delta.y)
|
|
448
|
+
};
|
|
449
|
+
super.current = point;
|
|
450
|
+
});
|
|
451
|
+
}
|
|
452
|
+
reset(coordinates = this.defaultValue) {
|
|
453
|
+
super.reset(Point.from(coordinates));
|
|
454
|
+
this.velocity = { x: 0, y: 0 };
|
|
455
|
+
}
|
|
456
|
+
};
|
|
457
|
+
_init = __decoratorStart(_a);
|
|
458
|
+
_timestamp = /* @__PURE__ */ new WeakMap();
|
|
459
|
+
__decorateElement(_init, 2, "delta", _delta_dec, Position);
|
|
460
|
+
__decorateElement(_init, 2, "direction", _direction_dec, Position);
|
|
461
|
+
__decoratorMetadata(_init, Position);
|
|
462
|
+
var Axis = /* @__PURE__ */ ((Axis2) => {
|
|
463
|
+
Axis2["Horizontal"] = "x";
|
|
464
|
+
Axis2["Vertical"] = "y";
|
|
465
|
+
return Axis2;
|
|
466
|
+
})(Axis || {});
|
|
467
|
+
Object.values(Axis);
|
|
468
|
+
var pointerIntersection = ({
|
|
469
|
+
dragOperation,
|
|
470
|
+
droppable
|
|
471
|
+
}) => {
|
|
472
|
+
const pointerCoordinates = dragOperation.position.current;
|
|
473
|
+
if (!pointerCoordinates) {
|
|
474
|
+
return null;
|
|
475
|
+
}
|
|
476
|
+
const { id } = droppable;
|
|
477
|
+
if (!droppable.shape) {
|
|
478
|
+
return null;
|
|
479
|
+
}
|
|
480
|
+
if (droppable.shape.containsPoint(pointerCoordinates)) {
|
|
481
|
+
const distance = Point.distance(droppable.shape.center, pointerCoordinates);
|
|
482
|
+
return {
|
|
483
|
+
id,
|
|
484
|
+
value: 1 / distance,
|
|
485
|
+
type: CollisionType.PointerIntersection,
|
|
486
|
+
priority: CollisionPriority.High
|
|
487
|
+
};
|
|
488
|
+
}
|
|
489
|
+
return null;
|
|
490
|
+
};
|
|
491
|
+
var shapeIntersection = ({
|
|
492
|
+
dragOperation,
|
|
493
|
+
droppable
|
|
494
|
+
}) => {
|
|
495
|
+
const { shape } = dragOperation;
|
|
496
|
+
if (!droppable.shape || !(shape == null ? void 0 : shape.current)) {
|
|
497
|
+
return null;
|
|
498
|
+
}
|
|
499
|
+
const intersectionArea = shape.current.intersectionArea(droppable.shape);
|
|
500
|
+
if (intersectionArea) {
|
|
501
|
+
const { position } = dragOperation;
|
|
502
|
+
const distance = Point.distance(droppable.shape.center, position.current);
|
|
503
|
+
const intersectionRatio = intersectionArea / (shape.current.area + droppable.shape.area - intersectionArea);
|
|
504
|
+
const value = intersectionRatio / distance;
|
|
505
|
+
return {
|
|
506
|
+
id: droppable.id,
|
|
507
|
+
value,
|
|
508
|
+
type: CollisionType.ShapeIntersection,
|
|
509
|
+
priority: CollisionPriority.Normal
|
|
510
|
+
};
|
|
511
|
+
}
|
|
512
|
+
return null;
|
|
513
|
+
};
|
|
514
|
+
var defaultCollisionDetection = (args) => {
|
|
515
|
+
var _a2;
|
|
516
|
+
return (_a2 = pointerIntersection(args)) != null ? _a2 : shapeIntersection(args);
|
|
517
|
+
};
|
|
518
|
+
|
|
519
|
+
// src/core/droppable/useDroppable.ts
|
|
318
520
|
function useDroppable(input) {
|
|
319
521
|
const { collisionDetector, data, disabled, element, id, accept, type } = input;
|
|
320
522
|
const droppable = useInstance(
|
|
@@ -329,11 +531,19 @@ function useDroppable(input) {
|
|
|
329
531
|
const trackedDroppalbe = useDeepSignal(droppable);
|
|
330
532
|
useOnValueChange(id, () => droppable.id = id);
|
|
331
533
|
useOnElementChange(element, (element2) => droppable.element = element2);
|
|
332
|
-
useOnValueChange(
|
|
333
|
-
|
|
534
|
+
useOnValueChange(
|
|
535
|
+
accept,
|
|
536
|
+
() => droppable.accept = accept,
|
|
537
|
+
void 0,
|
|
538
|
+
deepEqual
|
|
539
|
+
);
|
|
540
|
+
useOnValueChange(
|
|
541
|
+
collisionDetector,
|
|
542
|
+
() => droppable.collisionDetector = collisionDetector != null ? collisionDetector : defaultCollisionDetection
|
|
543
|
+
);
|
|
334
544
|
useOnValueChange(data, () => data && (droppable.data = data));
|
|
335
545
|
useOnValueChange(disabled, () => droppable.disabled = disabled === true);
|
|
336
|
-
useOnValueChange(type, () => droppable.
|
|
546
|
+
useOnValueChange(type, () => droppable.type = type);
|
|
337
547
|
return {
|
|
338
548
|
droppable: trackedDroppalbe,
|
|
339
549
|
get isDropTarget() {
|
|
@@ -341,8 +551,8 @@ function useDroppable(input) {
|
|
|
341
551
|
},
|
|
342
552
|
ref: useCallback(
|
|
343
553
|
(element2) => {
|
|
344
|
-
var
|
|
345
|
-
if (!element2 && ((
|
|
554
|
+
var _a2, _b;
|
|
555
|
+
if (!element2 && ((_a2 = droppable.element) == null ? void 0 : _a2.isConnected) && !((_b = droppable.manager) == null ? void 0 : _b.dragOperation.status.idle)) {
|
|
346
556
|
return;
|
|
347
557
|
}
|
|
348
558
|
droppable.element = element2 != null ? element2 : void 0;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dnd-kit/react",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6-beta-20250501000355",
|
|
4
4
|
"main": "./index.cjs",
|
|
5
5
|
"module": "./index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -56,9 +56,9 @@
|
|
|
56
56
|
"clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist"
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
|
-
"@dnd-kit/abstract": "
|
|
60
|
-
"@dnd-kit/dom": "
|
|
61
|
-
"@dnd-kit/state": "
|
|
59
|
+
"@dnd-kit/abstract": "0.1.6-beta-20250501000355",
|
|
60
|
+
"@dnd-kit/dom": "0.1.6-beta-20250501000355",
|
|
61
|
+
"@dnd-kit/state": "0.1.6-beta-20250501000355",
|
|
62
62
|
"tslib": "^2.6.2"
|
|
63
63
|
},
|
|
64
64
|
"peerDependencies": {
|