import PointerInteraction,{centroid as centroidFromPointers}from"./Pointer.js";import{FALSE}from"../functions.js";import{all,focusWithTabindex,noModifierKeys,primaryAction}from"../events/condition.js";import{easeOut}from"../easing.js";import{rotate as rotateCoordinate,scale as scaleCoordinate}from"../coordinate.js";class DragPan extends PointerInteraction{constructor(t){super({stopDown:FALSE}),this.kinetic_=(t=t||{}).kinetic,this.lastCentroid=null,this.lastPointersCount_,this.panning_=!1;var i=t.condition||all(noModifierKeys,primaryAction);this.condition_=t.onFocusOnly?all(focusWithTabindex,i):i,this.noKinetic_=!1}handleDragEvent(t){const i=t.map;this.panning_||(this.panning_=!0,i.getView().beginInteraction());var n=this.targetPointers,e=i.getEventPixel(centroidFromPointers(n));if(n.length==this.lastPointersCount_){if(this.kinetic_&&this.kinetic_.update(e[0],e[1]),this.lastCentroid){var o=[this.lastCentroid[0]-e[0],e[1]-this.lastCentroid[1]];const i=t.map,s=i.getView();scaleCoordinate(o,s.getResolution()),rotateCoordinate(o,s.getRotation()),s.adjustCenterInternal(o)}}else this.kinetic_&&this.kinetic_.begin();this.lastCentroid=e,this.lastPointersCount_=n.length,t.originalEvent.preventDefault()}handleUpEvent(t){const i=t.map,n=i.getView();var e,o;return 0===this.targetPointers.length?(!this.noKinetic_&&this.kinetic_&&this.kinetic_.end()&&(t=this.kinetic_.getDistance(),e=this.kinetic_.getAngle(),o=n.getCenterInternal(),o=i.getPixelFromCoordinateInternal(o),o=i.getCoordinateFromPixelInternal([o[0]-t*Math.cos(e),o[1]-t*Math.sin(e)]),n.animateInternal({center:n.getConstrainedCenter(o),duration:500,easing:easeOut})),this.panning_&&(this.panning_=!1,n.endInteraction()),!1):(this.kinetic_&&this.kinetic_.begin(),!(this.lastCentroid=null))}handleDownEvent(t){if(0<this.targetPointers.length&&this.condition_(t)){const i=t.map,n=i.getView();return this.lastCentroid=null,n.getAnimating()&&n.cancelAnimations(),this.kinetic_&&this.kinetic_.begin(),this.noKinetic_=1<this.targetPointers.length,!0}return!1}}export default DragPan;