react-native-drax 0.11.0-alpha.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +390 -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 +571 -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 +688 -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 +988 -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 +294 -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 +215 -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 +76 -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 +756 -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 +650 -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 +830 -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 +1063 -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 +111 -0
  183. package/src/math.ts +333 -0
  184. package/src/params.ts +74 -0
  185. package/src/types.ts +933 -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,571 @@
1
+ "use strict";
2
+
3
+ import { useEffect, useLayoutEffect, useRef } from 'react';
4
+ import { Platform, StyleSheet } from 'react-native';
5
+ import Reanimated, { useAnimatedStyle, withTiming } from 'react-native-reanimated';
6
+ import { runOnJS, runOnUI } from 'react-native-worklets';
7
+ import { DraxView } from "./DraxView.js";
8
+ import { useDraxContext } from "./hooks/useDraxContext.js";
9
+ import { useWebScrollFreeze } from "./hooks/useWebScrollFreeze.js";
10
+ import { defaultAutoScrollIntervalLength, ITEM_SHIFT_ANIMATION_DURATION } from "./params.js";
11
+ import { useSortableBoardContext } from "./SortableBoardContext.js";
12
+ import { AutoScrollDirection, isSortableItemPayload, isWithCancelledFlag } from "./types.js";
13
+
14
+ /**
15
+ * Touch sensor jitter threshold in pixels.
16
+ * Computes actual finger displacement from drag start and ignores
17
+ * reorder when the finger hasn't meaningfully moved.
18
+ */
19
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
20
+ const FINGER_JITTER_THRESHOLD = 5;
21
+ function computeFingerDisplacement(eventData) {
22
+ const {
23
+ grabOffset,
24
+ measurements
25
+ } = eventData.dragged;
26
+ if (!measurements) return Infinity;
27
+ const dx = grabOffset.x - measurements.width / 2 + eventData.dragTranslation.x;
28
+ const dy = grabOffset.y - measurements.height / 2 + eventData.dragTranslation.y;
29
+ return Math.abs(dx) + Math.abs(dy);
30
+ }
31
+ export const SortableContainer = ({
32
+ sortable,
33
+ scrollRef,
34
+ style,
35
+ children,
36
+ draxViewProps,
37
+ renderDropIndicator
38
+ }) => {
39
+ const {
40
+ id,
41
+ horizontal,
42
+ draggedItem,
43
+ rawData,
44
+ moveDraggedItem,
45
+ getSnapbackTarget,
46
+ setDraggedItem,
47
+ resetDraggedItem,
48
+ scrollPosition,
49
+ containerMeasurementsRef,
50
+ contentSizeRef,
51
+ autoScrollJumpRatio,
52
+ autoScrollBackThreshold,
53
+ autoScrollForwardThreshold,
54
+ onDragStart: onDragStartCallback,
55
+ onDragPositionChange: onDragPositionChangeCallback,
56
+ onDragEnd: onDragEndCallback,
57
+ onReorder,
58
+ getMeasurementByOriginalIndex,
59
+ dropTargetPositionSV,
60
+ dropTargetVisibleSV,
61
+ draggedDisplayIndexRef,
62
+ dragStartIndexRef,
63
+ initPendingOrder,
64
+ commitVisualOrder,
65
+ computeShiftsForOrder,
66
+ pendingOrderRef,
67
+ committedOrderRef,
68
+ cancelDrag,
69
+ shiftsRef,
70
+ instantClearSV,
71
+ shiftsValidSV,
72
+ getSlotFromPosition
73
+ } = sortable._internal;
74
+
75
+ // Access hover SharedValues from DraxContext for deferred clearing.
76
+ const {
77
+ hoverReadySV,
78
+ dragPhaseSV,
79
+ draggedIdSV,
80
+ hoverPositionSV,
81
+ hoverClearDeferredRef,
82
+ setHoverContent
83
+ } = useDraxContext();
84
+ const boardContext = useSortableBoardContext();
85
+ useEffect(() => {
86
+ if (!boardContext) return;
87
+ boardContext.registerColumn(id, sortable._internal);
88
+ return () => boardContext.unregisterColumn(id);
89
+ }, [boardContext, id, sortable._internal]);
90
+ const itemCount = rawData.length;
91
+ const scrollStateRef = useRef(AutoScrollDirection.None);
92
+ const scrollIntervalRef = useRef(undefined);
93
+ const draggedToIndex = useRef(undefined);
94
+ const jitterExceededRef = useRef(false);
95
+ // Track last receiver that triggered a reorder to prevent oscillation.
96
+ // After moveDraggedItem inserts at position R, the receiver shifts to R-1.
97
+ // Next frame, same receiver at R-1 would move backward — skip it.
98
+ const lastMoveReceiverRef = useRef(undefined);
99
+ const lastMoveDirectionRef = useRef(0); // +1 forward, -1 backward
100
+
101
+ const {
102
+ freeze: freezeScroll,
103
+ unfreeze: unfreezeScroll
104
+ } = useWebScrollFreeze(scrollRef);
105
+
106
+ // ── Finalize drag (called after snap animation completes) ──────────
107
+
108
+ const finalizeDrag = () => {
109
+ unfreezeScroll();
110
+ if (boardContext?.boardInternal.transferState.current?.targetId) {
111
+ boardContext.boardInternal.finalizeTransfer?.();
112
+ return;
113
+ }
114
+ const startIdx = dragStartIndexRef.current;
115
+ const endIdx = draggedDisplayIndexRef.current;
116
+ const pending = pendingOrderRef.current;
117
+ const didReorder = startIdx !== undefined && endIdx !== undefined && startIdx !== endIdx && pending.length > 0;
118
+ if (didReorder) {
119
+ // Build final data BEFORE clearing refs
120
+ const finalData = pending.map(idx => rawData[idx]).filter(item => item !== undefined);
121
+ const draggedOrigIdx = pending[endIdx];
122
+ const displacedOrigIdx = pending[startIdx];
123
+ const reorderEvent = {
124
+ data: finalData,
125
+ fromIndex: startIdx,
126
+ toIndex: endIdx,
127
+ fromItem: draggedOrigIdx !== undefined ? rawData[draggedOrigIdx] : undefined,
128
+ toItem: displacedOrigIdx !== undefined ? rawData[displacedOrigIdx] : undefined,
129
+ isExternalDrag: false
130
+ };
131
+ {
132
+ // ── PERMANENT SHIFTS: blink-free for all contexts ──
133
+ const finalShifts = computeShiftsForOrder(pending) ?? {};
134
+ commitVisualOrder();
135
+
136
+ // Clear JS-thread refs BEFORE the runOnUI block.
137
+ draggedDisplayIndexRef.current = undefined;
138
+ dragStartIndexRef.current = undefined;
139
+ pendingOrderRef.current = [];
140
+ hoverClearDeferredRef.current = true;
141
+ runOnUI(_shifts => {
142
+ 'worklet';
143
+
144
+ instantClearSV.value = true;
145
+ shiftsValidSV.value = true;
146
+ shiftsRef.value = _shifts;
147
+ draggedItem.value = -1;
148
+ hoverReadySV.value = false;
149
+ dragPhaseSV.value = 'idle';
150
+ draggedIdSV.value = '';
151
+ hoverPositionSV.value = {
152
+ x: 0,
153
+ y: 0
154
+ };
155
+ runOnJS(setHoverContent)(null);
156
+ })(finalShifts);
157
+ requestAnimationFrame(() => {
158
+ onReorder(reorderEvent);
159
+ if (boardContext) {
160
+ setTimeout(() => {
161
+ sortable._internal.flushVisualOrder();
162
+ }, 300);
163
+ } else if (Platform.OS === 'web') {
164
+ // On web, flush synchronously after onReorder so FlatList cells
165
+ // move to correct positions immediately. The delayed flush caused
166
+ // races when the user grabbed another item before it fired.
167
+ sortable._internal.flushVisualOrder();
168
+ }
169
+ });
170
+ }
171
+ } else {
172
+ // No reorder — cancel drag: revert to committed shifts + make item visible.
173
+ cancelDrag();
174
+ resetDraggedItem();
175
+ }
176
+ };
177
+
178
+ // Register finalizeDrag via the stable ref so SortableItem always
179
+ // calls the latest version, even if it has a stale _internal reference
180
+ // (e.g., after MATCH path skips FlatList re-render).
181
+ useLayoutEffect(() => {
182
+ sortable._internal.onItemSnapEnd = finalizeDrag;
183
+ }, [sortable._internal, finalizeDrag]);
184
+
185
+ // ── Auto-scroll ─────────────────────────────────────────────────────
186
+
187
+ const doScroll = () => {
188
+ const containerMeasurements = containerMeasurementsRef.current;
189
+ const contentSize = contentSizeRef.current;
190
+ if (!scrollRef.current || !containerMeasurements || !contentSize) return;
191
+ let containerLength;
192
+ let contentLength;
193
+ let prevOffset;
194
+ if (horizontal) {
195
+ containerLength = containerMeasurements.width;
196
+ contentLength = contentSize.x;
197
+ prevOffset = scrollPosition.value.x;
198
+ } else {
199
+ containerLength = containerMeasurements.height;
200
+ contentLength = contentSize.y;
201
+ prevOffset = scrollPosition.value.y;
202
+ }
203
+ const jumpLength = containerLength * autoScrollJumpRatio;
204
+ let offset;
205
+ if (scrollStateRef.current === AutoScrollDirection.Forward) {
206
+ const maxOffset = contentLength - containerLength;
207
+ if (prevOffset < maxOffset) {
208
+ offset = Math.min(prevOffset + jumpLength, maxOffset);
209
+ }
210
+ } else if (scrollStateRef.current === AutoScrollDirection.Back) {
211
+ if (prevOffset > 0) {
212
+ offset = Math.max(prevOffset - jumpLength, 0);
213
+ }
214
+ }
215
+ if (offset !== undefined) {
216
+ if (scrollRef.current.scrollToOffset) {
217
+ // FlatList / FlashList / LegendList
218
+ scrollRef.current.scrollToOffset({
219
+ offset
220
+ });
221
+ } else if (scrollRef.current.scrollTo) {
222
+ // ScrollView
223
+ scrollRef.current.scrollTo(horizontal ? {
224
+ x: offset
225
+ } : {
226
+ y: offset
227
+ });
228
+ }
229
+ if (scrollRef.current.flashScrollIndicators) {
230
+ scrollRef.current.flashScrollIndicators();
231
+ }
232
+ }
233
+ };
234
+ const startScroll = () => {
235
+ if (scrollIntervalRef.current) return;
236
+ doScroll();
237
+ scrollIntervalRef.current = setInterval(doScroll, defaultAutoScrollIntervalLength);
238
+ };
239
+ const stopScroll = () => {
240
+ if (scrollIntervalRef.current) {
241
+ clearInterval(scrollIntervalRef.current);
242
+ scrollIntervalRef.current = undefined;
243
+ }
244
+ };
245
+
246
+ // ── Internal drag end handler ───────────────────────────────────────
247
+
248
+ const handleInternalDragEnd = (eventData, totalDragEnd) => {
249
+ scrollStateRef.current = AutoScrollDirection.None;
250
+ stopScroll();
251
+ unfreezeScroll();
252
+ dropTargetVisibleSV.value = false;
253
+ const {
254
+ dragged,
255
+ receiver
256
+ } = eventData;
257
+ const draggedPayload = isSortableItemPayload(dragged.payload) ? dragged.payload : undefined;
258
+ const externalDrag = dragged.parentId !== id || !draggedPayload;
259
+ const fromIndex = dragStartIndexRef.current ?? draggedPayload?.index ?? 0;
260
+ const fromOriginalIndex = draggedPayload?.originalIndex ?? fromIndex;
261
+ const fromItem = externalDrag ? undefined : rawData[fromOriginalIndex];
262
+ const receiverPayload = isSortableItemPayload(receiver?.payload) ? receiver?.payload : undefined;
263
+ const toPayload = receiver?.parentId === id ? receiverPayload : undefined;
264
+ if (totalDragEnd) {
265
+ onDragEndCallback?.({
266
+ index: fromIndex,
267
+ item: fromItem,
268
+ toIndex: draggedDisplayIndexRef.current,
269
+ cancelled: isWithCancelledFlag(eventData) ? eventData.cancelled : false
270
+ });
271
+ }
272
+
273
+ // Reset drag position tracking
274
+ if (draggedToIndex.current !== undefined) {
275
+ if (!totalDragEnd) {
276
+ onDragPositionChangeCallback?.({
277
+ index: fromIndex,
278
+ item: fromItem,
279
+ toIndex: undefined,
280
+ previousIndex: draggedToIndex.current
281
+ });
282
+ }
283
+ draggedToIndex.current = undefined;
284
+ }
285
+
286
+ // User hasn't moved — skip reorder, snap back to origin.
287
+ // Don't clean up here — finalizeDrag handles it after snap completes.
288
+ if (toPayload !== undefined && computeFingerDisplacement(eventData) < FINGER_JITTER_THRESHOLD) {
289
+ return undefined;
290
+ }
291
+
292
+ // Reorder happened — return snap target. Don't commit yet;
293
+ // finalizeDrag commits after the snap animation completes so
294
+ // the hover covers any FlatList re-render.
295
+ if (totalDragEnd && draggedDisplayIndexRef.current !== undefined) {
296
+ // Shifts stay active during snap animation — items remain at their
297
+ // shifted positions. finalizeDrag will set permanent shifts after snap.
298
+ const snapbackTarget = getSnapbackTarget();
299
+ return snapbackTarget;
300
+ }
301
+
302
+ // Dropped on a receiver outside this sortable list
303
+ if (receiver && receiver.parentId !== id) {
304
+ return undefined;
305
+ }
306
+
307
+ // External drag (item from another container) with no reorder — snap back
308
+ // to original position. Without this, getMeasurementByOriginalIndex would
309
+ // look up the wrong item in this container's data by the source index.
310
+ if (externalDrag) {
311
+ return undefined;
312
+ }
313
+
314
+ // No receiver — snap back to the dragged item's current position
315
+ const containerMeasurements = containerMeasurementsRef.current;
316
+ const fromMeas = getMeasurementByOriginalIndex(fromOriginalIndex);
317
+ if (fromMeas && containerMeasurements) {
318
+ return {
319
+ x: containerMeasurements.x + fromMeas.x - scrollPosition.value.x,
320
+ y: containerMeasurements.y + fromMeas.y - scrollPosition.value.y
321
+ };
322
+ }
323
+ return undefined;
324
+ };
325
+
326
+ // ── Monitor callbacks ───────────────────────────────────────────────
327
+
328
+ const onMonitorDragStart = eventData => {
329
+ draxViewProps?.onMonitorDragStart?.(eventData);
330
+ jitterExceededRef.current = false;
331
+ lastMoveReceiverRef.current = undefined;
332
+ lastMoveDirectionRef.current = 0;
333
+ // Clear any stale freeze from a previous drag that failed to unfreeze
334
+ // (e.g., fast cross-container gesture where onMonitorDragExit was skipped).
335
+ unfreezeScroll();
336
+ freezeScroll();
337
+ const {
338
+ dragged
339
+ } = eventData;
340
+
341
+ // No guard on draggedItem.value — Reanimated 4 doesn't reliably sync
342
+ // SharedValue writes from runOnUI worklets, so the value may be stale.
343
+ // onMonitorDragStart only fires at the start of a new gesture, so
344
+ // setDraggedItem + initPendingOrder safely overwrite any stale state.
345
+
346
+ if (dragged.parentId === id && isSortableItemPayload(dragged.payload)) {
347
+ const {
348
+ index,
349
+ originalIndex
350
+ } = dragged.payload;
351
+ setDraggedItem(originalIndex);
352
+ // Initialize pending order BEFORE setting display index.
353
+ // initPendingOrder copies the committed visual order into pendingOrderRef.
354
+ initPendingOrder();
355
+ // Map FlatList index to committed visual order position.
356
+ // With stableData, FlatList renders original data and permanent shifts
357
+ // handle visual order. The dragged item at FlatList cell `index`
358
+ // may be at a different visual position in the committed order.
359
+ const committed = committedOrderRef.current;
360
+ let displayIndex = index;
361
+ if (committed.length > 0) {
362
+ const pos = committed.indexOf(originalIndex);
363
+ if (pos >= 0) displayIndex = pos;
364
+ }
365
+ draggedDisplayIndexRef.current = displayIndex;
366
+ dragStartIndexRef.current = displayIndex;
367
+ // Item visibility is controlled by hoverReadySV from DraxContext.
368
+ onDragStartCallback?.({
369
+ index: displayIndex,
370
+ item: rawData[originalIndex]
371
+ });
372
+ }
373
+ };
374
+ const onMonitorDragOver = eventData => {
375
+ const displacement = computeFingerDisplacement(eventData);
376
+ if (!jitterExceededRef.current) {
377
+ if (displacement < FINGER_JITTER_THRESHOLD) {
378
+ draxViewProps?.onMonitorDragOver?.(eventData);
379
+ return;
380
+ }
381
+ jitterExceededRef.current = true;
382
+ // Item visibility is now controlled by hoverReadySV from DraxContext —
383
+ // SortableItem hides when hoverReadySV && draggedIdSV match.
384
+ // No need for setDraggedKey here.
385
+ }
386
+ draxViewProps?.onMonitorDragOver?.(eventData);
387
+ const {
388
+ dragged,
389
+ monitorOffset,
390
+ monitorOffsetRatio
391
+ } = eventData;
392
+ const draggedPayload = isSortableItemPayload(dragged.payload) ? dragged.payload : undefined;
393
+ const externalDrag = dragged.parentId !== id || !draggedPayload;
394
+ const fromIndex = dragStartIndexRef.current ?? draggedPayload?.index ?? 0;
395
+ const fromItem = externalDrag ? undefined : rawData[draggedPayload?.originalIndex ?? fromIndex];
396
+ if (typeof draggedItem.value !== 'number' || draggedItem.value < 0) {
397
+ setDraggedItem(itemCount);
398
+ }
399
+
400
+ // ── Position-based slot detection ──────────────────────────────────
401
+ // Use the hover center's content position. Slot boundaries are based
402
+ // on original layout positions (stable, never shift during drag).
403
+ const contentPos = {
404
+ x: monitorOffset.x + scrollPosition.value.x,
405
+ y: monitorOffset.y + scrollPosition.value.y
406
+ };
407
+ const targetSlot = getSlotFromPosition(contentPos);
408
+
409
+ // Track drag position changes (log only on slot change to avoid per-frame noise)
410
+ if (targetSlot !== draggedToIndex.current) {
411
+ onDragPositionChangeCallback?.({
412
+ toIndex: targetSlot,
413
+ index: fromIndex,
414
+ item: fromItem,
415
+ previousIndex: draggedToIndex.current
416
+ });
417
+ draggedToIndex.current = targetSlot;
418
+
419
+ // Update drop indicator
420
+ if (renderDropIndicator) {
421
+ const pending = pendingOrderRef.current;
422
+ const slotOrigIdx = pending.length > targetSlot ? pending[targetSlot] : undefined;
423
+ const toMeas = slotOrigIdx !== undefined ? getMeasurementByOriginalIndex(slotOrigIdx) : undefined;
424
+ if (toMeas) {
425
+ const currentDragIdx = draggedDisplayIndexRef.current ?? fromIndex;
426
+ const isForward = currentDragIdx < targetSlot;
427
+ if (horizontal) {
428
+ dropTargetPositionSV.value = {
429
+ x: isForward ? toMeas.x + toMeas.width : toMeas.x,
430
+ y: toMeas.y
431
+ };
432
+ } else {
433
+ dropTargetPositionSV.value = {
434
+ x: toMeas.x,
435
+ y: isForward ? toMeas.y + toMeas.height : toMeas.y
436
+ };
437
+ }
438
+ dropTargetVisibleSV.value = true;
439
+ }
440
+ } else {
441
+ dropTargetVisibleSV.value = false;
442
+ }
443
+ }
444
+
445
+ // Reorder via position-based slot (not receiver-based).
446
+ // Receiver detection uses the spatial index which stores FlatList layout
447
+ // positions. With stableData, these become stale after the first reorder
448
+ // because shifts move items visually but don't update the spatial index.
449
+ const currentDragIdx = draggedDisplayIndexRef.current;
450
+ if (currentDragIdx !== undefined && targetSlot !== currentDragIdx) {
451
+ const direction = Math.sign(targetSlot - currentDragIdx);
452
+ const sameTarget = lastMoveReceiverRef.current === targetSlot;
453
+ const wouldReverse = sameTarget && direction !== 0 && direction !== lastMoveDirectionRef.current;
454
+ if (!wouldReverse) {
455
+ if (direction !== 0) {
456
+ lastMoveReceiverRef.current = targetSlot;
457
+ lastMoveDirectionRef.current = direction;
458
+ }
459
+ moveDraggedItem(targetSlot);
460
+ }
461
+ }
462
+
463
+ // Auto-scroll
464
+ const ratio = horizontal ? monitorOffsetRatio.x : monitorOffsetRatio.y;
465
+ if (ratio > autoScrollBackThreshold && ratio < autoScrollForwardThreshold) {
466
+ scrollStateRef.current = AutoScrollDirection.None;
467
+ stopScroll();
468
+ } else {
469
+ if (ratio >= autoScrollForwardThreshold) {
470
+ scrollStateRef.current = AutoScrollDirection.Forward;
471
+ } else if (ratio <= autoScrollBackThreshold) {
472
+ scrollStateRef.current = AutoScrollDirection.Back;
473
+ }
474
+ startScroll();
475
+ }
476
+ };
477
+ const onMonitorDragExit = eventData => {
478
+ stopScroll();
479
+ if (scrollIntervalRef.current) {
480
+ draxViewProps?.onMonitorDragExit?.(eventData);
481
+ return;
482
+ }
483
+ handleInternalDragEnd(eventData, false);
484
+ draxViewProps?.onMonitorDragExit?.(eventData);
485
+ };
486
+ const onMonitorDragEnd = eventData => {
487
+ if (boardContext?.boardInternal.transferState.current?.targetId) {
488
+ unfreezeScroll();
489
+ draxViewProps?.onMonitorDragEnd?.(eventData);
490
+ return undefined;
491
+ }
492
+ const defaultSnapbackTarget = handleInternalDragEnd(eventData, true);
493
+ const providedSnapTarget = draxViewProps?.onMonitorDragEnd?.(eventData);
494
+ return providedSnapTarget ?? defaultSnapbackTarget;
495
+ };
496
+ const onMonitorDragDrop = eventData => {
497
+ if (boardContext?.boardInternal.transferState.current?.targetId) {
498
+ unfreezeScroll();
499
+ draxViewProps?.onMonitorDragDrop?.(eventData);
500
+ return undefined;
501
+ }
502
+ const defaultSnapbackTarget = handleInternalDragEnd(eventData, true);
503
+ const providedSnapTarget = draxViewProps?.onMonitorDragDrop?.(eventData);
504
+ return providedSnapTarget ?? defaultSnapbackTarget;
505
+ };
506
+ const handleMeasure = event => {
507
+ draxViewProps?.onMeasure?.(event);
508
+ containerMeasurementsRef.current = event;
509
+ };
510
+ return /*#__PURE__*/_jsxs(DraxView, {
511
+ ...draxViewProps,
512
+ style: [draxViewProps?.style, style],
513
+ id: id,
514
+ isParent: true,
515
+ scrollPosition: scrollPosition,
516
+ monitoring: true,
517
+ onMeasure: handleMeasure,
518
+ onMonitorDragStart: onMonitorDragStart,
519
+ onMonitorDragOver: onMonitorDragOver,
520
+ onMonitorDragExit: onMonitorDragExit,
521
+ onMonitorDragEnd: onMonitorDragEnd,
522
+ onMonitorDragDrop: onMonitorDragDrop,
523
+ children: [children, renderDropIndicator && /*#__PURE__*/_jsx(DropIndicatorOverlay, {
524
+ dropTargetPositionSV: dropTargetPositionSV,
525
+ dropTargetVisibleSV: dropTargetVisibleSV,
526
+ horizontal: horizontal,
527
+ renderDropIndicator: renderDropIndicator
528
+ })]
529
+ });
530
+ };
531
+
532
+ /** Extracted so useAnimatedStyle is always called when the component mounts. */
533
+ const DropIndicatorOverlay = ({
534
+ dropTargetPositionSV,
535
+ dropTargetVisibleSV,
536
+ horizontal,
537
+ renderDropIndicator
538
+ }) => {
539
+ const indicatorStyle = useAnimatedStyle(() => {
540
+ const pos = dropTargetPositionSV.value;
541
+ const visible = dropTargetVisibleSV.value;
542
+ return {
543
+ opacity: visible ? 1 : 0,
544
+ transform: [{
545
+ translateX: withTiming(pos.x, {
546
+ duration: ITEM_SHIFT_ANIMATION_DURATION
547
+ })
548
+ }, {
549
+ translateY: withTiming(pos.y, {
550
+ duration: ITEM_SHIFT_ANIMATION_DURATION
551
+ })
552
+ }]
553
+ };
554
+ });
555
+ return /*#__PURE__*/_jsx(Reanimated.View, {
556
+ style: [dropIndicatorStyles.container, indicatorStyle],
557
+ pointerEvents: "none",
558
+ children: renderDropIndicator({
559
+ visible: true,
560
+ horizontal
561
+ })
562
+ });
563
+ };
564
+ const dropIndicatorStyles = StyleSheet.create({
565
+ container: {
566
+ position: 'absolute',
567
+ top: 0,
568
+ left: 0
569
+ }
570
+ });
571
+ //# sourceMappingURL=SortableContainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useLayoutEffect","useRef","Platform","StyleSheet","Reanimated","useAnimatedStyle","withTiming","runOnJS","runOnUI","DraxView","useDraxContext","useWebScrollFreeze","defaultAutoScrollIntervalLength","ITEM_SHIFT_ANIMATION_DURATION","useSortableBoardContext","AutoScrollDirection","isSortableItemPayload","isWithCancelledFlag","jsx","_jsx","jsxs","_jsxs","FINGER_JITTER_THRESHOLD","computeFingerDisplacement","eventData","grabOffset","measurements","dragged","Infinity","dx","x","width","dragTranslation","dy","y","height","Math","abs","SortableContainer","sortable","scrollRef","style","children","draxViewProps","renderDropIndicator","id","horizontal","draggedItem","rawData","moveDraggedItem","getSnapbackTarget","setDraggedItem","resetDraggedItem","scrollPosition","containerMeasurementsRef","contentSizeRef","autoScrollJumpRatio","autoScrollBackThreshold","autoScrollForwardThreshold","onDragStart","onDragStartCallback","onDragPositionChange","onDragPositionChangeCallback","onDragEnd","onDragEndCallback","onReorder","getMeasurementByOriginalIndex","dropTargetPositionSV","dropTargetVisibleSV","draggedDisplayIndexRef","dragStartIndexRef","initPendingOrder","commitVisualOrder","computeShiftsForOrder","pendingOrderRef","committedOrderRef","cancelDrag","shiftsRef","instantClearSV","shiftsValidSV","getSlotFromPosition","_internal","hoverReadySV","dragPhaseSV","draggedIdSV","hoverPositionSV","hoverClearDeferredRef","setHoverContent","boardContext","registerColumn","unregisterColumn","itemCount","length","scrollStateRef","None","scrollIntervalRef","undefined","draggedToIndex","jitterExceededRef","lastMoveReceiverRef","lastMoveDirectionRef","freeze","freezeScroll","unfreeze","unfreezeScroll","finalizeDrag","boardInternal","transferState","current","targetId","finalizeTransfer","startIdx","endIdx","pending","didReorder","finalData","map","idx","filter","item","draggedOrigIdx","displacedOrigIdx","reorderEvent","data","fromIndex","toIndex","fromItem","toItem","isExternalDrag","finalShifts","_shifts","value","requestAnimationFrame","setTimeout","flushVisualOrder","OS","onItemSnapEnd","doScroll","containerMeasurements","contentSize","containerLength","contentLength","prevOffset","jumpLength","offset","Forward","maxOffset","min","Back","max","scrollToOffset","scrollTo","flashScrollIndicators","startScroll","setInterval","stopScroll","clearInterval","handleInternalDragEnd","totalDragEnd","receiver","draggedPayload","payload","externalDrag","parentId","index","fromOriginalIndex","originalIndex","receiverPayload","toPayload","cancelled","previousIndex","snapbackTarget","fromMeas","onMonitorDragStart","committed","displayIndex","pos","indexOf","onMonitorDragOver","displacement","monitorOffset","monitorOffsetRatio","contentPos","targetSlot","slotOrigIdx","toMeas","currentDragIdx","isForward","direction","sign","sameTarget","wouldReverse","ratio","onMonitorDragExit","onMonitorDragEnd","defaultSnapbackTarget","providedSnapTarget","onMonitorDragDrop","handleMeasure","event","onMeasure","isParent","monitoring","DropIndicatorOverlay","indicatorStyle","visible","opacity","transform","translateX","duration","translateY","View","dropIndicatorStyles","container","pointerEvents","create","position","top","left"],"sourceRoot":"../../src","sources":["SortableContainer.tsx"],"mappings":"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","ignoreList":[]}