@dnd-kit/react 0.0.7-beta-20250127022704 → 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 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
- export { useComputed, useConstant, useImmediateEffect, useIsomorphicLayoutEffect, useLatest, useOnValueChange };
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.useOnValueChange(handle, () => draggable.handle = handle);
203
- hooks.useOnValueChange(element, () => draggable.element = element);
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
- useOnValueChange(handle, () => draggable.handle = handle);
201
- useOnValueChange(element, () => draggable.element = element);
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-20250127022704",
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:hooks && bun build:utilities && bun build:core && bun build:sortable",
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:hooks --watch & bun build:utilities --watch & bun build:core --watch & bun build:sortable --watch",
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-20250127022704",
60
- "@dnd-kit/dom": "0.0.7-beta-20250127022704",
61
- "@dnd-kit/state": "0.0.7-beta-20250127022704",
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,24 +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,
40
42
  modifiers,
41
43
  sensors,
44
+ target,
42
45
  transition = sortable.defaultSortableTransition,
43
46
  type
44
47
  } = input;
45
- const handle = utilities.currentValue(input.handle);
46
- const element = utilities.currentValue(input.element);
47
- const target = utilities.currentValue(input.target);
48
48
  const sortable$1 = react.useInstance((manager) => {
49
49
  return new sortable.Sortable(
50
50
  __spreadProps(__spreadValues({}, input), {
51
- handle,
52
- element,
53
- target,
51
+ handle: utilities.currentValue(handle),
52
+ element: utilities.currentValue(element),
53
+ target: utilities.currentValue(target),
54
54
  feedback
55
55
  }),
56
56
  manager
@@ -84,9 +84,9 @@ function useSortable(input) {
84
84
  },
85
85
  hooks.useImmediateEffect
86
86
  );
87
- hooks.useOnValueChange(handle, () => sortable$1.handle = handle);
88
- hooks.useOnValueChange(element, () => sortable$1.element = element);
89
- hooks.useOnValueChange(target, () => sortable$1.target = target);
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);
90
90
  hooks.useOnValueChange(disabled, () => sortable$1.disabled = disabled === true);
91
91
  hooks.useOnValueChange(sensors, () => sortable$1.sensors = sensors);
92
92
  hooks.useOnValueChange(
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,24 +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,
38
40
  modifiers,
39
41
  sensors,
42
+ target,
40
43
  transition = defaultSortableTransition,
41
44
  type
42
45
  } = input;
43
- const handle = currentValue(input.handle);
44
- const element = currentValue(input.element);
45
- const target = currentValue(input.target);
46
46
  const sortable = useInstance((manager) => {
47
47
  return new Sortable(
48
48
  __spreadProps(__spreadValues({}, input), {
49
- handle,
50
- element,
51
- target,
49
+ handle: currentValue(handle),
50
+ element: currentValue(element),
51
+ target: currentValue(target),
52
52
  feedback
53
53
  }),
54
54
  manager
@@ -82,9 +82,9 @@ function useSortable(input) {
82
82
  },
83
83
  useImmediateEffect
84
84
  );
85
- useOnValueChange(handle, () => sortable.handle = handle);
86
- useOnValueChange(element, () => sortable.element = element);
87
- useOnValueChange(target, () => sortable.target = target);
85
+ useOnElementChange(handle, (handle2) => sortable.handle = handle2);
86
+ useOnElementChange(element, (element2) => sortable.element = element2);
87
+ useOnElementChange(target, (target2) => sortable.target = target2);
88
88
  useOnValueChange(disabled, () => sortable.disabled = disabled === true);
89
89
  useOnValueChange(sensors, () => sortable.sensors = sensors);
90
90
  useOnValueChange(
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 (typeof value === "object" && "current" in value) {
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 RefOrValue<T> = T | RefObject<T | null | undefined> | MutableRefObject<T> | null | undefined;
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 (typeof value === "object" && "current" in value) {
10
+ if (isRef(value)) {
8
11
  return (_a = value.current) != null ? _a : void 0;
9
12
  }
10
13
  return value;