@dnd-kit/react 0.1.17 → 0.1.18-beta-20250523142052

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.
Files changed (4) hide show
  1. package/index.cjs +67 -58
  2. package/index.d.ts +23 -24
  3. package/index.js +70 -61
  4. package/package.json +4 -4
package/index.cjs CHANGED
@@ -43,41 +43,42 @@ var defaultManager = new dom.DragDropManager();
43
43
  var DragDropContext = react.createContext(
44
44
  defaultManager
45
45
  );
46
- function useRenderer() {
47
- const [_, startTransition2] = react.useTransition();
48
- const [transitionCount, setTransitionCount] = react.useState(0);
49
- const rendering = react.useRef(null);
50
- const resolver = react.useRef(null);
51
- const renderer = hooks.useConstant(() => ({
52
- get rendering() {
53
- var _a2;
54
- return (_a2 = rendering.current) != null ? _a2 : Promise.resolve();
55
- }
56
- }));
57
- hooks.useOnValueChange(
58
- transitionCount,
59
- () => {
46
+ var Renderer = react.memo(
47
+ react.forwardRef(({ children }, ref) => {
48
+ const [transitionCount, setTransitionCount] = react.useState(0);
49
+ const rendering = react.useRef(null);
50
+ const resolver = react.useRef(null);
51
+ const renderer = react.useMemo(
52
+ () => ({
53
+ renderer: {
54
+ get rendering() {
55
+ var _a2;
56
+ return (_a2 = rendering.current) != null ? _a2 : Promise.resolve();
57
+ }
58
+ },
59
+ trackRendering(callback) {
60
+ if (!rendering.current) {
61
+ rendering.current = new Promise((resolve) => {
62
+ resolver.current = resolve;
63
+ });
64
+ }
65
+ react.startTransition(() => {
66
+ callback();
67
+ setTransitionCount((count) => count + 1);
68
+ });
69
+ }
70
+ }),
71
+ []
72
+ );
73
+ hooks.useIsomorphicLayoutEffect(() => {
60
74
  var _a2;
61
75
  (_a2 = resolver.current) == null ? void 0 : _a2.call(resolver);
62
76
  rendering.current = null;
63
- },
64
- react.useLayoutEffect
65
- );
66
- return {
67
- renderer,
68
- trackRendering(callback) {
69
- if (!rendering.current) {
70
- rendering.current = new Promise((resolve) => {
71
- resolver.current = resolve;
72
- });
73
- }
74
- startTransition2(() => {
75
- callback();
76
- setTransitionCount((count) => count + 1);
77
- });
78
- }
79
- };
80
- }
77
+ }, [children, transitionCount]);
78
+ react.useImperativeHandle(ref, () => renderer);
79
+ return null;
80
+ })
81
+ );
81
82
  var options = [void 0, state.deepEqual];
82
83
  function DragDropProvider(_a2) {
83
84
  var _b = _a2, {
@@ -98,10 +99,8 @@ function DragDropProvider(_a2) {
98
99
  "onDragEnd"
99
100
  ]);
100
101
  var _a3;
101
- const { renderer, trackRendering } = useRenderer();
102
- const [manager, setManager] = react.useState(
103
- (_a3 = input.manager) != null ? _a3 : null
104
- );
102
+ const rendererRef = react.useRef(null);
103
+ const [manager, setManager] = react.useState((_a3 = input.manager) != null ? _a3 : null);
105
104
  const { plugins, modifiers, sensors } = input;
106
105
  const handleBeforeDragStart = hooks.useLatest(onBeforeDragStart);
107
106
  const handleDragStart = hooks.useLatest(onDragStart);
@@ -111,49 +110,51 @@ function DragDropProvider(_a2) {
111
110
  const handleCollision = hooks.useLatest(onCollision);
112
111
  react.useEffect(() => {
113
112
  var _a4;
113
+ if (!rendererRef.current) throw new Error("Renderer not found");
114
+ const { renderer, trackRendering } = rendererRef.current;
114
115
  const manager2 = (_a4 = input.manager) != null ? _a4 : new dom.DragDropManager(input);
115
116
  manager2.renderer = renderer;
116
- manager2.monitor.addEventListener("beforedragstart", (event, manager3) => {
117
+ manager2.monitor.addEventListener("beforedragstart", (event) => {
117
118
  const callback = handleBeforeDragStart.current;
118
119
  if (callback) {
119
- trackRendering(() => callback(event, manager3));
120
+ trackRendering(() => callback(event, manager2));
120
121
  }
121
122
  });
122
123
  manager2.monitor.addEventListener(
123
124
  "dragstart",
124
- (event, manager3) => {
125
+ (event) => {
125
126
  var _a5;
126
- return (_a5 = handleDragStart.current) == null ? void 0 : _a5.call(handleDragStart, event, manager3);
127
+ return (_a5 = handleDragStart.current) == null ? void 0 : _a5.call(handleDragStart, event, manager2);
127
128
  }
128
129
  );
129
- manager2.monitor.addEventListener("dragover", (event, manager3) => {
130
+ manager2.monitor.addEventListener("dragover", (event) => {
130
131
  const callback = handleDragOver.current;
131
132
  if (callback) {
132
- trackRendering(() => callback(event, manager3));
133
+ trackRendering(() => callback(event, manager2));
133
134
  }
134
135
  });
135
- manager2.monitor.addEventListener("dragmove", (event, manager3) => {
136
+ manager2.monitor.addEventListener("dragmove", (event) => {
136
137
  const callback = handleDragMove.current;
137
138
  if (callback) {
138
- trackRendering(() => callback(event, manager3));
139
+ trackRendering(() => callback(event, manager2));
139
140
  }
140
141
  });
141
- manager2.monitor.addEventListener("dragend", (event, manager3) => {
142
+ manager2.monitor.addEventListener("dragend", (event) => {
142
143
  const callback = handleDragEnd.current;
143
144
  if (callback) {
144
- trackRendering(() => callback(event, manager3));
145
+ trackRendering(() => callback(event, manager2));
145
146
  }
146
147
  });
147
148
  manager2.monitor.addEventListener(
148
149
  "collision",
149
- (event, manager3) => {
150
+ (event) => {
150
151
  var _a5;
151
- return (_a5 = handleCollision.current) == null ? void 0 : _a5.call(handleCollision, event, manager3);
152
+ return (_a5 = handleCollision.current) == null ? void 0 : _a5.call(handleCollision, event, manager2);
152
153
  }
153
154
  );
154
155
  react.startTransition(() => setManager(manager2));
155
156
  return manager2.destroy;
156
- }, [renderer, input.manager]);
157
+ }, [input.manager]);
157
158
  hooks.useOnValueChange(
158
159
  plugins,
159
160
  () => manager && (manager.plugins = plugins != null ? plugins : dom.defaultPreset.plugins),
@@ -169,7 +170,10 @@ function DragDropProvider(_a2) {
169
170
  () => manager && (manager.modifiers = modifiers != null ? modifiers : dom.defaultPreset.modifiers),
170
171
  ...options
171
172
  );
172
- return /* @__PURE__ */ jsxRuntime.jsx(DragDropContext.Provider, { value: manager, children });
173
+ return /* @__PURE__ */ jsxRuntime.jsxs(DragDropContext.Provider, { value: manager, children: [
174
+ /* @__PURE__ */ jsxRuntime.jsx(Renderer, { ref: rendererRef, children }),
175
+ children
176
+ ] });
173
177
  }
174
178
  function useDragDropManager() {
175
179
  return react.useContext(DragDropContext);
@@ -257,15 +261,20 @@ function shouldUpdateSynchronously(key, oldValue, newValue) {
257
261
  if (key === "isDragSource" && !newValue && oldValue) return true;
258
262
  return false;
259
263
  }
260
- function DragOverlay({ children, className, style, tag }) {
264
+ function DragOverlay({
265
+ children,
266
+ className,
267
+ style,
268
+ tag,
269
+ disabled
270
+ }) {
271
+ var _a2;
261
272
  const ref = react.useRef(null);
262
273
  const manager = useDragDropManager();
263
- const source = hooks.useComputed(
264
- () => manager == null ? void 0 : manager.dragOperation.source,
265
- [manager]
266
- ).value;
274
+ const source = (_a2 = hooks.useComputed(() => manager == null ? void 0 : manager.dragOperation.source, [manager]).value) != null ? _a2 : null;
275
+ const isDisabled = typeof disabled === "function" ? disabled(source) : disabled;
267
276
  react.useEffect(() => {
268
- if (!ref.current || !manager) return;
277
+ if (!ref.current || !manager || isDisabled) return;
269
278
  const feedback = manager.plugins.find(
270
279
  (plugin) => plugin instanceof dom.Feedback
271
280
  );
@@ -274,7 +283,7 @@ function DragOverlay({ children, className, style, tag }) {
274
283
  return () => {
275
284
  feedback.overlay = void 0;
276
285
  };
277
- }, [manager]);
286
+ }, [manager, isDisabled]);
278
287
  const patchedManager = react.useMemo(() => {
279
288
  if (!manager) return null;
280
289
  const patchedRegistry = new Proxy(manager.registry, {
@@ -300,7 +309,7 @@ function DragOverlay({ children, className, style, tag }) {
300
309
  renderChildren()
301
310
  ) });
302
311
  function renderChildren() {
303
- if (!source) return null;
312
+ if (!source || isDisabled) return null;
304
313
  if (typeof children === "function") {
305
314
  return /* @__PURE__ */ jsxRuntime.jsx(Children, { source, children });
306
315
  }
package/index.d.ts CHANGED
@@ -1,23 +1,21 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { PropsWithChildren, RefObject, MutableRefObject, ReactNode } from 'react';
3
- import * as _dnd_kit_abstract from '@dnd-kit/abstract';
4
3
  import { Data, DragDropEvents, DragDropManager as DragDropManager$1 } from '@dnd-kit/abstract';
5
- import * as _dnd_kit_dom from '@dnd-kit/dom';
6
- import { DragDropManagerInput, DragDropManager, Draggable, Droppable, DraggableInput, DroppableInput } from '@dnd-kit/dom';
4
+ import { Draggable, Droppable, DragDropManager, DragDropManagerInput, DraggableInput, DroppableInput } from '@dnd-kit/dom';
7
5
  export { DragDropManager, KeyboardSensor, PointerSensor } from '@dnd-kit/dom';
8
6
  import { CleanupFunction } from '@dnd-kit/state';
9
7
 
10
- type Events$1<T extends Data = Data> = DragDropEvents<Draggable<T>, Droppable<T>, DragDropManager<Draggable<T>, Droppable<T>>>;
11
- interface Props$1<T extends Data = Data> extends DragDropManagerInput, PropsWithChildren {
12
- manager?: DragDropManager;
13
- onBeforeDragStart?: Events$1<T>['beforedragstart'];
14
- onCollision?: Events$1<T>['collision'];
15
- onDragStart?: Events$1<T>['dragstart'];
16
- onDragMove?: Events$1<T>['dragmove'];
17
- onDragOver?: Events$1<T>['dragover'];
18
- onDragEnd?: Events$1<T>['dragend'];
8
+ type Events$1<T extends Data = Data, U extends Draggable<T> = Draggable<T>, V extends Droppable<T> = Droppable<T>, W extends DragDropManager<T, U, V> = DragDropManager<T, U, V>> = DragDropEvents<U, V, W>;
9
+ interface Props$1<T extends Data = Data, U extends Draggable<T> = Draggable<T>, V extends Droppable<T> = Droppable<T>, W extends DragDropManager<T, U, V> = DragDropManager<T, U, V>> extends DragDropManagerInput, PropsWithChildren {
10
+ manager?: W;
11
+ onBeforeDragStart?: Events$1<T, U, V, W>['beforedragstart'];
12
+ onCollision?: Events$1<T, U, V, W>['collision'];
13
+ onDragStart?: Events$1<T, U, V, W>['dragstart'];
14
+ onDragMove?: Events$1<T, U, V, W>['dragmove'];
15
+ onDragOver?: Events$1<T, U, V, W>['dragover'];
16
+ onDragEnd?: Events$1<T, U, V, W>['dragend'];
19
17
  }
20
- declare function DragDropProvider<T extends Data = Data>({ children, onCollision, onBeforeDragStart, onDragStart, onDragMove, onDragOver, onDragEnd, ...input }: Props$1<T>): react_jsx_runtime.JSX.Element;
18
+ declare function DragDropProvider<T extends Data = Data, U extends Draggable<T> = Draggable<T>, V extends Droppable<T> = Droppable<T>, W extends DragDropManager<T, U, V> = DragDropManager<T, U, V>>({ children, onCollision, onBeforeDragStart, onDragStart, onDragMove, onDragOver, onDragEnd, ...input }: Props$1<T, U, V, W>): react_jsx_runtime.JSX.Element;
21
19
 
22
20
  type Ref<T> = RefObject<T | null | undefined> | MutableRefObject<T>;
23
21
  type RefOrValue<T> = T | Ref<T> | null | undefined;
@@ -35,13 +33,14 @@ declare function useDraggable<T extends Data = Data>(input: UseDraggableInput<T>
35
33
  ref: (element: Element | null) => void;
36
34
  };
37
35
 
38
- interface Props {
36
+ interface Props<T extends Data, U extends Draggable<T>> {
39
37
  className?: string;
40
- children: ReactNode | ((source: Draggable) => ReactNode);
38
+ children: ReactNode | ((source: U) => ReactNode);
41
39
  style?: React.CSSProperties;
42
40
  tag?: string;
41
+ disabled?: boolean | ((source: U | null) => boolean);
43
42
  }
44
- declare function DragOverlay({ children, className, style, tag }: Props): react_jsx_runtime.JSX.Element;
43
+ declare function DragOverlay<T extends Data, U extends Draggable<T>>({ children, className, style, tag, disabled, }: Props<T, U>): react_jsx_runtime.JSX.Element;
45
44
 
46
45
  interface UseDroppableInput<T extends Data = Data> extends Omit<DroppableInput<T>, 'element'> {
47
46
  element?: RefOrValue<Element>;
@@ -52,7 +51,7 @@ declare function useDroppable<T extends Data = Data>(input: UseDroppableInput<T>
52
51
  ref: (element: Element | null) => void;
53
52
  };
54
53
 
55
- declare function useDragDropManager(): _dnd_kit_dom.DragDropManager<_dnd_kit_dom.Draggable<_dnd_kit_abstract.Data>, _dnd_kit_dom.Droppable<_dnd_kit_abstract.Data>> | null;
54
+ declare function useDragDropManager<T extends Data = Data, U extends Draggable<T> = Draggable<T>, V extends Droppable<T> = Droppable<T>, W extends DragDropManager<T, U, V> = DragDropManager<T, U, V>>(): W | null;
56
55
 
57
56
  type DragDropEventMap = {
58
57
  beforedragstart: 'onBeforeDragStart';
@@ -61,19 +60,19 @@ type EventHandlerName<T extends string> = T extends keyof DragDropEventMap ? Dra
61
60
  /**
62
61
  * Type for all possible event handlers
63
62
  */
64
- type Events<T extends Data> = DragDropEvents<Draggable<T>, Droppable<T>, DragDropManager<Draggable<T>, Droppable<T>>>;
65
- type EventHandlers<T extends Data = Data> = {
66
- [K in keyof Events<T> as EventHandlerName<K>]: Events<T>[K];
63
+ type Events<T extends Data, U extends Draggable<T>, V extends Droppable<T>, W extends DragDropManager<T, U, V>> = DragDropEvents<U, V, W>;
64
+ type EventHandlers<T extends Data = Data, U extends Draggable<T> = Draggable<T>, V extends Droppable<T> = Droppable<T>, W extends DragDropManager<T, U, V> = DragDropManager<T, U, V>> = {
65
+ [K in keyof Events<T, U, V, W> as EventHandlerName<K>]: Events<T, U, V, W>[K];
67
66
  };
68
67
  /**
69
68
  * Hook to monitor drag and drop events anywhere within a DragDropProvider
70
69
  * @param handlers Object containing event handlers for drag and drop events
71
70
  */
72
- declare function useDragDropMonitor<T extends Data = Data>(handlers: Partial<EventHandlers<T>>): void;
71
+ declare function useDragDropMonitor<T extends Data = Data, U extends Draggable<T> = Draggable<T>, V extends Droppable<T> = Droppable<T>, W extends DragDropManager<T, U, V> = DragDropManager<T, U, V>>(handlers: Partial<EventHandlers<T, U, V, W>>): void;
73
72
 
74
- declare function useDragOperation(): {
75
- readonly source: _dnd_kit_dom.Draggable<_dnd_kit_abstract.Data> | null | undefined;
76
- readonly target: _dnd_kit_dom.Droppable<_dnd_kit_abstract.Data> | null | undefined;
73
+ declare function useDragOperation<T extends Data = Data, U extends Draggable<T> = Draggable<T>, V extends Droppable<T> = Droppable<T>, W extends DragDropManager<T, U, V> = DragDropManager<T, U, V>>(): {
74
+ readonly source: U | null | undefined;
75
+ readonly target: V | null | undefined;
77
76
  };
78
77
 
79
78
  interface Instance<T extends DragDropManager$1<any, any> = DragDropManager$1<any, any>> {
package/index.js CHANGED
@@ -1,9 +1,9 @@
1
- import { createContext, useState, useEffect, startTransition, useContext, useCallback, useRef, useMemo, createElement, useTransition, useLayoutEffect } from 'react';
1
+ import { createContext, memo, forwardRef, useState, useRef, useMemo, startTransition, useImperativeHandle, useEffect, useContext, useCallback, createElement } from 'react';
2
2
  import { DragDropManager, defaultPreset, Draggable, Feedback, Droppable } from '@dnd-kit/dom';
3
3
  export { KeyboardSensor, PointerSensor } from '@dnd-kit/dom';
4
- import { useLatest, useOnValueChange, useIsomorphicLayoutEffect, useDeepSignal, useOnElementChange, useComputed, useConstant } from '@dnd-kit/react/hooks';
4
+ import { useIsomorphicLayoutEffect, useLatest, useOnValueChange, useDeepSignal, useOnElementChange, useComputed } from '@dnd-kit/react/hooks';
5
5
  import { deepEqual, ValueHistory, derived, batch } from '@dnd-kit/state';
6
- import { jsx } from 'react/jsx-runtime';
6
+ import { jsxs, jsx } from 'react/jsx-runtime';
7
7
  import { currentValue } from '@dnd-kit/react/utilities';
8
8
  import { CollisionPriority, CollisionType } from '@dnd-kit/abstract';
9
9
 
@@ -42,41 +42,42 @@ var defaultManager = new DragDropManager();
42
42
  var DragDropContext = createContext(
43
43
  defaultManager
44
44
  );
45
- function useRenderer() {
46
- const [_, startTransition2] = useTransition();
47
- const [transitionCount, setTransitionCount] = useState(0);
48
- const rendering = useRef(null);
49
- const resolver = useRef(null);
50
- const renderer = useConstant(() => ({
51
- get rendering() {
52
- var _a2;
53
- return (_a2 = rendering.current) != null ? _a2 : Promise.resolve();
54
- }
55
- }));
56
- useOnValueChange(
57
- transitionCount,
58
- () => {
45
+ var Renderer = memo(
46
+ forwardRef(({ children }, ref) => {
47
+ const [transitionCount, setTransitionCount] = useState(0);
48
+ const rendering = useRef(null);
49
+ const resolver = useRef(null);
50
+ const renderer = useMemo(
51
+ () => ({
52
+ renderer: {
53
+ get rendering() {
54
+ var _a2;
55
+ return (_a2 = rendering.current) != null ? _a2 : Promise.resolve();
56
+ }
57
+ },
58
+ trackRendering(callback) {
59
+ if (!rendering.current) {
60
+ rendering.current = new Promise((resolve) => {
61
+ resolver.current = resolve;
62
+ });
63
+ }
64
+ startTransition(() => {
65
+ callback();
66
+ setTransitionCount((count) => count + 1);
67
+ });
68
+ }
69
+ }),
70
+ []
71
+ );
72
+ useIsomorphicLayoutEffect(() => {
59
73
  var _a2;
60
74
  (_a2 = resolver.current) == null ? void 0 : _a2.call(resolver);
61
75
  rendering.current = null;
62
- },
63
- useLayoutEffect
64
- );
65
- return {
66
- renderer,
67
- trackRendering(callback) {
68
- if (!rendering.current) {
69
- rendering.current = new Promise((resolve) => {
70
- resolver.current = resolve;
71
- });
72
- }
73
- startTransition2(() => {
74
- callback();
75
- setTransitionCount((count) => count + 1);
76
- });
77
- }
78
- };
79
- }
76
+ }, [children, transitionCount]);
77
+ useImperativeHandle(ref, () => renderer);
78
+ return null;
79
+ })
80
+ );
80
81
  var options = [void 0, deepEqual];
81
82
  function DragDropProvider(_a2) {
82
83
  var _b = _a2, {
@@ -97,10 +98,8 @@ function DragDropProvider(_a2) {
97
98
  "onDragEnd"
98
99
  ]);
99
100
  var _a3;
100
- const { renderer, trackRendering } = useRenderer();
101
- const [manager, setManager] = useState(
102
- (_a3 = input.manager) != null ? _a3 : null
103
- );
101
+ const rendererRef = useRef(null);
102
+ const [manager, setManager] = useState((_a3 = input.manager) != null ? _a3 : null);
104
103
  const { plugins, modifiers, sensors } = input;
105
104
  const handleBeforeDragStart = useLatest(onBeforeDragStart);
106
105
  const handleDragStart = useLatest(onDragStart);
@@ -110,49 +109,51 @@ function DragDropProvider(_a2) {
110
109
  const handleCollision = useLatest(onCollision);
111
110
  useEffect(() => {
112
111
  var _a4;
112
+ if (!rendererRef.current) throw new Error("Renderer not found");
113
+ const { renderer, trackRendering } = rendererRef.current;
113
114
  const manager2 = (_a4 = input.manager) != null ? _a4 : new DragDropManager(input);
114
115
  manager2.renderer = renderer;
115
- manager2.monitor.addEventListener("beforedragstart", (event, manager3) => {
116
+ manager2.monitor.addEventListener("beforedragstart", (event) => {
116
117
  const callback = handleBeforeDragStart.current;
117
118
  if (callback) {
118
- trackRendering(() => callback(event, manager3));
119
+ trackRendering(() => callback(event, manager2));
119
120
  }
120
121
  });
121
122
  manager2.monitor.addEventListener(
122
123
  "dragstart",
123
- (event, manager3) => {
124
+ (event) => {
124
125
  var _a5;
125
- return (_a5 = handleDragStart.current) == null ? void 0 : _a5.call(handleDragStart, event, manager3);
126
+ return (_a5 = handleDragStart.current) == null ? void 0 : _a5.call(handleDragStart, event, manager2);
126
127
  }
127
128
  );
128
- manager2.monitor.addEventListener("dragover", (event, manager3) => {
129
+ manager2.monitor.addEventListener("dragover", (event) => {
129
130
  const callback = handleDragOver.current;
130
131
  if (callback) {
131
- trackRendering(() => callback(event, manager3));
132
+ trackRendering(() => callback(event, manager2));
132
133
  }
133
134
  });
134
- manager2.monitor.addEventListener("dragmove", (event, manager3) => {
135
+ manager2.monitor.addEventListener("dragmove", (event) => {
135
136
  const callback = handleDragMove.current;
136
137
  if (callback) {
137
- trackRendering(() => callback(event, manager3));
138
+ trackRendering(() => callback(event, manager2));
138
139
  }
139
140
  });
140
- manager2.monitor.addEventListener("dragend", (event, manager3) => {
141
+ manager2.monitor.addEventListener("dragend", (event) => {
141
142
  const callback = handleDragEnd.current;
142
143
  if (callback) {
143
- trackRendering(() => callback(event, manager3));
144
+ trackRendering(() => callback(event, manager2));
144
145
  }
145
146
  });
146
147
  manager2.monitor.addEventListener(
147
148
  "collision",
148
- (event, manager3) => {
149
+ (event) => {
149
150
  var _a5;
150
- return (_a5 = handleCollision.current) == null ? void 0 : _a5.call(handleCollision, event, manager3);
151
+ return (_a5 = handleCollision.current) == null ? void 0 : _a5.call(handleCollision, event, manager2);
151
152
  }
152
153
  );
153
154
  startTransition(() => setManager(manager2));
154
155
  return manager2.destroy;
155
- }, [renderer, input.manager]);
156
+ }, [input.manager]);
156
157
  useOnValueChange(
157
158
  plugins,
158
159
  () => manager && (manager.plugins = plugins != null ? plugins : defaultPreset.plugins),
@@ -168,7 +169,10 @@ function DragDropProvider(_a2) {
168
169
  () => manager && (manager.modifiers = modifiers != null ? modifiers : defaultPreset.modifiers),
169
170
  ...options
170
171
  );
171
- return /* @__PURE__ */ jsx(DragDropContext.Provider, { value: manager, children });
172
+ return /* @__PURE__ */ jsxs(DragDropContext.Provider, { value: manager, children: [
173
+ /* @__PURE__ */ jsx(Renderer, { ref: rendererRef, children }),
174
+ children
175
+ ] });
172
176
  }
173
177
  function useDragDropManager() {
174
178
  return useContext(DragDropContext);
@@ -256,15 +260,20 @@ function shouldUpdateSynchronously(key, oldValue, newValue) {
256
260
  if (key === "isDragSource" && !newValue && oldValue) return true;
257
261
  return false;
258
262
  }
259
- function DragOverlay({ children, className, style, tag }) {
263
+ function DragOverlay({
264
+ children,
265
+ className,
266
+ style,
267
+ tag,
268
+ disabled
269
+ }) {
270
+ var _a2;
260
271
  const ref = useRef(null);
261
272
  const manager = useDragDropManager();
262
- const source = useComputed(
263
- () => manager == null ? void 0 : manager.dragOperation.source,
264
- [manager]
265
- ).value;
273
+ const source = (_a2 = useComputed(() => manager == null ? void 0 : manager.dragOperation.source, [manager]).value) != null ? _a2 : null;
274
+ const isDisabled = typeof disabled === "function" ? disabled(source) : disabled;
266
275
  useEffect(() => {
267
- if (!ref.current || !manager) return;
276
+ if (!ref.current || !manager || isDisabled) return;
268
277
  const feedback = manager.plugins.find(
269
278
  (plugin) => plugin instanceof Feedback
270
279
  );
@@ -273,7 +282,7 @@ function DragOverlay({ children, className, style, tag }) {
273
282
  return () => {
274
283
  feedback.overlay = void 0;
275
284
  };
276
- }, [manager]);
285
+ }, [manager, isDisabled]);
277
286
  const patchedManager = useMemo(() => {
278
287
  if (!manager) return null;
279
288
  const patchedRegistry = new Proxy(manager.registry, {
@@ -299,7 +308,7 @@ function DragOverlay({ children, className, style, tag }) {
299
308
  renderChildren()
300
309
  ) });
301
310
  function renderChildren() {
302
- if (!source) return null;
311
+ if (!source || isDisabled) return null;
303
312
  if (typeof children === "function") {
304
313
  return /* @__PURE__ */ jsx(Children, { source, children });
305
314
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dnd-kit/react",
3
- "version": "0.1.17",
3
+ "version": "0.1.18-beta-20250523142052",
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.1.17",
60
- "@dnd-kit/dom": "^0.1.17",
61
- "@dnd-kit/state": "^0.1.17",
59
+ "@dnd-kit/abstract": "0.1.18-beta-20250523142052",
60
+ "@dnd-kit/dom": "0.1.18-beta-20250523142052",
61
+ "@dnd-kit/state": "0.1.18-beta-20250523142052",
62
62
  "tslib": "^2.6.2"
63
63
  },
64
64
  "peerDependencies": {