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":["orderedSlots","slotPosition","computeZoneLayout","rectanglesOverlap","isCellPosition","isCellSpan","isPositiveInteger","isRecord","validateValue","addIssue","issues","code","message","context","push","isRevision","value","Number","isSafeInteger","collectReference","itemId","itemIds","references","itemContext","has","add","collectGridIssues","zone","dimensionsValid","rows","columns","Array","isArray","placements","rectangles","placement","undefined","spanValid","span","positionValid","position","rectangle","row","col","cols","previous","itemSpan","collectOrderedIssues","slots","length","perRow","Math","ceil","forEach","index","expected","validateLayoutState","state","valid","revision","Set","items","item","id","zoneIds","zones","zoneId","kind","orientation","fromGridValue","validation","nextRevision","layout","strategy","map","data","toGridValue","unsupported","filter","layoutToGridValue","Map","get"],"sourceRoot":"../../../src","sources":["engine/layoutState.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+
3
+ import { isRecord } from "./validation.js";
4
+ function isNonnegative(value) {
5
+ return typeof value === 'number' && Number.isFinite(value) && value >= 0;
6
+ }
7
+ function isRevision(value) {
8
+ return isNonnegative(value) && Number.isSafeInteger(value);
9
+ }
10
+ function isContext(context) {
11
+ return isRecord(context) && (context.orientation === 'vertical' || context.orientation === 'horizontal') && isNonnegative(context.crossSize) && isRevision(context.epoch ?? 0);
12
+ }
13
+ function sameContext(a, b) {
14
+ return a.orientation === b.orientation && a.crossSize === b.crossSize && (a.epoch ?? 0) === (b.epoch ?? 0);
15
+ }
16
+
17
+ /**
18
+ * Sizes belong to IDs, never array positions. A measurement is reusable after
19
+ * reordering, but only with matching orientation, cross-axis size and epoch.
20
+ * The measurement revision prevents delayed events from replacing newer sizes.
21
+ */
22
+ export class ListSizeCache {
23
+ sizes = new Map();
24
+ get(itemId, context) {
25
+ if (typeof itemId !== 'string' || !isContext(context)) return undefined;
26
+ const cached = this.sizes.get(itemId);
27
+ return cached && sameContext(cached.context, context) ? cached.size : undefined;
28
+ }
29
+ set(itemId, size, context, measurementRevision = 0) {
30
+ if (typeof itemId !== 'string' || !isNonnegative(size) || !isContext(context) || !isRevision(measurementRevision)) {
31
+ return false;
32
+ }
33
+ const cached = this.sizes.get(itemId);
34
+ if (cached && ((context.epoch ?? 0) < (cached.context.epoch ?? 0) || (context.epoch ?? 0) === (cached.context.epoch ?? 0) && measurementRevision < cached.measurementRevision)) {
35
+ return false;
36
+ }
37
+ this.sizes.set(itemId, {
38
+ size,
39
+ context: {
40
+ ...context
41
+ },
42
+ measurementRevision
43
+ });
44
+ return true;
45
+ }
46
+ prune(itemIds) {
47
+ const retained = new Set(itemIds);
48
+ for (const itemId of this.sizes.keys()) {
49
+ if (!retained.has(itemId)) this.sizes.delete(itemId);
50
+ }
51
+ }
52
+ clear() {
53
+ this.sizes.clear();
54
+ }
55
+ }
56
+ function invalid(code, message, itemId) {
57
+ return {
58
+ valid: false,
59
+ issues: [{
60
+ code,
61
+ message,
62
+ ...(itemId === undefined ? {} : {
63
+ itemId
64
+ })
65
+ }]
66
+ };
67
+ }
68
+
69
+ /** Compute content rects from one order snapshot without modifying the cache. */
70
+ export function computeListLayout(input) {
71
+ if (!isRecord(input) || !Array.isArray(input.itemIds)) {
72
+ return invalid('invalid-structure', 'List item IDs must be an array.');
73
+ }
74
+ if (input.orientation !== 'vertical' && input.orientation !== 'horizontal') {
75
+ return invalid('invalid-orientation', 'List orientation must be vertical or horizontal.');
76
+ }
77
+ if (!isRevision(input.revision)) {
78
+ return invalid('invalid-revision', 'Revision must be a nonnegative safe integer.');
79
+ }
80
+ if (!isNonnegative(input.crossSize) || !isNonnegative(input.estimatedItemSize) || !isNonnegative(input.gap ?? 0) || !isNonnegative(input.paddingStart ?? 0) || !isNonnegative(input.paddingEnd ?? 0) || !isRevision(input.measurementEpoch ?? 0) || input.itemSize !== undefined && typeof input.itemSize !== 'function' && !isNonnegative(input.itemSize) || input.cache !== undefined && !(input.cache instanceof ListSizeCache)) {
81
+ return invalid('invalid-configuration', 'List sizes, gap and padding must be finite and nonnegative; the cache and measurement epoch must be valid.');
82
+ }
83
+ const knownIds = new Set();
84
+ for (const itemId of input.itemIds) {
85
+ if (typeof itemId !== 'string') {
86
+ return invalid('invalid-structure', 'Every list item ID must be a string.');
87
+ }
88
+ if (knownIds.has(itemId)) {
89
+ return invalid('duplicate-reference', 'List item IDs must be unique.', itemId);
90
+ }
91
+ knownIds.add(itemId);
92
+ }
93
+ const context = {
94
+ orientation: input.orientation,
95
+ crossSize: input.crossSize,
96
+ epoch: input.measurementEpoch ?? 0
97
+ };
98
+ const entries = [];
99
+ let start = input.paddingStart ?? 0;
100
+ for (let index = 0; index < input.itemIds.length; index += 1) {
101
+ const itemId = input.itemIds[index];
102
+ const measured = input.cache?.get(itemId, context);
103
+ let declared;
104
+ try {
105
+ declared = typeof input.itemSize === 'function' ? input.itemSize(itemId, index) : input.itemSize;
106
+ } catch {
107
+ return invalid('invalid-configuration', 'The item size callback failed.', itemId);
108
+ }
109
+ if (input.itemSize !== undefined && !isNonnegative(declared)) {
110
+ return invalid('invalid-configuration', 'Every item size must be finite and nonnegative.', itemId);
111
+ }
112
+ const size = declared ?? measured ?? input.estimatedItemSize;
113
+ const source = measured === size ? 'measured' : 'estimated';
114
+ const rect = input.orientation === 'vertical' ? {
115
+ x: 0,
116
+ y: start,
117
+ width: input.crossSize,
118
+ height: size
119
+ } : {
120
+ x: start,
121
+ y: 0,
122
+ width: size,
123
+ height: input.crossSize
124
+ };
125
+ entries.push({
126
+ itemId,
127
+ index,
128
+ start,
129
+ size,
130
+ source,
131
+ rect,
132
+ revision: input.revision
133
+ });
134
+ start += size + (index < input.itemIds.length - 1 ? input.gap ?? 0 : 0);
135
+ if (!Number.isFinite(start)) {
136
+ return invalid('invalid-configuration', 'List content size must remain finite.');
137
+ }
138
+ }
139
+ const totalSize = start + (input.paddingEnd ?? 0);
140
+ if (!Number.isFinite(totalSize)) {
141
+ return invalid('invalid-configuration', 'List content size must remain finite.');
142
+ }
143
+ return {
144
+ valid: true,
145
+ orientation: input.orientation,
146
+ crossSize: input.crossSize,
147
+ revision: input.revision,
148
+ entries,
149
+ totalSize
150
+ };
151
+ }
152
+
153
+ /**
154
+ * Return an insertion index in the order AFTER removing the active item.
155
+ * Thresholds are the original non-active item centers, including the active
156
+ * footprint and all original gaps. Never measure a compressed preview here.
157
+ * An ID absent from the target list is allowed for cross-list insertion.
158
+ */
159
+ export function computeListIndex(layout, activeItemId, center) {
160
+ if (!Number.isFinite(center)) return null;
161
+ const activeIndex = layout.entries.findIndex(entry => entry.itemId === activeItemId);
162
+ let index = 0;
163
+ for (const entry of layout.entries) {
164
+ if (entry.itemId === activeItemId) continue;
165
+ const threshold = entry.start + entry.size / 2;
166
+ if (center > threshold || center === threshold && entry.index < activeIndex) {
167
+ index += 1;
168
+ }
169
+ }
170
+ return index;
171
+ }
172
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isRecord","isNonnegative","value","Number","isFinite","isRevision","isSafeInteger","isContext","context","orientation","crossSize","epoch","sameContext","a","b","ListSizeCache","sizes","Map","get","itemId","undefined","cached","size","set","measurementRevision","prune","itemIds","retained","Set","keys","has","delete","clear","invalid","code","message","valid","issues","computeListLayout","input","Array","isArray","revision","estimatedItemSize","gap","paddingStart","paddingEnd","measurementEpoch","itemSize","cache","knownIds","add","entries","start","index","length","measured","declared","source","rect","x","y","width","height","push","totalSize","computeListIndex","layout","activeItemId","center","activeIndex","findIndex","entry","threshold"],"sourceRoot":"../../../src","sources":["engine/list.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * A detached snapshot shared with UI worklets: rebuild it whenever the layout
5
+ * geometry changes. Numeric columns are typed arrays so each crosses runtimes
6
+ * as one buffer copy, and unchanged columns keep their identity so the runtime
7
+ * serialization cache can reuse them.
8
+ */
9
+
10
+ function compareBoundaries(a, b) {
11
+ if (a.threshold < b.threshold) return -1;
12
+ if (a.threshold > b.threshold) return 1;
13
+ if (a.entryIndex < b.entryIndex) return -1;
14
+ if (a.entryIndex > b.entryIndex) return 1;
15
+ return 0;
16
+ }
17
+ function sameSlots(slots, keys) {
18
+ return Object.keys(slots).length === keys.length && keys.every((key, slot) => slots[key] === slot);
19
+ }
20
+ function sameColumn(previous, next) {
21
+ if (previous.length !== next.length) return false;
22
+ for (let index = 0; index < next.length; index += 1) if (previous[index] !== next[index]) return false;
23
+ return true;
24
+ }
25
+
26
+ /**
27
+ * Prepare once on the JS thread, then share this plain data with UI worklets.
28
+ * Original centers retain the active item's footprint; only the returned
29
+ * insertion index excludes it. No references to the mutable layout are kept.
30
+ * Passing the previous index of the same zone reuses its unchanged columns.
31
+ */
32
+ export function createListTargetIndex(layout, previous) {
33
+ const boundaries = [];
34
+ const slotByKey = new Map();
35
+ const keys = [];
36
+ const positionList = [];
37
+ let ordered = true;
38
+ for (let position = 0; position < layout.entries.length; position += 1) {
39
+ const entry = layout.entries[position];
40
+ // Prefixing protects arbitrary item IDs such as "__proto__" on both runtimes.
41
+ const itemKey = `$${entry.itemId}`;
42
+ let slot = slotByKey.get(itemKey);
43
+ if (slot === undefined) {
44
+ slot = keys.length;
45
+ slotByKey.set(itemKey, slot);
46
+ keys.push(itemKey);
47
+ positionList.push(position);
48
+ }
49
+ const threshold = entry.start + entry.size / 2;
50
+ // NaN thresholds never pass the original comparison for any center.
51
+ if (Number.isNaN(threshold)) continue;
52
+ const boundary = {
53
+ threshold,
54
+ entryIndex: Number.isNaN(entry.index) ? Infinity : entry.index,
55
+ slot
56
+ };
57
+ const last = boundaries[boundaries.length - 1];
58
+ if (last && compareBoundaries(last, boundary) > 0) ordered = false;
59
+ boundaries.push(boundary);
60
+ }
61
+ // Layouts produced by computeListLayout are already ordered: O(n) preparation.
62
+ // Sorting also preserves the public scan's meaning for caller-edited layouts.
63
+ if (!ordered) boundaries.sort(compareBoundaries);
64
+ const thresholds = new Float64Array(boundaries.length);
65
+ const entryIndices = new Float64Array(boundaries.length);
66
+ const ranks = new Int32Array(keys.length).fill(-1);
67
+ let additionalRanks;
68
+ for (let rank = 0; rank < boundaries.length; rank += 1) {
69
+ const boundary = boundaries[rank];
70
+ thresholds[rank] = boundary.threshold;
71
+ entryIndices[rank] = boundary.entryIndex;
72
+ if (ranks[boundary.slot] < 0) ranks[boundary.slot] = rank;else ((additionalRanks ??= {})[keys[boundary.slot]] ??= []).push(rank);
73
+ }
74
+ const positions = Int32Array.from(positionList);
75
+ const reusable = previous?.revision === layout.revision ? previous : undefined;
76
+ return {
77
+ revision: layout.revision,
78
+ thresholds,
79
+ entryIndices: reusable && sameColumn(reusable.entryIndices, entryIndices) ? reusable.entryIndices : entryIndices,
80
+ slots: reusable && sameSlots(reusable.slots, keys) ? reusable.slots : Object.fromEntries(keys.map((key, slot) => [key, slot])),
81
+ positions: reusable && sameColumn(reusable.positions, positions) ? reusable.positions : positions,
82
+ ranks: reusable && sameColumn(reusable.ranks, ranks) ? reusable.ranks : ranks,
83
+ ...(additionalRanks ? {
84
+ additionalRanks
85
+ } : {})
86
+ };
87
+ }
88
+
89
+ /** Find an insertion index in O(log n), without allocation or layout scanning. */
90
+ export function findListTargetIndex(index, activeItemId, center) {
91
+ 'worklet';
92
+
93
+ if (!Number.isFinite(center)) return null;
94
+ const activeKey = activeItemId === null ? null : `$${activeItemId}`;
95
+ const slot = activeKey === null ? undefined : index.slots[activeKey];
96
+ const activePosition = slot === undefined ? -1 : index.positions[slot];
97
+ const activeRank = slot === undefined ? -1 : index.ranks[slot];
98
+ let low = 0;
99
+ let high = index.thresholds.length;
100
+ while (low < high) {
101
+ const middle = Math.floor((low + high) / 2);
102
+ const threshold = index.thresholds[middle];
103
+ if (center > threshold || center === threshold && index.entryIndices[middle] < activePosition) {
104
+ low = middle + 1;
105
+ } else {
106
+ high = middle;
107
+ }
108
+ }
109
+ let result = low;
110
+ if (activeRank >= 0 && activeRank < low) result -= 1;
111
+ // Valid layouts have unique IDs. Preserve scan semantics for caller-edited
112
+ // duplicate IDs too, without making the normal lookup linear.
113
+ const additionalRanks = activeKey === null ? undefined : index.additionalRanks?.[activeKey];
114
+ if (additionalRanks) {
115
+ let first = 0;
116
+ let last = additionalRanks.length;
117
+ while (first < last) {
118
+ const middle = Math.floor((first + last) / 2);
119
+ if (additionalRanks[middle] < low) first = middle + 1;else last = middle;
120
+ }
121
+ result -= first;
122
+ }
123
+ return result;
124
+ }
125
+ //# sourceMappingURL=listIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["compareBoundaries","a","b","threshold","entryIndex","sameSlots","slots","keys","Object","length","every","key","slot","sameColumn","previous","next","index","createListTargetIndex","layout","boundaries","slotByKey","Map","positionList","ordered","position","entries","entry","itemKey","itemId","get","undefined","set","push","start","size","Number","isNaN","boundary","Infinity","last","sort","thresholds","Float64Array","entryIndices","ranks","Int32Array","fill","additionalRanks","rank","positions","from","reusable","revision","fromEntries","map","findListTargetIndex","activeItemId","center","isFinite","activeKey","activePosition","activeRank","low","high","middle","Math","floor","result","first"],"sourceRoot":"../../../src","sources":["engine/listIndex.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,216 @@
1
+ "use strict";
2
+
3
+ import { diagnosticNow, emitDiagnostic } from "../diagnostics.js";
4
+ import { DEFAULT_SEARCH_BUDGET } from "../defaults.js";
5
+ import { hasSameLayout } from "./sameLayout.js";
6
+ import { validateGridMovementPolicy } from "./movementPolicy.js";
7
+ import { resolveSpatialMove } from "./spatial.js";
8
+ import { isCellPosition, isPositiveInteger, isRecord, validateValue } from "./validation.js";
9
+ function invalid(code, message, ids = {}) {
10
+ return {
11
+ status: 'invalid',
12
+ issues: [{
13
+ code,
14
+ message,
15
+ ...ids
16
+ }]
17
+ };
18
+ }
19
+
20
+ /**
21
+ * Compute one atomic candidate from the input snapshot. The engine remembers no
22
+ * earlier preview; the session decides whether that snapshot is the committed
23
+ * value or the latest same-zone preview. Drop permission, pointer geometry,
24
+ * sessions and animation belong to the controller.
25
+ */
26
+ export function computeMove(input, onDiagnostic) {
27
+ if (typeof onDiagnostic !== 'function') return calculateMove(input);
28
+ const timings = [];
29
+ const startedAt = diagnosticNow();
30
+ let result;
31
+ try {
32
+ result = calculateMove(input, timings);
33
+ return result;
34
+ } finally {
35
+ timings.push({
36
+ type: 'timing',
37
+ name: 'compute-move',
38
+ durationMs: diagnosticNow() - startedAt,
39
+ status: result?.status ?? 'error',
40
+ ...(result && 'attempts' in result ? {
41
+ attempts: result.attempts
42
+ } : {})
43
+ });
44
+ // Deliver after the calculation so observer cost is not part of its timing.
45
+ for (const event of timings) emitDiagnostic(onDiagnostic, event);
46
+ }
47
+ }
48
+ function timedValidation(value, name, timings) {
49
+ const startedAt = diagnosticNow();
50
+ const result = validateValue(value);
51
+ timings.push({
52
+ type: 'timing',
53
+ name,
54
+ durationMs: diagnosticNow() - startedAt,
55
+ status: result.valid ? 'valid' : 'invalid'
56
+ });
57
+ return result;
58
+ }
59
+ function calculateMove(input, timings) {
60
+ if (!isRecord(input)) return invalid('invalid-structure', 'Expected a move input object.');
61
+ const validation = timings ? timedValidation(input.value, 'input-validation', timings) : validateValue(input.value);
62
+ if (!validation.valid) return {
63
+ status: 'invalid',
64
+ issues: validation.issues
65
+ };
66
+ const policyValidation = validateGridMovementPolicy(input.movementPolicy);
67
+ if (!policyValidation.valid) return {
68
+ status: 'invalid',
69
+ issues: policyValidation.issues
70
+ };
71
+ const searchBudget = input.searchBudget === undefined ? DEFAULT_SEARCH_BUDGET : input.searchBudget;
72
+ if (!isPositiveInteger(searchBudget)) return invalid('invalid-budget', 'searchBudget must be a positive safe integer.');
73
+ if (typeof input.itemId !== 'string') return invalid('invalid-structure', 'itemId must be a string.');
74
+ const {
75
+ value,
76
+ itemId,
77
+ to
78
+ } = input;
79
+ if (!isRecord(to) || typeof to.zoneId !== 'string') return invalid('invalid-structure', 'A target zone is required.', {
80
+ itemId
81
+ });
82
+ const source = value.zones.find(zone => zone.items.some(item => item.id === itemId));
83
+ const target = value.zones.find(zone => zone.id === to.zoneId);
84
+ if (!source || !target) return invalid('invalid-structure', 'The item and target zone must exist.', {
85
+ itemId,
86
+ zoneId: to.zoneId
87
+ });
88
+ if (to.strategy !== target.strategy) return invalid('invalid-structure', 'Target strategy must match its zone.', {
89
+ itemId,
90
+ zoneId: target.id
91
+ });
92
+ const sourceIndex = source.items.findIndex(item => item.id === itemId);
93
+ const active = source.items[sourceIndex];
94
+ const from = source.strategy === 'ordered' ? {
95
+ zoneId: source.id,
96
+ strategy: 'ordered',
97
+ index: sourceIndex
98
+ } : {
99
+ zoneId: source.id,
100
+ strategy: 'spatial',
101
+ position: source.items[sourceIndex].position
102
+ };
103
+ const sameZone = source.id === target.id;
104
+ let nextTarget;
105
+ let resolvedTo = to;
106
+ let attempts = 0;
107
+ if (target.strategy === 'ordered' && to.strategy === 'ordered') {
108
+ const remaining = target.items.filter(item => item.id !== itemId);
109
+ if (!Number.isSafeInteger(to.index) || to.index < 0 || to.index > remaining.length) return invalid('invalid-position', 'Insertion index must address the array after removal.', {
110
+ itemId,
111
+ zoneId: target.id
112
+ });
113
+ const slotsPerRow = Math.floor(target.columns / target.itemSpan.cols);
114
+ const slotRows = Math.floor(target.rows / target.itemSpan.rows);
115
+ if (active.span.rows !== target.itemSpan.rows || active.span.cols !== target.itemSpan.cols || slotsPerRow === 0 || slotRows === 0 || Math.ceil((remaining.length + 1) / slotsPerRow) > slotRows) return {
116
+ status: 'impossible',
117
+ attempts
118
+ };
119
+ // Spatial position has no meaning in an ordered zone. Preserve opaque data by reference.
120
+ const inserted = {
121
+ id: active.id,
122
+ span: active.span,
123
+ ...(active.placement === undefined ? {} : {
124
+ placement: active.placement
125
+ }),
126
+ data: active.data
127
+ };
128
+ remaining.splice(to.index, 0, inserted);
129
+ nextTarget = {
130
+ ...target,
131
+ items: remaining
132
+ };
133
+ } else if (target.strategy === 'spatial' && to.strategy === 'spatial') {
134
+ if (!isCellPosition(to.position)) return invalid('invalid-position', 'A spatial target requires safe integer coordinates.', {
135
+ itemId,
136
+ zoneId: target.id
137
+ });
138
+ if (to.position.row < 0 || to.position.col < 0 || to.position.row > target.rows - active.span.rows || to.position.col > target.columns - active.span.cols) return {
139
+ status: 'impossible',
140
+ attempts
141
+ };
142
+ const moved = {
143
+ id: active.id,
144
+ span: active.span,
145
+ ...(active.placement === undefined ? {} : {
146
+ placement: active.placement
147
+ }),
148
+ data: active.data,
149
+ position: {
150
+ ...to.position
151
+ }
152
+ };
153
+ const result = resolveSpatialMove({
154
+ items: target.items.filter(item => item.id !== itemId),
155
+ active: moved,
156
+ origin: sameZone && source.strategy === 'spatial' ? source.items[sourceIndex] : undefined,
157
+ rows: target.rows,
158
+ columns: target.columns,
159
+ searchBudget,
160
+ movementPolicy: input.movementPolicy
161
+ });
162
+ if (result.status !== 'ok') return result;
163
+ attempts = result.attempts;
164
+ const placements = new Map(result.placements.map(item => [item.id, item]));
165
+ resolvedTo = {
166
+ zoneId: target.id,
167
+ strategy: 'spatial',
168
+ position: placements.get(itemId).position
169
+ };
170
+ const items = target.items.map(item => placements.get(item.id));
171
+ if (!sameZone) items.push(placements.get(itemId));
172
+ nextTarget = {
173
+ ...target,
174
+ items
175
+ };
176
+ } else {
177
+ return invalid('invalid-structure', 'Unsupported target strategy.', {
178
+ itemId
179
+ });
180
+ }
181
+ const zones = value.zones.map(zone => {
182
+ if (zone.id === target.id) return nextTarget;
183
+ if (zone.id !== source.id) return zone;
184
+ const remaining = {
185
+ ...zone
186
+ };
187
+ remaining.items = zone.items.filter(item => item.id !== itemId);
188
+ return remaining;
189
+ });
190
+ // Deliberately omit the previous proposalResponse from every candidate.
191
+ const nextValue = {
192
+ zones
193
+ };
194
+ const candidateValidation = timings ? timedValidation(nextValue, 'candidate-validation', timings) : validateValue(nextValue);
195
+ if (!candidateValidation.valid) return {
196
+ status: 'invalid',
197
+ issues: candidateValidation.issues
198
+ };
199
+ const changed = !hasSameLayout(value, nextValue);
200
+ if (value.revision !== undefined) {
201
+ if (changed && value.revision === Number.MAX_SAFE_INTEGER) return invalid('invalid-configuration', 'The layout revision cannot exceed a safe integer.');
202
+ nextValue.revision = value.revision + Number(changed);
203
+ }
204
+ return {
205
+ status: 'ok',
206
+ value: changed ? nextValue : {
207
+ ...nextValue,
208
+ zones: value.zones
209
+ },
210
+ from,
211
+ to: resolvedTo,
212
+ changed,
213
+ attempts
214
+ };
215
+ }
216
+ //# sourceMappingURL=move.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["diagnosticNow","emitDiagnostic","DEFAULT_SEARCH_BUDGET","hasSameLayout","validateGridMovementPolicy","resolveSpatialMove","isCellPosition","isPositiveInteger","isRecord","validateValue","invalid","code","message","ids","status","issues","computeMove","input","onDiagnostic","calculateMove","timings","startedAt","result","push","type","name","durationMs","attempts","event","timedValidation","value","valid","validation","policyValidation","movementPolicy","searchBudget","undefined","itemId","to","zoneId","source","zones","find","zone","items","some","item","id","target","strategy","sourceIndex","findIndex","active","from","index","position","sameZone","nextTarget","resolvedTo","remaining","filter","Number","isSafeInteger","length","slotsPerRow","Math","floor","columns","itemSpan","cols","slotRows","rows","span","ceil","inserted","placement","data","splice","row","col","moved","origin","placements","Map","map","get","nextValue","candidateValidation","changed","revision","MAX_SAFE_INTEGER"],"sourceRoot":"../../../src","sources":["engine/move.ts"],"mappings":"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","ignoreList":[]}