28 lines
930 B
JavaScript
28 lines
930 B
JavaScript
import { Feature } from '../../motion/features/Feature.mjs';
|
|
import { noop } from '../../utils/noop.mjs';
|
|
import { VisualElementDragControls } from './VisualElementDragControls.mjs';
|
|
|
|
class DragGesture extends Feature {
|
|
constructor(node) {
|
|
super(node);
|
|
this.removeGroupControls = noop;
|
|
this.removeListeners = noop;
|
|
this.controls = new VisualElementDragControls(node);
|
|
}
|
|
mount() {
|
|
// If we've been provided a DragControls for manual control over the drag gesture,
|
|
// subscribe this component to it on mount.
|
|
const { dragControls } = this.node.getProps();
|
|
if (dragControls) {
|
|
this.removeGroupControls = dragControls.subscribe(this.controls);
|
|
}
|
|
this.removeListeners = this.controls.addListeners() || noop;
|
|
}
|
|
unmount() {
|
|
this.removeGroupControls();
|
|
this.removeListeners();
|
|
}
|
|
}
|
|
|
|
export { DragGesture };
|