@dnd-kit/react 0.0.7-beta-20250127003715 → 0.0.7-beta-20250127032323
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/hooks.cjs +13 -0
- package/hooks.d.ts +4 -1
- package/hooks.js +13 -1
- package/index.cjs +8 -11
- package/index.js +9 -12
- package/package.json +6 -6
- package/sortable.cjs +16 -9
- package/sortable.js +17 -10
- package/utilities.cjs +4 -1
- package/utilities.d.ts +2 -1
- package/utilities.js +4 -1
package/hooks.cjs
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
var react = require('react');
|
|
4
4
|
var state = require('@dnd-kit/state');
|
|
5
5
|
var reactDom = require('react-dom');
|
|
6
|
+
var utilities = require('@dnd-kit/react/utilities');
|
|
6
7
|
|
|
7
8
|
function useConstant(initializer) {
|
|
8
9
|
const ref = react.useRef(null);
|
|
@@ -71,12 +72,24 @@ function useOnValueChange(value, onChange, effect2 = react.useEffect, compare =
|
|
|
71
72
|
}
|
|
72
73
|
}, [onChange, value]);
|
|
73
74
|
}
|
|
75
|
+
console.log("foo");
|
|
76
|
+
function useOnElementChange(value, onChange) {
|
|
77
|
+
const previous = react.useRef(utilities.currentValue(value));
|
|
78
|
+
useIsomorphicLayoutEffect(() => {
|
|
79
|
+
const current = utilities.currentValue(value);
|
|
80
|
+
if (current !== previous.current) {
|
|
81
|
+
previous.current = current;
|
|
82
|
+
onChange(current);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
74
86
|
|
|
75
87
|
exports.useComputed = useComputed;
|
|
76
88
|
exports.useConstant = useConstant;
|
|
77
89
|
exports.useImmediateEffect = useImmediateEffect;
|
|
78
90
|
exports.useIsomorphicLayoutEffect = useIsomorphicLayoutEffect;
|
|
79
91
|
exports.useLatest = useLatest;
|
|
92
|
+
exports.useOnElementChange = useOnElementChange;
|
|
80
93
|
exports.useOnValueChange = useOnValueChange;
|
|
81
94
|
//# sourceMappingURL=hooks.cjs.map
|
|
82
95
|
//# sourceMappingURL=hooks.cjs.map
|
package/hooks.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { EffectCallback, DependencyList, useLayoutEffect, useEffect } from 'react';
|
|
3
|
+
import { RefOrValue } from '@dnd-kit/react/utilities';
|
|
3
4
|
|
|
4
5
|
declare function useConstant<T = any>(initializer: () => T): T;
|
|
5
6
|
|
|
@@ -19,4 +20,6 @@ declare function useLatest<T>(value: T): react.RefObject<T | undefined>;
|
|
|
19
20
|
|
|
20
21
|
declare function useOnValueChange<T>(value: T, onChange: (value: T, oldValue: T) => void, effect?: typeof useEffect, compare?: (value1: any, value2: any) => boolean): void;
|
|
21
22
|
|
|
22
|
-
|
|
23
|
+
declare function useOnElementChange(value: RefOrValue<Element>, onChange: (value: Element | undefined) => void): void;
|
|
24
|
+
|
|
25
|
+
export { useComputed, useConstant, useImmediateEffect, useIsomorphicLayoutEffect, useLatest, useOnElementChange, useOnValueChange };
|
package/hooks.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useRef, useLayoutEffect, useEffect, useMemo, useState } from 'react';
|
|
2
2
|
import { computed, effect } from '@dnd-kit/state';
|
|
3
3
|
import { flushSync } from 'react-dom';
|
|
4
|
+
import { currentValue } from '@dnd-kit/react/utilities';
|
|
4
5
|
|
|
5
6
|
function useConstant(initializer) {
|
|
6
7
|
const ref = useRef(null);
|
|
@@ -69,7 +70,18 @@ function useOnValueChange(value, onChange, effect2 = useEffect, compare = Object
|
|
|
69
70
|
}
|
|
70
71
|
}, [onChange, value]);
|
|
71
72
|
}
|
|
73
|
+
console.log("foo");
|
|
74
|
+
function useOnElementChange(value, onChange) {
|
|
75
|
+
const previous = useRef(currentValue(value));
|
|
76
|
+
useIsomorphicLayoutEffect(() => {
|
|
77
|
+
const current = currentValue(value);
|
|
78
|
+
if (current !== previous.current) {
|
|
79
|
+
previous.current = current;
|
|
80
|
+
onChange(current);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
72
84
|
|
|
73
|
-
export { useComputed, useConstant, useImmediateEffect, useIsomorphicLayoutEffect, useLatest, useOnValueChange };
|
|
85
|
+
export { useComputed, useConstant, useImmediateEffect, useIsomorphicLayoutEffect, useLatest, useOnElementChange, useOnValueChange };
|
|
74
86
|
//# sourceMappingURL=hooks.js.map
|
|
75
87
|
//# sourceMappingURL=hooks.js.map
|
package/index.cjs
CHANGED
|
@@ -184,14 +184,12 @@ function useInstance(initializer) {
|
|
|
184
184
|
|
|
185
185
|
// src/core/draggable/useDraggable.ts
|
|
186
186
|
function useDraggable(input) {
|
|
187
|
-
const { disabled, data, id, modifiers, sensors } = input;
|
|
188
|
-
const handle = utilities.currentValue(input.handle);
|
|
189
|
-
const element = utilities.currentValue(input.element);
|
|
187
|
+
const { disabled, data, element, handle, id, modifiers, sensors } = input;
|
|
190
188
|
const draggable = useInstance(
|
|
191
189
|
(manager) => new dom.Draggable(
|
|
192
190
|
__spreadProps(__spreadValues({}, input), {
|
|
193
|
-
handle,
|
|
194
|
-
element
|
|
191
|
+
handle: utilities.currentValue(handle),
|
|
192
|
+
element: utilities.currentValue(element)
|
|
195
193
|
}),
|
|
196
194
|
manager
|
|
197
195
|
)
|
|
@@ -199,8 +197,8 @@ function useDraggable(input) {
|
|
|
199
197
|
const isDragSource = hooks.useComputed(() => draggable.isDragSource, [draggable]);
|
|
200
198
|
const status = hooks.useComputed(() => draggable.status, [draggable]);
|
|
201
199
|
hooks.useOnValueChange(id, () => draggable.id = id);
|
|
202
|
-
hooks.
|
|
203
|
-
hooks.
|
|
200
|
+
hooks.useOnElementChange(handle, (handle2) => draggable.handle = handle2);
|
|
201
|
+
hooks.useOnElementChange(element, (element2) => draggable.element = element2);
|
|
204
202
|
hooks.useOnValueChange(data, () => data && (draggable.data = data));
|
|
205
203
|
hooks.useOnValueChange(disabled, () => draggable.disabled = disabled === true);
|
|
206
204
|
hooks.useOnValueChange(sensors, () => draggable.sensors = sensors);
|
|
@@ -244,23 +242,22 @@ function useDraggable(input) {
|
|
|
244
242
|
};
|
|
245
243
|
}
|
|
246
244
|
function useDroppable(input) {
|
|
247
|
-
const { collisionDetector, data, disabled, id, accept, type } = input;
|
|
248
|
-
const element = utilities.currentValue(input.element);
|
|
245
|
+
const { collisionDetector, data, disabled, element, id, accept, type } = input;
|
|
249
246
|
const droppable = useInstance(
|
|
250
247
|
(manager) => new dom.Droppable(
|
|
251
248
|
__spreadProps(__spreadValues({}, input), {
|
|
252
|
-
element
|
|
249
|
+
element: utilities.currentValue(element)
|
|
253
250
|
}),
|
|
254
251
|
manager
|
|
255
252
|
)
|
|
256
253
|
);
|
|
257
254
|
const isDropTarget = hooks.useComputed(() => droppable.isDropTarget, [droppable]);
|
|
258
255
|
hooks.useOnValueChange(id, () => droppable.id = id);
|
|
256
|
+
hooks.useOnElementChange(element, (element2) => droppable.element = element2);
|
|
259
257
|
hooks.useOnValueChange(accept, () => droppable.id = id, void 0, state.deepEqual);
|
|
260
258
|
hooks.useOnValueChange(collisionDetector, () => droppable.id = id);
|
|
261
259
|
hooks.useOnValueChange(data, () => data && (droppable.data = data));
|
|
262
260
|
hooks.useOnValueChange(disabled, () => droppable.disabled = disabled === true);
|
|
263
|
-
hooks.useOnValueChange(element, () => droppable.element = element);
|
|
264
261
|
hooks.useOnValueChange(type, () => droppable.id = id);
|
|
265
262
|
return {
|
|
266
263
|
get isDropTarget() {
|
package/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createContext, useState, useEffect, startTransition, useContext, useCallback, useTransition, useRef, useLayoutEffect } from 'react';
|
|
2
2
|
import { DragDropManager, defaultPreset, Draggable, Droppable } from '@dnd-kit/dom';
|
|
3
|
-
import { useLatest, useOnValueChange, useIsomorphicLayoutEffect, useComputed, useConstant } from '@dnd-kit/react/hooks';
|
|
3
|
+
import { useLatest, useOnValueChange, useIsomorphicLayoutEffect, useComputed, useOnElementChange, useConstant } from '@dnd-kit/react/hooks';
|
|
4
4
|
import { jsx } from 'react/jsx-runtime';
|
|
5
5
|
import { deepEqual } from '@dnd-kit/state';
|
|
6
6
|
import { currentValue } from '@dnd-kit/react/utilities';
|
|
@@ -182,14 +182,12 @@ function useInstance(initializer) {
|
|
|
182
182
|
|
|
183
183
|
// src/core/draggable/useDraggable.ts
|
|
184
184
|
function useDraggable(input) {
|
|
185
|
-
const { disabled, data, id, modifiers, sensors } = input;
|
|
186
|
-
const handle = currentValue(input.handle);
|
|
187
|
-
const element = currentValue(input.element);
|
|
185
|
+
const { disabled, data, element, handle, id, modifiers, sensors } = input;
|
|
188
186
|
const draggable = useInstance(
|
|
189
187
|
(manager) => new Draggable(
|
|
190
188
|
__spreadProps(__spreadValues({}, input), {
|
|
191
|
-
handle,
|
|
192
|
-
element
|
|
189
|
+
handle: currentValue(handle),
|
|
190
|
+
element: currentValue(element)
|
|
193
191
|
}),
|
|
194
192
|
manager
|
|
195
193
|
)
|
|
@@ -197,8 +195,8 @@ function useDraggable(input) {
|
|
|
197
195
|
const isDragSource = useComputed(() => draggable.isDragSource, [draggable]);
|
|
198
196
|
const status = useComputed(() => draggable.status, [draggable]);
|
|
199
197
|
useOnValueChange(id, () => draggable.id = id);
|
|
200
|
-
|
|
201
|
-
|
|
198
|
+
useOnElementChange(handle, (handle2) => draggable.handle = handle2);
|
|
199
|
+
useOnElementChange(element, (element2) => draggable.element = element2);
|
|
202
200
|
useOnValueChange(data, () => data && (draggable.data = data));
|
|
203
201
|
useOnValueChange(disabled, () => draggable.disabled = disabled === true);
|
|
204
202
|
useOnValueChange(sensors, () => draggable.sensors = sensors);
|
|
@@ -242,23 +240,22 @@ function useDraggable(input) {
|
|
|
242
240
|
};
|
|
243
241
|
}
|
|
244
242
|
function useDroppable(input) {
|
|
245
|
-
const { collisionDetector, data, disabled, id, accept, type } = input;
|
|
246
|
-
const element = currentValue(input.element);
|
|
243
|
+
const { collisionDetector, data, disabled, element, id, accept, type } = input;
|
|
247
244
|
const droppable = useInstance(
|
|
248
245
|
(manager) => new Droppable(
|
|
249
246
|
__spreadProps(__spreadValues({}, input), {
|
|
250
|
-
element
|
|
247
|
+
element: currentValue(element)
|
|
251
248
|
}),
|
|
252
249
|
manager
|
|
253
250
|
)
|
|
254
251
|
);
|
|
255
252
|
const isDropTarget = useComputed(() => droppable.isDropTarget, [droppable]);
|
|
256
253
|
useOnValueChange(id, () => droppable.id = id);
|
|
254
|
+
useOnElementChange(element, (element2) => droppable.element = element2);
|
|
257
255
|
useOnValueChange(accept, () => droppable.id = id, void 0, deepEqual);
|
|
258
256
|
useOnValueChange(collisionDetector, () => droppable.id = id);
|
|
259
257
|
useOnValueChange(data, () => data && (droppable.data = data));
|
|
260
258
|
useOnValueChange(disabled, () => droppable.disabled = disabled === true);
|
|
261
|
-
useOnValueChange(element, () => droppable.element = element);
|
|
262
259
|
useOnValueChange(type, () => droppable.id = id);
|
|
263
260
|
return {
|
|
264
261
|
get isDropTarget() {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dnd-kit/react",
|
|
3
|
-
"version": "0.0.7-beta-
|
|
3
|
+
"version": "0.0.7-beta-20250127032323",
|
|
4
4
|
"main": "./index.cjs",
|
|
5
5
|
"module": "./index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -46,19 +46,19 @@
|
|
|
46
46
|
}
|
|
47
47
|
},
|
|
48
48
|
"scripts": {
|
|
49
|
-
"build": "bun build:
|
|
49
|
+
"build": "bun build:utilities && bun build:hooks && bun build:core && bun build:sortable",
|
|
50
50
|
"build:core": "tsup src/core/index.ts",
|
|
51
51
|
"build:hooks": "tsup --entry.hooks src/hooks/index.ts",
|
|
52
52
|
"build:sortable": "tsup --entry.sortable src/sortable/index.ts",
|
|
53
53
|
"build:utilities": "tsup --entry.utilities src/utilities/index.ts",
|
|
54
|
-
"dev": "bun build:
|
|
54
|
+
"dev": "bun build:utilities --watch & bun build:hooks --watch & bun build:core --watch & bun build:sortable --watch",
|
|
55
55
|
"lint": "TIMING=1 eslint src/**/*.ts* --fix",
|
|
56
56
|
"clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist"
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
|
-
"@dnd-kit/abstract": "0.0.7-beta-
|
|
60
|
-
"@dnd-kit/dom": "0.0.7-beta-
|
|
61
|
-
"@dnd-kit/state": "0.0.7-beta-
|
|
59
|
+
"@dnd-kit/abstract": "0.0.7-beta-20250127032323",
|
|
60
|
+
"@dnd-kit/dom": "0.0.7-beta-20250127032323",
|
|
61
|
+
"@dnd-kit/state": "0.0.7-beta-20250127032323",
|
|
62
62
|
"tslib": "^2.6.2"
|
|
63
63
|
},
|
|
64
64
|
"peerDependencies": {
|
package/sortable.cjs
CHANGED
|
@@ -33,23 +33,24 @@ function useSortable(input) {
|
|
|
33
33
|
collisionPriority,
|
|
34
34
|
id,
|
|
35
35
|
data,
|
|
36
|
+
element,
|
|
37
|
+
handle,
|
|
36
38
|
index,
|
|
37
39
|
group,
|
|
38
40
|
disabled,
|
|
39
41
|
feedback,
|
|
42
|
+
modifiers,
|
|
40
43
|
sensors,
|
|
44
|
+
target,
|
|
41
45
|
transition = sortable.defaultSortableTransition,
|
|
42
46
|
type
|
|
43
47
|
} = input;
|
|
44
|
-
const handle = utilities.currentValue(input.handle);
|
|
45
|
-
const element = utilities.currentValue(input.element);
|
|
46
|
-
const target = utilities.currentValue(input.target);
|
|
47
48
|
const sortable$1 = react.useInstance((manager) => {
|
|
48
49
|
return new sortable.Sortable(
|
|
49
50
|
__spreadProps(__spreadValues({}, input), {
|
|
50
|
-
handle,
|
|
51
|
-
element,
|
|
52
|
-
target,
|
|
51
|
+
handle: utilities.currentValue(handle),
|
|
52
|
+
element: utilities.currentValue(element),
|
|
53
|
+
target: utilities.currentValue(target),
|
|
53
54
|
feedback
|
|
54
55
|
}),
|
|
55
56
|
manager
|
|
@@ -83,9 +84,9 @@ function useSortable(input) {
|
|
|
83
84
|
},
|
|
84
85
|
hooks.useImmediateEffect
|
|
85
86
|
);
|
|
86
|
-
hooks.
|
|
87
|
-
hooks.
|
|
88
|
-
hooks.
|
|
87
|
+
hooks.useOnElementChange(handle, (handle2) => sortable$1.handle = handle2);
|
|
88
|
+
hooks.useOnElementChange(element, (element2) => sortable$1.element = element2);
|
|
89
|
+
hooks.useOnElementChange(target, (target2) => sortable$1.target = target2);
|
|
89
90
|
hooks.useOnValueChange(disabled, () => sortable$1.disabled = disabled === true);
|
|
90
91
|
hooks.useOnValueChange(sensors, () => sortable$1.sensors = sensors);
|
|
91
92
|
hooks.useOnValueChange(
|
|
@@ -98,6 +99,12 @@ function useSortable(input) {
|
|
|
98
99
|
);
|
|
99
100
|
hooks.useOnValueChange(feedback, () => sortable$1.feedback = feedback != null ? feedback : "default");
|
|
100
101
|
hooks.useOnValueChange(transition, () => sortable$1.transition = transition);
|
|
102
|
+
hooks.useOnValueChange(
|
|
103
|
+
modifiers,
|
|
104
|
+
() => sortable$1.modifiers = modifiers,
|
|
105
|
+
void 0,
|
|
106
|
+
state.deepEqual
|
|
107
|
+
);
|
|
101
108
|
return {
|
|
102
109
|
get isDragSource() {
|
|
103
110
|
return isDragSource.value;
|
package/sortable.js
CHANGED
|
@@ -2,7 +2,7 @@ import { useCallback } from 'react';
|
|
|
2
2
|
import { batch, deepEqual } from '@dnd-kit/state';
|
|
3
3
|
import { Sortable, defaultSortableTransition } from '@dnd-kit/dom/sortable';
|
|
4
4
|
import { useInstance } from '@dnd-kit/react';
|
|
5
|
-
import { useComputed, useOnValueChange, useIsomorphicLayoutEffect, useImmediateEffect } from '@dnd-kit/react/hooks';
|
|
5
|
+
import { useComputed, useOnValueChange, useIsomorphicLayoutEffect, useImmediateEffect, useOnElementChange } from '@dnd-kit/react/hooks';
|
|
6
6
|
import { currentValue } from '@dnd-kit/react/utilities';
|
|
7
7
|
|
|
8
8
|
var __defProp = Object.defineProperty;
|
|
@@ -31,23 +31,24 @@ function useSortable(input) {
|
|
|
31
31
|
collisionPriority,
|
|
32
32
|
id,
|
|
33
33
|
data,
|
|
34
|
+
element,
|
|
35
|
+
handle,
|
|
34
36
|
index,
|
|
35
37
|
group,
|
|
36
38
|
disabled,
|
|
37
39
|
feedback,
|
|
40
|
+
modifiers,
|
|
38
41
|
sensors,
|
|
42
|
+
target,
|
|
39
43
|
transition = defaultSortableTransition,
|
|
40
44
|
type
|
|
41
45
|
} = input;
|
|
42
|
-
const handle = currentValue(input.handle);
|
|
43
|
-
const element = currentValue(input.element);
|
|
44
|
-
const target = currentValue(input.target);
|
|
45
46
|
const sortable = useInstance((manager) => {
|
|
46
47
|
return new Sortable(
|
|
47
48
|
__spreadProps(__spreadValues({}, input), {
|
|
48
|
-
handle,
|
|
49
|
-
element,
|
|
50
|
-
target,
|
|
49
|
+
handle: currentValue(handle),
|
|
50
|
+
element: currentValue(element),
|
|
51
|
+
target: currentValue(target),
|
|
51
52
|
feedback
|
|
52
53
|
}),
|
|
53
54
|
manager
|
|
@@ -81,9 +82,9 @@ function useSortable(input) {
|
|
|
81
82
|
},
|
|
82
83
|
useImmediateEffect
|
|
83
84
|
);
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
useOnElementChange(handle, (handle2) => sortable.handle = handle2);
|
|
86
|
+
useOnElementChange(element, (element2) => sortable.element = element2);
|
|
87
|
+
useOnElementChange(target, (target2) => sortable.target = target2);
|
|
87
88
|
useOnValueChange(disabled, () => sortable.disabled = disabled === true);
|
|
88
89
|
useOnValueChange(sensors, () => sortable.sensors = sensors);
|
|
89
90
|
useOnValueChange(
|
|
@@ -96,6 +97,12 @@ function useSortable(input) {
|
|
|
96
97
|
);
|
|
97
98
|
useOnValueChange(feedback, () => sortable.feedback = feedback != null ? feedback : "default");
|
|
98
99
|
useOnValueChange(transition, () => sortable.transition = transition);
|
|
100
|
+
useOnValueChange(
|
|
101
|
+
modifiers,
|
|
102
|
+
() => sortable.modifiers = modifiers,
|
|
103
|
+
void 0,
|
|
104
|
+
deepEqual
|
|
105
|
+
);
|
|
99
106
|
return {
|
|
100
107
|
get isDragSource() {
|
|
101
108
|
return isDragSource.value;
|
package/utilities.cjs
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
// src/utilities/currentValue.ts
|
|
4
|
+
function isRef(value) {
|
|
5
|
+
return value != null && typeof value === "object" && "current" in value;
|
|
6
|
+
}
|
|
4
7
|
function currentValue(value) {
|
|
5
8
|
var _a;
|
|
6
9
|
if (value == null) {
|
|
7
10
|
return void 0;
|
|
8
11
|
}
|
|
9
|
-
if (
|
|
12
|
+
if (isRef(value)) {
|
|
10
13
|
return (_a = value.current) != null ? _a : void 0;
|
|
11
14
|
}
|
|
12
15
|
return value;
|
package/utilities.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { RefObject, MutableRefObject } from 'react';
|
|
2
2
|
|
|
3
|
-
type
|
|
3
|
+
type Ref<T> = RefObject<T | null | undefined> | MutableRefObject<T>;
|
|
4
|
+
type RefOrValue<T> = T | Ref<T> | null | undefined;
|
|
4
5
|
declare function currentValue<T>(value: RefOrValue<T>): NonNullable<T> | undefined;
|
|
5
6
|
|
|
6
7
|
export { type RefOrValue, currentValue };
|
package/utilities.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
// src/utilities/currentValue.ts
|
|
2
|
+
function isRef(value) {
|
|
3
|
+
return value != null && typeof value === "object" && "current" in value;
|
|
4
|
+
}
|
|
2
5
|
function currentValue(value) {
|
|
3
6
|
var _a;
|
|
4
7
|
if (value == null) {
|
|
5
8
|
return void 0;
|
|
6
9
|
}
|
|
7
|
-
if (
|
|
10
|
+
if (isRef(value)) {
|
|
8
11
|
return (_a = value.current) != null ? _a : void 0;
|
|
9
12
|
}
|
|
10
13
|
return value;
|