@dnd-kit/react 0.0.2-beta-20240604021900 → 0.0.2-beta-20240604190117

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
@@ -2,79 +2,15 @@
2
2
 
3
3
  var react = require('react');
4
4
  var dom = require('@dnd-kit/dom');
5
- var state = require('@dnd-kit/state');
6
- var reactDom = require('react-dom');
7
5
  var hooks = require('@dnd-kit/react/hooks');
8
6
  var jsxRuntime = require('react/jsx-runtime');
9
7
  var utilities = require('@dnd-kit/react/utilities');
8
+ var state = require('@dnd-kit/state');
10
9
 
11
- // src/core/context/hooks.ts
10
+ // src/core/context/DragDropProvider.tsx
12
11
  var DragDropContext = react.createContext(
13
12
  new dom.DragDropManager()
14
13
  );
15
- function useConstant(initializer, dependency) {
16
- const ref = react.useRef();
17
- const previousDependency = react.useRef(dependency);
18
- if (!ref.current) {
19
- ref.current = initializer();
20
- }
21
- if (previousDependency.current !== dependency) {
22
- previousDependency.current = dependency;
23
- ref.current = initializer();
24
- }
25
- return ref.current;
26
- }
27
- var canUseDOM = typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined";
28
- var useIsomorphicLayoutEffect = canUseDOM ? react.useLayoutEffect : react.useEffect;
29
-
30
- // src/hooks/useSignal.ts
31
- function useSignal(signalOrValue, sync = false) {
32
- const sig = useConstant(
33
- () => signalOrValue instanceof state.Signal ? signalOrValue : state.signal(signalOrValue)
34
- );
35
- let val = sig.peek();
36
- const update = react.useState(val)[1];
37
- useIsomorphicLayoutEffect(
38
- () => state.effect(() => {
39
- if (val !== (val = sig.value)) {
40
- if (sync) {
41
- reactDom.flushSync(() => update(val));
42
- } else {
43
- update(val);
44
- }
45
- }
46
- }),
47
- [sync]
48
- );
49
- return sig;
50
- }
51
-
52
- // src/hooks/useComputed.ts
53
- function useComputed(compute, sync = false) {
54
- return useSignal(
55
- useConstant(() => state.computed(compute)),
56
- sync
57
- );
58
- }
59
-
60
- // src/core/context/hooks.ts
61
- function useDragDropManager() {
62
- return react.useContext(DragDropContext);
63
- }
64
- function useDragOperation() {
65
- const manager = useDragDropManager();
66
- const { dragOperation } = manager;
67
- const source = useComputed(() => dragOperation.source);
68
- const target = useComputed(() => dragOperation.target);
69
- return {
70
- get source() {
71
- return source.value;
72
- },
73
- get target() {
74
- return target.value;
75
- }
76
- };
77
- }
78
14
  function useRenderer() {
79
15
  const [_, startTransition] = react.useTransition();
80
16
  const [transitionCount, setTransitionCount] = react.useState(0);
@@ -175,14 +111,30 @@ var DragDropProvider = react.forwardRef(
175
111
  return /* @__PURE__ */ jsxRuntime.jsx(DragDropContext.Provider, { value: manager, children });
176
112
  }
177
113
  );
114
+ function useDragDropManager() {
115
+ return react.useContext(DragDropContext);
116
+ }
117
+
118
+ // src/core/hooks/useInstance.ts
119
+ function useInstance(initializer) {
120
+ const manager = useDragDropManager();
121
+ const [instance] = react.useState(() => initializer(manager));
122
+ react.useEffect(() => {
123
+ manager.registry.register(instance);
124
+ return () => {
125
+ manager.registry.unregister(instance);
126
+ };
127
+ }, []);
128
+ return instance;
129
+ }
130
+
131
+ // src/core/draggable/useDraggable.ts
178
132
  function useDraggable(input) {
179
133
  const { disabled, id, sensors } = input;
180
- const manager = useDragDropManager();
181
134
  const handle = utilities.getCurrentValue(input.handle);
182
135
  const element = utilities.getCurrentValue(input.element);
183
- const draggable = hooks.useConstant(
184
- () => new dom.Draggable({ ...input, handle, element }, manager),
185
- manager
136
+ const draggable = useInstance(
137
+ (manager) => new dom.Draggable({ ...input, handle, element }, manager)
186
138
  );
187
139
  const isDragSource = hooks.useComputed(() => draggable.isDragSource);
188
140
  hooks.useOnValueChange(id, () => draggable.id = id);
@@ -194,12 +146,6 @@ function useDraggable(input) {
194
146
  input.feedback,
195
147
  () => draggable.feedback = input.feedback ?? "default"
196
148
  );
197
- react.useEffect(() => {
198
- manager.registry.register(draggable);
199
- return () => {
200
- manager.registry.unregister(draggable);
201
- };
202
- }, [manager, draggable]);
203
149
  return {
204
150
  get isDragSource() {
205
151
  return isDragSource.value;
@@ -219,12 +165,10 @@ function useDraggable(input) {
219
165
  };
220
166
  }
221
167
  function useDroppable(input) {
222
- const manager = useDragDropManager();
223
168
  const { collisionDetector, disabled, id, accept, type } = input;
224
169
  const element = utilities.getCurrentValue(input.element);
225
- const droppable = hooks.useConstant(
226
- () => new dom.Droppable({ ...input, element }, manager),
227
- manager
170
+ const droppable = useInstance(
171
+ (manager) => new dom.Droppable({ ...input, element }, manager)
228
172
  );
229
173
  const isDisabled = hooks.useComputed(() => droppable.disabled);
230
174
  const isDropTarget = hooks.useComputed(() => droppable.isDropTarget);
@@ -234,12 +178,6 @@ function useDroppable(input) {
234
178
  hooks.useOnValueChange(disabled, () => droppable.disabled = disabled === true);
235
179
  hooks.useOnValueChange(element, () => droppable.element = element);
236
180
  hooks.useOnValueChange(type, () => droppable.id = id);
237
- react.useEffect(() => {
238
- manager.registry.register(droppable);
239
- return () => {
240
- manager.registry.unregister(droppable);
241
- };
242
- }, [manager, droppable]);
243
181
  return {
244
182
  get isDisabled() {
245
183
  return isDisabled.value;
@@ -255,6 +193,20 @@ function useDroppable(input) {
255
193
  )
256
194
  };
257
195
  }
196
+ function useDragOperation() {
197
+ const manager = useDragDropManager();
198
+ const { dragOperation } = manager;
199
+ const source = hooks.useComputed(() => dragOperation.source);
200
+ const target = hooks.useComputed(() => dragOperation.target);
201
+ return {
202
+ get source() {
203
+ return source.value;
204
+ },
205
+ get target() {
206
+ return target.value;
207
+ }
208
+ };
209
+ }
258
210
 
259
211
  exports.DragDropProvider = DragDropProvider;
260
212
  exports.useDragDropManager = useDragDropManager;
package/index.d.ts CHANGED
@@ -1,17 +1,11 @@
1
- import * as _dnd_kit_dom from '@dnd-kit/dom';
2
- import { DragDropManager, Draggable, Droppable, DragDropManagerInput, DraggableInput, DroppableInput } from '@dnd-kit/dom';
3
- import * as _dnd_kit_abstract from '@dnd-kit/abstract';
4
- import { DragDropEvents, Data } from '@dnd-kit/abstract';
5
1
  import * as react from 'react';
6
2
  import { PropsWithChildren } from 'react';
3
+ import * as _dnd_kit_abstract from '@dnd-kit/abstract';
4
+ import { DragDropEvents, Data } from '@dnd-kit/abstract';
5
+ import * as _dnd_kit_dom from '@dnd-kit/dom';
6
+ import { DragDropManager, Draggable, Droppable, DragDropManagerInput, DraggableInput, DroppableInput } from '@dnd-kit/dom';
7
7
  import { RefOrValue } from '@dnd-kit/react/utilities';
8
8
 
9
- declare function useDragDropManager(): _dnd_kit_dom.DragDropManager<_dnd_kit_dom.Draggable<_dnd_kit_abstract.Data>, _dnd_kit_dom.Droppable<_dnd_kit_abstract.Data>>;
10
- declare function useDragOperation(): {
11
- readonly source: _dnd_kit_dom.Draggable<_dnd_kit_abstract.Data> | null;
12
- readonly target: _dnd_kit_dom.Droppable<_dnd_kit_abstract.Data> | null;
13
- };
14
-
15
9
  type Events = DragDropEvents<Draggable, Droppable, DragDropManager>;
16
10
  interface Props extends DragDropManagerInput, PropsWithChildren {
17
11
  manager?: DragDropManager;
@@ -43,4 +37,11 @@ declare function useDroppable<T extends Data = Data>(input: UseDroppableInput<T>
43
37
  ref: (element: Element | null) => void;
44
38
  };
45
39
 
40
+ declare function useDragDropManager(): _dnd_kit_dom.DragDropManager<_dnd_kit_dom.Draggable<_dnd_kit_abstract.Data>, _dnd_kit_dom.Droppable<_dnd_kit_abstract.Data>>;
41
+
42
+ declare function useDragOperation(): {
43
+ readonly source: _dnd_kit_dom.Draggable<_dnd_kit_abstract.Data> | null;
44
+ readonly target: _dnd_kit_dom.Droppable<_dnd_kit_abstract.Data> | null;
45
+ };
46
+
46
47
  export { DragDropProvider, useDragDropManager, useDragOperation, useDraggable, useDroppable };
package/index.js CHANGED
@@ -1,84 +1,20 @@
1
- import { createContext, forwardRef, useEffect, useImperativeHandle, useContext, useTransition, useState, useRef, useCallback, useLayoutEffect } from 'react';
1
+ import { createContext, forwardRef, useEffect, useImperativeHandle, useTransition, useState, useRef, useContext, useCallback } from 'react';
2
2
  import { DragDropManager, defaultPreset, Draggable, Droppable } from '@dnd-kit/dom';
3
- import { deepEqual, Signal, signal, effect, computed } from '@dnd-kit/state';
4
- import { flushSync } from 'react-dom';
5
- import { useConstant as useConstant$1, useLatest, useEvent, useOnValueChange, useComputed as useComputed$1 } from '@dnd-kit/react/hooks';
3
+ import { useConstant, useLatest, useEvent, useOnValueChange, useComputed } from '@dnd-kit/react/hooks';
6
4
  import { jsx } from 'react/jsx-runtime';
7
5
  import { getCurrentValue } from '@dnd-kit/react/utilities';
6
+ import { deepEqual } from '@dnd-kit/state';
8
7
 
9
- // src/core/context/hooks.ts
8
+ // src/core/context/DragDropProvider.tsx
10
9
  var DragDropContext = createContext(
11
10
  new DragDropManager()
12
11
  );
13
- function useConstant(initializer, dependency) {
14
- const ref = useRef();
15
- const previousDependency = useRef(dependency);
16
- if (!ref.current) {
17
- ref.current = initializer();
18
- }
19
- if (previousDependency.current !== dependency) {
20
- previousDependency.current = dependency;
21
- ref.current = initializer();
22
- }
23
- return ref.current;
24
- }
25
- var canUseDOM = typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined";
26
- var useIsomorphicLayoutEffect = canUseDOM ? useLayoutEffect : useEffect;
27
-
28
- // src/hooks/useSignal.ts
29
- function useSignal(signalOrValue, sync = false) {
30
- const sig = useConstant(
31
- () => signalOrValue instanceof Signal ? signalOrValue : signal(signalOrValue)
32
- );
33
- let val = sig.peek();
34
- const update = useState(val)[1];
35
- useIsomorphicLayoutEffect(
36
- () => effect(() => {
37
- if (val !== (val = sig.value)) {
38
- if (sync) {
39
- flushSync(() => update(val));
40
- } else {
41
- update(val);
42
- }
43
- }
44
- }),
45
- [sync]
46
- );
47
- return sig;
48
- }
49
-
50
- // src/hooks/useComputed.ts
51
- function useComputed(compute, sync = false) {
52
- return useSignal(
53
- useConstant(() => computed(compute)),
54
- sync
55
- );
56
- }
57
-
58
- // src/core/context/hooks.ts
59
- function useDragDropManager() {
60
- return useContext(DragDropContext);
61
- }
62
- function useDragOperation() {
63
- const manager = useDragDropManager();
64
- const { dragOperation } = manager;
65
- const source = useComputed(() => dragOperation.source);
66
- const target = useComputed(() => dragOperation.target);
67
- return {
68
- get source() {
69
- return source.value;
70
- },
71
- get target() {
72
- return target.value;
73
- }
74
- };
75
- }
76
12
  function useRenderer() {
77
13
  const [_, startTransition] = useTransition();
78
14
  const [transitionCount, setTransitionCount] = useState(0);
79
15
  const rendering = useRef();
80
16
  const resolver = useRef();
81
- const renderer = useConstant$1(() => ({
17
+ const renderer = useConstant(() => ({
82
18
  get rendering() {
83
19
  return rendering.current ?? Promise.resolve();
84
20
  }
@@ -114,7 +50,7 @@ var DragDropProvider = forwardRef(
114
50
  ...input
115
51
  }, ref) {
116
52
  const { renderer, trackRendering } = useRenderer();
117
- const manager = useConstant$1(() => {
53
+ const manager = useConstant(() => {
118
54
  const instance = input.manager ?? new DragDropManager(input);
119
55
  instance.renderer = renderer;
120
56
  return instance;
@@ -173,16 +109,32 @@ var DragDropProvider = forwardRef(
173
109
  return /* @__PURE__ */ jsx(DragDropContext.Provider, { value: manager, children });
174
110
  }
175
111
  );
112
+ function useDragDropManager() {
113
+ return useContext(DragDropContext);
114
+ }
115
+
116
+ // src/core/hooks/useInstance.ts
117
+ function useInstance(initializer) {
118
+ const manager = useDragDropManager();
119
+ const [instance] = useState(() => initializer(manager));
120
+ useEffect(() => {
121
+ manager.registry.register(instance);
122
+ return () => {
123
+ manager.registry.unregister(instance);
124
+ };
125
+ }, []);
126
+ return instance;
127
+ }
128
+
129
+ // src/core/draggable/useDraggable.ts
176
130
  function useDraggable(input) {
177
131
  const { disabled, id, sensors } = input;
178
- const manager = useDragDropManager();
179
132
  const handle = getCurrentValue(input.handle);
180
133
  const element = getCurrentValue(input.element);
181
- const draggable = useConstant$1(
182
- () => new Draggable({ ...input, handle, element }, manager),
183
- manager
134
+ const draggable = useInstance(
135
+ (manager) => new Draggable({ ...input, handle, element }, manager)
184
136
  );
185
- const isDragSource = useComputed$1(() => draggable.isDragSource);
137
+ const isDragSource = useComputed(() => draggable.isDragSource);
186
138
  useOnValueChange(id, () => draggable.id = id);
187
139
  useOnValueChange(handle, () => draggable.handle = handle);
188
140
  useOnValueChange(element, () => draggable.element = element);
@@ -192,12 +144,6 @@ function useDraggable(input) {
192
144
  input.feedback,
193
145
  () => draggable.feedback = input.feedback ?? "default"
194
146
  );
195
- useEffect(() => {
196
- manager.registry.register(draggable);
197
- return () => {
198
- manager.registry.unregister(draggable);
199
- };
200
- }, [manager, draggable]);
201
147
  return {
202
148
  get isDragSource() {
203
149
  return isDragSource.value;
@@ -217,27 +163,19 @@ function useDraggable(input) {
217
163
  };
218
164
  }
219
165
  function useDroppable(input) {
220
- const manager = useDragDropManager();
221
166
  const { collisionDetector, disabled, id, accept, type } = input;
222
167
  const element = getCurrentValue(input.element);
223
- const droppable = useConstant$1(
224
- () => new Droppable({ ...input, element }, manager),
225
- manager
168
+ const droppable = useInstance(
169
+ (manager) => new Droppable({ ...input, element }, manager)
226
170
  );
227
- const isDisabled = useComputed$1(() => droppable.disabled);
228
- const isDropTarget = useComputed$1(() => droppable.isDropTarget);
171
+ const isDisabled = useComputed(() => droppable.disabled);
172
+ const isDropTarget = useComputed(() => droppable.isDropTarget);
229
173
  useOnValueChange(id, () => droppable.id = id);
230
174
  useOnValueChange(accept, () => droppable.id = id, void 0, deepEqual);
231
175
  useOnValueChange(collisionDetector, () => droppable.id = id);
232
176
  useOnValueChange(disabled, () => droppable.disabled = disabled === true);
233
177
  useOnValueChange(element, () => droppable.element = element);
234
178
  useOnValueChange(type, () => droppable.id = id);
235
- useEffect(() => {
236
- manager.registry.register(droppable);
237
- return () => {
238
- manager.registry.unregister(droppable);
239
- };
240
- }, [manager, droppable]);
241
179
  return {
242
180
  get isDisabled() {
243
181
  return isDisabled.value;
@@ -253,6 +191,20 @@ function useDroppable(input) {
253
191
  )
254
192
  };
255
193
  }
194
+ function useDragOperation() {
195
+ const manager = useDragDropManager();
196
+ const { dragOperation } = manager;
197
+ const source = useComputed(() => dragOperation.source);
198
+ const target = useComputed(() => dragOperation.target);
199
+ return {
200
+ get source() {
201
+ return source.value;
202
+ },
203
+ get target() {
204
+ return target.value;
205
+ }
206
+ };
207
+ }
256
208
 
257
209
  export { DragDropProvider, useDragDropManager, useDragOperation, useDraggable, useDroppable };
258
210
  //# sourceMappingURL=out.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dnd-kit/react",
3
- "version": "0.0.2-beta-20240604021900",
3
+ "version": "0.0.2-beta-20240604190117",
4
4
  "main": "./index.cjs",
5
5
  "module": "./index.js",
6
6
  "type": "module",
@@ -57,7 +57,7 @@
57
57
  },
58
58
  "dependencies": {
59
59
  "@dnd-kit/abstract": "*",
60
- "@dnd-kit/dom": "0.0.2-beta-20240604021900",
60
+ "@dnd-kit/dom": "0.0.2-beta-20240604190117",
61
61
  "@dnd-kit/state": "*",
62
62
  "tslib": "^2.6.2"
63
63
  },
package/sortable.cjs CHANGED
@@ -37,6 +37,14 @@ function useSortable(input) {
37
37
  ),
38
38
  manager
39
39
  );
40
+ react$1.useEffect(() => {
41
+ manager.registry.register(sortable$1.draggable);
42
+ manager.registry.register(sortable$1.droppable);
43
+ return () => {
44
+ manager.registry.unregister(sortable$1.draggable);
45
+ manager.registry.unregister(sortable$1.droppable);
46
+ };
47
+ }, [manager]);
40
48
  const isDisabled = hooks.useComputed(() => sortable$1.disabled);
41
49
  const isDropTarget = hooks.useComputed(() => sortable$1.isDropTarget);
42
50
  const isDragSource = hooks.useComputed(() => sortable$1.isDragSource);
package/sortable.js CHANGED
@@ -1,4 +1,4 @@
1
- import { useCallback } from 'react';
1
+ import { useEffect, useCallback } from 'react';
2
2
  import { deepEqual } from '@dnd-kit/state';
3
3
  import { Sortable, defaultSortableTransition } from '@dnd-kit/dom/sortable';
4
4
  import { useDragDropManager } from '@dnd-kit/react';
@@ -35,6 +35,14 @@ function useSortable(input) {
35
35
  ),
36
36
  manager
37
37
  );
38
+ useEffect(() => {
39
+ manager.registry.register(sortable.draggable);
40
+ manager.registry.register(sortable.droppable);
41
+ return () => {
42
+ manager.registry.unregister(sortable.draggable);
43
+ manager.registry.unregister(sortable.droppable);
44
+ };
45
+ }, [manager]);
38
46
  const isDisabled = useComputed(() => sortable.disabled);
39
47
  const isDropTarget = useComputed(() => sortable.isDropTarget);
40
48
  const isDragSource = useComputed(() => sortable.isDragSource);