@mapples/dnd 1.1.2 → 1.2.1

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 (37) hide show
  1. package/dist/components/DnDRootView.d.ts +1 -1
  2. package/dist/components/DnDRootView.d.ts.map +1 -1
  3. package/dist/components/DnDRootView.js +86 -13
  4. package/dist/components/DnDRootView.js.map +1 -1
  5. package/dist/components/DropArea.d.ts.map +1 -1
  6. package/dist/components/DropArea.js +6 -3
  7. package/dist/components/DropArea.js.map +1 -1
  8. package/dist/context/DropContext.d.ts +8 -0
  9. package/dist/context/DropContext.d.ts.map +1 -1
  10. package/dist/context/DropContext.js +8 -0
  11. package/dist/context/DropContext.js.map +1 -1
  12. package/dist/context/FrameSpaceContext.d.ts +27 -0
  13. package/dist/context/FrameSpaceContext.d.ts.map +1 -0
  14. package/dist/context/FrameSpaceContext.js +15 -0
  15. package/dist/context/FrameSpaceContext.js.map +1 -0
  16. package/dist/context/index.d.ts +2 -0
  17. package/dist/context/index.d.ts.map +1 -1
  18. package/dist/context/index.js +2 -0
  19. package/dist/context/index.js.map +1 -1
  20. package/dist/hooks/useDrag.d.ts.map +1 -1
  21. package/dist/hooks/useDrag.js +12 -0
  22. package/dist/hooks/useDrag.js.map +1 -1
  23. package/dist/hooks/useDrop.d.ts.map +1 -1
  24. package/dist/hooks/useDrop.js +74 -9
  25. package/dist/hooks/useDrop.js.map +1 -1
  26. package/dist/index.d.ts +2 -0
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +2 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/monitor/Monitor.d.ts +107 -22
  31. package/dist/monitor/Monitor.d.ts.map +1 -1
  32. package/dist/monitor/Monitor.js +378 -111
  33. package/dist/monitor/Monitor.js.map +1 -1
  34. package/dist/types/index.d.ts +86 -0
  35. package/dist/types/index.d.ts.map +1 -1
  36. package/dist/types/index.js.map +1 -1
  37. package/package.json +1 -1
@@ -11,6 +11,6 @@ import { DnDRootViewProps } from '../types';
11
11
  * @returns The rendered drag and drop root view
12
12
  * @public
13
13
  */
14
- declare const DnDRootView: <T extends object>({ children, DragElement, onDrop, ...props }: DnDRootViewProps<T>) => import("react").JSX.Element;
14
+ declare const DnDRootView: <T extends object>({ children, DragElement, onDrop, pointerTransform, ...props }: DnDRootViewProps<T>) => import("react").JSX.Element;
15
15
  export default DnDRootView;
16
16
  //# sourceMappingURL=DnDRootView.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DnDRootView.d.ts","sourceRoot":"","sources":["../../src/components/DnDRootView.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAAgB,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAG1D;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,WAAW,GAAI,CAAC,SAAS,MAAM,EAAE,6CAKpC,gBAAgB,CAAC,CAAC,CAAC,gCAoGrB,CAAC;AAEF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"DnDRootView.d.ts","sourceRoot":"","sources":["../../src/components/DnDRootView.tsx"],"names":[],"mappings":"AAkBA,OAAO,EAAgB,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAG1D;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,WAAW,GAAI,CAAC,SAAS,MAAM,EAAE,+DAMpC,gBAAgB,CAAC,CAAC,CAAC,gCAqLrB,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -1,5 +1,5 @@
1
- import { useEffect, useState } from 'react';
2
- import { Gesture, GestureDetector, GestureHandlerRootView, } from 'react-native-gesture-handler';
1
+ import { useEffect, useMemo, useState } from 'react';
2
+ import { Gesture, GestureDetector, GestureHandlerRootView, PointerType, } from 'react-native-gesture-handler';
3
3
  import { runOnJS, useSharedValue } from 'react-native-reanimated';
4
4
  import { filter } from 'rxjs';
5
5
  import { initialDragCoords, initialOverLayout } from '../constants';
@@ -19,7 +19,7 @@ import { filterEvents } from '../utils';
19
19
  * @returns The rendered drag and drop root view
20
20
  * @public
21
21
  */
22
- const DnDRootView = ({ children, DragElement, onDrop, ...props }) => {
22
+ const DnDRootView = ({ children, DragElement, onDrop, pointerTransform, ...props }) => {
23
23
  const [isDragging, setIsDragging] = useState(false);
24
24
  // Lazy state init creates the Monitor exactly once and keeps the same
25
25
  // instance for the component's lifetime, without reading refs during render
@@ -28,6 +28,10 @@ const DnDRootView = ({ children, DragElement, onDrop, ...props }) => {
28
28
  const [monitor] = useState(() => new Monitor({ padding: 5 }));
29
29
  const sv = useSharedValue(initialDragCoords);
30
30
  const svOverLayout = useSharedValue(initialOverLayout);
31
+ // Window position of the pointer at touch-down (onBegin). onStart only
32
+ // fires after minDistance, and translationX/Y is measured from ACTIVATION,
33
+ // so the activation event alone cannot recover where the press began.
34
+ const pressSV = useSharedValue(initialDragCoords);
31
35
  useEffect(() => {
32
36
  const subscription = monitor.events
33
37
  .pipe(filter(filterEvents(DnDEventType.DragStart, DnDEventType.DragEnd)))
@@ -39,6 +43,10 @@ const DnDRootView = ({ children, DragElement, onDrop, ...props }) => {
39
43
  if (e.type === DnDEventType.DragEnd) {
40
44
  setIsDragging(false);
41
45
  if (onDrop) {
46
+ // Released outside every drop area — the drag is over, but there
47
+ // is nothing to drop onto.
48
+ if (e.cancelled || !e.dropTarget)
49
+ return;
42
50
  if (!e.target)
43
51
  return;
44
52
  const target = monitor.getDragTargetData(e.target);
@@ -57,26 +65,79 @@ const DnDRootView = ({ children, DragElement, onDrop, ...props }) => {
57
65
  * @param type - The type of pan event (start, end, or drag)
58
66
  * @param e - The gesture event payload
59
67
  */
60
- const handlePanEvents = (type, e) => {
61
- monitor[type]({ x: e.absoluteX, y: e.absoluteY });
68
+ const handlePanEvents = (type, e, pressWindow) => {
69
+ const windowCoords = { x: e.absoluteX, y: e.absoluteY };
70
+ const coords = pointerTransform
71
+ ? pointerTransform(windowCoords)
72
+ : windowCoords;
73
+ if (type === 'onDragStart') {
74
+ // Hit-test at the TOUCH-DOWN point (captured in onBegin), not the
75
+ // activation point. onStart fires only after minDistance, and a fast
76
+ // drag can be far past the pressed element by then — hit-testing there
77
+ // grabbed whatever was under the pointer mid-path (e.g. an element in
78
+ // another frame) instead of what the user pressed.
79
+ const startWindow = pressWindow ?? windowCoords;
80
+ // Drag sources (palette items) are window-space; drop targets may be
81
+ // in a transformed space — the monitor needs both. A null transform is
82
+ // the normal case for a palette press (the palette sits beside the drop
83
+ // space, not on it), so the drag still starts off the window coords.
84
+ monitor.onDragStart(pointerTransform ? pointerTransform(startWindow) : startWindow, startWindow);
85
+ return;
86
+ }
87
+ if (type === 'onDrag') {
88
+ // A null transform means the pointer is off the drop space entirely.
89
+ if (!coords) {
90
+ monitor.onDragOutside();
91
+ return;
92
+ }
93
+ monitor.onDrag(coords);
94
+ return;
95
+ }
96
+ // Release: a pointer-up outside the drop space needs no preceding move
97
+ // to count as a cancel.
98
+ if (!coords)
99
+ monitor.onDragOutside();
100
+ monitor.onDragEnd();
62
101
  };
63
102
  /**
64
103
  * Handles tap gesture events for selection.
65
104
  * @param e - The tap gesture event payload
66
105
  */
67
106
  const handleSelect = (e) => {
68
- monitor.onSelect({ x: e.absoluteX, y: e.absoluteY });
107
+ const windowCoords = { x: e.absoluteX, y: e.absoluteY };
108
+ const coords = pointerTransform
109
+ ? pointerTransform(windowCoords)
110
+ : windowCoords;
111
+ // Tapped outside the drop space (surrounding chrome) — not a selection
112
+ // gesture at all, so it must not hit-test into the space.
113
+ if (!coords)
114
+ return;
115
+ monitor.onSelect(coords);
69
116
  };
70
117
  const tap = Gesture.Tap().onEnd((e) => {
118
+ // Gesture-handler's web KeyboardEventManager treats Enter/Space as
119
+ // "activation keys": a keydown bubbling from any focused element inside
120
+ // this root begins a synthetic press and the keyup completes it — a
121
+ // phantom tap at the element's center. For a focused text field that
122
+ // meant pressing space selected whatever lay under the field (ending an
123
+ // in-place edit mid-word). Selection is a pointer concept here, so
124
+ // keyboard-synthesized taps are ignored outright.
125
+ if (e.pointerType === PointerType.KEY)
126
+ return;
71
127
  runOnJS(handleSelect)(e);
72
128
  });
73
129
  const pan = Gesture.Pan()
130
+ // A few pixels of slack so taps never register as element move-drags.
131
+ .minDistance(4)
132
+ .onBegin((e) => {
133
+ pressSV.set({ x: e.absoluteX, y: e.absoluteY });
134
+ })
74
135
  .onStart((e) => {
75
136
  sv.set({
76
137
  x: e.x,
77
138
  y: e.y,
78
139
  });
79
- runOnJS(handlePanEvents)('onDragStart', e);
140
+ runOnJS(handlePanEvents)('onDragStart', e, pressSV.get());
80
141
  })
81
142
  .onChange((e) => {
82
143
  sv.set({
@@ -88,14 +149,26 @@ const DnDRootView = ({ children, DragElement, onDrop, ...props }) => {
88
149
  .onEnd((e) => {
89
150
  sv.set(initialDragCoords);
90
151
  runOnJS(handlePanEvents)('onDragEnd', e);
152
+ })
153
+ // A gesture cancelled rather than ended (pointer released off-window, or
154
+ // the race lost after activation) never reaches onEnd, which used to
155
+ // strand the drag ghost and highlights on screen. The monitor's onDragEnd
156
+ // is idempotent, so the normal end → finalize pair is a no-op the second
157
+ // time round.
158
+ .onFinalize((e) => {
159
+ sv.set(initialDragCoords);
160
+ runOnJS(handlePanEvents)('onDragEnd', e);
91
161
  });
92
162
  const composed = Gesture.Race(pan, tap);
93
- return (<DnDContextProvider value={{
94
- monitor,
95
- isDragging,
96
- sv,
97
- svOverLayout,
98
- }}>
163
+ // Every useDnD consumer (one per rendered node) re-renders when this value
164
+ // changes identity — keep it stable across unrelated root re-renders.
165
+ const contextValue = useMemo(() => ({
166
+ monitor,
167
+ isDragging,
168
+ sv,
169
+ svOverLayout,
170
+ }), [monitor, isDragging, sv, svOverLayout]);
171
+ return (<DnDContextProvider value={contextValue}>
99
172
  <GestureHandlerRootView {...props}>
100
173
  <GestureDetector gesture={composed}>{children}</GestureDetector>
101
174
  </GestureHandlerRootView>
@@ -1 +1 @@
1
- {"version":3,"file":"DnDRootView.js","sourceRoot":"","sources":["../../src/components/DnDRootView.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DnDRootView.js","sourceRoot":"","sources":["../../src/components/DnDRootView.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DropArea.d.ts","sourceRoot":"","sources":["../../src/components/DropArea.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAG9C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;;;;;;GASG;AACH,QAAA,MAAM,QAAQ,EAAE,EAAE,CAAC,iBAAiB,CAAC,aAAa,CAAC,CASlD,CAAC;AAEF,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"DropArea.d.ts","sourceRoot":"","sources":["../../src/components/DropArea.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAW,MAAM,OAAO,CAAC;AAGvD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;;;;;;GASG;AACH,QAAA,MAAM,QAAQ,EAAE,EAAE,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAUlD,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { useMemo } from 'react';
1
2
  import { DropContextProvider } from '../context';
2
3
  /**
3
4
  * Component that creates a drop area context for its children.
@@ -10,9 +11,11 @@ import { DropContextProvider } from '../context';
10
11
  * @public
11
12
  */
12
13
  const DropArea = ({ children, forId, }) => {
13
- return (<DropContextProvider value={{ parent: forId }}>
14
- {children}
15
- </DropContextProvider>);
14
+ // One DropArea wraps every rendered node: an inline value literal here
15
+ // would push a fresh context identity down the whole tree on any ancestor
16
+ // re-render, defeating memoization at every level below.
17
+ const value = useMemo(() => ({ parent: forId }), [forId]);
18
+ return <DropContextProvider value={value}>{children}</DropContextProvider>;
16
19
  };
17
20
  export default DropArea;
18
21
  //# sourceMappingURL=DropArea.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DropArea.js","sourceRoot":"","sources":["../../src/components/DropArea.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGjD;;;;;;;;;GASG;AACH,MAAM,QAAQ,GAAyC,CAAC,EACtD,QAAQ,EACR,KAAK,GACN,EAAE,EAAE;IACH,OAAO,CACL,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAC5C;MAAA,CAAC,QAAQ,CACX;IAAA,EAAE,mBAAmB,CAAC,CACvB,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"DropArea.js","sourceRoot":"","sources":["../../src/components/DropArea.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAyB,OAAO,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGjD;;;;;;;;;GASG;AACH,MAAM,QAAQ,GAAyC,CAAC,EACtD,QAAQ,EACR,KAAK,GACN,EAAE,EAAE;IACH,uEAAuE;IACvE,0EAA0E;IAC1E,yDAAyD;IACzD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAE1D,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,mBAAmB,CAAC,CAAC;AAC7E,CAAC,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -3,6 +3,14 @@
3
3
  * Provides access to the parent drop target ID for establishing parent-child relationships.
4
4
  * @public
5
5
  */
6
+ /**
7
+ * Sentinel `DropArea.forId` value for "my parent has not registered yet".
8
+ * Children under it stay MOUNTED but defer their own registration until the
9
+ * real parent id replaces it — keeping the tree stable (no unmount/remount)
10
+ * across registration gaps, e.g. an editor re-enabling its drop targets when
11
+ * leaving a preview mode. Distinct from `null`, which means a true root.
12
+ */
13
+ export declare const DROP_PARENT_PENDING = -1;
6
14
  declare const DropContext: import("react").Context<{
7
15
  parent: number | null;
8
16
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"DropContext.d.ts","sourceRoot":"","sources":["../../src/context/DropContext.tsx"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,QAAA,MAAM,WAAW;YAA2B,MAAM,GAAG,IAAI;EAEvD,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,mBAAmB;YARY,MAAM,GAAG,IAAI;EAQF,CAAC;AAExD,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"DropContext.d.ts","sourceRoot":"","sources":["../../src/context/DropContext.tsx"],"names":[],"mappings":"AAEA;;;;GAIG;AACH;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,QAAA,MAAM,WAAW;YAA2B,MAAM,GAAG,IAAI;EAEvD,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,mBAAmB;YARY,MAAM,GAAG,IAAI;EAQF,CAAC;AAExD,eAAe,WAAW,CAAC"}
@@ -4,6 +4,14 @@ import { createContext } from 'react';
4
4
  * Provides access to the parent drop target ID for establishing parent-child relationships.
5
5
  * @public
6
6
  */
7
+ /**
8
+ * Sentinel `DropArea.forId` value for "my parent has not registered yet".
9
+ * Children under it stay MOUNTED but defer their own registration until the
10
+ * real parent id replaces it — keeping the tree stable (no unmount/remount)
11
+ * across registration gaps, e.g. an editor re-enabling its drop targets when
12
+ * leaving a preview mode. Distinct from `null`, which means a true root.
13
+ */
14
+ export const DROP_PARENT_PENDING = -1;
7
15
  const DropContext = createContext({
8
16
  parent: null,
9
17
  });
@@ -1 +1 @@
1
- {"version":3,"file":"DropContext.js","sourceRoot":"","sources":["../../src/context/DropContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC;;;;GAIG;AACH,MAAM,WAAW,GAAG,aAAa,CAA4B;IAC3D,MAAM,EAAE,IAAI;CACb,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAC,QAAQ,CAAC;AAExD,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"DropContext.js","sourceRoot":"","sources":["../../src/context/DropContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC;;;;GAIG;AACH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,CAAC;AAEtC,MAAM,WAAW,GAAG,aAAa,CAA4B;IAC3D,MAAM,EAAE,IAAI;CACb,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAC,QAAQ,CAAC;AAExD,eAAe,WAAW,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { FC, PropsWithChildren, RefObject } from 'react';
2
+ import { View } from 'react-native';
3
+ export interface FrameSpaceContextType {
4
+ /** The frame key registered with the monitor via `registerFrame`. */
5
+ frameKey: string;
6
+ /**
7
+ * The view all drop elements in this frame measure against
8
+ * (`measureLayout(frameRoot)`), yielding scale-independent frame-local
9
+ * layout rects.
10
+ */
11
+ frameRootRef: RefObject<View | null>;
12
+ }
13
+ declare const FrameSpaceContext: import("react").Context<FrameSpaceContextType | null>;
14
+ /** The frame coordinate space the current subtree belongs to, if any. */
15
+ export declare const useFrameSpace: () => FrameSpaceContextType | null;
16
+ export interface FrameSpaceProps {
17
+ frameKey: string;
18
+ frameRootRef: RefObject<View | null>;
19
+ }
20
+ /**
21
+ * Declares a frame coordinate space for all `useDrop` registrations beneath
22
+ * it: elements measure relative to `frameRootRef` and register under
23
+ * `frameKey`, making their rects independent of viewport pan/zoom.
24
+ */
25
+ export declare const FrameSpace: FC<PropsWithChildren<FrameSpaceProps>>;
26
+ export default FrameSpaceContext;
27
+ //# sourceMappingURL=FrameSpaceContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FrameSpaceContext.d.ts","sourceRoot":"","sources":["../../src/context/FrameSpaceContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,EAAE,EACF,iBAAiB,EACjB,SAAS,EAGV,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,MAAM,WAAW,qBAAqB;IACpC,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,YAAY,EAAE,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;CACtC;AAED,QAAA,MAAM,iBAAiB,uDAAoD,CAAC;AAE5E,yEAAyE;AACzE,eAAO,MAAM,aAAa,oCAAsC,CAAC;AAEjE,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;CACtC;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAW7D,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { createContext, useContext, useMemo, } from 'react';
2
+ const FrameSpaceContext = createContext(null);
3
+ /** The frame coordinate space the current subtree belongs to, if any. */
4
+ export const useFrameSpace = () => useContext(FrameSpaceContext);
5
+ /**
6
+ * Declares a frame coordinate space for all `useDrop` registrations beneath
7
+ * it: elements measure relative to `frameRootRef` and register under
8
+ * `frameKey`, making their rects independent of viewport pan/zoom.
9
+ */
10
+ export const FrameSpace = ({ frameKey, frameRootRef, children, }) => {
11
+ const value = useMemo(() => ({ frameKey, frameRootRef }), [frameKey, frameRootRef]);
12
+ return <FrameSpaceContext value={value}>{children}</FrameSpaceContext>;
13
+ };
14
+ export default FrameSpaceContext;
15
+ //# sourceMappingURL=FrameSpaceContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FrameSpaceContext.js","sourceRoot":"","sources":["../../src/context/FrameSpaceContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAIb,UAAU,EACV,OAAO,GACR,MAAM,OAAO,CAAC;AAef,MAAM,iBAAiB,GAAG,aAAa,CAA+B,IAAI,CAAC,CAAC;AAE5E,yEAAyE;AACzE,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;AAOjE;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAA2C,CAAC,EACjE,QAAQ,EACR,YAAY,EACZ,QAAQ,GACT,EAAE,EAAE;IACH,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,EAClC,CAAC,QAAQ,EAAE,YAAY,CAAC,CACzB,CAAC;IAEF,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC,CAAC;AACzE,CAAC,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -2,4 +2,6 @@ export { default as DnDContext } from './DnDContext';
2
2
  export * from './DnDContext';
3
3
  export { default as DropContext } from './DropContext';
4
4
  export * from './DropContext';
5
+ export { default as FrameSpaceContext } from './FrameSpaceContext';
6
+ export * from './FrameSpaceContext';
5
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,cAAc,cAAc,CAAC;AAE7B,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,cAAc,cAAc,CAAC;AAE7B,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,cAAc,eAAe,CAAC;AAE9B,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,cAAc,qBAAqB,CAAC"}
@@ -2,4 +2,6 @@ export { default as DnDContext } from './DnDContext';
2
2
  export * from './DnDContext';
3
3
  export { default as DropContext } from './DropContext';
4
4
  export * from './DropContext';
5
+ export { default as FrameSpaceContext } from './FrameSpaceContext';
6
+ export * from './FrameSpaceContext';
5
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,cAAc,cAAc,CAAC;AAE7B,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,cAAc,cAAc,CAAC;AAE7B,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,cAAc,eAAe,CAAC;AAE9B,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,cAAc,qBAAqB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDrag.d.ts","sourceRoot":"","sources":["../../src/hooks/useDrag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA4C,MAAM,OAAO,CAAC;AAE5E,OAAO,EAAmB,IAAI,EAAE,MAAM,cAAc,CAAC;AAGrD,OAAO,EAAgB,QAAQ,EAAE,MAAM,UAAU,CAAC;AAIlD;;;;;;;;;;GAUG;AACH,QAAA,MAAM,OAAO,GAAI,QAAQ,SAAS,MAAM,EAAE,QAAQ,SAAS,MAAM,GAAG,QAAQ,EAC1E,KAAK,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,EAC3B,MAAM,QAAQ,CAAC,QAAQ,CAAC;IAkEtB,wCAAwC;;IAExC,0DAA0D;;IAE1D,sDAAsD;;CAGzD,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"useDrag.d.ts","sourceRoot":"","sources":["../../src/hooks/useDrag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA4C,MAAM,OAAO,CAAC;AAE5E,OAAO,EAAmB,IAAI,EAAE,MAAM,cAAc,CAAC;AAGrD,OAAO,EAAgB,QAAQ,EAAE,MAAM,UAAU,CAAC;AAIlD;;;;;;;;;;GAUG;AACH,QAAA,MAAM,OAAO,GAAI,QAAQ,SAAS,MAAM,EAAE,QAAQ,SAAS,MAAM,GAAG,QAAQ,EAC1E,KAAK,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,EAC3B,MAAM,QAAQ,CAAC,QAAQ,CAAC;IAgFtB,wCAAwC;;IAExC,0DAA0D;;IAE1D,sDAAsD;;CAGzD,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -19,8 +19,17 @@ const useDrag = (ref, item) => {
19
19
  const [id, setId] = useState(null);
20
20
  const idRef = useRef(null);
21
21
  const layoutRef = useRef(null);
22
+ const registrationGenerationRef = useRef(0);
22
23
  useEffect(() => {
24
+ // measureInWindow resolves in a later task. A stale callback from a
25
+ // superseded run (re-run or unmount) that still sees idRef.current ===
26
+ // null would register a duplicate drag element nobody ever unregisters.
27
+ // The generation token invalidates in-flight callbacks: bumped at the
28
+ // start of every run and again in cleanup.
29
+ const generation = ++registrationGenerationRef.current;
23
30
  ref.current?.measureInWindow?.((x, y, width, height) => {
31
+ if (generation !== registrationGenerationRef.current)
32
+ return;
24
33
  layoutRef.current = { x, y, width, height };
25
34
  if (idRef.current) {
26
35
  monitor.updateDragElement(idRef.current, layoutRef.current, item);
@@ -29,6 +38,9 @@ const useDrag = (ref, item) => {
29
38
  idRef.current = monitor.registerDragElement(layoutRef.current, item);
30
39
  setId(idRef.current);
31
40
  });
41
+ return () => {
42
+ registrationGenerationRef.current++;
43
+ };
32
44
  }, [item, monitor, ref]);
33
45
  useEffect(() => {
34
46
  return () => {
@@ -1 +1 @@
1
- {"version":3,"file":"useDrag.js","sourceRoot":"","sources":["../../src/hooks/useDrag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAG5E,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EAAE,YAAY,EAAY,MAAM,UAAU,CAAC;AAElD,OAAO,MAAM,MAAM,UAAU,CAAC;AAE9B;;;;;;;;;;GAUG;AACH,MAAM,OAAO,GAAG,CACd,GAA2B,EAC3B,IAAwB,EACxB,EAAE;IACF,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,EAAsB,CAAC;IAEjD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAElD,MAAM,KAAK,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAC;IAEvD,SAAS,CAAC,GAAG,EAAE;QACb,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACrD,SAAS,CAAC,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;YAE5C,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClB,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAClE,OAAO;YACT,CAAC;YAED,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACrE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAEzB,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,KAAK,CAAC,OAAO;gBAAE,OAAO;YAE3B,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/C,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd;;;OAGG;IACH,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACrD,SAAS,CAAC,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO;YAAE,OAAO;QACjD,OAAO,CAAC,uBAAuB,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IACpE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAEnB,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM;aAC1B,IAAI,CACH,MAAM,CACJ,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,SAAS;YACjC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,OAAO,CAClC,CACF;aACA,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE;YACf,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,SAAS,EAAE,CAAC;gBACtC,aAAa,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,CAAC,CAAC;QAEL,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;IACpC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAErB,OAAO;QACL,wCAAwC;QACxC,EAAE;QACF,0DAA0D;QAC1D,YAAY;QACZ,sDAAsD;QACtD,UAAU;KACX,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"useDrag.js","sourceRoot":"","sources":["../../src/hooks/useDrag.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDrop.d.ts","sourceRoot":"","sources":["../../src/hooks/useDrop.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAMV,MAAM,OAAO,CAAC;AAEf,OAAO,EAAwC,IAAI,EAAE,MAAM,cAAc,CAAC;AAG1E,OAAO,EAAgB,UAAU,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAMtE;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,OAAO,GAAI,QAAQ,SAAS,MAAM,EAAE,QAAQ,SAAS,MAAM,GAAG,QAAQ,EAC1E,KAAK,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,EAC3B,SAAS,gBAAgB,EACzB,OAAO,QAAQ;IAqGb,wCAAwC;;IAExC,wDAAwD;;IAExD,0CAA0C;;IAE1C,gDAAgD;;IAEhD,qDAAqD;;IAErD,0DAA0D;;CAG7D,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"useDrop.d.ts","sourceRoot":"","sources":["../../src/hooks/useDrop.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAMV,MAAM,OAAO,CAAC;AAEf,OAAO,EAAwC,IAAI,EAAE,MAAM,cAAc,CAAC;AAK1E,OAAO,EAAgB,UAAU,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAMtE;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,OAAO,GAAI,QAAQ,SAAS,MAAM,EAAE,QAAQ,SAAS,MAAM,GAAG,QAAQ,EAC1E,KAAK,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,EAC3B,SAAS,gBAAgB,EACzB,OAAO,QAAQ;IAiLb,wCAAwC;;IAExC,wDAAwD;;IAExD,0CAA0C;;IAE1C,gDAAgD;;IAEhD,qDAAqD;;IAErD,0DAA0D;;CAG7D,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -1,6 +1,8 @@
1
1
  import { useCallback, useEffect, useLayoutEffect, useRef, useState, } from 'react';
2
2
  import { useWindowDimensions } from 'react-native';
3
3
  import { filter } from 'rxjs';
4
+ import { DROP_PARENT_PENDING } from '../context/DropContext';
5
+ import { useFrameSpace } from '../context/FrameSpaceContext';
4
6
  import { DnDEventType } from '../types';
5
7
  import { filterEvents } from '../utils';
6
8
  import useDnD from './useDnD';
@@ -21,23 +23,77 @@ const useDrop = (ref, config, data) => {
21
23
  const [dropTarget, setDropTarget] = useState(null);
22
24
  const { monitor, isDragging } = useDnD();
23
25
  const { parent } = useDropContext();
26
+ const frameSpace = useFrameSpace();
24
27
  const { width, height } = useWindowDimensions();
25
28
  const [id, setId] = useState(null);
26
29
  const [isOver, setIsOver] = useState(false);
27
30
  const [dropTargetIndex, setDropTargetIndex] = useState(null);
28
31
  const idRef = useRef(null);
29
32
  const layoutRef = useRef(null);
33
+ const registrationGenerationRef = useRef(0);
34
+ /**
35
+ * Measures the element in the active coordinate space. Inside a frame
36
+ * space, rects are measured relative to the frame root (layout-engine
37
+ * values — unaffected by viewport scale/translate on web), so they stay
38
+ * valid across pan/zoom without re-measuring.
39
+ */
40
+ const measure = useCallback((callback) => {
41
+ const node = ref.current;
42
+ if (!node)
43
+ return;
44
+ const frameRoot = frameSpace?.frameRootRef.current;
45
+ if (frameRoot) {
46
+ // measureLayout reads layout-engine offsets (transform-independent on
47
+ // web); measuring the root against itself yields {0, 0, w, h}.
48
+ node.measureLayout?.(frameRoot, (x, y, width, height) => {
49
+ callback({ x, y, width, height });
50
+ });
51
+ return;
52
+ }
53
+ node.measureInWindow?.((x, y, width, height) => {
54
+ callback({ x, y, width, height });
55
+ });
56
+ }, [frameSpace, ref]);
30
57
  useLayoutEffect(() => {
31
- ref.current?.measureInWindow?.((x, y, width, height) => {
32
- layoutRef.current = { x, y, width, height };
58
+ // `measure` resolves in a later task. By then this effect run may have
59
+ // been superseded (re-run, disable, unmount) — and a stale callback that
60
+ // still sees idRef.current === null would register a duplicate element
61
+ // nobody ever unregisters. The generation token invalidates in-flight
62
+ // callbacks: bumped at the start of every run and again in cleanup.
63
+ const generation = ++registrationGenerationRef.current;
64
+ // Disabled — or the parent's own registration hasn't landed yet:
65
+ // withdraw from the monitor entirely (no hit-testing, no drops) while
66
+ // the component — and its subtree — stays mounted. Registering under a
67
+ // pending parent would root the element in the wrong place, and parents
68
+ // are fixed at registration time.
69
+ if (config?.enabled === false || parent === DROP_PARENT_PENDING) {
33
70
  if (idRef.current) {
34
- monitor.updateDropElement(idRef.current, layoutRef.current, config, data);
71
+ monitor.unregisterDropElement(idRef.current);
72
+ idRef.current = null;
73
+ setId(null);
74
+ }
75
+ return;
76
+ }
77
+ measure((layout) => {
78
+ if (generation !== registrationGenerationRef.current)
79
+ return;
80
+ layoutRef.current = layout;
81
+ // Only the frame root (no drop parent) carries the frame key; children
82
+ // inherit the space during hit testing.
83
+ const effectiveConfig = frameSpace && !parent
84
+ ? { ...config, frameKey: frameSpace.frameKey }
85
+ : config;
86
+ if (idRef.current) {
87
+ monitor.updateDropElement(idRef.current, layoutRef.current, effectiveConfig, data);
35
88
  return;
36
89
  }
37
- idRef.current = monitor.registerDropElement(layoutRef.current, parent, config, data);
90
+ idRef.current = monitor.registerDropElement(layoutRef.current, parent, effectiveConfig, data);
38
91
  setId(idRef.current);
39
92
  });
40
- }, [config, data, monitor, parent, ref]);
93
+ return () => {
94
+ registrationGenerationRef.current++;
95
+ };
96
+ }, [config, data, frameSpace, measure, monitor, parent, ref]);
41
97
  useEffect(() => {
42
98
  return () => {
43
99
  if (idRef.current) {
@@ -54,7 +110,16 @@ const useDrop = (ref, config, data) => {
54
110
  setDropTarget(null);
55
111
  return;
56
112
  }
57
- setDropTarget(e.dropTarget || null);
113
+ // Drag events arrive at pointer rate for EVERY registered drop
114
+ // element. Keeping the previous object while the target id is
115
+ // unchanged lets React bail out of the setState instead of
116
+ // re-rendering every node per pointer move. Consequence: the
117
+ // returned dropTarget's layout is a snapshot from when the target
118
+ // last changed — consumers read identity (`data`, `id`), not live
119
+ // geometry.
120
+ setDropTarget((prev) => (prev?.id ?? null) === (e.dropTarget?.id ?? null)
121
+ ? prev
122
+ : e.dropTarget || null);
58
123
  setIsOver(e.dropTarget?.id === idRef.current);
59
124
  setDropTargetIndex(e.dropTargetIndex || 0);
60
125
  });
@@ -67,13 +132,13 @@ const useDrop = (ref, config, data) => {
67
132
  * This function should be called when the element's position or size changes.
68
133
  */
69
134
  const updateLayout = useCallback(() => {
70
- ref.current?.measureInWindow?.((x, y, width, height) => {
71
- layoutRef.current = { x, y, width, height };
135
+ measure((layout) => {
136
+ layoutRef.current = layout;
72
137
  if (idRef.current) {
73
138
  monitor.updateDropElement(idRef.current, layoutRef.current);
74
139
  }
75
140
  });
76
- }, [monitor, ref]);
141
+ }, [measure, monitor]);
77
142
  useEffect(() => {
78
143
  const subscription = monitor.events
79
144
  .pipe(filter(filterEvents(DnDEventType.LayoutForceUpdate)))
@@ -1 +1 @@
1
- {"version":3,"file":"useDrop.js","sourceRoot":"","sources":["../../src/hooks/useDrop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useDrop.js","sourceRoot":"","sources":["../../src/hooks/useDrop.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  export * from './components';
2
+ export * from './context/DropContext';
3
+ export * from './context/FrameSpaceContext';
2
4
  export * from './hooks';
3
5
  export * from './monitor';
4
6
  export * from './types';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,6 @@
1
1
  export * from './components';
2
+ export * from './context/DropContext';
3
+ export * from './context/FrameSpaceContext';
2
4
  export * from './hooks';
3
5
  export * from './monitor';
4
6
  export * from './types';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}