react-native-layout-dnd 0.1.0-alpha.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 (340) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +262 -0
  3. package/lib/module/adapters/coordinates.js +135 -0
  4. package/lib/module/adapters/coordinates.js.map +1 -0
  5. package/lib/module/adapters/scroll.js +81 -0
  6. package/lib/module/adapters/scroll.js.map +1 -0
  7. package/lib/module/adapters/virtualizedList.js +69 -0
  8. package/lib/module/adapters/virtualizedList.js.map +1 -0
  9. package/lib/module/components/DndProvider.js +1144 -0
  10. package/lib/module/components/DndProvider.js.map +1 -0
  11. package/lib/module/components/DragHandle.js +65 -0
  12. package/lib/module/components/DragHandle.js.map +1 -0
  13. package/lib/module/components/GridController.js +151 -0
  14. package/lib/module/components/GridController.js.map +1 -0
  15. package/lib/module/components/GridDragHandle.js +15 -0
  16. package/lib/module/components/GridDragHandle.js.map +1 -0
  17. package/lib/module/components/GridZoneView.js +59 -0
  18. package/lib/module/components/GridZoneView.js.map +1 -0
  19. package/lib/module/components/SortableGrid.js +305 -0
  20. package/lib/module/components/SortableGrid.js.map +1 -0
  21. package/lib/module/components/SortableList.js +714 -0
  22. package/lib/module/components/SortableList.js.map +1 -0
  23. package/lib/module/components/dndTypes.js +4 -0
  24. package/lib/module/components/dndTypes.js.map +1 -0
  25. package/lib/module/components/gridTypes.js +4 -0
  26. package/lib/module/components/gridTypes.js.map +1 -0
  27. package/lib/module/components/handleViewProps.js +13 -0
  28. package/lib/module/components/handleViewProps.js.map +1 -0
  29. package/lib/module/contracts.js +4 -0
  30. package/lib/module/contracts.js.map +1 -0
  31. package/lib/module/controller/approval.js +98 -0
  32. package/lib/module/controller/approval.js.map +1 -0
  33. package/lib/module/controller/coordinatorBase.js +93 -0
  34. package/lib/module/controller/coordinatorBase.js.map +1 -0
  35. package/lib/module/controller/dndSession.js +621 -0
  36. package/lib/module/controller/dndSession.js.map +1 -0
  37. package/lib/module/controller/dndState.js +103 -0
  38. package/lib/module/controller/dndState.js.map +1 -0
  39. package/lib/module/controller/gridAdapter.js +191 -0
  40. package/lib/module/controller/gridAdapter.js.map +1 -0
  41. package/lib/module/controller/gridState.js +101 -0
  42. package/lib/module/controller/gridState.js.map +1 -0
  43. package/lib/module/controller/locations.js +48 -0
  44. package/lib/module/controller/locations.js.map +1 -0
  45. package/lib/module/controller/previewPath.js +73 -0
  46. package/lib/module/controller/previewPath.js.map +1 -0
  47. package/lib/module/controller/sessionCore.js +222 -0
  48. package/lib/module/controller/sessionCore.js.map +1 -0
  49. package/lib/module/controller/useDndState.js +9 -0
  50. package/lib/module/controller/useDndState.js.map +1 -0
  51. package/lib/module/controller/useGridState.js +9 -0
  52. package/lib/module/controller/useGridState.js.map +1 -0
  53. package/lib/module/controller/useStoreState.js +15 -0
  54. package/lib/module/controller/useStoreState.js.map +1 -0
  55. package/lib/module/defaults.js +7 -0
  56. package/lib/module/defaults.js.map +1 -0
  57. package/lib/module/diagnostics.js +16 -0
  58. package/lib/module/diagnostics.js.map +1 -0
  59. package/lib/module/engine/gridPlacements.js +54 -0
  60. package/lib/module/engine/gridPlacements.js.map +1 -0
  61. package/lib/module/engine/index.js +19 -0
  62. package/lib/module/engine/index.js.map +1 -0
  63. package/lib/module/engine/layout.js +36 -0
  64. package/lib/module/engine/layout.js.map +1 -0
  65. package/lib/module/engine/layoutMove.js +326 -0
  66. package/lib/module/engine/layoutMove.js.map +1 -0
  67. package/lib/module/engine/layoutState.js +344 -0
  68. package/lib/module/engine/layoutState.js.map +1 -0
  69. package/lib/module/engine/list.js +172 -0
  70. package/lib/module/engine/list.js.map +1 -0
  71. package/lib/module/engine/listIndex.js +125 -0
  72. package/lib/module/engine/listIndex.js.map +1 -0
  73. package/lib/module/engine/move.js +216 -0
  74. package/lib/module/engine/move.js.map +1 -0
  75. package/lib/module/engine/movementPolicy.js +77 -0
  76. package/lib/module/engine/movementPolicy.js.map +1 -0
  77. package/lib/module/engine/orderedTarget.js +71 -0
  78. package/lib/module/engine/orderedTarget.js.map +1 -0
  79. package/lib/module/engine/pack.js +30 -0
  80. package/lib/module/engine/pack.js.map +1 -0
  81. package/lib/module/engine/rectangles.js +12 -0
  82. package/lib/module/engine/rectangles.js.map +1 -0
  83. package/lib/module/engine/sameLayout.js +29 -0
  84. package/lib/module/engine/sameLayout.js.map +1 -0
  85. package/lib/module/engine/search.js +159 -0
  86. package/lib/module/engine/search.js.map +1 -0
  87. package/lib/module/engine/spatial.js +27 -0
  88. package/lib/module/engine/spatial.js.map +1 -0
  89. package/lib/module/engine/spatialAppRotation.js +39 -0
  90. package/lib/module/engine/spatialAppRotation.js.map +1 -0
  91. package/lib/module/engine/spatialExchange.js +164 -0
  92. package/lib/module/engine/spatialExchange.js.map +1 -0
  93. package/lib/module/engine/spatialInsertion.js +135 -0
  94. package/lib/module/engine/spatialInsertion.js.map +1 -0
  95. package/lib/module/engine/spatialPolicy.js +41 -0
  96. package/lib/module/engine/spatialPolicy.js.map +1 -0
  97. package/lib/module/engine/spatialRotation.js +48 -0
  98. package/lib/module/engine/spatialRotation.js.map +1 -0
  99. package/lib/module/engine/validation.js +205 -0
  100. package/lib/module/engine/validation.js.map +1 -0
  101. package/lib/module/gesture/DndGestureGroup.js +268 -0
  102. package/lib/module/gesture/DndGestureGroup.js.map +1 -0
  103. package/lib/module/gesture/DndGestureHost.js +32 -0
  104. package/lib/module/gesture/DndGestureHost.js.map +1 -0
  105. package/lib/module/gesture/gestureConfig.js +81 -0
  106. package/lib/module/gesture/gestureConfig.js.map +1 -0
  107. package/lib/module/gesture/gestureGrouping.js +122 -0
  108. package/lib/module/gesture/gestureGrouping.js.map +1 -0
  109. package/lib/module/gesture/gestureHost.js +106 -0
  110. package/lib/module/gesture/gestureHost.js.map +1 -0
  111. package/lib/module/index.js +23 -0
  112. package/lib/module/index.js.map +1 -0
  113. package/lib/module/package.json +1 -0
  114. package/lib/module/pointer/dndTarget.js +101 -0
  115. package/lib/module/pointer/dndTarget.js.map +1 -0
  116. package/lib/module/pointer/geometry.js +363 -0
  117. package/lib/module/pointer/geometry.js.map +1 -0
  118. package/lib/module/pointer/layoutTarget.js +307 -0
  119. package/lib/module/pointer/layoutTarget.js.map +1 -0
  120. package/lib/module/pointer/listCellMotion.js +99 -0
  121. package/lib/module/pointer/listCellMotion.js.map +1 -0
  122. package/lib/module/pointer/listTarget.js +42 -0
  123. package/lib/module/pointer/listTarget.js.map +1 -0
  124. package/lib/module/pointer/motion.js +37 -0
  125. package/lib/module/pointer/motion.js.map +1 -0
  126. package/lib/module/runtime/dndPresentation.js +81 -0
  127. package/lib/module/runtime/dndPresentation.js.map +1 -0
  128. package/lib/module/runtime/dndRenderStore.js +129 -0
  129. package/lib/module/runtime/dndRenderStore.js.map +1 -0
  130. package/lib/module/runtime/dndRuntime.js +135 -0
  131. package/lib/module/runtime/dndRuntime.js.map +1 -0
  132. package/lib/module/runtime/dndSettlement.js +77 -0
  133. package/lib/module/runtime/dndSettlement.js.map +1 -0
  134. package/lib/module/runtime/gridRuntime.js +37 -0
  135. package/lib/module/runtime/gridRuntime.js.map +1 -0
  136. package/lib/module/types.js +4 -0
  137. package/lib/module/types.js.map +1 -0
  138. package/lib/typescript/package.json +1 -0
  139. package/lib/typescript/src/adapters/coordinates.d.ts +9 -0
  140. package/lib/typescript/src/adapters/coordinates.d.ts.map +1 -0
  141. package/lib/typescript/src/adapters/scroll.d.ts +49 -0
  142. package/lib/typescript/src/adapters/scroll.d.ts.map +1 -0
  143. package/lib/typescript/src/adapters/virtualizedList.d.ts +22 -0
  144. package/lib/typescript/src/adapters/virtualizedList.d.ts.map +1 -0
  145. package/lib/typescript/src/components/DndProvider.d.ts +4 -0
  146. package/lib/typescript/src/components/DndProvider.d.ts.map +1 -0
  147. package/lib/typescript/src/components/DragHandle.d.ts +4 -0
  148. package/lib/typescript/src/components/DragHandle.d.ts.map +1 -0
  149. package/lib/typescript/src/components/GridController.d.ts +21 -0
  150. package/lib/typescript/src/components/GridController.d.ts.map +1 -0
  151. package/lib/typescript/src/components/GridDragHandle.d.ts +8 -0
  152. package/lib/typescript/src/components/GridDragHandle.d.ts.map +1 -0
  153. package/lib/typescript/src/components/GridZoneView.d.ts +8 -0
  154. package/lib/typescript/src/components/GridZoneView.d.ts.map +1 -0
  155. package/lib/typescript/src/components/SortableGrid.d.ts +4 -0
  156. package/lib/typescript/src/components/SortableGrid.d.ts.map +1 -0
  157. package/lib/typescript/src/components/SortableList.d.ts +4 -0
  158. package/lib/typescript/src/components/SortableList.d.ts.map +1 -0
  159. package/lib/typescript/src/components/dndTypes.d.ts +94 -0
  160. package/lib/typescript/src/components/dndTypes.d.ts.map +1 -0
  161. package/lib/typescript/src/components/gridTypes.d.ts +84 -0
  162. package/lib/typescript/src/components/gridTypes.d.ts.map +1 -0
  163. package/lib/typescript/src/components/handleViewProps.d.ts +6 -0
  164. package/lib/typescript/src/components/handleViewProps.d.ts.map +1 -0
  165. package/lib/typescript/src/contracts.d.ts +145 -0
  166. package/lib/typescript/src/contracts.d.ts.map +1 -0
  167. package/lib/typescript/src/controller/approval.d.ts +66 -0
  168. package/lib/typescript/src/controller/approval.d.ts.map +1 -0
  169. package/lib/typescript/src/controller/coordinatorBase.d.ts +37 -0
  170. package/lib/typescript/src/controller/coordinatorBase.d.ts.map +1 -0
  171. package/lib/typescript/src/controller/dndSession.d.ts +152 -0
  172. package/lib/typescript/src/controller/dndSession.d.ts.map +1 -0
  173. package/lib/typescript/src/controller/dndState.d.ts +27 -0
  174. package/lib/typescript/src/controller/dndState.d.ts.map +1 -0
  175. package/lib/typescript/src/controller/gridAdapter.d.ts +44 -0
  176. package/lib/typescript/src/controller/gridAdapter.d.ts.map +1 -0
  177. package/lib/typescript/src/controller/gridState.d.ts +18 -0
  178. package/lib/typescript/src/controller/gridState.d.ts.map +1 -0
  179. package/lib/typescript/src/controller/locations.d.ts +9 -0
  180. package/lib/typescript/src/controller/locations.d.ts.map +1 -0
  181. package/lib/typescript/src/controller/previewPath.d.ts +49 -0
  182. package/lib/typescript/src/controller/previewPath.d.ts.map +1 -0
  183. package/lib/typescript/src/controller/sessionCore.d.ts +106 -0
  184. package/lib/typescript/src/controller/sessionCore.d.ts.map +1 -0
  185. package/lib/typescript/src/controller/useDndState.d.ts +8 -0
  186. package/lib/typescript/src/controller/useDndState.d.ts.map +1 -0
  187. package/lib/typescript/src/controller/useGridState.d.ts +8 -0
  188. package/lib/typescript/src/controller/useGridState.d.ts.map +1 -0
  189. package/lib/typescript/src/controller/useStoreState.d.ts +16 -0
  190. package/lib/typescript/src/controller/useStoreState.d.ts.map +1 -0
  191. package/lib/typescript/src/defaults.d.ts +5 -0
  192. package/lib/typescript/src/defaults.d.ts.map +1 -0
  193. package/lib/typescript/src/diagnostics.d.ts +9 -0
  194. package/lib/typescript/src/diagnostics.d.ts.map +1 -0
  195. package/lib/typescript/src/engine/gridPlacements.d.ts +22 -0
  196. package/lib/typescript/src/engine/gridPlacements.d.ts.map +1 -0
  197. package/lib/typescript/src/engine/index.d.ts +28 -0
  198. package/lib/typescript/src/engine/index.d.ts.map +1 -0
  199. package/lib/typescript/src/engine/layout.d.ts +4 -0
  200. package/lib/typescript/src/engine/layout.d.ts.map +1 -0
  201. package/lib/typescript/src/engine/layoutMove.d.ts +46 -0
  202. package/lib/typescript/src/engine/layoutMove.d.ts.map +1 -0
  203. package/lib/typescript/src/engine/layoutState.d.ts +22 -0
  204. package/lib/typescript/src/engine/layoutState.d.ts.map +1 -0
  205. package/lib/typescript/src/engine/list.d.ts +68 -0
  206. package/lib/typescript/src/engine/list.d.ts.map +1 -0
  207. package/lib/typescript/src/engine/listIndex.d.ts +32 -0
  208. package/lib/typescript/src/engine/listIndex.d.ts.map +1 -0
  209. package/lib/typescript/src/engine/move.d.ts +10 -0
  210. package/lib/typescript/src/engine/move.d.ts.map +1 -0
  211. package/lib/typescript/src/engine/movementPolicy.d.ts +34 -0
  212. package/lib/typescript/src/engine/movementPolicy.d.ts.map +1 -0
  213. package/lib/typescript/src/engine/orderedTarget.d.ts +32 -0
  214. package/lib/typescript/src/engine/orderedTarget.d.ts.map +1 -0
  215. package/lib/typescript/src/engine/pack.d.ts +3 -0
  216. package/lib/typescript/src/engine/pack.d.ts.map +1 -0
  217. package/lib/typescript/src/engine/rectangles.d.ts +9 -0
  218. package/lib/typescript/src/engine/rectangles.d.ts.map +1 -0
  219. package/lib/typescript/src/engine/sameLayout.d.ts +4 -0
  220. package/lib/typescript/src/engine/sameLayout.d.ts.map +1 -0
  221. package/lib/typescript/src/engine/search.d.ts +28 -0
  222. package/lib/typescript/src/engine/search.d.ts.map +1 -0
  223. package/lib/typescript/src/engine/spatial.d.ts +16 -0
  224. package/lib/typescript/src/engine/spatial.d.ts.map +1 -0
  225. package/lib/typescript/src/engine/spatialAppRotation.d.ts +4 -0
  226. package/lib/typescript/src/engine/spatialAppRotation.d.ts.map +1 -0
  227. package/lib/typescript/src/engine/spatialExchange.d.ts +5 -0
  228. package/lib/typescript/src/engine/spatialExchange.d.ts.map +1 -0
  229. package/lib/typescript/src/engine/spatialInsertion.d.ts +5 -0
  230. package/lib/typescript/src/engine/spatialInsertion.d.ts.map +1 -0
  231. package/lib/typescript/src/engine/spatialPolicy.d.ts +9 -0
  232. package/lib/typescript/src/engine/spatialPolicy.d.ts.map +1 -0
  233. package/lib/typescript/src/engine/spatialRotation.d.ts +8 -0
  234. package/lib/typescript/src/engine/spatialRotation.d.ts.map +1 -0
  235. package/lib/typescript/src/engine/validation.d.ts +9 -0
  236. package/lib/typescript/src/engine/validation.d.ts.map +1 -0
  237. package/lib/typescript/src/gesture/DndGestureGroup.d.ts +33 -0
  238. package/lib/typescript/src/gesture/DndGestureGroup.d.ts.map +1 -0
  239. package/lib/typescript/src/gesture/DndGestureHost.d.ts +12 -0
  240. package/lib/typescript/src/gesture/DndGestureHost.d.ts.map +1 -0
  241. package/lib/typescript/src/gesture/gestureConfig.d.ts +15 -0
  242. package/lib/typescript/src/gesture/gestureConfig.d.ts.map +1 -0
  243. package/lib/typescript/src/gesture/gestureGrouping.d.ts +66 -0
  244. package/lib/typescript/src/gesture/gestureGrouping.d.ts.map +1 -0
  245. package/lib/typescript/src/gesture/gestureHost.d.ts +23 -0
  246. package/lib/typescript/src/gesture/gestureHost.d.ts.map +1 -0
  247. package/lib/typescript/src/index.d.ts +38 -0
  248. package/lib/typescript/src/index.d.ts.map +1 -0
  249. package/lib/typescript/src/pointer/dndTarget.d.ts +14 -0
  250. package/lib/typescript/src/pointer/dndTarget.d.ts.map +1 -0
  251. package/lib/typescript/src/pointer/geometry.d.ts +28 -0
  252. package/lib/typescript/src/pointer/geometry.d.ts.map +1 -0
  253. package/lib/typescript/src/pointer/layoutTarget.d.ts +43 -0
  254. package/lib/typescript/src/pointer/layoutTarget.d.ts.map +1 -0
  255. package/lib/typescript/src/pointer/listCellMotion.d.ts +43 -0
  256. package/lib/typescript/src/pointer/listCellMotion.d.ts.map +1 -0
  257. package/lib/typescript/src/pointer/listTarget.d.ts +7 -0
  258. package/lib/typescript/src/pointer/listTarget.d.ts.map +1 -0
  259. package/lib/typescript/src/pointer/motion.d.ts +20 -0
  260. package/lib/typescript/src/pointer/motion.d.ts.map +1 -0
  261. package/lib/typescript/src/runtime/dndPresentation.d.ts +37 -0
  262. package/lib/typescript/src/runtime/dndPresentation.d.ts.map +1 -0
  263. package/lib/typescript/src/runtime/dndRenderStore.d.ts +46 -0
  264. package/lib/typescript/src/runtime/dndRenderStore.d.ts.map +1 -0
  265. package/lib/typescript/src/runtime/dndRuntime.d.ts +138 -0
  266. package/lib/typescript/src/runtime/dndRuntime.d.ts.map +1 -0
  267. package/lib/typescript/src/runtime/dndSettlement.d.ts +18 -0
  268. package/lib/typescript/src/runtime/dndSettlement.d.ts.map +1 -0
  269. package/lib/typescript/src/runtime/gridRuntime.d.ts +54 -0
  270. package/lib/typescript/src/runtime/gridRuntime.d.ts.map +1 -0
  271. package/lib/typescript/src/types.d.ts +180 -0
  272. package/lib/typescript/src/types.d.ts.map +1 -0
  273. package/package.json +136 -0
  274. package/src/adapters/coordinates.ts +181 -0
  275. package/src/adapters/scroll.ts +147 -0
  276. package/src/adapters/virtualizedList.ts +112 -0
  277. package/src/components/DndProvider.tsx +1836 -0
  278. package/src/components/DragHandle.tsx +89 -0
  279. package/src/components/GridController.tsx +213 -0
  280. package/src/components/GridDragHandle.tsx +11 -0
  281. package/src/components/GridZoneView.tsx +57 -0
  282. package/src/components/SortableGrid.tsx +449 -0
  283. package/src/components/SortableList.tsx +1028 -0
  284. package/src/components/dndTypes.ts +102 -0
  285. package/src/components/gridTypes.ts +90 -0
  286. package/src/components/handleViewProps.ts +35 -0
  287. package/src/contracts.ts +149 -0
  288. package/src/controller/approval.ts +179 -0
  289. package/src/controller/coordinatorBase.ts +118 -0
  290. package/src/controller/dndSession.ts +1058 -0
  291. package/src/controller/dndState.ts +198 -0
  292. package/src/controller/gridAdapter.ts +268 -0
  293. package/src/controller/gridState.ts +187 -0
  294. package/src/controller/locations.ts +67 -0
  295. package/src/controller/previewPath.ts +90 -0
  296. package/src/controller/sessionCore.ts +390 -0
  297. package/src/controller/useDndState.ts +26 -0
  298. package/src/controller/useGridState.ts +22 -0
  299. package/src/controller/useStoreState.ts +27 -0
  300. package/src/defaults.ts +4 -0
  301. package/src/diagnostics.ts +23 -0
  302. package/src/engine/gridPlacements.ts +85 -0
  303. package/src/engine/index.ts +99 -0
  304. package/src/engine/layout.ts +29 -0
  305. package/src/engine/layoutMove.ts +401 -0
  306. package/src/engine/layoutState.ts +490 -0
  307. package/src/engine/list.ts +307 -0
  308. package/src/engine/listIndex.ts +174 -0
  309. package/src/engine/move.ts +274 -0
  310. package/src/engine/movementPolicy.ts +151 -0
  311. package/src/engine/orderedTarget.ts +131 -0
  312. package/src/engine/pack.ts +24 -0
  313. package/src/engine/rectangles.ts +18 -0
  314. package/src/engine/sameLayout.ts +50 -0
  315. package/src/engine/search.ts +174 -0
  316. package/src/engine/spatial.ts +36 -0
  317. package/src/engine/spatialAppRotation.ts +53 -0
  318. package/src/engine/spatialExchange.ts +212 -0
  319. package/src/engine/spatialInsertion.ts +157 -0
  320. package/src/engine/spatialPolicy.ts +48 -0
  321. package/src/engine/spatialRotation.ts +56 -0
  322. package/src/engine/validation.ts +358 -0
  323. package/src/gesture/DndGestureGroup.tsx +357 -0
  324. package/src/gesture/DndGestureHost.tsx +50 -0
  325. package/src/gesture/gestureConfig.ts +123 -0
  326. package/src/gesture/gestureGrouping.ts +210 -0
  327. package/src/gesture/gestureHost.tsx +163 -0
  328. package/src/index.ts +162 -0
  329. package/src/pointer/dndTarget.ts +213 -0
  330. package/src/pointer/geometry.ts +584 -0
  331. package/src/pointer/layoutTarget.ts +515 -0
  332. package/src/pointer/listCellMotion.ts +174 -0
  333. package/src/pointer/listTarget.ts +56 -0
  334. package/src/pointer/motion.ts +66 -0
  335. package/src/runtime/dndPresentation.ts +113 -0
  336. package/src/runtime/dndRenderStore.ts +246 -0
  337. package/src/runtime/dndRuntime.ts +311 -0
  338. package/src/runtime/dndSettlement.ts +117 -0
  339. package/src/runtime/gridRuntime.ts +73 -0
  340. package/src/types.ts +189 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createContext","memo","useCallback","useContext","useLayoutEffect","useMemo","useRef","useState","useSyncExternalStore","GestureDetector","useCompetingGestures","useManualGesture","createGroupingState","groupGestureOwners","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","SENTINEL_CONFIG","enabled","onTouchesDown","createGestureHost","Group","toTarget","RootContentContext","NativeRoot","GestureGroup","NativeGestureDetector","NativeGestureDetectorImpl","nativeGestures","sentinel","gesture","values","children","GestureHost","GestureHostImpl","registry","runtime","owners","subscribe","getSnapshot","mounted","gestureValues","Map","gestureVersion","setGestureVersion","current","publish","id","get","has","set","delete","version","grouping","groups","group","channel","targets","map","groupId","relations","Host","value"],"sourceRoot":"../../../src","sources":["gesture/gestureHost.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ export { GridController } from "./components/GridController.js";
4
+ export { DndProvider } from "./components/DndProvider.js";
5
+ export { SortableList } from "./components/SortableList.js";
6
+ export { SortableGrid } from "./components/SortableGrid.js";
7
+ export { resolveListVirtualization } from "./adapters/virtualizedList.js";
8
+ export { DragHandle } from "./components/DragHandle.js";
9
+ export { useDndState } from "./controller/useDndState.js";
10
+ export { createDndStateStore, respondToDndProposal } from "./controller/dndState.js";
11
+ export { computeListLayout, computeListIndex, ListSizeCache } from "./engine/list.js";
12
+ export { computeLayoutMove } from "./engine/layoutMove.js";
13
+ export { computeAutoScroll, constrainDragPoint, validateAutoScrollOptions } from "./adapters/scroll.js";
14
+ export { GridDragHandle } from "./components/GridDragHandle.js";
15
+ export { GridZoneView } from "./components/GridZoneView.js";
16
+ export { useGridState } from "./controller/useGridState.js";
17
+ export { createGridStateStore, respondToGridProposal } from "./controller/gridState.js";
18
+ export { DEFAULT_ACTIVATION_DELAY_MS, DEFAULT_SEARCH_BUDGET } from "./defaults.js";
19
+ export { DEFAULT_GRID_MOVEMENT_POLICY, HOME_GRID_MOVEMENT_POLICY, resolveGridMovementPolicy, validateGridMovementPolicy } from "./engine/movementPolicy.js";
20
+ export { validateLayoutState, fromGridValue, toGridValue } from "./engine/layoutState.js";
21
+ export { screenToContent, contentToScreen, screenRectToContent, contentRectToScreen, validateRectMeasurement } from "./adapters/coordinates.js";
22
+ export { computeMove, computeOrderedIndex, computeZoneLayout, hasSameLayout, packItems, validateValue } from "./engine/index.js";
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["GridController","DndProvider","SortableList","SortableGrid","resolveListVirtualization","DragHandle","useDndState","createDndStateStore","respondToDndProposal","computeListLayout","computeListIndex","ListSizeCache","computeLayoutMove","computeAutoScroll","constrainDragPoint","validateAutoScrollOptions","GridDragHandle","GridZoneView","useGridState","createGridStateStore","respondToGridProposal","DEFAULT_ACTIVATION_DELAY_MS","DEFAULT_SEARCH_BUDGET","DEFAULT_GRID_MOVEMENT_POLICY","HOME_GRID_MOVEMENT_POLICY","resolveGridMovementPolicy","validateGridMovementPolicy","validateLayoutState","fromGridValue","toGridValue","screenToContent","contentToScreen","screenRectToContent","contentRectToScreen","validateRectMeasurement","computeMove","computeOrderedIndex","computeZoneLayout","hasSameLayout","packItems","validateValue"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SAASA,cAAc,QAAQ,gCAA6B;AAC5D,SAASC,WAAW,QAAQ,6BAA0B;AACtD,SAASC,YAAY,QAAQ,8BAA2B;AACxD,SAASC,YAAY,QAAQ,8BAA2B;AACxD,SAASC,yBAAyB,QAAQ,+BAA4B;AAKtE,SAASC,UAAU,QAAQ,4BAAyB;AAapD,SAASC,WAAW,QAAQ,6BAA0B;AAEtD,SACEC,mBAAmB,EACnBC,oBAAoB,QACf,0BAAuB;AAc9B,SACEC,iBAAiB,EACjBC,gBAAgB,EAChBC,aAAa,QACR,kBAAe;AAQtB,SAASC,iBAAiB,QAAQ,wBAAqB;AAMvD,SACEC,iBAAiB,EACjBC,kBAAkB,EAClBC,yBAAyB,QACpB,sBAAmB;AAQ1B,SAASC,cAAc,QAAQ,gCAA6B;AAC5D,SAASC,YAAY,QAAQ,8BAA2B;AACxD,SAASC,YAAY,QAAQ,8BAA2B;AAExD,SACEC,oBAAoB,EACpBC,qBAAqB,QAChB,2BAAwB;AAQ/B,SAASC,2BAA2B,EAAEC,qBAAqB,QAAQ,eAAY;AAC/E,SACEC,4BAA4B,EAC5BC,yBAAyB,EACzBC,yBAAyB,EACzBC,0BAA0B,QACrB,4BAAyB;AAOhC,SACEC,mBAAmB,EACnBC,aAAa,EACbC,WAAW,QACN,yBAAsB;AAC7B,SACEC,eAAe,EACfC,eAAe,EACfC,mBAAmB,EACnBC,mBAAmB,EACnBC,uBAAuB,QAClB,2BAAwB;AAa/B,SACEC,WAAW,EACXC,mBAAmB,EACnBC,iBAAiB,EACjBC,aAAa,EACbC,SAAS,EACTC,aAAa,QACR,mBAAU","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+
3
+ import { findListTargetIndex } from "../engine/listIndex.js";
4
+ import { isUsableRect, itemRect, orderedSlotIndex, orderedSlotPosition, readPointerTarget, rectContains } from "./geometry.js";
5
+ import { measurePreparedGrid } from "./layoutTarget.js";
6
+ export function sameLayoutTarget(a, b) {
7
+ 'worklet';
8
+
9
+ if (a === b) return true;
10
+ if (!a || !b || a.kind !== b.kind || a.zoneId !== b.zoneId) return false;
11
+ return a.kind === 'list' ? b.kind === 'list' && a.index === b.index : b.kind === 'grid' && a.position.row === b.position.row && a.position.col === b.position.col;
12
+ }
13
+
14
+ /** Prepared geometry only; policy permission and final validation stay on JS. */
15
+ export function uiLayoutTarget(state, registrations, session, previousTarget) {
16
+ 'worklet';
17
+
18
+ if (state.itemId === null || !isUsableRect(state.root) || !Number.isSafeInteger(state.revision) || state.revision < 0 || !rectContains(state.root, state.pointer.x, state.pointer.y) || !Number.isFinite(state.width) || state.width <= 0 || !Number.isFinite(state.height) || state.height <= 0 || !Number.isFinite(state.grip.x) || !Number.isFinite(state.grip.y)) return null;
19
+ const previousIndex = state.zones.findIndex(zone => zone.zoneId === previousTarget?.zoneId);
20
+ for (let order = -1; order < state.zones.length; order++) {
21
+ const index = order === -1 ? previousIndex : order;
22
+ if (index < 0 || order >= 0 && index === previousIndex) continue;
23
+ const measured = state.zones[index];
24
+ const registration = registrations.find(zone => zone.zoneId === measured.zoneId);
25
+ if (!registration || registration.revision !== state.revision || registration.layoutVersion !== measured.layoutVersion || measured.viewport.revision !== state.revision || registration.kind === 'grid' && measured.offset !== 0 || measured.viewport.source !== 'measured' || measured.viewport.space !== 'screen' || !Number.isFinite(measured.viewport.timestampMs) || measured.viewport.timestampMs < 0 || !isUsableRect(measured.viewport.rect) || !rectContains(measured.viewport.rect, state.pointer.x, state.pointer.y)) continue;
26
+ if (registration.kind === 'list') {
27
+ if (!registration.targetIndex || registration.targetIndex.revision !== state.revision || !Number.isFinite(measured.offset)) continue;
28
+ const vertical = registration.orientation === 'vertical';
29
+ const center = vertical ? state.pointer.y - state.grip.y + state.height / 2 - measured.viewport.rect.y + measured.offset : state.pointer.x - state.grip.x + state.width / 2 - measured.viewport.rect.x + measured.offset;
30
+ const targetIndex = findListTargetIndex(registration.targetIndex, state.itemId, center);
31
+ return targetIndex === null ? null : {
32
+ kind: 'list',
33
+ zoneId: measured.zoneId,
34
+ index: targetIndex
35
+ };
36
+ }
37
+ const recipe = session.gridItems[`#${measured.zoneId}`];
38
+ const grid = registration.targetGrid ? measurePreparedGrid(registration.targetGrid, measured) : null;
39
+ if (!recipe || !grid || !Number.isSafeInteger(recipe.span.rows) || recipe.span.rows <= 0 || !Number.isSafeInteger(recipe.span.cols) || recipe.span.cols <= 0) return null;
40
+ const content = itemRect({
41
+ row: 0,
42
+ col: 0
43
+ }, {
44
+ rows: grid.zone.rows,
45
+ cols: grid.zone.columns
46
+ }, grid.geometry, grid.cells);
47
+ if (!rectContains({
48
+ ...content,
49
+ x: grid.rect.x + content.x,
50
+ y: grid.rect.y + content.y
51
+ }, state.pointer.x, state.pointer.y)) continue;
52
+ // An ordered zone reasons in slot indices; handing it a spatial position
53
+ // would silently disable its boundary hysteresis. `resolveLayoutTarget`
54
+ // converts the same way on JS.
55
+ const orderedPrevious = previousTarget?.kind === 'grid' && previousTarget.zoneId === grid.zone.id && grid.zone.strategy === 'ordered' ? orderedSlotIndex(previousTarget.position, grid.zone.itemSpan, grid.zone.columns) : null;
56
+ const result = readPointerTarget({
57
+ token: state.token,
58
+ phase: 'dragging',
59
+ itemId: state.itemId,
60
+ sourceZoneId: state.sourceZoneId,
61
+ seq: Math.max(0, state.seq - 1),
62
+ target: previousTarget?.kind !== 'grid' ? null : orderedPrevious === null ? {
63
+ zoneId: previousTarget.zoneId,
64
+ strategy: 'spatial',
65
+ position: previousTarget.position
66
+ } : {
67
+ zoneId: previousTarget.zoneId,
68
+ strategy: 'ordered',
69
+ index: orderedPrevious
70
+ },
71
+ span: recipe.span,
72
+ x: state.pointer.x - state.grip.x,
73
+ y: state.pointer.y - state.grip.y,
74
+ width: state.width,
75
+ height: state.height,
76
+ gripX: Math.max(0, Math.min(1, state.grip.x / state.width)),
77
+ gripY: Math.max(0, Math.min(1, state.grip.y / state.height)),
78
+ zones: [grid],
79
+ outlet: state.root,
80
+ validity: 'pending',
81
+ visible: state.visible,
82
+ destination: null,
83
+ movementPolicy: session.movementPolicy,
84
+ baseRevision: state.revision
85
+ }, state.pointer.x, state.pointer.y);
86
+ if (result.target?.strategy === 'spatial') return {
87
+ kind: 'grid',
88
+ zoneId: result.target.zoneId,
89
+ position: result.target.position
90
+ };
91
+ // Without this branch an ordered zone reports no target at all, so the
92
+ // frame gate sees no change and stops requesting candidates mid-drag.
93
+ if (result.target?.strategy === 'ordered' && grid.zone.strategy === 'ordered') return {
94
+ kind: 'grid',
95
+ zoneId: result.target.zoneId,
96
+ position: orderedSlotPosition(result.target.index, grid.zone.itemSpan, grid.zone.columns)
97
+ };
98
+ }
99
+ return null;
100
+ }
101
+ //# sourceMappingURL=dndTarget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["findListTargetIndex","isUsableRect","itemRect","orderedSlotIndex","orderedSlotPosition","readPointerTarget","rectContains","measurePreparedGrid","sameLayoutTarget","a","b","kind","zoneId","index","position","row","col","uiLayoutTarget","state","registrations","session","previousTarget","itemId","root","Number","isSafeInteger","revision","pointer","x","y","isFinite","width","height","grip","previousIndex","zones","findIndex","zone","order","length","measured","registration","find","layoutVersion","viewport","offset","source","space","timestampMs","rect","targetIndex","vertical","orientation","center","recipe","gridItems","grid","targetGrid","span","rows","cols","content","columns","geometry","cells","orderedPrevious","id","strategy","itemSpan","result","token","phase","sourceZoneId","seq","Math","max","target","gripX","min","gripY","outlet","validity","visible","destination","movementPolicy","baseRevision"],"sourceRoot":"../../../src","sources":["pointer/dndTarget.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,363 @@
1
+ "use strict";
2
+
3
+ import { DEFAULT_GRID_MOVEMENT_POLICY } from "../engine/movementPolicy.js";
4
+ import { selectSpatialMove } from "../engine/spatialPolicy.js";
5
+ function clamp(value, min, max) {
6
+ 'worklet';
7
+
8
+ return Math.max(min, Math.min(max, value));
9
+ }
10
+
11
+ /**
12
+ * The cell an ordered slot starts at. The engine owns the same arithmetic in
13
+ * `slotPosition`; that module stays free of worklet directives, so the pointer
14
+ * keeps a worklet copy and `tests/pointer/orderedSlots.test.ts` pins them
15
+ * together.
16
+ */
17
+ export function orderedSlotPosition(index, itemSpan, columns) {
18
+ 'worklet';
19
+
20
+ const perRow = Math.floor(columns / itemSpan.cols);
21
+ return {
22
+ row: Math.floor(index / perRow) * itemSpan.rows,
23
+ col: index % perRow * itemSpan.cols
24
+ };
25
+ }
26
+
27
+ /** The ordered slot a cell starts, or null when it is not a slot origin. */
28
+ export function orderedSlotIndex(position, itemSpan, columns) {
29
+ 'worklet';
30
+
31
+ const perRow = Math.floor(columns / itemSpan.cols);
32
+ if (perRow <= 0 || position.row < 0 || position.col < 0 || position.row % itemSpan.rows !== 0 || position.col % itemSpan.cols !== 0) return null;
33
+ const col = position.col / itemSpan.cols;
34
+ if (col >= perRow) return null;
35
+ return position.row / itemSpan.rows * perRow + col;
36
+ }
37
+ export function isUsableRect(rect) {
38
+ 'worklet';
39
+
40
+ return !!rect && Number.isFinite(rect.x) && Number.isFinite(rect.y) && Number.isFinite(rect.width) && Number.isFinite(rect.height) && rect.width > 0 && rect.height > 0;
41
+ }
42
+ export function rectContains(rect, x, y) {
43
+ 'worklet';
44
+
45
+ return x >= rect.x && y >= rect.y && x <= rect.x + rect.width && y <= rect.y + rect.height;
46
+ }
47
+ function containsRectangle(outer, inner, pixelRatio) {
48
+ 'worklet';
49
+
50
+ // Compare actual rendered edges. Native layout uses Float32 and snaps edges
51
+ // relative to the root; widening a hit box would also accept clipped pixels.
52
+ return Math.round(inner.x * pixelRatio) >= Math.round(outer.x * pixelRatio) && Math.round(inner.y * pixelRatio) >= Math.round(outer.y * pixelRatio) && Math.round((inner.x + inner.width) * pixelRatio) <= Math.round((outer.x + outer.width) * pixelRatio) && Math.round((inner.y + inner.height) * pixelRatio) <= Math.round((outer.y + outer.height) * pixelRatio);
53
+ }
54
+ export function getCellGeometry(zone, geometry, width, height, pixelRatio = 1) {
55
+ 'worklet';
56
+
57
+ if (!zone || typeof zone !== 'object' || Array.isArray(zone) || !geometry || typeof geometry !== 'object' || Array.isArray(geometry) || geometry.mode !== 'fixed' && geometry.mode !== 'fit' || !geometry.padding || typeof geometry.padding !== 'object' || Array.isArray(geometry.padding) || !Number.isSafeInteger(zone.rows) || zone.rows <= 0 || !Number.isSafeInteger(zone.columns) || zone.columns <= 0 || !Number.isFinite(width) || width <= 0 || !Number.isFinite(height) || height <= 0 || !Number.isFinite(pixelRatio) || pixelRatio <= 0) return null;
58
+ const {
59
+ padding,
60
+ rowGap,
61
+ columnGap
62
+ } = geometry;
63
+ if (![padding.top, padding.right, padding.bottom, padding.left, rowGap, columnGap].every(value => Number.isFinite(value) && value >= 0)) return null;
64
+ const cellWidth = geometry.mode === 'fixed' ? geometry.cellWidth : (width - padding.left - padding.right - (zone.columns - 1) * columnGap) / zone.columns;
65
+ const cellHeight = geometry.mode === 'fixed' ? geometry.cellHeight : (height - padding.top - padding.bottom - (zone.rows - 1) * rowGap) / zone.rows;
66
+ const contentWidth = zone.columns * cellWidth + (zone.columns - 1) * columnGap;
67
+ const contentHeight = zone.rows * cellHeight + (zone.rows - 1) * rowGap;
68
+ const requiredWidth = contentWidth + padding.left + padding.right;
69
+ const requiredHeight = contentHeight + padding.top + padding.bottom;
70
+ // A native extent is the difference between two rounded root-relative edges.
71
+ // That can be slightly smaller than the requested size (less than one pixel).
72
+ // Preserve explicit cell sizes; final targeting still checks rendered edges.
73
+ const pixelSize = 1 / pixelRatio;
74
+ return Number.isFinite(requiredWidth) && Number.isFinite(requiredHeight) && (geometry.mode !== 'fixed' || requiredWidth - width < pixelSize && requiredHeight - height < pixelSize) && Number.isFinite(cellWidth) && cellWidth > 0 && Number.isFinite(cellHeight) && cellHeight > 0 ? {
75
+ cellWidth,
76
+ cellHeight
77
+ } : null;
78
+ }
79
+
80
+ /** Item rectangle relative to its zone, including the zone's content padding. */
81
+ export function itemRect(position, span, geometry, cells) {
82
+ 'worklet';
83
+
84
+ return {
85
+ x: geometry.padding.left + position.col * (cells.cellWidth + geometry.columnGap),
86
+ y: geometry.padding.top + position.row * (cells.cellHeight + geometry.rowGap),
87
+ width: span.cols * cells.cellWidth + (span.cols - 1) * geometry.columnGap,
88
+ height: span.rows * cells.cellHeight + (span.rows - 1) * geometry.rowGap
89
+ };
90
+ }
91
+
92
+ /** Check the resolved placement, which a region exchange may shift from the pointer target. */
93
+ export function isPlacementVisible(zones, outlet, target, span) {
94
+ 'worklet';
95
+
96
+ const measured = zones.find(entry => entry.zone.id === target.zoneId);
97
+ if (!measured || measured.zone.strategy !== target.strategy || !isUsableRect(measured.rect) || !isUsableRect(outlet) || !Number.isFinite(measured.pixelRatio) || measured.pixelRatio <= 0 || !Number.isSafeInteger(span.rows) || !Number.isSafeInteger(span.cols) || span.rows <= 0 || span.cols <= 0) return false;
98
+ const {
99
+ zone,
100
+ rect,
101
+ geometry,
102
+ cells
103
+ } = measured;
104
+ let position;
105
+ if (zone.strategy === 'ordered' && target.strategy === 'ordered') {
106
+ if (span.rows !== zone.itemSpan.rows || span.cols !== zone.itemSpan.cols || !Number.isSafeInteger(target.index) || target.index < 0 || target.index > zone.items.length) return false;
107
+ const slotsPerRow = Math.floor(zone.columns / span.cols);
108
+ if (slotsPerRow <= 0) return false;
109
+ position = {
110
+ row: Math.floor(target.index / slotsPerRow) * span.rows,
111
+ col: target.index % slotsPerRow * span.cols
112
+ };
113
+ } else if (target.strategy === 'spatial') {
114
+ position = target.position;
115
+ } else {
116
+ return false;
117
+ }
118
+ if (!Number.isSafeInteger(position.row) || !Number.isSafeInteger(position.col) || position.row < 0 || position.col < 0 || position.row > zone.rows - span.rows || position.col > zone.columns - span.cols) return false;
119
+ const anchored = itemRect(position, span, geometry, cells);
120
+ const windowTarget = {
121
+ ...anchored,
122
+ x: rect.x + anchored.x,
123
+ y: rect.y + anchored.y
124
+ };
125
+ return isUsableRect(windowTarget) && containsRectangle(rect, windowTarget, measured.pixelRatio) && containsRectangle(outlet, windowTarget, measured.pixelRatio);
126
+ }
127
+ export function sameTarget(left, right) {
128
+ 'worklet';
129
+
130
+ if (!left || !right) return left === right;
131
+ if (left.zoneId !== right.zoneId || left.strategy !== right.strategy) return false;
132
+ return left.strategy === 'ordered' && right.strategy === 'ordered' ? left.index === right.index : left.strategy === 'spatial' && right.strategy === 'spatial' && left.position.row === right.position.row && left.position.col === right.position.col;
133
+ }
134
+ export function sourceItemTarget(measured, itemId) {
135
+ 'worklet';
136
+
137
+ const {
138
+ zone
139
+ } = measured;
140
+ if (zone.strategy === 'ordered') {
141
+ const index = zone.items.findIndex(item => item.id === itemId);
142
+ return index < 0 ? null : {
143
+ zoneId: zone.id,
144
+ strategy: 'ordered',
145
+ index
146
+ };
147
+ }
148
+ const item = zone.items.find(candidate => candidate.id === itemId);
149
+ return item ? {
150
+ zoneId: zone.id,
151
+ strategy: 'spatial',
152
+ position: {
153
+ ...item.position
154
+ }
155
+ } : null;
156
+ }
157
+
158
+ /** Worklet equivalent of computeOrderedIndex for already validated measured zones. */
159
+ export function orderedIndexForCenter(measured, itemId, centerX, centerY) {
160
+ 'worklet';
161
+
162
+ const {
163
+ zone,
164
+ geometry,
165
+ cells
166
+ } = measured;
167
+ if (zone.strategy !== 'ordered') return null;
168
+ const span = zone.itemSpan;
169
+ const slotsPerRow = Math.floor(zone.columns / span.cols);
170
+ const slotRows = Math.floor(zone.rows / span.rows);
171
+ if (slotsPerRow === 0 || slotRows === 0) return null;
172
+ const itemCount = zone.items.reduce((count, item) => count + Number(item.id !== itemId), 0);
173
+ const slotWidth = span.cols * cells.cellWidth + (span.cols - 1) * geometry.columnGap;
174
+ const slotHeight = span.rows * cells.cellHeight + (span.rows - 1) * geometry.rowGap;
175
+ const strideX = slotWidth + geometry.columnGap;
176
+ const strideY = slotHeight + geometry.rowGap;
177
+ const width = zone.columns * cells.cellWidth + (zone.columns - 1) * geometry.columnGap;
178
+ const height = zone.rows * cells.cellHeight + (zone.rows - 1) * geometry.rowGap;
179
+ const x = clamp(centerX, 0, width);
180
+ const y = clamp(centerY, 0, height);
181
+ if (zone.rows % span.rows !== 0 && y >= slotRows * strideY - geometry.rowGap) return itemCount;
182
+ const row = clamp(Math.floor((y - slotHeight / 2) / strideY + 0.5), 0, slotRows - 1);
183
+ if (zone.columns % span.cols !== 0 && x >= slotsPerRow * strideX - geometry.columnGap) return Math.min(itemCount, (row + 1) * slotsPerRow);
184
+ const col = clamp(Math.floor((x - slotWidth / 2) / strideX + 0.5), 0, slotsPerRow - 1);
185
+ const slot = row * slotsPerRow + col;
186
+ if (slot >= itemCount) return itemCount;
187
+ const after = slotsPerRow === 1 ? y >= row * strideY + slotHeight / 2 : x >= col * strideX + slotWidth / 2;
188
+ return Math.min(itemCount, slot + Number(after));
189
+ }
190
+ function stableAnchor(value, previous, maximum, hysteresis) {
191
+ 'worklet';
192
+
193
+ if (previous !== undefined && previous >= 0 && previous <= maximum && Math.abs(value - previous) <= 0.5 + hysteresis) return previous;
194
+ return clamp(Math.round(value), 0, maximum);
195
+ }
196
+ function stableExchangeAnchor(value, previous, maximum, threshold) {
197
+ 'worklet';
198
+
199
+ if (Math.abs(value - previous) <= threshold) return previous;
200
+ // Quantize each crossed boundary so a fast jump cannot bypass the threshold.
201
+ return clamp(value > previous ? Math.floor(value + (1 - threshold)) : Math.ceil(value - (1 - threshold)), 0, maximum);
202
+ }
203
+
204
+ /** Use the same explicit placement policy as the engine, without application data. */
205
+ function exchangeOrigin(current, zone, position) {
206
+ 'worklet';
207
+
208
+ if (zone.id !== current.sourceZoneId) return null;
209
+ const active = zone.items.find(item => item.id === current.itemId);
210
+ if (!active) return null;
211
+ const {
212
+ move,
213
+ kind,
214
+ colliders
215
+ } = selectSpatialMove({
216
+ items: zone.items.filter(item => item.id !== active.id),
217
+ active: {
218
+ ...active,
219
+ position
220
+ },
221
+ origin: active,
222
+ rows: zone.rows,
223
+ columns: zone.columns,
224
+ searchBudget: 1,
225
+ movementPolicy: current.movementPolicy
226
+ });
227
+ if (kind === 'exchange') return colliders.length > 0 ? active.position : null;
228
+ if (kind !== 'row-rotation' || !move.origin) return null;
229
+ const corridorTop = Math.min(move.origin.position.row, move.active.position.row);
230
+ const corridorBottom = Math.max(move.origin.position.row, move.active.position.row) + move.active.span.rows;
231
+ const exchanges = move.items.some(item => corridorTop < item.position.row + item.span.rows && corridorBottom > item.position.row);
232
+ return exchanges ? active.position : null;
233
+ }
234
+ function selectZone(current, x, y) {
235
+ 'worklet';
236
+
237
+ if (!rectContains(current.outlet, x, y)) return null;
238
+ const previousId = current.target?.zoneId ?? (current.seq === 0 ? current.sourceZoneId : null);
239
+ for (const zone of current.zones) {
240
+ if (zone.zone.id === previousId && rectContains(zone.rect, x, y)) return zone;
241
+ }
242
+ for (const zone of current.zones) {
243
+ const boundary = current.movementPolicy?.pointer?.boundaryHysteresis ?? DEFAULT_GRID_MOVEMENT_POLICY.pointer.boundaryHysteresis;
244
+ const marginX = Math.min(boundary, zone.rect.width / 4);
245
+ const marginY = Math.min(boundary, zone.rect.height / 4);
246
+ if (x >= zone.rect.x + marginX && x <= zone.rect.x + zone.rect.width - marginX && y >= zone.rect.y + marginY && y <= zone.rect.y + zone.rect.height - marginY) return zone;
247
+ }
248
+ return null;
249
+ }
250
+ /** Preview movement and release use this same hysteresis-adjusted logical target. */
251
+ export function readPointerTarget(current, absoluteX, absoluteY) {
252
+ 'worklet';
253
+
254
+ const outside = {
255
+ target: null,
256
+ x: absoluteX - current.gripX * current.width,
257
+ y: absoluteY - current.gripY * current.height,
258
+ width: current.width,
259
+ height: current.height
260
+ };
261
+ if (!Number.isFinite(absoluteX) || !Number.isFinite(absoluteY)) return {
262
+ ...outside,
263
+ x: current.x,
264
+ y: current.y
265
+ };
266
+ const measured = selectZone(current, absoluteX, absoluteY);
267
+ if (!measured) return outside;
268
+ const {
269
+ zone,
270
+ rect,
271
+ geometry,
272
+ cells
273
+ } = measured;
274
+ const {
275
+ span
276
+ } = current;
277
+ const sensitivity = current.movementPolicy?.pointer;
278
+ const cellHysteresis = sensitivity?.cellHysteresis ?? DEFAULT_GRID_MOVEMENT_POLICY.pointer.cellHysteresis;
279
+ const exchangeThreshold = sensitivity?.exchangeThreshold ?? DEFAULT_GRID_MOVEMENT_POLICY.pointer.exchangeThreshold;
280
+ const boundaryHysteresis = sensitivity?.boundaryHysteresis ?? DEFAULT_GRID_MOVEMENT_POLICY.pointer.boundaryHysteresis;
281
+ if (span.rows > zone.rows || span.cols > zone.columns) return outside;
282
+ const size = itemRect({
283
+ row: 0,
284
+ col: 0
285
+ }, span, geometry, cells);
286
+ if (!isUsableRect(size)) return outside;
287
+ const x = absoluteX - current.gripX * size.width;
288
+ const y = absoluteY - current.gripY * size.height;
289
+ const contentX = x - rect.x - geometry.padding.left;
290
+ const contentY = y - rect.y - geometry.padding.top;
291
+ const previous = current.target?.zoneId === zone.id ? current.target : null;
292
+ let target;
293
+ let position;
294
+ if (zone.strategy === 'spatial') {
295
+ const old = previous?.strategy === 'spatial' ? previous.position : undefined;
296
+ const row = contentY / (cells.cellHeight + geometry.rowGap);
297
+ const col = contentX / (cells.cellWidth + geometry.columnGap);
298
+ position = {
299
+ row: stableAnchor(row, old?.row, zone.rows - span.rows, cellHysteresis),
300
+ col: stableAnchor(col, old?.col, zone.columns - span.cols, cellHysteresis)
301
+ };
302
+ // Classify the nearest cell before hysteresis so a configured exchange
303
+ // threshold below the ordinary cell threshold can still take effect.
304
+ const origin = exchangeOrigin(current, zone, {
305
+ row: clamp(Math.round(row), 0, zone.rows - span.rows),
306
+ col: clamp(Math.round(col), 0, zone.columns - span.cols)
307
+ });
308
+ if (origin) {
309
+ // Re-entering the source zone must not bypass the exchange threshold.
310
+ // A full-width widget can move intervening items even at an empty target.
311
+ // Empty corridors and insertion retain their existing immediate targeting.
312
+ const reference = old ?? origin;
313
+ position = {
314
+ row: stableExchangeAnchor(row, reference.row, zone.rows - span.rows, exchangeThreshold),
315
+ col: stableExchangeAnchor(col, reference.col, zone.columns - span.cols, exchangeThreshold)
316
+ };
317
+ }
318
+ target = {
319
+ zoneId: zone.id,
320
+ strategy: 'spatial',
321
+ position
322
+ };
323
+ } else {
324
+ const centerX = contentX + size.width / 2;
325
+ const centerY = contentY + size.height / 2;
326
+ let index = orderedIndexForCenter(measured, current.itemId, centerX, centerY);
327
+ if (index === null) return outside;
328
+ if (previous?.strategy === 'ordered' && previous.index !== index) {
329
+ const slot = itemRect({
330
+ row: 0,
331
+ col: 0
332
+ }, zone.itemSpan, geometry, cells);
333
+ const marginX = Math.min(boundaryHysteresis, slot.width / 4);
334
+ const marginY = Math.min(boundaryHysteresis, slot.height / 4);
335
+ for (const dx of [-marginX, marginX]) {
336
+ for (const dy of [-marginY, marginY]) {
337
+ if (orderedIndexForCenter(measured, current.itemId, centerX + dx, centerY + dy) === previous.index) index = previous.index;
338
+ }
339
+ }
340
+ }
341
+ position = orderedSlotPosition(index, zone.itemSpan, zone.columns);
342
+ target = {
343
+ zoneId: zone.id,
344
+ strategy: 'ordered',
345
+ index
346
+ };
347
+ }
348
+ const anchored = itemRect(position, span, geometry, cells);
349
+ const windowTarget = {
350
+ ...anchored,
351
+ x: rect.x + anchored.x,
352
+ y: rect.y + anchored.y
353
+ };
354
+ if (!containsRectangle(rect, windowTarget, measured.pixelRatio) || !containsRectangle(current.outlet, windowTarget, measured.pixelRatio)) return outside;
355
+ return {
356
+ target,
357
+ x,
358
+ y,
359
+ width: size.width,
360
+ height: size.height
361
+ };
362
+ }
363
+ //# sourceMappingURL=geometry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DEFAULT_GRID_MOVEMENT_POLICY","selectSpatialMove","clamp","value","min","max","Math","orderedSlotPosition","index","itemSpan","columns","perRow","floor","cols","row","rows","col","orderedSlotIndex","position","isUsableRect","rect","Number","isFinite","x","y","width","height","rectContains","containsRectangle","outer","inner","pixelRatio","round","getCellGeometry","zone","geometry","Array","isArray","mode","padding","isSafeInteger","rowGap","columnGap","top","right","bottom","left","every","cellWidth","cellHeight","contentWidth","contentHeight","requiredWidth","requiredHeight","pixelSize","itemRect","span","cells","isPlacementVisible","zones","outlet","target","measured","find","entry","id","zoneId","strategy","items","length","slotsPerRow","anchored","windowTarget","sameTarget","sourceItemTarget","itemId","findIndex","item","candidate","orderedIndexForCenter","centerX","centerY","slotRows","itemCount","reduce","count","slotWidth","slotHeight","strideX","strideY","slot","after","stableAnchor","previous","maximum","hysteresis","undefined","abs","stableExchangeAnchor","threshold","ceil","exchangeOrigin","current","sourceZoneId","active","move","kind","colliders","filter","origin","searchBudget","movementPolicy","corridorTop","corridorBottom","exchanges","some","selectZone","previousId","seq","boundary","pointer","boundaryHysteresis","marginX","marginY","readPointerTarget","absoluteX","absoluteY","outside","gripX","gripY","sensitivity","cellHysteresis","exchangeThreshold","size","contentX","contentY","old","reference","dx","dy"],"sourceRoot":"../../../src","sources":["pointer/geometry.ts"],"mappings":"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","ignoreList":[]}