@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.
- package/LICENSE +13 -0
- package/README.md +164 -2
- package/dist/draggable.cjs.js +9915 -0
- package/dist/draggable.cjs.js.map +1 -0
- package/dist/draggable.esm.js +9889 -0
- package/dist/draggable.esm.js.map +1 -0
- package/dist/types/animation.d.ts +31 -0
- package/dist/types/debug/middleware/action-timing-average.d.ts +3 -0
- package/dist/types/debug/middleware/action-timing.d.ts +3 -0
- package/dist/types/debug/middleware/log.d.ts +4 -0
- package/dist/types/debug/middleware/user-timing.d.ts +3 -0
- package/dist/types/debug/timings.d.ts +3 -0
- package/dist/types/dev-warning.d.ts +4 -0
- package/dist/types/empty.d.ts +2 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/invariant.d.ts +4 -0
- package/dist/types/native-with-fallback.d.ts +10 -0
- package/dist/types/screen-reader-message-preset.d.ts +9 -0
- package/dist/types/state/action-creators.d.ts +158 -0
- package/dist/types/state/auto-scroller/auto-scroller-types.d.ts +6 -0
- package/dist/types/state/auto-scroller/can-scroll.d.ts +19 -0
- package/dist/types/state/auto-scroller/fluid-scroller/config.d.ts +11 -0
- package/dist/types/state/auto-scroller/fluid-scroller/did-start-in-scrollable-area.d.ts +0 -0
- package/dist/types/state/auto-scroller/fluid-scroller/get-best-scrollable-droppable.d.ts +9 -0
- package/dist/types/state/auto-scroller/fluid-scroller/get-droppable-scroll-change.d.ts +11 -0
- package/dist/types/state/auto-scroller/fluid-scroller/get-percentage.d.ts +7 -0
- package/dist/types/state/auto-scroller/fluid-scroller/get-scroll/adjust-for-size-limits.d.ts +8 -0
- package/dist/types/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/dampen-value-by-time.d.ts +2 -0
- package/dist/types/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/get-distance-thresholds.d.ts +8 -0
- package/dist/types/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/get-value-from-distance.d.ts +3 -0
- package/dist/types/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/get-value.d.ts +9 -0
- package/dist/types/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/index.d.ts +11 -0
- package/dist/types/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/min-scroll.d.ts +2 -0
- package/dist/types/state/auto-scroller/fluid-scroller/get-scroll/index.d.ts +10 -0
- package/dist/types/state/auto-scroller/fluid-scroller/get-window-scroll-change.d.ts +11 -0
- package/dist/types/state/auto-scroller/fluid-scroller/index.d.ts +13 -0
- package/dist/types/state/auto-scroller/fluid-scroller/scroll.d.ts +11 -0
- package/dist/types/state/auto-scroller/index.d.ts +11 -0
- package/dist/types/state/auto-scroller/jump-scroller.d.ts +11 -0
- package/dist/types/state/axis.d.ts +3 -0
- package/dist/types/state/calculate-drag-impact/calculate-reorder-impact.d.ts +13 -0
- package/dist/types/state/can-start-drag.d.ts +3 -0
- package/dist/types/state/create-store.d.ts +16 -0
- package/dist/types/state/did-start-after-critical.d.ts +2 -0
- package/dist/types/state/dimension-marshal/dimension-marshal-types.d.ts +23 -0
- package/dist/types/state/dimension-marshal/dimension-marshal.d.ts +4 -0
- package/dist/types/state/dimension-marshal/get-initial-publish.d.ts +10 -0
- package/dist/types/state/dimension-marshal/while-dragging-publisher.d.ts +17 -0
- package/dist/types/state/dimension-structures.d.ts +5 -0
- package/dist/types/state/droppable/get-droppable.d.ts +21 -0
- package/dist/types/state/droppable/is-home-of.d.ts +3 -0
- package/dist/types/state/droppable/scroll-droppable.d.ts +4 -0
- package/dist/types/state/droppable/should-use-placeholder.d.ts +3 -0
- package/dist/types/state/droppable/util/clip.d.ts +3 -0
- package/dist/types/state/droppable/util/get-subject.d.ts +10 -0
- package/dist/types/state/droppable/what-is-dragged-over-from-result.d.ts +3 -0
- package/dist/types/state/droppable/what-is-dragged-over.d.ts +3 -0
- package/dist/types/state/droppable/with-placeholder.d.ts +3 -0
- package/dist/types/state/get-center-from-impact/get-client-border-box-center/get-client-from-page-border-box-center.d.ts +9 -0
- package/dist/types/state/get-center-from-impact/get-client-border-box-center/index.d.ts +12 -0
- package/dist/types/state/get-center-from-impact/get-page-border-box-center/index.d.ts +11 -0
- package/dist/types/state/get-center-from-impact/get-page-border-box-center/when-combining.d.ts +9 -0
- package/dist/types/state/get-center-from-impact/get-page-border-box-center/when-reordering.d.ts +11 -0
- package/dist/types/state/get-center-from-impact/move-relative-to.d.ts +16 -0
- package/dist/types/state/get-combined-item-displacement.d.ts +10 -0
- package/dist/types/state/get-displaced-by.d.ts +4 -0
- package/dist/types/state/get-displacement-groups.d.ts +12 -0
- package/dist/types/state/get-drag-impact/get-combine-impact.d.ts +13 -0
- package/dist/types/state/get-drag-impact/get-reorder-impact.d.ts +13 -0
- package/dist/types/state/get-drag-impact/index.d.ts +13 -0
- package/dist/types/state/get-draggables-inside-droppable.d.ts +3 -0
- package/dist/types/state/get-droppable-over.d.ts +9 -0
- package/dist/types/state/get-frame.d.ts +3 -0
- package/dist/types/state/get-home-location.d.ts +3 -0
- package/dist/types/state/get-impact-location.d.ts +3 -0
- package/dist/types/state/get-is-displaced.d.ts +7 -0
- package/dist/types/state/get-lift-effect.d.ts +13 -0
- package/dist/types/state/get-max-scroll.d.ts +9 -0
- package/dist/types/state/is-movement-allowed.d.ts +2 -0
- package/dist/types/state/is-within.d.ts +2 -0
- package/dist/types/state/middleware/auto-scroll.d.ts +4 -0
- package/dist/types/state/middleware/dimension-marshal-stopper.d.ts +4 -0
- package/dist/types/state/middleware/drop/drop-animation-finish-middleware.d.ts +3 -0
- package/dist/types/state/middleware/drop/drop-animation-flush-on-scroll-middleware.d.ts +3 -0
- package/dist/types/state/middleware/drop/drop-middleware.d.ts +3 -0
- package/dist/types/state/middleware/drop/get-drop-duration.d.ts +9 -0
- package/dist/types/state/middleware/drop/get-drop-impact.d.ts +16 -0
- package/dist/types/state/middleware/drop/get-new-home-client-offset.d.ts +11 -0
- package/dist/types/state/middleware/drop/index.d.ts +1 -0
- package/dist/types/state/middleware/focus.d.ts +4 -0
- package/dist/types/state/middleware/lift.d.ts +4 -0
- package/dist/types/state/middleware/pending-drop.d.ts +3 -0
- package/dist/types/state/middleware/responders/async-marshal.d.ts +9 -0
- package/dist/types/state/middleware/responders/expiring-announce.d.ts +6 -0
- package/dist/types/state/middleware/responders/index.d.ts +1 -0
- package/dist/types/state/middleware/responders/is-equal.d.ts +4 -0
- package/dist/types/state/middleware/responders/publisher.d.ts +17 -0
- package/dist/types/state/middleware/responders/responders-middleware.d.ts +4 -0
- package/dist/types/state/middleware/scroll-listener.d.ts +3 -0
- package/dist/types/state/middleware/style.d.ts +4 -0
- package/dist/types/state/middleware/util/validate-dimensions.d.ts +2 -0
- package/dist/types/state/move-in-direction/index.d.ts +8 -0
- package/dist/types/state/move-in-direction/move-cross-axis/get-best-cross-axis-droppable.d.ts +11 -0
- package/dist/types/state/move-in-direction/move-cross-axis/get-closest-draggable.d.ts +11 -0
- package/dist/types/state/move-in-direction/move-cross-axis/index.d.ts +15 -0
- package/dist/types/state/move-in-direction/move-cross-axis/move-to-new-droppable.d.ts +14 -0
- package/dist/types/state/move-in-direction/move-cross-axis/without-starting-displacement.d.ts +4 -0
- package/dist/types/state/move-in-direction/move-in-direction-types.d.ts +7 -0
- package/dist/types/state/move-in-direction/move-to-next-place/index.d.ts +16 -0
- package/dist/types/state/move-in-direction/move-to-next-place/is-totally-visible-in-new-location.d.ts +12 -0
- package/dist/types/state/move-in-direction/move-to-next-place/move-to-next-combine/index.d.ts +10 -0
- package/dist/types/state/move-in-direction/move-to-next-place/move-to-next-index/from-combine.d.ts +11 -0
- package/dist/types/state/move-in-direction/move-to-next-place/move-to-next-index/from-reorder.d.ts +9 -0
- package/dist/types/state/move-in-direction/move-to-next-place/move-to-next-index/index.d.ts +14 -0
- package/dist/types/state/no-impact.d.ts +6 -0
- package/dist/types/state/patch-dimension-map.d.ts +3 -0
- package/dist/types/state/patch-droppable-map.d.ts +3 -0
- package/dist/types/state/position.d.ts +10 -0
- package/dist/types/state/post-reducer/when-moving/refresh-snap.d.ts +8 -0
- package/dist/types/state/post-reducer/when-moving/update.d.ts +12 -0
- package/dist/types/state/publish-while-dragging-in-virtual/adjust-additions-for-scroll-changes.d.ts +8 -0
- package/dist/types/state/publish-while-dragging-in-virtual/index.d.ts +7 -0
- package/dist/types/state/publish-while-dragging-in-virtual/offset-draggable.d.ts +9 -0
- package/dist/types/state/recompute-placeholders.d.ts +10 -0
- package/dist/types/state/rect.d.ts +2 -0
- package/dist/types/state/reducer.d.ts +5 -0
- package/dist/types/state/registry/create-registry.d.ts +2 -0
- package/dist/types/state/registry/registry-types.d.ts +62 -0
- package/dist/types/state/registry/use-registry.d.ts +2 -0
- package/dist/types/state/remove-draggable-from-list.d.ts +3 -0
- package/dist/types/state/scroll-viewport.d.ts +4 -0
- package/dist/types/state/spacing.d.ts +6 -0
- package/dist/types/state/store-types.d.ts +10 -0
- package/dist/types/state/update-displacement-visibility/recompute.d.ts +10 -0
- package/dist/types/state/update-displacement-visibility/speculatively-increase.d.ts +11 -0
- package/dist/types/state/visibility/is-partially-visible-through-frame.d.ts +3 -0
- package/dist/types/state/visibility/is-position-in-frame.d.ts +2 -0
- package/dist/types/state/visibility/is-totally-visible-through-frame-on-axis.d.ts +4 -0
- package/dist/types/state/visibility/is-totally-visible-through-frame.d.ts +3 -0
- package/dist/types/state/visibility/is-visible.d.ts +13 -0
- package/dist/types/state/with-scroll-change/with-all-displacement.d.ts +4 -0
- package/dist/types/state/with-scroll-change/with-droppable-displacement.d.ts +4 -0
- package/dist/types/state/with-scroll-change/with-droppable-scroll.d.ts +4 -0
- package/dist/types/state/with-scroll-change/with-viewport-displacement.d.ts +4 -0
- package/dist/types/types.d.ts +323 -0
- package/dist/types/view/animate-in-out/animate-in-out.d.ts +24 -0
- package/dist/types/view/animate-in-out/index.d.ts +1 -0
- package/dist/types/view/check-is-valid-inner-ref.d.ts +1 -0
- package/dist/types/view/context/app-context.d.ts +16 -0
- package/dist/types/view/context/droppable-context.d.ts +9 -0
- package/dist/types/view/context/hooks.d.ts +3 -0
- package/dist/types/view/context/store-context.d.ts +4 -0
- package/dist/types/view/data-attributes.d.ts +22 -0
- package/dist/types/view/drag-drop-context/app.d.ts +13 -0
- package/dist/types/view/drag-drop-context/check-doctype.d.ts +2 -0
- package/dist/types/view/drag-drop-context/check-react-version.d.ts +2 -0
- package/dist/types/view/drag-drop-context/drag-drop-context-types.d.ts +5 -0
- package/dist/types/view/drag-drop-context/drag-drop-context.d.ts +12 -0
- package/dist/types/view/drag-drop-context/error-boundary.d.ts +20 -0
- package/dist/types/view/drag-drop-context/index.d.ts +1 -0
- package/dist/types/view/drag-drop-context/use-startup-validation.d.ts +1 -0
- package/dist/types/view/drag-drop-context/use-unique-context-id.d.ts +3 -0
- package/dist/types/view/draggable/connected-draggable.d.ts +5 -0
- package/dist/types/view/draggable/draggable-api.d.ts +3 -0
- package/dist/types/view/draggable/draggable-types.d.ts +106 -0
- package/dist/types/view/draggable/draggable.d.ts +2 -0
- package/dist/types/view/draggable/get-style.d.ts +3 -0
- package/dist/types/view/draggable/index.d.ts +1 -0
- package/dist/types/view/draggable/use-validation.d.ts +4 -0
- package/dist/types/view/droppable/connected-droppable.d.ts +7 -0
- package/dist/types/view/droppable/droppable-types.d.ts +50 -0
- package/dist/types/view/droppable/droppable.d.ts +2 -0
- package/dist/types/view/droppable/index.d.ts +1 -0
- package/dist/types/view/droppable/use-validation.d.ts +8 -0
- package/dist/types/view/event-bindings/bind-events.d.ts +2 -0
- package/dist/types/view/event-bindings/event-types.d.ts +10 -0
- package/dist/types/view/get-body-element.d.ts +2 -0
- package/dist/types/view/get-border-box-center-position.d.ts +3 -0
- package/dist/types/view/get-document-element.d.ts +2 -0
- package/dist/types/view/get-elements/find-drag-handle.d.ts +2 -0
- package/dist/types/view/get-elements/find-draggable.d.ts +2 -0
- package/dist/types/view/is-strict-equal.d.ts +2 -0
- package/dist/types/view/is-type-of-element/is-element.d.ts +1 -0
- package/dist/types/view/is-type-of-element/is-html-element.d.ts +1 -0
- package/dist/types/view/is-type-of-element/is-svg-element.d.ts +1 -0
- package/dist/types/view/key-codes.d.ts +12 -0
- package/dist/types/view/placeholder/index.d.ts +1 -0
- package/dist/types/view/placeholder/placeholder-types.d.ts +14 -0
- package/dist/types/view/placeholder/placeholder.d.ts +28 -0
- package/dist/types/view/scroll-listener.d.ts +12 -0
- package/dist/types/view/throw-if-invalid-inner-ref.d.ts +2 -0
- package/dist/types/view/use-announcer/index.d.ts +1 -0
- package/dist/types/view/use-announcer/use-announcer.d.ts +3 -0
- package/dist/types/view/use-dev-setup-warning.d.ts +1 -0
- package/dist/types/view/use-dev.d.ts +1 -0
- package/dist/types/view/use-draggable-publisher/get-dimension.d.ts +3 -0
- package/dist/types/view/use-draggable-publisher/index.d.ts +1 -0
- package/dist/types/view/use-draggable-publisher/use-draggable-publisher.d.ts +8 -0
- package/dist/types/view/use-droppable-publisher/check-for-nested-scroll-container.d.ts +2 -0
- package/dist/types/view/use-droppable-publisher/get-closest-scrollable.d.ts +2 -0
- package/dist/types/view/use-droppable-publisher/get-dimension.d.ts +15 -0
- package/dist/types/view/use-droppable-publisher/get-env.d.ts +6 -0
- package/dist/types/view/use-droppable-publisher/get-listener-options.d.ts +5 -0
- package/dist/types/view/use-droppable-publisher/get-scroll.d.ts +3 -0
- package/dist/types/view/use-droppable-publisher/index.d.ts +1 -0
- package/dist/types/view/use-droppable-publisher/is-in-fixed-container.d.ts +2 -0
- package/dist/types/view/use-droppable-publisher/use-droppable-publisher.d.ts +13 -0
- package/dist/types/view/use-focus-marshal/focus-marshal-types.d.ts +9 -0
- package/dist/types/view/use-focus-marshal/index.d.ts +1 -0
- package/dist/types/view/use-focus-marshal/use-focus-marshal.d.ts +3 -0
- package/dist/types/view/use-hidden-text-element/index.d.ts +1 -0
- package/dist/types/view/use-hidden-text-element/use-hidden-text-element.d.ts +12 -0
- package/dist/types/view/use-isomorphic-layout-effect.d.ts +3 -0
- package/dist/types/view/use-previous-ref.d.ts +1 -0
- package/dist/types/view/use-required-context.d.ts +2 -0
- package/dist/types/view/use-sensor-marshal/closest.d.ts +1 -0
- package/dist/types/view/use-sensor-marshal/find-closest-draggable-id-from-event.d.ts +2 -0
- package/dist/types/view/use-sensor-marshal/index.d.ts +4 -0
- package/dist/types/view/use-sensor-marshal/is-event-in-interactive-element.d.ts +5 -0
- package/dist/types/view/use-sensor-marshal/lock.d.ts +11 -0
- package/dist/types/view/use-sensor-marshal/sensors/use-keyboard-sensor.d.ts +2 -0
- package/dist/types/view/use-sensor-marshal/sensors/use-mouse-sensor.d.ts +4 -0
- package/dist/types/view/use-sensor-marshal/sensors/use-touch-sensor.d.ts +4 -0
- package/dist/types/view/use-sensor-marshal/sensors/util/prevent-standard-key-events.d.ts +2 -0
- package/dist/types/view/use-sensor-marshal/sensors/util/supported-page-visibility-event-name.d.ts +2 -0
- package/dist/types/view/use-sensor-marshal/use-sensor-marshal.d.ts +12 -0
- package/dist/types/view/use-sensor-marshal/use-validate-sensor-hooks.d.ts +2 -0
- package/dist/types/view/use-style-marshal/get-styles.d.ts +10 -0
- package/dist/types/view/use-style-marshal/index.d.ts +1 -0
- package/dist/types/view/use-style-marshal/style-marshal-types.d.ts +6 -0
- package/dist/types/view/use-style-marshal/use-style-marshal.d.ts +3 -0
- package/dist/types/view/use-unique-id.d.ts +7 -0
- package/dist/types/view/visually-hidden-style.d.ts +2 -0
- package/dist/types/view/window/get-max-window-scroll.d.ts +3 -0
- package/dist/types/view/window/get-viewport.d.ts +3 -0
- package/dist/types/view/window/get-window-from-el.d.ts +2 -0
- package/dist/types/view/window/get-window-scroll.d.ts +3 -0
- package/dist/types/view/window/scroll-window.d.ts +3 -0
- package/package.json +157 -4
- package/src/animation.ts +75 -0
- package/src/debug/middleware/action-timing-average.ts +52 -0
- package/src/debug/middleware/action-timing.ts +16 -0
- package/src/debug/middleware/log.ts +26 -0
- package/src/debug/middleware/user-timing.ts +16 -0
- package/src/debug/timings.ts +87 -0
- package/src/dev-warning.ts +50 -0
- package/src/empty.ts +6 -0
- package/src/index.ts +67 -0
- package/src/invariant.ts +64 -0
- package/src/native-with-fallback.ts +69 -0
- package/src/screen-reader-message-preset.ts +135 -0
- package/src/state/action-creators.ts +358 -0
- package/src/state/auto-scroller/auto-scroller-types.ts +8 -0
- package/src/state/auto-scroller/can-scroll.ts +320 -0
- package/src/state/auto-scroller/fluid-scroller/config.ts +25 -0
- package/src/state/auto-scroller/fluid-scroller/did-start-in-scrollable-area.ts +1 -0
- package/src/state/auto-scroller/fluid-scroller/get-best-scrollable-droppable.ts +77 -0
- package/src/state/auto-scroller/fluid-scroller/get-droppable-scroll-change.ts +39 -0
- package/src/state/auto-scroller/fluid-scroller/get-percentage.ts +25 -0
- package/src/state/auto-scroller/fluid-scroller/get-scroll/adjust-for-size-limits.ts +30 -0
- package/src/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/dampen-value-by-time.ts +37 -0
- package/src/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/get-distance-thresholds.ts +25 -0
- package/src/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/get-value-from-distance.ts +61 -0
- package/src/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/get-value.ts +39 -0
- package/src/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/index.ts +46 -0
- package/src/state/auto-scroller/fluid-scroller/get-scroll/get-scroll-on-axis/min-scroll.ts +4 -0
- package/src/state/auto-scroller/fluid-scroller/get-scroll/index.ts +76 -0
- package/src/state/auto-scroller/fluid-scroller/get-window-scroll-change.ts +31 -0
- package/src/state/auto-scroller/fluid-scroller/index.ts +91 -0
- package/src/state/auto-scroller/fluid-scroller/scroll.ts +72 -0
- package/src/state/auto-scroller/index.ts +56 -0
- package/src/state/auto-scroller/jump-scroller.ts +140 -0
- package/src/state/axis.ts +26 -0
- package/src/state/calculate-drag-impact/calculate-reorder-impact.ts +138 -0
- package/src/state/can-start-drag.ts +29 -0
- package/src/state/create-store.ts +98 -0
- package/src/state/did-start-after-critical.ts +9 -0
- package/src/state/dimension-marshal/dimension-marshal-types.ts +49 -0
- package/src/state/dimension-marshal/dimension-marshal.ts +219 -0
- package/src/state/dimension-marshal/get-initial-publish.ts +66 -0
- package/src/state/dimension-marshal/while-dragging-publisher.ts +146 -0
- package/src/state/dimension-structures.ts +35 -0
- package/src/state/droppable/get-droppable.ts +103 -0
- package/src/state/droppable/is-home-of.ts +7 -0
- package/src/state/droppable/scroll-droppable.ts +53 -0
- package/src/state/droppable/should-use-placeholder.ts +7 -0
- package/src/state/droppable/util/clip.ts +17 -0
- package/src/state/droppable/util/get-subject.ts +63 -0
- package/src/state/droppable/what-is-dragged-over-from-result.ts +16 -0
- package/src/state/droppable/what-is-dragged-over.ts +16 -0
- package/src/state/droppable/with-placeholder.ts +174 -0
- package/src/state/get-center-from-impact/get-client-border-box-center/get-client-from-page-border-box-center.ts +30 -0
- package/src/state/get-center-from-impact/get-client-border-box-center/index.ts +45 -0
- package/src/state/get-center-from-impact/get-page-border-box-center/index.ts +71 -0
- package/src/state/get-center-from-impact/get-page-border-box-center/when-combining.ts +40 -0
- package/src/state/get-center-from-impact/get-page-border-box-center/when-reordering.ts +113 -0
- package/src/state/get-center-from-impact/move-relative-to.ts +68 -0
- package/src/state/get-combined-item-displacement.ts +35 -0
- package/src/state/get-displaced-by.ts +17 -0
- package/src/state/get-displacement-groups.ts +131 -0
- package/src/state/get-drag-impact/get-combine-impact.ts +131 -0
- package/src/state/get-drag-impact/get-reorder-impact.ts +145 -0
- package/src/state/get-drag-impact/index.ts +94 -0
- package/src/state/get-draggables-inside-droppable.ts +31 -0
- package/src/state/get-droppable-over.ts +161 -0
- package/src/state/get-frame.ts +10 -0
- package/src/state/get-home-location.ts +7 -0
- package/src/state/get-impact-location.ts +16 -0
- package/src/state/get-is-displaced.ts +12 -0
- package/src/state/get-lift-effect.ts +84 -0
- package/src/state/get-max-scroll.ts +32 -0
- package/src/state/is-movement-allowed.ts +13 -0
- package/src/state/is-within.ts +9 -0
- package/src/state/middleware/auto-scroll.ts +38 -0
- package/src/state/middleware/dimension-marshal-stopper.ts +20 -0
- package/src/state/middleware/drop/drop-animation-finish-middleware.ts +21 -0
- package/src/state/middleware/drop/drop-animation-flush-on-scroll-middleware.ts +63 -0
- package/src/state/middleware/drop/drop-middleware.ts +146 -0
- package/src/state/middleware/drop/get-drop-duration.ts +48 -0
- package/src/state/middleware/drop/get-drop-impact.ts +79 -0
- package/src/state/middleware/drop/get-new-home-client-offset.ts +55 -0
- package/src/state/middleware/drop/index.ts +2 -0
- package/src/state/middleware/focus.ts +42 -0
- package/src/state/middleware/lift.ts +66 -0
- package/src/state/middleware/pending-drop.ts +37 -0
- package/src/state/middleware/responders/async-marshal.ts +58 -0
- package/src/state/middleware/responders/expiring-announce.ts +44 -0
- package/src/state/middleware/responders/index.ts +2 -0
- package/src/state/middleware/responders/is-equal.ts +57 -0
- package/src/state/middleware/responders/publisher.ts +255 -0
- package/src/state/middleware/responders/responders-middleware.ts +81 -0
- package/src/state/middleware/scroll-listener.ts +31 -0
- package/src/state/middleware/style.ts +22 -0
- package/src/state/middleware/util/validate-dimensions.ts +71 -0
- package/src/state/move-in-direction/index.ts +85 -0
- package/src/state/move-in-direction/move-cross-axis/get-best-cross-axis-droppable.ts +169 -0
- package/src/state/move-in-direction/move-cross-axis/get-closest-draggable.ts +80 -0
- package/src/state/move-in-direction/move-cross-axis/index.ts +110 -0
- package/src/state/move-in-direction/move-cross-axis/move-to-new-droppable.ts +122 -0
- package/src/state/move-in-direction/move-cross-axis/without-starting-displacement.ts +31 -0
- package/src/state/move-in-direction/move-in-direction-types.ts +10 -0
- package/src/state/move-in-direction/move-to-next-place/index.ts +133 -0
- package/src/state/move-in-direction/move-to-next-place/is-totally-visible-in-new-location.ts +53 -0
- package/src/state/move-in-direction/move-to-next-place/move-to-next-combine/index.ts +98 -0
- package/src/state/move-in-direction/move-to-next-place/move-to-next-index/from-combine.ts +53 -0
- package/src/state/move-in-direction/move-to-next-place/move-to-next-index/from-reorder.ts +44 -0
- package/src/state/move-in-direction/move-to-next-place/move-to-next-index/index.ts +87 -0
- package/src/state/no-impact.ts +33 -0
- package/src/state/patch-dimension-map.ts +11 -0
- package/src/state/patch-droppable-map.ts +10 -0
- package/src/state/position.ts +65 -0
- package/src/state/post-reducer/when-moving/refresh-snap.ts +68 -0
- package/src/state/post-reducer/when-moving/update.ts +121 -0
- package/src/state/publish-while-dragging-in-virtual/adjust-additions-for-scroll-changes.ts +59 -0
- package/src/state/publish-while-dragging-in-virtual/index.ts +159 -0
- package/src/state/publish-while-dragging-in-virtual/offset-draggable.ts +36 -0
- package/src/state/recompute-placeholders.ts +101 -0
- package/src/state/rect.ts +7 -0
- package/src/state/reducer.ts +467 -0
- package/src/state/registry/create-registry.ts +162 -0
- package/src/state/registry/registry-types.ts +106 -0
- package/src/state/registry/use-registry.ts +20 -0
- package/src/state/remove-draggable-from-list.ts +13 -0
- package/src/state/scroll-viewport.ts +34 -0
- package/src/state/spacing.ts +45 -0
- package/src/state/store-types.ts +19 -0
- package/src/state/update-displacement-visibility/recompute.ts +55 -0
- package/src/state/update-displacement-visibility/speculatively-increase.ts +112 -0
- package/src/state/visibility/is-partially-visible-through-frame.ts +60 -0
- package/src/state/visibility/is-position-in-frame.ts +12 -0
- package/src/state/visibility/is-totally-visible-through-frame-on-axis.ts +19 -0
- package/src/state/visibility/is-totally-visible-through-frame.ts +18 -0
- package/src/state/visibility/is-visible.ts +102 -0
- package/src/state/with-scroll-change/with-all-displacement.ts +15 -0
- package/src/state/with-scroll-change/with-droppable-displacement.ts +13 -0
- package/src/state/with-scroll-change/with-droppable-scroll.ts +13 -0
- package/src/state/with-scroll-change/with-viewport-displacement.ts +7 -0
- package/src/types/redux-devtools.d.ts +17 -0
- package/src/types.ts +495 -0
- package/src/view/animate-in-out/animate-in-out.tsx +98 -0
- package/src/view/animate-in-out/index.ts +2 -0
- package/src/view/check-is-valid-inner-ref.ts +15 -0
- package/src/view/context/app-context.ts +19 -0
- package/src/view/context/droppable-context.ts +12 -0
- package/src/view/context/hooks.ts +21 -0
- package/src/view/context/store-context.ts +8 -0
- package/src/view/data-attributes.ts +37 -0
- package/src/view/drag-drop-context/app.tsx +300 -0
- package/src/view/drag-drop-context/check-doctype.ts +39 -0
- package/src/view/drag-drop-context/check-react-version.ts +72 -0
- package/src/view/drag-drop-context/drag-drop-context-types.ts +8 -0
- package/src/view/drag-drop-context/drag-drop-context.tsx +60 -0
- package/src/view/drag-drop-context/error-boundary.tsx +89 -0
- package/src/view/drag-drop-context/index.ts +2 -0
- package/src/view/drag-drop-context/use-startup-validation.ts +13 -0
- package/src/view/drag-drop-context/use-unique-context-id.ts +13 -0
- package/src/view/draggable/connected-draggable.tsx +420 -0
- package/src/view/draggable/draggable-api.tsx +48 -0
- package/src/view/draggable/draggable-types.ts +204 -0
- package/src/view/draggable/draggable.tsx +167 -0
- package/src/view/draggable/get-style.ts +109 -0
- package/src/view/draggable/index.ts +2 -0
- package/src/view/draggable/use-validation.ts +70 -0
- package/src/view/droppable/connected-droppable.tsx +597 -0
- package/src/view/droppable/droppable-types.ts +96 -0
- package/src/view/droppable/droppable.tsx +167 -0
- package/src/view/droppable/index.ts +2 -0
- package/src/view/droppable/use-validation.ts +102 -0
- package/src/view/event-bindings/bind-events.ts +39 -0
- package/src/view/event-bindings/event-types.ts +15 -0
- package/src/view/get-body-element.ts +8 -0
- package/src/view/get-border-box-center-position.ts +5 -0
- package/src/view/get-document-element.ts +8 -0
- package/src/view/get-elements/find-drag-handle.ts +38 -0
- package/src/view/get-elements/find-draggable.ts +30 -0
- package/src/view/is-strict-equal.ts +2 -0
- package/src/view/is-type-of-element/is-element.ts +10 -0
- package/src/view/is-type-of-element/is-html-element.ts +10 -0
- package/src/view/is-type-of-element/is-svg-element.ts +22 -0
- package/src/view/key-codes.ts +13 -0
- package/src/view/placeholder/index.ts +2 -0
- package/src/view/placeholder/placeholder-types.ts +16 -0
- package/src/view/placeholder/placeholder.tsx +204 -0
- package/src/view/scroll-listener.ts +74 -0
- package/src/view/throw-if-invalid-inner-ref.ts +15 -0
- package/src/view/use-announcer/index.ts +2 -0
- package/src/view/use-announcer/use-announcer.ts +80 -0
- package/src/view/use-dev-setup-warning.ts +22 -0
- package/src/view/use-dev.ts +9 -0
- package/src/view/use-draggable-publisher/get-dimension.ts +44 -0
- package/src/view/use-draggable-publisher/index.ts +2 -0
- package/src/view/use-draggable-publisher/use-draggable-publisher.ts +87 -0
- package/src/view/use-droppable-publisher/check-for-nested-scroll-container.ts +27 -0
- package/src/view/use-droppable-publisher/get-closest-scrollable.ts +96 -0
- package/src/view/use-droppable-publisher/get-dimension.ts +140 -0
- package/src/view/use-droppable-publisher/get-env.ts +32 -0
- package/src/view/use-droppable-publisher/get-listener-options.ts +12 -0
- package/src/view/use-droppable-publisher/get-scroll.ts +7 -0
- package/src/view/use-droppable-publisher/index.ts +2 -0
- package/src/view/use-droppable-publisher/is-in-fixed-container.ts +21 -0
- package/src/view/use-droppable-publisher/use-droppable-publisher.ts +288 -0
- package/src/view/use-focus-marshal/focus-marshal-types.ts +14 -0
- package/src/view/use-focus-marshal/index.ts +2 -0
- package/src/view/use-focus-marshal/use-focus-marshal.ts +128 -0
- package/src/view/use-hidden-text-element/index.ts +2 -0
- package/src/view/use-hidden-text-element/use-hidden-text-element.ts +62 -0
- package/src/view/use-isomorphic-layout-effect.ts +18 -0
- package/src/view/use-previous-ref.ts +26 -0
- package/src/view/use-required-context.ts +22 -0
- package/src/view/use-sensor-marshal/closest.ts +89 -0
- package/src/view/use-sensor-marshal/find-closest-draggable-id-from-event.ts +50 -0
- package/src/view/use-sensor-marshal/index.ts +5 -0
- package/src/view/use-sensor-marshal/is-event-in-interactive-element.ts +67 -0
- package/src/view/use-sensor-marshal/lock.ts +50 -0
- package/src/view/use-sensor-marshal/sensors/use-keyboard-sensor.ts +243 -0
- package/src/view/use-sensor-marshal/sensors/use-mouse-sensor.ts +391 -0
- package/src/view/use-sensor-marshal/sensors/use-touch-sensor.ts +481 -0
- package/src/view/use-sensor-marshal/sensors/util/prevent-standard-key-events.ts +19 -0
- package/src/view/use-sensor-marshal/sensors/util/supported-page-visibility-event-name.ts +29 -0
- package/src/view/use-sensor-marshal/use-sensor-marshal.ts +504 -0
- package/src/view/use-sensor-marshal/use-validate-sensor-hooks.ts +20 -0
- package/src/view/use-style-marshal/get-styles.ts +173 -0
- package/src/view/use-style-marshal/index.ts +2 -0
- package/src/view/use-style-marshal/style-marshal-types.ts +9 -0
- package/src/view/use-style-marshal/use-style-marshal.ts +126 -0
- package/src/view/use-unique-id.ts +25 -0
- package/src/view/visually-hidden-style.ts +16 -0
- package/src/view/window/get-max-window-scroll.ts +19 -0
- package/src/view/window/get-viewport.ts +49 -0
- package/src/view/window/get-window-from-el.ts +12 -0
- package/src/view/window/get-window-scroll.ts +30 -0
- package/src/view/window/scroll-window.ts +7 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
import { type Position, type Rect } from 'css-box-model';
|
|
3
|
+
import type {
|
|
4
|
+
DroppableId,
|
|
5
|
+
DraggableDimension,
|
|
6
|
+
DroppableDimension,
|
|
7
|
+
DraggableDimensionMap,
|
|
8
|
+
DroppableDimensionMap,
|
|
9
|
+
DragImpact,
|
|
10
|
+
Viewport,
|
|
11
|
+
LiftEffect,
|
|
12
|
+
} from '../../types';
|
|
13
|
+
import getDroppableOver from '../get-droppable-over';
|
|
14
|
+
import getDraggablesInsideDroppable from '../get-draggables-inside-droppable';
|
|
15
|
+
import withDroppableScroll from '../with-scroll-change/with-droppable-scroll';
|
|
16
|
+
import getReorderImpact from './get-reorder-impact';
|
|
17
|
+
import getCombineImpact from './get-combine-impact';
|
|
18
|
+
import noImpact from '../no-impact';
|
|
19
|
+
import { offsetRectByPosition } from '../rect';
|
|
20
|
+
|
|
21
|
+
// Exact
|
|
22
|
+
type Args = {
|
|
23
|
+
pageOffset: Position,
|
|
24
|
+
draggable: DraggableDimension,
|
|
25
|
+
// all dimensions in system
|
|
26
|
+
draggables: DraggableDimensionMap,
|
|
27
|
+
droppables: DroppableDimensionMap,
|
|
28
|
+
previousImpact: DragImpact,
|
|
29
|
+
viewport: Viewport,
|
|
30
|
+
afterCritical: LiftEffect,
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export default ({
|
|
34
|
+
pageOffset,
|
|
35
|
+
draggable,
|
|
36
|
+
draggables,
|
|
37
|
+
droppables,
|
|
38
|
+
previousImpact,
|
|
39
|
+
viewport,
|
|
40
|
+
afterCritical,
|
|
41
|
+
}: Args): DragImpact => {
|
|
42
|
+
const pageBorderBox: Rect = offsetRectByPosition(
|
|
43
|
+
draggable.page.borderBox,
|
|
44
|
+
pageOffset,
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
const destinationId: DroppableId | null = getDroppableOver({
|
|
48
|
+
pageBorderBox,
|
|
49
|
+
draggable,
|
|
50
|
+
droppables,
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
// not dragging over anything
|
|
54
|
+
|
|
55
|
+
if (!destinationId) {
|
|
56
|
+
// A big design decision was made here to collapse the home list
|
|
57
|
+
// when not over any list. This yielded the most consistently beautiful experience.
|
|
58
|
+
return noImpact;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const destination: DroppableDimension = droppables[destinationId];
|
|
62
|
+
const insideDestination: DraggableDimension[] = getDraggablesInsideDroppable(
|
|
63
|
+
destination.descriptor.id,
|
|
64
|
+
draggables,
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
// Where the element actually is now.
|
|
68
|
+
// Need to take into account the change of scroll in the droppable
|
|
69
|
+
const pageBorderBoxWithDroppableScroll: Rect = withDroppableScroll(
|
|
70
|
+
destination,
|
|
71
|
+
pageBorderBox,
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
// checking combine first so we combine before any reordering
|
|
75
|
+
return (
|
|
76
|
+
getCombineImpact({
|
|
77
|
+
pageBorderBoxWithDroppableScroll,
|
|
78
|
+
draggable,
|
|
79
|
+
previousImpact,
|
|
80
|
+
destination,
|
|
81
|
+
insideDestination,
|
|
82
|
+
afterCritical,
|
|
83
|
+
}) ||
|
|
84
|
+
getReorderImpact({
|
|
85
|
+
pageBorderBoxWithDroppableScroll,
|
|
86
|
+
draggable,
|
|
87
|
+
destination,
|
|
88
|
+
insideDestination,
|
|
89
|
+
last: previousImpact.displaced,
|
|
90
|
+
viewport,
|
|
91
|
+
afterCritical,
|
|
92
|
+
})
|
|
93
|
+
);
|
|
94
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
import memoizeOne from 'memoize-one';
|
|
3
|
+
import { toDraggableList } from './dimension-structures';
|
|
4
|
+
import type {
|
|
5
|
+
DraggableDimension,
|
|
6
|
+
DroppableId,
|
|
7
|
+
DraggableDimensionMap,
|
|
8
|
+
} from '../types';
|
|
9
|
+
|
|
10
|
+
export default memoizeOne(
|
|
11
|
+
(
|
|
12
|
+
// using droppableId to avoid cache busted when we
|
|
13
|
+
// update the droppable (such as when it scrolls)
|
|
14
|
+
droppableId: DroppableId,
|
|
15
|
+
draggables: DraggableDimensionMap,
|
|
16
|
+
): DraggableDimension[] => {
|
|
17
|
+
const result = toDraggableList(draggables)
|
|
18
|
+
.filter(
|
|
19
|
+
(draggable: DraggableDimension): boolean =>
|
|
20
|
+
droppableId === draggable.descriptor.droppableId,
|
|
21
|
+
)
|
|
22
|
+
// Dimensions are not guarenteed to be ordered in the same order as keys
|
|
23
|
+
// So we need to sort them so they are in the correct order
|
|
24
|
+
.sort(
|
|
25
|
+
(a: DraggableDimension, b: DraggableDimension): number =>
|
|
26
|
+
a.descriptor.index - b.descriptor.index,
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
return result;
|
|
30
|
+
},
|
|
31
|
+
);
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
import { type Position, type Rect } from 'css-box-model';
|
|
3
|
+
import type {
|
|
4
|
+
DroppableDimension,
|
|
5
|
+
DroppableDimensionMap,
|
|
6
|
+
DroppableId,
|
|
7
|
+
DraggableDimension,
|
|
8
|
+
Axis,
|
|
9
|
+
} from '../types';
|
|
10
|
+
import { toDroppableList } from './dimension-structures';
|
|
11
|
+
import isPositionInFrame from './visibility/is-position-in-frame';
|
|
12
|
+
import { distance, patch } from './position';
|
|
13
|
+
import isWithin from './is-within';
|
|
14
|
+
|
|
15
|
+
// https://stackoverflow.com/questions/306316/determine-if-two-rectangles-overlap-each-other
|
|
16
|
+
// https://silentmatt.com/rectangle-intersection/
|
|
17
|
+
function getHasOverlap(first: Rect, second: Rect): boolean {
|
|
18
|
+
return (
|
|
19
|
+
first.left < second.right &&
|
|
20
|
+
first.right > second.left &&
|
|
21
|
+
first.top < second.bottom &&
|
|
22
|
+
first.bottom > second.top
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Exact
|
|
27
|
+
type Args = {
|
|
28
|
+
pageBorderBox: Rect,
|
|
29
|
+
draggable: DraggableDimension,
|
|
30
|
+
droppables: DroppableDimensionMap,
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
// Exact
|
|
34
|
+
type WithDistance = {
|
|
35
|
+
distance: number,
|
|
36
|
+
id: DroppableId,
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
// Exact
|
|
40
|
+
type GetFurthestArgs = {
|
|
41
|
+
pageBorderBox: Rect,
|
|
42
|
+
draggable: DraggableDimension,
|
|
43
|
+
candidates: DroppableDimension[],
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
function getFurthestAway({
|
|
47
|
+
pageBorderBox,
|
|
48
|
+
draggable,
|
|
49
|
+
candidates,
|
|
50
|
+
}: GetFurthestArgs): DroppableId | null {
|
|
51
|
+
// We are not comparing the center of the home list with the target list as it would
|
|
52
|
+
// give preference to giant lists
|
|
53
|
+
|
|
54
|
+
// We are measuring the distance from where the draggable started
|
|
55
|
+
// to where it is *hitting* the candidate
|
|
56
|
+
// Note: The hit point might technically not be in the bounds of the candidate
|
|
57
|
+
|
|
58
|
+
const startCenter: Position = draggable.page.borderBox.center;
|
|
59
|
+
const sorted: WithDistance[] = candidates
|
|
60
|
+
.map((candidate: DroppableDimension): WithDistance => {
|
|
61
|
+
const axis: Axis = candidate.axis;
|
|
62
|
+
const target: Position = patch(
|
|
63
|
+
candidate.axis.line,
|
|
64
|
+
// use the current center of the dragging item on the main axis
|
|
65
|
+
pageBorderBox.center[axis.line],
|
|
66
|
+
// use the center of the list on the cross axis
|
|
67
|
+
candidate.page.borderBox.center[axis.crossAxisLine],
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
return {
|
|
71
|
+
id: candidate.descriptor.id,
|
|
72
|
+
distance: distance(startCenter, target),
|
|
73
|
+
};
|
|
74
|
+
})
|
|
75
|
+
// largest value will be first
|
|
76
|
+
.sort((a: WithDistance, b: WithDistance) => b.distance - a.distance);
|
|
77
|
+
|
|
78
|
+
// just being safe
|
|
79
|
+
return sorted[0] ? sorted[0].id : null;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export default function getDroppableOver({
|
|
83
|
+
pageBorderBox,
|
|
84
|
+
draggable,
|
|
85
|
+
droppables,
|
|
86
|
+
}: Args): DroppableId | null {
|
|
87
|
+
// We know at this point that some overlap has to exist
|
|
88
|
+
const candidates: DroppableDimension[] = toDroppableList(droppables).filter(
|
|
89
|
+
(item: DroppableDimension): boolean => {
|
|
90
|
+
// Cannot be a candidate when disabled
|
|
91
|
+
if (!item.isEnabled) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Cannot be a candidate when there is no visible area
|
|
96
|
+
const active: Rect | null = item.subject.active;
|
|
97
|
+
if (!active) {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Cannot be a candidate when dragging item is not over the droppable at all
|
|
102
|
+
if (!getHasOverlap(pageBorderBox, active)) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// 1. Candidate if the center position is over a droppable
|
|
107
|
+
if (isPositionInFrame(active)(pageBorderBox.center)) {
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// 2. Candidate if an edge is over the cross axis half way point
|
|
112
|
+
// 3. Candidate if dragging item is totally over droppable on cross axis
|
|
113
|
+
|
|
114
|
+
const axis: Axis = item.axis;
|
|
115
|
+
const childCenter: number = active.center[axis.crossAxisLine];
|
|
116
|
+
const crossAxisStart: number = pageBorderBox[axis.crossAxisStart];
|
|
117
|
+
const crossAxisEnd: number = pageBorderBox[axis.crossAxisEnd];
|
|
118
|
+
|
|
119
|
+
const isContained = isWithin(
|
|
120
|
+
active[axis.crossAxisStart],
|
|
121
|
+
active[axis.crossAxisEnd],
|
|
122
|
+
);
|
|
123
|
+
|
|
124
|
+
const isStartContained: boolean = isContained(crossAxisStart);
|
|
125
|
+
const isEndContained: boolean = isContained(crossAxisEnd);
|
|
126
|
+
|
|
127
|
+
// Dragging item is totally covering the active area
|
|
128
|
+
if (!isStartContained && !isEndContained) {
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* edges must go beyond the center line in order to avoid
|
|
134
|
+
* cases were both conditions are satisfied.
|
|
135
|
+
*/
|
|
136
|
+
if (isStartContained) {
|
|
137
|
+
return crossAxisStart < childCenter;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return crossAxisEnd > childCenter;
|
|
141
|
+
},
|
|
142
|
+
);
|
|
143
|
+
|
|
144
|
+
if (!candidates.length) {
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Only one candidate - use that!
|
|
149
|
+
if (candidates.length === 1) {
|
|
150
|
+
return candidates[0].descriptor.id;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// Multiple options returned
|
|
154
|
+
// Should only occur with really large items
|
|
155
|
+
// Going to use fallback: distance from home
|
|
156
|
+
return getFurthestAway({
|
|
157
|
+
pageBorderBox,
|
|
158
|
+
draggable,
|
|
159
|
+
candidates,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
import { invariant } from '../invariant';
|
|
3
|
+
|
|
4
|
+
import type { DroppableDimension, Scrollable } from '../types';
|
|
5
|
+
|
|
6
|
+
export default (droppable: DroppableDimension): Scrollable => {
|
|
7
|
+
const frame: Scrollable | null = droppable.frame;
|
|
8
|
+
invariant(frame, 'Expected Droppable to have a frame');
|
|
9
|
+
return frame;
|
|
10
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
import type { DragImpact, DraggableLocation, Combine } from '../types';
|
|
3
|
+
|
|
4
|
+
export function tryGetDestination(impact: DragImpact): DraggableLocation | null {
|
|
5
|
+
if (impact.at && impact.at.type === 'REORDER') {
|
|
6
|
+
return impact.at.destination;
|
|
7
|
+
}
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function tryGetCombine(impact: DragImpact): Combine | null {
|
|
12
|
+
if (impact.at && impact.at.type === 'COMBINE') {
|
|
13
|
+
return impact.at.combine;
|
|
14
|
+
}
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
import type { DisplacementGroups, DraggableId } from '../types';
|
|
3
|
+
|
|
4
|
+
// Exact
|
|
5
|
+
type Args = {
|
|
6
|
+
displaced: DisplacementGroups,
|
|
7
|
+
id: DraggableId,
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export default function getIsDisplaced({ displaced, id }: Args): boolean {
|
|
11
|
+
return Boolean(displaced.visible[id] || displaced.invisible[id]);
|
|
12
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
import { invariant } from '../invariant';
|
|
3
|
+
import getHomeLocation from './get-home-location';
|
|
4
|
+
import type {
|
|
5
|
+
DraggableDimension,
|
|
6
|
+
DroppableDimension,
|
|
7
|
+
DraggableDimensionMap,
|
|
8
|
+
DragImpact,
|
|
9
|
+
DisplacedBy,
|
|
10
|
+
Viewport,
|
|
11
|
+
DraggableIdMap,
|
|
12
|
+
DisplacementGroups,
|
|
13
|
+
LiftEffect,
|
|
14
|
+
} from '../types';
|
|
15
|
+
import getDraggablesInsideDroppable from './get-draggables-inside-droppable';
|
|
16
|
+
import getDisplacedBy from './get-displaced-by';
|
|
17
|
+
import getDisplacementGroups from './get-displacement-groups';
|
|
18
|
+
|
|
19
|
+
// Exact
|
|
20
|
+
type Args = {
|
|
21
|
+
draggable: DraggableDimension,
|
|
22
|
+
home: DroppableDimension,
|
|
23
|
+
draggables: DraggableDimensionMap,
|
|
24
|
+
viewport: Viewport,
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
// Exact
|
|
28
|
+
type Result = {
|
|
29
|
+
afterCritical: LiftEffect,
|
|
30
|
+
impact: DragImpact,
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export default ({ draggable, home, draggables, viewport }: Args): Result => {
|
|
34
|
+
const displacedBy: DisplacedBy = getDisplacedBy(
|
|
35
|
+
home.axis,
|
|
36
|
+
draggable.displaceBy,
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
const insideHome: DraggableDimension[] = getDraggablesInsideDroppable(
|
|
40
|
+
home.descriptor.id,
|
|
41
|
+
draggables,
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
// in a list that does not start at 0 the descriptor.index might be different from the index in the list
|
|
45
|
+
// eg a list could be: [2,3,4]. A descriptor.index of '2' would actually be in index '0' of the list
|
|
46
|
+
const rawIndex: number = insideHome.indexOf(draggable);
|
|
47
|
+
invariant(rawIndex !== -1, 'Expected draggable to be inside home list');
|
|
48
|
+
|
|
49
|
+
const afterDragging: DraggableDimension[] = insideHome.slice(rawIndex + 1);
|
|
50
|
+
const effected: DraggableIdMap = afterDragging.reduce(
|
|
51
|
+
(previous: DraggableIdMap, item: DraggableDimension): DraggableIdMap => {
|
|
52
|
+
previous[item.descriptor.id] = true;
|
|
53
|
+
return previous;
|
|
54
|
+
},
|
|
55
|
+
{},
|
|
56
|
+
);
|
|
57
|
+
const afterCritical: LiftEffect = {
|
|
58
|
+
inVirtualList: home.descriptor.mode === 'virtual',
|
|
59
|
+
displacedBy,
|
|
60
|
+
effected,
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
const displaced: DisplacementGroups = getDisplacementGroups({
|
|
64
|
+
afterDragging,
|
|
65
|
+
destination: home,
|
|
66
|
+
displacedBy,
|
|
67
|
+
last: null,
|
|
68
|
+
viewport: viewport.frame,
|
|
69
|
+
// originally we do not want any animation as we want
|
|
70
|
+
// everything to be fixed in the same position that
|
|
71
|
+
// it started in
|
|
72
|
+
forceShouldAnimate: false,
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
const impact: DragImpact = {
|
|
76
|
+
displaced,
|
|
77
|
+
displacedBy,
|
|
78
|
+
at: {
|
|
79
|
+
type: 'REORDER',
|
|
80
|
+
destination: getHomeLocation(draggable.descriptor),
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
return { impact, afterCritical };
|
|
84
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
import { type Position } from 'css-box-model';
|
|
3
|
+
import { subtract } from './position';
|
|
4
|
+
|
|
5
|
+
// Exact
|
|
6
|
+
type Args = {
|
|
7
|
+
scrollHeight: number,
|
|
8
|
+
scrollWidth: number,
|
|
9
|
+
height: number,
|
|
10
|
+
width: number,
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export default ({
|
|
14
|
+
scrollHeight,
|
|
15
|
+
scrollWidth,
|
|
16
|
+
height,
|
|
17
|
+
width,
|
|
18
|
+
}: Args): Position => {
|
|
19
|
+
const maxScroll: Position = subtract(
|
|
20
|
+
// full size
|
|
21
|
+
{ x: scrollWidth, y: scrollHeight },
|
|
22
|
+
// viewport size
|
|
23
|
+
{ x: width, y: height },
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
const adjustedMaxScroll: Position = {
|
|
27
|
+
x: Math.max(0, maxScroll.x),
|
|
28
|
+
y: Math.max(0, maxScroll.y),
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
return adjustedMaxScroll;
|
|
32
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
import type { CollectingState, DraggingState, State } from '../types';
|
|
3
|
+
|
|
4
|
+
export default function isMovementAllowed(
|
|
5
|
+
state: State,
|
|
6
|
+
): state is DraggingState | CollectingState {
|
|
7
|
+
return state.phase === 'DRAGGING' || state.phase === 'COLLECTING';
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
// Using function declaration as arrow function does not play well with the %checks syntax
|
|
11
|
+
// export default function isMovementAllowed(state: State): boolean %checks {
|
|
12
|
+
// return state.phase === 'DRAGGING' || state.phase === 'COLLECTING';
|
|
13
|
+
// }
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
import { invariant } from '../../invariant';
|
|
3
|
+
import type { AutoScroller } from '../auto-scroller/auto-scroller-types';
|
|
4
|
+
import type { Action, Dispatch, MiddlewareStore } from '../store-types';
|
|
5
|
+
import type { State } from '../../types';
|
|
6
|
+
|
|
7
|
+
const shouldStop = (action: Action): boolean =>
|
|
8
|
+
action.type === 'DROP_COMPLETE' ||
|
|
9
|
+
action.type === 'DROP_ANIMATE' ||
|
|
10
|
+
action.type === 'FLUSH';
|
|
11
|
+
|
|
12
|
+
export default (autoScroller: AutoScroller) => (store: MiddlewareStore) => (
|
|
13
|
+
next: Dispatch,
|
|
14
|
+
) => (action: Action): any => {
|
|
15
|
+
if (shouldStop(action)) {
|
|
16
|
+
autoScroller.stop();
|
|
17
|
+
next(action);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if (action.type === 'INITIAL_PUBLISH') {
|
|
22
|
+
// letting the action go first to hydrate the state
|
|
23
|
+
next(action);
|
|
24
|
+
const state: State = store.getState();
|
|
25
|
+
invariant(
|
|
26
|
+
state.phase === 'DRAGGING',
|
|
27
|
+
'Expected phase to be DRAGGING after INITIAL_PUBLISH',
|
|
28
|
+
);
|
|
29
|
+
autoScroller.start(state);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// auto scroll happens in response to state changes
|
|
34
|
+
// releasing all actions to the reducer first
|
|
35
|
+
next(action);
|
|
36
|
+
|
|
37
|
+
autoScroller.scroll(store.getState());
|
|
38
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
import type { Action, Dispatch } from '../store-types';
|
|
3
|
+
import type { DimensionMarshal } from '../dimension-marshal/dimension-marshal-types';
|
|
4
|
+
|
|
5
|
+
export default (marshal: DimensionMarshal) => () => (next: Dispatch) => (
|
|
6
|
+
action: Action,
|
|
7
|
+
): any => {
|
|
8
|
+
// Not stopping a collection on a 'DROP' as we want a collection to continue
|
|
9
|
+
if (
|
|
10
|
+
// drag is finished
|
|
11
|
+
action.type === 'DROP_COMPLETE' ||
|
|
12
|
+
action.type === 'FLUSH' ||
|
|
13
|
+
// no longer accepting changes once the drop has started
|
|
14
|
+
action.type === 'DROP_ANIMATE'
|
|
15
|
+
) {
|
|
16
|
+
marshal.stopPublishing();
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
next(action);
|
|
20
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
import { invariant } from '../../../invariant';
|
|
3
|
+
import { completeDrop } from '../../action-creators';
|
|
4
|
+
import type { State } from '../../../types';
|
|
5
|
+
import type { MiddlewareStore, Action, Dispatch } from '../../store-types';
|
|
6
|
+
|
|
7
|
+
export default (store: MiddlewareStore) => (next: Dispatch) => (
|
|
8
|
+
action: Action,
|
|
9
|
+
): any => {
|
|
10
|
+
if (action.type !== 'DROP_ANIMATION_FINISHED') {
|
|
11
|
+
next(action);
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const state: State = store.getState();
|
|
16
|
+
invariant(
|
|
17
|
+
state.phase === 'DROP_ANIMATING',
|
|
18
|
+
'Cannot finish a drop animating when no drop is occurring',
|
|
19
|
+
);
|
|
20
|
+
store.dispatch(completeDrop({ completed: state.completed }));
|
|
21
|
+
};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
import { dropAnimationFinished } from '../../action-creators';
|
|
3
|
+
import type { AnimationFrameID, State } from '../../../types';
|
|
4
|
+
import type { MiddlewareStore, Action, Dispatch } from '../../store-types';
|
|
5
|
+
import type { EventBinding } from '../../../view/event-bindings/event-types';
|
|
6
|
+
import bindEvents from '../../../view/event-bindings/bind-events';
|
|
7
|
+
|
|
8
|
+
export default (store: MiddlewareStore) => {
|
|
9
|
+
let unbind: (() => void) | null;
|
|
10
|
+
let frameId: AnimationFrameID | null= null;
|
|
11
|
+
|
|
12
|
+
function clear() {
|
|
13
|
+
if (frameId) {
|
|
14
|
+
cancelAnimationFrame(frameId);
|
|
15
|
+
frameId = null;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if (unbind) {
|
|
19
|
+
unbind();
|
|
20
|
+
unbind = null;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return (next: Dispatch) => (action: Action): any => {
|
|
25
|
+
if (
|
|
26
|
+
action.type === 'FLUSH' ||
|
|
27
|
+
action.type === 'DROP_COMPLETE' ||
|
|
28
|
+
action.type === 'DROP_ANIMATION_FINISHED'
|
|
29
|
+
) {
|
|
30
|
+
clear();
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
next(action);
|
|
34
|
+
|
|
35
|
+
if (action.type !== 'DROP_ANIMATE') {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const binding: EventBinding = {
|
|
40
|
+
eventName: 'scroll',
|
|
41
|
+
// capture: true will catch all scroll events, event from scroll containers
|
|
42
|
+
// once: just in case, we only want to ever fire one
|
|
43
|
+
options: { capture: true, passive: false, once: true },
|
|
44
|
+
fn: function flushDropAnimation() {
|
|
45
|
+
const state: State = store.getState();
|
|
46
|
+
if (state.phase === 'DROP_ANIMATING') {
|
|
47
|
+
store.dispatch(dropAnimationFinished());
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
// The browser can batch a few scroll events in a single frame
|
|
53
|
+
// including the one that ended the drag.
|
|
54
|
+
// Binding after a requestAnimationFrame ensures that any scrolls caused
|
|
55
|
+
// by the auto scroller are finished
|
|
56
|
+
// TODO: why is a second window scroll being fired?
|
|
57
|
+
// It leads to funny drop positions :(
|
|
58
|
+
frameId = requestAnimationFrame(() => {
|
|
59
|
+
frameId = null;
|
|
60
|
+
unbind = bindEvents(window, [binding], {});
|
|
61
|
+
});
|
|
62
|
+
};
|
|
63
|
+
};
|