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.
Files changed (246) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +385 -227
  3. package/lib/module/DebugOverlay.js +121 -0
  4. package/lib/module/DebugOverlay.js.map +1 -0
  5. package/lib/module/Drax.js +36 -0
  6. package/lib/module/Drax.js.map +1 -0
  7. package/lib/module/DraxContext.js +6 -0
  8. package/lib/module/DraxContext.js.map +1 -0
  9. package/lib/module/DraxHandle.js +47 -0
  10. package/lib/module/DraxHandle.js.map +1 -0
  11. package/lib/module/DraxHandleContext.js +11 -0
  12. package/lib/module/DraxHandleContext.js.map +1 -0
  13. package/lib/module/DraxList.js +108 -0
  14. package/lib/module/DraxList.js.map +1 -0
  15. package/lib/module/DraxProvider.js +203 -0
  16. package/lib/module/DraxProvider.js.map +1 -0
  17. package/lib/module/DraxScrollView.js +167 -0
  18. package/lib/module/DraxScrollView.js.map +1 -0
  19. package/lib/module/DraxSubprovider.js +21 -0
  20. package/lib/module/DraxSubprovider.js.map +1 -0
  21. package/lib/module/DraxView.js +348 -0
  22. package/lib/module/DraxView.js.map +1 -0
  23. package/lib/module/HoverLayer.js +152 -0
  24. package/lib/module/HoverLayer.js.map +1 -0
  25. package/lib/module/SortableBoardContainer.js +386 -0
  26. package/lib/module/SortableBoardContainer.js.map +1 -0
  27. package/lib/module/SortableBoardContext.js +6 -0
  28. package/lib/module/SortableBoardContext.js.map +1 -0
  29. package/lib/module/SortableContainer.js +561 -0
  30. package/lib/module/SortableContainer.js.map +1 -0
  31. package/lib/module/SortableItem.js +226 -0
  32. package/lib/module/SortableItem.js.map +1 -0
  33. package/lib/module/SortableItemContext.js +38 -0
  34. package/lib/module/SortableItemContext.js.map +1 -0
  35. package/lib/module/compat/detectVersion.js +19 -0
  36. package/lib/module/compat/detectVersion.js.map +1 -0
  37. package/lib/module/compat/index.js +5 -0
  38. package/lib/module/compat/index.js.map +1 -0
  39. package/lib/module/compat/types.js +4 -0
  40. package/lib/module/compat/types.js.map +1 -0
  41. package/lib/module/compat/useDraxPanGesture.js +94 -0
  42. package/lib/module/compat/useDraxPanGesture.js.map +1 -0
  43. package/lib/module/hooks/index.js +5 -0
  44. package/lib/module/hooks/index.js.map +1 -0
  45. package/lib/module/hooks/useCallbackDispatch.js +681 -0
  46. package/lib/module/hooks/useCallbackDispatch.js.map +1 -0
  47. package/lib/module/hooks/useDragGesture.js +240 -0
  48. package/lib/module/hooks/useDragGesture.js.map +1 -0
  49. package/lib/module/hooks/useDraxContext.js +12 -0
  50. package/lib/module/hooks/useDraxContext.js.map +1 -0
  51. package/lib/module/hooks/useDraxId.js +13 -0
  52. package/lib/module/hooks/useDraxId.js.map +1 -0
  53. package/lib/module/hooks/useDraxMethods.js +73 -0
  54. package/lib/module/hooks/useDraxMethods.js.map +1 -0
  55. package/lib/module/hooks/useDraxScrollHandler.js +97 -0
  56. package/lib/module/hooks/useDraxScrollHandler.js.map +1 -0
  57. package/lib/module/hooks/useSortableBoard.js +37 -0
  58. package/lib/module/hooks/useSortableBoard.js.map +1 -0
  59. package/lib/module/hooks/useSortableList.js +824 -0
  60. package/lib/module/hooks/useSortableList.js.map +1 -0
  61. package/lib/module/hooks/useSpatialIndex.js +283 -0
  62. package/lib/module/hooks/useSpatialIndex.js.map +1 -0
  63. package/lib/module/hooks/useViewStyles.js +158 -0
  64. package/lib/module/hooks/useViewStyles.js.map +1 -0
  65. package/lib/module/hooks/useWebScrollFreeze.js +52 -0
  66. package/lib/module/hooks/useWebScrollFreeze.js.map +1 -0
  67. package/lib/module/index.js +37 -0
  68. package/lib/module/index.js.map +1 -0
  69. package/lib/module/math.js +222 -0
  70. package/lib/module/math.js.map +1 -0
  71. package/lib/module/package.json +1 -0
  72. package/lib/module/params.js +88 -0
  73. package/lib/module/params.js.map +1 -0
  74. package/lib/module/types.js +213 -0
  75. package/lib/module/types.js.map +1 -0
  76. package/lib/typescript/package.json +1 -0
  77. package/lib/typescript/src/DebugOverlay.d.ts +17 -0
  78. package/lib/typescript/src/DebugOverlay.d.ts.map +1 -0
  79. package/lib/typescript/src/Drax.d.ts +28 -0
  80. package/lib/typescript/src/Drax.d.ts.map +1 -0
  81. package/lib/typescript/src/DraxContext.d.ts +3 -0
  82. package/lib/typescript/src/DraxContext.d.ts.map +1 -0
  83. package/lib/typescript/src/DraxHandle.d.ts +25 -0
  84. package/lib/typescript/src/DraxHandle.d.ts.map +1 -0
  85. package/lib/typescript/src/DraxHandleContext.d.ts +12 -0
  86. package/lib/typescript/src/DraxHandleContext.d.ts.map +1 -0
  87. package/lib/typescript/src/DraxList.d.ts +66 -0
  88. package/lib/typescript/src/DraxList.d.ts.map +1 -0
  89. package/lib/typescript/src/DraxProvider.d.ts +4 -0
  90. package/lib/typescript/src/DraxProvider.d.ts.map +1 -0
  91. package/lib/typescript/src/DraxScrollView.d.ts +7 -0
  92. package/lib/typescript/src/DraxScrollView.d.ts.map +1 -0
  93. package/lib/typescript/src/DraxSubprovider.d.ts +4 -0
  94. package/lib/typescript/src/DraxSubprovider.d.ts.map +1 -0
  95. package/lib/typescript/src/DraxView.d.ts +4 -0
  96. package/lib/typescript/src/DraxView.d.ts.map +1 -0
  97. package/lib/typescript/src/HoverLayer.d.ts +38 -0
  98. package/lib/typescript/src/HoverLayer.d.ts.map +1 -0
  99. package/lib/typescript/src/SortableBoardContainer.d.ts +11 -0
  100. package/lib/typescript/src/SortableBoardContainer.d.ts.map +1 -0
  101. package/lib/typescript/src/SortableBoardContext.d.ts +4 -0
  102. package/lib/typescript/src/SortableBoardContext.d.ts.map +1 -0
  103. package/lib/typescript/src/SortableContainer.d.ts +13 -0
  104. package/lib/typescript/src/SortableContainer.d.ts.map +1 -0
  105. package/lib/typescript/src/SortableItem.d.ts +14 -0
  106. package/lib/typescript/src/SortableItem.d.ts.map +1 -0
  107. package/lib/typescript/src/SortableItemContext.d.ts +37 -0
  108. package/lib/typescript/src/SortableItemContext.d.ts.map +1 -0
  109. package/lib/typescript/src/compat/detectVersion.d.ts +2 -0
  110. package/lib/typescript/src/compat/detectVersion.d.ts.map +1 -0
  111. package/lib/typescript/src/compat/index.d.ts +4 -0
  112. package/lib/typescript/src/compat/index.d.ts.map +1 -0
  113. package/lib/typescript/src/compat/types.d.ts +33 -0
  114. package/lib/typescript/src/compat/types.d.ts.map +1 -0
  115. package/lib/typescript/src/compat/useDraxPanGesture.d.ts +8 -0
  116. package/lib/typescript/src/compat/useDraxPanGesture.d.ts.map +1 -0
  117. package/lib/typescript/src/hooks/index.d.ts +3 -0
  118. package/lib/typescript/src/hooks/index.d.ts.map +1 -0
  119. package/lib/typescript/src/hooks/useCallbackDispatch.d.ts +40 -0
  120. package/lib/typescript/src/hooks/useCallbackDispatch.d.ts.map +1 -0
  121. package/lib/typescript/src/hooks/useDragGesture.d.ts +17 -0
  122. package/lib/typescript/src/hooks/useDragGesture.d.ts.map +1 -0
  123. package/lib/typescript/src/hooks/useDraxContext.d.ts +2 -0
  124. package/lib/typescript/src/hooks/useDraxContext.d.ts.map +1 -0
  125. package/{build → lib/typescript/src}/hooks/useDraxId.d.ts +1 -0
  126. package/lib/typescript/src/hooks/useDraxId.d.ts.map +1 -0
  127. package/lib/typescript/src/hooks/useDraxMethods.d.ts +13 -0
  128. package/lib/typescript/src/hooks/useDraxMethods.d.ts.map +1 -0
  129. package/lib/typescript/src/hooks/useDraxScrollHandler.d.ts +27 -0
  130. package/lib/typescript/src/hooks/useDraxScrollHandler.d.ts.map +1 -0
  131. package/lib/typescript/src/hooks/useSortableBoard.d.ts +10 -0
  132. package/lib/typescript/src/hooks/useSortableBoard.d.ts.map +1 -0
  133. package/lib/typescript/src/hooks/useSortableList.d.ts +11 -0
  134. package/lib/typescript/src/hooks/useSortableList.d.ts.map +1 -0
  135. package/lib/typescript/src/hooks/useSpatialIndex.d.ts +22 -0
  136. package/lib/typescript/src/hooks/useSpatialIndex.d.ts.map +1 -0
  137. package/lib/typescript/src/hooks/useViewStyles.d.ts +183 -0
  138. package/lib/typescript/src/hooks/useViewStyles.d.ts.map +1 -0
  139. package/lib/typescript/src/hooks/useWebScrollFreeze.d.ts +14 -0
  140. package/lib/typescript/src/hooks/useWebScrollFreeze.d.ts.map +1 -0
  141. package/lib/typescript/src/index.d.ts +25 -0
  142. package/lib/typescript/src/index.d.ts.map +1 -0
  143. package/lib/typescript/src/math.d.ts +52 -0
  144. package/lib/typescript/src/math.d.ts.map +1 -0
  145. package/{build → lib/typescript/src}/params.d.ts +13 -9
  146. package/lib/typescript/src/params.d.ts.map +1 -0
  147. package/lib/typescript/src/types.d.ts +743 -0
  148. package/lib/typescript/src/types.d.ts.map +1 -0
  149. package/package.json +164 -34
  150. package/src/DebugOverlay.tsx +140 -0
  151. package/src/Drax.ts +33 -0
  152. package/src/DraxContext.ts +8 -0
  153. package/src/DraxHandle.tsx +52 -0
  154. package/src/DraxHandleContext.ts +15 -0
  155. package/src/DraxList.tsx +181 -0
  156. package/src/DraxProvider.tsx +224 -0
  157. package/src/DraxScrollView.tsx +180 -0
  158. package/src/DraxSubprovider.tsx +22 -0
  159. package/src/DraxView.tsx +430 -0
  160. package/src/HoverLayer.tsx +167 -0
  161. package/src/SortableBoardContainer.tsx +439 -0
  162. package/src/SortableBoardContext.ts +6 -0
  163. package/src/SortableContainer.tsx +642 -0
  164. package/src/SortableItem.tsx +264 -0
  165. package/src/SortableItemContext.ts +46 -0
  166. package/src/compat/detectVersion.ts +17 -0
  167. package/src/compat/index.ts +7 -0
  168. package/src/compat/types.ts +35 -0
  169. package/src/compat/useDraxPanGesture.ts +112 -0
  170. package/src/hooks/index.ts +2 -0
  171. package/src/hooks/useCallbackDispatch.tsx +823 -0
  172. package/src/hooks/useDragGesture.ts +273 -0
  173. package/src/hooks/useDraxContext.ts +11 -0
  174. package/src/hooks/useDraxId.ts +11 -0
  175. package/src/hooks/useDraxMethods.ts +71 -0
  176. package/src/hooks/useDraxScrollHandler.ts +121 -0
  177. package/src/hooks/useSortableBoard.ts +44 -0
  178. package/src/hooks/useSortableList.ts +868 -0
  179. package/src/hooks/useSpatialIndex.ts +336 -0
  180. package/src/hooks/useViewStyles.ts +180 -0
  181. package/src/hooks/useWebScrollFreeze.ts +60 -0
  182. package/src/index.ts +110 -0
  183. package/src/math.ts +251 -0
  184. package/src/params.ts +74 -0
  185. package/src/types.ts +919 -0
  186. package/.editorconfig +0 -15
  187. package/.eslintrc.js +0 -4
  188. package/.prettierrc +0 -16
  189. package/CHANGELOG.md +0 -270
  190. package/CODE-OF-CONDUCT.md +0 -85
  191. package/CONTRIBUTING.md +0 -15
  192. package/FUNDING.yml +0 -4
  193. package/build/AllHoverViews.d.ts +0 -0
  194. package/build/AllHoverViews.js +0 -30
  195. package/build/DraxContext.d.ts +0 -2
  196. package/build/DraxContext.js +0 -6
  197. package/build/DraxList.d.ts +0 -8
  198. package/build/DraxList.js +0 -512
  199. package/build/DraxListItem.d.ts +0 -7
  200. package/build/DraxListItem.js +0 -121
  201. package/build/DraxProvider.d.ts +0 -2
  202. package/build/DraxProvider.js +0 -704
  203. package/build/DraxScrollView.d.ts +0 -6
  204. package/build/DraxScrollView.js +0 -136
  205. package/build/DraxSubprovider.d.ts +0 -3
  206. package/build/DraxSubprovider.js +0 -18
  207. package/build/DraxView.d.ts +0 -8
  208. package/build/DraxView.js +0 -93
  209. package/build/HoverView.d.ts +0 -8
  210. package/build/HoverView.js +0 -40
  211. package/build/PanGestureDetector.d.ts +0 -3
  212. package/build/PanGestureDetector.js +0 -49
  213. package/build/hooks/index.d.ts +0 -4
  214. package/build/hooks/index.js +0 -11
  215. package/build/hooks/useContent.d.ts +0 -23
  216. package/build/hooks/useContent.js +0 -212
  217. package/build/hooks/useDraxContext.d.ts +0 -1
  218. package/build/hooks/useDraxContext.js +0 -13
  219. package/build/hooks/useDraxId.js +0 -13
  220. package/build/hooks/useDraxProtocol.d.ts +0 -5
  221. package/build/hooks/useDraxProtocol.js +0 -32
  222. package/build/hooks/useDraxRegistry.d.ts +0 -78
  223. package/build/hooks/useDraxRegistry.js +0 -714
  224. package/build/hooks/useDraxScrollHandler.d.ts +0 -25
  225. package/build/hooks/useDraxScrollHandler.js +0 -89
  226. package/build/hooks/useDraxState.d.ts +0 -10
  227. package/build/hooks/useDraxState.js +0 -132
  228. package/build/hooks/useMeasurements.d.ts +0 -9
  229. package/build/hooks/useMeasurements.js +0 -119
  230. package/build/hooks/useStatus.d.ts +0 -11
  231. package/build/hooks/useStatus.js +0 -96
  232. package/build/index.d.ts +0 -9
  233. package/build/index.js +0 -33
  234. package/build/math.d.ts +0 -22
  235. package/build/math.js +0 -68
  236. package/build/params.js +0 -27
  237. package/build/transform.d.ts +0 -11
  238. package/build/transform.js +0 -59
  239. package/build/types.d.ts +0 -807
  240. package/build/types.js +0 -46
  241. package/docs/concept.md +0 -79
  242. package/docs/images/color-drag-drop.gif +0 -0
  243. package/docs/images/deck-cards.gif +0 -0
  244. package/docs/images/drag-drop-events.jpg +0 -0
  245. package/docs/images/knight-moves.gif +0 -0
  246. 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,5 @@
1
+ "use strict";
2
+
3
+ export { useDraxPanGesture } from "./useDraxPanGesture.js";
4
+ export { isGestureHandlerV3 } from "./detectVersion.js";
5
+ //# sourceMappingURL=index.js.map
@@ -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,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=types.js.map
@@ -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,5 @@
1
+ "use strict";
2
+
3
+ export { useDraxContext } from "./useDraxContext.js";
4
+ export { useDraxId } from "./useDraxId.js";
5
+ //# sourceMappingURL=index.js.map
@@ -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":[]}