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,167 @@
1
+ "use strict";
2
+
3
+ import { useRef } from 'react';
4
+ import Reanimated from 'react-native-reanimated';
5
+ import { DraxSubprovider } from "./DraxSubprovider.js";
6
+ import { DraxView } from "./DraxView.js";
7
+ import { useDraxScrollHandler } from "./hooks/useDraxScrollHandler.js";
8
+ import { useWebScrollFreeze } from "./hooks/useWebScrollFreeze.js";
9
+ import { defaultAutoScrollBackThreshold, defaultAutoScrollForwardThreshold, defaultAutoScrollJumpRatio, defaultScrollEventThrottle } from "./params.js";
10
+ import { AutoScrollDirection } from "./types.js";
11
+ import { jsx as _jsx } from "react/jsx-runtime";
12
+ export const DraxScrollView = props => {
13
+ const {
14
+ ref,
15
+ children,
16
+ style,
17
+ onContentSizeChange: onContentSizeChangeProp,
18
+ scrollEventThrottle = defaultScrollEventThrottle,
19
+ autoScrollJumpRatio = defaultAutoScrollJumpRatio,
20
+ autoScrollBackThreshold = defaultAutoScrollBackThreshold,
21
+ autoScrollForwardThreshold = defaultAutoScrollForwardThreshold,
22
+ id: idProp,
23
+ ...scrollViewProps
24
+ } = props;
25
+
26
+ // Auto-scroll state.
27
+ const autoScrollStateRef = useRef({
28
+ x: AutoScrollDirection.None,
29
+ y: AutoScrollDirection.None
30
+ });
31
+
32
+ // Handle auto-scrolling on interval (ref-based to avoid circular deps with useDraxScrollHandler).
33
+ const doScrollRef = useRef(() => {});
34
+ const {
35
+ id,
36
+ containerMeasurementsRef,
37
+ contentSizeRef,
38
+ onContentSizeChange,
39
+ onMeasureContainer,
40
+ onScroll,
41
+ scrollRef,
42
+ scrollPosition,
43
+ setScrollRefs,
44
+ startScroll,
45
+ stopScroll
46
+ } = useDraxScrollHandler({
47
+ idProp,
48
+ onContentSizeChangeProp,
49
+ onScrollProp: props?.onScroll,
50
+ externalRef: ref,
51
+ doScroll: doScrollRef
52
+ });
53
+
54
+ // Assign doScroll implementation now that we have scrollRef, measurements, etc.
55
+ doScrollRef.current = () => {
56
+ const scroll = scrollRef.current;
57
+ const containerMeasurements = containerMeasurementsRef.current;
58
+ const contentSize = contentSizeRef.current;
59
+ if (!scroll || !containerMeasurements || !contentSize) return;
60
+ const autoScrollState = autoScrollStateRef.current;
61
+ const jump = {
62
+ x: containerMeasurements.width * autoScrollJumpRatio,
63
+ y: containerMeasurements.height * autoScrollJumpRatio
64
+ };
65
+ let xNew;
66
+ let yNew;
67
+ if (autoScrollState.x === AutoScrollDirection.Forward) {
68
+ const xMax = contentSize.x - containerMeasurements.width;
69
+ if (scrollPosition.value.x < xMax) {
70
+ xNew = Math.min(scrollPosition.value.x + jump.x, xMax);
71
+ }
72
+ } else if (autoScrollState.x === AutoScrollDirection.Back) {
73
+ if (scrollPosition.value.x > 0) {
74
+ xNew = Math.max(scrollPosition.value.x - jump.x, 0);
75
+ }
76
+ }
77
+ if (autoScrollState.y === AutoScrollDirection.Forward) {
78
+ const yMax = contentSize.y - containerMeasurements.height;
79
+ if (scrollPosition.value.y < yMax) {
80
+ yNew = Math.min(scrollPosition.value.y + jump.y, yMax);
81
+ }
82
+ } else if (autoScrollState.y === AutoScrollDirection.Back) {
83
+ if (scrollPosition.value.y > 0) {
84
+ yNew = Math.max(scrollPosition.value.y - jump.y, 0);
85
+ }
86
+ }
87
+ if (xNew !== undefined || yNew !== undefined) {
88
+ // @ts-expect-error Reanimated's type augmentation hides scrollTo, but it exists at runtime
89
+ scroll.scrollTo({
90
+ x: xNew ?? scrollPosition.value.x,
91
+ y: yNew ?? scrollPosition.value.y
92
+ });
93
+ if ('flashScrollIndicators' in scroll && typeof scroll.flashScrollIndicators === 'function') {
94
+ scroll.flashScrollIndicators();
95
+ }
96
+ }
97
+ };
98
+ const {
99
+ freeze: freezeScroll,
100
+ unfreeze: unfreezeScroll
101
+ } = useWebScrollFreeze(scrollRef);
102
+
103
+ // Clear auto-scroll direction and stop the auto-scrolling interval.
104
+ const resetScroll = () => {
105
+ const autoScrollState = autoScrollStateRef.current;
106
+ autoScrollState.x = AutoScrollDirection.None;
107
+ autoScrollState.y = AutoScrollDirection.None;
108
+ stopScroll();
109
+ unfreezeScroll();
110
+ };
111
+
112
+ // Monitor drag-over events to react with auto-scrolling.
113
+ const onMonitorDragOver = event => {
114
+ const {
115
+ monitorOffsetRatio
116
+ } = event;
117
+ const autoScrollState = autoScrollStateRef.current;
118
+ if (monitorOffsetRatio.x >= autoScrollForwardThreshold) {
119
+ autoScrollState.x = AutoScrollDirection.Forward;
120
+ } else if (monitorOffsetRatio.x <= autoScrollBackThreshold) {
121
+ autoScrollState.x = AutoScrollDirection.Back;
122
+ } else {
123
+ autoScrollState.x = AutoScrollDirection.None;
124
+ }
125
+ if (monitorOffsetRatio.y >= autoScrollForwardThreshold) {
126
+ autoScrollState.y = AutoScrollDirection.Forward;
127
+ } else if (monitorOffsetRatio.y <= autoScrollBackThreshold) {
128
+ autoScrollState.y = AutoScrollDirection.Back;
129
+ } else {
130
+ autoScrollState.y = AutoScrollDirection.None;
131
+ }
132
+ if (autoScrollState.x === AutoScrollDirection.None && autoScrollState.y === AutoScrollDirection.None) {
133
+ stopScroll();
134
+ } else {
135
+ startScroll();
136
+ }
137
+ };
138
+ const scrollViewParent = {
139
+ id,
140
+ viewRef: scrollRef,
141
+ isScrollContainer: true
142
+ };
143
+ return /*#__PURE__*/_jsx(DraxView, {
144
+ id: id,
145
+ style: style,
146
+ scrollPosition: scrollPosition,
147
+ onMeasure: onMeasureContainer,
148
+ onMonitorDragStart: freezeScroll,
149
+ onMonitorDragOver: onMonitorDragOver,
150
+ onMonitorDragExit: resetScroll,
151
+ onMonitorDragEnd: resetScroll,
152
+ onMonitorDragDrop: resetScroll,
153
+ children: /*#__PURE__*/_jsx(DraxSubprovider, {
154
+ parent: scrollViewParent,
155
+ children: /*#__PURE__*/_jsx(Reanimated.ScrollView, {
156
+ ...scrollViewProps,
157
+ // @ts-expect-error — callback ref bridges AnimatedRef + external ref; runtime-compatible
158
+ ref: setScrollRefs,
159
+ onContentSizeChange: onContentSizeChange,
160
+ scrollEventThrottle: scrollEventThrottle,
161
+ onScroll: onScroll,
162
+ children: children
163
+ })
164
+ })
165
+ });
166
+ };
167
+ //# sourceMappingURL=DraxScrollView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useRef","Reanimated","DraxSubprovider","DraxView","useDraxScrollHandler","useWebScrollFreeze","defaultAutoScrollBackThreshold","defaultAutoScrollForwardThreshold","defaultAutoScrollJumpRatio","defaultScrollEventThrottle","AutoScrollDirection","jsx","_jsx","DraxScrollView","props","ref","children","style","onContentSizeChange","onContentSizeChangeProp","scrollEventThrottle","autoScrollJumpRatio","autoScrollBackThreshold","autoScrollForwardThreshold","id","idProp","scrollViewProps","autoScrollStateRef","x","None","y","doScrollRef","containerMeasurementsRef","contentSizeRef","onMeasureContainer","onScroll","scrollRef","scrollPosition","setScrollRefs","startScroll","stopScroll","onScrollProp","externalRef","doScroll","current","scroll","containerMeasurements","contentSize","autoScrollState","jump","width","height","xNew","yNew","Forward","xMax","value","Math","min","Back","max","yMax","undefined","scrollTo","flashScrollIndicators","freeze","freezeScroll","unfreeze","unfreezeScroll","resetScroll","onMonitorDragOver","event","monitorOffsetRatio","scrollViewParent","viewRef","isScrollContainer","onMeasure","onMonitorDragStart","onMonitorDragExit","onMonitorDragEnd","onMonitorDragDrop","parent","ScrollView"],"sourceRoot":"../../src","sources":["DraxScrollView.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ import { useMemo } from 'react';
4
+ import { DraxContext } from "./DraxContext.js";
5
+ import { useDraxContext } from "./hooks/index.js";
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ export const DraxSubprovider = ({
8
+ parent,
9
+ children
10
+ }) => {
11
+ const contextValue = useDraxContext();
12
+ const subContextValue = useMemo(() => ({
13
+ ...contextValue,
14
+ parent
15
+ }), [contextValue, parent]);
16
+ return /*#__PURE__*/_jsx(DraxContext, {
17
+ value: subContextValue,
18
+ children: children
19
+ });
20
+ };
21
+ //# sourceMappingURL=DraxSubprovider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useMemo","DraxContext","useDraxContext","jsx","_jsx","DraxSubprovider","parent","children","contextValue","subContextValue","value"],"sourceRoot":"../../src","sources":["DraxSubprovider.tsx"],"mappings":";;AACA,SAASA,OAAO,QAAQ,OAAO;AAE/B,SAASC,WAAW,QAAQ,kBAAe;AAC3C,SAASC,cAAc,QAAQ,kBAAS;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAGzC,OAAO,MAAMC,eAAe,GAAGA,CAAC;EAC9BC,MAAM;EACNC;AACuC,CAAC,KAAK;EAC7C,MAAMC,YAAY,GAAGN,cAAc,CAAC,CAAC;EACrC,MAAMO,eAAe,GAAGT,OAAO,CAC7B,OAAO;IAAE,GAAGQ,YAAY;IAAEF;EAAO,CAAC,CAAC,EACnC,CAACE,YAAY,EAAEF,MAAM,CACvB,CAAC;EACD,oBACEF,IAAA,CAACH,WAAW;IAACS,KAAK,EAAED,eAAgB;IAAAF,QAAA,EACjCA;EAAQ,CACE,CAAC;AAElB,CAAC","ignoreList":[]}
@@ -0,0 +1,348 @@
1
+ "use strict";
2
+
3
+ import { memo, useCallback, useEffect, useLayoutEffect, useMemo, useRef } from 'react';
4
+ import { Platform } from 'react-native';
5
+ import { GestureDetector } from 'react-native-gesture-handler';
6
+ import Reanimated, { useAnimatedReaction, useSharedValue } from 'react-native-reanimated';
7
+ import { DraxHandleContext } from "./DraxHandleContext.js";
8
+ import { DraxSubprovider } from "./DraxSubprovider.js";
9
+ import { useDraxContext, useDraxId } from "./hooks/index.js";
10
+ import { useDragGesture } from "./hooks/useDragGesture.js";
11
+ import { isDraggable as computeIsDraggable } from "./hooks/useSpatialIndex.js";
12
+ import { useViewStyles } from "./hooks/useViewStyles.js";
13
+ import { defaultLongPressDelay } from "./params.js";
14
+ import { DraxViewDragStatus, DraxViewReceiveStatus } from "./types.js";
15
+
16
+ /** Keys that should NOT be passed through to Reanimated.View */
17
+ import { jsx as _jsx } from "react/jsx-runtime";
18
+ const DRAX_PROP_KEYS = new Set(['renderContent', 'renderHoverContent', 'noHover', 'registration', 'onMeasure', 'parent', 'isParent', 'scrollPosition', 'longPressDelay', 'lockDragXPosition', 'lockDragYPosition', 'id',
19
+ // Callback props
20
+ 'onDragStart', 'onDrag', 'onDragEnter', 'onDragOver', 'onDragExit', 'onDragEnd', 'onDragDrop', 'onSnapEnd', 'onReceiveSnapEnd', 'onReceiveDragEnter', 'onReceiveDragOver', 'onReceiveDragExit', 'onReceiveDragDrop', 'onMonitorDragStart', 'onMonitorDragEnter', 'onMonitorDragOver', 'onMonitorDragExit', 'onMonitorDragEnd', 'onMonitorDragDrop', 'animateSnap', 'snapDelay', 'snapDuration', 'snapAnimator', 'dragPayload', 'receiverPayload', 'payload', 'draggable', 'receptive', 'monitoring', 'rejectOwnChildren', 'disableHoverViewMeasurementsOnLayout', 'dynamicReceptiveCallback', 'acceptsDrag', 'dragBoundsRef',
21
+ // Style props (handled by useViewStyles)
22
+ 'style', 'dragInactiveStyle', 'draggingStyle', 'draggingWithReceiverStyle', 'draggingWithoutReceiverStyle', 'dragReleasedStyle', 'hoverStyle', 'hoverDraggingStyle', 'hoverDraggingWithReceiverStyle', 'hoverDraggingWithoutReceiverStyle', 'hoverDragReleasedStyle', 'receiverInactiveStyle', 'receivingStyle', 'otherDraggingStyle', 'otherDraggingWithReceiverStyle', 'otherDraggingWithoutReceiverStyle', 'dragHandle', 'dragActivationFailOffset', 'collisionAlgorithm', 'scrollHorizontal']);
23
+
24
+ /** Extract only ViewProps-compatible props by filtering out Drax-specific keys */
25
+ function extractViewProps(props) {
26
+ const viewProps = {};
27
+ for (const [key, value] of Object.entries(props)) {
28
+ if (!DRAX_PROP_KEYS.has(key)) {
29
+ viewProps[key] = value;
30
+ }
31
+ }
32
+ return viewProps;
33
+ }
34
+
35
+ /**
36
+ * Isolated hook for scroll-position → spatial-index sync.
37
+ * Kept separate from DraxView so the worklet closure only captures
38
+ * SharedValues — never React refs from the component scope. The worklets
39
+ * serializer recursively freezes all plain objects in a worklet's closure,
40
+ * which would freeze useRef objects and trigger "Tried to modify key `current`"
41
+ * warnings when React nullifies refs on unmount.
42
+ */
43
+ function useScrollPositionSync(scrollPosition, spatialIndexSV, scrollOffsetsSV) {
44
+ useAnimatedReaction(() => scrollPosition?.value, (pos, prev) => {
45
+ 'worklet';
46
+
47
+ if (!pos) return;
48
+ if (prev && pos.x === prev.x && pos.y === prev.y) return;
49
+ const idx = spatialIndexSV.value;
50
+ if (idx < 0) return;
51
+ scrollOffsetsSV.modify(offsets => {
52
+ if (idx >= 0 && idx < offsets.length) {
53
+ offsets[idx] = pos;
54
+ }
55
+ return offsets;
56
+ });
57
+ });
58
+ }
59
+ export const DraxView = /*#__PURE__*/memo(props => {
60
+ const {
61
+ renderContent,
62
+ registration,
63
+ onMeasure,
64
+ parent: parentProp,
65
+ isParent,
66
+ scrollPosition,
67
+ longPressDelay = defaultLongPressDelay,
68
+ lockDragXPosition,
69
+ lockDragYPosition,
70
+ scrollHorizontal,
71
+ dragHandle,
72
+ dragBoundsRef,
73
+ children,
74
+ style,
75
+ id: idProp
76
+ } = props;
77
+
78
+ // Determine capabilities from props (shared with useSpatialIndex)
79
+ const draggable = computeIsDraggable(props);
80
+
81
+ // Unique id
82
+ const id = useDraxId(idProp);
83
+
84
+ // Connect with Drax context
85
+ const {
86
+ registerView,
87
+ unregisterView,
88
+ updateMeasurements: updateMeasurementsCtx,
89
+ updateViewProps,
90
+ getViewEntry,
91
+ rootViewRef,
92
+ scrollOffsetsSV,
93
+ parent: contextParent
94
+ } = useDraxContext();
95
+
96
+ // Parent view (from prop or context)
97
+ const parent = parentProp ?? contextParent;
98
+ const parentId = parent?.id;
99
+ const parentViewRef = parent ? parent.viewRef : rootViewRef;
100
+
101
+ // View ref for measuring
102
+ const viewRef = useRef(null);
103
+ const measurementsRef = useRef(undefined);
104
+
105
+ // ── Measurement ────────────────────────────────────────────────────
106
+
107
+ /** Finalize measurements and notify consumers.
108
+ * `transformDetected` = 1 when auto-detection found transform-based positioning
109
+ * (visual measurement used instead of Yoga layout). Consumers can check
110
+ * `measurements._transformDetected` to know whether shift subtraction is needed. */
111
+ const finalizeMeasurement = useCallback((x, y, width, height, handler, transformDetected = 0) => {
112
+ const measurements = {
113
+ height,
114
+ x,
115
+ y,
116
+ width,
117
+ _transformDetected: transformDetected
118
+ };
119
+ measurementsRef.current = measurements;
120
+ updateMeasurementsCtx(id, measurements);
121
+ onMeasure?.(measurements);
122
+ handler?.(measurements);
123
+ }, [id, updateMeasurementsCtx, onMeasure]);
124
+ const measureWithHandler = useCallback(handler => {
125
+ const view = viewRef.current;
126
+ if (!view || !parentViewRef.current) return;
127
+ view.measureLayout(parentViewRef.current, (x, y, width, height) => {
128
+ if (Platform.OS === 'web') {
129
+ // On web, measureLayout returns visual positions — add scroll to
130
+ // convert to content-relative.
131
+ const parentData = parentId ? getViewEntry(parentId) : undefined;
132
+ const parentScroll = parentData?.scrollPosition?.value ?? {
133
+ x: 0,
134
+ y: 0
135
+ };
136
+ finalizeMeasurement(x + parentScroll.x, y + parentScroll.y, width, height, handler);
137
+ return;
138
+ }
139
+
140
+ // On Fabric, measureLayout uses includeTransform=false → returns Yoga
141
+ // layout positions. This is correct for FlatList/FlashList, but wrong
142
+ // for LegendList (which positions items via translateY, so all report y=0).
143
+ //
144
+ // Auto-detect: when measureLayout returns position=0 (the hallmark of
145
+ // transform-positioned items: position:absolute, top:0), also call
146
+ // measure() to get the visual position. If it differs, the item is
147
+ // transform-positioned. Only check when layoutPosition=0 to avoid
148
+ // false positives on shifted items (whose measureLayout is non-zero).
149
+ const layoutX = x;
150
+ const layoutY = y;
151
+ if (layoutX !== 0 && layoutY !== 0) {
152
+ // Non-zero layout position → normal Yoga layout, trust measureLayout.
153
+ finalizeMeasurement(layoutX, layoutY, width, height, handler);
154
+ return;
155
+ }
156
+ const parentView = parentViewRef.current;
157
+ if (!parentView) {
158
+ finalizeMeasurement(layoutX, layoutY, width, height, handler);
159
+ return;
160
+ }
161
+ view.measure((_vx, _vy, _vw, _vh, pageX, pageY) => {
162
+ parentView.measure((_px, _py, _pw, _ph, parentPageX, parentPageY) => {
163
+ const parentData = parentId ? getViewEntry(parentId) : undefined;
164
+ const parentScroll = parentData?.scrollPosition?.value ?? {
165
+ x: 0,
166
+ y: 0
167
+ };
168
+ const visualX = pageX - parentPageX + parentScroll.x;
169
+ const visualY = pageY - parentPageY + parentScroll.y;
170
+ // If visual position differs from layout, the view is transform-positioned.
171
+ if (Math.abs(visualX - layoutX) > 1 || Math.abs(visualY - layoutY) > 1) {
172
+ finalizeMeasurement(visualX, visualY, width, height, handler, 1);
173
+ } else {
174
+ finalizeMeasurement(layoutX, layoutY, width, height, handler);
175
+ }
176
+ });
177
+ });
178
+ }, () => {});
179
+ }, [id, parentId, viewRef, parentViewRef, getViewEntry, finalizeMeasurement]);
180
+
181
+ // ── Register/unregister with context ────────────────────────────────
182
+ // Keep a ref to the latest props so registry always has current callbacks
183
+ const propsRef = useRef(props);
184
+ propsRef.current = props;
185
+ useEffect(() => {
186
+ registerView({
187
+ id,
188
+ parentId,
189
+ scrollPosition,
190
+ props: propsRef.current
191
+ });
192
+ // Re-measure after registration. onLayout may have fired before
193
+ // registerView (useEffect runs after paint), causing updateMeasurements
194
+ // to silently drop data (entry didn't exist yet in registry).
195
+ measureWithHandler();
196
+ return () => unregisterView(id);
197
+ }, [id, parentId, scrollPosition, registerView, unregisterView, measureWithHandler]);
198
+
199
+ // ── Update registry when props change ────────────────────────────────
200
+ useEffect(() => {
201
+ updateViewProps(id, propsRef.current);
202
+ }, [id, updateViewProps, draggable, props.receptive, props.monitoring, props.collisionAlgorithm]);
203
+ const onLayout = () => {
204
+ measureWithHandler();
205
+ // Re-measure drag bounds on every layout change. The initial useEffect
206
+ // measurement may fire before the parent flex layout has settled (especially
207
+ // on native where Fabric commits layout asynchronously). By the time this
208
+ // DraxView receives onLayout, the bounds view's layout is also finalized.
209
+ if (dragBoundsRef?.current && rootViewRef.current) {
210
+ dragBoundsRef.current.measureLayout(rootViewRef.current, (x, y, width, height) => {
211
+ dragBoundsSV.value = {
212
+ x,
213
+ y,
214
+ width,
215
+ height
216
+ };
217
+ }, () => {});
218
+ }
219
+ };
220
+
221
+ // External registration — useLayoutEffect so SortableItem's FLIP
222
+ // useLayoutEffect (which runs after children) sees measureFnRef.
223
+ useLayoutEffect(() => {
224
+ if (registration) {
225
+ registration({
226
+ id,
227
+ measure: measureWithHandler
228
+ });
229
+ return () => registration(undefined);
230
+ }
231
+ return undefined;
232
+ }, [id, measureWithHandler, registration]);
233
+
234
+ // ── Gesture (per-view, UI thread) ──────────────────────────────────
235
+ // Use a SharedValue for spatialIndex so it updates reactively after registration
236
+ const spatialIndexSV = useSharedValue(-1);
237
+
238
+ // Update spatialIndex after registration completes
239
+ useEffect(() => {
240
+ const entry = getViewEntry(id);
241
+ const index = entry?.spatialIndex ?? -1;
242
+ spatialIndexSV.value = index;
243
+ }, [id, getViewEntry, spatialIndexSV]);
244
+
245
+ // Sync scroll position to spatial index — delegated to a separate hook
246
+ // so the worklet closure only contains SharedValues (no refs from DraxView scope).
247
+ useScrollPositionSync(scrollPosition, spatialIndexSV, scrollOffsetsSV);
248
+
249
+ // SharedValues for gesture config — RNGH 3.0 reconfigures the native
250
+ // handler on the UI thread, bypassing JS→native bridge entirely.
251
+ const draggableSV = useSharedValue(draggable);
252
+ const longPressDelaySV = useSharedValue(longPressDelay);
253
+
254
+ // Update SharedValues when props change (in useEffect to avoid render-time writes)
255
+ useEffect(() => {
256
+ draggableSV.value = draggable;
257
+ longPressDelaySV.value = longPressDelay;
258
+ }, [draggable, longPressDelay, draggableSV, longPressDelaySV]);
259
+
260
+ // Drag bounds: measure the bounds view relative to root and store in SharedValue
261
+ const dragBoundsSV = useSharedValue(null);
262
+ useEffect(() => {
263
+ if (dragBoundsRef?.current && rootViewRef.current) {
264
+ dragBoundsRef.current.measureLayout(rootViewRef.current, (x, y, width, height) => {
265
+ dragBoundsSV.value = {
266
+ x,
267
+ y,
268
+ width,
269
+ height
270
+ };
271
+ }, () => {});
272
+ } else {
273
+ dragBoundsSV.value = null;
274
+ }
275
+ }, [dragBoundsRef, rootViewRef, dragBoundsSV]);
276
+ const gesture = useDragGesture(id, spatialIndexSV, draggableSV, longPressDelaySV, lockDragXPosition, lockDragYPosition, dragBoundsSV, props.dragActivationFailOffset, scrollHorizontal);
277
+
278
+ // ── Animated styles ────────────────────────────────────────────────
279
+ const {
280
+ animatedDragStyle
281
+ } = useViewStyles(id, props);
282
+
283
+ // ── Memoize parent for DraxSubprovider ──────────────────────────────
284
+ const subproviderParent = useMemo(() => ({
285
+ id,
286
+ viewRef
287
+ }), [id, viewRef]);
288
+
289
+ // ── Rendered children ──────────────────────────────────────────────
290
+ let renderedContent;
291
+ if (renderContent) {
292
+ renderedContent = renderContent({
293
+ viewState: {
294
+ dragStatus: DraxViewDragStatus.Inactive,
295
+ receiveStatus: DraxViewReceiveStatus.Inactive
296
+ },
297
+ hover: false,
298
+ children,
299
+ dimensions: measurementsRef.current ? {
300
+ width: measurementsRef.current.width,
301
+ height: measurementsRef.current.height
302
+ } : undefined
303
+ });
304
+ } else {
305
+ renderedContent = children;
306
+ }
307
+ if (isParent) {
308
+ renderedContent = /*#__PURE__*/_jsx(DraxSubprovider, {
309
+ parent: subproviderParent,
310
+ children: renderedContent
311
+ });
312
+ }
313
+
314
+ // When dragHandle is true, provide the gesture via context so DraxHandle can attach it
315
+ if (dragHandle) {
316
+ renderedContent = /*#__PURE__*/_jsx(DraxHandleContext.Provider, {
317
+ value: {
318
+ gesture
319
+ },
320
+ children: renderedContent
321
+ });
322
+ }
323
+
324
+ // ── Extract view-safe props ─────────────────────────────────────
325
+ // DraxView is memo()'d so props identity is stable between renders.
326
+ const viewProps = useMemo(() => extractViewProps(props), [props]);
327
+
328
+ // ── Render ─────────────────────────────────────────────────────────
329
+ const viewElement = /*#__PURE__*/_jsx(Reanimated.View, {
330
+ ...viewProps,
331
+ style: [style, animatedDragStyle],
332
+ ref: viewRef,
333
+ onLayout: onLayout,
334
+ collapsable: false,
335
+ children: renderedContent
336
+ });
337
+
338
+ // When dragHandle is true, skip the GestureDetector wrapper —
339
+ // the gesture is attached to the DraxHandle child instead.
340
+ if (dragHandle) {
341
+ return viewElement;
342
+ }
343
+ return /*#__PURE__*/_jsx(GestureDetector, {
344
+ gesture: gesture,
345
+ children: viewElement
346
+ });
347
+ });
348
+ //# sourceMappingURL=DraxView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["memo","useCallback","useEffect","useLayoutEffect","useMemo","useRef","Platform","GestureDetector","Reanimated","useAnimatedReaction","useSharedValue","DraxHandleContext","DraxSubprovider","useDraxContext","useDraxId","useDragGesture","isDraggable","computeIsDraggable","useViewStyles","defaultLongPressDelay","DraxViewDragStatus","DraxViewReceiveStatus","jsx","_jsx","DRAX_PROP_KEYS","Set","extractViewProps","props","viewProps","key","value","Object","entries","has","useScrollPositionSync","scrollPosition","spatialIndexSV","scrollOffsetsSV","pos","prev","x","y","idx","modify","offsets","length","DraxView","renderContent","registration","onMeasure","parent","parentProp","isParent","longPressDelay","lockDragXPosition","lockDragYPosition","scrollHorizontal","dragHandle","dragBoundsRef","children","style","id","idProp","draggable","registerView","unregisterView","updateMeasurements","updateMeasurementsCtx","updateViewProps","getViewEntry","rootViewRef","contextParent","parentId","parentViewRef","viewRef","measurementsRef","undefined","finalizeMeasurement","width","height","handler","transformDetected","measurements","_transformDetected","current","measureWithHandler","view","measureLayout","OS","parentData","parentScroll","layoutX","layoutY","parentView","measure","_vx","_vy","_vw","_vh","pageX","pageY","_px","_py","_pw","_ph","parentPageX","parentPageY","visualX","visualY","Math","abs","propsRef","receptive","monitoring","collisionAlgorithm","onLayout","dragBoundsSV","entry","index","spatialIndex","draggableSV","longPressDelaySV","gesture","dragActivationFailOffset","animatedDragStyle","subproviderParent","renderedContent","viewState","dragStatus","Inactive","receiveStatus","hover","dimensions","Provider","viewElement","View","ref","collapsable"],"sourceRoot":"../../src","sources":["DraxView.tsx"],"mappings":"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","ignoreList":[]}