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,121 @@
1
+ "use strict";
2
+
3
+ import { useEffect, useState } from 'react';
4
+ import { StyleSheet, Text, View } from 'react-native';
5
+ import { jsx as _jsx } from "react/jsx-runtime";
6
+ function computeAbsoluteEntries(entries, scrollOffsets) {
7
+ return entries.map(entry => {
8
+ let absX = entry.x;
9
+ let absY = entry.y;
10
+ let parentIdx = entry.parentIndex;
11
+ while (parentIdx >= 0 && parentIdx < entries.length) {
12
+ const parent = entries[parentIdx];
13
+ const parentScroll = scrollOffsets[parentIdx] ?? {
14
+ x: 0,
15
+ y: 0
16
+ };
17
+ absX += parent.x - parentScroll.x;
18
+ absY += parent.y - parentScroll.y;
19
+ parentIdx = parent.parentIndex;
20
+ }
21
+ return {
22
+ ...entry,
23
+ absX,
24
+ absY
25
+ };
26
+ });
27
+ }
28
+ function getColor(entry) {
29
+ if (entry.receptive && entry.draggable) return '#e07a52'; // orange — both
30
+ if (entry.receptive) return '#22c55e'; // green — receiver
31
+ if (entry.draggable) return '#3b82f6'; // blue — draggable
32
+ if (entry.monitoring) return '#eab308'; // yellow — monitor
33
+ return '#888888'; // grey — passive
34
+ }
35
+ function getLabel(entry) {
36
+ const parts = [];
37
+ if (entry.draggable) parts.push('D');
38
+ if (entry.receptive) parts.push('R');
39
+ if (entry.monitoring) parts.push('M');
40
+ return parts.join('+') || '?';
41
+ }
42
+
43
+ /**
44
+ * Debug overlay that visualizes all registered Drax views.
45
+ * Reads the spatial index SharedValue and renders colored borders
46
+ * showing view bounds, roles (draggable/receptive/monitoring), and IDs.
47
+ *
48
+ * Rendered as an absolute-fill sibling in DraxProvider when debug={true}.
49
+ */
50
+ export const DebugOverlay = ({
51
+ spatialIndexSV,
52
+ scrollOffsetsSV
53
+ }) => {
54
+ const [entries, setEntries] = useState([]);
55
+
56
+ // Poll the spatial index periodically (SharedValues update on UI thread,
57
+ // reading .value on JS thread gives the latest committed value).
58
+ useEffect(() => {
59
+ const update = () => {
60
+ const raw = spatialIndexSV.value;
61
+ const scrolls = scrollOffsetsSV.value;
62
+ if (raw.length > 0) {
63
+ setEntries(computeAbsoluteEntries(raw, scrolls));
64
+ } else {
65
+ setEntries([]);
66
+ }
67
+ };
68
+ update();
69
+ const interval = setInterval(update, 500);
70
+ return () => clearInterval(interval);
71
+ }, [spatialIndexSV, scrollOffsetsSV]);
72
+ if (entries.length === 0) return null;
73
+ return /*#__PURE__*/_jsx(View, {
74
+ style: styles.container,
75
+ pointerEvents: "none",
76
+ children: entries.map(entry => {
77
+ const color = getColor(entry);
78
+ const label = getLabel(entry);
79
+ return /*#__PURE__*/_jsx(View, {
80
+ style: [styles.overlay, {
81
+ left: entry.absX,
82
+ top: entry.absY,
83
+ width: entry.width,
84
+ height: entry.height,
85
+ borderColor: color
86
+ }],
87
+ children: /*#__PURE__*/_jsx(Text, {
88
+ style: [styles.label, {
89
+ backgroundColor: color
90
+ }],
91
+ children: label
92
+ })
93
+ }, entry.id);
94
+ })
95
+ });
96
+ };
97
+ const styles = StyleSheet.create({
98
+ container: {
99
+ ...StyleSheet.absoluteFillObject,
100
+ zIndex: 99999
101
+ },
102
+ overlay: {
103
+ position: 'absolute',
104
+ borderWidth: 2,
105
+ borderStyle: 'dashed'
106
+ },
107
+ label: {
108
+ position: 'absolute',
109
+ top: -1,
110
+ left: -1,
111
+ color: '#fff',
112
+ fontSize: 9,
113
+ fontWeight: '700',
114
+ fontFamily: 'monospace',
115
+ paddingHorizontal: 3,
116
+ paddingVertical: 1,
117
+ borderRadius: 2,
118
+ overflow: 'hidden'
119
+ }
120
+ });
121
+ //# sourceMappingURL=DebugOverlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useState","StyleSheet","Text","View","jsx","_jsx","computeAbsoluteEntries","entries","scrollOffsets","map","entry","absX","x","absY","y","parentIdx","parentIndex","length","parent","parentScroll","getColor","receptive","draggable","monitoring","getLabel","parts","push","join","DebugOverlay","spatialIndexSV","scrollOffsetsSV","setEntries","update","raw","value","scrolls","interval","setInterval","clearInterval","style","styles","container","pointerEvents","children","color","label","overlay","left","top","width","height","borderColor","backgroundColor","id","create","absoluteFillObject","zIndex","position","borderWidth","borderStyle","fontSize","fontWeight","fontFamily","paddingHorizontal","paddingVertical","borderRadius","overflow"],"sourceRoot":"../../src","sources":["DebugOverlay.tsx"],"mappings":";;AACA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAC3C,SAASC,UAAU,EAAEC,IAAI,EAAEC,IAAI,QAAQ,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAetD,SAASC,sBAAsBA,CAC7BC,OAAuB,EACvBC,aAAyB,EACR;EACjB,OAAOD,OAAO,CAACE,GAAG,CAAEC,KAAK,IAAK;IAC5B,IAAIC,IAAI,GAAGD,KAAK,CAACE,CAAC;IAClB,IAAIC,IAAI,GAAGH,KAAK,CAACI,CAAC;IAClB,IAAIC,SAAS,GAAGL,KAAK,CAACM,WAAW;IAEjC,OAAOD,SAAS,IAAI,CAAC,IAAIA,SAAS,GAAGR,OAAO,CAACU,MAAM,EAAE;MACnD,MAAMC,MAAM,GAAGX,OAAO,CAACQ,SAAS,CAAE;MAClC,MAAMI,YAAY,GAAGX,aAAa,CAACO,SAAS,CAAC,IAAI;QAAEH,CAAC,EAAE,CAAC;QAAEE,CAAC,EAAE;MAAE,CAAC;MAC/DH,IAAI,IAAIO,MAAM,CAACN,CAAC,GAAGO,YAAY,CAACP,CAAC;MACjCC,IAAI,IAAIK,MAAM,CAACJ,CAAC,GAAGK,YAAY,CAACL,CAAC;MACjCC,SAAS,GAAGG,MAAM,CAACF,WAAW;IAChC;IAEA,OAAO;MAAE,GAAGN,KAAK;MAAEC,IAAI;MAAEE;IAAK,CAAC;EACjC,CAAC,CAAC;AACJ;AAEA,SAASO,QAAQA,CAACV,KAAmB,EAAU;EAC7C,IAAIA,KAAK,CAACW,SAAS,IAAIX,KAAK,CAACY,SAAS,EAAE,OAAO,SAAS,CAAC,CAAC;EAC1D,IAAIZ,KAAK,CAACW,SAAS,EAAE,OAAO,SAAS,CAAC,CAAC;EACvC,IAAIX,KAAK,CAACY,SAAS,EAAE,OAAO,SAAS,CAAC,CAAC;EACvC,IAAIZ,KAAK,CAACa,UAAU,EAAE,OAAO,SAAS,CAAC,CAAC;EACxC,OAAO,SAAS,CAAC,CAAC;AACpB;AAEA,SAASC,QAAQA,CAACd,KAAmB,EAAU;EAC7C,MAAMe,KAAe,GAAG,EAAE;EAC1B,IAAIf,KAAK,CAACY,SAAS,EAAEG,KAAK,CAACC,IAAI,CAAC,GAAG,CAAC;EACpC,IAAIhB,KAAK,CAACW,SAAS,EAAEI,KAAK,CAACC,IAAI,CAAC,GAAG,CAAC;EACpC,IAAIhB,KAAK,CAACa,UAAU,EAAEE,KAAK,CAACC,IAAI,CAAC,GAAG,CAAC;EACrC,OAAOD,KAAK,CAACE,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG;AAC/B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,YAAY,GAAGA,CAAC;EAC3BC,cAAc;EACdC;AACiB,CAAC,KAAgB;EAClC,MAAM,CAACvB,OAAO,EAAEwB,UAAU,CAAC,GAAG/B,QAAQ,CAAkB,EAAE,CAAC;;EAE3D;EACA;EACAD,SAAS,CAAC,MAAM;IACd,MAAMiC,MAAM,GAAGA,CAAA,KAAM;MACnB,MAAMC,GAAG,GAAGJ,cAAc,CAACK,KAAK;MAChC,MAAMC,OAAO,GAAGL,eAAe,CAACI,KAAK;MACrC,IAAID,GAAG,CAAChB,MAAM,GAAG,CAAC,EAAE;QAClBc,UAAU,CAACzB,sBAAsB,CAAC2B,GAAG,EAAEE,OAAO,CAAC,CAAC;MAClD,CAAC,MAAM;QACLJ,UAAU,CAAC,EAAE,CAAC;MAChB;IACF,CAAC;IAEDC,MAAM,CAAC,CAAC;IACR,MAAMI,QAAQ,GAAGC,WAAW,CAACL,MAAM,EAAE,GAAG,CAAC;IACzC,OAAO,MAAMM,aAAa,CAACF,QAAQ,CAAC;EACtC,CAAC,EAAE,CAACP,cAAc,EAAEC,eAAe,CAAC,CAAC;EAErC,IAAIvB,OAAO,CAACU,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI;EAErC,oBACEZ,IAAA,CAACF,IAAI;IAACoC,KAAK,EAAEC,MAAM,CAACC,SAAU;IAACC,aAAa,EAAC,MAAM;IAAAC,QAAA,EAChDpC,OAAO,CAACE,GAAG,CAAEC,KAAK,IAAK;MACtB,MAAMkC,KAAK,GAAGxB,QAAQ,CAACV,KAAK,CAAC;MAC7B,MAAMmC,KAAK,GAAGrB,QAAQ,CAACd,KAAK,CAAC;MAC7B,oBACEL,IAAA,CAACF,IAAI;QAEHoC,KAAK,EAAE,CACLC,MAAM,CAACM,OAAO,EACd;UACEC,IAAI,EAAErC,KAAK,CAACC,IAAI;UAChBqC,GAAG,EAAEtC,KAAK,CAACG,IAAI;UACfoC,KAAK,EAAEvC,KAAK,CAACuC,KAAK;UAClBC,MAAM,EAAExC,KAAK,CAACwC,MAAM;UACpBC,WAAW,EAAEP;QACf,CAAC,CACD;QAAAD,QAAA,eAEFtC,IAAA,CAACH,IAAI;UAACqC,KAAK,EAAE,CAACC,MAAM,CAACK,KAAK,EAAE;YAAEO,eAAe,EAAER;UAAM,CAAC,CAAE;UAAAD,QAAA,EACrDE;QAAK,CACF;MAAC,GAdFnC,KAAK,CAAC2C,EAeP,CAAC;IAEX,CAAC;EAAC,CACE,CAAC;AAEX,CAAC;AAED,MAAMb,MAAM,GAAGvC,UAAU,CAACqD,MAAM,CAAC;EAC/Bb,SAAS,EAAE;IACT,GAAGxC,UAAU,CAACsD,kBAAkB;IAChCC,MAAM,EAAE;EACV,CAAC;EACDV,OAAO,EAAE;IACPW,QAAQ,EAAE,UAAU;IACpBC,WAAW,EAAE,CAAC;IACdC,WAAW,EAAE;EACf,CAAC;EACDd,KAAK,EAAE;IACLY,QAAQ,EAAE,UAAU;IACpBT,GAAG,EAAE,CAAC,CAAC;IACPD,IAAI,EAAE,CAAC,CAAC;IACRH,KAAK,EAAE,MAAM;IACbgB,QAAQ,EAAE,CAAC;IACXC,UAAU,EAAE,KAAK;IACjBC,UAAU,EAAE,WAAW;IACvBC,iBAAiB,EAAE,CAAC;IACpBC,eAAe,EAAE,CAAC;IAClBC,YAAY,EAAE,CAAC;IACfC,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ import { DraxHandle } from "./DraxHandle.js";
4
+ import { DraxList } from "./DraxList.js";
5
+ import { DraxProvider } from "./DraxProvider.js";
6
+ import { DraxScrollView } from "./DraxScrollView.js";
7
+ import { DraxView } from "./DraxView.js";
8
+ import { SortableBoardContainer } from "./SortableBoardContainer.js";
9
+ import { SortableContainer } from "./SortableContainer.js";
10
+ import { SortableItem } from "./SortableItem.js";
11
+
12
+ /**
13
+ * Namespace object for convenient access to all Drax components.
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * import { Drax } from 'react-native-drax';
18
+ *
19
+ * <Drax.Provider>
20
+ * <Drax.View draggable>
21
+ * <Drax.Handle><GripIcon /></Drax.Handle>
22
+ * </Drax.View>
23
+ * </Drax.Provider>
24
+ * ```
25
+ */
26
+ export const Drax = {
27
+ Handle: DraxHandle,
28
+ List: DraxList,
29
+ Provider: DraxProvider,
30
+ ScrollView: DraxScrollView,
31
+ View: DraxView,
32
+ SortableBoardContainer,
33
+ SortableContainer,
34
+ SortableItem
35
+ };
36
+ //# sourceMappingURL=Drax.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DraxHandle","DraxList","DraxProvider","DraxScrollView","DraxView","SortableBoardContainer","SortableContainer","SortableItem","Drax","Handle","List","Provider","ScrollView","View"],"sourceRoot":"../../src","sources":["Drax.ts"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,iBAAc;AACzC,SAASC,QAAQ,QAAQ,eAAY;AACrC,SAASC,YAAY,QAAQ,mBAAgB;AAC7C,SAASC,cAAc,QAAQ,qBAAkB;AACjD,SAASC,QAAQ,QAAQ,eAAY;AACrC,SAASC,sBAAsB,QAAQ,6BAA0B;AACjE,SAASC,iBAAiB,QAAQ,wBAAqB;AACvD,SAASC,YAAY,QAAQ,mBAAgB;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,IAAI,GAAG;EAClBC,MAAM,EAAET,UAAU;EAClBU,IAAI,EAAET,QAAQ;EACdU,QAAQ,EAAET,YAAY;EACtBU,UAAU,EAAET,cAAc;EAC1BU,IAAI,EAAET,QAAQ;EACdC,sBAAsB;EACtBC,iBAAiB;EACjBC;AACF,CAAU","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ import { createContext } from 'react';
4
+ export const DraxContext = /*#__PURE__*/createContext(undefined);
5
+ DraxContext.displayName = 'Drax';
6
+ //# sourceMappingURL=DraxContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createContext","DraxContext","undefined","displayName"],"sourceRoot":"../../src","sources":["DraxContext.ts"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,OAAO;AAIrC,OAAO,MAAMC,WAAW,gBAAGD,aAAa,CACtCE,SACF,CAAC;AACDD,WAAW,CAACE,WAAW,GAAG,MAAM","ignoreList":[]}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ import { use } from 'react';
4
+ import { GestureDetector } from 'react-native-gesture-handler';
5
+ import Reanimated from 'react-native-reanimated';
6
+ import { DraxHandleContext } from "./DraxHandleContext.js";
7
+ import { jsx as _jsx } from "react/jsx-runtime";
8
+ /**
9
+ * Drag handle component — only touches on this area will start a drag.
10
+ *
11
+ * Must be a descendant of a `DraxView` that has `dragHandle={true}`.
12
+ * The parent DraxView provides its gesture via context; this component
13
+ * attaches it to the handle's touch area via GestureDetector.
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * <DraxView dragHandle style={styles.row}>
18
+ * <DraxHandle style={styles.grip}>
19
+ * <GripIcon />
20
+ * </DraxHandle>
21
+ * <Text>Item content</Text>
22
+ * </DraxView>
23
+ * ```
24
+ */
25
+ export function DraxHandle({
26
+ children,
27
+ style
28
+ }) {
29
+ const ctx = use(DraxHandleContext);
30
+ if (!ctx) {
31
+ // No context = either misconfigured, or rendering inside hover overlay
32
+ // (which clones children outside the DraxHandleContext tree).
33
+ // Render as a plain view — the gesture isn't needed in hover.
34
+ return /*#__PURE__*/_jsx(Reanimated.View, {
35
+ style: style,
36
+ children: children
37
+ });
38
+ }
39
+ return /*#__PURE__*/_jsx(GestureDetector, {
40
+ gesture: ctx.gesture,
41
+ children: /*#__PURE__*/_jsx(Reanimated.View, {
42
+ style: style,
43
+ children: children
44
+ })
45
+ });
46
+ }
47
+ //# sourceMappingURL=DraxHandle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["use","GestureDetector","Reanimated","DraxHandleContext","jsx","_jsx","DraxHandle","children","style","ctx","View","gesture"],"sourceRoot":"../../src","sources":["DraxHandle.tsx"],"mappings":";;AACA,SAASA,GAAG,QAAQ,OAAO;AAE3B,SAASC,eAAe,QAAQ,8BAA8B;AAC9D,OAAOC,UAAU,MAAM,yBAAyB;AAEhD,SAASC,iBAAiB,QAAQ,wBAAqB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAOxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,UAAUA,CAAC;EAAEC,QAAQ;EAAEC;AAAuB,CAAC,EAAE;EAC/D,MAAMC,GAAG,GAAGT,GAAG,CAACG,iBAAiB,CAAC;EAElC,IAAI,CAACM,GAAG,EAAE;IACR;IACA;IACA;IACA,oBACEJ,IAAA,CAACH,UAAU,CAACQ,IAAI;MAACF,KAAK,EAAEA,KAAM;MAAAD,QAAA,EAC3BA;IAAQ,CACM,CAAC;EAEtB;EAEA,oBACEF,IAAA,CAACJ,eAAe;IAACU,OAAO,EAAEF,GAAG,CAACE,OAAQ;IAAAJ,QAAA,eACpCF,IAAA,CAACH,UAAU,CAACQ,IAAI;MAACF,KAAK,EAAEA,KAAM;MAAAD,QAAA,EAC3BA;IAAQ,CACM;EAAC,CACH,CAAC;AAEtB","ignoreList":[]}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ import { createContext } from 'react';
4
+ /**
5
+ * Context that passes the drag gesture from a DraxView (with `dragHandle` prop)
6
+ * to its descendant DraxHandle component. When a DraxView has `dragHandle={true}`,
7
+ * it does NOT wrap itself in a GestureDetector. Instead, the gesture is provided
8
+ * via this context so that DraxHandle can attach it to a smaller touch area.
9
+ */
10
+ export const DraxHandleContext = /*#__PURE__*/createContext(null);
11
+ //# sourceMappingURL=DraxHandleContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createContext","DraxHandleContext"],"sourceRoot":"../../src","sources":["DraxHandleContext.ts"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,OAAO;AAQrC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,iBAAiB,gBAAGD,aAAa,CAAgC,IAAI,CAAC","ignoreList":[]}
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+
3
+ import { useRef } from 'react';
4
+ import { useSortableList } from "./hooks/useSortableList.js";
5
+ import { SortableContainer } from "./SortableContainer.js";
6
+ import { SortableItem } from "./SortableItem.js";
7
+ import { jsx as _jsx } from "react/jsx-runtime";
8
+ /**
9
+ * List-agnostic sortable list component.
10
+ *
11
+ * Wraps any list component (FlatList, FlashList, LegendList, etc.) with
12
+ * drag-and-drop reordering powered by `useSortableList` + `SortableContainer` + `SortableItem`.
13
+ *
14
+ * For full control, use the composable API directly:
15
+ * `useSortableList` + `SortableContainer` + `SortableItem`.
16
+ *
17
+ * Any extra props beyond the ones defined in `DraxListProps` are forwarded
18
+ * to the underlying list component (e.g. `estimatedItemSize` for FlashList).
19
+ */
20
+ export const DraxList = ({
21
+ component: ListComponent,
22
+ ref,
23
+ id,
24
+ data,
25
+ keyExtractor,
26
+ onReorder,
27
+ renderItem,
28
+ reorderStrategy,
29
+ longPressDelay,
30
+ lockToMainAxis,
31
+ animationConfig,
32
+ inactiveItemStyle,
33
+ itemEntering,
34
+ itemExiting,
35
+ itemDraxViewProps,
36
+ containerDraxViewProps,
37
+ containerStyle,
38
+ onDragStart,
39
+ onDragPositionChange,
40
+ onDragEnd,
41
+ style,
42
+ horizontal,
43
+ numColumns,
44
+ ...listProps
45
+ }) => {
46
+ const isHorizontal = horizontal ?? false;
47
+ const cols = numColumns ?? 1;
48
+ const sortable = useSortableList({
49
+ id,
50
+ data,
51
+ keyExtractor,
52
+ onReorder,
53
+ horizontal: isHorizontal,
54
+ numColumns: cols,
55
+ reorderStrategy,
56
+ longPressDelay,
57
+ lockToMainAxis,
58
+ animationConfig,
59
+ inactiveItemStyle,
60
+ itemEntering,
61
+ itemExiting,
62
+ onDragStart,
63
+ onDragPositionChange,
64
+ onDragEnd
65
+ });
66
+ const listRef = useRef(null);
67
+
68
+ // Forward external ref
69
+ const setRef = instance => {
70
+ listRef.current = instance;
71
+ if (ref) {
72
+ if (typeof ref === 'function') {
73
+ ref(instance);
74
+ } else {
75
+ ref.current = instance;
76
+ }
77
+ }
78
+ };
79
+
80
+ // Lazy-load FlatList only when no component is provided.
81
+ // This avoids importing react-native's FlatList at module scope
82
+ // when the consumer uses a different list component.
83
+ const ResolvedList = ListComponent ?? require('react-native').FlatList;
84
+ return /*#__PURE__*/_jsx(SortableContainer, {
85
+ sortable: sortable,
86
+ scrollRef: listRef,
87
+ style: containerStyle,
88
+ draxViewProps: containerDraxViewProps,
89
+ children: /*#__PURE__*/_jsx(ResolvedList, {
90
+ ...listProps,
91
+ style: style,
92
+ ref: setRef,
93
+ horizontal: isHorizontal,
94
+ keyExtractor: sortable.stableKeyExtractor,
95
+ numColumns: cols,
96
+ data: sortable.data,
97
+ onScroll: sortable.onScroll,
98
+ onContentSizeChange: sortable.onContentSizeChange,
99
+ renderItem: info => /*#__PURE__*/_jsx(SortableItem, {
100
+ sortable: sortable,
101
+ index: info.index,
102
+ ...itemDraxViewProps,
103
+ children: renderItem(info)
104
+ })
105
+ })
106
+ });
107
+ };
108
+ //# sourceMappingURL=DraxList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useRef","useSortableList","SortableContainer","SortableItem","jsx","_jsx","DraxList","component","ListComponent","ref","id","data","keyExtractor","onReorder","renderItem","reorderStrategy","longPressDelay","lockToMainAxis","animationConfig","inactiveItemStyle","itemEntering","itemExiting","itemDraxViewProps","containerDraxViewProps","containerStyle","onDragStart","onDragPositionChange","onDragEnd","style","horizontal","numColumns","listProps","isHorizontal","cols","sortable","listRef","setRef","instance","current","ResolvedList","require","FlatList","scrollRef","draxViewProps","children","stableKeyExtractor","onScroll","onContentSizeChange","info","index"],"sourceRoot":"../../src","sources":["DraxList.tsx"],"mappings":";;AACA,SAASA,MAAM,QAAQ,OAAO;AAQ9B,SAASC,eAAe,QAAQ,4BAAyB;AACzD,SAASC,iBAAiB,QAAQ,wBAAqB;AACvD,SAASC,YAAY,QAAQ,mBAAgB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AA6D9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,QAAQ,GAAGA,CAAK;EAC3BC,SAAS,EAAEC,aAAa;EACxBC,GAAG;EACHC,EAAE;EACFC,IAAI;EACJC,YAAY;EACZC,SAAS;EACTC,UAAU;EACVC,eAAe;EACfC,cAAc;EACdC,cAAc;EACdC,eAAe;EACfC,iBAAiB;EACjBC,YAAY;EACZC,WAAW;EACXC,iBAAiB;EACjBC,sBAAsB;EACtBC,cAAc;EACdC,WAAW;EACXC,oBAAoB;EACpBC,SAAS;EACTC,KAAK;EACLC,UAAU;EACVC,UAAU;EACV,GAAGC;AACmC,CAAC,KAAgB;EACvD,MAAMC,YAAY,GAAGH,UAAU,IAAI,KAAK;EACxC,MAAMI,IAAI,GAAGH,UAAU,IAAI,CAAC;EAE5B,MAAMI,QAAQ,GAAGjC,eAAe,CAAC;IAC/BS,EAAE;IACFC,IAAI;IACJC,YAAY;IACZC,SAAS;IACTgB,UAAU,EAAEG,YAAY;IACxBF,UAAU,EAAEG,IAAI;IAChBlB,eAAe;IACfC,cAAc;IACdC,cAAc;IACdC,eAAe;IACfC,iBAAiB;IACjBC,YAAY;IACZC,WAAW;IACXI,WAAW;IACXC,oBAAoB;IACpBC;EACF,CAAC,CAAC;EAEF,MAAMQ,OAAO,GAAGnC,MAAM,CAAc,IAAI,CAAC;;EAEzC;EACA,MAAMoC,MAAM,GAAIC,QAA4B,IAAK;IAC9CF,OAAO,CAASG,OAAO,GAAGD,QAAQ;IACnC,IAAI5B,GAAG,EAAE;MACP,IAAI,OAAOA,GAAG,KAAK,UAAU,EAAE;QAC7BA,GAAG,CAAC4B,QAAQ,CAAC;MACf,CAAC,MAAM;QACJ5B,GAAG,CAAS6B,OAAO,GAAGD,QAAQ;MACjC;IACF;EACF,CAAC;;EAED;EACA;EACA;EACA,MAAME,YAAY,GAAG/B,aAAa,IAAIgC,OAAO,CAAC,cAAc,CAAC,CAACC,QAAQ;EAEtE,oBACEpC,IAAA,CAACH,iBAAiB;IAChBgC,QAAQ,EAAEA,QAAS;IACnBQ,SAAS,EAAEP,OAAQ;IACnBP,KAAK,EAAEJ,cAAe;IACtBmB,aAAa,EAAEpB,sBAAuB;IAAAqB,QAAA,eAEtCvC,IAAA,CAACkC,YAAY;MAAA,GACPR,SAAS;MACbH,KAAK,EAAEA,KAAM;MACbnB,GAAG,EAAE2B,MAAO;MACZP,UAAU,EAAEG,YAAa;MACzBpB,YAAY,EAAEsB,QAAQ,CAACW,kBAAmB;MAC1Cf,UAAU,EAAEG,IAAK;MACjBtB,IAAI,EAAEuB,QAAQ,CAACvB,IAAK;MACpBmC,QAAQ,EAAEZ,QAAQ,CAACY,QAAS;MAC5BC,mBAAmB,EAAEb,QAAQ,CAACa,mBAAoB;MAClDjC,UAAU,EAAGkC,IAA2B,iBACtC3C,IAAA,CAACF,YAAY;QACX+B,QAAQ,EAAEA,QAAS;QACnBe,KAAK,EAAED,IAAI,CAACC,KAAM;QAAA,GACd3B,iBAAiB;QAAAsB,QAAA,EAEpB9B,UAAU,CAACkC,IAAI;MAAC,CACL;IACd,CACH;EAAC,CACe,CAAC;AAExB,CAAC","ignoreList":[]}
@@ -0,0 +1,203 @@
1
+ "use strict";
2
+
3
+ import { useCallback, useMemo, useRef, useState } from 'react';
4
+ import { StyleSheet, View } from 'react-native';
5
+ import { useSharedValue } from 'react-native-reanimated';
6
+ import { DebugOverlay } from "./DebugOverlay.js";
7
+ import { DraxContext } from "./DraxContext.js";
8
+ import { HoverLayer } from "./HoverLayer.js";
9
+ import { useCallbackDispatch } from "./hooks/useCallbackDispatch.js";
10
+ import { useSpatialIndex } from "./hooks/useSpatialIndex.js";
11
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
+ export const DraxProvider = ({
13
+ style = styles.provider,
14
+ debug = false,
15
+ onDragStart: onProviderDragStart,
16
+ onDrag: onProviderDrag,
17
+ onDragEnd: onProviderDragEnd,
18
+ children
19
+ }) => {
20
+ // ── Split SharedValues (by update frequency) ───────────────────────
21
+ // Changes ~2x per drag. Read by all DraxView useAnimatedStyle.
22
+ const draggedIdSV = useSharedValue('');
23
+ // Changes ~3-5x per drag. Read by all DraxView useAnimatedStyle.
24
+ const receiverIdSV = useSharedValue('');
25
+ // Changes ~3x per drag. Read by all DraxView useAnimatedStyle.
26
+ const dragPhaseSV = useSharedValue('idle');
27
+ // Changes every frame during drag. Read ONLY by HoverLayer (1 component).
28
+ const hoverPositionSV = useSharedValue({
29
+ x: 0,
30
+ y: 0
31
+ });
32
+ // Changes every frame during drag. Used by gesture worklet for hit-testing.
33
+ // NOT read by any useAnimatedStyle.
34
+ const dragAbsolutePositionSV = useSharedValue({
35
+ x: 0,
36
+ y: 0
37
+ });
38
+ // ID of the most recently rejected receiver. Read by gesture worklet to skip
39
+ // re-detecting the same rejected receiver. Cleared when drag leaves its bounds.
40
+ const rejectedReceiverIdSV = useSharedValue('');
41
+ // Set once per drag start.
42
+ const grabOffsetSV = useSharedValue({
43
+ x: 0,
44
+ y: 0
45
+ });
46
+ const startPositionSV = useSharedValue({
47
+ x: 0,
48
+ y: 0
49
+ });
50
+ // Screen offset of the root view (measured on layout).
51
+ const rootOffsetSV = useSharedValue({
52
+ x: 0,
53
+ y: 0
54
+ });
55
+ // True after hover content is committed to DOM. False after snap completes.
56
+ const hoverReadySV = useSharedValue(false);
57
+ // Set by SortableContainer.finalizeDrag to defer hover clearing to useLayoutEffect.
58
+ const hoverClearDeferredRef = useRef(false);
59
+ // Animated dimensions for hover content during cross-container transfer.
60
+ // x = width, y = height. {0,0} = no constraint (natural size).
61
+ const hoverDimsSV = useSharedValue({
62
+ x: 0,
63
+ y: 0
64
+ });
65
+
66
+ // ── Dropped items tracking ─────────────────────────────────────────
67
+ const droppedItemsRef = useRef(new Map());
68
+
69
+ // ── Spatial index + registry ───────────────────────────────────────
70
+ const {
71
+ spatialIndexSV,
72
+ scrollOffsetsSV,
73
+ registerView,
74
+ unregisterView,
75
+ updateMeasurements,
76
+ updateScrollOffset,
77
+ updateViewProps,
78
+ getViewEntry
79
+ } = useSpatialIndex();
80
+
81
+ // ── Hover content (ref-based to avoid provider re-renders) ─────────
82
+ // Store content in a ref so changing it doesn't re-render the entire tree.
83
+ // Only HoverLayer re-renders via the version counter.
84
+ const hoverContentRef = useRef(null);
85
+ const hoverStylesRef = useRef(null);
86
+ const [hoverVersion, setHoverVersion] = useState(0);
87
+ const setHoverContent = useCallback(content => {
88
+ hoverContentRef.current = content;
89
+ if (content === null) {
90
+ hoverStylesRef.current = null;
91
+ }
92
+ setHoverVersion(v => v + 1);
93
+ }, []);
94
+
95
+ // ── Callback dispatch ──────────────────────────────────────────────
96
+ const {
97
+ handleDragStart,
98
+ handleReceiverChange,
99
+ handleDragEnd
100
+ } = useCallbackDispatch({
101
+ getViewEntry,
102
+ spatialIndexSV,
103
+ scrollOffsetsSV,
104
+ draggedIdSV,
105
+ receiverIdSV,
106
+ rejectedReceiverIdSV,
107
+ dragPhaseSV,
108
+ hoverPositionSV,
109
+ grabOffsetSV,
110
+ startPositionSV,
111
+ setHoverContent,
112
+ hoverReadySV,
113
+ hoverClearDeferredRef,
114
+ hoverStylesRef,
115
+ onProviderDragStart,
116
+ onProviderDrag,
117
+ onProviderDragEnd,
118
+ droppedItemsRef
119
+ });
120
+
121
+ // ── Root view ref ──────────────────────────────────────────────────
122
+ const rootViewRef = useRef(null);
123
+ const setRootViewRef = ref => {
124
+ rootViewRef.current = ref;
125
+ };
126
+
127
+ // Measure root view's screen position on layout
128
+ const handleRootLayout = useCallback(() => {
129
+ const view = rootViewRef.current;
130
+ if (view) {
131
+ view.measure((_x, _y, _w, _h, pageX, pageY) => {
132
+ rootOffsetSV.value = {
133
+ x: pageX,
134
+ y: pageY
135
+ };
136
+ });
137
+ }
138
+ }, [rootOffsetSV]);
139
+
140
+ // ── Stable context value ───────────────────────────────────────────
141
+ const contextValue = useMemo(() => ({
142
+ // SharedValues
143
+ draggedIdSV,
144
+ receiverIdSV,
145
+ dragPhaseSV,
146
+ hoverPositionSV,
147
+ dragAbsolutePositionSV,
148
+ rejectedReceiverIdSV,
149
+ spatialIndexSV,
150
+ scrollOffsetsSV,
151
+ grabOffsetSV,
152
+ startPositionSV,
153
+ rootOffsetSV,
154
+ hoverReadySV,
155
+ hoverClearDeferredRef,
156
+ hoverDimsSV,
157
+ // Registry methods
158
+ registerView,
159
+ unregisterView,
160
+ updateMeasurements,
161
+ updateScrollOffset,
162
+ updateViewProps,
163
+ getViewEntry,
164
+ // Callback dispatch
165
+ handleDragStart,
166
+ handleReceiverChange,
167
+ handleDragEnd,
168
+ // Hover content
169
+ setHoverContent,
170
+ // Dropped items
171
+ droppedItemsRef,
172
+ // Refs
173
+ rootViewRef
174
+ }), [draggedIdSV, receiverIdSV, dragPhaseSV, hoverPositionSV, dragAbsolutePositionSV, rejectedReceiverIdSV, spatialIndexSV, scrollOffsetsSV, grabOffsetSV, startPositionSV, rootOffsetSV, hoverReadySV, hoverClearDeferredRef, hoverDimsSV, registerView, unregisterView, updateMeasurements, updateScrollOffset, updateViewProps, getViewEntry, handleDragStart, handleReceiverChange, handleDragEnd, setHoverContent, droppedItemsRef]);
175
+ return /*#__PURE__*/_jsx(DraxContext, {
176
+ value: contextValue,
177
+ children: /*#__PURE__*/_jsxs(View, {
178
+ style: style,
179
+ ref: setRootViewRef,
180
+ onLayout: handleRootLayout,
181
+ collapsable: false,
182
+ children: [children, debug && /*#__PURE__*/_jsx(DebugOverlay, {
183
+ spatialIndexSV: spatialIndexSV,
184
+ scrollOffsetsSV: scrollOffsetsSV
185
+ }), /*#__PURE__*/_jsx(HoverLayer, {
186
+ hoverContentRef: hoverContentRef,
187
+ hoverVersion: hoverVersion,
188
+ hoverPositionSV: hoverPositionSV,
189
+ dragPhaseSV: dragPhaseSV,
190
+ receiverIdSV: receiverIdSV,
191
+ hoverReadySV: hoverReadySV,
192
+ hoverDimsSV: hoverDimsSV,
193
+ hoverStylesRef: hoverStylesRef
194
+ })]
195
+ })
196
+ });
197
+ };
198
+ const styles = StyleSheet.create({
199
+ provider: {
200
+ flex: 1
201
+ }
202
+ });
203
+ //# sourceMappingURL=DraxProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useMemo","useRef","useState","StyleSheet","View","useSharedValue","DebugOverlay","DraxContext","HoverLayer","useCallbackDispatch","useSpatialIndex","jsx","_jsx","jsxs","_jsxs","DraxProvider","style","styles","provider","debug","onDragStart","onProviderDragStart","onDrag","onProviderDrag","onDragEnd","onProviderDragEnd","children","draggedIdSV","receiverIdSV","dragPhaseSV","hoverPositionSV","x","y","dragAbsolutePositionSV","rejectedReceiverIdSV","grabOffsetSV","startPositionSV","rootOffsetSV","hoverReadySV","hoverClearDeferredRef","hoverDimsSV","droppedItemsRef","Map","spatialIndexSV","scrollOffsetsSV","registerView","unregisterView","updateMeasurements","updateScrollOffset","updateViewProps","getViewEntry","hoverContentRef","hoverStylesRef","hoverVersion","setHoverVersion","setHoverContent","content","current","v","handleDragStart","handleReceiverChange","handleDragEnd","rootViewRef","setRootViewRef","ref","handleRootLayout","view","measure","_x","_y","_w","_h","pageX","pageY","value","contextValue","onLayout","collapsable","create","flex"],"sourceRoot":"../../src","sources":["DraxProvider.tsx"],"mappings":"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","ignoreList":[]}