@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,106 @@
1
+ // @flow
2
+ import type { Position } from 'css-box-model';
3
+ import type {
4
+ Id,
5
+ DraggableId,
6
+ DraggableDescriptor,
7
+ DraggableOptions,
8
+ DraggableDimension,
9
+ DroppableId,
10
+ ScrollOptions,
11
+ DroppableDescriptor,
12
+ DroppableDimension,
13
+ TypeId,
14
+ } from '../../types';
15
+
16
+ export type GetDraggableDimensionFn = (
17
+ windowScroll: Position,
18
+ ) => DraggableDimension;
19
+
20
+ // Exact
21
+ export type DraggableEntry = {
22
+ uniqueId: Id,
23
+ descriptor: DraggableDescriptor,
24
+ options: DraggableOptions,
25
+ getDimension: GetDraggableDimensionFn,
26
+ };
27
+
28
+ // Exact
29
+ export type DraggableAPI = {
30
+ register: (entry: DraggableEntry) => void,
31
+ update: (entry: DraggableEntry, last: DraggableEntry) => void,
32
+ unregister: (entry: DraggableEntry) => void,
33
+ exists: (id: DraggableId) => boolean,
34
+ getById: (id: DraggableId) => DraggableEntry,
35
+ findById: (id: DraggableId) => DraggableEntry | null,
36
+ getAllByType: (type: TypeId) => DraggableEntry[],
37
+ };
38
+
39
+ export type GetDroppableDimensionFn = (
40
+ windowScroll: Position,
41
+ options: ScrollOptions,
42
+ ) => DroppableDimension;
43
+
44
+ // Exact
45
+ export type RecollectDroppableOptions = {
46
+ withoutPlaceholder: boolean,
47
+ };
48
+
49
+ // Exact
50
+ export type DroppableCallbacks = {
51
+ // a drag is starting
52
+ getDimensionAndWatchScroll: GetDroppableDimensionFn,
53
+ getScrollWhileDragging: () => Position,
54
+ // scroll a droppable
55
+ scroll: (change: Position) => void,
56
+ // If the Droppable is listening for scroll events - it needs to stop!
57
+ // Can be called on droppables that have not been asked to watch scroll
58
+ dragStopped: () => void,
59
+ };
60
+
61
+ // Exact
62
+ export type DroppableEntry = {
63
+ uniqueId: Id,
64
+ descriptor: DroppableDescriptor,
65
+ callbacks: DroppableCallbacks,
66
+ };
67
+
68
+ export type DraggableEntryMap = {
69
+ [id: DraggableId]: DraggableEntry,
70
+ };
71
+
72
+ export type DroppableEntryMap = {
73
+ [id: DroppableId]: DroppableEntry,
74
+ };
75
+
76
+ // Exact
77
+ export type DroppableAPI = {
78
+ register: (entry: DroppableEntry) => void,
79
+ unregister: (entry: DroppableEntry) => void,
80
+ exists: (id: DraggableId) => boolean,
81
+ getById: (id: DroppableId) => DroppableEntry,
82
+ findById: (id: DroppableId) => DroppableEntry | null,
83
+ getAllByType: (type: TypeId) => DroppableEntry[],
84
+ };
85
+
86
+ // Exact
87
+ export type RegistryEvent =
88
+ | {
89
+ type: 'ADDITION',
90
+ value: DraggableEntry,
91
+ }
92
+ | {
93
+ type: 'REMOVAL',
94
+ value: DraggableEntry,
95
+ };
96
+
97
+ export type Subscriber = (event: RegistryEvent) => void;
98
+ export type Unsubscribe = () => void;
99
+
100
+ // Exact
101
+ export type Registry = {
102
+ draggable: DraggableAPI,
103
+ droppable: DroppableAPI,
104
+ subscribe: (cb: Subscriber) => Unsubscribe,
105
+ clean: () => void,
106
+ };
@@ -0,0 +1,20 @@
1
+ // @flow
2
+ import { useEffect } from "react";
3
+ import { useMemo } from "@helpdice/memoizer";
4
+ import type { Registry } from "./registry-types";
5
+ import createRegistry from "./create-registry";
6
+
7
+ export default function useRegistry(): Registry {
8
+ const registry: Registry = useMemo(createRegistry, []);
9
+
10
+ useEffect(() => {
11
+ return function unmount() {
12
+ // clean up the registry to avoid any leaks
13
+ // doing it after an animation frame so that other things unmounting
14
+ // can continue to interact with the registry
15
+ requestAnimationFrame(registry.clean);
16
+ };
17
+ }, [registry]);
18
+
19
+ return registry;
20
+ }
@@ -0,0 +1,13 @@
1
+ // @flow
2
+ import memoizeOne from 'memoize-one';
3
+ import type { DraggableDimension } from '../types';
4
+
5
+ export default memoizeOne(
6
+ (
7
+ remove: DraggableDimension,
8
+ list: DraggableDimension[],
9
+ ): DraggableDimension[] =>
10
+ list.filter(
11
+ (item: DraggableDimension) => item.descriptor.id !== remove.descriptor.id,
12
+ ),
13
+ );
@@ -0,0 +1,34 @@
1
+ // @flow
2
+ import { getRect, type Rect } from 'css-box-model';
3
+ import type { Position } from 'css-box-model';
4
+ import { subtract, negate } from './position';
5
+ import type { Viewport } from '../types';
6
+
7
+ export default (viewport: Viewport, newScroll: Position): Viewport => {
8
+ const diff: Position = subtract(newScroll, viewport.scroll.initial);
9
+ const displacement: Position = negate(diff);
10
+
11
+ // We need to update the frame so that it is always a live value
12
+ // The top / left of the frame should always match the newScroll position
13
+ const frame: Rect = getRect({
14
+ top: newScroll.y,
15
+ bottom: newScroll.y + viewport.frame.height,
16
+ left: newScroll.x,
17
+ right: newScroll.x + viewport.frame.width,
18
+ });
19
+
20
+ const updated: Viewport = {
21
+ frame,
22
+ scroll: {
23
+ initial: viewport.scroll.initial,
24
+ max: viewport.scroll.max,
25
+ current: newScroll,
26
+ diff: {
27
+ value: diff,
28
+ displacement,
29
+ },
30
+ },
31
+ };
32
+
33
+ return updated;
34
+ };
@@ -0,0 +1,45 @@
1
+ // @flow
2
+ import type { Spacing, Position } from 'css-box-model';
3
+
4
+ // TODO add test
5
+ export const isEqual = (first: Spacing, second: Spacing): boolean =>
6
+ first.top === second.top &&
7
+ first.right === second.right &&
8
+ first.bottom === second.bottom &&
9
+ first.left === second.left;
10
+
11
+ export const offsetByPosition = (
12
+ spacing: Spacing,
13
+ point: Position,
14
+ ): Spacing => ({
15
+ top: spacing.top + point.y,
16
+ left: spacing.left + point.x,
17
+ bottom: spacing.bottom + point.y,
18
+ right: spacing.right + point.x,
19
+ });
20
+
21
+ export const expandByPosition = (
22
+ spacing: Spacing,
23
+ position: Position,
24
+ ): Spacing => ({
25
+ // pulling back to increase size
26
+ top: spacing.top - position.y,
27
+ left: spacing.left - position.x,
28
+ // pushing forward to increase size
29
+ right: spacing.right + position.x,
30
+ bottom: spacing.bottom + position.y,
31
+ });
32
+
33
+ export const getCorners = (spacing: Spacing): Position[] => [
34
+ { x: spacing.left, y: spacing.top },
35
+ { x: spacing.right, y: spacing.top },
36
+ { x: spacing.left, y: spacing.bottom },
37
+ { x: spacing.right, y: spacing.bottom },
38
+ ];
39
+
40
+ export const noSpacing: Spacing = {
41
+ top: 0,
42
+ right: 0,
43
+ bottom: 0,
44
+ left: 0,
45
+ };
@@ -0,0 +1,19 @@
1
+ // @flow
2
+ // This file exists to avoid a circular dependency between types.js and action-creators.js
3
+ import type {
4
+ Store as ReduxStore,
5
+ Dispatch as ReduxDispatch,
6
+ Middleware as ReduxMiddleware,
7
+ MiddlewareAPI as ReduxMiddlewareAPI,
8
+ } from 'redux';
9
+ import type { Action as ActionCreators } from './action-creators';
10
+ import type { State as ReduxState } from '../types';
11
+
12
+ export type Action = ActionCreators;
13
+ export type State = ReduxState;
14
+ export type Dispatch = ReduxDispatch<Action>;
15
+ export type LazyDispatch = ReduxDispatch<Action>;
16
+ export type Store = ReduxStore<State, Action, Dispatch>;
17
+ export type Middleware = ReduxMiddleware<State, Action, Dispatch>;
18
+ export type MiddlewareStore = ReduxMiddlewareAPI<Dispatch, State>;
19
+ // export type MiddlewareStore = ReduxMiddlewareAPI<ReduxDispatch, S>;
@@ -0,0 +1,55 @@
1
+ // @flow
2
+ import type {
3
+ DraggableDimension,
4
+ DroppableDimension,
5
+ DraggableDimensionMap,
6
+ DragImpact,
7
+ Viewport,
8
+ DraggableId,
9
+ DisplacementGroups,
10
+ } from '../../types';
11
+ import getDisplacementGroups from '../get-displacement-groups';
12
+
13
+ // Exact
14
+ type RecomputeArgs = {
15
+ impact: DragImpact,
16
+ draggables: DraggableDimensionMap,
17
+ destination: DroppableDimension,
18
+ viewport: Viewport,
19
+ forceShouldAnimate?: boolean,
20
+ };
21
+
22
+ function getDraggables(
23
+ ids: DraggableId[],
24
+ draggables: DraggableDimensionMap,
25
+ ): DraggableDimension[] {
26
+ return ids.map((id: DraggableId): DraggableDimension => draggables[id]);
27
+ }
28
+
29
+ export default ({
30
+ impact,
31
+ viewport,
32
+ draggables,
33
+ destination,
34
+ forceShouldAnimate,
35
+ }: RecomputeArgs): DragImpact => {
36
+ const last: DisplacementGroups = impact.displaced;
37
+ const afterDragging: DraggableDimension[] = getDraggables(
38
+ last.all,
39
+ draggables,
40
+ );
41
+
42
+ const displaced: DisplacementGroups = getDisplacementGroups({
43
+ afterDragging,
44
+ destination,
45
+ displacedBy: impact.displacedBy,
46
+ viewport: viewport.frame,
47
+ forceShouldAnimate,
48
+ last,
49
+ });
50
+
51
+ return {
52
+ ...impact,
53
+ displaced,
54
+ };
55
+ };
@@ -0,0 +1,112 @@
1
+ // @flow
2
+ import type { Position } from 'css-box-model';
3
+ import type {
4
+ DraggableId,
5
+ DroppableDimension,
6
+ DraggableDimension,
7
+ DraggableDimensionMap,
8
+ DragImpact,
9
+ Displacement,
10
+ DisplacementGroups,
11
+ DraggableIdMap,
12
+ DisplacementMap,
13
+ Viewport,
14
+ } from '../../types';
15
+ import scrollViewport from '../scroll-viewport';
16
+ import scrollDroppable from '../droppable/scroll-droppable';
17
+ import { add } from '../position';
18
+ import getDisplacementGroups from '../get-displacement-groups';
19
+
20
+ // Exact
21
+ type SpeculativeArgs = {
22
+ impact: DragImpact,
23
+ destination: DroppableDimension,
24
+ viewport: Viewport,
25
+ draggables: DraggableDimensionMap,
26
+ maxScrollChange: Position,
27
+ };
28
+
29
+ function getDraggables(
30
+ ids: DraggableId[],
31
+ draggables: DraggableDimensionMap,
32
+ ): DraggableDimension[] {
33
+ return ids.map((id: DraggableId): DraggableDimension => draggables[id]);
34
+ }
35
+
36
+ function tryGetVisible(
37
+ id: DraggableId,
38
+ groups: DisplacementGroups[],
39
+ ): Displacement | null {
40
+ for (let i = 0; i < groups.length; i++) {
41
+ const displacement: Displacement | null = groups[i].visible[id];
42
+ if (displacement) {
43
+ return displacement;
44
+ }
45
+ }
46
+ return null;
47
+ }
48
+
49
+ export default ({
50
+ impact,
51
+ viewport,
52
+ destination,
53
+ draggables,
54
+ maxScrollChange,
55
+ }: SpeculativeArgs): DragImpact => {
56
+ const scrolledViewport: Viewport = scrollViewport(
57
+ viewport,
58
+ add(viewport.scroll.current, maxScrollChange),
59
+ );
60
+ const scrolledDroppable: DroppableDimension = destination.frame
61
+ ? scrollDroppable(
62
+ destination,
63
+ add(destination.frame.scroll.current, maxScrollChange),
64
+ )
65
+ : destination;
66
+
67
+ const last: DisplacementGroups = impact.displaced;
68
+ const withViewportScroll: DisplacementGroups = getDisplacementGroups({
69
+ afterDragging: getDraggables(last.all, draggables),
70
+ destination,
71
+ displacedBy: impact.displacedBy,
72
+ viewport: scrolledViewport.frame,
73
+ last,
74
+ // we want the addition to be animated
75
+ forceShouldAnimate: false,
76
+ });
77
+ const withDroppableScroll: DisplacementGroups = getDisplacementGroups({
78
+ afterDragging: getDraggables(last.all, draggables),
79
+ destination: scrolledDroppable,
80
+ displacedBy: impact.displacedBy,
81
+ viewport: viewport.frame,
82
+ last,
83
+ // we want the addition to be animated
84
+ forceShouldAnimate: false,
85
+ });
86
+
87
+ const invisible: DraggableIdMap = {};
88
+ const visible: DisplacementMap = {};
89
+ const groups: DisplacementGroups[] = [
90
+ // this will populate the previous entries with the correct animation values
91
+ last,
92
+ withViewportScroll,
93
+ withDroppableScroll,
94
+ ];
95
+
96
+ last.all.forEach((id: DraggableId) => {
97
+ const displacement: Displacement | null = tryGetVisible(id, groups);
98
+
99
+ if (displacement) {
100
+ visible[id] = displacement;
101
+ return;
102
+ }
103
+ invisible[id] = true;
104
+ });
105
+
106
+ const newImpact: DragImpact = {
107
+ ...impact,
108
+ displaced: { all: last.all, invisible, visible },
109
+ };
110
+
111
+ return newImpact;
112
+ };
@@ -0,0 +1,60 @@
1
+ // @flow
2
+ import { type Spacing } from 'css-box-model';
3
+ import isWithin from '../is-within';
4
+
5
+ export default (frame: Spacing) => {
6
+ const isWithinVertical = isWithin(frame.top, frame.bottom);
7
+ const isWithinHorizontal = isWithin(frame.left, frame.right);
8
+
9
+ return (subject: Spacing) => {
10
+ // situations where target is visible:
11
+ // 1. is completely contained within frame
12
+ // 2. is partially visible on both axis within frame
13
+ // 3. is bigger than frame on both axis
14
+ // 4. is bigger than frame on one axis and is partially visible on the other
15
+
16
+ // completely contained
17
+ const isContained: boolean =
18
+ isWithinVertical(subject.top) &&
19
+ isWithinVertical(subject.bottom) &&
20
+ isWithinHorizontal(subject.left) &&
21
+ isWithinHorizontal(subject.right);
22
+
23
+ if (isContained) {
24
+ return true;
25
+ }
26
+
27
+ const isPartiallyVisibleVertically: boolean =
28
+ isWithinVertical(subject.top) || isWithinVertical(subject.bottom);
29
+ const isPartiallyVisibleHorizontally: boolean =
30
+ isWithinHorizontal(subject.left) || isWithinHorizontal(subject.right);
31
+
32
+ // partially visible on both axis
33
+ const isPartiallyContained: boolean =
34
+ isPartiallyVisibleVertically && isPartiallyVisibleHorizontally;
35
+
36
+ if (isPartiallyContained) {
37
+ return true;
38
+ }
39
+
40
+ const isBiggerVertically: boolean =
41
+ subject.top < frame.top && subject.bottom > frame.bottom;
42
+ const isBiggerHorizontally: boolean =
43
+ subject.left < frame.left && subject.right > frame.right;
44
+
45
+ // is bigger than frame on both axis
46
+ const isTargetBiggerThanFrame: boolean =
47
+ isBiggerVertically && isBiggerHorizontally;
48
+
49
+ if (isTargetBiggerThanFrame) {
50
+ return true;
51
+ }
52
+
53
+ // is bigger on one axis, and partially visible on another
54
+ const isTargetBiggerOnOneAxis: boolean =
55
+ (isBiggerVertically && isPartiallyVisibleHorizontally) ||
56
+ (isBiggerHorizontally && isPartiallyVisibleVertically);
57
+
58
+ return isTargetBiggerOnOneAxis;
59
+ };
60
+ };
@@ -0,0 +1,12 @@
1
+ // @flow
2
+ import { type Position, type Spacing } from 'css-box-model';
3
+ import isWithin from '../is-within';
4
+
5
+ export default function isPositionInFrame(frame: Spacing) {
6
+ const isWithinVertical = isWithin(frame.top, frame.bottom);
7
+ const isWithinHorizontal = isWithin(frame.left, frame.right);
8
+
9
+ return function run(point: Position) {
10
+ return isWithinVertical(point.y) && isWithinHorizontal(point.x);
11
+ };
12
+ }
@@ -0,0 +1,19 @@
1
+ // @flow
2
+ import { type Spacing } from 'css-box-model';
3
+ import type { Axis } from '../../types';
4
+ import isWithin from '../is-within';
5
+ import { vertical } from '../axis';
6
+
7
+ export default (axis: Axis) => (frame: Spacing) => {
8
+ const isWithinVertical = isWithin(frame.top, frame.bottom);
9
+ const isWithinHorizontal = isWithin(frame.left, frame.right);
10
+
11
+ return (subject: Spacing) => {
12
+ if (axis === vertical) {
13
+ return isWithinVertical(subject.top) && isWithinVertical(subject.bottom);
14
+ }
15
+ return (
16
+ isWithinHorizontal(subject.left) && isWithinHorizontal(subject.right)
17
+ );
18
+ };
19
+ };
@@ -0,0 +1,18 @@
1
+ // @flow
2
+ import { type Spacing } from 'css-box-model';
3
+ import isWithin from '../is-within';
4
+
5
+ export default (frame: Spacing) => {
6
+ const isWithinVertical = isWithin(frame.top, frame.bottom);
7
+ const isWithinHorizontal = isWithin(frame.left, frame.right);
8
+
9
+ return (subject: Spacing) => {
10
+ const isContained: boolean =
11
+ isWithinVertical(subject.top) &&
12
+ isWithinVertical(subject.bottom) &&
13
+ isWithinHorizontal(subject.left) &&
14
+ isWithinHorizontal(subject.right);
15
+
16
+ return isContained;
17
+ };
18
+ };
@@ -0,0 +1,102 @@
1
+ // @flow
2
+ import { type Position, type Spacing, type Rect } from 'css-box-model';
3
+ import type { DroppableDimension } from '../../types';
4
+ import isPartiallyVisibleThroughFrame from './is-partially-visible-through-frame';
5
+ import isTotallyVisibleThroughFrame from './is-totally-visible-through-frame';
6
+ import isTotallyVisibleThroughFrameOnAxis from './is-totally-visible-through-frame-on-axis';
7
+ import { offsetByPosition } from '../spacing';
8
+ import { origin } from '../position';
9
+
10
+ // Exact
11
+ export type Args = {
12
+ target: Spacing,
13
+ destination: DroppableDimension,
14
+ viewport: Rect,
15
+ withDroppableDisplacement: boolean,
16
+ shouldCheckDroppable?: boolean,
17
+ shouldCheckViewport?: boolean,
18
+ };
19
+
20
+ type IsVisibleThroughFrameFn = (
21
+ frame: Spacing,
22
+ ) => (subject: Spacing) => boolean;
23
+
24
+ type InternalArgs = Args & {
25
+ isVisibleThroughFrameFn: IsVisibleThroughFrameFn,
26
+ };
27
+
28
+ const getDroppableDisplaced = (
29
+ target: Spacing,
30
+ destination: DroppableDimension,
31
+ ): Spacing => {
32
+ const displacement: Position = destination.frame
33
+ ? destination.frame.scroll.diff.displacement
34
+ : origin;
35
+
36
+ return offsetByPosition(target, displacement);
37
+ };
38
+
39
+ const isVisibleInDroppable = (
40
+ target: Spacing,
41
+ destination: DroppableDimension,
42
+ isVisibleThroughFrameFn: IsVisibleThroughFrameFn,
43
+ ): boolean => {
44
+ // destination subject is totally hidden by frame
45
+ // this should never happen - but just guarding against it
46
+ if (!destination.subject.active) {
47
+ return false;
48
+ }
49
+
50
+ // When considering if the target is visible in the droppable we need
51
+ // to consider the change in scroll of the droppable. We need to
52
+ // adjust for the scroll as the clipped viewport takes into account
53
+ // the scroll of the droppable.
54
+
55
+ return isVisibleThroughFrameFn(destination.subject.active)(target);
56
+ };
57
+
58
+ const isVisibleInViewport = (
59
+ target: Spacing,
60
+ viewport: Rect,
61
+ isVisibleThroughFrameFn: IsVisibleThroughFrameFn,
62
+ ): boolean => isVisibleThroughFrameFn(viewport)(target);
63
+
64
+ const isVisible = ({
65
+ target: toBeDisplaced,
66
+ destination,
67
+ viewport,
68
+ withDroppableDisplacement,
69
+ isVisibleThroughFrameFn,
70
+ }: InternalArgs): boolean => {
71
+ const displacedTarget: Spacing = withDroppableDisplacement
72
+ ? getDroppableDisplaced(toBeDisplaced, destination)
73
+ : toBeDisplaced;
74
+
75
+ return (
76
+ isVisibleInDroppable(
77
+ displacedTarget,
78
+ destination,
79
+ isVisibleThroughFrameFn,
80
+ ) && isVisibleInViewport(displacedTarget, viewport, isVisibleThroughFrameFn)
81
+ );
82
+ };
83
+
84
+ export const isPartiallyVisible = (args: Args): boolean =>
85
+ isVisible({
86
+ ...args,
87
+ isVisibleThroughFrameFn: isPartiallyVisibleThroughFrame,
88
+ });
89
+
90
+ export const isTotallyVisible = (args: Args): boolean =>
91
+ isVisible({
92
+ ...args,
93
+ isVisibleThroughFrameFn: isTotallyVisibleThroughFrame,
94
+ });
95
+
96
+ export const isTotallyVisibleOnAxis = (args: Args): boolean =>
97
+ isVisible({
98
+ ...args,
99
+ isVisibleThroughFrameFn: isTotallyVisibleThroughFrameOnAxis(
100
+ args.destination.axis,
101
+ ),
102
+ });
@@ -0,0 +1,15 @@
1
+ // @flow
2
+ import type { Position } from 'css-box-model';
3
+ import type { DroppableDimension, Viewport } from '../../types';
4
+ import withDroppableDisplacement from './with-droppable-displacement';
5
+ import withViewportDisplacement from './with-viewport-displacement';
6
+
7
+ export default (
8
+ page: Position,
9
+ droppable: DroppableDimension,
10
+ viewport: Viewport,
11
+ ): Position =>
12
+ withDroppableDisplacement(
13
+ droppable,
14
+ withViewportDisplacement(viewport, page),
15
+ );
@@ -0,0 +1,13 @@
1
+ // @flow
2
+ import { type Position } from 'css-box-model';
3
+ import { add } from '../position';
4
+ import type { Scrollable, DroppableDimension } from '../../types';
5
+
6
+ export default (droppable: DroppableDimension, point: Position): Position => {
7
+ const frame: Scrollable | null = droppable.frame;
8
+ if (!frame) {
9
+ return point;
10
+ }
11
+
12
+ return add(point, frame.scroll.diff.displacement);
13
+ };
@@ -0,0 +1,13 @@
1
+ // @flow
2
+ import { type Rect } from 'css-box-model';
3
+ import type { Scrollable, DroppableDimension } from '../../types';
4
+ import { offsetRectByPosition } from '../rect';
5
+
6
+ export default (droppable: DroppableDimension, area: Rect): Rect => {
7
+ const frame: Scrollable | null = droppable.frame;
8
+ if (!frame) {
9
+ return area;
10
+ }
11
+
12
+ return offsetRectByPosition(area, frame.scroll.diff.value);
13
+ };
@@ -0,0 +1,7 @@
1
+ // @flow
2
+ import { type Position } from 'css-box-model';
3
+ import type { Viewport } from '../../types';
4
+ import { add } from '../position';
5
+
6
+ export default (viewport: Viewport, point: Position): Position =>
7
+ add(viewport.scroll.diff.displacement, point);