@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,320 @@
1
+
2
+ import type { Position } from 'css-box-model';
3
+ import type {
4
+ DroppableDimension,
5
+ Viewport,
6
+ Scrollable,
7
+ } from '../../types';
8
+
9
+ import { add, apply, isEqual, origin } from '../position';
10
+
11
+ type CanPartiallyScrollArgs = {
12
+ max: Position;
13
+ current: Position;
14
+ change: Position;
15
+ };
16
+
17
+ const smallestSigned = apply((value: number) => {
18
+ if (value === 0) {
19
+ return 0;
20
+ }
21
+ return value > 0 ? 1 : -1;
22
+ });
23
+
24
+ type GetRemainderArgs = {
25
+ current: Position;
26
+ max: Position;
27
+ change: Position;
28
+ };
29
+
30
+ // We need to figure out how much of the movement
31
+ // cannot be done with a scroll
32
+ export const getOverlap = (() => {
33
+ const getRemainder = (target: number, max: number): number => {
34
+ if (target < 0) {
35
+ return target;
36
+ }
37
+ if (target > max) {
38
+ return target - max;
39
+ }
40
+ return 0;
41
+ };
42
+
43
+ return ({ current, max, change }: GetRemainderArgs): Position | null => {
44
+ const targetScroll: Position = add(current, change);
45
+
46
+ const overlap: Position = {
47
+ x: getRemainder(targetScroll.x, max.x),
48
+ y: getRemainder(targetScroll.y, max.y),
49
+ };
50
+
51
+ if (isEqual(overlap, origin)) {
52
+ return null;
53
+ }
54
+
55
+ return overlap;
56
+ };
57
+ })();
58
+
59
+ export const canPartiallyScroll = ({
60
+ max: rawMax,
61
+ current,
62
+ change,
63
+ }: CanPartiallyScrollArgs): boolean => {
64
+ const max: Position = {
65
+ x: Math.max(current.x, rawMax.x),
66
+ y: Math.max(current.y, rawMax.y),
67
+ };
68
+
69
+ const smallestChange: Position = smallestSigned(change);
70
+
71
+ const overlap: Position | null = getOverlap({
72
+ max,
73
+ current,
74
+ change: smallestChange,
75
+ });
76
+
77
+ if (!overlap) {
78
+ return true;
79
+ }
80
+
81
+ if (smallestChange.x !== 0 && overlap.x === 0) {
82
+ return true;
83
+ }
84
+
85
+ if (smallestChange.y !== 0 && overlap.y === 0) {
86
+ return true;
87
+ }
88
+
89
+ return false;
90
+ };
91
+
92
+ export const canScrollWindow = (
93
+ viewport: Viewport,
94
+ change: Position,
95
+ ): boolean =>
96
+ canPartiallyScroll({
97
+ current: viewport.scroll.current,
98
+ max: viewport.scroll.max,
99
+ change,
100
+ });
101
+
102
+ export const getWindowOverlap = (
103
+ viewport: Viewport,
104
+ change: Position,
105
+ ): Position | null => {
106
+ if (!canScrollWindow(viewport, change)) {
107
+ return null;
108
+ }
109
+
110
+ const max: Position = viewport.scroll.max;
111
+ const current: Position = viewport.scroll.current;
112
+
113
+ return getOverlap({
114
+ current,
115
+ max,
116
+ change,
117
+ });
118
+ };
119
+
120
+ export const canScrollDroppable = (
121
+ droppable: DroppableDimension,
122
+ change: Position,
123
+ ): boolean => {
124
+
125
+ const frame: Scrollable | null = droppable.frame;
126
+
127
+ if (!frame) {
128
+ return false;
129
+ }
130
+
131
+ return canPartiallyScroll({
132
+ current: frame.scroll.current,
133
+ max: frame.scroll.max,
134
+ change,
135
+ });
136
+ };
137
+
138
+ export const getDroppableOverlap = (
139
+ droppable: DroppableDimension,
140
+ change: Position,
141
+ ): Position | null => {
142
+
143
+ const frame: Scrollable | null = droppable.frame;
144
+
145
+ if (!frame) {
146
+ return null;
147
+ }
148
+
149
+ if (!canScrollDroppable(droppable, change)) {
150
+ return null;
151
+ }
152
+
153
+ return getOverlap({
154
+ current: frame.scroll.current,
155
+ max: frame.scroll.max,
156
+ change,
157
+ });
158
+ };
159
+
160
+
161
+ // // @flow
162
+ // import { type Position } from 'css-box-model';
163
+ // import { add, apply, isEqual, origin } from '../position';
164
+ // import type { DroppableDimension, Viewport, Scrollable } from '../../types';
165
+
166
+ // type CanPartiallyScrollArgs = {|
167
+ // max: Position,
168
+ // current: Position,
169
+ // change: Position,
170
+ // |};
171
+
172
+ // const smallestSigned = apply((value: number) => {
173
+ // if (value === 0) {
174
+ // return 0;
175
+ // }
176
+ // return value > 0 ? 1 : -1;
177
+ // });
178
+
179
+ // type GetRemainderArgs = {|
180
+ // current: Position,
181
+ // max: Position,
182
+ // change: Position,
183
+ // |};
184
+
185
+ // // We need to figure out how much of the movement
186
+ // // cannot be done with a scroll
187
+ // export const getOverlap = (() => {
188
+ // const getRemainder = (target: number, max: number): number => {
189
+ // if (target < 0) {
190
+ // return target;
191
+ // }
192
+ // if (target > max) {
193
+ // return target - max;
194
+ // }
195
+ // return 0;
196
+ // };
197
+
198
+ // return ({ current, max, change }: GetRemainderArgs): ?Position => {
199
+ // const targetScroll: Position = add(current, change);
200
+
201
+ // const overlap: Position = {
202
+ // x: getRemainder(targetScroll.x, max.x),
203
+ // y: getRemainder(targetScroll.y, max.y),
204
+ // };
205
+
206
+ // if (isEqual(overlap, origin)) {
207
+ // return null;
208
+ // }
209
+
210
+ // return overlap;
211
+ // };
212
+ // })();
213
+
214
+ // export const canPartiallyScroll = ({
215
+ // max: rawMax,
216
+ // current,
217
+ // change,
218
+ // }: CanPartiallyScrollArgs): boolean => {
219
+ // // It is possible for the max scroll to be greater than the current scroll
220
+ // // when there are scrollbars on the cross axis. We adjust for this by
221
+ // // increasing the max scroll point if needed
222
+ // // This will allow movements backwards even if the current scroll is greater than the max scroll
223
+ // const max: Position = {
224
+ // x: Math.max(current.x, rawMax.x),
225
+ // y: Math.max(current.y, rawMax.y),
226
+ // };
227
+
228
+ // // Only need to be able to move the smallest amount in the desired direction
229
+ // const smallestChange: Position = smallestSigned(change);
230
+
231
+ // const overlap: ?Position = getOverlap({
232
+ // max,
233
+ // current,
234
+ // change: smallestChange,
235
+ // });
236
+
237
+ // // no overlap at all - we can move there!
238
+ // if (!overlap) {
239
+ // return true;
240
+ // }
241
+
242
+ // // if there was an x value, but there is no x overlap - then we can scroll on the x!
243
+ // if (smallestChange.x !== 0 && overlap.x === 0) {
244
+ // return true;
245
+ // }
246
+
247
+ // // if there was an y value, but there is no y overlap - then we can scroll on the y!
248
+ // if (smallestChange.y !== 0 && overlap.y === 0) {
249
+ // return true;
250
+ // }
251
+
252
+ // return false;
253
+ // };
254
+
255
+ // export const canScrollWindow = (
256
+ // viewport: Viewport,
257
+ // change: Position,
258
+ // ): boolean =>
259
+ // canPartiallyScroll({
260
+ // current: viewport.scroll.current,
261
+ // max: viewport.scroll.max,
262
+ // change,
263
+ // });
264
+
265
+ // export const getWindowOverlap = (
266
+ // viewport: Viewport,
267
+ // change: Position,
268
+ // ): ?Position => {
269
+ // if (!canScrollWindow(viewport, change)) {
270
+ // return null;
271
+ // }
272
+
273
+ // const max: Position = viewport.scroll.max;
274
+ // const current: Position = viewport.scroll.current;
275
+
276
+ // return getOverlap({
277
+ // current,
278
+ // max,
279
+ // change,
280
+ // });
281
+ // };
282
+
283
+ // export const canScrollDroppable = (
284
+ // droppable: DroppableDimension,
285
+ // change: Position,
286
+ // ): boolean => {
287
+ // const frame: ?Scrollable = droppable.frame;
288
+
289
+ // // Cannot scroll when there is no scrollable
290
+ // if (!frame) {
291
+ // return false;
292
+ // }
293
+
294
+ // return canPartiallyScroll({
295
+ // current: frame.scroll.current,
296
+ // max: frame.scroll.max,
297
+ // change,
298
+ // });
299
+ // };
300
+
301
+ // export const getDroppableOverlap = (
302
+ // droppable: DroppableDimension,
303
+ // change: Position,
304
+ // ): ?Position => {
305
+ // const frame: ?Scrollable = droppable.frame;
306
+
307
+ // if (!frame) {
308
+ // return null;
309
+ // }
310
+
311
+ // if (!canScrollDroppable(droppable, change)) {
312
+ // return null;
313
+ // }
314
+
315
+ // return getOverlap({
316
+ // current: frame.scroll.current,
317
+ // max: frame.scroll.max,
318
+ // change,
319
+ // });
320
+ // };
@@ -0,0 +1,25 @@
1
+ // @flow
2
+
3
+ // Values used to control how the fluid auto scroll feels
4
+ const config = {
5
+ // percentage distance from edge of container:
6
+ startFromPercentage: 0.25,
7
+ maxScrollAtPercentage: 0.05,
8
+ // pixels per frame
9
+ maxPixelScroll: 28,
10
+
11
+ // A function used to ease a percentage value
12
+ // A simple linear function would be: (percentage) => percentage;
13
+ // percentage is between 0 and 1
14
+ // result must be between 0 and 1
15
+ ease: (percentage: number): number => Math.pow(percentage, 2),
16
+
17
+ durationDampening: {
18
+ // ms: how long to dampen the speed of an auto scroll from the start of a drag
19
+ stopDampeningAt: 1200,
20
+ // ms: when to start accelerating the reduction of duration dampening
21
+ accelerateAt: 360,
22
+ },
23
+ };
24
+
25
+ export default config;
@@ -0,0 +1,77 @@
1
+ // @flow
2
+ import memoizeOne from 'memoize-one';
3
+ import { type Position } from 'css-box-model';
4
+ import type {
5
+ DroppableDimension,
6
+ DroppableDimensionMap,
7
+ DroppableId,
8
+ } from '../../../types';
9
+ import { invariant } from '../../../invariant';
10
+ import isPositionInFrame from '../../visibility/is-position-in-frame';
11
+ import { toDroppableList } from '../../dimension-structures';
12
+ import { find } from '../../../native-with-fallback';
13
+
14
+ const getScrollableDroppables = memoizeOne(
15
+ (droppables: DroppableDimensionMap): DroppableDimension[] =>
16
+ toDroppableList(droppables).filter(
17
+ (droppable: DroppableDimension): boolean => {
18
+ // exclude disabled droppables
19
+ if (!droppable.isEnabled) {
20
+ return false;
21
+ }
22
+
23
+ // only want droppables that are scrollable
24
+ if (!droppable.frame) {
25
+ return false;
26
+ }
27
+
28
+ return true;
29
+ },
30
+ ),
31
+ );
32
+
33
+ const getScrollableDroppableOver = (
34
+ target: Position,
35
+ droppables: DroppableDimensionMap,
36
+ ): DroppableDimension | undefined => {
37
+ const maybe: DroppableDimension | undefined = find(
38
+ getScrollableDroppables(droppables),
39
+ (droppable: DroppableDimension): boolean => {
40
+ invariant(droppable.frame, 'Invalid result');
41
+ return isPositionInFrame(droppable.frame.pageMarginBox)(target);
42
+ },
43
+ );
44
+
45
+ return maybe;
46
+ };
47
+
48
+ type Api = {
49
+ center: Position,
50
+ destination: DroppableId | null,
51
+ droppables: DroppableDimensionMap,
52
+ };
53
+
54
+ export default ({
55
+ center,
56
+ destination,
57
+ droppables,
58
+ }: Api): DroppableDimension | null | undefined => {
59
+ // We need to scroll the best droppable frame we can so that the
60
+ // placeholder buffer logic works correctly
61
+
62
+ if (destination) {
63
+ const dimension: DroppableDimension = droppables[destination];
64
+ if (!dimension.frame) {
65
+ return null;
66
+ }
67
+ return dimension;
68
+ }
69
+
70
+ // 2. If we are not over a droppable - are we over a droppable frame?
71
+ const dimension: DroppableDimension | undefined = getScrollableDroppableOver(
72
+ center,
73
+ droppables,
74
+ );
75
+
76
+ return dimension;
77
+ };
@@ -0,0 +1,39 @@
1
+ // @flow
2
+ import type { Position, Rect } from 'css-box-model';
3
+ import type { Scrollable, DroppableDimension } from '../../../types';
4
+ import getScroll from './get-scroll';
5
+ import { canScrollDroppable } from '../can-scroll';
6
+
7
+ type Args = {
8
+ droppable: DroppableDimension,
9
+ subject: Rect,
10
+ center: Position,
11
+ dragStartTime: number,
12
+ shouldUseTimeDampening: boolean,
13
+ };
14
+
15
+ export default ({
16
+ droppable,
17
+ subject,
18
+ center,
19
+ dragStartTime,
20
+ shouldUseTimeDampening,
21
+ }: Args): Position | null => {
22
+ // We know this has a closestScrollable
23
+ const frame: Scrollable | null = droppable.frame;
24
+
25
+ // this should never happen - just being safe
26
+ if (!frame) {
27
+ return null;
28
+ }
29
+
30
+ const scroll: Position | null = getScroll({
31
+ dragStartTime,
32
+ container: frame.pageMarginBox,
33
+ subject,
34
+ center,
35
+ shouldUseTimeDampening,
36
+ });
37
+
38
+ return scroll && canScrollDroppable(droppable, scroll) ? scroll : null;
39
+ };
@@ -0,0 +1,25 @@
1
+ // @flow
2
+ import { warning } from '../../../dev-warning';
3
+
4
+ type Args = {
5
+ startOfRange: number,
6
+ endOfRange: number,
7
+ current: number,
8
+ };
9
+
10
+ export default ({ startOfRange, endOfRange, current }: Args): number => {
11
+ const range: number = endOfRange - startOfRange;
12
+
13
+ if (range === 0) {
14
+ warning(`
15
+ Detected distance range of 0 in the fluid auto scroller
16
+ This is unexpected and would cause a divide by 0 issue.
17
+ Not allowing an auto scroll
18
+ `);
19
+ return 0;
20
+ }
21
+
22
+ const currentInRange: number = current - startOfRange;
23
+ const percentage: number = currentInRange / range;
24
+ return percentage;
25
+ };
@@ -0,0 +1,30 @@
1
+ // @flow
2
+ import type { Rect, Position } from 'css-box-model';
3
+
4
+ type Args = {
5
+ container: Rect,
6
+ subject: Rect,
7
+ proposedScroll: Position,
8
+ };
9
+
10
+ export default ({ container, subject, proposedScroll }: Args): Position | null | undefined => {
11
+ const isTooBigVertically: boolean = subject.height > container.height;
12
+ const isTooBigHorizontally: boolean = subject.width > container.width;
13
+
14
+ // not too big on any axis
15
+ if (!isTooBigHorizontally && !isTooBigVertically) {
16
+ return proposedScroll;
17
+ }
18
+
19
+ // too big on both axis
20
+ if (isTooBigHorizontally && isTooBigVertically) {
21
+ return null;
22
+ }
23
+
24
+ // Only too big on one axis
25
+ // Exclude the axis that we cannot scroll on
26
+ return {
27
+ x: isTooBigHorizontally ? 0 : proposedScroll.x,
28
+ y: isTooBigVertically ? 0 : proposedScroll.y,
29
+ };
30
+ };
@@ -0,0 +1,37 @@
1
+ // @flow
2
+ import getPercentage from '../../get-percentage';
3
+ import config from '../../config';
4
+ import minScroll from './min-scroll';
5
+
6
+ const accelerateAt: number = config.durationDampening.accelerateAt;
7
+ const stopAt: number = config.durationDampening.stopDampeningAt;
8
+
9
+ export default (proposedScroll: number, dragStartTime: number): number => {
10
+ const startOfRange: number = dragStartTime;
11
+ const endOfRange: number = stopAt;
12
+ const now: number = Date.now();
13
+ const runTime: number = now - startOfRange;
14
+
15
+ // we have finished the time dampening period
16
+ if (runTime >= stopAt) {
17
+ return proposedScroll;
18
+ }
19
+
20
+ // Up to this point we know there is a proposed scroll
21
+ // but we have not reached our accelerate point
22
+ // Return the minimum amount of scroll
23
+ if (runTime < accelerateAt) {
24
+ return minScroll;
25
+ }
26
+
27
+ const betweenAccelerateAtAndStopAtPercentage: number = getPercentage({
28
+ startOfRange: accelerateAt,
29
+ endOfRange,
30
+ current: runTime,
31
+ });
32
+
33
+ const scroll: number =
34
+ proposedScroll * config.ease(betweenAccelerateAtAndStopAtPercentage);
35
+
36
+ return Math.ceil(scroll);
37
+ };
@@ -0,0 +1,25 @@
1
+ // @flow
2
+ import type { Rect } from 'css-box-model';
3
+ import config from '../../config';
4
+ import type { Axis } from '../../../../../types';
5
+
6
+ // all in pixels
7
+ export type DistanceThresholds = {
8
+ startScrollingFrom: number
9
+ maxScrollValueAt: number
10
+ };
11
+
12
+ // converts the percentages in the config into actual pixel values
13
+ export default (container: Rect, axis: Axis): DistanceThresholds => {
14
+ const startScrollingFrom: number =
15
+ container[axis.size] * config.startFromPercentage;
16
+ const maxScrollValueAt: number =
17
+ container[axis.size] * config.maxScrollAtPercentage;
18
+
19
+ const thresholds: DistanceThresholds = {
20
+ startScrollingFrom,
21
+ maxScrollValueAt,
22
+ };
23
+
24
+ return thresholds;
25
+ };
@@ -0,0 +1,61 @@
1
+ // @flow
2
+ import { type DistanceThresholds } from './get-distance-thresholds';
3
+ import getPercentage from '../../get-percentage';
4
+ import config from '../../config';
5
+ import minScroll from './min-scroll';
6
+
7
+ export default (
8
+ distanceToEdge: number,
9
+ thresholds: DistanceThresholds,
10
+ ): number => {
11
+ /*
12
+ // This function only looks at the distance to one edge
13
+ // Example: looking at bottom edge
14
+ |----------------------------------|
15
+ | |
16
+ | |
17
+ | |
18
+ | |
19
+ | | => no scroll in this range
20
+ | |
21
+ | |
22
+ | startScrollingFrom (eg 100px) |
23
+ | |
24
+ | | => increased scroll value the closer to maxScrollValueAt
25
+ | maxScrollValueAt (eg 10px) |
26
+ | | => max scroll value in this range
27
+ |----------------------------------|
28
+ */
29
+
30
+ // too far away to auto scroll
31
+ if (distanceToEdge > thresholds.startScrollingFrom) {
32
+ return 0;
33
+ }
34
+
35
+ // use max speed when on or over boundary
36
+ if (distanceToEdge <= thresholds.maxScrollValueAt) {
37
+ return config.maxPixelScroll;
38
+ }
39
+
40
+ // when just going on the boundary return the minimum integer
41
+ if (distanceToEdge === thresholds.startScrollingFrom) {
42
+ return minScroll;
43
+ }
44
+
45
+ // to get the % past startScrollingFrom we will calculate
46
+ // the % the value is from maxScrollValueAt and then invert it
47
+ const percentageFromMaxScrollValueAt: number = getPercentage({
48
+ startOfRange: thresholds.maxScrollValueAt,
49
+ endOfRange: thresholds.startScrollingFrom,
50
+ current: distanceToEdge,
51
+ });
52
+
53
+ const percentageFromStartScrollingFrom: number =
54
+ 1 - percentageFromMaxScrollValueAt;
55
+
56
+ const scroll: number =
57
+ config.maxPixelScroll * config.ease(percentageFromStartScrollingFrom);
58
+
59
+ // scroll will always be a positive integer
60
+ return Math.ceil(scroll);
61
+ };
@@ -0,0 +1,39 @@
1
+ // @flow
2
+ import { type DistanceThresholds } from './get-distance-thresholds';
3
+ import getValueFromDistance from './get-value-from-distance';
4
+ import dampenValueByTime from './dampen-value-by-time';
5
+ import minScroll from './min-scroll';
6
+
7
+ type Args = {
8
+ distanceToEdge: number,
9
+ thresholds: DistanceThresholds,
10
+ dragStartTime: number,
11
+ shouldUseTimeDampening: boolean,
12
+ };
13
+
14
+ export default ({
15
+ distanceToEdge,
16
+ thresholds,
17
+ dragStartTime,
18
+ shouldUseTimeDampening,
19
+ }: Args): number => {
20
+ const scroll: number = getValueFromDistance(distanceToEdge, thresholds);
21
+
22
+ // not enough distance to trigger a minimum scroll
23
+ // we can bail here
24
+ if (scroll === 0) {
25
+ return 0;
26
+ }
27
+
28
+ // Dampen an auto scroll speed based on duration of drag
29
+
30
+ if (!shouldUseTimeDampening) {
31
+ return scroll;
32
+ }
33
+
34
+ // Once we know an auto scroll should occur based on distance,
35
+ // we must let at least 1px through to trigger a scroll event an
36
+ // another auto scroll call
37
+
38
+ return Math.max(dampenValueByTime(scroll, dragStartTime), minScroll);
39
+ };