@vuu-ui/vuu-utils 4.0.1 → 4.1.0

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 (40) hide show
  1. package/package.json +7 -7
  2. package/src/vendor/@dnd-kit/abstract/index.d.ts +114 -32
  3. package/src/vendor/@dnd-kit/abstract/index.js +430 -280
  4. package/src/vendor/@dnd-kit/abstract/index.js.map +1 -1
  5. package/src/vendor/@dnd-kit/abstract/modifiers.d.ts +7 -7
  6. package/src/vendor/@dnd-kit/abstract/modifiers.js.map +1 -1
  7. package/src/vendor/@dnd-kit/abstract/package.json +8 -3
  8. package/src/vendor/@dnd-kit/collision/dist/index.js +10 -3
  9. package/src/vendor/@dnd-kit/collision/package.json +8 -3
  10. package/src/vendor/@dnd-kit/dom/index.d.ts +225 -126
  11. package/src/vendor/@dnd-kit/dom/index.js +998 -484
  12. package/src/vendor/@dnd-kit/dom/index.js.map +1 -1
  13. package/src/vendor/@dnd-kit/dom/modifiers.d.ts +1 -1
  14. package/src/vendor/@dnd-kit/dom/package.json +11 -5
  15. package/src/vendor/@dnd-kit/dom/plugins/debug.js +10 -7
  16. package/src/vendor/@dnd-kit/dom/plugins/debug.js.map +1 -1
  17. package/src/vendor/@dnd-kit/dom/sortable.d.ts +45 -11
  18. package/src/vendor/@dnd-kit/dom/sortable.js +203 -54
  19. package/src/vendor/@dnd-kit/dom/sortable.js.map +1 -1
  20. package/src/vendor/@dnd-kit/dom/utilities.d.ts +82 -10
  21. package/src/vendor/@dnd-kit/dom/utilities.js +249 -95
  22. package/src/vendor/@dnd-kit/dom/utilities.js.map +1 -1
  23. package/src/vendor/@dnd-kit/geometry/package.json +7 -2
  24. package/src/vendor/@dnd-kit/react/hooks.js +61 -38
  25. package/src/vendor/@dnd-kit/react/hooks.js.map +1 -0
  26. package/src/vendor/@dnd-kit/react/index.d.ts +18 -9
  27. package/src/vendor/@dnd-kit/react/index.js +100 -59
  28. package/src/vendor/@dnd-kit/react/index.js.map +1 -0
  29. package/src/vendor/@dnd-kit/react/package.json +17 -5
  30. package/src/vendor/@dnd-kit/react/sortable.d.ts +1 -1
  31. package/src/vendor/@dnd-kit/react/sortable.js +24 -10
  32. package/src/vendor/@dnd-kit/react/sortable.js.map +1 -0
  33. package/src/vendor/@dnd-kit/react/utilities.js.map +1 -0
  34. package/src/vendor/@dnd-kit/state/dist/index.js +1 -1
  35. package/src/vendor/@dnd-kit/state/package.json +6 -1
  36. package/src/vendor/@preact/signals-core/dist/signals-core.js +1 -1
  37. package/src/vendor/@preact/signals-core/dist/signals-core.js.map +1 -1
  38. package/types/ThemeProvider.d.ts +1 -1
  39. package/types/context-definitions/DataProvider.d.ts +1 -1
  40. package/types/context-definitions/DataSourceProvider.d.ts +1 -1
@@ -1,5 +1,5 @@
1
1
  import { useLayoutEffect, useEffect, useRef, useMemo, useState, useCallback } from 'react';
2
- import { computed, effect, untracked } from '../state/dist/index.js';
2
+ import { computed, signal, effect, untracked } from '../state/dist/index.js';
3
3
  import { flushSync } from 'react-dom';
4
4
  import { currentValue } from './utilities.js';
5
5
 
@@ -20,14 +20,14 @@ function useForceUpdate() {
20
20
  }
21
21
 
22
22
  // src/hooks/useSignal.ts
23
- function useSignal(signal, sync = false) {
24
- const previous = useRef(signal.peek());
23
+ function useSignal(signal2, sync = false) {
24
+ const previous = useRef(signal2.peek());
25
25
  const read = useRef(false);
26
26
  const forceUpdate = useForceUpdate();
27
27
  useIsomorphicLayoutEffect(
28
28
  () => effect(() => {
29
29
  const previousValue = previous.current;
30
- const currentValue2 = signal.value;
30
+ const currentValue2 = signal2.value;
31
31
  if (previousValue !== currentValue2) {
32
32
  previous.current = currentValue2;
33
33
  if (!read.current) return;
@@ -38,12 +38,12 @@ function useSignal(signal, sync = false) {
38
38
  }
39
39
  }
40
40
  }),
41
- [signal, sync, forceUpdate]
41
+ [signal2, sync, forceUpdate]
42
42
  );
43
43
  return {
44
44
  get value() {
45
45
  read.current = true;
46
- return signal.peek();
46
+ return signal2.peek();
47
47
  }
48
48
  };
49
49
  }
@@ -57,56 +57,79 @@ function useComputed(compute, dependencies = [], sync = false) {
57
57
  sync
58
58
  );
59
59
  }
60
+ function useLatest(value) {
61
+ const valueRef = useRef(value);
62
+ useIsomorphicLayoutEffect(() => {
63
+ valueRef.current = value;
64
+ }, [value]);
65
+ return valueRef;
66
+ }
67
+
68
+ // src/hooks/useDeepSignal.ts
60
69
  function useDeepSignal(target, synchronous) {
61
- const tracked = useRef(/* @__PURE__ */ new Map());
62
70
  const forceUpdate = useForceUpdate();
71
+ const synchronousRef = useLatest(synchronous);
72
+ const tracker = useMemo(() => {
73
+ const tracked = /* @__PURE__ */ new Map();
74
+ return {
75
+ tracked,
76
+ propertyCount: signal(0),
77
+ active: false,
78
+ proxy: target ? new Proxy(target, {
79
+ get(target2, key) {
80
+ const value = target2[key];
81
+ if (!tracked.has(key)) tracked.set(key, value);
82
+ return value;
83
+ }
84
+ }) : target
85
+ };
86
+ }, [target]);
63
87
  useIsomorphicLayoutEffect(() => {
64
- if (!target) {
65
- tracked.current.clear();
66
- return;
67
- }
68
- return effect(() => {
69
- var _a;
88
+ tracker.propertyCount.value = tracker.tracked.size;
89
+ });
90
+ useIsomorphicLayoutEffect(() => {
91
+ if (!target) return;
92
+ const { tracked, propertyCount } = tracker;
93
+ tracker.active = true;
94
+ const dispose = effect(() => {
95
+ propertyCount.value;
70
96
  let stale = false;
71
97
  let sync = false;
72
- for (const entry of tracked.current) {
73
- const [key] = entry;
74
- const value = untracked(() => entry[1]);
98
+ for (const [key, value] of tracked) {
75
99
  const latestValue = target[key];
76
- if (value !== latestValue) {
100
+ if (!Object.is(value, latestValue)) {
77
101
  stale = true;
78
- tracked.current.set(key, latestValue);
79
- sync = (_a = synchronous == null ? void 0 : synchronous(key, value, latestValue)) != null ? _a : false;
102
+ tracked.set(key, latestValue);
103
+ sync = untracked(
104
+ () => {
105
+ var _a;
106
+ return (_a = synchronousRef.current) == null ? void 0 : _a.call(synchronousRef, key, value, latestValue);
107
+ }
108
+ ) === true || sync;
80
109
  }
81
110
  }
82
111
  if (stale) {
83
- sync ? flushSync(forceUpdate) : forceUpdate();
112
+ if (sync) {
113
+ queueMicrotask(() => {
114
+ if (tracker.active) flushSync(forceUpdate);
115
+ });
116
+ } else {
117
+ forceUpdate();
118
+ }
84
119
  }
85
120
  });
86
- }, [target]);
87
- return useMemo(
88
- () => target ? new Proxy(target, {
89
- get(target2, key) {
90
- const value = target2[key];
91
- tracked.current.set(key, value);
92
- return value;
93
- }
94
- }) : target,
95
- [target]
96
- );
121
+ return () => {
122
+ tracker.active = false;
123
+ dispose();
124
+ };
125
+ }, [target, tracker, forceUpdate, synchronousRef]);
126
+ return tracker.proxy;
97
127
  }
98
128
 
99
129
  // src/hooks/useImmediateEffect.ts
100
130
  function useImmediateEffect(callback, _) {
101
131
  callback();
102
132
  }
103
- function useLatest(value) {
104
- const valueRef = useRef(value);
105
- useIsomorphicLayoutEffect(() => {
106
- valueRef.current = value;
107
- }, [value]);
108
- return valueRef;
109
- }
110
133
  function useOnValueChange(value, onChange, effect3 = useEffect, compare = Object.is) {
111
134
  const tracked = useRef(value);
112
135
  effect3(() => {
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["src/hooks/useConstant.ts","src/hooks/useIsomorphicLayoutEffect.ts","src/hooks/useForceUpdate.ts","src/hooks/useSignal.ts","src/hooks/useComputed.ts","src/hooks/useLatest.ts","src/hooks/useDeepSignal.ts","src/hooks/useImmediateEffect.ts","src/hooks/useOnValueChange.ts","src/hooks/useOnElementChange.ts"],"names":["signal","useRef","currentValue","useMemo","target","effect","flushSync","useEffect"],"mappings":"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","file":"hooks.js","sourcesContent":["import {type MutableRefObject, useRef} from 'react';\n\nexport function useConstant<T = any>(initializer: () => T) {\n const ref = useRef<T>(null) as MutableRefObject<T>;\n\n if (!ref.current) {\n ref.current = initializer();\n }\n\n return ref.current;\n}\n","import {useEffect, useLayoutEffect} from 'react';\n\n// https://github.com/facebook/react/blob/master/packages/shared/ExecutionEnvironment.js\nexport const canUseDOM =\n typeof window !== 'undefined' &&\n typeof window.document !== 'undefined' &&\n typeof window.document.createElement !== 'undefined';\n\n/**\n * A hook that resolves to useEffect on the server and useLayoutEffect on the client\n * @param callback {function} Callback function that is invoked when the dependencies of the hook change\n */\nexport const useIsomorphicLayoutEffect = canUseDOM\n ? useLayoutEffect\n : useEffect;\n","import {useCallback, useState} from 'react';\n\nexport function useForceUpdate() {\n const setState = useState(0)[1];\n\n return useCallback(() => {\n setState((value) => value + 1);\n }, [setState]);\n}\n","import {useRef, useState} from 'react';\nimport {flushSync} from 'react-dom';\nimport {effect, Signal} from '@dnd-kit/state';\n\nimport {useIsomorphicLayoutEffect} from './useIsomorphicLayoutEffect.ts';\nimport {useForceUpdate} from './useForceUpdate.ts';\n\n/** Trigger a re-render when reading a signal. */\nexport function useSignal<T = any>(signal: Signal<T>, sync = false) {\n const previous = useRef(signal.peek());\n const read = useRef(false);\n const forceUpdate = useForceUpdate();\n\n useIsomorphicLayoutEffect(\n () =>\n effect(() => {\n const previousValue = previous.current;\n const currentValue = signal.value;\n\n if (previousValue !== currentValue) {\n previous.current = currentValue;\n\n if (!read.current) return;\n\n if (sync) {\n flushSync(forceUpdate);\n } else {\n forceUpdate();\n }\n }\n }),\n [signal, sync, forceUpdate]\n );\n\n return {\n get value() {\n read.current = true;\n\n return signal.peek();\n },\n };\n}\n","import {useMemo, useRef} from 'react';\nimport {computed} from '@dnd-kit/state';\n\nimport {useSignal} from './useSignal.ts';\n\nexport function useComputed<T = any>(\n compute: () => T,\n dependencies: any[] = [],\n sync = false\n) {\n const $compute = useRef(compute);\n $compute.current = compute;\n\n return useSignal(\n useMemo(() => computed(() => $compute.current()), dependencies),\n sync\n );\n}\n","import {useRef} from 'react';\n\nimport {useIsomorphicLayoutEffect} from './useIsomorphicLayoutEffect.ts';\n\nexport function useLatest<T>(value: T) {\n const valueRef = useRef<T | undefined>(value);\n\n useIsomorphicLayoutEffect(() => {\n valueRef.current = value;\n }, [value]);\n\n return valueRef;\n}\n","import {useMemo} from 'react';\nimport {flushSync} from 'react-dom';\nimport {effect, signal, untracked} from '@dnd-kit/state';\n\nimport {useIsomorphicLayoutEffect} from './useIsomorphicLayoutEffect.ts';\nimport {useForceUpdate} from './useForceUpdate.ts';\nimport {useLatest} from './useLatest.ts';\n\n/** Trigger a re-render when reading signal properties of an object. */\nexport function useDeepSignal<T extends object | null | undefined>(\n target: T,\n synchronous?: (property: keyof T, oldValue: any, newValue: any) => boolean\n): T {\n const forceUpdate = useForceUpdate();\n const synchronousRef = useLatest(synchronous);\n const tracker = useMemo(() => {\n const tracked = new Map<string | symbol, any>();\n\n return {\n tracked,\n propertyCount: signal(0),\n active: false,\n proxy: target\n ? new Proxy(target, {\n get(target, key) {\n const value = (target as any)[key];\n\n // Reads must not overwrite the observer's comparison baseline.\n if (!tracked.has(key)) tracked.set(key, value);\n\n return value;\n },\n })\n : target,\n };\n }, [target]);\n\n // Publish newly read properties after commit, without notifying from render.\n // The map only grows for a given target, so its size versions the key set.\n useIsomorphicLayoutEffect(() => {\n tracker.propertyCount.value = tracker.tracked.size;\n });\n\n useIsomorphicLayoutEffect(() => {\n if (!target) return;\n\n const {tracked, propertyCount} = tracker;\n tracker.active = true;\n const dispose = effect(() => {\n // Keep the effect alive, but refresh its dependencies for late reads.\n propertyCount.value;\n\n let stale = false;\n let sync = false;\n\n for (const [key, value] of tracked) {\n const latestValue = (target as any)[key];\n\n if (!Object.is(value, latestValue)) {\n stale = true;\n tracked.set(key, latestValue);\n sync =\n untracked(() =>\n synchronousRef.current?.(key as keyof T, value, latestValue)\n ) === true || sync;\n }\n }\n\n if (stale) {\n if (sync) {\n // Signal updates can originate in a React lifecycle method.\n queueMicrotask(() => {\n if (tracker.active) flushSync(forceUpdate);\n });\n } else {\n forceUpdate();\n }\n }\n });\n\n return () => {\n tracker.active = false;\n dispose();\n };\n }, [target, tracker, forceUpdate, synchronousRef]);\n\n return tracker.proxy;\n}\n","import type {DependencyList, EffectCallback} from 'react';\n\nexport function useImmediateEffect(\n callback: EffectCallback,\n _?: DependencyList\n) {\n callback();\n}\n","import {useRef, useEffect} from 'react';\n\nexport function useOnValueChange<T>(\n value: T,\n onChange: (value: T, oldValue: T) => void,\n effect = useEffect,\n compare = Object.is\n) {\n const tracked = useRef<T>(value);\n\n effect(() => {\n const oldValue = tracked.current;\n\n if (!compare(value, oldValue)) {\n tracked.current = value;\n onChange(value, oldValue);\n }\n }, [onChange, value]);\n}\n","import {useRef} from 'react';\nimport {currentValue, type RefOrValue} from '@dnd-kit/react/utilities';\n\nimport {useIsomorphicLayoutEffect} from './useIsomorphicLayoutEffect.ts';\n\nexport function useOnElementChange(\n value: RefOrValue<Element>,\n onChange: (value: Element | undefined) => void\n) {\n const previous = useRef(currentValue(value));\n\n useIsomorphicLayoutEffect(() => {\n const current = currentValue(value);\n\n if (current !== previous.current) {\n previous.current = current;\n onChange(current);\n }\n });\n}\n"]}
@@ -1,11 +1,11 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { PropsWithChildren, RefObject, MutableRefObject, ReactNode } from 'react';
3
- import { Data, DragDropEvents, DragDropManager as DragDropManager$1 } from '@dnd-kit/abstract';
4
- import { Draggable, Droppable, DragDropManager, DragDropManagerInput, DraggableInput, DroppableInput } from '@dnd-kit/dom';
5
- export { DragDropManager, KeyboardSensor, PointerSensor } from '@dnd-kit/dom';
3
+ import { Data, DragDropEventHandlers, DragDropManager as DragDropManager$1 } from '@dnd-kit/abstract';
4
+ import { Draggable, Droppable, DragDropManager, DragDropManagerInput, DraggableInput, DropAnimation, DroppableInput } from '@dnd-kit/dom';
5
+ export { BeforeDragStartEvent, CollisionEvent, DragDropManager, DragEndEvent, DragMoveEvent, DragOverEvent, DragStartEvent, KeyboardSensor, PointerSensor } from '@dnd-kit/dom';
6
6
  import { CleanupFunction } from '@dnd-kit/state';
7
7
 
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>;
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>> = DragDropEventHandlers<U, V, W>;
9
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
10
  manager?: W;
11
11
  onBeforeDragStart?: Events$1<T, U, V, W>['beforedragstart'];
@@ -36,11 +36,20 @@ declare function useDraggable<T extends Data = Data>(input: UseDraggableInput<T>
36
36
  interface Props<T extends Data, U extends Draggable<T>> {
37
37
  className?: string;
38
38
  children: ReactNode | ((source: U) => ReactNode);
39
+ /**
40
+ * Customize or disable the drop animation that plays when a drag operation ends.
41
+ *
42
+ * - `undefined` – use the default animation (250ms ease)
43
+ * - `null` – disable the drop animation entirely
44
+ * - `{duration, easing}` – customize the animation timing
45
+ * - `(context) => Promise<void> | void` – provide a fully custom animation function
46
+ */
47
+ dropAnimation?: DropAnimation | null;
39
48
  style?: React.CSSProperties;
40
49
  tag?: string;
41
50
  disabled?: boolean | ((source: U | null) => boolean);
42
51
  }
43
- declare function DragOverlay<T extends Data, U extends Draggable<T>>({ children, className, style, tag, disabled, }: Props<T, U>): react_jsx_runtime.JSX.Element;
52
+ declare function DragOverlay<T extends Data, U extends Draggable<T>>({ children, className, dropAnimation, style, tag, disabled, }: Props<T, U>): react_jsx_runtime.JSX.Element;
44
53
 
45
54
  interface UseDroppableInput<T extends Data = Data> extends Omit<DroppableInput<T>, 'element'> {
46
55
  element?: RefOrValue<Element>;
@@ -53,14 +62,14 @@ declare function useDroppable<T extends Data = Data>(input: UseDroppableInput<T>
53
62
 
54
63
  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;
55
64
 
56
- type DragDropEventMap = {
65
+ type EventNameOverrides = {
57
66
  beforedragstart: 'onBeforeDragStart';
58
67
  };
59
- type EventHandlerName<T extends string> = T extends keyof DragDropEventMap ? DragDropEventMap[T] : T extends `drag${infer Second}${infer Rest}` ? `onDrag${Uppercase<Second>}${Rest}` : `on${Capitalize<T>}`;
68
+ type EventHandlerName<T extends string> = T extends keyof EventNameOverrides ? EventNameOverrides[T] : T extends `drag${infer Second}${infer Rest}` ? `onDrag${Uppercase<Second>}${Rest}` : `on${Capitalize<T>}`;
60
69
  /**
61
70
  * Type for all possible event handlers
62
71
  */
63
- type Events<T extends Data, U extends Draggable<T>, V extends Droppable<T>, W extends DragDropManager<T, U, V>> = DragDropEvents<U, V, W>;
72
+ type Events<T extends Data, U extends Draggable<T>, V extends Droppable<T>, W extends DragDropManager<T, U, V>> = DragDropEventHandlers<U, V, W>;
64
73
  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
74
  [K in keyof Events<T, U, V, W> as EventHandlerName<K>]: Events<T, U, V, W>[K];
66
75
  };
@@ -81,4 +90,4 @@ interface Instance<T extends DragDropManager$1<any, any> = DragDropManager$1<any
81
90
  }
82
91
  declare function useInstance<T extends Instance>(initializer: (manager: DragDropManager$1<any, any> | undefined) => T): T;
83
92
 
84
- export { type EventHandlers as DragDropEventHandlers, type Events$1 as DragDropEvents, DragDropProvider, DragOverlay, type UseDraggableInput, type UseDroppableInput, useDragDropManager, useDragDropMonitor, useDragOperation, useDraggable, useDroppable, useInstance };
93
+ export { type EventHandlers as DragDropEventHandlers, DragDropProvider, DragOverlay, type UseDraggableInput, type UseDroppableInput, useDragDropManager, useDragDropMonitor, useDragOperation, useDraggable, useDroppable, useInstance };
@@ -1,5 +1,5 @@
1
- import { createContext, memo, forwardRef, useState, useRef, useMemo, startTransition, useImperativeHandle, useEffect, useContext, useCallback, createElement } from 'react';
2
- import { DragDropManager, defaultPreset, Draggable, Feedback, Droppable } from '../dom/index.js';
1
+ import { createContext, memo, forwardRef, useState, useRef, useMemo, startTransition, useImperativeHandle, useEffect, useInsertionEffect, useContext, useCallback, createElement } from 'react';
2
+ import { DragDropManager, resolveCustomizable, defaultPreset, Draggable, Feedback, Droppable } from '../dom/index.js';
3
3
  export { KeyboardSensor, PointerSensor } from '../dom/index.js';
4
4
  import { useIsomorphicLayoutEffect, useLatest, useOnValueChange, useDeepSignal, useOnElementChange, useComputed } from './hooks.js';
5
5
  import { deepEqual, ValueHistory, derived, batch } from '../state/dist/index.js';
@@ -97,76 +97,88 @@ function DragDropProvider(_a2) {
97
97
  "onDragOver",
98
98
  "onDragEnd"
99
99
  ]);
100
- var _a3;
101
100
  const rendererRef = useRef(null);
102
- const [manager, setManager] = useState((_a3 = input.manager) != null ? _a3 : null);
103
- const { plugins, modifiers, sensors } = input;
101
+ const {
102
+ plugins: pluginsInput,
103
+ modifiers: modifiersInput,
104
+ sensors: sensorsInput
105
+ } = input;
106
+ const plugins = resolveCustomizable(pluginsInput, defaultPreset.plugins);
107
+ const sensors = resolveCustomizable(sensorsInput, defaultPreset.sensors);
108
+ const modifiers = resolveCustomizable(
109
+ modifiersInput,
110
+ defaultPreset.modifiers
111
+ );
104
112
  const handleBeforeDragStart = useLatest(onBeforeDragStart);
105
113
  const handleDragStart = useLatest(onDragStart);
106
114
  const handleDragOver = useLatest(onDragOver);
107
115
  const handleDragMove = useLatest(onDragMove);
108
116
  const handleDragEnd = useLatest(onDragEnd);
109
117
  const handleCollision = useLatest(onCollision);
118
+ const manager = useStableInstance(() => {
119
+ var _a3;
120
+ return (_a3 = input.manager) != null ? _a3 : new DragDropManager(input);
121
+ });
110
122
  useEffect(() => {
111
- var _a4;
112
123
  if (!rendererRef.current) throw new Error("Renderer not found");
113
124
  const { renderer, trackRendering } = rendererRef.current;
114
- const manager2 = (_a4 = input.manager) != null ? _a4 : new DragDropManager(input);
115
- manager2.renderer = renderer;
116
- manager2.monitor.addEventListener("beforedragstart", (event) => {
117
- const callback = handleBeforeDragStart.current;
118
- if (callback) {
119
- trackRendering(() => callback(event, manager2));
120
- }
121
- });
122
- manager2.monitor.addEventListener(
123
- "dragstart",
124
- (event) => {
125
- var _a5;
126
- return (_a5 = handleDragStart.current) == null ? void 0 : _a5.call(handleDragStart, event, manager2);
127
- }
128
- );
129
- manager2.monitor.addEventListener("dragover", (event) => {
130
- const callback = handleDragOver.current;
131
- if (callback) {
132
- trackRendering(() => callback(event, manager2));
133
- }
134
- });
135
- manager2.monitor.addEventListener("dragmove", (event) => {
136
- const callback = handleDragMove.current;
137
- if (callback) {
138
- trackRendering(() => callback(event, manager2));
139
- }
140
- });
141
- manager2.monitor.addEventListener("dragend", (event) => {
142
- const callback = handleDragEnd.current;
143
- if (callback) {
144
- trackRendering(() => callback(event, manager2));
145
- }
146
- });
147
- manager2.monitor.addEventListener(
148
- "collision",
149
- (event) => {
150
- var _a5;
151
- return (_a5 = handleCollision.current) == null ? void 0 : _a5.call(handleCollision, event, manager2);
152
- }
153
- );
154
- startTransition(() => setManager(manager2));
155
- return manager2.destroy;
156
- }, [input.manager]);
125
+ const { monitor } = manager;
126
+ manager.renderer = renderer;
127
+ const listeners = [
128
+ monitor.addEventListener("beforedragstart", (event) => {
129
+ const callback = handleBeforeDragStart.current;
130
+ if (callback) {
131
+ trackRendering(() => callback(event, manager));
132
+ }
133
+ }),
134
+ monitor.addEventListener(
135
+ "dragstart",
136
+ (event) => {
137
+ var _a3;
138
+ return (_a3 = handleDragStart.current) == null ? void 0 : _a3.call(handleDragStart, event, manager);
139
+ }
140
+ ),
141
+ monitor.addEventListener("dragover", (event) => {
142
+ const callback = handleDragOver.current;
143
+ if (callback) {
144
+ trackRendering(() => callback(event, manager));
145
+ }
146
+ }),
147
+ monitor.addEventListener("dragmove", (event) => {
148
+ const callback = handleDragMove.current;
149
+ if (callback) {
150
+ trackRendering(() => callback(event, manager));
151
+ }
152
+ }),
153
+ monitor.addEventListener("dragend", (event) => {
154
+ const callback = handleDragEnd.current;
155
+ if (callback) {
156
+ trackRendering(() => callback(event, manager));
157
+ }
158
+ }),
159
+ monitor.addEventListener(
160
+ "collision",
161
+ (event) => {
162
+ var _a3;
163
+ return (_a3 = handleCollision.current) == null ? void 0 : _a3.call(handleCollision, event, manager);
164
+ }
165
+ )
166
+ ];
167
+ return () => listeners.forEach((dispose) => dispose());
168
+ }, [manager]);
157
169
  useOnValueChange(
158
170
  plugins,
159
- () => manager && (manager.plugins = plugins != null ? plugins : defaultPreset.plugins),
171
+ () => manager && (manager.plugins = plugins),
160
172
  ...options
161
173
  );
162
174
  useOnValueChange(
163
175
  sensors,
164
- () => manager && (manager.sensors = sensors != null ? sensors : defaultPreset.sensors),
176
+ () => manager && (manager.sensors = sensors),
165
177
  ...options
166
178
  );
167
179
  useOnValueChange(
168
180
  modifiers,
169
- () => manager && (manager.modifiers = modifiers != null ? modifiers : defaultPreset.modifiers),
181
+ () => manager && (manager.modifiers = modifiers),
170
182
  ...options
171
183
  );
172
184
  return /* @__PURE__ */ jsxs(DragDropContext.Provider, { value: manager, children: [
@@ -174,6 +186,19 @@ function DragDropProvider(_a2) {
174
186
  children
175
187
  ] });
176
188
  }
189
+ function useStableInstance(create) {
190
+ const ref = useRef(null);
191
+ if (!ref.current) {
192
+ ref.current = create();
193
+ }
194
+ useInsertionEffect(() => {
195
+ return () => {
196
+ var _a2;
197
+ return (_a2 = ref.current) == null ? void 0 : _a2.destroy();
198
+ };
199
+ }, []);
200
+ return ref.current;
201
+ }
177
202
  function useDragDropManager() {
178
203
  return useContext(DragDropContext);
179
204
  }
@@ -192,7 +217,7 @@ function useInstance(initializer) {
192
217
 
193
218
  // src/core/draggable/useDraggable.ts
194
219
  function useDraggable(input) {
195
- const { disabled, data, element, handle, id, modifiers, sensors } = input;
220
+ const { disabled, data, element, handle, id, modifiers, sensors, plugins } = input;
196
221
  const draggable = useInstance(
197
222
  (manager) => new Draggable(
198
223
  __spreadProps(__spreadValues({}, input), {
@@ -209,7 +234,12 @@ function useDraggable(input) {
209
234
  useOnElementChange(element, (element2) => draggable.element = element2);
210
235
  useOnValueChange(data, () => data && (draggable.data = data));
211
236
  useOnValueChange(disabled, () => draggable.disabled = disabled === true);
212
- useOnValueChange(sensors, () => draggable.sensors = sensors);
237
+ useOnValueChange(
238
+ sensors,
239
+ () => draggable.sensors = sensors,
240
+ void 0,
241
+ deepEqual
242
+ );
213
243
  useOnValueChange(
214
244
  modifiers,
215
245
  () => draggable.modifiers = modifiers,
@@ -217,11 +247,10 @@ function useDraggable(input) {
217
247
  deepEqual
218
248
  );
219
249
  useOnValueChange(
220
- input.feedback,
221
- () => {
222
- var _a2;
223
- return draggable.feedback = (_a2 = input.feedback) != null ? _a2 : "default";
224
- }
250
+ plugins,
251
+ () => draggable.plugins = plugins,
252
+ void 0,
253
+ deepEqual
225
254
  );
226
255
  useOnValueChange(
227
256
  input.alignment,
@@ -263,6 +292,7 @@ function shouldUpdateSynchronously(key, oldValue, newValue) {
263
292
  function DragOverlay({
264
293
  children,
265
294
  className,
295
+ dropAnimation,
266
296
  style,
267
297
  tag,
268
298
  disabled
@@ -283,6 +313,17 @@ function DragOverlay({
283
313
  feedback.overlay = void 0;
284
314
  };
285
315
  }, [manager, isDisabled]);
316
+ useEffect(() => {
317
+ if (!manager) return;
318
+ const feedback = manager.plugins.find(
319
+ (plugin) => plugin instanceof Feedback
320
+ );
321
+ if (!feedback) return;
322
+ feedback.dropAnimation = dropAnimation;
323
+ return () => {
324
+ feedback.dropAnimation = void 0;
325
+ };
326
+ }, [manager, dropAnimation]);
286
327
  const patchedManager = useMemo(() => {
287
328
  if (!manager) return null;
288
329
  const patchedRegistry = new Proxy(manager.registry, {
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["src/core/context/context.ts","src/core/context/renderer.ts","src/core/context/DragDropProvider.tsx","src/core/hooks/useDragDropManager.ts","src/core/hooks/useInstance.ts","src/core/draggable/useDraggable.ts","src/core/draggable/DragOverlay.tsx","../geometry/dist/index.mjs","../collision/dist/index.js","src/core/droppable/useDroppable.ts","src/core/hooks/useDragDropMonitor.ts","src/core/hooks/useDragOperation.ts"],"names":["_a","useRef","DragDropManager","useState","useIsomorphicLayoutEffect","useOnValueChange","handle","element","deepEqual","useEffect","useMemo","jsx","useDeepSignal","__defProp","__defNormalProp","CollisionType2","CollisionPriority2","currentValue","useOnElementChange","useCallback","useComputed"],"mappings":"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","file":"index.js","sourcesContent":["'use client';\n\nimport {createContext} from 'react';\nimport {DragDropManager} from '@dnd-kit/dom';\n\nexport const defaultManager = new DragDropManager();\n\nexport const DragDropContext = createContext<DragDropManager | null>(\n defaultManager\n);\n","import {\n forwardRef,\n memo,\n startTransition,\n useImperativeHandle,\n useState,\n useRef,\n useMemo,\n} from 'react';\nimport type {Renderer as AbstractRenderer} from '@dnd-kit/abstract';\nimport {useIsomorphicLayoutEffect} from '@dnd-kit/react/hooks';\n\nexport type ReactRenderer = {\n renderer: AbstractRenderer;\n trackRendering: (callback: () => void) => void;\n};\n\nexport const Renderer = memo(\n forwardRef<ReactRenderer, {children: React.ReactNode}>(({children}, ref) => {\n const [transitionCount, setTransitionCount] = useState(0);\n const rendering = useRef<Promise<void> | null>(null);\n const resolver = useRef<(() => void) | null>(null);\n const renderer = useMemo<ReactRenderer>(\n () => ({\n renderer: {\n get rendering() {\n return rendering.current ?? Promise.resolve();\n },\n },\n trackRendering(callback: () => void) {\n if (!rendering.current) {\n rendering.current = new Promise<void>((resolve) => {\n resolver.current = resolve;\n });\n }\n\n startTransition(() => {\n callback();\n setTransitionCount((count) => count + 1);\n });\n },\n }),\n []\n );\n\n useIsomorphicLayoutEffect(() => {\n resolver.current?.();\n rendering.current = null;\n }, [children, transitionCount]);\n\n useImperativeHandle(ref, () => renderer);\n\n return null;\n })\n);\n","'use client';\n\nimport {\n useEffect,\n useRef,\n useInsertionEffect,\n type PropsWithChildren,\n} from 'react';\nimport type {Data, DragDropEventHandlers} from '@dnd-kit/abstract';\nimport {\n DragDropManager,\n defaultPreset,\n resolveCustomizable,\n} from '@dnd-kit/dom';\nimport type {DragDropManagerInput, Draggable, Droppable} from '@dnd-kit/dom';\nimport {useLatest, useOnValueChange} from '@dnd-kit/react/hooks';\nimport {deepEqual} from '@dnd-kit/state';\n\nimport {DragDropContext} from './context.ts';\nimport {Renderer, type ReactRenderer} from './renderer.ts';\n\nexport type Events<\n T extends Data = Data,\n U extends Draggable<T> = Draggable<T>,\n V extends Droppable<T> = Droppable<T>,\n W extends DragDropManager<T, U, V> = DragDropManager<T, U, V>,\n> = DragDropEventHandlers<U, V, W>;\n\nexport interface Props<\n T extends Data = Data,\n U extends Draggable<T> = Draggable<T>,\n V extends Droppable<T> = Droppable<T>,\n W extends DragDropManager<T, U, V> = DragDropManager<T, U, V>,\n> extends DragDropManagerInput,\n PropsWithChildren {\n manager?: W;\n onBeforeDragStart?: Events<T, U, V, W>['beforedragstart'];\n onCollision?: Events<T, U, V, W>['collision'];\n onDragStart?: Events<T, U, V, W>['dragstart'];\n onDragMove?: Events<T, U, V, W>['dragmove'];\n onDragOver?: Events<T, U, V, W>['dragover'];\n onDragEnd?: Events<T, U, V, W>['dragend'];\n}\n\nconst options = [undefined, deepEqual] as const;\n\nexport function DragDropProvider<\n T extends Data = Data,\n U extends Draggable<T> = Draggable<T>,\n V extends Droppable<T> = Droppable<T>,\n W extends DragDropManager<T, U, V> = DragDropManager<T, U, V>,\n>({\n children,\n onCollision,\n onBeforeDragStart,\n onDragStart,\n onDragMove,\n onDragOver,\n onDragEnd,\n ...input\n}: Props<T, U, V, W>) {\n const rendererRef = useRef<ReactRenderer | null>(null);\n const {\n plugins: pluginsInput,\n modifiers: modifiersInput,\n sensors: sensorsInput,\n } = input;\n const plugins = resolveCustomizable(pluginsInput, defaultPreset.plugins);\n const sensors = resolveCustomizable(sensorsInput, defaultPreset.sensors);\n const modifiers = resolveCustomizable(\n modifiersInput,\n defaultPreset.modifiers\n );\n const handleBeforeDragStart = useLatest(onBeforeDragStart);\n const handleDragStart = useLatest(onDragStart);\n const handleDragOver = useLatest(onDragOver);\n const handleDragMove = useLatest(onDragMove);\n const handleDragEnd = useLatest(onDragEnd);\n const handleCollision = useLatest(onCollision);\n const manager = useStableInstance<W>(() => {\n return input.manager ?? (new DragDropManager<T, U, V>(input) as W);\n });\n\n useEffect(() => {\n if (!rendererRef.current) throw new Error('Renderer not found');\n\n const {renderer, trackRendering} = rendererRef.current;\n const {monitor} = manager;\n\n manager.renderer = renderer;\n\n const listeners = [\n monitor.addEventListener('beforedragstart', (event) => {\n const callback = handleBeforeDragStart.current;\n\n if (callback) {\n trackRendering(() => callback(event, manager));\n }\n }),\n monitor.addEventListener('dragstart', (event) =>\n handleDragStart.current?.(event, manager)\n ),\n monitor.addEventListener('dragover', (event) => {\n const callback = handleDragOver.current;\n\n if (callback) {\n trackRendering(() => callback(event, manager));\n }\n }),\n monitor.addEventListener('dragmove', (event) => {\n const callback = handleDragMove.current;\n\n if (callback) {\n trackRendering(() => callback(event, manager));\n }\n }),\n monitor.addEventListener('dragend', (event) => {\n const callback = handleDragEnd.current;\n\n if (callback) {\n trackRendering(() => callback(event, manager));\n }\n }),\n monitor.addEventListener('collision', (event) =>\n handleCollision.current?.(event, manager)\n ),\n ];\n\n return () => listeners.forEach((dispose) => dispose());\n }, [manager]);\n\n useOnValueChange(\n plugins,\n () => manager && (manager.plugins = plugins),\n ...options\n );\n useOnValueChange(\n sensors,\n () => manager && (manager.sensors = sensors),\n ...options\n );\n useOnValueChange(\n modifiers,\n () => manager && (manager.modifiers = modifiers),\n ...options\n );\n\n return (\n <DragDropContext.Provider value={manager as any}>\n <Renderer ref={rendererRef}>{children}</Renderer>\n {children}\n </DragDropContext.Provider>\n );\n}\n\nfunction useStableInstance<T extends {destroy(): void}>(create: () => T): T {\n const ref = useRef<T | null>(null);\n\n if (!ref.current) {\n ref.current = create();\n }\n\n useInsertionEffect(() => {\n return () => ref.current?.destroy();\n }, []);\n\n return ref.current;\n}\n","import {useContext} from 'react';\nimport type {Data} from '@dnd-kit/abstract';\nimport type {DragDropManager, Draggable, Droppable} from '@dnd-kit/dom';\n\nimport {DragDropContext} from '../context/context.ts';\n\nexport function useDragDropManager<\n T extends Data = Data,\n U extends Draggable<T> = Draggable<T>,\n V extends Droppable<T> = Droppable<T>,\n W extends DragDropManager<T, U, V> = DragDropManager<T, U, V>,\n>(): W | null {\n return useContext(DragDropContext) as W | null;\n}\n","import {useState} from 'react';\nimport type {DragDropManager} from '@dnd-kit/abstract';\nimport type {CleanupFunction} from '@dnd-kit/state';\nimport {useIsomorphicLayoutEffect} from '@dnd-kit/react/hooks';\n\nimport {useDragDropManager} from './useDragDropManager.ts';\n\nexport interface Instance<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n> {\n manager: T | undefined;\n register(): CleanupFunction | void;\n}\n\nexport function useInstance<T extends Instance>(\n initializer: (manager: DragDropManager<any, any> | undefined) => T\n): T {\n const manager = useDragDropManager() ?? undefined;\n const [instance] = useState<T>(() => initializer(manager));\n\n if (instance.manager !== manager) {\n instance.manager = manager;\n }\n\n useIsomorphicLayoutEffect(instance.register, [manager, instance]);\n\n return instance;\n}\n","import {useCallback} from 'react';\nimport type {Data} from '@dnd-kit/abstract';\nimport {deepEqual} from '@dnd-kit/state';\nimport {Draggable} from '@dnd-kit/dom';\nimport type {DraggableInput} from '@dnd-kit/dom';\nimport {\n useOnValueChange,\n useOnElementChange,\n useDeepSignal,\n} from '@dnd-kit/react/hooks';\nimport {currentValue, type RefOrValue} from '@dnd-kit/react/utilities';\n\nimport {useInstance} from '../hooks/useInstance.ts';\n\nexport interface UseDraggableInput<T extends Data = Data>\n extends Omit<DraggableInput<T>, 'handle' | 'element'> {\n handle?: RefOrValue<Element>;\n element?: RefOrValue<Element>;\n}\n\nexport function useDraggable<T extends Data = Data>(\n input: UseDraggableInput<T>\n) {\n const {disabled, data, element, handle, id, modifiers, sensors, plugins} =\n input;\n const draggable = useInstance(\n (manager) =>\n new Draggable(\n {\n ...input,\n register: false,\n handle: currentValue(handle),\n element: currentValue(element),\n },\n manager\n )\n );\n const trackedDraggable = useDeepSignal(draggable, shouldUpdateSynchronously);\n\n useOnValueChange(id, () => (draggable.id = id));\n useOnElementChange(handle, (handle) => (draggable.handle = handle));\n useOnElementChange(element, (element) => (draggable.element = element));\n useOnValueChange(data, () => data && (draggable.data = data));\n useOnValueChange(disabled, () => (draggable.disabled = disabled === true));\n useOnValueChange(\n sensors,\n () => (draggable.sensors = sensors),\n undefined,\n deepEqual\n );\n useOnValueChange(\n modifiers,\n () => (draggable.modifiers = modifiers),\n undefined,\n deepEqual\n );\n useOnValueChange(\n plugins,\n () => (draggable.plugins = plugins),\n undefined,\n deepEqual\n );\n useOnValueChange(\n input.alignment,\n () => (draggable.alignment = input.alignment)\n );\n\n return {\n draggable: trackedDraggable,\n get isDragging() {\n return trackedDraggable.isDragging;\n },\n get isDropping() {\n return trackedDraggable.isDropping;\n },\n get isDragSource() {\n return trackedDraggable.isDragSource;\n },\n handleRef: useCallback(\n (element: Element | null) => {\n draggable.handle = element ?? undefined;\n },\n [draggable]\n ),\n ref: useCallback(\n (element: Element | null) => {\n if (\n !element &&\n draggable.element?.isConnected &&\n !draggable.manager?.dragOperation.status.idle\n ) {\n return;\n }\n\n draggable.element = element ?? undefined;\n },\n [draggable]\n ),\n };\n}\n\nfunction shouldUpdateSynchronously(key: string, oldValue: any, newValue: any) {\n // Update synchronously after drop animation\n if (key === 'isDragSource' && !newValue && oldValue) return true;\n\n return false;\n}\n","import {createElement, useEffect, useMemo, useRef, type ReactNode} from 'react';\nimport {useComputed, useDeepSignal} from '@dnd-kit/react/hooks';\nimport {DragDropManager, Draggable, Feedback} from '@dnd-kit/dom';\nimport type {DropAnimation} from '@dnd-kit/dom';\nimport {Data} from '@dnd-kit/abstract';\n\nimport {useDragDropManager} from '../hooks/useDragDropManager.ts';\nimport {DragDropContext} from '../context/context.ts';\n\nexport interface Props<T extends Data, U extends Draggable<T>> {\n className?: string;\n children: ReactNode | ((source: U) => ReactNode);\n /**\n * Customize or disable the drop animation that plays when a drag operation ends.\n *\n * - `undefined` – use the default animation (250ms ease)\n * - `null` – disable the drop animation entirely\n * - `{duration, easing}` – customize the animation timing\n * - `(context) => Promise<void> | void` – provide a fully custom animation function\n */\n dropAnimation?: DropAnimation | null;\n style?: React.CSSProperties;\n tag?: string;\n disabled?: boolean | ((source: U | null) => boolean);\n}\n\nexport function DragOverlay<T extends Data, U extends Draggable<T>>({\n children,\n className,\n dropAnimation,\n style,\n tag,\n disabled,\n}: Props<T, U>) {\n const ref = useRef<HTMLDivElement | null>(null);\n const manager = useDragDropManager<T, U>();\n const source =\n useComputed(() => manager?.dragOperation.source, [manager]).value ?? null;\n const isDisabled =\n typeof disabled === 'function' ? disabled(source) : disabled;\n\n useEffect(() => {\n if (!ref.current || !manager || isDisabled) return;\n\n const feedback = manager.plugins.find(\n (plugin) => plugin instanceof Feedback\n );\n\n if (!feedback) return;\n\n feedback.overlay = ref.current;\n\n return () => {\n feedback.overlay = undefined;\n };\n }, [manager, isDisabled]);\n\n useEffect(() => {\n if (!manager) return;\n\n const feedback = manager.plugins.find(\n (plugin) => plugin instanceof Feedback\n );\n\n if (!feedback) return;\n\n feedback.dropAnimation = dropAnimation;\n\n return () => {\n feedback.dropAnimation = undefined;\n };\n }, [manager, dropAnimation]);\n\n // Prevent children of the overlay from registering themselves as draggables or droppables\n const patchedManager = useMemo(() => {\n if (!manager) return null;\n\n const patchedRegistry = new Proxy(manager.registry, {\n get(target, property) {\n if (property === 'register' || property === 'unregister') {\n return noop;\n }\n\n return target[property as keyof typeof target];\n },\n });\n\n return new Proxy(manager, {\n get(target, property) {\n if (property === 'registry') {\n return patchedRegistry;\n }\n\n return target[property as keyof typeof target];\n },\n });\n }, [manager]);\n\n return (\n <DragDropContext.Provider value={patchedManager as DragDropManager | null}>\n {createElement(\n tag || 'div',\n {ref, className, style, 'data-dnd-overlay': true},\n\n renderChildren()\n )}\n </DragDropContext.Provider>\n );\n\n function renderChildren() {\n if (!source || isDisabled) return null;\n\n if (typeof children === 'function') {\n return <Children source={source}>{children}</Children>;\n }\n\n return children;\n }\n}\n\nfunction noop() {\n return () => {};\n}\n\nfunction Children<T extends Data, U extends Draggable<T>>({\n children,\n source,\n}: {\n children: (source: U) => ReactNode;\n source: U;\n}) {\n return children(useDeepSignal(source));\n}\n","var __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for(\"Symbol.\" + name);\nvar __typeError = (msg) => {\n throw TypeError(msg);\n};\nvar __pow = Math.pow;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\nvar __decoratorStart = (base) => {\n var _a2;\n return [, , , __create((_a2 = base == null ? void 0 : base[__knownSymbol(\"metadata\")]) != null ? _a2 : null)];\n};\nvar __decoratorStrings = [\"class\", \"method\", \"getter\", \"setter\", \"accessor\", \"field\", \"value\", \"get\", \"set\"];\nvar __expectFn = (fn) => fn !== void 0 && typeof fn !== \"function\" ? __typeError(\"Function expected\") : fn;\nvar __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError(\"Already initialized\") : fns.push(__expectFn(fn || null)) });\nvar __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol(\"metadata\"), array[3]);\nvar __runInitializers = (array, flags, self, value) => {\n for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);\n return value;\n};\nvar __decorateElement = (array, flags, name, decorators, target, extra) => {\n var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);\n var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings[k + 5];\n var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);\n var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : { get [name]() {\n return __privateGet(this, extra);\n }, set [name](x) {\n return __privateSet(this, extra, x);\n } }, name));\n k ? p && k < 4 && __name(extra, (k > 2 ? \"set \" : k > 1 ? \"get \" : \"\") + name) : __name(target, name);\n for (var i = decorators.length - 1; i >= 0; i--) {\n ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);\n if (k) {\n ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => name in x };\n if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];\n if (k > 2) access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;\n }\n it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? void 0 : { get: desc.get, set: desc.set } : target, ctx), done._ = 1;\n if (k ^ 4 || it === void 0) __expectFn(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);\n else if (typeof it !== \"object\" || it === null) __typeError(\"Object expected\");\n else __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);\n }\n return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;\n};\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use the \"in\" operator on this value') : member.has(obj);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, \"write to private field\"), setter ? setter.call(obj, value) : member.set(obj, value), value);\nvar __privateMethod = (obj, member, method) => (__accessCheck(obj, member, \"access private method\"), method);\n\n// src/point/Point.ts\nvar Point = class _Point {\n /**\n * @param {number} Coordinate of the point on the horizontal axis\n * @param {number} Coordinate of the point on the vertical axis\n */\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n /**\n * Returns the delta between this point and another point.\n *\n * @param {Point} a - A point\n * @param {Point} b - Another point\n */\n static delta(a, b) {\n return new _Point(a.x - b.x, a.y - b.y);\n }\n /**\n * Returns the distance (hypotenuse) between this point and another point.\n *\n * @param {Point} a - A point\n * @param {Point} b - Another point\n */\n static distance(a, b) {\n return Math.hypot(a.x - b.x, a.y - b.y);\n }\n /**\n * Returns true if both points are equal.\n *\n * @param {Point} a - A point\n * @param {Point} b - Another point\n */\n static equals(a, b) {\n return a.x === b.x && a.y === b.y;\n }\n static from({ x, y }) {\n return new _Point(x, y);\n }\n};\n\n// src/shapes/Rectangle.ts\nvar Rectangle = class _Rectangle {\n constructor(left, top, width, height) {\n this.left = left;\n this.top = top;\n this.width = width;\n this.height = height;\n this.scale = {\n x: 1,\n y: 1\n };\n }\n get inverseScale() {\n return {\n x: 1 / this.scale.x,\n y: 1 / this.scale.y\n };\n }\n translate(x, y) {\n const { top, left, width, height, scale } = this;\n const newShape = new _Rectangle(left + x, top + y, width, height);\n newShape.scale = __spreadValues({}, scale);\n return newShape;\n }\n get boundingRectangle() {\n const { width, height, left, top, right, bottom } = this;\n return { width, height, left, top, right, bottom };\n }\n get center() {\n const { left, top, right, bottom } = this;\n return new Point((left + right) / 2, (top + bottom) / 2);\n }\n get area() {\n const { width, height } = this;\n return width * height;\n }\n equals(shape) {\n if (!(shape instanceof _Rectangle)) {\n return false;\n }\n const { left, top, width, height } = this;\n return left === shape.left && top === shape.top && width === shape.width && height === shape.height;\n }\n containsPoint(point) {\n const { top, left, bottom, right } = this;\n return top <= point.y && point.y <= bottom && left <= point.x && point.x <= right;\n }\n intersectionArea(shape) {\n if (shape instanceof _Rectangle) {\n return rectangleRectangleIntersection(this, shape);\n }\n return 0;\n }\n intersectionRatio(shape) {\n const { area } = this;\n const intersectionArea = this.intersectionArea(shape);\n const intersectionRatio = intersectionArea / (shape.area + area - intersectionArea);\n return intersectionRatio;\n }\n get bottom() {\n const { top, height } = this;\n return top + height;\n }\n get right() {\n const { left, width } = this;\n return left + width;\n }\n get aspectRatio() {\n const { width, height } = this;\n return width / height;\n }\n get corners() {\n return [\n { x: this.left, y: this.top },\n { x: this.right, y: this.top },\n { x: this.left, y: this.bottom },\n { x: this.right, y: this.bottom }\n ];\n }\n static from({ top, left, width, height }) {\n return new _Rectangle(left, top, width, height);\n }\n static delta(a, b, alignment = { x: \"center\", y: \"center\" }) {\n const getCoordinate = (rect, axis) => {\n const align = alignment[axis];\n const start = axis === \"x\" ? rect.left : rect.top;\n const size = axis === \"x\" ? rect.width : rect.height;\n if (align == \"start\") return start;\n if (align == \"end\") return start + size;\n return start + size / 2;\n };\n return Point.delta(\n { x: getCoordinate(a, \"x\"), y: getCoordinate(a, \"y\") },\n { x: getCoordinate(b, \"x\"), y: getCoordinate(b, \"y\") }\n );\n }\n static intersectionRatio(a, b) {\n return _Rectangle.from(a).intersectionRatio(_Rectangle.from(b));\n }\n};\nfunction rectangleRectangleIntersection(a, b) {\n const top = Math.max(b.top, a.top);\n const left = Math.max(b.left, a.left);\n const right = Math.min(b.left + b.width, a.left + a.width);\n const bottom = Math.min(b.top + b.height, a.top + a.height);\n const width = right - left;\n const height = bottom - top;\n if (left < right && top < bottom) {\n const intersectionArea = width * height;\n return intersectionArea;\n }\n return 0;\n}\n\n// src/position/position.ts\nimport { batch, derived, ValueHistory } from \"@dnd-kit/state\";\nvar _direction_dec, _delta_dec, _a, _timestamp, _init;\nvar Position = class extends (_a = ValueHistory, _delta_dec = [derived], _direction_dec = [derived], _a) {\n constructor(initialValue) {\n const point = Point.from(initialValue);\n super(point, (a, b) => Point.equals(a, b));\n __runInitializers(_init, 5, this);\n __privateAdd(this, _timestamp, 0);\n this.velocity = { x: 0, y: 0 };\n }\n get delta() {\n return Point.delta(this.current, this.initial);\n }\n get direction() {\n const { current, previous } = this;\n if (!previous) return null;\n const delta = {\n x: current.x - previous.x,\n y: current.y - previous.y\n };\n if (!delta.x && !delta.y) {\n return null;\n }\n if (Math.abs(delta.x) > Math.abs(delta.y)) {\n return delta.x > 0 ? \"right\" : \"left\";\n }\n return delta.y > 0 ? \"down\" : \"up\";\n }\n get current() {\n return super.current;\n }\n set current(coordinates) {\n const { current } = this;\n const point = Point.from(coordinates);\n const delta = {\n x: point.x - current.x,\n y: point.y - current.y\n };\n const timestamp = Date.now();\n const timeDelta = timestamp - __privateGet(this, _timestamp);\n const velocity = (delta2) => Math.round(delta2 / timeDelta * 100);\n batch(() => {\n __privateSet(this, _timestamp, timestamp);\n this.velocity = {\n x: velocity(delta.x),\n y: velocity(delta.y)\n };\n super.current = point;\n });\n }\n reset(coordinates = this.defaultValue) {\n super.reset(Point.from(coordinates));\n this.velocity = { x: 0, y: 0 };\n }\n};\n_init = __decoratorStart(_a);\n_timestamp = new WeakMap();\n__decorateElement(_init, 2, \"delta\", _delta_dec, Position);\n__decorateElement(_init, 2, \"direction\", _direction_dec, Position);\n__decoratorMetadata(_init, Position);\n\n// src/distance/distance.ts\nfunction exceedsDistance({ x, y }, distance) {\n const dx = Math.abs(x);\n const dy = Math.abs(y);\n if (typeof distance === \"number\") {\n return Math.sqrt(__pow(dx, 2) + __pow(dy, 2)) > distance;\n }\n if (\"x\" in distance && \"y\" in distance) {\n return dx > distance.x && dy > distance.y;\n }\n if (\"x\" in distance) {\n return dx > distance.x;\n }\n if (\"y\" in distance) {\n return dy > distance.y;\n }\n return false;\n}\n\n// src/types/axis.ts\nvar Axis = /* @__PURE__ */ ((Axis2) => {\n Axis2[\"Horizontal\"] = \"x\";\n Axis2[\"Vertical\"] = \"y\";\n return Axis2;\n})(Axis || {});\nvar Axes = Object.values(Axis);\nexport {\n Axes,\n Axis,\n Point,\n Position,\n Rectangle,\n exceedsDistance\n};\n","// src/algorithms/pointerIntersection.ts\nimport { CollisionPriority, CollisionType } from \"@dnd-kit/abstract\";\nimport { Point } from \"@dnd-kit/geometry\";\nvar pointerIntersection = ({\n dragOperation,\n droppable\n}) => {\n const pointerCoordinates = dragOperation.position.current;\n if (!pointerCoordinates) {\n return null;\n }\n const { id } = droppable;\n if (!droppable.shape) {\n return null;\n }\n if (droppable.shape.containsPoint(pointerCoordinates)) {\n const distance = Point.distance(droppable.shape.center, pointerCoordinates);\n return {\n id,\n value: 1 / distance,\n type: CollisionType.PointerIntersection,\n priority: CollisionPriority.High\n };\n }\n return null;\n};\n\n// src/algorithms/shapeIntersection.ts\nimport { CollisionPriority as CollisionPriority2, CollisionType as CollisionType2 } from \"@dnd-kit/abstract\";\nimport { Point as Point2 } from \"@dnd-kit/geometry\";\nvar shapeIntersection = ({\n dragOperation,\n droppable\n}) => {\n const { shape } = dragOperation;\n if (!droppable.shape || !(shape == null ? void 0 : shape.current)) {\n return null;\n }\n const intersectionArea = shape.current.intersectionArea(droppable.shape);\n if (intersectionArea) {\n const { position } = dragOperation;\n const distance = Point2.distance(droppable.shape.center, position.current);\n const intersectionRatio = intersectionArea / (shape.current.area + droppable.shape.area - intersectionArea);\n const value = intersectionRatio / distance;\n return {\n id: droppable.id,\n value,\n type: CollisionType2.ShapeIntersection,\n priority: CollisionPriority2.Normal\n };\n }\n return null;\n};\n\n// src/algorithms/default.ts\nvar defaultCollisionDetection = (args) => {\n var _a;\n return (_a = pointerIntersection(args)) != null ? _a : shapeIntersection(args);\n};\n\n// src/algorithms/closestCorners.ts\nimport { CollisionPriority as CollisionPriority3, CollisionType as CollisionType3 } from \"@dnd-kit/abstract\";\nimport { Point as Point3, Rectangle } from \"@dnd-kit/geometry\";\nvar closestCorners = (input) => {\n const { dragOperation, droppable } = input;\n const { shape, position } = dragOperation;\n if (!droppable.shape) {\n return null;\n }\n const shapeCorners = shape ? Rectangle.from(shape.current.boundingRectangle).corners : void 0;\n const distance = Rectangle.from(\n droppable.shape.boundingRectangle\n ).corners.reduce(\n (acc, corner, index) => {\n var _a;\n return acc + Point3.distance(\n Point3.from(corner),\n (_a = shapeCorners == null ? void 0 : shapeCorners[index]) != null ? _a : position.current\n );\n },\n 0\n );\n const value = distance / 4;\n return {\n id: droppable.id,\n value: 1 / value,\n type: CollisionType3.Collision,\n priority: CollisionPriority3.Normal\n };\n};\n\n// src/algorithms/closestCenter.ts\nimport { CollisionPriority as CollisionPriority4, CollisionType as CollisionType4 } from \"@dnd-kit/abstract\";\nimport { Point as Point4 } from \"@dnd-kit/geometry\";\nvar closestCenter = (input) => {\n var _a;\n const { dragOperation, droppable } = input;\n const { shape, position } = dragOperation;\n if (!droppable.shape) {\n return null;\n }\n const collision = defaultCollisionDetection(input);\n if (collision) {\n return collision;\n }\n const distance = Point4.distance(\n droppable.shape.center,\n (_a = shape == null ? void 0 : shape.current.center) != null ? _a : position.current\n );\n const value = 1 / distance;\n return {\n id: droppable.id,\n value,\n type: CollisionType4.Collision,\n priority: CollisionPriority4.Normal\n };\n};\n\n// src/algorithms/directionBiased.ts\nimport { CollisionPriority as CollisionPriority5, CollisionType as CollisionType5 } from \"@dnd-kit/abstract\";\nimport { Point as Point5 } from \"@dnd-kit/geometry\";\nvar directionBiased = ({\n dragOperation,\n droppable\n}) => {\n if (!droppable.shape) {\n return null;\n }\n const { position, shape } = dragOperation;\n const { direction } = position;\n if (!shape) {\n return null;\n }\n if (direction === null) {\n return defaultCollisionDetection({ dragOperation, droppable });\n }\n const { center } = shape.current;\n const rect = droppable.shape.boundingRectangle;\n const isBelow = rect.bottom >= center.y;\n const isAbove = rect.top <= center.y;\n const isLeft = rect.left <= center.x;\n const isRight = rect.right >= center.x;\n if (direction === \"down\" && isBelow || direction === \"up\" && isAbove || direction === \"left\" && isLeft || direction === \"right\" && isRight) {\n const distance = Point5.distance(droppable.shape.center, center);\n const value = distance === 0 ? 1 : 1 / distance;\n return {\n id: droppable.id,\n value,\n type: CollisionType5.Collision,\n priority: CollisionPriority5.Normal\n };\n }\n return null;\n};\n\n// src/algorithms/pointerDistance.ts\nimport { CollisionPriority as CollisionPriority6, CollisionType as CollisionType6 } from \"@dnd-kit/abstract\";\nimport { Point as Point6 } from \"@dnd-kit/geometry\";\nvar pointerDistance = (input) => {\n const { dragOperation, droppable } = input;\n const { position } = dragOperation;\n if (!droppable.shape) {\n return null;\n }\n const distance = Point6.distance(droppable.shape.center, position.current);\n const value = 1 / distance;\n return {\n id: droppable.id,\n value,\n type: CollisionType6.Collision,\n priority: CollisionPriority6.Normal\n };\n};\nexport {\n closestCenter,\n closestCorners,\n defaultCollisionDetection,\n directionBiased,\n pointerDistance,\n pointerIntersection,\n shapeIntersection\n};\n","import {useCallback} from 'react';\nimport type {Data} from '@dnd-kit/abstract';\nimport {Droppable} from '@dnd-kit/dom';\nimport {deepEqual} from '@dnd-kit/state';\nimport type {DroppableInput} from '@dnd-kit/dom';\nimport {\n useComputed,\n useOnValueChange,\n useOnElementChange,\n useDeepSignal,\n} from '@dnd-kit/react/hooks';\nimport {currentValue, type RefOrValue} from '@dnd-kit/react/utilities';\n\nimport {useInstance} from '../hooks/useInstance.ts';\nimport {defaultCollisionDetection} from '@dnd-kit/collision';\n\nexport interface UseDroppableInput<T extends Data = Data>\n extends Omit<DroppableInput<T>, 'element'> {\n element?: RefOrValue<Element>;\n}\n\nexport function useDroppable<T extends Data = Data>(\n input: UseDroppableInput<T>\n) {\n const {collisionDetector, data, disabled, element, id, accept, type} = input;\n const droppable = useInstance(\n (manager) =>\n new Droppable(\n {\n ...input,\n register: false,\n element: currentValue(element),\n },\n manager\n )\n );\n const trackedDroppalbe = useDeepSignal(droppable);\n\n useOnValueChange(id, () => (droppable.id = id));\n useOnElementChange(element, (element) => (droppable.element = element));\n useOnValueChange(\n accept,\n () => (droppable.accept = accept),\n undefined,\n deepEqual\n );\n useOnValueChange(\n collisionDetector,\n () =>\n (droppable.collisionDetector =\n collisionDetector ?? defaultCollisionDetection)\n );\n useOnValueChange(data, () => data && (droppable.data = data));\n useOnValueChange(disabled, () => (droppable.disabled = disabled === true));\n useOnValueChange(type, () => (droppable.type = type));\n\n return {\n droppable: trackedDroppalbe,\n get isDropTarget() {\n return trackedDroppalbe.isDropTarget;\n },\n ref: useCallback(\n (element: Element | null) => {\n if (\n !element &&\n droppable.element?.isConnected &&\n !droppable.manager?.dragOperation.status.idle\n ) {\n return;\n }\n\n droppable.element = element ?? undefined;\n },\n [droppable]\n ),\n };\n}\n","import {useEffect} from 'react';\nimport type {DragDropEventHandlers, Data} from '@dnd-kit/abstract';\nimport type {Draggable, Droppable, DragDropManager} from '@dnd-kit/dom';\n\nimport {useDragDropManager} from './useDragDropManager.js';\nimport {CleanupFunction} from '@dnd-kit/state';\n\ntype EventNameOverrides = {\n beforedragstart: 'onBeforeDragStart';\n};\n\ntype EventHandlerName<T extends string> = T extends keyof EventNameOverrides\n ? EventNameOverrides[T]\n : T extends `drag${infer Second}${infer Rest}`\n ? `onDrag${Uppercase<Second>}${Rest}`\n : `on${Capitalize<T>}`;\n\n/**\n * Type for all possible event handlers\n */\ntype Events<\n T extends Data,\n U extends Draggable<T>,\n V extends Droppable<T>,\n W extends DragDropManager<T, U, V>,\n> = DragDropEventHandlers<U, V, W>;\n\nexport type EventHandlers<\n T extends Data = Data,\n U extends Draggable<T> = Draggable<T>,\n V extends Droppable<T> = Droppable<T>,\n W extends DragDropManager<T, U, V> = DragDropManager<T, U, V>,\n> = {\n [K in keyof Events<T, U, V, W> as EventHandlerName<K>]: Events<T, U, V, W>[K];\n};\n\n/**\n * Hook to monitor drag and drop events anywhere within a DragDropProvider\n * @param handlers Object containing event handlers for drag and drop events\n */\nexport function useDragDropMonitor<\n T extends Data = Data,\n U extends Draggable<T> = Draggable<T>,\n V extends Droppable<T> = Droppable<T>,\n W extends DragDropManager<T, U, V> = DragDropManager<T, U, V>,\n>(handlers: Partial<EventHandlers<T, U, V, W>>): void {\n const manager = useDragDropManager<T, U, V, W>();\n\n useEffect(() => {\n if (!manager) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n 'useDndMonitor hook was called outside of a DragDropProvider. ' +\n 'Make sure your app is wrapped in a DragDropProvider component.'\n );\n }\n return;\n }\n\n const cleanupFns = Object.entries(handlers).reduce<CleanupFunction[]>(\n (acc, [handlerName, handler]) => {\n if (handler) {\n // Convert handler name (e.g. 'onDragStart') to event name (e.g. 'dragstart')\n const eventName = handlerName\n .replace(/^on/, '')\n .toLowerCase() as keyof Events<T, U, V, W>;\n\n const unsubscribe = manager.monitor.addEventListener(\n eventName,\n handler as any\n );\n\n acc.push(unsubscribe);\n }\n\n return acc;\n },\n []\n );\n\n return () => cleanupFns.forEach((cleanup) => cleanup?.());\n }, [manager, handlers]);\n}\n","import type {Data} from '@dnd-kit/abstract';\nimport type {Draggable, Droppable, DragDropManager} from '@dnd-kit/dom';\nimport {useComputed} from '@dnd-kit/react/hooks';\n\nimport {useDragDropManager} from './useDragDropManager.ts';\n\nexport function useDragOperation<\n T extends Data = Data,\n U extends Draggable<T> = Draggable<T>,\n V extends Droppable<T> = Droppable<T>,\n W extends DragDropManager<T, U, V> = DragDropManager<T, U, V>,\n>() {\n const manager = useDragDropManager<T, U, V, W>();\n const source = useComputed(() => manager?.dragOperation.source, [manager]);\n const target = useComputed(() => manager?.dragOperation.target, [manager]);\n\n return {\n get source() {\n return source.value;\n },\n get target() {\n return target.value;\n },\n };\n}\n"]}