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

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 (3) hide show
  1. package/index.cjs +41 -35
  2. package/index.js +44 -38
  3. 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,7 +99,7 @@ function DragDropProvider(_a2) {
98
99
  "onDragEnd"
99
100
  ]);
100
101
  var _a3;
101
- const { renderer, trackRendering } = useRenderer();
102
+ const rendererRef = react.useRef(null);
102
103
  const [manager, setManager] = react.useState(
103
104
  (_a3 = input.manager) != null ? _a3 : null
104
105
  );
@@ -111,6 +112,8 @@ function DragDropProvider(_a2) {
111
112
  const handleCollision = hooks.useLatest(onCollision);
112
113
  react.useEffect(() => {
113
114
  var _a4;
115
+ if (!rendererRef.current) throw new Error("Renderer not found");
116
+ const { renderer, trackRendering } = rendererRef.current;
114
117
  const manager2 = (_a4 = input.manager) != null ? _a4 : new dom.DragDropManager(input);
115
118
  manager2.renderer = renderer;
116
119
  manager2.monitor.addEventListener("beforedragstart", (event, manager3) => {
@@ -153,7 +156,7 @@ function DragDropProvider(_a2) {
153
156
  );
154
157
  react.startTransition(() => setManager(manager2));
155
158
  return manager2.destroy;
156
- }, [renderer, input.manager]);
159
+ }, [input.manager]);
157
160
  hooks.useOnValueChange(
158
161
  plugins,
159
162
  () => manager && (manager.plugins = plugins != null ? plugins : dom.defaultPreset.plugins),
@@ -169,7 +172,10 @@ function DragDropProvider(_a2) {
169
172
  () => manager && (manager.modifiers = modifiers != null ? modifiers : dom.defaultPreset.modifiers),
170
173
  ...options
171
174
  );
172
- return /* @__PURE__ */ jsxRuntime.jsx(DragDropContext.Provider, { value: manager, children });
175
+ return /* @__PURE__ */ jsxRuntime.jsxs(DragDropContext.Provider, { value: manager, children: [
176
+ /* @__PURE__ */ jsxRuntime.jsx(Renderer, { ref: rendererRef, children }),
177
+ children
178
+ ] });
173
179
  }
174
180
  function useDragDropManager() {
175
181
  return react.useContext(DragDropContext);
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,7 +98,7 @@ function DragDropProvider(_a2) {
97
98
  "onDragEnd"
98
99
  ]);
99
100
  var _a3;
100
- const { renderer, trackRendering } = useRenderer();
101
+ const rendererRef = useRef(null);
101
102
  const [manager, setManager] = useState(
102
103
  (_a3 = input.manager) != null ? _a3 : null
103
104
  );
@@ -110,6 +111,8 @@ function DragDropProvider(_a2) {
110
111
  const handleCollision = useLatest(onCollision);
111
112
  useEffect(() => {
112
113
  var _a4;
114
+ if (!rendererRef.current) throw new Error("Renderer not found");
115
+ const { renderer, trackRendering } = rendererRef.current;
113
116
  const manager2 = (_a4 = input.manager) != null ? _a4 : new DragDropManager(input);
114
117
  manager2.renderer = renderer;
115
118
  manager2.monitor.addEventListener("beforedragstart", (event, manager3) => {
@@ -152,7 +155,7 @@ function DragDropProvider(_a2) {
152
155
  );
153
156
  startTransition(() => setManager(manager2));
154
157
  return manager2.destroy;
155
- }, [renderer, input.manager]);
158
+ }, [input.manager]);
156
159
  useOnValueChange(
157
160
  plugins,
158
161
  () => manager && (manager.plugins = plugins != null ? plugins : defaultPreset.plugins),
@@ -168,7 +171,10 @@ function DragDropProvider(_a2) {
168
171
  () => manager && (manager.modifiers = modifiers != null ? modifiers : defaultPreset.modifiers),
169
172
  ...options
170
173
  );
171
- return /* @__PURE__ */ jsx(DragDropContext.Provider, { value: manager, children });
174
+ return /* @__PURE__ */ jsxs(DragDropContext.Provider, { value: manager, children: [
175
+ /* @__PURE__ */ jsx(Renderer, { ref: rendererRef, children }),
176
+ children
177
+ ] });
172
178
  }
173
179
  function useDragDropManager() {
174
180
  return useContext(DragDropContext);
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-20250523021607",
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-20250523021607",
60
+ "@dnd-kit/dom": "0.1.18-beta-20250523021607",
61
+ "@dnd-kit/state": "0.1.18-beta-20250523021607",
62
62
  "tslib": "^2.6.2"
63
63
  },
64
64
  "peerDependencies": {