@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,420 @@
1
+ // @flow Marked for Review
2
+ import { type Position } from 'css-box-model';
3
+ // eslint-disable-next-line
4
+ // import { Component } from 'react';
5
+ import memoizeOne from 'memoize-one';
6
+ // import { connect } from 'react-redux';
7
+ import Draggable from './draggable';
8
+ import { origin, negate } from '../../state/position';
9
+ // import isStrictEqual from '../is-strict-equal';
10
+ import * as animation from '../../animation';
11
+ import { dropAnimationFinished as dropAnimationFinishedAction } from '../../state/action-creators';
12
+ import type {
13
+ State,
14
+ DraggableId,
15
+ DroppableId,
16
+ DraggableDimension,
17
+ Displacement,
18
+ CompletedDrag,
19
+ DragImpact,
20
+ MovementMode,
21
+ DropResult,
22
+ LiftEffect,
23
+ Combine,
24
+ } from '../../types';
25
+ import type {
26
+ MapProps,
27
+ OwnProps,
28
+ // DispatchProps,
29
+ Selector,
30
+ StateSnapshot,
31
+ DropAnimation,
32
+ } from './draggable-types';
33
+ import whatIsDraggedOver from '../../state/droppable/what-is-dragged-over';
34
+ // import StoreContext from '../context/store-context';
35
+ import whatIsDraggedOverFromResult from '../../state/droppable/what-is-dragged-over-from-result';
36
+ import { tryGetCombine } from '../../state/get-impact-location';
37
+ import { isDragging } from '../../state/reducer';
38
+ import { useCallback, useMemo } from '@helpdice/memoizer';
39
+ import React from 'react';
40
+ import { useAppDispatch, useAppSelector } from '../context/hooks';
41
+
42
+ const getCombineWithFromResult = (result: DropResult): DraggableId | null => {
43
+ return result.combine ? result.combine.draggableId : null;
44
+ };
45
+
46
+ const getCombineWithFromImpact = (impact: DragImpact): DraggableId | null => {
47
+ return impact.at && impact.at.type === 'COMBINE'
48
+ ? impact.at.combine.draggableId
49
+ : null;
50
+ };
51
+
52
+ type TrySelect = (state: State, ownProps: OwnProps) => MapProps | null;
53
+
54
+ function getDraggableSelector(): TrySelect {
55
+ const memoizedOffset = memoizeOne((x: number, y: number): Position => ({
56
+ x,
57
+ y,
58
+ }));
59
+
60
+ const getMemoizedSnapshot = memoizeOne(
61
+ (
62
+ mode: MovementMode,
63
+ isClone: boolean,
64
+ draggingOver: DroppableId | null,
65
+ combineWith: DraggableId | null,
66
+ dropping: DropAnimation | null,
67
+ ): StateSnapshot => ({
68
+ isDragging: true,
69
+ isClone,
70
+ isDropAnimating: Boolean(dropping),
71
+ dropAnimation: dropping,
72
+ mode,
73
+ draggingOver,
74
+ combineWith,
75
+ combineTargetFor: null,
76
+ }),
77
+ );
78
+
79
+ const getMemoizedProps = memoizeOne((
80
+ offset: Position,
81
+ mode: MovementMode,
82
+ dimension: DraggableDimension,
83
+ isClone: boolean,
84
+ // the id of the droppable you are over
85
+ draggingOver: DroppableId | null,
86
+ // the id of a draggable you are grouping with
87
+ combineWith: DraggableId | null,
88
+ forceShouldAnimate: boolean | null,
89
+ ): MapProps => ({
90
+ mapped: {
91
+ type: 'DRAGGING',
92
+ dropping: null,
93
+ draggingOver,
94
+ combineWith,
95
+ mode,
96
+ offset,
97
+ dimension,
98
+ forceShouldAnimate,
99
+ snapshot: getMemoizedSnapshot(
100
+ mode,
101
+ isClone,
102
+ draggingOver,
103
+ combineWith,
104
+ null,
105
+ ),
106
+ },
107
+ }));
108
+
109
+ const selector: TrySelect = (state: State, ownProps: OwnProps): MapProps | null => {
110
+ // Dragging Marked for Review
111
+ if (isDragging(state)) {
112
+ // not the dragging item
113
+ if (state.critical.draggable.id !== ownProps.draggableId) {
114
+ return null;
115
+ }
116
+
117
+ const offset: Position = state.current.client.offset;
118
+ const dimension: DraggableDimension =
119
+ state.dimensions.draggables[ownProps.draggableId];
120
+ // const shouldAnimateDragMovement: boolean = state.shouldAnimate;
121
+ const draggingOver: DroppableId | null = whatIsDraggedOver(state.impact);
122
+ const combineWith: DraggableId | null = getCombineWithFromImpact(state.impact);
123
+ const forceShouldAnimate: boolean | null = state.forceShouldAnimate;
124
+
125
+ return getMemoizedProps(
126
+ memoizedOffset(offset.x, offset.y),
127
+ state.movementMode,
128
+ dimension,
129
+ ownProps.isClone,
130
+ draggingOver,
131
+ combineWith,
132
+ forceShouldAnimate,
133
+ );
134
+ }
135
+
136
+ // Dropping
137
+ if (state.phase === 'DROP_ANIMATING') {
138
+ const completed: CompletedDrag = state.completed;
139
+ if (completed.result.draggableId !== ownProps.draggableId) {
140
+ return null;
141
+ }
142
+
143
+ const isClone: boolean = ownProps.isClone;
144
+ const dimension: DraggableDimension =
145
+ state.dimensions.draggables[ownProps.draggableId];
146
+ const result: DropResult = completed.result;
147
+ const mode: MovementMode = result.mode;
148
+ // these need to be pulled from the result as they can be different to the final impact
149
+ const draggingOver: DroppableId | null = whatIsDraggedOverFromResult(result);
150
+ const combineWith: DraggableId | null = getCombineWithFromResult(result);
151
+ const duration: number = state.dropDuration;
152
+
153
+ // not memoized as it is the only execution
154
+ const dropping: DropAnimation = {
155
+ duration,
156
+ curve: animation.curves.drop,
157
+ moveTo: state.newHomeClientOffset,
158
+ opacity: combineWith ? animation.combine.opacity.drop : null,
159
+ scale: combineWith ? animation.combine.scale.drop : null,
160
+ };
161
+
162
+ return {
163
+ mapped: {
164
+ type: 'DRAGGING',
165
+ offset: state.newHomeClientOffset,
166
+ dimension,
167
+ dropping,
168
+ draggingOver,
169
+ combineWith,
170
+ mode,
171
+ forceShouldAnimate: null,
172
+ snapshot: getMemoizedSnapshot(
173
+ mode,
174
+ isClone,
175
+ draggingOver,
176
+ combineWith,
177
+ dropping,
178
+ ),
179
+ },
180
+ };
181
+ }
182
+
183
+ return null;
184
+ };
185
+
186
+ return selector;
187
+ }
188
+
189
+ function getSecondarySnapshot(combineTargetFor: DraggableId | null): StateSnapshot {
190
+ return {
191
+ isDragging: false,
192
+ isDropAnimating: false,
193
+ isClone: false,
194
+ dropAnimation: null,
195
+ mode: null,
196
+ draggingOver: null,
197
+ combineTargetFor,
198
+ combineWith: null,
199
+ };
200
+ }
201
+
202
+ const atRest: MapProps = {
203
+ mapped: {
204
+ type: 'SECONDARY',
205
+ offset: origin,
206
+ combineTargetFor: null,
207
+ shouldAnimateDisplacement: true,
208
+ snapshot: getSecondarySnapshot(null),
209
+ },
210
+ };
211
+
212
+ function getSecondarySelector(): TrySelect {
213
+ const memoizedOffset = memoizeOne((x: number, y: number): Position => ({
214
+ x,
215
+ y,
216
+ }));
217
+
218
+ const getMemoizedSnapshot = memoizeOne(getSecondarySnapshot);
219
+
220
+ const getMemoizedProps = memoizeOne(
221
+ (
222
+ offset: Position,
223
+ combineTargetFor: DraggableId | null = null,
224
+ shouldAnimateDisplacement: boolean,
225
+ ): MapProps => ({
226
+ mapped: {
227
+ type: 'SECONDARY',
228
+ offset,
229
+ combineTargetFor,
230
+ shouldAnimateDisplacement,
231
+ snapshot: getMemoizedSnapshot(combineTargetFor),
232
+ },
233
+ }),
234
+ );
235
+
236
+ // Is we are the combine target for something then we need to publish that
237
+ // otherwise we will return null to get the default props
238
+ const getFallback = (combineTargetFor: DraggableId | null): MapProps | null => {
239
+ return combineTargetFor
240
+ ? getMemoizedProps(origin, combineTargetFor, true)
241
+ : null;
242
+ };
243
+
244
+ const getProps = (
245
+ ownId: DraggableId,
246
+ draggingId: DraggableId,
247
+ impact: DragImpact,
248
+ afterCritical: LiftEffect,
249
+ ): MapProps | null => {
250
+ const visualDisplacement: Displacement | null = impact.displaced.visible[ownId];
251
+ const isAfterCriticalInVirtualList: boolean = Boolean(
252
+ afterCritical.inVirtualList && afterCritical.effected[ownId],
253
+ );
254
+
255
+ const combine: Combine | null = tryGetCombine(impact);
256
+ const combineTargetFor: DraggableId | null =
257
+ combine && combine.draggableId === ownId ? draggingId : null;
258
+
259
+ if (!visualDisplacement) {
260
+ if (!isAfterCriticalInVirtualList) {
261
+ return getFallback(combineTargetFor);
262
+ }
263
+
264
+ // After critical but not visibly displaced in a virtual list
265
+ // This can occur if:
266
+ // 1. the item is not visible (displaced.invisible)
267
+ // 2. We have moved out of the home list.
268
+
269
+ // Don't need to do anything - item is invisible
270
+ if (impact.displaced.invisible[ownId]) {
271
+ return null;
272
+ }
273
+
274
+ // We are no longer over the home list.
275
+ // We need to move backwards to close the gap that the dragging item has left
276
+ const change: Position = negate(afterCritical.displacedBy.point);
277
+ const offset: Position = memoizedOffset(change.x, change.y);
278
+ return getMemoizedProps(offset, combineTargetFor, true);
279
+ }
280
+
281
+ if (isAfterCriticalInVirtualList) {
282
+ // In a virtual list the removal of a dragging item does
283
+ // not cause the list to collapse. So when something is 'displaced'
284
+ // we can just leave it in the original spot.
285
+ return getFallback(combineTargetFor);
286
+ }
287
+ const displaceBy: Position = impact.displacedBy.point;
288
+ const offset: Position = memoizedOffset(displaceBy.x, displaceBy.y);
289
+
290
+ return getMemoizedProps(
291
+ offset,
292
+ combineTargetFor,
293
+ visualDisplacement.shouldAnimate,
294
+ );
295
+ };
296
+
297
+ const selector: TrySelect = (state: State, ownProps: OwnProps): MapProps | null => {
298
+ // Dragging Marked for Review
299
+ if (isDragging(state)) {
300
+ // we do not care about the dragging item
301
+ if (state.critical.draggable.id === ownProps.draggableId) {
302
+ return null;
303
+ }
304
+
305
+ return getProps(
306
+ ownProps.draggableId,
307
+ state.critical.draggable.id,
308
+ state.impact,
309
+ state.afterCritical,
310
+ );
311
+ }
312
+
313
+ // Dropping
314
+ if (state.phase === 'DROP_ANIMATING') {
315
+ const completed: CompletedDrag = state.completed;
316
+ // do nothing if this was the dragging item
317
+ if (completed.result.draggableId === ownProps.draggableId) {
318
+ return null;
319
+ }
320
+ return getProps(
321
+ ownProps.draggableId,
322
+ completed.result.draggableId,
323
+ completed.impact,
324
+ completed.afterCritical,
325
+ );
326
+ }
327
+
328
+ // Otherwise
329
+ return null;
330
+ };
331
+
332
+ return selector;
333
+ }
334
+
335
+ // Returning a function to ensure each
336
+ // Draggable gets its own selector
337
+ export const makeMapStateToProps = (): Selector => {
338
+ const draggingSelector: TrySelect = getDraggableSelector();
339
+ const secondarySelector: TrySelect = getSecondarySelector();
340
+
341
+ const selector = (state: State, ownProps: OwnProps): MapProps =>
342
+ draggingSelector(state, ownProps) ||
343
+ secondarySelector(state, ownProps) ||
344
+ atRest;
345
+
346
+ return selector;
347
+ };
348
+
349
+ // const mapDispatchToProps: DispatchProps = {
350
+ // dropAnimationFinished: dropAnimationFinishedAction,
351
+ // };
352
+
353
+ // Leaning heavily on the default shallow equality checking
354
+ // that `connect` provides.
355
+ // It avoids needing to do it own within `<Draggable />`
356
+ // const ConnectedDraggable = connect(
357
+ // // returning a function so each component can do its own memoization
358
+ // makeMapStateToProps,
359
+ // mapDispatchToProps,
360
+ // // mergeProps: use default
361
+ // null,
362
+ // // options
363
+ // // $FlowFixMe: current react-redux type does not know about context property
364
+ // {
365
+ // // Using our own context for the store to avoid clashing with consumers
366
+ // context: StoreContext,
367
+ // // Default value, but being really clear
368
+ // pure: true,
369
+ // // When pure, compares the result of mapStateToProps to its previous value.
370
+ // // Default value: shallowEqual
371
+ // // Switching to a strictEqual as we return a memoized object on changes
372
+ // areStatePropsEqual: isStrictEqual,
373
+ // },
374
+ // )(Draggable);
375
+
376
+ const DraggableWithRedux = (props: OwnProps) => {
377
+ const dispatch = useAppDispatch();
378
+
379
+ const selector = useMemo(
380
+ () => makeMapStateToProps(),
381
+ [],
382
+ );
383
+
384
+ const stateProps = useAppSelector((state: State) =>
385
+ selector(state, props),
386
+ );
387
+
388
+ // const dispatchProps = useMemo(
389
+ // () => mapDispatchToProps(dispatch, props),
390
+ // [dispatch, props],
391
+ // );
392
+
393
+ // const dispatchProps = useMemo(
394
+ // () => bindActionCreators(mapDispatchToProps, dispatch),
395
+ // [dispatch],
396
+ // );
397
+
398
+ const dropAnimationFinished = useCallback(
399
+ () => dispatch(dropAnimationFinishedAction()),
400
+ [dispatch],
401
+ );
402
+
403
+ // return (
404
+ // <Draggable
405
+ // { ...props }
406
+ // {...stateProps }
407
+ // {...dispatchProps }
408
+ // />
409
+ // );
410
+
411
+ return <Draggable
412
+ {...props}
413
+ {...stateProps}
414
+ dropAnimationFinished={dropAnimationFinished}
415
+ />;
416
+ };
417
+
418
+ export default React.memo(DraggableWithRedux);
419
+
420
+ // export default ConnectedDraggable;
@@ -0,0 +1,48 @@
1
+ // @flow
2
+ // import React from 'react';
3
+ import type { DraggableId } from '../../types';
4
+ import type { PublicOwnProps, PrivateOwnProps } from './draggable-types';
5
+ import ConnectedDraggable from './connected-draggable';
6
+ import useRequiredContext from '../use-required-context';
7
+ import DroppableContext, {
8
+ type DroppableContextValue,
9
+ } from '../context/droppable-context';
10
+
11
+ // We can use this to render a draggable with more control
12
+ // It is used by a Droppable to render a clone
13
+ export function PrivateDraggable(props: PrivateOwnProps) {
14
+ const droppableContext: DroppableContextValue | null = useRequiredContext(
15
+ DroppableContext,
16
+ );
17
+ // The droppable can render a clone of the draggable item.
18
+ // In that case we unmount the existing dragging item
19
+ const isUsingCloneFor: DraggableId | null | undefined = droppableContext?.isUsingCloneFor;
20
+ if (isUsingCloneFor === props.draggableId && !props.isClone) {
21
+ return null;
22
+ }
23
+
24
+ return <ConnectedDraggable {...props} />;
25
+ }
26
+
27
+ // What we give to consumers
28
+ export function PublicDraggable(props: PublicOwnProps) {
29
+ // default values for props
30
+ const isEnabled: boolean =
31
+ typeof props.isDragDisabled === 'boolean' ? !props.isDragDisabled : true;
32
+ const canDragInteractiveElements: boolean = Boolean(
33
+ props.disableInteractiveElementBlocking,
34
+ );
35
+ const shouldRespectForcePress: boolean = Boolean(
36
+ props.shouldRespectForcePress,
37
+ );
38
+
39
+ return (
40
+ <PrivateDraggable
41
+ {...props}
42
+ isClone={false}
43
+ isEnabled={isEnabled}
44
+ canDragInteractiveElements={canDragInteractiveElements}
45
+ shouldRespectForcePress={shouldRespectForcePress}
46
+ />
47
+ );
48
+ }
@@ -0,0 +1,204 @@
1
+ // @flow
2
+ import { type Position } from 'css-box-model';
3
+ import { type ReactNode } from 'react';
4
+ import type {
5
+ DraggableId,
6
+ DroppableId,
7
+ DraggableDimension,
8
+ State,
9
+ MovementMode,
10
+ ContextId,
11
+ ElementId,
12
+ DraggableRubric,
13
+ } from '../../types';
14
+ import { dropAnimationFinished } from '../../state/action-creators';
15
+
16
+ // Exact
17
+ export type DraggingStyle = {
18
+ position: 'fixed',
19
+ top: number,
20
+ left: number,
21
+ boxSizing: 'border-box',
22
+ width: number,
23
+ height: number,
24
+ transition: string,
25
+ transform: string | null,
26
+ zIndex: number,
27
+
28
+ // for combining
29
+ opacity: number | null,
30
+
31
+ // Avoiding any processing of mouse events.
32
+ // This is already applied by the shared styles during a drag.
33
+ // During a drop it prevents a draggable from being dragged.
34
+ // canStartDrag() will prevent drags in some cases for non primary draggable.
35
+ // It is also a minor performance optimisation
36
+ pointerEvents: 'none',
37
+ };
38
+
39
+ // Exact
40
+ export type NotDraggingStyle = {
41
+ transform: string | null,
42
+ // null: use the global animation style
43
+ // none: skip animation (used in certain displacement situations)
44
+ transition: null | 'none',
45
+ };
46
+
47
+ export type DraggableStyle = DraggingStyle | NotDraggingStyle;
48
+
49
+ // Exact
50
+ export type ZIndexOptions = {
51
+ dragging: number,
52
+ dropAnimating: number,
53
+ };
54
+
55
+ // Props that can be spread onto the element directly
56
+ // Exact
57
+ export type DraggableProps = {
58
+ // inline style
59
+ style: DraggableStyle | null,
60
+ // used for shared global styles
61
+ 'data-rbd-draggable-context-id': ContextId,
62
+ // used for lookups
63
+ 'data-rbd-draggable-id': DraggableId,
64
+ // used to know when a transition ends
65
+ onTransitionEnd: ((event: TransitionEvent) => void) | null,
66
+ };
67
+
68
+ // Exact
69
+ export type DragHandleProps = {
70
+ // what draggable the handle belongs to
71
+ 'data-rbd-drag-handle-draggable-id': DraggableId,
72
+
73
+ // What DragDropContext the drag handle is in
74
+ 'data-rbd-drag-handle-context-id': ContextId,
75
+
76
+ // We need a drag handle to be a widget in order to correctly set accessibility properties
77
+ // Note: JAWS and VoiceOver don't need the element to be a 'widget' to read the accessibility properties, but NVDA does
78
+ // Using `role="button"` but leaving the public API as a string to allow for changing without a major
79
+ role: string,
80
+
81
+ // Overriding default role to have a more descriptive text ("Draggable item")
82
+ // Sadly we cannot use this right now due an issue with lighthouse
83
+ // https://github.com/atlassian/react-beautiful-dnd/issues/1742
84
+ // 'aria-roledescription': string,
85
+
86
+ // Using the description property of the drag handle to provide usage instructions
87
+ 'aria-describedby': ElementId,
88
+
89
+ // Allow tabbing to this element
90
+ // Adding a tab index marks the element as interactive content: https://www.w3.org/TR/html51/dom.html#kinds-of-content-interactive-content
91
+ tabIndex: number,
92
+
93
+ // Opting out of html5 drag and drop
94
+ draggable: boolean,
95
+ onDragStart: (event: DragEvent) => void,
96
+ };
97
+
98
+ // Exact
99
+ export type Provided = {
100
+ draggableProps: DraggableProps,
101
+ // will be null if the draggable is disabled
102
+ dragHandleProps: DragHandleProps | null,
103
+ // The following props will be removed once we move to react 16
104
+ innerRef?: (arg0: HTMLElement) => void, // Mark for Review
105
+ };
106
+
107
+ // Exact
108
+ // to easily enable patching of styles
109
+ export type DropAnimation = {
110
+ duration: number,
111
+ curve: string,
112
+ moveTo: Position,
113
+ opacity: number | null,
114
+ scale: number | null,
115
+ };
116
+
117
+ // Exact
118
+ export type StateSnapshot = {
119
+ isDragging: boolean,
120
+ isDropAnimating: boolean,
121
+ isClone: boolean,
122
+ dropAnimation: DropAnimation | null,
123
+ draggingOver: DroppableId | null,
124
+ combineWith: DraggableId | null,
125
+ combineTargetFor: DraggableId | null,
126
+ mode: MovementMode | null,
127
+ };
128
+
129
+ // Exact
130
+ export type DispatchProps = {
131
+ dropAnimationFinished: typeof dropAnimationFinished,
132
+ };
133
+
134
+ // Exact
135
+ export type DraggingMapProps = {
136
+ type: 'DRAGGING',
137
+ offset: Position,
138
+ mode: MovementMode,
139
+ dropping: DropAnimation | null,
140
+ draggingOver: DraggableId | null,
141
+ combineWith: DraggableId | null,
142
+ dimension: DraggableDimension,
143
+ forceShouldAnimate: boolean | null,
144
+ snapshot: StateSnapshot,
145
+ };
146
+
147
+ // Exact
148
+ export type SecondaryMapProps = {
149
+ type: 'SECONDARY',
150
+ offset: Position,
151
+ combineTargetFor: DraggableId | null,
152
+ shouldAnimateDisplacement: boolean,
153
+ snapshot: StateSnapshot,
154
+ };
155
+
156
+ export type MappedProps = DraggingMapProps | SecondaryMapProps;
157
+
158
+ // Exact
159
+ export type MapProps = {
160
+ // when an item is being displaced by a dragging item,
161
+ // we need to know if that movement should be animated
162
+ mapped: MappedProps,
163
+ // dragging: ?DraggingMapProps,
164
+ // secondary: ?SecondaryMapProps,
165
+ };
166
+
167
+ export type ChildrenFn = (
168
+ provided: Provided,
169
+ snapshot: StateSnapshot,
170
+ rubric: DraggableRubric,
171
+ ) => ReactNode;
172
+
173
+ // Exact
174
+ export type PublicOwnProps = {
175
+ draggableId: DraggableId,
176
+ index: number,
177
+ children: ChildrenFn,
178
+
179
+ // optional own props
180
+ isDragDisabled?: boolean,
181
+ disableInteractiveElementBlocking?: boolean,
182
+ shouldRespectForcePress?: boolean,
183
+ };
184
+
185
+ // Exact
186
+ export type PrivateOwnProps = PublicOwnProps & {
187
+ isClone: boolean,
188
+ // no longer optional
189
+ isEnabled: boolean,
190
+ canDragInteractiveElements: boolean,
191
+ shouldRespectForcePress: boolean,
192
+ };
193
+
194
+ // Exact
195
+ export type OwnProps = PrivateOwnProps& {
196
+
197
+ };
198
+
199
+ // Exact
200
+ export type Props = MapProps & DispatchProps & OwnProps & {
201
+
202
+ };
203
+
204
+ export type Selector = (state: State, ownProps: OwnProps) => MapProps;