@helpdice/draggable 0.0.0-stage → 0.0.2

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 +9925 -0
  4. package/dist/draggable.cjs.js.map +1 -0
  5. package/dist/draggable.esm.js +9899 -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,29 @@
1
+ // @flow
2
+ import type { State, DraggableId } from '../types';
3
+
4
+ export default (state: State, id: DraggableId): boolean => {
5
+ // Ready to go!
6
+ if (state.phase === 'IDLE') {
7
+ return true;
8
+ }
9
+
10
+ // Can lift depending on the type of drop animation
11
+ if (state.phase !== 'DROP_ANIMATING') {
12
+ return false;
13
+ }
14
+
15
+ // - For a user drop we allow the user to drag other Draggables
16
+ // immediately as items are most likely already in their home
17
+ // - For a cancel items will be moving back to their original position
18
+ // as such it is a cleaner experience to block them from dragging until
19
+ // the drop animation is complete. Otherwise they will be grabbing
20
+ // items not in their original position which can lead to bad visuals
21
+ // Not allowing dragging of the dropping draggable
22
+ if (state.completed.result.draggableId === id) {
23
+ return false;
24
+ }
25
+
26
+ // if dropping - allow lifting
27
+ // if cancelling - disallow lifting
28
+ return state.completed.result.reason === 'DROP';
29
+ };
@@ -0,0 +1,98 @@
1
+ // @flow
2
+ /* eslint-disable no-underscore-dangle */
3
+ import { applyMiddleware, createStore, compose } from 'redux';
4
+ import reducer from './reducer';
5
+ import lift from './middleware/lift';
6
+ import style from './middleware/style';
7
+ import drop from './middleware/drop/drop-middleware';
8
+ import scrollListener from './middleware/scroll-listener';
9
+ import responders from './middleware/responders/responders-middleware';
10
+ import dropAnimationFinish from './middleware/drop/drop-animation-finish-middleware';
11
+ import dropAnimationFlushOnScroll from './middleware/drop/drop-animation-flush-on-scroll-middleware';
12
+ import dimensionMarshalStopper from './middleware/dimension-marshal-stopper';
13
+ import focus from './middleware/focus';
14
+ import autoScroll from './middleware/auto-scroll';
15
+ import pendingDrop from './middleware/pending-drop';
16
+ import type { DimensionMarshal } from './dimension-marshal/dimension-marshal-types';
17
+ import type { FocusMarshal } from '../view/use-focus-marshal/focus-marshal-types';
18
+ import type { StyleMarshal } from '../view/use-style-marshal/style-marshal-types';
19
+ import type { AutoScroller } from './auto-scroller/auto-scroller-types';
20
+ import type { Responders, Announce } from '../types';
21
+ import type { Store } from './store-types';
22
+
23
+ // We are checking if window is available before using it.
24
+ // This is needed for universal apps that render the component server side.
25
+ // Details: https://github.com/zalmoxisus/redux-devtools-extension#12-advanced-store-setup
26
+ const composeEnhancers =
27
+ process.env.NODE_ENV !== 'production' &&
28
+ typeof window !== 'undefined' &&
29
+ window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
30
+ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({
31
+ name: 'draggable',
32
+ })
33
+ : compose;
34
+
35
+ // Exact
36
+ type Args = {
37
+ dimensionMarshal: DimensionMarshal,
38
+ focusMarshal: FocusMarshal,
39
+ styleMarshal: StyleMarshal,
40
+ getResponders: () => Responders,
41
+ announce: Announce,
42
+ autoScroller: AutoScroller,
43
+ };
44
+
45
+ export default ({
46
+ dimensionMarshal,
47
+ focusMarshal,
48
+ styleMarshal,
49
+ getResponders,
50
+ announce,
51
+ autoScroller,
52
+ }: Args): Store =>
53
+ createStore(
54
+ reducer,
55
+ composeEnhancers(
56
+ applyMiddleware(
57
+ // ## Debug middleware
58
+
59
+ // > uncomment to use
60
+ // debugging logger
61
+ // require('../debug/middleware/log').default('light'),
62
+ // // user timing api
63
+ // require('../debug/middleware/user-timing').default,
64
+ // debugging timer
65
+ // require('../debug/middleware/action-timing').default,
66
+ // average action timer
67
+ // require('../debug/middleware/action-timing-average').default(200),
68
+
69
+ // ## Application middleware
70
+
71
+ // Style updates do not cause more actions. It is important to update styles
72
+ // before responders are called: specifically the onDragEnd responder. We need to clear
73
+ // the transition styles off the elements before a reorder to prevent strange
74
+ // post drag animations in firefox. Even though we clear the transition off
75
+ // a Draggable - if it is done after a reorder firefox will still apply the
76
+ // transition.
77
+ // Must be called before dimension marshal for lifting to apply collecting styles
78
+ style(styleMarshal),
79
+ // Stop the dimension marshal collecting anything
80
+ // when moving into a phase where collection is no longer needed.
81
+ // We need to stop the marshal before responders fire as responders can cause
82
+ // dimension registration changes in response to reordering
83
+ dimensionMarshalStopper(dimensionMarshal),
84
+ // Fire application responders in response to drag changes
85
+ lift(dimensionMarshal),
86
+ drop,
87
+ // When a drop animation finishes - fire a drop complete
88
+ dropAnimationFinish,
89
+ dropAnimationFlushOnScroll,
90
+ pendingDrop,
91
+ autoScroll(autoScroller),
92
+ scrollListener,
93
+ focus(focusMarshal),
94
+ // Fire responders for consumers (after update to store)
95
+ responders(getResponders, announce),
96
+ ),
97
+ ),
98
+ );
@@ -0,0 +1,9 @@
1
+ // @flow
2
+ import type { DraggableId, LiftEffect } from '../types';
3
+
4
+ export default function didStartAfterCritical(
5
+ draggableId: DraggableId,
6
+ afterCritical: LiftEffect,
7
+ ): boolean {
8
+ return Boolean(afterCritical.effected[draggableId]);
9
+ }
@@ -0,0 +1,49 @@
1
+ // @flow
2
+ import type { Position } from 'css-box-model';
3
+ import type {
4
+ UpdateDroppableScrollArgs,
5
+ UpdateDroppableIsEnabledArgs,
6
+ UpdateDroppableIsCombineEnabledArgs,
7
+ } from '../action-creators';
8
+ import type {
9
+ DroppableId,
10
+ Critical,
11
+ DimensionMap,
12
+ LiftRequest,
13
+ Published,
14
+ Viewport,
15
+ } from '../../types';
16
+
17
+ // Exact
18
+ export type StartPublishingResult = {
19
+ critical: Critical,
20
+ dimensions: DimensionMap,
21
+ viewport: Viewport,
22
+ };
23
+
24
+ // Exact
25
+ export type DimensionMarshal = {
26
+ // it is possible for a droppable to change whether it is enabled during a drag
27
+ updateDroppableIsEnabled: (id: DroppableId, isEnabled: boolean) => void,
28
+ // it is also possible to update whether combining is enabled
29
+ updateDroppableIsCombineEnabled: (
30
+ id: DroppableId,
31
+ isEnabled: boolean,
32
+ ) => void,
33
+ updateDroppableScroll: (id: DroppableId, newScroll: Position) => void,
34
+ scrollDroppable: (id: DroppableId, change: Position) => void,
35
+ // Entry
36
+ startPublishing: (request: LiftRequest) => StartPublishingResult,
37
+ stopPublishing: () => void,
38
+ };
39
+
40
+ // Exact
41
+ export type Callbacks = {
42
+ collectionStarting: () => unknown,
43
+ publishWhileDragging: (args: Published) => unknown,
44
+ updateDroppableScroll: (args: UpdateDroppableScrollArgs) => unknown,
45
+ updateDroppableIsEnabled: (args: UpdateDroppableIsEnabledArgs) => unknown,
46
+ updateDroppableIsCombineEnabled: (
47
+ args: UpdateDroppableIsCombineEnabledArgs,
48
+ ) => unknown,
49
+ };
@@ -0,0 +1,219 @@
1
+ // @flow
2
+ import { type Position } from 'css-box-model';
3
+ import { invariant } from '../../invariant';
4
+ import type {
5
+ DimensionMarshal,
6
+ Callbacks,
7
+ StartPublishingResult,
8
+ } from './dimension-marshal-types';
9
+ import createPublisher, {
10
+ type WhileDraggingPublisher,
11
+ } from './while-dragging-publisher';
12
+ import getInitialPublish from './get-initial-publish';
13
+ import type {
14
+ Registry,
15
+ DroppableEntry,
16
+ DraggableEntry,
17
+ Subscriber,
18
+ Unsubscribe,
19
+ RegistryEvent,
20
+ } from '../registry/registry-types';
21
+ import type {
22
+ DroppableId,
23
+ DroppableDescriptor,
24
+ LiftRequest,
25
+ Critical,
26
+ DraggableDescriptor,
27
+ } from '../../types';
28
+ import { warning } from '../../dev-warning';
29
+
30
+ // Exact
31
+ type Collection = {
32
+ critical: Critical,
33
+ unsubscribe: Unsubscribe,
34
+ };
35
+
36
+ function shouldPublishUpdate(
37
+ registry: Registry,
38
+ dragging: DraggableDescriptor,
39
+ entry: DraggableEntry,
40
+ ): boolean {
41
+ // do not publish updates for the critical draggable
42
+ if (entry.descriptor.id === dragging.id) {
43
+ return false;
44
+ }
45
+ // do not publish updates for draggables that are not of a type that we care about
46
+ if (entry.descriptor.type !== dragging.type) {
47
+ return false;
48
+ }
49
+
50
+ const home: DroppableEntry = registry.droppable.getById(
51
+ entry.descriptor.droppableId,
52
+ );
53
+
54
+ if (home.descriptor.mode !== 'virtual') {
55
+ warning(`
56
+ You are attempting to add or remove a Draggable [id: ${entry.descriptor.id}]
57
+ while a drag is occurring. This is only supported for virtual lists.
58
+
59
+ See https://github.com/atlassian/react-beautiful-dnd/blob/master/docs/patterns/virtual-lists.md
60
+ `);
61
+ return false;
62
+ }
63
+
64
+ return true;
65
+ }
66
+
67
+ export default (registry: Registry, callbacks: Callbacks) => {
68
+ let collection: Collection | null | undefined = null;
69
+
70
+ const publisher: WhileDraggingPublisher = createPublisher({
71
+ callbacks: {
72
+ publish: callbacks.publishWhileDragging,
73
+ collectionStarting: callbacks.collectionStarting,
74
+ },
75
+ registry,
76
+ });
77
+
78
+ const updateDroppableIsEnabled = (id: DroppableId, isEnabled: boolean) => {
79
+ invariant(
80
+ registry.droppable.exists(id),
81
+ `Cannot update is enabled flag of Droppable ${id} as it is not registered`,
82
+ );
83
+
84
+ // no need to update the application state if a collection is not occurring
85
+ if (!collection) {
86
+ return;
87
+ }
88
+
89
+ // At this point a non primary droppable dimension might not yet be published
90
+ // but may have its enabled state changed. For now we still publish this change
91
+ // and let the reducer exit early if it cannot find the dimension in the state.
92
+ callbacks.updateDroppableIsEnabled({ id, isEnabled });
93
+ };
94
+
95
+ const updateDroppableIsCombineEnabled = (
96
+ id: DroppableId,
97
+ isCombineEnabled: boolean,
98
+ ) => {
99
+ // no need to update
100
+ if (!collection) {
101
+ return;
102
+ }
103
+
104
+ invariant(
105
+ registry.droppable.exists(id),
106
+ `Cannot update isCombineEnabled flag of Droppable ${id} as it is not registered`,
107
+ );
108
+
109
+ callbacks.updateDroppableIsCombineEnabled({ id, isCombineEnabled });
110
+ };
111
+
112
+ const updateDroppableScroll = (id: DroppableId, newScroll: Position) => {
113
+ // no need to update the application state if a collection is not occurring
114
+ if (!collection) {
115
+ return;
116
+ }
117
+
118
+ invariant(
119
+ registry.droppable.exists(id),
120
+ `Cannot update the scroll on Droppable ${id} as it is not registered`,
121
+ );
122
+
123
+ callbacks.updateDroppableScroll({ id, newScroll });
124
+ };
125
+
126
+ const scrollDroppable = (id: DroppableId, change: Position) => {
127
+ if (!collection) {
128
+ return;
129
+ }
130
+ registry.droppable.getById(id).callbacks.scroll(change);
131
+ };
132
+
133
+ const stopPublishing = () => {
134
+ // This function can be called defensively
135
+ if (!collection) {
136
+ return;
137
+ }
138
+ // Stop any pending dom collections or publish
139
+ publisher.stop();
140
+
141
+ // Tell all droppables to stop watching scroll
142
+ // all good if they where not already listening
143
+ const home: DroppableDescriptor = collection.critical.droppable;
144
+ registry.droppable
145
+ .getAllByType(home.type)
146
+ .forEach((entry: DroppableEntry) => entry.callbacks.dragStopped());
147
+
148
+ // Unsubscribe from registry updates
149
+ collection.unsubscribe();
150
+ // Finally - clear our collection
151
+ collection = null;
152
+ };
153
+
154
+ const subscriber: Subscriber = (event: RegistryEvent) => {
155
+ invariant(
156
+ collection,
157
+ 'Should only be subscribed when a collection is occurring',
158
+ );
159
+ // The dragging item can be add and removed when using a clone
160
+ // We do not publish updates for the critical item
161
+ const dragging: DraggableDescriptor = collection.critical.draggable;
162
+
163
+ if (event.type === 'ADDITION') {
164
+ if (shouldPublishUpdate(registry, dragging, event.value)) {
165
+ publisher.add(event.value);
166
+ }
167
+ }
168
+ if (event.type === 'REMOVAL') {
169
+ if (shouldPublishUpdate(registry, dragging, event.value)) {
170
+ publisher.remove(event.value);
171
+ }
172
+ }
173
+ };
174
+
175
+ const startPublishing = (request: LiftRequest): StartPublishingResult => {
176
+ invariant(
177
+ !collection,
178
+ 'Cannot start capturing critical dimensions as there is already a collection',
179
+ );
180
+ const entry: DraggableEntry = registry.draggable.getById(
181
+ request.draggableId,
182
+ );
183
+ const home: DroppableEntry = registry.droppable.getById(
184
+ entry.descriptor.droppableId,
185
+ );
186
+
187
+ const critical: Critical = {
188
+ draggable: entry.descriptor,
189
+ droppable: home.descriptor,
190
+ };
191
+
192
+ const unsubscribe = registry.subscribe(subscriber);
193
+
194
+ collection = {
195
+ critical,
196
+ unsubscribe,
197
+ };
198
+
199
+ return getInitialPublish({
200
+ critical,
201
+ registry,
202
+ scrollOptions: request.scrollOptions,
203
+ });
204
+ };
205
+
206
+ const marshal: DimensionMarshal = {
207
+ // Droppable changes
208
+ updateDroppableIsEnabled,
209
+ updateDroppableIsCombineEnabled,
210
+ scrollDroppable,
211
+ updateDroppableScroll,
212
+
213
+ // Entry
214
+ startPublishing,
215
+ stopPublishing,
216
+ };
217
+
218
+ return marshal;
219
+ };
@@ -0,0 +1,66 @@
1
+ // @flow
2
+ import type { Position } from 'css-box-model';
3
+ import * as timings from '../../debug/timings';
4
+ import type { StartPublishingResult } from './dimension-marshal-types';
5
+ import type {
6
+ Registry,
7
+ DraggableEntry,
8
+ DroppableEntry,
9
+ } from '../registry/registry-types';
10
+ import { toDraggableMap, toDroppableMap } from '../dimension-structures';
11
+ import type {
12
+ DroppableDescriptor,
13
+ DroppableDimension,
14
+ DraggableDimension,
15
+ DimensionMap,
16
+ ScrollOptions,
17
+ Critical,
18
+ Viewport,
19
+ } from '../../types';
20
+ import getViewport from '../../view/window/get-viewport';
21
+
22
+ type Args = {
23
+ critical: Critical,
24
+ scrollOptions: ScrollOptions,
25
+ registry: Registry,
26
+ };
27
+
28
+ export default ({
29
+ critical,
30
+ scrollOptions,
31
+ registry,
32
+ }: Args): StartPublishingResult => {
33
+ const timingKey: string = 'Initial collection from DOM';
34
+ timings.start(timingKey);
35
+ const viewport: Viewport = getViewport();
36
+ const windowScroll: Position = viewport.scroll.current;
37
+
38
+ const home: DroppableDescriptor = critical.droppable;
39
+
40
+ const droppables: DroppableDimension[] = registry.droppable
41
+ .getAllByType(home.type)
42
+ .map((entry: DroppableEntry): DroppableDimension =>
43
+ entry.callbacks.getDimensionAndWatchScroll(windowScroll, scrollOptions),
44
+ );
45
+
46
+ const draggables: DraggableDimension[] = registry.draggable
47
+ .getAllByType(critical.draggable.type)
48
+ .map((entry: DraggableEntry): DraggableDimension =>
49
+ entry.getDimension(windowScroll),
50
+ );
51
+
52
+ const dimensions: DimensionMap = {
53
+ draggables: toDraggableMap(draggables),
54
+ droppables: toDroppableMap(droppables),
55
+ };
56
+
57
+ timings.finish(timingKey);
58
+
59
+ const result: StartPublishingResult = {
60
+ dimensions,
61
+ critical,
62
+ viewport,
63
+ };
64
+
65
+ return result;
66
+ };
@@ -0,0 +1,146 @@
1
+ // @flow
2
+ import type { Position } from 'css-box-model';
3
+ import type {
4
+ DraggableId,
5
+ DroppableId,
6
+ DraggableDescriptor,
7
+ Published,
8
+ DraggableDimension,
9
+ DroppablePublish,
10
+ DroppableIdMap,
11
+ DraggableIdMap,
12
+ } from '../../types';
13
+ import type {
14
+ DroppableEntry,
15
+ Registry,
16
+ DraggableEntry,
17
+ DraggableEntryMap,
18
+ } from '../registry/registry-types';
19
+ import * as timings from '../../debug/timings';
20
+ import { origin } from '../position';
21
+
22
+ export type WhileDraggingPublisher = {
23
+ add: (entry: DraggableEntry) => void,
24
+ remove: (entry: DraggableEntry) => void,
25
+ stop: () => void,
26
+ };
27
+
28
+ type Staging = {
29
+ additions: DraggableEntryMap,
30
+ removals: DraggableIdMap,
31
+ modified: DroppableIdMap,
32
+ };
33
+
34
+ type Callbacks = {
35
+ publish: (args: Published) => unknown,
36
+ collectionStarting: () => unknown,
37
+ };
38
+
39
+ type Args = {
40
+ registry: Registry,
41
+ callbacks: Callbacks,
42
+ };
43
+
44
+ const clean = (): Staging => ({
45
+ additions: {},
46
+ removals: {},
47
+ modified: {},
48
+ });
49
+
50
+ const timingKey: string = 'Publish collection from DOM';
51
+
52
+ export default function createPublisher({
53
+ registry,
54
+ callbacks,
55
+ }: Args): WhileDraggingPublisher {
56
+ let staging: Staging = clean();
57
+ let frameId: any = null; // AnimationFrameID
58
+
59
+ const collect = () => {
60
+ if (frameId) {
61
+ return;
62
+ }
63
+
64
+ callbacks.collectionStarting();
65
+ frameId = requestAnimationFrame(() => {
66
+ frameId = null;
67
+ timings.start(timingKey);
68
+
69
+ const { additions, removals, modified } = staging;
70
+
71
+ const added: DraggableDimension[] = Object.keys(additions)
72
+ .map(
73
+ // Using the origin as the window scroll. This will be adjusted when processing the published values
74
+ (id: DraggableId): DraggableDimension =>
75
+ registry.draggable.getById(id).getDimension(origin),
76
+ )
77
+ // Dimensions are not guarenteed to be ordered in the same order as keys
78
+ // So we need to sort them so they are in the correct order
79
+ .sort(
80
+ (a: DraggableDimension, b: DraggableDimension): number =>
81
+ a.descriptor.index - b.descriptor.index,
82
+ );
83
+
84
+ const updated: DroppablePublish[] = Object.keys(modified).map(
85
+ (id: DroppableId) => {
86
+ const entry: DroppableEntry = registry.droppable.getById(id);
87
+
88
+ const scroll: Position = entry.callbacks.getScrollWhileDragging();
89
+ return {
90
+ droppableId: id,
91
+ scroll,
92
+ };
93
+ },
94
+ );
95
+
96
+ const result: Published = {
97
+ additions: added,
98
+ removals: Object.keys(removals),
99
+ modified: updated,
100
+ };
101
+
102
+ staging = clean();
103
+
104
+ timings.finish(timingKey);
105
+ callbacks.publish(result);
106
+ });
107
+ };
108
+
109
+ const add = (entry: DraggableEntry) => {
110
+ const id: DraggableId = entry.descriptor.id;
111
+ staging.additions[id] = entry;
112
+ staging.modified[entry.descriptor.droppableId] = true;
113
+
114
+ if (staging.removals[id]) {
115
+ delete staging.removals[id];
116
+ }
117
+ collect();
118
+ };
119
+
120
+ const remove = (entry: DraggableEntry) => {
121
+ const descriptor: DraggableDescriptor = entry.descriptor;
122
+ staging.removals[descriptor.id] = true;
123
+ staging.modified[descriptor.droppableId] = true;
124
+
125
+ if (staging.additions[descriptor.id]) {
126
+ delete staging.additions[descriptor.id];
127
+ }
128
+ collect();
129
+ };
130
+
131
+ const stop = () => {
132
+ if (!frameId) {
133
+ return;
134
+ }
135
+
136
+ cancelAnimationFrame(frameId);
137
+ frameId = null;
138
+ staging = clean();
139
+ };
140
+
141
+ return {
142
+ add,
143
+ remove,
144
+ stop,
145
+ };
146
+ }
@@ -0,0 +1,35 @@
1
+ // @flow
2
+ import memoizeOne from 'memoize-one';
3
+ import { values } from '../native-with-fallback';
4
+ import type {
5
+ DroppableDimension,
6
+ DroppableDimensionMap,
7
+ DraggableDimension,
8
+ DraggableDimensionMap,
9
+ } from '../types';
10
+
11
+ export const toDroppableMap = memoizeOne(
12
+ (droppables: DroppableDimension[]): DroppableDimensionMap =>
13
+ droppables.reduce((previous, current) => {
14
+ previous[current.descriptor.id] = current;
15
+ return previous;
16
+ }, {} as DroppableDimensionMap),
17
+ );
18
+
19
+ export const toDraggableMap = memoizeOne(
20
+ (draggables: DraggableDimension[]): DraggableDimensionMap =>
21
+ draggables.reduce((previous, current) => {
22
+ previous[current.descriptor.id] = current;
23
+ return previous;
24
+ }, {} as DraggableDimensionMap),
25
+ );
26
+
27
+ export const toDroppableList = memoizeOne(
28
+ (droppables: DroppableDimensionMap): DroppableDimension[] =>
29
+ values(droppables),
30
+ );
31
+
32
+ export const toDraggableList = memoizeOne(
33
+ (draggables: DraggableDimensionMap): DraggableDimension[] =>
34
+ values(draggables),
35
+ );