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