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,307 @@
1
+ "use strict";
2
+
3
+ import { validateRectMeasurement } from "../adapters/coordinates.js";
4
+ import { orderedSlots, slotIndex, slotPosition } from "../engine/gridPlacements.js";
5
+ import { isCellSpan } from "../engine/validation.js";
6
+ import { getCellGeometry, isPlacementVisible, isUsableRect, itemRect, readPointerTarget, rectContains } from "./geometry.js";
7
+ import { listTarget } from "./listTarget.js";
8
+
9
+ /** Geometry-only immutable input for UI pointer targeting; no refs or renderers. */
10
+
11
+ const preparedGrids = new WeakMap();
12
+ function sameGridInput(prepared, registration) {
13
+ const {
14
+ layout,
15
+ geometry,
16
+ cells
17
+ } = registration;
18
+ const previous = prepared.geometry;
19
+ if (prepared.zoneId !== registration.zoneId || prepared.revision !== registration.revision || prepared.layoutVersion !== registration.layoutVersion || prepared.pixelRatio !== registration.pixelRatio || prepared.cells.cellWidth !== cells.cellWidth || prepared.cells.cellHeight !== cells.cellHeight || prepared.zone.id !== layout.id || prepared.zone.rows !== layout.rows || prepared.zone.columns !== layout.columns || previous.mode !== geometry.mode || previous.rowGap !== geometry.rowGap || previous.columnGap !== geometry.columnGap || previous.padding.top !== geometry.padding.top || previous.padding.right !== geometry.padding.right || previous.padding.bottom !== geometry.padding.bottom || previous.padding.left !== geometry.padding.left || previous.mode === 'fixed' && (geometry.mode !== 'fixed' || previous.cellWidth !== geometry.cellWidth || previous.cellHeight !== geometry.cellHeight) || prepared.zone.items.length !== layout.placements.length || prepared.zone.strategy === 'ordered' !== (layout.itemSpan !== undefined) || prepared.zone.strategy === 'ordered' && (prepared.zone.itemSpan.rows !== layout.itemSpan?.rows || prepared.zone.itemSpan.cols !== layout.itemSpan?.cols)) return false;
20
+ // Direct JS callers can mutate their typed registration. Compare known
21
+ // primitives against our detached snapshot instead of caching by identity
22
+ // alone. Providers prepare once when registering, outside the pointer path.
23
+ const ordered = prepared.zone.strategy === 'ordered';
24
+ return layout.placements.every((placement, index) => {
25
+ const item = prepared.zone.items[index];
26
+ return item.id === placement.itemId && (ordered || item.position?.row === placement.position.row && item.position?.col === placement.position.col) && item.span.rows === placement.span.rows && item.span.cols === placement.span.cols && item.placement === placement.placement;
27
+ });
28
+ }
29
+ /** Prepare on registration, then reuse the result on the UI runtime. */
30
+ export function prepareGridTarget(registration) {
31
+ const cached = preparedGrids.get(registration.layout);
32
+ if (cached && sameGridInput(cached, registration)) return cached;
33
+ const {
34
+ layout,
35
+ geometry
36
+ } = registration;
37
+ const zone = layout.itemSpan ? Object.freeze({
38
+ id: layout.id,
39
+ strategy: 'ordered',
40
+ rows: layout.rows,
41
+ columns: layout.columns,
42
+ itemSpan: Object.freeze({
43
+ rows: layout.itemSpan.rows,
44
+ cols: layout.itemSpan.cols
45
+ }),
46
+ // Ordered items carry no position; their slot follows from the order.
47
+ items: Object.freeze(layout.placements.map(placement => Object.freeze({
48
+ id: placement.itemId,
49
+ data: undefined,
50
+ span: Object.freeze({
51
+ rows: placement.span.rows,
52
+ cols: placement.span.cols
53
+ }),
54
+ placement: placement.placement
55
+ })))
56
+ }) : Object.freeze({
57
+ id: layout.id,
58
+ strategy: 'spatial',
59
+ rows: layout.rows,
60
+ columns: layout.columns,
61
+ items: Object.freeze(layout.placements.map(placement => Object.freeze({
62
+ id: placement.itemId,
63
+ data: undefined,
64
+ position: Object.freeze({
65
+ row: placement.position.row,
66
+ col: placement.position.col
67
+ }),
68
+ span: Object.freeze({
69
+ rows: placement.span.rows,
70
+ cols: placement.span.cols
71
+ }),
72
+ placement: placement.placement
73
+ })))
74
+ });
75
+ const prepared = Object.freeze({
76
+ zoneId: registration.zoneId,
77
+ revision: registration.revision,
78
+ layoutVersion: registration.layoutVersion,
79
+ zone,
80
+ geometry: Object.freeze({
81
+ ...(geometry.mode === 'fixed' ? {
82
+ mode: 'fixed',
83
+ cellWidth: geometry.cellWidth,
84
+ cellHeight: geometry.cellHeight
85
+ } : {
86
+ mode: 'fit'
87
+ }),
88
+ rowGap: geometry.rowGap,
89
+ columnGap: geometry.columnGap,
90
+ padding: Object.freeze({
91
+ top: geometry.padding.top,
92
+ right: geometry.padding.right,
93
+ bottom: geometry.padding.bottom,
94
+ left: geometry.padding.left
95
+ })
96
+ }),
97
+ cells: Object.freeze({
98
+ cellWidth: registration.cells.cellWidth,
99
+ cellHeight: registration.cells.cellHeight
100
+ }),
101
+ pixelRatio: registration.pixelRatio
102
+ });
103
+ preparedGrids.set(layout, prepared);
104
+ return prepared;
105
+ }
106
+
107
+ /** Attach current viewport coordinates without rebuilding baseline placements. */
108
+ export function measurePreparedGrid(prepared, measured) {
109
+ 'worklet';
110
+
111
+ if (measured.zoneId !== prepared.zoneId || measured.layoutVersion !== prepared.layoutVersion || measured.viewport.revision !== prepared.revision || measured.viewport.source !== 'measured' || measured.viewport.space !== 'screen' || !Number.isSafeInteger(prepared.revision) || prepared.revision < 0 || !Number.isFinite(measured.viewport.timestampMs) || measured.viewport.timestampMs < 0 || measured.offset !== 0 || !isUsableRect(measured.viewport.rect)) return null;
112
+ const {
113
+ zone,
114
+ geometry,
115
+ cells,
116
+ pixelRatio
117
+ } = prepared;
118
+ const currentCells = getCellGeometry(zone, geometry, measured.viewport.rect.width, measured.viewport.rect.height, pixelRatio);
119
+ if (zone.id !== prepared.zoneId || !currentCells || currentCells.cellWidth !== cells.cellWidth || currentCells.cellHeight !== cells.cellHeight) return null;
120
+ return {
121
+ zone,
122
+ geometry,
123
+ cells,
124
+ pixelRatio,
125
+ rect: measured.viewport.rect
126
+ };
127
+ }
128
+ function isCurrent(state, registration, measured, ignoreLayoutVersion = false) {
129
+ const checked = validateRectMeasurement(measured.viewport, {
130
+ revision: state.revision
131
+ });
132
+ return checked.valid && checked.value.source === 'measured' && checked.value.space === 'screen' && registration.revision === state.revision && (ignoreLayoutVersion || registration.layoutVersion === measured.layoutVersion) && (registration.kind === 'grid' ? measured.offset === 0 : registration.layout.revision === state.revision && Number.isFinite(measured.offset));
133
+ }
134
+ function measuredGrid(registration, measured) {
135
+ const {
136
+ layout,
137
+ geometry,
138
+ cells,
139
+ pixelRatio
140
+ } = registration;
141
+ const currentCells = getCellGeometry(layout, geometry, measured.viewport.rect.width, measured.viewport.rect.height, pixelRatio);
142
+ if (layout.id !== registration.zoneId || !currentCells || currentCells.cellWidth !== cells.cellWidth || currentCells.cellHeight !== cells.cellHeight) return null;
143
+ const prepared = prepareGridTarget(registration);
144
+ return {
145
+ zone: prepared.zone,
146
+ geometry: prepared.geometry,
147
+ cells: prepared.cells,
148
+ pixelRatio: prepared.pixelRatio,
149
+ rect: measured.viewport.rect
150
+ };
151
+ }
152
+
153
+ /**
154
+ * Use committed list geometry and the existing grid pointer policy in one
155
+ * measured coordinate space. Grid recipes are captured by destination zone ID.
156
+ */
157
+
158
+ export function layoutTarget(state, registrations, gridItemLayouts, movementPolicy, previousTarget) {
159
+ return resolveLayoutTarget(state, registrations, gridItemLayouts, movementPolicy, previousTarget).target;
160
+ }
161
+ export function resolveLayoutTarget(state, registrations, gridItemLayouts, movementPolicy, previousTarget) {
162
+ const outside = {
163
+ target: null,
164
+ stale: false
165
+ };
166
+ if (state.itemId === null || !isUsableRect(state.root) || !rectContains(state.root, state.pointer.x, state.pointer.y) || !Number.isFinite(state.width) || !Number.isFinite(state.height) || state.width <= 0 || state.height <= 0 || !Number.isFinite(state.grip.x) || !Number.isFinite(state.grip.y)) return outside;
167
+
168
+ // Keep an overlapping previous zone until the pointer actually leaves it,
169
+ // matching the old grid controller's zone selection policy.
170
+ const previous = state.zones.find(measured => measured.zoneId === previousTarget?.zoneId);
171
+ const zones = previous ? [previous, ...state.zones.filter(measured => measured !== previous)] : state.zones;
172
+ let stale = false;
173
+ for (const measured of zones) {
174
+ const registration = registrations.get(measured.zoneId);
175
+ if (!registration) continue;
176
+ const inside = rectContains(measured.viewport.rect, state.pointer.x, state.pointer.y);
177
+ if (!isCurrent(state, registration, measured)) {
178
+ if (inside && isCurrent(state, registration, measured, true)) stale = true;
179
+ continue;
180
+ }
181
+ if (!inside) continue;
182
+ if (registration.kind === 'list') {
183
+ return {
184
+ target: listTarget({
185
+ ...state,
186
+ zones: [measured]
187
+ }, new Map([[measured.zoneId, registration]])),
188
+ stale: false
189
+ };
190
+ }
191
+ const recipe = gridItemLayouts.get(measured.zoneId);
192
+ const grid = measuredGrid(registration, measured);
193
+ if (!recipe || !isCellSpan(recipe.span) || !grid) return outside;
194
+ const content = itemRect({
195
+ row: 0,
196
+ col: 0
197
+ }, {
198
+ rows: grid.zone.rows,
199
+ cols: grid.zone.columns
200
+ }, grid.geometry, grid.cells);
201
+ // Padding cannot accept a grid drop even if clamping would fit its first cell.
202
+ if (!rectContains({
203
+ ...content,
204
+ x: grid.rect.x + content.x,
205
+ y: grid.rect.y + content.y
206
+ }, state.pointer.x, state.pointer.y)) continue;
207
+ const legacyMotion = {
208
+ token: state.token,
209
+ phase: 'dragging',
210
+ itemId: state.itemId,
211
+ sourceZoneId: state.sourceZoneId,
212
+ // Provider activation starts at sequence 1; the grid policy starts at 0.
213
+ seq: Math.max(0, state.seq - 1),
214
+ target: previousTarget?.kind === 'grid' ? legacyGridTarget(previousTarget, grid.zone) : null,
215
+ span: recipe.span,
216
+ x: state.pointer.x - state.grip.x,
217
+ y: state.pointer.y - state.grip.y,
218
+ width: state.width,
219
+ height: state.height,
220
+ gripX: Math.max(0, Math.min(1, state.grip.x / state.width)),
221
+ gripY: Math.max(0, Math.min(1, state.grip.y / state.height)),
222
+ zones: [grid],
223
+ outlet: state.root,
224
+ validity: 'pending',
225
+ visible: state.visible,
226
+ destination: null,
227
+ movementPolicy,
228
+ baseRevision: state.revision
229
+ };
230
+ const result = readPointerTarget(legacyMotion, state.pointer.x, state.pointer.y);
231
+ if (result.target?.strategy === 'spatial') {
232
+ return {
233
+ target: {
234
+ kind: 'grid',
235
+ zoneId: result.target.zoneId,
236
+ position: result.target.position
237
+ },
238
+ stale: false
239
+ };
240
+ }
241
+ if (result.target?.strategy === 'ordered' && grid.zone.strategy === 'ordered') {
242
+ const slots = orderedSlots(grid.zone, grid.zone.itemSpan);
243
+ return {
244
+ target: {
245
+ kind: 'grid',
246
+ zoneId: result.target.zoneId,
247
+ position: slotPosition(result.target.index, grid.zone.itemSpan, slots.perRow)
248
+ },
249
+ stale: false
250
+ };
251
+ }
252
+ }
253
+ return {
254
+ target: null,
255
+ stale
256
+ };
257
+ }
258
+
259
+ /** Hand the grid pointer policy the previous target in its own vocabulary. */
260
+ function legacyGridTarget(previous, zone) {
261
+ if (zone.strategy === 'ordered' && previous.zoneId === zone.id) {
262
+ const slots = orderedSlots(zone, zone.itemSpan);
263
+ const index = slotIndex(previous.position, zone.itemSpan, slots.perRow);
264
+ if (index !== null) return {
265
+ zoneId: previous.zoneId,
266
+ strategy: 'ordered',
267
+ index
268
+ };
269
+ }
270
+ return {
271
+ zoneId: previous.zoneId,
272
+ strategy: 'spatial',
273
+ position: previous.position
274
+ };
275
+ }
276
+
277
+ /** Recheck a resolved grid footprint after an exchange changes its position. */
278
+ export function isLayoutTargetVisible(state, registrations, target, gridItemLayouts) {
279
+ if (!isUsableRect(state.root)) return false;
280
+ const registration = registrations.get(target.zoneId);
281
+ const measured = state.zones.find(entry => entry.zoneId === target.zoneId);
282
+ if (!registration || !measured || registration.kind !== target.kind || !isCurrent(state, registration, measured)) return false;
283
+ if (target.kind === 'list' && registration.kind === 'list') {
284
+ const count = registration.layout.entries.filter(entry => entry.itemId !== state.itemId).length;
285
+ return Number.isSafeInteger(target.index) && target.index >= 0 && target.index <= count;
286
+ }
287
+ if (target.kind !== 'grid' || registration.kind !== 'grid') return false;
288
+ const recipe = gridItemLayouts.get(target.zoneId);
289
+ const grid = measuredGrid(registration, measured);
290
+ if (!recipe || !grid || !isCellSpan(recipe.span)) return false;
291
+ if (grid.zone.strategy === 'ordered') {
292
+ // An ordered slot has the zone's span whatever the entering item asked for.
293
+ const slots = orderedSlots(grid.zone, grid.zone.itemSpan);
294
+ const index = slotIndex(target.position, grid.zone.itemSpan, slots.perRow);
295
+ return index !== null && isPlacementVisible([grid], state.root, {
296
+ strategy: 'ordered',
297
+ zoneId: target.zoneId,
298
+ index
299
+ }, grid.zone.itemSpan);
300
+ }
301
+ return isPlacementVisible([grid], state.root, {
302
+ strategy: 'spatial',
303
+ zoneId: target.zoneId,
304
+ position: target.position
305
+ }, recipe.span);
306
+ }
307
+ //# sourceMappingURL=layoutTarget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["validateRectMeasurement","orderedSlots","slotIndex","slotPosition","isCellSpan","getCellGeometry","isPlacementVisible","isUsableRect","itemRect","readPointerTarget","rectContains","listTarget","preparedGrids","WeakMap","sameGridInput","prepared","registration","layout","geometry","cells","previous","zoneId","revision","layoutVersion","pixelRatio","cellWidth","cellHeight","zone","id","rows","columns","mode","rowGap","columnGap","padding","top","right","bottom","left","items","length","placements","strategy","itemSpan","undefined","cols","ordered","every","placement","index","item","itemId","position","row","col","span","prepareGridTarget","cached","get","Object","freeze","map","data","set","measurePreparedGrid","measured","viewport","source","space","Number","isSafeInteger","isFinite","timestampMs","offset","rect","currentCells","width","height","isCurrent","state","ignoreLayoutVersion","checked","valid","value","kind","measuredGrid","layoutTarget","registrations","gridItemLayouts","movementPolicy","previousTarget","resolveLayoutTarget","target","outside","stale","root","pointer","x","y","grip","zones","find","filter","inside","Map","recipe","grid","content","legacyMotion","token","phase","sourceZoneId","seq","Math","max","legacyGridTarget","gripX","min","gripY","outlet","validity","visible","destination","baseRevision","result","slots","perRow","isLayoutTargetVisible","entry","count","entries"],"sourceRoot":"../../../src","sources":["pointer/layoutTarget.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+
3
+ import { useEffect, useState } from 'react';
4
+ import { makeMutable, startMapper, stopMapper, withTiming } from 'react-native-reanimated';
5
+ import { presentationRect } from "../runtime/dndPresentation.js";
6
+ /** Resolve the mount-time geometry from JS-owned data without UI reads. */
7
+ function resolveInitialListCellGeometry({
8
+ initial,
9
+ zoneId,
10
+ itemId,
11
+ vertical,
12
+ fixed,
13
+ size
14
+ }) {
15
+ const rect = initial.presentation !== undefined && initial.presentation.revision === initial.revision ? presentationRect(initial.presentation, zoneId, itemId) : undefined;
16
+ return {
17
+ start: rect ? vertical ? rect.y : rect.x : initial.start,
18
+ size: fixed && rect ? vertical ? rect.height : rect.width : size
19
+ };
20
+ }
21
+
22
+ /**
23
+ * One UI mapper per cell selects the validated candidate rect and animates the
24
+ * content start. Mount reads no UI state: a synchronous shared-value read from
25
+ * JS blocks on the UI runtime and copies the whole presentation table. The
26
+ * first UI evaluation snaps to the UI geometry so a stale estimate never
27
+ * becomes the start of a timing animation.
28
+ */
29
+ export function useListCellMotion(args) {
30
+ const [values] = useState(() => {
31
+ const geometry = resolveInitialListCellGeometry(args);
32
+ return {
33
+ // NaN marks a target the UI runtime has not evaluated yet.
34
+ target: makeMutable(Number.NaN),
35
+ animatedStart: makeMutable(geometry.start),
36
+ targetSize: makeMutable(geometry.size)
37
+ };
38
+ });
39
+ const {
40
+ target,
41
+ animatedStart,
42
+ targetSize
43
+ } = values;
44
+ const {
45
+ zoneId,
46
+ itemId,
47
+ vertical,
48
+ fixed,
49
+ start,
50
+ size,
51
+ presentation,
52
+ revision,
53
+ hiddenItemId
54
+ } = args;
55
+ const {
56
+ durationMs,
57
+ reduceMotion
58
+ } = args.animation;
59
+ useEffect(() => {
60
+ const mapper = () => {
61
+ 'worklet';
62
+
63
+ const current = presentation?.get();
64
+ const committed = typeof revision === 'number' ? revision : revision.get();
65
+ const rect = current !== undefined && current.revision === committed ? presentationRect(current, zoneId, itemId) : undefined;
66
+ const nextTarget = rect ? vertical ? rect.y : rect.x : typeof start === 'number' ? start : start.get();
67
+ if (fixed) {
68
+ const nextSize = rect ? vertical ? rect.height : rect.width : size;
69
+ if (targetSize.get() !== nextSize) targetSize.set(nextSize);
70
+ }
71
+ const hidden = hiddenItemId.get() === itemId;
72
+ const previous = target.get();
73
+ if (Number.isNaN(previous)) {
74
+ // Adopt validated UI geometry without animating away from the JS
75
+ // estimate that produced the initial style.
76
+ target.set(nextTarget);
77
+ animatedStart.set(nextTarget);
78
+ return;
79
+ }
80
+ if (previous !== nextTarget) {
81
+ target.set(nextTarget);
82
+ animatedStart.set(hidden ? nextTarget : withTiming(nextTarget, {
83
+ duration: durationMs,
84
+ reduceMotion: reduceMotion
85
+ }));
86
+ } else if (hidden && animatedStart.get() !== nextTarget) {
87
+ // The hidden source sits exactly in its slot; stop in-flight motion.
88
+ animatedStart.set(nextTarget);
89
+ }
90
+ };
91
+ const mapperId = startMapper(mapper, [presentation, revision, start, hiddenItemId], [target, animatedStart, targetSize]);
92
+ return () => stopMapper(mapperId);
93
+ }, [animatedStart, durationMs, fixed, hiddenItemId, itemId, presentation, reduceMotion, revision, size, start, target, targetSize, vertical, zoneId]);
94
+ return {
95
+ animatedStart,
96
+ targetSize
97
+ };
98
+ }
99
+ //# sourceMappingURL=listCellMotion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useState","makeMutable","startMapper","stopMapper","withTiming","presentationRect","resolveInitialListCellGeometry","initial","zoneId","itemId","vertical","fixed","size","rect","presentation","undefined","revision","start","y","x","height","width","useListCellMotion","args","values","geometry","target","Number","NaN","animatedStart","targetSize","hiddenItemId","durationMs","reduceMotion","animation","mapper","current","get","committed","nextTarget","nextSize","set","hidden","previous","isNaN","duration","mapperId"],"sourceRoot":"../../../src","sources":["pointer/listCellMotion.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ import { screenToContent } from "../adapters/coordinates.js";
4
+ import { computeListIndex } from "../engine/list.js";
5
+ import { findListTargetIndex } from "../engine/listIndex.js";
6
+ import { rectContains } from "./geometry.js";
7
+
8
+ /** Target from committed order; candidate reflow must not move its own thresholds. */
9
+ export function listTarget(state, registrations) {
10
+ if (!rectContains(state.root, state.pointer.x, state.pointer.y)) return null;
11
+ for (const measured of state.zones) {
12
+ const registration = registrations.get(measured.zoneId);
13
+ if (!registration || registration.revision !== state.revision || registration.layout.revision !== state.revision || registration.layoutVersion !== measured.layoutVersion || !rectContains(measured.viewport.rect, state.pointer.x, state.pointer.y)) continue;
14
+ const vertical = registration.orientation === 'vertical';
15
+ const center = {
16
+ x: state.pointer.x - state.grip.x + state.width / 2,
17
+ y: state.pointer.y - state.grip.y + state.height / 2
18
+ };
19
+ const content = screenToContent(center, {
20
+ viewport: measured.viewport,
21
+ scrollOffset: vertical ? {
22
+ x: 0,
23
+ y: measured.offset
24
+ } : {
25
+ x: measured.offset,
26
+ y: 0
27
+ }
28
+ }, {
29
+ revision: state.revision
30
+ });
31
+ if (!content.valid) return null;
32
+ const mainAxisCenter = vertical ? content.value.y : content.value.x;
33
+ const index = registration.targetIndex ? findListTargetIndex(registration.targetIndex, state.itemId, mainAxisCenter) : computeListIndex(registration.layout, state.itemId, mainAxisCenter);
34
+ return index === null ? null : {
35
+ kind: 'list',
36
+ zoneId: measured.zoneId,
37
+ index
38
+ };
39
+ }
40
+ return null;
41
+ }
42
+ //# sourceMappingURL=listTarget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["screenToContent","computeListIndex","findListTargetIndex","rectContains","listTarget","state","registrations","root","pointer","x","y","measured","zones","registration","get","zoneId","revision","layout","layoutVersion","viewport","rect","vertical","orientation","center","grip","width","height","content","scrollOffset","offset","valid","mainAxisCenter","value","index","targetIndex","itemId","kind"],"sourceRoot":"../../../src","sources":["pointer/listTarget.ts"],"mappings":";;AAAA,SAASA,eAAe,QAAQ,4BAAyB;AAEzD,SAASC,gBAAgB,QAAQ,mBAAgB;AACjD,SAASC,mBAAmB,QAAQ,wBAAqB;AAEzD,SAASC,YAAY,QAAQ,eAAY;;AAEzC;AACA,OAAO,SAASC,UAAUA,CACxBC,KAAgB,EAChBC,aAGC,EACoB;EACrB,IAAI,CAACH,YAAY,CAACE,KAAK,CAACE,IAAI,EAAEF,KAAK,CAACG,OAAO,CAACC,CAAC,EAAEJ,KAAK,CAACG,OAAO,CAACE,CAAC,CAAC,EAAE,OAAO,IAAI;EAC5E,KAAK,MAAMC,QAAQ,IAAIN,KAAK,CAACO,KAAK,EAAE;IAClC,MAAMC,YAAY,GAAGP,aAAa,CAACQ,GAAG,CAACH,QAAQ,CAACI,MAAM,CAAC;IACvD,IACE,CAACF,YAAY,IACbA,YAAY,CAACG,QAAQ,KAAKX,KAAK,CAACW,QAAQ,IACxCH,YAAY,CAACI,MAAM,CAACD,QAAQ,KAAKX,KAAK,CAACW,QAAQ,IAC/CH,YAAY,CAACK,aAAa,KAAKP,QAAQ,CAACO,aAAa,IACrD,CAACf,YAAY,CAACQ,QAAQ,CAACQ,QAAQ,CAACC,IAAI,EAAEf,KAAK,CAACG,OAAO,CAACC,CAAC,EAAEJ,KAAK,CAACG,OAAO,CAACE,CAAC,CAAC,EAEvE;IACF,MAAMW,QAAQ,GAAGR,YAAY,CAACS,WAAW,KAAK,UAAU;IACxD,MAAMC,MAAM,GAAG;MACbd,CAAC,EAAEJ,KAAK,CAACG,OAAO,CAACC,CAAC,GAAGJ,KAAK,CAACmB,IAAI,CAACf,CAAC,GAAGJ,KAAK,CAACoB,KAAK,GAAG,CAAC;MACnDf,CAAC,EAAEL,KAAK,CAACG,OAAO,CAACE,CAAC,GAAGL,KAAK,CAACmB,IAAI,CAACd,CAAC,GAAGL,KAAK,CAACqB,MAAM,GAAG;IACrD,CAAC;IACD,MAAMC,OAAO,GAAG3B,eAAe,CAC7BuB,MAAM,EACN;MACEJ,QAAQ,EAAER,QAAQ,CAACQ,QAAQ;MAC3BS,YAAY,EAAEP,QAAQ,GAClB;QAAEZ,CAAC,EAAE,CAAC;QAAEC,CAAC,EAAEC,QAAQ,CAACkB;MAAO,CAAC,GAC5B;QAAEpB,CAAC,EAAEE,QAAQ,CAACkB,MAAM;QAAEnB,CAAC,EAAE;MAAE;IACjC,CAAC,EACD;MAAEM,QAAQ,EAAEX,KAAK,CAACW;IAAS,CAC7B,CAAC;IACD,IAAI,CAACW,OAAO,CAACG,KAAK,EAAE,OAAO,IAAI;IAC/B,MAAMC,cAAc,GAAGV,QAAQ,GAAGM,OAAO,CAACK,KAAK,CAACtB,CAAC,GAAGiB,OAAO,CAACK,KAAK,CAACvB,CAAC;IACnE,MAAMwB,KAAK,GAAGpB,YAAY,CAACqB,WAAW,GAClChC,mBAAmB,CACjBW,YAAY,CAACqB,WAAW,EACxB7B,KAAK,CAAC8B,MAAM,EACZJ,cACF,CAAC,GACD9B,gBAAgB,CAACY,YAAY,CAACI,MAAM,EAAEZ,KAAK,CAAC8B,MAAM,EAAEJ,cAAc,CAAC;IACvE,OAAOE,KAAK,KAAK,IAAI,GACjB,IAAI,GACJ;MAAEG,IAAI,EAAE,MAAM;MAAErB,MAAM,EAAEJ,QAAQ,CAACI,MAAM;MAAEkB;IAAM,CAAC;EACtD;EACA,OAAO,IAAI;AACb","ignoreList":[]}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ export const DEFAULT_GRID_MOTION = Object.freeze({
4
+ durationMs: 180,
5
+ reduceMotion: 'system'
6
+ });
7
+ /** Validate before sharing animation settings with the UI runtime. */
8
+ export function resolveGridMotion(value) {
9
+ const fail = message => ({
10
+ valid: false,
11
+ issues: [{
12
+ code: 'invalid-configuration',
13
+ message
14
+ }]
15
+ });
16
+ if (value === undefined) return {
17
+ valid: true,
18
+ motion: {
19
+ ...DEFAULT_GRID_MOTION
20
+ }
21
+ };
22
+ if (!value || typeof value !== 'object' || Array.isArray(value)) return fail('motion must be an object with durationMs and reduceMotion.');
23
+ const config = value;
24
+ if (Object.keys(config).some(key => key !== 'durationMs' && key !== 'reduceMotion')) return fail('motion supports only durationMs and reduceMotion.');
25
+ const durationMs = config.durationMs === undefined ? DEFAULT_GRID_MOTION.durationMs : config.durationMs;
26
+ if (typeof durationMs !== 'number' || !Number.isFinite(durationMs) || durationMs < 0) return fail('motion.durationMs must be a finite non-negative number.');
27
+ const reduceMotion = config.reduceMotion === undefined ? DEFAULT_GRID_MOTION.reduceMotion : config.reduceMotion;
28
+ if (reduceMotion !== 'system' && reduceMotion !== 'always' && reduceMotion !== 'never') return fail('motion.reduceMotion must be system, always or never.');
29
+ return {
30
+ valid: true,
31
+ motion: {
32
+ durationMs: reduceMotion === 'always' ? 0 : durationMs,
33
+ reduceMotion
34
+ }
35
+ };
36
+ }
37
+ //# sourceMappingURL=motion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DEFAULT_GRID_MOTION","Object","freeze","durationMs","reduceMotion","resolveGridMotion","value","fail","message","valid","issues","code","undefined","motion","Array","isArray","config","keys","some","key","Number","isFinite"],"sourceRoot":"../../../src","sources":["pointer/motion.ts"],"mappings":";;AAWA,OAAO,MAAMA,mBAAuD,GAClEC,MAAM,CAACC,MAAM,CAAC;EAAEC,UAAU,EAAE,GAAG;EAAEC,YAAY,EAAE;AAAS,CAAC,CAAC;AAM5D;AACA,OAAO,SAASC,iBAAiBA,CAACC,KAAc,EAAoB;EAClE,MAAMC,IAAI,GAAIC,OAAe,KAAwB;IACnDC,KAAK,EAAE,KAAK;IACZC,MAAM,EAAE,CAAC;MAAEC,IAAI,EAAE,uBAAuB;MAAEH;IAAQ,CAAC;EACrD,CAAC,CAAC;EACF,IAAIF,KAAK,KAAKM,SAAS,EACrB,OAAO;IAAEH,KAAK,EAAE,IAAI;IAAEI,MAAM,EAAE;MAAE,GAAGb;IAAoB;EAAE,CAAC;EAC5D,IAAI,CAACM,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAIQ,KAAK,CAACC,OAAO,CAACT,KAAK,CAAC,EAC7D,OAAOC,IAAI,CAAC,4DAA4D,CAAC;EAC3E,MAAMS,MAAM,GAAGV,KAAgC;EAC/C,IACEL,MAAM,CAACgB,IAAI,CAACD,MAAM,CAAC,CAACE,IAAI,CACtBC,GAAG,IAAIA,GAAG,KAAK,YAAY,IAAIA,GAAG,KAAK,cACzC,CAAC,EAED,OAAOZ,IAAI,CAAC,mDAAmD,CAAC;EAElE,MAAMJ,UAAU,GACda,MAAM,CAACb,UAAU,KAAKS,SAAS,GAC3BZ,mBAAmB,CAACG,UAAU,GAC9Ba,MAAM,CAACb,UAAU;EACvB,IACE,OAAOA,UAAU,KAAK,QAAQ,IAC9B,CAACiB,MAAM,CAACC,QAAQ,CAAClB,UAAU,CAAC,IAC5BA,UAAU,GAAG,CAAC,EAEd,OAAOI,IAAI,CAAC,yDAAyD,CAAC;EAExE,MAAMH,YAAY,GAChBY,MAAM,CAACZ,YAAY,KAAKQ,SAAS,GAC7BZ,mBAAmB,CAACI,YAAY,GAChCY,MAAM,CAACZ,YAAY;EACzB,IACEA,YAAY,KAAK,QAAQ,IACzBA,YAAY,KAAK,QAAQ,IACzBA,YAAY,KAAK,OAAO,EAExB,OAAOG,IAAI,CAAC,sDAAsD,CAAC;EAErE,OAAO;IACLE,KAAK,EAAE,IAAI;IACXI,MAAM,EAAE;MACNV,UAAU,EAAEC,YAAY,KAAK,QAAQ,GAAG,CAAC,GAAGD,UAAU;MACtDC;IACF;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Only validated numeric geometry crosses into the UI runtime. Coordinates
5
+ * form one typed array so a zone table crosses runtimes as a single buffer;
6
+ * the slot map is reused while a zone keeps the same items, so repeated
7
+ * candidates serialize only the coordinates.
8
+ */
9
+
10
+ export const EMPTY_DND_PRESENTATION = {
11
+ token: 0,
12
+ revision: 0,
13
+ zones: {}
14
+ };
15
+ export function presentationRect(presentation, zoneId, itemId) {
16
+ 'worklet';
17
+
18
+ const zone = presentation?.zones[`#${zoneId}`];
19
+ if (zone === undefined) return undefined;
20
+ const slot = zone.slots[`#${itemId}`];
21
+ if (slot === undefined) return undefined;
22
+ const offset = slot * 4;
23
+ return {
24
+ x: zone.rects[offset],
25
+ y: zone.rects[offset + 1],
26
+ width: zone.rects[offset + 2],
27
+ height: zone.rects[offset + 3]
28
+ };
29
+ }
30
+
31
+ /**
32
+ * Build a zone table from item rects. The previous table's slot map is kept
33
+ * when it lists exactly these items, so unchanged maps keep their identity.
34
+ */
35
+ export function createZonePresentation(entries, previous) {
36
+ let slots = previous?.slots;
37
+ let count = slots ? Object.keys(slots).length : 0;
38
+ if (!slots || count !== entries.length || entries.some(([itemId]) => slots[`#${itemId}`] === undefined)) {
39
+ const next = {};
40
+ count = 0;
41
+ for (const [itemId] of entries) {
42
+ const key = `#${itemId}`;
43
+ if (next[key] === undefined) next[key] = count++;
44
+ }
45
+ slots = next;
46
+ }
47
+ const rects = new Float64Array(count * 4);
48
+ for (const [itemId, rect] of entries) {
49
+ const offset = slots[`#${itemId}`] * 4;
50
+ rects[offset] = rect.x;
51
+ rects[offset + 1] = rect.y;
52
+ rects[offset + 2] = rect.width;
53
+ rects[offset + 3] = rect.height;
54
+ }
55
+ return {
56
+ slots,
57
+ rects
58
+ };
59
+ }
60
+
61
+ /** Build a zone table from a `#itemId` keyed rect record. */
62
+ export function zonePresentationFromRects(rects) {
63
+ return createZonePresentation(Object.entries(rects).map(([key, rect]) => [key.slice(1), rect]));
64
+ }
65
+
66
+ /** Read a zone table back as a `#itemId` keyed rect record. */
67
+ export function zonePresentationRects(zone) {
68
+ const result = {};
69
+ if (!zone) return result;
70
+ for (const [key, slot] of Object.entries(zone.slots)) {
71
+ const offset = slot * 4;
72
+ result[key] = {
73
+ x: zone.rects[offset],
74
+ y: zone.rects[offset + 1],
75
+ width: zone.rects[offset + 2],
76
+ height: zone.rects[offset + 3]
77
+ };
78
+ }
79
+ return result;
80
+ }
81
+ //# sourceMappingURL=dndPresentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["EMPTY_DND_PRESENTATION","token","revision","zones","presentationRect","presentation","zoneId","itemId","zone","undefined","slot","slots","offset","x","rects","y","width","height","createZonePresentation","entries","previous","count","Object","keys","length","some","next","key","Float64Array","rect","zonePresentationFromRects","map","slice","zonePresentationRects","result"],"sourceRoot":"../../../src","sources":["runtime/dndPresentation.ts"],"mappings":"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","ignoreList":[]}