@helpdice/draggable 0.0.0-stage → 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (472) hide show
  1. package/LICENSE +13 -0
  2. package/README.md +164 -2
  3. package/dist/draggable.cjs.js +9915 -0
  4. package/dist/draggable.cjs.js.map +1 -0
  5. package/dist/draggable.esm.js +9889 -0
  6. package/dist/draggable.esm.js.map +1 -0
  7. package/dist/types/animation.d.ts +31 -0
  8. package/dist/types/debug/middleware/action-timing-average.d.ts +3 -0
  9. package/dist/types/debug/middleware/action-timing.d.ts +3 -0
  10. package/dist/types/debug/middleware/log.d.ts +4 -0
  11. package/dist/types/debug/middleware/user-timing.d.ts +3 -0
  12. package/dist/types/debug/timings.d.ts +3 -0
  13. package/dist/types/dev-warning.d.ts +4 -0
  14. package/dist/types/empty.d.ts +2 -0
  15. package/dist/types/index.d.ts +8 -0
  16. package/dist/types/invariant.d.ts +4 -0
  17. package/dist/types/native-with-fallback.d.ts +10 -0
  18. package/dist/types/screen-reader-message-preset.d.ts +9 -0
  19. package/dist/types/state/action-creators.d.ts +158 -0
  20. package/dist/types/state/auto-scroller/auto-scroller-types.d.ts +6 -0
  21. package/dist/types/state/auto-scroller/can-scroll.d.ts +19 -0
  22. package/dist/types/state/auto-scroller/fluid-scroller/config.d.ts +11 -0
  23. package/dist/types/state/auto-scroller/fluid-scroller/did-start-in-scrollable-area.d.ts +0 -0
  24. package/dist/types/state/auto-scroller/fluid-scroller/get-best-scrollable-droppable.d.ts +9 -0
  25. package/dist/types/state/auto-scroller/fluid-scroller/get-droppable-scroll-change.d.ts +11 -0
  26. package/dist/types/state/auto-scroller/fluid-scroller/get-percentage.d.ts +7 -0
  27. package/dist/types/state/auto-scroller/fluid-scroller/get-scroll/adjust-for-size-limits.d.ts +8 -0
  28. package/dist/types/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/dampen-value-by-time.d.ts +2 -0
  29. package/dist/types/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/get-distance-thresholds.d.ts +8 -0
  30. package/dist/types/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/get-value-from-distance.d.ts +3 -0
  31. package/dist/types/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/get-value.d.ts +9 -0
  32. package/dist/types/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/index.d.ts +11 -0
  33. package/dist/types/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/min-scroll.d.ts +2 -0
  34. package/dist/types/state/auto-scroller/fluid-scroller/get-scroll/index.d.ts +10 -0
  35. package/dist/types/state/auto-scroller/fluid-scroller/get-window-scroll-change.d.ts +11 -0
  36. package/dist/types/state/auto-scroller/fluid-scroller/index.d.ts +13 -0
  37. package/dist/types/state/auto-scroller/fluid-scroller/scroll.d.ts +11 -0
  38. package/dist/types/state/auto-scroller/index.d.ts +11 -0
  39. package/dist/types/state/auto-scroller/jump-scroller.d.ts +11 -0
  40. package/dist/types/state/axis.d.ts +3 -0
  41. package/dist/types/state/calculate-drag-impact/calculate-reorder-impact.d.ts +13 -0
  42. package/dist/types/state/can-start-drag.d.ts +3 -0
  43. package/dist/types/state/create-store.d.ts +16 -0
  44. package/dist/types/state/did-start-after-critical.d.ts +2 -0
  45. package/dist/types/state/dimension-marshal/dimension-marshal-types.d.ts +23 -0
  46. package/dist/types/state/dimension-marshal/dimension-marshal.d.ts +4 -0
  47. package/dist/types/state/dimension-marshal/get-initial-publish.d.ts +10 -0
  48. package/dist/types/state/dimension-marshal/while-dragging-publisher.d.ts +17 -0
  49. package/dist/types/state/dimension-structures.d.ts +5 -0
  50. package/dist/types/state/droppable/get-droppable.d.ts +21 -0
  51. package/dist/types/state/droppable/is-home-of.d.ts +3 -0
  52. package/dist/types/state/droppable/scroll-droppable.d.ts +4 -0
  53. package/dist/types/state/droppable/should-use-placeholder.d.ts +3 -0
  54. package/dist/types/state/droppable/util/clip.d.ts +3 -0
  55. package/dist/types/state/droppable/util/get-subject.d.ts +10 -0
  56. package/dist/types/state/droppable/what-is-dragged-over-from-result.d.ts +3 -0
  57. package/dist/types/state/droppable/what-is-dragged-over.d.ts +3 -0
  58. package/dist/types/state/droppable/with-placeholder.d.ts +3 -0
  59. package/dist/types/state/get-center-from-impact/get-client-border-box-center/get-client-from-page-border-box-center.d.ts +9 -0
  60. package/dist/types/state/get-center-from-impact/get-client-border-box-center/index.d.ts +12 -0
  61. package/dist/types/state/get-center-from-impact/get-page-border-box-center/index.d.ts +11 -0
  62. package/dist/types/state/get-center-from-impact/get-page-border-box-center/when-combining.d.ts +9 -0
  63. package/dist/types/state/get-center-from-impact/get-page-border-box-center/when-reordering.d.ts +11 -0
  64. package/dist/types/state/get-center-from-impact/move-relative-to.d.ts +16 -0
  65. package/dist/types/state/get-combined-item-displacement.d.ts +10 -0
  66. package/dist/types/state/get-displaced-by.d.ts +4 -0
  67. package/dist/types/state/get-displacement-groups.d.ts +12 -0
  68. package/dist/types/state/get-drag-impact/get-combine-impact.d.ts +13 -0
  69. package/dist/types/state/get-drag-impact/get-reorder-impact.d.ts +13 -0
  70. package/dist/types/state/get-drag-impact/index.d.ts +13 -0
  71. package/dist/types/state/get-draggables-inside-droppable.d.ts +3 -0
  72. package/dist/types/state/get-droppable-over.d.ts +9 -0
  73. package/dist/types/state/get-frame.d.ts +3 -0
  74. package/dist/types/state/get-home-location.d.ts +3 -0
  75. package/dist/types/state/get-impact-location.d.ts +3 -0
  76. package/dist/types/state/get-is-displaced.d.ts +7 -0
  77. package/dist/types/state/get-lift-effect.d.ts +13 -0
  78. package/dist/types/state/get-max-scroll.d.ts +9 -0
  79. package/dist/types/state/is-movement-allowed.d.ts +2 -0
  80. package/dist/types/state/is-within.d.ts +2 -0
  81. package/dist/types/state/middleware/auto-scroll.d.ts +4 -0
  82. package/dist/types/state/middleware/dimension-marshal-stopper.d.ts +4 -0
  83. package/dist/types/state/middleware/drop/drop-animation-finish-middleware.d.ts +3 -0
  84. package/dist/types/state/middleware/drop/drop-animation-flush-on-scroll-middleware.d.ts +3 -0
  85. package/dist/types/state/middleware/drop/drop-middleware.d.ts +3 -0
  86. package/dist/types/state/middleware/drop/get-drop-duration.d.ts +9 -0
  87. package/dist/types/state/middleware/drop/get-drop-impact.d.ts +16 -0
  88. package/dist/types/state/middleware/drop/get-new-home-client-offset.d.ts +11 -0
  89. package/dist/types/state/middleware/drop/index.d.ts +1 -0
  90. package/dist/types/state/middleware/focus.d.ts +4 -0
  91. package/dist/types/state/middleware/lift.d.ts +4 -0
  92. package/dist/types/state/middleware/pending-drop.d.ts +3 -0
  93. package/dist/types/state/middleware/responders/async-marshal.d.ts +9 -0
  94. package/dist/types/state/middleware/responders/expiring-announce.d.ts +6 -0
  95. package/dist/types/state/middleware/responders/index.d.ts +1 -0
  96. package/dist/types/state/middleware/responders/is-equal.d.ts +4 -0
  97. package/dist/types/state/middleware/responders/publisher.d.ts +17 -0
  98. package/dist/types/state/middleware/responders/responders-middleware.d.ts +4 -0
  99. package/dist/types/state/middleware/scroll-listener.d.ts +3 -0
  100. package/dist/types/state/middleware/style.d.ts +4 -0
  101. package/dist/types/state/middleware/util/validate-dimensions.d.ts +2 -0
  102. package/dist/types/state/move-in-direction/index.d.ts +8 -0
  103. package/dist/types/state/move-in-direction/move-cross-axis/get-best-cross-axis-droppable.d.ts +11 -0
  104. package/dist/types/state/move-in-direction/move-cross-axis/get-closest-draggable.d.ts +11 -0
  105. package/dist/types/state/move-in-direction/move-cross-axis/index.d.ts +15 -0
  106. package/dist/types/state/move-in-direction/move-cross-axis/move-to-new-droppable.d.ts +14 -0
  107. package/dist/types/state/move-in-direction/move-cross-axis/without-starting-displacement.d.ts +4 -0
  108. package/dist/types/state/move-in-direction/move-in-direction-types.d.ts +7 -0
  109. package/dist/types/state/move-in-direction/move-to-next-place/index.d.ts +16 -0
  110. package/dist/types/state/move-in-direction/move-to-next-place/is-totally-visible-in-new-location.d.ts +12 -0
  111. package/dist/types/state/move-in-direction/move-to-next-place/move-to-next-combine/index.d.ts +10 -0
  112. package/dist/types/state/move-in-direction/move-to-next-place/move-to-next-index/from-combine.d.ts +11 -0
  113. package/dist/types/state/move-in-direction/move-to-next-place/move-to-next-index/from-reorder.d.ts +9 -0
  114. package/dist/types/state/move-in-direction/move-to-next-place/move-to-next-index/index.d.ts +14 -0
  115. package/dist/types/state/no-impact.d.ts +6 -0
  116. package/dist/types/state/patch-dimension-map.d.ts +3 -0
  117. package/dist/types/state/patch-droppable-map.d.ts +3 -0
  118. package/dist/types/state/position.d.ts +10 -0
  119. package/dist/types/state/post-reducer/when-moving/refresh-snap.d.ts +8 -0
  120. package/dist/types/state/post-reducer/when-moving/update.d.ts +12 -0
  121. package/dist/types/state/publish-while-dragging-in-virtual/adjust-additions-for-scroll-changes.d.ts +8 -0
  122. package/dist/types/state/publish-while-dragging-in-virtual/index.d.ts +7 -0
  123. package/dist/types/state/publish-while-dragging-in-virtual/offset-draggable.d.ts +9 -0
  124. package/dist/types/state/recompute-placeholders.d.ts +10 -0
  125. package/dist/types/state/rect.d.ts +2 -0
  126. package/dist/types/state/reducer.d.ts +5 -0
  127. package/dist/types/state/registry/create-registry.d.ts +2 -0
  128. package/dist/types/state/registry/registry-types.d.ts +62 -0
  129. package/dist/types/state/registry/use-registry.d.ts +2 -0
  130. package/dist/types/state/remove-draggable-from-list.d.ts +3 -0
  131. package/dist/types/state/scroll-viewport.d.ts +4 -0
  132. package/dist/types/state/spacing.d.ts +6 -0
  133. package/dist/types/state/store-types.d.ts +10 -0
  134. package/dist/types/state/update-displacement-visibility/recompute.d.ts +10 -0
  135. package/dist/types/state/update-displacement-visibility/speculatively-increase.d.ts +11 -0
  136. package/dist/types/state/visibility/is-partially-visible-through-frame.d.ts +3 -0
  137. package/dist/types/state/visibility/is-position-in-frame.d.ts +2 -0
  138. package/dist/types/state/visibility/is-totally-visible-through-frame-on-axis.d.ts +4 -0
  139. package/dist/types/state/visibility/is-totally-visible-through-frame.d.ts +3 -0
  140. package/dist/types/state/visibility/is-visible.d.ts +13 -0
  141. package/dist/types/state/with-scroll-change/with-all-displacement.d.ts +4 -0
  142. package/dist/types/state/with-scroll-change/with-droppable-displacement.d.ts +4 -0
  143. package/dist/types/state/with-scroll-change/with-droppable-scroll.d.ts +4 -0
  144. package/dist/types/state/with-scroll-change/with-viewport-displacement.d.ts +4 -0
  145. package/dist/types/types.d.ts +323 -0
  146. package/dist/types/view/animate-in-out/animate-in-out.d.ts +24 -0
  147. package/dist/types/view/animate-in-out/index.d.ts +1 -0
  148. package/dist/types/view/check-is-valid-inner-ref.d.ts +1 -0
  149. package/dist/types/view/context/app-context.d.ts +16 -0
  150. package/dist/types/view/context/droppable-context.d.ts +9 -0
  151. package/dist/types/view/context/hooks.d.ts +3 -0
  152. package/dist/types/view/context/store-context.d.ts +4 -0
  153. package/dist/types/view/data-attributes.d.ts +22 -0
  154. package/dist/types/view/drag-drop-context/app.d.ts +13 -0
  155. package/dist/types/view/drag-drop-context/check-doctype.d.ts +2 -0
  156. package/dist/types/view/drag-drop-context/check-react-version.d.ts +2 -0
  157. package/dist/types/view/drag-drop-context/drag-drop-context-types.d.ts +5 -0
  158. package/dist/types/view/drag-drop-context/drag-drop-context.d.ts +12 -0
  159. package/dist/types/view/drag-drop-context/error-boundary.d.ts +20 -0
  160. package/dist/types/view/drag-drop-context/index.d.ts +1 -0
  161. package/dist/types/view/drag-drop-context/use-startup-validation.d.ts +1 -0
  162. package/dist/types/view/drag-drop-context/use-unique-context-id.d.ts +3 -0
  163. package/dist/types/view/draggable/connected-draggable.d.ts +5 -0
  164. package/dist/types/view/draggable/draggable-api.d.ts +3 -0
  165. package/dist/types/view/draggable/draggable-types.d.ts +106 -0
  166. package/dist/types/view/draggable/draggable.d.ts +2 -0
  167. package/dist/types/view/draggable/get-style.d.ts +3 -0
  168. package/dist/types/view/draggable/index.d.ts +1 -0
  169. package/dist/types/view/draggable/use-validation.d.ts +4 -0
  170. package/dist/types/view/droppable/connected-droppable.d.ts +7 -0
  171. package/dist/types/view/droppable/droppable-types.d.ts +50 -0
  172. package/dist/types/view/droppable/droppable.d.ts +2 -0
  173. package/dist/types/view/droppable/index.d.ts +1 -0
  174. package/dist/types/view/droppable/use-validation.d.ts +8 -0
  175. package/dist/types/view/event-bindings/bind-events.d.ts +2 -0
  176. package/dist/types/view/event-bindings/event-types.d.ts +10 -0
  177. package/dist/types/view/get-body-element.d.ts +2 -0
  178. package/dist/types/view/get-border-box-center-position.d.ts +3 -0
  179. package/dist/types/view/get-document-element.d.ts +2 -0
  180. package/dist/types/view/get-elements/find-drag-handle.d.ts +2 -0
  181. package/dist/types/view/get-elements/find-draggable.d.ts +2 -0
  182. package/dist/types/view/is-strict-equal.d.ts +2 -0
  183. package/dist/types/view/is-type-of-element/is-element.d.ts +1 -0
  184. package/dist/types/view/is-type-of-element/is-html-element.d.ts +1 -0
  185. package/dist/types/view/is-type-of-element/is-svg-element.d.ts +1 -0
  186. package/dist/types/view/key-codes.d.ts +12 -0
  187. package/dist/types/view/placeholder/index.d.ts +1 -0
  188. package/dist/types/view/placeholder/placeholder-types.d.ts +14 -0
  189. package/dist/types/view/placeholder/placeholder.d.ts +28 -0
  190. package/dist/types/view/scroll-listener.d.ts +12 -0
  191. package/dist/types/view/throw-if-invalid-inner-ref.d.ts +2 -0
  192. package/dist/types/view/use-announcer/index.d.ts +1 -0
  193. package/dist/types/view/use-announcer/use-announcer.d.ts +3 -0
  194. package/dist/types/view/use-dev-setup-warning.d.ts +1 -0
  195. package/dist/types/view/use-dev.d.ts +1 -0
  196. package/dist/types/view/use-draggable-publisher/get-dimension.d.ts +3 -0
  197. package/dist/types/view/use-draggable-publisher/index.d.ts +1 -0
  198. package/dist/types/view/use-draggable-publisher/use-draggable-publisher.d.ts +8 -0
  199. package/dist/types/view/use-droppable-publisher/check-for-nested-scroll-container.d.ts +2 -0
  200. package/dist/types/view/use-droppable-publisher/get-closest-scrollable.d.ts +2 -0
  201. package/dist/types/view/use-droppable-publisher/get-dimension.d.ts +15 -0
  202. package/dist/types/view/use-droppable-publisher/get-env.d.ts +6 -0
  203. package/dist/types/view/use-droppable-publisher/get-listener-options.d.ts +5 -0
  204. package/dist/types/view/use-droppable-publisher/get-scroll.d.ts +3 -0
  205. package/dist/types/view/use-droppable-publisher/index.d.ts +1 -0
  206. package/dist/types/view/use-droppable-publisher/is-in-fixed-container.d.ts +2 -0
  207. package/dist/types/view/use-droppable-publisher/use-droppable-publisher.d.ts +13 -0
  208. package/dist/types/view/use-focus-marshal/focus-marshal-types.d.ts +9 -0
  209. package/dist/types/view/use-focus-marshal/index.d.ts +1 -0
  210. package/dist/types/view/use-focus-marshal/use-focus-marshal.d.ts +3 -0
  211. package/dist/types/view/use-hidden-text-element/index.d.ts +1 -0
  212. package/dist/types/view/use-hidden-text-element/use-hidden-text-element.d.ts +12 -0
  213. package/dist/types/view/use-isomorphic-layout-effect.d.ts +3 -0
  214. package/dist/types/view/use-previous-ref.d.ts +1 -0
  215. package/dist/types/view/use-required-context.d.ts +2 -0
  216. package/dist/types/view/use-sensor-marshal/closest.d.ts +1 -0
  217. package/dist/types/view/use-sensor-marshal/find-closest-draggable-id-from-event.d.ts +2 -0
  218. package/dist/types/view/use-sensor-marshal/index.d.ts +4 -0
  219. package/dist/types/view/use-sensor-marshal/is-event-in-interactive-element.d.ts +5 -0
  220. package/dist/types/view/use-sensor-marshal/lock.d.ts +11 -0
  221. package/dist/types/view/use-sensor-marshal/sensors/use-keyboard-sensor.d.ts +2 -0
  222. package/dist/types/view/use-sensor-marshal/sensors/use-mouse-sensor.d.ts +4 -0
  223. package/dist/types/view/use-sensor-marshal/sensors/use-touch-sensor.d.ts +4 -0
  224. package/dist/types/view/use-sensor-marshal/sensors/util/prevent-standard-key-events.d.ts +2 -0
  225. package/dist/types/view/use-sensor-marshal/sensors/util/supported-page-visibility-event-name.d.ts +2 -0
  226. package/dist/types/view/use-sensor-marshal/use-sensor-marshal.d.ts +12 -0
  227. package/dist/types/view/use-sensor-marshal/use-validate-sensor-hooks.d.ts +2 -0
  228. package/dist/types/view/use-style-marshal/get-styles.d.ts +10 -0
  229. package/dist/types/view/use-style-marshal/index.d.ts +1 -0
  230. package/dist/types/view/use-style-marshal/style-marshal-types.d.ts +6 -0
  231. package/dist/types/view/use-style-marshal/use-style-marshal.d.ts +3 -0
  232. package/dist/types/view/use-unique-id.d.ts +7 -0
  233. package/dist/types/view/visually-hidden-style.d.ts +2 -0
  234. package/dist/types/view/window/get-max-window-scroll.d.ts +3 -0
  235. package/dist/types/view/window/get-viewport.d.ts +3 -0
  236. package/dist/types/view/window/get-window-from-el.d.ts +2 -0
  237. package/dist/types/view/window/get-window-scroll.d.ts +3 -0
  238. package/dist/types/view/window/scroll-window.d.ts +3 -0
  239. package/package.json +157 -4
  240. package/src/animation.ts +75 -0
  241. package/src/debug/middleware/action-timing-average.ts +52 -0
  242. package/src/debug/middleware/action-timing.ts +16 -0
  243. package/src/debug/middleware/log.ts +26 -0
  244. package/src/debug/middleware/user-timing.ts +16 -0
  245. package/src/debug/timings.ts +87 -0
  246. package/src/dev-warning.ts +50 -0
  247. package/src/empty.ts +6 -0
  248. package/src/index.ts +67 -0
  249. package/src/invariant.ts +64 -0
  250. package/src/native-with-fallback.ts +69 -0
  251. package/src/screen-reader-message-preset.ts +135 -0
  252. package/src/state/action-creators.ts +358 -0
  253. package/src/state/auto-scroller/auto-scroller-types.ts +8 -0
  254. package/src/state/auto-scroller/can-scroll.ts +320 -0
  255. package/src/state/auto-scroller/fluid-scroller/config.ts +25 -0
  256. package/src/state/auto-scroller/fluid-scroller/did-start-in-scrollable-area.ts +1 -0
  257. package/src/state/auto-scroller/fluid-scroller/get-best-scrollable-droppable.ts +77 -0
  258. package/src/state/auto-scroller/fluid-scroller/get-droppable-scroll-change.ts +39 -0
  259. package/src/state/auto-scroller/fluid-scroller/get-percentage.ts +25 -0
  260. package/src/state/auto-scroller/fluid-scroller/get-scroll/adjust-for-size-limits.ts +30 -0
  261. package/src/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/dampen-value-by-time.ts +37 -0
  262. package/src/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/get-distance-thresholds.ts +25 -0
  263. package/src/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/get-value-from-distance.ts +61 -0
  264. package/src/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/get-value.ts +39 -0
  265. package/src/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/index.ts +46 -0
  266. package/src/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/min-scroll.ts +4 -0
  267. package/src/state/auto-scroller/fluid-scroller/get-scroll/index.ts +76 -0
  268. package/src/state/auto-scroller/fluid-scroller/get-window-scroll-change.ts +31 -0
  269. package/src/state/auto-scroller/fluid-scroller/index.ts +91 -0
  270. package/src/state/auto-scroller/fluid-scroller/scroll.ts +72 -0
  271. package/src/state/auto-scroller/index.ts +56 -0
  272. package/src/state/auto-scroller/jump-scroller.ts +140 -0
  273. package/src/state/axis.ts +26 -0
  274. package/src/state/calculate-drag-impact/calculate-reorder-impact.ts +138 -0
  275. package/src/state/can-start-drag.ts +29 -0
  276. package/src/state/create-store.ts +98 -0
  277. package/src/state/did-start-after-critical.ts +9 -0
  278. package/src/state/dimension-marshal/dimension-marshal-types.ts +49 -0
  279. package/src/state/dimension-marshal/dimension-marshal.ts +219 -0
  280. package/src/state/dimension-marshal/get-initial-publish.ts +66 -0
  281. package/src/state/dimension-marshal/while-dragging-publisher.ts +146 -0
  282. package/src/state/dimension-structures.ts +35 -0
  283. package/src/state/droppable/get-droppable.ts +103 -0
  284. package/src/state/droppable/is-home-of.ts +7 -0
  285. package/src/state/droppable/scroll-droppable.ts +53 -0
  286. package/src/state/droppable/should-use-placeholder.ts +7 -0
  287. package/src/state/droppable/util/clip.ts +17 -0
  288. package/src/state/droppable/util/get-subject.ts +63 -0
  289. package/src/state/droppable/what-is-dragged-over-from-result.ts +16 -0
  290. package/src/state/droppable/what-is-dragged-over.ts +16 -0
  291. package/src/state/droppable/with-placeholder.ts +174 -0
  292. package/src/state/get-center-from-impact/get-client-border-box-center/get-client-from-page-border-box-center.ts +30 -0
  293. package/src/state/get-center-from-impact/get-client-border-box-center/index.ts +45 -0
  294. package/src/state/get-center-from-impact/get-page-border-box-center/index.ts +71 -0
  295. package/src/state/get-center-from-impact/get-page-border-box-center/when-combining.ts +40 -0
  296. package/src/state/get-center-from-impact/get-page-border-box-center/when-reordering.ts +113 -0
  297. package/src/state/get-center-from-impact/move-relative-to.ts +68 -0
  298. package/src/state/get-combined-item-displacement.ts +35 -0
  299. package/src/state/get-displaced-by.ts +17 -0
  300. package/src/state/get-displacement-groups.ts +131 -0
  301. package/src/state/get-drag-impact/get-combine-impact.ts +131 -0
  302. package/src/state/get-drag-impact/get-reorder-impact.ts +145 -0
  303. package/src/state/get-drag-impact/index.ts +94 -0
  304. package/src/state/get-draggables-inside-droppable.ts +31 -0
  305. package/src/state/get-droppable-over.ts +161 -0
  306. package/src/state/get-frame.ts +10 -0
  307. package/src/state/get-home-location.ts +7 -0
  308. package/src/state/get-impact-location.ts +16 -0
  309. package/src/state/get-is-displaced.ts +12 -0
  310. package/src/state/get-lift-effect.ts +84 -0
  311. package/src/state/get-max-scroll.ts +32 -0
  312. package/src/state/is-movement-allowed.ts +13 -0
  313. package/src/state/is-within.ts +9 -0
  314. package/src/state/middleware/auto-scroll.ts +38 -0
  315. package/src/state/middleware/dimension-marshal-stopper.ts +20 -0
  316. package/src/state/middleware/drop/drop-animation-finish-middleware.ts +21 -0
  317. package/src/state/middleware/drop/drop-animation-flush-on-scroll-middleware.ts +63 -0
  318. package/src/state/middleware/drop/drop-middleware.ts +146 -0
  319. package/src/state/middleware/drop/get-drop-duration.ts +48 -0
  320. package/src/state/middleware/drop/get-drop-impact.ts +79 -0
  321. package/src/state/middleware/drop/get-new-home-client-offset.ts +55 -0
  322. package/src/state/middleware/drop/index.ts +2 -0
  323. package/src/state/middleware/focus.ts +42 -0
  324. package/src/state/middleware/lift.ts +66 -0
  325. package/src/state/middleware/pending-drop.ts +37 -0
  326. package/src/state/middleware/responders/async-marshal.ts +58 -0
  327. package/src/state/middleware/responders/expiring-announce.ts +44 -0
  328. package/src/state/middleware/responders/index.ts +2 -0
  329. package/src/state/middleware/responders/is-equal.ts +57 -0
  330. package/src/state/middleware/responders/publisher.ts +255 -0
  331. package/src/state/middleware/responders/responders-middleware.ts +81 -0
  332. package/src/state/middleware/scroll-listener.ts +31 -0
  333. package/src/state/middleware/style.ts +22 -0
  334. package/src/state/middleware/util/validate-dimensions.ts +71 -0
  335. package/src/state/move-in-direction/index.ts +85 -0
  336. package/src/state/move-in-direction/move-cross-axis/get-best-cross-axis-droppable.ts +169 -0
  337. package/src/state/move-in-direction/move-cross-axis/get-closest-draggable.ts +80 -0
  338. package/src/state/move-in-direction/move-cross-axis/index.ts +110 -0
  339. package/src/state/move-in-direction/move-cross-axis/move-to-new-droppable.ts +122 -0
  340. package/src/state/move-in-direction/move-cross-axis/without-starting-displacement.ts +31 -0
  341. package/src/state/move-in-direction/move-in-direction-types.ts +10 -0
  342. package/src/state/move-in-direction/move-to-next-place/index.ts +133 -0
  343. package/src/state/move-in-direction/move-to-next-place/is-totally-visible-in-new-location.ts +53 -0
  344. package/src/state/move-in-direction/move-to-next-place/move-to-next-combine/index.ts +98 -0
  345. package/src/state/move-in-direction/move-to-next-place/move-to-next-index/from-combine.ts +53 -0
  346. package/src/state/move-in-direction/move-to-next-place/move-to-next-index/from-reorder.ts +44 -0
  347. package/src/state/move-in-direction/move-to-next-place/move-to-next-index/index.ts +87 -0
  348. package/src/state/no-impact.ts +33 -0
  349. package/src/state/patch-dimension-map.ts +11 -0
  350. package/src/state/patch-droppable-map.ts +10 -0
  351. package/src/state/position.ts +65 -0
  352. package/src/state/post-reducer/when-moving/refresh-snap.ts +68 -0
  353. package/src/state/post-reducer/when-moving/update.ts +121 -0
  354. package/src/state/publish-while-dragging-in-virtual/adjust-additions-for-scroll-changes.ts +59 -0
  355. package/src/state/publish-while-dragging-in-virtual/index.ts +159 -0
  356. package/src/state/publish-while-dragging-in-virtual/offset-draggable.ts +36 -0
  357. package/src/state/recompute-placeholders.ts +101 -0
  358. package/src/state/rect.ts +7 -0
  359. package/src/state/reducer.ts +467 -0
  360. package/src/state/registry/create-registry.ts +162 -0
  361. package/src/state/registry/registry-types.ts +106 -0
  362. package/src/state/registry/use-registry.ts +20 -0
  363. package/src/state/remove-draggable-from-list.ts +13 -0
  364. package/src/state/scroll-viewport.ts +34 -0
  365. package/src/state/spacing.ts +45 -0
  366. package/src/state/store-types.ts +19 -0
  367. package/src/state/update-displacement-visibility/recompute.ts +55 -0
  368. package/src/state/update-displacement-visibility/speculatively-increase.ts +112 -0
  369. package/src/state/visibility/is-partially-visible-through-frame.ts +60 -0
  370. package/src/state/visibility/is-position-in-frame.ts +12 -0
  371. package/src/state/visibility/is-totally-visible-through-frame-on-axis.ts +19 -0
  372. package/src/state/visibility/is-totally-visible-through-frame.ts +18 -0
  373. package/src/state/visibility/is-visible.ts +102 -0
  374. package/src/state/with-scroll-change/with-all-displacement.ts +15 -0
  375. package/src/state/with-scroll-change/with-droppable-displacement.ts +13 -0
  376. package/src/state/with-scroll-change/with-droppable-scroll.ts +13 -0
  377. package/src/state/with-scroll-change/with-viewport-displacement.ts +7 -0
  378. package/src/types/redux-devtools.d.ts +17 -0
  379. package/src/types.ts +495 -0
  380. package/src/view/animate-in-out/animate-in-out.tsx +98 -0
  381. package/src/view/animate-in-out/index.ts +2 -0
  382. package/src/view/check-is-valid-inner-ref.ts +15 -0
  383. package/src/view/context/app-context.ts +19 -0
  384. package/src/view/context/droppable-context.ts +12 -0
  385. package/src/view/context/hooks.ts +21 -0
  386. package/src/view/context/store-context.ts +8 -0
  387. package/src/view/data-attributes.ts +37 -0
  388. package/src/view/drag-drop-context/app.tsx +300 -0
  389. package/src/view/drag-drop-context/check-doctype.ts +39 -0
  390. package/src/view/drag-drop-context/check-react-version.ts +72 -0
  391. package/src/view/drag-drop-context/drag-drop-context-types.ts +8 -0
  392. package/src/view/drag-drop-context/drag-drop-context.tsx +60 -0
  393. package/src/view/drag-drop-context/error-boundary.tsx +89 -0
  394. package/src/view/drag-drop-context/index.ts +2 -0
  395. package/src/view/drag-drop-context/use-startup-validation.ts +13 -0
  396. package/src/view/drag-drop-context/use-unique-context-id.ts +13 -0
  397. package/src/view/draggable/connected-draggable.tsx +420 -0
  398. package/src/view/draggable/draggable-api.tsx +48 -0
  399. package/src/view/draggable/draggable-types.ts +204 -0
  400. package/src/view/draggable/draggable.tsx +167 -0
  401. package/src/view/draggable/get-style.ts +109 -0
  402. package/src/view/draggable/index.ts +2 -0
  403. package/src/view/draggable/use-validation.ts +70 -0
  404. package/src/view/droppable/connected-droppable.tsx +597 -0
  405. package/src/view/droppable/droppable-types.ts +96 -0
  406. package/src/view/droppable/droppable.tsx +167 -0
  407. package/src/view/droppable/index.ts +2 -0
  408. package/src/view/droppable/use-validation.ts +102 -0
  409. package/src/view/event-bindings/bind-events.ts +39 -0
  410. package/src/view/event-bindings/event-types.ts +15 -0
  411. package/src/view/get-body-element.ts +8 -0
  412. package/src/view/get-border-box-center-position.ts +5 -0
  413. package/src/view/get-document-element.ts +8 -0
  414. package/src/view/get-elements/find-drag-handle.ts +38 -0
  415. package/src/view/get-elements/find-draggable.ts +30 -0
  416. package/src/view/is-strict-equal.ts +2 -0
  417. package/src/view/is-type-of-element/is-element.ts +10 -0
  418. package/src/view/is-type-of-element/is-html-element.ts +10 -0
  419. package/src/view/is-type-of-element/is-svg-element.ts +22 -0
  420. package/src/view/key-codes.ts +13 -0
  421. package/src/view/placeholder/index.ts +2 -0
  422. package/src/view/placeholder/placeholder-types.ts +16 -0
  423. package/src/view/placeholder/placeholder.tsx +204 -0
  424. package/src/view/scroll-listener.ts +74 -0
  425. package/src/view/throw-if-invalid-inner-ref.ts +15 -0
  426. package/src/view/use-announcer/index.ts +2 -0
  427. package/src/view/use-announcer/use-announcer.ts +80 -0
  428. package/src/view/use-dev-setup-warning.ts +22 -0
  429. package/src/view/use-dev.ts +9 -0
  430. package/src/view/use-draggable-publisher/get-dimension.ts +44 -0
  431. package/src/view/use-draggable-publisher/index.ts +2 -0
  432. package/src/view/use-draggable-publisher/use-draggable-publisher.ts +87 -0
  433. package/src/view/use-droppable-publisher/check-for-nested-scroll-container.ts +27 -0
  434. package/src/view/use-droppable-publisher/get-closest-scrollable.ts +96 -0
  435. package/src/view/use-droppable-publisher/get-dimension.ts +140 -0
  436. package/src/view/use-droppable-publisher/get-env.ts +32 -0
  437. package/src/view/use-droppable-publisher/get-listener-options.ts +12 -0
  438. package/src/view/use-droppable-publisher/get-scroll.ts +7 -0
  439. package/src/view/use-droppable-publisher/index.ts +2 -0
  440. package/src/view/use-droppable-publisher/is-in-fixed-container.ts +21 -0
  441. package/src/view/use-droppable-publisher/use-droppable-publisher.ts +288 -0
  442. package/src/view/use-focus-marshal/focus-marshal-types.ts +14 -0
  443. package/src/view/use-focus-marshal/index.ts +2 -0
  444. package/src/view/use-focus-marshal/use-focus-marshal.ts +128 -0
  445. package/src/view/use-hidden-text-element/index.ts +2 -0
  446. package/src/view/use-hidden-text-element/use-hidden-text-element.ts +62 -0
  447. package/src/view/use-isomorphic-layout-effect.ts +18 -0
  448. package/src/view/use-previous-ref.ts +26 -0
  449. package/src/view/use-required-context.ts +22 -0
  450. package/src/view/use-sensor-marshal/closest.ts +89 -0
  451. package/src/view/use-sensor-marshal/find-closest-draggable-id-from-event.ts +50 -0
  452. package/src/view/use-sensor-marshal/index.ts +5 -0
  453. package/src/view/use-sensor-marshal/is-event-in-interactive-element.ts +67 -0
  454. package/src/view/use-sensor-marshal/lock.ts +50 -0
  455. package/src/view/use-sensor-marshal/sensors/use-keyboard-sensor.ts +243 -0
  456. package/src/view/use-sensor-marshal/sensors/use-mouse-sensor.ts +391 -0
  457. package/src/view/use-sensor-marshal/sensors/use-touch-sensor.ts +481 -0
  458. package/src/view/use-sensor-marshal/sensors/util/prevent-standard-key-events.ts +19 -0
  459. package/src/view/use-sensor-marshal/sensors/util/supported-page-visibility-event-name.ts +29 -0
  460. package/src/view/use-sensor-marshal/use-sensor-marshal.ts +504 -0
  461. package/src/view/use-sensor-marshal/use-validate-sensor-hooks.ts +20 -0
  462. package/src/view/use-style-marshal/get-styles.ts +173 -0
  463. package/src/view/use-style-marshal/index.ts +2 -0
  464. package/src/view/use-style-marshal/style-marshal-types.ts +9 -0
  465. package/src/view/use-style-marshal/use-style-marshal.ts +126 -0
  466. package/src/view/use-unique-id.ts +25 -0
  467. package/src/view/visually-hidden-style.ts +16 -0
  468. package/src/view/window/get-max-window-scroll.ts +19 -0
  469. package/src/view/window/get-viewport.ts +49 -0
  470. package/src/view/window/get-window-from-el.ts +12 -0
  471. package/src/view/window/get-window-scroll.ts +30 -0
  472. package/src/view/window/scroll-window.ts +7 -0
@@ -0,0 +1,504 @@
1
+ // @flow
2
+ import rafSchd from "raf-schd";
3
+ import { useState } from "react";
4
+ import { useCallback, useMemo } from "@helpdice/memoizer";
5
+ import type { Position } from "css-box-model";
6
+ // import { invariant } from "../../invariant";
7
+ import type {
8
+ ContextId,
9
+ State,
10
+ Sensor,
11
+ StopDragOptions,
12
+ PreDragActions,
13
+ FluidDragActions,
14
+ SnapDragActions,
15
+ DraggableId,
16
+ SensorAPI,
17
+ TryGetLock,
18
+ TryGetLockOptions,
19
+ DraggableOptions,
20
+ } from "../../types";
21
+ import create, { type Lock, type LockAPI } from "./lock";
22
+ import type { Store, Action } from "../../state/store-types";
23
+ import canStartDrag from "../../state/can-start-drag";
24
+ import {
25
+ move as moveAction,
26
+ moveUp as moveUpAction,
27
+ moveRight as moveRightAction,
28
+ moveDown as moveDownAction,
29
+ moveLeft as moveLeftAction,
30
+ drop as dropAction,
31
+ lift as liftAction,
32
+ type LiftArgs as LiftActionArgs,
33
+ flush,
34
+ } from "../../state/action-creators";
35
+ import type {
36
+ Registry,
37
+ DraggableEntry,
38
+ } from "../../state/registry/registry-types";
39
+ import useMouseSensor from "./sensors/use-mouse-sensor";
40
+ import useKeyboardSensor from "./sensors/use-keyboard-sensor";
41
+ import useTouchSensor from "./sensors/use-touch-sensor";
42
+ import useValidateSensorHooks from "./use-validate-sensor-hooks";
43
+ import isEventInInteractiveElement from "./is-event-in-interactive-element";
44
+ import getBorderBoxCenterPosition from "../get-border-box-center-position";
45
+ import { warning } from "../../dev-warning";
46
+ import useLayoutEffect from "../use-isomorphic-layout-effect";
47
+ import { noop } from "../../empty";
48
+ import findClosestDraggableIdFromEvent from "./find-closest-draggable-id-from-event";
49
+ import findDraggable from "../get-elements/find-draggable";
50
+ import bindEvents from "../event-bindings/bind-events";
51
+ import { isDragging } from "../../state/reducer";
52
+
53
+ function preventDefault(event: Event) {
54
+ event.preventDefault();
55
+ }
56
+
57
+ type LockPhase = "PRE_DRAG" | "DRAGGING" | "COMPLETED";
58
+
59
+ // Exact
60
+ type IsActiveArgs = {
61
+ expected: LockPhase,
62
+ phase: LockPhase,
63
+ isLockActive: () => boolean,
64
+ shouldWarn: boolean,
65
+ };
66
+
67
+ function isActive({
68
+ expected,
69
+ phase,
70
+ isLockActive,
71
+ shouldWarn,
72
+ }: IsActiveArgs): boolean {
73
+ // lock is no longer active
74
+ if (!isLockActive()) {
75
+ if (shouldWarn) {
76
+ warning(`
77
+ Cannot perform action.
78
+ The sensor no longer has an action lock.
79
+
80
+ Tips:
81
+
82
+ - Throw away your action handlers when forceStop() is called
83
+ - Check actions.isActive() if you really need to
84
+ `);
85
+ }
86
+ return false;
87
+ }
88
+ // wrong phase
89
+ if (expected !== phase) {
90
+ if (shouldWarn) {
91
+ warning(`
92
+ Cannot perform action.
93
+ The actions you used belong to an outdated phase
94
+
95
+ Current phase: ${expected}
96
+ You called an action from outdated phase: ${phase}
97
+
98
+ Tips:
99
+
100
+ - Do not use preDragActions actions after calling preDragActions.lift()
101
+ `);
102
+ }
103
+ return false;
104
+ }
105
+ return true;
106
+ }
107
+
108
+ // Exact
109
+ type CanStartArgs = {
110
+ lockAPI: LockAPI,
111
+ registry: Registry,
112
+ store: Store,
113
+ draggableId: DraggableId,
114
+ };
115
+
116
+ function canStart({
117
+ lockAPI,
118
+ store,
119
+ registry,
120
+ draggableId,
121
+ }: CanStartArgs): boolean {
122
+ // lock is already claimed - cannot start
123
+ if (lockAPI.isClaimed()) {
124
+ return false;
125
+ }
126
+
127
+ const entry: DraggableEntry | null = registry.draggable.findById(draggableId);
128
+
129
+ if (!entry) {
130
+ warning(`Unable to find draggable with id: ${draggableId}`);
131
+ return false;
132
+ }
133
+
134
+ // draggable is not enabled - cannot start
135
+ if (!entry.options.isEnabled) {
136
+ return false;
137
+ }
138
+
139
+ // Application might now allow dragging right now
140
+ if (!canStartDrag(store.getState(), draggableId)) {
141
+ return false;
142
+ }
143
+
144
+ return true;
145
+ }
146
+
147
+ // Exact
148
+ type TryStartArgs = {
149
+ lockAPI: LockAPI,
150
+ contextId: ContextId,
151
+ registry: Registry,
152
+ store: Store,
153
+ draggableId: DraggableId,
154
+ forceSensorStop?: () => void,
155
+ sourceEvent: Event | null,
156
+ };
157
+
158
+ function tryStart({
159
+ lockAPI,
160
+ contextId,
161
+ store,
162
+ registry,
163
+ draggableId,
164
+ forceSensorStop,
165
+ sourceEvent,
166
+ }: TryStartArgs): PreDragActions | null {
167
+ const shouldStart: boolean = canStart({
168
+ lockAPI,
169
+ store,
170
+ registry,
171
+ draggableId,
172
+ });
173
+
174
+ if (!shouldStart) {
175
+ return null;
176
+ }
177
+
178
+ const entry: DraggableEntry = registry.draggable.getById(draggableId);
179
+ const el: HTMLElement | null = findDraggable(contextId, entry.descriptor.id);
180
+
181
+ if (!el) {
182
+ warning(`Unable to find draggable element with id: ${draggableId}`);
183
+ return null;
184
+ }
185
+
186
+ // Do not allow dragging from interactive elements
187
+ if (
188
+ sourceEvent &&
189
+ !entry.options.canDragInteractiveElements &&
190
+ isEventInInteractiveElement(el, sourceEvent)
191
+ ) {
192
+ return null;
193
+ }
194
+
195
+ // claiming lock
196
+ const lock: Lock = lockAPI.claim(forceSensorStop || noop);
197
+ let phase: LockPhase = "PRE_DRAG";
198
+
199
+ function getShouldRespectForcePress(): boolean {
200
+ // not looking up the entry as it might have been removed in a virtual list
201
+ return entry.options.shouldRespectForcePress;
202
+ }
203
+
204
+ function isLockActive(): boolean {
205
+ return lockAPI.isActive(lock);
206
+ }
207
+
208
+ function tryDispatch(expected: LockPhase, getAction: () => Action): void {
209
+ if (isActive({ expected, phase, isLockActive, shouldWarn: true })) {
210
+ store.dispatch(getAction());
211
+ }
212
+ }
213
+
214
+ const tryDispatchWhenDragging = tryDispatch.bind(null, "DRAGGING");
215
+
216
+ // Exact
217
+ type LiftArgs = {
218
+ liftActionArgs: LiftActionArgs,
219
+ cleanup: () => void,
220
+ actions: Object,
221
+ };
222
+
223
+ function lift(args: LiftArgs) {
224
+ function completed() {
225
+ lockAPI.release();
226
+ phase = "COMPLETED";
227
+ }
228
+ // Double lift = bad
229
+ if (phase !== "PRE_DRAG") {
230
+ completed();
231
+ // invariant(phase === "PRE_DRAG", `Cannot lift in phase ${phase}`);
232
+ }
233
+
234
+ store.dispatch(liftAction(args.liftActionArgs));
235
+
236
+ // We are now in the DRAGGING phase
237
+ phase = "DRAGGING";
238
+
239
+ function finish(
240
+ reason: "CANCEL" | "DROP",
241
+ options: StopDragOptions = { shouldBlockNextClick: false },
242
+ ) {
243
+ args.cleanup();
244
+
245
+ // block next click if requested
246
+ if (options.shouldBlockNextClick) {
247
+ const unbind = bindEvents(window, [
248
+ {
249
+ eventName: "click",
250
+ fn: preventDefault,
251
+ options: {
252
+ // only blocking a single click
253
+ once: true,
254
+ passive: false,
255
+ capture: true,
256
+ },
257
+ },
258
+ ], {});
259
+ // Sometimes the click is swallowed, such as when there is reparenting
260
+ // The click event (in the message queue) will occur before the next setTimeout expiry
261
+ // https://codesandbox.io/s/click-behaviour-pkfk2
262
+ setTimeout(unbind);
263
+ }
264
+
265
+ // releasing
266
+ completed();
267
+ store.dispatch(dropAction({ reason }));
268
+ }
269
+
270
+ return {
271
+ isActive: () =>
272
+ isActive({
273
+ expected: "DRAGGING",
274
+ phase,
275
+ isLockActive,
276
+ // Do not want to want warnings for boolean checks
277
+ shouldWarn: false,
278
+ }),
279
+ shouldRespectForcePress: getShouldRespectForcePress,
280
+ drop: (options?: StopDragOptions) => finish("DROP", options),
281
+ cancel: (options?: StopDragOptions) => finish("CANCEL", options),
282
+ ...args.actions,
283
+ };
284
+ }
285
+
286
+ function fluidLift(clientSelection: Position): FluidDragActions {
287
+ const move = rafSchd((client: Position) => {
288
+ tryDispatchWhenDragging(() => moveAction({ client }));
289
+ });
290
+
291
+ const api = lift({
292
+ liftActionArgs: {
293
+ id: draggableId,
294
+ clientSelection,
295
+ movementMode: "FLUID",
296
+ },
297
+ cleanup: () => move.cancel(),
298
+ actions: { move },
299
+ });
300
+
301
+ return {
302
+ ...api,
303
+ move,
304
+ };
305
+ }
306
+
307
+ function snapLift(): SnapDragActions {
308
+ const actions = {
309
+ moveUp: () => tryDispatchWhenDragging(moveUpAction),
310
+ moveRight: () => tryDispatchWhenDragging(moveRightAction),
311
+ moveDown: () => tryDispatchWhenDragging(moveDownAction),
312
+ moveLeft: () => tryDispatchWhenDragging(moveLeftAction),
313
+ };
314
+
315
+ return lift({
316
+ liftActionArgs: {
317
+ id: draggableId,
318
+ clientSelection: getBorderBoxCenterPosition(el as HTMLElement),
319
+ movementMode: "SNAP",
320
+ },
321
+ cleanup: noop,
322
+ actions,
323
+ });
324
+ }
325
+
326
+ function abortPreDrag() {
327
+ const shouldRelease: boolean = isActive({
328
+ expected: "PRE_DRAG",
329
+ phase,
330
+ isLockActive,
331
+ shouldWarn: true,
332
+ });
333
+
334
+ if (shouldRelease) {
335
+ lockAPI.release();
336
+ }
337
+ }
338
+
339
+ const preDrag: PreDragActions = {
340
+ isActive: () =>
341
+ isActive({
342
+ expected: "PRE_DRAG",
343
+ phase,
344
+ isLockActive,
345
+ // Do not want to want warnings for boolean checks
346
+ shouldWarn: false,
347
+ }),
348
+ shouldRespectForcePress: getShouldRespectForcePress,
349
+ fluidLift,
350
+ snapLift,
351
+ abort: abortPreDrag,
352
+ };
353
+
354
+ return preDrag;
355
+ }
356
+
357
+ // Exact
358
+ type SensorMarshalArgs = {
359
+ contextId: ContextId,
360
+ registry: Registry,
361
+ store: Store,
362
+ customSensors?: (Sensor[]) | null,
363
+ enableDefaultSensors: boolean,
364
+ };
365
+
366
+ // default sensors are now exported to library consumers
367
+ const defaultSensors: Sensor[] = [
368
+ useMouseSensor,
369
+ useKeyboardSensor,
370
+ useTouchSensor,
371
+ ];
372
+
373
+ export default function useSensorMarshal({
374
+ contextId,
375
+ store,
376
+ registry,
377
+ customSensors,
378
+ enableDefaultSensors,
379
+ }: SensorMarshalArgs) {
380
+ const useSensors: Sensor[] = [
381
+ ...(enableDefaultSensors ? defaultSensors : []),
382
+ ...(customSensors || []),
383
+ ];
384
+ const lockAPI: LockAPI = useState(() => create())[0];
385
+
386
+ const tryAbandonLock = useCallback(
387
+ function tryAbandonLock(previous: State, current: State) {
388
+ if (isDragging(previous) && !isDragging(current)) {
389
+ lockAPI.tryAbandon();
390
+ }
391
+ // if (previous.isDragging && !current.isDragging) {
392
+ // lockAPI.tryAbandon();
393
+ // }
394
+ },
395
+ [lockAPI],
396
+ );
397
+
398
+ // We need to abort any capturing if there is no longer a drag
399
+ useLayoutEffect(
400
+ function listenToStore() {
401
+ let previous: State = store.getState();
402
+ const unsubscribe = store.subscribe(() => {
403
+ const current: State = store.getState();
404
+ tryAbandonLock(previous, current);
405
+ previous = current;
406
+ });
407
+
408
+ // unsubscribe from store when unmounting
409
+ return unsubscribe;
410
+ },
411
+ [lockAPI, store, tryAbandonLock],
412
+ );
413
+
414
+ // abort any lock on unmount
415
+ useLayoutEffect(() => {
416
+ return lockAPI.tryAbandon;
417
+ }, [lockAPI.tryAbandon]);
418
+
419
+ const canGetLock = useCallback(
420
+ (draggableId: DraggableId): boolean => {
421
+ return canStart({
422
+ lockAPI,
423
+ registry,
424
+ store,
425
+ draggableId,
426
+ });
427
+ },
428
+ [lockAPI, registry, store],
429
+ );
430
+
431
+ const tryGetLock: TryGetLock = useCallback(
432
+ (
433
+ draggableId: DraggableId,
434
+ forceStop?: () => void,
435
+ options?: TryGetLockOptions,
436
+ ): PreDragActions | null =>
437
+ tryStart({
438
+ lockAPI,
439
+ registry,
440
+ contextId,
441
+ store,
442
+ draggableId,
443
+ forceSensorStop: forceStop,
444
+ sourceEvent:
445
+ options && options.sourceEvent ? options.sourceEvent : null,
446
+ }),
447
+ [contextId, lockAPI, registry, store],
448
+ );
449
+
450
+ const findClosestDraggableId = useCallback(
451
+ (event: Event): DraggableId | null =>
452
+ findClosestDraggableIdFromEvent(contextId, event),
453
+ [contextId],
454
+ );
455
+
456
+ const findOptionsForDraggable = useCallback(
457
+ (id: DraggableId): DraggableOptions | null => {
458
+ const entry: DraggableEntry | null = registry.draggable.findById(id);
459
+ return entry ? entry.options : null;
460
+ },
461
+ [registry.draggable],
462
+ );
463
+
464
+ const tryReleaseLock = useCallback(
465
+ function tryReleaseLock() {
466
+ if (!lockAPI.isClaimed()) {
467
+ return;
468
+ }
469
+
470
+ lockAPI.tryAbandon();
471
+
472
+ if (store.getState().phase !== "IDLE") {
473
+ store.dispatch(flush());
474
+ }
475
+ },
476
+ [lockAPI, store],
477
+ );
478
+ const isLockClaimed = useCallback(lockAPI.isClaimed, [lockAPI]);
479
+
480
+ const api: SensorAPI = useMemo(
481
+ () => ({
482
+ canGetLock,
483
+ tryGetLock,
484
+ findClosestDraggableId,
485
+ findOptionsForDraggable,
486
+ tryReleaseLock,
487
+ isLockClaimed,
488
+ }),
489
+ [
490
+ canGetLock,
491
+ tryGetLock,
492
+ findClosestDraggableId,
493
+ findOptionsForDraggable,
494
+ tryReleaseLock,
495
+ isLockClaimed,
496
+ ],
497
+ );
498
+
499
+ // Bad ass
500
+ useValidateSensorHooks(useSensors);
501
+ for (let i = 0; i < useSensors.length; i++) {
502
+ useSensors[i](api);
503
+ }
504
+ }
@@ -0,0 +1,20 @@
1
+ // @flow
2
+ /* eslint-disable react-hooks/rules-of-hooks */
3
+ import { invariant } from '../../invariant';
4
+ import type { Sensor } from '../../types';
5
+ import usePreviousRef from '../use-previous-ref';
6
+ import useDevSetupWarning from '../use-dev-setup-warning';
7
+ import useDev from '../use-dev';
8
+
9
+ export default function useValidateSensorHooks(sensorHooks: Sensor[]) {
10
+ useDev(() => {
11
+ const previousRef = usePreviousRef<Sensor[]>(sensorHooks);
12
+
13
+ useDevSetupWarning(() => {
14
+ invariant(
15
+ previousRef.current.length === sensorHooks.length,
16
+ 'Cannot change the amount of sensor hooks after mounting',
17
+ );
18
+ });
19
+ });
20
+ }
@@ -0,0 +1,173 @@
1
+ // @flow
2
+ import type { ContextId } from '../../types';
3
+ import { transitions } from '../../animation';
4
+ import * as attributes from '../data-attributes';
5
+
6
+ // Exact
7
+ export type Styles = {
8
+ always: string,
9
+ dragging: string,
10
+ resting: string,
11
+ dropAnimating: string,
12
+ userCancel: string,
13
+ };
14
+
15
+ // Exact
16
+ type Rule = {
17
+ selector: string
18
+ styles: Partial<Styles>
19
+ };
20
+
21
+ type DragState =
22
+ | 'always'
23
+ | 'resting'
24
+ | 'dragging'
25
+ | 'dropAnimating'
26
+ | 'userCancel';
27
+
28
+ const makeGetSelector = (context: string) => (attribute: string) =>
29
+ `[${attribute}="${context}"]`;
30
+
31
+ const getStyles = (rules: Rule[], property: DragState): string =>
32
+ rules
33
+ .map((rule: Rule): string => {
34
+ const value: string | undefined = rule.styles[property];
35
+ if (!value) {
36
+ return '';
37
+ }
38
+
39
+ return `${rule.selector} { ${value} }`;
40
+ })
41
+ .join(' ');
42
+
43
+ const noPointerEvents: string = 'pointer-events: none;';
44
+
45
+ export default (contextId: ContextId): Styles => {
46
+ const getSelector = makeGetSelector(contextId);
47
+
48
+ // ## Drag handle styles
49
+
50
+ // -webkit-touch-callout
51
+ // A long press on anchors usually pops a content menu that has options for
52
+ // the link such as 'Open in new tab'. Because long press is used to start
53
+ // a drag we need to opt out of this behavior
54
+
55
+ // -webkit-tap-highlight-color
56
+ // Webkit based browsers add a grey overlay to anchors when they are active.
57
+ // We remove this tap overlay as it is confusing for users
58
+ // https://css-tricks.com/snippets/css/remove-gray-highlight-when-tapping-links-in-mobile-safari/
59
+
60
+ // touch-action: manipulation
61
+ // Avoid the *pull to refresh action* and *delayed anchor focus* on Android Chrome
62
+
63
+ // cursor: grab
64
+ // We apply this by default for an improved user experience. It is such a common default that we
65
+ // bake it right in. Consumers can opt out of this by adding a selector with higher specificity
66
+ // The cursor will not apply when pointer-events is set to none
67
+
68
+ // pointer-events: none
69
+ // this is used to prevent pointer events firing on draggables during a drag
70
+ // Reasons:
71
+ // 1. performance: it stops the other draggables from processing mouse events
72
+ // 2. scrolling: it allows the user to scroll through the current draggable
73
+ // to scroll the list behind
74
+ // 3.* function: it blocks other draggables from starting. This is not relied on though as there
75
+ // is a function on the context (canLift) which is a more robust way of controlling this
76
+
77
+ const dragHandle: Rule = (() => {
78
+ const grabCursor = `
79
+ cursor: -webkit-grab;
80
+ cursor: grab;
81
+ `;
82
+ return {
83
+ selector: getSelector(attributes.dragHandle.contextId),
84
+ styles: {
85
+ always: `
86
+ -webkit-touch-callout: none;
87
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
88
+ touch-action: manipulation;
89
+ `,
90
+ resting: grabCursor,
91
+ dragging: noPointerEvents,
92
+ // it is fine for users to start dragging another item when a drop animation is occurring
93
+ dropAnimating: grabCursor,
94
+ // Not applying grab cursor during a user cancel as it is not possible for users to reorder
95
+ // items during a cancel
96
+ },
97
+ };
98
+ })();
99
+
100
+ // ## Draggable styles
101
+
102
+ // transition: transform
103
+ // This controls the animation of draggables that are moving out of the way
104
+ // The main draggable is controlled by react-motion.
105
+
106
+ const draggable: Rule = (() => {
107
+ const transition: string = `
108
+ transition: ${transitions.outOfTheWay};
109
+ `;
110
+ return {
111
+ selector: getSelector(attributes.draggable.contextId),
112
+ styles: {
113
+ dragging: transition,
114
+ dropAnimating: transition,
115
+ userCancel: transition,
116
+ },
117
+ };
118
+ })();
119
+
120
+ // ## Droppable styles
121
+
122
+ // overflow-anchor: none;
123
+ // Opting out of the browser feature which tries to maintain
124
+ // the scroll position when the DOM changes above the fold.
125
+ // This does not work well with reordering DOM nodes.
126
+ // When we drop a Draggable it already has the correct scroll applied.
127
+
128
+ const droppable: Rule = {
129
+ selector: getSelector(attributes.droppable.contextId),
130
+ styles: {
131
+ always: `overflow-anchor: none;`,
132
+ // need pointer events on the droppable to allow manual scrolling
133
+ },
134
+ };
135
+
136
+ // ## Body styles
137
+
138
+ // cursor: grab
139
+ // We apply this by default for an improved user experience. It is such a common default that we
140
+ // bake it right in. Consumers can opt out of this by adding a selector with higher specificity
141
+
142
+ // user-select: none
143
+ // This prevents the user from selecting text on the page while dragging
144
+
145
+ // overflow-anchor: none
146
+ // We are in control and aware of all of the window scrolls that occur
147
+ // we do not want the browser to have behaviors we do not expect
148
+
149
+ const body: Rule = {
150
+ selector: 'body',
151
+ styles: {
152
+ dragging: `
153
+ cursor: grabbing;
154
+ cursor: -webkit-grabbing;
155
+ user-select: none;
156
+ -webkit-user-select: none;
157
+ -moz-user-select: none;
158
+ -ms-user-select: none;
159
+ overflow-anchor: none;
160
+ `,
161
+ },
162
+ };
163
+
164
+ const rules: Rule[] = [draggable, dragHandle, droppable, body];
165
+
166
+ return {
167
+ always: getStyles(rules, 'always'),
168
+ resting: getStyles(rules, 'resting'),
169
+ dragging: getStyles(rules, 'dragging'),
170
+ dropAnimating: getStyles(rules, 'dropAnimating'),
171
+ userCancel: getStyles(rules, 'userCancel'),
172
+ };
173
+ };
@@ -0,0 +1,2 @@
1
+ // @flow
2
+ export { default } from './use-style-marshal';
@@ -0,0 +1,9 @@
1
+ // @flow
2
+ import type { DropReason } from '../../types';
3
+
4
+ // Exact
5
+ export type StyleMarshal = {
6
+ dragging: () => void,
7
+ dropping: (reason: DropReason) => void,
8
+ resting: () => void,
9
+ };