@helpdice/draggable 0.0.0-stage → 0.0.1

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 (472) hide show
  1. package/LICENSE +13 -0
  2. package/README.md +164 -2
  3. package/dist/draggable.cjs.js +9915 -0
  4. package/dist/draggable.cjs.js.map +1 -0
  5. package/dist/draggable.esm.js +9889 -0
  6. package/dist/draggable.esm.js.map +1 -0
  7. package/dist/types/animation.d.ts +31 -0
  8. package/dist/types/debug/middleware/action-timing-average.d.ts +3 -0
  9. package/dist/types/debug/middleware/action-timing.d.ts +3 -0
  10. package/dist/types/debug/middleware/log.d.ts +4 -0
  11. package/dist/types/debug/middleware/user-timing.d.ts +3 -0
  12. package/dist/types/debug/timings.d.ts +3 -0
  13. package/dist/types/dev-warning.d.ts +4 -0
  14. package/dist/types/empty.d.ts +2 -0
  15. package/dist/types/index.d.ts +8 -0
  16. package/dist/types/invariant.d.ts +4 -0
  17. package/dist/types/native-with-fallback.d.ts +10 -0
  18. package/dist/types/screen-reader-message-preset.d.ts +9 -0
  19. package/dist/types/state/action-creators.d.ts +158 -0
  20. package/dist/types/state/auto-scroller/auto-scroller-types.d.ts +6 -0
  21. package/dist/types/state/auto-scroller/can-scroll.d.ts +19 -0
  22. package/dist/types/state/auto-scroller/fluid-scroller/config.d.ts +11 -0
  23. package/dist/types/state/auto-scroller/fluid-scroller/did-start-in-scrollable-area.d.ts +0 -0
  24. package/dist/types/state/auto-scroller/fluid-scroller/get-best-scrollable-droppable.d.ts +9 -0
  25. package/dist/types/state/auto-scroller/fluid-scroller/get-droppable-scroll-change.d.ts +11 -0
  26. package/dist/types/state/auto-scroller/fluid-scroller/get-percentage.d.ts +7 -0
  27. package/dist/types/state/auto-scroller/fluid-scroller/get-scroll/adjust-for-size-limits.d.ts +8 -0
  28. package/dist/types/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/dampen-value-by-time.d.ts +2 -0
  29. package/dist/types/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/get-distance-thresholds.d.ts +8 -0
  30. package/dist/types/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/get-value-from-distance.d.ts +3 -0
  31. package/dist/types/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/get-value.d.ts +9 -0
  32. package/dist/types/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/index.d.ts +11 -0
  33. package/dist/types/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/min-scroll.d.ts +2 -0
  34. package/dist/types/state/auto-scroller/fluid-scroller/get-scroll/index.d.ts +10 -0
  35. package/dist/types/state/auto-scroller/fluid-scroller/get-window-scroll-change.d.ts +11 -0
  36. package/dist/types/state/auto-scroller/fluid-scroller/index.d.ts +13 -0
  37. package/dist/types/state/auto-scroller/fluid-scroller/scroll.d.ts +11 -0
  38. package/dist/types/state/auto-scroller/index.d.ts +11 -0
  39. package/dist/types/state/auto-scroller/jump-scroller.d.ts +11 -0
  40. package/dist/types/state/axis.d.ts +3 -0
  41. package/dist/types/state/calculate-drag-impact/calculate-reorder-impact.d.ts +13 -0
  42. package/dist/types/state/can-start-drag.d.ts +3 -0
  43. package/dist/types/state/create-store.d.ts +16 -0
  44. package/dist/types/state/did-start-after-critical.d.ts +2 -0
  45. package/dist/types/state/dimension-marshal/dimension-marshal-types.d.ts +23 -0
  46. package/dist/types/state/dimension-marshal/dimension-marshal.d.ts +4 -0
  47. package/dist/types/state/dimension-marshal/get-initial-publish.d.ts +10 -0
  48. package/dist/types/state/dimension-marshal/while-dragging-publisher.d.ts +17 -0
  49. package/dist/types/state/dimension-structures.d.ts +5 -0
  50. package/dist/types/state/droppable/get-droppable.d.ts +21 -0
  51. package/dist/types/state/droppable/is-home-of.d.ts +3 -0
  52. package/dist/types/state/droppable/scroll-droppable.d.ts +4 -0
  53. package/dist/types/state/droppable/should-use-placeholder.d.ts +3 -0
  54. package/dist/types/state/droppable/util/clip.d.ts +3 -0
  55. package/dist/types/state/droppable/util/get-subject.d.ts +10 -0
  56. package/dist/types/state/droppable/what-is-dragged-over-from-result.d.ts +3 -0
  57. package/dist/types/state/droppable/what-is-dragged-over.d.ts +3 -0
  58. package/dist/types/state/droppable/with-placeholder.d.ts +3 -0
  59. package/dist/types/state/get-center-from-impact/get-client-border-box-center/get-client-from-page-border-box-center.d.ts +9 -0
  60. package/dist/types/state/get-center-from-impact/get-client-border-box-center/index.d.ts +12 -0
  61. package/dist/types/state/get-center-from-impact/get-page-border-box-center/index.d.ts +11 -0
  62. package/dist/types/state/get-center-from-impact/get-page-border-box-center/when-combining.d.ts +9 -0
  63. package/dist/types/state/get-center-from-impact/get-page-border-box-center/when-reordering.d.ts +11 -0
  64. package/dist/types/state/get-center-from-impact/move-relative-to.d.ts +16 -0
  65. package/dist/types/state/get-combined-item-displacement.d.ts +10 -0
  66. package/dist/types/state/get-displaced-by.d.ts +4 -0
  67. package/dist/types/state/get-displacement-groups.d.ts +12 -0
  68. package/dist/types/state/get-drag-impact/get-combine-impact.d.ts +13 -0
  69. package/dist/types/state/get-drag-impact/get-reorder-impact.d.ts +13 -0
  70. package/dist/types/state/get-drag-impact/index.d.ts +13 -0
  71. package/dist/types/state/get-draggables-inside-droppable.d.ts +3 -0
  72. package/dist/types/state/get-droppable-over.d.ts +9 -0
  73. package/dist/types/state/get-frame.d.ts +3 -0
  74. package/dist/types/state/get-home-location.d.ts +3 -0
  75. package/dist/types/state/get-impact-location.d.ts +3 -0
  76. package/dist/types/state/get-is-displaced.d.ts +7 -0
  77. package/dist/types/state/get-lift-effect.d.ts +13 -0
  78. package/dist/types/state/get-max-scroll.d.ts +9 -0
  79. package/dist/types/state/is-movement-allowed.d.ts +2 -0
  80. package/dist/types/state/is-within.d.ts +2 -0
  81. package/dist/types/state/middleware/auto-scroll.d.ts +4 -0
  82. package/dist/types/state/middleware/dimension-marshal-stopper.d.ts +4 -0
  83. package/dist/types/state/middleware/drop/drop-animation-finish-middleware.d.ts +3 -0
  84. package/dist/types/state/middleware/drop/drop-animation-flush-on-scroll-middleware.d.ts +3 -0
  85. package/dist/types/state/middleware/drop/drop-middleware.d.ts +3 -0
  86. package/dist/types/state/middleware/drop/get-drop-duration.d.ts +9 -0
  87. package/dist/types/state/middleware/drop/get-drop-impact.d.ts +16 -0
  88. package/dist/types/state/middleware/drop/get-new-home-client-offset.d.ts +11 -0
  89. package/dist/types/state/middleware/drop/index.d.ts +1 -0
  90. package/dist/types/state/middleware/focus.d.ts +4 -0
  91. package/dist/types/state/middleware/lift.d.ts +4 -0
  92. package/dist/types/state/middleware/pending-drop.d.ts +3 -0
  93. package/dist/types/state/middleware/responders/async-marshal.d.ts +9 -0
  94. package/dist/types/state/middleware/responders/expiring-announce.d.ts +6 -0
  95. package/dist/types/state/middleware/responders/index.d.ts +1 -0
  96. package/dist/types/state/middleware/responders/is-equal.d.ts +4 -0
  97. package/dist/types/state/middleware/responders/publisher.d.ts +17 -0
  98. package/dist/types/state/middleware/responders/responders-middleware.d.ts +4 -0
  99. package/dist/types/state/middleware/scroll-listener.d.ts +3 -0
  100. package/dist/types/state/middleware/style.d.ts +4 -0
  101. package/dist/types/state/middleware/util/validate-dimensions.d.ts +2 -0
  102. package/dist/types/state/move-in-direction/index.d.ts +8 -0
  103. package/dist/types/state/move-in-direction/move-cross-axis/get-best-cross-axis-droppable.d.ts +11 -0
  104. package/dist/types/state/move-in-direction/move-cross-axis/get-closest-draggable.d.ts +11 -0
  105. package/dist/types/state/move-in-direction/move-cross-axis/index.d.ts +15 -0
  106. package/dist/types/state/move-in-direction/move-cross-axis/move-to-new-droppable.d.ts +14 -0
  107. package/dist/types/state/move-in-direction/move-cross-axis/without-starting-displacement.d.ts +4 -0
  108. package/dist/types/state/move-in-direction/move-in-direction-types.d.ts +7 -0
  109. package/dist/types/state/move-in-direction/move-to-next-place/index.d.ts +16 -0
  110. package/dist/types/state/move-in-direction/move-to-next-place/is-totally-visible-in-new-location.d.ts +12 -0
  111. package/dist/types/state/move-in-direction/move-to-next-place/move-to-next-combine/index.d.ts +10 -0
  112. package/dist/types/state/move-in-direction/move-to-next-place/move-to-next-index/from-combine.d.ts +11 -0
  113. package/dist/types/state/move-in-direction/move-to-next-place/move-to-next-index/from-reorder.d.ts +9 -0
  114. package/dist/types/state/move-in-direction/move-to-next-place/move-to-next-index/index.d.ts +14 -0
  115. package/dist/types/state/no-impact.d.ts +6 -0
  116. package/dist/types/state/patch-dimension-map.d.ts +3 -0
  117. package/dist/types/state/patch-droppable-map.d.ts +3 -0
  118. package/dist/types/state/position.d.ts +10 -0
  119. package/dist/types/state/post-reducer/when-moving/refresh-snap.d.ts +8 -0
  120. package/dist/types/state/post-reducer/when-moving/update.d.ts +12 -0
  121. package/dist/types/state/publish-while-dragging-in-virtual/adjust-additions-for-scroll-changes.d.ts +8 -0
  122. package/dist/types/state/publish-while-dragging-in-virtual/index.d.ts +7 -0
  123. package/dist/types/state/publish-while-dragging-in-virtual/offset-draggable.d.ts +9 -0
  124. package/dist/types/state/recompute-placeholders.d.ts +10 -0
  125. package/dist/types/state/rect.d.ts +2 -0
  126. package/dist/types/state/reducer.d.ts +5 -0
  127. package/dist/types/state/registry/create-registry.d.ts +2 -0
  128. package/dist/types/state/registry/registry-types.d.ts +62 -0
  129. package/dist/types/state/registry/use-registry.d.ts +2 -0
  130. package/dist/types/state/remove-draggable-from-list.d.ts +3 -0
  131. package/dist/types/state/scroll-viewport.d.ts +4 -0
  132. package/dist/types/state/spacing.d.ts +6 -0
  133. package/dist/types/state/store-types.d.ts +10 -0
  134. package/dist/types/state/update-displacement-visibility/recompute.d.ts +10 -0
  135. package/dist/types/state/update-displacement-visibility/speculatively-increase.d.ts +11 -0
  136. package/dist/types/state/visibility/is-partially-visible-through-frame.d.ts +3 -0
  137. package/dist/types/state/visibility/is-position-in-frame.d.ts +2 -0
  138. package/dist/types/state/visibility/is-totally-visible-through-frame-on-axis.d.ts +4 -0
  139. package/dist/types/state/visibility/is-totally-visible-through-frame.d.ts +3 -0
  140. package/dist/types/state/visibility/is-visible.d.ts +13 -0
  141. package/dist/types/state/with-scroll-change/with-all-displacement.d.ts +4 -0
  142. package/dist/types/state/with-scroll-change/with-droppable-displacement.d.ts +4 -0
  143. package/dist/types/state/with-scroll-change/with-droppable-scroll.d.ts +4 -0
  144. package/dist/types/state/with-scroll-change/with-viewport-displacement.d.ts +4 -0
  145. package/dist/types/types.d.ts +323 -0
  146. package/dist/types/view/animate-in-out/animate-in-out.d.ts +24 -0
  147. package/dist/types/view/animate-in-out/index.d.ts +1 -0
  148. package/dist/types/view/check-is-valid-inner-ref.d.ts +1 -0
  149. package/dist/types/view/context/app-context.d.ts +16 -0
  150. package/dist/types/view/context/droppable-context.d.ts +9 -0
  151. package/dist/types/view/context/hooks.d.ts +3 -0
  152. package/dist/types/view/context/store-context.d.ts +4 -0
  153. package/dist/types/view/data-attributes.d.ts +22 -0
  154. package/dist/types/view/drag-drop-context/app.d.ts +13 -0
  155. package/dist/types/view/drag-drop-context/check-doctype.d.ts +2 -0
  156. package/dist/types/view/drag-drop-context/check-react-version.d.ts +2 -0
  157. package/dist/types/view/drag-drop-context/drag-drop-context-types.d.ts +5 -0
  158. package/dist/types/view/drag-drop-context/drag-drop-context.d.ts +12 -0
  159. package/dist/types/view/drag-drop-context/error-boundary.d.ts +20 -0
  160. package/dist/types/view/drag-drop-context/index.d.ts +1 -0
  161. package/dist/types/view/drag-drop-context/use-startup-validation.d.ts +1 -0
  162. package/dist/types/view/drag-drop-context/use-unique-context-id.d.ts +3 -0
  163. package/dist/types/view/draggable/connected-draggable.d.ts +5 -0
  164. package/dist/types/view/draggable/draggable-api.d.ts +3 -0
  165. package/dist/types/view/draggable/draggable-types.d.ts +106 -0
  166. package/dist/types/view/draggable/draggable.d.ts +2 -0
  167. package/dist/types/view/draggable/get-style.d.ts +3 -0
  168. package/dist/types/view/draggable/index.d.ts +1 -0
  169. package/dist/types/view/draggable/use-validation.d.ts +4 -0
  170. package/dist/types/view/droppable/connected-droppable.d.ts +7 -0
  171. package/dist/types/view/droppable/droppable-types.d.ts +50 -0
  172. package/dist/types/view/droppable/droppable.d.ts +2 -0
  173. package/dist/types/view/droppable/index.d.ts +1 -0
  174. package/dist/types/view/droppable/use-validation.d.ts +8 -0
  175. package/dist/types/view/event-bindings/bind-events.d.ts +2 -0
  176. package/dist/types/view/event-bindings/event-types.d.ts +10 -0
  177. package/dist/types/view/get-body-element.d.ts +2 -0
  178. package/dist/types/view/get-border-box-center-position.d.ts +3 -0
  179. package/dist/types/view/get-document-element.d.ts +2 -0
  180. package/dist/types/view/get-elements/find-drag-handle.d.ts +2 -0
  181. package/dist/types/view/get-elements/find-draggable.d.ts +2 -0
  182. package/dist/types/view/is-strict-equal.d.ts +2 -0
  183. package/dist/types/view/is-type-of-element/is-element.d.ts +1 -0
  184. package/dist/types/view/is-type-of-element/is-html-element.d.ts +1 -0
  185. package/dist/types/view/is-type-of-element/is-svg-element.d.ts +1 -0
  186. package/dist/types/view/key-codes.d.ts +12 -0
  187. package/dist/types/view/placeholder/index.d.ts +1 -0
  188. package/dist/types/view/placeholder/placeholder-types.d.ts +14 -0
  189. package/dist/types/view/placeholder/placeholder.d.ts +28 -0
  190. package/dist/types/view/scroll-listener.d.ts +12 -0
  191. package/dist/types/view/throw-if-invalid-inner-ref.d.ts +2 -0
  192. package/dist/types/view/use-announcer/index.d.ts +1 -0
  193. package/dist/types/view/use-announcer/use-announcer.d.ts +3 -0
  194. package/dist/types/view/use-dev-setup-warning.d.ts +1 -0
  195. package/dist/types/view/use-dev.d.ts +1 -0
  196. package/dist/types/view/use-draggable-publisher/get-dimension.d.ts +3 -0
  197. package/dist/types/view/use-draggable-publisher/index.d.ts +1 -0
  198. package/dist/types/view/use-draggable-publisher/use-draggable-publisher.d.ts +8 -0
  199. package/dist/types/view/use-droppable-publisher/check-for-nested-scroll-container.d.ts +2 -0
  200. package/dist/types/view/use-droppable-publisher/get-closest-scrollable.d.ts +2 -0
  201. package/dist/types/view/use-droppable-publisher/get-dimension.d.ts +15 -0
  202. package/dist/types/view/use-droppable-publisher/get-env.d.ts +6 -0
  203. package/dist/types/view/use-droppable-publisher/get-listener-options.d.ts +5 -0
  204. package/dist/types/view/use-droppable-publisher/get-scroll.d.ts +3 -0
  205. package/dist/types/view/use-droppable-publisher/index.d.ts +1 -0
  206. package/dist/types/view/use-droppable-publisher/is-in-fixed-container.d.ts +2 -0
  207. package/dist/types/view/use-droppable-publisher/use-droppable-publisher.d.ts +13 -0
  208. package/dist/types/view/use-focus-marshal/focus-marshal-types.d.ts +9 -0
  209. package/dist/types/view/use-focus-marshal/index.d.ts +1 -0
  210. package/dist/types/view/use-focus-marshal/use-focus-marshal.d.ts +3 -0
  211. package/dist/types/view/use-hidden-text-element/index.d.ts +1 -0
  212. package/dist/types/view/use-hidden-text-element/use-hidden-text-element.d.ts +12 -0
  213. package/dist/types/view/use-isomorphic-layout-effect.d.ts +3 -0
  214. package/dist/types/view/use-previous-ref.d.ts +1 -0
  215. package/dist/types/view/use-required-context.d.ts +2 -0
  216. package/dist/types/view/use-sensor-marshal/closest.d.ts +1 -0
  217. package/dist/types/view/use-sensor-marshal/find-closest-draggable-id-from-event.d.ts +2 -0
  218. package/dist/types/view/use-sensor-marshal/index.d.ts +4 -0
  219. package/dist/types/view/use-sensor-marshal/is-event-in-interactive-element.d.ts +5 -0
  220. package/dist/types/view/use-sensor-marshal/lock.d.ts +11 -0
  221. package/dist/types/view/use-sensor-marshal/sensors/use-keyboard-sensor.d.ts +2 -0
  222. package/dist/types/view/use-sensor-marshal/sensors/use-mouse-sensor.d.ts +4 -0
  223. package/dist/types/view/use-sensor-marshal/sensors/use-touch-sensor.d.ts +4 -0
  224. package/dist/types/view/use-sensor-marshal/sensors/util/prevent-standard-key-events.d.ts +2 -0
  225. package/dist/types/view/use-sensor-marshal/sensors/util/supported-page-visibility-event-name.d.ts +2 -0
  226. package/dist/types/view/use-sensor-marshal/use-sensor-marshal.d.ts +12 -0
  227. package/dist/types/view/use-sensor-marshal/use-validate-sensor-hooks.d.ts +2 -0
  228. package/dist/types/view/use-style-marshal/get-styles.d.ts +10 -0
  229. package/dist/types/view/use-style-marshal/index.d.ts +1 -0
  230. package/dist/types/view/use-style-marshal/style-marshal-types.d.ts +6 -0
  231. package/dist/types/view/use-style-marshal/use-style-marshal.d.ts +3 -0
  232. package/dist/types/view/use-unique-id.d.ts +7 -0
  233. package/dist/types/view/visually-hidden-style.d.ts +2 -0
  234. package/dist/types/view/window/get-max-window-scroll.d.ts +3 -0
  235. package/dist/types/view/window/get-viewport.d.ts +3 -0
  236. package/dist/types/view/window/get-window-from-el.d.ts +2 -0
  237. package/dist/types/view/window/get-window-scroll.d.ts +3 -0
  238. package/dist/types/view/window/scroll-window.d.ts +3 -0
  239. package/package.json +157 -4
  240. package/src/animation.ts +75 -0
  241. package/src/debug/middleware/action-timing-average.ts +52 -0
  242. package/src/debug/middleware/action-timing.ts +16 -0
  243. package/src/debug/middleware/log.ts +26 -0
  244. package/src/debug/middleware/user-timing.ts +16 -0
  245. package/src/debug/timings.ts +87 -0
  246. package/src/dev-warning.ts +50 -0
  247. package/src/empty.ts +6 -0
  248. package/src/index.ts +67 -0
  249. package/src/invariant.ts +64 -0
  250. package/src/native-with-fallback.ts +69 -0
  251. package/src/screen-reader-message-preset.ts +135 -0
  252. package/src/state/action-creators.ts +358 -0
  253. package/src/state/auto-scroller/auto-scroller-types.ts +8 -0
  254. package/src/state/auto-scroller/can-scroll.ts +320 -0
  255. package/src/state/auto-scroller/fluid-scroller/config.ts +25 -0
  256. package/src/state/auto-scroller/fluid-scroller/did-start-in-scrollable-area.ts +1 -0
  257. package/src/state/auto-scroller/fluid-scroller/get-best-scrollable-droppable.ts +77 -0
  258. package/src/state/auto-scroller/fluid-scroller/get-droppable-scroll-change.ts +39 -0
  259. package/src/state/auto-scroller/fluid-scroller/get-percentage.ts +25 -0
  260. package/src/state/auto-scroller/fluid-scroller/get-scroll/adjust-for-size-limits.ts +30 -0
  261. package/src/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/dampen-value-by-time.ts +37 -0
  262. package/src/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/get-distance-thresholds.ts +25 -0
  263. package/src/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/get-value-from-distance.ts +61 -0
  264. package/src/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/get-value.ts +39 -0
  265. package/src/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/index.ts +46 -0
  266. package/src/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/min-scroll.ts +4 -0
  267. package/src/state/auto-scroller/fluid-scroller/get-scroll/index.ts +76 -0
  268. package/src/state/auto-scroller/fluid-scroller/get-window-scroll-change.ts +31 -0
  269. package/src/state/auto-scroller/fluid-scroller/index.ts +91 -0
  270. package/src/state/auto-scroller/fluid-scroller/scroll.ts +72 -0
  271. package/src/state/auto-scroller/index.ts +56 -0
  272. package/src/state/auto-scroller/jump-scroller.ts +140 -0
  273. package/src/state/axis.ts +26 -0
  274. package/src/state/calculate-drag-impact/calculate-reorder-impact.ts +138 -0
  275. package/src/state/can-start-drag.ts +29 -0
  276. package/src/state/create-store.ts +98 -0
  277. package/src/state/did-start-after-critical.ts +9 -0
  278. package/src/state/dimension-marshal/dimension-marshal-types.ts +49 -0
  279. package/src/state/dimension-marshal/dimension-marshal.ts +219 -0
  280. package/src/state/dimension-marshal/get-initial-publish.ts +66 -0
  281. package/src/state/dimension-marshal/while-dragging-publisher.ts +146 -0
  282. package/src/state/dimension-structures.ts +35 -0
  283. package/src/state/droppable/get-droppable.ts +103 -0
  284. package/src/state/droppable/is-home-of.ts +7 -0
  285. package/src/state/droppable/scroll-droppable.ts +53 -0
  286. package/src/state/droppable/should-use-placeholder.ts +7 -0
  287. package/src/state/droppable/util/clip.ts +17 -0
  288. package/src/state/droppable/util/get-subject.ts +63 -0
  289. package/src/state/droppable/what-is-dragged-over-from-result.ts +16 -0
  290. package/src/state/droppable/what-is-dragged-over.ts +16 -0
  291. package/src/state/droppable/with-placeholder.ts +174 -0
  292. package/src/state/get-center-from-impact/get-client-border-box-center/get-client-from-page-border-box-center.ts +30 -0
  293. package/src/state/get-center-from-impact/get-client-border-box-center/index.ts +45 -0
  294. package/src/state/get-center-from-impact/get-page-border-box-center/index.ts +71 -0
  295. package/src/state/get-center-from-impact/get-page-border-box-center/when-combining.ts +40 -0
  296. package/src/state/get-center-from-impact/get-page-border-box-center/when-reordering.ts +113 -0
  297. package/src/state/get-center-from-impact/move-relative-to.ts +68 -0
  298. package/src/state/get-combined-item-displacement.ts +35 -0
  299. package/src/state/get-displaced-by.ts +17 -0
  300. package/src/state/get-displacement-groups.ts +131 -0
  301. package/src/state/get-drag-impact/get-combine-impact.ts +131 -0
  302. package/src/state/get-drag-impact/get-reorder-impact.ts +145 -0
  303. package/src/state/get-drag-impact/index.ts +94 -0
  304. package/src/state/get-draggables-inside-droppable.ts +31 -0
  305. package/src/state/get-droppable-over.ts +161 -0
  306. package/src/state/get-frame.ts +10 -0
  307. package/src/state/get-home-location.ts +7 -0
  308. package/src/state/get-impact-location.ts +16 -0
  309. package/src/state/get-is-displaced.ts +12 -0
  310. package/src/state/get-lift-effect.ts +84 -0
  311. package/src/state/get-max-scroll.ts +32 -0
  312. package/src/state/is-movement-allowed.ts +13 -0
  313. package/src/state/is-within.ts +9 -0
  314. package/src/state/middleware/auto-scroll.ts +38 -0
  315. package/src/state/middleware/dimension-marshal-stopper.ts +20 -0
  316. package/src/state/middleware/drop/drop-animation-finish-middleware.ts +21 -0
  317. package/src/state/middleware/drop/drop-animation-flush-on-scroll-middleware.ts +63 -0
  318. package/src/state/middleware/drop/drop-middleware.ts +146 -0
  319. package/src/state/middleware/drop/get-drop-duration.ts +48 -0
  320. package/src/state/middleware/drop/get-drop-impact.ts +79 -0
  321. package/src/state/middleware/drop/get-new-home-client-offset.ts +55 -0
  322. package/src/state/middleware/drop/index.ts +2 -0
  323. package/src/state/middleware/focus.ts +42 -0
  324. package/src/state/middleware/lift.ts +66 -0
  325. package/src/state/middleware/pending-drop.ts +37 -0
  326. package/src/state/middleware/responders/async-marshal.ts +58 -0
  327. package/src/state/middleware/responders/expiring-announce.ts +44 -0
  328. package/src/state/middleware/responders/index.ts +2 -0
  329. package/src/state/middleware/responders/is-equal.ts +57 -0
  330. package/src/state/middleware/responders/publisher.ts +255 -0
  331. package/src/state/middleware/responders/responders-middleware.ts +81 -0
  332. package/src/state/middleware/scroll-listener.ts +31 -0
  333. package/src/state/middleware/style.ts +22 -0
  334. package/src/state/middleware/util/validate-dimensions.ts +71 -0
  335. package/src/state/move-in-direction/index.ts +85 -0
  336. package/src/state/move-in-direction/move-cross-axis/get-best-cross-axis-droppable.ts +169 -0
  337. package/src/state/move-in-direction/move-cross-axis/get-closest-draggable.ts +80 -0
  338. package/src/state/move-in-direction/move-cross-axis/index.ts +110 -0
  339. package/src/state/move-in-direction/move-cross-axis/move-to-new-droppable.ts +122 -0
  340. package/src/state/move-in-direction/move-cross-axis/without-starting-displacement.ts +31 -0
  341. package/src/state/move-in-direction/move-in-direction-types.ts +10 -0
  342. package/src/state/move-in-direction/move-to-next-place/index.ts +133 -0
  343. package/src/state/move-in-direction/move-to-next-place/is-totally-visible-in-new-location.ts +53 -0
  344. package/src/state/move-in-direction/move-to-next-place/move-to-next-combine/index.ts +98 -0
  345. package/src/state/move-in-direction/move-to-next-place/move-to-next-index/from-combine.ts +53 -0
  346. package/src/state/move-in-direction/move-to-next-place/move-to-next-index/from-reorder.ts +44 -0
  347. package/src/state/move-in-direction/move-to-next-place/move-to-next-index/index.ts +87 -0
  348. package/src/state/no-impact.ts +33 -0
  349. package/src/state/patch-dimension-map.ts +11 -0
  350. package/src/state/patch-droppable-map.ts +10 -0
  351. package/src/state/position.ts +65 -0
  352. package/src/state/post-reducer/when-moving/refresh-snap.ts +68 -0
  353. package/src/state/post-reducer/when-moving/update.ts +121 -0
  354. package/src/state/publish-while-dragging-in-virtual/adjust-additions-for-scroll-changes.ts +59 -0
  355. package/src/state/publish-while-dragging-in-virtual/index.ts +159 -0
  356. package/src/state/publish-while-dragging-in-virtual/offset-draggable.ts +36 -0
  357. package/src/state/recompute-placeholders.ts +101 -0
  358. package/src/state/rect.ts +7 -0
  359. package/src/state/reducer.ts +467 -0
  360. package/src/state/registry/create-registry.ts +162 -0
  361. package/src/state/registry/registry-types.ts +106 -0
  362. package/src/state/registry/use-registry.ts +20 -0
  363. package/src/state/remove-draggable-from-list.ts +13 -0
  364. package/src/state/scroll-viewport.ts +34 -0
  365. package/src/state/spacing.ts +45 -0
  366. package/src/state/store-types.ts +19 -0
  367. package/src/state/update-displacement-visibility/recompute.ts +55 -0
  368. package/src/state/update-displacement-visibility/speculatively-increase.ts +112 -0
  369. package/src/state/visibility/is-partially-visible-through-frame.ts +60 -0
  370. package/src/state/visibility/is-position-in-frame.ts +12 -0
  371. package/src/state/visibility/is-totally-visible-through-frame-on-axis.ts +19 -0
  372. package/src/state/visibility/is-totally-visible-through-frame.ts +18 -0
  373. package/src/state/visibility/is-visible.ts +102 -0
  374. package/src/state/with-scroll-change/with-all-displacement.ts +15 -0
  375. package/src/state/with-scroll-change/with-droppable-displacement.ts +13 -0
  376. package/src/state/with-scroll-change/with-droppable-scroll.ts +13 -0
  377. package/src/state/with-scroll-change/with-viewport-displacement.ts +7 -0
  378. package/src/types/redux-devtools.d.ts +17 -0
  379. package/src/types.ts +495 -0
  380. package/src/view/animate-in-out/animate-in-out.tsx +98 -0
  381. package/src/view/animate-in-out/index.ts +2 -0
  382. package/src/view/check-is-valid-inner-ref.ts +15 -0
  383. package/src/view/context/app-context.ts +19 -0
  384. package/src/view/context/droppable-context.ts +12 -0
  385. package/src/view/context/hooks.ts +21 -0
  386. package/src/view/context/store-context.ts +8 -0
  387. package/src/view/data-attributes.ts +37 -0
  388. package/src/view/drag-drop-context/app.tsx +300 -0
  389. package/src/view/drag-drop-context/check-doctype.ts +39 -0
  390. package/src/view/drag-drop-context/check-react-version.ts +72 -0
  391. package/src/view/drag-drop-context/drag-drop-context-types.ts +8 -0
  392. package/src/view/drag-drop-context/drag-drop-context.tsx +60 -0
  393. package/src/view/drag-drop-context/error-boundary.tsx +89 -0
  394. package/src/view/drag-drop-context/index.ts +2 -0
  395. package/src/view/drag-drop-context/use-startup-validation.ts +13 -0
  396. package/src/view/drag-drop-context/use-unique-context-id.ts +13 -0
  397. package/src/view/draggable/connected-draggable.tsx +420 -0
  398. package/src/view/draggable/draggable-api.tsx +48 -0
  399. package/src/view/draggable/draggable-types.ts +204 -0
  400. package/src/view/draggable/draggable.tsx +167 -0
  401. package/src/view/draggable/get-style.ts +109 -0
  402. package/src/view/draggable/index.ts +2 -0
  403. package/src/view/draggable/use-validation.ts +70 -0
  404. package/src/view/droppable/connected-droppable.tsx +597 -0
  405. package/src/view/droppable/droppable-types.ts +96 -0
  406. package/src/view/droppable/droppable.tsx +167 -0
  407. package/src/view/droppable/index.ts +2 -0
  408. package/src/view/droppable/use-validation.ts +102 -0
  409. package/src/view/event-bindings/bind-events.ts +39 -0
  410. package/src/view/event-bindings/event-types.ts +15 -0
  411. package/src/view/get-body-element.ts +8 -0
  412. package/src/view/get-border-box-center-position.ts +5 -0
  413. package/src/view/get-document-element.ts +8 -0
  414. package/src/view/get-elements/find-drag-handle.ts +38 -0
  415. package/src/view/get-elements/find-draggable.ts +30 -0
  416. package/src/view/is-strict-equal.ts +2 -0
  417. package/src/view/is-type-of-element/is-element.ts +10 -0
  418. package/src/view/is-type-of-element/is-html-element.ts +10 -0
  419. package/src/view/is-type-of-element/is-svg-element.ts +22 -0
  420. package/src/view/key-codes.ts +13 -0
  421. package/src/view/placeholder/index.ts +2 -0
  422. package/src/view/placeholder/placeholder-types.ts +16 -0
  423. package/src/view/placeholder/placeholder.tsx +204 -0
  424. package/src/view/scroll-listener.ts +74 -0
  425. package/src/view/throw-if-invalid-inner-ref.ts +15 -0
  426. package/src/view/use-announcer/index.ts +2 -0
  427. package/src/view/use-announcer/use-announcer.ts +80 -0
  428. package/src/view/use-dev-setup-warning.ts +22 -0
  429. package/src/view/use-dev.ts +9 -0
  430. package/src/view/use-draggable-publisher/get-dimension.ts +44 -0
  431. package/src/view/use-draggable-publisher/index.ts +2 -0
  432. package/src/view/use-draggable-publisher/use-draggable-publisher.ts +87 -0
  433. package/src/view/use-droppable-publisher/check-for-nested-scroll-container.ts +27 -0
  434. package/src/view/use-droppable-publisher/get-closest-scrollable.ts +96 -0
  435. package/src/view/use-droppable-publisher/get-dimension.ts +140 -0
  436. package/src/view/use-droppable-publisher/get-env.ts +32 -0
  437. package/src/view/use-droppable-publisher/get-listener-options.ts +12 -0
  438. package/src/view/use-droppable-publisher/get-scroll.ts +7 -0
  439. package/src/view/use-droppable-publisher/index.ts +2 -0
  440. package/src/view/use-droppable-publisher/is-in-fixed-container.ts +21 -0
  441. package/src/view/use-droppable-publisher/use-droppable-publisher.ts +288 -0
  442. package/src/view/use-focus-marshal/focus-marshal-types.ts +14 -0
  443. package/src/view/use-focus-marshal/index.ts +2 -0
  444. package/src/view/use-focus-marshal/use-focus-marshal.ts +128 -0
  445. package/src/view/use-hidden-text-element/index.ts +2 -0
  446. package/src/view/use-hidden-text-element/use-hidden-text-element.ts +62 -0
  447. package/src/view/use-isomorphic-layout-effect.ts +18 -0
  448. package/src/view/use-previous-ref.ts +26 -0
  449. package/src/view/use-required-context.ts +22 -0
  450. package/src/view/use-sensor-marshal/closest.ts +89 -0
  451. package/src/view/use-sensor-marshal/find-closest-draggable-id-from-event.ts +50 -0
  452. package/src/view/use-sensor-marshal/index.ts +5 -0
  453. package/src/view/use-sensor-marshal/is-event-in-interactive-element.ts +67 -0
  454. package/src/view/use-sensor-marshal/lock.ts +50 -0
  455. package/src/view/use-sensor-marshal/sensors/use-keyboard-sensor.ts +243 -0
  456. package/src/view/use-sensor-marshal/sensors/use-mouse-sensor.ts +391 -0
  457. package/src/view/use-sensor-marshal/sensors/use-touch-sensor.ts +481 -0
  458. package/src/view/use-sensor-marshal/sensors/util/prevent-standard-key-events.ts +19 -0
  459. package/src/view/use-sensor-marshal/sensors/util/supported-page-visibility-event-name.ts +29 -0
  460. package/src/view/use-sensor-marshal/use-sensor-marshal.ts +504 -0
  461. package/src/view/use-sensor-marshal/use-validate-sensor-hooks.ts +20 -0
  462. package/src/view/use-style-marshal/get-styles.ts +173 -0
  463. package/src/view/use-style-marshal/index.ts +2 -0
  464. package/src/view/use-style-marshal/style-marshal-types.ts +9 -0
  465. package/src/view/use-style-marshal/use-style-marshal.ts +126 -0
  466. package/src/view/use-unique-id.ts +25 -0
  467. package/src/view/visually-hidden-style.ts +16 -0
  468. package/src/view/window/get-max-window-scroll.ts +19 -0
  469. package/src/view/window/get-viewport.ts +49 -0
  470. package/src/view/window/get-window-from-el.ts +12 -0
  471. package/src/view/window/get-window-scroll.ts +30 -0
  472. package/src/view/window/scroll-window.ts +7 -0
@@ -0,0 +1,94 @@
1
+ // @flow
2
+ import { type Position, type Rect } from 'css-box-model';
3
+ import type {
4
+ DroppableId,
5
+ DraggableDimension,
6
+ DroppableDimension,
7
+ DraggableDimensionMap,
8
+ DroppableDimensionMap,
9
+ DragImpact,
10
+ Viewport,
11
+ LiftEffect,
12
+ } from '../../types';
13
+ import getDroppableOver from '../get-droppable-over';
14
+ import getDraggablesInsideDroppable from '../get-draggables-inside-droppable';
15
+ import withDroppableScroll from '../with-scroll-change/with-droppable-scroll';
16
+ import getReorderImpact from './get-reorder-impact';
17
+ import getCombineImpact from './get-combine-impact';
18
+ import noImpact from '../no-impact';
19
+ import { offsetRectByPosition } from '../rect';
20
+
21
+ // Exact
22
+ type Args = {
23
+ pageOffset: Position,
24
+ draggable: DraggableDimension,
25
+ // all dimensions in system
26
+ draggables: DraggableDimensionMap,
27
+ droppables: DroppableDimensionMap,
28
+ previousImpact: DragImpact,
29
+ viewport: Viewport,
30
+ afterCritical: LiftEffect,
31
+ };
32
+
33
+ export default ({
34
+ pageOffset,
35
+ draggable,
36
+ draggables,
37
+ droppables,
38
+ previousImpact,
39
+ viewport,
40
+ afterCritical,
41
+ }: Args): DragImpact => {
42
+ const pageBorderBox: Rect = offsetRectByPosition(
43
+ draggable.page.borderBox,
44
+ pageOffset,
45
+ );
46
+
47
+ const destinationId: DroppableId | null = getDroppableOver({
48
+ pageBorderBox,
49
+ draggable,
50
+ droppables,
51
+ });
52
+
53
+ // not dragging over anything
54
+
55
+ if (!destinationId) {
56
+ // A big design decision was made here to collapse the home list
57
+ // when not over any list. This yielded the most consistently beautiful experience.
58
+ return noImpact;
59
+ }
60
+
61
+ const destination: DroppableDimension = droppables[destinationId];
62
+ const insideDestination: DraggableDimension[] = getDraggablesInsideDroppable(
63
+ destination.descriptor.id,
64
+ draggables,
65
+ );
66
+
67
+ // Where the element actually is now.
68
+ // Need to take into account the change of scroll in the droppable
69
+ const pageBorderBoxWithDroppableScroll: Rect = withDroppableScroll(
70
+ destination,
71
+ pageBorderBox,
72
+ );
73
+
74
+ // checking combine first so we combine before any reordering
75
+ return (
76
+ getCombineImpact({
77
+ pageBorderBoxWithDroppableScroll,
78
+ draggable,
79
+ previousImpact,
80
+ destination,
81
+ insideDestination,
82
+ afterCritical,
83
+ }) ||
84
+ getReorderImpact({
85
+ pageBorderBoxWithDroppableScroll,
86
+ draggable,
87
+ destination,
88
+ insideDestination,
89
+ last: previousImpact.displaced,
90
+ viewport,
91
+ afterCritical,
92
+ })
93
+ );
94
+ };
@@ -0,0 +1,31 @@
1
+ // @flow
2
+ import memoizeOne from 'memoize-one';
3
+ import { toDraggableList } from './dimension-structures';
4
+ import type {
5
+ DraggableDimension,
6
+ DroppableId,
7
+ DraggableDimensionMap,
8
+ } from '../types';
9
+
10
+ export default memoizeOne(
11
+ (
12
+ // using droppableId to avoid cache busted when we
13
+ // update the droppable (such as when it scrolls)
14
+ droppableId: DroppableId,
15
+ draggables: DraggableDimensionMap,
16
+ ): DraggableDimension[] => {
17
+ const result = toDraggableList(draggables)
18
+ .filter(
19
+ (draggable: DraggableDimension): boolean =>
20
+ droppableId === draggable.descriptor.droppableId,
21
+ )
22
+ // Dimensions are not guarenteed to be ordered in the same order as keys
23
+ // So we need to sort them so they are in the correct order
24
+ .sort(
25
+ (a: DraggableDimension, b: DraggableDimension): number =>
26
+ a.descriptor.index - b.descriptor.index,
27
+ );
28
+
29
+ return result;
30
+ },
31
+ );
@@ -0,0 +1,161 @@
1
+ // @flow
2
+ import { type Position, type Rect } from 'css-box-model';
3
+ import type {
4
+ DroppableDimension,
5
+ DroppableDimensionMap,
6
+ DroppableId,
7
+ DraggableDimension,
8
+ Axis,
9
+ } from '../types';
10
+ import { toDroppableList } from './dimension-structures';
11
+ import isPositionInFrame from './visibility/is-position-in-frame';
12
+ import { distance, patch } from './position';
13
+ import isWithin from './is-within';
14
+
15
+ // https://stackoverflow.com/questions/306316/determine-if-two-rectangles-overlap-each-other
16
+ // https://silentmatt.com/rectangle-intersection/
17
+ function getHasOverlap(first: Rect, second: Rect): boolean {
18
+ return (
19
+ first.left < second.right &&
20
+ first.right > second.left &&
21
+ first.top < second.bottom &&
22
+ first.bottom > second.top
23
+ );
24
+ }
25
+
26
+ // Exact
27
+ type Args = {
28
+ pageBorderBox: Rect,
29
+ draggable: DraggableDimension,
30
+ droppables: DroppableDimensionMap,
31
+ };
32
+
33
+ // Exact
34
+ type WithDistance = {
35
+ distance: number,
36
+ id: DroppableId,
37
+ };
38
+
39
+ // Exact
40
+ type GetFurthestArgs = {
41
+ pageBorderBox: Rect,
42
+ draggable: DraggableDimension,
43
+ candidates: DroppableDimension[],
44
+ };
45
+
46
+ function getFurthestAway({
47
+ pageBorderBox,
48
+ draggable,
49
+ candidates,
50
+ }: GetFurthestArgs): DroppableId | null {
51
+ // We are not comparing the center of the home list with the target list as it would
52
+ // give preference to giant lists
53
+
54
+ // We are measuring the distance from where the draggable started
55
+ // to where it is *hitting* the candidate
56
+ // Note: The hit point might technically not be in the bounds of the candidate
57
+
58
+ const startCenter: Position = draggable.page.borderBox.center;
59
+ const sorted: WithDistance[] = candidates
60
+ .map((candidate: DroppableDimension): WithDistance => {
61
+ const axis: Axis = candidate.axis;
62
+ const target: Position = patch(
63
+ candidate.axis.line,
64
+ // use the current center of the dragging item on the main axis
65
+ pageBorderBox.center[axis.line],
66
+ // use the center of the list on the cross axis
67
+ candidate.page.borderBox.center[axis.crossAxisLine],
68
+ );
69
+
70
+ return {
71
+ id: candidate.descriptor.id,
72
+ distance: distance(startCenter, target),
73
+ };
74
+ })
75
+ // largest value will be first
76
+ .sort((a: WithDistance, b: WithDistance) => b.distance - a.distance);
77
+
78
+ // just being safe
79
+ return sorted[0] ? sorted[0].id : null;
80
+ }
81
+
82
+ export default function getDroppableOver({
83
+ pageBorderBox,
84
+ draggable,
85
+ droppables,
86
+ }: Args): DroppableId | null {
87
+ // We know at this point that some overlap has to exist
88
+ const candidates: DroppableDimension[] = toDroppableList(droppables).filter(
89
+ (item: DroppableDimension): boolean => {
90
+ // Cannot be a candidate when disabled
91
+ if (!item.isEnabled) {
92
+ return false;
93
+ }
94
+
95
+ // Cannot be a candidate when there is no visible area
96
+ const active: Rect | null = item.subject.active;
97
+ if (!active) {
98
+ return false;
99
+ }
100
+
101
+ // Cannot be a candidate when dragging item is not over the droppable at all
102
+ if (!getHasOverlap(pageBorderBox, active)) {
103
+ return false;
104
+ }
105
+
106
+ // 1. Candidate if the center position is over a droppable
107
+ if (isPositionInFrame(active)(pageBorderBox.center)) {
108
+ return true;
109
+ }
110
+
111
+ // 2. Candidate if an edge is over the cross axis half way point
112
+ // 3. Candidate if dragging item is totally over droppable on cross axis
113
+
114
+ const axis: Axis = item.axis;
115
+ const childCenter: number = active.center[axis.crossAxisLine];
116
+ const crossAxisStart: number = pageBorderBox[axis.crossAxisStart];
117
+ const crossAxisEnd: number = pageBorderBox[axis.crossAxisEnd];
118
+
119
+ const isContained = isWithin(
120
+ active[axis.crossAxisStart],
121
+ active[axis.crossAxisEnd],
122
+ );
123
+
124
+ const isStartContained: boolean = isContained(crossAxisStart);
125
+ const isEndContained: boolean = isContained(crossAxisEnd);
126
+
127
+ // Dragging item is totally covering the active area
128
+ if (!isStartContained && !isEndContained) {
129
+ return true;
130
+ }
131
+
132
+ /**
133
+ * edges must go beyond the center line in order to avoid
134
+ * cases were both conditions are satisfied.
135
+ */
136
+ if (isStartContained) {
137
+ return crossAxisStart < childCenter;
138
+ }
139
+
140
+ return crossAxisEnd > childCenter;
141
+ },
142
+ );
143
+
144
+ if (!candidates.length) {
145
+ return null;
146
+ }
147
+
148
+ // Only one candidate - use that!
149
+ if (candidates.length === 1) {
150
+ return candidates[0].descriptor.id;
151
+ }
152
+
153
+ // Multiple options returned
154
+ // Should only occur with really large items
155
+ // Going to use fallback: distance from home
156
+ return getFurthestAway({
157
+ pageBorderBox,
158
+ draggable,
159
+ candidates,
160
+ });
161
+ }
@@ -0,0 +1,10 @@
1
+ // @flow
2
+ import { invariant } from '../invariant';
3
+
4
+ import type { DroppableDimension, Scrollable } from '../types';
5
+
6
+ export default (droppable: DroppableDimension): Scrollable => {
7
+ const frame: Scrollable | null = droppable.frame;
8
+ invariant(frame, 'Expected Droppable to have a frame');
9
+ return frame;
10
+ };
@@ -0,0 +1,7 @@
1
+ // @flow
2
+ import type { DraggableDescriptor, DraggableLocation } from '../types';
3
+
4
+ export default (descriptor: DraggableDescriptor): DraggableLocation => ({
5
+ index: descriptor.index,
6
+ droppableId: descriptor.droppableId,
7
+ });
@@ -0,0 +1,16 @@
1
+ // @flow
2
+ import type { DragImpact, DraggableLocation, Combine } from '../types';
3
+
4
+ export function tryGetDestination(impact: DragImpact): DraggableLocation | null {
5
+ if (impact.at && impact.at.type === 'REORDER') {
6
+ return impact.at.destination;
7
+ }
8
+ return null;
9
+ }
10
+
11
+ export function tryGetCombine(impact: DragImpact): Combine | null {
12
+ if (impact.at && impact.at.type === 'COMBINE') {
13
+ return impact.at.combine;
14
+ }
15
+ return null;
16
+ }
@@ -0,0 +1,12 @@
1
+ // @flow
2
+ import type { DisplacementGroups, DraggableId } from '../types';
3
+
4
+ // Exact
5
+ type Args = {
6
+ displaced: DisplacementGroups,
7
+ id: DraggableId,
8
+ };
9
+
10
+ export default function getIsDisplaced({ displaced, id }: Args): boolean {
11
+ return Boolean(displaced.visible[id] || displaced.invisible[id]);
12
+ }
@@ -0,0 +1,84 @@
1
+ // @flow
2
+ import { invariant } from '../invariant';
3
+ import getHomeLocation from './get-home-location';
4
+ import type {
5
+ DraggableDimension,
6
+ DroppableDimension,
7
+ DraggableDimensionMap,
8
+ DragImpact,
9
+ DisplacedBy,
10
+ Viewport,
11
+ DraggableIdMap,
12
+ DisplacementGroups,
13
+ LiftEffect,
14
+ } from '../types';
15
+ import getDraggablesInsideDroppable from './get-draggables-inside-droppable';
16
+ import getDisplacedBy from './get-displaced-by';
17
+ import getDisplacementGroups from './get-displacement-groups';
18
+
19
+ // Exact
20
+ type Args = {
21
+ draggable: DraggableDimension,
22
+ home: DroppableDimension,
23
+ draggables: DraggableDimensionMap,
24
+ viewport: Viewport,
25
+ };
26
+
27
+ // Exact
28
+ type Result = {
29
+ afterCritical: LiftEffect,
30
+ impact: DragImpact,
31
+ };
32
+
33
+ export default ({ draggable, home, draggables, viewport }: Args): Result => {
34
+ const displacedBy: DisplacedBy = getDisplacedBy(
35
+ home.axis,
36
+ draggable.displaceBy,
37
+ );
38
+
39
+ const insideHome: DraggableDimension[] = getDraggablesInsideDroppable(
40
+ home.descriptor.id,
41
+ draggables,
42
+ );
43
+
44
+ // in a list that does not start at 0 the descriptor.index might be different from the index in the list
45
+ // eg a list could be: [2,3,4]. A descriptor.index of '2' would actually be in index '0' of the list
46
+ const rawIndex: number = insideHome.indexOf(draggable);
47
+ invariant(rawIndex !== -1, 'Expected draggable to be inside home list');
48
+
49
+ const afterDragging: DraggableDimension[] = insideHome.slice(rawIndex + 1);
50
+ const effected: DraggableIdMap = afterDragging.reduce(
51
+ (previous: DraggableIdMap, item: DraggableDimension): DraggableIdMap => {
52
+ previous[item.descriptor.id] = true;
53
+ return previous;
54
+ },
55
+ {},
56
+ );
57
+ const afterCritical: LiftEffect = {
58
+ inVirtualList: home.descriptor.mode === 'virtual',
59
+ displacedBy,
60
+ effected,
61
+ };
62
+
63
+ const displaced: DisplacementGroups = getDisplacementGroups({
64
+ afterDragging,
65
+ destination: home,
66
+ displacedBy,
67
+ last: null,
68
+ viewport: viewport.frame,
69
+ // originally we do not want any animation as we want
70
+ // everything to be fixed in the same position that
71
+ // it started in
72
+ forceShouldAnimate: false,
73
+ });
74
+
75
+ const impact: DragImpact = {
76
+ displaced,
77
+ displacedBy,
78
+ at: {
79
+ type: 'REORDER',
80
+ destination: getHomeLocation(draggable.descriptor),
81
+ },
82
+ };
83
+ return { impact, afterCritical };
84
+ };
@@ -0,0 +1,32 @@
1
+ // @flow
2
+ import { type Position } from 'css-box-model';
3
+ import { subtract } from './position';
4
+
5
+ // Exact
6
+ type Args = {
7
+ scrollHeight: number,
8
+ scrollWidth: number,
9
+ height: number,
10
+ width: number,
11
+ };
12
+
13
+ export default ({
14
+ scrollHeight,
15
+ scrollWidth,
16
+ height,
17
+ width,
18
+ }: Args): Position => {
19
+ const maxScroll: Position = subtract(
20
+ // full size
21
+ { x: scrollWidth, y: scrollHeight },
22
+ // viewport size
23
+ { x: width, y: height },
24
+ );
25
+
26
+ const adjustedMaxScroll: Position = {
27
+ x: Math.max(0, maxScroll.x),
28
+ y: Math.max(0, maxScroll.y),
29
+ };
30
+
31
+ return adjustedMaxScroll;
32
+ };
@@ -0,0 +1,13 @@
1
+ // @flow
2
+ import type { CollectingState, DraggingState, State } from '../types';
3
+
4
+ export default function isMovementAllowed(
5
+ state: State,
6
+ ): state is DraggingState | CollectingState {
7
+ return state.phase === 'DRAGGING' || state.phase === 'COLLECTING';
8
+ }
9
+
10
+ // Using function declaration as arrow function does not play well with the %checks syntax
11
+ // export default function isMovementAllowed(state: State): boolean %checks {
12
+ // return state.phase === 'DRAGGING' || state.phase === 'COLLECTING';
13
+ // }
@@ -0,0 +1,9 @@
1
+ // @flow
2
+
3
+ // is a value between two other values
4
+
5
+ export default (
6
+ lowerBound: number,
7
+ upperBound: number,
8
+ ): ((arg: number) => boolean) => (value: number): boolean =>
9
+ lowerBound <= value && value <= upperBound;
@@ -0,0 +1,38 @@
1
+ // @flow
2
+ import { invariant } from '../../invariant';
3
+ import type { AutoScroller } from '../auto-scroller/auto-scroller-types';
4
+ import type { Action, Dispatch, MiddlewareStore } from '../store-types';
5
+ import type { State } from '../../types';
6
+
7
+ const shouldStop = (action: Action): boolean =>
8
+ action.type === 'DROP_COMPLETE' ||
9
+ action.type === 'DROP_ANIMATE' ||
10
+ action.type === 'FLUSH';
11
+
12
+ export default (autoScroller: AutoScroller) => (store: MiddlewareStore) => (
13
+ next: Dispatch,
14
+ ) => (action: Action): any => {
15
+ if (shouldStop(action)) {
16
+ autoScroller.stop();
17
+ next(action);
18
+ return;
19
+ }
20
+
21
+ if (action.type === 'INITIAL_PUBLISH') {
22
+ // letting the action go first to hydrate the state
23
+ next(action);
24
+ const state: State = store.getState();
25
+ invariant(
26
+ state.phase === 'DRAGGING',
27
+ 'Expected phase to be DRAGGING after INITIAL_PUBLISH',
28
+ );
29
+ autoScroller.start(state);
30
+ return;
31
+ }
32
+
33
+ // auto scroll happens in response to state changes
34
+ // releasing all actions to the reducer first
35
+ next(action);
36
+
37
+ autoScroller.scroll(store.getState());
38
+ };
@@ -0,0 +1,20 @@
1
+ // @flow
2
+ import type { Action, Dispatch } from '../store-types';
3
+ import type { DimensionMarshal } from '../dimension-marshal/dimension-marshal-types';
4
+
5
+ export default (marshal: DimensionMarshal) => () => (next: Dispatch) => (
6
+ action: Action,
7
+ ): any => {
8
+ // Not stopping a collection on a 'DROP' as we want a collection to continue
9
+ if (
10
+ // drag is finished
11
+ action.type === 'DROP_COMPLETE' ||
12
+ action.type === 'FLUSH' ||
13
+ // no longer accepting changes once the drop has started
14
+ action.type === 'DROP_ANIMATE'
15
+ ) {
16
+ marshal.stopPublishing();
17
+ }
18
+
19
+ next(action);
20
+ };
@@ -0,0 +1,21 @@
1
+ // @flow
2
+ import { invariant } from '../../../invariant';
3
+ import { completeDrop } from '../../action-creators';
4
+ import type { State } from '../../../types';
5
+ import type { MiddlewareStore, Action, Dispatch } from '../../store-types';
6
+
7
+ export default (store: MiddlewareStore) => (next: Dispatch) => (
8
+ action: Action,
9
+ ): any => {
10
+ if (action.type !== 'DROP_ANIMATION_FINISHED') {
11
+ next(action);
12
+ return;
13
+ }
14
+
15
+ const state: State = store.getState();
16
+ invariant(
17
+ state.phase === 'DROP_ANIMATING',
18
+ 'Cannot finish a drop animating when no drop is occurring',
19
+ );
20
+ store.dispatch(completeDrop({ completed: state.completed }));
21
+ };
@@ -0,0 +1,63 @@
1
+ // @flow
2
+ import { dropAnimationFinished } from '../../action-creators';
3
+ import type { AnimationFrameID, State } from '../../../types';
4
+ import type { MiddlewareStore, Action, Dispatch } from '../../store-types';
5
+ import type { EventBinding } from '../../../view/event-bindings/event-types';
6
+ import bindEvents from '../../../view/event-bindings/bind-events';
7
+
8
+ export default (store: MiddlewareStore) => {
9
+ let unbind: (() => void) | null;
10
+ let frameId: AnimationFrameID | null= null;
11
+
12
+ function clear() {
13
+ if (frameId) {
14
+ cancelAnimationFrame(frameId);
15
+ frameId = null;
16
+ }
17
+
18
+ if (unbind) {
19
+ unbind();
20
+ unbind = null;
21
+ }
22
+ }
23
+
24
+ return (next: Dispatch) => (action: Action): any => {
25
+ if (
26
+ action.type === 'FLUSH' ||
27
+ action.type === 'DROP_COMPLETE' ||
28
+ action.type === 'DROP_ANIMATION_FINISHED'
29
+ ) {
30
+ clear();
31
+ }
32
+
33
+ next(action);
34
+
35
+ if (action.type !== 'DROP_ANIMATE') {
36
+ return;
37
+ }
38
+
39
+ const binding: EventBinding = {
40
+ eventName: 'scroll',
41
+ // capture: true will catch all scroll events, event from scroll containers
42
+ // once: just in case, we only want to ever fire one
43
+ options: { capture: true, passive: false, once: true },
44
+ fn: function flushDropAnimation() {
45
+ const state: State = store.getState();
46
+ if (state.phase === 'DROP_ANIMATING') {
47
+ store.dispatch(dropAnimationFinished());
48
+ }
49
+ },
50
+ };
51
+
52
+ // The browser can batch a few scroll events in a single frame
53
+ // including the one that ended the drag.
54
+ // Binding after a requestAnimationFrame ensures that any scrolls caused
55
+ // by the auto scroller are finished
56
+ // TODO: why is a second window scroll being fired?
57
+ // It leads to funny drop positions :(
58
+ frameId = requestAnimationFrame(() => {
59
+ frameId = null;
60
+ unbind = bindEvents(window, [binding], {});
61
+ });
62
+ };
63
+ };