react-native-drax 0.11.0-alpha.2 → 1.0.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.
- package/LICENSE.md +1 -1
- package/README.md +385 -227
- package/lib/module/DebugOverlay.js +121 -0
- package/lib/module/DebugOverlay.js.map +1 -0
- package/lib/module/Drax.js +36 -0
- package/lib/module/Drax.js.map +1 -0
- package/lib/module/DraxContext.js +6 -0
- package/lib/module/DraxContext.js.map +1 -0
- package/lib/module/DraxHandle.js +47 -0
- package/lib/module/DraxHandle.js.map +1 -0
- package/lib/module/DraxHandleContext.js +11 -0
- package/lib/module/DraxHandleContext.js.map +1 -0
- package/lib/module/DraxList.js +108 -0
- package/lib/module/DraxList.js.map +1 -0
- package/lib/module/DraxProvider.js +203 -0
- package/lib/module/DraxProvider.js.map +1 -0
- package/lib/module/DraxScrollView.js +167 -0
- package/lib/module/DraxScrollView.js.map +1 -0
- package/lib/module/DraxSubprovider.js +21 -0
- package/lib/module/DraxSubprovider.js.map +1 -0
- package/lib/module/DraxView.js +348 -0
- package/lib/module/DraxView.js.map +1 -0
- package/lib/module/HoverLayer.js +152 -0
- package/lib/module/HoverLayer.js.map +1 -0
- package/lib/module/SortableBoardContainer.js +386 -0
- package/lib/module/SortableBoardContainer.js.map +1 -0
- package/lib/module/SortableBoardContext.js +6 -0
- package/lib/module/SortableBoardContext.js.map +1 -0
- package/lib/module/SortableContainer.js +561 -0
- package/lib/module/SortableContainer.js.map +1 -0
- package/lib/module/SortableItem.js +226 -0
- package/lib/module/SortableItem.js.map +1 -0
- package/lib/module/SortableItemContext.js +38 -0
- package/lib/module/SortableItemContext.js.map +1 -0
- package/lib/module/compat/detectVersion.js +19 -0
- package/lib/module/compat/detectVersion.js.map +1 -0
- package/lib/module/compat/index.js +5 -0
- package/lib/module/compat/index.js.map +1 -0
- package/lib/module/compat/types.js +4 -0
- package/lib/module/compat/types.js.map +1 -0
- package/lib/module/compat/useDraxPanGesture.js +94 -0
- package/lib/module/compat/useDraxPanGesture.js.map +1 -0
- package/lib/module/hooks/index.js +5 -0
- package/lib/module/hooks/index.js.map +1 -0
- package/lib/module/hooks/useCallbackDispatch.js +681 -0
- package/lib/module/hooks/useCallbackDispatch.js.map +1 -0
- package/lib/module/hooks/useDragGesture.js +240 -0
- package/lib/module/hooks/useDragGesture.js.map +1 -0
- package/lib/module/hooks/useDraxContext.js +12 -0
- package/lib/module/hooks/useDraxContext.js.map +1 -0
- package/lib/module/hooks/useDraxId.js +13 -0
- package/lib/module/hooks/useDraxId.js.map +1 -0
- package/lib/module/hooks/useDraxMethods.js +73 -0
- package/lib/module/hooks/useDraxMethods.js.map +1 -0
- package/lib/module/hooks/useDraxScrollHandler.js +97 -0
- package/lib/module/hooks/useDraxScrollHandler.js.map +1 -0
- package/lib/module/hooks/useSortableBoard.js +37 -0
- package/lib/module/hooks/useSortableBoard.js.map +1 -0
- package/lib/module/hooks/useSortableList.js +824 -0
- package/lib/module/hooks/useSortableList.js.map +1 -0
- package/lib/module/hooks/useSpatialIndex.js +283 -0
- package/lib/module/hooks/useSpatialIndex.js.map +1 -0
- package/lib/module/hooks/useViewStyles.js +158 -0
- package/lib/module/hooks/useViewStyles.js.map +1 -0
- package/lib/module/hooks/useWebScrollFreeze.js +52 -0
- package/lib/module/hooks/useWebScrollFreeze.js.map +1 -0
- package/lib/module/index.js +37 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/math.js +222 -0
- package/lib/module/math.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/params.js +88 -0
- package/lib/module/params.js.map +1 -0
- package/lib/module/types.js +213 -0
- package/lib/module/types.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/DebugOverlay.d.ts +17 -0
- package/lib/typescript/src/DebugOverlay.d.ts.map +1 -0
- package/lib/typescript/src/Drax.d.ts +28 -0
- package/lib/typescript/src/Drax.d.ts.map +1 -0
- package/lib/typescript/src/DraxContext.d.ts +3 -0
- package/lib/typescript/src/DraxContext.d.ts.map +1 -0
- package/lib/typescript/src/DraxHandle.d.ts +25 -0
- package/lib/typescript/src/DraxHandle.d.ts.map +1 -0
- package/lib/typescript/src/DraxHandleContext.d.ts +12 -0
- package/lib/typescript/src/DraxHandleContext.d.ts.map +1 -0
- package/lib/typescript/src/DraxList.d.ts +66 -0
- package/lib/typescript/src/DraxList.d.ts.map +1 -0
- package/lib/typescript/src/DraxProvider.d.ts +4 -0
- package/lib/typescript/src/DraxProvider.d.ts.map +1 -0
- package/lib/typescript/src/DraxScrollView.d.ts +7 -0
- package/lib/typescript/src/DraxScrollView.d.ts.map +1 -0
- package/lib/typescript/src/DraxSubprovider.d.ts +4 -0
- package/lib/typescript/src/DraxSubprovider.d.ts.map +1 -0
- package/lib/typescript/src/DraxView.d.ts +4 -0
- package/lib/typescript/src/DraxView.d.ts.map +1 -0
- package/lib/typescript/src/HoverLayer.d.ts +38 -0
- package/lib/typescript/src/HoverLayer.d.ts.map +1 -0
- package/lib/typescript/src/SortableBoardContainer.d.ts +11 -0
- package/lib/typescript/src/SortableBoardContainer.d.ts.map +1 -0
- package/lib/typescript/src/SortableBoardContext.d.ts +4 -0
- package/lib/typescript/src/SortableBoardContext.d.ts.map +1 -0
- package/lib/typescript/src/SortableContainer.d.ts +13 -0
- package/lib/typescript/src/SortableContainer.d.ts.map +1 -0
- package/lib/typescript/src/SortableItem.d.ts +14 -0
- package/lib/typescript/src/SortableItem.d.ts.map +1 -0
- package/lib/typescript/src/SortableItemContext.d.ts +37 -0
- package/lib/typescript/src/SortableItemContext.d.ts.map +1 -0
- package/lib/typescript/src/compat/detectVersion.d.ts +2 -0
- package/lib/typescript/src/compat/detectVersion.d.ts.map +1 -0
- package/lib/typescript/src/compat/index.d.ts +4 -0
- package/lib/typescript/src/compat/index.d.ts.map +1 -0
- package/lib/typescript/src/compat/types.d.ts +33 -0
- package/lib/typescript/src/compat/types.d.ts.map +1 -0
- package/lib/typescript/src/compat/useDraxPanGesture.d.ts +8 -0
- package/lib/typescript/src/compat/useDraxPanGesture.d.ts.map +1 -0
- package/lib/typescript/src/hooks/index.d.ts +3 -0
- package/lib/typescript/src/hooks/index.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useCallbackDispatch.d.ts +40 -0
- package/lib/typescript/src/hooks/useCallbackDispatch.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useDragGesture.d.ts +17 -0
- package/lib/typescript/src/hooks/useDragGesture.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useDraxContext.d.ts +2 -0
- package/lib/typescript/src/hooks/useDraxContext.d.ts.map +1 -0
- package/{build → lib/typescript/src}/hooks/useDraxId.d.ts +1 -0
- package/lib/typescript/src/hooks/useDraxId.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useDraxMethods.d.ts +13 -0
- package/lib/typescript/src/hooks/useDraxMethods.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useDraxScrollHandler.d.ts +27 -0
- package/lib/typescript/src/hooks/useDraxScrollHandler.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useSortableBoard.d.ts +10 -0
- package/lib/typescript/src/hooks/useSortableBoard.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useSortableList.d.ts +11 -0
- package/lib/typescript/src/hooks/useSortableList.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useSpatialIndex.d.ts +22 -0
- package/lib/typescript/src/hooks/useSpatialIndex.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useViewStyles.d.ts +183 -0
- package/lib/typescript/src/hooks/useViewStyles.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useWebScrollFreeze.d.ts +14 -0
- package/lib/typescript/src/hooks/useWebScrollFreeze.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +25 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/math.d.ts +52 -0
- package/lib/typescript/src/math.d.ts.map +1 -0
- package/{build → lib/typescript/src}/params.d.ts +13 -9
- package/lib/typescript/src/params.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +743 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/package.json +164 -34
- package/src/DebugOverlay.tsx +140 -0
- package/src/Drax.ts +33 -0
- package/src/DraxContext.ts +8 -0
- package/src/DraxHandle.tsx +52 -0
- package/src/DraxHandleContext.ts +15 -0
- package/src/DraxList.tsx +181 -0
- package/src/DraxProvider.tsx +224 -0
- package/src/DraxScrollView.tsx +180 -0
- package/src/DraxSubprovider.tsx +22 -0
- package/src/DraxView.tsx +430 -0
- package/src/HoverLayer.tsx +167 -0
- package/src/SortableBoardContainer.tsx +439 -0
- package/src/SortableBoardContext.ts +6 -0
- package/src/SortableContainer.tsx +642 -0
- package/src/SortableItem.tsx +264 -0
- package/src/SortableItemContext.ts +46 -0
- package/src/compat/detectVersion.ts +17 -0
- package/src/compat/index.ts +7 -0
- package/src/compat/types.ts +35 -0
- package/src/compat/useDraxPanGesture.ts +112 -0
- package/src/hooks/index.ts +2 -0
- package/src/hooks/useCallbackDispatch.tsx +823 -0
- package/src/hooks/useDragGesture.ts +273 -0
- package/src/hooks/useDraxContext.ts +11 -0
- package/src/hooks/useDraxId.ts +11 -0
- package/src/hooks/useDraxMethods.ts +71 -0
- package/src/hooks/useDraxScrollHandler.ts +121 -0
- package/src/hooks/useSortableBoard.ts +44 -0
- package/src/hooks/useSortableList.ts +868 -0
- package/src/hooks/useSpatialIndex.ts +336 -0
- package/src/hooks/useViewStyles.ts +180 -0
- package/src/hooks/useWebScrollFreeze.ts +60 -0
- package/src/index.ts +110 -0
- package/src/math.ts +251 -0
- package/src/params.ts +74 -0
- package/src/types.ts +919 -0
- package/.editorconfig +0 -15
- package/.eslintrc.js +0 -4
- package/.prettierrc +0 -16
- package/CHANGELOG.md +0 -270
- package/CODE-OF-CONDUCT.md +0 -85
- package/CONTRIBUTING.md +0 -15
- package/FUNDING.yml +0 -4
- package/build/AllHoverViews.d.ts +0 -0
- package/build/AllHoverViews.js +0 -30
- package/build/DraxContext.d.ts +0 -2
- package/build/DraxContext.js +0 -6
- package/build/DraxList.d.ts +0 -8
- package/build/DraxList.js +0 -512
- package/build/DraxListItem.d.ts +0 -7
- package/build/DraxListItem.js +0 -121
- package/build/DraxProvider.d.ts +0 -2
- package/build/DraxProvider.js +0 -704
- package/build/DraxScrollView.d.ts +0 -6
- package/build/DraxScrollView.js +0 -136
- package/build/DraxSubprovider.d.ts +0 -3
- package/build/DraxSubprovider.js +0 -18
- package/build/DraxView.d.ts +0 -8
- package/build/DraxView.js +0 -93
- package/build/HoverView.d.ts +0 -8
- package/build/HoverView.js +0 -40
- package/build/PanGestureDetector.d.ts +0 -3
- package/build/PanGestureDetector.js +0 -49
- package/build/hooks/index.d.ts +0 -4
- package/build/hooks/index.js +0 -11
- package/build/hooks/useContent.d.ts +0 -23
- package/build/hooks/useContent.js +0 -212
- package/build/hooks/useDraxContext.d.ts +0 -1
- package/build/hooks/useDraxContext.js +0 -13
- package/build/hooks/useDraxId.js +0 -13
- package/build/hooks/useDraxProtocol.d.ts +0 -5
- package/build/hooks/useDraxProtocol.js +0 -32
- package/build/hooks/useDraxRegistry.d.ts +0 -78
- package/build/hooks/useDraxRegistry.js +0 -714
- package/build/hooks/useDraxScrollHandler.d.ts +0 -25
- package/build/hooks/useDraxScrollHandler.js +0 -89
- package/build/hooks/useDraxState.d.ts +0 -10
- package/build/hooks/useDraxState.js +0 -132
- package/build/hooks/useMeasurements.d.ts +0 -9
- package/build/hooks/useMeasurements.js +0 -119
- package/build/hooks/useStatus.d.ts +0 -11
- package/build/hooks/useStatus.js +0 -96
- package/build/index.d.ts +0 -9
- package/build/index.js +0 -33
- package/build/math.d.ts +0 -22
- package/build/math.js +0 -68
- package/build/params.js +0 -27
- package/build/transform.d.ts +0 -11
- package/build/transform.js +0 -59
- package/build/types.d.ts +0 -807
- package/build/types.js +0 -46
- package/docs/concept.md +0 -79
- package/docs/images/color-drag-drop.gif +0 -0
- package/docs/images/deck-cards.gif +0 -0
- package/docs/images/drag-drop-events.jpg +0 -0
- package/docs/images/knight-moves.gif +0 -0
- package/docs/images/reorderable-list.gif +0 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
4
|
+
import { StyleSheet, Text, View } from 'react-native';
|
|
5
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
|
+
function computeAbsoluteEntries(entries, scrollOffsets) {
|
|
7
|
+
return entries.map(entry => {
|
|
8
|
+
let absX = entry.x;
|
|
9
|
+
let absY = entry.y;
|
|
10
|
+
let parentIdx = entry.parentIndex;
|
|
11
|
+
while (parentIdx >= 0 && parentIdx < entries.length) {
|
|
12
|
+
const parent = entries[parentIdx];
|
|
13
|
+
const parentScroll = scrollOffsets[parentIdx] ?? {
|
|
14
|
+
x: 0,
|
|
15
|
+
y: 0
|
|
16
|
+
};
|
|
17
|
+
absX += parent.x - parentScroll.x;
|
|
18
|
+
absY += parent.y - parentScroll.y;
|
|
19
|
+
parentIdx = parent.parentIndex;
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
...entry,
|
|
23
|
+
absX,
|
|
24
|
+
absY
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
function getColor(entry) {
|
|
29
|
+
if (entry.receptive && entry.draggable) return '#e07a52'; // orange — both
|
|
30
|
+
if (entry.receptive) return '#22c55e'; // green — receiver
|
|
31
|
+
if (entry.draggable) return '#3b82f6'; // blue — draggable
|
|
32
|
+
if (entry.monitoring) return '#eab308'; // yellow — monitor
|
|
33
|
+
return '#888888'; // grey — passive
|
|
34
|
+
}
|
|
35
|
+
function getLabel(entry) {
|
|
36
|
+
const parts = [];
|
|
37
|
+
if (entry.draggable) parts.push('D');
|
|
38
|
+
if (entry.receptive) parts.push('R');
|
|
39
|
+
if (entry.monitoring) parts.push('M');
|
|
40
|
+
return parts.join('+') || '?';
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Debug overlay that visualizes all registered Drax views.
|
|
45
|
+
* Reads the spatial index SharedValue and renders colored borders
|
|
46
|
+
* showing view bounds, roles (draggable/receptive/monitoring), and IDs.
|
|
47
|
+
*
|
|
48
|
+
* Rendered as an absolute-fill sibling in DraxProvider when debug={true}.
|
|
49
|
+
*/
|
|
50
|
+
export const DebugOverlay = ({
|
|
51
|
+
spatialIndexSV,
|
|
52
|
+
scrollOffsetsSV
|
|
53
|
+
}) => {
|
|
54
|
+
const [entries, setEntries] = useState([]);
|
|
55
|
+
|
|
56
|
+
// Poll the spatial index periodically (SharedValues update on UI thread,
|
|
57
|
+
// reading .value on JS thread gives the latest committed value).
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
const update = () => {
|
|
60
|
+
const raw = spatialIndexSV.value;
|
|
61
|
+
const scrolls = scrollOffsetsSV.value;
|
|
62
|
+
if (raw.length > 0) {
|
|
63
|
+
setEntries(computeAbsoluteEntries(raw, scrolls));
|
|
64
|
+
} else {
|
|
65
|
+
setEntries([]);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
update();
|
|
69
|
+
const interval = setInterval(update, 500);
|
|
70
|
+
return () => clearInterval(interval);
|
|
71
|
+
}, [spatialIndexSV, scrollOffsetsSV]);
|
|
72
|
+
if (entries.length === 0) return null;
|
|
73
|
+
return /*#__PURE__*/_jsx(View, {
|
|
74
|
+
style: styles.container,
|
|
75
|
+
pointerEvents: "none",
|
|
76
|
+
children: entries.map(entry => {
|
|
77
|
+
const color = getColor(entry);
|
|
78
|
+
const label = getLabel(entry);
|
|
79
|
+
return /*#__PURE__*/_jsx(View, {
|
|
80
|
+
style: [styles.overlay, {
|
|
81
|
+
left: entry.absX,
|
|
82
|
+
top: entry.absY,
|
|
83
|
+
width: entry.width,
|
|
84
|
+
height: entry.height,
|
|
85
|
+
borderColor: color
|
|
86
|
+
}],
|
|
87
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
88
|
+
style: [styles.label, {
|
|
89
|
+
backgroundColor: color
|
|
90
|
+
}],
|
|
91
|
+
children: label
|
|
92
|
+
})
|
|
93
|
+
}, entry.id);
|
|
94
|
+
})
|
|
95
|
+
});
|
|
96
|
+
};
|
|
97
|
+
const styles = StyleSheet.create({
|
|
98
|
+
container: {
|
|
99
|
+
...StyleSheet.absoluteFillObject,
|
|
100
|
+
zIndex: 99999
|
|
101
|
+
},
|
|
102
|
+
overlay: {
|
|
103
|
+
position: 'absolute',
|
|
104
|
+
borderWidth: 2,
|
|
105
|
+
borderStyle: 'dashed'
|
|
106
|
+
},
|
|
107
|
+
label: {
|
|
108
|
+
position: 'absolute',
|
|
109
|
+
top: -1,
|
|
110
|
+
left: -1,
|
|
111
|
+
color: '#fff',
|
|
112
|
+
fontSize: 9,
|
|
113
|
+
fontWeight: '700',
|
|
114
|
+
fontFamily: 'monospace',
|
|
115
|
+
paddingHorizontal: 3,
|
|
116
|
+
paddingVertical: 1,
|
|
117
|
+
borderRadius: 2,
|
|
118
|
+
overflow: 'hidden'
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
//# sourceMappingURL=DebugOverlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useState","StyleSheet","Text","View","jsx","_jsx","computeAbsoluteEntries","entries","scrollOffsets","map","entry","absX","x","absY","y","parentIdx","parentIndex","length","parent","parentScroll","getColor","receptive","draggable","monitoring","getLabel","parts","push","join","DebugOverlay","spatialIndexSV","scrollOffsetsSV","setEntries","update","raw","value","scrolls","interval","setInterval","clearInterval","style","styles","container","pointerEvents","children","color","label","overlay","left","top","width","height","borderColor","backgroundColor","id","create","absoluteFillObject","zIndex","position","borderWidth","borderStyle","fontSize","fontWeight","fontFamily","paddingHorizontal","paddingVertical","borderRadius","overflow"],"sourceRoot":"../../src","sources":["DebugOverlay.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { DraxHandle } from "./DraxHandle.js";
|
|
4
|
+
import { DraxList } from "./DraxList.js";
|
|
5
|
+
import { DraxProvider } from "./DraxProvider.js";
|
|
6
|
+
import { DraxScrollView } from "./DraxScrollView.js";
|
|
7
|
+
import { DraxView } from "./DraxView.js";
|
|
8
|
+
import { SortableBoardContainer } from "./SortableBoardContainer.js";
|
|
9
|
+
import { SortableContainer } from "./SortableContainer.js";
|
|
10
|
+
import { SortableItem } from "./SortableItem.js";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Namespace object for convenient access to all Drax components.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```tsx
|
|
17
|
+
* import { Drax } from 'react-native-drax';
|
|
18
|
+
*
|
|
19
|
+
* <Drax.Provider>
|
|
20
|
+
* <Drax.View draggable>
|
|
21
|
+
* <Drax.Handle><GripIcon /></Drax.Handle>
|
|
22
|
+
* </Drax.View>
|
|
23
|
+
* </Drax.Provider>
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export const Drax = {
|
|
27
|
+
Handle: DraxHandle,
|
|
28
|
+
List: DraxList,
|
|
29
|
+
Provider: DraxProvider,
|
|
30
|
+
ScrollView: DraxScrollView,
|
|
31
|
+
View: DraxView,
|
|
32
|
+
SortableBoardContainer,
|
|
33
|
+
SortableContainer,
|
|
34
|
+
SortableItem
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=Drax.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DraxHandle","DraxList","DraxProvider","DraxScrollView","DraxView","SortableBoardContainer","SortableContainer","SortableItem","Drax","Handle","List","Provider","ScrollView","View"],"sourceRoot":"../../src","sources":["Drax.ts"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,iBAAc;AACzC,SAASC,QAAQ,QAAQ,eAAY;AACrC,SAASC,YAAY,QAAQ,mBAAgB;AAC7C,SAASC,cAAc,QAAQ,qBAAkB;AACjD,SAASC,QAAQ,QAAQ,eAAY;AACrC,SAASC,sBAAsB,QAAQ,6BAA0B;AACjE,SAASC,iBAAiB,QAAQ,wBAAqB;AACvD,SAASC,YAAY,QAAQ,mBAAgB;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,IAAI,GAAG;EAClBC,MAAM,EAAET,UAAU;EAClBU,IAAI,EAAET,QAAQ;EACdU,QAAQ,EAAET,YAAY;EACtBU,UAAU,EAAET,cAAc;EAC1BU,IAAI,EAAET,QAAQ;EACdC,sBAAsB;EACtBC,iBAAiB;EACjBC;AACF,CAAU","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createContext","DraxContext","undefined","displayName"],"sourceRoot":"../../src","sources":["DraxContext.ts"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,OAAO;AAIrC,OAAO,MAAMC,WAAW,gBAAGD,aAAa,CACtCE,SACF,CAAC;AACDD,WAAW,CAACE,WAAW,GAAG,MAAM","ignoreList":[]}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { use } from 'react';
|
|
4
|
+
import { GestureDetector } from 'react-native-gesture-handler';
|
|
5
|
+
import Reanimated from 'react-native-reanimated';
|
|
6
|
+
import { DraxHandleContext } from "./DraxHandleContext.js";
|
|
7
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
|
+
/**
|
|
9
|
+
* Drag handle component — only touches on this area will start a drag.
|
|
10
|
+
*
|
|
11
|
+
* Must be a descendant of a `DraxView` that has `dragHandle={true}`.
|
|
12
|
+
* The parent DraxView provides its gesture via context; this component
|
|
13
|
+
* attaches it to the handle's touch area via GestureDetector.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```tsx
|
|
17
|
+
* <DraxView dragHandle style={styles.row}>
|
|
18
|
+
* <DraxHandle style={styles.grip}>
|
|
19
|
+
* <GripIcon />
|
|
20
|
+
* </DraxHandle>
|
|
21
|
+
* <Text>Item content</Text>
|
|
22
|
+
* </DraxView>
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export function DraxHandle({
|
|
26
|
+
children,
|
|
27
|
+
style
|
|
28
|
+
}) {
|
|
29
|
+
const ctx = use(DraxHandleContext);
|
|
30
|
+
if (!ctx) {
|
|
31
|
+
// No context = either misconfigured, or rendering inside hover overlay
|
|
32
|
+
// (which clones children outside the DraxHandleContext tree).
|
|
33
|
+
// Render as a plain view — the gesture isn't needed in hover.
|
|
34
|
+
return /*#__PURE__*/_jsx(Reanimated.View, {
|
|
35
|
+
style: style,
|
|
36
|
+
children: children
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
return /*#__PURE__*/_jsx(GestureDetector, {
|
|
40
|
+
gesture: ctx.gesture,
|
|
41
|
+
children: /*#__PURE__*/_jsx(Reanimated.View, {
|
|
42
|
+
style: style,
|
|
43
|
+
children: children
|
|
44
|
+
})
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=DraxHandle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["use","GestureDetector","Reanimated","DraxHandleContext","jsx","_jsx","DraxHandle","children","style","ctx","View","gesture"],"sourceRoot":"../../src","sources":["DraxHandle.tsx"],"mappings":";;AACA,SAASA,GAAG,QAAQ,OAAO;AAE3B,SAASC,eAAe,QAAQ,8BAA8B;AAC9D,OAAOC,UAAU,MAAM,yBAAyB;AAEhD,SAASC,iBAAiB,QAAQ,wBAAqB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAOxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,UAAUA,CAAC;EAAEC,QAAQ;EAAEC;AAAuB,CAAC,EAAE;EAC/D,MAAMC,GAAG,GAAGT,GAAG,CAACG,iBAAiB,CAAC;EAElC,IAAI,CAACM,GAAG,EAAE;IACR;IACA;IACA;IACA,oBACEJ,IAAA,CAACH,UAAU,CAACQ,IAAI;MAACF,KAAK,EAAEA,KAAM;MAAAD,QAAA,EAC3BA;IAAQ,CACM,CAAC;EAEtB;EAEA,oBACEF,IAAA,CAACJ,eAAe;IAACU,OAAO,EAAEF,GAAG,CAACE,OAAQ;IAAAJ,QAAA,eACpCF,IAAA,CAACH,UAAU,CAACQ,IAAI;MAACF,KAAK,EAAEA,KAAM;MAAAD,QAAA,EAC3BA;IAAQ,CACM;EAAC,CACH,CAAC;AAEtB","ignoreList":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { createContext } from 'react';
|
|
4
|
+
/**
|
|
5
|
+
* Context that passes the drag gesture from a DraxView (with `dragHandle` prop)
|
|
6
|
+
* to its descendant DraxHandle component. When a DraxView has `dragHandle={true}`,
|
|
7
|
+
* it does NOT wrap itself in a GestureDetector. Instead, the gesture is provided
|
|
8
|
+
* via this context so that DraxHandle can attach it to a smaller touch area.
|
|
9
|
+
*/
|
|
10
|
+
export const DraxHandleContext = /*#__PURE__*/createContext(null);
|
|
11
|
+
//# sourceMappingURL=DraxHandleContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createContext","DraxHandleContext"],"sourceRoot":"../../src","sources":["DraxHandleContext.ts"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,OAAO;AAQrC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,iBAAiB,gBAAGD,aAAa,CAAgC,IAAI,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useRef } from 'react';
|
|
4
|
+
import { useSortableList } from "./hooks/useSortableList.js";
|
|
5
|
+
import { SortableContainer } from "./SortableContainer.js";
|
|
6
|
+
import { SortableItem } from "./SortableItem.js";
|
|
7
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
|
+
/**
|
|
9
|
+
* List-agnostic sortable list component.
|
|
10
|
+
*
|
|
11
|
+
* Wraps any list component (FlatList, FlashList, LegendList, etc.) with
|
|
12
|
+
* drag-and-drop reordering powered by `useSortableList` + `SortableContainer` + `SortableItem`.
|
|
13
|
+
*
|
|
14
|
+
* For full control, use the composable API directly:
|
|
15
|
+
* `useSortableList` + `SortableContainer` + `SortableItem`.
|
|
16
|
+
*
|
|
17
|
+
* Any extra props beyond the ones defined in `DraxListProps` are forwarded
|
|
18
|
+
* to the underlying list component (e.g. `estimatedItemSize` for FlashList).
|
|
19
|
+
*/
|
|
20
|
+
export const DraxList = ({
|
|
21
|
+
component: ListComponent,
|
|
22
|
+
ref,
|
|
23
|
+
id,
|
|
24
|
+
data,
|
|
25
|
+
keyExtractor,
|
|
26
|
+
onReorder,
|
|
27
|
+
renderItem,
|
|
28
|
+
reorderStrategy,
|
|
29
|
+
longPressDelay,
|
|
30
|
+
lockToMainAxis,
|
|
31
|
+
animationConfig,
|
|
32
|
+
inactiveItemStyle,
|
|
33
|
+
itemEntering,
|
|
34
|
+
itemExiting,
|
|
35
|
+
itemDraxViewProps,
|
|
36
|
+
containerDraxViewProps,
|
|
37
|
+
containerStyle,
|
|
38
|
+
onDragStart,
|
|
39
|
+
onDragPositionChange,
|
|
40
|
+
onDragEnd,
|
|
41
|
+
style,
|
|
42
|
+
horizontal,
|
|
43
|
+
numColumns,
|
|
44
|
+
...listProps
|
|
45
|
+
}) => {
|
|
46
|
+
const isHorizontal = horizontal ?? false;
|
|
47
|
+
const cols = numColumns ?? 1;
|
|
48
|
+
const sortable = useSortableList({
|
|
49
|
+
id,
|
|
50
|
+
data,
|
|
51
|
+
keyExtractor,
|
|
52
|
+
onReorder,
|
|
53
|
+
horizontal: isHorizontal,
|
|
54
|
+
numColumns: cols,
|
|
55
|
+
reorderStrategy,
|
|
56
|
+
longPressDelay,
|
|
57
|
+
lockToMainAxis,
|
|
58
|
+
animationConfig,
|
|
59
|
+
inactiveItemStyle,
|
|
60
|
+
itemEntering,
|
|
61
|
+
itemExiting,
|
|
62
|
+
onDragStart,
|
|
63
|
+
onDragPositionChange,
|
|
64
|
+
onDragEnd
|
|
65
|
+
});
|
|
66
|
+
const listRef = useRef(null);
|
|
67
|
+
|
|
68
|
+
// Forward external ref
|
|
69
|
+
const setRef = instance => {
|
|
70
|
+
listRef.current = instance;
|
|
71
|
+
if (ref) {
|
|
72
|
+
if (typeof ref === 'function') {
|
|
73
|
+
ref(instance);
|
|
74
|
+
} else {
|
|
75
|
+
ref.current = instance;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
// Lazy-load FlatList only when no component is provided.
|
|
81
|
+
// This avoids importing react-native's FlatList at module scope
|
|
82
|
+
// when the consumer uses a different list component.
|
|
83
|
+
const ResolvedList = ListComponent ?? require('react-native').FlatList;
|
|
84
|
+
return /*#__PURE__*/_jsx(SortableContainer, {
|
|
85
|
+
sortable: sortable,
|
|
86
|
+
scrollRef: listRef,
|
|
87
|
+
style: containerStyle,
|
|
88
|
+
draxViewProps: containerDraxViewProps,
|
|
89
|
+
children: /*#__PURE__*/_jsx(ResolvedList, {
|
|
90
|
+
...listProps,
|
|
91
|
+
style: style,
|
|
92
|
+
ref: setRef,
|
|
93
|
+
horizontal: isHorizontal,
|
|
94
|
+
keyExtractor: sortable.stableKeyExtractor,
|
|
95
|
+
numColumns: cols,
|
|
96
|
+
data: sortable.data,
|
|
97
|
+
onScroll: sortable.onScroll,
|
|
98
|
+
onContentSizeChange: sortable.onContentSizeChange,
|
|
99
|
+
renderItem: info => /*#__PURE__*/_jsx(SortableItem, {
|
|
100
|
+
sortable: sortable,
|
|
101
|
+
index: info.index,
|
|
102
|
+
...itemDraxViewProps,
|
|
103
|
+
children: renderItem(info)
|
|
104
|
+
})
|
|
105
|
+
})
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
//# sourceMappingURL=DraxList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useRef","useSortableList","SortableContainer","SortableItem","jsx","_jsx","DraxList","component","ListComponent","ref","id","data","keyExtractor","onReorder","renderItem","reorderStrategy","longPressDelay","lockToMainAxis","animationConfig","inactiveItemStyle","itemEntering","itemExiting","itemDraxViewProps","containerDraxViewProps","containerStyle","onDragStart","onDragPositionChange","onDragEnd","style","horizontal","numColumns","listProps","isHorizontal","cols","sortable","listRef","setRef","instance","current","ResolvedList","require","FlatList","scrollRef","draxViewProps","children","stableKeyExtractor","onScroll","onContentSizeChange","info","index"],"sourceRoot":"../../src","sources":["DraxList.tsx"],"mappings":";;AACA,SAASA,MAAM,QAAQ,OAAO;AAQ9B,SAASC,eAAe,QAAQ,4BAAyB;AACzD,SAASC,iBAAiB,QAAQ,wBAAqB;AACvD,SAASC,YAAY,QAAQ,mBAAgB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AA6D9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,QAAQ,GAAGA,CAAK;EAC3BC,SAAS,EAAEC,aAAa;EACxBC,GAAG;EACHC,EAAE;EACFC,IAAI;EACJC,YAAY;EACZC,SAAS;EACTC,UAAU;EACVC,eAAe;EACfC,cAAc;EACdC,cAAc;EACdC,eAAe;EACfC,iBAAiB;EACjBC,YAAY;EACZC,WAAW;EACXC,iBAAiB;EACjBC,sBAAsB;EACtBC,cAAc;EACdC,WAAW;EACXC,oBAAoB;EACpBC,SAAS;EACTC,KAAK;EACLC,UAAU;EACVC,UAAU;EACV,GAAGC;AACmC,CAAC,KAAgB;EACvD,MAAMC,YAAY,GAAGH,UAAU,IAAI,KAAK;EACxC,MAAMI,IAAI,GAAGH,UAAU,IAAI,CAAC;EAE5B,MAAMI,QAAQ,GAAGjC,eAAe,CAAC;IAC/BS,EAAE;IACFC,IAAI;IACJC,YAAY;IACZC,SAAS;IACTgB,UAAU,EAAEG,YAAY;IACxBF,UAAU,EAAEG,IAAI;IAChBlB,eAAe;IACfC,cAAc;IACdC,cAAc;IACdC,eAAe;IACfC,iBAAiB;IACjBC,YAAY;IACZC,WAAW;IACXI,WAAW;IACXC,oBAAoB;IACpBC;EACF,CAAC,CAAC;EAEF,MAAMQ,OAAO,GAAGnC,MAAM,CAAc,IAAI,CAAC;;EAEzC;EACA,MAAMoC,MAAM,GAAIC,QAA4B,IAAK;IAC9CF,OAAO,CAASG,OAAO,GAAGD,QAAQ;IACnC,IAAI5B,GAAG,EAAE;MACP,IAAI,OAAOA,GAAG,KAAK,UAAU,EAAE;QAC7BA,GAAG,CAAC4B,QAAQ,CAAC;MACf,CAAC,MAAM;QACJ5B,GAAG,CAAS6B,OAAO,GAAGD,QAAQ;MACjC;IACF;EACF,CAAC;;EAED;EACA;EACA;EACA,MAAME,YAAY,GAAG/B,aAAa,IAAIgC,OAAO,CAAC,cAAc,CAAC,CAACC,QAAQ;EAEtE,oBACEpC,IAAA,CAACH,iBAAiB;IAChBgC,QAAQ,EAAEA,QAAS;IACnBQ,SAAS,EAAEP,OAAQ;IACnBP,KAAK,EAAEJ,cAAe;IACtBmB,aAAa,EAAEpB,sBAAuB;IAAAqB,QAAA,eAEtCvC,IAAA,CAACkC,YAAY;MAAA,GACPR,SAAS;MACbH,KAAK,EAAEA,KAAM;MACbnB,GAAG,EAAE2B,MAAO;MACZP,UAAU,EAAEG,YAAa;MACzBpB,YAAY,EAAEsB,QAAQ,CAACW,kBAAmB;MAC1Cf,UAAU,EAAEG,IAAK;MACjBtB,IAAI,EAAEuB,QAAQ,CAACvB,IAAK;MACpBmC,QAAQ,EAAEZ,QAAQ,CAACY,QAAS;MAC5BC,mBAAmB,EAAEb,QAAQ,CAACa,mBAAoB;MAClDjC,UAAU,EAAGkC,IAA2B,iBACtC3C,IAAA,CAACF,YAAY;QACX+B,QAAQ,EAAEA,QAAS;QACnBe,KAAK,EAAED,IAAI,CAACC,KAAM;QAAA,GACd3B,iBAAiB;QAAAsB,QAAA,EAEpB9B,UAAU,CAACkC,IAAI;MAAC,CACL;IACd,CACH;EAAC,CACe,CAAC;AAExB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useCallback, useMemo, useRef, useState } from 'react';
|
|
4
|
+
import { StyleSheet, View } from 'react-native';
|
|
5
|
+
import { useSharedValue } from 'react-native-reanimated';
|
|
6
|
+
import { DebugOverlay } from "./DebugOverlay.js";
|
|
7
|
+
import { DraxContext } from "./DraxContext.js";
|
|
8
|
+
import { HoverLayer } from "./HoverLayer.js";
|
|
9
|
+
import { useCallbackDispatch } from "./hooks/useCallbackDispatch.js";
|
|
10
|
+
import { useSpatialIndex } from "./hooks/useSpatialIndex.js";
|
|
11
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
|
+
export const DraxProvider = ({
|
|
13
|
+
style = styles.provider,
|
|
14
|
+
debug = false,
|
|
15
|
+
onDragStart: onProviderDragStart,
|
|
16
|
+
onDrag: onProviderDrag,
|
|
17
|
+
onDragEnd: onProviderDragEnd,
|
|
18
|
+
children
|
|
19
|
+
}) => {
|
|
20
|
+
// ── Split SharedValues (by update frequency) ───────────────────────
|
|
21
|
+
// Changes ~2x per drag. Read by all DraxView useAnimatedStyle.
|
|
22
|
+
const draggedIdSV = useSharedValue('');
|
|
23
|
+
// Changes ~3-5x per drag. Read by all DraxView useAnimatedStyle.
|
|
24
|
+
const receiverIdSV = useSharedValue('');
|
|
25
|
+
// Changes ~3x per drag. Read by all DraxView useAnimatedStyle.
|
|
26
|
+
const dragPhaseSV = useSharedValue('idle');
|
|
27
|
+
// Changes every frame during drag. Read ONLY by HoverLayer (1 component).
|
|
28
|
+
const hoverPositionSV = useSharedValue({
|
|
29
|
+
x: 0,
|
|
30
|
+
y: 0
|
|
31
|
+
});
|
|
32
|
+
// Changes every frame during drag. Used by gesture worklet for hit-testing.
|
|
33
|
+
// NOT read by any useAnimatedStyle.
|
|
34
|
+
const dragAbsolutePositionSV = useSharedValue({
|
|
35
|
+
x: 0,
|
|
36
|
+
y: 0
|
|
37
|
+
});
|
|
38
|
+
// ID of the most recently rejected receiver. Read by gesture worklet to skip
|
|
39
|
+
// re-detecting the same rejected receiver. Cleared when drag leaves its bounds.
|
|
40
|
+
const rejectedReceiverIdSV = useSharedValue('');
|
|
41
|
+
// Set once per drag start.
|
|
42
|
+
const grabOffsetSV = useSharedValue({
|
|
43
|
+
x: 0,
|
|
44
|
+
y: 0
|
|
45
|
+
});
|
|
46
|
+
const startPositionSV = useSharedValue({
|
|
47
|
+
x: 0,
|
|
48
|
+
y: 0
|
|
49
|
+
});
|
|
50
|
+
// Screen offset of the root view (measured on layout).
|
|
51
|
+
const rootOffsetSV = useSharedValue({
|
|
52
|
+
x: 0,
|
|
53
|
+
y: 0
|
|
54
|
+
});
|
|
55
|
+
// True after hover content is committed to DOM. False after snap completes.
|
|
56
|
+
const hoverReadySV = useSharedValue(false);
|
|
57
|
+
// Set by SortableContainer.finalizeDrag to defer hover clearing to useLayoutEffect.
|
|
58
|
+
const hoverClearDeferredRef = useRef(false);
|
|
59
|
+
// Animated dimensions for hover content during cross-container transfer.
|
|
60
|
+
// x = width, y = height. {0,0} = no constraint (natural size).
|
|
61
|
+
const hoverDimsSV = useSharedValue({
|
|
62
|
+
x: 0,
|
|
63
|
+
y: 0
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
// ── Dropped items tracking ─────────────────────────────────────────
|
|
67
|
+
const droppedItemsRef = useRef(new Map());
|
|
68
|
+
|
|
69
|
+
// ── Spatial index + registry ───────────────────────────────────────
|
|
70
|
+
const {
|
|
71
|
+
spatialIndexSV,
|
|
72
|
+
scrollOffsetsSV,
|
|
73
|
+
registerView,
|
|
74
|
+
unregisterView,
|
|
75
|
+
updateMeasurements,
|
|
76
|
+
updateScrollOffset,
|
|
77
|
+
updateViewProps,
|
|
78
|
+
getViewEntry
|
|
79
|
+
} = useSpatialIndex();
|
|
80
|
+
|
|
81
|
+
// ── Hover content (ref-based to avoid provider re-renders) ─────────
|
|
82
|
+
// Store content in a ref so changing it doesn't re-render the entire tree.
|
|
83
|
+
// Only HoverLayer re-renders via the version counter.
|
|
84
|
+
const hoverContentRef = useRef(null);
|
|
85
|
+
const hoverStylesRef = useRef(null);
|
|
86
|
+
const [hoverVersion, setHoverVersion] = useState(0);
|
|
87
|
+
const setHoverContent = useCallback(content => {
|
|
88
|
+
hoverContentRef.current = content;
|
|
89
|
+
if (content === null) {
|
|
90
|
+
hoverStylesRef.current = null;
|
|
91
|
+
}
|
|
92
|
+
setHoverVersion(v => v + 1);
|
|
93
|
+
}, []);
|
|
94
|
+
|
|
95
|
+
// ── Callback dispatch ──────────────────────────────────────────────
|
|
96
|
+
const {
|
|
97
|
+
handleDragStart,
|
|
98
|
+
handleReceiverChange,
|
|
99
|
+
handleDragEnd
|
|
100
|
+
} = useCallbackDispatch({
|
|
101
|
+
getViewEntry,
|
|
102
|
+
spatialIndexSV,
|
|
103
|
+
scrollOffsetsSV,
|
|
104
|
+
draggedIdSV,
|
|
105
|
+
receiverIdSV,
|
|
106
|
+
rejectedReceiverIdSV,
|
|
107
|
+
dragPhaseSV,
|
|
108
|
+
hoverPositionSV,
|
|
109
|
+
grabOffsetSV,
|
|
110
|
+
startPositionSV,
|
|
111
|
+
setHoverContent,
|
|
112
|
+
hoverReadySV,
|
|
113
|
+
hoverClearDeferredRef,
|
|
114
|
+
hoverStylesRef,
|
|
115
|
+
onProviderDragStart,
|
|
116
|
+
onProviderDrag,
|
|
117
|
+
onProviderDragEnd,
|
|
118
|
+
droppedItemsRef
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
// ── Root view ref ──────────────────────────────────────────────────
|
|
122
|
+
const rootViewRef = useRef(null);
|
|
123
|
+
const setRootViewRef = ref => {
|
|
124
|
+
rootViewRef.current = ref;
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
// Measure root view's screen position on layout
|
|
128
|
+
const handleRootLayout = useCallback(() => {
|
|
129
|
+
const view = rootViewRef.current;
|
|
130
|
+
if (view) {
|
|
131
|
+
view.measure((_x, _y, _w, _h, pageX, pageY) => {
|
|
132
|
+
rootOffsetSV.value = {
|
|
133
|
+
x: pageX,
|
|
134
|
+
y: pageY
|
|
135
|
+
};
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}, [rootOffsetSV]);
|
|
139
|
+
|
|
140
|
+
// ── Stable context value ───────────────────────────────────────────
|
|
141
|
+
const contextValue = useMemo(() => ({
|
|
142
|
+
// SharedValues
|
|
143
|
+
draggedIdSV,
|
|
144
|
+
receiverIdSV,
|
|
145
|
+
dragPhaseSV,
|
|
146
|
+
hoverPositionSV,
|
|
147
|
+
dragAbsolutePositionSV,
|
|
148
|
+
rejectedReceiverIdSV,
|
|
149
|
+
spatialIndexSV,
|
|
150
|
+
scrollOffsetsSV,
|
|
151
|
+
grabOffsetSV,
|
|
152
|
+
startPositionSV,
|
|
153
|
+
rootOffsetSV,
|
|
154
|
+
hoverReadySV,
|
|
155
|
+
hoverClearDeferredRef,
|
|
156
|
+
hoverDimsSV,
|
|
157
|
+
// Registry methods
|
|
158
|
+
registerView,
|
|
159
|
+
unregisterView,
|
|
160
|
+
updateMeasurements,
|
|
161
|
+
updateScrollOffset,
|
|
162
|
+
updateViewProps,
|
|
163
|
+
getViewEntry,
|
|
164
|
+
// Callback dispatch
|
|
165
|
+
handleDragStart,
|
|
166
|
+
handleReceiverChange,
|
|
167
|
+
handleDragEnd,
|
|
168
|
+
// Hover content
|
|
169
|
+
setHoverContent,
|
|
170
|
+
// Dropped items
|
|
171
|
+
droppedItemsRef,
|
|
172
|
+
// Refs
|
|
173
|
+
rootViewRef
|
|
174
|
+
}), [draggedIdSV, receiverIdSV, dragPhaseSV, hoverPositionSV, dragAbsolutePositionSV, rejectedReceiverIdSV, spatialIndexSV, scrollOffsetsSV, grabOffsetSV, startPositionSV, rootOffsetSV, hoverReadySV, hoverClearDeferredRef, hoverDimsSV, registerView, unregisterView, updateMeasurements, updateScrollOffset, updateViewProps, getViewEntry, handleDragStart, handleReceiverChange, handleDragEnd, setHoverContent, droppedItemsRef]);
|
|
175
|
+
return /*#__PURE__*/_jsx(DraxContext, {
|
|
176
|
+
value: contextValue,
|
|
177
|
+
children: /*#__PURE__*/_jsxs(View, {
|
|
178
|
+
style: style,
|
|
179
|
+
ref: setRootViewRef,
|
|
180
|
+
onLayout: handleRootLayout,
|
|
181
|
+
collapsable: false,
|
|
182
|
+
children: [children, debug && /*#__PURE__*/_jsx(DebugOverlay, {
|
|
183
|
+
spatialIndexSV: spatialIndexSV,
|
|
184
|
+
scrollOffsetsSV: scrollOffsetsSV
|
|
185
|
+
}), /*#__PURE__*/_jsx(HoverLayer, {
|
|
186
|
+
hoverContentRef: hoverContentRef,
|
|
187
|
+
hoverVersion: hoverVersion,
|
|
188
|
+
hoverPositionSV: hoverPositionSV,
|
|
189
|
+
dragPhaseSV: dragPhaseSV,
|
|
190
|
+
receiverIdSV: receiverIdSV,
|
|
191
|
+
hoverReadySV: hoverReadySV,
|
|
192
|
+
hoverDimsSV: hoverDimsSV,
|
|
193
|
+
hoverStylesRef: hoverStylesRef
|
|
194
|
+
})]
|
|
195
|
+
})
|
|
196
|
+
});
|
|
197
|
+
};
|
|
198
|
+
const styles = StyleSheet.create({
|
|
199
|
+
provider: {
|
|
200
|
+
flex: 1
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
//# sourceMappingURL=DraxProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useMemo","useRef","useState","StyleSheet","View","useSharedValue","DebugOverlay","DraxContext","HoverLayer","useCallbackDispatch","useSpatialIndex","jsx","_jsx","jsxs","_jsxs","DraxProvider","style","styles","provider","debug","onDragStart","onProviderDragStart","onDrag","onProviderDrag","onDragEnd","onProviderDragEnd","children","draggedIdSV","receiverIdSV","dragPhaseSV","hoverPositionSV","x","y","dragAbsolutePositionSV","rejectedReceiverIdSV","grabOffsetSV","startPositionSV","rootOffsetSV","hoverReadySV","hoverClearDeferredRef","hoverDimsSV","droppedItemsRef","Map","spatialIndexSV","scrollOffsetsSV","registerView","unregisterView","updateMeasurements","updateScrollOffset","updateViewProps","getViewEntry","hoverContentRef","hoverStylesRef","hoverVersion","setHoverVersion","setHoverContent","content","current","v","handleDragStart","handleReceiverChange","handleDragEnd","rootViewRef","setRootViewRef","ref","handleRootLayout","view","measure","_x","_y","_w","_h","pageX","pageY","value","contextValue","onLayout","collapsable","create","flex"],"sourceRoot":"../../src","sources":["DraxProvider.tsx"],"mappings":"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","ignoreList":[]}
|