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,226 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { memo, useEffect, useMemo, useRef } from 'react';
|
|
4
|
+
import { Platform } from 'react-native';
|
|
5
|
+
import { useDerivedValue, useSharedValue } from 'react-native-reanimated';
|
|
6
|
+
import Reanimated, { Easing, useAnimatedStyle, useReducedMotion, withSpring, withTiming } from 'react-native-reanimated';
|
|
7
|
+
import { DraxView } from "./DraxView.js";
|
|
8
|
+
import { useDraxContext } from "./hooks/useDraxContext.js";
|
|
9
|
+
import { SortableItemContext } from "./SortableItemContext.js";
|
|
10
|
+
import { resolveAnimationConfig } from "./params.js";
|
|
11
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
|
+
/**
|
|
13
|
+
* Isolated hook for SortableItem animated style.
|
|
14
|
+
* Kept separate so the worklet closure only contains SharedValues —
|
|
15
|
+
* never React refs from the component scope.
|
|
16
|
+
*/
|
|
17
|
+
function useSortableItemStyle(hoverReadySV, draggedIdSV, viewIdSV, shiftsValidSV, shiftsRef, instantClearSV, itemKey, animConfig, reducedMotion, inactiveItemStyle) {
|
|
18
|
+
return useAnimatedStyle(() => {
|
|
19
|
+
// Guard: viewIdSV starts as '' before DraxView registers. Without the
|
|
20
|
+
// non-empty check, a newly mounted item would match a cleared draggedIdSV ('')
|
|
21
|
+
// and be hidden (opacity 0) until hoverReadySV clears — visible in cross-container transfers.
|
|
22
|
+
const isDragged = hoverReadySV.value && viewIdSV.value !== '' && draggedIdSV.value === viewIdSV.value;
|
|
23
|
+
const dragActive = draggedIdSV.value !== '';
|
|
24
|
+
const valid = shiftsValidSV.value;
|
|
25
|
+
const shifts = shiftsRef.value;
|
|
26
|
+
const shift = valid && itemKey ? shifts[itemKey] : undefined;
|
|
27
|
+
const instant = instantClearSV.value;
|
|
28
|
+
// When shifts are invalidated (data committing), snap to 0 instantly — no animation.
|
|
29
|
+
// When reduced motion is on, skip all animations.
|
|
30
|
+
const skipAnimation = instant || !valid || reducedMotion;
|
|
31
|
+
const toX = shift?.x ?? 0;
|
|
32
|
+
const toY = shift?.y ?? 0;
|
|
33
|
+
let translateX;
|
|
34
|
+
let translateY;
|
|
35
|
+
if (skipAnimation) {
|
|
36
|
+
translateX = toX;
|
|
37
|
+
translateY = toY;
|
|
38
|
+
} else if (animConfig.useSpring) {
|
|
39
|
+
const springConfig = {
|
|
40
|
+
damping: animConfig.springDamping,
|
|
41
|
+
stiffness: animConfig.springStiffness,
|
|
42
|
+
mass: animConfig.springMass
|
|
43
|
+
};
|
|
44
|
+
translateX = withSpring(toX, springConfig);
|
|
45
|
+
translateY = withSpring(toY, springConfig);
|
|
46
|
+
} else {
|
|
47
|
+
const timingConfig = {
|
|
48
|
+
duration: animConfig.shiftDuration,
|
|
49
|
+
easing: Easing.linear
|
|
50
|
+
};
|
|
51
|
+
translateX = withTiming(toX, timingConfig);
|
|
52
|
+
translateY = withTiming(toY, timingConfig);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Apply inactive style to non-dragged items while a drag is active
|
|
56
|
+
const isInactive = dragActive && !isDragged;
|
|
57
|
+
return {
|
|
58
|
+
opacity: isDragged ? 0 : 1,
|
|
59
|
+
transform: [{
|
|
60
|
+
translateX
|
|
61
|
+
}, {
|
|
62
|
+
translateY
|
|
63
|
+
}],
|
|
64
|
+
...(isInactive && inactiveItemStyle ? inactiveItemStyle : {})
|
|
65
|
+
};
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
const SortableItemInner = ({
|
|
69
|
+
sortable,
|
|
70
|
+
index,
|
|
71
|
+
fixed = false,
|
|
72
|
+
children,
|
|
73
|
+
...draxViewProps
|
|
74
|
+
}) => {
|
|
75
|
+
const {
|
|
76
|
+
horizontal,
|
|
77
|
+
lockToMainAxis,
|
|
78
|
+
longPressDelay,
|
|
79
|
+
animationConfig,
|
|
80
|
+
inactiveItemStyle,
|
|
81
|
+
itemEntering,
|
|
82
|
+
itemExiting,
|
|
83
|
+
shiftsRef,
|
|
84
|
+
instantClearSV,
|
|
85
|
+
shiftsValidSV,
|
|
86
|
+
itemMeasurements,
|
|
87
|
+
keyExtractor,
|
|
88
|
+
rawData,
|
|
89
|
+
originalIndexes,
|
|
90
|
+
scrollPosition,
|
|
91
|
+
onItemSnapEnd,
|
|
92
|
+
fixedKeys
|
|
93
|
+
} = sortable._internal;
|
|
94
|
+
|
|
95
|
+
// Get hoverReadySV and draggedIdSV from DraxContext (provider-level SharedValues)
|
|
96
|
+
const {
|
|
97
|
+
hoverReadySV,
|
|
98
|
+
draggedIdSV
|
|
99
|
+
} = useDraxContext();
|
|
100
|
+
const originalIndex = originalIndexes[index] ?? index;
|
|
101
|
+
const item = rawData[originalIndex];
|
|
102
|
+
const itemKey = item !== undefined ? keyExtractor(item, index) : undefined;
|
|
103
|
+
|
|
104
|
+
// Register/unregister fixed items so reorder logic can skip them.
|
|
105
|
+
useEffect(() => {
|
|
106
|
+
if (!itemKey) return;
|
|
107
|
+
if (fixed) {
|
|
108
|
+
fixedKeys.current.add(itemKey);
|
|
109
|
+
} else {
|
|
110
|
+
fixedKeys.current.delete(itemKey);
|
|
111
|
+
}
|
|
112
|
+
return () => {
|
|
113
|
+
fixedKeys.current.delete(itemKey);
|
|
114
|
+
};
|
|
115
|
+
}, [fixed, itemKey, fixedKeys]);
|
|
116
|
+
|
|
117
|
+
// Store this DraxView's registered ID in a SharedValue so useAnimatedStyle
|
|
118
|
+
// can compare it with draggedIdSV on the UI thread.
|
|
119
|
+
const viewIdSV = useSharedValue('');
|
|
120
|
+
const measureFnRef = useRef(null);
|
|
121
|
+
|
|
122
|
+
// Resolve animation config and check reduced motion preference
|
|
123
|
+
const resolvedAnimConfig = useMemo(() => resolveAnimationConfig(animationConfig), [animationConfig]);
|
|
124
|
+
const reducedMotion = useReducedMotion();
|
|
125
|
+
|
|
126
|
+
// Delegated to isolated hook so worklet closure has no refs from this scope.
|
|
127
|
+
const itemStyle = useSortableItemStyle(hoverReadySV, draggedIdSV, viewIdSV, shiftsValidSV, shiftsRef, instantClearSV, itemKey, resolvedAnimConfig, reducedMotion, inactiveItemStyle);
|
|
128
|
+
|
|
129
|
+
// Derive isActive SharedValue for useItemContext consumers
|
|
130
|
+
const isActive = useDerivedValue(() => {
|
|
131
|
+
return viewIdSV.value !== '' && draggedIdSV.value === viewIdSV.value;
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
// Build context value for useItemContext
|
|
135
|
+
const itemContextValue = useMemo(() => {
|
|
136
|
+
if (!itemKey) return null;
|
|
137
|
+
return {
|
|
138
|
+
itemKey,
|
|
139
|
+
index,
|
|
140
|
+
isActive,
|
|
141
|
+
activeItemId: draggedIdSV
|
|
142
|
+
};
|
|
143
|
+
}, [itemKey, index, isActive, draggedIdSV]);
|
|
144
|
+
|
|
145
|
+
// Auto-generate accessibility props (can be overridden via draxViewProps)
|
|
146
|
+
const totalItems = rawData.length;
|
|
147
|
+
const defaultA11yLabel = `Item ${index + 1} of ${totalItems}`;
|
|
148
|
+
const defaultA11yHint = 'Long press to drag and reorder';
|
|
149
|
+
const mergedPayload = useMemo(() => ({
|
|
150
|
+
...(typeof draxViewProps.payload === 'object' && draxViewProps.payload !== null ? draxViewProps.payload : {}),
|
|
151
|
+
index,
|
|
152
|
+
originalIndex,
|
|
153
|
+
item
|
|
154
|
+
}), [draxViewProps.payload, index, originalIndex, item]);
|
|
155
|
+
return /*#__PURE__*/_jsx(SortableItemContext, {
|
|
156
|
+
value: itemContextValue,
|
|
157
|
+
children: /*#__PURE__*/_jsx(Reanimated.View, {
|
|
158
|
+
style: itemStyle,
|
|
159
|
+
entering: itemEntering,
|
|
160
|
+
exiting: itemExiting,
|
|
161
|
+
children: /*#__PURE__*/_jsx(DraxView, {
|
|
162
|
+
longPressDelay: longPressDelay,
|
|
163
|
+
lockDragXPosition: lockToMainAxis && !horizontal,
|
|
164
|
+
lockDragYPosition: lockToMainAxis && horizontal,
|
|
165
|
+
scrollHorizontal: horizontal || undefined,
|
|
166
|
+
draggable: !fixed,
|
|
167
|
+
accessibilityLabel: defaultA11yLabel,
|
|
168
|
+
accessibilityHint: defaultA11yHint,
|
|
169
|
+
accessibilityRole: "adjustable",
|
|
170
|
+
...draxViewProps,
|
|
171
|
+
payload: mergedPayload,
|
|
172
|
+
registration: reg => {
|
|
173
|
+
measureFnRef.current = reg?.measure ?? null;
|
|
174
|
+
// Capture the DraxView's registered ID so useAnimatedStyle can match
|
|
175
|
+
// it against draggedIdSV for visibility control.
|
|
176
|
+
viewIdSV.value = reg?.id ?? '';
|
|
177
|
+
},
|
|
178
|
+
onDragEnd: event => {
|
|
179
|
+
draxViewProps.onDragEnd?.(event);
|
|
180
|
+
},
|
|
181
|
+
onDragDrop: event => {
|
|
182
|
+
draxViewProps.onDragDrop?.(event);
|
|
183
|
+
},
|
|
184
|
+
onSnapEnd: snapData => {
|
|
185
|
+
onItemSnapEnd?.();
|
|
186
|
+
draxViewProps.onSnapEnd?.(snapData);
|
|
187
|
+
},
|
|
188
|
+
onMeasure: measurements => {
|
|
189
|
+
draxViewProps.onMeasure?.(measurements);
|
|
190
|
+
if (itemKey && measurements) {
|
|
191
|
+
// Subtract Drax shift transforms when they're included in the
|
|
192
|
+
// measurement. On web: measureLayout always includes transforms.
|
|
193
|
+
// On native: measureLayout ignores transforms, UNLESS DraxView
|
|
194
|
+
// auto-detected transform-based positioning (LegendList) and
|
|
195
|
+
// switched to measure() — flagged via _transformDetected.
|
|
196
|
+
let adjX = measurements.x;
|
|
197
|
+
let adjY = measurements.y;
|
|
198
|
+
if (Platform.OS === 'web' || measurements._transformDetected) {
|
|
199
|
+
const currentShift = shiftsRef.value[itemKey];
|
|
200
|
+
if (currentShift) {
|
|
201
|
+
adjX -= currentShift.x;
|
|
202
|
+
adjY -= currentShift.y;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
const entry = {
|
|
206
|
+
x: adjX,
|
|
207
|
+
y: adjY,
|
|
208
|
+
width: measurements.width,
|
|
209
|
+
height: measurements.height,
|
|
210
|
+
key: itemKey,
|
|
211
|
+
index,
|
|
212
|
+
scrollAtMeasure: {
|
|
213
|
+
x: scrollPosition.value.x,
|
|
214
|
+
y: scrollPosition.value.y
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
itemMeasurements.current.set(itemKey, entry);
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
children: children
|
|
221
|
+
})
|
|
222
|
+
})
|
|
223
|
+
});
|
|
224
|
+
};
|
|
225
|
+
export const SortableItem = /*#__PURE__*/memo(SortableItemInner);
|
|
226
|
+
//# sourceMappingURL=SortableItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["memo","useEffect","useMemo","useRef","Platform","useDerivedValue","useSharedValue","Reanimated","Easing","useAnimatedStyle","useReducedMotion","withSpring","withTiming","DraxView","useDraxContext","SortableItemContext","resolveAnimationConfig","jsx","_jsx","useSortableItemStyle","hoverReadySV","draggedIdSV","viewIdSV","shiftsValidSV","shiftsRef","instantClearSV","itemKey","animConfig","reducedMotion","inactiveItemStyle","isDragged","value","dragActive","valid","shifts","shift","undefined","instant","skipAnimation","toX","x","toY","y","translateX","translateY","useSpring","springConfig","damping","springDamping","stiffness","springStiffness","mass","springMass","timingConfig","duration","shiftDuration","easing","linear","isInactive","opacity","transform","SortableItemInner","sortable","index","fixed","children","draxViewProps","horizontal","lockToMainAxis","longPressDelay","animationConfig","itemEntering","itemExiting","itemMeasurements","keyExtractor","rawData","originalIndexes","scrollPosition","onItemSnapEnd","fixedKeys","_internal","originalIndex","item","current","add","delete","measureFnRef","resolvedAnimConfig","itemStyle","isActive","itemContextValue","activeItemId","totalItems","length","defaultA11yLabel","defaultA11yHint","mergedPayload","payload","View","style","entering","exiting","lockDragXPosition","lockDragYPosition","scrollHorizontal","draggable","accessibilityLabel","accessibilityHint","accessibilityRole","registration","reg","measure","id","onDragEnd","event","onDragDrop","onSnapEnd","snapData","onMeasure","measurements","adjX","adjY","OS","_transformDetected","currentShift","entry","width","height","key","scrollAtMeasure","set","SortableItem"],"sourceRoot":"../../src","sources":["SortableItem.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { createContext, use } from 'react';
|
|
4
|
+
|
|
5
|
+
/** Per-item state exposed by useItemContext */
|
|
6
|
+
|
|
7
|
+
export const SortableItemContext = /*#__PURE__*/createContext(null);
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Access per-item state from within a SortableItem's children.
|
|
11
|
+
*
|
|
12
|
+
* Returns SharedValues for reactive animations:
|
|
13
|
+
* - `isActive` — true when THIS item is being dragged
|
|
14
|
+
* - `activeItemId` — ID of the currently dragged item
|
|
15
|
+
* - `itemKey` — this item's key
|
|
16
|
+
* - `index` — this item's display index
|
|
17
|
+
*
|
|
18
|
+
* Must be called within a `<SortableItem>`.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```tsx
|
|
22
|
+
* function MyItem() {
|
|
23
|
+
* const { isActive } = useItemContext();
|
|
24
|
+
* const style = useAnimatedStyle(() => ({
|
|
25
|
+
* transform: [{ scale: isActive.value ? 1.1 : 1 }],
|
|
26
|
+
* }));
|
|
27
|
+
* return <Reanimated.View style={style}>...</Reanimated.View>;
|
|
28
|
+
* }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export const useItemContext = () => {
|
|
32
|
+
const ctx = use(SortableItemContext);
|
|
33
|
+
if (!ctx) {
|
|
34
|
+
throw new Error('useItemContext must be used within a SortableItem');
|
|
35
|
+
}
|
|
36
|
+
return ctx;
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=SortableItemContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createContext","use","SortableItemContext","useItemContext","ctx","Error"],"sourceRoot":"../../src","sources":["SortableItemContext.ts"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,GAAG,QAAQ,OAAO;;AAG1C;;AAYA,OAAO,MAAMC,mBAAmB,gBAAGF,aAAa,CAAkC,IAAI,CAAC;;AAEvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMG,cAAc,GAAGA,CAAA,KAAgC;EAC5D,MAAMC,GAAG,GAAGH,GAAG,CAACC,mBAAmB,CAAC;EACpC,IAAI,CAACE,GAAG,EAAE;IACR,MAAM,IAAIC,KAAK,CAAC,mDAAmD,CAAC;EACtE;EACA,OAAOD,GAAG;AACZ,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Runtime detection of react-native-gesture-handler version.
|
|
5
|
+
* Returns true if v3 hook API (usePanGesture) is available.
|
|
6
|
+
* Result is cached after first call.
|
|
7
|
+
*/
|
|
8
|
+
let _isV3 = null;
|
|
9
|
+
export function isGestureHandlerV3() {
|
|
10
|
+
if (_isV3 !== null) return _isV3;
|
|
11
|
+
try {
|
|
12
|
+
const rngh = require('react-native-gesture-handler');
|
|
13
|
+
_isV3 = typeof rngh.usePanGesture === 'function';
|
|
14
|
+
} catch {
|
|
15
|
+
_isV3 = false;
|
|
16
|
+
}
|
|
17
|
+
return _isV3;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=detectVersion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_isV3","isGestureHandlerV3","rngh","require","usePanGesture"],"sourceRoot":"../../../src","sources":["compat/detectVersion.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA,IAAIA,KAAqB,GAAG,IAAI;AAEhC,OAAO,SAASC,kBAAkBA,CAAA,EAAY;EAC5C,IAAID,KAAK,KAAK,IAAI,EAAE,OAAOA,KAAK;EAChC,IAAI;IACF,MAAME,IAAI,GAAGC,OAAO,CAAC,8BAA8B,CAAC;IACpDH,KAAK,GAAG,OAAOE,IAAI,CAACE,aAAa,KAAK,UAAU;EAClD,CAAC,CAAC,MAAM;IACNJ,KAAK,GAAG,KAAK;EACf;EACA,OAAOA,KAAK;AACd","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useDraxPanGesture","isGestureHandlerV3"],"sourceRoot":"../../../src","sources":["compat/index.ts"],"mappings":";;AAAA,SAASA,iBAAiB,QAAQ,wBAAqB;AAMvD,SAASC,kBAAkB,QAAQ,oBAAiB","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["compat/types.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useMemo, useState } from 'react';
|
|
4
|
+
import { useAnimatedReaction } from 'react-native-reanimated';
|
|
5
|
+
import { runOnJS } from 'react-native-worklets';
|
|
6
|
+
import { isGestureHandlerV3 } from "./detectVersion.js";
|
|
7
|
+
// Module-scope require — cached by the bundler, always the same reference.
|
|
8
|
+
// Hoisted out of the hook body so the compiler sees a stable function identity.
|
|
9
|
+
const rngh = require('react-native-gesture-handler');
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* v3 path — passes through to RNGH's usePanGesture with SharedValue config.
|
|
13
|
+
* Zero overhead, UI-thread-driven reconfiguration.
|
|
14
|
+
*/
|
|
15
|
+
function useDraxPanGestureV3(config) {
|
|
16
|
+
// Build config without undefined failOffset keys — RNGH v3 warns on
|
|
17
|
+
// undefined keys that survive transformOffsetProp without deletion.
|
|
18
|
+
// Spread is not allowed here (Reanimated workletizes hook arguments).
|
|
19
|
+
const panConfig = {
|
|
20
|
+
enabled: config.enabledSV,
|
|
21
|
+
activateAfterLongPress: config.longPressDelaySV,
|
|
22
|
+
maxPointers: config.maxPointers,
|
|
23
|
+
shouldCancelWhenOutside: config.shouldCancelWhenOutside,
|
|
24
|
+
touchAction: config.touchAction,
|
|
25
|
+
onActivate: config.onActivate,
|
|
26
|
+
onUpdate: config.onUpdate,
|
|
27
|
+
onDeactivate: config.onDeactivate,
|
|
28
|
+
onFinalize: config.onFinalize
|
|
29
|
+
};
|
|
30
|
+
if (config.failOffsetX !== undefined) panConfig.failOffsetX = config.failOffsetX;
|
|
31
|
+
if (config.failOffsetY !== undefined) panConfig.failOffsetY = config.failOffsetY;
|
|
32
|
+
return rngh.usePanGesture(panConfig);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* v2 path — wraps Gesture.Pan() builder pattern.
|
|
37
|
+
* SharedValue config is watched via useAnimatedReaction and triggers gesture
|
|
38
|
+
* recreation on change. This is slower than v3 but functionally correct.
|
|
39
|
+
* In practice, enabled/longPressDelay change very rarely (prop updates only).
|
|
40
|
+
*/
|
|
41
|
+
function useDraxPanGestureV2(config) {
|
|
42
|
+
const Gesture = rngh.Gesture;
|
|
43
|
+
|
|
44
|
+
// Mirror SharedValues to React state for v2 gesture config
|
|
45
|
+
const [enabled, setEnabled] = useState(config.enabledSV.value);
|
|
46
|
+
const [longPressDelay, setLongPressDelay] = useState(config.longPressDelaySV.value);
|
|
47
|
+
|
|
48
|
+
// Watch SharedValue changes and sync to JS state
|
|
49
|
+
useAnimatedReaction(() => config.enabledSV.value, (current, prev) => {
|
|
50
|
+
if (prev !== null && current !== prev) {
|
|
51
|
+
runOnJS(setEnabled)(current);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
useAnimatedReaction(() => config.longPressDelaySV.value, (current, prev) => {
|
|
55
|
+
if (prev !== null && current !== prev) {
|
|
56
|
+
runOnJS(setLongPressDelay)(current);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
// Typed as DraxPanGesture directly — v2 builder returns a legacy type that's structurally
|
|
61
|
+
// different from v3's PanGesture at compile time, but GestureDetector accepts both at runtime.
|
|
62
|
+
// Since Gesture comes from require() (any), the assignment is valid without a cast.
|
|
63
|
+
const gesture = useMemo(() => {
|
|
64
|
+
let g = Gesture.Pan().enabled(enabled).activateAfterLongPress(longPressDelay).maxPointers(config.maxPointers).shouldCancelWhenOutside(config.shouldCancelWhenOutside);
|
|
65
|
+
if (config.failOffsetX !== undefined) g = g.failOffsetX(config.failOffsetX);
|
|
66
|
+
if (config.failOffsetY !== undefined) g = g.failOffsetY(config.failOffsetY);
|
|
67
|
+
return g.onStart(event => {
|
|
68
|
+
'worklet';
|
|
69
|
+
|
|
70
|
+
config.onActivate(event);
|
|
71
|
+
}).onUpdate(event => {
|
|
72
|
+
'worklet';
|
|
73
|
+
|
|
74
|
+
config.onUpdate(event);
|
|
75
|
+
}).onEnd(event => {
|
|
76
|
+
'worklet';
|
|
77
|
+
|
|
78
|
+
config.onDeactivate(event);
|
|
79
|
+
}).onFinalize((event, success) => {
|
|
80
|
+
'worklet';
|
|
81
|
+
|
|
82
|
+
config.onFinalize(event, success);
|
|
83
|
+
});
|
|
84
|
+
}, [Gesture, enabled, longPressDelay, config]);
|
|
85
|
+
return gesture;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Version-agnostic pan gesture hook.
|
|
90
|
+
* Delegates to v3's usePanGesture (optimal) or v2's Gesture.Pan() builder (compat).
|
|
91
|
+
* Selected at module load time to avoid conditional hook calls.
|
|
92
|
+
*/
|
|
93
|
+
export const useDraxPanGesture = isGestureHandlerV3() ? useDraxPanGestureV3 : useDraxPanGestureV2;
|
|
94
|
+
//# sourceMappingURL=useDraxPanGesture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useMemo","useState","useAnimatedReaction","runOnJS","isGestureHandlerV3","rngh","require","useDraxPanGestureV3","config","panConfig","enabled","enabledSV","activateAfterLongPress","longPressDelaySV","maxPointers","shouldCancelWhenOutside","touchAction","onActivate","onUpdate","onDeactivate","onFinalize","failOffsetX","undefined","failOffsetY","usePanGesture","useDraxPanGestureV2","Gesture","setEnabled","value","longPressDelay","setLongPressDelay","current","prev","gesture","g","Pan","onStart","event","onEnd","success","useDraxPanGesture"],"sourceRoot":"../../../src","sources":["compat/useDraxPanGesture.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useDraxContext","useDraxId"],"sourceRoot":"../../../src","sources":["hooks/index.ts"],"mappings":";;AAAA,SAASA,cAAc,QAAQ,qBAAkB;AACjD,SAASC,SAAS,QAAQ,gBAAa","ignoreList":[]}
|