@dnd-kit/react 0.0.4-beta-20240621184125 → 0.0.4-beta-20240622232930

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 CHANGED
@@ -4,8 +4,8 @@ var react = require('react');
4
4
  var dom = require('@dnd-kit/dom');
5
5
  var hooks = require('@dnd-kit/react/hooks');
6
6
  var jsxRuntime = require('react/jsx-runtime');
7
- var utilities = require('@dnd-kit/react/utilities');
8
7
  var state = require('@dnd-kit/state');
8
+ var utilities = require('@dnd-kit/react/utilities');
9
9
 
10
10
  var __defProp = Object.defineProperty;
11
11
  var __defProps = Object.defineProperties;
@@ -38,8 +38,9 @@ var __objRest = (source, exclude) => {
38
38
  }
39
39
  return target;
40
40
  };
41
+ var defaultManager = new dom.DragDropManager();
41
42
  var DragDropContext = react.createContext(
42
- new dom.DragDropManager()
43
+ defaultManager
43
44
  );
44
45
  function useRenderer() {
45
46
  const [_, startTransition2] = react.useTransition();
@@ -169,33 +170,36 @@ function useDragDropManager() {
169
170
  function useInstance(initializer) {
170
171
  var _a;
171
172
  const manager = (_a = useDragDropManager()) != null ? _a : void 0;
172
- const [instance] = react.useState(() => initializer(manager));
173
+ const [instance] = react.useState(
174
+ () => initializer(manager === defaultManager ? void 0 : manager)
175
+ );
173
176
  react.useEffect(() => {
174
177
  instance.manager = manager;
175
- return manager == null ? void 0 : manager.registry.register(instance);
178
+ return instance.register();
176
179
  }, [instance, manager]);
177
180
  return instance;
178
181
  }
182
+
183
+ // src/core/draggable/useDraggable.ts
179
184
  function useDraggable(input) {
180
- const { disabled, id, modifiers, sensors } = input;
185
+ const { disabled, data, id, modifiers, sensors } = input;
181
186
  const handle = utilities.currentValue(input.handle);
182
187
  const element = utilities.currentValue(input.element);
183
188
  const draggable = useInstance(
184
189
  (manager) => new dom.Draggable(
185
190
  __spreadProps(__spreadValues({}, input), {
186
191
  handle,
187
- element,
188
- options: __spreadProps(__spreadValues({}, input.options), {
189
- register: false
190
- })
192
+ element
191
193
  }),
192
194
  manager
193
195
  )
194
196
  );
195
197
  const isDragSource = hooks.useComputed(() => draggable.isDragSource);
198
+ const status = hooks.useComputed(() => draggable.status);
196
199
  hooks.useOnValueChange(id, () => draggable.id = id);
197
200
  hooks.useOnValueChange(handle, () => draggable.handle = handle);
198
201
  hooks.useOnValueChange(element, () => draggable.element = element);
202
+ hooks.useOnValueChange(data, () => data && (draggable.data = data));
199
203
  hooks.useOnValueChange(disabled, () => draggable.disabled = disabled === true);
200
204
  hooks.useOnValueChange(sensors, () => draggable.sensors = sensors);
201
205
  hooks.useOnValueChange(
@@ -216,6 +220,9 @@ function useDraggable(input) {
216
220
  get isDragSource() {
217
221
  return isDragSource.value;
218
222
  },
223
+ get status() {
224
+ return status.value;
225
+ },
219
226
  handleRef: react.useCallback(
220
227
  (element2) => {
221
228
  draggable.handle = element2 != null ? element2 : void 0;
@@ -231,15 +238,12 @@ function useDraggable(input) {
231
238
  };
232
239
  }
233
240
  function useDroppable(input) {
234
- const { collisionDetector, disabled, id, accept, type } = input;
241
+ const { collisionDetector, data, disabled, id, accept, type } = input;
235
242
  const element = utilities.currentValue(input.element);
236
243
  const droppable = useInstance(
237
244
  (manager) => new dom.Droppable(
238
245
  __spreadProps(__spreadValues({}, input), {
239
- element,
240
- options: __spreadProps(__spreadValues({}, input.options), {
241
- register: false
242
- })
246
+ element
243
247
  }),
244
248
  manager
245
249
  )
@@ -248,6 +252,7 @@ function useDroppable(input) {
248
252
  hooks.useOnValueChange(id, () => droppable.id = id);
249
253
  hooks.useOnValueChange(accept, () => droppable.id = id, void 0, state.deepEqual);
250
254
  hooks.useOnValueChange(collisionDetector, () => droppable.id = id);
255
+ hooks.useOnValueChange(data, () => data && (droppable.data = data));
251
256
  hooks.useOnValueChange(disabled, () => droppable.disabled = disabled === true);
252
257
  hooks.useOnValueChange(element, () => droppable.element = element);
253
258
  hooks.useOnValueChange(type, () => droppable.id = id);
@@ -283,5 +288,6 @@ exports.useDragDropManager = useDragDropManager;
283
288
  exports.useDragOperation = useDragOperation;
284
289
  exports.useDraggable = useDraggable;
285
290
  exports.useDroppable = useDroppable;
291
+ exports.useInstance = useInstance;
286
292
  //# sourceMappingURL=out.js.map
287
293
  //# sourceMappingURL=index.cjs.map
package/index.d.ts CHANGED
@@ -1,10 +1,11 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { PropsWithChildren } from 'react';
3
3
  import * as _dnd_kit_abstract from '@dnd-kit/abstract';
4
- import { DragDropEvents, Data } from '@dnd-kit/abstract';
4
+ import { DragDropEvents, Data, DragDropManager as DragDropManager$1 } from '@dnd-kit/abstract';
5
5
  import * as _dnd_kit_dom from '@dnd-kit/dom';
6
6
  import { DragDropManagerInput, DragDropManager, Draggable, Droppable, DraggableInput, DroppableInput } from '@dnd-kit/dom';
7
7
  import { RefOrValue } from '@dnd-kit/react/utilities';
8
+ import { CleanupFunction } from '@dnd-kit/state';
8
9
 
9
10
  type Events = DragDropEvents<Draggable, Droppable, DragDropManager>;
10
11
  interface Props extends DragDropManagerInput, PropsWithChildren {
@@ -25,6 +26,7 @@ interface UseDraggableInput<T extends Data = Data> extends Omit<DraggableInput<T
25
26
  declare function useDraggable<T extends Data = Data>(input: UseDraggableInput<T>): {
26
27
  draggable: Draggable<T>;
27
28
  readonly isDragSource: boolean;
29
+ readonly status: "idle" | "dragging" | "dropping";
28
30
  handleRef: (element: Element | null) => void;
29
31
  ref: (element: Element | null) => void;
30
32
  };
@@ -45,4 +47,10 @@ declare function useDragOperation(): {
45
47
  readonly target: _dnd_kit_dom.Droppable<_dnd_kit_abstract.Data> | null | undefined;
46
48
  };
47
49
 
48
- export { DragDropProvider, useDragDropManager, useDragOperation, useDraggable, useDroppable };
50
+ interface Instance<T extends DragDropManager$1<any, any> = DragDropManager$1<any, any>> {
51
+ manager: T | undefined;
52
+ register(): CleanupFunction | void;
53
+ }
54
+ declare function useInstance<T extends Instance>(initializer: (manager: DragDropManager$1<any, any> | undefined) => T): T;
55
+
56
+ export { DragDropProvider, type UseDraggableInput, type UseDroppableInput, useDragDropManager, useDragOperation, useDraggable, useDroppable, useInstance };
package/index.js CHANGED
@@ -2,8 +2,8 @@ import { createContext, useState, useEffect, startTransition, useContext, useCal
2
2
  import { DragDropManager, defaultPreset, Draggable, Droppable } from '@dnd-kit/dom';
3
3
  import { useLatest, useOnValueChange, useComputed, useConstant } from '@dnd-kit/react/hooks';
4
4
  import { jsx } from 'react/jsx-runtime';
5
- import { currentValue } from '@dnd-kit/react/utilities';
6
5
  import { deepEqual } from '@dnd-kit/state';
6
+ import { currentValue } from '@dnd-kit/react/utilities';
7
7
 
8
8
  var __defProp = Object.defineProperty;
9
9
  var __defProps = Object.defineProperties;
@@ -36,8 +36,9 @@ var __objRest = (source, exclude) => {
36
36
  }
37
37
  return target;
38
38
  };
39
+ var defaultManager = new DragDropManager();
39
40
  var DragDropContext = createContext(
40
- new DragDropManager()
41
+ defaultManager
41
42
  );
42
43
  function useRenderer() {
43
44
  const [_, startTransition2] = useTransition();
@@ -167,33 +168,36 @@ function useDragDropManager() {
167
168
  function useInstance(initializer) {
168
169
  var _a;
169
170
  const manager = (_a = useDragDropManager()) != null ? _a : void 0;
170
- const [instance] = useState(() => initializer(manager));
171
+ const [instance] = useState(
172
+ () => initializer(manager === defaultManager ? void 0 : manager)
173
+ );
171
174
  useEffect(() => {
172
175
  instance.manager = manager;
173
- return manager == null ? void 0 : manager.registry.register(instance);
176
+ return instance.register();
174
177
  }, [instance, manager]);
175
178
  return instance;
176
179
  }
180
+
181
+ // src/core/draggable/useDraggable.ts
177
182
  function useDraggable(input) {
178
- const { disabled, id, modifiers, sensors } = input;
183
+ const { disabled, data, id, modifiers, sensors } = input;
179
184
  const handle = currentValue(input.handle);
180
185
  const element = currentValue(input.element);
181
186
  const draggable = useInstance(
182
187
  (manager) => new Draggable(
183
188
  __spreadProps(__spreadValues({}, input), {
184
189
  handle,
185
- element,
186
- options: __spreadProps(__spreadValues({}, input.options), {
187
- register: false
188
- })
190
+ element
189
191
  }),
190
192
  manager
191
193
  )
192
194
  );
193
195
  const isDragSource = useComputed(() => draggable.isDragSource);
196
+ const status = useComputed(() => draggable.status);
194
197
  useOnValueChange(id, () => draggable.id = id);
195
198
  useOnValueChange(handle, () => draggable.handle = handle);
196
199
  useOnValueChange(element, () => draggable.element = element);
200
+ useOnValueChange(data, () => data && (draggable.data = data));
197
201
  useOnValueChange(disabled, () => draggable.disabled = disabled === true);
198
202
  useOnValueChange(sensors, () => draggable.sensors = sensors);
199
203
  useOnValueChange(
@@ -214,6 +218,9 @@ function useDraggable(input) {
214
218
  get isDragSource() {
215
219
  return isDragSource.value;
216
220
  },
221
+ get status() {
222
+ return status.value;
223
+ },
217
224
  handleRef: useCallback(
218
225
  (element2) => {
219
226
  draggable.handle = element2 != null ? element2 : void 0;
@@ -229,15 +236,12 @@ function useDraggable(input) {
229
236
  };
230
237
  }
231
238
  function useDroppable(input) {
232
- const { collisionDetector, disabled, id, accept, type } = input;
239
+ const { collisionDetector, data, disabled, id, accept, type } = input;
233
240
  const element = currentValue(input.element);
234
241
  const droppable = useInstance(
235
242
  (manager) => new Droppable(
236
243
  __spreadProps(__spreadValues({}, input), {
237
- element,
238
- options: __spreadProps(__spreadValues({}, input.options), {
239
- register: false
240
- })
244
+ element
241
245
  }),
242
246
  manager
243
247
  )
@@ -246,6 +250,7 @@ function useDroppable(input) {
246
250
  useOnValueChange(id, () => droppable.id = id);
247
251
  useOnValueChange(accept, () => droppable.id = id, void 0, deepEqual);
248
252
  useOnValueChange(collisionDetector, () => droppable.id = id);
253
+ useOnValueChange(data, () => data && (droppable.data = data));
249
254
  useOnValueChange(disabled, () => droppable.disabled = disabled === true);
250
255
  useOnValueChange(element, () => droppable.element = element);
251
256
  useOnValueChange(type, () => droppable.id = id);
@@ -276,6 +281,6 @@ function useDragOperation() {
276
281
  };
277
282
  }
278
283
 
279
- export { DragDropProvider, useDragDropManager, useDragOperation, useDraggable, useDroppable };
284
+ export { DragDropProvider, useDragDropManager, useDragOperation, useDraggable, useDroppable, useInstance };
280
285
  //# sourceMappingURL=out.js.map
281
286
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dnd-kit/react",
3
- "version": "0.0.4-beta-20240621184125",
3
+ "version": "0.0.4-beta-20240622232930",
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": "0.0.4-beta-20240621184125",
60
- "@dnd-kit/dom": "0.0.4-beta-20240621184125",
61
- "@dnd-kit/state": "0.0.4-beta-20240621184125",
59
+ "@dnd-kit/abstract": "0.0.4-beta-20240622232930",
60
+ "@dnd-kit/dom": "0.0.4-beta-20240622232930",
61
+ "@dnd-kit/state": "0.0.4-beta-20240622232930",
62
62
  "tslib": "^2.6.2"
63
63
  },
64
64
  "peerDependencies": {
package/sortable.cjs CHANGED
@@ -45,32 +45,20 @@ function useSortable(input) {
45
45
  const handle = utilities.currentValue(input.handle);
46
46
  const element = utilities.currentValue(input.element);
47
47
  const target = utilities.currentValue(input.target);
48
- const sortable$1 = hooks.useConstant(() => {
48
+ const sortable$1 = react.useInstance((manager2) => {
49
49
  return new sortable.Sortable(
50
50
  __spreadProps(__spreadValues({}, input), {
51
51
  handle,
52
52
  element,
53
53
  target,
54
- feedback,
55
- options: __spreadProps(__spreadValues({}, input.options), {
56
- register: false
57
- })
54
+ feedback
58
55
  }),
59
- manager != null ? manager : void 0
56
+ manager2
60
57
  );
61
58
  });
62
- react$1.useEffect(() => {
63
- sortable$1.manager = manager != null ? manager : void 0;
64
- if (!manager) return;
65
- manager.registry.register(sortable$1.draggable);
66
- manager.registry.register(sortable$1.droppable);
67
- return () => {
68
- manager.registry.unregister(sortable$1.draggable);
69
- manager.registry.unregister(sortable$1.droppable);
70
- };
71
- }, [sortable$1, manager]);
72
59
  const isDropTarget = hooks.useComputed(() => sortable$1.isDropTarget);
73
60
  const isDragSource = hooks.useComputed(() => sortable$1.isDragSource);
61
+ const status = hooks.useComputed(() => sortable$1.status);
74
62
  hooks.useOnValueChange(id, () => sortable$1.id = id);
75
63
  hooks.useOnValueChange(index, () => sortable$1.index = index, hooks.useIsomorphicLayoutEffect);
76
64
  hooks.useOnValueChange(type, () => sortable$1.type = type);
@@ -81,7 +69,7 @@ function useSortable(input) {
81
69
  void 0,
82
70
  state.deepEqual
83
71
  );
84
- hooks.useOnValueChange(data, () => sortable$1.data = data != null ? data : null);
72
+ hooks.useOnValueChange(data, () => data && (sortable$1.data = data));
85
73
  hooks.useOnValueChange(
86
74
  index,
87
75
  () => {
@@ -113,6 +101,9 @@ function useSortable(input) {
113
101
  get isDropTarget() {
114
102
  return isDropTarget.value;
115
103
  },
104
+ get status() {
105
+ return status.value;
106
+ },
116
107
  handleRef: react$1.useCallback(
117
108
  (element2) => {
118
109
  sortable$1.handle = element2 != null ? element2 : void 0;
package/sortable.d.ts CHANGED
@@ -10,6 +10,7 @@ interface UseSortableInput<T extends Data = Data> extends Omit<SortableInput<T>,
10
10
  declare function useSortable<T extends Data = Data>(input: UseSortableInput<T>): {
11
11
  readonly isDragSource: boolean;
12
12
  readonly isDropTarget: boolean;
13
+ readonly status: "idle" | "dragging" | "dropping";
13
14
  handleRef: (element: Element | null) => void;
14
15
  ref: (element: Element | null) => void;
15
16
  sourceRef: (element: Element | null) => void;
package/sortable.js CHANGED
@@ -1,8 +1,8 @@
1
- import { useEffect, useCallback } from 'react';
1
+ import { useCallback } from 'react';
2
2
  import { deepEqual } from '@dnd-kit/state';
3
3
  import { Sortable, defaultSortableTransition } from '@dnd-kit/dom/sortable';
4
- import { useDragDropManager } from '@dnd-kit/react';
5
- import { useConstant, useComputed, useOnValueChange, useIsomorphicLayoutEffect, useImmediateEffect } from '@dnd-kit/react/hooks';
4
+ import { useDragDropManager, useInstance } from '@dnd-kit/react';
5
+ import { useComputed, useOnValueChange, useIsomorphicLayoutEffect, useImmediateEffect } from '@dnd-kit/react/hooks';
6
6
  import { currentValue } from '@dnd-kit/react/utilities';
7
7
 
8
8
  var __defProp = Object.defineProperty;
@@ -43,32 +43,20 @@ function useSortable(input) {
43
43
  const handle = currentValue(input.handle);
44
44
  const element = currentValue(input.element);
45
45
  const target = currentValue(input.target);
46
- const sortable = useConstant(() => {
46
+ const sortable = useInstance((manager2) => {
47
47
  return new Sortable(
48
48
  __spreadProps(__spreadValues({}, input), {
49
49
  handle,
50
50
  element,
51
51
  target,
52
- feedback,
53
- options: __spreadProps(__spreadValues({}, input.options), {
54
- register: false
55
- })
52
+ feedback
56
53
  }),
57
- manager != null ? manager : void 0
54
+ manager2
58
55
  );
59
56
  });
60
- useEffect(() => {
61
- sortable.manager = manager != null ? manager : void 0;
62
- if (!manager) return;
63
- manager.registry.register(sortable.draggable);
64
- manager.registry.register(sortable.droppable);
65
- return () => {
66
- manager.registry.unregister(sortable.draggable);
67
- manager.registry.unregister(sortable.droppable);
68
- };
69
- }, [sortable, manager]);
70
57
  const isDropTarget = useComputed(() => sortable.isDropTarget);
71
58
  const isDragSource = useComputed(() => sortable.isDragSource);
59
+ const status = useComputed(() => sortable.status);
72
60
  useOnValueChange(id, () => sortable.id = id);
73
61
  useOnValueChange(index, () => sortable.index = index, useIsomorphicLayoutEffect);
74
62
  useOnValueChange(type, () => sortable.type = type);
@@ -79,7 +67,7 @@ function useSortable(input) {
79
67
  void 0,
80
68
  deepEqual
81
69
  );
82
- useOnValueChange(data, () => sortable.data = data != null ? data : null);
70
+ useOnValueChange(data, () => data && (sortable.data = data));
83
71
  useOnValueChange(
84
72
  index,
85
73
  () => {
@@ -111,6 +99,9 @@ function useSortable(input) {
111
99
  get isDropTarget() {
112
100
  return isDropTarget.value;
113
101
  },
102
+ get status() {
103
+ return status.value;
104
+ },
114
105
  handleRef: useCallback(
115
106
  (element2) => {
116
107
  sortable.handle = element2 != null ? element2 : void 0;